<?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>121926</bug_id>
          
          <creation_ts>2013-09-25 14:47:04 -0700</creation_ts>
          <short_desc>DoYouEvenBench: Add a test case for FlightJS</short_desc>
          <delta_ts>2013-09-25 15:18:10 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>kling</cc>
    
    <cc>koivisto</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>933207</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-09-25 14:47:04 -0700</bug_when>
    <thetext>We should have a test case for Twitter&apos;s FlightJS.

Thankfully, it has a nice example app: http://flightjs.github.io/example-app/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>933212</commentid>
    <comment_count>1</comment_count>
      <attachid>212628</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-09-25 14:59:49 -0700</bug_when>
    <thetext>Created attachment 212628
Adds a test case</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>933213</commentid>
    <comment_count>2</comment_count>
      <attachid>212629</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-09-25 15:05:33 -0700</bug_when>
    <thetext>Created attachment 212629
Got rid of flightjs-example-app/test</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>933214</commentid>
    <comment_count>3</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-09-25 15:06:24 -0700</bug_when>
    <thetext>With this test case, WebKit is back to the first place. Firefox 24 is right behind us.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>933216</commentid>
    <comment_count>4</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-09-25 15:15:12 -0700</bug_when>
    <thetext>I&apos;m amazed by how much insight all these test cases are giving us.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>933218</commentid>
    <comment_count>5</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-09-25 15:18:10 -0700</bug_when>
    <thetext>Committed r156425: &lt;http://trac.webkit.org/changeset/156425&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>212628</attachid>
            <date>2013-09-25 14:59:49 -0700</date>
            <delta_ts>2013-09-25 15:05:15 -0700</delta_ts>
            <desc>Adds a test case</desc>
            <filename>bug-121926-20130925145952.patch</filename>
            <type>text/plain</type>
            <size>1268625</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1h
bmNlVGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNTY0MjIpCisrKyBQZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzNiBAQAorMjAxMy0wOS0yNSAg
Unlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBEb1lvdUV2ZW5CZW5j
aDogQWRkIGEgdGVzdCBjYXNlIGZvciBGbGlnaHRKUworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIxOTI2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGEgRmxpZ2h0SlMgdGVzdCBjYXNlLgorCisgICAg
ICAgICogRG9Zb3VFdmVuQmVuY2gvYmVuY2htYXJrLmh0bWw6CisgICAgICAgICogRG9Zb3VFdmVu
QmVuY2gvYmVuY2htYXJrLmpzOgorICAgICAgICAqIERvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4
YW1wbGUtYXBwOiBBZGRlZC4KKyAgICAgICAgKiBEb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFt
cGxlLWFwcC8uZ2l0YXR0cmlidXRlczogQWRkZWQuCisgICAgICAgICogRG9Zb3VFdmVuQmVuY2gv
ZmxpZ2h0anMtZXhhbXBsZS1hcHAvLmdpdGlnbm9yZTogQWRkZWQuCisgICAgICAgICogRG9Zb3VF
dmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvLnRyYXZpcy55bWw6IEFkZGVkLgorICAgICAg
ICAqIERvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL0xJQ0VOU0UubWQ6IEFkZGVk
LgorICAgICAgICAqIERvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL1JFQURNRS5t
ZDogQWRkZWQuCisgICAgICAgICogRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAv
YXBwOiBBZGRlZC4KKyAgICAgICAgKiBEb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFw
cC9hcHAvYm9vdDogQWRkZWQuCisgICAgICAgICogRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhh
bXBsZS1hcHAvYXBwL2Jvb3QvcGFnZS5qczogQWRkZWQuCisgICAgICAgICogRG9Zb3VFdmVuQmVu
Y2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvYXBwL2NvbXBvbmVudF9kYXRhOiBBZGRlZC4KKyAgICAg
ICAgKiBEb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9hcHAvY29tcG9uZW50X2Rh
dGEvY29tcG9zZV9ib3guanM6IEFkZGVkLgorICAgICAgICAqIERvWW91RXZlbkJlbmNoL2ZsaWdo
dGpzLWV4YW1wbGUtYXBwL2FwcC9jb21wb25lbnRfZGF0YS9tYWlsX2l0ZW1zLmpzOiBBZGRlZC4K
KyAgICAgICAgKiBEb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9hcHAvY29tcG9u
ZW50X2RhdGEvbW92ZV90by5qczogQWRkZWQuCisgICAgICAgICogRG9Zb3VFdmVuQmVuY2gvZmxp
Z2h0anMtZXhhbXBsZS1hcHAvYXBwL2NvbXBvbmVudF91aTogQWRkZWQuCisgICAgICAgICogRG9Z
b3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvYXBwL2NvbXBvbmVudF91aS9jb21wb3Nl
X2JveC5qczogQWRkZWQuCisgICAgICAgICogRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBs
ZS1hcHAvYXBwL2NvbXBvbmVudF91aS9mb2xkZXJzLmpzOiBBZGRlZC4KKyAgICAgICAgKiBEb1lv
dUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9hcHAvY29tcG9uZW50X3VpL21haWxfY29u
dHJvbHMuanM6IEFkZGVkLgorICAgICAgICAqIERvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1w
bGUtYXBwL2FwcC9jb21wb25lbnRfdWkvbWFpbF9pdGVtcy5qczogQWRkZWQuCisgICAgICAgICog
RG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvYXBwL2NvbXBvbmVudF91aS9tb3Zl
X3RvX3NlbGVjdG9yLmpzOiBBZGRlZC4KKyAgICAgICAgKiBEb1lvdUV2ZW5CZW5jaC9mbGlnaHRq
cy1leGFtcGxlLWFwcC9hcHAvY29tcG9uZW50X3VpL3dpdGhfc2VsZWN0LmpzOiBBZGRlZC4KKyAg
ICAgICAgKiBEb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9hcHAvY3NzOiBBZGRl
ZC4KKyAgICAgICAgKiBEb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9hcHAvY3Nz
L2N1c3RvbS5jc3M6IEFkZGVkLgorICAgICAgICAqIERvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4
YW1wbGUtYXBwL2FwcC9kYXRhLmpzOiBBZGRlZC4KKyAgICAgICAgKiBEb1lvdUV2ZW5CZW5jaC9m
bGlnaHRqcy1leGFtcGxlLWFwcC9hcHAvdGVtcGxhdGVzLmpzOiBBZGRlZC4KKyAgICAgICAgKiBE
b1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzOiBBZGRlZC4KKyAg
ICAgICAgKiBEb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2Jv
b3RzdHJhcDogQWRkZWQuCisgICAgICAgICogRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBs
ZS1hcHAvY29tcG9uZW50cy9ib290c3RyYXAvY3NzOiBBZGRlZC4KKyAgICAgICAgKiBEb1lvdUV2
ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2Jvb3RzdHJhcC9jc3MvYm9v
dHN0cmFwLXJlc3BvbnNpdmUuY3NzOiBBZGRlZC4KKyAgICAgICAgKiBEb1lvdUV2ZW5CZW5jaC9m
bGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2Jvb3RzdHJhcC9jc3MvYm9vdHN0cmFwLXJl
c3BvbnNpdmUubWluLmNzczogQWRkZWQuCisgICAgICAgICogRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0
anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9ib290c3RyYXAvY3NzL2Jvb3RzdHJhcC5jc3M6IEFk
ZGVkLgorICAgICAgICAqIERvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBv
bmVudHMvYm9vdHN0cmFwL2Nzcy9ib290c3RyYXAubWluLmNzczogQWRkZWQuCisgICAgICAgICog
RG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9ib290c3RyYXAv
aW1nOiBBZGRlZC4KKyAgICAgICAgKiBEb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFw
cC9jb21wb25lbnRzL2Jvb3RzdHJhcC9pbWcvZ2x5cGhpY29ucy1oYWxmbGluZ3Mtd2hpdGUucG5n
OiBBZGRlZC4KKyAgICAgICAgKiBEb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9j
b21wb25lbnRzL2Jvb3RzdHJhcC9pbWcvZ2x5cGhpY29ucy1oYWxmbGluZ3MucG5nOiBBZGRlZC4K
KyAgICAgICAgKiBEb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRz
L2Jvb3RzdHJhcC9qczogQWRkZWQuCisgICAgICAgICogRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMt
ZXhhbXBsZS1hcHAvY29tcG9uZW50cy9ib290c3RyYXAvanMvYm9vdHN0cmFwLmpzOiBBZGRlZC4K
KyAgICAgICAgKiBEb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRz
L2Jvb3RzdHJhcC9qcy9ib290c3RyYXAubWluLmpzOiBBZGRlZC4KKyAgICAgICAgKiBEb1lvdUV2
ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2VzNS1zaGltOiBBZGRlZC4K
KyAgICAgICAgKiBEb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRz
L2VzNS1zaGltLy5naXRpZ25vcmU6IEFkZGVkLgorICAgICAgICAqIERvWW91RXZlbkJlbmNoL2Zs
aWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvZXM1LXNoaW0vQ0hBTkdFUzogQWRkZWQuCisg
ICAgICAgICogRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9l
czUtc2hpbS9DT05UUklCVVRPUlMubWQ6IEFkZGVkLgorICAgICAgICAqIERvWW91RXZlbkJlbmNo
L2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvZXM1LXNoaW0vTElDRU5TRTogQWRkZWQu
CisgICAgICAgICogRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50
cy9lczUtc2hpbS9SRUFETUUubWQ6IEFkZGVkLgorICAgICAgICAqIERvWW91RXZlbkJlbmNoL2Zs
aWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvZXM1LXNoaW0vY29tcG9uZW50Lmpzb246IEFk
ZGVkLgorICAgICAgICAqIERvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBv
bmVudHMvZXM1LXNoaW0vZXM1LXNoYW0uanM6IEFkZGVkLgorICAgICAgICAqIERvWW91RXZlbkJl
bmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvZXM1LXNoaW0vZXM1LXNoYW0ubWlu
LmpzOiBBZGRlZC4KKyAgICAgICAgKiBEb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFw
cC9jb21wb25lbnRzL2VzNS1zaGltL2VzNS1zaGltLmpzOiBBZGRlZC4KKyAgICAgICAgKiBEb1lv
dUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2VzNS1zaGltL2VzNS1z
aGltLm1pbi5qczogQWRkZWQuCisgICAgICAgICogRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhh
bXBsZS1hcHAvY29tcG9uZW50cy9lczUtc2hpbS9wYWNrYWdlLmpzb246IEFkZGVkLgorICAgICAg
ICAqIERvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvZXM1LXNo
aW0vdGVzdHM6IEFkZGVkLgorICAgICAgICAqIERvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1w
bGUtYXBwL2NvbXBvbmVudHMvZXM1LXNoaW0vdGVzdHMvaGVscGVyczogQWRkZWQuCisgICAgICAg
ICogRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9lczUtc2hp
bS90ZXN0cy9oZWxwZXJzL2gta2lsbC5qczogQWRkZWQuCisgICAgICAgICogRG9Zb3VFdmVuQmVu
Y2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9lczUtc2hpbS90ZXN0cy9oZWxwZXJz
L2gtbWF0Y2hlcnMuanM6IEFkZGVkLgorICAgICAgICAqIERvWW91RXZlbkJlbmNoL2ZsaWdodGpz
LWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvZXM1LXNoaW0vdGVzdHMvaGVscGVycy9oLmpzOiBBZGRl
ZC4KKyAgICAgICAgKiBEb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25l
bnRzL2VzNS1zaGltL3Rlc3RzL2luZGV4Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIERvWW91RXZl
bkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvZXM1LXNoaW0vdGVzdHMvbGli
OiBBZGRlZC4KKyAgICAgICAgKiBEb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9j
b21wb25lbnRzL2VzNS1zaGltL3Rlc3RzL2xpYi9qYXNtaW5lLWh0bWwuanM6IEFkZGVkLgorICAg
ICAgICAqIERvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvZXM1
LXNoaW0vdGVzdHMvbGliL2phc21pbmUuY3NzOiBBZGRlZC4KKyAgICAgICAgKiBEb1lvdUV2ZW5C
ZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2VzNS1zaGltL3Rlc3RzL2xpYi9q
YXNtaW5lLmpzOiBBZGRlZC4KKyAgICAgICAgKiBEb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFt
cGxlLWFwcC9jb21wb25lbnRzL2VzNS1zaGltL3Rlc3RzL2xpYi9qYXNtaW5lX2Zhdmljb24ucG5n
OiBBZGRlZC4KKyAgICAgICAgKiBEb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9j
b21wb25lbnRzL2VzNS1zaGltL3Rlc3RzL2xpYi9qc29uMi5qczogQWRkZWQuCisgICAgICAgICog
RG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9lczUtc2hpbS90
ZXN0cy9zcGVjOiBBZGRlZC4KKyAgICAgICAgKiBEb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFt
cGxlLWFwcC9jb21wb25lbnRzL2VzNS1zaGltL3Rlc3RzL3NwZWMvcy1hcnJheS5qczogQWRkZWQu
CisgICAgICAgICogRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50
cy9lczUtc2hpbS90ZXN0cy9zcGVjL3MtZGF0ZS5qczogQWRkZWQuCisgICAgICAgICogRG9Zb3VF
dmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9lczUtc2hpbS90ZXN0cy9z
cGVjL3MtZnVuY3Rpb24uanM6IEFkZGVkLgorICAgICAgICAqIERvWW91RXZlbkJlbmNoL2ZsaWdo
dGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvZXM1LXNoaW0vdGVzdHMvc3BlYy9zLW9iamVjdC5q
czogQWRkZWQuCisgICAgICAgICogRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAv
Y29tcG9uZW50cy9lczUtc2hpbS90ZXN0cy9zcGVjL3Mtc3RyaW5nLmpzOiBBZGRlZC4KKyAgICAg
ICAgKiBEb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2ZsaWdo
dDogQWRkZWQuCisgICAgICAgICogRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAv
Y29tcG9uZW50cy9mbGlnaHQvLnRyYXZpcy55bWw6IEFkZGVkLgorICAgICAgICAqIERvWW91RXZl
bkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvZmxpZ2h0L2xpYjogQWRkZWQu
CisgICAgICAgICogRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50
cy9mbGlnaHQvbGliL2FkdmljZS5qczogQWRkZWQuCisgICAgICAgICogRG9Zb3VFdmVuQmVuY2gv
ZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9mbGlnaHQvbGliL2NvbXBvbmVudC5qczog
QWRkZWQuCisgICAgICAgICogRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29t
cG9uZW50cy9mbGlnaHQvbGliL2NvbXBvc2UuanM6IEFkZGVkLgorICAgICAgICAqIERvWW91RXZl
bkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvZmxpZ2h0L2xpYi9pbmRleC5q
czogQWRkZWQuCisgICAgICAgICogRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAv
Y29tcG9uZW50cy9mbGlnaHQvbGliL2xvZ2dlci5qczogQWRkZWQuCisgICAgICAgICogRG9Zb3VF
dmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9mbGlnaHQvbGliL3JlZ2lz
dHJ5LmpzOiBBZGRlZC4KKyAgICAgICAgKiBEb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxl
LWFwcC9jb21wb25lbnRzL2ZsaWdodC9saWIvdXRpbHMuanM6IEFkZGVkLgorICAgICAgICAqIERv
WW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvZmxpZ2h0L3Rvb2xz
OiBBZGRlZC4KKyAgICAgICAgKiBEb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9j
b21wb25lbnRzL2ZsaWdodC90b29scy9kZWJ1ZzogQWRkZWQuCisgICAgICAgICogRG9Zb3VFdmVu
QmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9mbGlnaHQvdG9vbHMvZGVidWcv
ZGVidWcuanM6IEFkZGVkLgorICAgICAgICAqIERvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1w
bGUtYXBwL2NvbXBvbmVudHMvamFzbWluZS1mbGlnaHQ6IEFkZGVkLgorICAgICAgICAqIERvWW91
RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvamFzbWluZS1mbGlnaHQv
TElDRU5TRS5tZDogQWRkZWQuCisgICAgICAgICogRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhh
bXBsZS1hcHAvY29tcG9uZW50cy9qYXNtaW5lLWZsaWdodC9SRUFETUUubWQ6IEFkZGVkLgorICAg
ICAgICAqIERvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvamFz
bWluZS1mbGlnaHQvYm93ZXIuanNvbjogQWRkZWQuCisgICAgICAgICogRG9Zb3VFdmVuQmVuY2gv
ZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9qYXNtaW5lLWZsaWdodC9saWI6IEFkZGVk
LgorICAgICAgICAqIERvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVu
dHMvamFzbWluZS1mbGlnaHQvbGliL2phc21pbmUtZmxpZ2h0LmpzOiBBZGRlZC4KKyAgICAgICAg
KiBEb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2phc21pbmUt
anF1ZXJ5OiBBZGRlZC4KKyAgICAgICAgKiBEb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxl
LWFwcC9jb21wb25lbnRzL2phc21pbmUtanF1ZXJ5L2xpYjogQWRkZWQuCisgICAgICAgICogRG9Z
b3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9qYXNtaW5lLWpxdWVy
eS9saWIvamFzbWluZS1qcXVlcnkuanM6IEFkZGVkLgorICAgICAgICAqIERvWW91RXZlbkJlbmNo
L2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvanF1ZXJ5OiBBZGRlZC4KKyAgICAgICAg
KiBEb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2pxdWVyeS9j
b21wb25lbnQuanNvbjogQWRkZWQuCisgICAgICAgICogRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMt
ZXhhbXBsZS1hcHAvY29tcG9uZW50cy9qcXVlcnkvY29tcG9zZXIuanNvbjogQWRkZWQuCisgICAg
ICAgICogRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9qcXVl
cnkvanF1ZXJ5LmpzOiBBZGRlZC4KKyAgICAgICAgKiBEb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1l
eGFtcGxlLWFwcC9jb21wb25lbnRzL2pxdWVyeS9qcXVlcnkubWluLmpzOiBBZGRlZC4KKyAgICAg
ICAgKiBEb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL211c3Rh
Y2hlOiBBZGRlZC4KKyAgICAgICAgKiBEb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFw
cC9jb21wb25lbnRzL211c3RhY2hlL211c3RhY2hlLmpzOiBBZGRlZC4KKyAgICAgICAgKiBEb1lv
dUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL3JlcXVpcmVqczogQWRk
ZWQuCisgICAgICAgICogRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9u
ZW50cy9yZXF1aXJlanMvcmVxdWlyZS5qczogQWRkZWQuCisgICAgICAgICogRG9Zb3VFdmVuQmVu
Y2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvaW5kZXguaHRtbDogQWRkZWQuCisgICAgICAgICogRG9Z
b3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAva2FybWEuY29uZi5qczogQWRkZWQuCisg
ICAgICAgICogRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvcGFja2FnZS5qc29u
OiBBZGRlZC4KKyAgICAgICAgKiBEb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9y
ZXF1aXJlTWFpbi5qczogQWRkZWQuCisgICAgICAgICogRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMt
ZXhhbXBsZS1hcHAvdGVzdDogQWRkZWQuCisgICAgICAgICogRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0
anMtZXhhbXBsZS1hcHAvdGVzdC9maXh0dXJlczogQWRkZWQuCisgICAgICAgICogRG9Zb3VFdmVu
QmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvdGVzdC9maXh0dXJlcy9jb21wb3NlX2JveC5odG1s
OiBBZGRlZC4KKyAgICAgICAgKiBEb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC90
ZXN0L2ZpeHR1cmVzL21haWxfY29udHJvbHMuaHRtbDogQWRkZWQuCisgICAgICAgICogRG9Zb3VF
dmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvdGVzdC9maXh0dXJlcy9tYWlsX2l0ZW1zLmh0
bWw6IEFkZGVkLgorICAgICAgICAqIERvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBw
L3Rlc3QvZml4dHVyZXMvbW92ZV90b19zZWxlY3Rvci5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBE
b1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC90ZXN0L3NwZWM6IEFkZGVkLgorICAg
ICAgICAqIERvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL3Rlc3Qvc3BlYy9jb21w
b25lbnRfZGF0YTogQWRkZWQuCisgICAgICAgICogRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhh
bXBsZS1hcHAvdGVzdC9zcGVjL2NvbXBvbmVudF9kYXRhL2NvbXBvc2VfYm94X3NwZWMuanM6IEFk
ZGVkLgorICAgICAgICAqIERvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL3Rlc3Qv
c3BlYy9jb21wb25lbnRfZGF0YS9tYWlsX2l0ZW1zX3NwZWMuanM6IEFkZGVkLgorICAgICAgICAq
IERvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL3Rlc3Qvc3BlYy9jb21wb25lbnRf
ZGF0YS9tb3ZlX3RvX3NwZWMuanM6IEFkZGVkLgorICAgICAgICAqIERvWW91RXZlbkJlbmNoL2Zs
aWdodGpzLWV4YW1wbGUtYXBwL3Rlc3Qvc3BlYy9jb21wb25lbnRfdWk6IEFkZGVkLgorICAgICAg
ICAqIERvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL3Rlc3Qvc3BlYy9jb21wb25l
bnRfdWkvY29tcG9zZV9ib3hfc3BlYy5qczogQWRkZWQuCisgICAgICAgICogRG9Zb3VFdmVuQmVu
Y2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvdGVzdC9zcGVjL2NvbXBvbmVudF91aS9mb2xkZXJzX3Nw
ZWMuanM6IEFkZGVkLgorICAgICAgICAqIERvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUt
YXBwL3Rlc3Qvc3BlYy9jb21wb25lbnRfdWkvbWFpbF9jb250cm9sc19zcGVjLmpzOiBBZGRlZC4K
KyAgICAgICAgKiBEb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC90ZXN0L3NwZWMv
Y29tcG9uZW50X3VpL21haWxfaXRlbXNfc3BlYy5qczogQWRkZWQuCisgICAgICAgICogRG9Zb3VF
dmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvdGVzdC9zcGVjL2NvbXBvbmVudF91aS9tb3Zl
X3RvX3NlbGVjdG9yX3NwZWMuanM6IEFkZGVkLgorICAgICAgICAqIERvWW91RXZlbkJlbmNoL2Zs
aWdodGpzLWV4YW1wbGUtYXBwL3Rlc3Qvc3BlYy9jb21wb25lbnRfdWkvd2l0aF9zZWxlY3Rfc3Bl
Yy5qczogQWRkZWQuCisgICAgICAgICogRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1h
cHAvdGVzdC90ZXN0LW1haW4uanM6IEFkZGVkLgorCiAyMDEzLTA5LTE5ICBSeW9zdWtlIE5pd2Eg
IDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIERvWW91RXZlbkJlbmNoOiBJbmRlbnRhdGlv
bnMgaW4gYmVuY2htYXJrLmpzIGFuZCBiZW5jaG1hcmsuaHRtbCBhcmUgYWxsIG1lc3NlZCB1cApJ
bmRleDogUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9iZW5jaG1hcmsuaHRtbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2JlbmNobWFyay5odG1s
CShyZXZpc2lvbiAxNTY0MTkpCisrKyBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2Jl
bmNobWFyay5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsNyArMTEzLDYgQEAgQmVuY2htYXJr
UnVubmVyLnN1aXRlKHsKICAgICBuYW1lOiAnalF1ZXJ5L1RvZG9NVkMnLAogICAgIHVybDogJ3Rv
ZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2pxdWVyeS9pbmRleC5odG1sJywKICAgICBwcmVw
YXJlOiBmdW5jdGlvbiAoY29udGVudFdpbmRvdywgY29udGVudERvY3VtZW50KSB7Ci0gICAgdmFy
IHN0b3JhZ2UgPSBbXTsKICAgICAgICAgcmV0dXJuIEJlbmNobWFya1J1bm5lci53YWl0Rm9yRWxl
bWVudCgnI25ldy10b2RvJykudGhlbihmdW5jdGlvbiAoZWxlbWVudCkgewogICAgICAgICAgICAg
ZWxlbWVudC5mb2N1cygpOwogICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CkBAIC0xNDcsNyAr
MTQ2LDYgQEAgQmVuY2htYXJrUnVubmVyLnN1aXRlKHsKICAgICBuYW1lOiAnQW5ndWxhckpTL1Rv
ZG9NVkMnLAogICAgIHVybDogJ3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2FuZ3VsYXJq
cy9pbmRleC5odG1sJywKICAgICBwcmVwYXJlOiBmdW5jdGlvbiAoY29udGVudFdpbmRvdywgY29u
dGVudERvY3VtZW50KSB7Ci0gICAgdmFyIHN0b3JhZ2UgPSBbXTsKICAgICAgICAgcmV0dXJuIEJl
bmNobWFya1J1bm5lci53YWl0Rm9yRWxlbWVudCgnI25ldy10b2RvJykudGhlbihmdW5jdGlvbiAo
ZWxlbWVudCkgewogICAgICAgICAgICAgZWxlbWVudC5mb2N1cygpOwogICAgICAgICAgICAgcmV0
dXJuIGVsZW1lbnQ7CkBAIC0xNzksOSArMTc3LDYyIEBAIEJlbmNobWFya1J1bm5lci5zdWl0ZSh7
CiAgICAgXQogfSk7CiAKK3ZhciBhY3Rpb25Db3VudCA9IDUwOworQmVuY2htYXJrUnVubmVyLnN1
aXRlKHsKKyAgICBuYW1lOiAnRmxpZ2h0SlMvTWFpbENsaWVudCcsCisgICAgdXJsOiAnZmxpZ2h0
anMtZXhhbXBsZS1hcHAvaW5kZXguaHRtbCcsCisgICAgcHJlcGFyZTogZnVuY3Rpb24gKGNvbnRl
bnRXaW5kb3csIGNvbnRlbnREb2N1bWVudCkgeworICAgICAgICByZXR1cm4gQmVuY2htYXJrUnVu
bmVyLndhaXRGb3JFbGVtZW50KCcuc3BhbjgnKS50aGVuKGZ1bmN0aW9uIChlbGVtZW50KSB7Cisg
ICAgICAgICAgICBlbGVtZW50LmZvY3VzKCk7CisgICAgICAgICAgICByZXR1cm4gZWxlbWVudDsK
KyAgICAgICAgfSk7CisgICAgfSwKKyAgICB0ZXN0czogWworICAgICAgICBbJ09wZW5pbmdUYWJz
JyArIGFjdGlvbkNvdW50ICsgJ1RpbWVzJywgZnVuY3Rpb24gKG5ld1RvZG8sIGNvbnRlbnRXaW5k
b3csIGNvbnRlbnREb2N1bWVudCkgeworICAgICAgICAgICAgY29udGVudERvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCdpbmJveCcpLmNsaWNrKCk7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IGFjdGlvbkNvdW50OyBpKyspIHsKKyAgICAgICAgICAgICAgICBjb250ZW50RG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoJ2xhdGVyJykuY2xpY2soKTsKKyAgICAgICAgICAgICAgICBjb250ZW50
RG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NlbnQnKS5jbGljaygpOworICAgICAgICAgICAgICAg
IGNvbnRlbnREb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndHJhc2gnKS5jbGljaygpOworICAgICAg
ICAgICAgICAgIGNvbnRlbnREb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW5ib3gnKS5jbGljaygp
OworICAgICAgICAgICAgfQorICAgICAgICB9XSwKKyAgICAgICAgWydNb3ZpbmdFbWFpbHMnICsg
YWN0aW9uQ291bnQgKyAnVGltZXMnLCBmdW5jdGlvbiAobmV3VG9kbywgY29udGVudFdpbmRvdywg
Y29udGVudERvY3VtZW50KSB7CisgICAgICAgICAgICBjb250ZW50RG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoJ2luYm94JykuY2xpY2soKTsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
YWN0aW9uQ291bnQ7IGkrKykgeworICAgICAgICAgICAgICAgIGNvbnRlbnREb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgnbWFpbF8yMTM5JykuY2xpY2soKTsKKyAgICAgICAgICAgICAgICBjb250ZW50
RG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vdmVfbWFpbCcpLmNsaWNrKCk7CisgICAgICAgICAg
ICAgICAgY29udGVudERvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNtb3ZlX3RvX3NlbGVjdG9yICNs
YXRlcicpLmNsaWNrKCk7CisgICAgICAgICAgICAgICAgY29udGVudERvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCdsYXRlcicpLmNsaWNrKCk7CisgICAgICAgICAgICAgICAgY29udGVudERvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCdtYWlsXzIxMzknKS5jbGljaygpOworICAgICAgICAgICAgICAgIGNv
bnRlbnREb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW92ZV9tYWlsJykuY2xpY2soKTsKKyAgICAg
ICAgICAgICAgICBjb250ZW50RG9jdW1lbnQucXVlcnlTZWxlY3RvcignI21vdmVfdG9fc2VsZWN0
b3IgI3RyYXNoJykuY2xpY2soKTsKKyAgICAgICAgICAgICAgICBjb250ZW50RG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoJ3RyYXNoJykuY2xpY2soKTsKKyAgICAgICAgICAgICAgICBjb250ZW50RG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21haWxfMjEzOScpLmNsaWNrKCk7CisgICAgICAgICAgICAg
ICAgY29udGVudERvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb3ZlX21haWwnKS5jbGljaygpOwor
ICAgICAgICAgICAgICAgIGNvbnRlbnREb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjbW92ZV90b19z
ZWxlY3RvciAjaW5ib3gnKS5jbGljaygpOworICAgICAgICAgICAgICAgIGNvbnRlbnREb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgnaW5ib3gnKS5jbGljaygpOworICAgICAgICAgICAgfQorICAgICAg
ICB9XSwKKyAgICAgICAgWydTZW5kaW5nJyArIGFjdGlvbkNvdW50ICsgJ05ld0VtYWlscycsIGZ1
bmN0aW9uIChuZXdUb2RvLCBjb250ZW50V2luZG93LCBjb250ZW50RG9jdW1lbnQpIHsKKyAgICAg
ICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYWN0aW9uQ291bnQ7IGkrKykgeworICAgICAgICAg
ICAgICAgIGNvbnRlbnREb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbmV3X21haWwnKS5jbGljaygp
OworICAgICAgICAgICAgICAgIHZhciBzdWJqZWN0ID0gY29udGVudERvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCdjb21wb3NlX3N1YmplY3QnKTsKKyAgICAgICAgICAgICAgICB2YXIgbWVzc2FnZSA9
IGNvbnRlbnREb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29tcG9zZV9tZXNzYWdlJyk7CisgICAg
ICAgICAgICAgICAgc3ViamVjdC5mb2N1cygpOworICAgICAgICAgICAgICAgIGNvbnRlbnRXaW5k
b3cuJChzdWJqZWN0KS50cmlnZ2VyKCdrZXlkb3duJyk7CisgICAgICAgICAgICAgICAgY29udGVu
dERvY3VtZW50LmV4ZWNDb21tYW5kKCdJbnNlcnRUZXh0JywgZmFsc2UsICdIZWxsbycpOworICAg
ICAgICAgICAgICAgIG1lc3NhZ2UuZm9jdXMoKTsKKyAgICAgICAgICAgICAgICBjb250ZW50V2lu
ZG93LiQobWVzc2FnZSkudHJpZ2dlcigna2V5ZG93bicpOworICAgICAgICAgICAgICAgIGNvbnRl
bnREb2N1bWVudC5leGVjQ29tbWFuZCgnSW5zZXJ0VGV4dCcsIGZhbHNlLCAnSGVsbG8sXG5cblRo
aXMgaXMgYSB0ZXN0IG1lc3NhZ2UuXG5cbi0gV2ViS2l0dGVuJyk7CisgICAgICAgICAgICAgICAg
Y29udGVudERvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZW5kX2NvbXBvc2VkJykuY2xpY2soKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfV0sCisgICAgXQorfSk7CisKIDwvc2NyaXB0PgogPC9o
ZWFkPgogPGJvZHk+Ci08cD48L3A+CiA8L2JvZHk+CiA8L2h0bWw+CkluZGV4OiBQZXJmb3JtYW5j
ZVRlc3RzL0RvWW91RXZlbkJlbmNoL2JlbmNobWFyay5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3Jt
YW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2JlbmNobWFyay5qcwkocmV2aXNpb24gMTU2NDE5KQor
KysgUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9iZW5jaG1hcmsuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTMxOSw3ICszMTksNyBAQCB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcs
IGZ1bmN0aW9uCiAKIChmdW5jdGlvbiAoKSB7CiAgICAgdmFyIHN0eWxlID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgnc3R5bGUnKTsKLSAgICBzdHlsZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVh
dGVUZXh0Tm9kZSgnaWZyYW1lIHsgd2lkdGg6IDcwMHB4OyBoZWlnaHQ6IDUwMHB4OyBib3JkZXI6
IDJweCBzb2xpZCBibGFjazsgfScKKyAgICBzdHlsZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVh
dGVUZXh0Tm9kZSgnaWZyYW1lIHsgd2lkdGg6IDEwMDBweDsgaGVpZ2h0OiA1MDBweDsgYm9yZGVy
OiAycHggc29saWQgYmxhY2s7IH0nCiAgICAgICAgICsgJ29sIHsgbGlzdC1zdHlsZTogbm9uZTsg
bWFyZ2luOiAwOyBwYWRkaW5nOiAwOyB9JwogICAgICAgICArICdvbCBvbCB7IG1hcmdpbi1sZWZ0
OiAyZW07IGxpc3QtcG9zaXRpb246IG91dHNpZGU7IH0nCiAgICAgICAgICsgJy5ydW5uaW5nIHsg
dGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7IH0nCkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0Rv
WW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwLy5naXRhdHRyaWJ1dGVzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1h
cHAvLmdpdGF0dHJpYnV0ZXMJKHJldmlzaW9uIDApCisrKyBQZXJmb3JtYW5jZVRlc3RzL0RvWW91
RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwLy5naXRhdHRyaWJ1dGVzCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMiBAQAorIyBBdXRvbWF0aWNhbGx5IG5vcm1hbGl6ZSBsaW5lIGVuZGlu
Z3MgZm9yIGFsbCB0ZXh0LWJhc2VkIGZpbGVzCisqIHRleHQ9YXV0bwpJbmRleDogUGVyZm9ybWFu
Y2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC8uZ2l0aWdub3JlCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhh
bXBsZS1hcHAvLmdpdGlnbm9yZQkocmV2aXNpb24gMCkKKysrIFBlcmZvcm1hbmNlVGVzdHMvRG9Z
b3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvLmdpdGlnbm9yZQkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxIEBACitub2RlX21vZHVsZXMKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvRG9Z
b3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvLnRyYXZpcy55bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC8u
dHJhdmlzLnltbAkocmV2aXNpb24gMCkKKysrIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVu
Y2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvLnRyYXZpcy55bWwJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw3IEBACitsYW5ndWFnZTogIm5vZGVfanMiCitub2RlX2pzOgorICAtICIwLjEwIgorICAt
ICIwLjgiCitiZWZvcmVfc2NyaXB0OgorICAtICJleHBvcnQgRElTUExBWT06OTkuMCIKKyAgLSAi
c2ggLWUgL2V0Yy9pbml0LmQveHZmYiBzdGFydCIKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvRG9Z
b3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvTElDRU5TRS5tZAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL0xJ
Q0VOU0UubWQJKHJldmlzaW9uIDApCisrKyBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNo
L2ZsaWdodGpzLWV4YW1wbGUtYXBwL0xJQ0VOU0UubWQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxOSBAQAorQ29weXJpZ2h0IChjKSBUd2l0dGVyIEluYworCitQZXJtaXNzaW9uIGlzIGhlcmVi
eSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5
CitvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRo
ZSAiU29mdHdhcmUiKSwgdG8gZGVhbAoraW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rp
b24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwordG8gdXNlLCBjb3B5
LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Ig
c2VsbAorY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdo
b20gdGhlIFNvZnR3YXJlIGlzCitmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zOgorCitUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhp
cyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorYWxsIGNvcGllcyBvciBz
dWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKK1RIRSBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9S
CitJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSwKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBO
T05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorQVVUSE9SUyBPUiBDT1BZUklH
SFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorTElB
QklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJ
U0UsIEFSSVNJTkcgRlJPTSwKK09VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRX
QVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KK1RIRSBTT0ZUV0FSRS4KSW5kZXg6
IFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvUkVB
RE1FLm1kCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxp
Z2h0anMtZXhhbXBsZS1hcHAvUkVBRE1FLm1kCShyZXZpc2lvbiAwKQorKysgUGVyZm9ybWFuY2VU
ZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9SRUFETUUubWQJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw1IEBACisjIEZsaWdodCBleGFtcGxlIGFwcAorCitbIVtCdWls
ZCBTdGF0dXNdKGh0dHBzOi8vdHJhdmlzLWNpLm9yZy9mbGlnaHRqcy9leGFtcGxlLWFwcC5wbmc/
YnJhbmNoPW1hc3RlcildKGh0dHA6Ly90cmF2aXMtY2kub3JnL2ZsaWdodGpzL2V4YW1wbGUtYXBw
KQorCitBbiBleGFtcGxlIEZsaWdodCBhcHBsaWNhdGlvbi4KSW5kZXg6IFBlcmZvcm1hbmNlVGVz
dHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvaW5kZXguaHRtbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUt
YXBwL2luZGV4Lmh0bWwJKHJldmlzaW9uIDApCisrKyBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZl
bkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2luZGV4Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw2MCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKyAgPGhlYWQ+CisgICAgPG1l
dGEgY2hhcnNldD0idXRmLTgiPgorICAgIDx0aXRsZT5GbGlnaHQgTWFpbDwvdGl0bGU+CisgICAg
PGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJjb21wb25lbnRzL2Jvb3RzdHJhcC9jc3MvYm9v
dHN0cmFwLm1pbi5jc3MiPgorICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iY29tcG9u
ZW50cy9ib290c3RyYXAvY3NzL2Jvb3RzdHJhcC1yZXNwb25zaXZlLm1pbi5jc3MiPgorICAgIDxs
aW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iYXBwL2Nzcy9jdXN0b20uY3NzIj4KKyAgPC9oZWFk
PgorCisgIDxib2R5PgorICAgIDxicj4KKworICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lci1mbHVp
ZCI+CisgICAgICA8ZGl2IGNsYXNzPSJyb3ctZmx1aWQiPgorICAgICAgICA8ZGl2IGNsYXNzPSJz
cGFuMiI+CisgICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1uYXYiPgorCisgICAgICAgICAg
ICA8YnV0dG9uIGlkPSJuZXdfbWFpbCIgY2xhc3M9ImJ0biBjb21wb3NlIiBkYXRhLXRvZ2dsZT0i
ZHJvcGRvd24iPk5ldzwvYnV0dG9uPgorCisgICAgICAgICAgICA8YnI+PGJyPgorCisgICAgICAg
ICAgICA8dWwgaWQ9ImZvbGRlcnMiIGNsYXNzPSJuYXYgbmF2LWxpc3QiPgorICAgICAgICAgICAg
ICA8bGkgY2xhc3M9ImZvbGRlci1pdGVtIHNlbGVjdGVkIiBpZD0iaW5ib3giPjxpIGNsYXNzPSJp
Y29uLWZvbGRlci1jbG9zZSI+PC9pPiBJbmJveDwvbGk+CisgICAgICAgICAgICAgIDxsaSBjbGFz
cz0iZm9sZGVyLWl0ZW0iIGlkPSJsYXRlciI+PGkgY2xhc3M9Imljb24tZm9sZGVyLWNsb3NlIj48
L2k+IExhdGVyPC9saT4KKyAgICAgICAgICAgICAgPGxpIGNsYXNzPSJmb2xkZXItaXRlbSIgaWQ9
InNlbnQiPjxpIGNsYXNzPSJpY29uLXNoYXJlLWFsdCI+PC9pPiBTZW50PC9saT4KKyAgICAgICAg
ICAgICAgPGxpIGNsYXNzPSJmb2xkZXItaXRlbSIgaWQ9InRyYXNoIj48aSBjbGFzcz0iaWNvbi10
cmFzaCI+PC9pPiBUcmFzaDwvbGk+CisgICAgICAgICAgICA8L3VsPgorICAgICAgICAgIDwvZGl2
PgorICAgICAgICA8L2Rpdj4KKworICAgICAgICA8ZGl2IGlkPSJtYWlsX3BhbmVsIiBjbGFzcz0i
c3BhbjEwIj4KKworICAgICAgICAgIDxkaXYgaWQ9Im1haWxfY29udHJvbHMiIGNsYXNzPSJidG4t
dG9vbGJhciIgc3R5bGU9Im1hcmdpbjogMCAwIDEzcHgiPgorICAgICAgICAgICAgPGRpdiBjbGFz
cz0iYnRuLWdyb3VwIj4KKyAgICAgICAgICAgICAgPGJ1dHRvbiBpZD0iZGVsZXRlX21haWwiIGNs
YXNzPSJidG4gbWFpbC1hY3Rpb24iIGRpc2FibGVkPjxpIGNsYXNzPSJpY29uLXRyYXNoIj48L2k+
IGRlbGV0ZTwvYnV0dG9uPgorICAgICAgICAgICAgICA8YnV0dG9uIGlkPSJtb3ZlX21haWwiIGNs
YXNzPSJidG4gbWFpbC1hY3Rpb24iIGRpc2FibGVkPjxpIGNsYXNzPSJpY29uLW1vdmUiPjwvaT4g
bW92ZTwvYnV0dG9uPgorICAgICAgICAgICAgICA8YnV0dG9uIGlkPSJmb3J3YXJkIiBjbGFzcz0i
YnRuIGNvbXBvc2UgbWFpbC1hY3Rpb24gc2luZ2xlLWl0ZW0iIGRpc2FibGVkPjxpIGNsYXNzPSJp
Y29uLWFycm93LXJpZ2h0Ij48L2k+IGZvcndhcmQ8L2J1dHRvbj4KKyAgICAgICAgICAgICAgPGJ1
dHRvbiBpZD0icmVwbHkiIGNsYXNzPSJidG4gY29tcG9zZSBtYWlsLWFjdGlvbiBzaW5nbGUtaXRl
bSIgZGlzYWJsZWQ+PGkgY2xhc3M9Imljb24tcGVuY2lsIj48L2k+IHJlcGx5PC9idXR0b24+Cisg
ICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8L2Rpdj4KKworICAgICAgICAgIDx0YWJsZSBp
ZD0ibWFpbF9pdGVtcyIgY2xhc3M9Imhlcm8tdW5pdCB0YWJsZSB0YWJsZS1ob3ZlciIgc3R5bGU9
ImJhY2tncm91bmQtY29sb3I6ICNGRkZGRkYiPgorICAgICAgICAgICAgPHRib2R5IGlkPSJtYWls
X2l0ZW1zX1RCIj4KKyAgICAgICAgICAgIDwvdGJvZHk+CisgICAgICAgICAgPC90YWJsZT4KKyAg
ICAgICAgPC9kaXY+CisgICAgICA8L2Rpdj4KKyAgICA8L2Rpdj4KKworICAgIDxkaXYgaWQ9ImNv
bXBvc2VfYm94IiBjbGFzcz0iY29tcG9zZS1ib3ggbW9kYWwgaGlkZSBmYWRlIGluIj48L2Rpdj4K
KworICAgIDxkaXYgaWQ9Im1vdmVfdG9fc2VsZWN0b3IiIGNsYXNzPSJtb3ZlLXRvLXNlbGVjdG9y
IGhpZGUiPjwvZGl2PgorCisgICAgPHNjcmlwdCBzcmM9ImNvbXBvbmVudHMvanF1ZXJ5L2pxdWVy
eS5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9ImNvbXBvbmVudHMvZXM1LXNoaW0vZXM1
LXNoaW0uanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJjb21wb25lbnRzL2VzNS1zaGlt
L2VzNS1zaGFtLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IGRhdGEtbWFpbj0icmVxdWlyZU1h
aW4uanMiIHNyYz0iY29tcG9uZW50cy9yZXF1aXJlanMvcmVxdWlyZS5qcyI+PC9zY3JpcHQ+Cisg
IDwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gv
ZmxpZ2h0anMtZXhhbXBsZS1hcHAva2FybWEuY29uZi5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3Jt
YW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2thcm1hLmNvbmYu
anMJKHJldmlzaW9uIDApCisrKyBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdo
dGpzLWV4YW1wbGUtYXBwL2thcm1hLmNvbmYuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1
OCBAQAorLy8gS2FybWEgY29uZmlndXJhdGlvbiBmaWxlCisvLworLy8gRm9yIGFsbCBhdmFpbGFi
bGUgY29uZmlnIG9wdGlvbnMgYW5kIGRlZmF1bHQgdmFsdWVzLCBzZWU6CisvLyBodHRwczovL2dp
dGh1Yi5jb20va2FybWEtcnVubmVyL2thcm1hL2Jsb2Ivc3RhYmxlL2xpYi9jb25maWcuanMjTDU0
CisKKworLy8gYmFzZSBwYXRoLCB0aGF0IHdpbGwgYmUgdXNlZCB0byByZXNvbHZlIGZpbGVzIGFu
ZCBleGNsdWRlCitiYXNlUGF0aCA9ICcnOworCisvLyBsaXN0IG9mIGZpbGVzIC8gcGF0dGVybnMg
dG8gbG9hZCBpbiB0aGUgYnJvd3NlcgorZmlsZXMgPSBbCisgICdjb21wb25lbnRzL2VzNS1zaGlt
L2VzNS1zaGltLmpzJywKKyAgJ2NvbXBvbmVudHMvZXM1LXNoaW0vZXM1LXNoYW0uanMnLAorCisg
IC8vIGZyYW1ld29ya3MKKyAgSkFTTUlORSwKKyAgSkFTTUlORV9BREFQVEVSLAorICBSRVFVSVJF
LAorICBSRVFVSVJFX0FEQVBURVIsCisKKyAgLy8gbG9hZGVkIHdpdGhvdXQgcmVxdWlyZQorICAn
Y29tcG9uZW50cy9qcXVlcnkvanF1ZXJ5LmpzJywKKyAgJ2NvbXBvbmVudHMvamFzbWluZS1qcXVl
cnkvbGliL2phc21pbmUtanF1ZXJ5LmpzJywKKyAgJ2NvbXBvbmVudHMvamFzbWluZS1mbGlnaHQv
bGliL2phc21pbmUtZmxpZ2h0LmpzJywKKworICAvLyBsb2FkZWQgd2l0aCByZXF1aXJlCisgIHtw
YXR0ZXJuOiAnY29tcG9uZW50cy9mbGlnaHQvKiovKi5qcycsIGluY2x1ZGVkOiBmYWxzZX0sCisg
IHtwYXR0ZXJuOiAnY29tcG9uZW50cy9tdXN0YWNoZS8qKi8qLmpzJywgaW5jbHVkZWQ6IGZhbHNl
fSwKKyAge3BhdHRlcm46ICdhcHAvKiovKi5qcycsIGluY2x1ZGVkOiBmYWxzZX0sCisgIHtwYXR0
ZXJuOiAndGVzdC9maXh0dXJlcy8qKi8qLmh0bWwnLCBpbmNsdWRlZDogZmFsc2V9LAorICB7cGF0
dGVybjogJ3Rlc3Qvc3BlYy8qKi8qLmpzJywgaW5jbHVkZWQ6IGZhbHNlfSwKKworICAndGVzdC90
ZXN0LW1haW4uanMnCitdOworCisvLyBsaXN0IG9mIGZpbGVzIHRvIGV4Y2x1ZGUKK2V4Y2x1ZGUg
PSBbCisKK107CisKKy8vIHVzZSBkb3RzIHJlcG9ydGVyLCBhcyB0cmF2aXMgdGVybWluYWwgZG9l
cyBub3Qgc3VwcG9ydCBlc2NhcGluZyBzZXF1ZW5jZXMKK3JlcG9ydGVycyA9IFsKKyAgJ2RvdHMn
CitdOworCisvLyBlbmFibGUgLyBkaXNhYmxlIHdhdGNoaW5nIGZpbGUgYW5kIGV4ZWN1dGluZyB0
ZXN0cyB3aGVuZXZlciBhbnkgZmlsZSBjaGFuZ2VzCisvLyBDTEkgLS1hdXRvLXdhdGNoIC0tbm8t
YXV0by13YXRjaAorYXV0b1dhdGNoID0gdHJ1ZTsKKworLy8gc3RhcnQgdGhlc2UgYnJvd3NlcnMK
K2Jyb3dzZXJzID0gWworICAnQ2hyb21lJywKKyAgJ0ZpcmVmb3gnCitdOworCisvLyBhdXRvIHJ1
biB0ZXN0cyBvbiBzdGFydCAod2hlbiBicm93c2VycyBhcmUgY2FwdHVyZWQpIGFuZCBleGl0Cisv
LyBDTEkgLS1zaW5nbGUtcnVuIC0tbm8tc2luZ2xlLXJ1bgorc2luZ2xlUnVuID0gZmFsc2U7Cklu
ZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBw
L3BhY2thZ2UuanNvbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJl
bmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL3BhY2thZ2UuanNvbgkocmV2aXNpb24gMCkKKysrIFBl
cmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvcGFja2Fn
ZS5qc29uCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTEgQEAKK3sKKyAgInByaXZhdGUiOiB0
cnVlLAorICAibmFtZSI6ICJmbGlnaHQtZXhhbXBsZS1hcHAiLAorICAidmVyc2lvbiI6ICIwLjAu
MCIsCisgICJkZXZEZXBlbmRlbmNpZXMiOiB7CisgICAgImthcm1hIjogIn4wLjguNSIKKyAgfSwK
KyAgInNjcmlwdHMiOiB7CisgICAgInRlc3QiOiAiLi9ub2RlX21vZHVsZXMvLmJpbi9rYXJtYSBz
dGFydCAtLXNpbmdsZS1ydW4gLS1icm93c2VycyBGaXJlZm94IgorICB9Cit9CkluZGV4OiBQZXJm
b3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL3JlcXVpcmVN
YWluLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxp
Z2h0anMtZXhhbXBsZS1hcHAvcmVxdWlyZU1haW4uanMJKHJldmlzaW9uIDApCisrKyBQZXJmb3Jt
YW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL3JlcXVpcmVNYWlu
LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjQgQEAKK3JlcXVpcmVqcy5jb25maWcoewor
ICBiYXNlVXJsOiAnJywKKyAgcGF0aHM6IHsKKyAgICAnZmxpZ2h0JzogJ2NvbXBvbmVudHMvZmxp
Z2h0JworICB9Cit9KTsKKworcmVxdWlyZSgKKyAgWworICAgICdmbGlnaHQvbGliL2NvbXBvc2Un
LAorICAgICdmbGlnaHQvbGliL3JlZ2lzdHJ5JywKKyAgICAnZmxpZ2h0L2xpYi9hZHZpY2UnLAor
ICAgICdmbGlnaHQvbGliL2xvZ2dlcicsCisgICAgJ2ZsaWdodC90b29scy9kZWJ1Zy9kZWJ1ZycK
KyAgXSwKKworICBmdW5jdGlvbihjb21wb3NlLCByZWdpc3RyeSwgYWR2aWNlLCB3aXRoTG9nZ2lu
ZywgZGVidWcpIHsKKyAgICBkZWJ1Zy5lbmFibGUodHJ1ZSk7CisgICAgY29tcG9zZS5taXhpbihy
ZWdpc3RyeSwgW2FkdmljZS53aXRoQWR2aWNlLCB3aXRoTG9nZ2luZ10pOworICAgIHJlcXVpcmUo
WydhcHAvYm9vdC9wYWdlJ10sIGZ1bmN0aW9uKGluaXRpYWxpemUpIHsKKyAgICAgIGluaXRpYWxp
emUoKTsKKyAgICB9KTsKKyAgfQorKTsKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVu
QmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvYXBwL2RhdGEuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVy
Zm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9hcHAvZGF0
YS5qcwkocmV2aXNpb24gMCkKKysrIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxp
Z2h0anMtZXhhbXBsZS1hcHAvYXBwL2RhdGEuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
MTAgQEAKKyd1c2Ugc3RyaWN0JzsKKworZGVmaW5lKAorICBmdW5jdGlvbigpIHsKKyAgICByZXR1
cm4geworICAgICAgZm9sZGVyczogWyJpbmJveCIsICJsYXRlciIsICJzZW50IiwgInRyYXNoIl0s
CisgICAgICBjb250YWN0czogWworICAgICAgICB7CisgICAgICAgICAgImlkIjogImNvbnRhY3Rf
MzQyIiwKKyAgICAgICAgICAiZmlyc3ROYW1lIjogIk1pY2hhZWwiLAorICAgICAgICAgICJsYXN0
TmFtZSI6ICJTbWl0aCIsCisgICAgICAgICAgImVtYWlsIjogIm1zQHByb3h5d2ViLmNvbSIKKyAg
ICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICJpZCI6ICJjb250YWN0XzM3NyIsCisgICAg
ICAgICAgImZpcnN0TmFtZSI6ICJNYXJ5IiwKKyAgICAgICAgICAibGFzdE5hbWUiOiAiSm9uZXMi
LAorICAgICAgICAgICJlbWFpbCI6ICJtYXJ5QGpvbmVzLm5ldCIKKyAgICAgICAgfSwKKyAgICAg
ICAgeworICAgICAgICAgICJpZCI6ICJjb250YWN0XzM5OCIsCisgICAgICAgICAgImZpcnN0TmFt
ZSI6ICJCaWxseSIsCisgICAgICAgICAgImxhc3ROYW1lIjogIklkaW90IiwKKyAgICAgICAgICAi
ZW1haWwiOiAid2lsbGlhbV9pZGlvdEBnbWFpbC5jb20iCisgICAgICAgIH0KKyAgICAgIF0sCisg
ICAgICBtYWlsOiBbCisgICAgICAgIHsKKyAgICAgICAgICAiaWQiOiAibWFpbF8yMTM5IiwKKyAg
ICAgICAgICAiY29udGFjdF9pZCI6ICJjb250YWN0XzM0MiIsCisgICAgICAgICAgImZvbGRlcnMi
OiBbImluYm94Il0sCisgICAgICAgICAgInRpbWUiOiAxMzM0ODkxOTc2MTA0LAorICAgICAgICAg
ICJzdWJqZWN0IjogIkNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdCIsCisgICAgICAgICAgIm1l
c3NhZ2UiOiAiVmVzdGlidWx1bSB2ZXN0aWJ1bHVtIHZhcml1cyBkaWFtIGluIGlhY3VsaXMuIFBy
YWVzZW50IHVsdHJpY2VzIGR1aSB2aXRhZSBuaWJoIG1hbGVzdWFkYSBub24gaWFjdWxpcyBhbnRl
IHZ1bHB1dGF0ZS4gU3VzcGVuZGlzc2UgZmV1Z2lhdCB1bHRyaWNpZXMgZWdlc3Rhcy4gQWVuZWFu
IGEgb2RpbyBsaWJlcm8uIFF1aXNxdWUgbW9sbGlzIGxlbyBldCBlc3QgZXVpc21vZCBzaXQgYW1l
dCBkaWduaXNzaW0gc2FwaWVuIHZlbmVuYXRpcy4gTW9yYmkgaW50ZXJkdW0gYWRpcGlzY2luZyBt
YXNzYSIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICJpZCI6ICJtYWlsXzIxNDMi
LAorICAgICAgICAgICJjb250YWN0X2lkIjogImNvbnRhY3RfMzc3IiwKKyAgICAgICAgICAiZm9s
ZGVycyI6IFsiaW5ib3giLCAibGF0ZXIiXSwKKyAgICAgICAgICAiaW1wb3J0YW50IjogInRydWUi
LAorICAgICAgICAgICJ0aW1lIjogMTMzNDg4NDk3NjEwNCwKKyAgICAgICAgICAic3ViamVjdCI6
ICJOZXF1ZSBwb3JybyBxdWlzcXVhbSB2ZWxpdCEhIiwKKyAgICAgICAgICAibWVzc2FnZSI6ICJD
dXJhYml0dXIgc29sbGljaXR1ZGluIG1pIGVnZXQgc2FwaWVuIHBvc3VlcmUgc2VtcGVyLiBGdXNj
ZSBhdCBuZXF1ZSBldCBsYWN1cyBsdWN0dXMgdnVscHV0YXRlIHZlaGljdWxhIGFjIGVuaW0iCisg
ICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAiaWQiOiAibWFpbF8yMTU0IiwKKyAgICAg
ICAgICAiY29udGFjdF9pZCI6ICJjb250YWN0XzM5OCIsCisgICAgICAgICAgImZvbGRlcnMiOiBb
ImluYm94Il0sCisgICAgICAgICAgImltcG9ydGFudCI6ICJ0cnVlIiwKKyAgICAgICAgICAidW5y
ZWFkIjogInRydWUiLAorICAgICAgICAgICJ0aW1lIjogMTMzNDg3NDk3NjE5OSwKKyAgICAgICAg
ICAic3ViamVjdCI6ICJQcm9pbiBlZ2VzdGFzIGFsaXF1YW0gOikiLAorICAgICAgICAgICJtZXNz
YWdlIjogIkFlbmVhbiBuZWMgZXJhdCBpZCBpcHN1bSBmYXVjaWJ1cyB0cmlzdGlxdWUuIE5hbSBi
bGFuZGl0IGVzdCBsYWNpbmlhIHR1cnBpcyBjb25zZWN0ZXR1ciBlbGVtZW50dW0uIE51bGxhIGlu
IHJpc3VzIHV0IHNhcGllbiBkaWduaXNzaW0gZmV1Z2lhdC4gUHJvaW4gdWx0cmljZXMgc29kYWxl
cyBpbXBlcmRpZXQuIFZlc3RpYnVsdW0gdmVoaWN1bGEgYmxhbmRpdCB0aW5jaWR1bnQuIFZpdmFt
dXMgcG9zdWVyZSByaG9uY3VzIG9yY2ksIHBvcnRhIGNvbW1vZG8gbWF1cmlzIGFsaXF1YW0gbmVj
IgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgImlkIjogIm1haWxfMjE3NiIsCisg
ICAgICAgICAgImNvbnRhY3RfaWQiOiAiY29udGFjdF8zNzciLAorICAgICAgICAgICJmb2xkZXJz
IjogWyJpbmJveCJdLAorICAgICAgICAgICJ0aW1lIjogMTMzNDg4NDk3NjEwNCwKKyAgICAgICAg
ICAic3ViamVjdCI6ICJTZWQgdXQgcGVyc3BpY2lhdGlzIHVuZGUgb21uaXM/IiwKKyAgICAgICAg
ICAibWVzc2FnZSI6ICJsYXVkYW50aXVtLCB0b3RhbSByZW0gYXBlcmlhbSwgZWFxdWUgaXBzYSBx
dWFlIGFiIGlsbG8gaW52ZW50b3JlIHZlcml0YXRpcyBldCBxdWFzaSBhcmNoaXRlY3RvIGJlYXRh
ZSB2aXRhZSBkaWN0YSBzdW50IGV4cGxpY2Fiby4gTmVtbyBlbmltIGlwc2FtIHZvbHVwdGF0ZW0g
cXVpYSB2b2x1cHRhcyBzaXQgYXNwZXJuYXR1ciBhdXQgb2RpdCBhdXQgZnVnaXQsIHNlZCBxdWlh
IGNvbnNlcXV1bnR1ciBtYWduaSBkb2xvcmVzIGVvcyBxdWkgcmF0aW9uZSB2b2x1cHRhdGVtIHNl
cXVpIG5lc2NpdW50LiBOZXF1ZSBwb3JybyBxdWlzcXVhbSBlc3QsIHF1aSBkb2xvcmVtIGlwc3Vt
IHF1aWEgZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyLCBhZGlwaXNjaSB2ZWxpdCwgc2VkIHF1
aWEgbm9uIG51bXF1YW0gZWl1cyBtb2RpIHRlbXBvcmEgaW5jaWR1bnQgdXQgbGFib3JlIGV0IGRv
bG9yZSBtYWduYW0gYWxpcXVhbSBxdWFlcmF0IHZvbHVwdGF0ZW0uIgorICAgICAgICB9LAorICAg
ICAgICB7CisgICAgICAgICAgImlkIjogIm1haWxfMjE5MSIsCisgICAgICAgICAgImNvbnRhY3Rf
aWQiOiAiY29udGFjdF8zOTgiLAorICAgICAgICAgICJmb2xkZXJzIjogWyJpbmJveCJdLAorICAg
ICAgICAgICJ1bnJlYWQiOiAidHJ1ZSIsCisgICAgICAgICAgInRpbWUiOiAxMzM0ODc0OTc2MTk5
LAorICAgICAgICAgICJzdWJqZWN0IjogIkF0IHZlcm8gZW9zIGV0IGFjY3VzYW11cyEiLAorICAg
ICAgICAgICJtZXNzYWdlIjogIk5hbSBsaWJlcm8gdGVtcG9yZSwgY3VtIHNvbHV0YSBub2JpcyBl
c3QgZWxpZ2VuZGkgb3B0aW8gY3VtcXVlIG5paGlsIGltcGVkaXQgcXVvIG1pbnVzIGlkIHF1b2Qg
bWF4aW1lIHBsYWNlYXQgZmFjZXJlIHBvc3NpbXVzLCBvbW5pcyB2b2x1cHRhcyBhc3N1bWVuZGEg
ZXN0LCBvbW5pcyBkb2xvciByZXBlbGxlbmR1cy4gVGVtcG9yaWJ1cyBhdXRlbSBxdWlidXNkYW0g
ZXQgYXV0IG9mZmljaWlzIGRlYml0aXMgYXV0IHJlcnVtIG5lY2Vzc2l0YXRpYnVzIHNhZXBlIGV2
ZW5pZXQgdXQgZXQgdm9sdXB0YXRlcyByZXB1ZGlhbmRhZSBzaW50IGV0IG1vbGVzdGlhZSBub24g
cmVjdXNhbmRhZS4gSXRhcXVlIGVhcnVtIHJlcnVtIGhpYyB0ZW5ldHVyIGEgc2FwaWVudGUgZGVs
ZWN0dXMsIHV0IGF1dCByZWljaWVuZGlzIHZvbHVwdGF0aWJ1cyBtYWlvcmVzIGFsaWFzIGNvbnNl
cXVhdHVyIGF1dCBwZXJmZXJlbmRpcyBkb2xvcmlidXMgYXNwZXJpb3JlcyByZXBlbGxhdCIKKyAg
ICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICJpZCI6ICJtYWlsXzIyMDMiLAorICAgICAg
ICAgICJjb250YWN0X2lkIjogImNvbnRhY3RfMzc3IiwKKyAgICAgICAgICAiZm9sZGVycyI6IFsi
bGF0ZXIiXSwKKyAgICAgICAgICAiaW1wb3J0YW50IjogInRydWUiLAorICAgICAgICAgICJ0aW1l
IjogMTMzNDg3NDU3NjE5OSwKKyAgICAgICAgICAic3ViamVjdCI6ICJNaSBuZXR1cyBjb252YWxs
aXMiLAorICAgICAgICAgICJtZXNzYWdlIjogIkVnZXN0YXMgbW9yYmkgYXQuIEN1cmFiaXR1ciBh
bGlxdWV0IGV0IGNvbW1vZG8gbm9udW1teSwgYWxpcXVhbSBxdWlzIGFyY3UsIHNlZCBwZWxsZW50
ZXNxdWUgdml0YWUgbW9sZXN0aWUgbWF0dGlzIG1hZ25hLCBpbiBlZ2V0LCByaXN1cyBudWxsYSB2
aXZhbXVzIHZ1bHB1dGF0ZSIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICJpZCI6
ICJtYWlsXzIyMTIiLAorICAgICAgICAgICJjb250YWN0X2lkIjogImNvbnRhY3RfMzk4IiwKKyAg
ICAgICAgICAiZm9sZGVycyI6IFsic2VudCJdLAorICAgICAgICAgICJ0aW1lIjogMTMzNDg3NDU3
OTg2NywKKyAgICAgICAgICAic3ViamVjdCI6ICJGdXNjZSB0cmlzdGlxdWUgcHJldGl1bSBlcm9z
IGEgZ3JhdmlkYSIsCisgICAgICAgICAgIm1lc3NhZ2UiOiAiUHJvaW4gbWFsZXN1YWRhIgorICAg
ICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgImlkIjogIm1haWxfMjAyMSIsCisgICAgICAg
ICAgImNvbnRhY3RfaWQiOiAiY29udGFjdF8zNDIiLAorICAgICAgICAgICJmb2xkZXJzIjogWyJ0
cmFzaCJdLAorICAgICAgICAgICJ0aW1lIjogMTEzNDg3NDU3OTgyNCwKKyAgICAgICAgICAic3Vi
amVjdCI6ICJQaGFzZWxsdXMgdml0YWUgaW50ZXJkdW0gbnVsbGEuIiwKKyAgICAgICAgICAibWVz
c2FnZSI6ICJQZWxsZW50ZXNxdWUgcXVhbSBlcm9zLCBtb2xsaXMgcXVpcyB2dWxwdXRhdGUgZWdl
dCwgcGVsbGVudGVzcXVlIG5lYyBpcHN1bS4gQ3JhcyBkaWduaXNzaW0gZnJpbmdpbGxhIGxpZ3Vs
YSwgYWMgdWxsYW1jb3JwZXIgZHVpIGNvbnZhbGxpcyBibGFuZGl0LiBQZWxsZW50ZXNxdWUgaGFi
aXRhbnQgbW9yYmkgdHJpc3RpcXVlIHNlbmVjdHVzIGV0IG5ldHVzIGV0IG1hbGVzdWFkYSBmYW1l
cyBhYyB0dXJwaXMgZWdlc3Rhcy4gRXRpYW0gaWQgbnVuYyBhYyBvcmNpIGhlbmRyZXJpdCBmYXVj
aWJ1cyB2ZWwgaW4gYW50ZS4gTWF1cmlzIG5lYyBlc3QgdHVycGlzLCB1dCBmcmluZ2lsbGEgbWku
IFN1c3BlbmRpc3NlIHZlbCB0b3J0b3IgYXQgbnVsbGEgZmFjaWxpc2lzIHZlbmVuYXRpcyBpbiBz
aXQgYW1ldCBsaWd1bGEuIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgImlkIjog
Im1haWxfMTk3NiIsCisgICAgICAgICAgImNvbnRhY3RfaWQiOiAiY29udGFjdF8zNzciLAorICAg
ICAgICAgICJmb2xkZXJzIjogWyJ0cmFzaCJdLAorICAgICAgICAgICJ0aW1lIjogMTAzNDg3NDU3
OTgxMywKKyAgICAgICAgICAic3ViamVjdCI6ICJGdXNjZSB0cmlzdGlxdWUgcHJldGl1bSA6KCIs
CisgICAgICAgICAgIm1lc3NhZ2UiOiAiYWxpcXVhbSBxdWlzIGFyY3UuIgorICAgICAgICB9Cisg
ICAgICBdCisgICAgfTsKKyAgICByZXR1cm4gZGF0YTsKKyAgfQorKTsKKwpJbmRleDogUGVyZm9y
bWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9hcHAvdGVtcGxh
dGVzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxp
Z2h0anMtZXhhbXBsZS1hcHAvYXBwL3RlbXBsYXRlcy5qcwkocmV2aXNpb24gMCkKKysrIFBlcmZv
cm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvYXBwL3RlbXBs
YXRlcy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYyIEBACisndXNlIHN0cmljdCc7CisK
K2RlZmluZSgKKyAgZnVuY3Rpb24oKSB7CisgICAgdmFyIG1haWxJdGVtID0KKyAgICAgICd7eyNt
YWlsSXRlbXN9fVwKKyAgICAgICAgPHRyIGlkPSJ7e2lkfX0iIGNsYXNzPSJtYWlsLWl0ZW0iPlwK
KyAgICAgICAge3sjaW1wb3J0YW50fX1cCisgICAgICAgICAgPHRkIGNsYXNzPSJzcGFuMSI+PHNw
YW4gY2xhc3M9ImxhYmVsIGxhYmVsLWltcG9ydGFudCI+SW1wb3J0YW50PC9zcGFuPjwvdGQ+XAor
ICAgICAgICB7ey9pbXBvcnRhbnR9fVwKKyAgICAgICAge3teaW1wb3J0YW50fX1cCisgICAgICAg
ICAgPHRkIGNsYXNzPSJzcGFuMSI+PHNwYW4+Jm5ic3A7PC9zcGFuPjwvdGQ+XAorICAgICAgICB7
ey9pbXBvcnRhbnR9fVwKKyAgICAgICAgICA8dGQgY2xhc3M9InNwYW4yIG1haWxDb250YWN0Ij57
e25hbWV9fTwvdGQ+XAorICAgICAgICAgIDx0ZCBjbGFzcz0ic3BhbjgiPlwKKyAgICAgICAgICAg
IDxzcGFuIGNsYXNzPSJtYWlsU3ViamVjdCI+XAorICAgICAgICAgICAgICB7e2Zvcm1hdHRlZFN1
YmplY3R9fVwKKyAgICAgICAgICAgIDwvc3Bhbj5cCisgICAgICAgICAgICA8c3BhbiBjbGFzcz0i
bWFpbE1lc3NhZ2UiPlwKKyAgICAgICAgICAgICAgLSA8YSBocmVmPSIjIj57e2Zvcm1hdHRlZE1l
c3NhZ2V9fTwvYT5cCisgICAgICAgICAgICA8L3NwYW4+XAorICAgICAgICAgIDwvdGQ+XAorICAg
ICAgICA8L3RyPlwKKyAgICAgIHt7L21haWxJdGVtc319JzsKKworICAgIHZhciBjb21wb3NlQm94
ID0KKyAgICAgICc8ZGl2IGlkPSJjb21wb3NlX3RvIiBjbGFzcz0ibW9kYWwtaGVhZGVyIGNvbXBv
c2UtaGVhZGVyIj5cCisgICAgICAgIFRvOiA8c2VsZWN0IGlkPSJyZWNpcGllbnRfc2VsZWN0Ij5c
CisgICAgICAgICAge3tecmVwbHl9fTxvcHRpb24gaWQ9InJlY2lwaWVudF9oaW50IiBjbGFzcz0i
aGludCIgc3R5bGU9ImNvbG9yOiNDQUNBQ0EiID5bU2VsZWN0IFJlY2lwaWVudF08L29wdGlvbj57
ey9yZXBseX19XAorICAgICAgICAgIHt7I2NvbnRhY3RzfX1cCisgICAgICAgICAgIDxvcHRpb24g
aWQ9Int7aWR9fSJ7eyNyZWNpcGllbnR9fSBzZWxlY3RlZHt7L3JlY2lwaWVudH19Pnt7Zmlyc3RO
YW1lfX0ge3tsYXN0TmFtZX19PC9vcHRpb24+XAorICAgICAgICAgIHt7L2NvbnRhY3RzfX1cCisg
ICAgICAgIDwvc2VsZWN0PlwKKyAgICAgIDwvZGl2PlwKKyAgICAgIDxkaXYgY2xhc3M9Im1vZGFs
LWJvZHkgY29tcG9zZS1ib2R5Ij5cCisgICAgICAgIDxkaXYgaWQ9ImNvbXBvc2Vfc3ViamVjdCIg
Y2xhc3M9Int7I25ld01haWx9fWhpbnR7ey9uZXdNYWlsfX17e15uZXdNYWlsfX1jb21wb3NlLWhl
YWRlcnt7L25ld01haWx9fSIgY29udGVudEVkaXRhYmxlPSJ0cnVlIj5cCisgICAgICAgICAge3tz
dWJqZWN0fX1cCisgICAgICAgIDwvZGl2PlwKKyAgICAgICAgPGRpdiBpZD0iY29tcG9zZV9tZXNz
YWdlIiBjbGFzcz0iaGludCIgY29udGVudEVkaXRhYmxlPSJ0cnVlIj5cCisgICAgICAgICAge3tt
ZXNzYWdlfX1cCisgICAgICAgIDwvZGl2PlwKKyAgICAgIDwvZGl2PlwKKyAgICAgIDxkaXYgY2xh
c3M9Im1vZGFsLWZvb3RlciI+XAorICAgICAgICA8YnV0dG9uIGlkPSJzZW5kX2NvbXBvc2VkIiB7
e15yZXBseX19ZGlzYWJsZWQ9ImRpc2FibGVkInt7L3JlcGx5fX0gY2xhc3M9ImJ0biBidG4tcHJp
bWFyeSI+U2VuZDwvYnV0dG9uPlwKKyAgICAgICAgPGJ1dHRvbiBpZD0iY2FuY2VsX2NvbXBvc2Vk
IiBjbGFzcz0iYnRuIj5DYW5jZWw8L2J1dHRvbj5cCisgICAgICA8L2Rpdj4nOworCisgICAgdmFy
IG1vdmVUb1NlbGVjdG9yID0KKyAgICAgICc8dWwgY2xhc3M9Im5hdiBuYXYtbGlzdCI+XAorICAg
ICAge3sjbW92ZVRvSXRlbXN9fVwKKyAgICAgICAgPGxpIGlkPSJ7ey59fSIgY2xhc3M9Im1vdmUt
dG8taXRlbSI+e3sufX08L2xpPlwKKyAgICAgIHt7L21vdmVUb0l0ZW1zfX1cCisgICAgICA8L3Vs
Pic7CisKKyAgICByZXR1cm4geworICAgICAgbWFpbEl0ZW06IG1haWxJdGVtLAorICAgICAgY29t
cG9zZUJveDogY29tcG9zZUJveCwKKyAgICAgIG1vdmVUb1NlbGVjdG9yOiBtb3ZlVG9TZWxlY3Rv
cgorICAgIH0KKyAgfQorCispOwpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5j
aC9mbGlnaHRqcy1leGFtcGxlLWFwcC9hcHAvYm9vdC9wYWdlLmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBl
cmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvYXBwL2Jv
b3QvcGFnZS5qcwkocmV2aXNpb24gMCkKKysrIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVu
Y2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvYXBwL2Jvb3QvcGFnZS5qcwkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDQ3IEBACisndXNlIHN0cmljdCc7CisKK2RlZmluZSgKKworICBbCisgICAgJ2Fw
cC9jb21wb25lbnRfZGF0YS9tYWlsX2l0ZW1zJywKKyAgICAnYXBwL2NvbXBvbmVudF9kYXRhL2Nv
bXBvc2VfYm94JywKKyAgICAnYXBwL2NvbXBvbmVudF9kYXRhL21vdmVfdG8nLAorICAgICdhcHAv
Y29tcG9uZW50X3VpL21haWxfaXRlbXMnLAorICAgICdhcHAvY29tcG9uZW50X3VpL21haWxfY29u
dHJvbHMnLAorICAgICdhcHAvY29tcG9uZW50X3VpL2NvbXBvc2VfYm94JywKKyAgICAnYXBwL2Nv
bXBvbmVudF91aS9mb2xkZXJzJywKKyAgICAnYXBwL2NvbXBvbmVudF91aS9tb3ZlX3RvX3NlbGVj
dG9yJworICBdLAorCisgIGZ1bmN0aW9uKAorICAgIE1haWxJdGVtc0RhdGEsCisgICAgQ29tcG9z
ZUJveERhdGEsCisgICAgTW92ZVRvRGF0YSwKKyAgICBNYWlsSXRlbXNVSSwKKyAgICBNYWlsQ29u
dHJvbHNVSSwKKyAgICBDb21wb3NlQm94VUksCisgICAgRm9sZGVyc1VJLAorICAgIE1vdmVUb1Nl
bGVjdG9yVUkpIHsKKworICAgIGZ1bmN0aW9uIGluaXRpYWxpemUoKSB7CisgICAgICBNYWlsSXRl
bXNEYXRhLmF0dGFjaFRvKGRvY3VtZW50KTsKKyAgICAgIENvbXBvc2VCb3hEYXRhLmF0dGFjaFRv
KGRvY3VtZW50LCB7CisgICAgICAgIHNlbGVjdGVkRm9sZGVyczogWydpbmJveCddCisgICAgICB9
KTsKKyAgICAgIE1vdmVUb0RhdGEuYXR0YWNoVG8oZG9jdW1lbnQpOworICAgICAgTWFpbEl0ZW1z
VUkuYXR0YWNoVG8oJyNtYWlsX2l0ZW1zJywgeworICAgICAgICBpdGVtQ29udGFpbmVyU2VsZWN0
b3I6ICcjbWFpbF9pdGVtc19UQicsCisgICAgICAgIHNlbGVjdGVkRm9sZGVyczogWydpbmJveCdd
CisgICAgICB9KTsKKyAgICAgIE1haWxDb250cm9sc1VJLmF0dGFjaFRvKCcjbWFpbF9jb250cm9s
cycpOworICAgICAgQ29tcG9zZUJveFVJLmF0dGFjaFRvKCcjY29tcG9zZV9ib3gnKTsKKyAgICAg
IEZvbGRlcnNVSS5hdHRhY2hUbygnI2ZvbGRlcnMnKTsKKyAgICAgIE1vdmVUb1NlbGVjdG9yVUku
YXR0YWNoVG8oJyNtb3ZlX3RvX3NlbGVjdG9yJywgeworICAgICAgICBtb3ZlQWN0aW9uU2VsZWN0
b3I6ICcjbW92ZV9tYWlsJywKKyAgICAgICAgc2VsZWN0ZWRGb2xkZXJzOiBbJ2luYm94J10KKyAg
ICAgIH0pOworICAgIH0KKworICAgIHJldHVybiBpbml0aWFsaXplOworICB9CispOwpJbmRleDog
UGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9hcHAv
Y29tcG9uZW50X2RhdGEvY29tcG9zZV9ib3guanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VU
ZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9hcHAvY29tcG9uZW50X2Rh
dGEvY29tcG9zZV9ib3guanMJKHJldmlzaW9uIDApCisrKyBQZXJmb3JtYW5jZVRlc3RzL0RvWW91
RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2FwcC9jb21wb25lbnRfZGF0YS9jb21wb3Nl
X2JveC5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDkzIEBACisndXNlIHN0cmljdCc7CisK
K2RlZmluZSgKKworICBbCisgICAgJ2ZsaWdodC9saWIvY29tcG9uZW50JywKKyAgICAnY29tcG9u
ZW50cy9tdXN0YWNoZS9tdXN0YWNoZScsCisgICAgJ2FwcC9kYXRhJywKKyAgICAnYXBwL3RlbXBs
YXRlcycKKyAgXSwKKworICBmdW5jdGlvbihkZWZpbmVDb21wb25lbnQsIE11c3RhY2hlLCBkYXRh
U3RvcmUsIHRlbXBsYXRlcykgeworICAgIHJldHVybiBkZWZpbmVDb21wb25lbnQoY29tcG9zZUJv
eCk7CisKKyAgICBmdW5jdGlvbiBjb21wb3NlQm94KCkgeworCisgICAgICB0aGlzLmRlZmF1bHRB
dHRycyh7CisgICAgICAgIGRhdGFTdG9yZTogZGF0YVN0b3JlLAorICAgICAgICByZWNpcGllbnRI
aW50SWQ6ICdyZWNpcGllbnRfaGludCcsCisgICAgICAgIHN1YmplY3RIaW50OiAnU3ViamVjdCcs
CisgICAgICAgIG1lc3NhZ2VIaW50OiAnTWVzc2FnZScsCisgICAgICAgIHRvSGludDogJ1RvJywK
KyAgICAgICAgZm9yd2FyZFByZWZpeDogJ0Z3JywKKyAgICAgICAgcmVwbHlQcmVmaXg6ICdSZScK
KyAgICAgIH0pOworCisgICAgICB0aGlzLnNlcnZlQ29tcG9zZUJveCA9IGZ1bmN0aW9uKGV2LCBk
YXRhKSB7CisgICAgICAgIHRoaXMudHJpZ2dlcigiZGF0YUNvbXBvc2VCb3hTZXJ2ZWQiLCB7Cisg
ICAgICAgICAgbWFya3VwOiB0aGlzLnJlbmRlckNvbXBvc2VCb3goZGF0YS50eXBlLCBkYXRhLnJl
bGF0ZWRNYWlsSWQpLAorICAgICAgICAgIHR5cGU6IGRhdGEudHlwZX0pOworICAgICAgfTsKKwor
ICAgICAgdGhpcy5nZXRTdWJqZWN0ID0gZnVuY3Rpb24odHlwZSwgcmVsYXRlZE1haWxJZCkgewor
ICAgICAgICB2YXIgcmVsYXRlZE1haWwgPSB0aGlzLmF0dHIuZGF0YVN0b3JlLm1haWwuZmlsdGVy
KGZ1bmN0aW9uKGVhY2gpIHsKKyAgICAgICAgICByZXR1cm4gZWFjaC5pZCA9PSAgcmVsYXRlZE1h
aWxJZDsKKyAgICAgICAgfSlbMF07CisKKyAgICAgICAgdmFyIHN1YmplY3QgPSByZWxhdGVkTWFp
bCAmJiByZWxhdGVkTWFpbC5zdWJqZWN0OworCisgICAgICAgIHZhciBzdWJqZWN0TG9va3VwID0g
eworICAgICAgICAgIG5ld01haWw6IHRoaXMuYXR0ci5zdWJqZWN0SGludCwKKyAgICAgICAgICBm
b3J3YXJkOiB0aGlzLmF0dHIuZm9yd2FyZFByZWZpeCArICI6ICIgKyBzdWJqZWN0LAorICAgICAg
ICAgIHJlcGx5OiB0aGlzLmF0dHIucmVwbHlQcmVmaXggKyAiOiAiICsgc3ViamVjdAorICAgICAg
ICB9CisKKyAgICAgICAgcmV0dXJuIHN1YmplY3RMb29rdXBbdHlwZV07CisgICAgICB9OworCisg
ICAgICB0aGlzLnJlbmRlckNvbXBvc2VCb3ggPSBmdW5jdGlvbih0eXBlLCByZWxhdGVkTWFpbElk
KSB7CisgICAgICAgIHZhciByZWNpcGllbnRJZCA9IHRoaXMuZ2V0UmVjaXBpZW50SWQodHlwZSwg
cmVsYXRlZE1haWxJZCk7CisgICAgICAgIHZhciBjb250YWN0cyA9IHRoaXMuYXR0ci5kYXRhU3Rv
cmUuY29udGFjdHMubWFwKGZ1bmN0aW9uKGNvbnRhY3QpIHsKKyAgICAgICAgICBjb250YWN0LnJl
Y2lwaWVudCA9IChjb250YWN0LmlkID09IHJlY2lwaWVudElkKTsKKyAgICAgICAgICByZXR1cm4g
Y29udGFjdDsKKyAgICAgICAgfSk7CisKKyAgICAgICAgcmV0dXJuIE11c3RhY2hlLnJlbmRlcih0
ZW1wbGF0ZXMuY29tcG9zZUJveCwgeworICAgICAgICAgIG5ld01haWw6IHR5cGUgPT0gJ25ld01h
aWwnLAorICAgICAgICAgIHJlcGx5OiB0eXBlID09ICdyZXBseScsCisgICAgICAgICAgc3ViamVj
dDogdGhpcy5nZXRTdWJqZWN0KHR5cGUsIHJlbGF0ZWRNYWlsSWQpLAorICAgICAgICAgIG1lc3Nh
Z2U6IHRoaXMuYXR0ci5tZXNzYWdlSGludCwKKyAgICAgICAgICBjb250YWN0czogY29udGFjdHMK
KyAgICAgICAgfSk7CisgICAgICB9OworCisgICAgICB0aGlzLmdldFJlY2lwaWVudElkID0gZnVu
Y3Rpb24odHlwZSwgcmVsYXRlZE1haWxJZCkgeworICAgICAgICB2YXIgcmVsYXRlZE1haWwgPSAo
dHlwZSA9PSAncmVwbHknKSAmJiB0aGlzLmF0dHIuZGF0YVN0b3JlLm1haWwuZmlsdGVyKGZ1bmN0
aW9uKGVhY2gpIHsKKyAgICAgICAgICByZXR1cm4gZWFjaC5pZCA9PSAgcmVsYXRlZE1haWxJZDsK
KyAgICAgICAgfSlbMF07CisKKyAgICAgICAgcmV0dXJuIHJlbGF0ZWRNYWlsICYmIHJlbGF0ZWRN
YWlsLmNvbnRhY3RfaWQgfHwgdGhpcy5hdHRyLnJlY2lwaWVudEhpbnRJZDsKKyAgICAgIH07CisK
KworICAgICAgdGhpcy5zZW5kID0gZnVuY3Rpb24oZXYsIGRhdGEpIHsKKyAgICAgICAgdGhpcy5h
dHRyLmRhdGFTdG9yZS5tYWlsLnB1c2goeworICAgICAgICAgIGlkOiBTdHJpbmcoRGF0ZS5ub3co
KSksCisgICAgICAgICAgY29udGFjdF9pZDogZGF0YS50b19pZCwKKyAgICAgICAgICBmb2xkZXJz
OiBbInNlbnQiXSwKKyAgICAgICAgICB0aW1lOiBEYXRlLm5vdygpLAorICAgICAgICAgIHN1Ympl
Y3Q6IGRhdGEuc3ViamVjdCwKKyAgICAgICAgICBtZXNzYWdlOiBkYXRhLm1lc3NhZ2UKKyAgICAg
ICAgfSk7CisgICAgICAgIHRoaXMudHJpZ2dlcignZGF0YU1haWxJdGVtc1JlZnJlc2hSZXF1ZXN0
ZWQnLCB7Zm9sZGVyOiBkYXRhLmN1cnJlbnRGb2xkZXJ9KTsKKyAgICAgIH07CisKKyAgICAgIHRo
aXMuYWZ0ZXIoImluaXRpYWxpemUiLCBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy5vbigidWlD
b21wb3NlQm94UmVxdWVzdGVkIiwgdGhpcy5zZXJ2ZUNvbXBvc2VCb3gpOworICAgICAgICB0aGlz
Lm9uKCJ1aVNlbmRSZXF1ZXN0ZWQiLCB0aGlzLnNlbmQpOworICAgICAgfSk7CisgICAgfQorCisg
IH0KKyk7CkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4
YW1wbGUtYXBwL2FwcC9jb21wb25lbnRfZGF0YS9tYWlsX2l0ZW1zLmpzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvYXBw
L2NvbXBvbmVudF9kYXRhL21haWxfaXRlbXMuanMJKHJldmlzaW9uIDApCisrKyBQZXJmb3JtYW5j
ZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2FwcC9jb21wb25lbnRf
ZGF0YS9tYWlsX2l0ZW1zLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjggQEAKKyd1c2Ug
c3RyaWN0JzsKKworZGVmaW5lKAorCisgIFsKKyAgICAnZmxpZ2h0L2xpYi9jb21wb25lbnQnLAor
ICAgICdjb21wb25lbnRzL211c3RhY2hlL211c3RhY2hlJywKKyAgICAnYXBwL2RhdGEnLAorICAg
ICdhcHAvdGVtcGxhdGVzJworICBdLAorCisgIGZ1bmN0aW9uKGRlZmluZUNvbXBvbmVudCwgTXVz
dGFjaGUsIGRhdGFTdG9yZSwgdGVtcGxhdGVzKSB7CisgICAgcmV0dXJuIGRlZmluZUNvbXBvbmVu
dChtYWlsSXRlbXMpOworCisgICAgZnVuY3Rpb24gbWFpbEl0ZW1zKCkgeworCisgICAgICB0aGlz
LmRlZmF1bHRBdHRycyh7CisgICAgICAgIGZvbGRlcjogJ2luYm94JywKKyAgICAgICAgZGF0YVN0
b3JlOiBkYXRhU3RvcmUKKyAgICAgIH0pOworCisgICAgICB0aGlzLnNlcnZlTWFpbEl0ZW1zID0g
ZnVuY3Rpb24oZXYsIGRhdGEpIHsKKyAgICAgICAgdmFyIGZvbGRlciA9IChkYXRhICYmIGRhdGEu
Zm9sZGVyKSB8fCB0aGlzLmF0dHIuZm9sZGVyOworICAgICAgICB0aGlzLnRyaWdnZXIoImRhdGFN
YWlsSXRlbXNTZXJ2ZWQiLCB7bWFya3VwOiB0aGlzLnJlbmRlckl0ZW1zKHRoaXMuYXNzZW1ibGVJ
dGVtcyhmb2xkZXIpKX0pCisgICAgICB9OworCisgICAgICB0aGlzLnJlbmRlckl0ZW1zID0gZnVu
Y3Rpb24oaXRlbXMpIHsKKyAgICAgICAgcmV0dXJuIE11c3RhY2hlLnJlbmRlcih0ZW1wbGF0ZXMu
bWFpbEl0ZW0sIHttYWlsSXRlbXM6IGl0ZW1zfSk7CisgICAgICB9OworCisgICAgICB0aGlzLmFz
c2VtYmxlSXRlbXMgPSBmdW5jdGlvbihmb2xkZXIpIHsKKyAgICAgICAgdmFyIGl0ZW1zID0gW107
CisKKyAgICAgICAgdGhpcy5hdHRyLmRhdGFTdG9yZS5tYWlsLmZvckVhY2goZnVuY3Rpb24oZWFj
aCkgeworICAgICAgICAgIGlmIChlYWNoLmZvbGRlcnMgJiYgZWFjaC5mb2xkZXJzLmluZGV4T2Yo
Zm9sZGVyKSA+IC0xKSB7CisgICAgICAgICAgICBpdGVtcy5wdXNoKHRoaXMuZ2V0SXRlbUZvclZp
ZXcoZWFjaCkpOworICAgICAgICAgIH0KKyAgICAgICAgfSwgdGhpcyk7CisKKyAgICAgICAgcmV0
dXJuIGl0ZW1zOworICAgICAgfTsKKworICAgICAgdGhpcy5nZXRJdGVtRm9yVmlldyA9IGZ1bmN0
aW9uKGl0ZW1EYXRhKSB7CisgICAgICAgIHZhciB0aGlzSXRlbSwgdGhpc0NvbnRhY3QsIG1zZwor
CisgICAgICAgIHRoaXNJdGVtID0ge2lkOiBpdGVtRGF0YS5pZCwgaW1wb3J0YW50OiBpdGVtRGF0
YS5pbXBvcnRhbnR9OworCisgICAgICAgIHRoaXNDb250YWN0ID0gdGhpcy5hdHRyLmRhdGFTdG9y
ZS5jb250YWN0cy5maWx0ZXIoZnVuY3Rpb24oY29udGFjdCkgeworICAgICAgICAgIHJldHVybiBj
b250YWN0LmlkID09IGl0ZW1EYXRhLmNvbnRhY3RfaWQKKyAgICAgICAgfSlbMF07CisgICAgICAg
IHRoaXNJdGVtLm5hbWUgPSBbdGhpc0NvbnRhY3QuZmlyc3ROYW1lLCB0aGlzQ29udGFjdC5sYXN0
TmFtZV0uam9pbignICcpOworCisgICAgICAgIHZhciBzdWJqID0gaXRlbURhdGEuc3ViamVjdDsK
KyAgICAgICAgdGhpc0l0ZW0uZm9ybWF0dGVkU3ViamVjdCA9IHN1YmoubGVuZ3RoID4gNzAgPyBz
dWJqLnNsaWNlKDAsIDcwKSArICIuLi4iIDogc3ViajsKKworICAgICAgICB2YXIgbXNnID0gaXRl
bURhdGEubWVzc2FnZTsKKyAgICAgICAgdGhpc0l0ZW0uZm9ybWF0dGVkTWVzc2FnZSA9IG1zZy5s
ZW5ndGggPiA3MCA/IG1zZy5zbGljZSgwLCA3MCkgKyAiLi4uIiA6IG1zZzsKKworICAgICAgICBy
ZXR1cm4gdGhpc0l0ZW07CisgICAgICB9OworCisgICAgICB0aGlzLmFmdGVyKCJpbml0aWFsaXpl
IiwgZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMub24oInVpTWFpbEl0ZW1zUmVxdWVzdGVkIiwg
dGhpcy5zZXJ2ZU1haWxJdGVtcyk7CisgICAgICAgIHRoaXMub24oImRhdGFNYWlsSXRlbXNSZWZy
ZXNoUmVxdWVzdGVkIiwgdGhpcy5zZXJ2ZU1haWxJdGVtcyk7CisgICAgICB9KTsKKyAgICB9Cisg
IH0KKyk7CkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4
YW1wbGUtYXBwL2FwcC9jb21wb25lbnRfZGF0YS9tb3ZlX3RvLmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBl
cmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvYXBwL2Nv
bXBvbmVudF9kYXRhL21vdmVfdG8uanMJKHJldmlzaW9uIDApCisrKyBQZXJmb3JtYW5jZVRlc3Rz
L0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2FwcC9jb21wb25lbnRfZGF0YS9t
b3ZlX3RvLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTIgQEAKKyd1c2Ugc3RyaWN0JzsK
KworZGVmaW5lKAorCisgIFsKKyAgICAnZmxpZ2h0L2xpYi9jb21wb25lbnQnLAorICAgICdjb21w
b25lbnRzL211c3RhY2hlL211c3RhY2hlJywKKyAgICAnYXBwL2RhdGEnLAorICAgICdhcHAvdGVt
cGxhdGVzJworICBdLAorCisgIGZ1bmN0aW9uKGRlZmluZUNvbXBvbmVudCwgTXVzdGFjaGUsIGRh
dGFTdG9yZSwgdGVtcGxhdGVzKSB7CisgICAgcmV0dXJuIGRlZmluZUNvbXBvbmVudChtb3ZlVG8p
OworCisgICAgZnVuY3Rpb24gbW92ZVRvKCkgeworCisgICAgICB0aGlzLmRlZmF1bHRBdHRycyh7
CisgICAgICAgIGRhdGFTdG9yZTogZGF0YVN0b3JlCisgICAgICB9KTsKKworICAgICAgdGhpcy5z
ZXJ2ZUF2YWlsYWJsZUZvbGRlcnMgPSBmdW5jdGlvbihldiwgZGF0YSkgeworICAgICAgICB0aGlz
LnRyaWdnZXIoImRhdGFNb3ZlVG9JdGVtc1NlcnZlZCIsIHsKKyAgICAgICAgICBtYXJrdXA6IHRo
aXMucmVuZGVyRm9sZGVyU2VsZWN0b3IodGhpcy5nZXRPdGhlckZvbGRlcnMoZGF0YS5mb2xkZXIp
KQorICAgICAgICB9KQorICAgICAgfTsKKworICAgICAgdGhpcy5yZW5kZXJGb2xkZXJTZWxlY3Rv
ciA9IGZ1bmN0aW9uKGl0ZW1zKSB7CisgICAgICAgIHJldHVybiBNdXN0YWNoZS5yZW5kZXIodGVt
cGxhdGVzLm1vdmVUb1NlbGVjdG9yLCB7bW92ZVRvSXRlbXM6IGl0ZW1zfSk7CisgICAgICB9Owor
CisgICAgICB0aGlzLm1vdmVJdGVtcyA9IGZ1bmN0aW9uKGV2LCBkYXRhKSB7CisgICAgICAgIHZh
ciBpdGVtc1RvTW92ZUlkcyA9IGRhdGEuaXRlbUlkcworICAgICAgICB0aGlzLmF0dHIuZGF0YVN0
b3JlLm1haWwuZm9yRWFjaChmdW5jdGlvbihpdGVtKSB7CisgICAgICAgICAgaWYgKGl0ZW1zVG9N
b3ZlSWRzLmluZGV4T2YoaXRlbS5pZCkgPiAtMSkgeworICAgICAgICAgICAgaXRlbS5mb2xkZXJz
ID0gW2RhdGEudG9Gb2xkZXJdOworICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICAgIHRo
aXMudHJpZ2dlcignZGF0YU1haWxJdGVtc1JlZnJlc2hSZXF1ZXN0ZWQnLCB7Zm9sZGVyOiBkYXRh
LmZyb21Gb2xkZXJ9KTsKKyAgICAgIH07CisKKyAgICAgIHRoaXMuZ2V0T3RoZXJGb2xkZXJzID0g
ZnVuY3Rpb24oZm9sZGVyKSB7CisgICAgICAgIHJldHVybiB0aGlzLmF0dHIuZGF0YVN0b3JlLmZv
bGRlcnMuZmlsdGVyKGZ1bmN0aW9uKGUpIHtyZXR1cm4gZSAhPSBmb2xkZXJ9KTsKKyAgICAgIH07
CisKKyAgICAgIHRoaXMuYWZ0ZXIoImluaXRpYWxpemUiLCBmdW5jdGlvbigpIHsKKyAgICAgICAg
dGhpcy5vbigidWlBdmFpbGFibGVGb2xkZXJzUmVxdWVzdGVkIiwgdGhpcy5zZXJ2ZUF2YWlsYWJs
ZUZvbGRlcnMpOworICAgICAgICB0aGlzLm9uKCJ1aU1vdmVJdGVtc1JlcXVlc3RlZCIsIHRoaXMu
bW92ZUl0ZW1zKTsKKyAgICAgIH0pOworICAgIH0KKworICB9CispOwpJbmRleDogUGVyZm9ybWFu
Y2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9hcHAvY29tcG9uZW50
X3VpL2NvbXBvc2VfYm94LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VF
dmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvYXBwL2NvbXBvbmVudF91aS9jb21wb3NlX2Jv
eC5qcwkocmV2aXNpb24gMCkKKysrIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxp
Z2h0anMtZXhhbXBsZS1hcHAvYXBwL2NvbXBvbmVudF91aS9jb21wb3NlX2JveC5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDExMyBAQAorJ3VzZSBzdHJpY3QnOworCitkZWZpbmUoCisKKyAg
WworICAgICdmbGlnaHQvbGliL2NvbXBvbmVudCcKKyAgXSwKKworICBmdW5jdGlvbihkZWZpbmVD
b21wb25lbnQpIHsKKworICAgIHJldHVybiBkZWZpbmVDb21wb25lbnQoY29tcG9zZUJveCk7CisK
KyAgICBmdW5jdGlvbiBjb21wb3NlQm94KCkgeworCisgICAgICB0aGlzLmRlZmF1bHRBdHRycyh7
CisgICAgICAgIG5ld01haWxUeXBlOiAnbmV3TWFpbCcsCisgICAgICAgIGZvcndhcmRNYWlsVHlw
ZTogJ2ZvcndhcmQnLAorICAgICAgICByZXBseU1haWxUeXBlOiAncmVwbHknLAorICAgICAgICBo
aW50Q2xhc3M6ICdoaW50JywKKyAgICAgICAgc2VsZWN0ZWRGb2xkZXJzOiBbXSwKKyAgICAgICAg
c2VsZWN0ZWRNYWlsSXRlbXM6IFtdLAorCisgICAgICAgIC8vc2VsZWN0b3JzCisgICAgICAgIGNv
bXBvc2VDb250cm9sOiAnLmNvbXBvc2UnLAorICAgICAgICBuZXdDb250cm9sU2VsZWN0b3I6ICcj
bmV3X21haWwnLAorICAgICAgICBjYW5jZWxTZWxlY3RvcjogJyNjYW5jZWxfY29tcG9zZWQnLAor
ICAgICAgICBzZW5kU2VsZWN0b3I6ICcjc2VuZF9jb21wb3NlZCcsCisgICAgICAgIHRvU2VsZWN0
b3I6ICcjY29tcG9zZV90bycsCisgICAgICAgIHN1YmplY3RTZWxlY3RvcjogJyNjb21wb3NlX3N1
YmplY3QnLAorICAgICAgICBtZXNzYWdlU2VsZWN0b3I6ICcjY29tcG9zZV9tZXNzYWdlJywKKyAg
ICAgICAgcmVjaXBpZW50U2VsZWN0b3I6ICcjcmVjaXBpZW50X3NlbGVjdCcsCisgICAgICAgIHJl
Y2lwaWVudEhpbnRTZWxlY3RvcjogJyNyZWNpcGllbnRfaGludCcsCisgICAgICAgIHNlbGVjdGVk
UmVjaXBpZW50U2VsZWN0b3I6ICcjcmVjaXBpZW50X3NlbGVjdCA6c2VsZWN0ZWQnLAorICAgICAg
ICBoaW50U2VsZWN0b3I6ICdkaXYuaGludCcKKyAgICAgIH0pOworCisgICAgICB0aGlzLm5ld01h
aWwgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy5yZXF1ZXN0Q29tcG9zZUJveCh0aGlzLmF0
dHIubmV3TWFpbFR5cGUpOworICAgICAgfTsKKworICAgICAgdGhpcy5mb3J3YXJkID0gZnVuY3Rp
b24oKSB7CisgICAgICAgIHRoaXMucmVxdWVzdENvbXBvc2VCb3godGhpcy5hdHRyLmZvcndhcmRN
YWlsVHlwZSwgdGhpcy5hdHRyLnNlbGVjdGVkTWFpbEl0ZW1zKTsKKyAgICAgIH07CisKKyAgICAg
IHRoaXMucmVwbHkgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy5yZXF1ZXN0Q29tcG9zZUJv
eCh0aGlzLmF0dHIucmVwbHlNYWlsVHlwZSwgdGhpcy5hdHRyLnNlbGVjdGVkTWFpbEl0ZW1zKTsK
KyAgICAgIH07CisKKyAgICAgIHRoaXMucmVxdWVzdENvbXBvc2VCb3ggPSBmdW5jdGlvbih0eXBl
LCByZWxhdGVkTWFpbElkKSB7CisgICAgICAgIHRoaXMudHJpZ2dlcigndWlDb21wb3NlQm94UmVx
dWVzdGVkJywge3R5cGU6IHR5cGUsIHJlbGF0ZWRNYWlsSWQ6IHJlbGF0ZWRNYWlsSWR9KTsKKyAg
ICAgIH07CisKKyAgICAgIHRoaXMubGF1bmNoQ29tcG9zZUJveCA9IGZ1bmN0aW9uKGV2LCBkYXRh
KSB7CisgICAgICAgIHZhciBmb2N1c1NlbGVjdG9yID0gKGRhdGEudHlwZSA9PSB0aGlzLmF0dHIu
cmVwbHlNYWlsVHlwZSkgPyAnbWVzc2FnZVNlbGVjdG9yJyA6ICd0b1NlbGVjdG9yJzsKKyAgICAg
ICAgdGhpcy4kbm9kZS5odG1sKGRhdGEubWFya3VwKS5zaG93KCk7CisgICAgICAgIHRoaXMuc2Vs
ZWN0KGZvY3VzU2VsZWN0b3IpLmZvY3VzKCk7CisgICAgICB9OworCisgICAgICB0aGlzLmNhbmNl
bCA9IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLiRub2RlLmh0bWwoJycpLmhpZGUoKTsKKyAg
ICAgIH07CisKKyAgICAgIHRoaXMucmVxdWVzdFNlbmQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAg
dmFyIGRhdGEgPSB7CisgICAgICAgICAgdG9faWQ6IHRoaXMuc2VsZWN0KCdzZWxlY3RlZFJlY2lw
aWVudFNlbGVjdG9yJykuYXR0cignaWQnKSwKKyAgICAgICAgICBzdWJqZWN0OiB0aGlzLnNlbGVj
dCgnc3ViamVjdFNlbGVjdG9yJykudGV4dCgpLAorICAgICAgICAgIG1lc3NhZ2U6IHRoaXMuc2Vs
ZWN0KCdtZXNzYWdlU2VsZWN0b3InKS50ZXh0KCksCisgICAgICAgICAgY3VycmVudEZvbGRlcjog
dGhpcy5hdHRyLnNlbGVjdGVkRm9sZGVyc1swXQorICAgICAgICB9OworICAgICAgICB0aGlzLnRy
aWdnZXIoJ3VpU2VuZFJlcXVlc3RlZCcsIGRhdGEpOworICAgICAgICB0aGlzLiRub2RlLmhpZGUo
KTsKKyAgICAgIH07CisKKyAgICAgIHRoaXMuZW5hYmxlU2VuZCA9IGZ1bmN0aW9uKCkgeworICAg
ICAgICB0aGlzLnNlbGVjdCgncmVjaXBpZW50SGludFNlbGVjdG9yJykuYXR0cignZGlzYWJsZWQn
LCAnZGlzYWJsZWQnKTsKKyAgICAgICAgdGhpcy5zZWxlY3QoJ3NlbmRTZWxlY3RvcicpLnJlbW92
ZUF0dHIoJ2Rpc2FibGVkJyk7CisgICAgICB9OworCisgICAgICB0aGlzLnJlbW92ZUhpbnQgPSBm
dW5jdGlvbihldiwgZGF0YSkgeworICAgICAgICAkKGV2LnRhcmdldCkuaHRtbCgnJykucmVtb3Zl
Q2xhc3ModGhpcy5hdHRyLmhpbnRDbGFzcyk7CisgICAgICB9OworCisgICAgICB0aGlzLnVwZGF0
ZU1haWxJdGVtU2VsZWN0aW9ucyA9IGZ1bmN0aW9uKGV2LCBkYXRhKSB7CisgICAgICAgIHRoaXMu
YXR0ci5zZWxlY3RlZE1haWxJdGVtcyA9IGRhdGEuc2VsZWN0ZWRJZHM7CisgICAgICB9CisKKyAg
ICAgIHRoaXMudXBkYXRlRm9sZGVyU2VsZWN0aW9ucyA9IGZ1bmN0aW9uKGV2LCBkYXRhKSB7Cisg
ICAgICAgIHRoaXMuYXR0ci5zZWxlY3RlZEZvbGRlcnMgPSBkYXRhLnNlbGVjdGVkSWRzOworICAg
ICAgfQorCisgICAgICB0aGlzLmFmdGVyKCdpbml0aWFsaXplJywgZnVuY3Rpb24oKSB7CisgICAg
ICAgIHRoaXMub24oZG9jdW1lbnQsICdkYXRhQ29tcG9zZUJveFNlcnZlZCcsIHRoaXMubGF1bmNo
Q29tcG9zZUJveCk7CisgICAgICAgIHRoaXMub24oZG9jdW1lbnQsICd1aUZvcndhcmRNYWlsJywg
dGhpcy5mb3J3YXJkKTsKKyAgICAgICAgdGhpcy5vbihkb2N1bWVudCwgJ3VpUmVwbHlUb01haWwn
LCB0aGlzLnJlcGx5KTsKKyAgICAgICAgdGhpcy5vbihkb2N1bWVudCwgJ3VpTWFpbEl0ZW1TZWxl
Y3Rpb25DaGFuZ2VkJywgdGhpcy51cGRhdGVNYWlsSXRlbVNlbGVjdGlvbnMpOworICAgICAgICB0
aGlzLm9uKGRvY3VtZW50LCAndWlGb2xkZXJTZWxlY3Rpb25DaGFuZ2VkJywgdGhpcy51cGRhdGVG
b2xkZXJTZWxlY3Rpb25zKTsKKworICAgICAgICAvL3RoZSBmb2xsb3dpbmcgYmluZGluZ3MgdXNl
IGRlbGVnYXRpb24gc28gdGhhdCB0aGUgZXZlbnQgdGFyZ2V0IGlzIHJlYWQgYXQgZXZlbnQgdGlt
ZQorICAgICAgICB0aGlzLm9uKGRvY3VtZW50LCAiY2xpY2siLCB7CisgICAgICAgICAgJ2NhbmNl
bFNlbGVjdG9yJzogdGhpcy5jYW5jZWwsCisgICAgICAgICAgJ3NlbmRTZWxlY3Rvcic6IHRoaXMu
cmVxdWVzdFNlbmQsCisgICAgICAgICAgJ25ld0NvbnRyb2xTZWxlY3Rvcic6IHRoaXMubmV3TWFp
bAorICAgICAgICB9KTsKKyAgICAgICAgdGhpcy5vbignY2hhbmdlJywgeworICAgICAgICAgICdy
ZWNpcGllbnRTZWxlY3Rvcic6IHRoaXMuZW5hYmxlU2VuZAorICAgICAgICB9KTsKKyAgICAgICAg
dGhpcy5vbigna2V5ZG93bicsIHsKKyAgICAgICAgICAnaGludFNlbGVjdG9yJzogdGhpcy5yZW1v
dmVIaW50CisgICAgICAgIH0pOworICAgICAgfSk7CisgICAgfQorICB9CispOwpJbmRleDogUGVy
Zm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9hcHAvY29t
cG9uZW50X3VpL2ZvbGRlcnMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9Eb1lv
dUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9hcHAvY29tcG9uZW50X3VpL2ZvbGRlcnMu
anMJKHJldmlzaW9uIDApCisrKyBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdo
dGpzLWV4YW1wbGUtYXBwL2FwcC9jb21wb25lbnRfdWkvZm9sZGVycy5qcwkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDM0IEBACisndXNlIHN0cmljdCc7CisKK2RlZmluZSgKKworICBbCisgICAg
J2ZsaWdodC9saWIvY29tcG9uZW50JywKKyAgICAnLi93aXRoX3NlbGVjdCcKKyAgXSwKKworICBm
dW5jdGlvbihkZWZpbmVDb21wb25lbnQsIHdpdGhTZWxlY3QpIHsKKworICAgIHJldHVybiBkZWZp
bmVDb21wb25lbnQoZm9sZGVycywgd2l0aFNlbGVjdCk7CisKKyAgICBmdW5jdGlvbiBmb2xkZXJz
KCkgeworCisgICAgICB0aGlzLmRlZmF1bHRBdHRycyh7CisgICAgICAgIHNlbGVjdGVkQ2xhc3M6
ICdzZWxlY3RlZCcsCisgICAgICAgIHNlbGVjdGlvbkNoYW5nZWRFdmVudDogJ3VpRm9sZGVyU2Vs
ZWN0aW9uQ2hhbmdlZCcsCisKKyAgICAgICAgLy9zZWxlY3RvcnMKKyAgICAgICAgaXRlbVNlbGVj
dG9yOiAnbGkuZm9sZGVyLWl0ZW0nLAorICAgICAgICBzZWxlY3RlZEl0ZW1TZWxlY3RvcjogJ2xp
LmZvbGRlci1pdGVtLnNlbGVjdGVkJworICAgICAgfSk7CisKKyAgICAgIHRoaXMuZmV0Y2hNYWls
SXRlbXMgPSBmdW5jdGlvbihldiwgZGF0YSkgeworICAgICAgICAgIHRoaXMudHJpZ2dlcigndWlN
YWlsSXRlbXNSZXF1ZXN0ZWQnLCB7Zm9sZGVyOiBkYXRhLnNlbGVjdGVkSWRzWzBdfSk7CisgICAg
ICB9CisKKyAgICAgIHRoaXMuYWZ0ZXIoJ2luaXRpYWxpemUnLCBmdW5jdGlvbigpIHsKKyAgICAg
ICAgdGhpcy5vbigndWlGb2xkZXJTZWxlY3Rpb25DaGFuZ2VkJywgdGhpcy5mZXRjaE1haWxJdGVt
cyk7CisgICAgICB9KTsKKyAgICB9CisgIH0KKyk7CkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0Rv
WW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2FwcC9jb21wb25lbnRfdWkvbWFpbF9j
b250cm9scy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNo
L2ZsaWdodGpzLWV4YW1wbGUtYXBwL2FwcC9jb21wb25lbnRfdWkvbWFpbF9jb250cm9scy5qcwko
cmV2aXNpb24gMCkKKysrIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMt
ZXhhbXBsZS1hcHAvYXBwL2NvbXBvbmVudF91aS9tYWlsX2NvbnRyb2xzLmpzCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNjcgQEAKKyd1c2Ugc3RyaWN0JzsKKworZGVmaW5lKAorICBbCisgICAg
J2ZsaWdodC9saWIvY29tcG9uZW50JworICBdLAorCisgIGZ1bmN0aW9uKGRlZmluZUNvbXBvbmVu
dCkgeworCisgICAgcmV0dXJuIGRlZmluZUNvbXBvbmVudChtYWlsQ29udHJvbHMpOworCisgICAg
ZnVuY3Rpb24gbWFpbENvbnRyb2xzKCkgeworICAgICAgdGhpcy5kZWZhdWx0QXR0cnMoeworICAg
ICAgICAvL3NlbGVjdG9ycworICAgICAgICBhY3Rpb25Db250cm9sc1NlbGVjdG9yOiAnYnV0dG9u
Lm1haWwtYWN0aW9uJywKKyAgICAgICAgZGVsZXRlQ29udHJvbFNlbGVjdG9yOiAnI2RlbGV0ZV9t
YWlsJywKKyAgICAgICAgbW92ZUNvbnRyb2xTZWxlY3RvcjogJyNtb3ZlX21haWwnLAorICAgICAg
ICBmb3J3YXJkQ29udHJvbFNlbGVjdG9yOiAnI2ZvcndhcmQnLAorICAgICAgICByZXBseUNvbnRy
b2xTZWxlY3RvcjogJyNyZXBseScsCisgICAgICAgIHNpbmdsZUl0ZW1BY3Rpb25TZWxlY3Rvcjog
J2J1dHRvbi5zaW5nbGUtaXRlbScKKyAgICAgIH0pOworCisgICAgICB0aGlzLmRpc2FibGVBbGwg
PSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy5zZWxlY3QoJ2FjdGlvbkNvbnRyb2xzU2VsZWN0
b3InKS5hdHRyKCdkaXNhYmxlZCcsICdkaXNhYmxlZCcpOworICAgICAgfTsKKworICAgICAgdGhp
cy5yZXN0eWxlT25TZWxlY3Rpb25DaGFuZ2UgPSBmdW5jdGlvbihldiwgZGF0YSkgeworICAgICAg
ICBpZiAoZGF0YS5zZWxlY3RlZElkcy5sZW5ndGggPiAxKSB7CisgICAgICAgICAgdGhpcy5zZWxl
Y3QoJ2FjdGlvbkNvbnRyb2xzU2VsZWN0b3InKS5ub3QoJ2J1dHRvbi5zaW5nbGUtaXRlbScpLnJl
bW92ZUF0dHIoJ2Rpc2FibGVkJyk7CisgICAgICAgICAgdGhpcy5zZWxlY3QoJ3NpbmdsZUl0ZW1B
Y3Rpb25TZWxlY3RvcicpLmF0dHIoJ2Rpc2FibGVkJywgJ2Rpc2FibGVkJyk7CisgICAgICAgIH0g
ZWxzZSBpZiAoZGF0YS5zZWxlY3RlZElkcy5sZW5ndGggPT0gMSkgeworICAgICAgICAgIHRoaXMu
c2VsZWN0KCdhY3Rpb25Db250cm9sc1NlbGVjdG9yJykucmVtb3ZlQXR0cignZGlzYWJsZWQnKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICB0aGlzLmRpc2FibGVBbGwoKTsKKyAgICAgICAg
fQorICAgICAgfTsKKworICAgICAgdGhpcy5kZWxldGVNYWlsID0gZnVuY3Rpb24oZXYsIGRhdGEp
IHsKKyAgICAgICAgdGhpcy50cmlnZ2VyKCd1aURlbGV0ZU1haWwnKTsKKyAgICAgIH07CisKKyAg
ICAgIHRoaXMubW92ZU1haWwgPSBmdW5jdGlvbihldiwgZGF0YSkgeworICAgICAgICB0aGlzLnRy
aWdnZXIoJ3VpTW92ZU1haWwnKTsKKyAgICAgIH07CisKKyAgICAgIHRoaXMuZm9yd2FyZE1haWwg
PSBmdW5jdGlvbihldiwgZGF0YSkgeworICAgICAgICB0aGlzLnRyaWdnZXIoJ3VpRm9yd2FyZE1h
aWwnKTsKKyAgICAgIH07CisKKyAgICAgIHRoaXMucmVwbHlUb01haWwgPSBmdW5jdGlvbihldiwg
ZGF0YSkgeworICAgICAgICB0aGlzLnRyaWdnZXIoJ3VpUmVwbHlUb01haWwnKTsKKyAgICAgIH07
CisKKyAgICAgIHRoaXMuYWZ0ZXIoJ2luaXRpYWxpemUnLCBmdW5jdGlvbigpIHsKKyAgICAgICAg
dGhpcy5vbignLm1haWwtYWN0aW9uJywgJ2NsaWNrJywgeworICAgICAgICAgICdkZWxldGVDb250
cm9sU2VsZWN0b3InOiB0aGlzLmRlbGV0ZU1haWwsCisgICAgICAgICAgJ21vdmVDb250cm9sU2Vs
ZWN0b3InOiB0aGlzLm1vdmVNYWlsLAorICAgICAgICAgICdmb3J3YXJkQ29udHJvbFNlbGVjdG9y
JzogdGhpcy5mb3J3YXJkTWFpbCwKKyAgICAgICAgICAncmVwbHlDb250cm9sU2VsZWN0b3InOiB0
aGlzLnJlcGx5VG9NYWlsCisgICAgICAgIH0pOworICAgICAgICB0aGlzLm9uKGRvY3VtZW50LCAn
dWlNYWlsSXRlbVNlbGVjdGlvbkNoYW5nZWQnLCB0aGlzLnJlc3R5bGVPblNlbGVjdGlvbkNoYW5n
ZSk7CisgICAgICAgIHRoaXMub24oZG9jdW1lbnQsICd1aUZvbGRlclNlbGVjdGlvbkNoYW5nZWQn
LCB0aGlzLmRpc2FibGVBbGwpOworICAgICAgfSk7CisgICAgfQorICB9CispOworCkluZGV4OiBQ
ZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2FwcC9j
b21wb25lbnRfdWkvbWFpbF9pdGVtcy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3Rz
L0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2FwcC9jb21wb25lbnRfdWkvbWFp
bF9pdGVtcy5qcwkocmV2aXNpb24gMCkKKysrIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVu
Y2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvYXBwL2NvbXBvbmVudF91aS9tYWlsX2l0ZW1zLmpzCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjEgQEAKKyd1c2Ugc3RyaWN0JzsKKworZGVmaW5lKAor
CisgIFsKKyAgICAnZmxpZ2h0L2xpYi9jb21wb25lbnQnLAorICAgICcuL3dpdGhfc2VsZWN0Jwor
ICBdLAorCisgIGZ1bmN0aW9uKGRlZmluZUNvbXBvbmVudCwgd2l0aFNlbGVjdCkgeworCisgICAg
cmV0dXJuIGRlZmluZUNvbXBvbmVudChtYWlsSXRlbXMsIHdpdGhTZWxlY3QpOworCisgICAgZnVu
Y3Rpb24gbWFpbEl0ZW1zKCkgeworCisgICAgICB0aGlzLmRlZmF1bHRBdHRycyh7CisgICAgICAg
IGRlbGV0ZUZvbGRlcjogJ3RyYXNoJywKKyAgICAgICAgc2VsZWN0ZWRDbGFzczogJ3NlbGVjdGVk
JywKKyAgICAgICAgYWxsb3dNdWx0aVNlbGVjdDogdHJ1ZSwKKyAgICAgICAgc2VsZWN0aW9uQ2hh
bmdlZEV2ZW50OiAndWlNYWlsSXRlbVNlbGVjdGlvbkNoYW5nZWQnLAorICAgICAgICBzZWxlY3Rl
ZE1haWxJdGVtczogW10sCisgICAgICAgIHNlbGVjdGVkRm9sZGVyczogW10sCisgICAgICAgIC8v
c2VsZWN0b3JzCisgICAgICAgIGl0ZW1TZWxlY3RvcjogJ3RyLm1haWwtaXRlbScsCisgICAgICAg
IHNlbGVjdGVkSXRlbVNlbGVjdG9yOiAndHIubWFpbC1pdGVtLnNlbGVjdGVkJworICAgICAgfSk7
CisKKyAgICAgIHRoaXMucmVuZGVySXRlbXMgPSBmdW5jdGlvbihldiwgZGF0YSkgeworICAgICAg
ICB0aGlzLnNlbGVjdCgnaXRlbUNvbnRhaW5lclNlbGVjdG9yJykuaHRtbChkYXRhLm1hcmt1cCk7
CisgICAgICAgIC8vbmV3IGl0ZW1zLCBzbyBubyBzZWxlY3Rpb25zCisgICAgICAgIHRoaXMudHJp
Z2dlcigndWlNYWlsSXRlbVNlbGVjdGlvbkNoYW5nZWQnLCB7c2VsZWN0ZWRJZHM6IFtdfSk7Cisg
ICAgICB9CisKKyAgICAgIHRoaXMudXBkYXRlTWFpbEl0ZW1TZWxlY3Rpb25zID0gZnVuY3Rpb24o
ZXYsIGRhdGEpIHsKKyAgICAgICAgdGhpcy5hdHRyLnNlbGVjdGVkTWFpbEl0ZW1zID0gZGF0YS5z
ZWxlY3RlZElkczsKKyAgICAgIH0KKworICAgICAgdGhpcy51cGRhdGVGb2xkZXJTZWxlY3Rpb25z
ID0gZnVuY3Rpb24oZXYsIGRhdGEpIHsKKyAgICAgICAgdGhpcy5hdHRyLnNlbGVjdGVkRm9sZGVy
cyA9IGRhdGEuc2VsZWN0ZWRJZHM7CisgICAgICB9CisKKyAgICAgIHRoaXMucmVxdWVzdERlbGV0
aW9uID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMudHJpZ2dlcigndWlNb3ZlSXRlbXNSZXF1
ZXN0ZWQnLCB7CisgICAgICAgICAgaXRlbUlkczogdGhpcy5hdHRyLnNlbGVjdGVkTWFpbEl0ZW1z
LAorICAgICAgICAgIGZyb21Gb2xkZXI6IHRoaXMuYXR0ci5zZWxlY3RlZEZvbGRlcnNbMF0sCisg
ICAgICAgICAgdG9Gb2xkZXI6IHRoaXMuYXR0ci5kZWxldGVGb2xkZXIKKyAgICAgICAgfSk7Cisg
ICAgICB9OworCisgICAgICB0aGlzLmFmdGVyKCdpbml0aWFsaXplJywgZnVuY3Rpb24oKSB7Cisg
ICAgICAgIHRoaXMub24oZG9jdW1lbnQsICdkYXRhTWFpbEl0ZW1zU2VydmVkJywgdGhpcy5yZW5k
ZXJJdGVtcyk7CisgICAgICAgIHRoaXMub24oZG9jdW1lbnQsICd1aURlbGV0ZU1haWwnLCB0aGlz
LnJlcXVlc3REZWxldGlvbik7CisKKyAgICAgICAgdGhpcy5vbigndWlNYWlsSXRlbVNlbGVjdGlv
bkNoYW5nZWQnLCB0aGlzLnVwZGF0ZU1haWxJdGVtU2VsZWN0aW9ucyk7CisgICAgICAgIHRoaXMu
b24oZG9jdW1lbnQsICd1aUZvbGRlclNlbGVjdGlvbkNoYW5nZWQnLCB0aGlzLnVwZGF0ZUZvbGRl
clNlbGVjdGlvbnMpOworCisgICAgICAgIHRoaXMudHJpZ2dlcigndWlNYWlsSXRlbXNSZXF1ZXN0
ZWQnKTsKKyAgICAgIH0pOworICAgIH0KKyAgfQorKTsKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMv
RG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvYXBwL2NvbXBvbmVudF91aS9tb3Zl
X3RvX3NlbGVjdG9yLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVu
QmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvYXBwL2NvbXBvbmVudF91aS9tb3ZlX3RvX3NlbGVj
dG9yLmpzCShyZXZpc2lvbiAwKQorKysgUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9m
bGlnaHRqcy1leGFtcGxlLWFwcC9hcHAvY29tcG9uZW50X3VpL21vdmVfdG9fc2VsZWN0b3IuanMJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3OSBAQAorJ3VzZSBzdHJpY3QnOworCitkZWZpbmUo
CisKKyAgWworICAgICdmbGlnaHQvbGliL2NvbXBvbmVudCcsCisgICAgJy4vd2l0aF9zZWxlY3Qn
CisgIF0sCisKKyAgZnVuY3Rpb24oZGVmaW5lQ29tcG9uZW50LCB3aXRoU2VsZWN0KSB7CisKKyAg
ICByZXR1cm4gZGVmaW5lQ29tcG9uZW50KG1vdmVUb1NlbGVjdG9yLCB3aXRoU2VsZWN0KTsKKwor
ICAgIGZ1bmN0aW9uIG1vdmVUb1NlbGVjdG9yKCkgeworCisgICAgICB0aGlzLmRlZmF1bHRBdHRy
cyh7CisgICAgICAgIHNlbGVjdGlvbkNoYW5nZWRFdmVudDogJ3VpTW92ZVRvU2VsZWN0aW9uQ2hh
bmdlZCcsCisgICAgICAgIHNlbGVjdGVkTWFpbEl0ZW1zOiBbXSwKKyAgICAgICAgc2VsZWN0ZWRG
b2xkZXJzOiBbXSwKKyAgICAgICAgLy9zZWxlY3RvcnMKKyAgICAgICAgaXRlbVNlbGVjdG9yOiAn
bGkubW92ZS10by1pdGVtJywKKyAgICAgICAgc2VsZWN0ZWRJdGVtU2VsZWN0b3I6ICdsaS5tb3Zl
LXRvLWl0ZW0uc2VsZWN0ZWQnCisgICAgICB9KTsKKworICAgICAgdGhpcy5yZXF1ZXN0U2VsZWN0
b3JXaWRnZXQgPSBmdW5jdGlvbihldiwgZGF0YSkgeworICAgICAgICB0aGlzLnRyaWdnZXIoJ3Vp
QXZhaWxhYmxlRm9sZGVyc1JlcXVlc3RlZCcsIHsKKyAgICAgICAgICBmb2xkZXI6IHRoaXMuYXR0
ci5zZWxlY3RlZEZvbGRlcnNbMF0KKyAgICAgICAgfSkKKyAgICAgIH07CisKKyAgICAgIHRoaXMu
bGF1bmNoU2VsZWN0b3IgPSBmdW5jdGlvbihldiwgZGF0YSkgeworICAgICAgICB2YXIgY29udHJv
bFBvc2l0aW9uID0gJCh0aGlzLmF0dHIubW92ZUFjdGlvblNlbGVjdG9yKS5vZmZzZXQoKTsKKyAg
ICAgICAgdGhpcy4kbm9kZS5odG1sKGRhdGEubWFya3VwKS5zaG93KCkuY3NzKHsKKyAgICAgICAg
ICBsZWZ0OiBjb250cm9sUG9zaXRpb24ubGVmdCwKKyAgICAgICAgICB0b3A6IGNvbnRyb2xQb3Np
dGlvbi50b3AgKyAkKHRoaXMuYXR0ci5tb3ZlQWN0aW9uU2VsZWN0b3IpLm91dGVySGVpZ2h0KCks
CisgICAgICAgICAgd2lkdGg6ICQodGhpcy5hdHRyLm1vdmVBY3Rpb25TZWxlY3Rvcikub3V0ZXJX
aWR0aCgpCisgICAgICAgIH0pOworICAgICAgICB3aW5kb3cuc2V0VGltZW91dCgKKyAgICAgICAg
ICAoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICB0aGlzLm9uKGRvY3VtZW50LCAnY2xpY2snLCB0
aGlzLmhpZGVTZWxlY3RvcikKKyAgICAgICAgICB9KS5iaW5kKHRoaXMpLCAwKTsKKyAgICAgIH07
CisKKyAgICAgIHRoaXMuaGlkZVNlbGVjdG9yID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMu
b2ZmKGRvY3VtZW50LCAnY2xpY2snLCB0aGlzLmhpZGVTZWxlY3Rvcik7CisgICAgICAgIHRoaXMu
JG5vZGUuaGlkZSgpOworICAgICAgfQorCisgICAgICB0aGlzLnVwZGF0ZU1haWxJdGVtU2VsZWN0
aW9ucyA9IGZ1bmN0aW9uKGV2LCBkYXRhKSB7CisgICAgICAgIHRoaXMuYXR0ci5zZWxlY3RlZE1h
aWxJdGVtcyA9IGRhdGEuc2VsZWN0ZWRJZHM7CisgICAgICB9CisKKyAgICAgIHRoaXMudXBkYXRl
Rm9sZGVyU2VsZWN0aW9ucyA9IGZ1bmN0aW9uKGV2LCBkYXRhKSB7CisgICAgICAgIHRoaXMuYXR0
ci5zZWxlY3RlZEZvbGRlcnMgPSBkYXRhLnNlbGVjdGVkSWRzOworICAgICAgfQorCisgICAgICB0
aGlzLnJlcXVlc3RNb3ZlVG8gPSBmdW5jdGlvbihldiwgZGF0YSkgeworICAgICAgICB0aGlzLnRy
aWdnZXIoJ3VpTW92ZUl0ZW1zUmVxdWVzdGVkJywgeworICAgICAgICAgIGl0ZW1JZHM6IHRoaXMu
YXR0ci5zZWxlY3RlZE1haWxJdGVtcywKKyAgICAgICAgICBmcm9tRm9sZGVyOiB0aGlzLmF0dHIu
c2VsZWN0ZWRGb2xkZXJzWzBdLAorICAgICAgICAgIHRvRm9sZGVyOiBkYXRhLnNlbGVjdGVkSWRz
WzBdCisgICAgICAgIH0pOworICAgICAgICB0aGlzLiRub2RlLmhpZGUoKTsKKyAgICAgIH07CisK
KyAgICAgIHRoaXMuYWZ0ZXIoJ2luaXRpYWxpemUnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgLy9z
aG93IHNlbGVjdG9yIHdpZGdldAorICAgICAgICB0aGlzLm9uKGRvY3VtZW50LCAndWlNb3ZlTWFp
bCcsIHRoaXMucmVxdWVzdFNlbGVjdG9yV2lkZ2V0KTsKKyAgICAgICAgdGhpcy5vbihkb2N1bWVu
dCwgJ2RhdGFNb3ZlVG9JdGVtc1NlcnZlZCcsIHRoaXMubGF1bmNoU2VsZWN0b3IpOworICAgICAg
ICAvL2xpc3RlbiBmb3Igb3RoZXIgc2VsZWN0aW9ucworICAgICAgICB0aGlzLm9uKGRvY3VtZW50
LCAndWlNYWlsSXRlbVNlbGVjdGlvbkNoYW5nZWQnLCB0aGlzLnVwZGF0ZU1haWxJdGVtU2VsZWN0
aW9ucyk7CisgICAgICAgIHRoaXMub24oZG9jdW1lbnQsICd1aUZvbGRlclNlbGVjdGlvbkNoYW5n
ZWQnLCB0aGlzLnVwZGF0ZUZvbGRlclNlbGVjdGlvbnMpOworICAgICAgICAvL21vdmUgaXRlbXMK
KyAgICAgICAgdGhpcy5vbigndWlNb3ZlVG9TZWxlY3Rpb25DaGFuZ2VkJywgdGhpcy5yZXF1ZXN0
TW92ZVRvKTsKKworICAgICAgfSk7CisgICAgfQorICB9CispOwpJbmRleDogUGVyZm9ybWFuY2VU
ZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9hcHAvY29tcG9uZW50X3Vp
L3dpdGhfc2VsZWN0LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVu
QmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvYXBwL2NvbXBvbmVudF91aS93aXRoX3NlbGVjdC5q
cwkocmV2aXNpb24gMCkKKysrIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0
anMtZXhhbXBsZS1hcHAvYXBwL2NvbXBvbmVudF91aS93aXRoX3NlbGVjdC5qcwkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDY0IEBACisndXNlIHN0cmljdCc7CisKK2RlZmluZSgKKworICBmdW5j
dGlvbigpIHsKKworICAgIHJldHVybiB3aXRoU2VsZWN0OworCisgICAgZnVuY3Rpb24gd2l0aFNl
bGVjdCgpIHsKKworICAgICAgdGhpcy5kZWZhdWx0QXR0cnMoeworICAgICAgICBzZWxlY3RlZElk
czogW10KKyAgICAgIH0pOworCisgICAgICB0aGlzLmluaXRpYWxpemVTZWxlY3Rpb25zID0gZnVu
Y3Rpb24oKSB7CisgICAgICAgIHRoaXMuc2VsZWN0KCdzZWxlY3RlZEl0ZW1TZWxlY3RvcicpLnRv
QXJyYXkoKS5mb3JFYWNoKGZ1bmN0aW9uKGVsKSB7CisgICAgICAgICAgdGhpcy5hdHRyLnNlbGVj
dGVkSWRzLnB1c2goZWwuZ2V0QXR0cmlidXRlKCdpZCcpKTsKKyAgICAgICAgfSwgdGhpcyk7Cisg
ICAgICB9OworCisgICAgICB0aGlzLmdldFNlbGVjdGVkSWRzID0gZnVuY3Rpb24oKSB7CisgICAg
ICAgIHJldHVybiB0aGlzLmF0dHIuc2VsZWN0ZWRJZHM7CisgICAgICB9OworCisgICAgICB0aGlz
LnRvZ2dsZUl0ZW1TZWxlY3QgPSBmdW5jdGlvbihldiwgZGF0YSkgeworICAgICAgICB2YXIgJGl0
ZW0gPSAkKGRhdGEuZWwpLCBhcHBlbmQ7CisKKyAgICAgICAgaWYgKCRpdGVtLmhhc0NsYXNzKHRo
aXMuYXR0ci5zZWxlY3RlZENsYXNzKSkgeworICAgICAgICAgIHRoaXMudW5zZWxlY3RJdGVtKCRp
dGVtKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBhcHBlbmQgPSB0aGlzLmF0dHIuYWxs
b3dNdWx0aVNlbGVjdCAmJiAoZXYubWV0YUtleSB8fCBldi5jdHJsS2V5IHx8IGV2LnNoaWZ0S2V5
KTsKKyAgICAgICAgICB0aGlzLnNlbGVjdEl0ZW0oJGl0ZW0sIGFwcGVuZCk7CisgICAgICAgIH0K
KyAgICAgIH07CisKKyAgICAgIHRoaXMuc2VsZWN0SXRlbSA9IGZ1bmN0aW9uKCRpdGVtLCBhcHBl
bmQpIHsKKyAgICAgICAgaWYgKCFhcHBlbmQpIHsKKyAgICAgICAgICB0aGlzLnNlbGVjdCgnc2Vs
ZWN0ZWRJdGVtU2VsZWN0b3InKS5yZW1vdmVDbGFzcyh0aGlzLmF0dHIuc2VsZWN0ZWRDbGFzcyk7
CisgICAgICAgICAgdGhpcy5hdHRyLnNlbGVjdGVkSWRzID0gW107CisgICAgICAgIH0KKyAgICAg
ICAgJGl0ZW0uYWRkQ2xhc3ModGhpcy5hdHRyLnNlbGVjdGVkQ2xhc3MpOworCisgICAgICAgIHRo
aXMuYXR0ci5zZWxlY3RlZElkcy5wdXNoKCRpdGVtLmF0dHIoJ2lkJykpOworICAgICAgICB0aGlz
LnRyaWdnZXIodGhpcy5hdHRyLnNlbGVjdGlvbkNoYW5nZWRFdmVudCwge3NlbGVjdGVkSWRzOiB0
aGlzLmF0dHIuc2VsZWN0ZWRJZHN9KTsKKyAgICAgIH07CisKKyAgICAgIHRoaXMudW5zZWxlY3RJ
dGVtID0gZnVuY3Rpb24oJGl0ZW0pIHsKKyAgICAgICAgJGl0ZW0ucmVtb3ZlQ2xhc3ModGhpcy5h
dHRyLnNlbGVjdGVkQ2xhc3MpOworCisgICAgICAgIHZhciB0aGlzSWRJbmRleCA9IHRoaXMuYXR0
ci5zZWxlY3RlZElkcy5pbmRleE9mKCRpdGVtLmF0dHIoJ2lkJykpOworICAgICAgICB0aGlzLmF0
dHIuc2VsZWN0ZWRJZHMuc3BsaWNlKHRoaXNJZEluZGV4LCAxKTsKKyAgICAgICAgdGhpcy50cmln
Z2VyKHRoaXMuYXR0ci5zZWxlY3Rpb25DaGFuZ2VkRXZlbnQsIHtzZWxlY3RlZElkczogdGhpcy5h
dHRyLnNlbGVjdGVkSWRzfSk7CisgICAgICB9OworCisgICAgICB0aGlzLmFmdGVyKCJpbml0aWFs
aXplIiwgZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMub24oJ2NsaWNrJywgeworICAgICAgICAg
ICdpdGVtU2VsZWN0b3InOiB0aGlzLnRvZ2dsZUl0ZW1TZWxlY3QKKyAgICAgICAgfSk7CisKKyAg
ICAgICAgdGhpcy5pbml0aWFsaXplU2VsZWN0aW9ucygpOworICAgICAgfSk7CisgICAgfQorICB9
CispOwpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFt
cGxlLWFwcC9hcHAvY3NzL2N1c3RvbS5jc3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0
cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9hcHAvY3NzL2N1c3RvbS5jc3MJ
KHJldmlzaW9uIDApCisrKyBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpz
LWV4YW1wbGUtYXBwL2FwcC9jc3MvY3VzdG9tLmNzcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDEwMiBAQAorLm1vZGFsLmZhZGUuaW4geworICBsZWZ0OiA1JTsKKyAgdG9wOiAxMCU7CisgIG1h
cmdpbjogYXV0byBhdXRvIGF1dG8gYXV0bzsKK30KKwordGFibGUgeworICAtd2Via2l0LXRvdWNo
LWNhbGxvdXQ6IG5vbmU7CisgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CisgIC1tb3otdXNl
ci1zZWxlY3Q6IG5vbmU7CisgIC1tcy11c2VyLXNlbGVjdDogbm9uZTsKKyAgdXNlci1zZWxlY3Q6
IG5vbmU7Cit9CisKK3RkLm1haWxDb250YWN0LAorc3Bhbi5tYWlsU3ViamVjdCwKK3NwYW4ubWFp
bE1lc3NhZ2UgeworICBmb250LXNpemU6IDE1cHg7Cit9CisKK3RkLm1haWxDb250YWN0LAorc3Bh
bi5tYWlsU3ViamVjdCB7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCit0ci5tYWlsLWl0ZW0u
c2VsZWN0ZWQgdGQsCitsaS5mb2xkZXItaXRlbS5zZWxlY3RlZCwKK2xpLm1vdmUtdG8taXRlbS5z
ZWxlY3RlZCB7CisgIGJhY2tncm91bmQtY29sb3I6ICNEOUVERjc7Cit9CisKK3RyLm1haWwtaXRl
bS5zZWxlY3RlZDpob3ZlciB0ZCwKK2xpLmZvbGRlci1pdGVtLnNlbGVjdGVkOmhvdmVyLAorbGku
bW92ZS10by1pdGVtLnNlbGVjdGVkOmhvdmVyIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI0MxRTFG
RjsKK30KKworbGkuZm9sZGVyLWl0ZW06aG92ZXIsCitsaS5tb3ZlLXRvLWl0ZW06aG92ZXIgewor
ICBiYWNrZ3JvdW5kLWNvbG9yOiAjRURFREVEOworfQorCitsaS5mb2xkZXItaXRlbSwKK2xpLm1v
dmUtdG8taXRlbSB7CisgIHBhZGRpbmc6IDNweCAwOworICBtYXJnaW4tbGVmdDogLTE1cHg7Cisg
IGZvbnQtc2l6ZTogMTVweDsKKyAgY3Vyc29yOnBvaW50ZXI7Cit9CisKK2xpLm1vdmUtdG8taXRl
bSB7CisgIHRleHQtYWxpZ246IGNlbnRlcjsKKyAgbWFyZ2luLXJpZ2h0OiAtMTVweDsKK30KKwor
I25ld19tYWlsIHsKKyAgd2lkdGg6IDEwMHB4OworfQorCitkaXYuY29tcG9zZS1ib3ggeworICBw
b3NpdGlvbjogYWJzb2x1dGU7CisgIHotaW5kZXg6IDEwOworICBiYWNrZ3JvdW5kLWNvbG9yOiAj
RkZGRkZGOworICB3aWR0aDogMzUwcHg7CisgIGJvcmRlcjogMXB4IHNvbGlkOworfQorCitkaXYu
Y29tcG9zZS1ib2R5IHsKKyAgcGFkZGluZzogMDsKK30KKworZGl2LmNvbXBvc2UtaGVhZGVyIHsK
KyAgZm9udC1zaXplOiAxNXB4OworfQorCisjcmVjaXBpZW50X3NlbGVjdCB7CisgIHdpZHRoOiA5
MCU7CisgIG1hcmdpbi1ib3R0b206IDA7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitkaXYu
aGludCB7CisgIGJvcmRlcjogMXB4IHNvbGlkICNFQUVBRUE7CisgIGNvbG9yOiNDQUNBQ0E7Cit9
CisKKyNjb21wb3NlX21lc3NhZ2UgeworICBoZWlnaHQ6IDE4MHB4OworfQorCisjY29tcG9zZV9z
dWJqZWN0LAorI2NvbXBvc2VfbWVzc2FnZSB7CisgIGZvbnQtc2l6ZTogMTVweDsKKyAgcGFkZGlu
ZzogMTVweDsKK30KKworI21vdmVfdG9fc2VsZWN0b3IgeworICBwb3NpdGlvbjogYWJzb2x1dGU7
CisgIHotaW5kZXg6IDEwOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGRkZGOworICBib3JkZXI6
IDFweCBzb2xpZDsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBQZXJmb3Jt
YW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMv
Ym9vdHN0cmFwL2Nzcy9ib290c3RyYXAtcmVzcG9uc2l2ZS5jc3MKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVy
Zm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25l
bnRzL2Jvb3RzdHJhcC9jc3MvYm9vdHN0cmFwLXJlc3BvbnNpdmUuY3NzCShyZXZpc2lvbiAwKQor
KysgUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9j
b21wb25lbnRzL2Jvb3RzdHJhcC9jc3MvYm9vdHN0cmFwLXJlc3BvbnNpdmUuY3NzCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTA5MiBAQAorLyohCisgKiBCb290c3RyYXAgUmVzcG9uc2l2ZSB2
Mi4yLjIKKyAqCisgKiBDb3B5cmlnaHQgMjAxMiBUd2l0dGVyLCBJbmMKKyAqIExpY2Vuc2VkIHVu
ZGVyIHRoZSBBcGFjaGUgTGljZW5zZSB2Mi4wCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGlj
ZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBEZXNpZ25lZCBhbmQgYnVpbHQgd2l0aCBhbGwgdGhl
IGxvdmUgaW4gdGhlIHdvcmxkIEB0d2l0dGVyIGJ5IEBtZG8gYW5kIEBmYXQuCisgKi8KKworQC1t
cy12aWV3cG9ydCB7CisgIHdpZHRoOiBkZXZpY2Utd2lkdGg7Cit9CisKKy5jbGVhcmZpeCB7Cisg
ICp6b29tOiAxOworfQorCisuY2xlYXJmaXg6YmVmb3JlLAorLmNsZWFyZml4OmFmdGVyIHsKKyAg
ZGlzcGxheTogdGFibGU7CisgIGxpbmUtaGVpZ2h0OiAwOworICBjb250ZW50OiAiIjsKK30KKwor
LmNsZWFyZml4OmFmdGVyIHsKKyAgY2xlYXI6IGJvdGg7Cit9CisKKy5oaWRlLXRleHQgeworICBm
b250OiAwLzAgYTsKKyAgY29sb3I6IHRyYW5zcGFyZW50OworICB0ZXh0LXNoYWRvdzogbm9uZTsK
KyAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7CisgIGJvcmRlcjogMDsKK30KKworLmlu
cHV0LWJsb2NrLWxldmVsIHsKKyAgZGlzcGxheTogYmxvY2s7CisgIHdpZHRoOiAxMDAlOworICBt
aW4taGVpZ2h0OiAzMHB4OworICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7CisgICAg
IC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDsKKyAgICAgICAgICBib3gtc2l6aW5nOiBib3Jk
ZXItYm94OworfQorCisuaGlkZGVuIHsKKyAgZGlzcGxheTogbm9uZTsKKyAgdmlzaWJpbGl0eTog
aGlkZGVuOworfQorCisudmlzaWJsZS1waG9uZSB7CisgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFu
dDsKK30KKworLnZpc2libGUtdGFibGV0IHsKKyAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50Owor
fQorCisuaGlkZGVuLWRlc2t0b3AgeworICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7Cit9CisK
Ky52aXNpYmxlLWRlc2t0b3AgeworICBkaXNwbGF5OiBpbmhlcml0ICFpbXBvcnRhbnQ7Cit9CisK
K0BtZWRpYSAobWluLXdpZHRoOiA3NjhweCkgYW5kIChtYXgtd2lkdGg6IDk3OXB4KSB7CisgIC5o
aWRkZW4tZGVza3RvcCB7CisgICAgZGlzcGxheTogaW5oZXJpdCAhaW1wb3J0YW50OworICB9Cisg
IC52aXNpYmxlLWRlc2t0b3AgeworICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudCA7CisgIH0K
KyAgLnZpc2libGUtdGFibGV0IHsKKyAgICBkaXNwbGF5OiBpbmhlcml0ICFpbXBvcnRhbnQ7Cisg
IH0KKyAgLmhpZGRlbi10YWJsZXQgeworICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKKyAg
fQorfQorCitAbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHsKKyAgLmhpZGRlbi1kZXNrdG9wIHsK
KyAgICBkaXNwbGF5OiBpbmhlcml0ICFpbXBvcnRhbnQ7CisgIH0KKyAgLnZpc2libGUtZGVza3Rv
cCB7CisgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OworICB9CisgIC52aXNpYmxlLXBob25l
IHsKKyAgICBkaXNwbGF5OiBpbmhlcml0ICFpbXBvcnRhbnQ7CisgIH0KKyAgLmhpZGRlbi1waG9u
ZSB7CisgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OworICB9Cit9CisKK0BtZWRpYSAobWlu
LXdpZHRoOiAxMjAwcHgpIHsKKyAgLnJvdyB7CisgICAgbWFyZ2luLWxlZnQ6IC0zMHB4OworICAg
ICp6b29tOiAxOworICB9CisgIC5yb3c6YmVmb3JlLAorICAucm93OmFmdGVyIHsKKyAgICBkaXNw
bGF5OiB0YWJsZTsKKyAgICBsaW5lLWhlaWdodDogMDsKKyAgICBjb250ZW50OiAiIjsKKyAgfQor
ICAucm93OmFmdGVyIHsKKyAgICBjbGVhcjogYm90aDsKKyAgfQorICBbY2xhc3MqPSJzcGFuIl0g
eworICAgIGZsb2F0OiBsZWZ0OworICAgIG1pbi1oZWlnaHQ6IDFweDsKKyAgICBtYXJnaW4tbGVm
dDogMzBweDsKKyAgfQorICAuY29udGFpbmVyLAorICAubmF2YmFyLXN0YXRpYy10b3AgLmNvbnRh
aW5lciwKKyAgLm5hdmJhci1maXhlZC10b3AgLmNvbnRhaW5lciwKKyAgLm5hdmJhci1maXhlZC1i
b3R0b20gLmNvbnRhaW5lciB7CisgICAgd2lkdGg6IDExNzBweDsKKyAgfQorICAuc3BhbjEyIHsK
KyAgICB3aWR0aDogMTE3MHB4OworICB9CisgIC5zcGFuMTEgeworICAgIHdpZHRoOiAxMDcwcHg7
CisgIH0KKyAgLnNwYW4xMCB7CisgICAgd2lkdGg6IDk3MHB4OworICB9CisgIC5zcGFuOSB7Cisg
ICAgd2lkdGg6IDg3MHB4OworICB9CisgIC5zcGFuOCB7CisgICAgd2lkdGg6IDc3MHB4OworICB9
CisgIC5zcGFuNyB7CisgICAgd2lkdGg6IDY3MHB4OworICB9CisgIC5zcGFuNiB7CisgICAgd2lk
dGg6IDU3MHB4OworICB9CisgIC5zcGFuNSB7CisgICAgd2lkdGg6IDQ3MHB4OworICB9CisgIC5z
cGFuNCB7CisgICAgd2lkdGg6IDM3MHB4OworICB9CisgIC5zcGFuMyB7CisgICAgd2lkdGg6IDI3
MHB4OworICB9CisgIC5zcGFuMiB7CisgICAgd2lkdGg6IDE3MHB4OworICB9CisgIC5zcGFuMSB7
CisgICAgd2lkdGg6IDcwcHg7CisgIH0KKyAgLm9mZnNldDEyIHsKKyAgICBtYXJnaW4tbGVmdDog
MTIzMHB4OworICB9CisgIC5vZmZzZXQxMSB7CisgICAgbWFyZ2luLWxlZnQ6IDExMzBweDsKKyAg
fQorICAub2Zmc2V0MTAgeworICAgIG1hcmdpbi1sZWZ0OiAxMDMwcHg7CisgIH0KKyAgLm9mZnNl
dDkgeworICAgIG1hcmdpbi1sZWZ0OiA5MzBweDsKKyAgfQorICAub2Zmc2V0OCB7CisgICAgbWFy
Z2luLWxlZnQ6IDgzMHB4OworICB9CisgIC5vZmZzZXQ3IHsKKyAgICBtYXJnaW4tbGVmdDogNzMw
cHg7CisgIH0KKyAgLm9mZnNldDYgeworICAgIG1hcmdpbi1sZWZ0OiA2MzBweDsKKyAgfQorICAu
b2Zmc2V0NSB7CisgICAgbWFyZ2luLWxlZnQ6IDUzMHB4OworICB9CisgIC5vZmZzZXQ0IHsKKyAg
ICBtYXJnaW4tbGVmdDogNDMwcHg7CisgIH0KKyAgLm9mZnNldDMgeworICAgIG1hcmdpbi1sZWZ0
OiAzMzBweDsKKyAgfQorICAub2Zmc2V0MiB7CisgICAgbWFyZ2luLWxlZnQ6IDIzMHB4OworICB9
CisgIC5vZmZzZXQxIHsKKyAgICBtYXJnaW4tbGVmdDogMTMwcHg7CisgIH0KKyAgLnJvdy1mbHVp
ZCB7CisgICAgd2lkdGg6IDEwMCU7CisgICAgKnpvb206IDE7CisgIH0KKyAgLnJvdy1mbHVpZDpi
ZWZvcmUsCisgIC5yb3ctZmx1aWQ6YWZ0ZXIgeworICAgIGRpc3BsYXk6IHRhYmxlOworICAgIGxp
bmUtaGVpZ2h0OiAwOworICAgIGNvbnRlbnQ6ICIiOworICB9CisgIC5yb3ctZmx1aWQ6YWZ0ZXIg
eworICAgIGNsZWFyOiBib3RoOworICB9CisgIC5yb3ctZmx1aWQgW2NsYXNzKj0ic3BhbiJdIHsK
KyAgICBkaXNwbGF5OiBibG9jazsKKyAgICBmbG9hdDogbGVmdDsKKyAgICB3aWR0aDogMTAwJTsK
KyAgICBtaW4taGVpZ2h0OiAzMHB4OworICAgIG1hcmdpbi1sZWZ0OiAyLjU2NDEwMjU2NDEwMjU2
NCU7CisgICAgKm1hcmdpbi1sZWZ0OiAyLjUxMDkxMTA3NDc0MDg2MTYlOworICAgIC13ZWJraXQt
Ym94LXNpemluZzogYm9yZGVyLWJveDsKKyAgICAgICAtbW96LWJveC1zaXppbmc6IGJvcmRlci1i
b3g7CisgICAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OworICB9CisgIC5yb3ctZmx1
aWQgW2NsYXNzKj0ic3BhbiJdOmZpcnN0LWNoaWxkIHsKKyAgICBtYXJnaW4tbGVmdDogMDsKKyAg
fQorICAucm93LWZsdWlkIC5jb250cm9scy1yb3cgW2NsYXNzKj0ic3BhbiJdICsgW2NsYXNzKj0i
c3BhbiJdIHsKKyAgICBtYXJnaW4tbGVmdDogMi41NjQxMDI1NjQxMDI1NjQlOworICB9CisgIC5y
b3ctZmx1aWQgLnNwYW4xMiB7CisgICAgd2lkdGg6IDEwMCU7CisgICAgKndpZHRoOiA5OS45NDY4
MDg1MTA2MzgyOSU7CisgIH0KKyAgLnJvdy1mbHVpZCAuc3BhbjExIHsKKyAgICB3aWR0aDogOTEu
NDUyOTkxNDUyOTkxNDUlOworICAgICp3aWR0aDogOTEuMzk5Nzk5OTYzNjI5NzUlOworICB9Cisg
IC5yb3ctZmx1aWQgLnNwYW4xMCB7CisgICAgd2lkdGg6IDgyLjkwNTk4MjkwNTk4MjkxJTsKKyAg
ICAqd2lkdGg6IDgyLjg1Mjc5MTQxNjYyMTIlOworICB9CisgIC5yb3ctZmx1aWQgLnNwYW45IHsK
KyAgICB3aWR0aDogNzQuMzU4OTc0MzU4OTc0MzYlOworICAgICp3aWR0aDogNzQuMzA1NzgyODY5
NjEyNjYlOworICB9CisgIC5yb3ctZmx1aWQgLnNwYW44IHsKKyAgICB3aWR0aDogNjUuODExOTY1
ODExOTY1ODIlOworICAgICp3aWR0aDogNjUuNzU4Nzc0MzIyNjA0MTElOworICB9CisgIC5yb3ct
Zmx1aWQgLnNwYW43IHsKKyAgICB3aWR0aDogNTcuMjY0OTU3MjY0OTU3MjYlOworICAgICp3aWR0
aDogNTcuMjExNzY1Nzc1NTk1NTYlOworICB9CisgIC5yb3ctZmx1aWQgLnNwYW42IHsKKyAgICB3
aWR0aDogNDguNzE3OTQ4NzE3OTQ4NzE1JTsKKyAgICAqd2lkdGg6IDQ4LjY2NDc1NzIyODU4NzAx
NCU7CisgIH0KKyAgLnJvdy1mbHVpZCAuc3BhbjUgeworICAgIHdpZHRoOiA0MC4xNzA5NDAxNzA5
NDAxNyU7CisgICAgKndpZHRoOiA0MC4xMTc3NDg2ODE1Nzg0NyU7CisgIH0KKyAgLnJvdy1mbHVp
ZCAuc3BhbjQgeworICAgIHdpZHRoOiAzMS42MjM5MzE2MjM5MzE2MjUlOworICAgICp3aWR0aDog
MzEuNTcwNzQwMTM0NTY5OTI0JTsKKyAgfQorICAucm93LWZsdWlkIC5zcGFuMyB7CisgICAgd2lk
dGg6IDIzLjA3NjkyMzA3NjkyMzA3NyU7CisgICAgKndpZHRoOiAyMy4wMjM3MzE1ODc1NjEzNzUl
OworICB9CisgIC5yb3ctZmx1aWQgLnNwYW4yIHsKKyAgICB3aWR0aDogMTQuNTI5OTE0NTI5OTE0
NTMlOworICAgICp3aWR0aDogMTQuNDc2NzIzMDQwNTUyODI4JTsKKyAgfQorICAucm93LWZsdWlk
IC5zcGFuMSB7CisgICAgd2lkdGg6IDUuOTgyOTA1OTgyOTA1OTgzJTsKKyAgICAqd2lkdGg6IDUu
OTI5NzE0NDkzNTQ0MjgxJTsKKyAgfQorICAucm93LWZsdWlkIC5vZmZzZXQxMiB7CisgICAgbWFy
Z2luLWxlZnQ6IDEwNS4xMjgyMDUxMjgyMDUxMiU7CisgICAgKm1hcmdpbi1sZWZ0OiAxMDUuMDIx
ODIyMTQ5NDgxNzElOworICB9CisgIC5yb3ctZmx1aWQgLm9mZnNldDEyOmZpcnN0LWNoaWxkIHsK
KyAgICBtYXJnaW4tbGVmdDogMTAyLjU2NDEwMjU2NDEwMjU3JTsKKyAgICAqbWFyZ2luLWxlZnQ6
IDEwMi40NTc3MTk1ODUzNzkxNSU7CisgIH0KKyAgLnJvdy1mbHVpZCAub2Zmc2V0MTEgeworICAg
IG1hcmdpbi1sZWZ0OiA5Ni41ODExOTY1ODExOTY1OCU7CisgICAgKm1hcmdpbi1sZWZ0OiA5Ni40
NzQ4MTM2MDI0NzMxNiU7CisgIH0KKyAgLnJvdy1mbHVpZCAub2Zmc2V0MTE6Zmlyc3QtY2hpbGQg
eworICAgIG1hcmdpbi1sZWZ0OiA5NC4wMTcwOTQwMTcwOTQwMiU7CisgICAgKm1hcmdpbi1sZWZ0
OiA5My45MTA3MTEwMzgzNzA2MSU7CisgIH0KKyAgLnJvdy1mbHVpZCAub2Zmc2V0MTAgeworICAg
IG1hcmdpbi1sZWZ0OiA4OC4wMzQxODgwMzQxODgwMyU7CisgICAgKm1hcmdpbi1sZWZ0OiA4Ny45
Mjc4MDUwNTU0NjQ2MiU7CisgIH0KKyAgLnJvdy1mbHVpZCAub2Zmc2V0MTA6Zmlyc3QtY2hpbGQg
eworICAgIG1hcmdpbi1sZWZ0OiA4NS40NzAwODU0NzAwODU0OCU7CisgICAgKm1hcmdpbi1sZWZ0
OiA4NS4zNjM3MDI0OTEzNjIwNiU7CisgIH0KKyAgLnJvdy1mbHVpZCAub2Zmc2V0OSB7CisgICAg
bWFyZ2luLWxlZnQ6IDc5LjQ4NzE3OTQ4NzE3OTQ5JTsKKyAgICAqbWFyZ2luLWxlZnQ6IDc5LjM4
MDc5NjUwODQ1NjA3JTsKKyAgfQorICAucm93LWZsdWlkIC5vZmZzZXQ5OmZpcnN0LWNoaWxkIHsK
KyAgICBtYXJnaW4tbGVmdDogNzYuOTIzMDc2OTIzMDc2OTMlOworICAgICptYXJnaW4tbGVmdDog
NzYuODE2NjkzOTQ0MzUzNTIlOworICB9CisgIC5yb3ctZmx1aWQgLm9mZnNldDggeworICAgIG1h
cmdpbi1sZWZ0OiA3MC45NDAxNzA5NDAxNzA5NCU7CisgICAgKm1hcmdpbi1sZWZ0OiA3MC44MzM3
ODc5NjE0NDc1MyU7CisgIH0KKyAgLnJvdy1mbHVpZCAub2Zmc2V0ODpmaXJzdC1jaGlsZCB7Cisg
ICAgbWFyZ2luLWxlZnQ6IDY4LjM3NjA2ODM3NjA2ODM5JTsKKyAgICAqbWFyZ2luLWxlZnQ6IDY4
LjI2OTY4NTM5NzM0NDk3JTsKKyAgfQorICAucm93LWZsdWlkIC5vZmZzZXQ3IHsKKyAgICBtYXJn
aW4tbGVmdDogNjIuMzkzMTYyMzkzMTYyMzg1JTsKKyAgICAqbWFyZ2luLWxlZnQ6IDYyLjI4Njc3
OTQxNDQzODk5JTsKKyAgfQorICAucm93LWZsdWlkIC5vZmZzZXQ3OmZpcnN0LWNoaWxkIHsKKyAg
ICBtYXJnaW4tbGVmdDogNTkuODI5MDU5ODI5MDU5ODIlOworICAgICptYXJnaW4tbGVmdDogNTku
NzIyNjc2ODUwMzM2NDIlOworICB9CisgIC5yb3ctZmx1aWQgLm9mZnNldDYgeworICAgIG1hcmdp
bi1sZWZ0OiA1My44NDYxNTM4NDYxNTM4NCU7CisgICAgKm1hcmdpbi1sZWZ0OiA1My43Mzk3NzA4
Njc0MzA0NDQlOworICB9CisgIC5yb3ctZmx1aWQgLm9mZnNldDY6Zmlyc3QtY2hpbGQgeworICAg
IG1hcmdpbi1sZWZ0OiA1MS4yODIwNTEyODIwNTEyOCU7CisgICAgKm1hcmdpbi1sZWZ0OiA1MS4x
NzU2NjgzMDMzMjc4NzUlOworICB9CisgIC5yb3ctZmx1aWQgLm9mZnNldDUgeworICAgIG1hcmdp
bi1sZWZ0OiA0NS4yOTkxNDUyOTkxNDUyOTUlOworICAgICptYXJnaW4tbGVmdDogNDUuMTkyNzYy
MzIwNDIxOSU7CisgIH0KKyAgLnJvdy1mbHVpZCAub2Zmc2V0NTpmaXJzdC1jaGlsZCB7CisgICAg
bWFyZ2luLWxlZnQ6IDQyLjczNTA0MjczNTA0MjczJTsKKyAgICAqbWFyZ2luLWxlZnQ6IDQyLjYy
ODY1OTc1NjMxOTMzJTsKKyAgfQorICAucm93LWZsdWlkIC5vZmZzZXQ0IHsKKyAgICBtYXJnaW4t
bGVmdDogMzYuNzUyMTM2NzUyMTM2NzUlOworICAgICptYXJnaW4tbGVmdDogMzYuNjQ1NzUzNzcz
NDEzMzU0JTsKKyAgfQorICAucm93LWZsdWlkIC5vZmZzZXQ0OmZpcnN0LWNoaWxkIHsKKyAgICBt
YXJnaW4tbGVmdDogMzQuMTg4MDM0MTg4MDM0MTklOworICAgICptYXJnaW4tbGVmdDogMzQuMDgx
NjUxMjA5MzEwNzg1JTsKKyAgfQorICAucm93LWZsdWlkIC5vZmZzZXQzIHsKKyAgICBtYXJnaW4t
bGVmdDogMjguMjA1MTI4MjA1MTI4MjA0JTsKKyAgICAqbWFyZ2luLWxlZnQ6IDI4LjA5ODc0NTIy
NjQwNDglOworICB9CisgIC5yb3ctZmx1aWQgLm9mZnNldDM6Zmlyc3QtY2hpbGQgeworICAgIG1h
cmdpbi1sZWZ0OiAyNS42NDEwMjU2NDEwMjU2NDIlOworICAgICptYXJnaW4tbGVmdDogMjUuNTM0
NjQyNjYyMzAyMjQlOworICB9CisgIC5yb3ctZmx1aWQgLm9mZnNldDIgeworICAgIG1hcmdpbi1s
ZWZ0OiAxOS42NTgxMTk2NTgxMTk2NiU7CisgICAgKm1hcmdpbi1sZWZ0OiAxOS41NTE3MzY2Nzkz
OTYyNTclOworICB9CisgIC5yb3ctZmx1aWQgLm9mZnNldDI6Zmlyc3QtY2hpbGQgeworICAgIG1h
cmdpbi1sZWZ0OiAxNy4wOTQwMTcwOTQwMTcwOTQlOworICAgICptYXJnaW4tbGVmdDogMTYuOTg3
NjM0MTE1MjkzNjklOworICB9CisgIC5yb3ctZmx1aWQgLm9mZnNldDEgeworICAgIG1hcmdpbi1s
ZWZ0OiAxMS4xMTExMTExMTExMTExMSU7CisgICAgKm1hcmdpbi1sZWZ0OiAxMS4wMDQ3MjgxMzIz
ODc3MDglOworICB9CisgIC5yb3ctZmx1aWQgLm9mZnNldDE6Zmlyc3QtY2hpbGQgeworICAgIG1h
cmdpbi1sZWZ0OiA4LjU0NzAwODU0NzAwODU0NyU7CisgICAgKm1hcmdpbi1sZWZ0OiA4LjQ0MDYy
NTU2ODI4NTE0MiU7CisgIH0KKyAgaW5wdXQsCisgIHRleHRhcmVhLAorICAudW5lZGl0YWJsZS1p
bnB1dCB7CisgICAgbWFyZ2luLWxlZnQ6IDA7CisgIH0KKyAgLmNvbnRyb2xzLXJvdyBbY2xhc3Mq
PSJzcGFuIl0gKyBbY2xhc3MqPSJzcGFuIl0geworICAgIG1hcmdpbi1sZWZ0OiAzMHB4OworICB9
CisgIGlucHV0LnNwYW4xMiwKKyAgdGV4dGFyZWEuc3BhbjEyLAorICAudW5lZGl0YWJsZS1pbnB1
dC5zcGFuMTIgeworICAgIHdpZHRoOiAxMTU2cHg7CisgIH0KKyAgaW5wdXQuc3BhbjExLAorICB0
ZXh0YXJlYS5zcGFuMTEsCisgIC51bmVkaXRhYmxlLWlucHV0LnNwYW4xMSB7CisgICAgd2lkdGg6
IDEwNTZweDsKKyAgfQorICBpbnB1dC5zcGFuMTAsCisgIHRleHRhcmVhLnNwYW4xMCwKKyAgLnVu
ZWRpdGFibGUtaW5wdXQuc3BhbjEwIHsKKyAgICB3aWR0aDogOTU2cHg7CisgIH0KKyAgaW5wdXQu
c3BhbjksCisgIHRleHRhcmVhLnNwYW45LAorICAudW5lZGl0YWJsZS1pbnB1dC5zcGFuOSB7Cisg
ICAgd2lkdGg6IDg1NnB4OworICB9CisgIGlucHV0LnNwYW44LAorICB0ZXh0YXJlYS5zcGFuOCwK
KyAgLnVuZWRpdGFibGUtaW5wdXQuc3BhbjggeworICAgIHdpZHRoOiA3NTZweDsKKyAgfQorICBp
bnB1dC5zcGFuNywKKyAgdGV4dGFyZWEuc3BhbjcsCisgIC51bmVkaXRhYmxlLWlucHV0LnNwYW43
IHsKKyAgICB3aWR0aDogNjU2cHg7CisgIH0KKyAgaW5wdXQuc3BhbjYsCisgIHRleHRhcmVhLnNw
YW42LAorICAudW5lZGl0YWJsZS1pbnB1dC5zcGFuNiB7CisgICAgd2lkdGg6IDU1NnB4OworICB9
CisgIGlucHV0LnNwYW41LAorICB0ZXh0YXJlYS5zcGFuNSwKKyAgLnVuZWRpdGFibGUtaW5wdXQu
c3BhbjUgeworICAgIHdpZHRoOiA0NTZweDsKKyAgfQorICBpbnB1dC5zcGFuNCwKKyAgdGV4dGFy
ZWEuc3BhbjQsCisgIC51bmVkaXRhYmxlLWlucHV0LnNwYW40IHsKKyAgICB3aWR0aDogMzU2cHg7
CisgIH0KKyAgaW5wdXQuc3BhbjMsCisgIHRleHRhcmVhLnNwYW4zLAorICAudW5lZGl0YWJsZS1p
bnB1dC5zcGFuMyB7CisgICAgd2lkdGg6IDI1NnB4OworICB9CisgIGlucHV0LnNwYW4yLAorICB0
ZXh0YXJlYS5zcGFuMiwKKyAgLnVuZWRpdGFibGUtaW5wdXQuc3BhbjIgeworICAgIHdpZHRoOiAx
NTZweDsKKyAgfQorICBpbnB1dC5zcGFuMSwKKyAgdGV4dGFyZWEuc3BhbjEsCisgIC51bmVkaXRh
YmxlLWlucHV0LnNwYW4xIHsKKyAgICB3aWR0aDogNTZweDsKKyAgfQorICAudGh1bWJuYWlscyB7
CisgICAgbWFyZ2luLWxlZnQ6IC0zMHB4OworICB9CisgIC50aHVtYm5haWxzID4gbGkgeworICAg
IG1hcmdpbi1sZWZ0OiAzMHB4OworICB9CisgIC5yb3ctZmx1aWQgLnRodW1ibmFpbHMgeworICAg
IG1hcmdpbi1sZWZ0OiAwOworICB9Cit9CisKK0BtZWRpYSAobWluLXdpZHRoOiA3NjhweCkgYW5k
IChtYXgtd2lkdGg6IDk3OXB4KSB7CisgIC5yb3cgeworICAgIG1hcmdpbi1sZWZ0OiAtMjBweDsK
KyAgICAqem9vbTogMTsKKyAgfQorICAucm93OmJlZm9yZSwKKyAgLnJvdzphZnRlciB7CisgICAg
ZGlzcGxheTogdGFibGU7CisgICAgbGluZS1oZWlnaHQ6IDA7CisgICAgY29udGVudDogIiI7Cisg
IH0KKyAgLnJvdzphZnRlciB7CisgICAgY2xlYXI6IGJvdGg7CisgIH0KKyAgW2NsYXNzKj0ic3Bh
biJdIHsKKyAgICBmbG9hdDogbGVmdDsKKyAgICBtaW4taGVpZ2h0OiAxcHg7CisgICAgbWFyZ2lu
LWxlZnQ6IDIwcHg7CisgIH0KKyAgLmNvbnRhaW5lciwKKyAgLm5hdmJhci1zdGF0aWMtdG9wIC5j
b250YWluZXIsCisgIC5uYXZiYXItZml4ZWQtdG9wIC5jb250YWluZXIsCisgIC5uYXZiYXItZml4
ZWQtYm90dG9tIC5jb250YWluZXIgeworICAgIHdpZHRoOiA3MjRweDsKKyAgfQorICAuc3BhbjEy
IHsKKyAgICB3aWR0aDogNzI0cHg7CisgIH0KKyAgLnNwYW4xMSB7CisgICAgd2lkdGg6IDY2MnB4
OworICB9CisgIC5zcGFuMTAgeworICAgIHdpZHRoOiA2MDBweDsKKyAgfQorICAuc3Bhbjkgewor
ICAgIHdpZHRoOiA1MzhweDsKKyAgfQorICAuc3BhbjggeworICAgIHdpZHRoOiA0NzZweDsKKyAg
fQorICAuc3BhbjcgeworICAgIHdpZHRoOiA0MTRweDsKKyAgfQorICAuc3BhbjYgeworICAgIHdp
ZHRoOiAzNTJweDsKKyAgfQorICAuc3BhbjUgeworICAgIHdpZHRoOiAyOTBweDsKKyAgfQorICAu
c3BhbjQgeworICAgIHdpZHRoOiAyMjhweDsKKyAgfQorICAuc3BhbjMgeworICAgIHdpZHRoOiAx
NjZweDsKKyAgfQorICAuc3BhbjIgeworICAgIHdpZHRoOiAxMDRweDsKKyAgfQorICAuc3BhbjEg
eworICAgIHdpZHRoOiA0MnB4OworICB9CisgIC5vZmZzZXQxMiB7CisgICAgbWFyZ2luLWxlZnQ6
IDc2NHB4OworICB9CisgIC5vZmZzZXQxMSB7CisgICAgbWFyZ2luLWxlZnQ6IDcwMnB4OworICB9
CisgIC5vZmZzZXQxMCB7CisgICAgbWFyZ2luLWxlZnQ6IDY0MHB4OworICB9CisgIC5vZmZzZXQ5
IHsKKyAgICBtYXJnaW4tbGVmdDogNTc4cHg7CisgIH0KKyAgLm9mZnNldDggeworICAgIG1hcmdp
bi1sZWZ0OiA1MTZweDsKKyAgfQorICAub2Zmc2V0NyB7CisgICAgbWFyZ2luLWxlZnQ6IDQ1NHB4
OworICB9CisgIC5vZmZzZXQ2IHsKKyAgICBtYXJnaW4tbGVmdDogMzkycHg7CisgIH0KKyAgLm9m
ZnNldDUgeworICAgIG1hcmdpbi1sZWZ0OiAzMzBweDsKKyAgfQorICAub2Zmc2V0NCB7CisgICAg
bWFyZ2luLWxlZnQ6IDI2OHB4OworICB9CisgIC5vZmZzZXQzIHsKKyAgICBtYXJnaW4tbGVmdDog
MjA2cHg7CisgIH0KKyAgLm9mZnNldDIgeworICAgIG1hcmdpbi1sZWZ0OiAxNDRweDsKKyAgfQor
ICAub2Zmc2V0MSB7CisgICAgbWFyZ2luLWxlZnQ6IDgycHg7CisgIH0KKyAgLnJvdy1mbHVpZCB7
CisgICAgd2lkdGg6IDEwMCU7CisgICAgKnpvb206IDE7CisgIH0KKyAgLnJvdy1mbHVpZDpiZWZv
cmUsCisgIC5yb3ctZmx1aWQ6YWZ0ZXIgeworICAgIGRpc3BsYXk6IHRhYmxlOworICAgIGxpbmUt
aGVpZ2h0OiAwOworICAgIGNvbnRlbnQ6ICIiOworICB9CisgIC5yb3ctZmx1aWQ6YWZ0ZXIgewor
ICAgIGNsZWFyOiBib3RoOworICB9CisgIC5yb3ctZmx1aWQgW2NsYXNzKj0ic3BhbiJdIHsKKyAg
ICBkaXNwbGF5OiBibG9jazsKKyAgICBmbG9hdDogbGVmdDsKKyAgICB3aWR0aDogMTAwJTsKKyAg
ICBtaW4taGVpZ2h0OiAzMHB4OworICAgIG1hcmdpbi1sZWZ0OiAyLjc2MjQzMDkzOTIyNjUxOTQl
OworICAgICptYXJnaW4tbGVmdDogMi43MDkyMzk0NDk4NjQ4MTclOworICAgIC13ZWJraXQtYm94
LXNpemluZzogYm9yZGVyLWJveDsKKyAgICAgICAtbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7
CisgICAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OworICB9CisgIC5yb3ctZmx1aWQg
W2NsYXNzKj0ic3BhbiJdOmZpcnN0LWNoaWxkIHsKKyAgICBtYXJnaW4tbGVmdDogMDsKKyAgfQor
ICAucm93LWZsdWlkIC5jb250cm9scy1yb3cgW2NsYXNzKj0ic3BhbiJdICsgW2NsYXNzKj0ic3Bh
biJdIHsKKyAgICBtYXJnaW4tbGVmdDogMi43NjI0MzA5MzkyMjY1MTk0JTsKKyAgfQorICAucm93
LWZsdWlkIC5zcGFuMTIgeworICAgIHdpZHRoOiAxMDAlOworICAgICp3aWR0aDogOTkuOTQ2ODA4
NTEwNjM4MjklOworICB9CisgIC5yb3ctZmx1aWQgLnNwYW4xMSB7CisgICAgd2lkdGg6IDkxLjQz
NjQ2NDA4ODM5Nzc4JTsKKyAgICAqd2lkdGg6IDkxLjM4MzI3MjU5OTAzNjA4JTsKKyAgfQorICAu
cm93LWZsdWlkIC5zcGFuMTAgeworICAgIHdpZHRoOiA4Mi44NzI5MjgxNzY3OTU1OCU7CisgICAg
KndpZHRoOiA4Mi44MTk3MzY2ODc0MzM4NyU7CisgIH0KKyAgLnJvdy1mbHVpZCAuc3Bhbjkgewor
ICAgIHdpZHRoOiA3NC4zMDkzOTIyNjUxOTMzNyU7CisgICAgKndpZHRoOiA3NC4yNTYyMDA3NzU4
MzE2NiU7CisgIH0KKyAgLnJvdy1mbHVpZCAuc3BhbjggeworICAgIHdpZHRoOiA2NS43NDU4NTYz
NTM1OTExNyU7CisgICAgKndpZHRoOiA2NS42OTI2NjQ4NjQyMjk0NiU7CisgIH0KKyAgLnJvdy1m
bHVpZCAuc3BhbjcgeworICAgIHdpZHRoOiA1Ny4xODIzMjA0NDE5ODg5NSU7CisgICAgKndpZHRo
OiA1Ny4xMjkxMjg5NTI2MjcyNSU7CisgIH0KKyAgLnJvdy1mbHVpZCAuc3BhbjYgeworICAgIHdp
ZHRoOiA0OC42MTg3ODQ1MzAzODY3NCU7CisgICAgKndpZHRoOiA0OC41NjU1OTMwNDEwMjUwNCU7
CisgIH0KKyAgLnJvdy1mbHVpZCAuc3BhbjUgeworICAgIHdpZHRoOiA0MC4wNTUyNDg2MTg3ODQ1
MyU7CisgICAgKndpZHRoOiA0MC4wMDIwNTcxMjk0MjI4MyU7CisgIH0KKyAgLnJvdy1mbHVpZCAu
c3BhbjQgeworICAgIHdpZHRoOiAzMS40OTE3MTI3MDcxODIzMjMlOworICAgICp3aWR0aDogMzEu
NDM4NTIxMjE3ODIwNjIlOworICB9CisgIC5yb3ctZmx1aWQgLnNwYW4zIHsKKyAgICB3aWR0aDog
MjIuOTI4MTc2Nzk1NTgwMTElOworICAgICp3aWR0aDogMjIuODc0OTg1MzA2MjE4NDElOworICB9
CisgIC5yb3ctZmx1aWQgLnNwYW4yIHsKKyAgICB3aWR0aDogMTQuMzY0NjQwODgzOTc3OSU7Cisg
ICAgKndpZHRoOiAxNC4zMTE0NDkzOTQ2MTYxOTklOworICB9CisgIC5yb3ctZmx1aWQgLnNwYW4x
IHsKKyAgICB3aWR0aDogNS44MDExMDQ5NzIzNzU2OTElOworICAgICp3aWR0aDogNS43NDc5MTM0
ODMwMTM5ODglOworICB9CisgIC5yb3ctZmx1aWQgLm9mZnNldDEyIHsKKyAgICBtYXJnaW4tbGVm
dDogMTA1LjUyNDg2MTg3ODQ1MzA0JTsKKyAgICAqbWFyZ2luLWxlZnQ6IDEwNS40MTg0Nzg4OTk3
Mjk2MiU7CisgIH0KKyAgLnJvdy1mbHVpZCAub2Zmc2V0MTI6Zmlyc3QtY2hpbGQgeworICAgIG1h
cmdpbi1sZWZ0OiAxMDIuNzYyNDMwOTM5MjI2NTIlOworICAgICptYXJnaW4tbGVmdDogMTAyLjY1
NjA0Nzk2MDUwMzElOworICB9CisgIC5yb3ctZmx1aWQgLm9mZnNldDExIHsKKyAgICBtYXJnaW4t
bGVmdDogOTYuOTYxMzI1OTY2ODUwODIlOworICAgICptYXJnaW4tbGVmdDogOTYuODU0OTQyOTg4
MTI3NCU7CisgIH0KKyAgLnJvdy1mbHVpZCAub2Zmc2V0MTE6Zmlyc3QtY2hpbGQgeworICAgIG1h
cmdpbi1sZWZ0OiA5NC4xOTg4OTUwMjc2MjQzJTsKKyAgICAqbWFyZ2luLWxlZnQ6IDk0LjA5MjUx
MjA0ODkwMDg5JTsKKyAgfQorICAucm93LWZsdWlkIC5vZmZzZXQxMCB7CisgICAgbWFyZ2luLWxl
ZnQ6IDg4LjM5Nzc5MDA1NTI0ODYyJTsKKyAgICAqbWFyZ2luLWxlZnQ6IDg4LjI5MTQwNzA3NjUy
NTIlOworICB9CisgIC5yb3ctZmx1aWQgLm9mZnNldDEwOmZpcnN0LWNoaWxkIHsKKyAgICBtYXJn
aW4tbGVmdDogODUuNjM1MzU5MTE2MDIyMSU7CisgICAgKm1hcmdpbi1sZWZ0OiA4NS41Mjg5NzYx
MzcyOTg2OCU7CisgIH0KKyAgLnJvdy1mbHVpZCAub2Zmc2V0OSB7CisgICAgbWFyZ2luLWxlZnQ6
IDc5LjgzNDI1NDE0MzY0NjQlOworICAgICptYXJnaW4tbGVmdDogNzkuNzI3ODcxMTY0OTIyOTkl
OworICB9CisgIC5yb3ctZmx1aWQgLm9mZnNldDk6Zmlyc3QtY2hpbGQgeworICAgIG1hcmdpbi1s
ZWZ0OiA3Ny4wNzE4MjMyMDQ0MTk4OSU7CisgICAgKm1hcmdpbi1sZWZ0OiA3Ni45NjU0NDAyMjU2
OTY0NyU7CisgIH0KKyAgLnJvdy1mbHVpZCAub2Zmc2V0OCB7CisgICAgbWFyZ2luLWxlZnQ6IDcx
LjI3MDcxODIzMjA0NDIlOworICAgICptYXJnaW4tbGVmdDogNzEuMTY0MzM1MjUzMzIwNzklOwor
ICB9CisgIC5yb3ctZmx1aWQgLm9mZnNldDg6Zmlyc3QtY2hpbGQgeworICAgIG1hcmdpbi1sZWZ0
OiA2OC41MDgyODcyOTI4MTc2OCU7CisgICAgKm1hcmdpbi1sZWZ0OiA2OC40MDE5MDQzMTQwOTQy
NyU7CisgIH0KKyAgLnJvdy1mbHVpZCAub2Zmc2V0NyB7CisgICAgbWFyZ2luLWxlZnQ6IDYyLjcw
NzE4MjMyMDQ0MTk5JTsKKyAgICAqbWFyZ2luLWxlZnQ6IDYyLjYwMDc5OTM0MTcxODU4NCU7Cisg
IH0KKyAgLnJvdy1mbHVpZCAub2Zmc2V0NzpmaXJzdC1jaGlsZCB7CisgICAgbWFyZ2luLWxlZnQ6
IDU5Ljk0NDc1MTM4MTIxNTQ3JTsKKyAgICAqbWFyZ2luLWxlZnQ6IDU5LjgzODM2ODQwMjQ5MjA2
NSU7CisgIH0KKyAgLnJvdy1mbHVpZCAub2Zmc2V0NiB7CisgICAgbWFyZ2luLWxlZnQ6IDU0LjE0
MzY0NjQwODgzOTc4JTsKKyAgICAqbWFyZ2luLWxlZnQ6IDU0LjAzNzI2MzQzMDExNjM3NiU7Cisg
IH0KKyAgLnJvdy1mbHVpZCAub2Zmc2V0NjpmaXJzdC1jaGlsZCB7CisgICAgbWFyZ2luLWxlZnQ6
IDUxLjM4MTIxNTQ2OTYxMzI2JTsKKyAgICAqbWFyZ2luLWxlZnQ6IDUxLjI3NDgzMjQ5MDg4OTg2
JTsKKyAgfQorICAucm93LWZsdWlkIC5vZmZzZXQ1IHsKKyAgICBtYXJnaW4tbGVmdDogNDUuNTgw
MTEwNDk3MjM3NTclOworICAgICptYXJnaW4tbGVmdDogNDUuNDczNzI3NTE4NTE0MTclOworICB9
CisgIC5yb3ctZmx1aWQgLm9mZnNldDU6Zmlyc3QtY2hpbGQgeworICAgIG1hcmdpbi1sZWZ0OiA0
Mi44MTc2Nzk1NTgwMTEwNSU7CisgICAgKm1hcmdpbi1sZWZ0OiA0Mi43MTEyOTY1NzkyODc2NSU7
CisgIH0KKyAgLnJvdy1mbHVpZCAub2Zmc2V0NCB7CisgICAgbWFyZ2luLWxlZnQ6IDM3LjAxNjU3
NDU4NTYzNTM2JTsKKyAgICAqbWFyZ2luLWxlZnQ6IDM2LjkxMDE5MTYwNjkxMTk2JTsKKyAgfQor
ICAucm93LWZsdWlkIC5vZmZzZXQ0OmZpcnN0LWNoaWxkIHsKKyAgICBtYXJnaW4tbGVmdDogMzQu
MjU0MTQzNjQ2NDA4ODQlOworICAgICptYXJnaW4tbGVmdDogMzQuMTQ3NzYwNjY3Njg1NDQlOwor
ICB9CisgIC5yb3ctZmx1aWQgLm9mZnNldDMgeworICAgIG1hcmdpbi1sZWZ0OiAyOC40NTMwMzg2
NzQwMzMxNSU7CisgICAgKm1hcmdpbi1sZWZ0OiAyOC4zNDY2NTU2OTUzMDk3NDYlOworICB9Cisg
IC5yb3ctZmx1aWQgLm9mZnNldDM6Zmlyc3QtY2hpbGQgeworICAgIG1hcmdpbi1sZWZ0OiAyNS42
OTA2MDc3MzQ4MDY2MyU7CisgICAgKm1hcmdpbi1sZWZ0OiAyNS41ODQyMjQ3NTYwODMyMjclOwor
ICB9CisgIC5yb3ctZmx1aWQgLm9mZnNldDIgeworICAgIG1hcmdpbi1sZWZ0OiAxOS44ODk1MDI3
NjI0MzA5NCU7CisgICAgKm1hcmdpbi1sZWZ0OiAxOS43ODMxMTk3ODM3MDc1MzclOworICB9Cisg
IC5yb3ctZmx1aWQgLm9mZnNldDI6Zmlyc3QtY2hpbGQgeworICAgIG1hcmdpbi1sZWZ0OiAxNy4x
MjcwNzE4MjMyMDQ0MiU7CisgICAgKm1hcmdpbi1sZWZ0OiAxNy4wMjA2ODg4NDQ0ODEwMiU7Cisg
IH0KKyAgLnJvdy1mbHVpZCAub2Zmc2V0MSB7CisgICAgbWFyZ2luLWxlZnQ6IDExLjMyNTk2Njg1
MDgyODczJTsKKyAgICAqbWFyZ2luLWxlZnQ6IDExLjIxOTU4Mzg3MjEwNTMyNSU7CisgIH0KKyAg
LnJvdy1mbHVpZCAub2Zmc2V0MTpmaXJzdC1jaGlsZCB7CisgICAgbWFyZ2luLWxlZnQ6IDguNTYz
NTM1OTExNjAyMjElOworICAgICptYXJnaW4tbGVmdDogOC40NTcxNTI5MzI4Nzg4MDYlOworICB9
CisgIGlucHV0LAorICB0ZXh0YXJlYSwKKyAgLnVuZWRpdGFibGUtaW5wdXQgeworICAgIG1hcmdp
bi1sZWZ0OiAwOworICB9CisgIC5jb250cm9scy1yb3cgW2NsYXNzKj0ic3BhbiJdICsgW2NsYXNz
Kj0ic3BhbiJdIHsKKyAgICBtYXJnaW4tbGVmdDogMjBweDsKKyAgfQorICBpbnB1dC5zcGFuMTIs
CisgIHRleHRhcmVhLnNwYW4xMiwKKyAgLnVuZWRpdGFibGUtaW5wdXQuc3BhbjEyIHsKKyAgICB3
aWR0aDogNzEwcHg7CisgIH0KKyAgaW5wdXQuc3BhbjExLAorICB0ZXh0YXJlYS5zcGFuMTEsCisg
IC51bmVkaXRhYmxlLWlucHV0LnNwYW4xMSB7CisgICAgd2lkdGg6IDY0OHB4OworICB9CisgIGlu
cHV0LnNwYW4xMCwKKyAgdGV4dGFyZWEuc3BhbjEwLAorICAudW5lZGl0YWJsZS1pbnB1dC5zcGFu
MTAgeworICAgIHdpZHRoOiA1ODZweDsKKyAgfQorICBpbnB1dC5zcGFuOSwKKyAgdGV4dGFyZWEu
c3BhbjksCisgIC51bmVkaXRhYmxlLWlucHV0LnNwYW45IHsKKyAgICB3aWR0aDogNTI0cHg7Cisg
IH0KKyAgaW5wdXQuc3BhbjgsCisgIHRleHRhcmVhLnNwYW44LAorICAudW5lZGl0YWJsZS1pbnB1
dC5zcGFuOCB7CisgICAgd2lkdGg6IDQ2MnB4OworICB9CisgIGlucHV0LnNwYW43LAorICB0ZXh0
YXJlYS5zcGFuNywKKyAgLnVuZWRpdGFibGUtaW5wdXQuc3BhbjcgeworICAgIHdpZHRoOiA0MDBw
eDsKKyAgfQorICBpbnB1dC5zcGFuNiwKKyAgdGV4dGFyZWEuc3BhbjYsCisgIC51bmVkaXRhYmxl
LWlucHV0LnNwYW42IHsKKyAgICB3aWR0aDogMzM4cHg7CisgIH0KKyAgaW5wdXQuc3BhbjUsCisg
IHRleHRhcmVhLnNwYW41LAorICAudW5lZGl0YWJsZS1pbnB1dC5zcGFuNSB7CisgICAgd2lkdGg6
IDI3NnB4OworICB9CisgIGlucHV0LnNwYW40LAorICB0ZXh0YXJlYS5zcGFuNCwKKyAgLnVuZWRp
dGFibGUtaW5wdXQuc3BhbjQgeworICAgIHdpZHRoOiAyMTRweDsKKyAgfQorICBpbnB1dC5zcGFu
MywKKyAgdGV4dGFyZWEuc3BhbjMsCisgIC51bmVkaXRhYmxlLWlucHV0LnNwYW4zIHsKKyAgICB3
aWR0aDogMTUycHg7CisgIH0KKyAgaW5wdXQuc3BhbjIsCisgIHRleHRhcmVhLnNwYW4yLAorICAu
dW5lZGl0YWJsZS1pbnB1dC5zcGFuMiB7CisgICAgd2lkdGg6IDkwcHg7CisgIH0KKyAgaW5wdXQu
c3BhbjEsCisgIHRleHRhcmVhLnNwYW4xLAorICAudW5lZGl0YWJsZS1pbnB1dC5zcGFuMSB7Cisg
ICAgd2lkdGg6IDI4cHg7CisgIH0KK30KKworQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7Cisg
IGJvZHkgeworICAgIHBhZGRpbmctcmlnaHQ6IDIwcHg7CisgICAgcGFkZGluZy1sZWZ0OiAyMHB4
OworICB9CisgIC5uYXZiYXItZml4ZWQtdG9wLAorICAubmF2YmFyLWZpeGVkLWJvdHRvbSwKKyAg
Lm5hdmJhci1zdGF0aWMtdG9wIHsKKyAgICBtYXJnaW4tcmlnaHQ6IC0yMHB4OworICAgIG1hcmdp
bi1sZWZ0OiAtMjBweDsKKyAgfQorICAuY29udGFpbmVyLWZsdWlkIHsKKyAgICBwYWRkaW5nOiAw
OworICB9CisgIC5kbC1ob3Jpem9udGFsIGR0IHsKKyAgICBmbG9hdDogbm9uZTsKKyAgICB3aWR0
aDogYXV0bzsKKyAgICBjbGVhcjogbm9uZTsKKyAgICB0ZXh0LWFsaWduOiBsZWZ0OworICB9Cisg
IC5kbC1ob3Jpem9udGFsIGRkIHsKKyAgICBtYXJnaW4tbGVmdDogMDsKKyAgfQorICAuY29udGFp
bmVyIHsKKyAgICB3aWR0aDogYXV0bzsKKyAgfQorICAucm93LWZsdWlkIHsKKyAgICB3aWR0aDog
MTAwJTsKKyAgfQorICAucm93LAorICAudGh1bWJuYWlscyB7CisgICAgbWFyZ2luLWxlZnQ6IDA7
CisgIH0KKyAgLnRodW1ibmFpbHMgPiBsaSB7CisgICAgZmxvYXQ6IG5vbmU7CisgICAgbWFyZ2lu
LWxlZnQ6IDA7CisgIH0KKyAgW2NsYXNzKj0ic3BhbiJdLAorICAudW5lZGl0YWJsZS1pbnB1dFtj
bGFzcyo9InNwYW4iXSwKKyAgLnJvdy1mbHVpZCBbY2xhc3MqPSJzcGFuIl0geworICAgIGRpc3Bs
YXk6IGJsb2NrOworICAgIGZsb2F0OiBub25lOworICAgIHdpZHRoOiAxMDAlOworICAgIG1hcmdp
bi1sZWZ0OiAwOworICAgIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDsKKyAgICAgICAt
bW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7CisgICAgICAgICAgICBib3gtc2l6aW5nOiBib3Jk
ZXItYm94OworICB9CisgIC5zcGFuMTIsCisgIC5yb3ctZmx1aWQgLnNwYW4xMiB7CisgICAgd2lk
dGg6IDEwMCU7CisgICAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94OworICAgICAgIC1t
b3otYm94LXNpemluZzogYm9yZGVyLWJveDsKKyAgICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRl
ci1ib3g7CisgIH0KKyAgLnJvdy1mbHVpZCBbY2xhc3MqPSJvZmZzZXQiXTpmaXJzdC1jaGlsZCB7
CisgICAgbWFyZ2luLWxlZnQ6IDA7CisgIH0KKyAgLmlucHV0LWxhcmdlLAorICAuaW5wdXQteGxh
cmdlLAorICAuaW5wdXQteHhsYXJnZSwKKyAgaW5wdXRbY2xhc3MqPSJzcGFuIl0sCisgIHNlbGVj
dFtjbGFzcyo9InNwYW4iXSwKKyAgdGV4dGFyZWFbY2xhc3MqPSJzcGFuIl0sCisgIC51bmVkaXRh
YmxlLWlucHV0IHsKKyAgICBkaXNwbGF5OiBibG9jazsKKyAgICB3aWR0aDogMTAwJTsKKyAgICBt
aW4taGVpZ2h0OiAzMHB4OworICAgIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDsKKyAg
ICAgICAtbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7CisgICAgICAgICAgICBib3gtc2l6aW5n
OiBib3JkZXItYm94OworICB9CisgIC5pbnB1dC1wcmVwZW5kIGlucHV0LAorICAuaW5wdXQtYXBw
ZW5kIGlucHV0LAorICAuaW5wdXQtcHJlcGVuZCBpbnB1dFtjbGFzcyo9InNwYW4iXSwKKyAgLmlu
cHV0LWFwcGVuZCBpbnB1dFtjbGFzcyo9InNwYW4iXSB7CisgICAgZGlzcGxheTogaW5saW5lLWJs
b2NrOworICAgIHdpZHRoOiBhdXRvOworICB9CisgIC5jb250cm9scy1yb3cgW2NsYXNzKj0ic3Bh
biJdICsgW2NsYXNzKj0ic3BhbiJdIHsKKyAgICBtYXJnaW4tbGVmdDogMDsKKyAgfQorICAubW9k
YWwgeworICAgIHBvc2l0aW9uOiBmaXhlZDsKKyAgICB0b3A6IDIwcHg7CisgICAgcmlnaHQ6IDIw
cHg7CisgICAgbGVmdDogMjBweDsKKyAgICB3aWR0aDogYXV0bzsKKyAgICBtYXJnaW46IDA7Cisg
IH0KKyAgLm1vZGFsLmZhZGUgeworICAgIHRvcDogLTEwMHB4OworICB9CisgIC5tb2RhbC5mYWRl
LmluIHsKKyAgICB0b3A6IDIwcHg7CisgIH0KK30KKworQG1lZGlhIChtYXgtd2lkdGg6IDQ4MHB4
KSB7CisgIC5uYXYtY29sbGFwc2UgeworICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUz
ZCgwLCAwLCAwKTsKKyAgfQorICAucGFnZS1oZWFkZXIgaDEgc21hbGwgeworICAgIGRpc3BsYXk6
IGJsb2NrOworICAgIGxpbmUtaGVpZ2h0OiAyMHB4OworICB9CisgIGlucHV0W3R5cGU9ImNoZWNr
Ym94Il0sCisgIGlucHV0W3R5cGU9InJhZGlvIl0geworICAgIGJvcmRlcjogMXB4IHNvbGlkICNj
Y2M7CisgIH0KKyAgLmZvcm0taG9yaXpvbnRhbCAuY29udHJvbC1sYWJlbCB7CisgICAgZmxvYXQ6
IG5vbmU7CisgICAgd2lkdGg6IGF1dG87CisgICAgcGFkZGluZy10b3A6IDA7CisgICAgdGV4dC1h
bGlnbjogbGVmdDsKKyAgfQorICAuZm9ybS1ob3Jpem9udGFsIC5jb250cm9scyB7CisgICAgbWFy
Z2luLWxlZnQ6IDA7CisgIH0KKyAgLmZvcm0taG9yaXpvbnRhbCAuY29udHJvbC1saXN0IHsKKyAg
ICBwYWRkaW5nLXRvcDogMDsKKyAgfQorICAuZm9ybS1ob3Jpem9udGFsIC5mb3JtLWFjdGlvbnMg
eworICAgIHBhZGRpbmctcmlnaHQ6IDEwcHg7CisgICAgcGFkZGluZy1sZWZ0OiAxMHB4OworICB9
CisgIC5tZWRpYSAucHVsbC1sZWZ0LAorICAubWVkaWEgLnB1bGwtcmlnaHQgeworICAgIGRpc3Bs
YXk6IGJsb2NrOworICAgIGZsb2F0OiBub25lOworICAgIG1hcmdpbi1ib3R0b206IDEwcHg7Cisg
IH0KKyAgLm1lZGlhLW9iamVjdCB7CisgICAgbWFyZ2luLXJpZ2h0OiAwOworICAgIG1hcmdpbi1s
ZWZ0OiAwOworICB9CisgIC5tb2RhbCB7CisgICAgdG9wOiAxMHB4OworICAgIHJpZ2h0OiAxMHB4
OworICAgIGxlZnQ6IDEwcHg7CisgIH0KKyAgLm1vZGFsLWhlYWRlciAuY2xvc2UgeworICAgIHBh
ZGRpbmc6IDEwcHg7CisgICAgbWFyZ2luOiAtMTBweDsKKyAgfQorICAuY2Fyb3VzZWwtY2FwdGlv
biB7CisgICAgcG9zaXRpb246IHN0YXRpYzsKKyAgfQorfQorCitAbWVkaWEgKG1heC13aWR0aDog
OTc5cHgpIHsKKyAgYm9keSB7CisgICAgcGFkZGluZy10b3A6IDA7CisgIH0KKyAgLm5hdmJhci1m
aXhlZC10b3AsCisgIC5uYXZiYXItZml4ZWQtYm90dG9tIHsKKyAgICBwb3NpdGlvbjogc3RhdGlj
OworICB9CisgIC5uYXZiYXItZml4ZWQtdG9wIHsKKyAgICBtYXJnaW4tYm90dG9tOiAyMHB4Owor
ICB9CisgIC5uYXZiYXItZml4ZWQtYm90dG9tIHsKKyAgICBtYXJnaW4tdG9wOiAyMHB4OworICB9
CisgIC5uYXZiYXItZml4ZWQtdG9wIC5uYXZiYXItaW5uZXIsCisgIC5uYXZiYXItZml4ZWQtYm90
dG9tIC5uYXZiYXItaW5uZXIgeworICAgIHBhZGRpbmc6IDVweDsKKyAgfQorICAubmF2YmFyIC5j
b250YWluZXIgeworICAgIHdpZHRoOiBhdXRvOworICAgIHBhZGRpbmc6IDA7CisgIH0KKyAgLm5h
dmJhciAuYnJhbmQgeworICAgIHBhZGRpbmctcmlnaHQ6IDEwcHg7CisgICAgcGFkZGluZy1sZWZ0
OiAxMHB4OworICAgIG1hcmdpbjogMCAwIDAgLTVweDsKKyAgfQorICAubmF2LWNvbGxhcHNlIHsK
KyAgICBjbGVhcjogYm90aDsKKyAgfQorICAubmF2LWNvbGxhcHNlIC5uYXYgeworICAgIGZsb2F0
OiBub25lOworICAgIG1hcmdpbjogMCAwIDEwcHg7CisgIH0KKyAgLm5hdi1jb2xsYXBzZSAubmF2
ID4gbGkgeworICAgIGZsb2F0OiBub25lOworICB9CisgIC5uYXYtY29sbGFwc2UgLm5hdiA+IGxp
ID4gYSB7CisgICAgbWFyZ2luLWJvdHRvbTogMnB4OworICB9CisgIC5uYXYtY29sbGFwc2UgLm5h
diA+IC5kaXZpZGVyLXZlcnRpY2FsIHsKKyAgICBkaXNwbGF5OiBub25lOworICB9CisgIC5uYXYt
Y29sbGFwc2UgLm5hdiAubmF2LWhlYWRlciB7CisgICAgY29sb3I6ICM3Nzc3Nzc7CisgICAgdGV4
dC1zaGFkb3c6IG5vbmU7CisgIH0KKyAgLm5hdi1jb2xsYXBzZSAubmF2ID4gbGkgPiBhLAorICAu
bmF2LWNvbGxhcHNlIC5kcm9wZG93bi1tZW51IGEgeworICAgIHBhZGRpbmc6IDlweCAxNXB4Owor
ICAgIGZvbnQtd2VpZ2h0OiBib2xkOworICAgIGNvbG9yOiAjNzc3Nzc3OworICAgIC13ZWJraXQt
Ym9yZGVyLXJhZGl1czogM3B4OworICAgICAgIC1tb3otYm9yZGVyLXJhZGl1czogM3B4OworICAg
ICAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OworICB9CisgIC5uYXYtY29sbGFwc2UgLmJ0biB7
CisgICAgcGFkZGluZzogNHB4IDEwcHggNHB4OworICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7Cisg
ICAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA0cHg7CisgICAgICAgLW1vei1ib3JkZXItcmFkaXVz
OiA0cHg7CisgICAgICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CisgIH0KKyAgLm5hdi1jb2xs
YXBzZSAuZHJvcGRvd24tbWVudSBsaSArIGxpIGEgeworICAgIG1hcmdpbi1ib3R0b206IDJweDsK
KyAgfQorICAubmF2LWNvbGxhcHNlIC5uYXYgPiBsaSA+IGE6aG92ZXIsCisgIC5uYXYtY29sbGFw
c2UgLmRyb3Bkb3duLW1lbnUgYTpob3ZlciB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogI2YyZjJm
MjsKKyAgfQorICAubmF2YmFyLWludmVyc2UgLm5hdi1jb2xsYXBzZSAubmF2ID4gbGkgPiBhLAor
ICAubmF2YmFyLWludmVyc2UgLm5hdi1jb2xsYXBzZSAuZHJvcGRvd24tbWVudSBhIHsKKyAgICBj
b2xvcjogIzk5OTk5OTsKKyAgfQorICAubmF2YmFyLWludmVyc2UgLm5hdi1jb2xsYXBzZSAubmF2
ID4gbGkgPiBhOmhvdmVyLAorICAubmF2YmFyLWludmVyc2UgLm5hdi1jb2xsYXBzZSAuZHJvcGRv
d24tbWVudSBhOmhvdmVyIHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTExMTExOworICB9Cisg
IC5uYXYtY29sbGFwc2UuaW4gLmJ0bi1ncm91cCB7CisgICAgcGFkZGluZzogMDsKKyAgICBtYXJn
aW4tdG9wOiA1cHg7CisgIH0KKyAgLm5hdi1jb2xsYXBzZSAuZHJvcGRvd24tbWVudSB7CisgICAg
cG9zaXRpb246IHN0YXRpYzsKKyAgICB0b3A6IGF1dG87CisgICAgbGVmdDogYXV0bzsKKyAgICBk
aXNwbGF5OiBub25lOworICAgIGZsb2F0OiBub25lOworICAgIG1heC13aWR0aDogbm9uZTsKKyAg
ICBwYWRkaW5nOiAwOworICAgIG1hcmdpbjogMCAxNXB4OworICAgIGJhY2tncm91bmQtY29sb3I6
IHRyYW5zcGFyZW50OworICAgIGJvcmRlcjogbm9uZTsKKyAgICAtd2Via2l0LWJvcmRlci1yYWRp
dXM6IDA7CisgICAgICAgLW1vei1ib3JkZXItcmFkaXVzOiAwOworICAgICAgICAgICAgYm9yZGVy
LXJhZGl1czogMDsKKyAgICAtd2Via2l0LWJveC1zaGFkb3c6IG5vbmU7CisgICAgICAgLW1vei1i
b3gtc2hhZG93OiBub25lOworICAgICAgICAgICAgYm94LXNoYWRvdzogbm9uZTsKKyAgfQorICAu
bmF2LWNvbGxhcHNlIC5vcGVuID4gLmRyb3Bkb3duLW1lbnUgeworICAgIGRpc3BsYXk6IGJsb2Nr
OworICB9CisgIC5uYXYtY29sbGFwc2UgLmRyb3Bkb3duLW1lbnU6YmVmb3JlLAorICAubmF2LWNv
bGxhcHNlIC5kcm9wZG93bi1tZW51OmFmdGVyIHsKKyAgICBkaXNwbGF5OiBub25lOworICB9Cisg
IC5uYXYtY29sbGFwc2UgLmRyb3Bkb3duLW1lbnUgLmRpdmlkZXIgeworICAgIGRpc3BsYXk6IG5v
bmU7CisgIH0KKyAgLm5hdi1jb2xsYXBzZSAubmF2ID4gbGkgPiAuZHJvcGRvd24tbWVudTpiZWZv
cmUsCisgIC5uYXYtY29sbGFwc2UgLm5hdiA+IGxpID4gLmRyb3Bkb3duLW1lbnU6YWZ0ZXIgewor
ICAgIGRpc3BsYXk6IG5vbmU7CisgIH0KKyAgLm5hdi1jb2xsYXBzZSAubmF2YmFyLWZvcm0sCisg
IC5uYXYtY29sbGFwc2UgLm5hdmJhci1zZWFyY2ggeworICAgIGZsb2F0OiBub25lOworICAgIHBh
ZGRpbmc6IDEwcHggMTVweDsKKyAgICBtYXJnaW46IDEwcHggMDsKKyAgICBib3JkZXItdG9wOiAx
cHggc29saWQgI2YyZjJmMjsKKyAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2YyZjJmMjsK
KyAgICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1
LCAwLjEpLCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTsKKyAgICAgICAtbW96LWJv
eC1zaGFkb3c6IGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpLCAwIDFweCAw
IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTsKKyAgICAgICAgICAgIGJveC1zaGFkb3c6IGluc2V0
IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpLCAwIDFweCAwIHJnYmEoMjU1LCAyNTUs
IDI1NSwgMC4xKTsKKyAgfQorICAubmF2YmFyLWludmVyc2UgLm5hdi1jb2xsYXBzZSAubmF2YmFy
LWZvcm0sCisgIC5uYXZiYXItaW52ZXJzZSAubmF2LWNvbGxhcHNlIC5uYXZiYXItc2VhcmNoIHsK
KyAgICBib3JkZXItdG9wLWNvbG9yOiAjMTExMTExOworICAgIGJvcmRlci1ib3R0b20tY29sb3I6
ICMxMTExMTE7CisgIH0KKyAgLm5hdmJhciAubmF2LWNvbGxhcHNlIC5uYXYucHVsbC1yaWdodCB7
CisgICAgZmxvYXQ6IG5vbmU7CisgICAgbWFyZ2luLWxlZnQ6IDA7CisgIH0KKyAgLm5hdi1jb2xs
YXBzZSwKKyAgLm5hdi1jb2xsYXBzZS5jb2xsYXBzZSB7CisgICAgaGVpZ2h0OiAwOworICAgIG92
ZXJmbG93OiBoaWRkZW47CisgIH0KKyAgLm5hdmJhciAuYnRuLW5hdmJhciB7CisgICAgZGlzcGxh
eTogYmxvY2s7CisgIH0KKyAgLm5hdmJhci1zdGF0aWMgLm5hdmJhci1pbm5lciB7CisgICAgcGFk
ZGluZy1yaWdodDogMTBweDsKKyAgICBwYWRkaW5nLWxlZnQ6IDEwcHg7CisgIH0KK30KKworQG1l
ZGlhIChtaW4td2lkdGg6IDk4MHB4KSB7CisgIC5uYXYtY29sbGFwc2UuY29sbGFwc2UgeworICAg
IGhlaWdodDogYXV0byAhaW1wb3J0YW50OworICAgIG92ZXJmbG93OiB2aXNpYmxlICFpbXBvcnRh
bnQ7CisgIH0KK30KSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0
anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9ib290c3RyYXAvY3NzL2Jvb3RzdHJhcC1yZXNwb25z
aXZlLm1pbi5jc3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5j
aC9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2Jvb3RzdHJhcC9jc3MvYm9vdHN0cmFw
LXJlc3BvbnNpdmUubWluLmNzcwkocmV2aXNpb24gMCkKKysrIFBlcmZvcm1hbmNlVGVzdHMvRG9Z
b3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9ib290c3RyYXAvY3Nz
L2Jvb3RzdHJhcC1yZXNwb25zaXZlLm1pbi5jc3MJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5
IEBACisvKiEKKyAqIEJvb3RzdHJhcCBSZXNwb25zaXZlIHYyLjIuMgorICoKKyAqIENvcHlyaWdo
dCAyMDEyIFR3aXR0ZXIsIEluYworICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNl
IHYyLjAKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoK
KyAqIERlc2lnbmVkIGFuZCBidWlsdCB3aXRoIGFsbCB0aGUgbG92ZSBpbiB0aGUgd29ybGQgQHR3
aXR0ZXIgYnkgQG1kbyBhbmQgQGZhdC4KKyAqL0AtbXMtdmlld3BvcnR7d2lkdGg6ZGV2aWNlLXdp
ZHRofS5jbGVhcmZpeHsqem9vbToxfS5jbGVhcmZpeDpiZWZvcmUsLmNsZWFyZml4OmFmdGVye2Rp
c3BsYXk6dGFibGU7bGluZS1oZWlnaHQ6MDtjb250ZW50OiIifS5jbGVhcmZpeDphZnRlcntjbGVh
cjpib3RofS5oaWRlLXRleHR7Zm9udDowLzAgYTtjb2xvcjp0cmFuc3BhcmVudDt0ZXh0LXNoYWRv
dzpub25lO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyOjB9LmlucHV0LWJsb2Nr
LWxldmVse2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJTttaW4taGVpZ2h0OjMwcHg7LXdlYmtpdC1i
b3gtc2l6aW5nOmJvcmRlci1ib3g7LW1vei1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemlu
Zzpib3JkZXItYm94fS5oaWRkZW57ZGlzcGxheTpub25lO3Zpc2liaWxpdHk6aGlkZGVufS52aXNp
YmxlLXBob25le2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9LnZpc2libGUtdGFibGV0e2Rpc3BsYXk6
bm9uZSFpbXBvcnRhbnR9LmhpZGRlbi1kZXNrdG9we2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9LnZp
c2libGUtZGVza3RvcHtkaXNwbGF5OmluaGVyaXQhaW1wb3J0YW50fUBtZWRpYShtaW4td2lkdGg6
NzY4cHgpIGFuZCAobWF4LXdpZHRoOjk3OXB4KXsuaGlkZGVuLWRlc2t0b3B7ZGlzcGxheTppbmhl
cml0IWltcG9ydGFudH0udmlzaWJsZS1kZXNrdG9we2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9LnZp
c2libGUtdGFibGV0e2Rpc3BsYXk6aW5oZXJpdCFpbXBvcnRhbnR9LmhpZGRlbi10YWJsZXR7ZGlz
cGxheTpub25lIWltcG9ydGFudH19QG1lZGlhKG1heC13aWR0aDo3NjdweCl7LmhpZGRlbi1kZXNr
dG9we2Rpc3BsYXk6aW5oZXJpdCFpbXBvcnRhbnR9LnZpc2libGUtZGVza3RvcHtkaXNwbGF5Om5v
bmUhaW1wb3J0YW50fS52aXNpYmxlLXBob25le2Rpc3BsYXk6aW5oZXJpdCFpbXBvcnRhbnR9Lmhp
ZGRlbi1waG9uZXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fX1AbWVkaWEobWluLXdpZHRoOjEyMDBw
eCl7LnJvd3ttYXJnaW4tbGVmdDotMzBweDsqem9vbToxfS5yb3c6YmVmb3JlLC5yb3c6YWZ0ZXJ7
ZGlzcGxheTp0YWJsZTtsaW5lLWhlaWdodDowO2NvbnRlbnQ6IiJ9LnJvdzphZnRlcntjbGVhcjpi
b3RofVtjbGFzcyo9InNwYW4iXXtmbG9hdDpsZWZ0O21pbi1oZWlnaHQ6MXB4O21hcmdpbi1sZWZ0
OjMwcHh9LmNvbnRhaW5lciwubmF2YmFyLXN0YXRpYy10b3AgLmNvbnRhaW5lciwubmF2YmFyLWZp
eGVkLXRvcCAuY29udGFpbmVyLC5uYXZiYXItZml4ZWQtYm90dG9tIC5jb250YWluZXJ7d2lkdGg6
MTE3MHB4fS5zcGFuMTJ7d2lkdGg6MTE3MHB4fS5zcGFuMTF7d2lkdGg6MTA3MHB4fS5zcGFuMTB7
d2lkdGg6OTcwcHh9LnNwYW45e3dpZHRoOjg3MHB4fS5zcGFuOHt3aWR0aDo3NzBweH0uc3Bhbjd7
d2lkdGg6NjcwcHh9LnNwYW42e3dpZHRoOjU3MHB4fS5zcGFuNXt3aWR0aDo0NzBweH0uc3BhbjR7
d2lkdGg6MzcwcHh9LnNwYW4ze3dpZHRoOjI3MHB4fS5zcGFuMnt3aWR0aDoxNzBweH0uc3BhbjF7
d2lkdGg6NzBweH0ub2Zmc2V0MTJ7bWFyZ2luLWxlZnQ6MTIzMHB4fS5vZmZzZXQxMXttYXJnaW4t
bGVmdDoxMTMwcHh9Lm9mZnNldDEwe21hcmdpbi1sZWZ0OjEwMzBweH0ub2Zmc2V0OXttYXJnaW4t
bGVmdDo5MzBweH0ub2Zmc2V0OHttYXJnaW4tbGVmdDo4MzBweH0ub2Zmc2V0N3ttYXJnaW4tbGVm
dDo3MzBweH0ub2Zmc2V0NnttYXJnaW4tbGVmdDo2MzBweH0ub2Zmc2V0NXttYXJnaW4tbGVmdDo1
MzBweH0ub2Zmc2V0NHttYXJnaW4tbGVmdDo0MzBweH0ub2Zmc2V0M3ttYXJnaW4tbGVmdDozMzBw
eH0ub2Zmc2V0MnttYXJnaW4tbGVmdDoyMzBweH0ub2Zmc2V0MXttYXJnaW4tbGVmdDoxMzBweH0u
cm93LWZsdWlke3dpZHRoOjEwMCU7Knpvb206MX0ucm93LWZsdWlkOmJlZm9yZSwucm93LWZsdWlk
OmFmdGVye2Rpc3BsYXk6dGFibGU7bGluZS1oZWlnaHQ6MDtjb250ZW50OiIifS5yb3ctZmx1aWQ6
YWZ0ZXJ7Y2xlYXI6Ym90aH0ucm93LWZsdWlkIFtjbGFzcyo9InNwYW4iXXtkaXNwbGF5OmJsb2Nr
O2Zsb2F0OmxlZnQ7d2lkdGg6MTAwJTttaW4taGVpZ2h0OjMwcHg7bWFyZ2luLWxlZnQ6Mi41NjQx
MDI1NjQxMDI1NjQlOyptYXJnaW4tbGVmdDoyLjUxMDkxMTA3NDc0MDg2MTYlOy13ZWJraXQtYm94
LXNpemluZzpib3JkZXItYm94Oy1tb3otYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6
Ym9yZGVyLWJveH0ucm93LWZsdWlkIFtjbGFzcyo9InNwYW4iXTpmaXJzdC1jaGlsZHttYXJnaW4t
bGVmdDowfS5yb3ctZmx1aWQgLmNvbnRyb2xzLXJvdyBbY2xhc3MqPSJzcGFuIl0rW2NsYXNzKj0i
c3BhbiJde21hcmdpbi1sZWZ0OjIuNTY0MTAyNTY0MTAyNTY0JX0ucm93LWZsdWlkIC5zcGFuMTJ7
d2lkdGg6MTAwJTsqd2lkdGg6OTkuOTQ2ODA4NTEwNjM4MjklfS5yb3ctZmx1aWQgLnNwYW4xMXt3
aWR0aDo5MS40NTI5OTE0NTI5OTE0NSU7KndpZHRoOjkxLjM5OTc5OTk2MzYyOTc1JX0ucm93LWZs
dWlkIC5zcGFuMTB7d2lkdGg6ODIuOTA1OTgyOTA1OTgyOTElOyp3aWR0aDo4Mi44NTI3OTE0MTY2
MjEyJX0ucm93LWZsdWlkIC5zcGFuOXt3aWR0aDo3NC4zNTg5NzQzNTg5NzQzNiU7KndpZHRoOjc0
LjMwNTc4Mjg2OTYxMjY2JX0ucm93LWZsdWlkIC5zcGFuOHt3aWR0aDo2NS44MTE5NjU4MTE5NjU4
MiU7KndpZHRoOjY1Ljc1ODc3NDMyMjYwNDExJX0ucm93LWZsdWlkIC5zcGFuN3t3aWR0aDo1Ny4y
NjQ5NTcyNjQ5NTcyNiU7KndpZHRoOjU3LjIxMTc2NTc3NTU5NTU2JX0ucm93LWZsdWlkIC5zcGFu
Nnt3aWR0aDo0OC43MTc5NDg3MTc5NDg3MTUlOyp3aWR0aDo0OC42NjQ3NTcyMjg1ODcwMTQlfS5y
b3ctZmx1aWQgLnNwYW41e3dpZHRoOjQwLjE3MDk0MDE3MDk0MDE3JTsqd2lkdGg6NDAuMTE3NzQ4
NjgxNTc4NDclfS5yb3ctZmx1aWQgLnNwYW40e3dpZHRoOjMxLjYyMzkzMTYyMzkzMTYyNSU7Kndp
ZHRoOjMxLjU3MDc0MDEzNDU2OTkyNCV9LnJvdy1mbHVpZCAuc3BhbjN7d2lkdGg6MjMuMDc2OTIz
MDc2OTIzMDc3JTsqd2lkdGg6MjMuMDIzNzMxNTg3NTYxMzc1JX0ucm93LWZsdWlkIC5zcGFuMnt3
aWR0aDoxNC41Mjk5MTQ1Mjk5MTQ1MyU7KndpZHRoOjE0LjQ3NjcyMzA0MDU1MjgyOCV9LnJvdy1m
bHVpZCAuc3BhbjF7d2lkdGg6NS45ODI5MDU5ODI5MDU5ODMlOyp3aWR0aDo1LjkyOTcxNDQ5MzU0
NDI4MSV9LnJvdy1mbHVpZCAub2Zmc2V0MTJ7bWFyZ2luLWxlZnQ6MTA1LjEyODIwNTEyODIwNTEy
JTsqbWFyZ2luLWxlZnQ6MTA1LjAyMTgyMjE0OTQ4MTcxJX0ucm93LWZsdWlkIC5vZmZzZXQxMjpm
aXJzdC1jaGlsZHttYXJnaW4tbGVmdDoxMDIuNTY0MTAyNTY0MTAyNTclOyptYXJnaW4tbGVmdDox
MDIuNDU3NzE5NTg1Mzc5MTUlfS5yb3ctZmx1aWQgLm9mZnNldDExe21hcmdpbi1sZWZ0Ojk2LjU4
MTE5NjU4MTE5NjU4JTsqbWFyZ2luLWxlZnQ6OTYuNDc0ODEzNjAyNDczMTYlfS5yb3ctZmx1aWQg
Lm9mZnNldDExOmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0Ojk0LjAxNzA5NDAxNzA5NDAyJTsqbWFy
Z2luLWxlZnQ6OTMuOTEwNzExMDM4MzcwNjElfS5yb3ctZmx1aWQgLm9mZnNldDEwe21hcmdpbi1s
ZWZ0Ojg4LjAzNDE4ODAzNDE4ODAzJTsqbWFyZ2luLWxlZnQ6ODcuOTI3ODA1MDU1NDY0NjIlfS5y
b3ctZmx1aWQgLm9mZnNldDEwOmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0Ojg1LjQ3MDA4NTQ3MDA4
NTQ4JTsqbWFyZ2luLWxlZnQ6ODUuMzYzNzAyNDkxMzYyMDYlfS5yb3ctZmx1aWQgLm9mZnNldDl7
bWFyZ2luLWxlZnQ6NzkuNDg3MTc5NDg3MTc5NDklOyptYXJnaW4tbGVmdDo3OS4zODA3OTY1MDg0
NTYwNyV9LnJvdy1mbHVpZCAub2Zmc2V0OTpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDo3Ni45MjMw
NzY5MjMwNzY5MyU7Km1hcmdpbi1sZWZ0Ojc2LjgxNjY5Mzk0NDM1MzUyJX0ucm93LWZsdWlkIC5v
ZmZzZXQ4e21hcmdpbi1sZWZ0OjcwLjk0MDE3MDk0MDE3MDk0JTsqbWFyZ2luLWxlZnQ6NzAuODMz
Nzg3OTYxNDQ3NTMlfS5yb3ctZmx1aWQgLm9mZnNldDg6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6
NjguMzc2MDY4Mzc2MDY4MzklOyptYXJnaW4tbGVmdDo2OC4yNjk2ODUzOTczNDQ5NyV9LnJvdy1m
bHVpZCAub2Zmc2V0N3ttYXJnaW4tbGVmdDo2Mi4zOTMxNjIzOTMxNjIzODUlOyptYXJnaW4tbGVm
dDo2Mi4yODY3Nzk0MTQ0Mzg5OSV9LnJvdy1mbHVpZCAub2Zmc2V0NzpmaXJzdC1jaGlsZHttYXJn
aW4tbGVmdDo1OS44MjkwNTk4MjkwNTk4MiU7Km1hcmdpbi1sZWZ0OjU5LjcyMjY3Njg1MDMzNjQy
JX0ucm93LWZsdWlkIC5vZmZzZXQ2e21hcmdpbi1sZWZ0OjUzLjg0NjE1Mzg0NjE1Mzg0JTsqbWFy
Z2luLWxlZnQ6NTMuNzM5NzcwODY3NDMwNDQ0JX0ucm93LWZsdWlkIC5vZmZzZXQ2OmZpcnN0LWNo
aWxke21hcmdpbi1sZWZ0OjUxLjI4MjA1MTI4MjA1MTI4JTsqbWFyZ2luLWxlZnQ6NTEuMTc1NjY4
MzAzMzI3ODc1JX0ucm93LWZsdWlkIC5vZmZzZXQ1e21hcmdpbi1sZWZ0OjQ1LjI5OTE0NTI5OTE0
NTI5NSU7Km1hcmdpbi1sZWZ0OjQ1LjE5Mjc2MjMyMDQyMTklfS5yb3ctZmx1aWQgLm9mZnNldDU6
Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6NDIuNzM1MDQyNzM1MDQyNzMlOyptYXJnaW4tbGVmdDo0
Mi42Mjg2NTk3NTYzMTkzMyV9LnJvdy1mbHVpZCAub2Zmc2V0NHttYXJnaW4tbGVmdDozNi43NTIx
MzY3NTIxMzY3NSU7Km1hcmdpbi1sZWZ0OjM2LjY0NTc1Mzc3MzQxMzM1NCV9LnJvdy1mbHVpZCAu
b2Zmc2V0NDpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDozNC4xODgwMzQxODgwMzQxOSU7Km1hcmdp
bi1sZWZ0OjM0LjA4MTY1MTIwOTMxMDc4NSV9LnJvdy1mbHVpZCAub2Zmc2V0M3ttYXJnaW4tbGVm
dDoyOC4yMDUxMjgyMDUxMjgyMDQlOyptYXJnaW4tbGVmdDoyOC4wOTg3NDUyMjY0MDQ4JX0ucm93
LWZsdWlkIC5vZmZzZXQzOmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjI1LjY0MTAyNTY0MTAyNTY0
MiU7Km1hcmdpbi1sZWZ0OjI1LjUzNDY0MjY2MjMwMjI0JX0ucm93LWZsdWlkIC5vZmZzZXQye21h
cmdpbi1sZWZ0OjE5LjY1ODExOTY1ODExOTY2JTsqbWFyZ2luLWxlZnQ6MTkuNTUxNzM2Njc5Mzk2
MjU3JX0ucm93LWZsdWlkIC5vZmZzZXQyOmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjE3LjA5NDAx
NzA5NDAxNzA5NCU7Km1hcmdpbi1sZWZ0OjE2Ljk4NzYzNDExNTI5MzY5JX0ucm93LWZsdWlkIC5v
ZmZzZXQxe21hcmdpbi1sZWZ0OjExLjExMTExMTExMTExMTExJTsqbWFyZ2luLWxlZnQ6MTEuMDA0
NzI4MTMyMzg3NzA4JX0ucm93LWZsdWlkIC5vZmZzZXQxOmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0
OjguNTQ3MDA4NTQ3MDA4NTQ3JTsqbWFyZ2luLWxlZnQ6OC40NDA2MjU1NjgyODUxNDIlfWlucHV0
LHRleHRhcmVhLC51bmVkaXRhYmxlLWlucHV0e21hcmdpbi1sZWZ0OjB9LmNvbnRyb2xzLXJvdyBb
Y2xhc3MqPSJzcGFuIl0rW2NsYXNzKj0ic3BhbiJde21hcmdpbi1sZWZ0OjMwcHh9aW5wdXQuc3Bh
bjEyLHRleHRhcmVhLnNwYW4xMiwudW5lZGl0YWJsZS1pbnB1dC5zcGFuMTJ7d2lkdGg6MTE1NnB4
fWlucHV0LnNwYW4xMSx0ZXh0YXJlYS5zcGFuMTEsLnVuZWRpdGFibGUtaW5wdXQuc3BhbjExe3dp
ZHRoOjEwNTZweH1pbnB1dC5zcGFuMTAsdGV4dGFyZWEuc3BhbjEwLC51bmVkaXRhYmxlLWlucHV0
LnNwYW4xMHt3aWR0aDo5NTZweH1pbnB1dC5zcGFuOSx0ZXh0YXJlYS5zcGFuOSwudW5lZGl0YWJs
ZS1pbnB1dC5zcGFuOXt3aWR0aDo4NTZweH1pbnB1dC5zcGFuOCx0ZXh0YXJlYS5zcGFuOCwudW5l
ZGl0YWJsZS1pbnB1dC5zcGFuOHt3aWR0aDo3NTZweH1pbnB1dC5zcGFuNyx0ZXh0YXJlYS5zcGFu
NywudW5lZGl0YWJsZS1pbnB1dC5zcGFuN3t3aWR0aDo2NTZweH1pbnB1dC5zcGFuNix0ZXh0YXJl
YS5zcGFuNiwudW5lZGl0YWJsZS1pbnB1dC5zcGFuNnt3aWR0aDo1NTZweH1pbnB1dC5zcGFuNSx0
ZXh0YXJlYS5zcGFuNSwudW5lZGl0YWJsZS1pbnB1dC5zcGFuNXt3aWR0aDo0NTZweH1pbnB1dC5z
cGFuNCx0ZXh0YXJlYS5zcGFuNCwudW5lZGl0YWJsZS1pbnB1dC5zcGFuNHt3aWR0aDozNTZweH1p
bnB1dC5zcGFuMyx0ZXh0YXJlYS5zcGFuMywudW5lZGl0YWJsZS1pbnB1dC5zcGFuM3t3aWR0aDoy
NTZweH1pbnB1dC5zcGFuMix0ZXh0YXJlYS5zcGFuMiwudW5lZGl0YWJsZS1pbnB1dC5zcGFuMnt3
aWR0aDoxNTZweH1pbnB1dC5zcGFuMSx0ZXh0YXJlYS5zcGFuMSwudW5lZGl0YWJsZS1pbnB1dC5z
cGFuMXt3aWR0aDo1NnB4fS50aHVtYm5haWxze21hcmdpbi1sZWZ0Oi0zMHB4fS50aHVtYm5haWxz
Pmxpe21hcmdpbi1sZWZ0OjMwcHh9LnJvdy1mbHVpZCAudGh1bWJuYWlsc3ttYXJnaW4tbGVmdDow
fX1AbWVkaWEobWluLXdpZHRoOjc2OHB4KSBhbmQgKG1heC13aWR0aDo5NzlweCl7LnJvd3ttYXJn
aW4tbGVmdDotMjBweDsqem9vbToxfS5yb3c6YmVmb3JlLC5yb3c6YWZ0ZXJ7ZGlzcGxheTp0YWJs
ZTtsaW5lLWhlaWdodDowO2NvbnRlbnQ6IiJ9LnJvdzphZnRlcntjbGVhcjpib3RofVtjbGFzcyo9
InNwYW4iXXtmbG9hdDpsZWZ0O21pbi1oZWlnaHQ6MXB4O21hcmdpbi1sZWZ0OjIwcHh9LmNvbnRh
aW5lciwubmF2YmFyLXN0YXRpYy10b3AgLmNvbnRhaW5lciwubmF2YmFyLWZpeGVkLXRvcCAuY29u
dGFpbmVyLC5uYXZiYXItZml4ZWQtYm90dG9tIC5jb250YWluZXJ7d2lkdGg6NzI0cHh9LnNwYW4x
Mnt3aWR0aDo3MjRweH0uc3BhbjExe3dpZHRoOjY2MnB4fS5zcGFuMTB7d2lkdGg6NjAwcHh9LnNw
YW45e3dpZHRoOjUzOHB4fS5zcGFuOHt3aWR0aDo0NzZweH0uc3Bhbjd7d2lkdGg6NDE0cHh9LnNw
YW42e3dpZHRoOjM1MnB4fS5zcGFuNXt3aWR0aDoyOTBweH0uc3BhbjR7d2lkdGg6MjI4cHh9LnNw
YW4ze3dpZHRoOjE2NnB4fS5zcGFuMnt3aWR0aDoxMDRweH0uc3BhbjF7d2lkdGg6NDJweH0ub2Zm
c2V0MTJ7bWFyZ2luLWxlZnQ6NzY0cHh9Lm9mZnNldDExe21hcmdpbi1sZWZ0OjcwMnB4fS5vZmZz
ZXQxMHttYXJnaW4tbGVmdDo2NDBweH0ub2Zmc2V0OXttYXJnaW4tbGVmdDo1NzhweH0ub2Zmc2V0
OHttYXJnaW4tbGVmdDo1MTZweH0ub2Zmc2V0N3ttYXJnaW4tbGVmdDo0NTRweH0ub2Zmc2V0Nntt
YXJnaW4tbGVmdDozOTJweH0ub2Zmc2V0NXttYXJnaW4tbGVmdDozMzBweH0ub2Zmc2V0NHttYXJn
aW4tbGVmdDoyNjhweH0ub2Zmc2V0M3ttYXJnaW4tbGVmdDoyMDZweH0ub2Zmc2V0MnttYXJnaW4t
bGVmdDoxNDRweH0ub2Zmc2V0MXttYXJnaW4tbGVmdDo4MnB4fS5yb3ctZmx1aWR7d2lkdGg6MTAw
JTsqem9vbToxfS5yb3ctZmx1aWQ6YmVmb3JlLC5yb3ctZmx1aWQ6YWZ0ZXJ7ZGlzcGxheTp0YWJs
ZTtsaW5lLWhlaWdodDowO2NvbnRlbnQ6IiJ9LnJvdy1mbHVpZDphZnRlcntjbGVhcjpib3RofS5y
b3ctZmx1aWQgW2NsYXNzKj0ic3BhbiJde2Rpc3BsYXk6YmxvY2s7ZmxvYXQ6bGVmdDt3aWR0aDox
MDAlO21pbi1oZWlnaHQ6MzBweDttYXJnaW4tbGVmdDoyLjc2MjQzMDkzOTIyNjUxOTQlOyptYXJn
aW4tbGVmdDoyLjcwOTIzOTQ0OTg2NDgxNyU7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7
LW1vei1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94fS5yb3ctZmx1
aWQgW2NsYXNzKj0ic3BhbiJdOmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjB9LnJvdy1mbHVpZCAu
Y29udHJvbHMtcm93IFtjbGFzcyo9InNwYW4iXStbY2xhc3MqPSJzcGFuIl17bWFyZ2luLWxlZnQ6
Mi43NjI0MzA5MzkyMjY1MTk0JX0ucm93LWZsdWlkIC5zcGFuMTJ7d2lkdGg6MTAwJTsqd2lkdGg6
OTkuOTQ2ODA4NTEwNjM4MjklfS5yb3ctZmx1aWQgLnNwYW4xMXt3aWR0aDo5MS40MzY0NjQwODgz
OTc3OCU7KndpZHRoOjkxLjM4MzI3MjU5OTAzNjA4JX0ucm93LWZsdWlkIC5zcGFuMTB7d2lkdGg6
ODIuODcyOTI4MTc2Nzk1NTglOyp3aWR0aDo4Mi44MTk3MzY2ODc0MzM4NyV9LnJvdy1mbHVpZCAu
c3Bhbjl7d2lkdGg6NzQuMzA5MzkyMjY1MTkzMzclOyp3aWR0aDo3NC4yNTYyMDA3NzU4MzE2NiV9
LnJvdy1mbHVpZCAuc3Bhbjh7d2lkdGg6NjUuNzQ1ODU2MzUzNTkxMTclOyp3aWR0aDo2NS42OTI2
NjQ4NjQyMjk0NiV9LnJvdy1mbHVpZCAuc3Bhbjd7d2lkdGg6NTcuMTgyMzIwNDQxOTg4OTUlOyp3
aWR0aDo1Ny4xMjkxMjg5NTI2MjcyNSV9LnJvdy1mbHVpZCAuc3BhbjZ7d2lkdGg6NDguNjE4Nzg0
NTMwMzg2NzQlOyp3aWR0aDo0OC41NjU1OTMwNDEwMjUwNCV9LnJvdy1mbHVpZCAuc3BhbjV7d2lk
dGg6NDAuMDU1MjQ4NjE4Nzg0NTMlOyp3aWR0aDo0MC4wMDIwNTcxMjk0MjI4MyV9LnJvdy1mbHVp
ZCAuc3BhbjR7d2lkdGg6MzEuNDkxNzEyNzA3MTgyMzIzJTsqd2lkdGg6MzEuNDM4NTIxMjE3ODIw
NjIlfS5yb3ctZmx1aWQgLnNwYW4ze3dpZHRoOjIyLjkyODE3Njc5NTU4MDExJTsqd2lkdGg6MjIu
ODc0OTg1MzA2MjE4NDElfS5yb3ctZmx1aWQgLnNwYW4ye3dpZHRoOjE0LjM2NDY0MDg4Mzk3Nzkl
Oyp3aWR0aDoxNC4zMTE0NDkzOTQ2MTYxOTklfS5yb3ctZmx1aWQgLnNwYW4xe3dpZHRoOjUuODAx
MTA0OTcyMzc1NjkxJTsqd2lkdGg6NS43NDc5MTM0ODMwMTM5ODglfS5yb3ctZmx1aWQgLm9mZnNl
dDEye21hcmdpbi1sZWZ0OjEwNS41MjQ4NjE4Nzg0NTMwNCU7Km1hcmdpbi1sZWZ0OjEwNS40MTg0
Nzg4OTk3Mjk2MiV9LnJvdy1mbHVpZCAub2Zmc2V0MTI6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6
MTAyLjc2MjQzMDkzOTIyNjUyJTsqbWFyZ2luLWxlZnQ6MTAyLjY1NjA0Nzk2MDUwMzElfS5yb3ct
Zmx1aWQgLm9mZnNldDExe21hcmdpbi1sZWZ0Ojk2Ljk2MTMyNTk2Njg1MDgyJTsqbWFyZ2luLWxl
ZnQ6OTYuODU0OTQyOTg4MTI3NCV9LnJvdy1mbHVpZCAub2Zmc2V0MTE6Zmlyc3QtY2hpbGR7bWFy
Z2luLWxlZnQ6OTQuMTk4ODk1MDI3NjI0MyU7Km1hcmdpbi1sZWZ0Ojk0LjA5MjUxMjA0ODkwMDg5
JX0ucm93LWZsdWlkIC5vZmZzZXQxMHttYXJnaW4tbGVmdDo4OC4zOTc3OTAwNTUyNDg2MiU7Km1h
cmdpbi1sZWZ0Ojg4LjI5MTQwNzA3NjUyNTIlfS5yb3ctZmx1aWQgLm9mZnNldDEwOmZpcnN0LWNo
aWxke21hcmdpbi1sZWZ0Ojg1LjYzNTM1OTExNjAyMjElOyptYXJnaW4tbGVmdDo4NS41Mjg5NzYx
MzcyOTg2OCV9LnJvdy1mbHVpZCAub2Zmc2V0OXttYXJnaW4tbGVmdDo3OS44MzQyNTQxNDM2NDY0
JTsqbWFyZ2luLWxlZnQ6NzkuNzI3ODcxMTY0OTIyOTklfS5yb3ctZmx1aWQgLm9mZnNldDk6Zmly
c3QtY2hpbGR7bWFyZ2luLWxlZnQ6NzcuMDcxODIzMjA0NDE5ODklOyptYXJnaW4tbGVmdDo3Ni45
NjU0NDAyMjU2OTY0NyV9LnJvdy1mbHVpZCAub2Zmc2V0OHttYXJnaW4tbGVmdDo3MS4yNzA3MTgy
MzIwNDQyJTsqbWFyZ2luLWxlZnQ6NzEuMTY0MzM1MjUzMzIwNzklfS5yb3ctZmx1aWQgLm9mZnNl
dDg6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6NjguNTA4Mjg3MjkyODE3NjglOyptYXJnaW4tbGVm
dDo2OC40MDE5MDQzMTQwOTQyNyV9LnJvdy1mbHVpZCAub2Zmc2V0N3ttYXJnaW4tbGVmdDo2Mi43
MDcxODIzMjA0NDE5OSU7Km1hcmdpbi1sZWZ0OjYyLjYwMDc5OTM0MTcxODU4NCV9LnJvdy1mbHVp
ZCAub2Zmc2V0NzpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDo1OS45NDQ3NTEzODEyMTU0NyU7Km1h
cmdpbi1sZWZ0OjU5LjgzODM2ODQwMjQ5MjA2NSV9LnJvdy1mbHVpZCAub2Zmc2V0NnttYXJnaW4t
bGVmdDo1NC4xNDM2NDY0MDg4Mzk3OCU7Km1hcmdpbi1sZWZ0OjU0LjAzNzI2MzQzMDExNjM3NiV9
LnJvdy1mbHVpZCAub2Zmc2V0NjpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDo1MS4zODEyMTU0Njk2
MTMyNiU7Km1hcmdpbi1sZWZ0OjUxLjI3NDgzMjQ5MDg4OTg2JX0ucm93LWZsdWlkIC5vZmZzZXQ1
e21hcmdpbi1sZWZ0OjQ1LjU4MDExMDQ5NzIzNzU3JTsqbWFyZ2luLWxlZnQ6NDUuNDczNzI3NTE4
NTE0MTclfS5yb3ctZmx1aWQgLm9mZnNldDU6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6NDIuODE3
Njc5NTU4MDExMDUlOyptYXJnaW4tbGVmdDo0Mi43MTEyOTY1NzkyODc2NSV9LnJvdy1mbHVpZCAu
b2Zmc2V0NHttYXJnaW4tbGVmdDozNy4wMTY1NzQ1ODU2MzUzNiU7Km1hcmdpbi1sZWZ0OjM2Ljkx
MDE5MTYwNjkxMTk2JX0ucm93LWZsdWlkIC5vZmZzZXQ0OmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0
OjM0LjI1NDE0MzY0NjQwODg0JTsqbWFyZ2luLWxlZnQ6MzQuMTQ3NzYwNjY3Njg1NDQlfS5yb3ct
Zmx1aWQgLm9mZnNldDN7bWFyZ2luLWxlZnQ6MjguNDUzMDM4Njc0MDMzMTUlOyptYXJnaW4tbGVm
dDoyOC4zNDY2NTU2OTUzMDk3NDYlfS5yb3ctZmx1aWQgLm9mZnNldDM6Zmlyc3QtY2hpbGR7bWFy
Z2luLWxlZnQ6MjUuNjkwNjA3NzM0ODA2NjMlOyptYXJnaW4tbGVmdDoyNS41ODQyMjQ3NTYwODMy
MjclfS5yb3ctZmx1aWQgLm9mZnNldDJ7bWFyZ2luLWxlZnQ6MTkuODg5NTAyNzYyNDMwOTQlOypt
YXJnaW4tbGVmdDoxOS43ODMxMTk3ODM3MDc1MzclfS5yb3ctZmx1aWQgLm9mZnNldDI6Zmlyc3Qt
Y2hpbGR7bWFyZ2luLWxlZnQ6MTcuMTI3MDcxODIzMjA0NDIlOyptYXJnaW4tbGVmdDoxNy4wMjA2
ODg4NDQ0ODEwMiV9LnJvdy1mbHVpZCAub2Zmc2V0MXttYXJnaW4tbGVmdDoxMS4zMjU5NjY4NTA4
Mjg3MyU7Km1hcmdpbi1sZWZ0OjExLjIxOTU4Mzg3MjEwNTMyNSV9LnJvdy1mbHVpZCAub2Zmc2V0
MTpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDo4LjU2MzUzNTkxMTYwMjIxJTsqbWFyZ2luLWxlZnQ6
OC40NTcxNTI5MzI4Nzg4MDYlfWlucHV0LHRleHRhcmVhLC51bmVkaXRhYmxlLWlucHV0e21hcmdp
bi1sZWZ0OjB9LmNvbnRyb2xzLXJvdyBbY2xhc3MqPSJzcGFuIl0rW2NsYXNzKj0ic3BhbiJde21h
cmdpbi1sZWZ0OjIwcHh9aW5wdXQuc3BhbjEyLHRleHRhcmVhLnNwYW4xMiwudW5lZGl0YWJsZS1p
bnB1dC5zcGFuMTJ7d2lkdGg6NzEwcHh9aW5wdXQuc3BhbjExLHRleHRhcmVhLnNwYW4xMSwudW5l
ZGl0YWJsZS1pbnB1dC5zcGFuMTF7d2lkdGg6NjQ4cHh9aW5wdXQuc3BhbjEwLHRleHRhcmVhLnNw
YW4xMCwudW5lZGl0YWJsZS1pbnB1dC5zcGFuMTB7d2lkdGg6NTg2cHh9aW5wdXQuc3BhbjksdGV4
dGFyZWEuc3BhbjksLnVuZWRpdGFibGUtaW5wdXQuc3Bhbjl7d2lkdGg6NTI0cHh9aW5wdXQuc3Bh
bjgsdGV4dGFyZWEuc3BhbjgsLnVuZWRpdGFibGUtaW5wdXQuc3Bhbjh7d2lkdGg6NDYycHh9aW5w
dXQuc3BhbjcsdGV4dGFyZWEuc3BhbjcsLnVuZWRpdGFibGUtaW5wdXQuc3Bhbjd7d2lkdGg6NDAw
cHh9aW5wdXQuc3BhbjYsdGV4dGFyZWEuc3BhbjYsLnVuZWRpdGFibGUtaW5wdXQuc3BhbjZ7d2lk
dGg6MzM4cHh9aW5wdXQuc3BhbjUsdGV4dGFyZWEuc3BhbjUsLnVuZWRpdGFibGUtaW5wdXQuc3Bh
bjV7d2lkdGg6Mjc2cHh9aW5wdXQuc3BhbjQsdGV4dGFyZWEuc3BhbjQsLnVuZWRpdGFibGUtaW5w
dXQuc3BhbjR7d2lkdGg6MjE0cHh9aW5wdXQuc3BhbjMsdGV4dGFyZWEuc3BhbjMsLnVuZWRpdGFi
bGUtaW5wdXQuc3BhbjN7d2lkdGg6MTUycHh9aW5wdXQuc3BhbjIsdGV4dGFyZWEuc3BhbjIsLnVu
ZWRpdGFibGUtaW5wdXQuc3BhbjJ7d2lkdGg6OTBweH1pbnB1dC5zcGFuMSx0ZXh0YXJlYS5zcGFu
MSwudW5lZGl0YWJsZS1pbnB1dC5zcGFuMXt3aWR0aDoyOHB4fX1AbWVkaWEobWF4LXdpZHRoOjc2
N3B4KXtib2R5e3BhZGRpbmctcmlnaHQ6MjBweDtwYWRkaW5nLWxlZnQ6MjBweH0ubmF2YmFyLWZp
eGVkLXRvcCwubmF2YmFyLWZpeGVkLWJvdHRvbSwubmF2YmFyLXN0YXRpYy10b3B7bWFyZ2luLXJp
Z2h0Oi0yMHB4O21hcmdpbi1sZWZ0Oi0yMHB4fS5jb250YWluZXItZmx1aWR7cGFkZGluZzowfS5k
bC1ob3Jpem9udGFsIGR0e2Zsb2F0Om5vbmU7d2lkdGg6YXV0bztjbGVhcjpub25lO3RleHQtYWxp
Z246bGVmdH0uZGwtaG9yaXpvbnRhbCBkZHttYXJnaW4tbGVmdDowfS5jb250YWluZXJ7d2lkdGg6
YXV0b30ucm93LWZsdWlke3dpZHRoOjEwMCV9LnJvdywudGh1bWJuYWlsc3ttYXJnaW4tbGVmdDow
fS50aHVtYm5haWxzPmxpe2Zsb2F0Om5vbmU7bWFyZ2luLWxlZnQ6MH1bY2xhc3MqPSJzcGFuIl0s
LnVuZWRpdGFibGUtaW5wdXRbY2xhc3MqPSJzcGFuIl0sLnJvdy1mbHVpZCBbY2xhc3MqPSJzcGFu
Il17ZGlzcGxheTpibG9jaztmbG9hdDpub25lO3dpZHRoOjEwMCU7bWFyZ2luLWxlZnQ6MDstd2Vi
a2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDstbW96LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gt
c2l6aW5nOmJvcmRlci1ib3h9LnNwYW4xMiwucm93LWZsdWlkIC5zcGFuMTJ7d2lkdGg6MTAwJTst
d2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDstbW96LWJveC1zaXppbmc6Ym9yZGVyLWJveDti
b3gtc2l6aW5nOmJvcmRlci1ib3h9LnJvdy1mbHVpZCBbY2xhc3MqPSJvZmZzZXQiXTpmaXJzdC1j
aGlsZHttYXJnaW4tbGVmdDowfS5pbnB1dC1sYXJnZSwuaW5wdXQteGxhcmdlLC5pbnB1dC14eGxh
cmdlLGlucHV0W2NsYXNzKj0ic3BhbiJdLHNlbGVjdFtjbGFzcyo9InNwYW4iXSx0ZXh0YXJlYVtj
bGFzcyo9InNwYW4iXSwudW5lZGl0YWJsZS1pbnB1dHtkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCU7
bWluLWhlaWdodDozMHB4Oy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94Oy1tb3otYm94LXNp
emluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveH0uaW5wdXQtcHJlcGVuZCBpbnB1
dCwuaW5wdXQtYXBwZW5kIGlucHV0LC5pbnB1dC1wcmVwZW5kIGlucHV0W2NsYXNzKj0ic3BhbiJd
LC5pbnB1dC1hcHBlbmQgaW5wdXRbY2xhc3MqPSJzcGFuIl17ZGlzcGxheTppbmxpbmUtYmxvY2s7
d2lkdGg6YXV0b30uY29udHJvbHMtcm93IFtjbGFzcyo9InNwYW4iXStbY2xhc3MqPSJzcGFuIl17
bWFyZ2luLWxlZnQ6MH0ubW9kYWx7cG9zaXRpb246Zml4ZWQ7dG9wOjIwcHg7cmlnaHQ6MjBweDts
ZWZ0OjIwcHg7d2lkdGg6YXV0bzttYXJnaW46MH0ubW9kYWwuZmFkZXt0b3A6LTEwMHB4fS5tb2Rh
bC5mYWRlLmlue3RvcDoyMHB4fX1AbWVkaWEobWF4LXdpZHRoOjQ4MHB4KXsubmF2LWNvbGxhcHNl
ey13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsMCwwKX0ucGFnZS1oZWFkZXIgaDEgc21h
bGx7ZGlzcGxheTpibG9jaztsaW5lLWhlaWdodDoyMHB4fWlucHV0W3R5cGU9ImNoZWNrYm94Il0s
aW5wdXRbdHlwZT0icmFkaW8iXXtib3JkZXI6MXB4IHNvbGlkICNjY2N9LmZvcm0taG9yaXpvbnRh
bCAuY29udHJvbC1sYWJlbHtmbG9hdDpub25lO3dpZHRoOmF1dG87cGFkZGluZy10b3A6MDt0ZXh0
LWFsaWduOmxlZnR9LmZvcm0taG9yaXpvbnRhbCAuY29udHJvbHN7bWFyZ2luLWxlZnQ6MH0uZm9y
bS1ob3Jpem9udGFsIC5jb250cm9sLWxpc3R7cGFkZGluZy10b3A6MH0uZm9ybS1ob3Jpem9udGFs
IC5mb3JtLWFjdGlvbnN7cGFkZGluZy1yaWdodDoxMHB4O3BhZGRpbmctbGVmdDoxMHB4fS5tZWRp
YSAucHVsbC1sZWZ0LC5tZWRpYSAucHVsbC1yaWdodHtkaXNwbGF5OmJsb2NrO2Zsb2F0Om5vbmU7
bWFyZ2luLWJvdHRvbToxMHB4fS5tZWRpYS1vYmplY3R7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLWxl
ZnQ6MH0ubW9kYWx7dG9wOjEwcHg7cmlnaHQ6MTBweDtsZWZ0OjEwcHh9Lm1vZGFsLWhlYWRlciAu
Y2xvc2V7cGFkZGluZzoxMHB4O21hcmdpbjotMTBweH0uY2Fyb3VzZWwtY2FwdGlvbntwb3NpdGlv
bjpzdGF0aWN9fUBtZWRpYShtYXgtd2lkdGg6OTc5cHgpe2JvZHl7cGFkZGluZy10b3A6MH0ubmF2
YmFyLWZpeGVkLXRvcCwubmF2YmFyLWZpeGVkLWJvdHRvbXtwb3NpdGlvbjpzdGF0aWN9Lm5hdmJh
ci1maXhlZC10b3B7bWFyZ2luLWJvdHRvbToyMHB4fS5uYXZiYXItZml4ZWQtYm90dG9te21hcmdp
bi10b3A6MjBweH0ubmF2YmFyLWZpeGVkLXRvcCAubmF2YmFyLWlubmVyLC5uYXZiYXItZml4ZWQt
Ym90dG9tIC5uYXZiYXItaW5uZXJ7cGFkZGluZzo1cHh9Lm5hdmJhciAuY29udGFpbmVye3dpZHRo
OmF1dG87cGFkZGluZzowfS5uYXZiYXIgLmJyYW5ke3BhZGRpbmctcmlnaHQ6MTBweDtwYWRkaW5n
LWxlZnQ6MTBweDttYXJnaW46MCAwIDAgLTVweH0ubmF2LWNvbGxhcHNle2NsZWFyOmJvdGh9Lm5h
di1jb2xsYXBzZSAubmF2e2Zsb2F0Om5vbmU7bWFyZ2luOjAgMCAxMHB4fS5uYXYtY29sbGFwc2Ug
Lm5hdj5saXtmbG9hdDpub25lfS5uYXYtY29sbGFwc2UgLm5hdj5saT5he21hcmdpbi1ib3R0b206
MnB4fS5uYXYtY29sbGFwc2UgLm5hdj4uZGl2aWRlci12ZXJ0aWNhbHtkaXNwbGF5Om5vbmV9Lm5h
di1jb2xsYXBzZSAubmF2IC5uYXYtaGVhZGVye2NvbG9yOiM3Nzc7dGV4dC1zaGFkb3c6bm9uZX0u
bmF2LWNvbGxhcHNlIC5uYXY+bGk+YSwubmF2LWNvbGxhcHNlIC5kcm9wZG93bi1tZW51IGF7cGFk
ZGluZzo5cHggMTVweDtmb250LXdlaWdodDpib2xkO2NvbG9yOiM3Nzc7LXdlYmtpdC1ib3JkZXIt
cmFkaXVzOjNweDstbW96LWJvcmRlci1yYWRpdXM6M3B4O2JvcmRlci1yYWRpdXM6M3B4fS5uYXYt
Y29sbGFwc2UgLmJ0bntwYWRkaW5nOjRweCAxMHB4IDRweDtmb250LXdlaWdodDpub3JtYWw7LXdl
YmtpdC1ib3JkZXItcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4O2JvcmRlci1yYWRp
dXM6NHB4fS5uYXYtY29sbGFwc2UgLmRyb3Bkb3duLW1lbnUgbGkrbGkgYXttYXJnaW4tYm90dG9t
OjJweH0ubmF2LWNvbGxhcHNlIC5uYXY+bGk+YTpob3ZlciwubmF2LWNvbGxhcHNlIC5kcm9wZG93
bi1tZW51IGE6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZjJmMmYyfS5uYXZiYXItaW52ZXJzZSAu
bmF2LWNvbGxhcHNlIC5uYXY+bGk+YSwubmF2YmFyLWludmVyc2UgLm5hdi1jb2xsYXBzZSAuZHJv
cGRvd24tbWVudSBhe2NvbG9yOiM5OTl9Lm5hdmJhci1pbnZlcnNlIC5uYXYtY29sbGFwc2UgLm5h
dj5saT5hOmhvdmVyLC5uYXZiYXItaW52ZXJzZSAubmF2LWNvbGxhcHNlIC5kcm9wZG93bi1tZW51
IGE6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMTExfS5uYXYtY29sbGFwc2UuaW4gLmJ0bi1ncm91
cHtwYWRkaW5nOjA7bWFyZ2luLXRvcDo1cHh9Lm5hdi1jb2xsYXBzZSAuZHJvcGRvd24tbWVudXtw
b3NpdGlvbjpzdGF0aWM7dG9wOmF1dG87bGVmdDphdXRvO2Rpc3BsYXk6bm9uZTtmbG9hdDpub25l
O21heC13aWR0aDpub25lO3BhZGRpbmc6MDttYXJnaW46MCAxNXB4O2JhY2tncm91bmQtY29sb3I6
dHJhbnNwYXJlbnQ7Ym9yZGVyOjA7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjA7LW1vei1ib3JkZXIt
cmFkaXVzOjA7Ym9yZGVyLXJhZGl1czowOy13ZWJraXQtYm94LXNoYWRvdzpub25lOy1tb3otYm94
LXNoYWRvdzpub25lO2JveC1zaGFkb3c6bm9uZX0ubmF2LWNvbGxhcHNlIC5vcGVuPi5kcm9wZG93
bi1tZW51e2Rpc3BsYXk6YmxvY2t9Lm5hdi1jb2xsYXBzZSAuZHJvcGRvd24tbWVudTpiZWZvcmUs
Lm5hdi1jb2xsYXBzZSAuZHJvcGRvd24tbWVudTphZnRlcntkaXNwbGF5Om5vbmV9Lm5hdi1jb2xs
YXBzZSAuZHJvcGRvd24tbWVudSAuZGl2aWRlcntkaXNwbGF5Om5vbmV9Lm5hdi1jb2xsYXBzZSAu
bmF2PmxpPi5kcm9wZG93bi1tZW51OmJlZm9yZSwubmF2LWNvbGxhcHNlIC5uYXY+bGk+LmRyb3Bk
b3duLW1lbnU6YWZ0ZXJ7ZGlzcGxheTpub25lfS5uYXYtY29sbGFwc2UgLm5hdmJhci1mb3JtLC5u
YXYtY29sbGFwc2UgLm5hdmJhci1zZWFyY2h7ZmxvYXQ6bm9uZTtwYWRkaW5nOjEwcHggMTVweDtt
YXJnaW46MTBweCAwO2JvcmRlci10b3A6MXB4IHNvbGlkICNmMmYyZjI7Ym9yZGVyLWJvdHRvbTox
cHggc29saWQgI2YyZjJmMjstd2Via2l0LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMCByZ2JhKDI1
NSwyNTUsMjU1LDAuMSksMCAxcHggMCByZ2JhKDI1NSwyNTUsMjU1LDAuMSk7LW1vei1ib3gtc2hh
ZG93Omluc2V0IDAgMXB4IDAgcmdiYSgyNTUsMjU1LDI1NSwwLjEpLDAgMXB4IDAgcmdiYSgyNTUs
MjU1LDI1NSwwLjEpO2JveC1zaGFkb3c6aW5zZXQgMCAxcHggMCByZ2JhKDI1NSwyNTUsMjU1LDAu
MSksMCAxcHggMCByZ2JhKDI1NSwyNTUsMjU1LDAuMSl9Lm5hdmJhci1pbnZlcnNlIC5uYXYtY29s
bGFwc2UgLm5hdmJhci1mb3JtLC5uYXZiYXItaW52ZXJzZSAubmF2LWNvbGxhcHNlIC5uYXZiYXIt
c2VhcmNoe2JvcmRlci10b3AtY29sb3I6IzExMTtib3JkZXItYm90dG9tLWNvbG9yOiMxMTF9Lm5h
dmJhciAubmF2LWNvbGxhcHNlIC5uYXYucHVsbC1yaWdodHtmbG9hdDpub25lO21hcmdpbi1sZWZ0
OjB9Lm5hdi1jb2xsYXBzZSwubmF2LWNvbGxhcHNlLmNvbGxhcHNle2hlaWdodDowO292ZXJmbG93
OmhpZGRlbn0ubmF2YmFyIC5idG4tbmF2YmFye2Rpc3BsYXk6YmxvY2t9Lm5hdmJhci1zdGF0aWMg
Lm5hdmJhci1pbm5lcntwYWRkaW5nLXJpZ2h0OjEwcHg7cGFkZGluZy1sZWZ0OjEwcHh9fUBtZWRp
YShtaW4td2lkdGg6OTgwcHgpey5uYXYtY29sbGFwc2UuY29sbGFwc2V7aGVpZ2h0OmF1dG8haW1w
b3J0YW50O292ZXJmbG93OnZpc2libGUhaW1wb3J0YW50fX0KSW5kZXg6IFBlcmZvcm1hbmNlVGVz
dHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9ib290c3Ry
YXAvY3NzL2Jvb3RzdHJhcC5jc3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9Eb1lv
dUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2Jvb3RzdHJhcC9jc3Mv
Ym9vdHN0cmFwLmNzcwkocmV2aXNpb24gMCkKKysrIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVu
QmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9ib290c3RyYXAvY3NzL2Jvb3Rz
dHJhcC5jc3MJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNDcwIEBACisvKiEKKyAqIEJvb3Rz
dHJhcCB2MS40LjAKKyAqCisgKiBDb3B5cmlnaHQgMjAxMSBUd2l0dGVyLCBJbmMKKyAqIExpY2Vu
c2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSB2Mi4wCisgKiBodHRwOi8vd3d3LmFwYWNoZS5v
cmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBEZXNpZ25lZCBhbmQgYnVpbHQgd2l0aCBh
bGwgdGhlIGxvdmUgaW4gdGhlIHdvcmxkIEB0d2l0dGVyIGJ5IEBtZG8gYW5kIEBmYXQuCisgKiBE
YXRlOiBTdW4gRGVjIDI1IDIwOjE4OjMxIFBTVCAyMDExCisgKi8KKy8qIFJlc2V0Lmxlc3MKKyAq
IFByb3BzIHRvIEVyaWMgTWV5ZXIgKG1leWVyd2ViLmNvbSkgZm9yIGhpcyBDU1MgcmVzZXQgZmls
ZS4gV2UncmUgdXNpbmcgYW4gYWRhcHRlZCB2ZXJzaW9uIGhlcmUgICAgdGhhdCBjdXRzIG91dCBz
b21lIG9mIHRoZSByZXNldCBIVE1MIGVsZW1lbnRzIHdlIHdpbGwgbmV2ZXIgbmVlZCBoZXJlIChp
LmUuLCBkZm4sIHNhbXAsIGV0YykuCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCitodG1sLCBib2R5
IHsKKyAgbWFyZ2luOiAwOworICBwYWRkaW5nOiAwOworfQoraDEsCitoMiwKK2gzLAoraDQsCito
NSwKK2g2LAorcCwKK2Jsb2NrcXVvdGUsCitwcmUsCithLAorYWJiciwKK2Fjcm9ueW0sCithZGRy
ZXNzLAorY2l0ZSwKK2NvZGUsCitkZWwsCitkZm4sCitlbSwKK2ltZywKK3EsCitzLAorc2FtcCwK
K3NtYWxsLAorc3RyaWtlLAorc3Ryb25nLAorc3ViLAorc3VwLAordHQsCit2YXIsCitkZCwKK2Rs
LAorZHQsCitsaSwKK29sLAordWwsCitmaWVsZHNldCwKK2Zvcm0sCitsYWJlbCwKK2xlZ2VuZCwK
K2J1dHRvbiwKK3RhYmxlLAorY2FwdGlvbiwKK3Rib2R5LAordGZvb3QsCit0aGVhZCwKK3RyLAor
dGgsCit0ZCB7CisgIG1hcmdpbjogMDsKKyAgcGFkZGluZzogMDsKKyAgYm9yZGVyOiAwOworICBm
b250LXdlaWdodDogbm9ybWFsOworICBmb250LXN0eWxlOiBub3JtYWw7CisgIGZvbnQtc2l6ZTog
MTAwJTsKKyAgbGluZS1oZWlnaHQ6IDE7CisgIGZvbnQtZmFtaWx5OiBpbmhlcml0OworfQordGFi
bGUgeworICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOworICBib3JkZXItc3BhY2luZzogMDsK
K30KK29sLCB1bCB7CisgIGxpc3Qtc3R5bGU6IG5vbmU7Cit9CitxOmJlZm9yZSwKK3E6YWZ0ZXIs
CitibG9ja3F1b3RlOmJlZm9yZSwKK2Jsb2NrcXVvdGU6YWZ0ZXIgeworICBjb250ZW50OiAiIjsK
K30KK2h0bWwgeworICBvdmVyZmxvdy15OiBzY3JvbGw7CisgIGZvbnQtc2l6ZTogMTAwJTsKKyAg
LXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOworICAtbXMtdGV4dC1zaXplLWFkanVzdDog
MTAwJTsKK30KK2E6Zm9jdXMgeworICBvdXRsaW5lOiB0aGluIGRvdHRlZDsKK30KK2E6aG92ZXIs
IGE6YWN0aXZlIHsKKyAgb3V0bGluZTogMDsKK30KK2FydGljbGUsCithc2lkZSwKK2RldGFpbHMs
CitmaWdjYXB0aW9uLAorZmlndXJlLAorZm9vdGVyLAoraGVhZGVyLAoraGdyb3VwLAorbmF2LAor
c2VjdGlvbiB7CisgIGRpc3BsYXk6IGJsb2NrOworfQorYXVkaW8sIGNhbnZhcywgdmlkZW8gewor
ICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CisgICpkaXNwbGF5OiBpbmxpbmU7CisgICp6b29tOiAx
OworfQorYXVkaW86bm90KFtjb250cm9sc10pIHsKKyAgZGlzcGxheTogbm9uZTsKK30KK3N1Yiwg
c3VwIHsKKyAgZm9udC1zaXplOiA3NSU7CisgIGxpbmUtaGVpZ2h0OiAwOworICBwb3NpdGlvbjog
cmVsYXRpdmU7CisgIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKK30KK3N1cCB7CisgIHRvcDog
LTAuNWVtOworfQorc3ViIHsKKyAgYm90dG9tOiAtMC4yNWVtOworfQoraW1nIHsKKyAgYm9yZGVy
OiAwOworICAtbXMtaW50ZXJwb2xhdGlvbi1tb2RlOiBiaWN1YmljOworfQorYnV0dG9uLAoraW5w
dXQsCitzZWxlY3QsCit0ZXh0YXJlYSB7CisgIGZvbnQtc2l6ZTogMTAwJTsKKyAgbWFyZ2luOiAw
OworICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7CisgICp2ZXJ0aWNhbC1hbGlnbjogbWlkZGxl
OworfQorYnV0dG9uLCBpbnB1dCB7CisgIGxpbmUtaGVpZ2h0OiBub3JtYWw7CisgICpvdmVyZmxv
dzogdmlzaWJsZTsKK30KK2J1dHRvbjo6LW1vei1mb2N1cy1pbm5lciwgaW5wdXQ6Oi1tb3otZm9j
dXMtaW5uZXIgeworICBib3JkZXI6IDA7CisgIHBhZGRpbmc6IDA7Cit9CitidXR0b24sCitpbnB1
dFt0eXBlPSJidXR0b24iXSwKK2lucHV0W3R5cGU9InJlc2V0Il0sCitpbnB1dFt0eXBlPSJzdWJt
aXQiXSB7CisgIGN1cnNvcjogcG9pbnRlcjsKKyAgLXdlYmtpdC1hcHBlYXJhbmNlOiBidXR0b247
Cit9CitpbnB1dFt0eXBlPSJzZWFyY2giXSB7CisgIC13ZWJraXQtYXBwZWFyYW5jZTogdGV4dGZp
ZWxkOworICAtd2Via2l0LWJveC1zaXppbmc6IGNvbnRlbnQtYm94OworICAtbW96LWJveC1zaXpp
bmc6IGNvbnRlbnQtYm94OworICBib3gtc2l6aW5nOiBjb250ZW50LWJveDsKK30KK2lucHV0W3R5
cGU9InNlYXJjaCJdOjotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uIHsKKyAgLXdlYmtpdC1hcHBl
YXJhbmNlOiBub25lOworfQordGV4dGFyZWEgeworICBvdmVyZmxvdzogYXV0bzsKKyAgdmVydGlj
YWwtYWxpZ246IHRvcDsKK30KKy8qIFZhcmlhYmxlcy5sZXNzCisgKiBWYXJpYWJsZXMgdG8gY3Vz
dG9taXplIHRoZSBsb29rIGFuZCBmZWVsIG9mIEJvb3RzdHJhcAorICogLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIE1peGlucy5sZXNz
CisgKiBTbmlwcGV0cyBvZiByZXVzYWJsZSBDU1MgdG8gZGV2ZWxvcCBmYXN0ZXIgYW5kIGtlZXAg
Y29kZSByZWFkYWJsZQorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qCisgKiBTY2FmZm9sZGluZworICogQmFz
aWMgYW5kIGdsb2JhbCBzdHlsZXMgZm9yIGdlbmVyYXRpbmcgYSBncmlkIHN5c3RlbSwgc3RydWN0
dXJhbCBsYXlvdXQsIGFuZCBwYWdlIHRlbXBsYXRlcworICogLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSAqLworYm9keSB7CisgIGJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7Cisg
IG1hcmdpbjogMDsKKyAgZm9udC1mYW1pbHk6ICJIZWx2ZXRpY2EgTmV1ZSIsIEhlbHZldGljYSwg
QXJpYWwsIHNhbnMtc2VyaWY7CisgIGZvbnQtc2l6ZTogMTNweDsKKyAgZm9udC13ZWlnaHQ6IG5v
cm1hbDsKKyAgbGluZS1oZWlnaHQ6IDE4cHg7CisgIGNvbG9yOiAjNDA0MDQwOworfQorLmNvbnRh
aW5lciB7CisgIHdpZHRoOiA5NDBweDsKKyAgbWFyZ2luLWxlZnQ6IGF1dG87CisgIG1hcmdpbi1y
aWdodDogYXV0bzsKKyAgem9vbTogMTsKK30KKy5jb250YWluZXI6YmVmb3JlLCAuY29udGFpbmVy
OmFmdGVyIHsKKyAgZGlzcGxheTogdGFibGU7CisgIGNvbnRlbnQ6ICIiOworICB6b29tOiAxOwor
fQorLmNvbnRhaW5lcjphZnRlciB7CisgIGNsZWFyOiBib3RoOworfQorLmNvbnRhaW5lci1mbHVp
ZCB7CisgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgbWluLXdpZHRoOiA5NDBweDsKKyAgcGFkZGlu
Zy1sZWZ0OiAyMHB4OworICBwYWRkaW5nLXJpZ2h0OiAyMHB4OworICB6b29tOiAxOworfQorLmNv
bnRhaW5lci1mbHVpZDpiZWZvcmUsIC5jb250YWluZXItZmx1aWQ6YWZ0ZXIgeworICBkaXNwbGF5
OiB0YWJsZTsKKyAgY29udGVudDogIiI7CisgIHpvb206IDE7Cit9CisuY29udGFpbmVyLWZsdWlk
OmFmdGVyIHsKKyAgY2xlYXI6IGJvdGg7Cit9CisuY29udGFpbmVyLWZsdWlkID4gLnNpZGViYXIg
eworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIHRvcDogMDsKKyAgbGVmdDogMjBweDsKKyAgd2lk
dGg6IDIyMHB4OworfQorLmNvbnRhaW5lci1mbHVpZCA+IC5jb250ZW50IHsKKyAgbWFyZ2luLWxl
ZnQ6IDI0MHB4OworfQorYSB7CisgIGNvbG9yOiAjMDA2OWQ2OworICB0ZXh0LWRlY29yYXRpb246
IG5vbmU7CisgIGxpbmUtaGVpZ2h0OiBpbmhlcml0OworICBmb250LXdlaWdodDogaW5oZXJpdDsK
K30KK2E6aG92ZXIgeworICBjb2xvcjogIzAwNDM4YTsKKyAgdGV4dC1kZWNvcmF0aW9uOiB1bmRl
cmxpbmU7Cit9CisucHVsbC1yaWdodCB7CisgIGZsb2F0OiByaWdodDsKK30KKy5wdWxsLWxlZnQg
eworICBmbG9hdDogbGVmdDsKK30KKy5oaWRlIHsKKyAgZGlzcGxheTogbm9uZTsKK30KKy5zaG93
IHsKKyAgZGlzcGxheTogYmxvY2s7Cit9Cisucm93IHsKKyAgem9vbTogMTsKKyAgbWFyZ2luLWxl
ZnQ6IC0yMHB4OworfQorLnJvdzpiZWZvcmUsIC5yb3c6YWZ0ZXIgeworICBkaXNwbGF5OiB0YWJs
ZTsKKyAgY29udGVudDogIiI7CisgIHpvb206IDE7Cit9Cisucm93OmFmdGVyIHsKKyAgY2xlYXI6
IGJvdGg7Cit9Cisucm93ID4gW2NsYXNzKj0ic3BhbiJdIHsKKyAgZGlzcGxheTogaW5saW5lOwor
ICBmbG9hdDogbGVmdDsKKyAgbWFyZ2luLWxlZnQ6IDIwcHg7Cit9Cisuc3BhbjEgeworICB3aWR0
aDogNDBweDsKK30KKy5zcGFuMiB7CisgIHdpZHRoOiAxMDBweDsKK30KKy5zcGFuMyB7CisgIHdp
ZHRoOiAxNjBweDsKK30KKy5zcGFuNCB7CisgIHdpZHRoOiAyMjBweDsKK30KKy5zcGFuNSB7Cisg
IHdpZHRoOiAyODBweDsKK30KKy5zcGFuNiB7CisgIHdpZHRoOiAzNDBweDsKK30KKy5zcGFuNyB7
CisgIHdpZHRoOiA0MDBweDsKK30KKy5zcGFuOCB7CisgIHdpZHRoOiA0NjBweDsKK30KKy5zcGFu
OSB7CisgIHdpZHRoOiA1MjBweDsKK30KKy5zcGFuMTAgeworICB3aWR0aDogNTgwcHg7Cit9Cisu
c3BhbjExIHsKKyAgd2lkdGg6IDY0MHB4OworfQorLnNwYW4xMiB7CisgIHdpZHRoOiA3MDBweDsK
K30KKy5zcGFuMTMgeworICB3aWR0aDogNzYwcHg7Cit9Cisuc3BhbjE0IHsKKyAgd2lkdGg6IDgy
MHB4OworfQorLnNwYW4xNSB7CisgIHdpZHRoOiA4ODBweDsKK30KKy5zcGFuMTYgeworICB3aWR0
aDogOTQwcHg7Cit9Cisuc3BhbjE3IHsKKyAgd2lkdGg6IDEwMDBweDsKK30KKy5zcGFuMTggewor
ICB3aWR0aDogMTA2MHB4OworfQorLnNwYW4xOSB7CisgIHdpZHRoOiAxMTIwcHg7Cit9Cisuc3Bh
bjIwIHsKKyAgd2lkdGg6IDExODBweDsKK30KKy5zcGFuMjEgeworICB3aWR0aDogMTI0MHB4Owor
fQorLnNwYW4yMiB7CisgIHdpZHRoOiAxMzAwcHg7Cit9Cisuc3BhbjIzIHsKKyAgd2lkdGg6IDEz
NjBweDsKK30KKy5zcGFuMjQgeworICB3aWR0aDogMTQyMHB4OworfQorLnJvdyA+IC5vZmZzZXQx
IHsKKyAgbWFyZ2luLWxlZnQ6IDgwcHg7Cit9Cisucm93ID4gLm9mZnNldDIgeworICBtYXJnaW4t
bGVmdDogMTQwcHg7Cit9Cisucm93ID4gLm9mZnNldDMgeworICBtYXJnaW4tbGVmdDogMjAwcHg7
Cit9Cisucm93ID4gLm9mZnNldDQgeworICBtYXJnaW4tbGVmdDogMjYwcHg7Cit9Cisucm93ID4g
Lm9mZnNldDUgeworICBtYXJnaW4tbGVmdDogMzIwcHg7Cit9Cisucm93ID4gLm9mZnNldDYgewor
ICBtYXJnaW4tbGVmdDogMzgwcHg7Cit9Cisucm93ID4gLm9mZnNldDcgeworICBtYXJnaW4tbGVm
dDogNDQwcHg7Cit9Cisucm93ID4gLm9mZnNldDggeworICBtYXJnaW4tbGVmdDogNTAwcHg7Cit9
Cisucm93ID4gLm9mZnNldDkgeworICBtYXJnaW4tbGVmdDogNTYwcHg7Cit9Cisucm93ID4gLm9m
ZnNldDEwIHsKKyAgbWFyZ2luLWxlZnQ6IDYyMHB4OworfQorLnJvdyA+IC5vZmZzZXQxMSB7Cisg
IG1hcmdpbi1sZWZ0OiA2ODBweDsKK30KKy5yb3cgPiAub2Zmc2V0MTIgeworICBtYXJnaW4tbGVm
dDogNzQwcHg7Cit9Cisuc3Bhbi1vbmUtdGhpcmQgeworICB3aWR0aDogMzAwcHg7Cit9Cisuc3Bh
bi10d28tdGhpcmRzIHsKKyAgd2lkdGg6IDYyMHB4OworfQorLnJvdyA+IC5vZmZzZXQtb25lLXRo
aXJkIHsKKyAgbWFyZ2luLWxlZnQ6IDM0MHB4OworfQorLnJvdyA+IC5vZmZzZXQtdHdvLXRoaXJk
cyB7CisgIG1hcmdpbi1sZWZ0OiA2NjBweDsKK30KKy8qIFR5cG9ncmFwaHkubGVzcworICogSGVh
ZGluZ3MsIGJvZHkgdGV4dCwgbGlzdHMsIGNvZGUsIGFuZCBtb3JlIGZvciBhIHZlcnNhdGlsZSBh
bmQgZHVyYWJsZSB0eXBvZ3JhcGh5IHN5c3RlbQorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSAqLworcCB7CisgIGZvbnQtc2l6ZTogMTNweDsKKyAgZm9udC13ZWlnaHQ6IG5vcm1h
bDsKKyAgbGluZS1oZWlnaHQ6IDE4cHg7CisgIG1hcmdpbi1ib3R0b206IDlweDsKK30KK3Agc21h
bGwgeworICBmb250LXNpemU6IDExcHg7CisgIGNvbG9yOiAjYmZiZmJmOworfQoraDEsCitoMiwK
K2gzLAoraDQsCitoNSwKK2g2IHsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgIGNvbG9yOiAjNDA0
MDQwOworfQoraDEgc21hbGwsCitoMiBzbWFsbCwKK2gzIHNtYWxsLAoraDQgc21hbGwsCitoNSBz
bWFsbCwKK2g2IHNtYWxsIHsKKyAgY29sb3I6ICNiZmJmYmY7Cit9CitoMSB7CisgIG1hcmdpbi1i
b3R0b206IDE4cHg7CisgIGZvbnQtc2l6ZTogMzBweDsKKyAgbGluZS1oZWlnaHQ6IDM2cHg7Cit9
CitoMSBzbWFsbCB7CisgIGZvbnQtc2l6ZTogMThweDsKK30KK2gyIHsKKyAgZm9udC1zaXplOiAy
NHB4OworICBsaW5lLWhlaWdodDogMzZweDsKK30KK2gyIHNtYWxsIHsKKyAgZm9udC1zaXplOiAx
NHB4OworfQoraDMsCitoNCwKK2g1LAoraDYgeworICBsaW5lLWhlaWdodDogMzZweDsKK30KK2gz
IHsKKyAgZm9udC1zaXplOiAxOHB4OworfQoraDMgc21hbGwgeworICBmb250LXNpemU6IDE0cHg7
Cit9CitoNCB7CisgIGZvbnQtc2l6ZTogMTZweDsKK30KK2g0IHNtYWxsIHsKKyAgZm9udC1zaXpl
OiAxMnB4OworfQoraDUgeworICBmb250LXNpemU6IDE0cHg7Cit9CitoNiB7CisgIGZvbnQtc2l6
ZTogMTNweDsKKyAgY29sb3I6ICNiZmJmYmY7CisgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7
Cit9Cit1bCwgb2wgeworICBtYXJnaW46IDAgMCAxOHB4IDI1cHg7Cit9Cit1bCB1bCwKK3VsIG9s
LAorb2wgb2wsCitvbCB1bCB7CisgIG1hcmdpbi1ib3R0b206IDA7Cit9Cit1bCB7CisgIGxpc3Qt
c3R5bGU6IGRpc2M7Cit9CitvbCB7CisgIGxpc3Qtc3R5bGU6IGRlY2ltYWw7Cit9CitsaSB7Cisg
IGxpbmUtaGVpZ2h0OiAxOHB4OworICBjb2xvcjogIzgwODA4MDsKK30KK3VsLnVuc3R5bGVkIHsK
KyAgbGlzdC1zdHlsZTogbm9uZTsKKyAgbWFyZ2luLWxlZnQ6IDA7Cit9CitkbCB7CisgIG1hcmdp
bi1ib3R0b206IDE4cHg7Cit9CitkbCBkdCwgZGwgZGQgeworICBsaW5lLWhlaWdodDogMThweDsK
K30KK2RsIGR0IHsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CitkbCBkZCB7CisgIG1hcmdpbi1s
ZWZ0OiA5cHg7Cit9CitociB7CisgIG1hcmdpbjogMjBweCAwIDE5cHg7CisgIGJvcmRlcjogMDsK
KyAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlZWU7Cit9CitzdHJvbmcgeworICBmb250LXN0
eWxlOiBpbmhlcml0OworICBmb250LXdlaWdodDogYm9sZDsKK30KK2VtIHsKKyAgZm9udC1zdHls
ZTogaXRhbGljOworICBmb250LXdlaWdodDogaW5oZXJpdDsKKyAgbGluZS1oZWlnaHQ6IGluaGVy
aXQ7Cit9CisubXV0ZWQgeworICBjb2xvcjogI2JmYmZiZjsKK30KK2Jsb2NrcXVvdGUgeworICBt
YXJnaW4tYm90dG9tOiAxOHB4OworICBib3JkZXItbGVmdDogNXB4IHNvbGlkICNlZWU7CisgIHBh
ZGRpbmctbGVmdDogMTVweDsKK30KK2Jsb2NrcXVvdGUgcCB7CisgIGZvbnQtc2l6ZTogMTRweDsK
KyAgZm9udC13ZWlnaHQ6IDMwMDsKKyAgbGluZS1oZWlnaHQ6IDE4cHg7CisgIG1hcmdpbi1ib3R0
b206IDA7Cit9CitibG9ja3F1b3RlIHNtYWxsIHsKKyAgZGlzcGxheTogYmxvY2s7CisgIGZvbnQt
c2l6ZTogMTJweDsKKyAgZm9udC13ZWlnaHQ6IDMwMDsKKyAgbGluZS1oZWlnaHQ6IDE4cHg7Cisg
IGNvbG9yOiAjYmZiZmJmOworfQorYmxvY2txdW90ZSBzbWFsbDpiZWZvcmUgeworICBjb250ZW50
OiAnXDIwMTQgXDAwQTAnOworfQorYWRkcmVzcyB7CisgIGRpc3BsYXk6IGJsb2NrOworICBsaW5l
LWhlaWdodDogMThweDsKKyAgbWFyZ2luLWJvdHRvbTogMThweDsKK30KK2NvZGUsIHByZSB7Cisg
IHBhZGRpbmc6IDAgM3B4IDJweDsKKyAgZm9udC1mYW1pbHk6IE1vbmFjbywgQW5kYWxlIE1vbm8s
IENvdXJpZXIgTmV3LCBtb25vc3BhY2U7CisgIGZvbnQtc2l6ZTogMTJweDsKKyAgLXdlYmtpdC1i
b3JkZXItcmFkaXVzOiAzcHg7CisgIC1tb3otYm9yZGVyLXJhZGl1czogM3B4OworICBib3JkZXIt
cmFkaXVzOiAzcHg7Cit9Citjb2RlIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2ZlZTljYzsKKyAg
Y29sb3I6IHJnYmEoMCwgMCwgMCwgMC43NSk7CisgIHBhZGRpbmc6IDFweCAzcHg7Cit9CitwcmUg
eworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1OworICBkaXNwbGF5OiBibG9jazsKKyAgcGFk
ZGluZzogOC41cHg7CisgIG1hcmdpbjogMCAwIDE4cHg7CisgIGxpbmUtaGVpZ2h0OiAxOHB4Owor
ICBmb250LXNpemU6IDEycHg7CisgIGJvcmRlcjogMXB4IHNvbGlkICNjY2M7CisgIGJvcmRlcjog
MXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC4xNSk7CisgIC13ZWJraXQtYm9yZGVyLXJhZGl1czog
M3B4OworICAtbW96LWJvcmRlci1yYWRpdXM6IDNweDsKKyAgYm9yZGVyLXJhZGl1czogM3B4Owor
ICB3aGl0ZS1zcGFjZTogcHJlOworICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7CisgIHdvcmQtd3Jh
cDogYnJlYWstd29yZDsKK30KKy8qIEZvcm1zLmxlc3MKKyAqIEJhc2Ugc3R5bGVzIGZvciB2YXJp
b3VzIGlucHV0IHR5cGVzLCBmb3JtIGxheW91dHMsIGFuZCBzdGF0ZXMKKyAqIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KK2Zv
cm0geworICBtYXJnaW4tYm90dG9tOiAxOHB4OworfQorZmllbGRzZXQgeworICBtYXJnaW4tYm90
dG9tOiAxOHB4OworICBwYWRkaW5nLXRvcDogMThweDsKK30KK2ZpZWxkc2V0IGxlZ2VuZCB7Cisg
IGRpc3BsYXk6IGJsb2NrOworICBwYWRkaW5nLWxlZnQ6IDE1MHB4OworICBmb250LXNpemU6IDE5
LjVweDsKKyAgbGluZS1oZWlnaHQ6IDE7CisgIGNvbG9yOiAjNDA0MDQwOworICAqcGFkZGluZzog
MCAwIDVweCAxNDVweDsKKyAgLyogSUU2LTcgKi8KKworICAqbGluZS1oZWlnaHQ6IDEuNTsKKyAg
LyogSUU2LTcgKi8KKworfQorZm9ybSAuY2xlYXJmaXggeworICBtYXJnaW4tYm90dG9tOiAxOHB4
OworICB6b29tOiAxOworfQorZm9ybSAuY2xlYXJmaXg6YmVmb3JlLCBmb3JtIC5jbGVhcmZpeDph
ZnRlciB7CisgIGRpc3BsYXk6IHRhYmxlOworICBjb250ZW50OiAiIjsKKyAgem9vbTogMTsKK30K
K2Zvcm0gLmNsZWFyZml4OmFmdGVyIHsKKyAgY2xlYXI6IGJvdGg7Cit9CitsYWJlbCwKK2lucHV0
LAorc2VsZWN0LAordGV4dGFyZWEgeworICBmb250LWZhbWlseTogIkhlbHZldGljYSBOZXVlIiwg
SGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjsKKyAgZm9udC1zaXplOiAxM3B4OworICBmb250
LXdlaWdodDogbm9ybWFsOworICBsaW5lLWhlaWdodDogbm9ybWFsOworfQorbGFiZWwgeworICBw
YWRkaW5nLXRvcDogNnB4OworICBmb250LXNpemU6IDEzcHg7CisgIGxpbmUtaGVpZ2h0OiAxOHB4
OworICBmbG9hdDogbGVmdDsKKyAgd2lkdGg6IDEzMHB4OworICB0ZXh0LWFsaWduOiByaWdodDsK
KyAgY29sb3I6ICM0MDQwNDA7Cit9Citmb3JtIC5pbnB1dCB7CisgIG1hcmdpbi1sZWZ0OiAxNTBw
eDsKK30KK2lucHV0W3R5cGU9Y2hlY2tib3hdLCBpbnB1dFt0eXBlPXJhZGlvXSB7CisgIGN1cnNv
cjogcG9pbnRlcjsKK30KK2lucHV0LAordGV4dGFyZWEsCitzZWxlY3QsCisudW5lZGl0YWJsZS1p
bnB1dCB7CisgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKKyAgd2lkdGg6IDIxMHB4OworICBoZWln
aHQ6IDE4cHg7CisgIHBhZGRpbmc6IDRweDsKKyAgZm9udC1zaXplOiAxM3B4OworICBsaW5lLWhl
aWdodDogMThweDsKKyAgY29sb3I6ICM4MDgwODA7CisgIGJvcmRlcjogMXB4IHNvbGlkICNjY2M7
CisgIC13ZWJraXQtYm9yZGVyLXJhZGl1czogM3B4OworICAtbW96LWJvcmRlci1yYWRpdXM6IDNw
eDsKKyAgYm9yZGVyLXJhZGl1czogM3B4OworfQorc2VsZWN0IHsKKyAgcGFkZGluZzogaW5pdGlh
bDsKK30KK2lucHV0W3R5cGU9Y2hlY2tib3hdLCBpbnB1dFt0eXBlPXJhZGlvXSB7CisgIHdpZHRo
OiBhdXRvOworICBoZWlnaHQ6IGF1dG87CisgIHBhZGRpbmc6IDA7CisgIG1hcmdpbjogM3B4IDA7
CisgICptYXJnaW4tdG9wOiAwOworICAvKiBJRTYtNyAqLworCisgIGxpbmUtaGVpZ2h0OiBub3Jt
YWw7CisgIGJvcmRlcjogbm9uZTsKK30KK2lucHV0W3R5cGU9ZmlsZV0geworICBiYWNrZ3JvdW5k
LWNvbG9yOiAjZmZmZmZmOworICBwYWRkaW5nOiBpbml0aWFsOworICBib3JkZXI6IGluaXRpYWw7
CisgIGxpbmUtaGVpZ2h0OiBpbml0aWFsOworICAtd2Via2l0LWJveC1zaGFkb3c6IG5vbmU7Cisg
IC1tb3otYm94LXNoYWRvdzogbm9uZTsKKyAgYm94LXNoYWRvdzogbm9uZTsKK30KK2lucHV0W3R5
cGU9YnV0dG9uXSwgaW5wdXRbdHlwZT1yZXNldF0sIGlucHV0W3R5cGU9c3VibWl0XSB7CisgIHdp
ZHRoOiBhdXRvOworICBoZWlnaHQ6IGF1dG87Cit9CitzZWxlY3QsIGlucHV0W3R5cGU9ZmlsZV0g
eworICBoZWlnaHQ6IDI3cHg7CisgICpoZWlnaHQ6IGF1dG87CisgIGxpbmUtaGVpZ2h0OiAyN3B4
OworICAqbWFyZ2luLXRvcDogNHB4OworICAvKiBGb3IgSUU3LCBhZGQgdG9wIG1hcmdpbiB0byBh
bGlnbiBzZWxlY3Qgd2l0aCBsYWJlbHMgKi8KKworfQorc2VsZWN0W211bHRpcGxlXSB7CisgIGhl
aWdodDogaW5oZXJpdDsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjsKK30KK3RleHRhcmVh
IHsKKyAgaGVpZ2h0OiBhdXRvOworfQorLnVuZWRpdGFibGUtaW5wdXQgeworICBiYWNrZ3JvdW5k
LWNvbG9yOiAjZmZmZmZmOworICBkaXNwbGF5OiBibG9jazsKKyAgYm9yZGVyLWNvbG9yOiAjZWVl
OworICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAu
MDI1KTsKKyAgLW1vei1ib3gtc2hhZG93OiBpbnNldCAwIDFweCAycHggcmdiYSgwLCAwLCAwLCAw
LjAyNSk7CisgIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMDI1
KTsKKyAgY3Vyc29yOiBub3QtYWxsb3dlZDsKK30KKzotbW96LXBsYWNlaG9sZGVyIHsKKyAgY29s
b3I6ICNiZmJmYmY7Cit9Cis6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIgeworICBjb2xvcjog
I2JmYmZiZjsKK30KK2lucHV0LCB0ZXh0YXJlYSB7CisgIC13ZWJraXQtdHJhbnNpdGlvbjogYm9y
ZGVyIGxpbmVhciAwLjJzLCBib3gtc2hhZG93IGxpbmVhciAwLjJzOworICAtbW96LXRyYW5zaXRp
b246IGJvcmRlciBsaW5lYXIgMC4ycywgYm94LXNoYWRvdyBsaW5lYXIgMC4yczsKKyAgLW1zLXRy
YW5zaXRpb246IGJvcmRlciBsaW5lYXIgMC4ycywgYm94LXNoYWRvdyBsaW5lYXIgMC4yczsKKyAg
LW8tdHJhbnNpdGlvbjogYm9yZGVyIGxpbmVhciAwLjJzLCBib3gtc2hhZG93IGxpbmVhciAwLjJz
OworICB0cmFuc2l0aW9uOiBib3JkZXIgbGluZWFyIDAuMnMsIGJveC1zaGFkb3cgbGluZWFyIDAu
MnM7CisgIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAxcHggM3B4IHJnYmEoMCwgMCwgMCwg
MC4xKTsKKyAgLW1vei1ib3gtc2hhZG93OiBpbnNldCAwIDFweCAzcHggcmdiYSgwLCAwLCAwLCAw
LjEpOworICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAzcHggcmdiYSgwLCAwLCAwLCAwLjEpOwor
fQoraW5wdXQ6Zm9jdXMsIHRleHRhcmVhOmZvY3VzIHsKKyAgb3V0bGluZTogMDsKKyAgYm9yZGVy
LWNvbG9yOiByZ2JhKDgyLCAxNjgsIDIzNiwgMC44KTsKKyAgLXdlYmtpdC1ib3gtc2hhZG93OiBp
bnNldCAwIDFweCAzcHggcmdiYSgwLCAwLCAwLCAwLjEpLCAwIDAgOHB4IHJnYmEoODIsIDE2OCwg
MjM2LCAwLjYpOworICAtbW96LWJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDNweCByZ2JhKDAsIDAs
IDAsIDAuMSksIDAgMCA4cHggcmdiYSg4MiwgMTY4LCAyMzYsIDAuNik7CisgIGJveC1zaGFkb3c6
IGluc2V0IDAgMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMSksIDAgMCA4cHggcmdiYSg4MiwgMTY4
LCAyMzYsIDAuNik7Cit9CitpbnB1dFt0eXBlPWZpbGVdOmZvY3VzLCBpbnB1dFt0eXBlPWNoZWNr
Ym94XTpmb2N1cywgc2VsZWN0OmZvY3VzIHsKKyAgLXdlYmtpdC1ib3gtc2hhZG93OiBub25lOwor
ICAtbW96LWJveC1zaGFkb3c6IG5vbmU7CisgIGJveC1zaGFkb3c6IG5vbmU7CisgIG91dGxpbmU6
IDFweCBkb3R0ZWQgIzY2NjsKK30KK2Zvcm0gLmNsZWFyZml4LmVycm9yID4gbGFiZWwsIGZvcm0g
LmNsZWFyZml4LmVycm9yIC5oZWxwLWJsb2NrLCBmb3JtIC5jbGVhcmZpeC5lcnJvciAuaGVscC1p
bmxpbmUgeworICBjb2xvcjogI2I5NGE0ODsKK30KK2Zvcm0gLmNsZWFyZml4LmVycm9yIGlucHV0
LCBmb3JtIC5jbGVhcmZpeC5lcnJvciB0ZXh0YXJlYSB7CisgIGNvbG9yOiAjYjk0YTQ4OworICBi
b3JkZXItY29sb3I6ICNlZTVmNWI7Cit9Citmb3JtIC5jbGVhcmZpeC5lcnJvciBpbnB1dDpmb2N1
cywgZm9ybSAuY2xlYXJmaXguZXJyb3IgdGV4dGFyZWE6Zm9jdXMgeworICBib3JkZXItY29sb3I6
ICNlOTMyMmQ7CisgIC13ZWJraXQtYm94LXNoYWRvdzogMCAwIDZweCAjZjhiOWI3OworICAtbW96
LWJveC1zaGFkb3c6IDAgMCA2cHggI2Y4YjliNzsKKyAgYm94LXNoYWRvdzogMCAwIDZweCAjZjhi
OWI3OworfQorZm9ybSAuY2xlYXJmaXguZXJyb3IgLmlucHV0LXByZXBlbmQgLmFkZC1vbiwgZm9y
bSAuY2xlYXJmaXguZXJyb3IgLmlucHV0LWFwcGVuZCAuYWRkLW9uIHsKKyAgY29sb3I6ICNiOTRh
NDg7CisgIGJhY2tncm91bmQtY29sb3I6ICNmY2U2ZTY7CisgIGJvcmRlci1jb2xvcjogI2I5NGE0
ODsKK30KK2Zvcm0gLmNsZWFyZml4Lndhcm5pbmcgPiBsYWJlbCwgZm9ybSAuY2xlYXJmaXgud2Fy
bmluZyAuaGVscC1ibG9jaywgZm9ybSAuY2xlYXJmaXgud2FybmluZyAuaGVscC1pbmxpbmUgewor
ICBjb2xvcjogI2MwOTg1MzsKK30KK2Zvcm0gLmNsZWFyZml4Lndhcm5pbmcgaW5wdXQsIGZvcm0g
LmNsZWFyZml4Lndhcm5pbmcgdGV4dGFyZWEgeworICBjb2xvcjogI2MwOTg1MzsKKyAgYm9yZGVy
LWNvbG9yOiAjY2NhZTY0OworfQorZm9ybSAuY2xlYXJmaXgud2FybmluZyBpbnB1dDpmb2N1cywg
Zm9ybSAuY2xlYXJmaXgud2FybmluZyB0ZXh0YXJlYTpmb2N1cyB7CisgIGJvcmRlci1jb2xvcjog
I2JlOWEzZjsKKyAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDAgNnB4ICNlNWQ2YjE7CisgIC1tb3ot
Ym94LXNoYWRvdzogMCAwIDZweCAjZTVkNmIxOworICBib3gtc2hhZG93OiAwIDAgNnB4ICNlNWQ2
YjE7Cit9Citmb3JtIC5jbGVhcmZpeC53YXJuaW5nIC5pbnB1dC1wcmVwZW5kIC5hZGQtb24sIGZv
cm0gLmNsZWFyZml4Lndhcm5pbmcgLmlucHV0LWFwcGVuZCAuYWRkLW9uIHsKKyAgY29sb3I6ICNj
MDk4NTM7CisgIGJhY2tncm91bmQtY29sb3I6ICNkMmI4Nzc7CisgIGJvcmRlci1jb2xvcjogI2Mw
OTg1MzsKK30KK2Zvcm0gLmNsZWFyZml4LnN1Y2Nlc3MgPiBsYWJlbCwgZm9ybSAuY2xlYXJmaXgu
c3VjY2VzcyAuaGVscC1ibG9jaywgZm9ybSAuY2xlYXJmaXguc3VjY2VzcyAuaGVscC1pbmxpbmUg
eworICBjb2xvcjogIzQ2ODg0NzsKK30KK2Zvcm0gLmNsZWFyZml4LnN1Y2Nlc3MgaW5wdXQsIGZv
cm0gLmNsZWFyZml4LnN1Y2Nlc3MgdGV4dGFyZWEgeworICBjb2xvcjogIzQ2ODg0NzsKKyAgYm9y
ZGVyLWNvbG9yOiAjNTdhOTU3OworfQorZm9ybSAuY2xlYXJmaXguc3VjY2VzcyBpbnB1dDpmb2N1
cywgZm9ybSAuY2xlYXJmaXguc3VjY2VzcyB0ZXh0YXJlYTpmb2N1cyB7CisgIGJvcmRlci1jb2xv
cjogIzQ1ODg0NTsKKyAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDAgNnB4ICM5YWNjOWE7CisgIC1t
b3otYm94LXNoYWRvdzogMCAwIDZweCAjOWFjYzlhOworICBib3gtc2hhZG93OiAwIDAgNnB4ICM5
YWNjOWE7Cit9Citmb3JtIC5jbGVhcmZpeC5zdWNjZXNzIC5pbnB1dC1wcmVwZW5kIC5hZGQtb24s
IGZvcm0gLmNsZWFyZml4LnN1Y2Nlc3MgLmlucHV0LWFwcGVuZCAuYWRkLW9uIHsKKyAgY29sb3I6
ICM0Njg4NDc7CisgIGJhY2tncm91bmQtY29sb3I6ICNiY2RkYmM7CisgIGJvcmRlci1jb2xvcjog
IzQ2ODg0NzsKK30KKy5pbnB1dC1taW5pLAoraW5wdXQubWluaSwKK3RleHRhcmVhLm1pbmksCitz
ZWxlY3QubWluaSB7CisgIHdpZHRoOiA2MHB4OworfQorLmlucHV0LXNtYWxsLAoraW5wdXQuc21h
bGwsCit0ZXh0YXJlYS5zbWFsbCwKK3NlbGVjdC5zbWFsbCB7CisgIHdpZHRoOiA5MHB4OworfQor
LmlucHV0LW1lZGl1bSwKK2lucHV0Lm1lZGl1bSwKK3RleHRhcmVhLm1lZGl1bSwKK3NlbGVjdC5t
ZWRpdW0geworICB3aWR0aDogMTUwcHg7Cit9CisuaW5wdXQtbGFyZ2UsCitpbnB1dC5sYXJnZSwK
K3RleHRhcmVhLmxhcmdlLAorc2VsZWN0LmxhcmdlIHsKKyAgd2lkdGg6IDIxMHB4OworfQorLmlu
cHV0LXhsYXJnZSwKK2lucHV0LnhsYXJnZSwKK3RleHRhcmVhLnhsYXJnZSwKK3NlbGVjdC54bGFy
Z2UgeworICB3aWR0aDogMjcwcHg7Cit9CisuaW5wdXQteHhsYXJnZSwKK2lucHV0Lnh4bGFyZ2Us
Cit0ZXh0YXJlYS54eGxhcmdlLAorc2VsZWN0Lnh4bGFyZ2UgeworICB3aWR0aDogNTMwcHg7Cit9
Cit0ZXh0YXJlYS54eGxhcmdlIHsKKyAgb3ZlcmZsb3cteTogYXV0bzsKK30KK2lucHV0LnNwYW4x
LCB0ZXh0YXJlYS5zcGFuMSB7CisgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKKyAgZmxvYXQ6IG5v
bmU7CisgIHdpZHRoOiAzMHB4OworICBtYXJnaW4tbGVmdDogMDsKK30KK2lucHV0LnNwYW4yLCB0
ZXh0YXJlYS5zcGFuMiB7CisgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKKyAgZmxvYXQ6IG5vbmU7
CisgIHdpZHRoOiA5MHB4OworICBtYXJnaW4tbGVmdDogMDsKK30KK2lucHV0LnNwYW4zLCB0ZXh0
YXJlYS5zcGFuMyB7CisgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKKyAgZmxvYXQ6IG5vbmU7Cisg
IHdpZHRoOiAxNTBweDsKKyAgbWFyZ2luLWxlZnQ6IDA7Cit9CitpbnB1dC5zcGFuNCwgdGV4dGFy
ZWEuc3BhbjQgeworICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CisgIGZsb2F0OiBub25lOworICB3
aWR0aDogMjEwcHg7CisgIG1hcmdpbi1sZWZ0OiAwOworfQoraW5wdXQuc3BhbjUsIHRleHRhcmVh
LnNwYW41IHsKKyAgZGlzcGxheTogaW5saW5lLWJsb2NrOworICBmbG9hdDogbm9uZTsKKyAgd2lk
dGg6IDI3MHB4OworICBtYXJnaW4tbGVmdDogMDsKK30KK2lucHV0LnNwYW42LCB0ZXh0YXJlYS5z
cGFuNiB7CisgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKKyAgZmxvYXQ6IG5vbmU7CisgIHdpZHRo
OiAzMzBweDsKKyAgbWFyZ2luLWxlZnQ6IDA7Cit9CitpbnB1dC5zcGFuNywgdGV4dGFyZWEuc3Bh
bjcgeworICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CisgIGZsb2F0OiBub25lOworICB3aWR0aDog
MzkwcHg7CisgIG1hcmdpbi1sZWZ0OiAwOworfQoraW5wdXQuc3BhbjgsIHRleHRhcmVhLnNwYW44
IHsKKyAgZGlzcGxheTogaW5saW5lLWJsb2NrOworICBmbG9hdDogbm9uZTsKKyAgd2lkdGg6IDQ1
MHB4OworICBtYXJnaW4tbGVmdDogMDsKK30KK2lucHV0LnNwYW45LCB0ZXh0YXJlYS5zcGFuOSB7
CisgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKKyAgZmxvYXQ6IG5vbmU7CisgIHdpZHRoOiA1MTBw
eDsKKyAgbWFyZ2luLWxlZnQ6IDA7Cit9CitpbnB1dC5zcGFuMTAsIHRleHRhcmVhLnNwYW4xMCB7
CisgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKKyAgZmxvYXQ6IG5vbmU7CisgIHdpZHRoOiA1NzBw
eDsKKyAgbWFyZ2luLWxlZnQ6IDA7Cit9CitpbnB1dC5zcGFuMTEsIHRleHRhcmVhLnNwYW4xMSB7
CisgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKKyAgZmxvYXQ6IG5vbmU7CisgIHdpZHRoOiA2MzBw
eDsKKyAgbWFyZ2luLWxlZnQ6IDA7Cit9CitpbnB1dC5zcGFuMTIsIHRleHRhcmVhLnNwYW4xMiB7
CisgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKKyAgZmxvYXQ6IG5vbmU7CisgIHdpZHRoOiA2OTBw
eDsKKyAgbWFyZ2luLWxlZnQ6IDA7Cit9CitpbnB1dC5zcGFuMTMsIHRleHRhcmVhLnNwYW4xMyB7
CisgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKKyAgZmxvYXQ6IG5vbmU7CisgIHdpZHRoOiA3NTBw
eDsKKyAgbWFyZ2luLWxlZnQ6IDA7Cit9CitpbnB1dC5zcGFuMTQsIHRleHRhcmVhLnNwYW4xNCB7
CisgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKKyAgZmxvYXQ6IG5vbmU7CisgIHdpZHRoOiA4MTBw
eDsKKyAgbWFyZ2luLWxlZnQ6IDA7Cit9CitpbnB1dC5zcGFuMTUsIHRleHRhcmVhLnNwYW4xNSB7
CisgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKKyAgZmxvYXQ6IG5vbmU7CisgIHdpZHRoOiA4NzBw
eDsKKyAgbWFyZ2luLWxlZnQ6IDA7Cit9CitpbnB1dC5zcGFuMTYsIHRleHRhcmVhLnNwYW4xNiB7
CisgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKKyAgZmxvYXQ6IG5vbmU7CisgIHdpZHRoOiA5MzBw
eDsKKyAgbWFyZ2luLWxlZnQ6IDA7Cit9CitpbnB1dFtkaXNhYmxlZF0sCitzZWxlY3RbZGlzYWJs
ZWRdLAordGV4dGFyZWFbZGlzYWJsZWRdLAoraW5wdXRbcmVhZG9ubHldLAorc2VsZWN0W3JlYWRv
bmx5XSwKK3RleHRhcmVhW3JlYWRvbmx5XSB7CisgIGJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7
CisgIGJvcmRlci1jb2xvcjogI2RkZDsKKyAgY3Vyc29yOiBub3QtYWxsb3dlZDsKK30KKy5hY3Rp
b25zIHsKKyAgYmFja2dyb3VuZDogI2Y1ZjVmNTsKKyAgbWFyZ2luLXRvcDogMThweDsKKyAgbWFy
Z2luLWJvdHRvbTogMThweDsKKyAgcGFkZGluZzogMTdweCAyMHB4IDE4cHggMTUwcHg7CisgIGJv
cmRlci10b3A6IDFweCBzb2xpZCAjZGRkOworICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDAgMCAz
cHggM3B4OworICAtbW96LWJvcmRlci1yYWRpdXM6IDAgMCAzcHggM3B4OworICBib3JkZXItcmFk
aXVzOiAwIDAgM3B4IDNweDsKK30KKy5hY3Rpb25zIC5zZWNvbmRhcnktYWN0aW9uIHsKKyAgZmxv
YXQ6IHJpZ2h0OworfQorLmFjdGlvbnMgLnNlY29uZGFyeS1hY3Rpb24gYSB7CisgIGxpbmUtaGVp
Z2h0OiAzMHB4OworfQorLmFjdGlvbnMgLnNlY29uZGFyeS1hY3Rpb24gYTpob3ZlciB7CisgIHRl
eHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworfQorLmhlbHAtaW5saW5lLCAuaGVscC1ibG9jayB7
CisgIGZvbnQtc2l6ZTogMTNweDsKKyAgbGluZS1oZWlnaHQ6IDE4cHg7CisgIGNvbG9yOiAjYmZi
ZmJmOworfQorLmhlbHAtaW5saW5lIHsKKyAgcGFkZGluZy1sZWZ0OiA1cHg7CisgICpwb3NpdGlv
bjogcmVsYXRpdmU7CisgIC8qIElFNi03ICovCisKKyAgKnRvcDogLTVweDsKKyAgLyogSUU2LTcg
Ki8KKworfQorLmhlbHAtYmxvY2sgeworICBkaXNwbGF5OiBibG9jazsKKyAgbWF4LXdpZHRoOiA2
MDBweDsKK30KKy5pbmxpbmUtaW5wdXRzIHsKKyAgY29sb3I6ICM4MDgwODA7Cit9CisuaW5saW5l
LWlucHV0cyBzcGFuIHsKKyAgcGFkZGluZzogMCAycHggMCAxcHg7Cit9CisuaW5wdXQtcHJlcGVu
ZCBpbnB1dCwgLmlucHV0LWFwcGVuZCBpbnB1dCB7CisgIC13ZWJraXQtYm9yZGVyLXJhZGl1czog
MCAzcHggM3B4IDA7CisgIC1tb3otYm9yZGVyLXJhZGl1czogMCAzcHggM3B4IDA7CisgIGJvcmRl
ci1yYWRpdXM6IDAgM3B4IDNweCAwOworfQorLmlucHV0LXByZXBlbmQgLmFkZC1vbiwgLmlucHV0
LWFwcGVuZCAuYWRkLW9uIHsKKyAgcG9zaXRpb246IHJlbGF0aXZlOworICBiYWNrZ3JvdW5kOiAj
ZjVmNWY1OworICBib3JkZXI6IDFweCBzb2xpZCAjY2NjOworICB6LWluZGV4OiAyOworICBmbG9h
dDogbGVmdDsKKyAgZGlzcGxheTogYmxvY2s7CisgIHdpZHRoOiBhdXRvOworICBtaW4td2lkdGg6
IDE2cHg7CisgIGhlaWdodDogMThweDsKKyAgcGFkZGluZzogNHB4IDRweCA0cHggNXB4OworICBt
YXJnaW4tcmlnaHQ6IC0xcHg7CisgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CisgIGxpbmUtaGVpZ2h0
OiAxOHB4OworICBjb2xvcjogI2JmYmZiZjsKKyAgdGV4dC1hbGlnbjogY2VudGVyOworICB0ZXh0
LXNoYWRvdzogMCAxcHggMCAjZmZmZmZmOworICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDNweCAw
IDAgM3B4OworICAtbW96LWJvcmRlci1yYWRpdXM6IDNweCAwIDAgM3B4OworICBib3JkZXItcmFk
aXVzOiAzcHggMCAwIDNweDsKK30KKy5pbnB1dC1wcmVwZW5kIC5hY3RpdmUsIC5pbnB1dC1hcHBl
bmQgLmFjdGl2ZSB7CisgIGJhY2tncm91bmQ6ICNhOWRiYTk7CisgIGJvcmRlci1jb2xvcjogIzQ2
YTU0NjsKK30KKy5pbnB1dC1wcmVwZW5kIC5hZGQtb24geworICAqbWFyZ2luLXRvcDogMXB4Owor
ICAvKiBJRTYtNyAqLworCit9CisuaW5wdXQtYXBwZW5kIGlucHV0IHsKKyAgZmxvYXQ6IGxlZnQ7
CisgIC13ZWJraXQtYm9yZGVyLXJhZGl1czogM3B4IDAgMCAzcHg7CisgIC1tb3otYm9yZGVyLXJh
ZGl1czogM3B4IDAgMCAzcHg7CisgIGJvcmRlci1yYWRpdXM6IDNweCAwIDAgM3B4OworfQorLmlu
cHV0LWFwcGVuZCAuYWRkLW9uIHsKKyAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAwIDNweCAzcHgg
MDsKKyAgLW1vei1ib3JkZXItcmFkaXVzOiAwIDNweCAzcHggMDsKKyAgYm9yZGVyLXJhZGl1czog
MCAzcHggM3B4IDA7CisgIG1hcmdpbi1yaWdodDogMDsKKyAgbWFyZ2luLWxlZnQ6IC0xcHg7Cit9
CisuaW5wdXRzLWxpc3QgeworICBtYXJnaW46IDAgMCA1cHg7CisgIHdpZHRoOiAxMDAlOworfQor
LmlucHV0cy1saXN0IGxpIHsKKyAgZGlzcGxheTogYmxvY2s7CisgIHBhZGRpbmc6IDA7CisgIHdp
ZHRoOiAxMDAlOworfQorLmlucHV0cy1saXN0IGxhYmVsIHsKKyAgZGlzcGxheTogYmxvY2s7Cisg
IGZsb2F0OiBub25lOworICB3aWR0aDogYXV0bzsKKyAgcGFkZGluZzogMDsKKyAgbWFyZ2luLWxl
ZnQ6IDIwcHg7CisgIGxpbmUtaGVpZ2h0OiAxOHB4OworICB0ZXh0LWFsaWduOiBsZWZ0OworICB3
aGl0ZS1zcGFjZTogbm9ybWFsOworfQorLmlucHV0cy1saXN0IGxhYmVsIHN0cm9uZyB7CisgIGNv
bG9yOiAjODA4MDgwOworfQorLmlucHV0cy1saXN0IGxhYmVsIHNtYWxsIHsKKyAgZm9udC1zaXpl
OiAxMXB4OworICBmb250LXdlaWdodDogbm9ybWFsOworfQorLmlucHV0cy1saXN0IC5pbnB1dHMt
bGlzdCB7CisgIG1hcmdpbi1sZWZ0OiAyNXB4OworICBtYXJnaW4tYm90dG9tOiAxMHB4OworICBw
YWRkaW5nLXRvcDogMDsKK30KKy5pbnB1dHMtbGlzdDpmaXJzdC1jaGlsZCB7CisgIHBhZGRpbmct
dG9wOiA2cHg7Cit9CisuaW5wdXRzLWxpc3QgbGkgKyBsaSB7CisgIHBhZGRpbmctdG9wOiAycHg7
Cit9CisuaW5wdXRzLWxpc3QgaW5wdXRbdHlwZT1yYWRpb10sIC5pbnB1dHMtbGlzdCBpbnB1dFt0
eXBlPWNoZWNrYm94XSB7CisgIG1hcmdpbi1ib3R0b206IDA7CisgIG1hcmdpbi1sZWZ0OiAtMjBw
eDsKKyAgZmxvYXQ6IGxlZnQ7Cit9CisuZm9ybS1zdGFja2VkIHsKKyAgcGFkZGluZy1sZWZ0OiAy
MHB4OworfQorLmZvcm0tc3RhY2tlZCBmaWVsZHNldCB7CisgIHBhZGRpbmctdG9wOiA5cHg7Cit9
CisuZm9ybS1zdGFja2VkIGxlZ2VuZCB7CisgIHBhZGRpbmctbGVmdDogMDsKK30KKy5mb3JtLXN0
YWNrZWQgbGFiZWwgeworICBkaXNwbGF5OiBibG9jazsKKyAgZmxvYXQ6IG5vbmU7CisgIHdpZHRo
OiBhdXRvOworICBmb250LXdlaWdodDogYm9sZDsKKyAgdGV4dC1hbGlnbjogbGVmdDsKKyAgbGlu
ZS1oZWlnaHQ6IDIwcHg7CisgIHBhZGRpbmctdG9wOiAwOworfQorLmZvcm0tc3RhY2tlZCAuY2xl
YXJmaXggeworICBtYXJnaW4tYm90dG9tOiA5cHg7Cit9CisuZm9ybS1zdGFja2VkIC5jbGVhcmZp
eCBkaXYuaW5wdXQgeworICBtYXJnaW4tbGVmdDogMDsKK30KKy5mb3JtLXN0YWNrZWQgLmlucHV0
cy1saXN0IHsKKyAgbWFyZ2luLWJvdHRvbTogMDsKK30KKy5mb3JtLXN0YWNrZWQgLmlucHV0cy1s
aXN0IGxpIHsKKyAgcGFkZGluZy10b3A6IDA7Cit9CisuZm9ybS1zdGFja2VkIC5pbnB1dHMtbGlz
dCBsaSBsYWJlbCB7CisgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CisgIHBhZGRpbmctdG9wOiAwOwor
fQorLmZvcm0tc3RhY2tlZCBkaXYuY2xlYXJmaXguZXJyb3IgeworICBwYWRkaW5nLXRvcDogMTBw
eDsKKyAgcGFkZGluZy1ib3R0b206IDEwcHg7CisgIHBhZGRpbmctbGVmdDogMTBweDsKKyAgbWFy
Z2luLXRvcDogMDsKKyAgbWFyZ2luLWxlZnQ6IC0xMHB4OworfQorLmZvcm0tc3RhY2tlZCAuYWN0
aW9ucyB7CisgIG1hcmdpbi1sZWZ0OiAtMjBweDsKKyAgcGFkZGluZy1sZWZ0OiAyMHB4OworfQor
LyoKKyAqIFRhYmxlcy5sZXNzCisgKiBUYWJsZXMgZm9yLCB5b3UgZ3Vlc3NlZCBpdCwgdGFidWxh
ciBkYXRhCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCit0
YWJsZSB7CisgIHdpZHRoOiAxMDAlOworICBtYXJnaW4tYm90dG9tOiAxOHB4OworICBwYWRkaW5n
OiAwOworICBmb250LXNpemU6IDEzcHg7CisgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7Cit9
Cit0YWJsZSB0aCwgdGFibGUgdGQgeworICBwYWRkaW5nOiAxMHB4IDEwcHggOXB4OworICBsaW5l
LWhlaWdodDogMThweDsKKyAgdGV4dC1hbGlnbjogbGVmdDsKK30KK3RhYmxlIHRoIHsKKyAgcGFk
ZGluZy10b3A6IDlweDsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgIHZlcnRpY2FsLWFsaWduOiBt
aWRkbGU7Cit9Cit0YWJsZSB0ZCB7CisgIHZlcnRpY2FsLWFsaWduOiB0b3A7CisgIGJvcmRlci10
b3A6IDFweCBzb2xpZCAjZGRkOworfQordGFibGUgdGJvZHkgdGggeworICBib3JkZXItdG9wOiAx
cHggc29saWQgI2RkZDsKKyAgdmVydGljYWwtYWxpZ246IHRvcDsKK30KKy5jb25kZW5zZWQtdGFi
bGUgdGgsIC5jb25kZW5zZWQtdGFibGUgdGQgeworICBwYWRkaW5nOiA1cHggNXB4IDRweDsKK30K
Ky5ib3JkZXJlZC10YWJsZSB7CisgIGJvcmRlcjogMXB4IHNvbGlkICNkZGQ7CisgIGJvcmRlci1j
b2xsYXBzZTogc2VwYXJhdGU7CisgICpib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOworICAvKiBJ
RTcsIGNvbGxhcHNlIHRhYmxlIHRvIHJlbW92ZSBzcGFjaW5nICovCisKKyAgLXdlYmtpdC1ib3Jk
ZXItcmFkaXVzOiA0cHg7CisgIC1tb3otYm9yZGVyLXJhZGl1czogNHB4OworICBib3JkZXItcmFk
aXVzOiA0cHg7Cit9CisuYm9yZGVyZWQtdGFibGUgdGggKyB0aCwgLmJvcmRlcmVkLXRhYmxlIHRk
ICsgdGQsIC5ib3JkZXJlZC10YWJsZSB0aCArIHRkIHsKKyAgYm9yZGVyLWxlZnQ6IDFweCBzb2xp
ZCAjZGRkOworfQorLmJvcmRlcmVkLXRhYmxlIHRoZWFkIHRyOmZpcnN0LWNoaWxkIHRoOmZpcnN0
LWNoaWxkLCAuYm9yZGVyZWQtdGFibGUgdGJvZHkgdHI6Zmlyc3QtY2hpbGQgdGQ6Zmlyc3QtY2hp
bGQgeworICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDRweCAwIDAgMDsKKyAgLW1vei1ib3JkZXIt
cmFkaXVzOiA0cHggMCAwIDA7CisgIGJvcmRlci1yYWRpdXM6IDRweCAwIDAgMDsKK30KKy5ib3Jk
ZXJlZC10YWJsZSB0aGVhZCB0cjpmaXJzdC1jaGlsZCB0aDpsYXN0LWNoaWxkLCAuYm9yZGVyZWQt
dGFibGUgdGJvZHkgdHI6Zmlyc3QtY2hpbGQgdGQ6bGFzdC1jaGlsZCB7CisgIC13ZWJraXQtYm9y
ZGVyLXJhZGl1czogMCA0cHggMCAwOworICAtbW96LWJvcmRlci1yYWRpdXM6IDAgNHB4IDAgMDsK
KyAgYm9yZGVyLXJhZGl1czogMCA0cHggMCAwOworfQorLmJvcmRlcmVkLXRhYmxlIHRib2R5IHRy
Omxhc3QtY2hpbGQgdGQ6Zmlyc3QtY2hpbGQgeworICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDAg
MCAwIDRweDsKKyAgLW1vei1ib3JkZXItcmFkaXVzOiAwIDAgMCA0cHg7CisgIGJvcmRlci1yYWRp
dXM6IDAgMCAwIDRweDsKK30KKy5ib3JkZXJlZC10YWJsZSB0Ym9keSB0cjpsYXN0LWNoaWxkIHRk
Omxhc3QtY2hpbGQgeworICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDAgMCA0cHggMDsKKyAgLW1v
ei1ib3JkZXItcmFkaXVzOiAwIDAgNHB4IDA7CisgIGJvcmRlci1yYWRpdXM6IDAgMCA0cHggMDsK
K30KK3RhYmxlIC5zcGFuMSB7CisgIHdpZHRoOiAyMHB4OworfQordGFibGUgLnNwYW4yIHsKKyAg
d2lkdGg6IDYwcHg7Cit9Cit0YWJsZSAuc3BhbjMgeworICB3aWR0aDogMTAwcHg7Cit9Cit0YWJs
ZSAuc3BhbjQgeworICB3aWR0aDogMTQwcHg7Cit9Cit0YWJsZSAuc3BhbjUgeworICB3aWR0aDog
MTgwcHg7Cit9Cit0YWJsZSAuc3BhbjYgeworICB3aWR0aDogMjIwcHg7Cit9Cit0YWJsZSAuc3Bh
bjcgeworICB3aWR0aDogMjYwcHg7Cit9Cit0YWJsZSAuc3BhbjggeworICB3aWR0aDogMzAwcHg7
Cit9Cit0YWJsZSAuc3BhbjkgeworICB3aWR0aDogMzQwcHg7Cit9Cit0YWJsZSAuc3BhbjEwIHsK
KyAgd2lkdGg6IDM4MHB4OworfQordGFibGUgLnNwYW4xMSB7CisgIHdpZHRoOiA0MjBweDsKK30K
K3RhYmxlIC5zcGFuMTIgeworICB3aWR0aDogNDYwcHg7Cit9Cit0YWJsZSAuc3BhbjEzIHsKKyAg
d2lkdGg6IDUwMHB4OworfQordGFibGUgLnNwYW4xNCB7CisgIHdpZHRoOiA1NDBweDsKK30KK3Rh
YmxlIC5zcGFuMTUgeworICB3aWR0aDogNTgwcHg7Cit9Cit0YWJsZSAuc3BhbjE2IHsKKyAgd2lk
dGg6IDYyMHB4OworfQorLnplYnJhLXN0cmlwZWQgdGJvZHkgdHI6bnRoLWNoaWxkKG9kZCkgdGQs
IC56ZWJyYS1zdHJpcGVkIHRib2R5IHRyOm50aC1jaGlsZChvZGQpIHRoIHsKKyAgYmFja2dyb3Vu
ZC1jb2xvcjogI2Y5ZjlmOTsKK30KKy56ZWJyYS1zdHJpcGVkIHRib2R5IHRyOmhvdmVyIHRkLCAu
emVicmEtc3RyaXBlZCB0Ym9keSB0cjpob3ZlciB0aCB7CisgIGJhY2tncm91bmQtY29sb3I6ICNm
NWY1ZjU7Cit9Cit0YWJsZSAuaGVhZGVyIHsKKyAgY3Vyc29yOiBwb2ludGVyOworfQordGFibGUg
LmhlYWRlcjphZnRlciB7CisgIGNvbnRlbnQ6ICIiOworICBmbG9hdDogcmlnaHQ7CisgIG1hcmdp
bi10b3A6IDdweDsKKyAgYm9yZGVyLXdpZHRoOiAwIDRweCA0cHg7CisgIGJvcmRlci1zdHlsZTog
c29saWQ7CisgIGJvcmRlci1jb2xvcjogIzAwMCB0cmFuc3BhcmVudDsKKyAgdmlzaWJpbGl0eTog
aGlkZGVuOworfQordGFibGUgLmhlYWRlclNvcnRVcCwgdGFibGUgLmhlYWRlclNvcnREb3duIHsK
KyAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgxNDEsIDE5MiwgMjE5LCAwLjI1KTsKKyAgdGV4dC1z
aGFkb3c6IDAgMXB4IDFweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNzUpOworfQordGFibGUgLmhl
YWRlcjpob3ZlcjphZnRlciB7CisgIHZpc2liaWxpdHk6IHZpc2libGU7Cit9Cit0YWJsZSAuaGVh
ZGVyU29ydERvd246YWZ0ZXIsIHRhYmxlIC5oZWFkZXJTb3J0RG93bjpob3ZlcjphZnRlciB7Cisg
IHZpc2liaWxpdHk6IHZpc2libGU7CisgIGZpbHRlcjogYWxwaGEob3BhY2l0eT02MCk7CisgIC1r
aHRtbC1vcGFjaXR5OiAwLjY7CisgIC1tb3otb3BhY2l0eTogMC42OworICBvcGFjaXR5OiAwLjY7
Cit9Cit0YWJsZSAuaGVhZGVyU29ydFVwOmFmdGVyIHsKKyAgYm9yZGVyLWJvdHRvbTogbm9uZTsK
KyAgYm9yZGVyLWxlZnQ6IDRweCBzb2xpZCB0cmFuc3BhcmVudDsKKyAgYm9yZGVyLXJpZ2h0OiA0
cHggc29saWQgdHJhbnNwYXJlbnQ7CisgIGJvcmRlci10b3A6IDRweCBzb2xpZCAjMDAwOworICB2
aXNpYmlsaXR5OiB2aXNpYmxlOworICAtd2Via2l0LWJveC1zaGFkb3c6IG5vbmU7CisgIC1tb3ot
Ym94LXNoYWRvdzogbm9uZTsKKyAgYm94LXNoYWRvdzogbm9uZTsKKyAgZmlsdGVyOiBhbHBoYShv
cGFjaXR5PTYwKTsKKyAgLWtodG1sLW9wYWNpdHk6IDAuNjsKKyAgLW1vei1vcGFjaXR5OiAwLjY7
CisgIG9wYWNpdHk6IDAuNjsKK30KK3RhYmxlIC5ibHVlIHsKKyAgY29sb3I6ICMwNDljZGI7Cisg
IGJvcmRlci1ib3R0b20tY29sb3I6ICMwNDljZGI7Cit9Cit0YWJsZSAuaGVhZGVyU29ydFVwLmJs
dWUsIHRhYmxlIC5oZWFkZXJTb3J0RG93bi5ibHVlIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2Fk
ZTZmZTsKK30KK3RhYmxlIC5ncmVlbiB7CisgIGNvbG9yOiAjNDZhNTQ2OworICBib3JkZXItYm90
dG9tLWNvbG9yOiAjNDZhNTQ2OworfQordGFibGUgLmhlYWRlclNvcnRVcC5ncmVlbiwgdGFibGUg
LmhlYWRlclNvcnREb3duLmdyZWVuIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2NkZWFjZDsKK30K
K3RhYmxlIC5yZWQgeworICBjb2xvcjogIzlkMjYxZDsKKyAgYm9yZGVyLWJvdHRvbS1jb2xvcjog
IzlkMjYxZDsKK30KK3RhYmxlIC5oZWFkZXJTb3J0VXAucmVkLCB0YWJsZSAuaGVhZGVyU29ydERv
d24ucmVkIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2Y0YzhjNTsKK30KK3RhYmxlIC55ZWxsb3cg
eworICBjb2xvcjogI2ZmYzQwZDsKKyAgYm9yZGVyLWJvdHRvbS1jb2xvcjogI2ZmYzQwZDsKK30K
K3RhYmxlIC5oZWFkZXJTb3J0VXAueWVsbG93LCB0YWJsZSAuaGVhZGVyU29ydERvd24ueWVsbG93
IHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjZkOTsKK30KK3RhYmxlIC5vcmFuZ2UgeworICBj
b2xvcjogI2Y4OTQwNjsKKyAgYm9yZGVyLWJvdHRvbS1jb2xvcjogI2Y4OTQwNjsKK30KK3RhYmxl
IC5oZWFkZXJTb3J0VXAub3JhbmdlLCB0YWJsZSAuaGVhZGVyU29ydERvd24ub3JhbmdlIHsKKyAg
YmFja2dyb3VuZC1jb2xvcjogI2ZlZTljYzsKK30KK3RhYmxlIC5wdXJwbGUgeworICBjb2xvcjog
IzdhNDNiNjsKKyAgYm9yZGVyLWJvdHRvbS1jb2xvcjogIzdhNDNiNjsKK30KK3RhYmxlIC5oZWFk
ZXJTb3J0VXAucHVycGxlLCB0YWJsZSAuaGVhZGVyU29ydERvd24ucHVycGxlIHsKKyAgYmFja2dy
b3VuZC1jb2xvcjogI2UyZDVmMDsKK30KKy8qIFBhdHRlcm5zLmxlc3MKKyAqIFJlcGVhdGFibGUg
VUkgZWxlbWVudHMgb3V0c2lkZSB0aGUgYmFzZSBzdHlsZXMgcHJvdmlkZWQgZnJvbSB0aGUgc2Nh
ZmZvbGRpbmcKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy50b3BiYXIgeworICBoZWlnaHQ6
IDQwcHg7CisgIHBvc2l0aW9uOiBmaXhlZDsKKyAgdG9wOiAwOworICBsZWZ0OiAwOworICByaWdo
dDogMDsKKyAgei1pbmRleDogMTAwMDA7CisgIG92ZXJmbG93OiB2aXNpYmxlOworfQorLnRvcGJh
ciBhIHsKKyAgY29sb3I6ICNiZmJmYmY7CisgIHRleHQtc2hhZG93OiAwIC0xcHggMCByZ2JhKDAs
IDAsIDAsIDAuMjUpOworfQorLnRvcGJhciBoMyBhOmhvdmVyLCAudG9wYmFyIC5icmFuZDpob3Zl
ciwgLnRvcGJhciB1bCAuYWN0aXZlID4gYSB7CisgIGJhY2tncm91bmQtY29sb3I6ICMzMzM7Cisg
IGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNSk7CisgIGNvbG9yOiAj
ZmZmZmZmOworICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Cit9CisudG9wYmFyIGgzIHsKKyAgcG9z
aXRpb246IHJlbGF0aXZlOworfQorLnRvcGJhciBoMyBhLCAudG9wYmFyIC5icmFuZCB7CisgIGZs
b2F0OiBsZWZ0OworICBkaXNwbGF5OiBibG9jazsKKyAgcGFkZGluZzogOHB4IDIwcHggMTJweDsK
KyAgbWFyZ2luLWxlZnQ6IC0yMHB4OworICBjb2xvcjogI2ZmZmZmZjsKKyAgZm9udC1zaXplOiAy
MHB4OworICBmb250LXdlaWdodDogMjAwOworICBsaW5lLWhlaWdodDogMTsKK30KKy50b3BiYXIg
cCB7CisgIG1hcmdpbjogMDsKKyAgbGluZS1oZWlnaHQ6IDQwcHg7Cit9CisudG9wYmFyIHAgYTpo
b3ZlciB7CisgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworICBjb2xvcjogI2ZmZmZm
ZjsKK30KKy50b3BiYXIgZm9ybSB7CisgIGZsb2F0OiBsZWZ0OworICBtYXJnaW46IDVweCAwIDAg
MDsKKyAgcG9zaXRpb246IHJlbGF0aXZlOworICBmaWx0ZXI6IGFscGhhKG9wYWNpdHk9MTAwKTsK
KyAgLWtodG1sLW9wYWNpdHk6IDE7CisgIC1tb3otb3BhY2l0eTogMTsKKyAgb3BhY2l0eTogMTsK
K30KKy50b3BiYXIgZm9ybS5wdWxsLXJpZ2h0IHsKKyAgZmxvYXQ6IHJpZ2h0OworfQorLnRvcGJh
ciBpbnB1dCB7CisgIGJhY2tncm91bmQtY29sb3I6ICM0NDQ7CisgIGJhY2tncm91bmQtY29sb3I6
IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4zKTsKKyAgZm9udC1mYW1pbHk6ICJIZWx2ZXRpY2EgTmV1
ZSIsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7CisgIGZvbnQtc2l6ZTogbm9ybWFsOwor
ICBmb250LXdlaWdodDogMTNweDsKKyAgbGluZS1oZWlnaHQ6IDE7CisgIHBhZGRpbmc6IDRweCA5
cHg7CisgIGNvbG9yOiAjZmZmZmZmOworICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjc1
KTsKKyAgYm9yZGVyOiAxcHggc29saWQgIzExMTsKKyAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA0
cHg7CisgIC1tb3otYm9yZGVyLXJhZGl1czogNHB4OworICBib3JkZXItcmFkaXVzOiA0cHg7Cisg
IC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xKSwg
MCAxcHggMHB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNSk7CisgIC1tb3otYm94LXNoYWRvdzog
aW5zZXQgMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xKSwgMCAxcHggMHB4IHJnYmEoMjU1LCAy
NTUsIDI1NSwgMC4yNSk7CisgIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDJweCByZ2JhKDAsIDAs
IDAsIDAuMSksIDAgMXB4IDBweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjUpOworICAtd2Via2l0
LXRyYW5zaXRpb246IG5vbmU7CisgIC1tb3otdHJhbnNpdGlvbjogbm9uZTsKKyAgLW1zLXRyYW5z
aXRpb246IG5vbmU7CisgIC1vLXRyYW5zaXRpb246IG5vbmU7CisgIHRyYW5zaXRpb246IG5vbmU7
Cit9CisudG9wYmFyIGlucHV0Oi1tb3otcGxhY2Vob2xkZXIgeworICBjb2xvcjogI2U2ZTZlNjsK
K30KKy50b3BiYXIgaW5wdXQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIgeworICBjb2xvcjog
I2U2ZTZlNjsKK30KKy50b3BiYXIgaW5wdXQ6aG92ZXIgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAj
YmZiZmJmOworICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7Cisg
IGNvbG9yOiAjZmZmZmZmOworfQorLnRvcGJhciBpbnB1dDpmb2N1cywgLnRvcGJhciBpbnB1dC5m
b2N1c2VkIHsKKyAgb3V0bGluZTogMDsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjsKKyAg
Y29sb3I6ICM0MDQwNDA7CisgIHRleHQtc2hhZG93OiAwIDFweCAwICNmZmZmZmY7CisgIGJvcmRl
cjogMDsKKyAgcGFkZGluZzogNXB4IDEwcHg7CisgIC13ZWJraXQtYm94LXNoYWRvdzogMCAwIDNw
eCByZ2JhKDAsIDAsIDAsIDAuMTUpOworICAtbW96LWJveC1zaGFkb3c6IDAgMCAzcHggcmdiYSgw
LCAwLCAwLCAwLjE1KTsKKyAgYm94LXNoYWRvdzogMCAwIDNweCByZ2JhKDAsIDAsIDAsIDAuMTUp
OworfQorLnRvcGJhci1pbm5lciwgLnRvcGJhciAuZmlsbCB7CisgIGJhY2tncm91bmQtY29sb3I6
ICMyMjI7CisgIGJhY2tncm91bmQtY29sb3I6ICMyMjIyMjI7CisgIGJhY2tncm91bmQtcmVwZWF0
OiByZXBlYXQteDsKKyAgYmFja2dyb3VuZC1pbWFnZTogLWtodG1sLWdyYWRpZW50KGxpbmVhciwg
bGVmdCB0b3AsIGxlZnQgYm90dG9tLCBmcm9tKCMzMzMzMzMpLCB0bygjMjIyMjIyKSk7CisgIGJh
Y2tncm91bmQtaW1hZ2U6IC1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwgIzMzMzMzMywgIzIyMjIy
Mik7CisgIGJhY2tncm91bmQtaW1hZ2U6IC1tcy1saW5lYXItZ3JhZGllbnQodG9wLCAjMzMzMzMz
LCAjMjIyMjIyKTsKKyAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIs
IGxlZnQgdG9wLCBsZWZ0IGJvdHRvbSwgY29sb3Itc3RvcCgwJSwgIzMzMzMzMyksIGNvbG9yLXN0
b3AoMTAwJSwgIzIyMjIyMikpOworICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWxpbmVhci1n
cmFkaWVudCh0b3AsICMzMzMzMzMsICMyMjIyMjIpOworICBiYWNrZ3JvdW5kLWltYWdlOiAtby1s
aW5lYXItZ3JhZGllbnQodG9wLCAjMzMzMzMzLCAjMjIyMjIyKTsKKyAgYmFja2dyb3VuZC1pbWFn
ZTogbGluZWFyLWdyYWRpZW50KHRvcCwgIzMzMzMzMywgIzIyMjIyMik7CisgIGZpbHRlcjogcHJv
Z2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyMz
MzMzMzMnLCBlbmRDb2xvcnN0cj0nIzIyMjIyMicsIEdyYWRpZW50VHlwZT0wKTsKKyAgLXdlYmtp
dC1ib3gtc2hhZG93OiAwIDFweCAzcHggcmdiYSgwLCAwLCAwLCAwLjI1KSwgaW5zZXQgMCAtMXB4
IDAgcmdiYSgwLCAwLCAwLCAwLjEpOworICAtbW96LWJveC1zaGFkb3c6IDAgMXB4IDNweCByZ2Jh
KDAsIDAsIDAsIDAuMjUpLCBpbnNldCAwIC0xcHggMCByZ2JhKDAsIDAsIDAsIDAuMSk7CisgIGJv
eC1zaGFkb3c6IDAgMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMjUpLCBpbnNldCAwIC0xcHggMCBy
Z2JhKDAsIDAsIDAsIDAuMSk7Cit9CisudG9wYmFyIGRpdiA+IHVsLCAubmF2IHsKKyAgZGlzcGxh
eTogYmxvY2s7CisgIGZsb2F0OiBsZWZ0OworICBtYXJnaW46IDAgMTBweCAwIDA7CisgIHBvc2l0
aW9uOiByZWxhdGl2ZTsKKyAgbGVmdDogMDsKK30KKy50b3BiYXIgZGl2ID4gdWwgPiBsaSwgLm5h
diA+IGxpIHsKKyAgZGlzcGxheTogYmxvY2s7CisgIGZsb2F0OiBsZWZ0OworfQorLnRvcGJhciBk
aXYgPiB1bCBhLCAubmF2IGEgeworICBkaXNwbGF5OiBibG9jazsKKyAgZmxvYXQ6IG5vbmU7Cisg
IHBhZGRpbmc6IDEwcHggMTBweCAxMXB4OworICBsaW5lLWhlaWdodDogMTlweDsKKyAgdGV4dC1k
ZWNvcmF0aW9uOiBub25lOworfQorLnRvcGJhciBkaXYgPiB1bCBhOmhvdmVyLCAubmF2IGE6aG92
ZXIgeworICBjb2xvcjogI2ZmZmZmZjsKKyAgdGV4dC1kZWNvcmF0aW9uOiBub25lOworfQorLnRv
cGJhciBkaXYgPiB1bCAuYWN0aXZlID4gYSwgLm5hdiAuYWN0aXZlID4gYSB7CisgIGJhY2tncm91
bmQtY29sb3I6ICMyMjI7CisgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC41KTsK
K30KKy50b3BiYXIgZGl2ID4gdWwuc2Vjb25kYXJ5LW5hdiwgLm5hdi5zZWNvbmRhcnktbmF2IHsK
KyAgZmxvYXQ6IHJpZ2h0OworICBtYXJnaW4tbGVmdDogMTBweDsKKyAgbWFyZ2luLXJpZ2h0OiAw
OworfQorLnRvcGJhciBkaXYgPiB1bC5zZWNvbmRhcnktbmF2IC5tZW51LWRyb3Bkb3duLAorLm5h
di5zZWNvbmRhcnktbmF2IC5tZW51LWRyb3Bkb3duLAorLnRvcGJhciBkaXYgPiB1bC5zZWNvbmRh
cnktbmF2IC5kcm9wZG93bi1tZW51LAorLm5hdi5zZWNvbmRhcnktbmF2IC5kcm9wZG93bi1tZW51
IHsKKyAgcmlnaHQ6IDA7CisgIGJvcmRlcjogMDsKK30KKy50b3BiYXIgZGl2ID4gdWwgYS5tZW51
OmhvdmVyLAorLm5hdiBhLm1lbnU6aG92ZXIsCisudG9wYmFyIGRpdiA+IHVsIGxpLm9wZW4gLm1l
bnUsCisubmF2IGxpLm9wZW4gLm1lbnUsCisudG9wYmFyIGRpdiA+IHVsIC5kcm9wZG93bi10b2dn
bGU6aG92ZXIsCisubmF2IC5kcm9wZG93bi10b2dnbGU6aG92ZXIsCisudG9wYmFyIGRpdiA+IHVs
IC5kcm9wZG93bi5vcGVuIC5kcm9wZG93bi10b2dnbGUsCisubmF2IC5kcm9wZG93bi5vcGVuIC5k
cm9wZG93bi10b2dnbGUgeworICBiYWNrZ3JvdW5kOiAjNDQ0OworICBiYWNrZ3JvdW5kOiByZ2Jh
KDI1NSwgMjU1LCAyNTUsIDAuMDUpOworfQorLnRvcGJhciBkaXYgPiB1bCAubWVudS1kcm9wZG93
biwKKy5uYXYgLm1lbnUtZHJvcGRvd24sCisudG9wYmFyIGRpdiA+IHVsIC5kcm9wZG93bi1tZW51
LAorLm5hdiAuZHJvcGRvd24tbWVudSB7CisgIGJhY2tncm91bmQtY29sb3I6ICMzMzM7Cit9Cisu
dG9wYmFyIGRpdiA+IHVsIC5tZW51LWRyb3Bkb3duIGEubWVudSwKKy5uYXYgLm1lbnUtZHJvcGRv
d24gYS5tZW51LAorLnRvcGJhciBkaXYgPiB1bCAuZHJvcGRvd24tbWVudSBhLm1lbnUsCisubmF2
IC5kcm9wZG93bi1tZW51IGEubWVudSwKKy50b3BiYXIgZGl2ID4gdWwgLm1lbnUtZHJvcGRvd24g
LmRyb3Bkb3duLXRvZ2dsZSwKKy5uYXYgLm1lbnUtZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZSwK
Ky50b3BiYXIgZGl2ID4gdWwgLmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLXRvZ2dsZSwKKy5uYXYg
LmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLXRvZ2dsZSB7CisgIGNvbG9yOiAjZmZmZmZmOworfQor
LnRvcGJhciBkaXYgPiB1bCAubWVudS1kcm9wZG93biBhLm1lbnUub3BlbiwKKy5uYXYgLm1lbnUt
ZHJvcGRvd24gYS5tZW51Lm9wZW4sCisudG9wYmFyIGRpdiA+IHVsIC5kcm9wZG93bi1tZW51IGEu
bWVudS5vcGVuLAorLm5hdiAuZHJvcGRvd24tbWVudSBhLm1lbnUub3BlbiwKKy50b3BiYXIgZGl2
ID4gdWwgLm1lbnUtZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZS5vcGVuLAorLm5hdiAubWVudS1k
cm9wZG93biAuZHJvcGRvd24tdG9nZ2xlLm9wZW4sCisudG9wYmFyIGRpdiA+IHVsIC5kcm9wZG93
bi1tZW51IC5kcm9wZG93bi10b2dnbGUub3BlbiwKKy5uYXYgLmRyb3Bkb3duLW1lbnUgLmRyb3Bk
b3duLXRvZ2dsZS5vcGVuIHsKKyAgYmFja2dyb3VuZDogIzQ0NDsKKyAgYmFja2dyb3VuZDogcmdi
YSgyNTUsIDI1NSwgMjU1LCAwLjA1KTsKK30KKy50b3BiYXIgZGl2ID4gdWwgLm1lbnUtZHJvcGRv
d24gbGkgYSwKKy5uYXYgLm1lbnUtZHJvcGRvd24gbGkgYSwKKy50b3BiYXIgZGl2ID4gdWwgLmRy
b3Bkb3duLW1lbnUgbGkgYSwKKy5uYXYgLmRyb3Bkb3duLW1lbnUgbGkgYSB7CisgIGNvbG9yOiAj
OTk5OworICB0ZXh0LXNoYWRvdzogMCAxcHggMCByZ2JhKDAsIDAsIDAsIDAuNSk7Cit9CisudG9w
YmFyIGRpdiA+IHVsIC5tZW51LWRyb3Bkb3duIGxpIGE6aG92ZXIsCisubmF2IC5tZW51LWRyb3Bk
b3duIGxpIGE6aG92ZXIsCisudG9wYmFyIGRpdiA+IHVsIC5kcm9wZG93bi1tZW51IGxpIGE6aG92
ZXIsCisubmF2IC5kcm9wZG93bi1tZW51IGxpIGE6aG92ZXIgeworICBiYWNrZ3JvdW5kLWNvbG9y
OiAjMTkxOTE5OworICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7CisgIGJhY2tncm91bmQt
aW1hZ2U6IC1raHRtbC1ncmFkaWVudChsaW5lYXIsIGxlZnQgdG9wLCBsZWZ0IGJvdHRvbSwgZnJv
bSgjMjkyOTI5KSwgdG8oIzE5MTkxOSkpOworICBiYWNrZ3JvdW5kLWltYWdlOiAtbW96LWxpbmVh
ci1ncmFkaWVudCh0b3AsICMyOTI5MjksICMxOTE5MTkpOworICBiYWNrZ3JvdW5kLWltYWdlOiAt
bXMtbGluZWFyLWdyYWRpZW50KHRvcCwgIzI5MjkyOSwgIzE5MTkxOSk7CisgIGJhY2tncm91bmQt
aW1hZ2U6IC13ZWJraXQtZ3JhZGllbnQobGluZWFyLCBsZWZ0IHRvcCwgbGVmdCBib3R0b20sIGNv
bG9yLXN0b3AoMCUsICMyOTI5MjkpLCBjb2xvci1zdG9wKDEwMCUsICMxOTE5MTkpKTsKKyAgYmFj
a2dyb3VuZC1pbWFnZTogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCAjMjkyOTI5LCAjMTkx
OTE5KTsKKyAgYmFja2dyb3VuZC1pbWFnZTogLW8tbGluZWFyLWdyYWRpZW50KHRvcCwgIzI5Mjky
OSwgIzE5MTkxOSk7CisgIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0b3AsICMy
OTI5MjksICMxOTE5MTkpOworICBmaWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jv
c29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjMjkyOTI5JywgZW5kQ29sb3JzdHI9JyMxOTE5
MTknLCBHcmFkaWVudFR5cGU9MCk7CisgIGNvbG9yOiAjZmZmZmZmOworfQorLnRvcGJhciBkaXYg
PiB1bCAubWVudS1kcm9wZG93biAuYWN0aXZlIGEsCisubmF2IC5tZW51LWRyb3Bkb3duIC5hY3Rp
dmUgYSwKKy50b3BiYXIgZGl2ID4gdWwgLmRyb3Bkb3duLW1lbnUgLmFjdGl2ZSBhLAorLm5hdiAu
ZHJvcGRvd24tbWVudSAuYWN0aXZlIGEgeworICBjb2xvcjogI2ZmZmZmZjsKK30KKy50b3BiYXIg
ZGl2ID4gdWwgLm1lbnUtZHJvcGRvd24gLmRpdmlkZXIsCisubmF2IC5tZW51LWRyb3Bkb3duIC5k
aXZpZGVyLAorLnRvcGJhciBkaXYgPiB1bCAuZHJvcGRvd24tbWVudSAuZGl2aWRlciwKKy5uYXYg
LmRyb3Bkb3duLW1lbnUgLmRpdmlkZXIgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjIyOworICBi
b3JkZXItY29sb3I6ICM0NDQ7Cit9CisudG9wYmFyIHVsIC5tZW51LWRyb3Bkb3duIGxpIGEsIC50
b3BiYXIgdWwgLmRyb3Bkb3duLW1lbnUgbGkgYSB7CisgIHBhZGRpbmc6IDRweCAxNXB4OworfQor
bGkubWVudSwgLmRyb3Bkb3duIHsKKyAgcG9zaXRpb246IHJlbGF0aXZlOworfQorYS5tZW51OmFm
dGVyLCAuZHJvcGRvd24tdG9nZ2xlOmFmdGVyIHsKKyAgd2lkdGg6IDA7CisgIGhlaWdodDogMDsK
KyAgZGlzcGxheTogaW5saW5lLWJsb2NrOworICBjb250ZW50OiAiJmRhcnI7IjsKKyAgdGV4dC1p
bmRlbnQ6IC05OTk5OXB4OworICB2ZXJ0aWNhbC1hbGlnbjogdG9wOworICBtYXJnaW4tdG9wOiA4
cHg7CisgIG1hcmdpbi1sZWZ0OiA0cHg7CisgIGJvcmRlci1sZWZ0OiA0cHggc29saWQgdHJhbnNw
YXJlbnQ7CisgIGJvcmRlci1yaWdodDogNHB4IHNvbGlkIHRyYW5zcGFyZW50OworICBib3JkZXIt
dG9wOiA0cHggc29saWQgI2ZmZmZmZjsKKyAgZmlsdGVyOiBhbHBoYShvcGFjaXR5PTUwKTsKKyAg
LWtodG1sLW9wYWNpdHk6IDAuNTsKKyAgLW1vei1vcGFjaXR5OiAwLjU7CisgIG9wYWNpdHk6IDAu
NTsKK30KKy5tZW51LWRyb3Bkb3duLCAuZHJvcGRvd24tbWVudSB7CisgIGJhY2tncm91bmQtY29s
b3I6ICNmZmZmZmY7CisgIGZsb2F0OiBsZWZ0OworICBkaXNwbGF5OiBub25lOworICBwb3NpdGlv
bjogYWJzb2x1dGU7CisgIHRvcDogNDBweDsKKyAgei1pbmRleDogOTAwOworICBtaW4td2lkdGg6
IDE2MHB4OworICBtYXgtd2lkdGg6IDIyMHB4OworICBfd2lkdGg6IDE2MHB4OworICBtYXJnaW4t
bGVmdDogMDsKKyAgbWFyZ2luLXJpZ2h0OiAwOworICBwYWRkaW5nOiA2cHggMDsKKyAgem9vbTog
MTsKKyAgYm9yZGVyLWNvbG9yOiAjOTk5OworICBib3JkZXItY29sb3I6IHJnYmEoMCwgMCwgMCwg
MC4yKTsKKyAgYm9yZGVyLXN0eWxlOiBzb2xpZDsKKyAgYm9yZGVyLXdpZHRoOiAwIDFweCAxcHg7
CisgIC13ZWJraXQtYm9yZGVyLXJhZGl1czogMCAwIDZweCA2cHg7CisgIC1tb3otYm9yZGVyLXJh
ZGl1czogMCAwIDZweCA2cHg7CisgIGJvcmRlci1yYWRpdXM6IDAgMCA2cHggNnB4OworICAtd2Vi
a2l0LWJveC1zaGFkb3c6IDAgMnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMik7CisgIC1tb3otYm94
LXNoYWRvdzogMCAycHggNHB4IHJnYmEoMCwgMCwgMCwgMC4yKTsKKyAgYm94LXNoYWRvdzogMCAy
cHggNHB4IHJnYmEoMCwgMCwgMCwgMC4yKTsKKyAgLXdlYmtpdC1iYWNrZ3JvdW5kLWNsaXA6IHBh
ZGRpbmctYm94OworICAtbW96LWJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7CisgIGJhY2tn
cm91bmQtY2xpcDogcGFkZGluZy1ib3g7Cit9CisubWVudS1kcm9wZG93biBsaSwgLmRyb3Bkb3du
LW1lbnUgbGkgeworICBmbG9hdDogbm9uZTsKKyAgZGlzcGxheTogYmxvY2s7CisgIGJhY2tncm91
bmQtY29sb3I6IG5vbmU7Cit9CisubWVudS1kcm9wZG93biAuZGl2aWRlciwgLmRyb3Bkb3duLW1l
bnUgLmRpdmlkZXIgeworICBoZWlnaHQ6IDFweDsKKyAgbWFyZ2luOiA1cHggMDsKKyAgb3ZlcmZs
b3c6IGhpZGRlbjsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2VlZTsKKyAgYm9yZGVyLWJvdHRvbTog
MXB4IHNvbGlkICNmZmZmZmY7Cit9CisudG9wYmFyIC5kcm9wZG93bi1tZW51IGEsIC5kcm9wZG93
bi1tZW51IGEgeworICBkaXNwbGF5OiBibG9jazsKKyAgcGFkZGluZzogNHB4IDE1cHg7CisgIGNs
ZWFyOiBib3RoOworICBmb250LXdlaWdodDogbm9ybWFsOworICBsaW5lLWhlaWdodDogMThweDsK
KyAgY29sb3I6ICM4MDgwODA7CisgIHRleHQtc2hhZG93OiAwIDFweCAwICNmZmZmZmY7Cit9Cisu
dG9wYmFyIC5kcm9wZG93bi1tZW51IGE6aG92ZXIsCisuZHJvcGRvd24tbWVudSBhOmhvdmVyLAor
LnRvcGJhciAuZHJvcGRvd24tbWVudSBhLmhvdmVyLAorLmRyb3Bkb3duLW1lbnUgYS5ob3ZlciB7
CisgIGJhY2tncm91bmQtY29sb3I6ICNkZGRkZGQ7CisgIGJhY2tncm91bmQtcmVwZWF0OiByZXBl
YXQteDsKKyAgYmFja2dyb3VuZC1pbWFnZTogLWtodG1sLWdyYWRpZW50KGxpbmVhciwgbGVmdCB0
b3AsIGxlZnQgYm90dG9tLCBmcm9tKCNlZWVlZWUpLCB0bygjZGRkZGRkKSk7CisgIGJhY2tncm91
bmQtaW1hZ2U6IC1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwgI2VlZWVlZSwgI2RkZGRkZCk7Cisg
IGJhY2tncm91bmQtaW1hZ2U6IC1tcy1saW5lYXItZ3JhZGllbnQodG9wLCAjZWVlZWVlLCAjZGRk
ZGRkKTsKKyAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIGxlZnQg
dG9wLCBsZWZ0IGJvdHRvbSwgY29sb3Itc3RvcCgwJSwgI2VlZWVlZSksIGNvbG9yLXN0b3AoMTAw
JSwgI2RkZGRkZCkpOworICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWxpbmVhci1ncmFkaWVu
dCh0b3AsICNlZWVlZWUsICNkZGRkZGQpOworICBiYWNrZ3JvdW5kLWltYWdlOiAtby1saW5lYXIt
Z3JhZGllbnQodG9wLCAjZWVlZWVlLCAjZGRkZGRkKTsKKyAgYmFja2dyb3VuZC1pbWFnZTogbGlu
ZWFyLWdyYWRpZW50KHRvcCwgI2VlZWVlZSwgI2RkZGRkZCk7CisgIGZpbHRlcjogcHJvZ2lkOkRY
SW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyNlZWVlZWUn
LCBlbmRDb2xvcnN0cj0nI2RkZGRkZCcsIEdyYWRpZW50VHlwZT0wKTsKKyAgY29sb3I6ICM0MDQw
NDA7CisgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKKyAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNl
dCAwIDFweCAwIHJnYmEoMCwgMCwgMCwgMC4wMjUpLCBpbnNldCAwIC0xcHggcmdiYSgwLCAwLCAw
LCAwLjAyNSk7CisgIC1tb3otYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMCByZ2JhKDAsIDAsIDAs
IDAuMDI1KSwgaW5zZXQgMCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4wMjUpOworICBib3gtc2hhZG93
OiBpbnNldCAwIDFweCAwIHJnYmEoMCwgMCwgMCwgMC4wMjUpLCBpbnNldCAwIC0xcHggcmdiYSgw
LCAwLCAwLCAwLjAyNSk7Cit9Cisub3BlbiAubWVudSwKKy5kcm9wZG93bi5vcGVuIC5tZW51LAor
Lm9wZW4gLmRyb3Bkb3duLXRvZ2dsZSwKKy5kcm9wZG93bi5vcGVuIC5kcm9wZG93bi10b2dnbGUg
eworICBjb2xvcjogI2ZmZmZmZjsKKyAgYmFja2dyb3VuZDogI2NjYzsKKyAgYmFja2dyb3VuZDog
cmdiYSgwLCAwLCAwLCAwLjMpOworfQorLm9wZW4gLm1lbnUtZHJvcGRvd24sCisuZHJvcGRvd24u
b3BlbiAubWVudS1kcm9wZG93biwKKy5vcGVuIC5kcm9wZG93bi1tZW51LAorLmRyb3Bkb3duLm9w
ZW4gLmRyb3Bkb3duLW1lbnUgeworICBkaXNwbGF5OiBibG9jazsKK30KKy50YWJzLCAucGlsbHMg
eworICBtYXJnaW46IDAgMCAxOHB4OworICBwYWRkaW5nOiAwOworICBsaXN0LXN0eWxlOiBub25l
OworICB6b29tOiAxOworfQorLnRhYnM6YmVmb3JlLAorLnBpbGxzOmJlZm9yZSwKKy50YWJzOmFm
dGVyLAorLnBpbGxzOmFmdGVyIHsKKyAgZGlzcGxheTogdGFibGU7CisgIGNvbnRlbnQ6ICIiOwor
ICB6b29tOiAxOworfQorLnRhYnM6YWZ0ZXIsIC5waWxsczphZnRlciB7CisgIGNsZWFyOiBib3Ro
OworfQorLnRhYnMgPiBsaSwgLnBpbGxzID4gbGkgeworICBmbG9hdDogbGVmdDsKK30KKy50YWJz
ID4gbGkgPiBhLCAucGlsbHMgPiBsaSA+IGEgeworICBkaXNwbGF5OiBibG9jazsKK30KKy50YWJz
IHsKKyAgYm9yZGVyLWNvbG9yOiAjZGRkOworICBib3JkZXItc3R5bGU6IHNvbGlkOworICBib3Jk
ZXItd2lkdGg6IDAgMCAxcHg7Cit9CisudGFicyA+IGxpIHsKKyAgcG9zaXRpb246IHJlbGF0aXZl
OworICBtYXJnaW4tYm90dG9tOiAtMXB4OworfQorLnRhYnMgPiBsaSA+IGEgeworICBwYWRkaW5n
OiAwIDE1cHg7CisgIG1hcmdpbi1yaWdodDogMnB4OworICBsaW5lLWhlaWdodDogMzRweDsKKyAg
Ym9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7CisgIC13ZWJraXQtYm9yZGVyLXJhZGl1czog
NHB4IDRweCAwIDA7CisgIC1tb3otYm9yZGVyLXJhZGl1czogNHB4IDRweCAwIDA7CisgIGJvcmRl
ci1yYWRpdXM6IDRweCA0cHggMCAwOworfQorLnRhYnMgPiBsaSA+IGE6aG92ZXIgeworICB0ZXh0
LWRlY29yYXRpb246IG5vbmU7CisgIGJhY2tncm91bmQtY29sb3I6ICNlZWU7CisgIGJvcmRlci1j
b2xvcjogI2VlZSAjZWVlICNkZGQ7Cit9CisudGFicyAuYWN0aXZlID4gYSwgLnRhYnMgLmFjdGl2
ZSA+IGE6aG92ZXIgeworICBjb2xvcjogIzgwODA4MDsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2Zm
ZmZmZjsKKyAgYm9yZGVyOiAxcHggc29saWQgI2RkZDsKKyAgYm9yZGVyLWJvdHRvbS1jb2xvcjog
dHJhbnNwYXJlbnQ7CisgIGN1cnNvcjogZGVmYXVsdDsKK30KKy50YWJzIC5tZW51LWRyb3Bkb3du
LCAudGFicyAuZHJvcGRvd24tbWVudSB7CisgIHRvcDogMzVweDsKKyAgYm9yZGVyLXdpZHRoOiAx
cHg7CisgIC13ZWJraXQtYm9yZGVyLXJhZGl1czogMCA2cHggNnB4IDZweDsKKyAgLW1vei1ib3Jk
ZXItcmFkaXVzOiAwIDZweCA2cHggNnB4OworICBib3JkZXItcmFkaXVzOiAwIDZweCA2cHggNnB4
OworfQorLnRhYnMgYS5tZW51OmFmdGVyLCAudGFicyAuZHJvcGRvd24tdG9nZ2xlOmFmdGVyIHsK
KyAgYm9yZGVyLXRvcC1jb2xvcjogIzk5OTsKKyAgbWFyZ2luLXRvcDogMTVweDsKKyAgbWFyZ2lu
LWxlZnQ6IDVweDsKK30KKy50YWJzIGxpLm9wZW4ubWVudSAubWVudSwgLnRhYnMgLm9wZW4uZHJv
cGRvd24gLmRyb3Bkb3duLXRvZ2dsZSB7CisgIGJvcmRlci1jb2xvcjogIzk5OTsKK30KKy50YWJz
IGxpLm9wZW4gYS5tZW51OmFmdGVyLCAudGFicyAuZHJvcGRvd24ub3BlbiAuZHJvcGRvd24tdG9n
Z2xlOmFmdGVyIHsKKyAgYm9yZGVyLXRvcC1jb2xvcjogIzU1NTsKK30KKy5waWxscyBhIHsKKyAg
bWFyZ2luOiA1cHggM3B4IDVweCAwOworICBwYWRkaW5nOiAwIDE1cHg7CisgIGxpbmUtaGVpZ2h0
OiAzMHB4OworICB0ZXh0LXNoYWRvdzogMCAxcHggMXB4ICNmZmZmZmY7CisgIC13ZWJraXQtYm9y
ZGVyLXJhZGl1czogMTVweDsKKyAgLW1vei1ib3JkZXItcmFkaXVzOiAxNXB4OworICBib3JkZXIt
cmFkaXVzOiAxNXB4OworfQorLnBpbGxzIGE6aG92ZXIgeworICBjb2xvcjogI2ZmZmZmZjsKKyAg
dGV4dC1kZWNvcmF0aW9uOiBub25lOworICB0ZXh0LXNoYWRvdzogMCAxcHggMXB4IHJnYmEoMCwg
MCwgMCwgMC4yNSk7CisgIGJhY2tncm91bmQtY29sb3I6ICMwMDQzOGE7Cit9CisucGlsbHMgLmFj
dGl2ZSBhIHsKKyAgY29sb3I6ICNmZmZmZmY7CisgIHRleHQtc2hhZG93OiAwIDFweCAxcHggcmdi
YSgwLCAwLCAwLCAwLjI1KTsKKyAgYmFja2dyb3VuZC1jb2xvcjogIzAwNjlkNjsKK30KKy5waWxs
cy12ZXJ0aWNhbCA+IGxpIHsKKyAgZmxvYXQ6IG5vbmU7Cit9CisudGFiLWNvbnRlbnQgPiAudGFi
LXBhbmUsCisucGlsbC1jb250ZW50ID4gLnBpbGwtcGFuZSwKKy50YWItY29udGVudCA+IGRpdiwK
Ky5waWxsLWNvbnRlbnQgPiBkaXYgeworICBkaXNwbGF5OiBub25lOworfQorLnRhYi1jb250ZW50
ID4gLmFjdGl2ZSwgLnBpbGwtY29udGVudCA+IC5hY3RpdmUgeworICBkaXNwbGF5OiBibG9jazsK
K30KKy5icmVhZGNydW1iIHsKKyAgcGFkZGluZzogN3B4IDE0cHg7CisgIG1hcmdpbjogMCAwIDE4
cHg7CisgIGJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7CisgIGJhY2tncm91bmQtcmVwZWF0OiBy
ZXBlYXQteDsKKyAgYmFja2dyb3VuZC1pbWFnZTogLWtodG1sLWdyYWRpZW50KGxpbmVhciwgbGVm
dCB0b3AsIGxlZnQgYm90dG9tLCBmcm9tKCNmZmZmZmYpLCB0bygjZjVmNWY1KSk7CisgIGJhY2tn
cm91bmQtaW1hZ2U6IC1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwgI2ZmZmZmZiwgI2Y1ZjVmNSk7
CisgIGJhY2tncm91bmQtaW1hZ2U6IC1tcy1saW5lYXItZ3JhZGllbnQodG9wLCAjZmZmZmZmLCAj
ZjVmNWY1KTsKKyAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIGxl
ZnQgdG9wLCBsZWZ0IGJvdHRvbSwgY29sb3Itc3RvcCgwJSwgI2ZmZmZmZiksIGNvbG9yLXN0b3Ao
MTAwJSwgI2Y1ZjVmNSkpOworICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWxpbmVhci1ncmFk
aWVudCh0b3AsICNmZmZmZmYsICNmNWY1ZjUpOworICBiYWNrZ3JvdW5kLWltYWdlOiAtby1saW5l
YXItZ3JhZGllbnQodG9wLCAjZmZmZmZmLCAjZjVmNWY1KTsKKyAgYmFja2dyb3VuZC1pbWFnZTog
bGluZWFyLWdyYWRpZW50KHRvcCwgI2ZmZmZmZiwgI2Y1ZjVmNSk7CisgIGZpbHRlcjogcHJvZ2lk
OkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyNmZmZm
ZmYnLCBlbmRDb2xvcnN0cj0nI2Y1ZjVmNScsIEdyYWRpZW50VHlwZT0wKTsKKyAgYm9yZGVyOiAx
cHggc29saWQgI2RkZDsKKyAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAzcHg7CisgIC1tb3otYm9y
ZGVyLXJhZGl1czogM3B4OworICBib3JkZXItcmFkaXVzOiAzcHg7CisgIC13ZWJraXQtYm94LXNo
YWRvdzogaW5zZXQgMCAxcHggMCAjZmZmZmZmOworICAtbW96LWJveC1zaGFkb3c6IGluc2V0IDAg
MXB4IDAgI2ZmZmZmZjsKKyAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMCAjZmZmZmZmOworfQor
LmJyZWFkY3J1bWIgbGkgeworICBkaXNwbGF5OiBpbmxpbmU7CisgIHRleHQtc2hhZG93OiAwIDFw
eCAwICNmZmZmZmY7Cit9CisuYnJlYWRjcnVtYiAuZGl2aWRlciB7CisgIHBhZGRpbmc6IDAgNXB4
OworICBjb2xvcjogI2JmYmZiZjsKK30KKy5icmVhZGNydW1iIC5hY3RpdmUgYSB7CisgIGNvbG9y
OiAjNDA0MDQwOworfQorLmhlcm8tdW5pdCB7CisgIGJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7
CisgIG1hcmdpbi1ib3R0b206IDMwcHg7CisgIHBhZGRpbmc6IDYwcHg7CisgIC13ZWJraXQtYm9y
ZGVyLXJhZGl1czogNnB4OworICAtbW96LWJvcmRlci1yYWRpdXM6IDZweDsKKyAgYm9yZGVyLXJh
ZGl1czogNnB4OworfQorLmhlcm8tdW5pdCBoMSB7CisgIG1hcmdpbi1ib3R0b206IDA7CisgIGZv
bnQtc2l6ZTogNjBweDsKKyAgbGluZS1oZWlnaHQ6IDE7CisgIGxldHRlci1zcGFjaW5nOiAtMXB4
OworfQorLmhlcm8tdW5pdCBwIHsKKyAgZm9udC1zaXplOiAxOHB4OworICBmb250LXdlaWdodDog
MjAwOworICBsaW5lLWhlaWdodDogMjdweDsKK30KK2Zvb3RlciB7CisgIG1hcmdpbi10b3A6IDE3
cHg7CisgIHBhZGRpbmctdG9wOiAxN3B4OworICBib3JkZXItdG9wOiAxcHggc29saWQgI2VlZTsK
K30KKy5wYWdlLWhlYWRlciB7CisgIG1hcmdpbi1ib3R0b206IDE3cHg7CisgIGJvcmRlci1ib3R0
b206IDFweCBzb2xpZCAjZGRkOworICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMXB4IDAgcmdiYSgy
NTUsIDI1NSwgMjU1LCAwLjUpOworICAtbW96LWJveC1zaGFkb3c6IDAgMXB4IDAgcmdiYSgyNTUs
IDI1NSwgMjU1LCAwLjUpOworICBib3gtc2hhZG93OiAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1
NSwgMC41KTsKK30KKy5wYWdlLWhlYWRlciBoMSB7CisgIG1hcmdpbi1ib3R0b206IDhweDsKK30K
Ky5idG4uZGFuZ2VyLAorLmFsZXJ0LW1lc3NhZ2UuZGFuZ2VyLAorLmJ0bi5kYW5nZXI6aG92ZXIs
CisuYWxlcnQtbWVzc2FnZS5kYW5nZXI6aG92ZXIsCisuYnRuLmVycm9yLAorLmFsZXJ0LW1lc3Nh
Z2UuZXJyb3IsCisuYnRuLmVycm9yOmhvdmVyLAorLmFsZXJ0LW1lc3NhZ2UuZXJyb3I6aG92ZXIs
CisuYnRuLnN1Y2Nlc3MsCisuYWxlcnQtbWVzc2FnZS5zdWNjZXNzLAorLmJ0bi5zdWNjZXNzOmhv
dmVyLAorLmFsZXJ0LW1lc3NhZ2Uuc3VjY2Vzczpob3ZlciwKKy5idG4uaW5mbywKKy5hbGVydC1t
ZXNzYWdlLmluZm8sCisuYnRuLmluZm86aG92ZXIsCisuYWxlcnQtbWVzc2FnZS5pbmZvOmhvdmVy
IHsKKyAgY29sb3I6ICNmZmZmZmY7Cit9CisuYnRuIC5jbG9zZSwgLmFsZXJ0LW1lc3NhZ2UgLmNs
b3NlIHsKKyAgZm9udC1mYW1pbHk6IEFyaWFsLCBzYW5zLXNlcmlmOworICBsaW5lLWhlaWdodDog
MThweDsKK30KKy5idG4uZGFuZ2VyLAorLmFsZXJ0LW1lc3NhZ2UuZGFuZ2VyLAorLmJ0bi5lcnJv
ciwKKy5hbGVydC1tZXNzYWdlLmVycm9yIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2M0M2MzNTsK
KyAgYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdC14OworICBiYWNrZ3JvdW5kLWltYWdlOiAta2h0
bWwtZ3JhZGllbnQobGluZWFyLCBsZWZ0IHRvcCwgbGVmdCBib3R0b20sIGZyb20oI2VlNWY1Yiks
IHRvKCNjNDNjMzUpKTsKKyAgYmFja2dyb3VuZC1pbWFnZTogLW1vei1saW5lYXItZ3JhZGllbnQo
dG9wLCAjZWU1ZjViLCAjYzQzYzM1KTsKKyAgYmFja2dyb3VuZC1pbWFnZTogLW1zLWxpbmVhci1n
cmFkaWVudCh0b3AsICNlZTVmNWIsICNjNDNjMzUpOworICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Vi
a2l0LWdyYWRpZW50KGxpbmVhciwgbGVmdCB0b3AsIGxlZnQgYm90dG9tLCBjb2xvci1zdG9wKDAl
LCAjZWU1ZjViKSwgY29sb3Itc3RvcCgxMDAlLCAjYzQzYzM1KSk7CisgIGJhY2tncm91bmQtaW1h
Z2U6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwgI2VlNWY1YiwgI2M0M2MzNSk7CisgIGJh
Y2tncm91bmQtaW1hZ2U6IC1vLWxpbmVhci1ncmFkaWVudCh0b3AsICNlZTVmNWIsICNjNDNjMzUp
OworICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG9wLCAjZWU1ZjViLCAjYzQz
YzM1KTsKKyAgZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGll
bnQoc3RhcnRDb2xvcnN0cj0nI2VlNWY1YicsIGVuZENvbG9yc3RyPScjYzQzYzM1JywgR3JhZGll
bnRUeXBlPTApOworICB0ZXh0LXNoYWRvdzogMCAtMXB4IDAgcmdiYSgwLCAwLCAwLCAwLjI1KTsK
KyAgYm9yZGVyLWNvbG9yOiAjYzQzYzM1ICNjNDNjMzUgIzg4MmEyNTsKKyAgYm9yZGVyLWNvbG9y
OiByZ2JhKDAsIDAsIDAsIDAuMSkgcmdiYSgwLCAwLCAwLCAwLjEpIHJnYmEoMCwgMCwgMCwgMC4y
NSk7Cit9CisuYnRuLnN1Y2Nlc3MsIC5hbGVydC1tZXNzYWdlLnN1Y2Nlc3MgeworICBiYWNrZ3Jv
dW5kLWNvbG9yOiAjNTdhOTU3OworICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7CisgIGJh
Y2tncm91bmQtaW1hZ2U6IC1raHRtbC1ncmFkaWVudChsaW5lYXIsIGxlZnQgdG9wLCBsZWZ0IGJv
dHRvbSwgZnJvbSgjNjJjNDYyKSwgdG8oIzU3YTk1NykpOworICBiYWNrZ3JvdW5kLWltYWdlOiAt
bW96LWxpbmVhci1ncmFkaWVudCh0b3AsICM2MmM0NjIsICM1N2E5NTcpOworICBiYWNrZ3JvdW5k
LWltYWdlOiAtbXMtbGluZWFyLWdyYWRpZW50KHRvcCwgIzYyYzQ2MiwgIzU3YTk1Nyk7CisgIGJh
Y2tncm91bmQtaW1hZ2U6IC13ZWJraXQtZ3JhZGllbnQobGluZWFyLCBsZWZ0IHRvcCwgbGVmdCBi
b3R0b20sIGNvbG9yLXN0b3AoMCUsICM2MmM0NjIpLCBjb2xvci1zdG9wKDEwMCUsICM1N2E5NTcp
KTsKKyAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCAjNjJj
NDYyLCAjNTdhOTU3KTsKKyAgYmFja2dyb3VuZC1pbWFnZTogLW8tbGluZWFyLWdyYWRpZW50KHRv
cCwgIzYyYzQ2MiwgIzU3YTk1Nyk7CisgIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVu
dCh0b3AsICM2MmM0NjIsICM1N2E5NTcpOworICBmaWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNm
b3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjNjJjNDYyJywgZW5kQ29sb3Jz
dHI9JyM1N2E5NTcnLCBHcmFkaWVudFR5cGU9MCk7CisgIHRleHQtc2hhZG93OiAwIC0xcHggMCBy
Z2JhKDAsIDAsIDAsIDAuMjUpOworICBib3JkZXItY29sb3I6ICM1N2E5NTcgIzU3YTk1NyAjM2Q3
NzNkOworICBib3JkZXItY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4xKSByZ2JhKDAsIDAsIDAsIDAu
MSkgcmdiYSgwLCAwLCAwLCAwLjI1KTsKK30KKy5idG4uaW5mbywgLmFsZXJ0LW1lc3NhZ2UuaW5m
byB7CisgIGJhY2tncm91bmQtY29sb3I6ICMzMzliYjk7CisgIGJhY2tncm91bmQtcmVwZWF0OiBy
ZXBlYXQteDsKKyAgYmFja2dyb3VuZC1pbWFnZTogLWtodG1sLWdyYWRpZW50KGxpbmVhciwgbGVm
dCB0b3AsIGxlZnQgYm90dG9tLCBmcm9tKCM1YmMwZGUpLCB0bygjMzM5YmI5KSk7CisgIGJhY2tn
cm91bmQtaW1hZ2U6IC1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwgIzViYzBkZSwgIzMzOWJiOSk7
CisgIGJhY2tncm91bmQtaW1hZ2U6IC1tcy1saW5lYXItZ3JhZGllbnQodG9wLCAjNWJjMGRlLCAj
MzM5YmI5KTsKKyAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIGxl
ZnQgdG9wLCBsZWZ0IGJvdHRvbSwgY29sb3Itc3RvcCgwJSwgIzViYzBkZSksIGNvbG9yLXN0b3Ao
MTAwJSwgIzMzOWJiOSkpOworICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWxpbmVhci1ncmFk
aWVudCh0b3AsICM1YmMwZGUsICMzMzliYjkpOworICBiYWNrZ3JvdW5kLWltYWdlOiAtby1saW5l
YXItZ3JhZGllbnQodG9wLCAjNWJjMGRlLCAjMzM5YmI5KTsKKyAgYmFja2dyb3VuZC1pbWFnZTog
bGluZWFyLWdyYWRpZW50KHRvcCwgIzViYzBkZSwgIzMzOWJiOSk7CisgIGZpbHRlcjogcHJvZ2lk
OkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyM1YmMw
ZGUnLCBlbmRDb2xvcnN0cj0nIzMzOWJiOScsIEdyYWRpZW50VHlwZT0wKTsKKyAgdGV4dC1zaGFk
b3c6IDAgLTFweCAwIHJnYmEoMCwgMCwgMCwgMC4yNSk7CisgIGJvcmRlci1jb2xvcjogIzMzOWJi
OSAjMzM5YmI5ICMyMjY5N2Q7CisgIGJvcmRlci1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjEpIHJn
YmEoMCwgMCwgMCwgMC4xKSByZ2JhKDAsIDAsIDAsIDAuMjUpOworfQorLmJ0biB7CisgIGN1cnNv
cjogcG9pbnRlcjsKKyAgZGlzcGxheTogaW5saW5lLWJsb2NrOworICBiYWNrZ3JvdW5kLWNvbG9y
OiAjZTZlNmU2OworICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OworICBiYWNrZ3JvdW5k
LWltYWdlOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgMCAwLCAwIDEwMCUsIGZyb20oI2ZmZmZm
ZiksIGNvbG9yLXN0b3AoMjUlLCAjZmZmZmZmKSwgdG8oI2U2ZTZlNikpOworICBiYWNrZ3JvdW5k
LWltYWdlOiAtd2Via2l0LWxpbmVhci1ncmFkaWVudCgjZmZmZmZmLCAjZmZmZmZmIDI1JSwgI2U2
ZTZlNik7CisgIGJhY2tncm91bmQtaW1hZ2U6IC1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwgI2Zm
ZmZmZiwgI2ZmZmZmZiAyNSUsICNlNmU2ZTYpOworICBiYWNrZ3JvdW5kLWltYWdlOiAtbXMtbGlu
ZWFyLWdyYWRpZW50KCNmZmZmZmYsICNmZmZmZmYgMjUlLCAjZTZlNmU2KTsKKyAgYmFja2dyb3Vu
ZC1pbWFnZTogLW8tbGluZWFyLWdyYWRpZW50KCNmZmZmZmYsICNmZmZmZmYgMjUlLCAjZTZlNmU2
KTsKKyAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KCNmZmZmZmYsICNmZmZmZmYg
MjUlLCAjZTZlNmU2KTsKKyAgZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3Nv
ZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI2ZmZmZmZicsIGVuZENvbG9yc3RyPScjZTZlNmU2
JywgR3JhZGllbnRUeXBlPTApOworICBwYWRkaW5nOiA1cHggMTRweCA2cHg7CisgIHRleHQtc2hh
ZG93OiAwIDFweCAxcHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjc1KTsKKyAgY29sb3I6ICMzMzM7
CisgIGZvbnQtc2l6ZTogMTNweDsKKyAgbGluZS1oZWlnaHQ6IG5vcm1hbDsKKyAgYm9yZGVyOiAx
cHggc29saWQgI2NjYzsKKyAgYm9yZGVyLWJvdHRvbS1jb2xvcjogI2JiYjsKKyAgLXdlYmtpdC1i
b3JkZXItcmFkaXVzOiA0cHg7CisgIC1tb3otYm9yZGVyLXJhZGl1czogNHB4OworICBib3JkZXIt
cmFkaXVzOiA0cHg7CisgIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMCByZ2JhKDI1
NSwgMjU1LCAyNTUsIDAuMiksIDAgMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMDUpOworICAtbW96
LWJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpLCAwIDFw
eCAycHggcmdiYSgwLCAwLCAwLCAwLjA1KTsKKyAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMCBy
Z2JhKDI1NSwgMjU1LCAyNTUsIDAuMiksIDAgMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMDUpOwor
ICAtd2Via2l0LXRyYW5zaXRpb246IDAuMXMgbGluZWFyIGFsbDsKKyAgLW1vei10cmFuc2l0aW9u
OiAwLjFzIGxpbmVhciBhbGw7CisgIC1tcy10cmFuc2l0aW9uOiAwLjFzIGxpbmVhciBhbGw7Cisg
IC1vLXRyYW5zaXRpb246IDAuMXMgbGluZWFyIGFsbDsKKyAgdHJhbnNpdGlvbjogMC4xcyBsaW5l
YXIgYWxsOworfQorLmJ0bjpob3ZlciB7CisgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTE1cHg7
CisgIGNvbG9yOiAjMzMzOworICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Cit9CisuYnRuOmZvY3Vz
IHsKKyAgb3V0bGluZTogMXB4IGRvdHRlZCAjNjY2OworfQorLmJ0bi5wcmltYXJ5IHsKKyAgY29s
b3I6ICNmZmZmZmY7CisgIGJhY2tncm91bmQtY29sb3I6ICMwMDY0Y2Q7CisgIGJhY2tncm91bmQt
cmVwZWF0OiByZXBlYXQteDsKKyAgYmFja2dyb3VuZC1pbWFnZTogLWtodG1sLWdyYWRpZW50KGxp
bmVhciwgbGVmdCB0b3AsIGxlZnQgYm90dG9tLCBmcm9tKCMwNDljZGIpLCB0bygjMDA2NGNkKSk7
CisgIGJhY2tncm91bmQtaW1hZ2U6IC1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwgIzA0OWNkYiwg
IzAwNjRjZCk7CisgIGJhY2tncm91bmQtaW1hZ2U6IC1tcy1saW5lYXItZ3JhZGllbnQodG9wLCAj
MDQ5Y2RiLCAjMDA2NGNkKTsKKyAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1ncmFkaWVudChs
aW5lYXIsIGxlZnQgdG9wLCBsZWZ0IGJvdHRvbSwgY29sb3Itc3RvcCgwJSwgIzA0OWNkYiksIGNv
bG9yLXN0b3AoMTAwJSwgIzAwNjRjZCkpOworICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWxp
bmVhci1ncmFkaWVudCh0b3AsICMwNDljZGIsICMwMDY0Y2QpOworICBiYWNrZ3JvdW5kLWltYWdl
OiAtby1saW5lYXItZ3JhZGllbnQodG9wLCAjMDQ5Y2RiLCAjMDA2NGNkKTsKKyAgYmFja2dyb3Vu
ZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KHRvcCwgIzA0OWNkYiwgIzAwNjRjZCk7CisgIGZpbHRl
cjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3Jz
dHI9JyMwNDljZGInLCBlbmRDb2xvcnN0cj0nIzAwNjRjZCcsIEdyYWRpZW50VHlwZT0wKTsKKyAg
dGV4dC1zaGFkb3c6IDAgLTFweCAwIHJnYmEoMCwgMCwgMCwgMC4yNSk7CisgIGJvcmRlci1jb2xv
cjogIzAwNjRjZCAjMDA2NGNkICMwMDNmODE7CisgIGJvcmRlci1jb2xvcjogcmdiYSgwLCAwLCAw
LCAwLjEpIHJnYmEoMCwgMCwgMCwgMC4xKSByZ2JhKDAsIDAsIDAsIDAuMjUpOworfQorLmJ0bi5h
Y3RpdmUsIC5idG46YWN0aXZlIHsKKyAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAwIDJweCA0
cHggcmdiYSgwLCAwLCAwLCAwLjI1KSwgMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4wNSk7Cisg
IC1tb3otYm94LXNoYWRvdzogaW5zZXQgMCAycHggNHB4IHJnYmEoMCwgMCwgMCwgMC4yNSksIDAg
MXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMDUpOworICBib3gtc2hhZG93OiBpbnNldCAwIDJweCA0
cHggcmdiYSgwLCAwLCAwLCAwLjI1KSwgMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4wNSk7Cit9
CisuYnRuLmRpc2FibGVkIHsKKyAgY3Vyc29yOiBkZWZhdWx0OworICBiYWNrZ3JvdW5kLWltYWdl
OiBub25lOworICBmaWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFk
aWVudChlbmFibGVkID0gZmFsc2UpOworICBmaWx0ZXI6IGFscGhhKG9wYWNpdHk9NjUpOworICAt
a2h0bWwtb3BhY2l0eTogMC42NTsKKyAgLW1vei1vcGFjaXR5OiAwLjY1OworICBvcGFjaXR5OiAw
LjY1OworICAtd2Via2l0LWJveC1zaGFkb3c6IG5vbmU7CisgIC1tb3otYm94LXNoYWRvdzogbm9u
ZTsKKyAgYm94LXNoYWRvdzogbm9uZTsKK30KKy5idG5bZGlzYWJsZWRdIHsKKyAgY3Vyc29yOiBk
ZWZhdWx0OworICBiYWNrZ3JvdW5kLWltYWdlOiBub25lOworICBmaWx0ZXI6IHByb2dpZDpEWElt
YWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChlbmFibGVkID0gZmFsc2UpOworICBmaWx0
ZXI6IGFscGhhKG9wYWNpdHk9NjUpOworICAta2h0bWwtb3BhY2l0eTogMC42NTsKKyAgLW1vei1v
cGFjaXR5OiAwLjY1OworICBvcGFjaXR5OiAwLjY1OworICAtd2Via2l0LWJveC1zaGFkb3c6IG5v
bmU7CisgIC1tb3otYm94LXNoYWRvdzogbm9uZTsKKyAgYm94LXNoYWRvdzogbm9uZTsKK30KKy5i
dG4ubGFyZ2UgeworICBmb250LXNpemU6IDE1cHg7CisgIGxpbmUtaGVpZ2h0OiBub3JtYWw7Cisg
IHBhZGRpbmc6IDlweCAxNHB4IDlweDsKKyAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA2cHg7Cisg
IC1tb3otYm9yZGVyLXJhZGl1czogNnB4OworICBib3JkZXItcmFkaXVzOiA2cHg7Cit9CisuYnRu
LnNtYWxsIHsKKyAgcGFkZGluZzogN3B4IDlweCA3cHg7CisgIGZvbnQtc2l6ZTogMTFweDsKK30K
Kzpyb290IC5hbGVydC1tZXNzYWdlLCA6cm9vdCAuYnRuIHsKKyAgYm9yZGVyLXJhZGl1czogMCBc
MDsKK30KK2J1dHRvbi5idG46Oi1tb3otZm9jdXMtaW5uZXIsIGlucHV0W3R5cGU9c3VibWl0XS5i
dG46Oi1tb3otZm9jdXMtaW5uZXIgeworICBwYWRkaW5nOiAwOworICBib3JkZXI6IDA7Cit9Cisu
Y2xvc2UgeworICBmbG9hdDogcmlnaHQ7CisgIGNvbG9yOiAjMDAwMDAwOworICBmb250LXNpemU6
IDIwcHg7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworICBsaW5lLWhlaWdodDogMTMuNXB4OworICB0
ZXh0LXNoYWRvdzogMCAxcHggMCAjZmZmZmZmOworICBmaWx0ZXI6IGFscGhhKG9wYWNpdHk9MjUp
OworICAta2h0bWwtb3BhY2l0eTogMC4yNTsKKyAgLW1vei1vcGFjaXR5OiAwLjI1OworICBvcGFj
aXR5OiAwLjI1OworfQorLmNsb3NlOmhvdmVyIHsKKyAgY29sb3I6ICMwMDAwMDA7CisgIHRleHQt
ZGVjb3JhdGlvbjogbm9uZTsKKyAgZmlsdGVyOiBhbHBoYShvcGFjaXR5PTQwKTsKKyAgLWtodG1s
LW9wYWNpdHk6IDAuNDsKKyAgLW1vei1vcGFjaXR5OiAwLjQ7CisgIG9wYWNpdHk6IDAuNDsKK30K
Ky5hbGVydC1tZXNzYWdlIHsKKyAgcG9zaXRpb246IHJlbGF0aXZlOworICBwYWRkaW5nOiA3cHgg
MTVweDsKKyAgbWFyZ2luLWJvdHRvbTogMThweDsKKyAgY29sb3I6ICM0MDQwNDA7CisgIGJhY2tn
cm91bmQtY29sb3I6ICNlZWRjOTQ7CisgIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDsKKyAg
YmFja2dyb3VuZC1pbWFnZTogLWtodG1sLWdyYWRpZW50KGxpbmVhciwgbGVmdCB0b3AsIGxlZnQg
Ym90dG9tLCBmcm9tKCNmY2VlYzEpLCB0bygjZWVkYzk0KSk7CisgIGJhY2tncm91bmQtaW1hZ2U6
IC1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwgI2ZjZWVjMSwgI2VlZGM5NCk7CisgIGJhY2tncm91
bmQtaW1hZ2U6IC1tcy1saW5lYXItZ3JhZGllbnQodG9wLCAjZmNlZWMxLCAjZWVkYzk0KTsKKyAg
YmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIGxlZnQgdG9wLCBsZWZ0
IGJvdHRvbSwgY29sb3Itc3RvcCgwJSwgI2ZjZWVjMSksIGNvbG9yLXN0b3AoMTAwJSwgI2VlZGM5
NCkpOworICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AsICNm
Y2VlYzEsICNlZWRjOTQpOworICBiYWNrZ3JvdW5kLWltYWdlOiAtby1saW5lYXItZ3JhZGllbnQo
dG9wLCAjZmNlZWMxLCAjZWVkYzk0KTsKKyAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRp
ZW50KHRvcCwgI2ZjZWVjMSwgI2VlZGM5NCk7CisgIGZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFu
c2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyNmY2VlYzEnLCBlbmRDb2xv
cnN0cj0nI2VlZGM5NCcsIEdyYWRpZW50VHlwZT0wKTsKKyAgdGV4dC1zaGFkb3c6IDAgLTFweCAw
IHJnYmEoMCwgMCwgMCwgMC4yNSk7CisgIGJvcmRlci1jb2xvcjogI2VlZGM5NCAjZWVkYzk0ICNl
NGM2NTI7CisgIGJvcmRlci1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjEpIHJnYmEoMCwgMCwgMCwg
MC4xKSByZ2JhKDAsIDAsIDAsIDAuMjUpOworICB0ZXh0LXNoYWRvdzogMCAxcHggMCByZ2JhKDI1
NSwgMjU1LCAyNTUsIDAuNSk7CisgIGJvcmRlci13aWR0aDogMXB4OworICBib3JkZXItc3R5bGU6
IHNvbGlkOworICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDRweDsKKyAgLW1vei1ib3JkZXItcmFk
aXVzOiA0cHg7CisgIGJvcmRlci1yYWRpdXM6IDRweDsKKyAgLXdlYmtpdC1ib3gtc2hhZG93OiBp
bnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNSk7CisgIC1tb3otYm94LXNoYWRv
dzogaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjUpOworICBib3gtc2hhZG93
OiBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNSk7Cit9CisuYWxlcnQtbWVz
c2FnZSAuY2xvc2UgeworICBtYXJnaW4tdG9wOiAxcHg7CisgICptYXJnaW4tdG9wOiAwOworfQor
LmFsZXJ0LW1lc3NhZ2UgYSB7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworICBjb2xvcjogIzQwNDA0
MDsKK30KKy5hbGVydC1tZXNzYWdlLmRhbmdlciBwIGEsCisuYWxlcnQtbWVzc2FnZS5lcnJvciBw
IGEsCisuYWxlcnQtbWVzc2FnZS5zdWNjZXNzIHAgYSwKKy5hbGVydC1tZXNzYWdlLmluZm8gcCBh
IHsKKyAgY29sb3I6ICNmZmZmZmY7Cit9CisuYWxlcnQtbWVzc2FnZSBoNSB7CisgIGxpbmUtaGVp
Z2h0OiAxOHB4OworfQorLmFsZXJ0LW1lc3NhZ2UgcCB7CisgIG1hcmdpbi1ib3R0b206IDA7Cit9
CisuYWxlcnQtbWVzc2FnZSBkaXYgeworICBtYXJnaW4tdG9wOiA1cHg7CisgIG1hcmdpbi1ib3R0
b206IDJweDsKKyAgbGluZS1oZWlnaHQ6IDI4cHg7Cit9CisuYWxlcnQtbWVzc2FnZSAuYnRuIHsK
KyAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNSk7
CisgIC1tb3otYm94LXNoYWRvdzogMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjUpOwor
ICBib3gtc2hhZG93OiAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNSk7Cit9CisuYWxl
cnQtbWVzc2FnZS5ibG9jay1tZXNzYWdlIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTsKKyAg
YmFja2dyb3VuZC1jb2xvcjogI2ZkZjVkOTsKKyAgZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5z
Zm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoZW5hYmxlZCA9IGZhbHNlKTsKKyAgcGFkZGluZzogMTRw
eDsKKyAgYm9yZGVyLWNvbG9yOiAjZmNlZWMxOworICAtd2Via2l0LWJveC1zaGFkb3c6IG5vbmU7
CisgIC1tb3otYm94LXNoYWRvdzogbm9uZTsKKyAgYm94LXNoYWRvdzogbm9uZTsKK30KKy5hbGVy
dC1tZXNzYWdlLmJsb2NrLW1lc3NhZ2UgdWwsIC5hbGVydC1tZXNzYWdlLmJsb2NrLW1lc3NhZ2Ug
cCB7CisgIG1hcmdpbi1yaWdodDogMzBweDsKK30KKy5hbGVydC1tZXNzYWdlLmJsb2NrLW1lc3Nh
Z2UgdWwgeworICBtYXJnaW4tYm90dG9tOiAwOworfQorLmFsZXJ0LW1lc3NhZ2UuYmxvY2stbWVz
c2FnZSBsaSB7CisgIGNvbG9yOiAjNDA0MDQwOworfQorLmFsZXJ0LW1lc3NhZ2UuYmxvY2stbWVz
c2FnZSAuYWxlcnQtYWN0aW9ucyB7CisgIG1hcmdpbi10b3A6IDVweDsKK30KKy5hbGVydC1tZXNz
YWdlLmJsb2NrLW1lc3NhZ2UuZXJyb3IsIC5hbGVydC1tZXNzYWdlLmJsb2NrLW1lc3NhZ2Uuc3Vj
Y2VzcywgLmFsZXJ0LW1lc3NhZ2UuYmxvY2stbWVzc2FnZS5pbmZvIHsKKyAgY29sb3I6ICM0MDQw
NDA7CisgIHRleHQtc2hhZG93OiAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTsKK30K
Ky5hbGVydC1tZXNzYWdlLmJsb2NrLW1lc3NhZ2UuZXJyb3IgeworICBiYWNrZ3JvdW5kLWNvbG9y
OiAjZmRkZmRlOworICBib3JkZXItY29sb3I6ICNmYmM3YzY7Cit9CisuYWxlcnQtbWVzc2FnZS5i
bG9jay1tZXNzYWdlLnN1Y2Nlc3MgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDFlZWQxOworICBi
b3JkZXItY29sb3I6ICNiZmU3YmY7Cit9CisuYWxlcnQtbWVzc2FnZS5ibG9jay1tZXNzYWdlLmlu
Zm8geworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGRmNGZiOworICBib3JkZXItY29sb3I6ICNjNmVk
Zjk7Cit9CisuYWxlcnQtbWVzc2FnZS5ibG9jay1tZXNzYWdlLmRhbmdlciBwIGEsCisuYWxlcnQt
bWVzc2FnZS5ibG9jay1tZXNzYWdlLmVycm9yIHAgYSwKKy5hbGVydC1tZXNzYWdlLmJsb2NrLW1l
c3NhZ2Uuc3VjY2VzcyBwIGEsCisuYWxlcnQtbWVzc2FnZS5ibG9jay1tZXNzYWdlLmluZm8gcCBh
IHsKKyAgY29sb3I6ICM0MDQwNDA7Cit9CisucGFnaW5hdGlvbiB7CisgIGhlaWdodDogMzZweDsK
KyAgbWFyZ2luOiAxOHB4IDA7Cit9CisucGFnaW5hdGlvbiB1bCB7CisgIGZsb2F0OiBsZWZ0Owor
ICBtYXJnaW46IDA7CisgIGJvcmRlcjogMXB4IHNvbGlkICNkZGQ7CisgIGJvcmRlcjogMXB4IHNv
bGlkIHJnYmEoMCwgMCwgMCwgMC4xNSk7CisgIC13ZWJraXQtYm9yZGVyLXJhZGl1czogM3B4Owor
ICAtbW96LWJvcmRlci1yYWRpdXM6IDNweDsKKyAgYm9yZGVyLXJhZGl1czogM3B4OworICAtd2Vi
a2l0LWJveC1zaGFkb3c6IDAgMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMDUpOworICAtbW96LWJv
eC1zaGFkb3c6IDAgMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMDUpOworICBib3gtc2hhZG93OiAw
IDFweCAycHggcmdiYSgwLCAwLCAwLCAwLjA1KTsKK30KKy5wYWdpbmF0aW9uIGxpIHsKKyAgZGlz
cGxheTogaW5saW5lOworfQorLnBhZ2luYXRpb24gYSB7CisgIGZsb2F0OiBsZWZ0OworICBwYWRk
aW5nOiAwIDE0cHg7CisgIGxpbmUtaGVpZ2h0OiAzNHB4OworICBib3JkZXItcmlnaHQ6IDFweCBz
b2xpZDsKKyAgYm9yZGVyLXJpZ2h0LWNvbG9yOiAjZGRkOworICBib3JkZXItcmlnaHQtY29sb3I6
IHJnYmEoMCwgMCwgMCwgMC4xNSk7CisgICpib3JkZXItcmlnaHQtY29sb3I6ICNkZGQ7CisgIC8q
IElFNi03ICovCisKKyAgdGV4dC1kZWNvcmF0aW9uOiBub25lOworfQorLnBhZ2luYXRpb24gYTpo
b3ZlciwgLnBhZ2luYXRpb24gLmFjdGl2ZSBhIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2M3ZWVm
ZTsKK30KKy5wYWdpbmF0aW9uIC5kaXNhYmxlZCBhLCAucGFnaW5hdGlvbiAuZGlzYWJsZWQgYTpo
b3ZlciB7CisgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworICBjb2xvcjogI2JmYmZi
ZjsKK30KKy5wYWdpbmF0aW9uIC5uZXh0IGEgeworICBib3JkZXI6IDA7Cit9Cisud2VsbCB7Cisg
IGJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7CisgIG1hcmdpbi1ib3R0b206IDIwcHg7CisgIHBh
ZGRpbmc6IDE5cHg7CisgIG1pbi1oZWlnaHQ6IDIwcHg7CisgIGJvcmRlcjogMXB4IHNvbGlkICNl
ZWU7CisgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC4wNSk7CisgIC13ZWJraXQt
Ym9yZGVyLXJhZGl1czogNHB4OworICAtbW96LWJvcmRlci1yYWRpdXM6IDRweDsKKyAgYm9yZGVy
LXJhZGl1czogNHB4OworICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2Jh
KDAsIDAsIDAsIDAuMDUpOworICAtbW96LWJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2Jh
KDAsIDAsIDAsIDAuMDUpOworICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgwLCAw
LCAwLCAwLjA1KTsKK30KKy53ZWxsIGJsb2NrcXVvdGUgeworICBib3JkZXItY29sb3I6ICNkZGQ7
CisgIGJvcmRlci1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjE1KTsKK30KKy5tb2RhbC1iYWNrZHJv
cCB7CisgIGJhY2tncm91bmQtY29sb3I6ICMwMDAwMDA7CisgIHBvc2l0aW9uOiBmaXhlZDsKKyAg
dG9wOiAwOworICBsZWZ0OiAwOworICByaWdodDogMDsKKyAgYm90dG9tOiAwOworICB6LWluZGV4
OiAxMDAwMDsKK30KKy5tb2RhbC1iYWNrZHJvcC5mYWRlIHsKKyAgb3BhY2l0eTogMDsKK30KKy5t
b2RhbC1iYWNrZHJvcCwgLm1vZGFsLWJhY2tkcm9wLmZhZGUuaW4geworICBmaWx0ZXI6IGFscGhh
KG9wYWNpdHk9ODApOworICAta2h0bWwtb3BhY2l0eTogMC44OworICAtbW96LW9wYWNpdHk6IDAu
ODsKKyAgb3BhY2l0eTogMC44OworfQorLm1vZGFsIHsKKyAgcG9zaXRpb246IGZpeGVkOworICB0
b3A6IDUwJTsKKyAgbGVmdDogNTAlOworICB6LWluZGV4OiAxMTAwMDsKKyAgbWF4LWhlaWdodDog
NTAwcHg7CisgIG92ZXJmbG93OiBhdXRvOworICB3aWR0aDogNTYwcHg7CisgIG1hcmdpbjogLTI1
MHB4IDAgMCAtMjgwcHg7CisgIGJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7CisgIGJvcmRlcjog
MXB4IHNvbGlkICM5OTk7CisgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC4zKTsK
KyAgKmJvcmRlcjogMXB4IHNvbGlkICM5OTk7CisgIC8qIElFNi03ICovCisKKyAgLXdlYmtpdC1i
b3JkZXItcmFkaXVzOiA2cHg7CisgIC1tb3otYm9yZGVyLXJhZGl1czogNnB4OworICBib3JkZXIt
cmFkaXVzOiA2cHg7CisgIC13ZWJraXQtYm94LXNoYWRvdzogMCAzcHggN3B4IHJnYmEoMCwgMCwg
MCwgMC4zKTsKKyAgLW1vei1ib3gtc2hhZG93OiAwIDNweCA3cHggcmdiYSgwLCAwLCAwLCAwLjMp
OworICBib3gtc2hhZG93OiAwIDNweCA3cHggcmdiYSgwLCAwLCAwLCAwLjMpOworICAtd2Via2l0
LWJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7CisgIC1tb3otYmFja2dyb3VuZC1jbGlwOiBw
YWRkaW5nLWJveDsKKyAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDsKK30KKy5tb2RhbCAu
Y2xvc2UgeworICBtYXJnaW4tdG9wOiA3cHg7Cit9CisubW9kYWwuZmFkZSB7CisgIC13ZWJraXQt
dHJhbnNpdGlvbjogb3BhY2l0eSAuM3MgbGluZWFyLCB0b3AgLjNzIGVhc2Utb3V0OworICAtbW96
LXRyYW5zaXRpb246IG9wYWNpdHkgLjNzIGxpbmVhciwgdG9wIC4zcyBlYXNlLW91dDsKKyAgLW1z
LXRyYW5zaXRpb246IG9wYWNpdHkgLjNzIGxpbmVhciwgdG9wIC4zcyBlYXNlLW91dDsKKyAgLW8t
dHJhbnNpdGlvbjogb3BhY2l0eSAuM3MgbGluZWFyLCB0b3AgLjNzIGVhc2Utb3V0OworICB0cmFu
c2l0aW9uOiBvcGFjaXR5IC4zcyBsaW5lYXIsIHRvcCAuM3MgZWFzZS1vdXQ7CisgIHRvcDogLTI1
JTsKK30KKy5tb2RhbC5mYWRlLmluIHsKKyAgdG9wOiA1MCU7Cit9CisubW9kYWwtaGVhZGVyIHsK
KyAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlZWU7CisgIHBhZGRpbmc6IDVweCAxNXB4Owor
fQorLm1vZGFsLWJvZHkgeworICBwYWRkaW5nOiAxNXB4OworfQorLm1vZGFsLWJvZHkgZm9ybSB7
CisgIG1hcmdpbi1ib3R0b206IDA7Cit9CisubW9kYWwtZm9vdGVyIHsKKyAgYmFja2dyb3VuZC1j
b2xvcjogI2Y1ZjVmNTsKKyAgcGFkZGluZzogMTRweCAxNXB4IDE1cHg7CisgIGJvcmRlci10b3A6
IDFweCBzb2xpZCAjZGRkOworICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDAgMCA2cHggNnB4Owor
ICAtbW96LWJvcmRlci1yYWRpdXM6IDAgMCA2cHggNnB4OworICBib3JkZXItcmFkaXVzOiAwIDAg
NnB4IDZweDsKKyAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAwIDFweCAwICNmZmZmZmY7Cisg
IC1tb3otYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMCAjZmZmZmZmOworICBib3gtc2hhZG93OiBp
bnNldCAwIDFweCAwICNmZmZmZmY7CisgIHpvb206IDE7CisgIG1hcmdpbi1ib3R0b206IDA7Cit9
CisubW9kYWwtZm9vdGVyOmJlZm9yZSwgLm1vZGFsLWZvb3RlcjphZnRlciB7CisgIGRpc3BsYXk6
IHRhYmxlOworICBjb250ZW50OiAiIjsKKyAgem9vbTogMTsKK30KKy5tb2RhbC1mb290ZXI6YWZ0
ZXIgeworICBjbGVhcjogYm90aDsKK30KKy5tb2RhbC1mb290ZXIgLmJ0biB7CisgIGZsb2F0OiBy
aWdodDsKKyAgbWFyZ2luLWxlZnQ6IDVweDsKK30KKy5tb2RhbCAucG9wb3ZlciwgLm1vZGFsIC50
d2lwc3kgeworICB6LWluZGV4OiAxMjAwMDsKK30KKy50d2lwc3kgeworICBkaXNwbGF5OiBibG9j
azsKKyAgcG9zaXRpb246IGFic29sdXRlOworICB2aXNpYmlsaXR5OiB2aXNpYmxlOworICBwYWRk
aW5nOiA1cHg7CisgIGZvbnQtc2l6ZTogMTFweDsKKyAgei1pbmRleDogMTAwMDsKKyAgZmlsdGVy
OiBhbHBoYShvcGFjaXR5PTgwKTsKKyAgLWtodG1sLW9wYWNpdHk6IDAuODsKKyAgLW1vei1vcGFj
aXR5OiAwLjg7CisgIG9wYWNpdHk6IDAuODsKK30KKy50d2lwc3kuZmFkZS5pbiB7CisgIGZpbHRl
cjogYWxwaGEob3BhY2l0eT04MCk7CisgIC1raHRtbC1vcGFjaXR5OiAwLjg7CisgIC1tb3otb3Bh
Y2l0eTogMC44OworICBvcGFjaXR5OiAwLjg7Cit9CisudHdpcHN5LmFib3ZlIC50d2lwc3ktYXJy
b3cgeworICBib3R0b206IDA7CisgIGxlZnQ6IDUwJTsKKyAgbWFyZ2luLWxlZnQ6IC01cHg7Cisg
IGJvcmRlci1sZWZ0OiA1cHggc29saWQgdHJhbnNwYXJlbnQ7CisgIGJvcmRlci1yaWdodDogNXB4
IHNvbGlkIHRyYW5zcGFyZW50OworICBib3JkZXItdG9wOiA1cHggc29saWQgIzAwMDAwMDsKK30K
Ky50d2lwc3kubGVmdCAudHdpcHN5LWFycm93IHsKKyAgdG9wOiA1MCU7CisgIHJpZ2h0OiAwOwor
ICBtYXJnaW4tdG9wOiAtNXB4OworICBib3JkZXItdG9wOiA1cHggc29saWQgdHJhbnNwYXJlbnQ7
CisgIGJvcmRlci1ib3R0b206IDVweCBzb2xpZCB0cmFuc3BhcmVudDsKKyAgYm9yZGVyLWxlZnQ6
IDVweCBzb2xpZCAjMDAwMDAwOworfQorLnR3aXBzeS5iZWxvdyAudHdpcHN5LWFycm93IHsKKyAg
dG9wOiAwOworICBsZWZ0OiA1MCU7CisgIG1hcmdpbi1sZWZ0OiAtNXB4OworICBib3JkZXItbGVm
dDogNXB4IHNvbGlkIHRyYW5zcGFyZW50OworICBib3JkZXItcmlnaHQ6IDVweCBzb2xpZCB0cmFu
c3BhcmVudDsKKyAgYm9yZGVyLWJvdHRvbTogNXB4IHNvbGlkICMwMDAwMDA7Cit9CisudHdpcHN5
LnJpZ2h0IC50d2lwc3ktYXJyb3cgeworICB0b3A6IDUwJTsKKyAgbGVmdDogMDsKKyAgbWFyZ2lu
LXRvcDogLTVweDsKKyAgYm9yZGVyLXRvcDogNXB4IHNvbGlkIHRyYW5zcGFyZW50OworICBib3Jk
ZXItYm90dG9tOiA1cHggc29saWQgdHJhbnNwYXJlbnQ7CisgIGJvcmRlci1yaWdodDogNXB4IHNv
bGlkICMwMDAwMDA7Cit9CisudHdpcHN5LWlubmVyIHsKKyAgcGFkZGluZzogM3B4IDhweDsKKyAg
YmFja2dyb3VuZC1jb2xvcjogIzAwMDAwMDsKKyAgY29sb3I6IHdoaXRlOworICB0ZXh0LWFsaWdu
OiBjZW50ZXI7CisgIG1heC13aWR0aDogMjAwcHg7CisgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsK
KyAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA0cHg7CisgIC1tb3otYm9yZGVyLXJhZGl1czogNHB4
OworICBib3JkZXItcmFkaXVzOiA0cHg7Cit9CisudHdpcHN5LWFycm93IHsKKyAgcG9zaXRpb246
IGFic29sdXRlOworICB3aWR0aDogMDsKKyAgaGVpZ2h0OiAwOworfQorLnBvcG92ZXIgeworICBw
b3NpdGlvbjogYWJzb2x1dGU7CisgIHRvcDogMDsKKyAgbGVmdDogMDsKKyAgei1pbmRleDogMTAw
MDsKKyAgcGFkZGluZzogNXB4OworICBkaXNwbGF5OiBub25lOworfQorLnBvcG92ZXIuYWJvdmUg
LmFycm93IHsKKyAgYm90dG9tOiAwOworICBsZWZ0OiA1MCU7CisgIG1hcmdpbi1sZWZ0OiAtNXB4
OworICBib3JkZXItbGVmdDogNXB4IHNvbGlkIHRyYW5zcGFyZW50OworICBib3JkZXItcmlnaHQ6
IDVweCBzb2xpZCB0cmFuc3BhcmVudDsKKyAgYm9yZGVyLXRvcDogNXB4IHNvbGlkICMwMDAwMDA7
Cit9CisucG9wb3Zlci5yaWdodCAuYXJyb3cgeworICB0b3A6IDUwJTsKKyAgbGVmdDogMDsKKyAg
bWFyZ2luLXRvcDogLTVweDsKKyAgYm9yZGVyLXRvcDogNXB4IHNvbGlkIHRyYW5zcGFyZW50Owor
ICBib3JkZXItYm90dG9tOiA1cHggc29saWQgdHJhbnNwYXJlbnQ7CisgIGJvcmRlci1yaWdodDog
NXB4IHNvbGlkICMwMDAwMDA7Cit9CisucG9wb3Zlci5iZWxvdyAuYXJyb3cgeworICB0b3A6IDA7
CisgIGxlZnQ6IDUwJTsKKyAgbWFyZ2luLWxlZnQ6IC01cHg7CisgIGJvcmRlci1sZWZ0OiA1cHgg
c29saWQgdHJhbnNwYXJlbnQ7CisgIGJvcmRlci1yaWdodDogNXB4IHNvbGlkIHRyYW5zcGFyZW50
OworICBib3JkZXItYm90dG9tOiA1cHggc29saWQgIzAwMDAwMDsKK30KKy5wb3BvdmVyLmxlZnQg
LmFycm93IHsKKyAgdG9wOiA1MCU7CisgIHJpZ2h0OiAwOworICBtYXJnaW4tdG9wOiAtNXB4Owor
ICBib3JkZXItdG9wOiA1cHggc29saWQgdHJhbnNwYXJlbnQ7CisgIGJvcmRlci1ib3R0b206IDVw
eCBzb2xpZCB0cmFuc3BhcmVudDsKKyAgYm9yZGVyLWxlZnQ6IDVweCBzb2xpZCAjMDAwMDAwOwor
fQorLnBvcG92ZXIgLmFycm93IHsKKyAgcG9zaXRpb246IGFic29sdXRlOworICB3aWR0aDogMDsK
KyAgaGVpZ2h0OiAwOworfQorLnBvcG92ZXIgLmlubmVyIHsKKyAgYmFja2dyb3VuZDogIzAwMDAw
MDsKKyAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjgpOworICBwYWRkaW5nOiAzcHg7Cisg
IG92ZXJmbG93OiBoaWRkZW47CisgIHdpZHRoOiAyODBweDsKKyAgLXdlYmtpdC1ib3JkZXItcmFk
aXVzOiA2cHg7CisgIC1tb3otYm9yZGVyLXJhZGl1czogNnB4OworICBib3JkZXItcmFkaXVzOiA2
cHg7CisgIC13ZWJraXQtYm94LXNoYWRvdzogMCAzcHggN3B4IHJnYmEoMCwgMCwgMCwgMC4zKTsK
KyAgLW1vei1ib3gtc2hhZG93OiAwIDNweCA3cHggcmdiYSgwLCAwLCAwLCAwLjMpOworICBib3gt
c2hhZG93OiAwIDNweCA3cHggcmdiYSgwLCAwLCAwLCAwLjMpOworfQorLnBvcG92ZXIgLnRpdGxl
IHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2Y1ZjVmNTsKKyAgcGFkZGluZzogOXB4IDE1cHg7Cisg
IGxpbmUtaGVpZ2h0OiAxOworICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDNweCAzcHggMCAwOwor
ICAtbW96LWJvcmRlci1yYWRpdXM6IDNweCAzcHggMCAwOworICBib3JkZXItcmFkaXVzOiAzcHgg
M3B4IDAgMDsKKyAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlZWU7Cit9CisucG9wb3ZlciAu
Y29udGVudCB7CisgIGJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7CisgIHBhZGRpbmc6IDE0cHg7
CisgIC13ZWJraXQtYm9yZGVyLXJhZGl1czogMCAwIDNweCAzcHg7CisgIC1tb3otYm9yZGVyLXJh
ZGl1czogMCAwIDNweCAzcHg7CisgIGJvcmRlci1yYWRpdXM6IDAgMCAzcHggM3B4OworICAtd2Vi
a2l0LWJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7CisgIC1tb3otYmFja2dyb3VuZC1jbGlw
OiBwYWRkaW5nLWJveDsKKyAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDsKK30KKy5wb3Bv
dmVyIC5jb250ZW50IHAsIC5wb3BvdmVyIC5jb250ZW50IHVsLCAucG9wb3ZlciAuY29udGVudCBv
bCB7CisgIG1hcmdpbi1ib3R0b206IDA7Cit9CisuZmFkZSB7CisgIC13ZWJraXQtdHJhbnNpdGlv
bjogb3BhY2l0eSAwLjE1cyBsaW5lYXI7CisgIC1tb3otdHJhbnNpdGlvbjogb3BhY2l0eSAwLjE1
cyBsaW5lYXI7CisgIC1tcy10cmFuc2l0aW9uOiBvcGFjaXR5IDAuMTVzIGxpbmVhcjsKKyAgLW8t
dHJhbnNpdGlvbjogb3BhY2l0eSAwLjE1cyBsaW5lYXI7CisgIHRyYW5zaXRpb246IG9wYWNpdHkg
MC4xNXMgbGluZWFyOworICBvcGFjaXR5OiAwOworfQorLmZhZGUuaW4geworICBvcGFjaXR5OiAx
OworfQorLmxhYmVsIHsKKyAgcGFkZGluZzogMXB4IDNweCAycHg7CisgIGZvbnQtc2l6ZTogOS43
NXB4OworICBmb250LXdlaWdodDogYm9sZDsKKyAgY29sb3I6ICNmZmZmZmY7CisgIHRleHQtdHJh
bnNmb3JtOiB1cHBlcmNhc2U7CisgIHdoaXRlLXNwYWNlOiBub3dyYXA7CisgIGJhY2tncm91bmQt
Y29sb3I6ICNiZmJmYmY7CisgIC13ZWJraXQtYm9yZGVyLXJhZGl1czogM3B4OworICAtbW96LWJv
cmRlci1yYWRpdXM6IDNweDsKKyAgYm9yZGVyLXJhZGl1czogM3B4OworICB0ZXh0LXNoYWRvdzog
bm9uZTsKK30KKy5sYWJlbC5pbXBvcnRhbnQgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjYzQzYzM1
OworfQorLmxhYmVsLndhcm5pbmcgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjg5NDA2OworfQor
LmxhYmVsLnN1Y2Nlc3MgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDZhNTQ2OworfQorLmxhYmVs
Lm5vdGljZSB7CisgIGJhY2tncm91bmQtY29sb3I6ICM2MmNmZmM7Cit9CisubWVkaWEtZ3JpZCB7
CisgIG1hcmdpbi1sZWZ0OiAtMjBweDsKKyAgbWFyZ2luLWJvdHRvbTogMDsKKyAgem9vbTogMTsK
K30KKy5tZWRpYS1ncmlkOmJlZm9yZSwgLm1lZGlhLWdyaWQ6YWZ0ZXIgeworICBkaXNwbGF5OiB0
YWJsZTsKKyAgY29udGVudDogIiI7CisgIHpvb206IDE7Cit9CisubWVkaWEtZ3JpZDphZnRlciB7
CisgIGNsZWFyOiBib3RoOworfQorLm1lZGlhLWdyaWQgbGkgeworICBkaXNwbGF5OiBpbmxpbmU7
Cit9CisubWVkaWEtZ3JpZCBhIHsKKyAgZmxvYXQ6IGxlZnQ7CisgIHBhZGRpbmc6IDRweDsKKyAg
bWFyZ2luOiAwIDAgMThweCAyMHB4OworICBib3JkZXI6IDFweCBzb2xpZCAjZGRkOworICAtd2Vi
a2l0LWJvcmRlci1yYWRpdXM6IDRweDsKKyAgLW1vei1ib3JkZXItcmFkaXVzOiA0cHg7CisgIGJv
cmRlci1yYWRpdXM6IDRweDsKKyAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDFweCAxcHggcmdiYSgw
LCAwLCAwLCAwLjA3NSk7CisgIC1tb3otYm94LXNoYWRvdzogMCAxcHggMXB4IHJnYmEoMCwgMCwg
MCwgMC4wNzUpOworICBib3gtc2hhZG93OiAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjA3NSk7
Cit9CisubWVkaWEtZ3JpZCBhIGltZyB7CisgIGRpc3BsYXk6IGJsb2NrOworfQorLm1lZGlhLWdy
aWQgYTpob3ZlciB7CisgIGJvcmRlci1jb2xvcjogIzAwNjlkNjsKKyAgLXdlYmtpdC1ib3gtc2hh
ZG93OiAwIDFweCA0cHggcmdiYSgwLCAxMDUsIDIxNCwgMC4yNSk7CisgIC1tb3otYm94LXNoYWRv
dzogMCAxcHggNHB4IHJnYmEoMCwgMTA1LCAyMTQsIDAuMjUpOworICBib3gtc2hhZG93OiAwIDFw
eCA0cHggcmdiYSgwLCAxMDUsIDIxNCwgMC4yNSk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2Yg
ZmlsZQpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFt
cGxlLWFwcC9jb21wb25lbnRzL2Jvb3RzdHJhcC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxl
LWFwcC9jb21wb25lbnRzL2Jvb3RzdHJhcC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MJKHJldmlzaW9u
IDApCisrKyBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUt
YXBwL2NvbXBvbmVudHMvYm9vdHN0cmFwL2Nzcy9ib290c3RyYXAubWluLmNzcwkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDkgQEAKKy8qIQorICogQm9vdHN0cmFwIHYyLjIuMgorICoKKyAqIENv
cHlyaWdodCAyMDEyIFR3aXR0ZXIsIEluYworICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBM
aWNlbnNlIHYyLjAKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIu
MAorICoKKyAqIERlc2lnbmVkIGFuZCBidWlsdCB3aXRoIGFsbCB0aGUgbG92ZSBpbiB0aGUgd29y
bGQgQHR3aXR0ZXIgYnkgQG1kbyBhbmQgQGZhdC4KKyAqL2FydGljbGUsYXNpZGUsZGV0YWlscyxm
aWdjYXB0aW9uLGZpZ3VyZSxmb290ZXIsaGVhZGVyLGhncm91cCxuYXYsc2VjdGlvbntkaXNwbGF5
OmJsb2NrfWF1ZGlvLGNhbnZhcyx2aWRlb3tkaXNwbGF5OmlubGluZS1ibG9jazsqZGlzcGxheTpp
bmxpbmU7Knpvb206MX1hdWRpbzpub3QoW2NvbnRyb2xzXSl7ZGlzcGxheTpub25lfWh0bWx7Zm9u
dC1zaXplOjEwMCU7LXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OjEwMCU7LW1zLXRleHQtc2l6ZS1h
ZGp1c3Q6MTAwJX1hOmZvY3Vze291dGxpbmU6dGhpbiBkb3R0ZWQgIzMzMztvdXRsaW5lOjVweCBh
dXRvIC13ZWJraXQtZm9jdXMtcmluZy1jb2xvcjtvdXRsaW5lLW9mZnNldDotMnB4fWE6aG92ZXIs
YTphY3RpdmV7b3V0bGluZTowfXN1YixzdXB7cG9zaXRpb246cmVsYXRpdmU7Zm9udC1zaXplOjc1
JTtsaW5lLWhlaWdodDowO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lfXN1cHt0b3A6LTAuNWVtfXN1
Yntib3R0b206LTAuMjVlbX1pbWd7d2lkdGg6YXV0b1w5O2hlaWdodDphdXRvO21heC13aWR0aDox
MDAlO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtib3JkZXI6MDstbXMtaW50ZXJwb2xhdGlvbi1tb2Rl
OmJpY3ViaWN9I21hcF9jYW52YXMgaW1nLC5nb29nbGUtbWFwcyBpbWd7bWF4LXdpZHRoOm5vbmV9
YnV0dG9uLGlucHV0LHNlbGVjdCx0ZXh0YXJlYXttYXJnaW46MDtmb250LXNpemU6MTAwJTt2ZXJ0
aWNhbC1hbGlnbjptaWRkbGV9YnV0dG9uLGlucHV0eypvdmVyZmxvdzp2aXNpYmxlO2xpbmUtaGVp
Z2h0Om5vcm1hbH1idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsaW5wdXQ6Oi1tb3otZm9jdXMtaW5u
ZXJ7cGFkZGluZzowO2JvcmRlcjowfWJ1dHRvbixodG1sIGlucHV0W3R5cGU9ImJ1dHRvbiJdLGlu
cHV0W3R5cGU9InJlc2V0Il0saW5wdXRbdHlwZT0ic3VibWl0Il17Y3Vyc29yOnBvaW50ZXI7LXdl
YmtpdC1hcHBlYXJhbmNlOmJ1dHRvbn1sYWJlbCxzZWxlY3QsYnV0dG9uLGlucHV0W3R5cGU9ImJ1
dHRvbiJdLGlucHV0W3R5cGU9InJlc2V0Il0saW5wdXRbdHlwZT0ic3VibWl0Il0saW5wdXRbdHlw
ZT0icmFkaW8iXSxpbnB1dFt0eXBlPSJjaGVja2JveCJde2N1cnNvcjpwb2ludGVyfWlucHV0W3R5
cGU9InNlYXJjaCJdey13ZWJraXQtYm94LXNpemluZzpjb250ZW50LWJveDstbW96LWJveC1zaXpp
bmc6Y29udGVudC1ib3g7Ym94LXNpemluZzpjb250ZW50LWJveDstd2Via2l0LWFwcGVhcmFuY2U6
dGV4dGZpZWxkfWlucHV0W3R5cGU9InNlYXJjaCJdOjotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9u
LGlucHV0W3R5cGU9InNlYXJjaCJdOjotd2Via2l0LXNlYXJjaC1jYW5jZWwtYnV0dG9uey13ZWJr
aXQtYXBwZWFyYW5jZTpub25lfXRleHRhcmVhe292ZXJmbG93OmF1dG87dmVydGljYWwtYWxpZ246
dG9wfUBtZWRpYSBwcmludHsqe2NvbG9yOiMwMDAhaW1wb3J0YW50O3RleHQtc2hhZG93Om5vbmUh
aW1wb3J0YW50O2JhY2tncm91bmQ6dHJhbnNwYXJlbnQhaW1wb3J0YW50O2JveC1zaGFkb3c6bm9u
ZSFpbXBvcnRhbnR9YSxhOnZpc2l0ZWR7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZX1hW2hyZWZd
OmFmdGVye2NvbnRlbnQ6IiAoIiBhdHRyKGhyZWYpICIpIn1hYmJyW3RpdGxlXTphZnRlcntjb250
ZW50OiIgKCIgYXR0cih0aXRsZSkgIikifS5pciBhOmFmdGVyLGFbaHJlZl49ImphdmFzY3JpcHQ6
Il06YWZ0ZXIsYVtocmVmXj0iIyJdOmFmdGVye2NvbnRlbnQ6IiJ9cHJlLGJsb2NrcXVvdGV7Ym9y
ZGVyOjFweCBzb2xpZCAjOTk5O3BhZ2UtYnJlYWstaW5zaWRlOmF2b2lkfXRoZWFke2Rpc3BsYXk6
dGFibGUtaGVhZGVyLWdyb3VwfXRyLGltZ3twYWdlLWJyZWFrLWluc2lkZTphdm9pZH1pbWd7bWF4
LXdpZHRoOjEwMCUhaW1wb3J0YW50fUBwYWdle21hcmdpbjouNWNtfXAsaDIsaDN7b3JwaGFuczoz
O3dpZG93czozfWgyLGgze3BhZ2UtYnJlYWstYWZ0ZXI6YXZvaWR9fS5jbGVhcmZpeHsqem9vbTox
fS5jbGVhcmZpeDpiZWZvcmUsLmNsZWFyZml4OmFmdGVye2Rpc3BsYXk6dGFibGU7bGluZS1oZWln
aHQ6MDtjb250ZW50OiIifS5jbGVhcmZpeDphZnRlcntjbGVhcjpib3RofS5oaWRlLXRleHR7Zm9u
dDowLzAgYTtjb2xvcjp0cmFuc3BhcmVudDt0ZXh0LXNoYWRvdzpub25lO2JhY2tncm91bmQtY29s
b3I6dHJhbnNwYXJlbnQ7Ym9yZGVyOjB9LmlucHV0LWJsb2NrLWxldmVse2Rpc3BsYXk6YmxvY2s7
d2lkdGg6MTAwJTttaW4taGVpZ2h0OjMwcHg7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7
LW1vei1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94fWJvZHl7bWFy
Z2luOjA7Zm9udC1mYW1pbHk6IkhlbHZldGljYSBOZXVlIixIZWx2ZXRpY2EsQXJpYWwsc2Fucy1z
ZXJpZjtmb250LXNpemU6MTRweDtsaW5lLWhlaWdodDoyMHB4O2NvbG9yOiMzMzM7YmFja2dyb3Vu
ZC1jb2xvcjojZmZmfWF7Y29sb3I6IzA4Yzt0ZXh0LWRlY29yYXRpb246bm9uZX1hOmhvdmVye2Nv
bG9yOiMwMDU1ODA7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZX0uaW1nLXJvdW5kZWR7LXdlYmtp
dC1ib3JkZXItcmFkaXVzOjZweDstbW96LWJvcmRlci1yYWRpdXM6NnB4O2JvcmRlci1yYWRpdXM6
NnB4fS5pbWctcG9sYXJvaWR7cGFkZGluZzo0cHg7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRl
cjoxcHggc29saWQgI2NjYztib3JkZXI6MXB4IHNvbGlkIHJnYmEoMCwwLDAsMC4yKTstd2Via2l0
LWJveC1zaGFkb3c6MCAxcHggM3B4IHJnYmEoMCwwLDAsMC4xKTstbW96LWJveC1zaGFkb3c6MCAx
cHggM3B4IHJnYmEoMCwwLDAsMC4xKTtib3gtc2hhZG93OjAgMXB4IDNweCByZ2JhKDAsMCwwLDAu
MSl9LmltZy1jaXJjbGV7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjUwMHB4Oy1tb3otYm9yZGVyLXJh
ZGl1czo1MDBweDtib3JkZXItcmFkaXVzOjUwMHB4fS5yb3d7bWFyZ2luLWxlZnQ6LTIwcHg7Knpv
b206MX0ucm93OmJlZm9yZSwucm93OmFmdGVye2Rpc3BsYXk6dGFibGU7bGluZS1oZWlnaHQ6MDtj
b250ZW50OiIifS5yb3c6YWZ0ZXJ7Y2xlYXI6Ym90aH1bY2xhc3MqPSJzcGFuIl17ZmxvYXQ6bGVm
dDttaW4taGVpZ2h0OjFweDttYXJnaW4tbGVmdDoyMHB4fS5jb250YWluZXIsLm5hdmJhci1zdGF0
aWMtdG9wIC5jb250YWluZXIsLm5hdmJhci1maXhlZC10b3AgLmNvbnRhaW5lciwubmF2YmFyLWZp
eGVkLWJvdHRvbSAuY29udGFpbmVye3dpZHRoOjk0MHB4fS5zcGFuMTJ7d2lkdGg6OTQwcHh9LnNw
YW4xMXt3aWR0aDo4NjBweH0uc3BhbjEwe3dpZHRoOjc4MHB4fS5zcGFuOXt3aWR0aDo3MDBweH0u
c3Bhbjh7d2lkdGg6NjIwcHh9LnNwYW43e3dpZHRoOjU0MHB4fS5zcGFuNnt3aWR0aDo0NjBweH0u
c3BhbjV7d2lkdGg6MzgwcHh9LnNwYW40e3dpZHRoOjMwMHB4fS5zcGFuM3t3aWR0aDoyMjBweH0u
c3BhbjJ7d2lkdGg6MTQwcHh9LnNwYW4xe3dpZHRoOjYwcHh9Lm9mZnNldDEye21hcmdpbi1sZWZ0
Ojk4MHB4fS5vZmZzZXQxMXttYXJnaW4tbGVmdDo5MDBweH0ub2Zmc2V0MTB7bWFyZ2luLWxlZnQ6
ODIwcHh9Lm9mZnNldDl7bWFyZ2luLWxlZnQ6NzQwcHh9Lm9mZnNldDh7bWFyZ2luLWxlZnQ6NjYw
cHh9Lm9mZnNldDd7bWFyZ2luLWxlZnQ6NTgwcHh9Lm9mZnNldDZ7bWFyZ2luLWxlZnQ6NTAwcHh9
Lm9mZnNldDV7bWFyZ2luLWxlZnQ6NDIwcHh9Lm9mZnNldDR7bWFyZ2luLWxlZnQ6MzQwcHh9Lm9m
ZnNldDN7bWFyZ2luLWxlZnQ6MjYwcHh9Lm9mZnNldDJ7bWFyZ2luLWxlZnQ6MTgwcHh9Lm9mZnNl
dDF7bWFyZ2luLWxlZnQ6MTAwcHh9LnJvdy1mbHVpZHt3aWR0aDoxMDAlOyp6b29tOjF9LnJvdy1m
bHVpZDpiZWZvcmUsLnJvdy1mbHVpZDphZnRlcntkaXNwbGF5OnRhYmxlO2xpbmUtaGVpZ2h0OjA7
Y29udGVudDoiIn0ucm93LWZsdWlkOmFmdGVye2NsZWFyOmJvdGh9LnJvdy1mbHVpZCBbY2xhc3Mq
PSJzcGFuIl17ZGlzcGxheTpibG9jaztmbG9hdDpsZWZ0O3dpZHRoOjEwMCU7bWluLWhlaWdodDoz
MHB4O21hcmdpbi1sZWZ0OjIuMTI3NjU5NTc0NDY4MDg1JTsqbWFyZ2luLWxlZnQ6Mi4wNzQ0Njgw
ODUxMDYzODMlOy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94Oy1tb3otYm94LXNpemluZzpi
b3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveH0ucm93LWZsdWlkIFtjbGFzcyo9InNwYW4i
XTpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDowfS5yb3ctZmx1aWQgLmNvbnRyb2xzLXJvdyBbY2xh
c3MqPSJzcGFuIl0rW2NsYXNzKj0ic3BhbiJde21hcmdpbi1sZWZ0OjIuMTI3NjU5NTc0NDY4MDg1
JX0ucm93LWZsdWlkIC5zcGFuMTJ7d2lkdGg6MTAwJTsqd2lkdGg6OTkuOTQ2ODA4NTEwNjM4Mjkl
fS5yb3ctZmx1aWQgLnNwYW4xMXt3aWR0aDo5MS40ODkzNjE3MDIxMjc2NSU7KndpZHRoOjkxLjQz
NjE3MDIxMjc2NTk0JX0ucm93LWZsdWlkIC5zcGFuMTB7d2lkdGg6ODIuOTc4NzIzNDA0MjU1MzIl
Oyp3aWR0aDo4Mi45MjU1MzE5MTQ4OTM2MSV9LnJvdy1mbHVpZCAuc3Bhbjl7d2lkdGg6NzQuNDY4
MDg1MTA2MzgyOTclOyp3aWR0aDo3NC40MTQ4OTM2MTcwMjEyNiV9LnJvdy1mbHVpZCAuc3Bhbjh7
d2lkdGg6NjUuOTU3NDQ2ODA4NTEwNjQlOyp3aWR0aDo2NS45MDQyNTUzMTkxNDg5MyV9LnJvdy1m
bHVpZCAuc3Bhbjd7d2lkdGg6NTcuNDQ2ODA4NTEwNjM4MjklOyp3aWR0aDo1Ny4zOTM2MTcwMjEy
NzY1OSV9LnJvdy1mbHVpZCAuc3BhbjZ7d2lkdGg6NDguOTM2MTcwMjEyNzY1OTUlOyp3aWR0aDo0
OC44ODI5Nzg3MjM0MDQyNSV9LnJvdy1mbHVpZCAuc3BhbjV7d2lkdGg6NDAuNDI1NTMxOTE0ODkz
NjIlOyp3aWR0aDo0MC4zNzIzNDA0MjU1MzE5MiV9LnJvdy1mbHVpZCAuc3BhbjR7d2lkdGg6MzEu
OTE0ODkzNjE3MDIxMjc4JTsqd2lkdGg6MzEuODYxNzAyMTI3NjU5NTc2JX0ucm93LWZsdWlkIC5z
cGFuM3t3aWR0aDoyMy40MDQyNTUzMTkxNDg5MzQlOyp3aWR0aDoyMy4zNTEwNjM4Mjk3ODcyMzMl
fS5yb3ctZmx1aWQgLnNwYW4ye3dpZHRoOjE0Ljg5MzYxNzAyMTI3NjU5NSU7KndpZHRoOjE0Ljg0
MDQyNTUzMTkxNDg5NCV9LnJvdy1mbHVpZCAuc3BhbjF7d2lkdGg6Ni4zODI5Nzg3MjM0MDQyNTUl
Oyp3aWR0aDo2LjMyOTc4NzIzNDA0MjU1MyV9LnJvdy1mbHVpZCAub2Zmc2V0MTJ7bWFyZ2luLWxl
ZnQ6MTA0LjI1NTMxOTE0ODkzNjE3JTsqbWFyZ2luLWxlZnQ6MTA0LjE0ODkzNjE3MDIxMjc1JX0u
cm93LWZsdWlkIC5vZmZzZXQxMjpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDoxMDIuMTI3NjU5NTc0
NDY4MDglOyptYXJnaW4tbGVmdDoxMDIuMDIxMjc2NTk1NzQ0NjclfS5yb3ctZmx1aWQgLm9mZnNl
dDExe21hcmdpbi1sZWZ0Ojk1Ljc0NDY4MDg1MTA2MzgyJTsqbWFyZ2luLWxlZnQ6OTUuNjM4Mjk3
ODcyMzQwNCV9LnJvdy1mbHVpZCAub2Zmc2V0MTE6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6OTMu
NjE3MDIxMjc2NTk1NzQlOyptYXJnaW4tbGVmdDo5My41MTA2MzgyOTc4NzIzMiV9LnJvdy1mbHVp
ZCAub2Zmc2V0MTB7bWFyZ2luLWxlZnQ6ODcuMjM0MDQyNTUzMTkxNDklOyptYXJnaW4tbGVmdDo4
Ny4xMjc2NTk1NzQ0NjgwNyV9LnJvdy1mbHVpZCAub2Zmc2V0MTA6Zmlyc3QtY2hpbGR7bWFyZ2lu
LWxlZnQ6ODUuMTA2MzgyOTc4NzIzNCU7Km1hcmdpbi1sZWZ0Ojg0Ljk5OTk5OTk5OTk5OTk5JX0u
cm93LWZsdWlkIC5vZmZzZXQ5e21hcmdpbi1sZWZ0Ojc4LjcyMzQwNDI1NTMxOTE0JTsqbWFyZ2lu
LWxlZnQ6NzguNjE3MDIxMjc2NTk1NzIlfS5yb3ctZmx1aWQgLm9mZnNldDk6Zmlyc3QtY2hpbGR7
bWFyZ2luLWxlZnQ6NzYuNTk1NzQ0NjgwODUxMDYlOyptYXJnaW4tbGVmdDo3Ni40ODkzNjE3MDIx
Mjc2NCV9LnJvdy1mbHVpZCAub2Zmc2V0OHttYXJnaW4tbGVmdDo3MC4yMTI3NjU5NTc0NDY4JTsq
bWFyZ2luLWxlZnQ6NzAuMTA2MzgyOTc4NzIzMzklfS5yb3ctZmx1aWQgLm9mZnNldDg6Zmlyc3Qt
Y2hpbGR7bWFyZ2luLWxlZnQ6NjguMDg1MTA2MzgyOTc4NzIlOyptYXJnaW4tbGVmdDo2Ny45Nzg3
MjM0MDQyNTUzJX0ucm93LWZsdWlkIC5vZmZzZXQ3e21hcmdpbi1sZWZ0OjYxLjcwMjEyNzY1OTU3
NDQ2JTsqbWFyZ2luLWxlZnQ6NjEuNTk1NzQ0NjgwODUxMDYlfS5yb3ctZmx1aWQgLm9mZnNldDc6
Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6NTkuNTc0NDY4MDg1MTA2Mzc1JTsqbWFyZ2luLWxlZnQ6
NTkuNDY4MDg1MTA2MzgyOTclfS5yb3ctZmx1aWQgLm9mZnNldDZ7bWFyZ2luLWxlZnQ6NTMuMTkx
NDg5MzYxNzAyMTI1JTsqbWFyZ2luLWxlZnQ6NTMuMDg1MTA2MzgyOTc4NzE1JX0ucm93LWZsdWlk
IC5vZmZzZXQ2OmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjUxLjA2MzgyOTc4NzIzNDAzNSU7Km1h
cmdpbi1sZWZ0OjUwLjk1NzQ0NjgwODUxMDYzJX0ucm93LWZsdWlkIC5vZmZzZXQ1e21hcmdpbi1s
ZWZ0OjQ0LjY4MDg1MTA2MzgyOTc5JTsqbWFyZ2luLWxlZnQ6NDQuNTc0NDY4MDg1MTA2MzglfS5y
b3ctZmx1aWQgLm9mZnNldDU6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6NDIuNTUzMTkxNDg5MzYx
NyU7Km1hcmdpbi1sZWZ0OjQyLjQ0NjgwODUxMDYzODMlfS5yb3ctZmx1aWQgLm9mZnNldDR7bWFy
Z2luLWxlZnQ6MzYuMTcwMjEyNzY1OTU3NDQ0JTsqbWFyZ2luLWxlZnQ6MzYuMDYzODI5Nzg3MjM0
MDUlfS5yb3ctZmx1aWQgLm9mZnNldDQ6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6MzQuMDQyNTUz
MTkxNDg5MzYlOyptYXJnaW4tbGVmdDozMy45MzYxNzAyMTI3NjU5NiV9LnJvdy1mbHVpZCAub2Zm
c2V0M3ttYXJnaW4tbGVmdDoyNy42NTk1NzQ0NjgwODUxMDQlOyptYXJnaW4tbGVmdDoyNy41NTMx
OTE0ODkzNjE3JX0ucm93LWZsdWlkIC5vZmZzZXQzOmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjI1
LjUzMTkxNDg5MzYxNzAyJTsqbWFyZ2luLWxlZnQ6MjUuNDI1NTMxOTE0ODkzNjE4JX0ucm93LWZs
dWlkIC5vZmZzZXQye21hcmdpbi1sZWZ0OjE5LjE0ODkzNjE3MDIxMjc2NCU7Km1hcmdpbi1sZWZ0
OjE5LjA0MjU1MzE5MTQ4OTM2JX0ucm93LWZsdWlkIC5vZmZzZXQyOmZpcnN0LWNoaWxke21hcmdp
bi1sZWZ0OjE3LjAyMTI3NjU5NTc0NDY4JTsqbWFyZ2luLWxlZnQ6MTYuOTE0ODkzNjE3MDIxMjc4
JX0ucm93LWZsdWlkIC5vZmZzZXQxe21hcmdpbi1sZWZ0OjEwLjYzODI5Nzg3MjM0MDQyNSU7Km1h
cmdpbi1sZWZ0OjEwLjUzMTkxNDg5MzYxNzAyJX0ucm93LWZsdWlkIC5vZmZzZXQxOmZpcnN0LWNo
aWxke21hcmdpbi1sZWZ0OjguNTEwNjM4Mjk3ODcyMzQlOyptYXJnaW4tbGVmdDo4LjQwNDI1NTMx
OTE0ODkzOCV9W2NsYXNzKj0ic3BhbiJdLmhpZGUsLnJvdy1mbHVpZCBbY2xhc3MqPSJzcGFuIl0u
aGlkZXtkaXNwbGF5Om5vbmV9W2NsYXNzKj0ic3BhbiJdLnB1bGwtcmlnaHQsLnJvdy1mbHVpZCBb
Y2xhc3MqPSJzcGFuIl0ucHVsbC1yaWdodHtmbG9hdDpyaWdodH0uY29udGFpbmVye21hcmdpbi1y
aWdodDphdXRvO21hcmdpbi1sZWZ0OmF1dG87Knpvb206MX0uY29udGFpbmVyOmJlZm9yZSwuY29u
dGFpbmVyOmFmdGVye2Rpc3BsYXk6dGFibGU7bGluZS1oZWlnaHQ6MDtjb250ZW50OiIifS5jb250
YWluZXI6YWZ0ZXJ7Y2xlYXI6Ym90aH0uY29udGFpbmVyLWZsdWlke3BhZGRpbmctcmlnaHQ6MjBw
eDtwYWRkaW5nLWxlZnQ6MjBweDsqem9vbToxfS5jb250YWluZXItZmx1aWQ6YmVmb3JlLC5jb250
YWluZXItZmx1aWQ6YWZ0ZXJ7ZGlzcGxheTp0YWJsZTtsaW5lLWhlaWdodDowO2NvbnRlbnQ6IiJ9
LmNvbnRhaW5lci1mbHVpZDphZnRlcntjbGVhcjpib3RofXB7bWFyZ2luOjAgMCAxMHB4fS5sZWFk
e21hcmdpbi1ib3R0b206MjBweDtmb250LXNpemU6MjFweDtmb250LXdlaWdodDoyMDA7bGluZS1o
ZWlnaHQ6MzBweH1zbWFsbHtmb250LXNpemU6ODUlfXN0cm9uZ3tmb250LXdlaWdodDpib2xkfWVt
e2ZvbnQtc3R5bGU6aXRhbGljfWNpdGV7Zm9udC1zdHlsZTpub3JtYWx9Lm11dGVke2NvbG9yOiM5
OTl9YS5tdXRlZDpob3Zlcntjb2xvcjojODA4MDgwfS50ZXh0LXdhcm5pbmd7Y29sb3I6I2MwOTg1
M31hLnRleHQtd2FybmluZzpob3Zlcntjb2xvcjojYTQ3ZTNjfS50ZXh0LWVycm9ye2NvbG9yOiNi
OTRhNDh9YS50ZXh0LWVycm9yOmhvdmVye2NvbG9yOiM5NTNiMzl9LnRleHQtaW5mb3tjb2xvcjoj
M2E4N2FkfWEudGV4dC1pbmZvOmhvdmVye2NvbG9yOiMyZDY5ODd9LnRleHQtc3VjY2Vzc3tjb2xv
cjojNDY4ODQ3fWEudGV4dC1zdWNjZXNzOmhvdmVye2NvbG9yOiMzNTY2MzV9aDEsaDIsaDMsaDQs
aDUsaDZ7bWFyZ2luOjEwcHggMDtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtd2VpZ2h0OmJvbGQ7
bGluZS1oZWlnaHQ6MjBweDtjb2xvcjppbmhlcml0O3RleHQtcmVuZGVyaW5nOm9wdGltaXplbGVn
aWJpbGl0eX1oMSBzbWFsbCxoMiBzbWFsbCxoMyBzbWFsbCxoNCBzbWFsbCxoNSBzbWFsbCxoNiBz
bWFsbHtmb250LXdlaWdodDpub3JtYWw7bGluZS1oZWlnaHQ6MTtjb2xvcjojOTk5fWgxLGgyLGgz
e2xpbmUtaGVpZ2h0OjQwcHh9aDF7Zm9udC1zaXplOjM4LjVweH1oMntmb250LXNpemU6MzEuNXB4
fWgze2ZvbnQtc2l6ZToyNC41cHh9aDR7Zm9udC1zaXplOjE3LjVweH1oNXtmb250LXNpemU6MTRw
eH1oNntmb250LXNpemU6MTEuOXB4fWgxIHNtYWxse2ZvbnQtc2l6ZToyNC41cHh9aDIgc21hbGx7
Zm9udC1zaXplOjE3LjVweH1oMyBzbWFsbHtmb250LXNpemU6MTRweH1oNCBzbWFsbHtmb250LXNp
emU6MTRweH0ucGFnZS1oZWFkZXJ7cGFkZGluZy1ib3R0b206OXB4O21hcmdpbjoyMHB4IDAgMzBw
eDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWVlfXVsLG9se3BhZGRpbmc6MDttYXJnaW46MCAw
IDEwcHggMjVweH11bCB1bCx1bCBvbCxvbCBvbCxvbCB1bHttYXJnaW4tYm90dG9tOjB9bGl7bGlu
ZS1oZWlnaHQ6MjBweH11bC51bnN0eWxlZCxvbC51bnN0eWxlZHttYXJnaW4tbGVmdDowO2xpc3Qt
c3R5bGU6bm9uZX11bC5pbmxpbmUsb2wuaW5saW5le21hcmdpbi1sZWZ0OjA7bGlzdC1zdHlsZTpu
b25lfXVsLmlubGluZT5saSxvbC5pbmxpbmU+bGl7ZGlzcGxheTppbmxpbmUtYmxvY2s7cGFkZGlu
Zy1yaWdodDo1cHg7cGFkZGluZy1sZWZ0OjVweH1kbHttYXJnaW4tYm90dG9tOjIwcHh9ZHQsZGR7
bGluZS1oZWlnaHQ6MjBweH1kdHtmb250LXdlaWdodDpib2xkfWRke21hcmdpbi1sZWZ0OjEwcHh9
LmRsLWhvcml6b250YWx7Knpvb206MX0uZGwtaG9yaXpvbnRhbDpiZWZvcmUsLmRsLWhvcml6b250
YWw6YWZ0ZXJ7ZGlzcGxheTp0YWJsZTtsaW5lLWhlaWdodDowO2NvbnRlbnQ6IiJ9LmRsLWhvcml6
b250YWw6YWZ0ZXJ7Y2xlYXI6Ym90aH0uZGwtaG9yaXpvbnRhbCBkdHtmbG9hdDpsZWZ0O3dpZHRo
OjE2MHB4O292ZXJmbG93OmhpZGRlbjtjbGVhcjpsZWZ0O3RleHQtYWxpZ246cmlnaHQ7dGV4dC1v
dmVyZmxvdzplbGxpcHNpczt3aGl0ZS1zcGFjZTpub3dyYXB9LmRsLWhvcml6b250YWwgZGR7bWFy
Z2luLWxlZnQ6MTgwcHh9aHJ7bWFyZ2luOjIwcHggMDtib3JkZXI6MDtib3JkZXItdG9wOjFweCBz
b2xpZCAjZWVlO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNmZmZ9YWJiclt0aXRsZV0sYWJicltk
YXRhLW9yaWdpbmFsLXRpdGxlXXtjdXJzb3I6aGVscDtib3JkZXItYm90dG9tOjFweCBkb3R0ZWQg
Izk5OX1hYmJyLmluaXRpYWxpc217Zm9udC1zaXplOjkwJTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNh
c2V9YmxvY2txdW90ZXtwYWRkaW5nOjAgMCAwIDE1cHg7bWFyZ2luOjAgMCAyMHB4O2JvcmRlci1s
ZWZ0OjVweCBzb2xpZCAjZWVlfWJsb2NrcXVvdGUgcHttYXJnaW4tYm90dG9tOjA7Zm9udC1zaXpl
OjE2cHg7Zm9udC13ZWlnaHQ6MzAwO2xpbmUtaGVpZ2h0OjI1cHh9YmxvY2txdW90ZSBzbWFsbHtk
aXNwbGF5OmJsb2NrO2xpbmUtaGVpZ2h0OjIwcHg7Y29sb3I6Izk5OX1ibG9ja3F1b3RlIHNtYWxs
OmJlZm9yZXtjb250ZW50OidcMjAxNCBcMDBBMCd9YmxvY2txdW90ZS5wdWxsLXJpZ2h0e2Zsb2F0
OnJpZ2h0O3BhZGRpbmctcmlnaHQ6MTVweDtwYWRkaW5nLWxlZnQ6MDtib3JkZXItcmlnaHQ6NXB4
IHNvbGlkICNlZWU7Ym9yZGVyLWxlZnQ6MH1ibG9ja3F1b3RlLnB1bGwtcmlnaHQgcCxibG9ja3F1
b3RlLnB1bGwtcmlnaHQgc21hbGx7dGV4dC1hbGlnbjpyaWdodH1ibG9ja3F1b3RlLnB1bGwtcmln
aHQgc21hbGw6YmVmb3Jle2NvbnRlbnQ6Jyd9YmxvY2txdW90ZS5wdWxsLXJpZ2h0IHNtYWxsOmFm
dGVye2NvbnRlbnQ6J1wwMEEwIFwyMDE0J31xOmJlZm9yZSxxOmFmdGVyLGJsb2NrcXVvdGU6YmVm
b3JlLGJsb2NrcXVvdGU6YWZ0ZXJ7Y29udGVudDoiIn1hZGRyZXNze2Rpc3BsYXk6YmxvY2s7bWFy
Z2luLWJvdHRvbToyMHB4O2ZvbnQtc3R5bGU6bm9ybWFsO2xpbmUtaGVpZ2h0OjIwcHh9Y29kZSxw
cmV7cGFkZGluZzowIDNweCAycHg7Zm9udC1mYW1pbHk6TW9uYWNvLE1lbmxvLENvbnNvbGFzLCJD
b3VyaWVyIE5ldyIsbW9ub3NwYWNlO2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiMzMzM7LXdlYmtpdC1i
b3JkZXItcmFkaXVzOjNweDstbW96LWJvcmRlci1yYWRpdXM6M3B4O2JvcmRlci1yYWRpdXM6M3B4
fWNvZGV7cGFkZGluZzoycHggNHB4O2NvbG9yOiNkMTQ7d2hpdGUtc3BhY2U6bm93cmFwO2JhY2tn
cm91bmQtY29sb3I6I2Y3ZjdmOTtib3JkZXI6MXB4IHNvbGlkICNlMWUxZTh9cHJle2Rpc3BsYXk6
YmxvY2s7cGFkZGluZzo5LjVweDttYXJnaW46MCAwIDEwcHg7Zm9udC1zaXplOjEzcHg7bGluZS1o
ZWlnaHQ6MjBweDt3b3JkLWJyZWFrOmJyZWFrLWFsbDt3b3JkLXdyYXA6YnJlYWstd29yZDt3aGl0
ZS1zcGFjZTpwcmU7d2hpdGUtc3BhY2U6cHJlLXdyYXA7YmFja2dyb3VuZC1jb2xvcjojZjVmNWY1
O2JvcmRlcjoxcHggc29saWQgI2NjYztib3JkZXI6MXB4IHNvbGlkIHJnYmEoMCwwLDAsMC4xNSk7
LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4O2JvcmRlci1y
YWRpdXM6NHB4fXByZS5wcmV0dHlwcmludHttYXJnaW4tYm90dG9tOjIwcHh9cHJlIGNvZGV7cGFk
ZGluZzowO2NvbG9yOmluaGVyaXQ7d2hpdGUtc3BhY2U6cHJlO3doaXRlLXNwYWNlOnByZS13cmFw
O2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyOjB9LnByZS1zY3JvbGxhYmxle21h
eC1oZWlnaHQ6MzQwcHg7b3ZlcmZsb3cteTpzY3JvbGx9Zm9ybXttYXJnaW46MCAwIDIwcHh9Zmll
bGRzZXR7cGFkZGluZzowO21hcmdpbjowO2JvcmRlcjowfWxlZ2VuZHtkaXNwbGF5OmJsb2NrO3dp
ZHRoOjEwMCU7cGFkZGluZzowO21hcmdpbi1ib3R0b206MjBweDtmb250LXNpemU6MjFweDtsaW5l
LWhlaWdodDo0MHB4O2NvbG9yOiMzMzM7Ym9yZGVyOjA7Ym9yZGVyLWJvdHRvbToxcHggc29saWQg
I2U1ZTVlNX1sZWdlbmQgc21hbGx7Zm9udC1zaXplOjE1cHg7Y29sb3I6Izk5OX1sYWJlbCxpbnB1
dCxidXR0b24sc2VsZWN0LHRleHRhcmVhe2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0Om5vcm1h
bDtsaW5lLWhlaWdodDoyMHB4fWlucHV0LGJ1dHRvbixzZWxlY3QsdGV4dGFyZWF7Zm9udC1mYW1p
bHk6IkhlbHZldGljYSBOZXVlIixIZWx2ZXRpY2EsQXJpYWwsc2Fucy1zZXJpZn1sYWJlbHtkaXNw
bGF5OmJsb2NrO21hcmdpbi1ib3R0b206NXB4fXNlbGVjdCx0ZXh0YXJlYSxpbnB1dFt0eXBlPSJ0
ZXh0Il0saW5wdXRbdHlwZT0icGFzc3dvcmQiXSxpbnB1dFt0eXBlPSJkYXRldGltZSJdLGlucHV0
W3R5cGU9ImRhdGV0aW1lLWxvY2FsIl0saW5wdXRbdHlwZT0iZGF0ZSJdLGlucHV0W3R5cGU9Im1v
bnRoIl0saW5wdXRbdHlwZT0idGltZSJdLGlucHV0W3R5cGU9IndlZWsiXSxpbnB1dFt0eXBlPSJu
dW1iZXIiXSxpbnB1dFt0eXBlPSJlbWFpbCJdLGlucHV0W3R5cGU9InVybCJdLGlucHV0W3R5cGU9
InNlYXJjaCJdLGlucHV0W3R5cGU9InRlbCJdLGlucHV0W3R5cGU9ImNvbG9yIl0sLnVuZWRpdGFi
bGUtaW5wdXR7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjIwcHg7cGFkZGluZzo0cHggNnB4
O21hcmdpbi1ib3R0b206MTBweDtmb250LXNpemU6MTRweDtsaW5lLWhlaWdodDoyMHB4O2NvbG9y
OiM1NTU7dmVydGljYWwtYWxpZ246bWlkZGxlOy13ZWJraXQtYm9yZGVyLXJhZGl1czo0cHg7LW1v
ei1ib3JkZXItcmFkaXVzOjRweDtib3JkZXItcmFkaXVzOjRweH1pbnB1dCx0ZXh0YXJlYSwudW5l
ZGl0YWJsZS1pbnB1dHt3aWR0aDoyMDZweH10ZXh0YXJlYXtoZWlnaHQ6YXV0b310ZXh0YXJlYSxp
bnB1dFt0eXBlPSJ0ZXh0Il0saW5wdXRbdHlwZT0icGFzc3dvcmQiXSxpbnB1dFt0eXBlPSJkYXRl
dGltZSJdLGlucHV0W3R5cGU9ImRhdGV0aW1lLWxvY2FsIl0saW5wdXRbdHlwZT0iZGF0ZSJdLGlu
cHV0W3R5cGU9Im1vbnRoIl0saW5wdXRbdHlwZT0idGltZSJdLGlucHV0W3R5cGU9IndlZWsiXSxp
bnB1dFt0eXBlPSJudW1iZXIiXSxpbnB1dFt0eXBlPSJlbWFpbCJdLGlucHV0W3R5cGU9InVybCJd
LGlucHV0W3R5cGU9InNlYXJjaCJdLGlucHV0W3R5cGU9InRlbCJdLGlucHV0W3R5cGU9ImNvbG9y
Il0sLnVuZWRpdGFibGUtaW5wdXR7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjoxcHggc29s
aWQgI2NjYzstd2Via2l0LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4w
NzUpOy1tb3otYm94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA3NSk7Ym94
LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA3NSk7LXdlYmtpdC10cmFuc2l0
aW9uOmJvcmRlciBsaW5lYXIgLjJzLGJveC1zaGFkb3cgbGluZWFyIC4yczstbW96LXRyYW5zaXRp
b246Ym9yZGVyIGxpbmVhciAuMnMsYm94LXNoYWRvdyBsaW5lYXIgLjJzOy1vLXRyYW5zaXRpb246
Ym9yZGVyIGxpbmVhciAuMnMsYm94LXNoYWRvdyBsaW5lYXIgLjJzO3RyYW5zaXRpb246Ym9yZGVy
IGxpbmVhciAuMnMsYm94LXNoYWRvdyBsaW5lYXIgLjJzfXRleHRhcmVhOmZvY3VzLGlucHV0W3R5
cGU9InRleHQiXTpmb2N1cyxpbnB1dFt0eXBlPSJwYXNzd29yZCJdOmZvY3VzLGlucHV0W3R5cGU9
ImRhdGV0aW1lIl06Zm9jdXMsaW5wdXRbdHlwZT0iZGF0ZXRpbWUtbG9jYWwiXTpmb2N1cyxpbnB1
dFt0eXBlPSJkYXRlIl06Zm9jdXMsaW5wdXRbdHlwZT0ibW9udGgiXTpmb2N1cyxpbnB1dFt0eXBl
PSJ0aW1lIl06Zm9jdXMsaW5wdXRbdHlwZT0id2VlayJdOmZvY3VzLGlucHV0W3R5cGU9Im51bWJl
ciJdOmZvY3VzLGlucHV0W3R5cGU9ImVtYWlsIl06Zm9jdXMsaW5wdXRbdHlwZT0idXJsIl06Zm9j
dXMsaW5wdXRbdHlwZT0ic2VhcmNoIl06Zm9jdXMsaW5wdXRbdHlwZT0idGVsIl06Zm9jdXMsaW5w
dXRbdHlwZT0iY29sb3IiXTpmb2N1cywudW5lZGl0YWJsZS1pbnB1dDpmb2N1c3tib3JkZXItY29s
b3I6cmdiYSg4MiwxNjgsMjM2LDAuOCk7b3V0bGluZTowO291dGxpbmU6dGhpbiBkb3R0ZWQgXDk7
LXdlYmtpdC1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDc1KSwwIDAg
OHB4IHJnYmEoODIsMTY4LDIzNiwwLjYpOy1tb3otYm94LXNoYWRvdzppbnNldCAwIDFweCAxcHgg
cmdiYSgwLDAsMCwwLjA3NSksMCAwIDhweCByZ2JhKDgyLDE2OCwyMzYsMC42KTtib3gtc2hhZG93
Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDc1KSwwIDAgOHB4IHJnYmEoODIsMTY4LDIz
NiwwLjYpfWlucHV0W3R5cGU9InJhZGlvIl0saW5wdXRbdHlwZT0iY2hlY2tib3giXXttYXJnaW46
NHB4IDAgMDttYXJnaW4tdG9wOjFweCBcOTsqbWFyZ2luLXRvcDowO2xpbmUtaGVpZ2h0Om5vcm1h
bH1pbnB1dFt0eXBlPSJmaWxlIl0saW5wdXRbdHlwZT0iaW1hZ2UiXSxpbnB1dFt0eXBlPSJzdWJt
aXQiXSxpbnB1dFt0eXBlPSJyZXNldCJdLGlucHV0W3R5cGU9ImJ1dHRvbiJdLGlucHV0W3R5cGU9
InJhZGlvIl0saW5wdXRbdHlwZT0iY2hlY2tib3giXXt3aWR0aDphdXRvfXNlbGVjdCxpbnB1dFt0
eXBlPSJmaWxlIl17aGVpZ2h0OjMwcHg7Km1hcmdpbi10b3A6NHB4O2xpbmUtaGVpZ2h0OjMwcHh9
c2VsZWN0e3dpZHRoOjIyMHB4O2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXI6MXB4IHNvbGlk
ICNjY2N9c2VsZWN0W211bHRpcGxlXSxzZWxlY3Rbc2l6ZV17aGVpZ2h0OmF1dG99c2VsZWN0OmZv
Y3VzLGlucHV0W3R5cGU9ImZpbGUiXTpmb2N1cyxpbnB1dFt0eXBlPSJyYWRpbyJdOmZvY3VzLGlu
cHV0W3R5cGU9ImNoZWNrYm94Il06Zm9jdXN7b3V0bGluZTp0aGluIGRvdHRlZCAjMzMzO291dGxp
bmU6NXB4IGF1dG8gLXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yO291dGxpbmUtb2Zmc2V0Oi0ycHh9
LnVuZWRpdGFibGUtaW5wdXQsLnVuZWRpdGFibGUtdGV4dGFyZWF7Y29sb3I6Izk5OTtjdXJzb3I6
bm90LWFsbG93ZWQ7YmFja2dyb3VuZC1jb2xvcjojZmNmY2ZjO2JvcmRlci1jb2xvcjojY2NjOy13
ZWJraXQtYm94LXNoYWRvdzppbnNldCAwIDFweCAycHggcmdiYSgwLDAsMCwwLjAyNSk7LW1vei1i
b3gtc2hhZG93Omluc2V0IDAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMDI1KTtib3gtc2hhZG93Omlu
c2V0IDAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMDI1KX0udW5lZGl0YWJsZS1pbnB1dHtvdmVyZmxv
dzpoaWRkZW47d2hpdGUtc3BhY2U6bm93cmFwfS51bmVkaXRhYmxlLXRleHRhcmVhe3dpZHRoOmF1
dG87aGVpZ2h0OmF1dG99aW5wdXQ6LW1vei1wbGFjZWhvbGRlcix0ZXh0YXJlYTotbW96LXBsYWNl
aG9sZGVye2NvbG9yOiM5OTl9aW5wdXQ6LW1zLWlucHV0LXBsYWNlaG9sZGVyLHRleHRhcmVhOi1t
cy1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjojOTk5fWlucHV0Ojotd2Via2l0LWlucHV0LXBsYWNl
aG9sZGVyLHRleHRhcmVhOjotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOiM5OTl9LnJh
ZGlvLC5jaGVja2JveHttaW4taGVpZ2h0OjIwcHg7cGFkZGluZy1sZWZ0OjIwcHh9LnJhZGlvIGlu
cHV0W3R5cGU9InJhZGlvIl0sLmNoZWNrYm94IGlucHV0W3R5cGU9ImNoZWNrYm94Il17ZmxvYXQ6
bGVmdDttYXJnaW4tbGVmdDotMjBweH0uY29udHJvbHM+LnJhZGlvOmZpcnN0LWNoaWxkLC5jb250
cm9scz4uY2hlY2tib3g6Zmlyc3QtY2hpbGR7cGFkZGluZy10b3A6NXB4fS5yYWRpby5pbmxpbmUs
LmNoZWNrYm94LmlubGluZXtkaXNwbGF5OmlubGluZS1ibG9jaztwYWRkaW5nLXRvcDo1cHg7bWFy
Z2luLWJvdHRvbTowO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0ucmFkaW8uaW5saW5lKy5yYWRpby5p
bmxpbmUsLmNoZWNrYm94LmlubGluZSsuY2hlY2tib3guaW5saW5le21hcmdpbi1sZWZ0OjEwcHh9
LmlucHV0LW1pbml7d2lkdGg6NjBweH0uaW5wdXQtc21hbGx7d2lkdGg6OTBweH0uaW5wdXQtbWVk
aXVte3dpZHRoOjE1MHB4fS5pbnB1dC1sYXJnZXt3aWR0aDoyMTBweH0uaW5wdXQteGxhcmdle3dp
ZHRoOjI3MHB4fS5pbnB1dC14eGxhcmdle3dpZHRoOjUzMHB4fWlucHV0W2NsYXNzKj0ic3BhbiJd
LHNlbGVjdFtjbGFzcyo9InNwYW4iXSx0ZXh0YXJlYVtjbGFzcyo9InNwYW4iXSwudW5lZGl0YWJs
ZS1pbnB1dFtjbGFzcyo9InNwYW4iXSwucm93LWZsdWlkIGlucHV0W2NsYXNzKj0ic3BhbiJdLC5y
b3ctZmx1aWQgc2VsZWN0W2NsYXNzKj0ic3BhbiJdLC5yb3ctZmx1aWQgdGV4dGFyZWFbY2xhc3Mq
PSJzcGFuIl0sLnJvdy1mbHVpZCAudW5lZGl0YWJsZS1pbnB1dFtjbGFzcyo9InNwYW4iXXtmbG9h
dDpub25lO21hcmdpbi1sZWZ0OjB9LmlucHV0LWFwcGVuZCBpbnB1dFtjbGFzcyo9InNwYW4iXSwu
aW5wdXQtYXBwZW5kIC51bmVkaXRhYmxlLWlucHV0W2NsYXNzKj0ic3BhbiJdLC5pbnB1dC1wcmVw
ZW5kIGlucHV0W2NsYXNzKj0ic3BhbiJdLC5pbnB1dC1wcmVwZW5kIC51bmVkaXRhYmxlLWlucHV0
W2NsYXNzKj0ic3BhbiJdLC5yb3ctZmx1aWQgaW5wdXRbY2xhc3MqPSJzcGFuIl0sLnJvdy1mbHVp
ZCBzZWxlY3RbY2xhc3MqPSJzcGFuIl0sLnJvdy1mbHVpZCB0ZXh0YXJlYVtjbGFzcyo9InNwYW4i
XSwucm93LWZsdWlkIC51bmVkaXRhYmxlLWlucHV0W2NsYXNzKj0ic3BhbiJdLC5yb3ctZmx1aWQg
LmlucHV0LXByZXBlbmQgW2NsYXNzKj0ic3BhbiJdLC5yb3ctZmx1aWQgLmlucHV0LWFwcGVuZCBb
Y2xhc3MqPSJzcGFuIl17ZGlzcGxheTppbmxpbmUtYmxvY2t9aW5wdXQsdGV4dGFyZWEsLnVuZWRp
dGFibGUtaW5wdXR7bWFyZ2luLWxlZnQ6MH0uY29udHJvbHMtcm93IFtjbGFzcyo9InNwYW4iXStb
Y2xhc3MqPSJzcGFuIl17bWFyZ2luLWxlZnQ6MjBweH1pbnB1dC5zcGFuMTIsdGV4dGFyZWEuc3Bh
bjEyLC51bmVkaXRhYmxlLWlucHV0LnNwYW4xMnt3aWR0aDo5MjZweH1pbnB1dC5zcGFuMTEsdGV4
dGFyZWEuc3BhbjExLC51bmVkaXRhYmxlLWlucHV0LnNwYW4xMXt3aWR0aDo4NDZweH1pbnB1dC5z
cGFuMTAsdGV4dGFyZWEuc3BhbjEwLC51bmVkaXRhYmxlLWlucHV0LnNwYW4xMHt3aWR0aDo3NjZw
eH1pbnB1dC5zcGFuOSx0ZXh0YXJlYS5zcGFuOSwudW5lZGl0YWJsZS1pbnB1dC5zcGFuOXt3aWR0
aDo2ODZweH1pbnB1dC5zcGFuOCx0ZXh0YXJlYS5zcGFuOCwudW5lZGl0YWJsZS1pbnB1dC5zcGFu
OHt3aWR0aDo2MDZweH1pbnB1dC5zcGFuNyx0ZXh0YXJlYS5zcGFuNywudW5lZGl0YWJsZS1pbnB1
dC5zcGFuN3t3aWR0aDo1MjZweH1pbnB1dC5zcGFuNix0ZXh0YXJlYS5zcGFuNiwudW5lZGl0YWJs
ZS1pbnB1dC5zcGFuNnt3aWR0aDo0NDZweH1pbnB1dC5zcGFuNSx0ZXh0YXJlYS5zcGFuNSwudW5l
ZGl0YWJsZS1pbnB1dC5zcGFuNXt3aWR0aDozNjZweH1pbnB1dC5zcGFuNCx0ZXh0YXJlYS5zcGFu
NCwudW5lZGl0YWJsZS1pbnB1dC5zcGFuNHt3aWR0aDoyODZweH1pbnB1dC5zcGFuMyx0ZXh0YXJl
YS5zcGFuMywudW5lZGl0YWJsZS1pbnB1dC5zcGFuM3t3aWR0aDoyMDZweH1pbnB1dC5zcGFuMix0
ZXh0YXJlYS5zcGFuMiwudW5lZGl0YWJsZS1pbnB1dC5zcGFuMnt3aWR0aDoxMjZweH1pbnB1dC5z
cGFuMSx0ZXh0YXJlYS5zcGFuMSwudW5lZGl0YWJsZS1pbnB1dC5zcGFuMXt3aWR0aDo0NnB4fS5j
b250cm9scy1yb3d7Knpvb206MX0uY29udHJvbHMtcm93OmJlZm9yZSwuY29udHJvbHMtcm93OmFm
dGVye2Rpc3BsYXk6dGFibGU7bGluZS1oZWlnaHQ6MDtjb250ZW50OiIifS5jb250cm9scy1yb3c6
YWZ0ZXJ7Y2xlYXI6Ym90aH0uY29udHJvbHMtcm93IFtjbGFzcyo9InNwYW4iXSwucm93LWZsdWlk
IC5jb250cm9scy1yb3cgW2NsYXNzKj0ic3BhbiJde2Zsb2F0OmxlZnR9LmNvbnRyb2xzLXJvdyAu
Y2hlY2tib3hbY2xhc3MqPSJzcGFuIl0sLmNvbnRyb2xzLXJvdyAucmFkaW9bY2xhc3MqPSJzcGFu
Il17cGFkZGluZy10b3A6NXB4fWlucHV0W2Rpc2FibGVkXSxzZWxlY3RbZGlzYWJsZWRdLHRleHRh
cmVhW2Rpc2FibGVkXSxpbnB1dFtyZWFkb25seV0sc2VsZWN0W3JlYWRvbmx5XSx0ZXh0YXJlYVty
ZWFkb25seV17Y3Vyc29yOm5vdC1hbGxvd2VkO2JhY2tncm91bmQtY29sb3I6I2VlZX1pbnB1dFt0
eXBlPSJyYWRpbyJdW2Rpc2FibGVkXSxpbnB1dFt0eXBlPSJjaGVja2JveCJdW2Rpc2FibGVkXSxp
bnB1dFt0eXBlPSJyYWRpbyJdW3JlYWRvbmx5XSxpbnB1dFt0eXBlPSJjaGVja2JveCJdW3JlYWRv
bmx5XXtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fS5jb250cm9sLWdyb3VwLndhcm5pbmcg
LmNvbnRyb2wtbGFiZWwsLmNvbnRyb2wtZ3JvdXAud2FybmluZyAuaGVscC1ibG9jaywuY29udHJv
bC1ncm91cC53YXJuaW5nIC5oZWxwLWlubGluZXtjb2xvcjojYzA5ODUzfS5jb250cm9sLWdyb3Vw
Lndhcm5pbmcgLmNoZWNrYm94LC5jb250cm9sLWdyb3VwLndhcm5pbmcgLnJhZGlvLC5jb250cm9s
LWdyb3VwLndhcm5pbmcgaW5wdXQsLmNvbnRyb2wtZ3JvdXAud2FybmluZyBzZWxlY3QsLmNvbnRy
b2wtZ3JvdXAud2FybmluZyB0ZXh0YXJlYXtjb2xvcjojYzA5ODUzfS5jb250cm9sLWdyb3VwLndh
cm5pbmcgaW5wdXQsLmNvbnRyb2wtZ3JvdXAud2FybmluZyBzZWxlY3QsLmNvbnRyb2wtZ3JvdXAu
d2FybmluZyB0ZXh0YXJlYXtib3JkZXItY29sb3I6I2MwOTg1Mzstd2Via2l0LWJveC1zaGFkb3c6
aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4wNzUpOy1tb3otYm94LXNoYWRvdzppbnNldCAw
IDFweCAxcHggcmdiYSgwLDAsMCwwLjA3NSk7Ym94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdi
YSgwLDAsMCwwLjA3NSl9LmNvbnRyb2wtZ3JvdXAud2FybmluZyBpbnB1dDpmb2N1cywuY29udHJv
bC1ncm91cC53YXJuaW5nIHNlbGVjdDpmb2N1cywuY29udHJvbC1ncm91cC53YXJuaW5nIHRleHRh
cmVhOmZvY3Vze2JvcmRlci1jb2xvcjojYTQ3ZTNjOy13ZWJraXQtYm94LXNoYWRvdzppbnNldCAw
IDFweCAxcHggcmdiYSgwLDAsMCwwLjA3NSksMCAwIDZweCAjZGJjNTllOy1tb3otYm94LXNoYWRv
dzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA3NSksMCAwIDZweCAjZGJjNTllO2JveC1z
aGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4wNzUpLDAgMCA2cHggI2RiYzU5ZX0u
Y29udHJvbC1ncm91cC53YXJuaW5nIC5pbnB1dC1wcmVwZW5kIC5hZGQtb24sLmNvbnRyb2wtZ3Jv
dXAud2FybmluZyAuaW5wdXQtYXBwZW5kIC5hZGQtb257Y29sb3I6I2MwOTg1MztiYWNrZ3JvdW5k
LWNvbG9yOiNmY2Y4ZTM7Ym9yZGVyLWNvbG9yOiNjMDk4NTN9LmNvbnRyb2wtZ3JvdXAuZXJyb3Ig
LmNvbnRyb2wtbGFiZWwsLmNvbnRyb2wtZ3JvdXAuZXJyb3IgLmhlbHAtYmxvY2ssLmNvbnRyb2wt
Z3JvdXAuZXJyb3IgLmhlbHAtaW5saW5le2NvbG9yOiNiOTRhNDh9LmNvbnRyb2wtZ3JvdXAuZXJy
b3IgLmNoZWNrYm94LC5jb250cm9sLWdyb3VwLmVycm9yIC5yYWRpbywuY29udHJvbC1ncm91cC5l
cnJvciBpbnB1dCwuY29udHJvbC1ncm91cC5lcnJvciBzZWxlY3QsLmNvbnRyb2wtZ3JvdXAuZXJy
b3IgdGV4dGFyZWF7Y29sb3I6I2I5NGE0OH0uY29udHJvbC1ncm91cC5lcnJvciBpbnB1dCwuY29u
dHJvbC1ncm91cC5lcnJvciBzZWxlY3QsLmNvbnRyb2wtZ3JvdXAuZXJyb3IgdGV4dGFyZWF7Ym9y
ZGVyLWNvbG9yOiNiOTRhNDg7LXdlYmtpdC1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2Jh
KDAsMCwwLDAuMDc1KTstbW96LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAs
MC4wNzUpO2JveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4wNzUpfS5jb250
cm9sLWdyb3VwLmVycm9yIGlucHV0OmZvY3VzLC5jb250cm9sLWdyb3VwLmVycm9yIHNlbGVjdDpm
b2N1cywuY29udHJvbC1ncm91cC5lcnJvciB0ZXh0YXJlYTpmb2N1c3tib3JkZXItY29sb3I6Izk1
M2IzOTstd2Via2l0LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4wNzUp
LDAgMCA2cHggI2Q1OTM5MjstbW96LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCww
LDAsMC4wNzUpLDAgMCA2cHggI2Q1OTM5Mjtib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2Jh
KDAsMCwwLDAuMDc1KSwwIDAgNnB4ICNkNTkzOTJ9LmNvbnRyb2wtZ3JvdXAuZXJyb3IgLmlucHV0
LXByZXBlbmQgLmFkZC1vbiwuY29udHJvbC1ncm91cC5lcnJvciAuaW5wdXQtYXBwZW5kIC5hZGQt
b257Y29sb3I6I2I5NGE0ODtiYWNrZ3JvdW5kLWNvbG9yOiNmMmRlZGU7Ym9yZGVyLWNvbG9yOiNi
OTRhNDh9LmNvbnRyb2wtZ3JvdXAuc3VjY2VzcyAuY29udHJvbC1sYWJlbCwuY29udHJvbC1ncm91
cC5zdWNjZXNzIC5oZWxwLWJsb2NrLC5jb250cm9sLWdyb3VwLnN1Y2Nlc3MgLmhlbHAtaW5saW5l
e2NvbG9yOiM0Njg4NDd9LmNvbnRyb2wtZ3JvdXAuc3VjY2VzcyAuY2hlY2tib3gsLmNvbnRyb2wt
Z3JvdXAuc3VjY2VzcyAucmFkaW8sLmNvbnRyb2wtZ3JvdXAuc3VjY2VzcyBpbnB1dCwuY29udHJv
bC1ncm91cC5zdWNjZXNzIHNlbGVjdCwuY29udHJvbC1ncm91cC5zdWNjZXNzIHRleHRhcmVhe2Nv
bG9yOiM0Njg4NDd9LmNvbnRyb2wtZ3JvdXAuc3VjY2VzcyBpbnB1dCwuY29udHJvbC1ncm91cC5z
dWNjZXNzIHNlbGVjdCwuY29udHJvbC1ncm91cC5zdWNjZXNzIHRleHRhcmVhe2JvcmRlci1jb2xv
cjojNDY4ODQ3Oy13ZWJraXQtYm94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCww
LjA3NSk7LW1vei1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDc1KTti
b3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDc1KX0uY29udHJvbC1ncm91
cC5zdWNjZXNzIGlucHV0OmZvY3VzLC5jb250cm9sLWdyb3VwLnN1Y2Nlc3Mgc2VsZWN0OmZvY3Vz
LC5jb250cm9sLWdyb3VwLnN1Y2Nlc3MgdGV4dGFyZWE6Zm9jdXN7Ym9yZGVyLWNvbG9yOiMzNTY2
MzU7LXdlYmtpdC1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDc1KSww
IDAgNnB4ICM3YWJhN2I7LW1vei1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCww
LDAuMDc1KSwwIDAgNnB4ICM3YWJhN2I7Ym94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgw
LDAsMCwwLjA3NSksMCAwIDZweCAjN2FiYTdifS5jb250cm9sLWdyb3VwLnN1Y2Nlc3MgLmlucHV0
LXByZXBlbmQgLmFkZC1vbiwuY29udHJvbC1ncm91cC5zdWNjZXNzIC5pbnB1dC1hcHBlbmQgLmFk
ZC1vbntjb2xvcjojNDY4ODQ3O2JhY2tncm91bmQtY29sb3I6I2RmZjBkODtib3JkZXItY29sb3I6
IzQ2ODg0N30uY29udHJvbC1ncm91cC5pbmZvIC5jb250cm9sLWxhYmVsLC5jb250cm9sLWdyb3Vw
LmluZm8gLmhlbHAtYmxvY2ssLmNvbnRyb2wtZ3JvdXAuaW5mbyAuaGVscC1pbmxpbmV7Y29sb3I6
IzNhODdhZH0uY29udHJvbC1ncm91cC5pbmZvIC5jaGVja2JveCwuY29udHJvbC1ncm91cC5pbmZv
IC5yYWRpbywuY29udHJvbC1ncm91cC5pbmZvIGlucHV0LC5jb250cm9sLWdyb3VwLmluZm8gc2Vs
ZWN0LC5jb250cm9sLWdyb3VwLmluZm8gdGV4dGFyZWF7Y29sb3I6IzNhODdhZH0uY29udHJvbC1n
cm91cC5pbmZvIGlucHV0LC5jb250cm9sLWdyb3VwLmluZm8gc2VsZWN0LC5jb250cm9sLWdyb3Vw
LmluZm8gdGV4dGFyZWF7Ym9yZGVyLWNvbG9yOiMzYTg3YWQ7LXdlYmtpdC1ib3gtc2hhZG93Omlu
c2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDc1KTstbW96LWJveC1zaGFkb3c6aW5zZXQgMCAx
cHggMXB4IHJnYmEoMCwwLDAsMC4wNzUpO2JveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEo
MCwwLDAsMC4wNzUpfS5jb250cm9sLWdyb3VwLmluZm8gaW5wdXQ6Zm9jdXMsLmNvbnRyb2wtZ3Jv
dXAuaW5mbyBzZWxlY3Q6Zm9jdXMsLmNvbnRyb2wtZ3JvdXAuaW5mbyB0ZXh0YXJlYTpmb2N1c3ti
b3JkZXItY29sb3I6IzJkNjk4Nzstd2Via2l0LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJn
YmEoMCwwLDAsMC4wNzUpLDAgMCA2cHggIzdhYjVkMzstbW96LWJveC1zaGFkb3c6aW5zZXQgMCAx
cHggMXB4IHJnYmEoMCwwLDAsMC4wNzUpLDAgMCA2cHggIzdhYjVkMztib3gtc2hhZG93Omluc2V0
IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDc1KSwwIDAgNnB4ICM3YWI1ZDN9LmNvbnRyb2wtZ3Jv
dXAuaW5mbyAuaW5wdXQtcHJlcGVuZCAuYWRkLW9uLC5jb250cm9sLWdyb3VwLmluZm8gLmlucHV0
LWFwcGVuZCAuYWRkLW9ue2NvbG9yOiMzYTg3YWQ7YmFja2dyb3VuZC1jb2xvcjojZDllZGY3O2Jv
cmRlci1jb2xvcjojM2E4N2FkfWlucHV0OmZvY3VzOmludmFsaWQsdGV4dGFyZWE6Zm9jdXM6aW52
YWxpZCxzZWxlY3Q6Zm9jdXM6aW52YWxpZHtjb2xvcjojYjk0YTQ4O2JvcmRlci1jb2xvcjojZWU1
ZjVifWlucHV0OmZvY3VzOmludmFsaWQ6Zm9jdXMsdGV4dGFyZWE6Zm9jdXM6aW52YWxpZDpmb2N1
cyxzZWxlY3Q6Zm9jdXM6aW52YWxpZDpmb2N1c3tib3JkZXItY29sb3I6I2U5MzIyZDstd2Via2l0
LWJveC1zaGFkb3c6MCAwIDZweCAjZjhiOWI3Oy1tb3otYm94LXNoYWRvdzowIDAgNnB4ICNmOGI5
Yjc7Ym94LXNoYWRvdzowIDAgNnB4ICNmOGI5Yjd9LmZvcm0tYWN0aW9uc3twYWRkaW5nOjE5cHgg
MjBweCAyMHB4O21hcmdpbi10b3A6MjBweDttYXJnaW4tYm90dG9tOjIwcHg7YmFja2dyb3VuZC1j
b2xvcjojZjVmNWY1O2JvcmRlci10b3A6MXB4IHNvbGlkICNlNWU1ZTU7Knpvb206MX0uZm9ybS1h
Y3Rpb25zOmJlZm9yZSwuZm9ybS1hY3Rpb25zOmFmdGVye2Rpc3BsYXk6dGFibGU7bGluZS1oZWln
aHQ6MDtjb250ZW50OiIifS5mb3JtLWFjdGlvbnM6YWZ0ZXJ7Y2xlYXI6Ym90aH0uaGVscC1ibG9j
aywuaGVscC1pbmxpbmV7Y29sb3I6IzU5NTk1OX0uaGVscC1ibG9ja3tkaXNwbGF5OmJsb2NrO21h
cmdpbi1ib3R0b206MTBweH0uaGVscC1pbmxpbmV7ZGlzcGxheTppbmxpbmUtYmxvY2s7KmRpc3Bs
YXk6aW5saW5lO3BhZGRpbmctbGVmdDo1cHg7dmVydGljYWwtYWxpZ246bWlkZGxlOyp6b29tOjF9
LmlucHV0LWFwcGVuZCwuaW5wdXQtcHJlcGVuZHttYXJnaW4tYm90dG9tOjVweDtmb250LXNpemU6
MDt3aGl0ZS1zcGFjZTpub3dyYXB9LmlucHV0LWFwcGVuZCBpbnB1dCwuaW5wdXQtcHJlcGVuZCBp
bnB1dCwuaW5wdXQtYXBwZW5kIHNlbGVjdCwuaW5wdXQtcHJlcGVuZCBzZWxlY3QsLmlucHV0LWFw
cGVuZCAudW5lZGl0YWJsZS1pbnB1dCwuaW5wdXQtcHJlcGVuZCAudW5lZGl0YWJsZS1pbnB1dCwu
aW5wdXQtYXBwZW5kIC5kcm9wZG93bi1tZW51LC5pbnB1dC1wcmVwZW5kIC5kcm9wZG93bi1tZW51
e2ZvbnQtc2l6ZToxNHB4fS5pbnB1dC1hcHBlbmQgaW5wdXQsLmlucHV0LXByZXBlbmQgaW5wdXQs
LmlucHV0LWFwcGVuZCBzZWxlY3QsLmlucHV0LXByZXBlbmQgc2VsZWN0LC5pbnB1dC1hcHBlbmQg
LnVuZWRpdGFibGUtaW5wdXQsLmlucHV0LXByZXBlbmQgLnVuZWRpdGFibGUtaW5wdXR7cG9zaXRp
b246cmVsYXRpdmU7bWFyZ2luLWJvdHRvbTowOyptYXJnaW4tbGVmdDowO3ZlcnRpY2FsLWFsaWdu
OnRvcDstd2Via2l0LWJvcmRlci1yYWRpdXM6MCA0cHggNHB4IDA7LW1vei1ib3JkZXItcmFkaXVz
OjAgNHB4IDRweCAwO2JvcmRlci1yYWRpdXM6MCA0cHggNHB4IDB9LmlucHV0LWFwcGVuZCBpbnB1
dDpmb2N1cywuaW5wdXQtcHJlcGVuZCBpbnB1dDpmb2N1cywuaW5wdXQtYXBwZW5kIHNlbGVjdDpm
b2N1cywuaW5wdXQtcHJlcGVuZCBzZWxlY3Q6Zm9jdXMsLmlucHV0LWFwcGVuZCAudW5lZGl0YWJs
ZS1pbnB1dDpmb2N1cywuaW5wdXQtcHJlcGVuZCAudW5lZGl0YWJsZS1pbnB1dDpmb2N1c3t6LWlu
ZGV4OjJ9LmlucHV0LWFwcGVuZCAuYWRkLW9uLC5pbnB1dC1wcmVwZW5kIC5hZGQtb257ZGlzcGxh
eTppbmxpbmUtYmxvY2s7d2lkdGg6YXV0bztoZWlnaHQ6MjBweDttaW4td2lkdGg6MTZweDtwYWRk
aW5nOjRweCA1cHg7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6bm9ybWFsO2xpbmUtaGVpZ2h0
OjIwcHg7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1zaGFkb3c6MCAxcHggMCAjZmZmO2JhY2tncm91
bmQtY29sb3I6I2VlZTtib3JkZXI6MXB4IHNvbGlkICNjY2N9LmlucHV0LWFwcGVuZCAuYWRkLW9u
LC5pbnB1dC1wcmVwZW5kIC5hZGQtb24sLmlucHV0LWFwcGVuZCAuYnRuLC5pbnB1dC1wcmVwZW5k
IC5idG4sLmlucHV0LWFwcGVuZCAuYnRuLWdyb3VwPi5kcm9wZG93bi10b2dnbGUsLmlucHV0LXBy
ZXBlbmQgLmJ0bi1ncm91cD4uZHJvcGRvd24tdG9nZ2xle3ZlcnRpY2FsLWFsaWduOnRvcDstd2Vi
a2l0LWJvcmRlci1yYWRpdXM6MDstbW96LWJvcmRlci1yYWRpdXM6MDtib3JkZXItcmFkaXVzOjB9
LmlucHV0LWFwcGVuZCAuYWN0aXZlLC5pbnB1dC1wcmVwZW5kIC5hY3RpdmV7YmFja2dyb3VuZC1j
b2xvcjojYTlkYmE5O2JvcmRlci1jb2xvcjojNDZhNTQ2fS5pbnB1dC1wcmVwZW5kIC5hZGQtb24s
LmlucHV0LXByZXBlbmQgLmJ0bnttYXJnaW4tcmlnaHQ6LTFweH0uaW5wdXQtcHJlcGVuZCAuYWRk
LW9uOmZpcnN0LWNoaWxkLC5pbnB1dC1wcmVwZW5kIC5idG46Zmlyc3QtY2hpbGR7LXdlYmtpdC1i
b3JkZXItcmFkaXVzOjRweCAwIDAgNHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHggMCAwIDRweDti
b3JkZXItcmFkaXVzOjRweCAwIDAgNHB4fS5pbnB1dC1hcHBlbmQgaW5wdXQsLmlucHV0LWFwcGVu
ZCBzZWxlY3QsLmlucHV0LWFwcGVuZCAudW5lZGl0YWJsZS1pbnB1dHstd2Via2l0LWJvcmRlci1y
YWRpdXM6NHB4IDAgMCA0cHg7LW1vei1ib3JkZXItcmFkaXVzOjRweCAwIDAgNHB4O2JvcmRlci1y
YWRpdXM6NHB4IDAgMCA0cHh9LmlucHV0LWFwcGVuZCBpbnB1dCsuYnRuLWdyb3VwIC5idG46bGFz
dC1jaGlsZCwuaW5wdXQtYXBwZW5kIHNlbGVjdCsuYnRuLWdyb3VwIC5idG46bGFzdC1jaGlsZCwu
aW5wdXQtYXBwZW5kIC51bmVkaXRhYmxlLWlucHV0Ky5idG4tZ3JvdXAgLmJ0bjpsYXN0LWNoaWxk
ey13ZWJraXQtYm9yZGVyLXJhZGl1czowIDRweCA0cHggMDstbW96LWJvcmRlci1yYWRpdXM6MCA0
cHggNHB4IDA7Ym9yZGVyLXJhZGl1czowIDRweCA0cHggMH0uaW5wdXQtYXBwZW5kIC5hZGQtb24s
LmlucHV0LWFwcGVuZCAuYnRuLC5pbnB1dC1hcHBlbmQgLmJ0bi1ncm91cHttYXJnaW4tbGVmdDot
MXB4fS5pbnB1dC1hcHBlbmQgLmFkZC1vbjpsYXN0LWNoaWxkLC5pbnB1dC1hcHBlbmQgLmJ0bjps
YXN0LWNoaWxkLC5pbnB1dC1hcHBlbmQgLmJ0bi1ncm91cDpsYXN0LWNoaWxkPi5kcm9wZG93bi10
b2dnbGV7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjAgNHB4IDRweCAwOy1tb3otYm9yZGVyLXJhZGl1
czowIDRweCA0cHggMDtib3JkZXItcmFkaXVzOjAgNHB4IDRweCAwfS5pbnB1dC1wcmVwZW5kLmlu
cHV0LWFwcGVuZCBpbnB1dCwuaW5wdXQtcHJlcGVuZC5pbnB1dC1hcHBlbmQgc2VsZWN0LC5pbnB1
dC1wcmVwZW5kLmlucHV0LWFwcGVuZCAudW5lZGl0YWJsZS1pbnB1dHstd2Via2l0LWJvcmRlci1y
YWRpdXM6MDstbW96LWJvcmRlci1yYWRpdXM6MDtib3JkZXItcmFkaXVzOjB9LmlucHV0LXByZXBl
bmQuaW5wdXQtYXBwZW5kIGlucHV0Ky5idG4tZ3JvdXAgLmJ0biwuaW5wdXQtcHJlcGVuZC5pbnB1
dC1hcHBlbmQgc2VsZWN0Ky5idG4tZ3JvdXAgLmJ0biwuaW5wdXQtcHJlcGVuZC5pbnB1dC1hcHBl
bmQgLnVuZWRpdGFibGUtaW5wdXQrLmJ0bi1ncm91cCAuYnRuey13ZWJraXQtYm9yZGVyLXJhZGl1
czowIDRweCA0cHggMDstbW96LWJvcmRlci1yYWRpdXM6MCA0cHggNHB4IDA7Ym9yZGVyLXJhZGl1
czowIDRweCA0cHggMH0uaW5wdXQtcHJlcGVuZC5pbnB1dC1hcHBlbmQgLmFkZC1vbjpmaXJzdC1j
aGlsZCwuaW5wdXQtcHJlcGVuZC5pbnB1dC1hcHBlbmQgLmJ0bjpmaXJzdC1jaGlsZHttYXJnaW4t
cmlnaHQ6LTFweDstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4IDAgMCA0cHg7LW1vei1ib3JkZXIt
cmFkaXVzOjRweCAwIDAgNHB4O2JvcmRlci1yYWRpdXM6NHB4IDAgMCA0cHh9LmlucHV0LXByZXBl
bmQuaW5wdXQtYXBwZW5kIC5hZGQtb246bGFzdC1jaGlsZCwuaW5wdXQtcHJlcGVuZC5pbnB1dC1h
cHBlbmQgLmJ0bjpsYXN0LWNoaWxke21hcmdpbi1sZWZ0Oi0xcHg7LXdlYmtpdC1ib3JkZXItcmFk
aXVzOjAgNHB4IDRweCAwOy1tb3otYm9yZGVyLXJhZGl1czowIDRweCA0cHggMDtib3JkZXItcmFk
aXVzOjAgNHB4IDRweCAwfS5pbnB1dC1wcmVwZW5kLmlucHV0LWFwcGVuZCAuYnRuLWdyb3VwOmZp
cnN0LWNoaWxke21hcmdpbi1sZWZ0OjB9aW5wdXQuc2VhcmNoLXF1ZXJ5e3BhZGRpbmctcmlnaHQ6
MTRweDtwYWRkaW5nLXJpZ2h0OjRweCBcOTtwYWRkaW5nLWxlZnQ6MTRweDtwYWRkaW5nLWxlZnQ6
NHB4IFw5O21hcmdpbi1ib3R0b206MDstd2Via2l0LWJvcmRlci1yYWRpdXM6MTVweDstbW96LWJv
cmRlci1yYWRpdXM6MTVweDtib3JkZXItcmFkaXVzOjE1cHh9LmZvcm0tc2VhcmNoIC5pbnB1dC1h
cHBlbmQgLnNlYXJjaC1xdWVyeSwuZm9ybS1zZWFyY2ggLmlucHV0LXByZXBlbmQgLnNlYXJjaC1x
dWVyeXstd2Via2l0LWJvcmRlci1yYWRpdXM6MDstbW96LWJvcmRlci1yYWRpdXM6MDtib3JkZXIt
cmFkaXVzOjB9LmZvcm0tc2VhcmNoIC5pbnB1dC1hcHBlbmQgLnNlYXJjaC1xdWVyeXstd2Via2l0
LWJvcmRlci1yYWRpdXM6MTRweCAwIDAgMTRweDstbW96LWJvcmRlci1yYWRpdXM6MTRweCAwIDAg
MTRweDtib3JkZXItcmFkaXVzOjE0cHggMCAwIDE0cHh9LmZvcm0tc2VhcmNoIC5pbnB1dC1hcHBl
bmQgLmJ0bnstd2Via2l0LWJvcmRlci1yYWRpdXM6MCAxNHB4IDE0cHggMDstbW96LWJvcmRlci1y
YWRpdXM6MCAxNHB4IDE0cHggMDtib3JkZXItcmFkaXVzOjAgMTRweCAxNHB4IDB9LmZvcm0tc2Vh
cmNoIC5pbnB1dC1wcmVwZW5kIC5zZWFyY2gtcXVlcnl7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjAg
MTRweCAxNHB4IDA7LW1vei1ib3JkZXItcmFkaXVzOjAgMTRweCAxNHB4IDA7Ym9yZGVyLXJhZGl1
czowIDE0cHggMTRweCAwfS5mb3JtLXNlYXJjaCAuaW5wdXQtcHJlcGVuZCAuYnRuey13ZWJraXQt
Ym9yZGVyLXJhZGl1czoxNHB4IDAgMCAxNHB4Oy1tb3otYm9yZGVyLXJhZGl1czoxNHB4IDAgMCAx
NHB4O2JvcmRlci1yYWRpdXM6MTRweCAwIDAgMTRweH0uZm9ybS1zZWFyY2ggaW5wdXQsLmZvcm0t
aW5saW5lIGlucHV0LC5mb3JtLWhvcml6b250YWwgaW5wdXQsLmZvcm0tc2VhcmNoIHRleHRhcmVh
LC5mb3JtLWlubGluZSB0ZXh0YXJlYSwuZm9ybS1ob3Jpem9udGFsIHRleHRhcmVhLC5mb3JtLXNl
YXJjaCBzZWxlY3QsLmZvcm0taW5saW5lIHNlbGVjdCwuZm9ybS1ob3Jpem9udGFsIHNlbGVjdCwu
Zm9ybS1zZWFyY2ggLmhlbHAtaW5saW5lLC5mb3JtLWlubGluZSAuaGVscC1pbmxpbmUsLmZvcm0t
aG9yaXpvbnRhbCAuaGVscC1pbmxpbmUsLmZvcm0tc2VhcmNoIC51bmVkaXRhYmxlLWlucHV0LC5m
b3JtLWlubGluZSAudW5lZGl0YWJsZS1pbnB1dCwuZm9ybS1ob3Jpem9udGFsIC51bmVkaXRhYmxl
LWlucHV0LC5mb3JtLXNlYXJjaCAuaW5wdXQtcHJlcGVuZCwuZm9ybS1pbmxpbmUgLmlucHV0LXBy
ZXBlbmQsLmZvcm0taG9yaXpvbnRhbCAuaW5wdXQtcHJlcGVuZCwuZm9ybS1zZWFyY2ggLmlucHV0
LWFwcGVuZCwuZm9ybS1pbmxpbmUgLmlucHV0LWFwcGVuZCwuZm9ybS1ob3Jpem9udGFsIC5pbnB1
dC1hcHBlbmR7ZGlzcGxheTppbmxpbmUtYmxvY2s7KmRpc3BsYXk6aW5saW5lO21hcmdpbi1ib3R0
b206MDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7Knpvb206MX0uZm9ybS1zZWFyY2ggLmhpZGUsLmZv
cm0taW5saW5lIC5oaWRlLC5mb3JtLWhvcml6b250YWwgLmhpZGV7ZGlzcGxheTpub25lfS5mb3Jt
LXNlYXJjaCBsYWJlbCwuZm9ybS1pbmxpbmUgbGFiZWwsLmZvcm0tc2VhcmNoIC5idG4tZ3JvdXAs
LmZvcm0taW5saW5lIC5idG4tZ3JvdXB7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmZvcm0tc2VhcmNo
IC5pbnB1dC1hcHBlbmQsLmZvcm0taW5saW5lIC5pbnB1dC1hcHBlbmQsLmZvcm0tc2VhcmNoIC5p
bnB1dC1wcmVwZW5kLC5mb3JtLWlubGluZSAuaW5wdXQtcHJlcGVuZHttYXJnaW4tYm90dG9tOjB9
LmZvcm0tc2VhcmNoIC5yYWRpbywuZm9ybS1zZWFyY2ggLmNoZWNrYm94LC5mb3JtLWlubGluZSAu
cmFkaW8sLmZvcm0taW5saW5lIC5jaGVja2JveHtwYWRkaW5nLWxlZnQ6MDttYXJnaW4tYm90dG9t
OjA7dmVydGljYWwtYWxpZ246bWlkZGxlfS5mb3JtLXNlYXJjaCAucmFkaW8gaW5wdXRbdHlwZT0i
cmFkaW8iXSwuZm9ybS1zZWFyY2ggLmNoZWNrYm94IGlucHV0W3R5cGU9ImNoZWNrYm94Il0sLmZv
cm0taW5saW5lIC5yYWRpbyBpbnB1dFt0eXBlPSJyYWRpbyJdLC5mb3JtLWlubGluZSAuY2hlY2ti
b3ggaW5wdXRbdHlwZT0iY2hlY2tib3giXXtmbG9hdDpsZWZ0O21hcmdpbi1yaWdodDozcHg7bWFy
Z2luLWxlZnQ6MH0uY29udHJvbC1ncm91cHttYXJnaW4tYm90dG9tOjEwcHh9bGVnZW5kKy5jb250
cm9sLWdyb3Vwe21hcmdpbi10b3A6MjBweDstd2Via2l0LW1hcmdpbi10b3AtY29sbGFwc2U6c2Vw
YXJhdGV9LmZvcm0taG9yaXpvbnRhbCAuY29udHJvbC1ncm91cHttYXJnaW4tYm90dG9tOjIwcHg7
Knpvb206MX0uZm9ybS1ob3Jpem9udGFsIC5jb250cm9sLWdyb3VwOmJlZm9yZSwuZm9ybS1ob3Jp
em9udGFsIC5jb250cm9sLWdyb3VwOmFmdGVye2Rpc3BsYXk6dGFibGU7bGluZS1oZWlnaHQ6MDtj
b250ZW50OiIifS5mb3JtLWhvcml6b250YWwgLmNvbnRyb2wtZ3JvdXA6YWZ0ZXJ7Y2xlYXI6Ym90
aH0uZm9ybS1ob3Jpem9udGFsIC5jb250cm9sLWxhYmVse2Zsb2F0OmxlZnQ7d2lkdGg6MTYwcHg7
cGFkZGluZy10b3A6NXB4O3RleHQtYWxpZ246cmlnaHR9LmZvcm0taG9yaXpvbnRhbCAuY29udHJv
bHN7KmRpc3BsYXk6aW5saW5lLWJsb2NrOypwYWRkaW5nLWxlZnQ6MjBweDttYXJnaW4tbGVmdDox
ODBweDsqbWFyZ2luLWxlZnQ6MH0uZm9ybS1ob3Jpem9udGFsIC5jb250cm9sczpmaXJzdC1jaGls
ZHsqcGFkZGluZy1sZWZ0OjE4MHB4fS5mb3JtLWhvcml6b250YWwgLmhlbHAtYmxvY2t7bWFyZ2lu
LWJvdHRvbTowfS5mb3JtLWhvcml6b250YWwgaW5wdXQrLmhlbHAtYmxvY2ssLmZvcm0taG9yaXpv
bnRhbCBzZWxlY3QrLmhlbHAtYmxvY2ssLmZvcm0taG9yaXpvbnRhbCB0ZXh0YXJlYSsuaGVscC1i
bG9jaywuZm9ybS1ob3Jpem9udGFsIC51bmVkaXRhYmxlLWlucHV0Ky5oZWxwLWJsb2NrLC5mb3Jt
LWhvcml6b250YWwgLmlucHV0LXByZXBlbmQrLmhlbHAtYmxvY2ssLmZvcm0taG9yaXpvbnRhbCAu
aW5wdXQtYXBwZW5kKy5oZWxwLWJsb2Nre21hcmdpbi10b3A6MTBweH0uZm9ybS1ob3Jpem9udGFs
IC5mb3JtLWFjdGlvbnN7cGFkZGluZy1sZWZ0OjE4MHB4fXRhYmxle21heC13aWR0aDoxMDAlO2Jh
Y2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlO2JvcmRl
ci1zcGFjaW5nOjB9LnRhYmxle3dpZHRoOjEwMCU7bWFyZ2luLWJvdHRvbToyMHB4fS50YWJsZSB0
aCwudGFibGUgdGR7cGFkZGluZzo4cHg7bGluZS1oZWlnaHQ6MjBweDt0ZXh0LWFsaWduOmxlZnQ7
dmVydGljYWwtYWxpZ246dG9wO2JvcmRlci10b3A6MXB4IHNvbGlkICNkZGR9LnRhYmxlIHRoe2Zv
bnQtd2VpZ2h0OmJvbGR9LnRhYmxlIHRoZWFkIHRoe3ZlcnRpY2FsLWFsaWduOmJvdHRvbX0udGFi
bGUgY2FwdGlvbit0aGVhZCB0cjpmaXJzdC1jaGlsZCB0aCwudGFibGUgY2FwdGlvbit0aGVhZCB0
cjpmaXJzdC1jaGlsZCB0ZCwudGFibGUgY29sZ3JvdXArdGhlYWQgdHI6Zmlyc3QtY2hpbGQgdGgs
LnRhYmxlIGNvbGdyb3VwK3RoZWFkIHRyOmZpcnN0LWNoaWxkIHRkLC50YWJsZSB0aGVhZDpmaXJz
dC1jaGlsZCB0cjpmaXJzdC1jaGlsZCB0aCwudGFibGUgdGhlYWQ6Zmlyc3QtY2hpbGQgdHI6Zmly
c3QtY2hpbGQgdGR7Ym9yZGVyLXRvcDowfS50YWJsZSB0Ym9keSt0Ym9keXtib3JkZXItdG9wOjJw
eCBzb2xpZCAjZGRkfS50YWJsZSAudGFibGV7YmFja2dyb3VuZC1jb2xvcjojZmZmfS50YWJsZS1j
b25kZW5zZWQgdGgsLnRhYmxlLWNvbmRlbnNlZCB0ZHtwYWRkaW5nOjRweCA1cHh9LnRhYmxlLWJv
cmRlcmVke2JvcmRlcjoxcHggc29saWQgI2RkZDtib3JkZXItY29sbGFwc2U6c2VwYXJhdGU7KmJv
cmRlci1jb2xsYXBzZTpjb2xsYXBzZTtib3JkZXItbGVmdDowOy13ZWJraXQtYm9yZGVyLXJhZGl1
czo0cHg7LW1vei1ib3JkZXItcmFkaXVzOjRweDtib3JkZXItcmFkaXVzOjRweH0udGFibGUtYm9y
ZGVyZWQgdGgsLnRhYmxlLWJvcmRlcmVkIHRke2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjZGRkfS50
YWJsZS1ib3JkZXJlZCBjYXB0aW9uK3RoZWFkIHRyOmZpcnN0LWNoaWxkIHRoLC50YWJsZS1ib3Jk
ZXJlZCBjYXB0aW9uK3Rib2R5IHRyOmZpcnN0LWNoaWxkIHRoLC50YWJsZS1ib3JkZXJlZCBjYXB0
aW9uK3Rib2R5IHRyOmZpcnN0LWNoaWxkIHRkLC50YWJsZS1ib3JkZXJlZCBjb2xncm91cCt0aGVh
ZCB0cjpmaXJzdC1jaGlsZCB0aCwudGFibGUtYm9yZGVyZWQgY29sZ3JvdXArdGJvZHkgdHI6Zmly
c3QtY2hpbGQgdGgsLnRhYmxlLWJvcmRlcmVkIGNvbGdyb3VwK3Rib2R5IHRyOmZpcnN0LWNoaWxk
IHRkLC50YWJsZS1ib3JkZXJlZCB0aGVhZDpmaXJzdC1jaGlsZCB0cjpmaXJzdC1jaGlsZCB0aCwu
dGFibGUtYm9yZGVyZWQgdGJvZHk6Zmlyc3QtY2hpbGQgdHI6Zmlyc3QtY2hpbGQgdGgsLnRhYmxl
LWJvcmRlcmVkIHRib2R5OmZpcnN0LWNoaWxkIHRyOmZpcnN0LWNoaWxkIHRke2JvcmRlci10b3A6
MH0udGFibGUtYm9yZGVyZWQgdGhlYWQ6Zmlyc3QtY2hpbGQgdHI6Zmlyc3QtY2hpbGQ+dGg6Zmly
c3QtY2hpbGQsLnRhYmxlLWJvcmRlcmVkIHRib2R5OmZpcnN0LWNoaWxkIHRyOmZpcnN0LWNoaWxk
PnRkOmZpcnN0LWNoaWxkey13ZWJraXQtYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czo0cHg7Ym9yZGVy
LXRvcC1sZWZ0LXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzLXRvcGxlZnQ6NHB4fS50YWJs
ZS1ib3JkZXJlZCB0aGVhZDpmaXJzdC1jaGlsZCB0cjpmaXJzdC1jaGlsZD50aDpsYXN0LWNoaWxk
LC50YWJsZS1ib3JkZXJlZCB0Ym9keTpmaXJzdC1jaGlsZCB0cjpmaXJzdC1jaGlsZD50ZDpsYXN0
LWNoaWxkey13ZWJraXQtYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6NHB4O2JvcmRlci10b3Atcmln
aHQtcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXMtdG9wcmlnaHQ6NHB4fS50YWJsZS1ib3Jk
ZXJlZCB0aGVhZDpsYXN0LWNoaWxkIHRyOmxhc3QtY2hpbGQ+dGg6Zmlyc3QtY2hpbGQsLnRhYmxl
LWJvcmRlcmVkIHRib2R5Omxhc3QtY2hpbGQgdHI6bGFzdC1jaGlsZD50ZDpmaXJzdC1jaGlsZCwu
dGFibGUtYm9yZGVyZWQgdGZvb3Q6bGFzdC1jaGlsZCB0cjpsYXN0LWNoaWxkPnRkOmZpcnN0LWNo
aWxkey13ZWJraXQtYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czo0cHg7Ym9yZGVyLWJvdHRvbS1s
ZWZ0LXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbWxlZnQ6NHB4fS50YWJsZS1i
b3JkZXJlZCB0aGVhZDpsYXN0LWNoaWxkIHRyOmxhc3QtY2hpbGQ+dGg6bGFzdC1jaGlsZCwudGFi
bGUtYm9yZGVyZWQgdGJvZHk6bGFzdC1jaGlsZCB0cjpsYXN0LWNoaWxkPnRkOmxhc3QtY2hpbGQs
LnRhYmxlLWJvcmRlcmVkIHRmb290Omxhc3QtY2hpbGQgdHI6bGFzdC1jaGlsZD50ZDpsYXN0LWNo
aWxkey13ZWJraXQtYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6NHB4O2JvcmRlci1ib3R0b20t
cmlnaHQtcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXMtYm90dG9tcmlnaHQ6NHB4fS50YWJs
ZS1ib3JkZXJlZCB0Zm9vdCt0Ym9keTpsYXN0LWNoaWxkIHRyOmxhc3QtY2hpbGQgdGQ6Zmlyc3Qt
Y2hpbGR7LXdlYmtpdC1ib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1s
ZWZ0LXJhZGl1czowOy1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21sZWZ0OjB9LnRhYmxlLWJvcmRl
cmVkIHRmb290K3Rib2R5Omxhc3QtY2hpbGQgdHI6bGFzdC1jaGlsZCB0ZDpsYXN0LWNoaWxkey13
ZWJraXQtYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MDtib3JkZXItYm90dG9tLXJpZ2h0LXJh
ZGl1czowOy1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21yaWdodDowfS50YWJsZS1ib3JkZXJlZCBj
YXB0aW9uK3RoZWFkIHRyOmZpcnN0LWNoaWxkIHRoOmZpcnN0LWNoaWxkLC50YWJsZS1ib3JkZXJl
ZCBjYXB0aW9uK3Rib2R5IHRyOmZpcnN0LWNoaWxkIHRkOmZpcnN0LWNoaWxkLC50YWJsZS1ib3Jk
ZXJlZCBjb2xncm91cCt0aGVhZCB0cjpmaXJzdC1jaGlsZCB0aDpmaXJzdC1jaGlsZCwudGFibGUt
Ym9yZGVyZWQgY29sZ3JvdXArdGJvZHkgdHI6Zmlyc3QtY2hpbGQgdGQ6Zmlyc3QtY2hpbGR7LXdl
YmtpdC1ib3JkZXItdG9wLWxlZnQtcmFkaXVzOjRweDtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjRw
eDstbW96LWJvcmRlci1yYWRpdXMtdG9wbGVmdDo0cHh9LnRhYmxlLWJvcmRlcmVkIGNhcHRpb24r
dGhlYWQgdHI6Zmlyc3QtY2hpbGQgdGg6bGFzdC1jaGlsZCwudGFibGUtYm9yZGVyZWQgY2FwdGlv
bit0Ym9keSB0cjpmaXJzdC1jaGlsZCB0ZDpsYXN0LWNoaWxkLC50YWJsZS1ib3JkZXJlZCBjb2xn
cm91cCt0aGVhZCB0cjpmaXJzdC1jaGlsZCB0aDpsYXN0LWNoaWxkLC50YWJsZS1ib3JkZXJlZCBj
b2xncm91cCt0Ym9keSB0cjpmaXJzdC1jaGlsZCB0ZDpsYXN0LWNoaWxkey13ZWJraXQtYm9yZGVy
LXRvcC1yaWdodC1yYWRpdXM6NHB4O2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjRweDstbW96LWJv
cmRlci1yYWRpdXMtdG9wcmlnaHQ6NHB4fS50YWJsZS1zdHJpcGVkIHRib2R5PnRyOm50aC1jaGls
ZChvZGQpPnRkLC50YWJsZS1zdHJpcGVkIHRib2R5PnRyOm50aC1jaGlsZChvZGQpPnRoe2JhY2tn
cm91bmQtY29sb3I6I2Y5ZjlmOX0udGFibGUtaG92ZXIgdGJvZHkgdHI6aG92ZXIgdGQsLnRhYmxl
LWhvdmVyIHRib2R5IHRyOmhvdmVyIHRoe2JhY2tncm91bmQtY29sb3I6I2Y1ZjVmNX10YWJsZSB0
ZFtjbGFzcyo9InNwYW4iXSx0YWJsZSB0aFtjbGFzcyo9InNwYW4iXSwucm93LWZsdWlkIHRhYmxl
IHRkW2NsYXNzKj0ic3BhbiJdLC5yb3ctZmx1aWQgdGFibGUgdGhbY2xhc3MqPSJzcGFuIl17ZGlz
cGxheTp0YWJsZS1jZWxsO2Zsb2F0Om5vbmU7bWFyZ2luLWxlZnQ6MH0udGFibGUgdGQuc3BhbjEs
LnRhYmxlIHRoLnNwYW4xe2Zsb2F0Om5vbmU7d2lkdGg6NDRweDttYXJnaW4tbGVmdDowfS50YWJs
ZSB0ZC5zcGFuMiwudGFibGUgdGguc3BhbjJ7ZmxvYXQ6bm9uZTt3aWR0aDoxMjRweDttYXJnaW4t
bGVmdDowfS50YWJsZSB0ZC5zcGFuMywudGFibGUgdGguc3BhbjN7ZmxvYXQ6bm9uZTt3aWR0aDoy
MDRweDttYXJnaW4tbGVmdDowfS50YWJsZSB0ZC5zcGFuNCwudGFibGUgdGguc3BhbjR7ZmxvYXQ6
bm9uZTt3aWR0aDoyODRweDttYXJnaW4tbGVmdDowfS50YWJsZSB0ZC5zcGFuNSwudGFibGUgdGgu
c3BhbjV7ZmxvYXQ6bm9uZTt3aWR0aDozNjRweDttYXJnaW4tbGVmdDowfS50YWJsZSB0ZC5zcGFu
NiwudGFibGUgdGguc3BhbjZ7ZmxvYXQ6bm9uZTt3aWR0aDo0NDRweDttYXJnaW4tbGVmdDowfS50
YWJsZSB0ZC5zcGFuNywudGFibGUgdGguc3Bhbjd7ZmxvYXQ6bm9uZTt3aWR0aDo1MjRweDttYXJn
aW4tbGVmdDowfS50YWJsZSB0ZC5zcGFuOCwudGFibGUgdGguc3Bhbjh7ZmxvYXQ6bm9uZTt3aWR0
aDo2MDRweDttYXJnaW4tbGVmdDowfS50YWJsZSB0ZC5zcGFuOSwudGFibGUgdGguc3Bhbjl7Zmxv
YXQ6bm9uZTt3aWR0aDo2ODRweDttYXJnaW4tbGVmdDowfS50YWJsZSB0ZC5zcGFuMTAsLnRhYmxl
IHRoLnNwYW4xMHtmbG9hdDpub25lO3dpZHRoOjc2NHB4O21hcmdpbi1sZWZ0OjB9LnRhYmxlIHRk
LnNwYW4xMSwudGFibGUgdGguc3BhbjExe2Zsb2F0Om5vbmU7d2lkdGg6ODQ0cHg7bWFyZ2luLWxl
ZnQ6MH0udGFibGUgdGQuc3BhbjEyLC50YWJsZSB0aC5zcGFuMTJ7ZmxvYXQ6bm9uZTt3aWR0aDo5
MjRweDttYXJnaW4tbGVmdDowfS50YWJsZSB0Ym9keSB0ci5zdWNjZXNzIHRke2JhY2tncm91bmQt
Y29sb3I6I2RmZjBkOH0udGFibGUgdGJvZHkgdHIuZXJyb3IgdGR7YmFja2dyb3VuZC1jb2xvcjoj
ZjJkZWRlfS50YWJsZSB0Ym9keSB0ci53YXJuaW5nIHRke2JhY2tncm91bmQtY29sb3I6I2ZjZjhl
M30udGFibGUgdGJvZHkgdHIuaW5mbyB0ZHtiYWNrZ3JvdW5kLWNvbG9yOiNkOWVkZjd9LnRhYmxl
LWhvdmVyIHRib2R5IHRyLnN1Y2Nlc3M6aG92ZXIgdGR7YmFja2dyb3VuZC1jb2xvcjojZDBlOWM2
fS50YWJsZS1ob3ZlciB0Ym9keSB0ci5lcnJvcjpob3ZlciB0ZHtiYWNrZ3JvdW5kLWNvbG9yOiNl
YmNjY2N9LnRhYmxlLWhvdmVyIHRib2R5IHRyLndhcm5pbmc6aG92ZXIgdGR7YmFja2dyb3VuZC1j
b2xvcjojZmFmMmNjfS50YWJsZS1ob3ZlciB0Ym9keSB0ci5pbmZvOmhvdmVyIHRke2JhY2tncm91
bmQtY29sb3I6I2M0ZTNmM31bY2xhc3NePSJpY29uLSJdLFtjbGFzcyo9IiBpY29uLSJde2Rpc3Bs
YXk6aW5saW5lLWJsb2NrO3dpZHRoOjE0cHg7aGVpZ2h0OjE0cHg7bWFyZ2luLXRvcDoxcHg7Km1h
cmdpbi1yaWdodDouM2VtO2xpbmUtaGVpZ2h0OjE0cHg7dmVydGljYWwtYWxpZ246dGV4dC10b3A7
YmFja2dyb3VuZC1pbWFnZTp1cmwoIi4uL2ltZy9nbHlwaGljb25zLWhhbGZsaW5ncy5wbmciKTti
YWNrZ3JvdW5kLXBvc2l0aW9uOjE0cHggMTRweDtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXR9
Lmljb24td2hpdGUsLm5hdi1waWxscz4uYWN0aXZlPmE+W2NsYXNzXj0iaWNvbi0iXSwubmF2LXBp
bGxzPi5hY3RpdmU+YT5bY2xhc3MqPSIgaWNvbi0iXSwubmF2LWxpc3Q+LmFjdGl2ZT5hPltjbGFz
c149Imljb24tIl0sLm5hdi1saXN0Pi5hY3RpdmU+YT5bY2xhc3MqPSIgaWNvbi0iXSwubmF2YmFy
LWludmVyc2UgLm5hdj4uYWN0aXZlPmE+W2NsYXNzXj0iaWNvbi0iXSwubmF2YmFyLWludmVyc2Ug
Lm5hdj4uYWN0aXZlPmE+W2NsYXNzKj0iIGljb24tIl0sLmRyb3Bkb3duLW1lbnU+bGk+YTpob3Zl
cj5bY2xhc3NePSJpY29uLSJdLC5kcm9wZG93bi1tZW51PmxpPmE6aG92ZXI+W2NsYXNzKj0iIGlj
b24tIl0sLmRyb3Bkb3duLW1lbnU+LmFjdGl2ZT5hPltjbGFzc149Imljb24tIl0sLmRyb3Bkb3du
LW1lbnU+LmFjdGl2ZT5hPltjbGFzcyo9IiBpY29uLSJdLC5kcm9wZG93bi1zdWJtZW51OmhvdmVy
PmE+W2NsYXNzXj0iaWNvbi0iXSwuZHJvcGRvd24tc3VibWVudTpob3Zlcj5hPltjbGFzcyo9IiBp
Y29uLSJde2JhY2tncm91bmQtaW1hZ2U6dXJsKCIuLi9pbWcvZ2x5cGhpY29ucy1oYWxmbGluZ3Mt
d2hpdGUucG5nIil9Lmljb24tZ2xhc3N7YmFja2dyb3VuZC1wb3NpdGlvbjowIDB9Lmljb24tbXVz
aWN7YmFja2dyb3VuZC1wb3NpdGlvbjotMjRweCAwfS5pY29uLXNlYXJjaHtiYWNrZ3JvdW5kLXBv
c2l0aW9uOi00OHB4IDB9Lmljb24tZW52ZWxvcGV7YmFja2dyb3VuZC1wb3NpdGlvbjotNzJweCAw
fS5pY29uLWhlYXJ0e2JhY2tncm91bmQtcG9zaXRpb246LTk2cHggMH0uaWNvbi1zdGFye2JhY2tn
cm91bmQtcG9zaXRpb246LTEyMHB4IDB9Lmljb24tc3Rhci1lbXB0eXtiYWNrZ3JvdW5kLXBvc2l0
aW9uOi0xNDRweCAwfS5pY29uLXVzZXJ7YmFja2dyb3VuZC1wb3NpdGlvbjotMTY4cHggMH0uaWNv
bi1maWxte2JhY2tncm91bmQtcG9zaXRpb246LTE5MnB4IDB9Lmljb24tdGgtbGFyZ2V7YmFja2dy
b3VuZC1wb3NpdGlvbjotMjE2cHggMH0uaWNvbi10aHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yNDBw
eCAwfS5pY29uLXRoLWxpc3R7YmFja2dyb3VuZC1wb3NpdGlvbjotMjY0cHggMH0uaWNvbi1va3ti
YWNrZ3JvdW5kLXBvc2l0aW9uOi0yODhweCAwfS5pY29uLXJlbW92ZXtiYWNrZ3JvdW5kLXBvc2l0
aW9uOi0zMTJweCAwfS5pY29uLXpvb20taW57YmFja2dyb3VuZC1wb3NpdGlvbjotMzM2cHggMH0u
aWNvbi16b29tLW91dHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zNjBweCAwfS5pY29uLW9mZntiYWNr
Z3JvdW5kLXBvc2l0aW9uOi0zODRweCAwfS5pY29uLXNpZ25hbHtiYWNrZ3JvdW5kLXBvc2l0aW9u
Oi00MDhweCAwfS5pY29uLWNvZ3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi00MzJweCAwfS5pY29uLXRy
YXNoe2JhY2tncm91bmQtcG9zaXRpb246LTQ1NnB4IDB9Lmljb24taG9tZXtiYWNrZ3JvdW5kLXBv
c2l0aW9uOjAgLTI0cHh9Lmljb24tZmlsZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yNHB4IC0yNHB4
fS5pY29uLXRpbWV7YmFja2dyb3VuZC1wb3NpdGlvbjotNDhweCAtMjRweH0uaWNvbi1yb2Fke2Jh
Y2tncm91bmQtcG9zaXRpb246LTcycHggLTI0cHh9Lmljb24tZG93bmxvYWQtYWx0e2JhY2tncm91
bmQtcG9zaXRpb246LTk2cHggLTI0cHh9Lmljb24tZG93bmxvYWR7YmFja2dyb3VuZC1wb3NpdGlv
bjotMTIwcHggLTI0cHh9Lmljb24tdXBsb2Fke2JhY2tncm91bmQtcG9zaXRpb246LTE0NHB4IC0y
NHB4fS5pY29uLWluYm94e2JhY2tncm91bmQtcG9zaXRpb246LTE2OHB4IC0yNHB4fS5pY29uLXBs
YXktY2lyY2xle2JhY2tncm91bmQtcG9zaXRpb246LTE5MnB4IC0yNHB4fS5pY29uLXJlcGVhdHti
YWNrZ3JvdW5kLXBvc2l0aW9uOi0yMTZweCAtMjRweH0uaWNvbi1yZWZyZXNoe2JhY2tncm91bmQt
cG9zaXRpb246LTI0MHB4IC0yNHB4fS5pY29uLWxpc3QtYWx0e2JhY2tncm91bmQtcG9zaXRpb246
LTI2NHB4IC0yNHB4fS5pY29uLWxvY2t7YmFja2dyb3VuZC1wb3NpdGlvbjotMjg3cHggLTI0cHh9
Lmljb24tZmxhZ3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMTJweCAtMjRweH0uaWNvbi1oZWFkcGhv
bmVze2JhY2tncm91bmQtcG9zaXRpb246LTMzNnB4IC0yNHB4fS5pY29uLXZvbHVtZS1vZmZ7YmFj
a2dyb3VuZC1wb3NpdGlvbjotMzYwcHggLTI0cHh9Lmljb24tdm9sdW1lLWRvd257YmFja2dyb3Vu
ZC1wb3NpdGlvbjotMzg0cHggLTI0cHh9Lmljb24tdm9sdW1lLXVwe2JhY2tncm91bmQtcG9zaXRp
b246LTQwOHB4IC0yNHB4fS5pY29uLXFyY29kZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00MzJweCAt
MjRweH0uaWNvbi1iYXJjb2Rle2JhY2tncm91bmQtcG9zaXRpb246LTQ1NnB4IC0yNHB4fS5pY29u
LXRhZ3tiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTQ4cHh9Lmljb24tdGFnc3tiYWNrZ3JvdW5kLXBv
c2l0aW9uOi0yNXB4IC00OHB4fS5pY29uLWJvb2t7YmFja2dyb3VuZC1wb3NpdGlvbjotNDhweCAt
NDhweH0uaWNvbi1ib29rbWFya3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi03MnB4IC00OHB4fS5pY29u
LXByaW50e2JhY2tncm91bmQtcG9zaXRpb246LTk2cHggLTQ4cHh9Lmljb24tY2FtZXJhe2JhY2tn
cm91bmQtcG9zaXRpb246LTEyMHB4IC00OHB4fS5pY29uLWZvbnR7YmFja2dyb3VuZC1wb3NpdGlv
bjotMTQ0cHggLTQ4cHh9Lmljb24tYm9sZHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNjdweCAtNDhw
eH0uaWNvbi1pdGFsaWN7YmFja2dyb3VuZC1wb3NpdGlvbjotMTkycHggLTQ4cHh9Lmljb24tdGV4
dC1oZWlnaHR7YmFja2dyb3VuZC1wb3NpdGlvbjotMjE2cHggLTQ4cHh9Lmljb24tdGV4dC13aWR0
aHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yNDBweCAtNDhweH0uaWNvbi1hbGlnbi1sZWZ0e2JhY2tn
cm91bmQtcG9zaXRpb246LTI2NHB4IC00OHB4fS5pY29uLWFsaWduLWNlbnRlcntiYWNrZ3JvdW5k
LXBvc2l0aW9uOi0yODhweCAtNDhweH0uaWNvbi1hbGlnbi1yaWdodHtiYWNrZ3JvdW5kLXBvc2l0
aW9uOi0zMTJweCAtNDhweH0uaWNvbi1hbGlnbi1qdXN0aWZ5e2JhY2tncm91bmQtcG9zaXRpb246
LTMzNnB4IC00OHB4fS5pY29uLWxpc3R7YmFja2dyb3VuZC1wb3NpdGlvbjotMzYwcHggLTQ4cHh9
Lmljb24taW5kZW50LWxlZnR7YmFja2dyb3VuZC1wb3NpdGlvbjotMzg0cHggLTQ4cHh9Lmljb24t
aW5kZW50LXJpZ2h0e2JhY2tncm91bmQtcG9zaXRpb246LTQwOHB4IC00OHB4fS5pY29uLWZhY2V0
aW1lLXZpZGVve2JhY2tncm91bmQtcG9zaXRpb246LTQzMnB4IC00OHB4fS5pY29uLXBpY3R1cmV7
YmFja2dyb3VuZC1wb3NpdGlvbjotNDU2cHggLTQ4cHh9Lmljb24tcGVuY2lse2JhY2tncm91bmQt
cG9zaXRpb246MCAtNzJweH0uaWNvbi1tYXAtbWFya2Vye2JhY2tncm91bmQtcG9zaXRpb246LTI0
cHggLTcycHh9Lmljb24tYWRqdXN0e2JhY2tncm91bmQtcG9zaXRpb246LTQ4cHggLTcycHh9Lmlj
b24tdGludHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi03MnB4IC03MnB4fS5pY29uLWVkaXR7YmFja2dy
b3VuZC1wb3NpdGlvbjotOTZweCAtNzJweH0uaWNvbi1zaGFyZXtiYWNrZ3JvdW5kLXBvc2l0aW9u
Oi0xMjBweCAtNzJweH0uaWNvbi1jaGVja3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNDRweCAtNzJw
eH0uaWNvbi1tb3Zle2JhY2tncm91bmQtcG9zaXRpb246LTE2OHB4IC03MnB4fS5pY29uLXN0ZXAt
YmFja3dhcmR7YmFja2dyb3VuZC1wb3NpdGlvbjotMTkycHggLTcycHh9Lmljb24tZmFzdC1iYWNr
d2FyZHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yMTZweCAtNzJweH0uaWNvbi1iYWNrd2FyZHtiYWNr
Z3JvdW5kLXBvc2l0aW9uOi0yNDBweCAtNzJweH0uaWNvbi1wbGF5e2JhY2tncm91bmQtcG9zaXRp
b246LTI2NHB4IC03MnB4fS5pY29uLXBhdXNle2JhY2tncm91bmQtcG9zaXRpb246LTI4OHB4IC03
MnB4fS5pY29uLXN0b3B7YmFja2dyb3VuZC1wb3NpdGlvbjotMzEycHggLTcycHh9Lmljb24tZm9y
d2FyZHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMzZweCAtNzJweH0uaWNvbi1mYXN0LWZvcndhcmR7
YmFja2dyb3VuZC1wb3NpdGlvbjotMzYwcHggLTcycHh9Lmljb24tc3RlcC1mb3J3YXJke2JhY2tn
cm91bmQtcG9zaXRpb246LTM4NHB4IC03MnB4fS5pY29uLWVqZWN0e2JhY2tncm91bmQtcG9zaXRp
b246LTQwOHB4IC03MnB4fS5pY29uLWNoZXZyb24tbGVmdHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00
MzJweCAtNzJweH0uaWNvbi1jaGV2cm9uLXJpZ2h0e2JhY2tncm91bmQtcG9zaXRpb246LTQ1NnB4
IC03MnB4fS5pY29uLXBsdXMtc2lnbntiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTk2cHh9Lmljb24t
bWludXMtc2lnbntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yNHB4IC05NnB4fS5pY29uLXJlbW92ZS1z
aWdue2JhY2tncm91bmQtcG9zaXRpb246LTQ4cHggLTk2cHh9Lmljb24tb2stc2lnbntiYWNrZ3Jv
dW5kLXBvc2l0aW9uOi03MnB4IC05NnB4fS5pY29uLXF1ZXN0aW9uLXNpZ257YmFja2dyb3VuZC1w
b3NpdGlvbjotOTZweCAtOTZweH0uaWNvbi1pbmZvLXNpZ257YmFja2dyb3VuZC1wb3NpdGlvbjot
MTIwcHggLTk2cHh9Lmljb24tc2NyZWVuc2hvdHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNDRweCAt
OTZweH0uaWNvbi1yZW1vdmUtY2lyY2xle2JhY2tncm91bmQtcG9zaXRpb246LTE2OHB4IC05NnB4
fS5pY29uLW9rLWNpcmNsZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xOTJweCAtOTZweH0uaWNvbi1i
YW4tY2lyY2xle2JhY2tncm91bmQtcG9zaXRpb246LTIxNnB4IC05NnB4fS5pY29uLWFycm93LWxl
ZnR7YmFja2dyb3VuZC1wb3NpdGlvbjotMjQwcHggLTk2cHh9Lmljb24tYXJyb3ctcmlnaHR7YmFj
a2dyb3VuZC1wb3NpdGlvbjotMjY0cHggLTk2cHh9Lmljb24tYXJyb3ctdXB7YmFja2dyb3VuZC1w
b3NpdGlvbjotMjg5cHggLTk2cHh9Lmljb24tYXJyb3ctZG93bntiYWNrZ3JvdW5kLXBvc2l0aW9u
Oi0zMTJweCAtOTZweH0uaWNvbi1zaGFyZS1hbHR7YmFja2dyb3VuZC1wb3NpdGlvbjotMzM2cHgg
LTk2cHh9Lmljb24tcmVzaXplLWZ1bGx7YmFja2dyb3VuZC1wb3NpdGlvbjotMzYwcHggLTk2cHh9
Lmljb24tcmVzaXplLXNtYWxse2JhY2tncm91bmQtcG9zaXRpb246LTM4NHB4IC05NnB4fS5pY29u
LXBsdXN7YmFja2dyb3VuZC1wb3NpdGlvbjotNDA4cHggLTk2cHh9Lmljb24tbWludXN7YmFja2dy
b3VuZC1wb3NpdGlvbjotNDMzcHggLTk2cHh9Lmljb24tYXN0ZXJpc2t7YmFja2dyb3VuZC1wb3Np
dGlvbjotNDU2cHggLTk2cHh9Lmljb24tZXhjbGFtYXRpb24tc2lnbntiYWNrZ3JvdW5kLXBvc2l0
aW9uOjAgLTEyMHB4fS5pY29uLWdpZnR7YmFja2dyb3VuZC1wb3NpdGlvbjotMjRweCAtMTIwcHh9
Lmljb24tbGVhZntiYWNrZ3JvdW5kLXBvc2l0aW9uOi00OHB4IC0xMjBweH0uaWNvbi1maXJle2Jh
Y2tncm91bmQtcG9zaXRpb246LTcycHggLTEyMHB4fS5pY29uLWV5ZS1vcGVue2JhY2tncm91bmQt
cG9zaXRpb246LTk2cHggLTEyMHB4fS5pY29uLWV5ZS1jbG9zZXtiYWNrZ3JvdW5kLXBvc2l0aW9u
Oi0xMjBweCAtMTIwcHh9Lmljb24td2FybmluZy1zaWdue2JhY2tncm91bmQtcG9zaXRpb246LTE0
NHB4IC0xMjBweH0uaWNvbi1wbGFuZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNjhweCAtMTIwcHh9
Lmljb24tY2FsZW5kYXJ7YmFja2dyb3VuZC1wb3NpdGlvbjotMTkycHggLTEyMHB4fS5pY29uLXJh
bmRvbXt3aWR0aDoxNnB4O2JhY2tncm91bmQtcG9zaXRpb246LTIxNnB4IC0xMjBweH0uaWNvbi1j
b21tZW50e2JhY2tncm91bmQtcG9zaXRpb246LTI0MHB4IC0xMjBweH0uaWNvbi1tYWduZXR7YmFj
a2dyb3VuZC1wb3NpdGlvbjotMjY0cHggLTEyMHB4fS5pY29uLWNoZXZyb24tdXB7YmFja2dyb3Vu
ZC1wb3NpdGlvbjotMjg4cHggLTEyMHB4fS5pY29uLWNoZXZyb24tZG93bntiYWNrZ3JvdW5kLXBv
c2l0aW9uOi0zMTNweCAtMTE5cHh9Lmljb24tcmV0d2VldHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0z
MzZweCAtMTIwcHh9Lmljb24tc2hvcHBpbmctY2FydHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zNjBw
eCAtMTIwcHh9Lmljb24tZm9sZGVyLWNsb3Nle2JhY2tncm91bmQtcG9zaXRpb246LTM4NHB4IC0x
MjBweH0uaWNvbi1mb2xkZXItb3Blbnt3aWR0aDoxNnB4O2JhY2tncm91bmQtcG9zaXRpb246LTQw
OHB4IC0xMjBweH0uaWNvbi1yZXNpemUtdmVydGljYWx7YmFja2dyb3VuZC1wb3NpdGlvbjotNDMy
cHggLTExOXB4fS5pY29uLXJlc2l6ZS1ob3Jpem9udGFse2JhY2tncm91bmQtcG9zaXRpb246LTQ1
NnB4IC0xMThweH0uaWNvbi1oZGR7YmFja2dyb3VuZC1wb3NpdGlvbjowIC0xNDRweH0uaWNvbi1i
dWxsaG9ybntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yNHB4IC0xNDRweH0uaWNvbi1iZWxse2JhY2tn
cm91bmQtcG9zaXRpb246LTQ4cHggLTE0NHB4fS5pY29uLWNlcnRpZmljYXRle2JhY2tncm91bmQt
cG9zaXRpb246LTcycHggLTE0NHB4fS5pY29uLXRodW1icy11cHtiYWNrZ3JvdW5kLXBvc2l0aW9u
Oi05NnB4IC0xNDRweH0uaWNvbi10aHVtYnMtZG93bntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMjBw
eCAtMTQ0cHh9Lmljb24taGFuZC1yaWdodHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNDRweCAtMTQ0
cHh9Lmljb24taGFuZC1sZWZ0e2JhY2tncm91bmQtcG9zaXRpb246LTE2OHB4IC0xNDRweH0uaWNv
bi1oYW5kLXVwe2JhY2tncm91bmQtcG9zaXRpb246LTE5MnB4IC0xNDRweH0uaWNvbi1oYW5kLWRv
d257YmFja2dyb3VuZC1wb3NpdGlvbjotMjE2cHggLTE0NHB4fS5pY29uLWNpcmNsZS1hcnJvdy1y
aWdodHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yNDBweCAtMTQ0cHh9Lmljb24tY2lyY2xlLWFycm93
LWxlZnR7YmFja2dyb3VuZC1wb3NpdGlvbjotMjY0cHggLTE0NHB4fS5pY29uLWNpcmNsZS1hcnJv
dy11cHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yODhweCAtMTQ0cHh9Lmljb24tY2lyY2xlLWFycm93
LWRvd257YmFja2dyb3VuZC1wb3NpdGlvbjotMzEycHggLTE0NHB4fS5pY29uLWdsb2Jle2JhY2tn
cm91bmQtcG9zaXRpb246LTMzNnB4IC0xNDRweH0uaWNvbi13cmVuY2h7YmFja2dyb3VuZC1wb3Np
dGlvbjotMzYwcHggLTE0NHB4fS5pY29uLXRhc2tze2JhY2tncm91bmQtcG9zaXRpb246LTM4NHB4
IC0xNDRweH0uaWNvbi1maWx0ZXJ7YmFja2dyb3VuZC1wb3NpdGlvbjotNDA4cHggLTE0NHB4fS5p
Y29uLWJyaWVmY2FzZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00MzJweCAtMTQ0cHh9Lmljb24tZnVs
bHNjcmVlbntiYWNrZ3JvdW5kLXBvc2l0aW9uOi00NTZweCAtMTQ0cHh9LmRyb3B1cCwuZHJvcGRv
d257cG9zaXRpb246cmVsYXRpdmV9LmRyb3Bkb3duLXRvZ2dsZXsqbWFyZ2luLWJvdHRvbTotM3B4
fS5kcm9wZG93bi10b2dnbGU6YWN0aXZlLC5vcGVuIC5kcm9wZG93bi10b2dnbGV7b3V0bGluZTow
fS5jYXJldHtkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDowO2hlaWdodDowO3ZlcnRpY2FsLWFs
aWduOnRvcDtib3JkZXItdG9wOjRweCBzb2xpZCAjMDAwO2JvcmRlci1yaWdodDo0cHggc29saWQg
dHJhbnNwYXJlbnQ7Ym9yZGVyLWxlZnQ6NHB4IHNvbGlkIHRyYW5zcGFyZW50O2NvbnRlbnQ6IiJ9
LmRyb3Bkb3duIC5jYXJldHttYXJnaW4tdG9wOjhweDttYXJnaW4tbGVmdDoycHh9LmRyb3Bkb3du
LW1lbnV7cG9zaXRpb246YWJzb2x1dGU7dG9wOjEwMCU7bGVmdDowO3otaW5kZXg6MTAwMDtkaXNw
bGF5Om5vbmU7ZmxvYXQ6bGVmdDttaW4td2lkdGg6MTYwcHg7cGFkZGluZzo1cHggMDttYXJnaW46
MnB4IDAgMDtsaXN0LXN0eWxlOm5vbmU7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjoxcHgg
c29saWQgI2NjYztib3JkZXI6MXB4IHNvbGlkIHJnYmEoMCwwLDAsMC4yKTsqYm9yZGVyLXJpZ2h0
LXdpZHRoOjJweDsqYm9yZGVyLWJvdHRvbS13aWR0aDoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVz
OjZweDstbW96LWJvcmRlci1yYWRpdXM6NnB4O2JvcmRlci1yYWRpdXM6NnB4Oy13ZWJraXQtYm94
LXNoYWRvdzowIDVweCAxMHB4IHJnYmEoMCwwLDAsMC4yKTstbW96LWJveC1zaGFkb3c6MCA1cHgg
MTBweCByZ2JhKDAsMCwwLDAuMik7Ym94LXNoYWRvdzowIDVweCAxMHB4IHJnYmEoMCwwLDAsMC4y
KTstd2Via2l0LWJhY2tncm91bmQtY2xpcDpwYWRkaW5nLWJveDstbW96LWJhY2tncm91bmQtY2xp
cDpwYWRkaW5nO2JhY2tncm91bmQtY2xpcDpwYWRkaW5nLWJveH0uZHJvcGRvd24tbWVudS5wdWxs
LXJpZ2h0e3JpZ2h0OjA7bGVmdDphdXRvfS5kcm9wZG93bi1tZW51IC5kaXZpZGVyeyp3aWR0aDox
MDAlO2hlaWdodDoxcHg7bWFyZ2luOjlweCAxcHg7Km1hcmdpbjotNXB4IDAgNXB4O292ZXJmbG93
OmhpZGRlbjtiYWNrZ3JvdW5kLWNvbG9yOiNlNWU1ZTU7Ym9yZGVyLWJvdHRvbToxcHggc29saWQg
I2ZmZn0uZHJvcGRvd24tbWVudSBsaT5he2Rpc3BsYXk6YmxvY2s7cGFkZGluZzozcHggMjBweDtj
bGVhcjpib3RoO2ZvbnQtd2VpZ2h0Om5vcm1hbDtsaW5lLWhlaWdodDoyMHB4O2NvbG9yOiMzMzM7
d2hpdGUtc3BhY2U6bm93cmFwfS5kcm9wZG93bi1tZW51IGxpPmE6aG92ZXIsLmRyb3Bkb3duLW1l
bnUgbGk+YTpmb2N1cywuZHJvcGRvd24tc3VibWVudTpob3Zlcj5he2NvbG9yOiNmZmY7dGV4dC1k
ZWNvcmF0aW9uOm5vbmU7YmFja2dyb3VuZC1jb2xvcjojMDA4MWMyO2JhY2tncm91bmQtaW1hZ2U6
LW1vei1saW5lYXItZ3JhZGllbnQodG9wLCMwOGMsIzAwNzdiMyk7YmFja2dyb3VuZC1pbWFnZTot
d2Via2l0LWdyYWRpZW50KGxpbmVhciwwIDAsMCAxMDAlLGZyb20oIzA4YyksdG8oIzAwNzdiMykp
O2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCMwOGMsIzAwNzdi
Myk7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQodG9wLCMwOGMsIzAwNzdiMyk7
YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCMwOGMsIzAwNzdiMyk7
YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3Jt
Lk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmYwMDg4Y2MnLGVuZENvbG9yc3Ry
PScjZmYwMDc3YjMnLEdyYWRpZW50VHlwZT0wKX0uZHJvcGRvd24tbWVudSAuYWN0aXZlPmEsLmRy
b3Bkb3duLW1lbnUgLmFjdGl2ZT5hOmhvdmVye2NvbG9yOiNmZmY7dGV4dC1kZWNvcmF0aW9uOm5v
bmU7YmFja2dyb3VuZC1jb2xvcjojMDA4MWMyO2JhY2tncm91bmQtaW1hZ2U6LW1vei1saW5lYXIt
Z3JhZGllbnQodG9wLCMwOGMsIzAwNzdiMyk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRp
ZW50KGxpbmVhciwwIDAsMCAxMDAlLGZyb20oIzA4YyksdG8oIzAwNzdiMykpO2JhY2tncm91bmQt
aW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCMwOGMsIzAwNzdiMyk7YmFja2dyb3Vu
ZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQodG9wLCMwOGMsIzAwNzdiMyk7YmFja2dyb3VuZC1p
bWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCMwOGMsIzAwNzdiMyk7YmFja2dyb3VuZC1y
ZXBlYXQ6cmVwZWF0LXg7b3V0bGluZTowO2ZpbHRlcjpwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5N
aWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI2ZmMDA4OGNjJyxlbmRDb2xvcnN0cj0n
I2ZmMDA3N2IzJyxHcmFkaWVudFR5cGU9MCl9LmRyb3Bkb3duLW1lbnUgLmRpc2FibGVkPmEsLmRy
b3Bkb3duLW1lbnUgLmRpc2FibGVkPmE6aG92ZXJ7Y29sb3I6Izk5OX0uZHJvcGRvd24tbWVudSAu
ZGlzYWJsZWQ+YTpob3Zlcnt0ZXh0LWRlY29yYXRpb246bm9uZTtjdXJzb3I6ZGVmYXVsdDtiYWNr
Z3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2JhY2tncm91bmQtaW1hZ2U6bm9uZTtmaWx0ZXI6cHJv
Z2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KGVuYWJsZWQ9ZmFsc2UpfS5v
cGVueyp6LWluZGV4OjEwMDB9Lm9wZW4+LmRyb3Bkb3duLW1lbnV7ZGlzcGxheTpibG9ja30ucHVs
bC1yaWdodD4uZHJvcGRvd24tbWVudXtyaWdodDowO2xlZnQ6YXV0b30uZHJvcHVwIC5jYXJldCwu
bmF2YmFyLWZpeGVkLWJvdHRvbSAuZHJvcGRvd24gLmNhcmV0e2JvcmRlci10b3A6MDtib3JkZXIt
Ym90dG9tOjRweCBzb2xpZCAjMDAwO2NvbnRlbnQ6IiJ9LmRyb3B1cCAuZHJvcGRvd24tbWVudSwu
bmF2YmFyLWZpeGVkLWJvdHRvbSAuZHJvcGRvd24gLmRyb3Bkb3duLW1lbnV7dG9wOmF1dG87Ym90
dG9tOjEwMCU7bWFyZ2luLWJvdHRvbToxcHh9LmRyb3Bkb3duLXN1Ym1lbnV7cG9zaXRpb246cmVs
YXRpdmV9LmRyb3Bkb3duLXN1Ym1lbnU+LmRyb3Bkb3duLW1lbnV7dG9wOjA7bGVmdDoxMDAlO21h
cmdpbi10b3A6LTZweDttYXJnaW4tbGVmdDotMXB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czowIDZw
eCA2cHggNnB4Oy1tb3otYm9yZGVyLXJhZGl1czowIDZweCA2cHggNnB4O2JvcmRlci1yYWRpdXM6
MCA2cHggNnB4IDZweH0uZHJvcGRvd24tc3VibWVudTpob3Zlcj4uZHJvcGRvd24tbWVudXtkaXNw
bGF5OmJsb2NrfS5kcm9wdXAgLmRyb3Bkb3duLXN1Ym1lbnU+LmRyb3Bkb3duLW1lbnV7dG9wOmF1
dG87Ym90dG9tOjA7bWFyZ2luLXRvcDowO21hcmdpbi1ib3R0b206LTJweDstd2Via2l0LWJvcmRl
ci1yYWRpdXM6NXB4IDVweCA1cHggMDstbW96LWJvcmRlci1yYWRpdXM6NXB4IDVweCA1cHggMDti
b3JkZXItcmFkaXVzOjVweCA1cHggNXB4IDB9LmRyb3Bkb3duLXN1Ym1lbnU+YTphZnRlcntkaXNw
bGF5OmJsb2NrO2Zsb2F0OnJpZ2h0O3dpZHRoOjA7aGVpZ2h0OjA7bWFyZ2luLXRvcDo1cHg7bWFy
Z2luLXJpZ2h0Oi0xMHB4O2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudDtib3JkZXItbGVmdC1jb2xv
cjojY2NjO2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItd2lkdGg6NXB4IDAgNXB4IDVweDtjb250
ZW50OiIgIn0uZHJvcGRvd24tc3VibWVudTpob3Zlcj5hOmFmdGVye2JvcmRlci1sZWZ0LWNvbG9y
OiNmZmZ9LmRyb3Bkb3duLXN1Ym1lbnUucHVsbC1sZWZ0e2Zsb2F0Om5vbmV9LmRyb3Bkb3duLXN1
Ym1lbnUucHVsbC1sZWZ0Pi5kcm9wZG93bi1tZW51e2xlZnQ6LTEwMCU7bWFyZ2luLWxlZnQ6MTBw
eDstd2Via2l0LWJvcmRlci1yYWRpdXM6NnB4IDAgNnB4IDZweDstbW96LWJvcmRlci1yYWRpdXM6
NnB4IDAgNnB4IDZweDtib3JkZXItcmFkaXVzOjZweCAwIDZweCA2cHh9LmRyb3Bkb3duIC5kcm9w
ZG93bi1tZW51IC5uYXYtaGVhZGVye3BhZGRpbmctcmlnaHQ6MjBweDtwYWRkaW5nLWxlZnQ6MjBw
eH0udHlwZWFoZWFke3otaW5kZXg6MTA1MTttYXJnaW4tdG9wOjJweDstd2Via2l0LWJvcmRlci1y
YWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyLXJhZGl1czo0cHh9LndlbGx7
bWluLWhlaWdodDoyMHB4O3BhZGRpbmc6MTlweDttYXJnaW4tYm90dG9tOjIwcHg7YmFja2dyb3Vu
ZC1jb2xvcjojZjVmNWY1O2JvcmRlcjoxcHggc29saWQgI2UzZTNlMzstd2Via2l0LWJvcmRlci1y
YWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyLXJhZGl1czo0cHg7LXdlYmtp
dC1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDUpOy1tb3otYm94LXNo
YWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA1KTtib3gtc2hhZG93Omluc2V0IDAg
MXB4IDFweCByZ2JhKDAsMCwwLDAuMDUpfS53ZWxsIGJsb2NrcXVvdGV7Ym9yZGVyLWNvbG9yOiNk
ZGQ7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsMC4xNSl9LndlbGwtbGFyZ2V7cGFkZGluZzoyNHB4
Oy13ZWJraXQtYm9yZGVyLXJhZGl1czo2cHg7LW1vei1ib3JkZXItcmFkaXVzOjZweDtib3JkZXIt
cmFkaXVzOjZweH0ud2VsbC1zbWFsbHtwYWRkaW5nOjlweDstd2Via2l0LWJvcmRlci1yYWRpdXM6
M3B4Oy1tb3otYm9yZGVyLXJhZGl1czozcHg7Ym9yZGVyLXJhZGl1czozcHh9LmZhZGV7b3BhY2l0
eTowOy13ZWJraXQtdHJhbnNpdGlvbjpvcGFjaXR5IC4xNXMgbGluZWFyOy1tb3otdHJhbnNpdGlv
bjpvcGFjaXR5IC4xNXMgbGluZWFyOy1vLXRyYW5zaXRpb246b3BhY2l0eSAuMTVzIGxpbmVhcjt0
cmFuc2l0aW9uOm9wYWNpdHkgLjE1cyBsaW5lYXJ9LmZhZGUuaW57b3BhY2l0eToxfS5jb2xsYXBz
ZXtwb3NpdGlvbjpyZWxhdGl2ZTtoZWlnaHQ6MDtvdmVyZmxvdzpoaWRkZW47LXdlYmtpdC10cmFu
c2l0aW9uOmhlaWdodCAuMzVzIGVhc2U7LW1vei10cmFuc2l0aW9uOmhlaWdodCAuMzVzIGVhc2U7
LW8tdHJhbnNpdGlvbjpoZWlnaHQgLjM1cyBlYXNlO3RyYW5zaXRpb246aGVpZ2h0IC4zNXMgZWFz
ZX0uY29sbGFwc2UuaW57aGVpZ2h0OmF1dG99LmNsb3Nle2Zsb2F0OnJpZ2h0O2ZvbnQtc2l6ZToy
MHB4O2ZvbnQtd2VpZ2h0OmJvbGQ7bGluZS1oZWlnaHQ6MjBweDtjb2xvcjojMDAwO3RleHQtc2hh
ZG93OjAgMXB4IDAgI2ZmZjtvcGFjaXR5Oi4yO2ZpbHRlcjphbHBoYShvcGFjaXR5PTIwKX0uY2xv
c2U6aG92ZXJ7Y29sb3I6IzAwMDt0ZXh0LWRlY29yYXRpb246bm9uZTtjdXJzb3I6cG9pbnRlcjtv
cGFjaXR5Oi40O2ZpbHRlcjphbHBoYShvcGFjaXR5PTQwKX1idXR0b24uY2xvc2V7cGFkZGluZzow
O2N1cnNvcjpwb2ludGVyO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Ym9yZGVyOjA7LXdlYmtpdC1h
cHBlYXJhbmNlOm5vbmV9LmJ0bntkaXNwbGF5OmlubGluZS1ibG9jazsqZGlzcGxheTppbmxpbmU7
cGFkZGluZzo0cHggMTJweDttYXJnaW4tYm90dG9tOjA7Km1hcmdpbi1sZWZ0Oi4zZW07Zm9udC1z
aXplOjE0cHg7bGluZS1oZWlnaHQ6MjBweDtjb2xvcjojMzMzO3RleHQtYWxpZ246Y2VudGVyO3Rl
eHQtc2hhZG93OjAgMXB4IDFweCByZ2JhKDI1NSwyNTUsMjU1LDAuNzUpO3ZlcnRpY2FsLWFsaWdu
Om1pZGRsZTtjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOiNmNWY1ZjU7KmJhY2tncm91
bmQtY29sb3I6I2U2ZTZlNjtiYWNrZ3JvdW5kLWltYWdlOi1tb3otbGluZWFyLWdyYWRpZW50KHRv
cCwjZmZmLCNlNmU2ZTYpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIs
MCAwLDAgMTAwJSxmcm9tKCNmZmYpLHRvKCNlNmU2ZTYpKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJr
aXQtbGluZWFyLWdyYWRpZW50KHRvcCwjZmZmLCNlNmU2ZTYpO2JhY2tncm91bmQtaW1hZ2U6LW8t
bGluZWFyLWdyYWRpZW50KHRvcCwjZmZmLCNlNmU2ZTYpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFy
LWdyYWRpZW50KHRvIGJvdHRvbSwjZmZmLCNlNmU2ZTYpO2JhY2tncm91bmQtcmVwZWF0OnJlcGVh
dC14O2JvcmRlcjoxcHggc29saWQgI2JiYjsqYm9yZGVyOjA7Ym9yZGVyLWNvbG9yOiNlNmU2ZTYg
I2U2ZTZlNiAjYmZiZmJmO2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLDAuMSkgcmdiYSgwLDAsMCww
LjEpIHJnYmEoMCwwLDAsMC4yNSk7Ym9yZGVyLWJvdHRvbS1jb2xvcjojYTJhMmEyOy13ZWJraXQt
Ym9yZGVyLXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzOjRweDtib3JkZXItcmFkaXVzOjRw
eDtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0
Q29sb3JzdHI9JyNmZmZmZmZmZicsZW5kQ29sb3JzdHI9JyNmZmU2ZTZlNicsR3JhZGllbnRUeXBl
PTApO2ZpbHRlcjpwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoZW5h
YmxlZD1mYWxzZSk7Knpvb206MTstd2Via2l0LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMCByZ2Jh
KDI1NSwyNTUsMjU1LDAuMiksMCAxcHggMnB4IHJnYmEoMCwwLDAsMC4wNSk7LW1vei1ib3gtc2hh
ZG93Omluc2V0IDAgMXB4IDAgcmdiYSgyNTUsMjU1LDI1NSwwLjIpLDAgMXB4IDJweCByZ2JhKDAs
MCwwLDAuMDUpO2JveC1zaGFkb3c6aW5zZXQgMCAxcHggMCByZ2JhKDI1NSwyNTUsMjU1LDAuMiks
MCAxcHggMnB4IHJnYmEoMCwwLDAsMC4wNSl9LmJ0bjpob3ZlciwuYnRuOmFjdGl2ZSwuYnRuLmFj
dGl2ZSwuYnRuLmRpc2FibGVkLC5idG5bZGlzYWJsZWRde2NvbG9yOiMzMzM7YmFja2dyb3VuZC1j
b2xvcjojZTZlNmU2OypiYWNrZ3JvdW5kLWNvbG9yOiNkOWQ5ZDl9LmJ0bjphY3RpdmUsLmJ0bi5h
Y3RpdmV7YmFja2dyb3VuZC1jb2xvcjojY2NjIFw5fS5idG46Zmlyc3QtY2hpbGR7Km1hcmdpbi1s
ZWZ0OjB9LmJ0bjpob3Zlcntjb2xvcjojMzMzO3RleHQtZGVjb3JhdGlvbjpub25lO2JhY2tncm91
bmQtcG9zaXRpb246MCAtMTVweDstd2Via2l0LXRyYW5zaXRpb246YmFja2dyb3VuZC1wb3NpdGlv
biAuMXMgbGluZWFyOy1tb3otdHJhbnNpdGlvbjpiYWNrZ3JvdW5kLXBvc2l0aW9uIC4xcyBsaW5l
YXI7LW8tdHJhbnNpdGlvbjpiYWNrZ3JvdW5kLXBvc2l0aW9uIC4xcyBsaW5lYXI7dHJhbnNpdGlv
bjpiYWNrZ3JvdW5kLXBvc2l0aW9uIC4xcyBsaW5lYXJ9LmJ0bjpmb2N1c3tvdXRsaW5lOnRoaW4g
ZG90dGVkICMzMzM7b3V0bGluZTo1cHggYXV0byAtd2Via2l0LWZvY3VzLXJpbmctY29sb3I7b3V0
bGluZS1vZmZzZXQ6LTJweH0uYnRuLmFjdGl2ZSwuYnRuOmFjdGl2ZXtiYWNrZ3JvdW5kLWltYWdl
Om5vbmU7b3V0bGluZTowOy13ZWJraXQtYm94LXNoYWRvdzppbnNldCAwIDJweCA0cHggcmdiYSgw
LDAsMCwwLjE1KSwwIDFweCAycHggcmdiYSgwLDAsMCwwLjA1KTstbW96LWJveC1zaGFkb3c6aW5z
ZXQgMCAycHggNHB4IHJnYmEoMCwwLDAsMC4xNSksMCAxcHggMnB4IHJnYmEoMCwwLDAsMC4wNSk7
Ym94LXNoYWRvdzppbnNldCAwIDJweCA0cHggcmdiYSgwLDAsMCwwLjE1KSwwIDFweCAycHggcmdi
YSgwLDAsMCwwLjA1KX0uYnRuLmRpc2FibGVkLC5idG5bZGlzYWJsZWRde2N1cnNvcjpkZWZhdWx0
O2JhY2tncm91bmQtaW1hZ2U6bm9uZTtvcGFjaXR5Oi42NTtmaWx0ZXI6YWxwaGEob3BhY2l0eT02
NSk7LXdlYmtpdC1ib3gtc2hhZG93Om5vbmU7LW1vei1ib3gtc2hhZG93Om5vbmU7Ym94LXNoYWRv
dzpub25lfS5idG4tbGFyZ2V7cGFkZGluZzoxMXB4IDE5cHg7Zm9udC1zaXplOjE3LjVweDstd2Vi
a2l0LWJvcmRlci1yYWRpdXM6NnB4Oy1tb3otYm9yZGVyLXJhZGl1czo2cHg7Ym9yZGVyLXJhZGl1
czo2cHh9LmJ0bi1sYXJnZSBbY2xhc3NePSJpY29uLSJdLC5idG4tbGFyZ2UgW2NsYXNzKj0iIGlj
b24tIl17bWFyZ2luLXRvcDo0cHh9LmJ0bi1zbWFsbHtwYWRkaW5nOjJweCAxMHB4O2ZvbnQtc2l6
ZToxMS45cHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjNweDstbW96LWJvcmRlci1yYWRpdXM6M3B4
O2JvcmRlci1yYWRpdXM6M3B4fS5idG4tc21hbGwgW2NsYXNzXj0iaWNvbi0iXSwuYnRuLXNtYWxs
IFtjbGFzcyo9IiBpY29uLSJde21hcmdpbi10b3A6MH0uYnRuLW1pbmkgW2NsYXNzXj0iaWNvbi0i
XSwuYnRuLW1pbmkgW2NsYXNzKj0iIGljb24tIl17bWFyZ2luLXRvcDotMXB4fS5idG4tbWluaXtw
YWRkaW5nOjAgNnB4O2ZvbnQtc2l6ZToxMC41cHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjNweDst
bW96LWJvcmRlci1yYWRpdXM6M3B4O2JvcmRlci1yYWRpdXM6M3B4fS5idG4tYmxvY2t7ZGlzcGxh
eTpibG9jazt3aWR0aDoxMDAlO3BhZGRpbmctcmlnaHQ6MDtwYWRkaW5nLWxlZnQ6MDstd2Via2l0
LWJveC1zaXppbmc6Ym9yZGVyLWJveDstbW96LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6
aW5nOmJvcmRlci1ib3h9LmJ0bi1ibG9jaysuYnRuLWJsb2Nre21hcmdpbi10b3A6NXB4fWlucHV0
W3R5cGU9InN1Ym1pdCJdLmJ0bi1ibG9jayxpbnB1dFt0eXBlPSJyZXNldCJdLmJ0bi1ibG9jayxp
bnB1dFt0eXBlPSJidXR0b24iXS5idG4tYmxvY2t7d2lkdGg6MTAwJX0uYnRuLXByaW1hcnkuYWN0
aXZlLC5idG4td2FybmluZy5hY3RpdmUsLmJ0bi1kYW5nZXIuYWN0aXZlLC5idG4tc3VjY2Vzcy5h
Y3RpdmUsLmJ0bi1pbmZvLmFjdGl2ZSwuYnRuLWludmVyc2UuYWN0aXZle2NvbG9yOnJnYmEoMjU1
LDI1NSwyNTUsMC43NSl9LmJ0bntib3JkZXItY29sb3I6I2M1YzVjNTtib3JkZXItY29sb3I6cmdi
YSgwLDAsMCwwLjE1KSByZ2JhKDAsMCwwLDAuMTUpIHJnYmEoMCwwLDAsMC4yNSl9LmJ0bi1wcmlt
YXJ5e2NvbG9yOiNmZmY7dGV4dC1zaGFkb3c6MCAtMXB4IDAgcmdiYSgwLDAsMCwwLjI1KTtiYWNr
Z3JvdW5kLWNvbG9yOiMwMDZkY2M7KmJhY2tncm91bmQtY29sb3I6IzA0YztiYWNrZ3JvdW5kLWlt
YWdlOi1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwjMDhjLCMwNGMpO2JhY2tncm91bmQtaW1hZ2U6
LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsMCAwLDAgMTAwJSxmcm9tKCMwOGMpLHRvKCMwNGMpKTti
YWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwjMDhjLCMwNGMpO2Jh
Y2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KHRvcCwjMDhjLCMwNGMpO2JhY2tncm91
bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwjMDhjLCMwNGMpO2JhY2tncm91bmQt
cmVwZWF0OnJlcGVhdC14O2JvcmRlci1jb2xvcjojMDRjICMwNGMgIzAwMmE4MDtib3JkZXItY29s
b3I6cmdiYSgwLDAsMCwwLjEpIHJnYmEoMCwwLDAsMC4xKSByZ2JhKDAsMCwwLDAuMjUpO2ZpbHRl
cjpwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0
cj0nI2ZmMDA4OGNjJyxlbmRDb2xvcnN0cj0nI2ZmMDA0NGNjJyxHcmFkaWVudFR5cGU9MCk7Zmls
dGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChlbmFibGVkPWZh
bHNlKX0uYnRuLXByaW1hcnk6aG92ZXIsLmJ0bi1wcmltYXJ5OmFjdGl2ZSwuYnRuLXByaW1hcnku
YWN0aXZlLC5idG4tcHJpbWFyeS5kaXNhYmxlZCwuYnRuLXByaW1hcnlbZGlzYWJsZWRde2NvbG9y
OiNmZmY7YmFja2dyb3VuZC1jb2xvcjojMDRjOypiYWNrZ3JvdW5kLWNvbG9yOiMwMDNiYjN9LmJ0
bi1wcmltYXJ5OmFjdGl2ZSwuYnRuLXByaW1hcnkuYWN0aXZle2JhY2tncm91bmQtY29sb3I6IzAz
OSBcOX0uYnRuLXdhcm5pbmd7Y29sb3I6I2ZmZjt0ZXh0LXNoYWRvdzowIC0xcHggMCByZ2JhKDAs
MCwwLDAuMjUpO2JhY2tncm91bmQtY29sb3I6I2ZhYTczMjsqYmFja2dyb3VuZC1jb2xvcjojZjg5
NDA2O2JhY2tncm91bmQtaW1hZ2U6LW1vei1saW5lYXItZ3JhZGllbnQodG9wLCNmYmI0NTAsI2Y4
OTQwNik7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciwwIDAsMCAxMDAl
LGZyb20oI2ZiYjQ1MCksdG8oI2Y4OTQwNikpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5l
YXItZ3JhZGllbnQodG9wLCNmYmI0NTAsI2Y4OTQwNik7YmFja2dyb3VuZC1pbWFnZTotby1saW5l
YXItZ3JhZGllbnQodG9wLCNmYmI0NTAsI2Y4OTQwNik7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXIt
Z3JhZGllbnQodG8gYm90dG9tLCNmYmI0NTAsI2Y4OTQwNik7YmFja2dyb3VuZC1yZXBlYXQ6cmVw
ZWF0LXg7Ym9yZGVyLWNvbG9yOiNmODk0MDYgI2Y4OTQwNiAjYWQ2NzA0O2JvcmRlci1jb2xvcjpy
Z2JhKDAsMCwwLDAuMSkgcmdiYSgwLDAsMCwwLjEpIHJnYmEoMCwwLDAsMC4yNSk7ZmlsdGVyOnBy
b2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScj
ZmZmYmI0NTAnLGVuZENvbG9yc3RyPScjZmZmODk0MDYnLEdyYWRpZW50VHlwZT0wKTtmaWx0ZXI6
cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KGVuYWJsZWQ9ZmFsc2Up
fS5idG4td2FybmluZzpob3ZlciwuYnRuLXdhcm5pbmc6YWN0aXZlLC5idG4td2FybmluZy5hY3Rp
dmUsLmJ0bi13YXJuaW5nLmRpc2FibGVkLC5idG4td2FybmluZ1tkaXNhYmxlZF17Y29sb3I6I2Zm
ZjtiYWNrZ3JvdW5kLWNvbG9yOiNmODk0MDY7KmJhY2tncm91bmQtY29sb3I6I2RmODUwNX0uYnRu
LXdhcm5pbmc6YWN0aXZlLC5idG4td2FybmluZy5hY3RpdmV7YmFja2dyb3VuZC1jb2xvcjojYzY3
NjA1IFw5fS5idG4tZGFuZ2Vye2NvbG9yOiNmZmY7dGV4dC1zaGFkb3c6MCAtMXB4IDAgcmdiYSgw
LDAsMCwwLjI1KTtiYWNrZ3JvdW5kLWNvbG9yOiNkYTRmNDk7KmJhY2tncm91bmQtY29sb3I6I2Jk
MzYyZjtiYWNrZ3JvdW5kLWltYWdlOi1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwjZWU1ZjViLCNi
ZDM2MmYpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsMCAwLDAgMTAw
JSxmcm9tKCNlZTVmNWIpLHRvKCNiZDM2MmYpKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGlu
ZWFyLWdyYWRpZW50KHRvcCwjZWU1ZjViLCNiZDM2MmYpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGlu
ZWFyLWdyYWRpZW50KHRvcCwjZWU1ZjViLCNiZDM2MmYpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFy
LWdyYWRpZW50KHRvIGJvdHRvbSwjZWU1ZjViLCNiZDM2MmYpO2JhY2tncm91bmQtcmVwZWF0OnJl
cGVhdC14O2JvcmRlci1jb2xvcjojYmQzNjJmICNiZDM2MmYgIzgwMjQyMDtib3JkZXItY29sb3I6
cmdiYSgwLDAsMCwwLjEpIHJnYmEoMCwwLDAsMC4xKSByZ2JhKDAsMCwwLDAuMjUpO2ZpbHRlcjpw
cm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0n
I2ZmZWU1ZjViJyxlbmRDb2xvcnN0cj0nI2ZmYmQzNjJmJyxHcmFkaWVudFR5cGU9MCk7ZmlsdGVy
OnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChlbmFibGVkPWZhbHNl
KX0uYnRuLWRhbmdlcjpob3ZlciwuYnRuLWRhbmdlcjphY3RpdmUsLmJ0bi1kYW5nZXIuYWN0aXZl
LC5idG4tZGFuZ2VyLmRpc2FibGVkLC5idG4tZGFuZ2VyW2Rpc2FibGVkXXtjb2xvcjojZmZmO2Jh
Y2tncm91bmQtY29sb3I6I2JkMzYyZjsqYmFja2dyb3VuZC1jb2xvcjojYTkzMDJhfS5idG4tZGFu
Z2VyOmFjdGl2ZSwuYnRuLWRhbmdlci5hY3RpdmV7YmFja2dyb3VuZC1jb2xvcjojOTQyYTI1IFw5
fS5idG4tc3VjY2Vzc3tjb2xvcjojZmZmO3RleHQtc2hhZG93OjAgLTFweCAwIHJnYmEoMCwwLDAs
MC4yNSk7YmFja2dyb3VuZC1jb2xvcjojNWJiNzViOypiYWNrZ3JvdW5kLWNvbG9yOiM1MWEzNTE7
YmFja2dyb3VuZC1pbWFnZTotbW96LWxpbmVhci1ncmFkaWVudCh0b3AsIzYyYzQ2MiwjNTFhMzUx
KTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtZ3JhZGllbnQobGluZWFyLDAgMCwwIDEwMCUsZnJv
bSgjNjJjNDYyKSx0bygjNTFhMzUxKSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWxpbmVhci1n
cmFkaWVudCh0b3AsIzYyYzQ2MiwjNTFhMzUxKTtiYWNrZ3JvdW5kLWltYWdlOi1vLWxpbmVhci1n
cmFkaWVudCh0b3AsIzYyYzQ2MiwjNTFhMzUxKTtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFk
aWVudCh0byBib3R0b20sIzYyYzQ2MiwjNTFhMzUxKTtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQt
eDtib3JkZXItY29sb3I6IzUxYTM1MSAjNTFhMzUxICMzODcwMzg7Ym9yZGVyLWNvbG9yOnJnYmEo
MCwwLDAsMC4xKSByZ2JhKDAsMCwwLDAuMSkgcmdiYSgwLDAsMCwwLjI1KTtmaWx0ZXI6cHJvZ2lk
OkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyNmZjYy
YzQ2MicsZW5kQ29sb3JzdHI9JyNmZjUxYTM1MScsR3JhZGllbnRUeXBlPTApO2ZpbHRlcjpwcm9n
aWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoZW5hYmxlZD1mYWxzZSl9LmJ0
bi1zdWNjZXNzOmhvdmVyLC5idG4tc3VjY2VzczphY3RpdmUsLmJ0bi1zdWNjZXNzLmFjdGl2ZSwu
YnRuLXN1Y2Nlc3MuZGlzYWJsZWQsLmJ0bi1zdWNjZXNzW2Rpc2FibGVkXXtjb2xvcjojZmZmO2Jh
Y2tncm91bmQtY29sb3I6IzUxYTM1MTsqYmFja2dyb3VuZC1jb2xvcjojNDk5MjQ5fS5idG4tc3Vj
Y2VzczphY3RpdmUsLmJ0bi1zdWNjZXNzLmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOiM0MDgxNDAg
XDl9LmJ0bi1pbmZve2NvbG9yOiNmZmY7dGV4dC1zaGFkb3c6MCAtMXB4IDAgcmdiYSgwLDAsMCww
LjI1KTtiYWNrZ3JvdW5kLWNvbG9yOiM0OWFmY2Q7KmJhY2tncm91bmQtY29sb3I6IzJmOTZiNDti
YWNrZ3JvdW5kLWltYWdlOi1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwjNWJjMGRlLCMyZjk2YjQp
O2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsMCAwLDAgMTAwJSxmcm9t
KCM1YmMwZGUpLHRvKCMyZjk2YjQpKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdy
YWRpZW50KHRvcCwjNWJjMGRlLCMyZjk2YjQpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdy
YWRpZW50KHRvcCwjNWJjMGRlLCMyZjk2YjQpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRp
ZW50KHRvIGJvdHRvbSwjNWJjMGRlLCMyZjk2YjQpO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14
O2JvcmRlci1jb2xvcjojMmY5NmI0ICMyZjk2YjQgIzFmNjM3Nztib3JkZXItY29sb3I6cmdiYSgw
LDAsMCwwLjEpIHJnYmEoMCwwLDAsMC4xKSByZ2JhKDAsMCwwLDAuMjUpO2ZpbHRlcjpwcm9naWQ6
RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI2ZmNWJj
MGRlJyxlbmRDb2xvcnN0cj0nI2ZmMmY5NmI0JyxHcmFkaWVudFR5cGU9MCk7ZmlsdGVyOnByb2dp
ZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChlbmFibGVkPWZhbHNlKX0uYnRu
LWluZm86aG92ZXIsLmJ0bi1pbmZvOmFjdGl2ZSwuYnRuLWluZm8uYWN0aXZlLC5idG4taW5mby5k
aXNhYmxlZCwuYnRuLWluZm9bZGlzYWJsZWRde2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjoj
MmY5NmI0OypiYWNrZ3JvdW5kLWNvbG9yOiMyYTg1YTB9LmJ0bi1pbmZvOmFjdGl2ZSwuYnRuLWlu
Zm8uYWN0aXZle2JhY2tncm91bmQtY29sb3I6IzI0NzQ4YyBcOX0uYnRuLWludmVyc2V7Y29sb3I6
I2ZmZjt0ZXh0LXNoYWRvdzowIC0xcHggMCByZ2JhKDAsMCwwLDAuMjUpO2JhY2tncm91bmQtY29s
b3I6IzM2MzYzNjsqYmFja2dyb3VuZC1jb2xvcjojMjIyO2JhY2tncm91bmQtaW1hZ2U6LW1vei1s
aW5lYXItZ3JhZGllbnQodG9wLCM0NDQsIzIyMik7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdy
YWRpZW50KGxpbmVhciwwIDAsMCAxMDAlLGZyb20oIzQ0NCksdG8oIzIyMikpO2JhY2tncm91bmQt
aW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCM0NDQsIzIyMik7YmFja2dyb3VuZC1p
bWFnZTotby1saW5lYXItZ3JhZGllbnQodG9wLCM0NDQsIzIyMik7YmFja2dyb3VuZC1pbWFnZTps
aW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCM0NDQsIzIyMik7YmFja2dyb3VuZC1yZXBlYXQ6cmVw
ZWF0LXg7Ym9yZGVyLWNvbG9yOiMyMjIgIzIyMiAjMDAwO2JvcmRlci1jb2xvcjpyZ2JhKDAsMCww
LDAuMSkgcmdiYSgwLDAsMCwwLjEpIHJnYmEoMCwwLDAsMC4yNSk7ZmlsdGVyOnByb2dpZDpEWElt
YWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmY0NDQ0NDQn
LGVuZENvbG9yc3RyPScjZmYyMjIyMjInLEdyYWRpZW50VHlwZT0wKTtmaWx0ZXI6cHJvZ2lkOkRY
SW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KGVuYWJsZWQ9ZmFsc2UpfS5idG4taW52
ZXJzZTpob3ZlciwuYnRuLWludmVyc2U6YWN0aXZlLC5idG4taW52ZXJzZS5hY3RpdmUsLmJ0bi1p
bnZlcnNlLmRpc2FibGVkLC5idG4taW52ZXJzZVtkaXNhYmxlZF17Y29sb3I6I2ZmZjtiYWNrZ3Jv
dW5kLWNvbG9yOiMyMjI7KmJhY2tncm91bmQtY29sb3I6IzE1MTUxNX0uYnRuLWludmVyc2U6YWN0
aXZlLC5idG4taW52ZXJzZS5hY3RpdmV7YmFja2dyb3VuZC1jb2xvcjojMDgwODA4IFw5fWJ1dHRv
bi5idG4saW5wdXRbdHlwZT0ic3VibWl0Il0uYnRueypwYWRkaW5nLXRvcDozcHg7KnBhZGRpbmct
Ym90dG9tOjNweH1idXR0b24uYnRuOjotbW96LWZvY3VzLWlubmVyLGlucHV0W3R5cGU9InN1Ym1p
dCJdLmJ0bjo6LW1vei1mb2N1cy1pbm5lcntwYWRkaW5nOjA7Ym9yZGVyOjB9YnV0dG9uLmJ0bi5i
dG4tbGFyZ2UsaW5wdXRbdHlwZT0ic3VibWl0Il0uYnRuLmJ0bi1sYXJnZXsqcGFkZGluZy10b3A6
N3B4OypwYWRkaW5nLWJvdHRvbTo3cHh9YnV0dG9uLmJ0bi5idG4tc21hbGwsaW5wdXRbdHlwZT0i
c3VibWl0Il0uYnRuLmJ0bi1zbWFsbHsqcGFkZGluZy10b3A6M3B4OypwYWRkaW5nLWJvdHRvbToz
cHh9YnV0dG9uLmJ0bi5idG4tbWluaSxpbnB1dFt0eXBlPSJzdWJtaXQiXS5idG4uYnRuLW1pbml7
KnBhZGRpbmctdG9wOjFweDsqcGFkZGluZy1ib3R0b206MXB4fS5idG4tbGluaywuYnRuLWxpbms6
YWN0aXZlLC5idG4tbGlua1tkaXNhYmxlZF17YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDti
YWNrZ3JvdW5kLWltYWdlOm5vbmU7LXdlYmtpdC1ib3gtc2hhZG93Om5vbmU7LW1vei1ib3gtc2hh
ZG93Om5vbmU7Ym94LXNoYWRvdzpub25lfS5idG4tbGlua3tjb2xvcjojMDhjO2N1cnNvcjpwb2lu
dGVyO2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudDstd2Via2l0LWJvcmRlci1yYWRpdXM6MDstbW96
LWJvcmRlci1yYWRpdXM6MDtib3JkZXItcmFkaXVzOjB9LmJ0bi1saW5rOmhvdmVye2NvbG9yOiMw
MDU1ODA7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFy
ZW50fS5idG4tbGlua1tkaXNhYmxlZF06aG92ZXJ7Y29sb3I6IzMzMzt0ZXh0LWRlY29yYXRpb246
bm9uZX0uYnRuLWdyb3Vwe3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6aW5saW5lLWJsb2NrOypk
aXNwbGF5OmlubGluZTsqbWFyZ2luLWxlZnQ6LjNlbTtmb250LXNpemU6MDt3aGl0ZS1zcGFjZTpu
b3dyYXA7dmVydGljYWwtYWxpZ246bWlkZGxlOyp6b29tOjF9LmJ0bi1ncm91cDpmaXJzdC1jaGls
ZHsqbWFyZ2luLWxlZnQ6MH0uYnRuLWdyb3VwKy5idG4tZ3JvdXB7bWFyZ2luLWxlZnQ6NXB4fS5i
dG4tdG9vbGJhcnttYXJnaW4tdG9wOjEwcHg7bWFyZ2luLWJvdHRvbToxMHB4O2ZvbnQtc2l6ZTow
fS5idG4tdG9vbGJhcj4uYnRuKy5idG4sLmJ0bi10b29sYmFyPi5idG4tZ3JvdXArLmJ0biwuYnRu
LXRvb2xiYXI+LmJ0bisuYnRuLWdyb3Vwe21hcmdpbi1sZWZ0OjVweH0uYnRuLWdyb3VwPi5idG57
cG9zaXRpb246cmVsYXRpdmU7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjA7LW1vei1ib3JkZXItcmFk
aXVzOjA7Ym9yZGVyLXJhZGl1czowfS5idG4tZ3JvdXA+LmJ0bisuYnRue21hcmdpbi1sZWZ0Oi0x
cHh9LmJ0bi1ncm91cD4uYnRuLC5idG4tZ3JvdXA+LmRyb3Bkb3duLW1lbnUsLmJ0bi1ncm91cD4u
cG9wb3Zlcntmb250LXNpemU6MTRweH0uYnRuLWdyb3VwPi5idG4tbWluaXtmb250LXNpemU6MTAu
NXB4fS5idG4tZ3JvdXA+LmJ0bi1zbWFsbHtmb250LXNpemU6MTEuOXB4fS5idG4tZ3JvdXA+LmJ0
bi1sYXJnZXtmb250LXNpemU6MTcuNXB4fS5idG4tZ3JvdXA+LmJ0bjpmaXJzdC1jaGlsZHttYXJn
aW4tbGVmdDowOy13ZWJraXQtYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czo0cHg7Ym9yZGVyLWJv
dHRvbS1sZWZ0LXJhZGl1czo0cHg7LXdlYmtpdC1ib3JkZXItdG9wLWxlZnQtcmFkaXVzOjRweDti
b3JkZXItdG9wLWxlZnQtcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXMtYm90dG9tbGVmdDo0
cHg7LW1vei1ib3JkZXItcmFkaXVzLXRvcGxlZnQ6NHB4fS5idG4tZ3JvdXA+LmJ0bjpsYXN0LWNo
aWxkLC5idG4tZ3JvdXA+LmRyb3Bkb3duLXRvZ2dsZXstd2Via2l0LWJvcmRlci10b3AtcmlnaHQt
cmFkaXVzOjRweDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czo0cHg7LXdlYmtpdC1ib3JkZXItYm90
dG9tLXJpZ2h0LXJhZGl1czo0cHg7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6NHB4Oy1tb3ot
Ym9yZGVyLXJhZGl1cy10b3ByaWdodDo0cHg7LW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbXJpZ2h0
OjRweH0uYnRuLWdyb3VwPi5idG4ubGFyZ2U6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6MDstd2Vi
a2l0LWJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6NnB4O2JvcmRlci1ib3R0b20tbGVmdC1yYWRp
dXM6NnB4Oy13ZWJraXQtYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czo2cHg7Ym9yZGVyLXRvcC1sZWZ0
LXJhZGl1czo2cHg7LW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbWxlZnQ6NnB4Oy1tb3otYm9yZGVy
LXJhZGl1cy10b3BsZWZ0OjZweH0uYnRuLWdyb3VwPi5idG4ubGFyZ2U6bGFzdC1jaGlsZCwuYnRu
LWdyb3VwPi5sYXJnZS5kcm9wZG93bi10b2dnbGV7LXdlYmtpdC1ib3JkZXItdG9wLXJpZ2h0LXJh
ZGl1czo2cHg7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6NnB4Oy13ZWJraXQtYm9yZGVyLWJvdHRv
bS1yaWdodC1yYWRpdXM6NnB4O2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjZweDstbW96LWJv
cmRlci1yYWRpdXMtdG9wcmlnaHQ6NnB4Oy1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21yaWdodDo2
cHh9LmJ0bi1ncm91cD4uYnRuOmhvdmVyLC5idG4tZ3JvdXA+LmJ0bjpmb2N1cywuYnRuLWdyb3Vw
Pi5idG46YWN0aXZlLC5idG4tZ3JvdXA+LmJ0bi5hY3RpdmV7ei1pbmRleDoyfS5idG4tZ3JvdXAg
LmRyb3Bkb3duLXRvZ2dsZTphY3RpdmUsLmJ0bi1ncm91cC5vcGVuIC5kcm9wZG93bi10b2dnbGV7
b3V0bGluZTowfS5idG4tZ3JvdXA+LmJ0bisuZHJvcGRvd24tdG9nZ2xleypwYWRkaW5nLXRvcDo1
cHg7cGFkZGluZy1yaWdodDo4cHg7KnBhZGRpbmctYm90dG9tOjVweDtwYWRkaW5nLWxlZnQ6OHB4
Oy13ZWJraXQtYm94LXNoYWRvdzppbnNldCAxcHggMCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4xMjUp
LGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsMjU1LDI1NSwwLjIpLDAgMXB4IDJweCByZ2JhKDAsMCww
LDAuMDUpOy1tb3otYm94LXNoYWRvdzppbnNldCAxcHggMCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4x
MjUpLGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsMjU1LDI1NSwwLjIpLDAgMXB4IDJweCByZ2JhKDAs
MCwwLDAuMDUpO2JveC1zaGFkb3c6aW5zZXQgMXB4IDAgMCByZ2JhKDI1NSwyNTUsMjU1LDAuMTI1
KSxpbnNldCAwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4yKSwwIDFweCAycHggcmdiYSgwLDAs
MCwwLjA1KX0uYnRuLWdyb3VwPi5idG4tbWluaSsuZHJvcGRvd24tdG9nZ2xleypwYWRkaW5nLXRv
cDoycHg7cGFkZGluZy1yaWdodDo1cHg7KnBhZGRpbmctYm90dG9tOjJweDtwYWRkaW5nLWxlZnQ6
NXB4fS5idG4tZ3JvdXA+LmJ0bi1zbWFsbCsuZHJvcGRvd24tdG9nZ2xleypwYWRkaW5nLXRvcDo1
cHg7KnBhZGRpbmctYm90dG9tOjRweH0uYnRuLWdyb3VwPi5idG4tbGFyZ2UrLmRyb3Bkb3duLXRv
Z2dsZXsqcGFkZGluZy10b3A6N3B4O3BhZGRpbmctcmlnaHQ6MTJweDsqcGFkZGluZy1ib3R0b206
N3B4O3BhZGRpbmctbGVmdDoxMnB4fS5idG4tZ3JvdXAub3BlbiAuZHJvcGRvd24tdG9nZ2xle2Jh
Y2tncm91bmQtaW1hZ2U6bm9uZTstd2Via2l0LWJveC1zaGFkb3c6aW5zZXQgMCAycHggNHB4IHJn
YmEoMCwwLDAsMC4xNSksMCAxcHggMnB4IHJnYmEoMCwwLDAsMC4wNSk7LW1vei1ib3gtc2hhZG93
Omluc2V0IDAgMnB4IDRweCByZ2JhKDAsMCwwLDAuMTUpLDAgMXB4IDJweCByZ2JhKDAsMCwwLDAu
MDUpO2JveC1zaGFkb3c6aW5zZXQgMCAycHggNHB4IHJnYmEoMCwwLDAsMC4xNSksMCAxcHggMnB4
IHJnYmEoMCwwLDAsMC4wNSl9LmJ0bi1ncm91cC5vcGVuIC5idG4uZHJvcGRvd24tdG9nZ2xle2Jh
Y2tncm91bmQtY29sb3I6I2U2ZTZlNn0uYnRuLWdyb3VwLm9wZW4gLmJ0bi1wcmltYXJ5LmRyb3Bk
b3duLXRvZ2dsZXtiYWNrZ3JvdW5kLWNvbG9yOiMwNGN9LmJ0bi1ncm91cC5vcGVuIC5idG4td2Fy
bmluZy5kcm9wZG93bi10b2dnbGV7YmFja2dyb3VuZC1jb2xvcjojZjg5NDA2fS5idG4tZ3JvdXAu
b3BlbiAuYnRuLWRhbmdlci5kcm9wZG93bi10b2dnbGV7YmFja2dyb3VuZC1jb2xvcjojYmQzNjJm
fS5idG4tZ3JvdXAub3BlbiAuYnRuLXN1Y2Nlc3MuZHJvcGRvd24tdG9nZ2xle2JhY2tncm91bmQt
Y29sb3I6IzUxYTM1MX0uYnRuLWdyb3VwLm9wZW4gLmJ0bi1pbmZvLmRyb3Bkb3duLXRvZ2dsZXti
YWNrZ3JvdW5kLWNvbG9yOiMyZjk2YjR9LmJ0bi1ncm91cC5vcGVuIC5idG4taW52ZXJzZS5kcm9w
ZG93bi10b2dnbGV7YmFja2dyb3VuZC1jb2xvcjojMjIyfS5idG4gLmNhcmV0e21hcmdpbi10b3A6
OHB4O21hcmdpbi1sZWZ0OjB9LmJ0bi1taW5pIC5jYXJldCwuYnRuLXNtYWxsIC5jYXJldCwuYnRu
LWxhcmdlIC5jYXJldHttYXJnaW4tdG9wOjZweH0uYnRuLWxhcmdlIC5jYXJldHtib3JkZXItdG9w
LXdpZHRoOjVweDtib3JkZXItcmlnaHQtd2lkdGg6NXB4O2JvcmRlci1sZWZ0LXdpZHRoOjVweH0u
ZHJvcHVwIC5idG4tbGFyZ2UgLmNhcmV0e2JvcmRlci1ib3R0b20td2lkdGg6NXB4fS5idG4tcHJp
bWFyeSAuY2FyZXQsLmJ0bi13YXJuaW5nIC5jYXJldCwuYnRuLWRhbmdlciAuY2FyZXQsLmJ0bi1p
bmZvIC5jYXJldCwuYnRuLXN1Y2Nlc3MgLmNhcmV0LC5idG4taW52ZXJzZSAuY2FyZXR7Ym9yZGVy
LXRvcC1jb2xvcjojZmZmO2JvcmRlci1ib3R0b20tY29sb3I6I2ZmZn0uYnRuLWdyb3VwLXZlcnRp
Y2Fse2Rpc3BsYXk6aW5saW5lLWJsb2NrOypkaXNwbGF5OmlubGluZTsqem9vbToxfS5idG4tZ3Jv
dXAtdmVydGljYWw+LmJ0bntkaXNwbGF5OmJsb2NrO2Zsb2F0Om5vbmU7bWF4LXdpZHRoOjEwMCU7
LXdlYmtpdC1ib3JkZXItcmFkaXVzOjA7LW1vei1ib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXJhZGl1
czowfS5idG4tZ3JvdXAtdmVydGljYWw+LmJ0bisuYnRue21hcmdpbi10b3A6LTFweDttYXJnaW4t
bGVmdDowfS5idG4tZ3JvdXAtdmVydGljYWw+LmJ0bjpmaXJzdC1jaGlsZHstd2Via2l0LWJvcmRl
ci1yYWRpdXM6NHB4IDRweCAwIDA7LW1vei1ib3JkZXItcmFkaXVzOjRweCA0cHggMCAwO2JvcmRl
ci1yYWRpdXM6NHB4IDRweCAwIDB9LmJ0bi1ncm91cC12ZXJ0aWNhbD4uYnRuOmxhc3QtY2hpbGR7
LXdlYmtpdC1ib3JkZXItcmFkaXVzOjAgMCA0cHggNHB4Oy1tb3otYm9yZGVyLXJhZGl1czowIDAg
NHB4IDRweDtib3JkZXItcmFkaXVzOjAgMCA0cHggNHB4fS5idG4tZ3JvdXAtdmVydGljYWw+LmJ0
bi1sYXJnZTpmaXJzdC1jaGlsZHstd2Via2l0LWJvcmRlci1yYWRpdXM6NnB4IDZweCAwIDA7LW1v
ei1ib3JkZXItcmFkaXVzOjZweCA2cHggMCAwO2JvcmRlci1yYWRpdXM6NnB4IDZweCAwIDB9LmJ0
bi1ncm91cC12ZXJ0aWNhbD4uYnRuLWxhcmdlOmxhc3QtY2hpbGR7LXdlYmtpdC1ib3JkZXItcmFk
aXVzOjAgMCA2cHggNnB4Oy1tb3otYm9yZGVyLXJhZGl1czowIDAgNnB4IDZweDtib3JkZXItcmFk
aXVzOjAgMCA2cHggNnB4fS5hbGVydHtwYWRkaW5nOjhweCAzNXB4IDhweCAxNHB4O21hcmdpbi1i
b3R0b206MjBweDt0ZXh0LXNoYWRvdzowIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC41KTtiYWNr
Z3JvdW5kLWNvbG9yOiNmY2Y4ZTM7Ym9yZGVyOjFweCBzb2xpZCAjZmJlZWQ1Oy13ZWJraXQtYm9y
ZGVyLXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzOjRweDtib3JkZXItcmFkaXVzOjRweH0u
YWxlcnQsLmFsZXJ0IGg0e2NvbG9yOiNjMDk4NTN9LmFsZXJ0IGg0e21hcmdpbjowfS5hbGVydCAu
Y2xvc2V7cG9zaXRpb246cmVsYXRpdmU7dG9wOi0ycHg7cmlnaHQ6LTIxcHg7bGluZS1oZWlnaHQ6
MjBweH0uYWxlcnQtc3VjY2Vzc3tjb2xvcjojNDY4ODQ3O2JhY2tncm91bmQtY29sb3I6I2RmZjBk
ODtib3JkZXItY29sb3I6I2Q2ZTljNn0uYWxlcnQtc3VjY2VzcyBoNHtjb2xvcjojNDY4ODQ3fS5h
bGVydC1kYW5nZXIsLmFsZXJ0LWVycm9ye2NvbG9yOiNiOTRhNDg7YmFja2dyb3VuZC1jb2xvcjoj
ZjJkZWRlO2JvcmRlci1jb2xvcjojZWVkM2Q3fS5hbGVydC1kYW5nZXIgaDQsLmFsZXJ0LWVycm9y
IGg0e2NvbG9yOiNiOTRhNDh9LmFsZXJ0LWluZm97Y29sb3I6IzNhODdhZDtiYWNrZ3JvdW5kLWNv
bG9yOiNkOWVkZjc7Ym9yZGVyLWNvbG9yOiNiY2U4ZjF9LmFsZXJ0LWluZm8gaDR7Y29sb3I6IzNh
ODdhZH0uYWxlcnQtYmxvY2t7cGFkZGluZy10b3A6MTRweDtwYWRkaW5nLWJvdHRvbToxNHB4fS5h
bGVydC1ibG9jaz5wLC5hbGVydC1ibG9jaz51bHttYXJnaW4tYm90dG9tOjB9LmFsZXJ0LWJsb2Nr
IHArcHttYXJnaW4tdG9wOjVweH0ubmF2e21hcmdpbi1ib3R0b206MjBweDttYXJnaW4tbGVmdDow
O2xpc3Qtc3R5bGU6bm9uZX0ubmF2PmxpPmF7ZGlzcGxheTpibG9ja30ubmF2PmxpPmE6aG92ZXJ7
dGV4dC1kZWNvcmF0aW9uOm5vbmU7YmFja2dyb3VuZC1jb2xvcjojZWVlfS5uYXY+bGk+YT5pbWd7
bWF4LXdpZHRoOm5vbmV9Lm5hdj4ucHVsbC1yaWdodHtmbG9hdDpyaWdodH0ubmF2LWhlYWRlcntk
aXNwbGF5OmJsb2NrO3BhZGRpbmc6M3B4IDE1cHg7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6
Ym9sZDtsaW5lLWhlaWdodDoyMHB4O2NvbG9yOiM5OTk7dGV4dC1zaGFkb3c6MCAxcHggMCByZ2Jh
KDI1NSwyNTUsMjU1LDAuNSk7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlfS5uYXYgbGkrLm5hdi1o
ZWFkZXJ7bWFyZ2luLXRvcDo5cHh9Lm5hdi1saXN0e3BhZGRpbmctcmlnaHQ6MTVweDtwYWRkaW5n
LWxlZnQ6MTVweDttYXJnaW4tYm90dG9tOjB9Lm5hdi1saXN0PmxpPmEsLm5hdi1saXN0IC5uYXYt
aGVhZGVye21hcmdpbi1yaWdodDotMTVweDttYXJnaW4tbGVmdDotMTVweDt0ZXh0LXNoYWRvdzow
IDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC41KX0ubmF2LWxpc3Q+bGk+YXtwYWRkaW5nOjNweCAx
NXB4fS5uYXYtbGlzdD4uYWN0aXZlPmEsLm5hdi1saXN0Pi5hY3RpdmU+YTpob3Zlcntjb2xvcjoj
ZmZmO3RleHQtc2hhZG93OjAgLTFweCAwIHJnYmEoMCwwLDAsMC4yKTtiYWNrZ3JvdW5kLWNvbG9y
OiMwOGN9Lm5hdi1saXN0IFtjbGFzc149Imljb24tIl0sLm5hdi1saXN0IFtjbGFzcyo9IiBpY29u
LSJde21hcmdpbi1yaWdodDoycHh9Lm5hdi1saXN0IC5kaXZpZGVyeyp3aWR0aDoxMDAlO2hlaWdo
dDoxcHg7bWFyZ2luOjlweCAxcHg7Km1hcmdpbjotNXB4IDAgNXB4O292ZXJmbG93OmhpZGRlbjti
YWNrZ3JvdW5kLWNvbG9yOiNlNWU1ZTU7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2ZmZn0ubmF2
LXRhYnMsLm5hdi1waWxsc3sqem9vbToxfS5uYXYtdGFiczpiZWZvcmUsLm5hdi1waWxsczpiZWZv
cmUsLm5hdi10YWJzOmFmdGVyLC5uYXYtcGlsbHM6YWZ0ZXJ7ZGlzcGxheTp0YWJsZTtsaW5lLWhl
aWdodDowO2NvbnRlbnQ6IiJ9Lm5hdi10YWJzOmFmdGVyLC5uYXYtcGlsbHM6YWZ0ZXJ7Y2xlYXI6
Ym90aH0ubmF2LXRhYnM+bGksLm5hdi1waWxscz5saXtmbG9hdDpsZWZ0fS5uYXYtdGFicz5saT5h
LC5uYXYtcGlsbHM+bGk+YXtwYWRkaW5nLXJpZ2h0OjEycHg7cGFkZGluZy1sZWZ0OjEycHg7bWFy
Z2luLXJpZ2h0OjJweDtsaW5lLWhlaWdodDoxNHB4fS5uYXYtdGFic3tib3JkZXItYm90dG9tOjFw
eCBzb2xpZCAjZGRkfS5uYXYtdGFicz5saXttYXJnaW4tYm90dG9tOi0xcHh9Lm5hdi10YWJzPmxp
PmF7cGFkZGluZy10b3A6OHB4O3BhZGRpbmctYm90dG9tOjhweDtsaW5lLWhlaWdodDoyMHB4O2Jv
cmRlcjoxcHggc29saWQgdHJhbnNwYXJlbnQ7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweCA0cHgg
MCAwOy1tb3otYm9yZGVyLXJhZGl1czo0cHggNHB4IDAgMDtib3JkZXItcmFkaXVzOjRweCA0cHgg
MCAwfS5uYXYtdGFicz5saT5hOmhvdmVye2JvcmRlci1jb2xvcjojZWVlICNlZWUgI2RkZH0ubmF2
LXRhYnM+LmFjdGl2ZT5hLC5uYXYtdGFicz4uYWN0aXZlPmE6aG92ZXJ7Y29sb3I6IzU1NTtjdXJz
b3I6ZGVmYXVsdDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjZGRkO2Jv
cmRlci1ib3R0b20tY29sb3I6dHJhbnNwYXJlbnR9Lm5hdi1waWxscz5saT5he3BhZGRpbmctdG9w
OjhweDtwYWRkaW5nLWJvdHRvbTo4cHg7bWFyZ2luLXRvcDoycHg7bWFyZ2luLWJvdHRvbToycHg7
LXdlYmtpdC1ib3JkZXItcmFkaXVzOjVweDstbW96LWJvcmRlci1yYWRpdXM6NXB4O2JvcmRlci1y
YWRpdXM6NXB4fS5uYXYtcGlsbHM+LmFjdGl2ZT5hLC5uYXYtcGlsbHM+LmFjdGl2ZT5hOmhvdmVy
e2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojMDhjfS5uYXYtc3RhY2tlZD5saXtmbG9hdDpu
b25lfS5uYXYtc3RhY2tlZD5saT5he21hcmdpbi1yaWdodDowfS5uYXYtdGFicy5uYXYtc3RhY2tl
ZHtib3JkZXItYm90dG9tOjB9Lm5hdi10YWJzLm5hdi1zdGFja2VkPmxpPmF7Ym9yZGVyOjFweCBz
b2xpZCAjZGRkOy13ZWJraXQtYm9yZGVyLXJhZGl1czowOy1tb3otYm9yZGVyLXJhZGl1czowO2Jv
cmRlci1yYWRpdXM6MH0ubmF2LXRhYnMubmF2LXN0YWNrZWQ+bGk6Zmlyc3QtY2hpbGQ+YXstd2Vi
a2l0LWJvcmRlci10b3AtcmlnaHQtcmFkaXVzOjRweDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czo0
cHg7LXdlYmtpdC1ib3JkZXItdG9wLWxlZnQtcmFkaXVzOjRweDtib3JkZXItdG9wLWxlZnQtcmFk
aXVzOjRweDstbW96LWJvcmRlci1yYWRpdXMtdG9wcmlnaHQ6NHB4Oy1tb3otYm9yZGVyLXJhZGl1
cy10b3BsZWZ0OjRweH0ubmF2LXRhYnMubmF2LXN0YWNrZWQ+bGk6bGFzdC1jaGlsZD5hey13ZWJr
aXQtYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6NHB4O2JvcmRlci1ib3R0b20tcmlnaHQtcmFk
aXVzOjRweDstd2Via2l0LWJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6NHB4O2JvcmRlci1ib3R0
b20tbGVmdC1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21yaWdodDo0cHg7LW1v
ei1ib3JkZXItcmFkaXVzLWJvdHRvbWxlZnQ6NHB4fS5uYXYtdGFicy5uYXYtc3RhY2tlZD5saT5h
OmhvdmVye3otaW5kZXg6Mjtib3JkZXItY29sb3I6I2RkZH0ubmF2LXBpbGxzLm5hdi1zdGFja2Vk
PmxpPmF7bWFyZ2luLWJvdHRvbTozcHh9Lm5hdi1waWxscy5uYXYtc3RhY2tlZD5saTpsYXN0LWNo
aWxkPmF7bWFyZ2luLWJvdHRvbToxcHh9Lm5hdi10YWJzIC5kcm9wZG93bi1tZW51ey13ZWJraXQt
Ym9yZGVyLXJhZGl1czowIDAgNnB4IDZweDstbW96LWJvcmRlci1yYWRpdXM6MCAwIDZweCA2cHg7
Ym9yZGVyLXJhZGl1czowIDAgNnB4IDZweH0ubmF2LXBpbGxzIC5kcm9wZG93bi1tZW51ey13ZWJr
aXQtYm9yZGVyLXJhZGl1czo2cHg7LW1vei1ib3JkZXItcmFkaXVzOjZweDtib3JkZXItcmFkaXVz
OjZweH0ubmF2IC5kcm9wZG93bi10b2dnbGUgLmNhcmV0e21hcmdpbi10b3A6NnB4O2JvcmRlci10
b3AtY29sb3I6IzA4Yztib3JkZXItYm90dG9tLWNvbG9yOiMwOGN9Lm5hdiAuZHJvcGRvd24tdG9n
Z2xlOmhvdmVyIC5jYXJldHtib3JkZXItdG9wLWNvbG9yOiMwMDU1ODA7Ym9yZGVyLWJvdHRvbS1j
b2xvcjojMDA1NTgwfS5uYXYtdGFicyAuZHJvcGRvd24tdG9nZ2xlIC5jYXJldHttYXJnaW4tdG9w
OjhweH0ubmF2IC5hY3RpdmUgLmRyb3Bkb3duLXRvZ2dsZSAuY2FyZXR7Ym9yZGVyLXRvcC1jb2xv
cjojZmZmO2JvcmRlci1ib3R0b20tY29sb3I6I2ZmZn0ubmF2LXRhYnMgLmFjdGl2ZSAuZHJvcGRv
d24tdG9nZ2xlIC5jYXJldHtib3JkZXItdG9wLWNvbG9yOiM1NTU7Ym9yZGVyLWJvdHRvbS1jb2xv
cjojNTU1fS5uYXY+LmRyb3Bkb3duLmFjdGl2ZT5hOmhvdmVye2N1cnNvcjpwb2ludGVyfS5uYXYt
dGFicyAub3BlbiAuZHJvcGRvd24tdG9nZ2xlLC5uYXYtcGlsbHMgLm9wZW4gLmRyb3Bkb3duLXRv
Z2dsZSwubmF2PmxpLmRyb3Bkb3duLm9wZW4uYWN0aXZlPmE6aG92ZXJ7Y29sb3I6I2ZmZjtiYWNr
Z3JvdW5kLWNvbG9yOiM5OTk7Ym9yZGVyLWNvbG9yOiM5OTl9Lm5hdiBsaS5kcm9wZG93bi5vcGVu
IC5jYXJldCwubmF2IGxpLmRyb3Bkb3duLm9wZW4uYWN0aXZlIC5jYXJldCwubmF2IGxpLmRyb3Bk
b3duLm9wZW4gYTpob3ZlciAuY2FyZXR7Ym9yZGVyLXRvcC1jb2xvcjojZmZmO2JvcmRlci1ib3R0
b20tY29sb3I6I2ZmZjtvcGFjaXR5OjE7ZmlsdGVyOmFscGhhKG9wYWNpdHk9MTAwKX0udGFicy1z
dGFja2VkIC5vcGVuPmE6aG92ZXJ7Ym9yZGVyLWNvbG9yOiM5OTl9LnRhYmJhYmxleyp6b29tOjF9
LnRhYmJhYmxlOmJlZm9yZSwudGFiYmFibGU6YWZ0ZXJ7ZGlzcGxheTp0YWJsZTtsaW5lLWhlaWdo
dDowO2NvbnRlbnQ6IiJ9LnRhYmJhYmxlOmFmdGVye2NsZWFyOmJvdGh9LnRhYi1jb250ZW50e292
ZXJmbG93OmF1dG99LnRhYnMtYmVsb3c+Lm5hdi10YWJzLC50YWJzLXJpZ2h0Pi5uYXYtdGFicywu
dGFicy1sZWZ0Pi5uYXYtdGFic3tib3JkZXItYm90dG9tOjB9LnRhYi1jb250ZW50Pi50YWItcGFu
ZSwucGlsbC1jb250ZW50Pi5waWxsLXBhbmV7ZGlzcGxheTpub25lfS50YWItY29udGVudD4uYWN0
aXZlLC5waWxsLWNvbnRlbnQ+LmFjdGl2ZXtkaXNwbGF5OmJsb2NrfS50YWJzLWJlbG93Pi5uYXYt
dGFic3tib3JkZXItdG9wOjFweCBzb2xpZCAjZGRkfS50YWJzLWJlbG93Pi5uYXYtdGFicz5saXtt
YXJnaW4tdG9wOi0xcHg7bWFyZ2luLWJvdHRvbTowfS50YWJzLWJlbG93Pi5uYXYtdGFicz5saT5h
ey13ZWJraXQtYm9yZGVyLXJhZGl1czowIDAgNHB4IDRweDstbW96LWJvcmRlci1yYWRpdXM6MCAw
IDRweCA0cHg7Ym9yZGVyLXJhZGl1czowIDAgNHB4IDRweH0udGFicy1iZWxvdz4ubmF2LXRhYnM+
bGk+YTpob3Zlcntib3JkZXItdG9wLWNvbG9yOiNkZGQ7Ym9yZGVyLWJvdHRvbS1jb2xvcjp0cmFu
c3BhcmVudH0udGFicy1iZWxvdz4ubmF2LXRhYnM+LmFjdGl2ZT5hLC50YWJzLWJlbG93Pi5uYXYt
dGFicz4uYWN0aXZlPmE6aG92ZXJ7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50ICNkZGQgI2RkZCAj
ZGRkfS50YWJzLWxlZnQ+Lm5hdi10YWJzPmxpLC50YWJzLXJpZ2h0Pi5uYXYtdGFicz5saXtmbG9h
dDpub25lfS50YWJzLWxlZnQ+Lm5hdi10YWJzPmxpPmEsLnRhYnMtcmlnaHQ+Lm5hdi10YWJzPmxp
PmF7bWluLXdpZHRoOjc0cHg7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLWJvdHRvbTozcHh9LnRhYnMt
bGVmdD4ubmF2LXRhYnN7ZmxvYXQ6bGVmdDttYXJnaW4tcmlnaHQ6MTlweDtib3JkZXItcmlnaHQ6
MXB4IHNvbGlkICNkZGR9LnRhYnMtbGVmdD4ubmF2LXRhYnM+bGk+YXttYXJnaW4tcmlnaHQ6LTFw
eDstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4IDAgMCA0cHg7LW1vei1ib3JkZXItcmFkaXVzOjRw
eCAwIDAgNHB4O2JvcmRlci1yYWRpdXM6NHB4IDAgMCA0cHh9LnRhYnMtbGVmdD4ubmF2LXRhYnM+
bGk+YTpob3Zlcntib3JkZXItY29sb3I6I2VlZSAjZGRkICNlZWUgI2VlZX0udGFicy1sZWZ0Pi5u
YXYtdGFicyAuYWN0aXZlPmEsLnRhYnMtbGVmdD4ubmF2LXRhYnMgLmFjdGl2ZT5hOmhvdmVye2Jv
cmRlci1jb2xvcjojZGRkIHRyYW5zcGFyZW50ICNkZGQgI2RkZDsqYm9yZGVyLXJpZ2h0LWNvbG9y
OiNmZmZ9LnRhYnMtcmlnaHQ+Lm5hdi10YWJze2Zsb2F0OnJpZ2h0O21hcmdpbi1sZWZ0OjE5cHg7
Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICNkZGR9LnRhYnMtcmlnaHQ+Lm5hdi10YWJzPmxpPmF7bWFy
Z2luLWxlZnQ6LTFweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MCA0cHggNHB4IDA7LW1vei1ib3Jk
ZXItcmFkaXVzOjAgNHB4IDRweCAwO2JvcmRlci1yYWRpdXM6MCA0cHggNHB4IDB9LnRhYnMtcmln
aHQ+Lm5hdi10YWJzPmxpPmE6aG92ZXJ7Ym9yZGVyLWNvbG9yOiNlZWUgI2VlZSAjZWVlICNkZGR9
LnRhYnMtcmlnaHQ+Lm5hdi10YWJzIC5hY3RpdmU+YSwudGFicy1yaWdodD4ubmF2LXRhYnMgLmFj
dGl2ZT5hOmhvdmVye2JvcmRlci1jb2xvcjojZGRkICNkZGQgI2RkZCB0cmFuc3BhcmVudDsqYm9y
ZGVyLWxlZnQtY29sb3I6I2ZmZn0ubmF2Pi5kaXNhYmxlZD5he2NvbG9yOiM5OTl9Lm5hdj4uZGlz
YWJsZWQ+YTpob3Zlcnt0ZXh0LWRlY29yYXRpb246bm9uZTtjdXJzb3I6ZGVmYXVsdDtiYWNrZ3Jv
dW5kLWNvbG9yOnRyYW5zcGFyZW50fS5uYXZiYXJ7KnBvc2l0aW9uOnJlbGF0aXZlOyp6LWluZGV4
OjI7bWFyZ2luLWJvdHRvbToyMHB4O292ZXJmbG93OnZpc2libGV9Lm5hdmJhci1pbm5lcnttaW4t
aGVpZ2h0OjQwcHg7cGFkZGluZy1yaWdodDoyMHB4O3BhZGRpbmctbGVmdDoyMHB4O2JhY2tncm91
bmQtY29sb3I6I2ZhZmFmYTtiYWNrZ3JvdW5kLWltYWdlOi1tb3otbGluZWFyLWdyYWRpZW50KHRv
cCwjZmZmLCNmMmYyZjIpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIs
MCAwLDAgMTAwJSxmcm9tKCNmZmYpLHRvKCNmMmYyZjIpKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJr
aXQtbGluZWFyLWdyYWRpZW50KHRvcCwjZmZmLCNmMmYyZjIpO2JhY2tncm91bmQtaW1hZ2U6LW8t
bGluZWFyLWdyYWRpZW50KHRvcCwjZmZmLCNmMmYyZjIpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFy
LWdyYWRpZW50KHRvIGJvdHRvbSwjZmZmLCNmMmYyZjIpO2JhY2tncm91bmQtcmVwZWF0OnJlcGVh
dC14O2JvcmRlcjoxcHggc29saWQgI2Q0ZDRkNDstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4Oy1t
b3otYm9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyLXJhZGl1czo0cHg7ZmlsdGVyOnByb2dpZDpEWElt
YWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmZmZmZmZmYn
LGVuZENvbG9yc3RyPScjZmZmMmYyZjInLEdyYWRpZW50VHlwZT0wKTsqem9vbToxOy13ZWJraXQt
Ym94LXNoYWRvdzowIDFweCA0cHggcmdiYSgwLDAsMCwwLjA2NSk7LW1vei1ib3gtc2hhZG93OjAg
MXB4IDRweCByZ2JhKDAsMCwwLDAuMDY1KTtib3gtc2hhZG93OjAgMXB4IDRweCByZ2JhKDAsMCww
LDAuMDY1KX0ubmF2YmFyLWlubmVyOmJlZm9yZSwubmF2YmFyLWlubmVyOmFmdGVye2Rpc3BsYXk6
dGFibGU7bGluZS1oZWlnaHQ6MDtjb250ZW50OiIifS5uYXZiYXItaW5uZXI6YWZ0ZXJ7Y2xlYXI6
Ym90aH0ubmF2YmFyIC5jb250YWluZXJ7d2lkdGg6YXV0b30ubmF2LWNvbGxhcHNlLmNvbGxhcHNl
e2hlaWdodDphdXRvO292ZXJmbG93OnZpc2libGV9Lm5hdmJhciAuYnJhbmR7ZGlzcGxheTpibG9j
aztmbG9hdDpsZWZ0O3BhZGRpbmc6MTBweCAyMHB4IDEwcHg7bWFyZ2luLWxlZnQ6LTIwcHg7Zm9u
dC1zaXplOjIwcHg7Zm9udC13ZWlnaHQ6MjAwO2NvbG9yOiM3Nzc7dGV4dC1zaGFkb3c6MCAxcHgg
MCAjZmZmfS5uYXZiYXIgLmJyYW5kOmhvdmVye3RleHQtZGVjb3JhdGlvbjpub25lfS5uYXZiYXIt
dGV4dHttYXJnaW4tYm90dG9tOjA7bGluZS1oZWlnaHQ6NDBweDtjb2xvcjojNzc3fS5uYXZiYXIt
bGlua3tjb2xvcjojNzc3fS5uYXZiYXItbGluazpob3Zlcntjb2xvcjojMzMzfS5uYXZiYXIgLmRp
dmlkZXItdmVydGljYWx7aGVpZ2h0OjQwcHg7bWFyZ2luOjAgOXB4O2JvcmRlci1yaWdodDoxcHgg
c29saWQgI2ZmZjtib3JkZXItbGVmdDoxcHggc29saWQgI2YyZjJmMn0ubmF2YmFyIC5idG4sLm5h
dmJhciAuYnRuLWdyb3Vwe21hcmdpbi10b3A6NXB4fS5uYXZiYXIgLmJ0bi1ncm91cCAuYnRuLC5u
YXZiYXIgLmlucHV0LXByZXBlbmQgLmJ0biwubmF2YmFyIC5pbnB1dC1hcHBlbmQgLmJ0bnttYXJn
aW4tdG9wOjB9Lm5hdmJhci1mb3Jte21hcmdpbi1ib3R0b206MDsqem9vbToxfS5uYXZiYXItZm9y
bTpiZWZvcmUsLm5hdmJhci1mb3JtOmFmdGVye2Rpc3BsYXk6dGFibGU7bGluZS1oZWlnaHQ6MDtj
b250ZW50OiIifS5uYXZiYXItZm9ybTphZnRlcntjbGVhcjpib3RofS5uYXZiYXItZm9ybSBpbnB1
dCwubmF2YmFyLWZvcm0gc2VsZWN0LC5uYXZiYXItZm9ybSAucmFkaW8sLm5hdmJhci1mb3JtIC5j
aGVja2JveHttYXJnaW4tdG9wOjVweH0ubmF2YmFyLWZvcm0gaW5wdXQsLm5hdmJhci1mb3JtIHNl
bGVjdCwubmF2YmFyLWZvcm0gLmJ0bntkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tYm90dG9t
OjB9Lm5hdmJhci1mb3JtIGlucHV0W3R5cGU9ImltYWdlIl0sLm5hdmJhci1mb3JtIGlucHV0W3R5
cGU9ImNoZWNrYm94Il0sLm5hdmJhci1mb3JtIGlucHV0W3R5cGU9InJhZGlvIl17bWFyZ2luLXRv
cDozcHh9Lm5hdmJhci1mb3JtIC5pbnB1dC1hcHBlbmQsLm5hdmJhci1mb3JtIC5pbnB1dC1wcmVw
ZW5ke21hcmdpbi10b3A6NXB4O3doaXRlLXNwYWNlOm5vd3JhcH0ubmF2YmFyLWZvcm0gLmlucHV0
LWFwcGVuZCBpbnB1dCwubmF2YmFyLWZvcm0gLmlucHV0LXByZXBlbmQgaW5wdXR7bWFyZ2luLXRv
cDowfS5uYXZiYXItc2VhcmNoe3Bvc2l0aW9uOnJlbGF0aXZlO2Zsb2F0OmxlZnQ7bWFyZ2luLXRv
cDo1cHg7bWFyZ2luLWJvdHRvbTowfS5uYXZiYXItc2VhcmNoIC5zZWFyY2gtcXVlcnl7cGFkZGlu
Zzo0cHggMTRweDttYXJnaW4tYm90dG9tOjA7Zm9udC1mYW1pbHk6IkhlbHZldGljYSBOZXVlIixI
ZWx2ZXRpY2EsQXJpYWwsc2Fucy1zZXJpZjtmb250LXNpemU6MTNweDtmb250LXdlaWdodDpub3Jt
YWw7bGluZS1oZWlnaHQ6MTstd2Via2l0LWJvcmRlci1yYWRpdXM6MTVweDstbW96LWJvcmRlci1y
YWRpdXM6MTVweDtib3JkZXItcmFkaXVzOjE1cHh9Lm5hdmJhci1zdGF0aWMtdG9we3Bvc2l0aW9u
OnN0YXRpYzttYXJnaW4tYm90dG9tOjB9Lm5hdmJhci1zdGF0aWMtdG9wIC5uYXZiYXItaW5uZXJ7
LXdlYmtpdC1ib3JkZXItcmFkaXVzOjA7LW1vei1ib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXJhZGl1
czowfS5uYXZiYXItZml4ZWQtdG9wLC5uYXZiYXItZml4ZWQtYm90dG9te3Bvc2l0aW9uOmZpeGVk
O3JpZ2h0OjA7bGVmdDowO3otaW5kZXg6MTAzMDttYXJnaW4tYm90dG9tOjB9Lm5hdmJhci1maXhl
ZC10b3AgLm5hdmJhci1pbm5lciwubmF2YmFyLXN0YXRpYy10b3AgLm5hdmJhci1pbm5lcntib3Jk
ZXItd2lkdGg6MCAwIDFweH0ubmF2YmFyLWZpeGVkLWJvdHRvbSAubmF2YmFyLWlubmVye2JvcmRl
ci13aWR0aDoxcHggMCAwfS5uYXZiYXItZml4ZWQtdG9wIC5uYXZiYXItaW5uZXIsLm5hdmJhci1m
aXhlZC1ib3R0b20gLm5hdmJhci1pbm5lcntwYWRkaW5nLXJpZ2h0OjA7cGFkZGluZy1sZWZ0OjA7
LXdlYmtpdC1ib3JkZXItcmFkaXVzOjA7LW1vei1ib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXJhZGl1
czowfS5uYXZiYXItc3RhdGljLXRvcCAuY29udGFpbmVyLC5uYXZiYXItZml4ZWQtdG9wIC5jb250
YWluZXIsLm5hdmJhci1maXhlZC1ib3R0b20gLmNvbnRhaW5lcnt3aWR0aDo5NDBweH0ubmF2YmFy
LWZpeGVkLXRvcHt0b3A6MH0ubmF2YmFyLWZpeGVkLXRvcCAubmF2YmFyLWlubmVyLC5uYXZiYXIt
c3RhdGljLXRvcCAubmF2YmFyLWlubmVyey13ZWJraXQtYm94LXNoYWRvdzowIDFweCAxMHB4IHJn
YmEoMCwwLDAsMC4xKTstbW96LWJveC1zaGFkb3c6MCAxcHggMTBweCByZ2JhKDAsMCwwLDAuMSk7
Ym94LXNoYWRvdzowIDFweCAxMHB4IHJnYmEoMCwwLDAsMC4xKX0ubmF2YmFyLWZpeGVkLWJvdHRv
bXtib3R0b206MH0ubmF2YmFyLWZpeGVkLWJvdHRvbSAubmF2YmFyLWlubmVyey13ZWJraXQtYm94
LXNoYWRvdzowIC0xcHggMTBweCByZ2JhKDAsMCwwLDAuMSk7LW1vei1ib3gtc2hhZG93OjAgLTFw
eCAxMHB4IHJnYmEoMCwwLDAsMC4xKTtib3gtc2hhZG93OjAgLTFweCAxMHB4IHJnYmEoMCwwLDAs
MC4xKX0ubmF2YmFyIC5uYXZ7cG9zaXRpb246cmVsYXRpdmU7bGVmdDowO2Rpc3BsYXk6YmxvY2s7
ZmxvYXQ6bGVmdDttYXJnaW46MCAxMHB4IDAgMH0ubmF2YmFyIC5uYXYucHVsbC1yaWdodHtmbG9h
dDpyaWdodDttYXJnaW4tcmlnaHQ6MH0ubmF2YmFyIC5uYXY+bGl7ZmxvYXQ6bGVmdH0ubmF2YmFy
IC5uYXY+bGk+YXtmbG9hdDpub25lO3BhZGRpbmc6MTBweCAxNXB4IDEwcHg7Y29sb3I6Izc3Nzt0
ZXh0LWRlY29yYXRpb246bm9uZTt0ZXh0LXNoYWRvdzowIDFweCAwICNmZmZ9Lm5hdmJhciAubmF2
IC5kcm9wZG93bi10b2dnbGUgLmNhcmV0e21hcmdpbi10b3A6OHB4fS5uYXZiYXIgLm5hdj5saT5h
OmZvY3VzLC5uYXZiYXIgLm5hdj5saT5hOmhvdmVye2NvbG9yOiMzMzM7dGV4dC1kZWNvcmF0aW9u
Om5vbmU7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0ubmF2YmFyIC5uYXY+LmFjdGl2ZT5h
LC5uYXZiYXIgLm5hdj4uYWN0aXZlPmE6aG92ZXIsLm5hdmJhciAubmF2Pi5hY3RpdmU+YTpmb2N1
c3tjb2xvcjojNTU1O3RleHQtZGVjb3JhdGlvbjpub25lO2JhY2tncm91bmQtY29sb3I6I2U1ZTVl
NTstd2Via2l0LWJveC1zaGFkb3c6aW5zZXQgMCAzcHggOHB4IHJnYmEoMCwwLDAsMC4xMjUpOy1t
b3otYm94LXNoYWRvdzppbnNldCAwIDNweCA4cHggcmdiYSgwLDAsMCwwLjEyNSk7Ym94LXNoYWRv
dzppbnNldCAwIDNweCA4cHggcmdiYSgwLDAsMCwwLjEyNSl9Lm5hdmJhciAuYnRuLW5hdmJhcntk
aXNwbGF5Om5vbmU7ZmxvYXQ6cmlnaHQ7cGFkZGluZzo3cHggMTBweDttYXJnaW4tcmlnaHQ6NXB4
O21hcmdpbi1sZWZ0OjVweDtjb2xvcjojZmZmO3RleHQtc2hhZG93OjAgLTFweCAwIHJnYmEoMCww
LDAsMC4yNSk7YmFja2dyb3VuZC1jb2xvcjojZWRlZGVkOypiYWNrZ3JvdW5kLWNvbG9yOiNlNWU1
ZTU7YmFja2dyb3VuZC1pbWFnZTotbW96LWxpbmVhci1ncmFkaWVudCh0b3AsI2YyZjJmMiwjZTVl
NWU1KTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtZ3JhZGllbnQobGluZWFyLDAgMCwwIDEwMCUs
ZnJvbSgjZjJmMmYyKSx0bygjZTVlNWU1KSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWxpbmVh
ci1ncmFkaWVudCh0b3AsI2YyZjJmMiwjZTVlNWU1KTtiYWNrZ3JvdW5kLWltYWdlOi1vLWxpbmVh
ci1ncmFkaWVudCh0b3AsI2YyZjJmMiwjZTVlNWU1KTtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1n
cmFkaWVudCh0byBib3R0b20sI2YyZjJmMiwjZTVlNWU1KTtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBl
YXQteDtib3JkZXItY29sb3I6I2U1ZTVlNSAjZTVlNWU1ICNiZmJmYmY7Ym9yZGVyLWNvbG9yOnJn
YmEoMCwwLDAsMC4xKSByZ2JhKDAsMCwwLDAuMSkgcmdiYSgwLDAsMCwwLjI1KTtmaWx0ZXI6cHJv
Z2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyNm
ZmYyZjJmMicsZW5kQ29sb3JzdHI9JyNmZmU1ZTVlNScsR3JhZGllbnRUeXBlPTApO2ZpbHRlcjpw
cm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoZW5hYmxlZD1mYWxzZSk7
LXdlYmtpdC1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDAgcmdiYSgyNTUsMjU1LDI1NSwwLjEpLDAg
MXB4IDAgcmdiYSgyNTUsMjU1LDI1NSwwLjA3NSk7LW1vei1ib3gtc2hhZG93Omluc2V0IDAgMXB4
IDAgcmdiYSgyNTUsMjU1LDI1NSwwLjEpLDAgMXB4IDAgcmdiYSgyNTUsMjU1LDI1NSwwLjA3NSk7
Ym94LXNoYWRvdzppbnNldCAwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4xKSwwIDFweCAwIHJn
YmEoMjU1LDI1NSwyNTUsMC4wNzUpfS5uYXZiYXIgLmJ0bi1uYXZiYXI6aG92ZXIsLm5hdmJhciAu
YnRuLW5hdmJhcjphY3RpdmUsLm5hdmJhciAuYnRuLW5hdmJhci5hY3RpdmUsLm5hdmJhciAuYnRu
LW5hdmJhci5kaXNhYmxlZCwubmF2YmFyIC5idG4tbmF2YmFyW2Rpc2FibGVkXXtjb2xvcjojZmZm
O2JhY2tncm91bmQtY29sb3I6I2U1ZTVlNTsqYmFja2dyb3VuZC1jb2xvcjojZDlkOWQ5fS5uYXZi
YXIgLmJ0bi1uYXZiYXI6YWN0aXZlLC5uYXZiYXIgLmJ0bi1uYXZiYXIuYWN0aXZle2JhY2tncm91
bmQtY29sb3I6I2NjYyBcOX0ubmF2YmFyIC5idG4tbmF2YmFyIC5pY29uLWJhcntkaXNwbGF5OmJs
b2NrO3dpZHRoOjE4cHg7aGVpZ2h0OjJweDtiYWNrZ3JvdW5kLWNvbG9yOiNmNWY1ZjU7LXdlYmtp
dC1ib3JkZXItcmFkaXVzOjFweDstbW96LWJvcmRlci1yYWRpdXM6MXB4O2JvcmRlci1yYWRpdXM6
MXB4Oy13ZWJraXQtYm94LXNoYWRvdzowIDFweCAwIHJnYmEoMCwwLDAsMC4yNSk7LW1vei1ib3gt
c2hhZG93OjAgMXB4IDAgcmdiYSgwLDAsMCwwLjI1KTtib3gtc2hhZG93OjAgMXB4IDAgcmdiYSgw
LDAsMCwwLjI1KX0uYnRuLW5hdmJhciAuaWNvbi1iYXIrLmljb24tYmFye21hcmdpbi10b3A6M3B4
fS5uYXZiYXIgLm5hdj5saT4uZHJvcGRvd24tbWVudTpiZWZvcmV7cG9zaXRpb246YWJzb2x1dGU7
dG9wOi03cHg7bGVmdDo5cHg7ZGlzcGxheTppbmxpbmUtYmxvY2s7Ym9yZGVyLXJpZ2h0OjdweCBz
b2xpZCB0cmFuc3BhcmVudDtib3JkZXItYm90dG9tOjdweCBzb2xpZCAjY2NjO2JvcmRlci1sZWZ0
OjdweCBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItYm90dG9tLWNvbG9yOnJnYmEoMCwwLDAsMC4y
KTtjb250ZW50OicnfS5uYXZiYXIgLm5hdj5saT4uZHJvcGRvd24tbWVudTphZnRlcntwb3NpdGlv
bjphYnNvbHV0ZTt0b3A6LTZweDtsZWZ0OjEwcHg7ZGlzcGxheTppbmxpbmUtYmxvY2s7Ym9yZGVy
LXJpZ2h0OjZweCBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItYm90dG9tOjZweCBzb2xpZCAjZmZm
O2JvcmRlci1sZWZ0OjZweCBzb2xpZCB0cmFuc3BhcmVudDtjb250ZW50OicnfS5uYXZiYXItZml4
ZWQtYm90dG9tIC5uYXY+bGk+LmRyb3Bkb3duLW1lbnU6YmVmb3Jle3RvcDphdXRvO2JvdHRvbTot
N3B4O2JvcmRlci10b3A6N3B4IHNvbGlkICNjY2M7Ym9yZGVyLWJvdHRvbTowO2JvcmRlci10b3At
Y29sb3I6cmdiYSgwLDAsMCwwLjIpfS5uYXZiYXItZml4ZWQtYm90dG9tIC5uYXY+bGk+LmRyb3Bk
b3duLW1lbnU6YWZ0ZXJ7dG9wOmF1dG87Ym90dG9tOi02cHg7Ym9yZGVyLXRvcDo2cHggc29saWQg
I2ZmZjtib3JkZXItYm90dG9tOjB9Lm5hdmJhciAubmF2IGxpLmRyb3Bkb3duPmE6aG92ZXIgLmNh
cmV0e2JvcmRlci10b3AtY29sb3I6IzU1NTtib3JkZXItYm90dG9tLWNvbG9yOiM1NTV9Lm5hdmJh
ciAubmF2IGxpLmRyb3Bkb3duLm9wZW4+LmRyb3Bkb3duLXRvZ2dsZSwubmF2YmFyIC5uYXYgbGku
ZHJvcGRvd24uYWN0aXZlPi5kcm9wZG93bi10b2dnbGUsLm5hdmJhciAubmF2IGxpLmRyb3Bkb3du
Lm9wZW4uYWN0aXZlPi5kcm9wZG93bi10b2dnbGV7Y29sb3I6IzU1NTtiYWNrZ3JvdW5kLWNvbG9y
OiNlNWU1ZTV9Lm5hdmJhciAubmF2IGxpLmRyb3Bkb3duPi5kcm9wZG93bi10b2dnbGUgLmNhcmV0
e2JvcmRlci10b3AtY29sb3I6Izc3Nztib3JkZXItYm90dG9tLWNvbG9yOiM3Nzd9Lm5hdmJhciAu
bmF2IGxpLmRyb3Bkb3duLm9wZW4+LmRyb3Bkb3duLXRvZ2dsZSAuY2FyZXQsLm5hdmJhciAubmF2
IGxpLmRyb3Bkb3duLmFjdGl2ZT4uZHJvcGRvd24tdG9nZ2xlIC5jYXJldCwubmF2YmFyIC5uYXYg
bGkuZHJvcGRvd24ub3Blbi5hY3RpdmU+LmRyb3Bkb3duLXRvZ2dsZSAuY2FyZXR7Ym9yZGVyLXRv
cC1jb2xvcjojNTU1O2JvcmRlci1ib3R0b20tY29sb3I6IzU1NX0ubmF2YmFyIC5wdWxsLXJpZ2h0
PmxpPi5kcm9wZG93bi1tZW51LC5uYXZiYXIgLm5hdj5saT4uZHJvcGRvd24tbWVudS5wdWxsLXJp
Z2h0e3JpZ2h0OjA7bGVmdDphdXRvfS5uYXZiYXIgLnB1bGwtcmlnaHQ+bGk+LmRyb3Bkb3duLW1l
bnU6YmVmb3JlLC5uYXZiYXIgLm5hdj5saT4uZHJvcGRvd24tbWVudS5wdWxsLXJpZ2h0OmJlZm9y
ZXtyaWdodDoxMnB4O2xlZnQ6YXV0b30ubmF2YmFyIC5wdWxsLXJpZ2h0PmxpPi5kcm9wZG93bi1t
ZW51OmFmdGVyLC5uYXZiYXIgLm5hdj5saT4uZHJvcGRvd24tbWVudS5wdWxsLXJpZ2h0OmFmdGVy
e3JpZ2h0OjEzcHg7bGVmdDphdXRvfS5uYXZiYXIgLnB1bGwtcmlnaHQ+bGk+LmRyb3Bkb3duLW1l
bnUgLmRyb3Bkb3duLW1lbnUsLm5hdmJhciAubmF2PmxpPi5kcm9wZG93bi1tZW51LnB1bGwtcmln
aHQgLmRyb3Bkb3duLW1lbnV7cmlnaHQ6MTAwJTtsZWZ0OmF1dG87bWFyZ2luLXJpZ2h0Oi0xcHg7
bWFyZ2luLWxlZnQ6MDstd2Via2l0LWJvcmRlci1yYWRpdXM6NnB4IDAgNnB4IDZweDstbW96LWJv
cmRlci1yYWRpdXM6NnB4IDAgNnB4IDZweDtib3JkZXItcmFkaXVzOjZweCAwIDZweCA2cHh9Lm5h
dmJhci1pbnZlcnNlIC5uYXZiYXItaW5uZXJ7YmFja2dyb3VuZC1jb2xvcjojMWIxYjFiO2JhY2tn
cm91bmQtaW1hZ2U6LW1vei1saW5lYXItZ3JhZGllbnQodG9wLCMyMjIsIzExMSk7YmFja2dyb3Vu
ZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciwwIDAsMCAxMDAlLGZyb20oIzIyMiksdG8o
IzExMSkpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCMyMjIs
IzExMSk7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQodG9wLCMyMjIsIzExMSk7
YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCMyMjIsIzExMSk7YmFj
a2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7Ym9yZGVyLWNvbG9yOiMyNTI1MjU7ZmlsdGVyOnByb2dp
ZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmYy
MjIyMjInLGVuZENvbG9yc3RyPScjZmYxMTExMTEnLEdyYWRpZW50VHlwZT0wKX0ubmF2YmFyLWlu
dmVyc2UgLmJyYW5kLC5uYXZiYXItaW52ZXJzZSAubmF2PmxpPmF7Y29sb3I6Izk5OTt0ZXh0LXNo
YWRvdzowIC0xcHggMCByZ2JhKDAsMCwwLDAuMjUpfS5uYXZiYXItaW52ZXJzZSAuYnJhbmQ6aG92
ZXIsLm5hdmJhci1pbnZlcnNlIC5uYXY+bGk+YTpob3Zlcntjb2xvcjojZmZmfS5uYXZiYXItaW52
ZXJzZSAuYnJhbmR7Y29sb3I6Izk5OX0ubmF2YmFyLWludmVyc2UgLm5hdmJhci10ZXh0e2NvbG9y
OiM5OTl9Lm5hdmJhci1pbnZlcnNlIC5uYXY+bGk+YTpmb2N1cywubmF2YmFyLWludmVyc2UgLm5h
dj5saT5hOmhvdmVye2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0ubmF2
YmFyLWludmVyc2UgLm5hdiAuYWN0aXZlPmEsLm5hdmJhci1pbnZlcnNlIC5uYXYgLmFjdGl2ZT5h
OmhvdmVyLC5uYXZiYXItaW52ZXJzZSAubmF2IC5hY3RpdmU+YTpmb2N1c3tjb2xvcjojZmZmO2Jh
Y2tncm91bmQtY29sb3I6IzExMX0ubmF2YmFyLWludmVyc2UgLm5hdmJhci1saW5re2NvbG9yOiM5
OTl9Lm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbGluazpob3Zlcntjb2xvcjojZmZmfS5uYXZiYXIt
aW52ZXJzZSAuZGl2aWRlci12ZXJ0aWNhbHtib3JkZXItcmlnaHQtY29sb3I6IzIyMjtib3JkZXIt
bGVmdC1jb2xvcjojMTExfS5uYXZiYXItaW52ZXJzZSAubmF2IGxpLmRyb3Bkb3duLm9wZW4+LmRy
b3Bkb3duLXRvZ2dsZSwubmF2YmFyLWludmVyc2UgLm5hdiBsaS5kcm9wZG93bi5hY3RpdmU+LmRy
b3Bkb3duLXRvZ2dsZSwubmF2YmFyLWludmVyc2UgLm5hdiBsaS5kcm9wZG93bi5vcGVuLmFjdGl2
ZT4uZHJvcGRvd24tdG9nZ2xle2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojMTExfS5uYXZi
YXItaW52ZXJzZSAubmF2IGxpLmRyb3Bkb3duPmE6aG92ZXIgLmNhcmV0e2JvcmRlci10b3AtY29s
b3I6I2ZmZjtib3JkZXItYm90dG9tLWNvbG9yOiNmZmZ9Lm5hdmJhci1pbnZlcnNlIC5uYXYgbGku
ZHJvcGRvd24+LmRyb3Bkb3duLXRvZ2dsZSAuY2FyZXR7Ym9yZGVyLXRvcC1jb2xvcjojOTk5O2Jv
cmRlci1ib3R0b20tY29sb3I6Izk5OX0ubmF2YmFyLWludmVyc2UgLm5hdiBsaS5kcm9wZG93bi5v
cGVuPi5kcm9wZG93bi10b2dnbGUgLmNhcmV0LC5uYXZiYXItaW52ZXJzZSAubmF2IGxpLmRyb3Bk
b3duLmFjdGl2ZT4uZHJvcGRvd24tdG9nZ2xlIC5jYXJldCwubmF2YmFyLWludmVyc2UgLm5hdiBs
aS5kcm9wZG93bi5vcGVuLmFjdGl2ZT4uZHJvcGRvd24tdG9nZ2xlIC5jYXJldHtib3JkZXItdG9w
LWNvbG9yOiNmZmY7Ym9yZGVyLWJvdHRvbS1jb2xvcjojZmZmfS5uYXZiYXItaW52ZXJzZSAubmF2
YmFyLXNlYXJjaCAuc2VhcmNoLXF1ZXJ5e2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojNTE1
MTUxO2JvcmRlci1jb2xvcjojMTExOy13ZWJraXQtYm94LXNoYWRvdzppbnNldCAwIDFweCAycHgg
cmdiYSgwLDAsMCwwLjEpLDAgMXB4IDAgcmdiYSgyNTUsMjU1LDI1NSwwLjE1KTstbW96LWJveC1z
aGFkb3c6aW5zZXQgMCAxcHggMnB4IHJnYmEoMCwwLDAsMC4xKSwwIDFweCAwIHJnYmEoMjU1LDI1
NSwyNTUsMC4xNSk7Ym94LXNoYWRvdzppbnNldCAwIDFweCAycHggcmdiYSgwLDAsMCwwLjEpLDAg
MXB4IDAgcmdiYSgyNTUsMjU1LDI1NSwwLjE1KTstd2Via2l0LXRyYW5zaXRpb246bm9uZTstbW96
LXRyYW5zaXRpb246bm9uZTstby10cmFuc2l0aW9uOm5vbmU7dHJhbnNpdGlvbjpub25lfS5uYXZi
YXItaW52ZXJzZSAubmF2YmFyLXNlYXJjaCAuc2VhcmNoLXF1ZXJ5Oi1tb3otcGxhY2Vob2xkZXJ7
Y29sb3I6I2NjY30ubmF2YmFyLWludmVyc2UgLm5hdmJhci1zZWFyY2ggLnNlYXJjaC1xdWVyeTot
bXMtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6I2NjY30ubmF2YmFyLWludmVyc2UgLm5hdmJhci1z
ZWFyY2ggLnNlYXJjaC1xdWVyeTo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjojY2Nj
fS5uYXZiYXItaW52ZXJzZSAubmF2YmFyLXNlYXJjaCAuc2VhcmNoLXF1ZXJ5OmZvY3VzLC5uYXZi
YXItaW52ZXJzZSAubmF2YmFyLXNlYXJjaCAuc2VhcmNoLXF1ZXJ5LmZvY3VzZWR7cGFkZGluZzo1
cHggMTVweDtjb2xvcjojMzMzO3RleHQtc2hhZG93OjAgMXB4IDAgI2ZmZjtiYWNrZ3JvdW5kLWNv
bG9yOiNmZmY7Ym9yZGVyOjA7b3V0bGluZTowOy13ZWJraXQtYm94LXNoYWRvdzowIDAgM3B4IHJn
YmEoMCwwLDAsMC4xNSk7LW1vei1ib3gtc2hhZG93OjAgMCAzcHggcmdiYSgwLDAsMCwwLjE1KTti
b3gtc2hhZG93OjAgMCAzcHggcmdiYSgwLDAsMCwwLjE1KX0ubmF2YmFyLWludmVyc2UgLmJ0bi1u
YXZiYXJ7Y29sb3I6I2ZmZjt0ZXh0LXNoYWRvdzowIC0xcHggMCByZ2JhKDAsMCwwLDAuMjUpO2Jh
Y2tncm91bmQtY29sb3I6IzBlMGUwZTsqYmFja2dyb3VuZC1jb2xvcjojMDQwNDA0O2JhY2tncm91
bmQtaW1hZ2U6LW1vei1saW5lYXItZ3JhZGllbnQodG9wLCMxNTE1MTUsIzA0MDQwNCk7YmFja2dy
b3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciwwIDAsMCAxMDAlLGZyb20oIzE1MTUx
NSksdG8oIzA0MDQwNCkpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQo
dG9wLCMxNTE1MTUsIzA0MDQwNCk7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQo
dG9wLCMxNTE1MTUsIzA0MDQwNCk7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8g
Ym90dG9tLCMxNTE1MTUsIzA0MDQwNCk7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7Ym9yZGVy
LWNvbG9yOiMwNDA0MDQgIzA0MDQwNCAjMDAwO2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLDAuMSkg
cmdiYSgwLDAsMCwwLjEpIHJnYmEoMCwwLDAsMC4yNSk7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJh
bnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmYxNTE1MTUnLGVuZENv
bG9yc3RyPScjZmYwNDA0MDQnLEdyYWRpZW50VHlwZT0wKTtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VU
cmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KGVuYWJsZWQ9ZmFsc2UpfS5uYXZiYXItaW52ZXJz
ZSAuYnRuLW5hdmJhcjpob3ZlciwubmF2YmFyLWludmVyc2UgLmJ0bi1uYXZiYXI6YWN0aXZlLC5u
YXZiYXItaW52ZXJzZSAuYnRuLW5hdmJhci5hY3RpdmUsLm5hdmJhci1pbnZlcnNlIC5idG4tbmF2
YmFyLmRpc2FibGVkLC5uYXZiYXItaW52ZXJzZSAuYnRuLW5hdmJhcltkaXNhYmxlZF17Y29sb3I6
I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiMwNDA0MDQ7KmJhY2tncm91bmQtY29sb3I6IzAwMH0ubmF2
YmFyLWludmVyc2UgLmJ0bi1uYXZiYXI6YWN0aXZlLC5uYXZiYXItaW52ZXJzZSAuYnRuLW5hdmJh
ci5hY3RpdmV7YmFja2dyb3VuZC1jb2xvcjojMDAwIFw5fS5icmVhZGNydW1ie3BhZGRpbmc6OHB4
IDE1cHg7bWFyZ2luOjAgMCAyMHB4O2xpc3Qtc3R5bGU6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOiNm
NWY1ZjU7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4O2Jv
cmRlci1yYWRpdXM6NHB4fS5icmVhZGNydW1iPmxpe2Rpc3BsYXk6aW5saW5lLWJsb2NrOypkaXNw
bGF5OmlubGluZTt0ZXh0LXNoYWRvdzowIDFweCAwICNmZmY7Knpvb206MX0uYnJlYWRjcnVtYj5s
aT4uZGl2aWRlcntwYWRkaW5nOjAgNXB4O2NvbG9yOiNjY2N9LmJyZWFkY3J1bWI+LmFjdGl2ZXtj
b2xvcjojOTk5fS5wYWdpbmF0aW9ue21hcmdpbjoyMHB4IDB9LnBhZ2luYXRpb24gdWx7ZGlzcGxh
eTppbmxpbmUtYmxvY2s7KmRpc3BsYXk6aW5saW5lO21hcmdpbi1ib3R0b206MDttYXJnaW4tbGVm
dDowOy13ZWJraXQtYm9yZGVyLXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzOjRweDtib3Jk
ZXItcmFkaXVzOjRweDsqem9vbToxOy13ZWJraXQtYm94LXNoYWRvdzowIDFweCAycHggcmdiYSgw
LDAsMCwwLjA1KTstbW96LWJveC1zaGFkb3c6MCAxcHggMnB4IHJnYmEoMCwwLDAsMC4wNSk7Ym94
LXNoYWRvdzowIDFweCAycHggcmdiYSgwLDAsMCwwLjA1KX0ucGFnaW5hdGlvbiB1bD5saXtkaXNw
bGF5OmlubGluZX0ucGFnaW5hdGlvbiB1bD5saT5hLC5wYWdpbmF0aW9uIHVsPmxpPnNwYW57Zmxv
YXQ6bGVmdDtwYWRkaW5nOjRweCAxMnB4O2xpbmUtaGVpZ2h0OjIwcHg7dGV4dC1kZWNvcmF0aW9u
Om5vbmU7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjoxcHggc29saWQgI2RkZDtib3JkZXIt
bGVmdC13aWR0aDowfS5wYWdpbmF0aW9uIHVsPmxpPmE6aG92ZXIsLnBhZ2luYXRpb24gdWw+LmFj
dGl2ZT5hLC5wYWdpbmF0aW9uIHVsPi5hY3RpdmU+c3BhbntiYWNrZ3JvdW5kLWNvbG9yOiNmNWY1
ZjV9LnBhZ2luYXRpb24gdWw+LmFjdGl2ZT5hLC5wYWdpbmF0aW9uIHVsPi5hY3RpdmU+c3Bhbntj
b2xvcjojOTk5O2N1cnNvcjpkZWZhdWx0fS5wYWdpbmF0aW9uIHVsPi5kaXNhYmxlZD5zcGFuLC5w
YWdpbmF0aW9uIHVsPi5kaXNhYmxlZD5hLC5wYWdpbmF0aW9uIHVsPi5kaXNhYmxlZD5hOmhvdmVy
e2NvbG9yOiM5OTk7Y3Vyc29yOmRlZmF1bHQ7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0u
cGFnaW5hdGlvbiB1bD5saTpmaXJzdC1jaGlsZD5hLC5wYWdpbmF0aW9uIHVsPmxpOmZpcnN0LWNo
aWxkPnNwYW57Ym9yZGVyLWxlZnQtd2lkdGg6MXB4Oy13ZWJraXQtYm9yZGVyLWJvdHRvbS1sZWZ0
LXJhZGl1czo0cHg7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czo0cHg7LXdlYmtpdC1ib3JkZXIt
dG9wLWxlZnQtcmFkaXVzOjRweDtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjRweDstbW96LWJvcmRl
ci1yYWRpdXMtYm90dG9tbGVmdDo0cHg7LW1vei1ib3JkZXItcmFkaXVzLXRvcGxlZnQ6NHB4fS5w
YWdpbmF0aW9uIHVsPmxpOmxhc3QtY2hpbGQ+YSwucGFnaW5hdGlvbiB1bD5saTpsYXN0LWNoaWxk
PnNwYW57LXdlYmtpdC1ib3JkZXItdG9wLXJpZ2h0LXJhZGl1czo0cHg7Ym9yZGVyLXRvcC1yaWdo
dC1yYWRpdXM6NHB4Oy13ZWJraXQtYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6NHB4O2JvcmRl
ci1ib3R0b20tcmlnaHQtcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXMtdG9wcmlnaHQ6NHB4
Oy1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21yaWdodDo0cHh9LnBhZ2luYXRpb24tY2VudGVyZWR7
dGV4dC1hbGlnbjpjZW50ZXJ9LnBhZ2luYXRpb24tcmlnaHR7dGV4dC1hbGlnbjpyaWdodH0ucGFn
aW5hdGlvbi1sYXJnZSB1bD5saT5hLC5wYWdpbmF0aW9uLWxhcmdlIHVsPmxpPnNwYW57cGFkZGlu
ZzoxMXB4IDE5cHg7Zm9udC1zaXplOjE3LjVweH0ucGFnaW5hdGlvbi1sYXJnZSB1bD5saTpmaXJz
dC1jaGlsZD5hLC5wYWdpbmF0aW9uLWxhcmdlIHVsPmxpOmZpcnN0LWNoaWxkPnNwYW57LXdlYmtp
dC1ib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjZweDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVz
OjZweDstd2Via2l0LWJvcmRlci10b3AtbGVmdC1yYWRpdXM6NnB4O2JvcmRlci10b3AtbGVmdC1y
YWRpdXM6NnB4Oy1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21sZWZ0OjZweDstbW96LWJvcmRlci1y
YWRpdXMtdG9wbGVmdDo2cHh9LnBhZ2luYXRpb24tbGFyZ2UgdWw+bGk6bGFzdC1jaGlsZD5hLC5w
YWdpbmF0aW9uLWxhcmdlIHVsPmxpOmxhc3QtY2hpbGQ+c3Bhbnstd2Via2l0LWJvcmRlci10b3At
cmlnaHQtcmFkaXVzOjZweDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czo2cHg7LXdlYmtpdC1ib3Jk
ZXItYm90dG9tLXJpZ2h0LXJhZGl1czo2cHg7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6NnB4
Oy1tb3otYm9yZGVyLXJhZGl1cy10b3ByaWdodDo2cHg7LW1vei1ib3JkZXItcmFkaXVzLWJvdHRv
bXJpZ2h0OjZweH0ucGFnaW5hdGlvbi1taW5pIHVsPmxpOmZpcnN0LWNoaWxkPmEsLnBhZ2luYXRp
b24tc21hbGwgdWw+bGk6Zmlyc3QtY2hpbGQ+YSwucGFnaW5hdGlvbi1taW5pIHVsPmxpOmZpcnN0
LWNoaWxkPnNwYW4sLnBhZ2luYXRpb24tc21hbGwgdWw+bGk6Zmlyc3QtY2hpbGQ+c3Bhbnstd2Vi
a2l0LWJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6M3B4O2JvcmRlci1ib3R0b20tbGVmdC1yYWRp
dXM6M3B4Oy13ZWJraXQtYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czozcHg7Ym9yZGVyLXRvcC1sZWZ0
LXJhZGl1czozcHg7LW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbWxlZnQ6M3B4Oy1tb3otYm9yZGVy
LXJhZGl1cy10b3BsZWZ0OjNweH0ucGFnaW5hdGlvbi1taW5pIHVsPmxpOmxhc3QtY2hpbGQ+YSwu
cGFnaW5hdGlvbi1zbWFsbCB1bD5saTpsYXN0LWNoaWxkPmEsLnBhZ2luYXRpb24tbWluaSB1bD5s
aTpsYXN0LWNoaWxkPnNwYW4sLnBhZ2luYXRpb24tc21hbGwgdWw+bGk6bGFzdC1jaGlsZD5zcGFu
ey13ZWJraXQtYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6M3B4O2JvcmRlci10b3AtcmlnaHQtcmFk
aXVzOjNweDstd2Via2l0LWJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjNweDtib3JkZXItYm90
dG9tLXJpZ2h0LXJhZGl1czozcHg7LW1vei1ib3JkZXItcmFkaXVzLXRvcHJpZ2h0OjNweDstbW96
LWJvcmRlci1yYWRpdXMtYm90dG9tcmlnaHQ6M3B4fS5wYWdpbmF0aW9uLXNtYWxsIHVsPmxpPmEs
LnBhZ2luYXRpb24tc21hbGwgdWw+bGk+c3BhbntwYWRkaW5nOjJweCAxMHB4O2ZvbnQtc2l6ZTox
MS45cHh9LnBhZ2luYXRpb24tbWluaSB1bD5saT5hLC5wYWdpbmF0aW9uLW1pbmkgdWw+bGk+c3Bh
bntwYWRkaW5nOjAgNnB4O2ZvbnQtc2l6ZToxMC41cHh9LnBhZ2Vye21hcmdpbjoyMHB4IDA7dGV4
dC1hbGlnbjpjZW50ZXI7bGlzdC1zdHlsZTpub25lOyp6b29tOjF9LnBhZ2VyOmJlZm9yZSwucGFn
ZXI6YWZ0ZXJ7ZGlzcGxheTp0YWJsZTtsaW5lLWhlaWdodDowO2NvbnRlbnQ6IiJ9LnBhZ2VyOmFm
dGVye2NsZWFyOmJvdGh9LnBhZ2VyIGxpe2Rpc3BsYXk6aW5saW5lfS5wYWdlciBsaT5hLC5wYWdl
ciBsaT5zcGFue2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmc6NXB4IDE0cHg7YmFja2dyb3Vu
ZC1jb2xvcjojZmZmO2JvcmRlcjoxcHggc29saWQgI2RkZDstd2Via2l0LWJvcmRlci1yYWRpdXM6
MTVweDstbW96LWJvcmRlci1yYWRpdXM6MTVweDtib3JkZXItcmFkaXVzOjE1cHh9LnBhZ2VyIGxp
PmE6aG92ZXJ7dGV4dC1kZWNvcmF0aW9uOm5vbmU7YmFja2dyb3VuZC1jb2xvcjojZjVmNWY1fS5w
YWdlciAubmV4dD5hLC5wYWdlciAubmV4dD5zcGFue2Zsb2F0OnJpZ2h0fS5wYWdlciAucHJldmlv
dXM+YSwucGFnZXIgLnByZXZpb3VzPnNwYW57ZmxvYXQ6bGVmdH0ucGFnZXIgLmRpc2FibGVkPmEs
LnBhZ2VyIC5kaXNhYmxlZD5hOmhvdmVyLC5wYWdlciAuZGlzYWJsZWQ+c3Bhbntjb2xvcjojOTk5
O2N1cnNvcjpkZWZhdWx0O2JhY2tncm91bmQtY29sb3I6I2ZmZn0ubW9kYWwtYmFja2Ryb3B7cG9z
aXRpb246Zml4ZWQ7dG9wOjA7cmlnaHQ6MDtib3R0b206MDtsZWZ0OjA7ei1pbmRleDoxMDQwO2Jh
Y2tncm91bmQtY29sb3I6IzAwMH0ubW9kYWwtYmFja2Ryb3AuZmFkZXtvcGFjaXR5OjB9Lm1vZGFs
LWJhY2tkcm9wLC5tb2RhbC1iYWNrZHJvcC5mYWRlLmlue29wYWNpdHk6Ljg7ZmlsdGVyOmFscGhh
KG9wYWNpdHk9ODApfS5tb2RhbHtwb3NpdGlvbjpmaXhlZDt0b3A6MTAlO2xlZnQ6NTAlO3otaW5k
ZXg6MTA1MDt3aWR0aDo1NjBweDttYXJnaW4tbGVmdDotMjgwcHg7YmFja2dyb3VuZC1jb2xvcjoj
ZmZmO2JvcmRlcjoxcHggc29saWQgIzk5OTtib3JkZXI6MXB4IHNvbGlkIHJnYmEoMCwwLDAsMC4z
KTsqYm9yZGVyOjFweCBzb2xpZCAjOTk5Oy13ZWJraXQtYm9yZGVyLXJhZGl1czo2cHg7LW1vei1i
b3JkZXItcmFkaXVzOjZweDtib3JkZXItcmFkaXVzOjZweDtvdXRsaW5lOjA7LXdlYmtpdC1ib3gt
c2hhZG93OjAgM3B4IDdweCByZ2JhKDAsMCwwLDAuMyk7LW1vei1ib3gtc2hhZG93OjAgM3B4IDdw
eCByZ2JhKDAsMCwwLDAuMyk7Ym94LXNoYWRvdzowIDNweCA3cHggcmdiYSgwLDAsMCwwLjMpOy13
ZWJraXQtYmFja2dyb3VuZC1jbGlwOnBhZGRpbmctYm94Oy1tb3otYmFja2dyb3VuZC1jbGlwOnBh
ZGRpbmctYm94O2JhY2tncm91bmQtY2xpcDpwYWRkaW5nLWJveH0ubW9kYWwuZmFkZXt0b3A6LTI1
JTstd2Via2l0LXRyYW5zaXRpb246b3BhY2l0eSAuM3MgbGluZWFyLHRvcCAuM3MgZWFzZS1vdXQ7
LW1vei10cmFuc2l0aW9uOm9wYWNpdHkgLjNzIGxpbmVhcix0b3AgLjNzIGVhc2Utb3V0Oy1vLXRy
YW5zaXRpb246b3BhY2l0eSAuM3MgbGluZWFyLHRvcCAuM3MgZWFzZS1vdXQ7dHJhbnNpdGlvbjpv
cGFjaXR5IC4zcyBsaW5lYXIsdG9wIC4zcyBlYXNlLW91dH0ubW9kYWwuZmFkZS5pbnt0b3A6MTAl
fS5tb2RhbC1oZWFkZXJ7cGFkZGluZzo5cHggMTVweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAj
ZWVlfS5tb2RhbC1oZWFkZXIgLmNsb3Nle21hcmdpbi10b3A6MnB4fS5tb2RhbC1oZWFkZXIgaDN7
bWFyZ2luOjA7bGluZS1oZWlnaHQ6MzBweH0ubW9kYWwtYm9keXtwb3NpdGlvbjpyZWxhdGl2ZTtt
YXgtaGVpZ2h0OjQwMHB4O3BhZGRpbmc6MTVweDtvdmVyZmxvdy15OmF1dG99Lm1vZGFsLWZvcm17
bWFyZ2luLWJvdHRvbTowfS5tb2RhbC1mb290ZXJ7cGFkZGluZzoxNHB4IDE1cHggMTVweDttYXJn
aW4tYm90dG9tOjA7dGV4dC1hbGlnbjpyaWdodDtiYWNrZ3JvdW5kLWNvbG9yOiNmNWY1ZjU7Ym9y
ZGVyLXRvcDoxcHggc29saWQgI2RkZDstd2Via2l0LWJvcmRlci1yYWRpdXM6MCAwIDZweCA2cHg7
LW1vei1ib3JkZXItcmFkaXVzOjAgMCA2cHggNnB4O2JvcmRlci1yYWRpdXM6MCAwIDZweCA2cHg7
Knpvb206MTstd2Via2l0LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMCAjZmZmOy1tb3otYm94LXNo
YWRvdzppbnNldCAwIDFweCAwICNmZmY7Ym94LXNoYWRvdzppbnNldCAwIDFweCAwICNmZmZ9Lm1v
ZGFsLWZvb3RlcjpiZWZvcmUsLm1vZGFsLWZvb3RlcjphZnRlcntkaXNwbGF5OnRhYmxlO2xpbmUt
aGVpZ2h0OjA7Y29udGVudDoiIn0ubW9kYWwtZm9vdGVyOmFmdGVye2NsZWFyOmJvdGh9Lm1vZGFs
LWZvb3RlciAuYnRuKy5idG57bWFyZ2luLWJvdHRvbTowO21hcmdpbi1sZWZ0OjVweH0ubW9kYWwt
Zm9vdGVyIC5idG4tZ3JvdXAgLmJ0bisuYnRue21hcmdpbi1sZWZ0Oi0xcHh9Lm1vZGFsLWZvb3Rl
ciAuYnRuLWJsb2NrKy5idG4tYmxvY2t7bWFyZ2luLWxlZnQ6MH0udG9vbHRpcHtwb3NpdGlvbjph
YnNvbHV0ZTt6LWluZGV4OjEwMzA7ZGlzcGxheTpibG9jaztwYWRkaW5nOjVweDtmb250LXNpemU6
MTFweDtvcGFjaXR5OjA7ZmlsdGVyOmFscGhhKG9wYWNpdHk9MCk7dmlzaWJpbGl0eTp2aXNpYmxl
fS50b29sdGlwLmlue29wYWNpdHk6Ljg7ZmlsdGVyOmFscGhhKG9wYWNpdHk9ODApfS50b29sdGlw
LnRvcHttYXJnaW4tdG9wOi0zcHh9LnRvb2x0aXAucmlnaHR7bWFyZ2luLWxlZnQ6M3B4fS50b29s
dGlwLmJvdHRvbXttYXJnaW4tdG9wOjNweH0udG9vbHRpcC5sZWZ0e21hcmdpbi1sZWZ0Oi0zcHh9
LnRvb2x0aXAtaW5uZXJ7bWF4LXdpZHRoOjIwMHB4O3BhZGRpbmc6M3B4IDhweDtjb2xvcjojZmZm
O3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO2JhY2tncm91bmQtY29sb3I6
IzAwMDstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7Ym9y
ZGVyLXJhZGl1czo0cHh9LnRvb2x0aXAtYXJyb3d7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MDto
ZWlnaHQ6MDtib3JkZXItY29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyLXN0eWxlOnNvbGlkfS50b29s
dGlwLnRvcCAudG9vbHRpcC1hcnJvd3tib3R0b206MDtsZWZ0OjUwJTttYXJnaW4tbGVmdDotNXB4
O2JvcmRlci10b3AtY29sb3I6IzAwMDtib3JkZXItd2lkdGg6NXB4IDVweCAwfS50b29sdGlwLnJp
Z2h0IC50b29sdGlwLWFycm93e3RvcDo1MCU7bGVmdDowO21hcmdpbi10b3A6LTVweDtib3JkZXIt
cmlnaHQtY29sb3I6IzAwMDtib3JkZXItd2lkdGg6NXB4IDVweCA1cHggMH0udG9vbHRpcC5sZWZ0
IC50b29sdGlwLWFycm93e3RvcDo1MCU7cmlnaHQ6MDttYXJnaW4tdG9wOi01cHg7Ym9yZGVyLWxl
ZnQtY29sb3I6IzAwMDtib3JkZXItd2lkdGg6NXB4IDAgNXB4IDVweH0udG9vbHRpcC5ib3R0b20g
LnRvb2x0aXAtYXJyb3d7dG9wOjA7bGVmdDo1MCU7bWFyZ2luLWxlZnQ6LTVweDtib3JkZXItYm90
dG9tLWNvbG9yOiMwMDA7Ym9yZGVyLXdpZHRoOjAgNXB4IDVweH0ucG9wb3Zlcntwb3NpdGlvbjph
YnNvbHV0ZTt0b3A6MDtsZWZ0OjA7ei1pbmRleDoxMDEwO2Rpc3BsYXk6bm9uZTt3aWR0aDoyMzZw
eDtwYWRkaW5nOjFweDt0ZXh0LWFsaWduOmxlZnQ7d2hpdGUtc3BhY2U6bm9ybWFsO2JhY2tncm91
bmQtY29sb3I6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNjY2M7Ym9yZGVyOjFweCBzb2xpZCByZ2Jh
KDAsMCwwLDAuMik7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjZweDstbW96LWJvcmRlci1yYWRpdXM6
NnB4O2JvcmRlci1yYWRpdXM6NnB4Oy13ZWJraXQtYm94LXNoYWRvdzowIDVweCAxMHB4IHJnYmEo
MCwwLDAsMC4yKTstbW96LWJveC1zaGFkb3c6MCA1cHggMTBweCByZ2JhKDAsMCwwLDAuMik7Ym94
LXNoYWRvdzowIDVweCAxMHB4IHJnYmEoMCwwLDAsMC4yKTstd2Via2l0LWJhY2tncm91bmQtY2xp
cDpwYWRkaW5nLWJveDstbW96LWJhY2tncm91bmQtY2xpcDpwYWRkaW5nO2JhY2tncm91bmQtY2xp
cDpwYWRkaW5nLWJveH0ucG9wb3Zlci50b3B7bWFyZ2luLXRvcDotMTBweH0ucG9wb3Zlci5yaWdo
dHttYXJnaW4tbGVmdDoxMHB4fS5wb3BvdmVyLmJvdHRvbXttYXJnaW4tdG9wOjEwcHh9LnBvcG92
ZXIubGVmdHttYXJnaW4tbGVmdDotMTBweH0ucG9wb3Zlci10aXRsZXtwYWRkaW5nOjhweCAxNHB4
O21hcmdpbjowO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0Om5vcm1hbDtsaW5lLWhlaWdodDox
OHB4O2JhY2tncm91bmQtY29sb3I6I2Y3ZjdmNztib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWJl
YmViOy13ZWJraXQtYm9yZGVyLXJhZGl1czo1cHggNXB4IDAgMDstbW96LWJvcmRlci1yYWRpdXM6
NXB4IDVweCAwIDA7Ym9yZGVyLXJhZGl1czo1cHggNXB4IDAgMH0ucG9wb3Zlci1jb250ZW50e3Bh
ZGRpbmc6OXB4IDE0cHh9LnBvcG92ZXIgLmFycm93LC5wb3BvdmVyIC5hcnJvdzphZnRlcntwb3Np
dGlvbjphYnNvbHV0ZTtkaXNwbGF5OmJsb2NrO3dpZHRoOjA7aGVpZ2h0OjA7Ym9yZGVyLWNvbG9y
OnRyYW5zcGFyZW50O2JvcmRlci1zdHlsZTpzb2xpZH0ucG9wb3ZlciAuYXJyb3d7Ym9yZGVyLXdp
ZHRoOjExcHh9LnBvcG92ZXIgLmFycm93OmFmdGVye2JvcmRlci13aWR0aDoxMHB4O2NvbnRlbnQ6
IiJ9LnBvcG92ZXIudG9wIC5hcnJvd3tib3R0b206LTExcHg7bGVmdDo1MCU7bWFyZ2luLWxlZnQ6
LTExcHg7Ym9yZGVyLXRvcC1jb2xvcjojOTk5O2JvcmRlci10b3AtY29sb3I6cmdiYSgwLDAsMCww
LjI1KTtib3JkZXItYm90dG9tLXdpZHRoOjB9LnBvcG92ZXIudG9wIC5hcnJvdzphZnRlcntib3R0
b206MXB4O21hcmdpbi1sZWZ0Oi0xMHB4O2JvcmRlci10b3AtY29sb3I6I2ZmZjtib3JkZXItYm90
dG9tLXdpZHRoOjB9LnBvcG92ZXIucmlnaHQgLmFycm93e3RvcDo1MCU7bGVmdDotMTFweDttYXJn
aW4tdG9wOi0xMXB4O2JvcmRlci1yaWdodC1jb2xvcjojOTk5O2JvcmRlci1yaWdodC1jb2xvcjpy
Z2JhKDAsMCwwLDAuMjUpO2JvcmRlci1sZWZ0LXdpZHRoOjB9LnBvcG92ZXIucmlnaHQgLmFycm93
OmFmdGVye2JvdHRvbTotMTBweDtsZWZ0OjFweDtib3JkZXItcmlnaHQtY29sb3I6I2ZmZjtib3Jk
ZXItbGVmdC13aWR0aDowfS5wb3BvdmVyLmJvdHRvbSAuYXJyb3d7dG9wOi0xMXB4O2xlZnQ6NTAl
O21hcmdpbi1sZWZ0Oi0xMXB4O2JvcmRlci1ib3R0b20tY29sb3I6Izk5OTtib3JkZXItYm90dG9t
LWNvbG9yOnJnYmEoMCwwLDAsMC4yNSk7Ym9yZGVyLXRvcC13aWR0aDowfS5wb3BvdmVyLmJvdHRv
bSAuYXJyb3c6YWZ0ZXJ7dG9wOjFweDttYXJnaW4tbGVmdDotMTBweDtib3JkZXItYm90dG9tLWNv
bG9yOiNmZmY7Ym9yZGVyLXRvcC13aWR0aDowfS5wb3BvdmVyLmxlZnQgLmFycm93e3RvcDo1MCU7
cmlnaHQ6LTExcHg7bWFyZ2luLXRvcDotMTFweDtib3JkZXItbGVmdC1jb2xvcjojOTk5O2JvcmRl
ci1sZWZ0LWNvbG9yOnJnYmEoMCwwLDAsMC4yNSk7Ym9yZGVyLXJpZ2h0LXdpZHRoOjB9LnBvcG92
ZXIubGVmdCAuYXJyb3c6YWZ0ZXJ7cmlnaHQ6MXB4O2JvdHRvbTotMTBweDtib3JkZXItbGVmdC1j
b2xvcjojZmZmO2JvcmRlci1yaWdodC13aWR0aDowfS50aHVtYm5haWxze21hcmdpbi1sZWZ0Oi0y
MHB4O2xpc3Qtc3R5bGU6bm9uZTsqem9vbToxfS50aHVtYm5haWxzOmJlZm9yZSwudGh1bWJuYWls
czphZnRlcntkaXNwbGF5OnRhYmxlO2xpbmUtaGVpZ2h0OjA7Y29udGVudDoiIn0udGh1bWJuYWls
czphZnRlcntjbGVhcjpib3RofS5yb3ctZmx1aWQgLnRodW1ibmFpbHN7bWFyZ2luLWxlZnQ6MH0u
dGh1bWJuYWlscz5saXtmbG9hdDpsZWZ0O21hcmdpbi1ib3R0b206MjBweDttYXJnaW4tbGVmdDoy
MHB4fS50aHVtYm5haWx7ZGlzcGxheTpibG9jaztwYWRkaW5nOjRweDtsaW5lLWhlaWdodDoyMHB4
O2JvcmRlcjoxcHggc29saWQgI2RkZDstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9y
ZGVyLXJhZGl1czo0cHg7Ym9yZGVyLXJhZGl1czo0cHg7LXdlYmtpdC1ib3gtc2hhZG93OjAgMXB4
IDNweCByZ2JhKDAsMCwwLDAuMDU1KTstbW96LWJveC1zaGFkb3c6MCAxcHggM3B4IHJnYmEoMCww
LDAsMC4wNTUpO2JveC1zaGFkb3c6MCAxcHggM3B4IHJnYmEoMCwwLDAsMC4wNTUpOy13ZWJraXQt
dHJhbnNpdGlvbjphbGwgLjJzIGVhc2UtaW4tb3V0Oy1tb3otdHJhbnNpdGlvbjphbGwgLjJzIGVh
c2UtaW4tb3V0Oy1vLXRyYW5zaXRpb246YWxsIC4ycyBlYXNlLWluLW91dDt0cmFuc2l0aW9uOmFs
bCAuMnMgZWFzZS1pbi1vdXR9YS50aHVtYm5haWw6aG92ZXJ7Ym9yZGVyLWNvbG9yOiMwOGM7LXdl
YmtpdC1ib3gtc2hhZG93OjAgMXB4IDRweCByZ2JhKDAsMTA1LDIxNCwwLjI1KTstbW96LWJveC1z
aGFkb3c6MCAxcHggNHB4IHJnYmEoMCwxMDUsMjE0LDAuMjUpO2JveC1zaGFkb3c6MCAxcHggNHB4
IHJnYmEoMCwxMDUsMjE0LDAuMjUpfS50aHVtYm5haWw+aW1ne2Rpc3BsYXk6YmxvY2s7bWF4LXdp
ZHRoOjEwMCU7bWFyZ2luLXJpZ2h0OmF1dG87bWFyZ2luLWxlZnQ6YXV0b30udGh1bWJuYWlsIC5j
YXB0aW9ue3BhZGRpbmc6OXB4O2NvbG9yOiM1NTV9Lm1lZGlhLC5tZWRpYS1ib2R5e292ZXJmbG93
OmhpZGRlbjsqb3ZlcmZsb3c6dmlzaWJsZTt6b29tOjF9Lm1lZGlhLC5tZWRpYSAubWVkaWF7bWFy
Z2luLXRvcDoxNXB4fS5tZWRpYTpmaXJzdC1jaGlsZHttYXJnaW4tdG9wOjB9Lm1lZGlhLW9iamVj
dHtkaXNwbGF5OmJsb2NrfS5tZWRpYS1oZWFkaW5ne21hcmdpbjowIDAgNXB4fS5tZWRpYSAucHVs
bC1sZWZ0e21hcmdpbi1yaWdodDoxMHB4fS5tZWRpYSAucHVsbC1yaWdodHttYXJnaW4tbGVmdDox
MHB4fS5tZWRpYS1saXN0e21hcmdpbi1sZWZ0OjA7bGlzdC1zdHlsZTpub25lfS5sYWJlbCwuYmFk
Z2V7ZGlzcGxheTppbmxpbmUtYmxvY2s7cGFkZGluZzoycHggNHB4O2ZvbnQtc2l6ZToxMS44NDRw
eDtmb250LXdlaWdodDpib2xkO2xpbmUtaGVpZ2h0OjE0cHg7Y29sb3I6I2ZmZjt0ZXh0LXNoYWRv
dzowIC0xcHggMCByZ2JhKDAsMCwwLDAuMjUpO3doaXRlLXNwYWNlOm5vd3JhcDt2ZXJ0aWNhbC1h
bGlnbjpiYXNlbGluZTtiYWNrZ3JvdW5kLWNvbG9yOiM5OTl9LmxhYmVsey13ZWJraXQtYm9yZGVy
LXJhZGl1czozcHg7LW1vei1ib3JkZXItcmFkaXVzOjNweDtib3JkZXItcmFkaXVzOjNweH0uYmFk
Z2V7cGFkZGluZy1yaWdodDo5cHg7cGFkZGluZy1sZWZ0OjlweDstd2Via2l0LWJvcmRlci1yYWRp
dXM6OXB4Oy1tb3otYm9yZGVyLXJhZGl1czo5cHg7Ym9yZGVyLXJhZGl1czo5cHh9LmxhYmVsOmVt
cHR5LC5iYWRnZTplbXB0eXtkaXNwbGF5Om5vbmV9YS5sYWJlbDpob3ZlcixhLmJhZGdlOmhvdmVy
e2NvbG9yOiNmZmY7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y3Vyc29yOnBvaW50ZXJ9LmxhYmVsLWlt
cG9ydGFudCwuYmFkZ2UtaW1wb3J0YW50e2JhY2tncm91bmQtY29sb3I6I2I5NGE0OH0ubGFiZWwt
aW1wb3J0YW50W2hyZWZdLC5iYWRnZS1pbXBvcnRhbnRbaHJlZl17YmFja2dyb3VuZC1jb2xvcjoj
OTUzYjM5fS5sYWJlbC13YXJuaW5nLC5iYWRnZS13YXJuaW5ne2JhY2tncm91bmQtY29sb3I6I2Y4
OTQwNn0ubGFiZWwtd2FybmluZ1tocmVmXSwuYmFkZ2Utd2FybmluZ1tocmVmXXtiYWNrZ3JvdW5k
LWNvbG9yOiNjNjc2MDV9LmxhYmVsLXN1Y2Nlc3MsLmJhZGdlLXN1Y2Nlc3N7YmFja2dyb3VuZC1j
b2xvcjojNDY4ODQ3fS5sYWJlbC1zdWNjZXNzW2hyZWZdLC5iYWRnZS1zdWNjZXNzW2hyZWZde2Jh
Y2tncm91bmQtY29sb3I6IzM1NjYzNX0ubGFiZWwtaW5mbywuYmFkZ2UtaW5mb3tiYWNrZ3JvdW5k
LWNvbG9yOiMzYTg3YWR9LmxhYmVsLWluZm9baHJlZl0sLmJhZGdlLWluZm9baHJlZl17YmFja2dy
b3VuZC1jb2xvcjojMmQ2OTg3fS5sYWJlbC1pbnZlcnNlLC5iYWRnZS1pbnZlcnNle2JhY2tncm91
bmQtY29sb3I6IzMzM30ubGFiZWwtaW52ZXJzZVtocmVmXSwuYmFkZ2UtaW52ZXJzZVtocmVmXXti
YWNrZ3JvdW5kLWNvbG9yOiMxYTFhMWF9LmJ0biAubGFiZWwsLmJ0biAuYmFkZ2V7cG9zaXRpb246
cmVsYXRpdmU7dG9wOi0xcHh9LmJ0bi1taW5pIC5sYWJlbCwuYnRuLW1pbmkgLmJhZGdle3RvcDow
fUAtd2Via2l0LWtleWZyYW1lcyBwcm9ncmVzcy1iYXItc3RyaXBlc3tmcm9te2JhY2tncm91bmQt
cG9zaXRpb246NDBweCAwfXRve2JhY2tncm91bmQtcG9zaXRpb246MCAwfX1ALW1vei1rZXlmcmFt
ZXMgcHJvZ3Jlc3MtYmFyLXN0cmlwZXN7ZnJvbXtiYWNrZ3JvdW5kLXBvc2l0aW9uOjQwcHggMH10
b3tiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgMH19QC1tcy1rZXlmcmFtZXMgcHJvZ3Jlc3MtYmFyLXN0
cmlwZXN7ZnJvbXtiYWNrZ3JvdW5kLXBvc2l0aW9uOjQwcHggMH10b3tiYWNrZ3JvdW5kLXBvc2l0
aW9uOjAgMH19QC1vLWtleWZyYW1lcyBwcm9ncmVzcy1iYXItc3RyaXBlc3tmcm9te2JhY2tncm91
bmQtcG9zaXRpb246MCAwfXRve2JhY2tncm91bmQtcG9zaXRpb246NDBweCAwfX1Aa2V5ZnJhbWVz
IHByb2dyZXNzLWJhci1zdHJpcGVze2Zyb217YmFja2dyb3VuZC1wb3NpdGlvbjo0MHB4IDB9dG97
YmFja2dyb3VuZC1wb3NpdGlvbjowIDB9fS5wcm9ncmVzc3toZWlnaHQ6MjBweDttYXJnaW4tYm90
dG9tOjIwcHg7b3ZlcmZsb3c6aGlkZGVuO2JhY2tncm91bmQtY29sb3I6I2Y3ZjdmNztiYWNrZ3Jv
dW5kLWltYWdlOi1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwjZjVmNWY1LCNmOWY5ZjkpO2JhY2tn
cm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsMCAwLDAgMTAwJSxmcm9tKCNmNWY1
ZjUpLHRvKCNmOWY5ZjkpKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50
KHRvcCwjZjVmNWY1LCNmOWY5ZjkpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50
KHRvcCwjZjVmNWY1LCNmOWY5ZjkpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRv
IGJvdHRvbSwjZjVmNWY1LCNmOWY5ZjkpO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14Oy13ZWJr
aXQtYm9yZGVyLXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzOjRweDtib3JkZXItcmFkaXVz
OjRweDtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0
YXJ0Q29sb3JzdHI9JyNmZmY1ZjVmNScsZW5kQ29sb3JzdHI9JyNmZmY5ZjlmOScsR3JhZGllbnRU
eXBlPTApOy13ZWJraXQtYm94LXNoYWRvdzppbnNldCAwIDFweCAycHggcmdiYSgwLDAsMCwwLjEp
Oy1tb3otYm94LXNoYWRvdzppbnNldCAwIDFweCAycHggcmdiYSgwLDAsMCwwLjEpO2JveC1zaGFk
b3c6aW5zZXQgMCAxcHggMnB4IHJnYmEoMCwwLDAsMC4xKX0ucHJvZ3Jlc3MgLmJhcntmbG9hdDps
ZWZ0O3dpZHRoOjA7aGVpZ2h0OjEwMCU7Zm9udC1zaXplOjEycHg7Y29sb3I6I2ZmZjt0ZXh0LWFs
aWduOmNlbnRlcjt0ZXh0LXNoYWRvdzowIC0xcHggMCByZ2JhKDAsMCwwLDAuMjUpO2JhY2tncm91
bmQtY29sb3I6IzBlOTBkMjtiYWNrZ3JvdW5kLWltYWdlOi1tb3otbGluZWFyLWdyYWRpZW50KHRv
cCwjMTQ5YmRmLCMwNDgwYmUpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5l
YXIsMCAwLDAgMTAwJSxmcm9tKCMxNDliZGYpLHRvKCMwNDgwYmUpKTtiYWNrZ3JvdW5kLWltYWdl
Oi13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwjMTQ5YmRmLCMwNDgwYmUpO2JhY2tncm91bmQt
aW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KHRvcCwjMTQ5YmRmLCMwNDgwYmUpO2JhY2tncm91bmQt
aW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwjMTQ5YmRmLCMwNDgwYmUpO2JhY2tncm91
bmQtcmVwZWF0OnJlcGVhdC14O2ZpbHRlcjpwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3Nv
ZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI2ZmMTQ5YmRmJyxlbmRDb2xvcnN0cj0nI2ZmMDQ4
MGJlJyxHcmFkaWVudFR5cGU9MCk7LXdlYmtpdC1ib3gtc2hhZG93Omluc2V0IDAgLTFweCAwIHJn
YmEoMCwwLDAsMC4xNSk7LW1vei1ib3gtc2hhZG93Omluc2V0IDAgLTFweCAwIHJnYmEoMCwwLDAs
MC4xNSk7Ym94LXNoYWRvdzppbnNldCAwIC0xcHggMCByZ2JhKDAsMCwwLDAuMTUpOy13ZWJraXQt
Ym94LXNpemluZzpib3JkZXItYm94Oy1tb3otYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXpp
bmc6Ym9yZGVyLWJveDstd2Via2l0LXRyYW5zaXRpb246d2lkdGggLjZzIGVhc2U7LW1vei10cmFu
c2l0aW9uOndpZHRoIC42cyBlYXNlOy1vLXRyYW5zaXRpb246d2lkdGggLjZzIGVhc2U7dHJhbnNp
dGlvbjp3aWR0aCAuNnMgZWFzZX0ucHJvZ3Jlc3MgLmJhcisuYmFyey13ZWJraXQtYm94LXNoYWRv
dzppbnNldCAxcHggMCAwIHJnYmEoMCwwLDAsMC4xNSksaW5zZXQgMCAtMXB4IDAgcmdiYSgwLDAs
MCwwLjE1KTstbW96LWJveC1zaGFkb3c6aW5zZXQgMXB4IDAgMCByZ2JhKDAsMCwwLDAuMTUpLGlu
c2V0IDAgLTFweCAwIHJnYmEoMCwwLDAsMC4xNSk7Ym94LXNoYWRvdzppbnNldCAxcHggMCAwIHJn
YmEoMCwwLDAsMC4xNSksaW5zZXQgMCAtMXB4IDAgcmdiYSgwLDAsMCwwLjE1KX0ucHJvZ3Jlc3Mt
c3RyaXBlZCAuYmFye2JhY2tncm91bmQtY29sb3I6IzE0OWJkZjtiYWNrZ3JvdW5kLWltYWdlOi13
ZWJraXQtZ3JhZGllbnQobGluZWFyLDAgMTAwJSwxMDAlIDAsY29sb3Itc3RvcCgwLjI1LHJnYmEo
MjU1LDI1NSwyNTUsMC4xNSkpLGNvbG9yLXN0b3AoMC4yNSx0cmFuc3BhcmVudCksY29sb3Itc3Rv
cCgwLjUsdHJhbnNwYXJlbnQpLGNvbG9yLXN0b3AoMC41LHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkp
LGNvbG9yLXN0b3AoMC43NSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpKSxjb2xvci1zdG9wKDAuNzUs
dHJhbnNwYXJlbnQpLHRvKHRyYW5zcGFyZW50KSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWxp
bmVhci1ncmFkaWVudCg0NWRlZyxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDI1JSx0cmFuc3BhcmVu
dCAyNSUsdHJhbnNwYXJlbnQgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNTAlLHJnYmEoMjU1
LDI1NSwyNTUsMC4xNSkgNzUlLHRyYW5zcGFyZW50IDc1JSx0cmFuc3BhcmVudCk7YmFja2dyb3Vu
ZC1pbWFnZTotbW96LWxpbmVhci1ncmFkaWVudCg0NWRlZyxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUp
IDI1JSx0cmFuc3BhcmVudCAyNSUsdHJhbnNwYXJlbnQgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4x
NSkgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNzUlLHRyYW5zcGFyZW50IDc1JSx0cmFuc3Bh
cmVudCk7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQoNDVkZWcscmdiYSgyNTUs
MjU1LDI1NSwwLjE1KSAyNSUsdHJhbnNwYXJlbnQgMjUlLHRyYW5zcGFyZW50IDUwJSxyZ2JhKDI1
NSwyNTUsMjU1LDAuMTUpIDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDc1JSx0cmFuc3BhcmVu
dCA3NSUsdHJhbnNwYXJlbnQpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KDQ1ZGVn
LHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgMjUlLHRyYW5zcGFyZW50IDI1JSx0cmFuc3BhcmVudCA1
MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA3NSUs
dHJhbnNwYXJlbnQgNzUlLHRyYW5zcGFyZW50KTstd2Via2l0LWJhY2tncm91bmQtc2l6ZTo0MHB4
IDQwcHg7LW1vei1iYWNrZ3JvdW5kLXNpemU6NDBweCA0MHB4Oy1vLWJhY2tncm91bmQtc2l6ZTo0
MHB4IDQwcHg7YmFja2dyb3VuZC1zaXplOjQwcHggNDBweH0ucHJvZ3Jlc3MuYWN0aXZlIC5iYXJ7
LXdlYmtpdC1hbmltYXRpb246cHJvZ3Jlc3MtYmFyLXN0cmlwZXMgMnMgbGluZWFyIGluZmluaXRl
Oy1tb3otYW5pbWF0aW9uOnByb2dyZXNzLWJhci1zdHJpcGVzIDJzIGxpbmVhciBpbmZpbml0ZTst
bXMtYW5pbWF0aW9uOnByb2dyZXNzLWJhci1zdHJpcGVzIDJzIGxpbmVhciBpbmZpbml0ZTstby1h
bmltYXRpb246cHJvZ3Jlc3MtYmFyLXN0cmlwZXMgMnMgbGluZWFyIGluZmluaXRlO2FuaW1hdGlv
bjpwcm9ncmVzcy1iYXItc3RyaXBlcyAycyBsaW5lYXIgaW5maW5pdGV9LnByb2dyZXNzLWRhbmdl
ciAuYmFyLC5wcm9ncmVzcyAuYmFyLWRhbmdlcntiYWNrZ3JvdW5kLWNvbG9yOiNkZDUxNGM7YmFj
a2dyb3VuZC1pbWFnZTotbW96LWxpbmVhci1ncmFkaWVudCh0b3AsI2VlNWY1YiwjYzQzYzM1KTti
YWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtZ3JhZGllbnQobGluZWFyLDAgMCwwIDEwMCUsZnJvbSgj
ZWU1ZjViKSx0bygjYzQzYzM1KSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWxpbmVhci1ncmFk
aWVudCh0b3AsI2VlNWY1YiwjYzQzYzM1KTtiYWNrZ3JvdW5kLWltYWdlOi1vLWxpbmVhci1ncmFk
aWVudCh0b3AsI2VlNWY1YiwjYzQzYzM1KTtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVu
dCh0byBib3R0b20sI2VlNWY1YiwjYzQzYzM1KTtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteDtm
aWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29s
b3JzdHI9JyNmZmVlNWY1YicsZW5kQ29sb3JzdHI9JyNmZmM0M2MzNScsR3JhZGllbnRUeXBlPTAp
fS5wcm9ncmVzcy1kYW5nZXIucHJvZ3Jlc3Mtc3RyaXBlZCAuYmFyLC5wcm9ncmVzcy1zdHJpcGVk
IC5iYXItZGFuZ2Vye2JhY2tncm91bmQtY29sb3I6I2VlNWY1YjtiYWNrZ3JvdW5kLWltYWdlOi13
ZWJraXQtZ3JhZGllbnQobGluZWFyLDAgMTAwJSwxMDAlIDAsY29sb3Itc3RvcCgwLjI1LHJnYmEo
MjU1LDI1NSwyNTUsMC4xNSkpLGNvbG9yLXN0b3AoMC4yNSx0cmFuc3BhcmVudCksY29sb3Itc3Rv
cCgwLjUsdHJhbnNwYXJlbnQpLGNvbG9yLXN0b3AoMC41LHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkp
LGNvbG9yLXN0b3AoMC43NSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpKSxjb2xvci1zdG9wKDAuNzUs
dHJhbnNwYXJlbnQpLHRvKHRyYW5zcGFyZW50KSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWxp
bmVhci1ncmFkaWVudCg0NWRlZyxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDI1JSx0cmFuc3BhcmVu
dCAyNSUsdHJhbnNwYXJlbnQgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNTAlLHJnYmEoMjU1
LDI1NSwyNTUsMC4xNSkgNzUlLHRyYW5zcGFyZW50IDc1JSx0cmFuc3BhcmVudCk7YmFja2dyb3Vu
ZC1pbWFnZTotbW96LWxpbmVhci1ncmFkaWVudCg0NWRlZyxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUp
IDI1JSx0cmFuc3BhcmVudCAyNSUsdHJhbnNwYXJlbnQgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4x
NSkgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNzUlLHRyYW5zcGFyZW50IDc1JSx0cmFuc3Bh
cmVudCk7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQoNDVkZWcscmdiYSgyNTUs
MjU1LDI1NSwwLjE1KSAyNSUsdHJhbnNwYXJlbnQgMjUlLHRyYW5zcGFyZW50IDUwJSxyZ2JhKDI1
NSwyNTUsMjU1LDAuMTUpIDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDc1JSx0cmFuc3BhcmVu
dCA3NSUsdHJhbnNwYXJlbnQpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KDQ1ZGVn
LHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgMjUlLHRyYW5zcGFyZW50IDI1JSx0cmFuc3BhcmVudCA1
MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA3NSUs
dHJhbnNwYXJlbnQgNzUlLHRyYW5zcGFyZW50KX0ucHJvZ3Jlc3Mtc3VjY2VzcyAuYmFyLC5wcm9n
cmVzcyAuYmFyLXN1Y2Nlc3N7YmFja2dyb3VuZC1jb2xvcjojNWViOTVlO2JhY2tncm91bmQtaW1h
Z2U6LW1vei1saW5lYXItZ3JhZGllbnQodG9wLCM2MmM0NjIsIzU3YTk1Nyk7YmFja2dyb3VuZC1p
bWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciwwIDAsMCAxMDAlLGZyb20oIzYyYzQ2MiksdG8o
IzU3YTk1NykpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCM2
MmM0NjIsIzU3YTk1Nyk7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQodG9wLCM2
MmM0NjIsIzU3YTk1Nyk7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9t
LCM2MmM0NjIsIzU3YTk1Nyk7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7ZmlsdGVyOnByb2dp
ZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmY2
MmM0NjInLGVuZENvbG9yc3RyPScjZmY1N2E5NTcnLEdyYWRpZW50VHlwZT0wKX0ucHJvZ3Jlc3Mt
c3VjY2Vzcy5wcm9ncmVzcy1zdHJpcGVkIC5iYXIsLnByb2dyZXNzLXN0cmlwZWQgLmJhci1zdWNj
ZXNze2JhY2tncm91bmQtY29sb3I6IzYyYzQ2MjtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtZ3Jh
ZGllbnQobGluZWFyLDAgMTAwJSwxMDAlIDAsY29sb3Itc3RvcCgwLjI1LHJnYmEoMjU1LDI1NSwy
NTUsMC4xNSkpLGNvbG9yLXN0b3AoMC4yNSx0cmFuc3BhcmVudCksY29sb3Itc3RvcCgwLjUsdHJh
bnNwYXJlbnQpLGNvbG9yLXN0b3AoMC41LHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkpLGNvbG9yLXN0
b3AoMC43NSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpKSxjb2xvci1zdG9wKDAuNzUsdHJhbnNwYXJl
bnQpLHRvKHRyYW5zcGFyZW50KSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWxpbmVhci1ncmFk
aWVudCg0NWRlZyxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDI1JSx0cmFuc3BhcmVudCAyNSUsdHJh
bnNwYXJlbnQgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNTAlLHJnYmEoMjU1LDI1NSwyNTUs
MC4xNSkgNzUlLHRyYW5zcGFyZW50IDc1JSx0cmFuc3BhcmVudCk7YmFja2dyb3VuZC1pbWFnZTot
bW96LWxpbmVhci1ncmFkaWVudCg0NWRlZyxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDI1JSx0cmFu
c3BhcmVudCAyNSUsdHJhbnNwYXJlbnQgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNTAlLHJn
YmEoMjU1LDI1NSwyNTUsMC4xNSkgNzUlLHRyYW5zcGFyZW50IDc1JSx0cmFuc3BhcmVudCk7YmFj
a2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQoNDVkZWcscmdiYSgyNTUsMjU1LDI1NSww
LjE1KSAyNSUsdHJhbnNwYXJlbnQgMjUlLHRyYW5zcGFyZW50IDUwJSxyZ2JhKDI1NSwyNTUsMjU1
LDAuMTUpIDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDc1JSx0cmFuc3BhcmVudCA3NSUsdHJh
bnNwYXJlbnQpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KDQ1ZGVnLHJnYmEoMjU1
LDI1NSwyNTUsMC4xNSkgMjUlLHRyYW5zcGFyZW50IDI1JSx0cmFuc3BhcmVudCA1MCUscmdiYSgy
NTUsMjU1LDI1NSwwLjE1KSA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA3NSUsdHJhbnNwYXJl
bnQgNzUlLHRyYW5zcGFyZW50KX0ucHJvZ3Jlc3MtaW5mbyAuYmFyLC5wcm9ncmVzcyAuYmFyLWlu
Zm97YmFja2dyb3VuZC1jb2xvcjojNGJiMWNmO2JhY2tncm91bmQtaW1hZ2U6LW1vei1saW5lYXIt
Z3JhZGllbnQodG9wLCM1YmMwZGUsIzMzOWJiOSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdy
YWRpZW50KGxpbmVhciwwIDAsMCAxMDAlLGZyb20oIzViYzBkZSksdG8oIzMzOWJiOSkpO2JhY2tn
cm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCM1YmMwZGUsIzMzOWJiOSk7
YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQodG9wLCM1YmMwZGUsIzMzOWJiOSk7
YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCM1YmMwZGUsIzMzOWJi
OSk7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNm
b3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmY1YmMwZGUnLGVuZENvbG9y
c3RyPScjZmYzMzliYjknLEdyYWRpZW50VHlwZT0wKX0ucHJvZ3Jlc3MtaW5mby5wcm9ncmVzcy1z
dHJpcGVkIC5iYXIsLnByb2dyZXNzLXN0cmlwZWQgLmJhci1pbmZve2JhY2tncm91bmQtY29sb3I6
IzViYzBkZTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtZ3JhZGllbnQobGluZWFyLDAgMTAwJSwx
MDAlIDAsY29sb3Itc3RvcCgwLjI1LHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkpLGNvbG9yLXN0b3Ao
MC4yNSx0cmFuc3BhcmVudCksY29sb3Itc3RvcCgwLjUsdHJhbnNwYXJlbnQpLGNvbG9yLXN0b3Ao
MC41LHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkpLGNvbG9yLXN0b3AoMC43NSxyZ2JhKDI1NSwyNTUs
MjU1LDAuMTUpKSxjb2xvci1zdG9wKDAuNzUsdHJhbnNwYXJlbnQpLHRvKHRyYW5zcGFyZW50KSk7
YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWxpbmVhci1ncmFkaWVudCg0NWRlZyxyZ2JhKDI1NSwy
NTUsMjU1LDAuMTUpIDI1JSx0cmFuc3BhcmVudCAyNSUsdHJhbnNwYXJlbnQgNTAlLHJnYmEoMjU1
LDI1NSwyNTUsMC4xNSkgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNzUlLHRyYW5zcGFyZW50
IDc1JSx0cmFuc3BhcmVudCk7YmFja2dyb3VuZC1pbWFnZTotbW96LWxpbmVhci1ncmFkaWVudCg0
NWRlZyxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDI1JSx0cmFuc3BhcmVudCAyNSUsdHJhbnNwYXJl
bnQgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkg
NzUlLHRyYW5zcGFyZW50IDc1JSx0cmFuc3BhcmVudCk7YmFja2dyb3VuZC1pbWFnZTotby1saW5l
YXItZ3JhZGllbnQoNDVkZWcscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSAyNSUsdHJhbnNwYXJlbnQg
MjUlLHRyYW5zcGFyZW50IDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDUwJSxyZ2JhKDI1NSwy
NTUsMjU1LDAuMTUpIDc1JSx0cmFuc3BhcmVudCA3NSUsdHJhbnNwYXJlbnQpO2JhY2tncm91bmQt
aW1hZ2U6bGluZWFyLWdyYWRpZW50KDQ1ZGVnLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgMjUlLHRy
YW5zcGFyZW50IDI1JSx0cmFuc3BhcmVudCA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA1MCUs
cmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA3NSUsdHJhbnNwYXJlbnQgNzUlLHRyYW5zcGFyZW50KX0u
cHJvZ3Jlc3Mtd2FybmluZyAuYmFyLC5wcm9ncmVzcyAuYmFyLXdhcm5pbmd7YmFja2dyb3VuZC1j
b2xvcjojZmFhNzMyO2JhY2tncm91bmQtaW1hZ2U6LW1vei1saW5lYXItZ3JhZGllbnQodG9wLCNm
YmI0NTAsI2Y4OTQwNik7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciww
IDAsMCAxMDAlLGZyb20oI2ZiYjQ1MCksdG8oI2Y4OTQwNikpO2JhY2tncm91bmQtaW1hZ2U6LXdl
YmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCNmYmI0NTAsI2Y4OTQwNik7YmFja2dyb3VuZC1pbWFn
ZTotby1saW5lYXItZ3JhZGllbnQodG9wLCNmYmI0NTAsI2Y4OTQwNik7YmFja2dyb3VuZC1pbWFn
ZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCNmYmI0NTAsI2Y4OTQwNik7YmFja2dyb3VuZC1y
ZXBlYXQ6cmVwZWF0LXg7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5n
cmFkaWVudChzdGFydENvbG9yc3RyPScjZmZmYmI0NTAnLGVuZENvbG9yc3RyPScjZmZmODk0MDYn
LEdyYWRpZW50VHlwZT0wKX0ucHJvZ3Jlc3Mtd2FybmluZy5wcm9ncmVzcy1zdHJpcGVkIC5iYXIs
LnByb2dyZXNzLXN0cmlwZWQgLmJhci13YXJuaW5ne2JhY2tncm91bmQtY29sb3I6I2ZiYjQ1MDti
YWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtZ3JhZGllbnQobGluZWFyLDAgMTAwJSwxMDAlIDAsY29s
b3Itc3RvcCgwLjI1LHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkpLGNvbG9yLXN0b3AoMC4yNSx0cmFu
c3BhcmVudCksY29sb3Itc3RvcCgwLjUsdHJhbnNwYXJlbnQpLGNvbG9yLXN0b3AoMC41LHJnYmEo
MjU1LDI1NSwyNTUsMC4xNSkpLGNvbG9yLXN0b3AoMC43NSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUp
KSxjb2xvci1zdG9wKDAuNzUsdHJhbnNwYXJlbnQpLHRvKHRyYW5zcGFyZW50KSk7YmFja2dyb3Vu
ZC1pbWFnZTotd2Via2l0LWxpbmVhci1ncmFkaWVudCg0NWRlZyxyZ2JhKDI1NSwyNTUsMjU1LDAu
MTUpIDI1JSx0cmFuc3BhcmVudCAyNSUsdHJhbnNwYXJlbnQgNTAlLHJnYmEoMjU1LDI1NSwyNTUs
MC4xNSkgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNzUlLHRyYW5zcGFyZW50IDc1JSx0cmFu
c3BhcmVudCk7YmFja2dyb3VuZC1pbWFnZTotbW96LWxpbmVhci1ncmFkaWVudCg0NWRlZyxyZ2Jh
KDI1NSwyNTUsMjU1LDAuMTUpIDI1JSx0cmFuc3BhcmVudCAyNSUsdHJhbnNwYXJlbnQgNTAlLHJn
YmEoMjU1LDI1NSwyNTUsMC4xNSkgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNzUlLHRyYW5z
cGFyZW50IDc1JSx0cmFuc3BhcmVudCk7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGll
bnQoNDVkZWcscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSAyNSUsdHJhbnNwYXJlbnQgMjUlLHRyYW5z
cGFyZW50IDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAu
MTUpIDc1JSx0cmFuc3BhcmVudCA3NSUsdHJhbnNwYXJlbnQpO2JhY2tncm91bmQtaW1hZ2U6bGlu
ZWFyLWdyYWRpZW50KDQ1ZGVnLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgMjUlLHRyYW5zcGFyZW50
IDI1JSx0cmFuc3BhcmVudCA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA1MCUscmdiYSgyNTUs
MjU1LDI1NSwwLjE1KSA3NSUsdHJhbnNwYXJlbnQgNzUlLHRyYW5zcGFyZW50KX0uYWNjb3JkaW9u
e21hcmdpbi1ib3R0b206MjBweH0uYWNjb3JkaW9uLWdyb3Vwe21hcmdpbi1ib3R0b206MnB4O2Jv
cmRlcjoxcHggc29saWQgI2U1ZTVlNTstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9y
ZGVyLXJhZGl1czo0cHg7Ym9yZGVyLXJhZGl1czo0cHh9LmFjY29yZGlvbi1oZWFkaW5ne2JvcmRl
ci1ib3R0b206MH0uYWNjb3JkaW9uLWhlYWRpbmcgLmFjY29yZGlvbi10b2dnbGV7ZGlzcGxheTpi
bG9jaztwYWRkaW5nOjhweCAxNXB4fS5hY2NvcmRpb24tdG9nZ2xle2N1cnNvcjpwb2ludGVyfS5h
Y2NvcmRpb24taW5uZXJ7cGFkZGluZzo5cHggMTVweDtib3JkZXItdG9wOjFweCBzb2xpZCAjZTVl
NWU1fS5jYXJvdXNlbHtwb3NpdGlvbjpyZWxhdGl2ZTttYXJnaW4tYm90dG9tOjIwcHg7bGluZS1o
ZWlnaHQ6MX0uY2Fyb3VzZWwtaW5uZXJ7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6MTAwJTtvdmVy
ZmxvdzpoaWRkZW59LmNhcm91c2VsLWlubmVyPi5pdGVte3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3Bs
YXk6bm9uZTstd2Via2l0LXRyYW5zaXRpb246LjZzIGVhc2UtaW4tb3V0IGxlZnQ7LW1vei10cmFu
c2l0aW9uOi42cyBlYXNlLWluLW91dCBsZWZ0Oy1vLXRyYW5zaXRpb246LjZzIGVhc2UtaW4tb3V0
IGxlZnQ7dHJhbnNpdGlvbjouNnMgZWFzZS1pbi1vdXQgbGVmdH0uY2Fyb3VzZWwtaW5uZXI+Lml0
ZW0+aW1ne2Rpc3BsYXk6YmxvY2s7bGluZS1oZWlnaHQ6MX0uY2Fyb3VzZWwtaW5uZXI+LmFjdGl2
ZSwuY2Fyb3VzZWwtaW5uZXI+Lm5leHQsLmNhcm91c2VsLWlubmVyPi5wcmV2e2Rpc3BsYXk6Ymxv
Y2t9LmNhcm91c2VsLWlubmVyPi5hY3RpdmV7bGVmdDowfS5jYXJvdXNlbC1pbm5lcj4ubmV4dCwu
Y2Fyb3VzZWwtaW5uZXI+LnByZXZ7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7d2lkdGg6MTAwJX0u
Y2Fyb3VzZWwtaW5uZXI+Lm5leHR7bGVmdDoxMDAlfS5jYXJvdXNlbC1pbm5lcj4ucHJldntsZWZ0
Oi0xMDAlfS5jYXJvdXNlbC1pbm5lcj4ubmV4dC5sZWZ0LC5jYXJvdXNlbC1pbm5lcj4ucHJldi5y
aWdodHtsZWZ0OjB9LmNhcm91c2VsLWlubmVyPi5hY3RpdmUubGVmdHtsZWZ0Oi0xMDAlfS5jYXJv
dXNlbC1pbm5lcj4uYWN0aXZlLnJpZ2h0e2xlZnQ6MTAwJX0uY2Fyb3VzZWwtY29udHJvbHtwb3Np
dGlvbjphYnNvbHV0ZTt0b3A6NDAlO2xlZnQ6MTVweDt3aWR0aDo0MHB4O2hlaWdodDo0MHB4O21h
cmdpbi10b3A6LTIwcHg7Zm9udC1zaXplOjYwcHg7Zm9udC13ZWlnaHQ6MTAwO2xpbmUtaGVpZ2h0
OjMwcHg7Y29sb3I6I2ZmZjt0ZXh0LWFsaWduOmNlbnRlcjtiYWNrZ3JvdW5kOiMyMjI7Ym9yZGVy
OjNweCBzb2xpZCAjZmZmOy13ZWJraXQtYm9yZGVyLXJhZGl1czoyM3B4Oy1tb3otYm9yZGVyLXJh
ZGl1czoyM3B4O2JvcmRlci1yYWRpdXM6MjNweDtvcGFjaXR5Oi41O2ZpbHRlcjphbHBoYShvcGFj
aXR5PTUwKX0uY2Fyb3VzZWwtY29udHJvbC5yaWdodHtyaWdodDoxNXB4O2xlZnQ6YXV0b30uY2Fy
b3VzZWwtY29udHJvbDpob3Zlcntjb2xvcjojZmZmO3RleHQtZGVjb3JhdGlvbjpub25lO29wYWNp
dHk6Ljk7ZmlsdGVyOmFscGhhKG9wYWNpdHk9OTApfS5jYXJvdXNlbC1jYXB0aW9ue3Bvc2l0aW9u
OmFic29sdXRlO3JpZ2h0OjA7Ym90dG9tOjA7bGVmdDowO3BhZGRpbmc6MTVweDtiYWNrZ3JvdW5k
OiMzMzM7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLDAuNzUpfS5jYXJvdXNlbC1jYXB0aW9uIGg0LC5j
YXJvdXNlbC1jYXB0aW9uIHB7bGluZS1oZWlnaHQ6MjBweDtjb2xvcjojZmZmfS5jYXJvdXNlbC1j
YXB0aW9uIGg0e21hcmdpbjowIDAgNXB4fS5jYXJvdXNlbC1jYXB0aW9uIHB7bWFyZ2luLWJvdHRv
bTowfS5oZXJvLXVuaXR7cGFkZGluZzo2MHB4O21hcmdpbi1ib3R0b206MzBweDtmb250LXNpemU6
MThweDtmb250LXdlaWdodDoyMDA7bGluZS1oZWlnaHQ6MzBweDtjb2xvcjppbmhlcml0O2JhY2tn
cm91bmQtY29sb3I6I2VlZTstd2Via2l0LWJvcmRlci1yYWRpdXM6NnB4Oy1tb3otYm9yZGVyLXJh
ZGl1czo2cHg7Ym9yZGVyLXJhZGl1czo2cHh9Lmhlcm8tdW5pdCBoMXttYXJnaW4tYm90dG9tOjA7
Zm9udC1zaXplOjYwcHg7bGluZS1oZWlnaHQ6MTtsZXR0ZXItc3BhY2luZzotMXB4O2NvbG9yOmlu
aGVyaXR9Lmhlcm8tdW5pdCBsaXtsaW5lLWhlaWdodDozMHB4fS5wdWxsLXJpZ2h0e2Zsb2F0OnJp
Z2h0fS5wdWxsLWxlZnR7ZmxvYXQ6bGVmdH0uaGlkZXtkaXNwbGF5Om5vbmV9LnNob3d7ZGlzcGxh
eTpibG9ja30uaW52aXNpYmxle3Zpc2liaWxpdHk6aGlkZGVufS5hZmZpeHtwb3NpdGlvbjpmaXhl
ZH0KSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBs
ZS1hcHAvY29tcG9uZW50cy9ib290c3RyYXAvanMvYm9vdHN0cmFwLmpzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29t
cG9uZW50cy9ib290c3RyYXAvanMvYm9vdHN0cmFwLmpzCShyZXZpc2lvbiAwKQorKysgUGVyZm9y
bWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRz
L2Jvb3RzdHJhcC9qcy9ib290c3RyYXAuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMTU5
IEBACisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KKyAqIGJvb3RzdHJhcC10cmFuc2l0aW9uLmpzIHYyLjIuMgorICogaHR0cDovL3R3aXR0ZXIu
Z2l0aHViLmNvbS9ib290c3RyYXAvamF2YXNjcmlwdC5odG1sI3RyYW5zaXRpb25zCisgKiA9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHly
aWdodCAyMDEyIFR3aXR0ZXIsIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hl
IExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVz
ZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlv
dSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cu
YXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBi
eSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRp
c3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIg
QkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwg
ZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNw
ZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25z
IHVuZGVyIHRoZSBMaWNlbnNlLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisKKyFmdW5jdGlvbiAoJCkgeworCisgICJ1
c2Ugc3RyaWN0IjsgLy8ganNoaW50IDtfOworCisKKyAgLyogQ1NTIFRSQU5TSVRJT04gU1VQUE9S
VCAoaHR0cDovL3d3dy5tb2Rlcm5penIuY29tLykKKyAgICogPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisgICQoZnVuY3Rpb24gKCkg
eworCisgICAgJC5zdXBwb3J0LnRyYW5zaXRpb24gPSAoZnVuY3Rpb24gKCkgeworCisgICAgICB2
YXIgdHJhbnNpdGlvbkVuZCA9IChmdW5jdGlvbiAoKSB7CisKKyAgICAgICAgdmFyIGVsID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgnYm9vdHN0cmFwJykKKyAgICAgICAgICAsIHRyYW5zRW5kRXZl
bnROYW1lcyA9IHsKKyAgICAgICAgICAgICAgICdXZWJraXRUcmFuc2l0aW9uJyA6ICd3ZWJraXRU
cmFuc2l0aW9uRW5kJworICAgICAgICAgICAgLCAgJ01velRyYW5zaXRpb24nICAgIDogJ3RyYW5z
aXRpb25lbmQnCisgICAgICAgICAgICAsICAnT1RyYW5zaXRpb24nICAgICAgOiAnb1RyYW5zaXRp
b25FbmQgb3RyYW5zaXRpb25lbmQnCisgICAgICAgICAgICAsICAndHJhbnNpdGlvbicgICAgICAg
OiAndHJhbnNpdGlvbmVuZCcKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAsIG5hbWUKKworICAg
ICAgICBmb3IgKG5hbWUgaW4gdHJhbnNFbmRFdmVudE5hbWVzKXsKKyAgICAgICAgICBpZiAoZWwu
c3R5bGVbbmFtZV0gIT09IHVuZGVmaW5lZCkgeworICAgICAgICAgICAgcmV0dXJuIHRyYW5zRW5k
RXZlbnROYW1lc1tuYW1lXQorICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICB9KCkpCisK
KyAgICAgIHJldHVybiB0cmFuc2l0aW9uRW5kICYmIHsKKyAgICAgICAgZW5kOiB0cmFuc2l0aW9u
RW5kCisgICAgICB9CisKKyAgICB9KSgpCisKKyAgfSkKKworfSh3aW5kb3cualF1ZXJ5KTsvKiA9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
CisgKiBib290c3RyYXAtYWxlcnQuanMgdjIuMi4yCisgKiBodHRwOi8vdHdpdHRlci5naXRodWIu
Y29tL2Jvb3RzdHJhcC9qYXZhc2NyaXB0Lmh0bWwjYWxlcnRzCisgKiA9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQg
MjAxMiBUd2l0dGVyLCBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNl
bnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhp
cyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5
IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNo
ZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBw
bGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmli
dXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lT
LAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhl
ciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZp
YyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRl
ciB0aGUgTGljZW5zZS4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0gKi8KKworCishZnVuY3Rpb24gKCQpIHsKKworICAidXNlIHN0
cmljdCI7IC8vIGpzaGludCA7XzsKKworCisgLyogQUxFUlQgQ0xBU1MgREVGSU5JVElPTgorICAq
ID09PT09PT09PT09PT09PT09PT09PT0gKi8KKworICB2YXIgZGlzbWlzcyA9ICdbZGF0YS1kaXNt
aXNzPSJhbGVydCJdJworICAgICwgQWxlcnQgPSBmdW5jdGlvbiAoZWwpIHsKKyAgICAgICAgJChl
bCkub24oJ2NsaWNrJywgZGlzbWlzcywgdGhpcy5jbG9zZSkKKyAgICAgIH0KKworICBBbGVydC5w
cm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbiAoZSkgeworICAgIHZhciAkdGhpcyA9ICQodGhpcykK
KyAgICAgICwgc2VsZWN0b3IgPSAkdGhpcy5hdHRyKCdkYXRhLXRhcmdldCcpCisgICAgICAsICRw
YXJlbnQKKworICAgIGlmICghc2VsZWN0b3IpIHsKKyAgICAgIHNlbGVjdG9yID0gJHRoaXMuYXR0
cignaHJlZicpCisgICAgICBzZWxlY3RvciA9IHNlbGVjdG9yICYmIHNlbGVjdG9yLnJlcGxhY2Uo
Ly4qKD89I1teXHNdKiQpLywgJycpIC8vc3RyaXAgZm9yIGllNworICAgIH0KKworICAgICRwYXJl
bnQgPSAkKHNlbGVjdG9yKQorCisgICAgZSAmJiBlLnByZXZlbnREZWZhdWx0KCkKKworICAgICRw
YXJlbnQubGVuZ3RoIHx8ICgkcGFyZW50ID0gJHRoaXMuaGFzQ2xhc3MoJ2FsZXJ0JykgPyAkdGhp
cyA6ICR0aGlzLnBhcmVudCgpKQorCisgICAgJHBhcmVudC50cmlnZ2VyKGUgPSAkLkV2ZW50KCdj
bG9zZScpKQorCisgICAgaWYgKGUuaXNEZWZhdWx0UHJldmVudGVkKCkpIHJldHVybgorCisgICAg
JHBhcmVudC5yZW1vdmVDbGFzcygnaW4nKQorCisgICAgZnVuY3Rpb24gcmVtb3ZlRWxlbWVudCgp
IHsKKyAgICAgICRwYXJlbnQKKyAgICAgICAgLnRyaWdnZXIoJ2Nsb3NlZCcpCisgICAgICAgIC5y
ZW1vdmUoKQorICAgIH0KKworICAgICQuc3VwcG9ydC50cmFuc2l0aW9uICYmICRwYXJlbnQuaGFz
Q2xhc3MoJ2ZhZGUnKSA/CisgICAgICAkcGFyZW50Lm9uKCQuc3VwcG9ydC50cmFuc2l0aW9uLmVu
ZCwgcmVtb3ZlRWxlbWVudCkgOgorICAgICAgcmVtb3ZlRWxlbWVudCgpCisgIH0KKworCisgLyog
QUxFUlQgUExVR0lOIERFRklOSVRJT04KKyAgKiA9PT09PT09PT09PT09PT09PT09PT09PSAqLwor
CisgIHZhciBvbGQgPSAkLmZuLmFsZXJ0CisKKyAgJC5mbi5hbGVydCA9IGZ1bmN0aW9uIChvcHRp
b24pIHsKKyAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHsKKyAgICAgIHZhciAkdGhp
cyA9ICQodGhpcykKKyAgICAgICAgLCBkYXRhID0gJHRoaXMuZGF0YSgnYWxlcnQnKQorICAgICAg
aWYgKCFkYXRhKSAkdGhpcy5kYXRhKCdhbGVydCcsIChkYXRhID0gbmV3IEFsZXJ0KHRoaXMpKSkK
KyAgICAgIGlmICh0eXBlb2Ygb3B0aW9uID09ICdzdHJpbmcnKSBkYXRhW29wdGlvbl0uY2FsbCgk
dGhpcykKKyAgICB9KQorICB9CisKKyAgJC5mbi5hbGVydC5Db25zdHJ1Y3RvciA9IEFsZXJ0CisK
KworIC8qIEFMRVJUIE5PIENPTkZMSUNUCisgICogPT09PT09PT09PT09PT09PT0gKi8KKworICAk
LmZuLmFsZXJ0Lm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7CisgICAgJC5mbi5hbGVydCA9IG9s
ZAorICAgIHJldHVybiB0aGlzCisgIH0KKworCisgLyogQUxFUlQgREFUQS1BUEkKKyAgKiA9PT09
PT09PT09PT09PSAqLworCisgICQoZG9jdW1lbnQpLm9uKCdjbGljay5hbGVydC5kYXRhLWFwaScs
IGRpc21pc3MsIEFsZXJ0LnByb3RvdHlwZS5jbG9zZSkKKworfSh3aW5kb3cualF1ZXJ5KTsvKiA9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KKyAqIGJvb3RzdHJhcC1idXR0b24uanMgdjIuMi4yCisgKiBodHRwOi8vdHdpdHRlci5naXRo
dWIuY29tL2Jvb3RzdHJhcC9qYXZhc2NyaXB0Lmh0bWwjYnV0dG9ucworICogPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5
cmlnaHQgMjAxMiBUd2l0dGVyLCBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNo
ZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1
c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZ
b3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3
LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQg
YnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBk
aXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMi
IEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQs
IGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBz
cGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9u
cyB1bmRlciB0aGUgTGljZW5zZS4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisKKyFmdW5jdGlvbiAoJCkgeworCisg
ICJ1c2Ugc3RyaWN0IjsgLy8ganNoaW50IDtfOworCisKKyAvKiBCVVRUT04gUFVCTElDIENMQVNT
IERFRklOSVRJT04KKyAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworICB2
YXIgQnV0dG9uID0gZnVuY3Rpb24gKGVsZW1lbnQsIG9wdGlvbnMpIHsKKyAgICB0aGlzLiRlbGVt
ZW50ID0gJChlbGVtZW50KQorICAgIHRoaXMub3B0aW9ucyA9ICQuZXh0ZW5kKHt9LCAkLmZuLmJ1
dHRvbi5kZWZhdWx0cywgb3B0aW9ucykKKyAgfQorCisgIEJ1dHRvbi5wcm90b3R5cGUuc2V0U3Rh
dGUgPSBmdW5jdGlvbiAoc3RhdGUpIHsKKyAgICB2YXIgZCA9ICdkaXNhYmxlZCcKKyAgICAgICwg
JGVsID0gdGhpcy4kZWxlbWVudAorICAgICAgLCBkYXRhID0gJGVsLmRhdGEoKQorICAgICAgLCB2
YWwgPSAkZWwuaXMoJ2lucHV0JykgPyAndmFsJyA6ICdodG1sJworCisgICAgc3RhdGUgPSBzdGF0
ZSArICdUZXh0JworICAgIGRhdGEucmVzZXRUZXh0IHx8ICRlbC5kYXRhKCdyZXNldFRleHQnLCAk
ZWxbdmFsXSgpKQorCisgICAgJGVsW3ZhbF0oZGF0YVtzdGF0ZV0gfHwgdGhpcy5vcHRpb25zW3N0
YXRlXSkKKworICAgIC8vIHB1c2ggdG8gZXZlbnQgbG9vcCB0byBhbGxvdyBmb3JtcyB0byBzdWJt
aXQKKyAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKKyAgICAgIHN0YXRlID09ICdsb2FkaW5n
VGV4dCcgPworICAgICAgICAkZWwuYWRkQ2xhc3MoZCkuYXR0cihkLCBkKSA6CisgICAgICAgICRl
bC5yZW1vdmVDbGFzcyhkKS5yZW1vdmVBdHRyKGQpCisgICAgfSwgMCkKKyAgfQorCisgIEJ1dHRv
bi5wcm90b3R5cGUudG9nZ2xlID0gZnVuY3Rpb24gKCkgeworICAgIHZhciAkcGFyZW50ID0gdGhp
cy4kZWxlbWVudC5jbG9zZXN0KCdbZGF0YS10b2dnbGU9ImJ1dHRvbnMtcmFkaW8iXScpCisKKyAg
ICAkcGFyZW50ICYmICRwYXJlbnQKKyAgICAgIC5maW5kKCcuYWN0aXZlJykKKyAgICAgIC5yZW1v
dmVDbGFzcygnYWN0aXZlJykKKworICAgIHRoaXMuJGVsZW1lbnQudG9nZ2xlQ2xhc3MoJ2FjdGl2
ZScpCisgIH0KKworCisgLyogQlVUVE9OIFBMVUdJTiBERUZJTklUSU9OCisgICogPT09PT09PT09
PT09PT09PT09PT09PT09ICovCisKKyAgdmFyIG9sZCA9ICQuZm4uYnV0dG9uCisKKyAgJC5mbi5i
dXR0b24gPSBmdW5jdGlvbiAob3B0aW9uKSB7CisgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlv
biAoKSB7CisgICAgICB2YXIgJHRoaXMgPSAkKHRoaXMpCisgICAgICAgICwgZGF0YSA9ICR0aGlz
LmRhdGEoJ2J1dHRvbicpCisgICAgICAgICwgb3B0aW9ucyA9IHR5cGVvZiBvcHRpb24gPT0gJ29i
amVjdCcgJiYgb3B0aW9uCisgICAgICBpZiAoIWRhdGEpICR0aGlzLmRhdGEoJ2J1dHRvbicsIChk
YXRhID0gbmV3IEJ1dHRvbih0aGlzLCBvcHRpb25zKSkpCisgICAgICBpZiAob3B0aW9uID09ICd0
b2dnbGUnKSBkYXRhLnRvZ2dsZSgpCisgICAgICBlbHNlIGlmIChvcHRpb24pIGRhdGEuc2V0U3Rh
dGUob3B0aW9uKQorICAgIH0pCisgIH0KKworICAkLmZuLmJ1dHRvbi5kZWZhdWx0cyA9IHsKKyAg
ICBsb2FkaW5nVGV4dDogJ2xvYWRpbmcuLi4nCisgIH0KKworICAkLmZuLmJ1dHRvbi5Db25zdHJ1
Y3RvciA9IEJ1dHRvbgorCisKKyAvKiBCVVRUT04gTk8gQ09ORkxJQ1QKKyAgKiA9PT09PT09PT09
PT09PT09PT0gKi8KKworICAkLmZuLmJ1dHRvbi5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKCkgewor
ICAgICQuZm4uYnV0dG9uID0gb2xkCisgICAgcmV0dXJuIHRoaXMKKyAgfQorCisKKyAvKiBCVVRU
T04gREFUQS1BUEkKKyAgKiA9PT09PT09PT09PT09PT0gKi8KKworICAkKGRvY3VtZW50KS5vbign
Y2xpY2suYnV0dG9uLmRhdGEtYXBpJywgJ1tkYXRhLXRvZ2dsZV49YnV0dG9uXScsIGZ1bmN0aW9u
IChlKSB7CisgICAgdmFyICRidG4gPSAkKGUudGFyZ2V0KQorICAgIGlmICghJGJ0bi5oYXNDbGFz
cygnYnRuJykpICRidG4gPSAkYnRuLmNsb3Nlc3QoJy5idG4nKQorICAgICRidG4uYnV0dG9uKCd0
b2dnbGUnKQorICB9KQorCit9KHdpbmRvdy5qUXVlcnkpOy8qID09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIGJvb3RzdHJhcC1jYXJv
dXNlbC5qcyB2Mi4yLjIKKyAqIGh0dHA6Ly90d2l0dGVyLmdpdGh1Yi5jb20vYm9vdHN0cmFwL2ph
dmFzY3JpcHQuaHRtbCNjYXJvdXNlbAorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IDIwMTIgVHdpdHRlciwg
SW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAy
LjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQg
aW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5
IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2Vz
L0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9y
IGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhl
IExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQg
V0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBp
bXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292
ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2Uu
CisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09ICovCisKKworIWZ1bmN0aW9uICgkKSB7CisKKyAgInVzZSBzdHJpY3QiOyAvLyBqc2hp
bnQgO187CisKKworIC8qIENBUk9VU0VMIENMQVNTIERFRklOSVRJT04KKyAgKiA9PT09PT09PT09
PT09PT09PT09PT09PT09ICovCisKKyAgdmFyIENhcm91c2VsID0gZnVuY3Rpb24gKGVsZW1lbnQs
IG9wdGlvbnMpIHsKKyAgICB0aGlzLiRlbGVtZW50ID0gJChlbGVtZW50KQorICAgIHRoaXMub3B0
aW9ucyA9IG9wdGlvbnMKKyAgICB0aGlzLm9wdGlvbnMucGF1c2UgPT0gJ2hvdmVyJyAmJiB0aGlz
LiRlbGVtZW50CisgICAgICAub24oJ21vdXNlZW50ZXInLCAkLnByb3h5KHRoaXMucGF1c2UsIHRo
aXMpKQorICAgICAgLm9uKCdtb3VzZWxlYXZlJywgJC5wcm94eSh0aGlzLmN5Y2xlLCB0aGlzKSkK
KyAgfQorCisgIENhcm91c2VsLnByb3RvdHlwZSA9IHsKKworICAgIGN5Y2xlOiBmdW5jdGlvbiAo
ZSkgeworICAgICAgaWYgKCFlKSB0aGlzLnBhdXNlZCA9IGZhbHNlCisgICAgICB0aGlzLm9wdGlv
bnMuaW50ZXJ2YWwKKyAgICAgICAgJiYgIXRoaXMucGF1c2VkCisgICAgICAgICYmICh0aGlzLmlu
dGVydmFsID0gc2V0SW50ZXJ2YWwoJC5wcm94eSh0aGlzLm5leHQsIHRoaXMpLCB0aGlzLm9wdGlv
bnMuaW50ZXJ2YWwpKQorICAgICAgcmV0dXJuIHRoaXMKKyAgICB9CisKKyAgLCB0bzogZnVuY3Rp
b24gKHBvcykgeworICAgICAgdmFyICRhY3RpdmUgPSB0aGlzLiRlbGVtZW50LmZpbmQoJy5pdGVt
LmFjdGl2ZScpCisgICAgICAgICwgY2hpbGRyZW4gPSAkYWN0aXZlLnBhcmVudCgpLmNoaWxkcmVu
KCkKKyAgICAgICAgLCBhY3RpdmVQb3MgPSBjaGlsZHJlbi5pbmRleCgkYWN0aXZlKQorICAgICAg
ICAsIHRoYXQgPSB0aGlzCisKKyAgICAgIGlmIChwb3MgPiAoY2hpbGRyZW4ubGVuZ3RoIC0gMSkg
fHwgcG9zIDwgMCkgcmV0dXJuCisKKyAgICAgIGlmICh0aGlzLnNsaWRpbmcpIHsKKyAgICAgICAg
cmV0dXJuIHRoaXMuJGVsZW1lbnQub25lKCdzbGlkJywgZnVuY3Rpb24gKCkgeworICAgICAgICAg
IHRoYXQudG8ocG9zKQorICAgICAgICB9KQorICAgICAgfQorCisgICAgICBpZiAoYWN0aXZlUG9z
ID09IHBvcykgeworICAgICAgICByZXR1cm4gdGhpcy5wYXVzZSgpLmN5Y2xlKCkKKyAgICAgIH0K
KworICAgICAgcmV0dXJuIHRoaXMuc2xpZGUocG9zID4gYWN0aXZlUG9zID8gJ25leHQnIDogJ3By
ZXYnLCAkKGNoaWxkcmVuW3Bvc10pKQorICAgIH0KKworICAsIHBhdXNlOiBmdW5jdGlvbiAoZSkg
eworICAgICAgaWYgKCFlKSB0aGlzLnBhdXNlZCA9IHRydWUKKyAgICAgIGlmICh0aGlzLiRlbGVt
ZW50LmZpbmQoJy5uZXh0LCAucHJldicpLmxlbmd0aCAmJiAkLnN1cHBvcnQudHJhbnNpdGlvbi5l
bmQpIHsKKyAgICAgICAgdGhpcy4kZWxlbWVudC50cmlnZ2VyKCQuc3VwcG9ydC50cmFuc2l0aW9u
LmVuZCkKKyAgICAgICAgdGhpcy5jeWNsZSgpCisgICAgICB9CisgICAgICBjbGVhckludGVydmFs
KHRoaXMuaW50ZXJ2YWwpCisgICAgICB0aGlzLmludGVydmFsID0gbnVsbAorICAgICAgcmV0dXJu
IHRoaXMKKyAgICB9CisKKyAgLCBuZXh0OiBmdW5jdGlvbiAoKSB7CisgICAgICBpZiAodGhpcy5z
bGlkaW5nKSByZXR1cm4KKyAgICAgIHJldHVybiB0aGlzLnNsaWRlKCduZXh0JykKKyAgICB9CisK
KyAgLCBwcmV2OiBmdW5jdGlvbiAoKSB7CisgICAgICBpZiAodGhpcy5zbGlkaW5nKSByZXR1cm4K
KyAgICAgIHJldHVybiB0aGlzLnNsaWRlKCdwcmV2JykKKyAgICB9CisKKyAgLCBzbGlkZTogZnVu
Y3Rpb24gKHR5cGUsIG5leHQpIHsKKyAgICAgIHZhciAkYWN0aXZlID0gdGhpcy4kZWxlbWVudC5m
aW5kKCcuaXRlbS5hY3RpdmUnKQorICAgICAgICAsICRuZXh0ID0gbmV4dCB8fCAkYWN0aXZlW3R5
cGVdKCkKKyAgICAgICAgLCBpc0N5Y2xpbmcgPSB0aGlzLmludGVydmFsCisgICAgICAgICwgZGly
ZWN0aW9uID0gdHlwZSA9PSAnbmV4dCcgPyAnbGVmdCcgOiAncmlnaHQnCisgICAgICAgICwgZmFs
bGJhY2sgID0gdHlwZSA9PSAnbmV4dCcgPyAnZmlyc3QnIDogJ2xhc3QnCisgICAgICAgICwgdGhh
dCA9IHRoaXMKKyAgICAgICAgLCBlCisKKyAgICAgIHRoaXMuc2xpZGluZyA9IHRydWUKKworICAg
ICAgaXNDeWNsaW5nICYmIHRoaXMucGF1c2UoKQorCisgICAgICAkbmV4dCA9ICRuZXh0Lmxlbmd0
aCA/ICRuZXh0IDogdGhpcy4kZWxlbWVudC5maW5kKCcuaXRlbScpW2ZhbGxiYWNrXSgpCisKKyAg
ICAgIGUgPSAkLkV2ZW50KCdzbGlkZScsIHsKKyAgICAgICAgcmVsYXRlZFRhcmdldDogJG5leHRb
MF0KKyAgICAgIH0pCisKKyAgICAgIGlmICgkbmV4dC5oYXNDbGFzcygnYWN0aXZlJykpIHJldHVy
bgorCisgICAgICBpZiAoJC5zdXBwb3J0LnRyYW5zaXRpb24gJiYgdGhpcy4kZWxlbWVudC5oYXND
bGFzcygnc2xpZGUnKSkgeworICAgICAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoZSkKKyAgICAg
ICAgaWYgKGUuaXNEZWZhdWx0UHJldmVudGVkKCkpIHJldHVybgorICAgICAgICAkbmV4dC5hZGRD
bGFzcyh0eXBlKQorICAgICAgICAkbmV4dFswXS5vZmZzZXRXaWR0aCAvLyBmb3JjZSByZWZsb3cK
KyAgICAgICAgJGFjdGl2ZS5hZGRDbGFzcyhkaXJlY3Rpb24pCisgICAgICAgICRuZXh0LmFkZENs
YXNzKGRpcmVjdGlvbikKKyAgICAgICAgdGhpcy4kZWxlbWVudC5vbmUoJC5zdXBwb3J0LnRyYW5z
aXRpb24uZW5kLCBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgJG5leHQucmVtb3ZlQ2xhc3MoW3R5
cGUsIGRpcmVjdGlvbl0uam9pbignICcpKS5hZGRDbGFzcygnYWN0aXZlJykKKyAgICAgICAgICAk
YWN0aXZlLnJlbW92ZUNsYXNzKFsnYWN0aXZlJywgZGlyZWN0aW9uXS5qb2luKCcgJykpCisgICAg
ICAgICAgdGhhdC5zbGlkaW5nID0gZmFsc2UKKyAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9u
ICgpIHsgdGhhdC4kZWxlbWVudC50cmlnZ2VyKCdzbGlkJykgfSwgMCkKKyAgICAgICAgfSkKKyAg
ICAgIH0gZWxzZSB7CisgICAgICAgIHRoaXMuJGVsZW1lbnQudHJpZ2dlcihlKQorICAgICAgICBp
ZiAoZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkgcmV0dXJuCisgICAgICAgICRhY3RpdmUucmVtb3Zl
Q2xhc3MoJ2FjdGl2ZScpCisgICAgICAgICRuZXh0LmFkZENsYXNzKCdhY3RpdmUnKQorICAgICAg
ICB0aGlzLnNsaWRpbmcgPSBmYWxzZQorICAgICAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoJ3Ns
aWQnKQorICAgICAgfQorCisgICAgICBpc0N5Y2xpbmcgJiYgdGhpcy5jeWNsZSgpCisKKyAgICAg
IHJldHVybiB0aGlzCisgICAgfQorCisgIH0KKworCisgLyogQ0FST1VTRUwgUExVR0lOIERFRklO
SVRJT04KKyAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisgIHZhciBvbGQgPSAk
LmZuLmNhcm91c2VsCisKKyAgJC5mbi5jYXJvdXNlbCA9IGZ1bmN0aW9uIChvcHRpb24pIHsKKyAg
ICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHsKKyAgICAgIHZhciAkdGhpcyA9ICQodGhp
cykKKyAgICAgICAgLCBkYXRhID0gJHRoaXMuZGF0YSgnY2Fyb3VzZWwnKQorICAgICAgICAsIG9w
dGlvbnMgPSAkLmV4dGVuZCh7fSwgJC5mbi5jYXJvdXNlbC5kZWZhdWx0cywgdHlwZW9mIG9wdGlv
biA9PSAnb2JqZWN0JyAmJiBvcHRpb24pCisgICAgICAgICwgYWN0aW9uID0gdHlwZW9mIG9wdGlv
biA9PSAnc3RyaW5nJyA/IG9wdGlvbiA6IG9wdGlvbnMuc2xpZGUKKyAgICAgIGlmICghZGF0YSkg
JHRoaXMuZGF0YSgnY2Fyb3VzZWwnLCAoZGF0YSA9IG5ldyBDYXJvdXNlbCh0aGlzLCBvcHRpb25z
KSkpCisgICAgICBpZiAodHlwZW9mIG9wdGlvbiA9PSAnbnVtYmVyJykgZGF0YS50byhvcHRpb24p
CisgICAgICBlbHNlIGlmIChhY3Rpb24pIGRhdGFbYWN0aW9uXSgpCisgICAgICBlbHNlIGlmIChv
cHRpb25zLmludGVydmFsKSBkYXRhLmN5Y2xlKCkKKyAgICB9KQorICB9CisKKyAgJC5mbi5jYXJv
dXNlbC5kZWZhdWx0cyA9IHsKKyAgICBpbnRlcnZhbDogNTAwMAorICAsIHBhdXNlOiAnaG92ZXIn
CisgIH0KKworICAkLmZuLmNhcm91c2VsLkNvbnN0cnVjdG9yID0gQ2Fyb3VzZWwKKworCisgLyog
Q0FST1VTRUwgTk8gQ09ORkxJQ1QKKyAgKiA9PT09PT09PT09PT09PT09PT09PSAqLworCisgICQu
Zm4uY2Fyb3VzZWwubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHsKKyAgICAkLmZuLmNhcm91c2Vs
ID0gb2xkCisgICAgcmV0dXJuIHRoaXMKKyAgfQorCisgLyogQ0FST1VTRUwgREFUQS1BUEkKKyAg
KiA9PT09PT09PT09PT09PT09PSAqLworCisgICQoZG9jdW1lbnQpLm9uKCdjbGljay5jYXJvdXNl
bC5kYXRhLWFwaScsICdbZGF0YS1zbGlkZV0nLCBmdW5jdGlvbiAoZSkgeworICAgIHZhciAkdGhp
cyA9ICQodGhpcyksIGhyZWYKKyAgICAgICwgJHRhcmdldCA9ICQoJHRoaXMuYXR0cignZGF0YS10
YXJnZXQnKSB8fCAoaHJlZiA9ICR0aGlzLmF0dHIoJ2hyZWYnKSkgJiYgaHJlZi5yZXBsYWNlKC8u
Kig/PSNbXlxzXSskKS8sICcnKSkgLy9zdHJpcCBmb3IgaWU3CisgICAgICAsIG9wdGlvbnMgPSAk
LmV4dGVuZCh7fSwgJHRhcmdldC5kYXRhKCksICR0aGlzLmRhdGEoKSkKKyAgICAkdGFyZ2V0LmNh
cm91c2VsKG9wdGlvbnMpCisgICAgZS5wcmV2ZW50RGVmYXVsdCgpCisgIH0pCisKK30od2luZG93
LmpRdWVyeSk7LyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQorICogYm9vdHN0cmFwLWNvbGxhcHNlLmpzIHYyLjIuMgorICogaHR0
cDovL3R3aXR0ZXIuZ2l0aHViLmNvbS9ib290c3RyYXAvamF2YXNjcmlwdC5odG1sI2NvbGxhcHNl
CisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09CisgKiBDb3B5cmlnaHQgMjAxMiBUd2l0dGVyLCBJbmMuCisgKgorICogTGljZW5z
ZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7
CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgg
dGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQK
KyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisg
KiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRp
bmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmli
dXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJ
VElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhl
IExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMg
YW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqID09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisKKyFm
dW5jdGlvbiAoJCkgeworCisgICJ1c2Ugc3RyaWN0IjsgLy8ganNoaW50IDtfOworCisKKyAvKiBD
T0xMQVBTRSBQVUJMSUMgQ0xBU1MgREVGSU5JVElPTgorICAqID09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09ICovCisKKyAgdmFyIENvbGxhcHNlID0gZnVuY3Rpb24gKGVsZW1lbnQsIG9w
dGlvbnMpIHsKKyAgICB0aGlzLiRlbGVtZW50ID0gJChlbGVtZW50KQorICAgIHRoaXMub3B0aW9u
cyA9ICQuZXh0ZW5kKHt9LCAkLmZuLmNvbGxhcHNlLmRlZmF1bHRzLCBvcHRpb25zKQorCisgICAg
aWYgKHRoaXMub3B0aW9ucy5wYXJlbnQpIHsKKyAgICAgIHRoaXMuJHBhcmVudCA9ICQodGhpcy5v
cHRpb25zLnBhcmVudCkKKyAgICB9CisKKyAgICB0aGlzLm9wdGlvbnMudG9nZ2xlICYmIHRoaXMu
dG9nZ2xlKCkKKyAgfQorCisgIENvbGxhcHNlLnByb3RvdHlwZSA9IHsKKworICAgIGNvbnN0cnVj
dG9yOiBDb2xsYXBzZQorCisgICwgZGltZW5zaW9uOiBmdW5jdGlvbiAoKSB7CisgICAgICB2YXIg
aGFzV2lkdGggPSB0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCd3aWR0aCcpCisgICAgICByZXR1cm4g
aGFzV2lkdGggPyAnd2lkdGgnIDogJ2hlaWdodCcKKyAgICB9CisKKyAgLCBzaG93OiBmdW5jdGlv
biAoKSB7CisgICAgICB2YXIgZGltZW5zaW9uCisgICAgICAgICwgc2Nyb2xsCisgICAgICAgICwg
YWN0aXZlcworICAgICAgICAsIGhhc0RhdGEKKworICAgICAgaWYgKHRoaXMudHJhbnNpdGlvbmlu
ZykgcmV0dXJuCisKKyAgICAgIGRpbWVuc2lvbiA9IHRoaXMuZGltZW5zaW9uKCkKKyAgICAgIHNj
cm9sbCA9ICQuY2FtZWxDYXNlKFsnc2Nyb2xsJywgZGltZW5zaW9uXS5qb2luKCctJykpCisgICAg
ICBhY3RpdmVzID0gdGhpcy4kcGFyZW50ICYmIHRoaXMuJHBhcmVudC5maW5kKCc+IC5hY2NvcmRp
b24tZ3JvdXAgPiAuaW4nKQorCisgICAgICBpZiAoYWN0aXZlcyAmJiBhY3RpdmVzLmxlbmd0aCkg
eworICAgICAgICBoYXNEYXRhID0gYWN0aXZlcy5kYXRhKCdjb2xsYXBzZScpCisgICAgICAgIGlm
IChoYXNEYXRhICYmIGhhc0RhdGEudHJhbnNpdGlvbmluZykgcmV0dXJuCisgICAgICAgIGFjdGl2
ZXMuY29sbGFwc2UoJ2hpZGUnKQorICAgICAgICBoYXNEYXRhIHx8IGFjdGl2ZXMuZGF0YSgnY29s
bGFwc2UnLCBudWxsKQorICAgICAgfQorCisgICAgICB0aGlzLiRlbGVtZW50W2RpbWVuc2lvbl0o
MCkKKyAgICAgIHRoaXMudHJhbnNpdGlvbignYWRkQ2xhc3MnLCAkLkV2ZW50KCdzaG93JyksICdz
aG93bicpCisgICAgICAkLnN1cHBvcnQudHJhbnNpdGlvbiAmJiB0aGlzLiRlbGVtZW50W2RpbWVu
c2lvbl0odGhpcy4kZWxlbWVudFswXVtzY3JvbGxdKQorICAgIH0KKworICAsIGhpZGU6IGZ1bmN0
aW9uICgpIHsKKyAgICAgIHZhciBkaW1lbnNpb24KKyAgICAgIGlmICh0aGlzLnRyYW5zaXRpb25p
bmcpIHJldHVybgorICAgICAgZGltZW5zaW9uID0gdGhpcy5kaW1lbnNpb24oKQorICAgICAgdGhp
cy5yZXNldCh0aGlzLiRlbGVtZW50W2RpbWVuc2lvbl0oKSkKKyAgICAgIHRoaXMudHJhbnNpdGlv
bigncmVtb3ZlQ2xhc3MnLCAkLkV2ZW50KCdoaWRlJyksICdoaWRkZW4nKQorICAgICAgdGhpcy4k
ZWxlbWVudFtkaW1lbnNpb25dKDApCisgICAgfQorCisgICwgcmVzZXQ6IGZ1bmN0aW9uIChzaXpl
KSB7CisgICAgICB2YXIgZGltZW5zaW9uID0gdGhpcy5kaW1lbnNpb24oKQorCisgICAgICB0aGlz
LiRlbGVtZW50CisgICAgICAgIC5yZW1vdmVDbGFzcygnY29sbGFwc2UnKQorICAgICAgICBbZGlt
ZW5zaW9uXShzaXplIHx8ICdhdXRvJykKKyAgICAgICAgWzBdLm9mZnNldFdpZHRoCisKKyAgICAg
IHRoaXMuJGVsZW1lbnRbc2l6ZSAhPT0gbnVsbCA/ICdhZGRDbGFzcycgOiAncmVtb3ZlQ2xhc3Mn
XSgnY29sbGFwc2UnKQorCisgICAgICByZXR1cm4gdGhpcworICAgIH0KKworICAsIHRyYW5zaXRp
b246IGZ1bmN0aW9uIChtZXRob2QsIHN0YXJ0RXZlbnQsIGNvbXBsZXRlRXZlbnQpIHsKKyAgICAg
IHZhciB0aGF0ID0gdGhpcworICAgICAgICAsIGNvbXBsZXRlID0gZnVuY3Rpb24gKCkgeworICAg
ICAgICAgICAgaWYgKHN0YXJ0RXZlbnQudHlwZSA9PSAnc2hvdycpIHRoYXQucmVzZXQoKQorICAg
ICAgICAgICAgdGhhdC50cmFuc2l0aW9uaW5nID0gMAorICAgICAgICAgICAgdGhhdC4kZWxlbWVu
dC50cmlnZ2VyKGNvbXBsZXRlRXZlbnQpCisgICAgICAgICAgfQorCisgICAgICB0aGlzLiRlbGVt
ZW50LnRyaWdnZXIoc3RhcnRFdmVudCkKKworICAgICAgaWYgKHN0YXJ0RXZlbnQuaXNEZWZhdWx0
UHJldmVudGVkKCkpIHJldHVybgorCisgICAgICB0aGlzLnRyYW5zaXRpb25pbmcgPSAxCisKKyAg
ICAgIHRoaXMuJGVsZW1lbnRbbWV0aG9kXSgnaW4nKQorCisgICAgICAkLnN1cHBvcnQudHJhbnNp
dGlvbiAmJiB0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCdjb2xsYXBzZScpID8KKyAgICAgICAgdGhp
cy4kZWxlbWVudC5vbmUoJC5zdXBwb3J0LnRyYW5zaXRpb24uZW5kLCBjb21wbGV0ZSkgOgorICAg
ICAgICBjb21wbGV0ZSgpCisgICAgfQorCisgICwgdG9nZ2xlOiBmdW5jdGlvbiAoKSB7CisgICAg
ICB0aGlzW3RoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoJ2luJykgPyAnaGlkZScgOiAnc2hvdyddKCkK
KyAgICB9CisKKyAgfQorCisKKyAvKiBDT0xMQVBTRSBQTFVHSU4gREVGSU5JVElPTgorICAqID09
PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKyAgdmFyIG9sZCA9ICQuZm4uY29sbGFwc2UK
KworICAkLmZuLmNvbGxhcHNlID0gZnVuY3Rpb24gKG9wdGlvbikgeworICAgIHJldHVybiB0aGlz
LmVhY2goZnVuY3Rpb24gKCkgeworICAgICAgdmFyICR0aGlzID0gJCh0aGlzKQorICAgICAgICAs
IGRhdGEgPSAkdGhpcy5kYXRhKCdjb2xsYXBzZScpCisgICAgICAgICwgb3B0aW9ucyA9IHR5cGVv
ZiBvcHRpb24gPT0gJ29iamVjdCcgJiYgb3B0aW9uCisgICAgICBpZiAoIWRhdGEpICR0aGlzLmRh
dGEoJ2NvbGxhcHNlJywgKGRhdGEgPSBuZXcgQ29sbGFwc2UodGhpcywgb3B0aW9ucykpKQorICAg
ICAgaWYgKHR5cGVvZiBvcHRpb24gPT0gJ3N0cmluZycpIGRhdGFbb3B0aW9uXSgpCisgICAgfSkK
KyAgfQorCisgICQuZm4uY29sbGFwc2UuZGVmYXVsdHMgPSB7CisgICAgdG9nZ2xlOiB0cnVlCisg
IH0KKworICAkLmZuLmNvbGxhcHNlLkNvbnN0cnVjdG9yID0gQ29sbGFwc2UKKworCisgLyogQ09M
TEFQU0UgTk8gQ09ORkxJQ1QKKyAgKiA9PT09PT09PT09PT09PT09PT09PSAqLworCisgICQuZm4u
Y29sbGFwc2Uubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHsKKyAgICAkLmZuLmNvbGxhcHNlID0g
b2xkCisgICAgcmV0dXJuIHRoaXMKKyAgfQorCisKKyAvKiBDT0xMQVBTRSBEQVRBLUFQSQorICAq
ID09PT09PT09PT09PT09PT09ICovCisKKyAgJChkb2N1bWVudCkub24oJ2NsaWNrLmNvbGxhcHNl
LmRhdGEtYXBpJywgJ1tkYXRhLXRvZ2dsZT1jb2xsYXBzZV0nLCBmdW5jdGlvbiAoZSkgeworICAg
IHZhciAkdGhpcyA9ICQodGhpcyksIGhyZWYKKyAgICAgICwgdGFyZ2V0ID0gJHRoaXMuYXR0cign
ZGF0YS10YXJnZXQnKQorICAgICAgICB8fCBlLnByZXZlbnREZWZhdWx0KCkKKyAgICAgICAgfHwg
KGhyZWYgPSAkdGhpcy5hdHRyKCdocmVmJykpICYmIGhyZWYucmVwbGFjZSgvLiooPz0jW15cc10r
JCkvLCAnJykgLy9zdHJpcCBmb3IgaWU3CisgICAgICAsIG9wdGlvbiA9ICQodGFyZ2V0KS5kYXRh
KCdjb2xsYXBzZScpID8gJ3RvZ2dsZScgOiAkdGhpcy5kYXRhKCkKKyAgICAkdGhpc1skKHRhcmdl
dCkuaGFzQ2xhc3MoJ2luJykgPyAnYWRkQ2xhc3MnIDogJ3JlbW92ZUNsYXNzJ10oJ2NvbGxhcHNl
ZCcpCisgICAgJCh0YXJnZXQpLmNvbGxhcHNlKG9wdGlvbikKKyAgfSkKKworfSh3aW5kb3cualF1
ZXJ5KTsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KKyAqIGJvb3RzdHJhcC1kcm9wZG93bi5qcyB2Mi4yLjIKKyAqIGh0dHA6Ly90
d2l0dGVyLmdpdGh1Yi5jb20vYm9vdHN0cmFwL2phdmFzY3JpcHQuaHRtbCNkcm9wZG93bnMKKyAq
ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQorICogQ29weXJpZ2h0IDIwMTIgVHdpdHRlciwgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVu
ZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICog
eW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBM
aWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgor
ICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5s
ZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBz
b2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQg
b24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05T
IE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNl
bnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAor
ICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKiA9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworCishZnVuY3Rp
b24gKCQpIHsKKworICAidXNlIHN0cmljdCI7IC8vIGpzaGludCA7XzsKKworCisgLyogRFJPUERP
V04gQ0xBU1MgREVGSU5JVElPTgorICAqID09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKwor
ICB2YXIgdG9nZ2xlID0gJ1tkYXRhLXRvZ2dsZT1kcm9wZG93bl0nCisgICAgLCBEcm9wZG93biA9
IGZ1bmN0aW9uIChlbGVtZW50KSB7CisgICAgICAgIHZhciAkZWwgPSAkKGVsZW1lbnQpLm9uKCdj
bGljay5kcm9wZG93bi5kYXRhLWFwaScsIHRoaXMudG9nZ2xlKQorICAgICAgICAkKCdodG1sJyku
b24oJ2NsaWNrLmRyb3Bkb3duLmRhdGEtYXBpJywgZnVuY3Rpb24gKCkgeworICAgICAgICAgICRl
bC5wYXJlbnQoKS5yZW1vdmVDbGFzcygnb3BlbicpCisgICAgICAgIH0pCisgICAgICB9CisKKyAg
RHJvcGRvd24ucHJvdG90eXBlID0geworCisgICAgY29uc3RydWN0b3I6IERyb3Bkb3duCisKKyAg
LCB0b2dnbGU6IGZ1bmN0aW9uIChlKSB7CisgICAgICB2YXIgJHRoaXMgPSAkKHRoaXMpCisgICAg
ICAgICwgJHBhcmVudAorICAgICAgICAsIGlzQWN0aXZlCisKKyAgICAgIGlmICgkdGhpcy5pcygn
LmRpc2FibGVkLCA6ZGlzYWJsZWQnKSkgcmV0dXJuCisKKyAgICAgICRwYXJlbnQgPSBnZXRQYXJl
bnQoJHRoaXMpCisKKyAgICAgIGlzQWN0aXZlID0gJHBhcmVudC5oYXNDbGFzcygnb3BlbicpCisK
KyAgICAgIGNsZWFyTWVudXMoKQorCisgICAgICBpZiAoIWlzQWN0aXZlKSB7CisgICAgICAgICRw
YXJlbnQudG9nZ2xlQ2xhc3MoJ29wZW4nKQorICAgICAgfQorCisgICAgICAkdGhpcy5mb2N1cygp
CisKKyAgICAgIHJldHVybiBmYWxzZQorICAgIH0KKworICAsIGtleWRvd246IGZ1bmN0aW9uIChl
KSB7CisgICAgICB2YXIgJHRoaXMKKyAgICAgICAgLCAkaXRlbXMKKyAgICAgICAgLCAkYWN0aXZl
CisgICAgICAgICwgJHBhcmVudAorICAgICAgICAsIGlzQWN0aXZlCisgICAgICAgICwgaW5kZXgK
KworICAgICAgaWYgKCEvKDM4fDQwfDI3KS8udGVzdChlLmtleUNvZGUpKSByZXR1cm4KKworICAg
ICAgJHRoaXMgPSAkKHRoaXMpCisKKyAgICAgIGUucHJldmVudERlZmF1bHQoKQorICAgICAgZS5z
dG9wUHJvcGFnYXRpb24oKQorCisgICAgICBpZiAoJHRoaXMuaXMoJy5kaXNhYmxlZCwgOmRpc2Fi
bGVkJykpIHJldHVybgorCisgICAgICAkcGFyZW50ID0gZ2V0UGFyZW50KCR0aGlzKQorCisgICAg
ICBpc0FjdGl2ZSA9ICRwYXJlbnQuaGFzQ2xhc3MoJ29wZW4nKQorCisgICAgICBpZiAoIWlzQWN0
aXZlIHx8IChpc0FjdGl2ZSAmJiBlLmtleUNvZGUgPT0gMjcpKSByZXR1cm4gJHRoaXMuY2xpY2so
KQorCisgICAgICAkaXRlbXMgPSAkKCdbcm9sZT1tZW51XSBsaTpub3QoLmRpdmlkZXIpOnZpc2li
bGUgYScsICRwYXJlbnQpCisKKyAgICAgIGlmICghJGl0ZW1zLmxlbmd0aCkgcmV0dXJuCisKKyAg
ICAgIGluZGV4ID0gJGl0ZW1zLmluZGV4KCRpdGVtcy5maWx0ZXIoJzpmb2N1cycpKQorCisgICAg
ICBpZiAoZS5rZXlDb2RlID09IDM4ICYmIGluZGV4ID4gMCkgaW5kZXgtLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB1cAorICAgICAgaWYgKGUua2V5Q29kZSA9PSA0
MCAmJiBpbmRleCA8ICRpdGVtcy5sZW5ndGggLSAxKSBpbmRleCsrICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gZG93bgorICAgICAgaWYgKCF+aW5kZXgpIGluZGV4ID0gMAorCisgICAgICAkaXRl
bXMKKyAgICAgICAgLmVxKGluZGV4KQorICAgICAgICAuZm9jdXMoKQorICAgIH0KKworICB9CisK
KyAgZnVuY3Rpb24gY2xlYXJNZW51cygpIHsKKyAgICAkKHRvZ2dsZSkuZWFjaChmdW5jdGlvbiAo
KSB7CisgICAgICBnZXRQYXJlbnQoJCh0aGlzKSkucmVtb3ZlQ2xhc3MoJ29wZW4nKQorICAgIH0p
CisgIH0KKworICBmdW5jdGlvbiBnZXRQYXJlbnQoJHRoaXMpIHsKKyAgICB2YXIgc2VsZWN0b3Ig
PSAkdGhpcy5hdHRyKCdkYXRhLXRhcmdldCcpCisgICAgICAsICRwYXJlbnQKKworICAgIGlmICgh
c2VsZWN0b3IpIHsKKyAgICAgIHNlbGVjdG9yID0gJHRoaXMuYXR0cignaHJlZicpCisgICAgICBz
ZWxlY3RvciA9IHNlbGVjdG9yICYmIC8jLy50ZXN0KHNlbGVjdG9yKSAmJiBzZWxlY3Rvci5yZXBs
YWNlKC8uKig/PSNbXlxzXSokKS8sICcnKSAvL3N0cmlwIGZvciBpZTcKKyAgICB9CisKKyAgICAk
cGFyZW50ID0gJChzZWxlY3RvcikKKyAgICAkcGFyZW50Lmxlbmd0aCB8fCAoJHBhcmVudCA9ICR0
aGlzLnBhcmVudCgpKQorCisgICAgcmV0dXJuICRwYXJlbnQKKyAgfQorCisKKyAgLyogRFJPUERP
V04gUExVR0lOIERFRklOSVRJT04KKyAgICogPT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8K
KworICB2YXIgb2xkID0gJC5mbi5kcm9wZG93bgorCisgICQuZm4uZHJvcGRvd24gPSBmdW5jdGlv
biAob3B0aW9uKSB7CisgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7CisgICAgICB2
YXIgJHRoaXMgPSAkKHRoaXMpCisgICAgICAgICwgZGF0YSA9ICR0aGlzLmRhdGEoJ2Ryb3Bkb3du
JykKKyAgICAgIGlmICghZGF0YSkgJHRoaXMuZGF0YSgnZHJvcGRvd24nLCAoZGF0YSA9IG5ldyBE
cm9wZG93bih0aGlzKSkpCisgICAgICBpZiAodHlwZW9mIG9wdGlvbiA9PSAnc3RyaW5nJykgZGF0
YVtvcHRpb25dLmNhbGwoJHRoaXMpCisgICAgfSkKKyAgfQorCisgICQuZm4uZHJvcGRvd24uQ29u
c3RydWN0b3IgPSBEcm9wZG93bgorCisKKyAvKiBEUk9QRE9XTiBOTyBDT05GTElDVAorICAqID09
PT09PT09PT09PT09PT09PT09ICovCisKKyAgJC5mbi5kcm9wZG93bi5ub0NvbmZsaWN0ID0gZnVu
Y3Rpb24gKCkgeworICAgICQuZm4uZHJvcGRvd24gPSBvbGQKKyAgICByZXR1cm4gdGhpcworICB9
CisKKworICAvKiBBUFBMWSBUTyBTVEFOREFSRCBEUk9QRE9XTiBFTEVNRU5UUworICAgKiA9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisgICQoZG9jdW1lbnQpCisgICAg
Lm9uKCdjbGljay5kcm9wZG93bi5kYXRhLWFwaSB0b3VjaHN0YXJ0LmRyb3Bkb3duLmRhdGEtYXBp
JywgY2xlYXJNZW51cykKKyAgICAub24oJ2NsaWNrLmRyb3Bkb3duIHRvdWNoc3RhcnQuZHJvcGRv
d24uZGF0YS1hcGknLCAnLmRyb3Bkb3duIGZvcm0nLCBmdW5jdGlvbiAoZSkgeyBlLnN0b3BQcm9w
YWdhdGlvbigpIH0pCisgICAgLm9uKCd0b3VjaHN0YXJ0LmRyb3Bkb3duLmRhdGEtYXBpJywgJy5k
cm9wZG93bi1tZW51JywgZnVuY3Rpb24gKGUpIHsgZS5zdG9wUHJvcGFnYXRpb24oKSB9KQorICAg
IC5vbignY2xpY2suZHJvcGRvd24uZGF0YS1hcGkgdG91Y2hzdGFydC5kcm9wZG93bi5kYXRhLWFw
aScgICwgdG9nZ2xlLCBEcm9wZG93bi5wcm90b3R5cGUudG9nZ2xlKQorICAgIC5vbigna2V5ZG93
bi5kcm9wZG93bi5kYXRhLWFwaSB0b3VjaHN0YXJ0LmRyb3Bkb3duLmRhdGEtYXBpJywgdG9nZ2xl
ICsgJywgW3JvbGU9bWVudV0nICwgRHJvcGRvd24ucHJvdG90eXBlLmtleWRvd24pCisKK30od2lu
ZG93LmpRdWVyeSk7LyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09CisgKiBib290c3RyYXAtbW9kYWwuanMgdjIuMi4yCisgKiBodHRwOi8v
dHdpdHRlci5naXRodWIuY29tL2Jvb3RzdHJhcC9qYXZhc2NyaXB0Lmh0bWwjbW9kYWxzCisgKiA9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
KyAqIENvcHlyaWdodCAyMDEyIFR3aXR0ZXIsIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0
aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBt
YXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5z
ZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0
dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyBy
ZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdh
cmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFu
ICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBB
TlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBm
b3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxp
bWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICogPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKworIWZ1bmN0aW9uICgkKSB7
CisKKyAgInVzZSBzdHJpY3QiOyAvLyBqc2hpbnQgO187CisKKworIC8qIE1PREFMIENMQVNTIERF
RklOSVRJT04KKyAgKiA9PT09PT09PT09PT09PT09PT09PT09ICovCisKKyAgdmFyIE1vZGFsID0g
ZnVuY3Rpb24gKGVsZW1lbnQsIG9wdGlvbnMpIHsKKyAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25z
CisgICAgdGhpcy4kZWxlbWVudCA9ICQoZWxlbWVudCkKKyAgICAgIC5kZWxlZ2F0ZSgnW2RhdGEt
ZGlzbWlzcz0ibW9kYWwiXScsICdjbGljay5kaXNtaXNzLm1vZGFsJywgJC5wcm94eSh0aGlzLmhp
ZGUsIHRoaXMpKQorICAgIHRoaXMub3B0aW9ucy5yZW1vdGUgJiYgdGhpcy4kZWxlbWVudC5maW5k
KCcubW9kYWwtYm9keScpLmxvYWQodGhpcy5vcHRpb25zLnJlbW90ZSkKKyAgfQorCisgIE1vZGFs
LnByb3RvdHlwZSA9IHsKKworICAgICAgY29uc3RydWN0b3I6IE1vZGFsCisKKyAgICAsIHRvZ2ds
ZTogZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhpc1shdGhpcy5pc1Nob3duID8gJ3No
b3cnIDogJ2hpZGUnXSgpCisgICAgICB9CisKKyAgICAsIHNob3c6IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgdmFyIHRoYXQgPSB0aGlzCisgICAgICAgICAgLCBlID0gJC5FdmVudCgnc2hvdycpCisK
KyAgICAgICAgdGhpcy4kZWxlbWVudC50cmlnZ2VyKGUpCisKKyAgICAgICAgaWYgKHRoaXMuaXNT
aG93biB8fCBlLmlzRGVmYXVsdFByZXZlbnRlZCgpKSByZXR1cm4KKworICAgICAgICB0aGlzLmlz
U2hvd24gPSB0cnVlCisKKyAgICAgICAgdGhpcy5lc2NhcGUoKQorCisgICAgICAgIHRoaXMuYmFj
a2Ryb3AoZnVuY3Rpb24gKCkgeworICAgICAgICAgIHZhciB0cmFuc2l0aW9uID0gJC5zdXBwb3J0
LnRyYW5zaXRpb24gJiYgdGhhdC4kZWxlbWVudC5oYXNDbGFzcygnZmFkZScpCisKKyAgICAgICAg
ICBpZiAoIXRoYXQuJGVsZW1lbnQucGFyZW50KCkubGVuZ3RoKSB7CisgICAgICAgICAgICB0aGF0
LiRlbGVtZW50LmFwcGVuZFRvKGRvY3VtZW50LmJvZHkpIC8vZG9uJ3QgbW92ZSBtb2RhbHMgZG9t
IHBvc2l0aW9uCisgICAgICAgICAgfQorCisgICAgICAgICAgdGhhdC4kZWxlbWVudAorICAgICAg
ICAgICAgLnNob3coKQorCisgICAgICAgICAgaWYgKHRyYW5zaXRpb24pIHsKKyAgICAgICAgICAg
IHRoYXQuJGVsZW1lbnRbMF0ub2Zmc2V0V2lkdGggLy8gZm9yY2UgcmVmbG93CisgICAgICAgICAg
fQorCisgICAgICAgICAgdGhhdC4kZWxlbWVudAorICAgICAgICAgICAgLmFkZENsYXNzKCdpbicp
CisgICAgICAgICAgICAuYXR0cignYXJpYS1oaWRkZW4nLCBmYWxzZSkKKworICAgICAgICAgIHRo
YXQuZW5mb3JjZUZvY3VzKCkKKworICAgICAgICAgIHRyYW5zaXRpb24gPworICAgICAgICAgICAg
dGhhdC4kZWxlbWVudC5vbmUoJC5zdXBwb3J0LnRyYW5zaXRpb24uZW5kLCBmdW5jdGlvbiAoKSB7
IHRoYXQuJGVsZW1lbnQuZm9jdXMoKS50cmlnZ2VyKCdzaG93bicpIH0pIDoKKyAgICAgICAgICAg
IHRoYXQuJGVsZW1lbnQuZm9jdXMoKS50cmlnZ2VyKCdzaG93bicpCisKKyAgICAgICAgfSkKKyAg
ICAgIH0KKworICAgICwgaGlkZTogZnVuY3Rpb24gKGUpIHsKKyAgICAgICAgZSAmJiBlLnByZXZl
bnREZWZhdWx0KCkKKworICAgICAgICB2YXIgdGhhdCA9IHRoaXMKKworICAgICAgICBlID0gJC5F
dmVudCgnaGlkZScpCisKKyAgICAgICAgdGhpcy4kZWxlbWVudC50cmlnZ2VyKGUpCisKKyAgICAg
ICAgaWYgKCF0aGlzLmlzU2hvd24gfHwgZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkgcmV0dXJuCisK
KyAgICAgICAgdGhpcy5pc1Nob3duID0gZmFsc2UKKworICAgICAgICB0aGlzLmVzY2FwZSgpCisK
KyAgICAgICAgJChkb2N1bWVudCkub2ZmKCdmb2N1c2luLm1vZGFsJykKKworICAgICAgICB0aGlz
LiRlbGVtZW50CisgICAgICAgICAgLnJlbW92ZUNsYXNzKCdpbicpCisgICAgICAgICAgLmF0dHIo
J2FyaWEtaGlkZGVuJywgdHJ1ZSkKKworICAgICAgICAkLnN1cHBvcnQudHJhbnNpdGlvbiAmJiB0
aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCdmYWRlJykgPworICAgICAgICAgIHRoaXMuaGlkZVdpdGhU
cmFuc2l0aW9uKCkgOgorICAgICAgICAgIHRoaXMuaGlkZU1vZGFsKCkKKyAgICAgIH0KKworICAg
ICwgZW5mb3JjZUZvY3VzOiBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciB0aGF0ID0gdGhpcwor
ICAgICAgICAkKGRvY3VtZW50KS5vbignZm9jdXNpbi5tb2RhbCcsIGZ1bmN0aW9uIChlKSB7Cisg
ICAgICAgICAgaWYgKHRoYXQuJGVsZW1lbnRbMF0gIT09IGUudGFyZ2V0ICYmICF0aGF0LiRlbGVt
ZW50LmhhcyhlLnRhcmdldCkubGVuZ3RoKSB7CisgICAgICAgICAgICB0aGF0LiRlbGVtZW50LmZv
Y3VzKCkKKyAgICAgICAgICB9CisgICAgICAgIH0pCisgICAgICB9CisKKyAgICAsIGVzY2FwZTog
ZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgdGhhdCA9IHRoaXMKKyAgICAgICAgaWYgKHRoaXMu
aXNTaG93biAmJiB0aGlzLm9wdGlvbnMua2V5Ym9hcmQpIHsKKyAgICAgICAgICB0aGlzLiRlbGVt
ZW50Lm9uKCdrZXl1cC5kaXNtaXNzLm1vZGFsJywgZnVuY3Rpb24gKCBlICkgeworICAgICAgICAg
ICAgZS53aGljaCA9PSAyNyAmJiB0aGF0LmhpZGUoKQorICAgICAgICAgIH0pCisgICAgICAgIH0g
ZWxzZSBpZiAoIXRoaXMuaXNTaG93bikgeworICAgICAgICAgIHRoaXMuJGVsZW1lbnQub2ZmKCdr
ZXl1cC5kaXNtaXNzLm1vZGFsJykKKyAgICAgICAgfQorICAgICAgfQorCisgICAgLCBoaWRlV2l0
aFRyYW5zaXRpb246IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIHRoYXQgPSB0aGlzCisgICAg
ICAgICAgLCB0aW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAg
IHRoYXQuJGVsZW1lbnQub2ZmKCQuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCkKKyAgICAgICAgICAg
ICAgdGhhdC5oaWRlTW9kYWwoKQorICAgICAgICAgICAgfSwgNTAwKQorCisgICAgICAgIHRoaXMu
JGVsZW1lbnQub25lKCQuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCwgZnVuY3Rpb24gKCkgeworICAg
ICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KQorICAgICAgICAgIHRoYXQuaGlkZU1vZGFsKCkK
KyAgICAgICAgfSkKKyAgICAgIH0KKworICAgICwgaGlkZU1vZGFsOiBmdW5jdGlvbiAodGhhdCkg
eworICAgICAgICB0aGlzLiRlbGVtZW50CisgICAgICAgICAgLmhpZGUoKQorICAgICAgICAgIC50
cmlnZ2VyKCdoaWRkZW4nKQorCisgICAgICAgIHRoaXMuYmFja2Ryb3AoKQorICAgICAgfQorCisg
ICAgLCByZW1vdmVCYWNrZHJvcDogZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLiRiYWNrZHJv
cC5yZW1vdmUoKQorICAgICAgICB0aGlzLiRiYWNrZHJvcCA9IG51bGwKKyAgICAgIH0KKworICAg
ICwgYmFja2Ryb3A6IGZ1bmN0aW9uIChjYWxsYmFjaykgeworICAgICAgICB2YXIgdGhhdCA9IHRo
aXMKKyAgICAgICAgICAsIGFuaW1hdGUgPSB0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCdmYWRlJykg
PyAnZmFkZScgOiAnJworCisgICAgICAgIGlmICh0aGlzLmlzU2hvd24gJiYgdGhpcy5vcHRpb25z
LmJhY2tkcm9wKSB7CisgICAgICAgICAgdmFyIGRvQW5pbWF0ZSA9ICQuc3VwcG9ydC50cmFuc2l0
aW9uICYmIGFuaW1hdGUKKworICAgICAgICAgIHRoaXMuJGJhY2tkcm9wID0gJCgnPGRpdiBjbGFz
cz0ibW9kYWwtYmFja2Ryb3AgJyArIGFuaW1hdGUgKyAnIiAvPicpCisgICAgICAgICAgICAuYXBw
ZW5kVG8oZG9jdW1lbnQuYm9keSkKKworICAgICAgICAgIHRoaXMuJGJhY2tkcm9wLmNsaWNrKAor
ICAgICAgICAgICAgdGhpcy5vcHRpb25zLmJhY2tkcm9wID09ICdzdGF0aWMnID8KKyAgICAgICAg
ICAgICAgJC5wcm94eSh0aGlzLiRlbGVtZW50WzBdLmZvY3VzLCB0aGlzLiRlbGVtZW50WzBdKQor
ICAgICAgICAgICAgOiAkLnByb3h5KHRoaXMuaGlkZSwgdGhpcykKKyAgICAgICAgICApCisKKyAg
ICAgICAgICBpZiAoZG9BbmltYXRlKSB0aGlzLiRiYWNrZHJvcFswXS5vZmZzZXRXaWR0aCAvLyBm
b3JjZSByZWZsb3cKKworICAgICAgICAgIHRoaXMuJGJhY2tkcm9wLmFkZENsYXNzKCdpbicpCisK
KyAgICAgICAgICBkb0FuaW1hdGUgPworICAgICAgICAgICAgdGhpcy4kYmFja2Ryb3Aub25lKCQu
c3VwcG9ydC50cmFuc2l0aW9uLmVuZCwgY2FsbGJhY2spIDoKKyAgICAgICAgICAgIGNhbGxiYWNr
KCkKKworICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLmlzU2hvd24gJiYgdGhpcy4kYmFja2Ryb3Ap
IHsKKyAgICAgICAgICB0aGlzLiRiYWNrZHJvcC5yZW1vdmVDbGFzcygnaW4nKQorCisgICAgICAg
ICAgJC5zdXBwb3J0LnRyYW5zaXRpb24gJiYgdGhpcy4kZWxlbWVudC5oYXNDbGFzcygnZmFkZScp
PworICAgICAgICAgICAgdGhpcy4kYmFja2Ryb3Aub25lKCQuc3VwcG9ydC50cmFuc2l0aW9uLmVu
ZCwgJC5wcm94eSh0aGlzLnJlbW92ZUJhY2tkcm9wLCB0aGlzKSkgOgorICAgICAgICAgICAgdGhp
cy5yZW1vdmVCYWNrZHJvcCgpCisKKyAgICAgICAgfSBlbHNlIGlmIChjYWxsYmFjaykgeworICAg
ICAgICAgIGNhbGxiYWNrKCkKKyAgICAgICAgfQorICAgICAgfQorICB9CisKKworIC8qIE1PREFM
IFBMVUdJTiBERUZJTklUSU9OCisgICogPT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworICB2
YXIgb2xkID0gJC5mbi5tb2RhbAorCisgICQuZm4ubW9kYWwgPSBmdW5jdGlvbiAob3B0aW9uKSB7
CisgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7CisgICAgICB2YXIgJHRoaXMgPSAk
KHRoaXMpCisgICAgICAgICwgZGF0YSA9ICR0aGlzLmRhdGEoJ21vZGFsJykKKyAgICAgICAgLCBv
cHRpb25zID0gJC5leHRlbmQoe30sICQuZm4ubW9kYWwuZGVmYXVsdHMsICR0aGlzLmRhdGEoKSwg
dHlwZW9mIG9wdGlvbiA9PSAnb2JqZWN0JyAmJiBvcHRpb24pCisgICAgICBpZiAoIWRhdGEpICR0
aGlzLmRhdGEoJ21vZGFsJywgKGRhdGEgPSBuZXcgTW9kYWwodGhpcywgb3B0aW9ucykpKQorICAg
ICAgaWYgKHR5cGVvZiBvcHRpb24gPT0gJ3N0cmluZycpIGRhdGFbb3B0aW9uXSgpCisgICAgICBl
bHNlIGlmIChvcHRpb25zLnNob3cpIGRhdGEuc2hvdygpCisgICAgfSkKKyAgfQorCisgICQuZm4u
bW9kYWwuZGVmYXVsdHMgPSB7CisgICAgICBiYWNrZHJvcDogdHJ1ZQorICAgICwga2V5Ym9hcmQ6
IHRydWUKKyAgICAsIHNob3c6IHRydWUKKyAgfQorCisgICQuZm4ubW9kYWwuQ29uc3RydWN0b3Ig
PSBNb2RhbAorCisKKyAvKiBNT0RBTCBOTyBDT05GTElDVAorICAqID09PT09PT09PT09PT09PT09
ICovCisKKyAgJC5mbi5tb2RhbC5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKCkgeworICAgICQuZm4u
bW9kYWwgPSBvbGQKKyAgICByZXR1cm4gdGhpcworICB9CisKKworIC8qIE1PREFMIERBVEEtQVBJ
CisgICogPT09PT09PT09PT09PT0gKi8KKworICAkKGRvY3VtZW50KS5vbignY2xpY2subW9kYWwu
ZGF0YS1hcGknLCAnW2RhdGEtdG9nZ2xlPSJtb2RhbCJdJywgZnVuY3Rpb24gKGUpIHsKKyAgICB2
YXIgJHRoaXMgPSAkKHRoaXMpCisgICAgICAsIGhyZWYgPSAkdGhpcy5hdHRyKCdocmVmJykKKyAg
ICAgICwgJHRhcmdldCA9ICQoJHRoaXMuYXR0cignZGF0YS10YXJnZXQnKSB8fCAoaHJlZiAmJiBo
cmVmLnJlcGxhY2UoLy4qKD89I1teXHNdKyQpLywgJycpKSkgLy9zdHJpcCBmb3IgaWU3CisgICAg
ICAsIG9wdGlvbiA9ICR0YXJnZXQuZGF0YSgnbW9kYWwnKSA/ICd0b2dnbGUnIDogJC5leHRlbmQo
eyByZW1vdGU6IS8jLy50ZXN0KGhyZWYpICYmIGhyZWYgfSwgJHRhcmdldC5kYXRhKCksICR0aGlz
LmRhdGEoKSkKKworICAgIGUucHJldmVudERlZmF1bHQoKQorCisgICAgJHRhcmdldAorICAgICAg
Lm1vZGFsKG9wdGlvbikKKyAgICAgIC5vbmUoJ2hpZGUnLCBmdW5jdGlvbiAoKSB7CisgICAgICAg
ICR0aGlzLmZvY3VzKCkKKyAgICAgIH0pCisgIH0pCisKK30od2luZG93LmpRdWVyeSk7CisvKiA9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQorICogYm9vdHN0cmFwLXRvb2x0aXAuanMgdjIuMi4yCisgKiBodHRwOi8vdHdpdHRlci5naXRo
dWIuY29tL2Jvb3RzdHJhcC9qYXZhc2NyaXB0Lmh0bWwjdG9vbHRpcHMKKyAqIEluc3BpcmVkIGJ5
IHRoZSBvcmlnaW5hbCBqUXVlcnkudGlwc3kgYnkgSmFzb24gRnJhbWUKKyAqID09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5
cmlnaHQgMjAxMiBUd2l0dGVyLCBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNo
ZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1
c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZ
b3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3
LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQg
YnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBk
aXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMi
IEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQs
IGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBz
cGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9u
cyB1bmRlciB0aGUgTGljZW5zZS4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworCishZnVuY3Rpb24gKCQpIHsKKworICAi
dXNlIHN0cmljdCI7IC8vIGpzaGludCA7XzsKKworCisgLyogVE9PTFRJUCBQVUJMSUMgQ0xBU1Mg
REVGSU5JVElPTgorICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworICB2
YXIgVG9vbHRpcCA9IGZ1bmN0aW9uIChlbGVtZW50LCBvcHRpb25zKSB7CisgICAgdGhpcy5pbml0
KCd0b29sdGlwJywgZWxlbWVudCwgb3B0aW9ucykKKyAgfQorCisgIFRvb2x0aXAucHJvdG90eXBl
ID0geworCisgICAgY29uc3RydWN0b3I6IFRvb2x0aXAKKworICAsIGluaXQ6IGZ1bmN0aW9uICh0
eXBlLCBlbGVtZW50LCBvcHRpb25zKSB7CisgICAgICB2YXIgZXZlbnRJbgorICAgICAgICAsIGV2
ZW50T3V0CisKKyAgICAgIHRoaXMudHlwZSA9IHR5cGUKKyAgICAgIHRoaXMuJGVsZW1lbnQgPSAk
KGVsZW1lbnQpCisgICAgICB0aGlzLm9wdGlvbnMgPSB0aGlzLmdldE9wdGlvbnMob3B0aW9ucykK
KyAgICAgIHRoaXMuZW5hYmxlZCA9IHRydWUKKworICAgICAgaWYgKHRoaXMub3B0aW9ucy50cmln
Z2VyID09ICdjbGljaycpIHsKKyAgICAgICAgdGhpcy4kZWxlbWVudC5vbignY2xpY2suJyArIHRo
aXMudHlwZSwgdGhpcy5vcHRpb25zLnNlbGVjdG9yLCAkLnByb3h5KHRoaXMudG9nZ2xlLCB0aGlz
KSkKKyAgICAgIH0gZWxzZSBpZiAodGhpcy5vcHRpb25zLnRyaWdnZXIgIT0gJ21hbnVhbCcpIHsK
KyAgICAgICAgZXZlbnRJbiA9IHRoaXMub3B0aW9ucy50cmlnZ2VyID09ICdob3ZlcicgPyAnbW91
c2VlbnRlcicgOiAnZm9jdXMnCisgICAgICAgIGV2ZW50T3V0ID0gdGhpcy5vcHRpb25zLnRyaWdn
ZXIgPT0gJ2hvdmVyJyA/ICdtb3VzZWxlYXZlJyA6ICdibHVyJworICAgICAgICB0aGlzLiRlbGVt
ZW50Lm9uKGV2ZW50SW4gKyAnLicgKyB0aGlzLnR5cGUsIHRoaXMub3B0aW9ucy5zZWxlY3Rvciwg
JC5wcm94eSh0aGlzLmVudGVyLCB0aGlzKSkKKyAgICAgICAgdGhpcy4kZWxlbWVudC5vbihldmVu
dE91dCArICcuJyArIHRoaXMudHlwZSwgdGhpcy5vcHRpb25zLnNlbGVjdG9yLCAkLnByb3h5KHRo
aXMubGVhdmUsIHRoaXMpKQorICAgICAgfQorCisgICAgICB0aGlzLm9wdGlvbnMuc2VsZWN0b3Ig
PworICAgICAgICAodGhpcy5fb3B0aW9ucyA9ICQuZXh0ZW5kKHt9LCB0aGlzLm9wdGlvbnMsIHsg
dHJpZ2dlcjogJ21hbnVhbCcsIHNlbGVjdG9yOiAnJyB9KSkgOgorICAgICAgICB0aGlzLmZpeFRp
dGxlKCkKKyAgICB9CisKKyAgLCBnZXRPcHRpb25zOiBmdW5jdGlvbiAob3B0aW9ucykgeworICAg
ICAgb3B0aW9ucyA9ICQuZXh0ZW5kKHt9LCAkLmZuW3RoaXMudHlwZV0uZGVmYXVsdHMsIG9wdGlv
bnMsIHRoaXMuJGVsZW1lbnQuZGF0YSgpKQorCisgICAgICBpZiAob3B0aW9ucy5kZWxheSAmJiB0
eXBlb2Ygb3B0aW9ucy5kZWxheSA9PSAnbnVtYmVyJykgeworICAgICAgICBvcHRpb25zLmRlbGF5
ID0geworICAgICAgICAgIHNob3c6IG9wdGlvbnMuZGVsYXkKKyAgICAgICAgLCBoaWRlOiBvcHRp
b25zLmRlbGF5CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgcmV0dXJuIG9wdGlvbnMKKyAg
ICB9CisKKyAgLCBlbnRlcjogZnVuY3Rpb24gKGUpIHsKKyAgICAgIHZhciBzZWxmID0gJChlLmN1
cnJlbnRUYXJnZXQpW3RoaXMudHlwZV0odGhpcy5fb3B0aW9ucykuZGF0YSh0aGlzLnR5cGUpCisK
KyAgICAgIGlmICghc2VsZi5vcHRpb25zLmRlbGF5IHx8ICFzZWxmLm9wdGlvbnMuZGVsYXkuc2hv
dykgcmV0dXJuIHNlbGYuc2hvdygpCisKKyAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQp
CisgICAgICBzZWxmLmhvdmVyU3RhdGUgPSAnaW4nCisgICAgICB0aGlzLnRpbWVvdXQgPSBzZXRU
aW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAoc2VsZi5ob3ZlclN0YXRlID09ICdpbicp
IHNlbGYuc2hvdygpCisgICAgICB9LCBzZWxmLm9wdGlvbnMuZGVsYXkuc2hvdykKKyAgICB9CisK
KyAgLCBsZWF2ZTogZnVuY3Rpb24gKGUpIHsKKyAgICAgIHZhciBzZWxmID0gJChlLmN1cnJlbnRU
YXJnZXQpW3RoaXMudHlwZV0odGhpcy5fb3B0aW9ucykuZGF0YSh0aGlzLnR5cGUpCisKKyAgICAg
IGlmICh0aGlzLnRpbWVvdXQpIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpCisgICAgICBpZiAo
IXNlbGYub3B0aW9ucy5kZWxheSB8fCAhc2VsZi5vcHRpb25zLmRlbGF5LmhpZGUpIHJldHVybiBz
ZWxmLmhpZGUoKQorCisgICAgICBzZWxmLmhvdmVyU3RhdGUgPSAnb3V0JworICAgICAgdGhpcy50
aW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHNlbGYuaG92ZXJT
dGF0ZSA9PSAnb3V0Jykgc2VsZi5oaWRlKCkKKyAgICAgIH0sIHNlbGYub3B0aW9ucy5kZWxheS5o
aWRlKQorICAgIH0KKworICAsIHNob3c6IGZ1bmN0aW9uICgpIHsKKyAgICAgIHZhciAkdGlwCisg
ICAgICAgICwgaW5zaWRlCisgICAgICAgICwgcG9zCisgICAgICAgICwgYWN0dWFsV2lkdGgKKyAg
ICAgICAgLCBhY3R1YWxIZWlnaHQKKyAgICAgICAgLCBwbGFjZW1lbnQKKyAgICAgICAgLCB0cAor
CisgICAgICBpZiAodGhpcy5oYXNDb250ZW50KCkgJiYgdGhpcy5lbmFibGVkKSB7CisgICAgICAg
ICR0aXAgPSB0aGlzLnRpcCgpCisgICAgICAgIHRoaXMuc2V0Q29udGVudCgpCisKKyAgICAgICAg
aWYgKHRoaXMub3B0aW9ucy5hbmltYXRpb24pIHsKKyAgICAgICAgICAkdGlwLmFkZENsYXNzKCdm
YWRlJykKKyAgICAgICAgfQorCisgICAgICAgIHBsYWNlbWVudCA9IHR5cGVvZiB0aGlzLm9wdGlv
bnMucGxhY2VtZW50ID09ICdmdW5jdGlvbicgPworICAgICAgICAgIHRoaXMub3B0aW9ucy5wbGFj
ZW1lbnQuY2FsbCh0aGlzLCAkdGlwWzBdLCB0aGlzLiRlbGVtZW50WzBdKSA6CisgICAgICAgICAg
dGhpcy5vcHRpb25zLnBsYWNlbWVudAorCisgICAgICAgIGluc2lkZSA9IC9pbi8udGVzdChwbGFj
ZW1lbnQpCisKKyAgICAgICAgJHRpcAorICAgICAgICAgIC5kZXRhY2goKQorICAgICAgICAgIC5j
c3MoeyB0b3A6IDAsIGxlZnQ6IDAsIGRpc3BsYXk6ICdibG9jaycgfSkKKyAgICAgICAgICAuaW5z
ZXJ0QWZ0ZXIodGhpcy4kZWxlbWVudCkKKworICAgICAgICBwb3MgPSB0aGlzLmdldFBvc2l0aW9u
KGluc2lkZSkKKworICAgICAgICBhY3R1YWxXaWR0aCA9ICR0aXBbMF0ub2Zmc2V0V2lkdGgKKyAg
ICAgICAgYWN0dWFsSGVpZ2h0ID0gJHRpcFswXS5vZmZzZXRIZWlnaHQKKworICAgICAgICBzd2l0
Y2ggKGluc2lkZSA/IHBsYWNlbWVudC5zcGxpdCgnICcpWzFdIDogcGxhY2VtZW50KSB7CisgICAg
ICAgICAgY2FzZSAnYm90dG9tJzoKKyAgICAgICAgICAgIHRwID0ge3RvcDogcG9zLnRvcCArIHBv
cy5oZWlnaHQsIGxlZnQ6IHBvcy5sZWZ0ICsgcG9zLndpZHRoIC8gMiAtIGFjdHVhbFdpZHRoIC8g
Mn0KKyAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgY2FzZSAndG9wJzoKKyAgICAgICAgICAg
IHRwID0ge3RvcDogcG9zLnRvcCAtIGFjdHVhbEhlaWdodCwgbGVmdDogcG9zLmxlZnQgKyBwb3Mu
d2lkdGggLyAyIC0gYWN0dWFsV2lkdGggLyAyfQorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAg
ICBjYXNlICdsZWZ0JzoKKyAgICAgICAgICAgIHRwID0ge3RvcDogcG9zLnRvcCArIHBvcy5oZWln
aHQgLyAyIC0gYWN0dWFsSGVpZ2h0IC8gMiwgbGVmdDogcG9zLmxlZnQgLSBhY3R1YWxXaWR0aH0K
KyAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgY2FzZSAncmlnaHQnOgorICAgICAgICAgICAg
dHAgPSB7dG9wOiBwb3MudG9wICsgcG9zLmhlaWdodCAvIDIgLSBhY3R1YWxIZWlnaHQgLyAyLCBs
ZWZ0OiBwb3MubGVmdCArIHBvcy53aWR0aH0KKyAgICAgICAgICAgIGJyZWFrCisgICAgICAgIH0K
KworICAgICAgICAkdGlwCisgICAgICAgICAgLm9mZnNldCh0cCkKKyAgICAgICAgICAuYWRkQ2xh
c3MocGxhY2VtZW50KQorICAgICAgICAgIC5hZGRDbGFzcygnaW4nKQorICAgICAgfQorICAgIH0K
KworICAsIHNldENvbnRlbnQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgIHZhciAkdGlwID0gdGhpcy50
aXAoKQorICAgICAgICAsIHRpdGxlID0gdGhpcy5nZXRUaXRsZSgpCisKKyAgICAgICR0aXAuZmlu
ZCgnLnRvb2x0aXAtaW5uZXInKVt0aGlzLm9wdGlvbnMuaHRtbCA/ICdodG1sJyA6ICd0ZXh0J10o
dGl0bGUpCisgICAgICAkdGlwLnJlbW92ZUNsYXNzKCdmYWRlIGluIHRvcCBib3R0b20gbGVmdCBy
aWdodCcpCisgICAgfQorCisgICwgaGlkZTogZnVuY3Rpb24gKCkgeworICAgICAgdmFyIHRoYXQg
PSB0aGlzCisgICAgICAgICwgJHRpcCA9IHRoaXMudGlwKCkKKworICAgICAgJHRpcC5yZW1vdmVD
bGFzcygnaW4nKQorCisgICAgICBmdW5jdGlvbiByZW1vdmVXaXRoQW5pbWF0aW9uKCkgeworICAg
ICAgICB2YXIgdGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeworICAgICAgICAgICR0
aXAub2ZmKCQuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCkuZGV0YWNoKCkKKyAgICAgICAgfSwgNTAw
KQorCisgICAgICAgICR0aXAub25lKCQuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCwgZnVuY3Rpb24g
KCkgeworICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KQorICAgICAgICAgICR0aXAuZGV0
YWNoKCkKKyAgICAgICAgfSkKKyAgICAgIH0KKworICAgICAgJC5zdXBwb3J0LnRyYW5zaXRpb24g
JiYgdGhpcy4kdGlwLmhhc0NsYXNzKCdmYWRlJykgPworICAgICAgICByZW1vdmVXaXRoQW5pbWF0
aW9uKCkgOgorICAgICAgICAkdGlwLmRldGFjaCgpCisKKyAgICAgIHJldHVybiB0aGlzCisgICAg
fQorCisgICwgZml4VGl0bGU6IGZ1bmN0aW9uICgpIHsKKyAgICAgIHZhciAkZSA9IHRoaXMuJGVs
ZW1lbnQKKyAgICAgIGlmICgkZS5hdHRyKCd0aXRsZScpIHx8IHR5cGVvZigkZS5hdHRyKCdkYXRh
LW9yaWdpbmFsLXRpdGxlJykpICE9ICdzdHJpbmcnKSB7CisgICAgICAgICRlLmF0dHIoJ2RhdGEt
b3JpZ2luYWwtdGl0bGUnLCAkZS5hdHRyKCd0aXRsZScpIHx8ICcnKS5yZW1vdmVBdHRyKCd0aXRs
ZScpCisgICAgICB9CisgICAgfQorCisgICwgaGFzQ29udGVudDogZnVuY3Rpb24gKCkgeworICAg
ICAgcmV0dXJuIHRoaXMuZ2V0VGl0bGUoKQorICAgIH0KKworICAsIGdldFBvc2l0aW9uOiBmdW5j
dGlvbiAoaW5zaWRlKSB7CisgICAgICByZXR1cm4gJC5leHRlbmQoe30sIChpbnNpZGUgPyB7dG9w
OiAwLCBsZWZ0OiAwfSA6IHRoaXMuJGVsZW1lbnQub2Zmc2V0KCkpLCB7CisgICAgICAgIHdpZHRo
OiB0aGlzLiRlbGVtZW50WzBdLm9mZnNldFdpZHRoCisgICAgICAsIGhlaWdodDogdGhpcy4kZWxl
bWVudFswXS5vZmZzZXRIZWlnaHQKKyAgICAgIH0pCisgICAgfQorCisgICwgZ2V0VGl0bGU6IGZ1
bmN0aW9uICgpIHsKKyAgICAgIHZhciB0aXRsZQorICAgICAgICAsICRlID0gdGhpcy4kZWxlbWVu
dAorICAgICAgICAsIG8gPSB0aGlzLm9wdGlvbnMKKworICAgICAgdGl0bGUgPSAkZS5hdHRyKCdk
YXRhLW9yaWdpbmFsLXRpdGxlJykKKyAgICAgICAgfHwgKHR5cGVvZiBvLnRpdGxlID09ICdmdW5j
dGlvbicgPyBvLnRpdGxlLmNhbGwoJGVbMF0pIDogIG8udGl0bGUpCisKKyAgICAgIHJldHVybiB0
aXRsZQorICAgIH0KKworICAsIHRpcDogZnVuY3Rpb24gKCkgeworICAgICAgcmV0dXJuIHRoaXMu
JHRpcCA9IHRoaXMuJHRpcCB8fCAkKHRoaXMub3B0aW9ucy50ZW1wbGF0ZSkKKyAgICB9CisKKyAg
LCB2YWxpZGF0ZTogZnVuY3Rpb24gKCkgeworICAgICAgaWYgKCF0aGlzLiRlbGVtZW50WzBdLnBh
cmVudE5vZGUpIHsKKyAgICAgICAgdGhpcy5oaWRlKCkKKyAgICAgICAgdGhpcy4kZWxlbWVudCA9
IG51bGwKKyAgICAgICAgdGhpcy5vcHRpb25zID0gbnVsbAorICAgICAgfQorICAgIH0KKworICAs
IGVuYWJsZTogZnVuY3Rpb24gKCkgeworICAgICAgdGhpcy5lbmFibGVkID0gdHJ1ZQorICAgIH0K
KworICAsIGRpc2FibGU6IGZ1bmN0aW9uICgpIHsKKyAgICAgIHRoaXMuZW5hYmxlZCA9IGZhbHNl
CisgICAgfQorCisgICwgdG9nZ2xlRW5hYmxlZDogZnVuY3Rpb24gKCkgeworICAgICAgdGhpcy5l
bmFibGVkID0gIXRoaXMuZW5hYmxlZAorICAgIH0KKworICAsIHRvZ2dsZTogZnVuY3Rpb24gKGUp
IHsKKyAgICAgIHZhciBzZWxmID0gJChlLmN1cnJlbnRUYXJnZXQpW3RoaXMudHlwZV0odGhpcy5f
b3B0aW9ucykuZGF0YSh0aGlzLnR5cGUpCisgICAgICBzZWxmW3NlbGYudGlwKCkuaGFzQ2xhc3Mo
J2luJykgPyAnaGlkZScgOiAnc2hvdyddKCkKKyAgICB9CisKKyAgLCBkZXN0cm95OiBmdW5jdGlv
biAoKSB7CisgICAgICB0aGlzLmhpZGUoKS4kZWxlbWVudC5vZmYoJy4nICsgdGhpcy50eXBlKS5y
ZW1vdmVEYXRhKHRoaXMudHlwZSkKKyAgICB9CisKKyAgfQorCisKKyAvKiBUT09MVElQIFBMVUdJ
TiBERUZJTklUSU9OCisgICogPT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisgIHZhciBv
bGQgPSAkLmZuLnRvb2x0aXAKKworICAkLmZuLnRvb2x0aXAgPSBmdW5jdGlvbiAoIG9wdGlvbiAp
IHsKKyAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHsKKyAgICAgIHZhciAkdGhpcyA9
ICQodGhpcykKKyAgICAgICAgLCBkYXRhID0gJHRoaXMuZGF0YSgndG9vbHRpcCcpCisgICAgICAg
ICwgb3B0aW9ucyA9IHR5cGVvZiBvcHRpb24gPT0gJ29iamVjdCcgJiYgb3B0aW9uCisgICAgICBp
ZiAoIWRhdGEpICR0aGlzLmRhdGEoJ3Rvb2x0aXAnLCAoZGF0YSA9IG5ldyBUb29sdGlwKHRoaXMs
IG9wdGlvbnMpKSkKKyAgICAgIGlmICh0eXBlb2Ygb3B0aW9uID09ICdzdHJpbmcnKSBkYXRhW29w
dGlvbl0oKQorICAgIH0pCisgIH0KKworICAkLmZuLnRvb2x0aXAuQ29uc3RydWN0b3IgPSBUb29s
dGlwCisKKyAgJC5mbi50b29sdGlwLmRlZmF1bHRzID0geworICAgIGFuaW1hdGlvbjogdHJ1ZQor
ICAsIHBsYWNlbWVudDogJ3RvcCcKKyAgLCBzZWxlY3RvcjogZmFsc2UKKyAgLCB0ZW1wbGF0ZTog
JzxkaXYgY2xhc3M9InRvb2x0aXAiPjxkaXYgY2xhc3M9InRvb2x0aXAtYXJyb3ciPjwvZGl2Pjxk
aXYgY2xhc3M9InRvb2x0aXAtaW5uZXIiPjwvZGl2PjwvZGl2PicKKyAgLCB0cmlnZ2VyOiAnaG92
ZXInCisgICwgdGl0bGU6ICcnCisgICwgZGVsYXk6IDAKKyAgLCBodG1sOiBmYWxzZQorICB9CisK
KworIC8qIFRPT0xUSVAgTk8gQ09ORkxJQ1QKKyAgKiA9PT09PT09PT09PT09PT09PT09ICovCisK
KyAgJC5mbi50b29sdGlwLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7CisgICAgJC5mbi50b29s
dGlwID0gb2xkCisgICAgcmV0dXJuIHRoaXMKKyAgfQorCit9KHdpbmRvdy5qUXVlcnkpOy8qID09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
CisgKiBib290c3RyYXAtcG9wb3Zlci5qcyB2Mi4yLjIKKyAqIGh0dHA6Ly90d2l0dGVyLmdpdGh1
Yi5jb20vYm9vdHN0cmFwL2phdmFzY3JpcHQuaHRtbCNwb3BvdmVycworICogPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHly
aWdodCAyMDEyIFR3aXR0ZXIsIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hl
IExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVz
ZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlv
dSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cu
YXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBi
eSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRp
c3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIg
QkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwg
ZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNw
ZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25z
IHVuZGVyIHRoZSBMaWNlbnNlLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworCishZnVuY3Rpb24gKCQpIHsKKworICAi
dXNlIHN0cmljdCI7IC8vIGpzaGludCA7XzsKKworCisgLyogUE9QT1ZFUiBQVUJMSUMgQ0xBU1Mg
REVGSU5JVElPTgorICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworICB2
YXIgUG9wb3ZlciA9IGZ1bmN0aW9uIChlbGVtZW50LCBvcHRpb25zKSB7CisgICAgdGhpcy5pbml0
KCdwb3BvdmVyJywgZWxlbWVudCwgb3B0aW9ucykKKyAgfQorCisKKyAgLyogTk9URTogUE9QT1ZF
UiBFWFRFTkRTIEJPT1RTVFJBUC1UT09MVElQLmpzCisgICAgID09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PSAqLworCisgIFBvcG92ZXIucHJvdG90eXBlID0gJC5leHRl
bmQoe30sICQuZm4udG9vbHRpcC5Db25zdHJ1Y3Rvci5wcm90b3R5cGUsIHsKKworICAgIGNvbnN0
cnVjdG9yOiBQb3BvdmVyCisKKyAgLCBzZXRDb250ZW50OiBmdW5jdGlvbiAoKSB7CisgICAgICB2
YXIgJHRpcCA9IHRoaXMudGlwKCkKKyAgICAgICAgLCB0aXRsZSA9IHRoaXMuZ2V0VGl0bGUoKQor
ICAgICAgICAsIGNvbnRlbnQgPSB0aGlzLmdldENvbnRlbnQoKQorCisgICAgICAkdGlwLmZpbmQo
Jy5wb3BvdmVyLXRpdGxlJylbdGhpcy5vcHRpb25zLmh0bWwgPyAnaHRtbCcgOiAndGV4dCddKHRp
dGxlKQorICAgICAgJHRpcC5maW5kKCcucG9wb3Zlci1jb250ZW50JylbdGhpcy5vcHRpb25zLmh0
bWwgPyAnaHRtbCcgOiAndGV4dCddKGNvbnRlbnQpCisKKyAgICAgICR0aXAucmVtb3ZlQ2xhc3Mo
J2ZhZGUgdG9wIGJvdHRvbSBsZWZ0IHJpZ2h0IGluJykKKyAgICB9CisKKyAgLCBoYXNDb250ZW50
OiBmdW5jdGlvbiAoKSB7CisgICAgICByZXR1cm4gdGhpcy5nZXRUaXRsZSgpIHx8IHRoaXMuZ2V0
Q29udGVudCgpCisgICAgfQorCisgICwgZ2V0Q29udGVudDogZnVuY3Rpb24gKCkgeworICAgICAg
dmFyIGNvbnRlbnQKKyAgICAgICAgLCAkZSA9IHRoaXMuJGVsZW1lbnQKKyAgICAgICAgLCBvID0g
dGhpcy5vcHRpb25zCisKKyAgICAgIGNvbnRlbnQgPSAkZS5hdHRyKCdkYXRhLWNvbnRlbnQnKQor
ICAgICAgICB8fCAodHlwZW9mIG8uY29udGVudCA9PSAnZnVuY3Rpb24nID8gby5jb250ZW50LmNh
bGwoJGVbMF0pIDogIG8uY29udGVudCkKKworICAgICAgcmV0dXJuIGNvbnRlbnQKKyAgICB9CisK
KyAgLCB0aXA6IGZ1bmN0aW9uICgpIHsKKyAgICAgIGlmICghdGhpcy4kdGlwKSB7CisgICAgICAg
IHRoaXMuJHRpcCA9ICQodGhpcy5vcHRpb25zLnRlbXBsYXRlKQorICAgICAgfQorICAgICAgcmV0
dXJuIHRoaXMuJHRpcAorICAgIH0KKworICAsIGRlc3Ryb3k6IGZ1bmN0aW9uICgpIHsKKyAgICAg
IHRoaXMuaGlkZSgpLiRlbGVtZW50Lm9mZignLicgKyB0aGlzLnR5cGUpLnJlbW92ZURhdGEodGhp
cy50eXBlKQorICAgIH0KKworICB9KQorCisKKyAvKiBQT1BPVkVSIFBMVUdJTiBERUZJTklUSU9O
CisgICogPT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworICB2YXIgb2xkID0gJC5mbi5wb3Bv
dmVyCisKKyAgJC5mbi5wb3BvdmVyID0gZnVuY3Rpb24gKG9wdGlvbikgeworICAgIHJldHVybiB0
aGlzLmVhY2goZnVuY3Rpb24gKCkgeworICAgICAgdmFyICR0aGlzID0gJCh0aGlzKQorICAgICAg
ICAsIGRhdGEgPSAkdGhpcy5kYXRhKCdwb3BvdmVyJykKKyAgICAgICAgLCBvcHRpb25zID0gdHlw
ZW9mIG9wdGlvbiA9PSAnb2JqZWN0JyAmJiBvcHRpb24KKyAgICAgIGlmICghZGF0YSkgJHRoaXMu
ZGF0YSgncG9wb3ZlcicsIChkYXRhID0gbmV3IFBvcG92ZXIodGhpcywgb3B0aW9ucykpKQorICAg
ICAgaWYgKHR5cGVvZiBvcHRpb24gPT0gJ3N0cmluZycpIGRhdGFbb3B0aW9uXSgpCisgICAgfSkK
KyAgfQorCisgICQuZm4ucG9wb3Zlci5Db25zdHJ1Y3RvciA9IFBvcG92ZXIKKworICAkLmZuLnBv
cG92ZXIuZGVmYXVsdHMgPSAkLmV4dGVuZCh7fSAsICQuZm4udG9vbHRpcC5kZWZhdWx0cywgewor
ICAgIHBsYWNlbWVudDogJ3JpZ2h0JworICAsIHRyaWdnZXI6ICdjbGljaycKKyAgLCBjb250ZW50
OiAnJworICAsIHRlbXBsYXRlOiAnPGRpdiBjbGFzcz0icG9wb3ZlciI+PGRpdiBjbGFzcz0iYXJy
b3ciPjwvZGl2PjxkaXYgY2xhc3M9InBvcG92ZXItaW5uZXIiPjxoMyBjbGFzcz0icG9wb3Zlci10
aXRsZSI+PC9oMz48ZGl2IGNsYXNzPSJwb3BvdmVyLWNvbnRlbnQiPjwvZGl2PjwvZGl2PjwvZGl2
PicKKyAgfSkKKworCisgLyogUE9QT1ZFUiBOTyBDT05GTElDVAorICAqID09PT09PT09PT09PT09
PT09PT0gKi8KKworICAkLmZuLnBvcG92ZXIubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHsKKyAg
ICAkLmZuLnBvcG92ZXIgPSBvbGQKKyAgICByZXR1cm4gdGhpcworICB9CisKK30od2luZG93LmpR
dWVyeSk7LyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQorICogYm9vdHN0cmFwLXNjcm9sbHNweS5qcyB2Mi4yLjIKKyAqIGh0dHA6
Ly90d2l0dGVyLmdpdGh1Yi5jb20vYm9vdHN0cmFwL2phdmFzY3JpcHQuaHRtbCNzY3JvbGxzcHkK
KyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KKyAqIENvcHlyaWdodCAyMDEyIFR3aXR0ZXIsIEluYy4KKyAqCisgKiBMaWNlbnNl
ZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsK
KyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0
aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAor
ICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAq
IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGlu
Zywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1
dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElU
SU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUg
TGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBh
bmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICogPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworCish
ZnVuY3Rpb24gKCQpIHsKKworICAidXNlIHN0cmljdCI7IC8vIGpzaGludCA7XzsKKworCisgLyog
U0NST0xMU1BZIENMQVNTIERFRklOSVRJT04KKyAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09
PSAqLworCisgIGZ1bmN0aW9uIFNjcm9sbFNweShlbGVtZW50LCBvcHRpb25zKSB7CisgICAgdmFy
IHByb2Nlc3MgPSAkLnByb3h5KHRoaXMucHJvY2VzcywgdGhpcykKKyAgICAgICwgJGVsZW1lbnQg
PSAkKGVsZW1lbnQpLmlzKCdib2R5JykgPyAkKHdpbmRvdykgOiAkKGVsZW1lbnQpCisgICAgICAs
IGhyZWYKKyAgICB0aGlzLm9wdGlvbnMgPSAkLmV4dGVuZCh7fSwgJC5mbi5zY3JvbGxzcHkuZGVm
YXVsdHMsIG9wdGlvbnMpCisgICAgdGhpcy4kc2Nyb2xsRWxlbWVudCA9ICRlbGVtZW50Lm9uKCdz
Y3JvbGwuc2Nyb2xsLXNweS5kYXRhLWFwaScsIHByb2Nlc3MpCisgICAgdGhpcy5zZWxlY3RvciA9
ICh0aGlzLm9wdGlvbnMudGFyZ2V0CisgICAgICB8fCAoKGhyZWYgPSAkKGVsZW1lbnQpLmF0dHIo
J2hyZWYnKSkgJiYgaHJlZi5yZXBsYWNlKC8uKig/PSNbXlxzXSskKS8sICcnKSkgLy9zdHJpcCBm
b3IgaWU3CisgICAgICB8fCAnJykgKyAnIC5uYXYgbGkgPiBhJworICAgIHRoaXMuJGJvZHkgPSAk
KCdib2R5JykKKyAgICB0aGlzLnJlZnJlc2goKQorICAgIHRoaXMucHJvY2VzcygpCisgIH0KKwor
ICBTY3JvbGxTcHkucHJvdG90eXBlID0geworCisgICAgICBjb25zdHJ1Y3RvcjogU2Nyb2xsU3B5
CisKKyAgICAsIHJlZnJlc2g6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIHNlbGYgPSB0aGlz
CisgICAgICAgICAgLCAkdGFyZ2V0cworCisgICAgICAgIHRoaXMub2Zmc2V0cyA9ICQoW10pCisg
ICAgICAgIHRoaXMudGFyZ2V0cyA9ICQoW10pCisKKyAgICAgICAgJHRhcmdldHMgPSB0aGlzLiRi
b2R5CisgICAgICAgICAgLmZpbmQodGhpcy5zZWxlY3RvcikKKyAgICAgICAgICAubWFwKGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgICAgIHZhciAkZWwgPSAkKHRoaXMpCisgICAgICAgICAgICAgICwg
aHJlZiA9ICRlbC5kYXRhKCd0YXJnZXQnKSB8fCAkZWwuYXR0cignaHJlZicpCisgICAgICAgICAg
ICAgICwgJGhyZWYgPSAvXiNcdy8udGVzdChocmVmKSAmJiAkKGhyZWYpCisgICAgICAgICAgICBy
ZXR1cm4gKCAkaHJlZgorICAgICAgICAgICAgICAmJiAkaHJlZi5sZW5ndGgKKyAgICAgICAgICAg
ICAgJiYgW1sgJGhyZWYucG9zaXRpb24oKS50b3AgKyBzZWxmLiRzY3JvbGxFbGVtZW50LnNjcm9s
bFRvcCgpLCBocmVmIF1dICkgfHwgbnVsbAorICAgICAgICAgIH0pCisgICAgICAgICAgLnNvcnQo
ZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGFbMF0gLSBiWzBdIH0pCisgICAgICAgICAgLmVhY2go
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgc2VsZi5vZmZzZXRzLnB1c2godGhpc1swXSkKKyAg
ICAgICAgICAgIHNlbGYudGFyZ2V0cy5wdXNoKHRoaXNbMV0pCisgICAgICAgICAgfSkKKyAgICAg
IH0KKworICAgICwgcHJvY2VzczogZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgc2Nyb2xsVG9w
ID0gdGhpcy4kc2Nyb2xsRWxlbWVudC5zY3JvbGxUb3AoKSArIHRoaXMub3B0aW9ucy5vZmZzZXQK
KyAgICAgICAgICAsIHNjcm9sbEhlaWdodCA9IHRoaXMuJHNjcm9sbEVsZW1lbnRbMF0uc2Nyb2xs
SGVpZ2h0IHx8IHRoaXMuJGJvZHlbMF0uc2Nyb2xsSGVpZ2h0CisgICAgICAgICAgLCBtYXhTY3Jv
bGwgPSBzY3JvbGxIZWlnaHQgLSB0aGlzLiRzY3JvbGxFbGVtZW50LmhlaWdodCgpCisgICAgICAg
ICAgLCBvZmZzZXRzID0gdGhpcy5vZmZzZXRzCisgICAgICAgICAgLCB0YXJnZXRzID0gdGhpcy50
YXJnZXRzCisgICAgICAgICAgLCBhY3RpdmVUYXJnZXQgPSB0aGlzLmFjdGl2ZVRhcmdldAorICAg
ICAgICAgICwgaQorCisgICAgICAgIGlmIChzY3JvbGxUb3AgPj0gbWF4U2Nyb2xsKSB7CisgICAg
ICAgICAgcmV0dXJuIGFjdGl2ZVRhcmdldCAhPSAoaSA9IHRhcmdldHMubGFzdCgpWzBdKQorICAg
ICAgICAgICAgJiYgdGhpcy5hY3RpdmF0ZSAoIGkgKQorICAgICAgICB9CisKKyAgICAgICAgZm9y
IChpID0gb2Zmc2V0cy5sZW5ndGg7IGktLTspIHsKKyAgICAgICAgICBhY3RpdmVUYXJnZXQgIT0g
dGFyZ2V0c1tpXQorICAgICAgICAgICAgJiYgc2Nyb2xsVG9wID49IG9mZnNldHNbaV0KKyAgICAg
ICAgICAgICYmICghb2Zmc2V0c1tpICsgMV0gfHwgc2Nyb2xsVG9wIDw9IG9mZnNldHNbaSArIDFd
KQorICAgICAgICAgICAgJiYgdGhpcy5hY3RpdmF0ZSggdGFyZ2V0c1tpXSApCisgICAgICAgIH0K
KyAgICAgIH0KKworICAgICwgYWN0aXZhdGU6IGZ1bmN0aW9uICh0YXJnZXQpIHsKKyAgICAgICAg
dmFyIGFjdGl2ZQorICAgICAgICAgICwgc2VsZWN0b3IKKworICAgICAgICB0aGlzLmFjdGl2ZVRh
cmdldCA9IHRhcmdldAorCisgICAgICAgICQodGhpcy5zZWxlY3RvcikKKyAgICAgICAgICAucGFy
ZW50KCcuYWN0aXZlJykKKyAgICAgICAgICAucmVtb3ZlQ2xhc3MoJ2FjdGl2ZScpCisKKyAgICAg
ICAgc2VsZWN0b3IgPSB0aGlzLnNlbGVjdG9yCisgICAgICAgICAgKyAnW2RhdGEtdGFyZ2V0PSIn
ICsgdGFyZ2V0ICsgJyJdLCcKKyAgICAgICAgICArIHRoaXMuc2VsZWN0b3IgKyAnW2hyZWY9Iicg
KyB0YXJnZXQgKyAnIl0nCisKKyAgICAgICAgYWN0aXZlID0gJChzZWxlY3RvcikKKyAgICAgICAg
ICAucGFyZW50KCdsaScpCisgICAgICAgICAgLmFkZENsYXNzKCdhY3RpdmUnKQorCisgICAgICAg
IGlmIChhY3RpdmUucGFyZW50KCcuZHJvcGRvd24tbWVudScpLmxlbmd0aCkgIHsKKyAgICAgICAg
ICBhY3RpdmUgPSBhY3RpdmUuY2xvc2VzdCgnbGkuZHJvcGRvd24nKS5hZGRDbGFzcygnYWN0aXZl
JykKKyAgICAgICAgfQorCisgICAgICAgIGFjdGl2ZS50cmlnZ2VyKCdhY3RpdmF0ZScpCisgICAg
ICB9CisKKyAgfQorCisKKyAvKiBTQ1JPTExTUFkgUExVR0lOIERFRklOSVRJT04KKyAgKiA9PT09
PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworICB2YXIgb2xkID0gJC5mbi5zY3JvbGxzcHkK
KworICAkLmZuLnNjcm9sbHNweSA9IGZ1bmN0aW9uIChvcHRpb24pIHsKKyAgICByZXR1cm4gdGhp
cy5lYWNoKGZ1bmN0aW9uICgpIHsKKyAgICAgIHZhciAkdGhpcyA9ICQodGhpcykKKyAgICAgICAg
LCBkYXRhID0gJHRoaXMuZGF0YSgnc2Nyb2xsc3B5JykKKyAgICAgICAgLCBvcHRpb25zID0gdHlw
ZW9mIG9wdGlvbiA9PSAnb2JqZWN0JyAmJiBvcHRpb24KKyAgICAgIGlmICghZGF0YSkgJHRoaXMu
ZGF0YSgnc2Nyb2xsc3B5JywgKGRhdGEgPSBuZXcgU2Nyb2xsU3B5KHRoaXMsIG9wdGlvbnMpKSkK
KyAgICAgIGlmICh0eXBlb2Ygb3B0aW9uID09ICdzdHJpbmcnKSBkYXRhW29wdGlvbl0oKQorICAg
IH0pCisgIH0KKworICAkLmZuLnNjcm9sbHNweS5Db25zdHJ1Y3RvciA9IFNjcm9sbFNweQorCisg
ICQuZm4uc2Nyb2xsc3B5LmRlZmF1bHRzID0geworICAgIG9mZnNldDogMTAKKyAgfQorCisKKyAv
KiBTQ1JPTExTUFkgTk8gQ09ORkxJQ1QKKyAgKiA9PT09PT09PT09PT09PT09PT09PT0gKi8KKwor
ICAkLmZuLnNjcm9sbHNweS5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKCkgeworICAgICQuZm4uc2Ny
b2xsc3B5ID0gb2xkCisgICAgcmV0dXJuIHRoaXMKKyAgfQorCisKKyAvKiBTQ1JPTExTUFkgREFU
QS1BUEkKKyAgKiA9PT09PT09PT09PT09PT09PT0gKi8KKworICAkKHdpbmRvdykub24oJ2xvYWQn
LCBmdW5jdGlvbiAoKSB7CisgICAgJCgnW2RhdGEtc3B5PSJzY3JvbGwiXScpLmVhY2goZnVuY3Rp
b24gKCkgeworICAgICAgdmFyICRzcHkgPSAkKHRoaXMpCisgICAgICAkc3B5LnNjcm9sbHNweSgk
c3B5LmRhdGEoKSkKKyAgICB9KQorICB9KQorCit9KHdpbmRvdy5qUXVlcnkpOy8qID09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBib290
c3RyYXAtdGFiLmpzIHYyLjIuMgorICogaHR0cDovL3R3aXR0ZXIuZ2l0aHViLmNvbS9ib290c3Ry
YXAvamF2YXNjcmlwdC5odG1sI3RhYnMKKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgMjAxMiBUd2l0dGVyLCBJ
bmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIu
MCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBp
biBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkg
b2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMv
TElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3Ig
YWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUg
TGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBX
QVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGlt
cGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zl
cm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4K
KyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ICovCisKKworIWZ1bmN0aW9uICgkKSB7CisKKyAgInVzZSBzdHJpY3QiOyAvLyBqc2hpbnQg
O187CisKKworIC8qIFRBQiBDTEFTUyBERUZJTklUSU9OCisgICogPT09PT09PT09PT09PT09PT09
PT0gKi8KKworICB2YXIgVGFiID0gZnVuY3Rpb24gKGVsZW1lbnQpIHsKKyAgICB0aGlzLmVsZW1l
bnQgPSAkKGVsZW1lbnQpCisgIH0KKworICBUYWIucHJvdG90eXBlID0geworCisgICAgY29uc3Ry
dWN0b3I6IFRhYgorCisgICwgc2hvdzogZnVuY3Rpb24gKCkgeworICAgICAgdmFyICR0aGlzID0g
dGhpcy5lbGVtZW50CisgICAgICAgICwgJHVsID0gJHRoaXMuY2xvc2VzdCgndWw6bm90KC5kcm9w
ZG93bi1tZW51KScpCisgICAgICAgICwgc2VsZWN0b3IgPSAkdGhpcy5hdHRyKCdkYXRhLXRhcmdl
dCcpCisgICAgICAgICwgcHJldmlvdXMKKyAgICAgICAgLCAkdGFyZ2V0CisgICAgICAgICwgZQor
CisgICAgICBpZiAoIXNlbGVjdG9yKSB7CisgICAgICAgIHNlbGVjdG9yID0gJHRoaXMuYXR0cign
aHJlZicpCisgICAgICAgIHNlbGVjdG9yID0gc2VsZWN0b3IgJiYgc2VsZWN0b3IucmVwbGFjZSgv
LiooPz0jW15cc10qJCkvLCAnJykgLy9zdHJpcCBmb3IgaWU3CisgICAgICB9CisKKyAgICAgIGlm
ICggJHRoaXMucGFyZW50KCdsaScpLmhhc0NsYXNzKCdhY3RpdmUnKSApIHJldHVybgorCisgICAg
ICBwcmV2aW91cyA9ICR1bC5maW5kKCcuYWN0aXZlOmxhc3QgYScpWzBdCisKKyAgICAgIGUgPSAk
LkV2ZW50KCdzaG93JywgeworICAgICAgICByZWxhdGVkVGFyZ2V0OiBwcmV2aW91cworICAgICAg
fSkKKworICAgICAgJHRoaXMudHJpZ2dlcihlKQorCisgICAgICBpZiAoZS5pc0RlZmF1bHRQcmV2
ZW50ZWQoKSkgcmV0dXJuCisKKyAgICAgICR0YXJnZXQgPSAkKHNlbGVjdG9yKQorCisgICAgICB0
aGlzLmFjdGl2YXRlKCR0aGlzLnBhcmVudCgnbGknKSwgJHVsKQorICAgICAgdGhpcy5hY3RpdmF0
ZSgkdGFyZ2V0LCAkdGFyZ2V0LnBhcmVudCgpLCBmdW5jdGlvbiAoKSB7CisgICAgICAgICR0aGlz
LnRyaWdnZXIoeworICAgICAgICAgIHR5cGU6ICdzaG93bicKKyAgICAgICAgLCByZWxhdGVkVGFy
Z2V0OiBwcmV2aW91cworICAgICAgICB9KQorICAgICAgfSkKKyAgICB9CisKKyAgLCBhY3RpdmF0
ZTogZnVuY3Rpb24gKCBlbGVtZW50LCBjb250YWluZXIsIGNhbGxiYWNrKSB7CisgICAgICB2YXIg
JGFjdGl2ZSA9IGNvbnRhaW5lci5maW5kKCc+IC5hY3RpdmUnKQorICAgICAgICAsIHRyYW5zaXRp
b24gPSBjYWxsYmFjaworICAgICAgICAgICAgJiYgJC5zdXBwb3J0LnRyYW5zaXRpb24KKyAgICAg
ICAgICAgICYmICRhY3RpdmUuaGFzQ2xhc3MoJ2ZhZGUnKQorCisgICAgICBmdW5jdGlvbiBuZXh0
KCkgeworICAgICAgICAkYWN0aXZlCisgICAgICAgICAgLnJlbW92ZUNsYXNzKCdhY3RpdmUnKQor
ICAgICAgICAgIC5maW5kKCc+IC5kcm9wZG93bi1tZW51ID4gLmFjdGl2ZScpCisgICAgICAgICAg
LnJlbW92ZUNsYXNzKCdhY3RpdmUnKQorCisgICAgICAgIGVsZW1lbnQuYWRkQ2xhc3MoJ2FjdGl2
ZScpCisKKyAgICAgICAgaWYgKHRyYW5zaXRpb24pIHsKKyAgICAgICAgICBlbGVtZW50WzBdLm9m
ZnNldFdpZHRoIC8vIHJlZmxvdyBmb3IgdHJhbnNpdGlvbgorICAgICAgICAgIGVsZW1lbnQuYWRk
Q2xhc3MoJ2luJykKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBlbGVtZW50LnJlbW92ZUNs
YXNzKCdmYWRlJykKKyAgICAgICAgfQorCisgICAgICAgIGlmICggZWxlbWVudC5wYXJlbnQoJy5k
cm9wZG93bi1tZW51JykgKSB7CisgICAgICAgICAgZWxlbWVudC5jbG9zZXN0KCdsaS5kcm9wZG93
bicpLmFkZENsYXNzKCdhY3RpdmUnKQorICAgICAgICB9CisKKyAgICAgICAgY2FsbGJhY2sgJiYg
Y2FsbGJhY2soKQorICAgICAgfQorCisgICAgICB0cmFuc2l0aW9uID8KKyAgICAgICAgJGFjdGl2
ZS5vbmUoJC5zdXBwb3J0LnRyYW5zaXRpb24uZW5kLCBuZXh0KSA6CisgICAgICAgIG5leHQoKQor
CisgICAgICAkYWN0aXZlLnJlbW92ZUNsYXNzKCdpbicpCisgICAgfQorICB9CisKKworIC8qIFRB
QiBQTFVHSU4gREVGSU5JVElPTgorICAqID09PT09PT09PT09PT09PT09PT09PSAqLworCisgIHZh
ciBvbGQgPSAkLmZuLnRhYgorCisgICQuZm4udGFiID0gZnVuY3Rpb24gKCBvcHRpb24gKSB7Cisg
ICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7CisgICAgICB2YXIgJHRoaXMgPSAkKHRo
aXMpCisgICAgICAgICwgZGF0YSA9ICR0aGlzLmRhdGEoJ3RhYicpCisgICAgICBpZiAoIWRhdGEp
ICR0aGlzLmRhdGEoJ3RhYicsIChkYXRhID0gbmV3IFRhYih0aGlzKSkpCisgICAgICBpZiAodHlw
ZW9mIG9wdGlvbiA9PSAnc3RyaW5nJykgZGF0YVtvcHRpb25dKCkKKyAgICB9KQorICB9CisKKyAg
JC5mbi50YWIuQ29uc3RydWN0b3IgPSBUYWIKKworCisgLyogVEFCIE5PIENPTkZMSUNUCisgICog
PT09PT09PT09PT09PT09ICovCisKKyAgJC5mbi50YWIubm9Db25mbGljdCA9IGZ1bmN0aW9uICgp
IHsKKyAgICAkLmZuLnRhYiA9IG9sZAorICAgIHJldHVybiB0aGlzCisgIH0KKworCisgLyogVEFC
IERBVEEtQVBJCisgICogPT09PT09PT09PT09ICovCisKKyAgJChkb2N1bWVudCkub24oJ2NsaWNr
LnRhYi5kYXRhLWFwaScsICdbZGF0YS10b2dnbGU9InRhYiJdLCBbZGF0YS10b2dnbGU9InBpbGwi
XScsIGZ1bmN0aW9uIChlKSB7CisgICAgZS5wcmV2ZW50RGVmYXVsdCgpCisgICAgJCh0aGlzKS50
YWIoJ3Nob3cnKQorICB9KQorCit9KHdpbmRvdy5qUXVlcnkpOy8qID09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIGJvb3RzdHJh
cC10eXBlYWhlYWQuanMgdjIuMi4yCisgKiBodHRwOi8vdHdpdHRlci5naXRodWIuY29tL2Jvb3Rz
dHJhcC9qYXZhc2NyaXB0Lmh0bWwjdHlwZWFoZWFkCisgKiA9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgMjAx
MiBUd2l0dGVyLCBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNl
LCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBm
aWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9i
dGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5v
cmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGlj
YWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRl
ZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAor
ICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBl
eHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBs
YW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0
aGUgTGljZW5zZS4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PSAqLworCisKKyFmdW5jdGlvbigkKXsKKworICAidXNlIHN0cmlj
dCI7IC8vIGpzaGludCA7XzsKKworCisgLyogVFlQRUFIRUFEIFBVQkxJQyBDTEFTUyBERUZJTklU
SU9OCisgICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKyAgdmFyIFR5
cGVhaGVhZCA9IGZ1bmN0aW9uIChlbGVtZW50LCBvcHRpb25zKSB7CisgICAgdGhpcy4kZWxlbWVu
dCA9ICQoZWxlbWVudCkKKyAgICB0aGlzLm9wdGlvbnMgPSAkLmV4dGVuZCh7fSwgJC5mbi50eXBl
YWhlYWQuZGVmYXVsdHMsIG9wdGlvbnMpCisgICAgdGhpcy5tYXRjaGVyID0gdGhpcy5vcHRpb25z
Lm1hdGNoZXIgfHwgdGhpcy5tYXRjaGVyCisgICAgdGhpcy5zb3J0ZXIgPSB0aGlzLm9wdGlvbnMu
c29ydGVyIHx8IHRoaXMuc29ydGVyCisgICAgdGhpcy5oaWdobGlnaHRlciA9IHRoaXMub3B0aW9u
cy5oaWdobGlnaHRlciB8fCB0aGlzLmhpZ2hsaWdodGVyCisgICAgdGhpcy51cGRhdGVyID0gdGhp
cy5vcHRpb25zLnVwZGF0ZXIgfHwgdGhpcy51cGRhdGVyCisgICAgdGhpcy5zb3VyY2UgPSB0aGlz
Lm9wdGlvbnMuc291cmNlCisgICAgdGhpcy4kbWVudSA9ICQodGhpcy5vcHRpb25zLm1lbnUpCisg
ICAgdGhpcy5zaG93biA9IGZhbHNlCisgICAgdGhpcy5saXN0ZW4oKQorICB9CisKKyAgVHlwZWFo
ZWFkLnByb3RvdHlwZSA9IHsKKworICAgIGNvbnN0cnVjdG9yOiBUeXBlYWhlYWQKKworICAsIHNl
bGVjdDogZnVuY3Rpb24gKCkgeworICAgICAgdmFyIHZhbCA9IHRoaXMuJG1lbnUuZmluZCgnLmFj
dGl2ZScpLmF0dHIoJ2RhdGEtdmFsdWUnKQorICAgICAgdGhpcy4kZWxlbWVudAorICAgICAgICAu
dmFsKHRoaXMudXBkYXRlcih2YWwpKQorICAgICAgICAuY2hhbmdlKCkKKyAgICAgIHJldHVybiB0
aGlzLmhpZGUoKQorICAgIH0KKworICAsIHVwZGF0ZXI6IGZ1bmN0aW9uIChpdGVtKSB7CisgICAg
ICByZXR1cm4gaXRlbQorICAgIH0KKworICAsIHNob3c6IGZ1bmN0aW9uICgpIHsKKyAgICAgIHZh
ciBwb3MgPSAkLmV4dGVuZCh7fSwgdGhpcy4kZWxlbWVudC5wb3NpdGlvbigpLCB7CisgICAgICAg
IGhlaWdodDogdGhpcy4kZWxlbWVudFswXS5vZmZzZXRIZWlnaHQKKyAgICAgIH0pCisKKyAgICAg
IHRoaXMuJG1lbnUKKyAgICAgICAgLmluc2VydEFmdGVyKHRoaXMuJGVsZW1lbnQpCisgICAgICAg
IC5jc3MoeworICAgICAgICAgIHRvcDogcG9zLnRvcCArIHBvcy5oZWlnaHQKKyAgICAgICAgLCBs
ZWZ0OiBwb3MubGVmdAorICAgICAgICB9KQorICAgICAgICAuc2hvdygpCisKKyAgICAgIHRoaXMu
c2hvd24gPSB0cnVlCisgICAgICByZXR1cm4gdGhpcworICAgIH0KKworICAsIGhpZGU6IGZ1bmN0
aW9uICgpIHsKKyAgICAgIHRoaXMuJG1lbnUuaGlkZSgpCisgICAgICB0aGlzLnNob3duID0gZmFs
c2UKKyAgICAgIHJldHVybiB0aGlzCisgICAgfQorCisgICwgbG9va3VwOiBmdW5jdGlvbiAoZXZl
bnQpIHsKKyAgICAgIHZhciBpdGVtcworCisgICAgICB0aGlzLnF1ZXJ5ID0gdGhpcy4kZWxlbWVu
dC52YWwoKQorCisgICAgICBpZiAoIXRoaXMucXVlcnkgfHwgdGhpcy5xdWVyeS5sZW5ndGggPCB0
aGlzLm9wdGlvbnMubWluTGVuZ3RoKSB7CisgICAgICAgIHJldHVybiB0aGlzLnNob3duID8gdGhp
cy5oaWRlKCkgOiB0aGlzCisgICAgICB9CisKKyAgICAgIGl0ZW1zID0gJC5pc0Z1bmN0aW9uKHRo
aXMuc291cmNlKSA/IHRoaXMuc291cmNlKHRoaXMucXVlcnksICQucHJveHkodGhpcy5wcm9jZXNz
LCB0aGlzKSkgOiB0aGlzLnNvdXJjZQorCisgICAgICByZXR1cm4gaXRlbXMgPyB0aGlzLnByb2Nl
c3MoaXRlbXMpIDogdGhpcworICAgIH0KKworICAsIHByb2Nlc3M6IGZ1bmN0aW9uIChpdGVtcykg
eworICAgICAgdmFyIHRoYXQgPSB0aGlzCisKKyAgICAgIGl0ZW1zID0gJC5ncmVwKGl0ZW1zLCBm
dW5jdGlvbiAoaXRlbSkgeworICAgICAgICByZXR1cm4gdGhhdC5tYXRjaGVyKGl0ZW0pCisgICAg
ICB9KQorCisgICAgICBpdGVtcyA9IHRoaXMuc29ydGVyKGl0ZW1zKQorCisgICAgICBpZiAoIWl0
ZW1zLmxlbmd0aCkgeworICAgICAgICByZXR1cm4gdGhpcy5zaG93biA/IHRoaXMuaGlkZSgpIDog
dGhpcworICAgICAgfQorCisgICAgICByZXR1cm4gdGhpcy5yZW5kZXIoaXRlbXMuc2xpY2UoMCwg
dGhpcy5vcHRpb25zLml0ZW1zKSkuc2hvdygpCisgICAgfQorCisgICwgbWF0Y2hlcjogZnVuY3Rp
b24gKGl0ZW0pIHsKKyAgICAgIHJldHVybiB+aXRlbS50b0xvd2VyQ2FzZSgpLmluZGV4T2YodGhp
cy5xdWVyeS50b0xvd2VyQ2FzZSgpKQorICAgIH0KKworICAsIHNvcnRlcjogZnVuY3Rpb24gKGl0
ZW1zKSB7CisgICAgICB2YXIgYmVnaW5zd2l0aCA9IFtdCisgICAgICAgICwgY2FzZVNlbnNpdGl2
ZSA9IFtdCisgICAgICAgICwgY2FzZUluc2Vuc2l0aXZlID0gW10KKyAgICAgICAgLCBpdGVtCisK
KyAgICAgIHdoaWxlIChpdGVtID0gaXRlbXMuc2hpZnQoKSkgeworICAgICAgICBpZiAoIWl0ZW0u
dG9Mb3dlckNhc2UoKS5pbmRleE9mKHRoaXMucXVlcnkudG9Mb3dlckNhc2UoKSkpIGJlZ2luc3dp
dGgucHVzaChpdGVtKQorICAgICAgICBlbHNlIGlmICh+aXRlbS5pbmRleE9mKHRoaXMucXVlcnkp
KSBjYXNlU2Vuc2l0aXZlLnB1c2goaXRlbSkKKyAgICAgICAgZWxzZSBjYXNlSW5zZW5zaXRpdmUu
cHVzaChpdGVtKQorICAgICAgfQorCisgICAgICByZXR1cm4gYmVnaW5zd2l0aC5jb25jYXQoY2Fz
ZVNlbnNpdGl2ZSwgY2FzZUluc2Vuc2l0aXZlKQorICAgIH0KKworICAsIGhpZ2hsaWdodGVyOiBm
dW5jdGlvbiAoaXRlbSkgeworICAgICAgdmFyIHF1ZXJ5ID0gdGhpcy5xdWVyeS5yZXBsYWNlKC9b
XC1cW1xde30oKSorPy4sXFxcXiR8I1xzXS9nLCAnXFwkJicpCisgICAgICByZXR1cm4gaXRlbS5y
ZXBsYWNlKG5ldyBSZWdFeHAoJygnICsgcXVlcnkgKyAnKScsICdpZycpLCBmdW5jdGlvbiAoJDEs
IG1hdGNoKSB7CisgICAgICAgIHJldHVybiAnPHN0cm9uZz4nICsgbWF0Y2ggKyAnPC9zdHJvbmc+
JworICAgICAgfSkKKyAgICB9CisKKyAgLCByZW5kZXI6IGZ1bmN0aW9uIChpdGVtcykgeworICAg
ICAgdmFyIHRoYXQgPSB0aGlzCisKKyAgICAgIGl0ZW1zID0gJChpdGVtcykubWFwKGZ1bmN0aW9u
IChpLCBpdGVtKSB7CisgICAgICAgIGkgPSAkKHRoYXQub3B0aW9ucy5pdGVtKS5hdHRyKCdkYXRh
LXZhbHVlJywgaXRlbSkKKyAgICAgICAgaS5maW5kKCdhJykuaHRtbCh0aGF0LmhpZ2hsaWdodGVy
KGl0ZW0pKQorICAgICAgICByZXR1cm4gaVswXQorICAgICAgfSkKKworICAgICAgaXRlbXMuZmly
c3QoKS5hZGRDbGFzcygnYWN0aXZlJykKKyAgICAgIHRoaXMuJG1lbnUuaHRtbChpdGVtcykKKyAg
ICAgIHJldHVybiB0aGlzCisgICAgfQorCisgICwgbmV4dDogZnVuY3Rpb24gKGV2ZW50KSB7Cisg
ICAgICB2YXIgYWN0aXZlID0gdGhpcy4kbWVudS5maW5kKCcuYWN0aXZlJykucmVtb3ZlQ2xhc3Mo
J2FjdGl2ZScpCisgICAgICAgICwgbmV4dCA9IGFjdGl2ZS5uZXh0KCkKKworICAgICAgaWYgKCFu
ZXh0Lmxlbmd0aCkgeworICAgICAgICBuZXh0ID0gJCh0aGlzLiRtZW51LmZpbmQoJ2xpJylbMF0p
CisgICAgICB9CisKKyAgICAgIG5leHQuYWRkQ2xhc3MoJ2FjdGl2ZScpCisgICAgfQorCisgICwg
cHJldjogZnVuY3Rpb24gKGV2ZW50KSB7CisgICAgICB2YXIgYWN0aXZlID0gdGhpcy4kbWVudS5m
aW5kKCcuYWN0aXZlJykucmVtb3ZlQ2xhc3MoJ2FjdGl2ZScpCisgICAgICAgICwgcHJldiA9IGFj
dGl2ZS5wcmV2KCkKKworICAgICAgaWYgKCFwcmV2Lmxlbmd0aCkgeworICAgICAgICBwcmV2ID0g
dGhpcy4kbWVudS5maW5kKCdsaScpLmxhc3QoKQorICAgICAgfQorCisgICAgICBwcmV2LmFkZENs
YXNzKCdhY3RpdmUnKQorICAgIH0KKworICAsIGxpc3RlbjogZnVuY3Rpb24gKCkgeworICAgICAg
dGhpcy4kZWxlbWVudAorICAgICAgICAub24oJ2JsdXInLCAgICAgJC5wcm94eSh0aGlzLmJsdXIs
IHRoaXMpKQorICAgICAgICAub24oJ2tleXByZXNzJywgJC5wcm94eSh0aGlzLmtleXByZXNzLCB0
aGlzKSkKKyAgICAgICAgLm9uKCdrZXl1cCcsICAgICQucHJveHkodGhpcy5rZXl1cCwgdGhpcykp
CisKKyAgICAgIGlmICh0aGlzLmV2ZW50U3VwcG9ydGVkKCdrZXlkb3duJykpIHsKKyAgICAgICAg
dGhpcy4kZWxlbWVudC5vbigna2V5ZG93bicsICQucHJveHkodGhpcy5rZXlkb3duLCB0aGlzKSkK
KyAgICAgIH0KKworICAgICAgdGhpcy4kbWVudQorICAgICAgICAub24oJ2NsaWNrJywgJC5wcm94
eSh0aGlzLmNsaWNrLCB0aGlzKSkKKyAgICAgICAgLm9uKCdtb3VzZWVudGVyJywgJ2xpJywgJC5w
cm94eSh0aGlzLm1vdXNlZW50ZXIsIHRoaXMpKQorICAgIH0KKworICAsIGV2ZW50U3VwcG9ydGVk
OiBmdW5jdGlvbihldmVudE5hbWUpIHsKKyAgICAgIHZhciBpc1N1cHBvcnRlZCA9IGV2ZW50TmFt
ZSBpbiB0aGlzLiRlbGVtZW50CisgICAgICBpZiAoIWlzU3VwcG9ydGVkKSB7CisgICAgICAgIHRo
aXMuJGVsZW1lbnQuc2V0QXR0cmlidXRlKGV2ZW50TmFtZSwgJ3JldHVybjsnKQorICAgICAgICBp
c1N1cHBvcnRlZCA9IHR5cGVvZiB0aGlzLiRlbGVtZW50W2V2ZW50TmFtZV0gPT09ICdmdW5jdGlv
bicKKyAgICAgIH0KKyAgICAgIHJldHVybiBpc1N1cHBvcnRlZAorICAgIH0KKworICAsIG1vdmU6
IGZ1bmN0aW9uIChlKSB7CisgICAgICBpZiAoIXRoaXMuc2hvd24pIHJldHVybgorCisgICAgICBz
d2l0Y2goZS5rZXlDb2RlKSB7CisgICAgICAgIGNhc2UgOTogLy8gdGFiCisgICAgICAgIGNhc2Ug
MTM6IC8vIGVudGVyCisgICAgICAgIGNhc2UgMjc6IC8vIGVzY2FwZQorICAgICAgICAgIGUucHJl
dmVudERlZmF1bHQoKQorICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgY2FzZSAzODogLy8gdXAg
YXJyb3cKKyAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCkKKyAgICAgICAgICB0aGlzLnByZXYo
KQorICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgY2FzZSA0MDogLy8gZG93biBhcnJvdworICAg
ICAgICAgIGUucHJldmVudERlZmF1bHQoKQorICAgICAgICAgIHRoaXMubmV4dCgpCisgICAgICAg
ICAgYnJlYWsKKyAgICAgIH0KKworICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKQorICAgIH0KKwor
ICAsIGtleWRvd246IGZ1bmN0aW9uIChlKSB7CisgICAgICB0aGlzLnN1cHByZXNzS2V5UHJlc3NS
ZXBlYXQgPSB+JC5pbkFycmF5KGUua2V5Q29kZSwgWzQwLDM4LDksMTMsMjddKQorICAgICAgdGhp
cy5tb3ZlKGUpCisgICAgfQorCisgICwga2V5cHJlc3M6IGZ1bmN0aW9uIChlKSB7CisgICAgICBp
ZiAodGhpcy5zdXBwcmVzc0tleVByZXNzUmVwZWF0KSByZXR1cm4KKyAgICAgIHRoaXMubW92ZShl
KQorICAgIH0KKworICAsIGtleXVwOiBmdW5jdGlvbiAoZSkgeworICAgICAgc3dpdGNoKGUua2V5
Q29kZSkgeworICAgICAgICBjYXNlIDQwOiAvLyBkb3duIGFycm93CisgICAgICAgIGNhc2UgMzg6
IC8vIHVwIGFycm93CisgICAgICAgIGNhc2UgMTY6IC8vIHNoaWZ0CisgICAgICAgIGNhc2UgMTc6
IC8vIGN0cmwKKyAgICAgICAgY2FzZSAxODogLy8gYWx0CisgICAgICAgICAgYnJlYWsKKworICAg
ICAgICBjYXNlIDk6IC8vIHRhYgorICAgICAgICBjYXNlIDEzOiAvLyBlbnRlcgorICAgICAgICAg
IGlmICghdGhpcy5zaG93bikgcmV0dXJuCisgICAgICAgICAgdGhpcy5zZWxlY3QoKQorICAgICAg
ICAgIGJyZWFrCisKKyAgICAgICAgY2FzZSAyNzogLy8gZXNjYXBlCisgICAgICAgICAgaWYgKCF0
aGlzLnNob3duKSByZXR1cm4KKyAgICAgICAgICB0aGlzLmhpZGUoKQorICAgICAgICAgIGJyZWFr
CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICB0aGlzLmxvb2t1cCgpCisgICAgICB9CisK
KyAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCkKKyAgICAgIGUucHJldmVudERlZmF1bHQoKQorICB9
CisKKyAgLCBibHVyOiBmdW5jdGlvbiAoZSkgeworICAgICAgdmFyIHRoYXQgPSB0aGlzCisgICAg
ICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgdGhhdC5oaWRlKCkgfSwgMTUwKQorICAgIH0KKwor
ICAsIGNsaWNrOiBmdW5jdGlvbiAoZSkgeworICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKQorICAg
ICAgZS5wcmV2ZW50RGVmYXVsdCgpCisgICAgICB0aGlzLnNlbGVjdCgpCisgICAgfQorCisgICwg
bW91c2VlbnRlcjogZnVuY3Rpb24gKGUpIHsKKyAgICAgIHRoaXMuJG1lbnUuZmluZCgnLmFjdGl2
ZScpLnJlbW92ZUNsYXNzKCdhY3RpdmUnKQorICAgICAgJChlLmN1cnJlbnRUYXJnZXQpLmFkZENs
YXNzKCdhY3RpdmUnKQorICAgIH0KKworICB9CisKKworICAvKiBUWVBFQUhFQUQgUExVR0lOIERF
RklOSVRJT04KKyAgICogPT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKyAgdmFyIG9s
ZCA9ICQuZm4udHlwZWFoZWFkCisKKyAgJC5mbi50eXBlYWhlYWQgPSBmdW5jdGlvbiAob3B0aW9u
KSB7CisgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7CisgICAgICB2YXIgJHRoaXMg
PSAkKHRoaXMpCisgICAgICAgICwgZGF0YSA9ICR0aGlzLmRhdGEoJ3R5cGVhaGVhZCcpCisgICAg
ICAgICwgb3B0aW9ucyA9IHR5cGVvZiBvcHRpb24gPT0gJ29iamVjdCcgJiYgb3B0aW9uCisgICAg
ICBpZiAoIWRhdGEpICR0aGlzLmRhdGEoJ3R5cGVhaGVhZCcsIChkYXRhID0gbmV3IFR5cGVhaGVh
ZCh0aGlzLCBvcHRpb25zKSkpCisgICAgICBpZiAodHlwZW9mIG9wdGlvbiA9PSAnc3RyaW5nJykg
ZGF0YVtvcHRpb25dKCkKKyAgICB9KQorICB9CisKKyAgJC5mbi50eXBlYWhlYWQuZGVmYXVsdHMg
PSB7CisgICAgc291cmNlOiBbXQorICAsIGl0ZW1zOiA4CisgICwgbWVudTogJzx1bCBjbGFzcz0i
dHlwZWFoZWFkIGRyb3Bkb3duLW1lbnUiPjwvdWw+JworICAsIGl0ZW06ICc8bGk+PGEgaHJlZj0i
IyI+PC9hPjwvbGk+JworICAsIG1pbkxlbmd0aDogMQorICB9CisKKyAgJC5mbi50eXBlYWhlYWQu
Q29uc3RydWN0b3IgPSBUeXBlYWhlYWQKKworCisgLyogVFlQRUFIRUFEIE5PIENPTkZMSUNUCisg
ICogPT09PT09PT09PT09PT09PT09PSAqLworCisgICQuZm4udHlwZWFoZWFkLm5vQ29uZmxpY3Qg
PSBmdW5jdGlvbiAoKSB7CisgICAgJC5mbi50eXBlYWhlYWQgPSBvbGQKKyAgICByZXR1cm4gdGhp
cworICB9CisKKworIC8qIFRZUEVBSEVBRCBEQVRBLUFQSQorICAqID09PT09PT09PT09PT09PT09
PSAqLworCisgICQoZG9jdW1lbnQpLm9uKCdmb2N1cy50eXBlYWhlYWQuZGF0YS1hcGknLCAnW2Rh
dGEtcHJvdmlkZT0idHlwZWFoZWFkIl0nLCBmdW5jdGlvbiAoZSkgeworICAgIHZhciAkdGhpcyA9
ICQodGhpcykKKyAgICBpZiAoJHRoaXMuZGF0YSgndHlwZWFoZWFkJykpIHJldHVybgorICAgIGUu
cHJldmVudERlZmF1bHQoKQorICAgICR0aGlzLnR5cGVhaGVhZCgkdGhpcy5kYXRhKCkpCisgIH0p
CisKK30od2luZG93LmpRdWVyeSk7CisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBib290c3RyYXAtYWZmaXguanMgdjIuMi4y
CisgKiBodHRwOi8vdHdpdHRlci5naXRodWIuY29tL2Jvb3RzdHJhcC9qYXZhc2NyaXB0Lmh0bWwj
YWZmaXgKKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAyMDEyIFR3aXR0ZXIsIEluYy4KKyAqCisgKiBMaWNl
bnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2Ui
KTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0
aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBh
dAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoK
KyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3Jp
dGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3Ry
aWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09O
RElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0
aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9u
cyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICogPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisKKyFm
dW5jdGlvbiAoJCkgeworCisgICJ1c2Ugc3RyaWN0IjsgLy8ganNoaW50IDtfOworCisKKyAvKiBB
RkZJWCBDTEFTUyBERUZJTklUSU9OCisgICogPT09PT09PT09PT09PT09PT09PT09PSAqLworCisg
IHZhciBBZmZpeCA9IGZ1bmN0aW9uIChlbGVtZW50LCBvcHRpb25zKSB7CisgICAgdGhpcy5vcHRp
b25zID0gJC5leHRlbmQoe30sICQuZm4uYWZmaXguZGVmYXVsdHMsIG9wdGlvbnMpCisgICAgdGhp
cy4kd2luZG93ID0gJCh3aW5kb3cpCisgICAgICAub24oJ3Njcm9sbC5hZmZpeC5kYXRhLWFwaScs
ICQucHJveHkodGhpcy5jaGVja1Bvc2l0aW9uLCB0aGlzKSkKKyAgICAgIC5vbignY2xpY2suYWZm
aXguZGF0YS1hcGknLCAgJC5wcm94eShmdW5jdGlvbiAoKSB7IHNldFRpbWVvdXQoJC5wcm94eSh0
aGlzLmNoZWNrUG9zaXRpb24sIHRoaXMpLCAxKSB9LCB0aGlzKSkKKyAgICB0aGlzLiRlbGVtZW50
ID0gJChlbGVtZW50KQorICAgIHRoaXMuY2hlY2tQb3NpdGlvbigpCisgIH0KKworICBBZmZpeC5w
cm90b3R5cGUuY2hlY2tQb3NpdGlvbiA9IGZ1bmN0aW9uICgpIHsKKyAgICBpZiAoIXRoaXMuJGVs
ZW1lbnQuaXMoJzp2aXNpYmxlJykpIHJldHVybgorCisgICAgdmFyIHNjcm9sbEhlaWdodCA9ICQo
ZG9jdW1lbnQpLmhlaWdodCgpCisgICAgICAsIHNjcm9sbFRvcCA9IHRoaXMuJHdpbmRvdy5zY3Jv
bGxUb3AoKQorICAgICAgLCBwb3NpdGlvbiA9IHRoaXMuJGVsZW1lbnQub2Zmc2V0KCkKKyAgICAg
ICwgb2Zmc2V0ID0gdGhpcy5vcHRpb25zLm9mZnNldAorICAgICAgLCBvZmZzZXRCb3R0b20gPSBv
ZmZzZXQuYm90dG9tCisgICAgICAsIG9mZnNldFRvcCA9IG9mZnNldC50b3AKKyAgICAgICwgcmVz
ZXQgPSAnYWZmaXggYWZmaXgtdG9wIGFmZml4LWJvdHRvbScKKyAgICAgICwgYWZmaXgKKworICAg
IGlmICh0eXBlb2Ygb2Zmc2V0ICE9ICdvYmplY3QnKSBvZmZzZXRCb3R0b20gPSBvZmZzZXRUb3Ag
PSBvZmZzZXQKKyAgICBpZiAodHlwZW9mIG9mZnNldFRvcCA9PSAnZnVuY3Rpb24nKSBvZmZzZXRU
b3AgPSBvZmZzZXQudG9wKCkKKyAgICBpZiAodHlwZW9mIG9mZnNldEJvdHRvbSA9PSAnZnVuY3Rp
b24nKSBvZmZzZXRCb3R0b20gPSBvZmZzZXQuYm90dG9tKCkKKworICAgIGFmZml4ID0gdGhpcy51
bnBpbiAhPSBudWxsICYmIChzY3JvbGxUb3AgKyB0aGlzLnVucGluIDw9IHBvc2l0aW9uLnRvcCkg
PworICAgICAgZmFsc2UgICAgOiBvZmZzZXRCb3R0b20gIT0gbnVsbCAmJiAocG9zaXRpb24udG9w
ICsgdGhpcy4kZWxlbWVudC5oZWlnaHQoKSA+PSBzY3JvbGxIZWlnaHQgLSBvZmZzZXRCb3R0b20p
ID8KKyAgICAgICdib3R0b20nIDogb2Zmc2V0VG9wICE9IG51bGwgJiYgc2Nyb2xsVG9wIDw9IG9m
ZnNldFRvcCA/CisgICAgICAndG9wJyAgICA6IGZhbHNlCisKKyAgICBpZiAodGhpcy5hZmZpeGVk
ID09PSBhZmZpeCkgcmV0dXJuCisKKyAgICB0aGlzLmFmZml4ZWQgPSBhZmZpeAorICAgIHRoaXMu
dW5waW4gPSBhZmZpeCA9PSAnYm90dG9tJyA/IHBvc2l0aW9uLnRvcCAtIHNjcm9sbFRvcCA6IG51
bGwKKworICAgIHRoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3MocmVzZXQpLmFkZENsYXNzKCdhZmZp
eCcgKyAoYWZmaXggPyAnLScgKyBhZmZpeCA6ICcnKSkKKyAgfQorCisKKyAvKiBBRkZJWCBQTFVH
SU4gREVGSU5JVElPTgorICAqID09PT09PT09PT09PT09PT09PT09PT09ICovCisKKyAgdmFyIG9s
ZCA9ICQuZm4uYWZmaXgKKworICAkLmZuLmFmZml4ID0gZnVuY3Rpb24gKG9wdGlvbikgeworICAg
IHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkgeworICAgICAgdmFyICR0aGlzID0gJCh0aGlz
KQorICAgICAgICAsIGRhdGEgPSAkdGhpcy5kYXRhKCdhZmZpeCcpCisgICAgICAgICwgb3B0aW9u
cyA9IHR5cGVvZiBvcHRpb24gPT0gJ29iamVjdCcgJiYgb3B0aW9uCisgICAgICBpZiAoIWRhdGEp
ICR0aGlzLmRhdGEoJ2FmZml4JywgKGRhdGEgPSBuZXcgQWZmaXgodGhpcywgb3B0aW9ucykpKQor
ICAgICAgaWYgKHR5cGVvZiBvcHRpb24gPT0gJ3N0cmluZycpIGRhdGFbb3B0aW9uXSgpCisgICAg
fSkKKyAgfQorCisgICQuZm4uYWZmaXguQ29uc3RydWN0b3IgPSBBZmZpeAorCisgICQuZm4uYWZm
aXguZGVmYXVsdHMgPSB7CisgICAgb2Zmc2V0OiAwCisgIH0KKworCisgLyogQUZGSVggTk8gQ09O
RkxJQ1QKKyAgKiA9PT09PT09PT09PT09PT09PSAqLworCisgICQuZm4uYWZmaXgubm9Db25mbGlj
dCA9IGZ1bmN0aW9uICgpIHsKKyAgICAkLmZuLmFmZml4ID0gb2xkCisgICAgcmV0dXJuIHRoaXMK
KyAgfQorCisKKyAvKiBBRkZJWCBEQVRBLUFQSQorICAqID09PT09PT09PT09PT09ICovCisKKyAg
JCh3aW5kb3cpLm9uKCdsb2FkJywgZnVuY3Rpb24gKCkgeworICAgICQoJ1tkYXRhLXNweT0iYWZm
aXgiXScpLmVhY2goZnVuY3Rpb24gKCkgeworICAgICAgdmFyICRzcHkgPSAkKHRoaXMpCisgICAg
ICAgICwgZGF0YSA9ICRzcHkuZGF0YSgpCisKKyAgICAgIGRhdGEub2Zmc2V0ID0gZGF0YS5vZmZz
ZXQgfHwge30KKworICAgICAgZGF0YS5vZmZzZXRCb3R0b20gJiYgKGRhdGEub2Zmc2V0LmJvdHRv
bSA9IGRhdGEub2Zmc2V0Qm90dG9tKQorICAgICAgZGF0YS5vZmZzZXRUb3AgJiYgKGRhdGEub2Zm
c2V0LnRvcCA9IGRhdGEub2Zmc2V0VG9wKQorCisgICAgICAkc3B5LmFmZml4KGRhdGEpCisgICAg
fSkKKyAgfSkKKworCit9KHdpbmRvdy5qUXVlcnkpOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZp
bGUKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBs
ZS1hcHAvY29tcG9uZW50cy9ib290c3RyYXAvanMvYm9vdHN0cmFwLm1pbi5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBw
L2NvbXBvbmVudHMvYm9vdHN0cmFwL2pzL2Jvb3RzdHJhcC5taW4uanMJKHJldmlzaW9uIDApCisr
KyBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2Nv
bXBvbmVudHMvYm9vdHN0cmFwL2pzL2Jvb3RzdHJhcC5taW4uanMJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw2IEBACisvKiEKKyogQm9vdHN0cmFwLmpzIGJ5IEBmYXQgJiBAbWRvCisqIENvcHly
aWdodCAyMDEyIFR3aXR0ZXIsIEluYy4KKyogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2Vz
L0xJQ0VOU0UtMi4wLnR4dAorKi8KKyFmdW5jdGlvbigkKXsidXNlIHN0cmljdCI7JChmdW5jdGlv
bigpeyQuc3VwcG9ydC50cmFuc2l0aW9uPWZ1bmN0aW9uKCl7dmFyIHRyYW5zaXRpb25FbmQ9ZnVu
Y3Rpb24oKXt2YXIgbmFtZSxlbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJib290c3RyYXAiKSx0
cmFuc0VuZEV2ZW50TmFtZXM9e1dlYmtpdFRyYW5zaXRpb246IndlYmtpdFRyYW5zaXRpb25FbmQi
LE1velRyYW5zaXRpb246InRyYW5zaXRpb25lbmQiLE9UcmFuc2l0aW9uOiJvVHJhbnNpdGlvbkVu
ZCBvdHJhbnNpdGlvbmVuZCIsdHJhbnNpdGlvbjoidHJhbnNpdGlvbmVuZCJ9O2ZvcihuYW1lIGlu
IHRyYW5zRW5kRXZlbnROYW1lcylpZih2b2lkIDAhPT1lbC5zdHlsZVtuYW1lXSlyZXR1cm4gdHJh
bnNFbmRFdmVudE5hbWVzW25hbWVdfSgpO3JldHVybiB0cmFuc2l0aW9uRW5kJiZ7ZW5kOnRyYW5z
aXRpb25FbmR9fSgpfSl9KHdpbmRvdy5qUXVlcnkpLCFmdW5jdGlvbigkKXsidXNlIHN0cmljdCI7
dmFyIGRpc21pc3M9J1tkYXRhLWRpc21pc3M9ImFsZXJ0Il0nLEFsZXJ0PWZ1bmN0aW9uKGVsKXsk
KGVsKS5vbigiY2xpY2siLGRpc21pc3MsdGhpcy5jbG9zZSl9O0FsZXJ0LnByb3RvdHlwZS5jbG9z
ZT1mdW5jdGlvbihlKXtmdW5jdGlvbiByZW1vdmVFbGVtZW50KCl7JHBhcmVudC50cmlnZ2VyKCJj
bG9zZWQiKS5yZW1vdmUoKX12YXIgJHBhcmVudCwkdGhpcz0kKHRoaXMpLHNlbGVjdG9yPSR0aGlz
LmF0dHIoImRhdGEtdGFyZ2V0Iik7c2VsZWN0b3J8fChzZWxlY3Rvcj0kdGhpcy5hdHRyKCJocmVm
Iiksc2VsZWN0b3I9c2VsZWN0b3ImJnNlbGVjdG9yLnJlcGxhY2UoLy4qKD89I1teXHNdKiQpLywi
IikpLCRwYXJlbnQ9JChzZWxlY3RvciksZSYmZS5wcmV2ZW50RGVmYXVsdCgpLCRwYXJlbnQubGVu
Z3RofHwoJHBhcmVudD0kdGhpcy5oYXNDbGFzcygiYWxlcnQiKT8kdGhpczokdGhpcy5wYXJlbnQo
KSksJHBhcmVudC50cmlnZ2VyKGU9JC5FdmVudCgiY2xvc2UiKSksZS5pc0RlZmF1bHRQcmV2ZW50
ZWQoKXx8KCRwYXJlbnQucmVtb3ZlQ2xhc3MoImluIiksJC5zdXBwb3J0LnRyYW5zaXRpb24mJiRw
YXJlbnQuaGFzQ2xhc3MoImZhZGUiKT8kcGFyZW50Lm9uKCQuc3VwcG9ydC50cmFuc2l0aW9uLmVu
ZCxyZW1vdmVFbGVtZW50KTpyZW1vdmVFbGVtZW50KCkpfTt2YXIgb2xkPSQuZm4uYWxlcnQ7JC5m
bi5hbGVydD1mdW5jdGlvbihvcHRpb24pe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIg
JHRoaXM9JCh0aGlzKSxkYXRhPSR0aGlzLmRhdGEoImFsZXJ0Iik7ZGF0YXx8JHRoaXMuZGF0YSgi
YWxlcnQiLGRhdGE9bmV3IEFsZXJ0KHRoaXMpKSwic3RyaW5nIj09dHlwZW9mIG9wdGlvbiYmZGF0
YVtvcHRpb25dLmNhbGwoJHRoaXMpfSl9LCQuZm4uYWxlcnQuQ29uc3RydWN0b3I9QWxlcnQsJC5m
bi5hbGVydC5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuICQuZm4uYWxlcnQ9b2xkLHRoaXN9
LCQoZG9jdW1lbnQpLm9uKCJjbGljay5hbGVydC5kYXRhLWFwaSIsZGlzbWlzcyxBbGVydC5wcm90
b3R5cGUuY2xvc2UpfSh3aW5kb3cualF1ZXJ5KSwhZnVuY3Rpb24oJCl7InVzZSBzdHJpY3QiO3Zh
ciBCdXR0b249ZnVuY3Rpb24oZWxlbWVudCxvcHRpb25zKXt0aGlzLiRlbGVtZW50PSQoZWxlbWVu
dCksdGhpcy5vcHRpb25zPSQuZXh0ZW5kKHt9LCQuZm4uYnV0dG9uLmRlZmF1bHRzLG9wdGlvbnMp
fTtCdXR0b24ucHJvdG90eXBlLnNldFN0YXRlPWZ1bmN0aW9uKHN0YXRlKXt2YXIgZD0iZGlzYWJs
ZWQiLCRlbD10aGlzLiRlbGVtZW50LGRhdGE9JGVsLmRhdGEoKSx2YWw9JGVsLmlzKCJpbnB1dCIp
PyJ2YWwiOiJodG1sIjtzdGF0ZSs9IlRleHQiLGRhdGEucmVzZXRUZXh0fHwkZWwuZGF0YSgicmVz
ZXRUZXh0IiwkZWxbdmFsXSgpKSwkZWxbdmFsXShkYXRhW3N0YXRlXXx8dGhpcy5vcHRpb25zW3N0
YXRlXSksc2V0VGltZW91dChmdW5jdGlvbigpeyJsb2FkaW5nVGV4dCI9PXN0YXRlPyRlbC5hZGRD
bGFzcyhkKS5hdHRyKGQsZCk6JGVsLnJlbW92ZUNsYXNzKGQpLnJlbW92ZUF0dHIoZCl9LDApfSxC
dXR0b24ucHJvdG90eXBlLnRvZ2dsZT1mdW5jdGlvbigpe3ZhciAkcGFyZW50PXRoaXMuJGVsZW1l
bnQuY2xvc2VzdCgnW2RhdGEtdG9nZ2xlPSJidXR0b25zLXJhZGlvIl0nKTskcGFyZW50JiYkcGFy
ZW50LmZpbmQoIi5hY3RpdmUiKS5yZW1vdmVDbGFzcygiYWN0aXZlIiksdGhpcy4kZWxlbWVudC50
b2dnbGVDbGFzcygiYWN0aXZlIil9O3ZhciBvbGQ9JC5mbi5idXR0b247JC5mbi5idXR0b249ZnVu
Y3Rpb24ob3B0aW9uKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyICR0aGlzPSQodGhp
cyksZGF0YT0kdGhpcy5kYXRhKCJidXR0b24iKSxvcHRpb25zPSJvYmplY3QiPT10eXBlb2Ygb3B0
aW9uJiZvcHRpb247ZGF0YXx8JHRoaXMuZGF0YSgiYnV0dG9uIixkYXRhPW5ldyBCdXR0b24odGhp
cyxvcHRpb25zKSksInRvZ2dsZSI9PW9wdGlvbj9kYXRhLnRvZ2dsZSgpOm9wdGlvbiYmZGF0YS5z
ZXRTdGF0ZShvcHRpb24pfSl9LCQuZm4uYnV0dG9uLmRlZmF1bHRzPXtsb2FkaW5nVGV4dDoibG9h
ZGluZy4uLiJ9LCQuZm4uYnV0dG9uLkNvbnN0cnVjdG9yPUJ1dHRvbiwkLmZuLmJ1dHRvbi5ub0Nv
bmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuICQuZm4uYnV0dG9uPW9sZCx0aGlzfSwkKGRvY3VtZW50
KS5vbigiY2xpY2suYnV0dG9uLmRhdGEtYXBpIiwiW2RhdGEtdG9nZ2xlXj1idXR0b25dIixmdW5j
dGlvbihlKXt2YXIgJGJ0bj0kKGUudGFyZ2V0KTskYnRuLmhhc0NsYXNzKCJidG4iKXx8KCRidG49
JGJ0bi5jbG9zZXN0KCIuYnRuIikpLCRidG4uYnV0dG9uKCJ0b2dnbGUiKX0pfSh3aW5kb3cualF1
ZXJ5KSwhZnVuY3Rpb24oJCl7InVzZSBzdHJpY3QiO3ZhciBDYXJvdXNlbD1mdW5jdGlvbihlbGVt
ZW50LG9wdGlvbnMpe3RoaXMuJGVsZW1lbnQ9JChlbGVtZW50KSx0aGlzLm9wdGlvbnM9b3B0aW9u
cywiaG92ZXIiPT10aGlzLm9wdGlvbnMucGF1c2UmJnRoaXMuJGVsZW1lbnQub24oIm1vdXNlZW50
ZXIiLCQucHJveHkodGhpcy5wYXVzZSx0aGlzKSkub24oIm1vdXNlbGVhdmUiLCQucHJveHkodGhp
cy5jeWNsZSx0aGlzKSl9O0Nhcm91c2VsLnByb3RvdHlwZT17Y3ljbGU6ZnVuY3Rpb24oZSl7cmV0
dXJuIGV8fCh0aGlzLnBhdXNlZD0hMSksdGhpcy5vcHRpb25zLmludGVydmFsJiYhdGhpcy5wYXVz
ZWQmJih0aGlzLmludGVydmFsPXNldEludGVydmFsKCQucHJveHkodGhpcy5uZXh0LHRoaXMpLHRo
aXMub3B0aW9ucy5pbnRlcnZhbCkpLHRoaXN9LHRvOmZ1bmN0aW9uKHBvcyl7dmFyICRhY3RpdmU9
dGhpcy4kZWxlbWVudC5maW5kKCIuaXRlbS5hY3RpdmUiKSxjaGlsZHJlbj0kYWN0aXZlLnBhcmVu
dCgpLmNoaWxkcmVuKCksYWN0aXZlUG9zPWNoaWxkcmVuLmluZGV4KCRhY3RpdmUpLHRoYXQ9dGhp
cztpZighKHBvcz5jaGlsZHJlbi5sZW5ndGgtMXx8MD5wb3MpKXJldHVybiB0aGlzLnNsaWRpbmc/
dGhpcy4kZWxlbWVudC5vbmUoInNsaWQiLGZ1bmN0aW9uKCl7dGhhdC50byhwb3MpfSk6YWN0aXZl
UG9zPT1wb3M/dGhpcy5wYXVzZSgpLmN5Y2xlKCk6dGhpcy5zbGlkZShwb3M+YWN0aXZlUG9zPyJu
ZXh0IjoicHJldiIsJChjaGlsZHJlbltwb3NdKSl9LHBhdXNlOmZ1bmN0aW9uKGUpe3JldHVybiBl
fHwodGhpcy5wYXVzZWQ9ITApLHRoaXMuJGVsZW1lbnQuZmluZCgiLm5leHQsIC5wcmV2IikubGVu
Z3RoJiYkLnN1cHBvcnQudHJhbnNpdGlvbi5lbmQmJih0aGlzLiRlbGVtZW50LnRyaWdnZXIoJC5z
dXBwb3J0LnRyYW5zaXRpb24uZW5kKSx0aGlzLmN5Y2xlKCkpLGNsZWFySW50ZXJ2YWwodGhpcy5p
bnRlcnZhbCksdGhpcy5pbnRlcnZhbD1udWxsLHRoaXN9LG5leHQ6ZnVuY3Rpb24oKXtyZXR1cm4g
dGhpcy5zbGlkaW5nP3ZvaWQgMDp0aGlzLnNsaWRlKCJuZXh0Iil9LHByZXY6ZnVuY3Rpb24oKXty
ZXR1cm4gdGhpcy5zbGlkaW5nP3ZvaWQgMDp0aGlzLnNsaWRlKCJwcmV2Iil9LHNsaWRlOmZ1bmN0
aW9uKHR5cGUsbmV4dCl7dmFyIGUsJGFjdGl2ZT10aGlzLiRlbGVtZW50LmZpbmQoIi5pdGVtLmFj
dGl2ZSIpLCRuZXh0PW5leHR8fCRhY3RpdmVbdHlwZV0oKSxpc0N5Y2xpbmc9dGhpcy5pbnRlcnZh
bCxkaXJlY3Rpb249Im5leHQiPT10eXBlPyJsZWZ0IjoicmlnaHQiLGZhbGxiYWNrPSJuZXh0Ij09
dHlwZT8iZmlyc3QiOiJsYXN0Iix0aGF0PXRoaXM7aWYodGhpcy5zbGlkaW5nPSEwLGlzQ3ljbGlu
ZyYmdGhpcy5wYXVzZSgpLCRuZXh0PSRuZXh0Lmxlbmd0aD8kbmV4dDp0aGlzLiRlbGVtZW50LmZp
bmQoIi5pdGVtIilbZmFsbGJhY2tdKCksZT0kLkV2ZW50KCJzbGlkZSIse3JlbGF0ZWRUYXJnZXQ6
JG5leHRbMF19KSwhJG5leHQuaGFzQ2xhc3MoImFjdGl2ZSIpKXtpZigkLnN1cHBvcnQudHJhbnNp
dGlvbiYmdGhpcy4kZWxlbWVudC5oYXNDbGFzcygic2xpZGUiKSl7aWYodGhpcy4kZWxlbWVudC50
cmlnZ2VyKGUpLGUuaXNEZWZhdWx0UHJldmVudGVkKCkpcmV0dXJuOyRuZXh0LmFkZENsYXNzKHR5
cGUpLCRuZXh0WzBdLm9mZnNldFdpZHRoLCRhY3RpdmUuYWRkQ2xhc3MoZGlyZWN0aW9uKSwkbmV4
dC5hZGRDbGFzcyhkaXJlY3Rpb24pLHRoaXMuJGVsZW1lbnQub25lKCQuc3VwcG9ydC50cmFuc2l0
aW9uLmVuZCxmdW5jdGlvbigpeyRuZXh0LnJlbW92ZUNsYXNzKFt0eXBlLGRpcmVjdGlvbl0uam9p
bigiICIpKS5hZGRDbGFzcygiYWN0aXZlIiksJGFjdGl2ZS5yZW1vdmVDbGFzcyhbImFjdGl2ZSIs
ZGlyZWN0aW9uXS5qb2luKCIgIikpLHRoYXQuc2xpZGluZz0hMSxzZXRUaW1lb3V0KGZ1bmN0aW9u
KCl7dGhhdC4kZWxlbWVudC50cmlnZ2VyKCJzbGlkIil9LDApfSl9ZWxzZXtpZih0aGlzLiRlbGVt
ZW50LnRyaWdnZXIoZSksZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSlyZXR1cm47JGFjdGl2ZS5yZW1v
dmVDbGFzcygiYWN0aXZlIiksJG5leHQuYWRkQ2xhc3MoImFjdGl2ZSIpLHRoaXMuc2xpZGluZz0h
MSx0aGlzLiRlbGVtZW50LnRyaWdnZXIoInNsaWQiKX1yZXR1cm4gaXNDeWNsaW5nJiZ0aGlzLmN5
Y2xlKCksdGhpc319fTt2YXIgb2xkPSQuZm4uY2Fyb3VzZWw7JC5mbi5jYXJvdXNlbD1mdW5jdGlv
bihvcHRpb24pe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgJHRoaXM9JCh0aGlzKSxk
YXRhPSR0aGlzLmRhdGEoImNhcm91c2VsIiksb3B0aW9ucz0kLmV4dGVuZCh7fSwkLmZuLmNhcm91
c2VsLmRlZmF1bHRzLCJvYmplY3QiPT10eXBlb2Ygb3B0aW9uJiZvcHRpb24pLGFjdGlvbj0ic3Ry
aW5nIj09dHlwZW9mIG9wdGlvbj9vcHRpb246b3B0aW9ucy5zbGlkZTtkYXRhfHwkdGhpcy5kYXRh
KCJjYXJvdXNlbCIsZGF0YT1uZXcgQ2Fyb3VzZWwodGhpcyxvcHRpb25zKSksIm51bWJlciI9PXR5
cGVvZiBvcHRpb24/ZGF0YS50byhvcHRpb24pOmFjdGlvbj9kYXRhW2FjdGlvbl0oKTpvcHRpb25z
LmludGVydmFsJiZkYXRhLmN5Y2xlKCl9KX0sJC5mbi5jYXJvdXNlbC5kZWZhdWx0cz17aW50ZXJ2
YWw6NWUzLHBhdXNlOiJob3ZlciJ9LCQuZm4uY2Fyb3VzZWwuQ29uc3RydWN0b3I9Q2Fyb3VzZWws
JC5mbi5jYXJvdXNlbC5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuICQuZm4uY2Fyb3VzZWw9
b2xkLHRoaXN9LCQoZG9jdW1lbnQpLm9uKCJjbGljay5jYXJvdXNlbC5kYXRhLWFwaSIsIltkYXRh
LXNsaWRlXSIsZnVuY3Rpb24oZSl7dmFyIGhyZWYsJHRoaXM9JCh0aGlzKSwkdGFyZ2V0PSQoJHRo
aXMuYXR0cigiZGF0YS10YXJnZXQiKXx8KGhyZWY9JHRoaXMuYXR0cigiaHJlZiIpKSYmaHJlZi5y
ZXBsYWNlKC8uKig/PSNbXlxzXSskKS8sIiIpKSxvcHRpb25zPSQuZXh0ZW5kKHt9LCR0YXJnZXQu
ZGF0YSgpLCR0aGlzLmRhdGEoKSk7JHRhcmdldC5jYXJvdXNlbChvcHRpb25zKSxlLnByZXZlbnRE
ZWZhdWx0KCl9KX0od2luZG93LmpRdWVyeSksIWZ1bmN0aW9uKCQpeyJ1c2Ugc3RyaWN0Ijt2YXIg
Q29sbGFwc2U9ZnVuY3Rpb24oZWxlbWVudCxvcHRpb25zKXt0aGlzLiRlbGVtZW50PSQoZWxlbWVu
dCksdGhpcy5vcHRpb25zPSQuZXh0ZW5kKHt9LCQuZm4uY29sbGFwc2UuZGVmYXVsdHMsb3B0aW9u
cyksdGhpcy5vcHRpb25zLnBhcmVudCYmKHRoaXMuJHBhcmVudD0kKHRoaXMub3B0aW9ucy5wYXJl
bnQpKSx0aGlzLm9wdGlvbnMudG9nZ2xlJiZ0aGlzLnRvZ2dsZSgpfTtDb2xsYXBzZS5wcm90b3R5
cGU9e2NvbnN0cnVjdG9yOkNvbGxhcHNlLGRpbWVuc2lvbjpmdW5jdGlvbigpe3ZhciBoYXNXaWR0
aD10aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCJ3aWR0aCIpO3JldHVybiBoYXNXaWR0aD8id2lkdGgi
OiJoZWlnaHQifSxzaG93OmZ1bmN0aW9uKCl7dmFyIGRpbWVuc2lvbixzY3JvbGwsYWN0aXZlcyxo
YXNEYXRhO2lmKCF0aGlzLnRyYW5zaXRpb25pbmcpe2lmKGRpbWVuc2lvbj10aGlzLmRpbWVuc2lv
bigpLHNjcm9sbD0kLmNhbWVsQ2FzZShbInNjcm9sbCIsZGltZW5zaW9uXS5qb2luKCItIikpLGFj
dGl2ZXM9dGhpcy4kcGFyZW50JiZ0aGlzLiRwYXJlbnQuZmluZCgiPiAuYWNjb3JkaW9uLWdyb3Vw
ID4gLmluIiksYWN0aXZlcyYmYWN0aXZlcy5sZW5ndGgpe2lmKGhhc0RhdGE9YWN0aXZlcy5kYXRh
KCJjb2xsYXBzZSIpLGhhc0RhdGEmJmhhc0RhdGEudHJhbnNpdGlvbmluZylyZXR1cm47YWN0aXZl
cy5jb2xsYXBzZSgiaGlkZSIpLGhhc0RhdGF8fGFjdGl2ZXMuZGF0YSgiY29sbGFwc2UiLG51bGwp
fXRoaXMuJGVsZW1lbnRbZGltZW5zaW9uXSgwKSx0aGlzLnRyYW5zaXRpb24oImFkZENsYXNzIiwk
LkV2ZW50KCJzaG93IiksInNob3duIiksJC5zdXBwb3J0LnRyYW5zaXRpb24mJnRoaXMuJGVsZW1l
bnRbZGltZW5zaW9uXSh0aGlzLiRlbGVtZW50WzBdW3Njcm9sbF0pfX0saGlkZTpmdW5jdGlvbigp
e3ZhciBkaW1lbnNpb247dGhpcy50cmFuc2l0aW9uaW5nfHwoZGltZW5zaW9uPXRoaXMuZGltZW5z
aW9uKCksdGhpcy5yZXNldCh0aGlzLiRlbGVtZW50W2RpbWVuc2lvbl0oKSksdGhpcy50cmFuc2l0
aW9uKCJyZW1vdmVDbGFzcyIsJC5FdmVudCgiaGlkZSIpLCJoaWRkZW4iKSx0aGlzLiRlbGVtZW50
W2RpbWVuc2lvbl0oMCkpfSxyZXNldDpmdW5jdGlvbihzaXplKXt2YXIgZGltZW5zaW9uPXRoaXMu
ZGltZW5zaW9uKCk7cmV0dXJuIHRoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoImNvbGxhcHNlIilb
ZGltZW5zaW9uXShzaXplfHwiYXV0byIpWzBdLm9mZnNldFdpZHRoLHRoaXMuJGVsZW1lbnRbbnVs
bCE9PXNpemU/ImFkZENsYXNzIjoicmVtb3ZlQ2xhc3MiXSgiY29sbGFwc2UiKSx0aGlzfSx0cmFu
c2l0aW9uOmZ1bmN0aW9uKG1ldGhvZCxzdGFydEV2ZW50LGNvbXBsZXRlRXZlbnQpe3ZhciB0aGF0
PXRoaXMsY29tcGxldGU9ZnVuY3Rpb24oKXsic2hvdyI9PXN0YXJ0RXZlbnQudHlwZSYmdGhhdC5y
ZXNldCgpLHRoYXQudHJhbnNpdGlvbmluZz0wLHRoYXQuJGVsZW1lbnQudHJpZ2dlcihjb21wbGV0
ZUV2ZW50KX07dGhpcy4kZWxlbWVudC50cmlnZ2VyKHN0YXJ0RXZlbnQpLHN0YXJ0RXZlbnQuaXNE
ZWZhdWx0UHJldmVudGVkKCl8fCh0aGlzLnRyYW5zaXRpb25pbmc9MSx0aGlzLiRlbGVtZW50W21l
dGhvZF0oImluIiksJC5zdXBwb3J0LnRyYW5zaXRpb24mJnRoaXMuJGVsZW1lbnQuaGFzQ2xhc3Mo
ImNvbGxhcHNlIik/dGhpcy4kZWxlbWVudC5vbmUoJC5zdXBwb3J0LnRyYW5zaXRpb24uZW5kLGNv
bXBsZXRlKTpjb21wbGV0ZSgpKX0sdG9nZ2xlOmZ1bmN0aW9uKCl7dGhpc1t0aGlzLiRlbGVtZW50
Lmhhc0NsYXNzKCJpbiIpPyJoaWRlIjoic2hvdyJdKCl9fTt2YXIgb2xkPSQuZm4uY29sbGFwc2U7
JC5mbi5jb2xsYXBzZT1mdW5jdGlvbihvcHRpb24pe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24o
KXt2YXIgJHRoaXM9JCh0aGlzKSxkYXRhPSR0aGlzLmRhdGEoImNvbGxhcHNlIiksb3B0aW9ucz0i
b2JqZWN0Ij09dHlwZW9mIG9wdGlvbiYmb3B0aW9uO2RhdGF8fCR0aGlzLmRhdGEoImNvbGxhcHNl
IixkYXRhPW5ldyBDb2xsYXBzZSh0aGlzLG9wdGlvbnMpKSwic3RyaW5nIj09dHlwZW9mIG9wdGlv
biYmZGF0YVtvcHRpb25dKCl9KX0sJC5mbi5jb2xsYXBzZS5kZWZhdWx0cz17dG9nZ2xlOiEwfSwk
LmZuLmNvbGxhcHNlLkNvbnN0cnVjdG9yPUNvbGxhcHNlLCQuZm4uY29sbGFwc2Uubm9Db25mbGlj
dD1mdW5jdGlvbigpe3JldHVybiAkLmZuLmNvbGxhcHNlPW9sZCx0aGlzfSwkKGRvY3VtZW50KS5v
bigiY2xpY2suY29sbGFwc2UuZGF0YS1hcGkiLCJbZGF0YS10b2dnbGU9Y29sbGFwc2VdIixmdW5j
dGlvbihlKXt2YXIgaHJlZiwkdGhpcz0kKHRoaXMpLHRhcmdldD0kdGhpcy5hdHRyKCJkYXRhLXRh
cmdldCIpfHxlLnByZXZlbnREZWZhdWx0KCl8fChocmVmPSR0aGlzLmF0dHIoImhyZWYiKSkmJmhy
ZWYucmVwbGFjZSgvLiooPz0jW15cc10rJCkvLCIiKSxvcHRpb249JCh0YXJnZXQpLmRhdGEoImNv
bGxhcHNlIik/InRvZ2dsZSI6JHRoaXMuZGF0YSgpOyR0aGlzWyQodGFyZ2V0KS5oYXNDbGFzcygi
aW4iKT8iYWRkQ2xhc3MiOiJyZW1vdmVDbGFzcyJdKCJjb2xsYXBzZWQiKSwkKHRhcmdldCkuY29s
bGFwc2Uob3B0aW9uKX0pfSh3aW5kb3cualF1ZXJ5KSwhZnVuY3Rpb24oJCl7InVzZSBzdHJpY3Qi
O2Z1bmN0aW9uIGNsZWFyTWVudXMoKXskKHRvZ2dsZSkuZWFjaChmdW5jdGlvbigpe2dldFBhcmVu
dCgkKHRoaXMpKS5yZW1vdmVDbGFzcygib3BlbiIpfSl9ZnVuY3Rpb24gZ2V0UGFyZW50KCR0aGlz
KXt2YXIgJHBhcmVudCxzZWxlY3Rvcj0kdGhpcy5hdHRyKCJkYXRhLXRhcmdldCIpO3JldHVybiBz
ZWxlY3Rvcnx8KHNlbGVjdG9yPSR0aGlzLmF0dHIoImhyZWYiKSxzZWxlY3Rvcj1zZWxlY3RvciYm
LyMvLnRlc3Qoc2VsZWN0b3IpJiZzZWxlY3Rvci5yZXBsYWNlKC8uKig/PSNbXlxzXSokKS8sIiIp
KSwkcGFyZW50PSQoc2VsZWN0b3IpLCRwYXJlbnQubGVuZ3RofHwoJHBhcmVudD0kdGhpcy5wYXJl
bnQoKSksJHBhcmVudH12YXIgdG9nZ2xlPSJbZGF0YS10b2dnbGU9ZHJvcGRvd25dIixEcm9wZG93
bj1mdW5jdGlvbihlbGVtZW50KXt2YXIgJGVsPSQoZWxlbWVudCkub24oImNsaWNrLmRyb3Bkb3du
LmRhdGEtYXBpIix0aGlzLnRvZ2dsZSk7JCgiaHRtbCIpLm9uKCJjbGljay5kcm9wZG93bi5kYXRh
LWFwaSIsZnVuY3Rpb24oKXskZWwucGFyZW50KCkucmVtb3ZlQ2xhc3MoIm9wZW4iKX0pfTtEcm9w
ZG93bi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkRyb3Bkb3duLHRvZ2dsZTpmdW5jdGlvbigpe3Zh
ciAkcGFyZW50LGlzQWN0aXZlLCR0aGlzPSQodGhpcyk7aWYoISR0aGlzLmlzKCIuZGlzYWJsZWQs
IDpkaXNhYmxlZCIpKXJldHVybiAkcGFyZW50PWdldFBhcmVudCgkdGhpcyksaXNBY3RpdmU9JHBh
cmVudC5oYXNDbGFzcygib3BlbiIpLGNsZWFyTWVudXMoKSxpc0FjdGl2ZXx8JHBhcmVudC50b2dn
bGVDbGFzcygib3BlbiIpLCR0aGlzLmZvY3VzKCksITF9LGtleWRvd246ZnVuY3Rpb24oZSl7dmFy
ICR0aGlzLCRpdGVtcywkcGFyZW50LGlzQWN0aXZlLGluZGV4O2lmKC8oMzh8NDB8MjcpLy50ZXN0
KGUua2V5Q29kZSkmJigkdGhpcz0kKHRoaXMpLGUucHJldmVudERlZmF1bHQoKSxlLnN0b3BQcm9w
YWdhdGlvbigpLCEkdGhpcy5pcygiLmRpc2FibGVkLCA6ZGlzYWJsZWQiKSkpe2lmKCRwYXJlbnQ9
Z2V0UGFyZW50KCR0aGlzKSxpc0FjdGl2ZT0kcGFyZW50Lmhhc0NsYXNzKCJvcGVuIiksIWlzQWN0
aXZlfHxpc0FjdGl2ZSYmMjc9PWUua2V5Q29kZSlyZXR1cm4gJHRoaXMuY2xpY2soKTskaXRlbXM9
JCgiW3JvbGU9bWVudV0gbGk6bm90KC5kaXZpZGVyKTp2aXNpYmxlIGEiLCRwYXJlbnQpLCRpdGVt
cy5sZW5ndGgmJihpbmRleD0kaXRlbXMuaW5kZXgoJGl0ZW1zLmZpbHRlcigiOmZvY3VzIikpLDM4
PT1lLmtleUNvZGUmJmluZGV4PjAmJmluZGV4LS0sNDA9PWUua2V5Q29kZSYmJGl0ZW1zLmxlbmd0
aC0xPmluZGV4JiZpbmRleCsrLH5pbmRleHx8KGluZGV4PTApLCRpdGVtcy5lcShpbmRleCkuZm9j
dXMoKSl9fX07dmFyIG9sZD0kLmZuLmRyb3Bkb3duOyQuZm4uZHJvcGRvd249ZnVuY3Rpb24ob3B0
aW9uKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyICR0aGlzPSQodGhpcyksZGF0YT0k
dGhpcy5kYXRhKCJkcm9wZG93biIpO2RhdGF8fCR0aGlzLmRhdGEoImRyb3Bkb3duIixkYXRhPW5l
dyBEcm9wZG93bih0aGlzKSksInN0cmluZyI9PXR5cGVvZiBvcHRpb24mJmRhdGFbb3B0aW9uXS5j
YWxsKCR0aGlzKX0pfSwkLmZuLmRyb3Bkb3duLkNvbnN0cnVjdG9yPURyb3Bkb3duLCQuZm4uZHJv
cGRvd24ubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiAkLmZuLmRyb3Bkb3duPW9sZCx0aGlz
fSwkKGRvY3VtZW50KS5vbigiY2xpY2suZHJvcGRvd24uZGF0YS1hcGkgdG91Y2hzdGFydC5kcm9w
ZG93bi5kYXRhLWFwaSIsY2xlYXJNZW51cykub24oImNsaWNrLmRyb3Bkb3duIHRvdWNoc3RhcnQu
ZHJvcGRvd24uZGF0YS1hcGkiLCIuZHJvcGRvd24gZm9ybSIsZnVuY3Rpb24oZSl7ZS5zdG9wUHJv
cGFnYXRpb24oKX0pLm9uKCJ0b3VjaHN0YXJ0LmRyb3Bkb3duLmRhdGEtYXBpIiwiLmRyb3Bkb3du
LW1lbnUiLGZ1bmN0aW9uKGUpe2Uuc3RvcFByb3BhZ2F0aW9uKCl9KS5vbigiY2xpY2suZHJvcGRv
d24uZGF0YS1hcGkgdG91Y2hzdGFydC5kcm9wZG93bi5kYXRhLWFwaSIsdG9nZ2xlLERyb3Bkb3du
LnByb3RvdHlwZS50b2dnbGUpLm9uKCJrZXlkb3duLmRyb3Bkb3duLmRhdGEtYXBpIHRvdWNoc3Rh
cnQuZHJvcGRvd24uZGF0YS1hcGkiLHRvZ2dsZSsiLCBbcm9sZT1tZW51XSIsRHJvcGRvd24ucHJv
dG90eXBlLmtleWRvd24pfSh3aW5kb3cualF1ZXJ5KSwhZnVuY3Rpb24oJCl7InVzZSBzdHJpY3Qi
O3ZhciBNb2RhbD1mdW5jdGlvbihlbGVtZW50LG9wdGlvbnMpe3RoaXMub3B0aW9ucz1vcHRpb25z
LHRoaXMuJGVsZW1lbnQ9JChlbGVtZW50KS5kZWxlZ2F0ZSgnW2RhdGEtZGlzbWlzcz0ibW9kYWwi
XScsImNsaWNrLmRpc21pc3MubW9kYWwiLCQucHJveHkodGhpcy5oaWRlLHRoaXMpKSx0aGlzLm9w
dGlvbnMucmVtb3RlJiZ0aGlzLiRlbGVtZW50LmZpbmQoIi5tb2RhbC1ib2R5IikubG9hZCh0aGlz
Lm9wdGlvbnMucmVtb3RlKX07TW9kYWwucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpNb2RhbCx0b2dn
bGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1t0aGlzLmlzU2hvd24/ImhpZGUiOiJzaG93Il0oKX0s
c2hvdzpmdW5jdGlvbigpe3ZhciB0aGF0PXRoaXMsZT0kLkV2ZW50KCJzaG93Iik7dGhpcy4kZWxl
bWVudC50cmlnZ2VyKGUpLHRoaXMuaXNTaG93bnx8ZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKXx8KHRo
aXMuaXNTaG93bj0hMCx0aGlzLmVzY2FwZSgpLHRoaXMuYmFja2Ryb3AoZnVuY3Rpb24oKXt2YXIg
dHJhbnNpdGlvbj0kLnN1cHBvcnQudHJhbnNpdGlvbiYmdGhhdC4kZWxlbWVudC5oYXNDbGFzcygi
ZmFkZSIpO3RoYXQuJGVsZW1lbnQucGFyZW50KCkubGVuZ3RofHx0aGF0LiRlbGVtZW50LmFwcGVu
ZFRvKGRvY3VtZW50LmJvZHkpLHRoYXQuJGVsZW1lbnQuc2hvdygpLHRyYW5zaXRpb24mJnRoYXQu
JGVsZW1lbnRbMF0ub2Zmc2V0V2lkdGgsdGhhdC4kZWxlbWVudC5hZGRDbGFzcygiaW4iKS5hdHRy
KCJhcmlhLWhpZGRlbiIsITEpLHRoYXQuZW5mb3JjZUZvY3VzKCksdHJhbnNpdGlvbj90aGF0LiRl
bGVtZW50Lm9uZSgkLnN1cHBvcnQudHJhbnNpdGlvbi5lbmQsZnVuY3Rpb24oKXt0aGF0LiRlbGVt
ZW50LmZvY3VzKCkudHJpZ2dlcigic2hvd24iKX0pOnRoYXQuJGVsZW1lbnQuZm9jdXMoKS50cmln
Z2VyKCJzaG93biIpfSkpfSxoaWRlOmZ1bmN0aW9uKGUpe2UmJmUucHJldmVudERlZmF1bHQoKSxl
PSQuRXZlbnQoImhpZGUiKSx0aGlzLiRlbGVtZW50LnRyaWdnZXIoZSksdGhpcy5pc1Nob3duJiYh
ZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSYmKHRoaXMuaXNTaG93bj0hMSx0aGlzLmVzY2FwZSgpLCQo
ZG9jdW1lbnQpLm9mZigiZm9jdXNpbi5tb2RhbCIpLHRoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3Mo
ImluIikuYXR0cigiYXJpYS1oaWRkZW4iLCEwKSwkLnN1cHBvcnQudHJhbnNpdGlvbiYmdGhpcy4k
ZWxlbWVudC5oYXNDbGFzcygiZmFkZSIpP3RoaXMuaGlkZVdpdGhUcmFuc2l0aW9uKCk6dGhpcy5o
aWRlTW9kYWwoKSl9LGVuZm9yY2VGb2N1czpmdW5jdGlvbigpe3ZhciB0aGF0PXRoaXM7JChkb2N1
bWVudCkub24oImZvY3VzaW4ubW9kYWwiLGZ1bmN0aW9uKGUpe3RoYXQuJGVsZW1lbnRbMF09PT1l
LnRhcmdldHx8dGhhdC4kZWxlbWVudC5oYXMoZS50YXJnZXQpLmxlbmd0aHx8dGhhdC4kZWxlbWVu
dC5mb2N1cygpfSl9LGVzY2FwZTpmdW5jdGlvbigpe3ZhciB0aGF0PXRoaXM7dGhpcy5pc1Nob3du
JiZ0aGlzLm9wdGlvbnMua2V5Ym9hcmQ/dGhpcy4kZWxlbWVudC5vbigia2V5dXAuZGlzbWlzcy5t
b2RhbCIsZnVuY3Rpb24oZSl7Mjc9PWUud2hpY2gmJnRoYXQuaGlkZSgpfSk6dGhpcy5pc1Nob3du
fHx0aGlzLiRlbGVtZW50Lm9mZigia2V5dXAuZGlzbWlzcy5tb2RhbCIpfSxoaWRlV2l0aFRyYW5z
aXRpb246ZnVuY3Rpb24oKXt2YXIgdGhhdD10aGlzLHRpbWVvdXQ9c2V0VGltZW91dChmdW5jdGlv
bigpe3RoYXQuJGVsZW1lbnQub2ZmKCQuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCksdGhhdC5oaWRl
TW9kYWwoKX0sNTAwKTt0aGlzLiRlbGVtZW50Lm9uZSgkLnN1cHBvcnQudHJhbnNpdGlvbi5lbmQs
ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQodGltZW91dCksdGhhdC5oaWRlTW9kYWwoKX0pfSxoaWRl
TW9kYWw6ZnVuY3Rpb24oKXt0aGlzLiRlbGVtZW50LmhpZGUoKS50cmlnZ2VyKCJoaWRkZW4iKSx0
aGlzLmJhY2tkcm9wKCl9LHJlbW92ZUJhY2tkcm9wOmZ1bmN0aW9uKCl7dGhpcy4kYmFja2Ryb3Au
cmVtb3ZlKCksdGhpcy4kYmFja2Ryb3A9bnVsbH0sYmFja2Ryb3A6ZnVuY3Rpb24oY2FsbGJhY2sp
e3ZhciBhbmltYXRlPXRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoImZhZGUiKT8iZmFkZSI6IiI7aWYo
dGhpcy5pc1Nob3duJiZ0aGlzLm9wdGlvbnMuYmFja2Ryb3Ape3ZhciBkb0FuaW1hdGU9JC5zdXBw
b3J0LnRyYW5zaXRpb24mJmFuaW1hdGU7dGhpcy4kYmFja2Ryb3A9JCgnPGRpdiBjbGFzcz0ibW9k
YWwtYmFja2Ryb3AgJythbmltYXRlKyciIC8+JykuYXBwZW5kVG8oZG9jdW1lbnQuYm9keSksdGhp
cy4kYmFja2Ryb3AuY2xpY2soInN0YXRpYyI9PXRoaXMub3B0aW9ucy5iYWNrZHJvcD8kLnByb3h5
KHRoaXMuJGVsZW1lbnRbMF0uZm9jdXMsdGhpcy4kZWxlbWVudFswXSk6JC5wcm94eSh0aGlzLmhp
ZGUsdGhpcykpLGRvQW5pbWF0ZSYmdGhpcy4kYmFja2Ryb3BbMF0ub2Zmc2V0V2lkdGgsdGhpcy4k
YmFja2Ryb3AuYWRkQ2xhc3MoImluIiksZG9BbmltYXRlP3RoaXMuJGJhY2tkcm9wLm9uZSgkLnN1
cHBvcnQudHJhbnNpdGlvbi5lbmQsY2FsbGJhY2spOmNhbGxiYWNrKCl9ZWxzZSF0aGlzLmlzU2hv
d24mJnRoaXMuJGJhY2tkcm9wPyh0aGlzLiRiYWNrZHJvcC5yZW1vdmVDbGFzcygiaW4iKSwkLnN1
cHBvcnQudHJhbnNpdGlvbiYmdGhpcy4kZWxlbWVudC5oYXNDbGFzcygiZmFkZSIpP3RoaXMuJGJh
Y2tkcm9wLm9uZSgkLnN1cHBvcnQudHJhbnNpdGlvbi5lbmQsJC5wcm94eSh0aGlzLnJlbW92ZUJh
Y2tkcm9wLHRoaXMpKTp0aGlzLnJlbW92ZUJhY2tkcm9wKCkpOmNhbGxiYWNrJiZjYWxsYmFjaygp
fX07dmFyIG9sZD0kLmZuLm1vZGFsOyQuZm4ubW9kYWw9ZnVuY3Rpb24ob3B0aW9uKXtyZXR1cm4g
dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyICR0aGlzPSQodGhpcyksZGF0YT0kdGhpcy5kYXRhKCJt
b2RhbCIpLG9wdGlvbnM9JC5leHRlbmQoe30sJC5mbi5tb2RhbC5kZWZhdWx0cywkdGhpcy5kYXRh
KCksIm9iamVjdCI9PXR5cGVvZiBvcHRpb24mJm9wdGlvbik7ZGF0YXx8JHRoaXMuZGF0YSgibW9k
YWwiLGRhdGE9bmV3IE1vZGFsKHRoaXMsb3B0aW9ucykpLCJzdHJpbmciPT10eXBlb2Ygb3B0aW9u
P2RhdGFbb3B0aW9uXSgpOm9wdGlvbnMuc2hvdyYmZGF0YS5zaG93KCl9KX0sJC5mbi5tb2RhbC5k
ZWZhdWx0cz17YmFja2Ryb3A6ITAsa2V5Ym9hcmQ6ITAsc2hvdzohMH0sJC5mbi5tb2RhbC5Db25z
dHJ1Y3Rvcj1Nb2RhbCwkLmZuLm1vZGFsLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gJC5m
bi5tb2RhbD1vbGQsdGhpc30sJChkb2N1bWVudCkub24oImNsaWNrLm1vZGFsLmRhdGEtYXBpIiwn
W2RhdGEtdG9nZ2xlPSJtb2RhbCJdJyxmdW5jdGlvbihlKXt2YXIgJHRoaXM9JCh0aGlzKSxocmVm
PSR0aGlzLmF0dHIoImhyZWYiKSwkdGFyZ2V0PSQoJHRoaXMuYXR0cigiZGF0YS10YXJnZXQiKXx8
aHJlZiYmaHJlZi5yZXBsYWNlKC8uKig/PSNbXlxzXSskKS8sIiIpKSxvcHRpb249JHRhcmdldC5k
YXRhKCJtb2RhbCIpPyJ0b2dnbGUiOiQuZXh0ZW5kKHtyZW1vdGU6IS8jLy50ZXN0KGhyZWYpJiZo
cmVmfSwkdGFyZ2V0LmRhdGEoKSwkdGhpcy5kYXRhKCkpO2UucHJldmVudERlZmF1bHQoKSwkdGFy
Z2V0Lm1vZGFsKG9wdGlvbikub25lKCJoaWRlIixmdW5jdGlvbigpeyR0aGlzLmZvY3VzKCl9KX0p
fSh3aW5kb3cualF1ZXJ5KSwhZnVuY3Rpb24oJCl7InVzZSBzdHJpY3QiO3ZhciBUb29sdGlwPWZ1
bmN0aW9uKGVsZW1lbnQsb3B0aW9ucyl7dGhpcy5pbml0KCJ0b29sdGlwIixlbGVtZW50LG9wdGlv
bnMpfTtUb29sdGlwLnByb3RvdHlwZT17Y29uc3RydWN0b3I6VG9vbHRpcCxpbml0OmZ1bmN0aW9u
KHR5cGUsZWxlbWVudCxvcHRpb25zKXt2YXIgZXZlbnRJbixldmVudE91dDt0aGlzLnR5cGU9dHlw
ZSx0aGlzLiRlbGVtZW50PSQoZWxlbWVudCksdGhpcy5vcHRpb25zPXRoaXMuZ2V0T3B0aW9ucyhv
cHRpb25zKSx0aGlzLmVuYWJsZWQ9ITAsImNsaWNrIj09dGhpcy5vcHRpb25zLnRyaWdnZXI/dGhp
cy4kZWxlbWVudC5vbigiY2xpY2suIit0aGlzLnR5cGUsdGhpcy5vcHRpb25zLnNlbGVjdG9yLCQu
cHJveHkodGhpcy50b2dnbGUsdGhpcykpOiJtYW51YWwiIT10aGlzLm9wdGlvbnMudHJpZ2dlciYm
KGV2ZW50SW49ImhvdmVyIj09dGhpcy5vcHRpb25zLnRyaWdnZXI/Im1vdXNlZW50ZXIiOiJmb2N1
cyIsZXZlbnRPdXQ9ImhvdmVyIj09dGhpcy5vcHRpb25zLnRyaWdnZXI/Im1vdXNlbGVhdmUiOiJi
bHVyIix0aGlzLiRlbGVtZW50Lm9uKGV2ZW50SW4rIi4iK3RoaXMudHlwZSx0aGlzLm9wdGlvbnMu
c2VsZWN0b3IsJC5wcm94eSh0aGlzLmVudGVyLHRoaXMpKSx0aGlzLiRlbGVtZW50Lm9uKGV2ZW50
T3V0KyIuIit0aGlzLnR5cGUsdGhpcy5vcHRpb25zLnNlbGVjdG9yLCQucHJveHkodGhpcy5sZWF2
ZSx0aGlzKSkpLHRoaXMub3B0aW9ucy5zZWxlY3Rvcj90aGlzLl9vcHRpb25zPSQuZXh0ZW5kKHt9
LHRoaXMub3B0aW9ucyx7dHJpZ2dlcjoibWFudWFsIixzZWxlY3RvcjoiIn0pOnRoaXMuZml4VGl0
bGUoKX0sZ2V0T3B0aW9uczpmdW5jdGlvbihvcHRpb25zKXtyZXR1cm4gb3B0aW9ucz0kLmV4dGVu
ZCh7fSwkLmZuW3RoaXMudHlwZV0uZGVmYXVsdHMsb3B0aW9ucyx0aGlzLiRlbGVtZW50LmRhdGEo
KSksb3B0aW9ucy5kZWxheSYmIm51bWJlciI9PXR5cGVvZiBvcHRpb25zLmRlbGF5JiYob3B0aW9u
cy5kZWxheT17c2hvdzpvcHRpb25zLmRlbGF5LGhpZGU6b3B0aW9ucy5kZWxheX0pLG9wdGlvbnN9
LGVudGVyOmZ1bmN0aW9uKGUpe3ZhciBzZWxmPSQoZS5jdXJyZW50VGFyZ2V0KVt0aGlzLnR5cGVd
KHRoaXMuX29wdGlvbnMpLmRhdGEodGhpcy50eXBlKTtyZXR1cm4gc2VsZi5vcHRpb25zLmRlbGF5
JiZzZWxmLm9wdGlvbnMuZGVsYXkuc2hvdz8oY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCksc2Vs
Zi5ob3ZlclN0YXRlPSJpbiIsdGhpcy50aW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXsiaW4i
PT1zZWxmLmhvdmVyU3RhdGUmJnNlbGYuc2hvdygpfSxzZWxmLm9wdGlvbnMuZGVsYXkuc2hvdyks
dm9pZCAwKTpzZWxmLnNob3coKX0sbGVhdmU6ZnVuY3Rpb24oZSl7dmFyIHNlbGY9JChlLmN1cnJl
bnRUYXJnZXQpW3RoaXMudHlwZV0odGhpcy5fb3B0aW9ucykuZGF0YSh0aGlzLnR5cGUpO3JldHVy
biB0aGlzLnRpbWVvdXQmJmNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpLHNlbGYub3B0aW9ucy5k
ZWxheSYmc2VsZi5vcHRpb25zLmRlbGF5LmhpZGU/KHNlbGYuaG92ZXJTdGF0ZT0ib3V0Iix0aGlz
LnRpbWVvdXQ9c2V0VGltZW91dChmdW5jdGlvbigpeyJvdXQiPT1zZWxmLmhvdmVyU3RhdGUmJnNl
bGYuaGlkZSgpfSxzZWxmLm9wdGlvbnMuZGVsYXkuaGlkZSksdm9pZCAwKTpzZWxmLmhpZGUoKX0s
c2hvdzpmdW5jdGlvbigpe3ZhciAkdGlwLGluc2lkZSxwb3MsYWN0dWFsV2lkdGgsYWN0dWFsSGVp
Z2h0LHBsYWNlbWVudCx0cDtpZih0aGlzLmhhc0NvbnRlbnQoKSYmdGhpcy5lbmFibGVkKXtzd2l0
Y2goJHRpcD10aGlzLnRpcCgpLHRoaXMuc2V0Q29udGVudCgpLHRoaXMub3B0aW9ucy5hbmltYXRp
b24mJiR0aXAuYWRkQ2xhc3MoImZhZGUiKSxwbGFjZW1lbnQ9ImZ1bmN0aW9uIj09dHlwZW9mIHRo
aXMub3B0aW9ucy5wbGFjZW1lbnQ/dGhpcy5vcHRpb25zLnBsYWNlbWVudC5jYWxsKHRoaXMsJHRp
cFswXSx0aGlzLiRlbGVtZW50WzBdKTp0aGlzLm9wdGlvbnMucGxhY2VtZW50LGluc2lkZT0vaW4v
LnRlc3QocGxhY2VtZW50KSwkdGlwLmRldGFjaCgpLmNzcyh7dG9wOjAsbGVmdDowLGRpc3BsYXk6
ImJsb2NrIn0pLmluc2VydEFmdGVyKHRoaXMuJGVsZW1lbnQpLHBvcz10aGlzLmdldFBvc2l0aW9u
KGluc2lkZSksYWN0dWFsV2lkdGg9JHRpcFswXS5vZmZzZXRXaWR0aCxhY3R1YWxIZWlnaHQ9JHRp
cFswXS5vZmZzZXRIZWlnaHQsaW5zaWRlP3BsYWNlbWVudC5zcGxpdCgiICIpWzFdOnBsYWNlbWVu
dCl7Y2FzZSJib3R0b20iOnRwPXt0b3A6cG9zLnRvcCtwb3MuaGVpZ2h0LGxlZnQ6cG9zLmxlZnQr
cG9zLndpZHRoLzItYWN0dWFsV2lkdGgvMn07YnJlYWs7Y2FzZSJ0b3AiOnRwPXt0b3A6cG9zLnRv
cC1hY3R1YWxIZWlnaHQsbGVmdDpwb3MubGVmdCtwb3Mud2lkdGgvMi1hY3R1YWxXaWR0aC8yfTti
cmVhaztjYXNlImxlZnQiOnRwPXt0b3A6cG9zLnRvcCtwb3MuaGVpZ2h0LzItYWN0dWFsSGVpZ2h0
LzIsbGVmdDpwb3MubGVmdC1hY3R1YWxXaWR0aH07YnJlYWs7Y2FzZSJyaWdodCI6dHA9e3RvcDpw
b3MudG9wK3Bvcy5oZWlnaHQvMi1hY3R1YWxIZWlnaHQvMixsZWZ0OnBvcy5sZWZ0K3Bvcy53aWR0
aH19JHRpcC5vZmZzZXQodHApLmFkZENsYXNzKHBsYWNlbWVudCkuYWRkQ2xhc3MoImluIil9fSxz
ZXRDb250ZW50OmZ1bmN0aW9uKCl7dmFyICR0aXA9dGhpcy50aXAoKSx0aXRsZT10aGlzLmdldFRp
dGxlKCk7JHRpcC5maW5kKCIudG9vbHRpcC1pbm5lciIpW3RoaXMub3B0aW9ucy5odG1sPyJodG1s
IjoidGV4dCJdKHRpdGxlKSwkdGlwLnJlbW92ZUNsYXNzKCJmYWRlIGluIHRvcCBib3R0b20gbGVm
dCByaWdodCIpfSxoaWRlOmZ1bmN0aW9uKCl7ZnVuY3Rpb24gcmVtb3ZlV2l0aEFuaW1hdGlvbigp
e3ZhciB0aW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXskdGlwLm9mZigkLnN1cHBvcnQudHJh
bnNpdGlvbi5lbmQpLmRldGFjaCgpfSw1MDApOyR0aXAub25lKCQuc3VwcG9ydC50cmFuc2l0aW9u
LmVuZCxmdW5jdGlvbigpe2NsZWFyVGltZW91dCh0aW1lb3V0KSwkdGlwLmRldGFjaCgpfSl9dmFy
ICR0aXA9dGhpcy50aXAoKTtyZXR1cm4gJHRpcC5yZW1vdmVDbGFzcygiaW4iKSwkLnN1cHBvcnQu
dHJhbnNpdGlvbiYmdGhpcy4kdGlwLmhhc0NsYXNzKCJmYWRlIik/cmVtb3ZlV2l0aEFuaW1hdGlv
bigpOiR0aXAuZGV0YWNoKCksdGhpc30sZml4VGl0bGU6ZnVuY3Rpb24oKXt2YXIgJGU9dGhpcy4k
ZWxlbWVudDsoJGUuYXR0cigidGl0bGUiKXx8InN0cmluZyIhPXR5cGVvZiAkZS5hdHRyKCJkYXRh
LW9yaWdpbmFsLXRpdGxlIikpJiYkZS5hdHRyKCJkYXRhLW9yaWdpbmFsLXRpdGxlIiwkZS5hdHRy
KCJ0aXRsZSIpfHwiIikucmVtb3ZlQXR0cigidGl0bGUiKX0saGFzQ29udGVudDpmdW5jdGlvbigp
e3JldHVybiB0aGlzLmdldFRpdGxlKCl9LGdldFBvc2l0aW9uOmZ1bmN0aW9uKGluc2lkZSl7cmV0
dXJuICQuZXh0ZW5kKHt9LGluc2lkZT97dG9wOjAsbGVmdDowfTp0aGlzLiRlbGVtZW50Lm9mZnNl
dCgpLHt3aWR0aDp0aGlzLiRlbGVtZW50WzBdLm9mZnNldFdpZHRoLGhlaWdodDp0aGlzLiRlbGVt
ZW50WzBdLm9mZnNldEhlaWdodH0pfSxnZXRUaXRsZTpmdW5jdGlvbigpe3ZhciB0aXRsZSwkZT10
aGlzLiRlbGVtZW50LG89dGhpcy5vcHRpb25zO3JldHVybiB0aXRsZT0kZS5hdHRyKCJkYXRhLW9y
aWdpbmFsLXRpdGxlIil8fCgiZnVuY3Rpb24iPT10eXBlb2Ygby50aXRsZT9vLnRpdGxlLmNhbGwo
JGVbMF0pOm8udGl0bGUpfSx0aXA6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kdGlwPXRoaXMuJHRp
cHx8JCh0aGlzLm9wdGlvbnMudGVtcGxhdGUpfSx2YWxpZGF0ZTpmdW5jdGlvbigpe3RoaXMuJGVs
ZW1lbnRbMF0ucGFyZW50Tm9kZXx8KHRoaXMuaGlkZSgpLHRoaXMuJGVsZW1lbnQ9bnVsbCx0aGlz
Lm9wdGlvbnM9bnVsbCl9LGVuYWJsZTpmdW5jdGlvbigpe3RoaXMuZW5hYmxlZD0hMH0sZGlzYWJs
ZTpmdW5jdGlvbigpe3RoaXMuZW5hYmxlZD0hMX0sdG9nZ2xlRW5hYmxlZDpmdW5jdGlvbigpe3Ro
aXMuZW5hYmxlZD0hdGhpcy5lbmFibGVkfSx0b2dnbGU6ZnVuY3Rpb24oZSl7dmFyIHNlbGY9JChl
LmN1cnJlbnRUYXJnZXQpW3RoaXMudHlwZV0odGhpcy5fb3B0aW9ucykuZGF0YSh0aGlzLnR5cGUp
O3NlbGZbc2VsZi50aXAoKS5oYXNDbGFzcygiaW4iKT8iaGlkZSI6InNob3ciXSgpfSxkZXN0cm95
OmZ1bmN0aW9uKCl7dGhpcy5oaWRlKCkuJGVsZW1lbnQub2ZmKCIuIit0aGlzLnR5cGUpLnJlbW92
ZURhdGEodGhpcy50eXBlKX19O3ZhciBvbGQ9JC5mbi50b29sdGlwOyQuZm4udG9vbHRpcD1mdW5j
dGlvbihvcHRpb24pe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgJHRoaXM9JCh0aGlz
KSxkYXRhPSR0aGlzLmRhdGEoInRvb2x0aXAiKSxvcHRpb25zPSJvYmplY3QiPT10eXBlb2Ygb3B0
aW9uJiZvcHRpb247ZGF0YXx8JHRoaXMuZGF0YSgidG9vbHRpcCIsZGF0YT1uZXcgVG9vbHRpcCh0
aGlzLG9wdGlvbnMpKSwic3RyaW5nIj09dHlwZW9mIG9wdGlvbiYmZGF0YVtvcHRpb25dKCl9KX0s
JC5mbi50b29sdGlwLkNvbnN0cnVjdG9yPVRvb2x0aXAsJC5mbi50b29sdGlwLmRlZmF1bHRzPXth
bmltYXRpb246ITAscGxhY2VtZW50OiJ0b3AiLHNlbGVjdG9yOiExLHRlbXBsYXRlOic8ZGl2IGNs
YXNzPSJ0b29sdGlwIj48ZGl2IGNsYXNzPSJ0b29sdGlwLWFycm93Ij48L2Rpdj48ZGl2IGNsYXNz
PSJ0b29sdGlwLWlubmVyIj48L2Rpdj48L2Rpdj4nLHRyaWdnZXI6ImhvdmVyIix0aXRsZToiIixk
ZWxheTowLGh0bWw6ITF9LCQuZm4udG9vbHRpcC5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJu
ICQuZm4udG9vbHRpcD1vbGQsdGhpc319KHdpbmRvdy5qUXVlcnkpLCFmdW5jdGlvbigkKXsidXNl
IHN0cmljdCI7dmFyIFBvcG92ZXI9ZnVuY3Rpb24oZWxlbWVudCxvcHRpb25zKXt0aGlzLmluaXQo
InBvcG92ZXIiLGVsZW1lbnQsb3B0aW9ucyl9O1BvcG92ZXIucHJvdG90eXBlPSQuZXh0ZW5kKHt9
LCQuZm4udG9vbHRpcC5Db25zdHJ1Y3Rvci5wcm90b3R5cGUse2NvbnN0cnVjdG9yOlBvcG92ZXIs
c2V0Q29udGVudDpmdW5jdGlvbigpe3ZhciAkdGlwPXRoaXMudGlwKCksdGl0bGU9dGhpcy5nZXRU
aXRsZSgpLGNvbnRlbnQ9dGhpcy5nZXRDb250ZW50KCk7JHRpcC5maW5kKCIucG9wb3Zlci10aXRs
ZSIpW3RoaXMub3B0aW9ucy5odG1sPyJodG1sIjoidGV4dCJdKHRpdGxlKSwkdGlwLmZpbmQoIi5w
b3BvdmVyLWNvbnRlbnQiKVt0aGlzLm9wdGlvbnMuaHRtbD8iaHRtbCI6InRleHQiXShjb250ZW50
KSwkdGlwLnJlbW92ZUNsYXNzKCJmYWRlIHRvcCBib3R0b20gbGVmdCByaWdodCBpbiIpfSxoYXND
b250ZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0VGl0bGUoKXx8dGhpcy5nZXRDb250ZW50
KCl9LGdldENvbnRlbnQ6ZnVuY3Rpb24oKXt2YXIgY29udGVudCwkZT10aGlzLiRlbGVtZW50LG89
dGhpcy5vcHRpb25zO3JldHVybiBjb250ZW50PSRlLmF0dHIoImRhdGEtY29udGVudCIpfHwoImZ1
bmN0aW9uIj09dHlwZW9mIG8uY29udGVudD9vLmNvbnRlbnQuY2FsbCgkZVswXSk6by5jb250ZW50
KX0sdGlwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHRpcHx8KHRoaXMuJHRpcD0kKHRoaXMub3B0
aW9ucy50ZW1wbGF0ZSkpLHRoaXMuJHRpcH0sZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuaGlkZSgp
LiRlbGVtZW50Lm9mZigiLiIrdGhpcy50eXBlKS5yZW1vdmVEYXRhKHRoaXMudHlwZSl9fSk7dmFy
IG9sZD0kLmZuLnBvcG92ZXI7JC5mbi5wb3BvdmVyPWZ1bmN0aW9uKG9wdGlvbil7cmV0dXJuIHRo
aXMuZWFjaChmdW5jdGlvbigpe3ZhciAkdGhpcz0kKHRoaXMpLGRhdGE9JHRoaXMuZGF0YSgicG9w
b3ZlciIpLG9wdGlvbnM9Im9iamVjdCI9PXR5cGVvZiBvcHRpb24mJm9wdGlvbjtkYXRhfHwkdGhp
cy5kYXRhKCJwb3BvdmVyIixkYXRhPW5ldyBQb3BvdmVyKHRoaXMsb3B0aW9ucykpLCJzdHJpbmci
PT10eXBlb2Ygb3B0aW9uJiZkYXRhW29wdGlvbl0oKX0pfSwkLmZuLnBvcG92ZXIuQ29uc3RydWN0
b3I9UG9wb3ZlciwkLmZuLnBvcG92ZXIuZGVmYXVsdHM9JC5leHRlbmQoe30sJC5mbi50b29sdGlw
LmRlZmF1bHRzLHtwbGFjZW1lbnQ6InJpZ2h0Iix0cmlnZ2VyOiJjbGljayIsY29udGVudDoiIix0
ZW1wbGF0ZTonPGRpdiBjbGFzcz0icG9wb3ZlciI+PGRpdiBjbGFzcz0iYXJyb3ciPjwvZGl2Pjxk
aXYgY2xhc3M9InBvcG92ZXItaW5uZXIiPjxoMyBjbGFzcz0icG9wb3Zlci10aXRsZSI+PC9oMz48
ZGl2IGNsYXNzPSJwb3BvdmVyLWNvbnRlbnQiPjwvZGl2PjwvZGl2PjwvZGl2Pid9KSwkLmZuLnBv
cG92ZXIubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiAkLmZuLnBvcG92ZXI9b2xkLHRoaXN9
fSh3aW5kb3cualF1ZXJ5KSwhZnVuY3Rpb24oJCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIFNjcm9s
bFNweShlbGVtZW50LG9wdGlvbnMpe3ZhciBocmVmLHByb2Nlc3M9JC5wcm94eSh0aGlzLnByb2Nl
c3MsdGhpcyksJGVsZW1lbnQ9JChlbGVtZW50KS5pcygiYm9keSIpPyQod2luZG93KTokKGVsZW1l
bnQpO3RoaXMub3B0aW9ucz0kLmV4dGVuZCh7fSwkLmZuLnNjcm9sbHNweS5kZWZhdWx0cyxvcHRp
b25zKSx0aGlzLiRzY3JvbGxFbGVtZW50PSRlbGVtZW50Lm9uKCJzY3JvbGwuc2Nyb2xsLXNweS5k
YXRhLWFwaSIscHJvY2VzcyksdGhpcy5zZWxlY3Rvcj0odGhpcy5vcHRpb25zLnRhcmdldHx8KGhy
ZWY9JChlbGVtZW50KS5hdHRyKCJocmVmIikpJiZocmVmLnJlcGxhY2UoLy4qKD89I1teXHNdKyQp
LywiIil8fCIiKSsiIC5uYXYgbGkgPiBhIix0aGlzLiRib2R5PSQoImJvZHkiKSx0aGlzLnJlZnJl
c2goKSx0aGlzLnByb2Nlc3MoKX1TY3JvbGxTcHkucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpTY3Jv
bGxTcHkscmVmcmVzaDpmdW5jdGlvbigpe3ZhciAkdGFyZ2V0cyxzZWxmPXRoaXM7dGhpcy5vZmZz
ZXRzPSQoW10pLHRoaXMudGFyZ2V0cz0kKFtdKSwkdGFyZ2V0cz10aGlzLiRib2R5LmZpbmQodGhp
cy5zZWxlY3RvcikubWFwKGZ1bmN0aW9uKCl7dmFyICRlbD0kKHRoaXMpLGhyZWY9JGVsLmRhdGEo
InRhcmdldCIpfHwkZWwuYXR0cigiaHJlZiIpLCRocmVmPS9eI1x3Ly50ZXN0KGhyZWYpJiYkKGhy
ZWYpO3JldHVybiAkaHJlZiYmJGhyZWYubGVuZ3RoJiZbWyRocmVmLnBvc2l0aW9uKCkudG9wK3Nl
bGYuJHNjcm9sbEVsZW1lbnQuc2Nyb2xsVG9wKCksaHJlZl1dfHxudWxsfSkuc29ydChmdW5jdGlv
bihhLGIpe3JldHVybiBhWzBdLWJbMF19KS5lYWNoKGZ1bmN0aW9uKCl7c2VsZi5vZmZzZXRzLnB1
c2godGhpc1swXSksc2VsZi50YXJnZXRzLnB1c2godGhpc1sxXSl9KX0scHJvY2VzczpmdW5jdGlv
bigpe3ZhciBpLHNjcm9sbFRvcD10aGlzLiRzY3JvbGxFbGVtZW50LnNjcm9sbFRvcCgpK3RoaXMu
b3B0aW9ucy5vZmZzZXQsc2Nyb2xsSGVpZ2h0PXRoaXMuJHNjcm9sbEVsZW1lbnRbMF0uc2Nyb2xs
SGVpZ2h0fHx0aGlzLiRib2R5WzBdLnNjcm9sbEhlaWdodCxtYXhTY3JvbGw9c2Nyb2xsSGVpZ2h0
LXRoaXMuJHNjcm9sbEVsZW1lbnQuaGVpZ2h0KCksb2Zmc2V0cz10aGlzLm9mZnNldHMsdGFyZ2V0
cz10aGlzLnRhcmdldHMsYWN0aXZlVGFyZ2V0PXRoaXMuYWN0aXZlVGFyZ2V0O2lmKHNjcm9sbFRv
cD49bWF4U2Nyb2xsKXJldHVybiBhY3RpdmVUYXJnZXQhPShpPXRhcmdldHMubGFzdCgpWzBdKSYm
dGhpcy5hY3RpdmF0ZShpKTtmb3IoaT1vZmZzZXRzLmxlbmd0aDtpLS07KWFjdGl2ZVRhcmdldCE9
dGFyZ2V0c1tpXSYmc2Nyb2xsVG9wPj1vZmZzZXRzW2ldJiYoIW9mZnNldHNbaSsxXXx8b2Zmc2V0
c1tpKzFdPj1zY3JvbGxUb3ApJiZ0aGlzLmFjdGl2YXRlKHRhcmdldHNbaV0pfSxhY3RpdmF0ZTpm
dW5jdGlvbih0YXJnZXQpe3ZhciBhY3RpdmUsc2VsZWN0b3I7dGhpcy5hY3RpdmVUYXJnZXQ9dGFy
Z2V0LCQodGhpcy5zZWxlY3RvcikucGFyZW50KCIuYWN0aXZlIikucmVtb3ZlQ2xhc3MoImFjdGl2
ZSIpLHNlbGVjdG9yPXRoaXMuc2VsZWN0b3IrJ1tkYXRhLXRhcmdldD0iJyt0YXJnZXQrJyJdLCcr
dGhpcy5zZWxlY3RvcisnW2hyZWY9IicrdGFyZ2V0KyciXScsYWN0aXZlPSQoc2VsZWN0b3IpLnBh
cmVudCgibGkiKS5hZGRDbGFzcygiYWN0aXZlIiksYWN0aXZlLnBhcmVudCgiLmRyb3Bkb3duLW1l
bnUiKS5sZW5ndGgmJihhY3RpdmU9YWN0aXZlLmNsb3Nlc3QoImxpLmRyb3Bkb3duIikuYWRkQ2xh
c3MoImFjdGl2ZSIpKSxhY3RpdmUudHJpZ2dlcigiYWN0aXZhdGUiKX19O3ZhciBvbGQ9JC5mbi5z
Y3JvbGxzcHk7JC5mbi5zY3JvbGxzcHk9ZnVuY3Rpb24ob3B0aW9uKXtyZXR1cm4gdGhpcy5lYWNo
KGZ1bmN0aW9uKCl7dmFyICR0aGlzPSQodGhpcyksZGF0YT0kdGhpcy5kYXRhKCJzY3JvbGxzcHki
KSxvcHRpb25zPSJvYmplY3QiPT10eXBlb2Ygb3B0aW9uJiZvcHRpb247ZGF0YXx8JHRoaXMuZGF0
YSgic2Nyb2xsc3B5IixkYXRhPW5ldyBTY3JvbGxTcHkodGhpcyxvcHRpb25zKSksInN0cmluZyI9
PXR5cGVvZiBvcHRpb24mJmRhdGFbb3B0aW9uXSgpfSl9LCQuZm4uc2Nyb2xsc3B5LkNvbnN0cnVj
dG9yPVNjcm9sbFNweSwkLmZuLnNjcm9sbHNweS5kZWZhdWx0cz17b2Zmc2V0OjEwfSwkLmZuLnNj
cm9sbHNweS5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuICQuZm4uc2Nyb2xsc3B5PW9sZCx0
aGlzfSwkKHdpbmRvdykub24oImxvYWQiLGZ1bmN0aW9uKCl7JCgnW2RhdGEtc3B5PSJzY3JvbGwi
XScpLmVhY2goZnVuY3Rpb24oKXt2YXIgJHNweT0kKHRoaXMpOyRzcHkuc2Nyb2xsc3B5KCRzcHku
ZGF0YSgpKX0pfSl9KHdpbmRvdy5qUXVlcnkpLCFmdW5jdGlvbigkKXsidXNlIHN0cmljdCI7dmFy
IFRhYj1mdW5jdGlvbihlbGVtZW50KXt0aGlzLmVsZW1lbnQ9JChlbGVtZW50KX07VGFiLnByb3Rv
dHlwZT17Y29uc3RydWN0b3I6VGFiLHNob3c6ZnVuY3Rpb24oKXt2YXIgcHJldmlvdXMsJHRhcmdl
dCxlLCR0aGlzPXRoaXMuZWxlbWVudCwkdWw9JHRoaXMuY2xvc2VzdCgidWw6bm90KC5kcm9wZG93
bi1tZW51KSIpLHNlbGVjdG9yPSR0aGlzLmF0dHIoImRhdGEtdGFyZ2V0Iik7c2VsZWN0b3J8fChz
ZWxlY3Rvcj0kdGhpcy5hdHRyKCJocmVmIiksc2VsZWN0b3I9c2VsZWN0b3ImJnNlbGVjdG9yLnJl
cGxhY2UoLy4qKD89I1teXHNdKiQpLywiIikpLCR0aGlzLnBhcmVudCgibGkiKS5oYXNDbGFzcygi
YWN0aXZlIil8fChwcmV2aW91cz0kdWwuZmluZCgiLmFjdGl2ZTpsYXN0IGEiKVswXSxlPSQuRXZl
bnQoInNob3ciLHtyZWxhdGVkVGFyZ2V0OnByZXZpb3VzfSksJHRoaXMudHJpZ2dlcihlKSxlLmlz
RGVmYXVsdFByZXZlbnRlZCgpfHwoJHRhcmdldD0kKHNlbGVjdG9yKSx0aGlzLmFjdGl2YXRlKCR0
aGlzLnBhcmVudCgibGkiKSwkdWwpLHRoaXMuYWN0aXZhdGUoJHRhcmdldCwkdGFyZ2V0LnBhcmVu
dCgpLGZ1bmN0aW9uKCl7JHRoaXMudHJpZ2dlcih7dHlwZToic2hvd24iLHJlbGF0ZWRUYXJnZXQ6
cHJldmlvdXN9KX0pKSl9LGFjdGl2YXRlOmZ1bmN0aW9uKGVsZW1lbnQsY29udGFpbmVyLGNhbGxi
YWNrKXtmdW5jdGlvbiBuZXh0KCl7JGFjdGl2ZS5yZW1vdmVDbGFzcygiYWN0aXZlIikuZmluZCgi
PiAuZHJvcGRvd24tbWVudSA+IC5hY3RpdmUiKS5yZW1vdmVDbGFzcygiYWN0aXZlIiksZWxlbWVu
dC5hZGRDbGFzcygiYWN0aXZlIiksdHJhbnNpdGlvbj8oZWxlbWVudFswXS5vZmZzZXRXaWR0aCxl
bGVtZW50LmFkZENsYXNzKCJpbiIpKTplbGVtZW50LnJlbW92ZUNsYXNzKCJmYWRlIiksZWxlbWVu
dC5wYXJlbnQoIi5kcm9wZG93bi1tZW51IikmJmVsZW1lbnQuY2xvc2VzdCgibGkuZHJvcGRvd24i
KS5hZGRDbGFzcygiYWN0aXZlIiksY2FsbGJhY2smJmNhbGxiYWNrKCl9dmFyICRhY3RpdmU9Y29u
dGFpbmVyLmZpbmQoIj4gLmFjdGl2ZSIpLHRyYW5zaXRpb249Y2FsbGJhY2smJiQuc3VwcG9ydC50
cmFuc2l0aW9uJiYkYWN0aXZlLmhhc0NsYXNzKCJmYWRlIik7dHJhbnNpdGlvbj8kYWN0aXZlLm9u
ZSgkLnN1cHBvcnQudHJhbnNpdGlvbi5lbmQsbmV4dCk6bmV4dCgpLCRhY3RpdmUucmVtb3ZlQ2xh
c3MoImluIil9fTt2YXIgb2xkPSQuZm4udGFiOyQuZm4udGFiPWZ1bmN0aW9uKG9wdGlvbil7cmV0
dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciAkdGhpcz0kKHRoaXMpLGRhdGE9JHRoaXMuZGF0
YSgidGFiIik7ZGF0YXx8JHRoaXMuZGF0YSgidGFiIixkYXRhPW5ldyBUYWIodGhpcykpLCJzdHJp
bmciPT10eXBlb2Ygb3B0aW9uJiZkYXRhW29wdGlvbl0oKX0pfSwkLmZuLnRhYi5Db25zdHJ1Y3Rv
cj1UYWIsJC5mbi50YWIubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiAkLmZuLnRhYj1vbGQs
dGhpc30sJChkb2N1bWVudCkub24oImNsaWNrLnRhYi5kYXRhLWFwaSIsJ1tkYXRhLXRvZ2dsZT0i
dGFiIl0sIFtkYXRhLXRvZ2dsZT0icGlsbCJdJyxmdW5jdGlvbihlKXtlLnByZXZlbnREZWZhdWx0
KCksJCh0aGlzKS50YWIoInNob3ciKX0pfSh3aW5kb3cualF1ZXJ5KSwhZnVuY3Rpb24oJCl7InVz
ZSBzdHJpY3QiO3ZhciBUeXBlYWhlYWQ9ZnVuY3Rpb24oZWxlbWVudCxvcHRpb25zKXt0aGlzLiRl
bGVtZW50PSQoZWxlbWVudCksdGhpcy5vcHRpb25zPSQuZXh0ZW5kKHt9LCQuZm4udHlwZWFoZWFk
LmRlZmF1bHRzLG9wdGlvbnMpLHRoaXMubWF0Y2hlcj10aGlzLm9wdGlvbnMubWF0Y2hlcnx8dGhp
cy5tYXRjaGVyLHRoaXMuc29ydGVyPXRoaXMub3B0aW9ucy5zb3J0ZXJ8fHRoaXMuc29ydGVyLHRo
aXMuaGlnaGxpZ2h0ZXI9dGhpcy5vcHRpb25zLmhpZ2hsaWdodGVyfHx0aGlzLmhpZ2hsaWdodGVy
LHRoaXMudXBkYXRlcj10aGlzLm9wdGlvbnMudXBkYXRlcnx8dGhpcy51cGRhdGVyLHRoaXMuc291
cmNlPXRoaXMub3B0aW9ucy5zb3VyY2UsdGhpcy4kbWVudT0kKHRoaXMub3B0aW9ucy5tZW51KSx0
aGlzLnNob3duPSExLHRoaXMubGlzdGVuKCl9O1R5cGVhaGVhZC5wcm90b3R5cGU9e2NvbnN0cnVj
dG9yOlR5cGVhaGVhZCxzZWxlY3Q6ZnVuY3Rpb24oKXt2YXIgdmFsPXRoaXMuJG1lbnUuZmluZCgi
LmFjdGl2ZSIpLmF0dHIoImRhdGEtdmFsdWUiKTtyZXR1cm4gdGhpcy4kZWxlbWVudC52YWwodGhp
cy51cGRhdGVyKHZhbCkpLmNoYW5nZSgpLHRoaXMuaGlkZSgpfSx1cGRhdGVyOmZ1bmN0aW9uKGl0
ZW0pe3JldHVybiBpdGVtfSxzaG93OmZ1bmN0aW9uKCl7dmFyIHBvcz0kLmV4dGVuZCh7fSx0aGlz
LiRlbGVtZW50LnBvc2l0aW9uKCkse2hlaWdodDp0aGlzLiRlbGVtZW50WzBdLm9mZnNldEhlaWdo
dH0pO3JldHVybiB0aGlzLiRtZW51Lmluc2VydEFmdGVyKHRoaXMuJGVsZW1lbnQpLmNzcyh7dG9w
OnBvcy50b3ArcG9zLmhlaWdodCxsZWZ0OnBvcy5sZWZ0fSkuc2hvdygpLHRoaXMuc2hvd249ITAs
dGhpc30saGlkZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLiRtZW51LmhpZGUoKSx0aGlzLnNob3du
PSExLHRoaXN9LGxvb2t1cDpmdW5jdGlvbigpe3ZhciBpdGVtcztyZXR1cm4gdGhpcy5xdWVyeT10
aGlzLiRlbGVtZW50LnZhbCgpLCF0aGlzLnF1ZXJ5fHx0aGlzLnF1ZXJ5Lmxlbmd0aDx0aGlzLm9w
dGlvbnMubWluTGVuZ3RoP3RoaXMuc2hvd24/dGhpcy5oaWRlKCk6dGhpczooaXRlbXM9JC5pc0Z1
bmN0aW9uKHRoaXMuc291cmNlKT90aGlzLnNvdXJjZSh0aGlzLnF1ZXJ5LCQucHJveHkodGhpcy5w
cm9jZXNzLHRoaXMpKTp0aGlzLnNvdXJjZSxpdGVtcz90aGlzLnByb2Nlc3MoaXRlbXMpOnRoaXMp
fSxwcm9jZXNzOmZ1bmN0aW9uKGl0ZW1zKXt2YXIgdGhhdD10aGlzO3JldHVybiBpdGVtcz0kLmdy
ZXAoaXRlbXMsZnVuY3Rpb24oaXRlbSl7cmV0dXJuIHRoYXQubWF0Y2hlcihpdGVtKX0pLGl0ZW1z
PXRoaXMuc29ydGVyKGl0ZW1zKSxpdGVtcy5sZW5ndGg/dGhpcy5yZW5kZXIoaXRlbXMuc2xpY2Uo
MCx0aGlzLm9wdGlvbnMuaXRlbXMpKS5zaG93KCk6dGhpcy5zaG93bj90aGlzLmhpZGUoKTp0aGlz
fSxtYXRjaGVyOmZ1bmN0aW9uKGl0ZW0pe3JldHVybn5pdGVtLnRvTG93ZXJDYXNlKCkuaW5kZXhP
Zih0aGlzLnF1ZXJ5LnRvTG93ZXJDYXNlKCkpfSxzb3J0ZXI6ZnVuY3Rpb24oaXRlbXMpe2Zvcih2
YXIgaXRlbSxiZWdpbnN3aXRoPVtdLGNhc2VTZW5zaXRpdmU9W10sY2FzZUluc2Vuc2l0aXZlPVtd
O2l0ZW09aXRlbXMuc2hpZnQoKTspaXRlbS50b0xvd2VyQ2FzZSgpLmluZGV4T2YodGhpcy5xdWVy
eS50b0xvd2VyQ2FzZSgpKT9+aXRlbS5pbmRleE9mKHRoaXMucXVlcnkpP2Nhc2VTZW5zaXRpdmUu
cHVzaChpdGVtKTpjYXNlSW5zZW5zaXRpdmUucHVzaChpdGVtKTpiZWdpbnN3aXRoLnB1c2goaXRl
bSk7cmV0dXJuIGJlZ2luc3dpdGguY29uY2F0KGNhc2VTZW5zaXRpdmUsY2FzZUluc2Vuc2l0aXZl
KX0saGlnaGxpZ2h0ZXI6ZnVuY3Rpb24oaXRlbSl7dmFyIHF1ZXJ5PXRoaXMucXVlcnkucmVwbGFj
ZSgvW1wtXFtcXXt9KCkqKz8uLFxcXF4kfCNcc10vZywiXFwkJiIpO3JldHVybiBpdGVtLnJlcGxh
Y2UoUmVnRXhwKCIoIitxdWVyeSsiKSIsImlnIiksZnVuY3Rpb24oJDEsbWF0Y2gpe3JldHVybiI8
c3Ryb25nPiIrbWF0Y2grIjwvc3Ryb25nPiJ9KX0scmVuZGVyOmZ1bmN0aW9uKGl0ZW1zKXt2YXIg
dGhhdD10aGlzO3JldHVybiBpdGVtcz0kKGl0ZW1zKS5tYXAoZnVuY3Rpb24oaSxpdGVtKXtyZXR1
cm4gaT0kKHRoYXQub3B0aW9ucy5pdGVtKS5hdHRyKCJkYXRhLXZhbHVlIixpdGVtKSxpLmZpbmQo
ImEiKS5odG1sKHRoYXQuaGlnaGxpZ2h0ZXIoaXRlbSkpLGlbMF19KSxpdGVtcy5maXJzdCgpLmFk
ZENsYXNzKCJhY3RpdmUiKSx0aGlzLiRtZW51Lmh0bWwoaXRlbXMpLHRoaXN9LG5leHQ6ZnVuY3Rp
b24oKXt2YXIgYWN0aXZlPXRoaXMuJG1lbnUuZmluZCgiLmFjdGl2ZSIpLnJlbW92ZUNsYXNzKCJh
Y3RpdmUiKSxuZXh0PWFjdGl2ZS5uZXh0KCk7bmV4dC5sZW5ndGh8fChuZXh0PSQodGhpcy4kbWVu
dS5maW5kKCJsaSIpWzBdKSksbmV4dC5hZGRDbGFzcygiYWN0aXZlIil9LHByZXY6ZnVuY3Rpb24o
KXt2YXIgYWN0aXZlPXRoaXMuJG1lbnUuZmluZCgiLmFjdGl2ZSIpLnJlbW92ZUNsYXNzKCJhY3Rp
dmUiKSxwcmV2PWFjdGl2ZS5wcmV2KCk7cHJldi5sZW5ndGh8fChwcmV2PXRoaXMuJG1lbnUuZmlu
ZCgibGkiKS5sYXN0KCkpLHByZXYuYWRkQ2xhc3MoImFjdGl2ZSIpfSxsaXN0ZW46ZnVuY3Rpb24o
KXt0aGlzLiRlbGVtZW50Lm9uKCJibHVyIiwkLnByb3h5KHRoaXMuYmx1cix0aGlzKSkub24oImtl
eXByZXNzIiwkLnByb3h5KHRoaXMua2V5cHJlc3MsdGhpcykpLm9uKCJrZXl1cCIsJC5wcm94eSh0
aGlzLmtleXVwLHRoaXMpKSx0aGlzLmV2ZW50U3VwcG9ydGVkKCJrZXlkb3duIikmJnRoaXMuJGVs
ZW1lbnQub24oImtleWRvd24iLCQucHJveHkodGhpcy5rZXlkb3duLHRoaXMpKSx0aGlzLiRtZW51
Lm9uKCJjbGljayIsJC5wcm94eSh0aGlzLmNsaWNrLHRoaXMpKS5vbigibW91c2VlbnRlciIsImxp
IiwkLnByb3h5KHRoaXMubW91c2VlbnRlcix0aGlzKSl9LGV2ZW50U3VwcG9ydGVkOmZ1bmN0aW9u
KGV2ZW50TmFtZSl7dmFyIGlzU3VwcG9ydGVkPWV2ZW50TmFtZSBpbiB0aGlzLiRlbGVtZW50O3Jl
dHVybiBpc1N1cHBvcnRlZHx8KHRoaXMuJGVsZW1lbnQuc2V0QXR0cmlidXRlKGV2ZW50TmFtZSwi
cmV0dXJuOyIpLGlzU3VwcG9ydGVkPSJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLiRlbGVtZW50W2V2
ZW50TmFtZV0pLGlzU3VwcG9ydGVkfSxtb3ZlOmZ1bmN0aW9uKGUpe2lmKHRoaXMuc2hvd24pe3N3
aXRjaChlLmtleUNvZGUpe2Nhc2UgOTpjYXNlIDEzOmNhc2UgMjc6ZS5wcmV2ZW50RGVmYXVsdCgp
O2JyZWFrO2Nhc2UgMzg6ZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMucHJldigpO2JyZWFrO2Nhc2Ug
NDA6ZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMubmV4dCgpfWUuc3RvcFByb3BhZ2F0aW9uKCl9fSxr
ZXlkb3duOmZ1bmN0aW9uKGUpe3RoaXMuc3VwcHJlc3NLZXlQcmVzc1JlcGVhdD1+JC5pbkFycmF5
KGUua2V5Q29kZSxbNDAsMzgsOSwxMywyN10pLHRoaXMubW92ZShlKX0sa2V5cHJlc3M6ZnVuY3Rp
b24oZSl7dGhpcy5zdXBwcmVzc0tleVByZXNzUmVwZWF0fHx0aGlzLm1vdmUoZSl9LGtleXVwOmZ1
bmN0aW9uKGUpe3N3aXRjaChlLmtleUNvZGUpe2Nhc2UgNDA6Y2FzZSAzODpjYXNlIDE2OmNhc2Ug
MTc6Y2FzZSAxODpicmVhaztjYXNlIDk6Y2FzZSAxMzppZighdGhpcy5zaG93bilyZXR1cm47dGhp
cy5zZWxlY3QoKTticmVhaztjYXNlIDI3OmlmKCF0aGlzLnNob3duKXJldHVybjt0aGlzLmhpZGUo
KTticmVhaztkZWZhdWx0OnRoaXMubG9va3VwKCl9ZS5zdG9wUHJvcGFnYXRpb24oKSxlLnByZXZl
bnREZWZhdWx0KCl9LGJsdXI6ZnVuY3Rpb24oKXt2YXIgdGhhdD10aGlzO3NldFRpbWVvdXQoZnVu
Y3Rpb24oKXt0aGF0LmhpZGUoKX0sMTUwKX0sY2xpY2s6ZnVuY3Rpb24oZSl7ZS5zdG9wUHJvcGFn
YXRpb24oKSxlLnByZXZlbnREZWZhdWx0KCksdGhpcy5zZWxlY3QoKX0sbW91c2VlbnRlcjpmdW5j
dGlvbihlKXt0aGlzLiRtZW51LmZpbmQoIi5hY3RpdmUiKS5yZW1vdmVDbGFzcygiYWN0aXZlIiks
JChlLmN1cnJlbnRUYXJnZXQpLmFkZENsYXNzKCJhY3RpdmUiKX19O3ZhciBvbGQ9JC5mbi50eXBl
YWhlYWQ7JC5mbi50eXBlYWhlYWQ9ZnVuY3Rpb24ob3B0aW9uKXtyZXR1cm4gdGhpcy5lYWNoKGZ1
bmN0aW9uKCl7dmFyICR0aGlzPSQodGhpcyksZGF0YT0kdGhpcy5kYXRhKCJ0eXBlYWhlYWQiKSxv
cHRpb25zPSJvYmplY3QiPT10eXBlb2Ygb3B0aW9uJiZvcHRpb247ZGF0YXx8JHRoaXMuZGF0YSgi
dHlwZWFoZWFkIixkYXRhPW5ldyBUeXBlYWhlYWQodGhpcyxvcHRpb25zKSksInN0cmluZyI9PXR5
cGVvZiBvcHRpb24mJmRhdGFbb3B0aW9uXSgpfSl9LCQuZm4udHlwZWFoZWFkLmRlZmF1bHRzPXtz
b3VyY2U6W10saXRlbXM6OCxtZW51Oic8dWwgY2xhc3M9InR5cGVhaGVhZCBkcm9wZG93bi1tZW51
Ij48L3VsPicsaXRlbTonPGxpPjxhIGhyZWY9IiMiPjwvYT48L2xpPicsbWluTGVuZ3RoOjF9LCQu
Zm4udHlwZWFoZWFkLkNvbnN0cnVjdG9yPVR5cGVhaGVhZCwkLmZuLnR5cGVhaGVhZC5ub0NvbmZs
aWN0PWZ1bmN0aW9uKCl7cmV0dXJuICQuZm4udHlwZWFoZWFkPW9sZCx0aGlzfSwkKGRvY3VtZW50
KS5vbigiZm9jdXMudHlwZWFoZWFkLmRhdGEtYXBpIiwnW2RhdGEtcHJvdmlkZT0idHlwZWFoZWFk
Il0nLGZ1bmN0aW9uKGUpe3ZhciAkdGhpcz0kKHRoaXMpOyR0aGlzLmRhdGEoInR5cGVhaGVhZCIp
fHwoZS5wcmV2ZW50RGVmYXVsdCgpLCR0aGlzLnR5cGVhaGVhZCgkdGhpcy5kYXRhKCkpKX0pfSh3
aW5kb3cualF1ZXJ5KSwhZnVuY3Rpb24oJCl7InVzZSBzdHJpY3QiO3ZhciBBZmZpeD1mdW5jdGlv
bihlbGVtZW50LG9wdGlvbnMpe3RoaXMub3B0aW9ucz0kLmV4dGVuZCh7fSwkLmZuLmFmZml4LmRl
ZmF1bHRzLG9wdGlvbnMpLHRoaXMuJHdpbmRvdz0kKHdpbmRvdykub24oInNjcm9sbC5hZmZpeC5k
YXRhLWFwaSIsJC5wcm94eSh0aGlzLmNoZWNrUG9zaXRpb24sdGhpcykpLm9uKCJjbGljay5hZmZp
eC5kYXRhLWFwaSIsJC5wcm94eShmdW5jdGlvbigpe3NldFRpbWVvdXQoJC5wcm94eSh0aGlzLmNo
ZWNrUG9zaXRpb24sdGhpcyksMSl9LHRoaXMpKSx0aGlzLiRlbGVtZW50PSQoZWxlbWVudCksdGhp
cy5jaGVja1Bvc2l0aW9uKCl9O0FmZml4LnByb3RvdHlwZS5jaGVja1Bvc2l0aW9uPWZ1bmN0aW9u
KCl7aWYodGhpcy4kZWxlbWVudC5pcygiOnZpc2libGUiKSl7dmFyIGFmZml4LHNjcm9sbEhlaWdo
dD0kKGRvY3VtZW50KS5oZWlnaHQoKSxzY3JvbGxUb3A9dGhpcy4kd2luZG93LnNjcm9sbFRvcCgp
LHBvc2l0aW9uPXRoaXMuJGVsZW1lbnQub2Zmc2V0KCksb2Zmc2V0PXRoaXMub3B0aW9ucy5vZmZz
ZXQsb2Zmc2V0Qm90dG9tPW9mZnNldC5ib3R0b20sb2Zmc2V0VG9wPW9mZnNldC50b3AscmVzZXQ9
ImFmZml4IGFmZml4LXRvcCBhZmZpeC1ib3R0b20iOyJvYmplY3QiIT10eXBlb2Ygb2Zmc2V0JiYo
b2Zmc2V0Qm90dG9tPW9mZnNldFRvcD1vZmZzZXQpLCJmdW5jdGlvbiI9PXR5cGVvZiBvZmZzZXRU
b3AmJihvZmZzZXRUb3A9b2Zmc2V0LnRvcCgpKSwiZnVuY3Rpb24iPT10eXBlb2Ygb2Zmc2V0Qm90
dG9tJiYob2Zmc2V0Qm90dG9tPW9mZnNldC5ib3R0b20oKSksYWZmaXg9bnVsbCE9dGhpcy51bnBp
biYmc2Nyb2xsVG9wK3RoaXMudW5waW48PXBvc2l0aW9uLnRvcD8hMTpudWxsIT1vZmZzZXRCb3R0
b20mJnBvc2l0aW9uLnRvcCt0aGlzLiRlbGVtZW50LmhlaWdodCgpPj1zY3JvbGxIZWlnaHQtb2Zm
c2V0Qm90dG9tPyJib3R0b20iOm51bGwhPW9mZnNldFRvcCYmb2Zmc2V0VG9wPj1zY3JvbGxUb3A/
InRvcCI6ITEsdGhpcy5hZmZpeGVkIT09YWZmaXgmJih0aGlzLmFmZml4ZWQ9YWZmaXgsdGhpcy51
bnBpbj0iYm90dG9tIj09YWZmaXg/cG9zaXRpb24udG9wLXNjcm9sbFRvcDpudWxsLHRoaXMuJGVs
ZW1lbnQucmVtb3ZlQ2xhc3MocmVzZXQpLmFkZENsYXNzKCJhZmZpeCIrKGFmZml4PyItIithZmZp
eDoiIikpKX19O3ZhciBvbGQ9JC5mbi5hZmZpeDskLmZuLmFmZml4PWZ1bmN0aW9uKG9wdGlvbil7
cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciAkdGhpcz0kKHRoaXMpLGRhdGE9JHRoaXMu
ZGF0YSgiYWZmaXgiKSxvcHRpb25zPSJvYmplY3QiPT10eXBlb2Ygb3B0aW9uJiZvcHRpb247ZGF0
YXx8JHRoaXMuZGF0YSgiYWZmaXgiLGRhdGE9bmV3IEFmZml4KHRoaXMsb3B0aW9ucykpLCJzdHJp
bmciPT10eXBlb2Ygb3B0aW9uJiZkYXRhW29wdGlvbl0oKX0pfSwkLmZuLmFmZml4LkNvbnN0cnVj
dG9yPUFmZml4LCQuZm4uYWZmaXguZGVmYXVsdHM9e29mZnNldDowfSwkLmZuLmFmZml4Lm5vQ29u
ZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gJC5mbi5hZmZpeD1vbGQsdGhpc30sJCh3aW5kb3cpLm9u
KCJsb2FkIixmdW5jdGlvbigpeyQoJ1tkYXRhLXNweT0iYWZmaXgiXScpLmVhY2goZnVuY3Rpb24o
KXt2YXIgJHNweT0kKHRoaXMpLGRhdGE9JHNweS5kYXRhKCk7ZGF0YS5vZmZzZXQ9ZGF0YS5vZmZz
ZXR8fHt9LGRhdGEub2Zmc2V0Qm90dG9tJiYoZGF0YS5vZmZzZXQuYm90dG9tPWRhdGEub2Zmc2V0
Qm90dG9tKSxkYXRhLm9mZnNldFRvcCYmKGRhdGEub2Zmc2V0LnRvcD1kYXRhLm9mZnNldFRvcCks
JHNweS5hZmZpeChkYXRhKX0pfSl9KHdpbmRvdy5qUXVlcnkpOwpcIE5vIG5ld2xpbmUgYXQgZW5k
IG9mIGZpbGUKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMt
ZXhhbXBsZS1hcHAvY29tcG9uZW50cy9lczUtc2hpbS8uZ2l0aWdub3JlCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29t
cG9uZW50cy9lczUtc2hpbS8uZ2l0aWdub3JlCShyZXZpc2lvbiAwKQorKysgUGVyZm9ybWFuY2VU
ZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2VzNS1z
aGltLy5naXRpZ25vcmUJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyIEBACitub2RlX21vZHVs
ZXMKKy5EU19TdG9yZQpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGln
aHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2VzNS1zaGltL0NIQU5HRVMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9j
b21wb25lbnRzL2VzNS1zaGltL0NIQU5HRVMJKHJldmlzaW9uIDApCisrKyBQZXJmb3JtYW5jZVRl
c3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvZXM1LXNo
aW0vQ0hBTkdFUwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDkzIEBACisKKzIuMC4wCisgLSBT
ZXBhcmF0ZSByZWxpYWJsZSBzaGltcyBmcm9tIGR1YmlvdXMgc2hpbXMgKHNoYW1zKS4KKworMS4y
LjEwCisgLSBHcm91cC1lZmZvcnQgU3R5bGUgQ2xlYW51cAorIC0gVG9vayBhIHN0YWIgYXQgZml4
aW5nIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSBvbiBJRTggd2l0aG91dAorICAgYmFkIHNpZGUtZWZm
ZWN0cy4gKEBoYXgpCisgLSBPYmplY3QuaXNFeHRlbnNpYmxlIG5vIGxvbmdlciBmYWtlcyBpdC4g
KEB4YXZpZXJtKQorIC0gRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcgbm8gbG9uZ2VyIGRlYWxz
IHdpdGggcGFydGlhbAorICAgSVNPIGRhdGVzLCBwZXIgc3BlYyAoQGtpdGNhbWJyaWRnZSkKKyAt
IE1vcmUgKG1vc3RseSBmcm9tIEBicnlhbmZvcmJlcykKKworMS4yLjkKKyAtIENvcnJlY3Rpb25z
IHRvIHRvSVNPU3RyaW5nIGJ5IEBraXRjYW1icmlkZ2UKKyAtIEZpeGVkIHRocmVlIGJ1Z3MgaW4g
YXJyYXkgbWV0aG9kcyByZXZlYWxlZCBieSBKYXNtaW5lIHRlc3RzLgorIC0gQ2xlYW5lZCB1cCBG
dW5jdGlvbi5wcm90b3R5cGUuYmluZCB3aXRoIG1vcmUgZml4ZXMgYW5kIHRlc3RzIGZyb20KKyAg
IEBicnlhbmZvcmJlcy4KKworMS4yLjgKKyAtIEFjdHVhbGx5IGZpeGVkIHByb2JsZW1zIHdpdGgg
RnVuY3Rpb24ucHJvdG90eXBlLmJpbmQsIGFuZCByZWdyZXNzaW9ucworICAgZnJvbSAxLjIuNyAo
QGJyeWFuZm9yYmVzLCBAamRhbHRvbiAjMzYpCisKKzEuMi43IC0gUkVHUkVTU0VECisgLSBGaXhl
ZCBwcm9ibGVtcyB3aXRoIEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kIHdoZW4gY2FsbGVkIGFzIGEg
Y29uc3RydWN0b3IuCisgICAoQGpkYWx0b24gIzM2KQorCisxLjIuNgorIC0gUmV2aXNlZCBEYXRl
LnBhcnNlIHRvIG1hdGNoIEVTIDUuMSAoa2l0Y2FtYnJpZGdlKQorCisxLjIuNQorIC0gRml4ZWQg
YSBidWcgZm9yIHBhZGRpbmcgaXQgRGF0ZS4udG9JU09TdHJpbmcgKHRhZGZpc2hlciBpc3N1ZSAj
MzMpCisKKzEuMi40CisgLSBGaXhlZCBhIGRlc2NyaXB0b3IgYnVnIGluIE9iamVjdC5kZWZpbmVQ
cm9wZXJ0eSAocmF5bm9zKQorCisxLjIuMworIC0gQ2xlYW5lZCB1cCBSZXF1aXJlSlMgYW5kIDxz
Y3JpcHQ+IGJvaWxlcnBsYXRlCisKKzEuMi4yCisgLSBDaGFuZ2VkIHJlZHVjZSB0byBmb2xsb3cg
dGhlIGxldHRlciBvZiB0aGUgc3BlYyB3aXRoIHJlZ2FyZCB0byBoYXZpbmcgYW5kCisgICBvd25p
bmcgcHJvcGVydGllcy4KKyAtIEZpeGVkIGEgYnVnIHdoZXJlIFJlZ0V4cHMgcGFzcyBhcyBGdW5j
dGlvbnMgaW4gc29tZSBlbmdpbmVzIGluIHJlZHVjZS4KKworMS4yLjEKKyAtIEFkZGluZyBmZXcg
Zml4ZXMgdG8gbWFrZSBqc2hpbnQgaGFwcHkuCisgLSBGaXggZm9yIGlzc3VlICMxMiwgZnVuY3Rp
b24gZXhwcmVzc2lvbnMgY2FuIGNhdXNlIHNjb3BpbmcgaXNzdWVzIGluIElFLgorIC0gTlBNIHdp
bGwgbWluaWZ5IG9uIGluc3RhbGwgb3Igd2hlbiBgbnBtIHJ1bi1zY3JpcHQgaW5zdGFsbGAgaXMg
ZXhlY3V0ZWQuCisgLSBBZGRpbmcgLmdpdGlnbm9yZSB0byBhdm9pZCBwdWJsaXNoaW5nIGRldiBk
ZXBlbmRlbmNpZXMuCisKKzEuMi4wCisgLSBNYWtpbmcgc2NyaXB0IGxvYWRhYmxlIGFzIEFNRCBt
b2R1bGUuCisgLSBBZGRpbmcgYGluZGV4T2ZgIHRvIHRoZSBsaXN0IG9mIHNhZmUgc2hpbXMuCisK
KzEuMS4wCisgLSBBZGRlZCBzdXBwb3J0IGZvciBhY2Nlc3NvciBwcm9wZXJ0aWVzIHdoZXJlIHBv
c3NpYmxlICh3aGljaCBpcyBhbGwgYnJvd3NlcnMKKyAgIGV4Y2VwdCBJRSkuCisgLSBTdG9wIGV4
cG9zaW5nIGJvdW5kIGZ1bmN0aW9uJ3MgKHRoYXQgYXJlIHJldHVybmVkIGJ5CisgICBgRnVuY3Rp
b24ucHJvdG90eXBlLmJpbmRgKSBpbnRlcm5hbCBwcm9wZXJ0aWVzIChgYm91bmQsIGJvdW5kVG8s
IGJvdW5kQXJnc2ApCisgICBhcyBpbiBzb21lIGNhc2VzICh3aGVuIHVzaW5nIGZhY2FkZSBvYmpl
Y3RzIGZvciBleGFtcGxlKSBjYXBhYmlsaXRpZXMgb2YgdGhlCisgICBlbmNsb3NlZCBmdW5jdGlv
bnMgd2lsbCBiZSBsZWFrZWQuCisgLSBgT2JqZWN0LmNyZWF0ZWAgbm93IGV4cGxpY2l0bHkgc2V0
cyBgX19wcm90b19fYCBwcm9wZXJ0eSB0byBndWFyYW50ZWUKKyAgIGNvcnJlY3QgYmVoYXZpb3Ig
b2YgYE9iamVjdC5nZXRQcm90b3R5cGVPZmAncyBvbiBhbGwgb2JqZWN0cyBjcmVhdGVkIHVzaW5n
CisgICBgT2JqZWN0LmNyZWF0ZWAuCisgLSBTd2l0Y2hlZCB0byBgPT09YCBmcm9tIGA9PWAgd2hl
cmUgcG9zc2libGUgYXMgaXQncyBzbGlnaHRseSBmYXN0ZXIgb24gb2xkZXIKKyAgIGJyb3dzZXJz
IHRoYXQgYXJlIHRhcmdldCBvZiB0aGlzIGxpYi4KKyAtIEFkZGVkIG5hbWVzIHRvIGFsbCBhbm9u
eW1vdXMgZnVuY3Rpb25zIHRvIGhhdmUgYSBiZXR0ZXIgc3RhY2sgdHJhY2VzLgorCisxLjAuMAor
IC0gZml4ZWQgRGF0ZS50b0lTT0RhdGUsIHVzaW5nIFVUQyBhY2Nlc3NvcnMsIGFzIGluCisgICBo
dHRwOi8vY29kZS5nb29nbGUuY29tL3Avdjgvc291cmNlL2Jyb3dzZS90cnVuay9zcmMvZGF0ZS5q
cz9yPTYxMjAjOTg2CisgICAoYXJpYW4pCisKKzAuMC40CisgLSBSZXZpc2VkIE9iamVjdC5nZXRQ
cm90b3R5cGVPZiB0byB3b3JrIGluIG1vcmUgY2FzZXMKKyAgIGluIHJlc3BvbnNlIHRvIGh0dHA6
Ly9lam9obi5vcmcvYmxvZy9vYmplY3RnZXRwcm90b3R5cGVvZi8KKyAgIFtpc3N1ZSAjMl0gKGZz
Y2hhZWZlcikKKworMC4wLjMKKyAtIEZpeGVkIHR5cG9zIGluIE9iamVjdC5rZXlzIChzYW1zb25q
cykKKworMC4wLjIKKyAgIFBlciBrYW5nYXgncyByZWNvbW1lbmRhdGlvbnM6CisgLSBmYXN0ZXIg
T2JqZWN0LmNyZWF0ZShudWxsKQorIC0gZml4ZWQgYSBmdW5jdGlvbi1zY29wZSBmdW5jdGlvbiBk
ZWNsYXJhdGlvbiBzdGF0ZW1lbnQgaW4gT2JqZWN0LmNyZWF0ZQorCiswLjAuMQorIC0gZml4ZWQg
T2JqZWN0LmNyZWF0ZShudWxsKSwgaW4gc28gZmFyIGFzIHRoYXQncyBwb3NzaWJsZQorIC0gcmV3
b3JrZWQgUmhpbm8gT2JqZWN0LmZyZWV6ZShGdW5jdGlvbikgYnVnIGRldGVjdG9yIGFuZCBwYXRj
aGVyCisKKzAuMC4wCisgLSBmb3JrZWQgZnJvbSBuYXJ3aGFsLWxpYgorCkluZGV4OiBQZXJmb3Jt
YW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMv
ZXM1LXNoaW0vQ09OVFJJQlVUT1JTLm1kCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMv
RG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9lczUtc2hpbS9D
T05UUklCVVRPUlMubWQJKHJldmlzaW9uIDApCisrKyBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZl
bkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvZXM1LXNoaW0vQ09OVFJJQlVU
T1JTLm1kCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjUgQEAKKworLSAgIGtyaXNrb3dhbCBL
cmlzIEtvd2FsIENvcHlyaWdodCAoQykgMjAwOS0yMDExIE1JVCBMaWNlbnNlCistICAgdGxyb2Jp
bnNvbiBUb20gUm9iaW5zb24gQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgTUlUIExpY2Vuc2UgKE5h
cndoYWwKKyAgICBQcm9qZWN0KQorLSAgIGRhbnRtYW4gRGFuaWVsIEZyaWVzZW4gQ29weXJpZ2h0
IChDKSAyMDEwIFhYWCBUT0RPIExpY2Vuc2Ugb3IgQ0xBCistICAgZnNjaGFlZmVyIEZsb3JpYW4g
U2Now6RmZXIgQ29weXJpZ2h0IChDKSAyMDEwIE1JVCBMaWNlbnNlCistICAgR296YWxhIElyYWts
aSBHb3phbGlzaHZpbGkgQ29weXJpZ2h0IChDKSAyMDEwIE1JVCBMaWNlbnNlCistICAga2l0Y2Ft
YnJpZGdlIEtpdCBDYW1icmlkZ2UgQ29weXJpZ2h0IChDKSAyMDExIE1JVCBMaWNlbnNlCistICAg
a29zc25vY29ycCBTYXNoYSBLb3NzIFhYWCBUT0RPIExpY2Vuc2Ugb3IgQ0xBCistICAgYnJ5YW5m
b3JiZXMgQnJ5YW4gRm9yYmVzIFhYWCBUT0RPIExpY2Vuc2Ugb3IgQ0xBCistICAga2lsbGRyZWFt
IFF1aWxkcmVlbiBNb3R0YSBDb3B5cmlnaHQgKEMpIDIwMTEgTUlUIExpY2VuY2UKKy0gICBtaWNo
YWVsZmljYXJyYSBNaWNoYWVsIEZpY2FycmEgQ29weXJpZ2h0IChDKSAyMDExIDMtY2xhdXNlIEJT
RAorICAgIExpY2Vuc2UKKy0gICBzaGFya2JyYWluZ3V5IEdlcmFyZCBQYWFwdSBDb3B5cmlnaHQg
KEMpIDIwMTEgTUlUIExpY2Vuc2UKKy0gICBiYnFzcmMgQnJlbmRhbiBNb2xsb3kgKEMpIDIwMTEg
Q3JlYXRpdmUgQ29tbW9ucyBaZXJvIChwdWJsaWMgZG9tYWluKQorLSAgIGl3eWcgWFhYIFRPRE8g
TGljZW5zZSBvciBDTEEKKy0gICBEb21lbmljRGVuaWNvbGEgRG9tZW5pYyBEZW5pY29sYSBDb3B5
cmlnaHQgKEMpIDIwMTEgTUlUIExpY2Vuc2UKKy0gICB4YXZpZXJtMDIgTW9udGlsbGV0IFhhdmll
ciBDb3B5cmlnaHQgKEMpIDIwMTEgTUlUIExpY2Vuc2UKKy0gICBSYXlub3MgSmFrZSBWZXJiYXRl
biBDb3B5cmlnaHQgKEMpIDIwMTEgTUlUIExpY2VuY2UKKy0gICBzYW1zb25qcyBTYW1pIFNhbWh1
cmkgQ29weXJpZ2h0IChDKSAyMDEwIE1JVCBMaWNlbnNlCistICAgcndsZHJuIFJpY2sgV2FsZHJv
biBDb3B5cmlnaHQgKEMpIDIwMTEgTUlUIExpY2Vuc2UKKy0gICBsZXhlciBBbGV4ZXkgWmFraGFy
b3YgWFhYIFRPRE8gTGljZW5zZSBvciBDTEEKKy0gICAyODAgTm9ydGggSW5jLiAoTm93IE1vdG9y
b2xhIExMQywgYSBzdWJzaWRpYXJ5IG9mIEdvb2dsZSBJbmMuKQorICAgIENvcHlyaWdodCAoQykg
MjAwOSBNSVQgTGljZW5zZQorCkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNo
L2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvZXM1LXNoaW0vTElDRU5TRQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUt
YXBwL2NvbXBvbmVudHMvZXM1LXNoaW0vTElDRU5TRQkocmV2aXNpb24gMCkKKysrIFBlcmZvcm1h
bmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9l
czUtc2hpbS9MSUNFTlNFCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTkgQEAKKworQ29weXJp
Z2h0IDIwMDksIDIwMTAgS3Jpc3RvcGhlciBNaWNoYWVsIEtvd2FsLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFu
eSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRl
ZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvCitkZWFsIGluIHRoZSBT
b2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9u
IHRoZQorcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJp
YnV0ZSwgc3VibGljZW5zZSwgYW5kL29yCitzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFu
ZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworZnVybmlzaGVkIHRv
IGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworVGhlIGFib3Zl
IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5j
bHVkZWQgaW4KK2FsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3
YXJlLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5U
WSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElN
SVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCitGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUKK0FVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xB
SU0sIERBTUFHRVMgT1IgT1RIRVIKK0xJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0Yg
Q09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCitGUk9NLCBPVVQgT0YgT1IgSU4g
Q09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdT
CitJTiBUSEUgU09GVFdBUkUuCkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNo
L2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvZXM1LXNoaW0vUkVBRE1FLm1kCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBs
ZS1hcHAvY29tcG9uZW50cy9lczUtc2hpbS9SRUFETUUubWQJKHJldmlzaW9uIDApCisrKyBQZXJm
b3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVu
dHMvZXM1LXNoaW0vUkVBRE1FLm1kCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTYxIEBACisK
K2BlczUtc2hpbS5qc2AgYW5kIGBlczUtc2hpbS5taW4uanNgIG1vbmtleS1wYXRjaCBhIEphdmFT
Y3JpcHQgY29udGV4dCB0bworY29udGFpbiBhbGwgRWNtYVNjcmlwdCA1IG1ldGhvZHMgdGhhdCBj
YW4gYmUgZmFpdGhmdWxseSBlbXVsYXRlZCB3aXRoIGEKK2xlZ2FjeSBKYXZhU2NyaXB0IGVuZ2lu
ZS4KKworYGVzNS1zaGFtLmpzYCBhbmQgYGVzNS1zaGFtLm1pbi5qc2AgbW9ua2V5LXBhdGNoIG90
aGVyIEVTNSBtZXRob2RzIGFzCitjbG9zZWx5IGFzIHBvc3NpYmxlLiAgRm9yIHRoZXNlIG1ldGhv
ZHMsIGFzIGNsb3NlbHkgYXMgcG9zc2libGUgdG8gRVM1CitpcyBub3QgdmVyeSBjbG9zZS4gIE1h
bnkgb2YgdGhlc2Ugc2hhbXMgYXJlIGludGVuZGVkIG9ubHkgdG8gYWxsb3cgY29kZQordG8gYmUg
d3JpdHRlbiB0byBFUzUgd2l0aG91dCBjYXVzaW5nIHJ1bi10aW1lIGVycm9ycyBpbiBvbGRlciBl
bmdpbmVzLgorSW4gbWFueSBjYXNlcywgdGhpcyBtZWFucyB0aGF0IHRoZXNlIHNoYW1zIGNhdXNl
IG1hbnkgRVM1IG1ldGhvZHMgdG8KK3NpbGVudGx5IGZhaWwuICBEZWNpZGUgY2FyZWZ1bGx5IHdo
ZXRoZXIgdGhpcyBpcyB3aGF0IHlvdSB3YW50LgorCisKKyMjIFRlc3RzCisKK1RoZSB0ZXN0cyBh
cmUgd3JpdHRlbiB3aXRoIHRoZSBKYXNtaW5lIEJERCB0ZXN0IGZyYW1ld29yay4KK1RvIHJ1biB0
aGUgdGVzdHMsIG5hdmlnYXRlIHRvIDxyb290LWZvbGRlcj4vdGVzdHMvLiAKKworSW4gb3JkZXIg
dG8gcnVuIGFnYWluc3QgdGhlIHNoaW0tY29kZSwgdGhlIHRlc3RzIGF0dGVtcHQgdG8ga2lsbCB0
aGUgY3VycmVudCAKK2ltcGxlbWVudGF0aW9uIG9mIHRoZSBtaXNzaW5nIG1ldGhvZHMuIFRoaXMg
aGFwcGVucyBpbiA8cm9vdC1mb2xkZXI+L3Rlc3RzL2hlbHBlcnMvaC1raWxsLmpzLgorU28gaW4g
b3JkZXIgdG8gcnVuIHRoZSB0ZXN0cyBhZ2FpbnN0IHRoZSBidWlsZC1pbiBtZXRob2RzLCBpbnZh
bGlkYXRlIHRoYXQgZmlsZSBzb21laG93CisoY29tbWVudC1vdXQsIGRlbGV0ZSB0aGUgZmlsZSwg
ZGVsZXRlIHRoZSBzY3JpcHQtdGFnLCBldGMuKS4KKworIyMgU2hpbXMKKworIyMjIENvbXBsZXRl
IHRlc3RzICMjIworCisqIEFycmF5LnByb3RvdHlwZS5ldmVyeQorKiBBcnJheS5wcm90b3R5cGUu
ZmlsdGVyCisqIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoCisqIEFycmF5LnByb3RvdHlwZS5pbmRl
eE9mCisqIEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZgorKiBBcnJheS5wcm90b3R5cGUubWFw
CisqIEFycmF5LnByb3RvdHlwZS5zb21lCisqIEFycmF5LnByb3RvdHlwZS5yZWR1Y2UKKyogQXJy
YXkucHJvdG90eXBlLnJlZHVjZVJpZ2h0CisqIEFycmF5LmlzQXJyYXkKKyogRGF0ZS5ub3cKKyog
RGF0ZS5wcm90b3R5cGUudG9KU09OCisqIEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kCisgICAgKiAv
IVwgQ2F2ZWF0OiB0aGUgYm91bmQgZnVuY3Rpb24ncyBsZW5ndGggaXMgYWx3YXlzIDAuCisgICAg
KiAvIVwgQ2F2ZWF0OiB0aGUgYm91bmQgZnVuY3Rpb24gaGFzIGEgcHJvdG90eXBlIHByb3BlcnR5
LgorICAgICogLyFcIENhdmVhdDogYm91bmQgZnVuY3Rpb25zIGRvIG5vdCB0cnkgdG9vIGhhcmQg
dG8ga2VlcCB5b3UKKyAgICAgIGZyb20gbWFuaXB1bGF0aW5nIHRoZWlyIGBgYXJndW1lbnRzYGAg
YW5kIGBgY2FsbGVyYGAgcHJvcGVydGllcy4KKyAgICAqIC8hXCBDYXZlYXQ6IGJvdW5kIGZ1bmN0
aW9ucyBkb24ndCBoYXZlIGNoZWNrcyBpbiBgYGNhbGxgYCBhbmQKKyAgICAgIGBgYXBwbHlgYCB0
byBhdm9pZCBleGVjdXRpbmcgYXMgYSBjb25zdHJ1Y3Rvci4KKyogT2JqZWN0LmtleXMKKyogU3Ry
aW5nLnByb3RvdHlwZS50cmltCisKKyMjIyBVbnRlc3RlZCAjIyMKKworKiBEYXRlLnBhcnNlIChm
b3IgSVNPIHBhcnNpbmcpCisqIERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nCisKKyMjIFNoYW1z
CisKKyogLz9cIE9iamVjdC5jcmVhdGUKKworICAgIEZvciB0aGUgY2FzZSBvZiBzaW1wbHkgImJl
Z2V0dGluZyIgYW4gb2JqZWN0IHRoYXQKKyAgICBpbmhlcml0cyBwcm90b3R5cGljYWxseSBmcm9t
IGFub3RoZXIsIHRoaXMgc2hvdWxkIHdvcmsKKyAgICBmaW5lIGFjcm9zcyBsZWdhY3kgZW5naW5l
cy4KKworICAgIC8hXCBPYmplY3QuY3JlYXRlKG51bGwpIHdpbGwgd29yayBvbmx5IGluIGJyb3dz
ZXJzIHRoYXQKKyAgICBzdXBwb3J0IHByb3RvdHlwZSBhc3NpZ25tZW50LiAgVGhpcyBjcmVhdGVz
IGFuIG9iamVjdAorICAgIHRoYXQgZG9lcyBub3QgaGF2ZSBhbnkgcHJvcGVydGllcyBpbmhlcml0
ZWQgZnJvbQorICAgIE9iamVjdC5wcm90b3R5cGUuICBJdCB3aWxsIHNpbGVudGx5IGZhaWwgb3Ro
ZXJ3aXNlLgorCisgICAgLyFcIFRoZSBzZWNvbmQgYXJndW1lbnQgaXMgcGFzc2VkIHRvCisgICAg
T2JqZWN0LmRlZmluZVByb3BlcnRpZXMgd2hpY2ggd2lsbCBwcm9iYWJseSBmYWlsCisgICAgc2ls
ZW50bHkuCisKKyogLz9cIE9iamVjdC5nZXRQcm90b3R5cGVPZgorCisgICAgVGhpcyB3aWxsIHJl
dHVybiAidW5kZWZpbmVkIiBpbiBzb21lIGNhc2VzLiAgSXQgdXNlcworICAgIF9fcHJvdG9fXyBp
ZiBpdCdzIGF2YWlsYWJsZS4gIEZhaWxpbmcgdGhhdCwgaXQgdXNlcworICAgIGNvbnN0cnVjdG9y
LnByb3RvdHlwZSwgd2hpY2ggZGVwZW5kcyBvbiB0aGUgY29uc3RydWN0b3IKKyAgICBwcm9wZXJ0
eSBvZiB0aGUgb2JqZWN0J3MgcHJvdG90eXBlIGhhdmluZyBub3QgYmVlbgorICAgIHJlcGxhY2Vk
LiAgSWYgeW91ciBvYmplY3Qgd2FzIGNyZWF0ZWQgbGlrZSB0aGlzLCBpdAorICAgIHdvbid0IHdv
cms6CisKKyAgICAgICAgZnVuY3Rpb24gRm9vKCkgeworICAgICAgICB9CisgICAgICAgIEZvby5w
cm90b3R5cGUgPSB7fTsKKworICAgIEJlY2F1c2UgdGhlIHByb3RvdHlwZSByZWFzc2lnbm1lbnQg
ZGVzdHJveXMgdGhlCisgICAgY29uc3RydWN0b3IgcHJvcGVydHkuCisKKyAgICBUaGlzIHdpbGwg
d29yayBmb3IgYWxsIG9iamVjdHMgdGhhdCB3ZXJlIGNyZWF0ZWQgdXNpbmcKKyAgICBgT2JqZWN0
LmNyZWF0ZWAgaW1wbGVtZW50ZWQgd2l0aCB0aGlzIGxpYnJhcnkuCisKKyogLyFcIE9iamVjdC5n
ZXRPd25Qcm9wZXJ0eU5hbWVzCisKKyAgICBUaGlzIG1ldGhvZCB1c2VzIE9iamVjdC5rZXlzLCBz
byBpdCB3aWxsIG5vdCBiZSBhY2N1cmF0ZQorICAgIG9uIGxlZ2FjeSBlbmdpbmVzLgorCisqIE9i
amVjdC5pc1NlYWxlZAorCisgICAgUmV0dXJucyAiZmFsc2UiIGluIGFsbCBsZWdhY3kgZW5naW5l
cyBmb3IgYWxsIG9iamVjdHMsCisgICAgd2hpY2ggaXMgY29udmVuaWVudGx5IGd1YXJhbnRlZWQg
dG8gYmUgYWNjdXJhdGUuCisKKyogT2JqZWN0LmlzRnJvemVuCisKKyAgICBSZXR1cm5zICJmYWxz
ZSIgaW4gYWxsIGxlZ2FjeSBlbmdpbmVzIGZvciBhbGwgb2JqZWN0cywKKyAgICB3aGljaCBpcyBj
b252ZW5pZW50bHkgZ3VhcmFudGVlZCB0byBiZSBhY2N1cmF0ZS4KKworKiBPYmplY3QuaXNFeHRl
bnNpYmxlCisKKyAgICBXb3JrcyBsaWtlIGEgY2hhcm0sIGJ5IHRyeWluZyB2ZXJ5IGhhcmQgdG8g
ZXh0ZW5kIHRoZQorICAgIG9iamVjdCB0aGVuIHJlZGFjdGluZyB0aGUgZXh0ZW5zaW9uLgorCisj
IyMgRmFpbCBzaWxlbnRseQorCisqIC8hXCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
CisgICAgCisgICAgVGhlIGJlaGF2aW9yIG9mIHRoaXMgc2hpbSBkb2VzIG5vdCBjb25mb3JtIHRv
IEVTNS4gIEl0CisgICAgc2hvdWxkIHByb2JhYmx5IG5vdCBiZSB1c2VkIGF0IHRoaXMgdGltZSwg
dW50aWwgaXRzCisgICAgYmVoYXZpb3IgaGFzIGJlZW4gcmV2aWV3ZWQgYW5kIGJlZW4gY29uZmly
bWVkIHRvIGJlCisgICAgdXNlZnVsIGluIGxlZ2FjeSBlbmdpbmVzLgorCisqIC8hXCBPYmplY3Qu
ZGVmaW5lUHJvcGVydHkKKworICAgIFRoaXMgbWV0aG9kIHdpbGwgc2lsZW50bHkgZmFpbCB0byBz
ZXQgIndyaXRhYmxlIiwKKyAgICAiZW51bWVyYWJsZSIsIGFuZCAiY29uZmlndXJhYmxlIiBwcm9w
ZXJ0aWVzLgorICAgIAorICAgIFByb3ZpZGluZyBhIGdldHRlciBvciBzZXR0ZXIgd2l0aCAiZ2V0
IiBvciAic2V0IiBvbiBhCisgICAgZGVzY3JpcHRvciB3aWxsIHNpbGVudGx5IGZhaWwgb24gZW5n
aW5lcyB0aGF0IGxhY2sKKyAgICAiX19kZWZpbmVHZXR0ZXJfXyIgYW5kICJfX2RlZmluZVNldHRl
cl9fIiwgd2hpY2ggaW5jbHVkZQorICAgIGFsbCB2ZXJzaW9ucyBvZiBJRSB1cCB0byB2ZXJzaW9u
IDggc28gZmFyLgorCisgICAgSUUgOCBwcm92aWRlcyBhIHZlcnNpb24gb2YgdGhpcyBtZXRob2Qg
YnV0IGl0IG9ubHkgd29ya3MKKyAgICBvbiBET00gb2JqZWN0cy4gIFRodXMsIHRoZSBzaGltIHdp
bGwgbm90IGdldCBpbnN0YWxsZWQKKyAgICBhbmQgYXR0ZW1wdHMgdG8gc2V0ICJ2YWx1ZSIgcHJv
cGVydGllcyB3aWxsIGZhaWwKKyAgICBzaWxlbnRseSBvbiBub24tRE9NIG9iamVjdHMuCisKKyAg
ICBodHRwczovL2dpdGh1Yi5jb20va3Jpc2tvd2FsL2VzNS1zaGltL2lzc3VlcyNpc3N1ZS81CisK
KyogLyFcIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzCisKKyAgICBUaGlzIHVzZXMgdGhlIE9iamVj
dC5kZWZpbmVQcm9wZXJ0eSBzaGltCisKKyogT2JqZWN0LnNlYWwKKworICAgIFNpbGVudGx5IGZh
aWxzIG9uIGFsbCBsZWdhY3kgZW5naW5lcy4gIFRoaXMgc2hvdWxkIGJlCisgICAgZmluZSB1bmxl
c3MgeW91IGFyZSBkZXBlbmRpbmcgb24gdGhlIHNhZmV0eSBhbmQgc2VjdXJpdHkKKyAgICBwcm92
aXNpb25zIG9mIHRoaXMgbWV0aG9kLCB3aGljaCB5b3UgY2Fubm90IHBvc3NpYmx5CisgICAgb2J0
YWluIGluIGxlZ2FjeSBlbmdpbmVzLgorCisqIE9iamVjdC5mcmVlemUKKworICAgIFNpbGVudGx5
IGZhaWxzIG9uIGFsbCBsZWdhY3kgZW5naW5lcy4gIFRoaXMgc2hvdWxkIGJlCisgICAgZmluZSB1
bmxlc3MgeW91IGFyZSBkZXBlbmRpbmcgb24gdGhlIHNhZmV0eSBhbmQgc2VjdXJpdHkKKyAgICBw
cm92aXNpb25zIG9mIHRoaXMgbWV0aG9kLCB3aGljaCB5b3UgY2Fubm90IHBvc3NpYmx5CisgICAg
b2J0YWluIGluIGxlZ2FjeSBlbmdpbmVzLgorCisqIE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucwor
CisgICAgU2lsZW50bHkgZmFpbHMgb24gYWxsIGxlZ2FjeSBlbmdpbmVzLiAgVGhpcyBzaG91bGQg
YmUKKyAgICBmaW5lIHVubGVzcyB5b3UgYXJlIGRlcGVuZGluZyBvbiB0aGUgc2FmZXR5IGFuZCBz
ZWN1cml0eQorICAgIHByb3Zpc2lvbnMgb2YgdGhpcyBtZXRob2QsIHdoaWNoIHlvdSBjYW5ub3Qg
cG9zc2libHkKKyAgICBvYnRhaW4gaW4gbGVnYWN5IGVuZ2luZXMuCisKSW5kZXg6IFBlcmZvcm1h
bmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9l
czUtc2hpbS9jb21wb25lbnQuanNvbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0Rv
WW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvZXM1LXNoaW0vY29t
cG9uZW50Lmpzb24JKHJldmlzaW9uIDApCisrKyBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJl
bmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvZXM1LXNoaW0vY29tcG9uZW50Lmpz
b24JKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NCBAQAoreworICAibmFtZSI6ICJlczUtc2hp
bSIsCisgICJ2ZXJzaW9uIjogIjIuMC4wIiwKKyAgImRlc2NyaXB0aW9uIjogIkVTNSBhcyBpbXBs
ZW1lbnRhYmxlIG9uIHByZXZpb3VzIGVuZ2luZXMiLAorICAiaG9tZXBhZ2UiOiAiaHR0cDovL2dp
dGh1Yi5jb20va3Jpc2tvd2FsL2VzNS1zaGltLyIsCisgICJjb250cmlidXRvcnMiOiBbCisgICAg
eworICAgICAgIm5hbWUiOiAiS3JpcyBLb3dhbCIsCisgICAgICAiZW1haWwiOiAia3Jpc0BjaXhh
ci5jb20iLAorICAgICAgInVybCI6ICJodHRwOi8vZ2l0aHViLmNvbS9rcmlza293YWwvIgorICAg
IH0sCisgICAgeworICAgICAgIm5hbWUiOiAiU2FtaSBTYW1odXJpIiwKKyAgICAgICJlbWFpbCI6
ICJzYW1pLnNhbWh1cmlAZ21haWwuY29tIiwKKyAgICAgICJ1cmwiOiAiaHR0cDovL3NhbWh1cmku
bmV0LyIKKyAgICB9LAorICAgIHsKKyAgICAgICJuYW1lIjogIkZsb3JpYW4gU2Now6RmZXIiLAor
ICAgICAgImVtYWlsIjogImZsb3JpYW4uc2NoYWVmZXJAZ21haWwuY29tIiwKKyAgICAgICJ1cmwi
OiAiaHR0cDovL2dpdGh1Yi5jb20vZnNjaGFlZmVyIgorICAgIH0sCisgICAgeworICAgICAgIm5h
bWUiOiAiSXJha2xpIEdvemFsaXNodmlsaSIsCisgICAgICAiZW1haWwiOiAicmZvYmljQGdtYWls
LmNvbSIsCisgICAgICAidXJsIjogImh0dHA6Ly9qZWRpdG9vbGtpdC5jb20iCisgICAgfSwKKyAg
ICB7CisgICAgICAibmFtZSI6ICJLaXQgQ2FtYnJpZGdlIiwKKyAgICAgICJlbWFpbCI6ICJraXRj
YW1icmlkZ2VAZ21haWwuY29tIiwKKyAgICAgICJ1cmwiOiAiaHR0cDovL2tpdGNhbWJyaWRnZS5n
aXRodWIuY29tIgorICAgIH0KKyAgXSwKKyAgImJ1Z3MiOiB7CisgICAgIm1haWwiOiAia3Jpc0Bj
aXhhci5jb20iLAorICAgICJ1cmwiOiAiaHR0cDovL2dpdGh1Yi5jb20va3Jpc2tvd2FsL2VzNS1z
aGltL2lzc3VlcyIKKyAgfSwKKyAgImxpY2Vuc2VzIjogWworICAgIHsKKyAgICAgICJ0eXBlIjog
Ik1JVCIsCisgICAgICAidXJsIjogImh0dHA6Ly9naXRodWIuY29tL2tyaXNrb3dhbC9lczUtc2hp
bS9yYXcvbWFzdGVyL0xJQ0VOU0UiCisgICAgfQorICBdLAorICAibWFpbiI6ICJlczUtc2hpbS5q
cyIsCisgICJyZXBvc2l0b3J5IjogeworICAgICJ0eXBlIjogImdpdCIsCisgICAgInVybCI6ICJn
aXQ6Ly9naXRodWIuY29tL2tyaXNrb3dhbC9lczUtc2hpbS5naXQiCisgIH0sCisgICJlbmdpbmVz
IjogeworICAgICJub2RlIjogIj49MC4yLjAiCisgIH0sCisgICJyZWFkbWUiOiAiXG5gZXM1LXNo
aW0uanNgIGFuZCBgZXM1LXNoaW0ubWluLmpzYCBtb25rZXktcGF0Y2ggYSBKYXZhU2NyaXB0IGNv
bnRleHQgdG9cbmNvbnRhaW4gYWxsIEVjbWFTY3JpcHQgNSBtZXRob2RzIHRoYXQgY2FuIGJlIGZh
aXRoZnVsbHkgZW11bGF0ZWQgd2l0aCBhXG5sZWdhY3kgSmF2YVNjcmlwdCBlbmdpbmUuXG5cbmBl
czUtc2hhbS5qc2AgYW5kIGBlczUtc2hhbS5taW4uanNgIG1vbmtleS1wYXRjaCBvdGhlciBFUzUg
bWV0aG9kcyBhc1xuY2xvc2VseSBhcyBwb3NzaWJsZS4gIEZvciB0aGVzZSBtZXRob2RzLCBhcyBj
bG9zZWx5IGFzIHBvc3NpYmxlIHRvIEVTNVxuaXMgbm90IHZlcnkgY2xvc2UuICBNYW55IG9mIHRo
ZXNlIHNoYW1zIGFyZSBpbnRlbmRlZCBvbmx5IHRvIGFsbG93IGNvZGVcbnRvIGJlIHdyaXR0ZW4g
dG8gRVM1IHdpdGhvdXQgY2F1c2luZyBydW4tdGltZSBlcnJvcnMgaW4gb2xkZXIgZW5naW5lcy5c
bkluIG1hbnkgY2FzZXMsIHRoaXMgbWVhbnMgdGhhdCB0aGVzZSBzaGFtcyBjYXVzZSBtYW55IEVT
NSBtZXRob2RzIHRvXG5zaWxlbnRseSBmYWlsLiAgRGVjaWRlIGNhcmVmdWxseSB3aGV0aGVyIHRo
aXMgaXMgd2hhdCB5b3Ugd2FudC5cblxuXG4jIyBUZXN0c1xuXG5UaGUgdGVzdHMgYXJlIHdyaXR0
ZW4gd2l0aCB0aGUgSmFzbWluZSBCREQgdGVzdCBmcmFtZXdvcmsuXG5UbyBydW4gdGhlIHRlc3Rz
LCBuYXZpZ2F0ZSB0byA8cm9vdC1mb2xkZXI+L3Rlc3RzLy4gXG5cbkluIG9yZGVyIHRvIHJ1biBh
Z2FpbnN0IHRoZSBzaGltLWNvZGUsIHRoZSB0ZXN0cyBhdHRlbXB0IHRvIGtpbGwgdGhlIGN1cnJl
bnQgXG5pbXBsZW1lbnRhdGlvbiBvZiB0aGUgbWlzc2luZyBtZXRob2RzLiBUaGlzIGhhcHBlbnMg
aW4gPHJvb3QtZm9sZGVyPi90ZXN0cy9oZWxwZXJzL2gta2lsbC5qcy5cblNvIGluIG9yZGVyIHRv
IHJ1biB0aGUgdGVzdHMgYWdhaW5zdCB0aGUgYnVpbGQtaW4gbWV0aG9kcywgaW52YWxpZGF0ZSB0
aGF0IGZpbGUgc29tZWhvd1xuKGNvbW1lbnQtb3V0LCBkZWxldGUgdGhlIGZpbGUsIGRlbGV0ZSB0
aGUgc2NyaXB0LXRhZywgZXRjLikuXG5cbiMjIFNoaW1zXG5cbiMjIyBDb21wbGV0ZSB0ZXN0cyAj
IyNcblxuKiBBcnJheS5wcm90b3R5cGUuZXZlcnlcbiogQXJyYXkucHJvdG90eXBlLmZpbHRlclxu
KiBBcnJheS5wcm90b3R5cGUuZm9yRWFjaFxuKiBBcnJheS5wcm90b3R5cGUuaW5kZXhPZlxuKiBB
cnJheS5wcm90b3R5cGUubGFzdEluZGV4T2ZcbiogQXJyYXkucHJvdG90eXBlLm1hcFxuKiBBcnJh
eS5wcm90b3R5cGUuc29tZVxuKiBBcnJheS5wcm90b3R5cGUucmVkdWNlXG4qIEFycmF5LnByb3Rv
dHlwZS5yZWR1Y2VSaWdodFxuKiBBcnJheS5pc0FycmF5XG4qIERhdGUubm93XG4qIERhdGUucHJv
dG90eXBlLnRvSlNPTlxuKiBGdW5jdGlvbi5wcm90b3R5cGUuYmluZFxuICAgICogLyFcXCBDYXZl
YXQ6IHRoZSBib3VuZCBmdW5jdGlvbidzIGxlbmd0aCBpcyBhbHdheXMgMC5cbiAgICAqIC8hXFwg
Q2F2ZWF0OiB0aGUgYm91bmQgZnVuY3Rpb24gaGFzIGEgcHJvdG90eXBlIHByb3BlcnR5LlxuICAg
ICogLyFcXCBDYXZlYXQ6IGJvdW5kIGZ1bmN0aW9ucyBkbyBub3QgdHJ5IHRvbyBoYXJkIHRvIGtl
ZXAgeW91XG4gICAgICBmcm9tIG1hbmlwdWxhdGluZyB0aGVpciBgYGFyZ3VtZW50c2BgIGFuZCBg
YGNhbGxlcmBgIHByb3BlcnRpZXMuXG4gICAgKiAvIVxcIENhdmVhdDogYm91bmQgZnVuY3Rpb25z
IGRvbid0IGhhdmUgY2hlY2tzIGluIGBgY2FsbGBgIGFuZFxuICAgICAgYGBhcHBseWBgIHRvIGF2
b2lkIGV4ZWN1dGluZyBhcyBhIGNvbnN0cnVjdG9yLlxuKiBPYmplY3Qua2V5c1xuKiBTdHJpbmcu
cHJvdG90eXBlLnRyaW1cblxuIyMjIFVudGVzdGVkICMjI1xuXG4qIERhdGUucGFyc2UgKGZvciBJ
U08gcGFyc2luZylcbiogRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmdcblxuIyMgU2hhbXNcblxu
KiAvP1xcIE9iamVjdC5jcmVhdGVcblxuICAgIEZvciB0aGUgY2FzZSBvZiBzaW1wbHkgXCJiZWdl
dHRpbmdcIiBhbiBvYmplY3QgdGhhdFxuICAgIGluaGVyaXRzIHByb3RvdHlwaWNhbGx5IGZyb20g
YW5vdGhlciwgdGhpcyBzaG91bGQgd29ya1xuICAgIGZpbmUgYWNyb3NzIGxlZ2FjeSBlbmdpbmVz
LlxuXG4gICAgLyFcXCBPYmplY3QuY3JlYXRlKG51bGwpIHdpbGwgd29yayBvbmx5IGluIGJyb3dz
ZXJzIHRoYXRcbiAgICBzdXBwb3J0IHByb3RvdHlwZSBhc3NpZ25tZW50LiAgVGhpcyBjcmVhdGVz
IGFuIG9iamVjdFxuICAgIHRoYXQgZG9lcyBub3QgaGF2ZSBhbnkgcHJvcGVydGllcyBpbmhlcml0
ZWQgZnJvbVxuICAgIE9iamVjdC5wcm90b3R5cGUuICBJdCB3aWxsIHNpbGVudGx5IGZhaWwgb3Ro
ZXJ3aXNlLlxuXG4gICAgLyFcXCBUaGUgc2Vjb25kIGFyZ3VtZW50IGlzIHBhc3NlZCB0b1xuICAg
IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzIHdoaWNoIHdpbGwgcHJvYmFibHkgZmFpbFxuICAgIHNp
bGVudGx5LlxuXG4qIC8/XFwgT2JqZWN0LmdldFByb3RvdHlwZU9mXG5cbiAgICBUaGlzIHdpbGwg
cmV0dXJuIFwidW5kZWZpbmVkXCIgaW4gc29tZSBjYXNlcy4gIEl0IHVzZXNcbiAgICBfX3Byb3Rv
X18gaWYgaXQncyBhdmFpbGFibGUuICBGYWlsaW5nIHRoYXQsIGl0IHVzZXNcbiAgICBjb25zdHJ1
Y3Rvci5wcm90b3R5cGUsIHdoaWNoIGRlcGVuZHMgb24gdGhlIGNvbnN0cnVjdG9yXG4gICAgcHJv
cGVydHkgb2YgdGhlIG9iamVjdCdzIHByb3RvdHlwZSBoYXZpbmcgbm90IGJlZW5cbiAgICByZXBs
YWNlZC4gIElmIHlvdXIgb2JqZWN0IHdhcyBjcmVhdGVkIGxpa2UgdGhpcywgaXRcbiAgICB3b24n
dCB3b3JrOlxuXG4gICAgICAgIGZ1bmN0aW9uIEZvbygpIHtcbiAgICAgICAgfVxuICAgICAgICBG
b28ucHJvdG90eXBlID0ge307XG5cbiAgICBCZWNhdXNlIHRoZSBwcm90b3R5cGUgcmVhc3NpZ25t
ZW50IGRlc3Ryb3lzIHRoZVxuICAgIGNvbnN0cnVjdG9yIHByb3BlcnR5LlxuXG4gICAgVGhpcyB3
aWxsIHdvcmsgZm9yIGFsbCBvYmplY3RzIHRoYXQgd2VyZSBjcmVhdGVkIHVzaW5nXG4gICAgYE9i
amVjdC5jcmVhdGVgIGltcGxlbWVudGVkIHdpdGggdGhpcyBsaWJyYXJ5LlxuXG4qIC8hXFwgT2Jq
ZWN0LmdldE93blByb3BlcnR5TmFtZXNcblxuICAgIFRoaXMgbWV0aG9kIHVzZXMgT2JqZWN0Lmtl
eXMsIHNvIGl0IHdpbGwgbm90IGJlIGFjY3VyYXRlXG4gICAgb24gbGVnYWN5IGVuZ2luZXMuXG5c
biogT2JqZWN0LmlzU2VhbGVkXG5cbiAgICBSZXR1cm5zIFwiZmFsc2VcIiBpbiBhbGwgbGVnYWN5
IGVuZ2luZXMgZm9yIGFsbCBvYmplY3RzLFxuICAgIHdoaWNoIGlzIGNvbnZlbmllbnRseSBndWFy
YW50ZWVkIHRvIGJlIGFjY3VyYXRlLlxuXG4qIE9iamVjdC5pc0Zyb3plblxuXG4gICAgUmV0dXJu
cyBcImZhbHNlXCIgaW4gYWxsIGxlZ2FjeSBlbmdpbmVzIGZvciBhbGwgb2JqZWN0cyxcbiAgICB3
aGljaCBpcyBjb252ZW5pZW50bHkgZ3VhcmFudGVlZCB0byBiZSBhY2N1cmF0ZS5cblxuKiBPYmpl
Y3QuaXNFeHRlbnNpYmxlXG5cbiAgICBXb3JrcyBsaWtlIGEgY2hhcm0sIGJ5IHRyeWluZyB2ZXJ5
IGhhcmQgdG8gZXh0ZW5kIHRoZVxuICAgIG9iamVjdCB0aGVuIHJlZGFjdGluZyB0aGUgZXh0ZW5z
aW9uLlxuXG4jIyMgRmFpbCBzaWxlbnRseVxuXG4qIC8hXFwgT2JqZWN0LmdldE93blByb3BlcnR5
RGVzY3JpcHRvclxuICAgIFxuICAgIFRoZSBiZWhhdmlvciBvZiB0aGlzIHNoaW0gZG9lcyBub3Qg
Y29uZm9ybSB0byBFUzUuICBJdFxuICAgIHNob3VsZCBwcm9iYWJseSBub3QgYmUgdXNlZCBhdCB0
aGlzIHRpbWUsIHVudGlsIGl0c1xuICAgIGJlaGF2aW9yIGhhcyBiZWVuIHJldmlld2VkIGFuZCBi
ZWVuIGNvbmZpcm1lZCB0byBiZVxuICAgIHVzZWZ1bCBpbiBsZWdhY3kgZW5naW5lcy5cblxuKiAv
IVxcIE9iamVjdC5kZWZpbmVQcm9wZXJ0eVxuXG4gICAgVGhpcyBtZXRob2Qgd2lsbCBzaWxlbnRs
eSBmYWlsIHRvIHNldCBcIndyaXRhYmxlXCIsXG4gICAgXCJlbnVtZXJhYmxlXCIsIGFuZCBcImNv
bmZpZ3VyYWJsZVwiIHByb3BlcnRpZXMuXG4gICAgXG4gICAgUHJvdmlkaW5nIGEgZ2V0dGVyIG9y
IHNldHRlciB3aXRoIFwiZ2V0XCIgb3IgXCJzZXRcIiBvbiBhXG4gICAgZGVzY3JpcHRvciB3aWxs
IHNpbGVudGx5IGZhaWwgb24gZW5naW5lcyB0aGF0IGxhY2tcbiAgICBcIl9fZGVmaW5lR2V0dGVy
X19cIiBhbmQgXCJfX2RlZmluZVNldHRlcl9fXCIsIHdoaWNoIGluY2x1ZGVcbiAgICBhbGwgdmVy
c2lvbnMgb2YgSUUgdXAgdG8gdmVyc2lvbiA4IHNvIGZhci5cblxuICAgIElFIDggcHJvdmlkZXMg
YSB2ZXJzaW9uIG9mIHRoaXMgbWV0aG9kIGJ1dCBpdCBvbmx5IHdvcmtzXG4gICAgb24gRE9NIG9i
amVjdHMuICBUaHVzLCB0aGUgc2hpbSB3aWxsIG5vdCBnZXQgaW5zdGFsbGVkXG4gICAgYW5kIGF0
dGVtcHRzIHRvIHNldCBcInZhbHVlXCIgcHJvcGVydGllcyB3aWxsIGZhaWxcbiAgICBzaWxlbnRs
eSBvbiBub24tRE9NIG9iamVjdHMuXG5cbiAgICBodHRwczovL2dpdGh1Yi5jb20va3Jpc2tvd2Fs
L2VzNS1zaGltL2lzc3VlcyNpc3N1ZS81XG5cbiogLyFcXCBPYmplY3QuZGVmaW5lUHJvcGVydGll
c1xuXG4gICAgVGhpcyB1c2VzIHRoZSBPYmplY3QuZGVmaW5lUHJvcGVydHkgc2hpbVxuXG4qIE9i
amVjdC5zZWFsXG5cbiAgICBTaWxlbnRseSBmYWlscyBvbiBhbGwgbGVnYWN5IGVuZ2luZXMuICBU
aGlzIHNob3VsZCBiZVxuICAgIGZpbmUgdW5sZXNzIHlvdSBhcmUgZGVwZW5kaW5nIG9uIHRoZSBz
YWZldHkgYW5kIHNlY3VyaXR5XG4gICAgcHJvdmlzaW9ucyBvZiB0aGlzIG1ldGhvZCwgd2hpY2gg
eW91IGNhbm5vdCBwb3NzaWJseVxuICAgIG9idGFpbiBpbiBsZWdhY3kgZW5naW5lcy5cblxuKiBP
YmplY3QuZnJlZXplXG5cbiAgICBTaWxlbnRseSBmYWlscyBvbiBhbGwgbGVnYWN5IGVuZ2luZXMu
ICBUaGlzIHNob3VsZCBiZVxuICAgIGZpbmUgdW5sZXNzIHlvdSBhcmUgZGVwZW5kaW5nIG9uIHRo
ZSBzYWZldHkgYW5kIHNlY3VyaXR5XG4gICAgcHJvdmlzaW9ucyBvZiB0aGlzIG1ldGhvZCwgd2hp
Y2ggeW91IGNhbm5vdCBwb3NzaWJseVxuICAgIG9idGFpbiBpbiBsZWdhY3kgZW5naW5lcy5cblxu
KiBPYmplY3QucHJldmVudEV4dGVuc2lvbnNcblxuICAgIFNpbGVudGx5IGZhaWxzIG9uIGFsbCBs
ZWdhY3kgZW5naW5lcy4gIFRoaXMgc2hvdWxkIGJlXG4gICAgZmluZSB1bmxlc3MgeW91IGFyZSBk
ZXBlbmRpbmcgb24gdGhlIHNhZmV0eSBhbmQgc2VjdXJpdHlcbiAgICBwcm92aXNpb25zIG9mIHRo
aXMgbWV0aG9kLCB3aGljaCB5b3UgY2Fubm90IHBvc3NpYmx5XG4gICAgb2J0YWluIGluIGxlZ2Fj
eSBlbmdpbmVzLlxuXG4iLAorICAicmVhZG1lRmlsZW5hbWUiOiAiUkVBRE1FLm1kIiwKKyAgIl9p
ZCI6ICJlczUtc2hpbUAyLjAuMCIKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4
OiBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2Nv
bXBvbmVudHMvZXM1LXNoaW0vZXM1LXNoYW0uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VU
ZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2VzNS1z
aGltL2VzNS1zaGFtLmpzCShyZXZpc2lvbiAwKQorKysgUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2
ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2VzNS1zaGltL2VzNS1zaGFt
LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzI2IEBACisvLyBDb3B5cmlnaHQgMjAwOS0y
MDEyIGJ5IGNvbnRyaWJ1dG9ycywgTUlUIExpY2Vuc2UKKy8vIHZpbTogdHM9NCBzdHM9NCBzdz00
IGV4cGFuZHRhYgorCisvLyBNb2R1bGUgc3lzdGVtcyBtYWdpYyBkYW5jZQorKGZ1bmN0aW9uIChk
ZWZpbml0aW9uKSB7CisgICAgLy8gUmVxdWlyZUpTCisgICAgaWYgKHR5cGVvZiBkZWZpbmUgPT0g
ImZ1bmN0aW9uIikgeworICAgICAgICBkZWZpbmUoZGVmaW5pdGlvbik7CisgICAgLy8gWVVJMwor
ICAgIH0gZWxzZSBpZiAodHlwZW9mIFlVSSA9PSAiZnVuY3Rpb24iKSB7CisgICAgICAgIFlVSS5h
ZGQoImVzNS1zaGFtIiwgZGVmaW5pdGlvbik7CisgICAgLy8gQ29tbW9uSlMgYW5kIDxzY3JpcHQ+
CisgICAgfSBlbHNlIHsKKyAgICAgICAgZGVmaW5pdGlvbigpOworICAgIH0KK30pKGZ1bmN0aW9u
ICgpIHsKKworLy8gRVM1IDE1LjIuMy4yCisvLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS4y
LjMuMgoraWYgKCFPYmplY3QuZ2V0UHJvdG90eXBlT2YpIHsKKyAgICAvLyBodHRwczovL2dpdGh1
Yi5jb20va3Jpc2tvd2FsL2VzNS1zaGltL2lzc3VlcyNpc3N1ZS8yCisgICAgLy8gaHR0cDovL2Vq
b2huLm9yZy9ibG9nL29iamVjdGdldHByb3RvdHlwZW9mLworICAgIC8vIHJlY29tbWVuZGVkIGJ5
IGZzY2hhZWZlciBvbiBnaXRodWIKKyAgICBPYmplY3QuZ2V0UHJvdG90eXBlT2YgPSBmdW5jdGlv
biBnZXRQcm90b3R5cGVPZihvYmplY3QpIHsKKyAgICAgICAgcmV0dXJuIG9iamVjdC5fX3Byb3Rv
X18gfHwgKAorICAgICAgICAgICAgb2JqZWN0LmNvbnN0cnVjdG9yCisgICAgICAgICAgICAgICAg
PyBvYmplY3QuY29uc3RydWN0b3IucHJvdG90eXBlCisgICAgICAgICAgICAgICAgOiBwcm90b3R5
cGVPZk9iamVjdAorICAgICAgICApOworICAgIH07Cit9CisKKy8vIEVTNSAxNS4yLjMuMworLy8g
aHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUuMi4zLjMKK2lmICghT2JqZWN0LmdldE93blByb3Bl
cnR5RGVzY3JpcHRvcikgeworICAgIHZhciBFUlJfTk9OX09CSkVDVCA9ICJPYmplY3QuZ2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yIGNhbGxlZCBvbiBhIG5vbi1vYmplY3Q6ICI7CisKKyAgICBPYmpl
Y3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yKG9iamVjdCwgcHJvcGVydHkpIHsKKyAgICAgICAgaWYgKCh0eXBlb2Ygb2JqZWN0ICE9
ICJvYmplY3QiICYmIHR5cGVvZiBvYmplY3QgIT0gImZ1bmN0aW9uIikgfHwgb2JqZWN0ID09PSBu
dWxsKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEVSUl9OT05fT0JKRUNUICsg
b2JqZWN0KTsKKyAgICAgICAgfQorICAgICAgICAvLyBJZiBvYmplY3QgZG9lcyBub3Qgb3ducyBw
cm9wZXJ0eSByZXR1cm4gdW5kZWZpbmVkIGltbWVkaWF0ZWx5LgorICAgICAgICBpZiAoIW93bnMo
b2JqZWN0LCBwcm9wZXJ0eSkpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIC8vIElmIG9iamVjdCBoYXMgYSBwcm9wZXJ0eSB0aGVuIGl0J3MgZm9yIHN1cmUgYm90
aCBgZW51bWVyYWJsZWAgYW5kCisgICAgICAgIC8vIGBjb25maWd1cmFibGVgLgorICAgICAgICB2
YXIgZGVzY3JpcHRvciA9ICB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9
OworCisgICAgICAgIC8vIElmIEpTIGVuZ2luZSBzdXBwb3J0cyBhY2Nlc3NvciBwcm9wZXJ0aWVz
IHRoZW4gcHJvcGVydHkgbWF5IGJlIGEKKyAgICAgICAgLy8gZ2V0dGVyIG9yIHNldHRlci4KKyAg
ICAgICAgaWYgKHN1cHBvcnRzQWNjZXNzb3JzKSB7CisgICAgICAgICAgICAvLyBVbmZvcnR1bmF0
ZWx5IGBfX2xvb2t1cEdldHRlcl9fYCB3aWxsIHJldHVybiBhIGdldHRlciBldmVuCisgICAgICAg
ICAgICAvLyBpZiBvYmplY3QgaGFzIG93biBub24gZ2V0dGVyIHByb3BlcnR5IGFsb25nIHdpdGgg
YSBzYW1lIG5hbWVkCisgICAgICAgICAgICAvLyBpbmhlcml0ZWQgZ2V0dGVyLiBUbyBhdm9pZCBt
aXNiZWhhdmlvciB3ZSB0ZW1wb3JhcnkgcmVtb3ZlCisgICAgICAgICAgICAvLyBgX19wcm90b19f
YCBzbyB0aGF0IGBfX2xvb2t1cEdldHRlcl9fYCB3aWxsIHJldHVybiBnZXR0ZXIgb25seQorICAg
ICAgICAgICAgLy8gaWYgaXQncyBvd25lZCBieSBhbiBvYmplY3QuCisgICAgICAgICAgICB2YXIg
cHJvdG90eXBlID0gb2JqZWN0Ll9fcHJvdG9fXzsKKyAgICAgICAgICAgIG9iamVjdC5fX3Byb3Rv
X18gPSBwcm90b3R5cGVPZk9iamVjdDsKKworICAgICAgICAgICAgdmFyIGdldHRlciA9IGxvb2t1
cEdldHRlcihvYmplY3QsIHByb3BlcnR5KTsKKyAgICAgICAgICAgIHZhciBzZXR0ZXIgPSBsb29r
dXBTZXR0ZXIob2JqZWN0LCBwcm9wZXJ0eSk7CisKKyAgICAgICAgICAgIC8vIE9uY2Ugd2UgaGF2
ZSBnZXR0ZXIgYW5kIHNldHRlciB3ZSBjYW4gcHV0IHZhbHVlcyBiYWNrLgorICAgICAgICAgICAg
b2JqZWN0Ll9fcHJvdG9fXyA9IHByb3RvdHlwZTsKKworICAgICAgICAgICAgaWYgKGdldHRlciB8
fCBzZXR0ZXIpIHsKKyAgICAgICAgICAgICAgICBpZiAoZ2V0dGVyKSB7CisgICAgICAgICAgICAg
ICAgICAgIGRlc2NyaXB0b3IuZ2V0ID0gZ2V0dGVyOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBpZiAoc2V0dGVyKSB7CisgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3Iu
c2V0ID0gc2V0dGVyOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBJZiBp
dCB3YXMgYWNjZXNzb3IgcHJvcGVydHkgd2UncmUgZG9uZSBhbmQgcmV0dXJuIGhlcmUKKyAgICAg
ICAgICAgICAgICAvLyBpbiBvcmRlciB0byBhdm9pZCBhZGRpbmcgYHZhbHVlYCB0byB0aGUgZGVz
Y3JpcHRvci4KKyAgICAgICAgICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIElmIHdlIGdvdCB0aGlzIGZhciB3ZSBrbm93IHRo
YXQgb2JqZWN0IGhhcyBhbiBvd24gcHJvcGVydHkgdGhhdCBpcworICAgICAgICAvLyBub3QgYW4g
YWNjZXNzb3Igc28gd2Ugc2V0IGl0IGFzIGEgdmFsdWUgYW5kIHJldHVybiBkZXNjcmlwdG9yLgor
ICAgICAgICBkZXNjcmlwdG9yLnZhbHVlID0gb2JqZWN0W3Byb3BlcnR5XTsKKyAgICAgICAgcmV0
dXJuIGRlc2NyaXB0b3I7CisgICAgfTsKK30KKworLy8gRVM1IDE1LjIuMy40CisvLyBodHRwOi8v
ZXM1LmdpdGh1Yi5jb20vI3gxNS4yLjMuNAoraWYgKCFPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1l
cykgeworICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzID0gZnVuY3Rpb24gZ2V0T3duUHJv
cGVydHlOYW1lcyhvYmplY3QpIHsKKyAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKG9iamVjdCk7
CisgICAgfTsKK30KKworLy8gRVM1IDE1LjIuMy41CisvLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20v
I3gxNS4yLjMuNQoraWYgKCFPYmplY3QuY3JlYXRlKSB7CisgICAgT2JqZWN0LmNyZWF0ZSA9IGZ1
bmN0aW9uIGNyZWF0ZShwcm90b3R5cGUsIHByb3BlcnRpZXMpIHsKKyAgICAgICAgdmFyIG9iamVj
dDsKKyAgICAgICAgaWYgKHByb3RvdHlwZSA9PT0gbnVsbCkgeworICAgICAgICAgICAgb2JqZWN0
ID0geyAiX19wcm90b19fIjogbnVsbCB9OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
aWYgKHR5cGVvZiBwcm90b3R5cGUgIT0gIm9iamVjdCIpIHsKKyAgICAgICAgICAgICAgICB0aHJv
dyBuZXcgVHlwZUVycm9yKCJ0eXBlb2YgcHJvdG90eXBlWyIrKHR5cGVvZiBwcm90b3R5cGUpKyJd
ICE9ICdvYmplY3QnIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgVHlwZSA9IGZ1
bmN0aW9uICgpIHt9OworICAgICAgICAgICAgVHlwZS5wcm90b3R5cGUgPSBwcm90b3R5cGU7Cisg
ICAgICAgICAgICBvYmplY3QgPSBuZXcgVHlwZSgpOworICAgICAgICAgICAgLy8gSUUgaGFzIG5v
IGJ1aWx0LWluIGltcGxlbWVudGF0aW9uIG9mIGBPYmplY3QuZ2V0UHJvdG90eXBlT2ZgCisgICAg
ICAgICAgICAvLyBuZWl0aGVyIGBfX3Byb3RvX19gLCBidXQgdGhpcyBtYW51YWxseSBzZXR0aW5n
IGBfX3Byb3RvX19gIHdpbGwKKyAgICAgICAgICAgIC8vIGd1YXJhbnRlZSB0aGF0IGBPYmplY3Qu
Z2V0UHJvdG90eXBlT2ZgIHdpbGwgd29yayBhcyBleHBlY3RlZCB3aXRoCisgICAgICAgICAgICAv
LyBvYmplY3RzIGNyZWF0ZWQgdXNpbmcgYE9iamVjdC5jcmVhdGVgCisgICAgICAgICAgICBvYmpl
Y3QuX19wcm90b19fID0gcHJvdG90eXBlOworICAgICAgICB9CisgICAgICAgIGlmIChwcm9wZXJ0
aWVzICE9PSB2b2lkIDApIHsKKyAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKG9i
amVjdCwgcHJvcGVydGllcyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG9iamVjdDsKKyAg
ICB9OworfQorCisvLyBFUzUgMTUuMi4zLjYKKy8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1
LjIuMy42CisKKy8vIFBhdGNoIGZvciBXZWJLaXQgYW5kIElFOCBzdGFuZGFyZCBtb2RlCisvLyBE
ZXNpZ25lZCBieSBoYXggPGhheC5naXRodWIuY29tPgorLy8gcmVsYXRlZCBpc3N1ZTogaHR0cHM6
Ly9naXRodWIuY29tL2tyaXNrb3dhbC9lczUtc2hpbS9pc3N1ZXMjaXNzdWUvNQorLy8gSUU4IFJl
ZmVyZW5jZToKKy8vICAgICBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkv
ZGQyODI5MDAuYXNweAorLy8gICAgIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGli
cmFyeS9kZDIyOTkxNi5hc3B4CisvLyBXZWJLaXQgQnVnczoKKy8vICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzY0MjMKKworZnVuY3Rpb24gZG9lc0RlZmluZVBy
b3BlcnR5V29yayhvYmplY3QpIHsKKyAgICB0cnkgeworICAgICAgICBPYmplY3QuZGVmaW5lUHJv
cGVydHkob2JqZWN0LCAic2VudGluZWwiLCB7fSk7CisgICAgICAgIHJldHVybiAic2VudGluZWwi
IGluIG9iamVjdDsKKyAgICB9IGNhdGNoIChleGNlcHRpb24pIHsKKyAgICAgICAgLy8gcmV0dXJu
cyBmYWxzeQorICAgIH0KK30KKworLy8gY2hlY2sgd2hldGhlciBkZWZpbmVQcm9wZXJ0eSB3b3Jr
cyBpZiBpdCdzIGdpdmVuLiBPdGhlcndpc2UsCisvLyBzaGltIHBhcnRpYWxseS4KK2lmIChPYmpl
Y3QuZGVmaW5lUHJvcGVydHkpIHsKKyAgICB2YXIgZGVmaW5lUHJvcGVydHlXb3Jrc09uT2JqZWN0
ID0gZG9lc0RlZmluZVByb3BlcnR5V29yayh7fSk7CisgICAgdmFyIGRlZmluZVByb3BlcnR5V29y
a3NPbkRvbSA9IHR5cGVvZiBkb2N1bWVudCA9PSAidW5kZWZpbmVkIiB8fAorICAgICAgICBkb2Vz
RGVmaW5lUHJvcGVydHlXb3JrKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpKTsKKyAgICBp
ZiAoIWRlZmluZVByb3BlcnR5V29ya3NPbk9iamVjdCB8fCAhZGVmaW5lUHJvcGVydHlXb3Jrc09u
RG9tKSB7CisgICAgICAgIHZhciBkZWZpbmVQcm9wZXJ0eUZhbGxiYWNrID0gT2JqZWN0LmRlZmlu
ZVByb3BlcnR5OworICAgIH0KK30KKworaWYgKCFPYmplY3QuZGVmaW5lUHJvcGVydHkgfHwgZGVm
aW5lUHJvcGVydHlGYWxsYmFjaykgeworICAgIHZhciBFUlJfTk9OX09CSkVDVF9ERVNDUklQVE9S
ID0gIlByb3BlcnR5IGRlc2NyaXB0aW9uIG11c3QgYmUgYW4gb2JqZWN0OiAiOworICAgIHZhciBF
UlJfTk9OX09CSkVDVF9UQVJHRVQgPSAiT2JqZWN0LmRlZmluZVByb3BlcnR5IGNhbGxlZCBvbiBu
b24tb2JqZWN0OiAiCisgICAgdmFyIEVSUl9BQ0NFU1NPUlNfTk9UX1NVUFBPUlRFRCA9ICJnZXR0
ZXJzICYgc2V0dGVycyBjYW4gbm90IGJlIGRlZmluZWQgIiArCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJvbiB0aGlzIGphdmFzY3JpcHQgZW5naW5lIjsKKworICAgIE9i
amVjdC5kZWZpbmVQcm9wZXJ0eSA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KG9iamVjdCwgcHJv
cGVydHksIGRlc2NyaXB0b3IpIHsKKyAgICAgICAgaWYgKCh0eXBlb2Ygb2JqZWN0ICE9ICJvYmpl
Y3QiICYmIHR5cGVvZiBvYmplY3QgIT0gImZ1bmN0aW9uIikgfHwgb2JqZWN0ID09PSBudWxsKSB7
CisgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEVSUl9OT05fT0JKRUNUX1RBUkdFVCAr
IG9iamVjdCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCh0eXBlb2YgZGVzY3JpcHRvciAhPSAi
b2JqZWN0IiAmJiB0eXBlb2YgZGVzY3JpcHRvciAhPSAiZnVuY3Rpb24iKSB8fCBkZXNjcmlwdG9y
ID09PSBudWxsKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEVSUl9OT05fT0JK
RUNUX0RFU0NSSVBUT1IgKyBkZXNjcmlwdG9yKTsKKyAgICAgICAgfQorICAgICAgICAvLyBtYWtl
IGEgdmFsaWFudCBhdHRlbXB0IHRvIHVzZSB0aGUgcmVhbCBkZWZpbmVQcm9wZXJ0eQorICAgICAg
ICAvLyBmb3IgSTgncyBET00gZWxlbWVudHMuCisgICAgICAgIGlmIChkZWZpbmVQcm9wZXJ0eUZh
bGxiYWNrKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIHJldHVybiBkZWZp
bmVQcm9wZXJ0eUZhbGxiYWNrLmNhbGwoT2JqZWN0LCBvYmplY3QsIHByb3BlcnR5LCBkZXNjcmlw
dG9yKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKGV4Y2VwdGlvbikgeworICAgICAgICAgICAgICAg
IC8vIHRyeSB0aGUgc2hpbSBpZiB0aGUgcmVhbCBvbmUgZG9lc24ndCB3b3JrCisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBJZiBpdCdzIGEgZGF0YSBwcm9wZXJ0eS4KKyAg
ICAgICAgaWYgKG93bnMoZGVzY3JpcHRvciwgInZhbHVlIikpIHsKKyAgICAgICAgICAgIC8vIGZh
aWwgc2lsZW50bHkgaWYgIndyaXRhYmxlIiwgImVudW1lcmFibGUiLCBvciAiY29uZmlndXJhYmxl
IgorICAgICAgICAgICAgLy8gYXJlIHJlcXVlc3RlZCBidXQgbm90IHN1cHBvcnRlZAorICAgICAg
ICAgICAgLyoKKyAgICAgICAgICAgIC8vIGFsdGVybmF0ZSBhcHByb2FjaDoKKyAgICAgICAgICAg
IGlmICggLy8gY2FuJ3QgaW1wbGVtZW50IHRoZXNlIGZlYXR1cmVzOyBhbGxvdyBmYWxzZSBidXQg
bm90IHRydWUKKyAgICAgICAgICAgICAgICAhKG93bnMoZGVzY3JpcHRvciwgIndyaXRhYmxlIikg
PyBkZXNjcmlwdG9yLndyaXRhYmxlIDogdHJ1ZSkgfHwKKyAgICAgICAgICAgICAgICAhKG93bnMo
ZGVzY3JpcHRvciwgImVudW1lcmFibGUiKSA/IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA6IHRydWUp
IHx8CisgICAgICAgICAgICAgICAgIShvd25zKGRlc2NyaXB0b3IsICJjb25maWd1cmFibGUiKSA/
IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlIDogdHJ1ZSkKKyAgICAgICAgICAgICkKKyAgICAgICAg
ICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigKKyAgICAgICAgICAgICAgICAgICAgIlRoaXMg
aW1wbGVtZW50YXRpb24gb2YgT2JqZWN0LmRlZmluZVByb3BlcnR5IGRvZXMgbm90ICIgKworICAg
ICAgICAgICAgICAgICAgICAic3VwcG9ydCBjb25maWd1cmFibGUsIGVudW1lcmFibGUsIG9yIHdy
aXRhYmxlLiIKKyAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgKi8KKworICAgICAgICAg
ICAgaWYgKHN1cHBvcnRzQWNjZXNzb3JzICYmIChsb29rdXBHZXR0ZXIob2JqZWN0LCBwcm9wZXJ0
eSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9va3VwU2V0dGVy
KG9iamVjdCwgcHJvcGVydHkpKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBB
cyBhY2Nlc3NvcnMgYXJlIHN1cHBvcnRlZCBvbmx5IG9uIGVuZ2luZXMgaW1wbGVtZW50aW5nCisg
ICAgICAgICAgICAgICAgLy8gYF9fcHJvdG9fX2Agd2UgY2FuIHNhZmVseSBvdmVycmlkZSBgX19w
cm90b19fYCB3aGlsZSBkZWZpbmluZworICAgICAgICAgICAgICAgIC8vIGEgcHJvcGVydHkgdG8g
bWFrZSBzdXJlIHRoYXQgd2UgZG9uJ3QgaGl0IGFuIGluaGVyaXRlZAorICAgICAgICAgICAgICAg
IC8vIGFjY2Vzc29yLgorICAgICAgICAgICAgICAgIHZhciBwcm90b3R5cGUgPSBvYmplY3QuX19w
cm90b19fOworICAgICAgICAgICAgICAgIG9iamVjdC5fX3Byb3RvX18gPSBwcm90b3R5cGVPZk9i
amVjdDsKKyAgICAgICAgICAgICAgICAvLyBEZWxldGluZyBhIHByb3BlcnR5IGFueXdheSBzaW5j
ZSBnZXR0ZXIgLyBzZXR0ZXIgbWF5IGJlCisgICAgICAgICAgICAgICAgLy8gZGVmaW5lZCBvbiBv
YmplY3QgaXRzZWxmLgorICAgICAgICAgICAgICAgIGRlbGV0ZSBvYmplY3RbcHJvcGVydHldOwor
ICAgICAgICAgICAgICAgIG9iamVjdFtwcm9wZXJ0eV0gPSBkZXNjcmlwdG9yLnZhbHVlOworICAg
ICAgICAgICAgICAgIC8vIFNldHRpbmcgb3JpZ2luYWwgYF9fcHJvdG9fX2AgYmFjayBub3cuCisg
ICAgICAgICAgICAgICAgb2JqZWN0Ll9fcHJvdG9fXyA9IHByb3RvdHlwZTsKKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgb2JqZWN0W3Byb3BlcnR5XSA9IGRlc2NyaXB0b3Iu
dmFsdWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAo
IXN1cHBvcnRzQWNjZXNzb3JzKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJv
cihFUlJfQUNDRVNTT1JTX05PVF9TVVBQT1JURUQpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgLy8gSWYgd2UgZ290IHRoYXQgZmFyIHRoZW4gZ2V0dGVycyBhbmQgc2V0dGVycyBjYW4gYmUg
ZGVmaW5lZCAhIQorICAgICAgICAgICAgaWYgKG93bnMoZGVzY3JpcHRvciwgImdldCIpKSB7Cisg
ICAgICAgICAgICAgICAgZGVmaW5lR2V0dGVyKG9iamVjdCwgcHJvcGVydHksIGRlc2NyaXB0b3Iu
Z2V0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChvd25zKGRlc2NyaXB0b3IsICJz
ZXQiKSkgeworICAgICAgICAgICAgICAgIGRlZmluZVNldHRlcihvYmplY3QsIHByb3BlcnR5LCBk
ZXNjcmlwdG9yLnNldCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IG9iamVjdDsKKyAgICB9OworfQorCisvLyBFUzUgMTUuMi4zLjcKKy8vIGh0dHA6Ly9lczUuZ2l0
aHViLmNvbS8jeDE1LjIuMy43CitpZiAoIU9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKSB7CisgICAg
T2JqZWN0LmRlZmluZVByb3BlcnRpZXMgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKG9iamVj
dCwgcHJvcGVydGllcykgeworICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBwcm9wZXJ0aWVz
KSB7CisgICAgICAgICAgICBpZiAob3ducyhwcm9wZXJ0aWVzLCBwcm9wZXJ0eSkgJiYgcHJvcGVy
dHkgIT0gIl9fcHJvdG9fXyIpIHsKKyAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVy
dHkob2JqZWN0LCBwcm9wZXJ0eSwgcHJvcGVydGllc1twcm9wZXJ0eV0pOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIHJldHVybiBvYmplY3Q7CisgICAgfTsKK30KKworLy8gRVM1
IDE1LjIuMy44CisvLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS4yLjMuOAoraWYgKCFPYmpl
Y3Quc2VhbCkgeworICAgIE9iamVjdC5zZWFsID0gZnVuY3Rpb24gc2VhbChvYmplY3QpIHsKKyAg
ICAgICAgLy8gdGhpcyBpcyBtaXNsZWFkaW5nIGFuZCBicmVha3MgZmVhdHVyZS1kZXRlY3Rpb24s
IGJ1dAorICAgICAgICAvLyBhbGxvd3MgInNlY3VyYWJsZSIgY29kZSB0byAiZ3JhY2VmdWxseSIg
ZGVncmFkZSB0byB3b3JraW5nCisgICAgICAgIC8vIGJ1dCBpbnNlY3VyZSBjb2RlLgorICAgICAg
ICByZXR1cm4gb2JqZWN0OworICAgIH07Cit9CisKKy8vIEVTNSAxNS4yLjMuOQorLy8gaHR0cDov
L2VzNS5naXRodWIuY29tLyN4MTUuMi4zLjkKK2lmICghT2JqZWN0LmZyZWV6ZSkgeworICAgIE9i
amVjdC5mcmVlemUgPSBmdW5jdGlvbiBmcmVlemUob2JqZWN0KSB7CisgICAgICAgIC8vIHRoaXMg
aXMgbWlzbGVhZGluZyBhbmQgYnJlYWtzIGZlYXR1cmUtZGV0ZWN0aW9uLCBidXQKKyAgICAgICAg
Ly8gYWxsb3dzICJzZWN1cmFibGUiIGNvZGUgdG8gImdyYWNlZnVsbHkiIGRlZ3JhZGUgdG8gd29y
a2luZworICAgICAgICAvLyBidXQgaW5zZWN1cmUgY29kZS4KKyAgICAgICAgcmV0dXJuIG9iamVj
dDsKKyAgICB9OworfQorCisvLyBkZXRlY3QgYSBSaGlubyBidWcgYW5kIHBhdGNoIGl0Cit0cnkg
eworICAgIE9iamVjdC5mcmVlemUoZnVuY3Rpb24gKCkge30pOworfSBjYXRjaCAoZXhjZXB0aW9u
KSB7CisgICAgT2JqZWN0LmZyZWV6ZSA9IChmdW5jdGlvbiBmcmVlemUoZnJlZXplT2JqZWN0KSB7
CisgICAgICAgIHJldHVybiBmdW5jdGlvbiBmcmVlemUob2JqZWN0KSB7CisgICAgICAgICAgICBp
ZiAodHlwZW9mIG9iamVjdCA9PSAiZnVuY3Rpb24iKSB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IG9iamVjdDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZy
ZWV6ZU9iamVjdChvYmplY3QpOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0pKE9i
amVjdC5mcmVlemUpOworfQorCisvLyBFUzUgMTUuMi4zLjEwCisvLyBodHRwOi8vZXM1LmdpdGh1
Yi5jb20vI3gxNS4yLjMuMTAKK2lmICghT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKSB7CisgICAg
T2JqZWN0LnByZXZlbnRFeHRlbnNpb25zID0gZnVuY3Rpb24gcHJldmVudEV4dGVuc2lvbnMob2Jq
ZWN0KSB7CisgICAgICAgIC8vIHRoaXMgaXMgbWlzbGVhZGluZyBhbmQgYnJlYWtzIGZlYXR1cmUt
ZGV0ZWN0aW9uLCBidXQKKyAgICAgICAgLy8gYWxsb3dzICJzZWN1cmFibGUiIGNvZGUgdG8gImdy
YWNlZnVsbHkiIGRlZ3JhZGUgdG8gd29ya2luZworICAgICAgICAvLyBidXQgaW5zZWN1cmUgY29k
ZS4KKyAgICAgICAgcmV0dXJuIG9iamVjdDsKKyAgICB9OworfQorCisvLyBFUzUgMTUuMi4zLjEx
CisvLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS4yLjMuMTEKK2lmICghT2JqZWN0LmlzU2Vh
bGVkKSB7CisgICAgT2JqZWN0LmlzU2VhbGVkID0gZnVuY3Rpb24gaXNTZWFsZWQob2JqZWN0KSB7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9OworfQorCisvLyBFUzUgMTUuMi4zLjEyCisv
LyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS4yLjMuMTIKK2lmICghT2JqZWN0LmlzRnJvemVu
KSB7CisgICAgT2JqZWN0LmlzRnJvemVuID0gZnVuY3Rpb24gaXNGcm96ZW4ob2JqZWN0KSB7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9OworfQorCisvLyBFUzUgMTUuMi4zLjEzCisvLyBo
dHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS4yLjMuMTMKK2lmICghT2JqZWN0LmlzRXh0ZW5zaWJs
ZSkgeworICAgIE9iamVjdC5pc0V4dGVuc2libGUgPSBmdW5jdGlvbiBpc0V4dGVuc2libGUob2Jq
ZWN0KSB7CisgICAgICAgIC8vIDEuIElmIFR5cGUoTykgaXMgbm90IE9iamVjdCB0aHJvdyBhIFR5
cGVFcnJvciBleGNlcHRpb24uCisgICAgICAgIGlmIChPYmplY3Qob2JqZWN0KSAhPT0gb2JqZWN0
KSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCk7IC8vIFRPRE8gbWVzc2FnZQor
ICAgICAgICB9CisgICAgICAgIC8vIDIuIFJldHVybiB0aGUgQm9vbGVhbiB2YWx1ZSBvZiB0aGUg
W1tFeHRlbnNpYmxlXV0gaW50ZXJuYWwgcHJvcGVydHkgb2YgTy4KKyAgICAgICAgdmFyIG5hbWUg
PSAnJzsKKyAgICAgICAgd2hpbGUgKG93bnMob2JqZWN0LCBuYW1lKSkgeworICAgICAgICAgICAg
bmFtZSArPSAnPyc7CisgICAgICAgIH0KKyAgICAgICAgb2JqZWN0W25hbWVdID0gdHJ1ZTsKKyAg
ICAgICAgdmFyIHJldHVyblZhbHVlID0gb3ducyhvYmplY3QsIG5hbWUpOworICAgICAgICBkZWxl
dGUgb2JqZWN0W25hbWVdOworICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CisgICAgfTsKK30K
KworfSk7CkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4
YW1wbGUtYXBwL2NvbXBvbmVudHMvZXM1LXNoaW0vZXM1LXNoYW0ubWluLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAv
Y29tcG9uZW50cy9lczUtc2hpbS9lczUtc2hhbS5taW4uanMJKHJldmlzaW9uIDApCisrKyBQZXJm
b3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVu
dHMvZXM1LXNoaW0vZXM1LXNoYW0ubWluLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNiBA
QAorKGZ1bmN0aW9uKGQpeyJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmU/ZGVmaW5lKGQpOiJmdW5j
dGlvbiI9PXR5cGVvZiBZVUk/WVVJLmFkZCgiZXM1LXNoYW0iLGQpOmQoKX0pKGZ1bmN0aW9uKCl7
ZnVuY3Rpb24gZChhKXt0cnl7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhLCJzZW50aW5l
bCIse30pLCJzZW50aW5lbCJpbiBhfWNhdGNoKGMpe319T2JqZWN0LmdldFByb3RvdHlwZU9mfHwo
T2JqZWN0LmdldFByb3RvdHlwZU9mPWZ1bmN0aW9uKGEpe3JldHVybiBhLl9fcHJvdG9fX3x8KGEu
Y29uc3RydWN0b3I/YS5jb25zdHJ1Y3Rvci5wcm90b3R5cGU6cHJvdG90eXBlT2ZPYmplY3QpfSk7
T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnx8KE9iamVjdC5nZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3I9ZnVuY3Rpb24oYSxjKXtpZih0eXBlb2YgYSE9Im9iamVjdCImJnR5cGVvZiBhIT0i
ZnVuY3Rpb24ifHxhPT09bnVsbCl0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QuZ2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yIGNhbGxlZCBvbiBhIG5vbi1vYmplY3Q6ICIrCithKTtpZihvd25zKGEs
Yykpe3ZhciBiPXtlbnVtZXJhYmxlOnRydWUsY29uZmlndXJhYmxlOnRydWV9O2lmKHN1cHBvcnRz
QWNjZXNzb3JzKXt2YXIgZD1hLl9fcHJvdG9fXzthLl9fcHJvdG9fXz1wcm90b3R5cGVPZk9iamVj
dDt2YXIgZj1sb29rdXBHZXR0ZXIoYSxjKSxlPWxvb2t1cFNldHRlcihhLGMpO2EuX19wcm90b19f
PWQ7aWYoZnx8ZSl7aWYoZiliLmdldD1mO2lmKGUpYi5zZXQ9ZTtyZXR1cm4gYn19Yi52YWx1ZT1h
W2NdO3JldHVybiBifX0pO09iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzfHwoT2JqZWN0LmdldE93
blByb3BlcnR5TmFtZXM9ZnVuY3Rpb24oYSl7cmV0dXJuIE9iamVjdC5rZXlzKGEpfSk7T2JqZWN0
LmNyZWF0ZXx8KE9iamVjdC5jcmVhdGU9ZnVuY3Rpb24oYSxjKXt2YXIgYjtpZihhPT09bnVsbCli
PXtfX3Byb3RvX186bnVsbH07ZWxzZXtpZih0eXBlb2YgYSE9Im9iamVjdCIpdGhyb3cgbmV3IFR5
cGVFcnJvcigidHlwZW9mIHByb3RvdHlwZVsiK3R5cGVvZiBhKworIl0gIT0gJ29iamVjdCciKTti
PWZ1bmN0aW9uKCl7fTtiLnByb3RvdHlwZT1hO2I9bmV3IGI7Yi5fX3Byb3RvX189YX1jIT09dm9p
ZCAwJiZPYmplY3QuZGVmaW5lUHJvcGVydGllcyhiLGMpO3JldHVybiBifSk7aWYoT2JqZWN0LmRl
ZmluZVByb3BlcnR5KXt2YXIgZz1kKHt9KSxoPSJ1bmRlZmluZWQiPT10eXBlb2YgZG9jdW1lbnR8
fGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikpO2lmKCFnfHwhaCl2YXIgZT1PYmplY3Qu
ZGVmaW5lUHJvcGVydHl9aWYoIU9iamVjdC5kZWZpbmVQcm9wZXJ0eXx8ZSlPYmplY3QuZGVmaW5l
UHJvcGVydHk9ZnVuY3Rpb24oYSxjLGIpe2lmKHR5cGVvZiBhIT0ib2JqZWN0IiYmdHlwZW9mIGEh
PSJmdW5jdGlvbiJ8fGE9PT1udWxsKXRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdC5kZWZpbmVQ
cm9wZXJ0eSBjYWxsZWQgb24gbm9uLW9iamVjdDogIithKTtpZih0eXBlb2YgYiE9Im9iamVjdCIm
JnR5cGVvZiBiIT0iZnVuY3Rpb24ifHxiPT09CitudWxsKXRocm93IG5ldyBUeXBlRXJyb3IoIlBy
b3BlcnR5IGRlc2NyaXB0aW9uIG11c3QgYmUgYW4gb2JqZWN0OiAiK2IpO2lmKGUpdHJ5e3JldHVy
biBlLmNhbGwoT2JqZWN0LGEsYyxiKX1jYXRjaChkKXt9aWYob3ducyhiLCJ2YWx1ZSIpKWlmKHN1
cHBvcnRzQWNjZXNzb3JzJiYobG9va3VwR2V0dGVyKGEsYyl8fGxvb2t1cFNldHRlcihhLGMpKSl7
dmFyIGY9YS5fX3Byb3RvX187YS5fX3Byb3RvX189cHJvdG90eXBlT2ZPYmplY3Q7ZGVsZXRlIGFb
Y107YVtjXT1iLnZhbHVlO2EuX19wcm90b19fPWZ9ZWxzZSBhW2NdPWIudmFsdWU7ZWxzZXtpZigh
c3VwcG9ydHNBY2Nlc3NvcnMpdGhyb3cgbmV3IFR5cGVFcnJvcigiZ2V0dGVycyAmIHNldHRlcnMg
Y2FuIG5vdCBiZSBkZWZpbmVkIG9uIHRoaXMgamF2YXNjcmlwdCBlbmdpbmUiKTtvd25zKGIsImdl
dCIpJiZkZWZpbmVHZXR0ZXIoYSxjLGIuZ2V0KTtvd25zKGIsInNldCIpJiZkZWZpbmVTZXR0ZXIo
YSxjLGIuc2V0KX1yZXR1cm4gYX07CitPYmplY3QuZGVmaW5lUHJvcGVydGllc3x8KE9iamVjdC5k
ZWZpbmVQcm9wZXJ0aWVzPWZ1bmN0aW9uKGEsYyl7Zm9yKHZhciBiIGluIGMpb3ducyhjLGIpJiZi
IT0iX19wcm90b19fIiYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGEsYixjW2JdKTtyZXR1cm4gYX0p
O09iamVjdC5zZWFsfHwoT2JqZWN0LnNlYWw9ZnVuY3Rpb24oYSl7cmV0dXJuIGF9KTtPYmplY3Qu
ZnJlZXplfHwoT2JqZWN0LmZyZWV6ZT1mdW5jdGlvbihhKXtyZXR1cm4gYX0pO3RyeXtPYmplY3Qu
ZnJlZXplKGZ1bmN0aW9uKCl7fSl9Y2F0Y2goail7dmFyIGk9T2JqZWN0LmZyZWV6ZTtPYmplY3Qu
ZnJlZXplPWZ1bmN0aW9uKGEpe3JldHVybiB0eXBlb2YgYT09ImZ1bmN0aW9uIj9hOmkoYSl9fU9i
amVjdC5wcmV2ZW50RXh0ZW5zaW9uc3x8KE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucz1mdW5jdGlv
bihhKXtyZXR1cm4gYX0pO09iamVjdC5pc1NlYWxlZHx8KE9iamVjdC5pc1NlYWxlZD1mdW5jdGlv
bigpe3JldHVybiBmYWxzZX0pOworT2JqZWN0LmlzRnJvemVufHwoT2JqZWN0LmlzRnJvemVuPWZ1
bmN0aW9uKCl7cmV0dXJuIGZhbHNlfSk7T2JqZWN0LmlzRXh0ZW5zaWJsZXx8KE9iamVjdC5pc0V4
dGVuc2libGU9ZnVuY3Rpb24oYSl7aWYoT2JqZWN0KGEpIT09YSl0aHJvdyBuZXcgVHlwZUVycm9y
O2Zvcih2YXIgYz0iIjtvd25zKGEsYyk7KWM9YysiPyI7YVtjXT10cnVlO3ZhciBiPW93bnMoYSxj
KTtkZWxldGUgYVtjXTtyZXR1cm4gYn0pfSk7CkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0RvWW91
RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvZXM1LXNoaW0vZXM1LXNo
aW0uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGln
aHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2VzNS1zaGltL2VzNS1zaGltLmpzCShyZXZpc2lv
biAwKQorKysgUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxl
LWFwcC9jb21wb25lbnRzL2VzNS1zaGltL2VzNS1zaGltLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNzc4IEBACisvLyBDb3B5cmlnaHQgMjAwOS0yMDEyIGJ5IGNvbnRyaWJ1dG9ycywgTUlU
IExpY2Vuc2UKKy8vIHZpbTogdHM9NCBzdHM9NCBzdz00IGV4cGFuZHRhYgorCisvLyBNb2R1bGUg
c3lzdGVtcyBtYWdpYyBkYW5jZQorKGZ1bmN0aW9uIChkZWZpbml0aW9uKSB7CisgICAgLy8gUmVx
dWlyZUpTCisgICAgaWYgKHR5cGVvZiBkZWZpbmUgPT0gImZ1bmN0aW9uIikgeworICAgICAgICBk
ZWZpbmUoZGVmaW5pdGlvbik7CisgICAgLy8gWVVJMworICAgIH0gZWxzZSBpZiAodHlwZW9mIFlV
SSA9PSAiZnVuY3Rpb24iKSB7CisgICAgICAgIFlVSS5hZGQoImVzNSIsIGRlZmluaXRpb24pOwor
ICAgIC8vIENvbW1vbkpTIGFuZCA8c2NyaXB0PgorICAgIH0gZWxzZSB7CisgICAgICAgIGRlZmlu
aXRpb24oKTsKKyAgICB9Cit9KShmdW5jdGlvbiAoKSB7CisKKy8qKgorICogQnJpbmdzIGFuIGVu
dmlyb25tZW50IGFzIGNsb3NlIHRvIEVDTUFTY3JpcHQgNSBjb21wbGlhbmNlCisgKiBhcyBpcyBw
b3NzaWJsZSB3aXRoIHRoZSBmYWNpbGl0aWVzIG9mIGVyc3R3aGlsZSBlbmdpbmVzLgorICoKKyAq
IEFubm90YXRlZCBFUzU6IGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8gKHNwZWNpZmljIGxpbmtzIGJl
bG93KQorICogRVM1IFNwZWM6IGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9wdWJs
aWNhdGlvbnMvZmlsZXMvRUNNQS1TVC9FY21hLTI2Mi5wZGYKKyAqIFJlcXVpcmVkIHJlYWRpbmc6
IGh0dHA6Ly9qYXZhc2NyaXB0d2VibG9nLndvcmRwcmVzcy5jb20vMjAxMS8xMi8wNS9leHRlbmRp
bmctamF2YXNjcmlwdC1uYXRpdmVzLworICovCisKKy8vCisvLyBGdW5jdGlvbgorLy8gPT09PT09
PT0KKy8vCisKKy8vIEVTLTUgMTUuMy40LjUKKy8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1
LjMuNC41CisKK2lmICghRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQpIHsKKyAgICBGdW5jdGlvbi5w
cm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uIGJpbmQodGhhdCkgeyAvLyAubGVuZ3RoIGlzIDEKKyAg
ICAgICAgLy8gMS4gTGV0IFRhcmdldCBiZSB0aGUgdGhpcyB2YWx1ZS4KKyAgICAgICAgdmFyIHRh
cmdldCA9IHRoaXM7CisgICAgICAgIC8vIDIuIElmIElzQ2FsbGFibGUoVGFyZ2V0KSBpcyBmYWxz
ZSwgdGhyb3cgYSBUeXBlRXJyb3IgZXhjZXB0aW9uLgorICAgICAgICBpZiAodHlwZW9mIHRhcmdl
dCAhPSAiZnVuY3Rpb24iKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5j
dGlvbi5wcm90b3R5cGUuYmluZCBjYWxsZWQgb24gaW5jb21wYXRpYmxlICIgKyB0YXJnZXQpOwor
ICAgICAgICB9CisgICAgICAgIC8vIDMuIExldCBBIGJlIGEgbmV3IChwb3NzaWJseSBlbXB0eSkg
aW50ZXJuYWwgbGlzdCBvZiBhbGwgb2YgdGhlCisgICAgICAgIC8vICAgYXJndW1lbnQgdmFsdWVz
IHByb3ZpZGVkIGFmdGVyIHRoaXNBcmcgKGFyZzEsIGFyZzIgZXRjKSwgaW4gb3JkZXIuCisgICAg
ICAgIC8vIFhYWCBzbGljZWRBcmdzIHdpbGwgc3RhbmQgaW4gZm9yICJBIiBpZiB1c2VkCisgICAg
ICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpOyAvLyBmb3Igbm9ybWFsIGNh
bGwKKyAgICAgICAgLy8gNC4gTGV0IEYgYmUgYSBuZXcgbmF0aXZlIEVDTUFTY3JpcHQgb2JqZWN0
LgorICAgICAgICAvLyAxMS4gU2V0IHRoZSBbW1Byb3RvdHlwZV1dIGludGVybmFsIHByb3BlcnR5
IG9mIEYgdG8gdGhlIHN0YW5kYXJkCisgICAgICAgIC8vICAgYnVpbHQtaW4gRnVuY3Rpb24gcHJv
dG90eXBlIG9iamVjdCBhcyBzcGVjaWZpZWQgaW4gMTUuMy4zLjEuCisgICAgICAgIC8vIDEyLiBT
ZXQgdGhlIFtbQ2FsbF1dIGludGVybmFsIHByb3BlcnR5IG9mIEYgYXMgZGVzY3JpYmVkIGluCisg
ICAgICAgIC8vICAgMTUuMy40LjUuMS4KKyAgICAgICAgLy8gMTMuIFNldCB0aGUgW1tDb25zdHJ1
Y3RdXSBpbnRlcm5hbCBwcm9wZXJ0eSBvZiBGIGFzIGRlc2NyaWJlZCBpbgorICAgICAgICAvLyAg
IDE1LjMuNC41LjIuCisgICAgICAgIC8vIDE0LiBTZXQgdGhlIFtbSGFzSW5zdGFuY2VdXSBpbnRl
cm5hbCBwcm9wZXJ0eSBvZiBGIGFzIGRlc2NyaWJlZCBpbgorICAgICAgICAvLyAgIDE1LjMuNC41
LjMuCisgICAgICAgIHZhciBib3VuZCA9IGZ1bmN0aW9uICgpIHsKKworICAgICAgICAgICAgaWYg
KHRoaXMgaW5zdGFuY2VvZiBib3VuZCkgeworICAgICAgICAgICAgICAgIC8vIDE1LjMuNC41LjIg
W1tDb25zdHJ1Y3RdXQorICAgICAgICAgICAgICAgIC8vIFdoZW4gdGhlIFtbQ29uc3RydWN0XV0g
aW50ZXJuYWwgbWV0aG9kIG9mIGEgZnVuY3Rpb24gb2JqZWN0LAorICAgICAgICAgICAgICAgIC8v
IEYgdGhhdCB3YXMgY3JlYXRlZCB1c2luZyB0aGUgYmluZCBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0
aCBhCisgICAgICAgICAgICAgICAgLy8gbGlzdCBvZiBhcmd1bWVudHMgRXh0cmFBcmdzLCB0aGUg
Zm9sbG93aW5nIHN0ZXBzIGFyZSB0YWtlbjoKKyAgICAgICAgICAgICAgICAvLyAxLiBMZXQgdGFy
Z2V0IGJlIHRoZSB2YWx1ZSBvZiBGJ3MgW1tUYXJnZXRGdW5jdGlvbl1dCisgICAgICAgICAgICAg
ICAgLy8gICBpbnRlcm5hbCBwcm9wZXJ0eS4KKyAgICAgICAgICAgICAgICAvLyAyLiBJZiB0YXJn
ZXQgaGFzIG5vIFtbQ29uc3RydWN0XV0gaW50ZXJuYWwgbWV0aG9kLCBhCisgICAgICAgICAgICAg
ICAgLy8gICBUeXBlRXJyb3IgZXhjZXB0aW9uIGlzIHRocm93bi4KKyAgICAgICAgICAgICAgICAv
LyAzLiBMZXQgYm91bmRBcmdzIGJlIHRoZSB2YWx1ZSBvZiBGJ3MgW1tCb3VuZEFyZ3NdXSBpbnRl
cm5hbAorICAgICAgICAgICAgICAgIC8vICAgcHJvcGVydHkuCisgICAgICAgICAgICAgICAgLy8g
NC4gTGV0IGFyZ3MgYmUgYSBuZXcgbGlzdCBjb250YWluaW5nIHRoZSBzYW1lIHZhbHVlcyBhcyB0
aGUKKyAgICAgICAgICAgICAgICAvLyAgIGxpc3QgYm91bmRBcmdzIGluIHRoZSBzYW1lIG9yZGVy
IGZvbGxvd2VkIGJ5IHRoZSBzYW1lCisgICAgICAgICAgICAgICAgLy8gICB2YWx1ZXMgYXMgdGhl
IGxpc3QgRXh0cmFBcmdzIGluIHRoZSBzYW1lIG9yZGVyLgorICAgICAgICAgICAgICAgIC8vIDUu
IFJldHVybiB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIFtbQ29uc3RydWN0XV0gaW50ZXJuYWwK
KyAgICAgICAgICAgICAgICAvLyAgIG1ldGhvZCBvZiB0YXJnZXQgcHJvdmlkaW5nIGFyZ3MgYXMg
dGhlIGFyZ3VtZW50cy4KKworICAgICAgICAgICAgICAgIHZhciBGID0gZnVuY3Rpb24oKXt9Owor
ICAgICAgICAgICAgICAgIEYucHJvdG90eXBlID0gdGFyZ2V0LnByb3RvdHlwZTsKKyAgICAgICAg
ICAgICAgICB2YXIgc2VsZiA9IG5ldyBGOworCisgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9
IHRhcmdldC5hcHBseSgKKyAgICAgICAgICAgICAgICAgICAgc2VsZiwKKyAgICAgICAgICAgICAg
ICAgICAgYXJncy5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKQorICAgICAgICAgICAgICAg
ICk7CisgICAgICAgICAgICAgICAgaWYgKE9iamVjdChyZXN1bHQpID09PSByZXN1bHQpIHsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHNlbGY7CisKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgLy8gMTUuMy40LjUuMSBbW0NhbGxdXQorICAgICAgICAgICAgICAgIC8vIFdoZW4g
dGhlIFtbQ2FsbF1dIGludGVybmFsIG1ldGhvZCBvZiBhIGZ1bmN0aW9uIG9iamVjdCwgRiwKKyAg
ICAgICAgICAgICAgICAvLyB3aGljaCB3YXMgY3JlYXRlZCB1c2luZyB0aGUgYmluZCBmdW5jdGlv
biBpcyBjYWxsZWQgd2l0aCBhCisgICAgICAgICAgICAgICAgLy8gdGhpcyB2YWx1ZSBhbmQgYSBs
aXN0IG9mIGFyZ3VtZW50cyBFeHRyYUFyZ3MsIHRoZSBmb2xsb3dpbmcKKyAgICAgICAgICAgICAg
ICAvLyBzdGVwcyBhcmUgdGFrZW46CisgICAgICAgICAgICAgICAgLy8gMS4gTGV0IGJvdW5kQXJn
cyBiZSB0aGUgdmFsdWUgb2YgRidzIFtbQm91bmRBcmdzXV0gaW50ZXJuYWwKKyAgICAgICAgICAg
ICAgICAvLyAgIHByb3BlcnR5LgorICAgICAgICAgICAgICAgIC8vIDIuIExldCBib3VuZFRoaXMg
YmUgdGhlIHZhbHVlIG9mIEYncyBbW0JvdW5kVGhpc11dIGludGVybmFsCisgICAgICAgICAgICAg
ICAgLy8gICBwcm9wZXJ0eS4KKyAgICAgICAgICAgICAgICAvLyAzLiBMZXQgdGFyZ2V0IGJlIHRo
ZSB2YWx1ZSBvZiBGJ3MgW1tUYXJnZXRGdW5jdGlvbl1dIGludGVybmFsCisgICAgICAgICAgICAg
ICAgLy8gICBwcm9wZXJ0eS4KKyAgICAgICAgICAgICAgICAvLyA0LiBMZXQgYXJncyBiZSBhIG5l
dyBsaXN0IGNvbnRhaW5pbmcgdGhlIHNhbWUgdmFsdWVzIGFzIHRoZQorICAgICAgICAgICAgICAg
IC8vICAgbGlzdCBib3VuZEFyZ3MgaW4gdGhlIHNhbWUgb3JkZXIgZm9sbG93ZWQgYnkgdGhlIHNh
bWUKKyAgICAgICAgICAgICAgICAvLyAgIHZhbHVlcyBhcyB0aGUgbGlzdCBFeHRyYUFyZ3MgaW4g
dGhlIHNhbWUgb3JkZXIuCisgICAgICAgICAgICAgICAgLy8gNS4gUmV0dXJuIHRoZSByZXN1bHQg
b2YgY2FsbGluZyB0aGUgW1tDYWxsXV0gaW50ZXJuYWwgbWV0aG9kCisgICAgICAgICAgICAgICAg
Ly8gICBvZiB0YXJnZXQgcHJvdmlkaW5nIGJvdW5kVGhpcyBhcyB0aGUgdGhpcyB2YWx1ZSBhbmQK
KyAgICAgICAgICAgICAgICAvLyAgIHByb3ZpZGluZyBhcmdzIGFzIHRoZSBhcmd1bWVudHMuCisK
KyAgICAgICAgICAgICAgICAvLyBlcXVpdjogdGFyZ2V0LmNhbGwodGhpcywgLi4uYm91bmRBcmdz
LCAuLi5hcmdzKQorICAgICAgICAgICAgICAgIHJldHVybiB0YXJnZXQuYXBwbHkoCisgICAgICAg
ICAgICAgICAgICAgIHRoYXQsCisgICAgICAgICAgICAgICAgICAgIGFyZ3MuY29uY2F0KHNsaWNl
LmNhbGwoYXJndW1lbnRzKSkKKyAgICAgICAgICAgICAgICApOworCisgICAgICAgICAgICB9CisK
KyAgICAgICAgfTsKKyAgICAgICAgLy8gWFhYIGJvdW5kLmxlbmd0aCBpcyBuZXZlciB3cml0YWJs
ZSwgc28gZG9uJ3QgZXZlbiB0cnkKKyAgICAgICAgLy8KKyAgICAgICAgLy8gMTUuIElmIHRoZSBb
W0NsYXNzXV0gaW50ZXJuYWwgcHJvcGVydHkgb2YgVGFyZ2V0IGlzICJGdW5jdGlvbiIsIHRoZW4K
KyAgICAgICAgLy8gICAgIGEuIExldCBMIGJlIHRoZSBsZW5ndGggcHJvcGVydHkgb2YgVGFyZ2V0
IG1pbnVzIHRoZSBsZW5ndGggb2YgQS4KKyAgICAgICAgLy8gICAgIGIuIFNldCB0aGUgbGVuZ3Ro
IG93biBwcm9wZXJ0eSBvZiBGIHRvIGVpdGhlciAwIG9yIEwsIHdoaWNoZXZlciBpcworICAgICAg
ICAvLyAgICAgICBsYXJnZXIuCisgICAgICAgIC8vIDE2LiBFbHNlIHNldCB0aGUgbGVuZ3RoIG93
biBwcm9wZXJ0eSBvZiBGIHRvIDAuCisgICAgICAgIC8vIDE3LiBTZXQgdGhlIGF0dHJpYnV0ZXMg
b2YgdGhlIGxlbmd0aCBvd24gcHJvcGVydHkgb2YgRiB0byB0aGUgdmFsdWVzCisgICAgICAgIC8v
ICAgc3BlY2lmaWVkIGluIDE1LjMuNS4xLgorCisgICAgICAgIC8vIFRPRE8KKyAgICAgICAgLy8g
MTguIFNldCB0aGUgW1tFeHRlbnNpYmxlXV0gaW50ZXJuYWwgcHJvcGVydHkgb2YgRiB0byB0cnVl
LgorCisgICAgICAgIC8vIFRPRE8KKyAgICAgICAgLy8gMTkuIExldCB0aHJvd2VyIGJlIHRoZSBb
W1Rocm93VHlwZUVycm9yXV0gZnVuY3Rpb24gT2JqZWN0ICgxMy4yLjMpLgorICAgICAgICAvLyAy
MC4gQ2FsbCB0aGUgW1tEZWZpbmVPd25Qcm9wZXJ0eV1dIGludGVybmFsIG1ldGhvZCBvZiBGIHdp
dGgKKyAgICAgICAgLy8gICBhcmd1bWVudHMgImNhbGxlciIsIFByb3BlcnR5RGVzY3JpcHRvciB7
W1tHZXRdXTogdGhyb3dlciwgW1tTZXRdXToKKyAgICAgICAgLy8gICB0aHJvd2VyLCBbW0VudW1l
cmFibGVdXTogZmFsc2UsIFtbQ29uZmlndXJhYmxlXV06IGZhbHNlfSwgYW5kCisgICAgICAgIC8v
ICAgZmFsc2UuCisgICAgICAgIC8vIDIxLiBDYWxsIHRoZSBbW0RlZmluZU93blByb3BlcnR5XV0g
aW50ZXJuYWwgbWV0aG9kIG9mIEYgd2l0aAorICAgICAgICAvLyAgIGFyZ3VtZW50cyAiYXJndW1l
bnRzIiwgUHJvcGVydHlEZXNjcmlwdG9yIHtbW0dldF1dOiB0aHJvd2VyLAorICAgICAgICAvLyAg
IFtbU2V0XV06IHRocm93ZXIsIFtbRW51bWVyYWJsZV1dOiBmYWxzZSwgW1tDb25maWd1cmFibGVd
XTogZmFsc2V9LAorICAgICAgICAvLyAgIGFuZCBmYWxzZS4KKworICAgICAgICAvLyBUT0RPCisg
ICAgICAgIC8vIE5PVEUgRnVuY3Rpb24gb2JqZWN0cyBjcmVhdGVkIHVzaW5nIEZ1bmN0aW9uLnBy
b3RvdHlwZS5iaW5kIGRvIG5vdAorICAgICAgICAvLyBoYXZlIGEgcHJvdG90eXBlIHByb3BlcnR5
IG9yIHRoZSBbW0NvZGVdXSwgW1tGb3JtYWxQYXJhbWV0ZXJzXV0sIGFuZAorICAgICAgICAvLyBb
W1Njb3BlXV0gaW50ZXJuYWwgcHJvcGVydGllcy4KKyAgICAgICAgLy8gWFhYIGNhbid0IGRlbGV0
ZSBwcm90b3R5cGUgaW4gcHVyZS1qcy4KKworICAgICAgICAvLyAyMi4gUmV0dXJuIEYuCisgICAg
ICAgIHJldHVybiBib3VuZDsKKyAgICB9OworfQorCisvLyBTaG9ydGN1dCB0byBhbiBvZnRlbiBh
Y2Nlc3NlZCBwcm9wZXJ0aWVzLCBpbiBvcmRlciB0byBhdm9pZCBtdWx0aXBsZQorLy8gZGVyZWZl
cmVuY2UgdGhhdCBjb3N0cyB1bml2ZXJzYWxseS4KKy8vIF9QbGVhc2Ugbm90ZTogU2hvcnRjdXRz
IGFyZSBkZWZpbmVkIGFmdGVyIGBGdW5jdGlvbi5wcm90b3R5cGUuYmluZGAgYXMgd2UKKy8vIHVz
IGl0IGluIGRlZmluaW5nIHNob3J0Y3V0cy4KK3ZhciBjYWxsID0gRnVuY3Rpb24ucHJvdG90eXBl
LmNhbGw7Cit2YXIgcHJvdG90eXBlT2ZBcnJheSA9IEFycmF5LnByb3RvdHlwZTsKK3ZhciBwcm90
b3R5cGVPZk9iamVjdCA9IE9iamVjdC5wcm90b3R5cGU7Cit2YXIgc2xpY2UgPSBwcm90b3R5cGVP
ZkFycmF5LnNsaWNlOworLy8gSGF2aW5nIGEgdG9TdHJpbmcgbG9jYWwgdmFyaWFibGUgbmFtZSBi
cmVha3MgaW4gT3BlcmEgc28gdXNlIF90b1N0cmluZy4KK3ZhciBfdG9TdHJpbmcgPSBjYWxsLmJp
bmQocHJvdG90eXBlT2ZPYmplY3QudG9TdHJpbmcpOwordmFyIG93bnMgPSBjYWxsLmJpbmQocHJv
dG90eXBlT2ZPYmplY3QuaGFzT3duUHJvcGVydHkpOworCisvLyBJZiBKUyBlbmdpbmUgc3VwcG9y
dHMgYWNjZXNzb3JzIGNyZWF0aW5nIHNob3J0Y3V0cy4KK3ZhciBkZWZpbmVHZXR0ZXI7Cit2YXIg
ZGVmaW5lU2V0dGVyOwordmFyIGxvb2t1cEdldHRlcjsKK3ZhciBsb29rdXBTZXR0ZXI7Cit2YXIg
c3VwcG9ydHNBY2Nlc3NvcnM7CitpZiAoKHN1cHBvcnRzQWNjZXNzb3JzID0gb3ducyhwcm90b3R5
cGVPZk9iamVjdCwgIl9fZGVmaW5lR2V0dGVyX18iKSkpIHsKKyAgICBkZWZpbmVHZXR0ZXIgPSBj
YWxsLmJpbmQocHJvdG90eXBlT2ZPYmplY3QuX19kZWZpbmVHZXR0ZXJfXyk7CisgICAgZGVmaW5l
U2V0dGVyID0gY2FsbC5iaW5kKHByb3RvdHlwZU9mT2JqZWN0Ll9fZGVmaW5lU2V0dGVyX18pOwor
ICAgIGxvb2t1cEdldHRlciA9IGNhbGwuYmluZChwcm90b3R5cGVPZk9iamVjdC5fX2xvb2t1cEdl
dHRlcl9fKTsKKyAgICBsb29rdXBTZXR0ZXIgPSBjYWxsLmJpbmQocHJvdG90eXBlT2ZPYmplY3Qu
X19sb29rdXBTZXR0ZXJfXyk7Cit9CisKKy8vCisvLyBBcnJheQorLy8gPT09PT0KKy8vCisKKy8v
IEVTNSAxNS40LjMuMgorLy8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUuNC4zLjIKKy8vIGh0
dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2Jh
bF9PYmplY3RzL0FycmF5L2lzQXJyYXkKK2lmICghQXJyYXkuaXNBcnJheSkgeworICAgIEFycmF5
LmlzQXJyYXkgPSBmdW5jdGlvbiBpc0FycmF5KG9iaikgeworICAgICAgICByZXR1cm4gX3RvU3Ry
aW5nKG9iaikgPT0gIltvYmplY3QgQXJyYXldIjsKKyAgICB9OworfQorCisvLyBUaGUgSXNDYWxs
YWJsZSgpIGNoZWNrIGluIHRoZSBBcnJheSBmdW5jdGlvbnMKKy8vIGhhcyBiZWVuIHJlcGxhY2Vk
IHdpdGggYSBzdHJpY3QgY2hlY2sgb24gdGhlCisvLyBpbnRlcm5hbCBjbGFzcyBvZiB0aGUgb2Jq
ZWN0IHRvIHRyYXAgY2FzZXMgd2hlcmUKKy8vIHRoZSBwcm92aWRlZCBmdW5jdGlvbiB3YXMgYWN0
dWFsbHkgYSByZWd1bGFyCisvLyBleHByZXNzaW9uIGxpdGVyYWwsIHdoaWNoIGluIFY4IGFuZAor
Ly8gSmF2YVNjcmlwdENvcmUgaXMgYSB0eXBlb2YgImZ1bmN0aW9uIi4gIE9ubHkgaW4KKy8vIFY4
IGFyZSByZWd1bGFyIGV4cHJlc3Npb24gbGl0ZXJhbHMgcGVybWl0dGVkIGFzCisvLyByZWR1Y2Ug
cGFyYW1ldGVycywgc28gaXQgaXMgZGVzaXJhYmxlIGluIHRoZQorLy8gZ2VuZXJhbCBjYXNlIGZv
ciB0aGUgc2hpbSB0byBtYXRjaCB0aGUgbW9yZQorLy8gc3RyaWN0IGFuZCBjb21tb24gYmVoYXZp
b3Igb2YgcmVqZWN0aW5nIHJlZ3VsYXIKKy8vIGV4cHJlc3Npb25zLgorCisvLyBFUzUgMTUuNC40
LjE4CisvLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS40LjQuMTgKKy8vIGh0dHBzOi8vZGV2
ZWxvcGVyLm1vemlsbGEub3JnL2VuL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3Rz
L2FycmF5L2ZvckVhY2gKK2lmICghQXJyYXkucHJvdG90eXBlLmZvckVhY2gpIHsKKyAgICBBcnJh
eS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIGZvckVhY2goZnVuIC8qLCB0aGlzcCovKSB7
CisgICAgICAgIHZhciBzZWxmID0gdG9PYmplY3QodGhpcyksCisgICAgICAgICAgICB0aGlzcCA9
IGFyZ3VtZW50c1sxXSwKKyAgICAgICAgICAgIGkgPSAtMSwKKyAgICAgICAgICAgIGxlbmd0aCA9
IHNlbGYubGVuZ3RoID4+PiAwOworCisgICAgICAgIC8vIElmIG5vIGNhbGxiYWNrIGZ1bmN0aW9u
IG9yIGlmIGNhbGxiYWNrIGlzIG5vdCBhIGNhbGxhYmxlIGZ1bmN0aW9uCisgICAgICAgIGlmIChf
dG9TdHJpbmcoZnVuKSAhPSAiW29iamVjdCBGdW5jdGlvbl0iKSB7CisgICAgICAgICAgICB0aHJv
dyBuZXcgVHlwZUVycm9yKCk7IC8vIFRPRE8gbWVzc2FnZQorICAgICAgICB9CisKKyAgICAgICAg
d2hpbGUgKCsraSA8IGxlbmd0aCkgeworICAgICAgICAgICAgaWYgKGkgaW4gc2VsZikgeworICAg
ICAgICAgICAgICAgIC8vIEludm9rZSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gd2l0aCBjYWxsLCBw
YXNzaW5nIGFyZ3VtZW50czoKKyAgICAgICAgICAgICAgICAvLyBjb250ZXh0LCBwcm9wZXJ0eSB2
YWx1ZSwgcHJvcGVydHkga2V5LCB0aGlzQXJnIG9iamVjdCBjb250ZXh0CisgICAgICAgICAgICAg
ICAgZnVuLmNhbGwodGhpc3AsIHNlbGZbaV0sIGksIHNlbGYpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfTsKK30KKworLy8gRVM1IDE1LjQuNC4xOQorLy8gaHR0cDovL2VzNS5naXRo
dWIuY29tLyN4MTUuNC40LjE5CisvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9D
b3JlX0phdmFTY3JpcHRfMS41X1JlZmVyZW5jZS9PYmplY3RzL0FycmF5L21hcAoraWYgKCFBcnJh
eS5wcm90b3R5cGUubWFwKSB7CisgICAgQXJyYXkucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uIG1h
cChmdW4gLyosIHRoaXNwKi8pIHsKKyAgICAgICAgdmFyIHNlbGYgPSB0b09iamVjdCh0aGlzKSwK
KyAgICAgICAgICAgIGxlbmd0aCA9IHNlbGYubGVuZ3RoID4+PiAwLAorICAgICAgICAgICAgcmVz
dWx0ID0gQXJyYXkobGVuZ3RoKSwKKyAgICAgICAgICAgIHRoaXNwID0gYXJndW1lbnRzWzFdOwor
CisgICAgICAgIC8vIElmIG5vIGNhbGxiYWNrIGZ1bmN0aW9uIG9yIGlmIGNhbGxiYWNrIGlzIG5v
dCBhIGNhbGxhYmxlIGZ1bmN0aW9uCisgICAgICAgIGlmIChfdG9TdHJpbmcoZnVuKSAhPSAiW29i
amVjdCBGdW5jdGlvbl0iKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGZ1biAr
ICIgaXMgbm90IGEgZnVuY3Rpb24iKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGlmIChpIGluIHNlbGYpCisgICAg
ICAgICAgICAgICAgcmVzdWx0W2ldID0gZnVuLmNhbGwodGhpc3AsIHNlbGZbaV0sIGksIHNlbGYp
OworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfTsKK30KKworLy8gRVM1
IDE1LjQuNC4yMAorLy8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUuNC40LjIwCisvLyBodHRw
czovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9Db3JlX0phdmFTY3JpcHRfMS41X1JlZmVyZW5j
ZS9PYmplY3RzL0FycmF5L2ZpbHRlcgoraWYgKCFBcnJheS5wcm90b3R5cGUuZmlsdGVyKSB7Cisg
ICAgQXJyYXkucHJvdG90eXBlLmZpbHRlciA9IGZ1bmN0aW9uIGZpbHRlcihmdW4gLyosIHRoaXNw
ICovKSB7CisgICAgICAgIHZhciBzZWxmID0gdG9PYmplY3QodGhpcyksCisgICAgICAgICAgICBs
ZW5ndGggPSBzZWxmLmxlbmd0aCA+Pj4gMCwKKyAgICAgICAgICAgIHJlc3VsdCA9IFtdLAorICAg
ICAgICAgICAgdmFsdWUsCisgICAgICAgICAgICB0aGlzcCA9IGFyZ3VtZW50c1sxXTsKKworICAg
ICAgICAvLyBJZiBubyBjYWxsYmFjayBmdW5jdGlvbiBvciBpZiBjYWxsYmFjayBpcyBub3QgYSBj
YWxsYWJsZSBmdW5jdGlvbgorICAgICAgICBpZiAoX3RvU3RyaW5nKGZ1bikgIT0gIltvYmplY3Qg
RnVuY3Rpb25dIikgeworICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihmdW4gKyAiIGlz
IG5vdCBhIGZ1bmN0aW9uIik7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBpZiAoaSBpbiBzZWxmKSB7CisgICAgICAg
ICAgICAgICAgdmFsdWUgPSBzZWxmW2ldOworICAgICAgICAgICAgICAgIGlmIChmdW4uY2FsbCh0
aGlzcCwgdmFsdWUsIGksIHNlbGYpKSB7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNo
KHZhbHVlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9OworfQorCisvLyBFUzUgMTUuNC40LjE2CisvLyBo
dHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS40LjQuMTYKKy8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1v
emlsbGEub3JnL2VuL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0FycmF5L2V2
ZXJ5CitpZiAoIUFycmF5LnByb3RvdHlwZS5ldmVyeSkgeworICAgIEFycmF5LnByb3RvdHlwZS5l
dmVyeSA9IGZ1bmN0aW9uIGV2ZXJ5KGZ1biAvKiwgdGhpc3AgKi8pIHsKKyAgICAgICAgdmFyIHNl
bGYgPSB0b09iamVjdCh0aGlzKSwKKyAgICAgICAgICAgIGxlbmd0aCA9IHNlbGYubGVuZ3RoID4+
PiAwLAorICAgICAgICAgICAgdGhpc3AgPSBhcmd1bWVudHNbMV07CisKKyAgICAgICAgLy8gSWYg
bm8gY2FsbGJhY2sgZnVuY3Rpb24gb3IgaWYgY2FsbGJhY2sgaXMgbm90IGEgY2FsbGFibGUgZnVu
Y3Rpb24KKyAgICAgICAgaWYgKF90b1N0cmluZyhmdW4pICE9ICJbb2JqZWN0IEZ1bmN0aW9uXSIp
IHsKKyAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoZnVuICsgIiBpcyBub3QgYSBmdW5j
dGlvbiIpOworICAgICAgICB9CisKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7
IGkrKykgeworICAgICAgICAgICAgaWYgKGkgaW4gc2VsZiAmJiAhZnVuLmNhbGwodGhpc3AsIHNl
bGZbaV0sIGksIHNlbGYpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH07Cit9CisKKy8v
IEVTNSAxNS40LjQuMTcKKy8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjQuNC4xNworLy8g
aHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xv
YmFsX09iamVjdHMvQXJyYXkvc29tZQoraWYgKCFBcnJheS5wcm90b3R5cGUuc29tZSkgeworICAg
IEFycmF5LnByb3RvdHlwZS5zb21lID0gZnVuY3Rpb24gc29tZShmdW4gLyosIHRoaXNwICovKSB7
CisgICAgICAgIHZhciBzZWxmID0gdG9PYmplY3QodGhpcyksCisgICAgICAgICAgICBsZW5ndGgg
PSBzZWxmLmxlbmd0aCA+Pj4gMCwKKyAgICAgICAgICAgIHRoaXNwID0gYXJndW1lbnRzWzFdOwor
CisgICAgICAgIC8vIElmIG5vIGNhbGxiYWNrIGZ1bmN0aW9uIG9yIGlmIGNhbGxiYWNrIGlzIG5v
dCBhIGNhbGxhYmxlIGZ1bmN0aW9uCisgICAgICAgIGlmIChfdG9TdHJpbmcoZnVuKSAhPSAiW29i
amVjdCBGdW5jdGlvbl0iKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGZ1biAr
ICIgaXMgbm90IGEgZnVuY3Rpb24iKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGlmIChpIGluIHNlbGYgJiYgZnVu
LmNhbGwodGhpc3AsIHNlbGZbaV0sIGksIHNlbGYpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH07Cit9CisKKy8vIEVTNSAxNS40LjQuMjEKKy8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8j
eDE1LjQuNC4yMQorLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vQ29yZV9KYXZh
U2NyaXB0XzEuNV9SZWZlcmVuY2UvT2JqZWN0cy9BcnJheS9yZWR1Y2UKK2lmICghQXJyYXkucHJv
dG90eXBlLnJlZHVjZSkgeworICAgIEFycmF5LnByb3RvdHlwZS5yZWR1Y2UgPSBmdW5jdGlvbiBy
ZWR1Y2UoZnVuIC8qLCBpbml0aWFsKi8pIHsKKyAgICAgICAgdmFyIHNlbGYgPSB0b09iamVjdCh0
aGlzKSwKKyAgICAgICAgICAgIGxlbmd0aCA9IHNlbGYubGVuZ3RoID4+PiAwOworCisgICAgICAg
IC8vIElmIG5vIGNhbGxiYWNrIGZ1bmN0aW9uIG9yIGlmIGNhbGxiYWNrIGlzIG5vdCBhIGNhbGxh
YmxlIGZ1bmN0aW9uCisgICAgICAgIGlmIChfdG9TdHJpbmcoZnVuKSAhPSAiW29iamVjdCBGdW5j
dGlvbl0iKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGZ1biArICIgaXMgbm90
IGEgZnVuY3Rpb24iKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIG5vIHZhbHVlIHRvIHJldHVy
biBpZiBubyBpbml0aWFsIHZhbHVlIGFuZCBhbiBlbXB0eSBhcnJheQorICAgICAgICBpZiAoIWxl
bmd0aCAmJiBhcmd1bWVudHMubGVuZ3RoID09IDEpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBU
eXBlRXJyb3IoJ3JlZHVjZSBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWUnKTsK
KyAgICAgICAgfQorCisgICAgICAgIHZhciBpID0gMDsKKyAgICAgICAgdmFyIHJlc3VsdDsKKyAg
ICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPj0gMikgeworICAgICAgICAgICAgcmVzdWx0ID0g
YXJndW1lbnRzWzFdOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZG8geworICAgICAg
ICAgICAgICAgIGlmIChpIGluIHNlbGYpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0g
c2VsZltpKytdOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICAvLyBpZiBhcnJheSBjb250YWlucyBubyB2YWx1ZXMsIG5vIGlu
aXRpYWwgdmFsdWUgdG8gcmV0dXJuCisgICAgICAgICAgICAgICAgaWYgKCsraSA+PSBsZW5ndGgp
IHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigncmVkdWNlIG9mIGVt
cHR5IGFycmF5IHdpdGggbm8gaW5pdGlhbCB2YWx1ZScpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0gd2hpbGUgKHRydWUpOworICAgICAgICB9CisKKyAgICAgICAgZm9yICg7IGkg
PCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgaWYgKGkgaW4gc2VsZikgeworICAgICAgICAg
ICAgICAgIHJlc3VsdCA9IGZ1bi5jYWxsKHZvaWQgMCwgcmVzdWx0LCBzZWxmW2ldLCBpLCBzZWxm
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgfTsKK30KKworLy8gRVM1IDE1LjQuNC4yMgorLy8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4
MTUuNC40LjIyCisvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9Db3JlX0phdmFT
Y3JpcHRfMS41X1JlZmVyZW5jZS9PYmplY3RzL0FycmF5L3JlZHVjZVJpZ2h0CitpZiAoIUFycmF5
LnByb3RvdHlwZS5yZWR1Y2VSaWdodCkgeworICAgIEFycmF5LnByb3RvdHlwZS5yZWR1Y2VSaWdo
dCA9IGZ1bmN0aW9uIHJlZHVjZVJpZ2h0KGZ1biAvKiwgaW5pdGlhbCovKSB7CisgICAgICAgIHZh
ciBzZWxmID0gdG9PYmplY3QodGhpcyksCisgICAgICAgICAgICBsZW5ndGggPSBzZWxmLmxlbmd0
aCA+Pj4gMDsKKworICAgICAgICAvLyBJZiBubyBjYWxsYmFjayBmdW5jdGlvbiBvciBpZiBjYWxs
YmFjayBpcyBub3QgYSBjYWxsYWJsZSBmdW5jdGlvbgorICAgICAgICBpZiAoX3RvU3RyaW5nKGZ1
bikgIT0gIltvYmplY3QgRnVuY3Rpb25dIikgeworICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVF
cnJvcihmdW4gKyAiIGlzIG5vdCBhIGZ1bmN0aW9uIik7CisgICAgICAgIH0KKworICAgICAgICAv
LyBubyB2YWx1ZSB0byByZXR1cm4gaWYgbm8gaW5pdGlhbCB2YWx1ZSwgZW1wdHkgYXJyYXkKKyAg
ICAgICAgaWYgKCFsZW5ndGggJiYgYXJndW1lbnRzLmxlbmd0aCA9PSAxKSB7CisgICAgICAgICAg
ICB0aHJvdyBuZXcgVHlwZUVycm9yKCdyZWR1Y2VSaWdodCBvZiBlbXB0eSBhcnJheSB3aXRoIG5v
IGluaXRpYWwgdmFsdWUnKTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciByZXN1bHQsIGkgPSBs
ZW5ndGggLSAxOworICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+PSAyKSB7CisgICAgICAg
ICAgICByZXN1bHQgPSBhcmd1bWVudHNbMV07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBkbyB7CisgICAgICAgICAgICAgICAgaWYgKGkgaW4gc2VsZikgeworICAgICAgICAgICAgICAg
ICAgICByZXN1bHQgPSBzZWxmW2ktLV07CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIGlmIGFycmF5IGNvbnRhaW5zIG5v
IHZhbHVlcywgbm8gaW5pdGlhbCB2YWx1ZSB0byByZXR1cm4KKyAgICAgICAgICAgICAgICBpZiAo
LS1pIDwgMCkgeworICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdyZWR1
Y2VSaWdodCBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWUnKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9IHdoaWxlICh0cnVlKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGRvIHsKKyAgICAgICAgICAgIGlmIChpIGluIHRoaXMpIHsKKyAgICAgICAgICAgICAgICBy
ZXN1bHQgPSBmdW4uY2FsbCh2b2lkIDAsIHJlc3VsdCwgc2VsZltpXSwgaSwgc2VsZik7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0gd2hpbGUgKGktLSk7CisKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICB9OworfQorCisvLyBFUzUgMTUuNC40LjE0CisvLyBodHRwOi8vZXM1LmdpdGh1Yi5j
b20vI3gxNS40LjQuMTQKKy8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL0phdmFT
Y3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0FycmF5L2luZGV4T2YKK2lmICghQXJyYXku
cHJvdG90eXBlLmluZGV4T2YpIHsKKyAgICBBcnJheS5wcm90b3R5cGUuaW5kZXhPZiA9IGZ1bmN0
aW9uIGluZGV4T2Yoc291Z2h0IC8qLCBmcm9tSW5kZXggKi8gKSB7CisgICAgICAgIHZhciBzZWxm
ID0gdG9PYmplY3QodGhpcyksCisgICAgICAgICAgICBsZW5ndGggPSBzZWxmLmxlbmd0aCA+Pj4g
MDsKKworICAgICAgICBpZiAoIWxlbmd0aCkgeworICAgICAgICAgICAgcmV0dXJuIC0xOworICAg
ICAgICB9CisKKyAgICAgICAgdmFyIGkgPSAwOworICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0
aCA+IDEpIHsKKyAgICAgICAgICAgIGkgPSB0b0ludGVnZXIoYXJndW1lbnRzWzFdKTsKKyAgICAg
ICAgfQorCisgICAgICAgIC8vIGhhbmRsZSBuZWdhdGl2ZSBpbmRpY2VzCisgICAgICAgIGkgPSBp
ID49IDAgPyBpIDogTWF0aC5tYXgoMCwgbGVuZ3RoICsgaSk7CisgICAgICAgIGZvciAoOyBpIDwg
bGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGlmIChpIGluIHNlbGYgJiYgc2VsZltpXSA9PT0g
c291Z2h0KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIC0xOworICAgIH07Cit9CisKKy8vIEVTNSAxNS40LjQuMTUK
Ky8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjQuNC4xNQorLy8gaHR0cHM6Ly9kZXZlbG9w
ZXIubW96aWxsYS5vcmcvZW4vSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvQXJy
YXkvbGFzdEluZGV4T2YKK2lmICghQXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mKSB7CisgICAg
QXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mID0gZnVuY3Rpb24gbGFzdEluZGV4T2Yoc291Z2h0
IC8qLCBmcm9tSW5kZXggKi8pIHsKKyAgICAgICAgdmFyIHNlbGYgPSB0b09iamVjdCh0aGlzKSwK
KyAgICAgICAgICAgIGxlbmd0aCA9IHNlbGYubGVuZ3RoID4+PiAwOworCisgICAgICAgIGlmICgh
bGVuZ3RoKSB7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgdmFy
IGkgPSBsZW5ndGggLSAxOworICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHsKKyAg
ICAgICAgICAgIGkgPSBNYXRoLm1pbihpLCB0b0ludGVnZXIoYXJndW1lbnRzWzFdKSk7CisgICAg
ICAgIH0KKyAgICAgICAgLy8gaGFuZGxlIG5lZ2F0aXZlIGluZGljZXMKKyAgICAgICAgaSA9IGkg
Pj0gMCA/IGkgOiBsZW5ndGggLSBNYXRoLmFicyhpKTsKKyAgICAgICAgZm9yICg7IGkgPj0gMDsg
aS0tKSB7CisgICAgICAgICAgICBpZiAoaSBpbiBzZWxmICYmIHNvdWdodCA9PT0gc2VsZltpXSkg
eworICAgICAgICAgICAgICAgIHJldHVybiBpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIHJldHVybiAtMTsKKyAgICB9OworfQorCisvLworLy8gT2JqZWN0CisvLyA9PT09PT0K
Ky8vCisKKy8vIEVTNSAxNS4yLjMuMTQKKy8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjIu
My4xNAoraWYgKCFPYmplY3Qua2V5cykgeworICAgIC8vIGh0dHA6Ly93aGF0dGhlaGVhZHNhaWQu
Y29tLzIwMTAvMTAvYS1zYWZlci1vYmplY3Qta2V5cy1jb21wYXRpYmlsaXR5LWltcGxlbWVudGF0
aW9uCisgICAgdmFyIGhhc0RvbnRFbnVtQnVnID0gdHJ1ZSwKKyAgICAgICAgZG9udEVudW1zID0g
WworICAgICAgICAgICAgInRvU3RyaW5nIiwKKyAgICAgICAgICAgICJ0b0xvY2FsZVN0cmluZyIs
CisgICAgICAgICAgICAidmFsdWVPZiIsCisgICAgICAgICAgICAiaGFzT3duUHJvcGVydHkiLAor
ICAgICAgICAgICAgImlzUHJvdG90eXBlT2YiLAorICAgICAgICAgICAgInByb3BlcnR5SXNFbnVt
ZXJhYmxlIiwKKyAgICAgICAgICAgICJjb25zdHJ1Y3RvciIKKyAgICAgICAgXSwKKyAgICAgICAg
ZG9udEVudW1zTGVuZ3RoID0gZG9udEVudW1zLmxlbmd0aDsKKworICAgIGZvciAodmFyIGtleSBp
biB7InRvU3RyaW5nIjogbnVsbH0pIHsKKyAgICAgICAgaGFzRG9udEVudW1CdWcgPSBmYWxzZTsK
KyAgICB9CisKKyAgICBPYmplY3Qua2V5cyA9IGZ1bmN0aW9uIGtleXMob2JqZWN0KSB7CisKKyAg
ICAgICAgaWYgKCh0eXBlb2Ygb2JqZWN0ICE9ICJvYmplY3QiICYmIHR5cGVvZiBvYmplY3QgIT0g
ImZ1bmN0aW9uIikgfHwgb2JqZWN0ID09PSBudWxsKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcg
VHlwZUVycm9yKCJPYmplY3Qua2V5cyBjYWxsZWQgb24gYSBub24tb2JqZWN0Iik7CisgICAgICAg
IH0KKworICAgICAgICB2YXIga2V5cyA9IFtdOworICAgICAgICBmb3IgKHZhciBuYW1lIGluIG9i
amVjdCkgeworICAgICAgICAgICAgaWYgKG93bnMob2JqZWN0LCBuYW1lKSkgeworICAgICAgICAg
ICAgICAgIGtleXMucHVzaChuYW1lKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChoYXNEb250RW51bUJ1ZykgeworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlp
ID0gZG9udEVudW1zTGVuZ3RoOyBpIDwgaWk7IGkrKykgeworICAgICAgICAgICAgICAgIHZhciBk
b250RW51bSA9IGRvbnRFbnVtc1tpXTsKKyAgICAgICAgICAgICAgICBpZiAob3ducyhvYmplY3Qs
IGRvbnRFbnVtKSkgeworICAgICAgICAgICAgICAgICAgICBrZXlzLnB1c2goZG9udEVudW0pOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1
cm4ga2V5czsKKyAgICB9OworCit9CisKKy8vCisvLyBEYXRlCisvLyA9PT09CisvLworCisvLyBF
UzUgMTUuOS41LjQzCisvLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS45LjUuNDMKKy8vIFRo
aXMgZnVuY3Rpb24gcmV0dXJucyBhIFN0cmluZyB2YWx1ZSByZXByZXNlbnQgdGhlIGluc3RhbmNl
IGluIHRpbWUKKy8vIHJlcHJlc2VudGVkIGJ5IHRoaXMgRGF0ZSBvYmplY3QuIFRoZSBmb3JtYXQg
b2YgdGhlIFN0cmluZyBpcyB0aGUgRGF0ZSBUaW1lCisvLyBzdHJpbmcgZm9ybWF0IGRlZmluZWQg
aW4gMTUuOS4xLjE1LiBBbGwgZmllbGRzIGFyZSBwcmVzZW50IGluIHRoZSBTdHJpbmcuCisvLyBU
aGUgdGltZSB6b25lIGlzIGFsd2F5cyBVVEMsIGRlbm90ZWQgYnkgdGhlIHN1ZmZpeCBaLiBJZiB0
aGUgdGltZSB2YWx1ZSBvZgorLy8gdGhpcyBvYmplY3QgaXMgbm90IGEgZmluaXRlIE51bWJlciBh
IFJhbmdlRXJyb3IgZXhjZXB0aW9uIGlzIHRocm93bi4KK2lmICghRGF0ZS5wcm90b3R5cGUudG9J
U09TdHJpbmcgfHwgKG5ldyBEYXRlKC02MjE5ODc1NTIwMDAwMCkudG9JU09TdHJpbmcoKS5pbmRl
eE9mKCctMDAwMDAxJykgPT09IC0xKSkgeworICAgIERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5n
ID0gZnVuY3Rpb24gdG9JU09TdHJpbmcoKSB7CisgICAgICAgIHZhciByZXN1bHQsIGxlbmd0aCwg
dmFsdWUsIHllYXI7CisgICAgICAgIGlmICghaXNGaW5pdGUodGhpcykpIHsKKyAgICAgICAgICAg
IHRocm93IG5ldyBSYW5nZUVycm9yKCJEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZyBjYWxsZWQg
b24gbm9uLWZpbml0ZSB2YWx1ZS4iKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIHRoZSBkYXRl
IHRpbWUgc3RyaW5nIGZvcm1hdCBpcyBzcGVjaWZpZWQgaW4gMTUuOS4xLjE1LgorICAgICAgICBy
ZXN1bHQgPSBbdGhpcy5nZXRVVENNb250aCgpICsgMSwgdGhpcy5nZXRVVENEYXRlKCksCisgICAg
ICAgICAgICB0aGlzLmdldFVUQ0hvdXJzKCksIHRoaXMuZ2V0VVRDTWludXRlcygpLCB0aGlzLmdl
dFVUQ1NlY29uZHMoKV07CisgICAgICAgIHllYXIgPSB0aGlzLmdldFVUQ0Z1bGxZZWFyKCk7Cisg
ICAgICAgIHllYXIgPSAoeWVhciA8IDAgPyAnLScgOiAoeWVhciA+IDk5OTkgPyAnKycgOiAnJykp
ICsgKCcwMDAwMCcgKyBNYXRoLmFicyh5ZWFyKSkuc2xpY2UoMCA8PSB5ZWFyICYmIHllYXIgPD0g
OTk5OSA/IC00IDogLTYpOworCisgICAgICAgIGxlbmd0aCA9IHJlc3VsdC5sZW5ndGg7CisgICAg
ICAgIHdoaWxlIChsZW5ndGgtLSkgeworICAgICAgICAgICAgdmFsdWUgPSByZXN1bHRbbGVuZ3Ro
XTsKKyAgICAgICAgICAgIC8vIHBhZCBtb250aHMsIGRheXMsIGhvdXJzLCBtaW51dGVzLCBhbmQg
c2Vjb25kcyB0byBoYXZlIHR3byBkaWdpdHMuCisgICAgICAgICAgICBpZiAodmFsdWUgPCAxMCkg
eworICAgICAgICAgICAgICAgIHJlc3VsdFtsZW5ndGhdID0gIjAiICsgdmFsdWU7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLy8gcGFkIG1pbGxpc2Vjb25kcyB0byBoYXZlIHRo
cmVlIGRpZ2l0cy4KKyAgICAgICAgcmV0dXJuIHllYXIgKyAiLSIgKyByZXN1bHQuc2xpY2UoMCwg
Mikuam9pbigiLSIpICsgIlQiICsgcmVzdWx0LnNsaWNlKDIpLmpvaW4oIjoiKSArICIuIiArCisg
ICAgICAgICAgICAoIjAwMCIgKyB0aGlzLmdldFVUQ01pbGxpc2Vjb25kcygpKS5zbGljZSgtMykg
KyAiWiI7CisgICAgfQorfQorCisvLyBFUzUgMTUuOS40LjQKKy8vIGh0dHA6Ly9lczUuZ2l0aHVi
LmNvbS8jeDE1LjkuNC40CitpZiAoIURhdGUubm93KSB7CisgICAgRGF0ZS5ub3cgPSBmdW5jdGlv
biBub3coKSB7CisgICAgICAgIHJldHVybiBuZXcgRGF0ZSgpLmdldFRpbWUoKTsKKyAgICB9Owor
fQorCisvLyBFUzUgMTUuOS41LjQ0CisvLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS45LjUu
NDQKKy8vIFRoaXMgZnVuY3Rpb24gcHJvdmlkZXMgYSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2Yg
YSBEYXRlIG9iamVjdCBmb3IgdXNlIGJ5CisvLyBKU09OLnN0cmluZ2lmeSAoMTUuMTIuMykuCitp
ZiAoIURhdGUucHJvdG90eXBlLnRvSlNPTikgeworICAgIERhdGUucHJvdG90eXBlLnRvSlNPTiA9
IGZ1bmN0aW9uIHRvSlNPTihrZXkpIHsKKyAgICAgICAgLy8gV2hlbiB0aGUgdG9KU09OIG1ldGhv
ZCBpcyBjYWxsZWQgd2l0aCBhcmd1bWVudCBrZXksIHRoZSBmb2xsb3dpbmcKKyAgICAgICAgLy8g
c3RlcHMgYXJlIHRha2VuOgorCisgICAgICAgIC8vIDEuICBMZXQgTyBiZSB0aGUgcmVzdWx0IG9m
IGNhbGxpbmcgVG9PYmplY3QsIGdpdmluZyBpdCB0aGUgdGhpcworICAgICAgICAvLyB2YWx1ZSBh
cyBpdHMgYXJndW1lbnQuCisgICAgICAgIC8vIDIuIExldCB0diBiZSBUb1ByaW1pdGl2ZShPLCBo
aW50IE51bWJlcikuCisgICAgICAgIC8vIDMuIElmIHR2IGlzIGEgTnVtYmVyIGFuZCBpcyBub3Qg
ZmluaXRlLCByZXR1cm4gbnVsbC4KKyAgICAgICAgLy8gWFhYCisgICAgICAgIC8vIDQuIExldCB0
b0lTTyBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIFtbR2V0XV0gaW50ZXJuYWwgbWV0aG9k
IG9mCisgICAgICAgIC8vIE8gd2l0aCBhcmd1bWVudCAidG9JU09TdHJpbmciLgorICAgICAgICAv
LyA1LiBJZiBJc0NhbGxhYmxlKHRvSVNPKSBpcyBmYWxzZSwgdGhyb3cgYSBUeXBlRXJyb3IgZXhj
ZXB0aW9uLgorICAgICAgICBpZiAodHlwZW9mIHRoaXMudG9JU09TdHJpbmcgIT0gImZ1bmN0aW9u
IikgeworICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndG9JU09TdHJpbmcgcHJvcGVy
dHkgaXMgbm90IGNhbGxhYmxlJyk7CisgICAgICAgIH0KKyAgICAgICAgLy8gNi4gUmV0dXJuIHRo
ZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tDYWxsXV0gaW50ZXJuYWwgbWV0aG9kIG9mCisgICAg
ICAgIC8vICB0b0lTTyB3aXRoIE8gYXMgdGhlIHRoaXMgdmFsdWUgYW5kIGFuIGVtcHR5IGFyZ3Vt
ZW50IGxpc3QuCisgICAgICAgIHJldHVybiB0aGlzLnRvSVNPU3RyaW5nKCk7CisKKyAgICAgICAg
Ly8gTk9URSAxIFRoZSBhcmd1bWVudCBpcyBpZ25vcmVkLgorCisgICAgICAgIC8vIE5PVEUgMiBU
aGUgdG9KU09OIGZ1bmN0aW9uIGlzIGludGVudGlvbmFsbHkgZ2VuZXJpYzsgaXQgZG9lcyBub3QK
KyAgICAgICAgLy8gcmVxdWlyZSB0aGF0IGl0cyB0aGlzIHZhbHVlIGJlIGEgRGF0ZSBvYmplY3Qu
IFRoZXJlZm9yZSwgaXQgY2FuIGJlCisgICAgICAgIC8vIHRyYW5zZmVycmVkIHRvIG90aGVyIGtp
bmRzIG9mIG9iamVjdHMgZm9yIHVzZSBhcyBhIG1ldGhvZC4gSG93ZXZlciwKKyAgICAgICAgLy8g
aXQgZG9lcyByZXF1aXJlIHRoYXQgYW55IHN1Y2ggb2JqZWN0IGhhdmUgYSB0b0lTT1N0cmluZyBt
ZXRob2QuIEFuCisgICAgICAgIC8vIG9iamVjdCBpcyBmcmVlIHRvIHVzZSB0aGUgYXJndW1lbnQg
a2V5IHRvIGZpbHRlciBpdHMKKyAgICAgICAgLy8gc3RyaW5naWZpY2F0aW9uLgorICAgIH07Cit9
CisKKy8vIEVTNSAxNS45LjQuMgorLy8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUuOS40LjIK
Ky8vIGJhc2VkIG9uIHdvcmsgc2hhcmVkIGJ5IERhbmllbCBGcmllc2VuIChkYW50bWFuKQorLy8g
aHR0cDovL2dpc3QuZ2l0aHViLmNvbS8zMDMyNDkKK2lmICghRGF0ZS5wYXJzZSB8fCBEYXRlLnBh
cnNlKCIrMjc1NzYwLTA5LTEzVDAwOjAwOjAwLjAwMFoiKSAhPT0gOC42NGUxNSkgeworICAgIC8v
IFhYWCBnbG9iYWwgYXNzaWdubWVudCB3b24ndCB3b3JrIGluIGVtYmVkZGluZ3MgdGhhdCB1c2UK
KyAgICAvLyBhbiBhbHRlcm5hdGUgb2JqZWN0IGZvciB0aGUgY29udGV4dC4KKyAgICBEYXRlID0g
KGZ1bmN0aW9uKE5hdGl2ZURhdGUpIHsKKworICAgICAgICAvLyBEYXRlLmxlbmd0aCA9PT0gNwor
ICAgICAgICB2YXIgRGF0ZSA9IGZ1bmN0aW9uIERhdGUoWSwgTSwgRCwgaCwgbSwgcywgbXMpIHsK
KyAgICAgICAgICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoOworICAgICAgICAgICAg
aWYgKHRoaXMgaW5zdGFuY2VvZiBOYXRpdmVEYXRlKSB7CisgICAgICAgICAgICAgICAgdmFyIGRh
dGUgPSBsZW5ndGggPT0gMSAmJiBTdHJpbmcoWSkgPT09IFkgPyAvLyBpc1N0cmluZyhZKQorICAg
ICAgICAgICAgICAgICAgICAvLyBXZSBleHBsaWNpdGx5IHBhc3MgaXQgdGhyb3VnaCBwYXJzZToK
KyAgICAgICAgICAgICAgICAgICAgbmV3IE5hdGl2ZURhdGUoRGF0ZS5wYXJzZShZKSkgOgorICAg
ICAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIHRvIG1hbnVhbGx5IG1ha2UgY2FsbHMgZGVwZW5k
aW5nIG9uIGFyZ3VtZW50CisgICAgICAgICAgICAgICAgICAgIC8vIGxlbmd0aCBoZXJlCisgICAg
ICAgICAgICAgICAgICAgIGxlbmd0aCA+PSA3ID8gbmV3IE5hdGl2ZURhdGUoWSwgTSwgRCwgaCwg
bSwgcywgbXMpIDoKKyAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID49IDYgPyBuZXcgTmF0aXZl
RGF0ZShZLCBNLCBELCBoLCBtLCBzKSA6CisgICAgICAgICAgICAgICAgICAgIGxlbmd0aCA+PSA1
ID8gbmV3IE5hdGl2ZURhdGUoWSwgTSwgRCwgaCwgbSkgOgorICAgICAgICAgICAgICAgICAgICBs
ZW5ndGggPj0gNCA/IG5ldyBOYXRpdmVEYXRlKFksIE0sIEQsIGgpIDoKKyAgICAgICAgICAgICAg
ICAgICAgbGVuZ3RoID49IDMgPyBuZXcgTmF0aXZlRGF0ZShZLCBNLCBEKSA6CisgICAgICAgICAg
ICAgICAgICAgIGxlbmd0aCA+PSAyID8gbmV3IE5hdGl2ZURhdGUoWSwgTSkgOgorICAgICAgICAg
ICAgICAgICAgICBsZW5ndGggPj0gMSA/IG5ldyBOYXRpdmVEYXRlKFkpIDoKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBuZXcgTmF0aXZlRGF0ZSgpOworICAgICAgICAgICAgICAg
IC8vIFByZXZlbnQgbWl4dXBzIHdpdGggdW5maXhlZCBEYXRlIG9iamVjdAorICAgICAgICAgICAg
ICAgIGRhdGUuY29uc3RydWN0b3IgPSBEYXRlOworICAgICAgICAgICAgICAgIHJldHVybiBkYXRl
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIE5hdGl2ZURhdGUuYXBwbHkodGhp
cywgYXJndW1lbnRzKTsKKyAgICAgICAgfTsKKworICAgICAgICAvLyAxNS45LjEuMTUgRGF0ZSBU
aW1lIFN0cmluZyBGb3JtYXQuCisgICAgICAgIHZhciBpc29EYXRlRXhwcmVzc2lvbiA9IG5ldyBS
ZWdFeHAoIl4iICsKKyAgICAgICAgICAgICIoXFxkezR9fFtcK1wtXVxcZHs2fSkiICsgLy8gZm91
ci1kaWdpdCB5ZWFyIGNhcHR1cmUgb3Igc2lnbiArIDYtZGlnaXQgZXh0ZW5kZWQgeWVhcgorICAg
ICAgICAgICAgIig/Oi0oXFxkezJ9KSIgKyAvLyBvcHRpb25hbCBtb250aCBjYXB0dXJlCisgICAg
ICAgICAgICAiKD86LShcXGR7Mn0pIiArIC8vIG9wdGlvbmFsIGRheSBjYXB0dXJlCisgICAgICAg
ICAgICAiKD86IiArIC8vIGNhcHR1cmUgaG91cnM6bWludXRlczpzZWNvbmRzLm1pbGxpc2Vjb25k
cworICAgICAgICAgICAgICAgICJUKFxcZHsyfSkiICsgLy8gaG91cnMgY2FwdHVyZQorICAgICAg
ICAgICAgICAgICI6KFxcZHsyfSkiICsgLy8gbWludXRlcyBjYXB0dXJlCisgICAgICAgICAgICAg
ICAgIig/OiIgKyAvLyBvcHRpb25hbCA6c2Vjb25kcy5taWxsaXNlY29uZHMKKyAgICAgICAgICAg
ICAgICAgICAgIjooXFxkezJ9KSIgKyAvLyBzZWNvbmRzIGNhcHR1cmUKKyAgICAgICAgICAgICAg
ICAgICAgIig/OlxcLihcXGR7M30pKT8iICsgLy8gbWlsbGlzZWNvbmRzIGNhcHR1cmUKKyAgICAg
ICAgICAgICAgICAiKT8iICsKKyAgICAgICAgICAgICIoPzoiICsgLy8gY2FwdHVyZSBVVEMgb2Zm
c2V0IGNvbXBvbmVudAorICAgICAgICAgICAgICAgICJafCIgKyAvLyBVVEMgY2FwdHVyZQorICAg
ICAgICAgICAgICAgICIoPzoiICsgLy8gb2Zmc2V0IHNwZWNpZmllciArLy1ob3VyczptaW51dGVz
CisgICAgICAgICAgICAgICAgICAgICIoWy0rXSkiICsgLy8gc2lnbiBjYXB0dXJlCisgICAgICAg
ICAgICAgICAgICAgICIoXFxkezJ9KSIgKyAvLyBob3VycyBvZmZzZXQgY2FwdHVyZQorICAgICAg
ICAgICAgICAgICAgICAiOihcXGR7Mn0pIiArIC8vIG1pbnV0ZXMgb2Zmc2V0IGNhcHR1cmUKKyAg
ICAgICAgICAgICAgICAiKSIgKworICAgICAgICAgICAgIik/KT8pPyk/IiArCisgICAgICAgICIk
Iik7CisKKyAgICAgICAgLy8gQ29weSBhbnkgY3VzdG9tIG1ldGhvZHMgYSAzcmQgcGFydHkgbGli
cmFyeSBtYXkgaGF2ZSBhZGRlZAorICAgICAgICBmb3IgKHZhciBrZXkgaW4gTmF0aXZlRGF0ZSkg
eworICAgICAgICAgICAgRGF0ZVtrZXldID0gTmF0aXZlRGF0ZVtrZXldOworICAgICAgICB9CisK
KyAgICAgICAgLy8gQ29weSAibmF0aXZlIiBtZXRob2RzIGV4cGxpY2l0bHk7IHRoZXkgbWF5IGJl
IG5vbi1lbnVtZXJhYmxlCisgICAgICAgIERhdGUubm93ID0gTmF0aXZlRGF0ZS5ub3c7CisgICAg
ICAgIERhdGUuVVRDID0gTmF0aXZlRGF0ZS5VVEM7CisgICAgICAgIERhdGUucHJvdG90eXBlID0g
TmF0aXZlRGF0ZS5wcm90b3R5cGU7CisgICAgICAgIERhdGUucHJvdG90eXBlLmNvbnN0cnVjdG9y
ID0gRGF0ZTsKKworICAgICAgICAvLyBVcGdyYWRlIERhdGUucGFyc2UgdG8gaGFuZGxlIHNpbXBs
aWZpZWQgSVNPIDg2MDEgc3RyaW5ncworICAgICAgICBEYXRlLnBhcnNlID0gZnVuY3Rpb24gcGFy
c2Uoc3RyaW5nKSB7CisgICAgICAgICAgICB2YXIgbWF0Y2ggPSBpc29EYXRlRXhwcmVzc2lvbi5l
eGVjKHN0cmluZyk7CisgICAgICAgICAgICBpZiAobWF0Y2gpIHsKKyAgICAgICAgICAgICAgICBt
YXRjaC5zaGlmdCgpOyAvLyBraWxsIG1hdGNoWzBdLCB0aGUgZnVsbCBtYXRjaAorICAgICAgICAg
ICAgICAgIC8vIHBhcnNlIG1vbnRocywgZGF5cywgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIGFu
ZCBtaWxsaXNlY29uZHMKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IDc7IGkr
KykgeworICAgICAgICAgICAgICAgICAgICAvLyBwcm92aWRlIGRlZmF1bHQgdmFsdWVzIGlmIG5l
Y2Vzc2FyeQorICAgICAgICAgICAgICAgICAgICBtYXRjaFtpXSA9ICsobWF0Y2hbaV0gfHwgKGkg
PCAzID8gMSA6IDApKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gbWF0Y2hbMV0gaXMgdGhlIG1v
bnRoLiBNb250aHMgYXJlIDAtMTEgaW4gSmF2YVNjcmlwdAorICAgICAgICAgICAgICAgICAgICAv
LyBgRGF0ZWAgb2JqZWN0cywgYnV0IDEtMTIgaW4gSVNPIG5vdGF0aW9uLCBzbyB3ZQorICAgICAg
ICAgICAgICAgICAgICAvLyBkZWNyZW1lbnQuCisgICAgICAgICAgICAgICAgICAgIGlmIChpID09
IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoW2ldLS07CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBwYXJzZSB0
aGUgVVRDIG9mZnNldCBjb21wb25lbnQKKyAgICAgICAgICAgICAgICB2YXIgbWludXRlT2Zmc2V0
ID0gK21hdGNoLnBvcCgpLCBob3VyT2Zmc2V0ID0gK21hdGNoLnBvcCgpLCBzaWduID0gbWF0Y2gu
cG9wKCk7CisKKyAgICAgICAgICAgICAgICAvLyBjb21wdXRlIHRoZSBleHBsaWNpdCB0aW1lIHpv
bmUgb2Zmc2V0IGlmIHNwZWNpZmllZAorICAgICAgICAgICAgICAgIHZhciBvZmZzZXQgPSAwOwor
ICAgICAgICAgICAgICAgIGlmIChzaWduKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIGRldGVj
dCBpbnZhbGlkIG9mZnNldHMgYW5kIHJldHVybiBlYXJseQorICAgICAgICAgICAgICAgICAgICBp
ZiAoaG91ck9mZnNldCA+IDIzIHx8IG1pbnV0ZU9mZnNldCA+IDU5KSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gTmFOOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICAgICAgLy8gZXhwcmVzcyB0aGUgcHJvdmlkZWQgdGltZSB6b25lIG9mZnNldCBpbiBt
aW51dGVzLiBUaGUgb2Zmc2V0IGlzCisgICAgICAgICAgICAgICAgICAgIC8vIG5lZ2F0aXZlIGZv
ciB0aW1lIHpvbmVzIHdlc3Qgb2YgVVRDOyBwb3NpdGl2ZSBvdGhlcndpc2UuCisgICAgICAgICAg
ICAgICAgICAgIG9mZnNldCA9IChob3VyT2Zmc2V0ICogNjAgKyBtaW51dGVPZmZzZXQpICogNmU0
ICogKHNpZ24gPT0gIisiID8gLTEgOiAxKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICAvLyBEYXRlLlVUQyBmb3IgeWVhcnMgYmV0d2VlbiAwIGFuZCA5OSBjb252ZXJ0cyB5
ZWFyIHRvIDE5MDAgKyB5ZWFyCisgICAgICAgICAgICAgICAgLy8gVGhlIEdyZWdvcmlhbiBjYWxl
bmRhciBoYXMgYSA0MDAteWVhciBjeWNsZSwgc28KKyAgICAgICAgICAgICAgICAvLyB0byBEYXRl
LlVUQyh5ZWFyICsgNDAwLCAuLi4uICkgLSAxMjYyMjc4MDgwMDAwMCA9PSBEYXRlLlVUQyh5ZWFy
LCAuLi4pLAorICAgICAgICAgICAgICAgIC8vIHdoZXJlIDEyNjIyNzgwODAwMDAwIC0gbnVtYmVy
IG9mIG1pbGxpc2Vjb25kcyBpbiBHcmVnb3JpYW4gY2FsZW5kYXIgNDAwIHllYXJzCisgICAgICAg
ICAgICAgICAgdmFyIHllYXIgPSArbWF0Y2hbMF07CisgICAgICAgICAgICAgICAgaWYgKDAgPD0g
eWVhciAmJiB5ZWFyIDw9IDk5KSB7CisgICAgICAgICAgICAgICAgICAgIG1hdGNoWzBdID0geWVh
ciArIDQwMDsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5hdGl2ZURhdGUuVVRDLmFwcGx5
KHRoaXMsIG1hdGNoKSArIG9mZnNldCAtIDEyNjIyNzgwODAwMDAwOworICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgIC8vIGNvbXB1dGUgYSBuZXcgVVRDIGRhdGUgdmFsdWUsIGFj
Y291bnRpbmcgZm9yIHRoZSBvcHRpb25hbCBvZmZzZXQKKyAgICAgICAgICAgICAgICByZXR1cm4g
TmF0aXZlRGF0ZS5VVEMuYXBwbHkodGhpcywgbWF0Y2gpICsgb2Zmc2V0OworICAgICAgICAgICAg
fQorICAgICAgICAgICAgcmV0dXJuIE5hdGl2ZURhdGUucGFyc2UuYXBwbHkodGhpcywgYXJndW1l
bnRzKTsKKyAgICAgICAgfTsKKworICAgICAgICByZXR1cm4gRGF0ZTsKKyAgICB9KShEYXRlKTsK
K30KKworLy8KKy8vIFN0cmluZworLy8gPT09PT09CisvLworCisvLyBFUzUgMTUuNS40LjIwCisv
LyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS41LjQuMjAKK3ZhciB3cyA9ICJceDA5XHgwQVx4
MEJceDBDXHgwRFx4MjBceEEwXHUxNjgwXHUxODBFXHUyMDAwXHUyMDAxXHUyMDAyXHUyMDAzIiAr
CisgICAgIlx1MjAwNFx1MjAwNVx1MjAwNlx1MjAwN1x1MjAwOFx1MjAwOVx1MjAwQVx1MjAyRlx1
MjA1Rlx1MzAwMFx1MjAyOCIgKworICAgICJcdTIwMjlcdUZFRkYiOworaWYgKCFTdHJpbmcucHJv
dG90eXBlLnRyaW0gfHwgd3MudHJpbSgpKSB7CisgICAgLy8gaHR0cDovL2Jsb2cuc3RldmVubGV2
aXRoYW4uY29tL2FyY2hpdmVzL2Zhc3Rlci10cmltLWphdmFzY3JpcHQKKyAgICAvLyBodHRwOi8v
cGVyZmVjdGlvbmtpbGxzLmNvbS93aGl0ZXNwYWNlLWRldmlhdGlvbnMvCisgICAgd3MgPSAiWyIg
KyB3cyArICJdIjsKKyAgICB2YXIgdHJpbUJlZ2luUmVnZXhwID0gbmV3IFJlZ0V4cCgiXiIgKyB3
cyArIHdzICsgIioiKSwKKyAgICAgICAgdHJpbUVuZFJlZ2V4cCA9IG5ldyBSZWdFeHAod3MgKyB3
cyArICIqJCIpOworICAgIFN0cmluZy5wcm90b3R5cGUudHJpbSA9IGZ1bmN0aW9uIHRyaW0oKSB7
CisgICAgICAgIGlmICh0aGlzID09PSB1bmRlZmluZWQgfHwgdGhpcyA9PT0gbnVsbCkgeworICAg
ICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiY2FuJ3QgY29udmVydCAiK3RoaXMrIiB0byBv
YmplY3QiKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gU3RyaW5nKHRoaXMpLnJlcGxhY2Uo
dHJpbUJlZ2luUmVnZXhwLCAiIikucmVwbGFjZSh0cmltRW5kUmVnZXhwLCAiIik7CisgICAgfTsK
K30KKworLy8KKy8vIFV0aWwKKy8vID09PT09PQorLy8KKworLy8gRVM1IDkuNAorLy8gaHR0cDov
L2VzNS5naXRodWIuY29tLyN4OS40CisvLyBodHRwOi8vanNwZXJmLmNvbS90by1pbnRlZ2VyCit2
YXIgdG9JbnRlZ2VyID0gZnVuY3Rpb24gKG4pIHsKKyAgICBuID0gK247CisgICAgaWYgKG4gIT09
IG4pIHsgLy8gaXNOYU4KKyAgICAgICAgbiA9IDA7CisgICAgfSBlbHNlIGlmIChuICE9PSAwICYm
IG4gIT09ICgxLzApICYmIG4gIT09IC0oMS8wKSkgeworICAgICAgICBuID0gKG4gPiAwIHx8IC0x
KSAqIE1hdGguZmxvb3IoTWF0aC5hYnMobikpOworICAgIH0KKyAgICByZXR1cm4gbjsKK307CisK
K3ZhciBwcmVwYXJlU3RyaW5nID0gImEiWzBdICE9ICJhIjsKKyAgICAvLyBFUzUgOS45CisgICAg
Ly8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4OS45Cit2YXIgdG9PYmplY3QgPSBmdW5jdGlvbiAo
bykgeworICAgIGlmIChvID09IG51bGwpIHsgLy8gdGhpcyBtYXRjaGVzIGJvdGggbnVsbCBhbmQg
dW5kZWZpbmVkCisgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoImNhbid0IGNvbnZlcnQgIitv
KyIgdG8gb2JqZWN0Iik7CisgICAgfQorICAgIC8vIElmIHRoZSBpbXBsZW1lbnRhdGlvbiBkb2Vz
bid0IHN1cHBvcnQgYnktaW5kZXggYWNjZXNzIG9mCisgICAgLy8gc3RyaW5nIGNoYXJhY3RlcnMg
KGV4LiBJRSA8IDkpLCBzcGxpdCB0aGUgc3RyaW5nCisgICAgaWYgKHByZXBhcmVTdHJpbmcgJiYg
dHlwZW9mIG8gPT0gInN0cmluZyIgJiYgbykgeworICAgICAgICByZXR1cm4gby5zcGxpdCgiIik7
CisgICAgfQorICAgIHJldHVybiBPYmplY3Qobyk7Cit9OworCit9KTsKSW5kZXg6IFBlcmZvcm1h
bmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9l
czUtc2hpbS9lczUtc2hpbS5taW4uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9E
b1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2VzNS1zaGltL2Vz
NS1zaGltLm1pbi5qcwkocmV2aXNpb24gMCkKKysrIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVu
QmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9lczUtc2hpbS9lczUtc2hpbS5t
aW4uanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMyBAQAorKGZ1bmN0aW9uKGYpeyJmdW5j
dGlvbiI9PXR5cGVvZiBkZWZpbmU/ZGVmaW5lKGYpOiJmdW5jdGlvbiI9PXR5cGVvZiBZVUk/WVVJ
LmFkZCgiZXM1IixmKTpmKCl9KShmdW5jdGlvbigpe0Z1bmN0aW9uLnByb3RvdHlwZS5iaW5kfHwo
RnVuY3Rpb24ucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24oZCl7dmFyIGM9dGhpcztpZigiZnVuY3Rp
b24iIT10eXBlb2YgYyl0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbi5wcm90b3R5cGUuYmlu
ZCBjYWxsZWQgb24gaW5jb21wYXRpYmxlICIrYyk7dmFyIGE9bi5jYWxsKGFyZ3VtZW50cywxKSxi
PWZ1bmN0aW9uKCl7aWYodGhpcyBpbnN0YW5jZW9mIGIpe3ZhciBlPWZ1bmN0aW9uKCl7fTtlLnBy
b3RvdHlwZT1jLnByb3RvdHlwZTt2YXIgZT1uZXcgZSxpPWMuYXBwbHkoZSxhLmNvbmNhdChuLmNh
bGwoYXJndW1lbnRzKSkpO3JldHVybiBPYmplY3QoaSk9PT1pP2k6ZX1yZXR1cm4gYy5hcHBseShk
LGEuY29uY2F0KG4uY2FsbChhcmd1bWVudHMpKSl9OworcmV0dXJuIGJ9KTt2YXIgZj1GdW5jdGlv
bi5wcm90b3R5cGUuY2FsbCxtPU9iamVjdC5wcm90b3R5cGUsbj1BcnJheS5wcm90b3R5cGUuc2xp
Y2UsbD1mLmJpbmQobS50b1N0cmluZyksbz1mLmJpbmQobS5oYXNPd25Qcm9wZXJ0eSk7byhtLCJf
X2RlZmluZUdldHRlcl9fIikmJihmLmJpbmQobS5fX2RlZmluZUdldHRlcl9fKSxmLmJpbmQobS5f
X2RlZmluZVNldHRlcl9fKSxmLmJpbmQobS5fX2xvb2t1cEdldHRlcl9fKSxmLmJpbmQobS5fX2xv
b2t1cFNldHRlcl9fKSk7QXJyYXkuaXNBcnJheXx8KEFycmF5LmlzQXJyYXk9ZnVuY3Rpb24oZCl7
cmV0dXJuIGwoZCk9PSJbb2JqZWN0IEFycmF5XSJ9KTtBcnJheS5wcm90b3R5cGUuZm9yRWFjaHx8
KEFycmF5LnByb3RvdHlwZS5mb3JFYWNoPWZ1bmN0aW9uKGQsYyl7dmFyIGE9aih0aGlzKSxiPS0x
LGU9YS5sZW5ndGg+Pj4wO2lmKGwoZCkhPSJbb2JqZWN0IEZ1bmN0aW9uXSIpdGhyb3cgbmV3IFR5
cGVFcnJvcjtmb3IoOysrYjxlOyliIGluCithJiZkLmNhbGwoYyxhW2JdLGIsYSl9KTtBcnJheS5w
cm90b3R5cGUubWFwfHwoQXJyYXkucHJvdG90eXBlLm1hcD1mdW5jdGlvbihkLGMpe3ZhciBhPWoo
dGhpcyksYj1hLmxlbmd0aD4+PjAsZT1BcnJheShiKTtpZihsKGQpIT0iW29iamVjdCBGdW5jdGlv
bl0iKXRocm93IG5ldyBUeXBlRXJyb3IoZCsiIGlzIG5vdCBhIGZ1bmN0aW9uIik7Zm9yKHZhciBp
PTA7aTxiO2krKylpIGluIGEmJihlW2ldPWQuY2FsbChjLGFbaV0saSxhKSk7cmV0dXJuIGV9KTtB
cnJheS5wcm90b3R5cGUuZmlsdGVyfHwoQXJyYXkucHJvdG90eXBlLmZpbHRlcj1mdW5jdGlvbihk
LGMpe3ZhciBhPWoodGhpcyksYj1hLmxlbmd0aD4+PjAsZT1bXSxpO2lmKGwoZCkhPSJbb2JqZWN0
IEZ1bmN0aW9uXSIpdGhyb3cgbmV3IFR5cGVFcnJvcihkKyIgaXMgbm90IGEgZnVuY3Rpb24iKTtm
b3IodmFyIGY9MDtmPGI7ZisrKWlmKGYgaW4gYSl7aT1hW2ZdO2QuY2FsbChjLGksZixhKSYmZS5w
dXNoKGkpfXJldHVybiBlfSk7CitBcnJheS5wcm90b3R5cGUuZXZlcnl8fChBcnJheS5wcm90b3R5
cGUuZXZlcnk9ZnVuY3Rpb24oZCxjKXt2YXIgYT1qKHRoaXMpLGI9YS5sZW5ndGg+Pj4wO2lmKGwo
ZCkhPSJbb2JqZWN0IEZ1bmN0aW9uXSIpdGhyb3cgbmV3IFR5cGVFcnJvcihkKyIgaXMgbm90IGEg
ZnVuY3Rpb24iKTtmb3IodmFyIGU9MDtlPGI7ZSsrKWlmKGUgaW4gYSYmIWQuY2FsbChjLGFbZV0s
ZSxhKSlyZXR1cm4gZmFsc2U7cmV0dXJuIHRydWV9KTtBcnJheS5wcm90b3R5cGUuc29tZXx8KEFy
cmF5LnByb3RvdHlwZS5zb21lPWZ1bmN0aW9uKGQsYyl7dmFyIGE9aih0aGlzKSxiPWEubGVuZ3Ro
Pj4+MDtpZihsKGQpIT0iW29iamVjdCBGdW5jdGlvbl0iKXRocm93IG5ldyBUeXBlRXJyb3IoZCsi
IGlzIG5vdCBhIGZ1bmN0aW9uIik7Zm9yKHZhciBlPTA7ZTxiO2UrKylpZihlIGluIGEmJmQuY2Fs
bChjLGFbZV0sZSxhKSlyZXR1cm4gdHJ1ZTtyZXR1cm4gZmFsc2V9KTtBcnJheS5wcm90b3R5cGUu
cmVkdWNlfHwKKyhBcnJheS5wcm90b3R5cGUucmVkdWNlPWZ1bmN0aW9uKGQpe3ZhciBjPWoodGhp
cyksYT1jLmxlbmd0aD4+PjA7aWYobChkKSE9IltvYmplY3QgRnVuY3Rpb25dIil0aHJvdyBuZXcg
VHlwZUVycm9yKGQrIiBpcyBub3QgYSBmdW5jdGlvbiIpO2lmKCFhJiZhcmd1bWVudHMubGVuZ3Ro
PT0xKXRocm93IG5ldyBUeXBlRXJyb3IoInJlZHVjZSBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGlu
aXRpYWwgdmFsdWUiKTt2YXIgYj0wLGU7aWYoYXJndW1lbnRzLmxlbmd0aD49MillPWFyZ3VtZW50
c1sxXTtlbHNle2Rve2lmKGIgaW4gYyl7ZT1jW2IrK107YnJlYWt9aWYoKytiPj1hKXRocm93IG5l
dyBUeXBlRXJyb3IoInJlZHVjZSBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWUi
KTt9d2hpbGUoMSl9Zm9yKDtiPGE7YisrKWIgaW4gYyYmKGU9ZC5jYWxsKHZvaWQgMCxlLGNbYl0s
YixjKSk7cmV0dXJuIGV9KTtBcnJheS5wcm90b3R5cGUucmVkdWNlUmlnaHR8fChBcnJheS5wcm90
b3R5cGUucmVkdWNlUmlnaHQ9CitmdW5jdGlvbihkKXt2YXIgYz1qKHRoaXMpLGE9Yy5sZW5ndGg+
Pj4wO2lmKGwoZCkhPSJbb2JqZWN0IEZ1bmN0aW9uXSIpdGhyb3cgbmV3IFR5cGVFcnJvcihkKyIg
aXMgbm90IGEgZnVuY3Rpb24iKTtpZighYSYmYXJndW1lbnRzLmxlbmd0aD09MSl0aHJvdyBuZXcg
VHlwZUVycm9yKCJyZWR1Y2VSaWdodCBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFs
dWUiKTt2YXIgYixhPWEtMTtpZihhcmd1bWVudHMubGVuZ3RoPj0yKWI9YXJndW1lbnRzWzFdO2Vs
c2V7ZG97aWYoYSBpbiBjKXtiPWNbYS0tXTticmVha31pZigtLWE8MCl0aHJvdyBuZXcgVHlwZUVy
cm9yKCJyZWR1Y2VSaWdodCBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWUiKTt9
d2hpbGUoMSl9ZG8gYSBpbiB0aGlzJiYoYj1kLmNhbGwodm9pZCAwLGIsY1thXSxhLGMpKTt3aGls
ZShhLS0pO3JldHVybiBifSk7QXJyYXkucHJvdG90eXBlLmluZGV4T2Z8fChBcnJheS5wcm90b3R5
cGUuaW5kZXhPZj0KK2Z1bmN0aW9uKGQpe3ZhciBjPWoodGhpcyksYT1jLmxlbmd0aD4+PjA7aWYo
IWEpcmV0dXJuLTE7dmFyIGI9MDthcmd1bWVudHMubGVuZ3RoPjEmJihiPXAoYXJndW1lbnRzWzFd
KSk7Zm9yKGI9Yj49MD9iOk1hdGgubWF4KDAsYStiKTtiPGE7YisrKWlmKGIgaW4gYyYmY1tiXT09
PWQpcmV0dXJuIGI7cmV0dXJuLTF9KTtBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2Z8fChBcnJh
eS5wcm90b3R5cGUubGFzdEluZGV4T2Y9ZnVuY3Rpb24oZCl7dmFyIGM9aih0aGlzKSxhPWMubGVu
Z3RoPj4+MDtpZighYSlyZXR1cm4tMTt2YXIgYj1hLTE7YXJndW1lbnRzLmxlbmd0aD4xJiYoYj1N
YXRoLm1pbihiLHAoYXJndW1lbnRzWzFdKSkpO2ZvcihiPWI+PTA/YjphLU1hdGguYWJzKGIpO2I+
PTA7Yi0tKWlmKGIgaW4gYyYmZD09PWNbYl0pcmV0dXJuIGI7cmV0dXJuLTF9KTtpZighT2JqZWN0
LmtleXMpe3ZhciBxPSEwLHI9InRvU3RyaW5nIHRvTG9jYWxlU3RyaW5nIHZhbHVlT2YgaGFzT3du
UHJvcGVydHkgaXNQcm90b3R5cGVPZiBwcm9wZXJ0eUlzRW51bWVyYWJsZSBjb25zdHJ1Y3RvciIu
c3BsaXQoIiAiKSwKK3M9ci5sZW5ndGgsdDtmb3IodCBpbnt0b1N0cmluZzpudWxsfSlxPSExO09i
amVjdC5rZXlzPWZ1bmN0aW9uKGQpe2lmKHR5cGVvZiBkIT0ib2JqZWN0IiYmdHlwZW9mIGQhPSJm
dW5jdGlvbiJ8fGQ9PT1udWxsKXRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdC5rZXlzIGNhbGxl
ZCBvbiBhIG5vbi1vYmplY3QiKTt2YXIgYz1bXSxhO2ZvcihhIGluIGQpbyhkLGEpJiZjLnB1c2go
YSk7aWYocSlmb3IoYT0wO2E8czthKyspe3ZhciBiPXJbYV07byhkLGIpJiZjLnB1c2goYil9cmV0
dXJuIGN9fWlmKCFEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZ3x8LTE9PT0obmV3IERhdGUoLTYy
MTk4NzU1MkU1KSkudG9JU09TdHJpbmcoKS5pbmRleE9mKCItMDAwMDAxIikpRGF0ZS5wcm90b3R5
cGUudG9JU09TdHJpbmc9ZnVuY3Rpb24oKXt2YXIgZCxjLGEsYjtpZighaXNGaW5pdGUodGhpcykp
dGhyb3cgbmV3IFJhbmdlRXJyb3IoIkRhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nIGNhbGxlZCBv
biBub24tZmluaXRlIHZhbHVlLiIpOworZD1bdGhpcy5nZXRVVENNb250aCgpKzEsdGhpcy5nZXRV
VENEYXRlKCksdGhpcy5nZXRVVENIb3VycygpLHRoaXMuZ2V0VVRDTWludXRlcygpLHRoaXMuZ2V0
VVRDU2Vjb25kcygpXTtiPXRoaXMuZ2V0VVRDRnVsbFllYXIoKTtiPShiPDA/Ii0iOmI+OTk5OT8i
KyI6IiIpKygiMDAwMDAiK01hdGguYWJzKGIpKS5zbGljZSgwPD1iJiZiPD05OTk5Py00Oi02KTtm
b3IoYz1kLmxlbmd0aDtjLS07KXthPWRbY107YTwxMCYmKGRbY109IjAiK2EpfXJldHVybiBiKyIt
IitkLnNsaWNlKDAsMikuam9pbigiLSIpKyJUIitkLnNsaWNlKDIpLmpvaW4oIjoiKSsiLiIrKCIw
MDAiK3RoaXMuZ2V0VVRDTWlsbGlzZWNvbmRzKCkpLnNsaWNlKC0zKSsiWiJ9O0RhdGUubm93fHwo
RGF0ZS5ub3c9ZnVuY3Rpb24oKXtyZXR1cm4obmV3IERhdGUpLmdldFRpbWUoKX0pO0RhdGUucHJv
dG90eXBlLnRvSlNPTnx8KERhdGUucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe2lmKHR5cGVv
ZiB0aGlzLnRvSVNPU3RyaW5nIT0KKyJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigidG9J
U09TdHJpbmcgcHJvcGVydHkgaXMgbm90IGNhbGxhYmxlIik7cmV0dXJuIHRoaXMudG9JU09TdHJp
bmcoKX0pO2lmKCFEYXRlLnBhcnNlfHw4NjRFMTMhPT1EYXRlLnBhcnNlKCIrMjc1NzYwLTA5LTEz
VDAwOjAwOjAwLjAwMFoiKSl7dmFyIGc9RGF0ZSxmPWZ1bmN0aW9uIGMoYSxiLGUsZixoLGosbCl7
dmFyIGs9YXJndW1lbnRzLmxlbmd0aDtpZih0aGlzIGluc3RhbmNlb2YgZyl7az1rPT0xJiZTdHJp
bmcoYSk9PT1hP25ldyBnKGMucGFyc2UoYSkpOms+PTc/bmV3IGcoYSxiLGUsZixoLGosbCk6az49
Nj9uZXcgZyhhLGIsZSxmLGgsaik6az49NT9uZXcgZyhhLGIsZSxmLGgpOms+PTQ/bmV3IGcoYSxi
LGUsZik6az49Mz9uZXcgZyhhLGIsZSk6az49Mj9uZXcgZyhhLGIpOms+PTE/bmV3IGcoYSk6bmV3
IGc7ay5jb25zdHJ1Y3Rvcj1jO3JldHVybiBrfXJldHVybiBnLmFwcGx5KHRoaXMsYXJndW1lbnRz
KX0sdT1SZWdFeHAoIl4oXFxkezR9fFsrLV1cXGR7Nn0pKD86LShcXGR7Mn0pKD86LShcXGR7Mn0p
KD86VChcXGR7Mn0pOihcXGR7Mn0pKD86OihcXGR7Mn0pKD86XFwuKFxcZHszfSkpPyk/KD86Wnwo
PzooWy0rXSkoXFxkezJ9KTooXFxkezJ9KSkpPyk/KT8pPyQiKSwKK2g7Zm9yKGggaW4gZylmW2hd
PWdbaF07Zi5ub3c9Zy5ub3c7Zi5VVEM9Zy5VVEM7Zi5wcm90b3R5cGU9Zy5wcm90b3R5cGU7Zi5w
cm90b3R5cGUuY29uc3RydWN0b3I9ZjtmLnBhcnNlPWZ1bmN0aW9uKGMpe3ZhciBhPXUuZXhlYyhj
KTtpZihhKXthLnNoaWZ0KCk7Zm9yKHZhciBiPTE7Yjw3O2IrKyl7YVtiXT0rKGFbYl18fChiPDM/
MTowKSk7Yj09MSYmYVtiXS0tfXZhciBlPSthLnBvcCgpLGY9K2EucG9wKCksaD1hLnBvcCgpLGI9
MDtpZihoKXtpZihmPjIzfHxlPjU5KXJldHVybiBOYU47Yj0oZio2MCtlKSo2RTQqKGg9PSIrIj8t
MToxKX1lPSthWzBdO2lmKDA8PWUmJmU8PTk5KXthWzBdPWUrNDAwO3JldHVybiBnLlVUQy5hcHBs
eSh0aGlzLGEpK2ItMTI2MjI3ODA4RTV9cmV0dXJuIGcuVVRDLmFwcGx5KHRoaXMsYSkrYn1yZXR1
cm4gZy5wYXJzZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O0RhdGU9Zn1oPSJcdFxuXHgwQlxmXHIg
XHUwMGEwXHUxNjgwXHUxODBlXHUyMDAwXHUyMDAxXHUyMDAyXHUyMDAzXHUyMDA0XHUyMDA1XHUy
MDA2XHUyMDA3XHUyMDA4XHUyMDA5XHUyMDBhXHUyMDJmXHUyMDVmXHUzMDAwXHUyMDI4XHUyMDI5
XHVmZWZmIjsKK2lmKCFTdHJpbmcucHJvdG90eXBlLnRyaW18fGgudHJpbSgpKXtoPSJbIitoKyJd
Ijt2YXIgdj1SZWdFeHAoIl4iK2graCsiKiIpLHc9UmVnRXhwKGgraCsiKiQiKTtTdHJpbmcucHJv
dG90eXBlLnRyaW09ZnVuY3Rpb24oKXtpZih0aGlzPT09dm9pZCAwfHx0aGlzPT09bnVsbCl0aHJv
dyBuZXcgVHlwZUVycm9yKCJjYW4ndCBjb252ZXJ0ICIrdGhpcysiIHRvIG9iamVjdCIpO3JldHVy
biBTdHJpbmcodGhpcykucmVwbGFjZSh2LCIiKS5yZXBsYWNlKHcsIiIpfX12YXIgcD1mdW5jdGlv
bihjKXtjPStjO2MhPT1jP2M9MDpjIT09MCYmKGMhPT0xLzAmJmMhPT0tKDEvMCkpJiYoYz0oYz4w
fHwtMSkqTWF0aC5mbG9vcihNYXRoLmFicyhjKSkpO3JldHVybiBjfSx4PSJhIiE9ImEiWzBdLGo9
ZnVuY3Rpb24oYyl7aWYoYz09bnVsbCl0aHJvdyBuZXcgVHlwZUVycm9yKCJjYW4ndCBjb252ZXJ0
ICIrYysiIHRvIG9iamVjdCIpO3JldHVybiB4JiZ0eXBlb2YgYz09InN0cmluZyImJmM/Yy5zcGxp
dCgiIik6CitPYmplY3QoYyl9fSk7CkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJl
bmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvZXM1LXNoaW0vcGFja2FnZS5qc29u
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMt
ZXhhbXBsZS1hcHAvY29tcG9uZW50cy9lczUtc2hpbS9wYWNrYWdlLmpzb24JKHJldmlzaW9uIDAp
CisrKyBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBw
L2NvbXBvbmVudHMvZXM1LXNoaW0vcGFja2FnZS5qc29uCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMzEgQEAKK3sKKyAgICAibmFtZSI6ICJlczUtc2hpbSIsCisgICAgInZlcnNpb24iOiAiMi4w
LjAiLAorICAgICJkZXNjcmlwdGlvbiI6ICJFUzUgYXMgaW1wbGVtZW50YWJsZSBvbiBwcmV2aW91
cyBlbmdpbmVzIiwKKyAgICAiaG9tZXBhZ2UiOiAiaHR0cDovL2dpdGh1Yi5jb20va3Jpc2tvd2Fs
L2VzNS1zaGltLyIsCisgICAgImNvbnRyaWJ1dG9ycyI6IFsKKyAgICAgICAgIktyaXMgS293YWwg
PGtyaXNAY2l4YXIuY29tPiAoaHR0cDovL2dpdGh1Yi5jb20va3Jpc2tvd2FsLykiLAorICAgICAg
ICAiU2FtaSBTYW1odXJpIDxzYW1pLnNhbWh1cmlAZ21haWwuY29tPiAoaHR0cDovL3NhbWh1cmku
bmV0LykiLAorICAgICAgICAiRmxvcmlhbiBTY2jDpGZlciA8Zmxvcmlhbi5zY2hhZWZlckBnbWFp
bC5jb20+IChodHRwOi8vZ2l0aHViLmNvbS9mc2NoYWVmZXIpIiwKKyAgICAgICAgIklyYWtsaSBH
b3phbGlzaHZpbGkgPHJmb2JpY0BnbWFpbC5jb20+IChodHRwOi8vamVkaXRvb2xraXQuY29tKSIs
CisgICAgICAgICJLaXQgQ2FtYnJpZGdlIDxraXRjYW1icmlkZ2VAZ21haWwuY29tPiAoaHR0cDov
L2tpdGNhbWJyaWRnZS5naXRodWIuY29tKSIKKyAgICBdLAorICAgICJidWdzIjogeworICAgICAg
ICAibWFpbCI6ICJrcmlzQGNpeGFyLmNvbSIsCisgICAgICAgICJ1cmwiOiAiaHR0cDovL2dpdGh1
Yi5jb20va3Jpc2tvd2FsL2VzNS1zaGltL2lzc3VlcyIKKyAgICB9LAorICAgICJsaWNlbnNlcyI6
IFsKKyAgICAgICAgeworICAgICAgICAgICAgInR5cGUiOiAiTUlUIiwKKyAgICAgICAgICAgICJ1
cmwiOiAiaHR0cDovL2dpdGh1Yi5jb20va3Jpc2tvd2FsL2VzNS1zaGltL3Jhdy9tYXN0ZXIvTElD
RU5TRSIKKyAgICAgICAgfQorICAgIF0sCisgICAgIm1haW4iOiAiZXM1LXNoaW0uanMiLAorICAg
ICJyZXBvc2l0b3J5IjogeworICAgICAgICAidHlwZSI6ICJnaXQiLAorICAgICAgICAidXJsIjog
Imh0dHA6Ly9naXRodWIuY29tL2tyaXNrb3dhbC9lczUtc2hpbS5naXQiCisgICAgfSwKKyAgICAi
ZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0wLjIuMCIKKyAgICB9Cit9CkluZGV4OiBQ
ZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBv
bmVudHMvZXM1LXNoaW0vdGVzdHMvaW5kZXguaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5j
ZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvZXM1
LXNoaW0vdGVzdHMvaW5kZXguaHRtbAkocmV2aXNpb24gMCkKKysrIFBlcmZvcm1hbmNlVGVzdHMv
RG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9lczUtc2hpbS90
ZXN0cy9pbmRleC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjIgQEAKKzwhRE9DVFlQ
RSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKyAgICA8dGl0bGU+SmFzbWluZSBTcGVjIFJ1bm5lcjwv
dGl0bGU+CisKKyAgICA8bGluayByZWw9InNob3J0Y3V0IGljb24iIHR5cGU9ImltYWdlL3BuZyIg
aHJlZj0ibGliL2phc21pbmVfZmF2aWNvbi5wbmciPgorCisgICAgPGxpbmsgcmVsPSJzdHlsZXNo
ZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0ibGliL2phc21pbmUuY3NzIj4KKyAgICA8c2NyaXB0
IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJsaWIvamFzbWluZS5qcyI+PC9zY3JpcHQ+Cisg
ICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ibGliL2phc21pbmUtaHRtbC5q
cyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ibGli
L2pzb24yLmpzIj48L3NjcmlwdD4KKworICAgIDwhLS0gaW5jbHVkZSBoZWxwZXIgZmlsZXMgaGVy
ZS4uLiAtLT4KKyAgICA8c2NyaXB0IHNyYz0iaGVscGVycy9oLmpzIj48L3NjcmlwdD4KKyAgICA8
c2NyaXB0IHNyYz0iaGVscGVycy9oLWtpbGwuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3Jj
PSJoZWxwZXJzL2gtbWF0Y2hlcnMuanMiPjwvc2NyaXB0PgorCisgICAgPCEtLSBpbmNsdWRlIHNv
dXJjZSBmaWxlcyBoZXJlLi4uIC0tPgorICAgIDxzY3JpcHQgc3JjPSIuLi9lczUtc2hpbS5qcyI+
PC9zY3JpcHQ+CisKKyAgICA8IS0tIGluY2x1ZGUgc3BlYyBmaWxlcyBoZXJlLi4uIC0tPgorICAg
IDxzY3JpcHQgc3JjPSJzcGVjL3MtYXJyYXkuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3Jj
PSJzcGVjL3MtZnVuY3Rpb24uanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJzcGVjL3Mt
c3RyaW5nLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0ic3BlYy9zLW9iamVjdC5qcyI+
PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9InNwZWMvcy1kYXRlLmpzIj48L3NjcmlwdD4KKwor
CisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICAgICAgICAoZnVuY3Rpb24o
KSB7CisgICAgICAgICAgICB2YXIgamFzbWluZUVudiA9IGphc21pbmUuZ2V0RW52KCk7CisgICAg
ICAgICAgICBqYXNtaW5lRW52LnVwZGF0ZUludGVydmFsID0gMTAwMDsKKworICAgICAgICAgICAg
dmFyIHRyaXZpYWxSZXBvcnRlciA9IG5ldyBqYXNtaW5lLlRyaXZpYWxSZXBvcnRlcigpOworCisg
ICAgICAgICAgICBqYXNtaW5lRW52LmFkZFJlcG9ydGVyKHRyaXZpYWxSZXBvcnRlcik7CisKKyAg
ICAgICAgICAgIGphc21pbmVFbnYuc3BlY0ZpbHRlciA9IGZ1bmN0aW9uKHNwZWMpIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gdHJpdmlhbFJlcG9ydGVyLnNwZWNGaWx0ZXIoc3BlYyk7CisgICAg
ICAgICAgICB9OworCisgICAgICAgICAgICB2YXIgY3VycmVudFdpbmRvd09ubG9hZCA9IHdpbmRv
dy5vbmxvYWQ7CisKKyAgICAgICAgICAgIHdpbmRvdy5vbmxvYWQgPSBmdW5jdGlvbigpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoY3VycmVudFdpbmRvd09ubG9hZCkgeworICAgICAgICAgICAgICAg
ICAgICBjdXJyZW50V2luZG93T25sb2FkKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGV4ZWNKYXNtaW5lKCk7CisgICAgICAgICAgICB9OworCisgICAgICAgICAgICBmdW5j
dGlvbiBleGVjSmFzbWluZSgpIHsKKyAgICAgICAgICAgICAgICBqYXNtaW5lRW52LmV4ZWN1dGUo
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICB9KSgpOworICAgIDwvc2NyaXB0PgorCis8L2hl
YWQ+CisKKzxib2R5PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9E
b1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2VzNS1zaGltL3Rl
c3RzL2hlbHBlcnMvaC1raWxsLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvRG9Z
b3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9lczUtc2hpbS90ZXN0
cy9oZWxwZXJzL2gta2lsbC5qcwkocmV2aXNpb24gMCkKKysrIFBlcmZvcm1hbmNlVGVzdHMvRG9Z
b3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9lczUtc2hpbS90ZXN0
cy9oZWxwZXJzL2gta2lsbC5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU5IEBACisvLyBU
aGlzIG1ldGhvZHMgYWxsb3dzIHRoZSBraWxsaW5nIG9mIGJ1aWx0LWluIGZ1bmN0aW9ucywKKy8v
IHNvIHRoZSBzaGltIGNhbiB0YWtlIG92ZXIgd2l0aCB0aGF0IGltcGxlbWVudGF0aW9uCit2YXIg
SExQID0gKGZ1bmN0aW9uKCkgeworICAgICJ1c2Ugc3RyaWN0IjsKKyAgICB2YXIga2lsbDsKKyAg
ICAKKyAgICBraWxsID0gZnVuY3Rpb24oX2NsYXNzLCBtZXRob2RzKSB7CisgICAgICAgIC8qaWYo
IUFycmF5LmlzQXJyYXkobWV0aG9kcykpCisgICAgICAgICAgICByZXR1cm47Ki8KKyAgICAgICAg
aWYoIV9jbGFzcy5vcmlnaW5hbHMpCisgICAgICAgICAgICBfY2xhc3Mub3JpZ2luYWxzID0ge307
CisKKyAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IG1ldGhvZHMubGVuZ3RoOyBpIDwgbGVu
OyBpKyspIHsKKyAgICAgICAgICAgIHZhciBvYmogPSBtZXRob2RzW2ldOworICAgICAgICAgICAg
X2NsYXNzLm9yaWdpbmFsc1tvYmpdID0gX2NsYXNzW29ial07CisgICAgICAgICAgICBkZWxldGUg
X2NsYXNzW29ial07CisgICAgICAgICAgICBpZiAob2JqIGluIF9jbGFzcykgeworICAgICAgICAg
ICAgICAgIC8vIHRyeSBzb21ldGhpbmcgbW9yZSBhZ2dyZXNzaXZlIHNpbmNlIFY4IGF0IGxlYXN0
CisgICAgICAgICAgICAgICAgLy8gYXBwZWFycyB0byBpZ25vcmUgdGhlIGRlbGV0ZS4KKyAgICAg
ICAgICAgICAgICBfY2xhc3Nbb2JqXSA9IG51bGw7CisgICAgICAgICAgICAgICAgaWYgKF9jbGFz
c1tvYmpdKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCJDb3Vsbid0IG92ZXJ3
cml0ZSIsIG9iaiwgIm9mIiwgX2NsYXNzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9OworICAgIHJldHVybiB7IGtpbGw6IGtpbGwgfTsKK30oKSk7
CisKK0hMUC5raWxsKEZ1bmN0aW9uLnByb3RvdHlwZSwgWworICAgICdiaW5kJworXSk7CisKK0hM
UC5raWxsKEFycmF5LCBbCisgICAgJ2lzQXJyYXknCitdKTsKKworSExQLmtpbGwoU3RyaW5nLnBy
b3RvdHlwZSwgWworICAgICJ0cmltIgorXSk7CisKK0hMUC5raWxsKE9iamVjdCwgWworICAgICdr
ZXlzJworXSk7CisKK0hMUC5raWxsKERhdGUsIFsKKyAgICAnbm93JywgJ3BhcnNlJworXSk7CisK
K0hMUC5raWxsKERhdGUucHJvdG90eXBlLCBbCisgICAgInRvSlNPTiIsICJ0b0lTT1N0cmluZyIK
K10pOworCitITFAua2lsbChBcnJheS5wcm90b3R5cGUsIFsKKyAgICAnZm9yRWFjaCcsICdzb21l
JywgJ2V2ZXJ5JywgCisgICAgJ2luZGV4T2YnLCAnbGFzdEluZGV4T2YnLCAKKyAgICAnbWFwJywg
J2ZpbHRlcicsIAorICAgICdyZWR1Y2UnLCAncmVkdWNlUmlnaHQnCitdKTsKSW5kZXg6IFBlcmZv
cm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50
cy9lczUtc2hpbS90ZXN0cy9oZWxwZXJzL2gtbWF0Y2hlcnMuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVy
Zm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25l
bnRzL2VzNS1zaGltL3Rlc3RzL2hlbHBlcnMvaC1tYXRjaGVycy5qcwkocmV2aXNpb24gMCkKKysr
IFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29t
cG9uZW50cy9lczUtc2hpbS90ZXN0cy9oZWxwZXJzL2gtbWF0Y2hlcnMuanMJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwzNCBAQAorYmVmb3JlRWFjaChmdW5jdGlvbigpIHsKKyAgICB0aGlzLmFk
ZE1hdGNoZXJzKHsKKyAgICAgICAgdG9FeGFjdGx5TWF0Y2g6IGZ1bmN0aW9uKGV4cGVjdGVkKSB7
CisgICAgICAgICAgICB2YXIgYTEsIGEyLAorICAgICAgICAgICAgICAgIGwsIGksCisgICAgICAg
ICAgICAgICAga2V5LAorICAgICAgICAgICAgICAgIGFjdHVhbCA9IHRoaXMuYWN0dWFsOworICAg
ICAgICAgICAgCisgICAgICAgICAgICB2YXIgZ2V0S2V5cyA9IGZ1bmN0aW9uKG8pIHsKKyAgICAg
ICAgICAgICAgICB2YXIgYSA9IFtdOworICAgICAgICAgICAgICAgIGZvcihrZXkgaW4gbykgewor
ICAgICAgICAgICAgICAgICAgICBpZihvLmhhc093blByb3BlcnR5KGtleSkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGEucHVzaChrZXkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBhOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgYTEgPSBnZXRLZXlzKGFjdHVhbCk7CisgICAgICAgICAgICBhMiA9IGdldEtl
eXMoZXhwZWN0ZWQpOworICAgICAgICAgICAgCisgICAgICAgICAgICBsID0gYTEubGVuZ3RoOwor
ICAgICAgICAgICAgaWYobCAhPT0gYTIubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yKGkgPSAwOyBpIDwgbDsgaSsr
KSB7CisgICAgICAgICAgICAgICAga2V5ID0gYTFbaV07CisgICAgICAgICAgICAgICAgZXhwZWN0
KGtleSkudG9FcXVhbChhMltpXSk7CisgICAgICAgICAgICAgICAgZXhwZWN0KGFjdHVhbFtrZXld
KS50b0VxdWFsKGV4cGVjdGVkW2tleV0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0pCit9KTsKSW5kZXg6IFBl
cmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9u
ZW50cy9lczUtc2hpbS90ZXN0cy9oZWxwZXJzL2guanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFu
Y2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2Vz
NS1zaGltL3Rlc3RzL2hlbHBlcnMvaC5qcwkocmV2aXNpb24gMCkKKysrIFBlcmZvcm1hbmNlVGVz
dHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9lczUtc2hp
bS90ZXN0cy9oZWxwZXJzL2guanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzIEBACitmdW5j
dGlvbiBpbXBsZW1lbnQoKSB7CisgICAgdGhyb3cgJ05vdCBpbXBsZW1lbnRlZCc7Cit9ClwgTm8g
bmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5C
ZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2VzNS1zaGltL3Rlc3RzL2xpYi9q
YXNtaW5lLWh0bWwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5C
ZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2VzNS1zaGltL3Rlc3RzL2xpYi9q
YXNtaW5lLWh0bWwuanMJKHJldmlzaW9uIDApCisrKyBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZl
bkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvZXM1LXNoaW0vdGVzdHMvbGli
L2phc21pbmUtaHRtbC5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE5MCBAQAoramFzbWlu
ZS5Ucml2aWFsUmVwb3J0ZXIgPSBmdW5jdGlvbihkb2MpIHsKKyAgdGhpcy5kb2N1bWVudCA9IGRv
YyB8fCBkb2N1bWVudDsKKyAgdGhpcy5zdWl0ZURpdnMgPSB7fTsKKyAgdGhpcy5sb2dSdW5uaW5n
U3BlY3MgPSBmYWxzZTsKK307CisKK2phc21pbmUuVHJpdmlhbFJlcG9ydGVyLnByb3RvdHlwZS5j
cmVhdGVEb20gPSBmdW5jdGlvbih0eXBlLCBhdHRycywgY2hpbGRyZW5WYXJBcmdzKSB7CisgIHZh
ciBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodHlwZSk7CisKKyAgZm9yICh2YXIgaSA9IDI7
IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsKKyAgICB2YXIgY2hpbGQgPSBhcmd1bWVudHNb
aV07CisKKyAgICBpZiAodHlwZW9mIGNoaWxkID09PSAnc3RyaW5nJykgeworICAgICAgZWwuYXBw
ZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY2hpbGQpKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgaWYgKGNoaWxkKSB7IGVsLmFwcGVuZENoaWxkKGNoaWxkKTsgfQorICAgIH0KKyAgfQor
CisgIGZvciAodmFyIGF0dHIgaW4gYXR0cnMpIHsKKyAgICBpZiAoYXR0ciA9PSAiY2xhc3NOYW1l
IikgeworICAgICAgZWxbYXR0cl0gPSBhdHRyc1thdHRyXTsKKyAgICB9IGVsc2UgeworICAgICAg
ZWwuc2V0QXR0cmlidXRlKGF0dHIsIGF0dHJzW2F0dHJdKTsKKyAgICB9CisgIH0KKworICByZXR1
cm4gZWw7Cit9OworCitqYXNtaW5lLlRyaXZpYWxSZXBvcnRlci5wcm90b3R5cGUucmVwb3J0UnVu
bmVyU3RhcnRpbmcgPSBmdW5jdGlvbihydW5uZXIpIHsKKyAgdmFyIHNob3dQYXNzZWQsIHNob3dT
a2lwcGVkOworCisgIHRoaXMub3V0ZXJEaXYgPSB0aGlzLmNyZWF0ZURvbSgnZGl2JywgeyBjbGFz
c05hbWU6ICdqYXNtaW5lX3JlcG9ydGVyJyB9LAorICAgICAgdGhpcy5jcmVhdGVEb20oJ2Rpdics
IHsgY2xhc3NOYW1lOiAnYmFubmVyJyB9LAorICAgICAgICB0aGlzLmNyZWF0ZURvbSgnZGl2Jywg
eyBjbGFzc05hbWU6ICdsb2dvJyB9LAorICAgICAgICAgICAgdGhpcy5jcmVhdGVEb20oJ3NwYW4n
LCB7IGNsYXNzTmFtZTogJ3RpdGxlJyB9LCAiSmFzbWluZSIpLAorICAgICAgICAgICAgdGhpcy5j
cmVhdGVEb20oJ3NwYW4nLCB7IGNsYXNzTmFtZTogJ3ZlcnNpb24nIH0sIHJ1bm5lci5lbnYudmVy
c2lvblN0cmluZygpKSksCisgICAgICAgIHRoaXMuY3JlYXRlRG9tKCdkaXYnLCB7IGNsYXNzTmFt
ZTogJ29wdGlvbnMnIH0sCisgICAgICAgICAgICAiU2hvdyAiLAorICAgICAgICAgICAgc2hvd1Bh
c3NlZCA9IHRoaXMuY3JlYXRlRG9tKCdpbnB1dCcsIHsgaWQ6ICJfX2phc21pbmVfVHJpdmlhbFJl
cG9ydGVyX3Nob3dQYXNzZWRfXyIsIHR5cGU6ICdjaGVja2JveCcgfSksCisgICAgICAgICAgICB0
aGlzLmNyZWF0ZURvbSgnbGFiZWwnLCB7ICJmb3IiOiAiX19qYXNtaW5lX1RyaXZpYWxSZXBvcnRl
cl9zaG93UGFzc2VkX18iIH0sICIgcGFzc2VkICIpLAorICAgICAgICAgICAgc2hvd1NraXBwZWQg
PSB0aGlzLmNyZWF0ZURvbSgnaW5wdXQnLCB7IGlkOiAiX19qYXNtaW5lX1RyaXZpYWxSZXBvcnRl
cl9zaG93U2tpcHBlZF9fIiwgdHlwZTogJ2NoZWNrYm94JyB9KSwKKyAgICAgICAgICAgIHRoaXMu
Y3JlYXRlRG9tKCdsYWJlbCcsIHsgImZvciI6ICJfX2phc21pbmVfVHJpdmlhbFJlcG9ydGVyX3No
b3dTa2lwcGVkX18iIH0sICIgc2tpcHBlZCIpCisgICAgICAgICAgICApCisgICAgICAgICAgKSwK
KworICAgICAgdGhpcy5ydW5uZXJEaXYgPSB0aGlzLmNyZWF0ZURvbSgnZGl2JywgeyBjbGFzc05h
bWU6ICdydW5uZXIgcnVubmluZycgfSwKKyAgICAgICAgICB0aGlzLmNyZWF0ZURvbSgnYScsIHsg
Y2xhc3NOYW1lOiAncnVuX3NwZWMnLCBocmVmOiAnPycgfSwgInJ1biBhbGwiKSwKKyAgICAgICAg
ICB0aGlzLnJ1bm5lck1lc3NhZ2VTcGFuID0gdGhpcy5jcmVhdGVEb20oJ3NwYW4nLCB7fSwgIlJ1
bm5pbmcuLi4iKSwKKyAgICAgICAgICB0aGlzLmZpbmlzaGVkQXRTcGFuID0gdGhpcy5jcmVhdGVE
b20oJ3NwYW4nLCB7IGNsYXNzTmFtZTogJ2ZpbmlzaGVkLWF0JyB9LCAiIikpCisgICAgICApOwor
CisgIHRoaXMuZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLm91dGVyRGl2KTsKKworICB2
YXIgc3VpdGVzID0gcnVubmVyLnN1aXRlcygpOworICBmb3IgKHZhciBpID0gMDsgaSA8IHN1aXRl
cy5sZW5ndGg7IGkrKykgeworICAgIHZhciBzdWl0ZSA9IHN1aXRlc1tpXTsKKyAgICB2YXIgc3Vp
dGVEaXYgPSB0aGlzLmNyZWF0ZURvbSgnZGl2JywgeyBjbGFzc05hbWU6ICdzdWl0ZScgfSwKKyAg
ICAgICAgdGhpcy5jcmVhdGVEb20oJ2EnLCB7IGNsYXNzTmFtZTogJ3J1bl9zcGVjJywgaHJlZjog
Jz9zcGVjPScgKyBlbmNvZGVVUklDb21wb25lbnQoc3VpdGUuZ2V0RnVsbE5hbWUoKSkgfSwgInJ1
biIpLAorICAgICAgICB0aGlzLmNyZWF0ZURvbSgnYScsIHsgY2xhc3NOYW1lOiAnZGVzY3JpcHRp
b24nLCBocmVmOiAnP3NwZWM9JyArIGVuY29kZVVSSUNvbXBvbmVudChzdWl0ZS5nZXRGdWxsTmFt
ZSgpKSB9LCBzdWl0ZS5kZXNjcmlwdGlvbikpOworICAgIHRoaXMuc3VpdGVEaXZzW3N1aXRlLmlk
XSA9IHN1aXRlRGl2OworICAgIHZhciBwYXJlbnREaXYgPSB0aGlzLm91dGVyRGl2OworICAgIGlm
IChzdWl0ZS5wYXJlbnRTdWl0ZSkgeworICAgICAgcGFyZW50RGl2ID0gdGhpcy5zdWl0ZURpdnNb
c3VpdGUucGFyZW50U3VpdGUuaWRdOworICAgIH0KKyAgICBwYXJlbnREaXYuYXBwZW5kQ2hpbGQo
c3VpdGVEaXYpOworICB9CisKKyAgdGhpcy5zdGFydGVkQXQgPSBuZXcgRGF0ZSgpOworCisgIHZh
ciBzZWxmID0gdGhpczsKKyAgc2hvd1Bhc3NlZC5vbmNsaWNrID0gZnVuY3Rpb24oZXZ0KSB7Cisg
ICAgaWYgKHNob3dQYXNzZWQuY2hlY2tlZCkgeworICAgICAgc2VsZi5vdXRlckRpdi5jbGFzc05h
bWUgKz0gJyBzaG93LXBhc3NlZCc7CisgICAgfSBlbHNlIHsKKyAgICAgIHNlbGYub3V0ZXJEaXYu
Y2xhc3NOYW1lID0gc2VsZi5vdXRlckRpdi5jbGFzc05hbWUucmVwbGFjZSgvIHNob3ctcGFzc2Vk
LywgJycpOworICAgIH0KKyAgfTsKKworICBzaG93U2tpcHBlZC5vbmNsaWNrID0gZnVuY3Rpb24o
ZXZ0KSB7CisgICAgaWYgKHNob3dTa2lwcGVkLmNoZWNrZWQpIHsKKyAgICAgIHNlbGYub3V0ZXJE
aXYuY2xhc3NOYW1lICs9ICcgc2hvdy1za2lwcGVkJzsKKyAgICB9IGVsc2UgeworICAgICAgc2Vs
Zi5vdXRlckRpdi5jbGFzc05hbWUgPSBzZWxmLm91dGVyRGl2LmNsYXNzTmFtZS5yZXBsYWNlKC8g
c2hvdy1za2lwcGVkLywgJycpOworICAgIH0KKyAgfTsKK307CisKK2phc21pbmUuVHJpdmlhbFJl
cG9ydGVyLnByb3RvdHlwZS5yZXBvcnRSdW5uZXJSZXN1bHRzID0gZnVuY3Rpb24ocnVubmVyKSB7
CisgIHZhciByZXN1bHRzID0gcnVubmVyLnJlc3VsdHMoKTsKKyAgdmFyIGNsYXNzTmFtZSA9IChy
ZXN1bHRzLmZhaWxlZENvdW50ID4gMCkgPyAicnVubmVyIGZhaWxlZCIgOiAicnVubmVyIHBhc3Nl
ZCI7CisgIHRoaXMucnVubmVyRGl2LnNldEF0dHJpYnV0ZSgiY2xhc3MiLCBjbGFzc05hbWUpOwor
ICAvL2RvIGl0IHR3aWNlIGZvciBJRQorICB0aGlzLnJ1bm5lckRpdi5zZXRBdHRyaWJ1dGUoImNs
YXNzTmFtZSIsIGNsYXNzTmFtZSk7CisgIHZhciBzcGVjcyA9IHJ1bm5lci5zcGVjcygpOworICB2
YXIgc3BlY0NvdW50ID0gMDsKKyAgZm9yICh2YXIgaSA9IDA7IGkgPCBzcGVjcy5sZW5ndGg7IGkr
KykgeworICAgIGlmICh0aGlzLnNwZWNGaWx0ZXIoc3BlY3NbaV0pKSB7CisgICAgICBzcGVjQ291
bnQrKzsKKyAgICB9CisgIH0KKyAgdmFyIG1lc3NhZ2UgPSAiIiArIHNwZWNDb3VudCArICIgc3Bl
YyIgKyAoc3BlY0NvdW50ID09IDEgPyAiIiA6ICJzIiApICsgIiwgIiArIHJlc3VsdHMuZmFpbGVk
Q291bnQgKyAiIGZhaWx1cmUiICsgKChyZXN1bHRzLmZhaWxlZENvdW50ID09IDEpID8gIiIgOiAi
cyIpOworICBtZXNzYWdlICs9ICIgaW4gIiArICgobmV3IERhdGUoKS5nZXRUaW1lKCkgLSB0aGlz
LnN0YXJ0ZWRBdC5nZXRUaW1lKCkpIC8gMTAwMCkgKyAicyI7CisgIHRoaXMucnVubmVyTWVzc2Fn
ZVNwYW4ucmVwbGFjZUNoaWxkKHRoaXMuY3JlYXRlRG9tKCdhJywgeyBjbGFzc05hbWU6ICdkZXNj
cmlwdGlvbicsIGhyZWY6ICc/J30sIG1lc3NhZ2UpLCB0aGlzLnJ1bm5lck1lc3NhZ2VTcGFuLmZp
cnN0Q2hpbGQpOworCisgIHRoaXMuZmluaXNoZWRBdFNwYW4uYXBwZW5kQ2hpbGQoZG9jdW1lbnQu
Y3JlYXRlVGV4dE5vZGUoIkZpbmlzaGVkIGF0ICIgKyBuZXcgRGF0ZSgpLnRvU3RyaW5nKCkpKTsK
K307CisKK2phc21pbmUuVHJpdmlhbFJlcG9ydGVyLnByb3RvdHlwZS5yZXBvcnRTdWl0ZVJlc3Vs
dHMgPSBmdW5jdGlvbihzdWl0ZSkgeworICB2YXIgcmVzdWx0cyA9IHN1aXRlLnJlc3VsdHMoKTsK
KyAgdmFyIHN0YXR1cyA9IHJlc3VsdHMucGFzc2VkKCkgPyAncGFzc2VkJyA6ICdmYWlsZWQnOwor
ICBpZiAocmVzdWx0cy50b3RhbENvdW50ID09PSAwKSB7IC8vIHRvZG86IGNoYW5nZSB0aGlzIHRv
IGNoZWNrIHJlc3VsdHMuc2tpcHBlZAorICAgIHN0YXR1cyA9ICdza2lwcGVkJzsKKyAgfQorICB0
aGlzLnN1aXRlRGl2c1tzdWl0ZS5pZF0uY2xhc3NOYW1lICs9ICIgIiArIHN0YXR1czsKK307CisK
K2phc21pbmUuVHJpdmlhbFJlcG9ydGVyLnByb3RvdHlwZS5yZXBvcnRTcGVjU3RhcnRpbmcgPSBm
dW5jdGlvbihzcGVjKSB7CisgIGlmICh0aGlzLmxvZ1J1bm5pbmdTcGVjcykgeworICAgIHRoaXMu
bG9nKCc+PiBKYXNtaW5lIFJ1bm5pbmcgJyArIHNwZWMuc3VpdGUuZGVzY3JpcHRpb24gKyAnICcg
KyBzcGVjLmRlc2NyaXB0aW9uICsgJy4uLicpOworICB9Cit9OworCitqYXNtaW5lLlRyaXZpYWxS
ZXBvcnRlci5wcm90b3R5cGUucmVwb3J0U3BlY1Jlc3VsdHMgPSBmdW5jdGlvbihzcGVjKSB7Cisg
IHZhciByZXN1bHRzID0gc3BlYy5yZXN1bHRzKCk7CisgIHZhciBzdGF0dXMgPSByZXN1bHRzLnBh
c3NlZCgpID8gJ3Bhc3NlZCcgOiAnZmFpbGVkJzsKKyAgaWYgKHJlc3VsdHMuc2tpcHBlZCkgewor
ICAgIHN0YXR1cyA9ICdza2lwcGVkJzsKKyAgfQorICB2YXIgc3BlY0RpdiA9IHRoaXMuY3JlYXRl
RG9tKCdkaXYnLCB7IGNsYXNzTmFtZTogJ3NwZWMgJyAgKyBzdGF0dXMgfSwKKyAgICAgIHRoaXMu
Y3JlYXRlRG9tKCdhJywgeyBjbGFzc05hbWU6ICdydW5fc3BlYycsIGhyZWY6ICc/c3BlYz0nICsg
ZW5jb2RlVVJJQ29tcG9uZW50KHNwZWMuZ2V0RnVsbE5hbWUoKSkgfSwgInJ1biIpLAorICAgICAg
dGhpcy5jcmVhdGVEb20oJ2EnLCB7CisgICAgICAgIGNsYXNzTmFtZTogJ2Rlc2NyaXB0aW9uJywK
KyAgICAgICAgaHJlZjogJz9zcGVjPScgKyBlbmNvZGVVUklDb21wb25lbnQoc3BlYy5nZXRGdWxs
TmFtZSgpKSwKKyAgICAgICAgdGl0bGU6IHNwZWMuZ2V0RnVsbE5hbWUoKQorICAgICAgfSwgc3Bl
Yy5kZXNjcmlwdGlvbikpOworCisKKyAgdmFyIHJlc3VsdEl0ZW1zID0gcmVzdWx0cy5nZXRJdGVt
cygpOworICB2YXIgbWVzc2FnZXNEaXYgPSB0aGlzLmNyZWF0ZURvbSgnZGl2JywgeyBjbGFzc05h
bWU6ICdtZXNzYWdlcycgfSk7CisgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0SXRlbXMubGVu
Z3RoOyBpKyspIHsKKyAgICB2YXIgcmVzdWx0ID0gcmVzdWx0SXRlbXNbaV07CisKKyAgICBpZiAo
cmVzdWx0LnR5cGUgPT0gJ2xvZycpIHsKKyAgICAgIG1lc3NhZ2VzRGl2LmFwcGVuZENoaWxkKHRo
aXMuY3JlYXRlRG9tKCdkaXYnLCB7Y2xhc3NOYW1lOiAncmVzdWx0TWVzc2FnZSBsb2cnfSwgcmVz
dWx0LnRvU3RyaW5nKCkpKTsKKyAgICB9IGVsc2UgaWYgKHJlc3VsdC50eXBlID09ICdleHBlY3Qn
ICYmIHJlc3VsdC5wYXNzZWQgJiYgIXJlc3VsdC5wYXNzZWQoKSkgeworICAgICAgbWVzc2FnZXNE
aXYuYXBwZW5kQ2hpbGQodGhpcy5jcmVhdGVEb20oJ2RpdicsIHtjbGFzc05hbWU6ICdyZXN1bHRN
ZXNzYWdlIGZhaWwnfSwgcmVzdWx0Lm1lc3NhZ2UpKTsKKworICAgICAgaWYgKHJlc3VsdC50cmFj
ZS5zdGFjaykgeworICAgICAgICBtZXNzYWdlc0Rpdi5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZURv
bSgnZGl2Jywge2NsYXNzTmFtZTogJ3N0YWNrVHJhY2UnfSwgcmVzdWx0LnRyYWNlLnN0YWNrKSk7
CisgICAgICB9CisgICAgfQorICB9CisKKyAgaWYgKG1lc3NhZ2VzRGl2LmNoaWxkTm9kZXMubGVu
Z3RoID4gMCkgeworICAgIHNwZWNEaXYuYXBwZW5kQ2hpbGQobWVzc2FnZXNEaXYpOworICB9CisK
KyAgdGhpcy5zdWl0ZURpdnNbc3BlYy5zdWl0ZS5pZF0uYXBwZW5kQ2hpbGQoc3BlY0Rpdik7Cit9
OworCitqYXNtaW5lLlRyaXZpYWxSZXBvcnRlci5wcm90b3R5cGUubG9nID0gZnVuY3Rpb24oKSB7
CisgIHZhciBjb25zb2xlID0gamFzbWluZS5nZXRHbG9iYWwoKS5jb25zb2xlOworICBpZiAoY29u
c29sZSAmJiBjb25zb2xlLmxvZykgeworICAgIGlmIChjb25zb2xlLmxvZy5hcHBseSkgeworICAg
ICAgY29uc29sZS5sb2cuYXBwbHkoY29uc29sZSwgYXJndW1lbnRzKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgY29uc29sZS5sb2coYXJndW1lbnRzKTsgLy8gaWUgZml4OiBjb25zb2xlLmxvZy5hcHBs
eSBkb2Vzbid0IGV4aXN0IG9uIGllCisgICAgfQorICB9Cit9OworCitqYXNtaW5lLlRyaXZpYWxS
ZXBvcnRlci5wcm90b3R5cGUuZ2V0TG9jYXRpb24gPSBmdW5jdGlvbigpIHsKKyAgcmV0dXJuIHRo
aXMuZG9jdW1lbnQubG9jYXRpb247Cit9OworCitqYXNtaW5lLlRyaXZpYWxSZXBvcnRlci5wcm90
b3R5cGUuc3BlY0ZpbHRlciA9IGZ1bmN0aW9uKHNwZWMpIHsKKyAgdmFyIHBhcmFtTWFwID0ge307
CisgIHZhciBwYXJhbXMgPSB0aGlzLmdldExvY2F0aW9uKCkuc2VhcmNoLnN1YnN0cmluZygxKS5z
cGxpdCgnJicpOworICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmFtcy5sZW5ndGg7IGkrKykgewor
ICAgIHZhciBwID0gcGFyYW1zW2ldLnNwbGl0KCc9Jyk7CisgICAgcGFyYW1NYXBbZGVjb2RlVVJJ
Q29tcG9uZW50KHBbMF0pXSA9IGRlY29kZVVSSUNvbXBvbmVudChwWzFdKTsKKyAgfQorCisgIGlm
ICghcGFyYW1NYXAuc3BlYykgeworICAgIHJldHVybiB0cnVlOworICB9CisgIHJldHVybiBzcGVj
LmdldEZ1bGxOYW1lKCkuaW5kZXhPZihwYXJhbU1hcC5zcGVjKSA9PT0gMDsKK307CkluZGV4OiBQ
ZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBv
bmVudHMvZXM1LXNoaW0vdGVzdHMvbGliL2phc21pbmUuY3NzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZv
cm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50
cy9lczUtc2hpbS90ZXN0cy9saWIvamFzbWluZS5jc3MJKHJldmlzaW9uIDApCisrKyBQZXJmb3Jt
YW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMv
ZXM1LXNoaW0vdGVzdHMvbGliL2phc21pbmUuY3NzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTY2IEBACitib2R5IHsKKyAgZm9udC1mYW1pbHk6ICJIZWx2ZXRpY2EgTmV1ZSBMaWdodCIsICJM
dWNpZGEgR3JhbmRlIiwgIkNhbGlicmkiLCAiQXJpYWwiLCBzYW5zLXNlcmlmOworfQorCisKKy5q
YXNtaW5lX3JlcG9ydGVyIGE6dmlzaXRlZCwgLmphc21pbmVfcmVwb3J0ZXIgYSB7CisgIGNvbG9y
OiAjMzAzOyAKK30KKworLmphc21pbmVfcmVwb3J0ZXIgYTpob3ZlciwgLmphc21pbmVfcmVwb3J0
ZXIgYTphY3RpdmUgeworICBjb2xvcjogYmx1ZTsgCit9CisKKy5ydW5fc3BlYyB7CisgIGZsb2F0
OnJpZ2h0OworICBwYWRkaW5nLXJpZ2h0OiA1cHg7CisgIGZvbnQtc2l6ZTogLjhlbTsKKyAgdGV4
dC1kZWNvcmF0aW9uOiBub25lOworfQorCisuamFzbWluZV9yZXBvcnRlciB7CisgIG1hcmdpbjog
MCA1cHg7Cit9CisKKy5iYW5uZXIgeworICBjb2xvcjogIzMwMzsKKyAgYmFja2dyb3VuZC1jb2xv
cjogI2ZlZjsKKyAgcGFkZGluZzogNXB4OworfQorCisubG9nbyB7CisgIGZsb2F0OiBsZWZ0Owor
ICBmb250LXNpemU6IDEuMWVtOworICBwYWRkaW5nLWxlZnQ6IDVweDsKK30KKworLmxvZ28gLnZl
cnNpb24geworICBmb250LXNpemU6IC42ZW07CisgIHBhZGRpbmctbGVmdDogMWVtOworfQorCisu
cnVubmVyLnJ1bm5pbmcgeworICBiYWNrZ3JvdW5kLWNvbG9yOiB5ZWxsb3c7Cit9CisKKworLm9w
dGlvbnMgeworICB0ZXh0LWFsaWduOiByaWdodDsKKyAgZm9udC1zaXplOiAuOGVtOworfQorCisK
KworCisuc3VpdGUgeworICBib3JkZXI6IDFweCBvdXRzZXQgZ3JheTsKKyAgbWFyZ2luOiA1cHgg
MDsKKyAgcGFkZGluZy1sZWZ0OiAxZW07Cit9CisKKy5zdWl0ZSAuc3VpdGUgeworICBtYXJnaW46
IDVweDsgCit9CisKKy5zdWl0ZS5wYXNzZWQgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGZkOwor
fQorCisuc3VpdGUuZmFpbGVkIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2ZkZDsKK30KKworLnNw
ZWMgeworICBtYXJnaW46IDVweDsKKyAgcGFkZGluZy1sZWZ0OiAxZW07CisgIGNsZWFyOiBib3Ro
OworfQorCisuc3BlYy5mYWlsZWQsIC5zcGVjLnBhc3NlZCwgLnNwZWMuc2tpcHBlZCB7CisgIHBh
ZGRpbmctYm90dG9tOiA1cHg7CisgIGJvcmRlcjogMXB4IHNvbGlkIGdyYXk7Cit9CisKKy5zcGVj
LmZhaWxlZCB7CisgIGJhY2tncm91bmQtY29sb3I6ICNmYmI7CisgIGJvcmRlci1jb2xvcjogcmVk
OworfQorCisuc3BlYy5wYXNzZWQgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjYmZiOworICBib3Jk
ZXItY29sb3I6IGdyZWVuOworfQorCisuc3BlYy5za2lwcGVkIHsKKyAgYmFja2dyb3VuZC1jb2xv
cjogI2JiYjsKK30KKworLm1lc3NhZ2VzIHsKKyAgYm9yZGVyLWxlZnQ6IDFweCBkYXNoZWQgZ3Jh
eTsKKyAgcGFkZGluZy1sZWZ0OiAxZW07CisgIHBhZGRpbmctcmlnaHQ6IDFlbTsKK30KKworLnBh
c3NlZCB7CisgIGJhY2tncm91bmQtY29sb3I6ICNjZmM7CisgIGRpc3BsYXk6IG5vbmU7Cit9CisK
Ky5mYWlsZWQgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmJiOworfQorCisuc2tpcHBlZCB7Cisg
IGNvbG9yOiAjNzc3OworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlOworICBkaXNwbGF5OiBub25l
OworfQorCisKKy8qLnJlc3VsdE1lc3NhZ2UgeyovCisgIC8qd2hpdGUtc3BhY2U6IHByZTsqLwor
Lyp9Ki8KKworLnJlc3VsdE1lc3NhZ2Ugc3Bhbi5yZXN1bHQgeworICBkaXNwbGF5OiBibG9jazsK
KyAgbGluZS1oZWlnaHQ6IDJlbTsKKyAgY29sb3I6IGJsYWNrOworfQorCisucmVzdWx0TWVzc2Fn
ZSAubWlzbWF0Y2ggeworICBjb2xvcjogYmxhY2s7Cit9CisKKy5zdGFja1RyYWNlIHsKKyAgd2hp
dGUtc3BhY2U6IHByZTsKKyAgZm9udC1zaXplOiAuOGVtOworICBtYXJnaW4tbGVmdDogMTBweDsK
KyAgbWF4LWhlaWdodDogNWVtOworICBvdmVyZmxvdzogYXV0bzsKKyAgYm9yZGVyOiAxcHggaW5z
ZXQgcmVkOworICBwYWRkaW5nOiAxZW07CisgIGJhY2tncm91bmQ6ICNlZWY7Cit9CisKKy5maW5p
c2hlZC1hdCB7CisgIHBhZGRpbmctbGVmdDogMWVtOworICBmb250LXNpemU6IC42ZW07Cit9CisK
Ky5zaG93LXBhc3NlZCAucGFzc2VkLAorLnNob3ctc2tpcHBlZCAuc2tpcHBlZCB7CisgIGRpc3Bs
YXk6IGJsb2NrOworfQorCisKKyNqYXNtaW5lX2NvbnRlbnQgeworICBwb3NpdGlvbjpmaXhlZDsK
KyAgcmlnaHQ6IDEwMCU7Cit9CisKKy5ydW5uZXIgeworICBib3JkZXI6IDFweCBzb2xpZCBncmF5
OworICBkaXNwbGF5OiBibG9jazsKKyAgbWFyZ2luOiA1cHggMDsKKyAgcGFkZGluZzogMnB4IDAg
MnB4IDEwcHg7Cit9CkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdo
dGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvZXM1LXNoaW0vdGVzdHMvbGliL2phc21pbmUuanMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1l
eGFtcGxlLWFwcC9jb21wb25lbnRzL2VzNS1zaGltL3Rlc3RzL2xpYi9qYXNtaW5lLmpzCShyZXZp
c2lvbiAwKQorKysgUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFt
cGxlLWFwcC9jb21wb25lbnRzL2VzNS1zaGltL3Rlc3RzL2xpYi9qYXNtaW5lLmpzCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMjQ3NyBAQAordmFyIGlzQ29tbW9uSlMgPSB0eXBlb2Ygd2luZG93
ID09ICJ1bmRlZmluZWQiOworCisvKioKKyAqIFRvcCBsZXZlbCBuYW1lc3BhY2UgZm9yIEphc21p
bmUsIGEgbGlnaHR3ZWlnaHQgSmF2YVNjcmlwdCBCREQvc3BlYy90ZXN0aW5nIGZyYW1ld29yay4K
KyAqCisgKiBAbmFtZXNwYWNlCisgKi8KK3ZhciBqYXNtaW5lID0ge307CitpZiAoaXNDb21tb25K
UykgZXhwb3J0cy5qYXNtaW5lID0gamFzbWluZTsKKy8qKgorICogQHByaXZhdGUKKyAqLworamFz
bWluZS51bmltcGxlbWVudGVkTWV0aG9kXyA9IGZ1bmN0aW9uKCkgeworICB0aHJvdyBuZXcgRXJy
b3IoInVuaW1wbGVtZW50ZWQgbWV0aG9kIik7Cit9OworCisvKioKKyAqIFVzZSA8Y29kZT5qYXNt
aW5lLnVuZGVmaW5lZDwvY29kZT4gaW5zdGVhZCBvZiA8Y29kZT51bmRlZmluZWQ8L2NvZGU+LCBz
aW5jZSA8Y29kZT51bmRlZmluZWQ8L2NvZGU+IGlzIGp1c3QKKyAqIGEgcGxhaW4gb2xkIHZhcmlh
YmxlIGFuZCBtYXkgYmUgcmVkZWZpbmVkIGJ5IHNvbWVib2R5IGVsc2UuCisgKgorICogQHByaXZh
dGUKKyAqLworamFzbWluZS51bmRlZmluZWQgPSBqYXNtaW5lLl9fX3VuZGVmaW5lZF9fXzsKKwor
LyoqCisgKiBTaG93IGRpYWdub3N0aWMgbWVzc2FnZXMgaW4gdGhlIGNvbnNvbGUgaWYgc2V0IHRv
IHRydWUKKyAqCisgKi8KK2phc21pbmUuVkVSQk9TRSA9IGZhbHNlOworCisvKioKKyAqIERlZmF1
bHQgaW50ZXJ2YWwgaW4gbWlsbGlzZWNvbmRzIGZvciBldmVudCBsb29wIHlpZWxkcyAoZS5nLiB0
byBhbGxvdyBuZXR3b3JrIGFjdGl2aXR5IG9yIHRvIHJlZnJlc2ggdGhlIHNjcmVlbiB3aXRoIHRo
ZSBIVE1MLWJhc2VkIHJ1bm5lcikuIFNtYWxsIHZhbHVlcyBoZXJlIG1heSByZXN1bHQgaW4gc2xv
dyB0ZXN0IHJ1bm5pbmcuIFplcm8gbWVhbnMgbm8gdXBkYXRlcyB1bnRpbCBhbGwgdGVzdHMgaGF2
ZSBjb21wbGV0ZWQuCisgKgorICovCitqYXNtaW5lLkRFRkFVTFRfVVBEQVRFX0lOVEVSVkFMID0g
MjUwOworCisvKioKKyAqIERlZmF1bHQgdGltZW91dCBpbnRlcnZhbCBpbiBtaWxsaXNlY29uZHMg
Zm9yIHdhaXRzRm9yKCkgYmxvY2tzLgorICovCitqYXNtaW5lLkRFRkFVTFRfVElNRU9VVF9JTlRF
UlZBTCA9IDUwMDA7CisKK2phc21pbmUuZ2V0R2xvYmFsID0gZnVuY3Rpb24oKSB7CisgIGZ1bmN0
aW9uIGdldEdsb2JhbCgpIHsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIHJldHVybiBnZXRH
bG9iYWwoKTsKK307CisKKy8qKgorICogQWxsb3dzIGZvciBib3VuZCBmdW5jdGlvbnMgdG8gYmUg
Y29tcGFyZWQuICBJbnRlcm5hbCB1c2Ugb25seS4KKyAqCisgKiBAaWdub3JlCisgKiBAcHJpdmF0
ZQorICogQHBhcmFtIGJhc2Uge09iamVjdH0gYm91bmQgJ3RoaXMnIGZvciB0aGUgZnVuY3Rpb24K
KyAqIEBwYXJhbSBuYW1lIHtGdW5jdGlvbn0gZnVuY3Rpb24gdG8gZmluZAorICovCitqYXNtaW5l
LmJpbmRPcmlnaW5hbF8gPSBmdW5jdGlvbihiYXNlLCBuYW1lKSB7CisgIHZhciBvcmlnaW5hbCA9
IGJhc2VbbmFtZV07CisgIGlmIChvcmlnaW5hbC5hcHBseSkgeworICAgIHJldHVybiBmdW5jdGlv
bigpIHsKKyAgICAgIHJldHVybiBvcmlnaW5hbC5hcHBseShiYXNlLCBhcmd1bWVudHMpOworICAg
IH07CisgIH0gZWxzZSB7CisgICAgLy8gSUUgc3VwcG9ydAorICAgIHJldHVybiBqYXNtaW5lLmdl
dEdsb2JhbCgpW25hbWVdOworICB9Cit9OworCitqYXNtaW5lLnNldFRpbWVvdXQgPSBqYXNtaW5l
LmJpbmRPcmlnaW5hbF8oamFzbWluZS5nZXRHbG9iYWwoKSwgJ3NldFRpbWVvdXQnKTsKK2phc21p
bmUuY2xlYXJUaW1lb3V0ID0gamFzbWluZS5iaW5kT3JpZ2luYWxfKGphc21pbmUuZ2V0R2xvYmFs
KCksICdjbGVhclRpbWVvdXQnKTsKK2phc21pbmUuc2V0SW50ZXJ2YWwgPSBqYXNtaW5lLmJpbmRP
cmlnaW5hbF8oamFzbWluZS5nZXRHbG9iYWwoKSwgJ3NldEludGVydmFsJyk7CitqYXNtaW5lLmNs
ZWFySW50ZXJ2YWwgPSBqYXNtaW5lLmJpbmRPcmlnaW5hbF8oamFzbWluZS5nZXRHbG9iYWwoKSwg
J2NsZWFySW50ZXJ2YWwnKTsKKworamFzbWluZS5NZXNzYWdlUmVzdWx0ID0gZnVuY3Rpb24odmFs
dWVzKSB7CisgIHRoaXMudHlwZSA9ICdsb2cnOworICB0aGlzLnZhbHVlcyA9IHZhbHVlczsKKyAg
dGhpcy50cmFjZSA9IG5ldyBFcnJvcigpOyAvLyB0b2RvOiB0ZXN0IGJldHRlcgorfTsKKworamFz
bWluZS5NZXNzYWdlUmVzdWx0LnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkgeworICB2
YXIgdGV4dCA9ICIiOworICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudmFsdWVzLmxlbmd0aDsg
aSsrKSB7CisgICAgaWYgKGkgPiAwKSB0ZXh0ICs9ICIgIjsKKyAgICBpZiAoamFzbWluZS5pc1N0
cmluZ18odGhpcy52YWx1ZXNbaV0pKSB7CisgICAgICB0ZXh0ICs9IHRoaXMudmFsdWVzW2ldOwor
ICAgIH0gZWxzZSB7CisgICAgICB0ZXh0ICs9IGphc21pbmUucHAodGhpcy52YWx1ZXNbaV0pOwor
ICAgIH0KKyAgfQorICByZXR1cm4gdGV4dDsKK307CisKK2phc21pbmUuRXhwZWN0YXRpb25SZXN1
bHQgPSBmdW5jdGlvbihwYXJhbXMpIHsKKyAgdGhpcy50eXBlID0gJ2V4cGVjdCc7CisgIHRoaXMu
bWF0Y2hlck5hbWUgPSBwYXJhbXMubWF0Y2hlck5hbWU7CisgIHRoaXMucGFzc2VkXyA9IHBhcmFt
cy5wYXNzZWQ7CisgIHRoaXMuZXhwZWN0ZWQgPSBwYXJhbXMuZXhwZWN0ZWQ7CisgIHRoaXMuYWN0
dWFsID0gcGFyYW1zLmFjdHVhbDsKKyAgdGhpcy5tZXNzYWdlID0gdGhpcy5wYXNzZWRfID8gJ1Bh
c3NlZC4nIDogcGFyYW1zLm1lc3NhZ2U7CisKKyAgdmFyIHRyYWNlID0gKHBhcmFtcy50cmFjZSB8
fCBuZXcgRXJyb3IodGhpcy5tZXNzYWdlKSk7CisgIHRoaXMudHJhY2UgPSB0aGlzLnBhc3NlZF8g
PyAnJyA6IHRyYWNlOworfTsKKworamFzbWluZS5FeHBlY3RhdGlvblJlc3VsdC5wcm90b3R5cGUu
dG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7CisgIHJldHVybiB0aGlzLm1lc3NhZ2U7Cit9OworCitq
YXNtaW5lLkV4cGVjdGF0aW9uUmVzdWx0LnByb3RvdHlwZS5wYXNzZWQgPSBmdW5jdGlvbiAoKSB7
CisgIHJldHVybiB0aGlzLnBhc3NlZF87Cit9OworCisvKioKKyAqIEdldHRlciBmb3IgdGhlIEph
c21pbmUgZW52aXJvbm1lbnQuIEVuc3VyZXMgb25lIGdldHMgY3JlYXRlZAorICovCitqYXNtaW5l
LmdldEVudiA9IGZ1bmN0aW9uKCkgeworICB2YXIgZW52ID0gamFzbWluZS5jdXJyZW50RW52XyA9
IGphc21pbmUuY3VycmVudEVudl8gfHwgbmV3IGphc21pbmUuRW52KCk7CisgIHJldHVybiBlbnY7
Cit9OworCisvKioKKyAqIEBpZ25vcmUKKyAqIEBwcml2YXRlCisgKiBAcGFyYW0gdmFsdWUKKyAq
IEByZXR1cm5zIHtCb29sZWFufQorICovCitqYXNtaW5lLmlzQXJyYXlfID0gZnVuY3Rpb24odmFs
dWUpIHsKKyAgcmV0dXJuIGphc21pbmUuaXNBXygiQXJyYXkiLCB2YWx1ZSk7Cit9OworCisvKioK
KyAqIEBpZ25vcmUKKyAqIEBwcml2YXRlCisgKiBAcGFyYW0gdmFsdWUKKyAqIEByZXR1cm5zIHtC
b29sZWFufQorICovCitqYXNtaW5lLmlzU3RyaW5nXyA9IGZ1bmN0aW9uKHZhbHVlKSB7CisgIHJl
dHVybiBqYXNtaW5lLmlzQV8oIlN0cmluZyIsIHZhbHVlKTsKK307CisKKy8qKgorICogQGlnbm9y
ZQorICogQHByaXZhdGUKKyAqIEBwYXJhbSB2YWx1ZQorICogQHJldHVybnMge0Jvb2xlYW59Cisg
Ki8KK2phc21pbmUuaXNOdW1iZXJfID0gZnVuY3Rpb24odmFsdWUpIHsKKyAgcmV0dXJuIGphc21p
bmUuaXNBXygiTnVtYmVyIiwgdmFsdWUpOworfTsKKworLyoqCisgKiBAaWdub3JlCisgKiBAcHJp
dmF0ZQorICogQHBhcmFtIHtTdHJpbmd9IHR5cGVOYW1lCisgKiBAcGFyYW0gdmFsdWUKKyAqIEBy
ZXR1cm5zIHtCb29sZWFufQorICovCitqYXNtaW5lLmlzQV8gPSBmdW5jdGlvbih0eXBlTmFtZSwg
dmFsdWUpIHsKKyAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuYXBwbHkodmFsdWUp
ID09PSAnW29iamVjdCAnICsgdHlwZU5hbWUgKyAnXSc7Cit9OworCisvKioKKyAqIFByZXR0eSBw
cmludGVyIGZvciBleHBlY2F0aW9ucy4gIFRha2VzIGFueSBvYmplY3QgYW5kIHR1cm5zIGl0IGlu
dG8gYSBodW1hbi1yZWFkYWJsZSBzdHJpbmcuCisgKgorICogQHBhcmFtIHZhbHVlIHtPYmplY3R9
IGFuIG9iamVjdCB0byBiZSBvdXRwdXR0ZWQKKyAqIEByZXR1cm5zIHtTdHJpbmd9CisgKi8KK2ph
c21pbmUucHAgPSBmdW5jdGlvbih2YWx1ZSkgeworICB2YXIgc3RyaW5nUHJldHR5UHJpbnRlciA9
IG5ldyBqYXNtaW5lLlN0cmluZ1ByZXR0eVByaW50ZXIoKTsKKyAgc3RyaW5nUHJldHR5UHJpbnRl
ci5mb3JtYXQodmFsdWUpOworICByZXR1cm4gc3RyaW5nUHJldHR5UHJpbnRlci5zdHJpbmc7Cit9
OworCisvKioKKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgb2JqZWN0IGlzIGEgRE9NIE5vZGUuCisg
KgorICogQHBhcmFtIHtPYmplY3R9IG9iaiBvYmplY3QgdG8gY2hlY2sKKyAqIEByZXR1cm5zIHtC
b29sZWFufQorICovCitqYXNtaW5lLmlzRG9tTm9kZSA9IGZ1bmN0aW9uKG9iaikgeworICByZXR1
cm4gb2JqLm5vZGVUeXBlID4gMDsKK307CisKKy8qKgorICogUmV0dXJucyBhIG1hdGNoYWJsZSAn
Z2VuZXJpYycgb2JqZWN0IG9mIHRoZSBjbGFzcyB0eXBlLiAgRm9yIHVzZSBpbiBleHBlY2F0aW9u
cyBvZiB0eXBlIHdoZW4gdmFsdWVzIGRvbid0IG1hdHRlci4KKyAqCisgKiBAZXhhbXBsZQorICog
Ly8gZG9uJ3QgY2FyZSBhYm91dCB3aGljaCBmdW5jdGlvbiBpcyBwYXNzZWQgaW4sIGFzIGxvbmcg
YXMgaXQncyBhIGZ1bmN0aW9uCisgKiBleHBlY3QobXlTcHkpLnRvSGF2ZUJlZW5DYWxsZWRXaXRo
KGphc21pbmUuYW55KEZ1bmN0aW9uKSk7CisgKgorICogQHBhcmFtIHtDbGFzc30gY2xhenoKKyAq
IEByZXR1cm5zIG1hdGNoYWJsZSBvYmplY3Qgb2YgdGhlIHR5cGUgY2xhenoKKyAqLworamFzbWlu
ZS5hbnkgPSBmdW5jdGlvbihjbGF6eikgeworICByZXR1cm4gbmV3IGphc21pbmUuTWF0Y2hlcnMu
QW55KGNsYXp6KTsKK307CisKKy8qKgorICogSmFzbWluZSBTcGllcyBhcmUgdGVzdCBkb3VibGVz
IHRoYXQgY2FuIGFjdCBhcyBzdHVicywgc3BpZXMsIGZha2VzIG9yIHdoZW4gdXNlZCBpbiBhbiBl
eHBlY2F0aW9uLCBtb2Nrcy4KKyAqCisgKiBTcGllcyBzaG91bGQgYmUgY3JlYXRlZCBpbiB0ZXN0
IHNldHVwLCBiZWZvcmUgZXhwZWN0YXRpb25zLiAgVGhleSBjYW4gdGhlbiBiZSBjaGVja2VkLCB1
c2luZyB0aGUgc3RhbmRhcmQgSmFzbWluZQorICogZXhwZWN0YXRpb24gc3ludGF4LiBTcGllcyBj
YW4gYmUgY2hlY2tlZCBpZiB0aGV5IHdlcmUgY2FsbGVkIG9yIG5vdCBhbmQgd2hhdCB0aGUgY2Fs
bGluZyBwYXJhbXMgd2VyZS4KKyAqCisgKiBBIFNweSBoYXMgdGhlIGZvbGxvd2luZyBmaWVsZHM6
IHdhc0NhbGxlZCwgY2FsbENvdW50LCBtb3N0UmVjZW50Q2FsbCwgYW5kIGFyZ3NGb3JDYWxsIChz
ZWUgZG9jcykuCisgKgorICogU3BpZXMgYXJlIHRvcm4gZG93biBhdCB0aGUgZW5kIG9mIGV2ZXJ5
IHNwZWMuCisgKgorICogTm90ZTogRG8gPGI+bm90PC9iPiBjYWxsIG5ldyBqYXNtaW5lLlNweSgp
IGRpcmVjdGx5IC0gYSBzcHkgbXVzdCBiZSBjcmVhdGVkIHVzaW5nIHNweU9uLCBqYXNtaW5lLmNy
ZWF0ZVNweSBvciBqYXNtaW5lLmNyZWF0ZVNweU9iai4KKyAqCisgKiBAZXhhbXBsZQorICogLy8g
YSBzdHViCisgKiB2YXIgbXlTdHViID0gamFzbWluZS5jcmVhdGVTcHkoJ215U3R1YicpOyAgLy8g
Y2FuIGJlIHVzZWQgYW55d2hlcmUKKyAqCisgKiAvLyBzcHkgZXhhbXBsZQorICogdmFyIGZvbyA9
IHsKKyAqICAgbm90OiBmdW5jdGlvbihib29sKSB7IHJldHVybiAhYm9vbDsgfQorICogfQorICoK
KyAqIC8vIGFjdHVhbCBmb28ubm90IHdpbGwgbm90IGJlIGNhbGxlZCwgZXhlY3V0aW9uIHN0b3Bz
CisgKiBzcHlPbihmb28sICdub3QnKTsKKworIC8vIGZvby5ub3Qgc3BpZWQgdXBvbiwgZXhlY3V0
aW9uIHdpbGwgY29udGludWUgdG8gaW1wbGVtZW50YXRpb24KKyAqIHNweU9uKGZvbywgJ25vdCcp
LmFuZENhbGxUaHJvdWdoKCk7CisgKgorICogLy8gZmFrZSBleGFtcGxlCisgKiB2YXIgZm9vID0g
eworICogICBub3Q6IGZ1bmN0aW9uKGJvb2wpIHsgcmV0dXJuICFib29sOyB9CisgKiB9CisgKgor
ICogLy8gZm9vLm5vdCh2YWwpIHdpbGwgcmV0dXJuIHZhbAorICogc3B5T24oZm9vLCAnbm90Jyku
YW5kQ2FsbEZha2UoZnVuY3Rpb24odmFsdWUpIHtyZXR1cm4gdmFsdWU7fSk7CisgKgorICogLy8g
bW9jayBleGFtcGxlCisgKiBmb28ubm90KDcgPT0gNyk7CisgKiBleHBlY3QoZm9vLm5vdCkudG9I
YXZlQmVlbkNhbGxlZCgpOworICogZXhwZWN0KGZvby5ub3QpLnRvSGF2ZUJlZW5DYWxsZWRXaXRo
KHRydWUpOworICoKKyAqIEBjb25zdHJ1Y3RvcgorICogQHNlZSBzcHlPbiwgamFzbWluZS5jcmVh
dGVTcHksIGphc21pbmUuY3JlYXRlU3B5T2JqCisgKiBAcGFyYW0ge1N0cmluZ30gbmFtZQorICov
CitqYXNtaW5lLlNweSA9IGZ1bmN0aW9uKG5hbWUpIHsKKyAgLyoqCisgICAqIFRoZSBuYW1lIG9m
IHRoZSBzcHksIGlmIHByb3ZpZGVkLgorICAgKi8KKyAgdGhpcy5pZGVudGl0eSA9IG5hbWUgfHwg
J3Vua25vd24nOworICAvKioKKyAgICogIElzIHRoaXMgT2JqZWN0IGEgc3B5PworICAgKi8KKyAg
dGhpcy5pc1NweSA9IHRydWU7CisgIC8qKgorICAgKiBUaGUgYWN0dWFsIGZ1bmN0aW9uIHRoaXMg
c3B5IHN0dWJzLgorICAgKi8KKyAgdGhpcy5wbGFuID0gZnVuY3Rpb24oKSB7CisgIH07CisgIC8q
KgorICAgKiBUcmFja2luZyBvZiB0aGUgbW9zdCByZWNlbnQgY2FsbCB0byB0aGUgc3B5LgorICAg
KiBAZXhhbXBsZQorICAgKiB2YXIgbXlTcHkgPSBqYXNtaW5lLmNyZWF0ZVNweSgnZm9vJyk7Cisg
ICAqIG15U3B5KDEsIDIpOworICAgKiBteVNweS5tb3N0UmVjZW50Q2FsbC5hcmdzID0gWzEsIDJd
OworICAgKi8KKyAgdGhpcy5tb3N0UmVjZW50Q2FsbCA9IHt9OworCisgIC8qKgorICAgKiBIb2xk
cyBhcmd1bWVudHMgZm9yIGVhY2ggY2FsbCB0byB0aGUgc3B5LCBpbmRleGVkIGJ5IGNhbGwgY291
bnQKKyAgICogQGV4YW1wbGUKKyAgICogdmFyIG15U3B5ID0gamFzbWluZS5jcmVhdGVTcHkoJ2Zv
bycpOworICAgKiBteVNweSgxLCAyKTsKKyAgICogbXlTcHkoNywgOCk7CisgICAqIG15U3B5Lm1v
c3RSZWNlbnRDYWxsLmFyZ3MgPSBbNywgOF07CisgICAqIG15U3B5LmFyZ3NGb3JDYWxsWzBdID0g
WzEsIDJdOworICAgKiBteVNweS5hcmdzRm9yQ2FsbFsxXSA9IFs3LCA4XTsKKyAgICovCisgIHRo
aXMuYXJnc0ZvckNhbGwgPSBbXTsKKyAgdGhpcy5jYWxscyA9IFtdOworfTsKKworLyoqCisgKiBU
ZWxscyBhIHNweSB0byBjYWxsIHRocm91Z2ggdG8gdGhlIGFjdHVhbCBpbXBsZW1lbmF0YXRpb24u
CisgKgorICogQGV4YW1wbGUKKyAqIHZhciBmb28gPSB7CisgKiAgIGJhcjogZnVuY3Rpb24oKSB7
IC8vIGRvIHNvbWUgc3R1ZmYgfQorICogfQorICoKKyAqIC8vIGRlZmluaW5nIGEgc3B5IG9uIGFu
IGV4aXN0aW5nIHByb3BlcnR5OiBmb28uYmFyCisgKiBzcHlPbihmb28sICdiYXInKS5hbmRDYWxs
VGhyb3VnaCgpOworICovCitqYXNtaW5lLlNweS5wcm90b3R5cGUuYW5kQ2FsbFRocm91Z2ggPSBm
dW5jdGlvbigpIHsKKyAgdGhpcy5wbGFuID0gdGhpcy5vcmlnaW5hbFZhbHVlOworICByZXR1cm4g
dGhpczsKK307CisKKy8qKgorICogRm9yIHNldHRpbmcgdGhlIHJldHVybiB2YWx1ZSBvZiBhIHNw
eS4KKyAqCisgKiBAZXhhbXBsZQorICogLy8gZGVmaW5pbmcgYSBzcHkgZnJvbSBzY3JhdGNoOiBm
b28oKSByZXR1cm5zICdiYXonCisgKiB2YXIgZm9vID0gamFzbWluZS5jcmVhdGVTcHkoJ3NweSBv
biBmb28nKS5hbmRSZXR1cm4oJ2JheicpOworICoKKyAqIC8vIGRlZmluaW5nIGEgc3B5IG9uIGFu
IGV4aXN0aW5nIHByb3BlcnR5OiBmb28uYmFyKCkgcmV0dXJucyAnYmF6JworICogc3B5T24oZm9v
LCAnYmFyJykuYW5kUmV0dXJuKCdiYXonKTsKKyAqCisgKiBAcGFyYW0ge09iamVjdH0gdmFsdWUK
KyAqLworamFzbWluZS5TcHkucHJvdG90eXBlLmFuZFJldHVybiA9IGZ1bmN0aW9uKHZhbHVlKSB7
CisgIHRoaXMucGxhbiA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB2YWx1ZTsKKyAgfTsKKyAg
cmV0dXJuIHRoaXM7Cit9OworCisvKioKKyAqIEZvciB0aHJvd2luZyBhbiBleGNlcHRpb24gd2hl
biBhIHNweSBpcyBjYWxsZWQuCisgKgorICogQGV4YW1wbGUKKyAqIC8vIGRlZmluaW5nIGEgc3B5
IGZyb20gc2NyYXRjaDogZm9vKCkgdGhyb3dzIGFuIGV4Y2VwdGlvbiB3LyBtZXNzYWdlICdvdWNo
JworICogdmFyIGZvbyA9IGphc21pbmUuY3JlYXRlU3B5KCdzcHkgb24gZm9vJykuYW5kVGhyb3co
J2JheicpOworICoKKyAqIC8vIGRlZmluaW5nIGEgc3B5IG9uIGFuIGV4aXN0aW5nIHByb3BlcnR5
OiBmb28uYmFyKCkgdGhyb3dzIGFuIGV4Y2VwdGlvbiB3LyBtZXNzYWdlICdvdWNoJworICogc3B5
T24oZm9vLCAnYmFyJykuYW5kVGhyb3coJ2JheicpOworICoKKyAqIEBwYXJhbSB7U3RyaW5nfSBl
eGNlcHRpb25Nc2cKKyAqLworamFzbWluZS5TcHkucHJvdG90eXBlLmFuZFRocm93ID0gZnVuY3Rp
b24oZXhjZXB0aW9uTXNnKSB7CisgIHRoaXMucGxhbiA9IGZ1bmN0aW9uKCkgeworICAgIHRocm93
IGV4Y2VwdGlvbk1zZzsKKyAgfTsKKyAgcmV0dXJuIHRoaXM7Cit9OworCisvKioKKyAqIENhbGxz
IGFuIGFsdGVybmF0ZSBpbXBsZW1lbnRhdGlvbiB3aGVuIGEgc3B5IGlzIGNhbGxlZC4KKyAqCisg
KiBAZXhhbXBsZQorICogdmFyIGJheiA9IGZ1bmN0aW9uKCkgeworICogICAvLyBkbyBzb21lIHN0
dWZmLCByZXR1cm4gc29tZXRoaW5nCisgKiB9CisgKiAvLyBkZWZpbmluZyBhIHNweSBmcm9tIHNj
cmF0Y2g6IGZvbygpIGNhbGxzIHRoZSBmdW5jdGlvbiBiYXoKKyAqIHZhciBmb28gPSBqYXNtaW5l
LmNyZWF0ZVNweSgnc3B5IG9uIGZvbycpLmFuZENhbGwoYmF6KTsKKyAqCisgKiAvLyBkZWZpbmlu
ZyBhIHNweSBvbiBhbiBleGlzdGluZyBwcm9wZXJ0eTogZm9vLmJhcigpIGNhbGxzIGFuIGFub255
bW5vdXMgZnVuY3Rpb24KKyAqIHNweU9uKGZvbywgJ2JhcicpLmFuZENhbGwoZnVuY3Rpb24oKSB7
IHJldHVybiAnYmF6Jzt9ICk7CisgKgorICogQHBhcmFtIHtGdW5jdGlvbn0gZmFrZUZ1bmMKKyAq
LworamFzbWluZS5TcHkucHJvdG90eXBlLmFuZENhbGxGYWtlID0gZnVuY3Rpb24oZmFrZUZ1bmMp
IHsKKyAgdGhpcy5wbGFuID0gZmFrZUZ1bmM7CisgIHJldHVybiB0aGlzOworfTsKKworLyoqCisg
KiBSZXNldHMgYWxsIG9mIGEgc3B5J3MgdGhlIHRyYWNraW5nIHZhcmlhYmxlcyBzbyB0aGF0IGl0
IGNhbiBiZSB1c2VkIGFnYWluLgorICoKKyAqIEBleGFtcGxlCisgKiBzcHlPbihmb28sICdiYXIn
KTsKKyAqCisgKiBmb28uYmFyKCk7CisgKgorICogZXhwZWN0KGZvby5iYXIuY2FsbENvdW50KS50
b0VxdWFsKDEpOworICoKKyAqIGZvby5iYXIucmVzZXQoKTsKKyAqCisgKiBleHBlY3QoZm9vLmJh
ci5jYWxsQ291bnQpLnRvRXF1YWwoMCk7CisgKi8KK2phc21pbmUuU3B5LnByb3RvdHlwZS5yZXNl
dCA9IGZ1bmN0aW9uKCkgeworICB0aGlzLndhc0NhbGxlZCA9IGZhbHNlOworICB0aGlzLmNhbGxD
b3VudCA9IDA7CisgIHRoaXMuYXJnc0ZvckNhbGwgPSBbXTsKKyAgdGhpcy5jYWxscyA9IFtdOwor
ICB0aGlzLm1vc3RSZWNlbnRDYWxsID0ge307Cit9OworCitqYXNtaW5lLmNyZWF0ZVNweSA9IGZ1
bmN0aW9uKG5hbWUpIHsKKworICB2YXIgc3B5T2JqID0gZnVuY3Rpb24oKSB7CisgICAgc3B5T2Jq
Lndhc0NhbGxlZCA9IHRydWU7CisgICAgc3B5T2JqLmNhbGxDb3VudCsrOworICAgIHZhciBhcmdz
ID0gamFzbWluZS51dGlsLmFyZ3NUb0FycmF5KGFyZ3VtZW50cyk7CisgICAgc3B5T2JqLm1vc3RS
ZWNlbnRDYWxsLm9iamVjdCA9IHRoaXM7CisgICAgc3B5T2JqLm1vc3RSZWNlbnRDYWxsLmFyZ3Mg
PSBhcmdzOworICAgIHNweU9iai5hcmdzRm9yQ2FsbC5wdXNoKGFyZ3MpOworICAgIHNweU9iai5j
YWxscy5wdXNoKHtvYmplY3Q6IHRoaXMsIGFyZ3M6IGFyZ3N9KTsKKyAgICByZXR1cm4gc3B5T2Jq
LnBsYW4uYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKyAgfTsKKworICB2YXIgc3B5ID0gbmV3IGph
c21pbmUuU3B5KG5hbWUpOworCisgIGZvciAodmFyIHByb3AgaW4gc3B5KSB7CisgICAgc3B5T2Jq
W3Byb3BdID0gc3B5W3Byb3BdOworICB9CisKKyAgc3B5T2JqLnJlc2V0KCk7CisKKyAgcmV0dXJu
IHNweU9iajsKK307CisKKy8qKgorICogRGV0ZXJtaW5lcyB3aGV0aGVyIGFuIG9iamVjdCBpcyBh
IHNweS4KKyAqCisgKiBAcGFyYW0ge2phc21pbmUuU3B5fE9iamVjdH0gcHV0YXRpdmVTcHkKKyAq
IEByZXR1cm5zIHtCb29sZWFufQorICovCitqYXNtaW5lLmlzU3B5ID0gZnVuY3Rpb24ocHV0YXRp
dmVTcHkpIHsKKyAgcmV0dXJuIHB1dGF0aXZlU3B5ICYmIHB1dGF0aXZlU3B5LmlzU3B5OworfTsK
KworLyoqCisgKiBDcmVhdGVzIGEgbW9yZSBjb21wbGljYXRlZCBzcHk6IGFuIE9iamVjdCB0aGF0
IGhhcyBldmVyeSBwcm9wZXJ0eSBhIGZ1bmN0aW9uIHRoYXQgaXMgYSBzcHkuICBVc2VkIGZvciBz
dHViYmluZyBzb21ldGhpbmcKKyAqIGxhcmdlIGluIG9uZSBjYWxsLgorICoKKyAqIEBwYXJhbSB7
U3RyaW5nfSBiYXNlTmFtZSBuYW1lIG9mIHNweSBjbGFzcworICogQHBhcmFtIHtBcnJheX0gbWV0
aG9kTmFtZXMgYXJyYXkgb2YgbmFtZXMgb2YgbWV0aG9kcyB0byBtYWtlIHNwaWVzCisgKi8KK2ph
c21pbmUuY3JlYXRlU3B5T2JqID0gZnVuY3Rpb24oYmFzZU5hbWUsIG1ldGhvZE5hbWVzKSB7Cisg
IGlmICghamFzbWluZS5pc0FycmF5XyhtZXRob2ROYW1lcykgfHwgbWV0aG9kTmFtZXMubGVuZ3Ro
ID09PSAwKSB7CisgICAgdGhyb3cgbmV3IEVycm9yKCdjcmVhdGVTcHlPYmogcmVxdWlyZXMgYSBu
b24tZW1wdHkgYXJyYXkgb2YgbWV0aG9kIG5hbWVzIHRvIGNyZWF0ZSBzcGllcyBmb3InKTsKKyAg
fQorICB2YXIgb2JqID0ge307CisgIGZvciAodmFyIGkgPSAwOyBpIDwgbWV0aG9kTmFtZXMubGVu
Z3RoOyBpKyspIHsKKyAgICBvYmpbbWV0aG9kTmFtZXNbaV1dID0gamFzbWluZS5jcmVhdGVTcHko
YmFzZU5hbWUgKyAnLicgKyBtZXRob2ROYW1lc1tpXSk7CisgIH0KKyAgcmV0dXJuIG9iajsKK307
CisKKy8qKgorICogQWxsIHBhcmFtZXRlcnMgYXJlIHByZXR0eS1wcmludGVkIGFuZCBjb25jYXRl
bmF0ZWQgdG9nZXRoZXIsIHRoZW4gd3JpdHRlbiB0byB0aGUgY3VycmVudCBzcGVjJ3Mgb3V0cHV0
LgorICoKKyAqIEJlIGNhcmVmdWwgbm90IHRvIGxlYXZlIGNhbGxzIHRvIDxjb2RlPmphc21pbmUu
bG9nPC9jb2RlPiBpbiBwcm9kdWN0aW9uIGNvZGUuCisgKi8KK2phc21pbmUubG9nID0gZnVuY3Rp
b24oKSB7CisgIHZhciBzcGVjID0gamFzbWluZS5nZXRFbnYoKS5jdXJyZW50U3BlYzsKKyAgc3Bl
Yy5sb2cuYXBwbHkoc3BlYywgYXJndW1lbnRzKTsKK307CisKKy8qKgorICogRnVuY3Rpb24gdGhh
dCBpbnN0YWxscyBhIHNweSBvbiBhbiBleGlzdGluZyBvYmplY3QncyBtZXRob2QgbmFtZS4gIFVz
ZWQgd2l0aGluIGEgU3BlYyB0byBjcmVhdGUgYSBzcHkuCisgKgorICogQGV4YW1wbGUKKyAqIC8v
IHNweSBleGFtcGxlCisgKiB2YXIgZm9vID0geworICogICBub3Q6IGZ1bmN0aW9uKGJvb2wpIHsg
cmV0dXJuICFib29sOyB9CisgKiB9CisgKiBzcHlPbihmb28sICdub3QnKTsgLy8gYWN0dWFsIGZv
by5ub3Qgd2lsbCBub3QgYmUgY2FsbGVkLCBleGVjdXRpb24gc3RvcHMKKyAqCisgKiBAc2VlIGph
c21pbmUuY3JlYXRlU3B5CisgKiBAcGFyYW0gb2JqCisgKiBAcGFyYW0gbWV0aG9kTmFtZQorICog
QHJldHVybnMgYSBKYXNtaW5lIHNweSB0aGF0IGNhbiBiZSBjaGFpbmVkIHdpdGggYWxsIHNweSBt
ZXRob2RzCisgKi8KK3ZhciBzcHlPbiA9IGZ1bmN0aW9uKG9iaiwgbWV0aG9kTmFtZSkgeworICBy
ZXR1cm4gamFzbWluZS5nZXRFbnYoKS5jdXJyZW50U3BlYy5zcHlPbihvYmosIG1ldGhvZE5hbWUp
OworfTsKK2lmIChpc0NvbW1vbkpTKSBleHBvcnRzLnNweU9uID0gc3B5T247CisKKy8qKgorICog
Q3JlYXRlcyBhIEphc21pbmUgc3BlYyB0aGF0IHdpbGwgYmUgYWRkZWQgdG8gdGhlIGN1cnJlbnQg
c3VpdGUuCisgKgorICogLy8gVE9ETzogcGVuZGluZyB0ZXN0cworICoKKyAqIEBleGFtcGxlCisg
KiBpdCgnc2hvdWxkIGJlIHRydWUnLCBmdW5jdGlvbigpIHsKKyAqICAgZXhwZWN0KHRydWUpLnRv
RXF1YWwodHJ1ZSk7CisgKiB9KTsKKyAqCisgKiBAcGFyYW0ge1N0cmluZ30gZGVzYyBkZXNjcmlw
dGlvbiBvZiB0aGlzIHNwZWNpZmljYXRpb24KKyAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgZGVm
aW5lcyB0aGUgcHJlY29uZGl0aW9ucyBhbmQgZXhwZWN0YXRpb25zIG9mIHRoZSBzcGVjCisgKi8K
K3ZhciBpdCA9IGZ1bmN0aW9uKGRlc2MsIGZ1bmMpIHsKKyAgcmV0dXJuIGphc21pbmUuZ2V0RW52
KCkuaXQoZGVzYywgZnVuYyk7Cit9OworaWYgKGlzQ29tbW9uSlMpIGV4cG9ydHMuaXQgPSBpdDsK
KworLyoqCisgKiBDcmVhdGVzIGEgPGVtPmRpc2FibGVkPC9lbT4gSmFzbWluZSBzcGVjLgorICoK
KyAqIEEgY29udmVuaWVuY2UgbWV0aG9kIHRoYXQgYWxsb3dzIGV4aXN0aW5nIHNwZWNzIHRvIGJl
IGRpc2FibGVkIHRlbXBvcmFyaWx5IGR1cmluZyBkZXZlbG9wbWVudC4KKyAqCisgKiBAcGFyYW0g
e1N0cmluZ30gZGVzYyBkZXNjcmlwdGlvbiBvZiB0aGlzIHNwZWNpZmljYXRpb24KKyAqIEBwYXJh
bSB7RnVuY3Rpb259IGZ1bmMgZGVmaW5lcyB0aGUgcHJlY29uZGl0aW9ucyBhbmQgZXhwZWN0YXRp
b25zIG9mIHRoZSBzcGVjCisgKi8KK3ZhciB4aXQgPSBmdW5jdGlvbihkZXNjLCBmdW5jKSB7Cisg
IHJldHVybiBqYXNtaW5lLmdldEVudigpLnhpdChkZXNjLCBmdW5jKTsKK307CitpZiAoaXNDb21t
b25KUykgZXhwb3J0cy54aXQgPSB4aXQ7CisKKy8qKgorICogU3RhcnRzIGEgY2hhaW4gZm9yIGEg
SmFzbWluZSBleHBlY3RhdGlvbi4KKyAqCisgKiBJdCBpcyBwYXNzZWQgYW4gT2JqZWN0IHRoYXQg
aXMgdGhlIGFjdHVhbCB2YWx1ZSBhbmQgc2hvdWxkIGNoYWluIHRvIG9uZSBvZiB0aGUgbWFueQor
ICogamFzbWluZS5NYXRjaGVycyBmdW5jdGlvbnMuCisgKgorICogQHBhcmFtIHtPYmplY3R9IGFj
dHVhbCBBY3R1YWwgdmFsdWUgdG8gdGVzdCBhZ2FpbnN0IGFuZCBleHBlY3RlZCB2YWx1ZQorICov
Cit2YXIgZXhwZWN0ID0gZnVuY3Rpb24oYWN0dWFsKSB7CisgIHJldHVybiBqYXNtaW5lLmdldEVu
digpLmN1cnJlbnRTcGVjLmV4cGVjdChhY3R1YWwpOworfTsKK2lmIChpc0NvbW1vbkpTKSBleHBv
cnRzLmV4cGVjdCA9IGV4cGVjdDsKKworLyoqCisgKiBEZWZpbmVzIHBhcnQgb2YgYSBqYXNtaW5l
IHNwZWMuICBVc2VkIGluIGNvbWluYmluYXRpb24gd2l0aCB3YWl0cyBvciB3YWl0c0ZvciBpbiBh
c3luY2hybm91cyBzcGVjcy4KKyAqCisgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIEZ1bmN0aW9u
IHRoYXQgZGVmaW5lcyBwYXJ0IG9mIGEgamFzbWluZSBzcGVjLgorICovCit2YXIgcnVucyA9IGZ1
bmN0aW9uKGZ1bmMpIHsKKyAgamFzbWluZS5nZXRFbnYoKS5jdXJyZW50U3BlYy5ydW5zKGZ1bmMp
OworfTsKK2lmIChpc0NvbW1vbkpTKSBleHBvcnRzLnJ1bnMgPSBydW5zOworCisvKioKKyAqIFdh
aXRzIGEgZml4ZWQgdGltZSBwZXJpb2QgYmVmb3JlIG1vdmluZyB0byB0aGUgbmV4dCBibG9jay4K
KyAqCisgKiBAZGVwcmVjYXRlZCBVc2Ugd2FpdHNGb3IoKSBpbnN0ZWFkCisgKiBAcGFyYW0ge051
bWJlcn0gdGltZW91dCBtaWxsaXNlY29uZHMgdG8gd2FpdAorICovCit2YXIgd2FpdHMgPSBmdW5j
dGlvbih0aW1lb3V0KSB7CisgIGphc21pbmUuZ2V0RW52KCkuY3VycmVudFNwZWMud2FpdHModGlt
ZW91dCk7Cit9OworaWYgKGlzQ29tbW9uSlMpIGV4cG9ydHMud2FpdHMgPSB3YWl0czsKKworLyoq
CisgKiBXYWl0cyBmb3IgdGhlIGxhdGNoRnVuY3Rpb24gdG8gcmV0dXJuIHRydWUgYmVmb3JlIHBy
b2NlZWRpbmcgdG8gdGhlIG5leHQgYmxvY2suCisgKgorICogQHBhcmFtIHtGdW5jdGlvbn0gbGF0
Y2hGdW5jdGlvbgorICogQHBhcmFtIHtTdHJpbmd9IG9wdGlvbmFsX3RpbWVvdXRNZXNzYWdlCisg
KiBAcGFyYW0ge051bWJlcn0gb3B0aW9uYWxfdGltZW91dAorICovCit2YXIgd2FpdHNGb3IgPSBm
dW5jdGlvbihsYXRjaEZ1bmN0aW9uLCBvcHRpb25hbF90aW1lb3V0TWVzc2FnZSwgb3B0aW9uYWxf
dGltZW91dCkgeworICBqYXNtaW5lLmdldEVudigpLmN1cnJlbnRTcGVjLndhaXRzRm9yLmFwcGx5
KGphc21pbmUuZ2V0RW52KCkuY3VycmVudFNwZWMsIGFyZ3VtZW50cyk7Cit9OworaWYgKGlzQ29t
bW9uSlMpIGV4cG9ydHMud2FpdHNGb3IgPSB3YWl0c0ZvcjsKKworLyoqCisgKiBBIGZ1bmN0aW9u
IHRoYXQgaXMgY2FsbGVkIGJlZm9yZSBlYWNoIHNwZWMgaW4gYSBzdWl0ZS4KKyAqCisgKiBVc2Vk
IGZvciBzcGVjIHNldHVwLCBpbmNsdWRpbmcgdmFsaWRhdGluZyBhc3N1bXB0aW9ucy4KKyAqCisg
KiBAcGFyYW0ge0Z1bmN0aW9ufSBiZWZvcmVFYWNoRnVuY3Rpb24KKyAqLwordmFyIGJlZm9yZUVh
Y2ggPSBmdW5jdGlvbihiZWZvcmVFYWNoRnVuY3Rpb24pIHsKKyAgamFzbWluZS5nZXRFbnYoKS5i
ZWZvcmVFYWNoKGJlZm9yZUVhY2hGdW5jdGlvbik7Cit9OworaWYgKGlzQ29tbW9uSlMpIGV4cG9y
dHMuYmVmb3JlRWFjaCA9IGJlZm9yZUVhY2g7CisKKy8qKgorICogQSBmdW5jdGlvbiB0aGF0IGlz
IGNhbGxlZCBhZnRlciBlYWNoIHNwZWMgaW4gYSBzdWl0ZS4KKyAqCisgKiBVc2VkIGZvciByZXN0
b3JpbmcgYW55IHN0YXRlIHRoYXQgaXMgaGlqYWNrZWQgZHVyaW5nIHNwZWMgZXhlY3V0aW9uLgor
ICoKKyAqIEBwYXJhbSB7RnVuY3Rpb259IGFmdGVyRWFjaEZ1bmN0aW9uCisgKi8KK3ZhciBhZnRl
ckVhY2ggPSBmdW5jdGlvbihhZnRlckVhY2hGdW5jdGlvbikgeworICBqYXNtaW5lLmdldEVudigp
LmFmdGVyRWFjaChhZnRlckVhY2hGdW5jdGlvbik7Cit9OworaWYgKGlzQ29tbW9uSlMpIGV4cG9y
dHMuYWZ0ZXJFYWNoID0gYWZ0ZXJFYWNoOworCisvKioKKyAqIERlZmluZXMgYSBzdWl0ZSBvZiBz
cGVjaWZpY2F0aW9ucy4KKyAqCisgKiBTdG9yZXMgdGhlIGRlc2NyaXB0aW9uIGFuZCBhbGwgZGVm
aW5lZCBzcGVjcyBpbiB0aGUgSmFzbWluZSBlbnZpcm9ubWVudCBhcyBvbmUgc3VpdGUgb2Ygc3Bl
Y3MuIFZhcmlhYmxlcyBkZWNsYXJlZAorICogYXJlIGFjY2Vzc2libGUgYnkgY2FsbHMgdG8gYmVm
b3JlRWFjaCwgaXQsIGFuZCBhZnRlckVhY2guIERlc2NyaWJlIGJsb2NrcyBjYW4gYmUgbmVzdGVk
LCBhbGxvd2luZyBmb3Igc3BlY2lhbGl6YXRpb24KKyAqIG9mIHNldHVwIGluIHNvbWUgdGVzdHMu
CisgKgorICogQGV4YW1wbGUKKyAqIC8vIFRPRE86IGEgc2ltcGxlIHN1aXRlCisgKgorICogLy8g
VE9ETzogYSBzaW1wbGUgc3VpdGUgd2l0aCBhIG5lc3RlZCBkZXNjcmliZSBibG9jaworICoKKyAq
IEBwYXJhbSB7U3RyaW5nfSBkZXNjcmlwdGlvbiBBIHN0cmluZywgdXN1YWxseSB0aGUgY2xhc3Mg
dW5kZXIgdGVzdC4KKyAqIEBwYXJhbSB7RnVuY3Rpb259IHNwZWNEZWZpbml0aW9ucyBmdW5jdGlv
biB0aGF0IGRlZmluZXMgc2V2ZXJhbCBzcGVjcy4KKyAqLwordmFyIGRlc2NyaWJlID0gZnVuY3Rp
b24oZGVzY3JpcHRpb24sIHNwZWNEZWZpbml0aW9ucykgeworICByZXR1cm4gamFzbWluZS5nZXRF
bnYoKS5kZXNjcmliZShkZXNjcmlwdGlvbiwgc3BlY0RlZmluaXRpb25zKTsKK307CitpZiAoaXND
b21tb25KUykgZXhwb3J0cy5kZXNjcmliZSA9IGRlc2NyaWJlOworCisvKioKKyAqIERpc2FibGVz
IGEgc3VpdGUgb2Ygc3BlY2lmaWNhdGlvbnMuICBVc2VkIHRvIGRpc2FibGUgc29tZSBzdWl0ZXMg
aW4gYSBmaWxlLCBvciBmaWxlcywgdGVtcG9yYXJpbHkgZHVyaW5nIGRldmVsb3BtZW50LgorICoK
KyAqIEBwYXJhbSB7U3RyaW5nfSBkZXNjcmlwdGlvbiBBIHN0cmluZywgdXN1YWxseSB0aGUgY2xh
c3MgdW5kZXIgdGVzdC4KKyAqIEBwYXJhbSB7RnVuY3Rpb259IHNwZWNEZWZpbml0aW9ucyBmdW5j
dGlvbiB0aGF0IGRlZmluZXMgc2V2ZXJhbCBzcGVjcy4KKyAqLwordmFyIHhkZXNjcmliZSA9IGZ1
bmN0aW9uKGRlc2NyaXB0aW9uLCBzcGVjRGVmaW5pdGlvbnMpIHsKKyAgcmV0dXJuIGphc21pbmUu
Z2V0RW52KCkueGRlc2NyaWJlKGRlc2NyaXB0aW9uLCBzcGVjRGVmaW5pdGlvbnMpOworfTsKK2lm
IChpc0NvbW1vbkpTKSBleHBvcnRzLnhkZXNjcmliZSA9IHhkZXNjcmliZTsKKworCisvLyBQcm92
aWRlIHRoZSBYTUxIdHRwUmVxdWVzdCBjbGFzcyBmb3IgSUUgNS54LTYueDoKK2phc21pbmUuWG1s
SHR0cFJlcXVlc3QgPSAodHlwZW9mIFhNTEh0dHBSZXF1ZXN0ID09ICJ1bmRlZmluZWQiKSA/IGZ1
bmN0aW9uKCkgeworICBmdW5jdGlvbiB0cnlJdChmKSB7CisgICAgdHJ5IHsKKyAgICAgIHJldHVy
biBmKCk7CisgICAgfSBjYXRjaChlKSB7CisgICAgfQorICAgIHJldHVybiBudWxsOworICB9CisK
KyAgdmFyIHhociA9IHRyeUl0KGZ1bmN0aW9uKCkgeworICAgIHJldHVybiBuZXcgQWN0aXZlWE9i
amVjdCgiTXN4bWwyLlhNTEhUVFAuNi4wIik7CisgIH0pIHx8CisgICAgdHJ5SXQoZnVuY3Rpb24o
KSB7CisgICAgICByZXR1cm4gbmV3IEFjdGl2ZVhPYmplY3QoIk1zeG1sMi5YTUxIVFRQLjMuMCIp
OworICAgIH0pIHx8CisgICAgdHJ5SXQoZnVuY3Rpb24oKSB7CisgICAgICByZXR1cm4gbmV3IEFj
dGl2ZVhPYmplY3QoIk1zeG1sMi5YTUxIVFRQIik7CisgICAgfSkgfHwKKyAgICB0cnlJdChmdW5j
dGlvbigpIHsKKyAgICAgIHJldHVybiBuZXcgQWN0aXZlWE9iamVjdCgiTWljcm9zb2Z0LlhNTEhU
VFAiKTsKKyAgICB9KTsKKworICBpZiAoIXhocikgdGhyb3cgbmV3IEVycm9yKCJUaGlzIGJyb3dz
ZXIgZG9lcyBub3Qgc3VwcG9ydCBYTUxIdHRwUmVxdWVzdC4iKTsKKworICByZXR1cm4geGhyOwor
fSA6IFhNTEh0dHBSZXF1ZXN0OworLyoqCisgKiBAbmFtZXNwYWNlCisgKi8KK2phc21pbmUudXRp
bCA9IHt9OworCisvKioKKyAqIERlY2xhcmUgdGhhdCBhIGNoaWxkIGNsYXNzIGluaGVyaXQgaXQn
cyBwcm90b3R5cGUgZnJvbSB0aGUgcGFyZW50IGNsYXNzLgorICoKKyAqIEBwcml2YXRlCisgKiBA
cGFyYW0ge0Z1bmN0aW9ufSBjaGlsZENsYXNzCisgKiBAcGFyYW0ge0Z1bmN0aW9ufSBwYXJlbnRD
bGFzcworICovCitqYXNtaW5lLnV0aWwuaW5oZXJpdCA9IGZ1bmN0aW9uKGNoaWxkQ2xhc3MsIHBh
cmVudENsYXNzKSB7CisgIC8qKgorICAgKiBAcHJpdmF0ZQorICAgKi8KKyAgdmFyIHN1YmNsYXNz
ID0gZnVuY3Rpb24oKSB7CisgIH07CisgIHN1YmNsYXNzLnByb3RvdHlwZSA9IHBhcmVudENsYXNz
LnByb3RvdHlwZTsKKyAgY2hpbGRDbGFzcy5wcm90b3R5cGUgPSBuZXcgc3ViY2xhc3MoKTsKK307
CisKK2phc21pbmUudXRpbC5mb3JtYXRFeGNlcHRpb24gPSBmdW5jdGlvbihlKSB7CisgIHZhciBs
aW5lTnVtYmVyOworICBpZiAoZS5saW5lKSB7CisgICAgbGluZU51bWJlciA9IGUubGluZTsKKyAg
fQorICBlbHNlIGlmIChlLmxpbmVOdW1iZXIpIHsKKyAgICBsaW5lTnVtYmVyID0gZS5saW5lTnVt
YmVyOworICB9CisKKyAgdmFyIGZpbGU7CisKKyAgaWYgKGUuc291cmNlVVJMKSB7CisgICAgZmls
ZSA9IGUuc291cmNlVVJMOworICB9CisgIGVsc2UgaWYgKGUuZmlsZU5hbWUpIHsKKyAgICBmaWxl
ID0gZS5maWxlTmFtZTsKKyAgfQorCisgIHZhciBtZXNzYWdlID0gKGUubmFtZSAmJiBlLm1lc3Nh
Z2UpID8gKGUubmFtZSArICc6ICcgKyBlLm1lc3NhZ2UpIDogZS50b1N0cmluZygpOworCisgIGlm
IChmaWxlICYmIGxpbmVOdW1iZXIpIHsKKyAgICBtZXNzYWdlICs9ICcgaW4gJyArIGZpbGUgKyAn
IChsaW5lICcgKyBsaW5lTnVtYmVyICsgJyknOworICB9CisKKyAgcmV0dXJuIG1lc3NhZ2U7Cit9
OworCitqYXNtaW5lLnV0aWwuaHRtbEVzY2FwZSA9IGZ1bmN0aW9uKHN0cikgeworICBpZiAoIXN0
cikgcmV0dXJuIHN0cjsKKyAgcmV0dXJuIHN0ci5yZXBsYWNlKC8mL2csICcmYW1wOycpCisgICAg
LnJlcGxhY2UoLzwvZywgJyZsdDsnKQorICAgIC5yZXBsYWNlKC8+L2csICcmZ3Q7Jyk7Cit9Owor
CitqYXNtaW5lLnV0aWwuYXJnc1RvQXJyYXkgPSBmdW5jdGlvbihhcmdzKSB7CisgIHZhciBhcnJh
eU9mQXJncyA9IFtdOworICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIGFy
cmF5T2ZBcmdzLnB1c2goYXJnc1tpXSk7CisgIHJldHVybiBhcnJheU9mQXJnczsKK307CisKK2ph
c21pbmUudXRpbC5leHRlbmQgPSBmdW5jdGlvbihkZXN0aW5hdGlvbiwgc291cmNlKSB7CisgIGZv
ciAodmFyIHByb3BlcnR5IGluIHNvdXJjZSkgZGVzdGluYXRpb25bcHJvcGVydHldID0gc291cmNl
W3Byb3BlcnR5XTsKKyAgcmV0dXJuIGRlc3RpbmF0aW9uOworfTsKKworLyoqCisgKiBFbnZpcm9u
bWVudCBmb3IgSmFzbWluZQorICoKKyAqIEBjb25zdHJ1Y3RvcgorICovCitqYXNtaW5lLkVudiA9
IGZ1bmN0aW9uKCkgeworICB0aGlzLmN1cnJlbnRTcGVjID0gbnVsbDsKKyAgdGhpcy5jdXJyZW50
U3VpdGUgPSBudWxsOworICB0aGlzLmN1cnJlbnRSdW5uZXJfID0gbmV3IGphc21pbmUuUnVubmVy
KHRoaXMpOworCisgIHRoaXMucmVwb3J0ZXIgPSBuZXcgamFzbWluZS5NdWx0aVJlcG9ydGVyKCk7
CisKKyAgdGhpcy51cGRhdGVJbnRlcnZhbCA9IGphc21pbmUuREVGQVVMVF9VUERBVEVfSU5URVJW
QUw7CisgIHRoaXMuZGVmYXVsdFRpbWVvdXRJbnRlcnZhbCA9IGphc21pbmUuREVGQVVMVF9USU1F
T1VUX0lOVEVSVkFMOworICB0aGlzLmxhc3RVcGRhdGUgPSAwOworICB0aGlzLnNwZWNGaWx0ZXIg
PSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gdHJ1ZTsKKyAgfTsKKworICB0aGlzLm5leHRTcGVj
SWRfID0gMDsKKyAgdGhpcy5uZXh0U3VpdGVJZF8gPSAwOworICB0aGlzLmVxdWFsaXR5VGVzdGVy
c18gPSBbXTsKKworICAvLyB3cmFwIG1hdGNoZXJzCisgIHRoaXMubWF0Y2hlcnNDbGFzcyA9IGZ1
bmN0aW9uKCkgeworICAgIGphc21pbmUuTWF0Y2hlcnMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsK
KyAgfTsKKyAgamFzbWluZS51dGlsLmluaGVyaXQodGhpcy5tYXRjaGVyc0NsYXNzLCBqYXNtaW5l
Lk1hdGNoZXJzKTsKKworICBqYXNtaW5lLk1hdGNoZXJzLndyYXBJbnRvXyhqYXNtaW5lLk1hdGNo
ZXJzLnByb3RvdHlwZSwgdGhpcy5tYXRjaGVyc0NsYXNzKTsKK307CisKKworamFzbWluZS5FbnYu
cHJvdG90eXBlLnNldFRpbWVvdXQgPSBqYXNtaW5lLnNldFRpbWVvdXQ7CitqYXNtaW5lLkVudi5w
cm90b3R5cGUuY2xlYXJUaW1lb3V0ID0gamFzbWluZS5jbGVhclRpbWVvdXQ7CitqYXNtaW5lLkVu
di5wcm90b3R5cGUuc2V0SW50ZXJ2YWwgPSBqYXNtaW5lLnNldEludGVydmFsOworamFzbWluZS5F
bnYucHJvdG90eXBlLmNsZWFySW50ZXJ2YWwgPSBqYXNtaW5lLmNsZWFySW50ZXJ2YWw7CisKKy8q
KgorICogQHJldHVybnMgYW4gb2JqZWN0IGNvbnRhaW5pbmcgamFzbWluZSB2ZXJzaW9uIGJ1aWxk
IGluZm8sIGlmIHNldC4KKyAqLworamFzbWluZS5FbnYucHJvdG90eXBlLnZlcnNpb24gPSBmdW5j
dGlvbiAoKSB7CisgIGlmIChqYXNtaW5lLnZlcnNpb25fKSB7CisgICAgcmV0dXJuIGphc21pbmUu
dmVyc2lvbl87CisgIH0gZWxzZSB7CisgICAgdGhyb3cgbmV3IEVycm9yKCdWZXJzaW9uIG5vdCBz
ZXQnKTsKKyAgfQorfTsKKworLyoqCisgKiBAcmV0dXJucyBzdHJpbmcgY29udGFpbmluZyBqYXNt
aW5lIHZlcnNpb24gYnVpbGQgaW5mbywgaWYgc2V0LgorICovCitqYXNtaW5lLkVudi5wcm90b3R5
cGUudmVyc2lvblN0cmluZyA9IGZ1bmN0aW9uKCkgeworICBpZiAoIWphc21pbmUudmVyc2lvbl8p
IHsKKyAgICByZXR1cm4gInZlcnNpb24gdW5rbm93biI7CisgIH0KKworICB2YXIgdmVyc2lvbiA9
IHRoaXMudmVyc2lvbigpOworICB2YXIgdmVyc2lvblN0cmluZyA9IHZlcnNpb24ubWFqb3IgKyAi
LiIgKyB2ZXJzaW9uLm1pbm9yICsgIi4iICsgdmVyc2lvbi5idWlsZDsKKyAgaWYgKHZlcnNpb24u
cmVsZWFzZV9jYW5kaWRhdGUpIHsKKyAgICB2ZXJzaW9uU3RyaW5nICs9ICIucmMiICsgdmVyc2lv
bi5yZWxlYXNlX2NhbmRpZGF0ZQorICB9CisgIHZlcnNpb25TdHJpbmcgKz0gIiByZXZpc2lvbiAi
ICsgdmVyc2lvbi5yZXZpc2lvbjsKKyAgcmV0dXJuIHZlcnNpb25TdHJpbmc7Cit9OworCisvKioK
KyAqIEByZXR1cm5zIGEgc2VxdWVudGlhbCBpbnRlZ2VyIHN0YXJ0aW5nIGF0IDAKKyAqLworamFz
bWluZS5FbnYucHJvdG90eXBlLm5leHRTcGVjSWQgPSBmdW5jdGlvbiAoKSB7CisgIHJldHVybiB0
aGlzLm5leHRTcGVjSWRfKys7Cit9OworCisvKioKKyAqIEByZXR1cm5zIGEgc2VxdWVudGlhbCBp
bnRlZ2VyIHN0YXJ0aW5nIGF0IDAKKyAqLworamFzbWluZS5FbnYucHJvdG90eXBlLm5leHRTdWl0
ZUlkID0gZnVuY3Rpb24gKCkgeworICByZXR1cm4gdGhpcy5uZXh0U3VpdGVJZF8rKzsKK307CisK
Ky8qKgorICogUmVnaXN0ZXIgYSByZXBvcnRlciB0byByZWNlaXZlIHN0YXR1cyB1cGRhdGVzIGZy
b20gSmFzbWluZS4KKyAqIEBwYXJhbSB7amFzbWluZS5SZXBvcnRlcn0gcmVwb3J0ZXIgQW4gb2Jq
ZWN0IHdoaWNoIHdpbGwgcmVjZWl2ZSBzdGF0dXMgdXBkYXRlcy4KKyAqLworamFzbWluZS5FbnYu
cHJvdG90eXBlLmFkZFJlcG9ydGVyID0gZnVuY3Rpb24ocmVwb3J0ZXIpIHsKKyAgdGhpcy5yZXBv
cnRlci5hZGRSZXBvcnRlcihyZXBvcnRlcik7Cit9OworCitqYXNtaW5lLkVudi5wcm90b3R5cGUu
ZXhlY3V0ZSA9IGZ1bmN0aW9uKCkgeworICB0aGlzLmN1cnJlbnRSdW5uZXJfLmV4ZWN1dGUoKTsK
K307CisKK2phc21pbmUuRW52LnByb3RvdHlwZS5kZXNjcmliZSA9IGZ1bmN0aW9uKGRlc2NyaXB0
aW9uLCBzcGVjRGVmaW5pdGlvbnMpIHsKKyAgdmFyIHN1aXRlID0gbmV3IGphc21pbmUuU3VpdGUo
dGhpcywgZGVzY3JpcHRpb24sIHNwZWNEZWZpbml0aW9ucywgdGhpcy5jdXJyZW50U3VpdGUpOwor
CisgIHZhciBwYXJlbnRTdWl0ZSA9IHRoaXMuY3VycmVudFN1aXRlOworICBpZiAocGFyZW50U3Vp
dGUpIHsKKyAgICBwYXJlbnRTdWl0ZS5hZGQoc3VpdGUpOworICB9IGVsc2UgeworICAgIHRoaXMu
Y3VycmVudFJ1bm5lcl8uYWRkKHN1aXRlKTsKKyAgfQorCisgIHRoaXMuY3VycmVudFN1aXRlID0g
c3VpdGU7CisKKyAgdmFyIGRlY2xhcmF0aW9uRXJyb3IgPSBudWxsOworICB0cnkgeworICAgIHNw
ZWNEZWZpbml0aW9ucy5jYWxsKHN1aXRlKTsKKyAgfSBjYXRjaChlKSB7CisgICAgZGVjbGFyYXRp
b25FcnJvciA9IGU7CisgIH0KKworICBpZiAoZGVjbGFyYXRpb25FcnJvcikgeworICAgIHRoaXMu
aXQoImVuY291bnRlcmVkIGEgZGVjbGFyYXRpb24gZXhjZXB0aW9uIiwgZnVuY3Rpb24oKSB7Cisg
ICAgICB0aHJvdyBkZWNsYXJhdGlvbkVycm9yOworICAgIH0pOworICB9CisKKyAgdGhpcy5jdXJy
ZW50U3VpdGUgPSBwYXJlbnRTdWl0ZTsKKworICByZXR1cm4gc3VpdGU7Cit9OworCitqYXNtaW5l
LkVudi5wcm90b3R5cGUuYmVmb3JlRWFjaCA9IGZ1bmN0aW9uKGJlZm9yZUVhY2hGdW5jdGlvbikg
eworICBpZiAodGhpcy5jdXJyZW50U3VpdGUpIHsKKyAgICB0aGlzLmN1cnJlbnRTdWl0ZS5iZWZv
cmVFYWNoKGJlZm9yZUVhY2hGdW5jdGlvbik7CisgIH0gZWxzZSB7CisgICAgdGhpcy5jdXJyZW50
UnVubmVyXy5iZWZvcmVFYWNoKGJlZm9yZUVhY2hGdW5jdGlvbik7CisgIH0KK307CisKK2phc21p
bmUuRW52LnByb3RvdHlwZS5jdXJyZW50UnVubmVyID0gZnVuY3Rpb24gKCkgeworICByZXR1cm4g
dGhpcy5jdXJyZW50UnVubmVyXzsKK307CisKK2phc21pbmUuRW52LnByb3RvdHlwZS5hZnRlckVh
Y2ggPSBmdW5jdGlvbihhZnRlckVhY2hGdW5jdGlvbikgeworICBpZiAodGhpcy5jdXJyZW50U3Vp
dGUpIHsKKyAgICB0aGlzLmN1cnJlbnRTdWl0ZS5hZnRlckVhY2goYWZ0ZXJFYWNoRnVuY3Rpb24p
OworICB9IGVsc2UgeworICAgIHRoaXMuY3VycmVudFJ1bm5lcl8uYWZ0ZXJFYWNoKGFmdGVyRWFj
aEZ1bmN0aW9uKTsKKyAgfQorCit9OworCitqYXNtaW5lLkVudi5wcm90b3R5cGUueGRlc2NyaWJl
ID0gZnVuY3Rpb24oZGVzYywgc3BlY0RlZmluaXRpb25zKSB7CisgIHJldHVybiB7CisgICAgZXhl
Y3V0ZTogZnVuY3Rpb24oKSB7CisgICAgfQorICB9OworfTsKKworamFzbWluZS5FbnYucHJvdG90
eXBlLml0ID0gZnVuY3Rpb24oZGVzY3JpcHRpb24sIGZ1bmMpIHsKKyAgdmFyIHNwZWMgPSBuZXcg
amFzbWluZS5TcGVjKHRoaXMsIHRoaXMuY3VycmVudFN1aXRlLCBkZXNjcmlwdGlvbik7CisgIHRo
aXMuY3VycmVudFN1aXRlLmFkZChzcGVjKTsKKyAgdGhpcy5jdXJyZW50U3BlYyA9IHNwZWM7CisK
KyAgaWYgKGZ1bmMpIHsKKyAgICBzcGVjLnJ1bnMoZnVuYyk7CisgIH0KKworICByZXR1cm4gc3Bl
YzsKK307CisKK2phc21pbmUuRW52LnByb3RvdHlwZS54aXQgPSBmdW5jdGlvbihkZXNjLCBmdW5j
KSB7CisgIHJldHVybiB7CisgICAgaWQ6IHRoaXMubmV4dFNwZWNJZCgpLAorICAgIHJ1bnM6IGZ1
bmN0aW9uKCkgeworICAgIH0KKyAgfTsKK307CisKK2phc21pbmUuRW52LnByb3RvdHlwZS5jb21w
YXJlT2JqZWN0c18gPSBmdW5jdGlvbihhLCBiLCBtaXNtYXRjaEtleXMsIG1pc21hdGNoVmFsdWVz
KSB7CisgIGlmIChhLl9fSmFzbWluZV9iZWVuX2hlcmVfYmVmb3JlX18gPT09IGIgJiYgYi5fX0ph
c21pbmVfYmVlbl9oZXJlX2JlZm9yZV9fID09PSBhKSB7CisgICAgcmV0dXJuIHRydWU7CisgIH0K
KworICBhLl9fSmFzbWluZV9iZWVuX2hlcmVfYmVmb3JlX18gPSBiOworICBiLl9fSmFzbWluZV9i
ZWVuX2hlcmVfYmVmb3JlX18gPSBhOworCisgIHZhciBoYXNLZXkgPSBmdW5jdGlvbihvYmosIGtl
eU5hbWUpIHsKKyAgICByZXR1cm4gb2JqICE9PSBudWxsICYmIG9ialtrZXlOYW1lXSAhPT0gamFz
bWluZS51bmRlZmluZWQ7CisgIH07CisKKyAgZm9yICh2YXIgcHJvcGVydHkgaW4gYikgeworICAg
IGlmICghaGFzS2V5KGEsIHByb3BlcnR5KSAmJiBoYXNLZXkoYiwgcHJvcGVydHkpKSB7CisgICAg
ICBtaXNtYXRjaEtleXMucHVzaCgiZXhwZWN0ZWQgaGFzIGtleSAnIiArIHByb3BlcnR5ICsgIics
IGJ1dCBtaXNzaW5nIGZyb20gYWN0dWFsLiIpOworICAgIH0KKyAgfQorICBmb3IgKHByb3BlcnR5
IGluIGEpIHsKKyAgICBpZiAoIWhhc0tleShiLCBwcm9wZXJ0eSkgJiYgaGFzS2V5KGEsIHByb3Bl
cnR5KSkgeworICAgICAgbWlzbWF0Y2hLZXlzLnB1c2goImV4cGVjdGVkIG1pc3Npbmcga2V5ICci
ICsgcHJvcGVydHkgKyAiJywgYnV0IHByZXNlbnQgaW4gYWN0dWFsLiIpOworICAgIH0KKyAgfQor
ICBmb3IgKHByb3BlcnR5IGluIGIpIHsKKyAgICBpZiAocHJvcGVydHkgPT0gJ19fSmFzbWluZV9i
ZWVuX2hlcmVfYmVmb3JlX18nKSBjb250aW51ZTsKKyAgICBpZiAoIXRoaXMuZXF1YWxzXyhhW3By
b3BlcnR5XSwgYltwcm9wZXJ0eV0sIG1pc21hdGNoS2V5cywgbWlzbWF0Y2hWYWx1ZXMpKSB7Cisg
ICAgICBtaXNtYXRjaFZhbHVlcy5wdXNoKCInIiArIHByb3BlcnR5ICsgIicgd2FzICciICsgKGJb
cHJvcGVydHldID8gamFzbWluZS51dGlsLmh0bWxFc2NhcGUoYltwcm9wZXJ0eV0udG9TdHJpbmco
KSkgOiBiW3Byb3BlcnR5XSkgKyAiJyBpbiBleHBlY3RlZCwgYnV0IHdhcyAnIiArIChhW3Byb3Bl
cnR5XSA/IGphc21pbmUudXRpbC5odG1sRXNjYXBlKGFbcHJvcGVydHldLnRvU3RyaW5nKCkpIDog
YVtwcm9wZXJ0eV0pICsgIicgaW4gYWN0dWFsLiIpOworICAgIH0KKyAgfQorCisgIGlmIChqYXNt
aW5lLmlzQXJyYXlfKGEpICYmIGphc21pbmUuaXNBcnJheV8oYikgJiYgYS5sZW5ndGggIT0gYi5s
ZW5ndGgpIHsKKyAgICBtaXNtYXRjaFZhbHVlcy5wdXNoKCJhcnJheXMgd2VyZSBub3QgdGhlIHNh
bWUgbGVuZ3RoIik7CisgIH0KKworICBkZWxldGUgYS5fX0phc21pbmVfYmVlbl9oZXJlX2JlZm9y
ZV9fOworICBkZWxldGUgYi5fX0phc21pbmVfYmVlbl9oZXJlX2JlZm9yZV9fOworICByZXR1cm4g
KG1pc21hdGNoS2V5cy5sZW5ndGggPT09IDAgJiYgbWlzbWF0Y2hWYWx1ZXMubGVuZ3RoID09PSAw
KTsKK307CisKK2phc21pbmUuRW52LnByb3RvdHlwZS5lcXVhbHNfID0gZnVuY3Rpb24oYSwgYiwg
bWlzbWF0Y2hLZXlzLCBtaXNtYXRjaFZhbHVlcykgeworICBtaXNtYXRjaEtleXMgPSBtaXNtYXRj
aEtleXMgfHwgW107CisgIG1pc21hdGNoVmFsdWVzID0gbWlzbWF0Y2hWYWx1ZXMgfHwgW107CisK
KyAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmVxdWFsaXR5VGVzdGVyc18ubGVuZ3RoOyBpKysp
IHsKKyAgICB2YXIgZXF1YWxpdHlUZXN0ZXIgPSB0aGlzLmVxdWFsaXR5VGVzdGVyc19baV07Cisg
ICAgdmFyIHJlc3VsdCA9IGVxdWFsaXR5VGVzdGVyKGEsIGIsIHRoaXMsIG1pc21hdGNoS2V5cywg
bWlzbWF0Y2hWYWx1ZXMpOworICAgIGlmIChyZXN1bHQgIT09IGphc21pbmUudW5kZWZpbmVkKSBy
ZXR1cm4gcmVzdWx0OworICB9CisKKyAgaWYgKGEgPT09IGIpIHJldHVybiB0cnVlOworCisgIGlm
IChhID09PSBqYXNtaW5lLnVuZGVmaW5lZCB8fCBhID09PSBudWxsIHx8IGIgPT09IGphc21pbmUu
dW5kZWZpbmVkIHx8IGIgPT09IG51bGwpIHsKKyAgICByZXR1cm4gKGEgPT0gamFzbWluZS51bmRl
ZmluZWQgJiYgYiA9PSBqYXNtaW5lLnVuZGVmaW5lZCk7CisgIH0KKworICBpZiAoamFzbWluZS5p
c0RvbU5vZGUoYSkgJiYgamFzbWluZS5pc0RvbU5vZGUoYikpIHsKKyAgICByZXR1cm4gYSA9PT0g
YjsKKyAgfQorCisgIGlmIChhIGluc3RhbmNlb2YgRGF0ZSAmJiBiIGluc3RhbmNlb2YgRGF0ZSkg
eworICAgIHJldHVybiBhLmdldFRpbWUoKSA9PSBiLmdldFRpbWUoKTsKKyAgfQorCisgIGlmIChh
IGluc3RhbmNlb2YgamFzbWluZS5NYXRjaGVycy5BbnkpIHsKKyAgICByZXR1cm4gYS5tYXRjaGVz
KGIpOworICB9CisKKyAgaWYgKGIgaW5zdGFuY2VvZiBqYXNtaW5lLk1hdGNoZXJzLkFueSkgewor
ICAgIHJldHVybiBiLm1hdGNoZXMoYSk7CisgIH0KKworICBpZiAoamFzbWluZS5pc1N0cmluZ18o
YSkgJiYgamFzbWluZS5pc1N0cmluZ18oYikpIHsKKyAgICByZXR1cm4gKGEgPT0gYik7CisgIH0K
KworICBpZiAoamFzbWluZS5pc051bWJlcl8oYSkgJiYgamFzbWluZS5pc051bWJlcl8oYikpIHsK
KyAgICByZXR1cm4gKGEgPT0gYik7CisgIH0KKworICBpZiAodHlwZW9mIGEgPT09ICJvYmplY3Qi
ICYmIHR5cGVvZiBiID09PSAib2JqZWN0IikgeworICAgIHJldHVybiB0aGlzLmNvbXBhcmVPYmpl
Y3RzXyhhLCBiLCBtaXNtYXRjaEtleXMsIG1pc21hdGNoVmFsdWVzKTsKKyAgfQorCisgIC8vU3Ry
YWlnaHQgY2hlY2sKKyAgcmV0dXJuIChhID09PSBiKTsKK307CisKK2phc21pbmUuRW52LnByb3Rv
dHlwZS5jb250YWluc18gPSBmdW5jdGlvbihoYXlzdGFjaywgbmVlZGxlKSB7CisgIGlmIChqYXNt
aW5lLmlzQXJyYXlfKGhheXN0YWNrKSkgeworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaGF5c3Rh
Y2subGVuZ3RoOyBpKyspIHsKKyAgICAgIGlmICh0aGlzLmVxdWFsc18oaGF5c3RhY2tbaV0sIG5l
ZWRsZSkpIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKyAgcmV0
dXJuIGhheXN0YWNrLmluZGV4T2YobmVlZGxlKSA+PSAwOworfTsKKworamFzbWluZS5FbnYucHJv
dG90eXBlLmFkZEVxdWFsaXR5VGVzdGVyID0gZnVuY3Rpb24oZXF1YWxpdHlUZXN0ZXIpIHsKKyAg
dGhpcy5lcXVhbGl0eVRlc3RlcnNfLnB1c2goZXF1YWxpdHlUZXN0ZXIpOworfTsKKy8qKiBOby1v
cCBiYXNlIGNsYXNzIGZvciBKYXNtaW5lIHJlcG9ydGVycy4KKyAqCisgKiBAY29uc3RydWN0b3IK
KyAqLworamFzbWluZS5SZXBvcnRlciA9IGZ1bmN0aW9uKCkgeworfTsKKworLy9ub2luc3BlY3Rp
b24gSlNVbnVzZWRMb2NhbFN5bWJvbHMKK2phc21pbmUuUmVwb3J0ZXIucHJvdG90eXBlLnJlcG9y
dFJ1bm5lclN0YXJ0aW5nID0gZnVuY3Rpb24ocnVubmVyKSB7Cit9OworCisvL25vaW5zcGVjdGlv
biBKU1VudXNlZExvY2FsU3ltYm9scworamFzbWluZS5SZXBvcnRlci5wcm90b3R5cGUucmVwb3J0
UnVubmVyUmVzdWx0cyA9IGZ1bmN0aW9uKHJ1bm5lcikgeworfTsKKworLy9ub2luc3BlY3Rpb24g
SlNVbnVzZWRMb2NhbFN5bWJvbHMKK2phc21pbmUuUmVwb3J0ZXIucHJvdG90eXBlLnJlcG9ydFN1
aXRlUmVzdWx0cyA9IGZ1bmN0aW9uKHN1aXRlKSB7Cit9OworCisvL25vaW5zcGVjdGlvbiBKU1Vu
dXNlZExvY2FsU3ltYm9scworamFzbWluZS5SZXBvcnRlci5wcm90b3R5cGUucmVwb3J0U3BlY1N0
YXJ0aW5nID0gZnVuY3Rpb24oc3BlYykgeworfTsKKworLy9ub2luc3BlY3Rpb24gSlNVbnVzZWRM
b2NhbFN5bWJvbHMKK2phc21pbmUuUmVwb3J0ZXIucHJvdG90eXBlLnJlcG9ydFNwZWNSZXN1bHRz
ID0gZnVuY3Rpb24oc3BlYykgeworfTsKKworLy9ub2luc3BlY3Rpb24gSlNVbnVzZWRMb2NhbFN5
bWJvbHMKK2phc21pbmUuUmVwb3J0ZXIucHJvdG90eXBlLmxvZyA9IGZ1bmN0aW9uKHN0cikgewor
fTsKKworLyoqCisgKiBCbG9ja3MgYXJlIGZ1bmN0aW9ucyB3aXRoIGV4ZWN1dGFibGUgY29kZSB0
aGF0IG1ha2UgdXAgYSBzcGVjLgorICoKKyAqIEBjb25zdHJ1Y3RvcgorICogQHBhcmFtIHtqYXNt
aW5lLkVudn0gZW52CisgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jCisgKiBAcGFyYW0ge2phc21p
bmUuU3BlY30gc3BlYworICovCitqYXNtaW5lLkJsb2NrID0gZnVuY3Rpb24oZW52LCBmdW5jLCBz
cGVjKSB7CisgIHRoaXMuZW52ID0gZW52OworICB0aGlzLmZ1bmMgPSBmdW5jOworICB0aGlzLnNw
ZWMgPSBzcGVjOworfTsKKworamFzbWluZS5CbG9jay5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0
aW9uKG9uQ29tcGxldGUpIHsgIAorICB0cnkgeworICAgIHRoaXMuZnVuYy5hcHBseSh0aGlzLnNw
ZWMpOworICB9IGNhdGNoIChlKSB7CisgICAgdGhpcy5zcGVjLmZhaWwoZSk7CisgIH0KKyAgb25D
b21wbGV0ZSgpOworfTsKKy8qKiBKYXZhU2NyaXB0IEFQSSByZXBvcnRlci4KKyAqCisgKiBAY29u
c3RydWN0b3IKKyAqLworamFzbWluZS5Kc0FwaVJlcG9ydGVyID0gZnVuY3Rpb24oKSB7CisgIHRo
aXMuc3RhcnRlZCA9IGZhbHNlOworICB0aGlzLmZpbmlzaGVkID0gZmFsc2U7CisgIHRoaXMuc3Vp
dGVzXyA9IFtdOworICB0aGlzLnJlc3VsdHNfID0ge307Cit9OworCitqYXNtaW5lLkpzQXBpUmVw
b3J0ZXIucHJvdG90eXBlLnJlcG9ydFJ1bm5lclN0YXJ0aW5nID0gZnVuY3Rpb24ocnVubmVyKSB7
CisgIHRoaXMuc3RhcnRlZCA9IHRydWU7CisgIHZhciBzdWl0ZXMgPSBydW5uZXIudG9wTGV2ZWxT
dWl0ZXMoKTsKKyAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdWl0ZXMubGVuZ3RoOyBpKyspIHsKKyAg
ICB2YXIgc3VpdGUgPSBzdWl0ZXNbaV07CisgICAgdGhpcy5zdWl0ZXNfLnB1c2godGhpcy5zdW1t
YXJpemVfKHN1aXRlKSk7CisgIH0KK307CisKK2phc21pbmUuSnNBcGlSZXBvcnRlci5wcm90b3R5
cGUuc3VpdGVzID0gZnVuY3Rpb24oKSB7CisgIHJldHVybiB0aGlzLnN1aXRlc187Cit9OworCitq
YXNtaW5lLkpzQXBpUmVwb3J0ZXIucHJvdG90eXBlLnN1bW1hcml6ZV8gPSBmdW5jdGlvbihzdWl0
ZU9yU3BlYykgeworICB2YXIgaXNTdWl0ZSA9IHN1aXRlT3JTcGVjIGluc3RhbmNlb2YgamFzbWlu
ZS5TdWl0ZTsKKyAgdmFyIHN1bW1hcnkgPSB7CisgICAgaWQ6IHN1aXRlT3JTcGVjLmlkLAorICAg
IG5hbWU6IHN1aXRlT3JTcGVjLmRlc2NyaXB0aW9uLAorICAgIHR5cGU6IGlzU3VpdGUgPyAnc3Vp
dGUnIDogJ3NwZWMnLAorICAgIGNoaWxkcmVuOiBbXQorICB9OworICAKKyAgaWYgKGlzU3VpdGUp
IHsKKyAgICB2YXIgY2hpbGRyZW4gPSBzdWl0ZU9yU3BlYy5jaGlsZHJlbigpOworICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHsKKyAgICAgIHN1bW1hcnkuY2hp
bGRyZW4ucHVzaCh0aGlzLnN1bW1hcml6ZV8oY2hpbGRyZW5baV0pKTsKKyAgICB9CisgIH0KKyAg
cmV0dXJuIHN1bW1hcnk7Cit9OworCitqYXNtaW5lLkpzQXBpUmVwb3J0ZXIucHJvdG90eXBlLnJl
c3VsdHMgPSBmdW5jdGlvbigpIHsKKyAgcmV0dXJuIHRoaXMucmVzdWx0c187Cit9OworCitqYXNt
aW5lLkpzQXBpUmVwb3J0ZXIucHJvdG90eXBlLnJlc3VsdHNGb3JTcGVjID0gZnVuY3Rpb24oc3Bl
Y0lkKSB7CisgIHJldHVybiB0aGlzLnJlc3VsdHNfW3NwZWNJZF07Cit9OworCisvL25vaW5zcGVj
dGlvbiBKU1VudXNlZExvY2FsU3ltYm9scworamFzbWluZS5Kc0FwaVJlcG9ydGVyLnByb3RvdHlw
ZS5yZXBvcnRSdW5uZXJSZXN1bHRzID0gZnVuY3Rpb24ocnVubmVyKSB7CisgIHRoaXMuZmluaXNo
ZWQgPSB0cnVlOworfTsKKworLy9ub2luc3BlY3Rpb24gSlNVbnVzZWRMb2NhbFN5bWJvbHMKK2ph
c21pbmUuSnNBcGlSZXBvcnRlci5wcm90b3R5cGUucmVwb3J0U3VpdGVSZXN1bHRzID0gZnVuY3Rp
b24oc3VpdGUpIHsKK307CisKKy8vbm9pbnNwZWN0aW9uIEpTVW51c2VkTG9jYWxTeW1ib2xzCitq
YXNtaW5lLkpzQXBpUmVwb3J0ZXIucHJvdG90eXBlLnJlcG9ydFNwZWNSZXN1bHRzID0gZnVuY3Rp
b24oc3BlYykgeworICB0aGlzLnJlc3VsdHNfW3NwZWMuaWRdID0geworICAgIG1lc3NhZ2VzOiBz
cGVjLnJlc3VsdHMoKS5nZXRJdGVtcygpLAorICAgIHJlc3VsdDogc3BlYy5yZXN1bHRzKCkuZmFp
bGVkQ291bnQgPiAwID8gImZhaWxlZCIgOiAicGFzc2VkIgorICB9OworfTsKKworLy9ub2luc3Bl
Y3Rpb24gSlNVbnVzZWRMb2NhbFN5bWJvbHMKK2phc21pbmUuSnNBcGlSZXBvcnRlci5wcm90b3R5
cGUubG9nID0gZnVuY3Rpb24oc3RyKSB7Cit9OworCitqYXNtaW5lLkpzQXBpUmVwb3J0ZXIucHJv
dG90eXBlLnJlc3VsdHNGb3JTcGVjcyA9IGZ1bmN0aW9uKHNwZWNJZHMpeworICB2YXIgcmVzdWx0
cyA9IHt9OworICBmb3IgKHZhciBpID0gMDsgaSA8IHNwZWNJZHMubGVuZ3RoOyBpKyspIHsKKyAg
ICB2YXIgc3BlY0lkID0gc3BlY0lkc1tpXTsKKyAgICByZXN1bHRzW3NwZWNJZF0gPSB0aGlzLnN1
bW1hcml6ZVJlc3VsdF8odGhpcy5yZXN1bHRzX1tzcGVjSWRdKTsKKyAgfQorICByZXR1cm4gcmVz
dWx0czsKK307CisKK2phc21pbmUuSnNBcGlSZXBvcnRlci5wcm90b3R5cGUuc3VtbWFyaXplUmVz
dWx0XyA9IGZ1bmN0aW9uKHJlc3VsdCl7CisgIHZhciBzdW1tYXJ5TWVzc2FnZXMgPSBbXTsKKyAg
dmFyIG1lc3NhZ2VzTGVuZ3RoID0gcmVzdWx0Lm1lc3NhZ2VzLmxlbmd0aDsKKyAgZm9yICh2YXIg
bWVzc2FnZUluZGV4ID0gMDsgbWVzc2FnZUluZGV4IDwgbWVzc2FnZXNMZW5ndGg7IG1lc3NhZ2VJ
bmRleCsrKSB7CisgICAgdmFyIHJlc3VsdE1lc3NhZ2UgPSByZXN1bHQubWVzc2FnZXNbbWVzc2Fn
ZUluZGV4XTsKKyAgICBzdW1tYXJ5TWVzc2FnZXMucHVzaCh7CisgICAgICB0ZXh0OiByZXN1bHRN
ZXNzYWdlLnR5cGUgPT0gJ2xvZycgPyByZXN1bHRNZXNzYWdlLnRvU3RyaW5nKCkgOiBqYXNtaW5l
LnVuZGVmaW5lZCwKKyAgICAgIHBhc3NlZDogcmVzdWx0TWVzc2FnZS5wYXNzZWQgPyByZXN1bHRN
ZXNzYWdlLnBhc3NlZCgpIDogdHJ1ZSwKKyAgICAgIHR5cGU6IHJlc3VsdE1lc3NhZ2UudHlwZSwK
KyAgICAgIG1lc3NhZ2U6IHJlc3VsdE1lc3NhZ2UubWVzc2FnZSwKKyAgICAgIHRyYWNlOiB7Cisg
ICAgICAgIHN0YWNrOiByZXN1bHRNZXNzYWdlLnBhc3NlZCAmJiAhcmVzdWx0TWVzc2FnZS5wYXNz
ZWQoKSA/IHJlc3VsdE1lc3NhZ2UudHJhY2Uuc3RhY2sgOiBqYXNtaW5lLnVuZGVmaW5lZAorICAg
ICAgfQorICAgIH0pOworICB9CisKKyAgcmV0dXJuIHsKKyAgICByZXN1bHQgOiByZXN1bHQucmVz
dWx0LAorICAgIG1lc3NhZ2VzIDogc3VtbWFyeU1lc3NhZ2VzCisgIH07Cit9OworCisvKioKKyAq
IEBjb25zdHJ1Y3RvcgorICogQHBhcmFtIHtqYXNtaW5lLkVudn0gZW52CisgKiBAcGFyYW0gYWN0
dWFsCisgKiBAcGFyYW0ge2phc21pbmUuU3BlY30gc3BlYworICovCitqYXNtaW5lLk1hdGNoZXJz
ID0gZnVuY3Rpb24oZW52LCBhY3R1YWwsIHNwZWMsIG9wdF9pc05vdCkgeworICB0aGlzLmVudiA9
IGVudjsKKyAgdGhpcy5hY3R1YWwgPSBhY3R1YWw7CisgIHRoaXMuc3BlYyA9IHNwZWM7CisgIHRo
aXMuaXNOb3QgPSBvcHRfaXNOb3QgfHwgZmFsc2U7CisgIHRoaXMucmVwb3J0V2FzQ2FsbGVkXyA9
IGZhbHNlOworfTsKKworLy8gdG9kbzogQGRlcHJlY2F0ZWQgYXMgb2YgSmFzbWluZSAwLjExLCBy
ZW1vdmUgc29vbiBbeHddCitqYXNtaW5lLk1hdGNoZXJzLnBwID0gZnVuY3Rpb24oc3RyKSB7Cisg
IHRocm93IG5ldyBFcnJvcigiamFzbWluZS5NYXRjaGVycy5wcCgpIGlzIG5vIGxvbmdlciBzdXBw
b3J0ZWQsIHBsZWFzZSB1c2UgamFzbWluZS5wcCgpIGluc3RlYWQhIik7Cit9OworCisvLyB0b2Rv
OiBAZGVwcmVjYXRlZCBEZXByZWNhdGVkIGFzIG9mIEphc21pbmUgMC4xMC4gUmV3cml0ZSB5b3Vy
IGN1c3RvbSBtYXRjaGVycyB0byByZXR1cm4gdHJ1ZSBvciBmYWxzZS4gW3h3XQoramFzbWluZS5N
YXRjaGVycy5wcm90b3R5cGUucmVwb3J0ID0gZnVuY3Rpb24ocmVzdWx0LCBmYWlsaW5nX21lc3Nh
Z2UsIGRldGFpbHMpIHsKKyAgdGhyb3cgbmV3IEVycm9yKCJBcyBvZiBqYXNtaW5lIDAuMTEsIGN1
c3RvbSBtYXRjaGVycyBtdXN0IGJlIGltcGxlbWVudGVkIGRpZmZlcmVudGx5IC0tIHBsZWFzZSBz
ZWUgamFzbWluZSBkb2NzIik7Cit9OworCitqYXNtaW5lLk1hdGNoZXJzLndyYXBJbnRvXyA9IGZ1
bmN0aW9uKHByb3RvdHlwZSwgbWF0Y2hlcnNDbGFzcykgeworICBmb3IgKHZhciBtZXRob2ROYW1l
IGluIHByb3RvdHlwZSkgeworICAgIGlmIChtZXRob2ROYW1lID09ICdyZXBvcnQnKSBjb250aW51
ZTsKKyAgICB2YXIgb3JpZyA9IHByb3RvdHlwZVttZXRob2ROYW1lXTsKKyAgICBtYXRjaGVyc0Ns
YXNzLnByb3RvdHlwZVttZXRob2ROYW1lXSA9IGphc21pbmUuTWF0Y2hlcnMubWF0Y2hlckZuXyht
ZXRob2ROYW1lLCBvcmlnKTsKKyAgfQorfTsKKworamFzbWluZS5NYXRjaGVycy5tYXRjaGVyRm5f
ID0gZnVuY3Rpb24obWF0Y2hlck5hbWUsIG1hdGNoZXJGdW5jdGlvbikgeworICByZXR1cm4gZnVu
Y3Rpb24oKSB7CisgICAgdmFyIG1hdGNoZXJBcmdzID0gamFzbWluZS51dGlsLmFyZ3NUb0FycmF5
KGFyZ3VtZW50cyk7CisgICAgdmFyIHJlc3VsdCA9IG1hdGNoZXJGdW5jdGlvbi5hcHBseSh0aGlz
LCBhcmd1bWVudHMpOworCisgICAgaWYgKHRoaXMuaXNOb3QpIHsKKyAgICAgIHJlc3VsdCA9ICFy
ZXN1bHQ7CisgICAgfQorCisgICAgaWYgKHRoaXMucmVwb3J0V2FzQ2FsbGVkXykgcmV0dXJuIHJl
c3VsdDsKKworICAgIHZhciBtZXNzYWdlOworICAgIGlmICghcmVzdWx0KSB7CisgICAgICBpZiAo
dGhpcy5tZXNzYWdlKSB7CisgICAgICAgIG1lc3NhZ2UgPSB0aGlzLm1lc3NhZ2UuYXBwbHkodGhp
cywgYXJndW1lbnRzKTsKKyAgICAgICAgaWYgKGphc21pbmUuaXNBcnJheV8obWVzc2FnZSkpIHsK
KyAgICAgICAgICBtZXNzYWdlID0gbWVzc2FnZVt0aGlzLmlzTm90ID8gMSA6IDBdOworICAgICAg
ICB9CisgICAgICB9IGVsc2UgeworICAgICAgICB2YXIgZW5nbGlzaHlQcmVkaWNhdGUgPSBtYXRj
aGVyTmFtZS5yZXBsYWNlKC9bQS1aXS9nLCBmdW5jdGlvbihzKSB7IHJldHVybiAnICcgKyBzLnRv
TG93ZXJDYXNlKCk7IH0pOworICAgICAgICBtZXNzYWdlID0gIkV4cGVjdGVkICIgKyBqYXNtaW5l
LnBwKHRoaXMuYWN0dWFsKSArICh0aGlzLmlzTm90ID8gIiBub3QgIiA6ICIgIikgKyBlbmdsaXNo
eVByZWRpY2F0ZTsKKyAgICAgICAgaWYgKG1hdGNoZXJBcmdzLmxlbmd0aCA+IDApIHsKKyAgICAg
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1hdGNoZXJBcmdzLmxlbmd0aDsgaSsrKSB7CisgICAg
ICAgICAgICBpZiAoaSA+IDApIG1lc3NhZ2UgKz0gIiwiOworICAgICAgICAgICAgbWVzc2FnZSAr
PSAiICIgKyBqYXNtaW5lLnBwKG1hdGNoZXJBcmdzW2ldKTsKKyAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgbWVzc2FnZSArPSAiLiI7CisgICAgICB9CisgICAgfQorICAgIHZhciBleHBl
Y3RhdGlvblJlc3VsdCA9IG5ldyBqYXNtaW5lLkV4cGVjdGF0aW9uUmVzdWx0KHsKKyAgICAgIG1h
dGNoZXJOYW1lOiBtYXRjaGVyTmFtZSwKKyAgICAgIHBhc3NlZDogcmVzdWx0LAorICAgICAgZXhw
ZWN0ZWQ6IG1hdGNoZXJBcmdzLmxlbmd0aCA+IDEgPyBtYXRjaGVyQXJncyA6IG1hdGNoZXJBcmdz
WzBdLAorICAgICAgYWN0dWFsOiB0aGlzLmFjdHVhbCwKKyAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UK
KyAgICB9KTsKKyAgICB0aGlzLnNwZWMuYWRkTWF0Y2hlclJlc3VsdChleHBlY3RhdGlvblJlc3Vs
dCk7CisgICAgcmV0dXJuIGphc21pbmUudW5kZWZpbmVkOworICB9OworfTsKKworCisKKworLyoq
CisgKiB0b0JlOiBjb21wYXJlcyB0aGUgYWN0dWFsIHRvIHRoZSBleHBlY3RlZCB1c2luZyA9PT0K
KyAqIEBwYXJhbSBleHBlY3RlZAorICovCitqYXNtaW5lLk1hdGNoZXJzLnByb3RvdHlwZS50b0Jl
ID0gZnVuY3Rpb24oZXhwZWN0ZWQpIHsKKyAgcmV0dXJuIHRoaXMuYWN0dWFsID09PSBleHBlY3Rl
ZDsKK307CisKKy8qKgorICogdG9Ob3RCZTogY29tcGFyZXMgdGhlIGFjdHVhbCB0byB0aGUgZXhw
ZWN0ZWQgdXNpbmcgIT09CisgKiBAcGFyYW0gZXhwZWN0ZWQKKyAqIEBkZXByZWNhdGVkIGFzIG9m
IDEuMC4gVXNlIG5vdC50b0JlKCkgaW5zdGVhZC4KKyAqLworamFzbWluZS5NYXRjaGVycy5wcm90
b3R5cGUudG9Ob3RCZSA9IGZ1bmN0aW9uKGV4cGVjdGVkKSB7CisgIHJldHVybiB0aGlzLmFjdHVh
bCAhPT0gZXhwZWN0ZWQ7Cit9OworCisvKioKKyAqIHRvRXF1YWw6IGNvbXBhcmVzIHRoZSBhY3R1
YWwgdG8gdGhlIGV4cGVjdGVkIHVzaW5nIGNvbW1vbiBzZW5zZSBlcXVhbGl0eS4gSGFuZGxlcyBP
YmplY3RzLCBBcnJheXMsIGV0Yy4KKyAqCisgKiBAcGFyYW0gZXhwZWN0ZWQKKyAqLworamFzbWlu
ZS5NYXRjaGVycy5wcm90b3R5cGUudG9FcXVhbCA9IGZ1bmN0aW9uKGV4cGVjdGVkKSB7CisgIHJl
dHVybiB0aGlzLmVudi5lcXVhbHNfKHRoaXMuYWN0dWFsLCBleHBlY3RlZCk7Cit9OworCisvKioK
KyAqIHRvTm90RXF1YWw6IGNvbXBhcmVzIHRoZSBhY3R1YWwgdG8gdGhlIGV4cGVjdGVkIHVzaW5n
IHRoZSAhIG9mIGphc21pbmUuTWF0Y2hlcnMudG9FcXVhbAorICogQHBhcmFtIGV4cGVjdGVkCisg
KiBAZGVwcmVjYXRlZCBhcyBvZiAxLjAuIFVzZSBub3QudG9Ob3RFcXVhbCgpIGluc3RlYWQuCisg
Ki8KK2phc21pbmUuTWF0Y2hlcnMucHJvdG90eXBlLnRvTm90RXF1YWwgPSBmdW5jdGlvbihleHBl
Y3RlZCkgeworICByZXR1cm4gIXRoaXMuZW52LmVxdWFsc18odGhpcy5hY3R1YWwsIGV4cGVjdGVk
KTsKK307CisKKy8qKgorICogTWF0Y2hlciB0aGF0IGNvbXBhcmVzIHRoZSBhY3R1YWwgdG8gdGhl
IGV4cGVjdGVkIHVzaW5nIGEgcmVndWxhciBleHByZXNzaW9uLiAgQ29uc3RydWN0cyBhIFJlZ0V4
cCwgc28gdGFrZXMKKyAqIGEgcGF0dGVybiBvciBhIFN0cmluZy4KKyAqCisgKiBAcGFyYW0gZXhw
ZWN0ZWQKKyAqLworamFzbWluZS5NYXRjaGVycy5wcm90b3R5cGUudG9NYXRjaCA9IGZ1bmN0aW9u
KGV4cGVjdGVkKSB7CisgIHJldHVybiBuZXcgUmVnRXhwKGV4cGVjdGVkKS50ZXN0KHRoaXMuYWN0
dWFsKTsKK307CisKKy8qKgorICogTWF0Y2hlciB0aGF0IGNvbXBhcmVzIHRoZSBhY3R1YWwgdG8g
dGhlIGV4cGVjdGVkIHVzaW5nIHRoZSBib29sZWFuIGludmVyc2Ugb2YgamFzbWluZS5NYXRjaGVy
cy50b01hdGNoCisgKiBAcGFyYW0gZXhwZWN0ZWQKKyAqIEBkZXByZWNhdGVkIGFzIG9mIDEuMC4g
VXNlIG5vdC50b01hdGNoKCkgaW5zdGVhZC4KKyAqLworamFzbWluZS5NYXRjaGVycy5wcm90b3R5
cGUudG9Ob3RNYXRjaCA9IGZ1bmN0aW9uKGV4cGVjdGVkKSB7CisgIHJldHVybiAhKG5ldyBSZWdF
eHAoZXhwZWN0ZWQpLnRlc3QodGhpcy5hY3R1YWwpKTsKK307CisKKy8qKgorICogTWF0Y2hlciB0
aGF0IGNvbXBhcmVzIHRoZSBhY3R1YWwgdG8gamFzbWluZS51bmRlZmluZWQuCisgKi8KK2phc21p
bmUuTWF0Y2hlcnMucHJvdG90eXBlLnRvQmVEZWZpbmVkID0gZnVuY3Rpb24oKSB7CisgIHJldHVy
biAodGhpcy5hY3R1YWwgIT09IGphc21pbmUudW5kZWZpbmVkKTsKK307CisKKy8qKgorICogTWF0
Y2hlciB0aGF0IGNvbXBhcmVzIHRoZSBhY3R1YWwgdG8gamFzbWluZS51bmRlZmluZWQuCisgKi8K
K2phc21pbmUuTWF0Y2hlcnMucHJvdG90eXBlLnRvQmVVbmRlZmluZWQgPSBmdW5jdGlvbigpIHsK
KyAgcmV0dXJuICh0aGlzLmFjdHVhbCA9PT0gamFzbWluZS51bmRlZmluZWQpOworfTsKKworLyoq
CisgKiBNYXRjaGVyIHRoYXQgY29tcGFyZXMgdGhlIGFjdHVhbCB0byBudWxsLgorICovCitqYXNt
aW5lLk1hdGNoZXJzLnByb3RvdHlwZS50b0JlTnVsbCA9IGZ1bmN0aW9uKCkgeworICByZXR1cm4g
KHRoaXMuYWN0dWFsID09PSBudWxsKTsKK307CisKKy8qKgorICogTWF0Y2hlciB0aGF0IGJvb2xl
YW4gbm90LW5vdHMgdGhlIGFjdHVhbC4KKyAqLworamFzbWluZS5NYXRjaGVycy5wcm90b3R5cGUu
dG9CZVRydXRoeSA9IGZ1bmN0aW9uKCkgeworICByZXR1cm4gISF0aGlzLmFjdHVhbDsKK307CisK
KworLyoqCisgKiBNYXRjaGVyIHRoYXQgYm9vbGVhbiBub3RzIHRoZSBhY3R1YWwuCisgKi8KK2ph
c21pbmUuTWF0Y2hlcnMucHJvdG90eXBlLnRvQmVGYWxzeSA9IGZ1bmN0aW9uKCkgeworICByZXR1
cm4gIXRoaXMuYWN0dWFsOworfTsKKworCisvKioKKyAqIE1hdGNoZXIgdGhhdCBjaGVja3MgdG8g
c2VlIGlmIHRoZSBhY3R1YWwsIGEgSmFzbWluZSBzcHksIHdhcyBjYWxsZWQuCisgKi8KK2phc21p
bmUuTWF0Y2hlcnMucHJvdG90eXBlLnRvSGF2ZUJlZW5DYWxsZWQgPSBmdW5jdGlvbigpIHsKKyAg
aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAwKSB7CisgICAgdGhyb3cgbmV3IEVycm9yKCd0b0hhdmVC
ZWVuQ2FsbGVkIGRvZXMgbm90IHRha2UgYXJndW1lbnRzLCB1c2UgdG9IYXZlQmVlbkNhbGxlZFdp
dGgnKTsKKyAgfQorCisgIGlmICghamFzbWluZS5pc1NweSh0aGlzLmFjdHVhbCkpIHsKKyAgICB0
aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIGEgc3B5LCBidXQgZ290ICcgKyBqYXNtaW5lLnBwKHRo
aXMuYWN0dWFsKSArICcuJyk7CisgIH0KKworICB0aGlzLm1lc3NhZ2UgPSBmdW5jdGlvbigpIHsK
KyAgICByZXR1cm4gWworICAgICAgIkV4cGVjdGVkIHNweSAiICsgdGhpcy5hY3R1YWwuaWRlbnRp
dHkgKyAiIHRvIGhhdmUgYmVlbiBjYWxsZWQuIiwKKyAgICAgICJFeHBlY3RlZCBzcHkgIiArIHRo
aXMuYWN0dWFsLmlkZW50aXR5ICsgIiBub3QgdG8gaGF2ZSBiZWVuIGNhbGxlZC4iCisgICAgXTsK
KyAgfTsKKworICByZXR1cm4gdGhpcy5hY3R1YWwud2FzQ2FsbGVkOworfTsKKworLyoqIEBkZXBy
ZWNhdGVkIFVzZSBleHBlY3QoeHh4KS50b0hhdmVCZWVuQ2FsbGVkKCkgaW5zdGVhZCAqLworamFz
bWluZS5NYXRjaGVycy5wcm90b3R5cGUud2FzQ2FsbGVkID0gamFzbWluZS5NYXRjaGVycy5wcm90
b3R5cGUudG9IYXZlQmVlbkNhbGxlZDsKKworLyoqCisgKiBNYXRjaGVyIHRoYXQgY2hlY2tzIHRv
IHNlZSBpZiB0aGUgYWN0dWFsLCBhIEphc21pbmUgc3B5LCB3YXMgbm90IGNhbGxlZC4KKyAqCisg
KiBAZGVwcmVjYXRlZCBVc2UgZXhwZWN0KHh4eCkubm90LnRvSGF2ZUJlZW5DYWxsZWQoKSBpbnN0
ZWFkCisgKi8KK2phc21pbmUuTWF0Y2hlcnMucHJvdG90eXBlLndhc05vdENhbGxlZCA9IGZ1bmN0
aW9uKCkgeworICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDApIHsKKyAgICB0aHJvdyBuZXcgRXJy
b3IoJ3dhc05vdENhbGxlZCBkb2VzIG5vdCB0YWtlIGFyZ3VtZW50cycpOworICB9CisKKyAgaWYg
KCFqYXNtaW5lLmlzU3B5KHRoaXMuYWN0dWFsKSkgeworICAgIHRocm93IG5ldyBFcnJvcignRXhw
ZWN0ZWQgYSBzcHksIGJ1dCBnb3QgJyArIGphc21pbmUucHAodGhpcy5hY3R1YWwpICsgJy4nKTsK
KyAgfQorCisgIHRoaXMubWVzc2FnZSA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiBbCisgICAg
ICAiRXhwZWN0ZWQgc3B5ICIgKyB0aGlzLmFjdHVhbC5pZGVudGl0eSArICIgdG8gbm90IGhhdmUg
YmVlbiBjYWxsZWQuIiwKKyAgICAgICJFeHBlY3RlZCBzcHkgIiArIHRoaXMuYWN0dWFsLmlkZW50
aXR5ICsgIiB0byBoYXZlIGJlZW4gY2FsbGVkLiIKKyAgICBdOworICB9OworCisgIHJldHVybiAh
dGhpcy5hY3R1YWwud2FzQ2FsbGVkOworfTsKKworLyoqCisgKiBNYXRjaGVyIHRoYXQgY2hlY2tz
IHRvIHNlZSBpZiB0aGUgYWN0dWFsLCBhIEphc21pbmUgc3B5LCB3YXMgY2FsbGVkIHdpdGggYSBz
ZXQgb2YgcGFyYW1ldGVycy4KKyAqCisgKiBAZXhhbXBsZQorICoKKyAqLworamFzbWluZS5NYXRj
aGVycy5wcm90b3R5cGUudG9IYXZlQmVlbkNhbGxlZFdpdGggPSBmdW5jdGlvbigpIHsKKyAgdmFy
IGV4cGVjdGVkQXJncyA9IGphc21pbmUudXRpbC5hcmdzVG9BcnJheShhcmd1bWVudHMpOworICBp
ZiAoIWphc21pbmUuaXNTcHkodGhpcy5hY3R1YWwpKSB7CisgICAgdGhyb3cgbmV3IEVycm9yKCdF
eHBlY3RlZCBhIHNweSwgYnV0IGdvdCAnICsgamFzbWluZS5wcCh0aGlzLmFjdHVhbCkgKyAnLicp
OworICB9CisgIHRoaXMubWVzc2FnZSA9IGZ1bmN0aW9uKCkgeworICAgIGlmICh0aGlzLmFjdHVh
bC5jYWxsQ291bnQgPT09IDApIHsKKyAgICAgIC8vIHRvZG86IHdoYXQgc2hvdWxkIHRoZSBmYWls
dXJlIG1lc3NhZ2UgZm9yIC5ub3QudG9IYXZlQmVlbkNhbGxlZFdpdGgoKSBiZT8gaXMgdGhpcyBy
aWdodD8gdGVzdCBiZXR0ZXIuIFt4d10KKyAgICAgIHJldHVybiBbCisgICAgICAgICJFeHBlY3Rl
ZCBzcHkgIiArIHRoaXMuYWN0dWFsLmlkZW50aXR5ICsgIiB0byBoYXZlIGJlZW4gY2FsbGVkIHdp
dGggIiArIGphc21pbmUucHAoZXhwZWN0ZWRBcmdzKSArICIgYnV0IGl0IHdhcyBuZXZlciBjYWxs
ZWQuIiwKKyAgICAgICAgIkV4cGVjdGVkIHNweSAiICsgdGhpcy5hY3R1YWwuaWRlbnRpdHkgKyAi
IG5vdCB0byBoYXZlIGJlZW4gY2FsbGVkIHdpdGggIiArIGphc21pbmUucHAoZXhwZWN0ZWRBcmdz
KSArICIgYnV0IGl0IHdhcy4iCisgICAgICBdOworICAgIH0gZWxzZSB7CisgICAgICByZXR1cm4g
WworICAgICAgICAiRXhwZWN0ZWQgc3B5ICIgKyB0aGlzLmFjdHVhbC5pZGVudGl0eSArICIgdG8g
aGF2ZSBiZWVuIGNhbGxlZCB3aXRoICIgKyBqYXNtaW5lLnBwKGV4cGVjdGVkQXJncykgKyAiIGJ1
dCB3YXMgY2FsbGVkIHdpdGggIiArIGphc21pbmUucHAodGhpcy5hY3R1YWwuYXJnc0ZvckNhbGwp
LAorICAgICAgICAiRXhwZWN0ZWQgc3B5ICIgKyB0aGlzLmFjdHVhbC5pZGVudGl0eSArICIgbm90
IHRvIGhhdmUgYmVlbiBjYWxsZWQgd2l0aCAiICsgamFzbWluZS5wcChleHBlY3RlZEFyZ3MpICsg
IiBidXQgd2FzIGNhbGxlZCB3aXRoICIgKyBqYXNtaW5lLnBwKHRoaXMuYWN0dWFsLmFyZ3NGb3JD
YWxsKQorICAgICAgXTsKKyAgICB9CisgIH07CisKKyAgcmV0dXJuIHRoaXMuZW52LmNvbnRhaW5z
Xyh0aGlzLmFjdHVhbC5hcmdzRm9yQ2FsbCwgZXhwZWN0ZWRBcmdzKTsKK307CisKKy8qKiBAZGVw
cmVjYXRlZCBVc2UgZXhwZWN0KHh4eCkudG9IYXZlQmVlbkNhbGxlZFdpdGgoKSBpbnN0ZWFkICov
CitqYXNtaW5lLk1hdGNoZXJzLnByb3RvdHlwZS53YXNDYWxsZWRXaXRoID0gamFzbWluZS5NYXRj
aGVycy5wcm90b3R5cGUudG9IYXZlQmVlbkNhbGxlZFdpdGg7CisKKy8qKiBAZGVwcmVjYXRlZCBV
c2UgZXhwZWN0KHh4eCkubm90LnRvSGF2ZUJlZW5DYWxsZWRXaXRoKCkgaW5zdGVhZCAqLworamFz
bWluZS5NYXRjaGVycy5wcm90b3R5cGUud2FzTm90Q2FsbGVkV2l0aCA9IGZ1bmN0aW9uKCkgewor
ICB2YXIgZXhwZWN0ZWRBcmdzID0gamFzbWluZS51dGlsLmFyZ3NUb0FycmF5KGFyZ3VtZW50cyk7
CisgIGlmICghamFzbWluZS5pc1NweSh0aGlzLmFjdHVhbCkpIHsKKyAgICB0aHJvdyBuZXcgRXJy
b3IoJ0V4cGVjdGVkIGEgc3B5LCBidXQgZ290ICcgKyBqYXNtaW5lLnBwKHRoaXMuYWN0dWFsKSAr
ICcuJyk7CisgIH0KKworICB0aGlzLm1lc3NhZ2UgPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4g
WworICAgICAgIkV4cGVjdGVkIHNweSBub3QgdG8gaGF2ZSBiZWVuIGNhbGxlZCB3aXRoICIgKyBq
YXNtaW5lLnBwKGV4cGVjdGVkQXJncykgKyAiIGJ1dCBpdCB3YXMiLAorICAgICAgIkV4cGVjdGVk
IHNweSB0byBoYXZlIGJlZW4gY2FsbGVkIHdpdGggIiArIGphc21pbmUucHAoZXhwZWN0ZWRBcmdz
KSArICIgYnV0IGl0IHdhcyIKKyAgICBdOworICB9OworCisgIHJldHVybiAhdGhpcy5lbnYuY29u
dGFpbnNfKHRoaXMuYWN0dWFsLmFyZ3NGb3JDYWxsLCBleHBlY3RlZEFyZ3MpOworfTsKKworLyoq
CisgKiBNYXRjaGVyIHRoYXQgY2hlY2tzIHRoYXQgdGhlIGV4cGVjdGVkIGl0ZW0gaXMgYW4gZWxl
bWVudCBpbiB0aGUgYWN0dWFsIEFycmF5LgorICoKKyAqIEBwYXJhbSB7T2JqZWN0fSBleHBlY3Rl
ZAorICovCitqYXNtaW5lLk1hdGNoZXJzLnByb3RvdHlwZS50b0NvbnRhaW4gPSBmdW5jdGlvbihl
eHBlY3RlZCkgeworICByZXR1cm4gdGhpcy5lbnYuY29udGFpbnNfKHRoaXMuYWN0dWFsLCBleHBl
Y3RlZCk7Cit9OworCisvKioKKyAqIE1hdGNoZXIgdGhhdCBjaGVja3MgdGhhdCB0aGUgZXhwZWN0
ZWQgaXRlbSBpcyBOT1QgYW4gZWxlbWVudCBpbiB0aGUgYWN0dWFsIEFycmF5LgorICoKKyAqIEBw
YXJhbSB7T2JqZWN0fSBleHBlY3RlZAorICogQGRlcHJlY2F0ZWQgYXMgb2YgMS4wLiBVc2Ugbm90
LnRvTm90Q29udGFpbigpIGluc3RlYWQuCisgKi8KK2phc21pbmUuTWF0Y2hlcnMucHJvdG90eXBl
LnRvTm90Q29udGFpbiA9IGZ1bmN0aW9uKGV4cGVjdGVkKSB7CisgIHJldHVybiAhdGhpcy5lbnYu
Y29udGFpbnNfKHRoaXMuYWN0dWFsLCBleHBlY3RlZCk7Cit9OworCitqYXNtaW5lLk1hdGNoZXJz
LnByb3RvdHlwZS50b0JlTGVzc1RoYW4gPSBmdW5jdGlvbihleHBlY3RlZCkgeworICByZXR1cm4g
dGhpcy5hY3R1YWwgPCBleHBlY3RlZDsKK307CisKK2phc21pbmUuTWF0Y2hlcnMucHJvdG90eXBl
LnRvQmVHcmVhdGVyVGhhbiA9IGZ1bmN0aW9uKGV4cGVjdGVkKSB7CisgIHJldHVybiB0aGlzLmFj
dHVhbCA+IGV4cGVjdGVkOworfTsKKworLyoqCisgKiBNYXRjaGVyIHRoYXQgY2hlY2tzIHRoYXQg
dGhlIGV4cGVjdGVkIGl0ZW0gaXMgZXF1YWwgdG8gdGhlIGFjdHVhbCBpdGVtCisgKiB1cCB0byBh
IGdpdmVuIGxldmVsIG9mIGRlY2ltYWwgcHJlY2lzaW9uIChkZWZhdWx0IDIpLgorICoKKyAqIEBw
YXJhbSB7TnVtYmVyfSBleHBlY3RlZAorICogQHBhcmFtIHtOdW1iZXJ9IHByZWNpc2lvbgorICov
CitqYXNtaW5lLk1hdGNoZXJzLnByb3RvdHlwZS50b0JlQ2xvc2VUbyA9IGZ1bmN0aW9uKGV4cGVj
dGVkLCBwcmVjaXNpb24pIHsKKyAgaWYgKCEocHJlY2lzaW9uID09PSAwKSkgeworICAgIHByZWNp
c2lvbiA9IHByZWNpc2lvbiB8fCAyOworICB9CisgIHZhciBtdWx0aXBsaWVyID0gTWF0aC5wb3co
MTAsIHByZWNpc2lvbik7CisgIHZhciBhY3R1YWwgPSBNYXRoLnJvdW5kKHRoaXMuYWN0dWFsICog
bXVsdGlwbGllcik7CisgIGV4cGVjdGVkID0gTWF0aC5yb3VuZChleHBlY3RlZCAqIG11bHRpcGxp
ZXIpOworICByZXR1cm4gZXhwZWN0ZWQgPT0gYWN0dWFsOworfTsKKworLyoqCisgKiBNYXRjaGVy
IHRoYXQgY2hlY2tzIHRoYXQgdGhlIGV4cGVjdGVkIGV4Y2VwdGlvbiB3YXMgdGhyb3duIGJ5IHRo
ZSBhY3R1YWwuCisgKgorICogQHBhcmFtIHtTdHJpbmd9IGV4cGVjdGVkCisgKi8KK2phc21pbmUu
TWF0Y2hlcnMucHJvdG90eXBlLnRvVGhyb3cgPSBmdW5jdGlvbihleHBlY3RlZCkgeworICB2YXIg
cmVzdWx0ID0gZmFsc2U7CisgIHZhciBleGNlcHRpb247CisgIGlmICh0eXBlb2YgdGhpcy5hY3R1
YWwgIT0gJ2Z1bmN0aW9uJykgeworICAgIHRocm93IG5ldyBFcnJvcignQWN0dWFsIGlzIG5vdCBh
IGZ1bmN0aW9uJyk7CisgIH0KKyAgdHJ5IHsKKyAgICB0aGlzLmFjdHVhbCgpOworICB9IGNhdGNo
IChlKSB7CisgICAgZXhjZXB0aW9uID0gZTsKKyAgfQorICBpZiAoZXhjZXB0aW9uKSB7CisgICAg
cmVzdWx0ID0gKGV4cGVjdGVkID09PSBqYXNtaW5lLnVuZGVmaW5lZCB8fCB0aGlzLmVudi5lcXVh
bHNfKGV4Y2VwdGlvbi5tZXNzYWdlIHx8IGV4Y2VwdGlvbiwgZXhwZWN0ZWQubWVzc2FnZSB8fCBl
eHBlY3RlZCkpOworICB9CisKKyAgdmFyIG5vdCA9IHRoaXMuaXNOb3QgPyAibm90ICIgOiAiIjsK
KworICB0aGlzLm1lc3NhZ2UgPSBmdW5jdGlvbigpIHsKKyAgICBpZiAoZXhjZXB0aW9uICYmIChl
eHBlY3RlZCA9PT0gamFzbWluZS51bmRlZmluZWQgfHwgIXRoaXMuZW52LmVxdWFsc18oZXhjZXB0
aW9uLm1lc3NhZ2UgfHwgZXhjZXB0aW9uLCBleHBlY3RlZC5tZXNzYWdlIHx8IGV4cGVjdGVkKSkp
IHsKKyAgICAgIHJldHVybiBbIkV4cGVjdGVkIGZ1bmN0aW9uICIgKyBub3QgKyAidG8gdGhyb3ci
LCBleHBlY3RlZCA/IGV4cGVjdGVkLm1lc3NhZ2UgfHwgZXhwZWN0ZWQgOiAiYW4gZXhjZXB0aW9u
IiwgIiwgYnV0IGl0IHRocmV3IiwgZXhjZXB0aW9uLm1lc3NhZ2UgfHwgZXhjZXB0aW9uXS5qb2lu
KCcgJyk7CisgICAgfSBlbHNlIHsKKyAgICAgIHJldHVybiAiRXhwZWN0ZWQgZnVuY3Rpb24gdG8g
dGhyb3cgYW4gZXhjZXB0aW9uLiI7CisgICAgfQorICB9OworCisgIHJldHVybiByZXN1bHQ7Cit9
OworCitqYXNtaW5lLk1hdGNoZXJzLkFueSA9IGZ1bmN0aW9uKGV4cGVjdGVkQ2xhc3MpIHsKKyAg
dGhpcy5leHBlY3RlZENsYXNzID0gZXhwZWN0ZWRDbGFzczsKK307CisKK2phc21pbmUuTWF0Y2hl
cnMuQW55LnByb3RvdHlwZS5tYXRjaGVzID0gZnVuY3Rpb24ob3RoZXIpIHsKKyAgaWYgKHRoaXMu
ZXhwZWN0ZWRDbGFzcyA9PSBTdHJpbmcpIHsKKyAgICByZXR1cm4gdHlwZW9mIG90aGVyID09ICdz
dHJpbmcnIHx8IG90aGVyIGluc3RhbmNlb2YgU3RyaW5nOworICB9CisKKyAgaWYgKHRoaXMuZXhw
ZWN0ZWRDbGFzcyA9PSBOdW1iZXIpIHsKKyAgICByZXR1cm4gdHlwZW9mIG90aGVyID09ICdudW1i
ZXInIHx8IG90aGVyIGluc3RhbmNlb2YgTnVtYmVyOworICB9CisKKyAgaWYgKHRoaXMuZXhwZWN0
ZWRDbGFzcyA9PSBGdW5jdGlvbikgeworICAgIHJldHVybiB0eXBlb2Ygb3RoZXIgPT0gJ2Z1bmN0
aW9uJyB8fCBvdGhlciBpbnN0YW5jZW9mIEZ1bmN0aW9uOworICB9CisKKyAgaWYgKHRoaXMuZXhw
ZWN0ZWRDbGFzcyA9PSBPYmplY3QpIHsKKyAgICByZXR1cm4gdHlwZW9mIG90aGVyID09ICdvYmpl
Y3QnOworICB9CisKKyAgcmV0dXJuIG90aGVyIGluc3RhbmNlb2YgdGhpcy5leHBlY3RlZENsYXNz
OworfTsKKworamFzbWluZS5NYXRjaGVycy5BbnkucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rp
b24oKSB7CisgIHJldHVybiAnPGphc21pbmUuYW55KCcgKyB0aGlzLmV4cGVjdGVkQ2xhc3MgKyAn
KT4nOworfTsKKworLyoqCisgKiBAY29uc3RydWN0b3IKKyAqLworamFzbWluZS5NdWx0aVJlcG9y
dGVyID0gZnVuY3Rpb24oKSB7CisgIHRoaXMuc3ViUmVwb3J0ZXJzXyA9IFtdOworfTsKK2phc21p
bmUudXRpbC5pbmhlcml0KGphc21pbmUuTXVsdGlSZXBvcnRlciwgamFzbWluZS5SZXBvcnRlcik7
CisKK2phc21pbmUuTXVsdGlSZXBvcnRlci5wcm90b3R5cGUuYWRkUmVwb3J0ZXIgPSBmdW5jdGlv
bihyZXBvcnRlcikgeworICB0aGlzLnN1YlJlcG9ydGVyc18ucHVzaChyZXBvcnRlcik7Cit9Owor
CisoZnVuY3Rpb24oKSB7CisgIHZhciBmdW5jdGlvbk5hbWVzID0gWworICAgICJyZXBvcnRSdW5u
ZXJTdGFydGluZyIsCisgICAgInJlcG9ydFJ1bm5lclJlc3VsdHMiLAorICAgICJyZXBvcnRTdWl0
ZVJlc3VsdHMiLAorICAgICJyZXBvcnRTcGVjU3RhcnRpbmciLAorICAgICJyZXBvcnRTcGVjUmVz
dWx0cyIsCisgICAgImxvZyIKKyAgXTsKKyAgZm9yICh2YXIgaSA9IDA7IGkgPCBmdW5jdGlvbk5h
bWVzLmxlbmd0aDsgaSsrKSB7CisgICAgdmFyIGZ1bmN0aW9uTmFtZSA9IGZ1bmN0aW9uTmFtZXNb
aV07CisgICAgamFzbWluZS5NdWx0aVJlcG9ydGVyLnByb3RvdHlwZVtmdW5jdGlvbk5hbWVdID0g
KGZ1bmN0aW9uKGZ1bmN0aW9uTmFtZSkgeworICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgeworICAg
ICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMuc3ViUmVwb3J0ZXJzXy5sZW5ndGg7IGorKykg
eworICAgICAgICAgIHZhciBzdWJSZXBvcnRlciA9IHRoaXMuc3ViUmVwb3J0ZXJzX1tqXTsKKyAg
ICAgICAgICBpZiAoc3ViUmVwb3J0ZXJbZnVuY3Rpb25OYW1lXSkgeworICAgICAgICAgICAgc3Vi
UmVwb3J0ZXJbZnVuY3Rpb25OYW1lXS5hcHBseShzdWJSZXBvcnRlciwgYXJndW1lbnRzKTsKKyAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH07CisgICAgfSkoZnVuY3Rpb25OYW1lKTsKKyAg
fQorfSkoKTsKKy8qKgorICogSG9sZHMgcmVzdWx0cyBmb3IgYSBzZXQgb2YgSmFzbWluZSBzcGVj
LiBBbGxvd3MgZm9yIHRoZSByZXN1bHRzIGFycmF5IHRvIGhvbGQgYW5vdGhlciBqYXNtaW5lLk5l
c3RlZFJlc3VsdHMKKyAqCisgKiBAY29uc3RydWN0b3IKKyAqLworamFzbWluZS5OZXN0ZWRSZXN1
bHRzID0gZnVuY3Rpb24oKSB7CisgIC8qKgorICAgKiBUaGUgdG90YWwgY291bnQgb2YgcmVzdWx0
cworICAgKi8KKyAgdGhpcy50b3RhbENvdW50ID0gMDsKKyAgLyoqCisgICAqIE51bWJlciBvZiBw
YXNzZWQgcmVzdWx0cworICAgKi8KKyAgdGhpcy5wYXNzZWRDb3VudCA9IDA7CisgIC8qKgorICAg
KiBOdW1iZXIgb2YgZmFpbGVkIHJlc3VsdHMKKyAgICovCisgIHRoaXMuZmFpbGVkQ291bnQgPSAw
OworICAvKioKKyAgICogV2FzIHRoaXMgc3VpdGUvc3BlYyBza2lwcGVkPworICAgKi8KKyAgdGhp
cy5za2lwcGVkID0gZmFsc2U7CisgIC8qKgorICAgKiBAaWdub3JlCisgICAqLworICB0aGlzLml0
ZW1zXyA9IFtdOworfTsKKworLyoqCisgKiBSb2xsIHVwIHRoZSByZXN1bHQgY291bnRzLgorICoK
KyAqIEBwYXJhbSByZXN1bHQKKyAqLworamFzbWluZS5OZXN0ZWRSZXN1bHRzLnByb3RvdHlwZS5y
b2xsdXBDb3VudHMgPSBmdW5jdGlvbihyZXN1bHQpIHsKKyAgdGhpcy50b3RhbENvdW50ICs9IHJl
c3VsdC50b3RhbENvdW50OworICB0aGlzLnBhc3NlZENvdW50ICs9IHJlc3VsdC5wYXNzZWRDb3Vu
dDsKKyAgdGhpcy5mYWlsZWRDb3VudCArPSByZXN1bHQuZmFpbGVkQ291bnQ7Cit9OworCisvKioK
KyAqIEFkZHMgYSBsb2cgbWVzc2FnZS4KKyAqIEBwYXJhbSB2YWx1ZXMgQXJyYXkgb2YgbWVzc2Fn
ZSBwYXJ0cyB3aGljaCB3aWxsIGJlIGNvbmNhdGVuYXRlZCBsYXRlci4KKyAqLworamFzbWluZS5O
ZXN0ZWRSZXN1bHRzLnByb3RvdHlwZS5sb2cgPSBmdW5jdGlvbih2YWx1ZXMpIHsKKyAgdGhpcy5p
dGVtc18ucHVzaChuZXcgamFzbWluZS5NZXNzYWdlUmVzdWx0KHZhbHVlcykpOworfTsKKworLyoq
CisgKiBHZXR0ZXIgZm9yIHRoZSByZXN1bHRzOiBtZXNzYWdlICYgcmVzdWx0cy4KKyAqLworamFz
bWluZS5OZXN0ZWRSZXN1bHRzLnByb3RvdHlwZS5nZXRJdGVtcyA9IGZ1bmN0aW9uKCkgeworICBy
ZXR1cm4gdGhpcy5pdGVtc187Cit9OworCisvKioKKyAqIEFkZHMgYSByZXN1bHQsIHRyYWNraW5n
IGNvdW50cyAodG90YWwsIHBhc3NlZCwgJiBmYWlsZWQpCisgKiBAcGFyYW0ge2phc21pbmUuRXhw
ZWN0YXRpb25SZXN1bHR8amFzbWluZS5OZXN0ZWRSZXN1bHRzfSByZXN1bHQKKyAqLworamFzbWlu
ZS5OZXN0ZWRSZXN1bHRzLnByb3RvdHlwZS5hZGRSZXN1bHQgPSBmdW5jdGlvbihyZXN1bHQpIHsK
KyAgaWYgKHJlc3VsdC50eXBlICE9ICdsb2cnKSB7CisgICAgaWYgKHJlc3VsdC5pdGVtc18pIHsK
KyAgICAgIHRoaXMucm9sbHVwQ291bnRzKHJlc3VsdCk7CisgICAgfSBlbHNlIHsKKyAgICAgIHRo
aXMudG90YWxDb3VudCsrOworICAgICAgaWYgKHJlc3VsdC5wYXNzZWQoKSkgeworICAgICAgICB0
aGlzLnBhc3NlZENvdW50Kys7CisgICAgICB9IGVsc2UgeworICAgICAgICB0aGlzLmZhaWxlZENv
dW50Kys7CisgICAgICB9CisgICAgfQorICB9CisgIHRoaXMuaXRlbXNfLnB1c2gocmVzdWx0KTsK
K307CisKKy8qKgorICogQHJldHVybnMge0Jvb2xlYW59IFRydWUgaWYgPGI+ZXZlcnl0aGluZzwv
Yj4gYmVsb3cgcGFzc2VkCisgKi8KK2phc21pbmUuTmVzdGVkUmVzdWx0cy5wcm90b3R5cGUucGFz
c2VkID0gZnVuY3Rpb24oKSB7CisgIHJldHVybiB0aGlzLnBhc3NlZENvdW50ID09PSB0aGlzLnRv
dGFsQ291bnQ7Cit9OworLyoqCisgKiBCYXNlIGNsYXNzIGZvciBwcmV0dHkgcHJpbnRpbmcgZm9y
IGV4cGVjdGF0aW9uIHJlc3VsdHMuCisgKi8KK2phc21pbmUuUHJldHR5UHJpbnRlciA9IGZ1bmN0
aW9uKCkgeworICB0aGlzLnBwTmVzdExldmVsXyA9IDA7Cit9OworCisvKioKKyAqIEZvcm1hdHMg
YSB2YWx1ZSBpbiBhIG5pY2UsIGh1bWFuLXJlYWRhYmxlIHN0cmluZy4KKyAqCisgKiBAcGFyYW0g
dmFsdWUKKyAqLworamFzbWluZS5QcmV0dHlQcmludGVyLnByb3RvdHlwZS5mb3JtYXQgPSBmdW5j
dGlvbih2YWx1ZSkgeworICBpZiAodGhpcy5wcE5lc3RMZXZlbF8gPiA0MCkgeworICAgIHRocm93
IG5ldyBFcnJvcignamFzbWluZS5QcmV0dHlQcmludGVyOiBmb3JtYXQoKSBuZXN0ZWQgdG9vIGRl
ZXBseSEnKTsKKyAgfQorCisgIHRoaXMucHBOZXN0TGV2ZWxfKys7CisgIHRyeSB7CisgICAgaWYg
KHZhbHVlID09PSBqYXNtaW5lLnVuZGVmaW5lZCkgeworICAgICAgdGhpcy5lbWl0U2NhbGFyKCd1
bmRlZmluZWQnKTsKKyAgICB9IGVsc2UgaWYgKHZhbHVlID09PSBudWxsKSB7CisgICAgICB0aGlz
LmVtaXRTY2FsYXIoJ251bGwnKTsKKyAgICB9IGVsc2UgaWYgKHZhbHVlID09PSBqYXNtaW5lLmdl
dEdsb2JhbCgpKSB7CisgICAgICB0aGlzLmVtaXRTY2FsYXIoJzxnbG9iYWw+Jyk7CisgICAgfSBl
bHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIGphc21pbmUuTWF0Y2hlcnMuQW55KSB7CisgICAgICB0
aGlzLmVtaXRTY2FsYXIodmFsdWUudG9TdHJpbmcoKSk7CisgICAgfSBlbHNlIGlmICh0eXBlb2Yg
dmFsdWUgPT09ICdzdHJpbmcnKSB7CisgICAgICB0aGlzLmVtaXRTdHJpbmcodmFsdWUpOworICAg
IH0gZWxzZSBpZiAoamFzbWluZS5pc1NweSh2YWx1ZSkpIHsKKyAgICAgIHRoaXMuZW1pdFNjYWxh
cigic3B5IG9uICIgKyB2YWx1ZS5pZGVudGl0eSk7CisgICAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0
YW5jZW9mIFJlZ0V4cCkgeworICAgICAgdGhpcy5lbWl0U2NhbGFyKHZhbHVlLnRvU3RyaW5nKCkp
OworICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSB7CisgICAgICB0
aGlzLmVtaXRTY2FsYXIoJ0Z1bmN0aW9uJyk7CisgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUu
bm9kZVR5cGUgPT09ICdudW1iZXInKSB7CisgICAgICB0aGlzLmVtaXRTY2FsYXIoJ0hUTUxOb2Rl
Jyk7CisgICAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHsKKyAgICAgIHRoaXMu
ZW1pdFNjYWxhcignRGF0ZSgnICsgdmFsdWUgKyAnKScpOworICAgIH0gZWxzZSBpZiAodmFsdWUu
X19KYXNtaW5lX2JlZW5faGVyZV9iZWZvcmVfXykgeworICAgICAgdGhpcy5lbWl0U2NhbGFyKCc8
Y2lyY3VsYXIgcmVmZXJlbmNlOiAnICsgKGphc21pbmUuaXNBcnJheV8odmFsdWUpID8gJ0FycmF5
JyA6ICdPYmplY3QnKSArICc+Jyk7CisgICAgfSBlbHNlIGlmIChqYXNtaW5lLmlzQXJyYXlfKHZh
bHVlKSB8fCB0eXBlb2YgdmFsdWUgPT0gJ29iamVjdCcpIHsKKyAgICAgIHZhbHVlLl9fSmFzbWlu
ZV9iZWVuX2hlcmVfYmVmb3JlX18gPSB0cnVlOworICAgICAgaWYgKGphc21pbmUuaXNBcnJheV8o
dmFsdWUpKSB7CisgICAgICAgIHRoaXMuZW1pdEFycmF5KHZhbHVlKTsKKyAgICAgIH0gZWxzZSB7
CisgICAgICAgIHRoaXMuZW1pdE9iamVjdCh2YWx1ZSk7CisgICAgICB9CisgICAgICBkZWxldGUg
dmFsdWUuX19KYXNtaW5lX2JlZW5faGVyZV9iZWZvcmVfXzsKKyAgICB9IGVsc2UgeworICAgICAg
dGhpcy5lbWl0U2NhbGFyKHZhbHVlLnRvU3RyaW5nKCkpOworICAgIH0KKyAgfSBmaW5hbGx5IHsK
KyAgICB0aGlzLnBwTmVzdExldmVsXy0tOworICB9Cit9OworCitqYXNtaW5lLlByZXR0eVByaW50
ZXIucHJvdG90eXBlLml0ZXJhdGVPYmplY3QgPSBmdW5jdGlvbihvYmosIGZuKSB7CisgIGZvciAo
dmFyIHByb3BlcnR5IGluIG9iaikgeworICAgIGlmIChwcm9wZXJ0eSA9PSAnX19KYXNtaW5lX2Jl
ZW5faGVyZV9iZWZvcmVfXycpIGNvbnRpbnVlOworICAgIGZuKHByb3BlcnR5LCBvYmouX19sb29r
dXBHZXR0ZXJfXyA/IChvYmouX19sb29rdXBHZXR0ZXJfXyhwcm9wZXJ0eSkgIT09IGphc21pbmUu
dW5kZWZpbmVkICYmIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBv
YmouX19sb29rdXBHZXR0ZXJfXyhwcm9wZXJ0eSkgIT09IG51bGwpIDogZmFsc2UpOworICB9Cit9
OworCitqYXNtaW5lLlByZXR0eVByaW50ZXIucHJvdG90eXBlLmVtaXRBcnJheSA9IGphc21pbmUu
dW5pbXBsZW1lbnRlZE1ldGhvZF87CitqYXNtaW5lLlByZXR0eVByaW50ZXIucHJvdG90eXBlLmVt
aXRPYmplY3QgPSBqYXNtaW5lLnVuaW1wbGVtZW50ZWRNZXRob2RfOworamFzbWluZS5QcmV0dHlQ
cmludGVyLnByb3RvdHlwZS5lbWl0U2NhbGFyID0gamFzbWluZS51bmltcGxlbWVudGVkTWV0aG9k
XzsKK2phc21pbmUuUHJldHR5UHJpbnRlci5wcm90b3R5cGUuZW1pdFN0cmluZyA9IGphc21pbmUu
dW5pbXBsZW1lbnRlZE1ldGhvZF87CisKK2phc21pbmUuU3RyaW5nUHJldHR5UHJpbnRlciA9IGZ1
bmN0aW9uKCkgeworICBqYXNtaW5lLlByZXR0eVByaW50ZXIuY2FsbCh0aGlzKTsKKworICB0aGlz
LnN0cmluZyA9ICcnOworfTsKK2phc21pbmUudXRpbC5pbmhlcml0KGphc21pbmUuU3RyaW5nUHJl
dHR5UHJpbnRlciwgamFzbWluZS5QcmV0dHlQcmludGVyKTsKKworamFzbWluZS5TdHJpbmdQcmV0
dHlQcmludGVyLnByb3RvdHlwZS5lbWl0U2NhbGFyID0gZnVuY3Rpb24odmFsdWUpIHsKKyAgdGhp
cy5hcHBlbmQodmFsdWUpOworfTsKKworamFzbWluZS5TdHJpbmdQcmV0dHlQcmludGVyLnByb3Rv
dHlwZS5lbWl0U3RyaW5nID0gZnVuY3Rpb24odmFsdWUpIHsKKyAgdGhpcy5hcHBlbmQoIiciICsg
dmFsdWUgKyAiJyIpOworfTsKKworamFzbWluZS5TdHJpbmdQcmV0dHlQcmludGVyLnByb3RvdHlw
ZS5lbWl0QXJyYXkgPSBmdW5jdGlvbihhcnJheSkgeworICB0aGlzLmFwcGVuZCgnWyAnKTsKKyAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykgeworICAgIGlmIChpID4gMCkg
eworICAgICAgdGhpcy5hcHBlbmQoJywgJyk7CisgICAgfQorICAgIHRoaXMuZm9ybWF0KGFycmF5
W2ldKTsKKyAgfQorICB0aGlzLmFwcGVuZCgnIF0nKTsKK307CisKK2phc21pbmUuU3RyaW5nUHJl
dHR5UHJpbnRlci5wcm90b3R5cGUuZW1pdE9iamVjdCA9IGZ1bmN0aW9uKG9iaikgeworICB2YXIg
c2VsZiA9IHRoaXM7CisgIHRoaXMuYXBwZW5kKCd7ICcpOworICB2YXIgZmlyc3QgPSB0cnVlOwor
CisgIHRoaXMuaXRlcmF0ZU9iamVjdChvYmosIGZ1bmN0aW9uKHByb3BlcnR5LCBpc0dldHRlcikg
eworICAgIGlmIChmaXJzdCkgeworICAgICAgZmlyc3QgPSBmYWxzZTsKKyAgICB9IGVsc2Ugewor
ICAgICAgc2VsZi5hcHBlbmQoJywgJyk7CisgICAgfQorCisgICAgc2VsZi5hcHBlbmQocHJvcGVy
dHkpOworICAgIHNlbGYuYXBwZW5kKCcgOiAnKTsKKyAgICBpZiAoaXNHZXR0ZXIpIHsKKyAgICAg
IHNlbGYuYXBwZW5kKCc8Z2V0dGVyPicpOworICAgIH0gZWxzZSB7CisgICAgICBzZWxmLmZvcm1h
dChvYmpbcHJvcGVydHldKTsKKyAgICB9CisgIH0pOworCisgIHRoaXMuYXBwZW5kKCcgfScpOwor
fTsKKworamFzbWluZS5TdHJpbmdQcmV0dHlQcmludGVyLnByb3RvdHlwZS5hcHBlbmQgPSBmdW5j
dGlvbih2YWx1ZSkgeworICB0aGlzLnN0cmluZyArPSB2YWx1ZTsKK307CitqYXNtaW5lLlF1ZXVl
ID0gZnVuY3Rpb24oZW52KSB7CisgIHRoaXMuZW52ID0gZW52OworICB0aGlzLmJsb2NrcyA9IFtd
OworICB0aGlzLnJ1bm5pbmcgPSBmYWxzZTsKKyAgdGhpcy5pbmRleCA9IDA7CisgIHRoaXMub2Zm
c2V0ID0gMDsKKyAgdGhpcy5hYm9ydCA9IGZhbHNlOworfTsKKworamFzbWluZS5RdWV1ZS5wcm90
b3R5cGUuYWRkQmVmb3JlID0gZnVuY3Rpb24oYmxvY2spIHsKKyAgdGhpcy5ibG9ja3MudW5zaGlm
dChibG9jayk7Cit9OworCitqYXNtaW5lLlF1ZXVlLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbihi
bG9jaykgeworICB0aGlzLmJsb2Nrcy5wdXNoKGJsb2NrKTsKK307CisKK2phc21pbmUuUXVldWUu
cHJvdG90eXBlLmluc2VydE5leHQgPSBmdW5jdGlvbihibG9jaykgeworICB0aGlzLmJsb2Nrcy5z
cGxpY2UoKHRoaXMuaW5kZXggKyB0aGlzLm9mZnNldCArIDEpLCAwLCBibG9jayk7CisgIHRoaXMu
b2Zmc2V0Kys7Cit9OworCitqYXNtaW5lLlF1ZXVlLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9u
KG9uQ29tcGxldGUpIHsKKyAgdGhpcy5ydW5uaW5nID0gdHJ1ZTsKKyAgdGhpcy5vbkNvbXBsZXRl
ID0gb25Db21wbGV0ZTsKKyAgdGhpcy5uZXh0XygpOworfTsKKworamFzbWluZS5RdWV1ZS5wcm90
b3R5cGUuaXNSdW5uaW5nID0gZnVuY3Rpb24oKSB7CisgIHJldHVybiB0aGlzLnJ1bm5pbmc7Cit9
OworCitqYXNtaW5lLlF1ZXVlLkxPT1BfRE9OVF9SRUNVUlNFID0gdHJ1ZTsKKworamFzbWluZS5R
dWV1ZS5wcm90b3R5cGUubmV4dF8gPSBmdW5jdGlvbigpIHsKKyAgdmFyIHNlbGYgPSB0aGlzOwor
ICB2YXIgZ29BZ2FpbiA9IHRydWU7CisKKyAgd2hpbGUgKGdvQWdhaW4pIHsKKyAgICBnb0FnYWlu
ID0gZmFsc2U7CisgICAgCisgICAgaWYgKHNlbGYuaW5kZXggPCBzZWxmLmJsb2Nrcy5sZW5ndGgg
JiYgIXRoaXMuYWJvcnQpIHsKKyAgICAgIHZhciBjYWxsZWRTeW5jaHJvbm91c2x5ID0gdHJ1ZTsK
KyAgICAgIHZhciBjb21wbGV0ZWRTeW5jaHJvbm91c2x5ID0gZmFsc2U7CisKKyAgICAgIHZhciBv
bkNvbXBsZXRlID0gZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAoamFzbWluZS5RdWV1ZS5MT09Q
X0RPTlRfUkVDVVJTRSAmJiBjYWxsZWRTeW5jaHJvbm91c2x5KSB7CisgICAgICAgICAgY29tcGxl
dGVkU3luY2hyb25vdXNseSA9IHRydWU7CisgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKHNlbGYuYmxvY2tzW3NlbGYuaW5kZXhdLmFib3J0KSB7CisgICAgICAgICAg
c2VsZi5hYm9ydCA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICBzZWxmLm9mZnNldCA9IDA7
CisgICAgICAgIHNlbGYuaW5kZXgrKzsKKworICAgICAgICB2YXIgbm93ID0gbmV3IERhdGUoKS5n
ZXRUaW1lKCk7CisgICAgICAgIGlmIChzZWxmLmVudi51cGRhdGVJbnRlcnZhbCAmJiBub3cgLSBz
ZWxmLmVudi5sYXN0VXBkYXRlID4gc2VsZi5lbnYudXBkYXRlSW50ZXJ2YWwpIHsKKyAgICAgICAg
ICBzZWxmLmVudi5sYXN0VXBkYXRlID0gbm93OworICAgICAgICAgIHNlbGYuZW52LnNldFRpbWVv
dXQoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBzZWxmLm5leHRfKCk7CisgICAgICAgICAgfSwg
MCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgaWYgKGphc21pbmUuUXVldWUuTE9PUF9E
T05UX1JFQ1VSU0UgJiYgY29tcGxldGVkU3luY2hyb25vdXNseSkgeworICAgICAgICAgICAgZ29B
Z2FpbiA9IHRydWU7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNlbGYubmV4dF8o
KTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH07CisgICAgICBzZWxmLmJsb2Nrc1tz
ZWxmLmluZGV4XS5leGVjdXRlKG9uQ29tcGxldGUpOworCisgICAgICBjYWxsZWRTeW5jaHJvbm91
c2x5ID0gZmFsc2U7CisgICAgICBpZiAoY29tcGxldGVkU3luY2hyb25vdXNseSkgeworICAgICAg
ICBvbkNvbXBsZXRlKCk7CisgICAgICB9CisgICAgICAKKyAgICB9IGVsc2UgeworICAgICAgc2Vs
Zi5ydW5uaW5nID0gZmFsc2U7CisgICAgICBpZiAoc2VsZi5vbkNvbXBsZXRlKSB7CisgICAgICAg
IHNlbGYub25Db21wbGV0ZSgpOworICAgICAgfQorICAgIH0KKyAgfQorfTsKKworamFzbWluZS5R
dWV1ZS5wcm90b3R5cGUucmVzdWx0cyA9IGZ1bmN0aW9uKCkgeworICB2YXIgcmVzdWx0cyA9IG5l
dyBqYXNtaW5lLk5lc3RlZFJlc3VsdHMoKTsKKyAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmJs
b2Nrcy5sZW5ndGg7IGkrKykgeworICAgIGlmICh0aGlzLmJsb2Nrc1tpXS5yZXN1bHRzKSB7Cisg
ICAgICByZXN1bHRzLmFkZFJlc3VsdCh0aGlzLmJsb2Nrc1tpXS5yZXN1bHRzKCkpOworICAgIH0K
KyAgfQorICByZXR1cm4gcmVzdWx0czsKK307CisKKworLyoqCisgKiBSdW5uZXIKKyAqCisgKiBA
Y29uc3RydWN0b3IKKyAqIEBwYXJhbSB7amFzbWluZS5FbnZ9IGVudgorICovCitqYXNtaW5lLlJ1
bm5lciA9IGZ1bmN0aW9uKGVudikgeworICB2YXIgc2VsZiA9IHRoaXM7CisgIHNlbGYuZW52ID0g
ZW52OworICBzZWxmLnF1ZXVlID0gbmV3IGphc21pbmUuUXVldWUoZW52KTsKKyAgc2VsZi5iZWZv
cmVfID0gW107CisgIHNlbGYuYWZ0ZXJfID0gW107CisgIHNlbGYuc3VpdGVzXyA9IFtdOworfTsK
KworamFzbWluZS5SdW5uZXIucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbigpIHsKKyAgdmFy
IHNlbGYgPSB0aGlzOworICBpZiAoc2VsZi5lbnYucmVwb3J0ZXIucmVwb3J0UnVubmVyU3RhcnRp
bmcpIHsKKyAgICBzZWxmLmVudi5yZXBvcnRlci5yZXBvcnRSdW5uZXJTdGFydGluZyh0aGlzKTsK
KyAgfQorICBzZWxmLnF1ZXVlLnN0YXJ0KGZ1bmN0aW9uICgpIHsKKyAgICBzZWxmLmZpbmlzaENh
bGxiYWNrKCk7CisgIH0pOworfTsKKworamFzbWluZS5SdW5uZXIucHJvdG90eXBlLmJlZm9yZUVh
Y2ggPSBmdW5jdGlvbihiZWZvcmVFYWNoRnVuY3Rpb24pIHsKKyAgYmVmb3JlRWFjaEZ1bmN0aW9u
LnR5cGVOYW1lID0gJ2JlZm9yZUVhY2gnOworICB0aGlzLmJlZm9yZV8uc3BsaWNlKDAsMCxiZWZv
cmVFYWNoRnVuY3Rpb24pOworfTsKKworamFzbWluZS5SdW5uZXIucHJvdG90eXBlLmFmdGVyRWFj
aCA9IGZ1bmN0aW9uKGFmdGVyRWFjaEZ1bmN0aW9uKSB7CisgIGFmdGVyRWFjaEZ1bmN0aW9uLnR5
cGVOYW1lID0gJ2FmdGVyRWFjaCc7CisgIHRoaXMuYWZ0ZXJfLnNwbGljZSgwLDAsYWZ0ZXJFYWNo
RnVuY3Rpb24pOworfTsKKworCitqYXNtaW5lLlJ1bm5lci5wcm90b3R5cGUuZmluaXNoQ2FsbGJh
Y2sgPSBmdW5jdGlvbigpIHsKKyAgdGhpcy5lbnYucmVwb3J0ZXIucmVwb3J0UnVubmVyUmVzdWx0
cyh0aGlzKTsKK307CisKK2phc21pbmUuUnVubmVyLnByb3RvdHlwZS5hZGRTdWl0ZSA9IGZ1bmN0
aW9uKHN1aXRlKSB7CisgIHRoaXMuc3VpdGVzXy5wdXNoKHN1aXRlKTsKK307CisKK2phc21pbmUu
UnVubmVyLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbihibG9jaykgeworICBpZiAoYmxvY2sgaW5z
dGFuY2VvZiBqYXNtaW5lLlN1aXRlKSB7CisgICAgdGhpcy5hZGRTdWl0ZShibG9jayk7CisgIH0K
KyAgdGhpcy5xdWV1ZS5hZGQoYmxvY2spOworfTsKKworamFzbWluZS5SdW5uZXIucHJvdG90eXBl
LnNwZWNzID0gZnVuY3Rpb24gKCkgeworICB2YXIgc3VpdGVzID0gdGhpcy5zdWl0ZXMoKTsKKyAg
dmFyIHNwZWNzID0gW107CisgIGZvciAodmFyIGkgPSAwOyBpIDwgc3VpdGVzLmxlbmd0aDsgaSsr
KSB7CisgICAgc3BlY3MgPSBzcGVjcy5jb25jYXQoc3VpdGVzW2ldLnNwZWNzKCkpOworICB9Cisg
IHJldHVybiBzcGVjczsKK307CisKK2phc21pbmUuUnVubmVyLnByb3RvdHlwZS5zdWl0ZXMgPSBm
dW5jdGlvbigpIHsKKyAgcmV0dXJuIHRoaXMuc3VpdGVzXzsKK307CisKK2phc21pbmUuUnVubmVy
LnByb3RvdHlwZS50b3BMZXZlbFN1aXRlcyA9IGZ1bmN0aW9uKCkgeworICB2YXIgdG9wTGV2ZWxT
dWl0ZXMgPSBbXTsKKyAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnN1aXRlc18ubGVuZ3RoOyBp
KyspIHsKKyAgICBpZiAoIXRoaXMuc3VpdGVzX1tpXS5wYXJlbnRTdWl0ZSkgeworICAgICAgdG9w
TGV2ZWxTdWl0ZXMucHVzaCh0aGlzLnN1aXRlc19baV0pOworICAgIH0KKyAgfQorICByZXR1cm4g
dG9wTGV2ZWxTdWl0ZXM7Cit9OworCitqYXNtaW5lLlJ1bm5lci5wcm90b3R5cGUucmVzdWx0cyA9
IGZ1bmN0aW9uKCkgeworICByZXR1cm4gdGhpcy5xdWV1ZS5yZXN1bHRzKCk7Cit9OworLyoqCisg
KiBJbnRlcm5hbCByZXByZXNlbnRhdGlvbiBvZiBhIEphc21pbmUgc3BlY2lmaWNhdGlvbiwgb3Ig
dGVzdC4KKyAqCisgKiBAY29uc3RydWN0b3IKKyAqIEBwYXJhbSB7amFzbWluZS5FbnZ9IGVudgor
ICogQHBhcmFtIHtqYXNtaW5lLlN1aXRlfSBzdWl0ZQorICogQHBhcmFtIHtTdHJpbmd9IGRlc2Ny
aXB0aW9uCisgKi8KK2phc21pbmUuU3BlYyA9IGZ1bmN0aW9uKGVudiwgc3VpdGUsIGRlc2NyaXB0
aW9uKSB7CisgIGlmICghZW52KSB7CisgICAgdGhyb3cgbmV3IEVycm9yKCdqYXNtaW5lLkVudigp
IHJlcXVpcmVkJyk7CisgIH0KKyAgaWYgKCFzdWl0ZSkgeworICAgIHRocm93IG5ldyBFcnJvcign
amFzbWluZS5TdWl0ZSgpIHJlcXVpcmVkJyk7CisgIH0KKyAgdmFyIHNwZWMgPSB0aGlzOworICBz
cGVjLmlkID0gZW52Lm5leHRTcGVjSWQgPyBlbnYubmV4dFNwZWNJZCgpIDogbnVsbDsKKyAgc3Bl
Yy5lbnYgPSBlbnY7CisgIHNwZWMuc3VpdGUgPSBzdWl0ZTsKKyAgc3BlYy5kZXNjcmlwdGlvbiA9
IGRlc2NyaXB0aW9uOworICBzcGVjLnF1ZXVlID0gbmV3IGphc21pbmUuUXVldWUoZW52KTsKKwor
ICBzcGVjLmFmdGVyQ2FsbGJhY2tzID0gW107CisgIHNwZWMuc3BpZXNfID0gW107CisKKyAgc3Bl
Yy5yZXN1bHRzXyA9IG5ldyBqYXNtaW5lLk5lc3RlZFJlc3VsdHMoKTsKKyAgc3BlYy5yZXN1bHRz
Xy5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uOworICBzcGVjLm1hdGNoZXJzQ2xhc3MgPSBudWxs
OworfTsKKworamFzbWluZS5TcGVjLnByb3RvdHlwZS5nZXRGdWxsTmFtZSA9IGZ1bmN0aW9uKCkg
eworICByZXR1cm4gdGhpcy5zdWl0ZS5nZXRGdWxsTmFtZSgpICsgJyAnICsgdGhpcy5kZXNjcmlw
dGlvbiArICcuJzsKK307CisKKworamFzbWluZS5TcGVjLnByb3RvdHlwZS5yZXN1bHRzID0gZnVu
Y3Rpb24oKSB7CisgIHJldHVybiB0aGlzLnJlc3VsdHNfOworfTsKKworLyoqCisgKiBBbGwgcGFy
YW1ldGVycyBhcmUgcHJldHR5LXByaW50ZWQgYW5kIGNvbmNhdGVuYXRlZCB0b2dldGhlciwgdGhl
biB3cml0dGVuIHRvIHRoZSBzcGVjJ3Mgb3V0cHV0LgorICoKKyAqIEJlIGNhcmVmdWwgbm90IHRv
IGxlYXZlIGNhbGxzIHRvIDxjb2RlPmphc21pbmUubG9nPC9jb2RlPiBpbiBwcm9kdWN0aW9uIGNv
ZGUuCisgKi8KK2phc21pbmUuU3BlYy5wcm90b3R5cGUubG9nID0gZnVuY3Rpb24oKSB7CisgIHJl
dHVybiB0aGlzLnJlc3VsdHNfLmxvZyhhcmd1bWVudHMpOworfTsKKworamFzbWluZS5TcGVjLnBy
b3RvdHlwZS5ydW5zID0gZnVuY3Rpb24gKGZ1bmMpIHsKKyAgdmFyIGJsb2NrID0gbmV3IGphc21p
bmUuQmxvY2sodGhpcy5lbnYsIGZ1bmMsIHRoaXMpOworICB0aGlzLmFkZFRvUXVldWUoYmxvY2sp
OworICByZXR1cm4gdGhpczsKK307CisKK2phc21pbmUuU3BlYy5wcm90b3R5cGUuYWRkVG9RdWV1
ZSA9IGZ1bmN0aW9uIChibG9jaykgeworICBpZiAodGhpcy5xdWV1ZS5pc1J1bm5pbmcoKSkgewor
ICAgIHRoaXMucXVldWUuaW5zZXJ0TmV4dChibG9jayk7CisgIH0gZWxzZSB7CisgICAgdGhpcy5x
dWV1ZS5hZGQoYmxvY2spOworICB9Cit9OworCisvKioKKyAqIEBwYXJhbSB7amFzbWluZS5FeHBl
Y3RhdGlvblJlc3VsdH0gcmVzdWx0CisgKi8KK2phc21pbmUuU3BlYy5wcm90b3R5cGUuYWRkTWF0
Y2hlclJlc3VsdCA9IGZ1bmN0aW9uKHJlc3VsdCkgeworICB0aGlzLnJlc3VsdHNfLmFkZFJlc3Vs
dChyZXN1bHQpOworfTsKKworamFzbWluZS5TcGVjLnByb3RvdHlwZS5leHBlY3QgPSBmdW5jdGlv
bihhY3R1YWwpIHsKKyAgdmFyIHBvc2l0aXZlID0gbmV3ICh0aGlzLmdldE1hdGNoZXJzQ2xhc3Nf
KCkpKHRoaXMuZW52LCBhY3R1YWwsIHRoaXMpOworICBwb3NpdGl2ZS5ub3QgPSBuZXcgKHRoaXMu
Z2V0TWF0Y2hlcnNDbGFzc18oKSkodGhpcy5lbnYsIGFjdHVhbCwgdGhpcywgdHJ1ZSk7CisgIHJl
dHVybiBwb3NpdGl2ZTsKK307CisKKy8qKgorICogV2FpdHMgYSBmaXhlZCB0aW1lIHBlcmlvZCBi
ZWZvcmUgbW92aW5nIHRvIHRoZSBuZXh0IGJsb2NrLgorICoKKyAqIEBkZXByZWNhdGVkIFVzZSB3
YWl0c0ZvcigpIGluc3RlYWQKKyAqIEBwYXJhbSB7TnVtYmVyfSB0aW1lb3V0IG1pbGxpc2Vjb25k
cyB0byB3YWl0CisgKi8KK2phc21pbmUuU3BlYy5wcm90b3R5cGUud2FpdHMgPSBmdW5jdGlvbih0
aW1lb3V0KSB7CisgIHZhciB3YWl0c0Z1bmMgPSBuZXcgamFzbWluZS5XYWl0c0Jsb2NrKHRoaXMu
ZW52LCB0aW1lb3V0LCB0aGlzKTsKKyAgdGhpcy5hZGRUb1F1ZXVlKHdhaXRzRnVuYyk7CisgIHJl
dHVybiB0aGlzOworfTsKKworLyoqCisgKiBXYWl0cyBmb3IgdGhlIGxhdGNoRnVuY3Rpb24gdG8g
cmV0dXJuIHRydWUgYmVmb3JlIHByb2NlZWRpbmcgdG8gdGhlIG5leHQgYmxvY2suCisgKgorICog
QHBhcmFtIHtGdW5jdGlvbn0gbGF0Y2hGdW5jdGlvbgorICogQHBhcmFtIHtTdHJpbmd9IG9wdGlv
bmFsX3RpbWVvdXRNZXNzYWdlCisgKiBAcGFyYW0ge051bWJlcn0gb3B0aW9uYWxfdGltZW91dAor
ICovCitqYXNtaW5lLlNwZWMucHJvdG90eXBlLndhaXRzRm9yID0gZnVuY3Rpb24obGF0Y2hGdW5j
dGlvbiwgb3B0aW9uYWxfdGltZW91dE1lc3NhZ2UsIG9wdGlvbmFsX3RpbWVvdXQpIHsKKyAgdmFy
IGxhdGNoRnVuY3Rpb25fID0gbnVsbDsKKyAgdmFyIG9wdGlvbmFsX3RpbWVvdXRNZXNzYWdlXyA9
IG51bGw7CisgIHZhciBvcHRpb25hbF90aW1lb3V0XyA9IG51bGw7CisKKyAgZm9yICh2YXIgaSA9
IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsKKyAgICB2YXIgYXJnID0gYXJndW1lbnRz
W2ldOworICAgIHN3aXRjaCAodHlwZW9mIGFyZykgeworICAgICAgY2FzZSAnZnVuY3Rpb24nOgor
ICAgICAgICBsYXRjaEZ1bmN0aW9uXyA9IGFyZzsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNl
ICdzdHJpbmcnOgorICAgICAgICBvcHRpb25hbF90aW1lb3V0TWVzc2FnZV8gPSBhcmc7CisgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSAnbnVtYmVyJzoKKyAgICAgICAgb3B0aW9uYWxfdGltZW91
dF8gPSBhcmc7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgfQorCisgIHZhciB3YWl0c0ZvckZ1
bmMgPSBuZXcgamFzbWluZS5XYWl0c0ZvckJsb2NrKHRoaXMuZW52LCBvcHRpb25hbF90aW1lb3V0
XywgbGF0Y2hGdW5jdGlvbl8sIG9wdGlvbmFsX3RpbWVvdXRNZXNzYWdlXywgdGhpcyk7CisgIHRo
aXMuYWRkVG9RdWV1ZSh3YWl0c0ZvckZ1bmMpOworICByZXR1cm4gdGhpczsKK307CisKK2phc21p
bmUuU3BlYy5wcm90b3R5cGUuZmFpbCA9IGZ1bmN0aW9uIChlKSB7CisgIHZhciBleHBlY3RhdGlv
blJlc3VsdCA9IG5ldyBqYXNtaW5lLkV4cGVjdGF0aW9uUmVzdWx0KHsKKyAgICBwYXNzZWQ6IGZh
bHNlLAorICAgIG1lc3NhZ2U6IGUgPyBqYXNtaW5lLnV0aWwuZm9ybWF0RXhjZXB0aW9uKGUpIDog
J0V4Y2VwdGlvbicsCisgICAgdHJhY2U6IHsgc3RhY2s6IGUuc3RhY2sgfQorICB9KTsKKyAgdGhp
cy5yZXN1bHRzXy5hZGRSZXN1bHQoZXhwZWN0YXRpb25SZXN1bHQpOworfTsKKworamFzbWluZS5T
cGVjLnByb3RvdHlwZS5nZXRNYXRjaGVyc0NsYXNzXyA9IGZ1bmN0aW9uKCkgeworICByZXR1cm4g
dGhpcy5tYXRjaGVyc0NsYXNzIHx8IHRoaXMuZW52Lm1hdGNoZXJzQ2xhc3M7Cit9OworCitqYXNt
aW5lLlNwZWMucHJvdG90eXBlLmFkZE1hdGNoZXJzID0gZnVuY3Rpb24obWF0Y2hlcnNQcm90b3R5
cGUpIHsKKyAgdmFyIHBhcmVudCA9IHRoaXMuZ2V0TWF0Y2hlcnNDbGFzc18oKTsKKyAgdmFyIG5l
d01hdGNoZXJzQ2xhc3MgPSBmdW5jdGlvbigpIHsKKyAgICBwYXJlbnQuYXBwbHkodGhpcywgYXJn
dW1lbnRzKTsKKyAgfTsKKyAgamFzbWluZS51dGlsLmluaGVyaXQobmV3TWF0Y2hlcnNDbGFzcywg
cGFyZW50KTsKKyAgamFzbWluZS5NYXRjaGVycy53cmFwSW50b18obWF0Y2hlcnNQcm90b3R5cGUs
IG5ld01hdGNoZXJzQ2xhc3MpOworICB0aGlzLm1hdGNoZXJzQ2xhc3MgPSBuZXdNYXRjaGVyc0Ns
YXNzOworfTsKKworamFzbWluZS5TcGVjLnByb3RvdHlwZS5maW5pc2hDYWxsYmFjayA9IGZ1bmN0
aW9uKCkgeworICB0aGlzLmVudi5yZXBvcnRlci5yZXBvcnRTcGVjUmVzdWx0cyh0aGlzKTsKK307
CisKK2phc21pbmUuU3BlYy5wcm90b3R5cGUuZmluaXNoID0gZnVuY3Rpb24ob25Db21wbGV0ZSkg
eworICB0aGlzLnJlbW92ZUFsbFNwaWVzKCk7CisgIHRoaXMuZmluaXNoQ2FsbGJhY2soKTsKKyAg
aWYgKG9uQ29tcGxldGUpIHsKKyAgICBvbkNvbXBsZXRlKCk7CisgIH0KK307CisKK2phc21pbmUu
U3BlYy5wcm90b3R5cGUuYWZ0ZXIgPSBmdW5jdGlvbihkb0FmdGVyKSB7CisgIGlmICh0aGlzLnF1
ZXVlLmlzUnVubmluZygpKSB7CisgICAgdGhpcy5xdWV1ZS5hZGQobmV3IGphc21pbmUuQmxvY2so
dGhpcy5lbnYsIGRvQWZ0ZXIsIHRoaXMpKTsKKyAgfSBlbHNlIHsKKyAgICB0aGlzLmFmdGVyQ2Fs
bGJhY2tzLnVuc2hpZnQoZG9BZnRlcik7CisgIH0KK307CisKK2phc21pbmUuU3BlYy5wcm90b3R5
cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uKG9uQ29tcGxldGUpIHsKKyAgdmFyIHNwZWMgPSB0aGlzOwor
ICBpZiAoIXNwZWMuZW52LnNwZWNGaWx0ZXIoc3BlYykpIHsKKyAgICBzcGVjLnJlc3VsdHNfLnNr
aXBwZWQgPSB0cnVlOworICAgIHNwZWMuZmluaXNoKG9uQ29tcGxldGUpOworICAgIHJldHVybjsK
KyAgfQorCisgIHRoaXMuZW52LnJlcG9ydGVyLnJlcG9ydFNwZWNTdGFydGluZyh0aGlzKTsKKwor
ICBzcGVjLmVudi5jdXJyZW50U3BlYyA9IHNwZWM7CisKKyAgc3BlYy5hZGRCZWZvcmVzQW5kQWZ0
ZXJzVG9RdWV1ZSgpOworCisgIHNwZWMucXVldWUuc3RhcnQoZnVuY3Rpb24gKCkgeworICAgIHNw
ZWMuZmluaXNoKG9uQ29tcGxldGUpOworICB9KTsKK307CisKK2phc21pbmUuU3BlYy5wcm90b3R5
cGUuYWRkQmVmb3Jlc0FuZEFmdGVyc1RvUXVldWUgPSBmdW5jdGlvbigpIHsKKyAgdmFyIHJ1bm5l
ciA9IHRoaXMuZW52LmN1cnJlbnRSdW5uZXIoKTsKKyAgdmFyIGk7CisKKyAgZm9yICh2YXIgc3Vp
dGUgPSB0aGlzLnN1aXRlOyBzdWl0ZTsgc3VpdGUgPSBzdWl0ZS5wYXJlbnRTdWl0ZSkgeworICAg
IGZvciAoaSA9IDA7IGkgPCBzdWl0ZS5iZWZvcmVfLmxlbmd0aDsgaSsrKSB7CisgICAgICB0aGlz
LnF1ZXVlLmFkZEJlZm9yZShuZXcgamFzbWluZS5CbG9jayh0aGlzLmVudiwgc3VpdGUuYmVmb3Jl
X1tpXSwgdGhpcykpOworICAgIH0KKyAgfQorICBmb3IgKGkgPSAwOyBpIDwgcnVubmVyLmJlZm9y
ZV8ubGVuZ3RoOyBpKyspIHsKKyAgICB0aGlzLnF1ZXVlLmFkZEJlZm9yZShuZXcgamFzbWluZS5C
bG9jayh0aGlzLmVudiwgcnVubmVyLmJlZm9yZV9baV0sIHRoaXMpKTsKKyAgfQorICBmb3IgKGkg
PSAwOyBpIDwgdGhpcy5hZnRlckNhbGxiYWNrcy5sZW5ndGg7IGkrKykgeworICAgIHRoaXMucXVl
dWUuYWRkKG5ldyBqYXNtaW5lLkJsb2NrKHRoaXMuZW52LCB0aGlzLmFmdGVyQ2FsbGJhY2tzW2ld
LCB0aGlzKSk7CisgIH0KKyAgZm9yIChzdWl0ZSA9IHRoaXMuc3VpdGU7IHN1aXRlOyBzdWl0ZSA9
IHN1aXRlLnBhcmVudFN1aXRlKSB7CisgICAgZm9yIChpID0gMDsgaSA8IHN1aXRlLmFmdGVyXy5s
ZW5ndGg7IGkrKykgeworICAgICAgdGhpcy5xdWV1ZS5hZGQobmV3IGphc21pbmUuQmxvY2sodGhp
cy5lbnYsIHN1aXRlLmFmdGVyX1tpXSwgdGhpcykpOworICAgIH0KKyAgfQorICBmb3IgKGkgPSAw
OyBpIDwgcnVubmVyLmFmdGVyXy5sZW5ndGg7IGkrKykgeworICAgIHRoaXMucXVldWUuYWRkKG5l
dyBqYXNtaW5lLkJsb2NrKHRoaXMuZW52LCBydW5uZXIuYWZ0ZXJfW2ldLCB0aGlzKSk7CisgIH0K
K307CisKK2phc21pbmUuU3BlYy5wcm90b3R5cGUuZXhwbG9kZXMgPSBmdW5jdGlvbigpIHsKKyAg
dGhyb3cgJ2V4cGxvZGVzIGZ1bmN0aW9uIHNob3VsZCBub3QgaGF2ZSBiZWVuIGNhbGxlZCc7Cit9
OworCitqYXNtaW5lLlNwZWMucHJvdG90eXBlLnNweU9uID0gZnVuY3Rpb24ob2JqLCBtZXRob2RO
YW1lLCBpZ25vcmVNZXRob2REb2VzbnRFeGlzdCkgeworICBpZiAob2JqID09IGphc21pbmUudW5k
ZWZpbmVkKSB7CisgICAgdGhyb3cgInNweU9uIGNvdWxkIG5vdCBmaW5kIGFuIG9iamVjdCB0byBz
cHkgdXBvbiBmb3IgIiArIG1ldGhvZE5hbWUgKyAiKCkiOworICB9CisKKyAgaWYgKCFpZ25vcmVN
ZXRob2REb2VzbnRFeGlzdCAmJiBvYmpbbWV0aG9kTmFtZV0gPT09IGphc21pbmUudW5kZWZpbmVk
KSB7CisgICAgdGhyb3cgbWV0aG9kTmFtZSArICcoKSBtZXRob2QgZG9lcyBub3QgZXhpc3QnOwor
ICB9CisKKyAgaWYgKCFpZ25vcmVNZXRob2REb2VzbnRFeGlzdCAmJiBvYmpbbWV0aG9kTmFtZV0g
JiYgb2JqW21ldGhvZE5hbWVdLmlzU3B5KSB7CisgICAgdGhyb3cgbmV3IEVycm9yKG1ldGhvZE5h
bWUgKyAnIGhhcyBhbHJlYWR5IGJlZW4gc3BpZWQgdXBvbicpOworICB9CisKKyAgdmFyIHNweU9i
aiA9IGphc21pbmUuY3JlYXRlU3B5KG1ldGhvZE5hbWUpOworCisgIHRoaXMuc3BpZXNfLnB1c2go
c3B5T2JqKTsKKyAgc3B5T2JqLmJhc2VPYmogPSBvYmo7CisgIHNweU9iai5tZXRob2ROYW1lID0g
bWV0aG9kTmFtZTsKKyAgc3B5T2JqLm9yaWdpbmFsVmFsdWUgPSBvYmpbbWV0aG9kTmFtZV07CisK
KyAgb2JqW21ldGhvZE5hbWVdID0gc3B5T2JqOworCisgIHJldHVybiBzcHlPYmo7Cit9OworCitq
YXNtaW5lLlNwZWMucHJvdG90eXBlLnJlbW92ZUFsbFNwaWVzID0gZnVuY3Rpb24oKSB7CisgIGZv
ciAodmFyIGkgPSAwOyBpIDwgdGhpcy5zcGllc18ubGVuZ3RoOyBpKyspIHsKKyAgICB2YXIgc3B5
ID0gdGhpcy5zcGllc19baV07CisgICAgc3B5LmJhc2VPYmpbc3B5Lm1ldGhvZE5hbWVdID0gc3B5
Lm9yaWdpbmFsVmFsdWU7CisgIH0KKyAgdGhpcy5zcGllc18gPSBbXTsKK307CisKKy8qKgorICog
SW50ZXJuYWwgcmVwcmVzZW50YXRpb24gb2YgYSBKYXNtaW5lIHN1aXRlLgorICoKKyAqIEBjb25z
dHJ1Y3RvcgorICogQHBhcmFtIHtqYXNtaW5lLkVudn0gZW52CisgKiBAcGFyYW0ge1N0cmluZ30g
ZGVzY3JpcHRpb24KKyAqIEBwYXJhbSB7RnVuY3Rpb259IHNwZWNEZWZpbml0aW9ucworICogQHBh
cmFtIHtqYXNtaW5lLlN1aXRlfSBwYXJlbnRTdWl0ZQorICovCitqYXNtaW5lLlN1aXRlID0gZnVu
Y3Rpb24oZW52LCBkZXNjcmlwdGlvbiwgc3BlY0RlZmluaXRpb25zLCBwYXJlbnRTdWl0ZSkgewor
ICB2YXIgc2VsZiA9IHRoaXM7CisgIHNlbGYuaWQgPSBlbnYubmV4dFN1aXRlSWQgPyBlbnYubmV4
dFN1aXRlSWQoKSA6IG51bGw7CisgIHNlbGYuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjsKKyAg
c2VsZi5xdWV1ZSA9IG5ldyBqYXNtaW5lLlF1ZXVlKGVudik7CisgIHNlbGYucGFyZW50U3VpdGUg
PSBwYXJlbnRTdWl0ZTsKKyAgc2VsZi5lbnYgPSBlbnY7CisgIHNlbGYuYmVmb3JlXyA9IFtdOwor
ICBzZWxmLmFmdGVyXyA9IFtdOworICBzZWxmLmNoaWxkcmVuXyA9IFtdOworICBzZWxmLnN1aXRl
c18gPSBbXTsKKyAgc2VsZi5zcGVjc18gPSBbXTsKK307CisKK2phc21pbmUuU3VpdGUucHJvdG90
eXBlLmdldEZ1bGxOYW1lID0gZnVuY3Rpb24oKSB7CisgIHZhciBmdWxsTmFtZSA9IHRoaXMuZGVz
Y3JpcHRpb247CisgIGZvciAodmFyIHBhcmVudFN1aXRlID0gdGhpcy5wYXJlbnRTdWl0ZTsgcGFy
ZW50U3VpdGU7IHBhcmVudFN1aXRlID0gcGFyZW50U3VpdGUucGFyZW50U3VpdGUpIHsKKyAgICBm
dWxsTmFtZSA9IHBhcmVudFN1aXRlLmRlc2NyaXB0aW9uICsgJyAnICsgZnVsbE5hbWU7CisgIH0K
KyAgcmV0dXJuIGZ1bGxOYW1lOworfTsKKworamFzbWluZS5TdWl0ZS5wcm90b3R5cGUuZmluaXNo
ID0gZnVuY3Rpb24ob25Db21wbGV0ZSkgeworICB0aGlzLmVudi5yZXBvcnRlci5yZXBvcnRTdWl0
ZVJlc3VsdHModGhpcyk7CisgIHRoaXMuZmluaXNoZWQgPSB0cnVlOworICBpZiAodHlwZW9mKG9u
Q29tcGxldGUpID09ICdmdW5jdGlvbicpIHsKKyAgICBvbkNvbXBsZXRlKCk7CisgIH0KK307CisK
K2phc21pbmUuU3VpdGUucHJvdG90eXBlLmJlZm9yZUVhY2ggPSBmdW5jdGlvbihiZWZvcmVFYWNo
RnVuY3Rpb24pIHsKKyAgYmVmb3JlRWFjaEZ1bmN0aW9uLnR5cGVOYW1lID0gJ2JlZm9yZUVhY2gn
OworICB0aGlzLmJlZm9yZV8udW5zaGlmdChiZWZvcmVFYWNoRnVuY3Rpb24pOworfTsKKworamFz
bWluZS5TdWl0ZS5wcm90b3R5cGUuYWZ0ZXJFYWNoID0gZnVuY3Rpb24oYWZ0ZXJFYWNoRnVuY3Rp
b24pIHsKKyAgYWZ0ZXJFYWNoRnVuY3Rpb24udHlwZU5hbWUgPSAnYWZ0ZXJFYWNoJzsKKyAgdGhp
cy5hZnRlcl8udW5zaGlmdChhZnRlckVhY2hGdW5jdGlvbik7Cit9OworCitqYXNtaW5lLlN1aXRl
LnByb3RvdHlwZS5yZXN1bHRzID0gZnVuY3Rpb24oKSB7CisgIHJldHVybiB0aGlzLnF1ZXVlLnJl
c3VsdHMoKTsKK307CisKK2phc21pbmUuU3VpdGUucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uKHN1
aXRlT3JTcGVjKSB7CisgIHRoaXMuY2hpbGRyZW5fLnB1c2goc3VpdGVPclNwZWMpOworICBpZiAo
c3VpdGVPclNwZWMgaW5zdGFuY2VvZiBqYXNtaW5lLlN1aXRlKSB7CisgICAgdGhpcy5zdWl0ZXNf
LnB1c2goc3VpdGVPclNwZWMpOworICAgIHRoaXMuZW52LmN1cnJlbnRSdW5uZXIoKS5hZGRTdWl0
ZShzdWl0ZU9yU3BlYyk7CisgIH0gZWxzZSB7CisgICAgdGhpcy5zcGVjc18ucHVzaChzdWl0ZU9y
U3BlYyk7CisgIH0KKyAgdGhpcy5xdWV1ZS5hZGQoc3VpdGVPclNwZWMpOworfTsKKworamFzbWlu
ZS5TdWl0ZS5wcm90b3R5cGUuc3BlY3MgPSBmdW5jdGlvbigpIHsKKyAgcmV0dXJuIHRoaXMuc3Bl
Y3NfOworfTsKKworamFzbWluZS5TdWl0ZS5wcm90b3R5cGUuc3VpdGVzID0gZnVuY3Rpb24oKSB7
CisgIHJldHVybiB0aGlzLnN1aXRlc187Cit9OworCitqYXNtaW5lLlN1aXRlLnByb3RvdHlwZS5j
aGlsZHJlbiA9IGZ1bmN0aW9uKCkgeworICByZXR1cm4gdGhpcy5jaGlsZHJlbl87Cit9OworCitq
YXNtaW5lLlN1aXRlLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24ob25Db21wbGV0ZSkgewor
ICB2YXIgc2VsZiA9IHRoaXM7CisgIHRoaXMucXVldWUuc3RhcnQoZnVuY3Rpb24gKCkgeworICAg
IHNlbGYuZmluaXNoKG9uQ29tcGxldGUpOworICB9KTsKK307CitqYXNtaW5lLldhaXRzQmxvY2sg
PSBmdW5jdGlvbihlbnYsIHRpbWVvdXQsIHNwZWMpIHsKKyAgdGhpcy50aW1lb3V0ID0gdGltZW91
dDsKKyAgamFzbWluZS5CbG9jay5jYWxsKHRoaXMsIGVudiwgbnVsbCwgc3BlYyk7Cit9OworCitq
YXNtaW5lLnV0aWwuaW5oZXJpdChqYXNtaW5lLldhaXRzQmxvY2ssIGphc21pbmUuQmxvY2spOwor
CitqYXNtaW5lLldhaXRzQmxvY2sucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbiAob25Db21w
bGV0ZSkgeworICBpZiAoamFzbWluZS5WRVJCT1NFKSB7CisgICAgdGhpcy5lbnYucmVwb3J0ZXIu
bG9nKCc+PiBKYXNtaW5lIHdhaXRpbmcgZm9yICcgKyB0aGlzLnRpbWVvdXQgKyAnIG1zLi4uJyk7
CisgIH0KKyAgdGhpcy5lbnYuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CisgICAgb25Db21wbGV0
ZSgpOworICB9LCB0aGlzLnRpbWVvdXQpOworfTsKKy8qKgorICogQSBibG9jayB3aGljaCB3YWl0
cyBmb3Igc29tZSBjb25kaXRpb24gdG8gYmVjb21lIHRydWUsIHdpdGggdGltZW91dC4KKyAqCisg
KiBAY29uc3RydWN0b3IKKyAqIEBleHRlbmRzIGphc21pbmUuQmxvY2sKKyAqIEBwYXJhbSB7amFz
bWluZS5FbnZ9IGVudiBUaGUgSmFzbWluZSBlbnZpcm9ubWVudC4KKyAqIEBwYXJhbSB7TnVtYmVy
fSB0aW1lb3V0IFRoZSBtYXhpbXVtIHRpbWUgaW4gbWlsbGlzZWNvbmRzIHRvIHdhaXQgZm9yIHRo
ZSBjb25kaXRpb24gdG8gYmVjb21lIHRydWUuCisgKiBAcGFyYW0ge0Z1bmN0aW9ufSBsYXRjaEZ1
bmN0aW9uIEEgZnVuY3Rpb24gd2hpY2ggcmV0dXJucyB0cnVlIHdoZW4gdGhlIGRlc2lyZWQgY29u
ZGl0aW9uIGhhcyBiZWVuIG1ldC4KKyAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlIFRoZSBtZXNz
YWdlIHRvIGRpc3BsYXkgaWYgdGhlIGRlc2lyZWQgY29uZGl0aW9uIGhhc24ndCBiZWVuIG1ldCB3
aXRoaW4gdGhlIGdpdmVuIHRpbWUgcGVyaW9kLgorICogQHBhcmFtIHtqYXNtaW5lLlNwZWN9IHNw
ZWMgVGhlIEphc21pbmUgc3BlYy4KKyAqLworamFzbWluZS5XYWl0c0ZvckJsb2NrID0gZnVuY3Rp
b24oZW52LCB0aW1lb3V0LCBsYXRjaEZ1bmN0aW9uLCBtZXNzYWdlLCBzcGVjKSB7CisgIHRoaXMu
dGltZW91dCA9IHRpbWVvdXQgfHwgZW52LmRlZmF1bHRUaW1lb3V0SW50ZXJ2YWw7CisgIHRoaXMu
bGF0Y2hGdW5jdGlvbiA9IGxhdGNoRnVuY3Rpb247CisgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7
CisgIHRoaXMudG90YWxUaW1lU3BlbnRXYWl0aW5nRm9yTGF0Y2ggPSAwOworICBqYXNtaW5lLkJs
b2NrLmNhbGwodGhpcywgZW52LCBudWxsLCBzcGVjKTsKK307CitqYXNtaW5lLnV0aWwuaW5oZXJp
dChqYXNtaW5lLldhaXRzRm9yQmxvY2ssIGphc21pbmUuQmxvY2spOworCitqYXNtaW5lLldhaXRz
Rm9yQmxvY2suVElNRU9VVF9JTkNSRU1FTlQgPSAxMDsKKworamFzbWluZS5XYWl0c0ZvckJsb2Nr
LnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24ob25Db21wbGV0ZSkgeworICBpZiAoamFzbWlu
ZS5WRVJCT1NFKSB7CisgICAgdGhpcy5lbnYucmVwb3J0ZXIubG9nKCc+PiBKYXNtaW5lIHdhaXRp
bmcgZm9yICcgKyAodGhpcy5tZXNzYWdlIHx8ICdzb21ldGhpbmcgdG8gaGFwcGVuJykpOworICB9
CisgIHZhciBsYXRjaEZ1bmN0aW9uUmVzdWx0OworICB0cnkgeworICAgIGxhdGNoRnVuY3Rpb25S
ZXN1bHQgPSB0aGlzLmxhdGNoRnVuY3Rpb24uYXBwbHkodGhpcy5zcGVjKTsKKyAgfSBjYXRjaCAo
ZSkgeworICAgIHRoaXMuc3BlYy5mYWlsKGUpOworICAgIG9uQ29tcGxldGUoKTsKKyAgICByZXR1
cm47CisgIH0KKworICBpZiAobGF0Y2hGdW5jdGlvblJlc3VsdCkgeworICAgIG9uQ29tcGxldGUo
KTsKKyAgfSBlbHNlIGlmICh0aGlzLnRvdGFsVGltZVNwZW50V2FpdGluZ0ZvckxhdGNoID49IHRo
aXMudGltZW91dCkgeworICAgIHZhciBtZXNzYWdlID0gJ3RpbWVkIG91dCBhZnRlciAnICsgdGhp
cy50aW1lb3V0ICsgJyBtc2VjIHdhaXRpbmcgZm9yICcgKyAodGhpcy5tZXNzYWdlIHx8ICdzb21l
dGhpbmcgdG8gaGFwcGVuJyk7CisgICAgdGhpcy5zcGVjLmZhaWwoeworICAgICAgbmFtZTogJ3Rp
bWVvdXQnLAorICAgICAgbWVzc2FnZTogbWVzc2FnZQorICAgIH0pOworCisgICAgdGhpcy5hYm9y
dCA9IHRydWU7CisgICAgb25Db21wbGV0ZSgpOworICB9IGVsc2UgeworICAgIHRoaXMudG90YWxU
aW1lU3BlbnRXYWl0aW5nRm9yTGF0Y2ggKz0gamFzbWluZS5XYWl0c0ZvckJsb2NrLlRJTUVPVVRf
SU5DUkVNRU5UOworICAgIHZhciBzZWxmID0gdGhpczsKKyAgICB0aGlzLmVudi5zZXRUaW1lb3V0
KGZ1bmN0aW9uKCkgeworICAgICAgc2VsZi5leGVjdXRlKG9uQ29tcGxldGUpOworICAgIH0sIGph
c21pbmUuV2FpdHNGb3JCbG9jay5USU1FT1VUX0lOQ1JFTUVOVCk7CisgIH0KK307CisvLyBNb2Nr
IHNldFRpbWVvdXQsIGNsZWFyVGltZW91dAorLy8gQ29udHJpYnV0ZWQgYnkgUGl2b3RhbCBDb21w
dXRlciBTeXN0ZW1zLCB3d3cucGl2b3RhbHNmLmNvbQorCitqYXNtaW5lLkZha2VUaW1lciA9IGZ1
bmN0aW9uKCkgeworICB0aGlzLnJlc2V0KCk7CisKKyAgdmFyIHNlbGYgPSB0aGlzOworICBzZWxm
LnNldFRpbWVvdXQgPSBmdW5jdGlvbihmdW5jVG9DYWxsLCBtaWxsaXMpIHsKKyAgICBzZWxmLnRp
bWVvdXRzTWFkZSsrOworICAgIHNlbGYuc2NoZWR1bGVGdW5jdGlvbihzZWxmLnRpbWVvdXRzTWFk
ZSwgZnVuY1RvQ2FsbCwgbWlsbGlzLCBmYWxzZSk7CisgICAgcmV0dXJuIHNlbGYudGltZW91dHNN
YWRlOworICB9OworCisgIHNlbGYuc2V0SW50ZXJ2YWwgPSBmdW5jdGlvbihmdW5jVG9DYWxsLCBt
aWxsaXMpIHsKKyAgICBzZWxmLnRpbWVvdXRzTWFkZSsrOworICAgIHNlbGYuc2NoZWR1bGVGdW5j
dGlvbihzZWxmLnRpbWVvdXRzTWFkZSwgZnVuY1RvQ2FsbCwgbWlsbGlzLCB0cnVlKTsKKyAgICBy
ZXR1cm4gc2VsZi50aW1lb3V0c01hZGU7CisgIH07CisKKyAgc2VsZi5jbGVhclRpbWVvdXQgPSBm
dW5jdGlvbih0aW1lb3V0S2V5KSB7CisgICAgc2VsZi5zY2hlZHVsZWRGdW5jdGlvbnNbdGltZW91
dEtleV0gPSBqYXNtaW5lLnVuZGVmaW5lZDsKKyAgfTsKKworICBzZWxmLmNsZWFySW50ZXJ2YWwg
PSBmdW5jdGlvbih0aW1lb3V0S2V5KSB7CisgICAgc2VsZi5zY2hlZHVsZWRGdW5jdGlvbnNbdGlt
ZW91dEtleV0gPSBqYXNtaW5lLnVuZGVmaW5lZDsKKyAgfTsKKworfTsKKworamFzbWluZS5GYWtl
VGltZXIucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24oKSB7CisgIHRoaXMudGltZW91dHNNYWRl
ID0gMDsKKyAgdGhpcy5zY2hlZHVsZWRGdW5jdGlvbnMgPSB7fTsKKyAgdGhpcy5ub3dNaWxsaXMg
PSAwOworfTsKKworamFzbWluZS5GYWtlVGltZXIucHJvdG90eXBlLnRpY2sgPSBmdW5jdGlvbiht
aWxsaXMpIHsKKyAgdmFyIG9sZE1pbGxpcyA9IHRoaXMubm93TWlsbGlzOworICB2YXIgbmV3TWls
bGlzID0gb2xkTWlsbGlzICsgbWlsbGlzOworICB0aGlzLnJ1bkZ1bmN0aW9uc1dpdGhpblJhbmdl
KG9sZE1pbGxpcywgbmV3TWlsbGlzKTsKKyAgdGhpcy5ub3dNaWxsaXMgPSBuZXdNaWxsaXM7Cit9
OworCitqYXNtaW5lLkZha2VUaW1lci5wcm90b3R5cGUucnVuRnVuY3Rpb25zV2l0aGluUmFuZ2Ug
PSBmdW5jdGlvbihvbGRNaWxsaXMsIG5vd01pbGxpcykgeworICB2YXIgc2NoZWR1bGVkRnVuYzsK
KyAgdmFyIGZ1bmNzVG9SdW4gPSBbXTsKKyAgZm9yICh2YXIgdGltZW91dEtleSBpbiB0aGlzLnNj
aGVkdWxlZEZ1bmN0aW9ucykgeworICAgIHNjaGVkdWxlZEZ1bmMgPSB0aGlzLnNjaGVkdWxlZEZ1
bmN0aW9uc1t0aW1lb3V0S2V5XTsKKyAgICBpZiAoc2NoZWR1bGVkRnVuYyAhPSBqYXNtaW5lLnVu
ZGVmaW5lZCAmJgorICAgICAgICBzY2hlZHVsZWRGdW5jLnJ1bkF0TWlsbGlzID49IG9sZE1pbGxp
cyAmJgorICAgICAgICBzY2hlZHVsZWRGdW5jLnJ1bkF0TWlsbGlzIDw9IG5vd01pbGxpcykgewor
ICAgICAgZnVuY3NUb1J1bi5wdXNoKHNjaGVkdWxlZEZ1bmMpOworICAgICAgdGhpcy5zY2hlZHVs
ZWRGdW5jdGlvbnNbdGltZW91dEtleV0gPSBqYXNtaW5lLnVuZGVmaW5lZDsKKyAgICB9CisgIH0K
KworICBpZiAoZnVuY3NUb1J1bi5sZW5ndGggPiAwKSB7CisgICAgZnVuY3NUb1J1bi5zb3J0KGZ1
bmN0aW9uKGEsIGIpIHsKKyAgICAgIHJldHVybiBhLnJ1bkF0TWlsbGlzIC0gYi5ydW5BdE1pbGxp
czsKKyAgICB9KTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZ1bmNzVG9SdW4ubGVuZ3RoOyAr
K2kpIHsKKyAgICAgIHRyeSB7CisgICAgICAgIHZhciBmdW5jVG9SdW4gPSBmdW5jc1RvUnVuW2ld
OworICAgICAgICB0aGlzLm5vd01pbGxpcyA9IGZ1bmNUb1J1bi5ydW5BdE1pbGxpczsKKyAgICAg
ICAgZnVuY1RvUnVuLmZ1bmNUb0NhbGwoKTsKKyAgICAgICAgaWYgKGZ1bmNUb1J1bi5yZWN1cnJp
bmcpIHsKKyAgICAgICAgICB0aGlzLnNjaGVkdWxlRnVuY3Rpb24oZnVuY1RvUnVuLnRpbWVvdXRL
ZXksCisgICAgICAgICAgICAgIGZ1bmNUb1J1bi5mdW5jVG9DYWxsLAorICAgICAgICAgICAgICBm
dW5jVG9SdW4ubWlsbGlzLAorICAgICAgICAgICAgICB0cnVlKTsKKyAgICAgICAgfQorICAgICAg
fSBjYXRjaChlKSB7CisgICAgICB9CisgICAgfQorICAgIHRoaXMucnVuRnVuY3Rpb25zV2l0aGlu
UmFuZ2Uob2xkTWlsbGlzLCBub3dNaWxsaXMpOworICB9Cit9OworCitqYXNtaW5lLkZha2VUaW1l
ci5wcm90b3R5cGUuc2NoZWR1bGVGdW5jdGlvbiA9IGZ1bmN0aW9uKHRpbWVvdXRLZXksIGZ1bmNU
b0NhbGwsIG1pbGxpcywgcmVjdXJyaW5nKSB7CisgIHRoaXMuc2NoZWR1bGVkRnVuY3Rpb25zW3Rp
bWVvdXRLZXldID0geworICAgIHJ1bkF0TWlsbGlzOiB0aGlzLm5vd01pbGxpcyArIG1pbGxpcywK
KyAgICBmdW5jVG9DYWxsOiBmdW5jVG9DYWxsLAorICAgIHJlY3VycmluZzogcmVjdXJyaW5nLAor
ICAgIHRpbWVvdXRLZXk6IHRpbWVvdXRLZXksCisgICAgbWlsbGlzOiBtaWxsaXMKKyAgfTsKK307
CisKKy8qKgorICogQG5hbWVzcGFjZQorICovCitqYXNtaW5lLkNsb2NrID0geworICBkZWZhdWx0
RmFrZVRpbWVyOiBuZXcgamFzbWluZS5GYWtlVGltZXIoKSwKKworICByZXNldDogZnVuY3Rpb24o
KSB7CisgICAgamFzbWluZS5DbG9jay5hc3NlcnRJbnN0YWxsZWQoKTsKKyAgICBqYXNtaW5lLkNs
b2NrLmRlZmF1bHRGYWtlVGltZXIucmVzZXQoKTsKKyAgfSwKKworICB0aWNrOiBmdW5jdGlvbiht
aWxsaXMpIHsKKyAgICBqYXNtaW5lLkNsb2NrLmFzc2VydEluc3RhbGxlZCgpOworICAgIGphc21p
bmUuQ2xvY2suZGVmYXVsdEZha2VUaW1lci50aWNrKG1pbGxpcyk7CisgIH0sCisKKyAgcnVuRnVu
Y3Rpb25zV2l0aGluUmFuZ2U6IGZ1bmN0aW9uKG9sZE1pbGxpcywgbm93TWlsbGlzKSB7CisgICAg
amFzbWluZS5DbG9jay5kZWZhdWx0RmFrZVRpbWVyLnJ1bkZ1bmN0aW9uc1dpdGhpblJhbmdlKG9s
ZE1pbGxpcywgbm93TWlsbGlzKTsKKyAgfSwKKworICBzY2hlZHVsZUZ1bmN0aW9uOiBmdW5jdGlv
bih0aW1lb3V0S2V5LCBmdW5jVG9DYWxsLCBtaWxsaXMsIHJlY3VycmluZykgeworICAgIGphc21p
bmUuQ2xvY2suZGVmYXVsdEZha2VUaW1lci5zY2hlZHVsZUZ1bmN0aW9uKHRpbWVvdXRLZXksIGZ1
bmNUb0NhbGwsIG1pbGxpcywgcmVjdXJyaW5nKTsKKyAgfSwKKworICB1c2VNb2NrOiBmdW5jdGlv
bigpIHsKKyAgICBpZiAoIWphc21pbmUuQ2xvY2suaXNJbnN0YWxsZWQoKSkgeworICAgICAgdmFy
IHNwZWMgPSBqYXNtaW5lLmdldEVudigpLmN1cnJlbnRTcGVjOworICAgICAgc3BlYy5hZnRlcihq
YXNtaW5lLkNsb2NrLnVuaW5zdGFsbE1vY2spOworCisgICAgICBqYXNtaW5lLkNsb2NrLmluc3Rh
bGxNb2NrKCk7CisgICAgfQorICB9LAorCisgIGluc3RhbGxNb2NrOiBmdW5jdGlvbigpIHsKKyAg
ICBqYXNtaW5lLkNsb2NrLmluc3RhbGxlZCA9IGphc21pbmUuQ2xvY2suZGVmYXVsdEZha2VUaW1l
cjsKKyAgfSwKKworICB1bmluc3RhbGxNb2NrOiBmdW5jdGlvbigpIHsKKyAgICBqYXNtaW5lLkNs
b2NrLmFzc2VydEluc3RhbGxlZCgpOworICAgIGphc21pbmUuQ2xvY2suaW5zdGFsbGVkID0gamFz
bWluZS5DbG9jay5yZWFsOworICB9LAorCisgIHJlYWw6IHsKKyAgICBzZXRUaW1lb3V0OiBqYXNt
aW5lLmdldEdsb2JhbCgpLnNldFRpbWVvdXQsCisgICAgY2xlYXJUaW1lb3V0OiBqYXNtaW5lLmdl
dEdsb2JhbCgpLmNsZWFyVGltZW91dCwKKyAgICBzZXRJbnRlcnZhbDogamFzbWluZS5nZXRHbG9i
YWwoKS5zZXRJbnRlcnZhbCwKKyAgICBjbGVhckludGVydmFsOiBqYXNtaW5lLmdldEdsb2JhbCgp
LmNsZWFySW50ZXJ2YWwKKyAgfSwKKworICBhc3NlcnRJbnN0YWxsZWQ6IGZ1bmN0aW9uKCkgewor
ICAgIGlmICghamFzbWluZS5DbG9jay5pc0luc3RhbGxlZCgpKSB7CisgICAgICB0aHJvdyBuZXcg
RXJyb3IoIk1vY2sgY2xvY2sgaXMgbm90IGluc3RhbGxlZCwgdXNlIGphc21pbmUuQ2xvY2sudXNl
TW9jaygpIik7CisgICAgfQorICB9LAorCisgIGlzSW5zdGFsbGVkOiBmdW5jdGlvbigpIHsKKyAg
ICByZXR1cm4gamFzbWluZS5DbG9jay5pbnN0YWxsZWQgPT0gamFzbWluZS5DbG9jay5kZWZhdWx0
RmFrZVRpbWVyOworICB9LAorCisgIGluc3RhbGxlZDogbnVsbAorfTsKK2phc21pbmUuQ2xvY2su
aW5zdGFsbGVkID0gamFzbWluZS5DbG9jay5yZWFsOworCisvL2Vsc2UgZm9yIElFIHN1cHBvcnQK
K2phc21pbmUuZ2V0R2xvYmFsKCkuc2V0VGltZW91dCA9IGZ1bmN0aW9uKGZ1bmNUb0NhbGwsIG1p
bGxpcykgeworICBpZiAoamFzbWluZS5DbG9jay5pbnN0YWxsZWQuc2V0VGltZW91dC5hcHBseSkg
eworICAgIHJldHVybiBqYXNtaW5lLkNsb2NrLmluc3RhbGxlZC5zZXRUaW1lb3V0LmFwcGx5KHRo
aXMsIGFyZ3VtZW50cyk7CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIGphc21pbmUuQ2xvY2suaW5z
dGFsbGVkLnNldFRpbWVvdXQoZnVuY1RvQ2FsbCwgbWlsbGlzKTsKKyAgfQorfTsKKworamFzbWlu
ZS5nZXRHbG9iYWwoKS5zZXRJbnRlcnZhbCA9IGZ1bmN0aW9uKGZ1bmNUb0NhbGwsIG1pbGxpcykg
eworICBpZiAoamFzbWluZS5DbG9jay5pbnN0YWxsZWQuc2V0SW50ZXJ2YWwuYXBwbHkpIHsKKyAg
ICByZXR1cm4gamFzbWluZS5DbG9jay5pbnN0YWxsZWQuc2V0SW50ZXJ2YWwuYXBwbHkodGhpcywg
YXJndW1lbnRzKTsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4gamFzbWluZS5DbG9jay5pbnN0YWxs
ZWQuc2V0SW50ZXJ2YWwoZnVuY1RvQ2FsbCwgbWlsbGlzKTsKKyAgfQorfTsKKworamFzbWluZS5n
ZXRHbG9iYWwoKS5jbGVhclRpbWVvdXQgPSBmdW5jdGlvbih0aW1lb3V0S2V5KSB7CisgIGlmIChq
YXNtaW5lLkNsb2NrLmluc3RhbGxlZC5jbGVhclRpbWVvdXQuYXBwbHkpIHsKKyAgICByZXR1cm4g
amFzbWluZS5DbG9jay5pbnN0YWxsZWQuY2xlYXJUaW1lb3V0LmFwcGx5KHRoaXMsIGFyZ3VtZW50
cyk7CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIGphc21pbmUuQ2xvY2suaW5zdGFsbGVkLmNsZWFy
VGltZW91dCh0aW1lb3V0S2V5KTsKKyAgfQorfTsKKworamFzbWluZS5nZXRHbG9iYWwoKS5jbGVh
ckludGVydmFsID0gZnVuY3Rpb24odGltZW91dEtleSkgeworICBpZiAoamFzbWluZS5DbG9jay5p
bnN0YWxsZWQuY2xlYXJUaW1lb3V0LmFwcGx5KSB7CisgICAgcmV0dXJuIGphc21pbmUuQ2xvY2su
aW5zdGFsbGVkLmNsZWFySW50ZXJ2YWwuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKyAgfSBlbHNl
IHsKKyAgICByZXR1cm4gamFzbWluZS5DbG9jay5pbnN0YWxsZWQuY2xlYXJJbnRlcnZhbCh0aW1l
b3V0S2V5KTsKKyAgfQorfTsKKworamFzbWluZS52ZXJzaW9uXz0geworICAibWFqb3IiOiAxLAor
ICAibWlub3IiOiAxLAorICAiYnVpbGQiOiAwLAorICAicmV2aXNpb24iOiAxMzA4NjE4OTQ4LAor
ICAicmVsZWFzZV9jYW5kaWRhdGUiOiAxCit9OwpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9Eb1lv
dUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2VzNS1zaGltL3Rlc3Rz
L2xpYi9qc29uMi5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJl
bmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvZXM1LXNoaW0vdGVzdHMvbGliL2pz
b24yLmpzCShyZXZpc2lvbiAwKQorKysgUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9m
bGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2VzNS1zaGltL3Rlc3RzL2xpYi9qc29uMi5q
cwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ3OCBAQAorLyoKKyAgICBodHRwOi8vd3d3LkpT
T04ub3JnL2pzb24yLmpzCisgICAgMjAwOS0wOC0xNworCisgICAgUHVibGljIERvbWFpbi4KKwor
ICAgIE5PIFdBUlJBTlRZIEVYUFJFU1NFRCBPUiBJTVBMSUVELiBVU0UgQVQgWU9VUiBPV04gUklT
Sy4KKworICAgIFNlZSBodHRwOi8vd3d3LkpTT04ub3JnL2pzLmh0bWwKKworICAgIFRoaXMgZmls
ZSBjcmVhdGVzIGEgZ2xvYmFsIEpTT04gb2JqZWN0IGNvbnRhaW5pbmcgdHdvIG1ldGhvZHM6IHN0
cmluZ2lmeQorICAgIGFuZCBwYXJzZS4KKworICAgICAgICBKU09OLnN0cmluZ2lmeSh2YWx1ZSwg
cmVwbGFjZXIsIHNwYWNlKQorICAgICAgICAgICAgdmFsdWUgICAgICAgYW55IEphdmFTY3JpcHQg
dmFsdWUsIHVzdWFsbHkgYW4gb2JqZWN0IG9yIGFycmF5LgorCisgICAgICAgICAgICByZXBsYWNl
ciAgICBhbiBvcHRpb25hbCBwYXJhbWV0ZXIgdGhhdCBkZXRlcm1pbmVzIGhvdyBvYmplY3QKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcyBhcmUgc3RyaW5naWZpZWQgZm9yIG9iamVjdHMu
IEl0IGNhbiBiZSBhCisgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBvciBhbiBhcnJh
eSBvZiBzdHJpbmdzLgorCisgICAgICAgICAgICBzcGFjZSAgICAgICBhbiBvcHRpb25hbCBwYXJh
bWV0ZXIgdGhhdCBzcGVjaWZpZXMgdGhlIGluZGVudGF0aW9uCisgICAgICAgICAgICAgICAgICAg
ICAgICBvZiBuZXN0ZWQgc3RydWN0dXJlcy4gSWYgaXQgaXMgb21pdHRlZCwgdGhlIHRleHQgd2ls
bAorICAgICAgICAgICAgICAgICAgICAgICAgYmUgcGFja2VkIHdpdGhvdXQgZXh0cmEgd2hpdGVz
cGFjZS4gSWYgaXQgaXMgYSBudW1iZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBpdCB3aWxs
IHNwZWNpZnkgdGhlIG51bWJlciBvZiBzcGFjZXMgdG8gaW5kZW50IGF0IGVhY2gKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGxldmVsLiBJZiBpdCBpcyBhIHN0cmluZyAoc3VjaCBhcyAnXHQnIG9y
ICcmbmJzcDsnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGl0IGNvbnRhaW5zIHRoZSBjaGFy
YWN0ZXJzIHVzZWQgdG8gaW5kZW50IGF0IGVhY2ggbGV2ZWwuCisKKyAgICAgICAgICAgIFRoaXMg
bWV0aG9kIHByb2R1Y2VzIGEgSlNPTiB0ZXh0IGZyb20gYSBKYXZhU2NyaXB0IHZhbHVlLgorCisg
ICAgICAgICAgICBXaGVuIGFuIG9iamVjdCB2YWx1ZSBpcyBmb3VuZCwgaWYgdGhlIG9iamVjdCBj
b250YWlucyBhIHRvSlNPTgorICAgICAgICAgICAgbWV0aG9kLCBpdHMgdG9KU09OIG1ldGhvZCB3
aWxsIGJlIGNhbGxlZCBhbmQgdGhlIHJlc3VsdCB3aWxsIGJlCisgICAgICAgICAgICBzdHJpbmdp
ZmllZC4gQSB0b0pTT04gbWV0aG9kIGRvZXMgbm90IHNlcmlhbGl6ZTogaXQgcmV0dXJucyB0aGUK
KyAgICAgICAgICAgIHZhbHVlIHJlcHJlc2VudGVkIGJ5IHRoZSBuYW1lL3ZhbHVlIHBhaXIgdGhh
dCBzaG91bGQgYmUgc2VyaWFsaXplZCwKKyAgICAgICAgICAgIG9yIHVuZGVmaW5lZCBpZiBub3Ro
aW5nIHNob3VsZCBiZSBzZXJpYWxpemVkLiBUaGUgdG9KU09OIG1ldGhvZAorICAgICAgICAgICAg
d2lsbCBiZSBwYXNzZWQgdGhlIGtleSBhc3NvY2lhdGVkIHdpdGggdGhlIHZhbHVlLCBhbmQgdGhp
cyB3aWxsIGJlCisgICAgICAgICAgICBib3VuZCB0byB0aGUgdmFsdWUKKworICAgICAgICAgICAg
Rm9yIGV4YW1wbGUsIHRoaXMgd291bGQgc2VyaWFsaXplIERhdGVzIGFzIElTTyBzdHJpbmdzLgor
CisgICAgICAgICAgICAgICAgRGF0ZS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKGtleSkg
eworICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBmKG4pIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIEZvcm1hdCBpbnRlZ2VycyB0byBoYXZlIGF0IGxlYXN0IHR3byBkaWdpdHMuCisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbiA8IDEwID8gJzAnICsgbiA6IG47CisgICAg
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRV
VENGdWxsWWVhcigpICAgKyAnLScgKworICAgICAgICAgICAgICAgICAgICAgICAgIGYodGhpcy5n
ZXRVVENNb250aCgpICsgMSkgKyAnLScgKworICAgICAgICAgICAgICAgICAgICAgICAgIGYodGhp
cy5nZXRVVENEYXRlKCkpICAgICAgKyAnVCcgKworICAgICAgICAgICAgICAgICAgICAgICAgIGYo
dGhpcy5nZXRVVENIb3VycygpKSAgICAgKyAnOicgKworICAgICAgICAgICAgICAgICAgICAgICAg
IGYodGhpcy5nZXRVVENNaW51dGVzKCkpICAgKyAnOicgKworICAgICAgICAgICAgICAgICAgICAg
ICAgIGYodGhpcy5nZXRVVENTZWNvbmRzKCkpICAgKyAnWic7CisgICAgICAgICAgICAgICAgfTsK
KworICAgICAgICAgICAgWW91IGNhbiBwcm92aWRlIGFuIG9wdGlvbmFsIHJlcGxhY2VyIG1ldGhv
ZC4gSXQgd2lsbCBiZSBwYXNzZWQgdGhlCisgICAgICAgICAgICBrZXkgYW5kIHZhbHVlIG9mIGVh
Y2ggbWVtYmVyLCB3aXRoIHRoaXMgYm91bmQgdG8gdGhlIGNvbnRhaW5pbmcKKyAgICAgICAgICAg
IG9iamVjdC4gVGhlIHZhbHVlIHRoYXQgaXMgcmV0dXJuZWQgZnJvbSB5b3VyIG1ldGhvZCB3aWxs
IGJlCisgICAgICAgICAgICBzZXJpYWxpemVkLiBJZiB5b3VyIG1ldGhvZCByZXR1cm5zIHVuZGVm
aW5lZCwgdGhlbiB0aGUgbWVtYmVyIHdpbGwKKyAgICAgICAgICAgIGJlIGV4Y2x1ZGVkIGZyb20g
dGhlIHNlcmlhbGl6YXRpb24uCisKKyAgICAgICAgICAgIElmIHRoZSByZXBsYWNlciBwYXJhbWV0
ZXIgaXMgYW4gYXJyYXkgb2Ygc3RyaW5ncywgdGhlbiBpdCB3aWxsIGJlCisgICAgICAgICAgICB1
c2VkIHRvIHNlbGVjdCB0aGUgbWVtYmVycyB0byBiZSBzZXJpYWxpemVkLiBJdCBmaWx0ZXJzIHRo
ZSByZXN1bHRzCisgICAgICAgICAgICBzdWNoIHRoYXQgb25seSBtZW1iZXJzIHdpdGgga2V5cyBs
aXN0ZWQgaW4gdGhlIHJlcGxhY2VyIGFycmF5IGFyZQorICAgICAgICAgICAgc3RyaW5naWZpZWQu
CisKKyAgICAgICAgICAgIFZhbHVlcyB0aGF0IGRvIG5vdCBoYXZlIEpTT04gcmVwcmVzZW50YXRp
b25zLCBzdWNoIGFzIHVuZGVmaW5lZCBvcgorICAgICAgICAgICAgZnVuY3Rpb25zLCB3aWxsIG5v
dCBiZSBzZXJpYWxpemVkLiBTdWNoIHZhbHVlcyBpbiBvYmplY3RzIHdpbGwgYmUKKyAgICAgICAg
ICAgIGRyb3BwZWQ7IGluIGFycmF5cyB0aGV5IHdpbGwgYmUgcmVwbGFjZWQgd2l0aCBudWxsLiBZ
b3UgY2FuIHVzZQorICAgICAgICAgICAgYSByZXBsYWNlciBmdW5jdGlvbiB0byByZXBsYWNlIHRo
b3NlIHdpdGggSlNPTiB2YWx1ZXMuCisgICAgICAgICAgICBKU09OLnN0cmluZ2lmeSh1bmRlZmlu
ZWQpIHJldHVybnMgdW5kZWZpbmVkLgorCisgICAgICAgICAgICBUaGUgb3B0aW9uYWwgc3BhY2Ug
cGFyYW1ldGVyIHByb2R1Y2VzIGEgc3RyaW5naWZpY2F0aW9uIG9mIHRoZQorICAgICAgICAgICAg
dmFsdWUgdGhhdCBpcyBmaWxsZWQgd2l0aCBsaW5lIGJyZWFrcyBhbmQgaW5kZW50YXRpb24gdG8g
bWFrZSBpdAorICAgICAgICAgICAgZWFzaWVyIHRvIHJlYWQuCisKKyAgICAgICAgICAgIElmIHRo
ZSBzcGFjZSBwYXJhbWV0ZXIgaXMgYSBub24tZW1wdHkgc3RyaW5nLCB0aGVuIHRoYXQgc3RyaW5n
IHdpbGwKKyAgICAgICAgICAgIGJlIHVzZWQgZm9yIGluZGVudGF0aW9uLiBJZiB0aGUgc3BhY2Ug
cGFyYW1ldGVyIGlzIGEgbnVtYmVyLCB0aGVuCisgICAgICAgICAgICB0aGUgaW5kZW50YXRpb24g
d2lsbCBiZSB0aGF0IG1hbnkgc3BhY2VzLgorCisgICAgICAgICAgICBFeGFtcGxlOgorCisgICAg
ICAgICAgICB0ZXh0ID0gSlNPTi5zdHJpbmdpZnkoWydlJywge3BsdXJpYnVzOiAndW51bSd9XSk7
CisgICAgICAgICAgICAvLyB0ZXh0IGlzICdbImUiLHsicGx1cmlidXMiOiJ1bnVtIn1dJworCisK
KyAgICAgICAgICAgIHRleHQgPSBKU09OLnN0cmluZ2lmeShbJ2UnLCB7cGx1cmlidXM6ICd1bnVt
J31dLCBudWxsLCAnXHQnKTsKKyAgICAgICAgICAgIC8vIHRleHQgaXMgJ1tcblx0ImUiLFxuXHR7
XG5cdFx0InBsdXJpYnVzIjogInVudW0iXG5cdH1cbl0nCisKKyAgICAgICAgICAgIHRleHQgPSBK
U09OLnN0cmluZ2lmeShbbmV3IERhdGUoKV0sIGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHRoaXNba2V5XSBpbnN0YW5jZW9mIERhdGUgPworICAgICAgICAg
ICAgICAgICAgICAnRGF0ZSgnICsgdGhpc1trZXldICsgJyknIDogdmFsdWU7CisgICAgICAgICAg
ICB9KTsKKyAgICAgICAgICAgIC8vIHRleHQgaXMgJ1siRGF0ZSgtLS1jdXJyZW50IHRpbWUtLS0p
Il0nCisKKworICAgICAgICBKU09OLnBhcnNlKHRleHQsIHJldml2ZXIpCisgICAgICAgICAgICBU
aGlzIG1ldGhvZCBwYXJzZXMgYSBKU09OIHRleHQgdG8gcHJvZHVjZSBhbiBvYmplY3Qgb3IgYXJy
YXkuCisgICAgICAgICAgICBJdCBjYW4gdGhyb3cgYSBTeW50YXhFcnJvciBleGNlcHRpb24uCisK
KyAgICAgICAgICAgIFRoZSBvcHRpb25hbCByZXZpdmVyIHBhcmFtZXRlciBpcyBhIGZ1bmN0aW9u
IHRoYXQgY2FuIGZpbHRlciBhbmQKKyAgICAgICAgICAgIHRyYW5zZm9ybSB0aGUgcmVzdWx0cy4g
SXQgcmVjZWl2ZXMgZWFjaCBvZiB0aGUga2V5cyBhbmQgdmFsdWVzLAorICAgICAgICAgICAgYW5k
IGl0cyByZXR1cm4gdmFsdWUgaXMgdXNlZCBpbnN0ZWFkIG9mIHRoZSBvcmlnaW5hbCB2YWx1ZS4K
KyAgICAgICAgICAgIElmIGl0IHJldHVybnMgd2hhdCBpdCByZWNlaXZlZCwgdGhlbiB0aGUgc3Ry
dWN0dXJlIGlzIG5vdCBtb2RpZmllZC4KKyAgICAgICAgICAgIElmIGl0IHJldHVybnMgdW5kZWZp
bmVkIHRoZW4gdGhlIG1lbWJlciBpcyBkZWxldGVkLgorCisgICAgICAgICAgICBFeGFtcGxlOgor
CisgICAgICAgICAgICAvLyBQYXJzZSB0aGUgdGV4dC4gVmFsdWVzIHRoYXQgbG9vayBsaWtlIElT
TyBkYXRlIHN0cmluZ3Mgd2lsbAorICAgICAgICAgICAgLy8gYmUgY29udmVydGVkIHRvIERhdGUg
b2JqZWN0cy4KKworICAgICAgICAgICAgbXlEYXRhID0gSlNPTi5wYXJzZSh0ZXh0LCBmdW5jdGlv
biAoa2V5LCB2YWx1ZSkgeworICAgICAgICAgICAgICAgIHZhciBhOworICAgICAgICAgICAgICAg
IGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7CisgICAgICAgICAgICAgICAgICAgIGEg
PQorL14oXGR7NH0pLShcZHsyfSktKFxkezJ9KVQoXGR7Mn0pOihcZHsyfSk6KFxkezJ9KD86XC5c
ZCopPylaJC8uZXhlYyh2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChhKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEMoK2FbMV0sICthWzJd
IC0gMSwgK2FbM10sICthWzRdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICthWzVdLCAr
YVs2XSkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICBt
eURhdGEgPSBKU09OLnBhcnNlKCdbIkRhdGUoMDkvMDkvMjAwMSkiXScsIGZ1bmN0aW9uIChrZXks
IHZhbHVlKSB7CisgICAgICAgICAgICAgICAgdmFyIGQ7CisgICAgICAgICAgICAgICAgaWYgKHR5
cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVl
LnNsaWNlKDAsIDUpID09PSAnRGF0ZSgnICYmCisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1
ZS5zbGljZSgtMSkgPT09ICcpJykgeworICAgICAgICAgICAgICAgICAgICBkID0gbmV3IERhdGUo
dmFsdWUuc2xpY2UoNSwgLTEpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBkOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICAgICAgICAg
IH0pOworCisKKyAgICBUaGlzIGlzIGEgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uLiBZb3UgYXJl
IGZyZWUgdG8gY29weSwgbW9kaWZ5LCBvcgorICAgIHJlZGlzdHJpYnV0ZS4KKworICAgIFRoaXMg
Y29kZSBzaG91bGQgYmUgbWluaWZpZWQgYmVmb3JlIGRlcGxveW1lbnQuCisgICAgU2VlIGh0dHA6
Ly9qYXZhc2NyaXB0LmNyb2NrZm9yZC5jb20vanNtaW4uaHRtbAorCisgICAgVVNFIFlPVVIgT1dO
IENPUFkuIElUIElTIEVYVFJFTUVMWSBVTldJU0UgVE8gTE9BRCBDT0RFIEZST00gU0VSVkVSUyBZ
T1UgRE8KKyAgICBOT1QgQ09OVFJPTC4KKyovCisKKy8qanNsaW50IGV2aWw6IHRydWUgKi8KKwor
LyptZW1iZXJzICIiLCAiXGIiLCAiXHQiLCAiXG4iLCAiXGYiLCAiXHIiLCAiXCIiLCBKU09OLCAi
XFwiLCBhcHBseSwKKyAgICBjYWxsLCBjaGFyQ29kZUF0LCBnZXRVVENEYXRlLCBnZXRVVENGdWxs
WWVhciwgZ2V0VVRDSG91cnMsCisgICAgZ2V0VVRDTWludXRlcywgZ2V0VVRDTW9udGgsIGdldFVU
Q1NlY29uZHMsIGhhc093blByb3BlcnR5LCBqb2luLAorICAgIGxhc3RJbmRleCwgbGVuZ3RoLCBw
YXJzZSwgcHJvdG90eXBlLCBwdXNoLCByZXBsYWNlLCBzbGljZSwgc3RyaW5naWZ5LAorICAgIHRl
c3QsIHRvSlNPTiwgdG9TdHJpbmcsIHZhbHVlT2YKKyovCisKKyJ1c2Ugc3RyaWN0IjsKKworLy8g
Q3JlYXRlIGEgSlNPTiBvYmplY3Qgb25seSBpZiBvbmUgZG9lcyBub3QgYWxyZWFkeSBleGlzdC4g
V2UgY3JlYXRlIHRoZQorLy8gbWV0aG9kcyBpbiBhIGNsb3N1cmUgdG8gYXZvaWQgY3JlYXRpbmcg
Z2xvYmFsIHZhcmlhYmxlcy4KKworaWYgKCF0aGlzLkpTT04pIHsKKyAgICB0aGlzLkpTT04gPSB7
fTsKK30KKworKGZ1bmN0aW9uICgpIHsKKworICAgIGZ1bmN0aW9uIGYobikgeworICAgICAgICAv
LyBGb3JtYXQgaW50ZWdlcnMgdG8gaGF2ZSBhdCBsZWFzdCB0d28gZGlnaXRzLgorICAgICAgICBy
ZXR1cm4gbiA8IDEwID8gJzAnICsgbiA6IG47CisgICAgfQorCisgICAgaWYgKHR5cGVvZiBEYXRl
LnByb3RvdHlwZS50b0pTT04gIT09ICdmdW5jdGlvbicpIHsKKworICAgICAgICBEYXRlLnByb3Rv
dHlwZS50b0pTT04gPSBmdW5jdGlvbiAoa2V5KSB7CisKKyAgICAgICAgICAgIHJldHVybiBpc0Zp
bml0ZSh0aGlzLnZhbHVlT2YoKSkgPworICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0VVRDRnVs
bFllYXIoKSAgICsgJy0nICsKKyAgICAgICAgICAgICAgICAgZih0aGlzLmdldFVUQ01vbnRoKCkg
KyAxKSArICctJyArCisgICAgICAgICAgICAgICAgIGYodGhpcy5nZXRVVENEYXRlKCkpICAgICAg
KyAnVCcgKworICAgICAgICAgICAgICAgICBmKHRoaXMuZ2V0VVRDSG91cnMoKSkgICAgICsgJzon
ICsKKyAgICAgICAgICAgICAgICAgZih0aGlzLmdldFVUQ01pbnV0ZXMoKSkgICArICc6JyArCisg
ICAgICAgICAgICAgICAgIGYodGhpcy5nZXRVVENTZWNvbmRzKCkpICAgKyAnWicgOiBudWxsOwor
ICAgICAgICB9OworCisgICAgICAgIFN0cmluZy5wcm90b3R5cGUudG9KU09OID0KKyAgICAgICAg
TnVtYmVyLnByb3RvdHlwZS50b0pTT04gPQorICAgICAgICBCb29sZWFuLnByb3RvdHlwZS50b0pT
T04gPSBmdW5jdGlvbiAoa2V5KSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZU9mKCk7
CisgICAgICAgIH07CisgICAgfQorCisgICAgdmFyIGN4ID0gL1tcdTAwMDBcdTAwYWRcdTA2MDAt
XHUwNjA0XHUwNzBmXHUxN2I0XHUxN2I1XHUyMDBjLVx1MjAwZlx1MjAyOC1cdTIwMmZcdTIwNjAt
XHUyMDZmXHVmZWZmXHVmZmYwLVx1ZmZmZl0vZywKKyAgICAgICAgZXNjYXBhYmxlID0gL1tcXFwi
XHgwMC1ceDFmXHg3Zi1ceDlmXHUwMGFkXHUwNjAwLVx1MDYwNFx1MDcwZlx1MTdiNFx1MTdiNVx1
MjAwYy1cdTIwMGZcdTIwMjgtXHUyMDJmXHUyMDYwLVx1MjA2Zlx1ZmVmZlx1ZmZmMC1cdWZmZmZd
L2csCisgICAgICAgIGdhcCwKKyAgICAgICAgaW5kZW50LAorICAgICAgICBtZXRhID0geyAgICAv
LyB0YWJsZSBvZiBjaGFyYWN0ZXIgc3Vic3RpdHV0aW9ucworICAgICAgICAgICAgJ1xiJzogJ1xc
YicsCisgICAgICAgICAgICAnXHQnOiAnXFx0JywKKyAgICAgICAgICAgICdcbic6ICdcXG4nLAor
ICAgICAgICAgICAgJ1xmJzogJ1xcZicsCisgICAgICAgICAgICAnXHInOiAnXFxyJywKKyAgICAg
ICAgICAgICciJyA6ICdcXCInLAorICAgICAgICAgICAgJ1xcJzogJ1xcXFwnCisgICAgICAgIH0s
CisgICAgICAgIHJlcDsKKworCisgICAgZnVuY3Rpb24gcXVvdGUoc3RyaW5nKSB7CisKKy8vIElm
IHRoZSBzdHJpbmcgY29udGFpbnMgbm8gY29udHJvbCBjaGFyYWN0ZXJzLCBubyBxdW90ZSBjaGFy
YWN0ZXJzLCBhbmQgbm8KKy8vIGJhY2tzbGFzaCBjaGFyYWN0ZXJzLCB0aGVuIHdlIGNhbiBzYWZl
bHkgc2xhcCBzb21lIHF1b3RlcyBhcm91bmQgaXQuCisvLyBPdGhlcndpc2Ugd2UgbXVzdCBhbHNv
IHJlcGxhY2UgdGhlIG9mZmVuZGluZyBjaGFyYWN0ZXJzIHdpdGggc2FmZSBlc2NhcGUKKy8vIHNl
cXVlbmNlcy4KKworICAgICAgICBlc2NhcGFibGUubGFzdEluZGV4ID0gMDsKKyAgICAgICAgcmV0
dXJuIGVzY2FwYWJsZS50ZXN0KHN0cmluZykgPworICAgICAgICAgICAgJyInICsgc3RyaW5nLnJl
cGxhY2UoZXNjYXBhYmxlLCBmdW5jdGlvbiAoYSkgeworICAgICAgICAgICAgICAgIHZhciBjID0g
bWV0YVthXTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIGMgPT09ICdzdHJpbmcnID8g
YyA6CisgICAgICAgICAgICAgICAgICAgICdcXHUnICsgKCcwMDAwJyArIGEuY2hhckNvZGVBdCgw
KS50b1N0cmluZygxNikpLnNsaWNlKC00KTsKKyAgICAgICAgICAgIH0pICsgJyInIDoKKyAgICAg
ICAgICAgICciJyArIHN0cmluZyArICciJzsKKyAgICB9CisKKworICAgIGZ1bmN0aW9uIHN0cihr
ZXksIGhvbGRlcikgeworLy8gUHJvZHVjZSBhIHN0cmluZyBmcm9tIGhvbGRlcltrZXldLgorCisg
ICAgICAgIHZhciBpLCAgICAgICAgICAvLyBUaGUgbG9vcCBjb3VudGVyLgorICAgICAgICAgICAg
aywgICAgICAgICAgLy8gVGhlIG1lbWJlciBrZXkuCisgICAgICAgICAgICB2LCAgICAgICAgICAv
LyBUaGUgbWVtYmVyIHZhbHVlLgorICAgICAgICAgICAgbGVuZ3RoLAorICAgICAgICAgICAgbWlu
ZCA9IGdhcCwKKyAgICAgICAgICAgIHBhcnRpYWwsCisgICAgICAgICAgICB2YWx1ZSA9IGhvbGRl
cltrZXldOworCisvLyBJZiB0aGUgdmFsdWUgaGFzIGEgdG9KU09OIG1ldGhvZCwgY2FsbCBpdCB0
byBvYnRhaW4gYSByZXBsYWNlbWVudCB2YWx1ZS4KKworICAgICAgICBpZiAodmFsdWUgJiYgdHlw
ZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJgorICAgICAgICAgICAgICAgIHR5cGVvZiB2YWx1ZS50
b0pTT04gPT09ICdmdW5jdGlvbicpIHsKKyAgICAgICAgICAgIHZhbHVlID0gdmFsdWUudG9KU09O
KGtleSk7CisgICAgICAgIH0KKworLy8gSWYgd2Ugd2VyZSBjYWxsZWQgd2l0aCBhIHJlcGxhY2Vy
IGZ1bmN0aW9uLCB0aGVuIGNhbGwgdGhlIHJlcGxhY2VyIHRvCisvLyBvYnRhaW4gYSByZXBsYWNl
bWVudCB2YWx1ZS4KKworICAgICAgICBpZiAodHlwZW9mIHJlcCA9PT0gJ2Z1bmN0aW9uJykgewor
ICAgICAgICAgICAgdmFsdWUgPSByZXAuY2FsbChob2xkZXIsIGtleSwgdmFsdWUpOworICAgICAg
ICB9CisKKy8vIFdoYXQgaGFwcGVucyBuZXh0IGRlcGVuZHMgb24gdGhlIHZhbHVlJ3MgdHlwZS4K
KworICAgICAgICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkgeworICAgICAgICBjYXNlICdzdHJpbmcn
OgorICAgICAgICAgICAgcmV0dXJuIHF1b3RlKHZhbHVlKTsKKworICAgICAgICBjYXNlICdudW1i
ZXInOgorCisvLyBKU09OIG51bWJlcnMgbXVzdCBiZSBmaW5pdGUuIEVuY29kZSBub24tZmluaXRl
IG51bWJlcnMgYXMgbnVsbC4KKworICAgICAgICAgICAgcmV0dXJuIGlzRmluaXRlKHZhbHVlKSA/
IFN0cmluZyh2YWx1ZSkgOiAnbnVsbCc7CisKKyAgICAgICAgY2FzZSAnYm9vbGVhbic6CisgICAg
ICAgIGNhc2UgJ251bGwnOgorCisvLyBJZiB0aGUgdmFsdWUgaXMgYSBib29sZWFuIG9yIG51bGws
IGNvbnZlcnQgaXQgdG8gYSBzdHJpbmcuIE5vdGU6CisvLyB0eXBlb2YgbnVsbCBkb2VzIG5vdCBw
cm9kdWNlICdudWxsJy4gVGhlIGNhc2UgaXMgaW5jbHVkZWQgaGVyZSBpbgorLy8gdGhlIHJlbW90
ZSBjaGFuY2UgdGhhdCB0aGlzIGdldHMgZml4ZWQgc29tZWRheS4KKworICAgICAgICAgICAgcmV0
dXJuIFN0cmluZyh2YWx1ZSk7CisKKy8vIElmIHRoZSB0eXBlIGlzICdvYmplY3QnLCB3ZSBtaWdo
dCBiZSBkZWFsaW5nIHdpdGggYW4gb2JqZWN0IG9yIGFuIGFycmF5IG9yCisvLyBudWxsLgorCisg
ICAgICAgIGNhc2UgJ29iamVjdCc6CisKKy8vIER1ZSB0byBhIHNwZWNpZmljYXRpb24gYmx1bmRl
ciBpbiBFQ01BU2NyaXB0LCB0eXBlb2YgbnVsbCBpcyAnb2JqZWN0JywKKy8vIHNvIHdhdGNoIG91
dCBmb3IgdGhhdCBjYXNlLgorCisgICAgICAgICAgICBpZiAoIXZhbHVlKSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuICdudWxsJzsKKyAgICAgICAgICAgIH0KKworLy8gTWFrZSBhbiBhcnJheSB0
byBob2xkIHRoZSBwYXJ0aWFsIHJlc3VsdHMgb2Ygc3RyaW5naWZ5aW5nIHRoaXMgb2JqZWN0IHZh
bHVlLgorCisgICAgICAgICAgICBnYXAgKz0gaW5kZW50OworICAgICAgICAgICAgcGFydGlhbCA9
IFtdOworCisvLyBJcyB0aGUgdmFsdWUgYW4gYXJyYXk/CisKKyAgICAgICAgICAgIGlmIChPYmpl
Y3QucHJvdG90eXBlLnRvU3RyaW5nLmFwcGx5KHZhbHVlKSA9PT0gJ1tvYmplY3QgQXJyYXldJykg
eworCisvLyBUaGUgdmFsdWUgaXMgYW4gYXJyYXkuIFN0cmluZ2lmeSBldmVyeSBlbGVtZW50LiBV
c2UgbnVsbCBhcyBhIHBsYWNlaG9sZGVyCisvLyBmb3Igbm9uLUpTT04gdmFsdWVzLgorCisgICAg
ICAgICAgICAgICAgbGVuZ3RoID0gdmFsdWUubGVuZ3RoOworICAgICAgICAgICAgICAgIGZvciAo
aSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gMSkgeworICAgICAgICAgICAgICAgICAgICBwYXJ0aWFs
W2ldID0gc3RyKGksIHZhbHVlKSB8fCAnbnVsbCc7CisgICAgICAgICAgICAgICAgfQorCisvLyBK
b2luIGFsbCBvZiB0aGUgZWxlbWVudHMgdG9nZXRoZXIsIHNlcGFyYXRlZCB3aXRoIGNvbW1hcywg
YW5kIHdyYXAgdGhlbSBpbgorLy8gYnJhY2tldHMuCisKKyAgICAgICAgICAgICAgICB2ID0gcGFy
dGlhbC5sZW5ndGggPT09IDAgPyAnW10nIDoKKyAgICAgICAgICAgICAgICAgICAgZ2FwID8gJ1tc
bicgKyBnYXAgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpYWwuam9pbignLFxu
JyArIGdhcCkgKyAnXG4nICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluZCAr
ICddJyA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICdbJyArIHBhcnRpYWwuam9pbignLCcp
ICsgJ10nOworICAgICAgICAgICAgICAgIGdhcCA9IG1pbmQ7CisgICAgICAgICAgICAgICAgcmV0
dXJuIHY7CisgICAgICAgICAgICB9CisKKy8vIElmIHRoZSByZXBsYWNlciBpcyBhbiBhcnJheSwg
dXNlIGl0IHRvIHNlbGVjdCB0aGUgbWVtYmVycyB0byBiZSBzdHJpbmdpZmllZC4KKworICAgICAg
ICAgICAgaWYgKHJlcCAmJiB0eXBlb2YgcmVwID09PSAnb2JqZWN0JykgeworICAgICAgICAgICAg
ICAgIGxlbmd0aCA9IHJlcC5sZW5ndGg7CisgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8
IGxlbmd0aDsgaSArPSAxKSB7CisgICAgICAgICAgICAgICAgICAgIGsgPSByZXBbaV07CisgICAg
ICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgayA9PT0gJ3N0cmluZycpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHYgPSBzdHIoaywgdmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHYpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWFsLnB1c2gocXVvdGUo
aykgKyAoZ2FwID8gJzogJyA6ICc6JykgKyB2KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0g
ZWxzZSB7CisKKy8vIE90aGVyd2lzZSwgaXRlcmF0ZSB0aHJvdWdoIGFsbCBvZiB0aGUga2V5cyBp
biB0aGUgb2JqZWN0LgorCisgICAgICAgICAgICAgICAgZm9yIChrIGluIHZhbHVlKSB7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgaykp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHYgPSBzdHIoaywgdmFsdWUpOworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHYpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0
aWFsLnB1c2gocXVvdGUoaykgKyAoZ2FwID8gJzogJyA6ICc6JykgKyB2KTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKworLy8gSm9pbiBhbGwgb2YgdGhlIG1lbWJlciB0ZXh0cyB0b2dldGhl
ciwgc2VwYXJhdGVkIHdpdGggY29tbWFzLAorLy8gYW5kIHdyYXAgdGhlbSBpbiBicmFjZXMuCisK
KyAgICAgICAgICAgIHYgPSBwYXJ0aWFsLmxlbmd0aCA9PT0gMCA/ICd7fScgOgorICAgICAgICAg
ICAgICAgIGdhcCA/ICd7XG4nICsgZ2FwICsgcGFydGlhbC5qb2luKCcsXG4nICsgZ2FwKSArICdc
bicgKworICAgICAgICAgICAgICAgICAgICAgICAgbWluZCArICd9JyA6ICd7JyArIHBhcnRpYWwu
am9pbignLCcpICsgJ30nOworICAgICAgICAgICAgZ2FwID0gbWluZDsKKyAgICAgICAgICAgIHJl
dHVybiB2OworICAgICAgICB9CisgICAgfQorCisvLyBJZiB0aGUgSlNPTiBvYmplY3QgZG9lcyBu
b3QgeWV0IGhhdmUgYSBzdHJpbmdpZnkgbWV0aG9kLCBnaXZlIGl0IG9uZS4KKworICAgIGlmICh0
eXBlb2YgSlNPTi5zdHJpbmdpZnkgIT09ICdmdW5jdGlvbicpIHsKKyAgICAgICAgSlNPTi5zdHJp
bmdpZnkgPSBmdW5jdGlvbiAodmFsdWUsIHJlcGxhY2VyLCBzcGFjZSkgeworLy8gVGhlIHN0cmlu
Z2lmeSBtZXRob2QgdGFrZXMgYSB2YWx1ZSBhbmQgYW4gb3B0aW9uYWwgcmVwbGFjZXIsIGFuZCBh
biBvcHRpb25hbAorLy8gc3BhY2UgcGFyYW1ldGVyLCBhbmQgcmV0dXJucyBhIEpTT04gdGV4dC4g
VGhlIHJlcGxhY2VyIGNhbiBiZSBhIGZ1bmN0aW9uCisvLyB0aGF0IGNhbiByZXBsYWNlIHZhbHVl
cywgb3IgYW4gYXJyYXkgb2Ygc3RyaW5ncyB0aGF0IHdpbGwgc2VsZWN0IHRoZSBrZXlzLgorLy8g
QSBkZWZhdWx0IHJlcGxhY2VyIG1ldGhvZCBjYW4gYmUgcHJvdmlkZWQuIFVzZSBvZiB0aGUgc3Bh
Y2UgcGFyYW1ldGVyIGNhbgorLy8gcHJvZHVjZSB0ZXh0IHRoYXQgaXMgbW9yZSBlYXNpbHkgcmVh
ZGFibGUuCisKKyAgICAgICAgICAgIHZhciBpOworICAgICAgICAgICAgZ2FwID0gJyc7CisgICAg
ICAgICAgICBpbmRlbnQgPSAnJzsKKworLy8gSWYgdGhlIHNwYWNlIHBhcmFtZXRlciBpcyBhIG51
bWJlciwgbWFrZSBhbiBpbmRlbnQgc3RyaW5nIGNvbnRhaW5pbmcgdGhhdAorLy8gbWFueSBzcGFj
ZXMuCisKKyAgICAgICAgICAgIGlmICh0eXBlb2Ygc3BhY2UgPT09ICdudW1iZXInKSB7CisgICAg
ICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHNwYWNlOyBpICs9IDEpIHsKKyAgICAgICAgICAg
ICAgICAgICAgaW5kZW50ICs9ICcgJzsKKyAgICAgICAgICAgICAgICB9CisKKy8vIElmIHRoZSBz
cGFjZSBwYXJhbWV0ZXIgaXMgYSBzdHJpbmcsIGl0IHdpbGwgYmUgdXNlZCBhcyB0aGUgaW5kZW50
IHN0cmluZy4KKworICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygc3BhY2UgPT09ICdzdHJp
bmcnKSB7CisgICAgICAgICAgICAgICAgaW5kZW50ID0gc3BhY2U7CisgICAgICAgICAgICB9CisK
Ky8vIElmIHRoZXJlIGlzIGEgcmVwbGFjZXIsIGl0IG11c3QgYmUgYSBmdW5jdGlvbiBvciBhbiBh
cnJheS4KKy8vIE90aGVyd2lzZSwgdGhyb3cgYW4gZXJyb3IuCisKKyAgICAgICAgICAgIHJlcCA9
IHJlcGxhY2VyOworICAgICAgICAgICAgaWYgKHJlcGxhY2VyICYmIHR5cGVvZiByZXBsYWNlciAh
PT0gJ2Z1bmN0aW9uJyAmJgorICAgICAgICAgICAgICAgICAgICAodHlwZW9mIHJlcGxhY2VyICE9
PSAnb2JqZWN0JyB8fAorICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHJlcGxhY2VyLmxlbmd0
aCAhPT0gJ251bWJlcicpKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdKU09O
LnN0cmluZ2lmeScpOworICAgICAgICAgICAgfQorCisvLyBNYWtlIGEgZmFrZSByb290IG9iamVj
dCBjb250YWluaW5nIG91ciB2YWx1ZSB1bmRlciB0aGUga2V5IG9mICcnLgorLy8gUmV0dXJuIHRo
ZSByZXN1bHQgb2Ygc3RyaW5naWZ5aW5nIHRoZSB2YWx1ZS4KKworICAgICAgICAgICAgcmV0dXJu
IHN0cignJywgeycnOiB2YWx1ZX0pOworICAgICAgICB9OworICAgIH0KKworCisvLyBJZiB0aGUg
SlNPTiBvYmplY3QgZG9lcyBub3QgeWV0IGhhdmUgYSBwYXJzZSBtZXRob2QsIGdpdmUgaXQgb25l
LgorCisgICAgaWYgKHR5cGVvZiBKU09OLnBhcnNlICE9PSAnZnVuY3Rpb24nKSB7CisgICAgICAg
IEpTT04ucGFyc2UgPSBmdW5jdGlvbiAodGV4dCwgcmV2aXZlcikgeworCisvLyBUaGUgcGFyc2Ug
bWV0aG9kIHRha2VzIGEgdGV4dCBhbmQgYW4gb3B0aW9uYWwgcmV2aXZlciBmdW5jdGlvbiwgYW5k
IHJldHVybnMKKy8vIGEgSmF2YVNjcmlwdCB2YWx1ZSBpZiB0aGUgdGV4dCBpcyBhIHZhbGlkIEpT
T04gdGV4dC4KKworICAgICAgICAgICAgdmFyIGo7CisKKyAgICAgICAgICAgIGZ1bmN0aW9uIHdh
bGsoaG9sZGVyLCBrZXkpIHsKKworLy8gVGhlIHdhbGsgbWV0aG9kIGlzIHVzZWQgdG8gcmVjdXJz
aXZlbHkgd2FsayB0aGUgcmVzdWx0aW5nIHN0cnVjdHVyZSBzbworLy8gdGhhdCBtb2RpZmljYXRp
b25zIGNhbiBiZSBtYWRlLgorCisgICAgICAgICAgICAgICAgdmFyIGssIHYsIHZhbHVlID0gaG9s
ZGVyW2tleV07CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0g
J29iamVjdCcpIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChrIGluIHZhbHVlKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwodmFsdWUs
IGspKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdiA9IHdhbGsodmFsdWUsIGspOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ICE9PSB1bmRlZmluZWQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVba10gPSB2OworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRl
bGV0ZSB2YWx1ZVtrXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgcmV0dXJuIHJldml2ZXIuY2FsbChob2xkZXIsIGtleSwgdmFsdWUp
OworICAgICAgICAgICAgfQorCisKKy8vIFBhcnNpbmcgaGFwcGVucyBpbiBmb3VyIHN0YWdlcy4g
SW4gdGhlIGZpcnN0IHN0YWdlLCB3ZSByZXBsYWNlIGNlcnRhaW4KKy8vIFVuaWNvZGUgY2hhcmFj
dGVycyB3aXRoIGVzY2FwZSBzZXF1ZW5jZXMuIEphdmFTY3JpcHQgaGFuZGxlcyBtYW55IGNoYXJh
Y3RlcnMKKy8vIGluY29ycmVjdGx5LCBlaXRoZXIgc2lsZW50bHkgZGVsZXRpbmcgdGhlbSwgb3Ig
dHJlYXRpbmcgdGhlbSBhcyBsaW5lIGVuZGluZ3MuCisKKyAgICAgICAgICAgIGN4Lmxhc3RJbmRl
eCA9IDA7CisgICAgICAgICAgICBpZiAoY3gudGVzdCh0ZXh0KSkgeworICAgICAgICAgICAgICAg
IHRleHQgPSB0ZXh0LnJlcGxhY2UoY3gsIGZ1bmN0aW9uIChhKSB7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiAnXFx1JyArCisgICAgICAgICAgICAgICAgICAgICAgICAoJzAwMDAnICsgYS5j
aGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTQpOworICAgICAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgfQorCisvLyBJbiB0aGUgc2Vjb25kIHN0YWdlLCB3ZSBydW4gdGhlIHRl
eHQgYWdhaW5zdCByZWd1bGFyIGV4cHJlc3Npb25zIHRoYXQgbG9vaworLy8gZm9yIG5vbi1KU09O
IHBhdHRlcm5zLiBXZSBhcmUgZXNwZWNpYWxseSBjb25jZXJuZWQgd2l0aCAnKCknIGFuZCAnbmV3
JworLy8gYmVjYXVzZSB0aGV5IGNhbiBjYXVzZSBpbnZvY2F0aW9uLCBhbmQgJz0nIGJlY2F1c2Ug
aXQgY2FuIGNhdXNlIG11dGF0aW9uLgorLy8gQnV0IGp1c3QgdG8gYmUgc2FmZSwgd2Ugd2FudCB0
byByZWplY3QgYWxsIHVuZXhwZWN0ZWQgZm9ybXMuCisKKy8vIFdlIHNwbGl0IHRoZSBzZWNvbmQg
c3RhZ2UgaW50byA0IHJlZ2V4cCBvcGVyYXRpb25zIGluIG9yZGVyIHRvIHdvcmsgYXJvdW5kCisv
LyBjcmlwcGxpbmcgaW5lZmZpY2llbmNpZXMgaW4gSUUncyBhbmQgU2FmYXJpJ3MgcmVnZXhwIGVu
Z2luZXMuIEZpcnN0IHdlCisvLyByZXBsYWNlIHRoZSBKU09OIGJhY2tzbGFzaCBwYWlycyB3aXRo
ICdAJyAoYSBub24tSlNPTiBjaGFyYWN0ZXIpLiBTZWNvbmQsIHdlCisvLyByZXBsYWNlIGFsbCBz
aW1wbGUgdmFsdWUgdG9rZW5zIHdpdGggJ10nIGNoYXJhY3RlcnMuIFRoaXJkLCB3ZSBkZWxldGUg
YWxsCisvLyBvcGVuIGJyYWNrZXRzIHRoYXQgZm9sbG93IGEgY29sb24gb3IgY29tbWEgb3IgdGhh
dCBiZWdpbiB0aGUgdGV4dC4gRmluYWxseSwKKy8vIHdlIGxvb2sgdG8gc2VlIHRoYXQgdGhlIHJl
bWFpbmluZyBjaGFyYWN0ZXJzIGFyZSBvbmx5IHdoaXRlc3BhY2Ugb3IgJ10nIG9yCisvLyAnLCcg
b3IgJzonIG9yICd7JyBvciAnfScuIElmIHRoYXQgaXMgc28sIHRoZW4gdGhlIHRleHQgaXMgc2Fm
ZSBmb3IgZXZhbC4KKworICAgICAgICAgICAgaWYgKC9eW1xdLDp7fVxzXSokLy4KK3Rlc3QodGV4
dC5yZXBsYWNlKC9cXCg/OlsiXFxcL2JmbnJ0XXx1WzAtOWEtZkEtRl17NH0pL2csICdAJykuCity
ZXBsYWNlKC8iW14iXFxcblxyXSoifHRydWV8ZmFsc2V8bnVsbHwtP1xkKyg/OlwuXGQqKT8oPzpb
ZUVdWytcLV0/XGQrKT8vZywgJ10nKS4KK3JlcGxhY2UoLyg/Ol58OnwsKSg/OlxzKlxbKSsvZywg
JycpKSkgeworCisvLyBJbiB0aGUgdGhpcmQgc3RhZ2Ugd2UgdXNlIHRoZSBldmFsIGZ1bmN0aW9u
IHRvIGNvbXBpbGUgdGhlIHRleHQgaW50byBhCisvLyBKYXZhU2NyaXB0IHN0cnVjdHVyZS4gVGhl
ICd7JyBvcGVyYXRvciBpcyBzdWJqZWN0IHRvIGEgc3ludGFjdGljIGFtYmlndWl0eQorLy8gaW4g
SmF2YVNjcmlwdDogaXQgY2FuIGJlZ2luIGEgYmxvY2sgb3IgYW4gb2JqZWN0IGxpdGVyYWwuIFdl
IHdyYXAgdGhlIHRleHQKKy8vIGluIHBhcmVucyB0byBlbGltaW5hdGUgdGhlIGFtYmlndWl0eS4K
KworICAgICAgICAgICAgICAgIGogPSBldmFsKCcoJyArIHRleHQgKyAnKScpOworCisvLyBJbiB0
aGUgb3B0aW9uYWwgZm91cnRoIHN0YWdlLCB3ZSByZWN1cnNpdmVseSB3YWxrIHRoZSBuZXcgc3Ry
dWN0dXJlLCBwYXNzaW5nCisvLyBlYWNoIG5hbWUvdmFsdWUgcGFpciB0byBhIHJldml2ZXIgZnVu
Y3Rpb24gZm9yIHBvc3NpYmxlIHRyYW5zZm9ybWF0aW9uLgorCisgICAgICAgICAgICAgICAgcmV0
dXJuIHR5cGVvZiByZXZpdmVyID09PSAnZnVuY3Rpb24nID8KKyAgICAgICAgICAgICAgICAgICAg
d2Fsayh7Jyc6IGp9LCAnJykgOiBqOworICAgICAgICAgICAgfQorCisvLyBJZiB0aGUgdGV4dCBp
cyBub3QgSlNPTiBwYXJzZWFibGUsIHRoZW4gYSBTeW50YXhFcnJvciBpcyB0aHJvd24uCisKKyAg
ICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignSlNPTi5wYXJzZScpOworICAgICAgICB9
OworICAgIH0KK30oKSk7CkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2Zs
aWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvZXM1LXNoaW0vdGVzdHMvc3BlYy9zLWFycmF5
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0
anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9lczUtc2hpbS90ZXN0cy9zcGVjL3MtYXJyYXkuanMJ
KHJldmlzaW9uIDApCisrKyBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpz
LWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvZXM1LXNoaW0vdGVzdHMvc3BlYy9zLWFycmF5LmpzCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA3MCBAQAorZGVzY3JpYmUoJ0FycmF5JywgZnVuY3Rp
b24oKSB7CisgICAgdmFyIHRlc3RTdWJqZWN0OworICAgIGJlZm9yZUVhY2goZnVuY3Rpb24oKSB7
CisgICAgICAgIHRlc3RTdWJqZWN0ID0gWzIsIDMsIHVuZGVmaW5lZCwgdHJ1ZSwgJ2hlaicsIG51
bGwsIGZhbHNlLCAwXTsKKyAgICAgICAgZGVsZXRlIHRlc3RTdWJqZWN0WzFdOworICAgIH0pOwor
ICAgIGZ1bmN0aW9uIGNyZWF0ZUFycmF5TGlrZUZyb21BcnJheShhcnIpIHsKKyAgICAgICAgdmFy
IG8gPSB7fTsKKyAgICAgICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChhcnIsIGZ1bmN0
aW9uKGUsIGkpIHsKKyAgICAgICAgICAgIG9baV09ZTsKKyAgICAgICAgfSk7CisgICAgICAgIG8u
bGVuZ3RoID0gYXJyLmxlbmd0aDsKKyAgICAgICAgcmV0dXJuIG87CisgICAgfTsKKyAgICAKKyAg
ICBkZXNjcmliZSgnZm9yRWFjaCcsIGZ1bmN0aW9uKCkgeworICAgICAgICAidXNlIHN0cmljdCI7
CisgICAgICAgIHZhciBleHBlY3RlZCwgYWN0dWFsOworICAgICAgICAKKyAgICAgICAgYmVmb3Jl
RWFjaChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGV4cGVjdGVkID0gezA6MiwgMjogdW5kZWZp
bmVkLCAzOnRydWUsIDQ6ICdoZWonLCA1Om51bGwsIDY6ZmFsc2UsIDc6MCB9OworICAgICAgICAg
ICAgYWN0dWFsID0ge307CisgICAgICAgIH0pOworICAgICAgICBpdCgnc2hvdWxkIHBhc3MgdGhl
IHJpZ2h0IHBhcmFtZXRlcnMnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHZhciBjYWxsYmFj
ayA9IGphc21pbmUuY3JlYXRlU3B5KCdjYWxsYmFjaycpLAorICAgICAgICAgICAgICAgIGFycmF5
ID0gWycxJ107CisgICAgICAgICAgICBhcnJheS5mb3JFYWNoKGNhbGxiYWNrKTsKKyAgICAgICAg
ICAgIGV4cGVjdChjYWxsYmFjaykudG9IYXZlQmVlbkNhbGxlZFdpdGgoJzEnLCAwLCBhcnJheSk7
CisgICAgICAgIH0pOworICAgICAgICBpdCgnc2hvdWxkIG5vdCBhZmZlY3QgZWxlbWVudHMgYWRk
ZWQgdG8gdGhlIGFycmF5IGFmdGVyIGl0IGhhcyBiZWd1bicsIGZ1bmN0aW9uKCkgeworICAgICAg
ICAgICAgdmFyIGFyciA9IFsxLDIsM10sCisgICAgICAgICAgICAgICAgaSA9IDA7CisgICAgICAg
ICAgICBhcnIuZm9yRWFjaChmdW5jdGlvbihhKSB7CisgICAgICAgICAgICAgICAgaSsrOworICAg
ICAgICAgICAgICAgIGFyci5wdXNoKGErMyk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAg
IGV4cGVjdChhcnIpLnRvRXF1YWwoWzEsMiwzLDQsNSw2XSk7CisgICAgICAgICAgICBleHBlY3Qo
aSkudG9CZSgzKTsKKyAgICAgICAgfSk7CisgICAgICAgIAorICAgICAgICBpdCgnc2hvdWxkIHNl
dCB0aGUgcmlnaHQgY29udGV4dCB3aGVuIGdpdmVuIG5vbmUnLCBmdW5jdGlvbigpIHsKKyAgICAg
ICAgICAgIHZhciBjb250ZXh0OworICAgICAgICAgICAgWzFdLmZvckVhY2goZnVuY3Rpb24oKSB7
Y29udGV4dCA9IHRoaXM7fSk7CisgICAgICAgICAgICBleHBlY3QoY29udGV4dCkudG9CZShmdW5j
dGlvbigpIHtyZXR1cm4gdGhpc30uY2FsbCgpKTsKKyAgICAgICAgfSk7CisgICAgICAgIGl0KCdz
aG91bGQgaXRlcmF0ZSBhbGwnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHRlc3RTdWJqZWN0
LmZvckVhY2goZnVuY3Rpb24ob2JqLCBpbmRleCkgeworICAgICAgICAgICAgICAgIGFjdHVhbFtp
bmRleF0gPSBvYmo7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGV4cGVjdChhY3R1YWwp
LnRvRXhhY3RseU1hdGNoKGV4cGVjdGVkKTsKKyAgICAgICAgfSk7CisgICAgICAgIGl0KCdzaG91
bGQgaXRlcmF0ZSBhbGwgdXNpbmcgYSBjb250ZXh0JywgZnVuY3Rpb24oKSB7CisgICAgICAgICAg
ICB2YXIgbyA9IHsgYTogYWN0dWFsIH07CisgICAgCisgICAgICAgICAgICB0ZXN0U3ViamVjdC5m
b3JFYWNoKGZ1bmN0aW9uKG9iaiwgaW5kZXgpIHsKKyAgICAgICAgICAgICAgICB0aGlzLmFbaW5k
ZXhdID0gb2JqOworICAgICAgICAgICAgfSwgbyk7CisgICAgICAgICAgICBleHBlY3QoYWN0dWFs
KS50b0V4YWN0bHlNYXRjaChleHBlY3RlZCk7CisgICAgICAgIH0pOworICAgICAgICAKKyAgICAg
ICAgaXQoJ3Nob3VsZCBpdGVyYXRlIGFsbCBpbiBhbiBhcnJheS1saWtlIG9iamVjdCcsIGZ1bmN0
aW9uKCkgeworICAgICAgICAgICAgdmFyIHRzID0gY3JlYXRlQXJyYXlMaWtlRnJvbUFycmF5KHRl
c3RTdWJqZWN0KTsKKyAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwodHMs
IGZ1bmN0aW9uKG9iaiwgaW5kZXgpIHsKKyAgICAgICAgICAgICAgICBhY3R1YWxbaW5kZXhdID0g
b2JqOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBleHBlY3QoYWN0dWFsKS50b0V4YWN0
bHlNYXRjaChleHBlY3RlZCk7CisgICAgICAgIH0pOworICAgICAgICBpdCgnc2hvdWxkIGl0ZXJh
dGUgYWxsIGluIGFuIGFycmF5LWxpa2Ugb2JqZWN0IHVzaW5nIGEgY29udGV4dCcsIGZ1bmN0aW9u
KCkgeworICAgICAgICAgICAgdmFyIHRzID0gY3JlYXRlQXJyYXlMaWtlRnJvbUFycmF5KHRlc3RT
dWJqZWN0KSwKKyAgICAgICAgICAgICAgICBvID0geyBhOiBhY3R1YWwgfTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbCh0cywgZnVuY3Rpb24o
b2JqLCBpbmRleCkgeworICAgICAgICAgICAgICAgIHRoaXMuYVtpbmRleF0gPSBvYmo7CisgICAg
ICAgICAgICB9LCBvKTsKKyAgICAgICAgICAgIGV4cGVjdChhY3R1YWwpLnRvRXhhY3RseU1hdGNo
KGV4cGVjdGVkKTsKKyAgICAgICAgfSk7CisgICAgfSk7CisgICAgZGVzY3JpYmUoJ3NvbWUnLCBm
dW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGFjdHVhbCwgZXhwZWN0ZWQsIG51bWJlck9mUnVuczsK
KyAgICAgICAgCisgICAgICAgIGJlZm9yZUVhY2goZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBl
eHBlY3RlZCA9IHswOjIsIDI6IHVuZGVmaW5lZCwgMzp0cnVlIH07CisgICAgICAgICAgICBhY3R1
YWwgPSB7fTsKKyAgICAgICAgICAgIG51bWJlck9mUnVucyA9IDA7CisgICAgICAgIH0pOworICAg
ICAgICAKKyAgICAgICAgaXQoJ3Nob3VsZCBwYXNzIHRoZSBjb3JyZWN0IHZhbHVlcyBhbG9uZyB0
byB0aGUgY2FsbGJhY2snLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHZhciBjYWxsYmFjayA9
IGphc21pbmUuY3JlYXRlU3B5KCdjYWxsYmFjaycpOworICAgICAgICAgICAgdmFyIGFycmF5ID0g
WycxJ107CisgICAgICAgICAgICBhcnJheS5zb21lKGNhbGxiYWNrKTsKKyAgICAgICAgICAgIGV4
cGVjdChjYWxsYmFjaykudG9IYXZlQmVlbkNhbGxlZFdpdGgoJzEnLCAwLCBhcnJheSk7CisgICAg
ICAgIH0pOworICAgICAgICBpdCgnc2hvdWxkIG5vdCBhZmZlY3QgZWxlbWVudHMgYWRkZWQgdG8g
dGhlIGFycmF5IGFmdGVyIGl0IGhhcyBiZWd1bicsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAg
dmFyIGFyciA9IFsxLDIsM10sCisgICAgICAgICAgICAgICAgaSA9IDA7CisgICAgICAgICAgICBh
cnIuc29tZShmdW5jdGlvbihhKSB7CisgICAgICAgICAgICAgICAgaSsrOworICAgICAgICAgICAg
ICAgIGFyci5wdXNoKGErMyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGkgPiAzOworICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgICBleHBlY3QoYXJyKS50b0VxdWFsKFsxLDIsMyw0LDUsNl0p
OworICAgICAgICAgICAgZXhwZWN0KGkpLnRvQmUoMyk7CisgICAgICAgIH0pOworICAgICAgICBp
dCgnc2hvdWxkIHNldCB0aGUgcmlnaHQgY29udGV4dCB3aGVuIGdpdmVuIG5vbmUnLCBmdW5jdGlv
bigpIHsKKyAgICAgICAgICAgIHZhciBjb250ZXh0OworICAgICAgICAgICAgWzFdLnNvbWUoZnVu
Y3Rpb24oKSB7Y29udGV4dCA9IHRoaXM7fSk7CisgICAgICAgICAgICBleHBlY3QoY29udGV4dCku
dG9CZShmdW5jdGlvbigpIHtyZXR1cm4gdGhpc30uY2FsbCgpKTsKKyAgICAgICAgfSk7CisgICAg
ICAgIAorICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSBpZiBpdCBydW5zIHRvIHRoZSBl
bmQnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGFjdHVhbCA9IHRlc3RTdWJqZWN0LnNvbWUo
ZnVuY3Rpb24oKSB7fSk7CisgICAgICAgICAgICBleHBlY3QoYWN0dWFsKS50b0JlRmFsc3koKTsK
KyAgICAgICAgfSk7CisgICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgaWYgaXQgaXMgc3Rv
cHBlZCBzb21ld2hlcmUnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGFjdHVhbCA9IHRlc3RT
dWJqZWN0LnNvbWUoZnVuY3Rpb24oKSB7IHJldHVybiB0cnVlOyB9KTsKKyAgICAgICAgICAgIGV4
cGVjdChhY3R1YWwpLnRvQmVUcnV0aHkoKTsKKyAgICAgICAgfSk7CisgICAgICAgIGl0KCdzaG91
bGQgcmV0dXJuIGZhbHNlIGlmIHRoZXJlIGFyZSBubyBlbGVtZW50cycsIGZ1bmN0aW9uKCkgewor
ICAgICAgICAgICAgYWN0dWFsID0gW10uc29tZShmdW5jdGlvbigpIHsgcmV0dXJuIHRydWU7IH0p
OworICAgICAgICAgICAgZXhwZWN0KGFjdHVhbCkudG9CZUZhbHN5KCk7CisgICAgICAgIH0pOwor
ICAgICAgICAKKyAgICAgICAgaXQoJ3Nob3VsZCBzdG9wIGFmdGVyIDMgZWxlbWVudHMnLCBmdW5j
dGlvbigpIHsKKyAgICAgICAgICAgIHRlc3RTdWJqZWN0LnNvbWUoZnVuY3Rpb24ob2JqLCBpbmRl
eCkgeworICAgICAgICAgICAgICAgIGFjdHVhbFtpbmRleF0gPSBvYmo7CisgICAgICAgICAgICAg
ICAgbnVtYmVyT2ZSdW5zICs9IDE7CisgICAgICAgICAgICAgICAgaWYobnVtYmVyT2ZSdW5zID09
IDMpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0pOworICAgICAg
ICAgICAgZXhwZWN0KGFjdHVhbCkudG9FeGFjdGx5TWF0Y2goZXhwZWN0ZWQpOworICAgICAgICB9
KTsKKyAgICAgICAgaXQoJ3Nob3VsZCBzdG9wIGFmdGVyIDMgZWxlbWVudHMgdXNpbmcgYSBjb250
ZXh0JywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICB2YXIgbyA9IHsgYTogYWN0dWFsIH07Cisg
ICAgICAgICAgICB0ZXN0U3ViamVjdC5zb21lKGZ1bmN0aW9uKG9iaiwgaW5kZXgpIHsKKyAgICAg
ICAgICAgICAgICB0aGlzLmFbaW5kZXhdID0gb2JqOworICAgICAgICAgICAgICAgIG51bWJlck9m
UnVucyArPSAxOworICAgICAgICAgICAgICAgIGlmKG51bWJlck9mUnVucyA9PSAzKSB7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9LCBvKTsKKyAgICAgICAgICAgIGV4
cGVjdChhY3R1YWwpLnRvRXhhY3RseU1hdGNoKGV4cGVjdGVkKTsKKyAgICAgICAgfSk7CisgICAg
CisgICAgICAgIGl0KCdzaG91bGQgc3RvcCBhZnRlciAzIGVsZW1lbnRzIGluIGFuIGFycmF5LWxp
a2Ugb2JqZWN0JywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICB2YXIgdHMgPSBjcmVhdGVBcnJh
eUxpa2VGcm9tQXJyYXkodGVzdFN1YmplY3QpOworICAgICAgICAgICAgQXJyYXkucHJvdG90eXBl
LnNvbWUuY2FsbCh0cywgZnVuY3Rpb24ob2JqLCBpbmRleCkgeworICAgICAgICAgICAgICAgIGFj
dHVhbFtpbmRleF0gPSBvYmo7CisgICAgICAgICAgICAgICAgbnVtYmVyT2ZSdW5zICs9IDE7Cisg
ICAgICAgICAgICAgICAgaWYobnVtYmVyT2ZSdW5zID09IDMpIHsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgZXhwZWN0KGFjdHVhbCkudG9F
eGFjdGx5TWF0Y2goZXhwZWN0ZWQpOworICAgICAgICB9KTsKKyAgICAgICAgaXQoJ3Nob3VsZCBz
dG9wIGFmdGVyIDMgZWxlbWVudHMgaW4gYW4gYXJyYXktbGlrZSBvYmplY3QgdXNpbmcgYSBjb250
ZXh0JywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICB2YXIgdHMgPSBjcmVhdGVBcnJheUxpa2VG
cm9tQXJyYXkodGVzdFN1YmplY3QpOworICAgICAgICAgICAgdmFyIG8gPSB7IGE6IGFjdHVhbCB9
OworICAgICAgICAgICAgQXJyYXkucHJvdG90eXBlLnNvbWUuY2FsbCh0cywgZnVuY3Rpb24ob2Jq
LCBpbmRleCkgeworICAgICAgICAgICAgICAgIHRoaXMuYVtpbmRleF0gPSBvYmo7CisgICAgICAg
ICAgICAgICAgbnVtYmVyT2ZSdW5zICs9IDE7CisgICAgICAgICAgICAgICAgaWYobnVtYmVyT2ZS
dW5zID09IDMpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0sIG8p
OworICAgICAgICAgICAgZXhwZWN0KGFjdHVhbCkudG9FeGFjdGx5TWF0Y2goZXhwZWN0ZWQpOwor
ICAgICAgICB9KTsKKyAgICB9KTsKKyAgICBkZXNjcmliZSgnZXZlcnknLCBmdW5jdGlvbigpIHsK
KyAgICAgICAgdmFyIGFjdHVhbCwgZXhwZWN0ZWQsIG51bWJlck9mUnVuczsKKyAgICAgICAgCisg
ICAgICAgIGJlZm9yZUVhY2goZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBleHBlY3RlZCA9IHsw
OjIsIDI6IHVuZGVmaW5lZCwgMzp0cnVlIH07CisgICAgICAgICAgICBhY3R1YWwgPSB7fTsKKyAg
ICAgICAgICAgIG51bWJlck9mUnVucyA9IDA7CisgICAgICAgIH0pOworICAgICAgICAKKyAgICAg
ICAgaXQoJ3Nob3VsZCBwYXNzIHRoZSBjb3JyZWN0IHZhbHVlcyBhbG9uZyB0byB0aGUgY2FsbGJh
Y2snLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGphc21pbmUuY3Jl
YXRlU3B5KCdjYWxsYmFjaycpOworICAgICAgICAgICAgdmFyIGFycmF5ID0gWycxJ107CisgICAg
ICAgICAgICBhcnJheS5ldmVyeShjYWxsYmFjayk7CisgICAgICAgICAgICBleHBlY3QoY2FsbGJh
Y2spLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKCcxJywgMCwgYXJyYXkpOworICAgICAgICB9KTsKKyAg
ICAgICAgaXQoJ3Nob3VsZCBub3QgYWZmZWN0IGVsZW1lbnRzIGFkZGVkIHRvIHRoZSBhcnJheSBh
ZnRlciBpdCBoYXMgYmVndW4nLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHZhciBhcnIgPSBb
MSwyLDNdLAorICAgICAgICAgICAgICAgIGkgPSAwOworICAgICAgICAgICAgYXJyLmV2ZXJ5KGZ1
bmN0aW9uKGEpIHsKKyAgICAgICAgICAgICAgICBpKys7CisgICAgICAgICAgICAgICAgYXJyLnB1
c2goYSszKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gaSA8PSAzOworICAgICAgICAgICAgfSk7
CisgICAgICAgICAgICBleHBlY3QoYXJyKS50b0VxdWFsKFsxLDIsMyw0LDUsNl0pOworICAgICAg
ICAgICAgZXhwZWN0KGkpLnRvQmUoMyk7CisgICAgICAgIH0pOworICAgICAgICBpdCgnc2hvdWxk
IHNldCB0aGUgcmlnaHQgY29udGV4dCB3aGVuIGdpdmVuIG5vbmUnLCBmdW5jdGlvbigpIHsKKyAg
ICAgICAgICAgIHZhciBjb250ZXh0OworICAgICAgICAgICAgWzFdLmV2ZXJ5KGZ1bmN0aW9uKCkg
e2NvbnRleHQgPSB0aGlzO30pOworICAgICAgICAgICAgZXhwZWN0KGNvbnRleHQpLnRvQmUoZnVu
Y3Rpb24oKSB7cmV0dXJuIHRoaXN9LmNhbGwoKSk7CisgICAgICAgIH0pOworICAgICAgICAKKyAg
ICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSBpZiB0aGUgYXJyYXkgaXMgZW1wdHknLCBmdW5j
dGlvbigpIHsKKyAgICAgICAgICAgIGFjdHVhbCA9IFtdLmV2ZXJ5KGZ1bmN0aW9uKCkgeyByZXR1
cm4gdHJ1ZTsgfSk7CisgICAgICAgICAgICBleHBlY3QoYWN0dWFsKS50b0JlVHJ1dGh5KCk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGFjdHVhbCA9IFtdLmV2ZXJ5KGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gZmFsc2U7IH0pOworICAgICAgICAgICAgZXhwZWN0KGFjdHVhbCkudG9CZVRydXRoeSgp
OworICAgICAgICB9KTsKKyAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSBpZiBpdCBydW5z
IHRvIHRoZSBlbmQnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGFjdHVhbCA9IFsxLDIsM10u
ZXZlcnkoZnVuY3Rpb24oKSB7IHJldHVybiB0cnVlOyB9KTsKKyAgICAgICAgICAgIGV4cGVjdChh
Y3R1YWwpLnRvQmVUcnV0aHkoKTsKKyAgICAgICAgfSk7CisgICAgICAgIGl0KCdzaG91bGQgcmV0
dXJuIGZhbHNlIGlmIGl0IGlzIHN0b3BwZWQgYmVmb3JlIHRoZSBlbmQnLCBmdW5jdGlvbigpIHsK
KyAgICAgICAgICAgIGFjdHVhbCA9IFsxLDIsM10uZXZlcnkoZnVuY3Rpb24oKSB7IHJldHVybiBm
YWxzZTsgfSk7CisgICAgICAgICAgICBleHBlY3QoYWN0dWFsKS50b0JlRmFsc3koKTsKKyAgICAg
ICAgfSk7CisgICAgICAgIAorICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBhZnRlciAzIGVsZW1l
bnRzJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICB0ZXN0U3ViamVjdC5ldmVyeShmdW5jdGlv
bihvYmosIGluZGV4KSB7CisgICAgICAgICAgICAgICAgYWN0dWFsW2luZGV4XSA9IG9iajsKKyAg
ICAgICAgICAgICAgICBudW1iZXJPZlJ1bnMgKz0gMTsKKyAgICAgICAgICAgICAgICBpZihudW1i
ZXJPZlJ1bnMgPT0gMykgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAg
fSk7CisgICAgICAgICAgICBleHBlY3QoYWN0dWFsKS50b0V4YWN0bHlNYXRjaChleHBlY3RlZCk7
CisgICAgICAgIH0pOworICAgICAgICBpdCgnc2hvdWxkIHN0b3AgYWZ0ZXIgMyBlbGVtZW50cyB1
c2luZyBhIGNvbnRleHQnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHZhciBvID0geyBhOiBh
Y3R1YWwgfTsKKyAgICAgICAgICAgIHRlc3RTdWJqZWN0LmV2ZXJ5KGZ1bmN0aW9uKG9iaiwgaW5k
ZXgpIHsKKyAgICAgICAgICAgICAgICB0aGlzLmFbaW5kZXhdID0gb2JqOworICAgICAgICAgICAg
ICAgIG51bWJlck9mUnVucyArPSAxOworICAgICAgICAgICAgICAgIGlmKG51bWJlck9mUnVucyA9
PSAzKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9LCBvKTsKKyAg
ICAgICAgICAgIGV4cGVjdChhY3R1YWwpLnRvRXhhY3RseU1hdGNoKGV4cGVjdGVkKTsKKyAgICAg
ICAgfSk7CisgICAgCisgICAgICAgIGl0KCdzaG91bGQgc3RvcCBhZnRlciAzIGVsZW1lbnRzIGlu
IGFuIGFycmF5LWxpa2Ugb2JqZWN0JywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICB2YXIgdHMg
PSBjcmVhdGVBcnJheUxpa2VGcm9tQXJyYXkodGVzdFN1YmplY3QpOworICAgICAgICAgICAgQXJy
YXkucHJvdG90eXBlLmV2ZXJ5LmNhbGwodHMsIGZ1bmN0aW9uKG9iaiwgaW5kZXgpIHsKKyAgICAg
ICAgICAgICAgICBhY3R1YWxbaW5kZXhdID0gb2JqOworICAgICAgICAgICAgICAgIG51bWJlck9m
UnVucyArPSAxOworICAgICAgICAgICAgICAgIGlmKG51bWJlck9mUnVucyA9PSAzKSB7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGV4cGVj
dChhY3R1YWwpLnRvRXhhY3RseU1hdGNoKGV4cGVjdGVkKTsKKyAgICAgICAgfSk7CisgICAgICAg
IGl0KCdzaG91bGQgc3RvcCBhZnRlciAzIGVsZW1lbnRzIGluIGFuIGFycmF5LWxpa2Ugb2JqZWN0
IHVzaW5nIGEgY29udGV4dCcsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgdmFyIHRzID0gY3Jl
YXRlQXJyYXlMaWtlRnJvbUFycmF5KHRlc3RTdWJqZWN0KTsKKyAgICAgICAgICAgIHZhciBvID0g
eyBhOiBhY3R1YWwgfTsKKyAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5ldmVyeS5jYWxsKHRz
LCBmdW5jdGlvbihvYmosIGluZGV4KSB7CisgICAgICAgICAgICAgICAgdGhpcy5hW2luZGV4XSA9
IG9iajsKKyAgICAgICAgICAgICAgICBudW1iZXJPZlJ1bnMgKz0gMTsKKyAgICAgICAgICAgICAg
ICBpZihudW1iZXJPZlJ1bnMgPT0gMykgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICAgICAgfSwgbyk7CisgICAgICAgICAgICBleHBlY3QoYWN0dWFsKS50b0V4YWN0bHlNYXRj
aChleHBlY3RlZCk7CisgICAgICAgIH0pOworICAgIH0pOworICAgIAorICAgIGRlc2NyaWJlKCdp
bmRleE9mJywgZnVuY3Rpb24oKSB7CisgICAgICAgICJ1c2Ugc3RyaWN0IjsKKyAgICAgICAgdmFy
IGFjdHVhbCwgZXhwZWN0ZWQsIHRlc3RTdWJqZWN0OworICAgICAgICAKKyAgICAgICAgYmVmb3Jl
RWFjaChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHRlc3RTdWJqZWN0ID0gWzIsIDMsIHVuZGVm
aW5lZCwgdHJ1ZSwgJ2hlaicsIG51bGwsIDIsIGZhbHNlLCAwXTsKKyAgICAgICAgICAgIGRlbGV0
ZSB0ZXN0U3ViamVjdFsxXTsKKyAgICAKKyAgICAgICAgfSk7CisgICAgCisgICAgICAgIGl0KCdz
aG91bGQgZmluZCB0aGUgZWxlbWVudCcsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgZXhwZWN0
ZWQgPSA0OworICAgICAgICAgICAgYWN0dWFsID0gdGVzdFN1YmplY3QuaW5kZXhPZignaGVqJyk7
CisgICAgICAgICAgICBleHBlY3QoYWN0dWFsKS50b0VxdWFsKGV4cGVjdGVkKTsKKyAgICAgICAg
fSk7CisgICAgICAgIGl0KCdzaG91bGQgbm90IGZpbmQgdGhlIGVsZW1lbnQnLCBmdW5jdGlvbigp
IHsKKyAgICAgICAgICAgIGV4cGVjdGVkID0gLTE7CisgICAgICAgICAgICBhY3R1YWwgPSB0ZXN0
U3ViamVjdC5pbmRleE9mKCdtdXMnKTsKKyAgICAgICAgICAgIGV4cGVjdChhY3R1YWwpLnRvRXF1
YWwoZXhwZWN0ZWQpOworICAgICAgICB9KTsKKyAgICAgICAgaXQoJ3Nob3VsZCBmaW5kIHVuZGVm
aW5lZCBhcyB3ZWxsJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBleHBlY3RlZCA9IC0xOwor
ICAgICAgICAgICAgYWN0dWFsID0gdGVzdFN1YmplY3QuaW5kZXhPZih1bmRlZmluZWQpOworICAg
ICAgICAgICAgZXhwZWN0KGFjdHVhbCkubm90LnRvRXF1YWwoZXhwZWN0ZWQpOworICAgICAgICB9
KTsKKyAgICAgICAgaXQoJ3Nob3VsZCBza2lwIHVuc2V0IGluZGV4ZXMnLCBmdW5jdGlvbigpIHsK
KyAgICAgICAgICAgIGV4cGVjdGVkID0gMjsKKyAgICAgICAgICAgIGFjdHVhbCA9IHRlc3RTdWJq
ZWN0LmluZGV4T2YodW5kZWZpbmVkKTsKKyAgICAgICAgICAgIGV4cGVjdChhY3R1YWwpLnRvRXF1
YWwoZXhwZWN0ZWQpOworICAgICAgICB9KTsKKyAgICAgICAgaXQoJ3Nob3VsZCB1c2UgYSBzdHJp
Y3QgdGVzdCcsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgYWN0dWFsID0gdGVzdFN1YmplY3Qu
aW5kZXhPZihudWxsKTsKKyAgICAgICAgICAgIGV4cGVjdChhY3R1YWwpLnRvRXF1YWwoNSk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGFjdHVhbCA9IHRlc3RTdWJqZWN0LmluZGV4T2YoJzIn
KTsKKyAgICAgICAgICAgIGV4cGVjdChhY3R1YWwpLnRvRXF1YWwoLTEpOworICAgICAgICB9KTsK
KyAgICAgICAgaXQoJ3Nob3VsZCBza2lwIHRoZSBmaXJzdCBpZiBmcm9tSW5kZXggaXMgc2V0Jywg
ZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBleHBlY3QodGVzdFN1YmplY3QuaW5kZXhPZigyLCAy
KSkudG9FcXVhbCg2KTsKKyAgICAgICAgICAgIGV4cGVjdCh0ZXN0U3ViamVjdC5pbmRleE9mKDIs
IDApKS50b0VxdWFsKDApOworICAgICAgICAgICAgZXhwZWN0KHRlc3RTdWJqZWN0LmluZGV4T2Yo
MiwgNikpLnRvRXF1YWwoNik7CisgICAgICAgIH0pOworICAgICAgICBpdCgnc2hvdWxkIHdvcmsg
d2l0aCBuZWdhdGl2ZSBmcm9tSW5kZXgnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGV4cGVj
dCh0ZXN0U3ViamVjdC5pbmRleE9mKDIsIC0zKSkudG9FcXVhbCg2KTsKKyAgICAgICAgICAgIGV4
cGVjdCh0ZXN0U3ViamVjdC5pbmRleE9mKDIsIC05KSkudG9FcXVhbCgwKTsKKyAgICAgICAgfSk7
CisgICAgICAgIGl0KCdzaG91bGQgd29yayB3aXRoIGZyb21JbmRleCBiZWluZyBncmVhdGVyIHRo
YW4gdGhlIGxlbmd0aCcsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgZXhwZWN0KHRlc3RTdWJq
ZWN0LmluZGV4T2YoJ2hlaicsIDIwKSkudG9FcXVhbCgtMSk7CisgICAgICAgIH0pOworICAgICAg
ICBpdCgnc2hvdWxkIHdvcmsgd2l0aCBmcm9tSW5kZXggYmVpbmcgbmVnYXRpdmUgYW5kIGdyZWF0
ZXIgdGhhbiB0aGUgbGVuZ3RoJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBleHBlY3QodGVz
dFN1YmplY3QuaW5kZXhPZignaGVqJywgLTIwKSkudG9FcXVhbCg0KTsKKyAgICAgICAgfSk7Cisg
ICAgICAgIAorICAgICAgICBkZXNjcmliZSgnQXJyYXktbGlrZScsIGZ1bmN0aW9uIEFycmF5TGlr
ZSgpIHsKKyAgICAgICAgICAgIHZhciBpbmRleE9mID0gQXJyYXkucHJvdG90eXBlLmluZGV4T2Ys
CisgICAgICAgICAgICAgICAgdGVzdEFMOworICAgICAgICAgICAgYmVmb3JlRWFjaChmdW5jdGlv
biBiZWZvcmVFYWNoKCkgeworICAgICAgICAgICAgICAgIHRlc3RBTCA9IHt9OworICAgICAgICAg
ICAgICAgIHRlc3RTdWJqZWN0ID0gWzIsIDMsIHVuZGVmaW5lZCwgdHJ1ZSwgJ2hlaicsIG51bGws
IDIsIGZhbHNlLCAwXTsKKyAgICAgICAgICAgICAgICB0ZXN0U3ViamVjdC5mb3JFYWNoKGZ1bmN0
aW9uIChvLGkpIHsKKyAgICAgICAgICAgICAgICAgICAgdGVzdEFMW2ldID0gbzsKKyAgICAgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICB0ZXN0QUwubGVuZ3RoID0gdGVzdFN1YmplY3Qu
bGVuZ3RoOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBpdCgnc2hvdWxkIGZpbmQgdGhl
IGVsZW1lbnQgKGFycmF5LWxpa2UpJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgZXhw
ZWN0ZWQgPSA0OworICAgICAgICAgICAgICAgIGFjdHVhbCA9IGluZGV4T2YuY2FsbCh0ZXN0QUws
ICdoZWonKTsKKyAgICAgICAgICAgICAgICBleHBlY3QoYWN0dWFsKS50b0VxdWFsKGV4cGVjdGVk
KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgaXQoJ3Nob3VsZCBub3QgZmluZCB0aGUg
ZWxlbWVudCAoYXJyYXktbGlrZSknLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBleHBl
Y3RlZCA9IC0xOworICAgICAgICAgICAgICAgIGFjdHVhbCA9IGluZGV4T2YuY2FsbCh0ZXN0QUws
ICdtdXMnKTsKKyAgICAgICAgICAgICAgICBleHBlY3QoYWN0dWFsKS50b0VxdWFsKGV4cGVjdGVk
KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgaXQoJ3Nob3VsZCBmaW5kIHVuZGVmaW5l
ZCBhcyB3ZWxsIChhcnJheS1saWtlKScsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGV4
cGVjdGVkID0gLTE7CisgICAgICAgICAgICAgICAgYWN0dWFsID0gaW5kZXhPZi5jYWxsKHRlc3RB
TCwgdW5kZWZpbmVkKTsKKyAgICAgICAgICAgICAgICBleHBlY3QoYWN0dWFsKS5ub3QudG9FcXVh
bChleHBlY3RlZCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGl0KCdzaG91bGQgc2tp
cCB1bnNldCBpbmRleGVzIChhcnJheS1saWtlKScsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAg
ICAgIGV4cGVjdGVkID0gMjsKKyAgICAgICAgICAgICAgICBhY3R1YWwgPSBpbmRleE9mLmNhbGwo
dGVzdEFMLCB1bmRlZmluZWQpOworICAgICAgICAgICAgICAgIGV4cGVjdChhY3R1YWwpLnRvRXF1
YWwoZXhwZWN0ZWQpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBpdCgnc2hvdWxkIHVz
ZSBhIHN0cmljdCB0ZXN0IChhcnJheS1saWtlKScsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAg
ICAgIGFjdHVhbCA9IEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwodGVzdEFMLCBudWxsKTsK
KyAgICAgICAgICAgICAgICBleHBlY3QoYWN0dWFsKS50b0VxdWFsKDUpOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIGFjdHVhbCA9IEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNh
bGwodGVzdEFMLCAnMicpOworICAgICAgICAgICAgICAgIGV4cGVjdChhY3R1YWwpLnRvRXF1YWwo
LTEpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBpdCgnc2hvdWxkIHNraXAgdGhlIGZp
cnN0IGlmIGZyb21JbmRleCBpcyBzZXQgKGFycmF5LWxpa2UpJywgZnVuY3Rpb24oKSB7CisgICAg
ICAgICAgICAgICAgZXhwZWN0KGluZGV4T2YuY2FsbCh0ZXN0QUwsIDIsIDIpKS50b0VxdWFsKDYp
OworICAgICAgICAgICAgICAgIGV4cGVjdChpbmRleE9mLmNhbGwodGVzdEFMLCAyLCAwKSkudG9F
cXVhbCgwKTsKKyAgICAgICAgICAgICAgICBleHBlY3QoaW5kZXhPZi5jYWxsKHRlc3RBTCwgMiwg
NikpLnRvRXF1YWwoNik7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGl0KCdzaG91bGQg
d29yayB3aXRoIG5lZ2F0aXZlIGZyb21JbmRleCAoYXJyYXktbGlrZSknLCBmdW5jdGlvbigpIHsK
KyAgICAgICAgICAgICAgICBleHBlY3QoaW5kZXhPZi5jYWxsKHRlc3RBTCwgMiwgLTMpKS50b0Vx
dWFsKDYpOworICAgICAgICAgICAgICAgIGV4cGVjdChpbmRleE9mLmNhbGwodGVzdEFMLCAyLCAt
OSkpLnRvRXF1YWwoMCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGl0KCdzaG91bGQg
d29yayB3aXRoIGZyb21JbmRleCBiZWluZyBncmVhdGVyIHRoYW4gdGhlIGxlbmd0aCAoYXJyYXkt
bGlrZSknLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBleHBlY3QoaW5kZXhPZi5jYWxs
KHRlc3RBTCwgJ2hlaicsIDIwKSkudG9FcXVhbCgtMSk7CisgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgIGl0KCdzaG91bGQgd29yayB3aXRoIGZyb21JbmRleCBiZWluZyBuZWdhdGl2ZSBhbmQg
Z3JlYXRlciB0aGFuIHRoZSBsZW5ndGggKGFycmF5LWxpa2UpJywgZnVuY3Rpb24oKSB7CisgICAg
ICAgICAgICAgICAgZXhwZWN0KGluZGV4T2YuY2FsbCh0ZXN0QUwsICdoZWonLCAtMjApKS50b0Vx
dWFsKDQpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgIH0pOworICAgIGRlc2Ny
aWJlKCdsYXN0SW5kZXhPZicsIGZ1bmN0aW9uKCkgeworICAgICAgICAidXNlIHN0cmljdCI7Cisg
ICAgICAgIHZhciBhY3R1YWwsIGV4cGVjdGVkLCB0ZXN0U3ViamVjdCwgdGVzdEFMOworICAgICAg
ICAKKyAgICAgICAgYmVmb3JlRWFjaChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHRlc3RTdWJq
ZWN0ID0gWzIsIDMsIHVuZGVmaW5lZCwgdHJ1ZSwgJ2hlaicsIG51bGwsIDIsIDMsIGZhbHNlLCAw
XTsKKyAgICAgICAgICAgIGRlbGV0ZSB0ZXN0U3ViamVjdFsxXTsKKyAgICAgICAgICAgIGRlbGV0
ZSB0ZXN0U3ViamVjdFs3XTsKKyAgICAgICAgfSk7CisgICAgICAgIGRlc2NyaWJlKCdBcnJheScs
IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgaXQoJ3Nob3VsZCBmaW5kIHRoZSBlbGVtZW50Jywg
ZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSA0OworICAgICAgICAgICAg
ICAgIGFjdHVhbCA9IHRlc3RTdWJqZWN0Lmxhc3RJbmRleE9mKCdoZWonKTsKKyAgICAgICAgICAg
ICAgICBleHBlY3QoYWN0dWFsKS50b0VxdWFsKGV4cGVjdGVkKTsKKyAgICAgICAgICAgIH0pOwor
ICAgICAgICAgICAgaXQoJ3Nob3VsZCBub3QgZmluZCB0aGUgZWxlbWVudCcsIGZ1bmN0aW9uKCkg
eworICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gLTE7CisgICAgICAgICAgICAgICAgYWN0dWFs
ID0gdGVzdFN1YmplY3QubGFzdEluZGV4T2YoJ211cycpOworICAgICAgICAgICAgICAgIGV4cGVj
dChhY3R1YWwpLnRvRXF1YWwoZXhwZWN0ZWQpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAg
ICBpdCgnc2hvdWxkIGZpbmQgdW5kZWZpbmVkIGFzIHdlbGwnLCBmdW5jdGlvbigpIHsKKyAgICAg
ICAgICAgICAgICBleHBlY3RlZCA9IC0xOworICAgICAgICAgICAgICAgIGFjdHVhbCA9IHRlc3RT
dWJqZWN0Lmxhc3RJbmRleE9mKHVuZGVmaW5lZCk7CisgICAgICAgICAgICAgICAgZXhwZWN0KGFj
dHVhbCkubm90LnRvRXF1YWwoZXhwZWN0ZWQpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAg
ICBpdCgnc2hvdWxkIHNraXAgdW5zZXQgaW5kZXhlcycsIGZ1bmN0aW9uKCkgeworICAgICAgICAg
ICAgICAgIGV4cGVjdGVkID0gMjsKKyAgICAgICAgICAgICAgICBhY3R1YWwgPSB0ZXN0U3ViamVj
dC5sYXN0SW5kZXhPZih1bmRlZmluZWQpOworICAgICAgICAgICAgICAgIGV4cGVjdChhY3R1YWwp
LnRvRXF1YWwoZXhwZWN0ZWQpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBpdCgnc2hv
dWxkIHVzZSBhIHN0cmljdCB0ZXN0JywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgYWN0
dWFsID0gdGVzdFN1YmplY3QubGFzdEluZGV4T2YobnVsbCk7CisgICAgICAgICAgICAgICAgZXhw
ZWN0KGFjdHVhbCkudG9FcXVhbCg1KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBhY3R1YWwgPSB0ZXN0U3ViamVjdC5sYXN0SW5kZXhPZignMicpOworICAgICAgICAgICAgICAg
IGV4cGVjdChhY3R1YWwpLnRvRXF1YWwoLTEpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAg
ICBpdCgnc2hvdWxkIHNraXAgdGhlIGZpcnN0IGlmIGZyb21JbmRleCBpcyBzZXQnLCBmdW5jdGlv
bigpIHsKKyAgICAgICAgICAgICAgICBleHBlY3QodGVzdFN1YmplY3QubGFzdEluZGV4T2YoMiwg
MikpLnRvRXF1YWwoMCk7CisgICAgICAgICAgICAgICAgZXhwZWN0KHRlc3RTdWJqZWN0Lmxhc3RJ
bmRleE9mKDIsIDApKS50b0VxdWFsKDApOworICAgICAgICAgICAgICAgIGV4cGVjdCh0ZXN0U3Vi
amVjdC5sYXN0SW5kZXhPZigyLCA2KSkudG9FcXVhbCg2KTsKKyAgICAgICAgICAgIH0pOworICAg
ICAgICAgICAgaXQoJ3Nob3VsZCB3b3JrIHdpdGggbmVnYXRpdmUgZnJvbUluZGV4JywgZnVuY3Rp
b24oKSB7CisgICAgICAgICAgICAgICAgZXhwZWN0KHRlc3RTdWJqZWN0Lmxhc3RJbmRleE9mKDIs
IC0zKSkudG9FcXVhbCg2KTsKKyAgICAgICAgICAgICAgICBleHBlY3QodGVzdFN1YmplY3QubGFz
dEluZGV4T2YoMiwgLTkpKS50b0VxdWFsKDApOworICAgICAgICAgICAgfSk7CisgICAgICAgICAg
ICBpdCgnc2hvdWxkIHdvcmsgd2l0aCBmcm9tSW5kZXggYmVpbmcgZ3JlYXRlciB0aGFuIHRoZSBs
ZW5ndGgnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBleHBlY3QodGVzdFN1YmplY3Qu
bGFzdEluZGV4T2YoMiwgMjApKS50b0VxdWFsKDYpOworICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICBpdCgnc2hvdWxkIHdvcmsgd2l0aCBmcm9tSW5kZXggYmVpbmcgbmVnYXRpdmUgYW5kIGdy
ZWF0ZXIgdGhhbiB0aGUgbGVuZ3RoJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgZXhw
ZWN0KHRlc3RTdWJqZWN0Lmxhc3RJbmRleE9mKDIsIC0yMCkpLnRvRXF1YWwoLTEpOworICAgICAg
ICAgICAgfSk7CisgICAgICAgIH0pOworICAgIAorICAgICAgICBkZXNjcmliZSgnQXJyYXkgbGlr
ZScsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgdmFyIGxhc3RJbmRleE9mID0gQXJyYXkucHJv
dG90eXBlLmxhc3RJbmRleE9mLAorICAgICAgICAgICAgICAgIHRlc3RBTDsKKyAgICAgICAgICAg
IGJlZm9yZUVhY2goZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdGVzdEFMID0ge307Cisg
ICAgICAgICAgICAgICAgdGVzdFN1YmplY3QuZm9yRWFjaChmdW5jdGlvbiAobyxpKSB7CisgICAg
ICAgICAgICAgICAgICAgIHRlc3RBTFtpXSA9IG87CisgICAgICAgICAgICAgICAgfSk7CisgICAg
ICAgICAgICAgICAgdGVzdEFMLmxlbmd0aCA9IHRlc3RTdWJqZWN0Lmxlbmd0aDsKKyAgICAgICAg
ICAgIH0pOworICAgICAgICAgICAgaXQoJ3Nob3VsZCBmaW5kIHRoZSBlbGVtZW50IChhcnJheS1s
aWtlKScsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gNDsKKyAgICAg
ICAgICAgICAgICBhY3R1YWwgPSBsYXN0SW5kZXhPZi5jYWxsKHRlc3RBTCwgJ2hlaicpOworICAg
ICAgICAgICAgICAgIGV4cGVjdChhY3R1YWwpLnRvRXF1YWwoZXhwZWN0ZWQpOworICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgICBpdCgnc2hvdWxkIG5vdCBmaW5kIHRoZSBlbGVtZW50IChhcnJh
eS1saWtlKScsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gLTE7Cisg
ICAgICAgICAgICAgICAgYWN0dWFsID0gbGFzdEluZGV4T2YuY2FsbCh0ZXN0QUwsICdtdXMnKTsK
KyAgICAgICAgICAgICAgICBleHBlY3QoYWN0dWFsKS50b0VxdWFsKGV4cGVjdGVkKTsKKyAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgaXQoJ3Nob3VsZCBmaW5kIHVuZGVmaW5lZCBhcyB3ZWxs
IChhcnJheS1saWtlKScsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGV4cGVjdGVkID0g
LTE7CisgICAgICAgICAgICAgICAgYWN0dWFsID0gbGFzdEluZGV4T2YuY2FsbCh0ZXN0QUwsIHVu
ZGVmaW5lZCk7CisgICAgICAgICAgICAgICAgZXhwZWN0KGFjdHVhbCkubm90LnRvRXF1YWwoZXhw
ZWN0ZWQpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBpdCgnc2hvdWxkIHNraXAgdW5z
ZXQgaW5kZXhlcyAoYXJyYXktbGlrZSknLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBl
eHBlY3RlZCA9IDI7CisgICAgICAgICAgICAgICAgYWN0dWFsID0gbGFzdEluZGV4T2YuY2FsbCh0
ZXN0QUwsIHVuZGVmaW5lZCk7CisgICAgICAgICAgICAgICAgZXhwZWN0KGFjdHVhbCkudG9FcXVh
bChleHBlY3RlZCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGl0KCdzaG91bGQgdXNl
IGEgc3RyaWN0IHRlc3QgKGFycmF5LWxpa2UpJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAg
ICAgYWN0dWFsID0gbGFzdEluZGV4T2YuY2FsbCh0ZXN0QUwsIG51bGwpOworICAgICAgICAgICAg
ICAgIGV4cGVjdChhY3R1YWwpLnRvRXF1YWwoNSk7CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgYWN0dWFsID0gbGFzdEluZGV4T2YuY2FsbCh0ZXN0QUwsICcyJyk7CisgICAgICAg
ICAgICAgICAgZXhwZWN0KGFjdHVhbCkudG9FcXVhbCgtMSk7CisgICAgICAgICAgICB9KTsKKyAg
ICAgICAgICAgIGl0KCdzaG91bGQgc2tpcCB0aGUgZmlyc3QgaWYgZnJvbUluZGV4IGlzIHNldCcs
IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGV4cGVjdChsYXN0SW5kZXhPZi5jYWxsKHRl
c3RBTCwgMiwgMikpLnRvRXF1YWwoMCk7CisgICAgICAgICAgICAgICAgZXhwZWN0KGxhc3RJbmRl
eE9mLmNhbGwodGVzdEFMLCAyLCAwKSkudG9FcXVhbCgwKTsKKyAgICAgICAgICAgICAgICBleHBl
Y3QobGFzdEluZGV4T2YuY2FsbCh0ZXN0QUwsIDIsIDYpKS50b0VxdWFsKDYpOworICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgICBpdCgnc2hvdWxkIHdvcmsgd2l0aCBuZWdhdGl2ZSBmcm9tSW5k
ZXgnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBleHBlY3QobGFzdEluZGV4T2YuY2Fs
bCh0ZXN0QUwsIDIsIC0zKSkudG9FcXVhbCg2KTsKKyAgICAgICAgICAgICAgICBleHBlY3QobGFz
dEluZGV4T2YuY2FsbCh0ZXN0QUwsIDIsIC05KSkudG9FcXVhbCgwKTsKKyAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgaXQoJ3Nob3VsZCB3b3JrIHdpdGggZnJvbUluZGV4IGJlaW5nIGdyZWF0
ZXIgdGhhbiB0aGUgbGVuZ3RoJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgZXhwZWN0
KGxhc3RJbmRleE9mLmNhbGwodGVzdEFMLCAyLCAyMCkpLnRvRXF1YWwoNik7CisgICAgICAgICAg
ICB9KTsKKyAgICAgICAgICAgIGl0KCdzaG91bGQgd29yayB3aXRoIGZyb21JbmRleCBiZWluZyBu
ZWdhdGl2ZSBhbmQgZ3JlYXRlciB0aGFuIHRoZSBsZW5ndGgnLCBmdW5jdGlvbigpIHsKKyAgICAg
ICAgICAgICAgICBleHBlY3QobGFzdEluZGV4T2YuY2FsbCh0ZXN0QUwsIDIsIC0yMCkpLnRvRXF1
YWwoLTEpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgIH0pOworICAgIAorICAg
IGRlc2NyaWJlKCdmaWx0ZXInLCBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGZpbHRlcmVkQXJy
YXksCisgICAgICAgICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uIGNhbGxiYWNrKG8sIGksIGFycikg
eworICAgICAgICAgICAgICAgIHJldHVybiAoCisgICAgICAgICAgICAgICAgICAgIGkgIT0gMyAm
JiBpICE9IDUKKyAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgfTsKKyAgICAgICAgCisg
ICAgICAgIGJlZm9yZUVhY2goZnVuY3Rpb24oKSB7CisgICAgICAgICAgICB0ZXN0U3ViamVjdCA9
IFsyLCAzLCB1bmRlZmluZWQsIHRydWUsICdoZWonLCAzLCBudWxsLCBmYWxzZSwgMF07CisgICAg
ICAgICAgICBkZWxldGUgdGVzdFN1YmplY3RbMV07CisgICAgICAgICAgICBmaWx0ZXJlZEFycmF5
ID0gWzIsIHVuZGVmaW5lZCwgJ2hlaicsIG51bGwsIGZhbHNlLCAwXTsKKyAgICAgICAgfSk7Cisg
ICAgICAgIGRlc2NyaWJlKCdBcnJheSBvYmplY3QnLCBmdW5jdGlvbigpIHsKKworICAgICAgICAg
ICAgaXQoJ3Nob3VsZCBjYWxsIHRoZSBjYWxsYmFjayB3aXRoIHRoZSBwcm9wZXIgYXJndW1lbnRz
JywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gamFzbWluZS5j
cmVhdGVTcHkoJ2NhbGxiYWNrJyksCisgICAgICAgICAgICAgICAgICAgIGFyciA9IFsnMSddOwor
ICAgICAgICAgICAgICAgIGFyci5maWx0ZXIoY2FsbGJhY2spOworICAgICAgICAgICAgICAgIGV4
cGVjdChjYWxsYmFjaykudG9IYXZlQmVlbkNhbGxlZFdpdGgoJzEnLCAwLCBhcnIpOworICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgICBpdCgnc2hvdWxkIG5vdCBhZmZlY3QgZWxlbWVudHMgYWRk
ZWQgdG8gdGhlIGFycmF5IGFmdGVyIGl0IGhhcyBiZWd1bicsIGZ1bmN0aW9uKCkgeworICAgICAg
ICAgICAgICAgIHZhciBhcnIgPSBbMSwyLDNdLAorICAgICAgICAgICAgICAgICAgICBpID0gMDsK
KyAgICAgICAgICAgICAgICBhcnIuZmlsdGVyKGZ1bmN0aW9uKGEpIHsKKyAgICAgICAgICAgICAg
ICAgICAgaSsrOworICAgICAgICAgICAgICAgICAgICBpZihpIDw9IDQpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGFyci5wdXNoKGErMyk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICAgICAgZXhwZWN0KGFycikudG9FcXVhbChbMSwyLDMsNCw1LDZdKTsKKyAgICAgICAgICAg
ICAgICBleHBlY3QoaSkudG9CZSgzKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgaXQo
J3Nob3VsZCBza2lwIG5vbi1zZXQgdmFsdWVzJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAg
ICAgdmFyIHBhc3NlZFZhbHVlcyA9IHt9OworICAgICAgICAgICAgICAgIHRlc3RTdWJqZWN0ID0g
WzEsMiwzLDRdOworICAgICAgICAgICAgICAgIGRlbGV0ZSB0ZXN0U3ViamVjdFsxXTsKKyAgICAg
ICAgICAgICAgICB0ZXN0U3ViamVjdC5maWx0ZXIoZnVuY3Rpb24obywgaSkgeworICAgICAgICAg
ICAgICAgICAgICBwYXNzZWRWYWx1ZXNbaV0gPSBvOworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICBleHBlY3QocGFz
c2VkVmFsdWVzKS50b0V4YWN0bHlNYXRjaCh0ZXN0U3ViamVjdCk7CisgICAgICAgICAgICB9KTsK
KyAgICAgICAgICAgIGl0KCdzaG91bGQgcGFzcyB0aGUgcmlnaHQgY29udGV4dCB0byB0aGUgZmls
dGVyJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdmFyIHBhc3NlZFZhbHVlcyA9IHt9
OworICAgICAgICAgICAgICAgIHRlc3RTdWJqZWN0ID0gWzEsMiwzLDRdOworICAgICAgICAgICAg
ICAgIGRlbGV0ZSB0ZXN0U3ViamVjdFsxXTsKKyAgICAgICAgICAgICAgICB0ZXN0U3ViamVjdC5m
aWx0ZXIoZnVuY3Rpb24obywgaSkgeworICAgICAgICAgICAgICAgICAgICB0aGlzW2ldID0gbzsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfSwgcGFz
c2VkVmFsdWVzKTsKKyAgICAgICAgICAgICAgICBleHBlY3QocGFzc2VkVmFsdWVzKS50b0V4YWN0
bHlNYXRjaCh0ZXN0U3ViamVjdCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGl0KCdz
aG91bGQgc2V0IHRoZSByaWdodCBjb250ZXh0IHdoZW4gZ2l2ZW4gbm9uZScsIGZ1bmN0aW9uKCkg
eworICAgICAgICAgICAgICAgIHZhciBjb250ZXh0OworICAgICAgICAgICAgICAgIFsxXS5maWx0
ZXIoZnVuY3Rpb24oKSB7Y29udGV4dCA9IHRoaXM7fSk7CisgICAgICAgICAgICAgICAgZXhwZWN0
KGNvbnRleHQpLnRvQmUoZnVuY3Rpb24oKSB7cmV0dXJuIHRoaXN9LmNhbGwoKSk7CisgICAgICAg
ICAgICB9KTsKKyAgICAgICAgICAgIGl0KCdzaG91bGQgcmVtb3ZlIG9ubHkgdGhlIHZhbHVlcyBm
b3Igd2hpY2ggdGhlIGNhbGxiYWNrIHJldHVybnMgZmFsc2UnLCBmdW5jdGlvbigpIHsKKyAgICAg
ICAgICAgICAgICB2YXIgcmVzdWx0ID0gdGVzdFN1YmplY3QuZmlsdGVyKGNhbGxiYWNrKTsKKyAg
ICAgICAgICAgICAgICBleHBlY3QocmVzdWx0KS50b0V4YWN0bHlNYXRjaChmaWx0ZXJlZEFycmF5
KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgaXQoJ3Nob3VsZCBsZWF2ZSB0aGUgb3Jp
Z2luYWwgYXJyYXkgdW50b3VjaGVkJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdmFy
IGNvcHkgPSB0ZXN0U3ViamVjdC5zbGljZSgpOworICAgICAgICAgICAgICAgIHRlc3RTdWJqZWN0
LmZpbHRlcihjYWxsYmFjayk7CisgICAgICAgICAgICAgICAgZXhwZWN0KHRlc3RTdWJqZWN0KS50
b0V4YWN0bHlNYXRjaChjb3B5KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgaXQoJ3No
b3VsZCBub3QgYmUgYWZmZWN0ZWQgYnkgc2FtZS1pbmRleCBtdXRhdGlvbicsIGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgICAgICAgICB2YXIgcmVzdWx0cyA9IFsxLCAyLCAzXQorICAgICAgICAgICAg
ICAgIC5maWx0ZXIoZnVuY3Rpb24gKHZhbHVlLCBpbmRleCwgYXJyYXkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgYXJyYXlbaW5kZXhdID0gJ2EnOworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICBleHBlY3QocmVzdWx0
cykudG9FcXVhbChbMSwgMiwgM10pOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAg
ICAgICBkZXNjcmliZSgnQXJyYXkgbGlrZScsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgYmVm
b3JlRWFjaChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICB0ZXN0U3ViamVjdCA9IGNyZWF0
ZUFycmF5TGlrZUZyb21BcnJheSh0ZXN0U3ViamVjdCk7CisgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgIGl0KCdzaG91bGQgY2FsbCB0aGUgY2FsbGJhY2sgd2l0aCB0aGUgcHJvcGVyIGFyZ3Vt
ZW50cycsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGphc21p
bmUuY3JlYXRlU3B5KCdjYWxsYmFjaycpLAorICAgICAgICAgICAgICAgICAgICBhcnIgPSBjcmVh
dGVBcnJheUxpa2VGcm9tQXJyYXkoWycxJ10pOworICAgICAgICAgICAgICAgIEFycmF5LnByb3Rv
dHlwZS5maWx0ZXIuY2FsbChhcnIsIGNhbGxiYWNrKTsKKyAgICAgICAgICAgICAgICBleHBlY3Qo
Y2FsbGJhY2spLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKCcxJywgMCwgYXJyKTsKKyAgICAgICAgICAg
IH0pOworICAgICAgICAgICAgaXQoJ3Nob3VsZCBub3QgYWZmZWN0IGVsZW1lbnRzIGFkZGVkIHRv
IHRoZSBhcnJheSBhZnRlciBpdCBoYXMgYmVndW4nLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAg
ICAgICB2YXIgYXJyID0gY3JlYXRlQXJyYXlMaWtlRnJvbUFycmF5KFsxLDIsM10pLAorICAgICAg
ICAgICAgICAgICAgICBpID0gMDsKKyAgICAgICAgICAgICAgICBBcnJheS5wcm90b3R5cGUuZmls
dGVyLmNhbGwoYXJyLCBmdW5jdGlvbihhKSB7CisgICAgICAgICAgICAgICAgICAgIGkrKzsKKyAg
ICAgICAgICAgICAgICAgICAgaWYoaSA8PSA0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBh
cnJbaSsyXSA9IGErMzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICBkZWxl
dGUgYXJyLmxlbmd0aDsKKyAgICAgICAgICAgICAgICBleHBlY3QoYXJyKS50b0V4YWN0bHlNYXRj
aChbMSwyLDMsNCw1LDZdKTsKKyAgICAgICAgICAgICAgICBleHBlY3QoaSkudG9CZSgzKTsKKyAg
ICAgICAgICAgIH0pOworICAgICAgICAgICAgaXQoJ3Nob3VsZCBza2lwIG5vbi1zZXQgdmFsdWVz
JywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdmFyIHBhc3NlZFZhbHVlcyA9IHt9Owor
ICAgICAgICAgICAgICAgIHRlc3RTdWJqZWN0ID0gY3JlYXRlQXJyYXlMaWtlRnJvbUFycmF5KFsx
LDIsMyw0XSk7CisgICAgICAgICAgICAgICAgZGVsZXRlIHRlc3RTdWJqZWN0WzFdOworICAgICAg
ICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5maWx0ZXIuY2FsbCh0ZXN0U3ViamVjdCwgZnVuY3Rp
b24obywgaSkgeworICAgICAgICAgICAgICAgICAgICBwYXNzZWRWYWx1ZXNbaV0gPSBvOworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgICAgICBkZWxldGUgdGVzdFN1YmplY3QubGVuZ3RoOworICAgICAgICAgICAgICAgIGV4
cGVjdChwYXNzZWRWYWx1ZXMpLnRvRXhhY3RseU1hdGNoKHRlc3RTdWJqZWN0KTsKKyAgICAgICAg
ICAgIH0pOworICAgICAgICAgICAgaXQoJ3Nob3VsZCBzZXQgdGhlIHJpZ2h0IGNvbnRleHQgd2hl
biBnaXZlbiBub25lJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdmFyIGNvbnRleHQ7
CisgICAgICAgICAgICAgICAgQXJyYXkucHJvdG90eXBlLmZpbHRlci5jYWxsKGNyZWF0ZUFycmF5
TGlrZUZyb21BcnJheShbMV0pLCBmdW5jdGlvbigpIHtjb250ZXh0ID0gdGhpczt9LCB1bmRlZmlu
ZWQpOworICAgICAgICAgICAgICAgIGV4cGVjdChjb250ZXh0KS50b0JlKGZ1bmN0aW9uKCkge3Jl
dHVybiB0aGlzfS5jYWxsKCkpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBpdCgnc2hv
dWxkIHBhc3MgdGhlIHJpZ2h0IGNvbnRleHQgdG8gdGhlIGZpbHRlcicsIGZ1bmN0aW9uKCkgewor
ICAgICAgICAgICAgICAgIHZhciBwYXNzZWRWYWx1ZXMgPSB7fTsKKyAgICAgICAgICAgICAgICB0
ZXN0U3ViamVjdCA9IGNyZWF0ZUFycmF5TGlrZUZyb21BcnJheShbMSwyLDMsNF0pOworICAgICAg
ICAgICAgICAgIGRlbGV0ZSB0ZXN0U3ViamVjdFsxXTsKKyAgICAgICAgICAgICAgICBBcnJheS5w
cm90b3R5cGUuZmlsdGVyLmNhbGwodGVzdFN1YmplY3QsIGZ1bmN0aW9uKG8sIGkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgdGhpc1tpXSA9IG87CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICAgICAgICAgIH0sIHBhc3NlZFZhbHVlcyk7CisgICAgICAgICAgICAgICAg
ZGVsZXRlIHRlc3RTdWJqZWN0Lmxlbmd0aDsKKyAgICAgICAgICAgICAgICBleHBlY3QocGFzc2Vk
VmFsdWVzKS50b0V4YWN0bHlNYXRjaCh0ZXN0U3ViamVjdCk7CisgICAgICAgICAgICB9KTsKKyAg
ICAgICAgICAgIGl0KCdzaG91bGQgcmVtb3ZlIG9ubHkgdGhlIHZhbHVlcyBmb3Igd2hpY2ggdGhl
IGNhbGxiYWNrIHJldHVybnMgZmFsc2UnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICB2
YXIgcmVzdWx0ID0gQXJyYXkucHJvdG90eXBlLmZpbHRlci5jYWxsKHRlc3RTdWJqZWN0LCBjYWxs
YmFjayk7CisgICAgICAgICAgICAgICAgZXhwZWN0KHJlc3VsdCkudG9FeGFjdGx5TWF0Y2goZmls
dGVyZWRBcnJheSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGl0KCdzaG91bGQgbGVh
dmUgdGhlIG9yaWdpbmFsIGFycmF5IHVudG91Y2hlZCcsIGZ1bmN0aW9uKCkgeworICAgICAgICAg
ICAgICAgIHZhciBjb3B5ID0gY3JlYXRlQXJyYXlMaWtlRnJvbUFycmF5KHRlc3RTdWJqZWN0KTsK
KyAgICAgICAgICAgICAgICBBcnJheS5wcm90b3R5cGUuZmlsdGVyLmNhbGwodGVzdFN1YmplY3Qs
IGNhbGxiYWNrKTsKKyAgICAgICAgICAgICAgICBleHBlY3QodGVzdFN1YmplY3QpLnRvRXhhY3Rs
eU1hdGNoKGNvcHkpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgIH0pOworICAg
IGRlc2NyaWJlKCdtYXAnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGNhbGxiYWNrOworICAg
ICAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgdmFyIGkgPSAwOworICAg
ICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
aSsrOworICAgICAgICAgICAgfTsKKyAgICAgICAgfSk7CisgICAgICAgIGRlc2NyaWJlKCdBcnJh
eSBvYmplY3QnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGl0KCdzaG91bGQgY2FsbCBjYWxs
YmFjayB3aXRoIHRoZSByaWdodCBwYXJhbWV0ZXJzJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAg
ICAgICAgdmFyIGNhbGxiYWNrID0gamFzbWluZS5jcmVhdGVTcHkoJ2NhbGxiYWNrJyksCisgICAg
ICAgICAgICAgICAgICAgIGFycmF5ID0gWzFdOworICAgICAgICAgICAgICAgIGFycmF5Lm1hcChj
YWxsYmFjayk7CisgICAgICAgICAgICAgICAgZXhwZWN0KGNhbGxiYWNrKS50b0hhdmVCZWVuQ2Fs
bGVkV2l0aCgxLCAwLCBhcnJheSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGl0KCdz
aG91bGQgc2V0IHRoZSBjb250ZXh0IGNvcnJlY3RseScsIGZ1bmN0aW9uKCkgeworICAgICAgICAg
ICAgICAgIHZhciBjb250ZXh0ID0ge307CisgICAgICAgICAgICAgICAgdGVzdFN1YmplY3QubWFw
KGZ1bmN0aW9uKG8saSkgeworICAgICAgICAgICAgICAgICAgICB0aGlzW2ldID0gbzsKKyAgICAg
ICAgICAgICAgICB9LCBjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBleHBlY3QoY29udGV4dCku
dG9FeGFjdGx5TWF0Y2godGVzdFN1YmplY3QpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAg
ICBpdCgnc2hvdWxkIHNldCB0aGUgcmlnaHQgY29udGV4dCB3aGVuIGdpdmVuIG5vbmUnLCBmdW5j
dGlvbigpIHsKKyAgICAgICAgICAgICAgICB2YXIgY29udGV4dDsKKyAgICAgICAgICAgICAgICBb
MV0ubWFwKGZ1bmN0aW9uKCkge2NvbnRleHQgPSB0aGlzO30pOworICAgICAgICAgICAgICAgIGV4
cGVjdChjb250ZXh0KS50b0JlKGZ1bmN0aW9uKCkge3JldHVybiB0aGlzfS5jYWxsKCkpOworICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICBpdCgnc2hvdWxkIG5vdCBjaGFuZ2UgdGhlIGFycmF5
IGl0IGlzIGNhbGxlZCBvbicsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHZhciBjb3B5
ID0gdGVzdFN1YmplY3Quc2xpY2UoKTsKKyAgICAgICAgICAgICAgICB0ZXN0U3ViamVjdC5tYXAo
Y2FsbGJhY2spOworICAgICAgICAgICAgICAgIGV4cGVjdCh0ZXN0U3ViamVjdCkudG9FeGFjdGx5
TWF0Y2goY29weSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGl0KCdzaG91bGQgb25s
eSBydW4gZm9yIHRoZSBudW1iZXIgb2Ygb2JqZWN0cyBpbiB0aGUgYXJyYXkgd2hlbiBpdCBzdGFy
dGVkJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdmFyIGFyciA9IFsxLDIsM10sCisg
ICAgICAgICAgICAgICAgICAgIGkgPSAwOworICAgICAgICAgICAgICAgIGFyci5tYXAoZnVuY3Rp
b24obykgeworICAgICAgICAgICAgICAgICAgICBhcnIucHVzaChvKzMpOworICAgICAgICAgICAg
ICAgICAgICBpKys7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBvOworICAgICAgICAgICAg
ICAgIH0pOworICAgICAgICAgICAgICAgIGV4cGVjdChhcnIpLnRvRXhhY3RseU1hdGNoKFsxLDIs
Myw0LDUsNl0pOworICAgICAgICAgICAgICAgIGV4cGVjdChpKS50b0JlKDMpOworICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgICBpdCgnc2hvdWxkIHByb3Blcmx5IHRyYW5zbGF0ZSB0aGUgdmFs
dWVzIGFzIGFjY29yZGluZyB0byB0aGUgY2FsbGJhY2snLCBmdW5jdGlvbigpIHsKKyAgICAgICAg
ICAgICAgICB2YXIgcmVzdWx0ID0gdGVzdFN1YmplY3QubWFwKGNhbGxiYWNrKSwKKyAgICAgICAg
ICAgICAgICAgICAgZXhwZWN0ZWQgPSBbMCwwLDEsMiwzLDQsNSw2XTsKKyAgICAgICAgICAgICAg
ICBkZWxldGUgZXhwZWN0ZWRbMV07CisgICAgICAgICAgICAgICAgZXhwZWN0KHJlc3VsdCkudG9F
eGFjdGx5TWF0Y2goZXhwZWN0ZWQpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBpdCgn
c2hvdWxkIHNraXAgbm9uLWV4aXN0aW5nIHZhbHVlcycsIGZ1bmN0aW9uKCkgeworICAgICAgICAg
ICAgICAgIHZhciBhcnJheSA9IFsxLDIsMyw0XSwgCisgICAgICAgICAgICAgICAgICAgIGkgPSAw
OworICAgICAgICAgICAgICAgIGRlbGV0ZSBhcnJheVsyXTsKKyAgICAgICAgICAgICAgICBhcnJh
eS5tYXAoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICAg
ICAgICB9KTsKKyAgICAgICAgICAgICAgICBleHBlY3QoaSkudG9CZSgzKTsKKyAgICAgICAgICAg
IH0pOworICAgICAgICB9KTsKKyAgICAgICAgZGVzY3JpYmUoJ0FycmF5LWxpa2UnLCBmdW5jdGlv
bigpIHsKKyAgICAgICAgICAgIGJlZm9yZUVhY2goZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAg
ICAgdGVzdFN1YmplY3QgPSBjcmVhdGVBcnJheUxpa2VGcm9tQXJyYXkodGVzdFN1YmplY3QpOwor
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBpdCgnc2hvdWxkIGNhbGwgY2FsbGJhY2sgd2l0
aCB0aGUgcmlnaHQgcGFyYW1ldGVycycsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHZh
ciBjYWxsYmFjayA9IGphc21pbmUuY3JlYXRlU3B5KCdjYWxsYmFjaycpLAorICAgICAgICAgICAg
ICAgICAgICBhcnJheSA9IGNyZWF0ZUFycmF5TGlrZUZyb21BcnJheShbMV0pOworICAgICAgICAg
ICAgICAgIEFycmF5LnByb3RvdHlwZS5tYXAuY2FsbChhcnJheSwgY2FsbGJhY2spOworICAgICAg
ICAgICAgICAgIGV4cGVjdChjYWxsYmFjaykudG9IYXZlQmVlbkNhbGxlZFdpdGgoMSwgMCwgYXJy
YXkpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBpdCgnc2hvdWxkIHNldCB0aGUgY29u
dGV4dCBjb3JyZWN0bHknLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICB2YXIgY29udGV4
dCA9IHt9OworICAgICAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5tYXAuY2FsbCh0ZXN0U3Vi
amVjdCwgZnVuY3Rpb24obyxpKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXNbaV0gPSBvOwor
ICAgICAgICAgICAgICAgIH0sIGNvbnRleHQpOworICAgICAgICAgICAgICAgIGRlbGV0ZSB0ZXN0
U3ViamVjdC5sZW5ndGg7CisgICAgICAgICAgICAgICAgZXhwZWN0KGNvbnRleHQpLnRvRXhhY3Rs
eU1hdGNoKHRlc3RTdWJqZWN0KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgaXQoJ3No
b3VsZCBzZXQgdGhlIHJpZ2h0IGNvbnRleHQgd2hlbiBnaXZlbiBub25lJywgZnVuY3Rpb24oKSB7
CisgICAgICAgICAgICAgICAgdmFyIGNvbnRleHQ7CisgICAgICAgICAgICAgICAgQXJyYXkucHJv
dG90eXBlLm1hcC5jYWxsKGNyZWF0ZUFycmF5TGlrZUZyb21BcnJheShbMV0pLCBmdW5jdGlvbigp
IHtjb250ZXh0ID0gdGhpczt9KTsKKyAgICAgICAgICAgICAgICBleHBlY3QoY29udGV4dCkudG9C
ZShmdW5jdGlvbigpIHtyZXR1cm4gdGhpc30uY2FsbCgpKTsKKyAgICAgICAgICAgIH0pOworICAg
ICAgICAgICAgaXQoJ3Nob3VsZCBub3QgY2hhbmdlIHRoZSBhcnJheSBpdCBpcyBjYWxsZWQgb24n
LCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICB2YXIgY29weSA9IGNyZWF0ZUFycmF5TGlr
ZUZyb21BcnJheSh0ZXN0U3ViamVjdCk7CisgICAgICAgICAgICAgICAgQXJyYXkucHJvdG90eXBl
Lm1hcC5jYWxsKHRlc3RTdWJqZWN0LCBjYWxsYmFjayk7CisgICAgICAgICAgICAgICAgZXhwZWN0
KHRlc3RTdWJqZWN0KS50b0V4YWN0bHlNYXRjaChjb3B5KTsKKyAgICAgICAgICAgIH0pOworICAg
ICAgICAgICAgaXQoJ3Nob3VsZCBvbmx5IHJ1biBmb3IgdGhlIG51bWJlciBvZiBvYmplY3RzIGlu
IHRoZSBhcnJheSB3aGVuIGl0IHN0YXJ0ZWQnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAg
ICB2YXIgYXJyID0gY3JlYXRlQXJyYXlMaWtlRnJvbUFycmF5KFsxLDIsM10pLAorICAgICAgICAg
ICAgICAgICAgICBpID0gMDsKKyAgICAgICAgICAgICAgICBBcnJheS5wcm90b3R5cGUubWFwLmNh
bGwoYXJyLCBmdW5jdGlvbihvKSB7CisgICAgICAgICAgICAgICAgICAgIEFycmF5LnByb3RvdHlw
ZS5wdXNoLmNhbGwoYXJyLCBvKzMpOworICAgICAgICAgICAgICAgICAgICBpKys7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBvOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAg
ICAgIGRlbGV0ZSBhcnIubGVuZ3RoOworICAgICAgICAgICAgICAgIGV4cGVjdChhcnIpLnRvRXhh
Y3RseU1hdGNoKFsxLDIsMyw0LDUsNl0pOworICAgICAgICAgICAgICAgIGV4cGVjdChpKS50b0Jl
KDMpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBpdCgnc2hvdWxkIHByb3Blcmx5IHRy
YW5zbGF0ZSB0aGUgdmFsdWVzIGFzIGFjY29yZGluZyB0byB0aGUgY2FsbGJhY2snLCBmdW5jdGlv
bigpIHsKKyAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gQXJyYXkucHJvdG90eXBlLm1hcC5j
YWxsKHRlc3RTdWJqZWN0LCBjYWxsYmFjayksCisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVk
ID0gWzAsMCwxLDIsMyw0LDUsNl07CisgICAgICAgICAgICAgICAgZGVsZXRlIGV4cGVjdGVkWzFd
OworICAgICAgICAgICAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXhhY3RseU1hdGNoKGV4cGVjdGVk
KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgaXQoJ3Nob3VsZCBza2lwIG5vbi1leGlz
dGluZyB2YWx1ZXMnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICB2YXIgYXJyYXkgPSBj
cmVhdGVBcnJheUxpa2VGcm9tQXJyYXkoWzEsMiwzLDRdKSwgCisgICAgICAgICAgICAgICAgICAg
IGkgPSAwOworICAgICAgICAgICAgICAgIGRlbGV0ZSBhcnJheVsyXTsKKyAgICAgICAgICAgICAg
ICBBcnJheS5wcm90b3R5cGUubWFwLmNhbGwoYXJyYXksIGZ1bmN0aW9uKCkgeworICAgICAgICAg
ICAgICAgICAgICBpKys7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgZXhw
ZWN0KGkpLnRvQmUoMyk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgfSk7Cisg
ICAgCisgICAgZGVzY3JpYmUoJ3JlZHVjZScsIGZ1bmN0aW9uKCkgeworICAgICAgICBiZWZvcmVF
YWNoKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgdGVzdFN1YmplY3QgPSBbMSwyLDNdOworICAg
ICAgICB9KTsKKyAgICAgICAgCisgICAgICAgIGRlc2NyaWJlKCdBcnJheScsIGZ1bmN0aW9uKCkg
eworICAgICAgICAgICAgaXQoJ3Nob3VsZCBwYXNzIHRoZSBjb3JyZWN0IGFyZ3VtZW50cyB0byB0
aGUgY2FsbGJhY2snLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICB2YXIgc3B5ID0gamFz
bWluZS5jcmVhdGVTcHkoKS5hbmRSZXR1cm4oMCk7CisgICAgICAgICAgICAgICAgdGVzdFN1Ympl
Y3QucmVkdWNlKHNweSk7CisgICAgICAgICAgICAgICAgZXhwZWN0KHNweS5jYWxsc1swXS5hcmdz
KS50b0V4YWN0bHlNYXRjaChbMSwgMiwgMSwgdGVzdFN1YmplY3RdKTsKKyAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgaXQoJ3Nob3VsZCBzdGFydCB3aXRoIHRoZSByaWdodCBpbml0aWFsVmFs
dWUnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICB2YXIgc3B5ID0gamFzbWluZS5jcmVh
dGVTcHkoKS5hbmRSZXR1cm4oMCk7CisgICAgICAgICAgICAgICAgdGVzdFN1YmplY3QucmVkdWNl
KHNweSwgMCk7CisgICAgICAgICAgICAgICAgZXhwZWN0KHNweS5jYWxsc1swXS5hcmdzKS50b0V4
YWN0bHlNYXRjaChbMCwgMSwgMCwgdGVzdFN1YmplY3RdKTsKKyAgICAgICAgICAgIH0pOworICAg
ICAgICAgICAgaXQoJ3Nob3VsZCBub3QgYWZmZWN0IGVsZW1lbnRzIGFkZGVkIHRvIHRoZSBhcnJh
eSBhZnRlciBpdCBoYXMgYmVndW4nLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICB2YXIg
YXJyID0gWzEsMiwzXSwKKyAgICAgICAgICAgICAgICAgICAgaSA9IDA7CisgICAgICAgICAgICAg
ICAgYXJyLnJlZHVjZShmdW5jdGlvbihhLCBiKSB7CisgICAgICAgICAgICAgICAgICAgIGkrKzsK
KyAgICAgICAgICAgICAgICAgICAgaWYoaSA8PSA0KSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBhcnIucHVzaChhKzMpOworICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gYjsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICBleHBl
Y3QoYXJyKS50b0VxdWFsKFsxLDIsMyw0LDVdKTsKKyAgICAgICAgICAgICAgICBleHBlY3QoaSku
dG9CZSgyKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgaXQoJ3Nob3VsZCB3b3JrIGFz
IGV4cGVjdGVkIGZvciBlbXB0eSBhcnJheXMnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAg
ICB2YXIgc3B5ID0gamFzbWluZS5jcmVhdGVTcHkoKTsKKyAgICAgICAgICAgICAgICBleHBlY3Qo
ZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgIFtdLnJlZHVjZShzcHkpOworICAgICAg
ICAgICAgICAgIH0pLnRvVGhyb3coKTsKKyAgICAgICAgICAgICAgICBleHBlY3Qoc3B5KS5ub3Qu
dG9IYXZlQmVlbkNhbGxlZCgpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBpdCgnc2hv
dWxkIHRocm93IGNvcnJlY3RseSBpZiBubyBjYWxsYmFjayBpcyBnaXZlbicsIGZ1bmN0aW9uKCkg
eworICAgICAgICAgICAgICAgIGV4cGVjdChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAg
ICAgdGVzdFN1YmplY3QucmVkdWNlKCk7CisgICAgICAgICAgICAgICAgfSkudG9UaHJvdygpOwor
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgZXhwZWN0
ZWQgcmVzdWx0JywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgZXhwZWN0KHRlc3RTdWJq
ZWN0LnJlZHVjZShmdW5jdGlvbihhLGIpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChh
fHwnJykudG9TdHJpbmcoKSsoYnx8JycpLnRvU3RyaW5nKCk7CisgICAgICAgICAgICAgICAgfSkp
LnRvRXF1YWwodGVzdFN1YmplY3Quam9pbignJykpOworICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICBpdCgnc2hvdWxkIG5vdCBkaXJlY3RseSBhZmZlY3QgdGhlIHBhc3NlZCBhcnJheScsIGZ1
bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHZhciBjb3B5ID0gdGVzdFN1YmplY3Quc2xpY2Uo
KTsKKyAgICAgICAgICAgICAgICB0ZXN0U3ViamVjdC5yZWR1Y2UoZnVuY3Rpb24oYSxiKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBhK2I7CisgICAgICAgICAgICAgICAgfSk7CisgICAg
ICAgICAgICAgICAgZXhwZWN0KHRlc3RTdWJqZWN0KS50b0VxdWFsKGNvcHkpOworICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgICBpdCgnc2hvdWxkIHNraXAgbm9uLXNldCB2YWx1ZXMnLCBmdW5j
dGlvbigpIHsKKyAgICAgICAgICAgICAgICBkZWxldGUgdGVzdFN1YmplY3RbMV07CisgICAgICAg
ICAgICAgICAgdmFyIHZpc2l0ZWQgPSB7fTsKKyAgICAgICAgICAgICAgICB0ZXN0U3ViamVjdC5y
ZWR1Y2UoZnVuY3Rpb24oYSxiKSB7CisgICAgICAgICAgICAgICAgICAgIGlmKGEpCisgICAgICAg
ICAgICAgICAgICAgICAgICB2aXNpdGVkW2FdID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAg
aWYoYikKKyAgICAgICAgICAgICAgICAgICAgICAgIHZpc2l0ZWRbYl0gPSB0cnVlOworICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBleHBlY3QodmlzaXRlZCkudG9FcXVhbCh7ICcxJzogdHJ1
ZSwgJzMnOiB0cnVlIH0pOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBpdCgnc2hvdWxk
IGhhdmUgdGhlIHJpZ2h0IGxlbmd0aCcsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGV4
cGVjdCh0ZXN0U3ViamVjdC5yZWR1Y2UubGVuZ3RoKS50b0JlKDEpOworICAgICAgICAgICAgfSk7
CisgICAgICAgIH0pOworICAgICAgICBkZXNjcmliZSgnQXJyYXktbGlrZSBvYmplY3RzJywgZnVu
Y3Rpb24oKSB7CisgICAgICAgICAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uKCkgeworICAgICAgICAg
ICAgICAgIHRlc3RTdWJqZWN0ID0gY3JlYXRlQXJyYXlMaWtlRnJvbUFycmF5KHRlc3RTdWJqZWN0
KTsKKyAgICAgICAgICAgICAgICB0ZXN0U3ViamVjdC5yZWR1Y2UgPSBBcnJheS5wcm90b3R5cGUu
cmVkdWNlOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBpdCgnc2hvdWxkIHBhc3MgdGhl
IGNvcnJlY3QgYXJndW1lbnRzIHRvIHRoZSBjYWxsYmFjaycsIGZ1bmN0aW9uKCkgeworICAgICAg
ICAgICAgICAgIHZhciBzcHkgPSBqYXNtaW5lLmNyZWF0ZVNweSgpLmFuZFJldHVybigwKTsKKyAg
ICAgICAgICAgICAgICB0ZXN0U3ViamVjdC5yZWR1Y2Uoc3B5KTsKKyAgICAgICAgICAgICAgICBl
eHBlY3Qoc3B5LmNhbGxzWzBdLmFyZ3MpLnRvRXhhY3RseU1hdGNoKFsxLCAyLCAxLCB0ZXN0U3Vi
amVjdF0pOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBpdCgnc2hvdWxkIHN0YXJ0IHdp
dGggdGhlIHJpZ2h0IGluaXRpYWxWYWx1ZScsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAg
IHZhciBzcHkgPSBqYXNtaW5lLmNyZWF0ZVNweSgpLmFuZFJldHVybigwKTsKKyAgICAgICAgICAg
ICAgICB0ZXN0U3ViamVjdC5yZWR1Y2Uoc3B5LCAwKTsKKyAgICAgICAgICAgICAgICBleHBlY3Qo
c3B5LmNhbGxzWzBdLmFyZ3MpLnRvRXhhY3RseU1hdGNoKFswLCAxLCAwLCB0ZXN0U3ViamVjdF0p
OworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBpdCgnc2hvdWxkIG5vdCBhZmZlY3QgZWxl
bWVudHMgYWRkZWQgdG8gdGhlIGFycmF5IGFmdGVyIGl0IGhhcyBiZWd1bicsIGZ1bmN0aW9uKCkg
eworICAgICAgICAgICAgICAgIHZhciBhcnIgPSBjcmVhdGVBcnJheUxpa2VGcm9tQXJyYXkoWzEs
MiwzXSksCisgICAgICAgICAgICAgICAgICAgIGkgPSAwOworICAgICAgICAgICAgICAgIEFycmF5
LnByb3RvdHlwZS5yZWR1Y2UuY2FsbChhcnIsIGZ1bmN0aW9uKGEsIGIpIHsKKyAgICAgICAgICAg
ICAgICAgICAgaSsrOworICAgICAgICAgICAgICAgICAgICBpZihpIDw9IDQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGFycltpKzJdID0gYSszOworICAgICAgICAgICAgICAgICAgICB9Owor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gYjsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgICAgICBleHBlY3QoYXJyKS50b0VxdWFsKHsKKyAgICAgICAgICAgICAgICAgICAgMDog
MSwKKyAgICAgICAgICAgICAgICAgICAgMTogMiwKKyAgICAgICAgICAgICAgICAgICAgMjogMywK
KyAgICAgICAgICAgICAgICAgICAgMzogNCwKKyAgICAgICAgICAgICAgICAgICAgNDogNSwKKyAg
ICAgICAgICAgICAgICAgICAgbGVuZ3RoOiAzCisgICAgICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICAgICAgZXhwZWN0KGkpLnRvQmUoMik7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAg
IGl0KCdzaG91bGQgd29yayBhcyBleHBlY3RlZCBmb3IgZW1wdHkgYXJyYXlzJywgZnVuY3Rpb24o
KSB7CisgICAgICAgICAgICAgICAgdmFyIHNweSA9IGphc21pbmUuY3JlYXRlU3B5KCk7CisgICAg
ICAgICAgICAgICAgZXhwZWN0KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICBBcnJh
eS5wcm90b3R5cGUucmVkdWNlLmNhbGwoe2xlbmd0aDogMH0sIHNweSk7CisgICAgICAgICAgICAg
ICAgfSkudG9UaHJvdygpOworICAgICAgICAgICAgICAgIGV4cGVjdChzcHkpLm5vdC50b0hhdmVC
ZWVuQ2FsbGVkKCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGl0KCdzaG91bGQgdGhy
b3cgY29ycmVjdGx5IGlmIG5vIGNhbGxiYWNrIGlzIGdpdmVuJywgZnVuY3Rpb24oKSB7CisgICAg
ICAgICAgICAgICAgZXhwZWN0KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICB0ZXN0
U3ViamVjdC5yZWR1Y2UoKTsKKyAgICAgICAgICAgICAgICB9KS50b1Rocm93KCk7CisgICAgICAg
ICAgICB9KTsKKyAgICAgICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBleHBlY3RlZCByZXN1
bHQnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBleHBlY3QodGVzdFN1YmplY3QucmVk
dWNlKGZ1bmN0aW9uKGEsYikgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGF8fCcnKS50
b1N0cmluZygpKyhifHwnJykudG9TdHJpbmcoKTsKKyAgICAgICAgICAgICAgICB9KSkudG9FcXVh
bCgnMTIzJyk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGl0KCdzaG91bGQgbm90IGRp
cmVjdGx5IGFmZmVjdCB0aGUgcGFzc2VkIGFycmF5JywgZnVuY3Rpb24oKSB7CisgICAgICAgICAg
ICAgICAgdmFyIGNvcHkgPSBjcmVhdGVBcnJheUxpa2VGcm9tQXJyYXkodGVzdFN1YmplY3QpOwor
ICAgICAgICAgICAgICAgIHRlc3RTdWJqZWN0LnJlZHVjZShmdW5jdGlvbihhLGIpIHsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGErYjsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAg
ICAgICAgICBkZWxldGUodGVzdFN1YmplY3QucmVkdWNlKTsKKyAgICAgICAgICAgICAgICBleHBl
Y3QodGVzdFN1YmplY3QpLnRvRXF1YWwoY29weSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAg
ICAgIGl0KCdzaG91bGQgc2tpcCBub24tc2V0IHZhbHVlcycsIGZ1bmN0aW9uKCkgeworICAgICAg
ICAgICAgICAgIGRlbGV0ZSB0ZXN0U3ViamVjdFsxXTsKKyAgICAgICAgICAgICAgICB2YXIgdmlz
aXRlZCA9IHt9OworICAgICAgICAgICAgICAgIHRlc3RTdWJqZWN0LnJlZHVjZShmdW5jdGlvbihh
LGIpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYoYSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IHZpc2l0ZWRbYV0gPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBpZihiKQorICAgICAgICAg
ICAgICAgICAgICAgICAgdmlzaXRlZFtiXSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiAwOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIGV4cGVjdCh2aXNpdGVkKS50b0VxdWFsKHsgJzEnOiB0cnVlLCAnMyc6IHRydWUgfSk7
CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGl0KCdzaG91bGQgaGF2ZSB0aGUgcmlnaHQg
bGVuZ3RoJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgZXhwZWN0KHRlc3RTdWJqZWN0
LnJlZHVjZS5sZW5ndGgpLnRvQmUoMSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7Cisg
ICAgfSk7CisgICAgZGVzY3JpYmUoJ3JlZHVjZVJpZ2h0JywgZnVuY3Rpb24oKSB7CisgICAgICAg
IGJlZm9yZUVhY2goZnVuY3Rpb24oKSB7CisgICAgICAgICAgICB0ZXN0U3ViamVjdCA9IFsxLDIs
M107CisgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAgZGVzY3JpYmUoJ0FycmF5JywgZnVu
Y3Rpb24oKSB7CisgICAgICAgICAgICBpdCgnc2hvdWxkIHBhc3MgdGhlIGNvcnJlY3QgYXJndW1l
bnRzIHRvIHRoZSBjYWxsYmFjaycsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHZhciBz
cHkgPSBqYXNtaW5lLmNyZWF0ZVNweSgpLmFuZFJldHVybigwKTsKKyAgICAgICAgICAgICAgICB0
ZXN0U3ViamVjdC5yZWR1Y2VSaWdodChzcHkpOworICAgICAgICAgICAgICAgIGV4cGVjdChzcHku
Y2FsbHNbMF0uYXJncykudG9FeGFjdGx5TWF0Y2goWzMsIDIsIDEsIHRlc3RTdWJqZWN0XSk7Cisg
ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGl0KCdzaG91bGQgc3RhcnQgd2l0aCB0aGUgcmln
aHQgaW5pdGlhbFZhbHVlJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdmFyIHNweSA9
IGphc21pbmUuY3JlYXRlU3B5KCkuYW5kUmV0dXJuKDApOworICAgICAgICAgICAgICAgIHRlc3RT
dWJqZWN0LnJlZHVjZVJpZ2h0KHNweSwgMCk7CisgICAgICAgICAgICAgICAgZXhwZWN0KHNweS5j
YWxsc1swXS5hcmdzKS50b0V4YWN0bHlNYXRjaChbMCwgMywgMiwgdGVzdFN1YmplY3RdKTsKKyAg
ICAgICAgICAgIH0pOworICAgICAgICAgICAgaXQoJ3Nob3VsZCBub3QgYWZmZWN0IGVsZW1lbnRz
IGFkZGVkIHRvIHRoZSBhcnJheSBhZnRlciBpdCBoYXMgYmVndW4nLCBmdW5jdGlvbigpIHsKKyAg
ICAgICAgICAgICAgICB2YXIgYXJyID0gWzEsMiwzXSwKKyAgICAgICAgICAgICAgICAgICAgaSA9
IDA7CisgICAgICAgICAgICAgICAgYXJyLnJlZHVjZVJpZ2h0KGZ1bmN0aW9uKGEsIGIpIHsKKyAg
ICAgICAgICAgICAgICAgICAgaSsrOworICAgICAgICAgICAgICAgICAgICBpZihpIDw9IDQpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGFyci5wdXNoKGErMyk7CisgICAgICAgICAgICAgICAg
ICAgIH07CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBiOworICAgICAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgICAgIGV4cGVjdChhcnIpLnRvRXF1YWwoWzEsMiwzLDYsNV0pOworICAg
ICAgICAgICAgICAgIGV4cGVjdChpKS50b0JlKDIpOworICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICBpdCgnc2hvdWxkIHdvcmsgYXMgZXhwZWN0ZWQgZm9yIGVtcHR5IGFycmF5cycsIGZ1bmN0
aW9uKCkgeworICAgICAgICAgICAgICAgIHZhciBzcHkgPSBqYXNtaW5lLmNyZWF0ZVNweSgpOwor
ICAgICAgICAgICAgICAgIGV4cGVjdChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAg
W10ucmVkdWNlUmlnaHQoc3B5KTsKKyAgICAgICAgICAgICAgICB9KS50b1Rocm93KCk7CisgICAg
ICAgICAgICAgICAgZXhwZWN0KHNweSkubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTsKKyAgICAgICAg
ICAgIH0pOworICAgICAgICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBjb3JyZWN0bHkgaWYgbm8gY2Fs
bGJhY2sgaXMgZ2l2ZW4nLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBleHBlY3QoZnVu
Y3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgIHRlc3RTdWJqZWN0LnJlZHVjZVJpZ2h0KCk7
CisgICAgICAgICAgICAgICAgfSkudG9UaHJvdygpOworICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgZXhwZWN0ZWQgcmVzdWx0JywgZnVuY3Rpb24oKSB7
CisgICAgICAgICAgICAgICAgZXhwZWN0KHRlc3RTdWJqZWN0LnJlZHVjZVJpZ2h0KGZ1bmN0aW9u
KGEsYikgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGF8fCcnKS50b1N0cmluZygpKyhi
fHwnJykudG9TdHJpbmcoKTsKKyAgICAgICAgICAgICAgICB9KSkudG9FcXVhbCgnMzIxJyk7Cisg
ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGl0KCdzaG91bGQgbm90IGRpcmVjdGx5IGFmZmVj
dCB0aGUgcGFzc2VkIGFycmF5JywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdmFyIGNv
cHkgPSB0ZXN0U3ViamVjdC5zbGljZSgpOworICAgICAgICAgICAgICAgIHRlc3RTdWJqZWN0LnJl
ZHVjZVJpZ2h0KGZ1bmN0aW9uKGEsYikgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gYSti
OworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIGV4cGVjdCh0ZXN0U3ViamVj
dCkudG9FcXVhbChjb3B5KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgaXQoJ3Nob3Vs
ZCBza2lwIG5vbi1zZXQgdmFsdWVzJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgZGVs
ZXRlIHRlc3RTdWJqZWN0WzFdOworICAgICAgICAgICAgICAgIHZhciB2aXNpdGVkID0ge307Cisg
ICAgICAgICAgICAgICAgdGVzdFN1YmplY3QucmVkdWNlUmlnaHQoZnVuY3Rpb24oYSxiKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGlmKGEpCisgICAgICAgICAgICAgICAgICAgICAgICB2aXNpdGVk
W2FdID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgaWYoYikKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHZpc2l0ZWRbYl0gPSB0cnVlOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBl
eHBlY3QodmlzaXRlZCkudG9FcXVhbCh7ICcxJzogdHJ1ZSwgJzMnOiB0cnVlIH0pOworICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgICBpdCgnc2hvdWxkIGhhdmUgdGhlIHJpZ2h0IGxlbmd0aCcs
IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGV4cGVjdCh0ZXN0U3ViamVjdC5yZWR1Y2VS
aWdodC5sZW5ndGgpLnRvQmUoMSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAg
ICAgIGRlc2NyaWJlKCdBcnJheS1saWtlIG9iamVjdHMnLCBmdW5jdGlvbigpIHsKKyAgICAgICAg
ICAgIGJlZm9yZUVhY2goZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdGVzdFN1YmplY3Qg
PSBjcmVhdGVBcnJheUxpa2VGcm9tQXJyYXkodGVzdFN1YmplY3QpOworICAgICAgICAgICAgICAg
IHRlc3RTdWJqZWN0LnJlZHVjZVJpZ2h0ID0gQXJyYXkucHJvdG90eXBlLnJlZHVjZVJpZ2h0Owor
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBpdCgnc2hvdWxkIHBhc3MgdGhlIGNvcnJlY3Qg
YXJndW1lbnRzIHRvIHRoZSBjYWxsYmFjaycsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAg
IHZhciBzcHkgPSBqYXNtaW5lLmNyZWF0ZVNweSgpLmFuZFJldHVybigwKTsKKyAgICAgICAgICAg
ICAgICB0ZXN0U3ViamVjdC5yZWR1Y2VSaWdodChzcHkpOworICAgICAgICAgICAgICAgIGV4cGVj
dChzcHkuY2FsbHNbMF0uYXJncykudG9FeGFjdGx5TWF0Y2goWzMsIDIsIDEsIHRlc3RTdWJqZWN0
XSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGl0KCdzaG91bGQgc3RhcnQgd2l0aCB0
aGUgcmlnaHQgaW5pdGlhbFZhbHVlJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdmFy
IHNweSA9IGphc21pbmUuY3JlYXRlU3B5KCkuYW5kUmV0dXJuKDApOworICAgICAgICAgICAgICAg
IHRlc3RTdWJqZWN0LnJlZHVjZVJpZ2h0KHNweSwgMCk7CisgICAgICAgICAgICAgICAgZXhwZWN0
KHNweS5jYWxsc1swXS5hcmdzKS50b0V4YWN0bHlNYXRjaChbMCwgMywgMiwgdGVzdFN1YmplY3Rd
KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgaXQoJ3Nob3VsZCBub3QgYWZmZWN0IGVs
ZW1lbnRzIGFkZGVkIHRvIHRoZSBhcnJheSBhZnRlciBpdCBoYXMgYmVndW4nLCBmdW5jdGlvbigp
IHsKKyAgICAgICAgICAgICAgICB2YXIgYXJyID0gY3JlYXRlQXJyYXlMaWtlRnJvbUFycmF5KFsx
LDIsM10pLAorICAgICAgICAgICAgICAgICAgICBpID0gMDsKKyAgICAgICAgICAgICAgICBBcnJh
eS5wcm90b3R5cGUucmVkdWNlUmlnaHQuY2FsbChhcnIsIGZ1bmN0aW9uKGEsIGIpIHsKKyAgICAg
ICAgICAgICAgICAgICAgaSsrOworICAgICAgICAgICAgICAgICAgICBpZihpIDw9IDQpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGFycltpKzJdID0gYSszOworICAgICAgICAgICAgICAgICAg
ICB9OworICAgICAgICAgICAgICAgICAgICByZXR1cm4gYjsKKyAgICAgICAgICAgICAgICB9KTsK
KyAgICAgICAgICAgICAgICBleHBlY3QoYXJyKS50b0VxdWFsKHsKKyAgICAgICAgICAgICAgICAg
ICAgMDogMSwKKyAgICAgICAgICAgICAgICAgICAgMTogMiwKKyAgICAgICAgICAgICAgICAgICAg
MjogMywKKyAgICAgICAgICAgICAgICAgICAgMzogNiwKKyAgICAgICAgICAgICAgICAgICAgNDog
NSwKKyAgICAgICAgICAgICAgICAgICAgbGVuZ3RoOiAzIC8vIGRvZXMgbm90IGdldCB1cGRhdGVk
IG9uIHByb3BlcnR5IGFzc2lnbm1lbnQKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAg
ICAgICBleHBlY3QoaSkudG9CZSgyKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgaXQo
J3Nob3VsZCB3b3JrIGFzIGV4cGVjdGVkIGZvciBlbXB0eSBhcnJheXMnLCBmdW5jdGlvbigpIHsK
KyAgICAgICAgICAgICAgICB2YXIgc3B5ID0gamFzbWluZS5jcmVhdGVTcHkoKTsKKyAgICAgICAg
ICAgICAgICBleHBlY3QoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgIEFycmF5LnBy
b3RvdHlwZS5yZWR1Y2VSaWdodC5jYWxsKHtsZW5ndGg6MH0sIHNweSk7CisgICAgICAgICAgICAg
ICAgfSkudG9UaHJvdygpOworICAgICAgICAgICAgICAgIGV4cGVjdChzcHkpLm5vdC50b0hhdmVC
ZWVuQ2FsbGVkKCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGl0KCdzaG91bGQgdGhy
b3cgY29ycmVjdGx5IGlmIG5vIGNhbGxiYWNrIGlzIGdpdmVuJywgZnVuY3Rpb24oKSB7CisgICAg
ICAgICAgICAgICAgZXhwZWN0KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICB0ZXN0
U3ViamVjdC5yZWR1Y2VSaWdodCgpOworICAgICAgICAgICAgICAgIH0pLnRvVGhyb3coKTsKKyAg
ICAgICAgICAgIH0pOworICAgICAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIGV4cGVjdGVk
IHJlc3VsdCcsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGV4cGVjdCh0ZXN0U3ViamVj
dC5yZWR1Y2VSaWdodChmdW5jdGlvbihhLGIpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IChhfHwnJykudG9TdHJpbmcoKSsoYnx8JycpLnRvU3RyaW5nKCk7CisgICAgICAgICAgICAgICAg
fSkpLnRvRXF1YWwoJzMyMScpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBpdCgnc2hv
dWxkIG5vdCBkaXJlY3RseSBhZmZlY3QgdGhlIHBhc3NlZCBhcnJheScsIGZ1bmN0aW9uKCkgewor
ICAgICAgICAgICAgICAgIHZhciBjb3B5ID0gY3JlYXRlQXJyYXlMaWtlRnJvbUFycmF5KHRlc3RT
dWJqZWN0KTsKKyAgICAgICAgICAgICAgICB0ZXN0U3ViamVjdC5yZWR1Y2VSaWdodChmdW5jdGlv
bihhLGIpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGErYjsKKyAgICAgICAgICAgICAg
ICB9KTsKKyAgICAgICAgICAgICAgICBkZWxldGUodGVzdFN1YmplY3QucmVkdWNlUmlnaHQpOwor
ICAgICAgICAgICAgICAgIGV4cGVjdCh0ZXN0U3ViamVjdCkudG9FcXVhbChjb3B5KTsKKyAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgaXQoJ3Nob3VsZCBza2lwIG5vbi1zZXQgdmFsdWVzJywg
ZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgZGVsZXRlIHRlc3RTdWJqZWN0WzFdOworICAg
ICAgICAgICAgICAgIHZhciB2aXNpdGVkID0ge307CisgICAgICAgICAgICAgICAgdGVzdFN1Ympl
Y3QucmVkdWNlUmlnaHQoZnVuY3Rpb24oYSxiKSB7CisgICAgICAgICAgICAgICAgICAgIGlmKGEp
CisgICAgICAgICAgICAgICAgICAgICAgICB2aXNpdGVkW2FdID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYoYikKKyAgICAgICAgICAgICAgICAgICAgICAgIHZpc2l0ZWRbYl0gPSB0cnVl
OworICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICB9KTsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBleHBlY3QodmlzaXRlZCkudG9FcXVhbCh7
ICcxJzogdHJ1ZSwgJzMnOiB0cnVlIH0pOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBp
dCgnc2hvdWxkIGhhdmUgdGhlIHJpZ2h0IGxlbmd0aCcsIGZ1bmN0aW9uKCkgeworICAgICAgICAg
ICAgICAgIGV4cGVjdCh0ZXN0U3ViamVjdC5yZWR1Y2VSaWdodC5sZW5ndGgpLnRvQmUoMSk7Cisg
ICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgfSk7CisKKyAgICBkZXNjcmliZSgnaXNB
cnJheScsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaXQoJ3Nob3VsZCB3b3JrIGZvciBBcnJheScs
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHZhciByZXQgPSBBcnJheS5pc0FycmF5KFtdKTsK
KworICAgICAgICAgICAgZXhwZWN0KHJldCkudG9CZSh0cnVlKTsKKyAgICAgICAgfSk7CisKKyAg
ICAgICAgaXQoJ3Nob3VsZCBmYWlsIGZvciBvdGhlciBvYmplY3RzJywgZnVuY3Rpb24gKCkgewor
ICAgICAgICAgICAgdmFyIG9iamVjdHMgPSBbCisgICAgICAgICAgICAgICAgInNvbWVTdHJpbmci
LAorICAgICAgICAgICAgICAgIHRydWUsCisgICAgICAgICAgICAgICAgZmFsc2UsCisgICAgICAg
ICAgICAgICAgNDIsCisgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICB7fSwKKyAg
ICAgICAgICAgICAgICBPYmplY3QuY3JlYXRlKG51bGwpLAorICAgICAgICAgICAgICAgIC9mb28v
LAorICAgICAgICAgICAgICAgIGFyZ3VtZW50cywKKyAgICAgICAgICAgICAgICBkb2N1bWVudC5n
ZXRFbGVtZW50c0J5VGFnTmFtZSgiZGl2IikKKyAgICAgICAgICAgIF07CisKKyAgICAgICAgICAg
IG9iamVjdHMuZm9yRWFjaChmdW5jdGlvbiAodikgeworICAgICAgICAgICAgICAgIGV4cGVjdChB
cnJheS5pc0FycmF5KHYpKS50b0JlKGZhbHNlKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9
KTsKKyAgICB9KTsKKworICAgIAorfSk7CkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZl
bkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvZXM1LXNoaW0vdGVzdHMvc3Bl
Yy9zLWRhdGUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5j
aC9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2VzNS1zaGltL3Rlc3RzL3NwZWMvcy1k
YXRlLmpzCShyZXZpc2lvbiAwKQorKysgUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9m
bGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2VzNS1zaGltL3Rlc3RzL3NwZWMvcy1kYXRl
LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDAgQEAKK2Rlc2NyaWJlKCdEYXRlJywgZnVu
Y3Rpb24gKCkgeworICAgIAorICAgIGRlc2NyaWJlKCdub3cnLCBmdW5jdGlvbiAoKSB7CisgICAg
ICAgIGl0KCdzaG91bGQgYmUgdGhlIGN1cnJlbnQgdGltZScsIGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgICAgIGV4cGVjdChEYXRlLm5vdygpID09PSBuZXcgRGF0ZSgpLmdldFRpbWUoKSkudG9CZSh0
cnVlKTsKKyAgICAgICAgfSk7CisgICAgfSk7CisKKyAgICBkZXNjcmliZSgicGFyc2UiLCBmdW5j
dGlvbiAoKSB7CisgICAgICAgIC8vIFRPRE86IFdyaXRlIHRoZSByZXN0IG9mIHRoZSB0ZXN0Lgor
CisgICAgICAgIGl0KCdzaG91bGQgc3VwcG9ydCBleHRlbmRlZCB5ZWFycycsIGZ1bmN0aW9uICgp
IHsKKworICAgICAgICAgICAgZXhwZWN0KERhdGUucGFyc2UoJzAwMDEtMDEtMDFUMDA6MDA6MDBa
JykpLnRvQmUoLTYyMTM1NTk2ODAwMDAwKTsKKyAgICAgICAgICAgIGV4cGVjdChEYXRlLnBhcnNl
KCcrMjc1NzYwLTA5LTEzVDAwOjAwOjAwLjAwMFonKSkudG9CZSg4LjY0ZTE1KTsKKyAgICAgICAg
ICAgIGV4cGVjdChEYXRlLnBhcnNlKCcrMDMzNjU4LTA5LTI3VDAxOjQ2OjQwLjAwMFonKSkudG9C
ZSgxZTE1KTsKKyAgICAgICAgICAgIGV4cGVjdChEYXRlLnBhcnNlKCctMDAwMDAxLTAxLTAxVDAw
OjAwOjAwWicpKS50b0JlKC02MjE5ODc1NTIwMDAwMCk7CisgICAgICAgICAgICBleHBlY3QoRGF0
ZS5wYXJzZSgnKzAwMjAwOS0xMi0xNVQwMDowMDowMFonKSkudG9CZSgxMjYwODM1MjAwMDAwKTsK
KworICAgICAgICB9KTsKKworICAgIH0pOworCisgICAgZGVzY3JpYmUoInRvSVNPU3RyaW5nIiwg
ZnVuY3Rpb24gKCkgeworICAgICAgICAvLyBUT0RPOiB3cml0ZSB0aGUgcmVzdCBvZiB0aGUgdGVz
dC4KKyAgICAgICAKKyAgICAgICAgaXQoJ3Nob3VsZCBzdXBwb3J0IGV4dGVuZGVkIHllYXJzJywg
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgZXhwZWN0KG5ldyBEYXRlKC02MjE5ODc1NTIwMDAw
MCkudG9JU09TdHJpbmcoKS5pbmRleE9mKCctMDAwMDAxLTAxLTAxJykpLnRvQmUoMCk7CisgICAg
ICAgICAgICBleHBlY3QobmV3IERhdGUoOC42NGUxNSkudG9JU09TdHJpbmcoKS5pbmRleE9mKCcr
Mjc1NzYwLTA5LTEzJykpLnRvQmUoMCk7CisgICAgICAgIH0pOworICAgIH0pOworCisgICAgZGVz
Y3JpYmUoInRvSlNPTiIsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4g
dGhlIGlzb1N0cmluZyB3aGVuIHN0cmluZ2lmaWVkJywgZnVuY3Rpb24gKCkgeworICAgICAgICAg
ICAgdmFyIGRhdGUgPSBuZXcgRGF0ZSgpOworICAgICAgICAgICAgZXhwZWN0KEpTT04uc3RyaW5n
aWZ5KGRhdGUudG9JU09TdHJpbmcoKSkpLnRvQmUoSlNPTi5zdHJpbmdpZnkoZGF0ZSkpOworICAg
ICAgICB9KSAKKyAgICB9KTsKKworfSk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRl
eDogUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9j
b21wb25lbnRzL2VzNS1zaGltL3Rlc3RzL3NwZWMvcy1mdW5jdGlvbi5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2Nv
bXBvbmVudHMvZXM1LXNoaW0vdGVzdHMvc3BlYy9zLWZ1bmN0aW9uLmpzCShyZXZpc2lvbiAwKQor
KysgUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9j
b21wb25lbnRzL2VzNS1zaGltL3Rlc3RzL3NwZWMvcy1mdW5jdGlvbi5qcwkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDEzNyBAQAorCitkZXNjcmliZSgnRnVuY3Rpb24nLCBmdW5jdGlvbigpIHsK
KyAgICAidXNlIHN0cmljdCI7CisgICAgZGVzY3JpYmUoJ2JpbmQnLCBmdW5jdGlvbigpIHsKKyAg
ICAgICAgdmFyIGFjdHVhbCwgZXhwZWN0ZWQsCisgICAgICAgICAgICB0ZXN0U3ViamVjdDsKKyAg
ICAgICAgCisgICAgICAgIHRlc3RTdWJqZWN0ID0geworICAgICAgICAgICAgcHVzaDogZnVuY3Rp
b24obykgeworICAgICAgICAgICAgICAgIHRoaXMuYS5wdXNoKG8pOworICAgICAgICAgICAgfQor
ICAgICAgICB9OworICAgICAgICAKKyAgICAgICAgZnVuY3Rpb24gZnVuYygpIHsKKyAgICAgICAg
ICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoYXJndW1lbnRzLCBmdW5jdGlvbihhKSB7
CisgICAgICAgICAgICAgICAgdGhpcy5wdXNoKGEpOworICAgICAgICAgICAgfSwgdGhpcyk7Cisg
ICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfTsKKyAgICAgICAgCisgICAgICAgIGJl
Zm9yZUVhY2goZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBhY3R1YWwgPSBbXTsKKyAgICAgICAg
ICAgIHRlc3RTdWJqZWN0LmEgPSBbXTsKKyAgICAgICAgfSk7CisgICAgICAgIAorICAgICAgICBp
dCgnYmluZHMgcHJvcGVybHkgd2l0aG91dCBhIGNvbnRleHQnLCBmdW5jdGlvbigpIHsKKyAgICAg
ICAgICAgIHZhciBjb250ZXh0OworICAgICAgICAgICAgdGVzdFN1YmplY3QuZnVuYyA9IGZ1bmN0
aW9uKCkgeworICAgICAgICAgICAgICAgIGNvbnRleHQgPSB0aGlzOworICAgICAgICAgICAgfS5i
aW5kKCk7CisgICAgICAgICAgICB0ZXN0U3ViamVjdC5mdW5jKCk7CisgICAgICAgICAgICBleHBl
Y3QoY29udGV4dCkudG9CZShmdW5jdGlvbigpIHtyZXR1cm4gdGhpc30uY2FsbCgpKTsKKyAgICAg
ICAgfSk7CisgICAgICAgIGl0KCdiaW5kcyBwcm9wZXJseSB3aXRob3V0IGEgY29udGV4dCwgYW5k
IHN0aWxsIHN1cHBsaWVzIGJvdW5kIGFyZ3VtZW50cycsIGZ1bmN0aW9uKCkgeworICAgICAgICAg
ICAgdmFyIGEsIGNvbnRleHQ7CisgICAgICAgICAgICB0ZXN0U3ViamVjdC5mdW5jID0gZnVuY3Rp
b24oKSB7CisgICAgICAgICAgICAgICAgYSA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFy
Z3VtZW50cyk7CisgICAgICAgICAgICAgICAgY29udGV4dCA9IHRoaXM7CisgICAgICAgICAgICB9
LmJpbmQodW5kZWZpbmVkLCAxLDIsMyk7CisgICAgICAgICAgICB0ZXN0U3ViamVjdC5mdW5jKDEs
MiwzKTsKKyAgICAgICAgICAgIGV4cGVjdChhKS50b0VxdWFsKFsxLDIsMywxLDIsM10pOworICAg
ICAgICAgICAgZXhwZWN0KGNvbnRleHQpLnRvQmUoZnVuY3Rpb24oKSB7cmV0dXJuIHRoaXN9LmNh
bGwoKSk7CisgICAgICAgIH0pOworICAgICAgICBpdCgnYmluZHMgYSBjb250ZXh0IHByb3Blcmx5
JywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICB0ZXN0U3ViamVjdC5mdW5jID0gZnVuYy5iaW5k
KGFjdHVhbCk7CisgICAgICAgICAgICB0ZXN0U3ViamVjdC5mdW5jKDEsMiwzKTsKKyAgICAgICAg
ICAgIGV4cGVjdChhY3R1YWwpLnRvRXF1YWwoWzEsMiwzXSk7CisgICAgICAgICAgICBleHBlY3Qo
dGVzdFN1YmplY3QuYSkudG9FcXVhbChbXSk7CisgICAgICAgIH0pOworICAgICAgICBpdCgnYmlu
ZHMgYSBjb250ZXh0IGFuZCBzdXBwbGllcyBib3VuZCBhcmd1bWVudHMnLCBmdW5jdGlvbigpIHsK
KyAgICAgICAgICAgIHRlc3RTdWJqZWN0LmZ1bmMgPSBmdW5jLmJpbmQoYWN0dWFsLCAxLDIsMyk7
CisgICAgICAgICAgICB0ZXN0U3ViamVjdC5mdW5jKDQsNSw2KTsKKyAgICAgICAgICAgIGV4cGVj
dChhY3R1YWwpLnRvRXF1YWwoWzEsMiwzLDQsNSw2XSk7CisgICAgICAgICAgICBleHBlY3QodGVz
dFN1YmplY3QuYSkudG9FcXVhbChbXSk7CisgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAg
aXQoJ3JldHVybnMgcHJvcGVybHkgd2l0aG91dCBiaW5kaW5nIGEgY29udGV4dCcsIGZ1bmN0aW9u
KCkgeworICAgICAgICAgICAgdGVzdFN1YmplY3QuZnVuYyA9IGZ1bmN0aW9uKCkgeworICAgICAg
ICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgfS5iaW5kKCk7CisgICAgICAgICAg
ICB2YXIgY29udGV4dCA9IHRlc3RTdWJqZWN0LmZ1bmMoKTsKKyAgICAgICAgICAgIGV4cGVjdChj
b250ZXh0KS50b0JlKGZ1bmN0aW9uKCkge3JldHVybiB0aGlzfS5jYWxsKCkpOworICAgICAgICB9
KTsKKyAgICAgICAgaXQoJ3JldHVybnMgcHJvcGVybHkgd2l0aG91dCBiaW5kaW5nIGEgY29udGV4
dCwgYW5kIHN0aWxsIHN1cHBsaWVzIGJvdW5kIGFyZ3VtZW50cycsIGZ1bmN0aW9uKCkgeworICAg
ICAgICAgICAgdmFyIGNvbnRleHQ7CisgICAgICAgICAgICB0ZXN0U3ViamVjdC5mdW5jID0gZnVu
Y3Rpb24oKSB7CisgICAgICAgICAgICAgICAgY29udGV4dCA9IHRoaXM7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7CisgICAgICAg
ICAgICB9LmJpbmQodW5kZWZpbmVkLCAxLDIsMyk7CisgICAgICAgICAgICBhY3R1YWwgPSB0ZXN0
U3ViamVjdC5mdW5jKDEsMiwzKTsKKyAgICAgICAgICAgIGV4cGVjdChjb250ZXh0KS50b0JlKGZ1
bmN0aW9uKCkge3JldHVybiB0aGlzfS5jYWxsKCkpOworICAgICAgICAgICAgZXhwZWN0KGFjdHVh
bCkudG9FcXVhbChbMSwyLDMsMSwyLDNdKTsKKyAgICAgICAgfSk7CisgICAgICAgIGl0KCdyZXR1
cm5zIHByb3Blcmx5IHdoaWxlIGJpbmRpbmcgYSBjb250ZXh0IHByb3Blcmx5JywgZnVuY3Rpb24o
KSB7CisgICAgICAgICAgICB2YXIgcmV0OworICAgICAgICAgICAgdGVzdFN1YmplY3QuZnVuYyA9
IGZ1bmMuYmluZChhY3R1YWwpOworICAgICAgICAgICAgcmV0ID0gdGVzdFN1YmplY3QuZnVuYygx
LDIsMyk7CisgICAgICAgICAgICBleHBlY3QocmV0KS50b0JlKGFjdHVhbCk7CisgICAgICAgICAg
ICBleHBlY3QocmV0KS5ub3QudG9CZSh0ZXN0U3ViamVjdCk7CisgICAgICAgIH0pOworICAgICAg
ICBpdCgncmV0dXJucyBwcm9wZXJseSB3aGlsZSBiaW5kaW5nIGEgY29udGV4dCBhbmQgc3VwcGxp
ZXMgYm91bmQgYXJndW1lbnRzJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICB2YXIgcmV0Owor
ICAgICAgICAgICAgdGVzdFN1YmplY3QuZnVuYyA9IGZ1bmMuYmluZChhY3R1YWwsIDEsMiwzKTsK
KyAgICAgICAgICAgIHJldCA9IHRlc3RTdWJqZWN0LmZ1bmMoNCw1LDYpOworICAgICAgICAgICAg
ZXhwZWN0KHJldCkudG9CZShhY3R1YWwpOworICAgICAgICAgICAgZXhwZWN0KHJldCkubm90LnRv
QmUodGVzdFN1YmplY3QpOworICAgICAgICB9KTsKKyAgICAgICAgaXQoJ3Bhc3NlcyB0aGUgY29y
cmVjdCBhcmd1bWVudHMgYXMgYSBjb25zdHJ1Y3RvcicsIGZ1bmN0aW9uKCkgeworICAgICAgICAg
ICAgdmFyIHJldCwgZXhwZWN0ZWQgPSB7IG5hbWU6ICJDb3JyZWN0IiB9OworICAgICAgICAgICAg
dGVzdFN1YmplY3QuZnVuYyA9IGZ1bmN0aW9uKGFyZykgeworICAgICAgICAgICAgICAgIHJldHVy
biBhcmc7CisgICAgICAgICAgICB9LmJpbmQoeyBuYW1lOiAiSW5jb3JyZWN0IiB9KTsKKyAgICAg
ICAgICAgIHJldCA9IG5ldyB0ZXN0U3ViamVjdC5mdW5jKGV4cGVjdGVkKTsKKyAgICAgICAgICAg
IGV4cGVjdChyZXQpLnRvQmUoZXhwZWN0ZWQpOworICAgICAgICB9KTsKKyAgICAgICAgaXQoJ3Jl
dHVybnMgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgYm91bmQgZnVuY3Rpb24gd2hlbiBjYWxsZWQg
YXMgYSBjb25zdHJ1Y3RvcicsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHZhciBvcmFjbGUg
PSBbMSwgMiwgM107CisgICAgICAgICAgICB2YXIgc3ViamVjdCA9IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gb3JhY2xlOworICAgICAgICAgICAgfS5iaW5kKG51bGwpOwor
ICAgICAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBzdWJqZWN0OworICAgICAgICAgICAgZXhwZWN0
KHJlc3VsdCkudG9CZShvcmFjbGUpOworICAgICAgICB9KTsKKyAgICAgICAgaXQoJ3JldHVybnMg
dGhlIGNvcnJlY3QgdmFsdWUgaWYgY29uc3RydWN0b3IgcmV0dXJucyBwcmltaXRpdmUnLCBmdW5j
dGlvbigpIHsKKyAgICAgICAgICAgIHZhciBvcmFjbGUgPSBbMSwgMiwgM107CisgICAgICAgICAg
ICB2YXIgc3ViamVjdCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gb3Jh
Y2xlOworICAgICAgICAgICAgfS5iaW5kKG51bGwpOworICAgICAgICAgICAgdmFyIHJlc3VsdCA9
IG5ldyBzdWJqZWN0OworICAgICAgICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZShvcmFjbGUpOwor
CisgICAgICAgICAgICBvcmFjbGUgPSB7fTsKKyAgICAgICAgICAgIHJlc3VsdCA9IG5ldyBzdWJq
ZWN0OworICAgICAgICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZShvcmFjbGUpOworCisgICAgICAg
ICAgICBvcmFjbGUgPSBmdW5jdGlvbigpe307CisgICAgICAgICAgICByZXN1bHQgPSBuZXcgc3Vi
amVjdDsKKyAgICAgICAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUob3JhY2xlKTsKKworICAgICAg
ICAgICAgb3JhY2xlID0gImFzZGYiOworICAgICAgICAgICAgcmVzdWx0ID0gbmV3IHN1YmplY3Q7
CisgICAgICAgICAgICBleHBlY3QocmVzdWx0KS5ub3QudG9CZShvcmFjbGUpOworCisgICAgICAg
ICAgICBvcmFjbGUgPSBudWxsOworICAgICAgICAgICAgcmVzdWx0ID0gbmV3IHN1YmplY3Q7Cisg
ICAgICAgICAgICBleHBlY3QocmVzdWx0KS5ub3QudG9CZShvcmFjbGUpOworCisgICAgICAgICAg
ICBvcmFjbGUgPSB0cnVlOworICAgICAgICAgICAgcmVzdWx0ID0gbmV3IHN1YmplY3Q7CisgICAg
ICAgICAgICBleHBlY3QocmVzdWx0KS5ub3QudG9CZShvcmFjbGUpOworCisgICAgICAgICAgICBv
cmFjbGUgPSAxOworICAgICAgICAgICAgcmVzdWx0ID0gbmV3IHN1YmplY3Q7CisgICAgICAgICAg
ICBleHBlY3QocmVzdWx0KS5ub3QudG9CZShvcmFjbGUpOworICAgICAgICB9KTsKKyAgICB9KTsK
K30pOwpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFt
cGxlLWFwcC9jb21wb25lbnRzL2VzNS1zaGltL3Rlc3RzL3NwZWMvcy1vYmplY3QuanMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxl
LWFwcC9jb21wb25lbnRzL2VzNS1zaGltL3Rlc3RzL3NwZWMvcy1vYmplY3QuanMJKHJldmlzaW9u
IDApCisrKyBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUt
YXBwL2NvbXBvbmVudHMvZXM1LXNoaW0vdGVzdHMvc3BlYy9zLW9iamVjdC5qcwkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDg0IEBACitkZXNjcmliZSgnT2JqZWN0JywgZnVuY3Rpb24gKCkgewor
ICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIGRlc2NyaWJlKCJPYmplY3Qua2V5cyIsIGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgdmFyIG9iaiA9IHsKKyAgICAgICAgICAgICJzdHIiOiAiYm96IiwKKyAg
ICAgICAgICAgICJvYmoiOiB7IH0sCisgICAgICAgICAgICAiYXJyIjogW10sCisgICAgICAgICAg
ICAiYm9vbCI6IHRydWUsCisgICAgICAgICAgICAibnVtIjogNDIsCisgICAgICAgICAgICAibnVs
bCI6IG51bGwsCisgICAgICAgICAgICAidW5kZWZpbmVkIjogdW5kZWZpbmVkCisgICAgICAgIH07
CisKKyAgICAgICAgdmFyIGxvb3BlZFZhbHVlcyA9IFtdOworICAgICAgICBmb3IgKHZhciBrIGlu
IG9iaikgeworICAgICAgICAgICAgbG9vcGVkVmFsdWVzLnB1c2goayk7CisgICAgICAgIH0KKwor
ICAgICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iaik7CisgICAgICAgIGl0KCdzaG91bGQg
aGF2ZSBjb3JyZWN0IGxlbmd0aCcsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGV4cGVjdChr
ZXlzLmxlbmd0aCkudG9CZSg3KTsgICAgCisgICAgICAgIH0pOworCisgICAgICAgIGl0KCdzaG91
bGQgcmV0dXJuIGFuIEFycmF5JywgZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgZXhwZWN0KEFy
cmF5LmlzQXJyYXkoa2V5cykpLnRvQmUodHJ1ZSk7ICAgIAorICAgICAgICB9KTsKKyAgICAgICAg
CisgICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIG5hbWVzIHdoaWNoIGFyZSBvd24gcHJvcGVydGll
cycsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGtleXMuZm9yRWFjaChmdW5jdGlvbiAobmFt
ZSkgeworICAgICAgICAgICAgICAgIGV4cGVjdChvYmouaGFzT3duUHJvcGVydHkobmFtZSkpLnRv
QmUodHJ1ZSk7CisgICAgICAgICAgICB9KTsgICAgCisgICAgICAgIH0pOworCisgICAgICAgIGl0
KCdzaG91bGQgcmV0dXJuIG5hbWVzIHdoaWNoIGFyZSBlbnVtZXJhYmxlJywgZnVuY3Rpb24gKCkg
eworICAgICAgICAgICAga2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7CisgICAgICAgICAg
ICAgICAgZXhwZWN0KGxvb3BlZFZhbHVlcy5pbmRleE9mKG5hbWUpKS50b05vdEJlKC0xKTsKKyAg
ICAgICAgICAgIH0pIAorICAgICAgICB9KTsKKyAgICAgICAgCisgICAgICAgIGl0KCdzaG91bGQg
dGhyb3cgZXJyb3IgZm9yIG5vbiBvYmplY3QnLCBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB2
YXIgZSA9IHt9OworICAgICAgICAgICAgZXhwZWN0KGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAg
ICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyg0MikKKyAgICAgICAg
ICAgICAgICB9IGNhdGNoIChlcnIpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KS50b1Rocm93KGUpOworICAgICAgICB9KTsK
KyAgICB9KTsKKyAKKyAgICBkZXNjcmliZSgiT2JqZWN0LmlzRXh0ZW5zaWJsZSIsIGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgdmFyIG9iaiA9IHsgfTsKKworICAgICAgICBpdCgnc2hvdWxkIHJldHVy
biB0cnVlIGlmIG9iamVjdCBpcyBleHRlbnNpYmxlJywgZnVuY3Rpb24gKCkgeworICAgICAgICAg
ICAgZXhwZWN0KE9iamVjdC5pc0V4dGVuc2libGUob2JqKSkudG9CZSh0cnVlKTsgICAgCisgICAg
ICAgIH0pOworICAgICAgICAKKyAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2UgaWYgb2Jq
ZWN0IGlzIG5vdCBleHRlbnNpYmxlJywgZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgZXhwZWN0
KE9iamVjdC5pc0V4dGVuc2libGUoT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKG9iaikpKS50b0Jl
KGZhbHNlKTsgICAgCisgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAgaXQoJ3Nob3VsZCBy
ZXR1cm4gZmFsc2UgaWYgb2JqZWN0IGlzIHNlYWwnLCBmdW5jdGlvbiAoKSB7CisgICAgICAgICAg
ICBleHBlY3QoT2JqZWN0LmlzRXh0ZW5zaWJsZShPYmplY3Quc2VhbChvYmopKSkudG9CZShmYWxz
ZSk7ICAgIAorICAgICAgICB9KTsKKyAgICAgICAgCisgICAgICAgIGl0KCdzaG91bGQgcmV0dXJu
IGZhbHNlIGlmIG9iamVjdCBpcyBmcmVlemUnLCBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBl
eHBlY3QoT2JqZWN0LmlzRXh0ZW5zaWJsZShPYmplY3QuZnJlZXplKG9iaikpKS50b0JlKGZhbHNl
KTsgICAgCisgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBl
cnJvciBmb3Igbm9uIG9iamVjdCcsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHZhciBlMSA9
IHt9OworICAgICAgICAgICAgZXhwZWN0KGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICB0
cnkgeworICAgICAgICAgICAgICAgICAgICBPYmplY3QuaXNFeHRlbnNpYmxlKDQyKQorICAgICAg
ICAgICAgICAgIH0gY2F0Y2ggKGVycikgeworICAgICAgICAgICAgICAgICAgICB0aHJvdyBlMTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KS50b1Rocm93KGUxKTsKKyAgICAgICAg
fSk7CisgICAgfSk7CisgCit9KTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBQ
ZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBv
bmVudHMvZXM1LXNoaW0vdGVzdHMvc3BlYy9zLXN0cmluZy5qcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJm
b3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVu
dHMvZXM1LXNoaW0vdGVzdHMvc3BlYy9zLXN0cmluZy5qcwkocmV2aXNpb24gMCkKKysrIFBlcmZv
cm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50
cy9lczUtc2hpbS90ZXN0cy9zcGVjL3Mtc3RyaW5nLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTEgQEAKK2Rlc2NyaWJlKCdTdHJpbmcnLCBmdW5jdGlvbigpIHsKKyAgICAidXNlIHN0cmlj
dCI7CisgICAgZGVzY3JpYmUoInRyaW0iLCBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIHRlc3Qg
PSAiXHgwOVx4MEFceDBCXHgwQ1x4MERceDIwXHhBMFx1MTY4MFx1MTgwRVx1MjAwMFx1MjAwMVx1
MjAwMlx1MjAwM1x1MjAwNFx1MjAwNVx1MjAwNlx1MjAwN1x1MjAwOFx1MjAwOVx1MjAwQVx1MjAy
Rlx1MjA1Rlx1MzAwMFx1MjAyOFx1MjAyOVx1RkVGRkhlbGxvLCBXb3JsZCFceDA5XHgwQVx4MEJc
eDBDXHgwRFx4MjBceEEwXHUxNjgwXHUxODBFXHUyMDAwXHUyMDAxXHUyMDAyXHUyMDAzXHUyMDA0
XHUyMDA1XHUyMDA2XHUyMDA3XHUyMDA4XHUyMDA5XHUyMDBBXHUyMDJGXHUyMDVGXHUzMDAwXHUy
MDI4XHUyMDI5XHVGRUZGIjsKKworICAgICAgICBpdCgndHJpbXMgYWxsIEVTNSB3aGl0ZXNwYWNl
JywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBleHBlY3QodGVzdC50cmltKCkpLnRvRXF1YWwo
IkhlbGxvLCBXb3JsZCEiKTsKKyAgICAgICAgICAgIGV4cGVjdCh0ZXN0LnRyaW0oKS5sZW5ndGgp
LnRvRXF1YWwoMTMpOworICAgICAgICB9KTsKKyAgICB9KTsKK30pOwpJbmRleDogUGVyZm9ybWFu
Y2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2Zs
aWdodC8udHJhdmlzLnltbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZl
bkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvZmxpZ2h0Ly50cmF2aXMueW1s
CShyZXZpc2lvbiAwKQorKysgUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRq
cy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2ZsaWdodC8udHJhdmlzLnltbAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDcgQEAKK2xhbmd1YWdlOiBub2RlX2pzCitub2RlX2pzOgorICAtIDAuOAor
YmVmb3JlX3NjcmlwdDoKKyAgLSAiZXhwb3J0IERJU1BMQVk9Ojk5LjAiCisgIC0gInNoIC1lIC9l
dGMvaW5pdC5kL3h2ZmIgc3RhcnQiCitzY3JpcHQ6ICJucG0gaW5zdGFsbDsgbWFrZSBzdGFuZGFs
b25lOyBwaGFudG9tanMgdGVzdC9waGFudG9tLWphc21pbmUvcnVuX2phc21pbmVfdGVzdC5jb2Zm
ZWUgdGVzdC9ydW4vamFzbWluZV90ZXN0Lmh0bWwiCkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0Rv
WW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvZmxpZ2h0L2xpYi9h
ZHZpY2UuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9m
bGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2ZsaWdodC9saWIvYWR2aWNlLmpzCShyZXZp
c2lvbiAwKQorKysgUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFt
cGxlLWFwcC9jb21wb25lbnRzL2ZsaWdodC9saWIvYWR2aWNlLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNjkgQEAKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQorLy8gQ29weXJpZ2h0IDIwMTMgVHdpdHRlciwgSW5jCisvLyBMaWNlbnNlZCB1bmRlciBU
aGUgTUlUIExpY2Vuc2UKKy8vIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVQKKy8v
ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisidXNlIHN0cmlj
dCI7CisKK2RlZmluZSgKKworICBbCisgICAgJy4vdXRpbHMnLAorICAgICcuL2NvbXBvc2UnCisg
IF0sCisKKyAgZnVuY3Rpb24gKHV0aWwsIGNvbXBvc2UpIHsKKworICAgIHZhciBhZHZpY2UgPSB7
CisKKyAgICAgIGFyb3VuZDogZnVuY3Rpb24oYmFzZSwgd3JhcHBlZCkgeworICAgICAgICByZXR1
cm4gZnVuY3Rpb24gY29tcG9zZWRBcm91bmQoKSB7CisgICAgICAgICAgLy8gdW5wYWNraW5nIGFy
Z3VtZW50cyBieSBoYW5kIGJlbmNobWFya2VkIGZhc3RlcgorICAgICAgICAgIHZhciBpID0gMCwg
bCA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkobCArIDEpOworICAgICAgICAg
IGFyZ3NbMF0gPSBiYXNlLmJpbmQodGhpcyk7CisgICAgICAgICAgZm9yICg7IGkgPCBsOyBpKysp
IGFyZ3NbaSArIDFdID0gYXJndW1lbnRzW2ldOworCisgICAgICAgICAgcmV0dXJuIHdyYXBwZWQu
YXBwbHkodGhpcywgYXJncyk7CisgICAgICAgIH0KKyAgICAgIH0sCisKKyAgICAgIGJlZm9yZTog
ZnVuY3Rpb24oYmFzZSwgYmVmb3JlKSB7CisgICAgICAgIHZhciBiZWZvcmVGbiA9ICh0eXBlb2Yg
YmVmb3JlID09ICdmdW5jdGlvbicpID8gYmVmb3JlIDogYmVmb3JlLm9ialtiZWZvcmUuZm5OYW1l
XTsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGNvbXBvc2VkQmVmb3JlKCkgeworICAgICAgICAg
IGJlZm9yZUZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisgICAgICAgICAgcmV0dXJuIGJhc2Uu
YXBwbHkodGhpcywgYXJndW1lbnRzKTsKKyAgICAgICAgfQorICAgICAgfSwKKworICAgICAgYWZ0
ZXI6IGZ1bmN0aW9uKGJhc2UsIGFmdGVyKSB7CisgICAgICAgIHZhciBhZnRlckZuID0gKHR5cGVv
ZiBhZnRlciA9PSAnZnVuY3Rpb24nKSA/IGFmdGVyIDogYWZ0ZXIub2JqW2FmdGVyLmZuTmFtZV07
CisgICAgICAgIHJldHVybiBmdW5jdGlvbiBjb21wb3NlZEFmdGVyKCkgeworICAgICAgICAgIHZh
ciByZXMgPSAoYmFzZS51bmJvdW5kIHx8IGJhc2UpLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7Cisg
ICAgICAgICAgYWZ0ZXJGbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpOworICAgICAgICAgIHJldHVy
biByZXM7CisgICAgICAgIH0KKyAgICAgIH0sCisKKyAgICAgIC8vIGEgbWl4aW4gdGhhdCBhbGxv
d3Mgb3RoZXIgbWl4aW5zIHRvIGF1Z21lbnQgZXhpc3RpbmcgZnVuY3Rpb25zIGJ5IGFkZGluZyBh
ZGRpdGlvbmFsCisgICAgICAvLyBjb2RlIGJlZm9yZSwgYWZ0ZXIgb3IgYXJvdW5kLgorICAgICAg
d2l0aEFkdmljZTogZnVuY3Rpb24oKSB7CisgICAgICAgIFsnYmVmb3JlJywgJ2FmdGVyJywgJ2Fy
b3VuZCddLmZvckVhY2goZnVuY3Rpb24obSkgeworICAgICAgICAgIHRoaXNbbV0gPSBmdW5jdGlv
bihtZXRob2QsIGZuKSB7CisKKyAgICAgICAgICAgIGNvbXBvc2UudW5sb2NrUHJvcGVydHkodGhp
cywgbWV0aG9kLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzW21l
dGhvZF0gPT0gJ2Z1bmN0aW9uJykgeworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzW21ldGhv
ZF0gPSBhZHZpY2VbbV0odGhpc1ttZXRob2RdLCBmbik7CisgICAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXNbbWV0aG9kXSA9IGZuOworICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgIH07CisgICAgICAgIH0sIHRoaXMpOwor
ICAgICAgfQorICAgIH07CisKKyAgICByZXR1cm4gYWR2aWNlOworICB9CispOwpJbmRleDogUGVy
Zm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25l
bnRzL2ZsaWdodC9saWIvY29tcG9uZW50LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVz
dHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9mbGlnaHQv
bGliL2NvbXBvbmVudC5qcwkocmV2aXNpb24gMCkKKysrIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VF
dmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9mbGlnaHQvbGliL2NvbXBv
bmVudC5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMwOCBAQAorLy8gPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBDb3B5cmlnaHQgMjAxMyBUd2l0dGVy
LCBJbmMKKy8vIExpY2Vuc2VkIHVuZGVyIFRoZSBNSVQgTGljZW5zZQorLy8gaHR0cDovL29wZW5z
b3VyY2Uub3JnL2xpY2Vuc2VzL01JVAorLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09CisKKyJ1c2Ugc3RyaWN0IjsKKworZGVmaW5lKAorCisgIFsKKyAgICAnLi9h
ZHZpY2UnLAorICAgICcuL3V0aWxzJywKKyAgICAnLi9jb21wb3NlJywKKyAgICAnLi9yZWdpc3Ry
eScKKyAgXSwKKworICBmdW5jdGlvbihhZHZpY2UsIHV0aWxzLCBjb21wb3NlLCByZWdpc3RyeSkg
eworCisgICAgdmFyIGZ1bmN0aW9uTmFtZVJlZ0V4ID0gL2Z1bmN0aW9uICguKj8pXHM/XCgvOwor
ICAgIHZhciBjb21wb25lbnRJZCA9IDA7CisKKyAgICBmdW5jdGlvbiB0ZWFyZG93bkluc3RhbmNl
KGluc3RhbmNlSW5mbyl7CisgICAgICBpbnN0YW5jZUluZm8uZXZlbnRzLnNsaWNlKCkuZm9yRWFj
aChmdW5jdGlvbihldmVudCkgeworICAgICAgICB2YXIgYXJncyA9IFtldmVudC50eXBlXTsKKwor
ICAgICAgICBldmVudC5lbGVtZW50ICYmIGFyZ3MudW5zaGlmdChldmVudC5lbGVtZW50KTsKKyAg
ICAgICAgKHR5cGVvZiBldmVudC5jYWxsYmFjayA9PSAnZnVuY3Rpb24nKSAmJiBhcmdzLnB1c2go
ZXZlbnQuY2FsbGJhY2spOworCisgICAgICAgIHRoaXMub2ZmLmFwcGx5KHRoaXMsIGFyZ3MpOwor
ICAgICAgfSwgaW5zdGFuY2VJbmZvLmluc3RhbmNlKTsKKyAgICB9CisKKworICAgIGZ1bmN0aW9u
IHRlYXJkb3duKCkgeworICAgICAgdGVhcmRvd25JbnN0YW5jZShyZWdpc3RyeS5maW5kSW5zdGFu
Y2VJbmZvKHRoaXMpKTsKKyAgICB9CisKKyAgICAvL3RlYXJkb3duIGZvciBhbGwgaW5zdGFuY2Vz
IG9mIHRoaXMgY29uc3RydWN0b3IKKyAgICBmdW5jdGlvbiB0ZWFyZG93bkFsbCgpIHsKKyAgICAg
IHZhciBjb21wb25lbnRJbmZvID0gcmVnaXN0cnkuZmluZENvbXBvbmVudEluZm8odGhpcyk7CisK
KyAgICAgIGNvbXBvbmVudEluZm8gJiYgT2JqZWN0LmtleXMoY29tcG9uZW50SW5mby5pbnN0YW5j
ZXMpLmZvckVhY2goZnVuY3Rpb24oaykgeworICAgICAgICB2YXIgaW5mbyA9IGNvbXBvbmVudElu
Zm8uaW5zdGFuY2VzW2tdOworICAgICAgICBpbmZvLmluc3RhbmNlLnRlYXJkb3duKCk7CisgICAg
ICB9KTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBjaGVja1NlcmlhbGl6YWJsZSh0eXBlLCBkYXRh
KSB7CisgICAgICB0cnkgeworICAgICAgICB3aW5kb3cucG9zdE1lc3NhZ2UoZGF0YSwgJyonKTsK
KyAgICAgIH0gY2F0Y2goZSkgeworICAgICAgICBjb25zb2xlLmxvZygndW5zZXJpYWxpemFibGUg
ZGF0YSBmb3IgZXZlbnQnLHR5cGUsJzonLGRhdGEpOworICAgICAgICB0aHJvdyBuZXcgRXJyb3Io
CisgICAgICAgICAgWyJUaGUgZXZlbnQiLCB0eXBlLCAib24gY29tcG9uZW50IiwgdGhpcy50b1N0
cmluZygpLCAid2FzIHRyaWdnZXJlZCB3aXRoIG5vbi1zZXJpYWxpemFibGUgZGF0YSJdLmpvaW4o
IiAiKQorICAgICAgICApOworICAgICAgfQorICAgIH0KKworICAgIC8vY29tbW9uIG1peGluIGFs
bG9jYXRlcyBiYXNpYyBmdW5jdGlvbmFsaXR5IC0gdXNlZCBieSBhbGwgY29tcG9uZW50IHByb3Rv
dHlwZXMKKyAgICAvL2NhbGxiYWNrIGNvbnRleHQgaXMgYm91bmQgdG8gY29tcG9uZW50CisgICAg
ZnVuY3Rpb24gd2l0aEJhc2VDb21wb25lbnQoKSB7CisKKyAgICAgIC8vIGRlbGVnYXRlIHRyaWdn
ZXIsIGJpbmQgYW5kIHVuYmluZCB0byBhbiBlbGVtZW50CisgICAgICAvLyBpZiAkZWxlbWVudCBu
b3Qgc3VwcGxpZWQsIHVzZSBjb21wb25lbnQncyBub2RlCisgICAgICAvLyBvdGhlciBhcmd1bWVu
dHMgYXJlIHBhc3NlZCBvbgorICAgICAgLy8gZXZlbnQgY2FuIGJlIGVpdGhlciBhIHN0cmluZyBz
cGVjaWZ5aW5nIHRoZSB0eXBlCisgICAgICAvLyBvZiB0aGUgZXZlbnQsIG9yIGEgaGFzaCBzcGVj
aWZ5aW5nIGJvdGggdGhlIHR5cGUKKyAgICAgIC8vIGFuZCBhIGRlZmF1bHQgZnVuY3Rpb24gdG8g
YmUgY2FsbGVkLgorICAgICAgdGhpcy50cmlnZ2VyID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZh
ciAkZWxlbWVudCwgdHlwZSwgZGF0YSwgZXZlbnQsIGRlZmF1bHRGbjsKKyAgICAgICAgdmFyIGxh
c3RJbmRleCA9IGFyZ3VtZW50cy5sZW5ndGggLSAxLCBsYXN0QXJnID0gYXJndW1lbnRzW2xhc3RJ
bmRleF07CisKKyAgICAgICAgaWYgKHR5cGVvZiBsYXN0QXJnICE9ICJzdHJpbmciICYmICEobGFz
dEFyZyAmJiBsYXN0QXJnLmRlZmF1bHRCZWhhdmlvcikpIHsKKyAgICAgICAgICBsYXN0SW5kZXgt
LTsKKyAgICAgICAgICBkYXRhID0gbGFzdEFyZzsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChs
YXN0SW5kZXggPT0gMSkgeworICAgICAgICAgICRlbGVtZW50ID0gJChhcmd1bWVudHNbMF0pOwor
ICAgICAgICAgIGV2ZW50ID0gYXJndW1lbnRzWzFdOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICRlbGVtZW50ID0gdGhpcy4kbm9kZTsKKyAgICAgICAgICBldmVudCA9IGFyZ3VtZW50c1sw
XTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChldmVudC5kZWZhdWx0QmVoYXZpb3IpIHsKKyAg
ICAgICAgICBkZWZhdWx0Rm4gPSBldmVudC5kZWZhdWx0QmVoYXZpb3I7CisgICAgICAgICAgZXZl
bnQgPSAkLkV2ZW50KGV2ZW50LnR5cGUpOworICAgICAgICB9CisKKyAgICAgICAgdHlwZSA9IGV2
ZW50LnR5cGUgfHwgZXZlbnQ7CisKKyAgICAgICAgaWYgKHdpbmRvdy5ERUJVRyAmJiB3aW5kb3cu
REVCVUcuZW5hYmxlZCAmJiB3aW5kb3cucG9zdE1lc3NhZ2UpIHsKKyAgICAgICAgICBjaGVja1Nl
cmlhbGl6YWJsZS5jYWxsKHRoaXMsIHR5cGUsIGRhdGEpOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKHR5cGVvZiB0aGlzLmF0dHIuZXZlbnREYXRhID09PSAnb2JqZWN0JykgeworICAgICAgICAg
IGRhdGEgPSAkLmV4dGVuZCh0cnVlLCB7fSwgdGhpcy5hdHRyLmV2ZW50RGF0YSwgZGF0YSk7Cisg
ICAgICAgIH0KKworICAgICAgICAkZWxlbWVudC50cmlnZ2VyKChldmVudCB8fCB0eXBlKSwgZGF0
YSk7CisKKyAgICAgICAgaWYgKGRlZmF1bHRGbiAmJiAhZXZlbnQuaXNEZWZhdWx0UHJldmVudGVk
KCkpIHsKKyAgICAgICAgICAodGhpc1tkZWZhdWx0Rm5dIHx8IGRlZmF1bHRGbikuY2FsbCh0aGlz
KTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiAkZWxlbWVudDsKKyAgICAgIH07CisKKyAg
ICAgIHRoaXMub24gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyICRlbGVtZW50LCB0eXBlLCBj
YWxsYmFjaywgb3JpZ2luYWxDYjsKKyAgICAgICAgdmFyIGxhc3RJbmRleCA9IGFyZ3VtZW50cy5s
ZW5ndGggLSAxLCBvcmlnaW4gPSBhcmd1bWVudHNbbGFzdEluZGV4XTsKKworICAgICAgICBpZiAo
dHlwZW9mIG9yaWdpbiA9PSAib2JqZWN0IikgeworICAgICAgICAgIC8vZGVsZWdhdGUgY2FsbGJh
Y2sKKyAgICAgICAgICBvcmlnaW5hbENiID0gdXRpbHMuZGVsZWdhdGUoCisgICAgICAgICAgICB0
aGlzLnJlc29sdmVEZWxlZ2F0ZVJ1bGVzKG9yaWdpbikKKyAgICAgICAgICApOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgIG9yaWdpbmFsQ2IgPSBvcmlnaW47CisgICAgICAgIH0KKworICAg
ICAgICBpZiAobGFzdEluZGV4ID09IDIpIHsKKyAgICAgICAgICAkZWxlbWVudCA9ICQoYXJndW1l
bnRzWzBdKTsKKyAgICAgICAgICB0eXBlID0gYXJndW1lbnRzWzFdOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICRlbGVtZW50ID0gdGhpcy4kbm9kZTsKKyAgICAgICAgICB0eXBlID0gYXJn
dW1lbnRzWzBdOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHR5cGVvZiBvcmlnaW5hbENiICE9
ICdmdW5jdGlvbicgJiYgdHlwZW9mIG9yaWdpbmFsQ2IgIT0gJ29iamVjdCcpIHsKKyAgICAgICAg
ICB0aHJvdyBuZXcgRXJyb3IoIlVuYWJsZSB0byBiaW5kIHRvICciICsgdHlwZSArICInIGJlY2F1
c2UgdGhlIGdpdmVuIGNhbGxiYWNrIGlzIG5vdCBhIGZ1bmN0aW9uIG9yIGFuIG9iamVjdCIpOwor
ICAgICAgICB9CisKKyAgICAgICAgY2FsbGJhY2sgPSBvcmlnaW5hbENiLmJpbmQodGhpcyk7Cisg
ICAgICAgIGNhbGxiYWNrLnRhcmdldCA9IG9yaWdpbmFsQ2I7CisKKyAgICAgICAgLy8gaWYgdGhl
IG9yaWdpbmFsIGNhbGxiYWNrIGlzIGFscmVhZHkgYnJhbmRlZCBieSBqUXVlcnkncyBndWlkLCBj
b3B5IGl0IHRvIHRoZSBjb250ZXh0LWJvdW5kIHZlcnNpb24KKyAgICAgICAgaWYgKG9yaWdpbmFs
Q2IuZ3VpZCkgeworICAgICAgICAgIGNhbGxiYWNrLmd1aWQgPSBvcmlnaW5hbENiLmd1aWQ7Cisg
ICAgICAgIH0KKworICAgICAgICAkZWxlbWVudC5vbih0eXBlLCBjYWxsYmFjayk7CisKKyAgICAg
ICAgLy8gZ2V0IGpxdWVyeSdzIGd1aWQgZnJvbSBvdXIgYm91bmQgZm4sIHNvIHVuYmluZGluZyB3
aWxsIHdvcmsKKyAgICAgICAgb3JpZ2luYWxDYi5ndWlkID0gY2FsbGJhY2suZ3VpZDsKKworICAg
ICAgICByZXR1cm4gY2FsbGJhY2s7CisgICAgICB9OworCisgICAgICB0aGlzLm9mZiA9IGZ1bmN0
aW9uKCkgeworICAgICAgICB2YXIgJGVsZW1lbnQsIHR5cGUsIGNhbGxiYWNrOworICAgICAgICB2
YXIgbGFzdEluZGV4ID0gYXJndW1lbnRzLmxlbmd0aCAtIDE7CisKKyAgICAgICAgaWYgKHR5cGVv
ZiBhcmd1bWVudHNbbGFzdEluZGV4XSA9PSAiZnVuY3Rpb24iKSB7CisgICAgICAgICAgY2FsbGJh
Y2sgPSBhcmd1bWVudHNbbGFzdEluZGV4XTsKKyAgICAgICAgICBsYXN0SW5kZXggLT0gMTsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChsYXN0SW5kZXggPT0gMSkgeworICAgICAgICAgICRlbGVt
ZW50ID0gJChhcmd1bWVudHNbMF0pOworICAgICAgICAgIHR5cGUgPSBhcmd1bWVudHNbMV07Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgJGVsZW1lbnQgPSB0aGlzLiRub2RlOworICAgICAg
ICAgIHR5cGUgPSBhcmd1bWVudHNbMF07CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gJGVs
ZW1lbnQub2ZmKHR5cGUsIGNhbGxiYWNrKTsKKyAgICAgIH07CisKKyAgICAgIHRoaXMucmVzb2x2
ZURlbGVnYXRlUnVsZXMgPSBmdW5jdGlvbihydWxlSW5mbykgeworICAgICAgICB2YXIgcnVsZXMg
PSB7fTsKKworICAgICAgICBPYmplY3Qua2V5cyhydWxlSW5mbykuZm9yRWFjaChmdW5jdGlvbihy
KSB7CisgICAgICAgICAgaWYgKCFyIGluIHRoaXMuYXR0cikgeworICAgICAgICAgICAgdGhyb3cg
bmV3IEVycm9yKCdDb21wb25lbnQgIicgKyB0aGlzLnRvU3RyaW5nKCkgKyAnIiB3YW50cyB0byBs
aXN0ZW4gb24gIicgKyByICsgJyIgYnV0IG5vIHN1Y2ggYXR0cmlidXRlIHdhcyBkZWZpbmVkLicp
OworICAgICAgICAgIH0KKyAgICAgICAgICBydWxlc1t0aGlzLmF0dHJbcl1dID0gcnVsZUluZm9b
cl07CisgICAgICAgIH0sIHRoaXMpOworCisgICAgICAgIHJldHVybiBydWxlczsKKyAgICAgIH07
CisKKyAgICAgIHRoaXMuZGVmYXVsdEF0dHJzID0gZnVuY3Rpb24oZGVmYXVsdHMpIHsKKyAgICAg
ICAgdXRpbHMucHVzaCh0aGlzLmRlZmF1bHRzLCBkZWZhdWx0cywgdHJ1ZSkgfHwgKHRoaXMuZGVm
YXVsdHMgPSBkZWZhdWx0cyk7CisgICAgICB9OworCisgICAgICB0aGlzLnNlbGVjdCA9IGZ1bmN0
aW9uKGF0dHJpYnV0ZUtleSkgeworICAgICAgICByZXR1cm4gdGhpcy4kbm9kZS5maW5kKHRoaXMu
YXR0clthdHRyaWJ1dGVLZXldKTsKKyAgICAgIH07CisKKyAgICAgIHRoaXMuaW5pdGlhbGl6ZSA9
ICQubm9vcDsKKyAgICAgIHRoaXMudGVhcmRvd24gPSB0ZWFyZG93bjsKKyAgICB9CisKKyAgICBm
dW5jdGlvbiBhdHRhY2hUbyhzZWxlY3Rvci8qLCBvcHRpb25zIGFyZ3MgKi8pIHsKKyAgICAgIC8v
IHVucGFja2luZyBhcmd1bWVudHMgYnkgaGFuZCBiZW5jaG1hcmtlZCBmYXN0ZXIKKyAgICAgIHZh
ciBsID0gYXJndW1lbnRzLmxlbmd0aDsKKyAgICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGwgLSAx
KTsKKyAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgbDsgaSsrKSBhcmdzW2kgLSAxXSA9IGFyZ3Vt
ZW50c1tpXTsKKworICAgICAgaWYgKCFzZWxlY3RvcikgeworICAgICAgICB0aHJvdyBuZXcgRXJy
b3IoIkNvbXBvbmVudCBuZWVkcyB0byBiZSBhdHRhY2hUbydkIGEgalF1ZXJ5IG9iamVjdCwgbmF0
aXZlIG5vZGUgb3Igc2VsZWN0b3Igc3RyaW5nIik7CisgICAgICB9CisKKyAgICAgIHZhciBvcHRp
b25zID0gdXRpbHMubWVyZ2UuYXBwbHkodXRpbHMsIGFyZ3MpOworCisgICAgICAkKHNlbGVjdG9y
KS5lYWNoKGZ1bmN0aW9uKGksIG5vZGUpIHsKKyAgICAgICAgdmFyIHJhd05vZGUgPSBub2RlLmpR
dWVyeSA/IG5vZGVbMF0gOiBub2RlOworICAgICAgICB2YXIgY29tcG9uZW50SW5mbyA9IHJlZ2lz
dHJ5LmZpbmRDb21wb25lbnRJbmZvKHRoaXMpCisgICAgICAgIGlmIChjb21wb25lbnRJbmZvICYm
IGNvbXBvbmVudEluZm8uaXNBdHRhY2hlZFRvKHJhd05vZGUpKSB7CisgICAgICAgICAgLy9hbHJl
YWR5IGF0dGFjaGVkCisgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgbmV3
IHRoaXMobm9kZSwgb3B0aW9ucyk7CisgICAgICB9LmJpbmQodGhpcykpOworICAgIH0KKworICAg
IC8vIGRlZmluZSB0aGUgY29uc3RydWN0b3IgZm9yIGEgY3VzdG9tIGNvbXBvbmVudCB0eXBlCisg
ICAgLy8gdGFrZXMgYW4gdW5saW1pdGVkIG51bWJlciBvZiBtaXhpbiBmdW5jdGlvbnMgYXMgYXJn
dW1lbnRzCisgICAgLy8gdHlwaWNhbCBhcGkgY2FsbCB3aXRoIDMgbWl4aW5zOiBkZWZpbmUodGlt
ZWxpbmUsIHdpdGhUd2VldENhcGFiaWxpdHksIHdpdGhTY3JvbGxDYXBhYmlsaXR5KTsKKyAgICBm
dW5jdGlvbiBkZWZpbmUoLyptaXhpbnMqLykgeworICAgICAgLy8gdW5wYWNraW5nIGFyZ3VtZW50
cyBieSBoYW5kIGJlbmNobWFya2VkIGZhc3RlcgorICAgICAgdmFyIGwgPSBhcmd1bWVudHMubGVu
Z3RoOworICAgICAgdmFyIG1peGlucyA9IG5ldyBBcnJheShsKTsKKyAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgbDsgaSsrKSBtaXhpbnNbaV0gPSBhcmd1bWVudHNbaV07CisKKyAgICAgIENvbXBv
bmVudC50b1N0cmluZyA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgcHJldHR5UHJpbnRNaXhp
bnMgPSBtaXhpbnMubWFwKGZ1bmN0aW9uKG1peGluKSB7CisgICAgICAgICAgaWYgKG1peGluLm5h
bWUgPT0gbnVsbCkgeworICAgICAgICAgICAgLy9mdW5jdGlvbiBuYW1lIHByb3BlcnR5IG5vdCBz
dXBwb3J0ZWQgYnkgdGhpcyBicm93c2VyLCB1c2UgcmVnZXgKKyAgICAgICAgICAgIHZhciBtID0g
bWl4aW4udG9TdHJpbmcoKS5tYXRjaChmdW5jdGlvbk5hbWVSZWdFeCk7CisgICAgICAgICAgICBy
ZXR1cm4gKG0gJiYgbVsxXSkgPyBtWzFdIDogIiI7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIHJldHVybiAobWl4aW4ubmFtZSAhPSAid2l0aEJhc2VDb21wb25lbnQiKSA/IG1peGlu
Lm5hbWUgOiAiIjsKKyAgICAgICAgICB9CisgICAgICAgIH0pLmZpbHRlcihCb29sZWFuKS5qb2lu
KCcsICcpOworICAgICAgICByZXR1cm4gcHJldHR5UHJpbnRNaXhpbnM7CisgICAgICB9OworCisg
ICAgICBpZiAod2luZG93LkRFQlVHICYmIHdpbmRvdy5ERUJVRy5lbmFibGVkKSB7CisgICAgICAg
IENvbXBvbmVudC5kZXNjcmliZSA9IENvbXBvbmVudC50b1N0cmluZygpOworICAgICAgfQorCisg
ICAgICAvLydvcHRpb25zJyBpcyBvcHRpb25hbCBoYXNoIHRvIGJlIG1lcmdlZCB3aXRoICdkZWZh
dWx0cycgaW4gdGhlIGNvbXBvbmVudCBkZWZpbml0aW9uCisgICAgICBmdW5jdGlvbiBDb21wb25l
bnQobm9kZSwgb3B0aW9ucykgeworICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKKyAg
ICAgICAgdGhpcy5pZGVudGl0eSA9IGNvbXBvbmVudElkKys7CisKKyAgICAgICAgaWYgKCFub2Rl
KSB7CisgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJDb21wb25lbnQgbmVlZHMgYSBub2RlIik7
CisgICAgICAgIH0KKworICAgICAgICBpZiAobm9kZS5qcXVlcnkpIHsKKyAgICAgICAgICB0aGlz
Lm5vZGUgPSBub2RlWzBdOworICAgICAgICAgIHRoaXMuJG5vZGUgPSBub2RlOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgIHRoaXMubm9kZSA9IG5vZGU7CisgICAgICAgICAgdGhpcy4kbm9k
ZSA9ICQobm9kZSk7CisgICAgICAgIH0KKworICAgICAgICB0aGlzLnRvU3RyaW5nID0gQ29tcG9u
ZW50LnRvU3RyaW5nOworICAgICAgICBpZiAod2luZG93LkRFQlVHICYmIHdpbmRvdy5ERUJVRy5l
bmFibGVkKSB7CisgICAgICAgICAgdGhpcy5kZXNjcmliZSA9IHRoaXMudG9TdHJpbmcoKTsKKyAg
ICAgICAgfQorCisgICAgICAgIC8vbWVyZ2UgZGVmYXVsdHMgd2l0aCBzdXBwbGllZCBvcHRpb25z
CisgICAgICAgIC8vcHV0IG9wdGlvbnMgaW4gYXR0ci5fX3Byb3RvX18gdG8gYXZvaWQgbWVyZ2Ug
b3ZlcmhlYWQKKyAgICAgICAgdmFyIGF0dHIgPSBPYmplY3QuY3JlYXRlKG9wdGlvbnMpOworICAg
ICAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5kZWZhdWx0cykgeworICAgICAgICAgIGlmICghb3B0
aW9ucy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7CisgICAgICAgICAgICBhdHRyW2tleV0gPSB0aGlz
LmRlZmF1bHRzW2tleV07CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHRoaXMuYXR0
ciA9IGF0dHI7CisKKyAgICAgICAgT2JqZWN0LmtleXModGhpcy5kZWZhdWx0cyB8fCB7fSkuZm9y
RWFjaChmdW5jdGlvbihrZXkpIHsKKyAgICAgICAgICBpZiAodGhpcy5kZWZhdWx0c1trZXldID09
PSBudWxsICYmIHRoaXMuYXR0cltrZXldID09PSBudWxsKSB7CisgICAgICAgICAgICB0aHJvdyBu
ZXcgRXJyb3IoJ1JlcXVpcmVkIGF0dHJpYnV0ZSAiJyArIGtleSArICciIG5vdCBzcGVjaWZpZWQg
aW4gYXR0YWNoVG8gZm9yIGNvbXBvbmVudCAiJyArIHRoaXMudG9TdHJpbmcoKSArICciLicpOwor
ICAgICAgICAgIH0KKyAgICAgICAgfSwgdGhpcyk7CisKKyAgICAgICAgdGhpcy5pbml0aWFsaXpl
LmNhbGwodGhpcywgb3B0aW9ucyk7CisgICAgICB9CisKKyAgICAgIENvbXBvbmVudC5hdHRhY2hU
byA9IGF0dGFjaFRvOworICAgICAgQ29tcG9uZW50LnRlYXJkb3duQWxsID0gdGVhcmRvd25BbGw7
CisKKyAgICAgIC8vIHByZXBlbmQgY29tbW9uIG1peGlucyB0byBzdXBwbGllZCBsaXN0LCB0aGVu
IG1peGluIGFsbCBmbGF2b3JzCisgICAgICBtaXhpbnMudW5zaGlmdCh3aXRoQmFzZUNvbXBvbmVu
dCwgYWR2aWNlLndpdGhBZHZpY2UsIHJlZ2lzdHJ5LndpdGhSZWdpc3RyYXRpb24pOworCisgICAg
ICBjb21wb3NlLm1peGluKENvbXBvbmVudC5wcm90b3R5cGUsIG1peGlucyk7CisKKyAgICAgIHJl
dHVybiBDb21wb25lbnQ7CisgICAgfQorCisgICAgZGVmaW5lLnRlYXJkb3duQWxsID0gZnVuY3Rp
b24oKSB7CisgICAgICByZWdpc3RyeS5jb21wb25lbnRzLnNsaWNlKCkuZm9yRWFjaChmdW5jdGlv
bihjKSB7CisgICAgICAgIGMuY29tcG9uZW50LnRlYXJkb3duQWxsKCk7CisgICAgICB9KTsKKyAg
ICAgIHJlZ2lzdHJ5LnJlc2V0KCk7CisgICAgfTsKKworICAgIHJldHVybiBkZWZpbmU7CisgIH0K
Kyk7CkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1w
bGUtYXBwL2NvbXBvbmVudHMvZmxpZ2h0L2xpYi9jb21wb3NlLmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBl
cmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9u
ZW50cy9mbGlnaHQvbGliL2NvbXBvc2UuanMJKHJldmlzaW9uIDApCisrKyBQZXJmb3JtYW5jZVRl
c3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvZmxpZ2h0
L2xpYi9jb21wb3NlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODYgQEAKKy8vID09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gQ29weXJpZ2h0IDIwMTMg
VHdpdHRlciwgSW5jCisvLyBMaWNlbnNlZCB1bmRlciBUaGUgTUlUIExpY2Vuc2UKKy8vIGh0dHA6
Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVQKKy8vID09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQorCisidXNlIHN0cmljdCI7CisKK2RlZmluZSgKKworICBbCisg
ICAgJy4vdXRpbHMnLAorICAgICcuLi90b29scy9kZWJ1Zy9kZWJ1ZycKKyAgXSwKKworICBmdW5j
dGlvbih1dGlsLCBkZWJ1ZykgeworCisgICAgLy9lbnVtZXJhYmxlcyBhcmUgc2hpbXMgLSBnZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3Igc2hpbSBkb2Vzbid0IHdvcmsKKyAgICB2YXIgY2FuV3JpdGVQ
cm90ZWN0ID0gZGVidWcuZW5hYmxlZCAmJiAhdXRpbC5pc0VudW1lcmFibGUoT2JqZWN0LCAnZ2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yJyk7CisgICAgLy93aGl0ZWxpc3Qgb2YgdW5sb2NrYWJsZSBw
cm9wZXJ0eSBuYW1lcworICAgIHZhciBkb250TG9jayA9IFsnbWl4ZWRJbiddOworCisgICAgaWYg
KGNhbldyaXRlUHJvdGVjdCkgeworICAgICAgLy9JRTggZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
IGlzIGJ1aWx0LWluIGJ1dCB0aHJvd3MgZXhlcHRpb24gb24gbm9uIERPTSBvYmplY3RzCisgICAg
ICB0cnkgeworICAgICAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdCwg
J2tleXMnKTsKKyAgICAgIH0gY2F0Y2goZSkgeworICAgICAgICBjYW5Xcml0ZVByb3RlY3QgPSBm
YWxzZTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiBzZXRQcm9wZXJ0eVdyaXRhYmls
aXR5KG9iaiwgaXNXcml0YWJsZSkgeworICAgICAgaWYgKCFjYW5Xcml0ZVByb3RlY3QpIHsKKyAg
ICAgICAgcmV0dXJuOworICAgICAgfQorCisgICAgICB2YXIgcHJvcHMgPSBPYmplY3QuY3JlYXRl
KG51bGwpOworCisgICAgICBPYmplY3Qua2V5cyhvYmopLmZvckVhY2goCisgICAgICAgIGZ1bmN0
aW9uIChrZXkpIHsKKyAgICAgICAgICBpZiAoZG9udExvY2suaW5kZXhPZihrZXkpIDwgMCkgewor
ICAgICAgICAgICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9i
aiwga2V5KTsKKyAgICAgICAgICAgIGRlc2Mud3JpdGFibGUgPSBpc1dyaXRhYmxlOworICAgICAg
ICAgICAgcHJvcHNba2V5XSA9IGRlc2M7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAp
OworCisgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhvYmosIHByb3BzKTsKKyAgICB9CisK
KyAgICBmdW5jdGlvbiB1bmxvY2tQcm9wZXJ0eShvYmosIHByb3AsIG9wKSB7CisgICAgICB2YXIg
d3JpdGFibGU7CisKKyAgICAgIGlmICghY2FuV3JpdGVQcm90ZWN0IHx8ICFvYmouaGFzT3duUHJv
cGVydHkocHJvcCkpIHsKKyAgICAgICAgb3AuY2FsbChvYmopOworICAgICAgICByZXR1cm47Cisg
ICAgICB9CisKKyAgICAgIHdyaXRhYmxlID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRv
cihvYmosIHByb3ApLndyaXRhYmxlOworICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwg
cHJvcCwgeyB3cml0YWJsZTogdHJ1ZSB9KTsKKyAgICAgIG9wLmNhbGwob2JqKTsKKyAgICAgIE9i
amVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIHByb3AsIHsgd3JpdGFibGU6IHdyaXRhYmxlIH0pOwor
ICAgIH0KKworICAgIGZ1bmN0aW9uIG1peGluKGJhc2UsIG1peGlucykgeworICAgICAgYmFzZS5t
aXhlZEluID0gYmFzZS5oYXNPd25Qcm9wZXJ0eSgnbWl4ZWRJbicpID8gYmFzZS5taXhlZEluIDog
W107CisKKyAgICAgIG1peGlucy5mb3JFYWNoKGZ1bmN0aW9uKG1peGluKSB7CisgICAgICAgIGlm
IChiYXNlLm1peGVkSW4uaW5kZXhPZihtaXhpbikgPT0gLTEpIHsKKyAgICAgICAgICBzZXRQcm9w
ZXJ0eVdyaXRhYmlsaXR5KGJhc2UsIGZhbHNlKTsKKyAgICAgICAgICBtaXhpbi5jYWxsKGJhc2Up
OworICAgICAgICAgIGJhc2UubWl4ZWRJbi5wdXNoKG1peGluKTsKKyAgICAgICAgfQorICAgICAg
fSk7CisKKyAgICAgIHNldFByb3BlcnR5V3JpdGFiaWxpdHkoYmFzZSwgdHJ1ZSk7CisgICAgfQor
CisgICAgcmV0dXJuIHsKKyAgICAgIG1peGluOiBtaXhpbiwKKyAgICAgIHVubG9ja1Byb3BlcnR5
OiB1bmxvY2tQcm9wZXJ0eQorICAgIH07CisKKyAgfQorKTsKSW5kZXg6IFBlcmZvcm1hbmNlVGVz
dHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9mbGlnaHQv
bGliL2luZGV4LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVu
Y2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9mbGlnaHQvbGliL2luZGV4LmpzCShy
ZXZpc2lvbiAwKQorKysgUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1l
eGFtcGxlLWFwcC9jb21wb25lbnRzL2ZsaWdodC9saWIvaW5kZXguanMJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwzMCBAQAorLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09CisvLyBDb3B5cmlnaHQgMjAxMyBUd2l0dGVyLCBJbmMKKy8vIExpY2Vuc2VkIHVuZGVy
IFRoZSBNSVQgTGljZW5zZQorLy8gaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVAor
Ly8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2RlZmluZSgK
KworICBbCisgICAgJy4vYWR2aWNlJywKKyAgICAnLi9jb21wb25lbnQnLAorICAgICcuL2NvbXBv
c2UnLAorICAgICcuL2xvZ2dlcicsCisgICAgJy4vcmVnaXN0cnknLAorICAgICcuL3V0aWxzJwor
ICBdLAorCisgIGZ1bmN0aW9uIChhZHZpY2UsIGNvbXBvbmVudCwgY29tcG9zZSwgbG9nZ2VyLCBy
ZWdpc3RyeSwgdXRpbHMpIHsKKworICAgIHJldHVybiB7CisgICAgICBhZHZpY2U6IGFkdmljZSwK
KyAgICAgIGNvbXBvbmVudDogY29tcG9uZW50LAorICAgICAgY29tcG9zZTogY29tcG9zZSwKKyAg
ICAgIGxvZ2dlcjogbG9nZ2VyLAorICAgICAgcmVnaXN0cnk6IHJlZ2lzdHJ5LAorICAgICAgdXRp
bHM6IHV0aWxzCisgICAgfTsKKworICB9CispOwpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9Eb1lv
dUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2ZsaWdodC9saWIvbG9n
Z2VyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxp
Z2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9mbGlnaHQvbGliL2xvZ2dlci5qcwkocmV2aXNp
b24gMCkKKysrIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBs
ZS1hcHAvY29tcG9uZW50cy9mbGlnaHQvbGliL2xvZ2dlci5qcwkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDkzIEBACisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KKy8vIENvcHlyaWdodCAyMDEzIFR3aXR0ZXIsIEluYworLy8gTGljZW5zZWQgdW5kZXIgVGhl
IE1JVCBMaWNlbnNlCisvLyBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUCisvLyA9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworInVzZSBzdHJpY3Qi
OworCitkZWZpbmUoCisKKyAgWworICAgICcuL2NvbXBvc2UnLAorICAgICcuL3V0aWxzJworICBd
LAorCisgIGZ1bmN0aW9uIChjb21wb3NlLCB1dGlsKSB7CisKKyAgICB2YXIgYWN0aW9uU3ltYm9s
cyA9IHsKKyAgICAgIG9uOic8LScsCisgICAgICB0cmlnZ2VyOiAnLT4nLAorICAgICAgb2ZmOiAn
eCAnCisgICAgfTsKKworICAgIGZ1bmN0aW9uIGVsZW1Ub1N0cmluZyhlbGVtKSB7CisgICAgICB2
YXIgdGFnU3RyID0gZWxlbS50YWdOYW1lID8gZWxlbS50YWdOYW1lLnRvTG93ZXJDYXNlKCkgOiBl
bGVtLnRvU3RyaW5nKCk7CisgICAgICB2YXIgY2xhc3NTdHIgPSBlbGVtLmNsYXNzTmFtZSA/ICIu
IiArIChlbGVtLmNsYXNzTmFtZSkgOiAiIjsKKyAgICAgIHZhciByZXN1bHQgPSB0YWdTdHIgKyBj
bGFzc1N0cjsKKyAgICAgIHJldHVybiBlbGVtLnRhZ05hbWUgPyBbJ1wnJywgJ1wnJ10uam9pbihy
ZXN1bHQpIDogcmVzdWx0OworICAgIH0KKworICAgIGZ1bmN0aW9uIGxvZyhhY3Rpb24sIGNvbXBv
bmVudCwgZXZlbnRBcmdzKSB7CisKKyAgICAgIHZhciBuYW1lLCBlbGVtLCBmbiwgZm5OYW1lLCBs
b2dGaWx0ZXIsIHRvUmVnRXhwLCBhY3Rpb25Mb2dnYWJsZSwgbmFtZUxvZ2dhYmxlOworCisgICAg
ICBpZiAodHlwZW9mIGV2ZW50QXJnc1tldmVudEFyZ3MubGVuZ3RoLTFdID09ICdmdW5jdGlvbicp
IHsKKyAgICAgICAgZm4gPSBldmVudEFyZ3MucG9wKCk7CisgICAgICAgIGZuID0gZm4udW5ib3Vu
ZCB8fCBmbjsgLy91c2UgdW5ib3VuZCB2ZXJzaW9uIGlmIGFueSAoYmV0dGVyIGluZm8pCisgICAg
ICB9CisKKyAgICAgIGlmICh0eXBlb2YgZXZlbnRBcmdzW2V2ZW50QXJncy5sZW5ndGggLSAxXSA9
PSAnb2JqZWN0JykgeworICAgICAgICBldmVudEFyZ3MucG9wKCk7IC8vdHJpZ2dlciBkYXRhIGFy
ZyAtIG5vdCBsb2dnZWQgcmlnaHQgbm93CisgICAgICB9CisKKyAgICAgIGlmIChldmVudEFyZ3Mu
bGVuZ3RoID09IDIpIHsKKyAgICAgICAgZWxlbSA9IGV2ZW50QXJnc1swXTsKKyAgICAgICAgbmFt
ZSA9IGV2ZW50QXJnc1sxXTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGVsZW0gPSBjb21wb25l
bnQuJG5vZGVbMF07CisgICAgICAgIG5hbWUgPSBldmVudEFyZ3NbMF07CisgICAgICB9CisKKyAg
ICAgIGlmICh3aW5kb3cuREVCVUcgJiYgd2luZG93LkRFQlVHLmVuYWJsZWQpIHsKKyAgICAgICAg
bG9nRmlsdGVyID0gREVCVUcuZXZlbnRzLmxvZ0ZpbHRlcjsKKworICAgICAgICAvLyBubyByZWdl
eCBmb3IgeW91LCBhY3Rpb25zLi4uCisgICAgICAgIGFjdGlvbkxvZ2dhYmxlID0gbG9nRmlsdGVy
LmFjdGlvbnM9PSJhbGwiIHx8IChsb2dGaWx0ZXIuYWN0aW9ucy5pbmRleE9mKGFjdGlvbikgPiAt
MSk7CisgICAgICAgIC8vIGV2ZW50IG5hbWUgZmlsdGVyIGFsbG93IHdpbGRjYXJkcyBvciByZWdl
eC4uLgorICAgICAgICB0b1JlZ0V4cCA9IGZ1bmN0aW9uKGV4cHIpIHsKKyAgICAgICAgICByZXR1
cm4gZXhwci50ZXN0ID8gZXhwciA6IG5ldyBSZWdFeHAoIl4iICsgZXhwci5yZXBsYWNlKC9cKi9n
LCAiLioiKSArICIkIik7CisgICAgICAgIH07CisgICAgICAgIG5hbWVMb2dnYWJsZSA9CisgICAg
ICAgICAgbG9nRmlsdGVyLmV2ZW50TmFtZXM9PSJhbGwiIHx8CisgICAgICAgICAgbG9nRmlsdGVy
LmV2ZW50TmFtZXMuc29tZShmdW5jdGlvbihlKSB7cmV0dXJuIHRvUmVnRXhwKGUpLnRlc3QobmFt
ZSl9KTsKKworICAgICAgICBpZiAoYWN0aW9uTG9nZ2FibGUgJiYgbmFtZUxvZ2dhYmxlKSB7Cisg
ICAgICAgICAgY29uc29sZS5pbmZvKAorICAgICAgICAgICAgYWN0aW9uU3ltYm9sc1thY3Rpb25d
LAorICAgICAgICAgICAgYWN0aW9uLAorICAgICAgICAgICAgJ1snICsgbmFtZSArICddJywKKyAg
ICAgICAgICAgIGVsZW1Ub1N0cmluZyhlbGVtKSwKKyAgICAgICAgICAgIGNvbXBvbmVudC5jb25z
dHJ1Y3Rvci50b1N0cmluZygpLAorICAgICAgICAgICAgZm4gJiYgKGZuTmFtZSA9IGZuLm5hbWUg
fHwgZm4uZGlzcGxheU5hbWUpICYmICctPiAgJyArIGZuTmFtZQorICAgICAgICAgICk7CisgICAg
ICAgIH0KKyAgICAgIH0KKyAgICB9CisKKworICAgIGZ1bmN0aW9uIHdpdGhMb2dnaW5nKCkgewor
ICAgICAgdGhpcy5iZWZvcmUoJ3RyaWdnZXInLCBmdW5jdGlvbigpIHsKKyAgICAgICAgbG9nKCd0
cmlnZ2VyJywgdGhpcywgdXRpbC50b0FycmF5KGFyZ3VtZW50cykpOworICAgICAgfSk7CisgICAg
ICB0aGlzLmJlZm9yZSgnb24nLCBmdW5jdGlvbigpIHsKKyAgICAgICAgbG9nKCdvbicsIHRoaXMs
IHV0aWwudG9BcnJheShhcmd1bWVudHMpKTsKKyAgICAgIH0pOworICAgICAgdGhpcy5iZWZvcmUo
J29mZicsIGZ1bmN0aW9uKGV2ZW50QXJncykgeworICAgICAgICBsb2coJ29mZicsIHRoaXMsIHV0
aWwudG9BcnJheShhcmd1bWVudHMpKTsKKyAgICAgIH0pOworICAgIH0KKworICAgIHJldHVybiB3
aXRoTG9nZ2luZzsKKyAgfQorKTsKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVu
Y2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9mbGlnaHQvbGliL3JlZ2lzdHJ5Lmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMt
ZXhhbXBsZS1hcHAvY29tcG9uZW50cy9mbGlnaHQvbGliL3JlZ2lzdHJ5LmpzCShyZXZpc2lvbiAw
KQorKysgUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFw
cC9jb21wb25lbnRzL2ZsaWdodC9saWIvcmVnaXN0cnkuanMJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwyMjAgQEAKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQorLy8gQ29weXJpZ2h0IDIwMTMgVHdpdHRlciwgSW5jCisvLyBMaWNlbnNlZCB1bmRlciBUaGUg
TUlUIExpY2Vuc2UKKy8vIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVQKKy8vID09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisidXNlIHN0cmljdCI7
CisKK2RlZmluZSgKKworICBbCisgICAgJy4vdXRpbHMnCisgIF0sCisKKyAgZnVuY3Rpb24gKHV0
aWwpIHsKKworICAgIGZ1bmN0aW9uIHBhcnNlRXZlbnRBcmdzKGluc3RhbmNlLCBhcmdzKSB7Cisg
ICAgICB2YXIgZWxlbWVudCwgdHlwZSwgY2FsbGJhY2s7CisgICAgICB2YXIgZW5kID0gYXJncy5s
ZW5ndGg7CisKKyAgICAgIGlmICh0eXBlb2YgYXJnc1tlbmQgLSAxXSA9PT0gJ2Z1bmN0aW9uJykg
eworICAgICAgICBlbmQgLT0gMTsKKyAgICAgICAgY2FsbGJhY2sgPSBhcmdzW2VuZF07CisgICAg
ICB9CisKKyAgICAgIGlmICh0eXBlb2YgYXJnc1tlbmQgLSAxXSA9PT0gJ29iamVjdCcpIHsKKyAg
ICAgICAgZW5kIC09IDE7CisgICAgICB9CisKKyAgICAgIGlmIChlbmQgPT0gMikgeworICAgICAg
ICBlbGVtZW50ID0gYXJnc1swXTsKKyAgICAgICAgdHlwZSA9IGFyZ3NbMV07CisgICAgICB9IGVs
c2UgeworICAgICAgICBlbGVtZW50ID0gaW5zdGFuY2Uubm9kZTsKKyAgICAgICAgdHlwZSA9IGFy
Z3NbMF07CisgICAgICB9CisKKyAgICAgIHJldHVybiB7CisgICAgICAgIGVsZW1lbnQ6IGVsZW1l
bnQsCisgICAgICAgIHR5cGU6IHR5cGUsCisgICAgICAgIGNhbGxiYWNrOiBjYWxsYmFjaworICAg
ICAgfTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBtYXRjaEV2ZW50KGEsIGIpIHsKKyAgICAgIHJl
dHVybiAoCisgICAgICAgIChhLmVsZW1lbnQgPT0gYi5lbGVtZW50KSAmJgorICAgICAgICAoYS50
eXBlID09IGIudHlwZSkgJiYKKyAgICAgICAgKGIuY2FsbGJhY2sgPT0gbnVsbCB8fCAoYS5jYWxs
YmFjayA9PSBiLmNhbGxiYWNrKSkKKyAgICAgICk7CisgICAgfQorCisgICAgZnVuY3Rpb24gUmVn
aXN0cnkoKSB7CisKKyAgICAgIHZhciByZWdpc3RyeSA9IHRoaXM7CisKKyAgICAgICh0aGlzLnJl
c2V0ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMuY29tcG9uZW50cyA9IFtdOworICAgICAg
ICB0aGlzLmFsbEluc3RhbmNlcyA9IHt9OworICAgICAgICB0aGlzLmV2ZW50cyA9IFtdOworICAg
ICAgfSkuY2FsbCh0aGlzKTsKKworICAgICAgZnVuY3Rpb24gQ29tcG9uZW50SW5mbyhjb21wb25l
bnQpIHsKKyAgICAgICAgdGhpcy5jb21wb25lbnQgPSBjb21wb25lbnQ7CisgICAgICAgIHRoaXMu
YXR0YWNoZWRUbyA9IFtdOworICAgICAgICB0aGlzLmluc3RhbmNlcyA9IHt9OworCisgICAgICAg
IHRoaXMuYWRkSW5zdGFuY2UgPSBmdW5jdGlvbihpbnN0YW5jZSkgeworICAgICAgICAgIHZhciBp
bnN0YW5jZUluZm8gPSBuZXcgSW5zdGFuY2VJbmZvKGluc3RhbmNlKTsKKyAgICAgICAgICB0aGlz
Lmluc3RhbmNlc1tpbnN0YW5jZS5pZGVudGl0eV0gPSBpbnN0YW5jZUluZm87CisgICAgICAgICAg
dGhpcy5hdHRhY2hlZFRvLnB1c2goaW5zdGFuY2Uubm9kZSk7CisKKyAgICAgICAgICByZXR1cm4g
aW5zdGFuY2VJbmZvOworICAgICAgICB9CisKKyAgICAgICAgdGhpcy5yZW1vdmVJbnN0YW5jZSA9
IGZ1bmN0aW9uKGluc3RhbmNlKSB7CisgICAgICAgICAgZGVsZXRlIHRoaXMuaW5zdGFuY2VzW2lu
c3RhbmNlLmlkZW50aXR5XTsKKyAgICAgICAgICB2YXIgaW5kZXhPZk5vZGUgPSB0aGlzLmF0dGFj
aGVkVG8uaW5kZXhPZihpbnN0YW5jZS5ub2RlKTsKKyAgICAgICAgICAoaW5kZXhPZk5vZGUgPiAt
MSkgJiYgdGhpcy5hdHRhY2hlZFRvLnNwbGljZShpbmRleE9mTm9kZSwgMSk7CisKKyAgICAgICAg
ICBpZiAoIXRoaXMuaW5zdGFuY2VzLmxlbmd0aCkgeworICAgICAgICAgICAgLy9pZiBJIGhvbGQg
bm8gbW9yZSBpbnN0YW5jZXMgcmVtb3ZlIG1lIGZyb20gcmVnaXN0cnkKKyAgICAgICAgICAgIHJl
Z2lzdHJ5LnJlbW92ZUNvbXBvbmVudEluZm8odGhpcyk7CisgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgdGhpcy5pc0F0dGFjaGVkVG8gPSBmdW5jdGlvbihub2RlKSB7CisgICAgICAg
ICAgcmV0dXJuIHRoaXMuYXR0YWNoZWRUby5pbmRleE9mKG5vZGUpID4gLTE7CisgICAgICAgIH0K
KyAgICAgIH0KKworICAgICAgZnVuY3Rpb24gSW5zdGFuY2VJbmZvKGluc3RhbmNlKSB7CisgICAg
ICAgIHRoaXMuaW5zdGFuY2UgPSBpbnN0YW5jZTsKKyAgICAgICAgdGhpcy5ldmVudHMgPSBbXTsK
KworICAgICAgICB0aGlzLmFkZEJpbmQgPSBmdW5jdGlvbihldmVudCkgeworICAgICAgICAgIHRo
aXMuZXZlbnRzLnB1c2goZXZlbnQpOworICAgICAgICAgIHJlZ2lzdHJ5LmV2ZW50cy5wdXNoKGV2
ZW50KTsKKyAgICAgICAgfTsKKworICAgICAgICB0aGlzLnJlbW92ZUJpbmQgPSBmdW5jdGlvbihl
dmVudCkgeworICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBlOyBlID0gdGhpcy5ldmVudHNbaV07
IGkrKykgeworICAgICAgICAgICAgaWYgKG1hdGNoRXZlbnQoZSwgZXZlbnQpKSB7CisgICAgICAg
ICAgICAgIHRoaXMuZXZlbnRzLnNwbGljZShpLCAxKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgdGhpcy5hZGRJbnN0YW5jZSA9IGZ1bmN0
aW9uKGluc3RhbmNlKSB7CisgICAgICAgIHZhciBjb21wb25lbnQgPSB0aGlzLmZpbmRDb21wb25l
bnRJbmZvKGluc3RhbmNlKTsKKworICAgICAgICBpZiAoIWNvbXBvbmVudCkgeworICAgICAgICAg
IGNvbXBvbmVudCA9IG5ldyBDb21wb25lbnRJbmZvKGluc3RhbmNlLmNvbnN0cnVjdG9yKTsKKyAg
ICAgICAgICB0aGlzLmNvbXBvbmVudHMucHVzaChjb21wb25lbnQpOworICAgICAgICB9CisKKyAg
ICAgICAgdmFyIGluc3QgPSBjb21wb25lbnQuYWRkSW5zdGFuY2UoaW5zdGFuY2UpOworCisgICAg
ICAgIHRoaXMuYWxsSW5zdGFuY2VzW2luc3RhbmNlLmlkZW50aXR5XSA9IGluc3Q7CisKKyAgICAg
ICAgcmV0dXJuIGNvbXBvbmVudDsKKyAgICAgIH07CisKKyAgICAgIHRoaXMucmVtb3ZlSW5zdGFu
Y2UgPSBmdW5jdGlvbihpbnN0YW5jZSkgeworICAgICAgICB2YXIgaW5kZXgsIGluc3RJbmZvID0g
dGhpcy5maW5kSW5zdGFuY2VJbmZvKGluc3RhbmNlKTsKKworICAgICAgICAvL3JlbW92ZSBmcm9t
IGNvbXBvbmVudCBpbmZvCisgICAgICAgIHZhciBjb21wb25lbnRJbmZvID0gdGhpcy5maW5kQ29t
cG9uZW50SW5mbyhpbnN0YW5jZSk7CisgICAgICAgIGNvbXBvbmVudEluZm8gJiYgY29tcG9uZW50
SW5mby5yZW1vdmVJbnN0YW5jZShpbnN0YW5jZSk7CisKKyAgICAgICAgLy9yZW1vdmUgZnJvbSBy
ZWdpc3RyeQorICAgICAgICBkZWxldGUgdGhpcy5hbGxJbnN0YW5jZXNbaW5zdGFuY2UuaWRlbnRp
dHldOworICAgICAgfTsKKworICAgICAgdGhpcy5yZW1vdmVDb21wb25lbnRJbmZvID0gZnVuY3Rp
b24oY29tcG9uZW50SW5mbykgeworICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmNvbXBvbmVudHMu
aW5kZXhPZihjb21wb25lbnRJbmZvKTsKKyAgICAgICAgKGluZGV4ID4gLTEpICAmJiB0aGlzLmNv
bXBvbmVudHMuc3BsaWNlKGluZGV4LCAxKTsKKyAgICAgIH07CisKKyAgICAgIHRoaXMuZmluZENv
bXBvbmVudEluZm8gPSBmdW5jdGlvbih3aGljaCkgeworICAgICAgICB2YXIgY29tcG9uZW50ID0g
d2hpY2guYXR0YWNoVG8gPyB3aGljaCA6IHdoaWNoLmNvbnN0cnVjdG9yOworCisgICAgICAgIGZv
ciAodmFyIGkgPSAwLCBjOyBjID0gdGhpcy5jb21wb25lbnRzW2ldOyBpKyspIHsKKyAgICAgICAg
ICBpZiAoYy5jb21wb25lbnQgPT09IGNvbXBvbmVudCkgeworICAgICAgICAgICAgcmV0dXJuIGM7
CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICB9
OworCisgICAgICB0aGlzLmZpbmRJbnN0YW5jZUluZm8gPSBmdW5jdGlvbihpbnN0YW5jZSkgewor
ICAgICAgICAgIHJldHVybiB0aGlzLmFsbEluc3RhbmNlc1tpbnN0YW5jZS5pZGVudGl0eV0gfHwg
bnVsbDsKKyAgICAgIH07CisKKyAgICAgIHRoaXMuZmluZEluc3RhbmNlSW5mb0J5Tm9kZSA9IGZ1
bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICB2YXIgcmVzdWx0ID0gW107CisgICAgICAgICAgT2Jq
ZWN0LmtleXModGhpcy5hbGxJbnN0YW5jZXMpLmZvckVhY2goZnVuY3Rpb24oaykgeworICAgICAg
ICAgICAgdmFyIHRoaXNJbnN0YW5jZUluZm8gPSB0aGlzLmFsbEluc3RhbmNlc1trXTsKKyAgICAg
ICAgICAgIGlmKHRoaXNJbnN0YW5jZUluZm8uaW5zdGFuY2Uubm9kZSA9PT0gbm9kZSkgeworICAg
ICAgICAgICAgICByZXN1bHQucHVzaCh0aGlzSW5zdGFuY2VJbmZvKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICB9LCB0aGlzKTsKKyAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgfTsK
KworICAgICAgdGhpcy5vbiA9IGZ1bmN0aW9uKGNvbXBvbmVudE9uKSB7CisgICAgICAgIHZhciBp
bnN0YW5jZSA9IHJlZ2lzdHJ5LmZpbmRJbnN0YW5jZUluZm8odGhpcyksIGJvdW5kQ2FsbGJhY2s7
CisKKyAgICAgICAgLy8gdW5wYWNraW5nIGFyZ3VtZW50cyBieSBoYW5kIGJlbmNobWFya2VkIGZh
c3RlcgorICAgICAgICB2YXIgbCA9IGFyZ3VtZW50cy5sZW5ndGgsIGkgPSAxOworICAgICAgICB2
YXIgb3RoZXJBcmdzID0gbmV3IEFycmF5KGwgLSAxKTsKKyAgICAgICAgZm9yICg7IGkgPCBsOyBp
KyspIG90aGVyQXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07CisKKyAgICAgICAgaWYgKGluc3Rh
bmNlKSB7CisgICAgICAgICAgYm91bmRDYWxsYmFjayA9IGNvbXBvbmVudE9uLmFwcGx5KG51bGws
IG90aGVyQXJncyk7CisgICAgICAgICAgaWYgKGJvdW5kQ2FsbGJhY2spIHsKKyAgICAgICAgICAg
IG90aGVyQXJnc1tvdGhlckFyZ3MubGVuZ3RoLTFdID0gYm91bmRDYWxsYmFjazsKKyAgICAgICAg
ICB9CisgICAgICAgICAgdmFyIGV2ZW50ID0gcGFyc2VFdmVudEFyZ3ModGhpcywgb3RoZXJBcmdz
KTsKKyAgICAgICAgICBpbnN0YW5jZS5hZGRCaW5kKGV2ZW50KTsKKyAgICAgICAgfQorICAgICAg
fTsKKworICAgICAgdGhpcy5vZmYgPSBmdW5jdGlvbihlbCwgdHlwZSwgY2FsbGJhY2spIHsKKyAg
ICAgICAgdmFyIGV2ZW50ID0gcGFyc2VFdmVudEFyZ3ModGhpcywgYXJndW1lbnRzKSwKKyAgICAg
ICAgICAgIGluc3RhbmNlID0gcmVnaXN0cnkuZmluZEluc3RhbmNlSW5mbyh0aGlzKTsKKworICAg
ICAgICBpZiAoaW5zdGFuY2UpIHsKKyAgICAgICAgICBpbnN0YW5jZS5yZW1vdmVCaW5kKGV2ZW50
KTsKKyAgICAgICAgfQorICAgICAgfTsKKworICAgICAgLy9kZWJ1ZyB0b29scyBtYXkgd2FudCB0
byBhZGQgYWR2aWNlIHRvIHRyaWdnZXIKKyAgICAgIGlmICh3aW5kb3cuREVCVUcgJiYgREVCVUcu
ZW5hYmxlZCkgeworICAgICAgICByZWdpc3RyeS50cmlnZ2VyID0gbmV3IEZ1bmN0aW9uOworICAg
ICAgfQorCisgICAgICB0aGlzLnRlYXJkb3duID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJlZ2lz
dHJ5LnJlbW92ZUluc3RhbmNlKHRoaXMpOworICAgICAgfTsKKworICAgICAgdGhpcy53aXRoUmVn
aXN0cmF0aW9uID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMuYmVmb3JlKCdpbml0aWFsaXpl
JywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgcmVnaXN0cnkuYWRkSW5zdGFuY2UodGhpcyk7Cisg
ICAgICAgIH0pOworCisgICAgICAgIHRoaXMuYXJvdW5kKCdvbicsIHJlZ2lzdHJ5Lm9uKTsKKyAg
ICAgICAgdGhpcy5hZnRlcignb2ZmJywgcmVnaXN0cnkub2ZmKTsKKyAgICAgICAgLy9kZWJ1ZyB0
b29scyBtYXkgd2FudCB0byBhZGQgYWR2aWNlIHRvIHRyaWdnZXIKKyAgICAgICAgd2luZG93LkRF
QlVHICYmIERFQlVHLmVuYWJsZWQgJiYgdGhpcy5hZnRlcigndHJpZ2dlcicsIHJlZ2lzdHJ5LnRy
aWdnZXIpOworICAgICAgICB0aGlzLmFmdGVyKCd0ZWFyZG93bicsIHtvYmo6cmVnaXN0cnksIGZu
TmFtZTondGVhcmRvd24nfSk7CisgICAgICB9OworCisgICAgfQorCisgICAgcmV0dXJuIG5ldyBS
ZWdpc3RyeTsKKyAgfQorKTsKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gv
ZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9mbGlnaHQvbGliL3V0aWxzLmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBs
ZS1hcHAvY29tcG9uZW50cy9mbGlnaHQvbGliL3V0aWxzLmpzCShyZXZpc2lvbiAwKQorKysgUGVy
Zm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25l
bnRzL2ZsaWdodC9saWIvdXRpbHMuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMzYgQEAK
Ky8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gQ29weXJp
Z2h0IDIwMTMgVHdpdHRlciwgSW5jCisvLyBMaWNlbnNlZCB1bmRlciBUaGUgTUlUIExpY2Vuc2UK
Ky8vIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVQKKy8vID09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisidXNlIHN0cmljdCI7CisKK2RlZmluZSgK
KworICBbXSwKKworICBmdW5jdGlvbiAoKSB7CisKKyAgICB2YXIgYXJyeSA9IFtdOworICAgIHZh
ciBERUZBVUxUX0lOVEVSVkFMID0gMTAwOworCisgICAgdmFyIHV0aWxzID0geworCisgICAgICBp
c0RvbU9iajogZnVuY3Rpb24ob2JqKSB7CisgICAgICAgIHJldHVybiAhIShvYmoubm9kZVR5cGUg
fHwgKG9iaiA9PT0gd2luZG93KSk7CisgICAgICB9LAorCisgICAgICB0b0FycmF5OiBmdW5jdGlv
bihvYmosIGZyb20pIHsKKyAgICAgICAgcmV0dXJuIGFycnkuc2xpY2UuY2FsbChvYmosIGZyb20p
OworICAgICAgfSwKKworICAgICAgLy8gcmV0dXJucyBuZXcgb2JqZWN0IHJlcHJlc2VudGluZyBt
dWx0aXBsZSBvYmplY3RzIG1lcmdlZCB0b2dldGhlcgorICAgICAgLy8gb3B0aW9uYWwgZmluYWwg
YXJndW1lbnQgaXMgYm9vbGVhbiB3aGljaCBzcGVjaWZpZXMgaWYgbWVyZ2UgaXMgcmVjdXJzaXZl
CisgICAgICAvLyBvcmlnaW5hbCBvYmplY3RzIGFyZSB1bm1vZGlmaWVkCisgICAgICAvLworICAg
ICAgLy8gdXNhZ2U6CisgICAgICAvLyAgIHZhciBiYXNlID0ge2E6MiwgYjo2fTsKKyAgICAgIC8v
ICAgdmFyIGV4dHJhID0ge2I6MywgYzo0fTsKKyAgICAgIC8vICAgbWVyZ2UoYmFzZSwgZXh0cmEp
OyAvL3thOjIsIGI6MywgYzo0fQorICAgICAgLy8gICBiYXNlOyAvL3thOjIsIGI6Nn0KKyAgICAg
IC8vCisgICAgICAvLyAgIHZhciBiYXNlID0ge2E6MiwgYjo2fTsKKyAgICAgIC8vICAgdmFyIGV4
dHJhID0ge2I6MywgYzo0fTsKKyAgICAgIC8vICAgdmFyIGV4dHJhRXh0cmEgPSB7YTo0LCBkOjl9
OworICAgICAgLy8gICBtZXJnZShiYXNlLCBleHRyYSwgZXh0cmFFeHRyYSk7IC8ve2E6NCwgYjoz
LCBjOjQuIGQ6IDl9CisgICAgICAvLyAgIGJhc2U7IC8ve2E6MiwgYjo2fQorICAgICAgLy8KKyAg
ICAgIC8vICAgdmFyIGJhc2UgPSB7YToyLCBiOntiYjo0LCBjYzo1fX07CisgICAgICAvLyAgIHZh
ciBleHRyYSA9IHthOjQsIGI6e2NjOjcsIGRkOjF9fTsKKyAgICAgIC8vICAgbWVyZ2UoYmFzZSwg
ZXh0cmEsIHRydWUpOyAvL3thOjQsIGI6e2JiOjQsIGNjOjcsIGRkOjF9fQorICAgICAgLy8gICBi
YXNlOyAvL3thOjIsIGI6Nn0KKworICAgICAgbWVyZ2U6IGZ1bmN0aW9uKC8qb2JqMSwgb2JqMiwu
Li4uZGVlcENvcHkqLykgeworICAgICAgICAvLyB1bnBhY2tpbmcgYXJndW1lbnRzIGJ5IGhhbmQg
YmVuY2htYXJrZWQgZmFzdGVyCisgICAgICAgIHZhciBsID0gYXJndW1lbnRzLmxlbmd0aCwKKyAg
ICAgICAgICAgIGkgPSAwLAorICAgICAgICAgICAgYXJncyA9IG5ldyBBcnJheShsICsgMSk7Cisg
ICAgICAgIGZvciAoOyBpIDwgbDsgaSsrKSBhcmdzW2kgKyAxXSA9IGFyZ3VtZW50c1tpXTsKKwor
ICAgICAgICBpZiAobCA9PT0gMCkgeworICAgICAgICAgIHJldHVybiB7fTsKKyAgICAgICAgfQor
CisgICAgICAgIC8vc3RhcnQgd2l0aCBlbXB0eSBvYmplY3Qgc28gYSBjb3B5IGlzIGNyZWF0ZWQK
KyAgICAgICAgYXJnc1swXSA9IHt9OworCisgICAgICAgIGlmIChhcmdzW2FyZ3MubGVuZ3RoIC0g
MV0gPT09IHRydWUpIHsKKyAgICAgICAgICAvL2pxdWVyeSBleHRlbmQgcmVxdWlyZXMgZGVlcCBj
b3B5IGFzIGZpcnN0IGFyZworICAgICAgICAgIGFyZ3MucG9wKCk7CisgICAgICAgICAgYXJncy51
bnNoaWZ0KHRydWUpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuICQuZXh0ZW5kLmFwcGx5
KHVuZGVmaW5lZCwgYXJncyk7CisgICAgICB9LAorCisgICAgICAvLyB1cGRhdGVzIGJhc2UgaW4g
cGxhY2UgYnkgY29weWluZyBwcm9wZXJ0aWVzIG9mIGV4dHJhIHRvIGl0CisgICAgICAvLyBvcHRp
b25hbGx5IGNsb2JiZXIgcHJvdGVjdGVkCisgICAgICAvLyB1c2FnZToKKyAgICAgIC8vICAgdmFy
IGJhc2UgPSB7YToyLCBiOjZ9OworICAgICAgLy8gICB2YXIgZXh0cmEgPSB7Yzo0fTsKKyAgICAg
IC8vICAgcHVzaChiYXNlLCBleHRyYSk7IC8ve2E6MiwgYjo2LCBjOjR9CisgICAgICAvLyAgIGJh
c2U7IC8ve2E6MiwgYjo2LCBjOjR9CisgICAgICAvLworICAgICAgLy8gICB2YXIgYmFzZSA9IHth
OjIsIGI6Nn07CisgICAgICAvLyAgIHZhciBleHRyYSA9IHtiOiA0IGM6NH07CisgICAgICAvLyAg
IHB1c2goYmFzZSwgZXh0cmEsIHRydWUpOyAvL0Vycm9yICgidXRpbHMucHVzaCBhdHRlbXB0ZWQg
dG8gb3ZlcndyaXRlICdiJyB3aGlsZSBydW5uaW5nIGluIHByb3RlY3RlZCBtb2RlIikKKyAgICAg
IC8vICAgYmFzZTsgLy97YToyLCBiOjZ9CisgICAgICAvLworICAgICAgLy8gb2JqZWN0cyB3aXRo
IHRoZSBzYW1lIGtleSB3aWxsIG1lcmdlIHJlY3Vyc2l2ZWx5IHdoZW4gcHJvdGVjdCBpcyBmYWxz
ZQorICAgICAgLy8gZWc6CisgICAgICAvLyB2YXIgYmFzZSA9IHthOjE2LCBiOntiYjo0LCBjYzox
MH19OworICAgICAgLy8gdmFyIGV4dHJhID0ge2I6e2NjOjI1LCBkZDoxOX0sIGM6NX07CisgICAg
ICAvLyBwdXNoKGJhc2UsIGV4dHJhKTsgLy97YToxNiwge2JiOjQsIGNjOjI1LCBkZDoxOX0sIGM6
NX0KKyAgICAgIC8vCisgICAgICBwdXNoOiBmdW5jdGlvbihiYXNlLCBleHRyYSwgcHJvdGVjdCkg
eworICAgICAgICBpZiAoYmFzZSkgeworICAgICAgICAgIE9iamVjdC5rZXlzKGV4dHJhIHx8IHt9
KS5mb3JFYWNoKGZ1bmN0aW9uKGtleSkgeworICAgICAgICAgICAgaWYgKGJhc2Vba2V5XSAmJiBw
cm90ZWN0KSB7CisgICAgICAgICAgICAgIHRocm93IEVycm9yKCJ1dGlscy5wdXNoIGF0dGVtcHRl
ZCB0byBvdmVyd3JpdGUgJyIgKyBrZXkgKyAiJyB3aGlsZSBydW5uaW5nIGluIHByb3RlY3RlZCBt
b2RlIik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0eXBlb2YgYmFzZVtrZXld
ID09ICJvYmplY3QiICYmIHR5cGVvZiBleHRyYVtrZXldID09ICJvYmplY3QiKSB7CisgICAgICAg
ICAgICAgIC8vcmVjdXJzZQorICAgICAgICAgICAgICB0aGlzLnB1c2goYmFzZVtrZXldLCBleHRy
YVtrZXldKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIC8vbm8gcHJvdGVj
dCwgc28gZXh0cmEgd2lucworICAgICAgICAgICAgICBiYXNlW2tleV0gPSBleHRyYVtrZXldOwor
ICAgICAgICAgICAgfQorICAgICAgICAgIH0sIHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAg
cmV0dXJuIGJhc2U7CisgICAgICB9LAorCisgICAgICBpc0VudW1lcmFibGU6IGZ1bmN0aW9uKG9i
aiwgcHJvcGVydHkpIHsKKyAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaikuaW5kZXhPZihw
cm9wZXJ0eSkgPiAtMTsKKyAgICAgIH0sCisKKyAgICAgIC8vYnVpbGQgYSBmdW5jdGlvbiBmcm9t
IG90aGVyIGZ1bmN0aW9uKHMpCisgICAgICAvL3V0aWwuY29tcG9zZShhLGIsYykgLT4gYShiKGMo
KSkpOworICAgICAgLy9pbXBsZW1lbnRhdGlvbiBsaWZ0ZWQgZnJvbSB1bmRlcnNjb3JlLmpzIChj
KSAyMDA5LTIwMTIgSmVyZW15IEFzaGtlbmFzCisgICAgICBjb21wb3NlOiBmdW5jdGlvbigpIHsK
KyAgICAgICAgdmFyIGZ1bmNzID0gYXJndW1lbnRzOworCisgICAgICAgIHJldHVybiBmdW5jdGlv
bigpIHsKKyAgICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50czsKKworICAgICAgICAgIGZvciAo
dmFyIGkgPSBmdW5jcy5sZW5ndGgtMTsgaSA+PSAwOyBpLS0pIHsKKyAgICAgICAgICAgIGFyZ3Mg
PSBbZnVuY3NbaV0uYXBwbHkodGhpcywgYXJncyldOworICAgICAgICAgIH0KKworICAgICAgICAg
IHJldHVybiBhcmdzWzBdOworICAgICAgICB9OworICAgICAgfSwKKworICAgICAgLy8gQ2FuIG9u
bHkgdW5pcXVlIGFycmF5cyBvZiBob21vZ2VuZW91cyBwcmltaXRpdmVzLCBlLmcuIGFuIGFycmF5
IG9mIG9ubHkgc3RyaW5ncywgYW4gYXJyYXkgb2Ygb25seSBib29sZWFucywgb3IgYW4gYXJyYXkg
b2Ygb25seSBudW1lcmljcworICAgICAgdW5pcXVlQXJyYXk6IGZ1bmN0aW9uKGFycmF5KSB7Cisg
ICAgICAgIHZhciB1ID0ge30sIGEgPSBbXTsKKworICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9
IGFycmF5Lmxlbmd0aDsgaSA8IGw7ICsraSkgeworICAgICAgICAgIGlmICh1Lmhhc093blByb3Bl
cnR5KGFycmF5W2ldKSkgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgfQorCisg
ICAgICAgICAgYS5wdXNoKGFycmF5W2ldKTsKKyAgICAgICAgICB1W2FycmF5W2ldXSA9IDE7Cisg
ICAgICAgIH0KKworICAgICAgICByZXR1cm4gYTsKKyAgICAgIH0sCisKKyAgICAgIGRlYm91bmNl
OiBmdW5jdGlvbihmdW5jLCB3YWl0LCBpbW1lZGlhdGUpIHsKKyAgICAgICAgaWYgKHR5cGVvZiB3
YWl0ICE9ICdudW1iZXInKSB7CisgICAgICAgICAgd2FpdCA9IERFRkFVTFRfSU5URVJWQUw7Cisg
ICAgICAgIH0KKworICAgICAgICB2YXIgdGltZW91dCwgcmVzdWx0OworCisgICAgICAgIHJldHVy
biBmdW5jdGlvbigpIHsKKyAgICAgICAgICB2YXIgY29udGV4dCA9IHRoaXMsIGFyZ3MgPSBhcmd1
bWVudHM7CisgICAgICAgICAgdmFyIGxhdGVyID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICB0
aW1lb3V0ID0gbnVsbDsKKyAgICAgICAgICAgIGlmICghaW1tZWRpYXRlKSB7CisgICAgICAgICAg
ICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgfTsKKyAgICAgICAgICB2YXIgY2FsbE5vdyA9IGltbWVkaWF0ZSAmJiAhdGltZW91
dDsKKworICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTsKKyAgICAgICAgICB0aW1lb3V0
ID0gc2V0VGltZW91dChsYXRlciwgd2FpdCk7CisKKyAgICAgICAgICBpZiAoY2FsbE5vdykgewor
ICAgICAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTsKKyAgICAgICAg
ICB9CisKKyAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9OworICAgICAgfSwKKwor
ICAgICAgdGhyb3R0bGU6IGZ1bmN0aW9uKGZ1bmMsIHdhaXQpIHsKKyAgICAgICAgaWYgKHR5cGVv
ZiB3YWl0ICE9ICdudW1iZXInKSB7CisgICAgICAgICAgd2FpdCA9IERFRkFVTFRfSU5URVJWQUw7
CisgICAgICAgIH0KKworICAgICAgICB2YXIgY29udGV4dCwgYXJncywgdGltZW91dCwgdGhyb3R0
bGluZywgbW9yZSwgcmVzdWx0OworICAgICAgICB2YXIgd2hlbkRvbmUgPSB0aGlzLmRlYm91bmNl
KGZ1bmN0aW9uKCl7CisgICAgICAgICAgbW9yZSA9IHRocm90dGxpbmcgPSBmYWxzZTsKKyAgICAg
ICAgfSwgd2FpdCk7CisKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgeworICAgICAgICAgIGNv
bnRleHQgPSB0aGlzOyBhcmdzID0gYXJndW1lbnRzOworICAgICAgICAgIHZhciBsYXRlciA9IGZ1
bmN0aW9uKCkgeworICAgICAgICAgICAgdGltZW91dCA9IG51bGw7CisgICAgICAgICAgICBpZiAo
bW9yZSkgeworICAgICAgICAgICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3Mp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgd2hlbkRvbmUoKTsKKyAgICAgICAgICB9Owor
CisgICAgICAgICAgaWYgKCF0aW1lb3V0KSB7CisgICAgICAgICAgICB0aW1lb3V0ID0gc2V0VGlt
ZW91dChsYXRlciwgd2FpdCk7CisgICAgICAgICAgfQorCisgICAgICAgICAgaWYgKHRocm90dGxp
bmcpIHsKKyAgICAgICAgICAgIG1vcmUgPSB0cnVlOworICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICB0aHJvdHRsaW5nID0gdHJ1ZTsKKyAgICAgICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBw
bHkoY29udGV4dCwgYXJncyk7CisgICAgICAgICAgfQorCisgICAgICAgICAgd2hlbkRvbmUoKTsK
KyAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9OworICAgICAgfSwKKworICAgICAg
Y291bnRUaGVuOiBmdW5jdGlvbihudW0sIGJhc2UpIHsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9u
KCkgeworICAgICAgICAgIGlmICghLS1udW0pIHsgcmV0dXJuIGJhc2UuYXBwbHkodGhpcywgYXJn
dW1lbnRzKTsgfQorICAgICAgICB9OworICAgICAgfSwKKworICAgICAgZGVsZWdhdGU6IGZ1bmN0
aW9uKHJ1bGVzKSB7CisgICAgICAgIHJldHVybiBmdW5jdGlvbihlLCBkYXRhKSB7CisgICAgICAg
ICAgdmFyIHRhcmdldCA9ICQoZS50YXJnZXQpLCBwYXJlbnQ7CisKKyAgICAgICAgICBPYmplY3Qu
a2V5cyhydWxlcykuZm9yRWFjaChmdW5jdGlvbihzZWxlY3RvcikgeworICAgICAgICAgICAgaWYg
KChwYXJlbnQgPSB0YXJnZXQuY2xvc2VzdChzZWxlY3RvcikpLmxlbmd0aCkgeworICAgICAgICAg
ICAgICBkYXRhID0gZGF0YSB8fCB7fTsKKyAgICAgICAgICAgICAgZGF0YS5lbCA9IHBhcmVudFsw
XTsKKyAgICAgICAgICAgICAgcmV0dXJuIHJ1bGVzW3NlbGVjdG9yXS5hcHBseSh0aGlzLCBbZSwg
ZGF0YV0pOworICAgICAgICAgICAgfQorICAgICAgICAgIH0sIHRoaXMpOworICAgICAgICB9Owor
ICAgICAgfQorCisgICAgfTsKKworICAgIHJldHVybiB1dGlsczsKKyAgfQorKTsKSW5kZXg6IFBl
cmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9u
ZW50cy9mbGlnaHQvdG9vbHMvZGVidWcvZGVidWcuanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFu
Y2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2Zs
aWdodC90b29scy9kZWJ1Zy9kZWJ1Zy5qcwkocmV2aXNpb24gMCkKKysrIFBlcmZvcm1hbmNlVGVz
dHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9mbGlnaHQv
dG9vbHMvZGVidWcvZGVidWcuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTcgQEAKKyJ1
c2Ugc3RyaWN0IjsKKworZGVmaW5lKAorCisgIFsKKyAgICAnLi4vLi4vbGliL3JlZ2lzdHJ5JywK
KyAgICAnLi4vLi4vbGliL3V0aWxzJworICBdLAorCisgIGZ1bmN0aW9uKHJlZ2lzdHJ5LCB1dGls
cykgeworCisgICAgdmFyIGxvZ0ZpbHRlcjsKKworICAgIC8vKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqCisgICAgLy8gU2VhcmNoIG9iamVjdCBtb2RlbAorICAgIC8vKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqCisKKyAgICBmdW5jdGlvbiB0cmF2ZXJzZSh1dGlsLCBz
ZWFyY2hUZXJtLCBvcHRpb25zKSB7CisgICAgICB2YXIgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307
CisgICAgICB2YXIgb2JqID0gb3B0aW9ucy5vYmogfHwgd2luZG93OworICAgICAgdmFyIHBhdGgg
PSBvcHRpb25zLnBhdGggfHwgKChvYmo9PXdpbmRvdykgPyAid2luZG93IiA6ICIiKTsKKyAgICAg
IHZhciBwcm9wcyA9IE9iamVjdC5rZXlzKG9iaik7CisgICAgICBwcm9wcy5mb3JFYWNoKGZ1bmN0
aW9uKHByb3ApIHsKKyAgICAgICAgaWYgKCh0ZXN0c1t1dGlsXSB8fCB1dGlsKShzZWFyY2hUZXJt
LCBvYmosIHByb3ApKXsKKyAgICAgICAgICBjb25zb2xlLmxvZyhbcGF0aCwgIi4iLCBwcm9wXS5q
b2luKCIiKSwgIi0+IixbIigiLCB0eXBlb2Ygb2JqW3Byb3BdLCAiKSJdLmpvaW4oIiIpLCBvYmpb
cHJvcF0pOworICAgICAgICB9CisgICAgICAgIGlmKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcu
Y2FsbChvYmpbcHJvcF0pPT0iW29iamVjdCBPYmplY3RdIiAmJiAob2JqW3Byb3BdICE9IG9iaikg
JiYgcGF0aC5zcGxpdCgiLiIpLmluZGV4T2YocHJvcCkgPT0gLTEpIHsKKyAgICAgICAgICB0cmF2
ZXJzZSh1dGlsLCBzZWFyY2hUZXJtLCB7b2JqOiBvYmpbcHJvcF0sIHBhdGg6IFtwYXRoLHByb3Bd
LmpvaW4oIi4iKX0pOworICAgICAgICB9CisgICAgICB9KTsKKyAgICB9CisKKyAgICBmdW5jdGlv
biBzZWFyY2godXRpbCwgZXhwZWN0ZWQsIHNlYXJjaFRlcm0sIG9wdGlvbnMpIHsKKyAgICAgIGlm
ICghZXhwZWN0ZWQgfHwgdHlwZW9mIHNlYXJjaFRlcm0gPT0gZXhwZWN0ZWQpIHsKKyAgICAgICAg
dHJhdmVyc2UodXRpbCwgc2VhcmNoVGVybSwgb3B0aW9ucyk7CisgICAgICB9IGVsc2UgeworICAg
ICAgICBjb25zb2xlLmVycm9yKFtzZWFyY2hUZXJtLCAnbXVzdCBiZScsIGV4cGVjdGVkXS5qb2lu
KCcgJykpCisgICAgICB9CisgICAgfQorCisgICAgdmFyIHRlc3RzID0geworICAgICAgJ25hbWUn
OiBmdW5jdGlvbihzZWFyY2hUZXJtLCBvYmosIHByb3ApIHtyZXR1cm4gc2VhcmNoVGVybSA9PSBw
cm9wfSwKKyAgICAgICduYW1lQ29udGFpbnMnOiBmdW5jdGlvbihzZWFyY2hUZXJtLCBvYmosIHBy
b3ApIHtyZXR1cm4gcHJvcC5pbmRleE9mKHNlYXJjaFRlcm0pPi0xfSwKKyAgICAgICd0eXBlJzog
ZnVuY3Rpb24oc2VhcmNoVGVybSwgb2JqLCBwcm9wKSB7cmV0dXJuIG9ialtwcm9wXSBpbnN0YW5j
ZW9mIHNlYXJjaFRlcm19LAorICAgICAgJ3ZhbHVlJzogZnVuY3Rpb24oc2VhcmNoVGVybSwgb2Jq
LCBwcm9wKSB7cmV0dXJuIG9ialtwcm9wXSA9PT0gc2VhcmNoVGVybX0sCisgICAgICAndmFsdWVD
b2VyY2VkJzogZnVuY3Rpb24oc2VhcmNoVGVybSwgb2JqLCBwcm9wKSB7cmV0dXJuIG9ialtwcm9w
XSA9PSBzZWFyY2hUZXJtfQorICAgIH0KKworICAgIGZ1bmN0aW9uIGJ5TmFtZShzZWFyY2hUZXJt
LCBvcHRpb25zKSB7c2VhcmNoKCduYW1lJywgJ3N0cmluZycsIHNlYXJjaFRlcm0sIG9wdGlvbnMp
O307CisgICAgZnVuY3Rpb24gYnlOYW1lQ29udGFpbnMoc2VhcmNoVGVybSwgb3B0aW9ucykge3Nl
YXJjaCgnbmFtZUNvbnRhaW5zJywgJ3N0cmluZycsIHNlYXJjaFRlcm0sIG9wdGlvbnMpO307Cisg
ICAgZnVuY3Rpb24gYnlUeXBlKHNlYXJjaFRlcm0sIG9wdGlvbnMpIHtzZWFyY2goJ3R5cGUnLCAn
ZnVuY3Rpb24nLCBzZWFyY2hUZXJtLCBvcHRpb25zKTt9OworICAgIGZ1bmN0aW9uIGJ5VmFsdWUo
c2VhcmNoVGVybSwgb3B0aW9ucykge3NlYXJjaCgndmFsdWUnLCBudWxsLCBzZWFyY2hUZXJtLCBv
cHRpb25zKTt9OworICAgIGZ1bmN0aW9uIGJ5VmFsdWVDb2VyY2VkKHNlYXJjaFRlcm0sIG9wdGlv
bnMpIHtzZWFyY2goJ3ZhbHVlQ29lcmNlZCcsIG51bGwsIHNlYXJjaFRlcm0sIG9wdGlvbnMpO307
CisgICAgZnVuY3Rpb24gY3VzdG9tKGZuLCBvcHRpb25zKSB7dHJhdmVyc2UoZm4sIG51bGwsIG9w
dGlvbnMpO307CisKKyAgICAvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAg
IC8vIEV2ZW50IGxvZ2dpbmcKKyAgICAvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KgorCisgICAgdmFyIEFMTCA9ICdhbGwnOyAvL25vIGZpbHRlcgorCisgICAgLy9ubyBsb2dnaW5n
IGJ5IGRlZmF1bHQKKyAgICB2YXIgZGVmYXVsdEV2ZW50TmFtZXNGaWx0ZXIgPSBbXTsKKyAgICB2
YXIgZGVmYXVsdEFjdGlvbnNGaWx0ZXIgPSBbXTsKKworICAgIHZhciBsb2dGaWx0ZXIgPSByZXRy
aWV2ZUxvZ0ZpbHRlcigpOworCisgICAgZnVuY3Rpb24gZmlsdGVyRXZlbnRMb2dzQnlBY3Rpb24o
LyphY3Rpb25zKi8pIHsKKyAgICAgIHZhciBhY3Rpb25zID0gW10uc2xpY2UuY2FsbChhcmd1bWVu
dHMpOworCisgICAgICBsb2dGaWx0ZXIuZXZlbnROYW1lcy5sZW5ndGggfHwgKGxvZ0ZpbHRlci5l
dmVudE5hbWVzID0gQUxMKTsKKyAgICAgIGxvZ0ZpbHRlci5hY3Rpb25zID0gYWN0aW9ucy5sZW5n
dGggPyBhY3Rpb25zIDogQUxMOworICAgICAgc2F2ZUxvZ0ZpbHRlcigpOworICAgIH0KKworICAg
IGZ1bmN0aW9uIGZpbHRlckV2ZW50TG9nc0J5TmFtZSgvKmV2ZW50TmFtZXMqLykgeworICAgICAg
dmFyIGV2ZW50TmFtZXMgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7CisKKyAgICAgIGxvZ0Zp
bHRlci5hY3Rpb25zLmxlbmd0aCB8fCAobG9nRmlsdGVyLmFjdGlvbnMgPSBBTEwpOworICAgICAg
bG9nRmlsdGVyLmV2ZW50TmFtZXMgPSBldmVudE5hbWVzLmxlbmd0aCA/IGV2ZW50TmFtZXMgOiBB
TEw7CisgICAgICBzYXZlTG9nRmlsdGVyKCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gaGlkZUFs
bEV2ZW50TG9ncygpIHsKKyAgICAgIGxvZ0ZpbHRlci5hY3Rpb25zID0gW107CisgICAgICBsb2dG
aWx0ZXIuZXZlbnROYW1lcyA9IFtdOworICAgICAgc2F2ZUxvZ0ZpbHRlcigpOworICAgIH0KKwor
ICAgIGZ1bmN0aW9uIHNob3dBbGxFdmVudExvZ3MoKSB7CisgICAgICBsb2dGaWx0ZXIuYWN0aW9u
cyA9IEFMTDsKKyAgICAgIGxvZ0ZpbHRlci5ldmVudE5hbWVzID0gQUxMOworICAgICAgc2F2ZUxv
Z0ZpbHRlcigpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHNhdmVMb2dGaWx0ZXIoKSB7CisgICAg
ICBpZiAod2luZG93LmxvY2FsU3RvcmFnZSkgeworICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRl
bSgnbG9nRmlsdGVyX2V2ZW50TmFtZXMnLCBsb2dGaWx0ZXIuZXZlbnROYW1lcyk7CisgICAgICAg
IGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdsb2dGaWx0ZXJfYWN0aW9ucycsIGxvZ0ZpbHRlci5hY3Rp
b25zKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiByZXRyaWV2ZUxvZ0ZpbHRlcigp
IHsKKyAgICAgIHZhciByZXN1bHQgPSB7CisgICAgICAgIGV2ZW50TmFtZXM6ICh3aW5kb3cubG9j
YWxTdG9yYWdlICYmIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdsb2dGaWx0ZXJfZXZlbnROYW1lcycp
KSB8fCBkZWZhdWx0RXZlbnROYW1lc0ZpbHRlciwKKyAgICAgICAgYWN0aW9uczogKHdpbmRvdy5s
b2NhbFN0b3JhZ2UgJiYgbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2xvZ0ZpbHRlcl9hY3Rpb25zJykp
IHx8IGRlZmF1bHRBY3Rpb25zRmlsdGVyCisgICAgICB9OworICAgICAgLy9yZWNvbnN0aXR1dGUg
YXJyYXlzCisgICAgICBPYmplY3Qua2V5cyhyZXN1bHQpLmZvckVhY2goZnVuY3Rpb24oaykgewor
ICAgICAgICB2YXIgdGhpc1Byb3AgPSByZXN1bHRba107CisgICAgICAgIGlmICh0eXBlb2YgdGhp
c1Byb3AgPT0gJ3N0cmluZycgJiYgdGhpc1Byb3AgIT09IEFMTCkgeworICAgICAgICAgIHJlc3Vs
dFtrXSA9IHRoaXNQcm9wLnNwbGl0KCcsJyk7CisgICAgICAgIH0KKyAgICAgIH0pOworICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICByZXR1cm4geworCisgICAgICBlbmFibGU6IGZ1
bmN0aW9uKGVuYWJsZSkgeworICAgICAgICB0aGlzLmVuYWJsZWQgPSAhIWVuYWJsZTsKKworICAg
ICAgICBpZiAoZW5hYmxlICYmIHdpbmRvdy5jb25zb2xlKSB7CisgICAgICAgICAgY29uc29sZS5p
bmZvKCdCb290aW5nIGluIERFQlVHIG1vZGUnKTsKKyAgICAgICAgICBjb25zb2xlLmluZm8oJ1lv
dSBjYW4gY29uZmlndXJlIGV2ZW50IGxvZ2dpbmcgd2l0aCBERUJVRy5ldmVudHMubG9nQWxsKCkv
bG9nTm9uZSgpL2xvZ0J5TmFtZSgpL2xvZ0J5QWN0aW9uKCknKTsKKyAgICAgICAgfQorCisgICAg
ICAgIHdpbmRvdy5ERUJVRyA9IHRoaXM7CisgICAgICB9LAorCisgICAgICBmaW5kOiB7CisgICAg
ICAgIGJ5TmFtZTogYnlOYW1lLAorICAgICAgICBieU5hbWVDb250YWluczogYnlOYW1lQ29udGFp
bnMsCisgICAgICAgIGJ5VHlwZTogYnlUeXBlLAorICAgICAgICBieVZhbHVlOiBieVZhbHVlLAor
ICAgICAgICBieVZhbHVlQ29lcmNlZDogYnlWYWx1ZUNvZXJjZWQsCisgICAgICAgIGN1c3RvbTog
Y3VzdG9tCisgICAgICB9LAorCisgICAgICBldmVudHM6IHsKKyAgICAgICAgbG9nRmlsdGVyOiBs
b2dGaWx0ZXIsCisKKyAgICAgICAgLy8gQWNjZXB0cyBhbnkgbnVtYmVyIG9mIGFjdGlvbiBhcmdz
CisgICAgICAgIC8vIGUuZy4gREVCVUcuZXZlbnRzLmxvZ0J5QWN0aW9uKCJvbiIsICJvZmYiKQor
ICAgICAgICBsb2dCeUFjdGlvbjogZmlsdGVyRXZlbnRMb2dzQnlBY3Rpb24sCisKKyAgICAgICAg
Ly8gQWNjZXB0cyBhbnkgbnVtYmVyIG9mIGV2ZW50IG5hbWUgYXJncyAoaW5jLiByZWdleCBvciB3
aWxkY2FyZHMpCisgICAgICAgIC8vIGUuZy4gREVCVUcuZXZlbnRzLmxvZ0J5TmFtZSgvdWkuKi8s
ICIqVGhyZWFkKiIpOworICAgICAgICBsb2dCeU5hbWU6IGZpbHRlckV2ZW50TG9nc0J5TmFtZSwK
KworICAgICAgICBsb2dBbGw6IHNob3dBbGxFdmVudExvZ3MsCisgICAgICAgIGxvZ05vbmU6IGhp
ZGVBbGxFdmVudExvZ3MKKyAgICAgIH0KKyAgICB9OworICB9CispOworCkluZGV4OiBQZXJmb3Jt
YW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMv
amFzbWluZS1mbGlnaHQvTElDRU5TRS5tZAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3Rz
L0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvamFzbWluZS1m
bGlnaHQvTElDRU5TRS5tZAkocmV2aXNpb24gMCkKKysrIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VF
dmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9qYXNtaW5lLWZsaWdodC9M
SUNFTlNFLm1kCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTkgQEAKK0NvcHlyaWdodCAoYykg
MjAxMyBUd2l0dGVyLCBJbmMgYW5kIG90aGVycworCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFu
dGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CitvZiB0
aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29m
dHdhcmUiKSwgdG8gZGVhbAoraW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGlu
Y2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwordG8gdXNlLCBjb3B5LCBtb2Rp
ZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAor
Y29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhl
IFNvZnR3YXJlIGlzCitmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zOgorCitUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJt
aXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorYWxsIGNvcGllcyBvciBzdWJzdGFu
dGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURF
RCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCitJTVBM
SUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSwKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZS
SU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9M
REVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorTElBQklMSVRZ
LCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFS
SVNJTkcgRlJPTSwKK09VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9S
IFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KK1RIRSBTT0ZUV0FSRS4KXCBObyBuZXdsaW5l
IGF0IGVuZCBvZiBmaWxlCkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2Zs
aWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvamFzbWluZS1mbGlnaHQvUkVBRE1FLm1kCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhh
bXBsZS1hcHAvY29tcG9uZW50cy9qYXNtaW5lLWZsaWdodC9SRUFETUUubWQJKHJldmlzaW9uIDAp
CisrKyBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBw
L2NvbXBvbmVudHMvamFzbWluZS1mbGlnaHQvUkVBRE1FLm1kCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTQ1IEBACisjIGphc21pbmUtZmxpZ2h0IFshW0J1aWxkIFN0YXR1c10oaHR0cHM6Ly90
cmF2aXMtY2kub3JnL2ZsaWdodGpzL2phc21pbmUtZmxpZ2h0LnBuZz9icmFuY2g9bWFzdGVyKV0o
aHR0cDovL3RyYXZpcy1jaS5vcmcvZmxpZ2h0anMvamFzbWluZS1mbGlnaHQpCisKK0V4dGVuc2lv
bnMgdG8gdGhlIEphc21pbmUgdGVzdCBmcmFtZXdvcmsgZm9yIHVzZSB3aXRoIFtGbGlnaHRdKGh0
dHBzOi8vZ2l0aHViLmNvbS9mbGlnaHRqcy9mbGlnaHQpCisKKyMgR2V0dGluZyBzdGFydGVkCisK
K0luY2x1ZGUgW2phc21pbmUtZmxpZ2h0LmpzXShodHRwczovL3Jhdy5naXRodWIuY29tL2ZsaWdo
dGpzL2phc21pbmUtZmxpZ2h0L21hc3Rlci9saWIvamFzbWluZS1mbGlnaHQuanMpCitpbiB5b3Vy
IGFwcCBhbmQgbG9hZCBpdCBpbiB5b3VyIHRlc3QgcnVubmVyLgorCitPciBpbnN0YWxsIGl0IHdp
dGggW0Jvd2VyXShodHRwOi8vYm93ZXIuaW8vKToKKworYGBgYmFzaAorYm93ZXIgaW5zdGFsbCAt
LXNhdmUtZGV2IGphc21pbmUtZmxpZ2h0CitgYGAKKworKipOLkIuKiogamFzbWluZS1mbGlnaHQg
ZGVwZW5kcyBvbgorW2phc21pbmVdKGh0dHBzOi8vZ2l0aHViLmNvbS9waXZvdGFsL2phc21pbmUp
IGFuZAorW2phc21pbmUtanF1ZXJ5XShodHRwczovL2dpdGh1Yi5jb20vdmVsZXNpbi9qYXNtaW5l
LWpxdWVyeSkKKworIyMgQ29tcG9uZW50cworCitgYGBqYXZhc2NyaXB0CitkZXNjcmliZUNvbXBv
bmVudCgncGF0aC90by9jb21wb25lbnQnLCBmdW5jdGlvbiAoKSB7CisgIGJlZm9yZUVhY2goZnVu
Y3Rpb24gKCkgeworICAgIHNldHVwQ29tcG9uZW50KCk7CisgIH0pOworCisgIGl0KCdzaG91bGQg
ZG8geCcsIGZ1bmN0aW9uICgpIHsKKyAgICAvLyBhIGNvbXBvbmVudCBpbnN0YW5jZSBpcyBub3cg
YWNjZXNzaWJsZSBhcyB0aGlzLmNvbXBvbmVudAorICAgIC8vIHRoZSBjb21wb25lbnQgcm9vdCBu
b2RlIGlzIGF0dGFjaGVkIHRvIHRoZSBET00KKyAgICAvLyB0aGUgY29tcG9uZW50IHJvb3Qgbm9k
ZSBpcyBhbHNvIGF2YWlsYWJsZSBhcyB0aGlzLiRub2RlCisgIH0pOworfSk7CitgYGAKKworIyMg
TWl4aW5zCisKK2BgYGphdmFzY3JpcHQKK2Rlc2NyaWJlTWl4aW4oJ3BhdGgvdG8vbWl4aW4nLCBm
dW5jdGlvbiAoKSB7CisgIC8vIGluaXRpYWxpemUgdGhlIGNvbXBvbmVudCBhbmQgYXR0YWNoIGl0
IHRvIHRoZSBET00KKyAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7CisgICAgc2V0dXBDb21wb25l
bnQoKTsKKyAgfSk7CisKKyAgaXQoJ3Nob3VsZCBkbyB4JywgZnVuY3Rpb24gKCkgeworICAgIGV4
cGVjdCh0aGlzLmNvbXBvbmVudC5kb1NvbWV0aGluZygpKS50b0JlKGV4cGVjdGVkKTsKKyAgfSk7
Cit9KTsKK2BgYAorCisjIyBFdmVudCBzcHkKKworYGBgamF2YXNjcmlwdAorZGVzY3JpYmVDb21w
b25lbnQoJ2RhdGEvdHdpdHRlcl9wcm9maWxlJywgZnVuY3Rpb24gKCkgeworICBiZWZvcmVFYWNo
KGZ1bmN0aW9uICgpIHsKKyAgICBzZXR1cENvbXBvbmVudCgpOworICB9KTsKKworICBkZXNjcmli
ZSgnbGlzdGVucyBmb3IgdWlOZWVkc1R3aXR0ZXJVc2VySWQnLCBmdW5jdGlvbiAoKSB7CisgICAg
Ly8gd2FzIHRoZSBldmVudCB0cmlnZ2VyZWQ/CisgICAgaXQoJ2FuZCB0cmlnZ2VycyBkYXRhVHdp
dHRlclVzZXJJZCcsIGZ1bmN0aW9uICgpIHsKKyAgICAgIHZhciBldmVudFNweSA9IHNweU9uRXZl
bnQoZG9jdW1lbnQsICdkYXRhVHdpdHRlclByb2ZpbGUnKTsKKyAgICAgICQoZG9jdW1lbnQpLnRy
aWdnZXIoJ3VpTmVlZHNUd2l0dGVyVXNlcklkJywgeworICAgICAgICBzY3JlZW5fbmFtZTogJ3Ri
cmQnCisgICAgICB9KTsKKyAgICAgIGV4cGVjdChldmVudFNweSkudG9IYXZlQmVlblRyaWdnZXJl
ZE9uKGRvY3VtZW50KTsKKyAgICB9KTsKKworICAgIC8vIGlzIHRoZSB1c2VyIGlkIGNvcnJlY3Q/
CisgICAgaXQoJ2FuZCBoYXMgY29ycmVjdCBpZCcsIGZ1bmN0aW9uICgpIHsKKyAgICAgIHZhciBl
dmVudFNweSA9IHNweU9uRXZlbnQoZG9jdW1lbnQsICdkYXRhVHdpdHRlclVzZXJJZCcpOworICAg
ICAgJChkb2N1bWVudCkudHJpZ2dlcigndWlOZWVkc1R3aXR0ZXJ1c2VySWQnLCB7CisgICAgICAg
IHNjcmVlbl9uYW1lOiAndGJyZCcKKyAgICAgIH0pOworICAgICAgZXhwZWN0KGV2ZW50U3B5Lm1v
c3RSZWNlbnRDYWxsLmRhdGEpLnRvRXF1YWwoeworICAgICAgICBzY3JlZW5fbmFtZTogJ3RicmQn
LAorICAgICAgICBpZDogNDE0OTg2MQorICAgICAgfSk7CisgICAgfSk7CisgIH0pOworfSk7Citg
YGAKKworIyMgc2V0dXBDb21wb25lbnQKKworYGBgamF2YXNjcmlwdAorc2V0dXBDb21wb25lbnQo
b3B0aW9uYWxGaXh0dXJlLCBvcHRpb25hbE9wdGlvbnMpOworYGBgCisKK0NhbGxpbmcgYHNldHVw
Q29tcG9uZW50YCB0d2ljZSB3aWxsIGNyZWF0ZSBhbiBpbnN0YW5jZSwgdGVhciBpdCBkb3duIGFu
ZCBjcmVhdGUgYSBuZXcgb25lLgorCisjIyMgSFRNTCBGaXh0dXJlcworCitgYGBqYXZhc2NyaXB0
CitkZXNjcmliZUNvbXBvbmVudCgndWkvdHdpdHRlcl9wcm9maWxlJywgZnVuY3Rpb24gKCkgewor
ICAvLyBpcyB0aGUgY29tcG9uZW50IGF0dGFjaGVkIHRvIHRoZSBmaXh0dXJlPworICBpdCgndGhp
cy5jb21wb25lbnQuJG5vZGUgaGFzIGNsYXNzICJmb28iJywgZnVuY3Rpb24gKCkgeworICAgIHNl
dHVwQ29tcG9uZW50KCc8c3BhbiBjbGFzcz0iZm9vIj5UZXN0PC9zcGFuPicpOworICAgIGV4cGVj
dCh0aGlzLmNvbXBvbmVudC4kbm9kZSkudG9IYXZlQ2xhc3MoJ2ZvbycpOworICB9KTsKK30pOwor
YGBgCisKKyMjIyBDb21wb25lbnQgT3B0aW9ucworCitgYGBqYXZhc2NyaXB0CitkZXNjcmliZUNv
bXBvbmVudCgnZGF0YS90d2l0dGVyX3Byb2ZpbGUnLCBmdW5jdGlvbiAoKSB7CisgIC8vIGlzIHRo
ZSBvcHRpb24gc2V0IGNvcnJlY3RseT8KKyAgaXQoJ3RoaXMuY29tcG9uZW50LmF0dHIuYmFzZVVy
bCBpcyBzZXQnLCBmdW5jdGlvbiAoKSB7CisgICAgc2V0dXBDb21wb25lbnQoeworICAgICAgYmFz
ZVVybDogJ2h0dHA6Ly90d2l0dGVyLmNvbS8xLjEvJworICAgIH0pOworICAgIGV4cGVjdCh0aGlz
LmNvbXBvbmVudC5hdHRyLmJhc2VVcmwpLnRvQmUoJ2h0dHA6Ly90d2l0dGVyLmNvbS8xLjEvJyk7
CisgIH0pOworfSk7CitgYGAKKworIyBUZWFyZG93bgorCitDb21wb25lbnRzIGFyZSBhdXRvbWF0
aWNhbGx5IHRvcm4gZG93biBhZnRlciBlYWNoIHRlc3QuCisKKyMjIENvbnRyaWJ1dGluZyB0byB0
aGlzIHByb2plY3QKKworQW55b25lIGFuZCBldmVyeW9uZSBpcyB3ZWxjb21lIHRvIGNvbnRyaWJ1
dGUuIFBsZWFzZSB0YWtlIGEgbW9tZW50IHRvCityZXZpZXcgdGhlIFtndWlkZWxpbmVzIGZvciBj
b250cmlidXRpbmddKENPTlRSSUJVVElORy5tZCkuCisKKyogW0J1ZyByZXBvcnRzXShDT05UUklC
VVRJTkcubWQjYnVncykKKyogW0ZlYXR1cmUgcmVxdWVzdHNdKENPTlRSSUJVVElORy5tZCNmZWF0
dXJlcykKKyogW1B1bGwgcmVxdWVzdHNdKENPTlRSSUJVVElORy5tZCNwdWxsLXJlcXVlc3RzKQor
CisjIyBBdXRob3JzCisKKyogW0B0YnJkXShodHRwOi8vZ2l0aHViLmNvbS90YnJkKQorCisjIyBU
aGFua3MKKworKiBbQGVzYmllXShodHRwOi8vZ2l0aHViLmNvbS9lc2JpZSkgYW5kCisgIFtAc2tp
bGxkcmlja10oaHR0cDovL2dpdGh1Yi5jb20vc2tpbGxkcmljaykgZm9yIGNyZWF0aW5nIHRoZSBv
cmlnaW5hbAorICBgZGVzY3JpYmVDb21wb25lbnRgICYgYGRlc2NyaWJlTWl4aW5gIG1ldGhvZHMu
CisKKyMjIExpY2Vuc2UKKworQ29weXJpZ2h0IDIwMTMgVHdpdHRlciwgSW5jIGFuZCBvdGhlciBj
b250cmlidXRvcnMuCisKK0xpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZQpJbmRleDogUGVy
Zm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25l
bnRzL2phc21pbmUtZmxpZ2h0L2Jvd2VyLmpzb24KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VU
ZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2phc21p
bmUtZmxpZ2h0L2Jvd2VyLmpzb24JKHJldmlzaW9uIDApCisrKyBQZXJmb3JtYW5jZVRlc3RzL0Rv
WW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvamFzbWluZS1mbGln
aHQvYm93ZXIuanNvbgkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMwIEBACit7CisgICJuYW1l
IjogImphc21pbmUtZmxpZ2h0IiwKKyAgInZlcnNpb24iOiAiMS4xLjAiLAorICAiZGVzY3JpcHRp
b24iOiAiRXh0ZW5zaW9ucyB0byB0aGUgSmFzbWluZSB0ZXN0IGZyYW1ld29yayBmb3IgdXNlIHdp
dGggRmxpZ2h0IiwKKyAgIm1haW4iOiAibGliL2phc21pbmUtZmxpZ2h0LmpzIiwKKyAgImtleXdv
cmRzIjogWworICAgICJmbGlnaHQiLAorICAgICJqYXNtaW5lIiwKKyAgICAidGVzdCIKKyAgXSwK
KyAgImlnbm9yZSI6IFsKKyAgICAiLioiLAorICAgICJ0ZXN0IiwKKyAgICAicGFja2FnZS5qc29u
IiwKKyAgICAia2FybWEuY29uZi5qcyIsCisgICAgIkNPTlRSSUJVVElORy5tZCIsCisgICAgIkNI
QU5HRUxPRy5tZCIKKyAgXSwKKyAgImRldkRlcGVuZGVuY2llcyI6IHsKKyAgICAiZmxpZ2h0Ijog
In4xLjAuOSIKKyAgfSwKKyAgImdpdEhlYWQiOiAiNTE3NDMwMmI5YTg3ZWJkZGE5OWRlNmE0MzZl
YzJhNjQyMDBmYzVmZiIsCisgICJyZWFkbWUiOiAiIyBqYXNtaW5lLWZsaWdodCBbIVtCdWlsZCBT
dGF0dXNdKGh0dHBzOi8vdHJhdmlzLWNpLm9yZy9mbGlnaHRqcy9qYXNtaW5lLWZsaWdodC5wbmc/
YnJhbmNoPW1hc3RlcildKGh0dHA6Ly90cmF2aXMtY2kub3JnL2ZsaWdodGpzL2phc21pbmUtZmxp
Z2h0KVxuXG5FeHRlbnNpb25zIHRvIHRoZSBKYXNtaW5lIHRlc3QgZnJhbWV3b3JrIGZvciB1c2Ug
d2l0aCBbRmxpZ2h0XShodHRwczovL2dpdGh1Yi5jb20vZmxpZ2h0anMvZmxpZ2h0KVxuXG4jIEdl
dHRpbmcgc3RhcnRlZFxuXG5JbmNsdWRlIFtqYXNtaW5lLWZsaWdodC5qc10oaHR0cHM6Ly9yYXcu
Z2l0aHViLmNvbS9mbGlnaHRqcy9qYXNtaW5lLWZsaWdodC9tYXN0ZXIvbGliL2phc21pbmUtZmxp
Z2h0LmpzKVxuaW4geW91ciBhcHAgYW5kIGxvYWQgaXQgaW4geW91ciB0ZXN0IHJ1bm5lci5cblxu
T3IgaW5zdGFsbCBpdCB3aXRoIFtCb3dlcl0oaHR0cDovL2Jvd2VyLmlvLyk6XG5cbmBgYGJhc2hc
bmJvd2VyIGluc3RhbGwgLS1zYXZlLWRldiBqYXNtaW5lLWZsaWdodFxuYGBgXG5cbioqTi5CLioq
IGphc21pbmUtZmxpZ2h0IGRlcGVuZHMgb25cbltqYXNtaW5lXShodHRwczovL2dpdGh1Yi5jb20v
cGl2b3RhbC9qYXNtaW5lKSBhbmRcbltqYXNtaW5lLWpxdWVyeV0oaHR0cHM6Ly9naXRodWIuY29t
L3ZlbGVzaW4vamFzbWluZS1qcXVlcnkpXG5cbiMjIENvbXBvbmVudHNcblxuYGBgamF2YXNjcmlw
dFxuZGVzY3JpYmVDb21wb25lbnQoJ3BhdGgvdG8vY29tcG9uZW50JywgZnVuY3Rpb24gKCkge1xu
ICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICBzZXR1cENvbXBvbmVudCgpO1xuICB9KTtc
blxuICBpdCgnc2hvdWxkIGRvIHgnLCBmdW5jdGlvbiAoKSB7XG4gICAgLy8gYSBjb21wb25lbnQg
aW5zdGFuY2UgaXMgbm93IGFjY2Vzc2libGUgYXMgdGhpcy5jb21wb25lbnRcbiAgICAvLyB0aGUg
Y29tcG9uZW50IHJvb3Qgbm9kZSBpcyBhdHRhY2hlZCB0byB0aGUgRE9NXG4gICAgLy8gdGhlIGNv
bXBvbmVudCByb290IG5vZGUgaXMgYWxzbyBhdmFpbGFibGUgYXMgdGhpcy4kbm9kZVxuICB9KTtc
bn0pO1xuYGBgXG5cbiMjIE1peGluc1xuXG5gYGBqYXZhc2NyaXB0XG5kZXNjcmliZU1peGluKCdw
YXRoL3RvL21peGluJywgZnVuY3Rpb24gKCkge1xuICAvLyBpbml0aWFsaXplIHRoZSBjb21wb25l
bnQgYW5kIGF0dGFjaCBpdCB0byB0aGUgRE9NXG4gIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xu
ICAgIHNldHVwQ29tcG9uZW50KCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgZG8geCcsIGZ1bmN0
aW9uICgpIHtcbiAgICBleHBlY3QodGhpcy5jb21wb25lbnQuZG9Tb21ldGhpbmcoKSkudG9CZShl
eHBlY3RlZCk7XG4gIH0pO1xufSk7XG5gYGBcblxuIyMgRXZlbnQgc3B5XG5cbmBgYGphdmFzY3Jp
cHRcbmRlc2NyaWJlQ29tcG9uZW50KCdkYXRhL3R3aXR0ZXJfcHJvZmlsZScsIGZ1bmN0aW9uICgp
IHtcbiAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgc2V0dXBDb21wb25lbnQoKTtcbiAg
fSk7XG5cbiAgZGVzY3JpYmUoJ2xpc3RlbnMgZm9yIHVpTmVlZHNUd2l0dGVyVXNlcklkJywgZnVu
Y3Rpb24gKCkge1xuICAgIC8vIHdhcyB0aGUgZXZlbnQgdHJpZ2dlcmVkP1xuICAgIGl0KCdhbmQg
dHJpZ2dlcnMgZGF0YVR3aXR0ZXJVc2VySWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgZXZl
bnRTcHkgPSBzcHlPbkV2ZW50KGRvY3VtZW50LCAnZGF0YVR3aXR0ZXJQcm9maWxlJyk7XG4gICAg
ICAkKGRvY3VtZW50KS50cmlnZ2VyKCd1aU5lZWRzVHdpdHRlclVzZXJJZCcsIHtcbiAgICAgICAg
c2NyZWVuX25hbWU6ICd0YnJkJ1xuICAgICAgfSk7XG4gICAgICBleHBlY3QoZXZlbnRTcHkpLnRv
SGF2ZUJlZW5UcmlnZ2VyZWRPbihkb2N1bWVudCk7XG4gICAgfSk7XG5cbiAgICAvLyBpcyB0aGUg
dXNlciBpZCBjb3JyZWN0P1xuICAgIGl0KCdhbmQgaGFzIGNvcnJlY3QgaWQnLCBmdW5jdGlvbiAo
KSB7XG4gICAgICB2YXIgZXZlbnRTcHkgPSBzcHlPbkV2ZW50KGRvY3VtZW50LCAnZGF0YVR3aXR0
ZXJVc2VySWQnKTtcbiAgICAgICQoZG9jdW1lbnQpLnRyaWdnZXIoJ3VpTmVlZHNUd2l0dGVydXNl
cklkJywge1xuICAgICAgICBzY3JlZW5fbmFtZTogJ3RicmQnXG4gICAgICB9KTtcbiAgICAgIGV4
cGVjdChldmVudFNweS5tb3N0UmVjZW50Q2FsbC5kYXRhKS50b0VxdWFsKHtcbiAgICAgICAgc2Ny
ZWVuX25hbWU6ICd0YnJkJyxcbiAgICAgICAgaWQ6IDQxNDk4NjFcbiAgICAgIH0pO1xuICAgIH0p
O1xuICB9KTtcbn0pO1xuYGBgXG5cbiMjIHNldHVwQ29tcG9uZW50XG5cbmBgYGphdmFzY3JpcHRc
bnNldHVwQ29tcG9uZW50KG9wdGlvbmFsRml4dHVyZSwgb3B0aW9uYWxPcHRpb25zKTtcbmBgYFxu
XG5DYWxsaW5nIGBzZXR1cENvbXBvbmVudGAgdHdpY2Ugd2lsbCBjcmVhdGUgYW4gaW5zdGFuY2Us
IHRlYXIgaXQgZG93biBhbmQgY3JlYXRlIGEgbmV3IG9uZS5cblxuIyMjIEhUTUwgRml4dHVyZXNc
blxuYGBgamF2YXNjcmlwdFxuZGVzY3JpYmVDb21wb25lbnQoJ3VpL3R3aXR0ZXJfcHJvZmlsZScs
IGZ1bmN0aW9uICgpIHtcbiAgLy8gaXMgdGhlIGNvbXBvbmVudCBhdHRhY2hlZCB0byB0aGUgZml4
dHVyZT9cbiAgaXQoJ3RoaXMuY29tcG9uZW50LiRub2RlIGhhcyBjbGFzcyBcImZvb1wiJywgZnVu
Y3Rpb24gKCkge1xuICAgIHNldHVwQ29tcG9uZW50KCc8c3BhbiBjbGFzcz1cImZvb1wiPlRlc3Q8
L3NwYW4+Jyk7XG4gICAgZXhwZWN0KHRoaXMuY29tcG9uZW50LiRub2RlKS50b0hhdmVDbGFzcygn
Zm9vJyk7XG4gIH0pO1xufSk7XG5gYGBcblxuIyMjIENvbXBvbmVudCBPcHRpb25zXG5cbmBgYGph
dmFzY3JpcHRcbmRlc2NyaWJlQ29tcG9uZW50KCdkYXRhL3R3aXR0ZXJfcHJvZmlsZScsIGZ1bmN0
aW9uICgpIHtcbiAgLy8gaXMgdGhlIG9wdGlvbiBzZXQgY29ycmVjdGx5P1xuICBpdCgndGhpcy5j
b21wb25lbnQuYXR0ci5iYXNlVXJsIGlzIHNldCcsIGZ1bmN0aW9uICgpIHtcbiAgICBzZXR1cENv
bXBvbmVudCh7XG4gICAgICBiYXNlVXJsOiAnaHR0cDovL3R3aXR0ZXIuY29tLzEuMS8nXG4gICAg
fSk7XG4gICAgZXhwZWN0KHRoaXMuY29tcG9uZW50LmF0dHIuYmFzZVVybCkudG9CZSgnaHR0cDov
L3R3aXR0ZXIuY29tLzEuMS8nKTtcbiAgfSk7XG59KTtcbmBgYFxuXG4jIFRlYXJkb3duXG5cbkNv
bXBvbmVudHMgYXJlIGF1dG9tYXRpY2FsbHkgdG9ybiBkb3duIGFmdGVyIGVhY2ggdGVzdC5cblxu
IyMgQ29udHJpYnV0aW5nIHRvIHRoaXMgcHJvamVjdFxuXG5BbnlvbmUgYW5kIGV2ZXJ5b25lIGlz
IHdlbGNvbWUgdG8gY29udHJpYnV0ZS4gUGxlYXNlIHRha2UgYSBtb21lbnQgdG9cbnJldmlldyB0
aGUgW2d1aWRlbGluZXMgZm9yIGNvbnRyaWJ1dGluZ10oQ09OVFJJQlVUSU5HLm1kKS5cblxuKiBb
QnVnIHJlcG9ydHNdKENPTlRSSUJVVElORy5tZCNidWdzKVxuKiBbRmVhdHVyZSByZXF1ZXN0c10o
Q09OVFJJQlVUSU5HLm1kI2ZlYXR1cmVzKVxuKiBbUHVsbCByZXF1ZXN0c10oQ09OVFJJQlVUSU5H
Lm1kI3B1bGwtcmVxdWVzdHMpXG5cbiMjIEF1dGhvcnNcblxuKiBbQHRicmRdKGh0dHA6Ly9naXRo
dWIuY29tL3RicmQpXG5cbiMjIFRoYW5rc1xuXG4qIFtAZXNiaWVdKGh0dHA6Ly9naXRodWIuY29t
L2VzYmllKSBhbmRcbiAgW0Bza2lsbGRyaWNrXShodHRwOi8vZ2l0aHViLmNvbS9za2lsbGRyaWNr
KSBmb3IgY3JlYXRpbmcgdGhlIG9yaWdpbmFsXG4gIGBkZXNjcmliZUNvbXBvbmVudGAgJiBgZGVz
Y3JpYmVNaXhpbmAgbWV0aG9kcy5cblxuIyMgTGljZW5zZVxuXG5Db3B5cmlnaHQgMjAxMyBUd2l0
dGVyLCBJbmMgYW5kIG90aGVyIGNvbnRyaWJ1dG9ycy5cblxuTGljZW5zZWQgdW5kZXIgdGhlIE1J
VCBMaWNlbnNlXG4iLAorICAicmVhZG1lRmlsZW5hbWUiOiAiUkVBRE1FLm1kIiwKKyAgIl9pZCI6
ICJqYXNtaW5lLWZsaWdodEAxLjEuMCIsCisgICJyZXBvc2l0b3J5IjogeworICAgICJ0eXBlIjog
ImdpdCIsCisgICAgInVybCI6ICJnaXQ6Ly9naXRodWIuY29tL2ZsaWdodGpzL2phc21pbmUtZmxp
Z2h0LmdpdCIKKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IFBlcmZv
cm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50
cy9qYXNtaW5lLWZsaWdodC9saWIvamFzbWluZS1mbGlnaHQuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVy
Zm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25l
bnRzL2phc21pbmUtZmxpZ2h0L2xpYi9qYXNtaW5lLWZsaWdodC5qcwkocmV2aXNpb24gMCkKKysr
IFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29t
cG9uZW50cy9qYXNtaW5lLWZsaWdodC9saWIvamFzbWluZS1mbGlnaHQuanMJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw0NDQgQEAKKy8qKgorICogQ29weXJpZ2h0IDIwMTMsIFR3aXR0ZXIgSW5j
LiBhbmQgb3RoZXIgY29udHJpYnV0b3JzCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vu
c2UKKyAqLworCisoZnVuY3Rpb24gKHJvb3QpIHsKKyAgJ3VzZSBzdHJpY3QnOworCisgIGphc21p
bmUuZmxpZ2h0ID0ge307CisKKyAgLyoqCisgICAqIFdyYXBwZXIgZm9yIGRlc2NyaWJlLiBMb2Fk
IGNvbXBvbmVudCBiZWZvcmUgZWFjaCB0ZXN0LgorICAgKgorICAgKiBAcGFyYW0gY29tcG9uZW50
UGF0aAorICAgKiBAcGFyYW0gc3BlY0RlZmluaXRpb25zCisgICAqLworCisgIHJvb3QuZGVzY3Jp
YmVDb21wb25lbnQgPSBmdW5jdGlvbiAoY29tcG9uZW50UGF0aCwgc3BlY0RlZmluaXRpb25zKSB7
CisgICAgamFzbWluZS5nZXRFbnYoKS5kZXNjcmliZUNvbXBvbmVudChjb21wb25lbnRQYXRoLCBz
cGVjRGVmaW5pdGlvbnMpOworICB9OworCisgIGphc21pbmUuRW52LnByb3RvdHlwZS5kZXNjcmli
ZUNvbXBvbmVudCA9IGZ1bmN0aW9uIChjb21wb25lbnRQYXRoLCBzcGVjRGVmaW5pdGlvbnMpIHsK
KyAgICBkZXNjcmliZShjb21wb25lbnRQYXRoLCBmdW5jdGlvbiAoKSB7CisgICAgICBiZWZvcmVF
YWNoKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5Db21wb25lbnQgPSB0aGlzLmNvbXBvbmVu
dCA9IHRoaXMuJG5vZGUgPSBudWxsOworCisgICAgICAgIHZhciByZXF1aXJlQ2FsbGJhY2sgPSBm
dW5jdGlvbiAocmVnaXN0cnksIENvbXBvbmVudCkgeworICAgICAgICAgIHJlZ2lzdHJ5LnJlc2V0
KCk7CisgICAgICAgICAgdGhpcy5Db21wb25lbnQgPSBDb21wb25lbnQ7CisgICAgICAgIH0uYmlu
ZCh0aGlzKTsKKworICAgICAgICByZXF1aXJlKFsnZmxpZ2h0L2xpYi9yZWdpc3RyeScsIGNvbXBv
bmVudFBhdGhdLCByZXF1aXJlQ2FsbGJhY2spOworCisgICAgICAgIHdhaXRzRm9yKGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgICByZXR1cm4gdGhpcy5Db21wb25lbnQgIT09IG51bGw7CisgICAgICAg
IH0uYmluZCh0aGlzKSk7CisgICAgICB9KTsKKworICAgICAgYWZ0ZXJFYWNoKGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgaWYgKHRoaXMuJG5vZGUpIHsKKyAgICAgICAgICB0aGlzLiRub2RlLnJlbW92
ZSgpOworICAgICAgICAgIHRoaXMuJG5vZGUgPSBudWxsOworICAgICAgICB9CisKKyAgICAgICAg
dmFyIHJlcXVpcmVDYWxsYmFjayA9IGZ1bmN0aW9uIChkZWZpbmVDb21wb25lbnQpIHsKKyAgICAg
ICAgICBpZiAodGhpcy5jb21wb25lbnQpIHsKKyAgICAgICAgICAgIHRoaXMuY29tcG9uZW50ID0g
bnVsbDsKKyAgICAgICAgICB9CisKKyAgICAgICAgICB0aGlzLkNvbXBvbmVudCA9IG51bGw7Cisg
ICAgICAgICAgZGVmaW5lQ29tcG9uZW50LnRlYXJkb3duQWxsKCk7CisgICAgICAgIH0uYmluZCh0
aGlzKTsKKworICAgICAgICByZXF1aXJlKFsnZmxpZ2h0L2xpYi9jb21wb25lbnQnXSwgcmVxdWly
ZUNhbGxiYWNrKTsKKworICAgICAgICB3YWl0c0ZvcihmdW5jdGlvbiAoKSB7CisgICAgICAgICAg
cmV0dXJuIHRoaXMuQ29tcG9uZW50ID09PSBudWxsOworICAgICAgICB9LmJpbmQodGhpcykpOwor
ICAgICAgfSk7CisKKyAgICAgIHNwZWNEZWZpbml0aW9ucy5hcHBseSh0aGlzKTsKKyAgICB9KTsK
KyAgfTsKKworICAvKioKKyAgICogV3JhcHBlciBmb3IgZGVzY3JpYmUuIExvYWQgbWl4aW4gYmVm
b3JlIGVhY2ggdGVzdC4KKyAgICoKKyAgICogQHBhcmFtIG1peGluUGF0aAorICAgKiBAcGFyYW0g
c3BlY0RlZmluaXRpb25zCisgICAqLworCisgIHJvb3QuZGVzY3JpYmVNaXhpbiA9IGZ1bmN0aW9u
IChtaXhpblBhdGgsIHNwZWNEZWZpbml0aW9ucykgeworICAgIGphc21pbmUuZ2V0RW52KCkuZGVz
Y3JpYmVNaXhpbihtaXhpblBhdGgsIHNwZWNEZWZpbml0aW9ucyk7CisgIH07CisKKyAgamFzbWlu
ZS5FbnYucHJvdG90eXBlLmRlc2NyaWJlTWl4aW4gPSBmdW5jdGlvbiAobWl4aW5QYXRoLCBzcGVj
RGVmaW5pdGlvbnMpIHsKKyAgICBkZXNjcmliZShtaXhpblBhdGgsIGZ1bmN0aW9uICgpIHsKKyAg
ICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLkNvbXBvbmVudCA9IHRo
aXMuY29tcG9uZW50ID0gdGhpcy4kbm9kZSA9IG51bGw7CisKKyAgICAgICAgdmFyIHJlcXVpcmVD
YWxsYmFjayA9IGZ1bmN0aW9uIChyZWdpc3RyeSwgZGVmaW5lQ29tcG9uZW50LCBNaXhpbikgewor
ICAgICAgICAgIHJlZ2lzdHJ5LnJlc2V0KCk7CisgICAgICAgICAgdGhpcy5Db21wb25lbnQgPSBk
ZWZpbmVDb21wb25lbnQoZnVuY3Rpb24gKCkge30sIE1peGluKTsKKyAgICAgICAgfS5iaW5kKHRo
aXMpOworCisgICAgICAgIHJlcXVpcmUoWydmbGlnaHQvbGliL3JlZ2lzdHJ5JywgJ2ZsaWdodC9s
aWIvY29tcG9uZW50JywgbWl4aW5QYXRoXSwgcmVxdWlyZUNhbGxiYWNrKTsKKworICAgICAgICB3
YWl0c0ZvcihmdW5jdGlvbiAoKSB7CisgICAgICAgICAgcmV0dXJuIHRoaXMuQ29tcG9uZW50ICE9
PSBudWxsOworICAgICAgICB9KTsKKyAgICAgIH0pOworCisgICAgICBhZnRlckVhY2goZnVuY3Rp
b24gKCkgeworICAgICAgICBpZiAodGhpcy4kbm9kZSkgeworICAgICAgICAgIHRoaXMuJG5vZGUu
cmVtb3ZlKCk7CisgICAgICAgICAgdGhpcy4kbm9kZSA9IG51bGw7CisgICAgICAgIH0KKworICAg
ICAgICB2YXIgcmVxdWlyZUNhbGxiYWNrID0gZnVuY3Rpb24gKGRlZmluZUNvbXBvbmVudCkgewor
ICAgICAgICAgIGlmICh0aGlzLmNvbXBvbmVudCkgeworICAgICAgICAgICAgdGhpcy5jb21wb25l
bnQgPSBudWxsOworICAgICAgICAgIH0KKworICAgICAgICAgIHRoaXMuQ29tcG9uZW50ID0gbnVs
bDsKKyAgICAgICAgICBkZWZpbmVDb21wb25lbnQudGVhcmRvd25BbGwoKTsKKyAgICAgICAgfS5i
aW5kKHRoaXMpOworCisgICAgICAgIHJlcXVpcmUoWydmbGlnaHQvbGliL2NvbXBvbmVudCddLCBy
ZXF1aXJlQ2FsbGJhY2spOworCisgICAgICAgIHdhaXRzRm9yKGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgICByZXR1cm4gdGhpcy5Db21wb25lbnQgPT09IG51bGw7CisgICAgICAgIH0uYmluZCh0aGlz
KSk7CisgICAgICB9KTsKKworICAgICAgc3BlY0RlZmluaXRpb25zLmFwcGx5KHRoaXMpOworICAg
IH0pOworICB9OworCisgIC8qKgorICAgKiBXcmFwcGVyIGZvciBkZXNjcmliZS4gTG9hZCBtb2R1
bGUgYmVmb3JlIGVhY2ggdGVzdC4KKyAgICoKKyAgICogQHBhcmFtIG1vZHVsZVBhdGgKKyAgICog
QHBhcmFtIHNwZWNEZWZpbml0aW9ucworICAgKi8KKworICByb290LmRlc2NyaWJlTW9kdWxlID0g
ZnVuY3Rpb24gKG1vZHVsZVBhdGgsIHNwZWNEZWZpbml0aW9ucykgeworICAgIHJldHVybiBqYXNt
aW5lLmdldEVudigpLmRlc2NyaWJlTW9kdWxlKG1vZHVsZVBhdGgsIHNwZWNEZWZpbml0aW9ucyk7
CisgIH07CisKKyAgamFzbWluZS5FbnYucHJvdG90eXBlLmRlc2NyaWJlTW9kdWxlID0gZnVuY3Rp
b24gKG1vZHVsZVBhdGgsIHNwZWNEZWZpbml0aW9ucykgeworICAgIGRlc2NyaWJlKG1vZHVsZVBh
dGgsIGZ1bmN0aW9uICgpIHsKKyAgICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkgeworICAgICAg
ICB0aGlzLm1vZHVsZSA9IG51bGw7CisKKyAgICAgICAgdmFyIHJlcXVpcmVDYWxsYmFjayA9IGZ1
bmN0aW9uIChtb2R1bGUpIHsKKyAgICAgICAgICB0aGlzLm1vZHVsZSA9IG1vZHVsZTsKKyAgICAg
ICAgfS5iaW5kKHRoaXMpOworCisgICAgICAgIHJlcXVpcmUoW21vZHVsZVBhdGhdLCByZXF1aXJl
Q2FsbGJhY2spOworCisgICAgICAgIHdhaXRzRm9yKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICBy
ZXR1cm4gdGhpcy5tb2R1bGUgIT09IG51bGw7CisgICAgICAgIH0pOworICAgICAgfSk7CisKKyAg
ICAgIHNwZWNEZWZpbml0aW9ucy5hcHBseSh0aGlzKTsKKyAgICB9KTsKKyAgfTsKKworICAvKioK
KyAgICogQ3JlYXRlIHJvb3Qgbm9kZSBhbmQgaW5pdGlhbGl6ZSBjb21wb25lbnQuIEZpeHR1cmUg
c2hvdWxkIGJlIGh0bWwgc3RyaW5nCisgICAqIG9yIGpRdWVyeSBvYmplY3QuCisgICAqCisgICAq
IEBwYXJhbSBmaXh0dXJlIHtTdHJpbmd9IChPcHRpb25hbCkKKyAgICogQHBhcmFtIG9wdGlvbnMg
e09wdGlvbnN9IChPcHRpb25hbCkKKyAgICovCisKKyAgcm9vdC5zZXR1cENvbXBvbmVudCA9IGZ1
bmN0aW9uIChmaXh0dXJlLCBvcHRpb25zKSB7CisgICAgamFzbWluZS5nZXRFbnYoKS5jdXJyZW50
U3BlYy5zZXR1cENvbXBvbmVudChmaXh0dXJlLCBvcHRpb25zKTsKKyAgfTsKKworICBqYXNtaW5l
LlNwZWMucHJvdG90eXBlLnNldHVwQ29tcG9uZW50ID0gZnVuY3Rpb24gKGZpeHR1cmUsIG9wdGlv
bnMpIHsKKyAgICBpZiAodGhpcy5jb21wb25lbnQpIHsKKyAgICAgIHRoaXMuY29tcG9uZW50LnRl
YXJkb3duKCk7CisgICAgICB0aGlzLiRub2RlLnJlbW92ZSgpOworICAgIH0KKworICAgIHRoaXMu
JG5vZGUgPSAkKCc8ZGl2IGNsYXNzPSJjb21wb25lbnQtcm9vdCIgLz4nKTsKKyAgICAkKCdib2R5
JykuYXBwZW5kKHRoaXMuJG5vZGUpOworCisgICAgaWYgKGZpeHR1cmUgaW5zdGFuY2VvZiBqUXVl
cnkgfHwgdHlwZW9mIGZpeHR1cmUgPT09ICdzdHJpbmcnKSB7CisgICAgICB0aGlzLiRub2RlLmFw
cGVuZChmaXh0dXJlKTsKKyAgICB9IGVsc2UgeworICAgICAgb3B0aW9ucyA9IGZpeHR1cmU7Cisg
ICAgICBmaXh0dXJlID0gbnVsbDsKKyAgICB9CisKKyAgICBvcHRpb25zID0gb3B0aW9ucyA9PT0g
dW5kZWZpbmVkID8ge30gOiBvcHRpb25zOworCisgICAgdGhpcy5jb21wb25lbnQgPSBuZXcgdGhp
cy5Db21wb25lbnQodGhpcy4kbm9kZSwgb3B0aW9ucyk7CisgIH07CisKKworICAoZnVuY3Rpb24g
KG5hbWVzcGFjZSkgeworICAgIHZhciBldmVudHNEYXRhID0geworICAgICAgc3BpZWRFdmVudHM6
IHt9LAorICAgICAgaGFuZGxlcnM6ICAgIFtdCisgICAgfTsKKworICAgIG5hbWVzcGFjZS5mb3Jt
YXRFbGVtZW50ID0gZnVuY3Rpb24gKCRlbGVtZW50KSB7CisgICAgICB2YXIgbGltaXQgPSAyMDA7
CisgICAgICB2YXIgb3V0cHV0ID0gJyc7CisKKyAgICAgIGlmICgkZWxlbWVudCBpbnN0YW5jZW9m
IGpRdWVyeSkgeworICAgICAgICBvdXRwdXQgPSBqYXNtaW5lLkpRdWVyeS5lbGVtZW50VG9TdHJp
bmcoJGVsZW1lbnQpOworICAgICAgICBpZiAob3V0cHV0Lmxlbmd0aCA+IGxpbWl0KSB7CisgICAg
ICAgICAgb3V0cHV0ID0gb3V0cHV0LnNsaWNlKDAsIDIwMCkgKyAnLi4uJzsKKyAgICAgICAgfQor
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgLy8kZWxlbWVudCBzaG91bGQgYWx3YXlzIGJlIGEgalF1
ZXJ5IG9iamVjdAorICAgICAgICBvdXRwdXQgPSAnZWxlbWVudCBpcyBub3QgYSBqUXVlcnkgb2Jq
ZWN0JzsKKyAgICAgIH0KKworICAgICAgcmV0dXJuIG91dHB1dDsKKyAgICB9OworCisgICAgbmFt
ZXNwYWNlLmNvbXBhcmVDb2xvcnMgPSBmdW5jdGlvbiAoY29sb3IxLCBjb2xvcjIpIHsKKyAgICAg
IGlmIChjb2xvcjEuY2hhckF0KDApID09PSBjb2xvcjIuY2hhckF0KDApKSB7CisgICAgICAgIHJl
dHVybiBjb2xvcjEgPT09IGNvbG9yMjsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBu
YW1lc3BhY2UuaGV4MnJnYihjb2xvcjEpID09PSBuYW1lc3BhY2UuaGV4MnJnYihjb2xvcjIpOwor
ICAgICAgfQorICAgIH07CisKKyAgICBuYW1lc3BhY2UuaGV4MnJnYiA9IGZ1bmN0aW9uIChjb2xv
clN0cmluZykgeworICAgICAgaWYgKGNvbG9yU3RyaW5nLmNoYXJBdCgwKSAhPT0gJyMnKSByZXR1
cm4gY29sb3JTdHJpbmc7CisgICAgICAvLyBub3RlOiBoZXhTdHIgc2hvdWxkIGJlICNycmdnYmIK
KyAgICAgIHZhciBoZXggPSBwYXJzZUludChjb2xvclN0cmluZy5zdWJzdHJpbmcoMSksIDE2KTsK
KyAgICAgIHZhciByID0gKGhleCAmIDB4ZmYwMDAwKSA+PiAxNjsKKyAgICAgIHZhciBnID0gKGhl
eCAmIDB4MDBmZjAwKSA+PiA4OworICAgICAgdmFyIGIgPSBoZXggJiAweDAwMDBmZjsKKyAgICAg
IHJldHVybiAncmdiKCcgKyByICsgJywgJyArIGcgKyAnLCAnICsgYiArICcpJzsKKyAgICB9Owor
CisgICAgbmFtZXNwYWNlLmV2ZW50cyA9IHsKKyAgICAgIHNweU9uOiBmdW5jdGlvbiAoc2VsZWN0
b3IsIGV2ZW50TmFtZSkgeworICAgICAgICBldmVudHNEYXRhLnNwaWVkRXZlbnRzW1tzZWxlY3Rv
ciwgZXZlbnROYW1lXV0gPSB7CisgICAgICAgICAgY2FsbENvdW50OiAwLAorICAgICAgICAgIGNh
bGxzOiBbXSwKKyAgICAgICAgICBtb3N0UmVjZW50Q2FsbDoge30sCisgICAgICAgICAgbmFtZTog
ZXZlbnROYW1lCisgICAgICAgIH07CisKKyAgICAgICAgdmFyIGhhbmRsZXIgPSBmdW5jdGlvbiAo
ZSwgZGF0YSkgeworICAgICAgICAgIHZhciBjYWxsID0geworICAgICAgICAgICAgZXZlbnQ6IGUs
CisgICAgICAgICAgICBhcmdzOiBqYXNtaW5lLnV0aWwuYXJnc1RvQXJyYXkoYXJndW1lbnRzKSwK
KyAgICAgICAgICAgIGRhdGE6IGRhdGEKKyAgICAgICAgICB9OworICAgICAgICAgIGV2ZW50c0Rh
dGEuc3BpZWRFdmVudHNbW3NlbGVjdG9yLCBldmVudE5hbWVdXS5jYWxsQ291bnQrKzsKKyAgICAg
ICAgICBldmVudHNEYXRhLnNwaWVkRXZlbnRzW1tzZWxlY3RvciwgZXZlbnROYW1lXV0uY2FsbHMu
cHVzaChjYWxsKTsKKyAgICAgICAgICBldmVudHNEYXRhLnNwaWVkRXZlbnRzW1tzZWxlY3Rvciwg
ZXZlbnROYW1lXV0ubW9zdFJlY2VudENhbGwgPSBjYWxsOworICAgICAgICB9OworCisgICAgICAg
IGpRdWVyeShzZWxlY3Rvcikub24oZXZlbnROYW1lLCBoYW5kbGVyKTsKKyAgICAgICAgZXZlbnRz
RGF0YS5oYW5kbGVycy5wdXNoKGhhbmRsZXIpOworICAgICAgICByZXR1cm4gZXZlbnRzRGF0YS5z
cGllZEV2ZW50c1tbc2VsZWN0b3IsIGV2ZW50TmFtZV1dOworICAgICAgfSwKKworICAgICAgZXZl
bnRBcmdzOiBmdW5jdGlvbiAoc2VsZWN0b3IsIGV2ZW50TmFtZSwgZXhwZWN0ZWRBcmcpIHsKKyAg
ICAgICAgdmFyIGFjdHVhbEFyZ3MgPSBldmVudHNEYXRhLnNwaWVkRXZlbnRzW1tzZWxlY3Rvciwg
ZXZlbnROYW1lXV0ubW9zdFJlY2VudENhbGwuYXJnczsKKworICAgICAgICBpZiAoIWFjdHVhbEFy
Z3MpIHsKKyAgICAgICAgICB0aHJvdyAnTm8gZXZlbnQgc3B5IGZvdW5kIG9uICcgKyBldmVudE5h
bWUgKyAnLiBUcnkgYWRkaW5nIGEgY2FsbCB0byBzcHlPbkV2ZW50IG9yIG1ha2Ugc3VyZSB0aGF0
IHRoZSBzZWxlY3RvciB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkIG9uIGFuZCB0aGUgc2VsZWN0b3Ig
YmVpbmcgc3BpZWQgb24gYXJlIGNvcnJlY3QuJzsKKyAgICAgICAgfQorCisgICAgICAgIC8vIHJl
bW92ZSBleHRyYSBldmVudCBtZXRhZGF0YSBpZiBpdCBpcyBub3QgdGVzdGVkIGZvcgorICAgICAg
ICBpZiAoKGFjdHVhbEFyZ3MubGVuZ3RoID09PSAyKSAmJiB0eXBlb2YgYWN0dWFsQXJnc1sxXSA9
PT0gJ29iamVjdCcgJiYKKyAgICAgICAgICBleHBlY3RlZEFyZyAmJiAhZXhwZWN0ZWRBcmcuc2Ny
aWJlQ29udGV4dCAmJiAhZXhwZWN0ZWRBcmcuc291cmNlRXZlbnREYXRhICYmICFleHBlY3RlZEFy
Zy5zY3JpYmVEYXRhKSB7CisgICAgICAgICAgYWN0dWFsQXJnc1sxXSA9ICQuZXh0ZW5kKHt9LCBh
Y3R1YWxBcmdzWzFdKTsKKyAgICAgICAgICBkZWxldGUgYWN0dWFsQXJnc1sxXS5zb3VyY2VFdmVu
dERhdGE7CisgICAgICAgICAgZGVsZXRlIGFjdHVhbEFyZ3NbMV0uc2NyaWJlQ29udGV4dDsKKyAg
ICAgICAgICBkZWxldGUgYWN0dWFsQXJnc1sxXS5zY3JpYmVEYXRhOworICAgICAgICB9CisKKyAg
ICAgICAgcmV0dXJuIGFjdHVhbEFyZ3M7CisgICAgICB9LAorCisgICAgICB3YXNUcmlnZ2VyZWQ6
IGZ1bmN0aW9uIChzZWxlY3RvciwgZXZlbnQpIHsKKyAgICAgICAgdmFyIHNwaWVkRXZlbnQgPSBl
dmVudHNEYXRhLnNwaWVkRXZlbnRzW1tzZWxlY3RvciwgZXZlbnRdXTsKKyAgICAgICAgcmV0dXJu
IHNwaWVkRXZlbnQgJiYgc3BpZWRFdmVudC5jYWxsQ291bnQgPiAwOworICAgICAgfSwKKworICAg
ICAgd2FzVHJpZ2dlcmVkV2l0aDogZnVuY3Rpb24gKHNlbGVjdG9yLCBldmVudE5hbWUsIGV4cGVj
dGVkQXJnLCBlbnYpIHsKKyAgICAgICAgdmFyIGFjdHVhbEFyZ3MgPSBqYXNtaW5lLmZsaWdodC5l
dmVudHMuZXZlbnRBcmdzKHNlbGVjdG9yLCBldmVudE5hbWUsIGV4cGVjdGVkQXJnKTsKKyAgICAg
ICAgcmV0dXJuIGFjdHVhbEFyZ3MgJiYgZW52LmNvbnRhaW5zXyhhY3R1YWxBcmdzLCBleHBlY3Rl
ZEFyZyk7CisgICAgICB9LAorCisgICAgICB3YXNUcmlnZ2VyZWRXaXRoRGF0YTogZnVuY3Rpb24g
KHNlbGVjdG9yLCBldmVudE5hbWUsIGV4cGVjdGVkQXJnLCBlbnYpIHsKKyAgICAgICAgdmFyIGFj
dHVhbEFyZ3MgPSBqYXNtaW5lLmZsaWdodC5ldmVudHMuZXZlbnRBcmdzKHNlbGVjdG9yLCBldmVu
dE5hbWUsIGV4cGVjdGVkQXJnKTsKKyAgICAgICAgdmFyIHZhbGlkOworCisgICAgICAgIGlmIChh
Y3R1YWxBcmdzKSB7CisgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKKyAgICAgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IGFjdHVhbEFyZ3MubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGlmIChq
YXNtaW5lLmZsaWdodC52YWxpZGF0ZUhhc2goZXhwZWN0ZWRBcmcsIGFjdHVhbEFyZ3NbaV0pKSB7
CisgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgIH0K
KyAgICAgICAgICByZXR1cm4gdmFsaWQ7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICB9LAorCisgICAgICBjbGVhblVwOiBmdW5jdGlvbiAoKSB7CisgICAgICAgIGV2
ZW50c0RhdGEuc3BpZWRFdmVudHMgPSB7fTsKKyAgICAgICAgZXZlbnRzRGF0YS5oYW5kbGVycyAg
ICA9IFtdOworICAgICAgfQorICAgIH07CisKKyAgICBuYW1lc3BhY2UudmFsaWRhdGVIYXNoID0g
ZnVuY3Rpb24gKGEsIGIsIGludGVyc2VjdGlvbikgeworICAgICAgdmFyIHZhbGlkSGFzaDsKKyAg
ICAgIGZvciAodmFyIGZpZWxkIGluIGEpIHsKKyAgICAgICAgaWYgKCh0eXBlb2YgYVtmaWVsZF0g
PT09ICdvYmplY3QnKSAmJiAodHlwZW9mIGJbZmllbGRdID09PSAnb2JqZWN0JykpIHsKKyAgICAg
ICAgICB2YWxpZEhhc2ggPSBqYXNtaW5lLmZsaWdodC52YWxpZGF0ZUhhc2goYVtmaWVsZF0sIGJb
ZmllbGRdKTsKKyAgICAgICAgfSBlbHNlIGlmIChpbnRlcnNlY3Rpb24gJiYgKHR5cGVvZiBhW2Zp
ZWxkXSA9PT0gJ3VuZGVmaW5lZCcgfHwgdHlwZW9mIGJbZmllbGRdID09PSAndW5kZWZpbmVkJykp
IHsKKyAgICAgICAgICB2YWxpZEhhc2ggPSB0cnVlOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgIHZhbGlkSGFzaCA9IChhW2ZpZWxkXSA9PT0gYltmaWVsZF0pOworICAgICAgICB9CisgICAg
ICAgIGlmICghdmFsaWRIYXNoKSB7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
IH0KKyAgICAgIHJldHVybiB2YWxpZEhhc2g7CisgICAgfTsKKyAgfSkoamFzbWluZS5mbGlnaHQp
OworCisgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkgeworICAgIHRoaXMuYWRkTWF0Y2hlcnMoewor
ICAgICAgdG9IYXZlQmVlblRyaWdnZXJlZE9uOiBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBz
ZWxlY3RvciA9IGFyZ3VtZW50c1swXTsKKyAgICAgICAgdmFyIGV2ZW50TmFtZSA9IHR5cGVvZiB0
aGlzLmFjdHVhbCA9PT0gJ3N0cmluZycgPyB0aGlzLmFjdHVhbCA6IHRoaXMuYWN0dWFsLm5hbWU7
CisgICAgICAgIHZhciB3YXNUcmlnZ2VyZWQgPSBqYXNtaW5lLmZsaWdodC5ldmVudHMud2FzVHJp
Z2dlcmVkKHNlbGVjdG9yLCBldmVudE5hbWUpOworCisgICAgICAgIHRoaXMubWVzc2FnZSA9IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgICB2YXIgJHBwID0gZnVuY3Rpb24gKG9iaikgeworICAgICAg
ICAgICAgdmFyIGRlc2NyaXB0aW9uOworICAgICAgICAgICAgdmFyIGF0dHI7CisKKyAgICAgICAg
ICAgIGlmICghKG9iaiBpbnN0YW5jZW9mIGpRdWVyeSkpIHsKKyAgICAgICAgICAgICAgb2JqID0g
JChvYmopOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBkZXNjcmlwdGlvbiA9IFsKKyAg
ICAgICAgICAgICAgb2JqLmdldCgwKS5ub2RlTmFtZQorICAgICAgICAgICAgXTsKKworICAgICAg
ICAgICAgYXR0ciA9IG9iai5nZXQoMCkuYXR0cmlidXRlcyB8fCBbXTsKKworICAgICAgICAgICAg
Zm9yICh2YXIgeCA9IDA7IHggPCBhdHRyLmxlbmd0aDsgeCsrKSB7CisgICAgICAgICAgICAgIGRl
c2NyaXB0aW9uLnB1c2goYXR0clt4XS5uYW1lICsgJz0iJyArIGF0dHJbeF0udmFsdWUgKyAnIicp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gJzwnICsgZGVzY3JpcHRpb24u
am9pbignICcpICsgJz4nOworICAgICAgICAgIH07CisKKyAgICAgICAgICBpZiAod2FzVHJpZ2dl
cmVkKSB7CisgICAgICAgICAgICByZXR1cm4gWworICAgICAgICAgICAgICAnPGRpdiBjbGFzcz0i
dmFsdWUtbWlzbWF0Y2giPkV4cGVjdGVkIGV2ZW50ICcgKyBldmVudE5hbWUgKyAnIHRvIGhhdmUg
YmVlbiB0cmlnZ2VyZWQgb24nICsgc2VsZWN0b3IsCisgICAgICAgICAgICAgICc8ZGl2IGNsYXNz
PSJ2YWx1ZS1taXNtYXRjaCI+RXhwZWN0ZWQgZXZlbnQgJyArIGV2ZW50TmFtZSArICcgbm90IHRv
IGhhdmUgYmVlbiB0cmlnZ2VyZWQgb24nICsgc2VsZWN0b3IKKyAgICAgICAgICAgIF07CisgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBbCisgICAgICAgICAgICAgICdFeHBl
Y3RlZCBldmVudCAnICsgZXZlbnROYW1lICsgJyB0byBoYXZlIGJlZW4gdHJpZ2dlcmVkIG9uICcg
KyAkcHAoc2VsZWN0b3IpLAorICAgICAgICAgICAgICAnRXhwZWN0ZWQgZXZlbnQgJyArIGV2ZW50
TmFtZSArICcgbm90IHRvIGhhdmUgYmVlbiB0cmlnZ2VyZWQgb24gJyArICRwcChzZWxlY3RvcikK
KyAgICAgICAgICAgIF07CisgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIHJldHVy
biB3YXNUcmlnZ2VyZWQ7CisgICAgICB9LAorCisgICAgICB0b0hhdmVCZWVuVHJpZ2dlcmVkT25B
bmRXaXRoOiBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBzZWxlY3RvciA9IGFyZ3VtZW50c1sw
XTsKKyAgICAgICAgdmFyIGV4cGVjdGVkQXJnID0gYXJndW1lbnRzWzFdOworICAgICAgICB2YXIg
ZXhhY3RNYXRjaCA9ICFhcmd1bWVudHNbMl07CisgICAgICAgIHZhciB3YXNUcmlnZ2VyZWQgPSBq
YXNtaW5lLmZsaWdodC5ldmVudHMud2FzVHJpZ2dlcmVkKHNlbGVjdG9yLCB0aGlzLmFjdHVhbCk7
CisKKyAgICAgICAgdGhpcy5tZXNzYWdlID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgIHZhciAk
cHAgPSBmdW5jdGlvbiAob2JqKSB7CisgICAgICAgICAgICB2YXIgZGVzY3JpcHRpb247CisgICAg
ICAgICAgICB2YXIgYXR0cjsKKworICAgICAgICAgICAgaWYgKCEob2JqIGluc3RhbmNlb2YgalF1
ZXJ5KSkgeworICAgICAgICAgICAgICBvYmogPSAkKG9iaik7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGRlc2NyaXB0aW9uID0gWworICAgICAgICAgICAgICBvYmouZ2V0KDApLm5vZGVO
YW1lCisgICAgICAgICAgICBdOworCisgICAgICAgICAgICBhdHRyID0gb2JqLmdldCgwKS5hdHRy
aWJ1dGVzIHx8IFtdOworCisgICAgICAgICAgICBmb3IgKHZhciB4ID0gMDsgeCA8IGF0dHIubGVu
Z3RoOyB4KyspIHsKKyAgICAgICAgICAgICAgZGVzY3JpcHRpb24ucHVzaChhdHRyW3hdLm5hbWUg
KyAnPSInICsgYXR0clt4XS52YWx1ZSArICciJyk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIHJldHVybiAnPCcgKyBkZXNjcmlwdGlvbi5qb2luKCcgJykgKyAnPic7CisgICAgICAgICAg
fTsKKworICAgICAgICAgIGlmICh3YXNUcmlnZ2VyZWQpIHsKKyAgICAgICAgICAgIHZhciBhY3R1
YWxBcmcgPSBqYXNtaW5lLmZsaWdodC5ldmVudHMuZXZlbnRBcmdzKHNlbGVjdG9yLCB0aGlzLmFj
dHVhbCwgZXhwZWN0ZWRBcmcpWzFdOworICAgICAgICAgICAgcmV0dXJuIFsKKyAgICAgICAgICAg
ICAgJzxkaXYgY2xhc3M9InZhbHVlLW1pc21hdGNoIj5FeHBlY3RlZCBldmVudCAnICsgdGhpcy5h
Y3R1YWwubmFtZSArICcgdG8gaGF2ZSBiZWVuIHRyaWdnZXJlZCBvbicgKyBzZWxlY3RvciwKKyAg
ICAgICAgICAgICAgJzxkaXYgY2xhc3M9InZhbHVlLW1pc21hdGNoIj5FeHBlY3RlZCBldmVudCAn
ICsgdGhpcy5hY3R1YWwubmFtZSArICcgbm90IHRvIGhhdmUgYmVlbiB0cmlnZ2VyZWQgb24nICsg
c2VsZWN0b3IKKyAgICAgICAgICAgIF07CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IHJldHVybiBbCisgICAgICAgICAgICAgICdFeHBlY3RlZCBldmVudCAnICsgdGhpcy5hY3R1YWwu
bmFtZSArICcgdG8gaGF2ZSBiZWVuIHRyaWdnZXJlZCBvbiAnICsgJHBwKHNlbGVjdG9yKSwKKyAg
ICAgICAgICAgICAgJ0V4cGVjdGVkIGV2ZW50ICcgKyB0aGlzLmFjdHVhbC5uYW1lICsgJyBub3Qg
dG8gaGF2ZSBiZWVuIHRyaWdnZXJlZCBvbiAnICsgJHBwKHNlbGVjdG9yKQorICAgICAgICAgICAg
XTsKKyAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKCF3YXNUcmlnZ2VyZWQp
IHsKKyAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZXhh
Y3RNYXRjaCkgeworICAgICAgICAgIHJldHVybiBqYXNtaW5lLmZsaWdodC5ldmVudHMud2FzVHJp
Z2dlcmVkV2l0aChzZWxlY3RvciwgdGhpcy5hY3R1YWwsIGV4cGVjdGVkQXJnLCB0aGlzLmVudik7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgcmV0dXJuIGphc21pbmUuZmxpZ2h0LmV2ZW50
cy53YXNUcmlnZ2VyZWRXaXRoRGF0YShzZWxlY3RvciwgdGhpcy5hY3R1YWwsIGV4cGVjdGVkQXJn
LCB0aGlzLmVudik7CisgICAgICAgIH0KKyAgICAgIH0sCisKKyAgICAgIHRvSGF2ZUNzczogZnVu
Y3Rpb24gKHByb3AsIHZhbCkgeworICAgICAgICB2YXIgcmVzdWx0OworICAgICAgICBpZiAodmFs
IGluc3RhbmNlb2YgUmVnRXhwKSB7CisgICAgICAgICAgcmVzdWx0ID0gdmFsLnRlc3QodGhpcy5h
Y3R1YWwuY3NzKHByb3ApKTsKKyAgICAgICAgfSBlbHNlIGlmIChwcm9wLm1hdGNoKC9jb2xvci8p
KSB7CisgICAgICAgICAgLy9JRSByZXR1cm5zIGNvbG9ycyBhcyBoZXggc3RyaW5nczsgb3RoZXIg
YnJvd3NlcnMgcmV0dXJuIHJnYihyLCBnLCBiKSBzdHJpbmdzCisgICAgICAgICAgcmVzdWx0ID0g
amFzbWluZS5mbGlnaHQuY29tcGFyZUNvbG9ycyh0aGlzLmFjdHVhbC5jc3MocHJvcCksIHZhbCk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgcmVzdWx0ID0gdGhpcy5hY3R1YWwuY3NzKHBy
b3ApID09PSB2YWw7CisgICAgICAgICAgLy9zb21ldGltZXMgLmNzcygpIHJldHVybnMgc3RyaW5n
cyB3aGVuIGl0IHNob3VsZCByZXR1cm4gbnVtYmVycworICAgICAgICAgIGlmICghcmVzdWx0ICYm
IHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7CisgICAgICAgICAgICByZXN1bHQgPSBwYXJzZUZs
b2F0KHRoaXMuYWN0dWFsLmNzcyhwcm9wKSwgMTApID09PSB2YWw7CisgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgdGhpcy5hY3R1YWwgPSBqYXNtaW5lLmZsaWdodC5mb3JtYXRFbGVt
ZW50KHRoaXMuYWN0dWFsKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgIH0KKyAgICB9
KTsKKyAgfSk7CisKKyAgcm9vdC5zcHlPbkV2ZW50ID0gZnVuY3Rpb24gKHNlbGVjdG9yLCBldmVu
dE5hbWUpIHsKKyAgICBqYXNtaW5lLkpRdWVyeS5ldmVudHMuc3B5T24oc2VsZWN0b3IsIGV2ZW50
TmFtZSk7CisgICAgcmV0dXJuIGphc21pbmUuZmxpZ2h0LmV2ZW50cy5zcHlPbihzZWxlY3Rvciwg
ZXZlbnROYW1lKTsKKyAgfTsKKworfSh0aGlzKSk7CkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0Rv
WW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvamFzbWluZS1qcXVl
cnkvbGliL2phc21pbmUtanF1ZXJ5LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMv
RG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9qYXNtaW5lLWpx
dWVyeS9saWIvamFzbWluZS1qcXVlcnkuanMJKHJldmlzaW9uIDApCisrKyBQZXJmb3JtYW5jZVRl
c3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvamFzbWlu
ZS1qcXVlcnkvbGliL2phc21pbmUtanF1ZXJ5LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NjU5IEBACisvKiEKKyBKYXNtaW5lLWpRdWVyeTogYSBzZXQgb2YgalF1ZXJ5IGhlbHBlcnMgZm9y
IEphc21pbmUgdGVzdHMuCisKKyBWZXJzaW9uIDEuNS4yCisKKyBodHRwczovL2dpdGh1Yi5jb20v
dmVsZXNpbi9qYXNtaW5lLWpxdWVyeQorCisgQ29weXJpZ2h0IChjKSAyMDEwLTIwMTMgV29qY2ll
Y2ggWmF3aXN0b3dza2ksIFRyYXZpcyBKZWZmZXJ5CisKKyBQZXJtaXNzaW9uIGlzIGhlcmVieSBn
cmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKyBhIGNvcHkg
b2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUK
KyAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlv
biwgaW5jbHVkaW5nCisgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5
LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9v
ciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworIHBlcm1pdCBwZXJzb25zIHRv
IHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworIHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFu
ZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisgaW5jbHVkZWQgaW4gYWxsIGNvcGll
cyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKKyBUSEUgU09GVFdB
UkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyBF
WFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJB
TlRJRVMgT0YKKyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFORAorIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMg
T1IgQ09QWVJJR0hUIEhPTERFUlMgQkUKKyBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBP
UiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisgT0YgQ09OVFJBQ1QsIFRP
UlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCisg
V0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09G
VFdBUkUuCisqLwordmFyIHJlYWRGaXh0dXJlcyA9IGZ1bmN0aW9uKCkgeworICByZXR1cm4gamFz
bWluZS5nZXRGaXh0dXJlcygpLnByb3h5Q2FsbFRvXygncmVhZCcsIGFyZ3VtZW50cykKK30KKwor
dmFyIHByZWxvYWRGaXh0dXJlcyA9IGZ1bmN0aW9uKCkgeworICBqYXNtaW5lLmdldEZpeHR1cmVz
KCkucHJveHlDYWxsVG9fKCdwcmVsb2FkJywgYXJndW1lbnRzKQorfQorCit2YXIgbG9hZEZpeHR1
cmVzID0gZnVuY3Rpb24oKSB7CisgIGphc21pbmUuZ2V0Rml4dHVyZXMoKS5wcm94eUNhbGxUb18o
J2xvYWQnLCBhcmd1bWVudHMpCit9CisKK3ZhciBhcHBlbmRMb2FkRml4dHVyZXMgPSBmdW5jdGlv
bigpIHsKKyAgamFzbWluZS5nZXRGaXh0dXJlcygpLnByb3h5Q2FsbFRvXygnYXBwZW5kTG9hZCcs
IGFyZ3VtZW50cykKK30KKwordmFyIHNldEZpeHR1cmVzID0gZnVuY3Rpb24oaHRtbCkgeworICBq
YXNtaW5lLmdldEZpeHR1cmVzKCkucHJveHlDYWxsVG9fKCdzZXQnLCBhcmd1bWVudHMpCit9CisK
K3ZhciBhcHBlbmRTZXRGaXh0dXJlcyA9IGZ1bmN0aW9uKCkgeworICBqYXNtaW5lLmdldEZpeHR1
cmVzKCkucHJveHlDYWxsVG9fKCdhcHBlbmRTZXQnLCBhcmd1bWVudHMpCit9CisKK3ZhciBzYW5k
Ym94ID0gZnVuY3Rpb24oYXR0cmlidXRlcykgeworICByZXR1cm4gamFzbWluZS5nZXRGaXh0dXJl
cygpLnNhbmRib3goYXR0cmlidXRlcykKK30KKwordmFyIHNweU9uRXZlbnQgPSBmdW5jdGlvbihz
ZWxlY3RvciwgZXZlbnROYW1lKSB7CisgIHJldHVybiBqYXNtaW5lLkpRdWVyeS5ldmVudHMuc3B5
T24oc2VsZWN0b3IsIGV2ZW50TmFtZSkKK30KKwordmFyIHByZWxvYWRTdHlsZUZpeHR1cmVzID0g
ZnVuY3Rpb24oKSB7CisgIGphc21pbmUuZ2V0U3R5bGVGaXh0dXJlcygpLnByb3h5Q2FsbFRvXygn
cHJlbG9hZCcsIGFyZ3VtZW50cykKK30KKwordmFyIGxvYWRTdHlsZUZpeHR1cmVzID0gZnVuY3Rp
b24oKSB7CisgIGphc21pbmUuZ2V0U3R5bGVGaXh0dXJlcygpLnByb3h5Q2FsbFRvXygnbG9hZCcs
IGFyZ3VtZW50cykKK30KKwordmFyIGFwcGVuZExvYWRTdHlsZUZpeHR1cmVzID0gZnVuY3Rpb24o
KSB7CisgIGphc21pbmUuZ2V0U3R5bGVGaXh0dXJlcygpLnByb3h5Q2FsbFRvXygnYXBwZW5kTG9h
ZCcsIGFyZ3VtZW50cykKK30KKwordmFyIHNldFN0eWxlRml4dHVyZXMgPSBmdW5jdGlvbihodG1s
KSB7CisgIGphc21pbmUuZ2V0U3R5bGVGaXh0dXJlcygpLnByb3h5Q2FsbFRvXygnc2V0JywgYXJn
dW1lbnRzKQorfQorCit2YXIgYXBwZW5kU2V0U3R5bGVGaXh0dXJlcyA9IGZ1bmN0aW9uKGh0bWwp
IHsKKyAgamFzbWluZS5nZXRTdHlsZUZpeHR1cmVzKCkucHJveHlDYWxsVG9fKCdhcHBlbmRTZXQn
LCBhcmd1bWVudHMpCit9CisKK3ZhciBsb2FkSlNPTkZpeHR1cmVzID0gZnVuY3Rpb24oKSB7Cisg
IHJldHVybiBqYXNtaW5lLmdldEpTT05GaXh0dXJlcygpLnByb3h5Q2FsbFRvXygnbG9hZCcsIGFy
Z3VtZW50cykKK30KKwordmFyIGdldEpTT05GaXh0dXJlID0gZnVuY3Rpb24odXJsKSB7CisgIHJl
dHVybiBqYXNtaW5lLmdldEpTT05GaXh0dXJlcygpLnByb3h5Q2FsbFRvXygncmVhZCcsIGFyZ3Vt
ZW50cylbdXJsXQorfQorCitqYXNtaW5lLnNwaWVkRXZlbnRzS2V5ID0gZnVuY3Rpb24gKHNlbGVj
dG9yLCBldmVudE5hbWUpIHsKKyAgcmV0dXJuIFskKHNlbGVjdG9yKS5zZWxlY3RvciwgZXZlbnRO
YW1lXS50b1N0cmluZygpCit9CisKK2phc21pbmUuZ2V0Rml4dHVyZXMgPSBmdW5jdGlvbigpIHsK
KyAgcmV0dXJuIGphc21pbmUuY3VycmVudEZpeHR1cmVzXyA9IGphc21pbmUuY3VycmVudEZpeHR1
cmVzXyB8fCBuZXcgamFzbWluZS5GaXh0dXJlcygpCit9CisKK2phc21pbmUuZ2V0U3R5bGVGaXh0
dXJlcyA9IGZ1bmN0aW9uKCkgeworICByZXR1cm4gamFzbWluZS5jdXJyZW50U3R5bGVGaXh0dXJl
c18gPSBqYXNtaW5lLmN1cnJlbnRTdHlsZUZpeHR1cmVzXyB8fCBuZXcgamFzbWluZS5TdHlsZUZp
eHR1cmVzKCkKK30KKworamFzbWluZS5GaXh0dXJlcyA9IGZ1bmN0aW9uKCkgeworICB0aGlzLmNv
bnRhaW5lcklkID0gJ2phc21pbmUtZml4dHVyZXMnCisgIHRoaXMuZml4dHVyZXNDYWNoZV8gPSB7
fQorICB0aGlzLmZpeHR1cmVzUGF0aCA9ICdzcGVjL2phdmFzY3JpcHRzL2ZpeHR1cmVzJworfQor
CitqYXNtaW5lLkZpeHR1cmVzLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbihodG1sKSB7CisgIHRo
aXMuY2xlYW5VcCgpCisgIHRoaXMuY3JlYXRlQ29udGFpbmVyXyhodG1sKQorfQorCitqYXNtaW5l
LkZpeHR1cmVzLnByb3RvdHlwZS5hcHBlbmRTZXQ9IGZ1bmN0aW9uKGh0bWwpIHsKKyAgdGhpcy5h
ZGRUb0NvbnRhaW5lcl8oaHRtbCkKK30KKworamFzbWluZS5GaXh0dXJlcy5wcm90b3R5cGUucHJl
bG9hZCA9IGZ1bmN0aW9uKCkgeworICB0aGlzLnJlYWQuYXBwbHkodGhpcywgYXJndW1lbnRzKQor
fQorCitqYXNtaW5lLkZpeHR1cmVzLnByb3RvdHlwZS5sb2FkID0gZnVuY3Rpb24oKSB7CisgIHRo
aXMuY2xlYW5VcCgpCisgIHRoaXMuY3JlYXRlQ29udGFpbmVyXyh0aGlzLnJlYWQuYXBwbHkodGhp
cywgYXJndW1lbnRzKSkKK30KKworamFzbWluZS5GaXh0dXJlcy5wcm90b3R5cGUuYXBwZW5kTG9h
ZCA9IGZ1bmN0aW9uKCkgeworICB0aGlzLmFkZFRvQ29udGFpbmVyXyh0aGlzLnJlYWQuYXBwbHko
dGhpcywgYXJndW1lbnRzKSkKK30KKworamFzbWluZS5GaXh0dXJlcy5wcm90b3R5cGUucmVhZCA9
IGZ1bmN0aW9uKCkgeworICB2YXIgaHRtbENodW5rcyA9IFtdCisKKyAgdmFyIGZpeHR1cmVVcmxz
ID0gYXJndW1lbnRzCisgIGZvcih2YXIgdXJsQ291bnQgPSBmaXh0dXJlVXJscy5sZW5ndGgsIHVy
bEluZGV4ID0gMDsgdXJsSW5kZXggPCB1cmxDb3VudDsgdXJsSW5kZXgrKykgeworICAgIGh0bWxD
aHVua3MucHVzaCh0aGlzLmdldEZpeHR1cmVIdG1sXyhmaXh0dXJlVXJsc1t1cmxJbmRleF0pKQor
ICB9CisKKyAgcmV0dXJuIGh0bWxDaHVua3Muam9pbignJykKK30KKworamFzbWluZS5GaXh0dXJl
cy5wcm90b3R5cGUuY2xlYXJDYWNoZSA9IGZ1bmN0aW9uKCkgeworICB0aGlzLmZpeHR1cmVzQ2Fj
aGVfID0ge30KK30KKworamFzbWluZS5GaXh0dXJlcy5wcm90b3R5cGUuY2xlYW5VcCA9IGZ1bmN0
aW9uKCkgeworICAkKCcjJyArIHRoaXMuY29udGFpbmVySWQpLnJlbW92ZSgpCit9CisKK2phc21p
bmUuRml4dHVyZXMucHJvdG90eXBlLnNhbmRib3ggPSBmdW5jdGlvbihhdHRyaWJ1dGVzKSB7Cisg
IHZhciBhdHRyaWJ1dGVzVG9TZXQgPSBhdHRyaWJ1dGVzIHx8IHt9CisgIHJldHVybiAkKCc8ZGl2
IGlkPSJzYW5kYm94IiAvPicpLmF0dHIoYXR0cmlidXRlc1RvU2V0KQorfQorCitqYXNtaW5lLkZp
eHR1cmVzLnByb3RvdHlwZS5jcmVhdGVDb250YWluZXJfID0gZnVuY3Rpb24oaHRtbCkgeworICB2
YXIgY29udGFpbmVyCisgIGlmKGh0bWwgaW5zdGFuY2VvZiAkKSB7CisgICAgY29udGFpbmVyID0g
JCgnPGRpdiBpZD0iJyArIHRoaXMuY29udGFpbmVySWQgKyAnIiAvPicpCisgICAgY29udGFpbmVy
Lmh0bWwoaHRtbCkKKyAgfSBlbHNlIHsKKyAgICBjb250YWluZXIgPSAnPGRpdiBpZD0iJyArIHRo
aXMuY29udGFpbmVySWQgKyAnIj4nICsgaHRtbCArICc8L2Rpdj4nCisgIH0KKyAgJChkb2N1bWVu
dC5ib2R5KS5hcHBlbmQoY29udGFpbmVyKQorfQorCitqYXNtaW5lLkZpeHR1cmVzLnByb3RvdHlw
ZS5hZGRUb0NvbnRhaW5lcl8gPSBmdW5jdGlvbihodG1sKXsKKyAgdmFyIGNvbnRhaW5lciA9ICQo
ZG9jdW1lbnQuYm9keSkuZmluZCgnIycrdGhpcy5jb250YWluZXJJZCkuYXBwZW5kKGh0bWwpCisg
IGlmKCFjb250YWluZXIubGVuZ3RoKXsKKyAgICB0aGlzLmNyZWF0ZUNvbnRhaW5lcl8oaHRtbCkK
KyAgfQorfQorCitqYXNtaW5lLkZpeHR1cmVzLnByb3RvdHlwZS5nZXRGaXh0dXJlSHRtbF8gPSBm
dW5jdGlvbih1cmwpIHsKKyAgaWYgKHR5cGVvZiB0aGlzLmZpeHR1cmVzQ2FjaGVfW3VybF0gPT09
ICd1bmRlZmluZWQnKSB7CisgICAgdGhpcy5sb2FkRml4dHVyZUludG9DYWNoZV8odXJsKQorICB9
CisgIHJldHVybiB0aGlzLmZpeHR1cmVzQ2FjaGVfW3VybF0KK30KKworamFzbWluZS5GaXh0dXJl
cy5wcm90b3R5cGUubG9hZEZpeHR1cmVJbnRvQ2FjaGVfID0gZnVuY3Rpb24ocmVsYXRpdmVVcmwp
IHsKKyAgdmFyIHVybCA9IHRoaXMubWFrZUZpeHR1cmVVcmxfKHJlbGF0aXZlVXJsKQorICB2YXIg
cmVxdWVzdCA9ICQuYWpheCh7CisgICAgdHlwZTogIkdFVCIsCisgICAgdXJsOiB1cmwgKyAiPyIg
KyBuZXcgRGF0ZSgpLmdldFRpbWUoKSwKKyAgICBhc3luYzogZmFsc2UKKyAgfSkKKyAgdGhpcy5m
aXh0dXJlc0NhY2hlX1tyZWxhdGl2ZVVybF0gPSByZXF1ZXN0LnJlc3BvbnNlVGV4dAorfQorCitq
YXNtaW5lLkZpeHR1cmVzLnByb3RvdHlwZS5tYWtlRml4dHVyZVVybF8gPSBmdW5jdGlvbihyZWxh
dGl2ZVVybCl7CisgIHJldHVybiB0aGlzLmZpeHR1cmVzUGF0aC5tYXRjaCgnLyQnKSA/IHRoaXMu
Zml4dHVyZXNQYXRoICsgcmVsYXRpdmVVcmwgOiB0aGlzLmZpeHR1cmVzUGF0aCArICcvJyArIHJl
bGF0aXZlVXJsCit9CisKK2phc21pbmUuRml4dHVyZXMucHJvdG90eXBlLnByb3h5Q2FsbFRvXyA9
IGZ1bmN0aW9uKG1ldGhvZE5hbWUsIHBhc3NlZEFyZ3VtZW50cykgeworICByZXR1cm4gdGhpc1tt
ZXRob2ROYW1lXS5hcHBseSh0aGlzLCBwYXNzZWRBcmd1bWVudHMpCit9CisKKworamFzbWluZS5T
dHlsZUZpeHR1cmVzID0gZnVuY3Rpb24oKSB7CisgIHRoaXMuZml4dHVyZXNDYWNoZV8gPSB7fQor
ICB0aGlzLmZpeHR1cmVzTm9kZXNfID0gW10KKyAgdGhpcy5maXh0dXJlc1BhdGggPSAnc3BlYy9q
YXZhc2NyaXB0cy9maXh0dXJlcycKK30KKworamFzbWluZS5TdHlsZUZpeHR1cmVzLnByb3RvdHlw
ZS5zZXQgPSBmdW5jdGlvbihjc3MpIHsKKyAgdGhpcy5jbGVhblVwKCkKKyAgdGhpcy5jcmVhdGVT
dHlsZV8oY3NzKQorfQorCitqYXNtaW5lLlN0eWxlRml4dHVyZXMucHJvdG90eXBlLmFwcGVuZFNl
dCA9IGZ1bmN0aW9uKGNzcykgeworICB0aGlzLmNyZWF0ZVN0eWxlXyhjc3MpCit9CisKK2phc21p
bmUuU3R5bGVGaXh0dXJlcy5wcm90b3R5cGUucHJlbG9hZCA9IGZ1bmN0aW9uKCkgeworICB0aGlz
LnJlYWRfLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykKK30KKworamFzbWluZS5TdHlsZUZpeHR1cmVz
LnByb3RvdHlwZS5sb2FkID0gZnVuY3Rpb24oKSB7CisgIHRoaXMuY2xlYW5VcCgpCisgIHRoaXMu
Y3JlYXRlU3R5bGVfKHRoaXMucmVhZF8uYXBwbHkodGhpcywgYXJndW1lbnRzKSkKK30KKworamFz
bWluZS5TdHlsZUZpeHR1cmVzLnByb3RvdHlwZS5hcHBlbmRMb2FkID0gZnVuY3Rpb24oKSB7Cisg
IHRoaXMuY3JlYXRlU3R5bGVfKHRoaXMucmVhZF8uYXBwbHkodGhpcywgYXJndW1lbnRzKSkKK30K
KworamFzbWluZS5TdHlsZUZpeHR1cmVzLnByb3RvdHlwZS5jbGVhblVwID0gZnVuY3Rpb24oKSB7
CisgIHdoaWxlKHRoaXMuZml4dHVyZXNOb2Rlc18ubGVuZ3RoKSB7CisgICAgdGhpcy5maXh0dXJl
c05vZGVzXy5wb3AoKS5yZW1vdmUoKQorICB9Cit9CisKK2phc21pbmUuU3R5bGVGaXh0dXJlcy5w
cm90b3R5cGUuY3JlYXRlU3R5bGVfID0gZnVuY3Rpb24oaHRtbCkgeworICB2YXIgc3R5bGVUZXh0
ID0gJCgnPGRpdj48L2Rpdj4nKS5odG1sKGh0bWwpLnRleHQoKSwKKyAgICBzdHlsZSA9ICQoJzxz
dHlsZT4nICsgc3R5bGVUZXh0ICsgJzwvc3R5bGU+JykKKworICB0aGlzLmZpeHR1cmVzTm9kZXNf
LnB1c2goc3R5bGUpCisKKyAgJCgnaGVhZCcpLmFwcGVuZChzdHlsZSkKK30KKworamFzbWluZS5T
dHlsZUZpeHR1cmVzLnByb3RvdHlwZS5jbGVhckNhY2hlID0gamFzbWluZS5GaXh0dXJlcy5wcm90
b3R5cGUuY2xlYXJDYWNoZQorCitqYXNtaW5lLlN0eWxlRml4dHVyZXMucHJvdG90eXBlLnJlYWRf
ID0gamFzbWluZS5GaXh0dXJlcy5wcm90b3R5cGUucmVhZAorCitqYXNtaW5lLlN0eWxlRml4dHVy
ZXMucHJvdG90eXBlLmdldEZpeHR1cmVIdG1sXyA9IGphc21pbmUuRml4dHVyZXMucHJvdG90eXBl
LmdldEZpeHR1cmVIdG1sXworCitqYXNtaW5lLlN0eWxlRml4dHVyZXMucHJvdG90eXBlLmxvYWRG
aXh0dXJlSW50b0NhY2hlXyA9IGphc21pbmUuRml4dHVyZXMucHJvdG90eXBlLmxvYWRGaXh0dXJl
SW50b0NhY2hlXworCitqYXNtaW5lLlN0eWxlRml4dHVyZXMucHJvdG90eXBlLm1ha2VGaXh0dXJl
VXJsXyA9IGphc21pbmUuRml4dHVyZXMucHJvdG90eXBlLm1ha2VGaXh0dXJlVXJsXworCitqYXNt
aW5lLlN0eWxlRml4dHVyZXMucHJvdG90eXBlLnByb3h5Q2FsbFRvXyA9IGphc21pbmUuRml4dHVy
ZXMucHJvdG90eXBlLnByb3h5Q2FsbFRvXworCitqYXNtaW5lLmdldEpTT05GaXh0dXJlcyA9IGZ1
bmN0aW9uKCkgeworICByZXR1cm4gamFzbWluZS5jdXJyZW50SlNPTkZpeHR1cmVzXyA9IGphc21p
bmUuY3VycmVudEpTT05GaXh0dXJlc18gfHwgbmV3IGphc21pbmUuSlNPTkZpeHR1cmVzKCkKK30K
KworamFzbWluZS5KU09ORml4dHVyZXMgPSBmdW5jdGlvbigpIHsKKyAgdGhpcy5maXh0dXJlc0Nh
Y2hlXyA9IHt9CisgIHRoaXMuZml4dHVyZXNQYXRoID0gJ3NwZWMvamF2YXNjcmlwdHMvZml4dHVy
ZXMvanNvbicKK30KKworamFzbWluZS5KU09ORml4dHVyZXMucHJvdG90eXBlLmxvYWQgPSBmdW5j
dGlvbigpIHsKKyAgdGhpcy5yZWFkLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykKKyAgcmV0dXJuIHRo
aXMuZml4dHVyZXNDYWNoZV8KK30KKworamFzbWluZS5KU09ORml4dHVyZXMucHJvdG90eXBlLnJl
YWQgPSBmdW5jdGlvbigpIHsKKyAgdmFyIGZpeHR1cmVVcmxzID0gYXJndW1lbnRzCisgIGZvcih2
YXIgdXJsQ291bnQgPSBmaXh0dXJlVXJscy5sZW5ndGgsIHVybEluZGV4ID0gMDsgdXJsSW5kZXgg
PCB1cmxDb3VudDsgdXJsSW5kZXgrKykgeworICAgIHRoaXMuZ2V0Rml4dHVyZURhdGFfKGZpeHR1
cmVVcmxzW3VybEluZGV4XSkKKyAgfQorICByZXR1cm4gdGhpcy5maXh0dXJlc0NhY2hlXworfQor
CitqYXNtaW5lLkpTT05GaXh0dXJlcy5wcm90b3R5cGUuY2xlYXJDYWNoZSA9IGZ1bmN0aW9uKCkg
eworICB0aGlzLmZpeHR1cmVzQ2FjaGVfID0ge30KK30KKworamFzbWluZS5KU09ORml4dHVyZXMu
cHJvdG90eXBlLmdldEZpeHR1cmVEYXRhXyA9IGZ1bmN0aW9uKHVybCkgeworICB0aGlzLmxvYWRG
aXh0dXJlSW50b0NhY2hlXyh1cmwpCisgIHJldHVybiB0aGlzLmZpeHR1cmVzQ2FjaGVfW3VybF0K
K30KKworamFzbWluZS5KU09ORml4dHVyZXMucHJvdG90eXBlLmxvYWRGaXh0dXJlSW50b0NhY2hl
XyA9IGZ1bmN0aW9uKHJlbGF0aXZlVXJsKSB7CisgIHZhciBzZWxmID0gdGhpcworICB2YXIgdXJs
ID0gdGhpcy5maXh0dXJlc1BhdGgubWF0Y2goJy8kJykgPyB0aGlzLmZpeHR1cmVzUGF0aCArIHJl
bGF0aXZlVXJsIDogdGhpcy5maXh0dXJlc1BhdGggKyAnLycgKyByZWxhdGl2ZVVybAorICAkLmFq
YXgoeworICAgIGFzeW5jOiBmYWxzZSwgLy8gbXVzdCBiZSBzeW5jaHJvbm91cyB0byBndWFyYW50
ZWUgdGhhdCBubyB0ZXN0cyBhcmUgcnVuIGJlZm9yZSBmaXh0dXJlIGlzIGxvYWRlZAorICAgIGNh
Y2hlOiBmYWxzZSwKKyAgICBkYXRhVHlwZTogJ2pzb24nLAorICAgIHVybDogdXJsLAorICAgIHN1
Y2Nlc3M6IGZ1bmN0aW9uKGRhdGEpIHsKKyAgICAgIHNlbGYuZml4dHVyZXNDYWNoZV9bcmVsYXRp
dmVVcmxdID0gZGF0YQorICAgIH0sCisgICAgZXJyb3I6IGZ1bmN0aW9uKGpxWEhSLCBzdGF0dXMs
IGVycm9yVGhyb3duKSB7CisgICAgICAgIHRocm93IEVycm9yKCdKU09ORml4dHVyZSBjb3VsZCBu
b3QgYmUgbG9hZGVkOiAnICsgdXJsICsgJyAoc3RhdHVzOiAnICsgc3RhdHVzICsgJywgbWVzc2Fn
ZTogJyArIGVycm9yVGhyb3duLm1lc3NhZ2UgKyAnKScpCisgICAgfQorICB9KQorfQorCitqYXNt
aW5lLkpTT05GaXh0dXJlcy5wcm90b3R5cGUucHJveHlDYWxsVG9fID0gZnVuY3Rpb24obWV0aG9k
TmFtZSwgcGFzc2VkQXJndW1lbnRzKSB7CisgIHJldHVybiB0aGlzW21ldGhvZE5hbWVdLmFwcGx5
KHRoaXMsIHBhc3NlZEFyZ3VtZW50cykKK30KKworamFzbWluZS5KUXVlcnkgPSBmdW5jdGlvbigp
IHt9CisKK2phc21pbmUuSlF1ZXJ5LmJyb3dzZXJUYWdDYXNlSW5kZXBlbmRlbnRIdG1sID0gZnVu
Y3Rpb24oaHRtbCkgeworICByZXR1cm4gJCgnPGRpdi8+JykuYXBwZW5kKGh0bWwpLmh0bWwoKQor
fQorCitqYXNtaW5lLkpRdWVyeS5lbGVtZW50VG9TdHJpbmcgPSBmdW5jdGlvbihlbGVtZW50KSB7
CisgIHZhciBkb21FbCA9ICQoZWxlbWVudCkuZ2V0KDApCisgIGlmIChkb21FbCA9PSB1bmRlZmlu
ZWQgfHwgZG9tRWwuY2xvbmVOb2RlKQorICAgIHJldHVybiAkKCc8ZGl2IC8+JykuYXBwZW5kKCQo
ZWxlbWVudCkuY2xvbmUoKSkuaHRtbCgpCisgIGVsc2UKKyAgICByZXR1cm4gZWxlbWVudC50b1N0
cmluZygpCit9CisKK2phc21pbmUuSlF1ZXJ5Lm1hdGNoZXJzQ2xhc3MgPSB7fQorCishZnVuY3Rp
b24obmFtZXNwYWNlKSB7CisgIHZhciBkYXRhID0geworICAgIHNwaWVkRXZlbnRzOiB7fSwKKyAg
ICBoYW5kbGVyczogICAgW10KKyAgfQorCisgIG5hbWVzcGFjZS5ldmVudHMgPSB7CisgICAgc3B5
T246IGZ1bmN0aW9uKHNlbGVjdG9yLCBldmVudE5hbWUpIHsKKyAgICAgIHZhciBoYW5kbGVyID0g
ZnVuY3Rpb24oZSkgeworICAgICAgICBkYXRhLnNwaWVkRXZlbnRzW2phc21pbmUuc3BpZWRFdmVu
dHNLZXkoc2VsZWN0b3IsIGV2ZW50TmFtZSldID0gamFzbWluZS51dGlsLmFyZ3NUb0FycmF5KGFy
Z3VtZW50cykKKyAgICAgIH0KKyAgICAgICQoc2VsZWN0b3IpLm9uKGV2ZW50TmFtZSwgaGFuZGxl
cikKKyAgICAgIGRhdGEuaGFuZGxlcnMucHVzaChoYW5kbGVyKQorICAgICAgcmV0dXJuIHsKKyAg
ICAgICAgc2VsZWN0b3I6IHNlbGVjdG9yLAorICAgICAgICBldmVudE5hbWU6IGV2ZW50TmFtZSwK
KyAgICAgICAgaGFuZGxlcjogaGFuZGxlciwKKyAgICAgICAgcmVzZXQ6IGZ1bmN0aW9uKCl7Cisg
ICAgICAgICAgZGVsZXRlIGRhdGEuc3BpZWRFdmVudHNbamFzbWluZS5zcGllZEV2ZW50c0tleShz
ZWxlY3RvciwgZXZlbnROYW1lKV0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0sCisKKyAgICBh
cmdzOiBmdW5jdGlvbihzZWxlY3RvciwgZXZlbnROYW1lKSB7CisgICAgICB2YXIgYWN0dWFsQXJn
cyA9IGRhdGEuc3BpZWRFdmVudHNbamFzbWluZS5zcGllZEV2ZW50c0tleShzZWxlY3RvciwgZXZl
bnROYW1lKV07CisKKyAgICAgIGlmICghYWN0dWFsQXJncykgeworICAgICAgICB0aHJvdyAiVGhl
cmUgaXMgbm8gc3B5IGZvciAiICsgZXZlbnROYW1lICsgIiBvbiAiICsgc2VsZWN0b3IudG9TdHJp
bmcoKSArICIuIE1ha2Ugc3VyZSB0byBjcmVhdGUgYSBzcHkgdXNpbmcgc3B5T25FdmVudC4iOwor
ICAgICAgfQorCisgICAgICByZXR1cm4gYWN0dWFsQXJnczsKKyAgICB9LAorCisgICAgd2FzVHJp
Z2dlcmVkOiBmdW5jdGlvbihzZWxlY3RvciwgZXZlbnROYW1lKSB7CisgICAgICByZXR1cm4gISEo
ZGF0YS5zcGllZEV2ZW50c1tqYXNtaW5lLnNwaWVkRXZlbnRzS2V5KHNlbGVjdG9yLCBldmVudE5h
bWUpXSkKKyAgICB9LAorCisgICAgd2FzVHJpZ2dlcmVkV2l0aDogZnVuY3Rpb24oc2VsZWN0b3Is
IGV2ZW50TmFtZSwgZXhwZWN0ZWRBcmdzLCBlbnYpIHsKKyAgICAgIHZhciBhY3R1YWxBcmdzID0g
amFzbWluZS5KUXVlcnkuZXZlbnRzLmFyZ3Moc2VsZWN0b3IsIGV2ZW50TmFtZSkuc2xpY2UoMSk7
CisgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGV4cGVjdGVkQXJncykg
IT09ICdbb2JqZWN0IEFycmF5XScpIHsKKyAgICAgICAgYWN0dWFsQXJncyA9IGFjdHVhbEFyZ3Nb
MF07CisgICAgICB9CisgICAgICByZXR1cm4gZW52LmVxdWFsc18oZXhwZWN0ZWRBcmdzLCBhY3R1
YWxBcmdzKTsKKyAgICB9LAorCisgICAgd2FzUHJldmVudGVkOiBmdW5jdGlvbihzZWxlY3Rvciwg
ZXZlbnROYW1lKSB7CisgICAgICB2YXIgYXJncyA9IGRhdGEuc3BpZWRFdmVudHNbamFzbWluZS5z
cGllZEV2ZW50c0tleShzZWxlY3RvciwgZXZlbnROYW1lKV0sCisgICAgICAgICAgZSA9IGFyZ3Mg
PyBhcmdzWzBdIDogdW5kZWZpbmVkOworICAgICAgcmV0dXJuIGUgJiYgZS5pc0RlZmF1bHRQcmV2
ZW50ZWQoKQorICAgIH0sCisKKyAgICB3YXNTdG9wcGVkOiBmdW5jdGlvbihzZWxlY3RvciwgZXZl
bnROYW1lKSB7CisgICAgICB2YXIgYXJncyA9IGRhdGEuc3BpZWRFdmVudHNbamFzbWluZS5zcGll
ZEV2ZW50c0tleShzZWxlY3RvciwgZXZlbnROYW1lKV0sCisgICAgICAgICAgZSA9IGFyZ3MgPyBh
cmdzWzBdIDogdW5kZWZpbmVkOworICAgICAgcmV0dXJuIGUgJiYgZS5pc1Byb3BhZ2F0aW9uU3Rv
cHBlZCgpCisgICAgfSwKKworICAgIGNsZWFuVXA6IGZ1bmN0aW9uKCkgeworICAgICAgZGF0YS5z
cGllZEV2ZW50cyA9IHt9CisgICAgICBkYXRhLmhhbmRsZXJzICAgID0gW10KKyAgICB9CisgIH0K
K30oamFzbWluZS5KUXVlcnkpCisKKyFmdW5jdGlvbigpeworICB2YXIgalF1ZXJ5TWF0Y2hlcnMg
PSB7CisgICAgdG9IYXZlQ2xhc3M6IGZ1bmN0aW9uKGNsYXNzTmFtZSkgeworICAgICAgcmV0dXJu
IHRoaXMuYWN0dWFsLmhhc0NsYXNzKGNsYXNzTmFtZSkKKyAgICB9LAorCisgICAgdG9IYXZlQ3Nz
OiBmdW5jdGlvbihjc3MpeworICAgICAgZm9yICh2YXIgcHJvcCBpbiBjc3MpeworICAgICAgICBp
ZiAodGhpcy5hY3R1YWwuY3NzKHByb3ApICE9PSBjc3NbcHJvcF0pIHJldHVybiBmYWxzZQorICAg
ICAgfQorICAgICAgcmV0dXJuIHRydWUKKyAgICB9LAorCisgICAgdG9CZVZpc2libGU6IGZ1bmN0
aW9uKCkgeworICAgICAgcmV0dXJuIHRoaXMuYWN0dWFsLmlzKCc6dmlzaWJsZScpCisgICAgfSwK
KworICAgIHRvQmVIaWRkZW46IGZ1bmN0aW9uKCkgeworICAgICAgcmV0dXJuIHRoaXMuYWN0dWFs
LmlzKCc6aGlkZGVuJykKKyAgICB9LAorCisgICAgdG9CZVNlbGVjdGVkOiBmdW5jdGlvbigpIHsK
KyAgICAgIHJldHVybiB0aGlzLmFjdHVhbC5pcygnOnNlbGVjdGVkJykKKyAgICB9LAorCisgICAg
dG9CZUNoZWNrZWQ6IGZ1bmN0aW9uKCkgeworICAgICAgcmV0dXJuIHRoaXMuYWN0dWFsLmlzKCc6
Y2hlY2tlZCcpCisgICAgfSwKKworICAgIHRvQmVFbXB0eTogZnVuY3Rpb24oKSB7CisgICAgICBy
ZXR1cm4gdGhpcy5hY3R1YWwuaXMoJzplbXB0eScpCisgICAgfSwKKworICAgIHRvRXhpc3Q6IGZ1
bmN0aW9uKCkgeworICAgICAgcmV0dXJuICQoZG9jdW1lbnQpLmZpbmQodGhpcy5hY3R1YWwpLmxl
bmd0aAorICAgIH0sCisKKyAgICB0b0hhdmVMZW5ndGg6IGZ1bmN0aW9uKGxlbmd0aCkgeworICAg
ICAgcmV0dXJuIHRoaXMuYWN0dWFsLmxlbmd0aCA9PT0gbGVuZ3RoCisgICAgfSwKKworICAgIHRv
SGF2ZUF0dHI6IGZ1bmN0aW9uKGF0dHJpYnV0ZU5hbWUsIGV4cGVjdGVkQXR0cmlidXRlVmFsdWUp
IHsKKyAgICAgIHJldHVybiBoYXNQcm9wZXJ0eSh0aGlzLmFjdHVhbC5hdHRyKGF0dHJpYnV0ZU5h
bWUpLCBleHBlY3RlZEF0dHJpYnV0ZVZhbHVlKQorICAgIH0sCisKKyAgICB0b0hhdmVQcm9wOiBm
dW5jdGlvbihwcm9wZXJ0eU5hbWUsIGV4cGVjdGVkUHJvcGVydHlWYWx1ZSkgeworICAgICAgcmV0
dXJuIGhhc1Byb3BlcnR5KHRoaXMuYWN0dWFsLnByb3AocHJvcGVydHlOYW1lKSwgZXhwZWN0ZWRQ
cm9wZXJ0eVZhbHVlKQorICAgIH0sCisKKyAgICB0b0hhdmVJZDogZnVuY3Rpb24oaWQpIHsKKyAg
ICAgIHJldHVybiB0aGlzLmFjdHVhbC5hdHRyKCdpZCcpID09IGlkCisgICAgfSwKKworICAgIHRv
SGF2ZUh0bWw6IGZ1bmN0aW9uKGh0bWwpIHsKKyAgICAgIHJldHVybiB0aGlzLmFjdHVhbC5odG1s
KCkgPT0gamFzbWluZS5KUXVlcnkuYnJvd3NlclRhZ0Nhc2VJbmRlcGVuZGVudEh0bWwoaHRtbCkK
KyAgICB9LAorCisgICAgdG9Db250YWluSHRtbDogZnVuY3Rpb24oaHRtbCl7CisgICAgICB2YXIg
YWN0dWFsSHRtbCA9IHRoaXMuYWN0dWFsLmh0bWwoKQorICAgICAgdmFyIGV4cGVjdGVkSHRtbCA9
IGphc21pbmUuSlF1ZXJ5LmJyb3dzZXJUYWdDYXNlSW5kZXBlbmRlbnRIdG1sKGh0bWwpCisgICAg
ICByZXR1cm4gKGFjdHVhbEh0bWwuaW5kZXhPZihleHBlY3RlZEh0bWwpID49IDApCisgICAgfSwK
KworICAgIHRvSGF2ZVRleHQ6IGZ1bmN0aW9uKHRleHQpIHsKKyAgICAgIHZhciB0cmltbWVkVGV4
dCA9ICQudHJpbSh0aGlzLmFjdHVhbC50ZXh0KCkpCisgICAgICBpZiAodGV4dCAmJiAkLmlzRnVu
Y3Rpb24odGV4dC50ZXN0KSkgeworICAgICAgICByZXR1cm4gdGV4dC50ZXN0KHRyaW1tZWRUZXh0
KQorICAgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIHRyaW1tZWRUZXh0ID09IHRleHQKKyAg
ICAgIH0KKyAgICB9LAorCisgICAgdG9Db250YWluVGV4dDogZnVuY3Rpb24odGV4dCkgeworICAg
ICAgdmFyIHRyaW1tZWRUZXh0ID0gJC50cmltKHRoaXMuYWN0dWFsLnRleHQoKSkKKyAgICAgIGlm
ICh0ZXh0ICYmICQuaXNGdW5jdGlvbih0ZXh0LnRlc3QpKSB7CisgICAgICAgIHJldHVybiB0ZXh0
LnRlc3QodHJpbW1lZFRleHQpCisgICAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gdHJpbW1l
ZFRleHQuaW5kZXhPZih0ZXh0KSAhPSAtMTsKKyAgICAgIH0KKyAgICB9LAorCisgICAgdG9IYXZl
VmFsdWU6IGZ1bmN0aW9uKHZhbHVlKSB7CisgICAgICByZXR1cm4gdGhpcy5hY3R1YWwudmFsKCkg
PT09IHZhbHVlCisgICAgfSwKKworICAgIHRvSGF2ZURhdGE6IGZ1bmN0aW9uKGtleSwgZXhwZWN0
ZWRWYWx1ZSkgeworICAgICAgcmV0dXJuIGhhc1Byb3BlcnR5KHRoaXMuYWN0dWFsLmRhdGEoa2V5
KSwgZXhwZWN0ZWRWYWx1ZSkKKyAgICB9LAorCisgICAgdG9CZTogZnVuY3Rpb24oc2VsZWN0b3Ip
IHsKKyAgICAgIHJldHVybiB0aGlzLmFjdHVhbC5pcyhzZWxlY3RvcikKKyAgICB9LAorCisgICAg
dG9Db250YWluOiBmdW5jdGlvbihzZWxlY3RvcikgeworICAgICAgcmV0dXJuIHRoaXMuYWN0dWFs
LmZpbmQoc2VsZWN0b3IpLmxlbmd0aAorICAgIH0sCisKKyAgICB0b0JlRGlzYWJsZWQ6IGZ1bmN0
aW9uKHNlbGVjdG9yKXsKKyAgICAgIHJldHVybiB0aGlzLmFjdHVhbC5pcygnOmRpc2FibGVkJykK
KyAgICB9LAorCisgICAgdG9CZUZvY3VzZWQ6IGZ1bmN0aW9uKHNlbGVjdG9yKSB7CisgICAgICBy
ZXR1cm4gdGhpcy5hY3R1YWxbMF0gPT09IHRoaXMuYWN0dWFsWzBdLm93bmVyRG9jdW1lbnQuYWN0
aXZlRWxlbWVudAorICAgIH0sCisKKyAgICB0b0hhbmRsZTogZnVuY3Rpb24oZXZlbnQpIHsKKwor
ICAgICAgdmFyIGV2ZW50cyA9ICQuX2RhdGEodGhpcy5hY3R1YWwuZ2V0KDApLCAiZXZlbnRzIikK
KworICAgICAgaWYoIWV2ZW50cyB8fCAhZXZlbnQgfHwgdHlwZW9mIGV2ZW50ICE9PSAic3RyaW5n
IikgeworICAgICAgICByZXR1cm4gZmFsc2UKKyAgICAgIH0KKworICAgICAgdmFyIG5hbWVzcGFj
ZXMgPSBldmVudC5zcGxpdCgiLiIpCisgICAgICB2YXIgZXZlbnRUeXBlID0gbmFtZXNwYWNlcy5z
aGlmdCgpCisgICAgICB2YXIgc29ydGVkTmFtZXNwYWNlcyA9IG5hbWVzcGFjZXMuc2xpY2UoMCku
c29ydCgpCisgICAgICB2YXIgbmFtZXNwYWNlUmVnRXhwID0gbmV3IFJlZ0V4cCgiKF58XFwuKSIg
KyBzb3J0ZWROYW1lc3BhY2VzLmpvaW4oIlxcLig/Oi4qXFwuKT8iKSArICIoXFwufCQpIikKKwor
ICAgICAgaWYoZXZlbnRzW2V2ZW50VHlwZV0gJiYgbmFtZXNwYWNlcy5sZW5ndGgpIHsKKyAgICAg
ICAgZm9yKHZhciBpID0gMDsgaSA8IGV2ZW50c1tldmVudFR5cGVdLmxlbmd0aDsgaSsrKSB7Cisg
ICAgICAgICAgdmFyIG5hbWVzcGFjZSA9IGV2ZW50c1tldmVudFR5cGVdW2ldLm5hbWVzcGFjZQor
ICAgICAgICAgIGlmKG5hbWVzcGFjZVJlZ0V4cC50ZXN0KG5hbWVzcGFjZSkpIHsKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlCisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9IGVsc2Ugewor
ICAgICAgICByZXR1cm4gZXZlbnRzW2V2ZW50VHlwZV0gJiYgZXZlbnRzW2V2ZW50VHlwZV0ubGVu
Z3RoID4gMAorICAgICAgfQorICAgIH0sCisKKyAgICAvLyB0ZXN0cyB0aGUgZXhpc3RlbmNlIG9m
IGEgc3BlY2lmaWMgZXZlbnQgYmluZGluZyArIGhhbmRsZXIKKyAgICB0b0hhbmRsZVdpdGg6IGZ1
bmN0aW9uKGV2ZW50TmFtZSwgZXZlbnRIYW5kbGVyKSB7CisgICAgICB2YXIgc3RhY2sgPSAkLl9k
YXRhKHRoaXMuYWN0dWFsLmdldCgwKSwgImV2ZW50cyIpW2V2ZW50TmFtZV0KKyAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgc3RhY2subGVuZ3RoOyBpKyspIHsKKyAgICAgICAgaWYgKHN0YWNrW2ld
LmhhbmRsZXIgPT0gZXZlbnRIYW5kbGVyKSByZXR1cm4gdHJ1ZQorICAgICAgfQorICAgICAgcmV0
dXJuIGZhbHNlCisgICAgfQorICB9CisKKyAgdmFyIGhhc1Byb3BlcnR5ID0gZnVuY3Rpb24oYWN0
dWFsVmFsdWUsIGV4cGVjdGVkVmFsdWUpIHsKKyAgICBpZiAoZXhwZWN0ZWRWYWx1ZSA9PT0gdW5k
ZWZpbmVkKSByZXR1cm4gYWN0dWFsVmFsdWUgIT09IHVuZGVmaW5lZAorICAgIHJldHVybiBhY3R1
YWxWYWx1ZSA9PSBleHBlY3RlZFZhbHVlCisgIH0KKworICB2YXIgYmluZE1hdGNoZXIgPSBmdW5j
dGlvbihtZXRob2ROYW1lKSB7CisgICAgdmFyIGJ1aWx0SW5NYXRjaGVyID0gamFzbWluZS5NYXRj
aGVycy5wcm90b3R5cGVbbWV0aG9kTmFtZV0KKworICAgIGphc21pbmUuSlF1ZXJ5Lm1hdGNoZXJz
Q2xhc3NbbWV0aG9kTmFtZV0gPSBmdW5jdGlvbigpIHsKKyAgICAgIGlmICh0aGlzLmFjdHVhbAor
ICAgICAgICAmJiAodGhpcy5hY3R1YWwgaW5zdGFuY2VvZiAkCisgICAgICAgICAgfHwgamFzbWlu
ZS5pc0RvbU5vZGUodGhpcy5hY3R1YWwpKSkgeworICAgICAgICAgICAgdGhpcy5hY3R1YWwgPSAk
KHRoaXMuYWN0dWFsKQorICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGpRdWVyeU1hdGNoZXJzW21l
dGhvZE5hbWVdLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykKKyAgICAgICAgICAgIHZhciBlbGVtZW50
CisgICAgICAgICAgICBpZiAodGhpcy5hY3R1YWwuZ2V0ICYmIChlbGVtZW50ID0gdGhpcy5hY3R1
YWwuZ2V0KClbMF0pICYmICEkLmlzV2luZG93KGVsZW1lbnQpICYmIGVsZW1lbnQudGFnTmFtZSAh
PT0gIkhUTUwiKQorICAgICAgICAgICAgICB0aGlzLmFjdHVhbCA9IGphc21pbmUuSlF1ZXJ5LmVs
ZW1lbnRUb1N0cmluZyh0aGlzLmFjdHVhbCkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQKKyAg
ICAgICAgICB9CisKKyAgICAgICAgICBpZiAoYnVpbHRJbk1hdGNoZXIpIHsKKyAgICAgICAgICAg
IHJldHVybiBidWlsdEluTWF0Y2hlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpCisgICAgICAgICAg
fQorCisgICAgICAgICAgcmV0dXJuIGZhbHNlCisgICAgfQorICB9CisKKyAgZm9yKHZhciBtZXRo
b2ROYW1lIGluIGpRdWVyeU1hdGNoZXJzKSB7CisgICAgYmluZE1hdGNoZXIobWV0aG9kTmFtZSkK
KyAgfQorfSgpCisKK2JlZm9yZUVhY2goZnVuY3Rpb24oKSB7CisgIHRoaXMuYWRkTWF0Y2hlcnMo
amFzbWluZS5KUXVlcnkubWF0Y2hlcnNDbGFzcykKKyAgdGhpcy5hZGRNYXRjaGVycyh7CisgICAg
dG9IYXZlQmVlblRyaWdnZXJlZE9uOiBmdW5jdGlvbihzZWxlY3RvcikgeworICAgICAgdGhpcy5t
ZXNzYWdlID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBbCisgICAgICAgICAgIkV4cGVj
dGVkIGV2ZW50ICIgKyB0aGlzLmFjdHVhbCArICIgdG8gaGF2ZSBiZWVuIHRyaWdnZXJlZCBvbiAi
ICsgc2VsZWN0b3IsCisgICAgICAgICAgIkV4cGVjdGVkIGV2ZW50ICIgKyB0aGlzLmFjdHVhbCAr
ICIgbm90IHRvIGhhdmUgYmVlbiB0cmlnZ2VyZWQgb24gIiArIHNlbGVjdG9yCisgICAgICAgIF0K
KyAgICAgIH0KKyAgICAgIHJldHVybiBqYXNtaW5lLkpRdWVyeS5ldmVudHMud2FzVHJpZ2dlcmVk
KHNlbGVjdG9yLCB0aGlzLmFjdHVhbCkKKyAgICB9CisgIH0pCisgIHRoaXMuYWRkTWF0Y2hlcnMo
eworICAgIHRvSGF2ZUJlZW5UcmlnZ2VyZWQ6IGZ1bmN0aW9uKCl7CisgICAgICB2YXIgZXZlbnRO
YW1lID0gdGhpcy5hY3R1YWwuZXZlbnROYW1lLAorICAgICAgICAgIHNlbGVjdG9yID0gdGhpcy5h
Y3R1YWwuc2VsZWN0b3IKKyAgICAgIHRoaXMubWVzc2FnZSA9IGZ1bmN0aW9uKCkgeworICAgICAg
ICByZXR1cm4gWworICAgICAgICAgICJFeHBlY3RlZCBldmVudCAiICsgZXZlbnROYW1lICsgIiB0
byBoYXZlIGJlZW4gdHJpZ2dlcmVkIG9uICIgKyBzZWxlY3RvciwKKyAgICAgICAgICAiRXhwZWN0
ZWQgZXZlbnQgIiArIGV2ZW50TmFtZSArICIgbm90IHRvIGhhdmUgYmVlbiB0cmlnZ2VyZWQgb24g
IiArIHNlbGVjdG9yCisgICAgICAgIF0KKyAgICAgIH0KKyAgICAgIHJldHVybiBqYXNtaW5lLkpR
dWVyeS5ldmVudHMud2FzVHJpZ2dlcmVkKHNlbGVjdG9yLCBldmVudE5hbWUpCisgICAgIH0KKyAg
fSkKKyAgdGhpcy5hZGRNYXRjaGVycyh7CisgICAgdG9IYXZlQmVlblRyaWdnZXJlZE9uQW5kV2l0
aDogZnVuY3Rpb24oKSB7CisgICAgICB2YXIgc2VsZWN0b3IgPSBhcmd1bWVudHNbMF0sCisgICAg
ICAgICAgZXhwZWN0ZWRBcmdzID0gYXJndW1lbnRzWzFdLAorICAgICAgICAgIHdhc1RyaWdnZXJl
ZCA9IGphc21pbmUuSlF1ZXJ5LmV2ZW50cy53YXNUcmlnZ2VyZWQoc2VsZWN0b3IsIHRoaXMuYWN0
dWFsKTsKKyAgICAgIHRoaXMubWVzc2FnZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAod2Fz
VHJpZ2dlcmVkKSB7CisgICAgICAgICAgdmFyIGFjdHVhbEFyZ3MgPSBqYXNtaW5lLkpRdWVyeS5l
dmVudHMuYXJncyhzZWxlY3RvciwgdGhpcy5hY3R1YWwsIGV4cGVjdGVkQXJncylbMV07CisgICAg
ICAgICAgcmV0dXJuIFsKKyAgICAgICAgICAgICJFeHBlY3RlZCBldmVudCAiICsgdGhpcy5hY3R1
YWwgKyAiIHRvIGhhdmUgYmVlbiB0cmlnZ2VyZWQgd2l0aCAiICsgamFzbWluZS5wcChleHBlY3Rl
ZEFyZ3MpICsgIiAgYnV0IGl0IHdhcyB0cmlnZ2VyZWQgd2l0aCAiICsgamFzbWluZS5wcChhY3R1
YWxBcmdzKSwKKyAgICAgICAgICAgICJFeHBlY3RlZCBldmVudCAiICsgdGhpcy5hY3R1YWwgKyAi
IG5vdCB0byBoYXZlIGJlZW4gdHJpZ2dlcmVkIHdpdGggIiArIGphc21pbmUucHAoZXhwZWN0ZWRB
cmdzKSArICIgYnV0IGl0IHdhcyB0cmlnZ2VyZWQgd2l0aCAiICsgamFzbWluZS5wcChhY3R1YWxB
cmdzKQorICAgICAgICAgIF0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICByZXR1cm4gWwor
ICAgICAgICAgICAgIkV4cGVjdGVkIGV2ZW50ICIgKyB0aGlzLmFjdHVhbCArICIgdG8gaGF2ZSBi
ZWVuIHRyaWdnZXJlZCBvbiAiICsgc2VsZWN0b3IsCisgICAgICAgICAgICAiRXhwZWN0ZWQgZXZl
bnQgIiArIHRoaXMuYWN0dWFsICsgIiBub3QgdG8gaGF2ZSBiZWVuIHRyaWdnZXJlZCBvbiAiICsg
c2VsZWN0b3IKKyAgICAgICAgICBdCisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIHJldHVybiB3
YXNUcmlnZ2VyZWQgJiYgamFzbWluZS5KUXVlcnkuZXZlbnRzLndhc1RyaWdnZXJlZFdpdGgoc2Vs
ZWN0b3IsIHRoaXMuYWN0dWFsLCBleHBlY3RlZEFyZ3MsIHRoaXMuZW52KTsKKyAgICB9CisgIH0p
CisgIHRoaXMuYWRkTWF0Y2hlcnMoeworICAgIHRvSGF2ZUJlZW5QcmV2ZW50ZWRPbjogZnVuY3Rp
b24oc2VsZWN0b3IpIHsKKyAgICAgIHRoaXMubWVzc2FnZSA9IGZ1bmN0aW9uKCkgeworICAgICAg
ICByZXR1cm4gWworICAgICAgICAgICJFeHBlY3RlZCBldmVudCAiICsgdGhpcy5hY3R1YWwgKyAi
IHRvIGhhdmUgYmVlbiBwcmV2ZW50ZWQgb24gIiArIHNlbGVjdG9yLAorICAgICAgICAgICJFeHBl
Y3RlZCBldmVudCAiICsgdGhpcy5hY3R1YWwgKyAiIG5vdCB0byBoYXZlIGJlZW4gcHJldmVudGVk
IG9uICIgKyBzZWxlY3RvcgorICAgICAgICBdCisgICAgICB9CisgICAgICByZXR1cm4gamFzbWlu
ZS5KUXVlcnkuZXZlbnRzLndhc1ByZXZlbnRlZChzZWxlY3RvciwgdGhpcy5hY3R1YWwpCisgICAg
fQorICB9KQorICB0aGlzLmFkZE1hdGNoZXJzKHsKKyAgICB0b0hhdmVCZWVuUHJldmVudGVkOiBm
dW5jdGlvbigpIHsKKyAgICAgIHZhciBldmVudE5hbWUgPSB0aGlzLmFjdHVhbC5ldmVudE5hbWUs
CisgICAgICAgICAgc2VsZWN0b3IgPSB0aGlzLmFjdHVhbC5zZWxlY3RvcgorICAgICAgdGhpcy5t
ZXNzYWdlID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBbCisgICAgICAgICAgIkV4cGVj
dGVkIGV2ZW50ICIgKyBldmVudE5hbWUgKyAiIHRvIGhhdmUgYmVlbiBwcmV2ZW50ZWQgb24gIiAr
IHNlbGVjdG9yLAorICAgICAgICAgICJFeHBlY3RlZCBldmVudCAiICsgZXZlbnROYW1lICsgIiBu
b3QgdG8gaGF2ZSBiZWVuIHByZXZlbnRlZCBvbiAiICsgc2VsZWN0b3IKKyAgICAgICAgXQorICAg
ICAgfQorICAgICAgcmV0dXJuIGphc21pbmUuSlF1ZXJ5LmV2ZW50cy53YXNQcmV2ZW50ZWQoc2Vs
ZWN0b3IsIGV2ZW50TmFtZSkKKyAgICB9CisgIH0pCisgIHRoaXMuYWRkTWF0Y2hlcnMoeworICAg
IHRvSGF2ZUJlZW5TdG9wcGVkT246IGZ1bmN0aW9uKHNlbGVjdG9yKSB7CisgICAgICB0aGlzLm1l
c3NhZ2UgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIFsKKyAgICAgICAgICAiRXhwZWN0
ZWQgZXZlbnQgIiArIHRoaXMuYWN0dWFsICsgIiB0byBoYXZlIGJlZW4gc3RvcHBlZCBvbiAiICsg
c2VsZWN0b3IsCisgICAgICAgICAgIkV4cGVjdGVkIGV2ZW50ICIgKyB0aGlzLmFjdHVhbCArICIg
bm90IHRvIGhhdmUgYmVlbiBzdG9wcGVkIG9uICIgKyBzZWxlY3RvcgorICAgICAgICBdCisgICAg
ICB9CisgICAgICByZXR1cm4gamFzbWluZS5KUXVlcnkuZXZlbnRzLndhc1N0b3BwZWQoc2VsZWN0
b3IsIHRoaXMuYWN0dWFsKQorICAgIH0KKyAgfSkKKyAgdGhpcy5hZGRNYXRjaGVycyh7CisgICAg
dG9IYXZlQmVlblN0b3BwZWQ6IGZ1bmN0aW9uKCkgeworICAgICAgdmFyIGV2ZW50TmFtZSA9IHRo
aXMuYWN0dWFsLmV2ZW50TmFtZSwKKyAgICAgICAgICBzZWxlY3RvciA9IHRoaXMuYWN0dWFsLnNl
bGVjdG9yCisgICAgICB0aGlzLm1lc3NhZ2UgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJu
IFsKKyAgICAgICAgICAiRXhwZWN0ZWQgZXZlbnQgIiArIGV2ZW50TmFtZSArICIgdG8gaGF2ZSBi
ZWVuIHN0b3BwZWQgb24gIiArIHNlbGVjdG9yLAorICAgICAgICAgICJFeHBlY3RlZCBldmVudCAi
ICsgZXZlbnROYW1lICsgIiBub3QgdG8gaGF2ZSBiZWVuIHN0b3BwZWQgb24gIiArIHNlbGVjdG9y
CisgICAgICAgIF0KKyAgICAgIH0KKyAgICAgIHJldHVybiBqYXNtaW5lLkpRdWVyeS5ldmVudHMu
d2FzU3RvcHBlZChzZWxlY3RvciwgZXZlbnROYW1lKQorICAgIH0KKyAgfSkKK30pCisKK2FmdGVy
RWFjaChmdW5jdGlvbigpIHsKKyAgamFzbWluZS5nZXRGaXh0dXJlcygpLmNsZWFuVXAoKQorICBq
YXNtaW5lLmdldFN0eWxlRml4dHVyZXMoKS5jbGVhblVwKCkKKyAgamFzbWluZS5KUXVlcnkuZXZl
bnRzLmNsZWFuVXAoKQorfSkKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gv
ZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9qcXVlcnkvY29tcG9uZW50Lmpzb24KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFt
cGxlLWFwcC9jb21wb25lbnRzL2pxdWVyeS9jb21wb25lbnQuanNvbgkocmV2aXNpb24gMCkKKysr
IFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29t
cG9uZW50cy9qcXVlcnkvY29tcG9uZW50Lmpzb24JKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
MyBAQAoreworICAibmFtZSI6ICJqcXVlcnkiLAorICAidmVyc2lvbiI6ICIxLjguMyIsCisgICJt
YWluIjogIi4vanF1ZXJ5LmpzIiwKKyAgImRlcGVuZGVuY2llcyI6IHt9LAorICAiX2lkIjogImpx
dWVyeUAxLjguMyIsCisgICJyZWFkbWUiOiAiRVJST1I6IE5vIFJFQURNRS5tZCBmaWxlIGZvdW5k
ISIsCisgICJkZXNjcmlwdGlvbiI6ICJFUlJPUjogTm8gUkVBRE1FLm1kIGZpbGUgZm91bmQhIiwK
KyAgInJlcG9zaXRvcnkiOiB7CisgICAgInR5cGUiOiAiZ2l0IiwKKyAgICAidXJsIjogImdpdDov
L2dpdGh1Yi5jb20vY29tcG9uZW50cy9qcXVlcnkuZ2l0IgorICB9Cit9ClwgTm8gbmV3bGluZSBh
dCBlbmQgb2YgZmlsZQpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGln
aHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2pxdWVyeS9jb21wb3Nlci5qc29uCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1h
cHAvY29tcG9uZW50cy9qcXVlcnkvY29tcG9zZXIuanNvbgkocmV2aXNpb24gMCkKKysrIFBlcmZv
cm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50
cy9qcXVlcnkvY29tcG9zZXIuanNvbgkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIzIEBACit7
CisgICAgIm5hbWUiOiAiY29tcG9uZW50cy9qcXVlcnkiLAorICAgICJkZXNjcmlwdGlvbiI6ICJq
UXVlcnkgSmF2YVNjcmlwdCBMaWJyYXJ5IiwKKyAgICAidHlwZSI6ICJjb21wb25lbnQiLAorICAg
ICJob21lcGFnZSI6ICJodHRwOi8vanF1ZXJ5LmNvbSIsCisgICAgImxpY2Vuc2UiOiAiTUlUIiwK
KyAgICAic3VwcG9ydCI6IHsKKyAgICAgICAgImlyYyI6ICJpcmM6Ly9pcmMuZnJlZW5vZGUub3Jn
L2pxdWVyeSIsCisgICAgICAgICJpc3N1ZXMiOiAiaHR0cDovL2J1Z3MuanF1ZXJ5LmNvbSIsCisg
ICAgICAgICJmb3J1bSI6ICJodHRwOi8vZm9ydW0uanF1ZXJ5LmNvbSIsCisgICAgICAgICJ3aWtp
IjogImh0dHA6Ly9kb2NzLmpxdWVyeS5jb20vIiwKKyAgICAgICAgInNvdXJjZSI6ICJodHRwczov
L2dpdGh1Yi5jb20vanF1ZXJ5L2pxdWVyeSIKKyAgICB9LAorICAgICJhdXRob3JzIjogWworICAg
ICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJKb2huIFJlc2lnIiwKKyAgICAgICAgICAgICJl
bWFpbCI6ICJqZXJlc2lnQGdtYWlsLmNvbSIKKyAgICAgICAgfQorICAgIF0sCisgICAgImV4dHJh
IjogeworICAgICAgICAianMiOiAianF1ZXJ5LmpzIgorICAgIH0KK30KSW5kZXg6IFBlcmZvcm1h
bmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9q
cXVlcnkvanF1ZXJ5LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVu
QmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9qcXVlcnkvanF1ZXJ5LmpzCShy
ZXZpc2lvbiAwKQorKysgUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1l
eGFtcGxlLWFwcC9jb21wb25lbnRzL2pxdWVyeS9qcXVlcnkuanMJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw5NDcyIEBACisvKiEKKyAqIGpRdWVyeSBKYXZhU2NyaXB0IExpYnJhcnkgdjEuOC4z
CisgKiBodHRwOi8vanF1ZXJ5LmNvbS8KKyAqCisgKiBJbmNsdWRlcyBTaXp6bGUuanMKKyAqIGh0
dHA6Ly9zaXp6bGVqcy5jb20vCisgKgorICogQ29weXJpZ2h0IDIwMTIgalF1ZXJ5IEZvdW5kYXRp
b24gYW5kIG90aGVyIGNvbnRyaWJ1dG9ycworICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNl
bnNlCisgKiBodHRwOi8vanF1ZXJ5Lm9yZy9saWNlbnNlCisgKgorICogRGF0ZTogVHVlIE5vdiAx
MyAyMDEyIDA4OjIwOjMzIEdNVC0wNTAwIChFYXN0ZXJuIFN0YW5kYXJkIFRpbWUpCisgKi8KKyhm
dW5jdGlvbiggd2luZG93LCB1bmRlZmluZWQgKSB7Cit2YXIKKyAgICAvLyBBIGNlbnRyYWwgcmVm
ZXJlbmNlIHRvIHRoZSByb290IGpRdWVyeShkb2N1bWVudCkKKyAgICByb290alF1ZXJ5LAorCisg
ICAgLy8gVGhlIGRlZmVycmVkIHVzZWQgb24gRE9NIHJlYWR5CisgICAgcmVhZHlMaXN0LAorCisg
ICAgLy8gVXNlIHRoZSBjb3JyZWN0IGRvY3VtZW50IGFjY29yZGluZ2x5IHdpdGggd2luZG93IGFy
Z3VtZW50IChzYW5kYm94KQorICAgIGRvY3VtZW50ID0gd2luZG93LmRvY3VtZW50LAorICAgIGxv
Y2F0aW9uID0gd2luZG93LmxvY2F0aW9uLAorICAgIG5hdmlnYXRvciA9IHdpbmRvdy5uYXZpZ2F0
b3IsCisKKyAgICAvLyBNYXAgb3ZlciBqUXVlcnkgaW4gY2FzZSBvZiBvdmVyd3JpdGUKKyAgICBf
alF1ZXJ5ID0gd2luZG93LmpRdWVyeSwKKworICAgIC8vIE1hcCBvdmVyIHRoZSAkIGluIGNhc2Ug
b2Ygb3ZlcndyaXRlCisgICAgXyQgPSB3aW5kb3cuJCwKKworICAgIC8vIFNhdmUgYSByZWZlcmVu
Y2UgdG8gc29tZSBjb3JlIG1ldGhvZHMKKyAgICBjb3JlX3B1c2ggPSBBcnJheS5wcm90b3R5cGUu
cHVzaCwKKyAgICBjb3JlX3NsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLAorICAgIGNvcmVf
aW5kZXhPZiA9IEFycmF5LnByb3RvdHlwZS5pbmRleE9mLAorICAgIGNvcmVfdG9TdHJpbmcgPSBP
YmplY3QucHJvdG90eXBlLnRvU3RyaW5nLAorICAgIGNvcmVfaGFzT3duID0gT2JqZWN0LnByb3Rv
dHlwZS5oYXNPd25Qcm9wZXJ0eSwKKyAgICBjb3JlX3RyaW0gPSBTdHJpbmcucHJvdG90eXBlLnRy
aW0sCisKKyAgICAvLyBEZWZpbmUgYSBsb2NhbCBjb3B5IG9mIGpRdWVyeQorICAgIGpRdWVyeSA9
IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCApIHsKKyAgICAgICAgLy8gVGhlIGpRdWVyeSBv
YmplY3QgaXMgYWN0dWFsbHkganVzdCB0aGUgaW5pdCBjb25zdHJ1Y3RvciAnZW5oYW5jZWQnCisg
ICAgICAgIHJldHVybiBuZXcgalF1ZXJ5LmZuLmluaXQoIHNlbGVjdG9yLCBjb250ZXh0LCByb290
alF1ZXJ5ICk7CisgICAgfSwKKworICAgIC8vIFVzZWQgZm9yIG1hdGNoaW5nIG51bWJlcnMKKyAg
ICBjb3JlX3BudW0gPSAvW1wtK10/KD86XGQqXC58KVxkKyg/OltlRV1bXC0rXT9cZCt8KS8uc291
cmNlLAorCisgICAgLy8gVXNlZCBmb3IgZGV0ZWN0aW5nIGFuZCB0cmltbWluZyB3aGl0ZXNwYWNl
CisgICAgY29yZV9ybm90d2hpdGUgPSAvXFMvLAorICAgIGNvcmVfcnNwYWNlID0gL1xzKy8sCisK
KyAgICAvLyBNYWtlIHN1cmUgd2UgdHJpbSBCT00gYW5kIE5CU1AgKGhlcmUncyBsb29raW5nIGF0
IHlvdSwgU2FmYXJpIDUuMCBhbmQgSUUpCisgICAgcnRyaW0gPSAvXltcc1x1RkVGRlx4QTBdK3xb
XHNcdUZFRkZceEEwXSskL2csCisKKyAgICAvLyBBIHNpbXBsZSB3YXkgdG8gY2hlY2sgZm9yIEhU
TUwgc3RyaW5ncworICAgIC8vIFByaW9yaXRpemUgI2lkIG92ZXIgPHRhZz4gdG8gYXZvaWQgWFNT
IHZpYSBsb2NhdGlvbi5oYXNoICgjOTUyMSkKKyAgICBycXVpY2tFeHByID0gL14oPzpbXiM8XSoo
PFtcd1xXXSs+KVtePl0qJHwjKFtcd1wtXSopJCkvLAorCisgICAgLy8gTWF0Y2ggYSBzdGFuZGFs
b25lIHRhZworICAgIHJzaW5nbGVUYWcgPSAvXjwoXHcrKVxzKlwvPz4oPzo8XC9cMT58KSQvLAor
CisgICAgLy8gSlNPTiBSZWdFeHAKKyAgICBydmFsaWRjaGFycyA9IC9eW1xdLDp7fVxzXSokLywK
KyAgICBydmFsaWRicmFjZXMgPSAvKD86Xnw6fCwpKD86XHMqXFspKy9nLAorICAgIHJ2YWxpZGVz
Y2FwZSA9IC9cXCg/OlsiXFxcL2JmbnJ0XXx1W1xkYS1mQS1GXXs0fSkvZywKKyAgICBydmFsaWR0
b2tlbnMgPSAvIlteIlxcXHJcbl0qInx0cnVlfGZhbHNlfG51bGx8LT8oPzpcZFxkKlwufClcZCso
PzpbZUVdW1wtK10/XGQrfCkvZywKKworICAgIC8vIE1hdGNoZXMgZGFzaGVkIHN0cmluZyBmb3Ig
Y2FtZWxpemluZworICAgIHJtc1ByZWZpeCA9IC9eLW1zLS8sCisgICAgcmRhc2hBbHBoYSA9IC8t
KFtcZGEtel0pL2dpLAorCisgICAgLy8gVXNlZCBieSBqUXVlcnkuY2FtZWxDYXNlIGFzIGNhbGxi
YWNrIHRvIHJlcGxhY2UoKQorICAgIGZjYW1lbENhc2UgPSBmdW5jdGlvbiggYWxsLCBsZXR0ZXIg
KSB7CisgICAgICAgIHJldHVybiAoIGxldHRlciArICIiICkudG9VcHBlckNhc2UoKTsKKyAgICB9
LAorCisgICAgLy8gVGhlIHJlYWR5IGV2ZW50IGhhbmRsZXIgYW5kIHNlbGYgY2xlYW51cCBtZXRo
b2QKKyAgICBET01Db250ZW50TG9hZGVkID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICggZG9j
dW1lbnQuYWRkRXZlbnRMaXN0ZW5lciApIHsKKyAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2
ZW50TGlzdGVuZXIoICJET01Db250ZW50TG9hZGVkIiwgRE9NQ29udGVudExvYWRlZCwgZmFsc2Ug
KTsKKyAgICAgICAgICAgIGpRdWVyeS5yZWFkeSgpOworICAgICAgICB9IGVsc2UgaWYgKCBkb2N1
bWVudC5yZWFkeVN0YXRlID09PSAiY29tcGxldGUiICkgeworICAgICAgICAgICAgLy8gd2UncmUg
aGVyZSBiZWNhdXNlIHJlYWR5U3RhdGUgPT09ICJjb21wbGV0ZSIgaW4gb2xkSUUKKyAgICAgICAg
ICAgIC8vIHdoaWNoIGlzIGdvb2QgZW5vdWdoIGZvciB1cyB0byBjYWxsIHRoZSBkb20gcmVhZHkh
CisgICAgICAgICAgICBkb2N1bWVudC5kZXRhY2hFdmVudCggIm9ucmVhZHlzdGF0ZWNoYW5nZSIs
IERPTUNvbnRlbnRMb2FkZWQgKTsKKyAgICAgICAgICAgIGpRdWVyeS5yZWFkeSgpOworICAgICAg
ICB9CisgICAgfSwKKworICAgIC8vIFtbQ2xhc3NdXSAtPiB0eXBlIHBhaXJzCisgICAgY2xhc3My
dHlwZSA9IHt9OworCitqUXVlcnkuZm4gPSBqUXVlcnkucHJvdG90eXBlID0geworICAgIGNvbnN0
cnVjdG9yOiBqUXVlcnksCisgICAgaW5pdDogZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0LCBy
b290alF1ZXJ5ICkgeworICAgICAgICB2YXIgbWF0Y2gsIGVsZW0sIHJldCwgZG9jOworCisgICAg
ICAgIC8vIEhhbmRsZSAkKCIiKSwgJChudWxsKSwgJCh1bmRlZmluZWQpLCAkKGZhbHNlKQorICAg
ICAgICBpZiAoICFzZWxlY3RvciApIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAg
ICB9CisKKyAgICAgICAgLy8gSGFuZGxlICQoRE9NRWxlbWVudCkKKyAgICAgICAgaWYgKCBzZWxl
Y3Rvci5ub2RlVHlwZSApIHsKKyAgICAgICAgICAgIHRoaXMuY29udGV4dCA9IHRoaXNbMF0gPSBz
ZWxlY3RvcjsKKyAgICAgICAgICAgIHRoaXMubGVuZ3RoID0gMTsKKyAgICAgICAgICAgIHJldHVy
biB0aGlzOworICAgICAgICB9CisKKyAgICAgICAgLy8gSGFuZGxlIEhUTUwgc3RyaW5ncworICAg
ICAgICBpZiAoIHR5cGVvZiBzZWxlY3RvciA9PT0gInN0cmluZyIgKSB7CisgICAgICAgICAgICBp
ZiAoIHNlbGVjdG9yLmNoYXJBdCgwKSA9PT0gIjwiICYmIHNlbGVjdG9yLmNoYXJBdCggc2VsZWN0
b3IubGVuZ3RoIC0gMSApID09PSAiPiIgJiYgc2VsZWN0b3IubGVuZ3RoID49IDMgKSB7CisgICAg
ICAgICAgICAgICAgLy8gQXNzdW1lIHRoYXQgc3RyaW5ncyB0aGF0IHN0YXJ0IGFuZCBlbmQgd2l0
aCA8PiBhcmUgSFRNTCBhbmQgc2tpcCB0aGUgcmVnZXggY2hlY2sKKyAgICAgICAgICAgICAgICBt
YXRjaCA9IFsgbnVsbCwgc2VsZWN0b3IsIG51bGwgXTsKKworICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICBtYXRjaCA9IHJxdWlja0V4cHIuZXhlYyggc2VsZWN0b3IgKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gTWF0Y2ggaHRtbCBvciBtYWtlIHN1cmUgbm8g
Y29udGV4dCBpcyBzcGVjaWZpZWQgZm9yICNpZAorICAgICAgICAgICAgaWYgKCBtYXRjaCAmJiAo
bWF0Y2hbMV0gfHwgIWNvbnRleHQpICkgeworCisgICAgICAgICAgICAgICAgLy8gSEFORExFOiAk
KGh0bWwpIC0+ICQoYXJyYXkpCisgICAgICAgICAgICAgICAgaWYgKCBtYXRjaFsxXSApIHsKKyAg
ICAgICAgICAgICAgICAgICAgY29udGV4dCA9IGNvbnRleHQgaW5zdGFuY2VvZiBqUXVlcnkgPyBj
b250ZXh0WzBdIDogY29udGV4dDsKKyAgICAgICAgICAgICAgICAgICAgZG9jID0gKCBjb250ZXh0
ICYmIGNvbnRleHQubm9kZVR5cGUgPyBjb250ZXh0Lm93bmVyRG9jdW1lbnQgfHwgY29udGV4dCA6
IGRvY3VtZW50ICk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gc2NyaXB0cyBpcyB0cnVlIGZv
ciBiYWNrLWNvbXBhdAorICAgICAgICAgICAgICAgICAgICBzZWxlY3RvciA9IGpRdWVyeS5wYXJz
ZUhUTUwoIG1hdGNoWzFdLCBkb2MsIHRydWUgKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBy
c2luZ2xlVGFnLnRlc3QoIG1hdGNoWzFdICkgJiYgalF1ZXJ5LmlzUGxhaW5PYmplY3QoIGNvbnRl
eHQgKSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXR0ci5jYWxsKCBzZWxlY3Rv
ciwgY29udGV4dCwgdHJ1ZSApOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGpRdWVyeS5tZXJnZSggdGhpcywgc2VsZWN0b3IgKTsKKworICAgICAg
ICAgICAgICAgIC8vIEhBTkRMRTogJCgjaWQpCisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCBtYXRjaFsy
XSApOworCisgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIHBhcmVudE5vZGUgdG8gY2F0Y2gg
d2hlbiBCbGFja2JlcnJ5IDQuNiByZXR1cm5zCisgICAgICAgICAgICAgICAgICAgIC8vIG5vZGVz
IHRoYXQgYXJlIG5vIGxvbmdlciBpbiB0aGUgZG9jdW1lbnQgIzY5NjMKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKCBlbGVtICYmIGVsZW0ucGFyZW50Tm9kZSApIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSBJRSBhbmQgT3BlcmEgcmV0dXJuIGl0ZW1z
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBieSBuYW1lIGluc3RlYWQgb2YgSUQKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggZWxlbS5pZCAhPT0gbWF0Y2hbMl0gKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJvb3RqUXVlcnkuZmluZCggc2VsZWN0b3IgKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgLy8g
T3RoZXJ3aXNlLCB3ZSBpbmplY3QgdGhlIGVsZW1lbnQgZGlyZWN0bHkgaW50byB0aGUgalF1ZXJ5
IG9iamVjdAorICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sZW5ndGggPSAxOworICAgICAg
ICAgICAgICAgICAgICAgICAgdGhpc1swXSA9IGVsZW07CisgICAgICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQgPSBkb2N1bWVudDsKKyAgICAgICAg
ICAgICAgICAgICAgdGhpcy5zZWxlY3RvciA9IHNlbGVjdG9yOworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEhBTkRM
RTogJChleHByLCAkKC4uLikpCisgICAgICAgICAgICB9IGVsc2UgaWYgKCAhY29udGV4dCB8fCBj
b250ZXh0LmpxdWVyeSApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gKCBjb250ZXh0IHx8IHJv
b3RqUXVlcnkgKS5maW5kKCBzZWxlY3RvciApOworCisgICAgICAgICAgICAvLyBIQU5ETEU6ICQo
ZXhwciwgY29udGV4dCkKKyAgICAgICAgICAgIC8vICh3aGljaCBpcyBqdXN0IGVxdWl2YWxlbnQg
dG86ICQoY29udGV4dCkuZmluZChleHByKQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3RvciggY29udGV4dCApLmZpbmQoIHNlbGVjdG9y
ICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgLy8gSEFORExFOiAkKGZ1bmN0aW9uKQorICAg
ICAgICAvLyBTaG9ydGN1dCBmb3IgZG9jdW1lbnQgcmVhZHkKKyAgICAgICAgfSBlbHNlIGlmICgg
alF1ZXJ5LmlzRnVuY3Rpb24oIHNlbGVjdG9yICkgKSB7CisgICAgICAgICAgICByZXR1cm4gcm9v
dGpRdWVyeS5yZWFkeSggc2VsZWN0b3IgKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggc2Vs
ZWN0b3Iuc2VsZWN0b3IgIT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgIHRoaXMuc2VsZWN0
b3IgPSBzZWxlY3Rvci5zZWxlY3RvcjsKKyAgICAgICAgICAgIHRoaXMuY29udGV4dCA9IHNlbGVj
dG9yLmNvbnRleHQ7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4galF1ZXJ5Lm1ha2VBcnJh
eSggc2VsZWN0b3IsIHRoaXMgKTsKKyAgICB9LAorCisgICAgLy8gU3RhcnQgd2l0aCBhbiBlbXB0
eSBzZWxlY3RvcgorICAgIHNlbGVjdG9yOiAiIiwKKworICAgIC8vIFRoZSBjdXJyZW50IHZlcnNp
b24gb2YgalF1ZXJ5IGJlaW5nIHVzZWQKKyAgICBqcXVlcnk6ICIxLjguMyIsCisKKyAgICAvLyBU
aGUgZGVmYXVsdCBsZW5ndGggb2YgYSBqUXVlcnkgb2JqZWN0IGlzIDAKKyAgICBsZW5ndGg6IDAs
CisKKyAgICAvLyBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIGNvbnRhaW5lZCBpbiB0aGUgbWF0Y2hl
ZCBlbGVtZW50IHNldAorICAgIHNpemU6IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhp
cy5sZW5ndGg7CisgICAgfSwKKworICAgIHRvQXJyYXk6IGZ1bmN0aW9uKCkgeworICAgICAgICBy
ZXR1cm4gY29yZV9zbGljZS5jYWxsKCB0aGlzICk7CisgICAgfSwKKworICAgIC8vIEdldCB0aGUg
TnRoIGVsZW1lbnQgaW4gdGhlIG1hdGNoZWQgZWxlbWVudCBzZXQgT1IKKyAgICAvLyBHZXQgdGhl
IHdob2xlIG1hdGNoZWQgZWxlbWVudCBzZXQgYXMgYSBjbGVhbiBhcnJheQorICAgIGdldDogZnVu
Y3Rpb24oIG51bSApIHsKKyAgICAgICAgcmV0dXJuIG51bSA9PSBudWxsID8KKworICAgICAgICAg
ICAgLy8gUmV0dXJuIGEgJ2NsZWFuJyBhcnJheQorICAgICAgICAgICAgdGhpcy50b0FycmF5KCkg
OgorCisgICAgICAgICAgICAvLyBSZXR1cm4ganVzdCB0aGUgb2JqZWN0CisgICAgICAgICAgICAo
IG51bSA8IDAgPyB0aGlzWyB0aGlzLmxlbmd0aCArIG51bSBdIDogdGhpc1sgbnVtIF0gKTsKKyAg
ICB9LAorCisgICAgLy8gVGFrZSBhbiBhcnJheSBvZiBlbGVtZW50cyBhbmQgcHVzaCBpdCBvbnRv
IHRoZSBzdGFjaworICAgIC8vIChyZXR1cm5pbmcgdGhlIG5ldyBtYXRjaGVkIGVsZW1lbnQgc2V0
KQorICAgIHB1c2hTdGFjazogZnVuY3Rpb24oIGVsZW1zLCBuYW1lLCBzZWxlY3RvciApIHsKKwor
ICAgICAgICAvLyBCdWlsZCBhIG5ldyBqUXVlcnkgbWF0Y2hlZCBlbGVtZW50IHNldAorICAgICAg
ICB2YXIgcmV0ID0galF1ZXJ5Lm1lcmdlKCB0aGlzLmNvbnN0cnVjdG9yKCksIGVsZW1zICk7CisK
KyAgICAgICAgLy8gQWRkIHRoZSBvbGQgb2JqZWN0IG9udG8gdGhlIHN0YWNrIChhcyBhIHJlZmVy
ZW5jZSkKKyAgICAgICAgcmV0LnByZXZPYmplY3QgPSB0aGlzOworCisgICAgICAgIHJldC5jb250
ZXh0ID0gdGhpcy5jb250ZXh0OworCisgICAgICAgIGlmICggbmFtZSA9PT0gImZpbmQiICkgewor
ICAgICAgICAgICAgcmV0LnNlbGVjdG9yID0gdGhpcy5zZWxlY3RvciArICggdGhpcy5zZWxlY3Rv
ciA/ICIgIiA6ICIiICkgKyBzZWxlY3RvcjsKKyAgICAgICAgfSBlbHNlIGlmICggbmFtZSApIHsK
KyAgICAgICAgICAgIHJldC5zZWxlY3RvciA9IHRoaXMuc2VsZWN0b3IgKyAiLiIgKyBuYW1lICsg
IigiICsgc2VsZWN0b3IgKyAiKSI7CisgICAgICAgIH0KKworICAgICAgICAvLyBSZXR1cm4gdGhl
IG5ld2x5LWZvcm1lZCBlbGVtZW50IHNldAorICAgICAgICByZXR1cm4gcmV0OworICAgIH0sCisK
KyAgICAvLyBFeGVjdXRlIGEgY2FsbGJhY2sgZm9yIGV2ZXJ5IGVsZW1lbnQgaW4gdGhlIG1hdGNo
ZWQgc2V0LgorICAgIC8vIChZb3UgY2FuIHNlZWQgdGhlIGFyZ3VtZW50cyB3aXRoIGFuIGFycmF5
IG9mIGFyZ3MsIGJ1dCB0aGlzIGlzCisgICAgLy8gb25seSB1c2VkIGludGVybmFsbHkuKQorICAg
IGVhY2g6IGZ1bmN0aW9uKCBjYWxsYmFjaywgYXJncyApIHsKKyAgICAgICAgcmV0dXJuIGpRdWVy
eS5lYWNoKCB0aGlzLCBjYWxsYmFjaywgYXJncyApOworICAgIH0sCisKKyAgICByZWFkeTogZnVu
Y3Rpb24oIGZuICkgeworICAgICAgICAvLyBBZGQgdGhlIGNhbGxiYWNrCisgICAgICAgIGpRdWVy
eS5yZWFkeS5wcm9taXNlKCkuZG9uZSggZm4gKTsKKworICAgICAgICByZXR1cm4gdGhpczsKKyAg
ICB9LAorCisgICAgZXE6IGZ1bmN0aW9uKCBpICkgeworICAgICAgICBpID0gK2k7CisgICAgICAg
IHJldHVybiBpID09PSAtMSA/CisgICAgICAgICAgICB0aGlzLnNsaWNlKCBpICkgOgorICAgICAg
ICAgICAgdGhpcy5zbGljZSggaSwgaSArIDEgKTsKKyAgICB9LAorCisgICAgZmlyc3Q6IGZ1bmN0
aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy5lcSggMCApOworICAgIH0sCisKKyAgICBsYXN0
OiBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuZXEoIC0xICk7CisgICAgfSwKKwor
ICAgIHNsaWNlOiBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMucHVzaFN0YWNrKCBj
b3JlX3NsaWNlLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKSwKKyAgICAgICAgICAgICJzbGljZSIs
IGNvcmVfc2xpY2UuY2FsbChhcmd1bWVudHMpLmpvaW4oIiwiKSApOworICAgIH0sCisKKyAgICBt
YXA6IGZ1bmN0aW9uKCBjYWxsYmFjayApIHsKKyAgICAgICAgcmV0dXJuIHRoaXMucHVzaFN0YWNr
KCBqUXVlcnkubWFwKHRoaXMsIGZ1bmN0aW9uKCBlbGVtLCBpICkgeworICAgICAgICAgICAgcmV0
dXJuIGNhbGxiYWNrLmNhbGwoIGVsZW0sIGksIGVsZW0gKTsKKyAgICAgICAgfSkpOworICAgIH0s
CisKKyAgICBlbmQ6IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy5wcmV2T2JqZWN0
IHx8IHRoaXMuY29uc3RydWN0b3IobnVsbCk7CisgICAgfSwKKworICAgIC8vIEZvciBpbnRlcm5h
bCB1c2Ugb25seS4KKyAgICAvLyBCZWhhdmVzIGxpa2UgYW4gQXJyYXkncyBtZXRob2QsIG5vdCBs
aWtlIGEgalF1ZXJ5IG1ldGhvZC4KKyAgICBwdXNoOiBjb3JlX3B1c2gsCisgICAgc29ydDogW10u
c29ydCwKKyAgICBzcGxpY2U6IFtdLnNwbGljZQorfTsKKworLy8gR2l2ZSB0aGUgaW5pdCBmdW5j
dGlvbiB0aGUgalF1ZXJ5IHByb3RvdHlwZSBmb3IgbGF0ZXIgaW5zdGFudGlhdGlvbgoralF1ZXJ5
LmZuLmluaXQucHJvdG90eXBlID0galF1ZXJ5LmZuOworCitqUXVlcnkuZXh0ZW5kID0galF1ZXJ5
LmZuLmV4dGVuZCA9IGZ1bmN0aW9uKCkgeworICAgIHZhciBvcHRpb25zLCBuYW1lLCBzcmMsIGNv
cHksIGNvcHlJc0FycmF5LCBjbG9uZSwKKyAgICAgICAgdGFyZ2V0ID0gYXJndW1lbnRzWzBdIHx8
IHt9LAorICAgICAgICBpID0gMSwKKyAgICAgICAgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCwK
KyAgICAgICAgZGVlcCA9IGZhbHNlOworCisgICAgLy8gSGFuZGxlIGEgZGVlcCBjb3B5IHNpdHVh
dGlvbgorICAgIGlmICggdHlwZW9mIHRhcmdldCA9PT0gImJvb2xlYW4iICkgeworICAgICAgICBk
ZWVwID0gdGFyZ2V0OworICAgICAgICB0YXJnZXQgPSBhcmd1bWVudHNbMV0gfHwge307CisgICAg
ICAgIC8vIHNraXAgdGhlIGJvb2xlYW4gYW5kIHRoZSB0YXJnZXQKKyAgICAgICAgaSA9IDI7Cisg
ICAgfQorCisgICAgLy8gSGFuZGxlIGNhc2Ugd2hlbiB0YXJnZXQgaXMgYSBzdHJpbmcgb3Igc29t
ZXRoaW5nIChwb3NzaWJsZSBpbiBkZWVwIGNvcHkpCisgICAgaWYgKCB0eXBlb2YgdGFyZ2V0ICE9
PSAib2JqZWN0IiAmJiAhalF1ZXJ5LmlzRnVuY3Rpb24odGFyZ2V0KSApIHsKKyAgICAgICAgdGFy
Z2V0ID0ge307CisgICAgfQorCisgICAgLy8gZXh0ZW5kIGpRdWVyeSBpdHNlbGYgaWYgb25seSBv
bmUgYXJndW1lbnQgaXMgcGFzc2VkCisgICAgaWYgKCBsZW5ndGggPT09IGkgKSB7CisgICAgICAg
IHRhcmdldCA9IHRoaXM7CisgICAgICAgIC0taTsKKyAgICB9CisKKyAgICBmb3IgKCA7IGkgPCBs
ZW5ndGg7IGkrKyApIHsKKyAgICAgICAgLy8gT25seSBkZWFsIHdpdGggbm9uLW51bGwvdW5kZWZp
bmVkIHZhbHVlcworICAgICAgICBpZiAoIChvcHRpb25zID0gYXJndW1lbnRzWyBpIF0pICE9IG51
bGwgKSB7CisgICAgICAgICAgICAvLyBFeHRlbmQgdGhlIGJhc2Ugb2JqZWN0CisgICAgICAgICAg
ICBmb3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7CisgICAgICAgICAgICAgICAgc3JjID0gdGFyZ2V0
WyBuYW1lIF07CisgICAgICAgICAgICAgICAgY29weSA9IG9wdGlvbnNbIG5hbWUgXTsKKworICAg
ICAgICAgICAgICAgIC8vIFByZXZlbnQgbmV2ZXItZW5kaW5nIGxvb3AKKyAgICAgICAgICAgICAg
ICBpZiAoIHRhcmdldCA9PT0gY29weSApIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gUmVjdXJzZSBpZiB3ZSdy
ZSBtZXJnaW5nIHBsYWluIG9iamVjdHMgb3IgYXJyYXlzCisgICAgICAgICAgICAgICAgaWYgKCBk
ZWVwICYmIGNvcHkgJiYgKCBqUXVlcnkuaXNQbGFpbk9iamVjdChjb3B5KSB8fCAoY29weUlzQXJy
YXkgPSBqUXVlcnkuaXNBcnJheShjb3B5KSkgKSApIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KCBjb3B5SXNBcnJheSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvcHlJc0FycmF5ID0g
ZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICBjbG9uZSA9IHNyYyAmJiBqUXVlcnkuaXNB
cnJheShzcmMpID8gc3JjIDogW107CisKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGNsb25lID0gc3JjICYmIGpRdWVyeS5pc1BsYWluT2JqZWN0
KHNyYykgPyBzcmMgOiB7fTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgICAgIC8vIE5ldmVyIG1vdmUgb3JpZ2luYWwgb2JqZWN0cywgY2xvbmUgdGhlbQorICAgICAg
ICAgICAgICAgICAgICB0YXJnZXRbIG5hbWUgXSA9IGpRdWVyeS5leHRlbmQoIGRlZXAsIGNsb25l
LCBjb3B5ICk7CisKKyAgICAgICAgICAgICAgICAvLyBEb24ndCBicmluZyBpbiB1bmRlZmluZWQg
dmFsdWVzCisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggY29weSAhPT0gdW5kZWZpbmVkICkg
eworICAgICAgICAgICAgICAgICAgICB0YXJnZXRbIG5hbWUgXSA9IGNvcHk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gUmV0dXJu
IHRoZSBtb2RpZmllZCBvYmplY3QKKyAgICByZXR1cm4gdGFyZ2V0OworfTsKKworalF1ZXJ5LmV4
dGVuZCh7CisgICAgbm9Db25mbGljdDogZnVuY3Rpb24oIGRlZXAgKSB7CisgICAgICAgIGlmICgg
d2luZG93LiQgPT09IGpRdWVyeSApIHsKKyAgICAgICAgICAgIHdpbmRvdy4kID0gXyQ7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoIGRlZXAgJiYgd2luZG93LmpRdWVyeSA9PT0galF1ZXJ5ICkg
eworICAgICAgICAgICAgd2luZG93LmpRdWVyeSA9IF9qUXVlcnk7CisgICAgICAgIH0KKworICAg
ICAgICByZXR1cm4galF1ZXJ5OworICAgIH0sCisKKyAgICAvLyBJcyB0aGUgRE9NIHJlYWR5IHRv
IGJlIHVzZWQ/IFNldCB0byB0cnVlIG9uY2UgaXQgb2NjdXJzLgorICAgIGlzUmVhZHk6IGZhbHNl
LAorCisgICAgLy8gQSBjb3VudGVyIHRvIHRyYWNrIGhvdyBtYW55IGl0ZW1zIHRvIHdhaXQgZm9y
IGJlZm9yZQorICAgIC8vIHRoZSByZWFkeSBldmVudCBmaXJlcy4gU2VlICM2NzgxCisgICAgcmVh
ZHlXYWl0OiAxLAorCisgICAgLy8gSG9sZCAob3IgcmVsZWFzZSkgdGhlIHJlYWR5IGV2ZW50Cisg
ICAgaG9sZFJlYWR5OiBmdW5jdGlvbiggaG9sZCApIHsKKyAgICAgICAgaWYgKCBob2xkICkgewor
ICAgICAgICAgICAgalF1ZXJ5LnJlYWR5V2FpdCsrOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgalF1ZXJ5LnJlYWR5KCB0cnVlICk7CisgICAgICAgIH0KKyAgICB9LAorCisgICAgLy8g
SGFuZGxlIHdoZW4gdGhlIERPTSBpcyByZWFkeQorICAgIHJlYWR5OiBmdW5jdGlvbiggd2FpdCAp
IHsKKworICAgICAgICAvLyBBYm9ydCBpZiB0aGVyZSBhcmUgcGVuZGluZyBob2xkcyBvciB3ZSdy
ZSBhbHJlYWR5IHJlYWR5CisgICAgICAgIGlmICggd2FpdCA9PT0gdHJ1ZSA/IC0talF1ZXJ5LnJl
YWR5V2FpdCA6IGpRdWVyeS5pc1JlYWR5ICkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgLy8gTWFrZSBzdXJlIGJvZHkgZXhpc3RzLCBhdCBsZWFzdCwgaW4gY2Fz
ZSBJRSBnZXRzIGEgbGl0dGxlIG92ZXJ6ZWFsb3VzICh0aWNrZXQgIzU0NDMpLgorICAgICAgICBp
ZiAoICFkb2N1bWVudC5ib2R5ICkgeworICAgICAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoIGpR
dWVyeS5yZWFkeSwgMSApOworICAgICAgICB9CisKKyAgICAgICAgLy8gUmVtZW1iZXIgdGhhdCB0
aGUgRE9NIGlzIHJlYWR5CisgICAgICAgIGpRdWVyeS5pc1JlYWR5ID0gdHJ1ZTsKKworICAgICAg
ICAvLyBJZiBhIG5vcm1hbCBET00gUmVhZHkgZXZlbnQgZmlyZWQsIGRlY3JlbWVudCwgYW5kIHdh
aXQgaWYgbmVlZCBiZQorICAgICAgICBpZiAoIHdhaXQgIT09IHRydWUgJiYgLS1qUXVlcnkucmVh
ZHlXYWl0ID4gMCApIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAg
IC8vIElmIHRoZXJlIGFyZSBmdW5jdGlvbnMgYm91bmQsIHRvIGV4ZWN1dGUKKyAgICAgICAgcmVh
ZHlMaXN0LnJlc29sdmVXaXRoKCBkb2N1bWVudCwgWyBqUXVlcnkgXSApOworCisgICAgICAgIC8v
IFRyaWdnZXIgYW55IGJvdW5kIHJlYWR5IGV2ZW50cworICAgICAgICBpZiAoIGpRdWVyeS5mbi50
cmlnZ2VyICkgeworICAgICAgICAgICAgalF1ZXJ5KCBkb2N1bWVudCApLnRyaWdnZXIoInJlYWR5
Iikub2ZmKCJyZWFkeSIpOworICAgICAgICB9CisgICAgfSwKKworICAgIC8vIFNlZSB0ZXN0L3Vu
aXQvY29yZS5qcyBmb3IgZGV0YWlscyBjb25jZXJuaW5nIGlzRnVuY3Rpb24uCisgICAgLy8gU2lu
Y2UgdmVyc2lvbiAxLjMsIERPTSBtZXRob2RzIGFuZCBmdW5jdGlvbnMgbGlrZSBhbGVydAorICAg
IC8vIGFyZW4ndCBzdXBwb3J0ZWQuIFRoZXkgcmV0dXJuIGZhbHNlIG9uIElFICgjMjk2OCkuCisg
ICAgaXNGdW5jdGlvbjogZnVuY3Rpb24oIG9iaiApIHsKKyAgICAgICAgcmV0dXJuIGpRdWVyeS50
eXBlKG9iaikgPT09ICJmdW5jdGlvbiI7CisgICAgfSwKKworICAgIGlzQXJyYXk6IEFycmF5Lmlz
QXJyYXkgfHwgZnVuY3Rpb24oIG9iaiApIHsKKyAgICAgICAgcmV0dXJuIGpRdWVyeS50eXBlKG9i
aikgPT09ICJhcnJheSI7CisgICAgfSwKKworICAgIGlzV2luZG93OiBmdW5jdGlvbiggb2JqICkg
eworICAgICAgICByZXR1cm4gb2JqICE9IG51bGwgJiYgb2JqID09IG9iai53aW5kb3c7CisgICAg
fSwKKworICAgIGlzTnVtZXJpYzogZnVuY3Rpb24oIG9iaiApIHsKKyAgICAgICAgcmV0dXJuICFp
c05hTiggcGFyc2VGbG9hdChvYmopICkgJiYgaXNGaW5pdGUoIG9iaiApOworICAgIH0sCisKKyAg
ICB0eXBlOiBmdW5jdGlvbiggb2JqICkgeworICAgICAgICByZXR1cm4gb2JqID09IG51bGwgPwor
ICAgICAgICAgICAgU3RyaW5nKCBvYmogKSA6CisgICAgICAgICAgICBjbGFzczJ0eXBlWyBjb3Jl
X3RvU3RyaW5nLmNhbGwob2JqKSBdIHx8ICJvYmplY3QiOworICAgIH0sCisKKyAgICBpc1BsYWlu
T2JqZWN0OiBmdW5jdGlvbiggb2JqICkgeworICAgICAgICAvLyBNdXN0IGJlIGFuIE9iamVjdC4K
KyAgICAgICAgLy8gQmVjYXVzZSBvZiBJRSwgd2UgYWxzbyBoYXZlIHRvIGNoZWNrIHRoZSBwcmVz
ZW5jZSBvZiB0aGUgY29uc3RydWN0b3IgcHJvcGVydHkuCisgICAgICAgIC8vIE1ha2Ugc3VyZSB0
aGF0IERPTSBub2RlcyBhbmQgd2luZG93IG9iamVjdHMgZG9uJ3QgcGFzcyB0aHJvdWdoLCBhcyB3
ZWxsCisgICAgICAgIGlmICggIW9iaiB8fCBqUXVlcnkudHlwZShvYmopICE9PSAib2JqZWN0IiB8
fCBvYmoubm9kZVR5cGUgfHwgalF1ZXJ5LmlzV2luZG93KCBvYmogKSApIHsKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICAv
LyBOb3Qgb3duIGNvbnN0cnVjdG9yIHByb3BlcnR5IG11c3QgYmUgT2JqZWN0CisgICAgICAgICAg
ICBpZiAoIG9iai5jb25zdHJ1Y3RvciAmJgorICAgICAgICAgICAgICAgICFjb3JlX2hhc093bi5j
YWxsKG9iaiwgImNvbnN0cnVjdG9yIikgJiYKKyAgICAgICAgICAgICAgICAhY29yZV9oYXNPd24u
Y2FsbChvYmouY29uc3RydWN0b3IucHJvdG90eXBlLCAiaXNQcm90b3R5cGVPZiIpICkgeworICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBjYXRj
aCAoIGUgKSB7CisgICAgICAgICAgICAvLyBJRTgsOSBXaWxsIHRocm93IGV4Y2VwdGlvbnMgb24g
Y2VydGFpbiBob3N0IG9iamVjdHMgIzk4OTcKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQorCisgICAgICAgIC8vIE93biBwcm9wZXJ0aWVzIGFyZSBlbnVtZXJhdGVkIGZpcnN0
bHksIHNvIHRvIHNwZWVkIHVwLAorICAgICAgICAvLyBpZiBsYXN0IG9uZSBpcyBvd24sIHRoZW4g
YWxsIHByb3BlcnRpZXMgYXJlIG93bi4KKworICAgICAgICB2YXIga2V5OworICAgICAgICBmb3Ig
KCBrZXkgaW4gb2JqICkge30KKworICAgICAgICByZXR1cm4ga2V5ID09PSB1bmRlZmluZWQgfHwg
Y29yZV9oYXNPd24uY2FsbCggb2JqLCBrZXkgKTsKKyAgICB9LAorCisgICAgaXNFbXB0eU9iamVj
dDogZnVuY3Rpb24oIG9iaiApIHsKKyAgICAgICAgdmFyIG5hbWU7CisgICAgICAgIGZvciAoIG5h
bWUgaW4gb2JqICkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0sCisKKyAgICBlcnJvcjogZnVuY3Rpb24oIG1zZyApIHsK
KyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCBtc2cgKTsKKyAgICB9LAorCisgICAgLy8gZGF0YTog
c3RyaW5nIG9mIGh0bWwKKyAgICAvLyBjb250ZXh0IChvcHRpb25hbCk6IElmIHNwZWNpZmllZCwg
dGhlIGZyYWdtZW50IHdpbGwgYmUgY3JlYXRlZCBpbiB0aGlzIGNvbnRleHQsIGRlZmF1bHRzIHRv
IGRvY3VtZW50CisgICAgLy8gc2NyaXB0cyAob3B0aW9uYWwpOiBJZiB0cnVlLCB3aWxsIGluY2x1
ZGUgc2NyaXB0cyBwYXNzZWQgaW4gdGhlIGh0bWwgc3RyaW5nCisgICAgcGFyc2VIVE1MOiBmdW5j
dGlvbiggZGF0YSwgY29udGV4dCwgc2NyaXB0cyApIHsKKyAgICAgICAgdmFyIHBhcnNlZDsKKyAg
ICAgICAgaWYgKCAhZGF0YSB8fCB0eXBlb2YgZGF0YSAhPT0gInN0cmluZyIgKSB7CisgICAgICAg
ICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBpZiAoIHR5cGVvZiBjb250ZXh0
ID09PSAiYm9vbGVhbiIgKSB7CisgICAgICAgICAgICBzY3JpcHRzID0gY29udGV4dDsKKyAgICAg
ICAgICAgIGNvbnRleHQgPSAwOworICAgICAgICB9CisgICAgICAgIGNvbnRleHQgPSBjb250ZXh0
IHx8IGRvY3VtZW50OworCisgICAgICAgIC8vIFNpbmdsZSB0YWcKKyAgICAgICAgaWYgKCAocGFy
c2VkID0gcnNpbmdsZVRhZy5leGVjKCBkYXRhICkpICkgeworICAgICAgICAgICAgcmV0dXJuIFsg
Y29udGV4dC5jcmVhdGVFbGVtZW50KCBwYXJzZWRbMV0gKSBdOworICAgICAgICB9CisKKyAgICAg
ICAgcGFyc2VkID0galF1ZXJ5LmJ1aWxkRnJhZ21lbnQoIFsgZGF0YSBdLCBjb250ZXh0LCBzY3Jp
cHRzID8gbnVsbCA6IFtdICk7CisgICAgICAgIHJldHVybiBqUXVlcnkubWVyZ2UoIFtdLAorICAg
ICAgICAgICAgKHBhcnNlZC5jYWNoZWFibGUgPyBqUXVlcnkuY2xvbmUoIHBhcnNlZC5mcmFnbWVu
dCApIDogcGFyc2VkLmZyYWdtZW50KS5jaGlsZE5vZGVzICk7CisgICAgfSwKKworICAgIHBhcnNl
SlNPTjogZnVuY3Rpb24oIGRhdGEgKSB7CisgICAgICAgIGlmICggIWRhdGEgfHwgdHlwZW9mIGRh
dGEgIT09ICJzdHJpbmciKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQor
CisgICAgICAgIC8vIE1ha2Ugc3VyZSBsZWFkaW5nL3RyYWlsaW5nIHdoaXRlc3BhY2UgaXMgcmVt
b3ZlZCAoSUUgY2FuJ3QgaGFuZGxlIGl0KQorICAgICAgICBkYXRhID0galF1ZXJ5LnRyaW0oIGRh
dGEgKTsKKworICAgICAgICAvLyBBdHRlbXB0IHRvIHBhcnNlIHVzaW5nIHRoZSBuYXRpdmUgSlNP
TiBwYXJzZXIgZmlyc3QKKyAgICAgICAgaWYgKCB3aW5kb3cuSlNPTiAmJiB3aW5kb3cuSlNPTi5w
YXJzZSApIHsKKyAgICAgICAgICAgIHJldHVybiB3aW5kb3cuSlNPTi5wYXJzZSggZGF0YSApOwor
ICAgICAgICB9CisKKyAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBpbmNvbWluZyBkYXRhIGlzIGFj
dHVhbCBKU09OCisgICAgICAgIC8vIExvZ2ljIGJvcnJvd2VkIGZyb20gaHR0cDovL2pzb24ub3Jn
L2pzb24yLmpzCisgICAgICAgIGlmICggcnZhbGlkY2hhcnMudGVzdCggZGF0YS5yZXBsYWNlKCBy
dmFsaWRlc2NhcGUsICJAIiApCisgICAgICAgICAgICAucmVwbGFjZSggcnZhbGlkdG9rZW5zLCAi
XSIgKQorICAgICAgICAgICAgLnJlcGxhY2UoIHJ2YWxpZGJyYWNlcywgIiIpKSApIHsKKworICAg
ICAgICAgICAgcmV0dXJuICggbmV3IEZ1bmN0aW9uKCAicmV0dXJuICIgKyBkYXRhICkgKSgpOwor
CisgICAgICAgIH0KKyAgICAgICAgalF1ZXJ5LmVycm9yKCAiSW52YWxpZCBKU09OOiAiICsgZGF0
YSApOworICAgIH0sCisKKyAgICAvLyBDcm9zcy1icm93c2VyIHhtbCBwYXJzaW5nCisgICAgcGFy
c2VYTUw6IGZ1bmN0aW9uKCBkYXRhICkgeworICAgICAgICB2YXIgeG1sLCB0bXA7CisgICAgICAg
IGlmICggIWRhdGEgfHwgdHlwZW9mIGRhdGEgIT09ICJzdHJpbmciICkgeworICAgICAgICAgICAg
cmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGlmICgg
d2luZG93LkRPTVBhcnNlciApIHsgLy8gU3RhbmRhcmQKKyAgICAgICAgICAgICAgICB0bXAgPSBu
ZXcgRE9NUGFyc2VyKCk7CisgICAgICAgICAgICAgICAgeG1sID0gdG1wLnBhcnNlRnJvbVN0cmlu
ZyggZGF0YSAsICJ0ZXh0L3htbCIgKTsKKyAgICAgICAgICAgIH0gZWxzZSB7IC8vIElFCisgICAg
ICAgICAgICAgICAgeG1sID0gbmV3IEFjdGl2ZVhPYmplY3QoICJNaWNyb3NvZnQuWE1MRE9NIiAp
OworICAgICAgICAgICAgICAgIHhtbC5hc3luYyA9ICJmYWxzZSI7CisgICAgICAgICAgICAgICAg
eG1sLmxvYWRYTUwoIGRhdGEgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBjYXRjaCggZSAp
IHsKKyAgICAgICAgICAgIHhtbCA9IHVuZGVmaW5lZDsKKyAgICAgICAgfQorICAgICAgICBpZiAo
ICF4bWwgfHwgIXhtbC5kb2N1bWVudEVsZW1lbnQgfHwgeG1sLmdldEVsZW1lbnRzQnlUYWdOYW1l
KCAicGFyc2VyZXJyb3IiICkubGVuZ3RoICkgeworICAgICAgICAgICAgalF1ZXJ5LmVycm9yKCAi
SW52YWxpZCBYTUw6ICIgKyBkYXRhICk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHhtbDsK
KyAgICB9LAorCisgICAgbm9vcDogZnVuY3Rpb24oKSB7fSwKKworICAgIC8vIEV2YWx1YXRlcyBh
IHNjcmlwdCBpbiBhIGdsb2JhbCBjb250ZXh0CisgICAgLy8gV29ya2Fyb3VuZHMgYmFzZWQgb24g
ZmluZGluZ3MgYnkgSmltIERyaXNjb2xsCisgICAgLy8gaHR0cDovL3dlYmxvZ3MuamF2YS5uZXQv
YmxvZy9kcmlzY29sbC9hcmNoaXZlLzIwMDkvMDkvMDgvZXZhbC1qYXZhc2NyaXB0LWdsb2JhbC1j
b250ZXh0CisgICAgZ2xvYmFsRXZhbDogZnVuY3Rpb24oIGRhdGEgKSB7CisgICAgICAgIGlmICgg
ZGF0YSAmJiBjb3JlX3Jub3R3aGl0ZS50ZXN0KCBkYXRhICkgKSB7CisgICAgICAgICAgICAvLyBX
ZSB1c2UgZXhlY1NjcmlwdCBvbiBJbnRlcm5ldCBFeHBsb3JlcgorICAgICAgICAgICAgLy8gV2Ug
dXNlIGFuIGFub255bW91cyBmdW5jdGlvbiBzbyB0aGF0IGNvbnRleHQgaXMgd2luZG93CisgICAg
ICAgICAgICAvLyByYXRoZXIgdGhhbiBqUXVlcnkgaW4gRmlyZWZveAorICAgICAgICAgICAgKCB3
aW5kb3cuZXhlY1NjcmlwdCB8fCBmdW5jdGlvbiggZGF0YSApIHsKKyAgICAgICAgICAgICAgICB3
aW5kb3dbICJldmFsIiBdLmNhbGwoIHdpbmRvdywgZGF0YSApOworICAgICAgICAgICAgfSApKCBk
YXRhICk7CisgICAgICAgIH0KKyAgICB9LAorCisgICAgLy8gQ29udmVydCBkYXNoZWQgdG8gY2Ft
ZWxDYXNlOyB1c2VkIGJ5IHRoZSBjc3MgYW5kIGRhdGEgbW9kdWxlcworICAgIC8vIE1pY3Jvc29m
dCBmb3Jnb3QgdG8gaHVtcCB0aGVpciB2ZW5kb3IgcHJlZml4ICgjOTU3MikKKyAgICBjYW1lbENh
c2U6IGZ1bmN0aW9uKCBzdHJpbmcgKSB7CisgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgg
cm1zUHJlZml4LCAibXMtIiApLnJlcGxhY2UoIHJkYXNoQWxwaGEsIGZjYW1lbENhc2UgKTsKKyAg
ICB9LAorCisgICAgbm9kZU5hbWU6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkgeworICAgICAgICBy
ZXR1cm4gZWxlbS5ub2RlTmFtZSAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5h
bWUudG9Mb3dlckNhc2UoKTsKKyAgICB9LAorCisgICAgLy8gYXJncyBpcyBmb3IgaW50ZXJuYWwg
dXNhZ2Ugb25seQorICAgIGVhY2g6IGZ1bmN0aW9uKCBvYmosIGNhbGxiYWNrLCBhcmdzICkgewor
ICAgICAgICB2YXIgbmFtZSwKKyAgICAgICAgICAgIGkgPSAwLAorICAgICAgICAgICAgbGVuZ3Ro
ID0gb2JqLmxlbmd0aCwKKyAgICAgICAgICAgIGlzT2JqID0gbGVuZ3RoID09PSB1bmRlZmluZWQg
fHwgalF1ZXJ5LmlzRnVuY3Rpb24oIG9iaiApOworCisgICAgICAgIGlmICggYXJncyApIHsKKyAg
ICAgICAgICAgIGlmICggaXNPYmogKSB7CisgICAgICAgICAgICAgICAgZm9yICggbmFtZSBpbiBv
YmogKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICggY2FsbGJhY2suYXBwbHkoIG9ialsgbmFt
ZSBdLCBhcmdzICkgPT09IGZhbHNlICkgeworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgIGZvciAoIDsgaSA8IGxlbmd0aDsgKSB7CisgICAgICAg
ICAgICAgICAgICAgIGlmICggY2FsbGJhY2suYXBwbHkoIG9ialsgaSsrIF0sIGFyZ3MgKSA9PT0g
ZmFsc2UgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAvLyBB
IHNwZWNpYWwsIGZhc3QsIGNhc2UgZm9yIHRoZSBtb3N0IGNvbW1vbiB1c2Ugb2YgZWFjaAorICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKCBpc09iaiApIHsKKyAgICAgICAgICAgICAg
ICBmb3IgKCBuYW1lIGluIG9iaiApIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBjYWxsYmFj
ay5jYWxsKCBvYmpbIG5hbWUgXSwgbmFtZSwgb2JqWyBuYW1lIF0gKSA9PT0gZmFsc2UgKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZm9y
ICggOyBpIDwgbGVuZ3RoOyApIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBjYWxsYmFjay5j
YWxsKCBvYmpbIGkgXSwgaSwgb2JqWyBpKysgXSApID09PSBmYWxzZSApIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG9iajsKKyAg
ICB9LAorCisgICAgLy8gVXNlIG5hdGl2ZSBTdHJpbmcudHJpbSBmdW5jdGlvbiB3aGVyZXZlciBw
b3NzaWJsZQorICAgIHRyaW06IGNvcmVfdHJpbSAmJiAhY29yZV90cmltLmNhbGwoIlx1RkVGRlx4
QTAiKSA/CisgICAgICAgIGZ1bmN0aW9uKCB0ZXh0ICkgeworICAgICAgICAgICAgcmV0dXJuIHRl
eHQgPT0gbnVsbCA/CisgICAgICAgICAgICAgICAgIiIgOgorICAgICAgICAgICAgICAgIGNvcmVf
dHJpbS5jYWxsKCB0ZXh0ICk7CisgICAgICAgIH0gOgorCisgICAgICAgIC8vIE90aGVyd2lzZSB1
c2Ugb3VyIG93biB0cmltbWluZyBmdW5jdGlvbmFsaXR5CisgICAgICAgIGZ1bmN0aW9uKCB0ZXh0
ICkgeworICAgICAgICAgICAgcmV0dXJuIHRleHQgPT0gbnVsbCA/CisgICAgICAgICAgICAgICAg
IiIgOgorICAgICAgICAgICAgICAgICggdGV4dCArICIiICkucmVwbGFjZSggcnRyaW0sICIiICk7
CisgICAgICAgIH0sCisKKyAgICAvLyByZXN1bHRzIGlzIGZvciBpbnRlcm5hbCB1c2FnZSBvbmx5
CisgICAgbWFrZUFycmF5OiBmdW5jdGlvbiggYXJyLCByZXN1bHRzICkgeworICAgICAgICB2YXIg
dHlwZSwKKyAgICAgICAgICAgIHJldCA9IHJlc3VsdHMgfHwgW107CisKKyAgICAgICAgaWYgKCBh
cnIgIT0gbnVsbCApIHsKKyAgICAgICAgICAgIC8vIFRoZSB3aW5kb3csIHN0cmluZ3MgKGFuZCBm
dW5jdGlvbnMpIGFsc28gaGF2ZSAnbGVuZ3RoJworICAgICAgICAgICAgLy8gVHdlYWtlZCBsb2dp
YyBzbGlnaHRseSB0byBoYW5kbGUgQmxhY2tiZXJyeSA0LjcgUmVnRXhwIGlzc3VlcyAjNjkzMAor
ICAgICAgICAgICAgdHlwZSA9IGpRdWVyeS50eXBlKCBhcnIgKTsKKworICAgICAgICAgICAgaWYg
KCBhcnIubGVuZ3RoID09IG51bGwgfHwgdHlwZSA9PT0gInN0cmluZyIgfHwgdHlwZSA9PT0gImZ1
bmN0aW9uIiB8fCB0eXBlID09PSAicmVnZXhwIiB8fCBqUXVlcnkuaXNXaW5kb3coIGFyciApICkg
eworICAgICAgICAgICAgICAgIGNvcmVfcHVzaC5jYWxsKCByZXQsIGFyciApOworICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBqUXVlcnkubWVyZ2UoIHJldCwgYXJyICk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcmV0OworICAgIH0sCisK
KyAgICBpbkFycmF5OiBmdW5jdGlvbiggZWxlbSwgYXJyLCBpICkgeworICAgICAgICB2YXIgbGVu
OworCisgICAgICAgIGlmICggYXJyICkgeworICAgICAgICAgICAgaWYgKCBjb3JlX2luZGV4T2Yg
KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNvcmVfaW5kZXhPZi5jYWxsKCBhcnIsIGVsZW0s
IGkgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbGVuID0gYXJyLmxlbmd0aDsKKyAg
ICAgICAgICAgIGkgPSBpID8gaSA8IDAgPyBNYXRoLm1heCggMCwgbGVuICsgaSApIDogaSA6IDA7
CisKKyAgICAgICAgICAgIGZvciAoIDsgaSA8IGxlbjsgaSsrICkgeworICAgICAgICAgICAgICAg
IC8vIFNraXAgYWNjZXNzaW5nIGluIHNwYXJzZSBhcnJheXMKKyAgICAgICAgICAgICAgICBpZiAo
IGkgaW4gYXJyICYmIGFyclsgaSBdID09PSBlbGVtICkgeworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gaTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwor
ICAgICAgICByZXR1cm4gLTE7CisgICAgfSwKKworICAgIG1lcmdlOiBmdW5jdGlvbiggZmlyc3Qs
IHNlY29uZCApIHsKKyAgICAgICAgdmFyIGwgPSBzZWNvbmQubGVuZ3RoLAorICAgICAgICAgICAg
aSA9IGZpcnN0Lmxlbmd0aCwKKyAgICAgICAgICAgIGogPSAwOworCisgICAgICAgIGlmICggdHlw
ZW9mIGwgPT09ICJudW1iZXIiICkgeworICAgICAgICAgICAgZm9yICggOyBqIDwgbDsgaisrICkg
eworICAgICAgICAgICAgICAgIGZpcnN0WyBpKysgXSA9IHNlY29uZFsgaiBdOworICAgICAgICAg
ICAgfQorCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB3aGlsZSAoIHNlY29uZFtqXSAh
PT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgICAgIGZpcnN0WyBpKysgXSA9IHNlY29uZFsg
aisrIF07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBmaXJzdC5sZW5ndGgg
PSBpOworCisgICAgICAgIHJldHVybiBmaXJzdDsKKyAgICB9LAorCisgICAgZ3JlcDogZnVuY3Rp
b24oIGVsZW1zLCBjYWxsYmFjaywgaW52ICkgeworICAgICAgICB2YXIgcmV0VmFsLAorICAgICAg
ICAgICAgcmV0ID0gW10sCisgICAgICAgICAgICBpID0gMCwKKyAgICAgICAgICAgIGxlbmd0aCA9
IGVsZW1zLmxlbmd0aDsKKyAgICAgICAgaW52ID0gISFpbnY7CisKKyAgICAgICAgLy8gR28gdGhy
b3VnaCB0aGUgYXJyYXksIG9ubHkgc2F2aW5nIHRoZSBpdGVtcworICAgICAgICAvLyB0aGF0IHBh
c3MgdGhlIHZhbGlkYXRvciBmdW5jdGlvbgorICAgICAgICBmb3IgKCA7IGkgPCBsZW5ndGg7IGkr
KyApIHsKKyAgICAgICAgICAgIHJldFZhbCA9ICEhY2FsbGJhY2soIGVsZW1zWyBpIF0sIGkgKTsK
KyAgICAgICAgICAgIGlmICggaW52ICE9PSByZXRWYWwgKSB7CisgICAgICAgICAgICAgICAgcmV0
LnB1c2goIGVsZW1zWyBpIF0gKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg
IHJldHVybiByZXQ7CisgICAgfSwKKworICAgIC8vIGFyZyBpcyBmb3IgaW50ZXJuYWwgdXNhZ2Ug
b25seQorICAgIG1hcDogZnVuY3Rpb24oIGVsZW1zLCBjYWxsYmFjaywgYXJnICkgeworICAgICAg
ICB2YXIgdmFsdWUsIGtleSwKKyAgICAgICAgICAgIHJldCA9IFtdLAorICAgICAgICAgICAgaSA9
IDAsCisgICAgICAgICAgICBsZW5ndGggPSBlbGVtcy5sZW5ndGgsCisgICAgICAgICAgICAvLyBq
cXVlcnkgb2JqZWN0cyBhcmUgdHJlYXRlZCBhcyBhcnJheXMKKyAgICAgICAgICAgIGlzQXJyYXkg
PSBlbGVtcyBpbnN0YW5jZW9mIGpRdWVyeSB8fCBsZW5ndGggIT09IHVuZGVmaW5lZCAmJiB0eXBl
b2YgbGVuZ3RoID09PSAibnVtYmVyIiAmJiAoICggbGVuZ3RoID4gMCAmJiBlbGVtc1sgMCBdICYm
IGVsZW1zWyBsZW5ndGggLTEgXSApIHx8IGxlbmd0aCA9PT0gMCB8fCBqUXVlcnkuaXNBcnJheSgg
ZWxlbXMgKSApIDsKKworICAgICAgICAvLyBHbyB0aHJvdWdoIHRoZSBhcnJheSwgdHJhbnNsYXRp
bmcgZWFjaCBvZiB0aGUgaXRlbXMgdG8gdGhlaXIKKyAgICAgICAgaWYgKCBpc0FycmF5ICkgewor
ICAgICAgICAgICAgZm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7CisgICAgICAgICAgICAgICAg
dmFsdWUgPSBjYWxsYmFjayggZWxlbXNbIGkgXSwgaSwgYXJnICk7CisKKyAgICAgICAgICAgICAg
ICBpZiAoIHZhbHVlICE9IG51bGwgKSB7CisgICAgICAgICAgICAgICAgICAgIHJldFsgcmV0Lmxl
bmd0aCBdID0gdmFsdWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAg
ICAgIC8vIEdvIHRocm91Z2ggZXZlcnkga2V5IG9uIHRoZSBvYmplY3QsCisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBmb3IgKCBrZXkgaW4gZWxlbXMgKSB7CisgICAgICAgICAgICAgICAg
dmFsdWUgPSBjYWxsYmFjayggZWxlbXNbIGtleSBdLCBrZXksIGFyZyApOworCisgICAgICAgICAg
ICAgICAgaWYgKCB2YWx1ZSAhPSBudWxsICkgeworICAgICAgICAgICAgICAgICAgICByZXRbIHJl
dC5sZW5ndGggXSA9IHZhbHVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIC8vIEZsYXR0ZW4gYW55IG5lc3RlZCBhcnJheXMKKyAgICAgICAg
cmV0dXJuIHJldC5jb25jYXQuYXBwbHkoIFtdLCByZXQgKTsKKyAgICB9LAorCisgICAgLy8gQSBn
bG9iYWwgR1VJRCBjb3VudGVyIGZvciBvYmplY3RzCisgICAgZ3VpZDogMSwKKworICAgIC8vIEJp
bmQgYSBmdW5jdGlvbiB0byBhIGNvbnRleHQsIG9wdGlvbmFsbHkgcGFydGlhbGx5IGFwcGx5aW5n
IGFueQorICAgIC8vIGFyZ3VtZW50cy4KKyAgICBwcm94eTogZnVuY3Rpb24oIGZuLCBjb250ZXh0
ICkgeworICAgICAgICB2YXIgdG1wLCBhcmdzLCBwcm94eTsKKworICAgICAgICBpZiAoIHR5cGVv
ZiBjb250ZXh0ID09PSAic3RyaW5nIiApIHsKKyAgICAgICAgICAgIHRtcCA9IGZuWyBjb250ZXh0
IF07CisgICAgICAgICAgICBjb250ZXh0ID0gZm47CisgICAgICAgICAgICBmbiA9IHRtcDsKKyAg
ICAgICAgfQorCisgICAgICAgIC8vIFF1aWNrIGNoZWNrIHRvIGRldGVybWluZSBpZiB0YXJnZXQg
aXMgY2FsbGFibGUsIGluIHRoZSBzcGVjCisgICAgICAgIC8vIHRoaXMgdGhyb3dzIGEgVHlwZUVy
cm9yLCBidXQgd2Ugd2lsbCBqdXN0IHJldHVybiB1bmRlZmluZWQuCisgICAgICAgIGlmICggIWpR
dWVyeS5pc0Z1bmN0aW9uKCBmbiApICkgeworICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsK
KyAgICAgICAgfQorCisgICAgICAgIC8vIFNpbXVsYXRlZCBiaW5kCisgICAgICAgIGFyZ3MgPSBj
b3JlX3NsaWNlLmNhbGwoIGFyZ3VtZW50cywgMiApOworICAgICAgICBwcm94eSA9IGZ1bmN0aW9u
KCkgeworICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KCBjb250ZXh0LCBhcmdzLmNvbmNhdCgg
Y29yZV9zbGljZS5jYWxsKCBhcmd1bWVudHMgKSApICk7CisgICAgICAgIH07CisKKyAgICAgICAg
Ly8gU2V0IHRoZSBndWlkIG9mIHVuaXF1ZSBoYW5kbGVyIHRvIHRoZSBzYW1lIG9mIG9yaWdpbmFs
IGhhbmRsZXIsIHNvIGl0IGNhbiBiZSByZW1vdmVkCisgICAgICAgIHByb3h5Lmd1aWQgPSBmbi5n
dWlkID0gZm4uZ3VpZCB8fCBqUXVlcnkuZ3VpZCsrOworCisgICAgICAgIHJldHVybiBwcm94eTsK
KyAgICB9LAorCisgICAgLy8gTXVsdGlmdW5jdGlvbmFsIG1ldGhvZCB0byBnZXQgYW5kIHNldCB2
YWx1ZXMgb2YgYSBjb2xsZWN0aW9uCisgICAgLy8gVGhlIHZhbHVlL3MgY2FuIG9wdGlvbmFsbHkg
YmUgZXhlY3V0ZWQgaWYgaXQncyBhIGZ1bmN0aW9uCisgICAgYWNjZXNzOiBmdW5jdGlvbiggZWxl
bXMsIGZuLCBrZXksIHZhbHVlLCBjaGFpbmFibGUsIGVtcHR5R2V0LCBwYXNzICkgeworICAgICAg
ICB2YXIgZXhlYywKKyAgICAgICAgICAgIGJ1bGsgPSBrZXkgPT0gbnVsbCwKKyAgICAgICAgICAg
IGkgPSAwLAorICAgICAgICAgICAgbGVuZ3RoID0gZWxlbXMubGVuZ3RoOworCisgICAgICAgIC8v
IFNldHMgbWFueSB2YWx1ZXMKKyAgICAgICAgaWYgKCBrZXkgJiYgdHlwZW9mIGtleSA9PT0gIm9i
amVjdCIgKSB7CisgICAgICAgICAgICBmb3IgKCBpIGluIGtleSApIHsKKyAgICAgICAgICAgICAg
ICBqUXVlcnkuYWNjZXNzKCBlbGVtcywgZm4sIGksIGtleVtpXSwgMSwgZW1wdHlHZXQsIHZhbHVl
ICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjaGFpbmFibGUgPSAxOworCisgICAgICAg
IC8vIFNldHMgb25lIHZhbHVlCisgICAgICAgIH0gZWxzZSBpZiAoIHZhbHVlICE9PSB1bmRlZmlu
ZWQgKSB7CisgICAgICAgICAgICAvLyBPcHRpb25hbGx5LCBmdW5jdGlvbiB2YWx1ZXMgZ2V0IGV4
ZWN1dGVkIGlmIGV4ZWMgaXMgdHJ1ZQorICAgICAgICAgICAgZXhlYyA9IHBhc3MgPT09IHVuZGVm
aW5lZCAmJiBqUXVlcnkuaXNGdW5jdGlvbiggdmFsdWUgKTsKKworICAgICAgICAgICAgaWYgKCBi
dWxrICkgeworICAgICAgICAgICAgICAgIC8vIEJ1bGsgb3BlcmF0aW9ucyBvbmx5IGl0ZXJhdGUg
d2hlbiBleGVjdXRpbmcgZnVuY3Rpb24gdmFsdWVzCisgICAgICAgICAgICAgICAgaWYgKCBleGVj
ICkgeworICAgICAgICAgICAgICAgICAgICBleGVjID0gZm47CisgICAgICAgICAgICAgICAgICAg
IGZuID0gZnVuY3Rpb24oIGVsZW0sIGtleSwgdmFsdWUgKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZXhlYy5jYWxsKCBqUXVlcnkoIGVsZW0gKSwgdmFsdWUgKTsKKyAgICAgICAg
ICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgIC8vIE90aGVyd2lzZSB0aGV5IHJ1biBh
Z2FpbnN0IHRoZSBlbnRpcmUgc2V0CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgZm4uY2FsbCggZWxlbXMsIHZhbHVlICk7CisgICAgICAgICAgICAgICAgICAg
IGZuID0gbnVsbDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGlmICggZm4gKSB7CisgICAgICAgICAgICAgICAgZm9yICg7IGkgPCBsZW5ndGg7IGkrKyAp
IHsKKyAgICAgICAgICAgICAgICAgICAgZm4oIGVsZW1zW2ldLCBrZXksIGV4ZWMgPyB2YWx1ZS5j
YWxsKCBlbGVtc1tpXSwgaSwgZm4oIGVsZW1zW2ldLCBrZXkgKSApIDogdmFsdWUsIHBhc3MgKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNoYWluYWJs
ZSA9IDE7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gY2hhaW5hYmxlID8KKyAgICAgICAg
ICAgIGVsZW1zIDoKKworICAgICAgICAgICAgLy8gR2V0cworICAgICAgICAgICAgYnVsayA/Cisg
ICAgICAgICAgICAgICAgZm4uY2FsbCggZWxlbXMgKSA6CisgICAgICAgICAgICAgICAgbGVuZ3Ro
ID8gZm4oIGVsZW1zWzBdLCBrZXkgKSA6IGVtcHR5R2V0OworICAgIH0sCisKKyAgICBub3c6IGZ1
bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gKCBuZXcgRGF0ZSgpICkuZ2V0VGltZSgpOworICAg
IH0KK30pOworCitqUXVlcnkucmVhZHkucHJvbWlzZSA9IGZ1bmN0aW9uKCBvYmogKSB7CisgICAg
aWYgKCAhcmVhZHlMaXN0ICkgeworCisgICAgICAgIHJlYWR5TGlzdCA9IGpRdWVyeS5EZWZlcnJl
ZCgpOworCisgICAgICAgIC8vIENhdGNoIGNhc2VzIHdoZXJlICQoZG9jdW1lbnQpLnJlYWR5KCkg
aXMgY2FsbGVkIGFmdGVyIHRoZSBicm93c2VyIGV2ZW50IGhhcyBhbHJlYWR5IG9jY3VycmVkLgor
ICAgICAgICAvLyB3ZSBvbmNlIHRyaWVkIHRvIHVzZSByZWFkeVN0YXRlICJpbnRlcmFjdGl2ZSIg
aGVyZSwgYnV0IGl0IGNhdXNlZCBpc3N1ZXMgbGlrZSB0aGUgb25lCisgICAgICAgIC8vIGRpc2Nv
dmVyZWQgYnkgQ2hyaXNTIGhlcmU6IGh0dHA6Ly9idWdzLmpxdWVyeS5jb20vdGlja2V0LzEyMjgy
I2NvbW1lbnQ6MTUKKyAgICAgICAgaWYgKCBkb2N1bWVudC5yZWFkeVN0YXRlID09PSAiY29tcGxl
dGUiICkgeworICAgICAgICAgICAgLy8gSGFuZGxlIGl0IGFzeW5jaHJvbm91c2x5IHRvIGFsbG93
IHNjcmlwdHMgdGhlIG9wcG9ydHVuaXR5IHRvIGRlbGF5IHJlYWR5CisgICAgICAgICAgICBzZXRU
aW1lb3V0KCBqUXVlcnkucmVhZHksIDEgKTsKKworICAgICAgICAvLyBTdGFuZGFyZHMtYmFzZWQg
YnJvd3NlcnMgc3VwcG9ydCBET01Db250ZW50TG9hZGVkCisgICAgICAgIH0gZWxzZSBpZiAoIGRv
Y3VtZW50LmFkZEV2ZW50TGlzdGVuZXIgKSB7CisgICAgICAgICAgICAvLyBVc2UgdGhlIGhhbmR5
IGV2ZW50IGNhbGxiYWNrCisgICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCAi
RE9NQ29udGVudExvYWRlZCIsIERPTUNvbnRlbnRMb2FkZWQsIGZhbHNlICk7CisKKyAgICAgICAg
ICAgIC8vIEEgZmFsbGJhY2sgdG8gd2luZG93Lm9ubG9hZCwgdGhhdCB3aWxsIGFsd2F5cyB3b3Jr
CisgICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciggImxvYWQiLCBqUXVlcnkucmVh
ZHksIGZhbHNlICk7CisKKyAgICAgICAgLy8gSWYgSUUgZXZlbnQgbW9kZWwgaXMgdXNlZAorICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gRW5zdXJlIGZpcmluZyBiZWZvcmUgb25sb2Fk
LCBtYXliZSBsYXRlIGJ1dCBzYWZlIGFsc28gZm9yIGlmcmFtZXMKKyAgICAgICAgICAgIGRvY3Vt
ZW50LmF0dGFjaEV2ZW50KCAib25yZWFkeXN0YXRlY2hhbmdlIiwgRE9NQ29udGVudExvYWRlZCAp
OworCisgICAgICAgICAgICAvLyBBIGZhbGxiYWNrIHRvIHdpbmRvdy5vbmxvYWQsIHRoYXQgd2ls
bCBhbHdheXMgd29yaworICAgICAgICAgICAgd2luZG93LmF0dGFjaEV2ZW50KCAib25sb2FkIiwg
alF1ZXJ5LnJlYWR5ICk7CisKKyAgICAgICAgICAgIC8vIElmIElFIGFuZCBub3QgYSBmcmFtZQor
ICAgICAgICAgICAgLy8gY29udGludWFsbHkgY2hlY2sgdG8gc2VlIGlmIHRoZSBkb2N1bWVudCBp
cyByZWFkeQorICAgICAgICAgICAgdmFyIHRvcCA9IGZhbHNlOworCisgICAgICAgICAgICB0cnkg
eworICAgICAgICAgICAgICAgIHRvcCA9IHdpbmRvdy5mcmFtZUVsZW1lbnQgPT0gbnVsbCAmJiBk
b2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7CisgICAgICAgICAgICB9IGNhdGNoKGUpIHt9CisKKyAg
ICAgICAgICAgIGlmICggdG9wICYmIHRvcC5kb1Njcm9sbCApIHsKKyAgICAgICAgICAgICAgICAo
ZnVuY3Rpb24gZG9TY3JvbGxDaGVjaygpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCAhalF1
ZXJ5LmlzUmVhZHkgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gVXNlIHRoZSB0cmljayBieSBEaWVnbyBQZXJpbmkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBodHRwOi8vamF2YXNjcmlwdC5ud2JveC5jb20v
SUVDb250ZW50TG9hZGVkLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcC5kb1Njcm9s
bCgibGVmdCIpOworICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaChlKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoIGRvU2Nyb2xsQ2hlY2ssIDUw
ICk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGFuZCBleGVjdXRlIGFueSB3YWl0aW5nIGZ1bmN0aW9ucworICAgICAgICAgICAgICAgICAg
ICAgICAgalF1ZXJ5LnJlYWR5KCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9KSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBy
ZWFkeUxpc3QucHJvbWlzZSggb2JqICk7Cit9OworCisvLyBQb3B1bGF0ZSB0aGUgY2xhc3MydHlw
ZSBtYXAKK2pRdWVyeS5lYWNoKCJCb29sZWFuIE51bWJlciBTdHJpbmcgRnVuY3Rpb24gQXJyYXkg
RGF0ZSBSZWdFeHAgT2JqZWN0Ii5zcGxpdCgiICIpLCBmdW5jdGlvbihpLCBuYW1lKSB7CisgICAg
Y2xhc3MydHlwZVsgIltvYmplY3QgIiArIG5hbWUgKyAiXSIgXSA9IG5hbWUudG9Mb3dlckNhc2Uo
KTsKK30pOworCisvLyBBbGwgalF1ZXJ5IG9iamVjdHMgc2hvdWxkIHBvaW50IGJhY2sgdG8gdGhl
c2UKK3Jvb3RqUXVlcnkgPSBqUXVlcnkoZG9jdW1lbnQpOworLy8gU3RyaW5nIHRvIE9iamVjdCBv
cHRpb25zIGZvcm1hdCBjYWNoZQordmFyIG9wdGlvbnNDYWNoZSA9IHt9OworCisvLyBDb252ZXJ0
IFN0cmluZy1mb3JtYXR0ZWQgb3B0aW9ucyBpbnRvIE9iamVjdC1mb3JtYXR0ZWQgb25lcyBhbmQg
c3RvcmUgaW4gY2FjaGUKK2Z1bmN0aW9uIGNyZWF0ZU9wdGlvbnMoIG9wdGlvbnMgKSB7CisgICAg
dmFyIG9iamVjdCA9IG9wdGlvbnNDYWNoZVsgb3B0aW9ucyBdID0ge307CisgICAgalF1ZXJ5LmVh
Y2goIG9wdGlvbnMuc3BsaXQoIGNvcmVfcnNwYWNlICksIGZ1bmN0aW9uKCBfLCBmbGFnICkgewor
ICAgICAgICBvYmplY3RbIGZsYWcgXSA9IHRydWU7CisgICAgfSk7CisgICAgcmV0dXJuIG9iamVj
dDsKK30KKworLyoKKyAqIENyZWF0ZSBhIGNhbGxiYWNrIGxpc3QgdXNpbmcgdGhlIGZvbGxvd2lu
ZyBwYXJhbWV0ZXJzOgorICoKKyAqICAgIG9wdGlvbnM6IGFuIG9wdGlvbmFsIGxpc3Qgb2Ygc3Bh
Y2Utc2VwYXJhdGVkIG9wdGlvbnMgdGhhdCB3aWxsIGNoYW5nZSBob3cKKyAqICAgICAgICAgICAg
dGhlIGNhbGxiYWNrIGxpc3QgYmVoYXZlcyBvciBhIG1vcmUgdHJhZGl0aW9uYWwgb3B0aW9uIG9i
amVjdAorICoKKyAqIEJ5IGRlZmF1bHQgYSBjYWxsYmFjayBsaXN0IHdpbGwgYWN0IGxpa2UgYW4g
ZXZlbnQgY2FsbGJhY2sgbGlzdCBhbmQgY2FuIGJlCisgKiAiZmlyZWQiIG11bHRpcGxlIHRpbWVz
LgorICoKKyAqIFBvc3NpYmxlIG9wdGlvbnM6CisgKgorICogICAgb25jZTogICAgICAgICAgICB3
aWxsIGVuc3VyZSB0aGUgY2FsbGJhY2sgbGlzdCBjYW4gb25seSBiZSBmaXJlZCBvbmNlIChsaWtl
IGEgRGVmZXJyZWQpCisgKgorICogICAgbWVtb3J5OiAgICAgICAgICAgIHdpbGwga2VlcCB0cmFj
ayBvZiBwcmV2aW91cyB2YWx1ZXMgYW5kIHdpbGwgY2FsbCBhbnkgY2FsbGJhY2sgYWRkZWQKKyAq
ICAgICAgICAgICAgICAgICAgICBhZnRlciB0aGUgbGlzdCBoYXMgYmVlbiBmaXJlZCByaWdodCBh
d2F5IHdpdGggdGhlIGxhdGVzdCAibWVtb3JpemVkIgorICogICAgICAgICAgICAgICAgICAgIHZh
bHVlcyAobGlrZSBhIERlZmVycmVkKQorICoKKyAqICAgIHVuaXF1ZTogICAgICAgICAgICB3aWxs
IGVuc3VyZSBhIGNhbGxiYWNrIGNhbiBvbmx5IGJlIGFkZGVkIG9uY2UgKG5vIGR1cGxpY2F0ZSBp
biB0aGUgbGlzdCkKKyAqCisgKiAgICBzdG9wT25GYWxzZTogICAgaW50ZXJydXB0IGNhbGxpbmdz
IHdoZW4gYSBjYWxsYmFjayByZXR1cm5zIGZhbHNlCisgKgorICovCitqUXVlcnkuQ2FsbGJhY2tz
ID0gZnVuY3Rpb24oIG9wdGlvbnMgKSB7CisKKyAgICAvLyBDb252ZXJ0IG9wdGlvbnMgZnJvbSBT
dHJpbmctZm9ybWF0dGVkIHRvIE9iamVjdC1mb3JtYXR0ZWQgaWYgbmVlZGVkCisgICAgLy8gKHdl
IGNoZWNrIGluIGNhY2hlIGZpcnN0KQorICAgIG9wdGlvbnMgPSB0eXBlb2Ygb3B0aW9ucyA9PT0g
InN0cmluZyIgPworICAgICAgICAoIG9wdGlvbnNDYWNoZVsgb3B0aW9ucyBdIHx8IGNyZWF0ZU9w
dGlvbnMoIG9wdGlvbnMgKSApIDoKKyAgICAgICAgalF1ZXJ5LmV4dGVuZCgge30sIG9wdGlvbnMg
KTsKKworICAgIHZhciAvLyBMYXN0IGZpcmUgdmFsdWUgKGZvciBub24tZm9yZ2V0dGFibGUgbGlz
dHMpCisgICAgICAgIG1lbW9yeSwKKyAgICAgICAgLy8gRmxhZyB0byBrbm93IGlmIGxpc3Qgd2Fz
IGFscmVhZHkgZmlyZWQKKyAgICAgICAgZmlyZWQsCisgICAgICAgIC8vIEZsYWcgdG8ga25vdyBp
ZiBsaXN0IGlzIGN1cnJlbnRseSBmaXJpbmcKKyAgICAgICAgZmlyaW5nLAorICAgICAgICAvLyBG
aXJzdCBjYWxsYmFjayB0byBmaXJlICh1c2VkIGludGVybmFsbHkgYnkgYWRkIGFuZCBmaXJlV2l0
aCkKKyAgICAgICAgZmlyaW5nU3RhcnQsCisgICAgICAgIC8vIEVuZCBvZiB0aGUgbG9vcCB3aGVu
IGZpcmluZworICAgICAgICBmaXJpbmdMZW5ndGgsCisgICAgICAgIC8vIEluZGV4IG9mIGN1cnJl
bnRseSBmaXJpbmcgY2FsbGJhY2sgKG1vZGlmaWVkIGJ5IHJlbW92ZSBpZiBuZWVkZWQpCisgICAg
ICAgIGZpcmluZ0luZGV4LAorICAgICAgICAvLyBBY3R1YWwgY2FsbGJhY2sgbGlzdAorICAgICAg
ICBsaXN0ID0gW10sCisgICAgICAgIC8vIFN0YWNrIG9mIGZpcmUgY2FsbHMgZm9yIHJlcGVhdGFi
bGUgbGlzdHMKKyAgICAgICAgc3RhY2sgPSAhb3B0aW9ucy5vbmNlICYmIFtdLAorICAgICAgICAv
LyBGaXJlIGNhbGxiYWNrcworICAgICAgICBmaXJlID0gZnVuY3Rpb24oIGRhdGEgKSB7CisgICAg
ICAgICAgICBtZW1vcnkgPSBvcHRpb25zLm1lbW9yeSAmJiBkYXRhOworICAgICAgICAgICAgZmly
ZWQgPSB0cnVlOworICAgICAgICAgICAgZmlyaW5nSW5kZXggPSBmaXJpbmdTdGFydCB8fCAwOwor
ICAgICAgICAgICAgZmlyaW5nU3RhcnQgPSAwOworICAgICAgICAgICAgZmlyaW5nTGVuZ3RoID0g
bGlzdC5sZW5ndGg7CisgICAgICAgICAgICBmaXJpbmcgPSB0cnVlOworICAgICAgICAgICAgZm9y
ICggOyBsaXN0ICYmIGZpcmluZ0luZGV4IDwgZmlyaW5nTGVuZ3RoOyBmaXJpbmdJbmRleCsrICkg
eworICAgICAgICAgICAgICAgIGlmICggbGlzdFsgZmlyaW5nSW5kZXggXS5hcHBseSggZGF0YVsg
MCBdLCBkYXRhWyAxIF0gKSA9PT0gZmFsc2UgJiYgb3B0aW9ucy5zdG9wT25GYWxzZSApIHsKKyAg
ICAgICAgICAgICAgICAgICAgbWVtb3J5ID0gZmFsc2U7IC8vIFRvIHByZXZlbnQgZnVydGhlciBj
YWxscyB1c2luZyBhZGQKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZmlyaW5nID0gZmFsc2U7CisgICAgICAg
ICAgICBpZiAoIGxpc3QgKSB7CisgICAgICAgICAgICAgICAgaWYgKCBzdGFjayApIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCBzdGFjay5sZW5ndGggKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBmaXJlKCBzdGFjay5zaGlmdCgpICk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9IGVsc2UgaWYgKCBtZW1vcnkgKSB7CisgICAgICAgICAgICAgICAgICAgIGxp
c3QgPSBbXTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBz
ZWxmLmRpc2FibGUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0sCisgICAgICAgIC8vIEFjdHVhbCBDYWxsYmFja3Mgb2JqZWN0CisgICAgICAgIHNlbGYgPSB7
CisgICAgICAgICAgICAvLyBBZGQgYSBjYWxsYmFjayBvciBhIGNvbGxlY3Rpb24gb2YgY2FsbGJh
Y2tzIHRvIHRoZSBsaXN0CisgICAgICAgICAgICBhZGQ6IGZ1bmN0aW9uKCkgeworICAgICAgICAg
ICAgICAgIGlmICggbGlzdCApIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gRmlyc3QsIHdlIHNh
dmUgdGhlIGN1cnJlbnQgbGVuZ3RoCisgICAgICAgICAgICAgICAgICAgIHZhciBzdGFydCA9IGxp
c3QubGVuZ3RoOworICAgICAgICAgICAgICAgICAgICAoZnVuY3Rpb24gYWRkKCBhcmdzICkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmVhY2goIGFyZ3MsIGZ1bmN0aW9uKCBfLCBh
cmcgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHR5cGUgPSBqUXVlcnkudHlw
ZSggYXJnICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0eXBlID09PSAiZnVu
Y3Rpb24iICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFvcHRpb25z
LnVuaXF1ZSB8fCAhc2VsZi5oYXMoIGFyZyApICkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbGlzdC5wdXNoKCBhcmcgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIGFyZyAmJiBh
cmcubGVuZ3RoICYmIHR5cGUgIT09ICJzdHJpbmciICkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBJbnNwZWN0IHJlY3Vyc2l2ZWx5CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGFkZCggYXJnICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgIH0pKCBhcmd1bWVu
dHMgKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gRG8gd2UgbmVlZCB0byBhZGQgdGhlIGNhbGxi
YWNrcyB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgLy8gY3VycmVudCBmaXJpbmcgYmF0Y2g/
CisgICAgICAgICAgICAgICAgICAgIGlmICggZmlyaW5nICkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgZmlyaW5nTGVuZ3RoID0gbGlzdC5sZW5ndGg7CisgICAgICAgICAgICAgICAgICAgIC8v
IFdpdGggbWVtb3J5LCBpZiB3ZSdyZSBub3QgZmlyaW5nIHRoZW4KKyAgICAgICAgICAgICAgICAg
ICAgLy8gd2Ugc2hvdWxkIGNhbGwgcmlnaHQgYXdheQorICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgaWYgKCBtZW1vcnkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmaXJpbmdTdGFydCA9
IHN0YXJ0OworICAgICAgICAgICAgICAgICAgICAgICAgZmlyZSggbWVtb3J5ICk7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJu
IHRoaXM7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgLy8gUmVtb3ZlIGEgY2FsbGJhY2sg
ZnJvbSB0aGUgbGlzdAorICAgICAgICAgICAgcmVtb3ZlOiBmdW5jdGlvbigpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoIGxpc3QgKSB7CisgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5lYWNoKCBh
cmd1bWVudHMsIGZ1bmN0aW9uKCBfLCBhcmcgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2
YXIgaW5kZXg7CisgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSggKCBpbmRleCA9IGpRdWVy
eS5pbkFycmF5KCBhcmcsIGxpc3QsIGluZGV4ICkgKSA+IC0xICkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGxpc3Quc3BsaWNlKCBpbmRleCwgMSApOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIEhhbmRsZSBmaXJpbmcgaW5kZXhlcworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggZmlyaW5nICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIGluZGV4IDw9IGZpcmluZ0xlbmd0aCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZpcmluZ0xlbmd0aC0tOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaW5kZXggPD0gZmlyaW5n
SW5kZXggKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJpbmdJbmRl
eC0tOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICB9KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7
CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgLy8gQ29udHJvbCBpZiBhIGdpdmVuIGNhbGxi
YWNrIGlzIGluIHRoZSBsaXN0CisgICAgICAgICAgICBoYXM6IGZ1bmN0aW9uKCBmbiApIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5LmluQXJyYXkoIGZuLCBsaXN0ICkgPiAtMTsKKyAg
ICAgICAgICAgIH0sCisgICAgICAgICAgICAvLyBSZW1vdmUgYWxsIGNhbGxiYWNrcyBmcm9tIHRo
ZSBsaXN0CisgICAgICAgICAgICBlbXB0eTogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAg
bGlzdCA9IFtdOworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgfSwK
KyAgICAgICAgICAgIC8vIEhhdmUgdGhlIGxpc3QgZG8gbm90aGluZyBhbnltb3JlCisgICAgICAg
ICAgICBkaXNhYmxlOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBsaXN0ID0gc3RhY2sg
PSBtZW1vcnkgPSB1bmRlZmluZWQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAg
ICAgICAgICB9LAorICAgICAgICAgICAgLy8gSXMgaXQgZGlzYWJsZWQ/CisgICAgICAgICAgICBk
aXNhYmxlZDogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuICFsaXN0OworICAg
ICAgICAgICAgfSwKKyAgICAgICAgICAgIC8vIExvY2sgdGhlIGxpc3QgaW4gaXRzIGN1cnJlbnQg
c3RhdGUKKyAgICAgICAgICAgIGxvY2s6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHN0
YWNrID0gdW5kZWZpbmVkOworICAgICAgICAgICAgICAgIGlmICggIW1lbW9yeSApIHsKKyAgICAg
ICAgICAgICAgICAgICAgc2VsZi5kaXNhYmxlKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIC8vIElz
IGl0IGxvY2tlZD8KKyAgICAgICAgICAgIGxvY2tlZDogZnVuY3Rpb24oKSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuICFzdGFjazsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICAvLyBDYWxs
IGFsbCBjYWxsYmFja3Mgd2l0aCB0aGUgZ2l2ZW4gY29udGV4dCBhbmQgYXJndW1lbnRzCisgICAg
ICAgICAgICBmaXJlV2l0aDogZnVuY3Rpb24oIGNvbnRleHQsIGFyZ3MgKSB7CisgICAgICAgICAg
ICAgICAgYXJncyA9IGFyZ3MgfHwgW107CisgICAgICAgICAgICAgICAgYXJncyA9IFsgY29udGV4
dCwgYXJncy5zbGljZSA/IGFyZ3Muc2xpY2UoKSA6IGFyZ3MgXTsKKyAgICAgICAgICAgICAgICBp
ZiAoIGxpc3QgJiYgKCAhZmlyZWQgfHwgc3RhY2sgKSApIHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKCBmaXJpbmcgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKCBhcmdz
ICk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBmaXJlKCBhcmdzICk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICB9LAorICAgICAgICAg
ICAgLy8gQ2FsbCBhbGwgdGhlIGNhbGxiYWNrcyB3aXRoIHRoZSBnaXZlbiBhcmd1bWVudHMKKyAg
ICAgICAgICAgIGZpcmU6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHNlbGYuZmlyZVdp
dGgoIHRoaXMsIGFyZ3VtZW50cyApOworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOworICAg
ICAgICAgICAgfSwKKyAgICAgICAgICAgIC8vIFRvIGtub3cgaWYgdGhlIGNhbGxiYWNrcyBoYXZl
IGFscmVhZHkgYmVlbiBjYWxsZWQgYXQgbGVhc3Qgb25jZQorICAgICAgICAgICAgZmlyZWQ6IGZ1
bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHJldHVybiAhIWZpcmVkOworICAgICAgICAgICAg
fQorICAgICAgICB9OworCisgICAgcmV0dXJuIHNlbGY7Cit9OworalF1ZXJ5LmV4dGVuZCh7CisK
KyAgICBEZWZlcnJlZDogZnVuY3Rpb24oIGZ1bmMgKSB7CisgICAgICAgIHZhciB0dXBsZXMgPSBb
CisgICAgICAgICAgICAgICAgLy8gYWN0aW9uLCBhZGQgbGlzdGVuZXIsIGxpc3RlbmVyIGxpc3Qs
IGZpbmFsIHN0YXRlCisgICAgICAgICAgICAgICAgWyAicmVzb2x2ZSIsICJkb25lIiwgalF1ZXJ5
LkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSwgInJlc29sdmVkIiBdLAorICAgICAgICAgICAgICAg
IFsgInJlamVjdCIsICJmYWlsIiwgalF1ZXJ5LkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSwgInJl
amVjdGVkIiBdLAorICAgICAgICAgICAgICAgIFsgIm5vdGlmeSIsICJwcm9ncmVzcyIsIGpRdWVy
eS5DYWxsYmFja3MoIm1lbW9yeSIpIF0KKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICBzdGF0
ZSA9ICJwZW5kaW5nIiwKKyAgICAgICAgICAgIHByb21pc2UgPSB7CisgICAgICAgICAgICAgICAg
c3RhdGU6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGU7Cisg
ICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICBhbHdheXM6IGZ1bmN0aW9uKCkgewor
ICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5kb25lKCBhcmd1bWVudHMgKS5mYWlsKCBhcmd1
bWVudHMgKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICAg
ICAgfSwKKyAgICAgICAgICAgICAgICB0aGVuOiBmdW5jdGlvbiggLyogZm5Eb25lLCBmbkZhaWws
IGZuUHJvZ3Jlc3MgKi8gKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBmbnMgPSBhcmd1bWVu
dHM7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkuRGVmZXJyZWQoZnVuY3Rpb24o
IG5ld0RlZmVyICkgeworICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmVhY2goIHR1cGxl
cywgZnVuY3Rpb24oIGksIHR1cGxlICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZh
ciBhY3Rpb24gPSB0dXBsZVsgMCBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
biA9IGZuc1sgaSBdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRlZmVycmVkWyBk
b25lIHwgZmFpbCB8IHByb2dyZXNzIF0gZm9yIGZvcndhcmRpbmcgYWN0aW9ucyB0byBuZXdEZWZl
cgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkWyB0dXBsZVsxXSBdKCBqUXVl
cnkuaXNGdW5jdGlvbiggZm4gKSA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1
bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJldHVy
bmVkID0gZm4uYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCByZXR1cm5lZCAmJiBqUXVlcnkuaXNGdW5jdGlvbiggcmV0dXJu
ZWQucHJvbWlzZSApICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybmVkLnByb21pc2UoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAuZG9uZSggbmV3RGVmZXIucmVzb2x2ZSApCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC5mYWlsKCBuZXdEZWZlci5yZWplY3QgKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucHJvZ3Jlc3MoIG5ld0RlZmVyLm5v
dGlmeSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdEZWZlclsgYWN0aW9uICsg
IldpdGgiIF0oIHRoaXMgPT09IGRlZmVycmVkID8gbmV3RGVmZXIgOiB0aGlzLCBbIHJldHVybmVk
IF0gKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5ld0RlZmVyWyBhY3Rpb24gXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZucyA9IG51
bGw7CisgICAgICAgICAgICAgICAgICAgIH0pLnByb21pc2UoKTsKKyAgICAgICAgICAgICAgICB9
LAorICAgICAgICAgICAgICAgIC8vIEdldCBhIHByb21pc2UgZm9yIHRoaXMgZGVmZXJyZWQKKyAg
ICAgICAgICAgICAgICAvLyBJZiBvYmogaXMgcHJvdmlkZWQsIHRoZSBwcm9taXNlIGFzcGVjdCBp
cyBhZGRlZCB0byB0aGUgb2JqZWN0CisgICAgICAgICAgICAgICAgcHJvbWlzZTogZnVuY3Rpb24o
IG9iaiApIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iaiAhPSBudWxsID8galF1ZXJ5
LmV4dGVuZCggb2JqLCBwcm9taXNlICkgOiBwcm9taXNlOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0sCisgICAgICAgICAgICBkZWZlcnJlZCA9IHt9OworCisgICAgICAgIC8vIEtl
ZXAgcGlwZSBmb3IgYmFjay1jb21wYXQKKyAgICAgICAgcHJvbWlzZS5waXBlID0gcHJvbWlzZS50
aGVuOworCisgICAgICAgIC8vIEFkZCBsaXN0LXNwZWNpZmljIG1ldGhvZHMKKyAgICAgICAgalF1
ZXJ5LmVhY2goIHR1cGxlcywgZnVuY3Rpb24oIGksIHR1cGxlICkgeworICAgICAgICAgICAgdmFy
IGxpc3QgPSB0dXBsZVsgMiBdLAorICAgICAgICAgICAgICAgIHN0YXRlU3RyaW5nID0gdHVwbGVb
IDMgXTsKKworICAgICAgICAgICAgLy8gcHJvbWlzZVsgZG9uZSB8IGZhaWwgfCBwcm9ncmVzcyBd
ID0gbGlzdC5hZGQKKyAgICAgICAgICAgIHByb21pc2VbIHR1cGxlWzFdIF0gPSBsaXN0LmFkZDsK
KworICAgICAgICAgICAgLy8gSGFuZGxlIHN0YXRlCisgICAgICAgICAgICBpZiAoIHN0YXRlU3Ry
aW5nICkgeworICAgICAgICAgICAgICAgIGxpc3QuYWRkKGZ1bmN0aW9uKCkgeworICAgICAgICAg
ICAgICAgICAgICAvLyBzdGF0ZSA9IFsgcmVzb2x2ZWQgfCByZWplY3RlZCBdCisgICAgICAgICAg
ICAgICAgICAgIHN0YXRlID0gc3RhdGVTdHJpbmc7CisKKyAgICAgICAgICAgICAgICAvLyBbIHJl
amVjdF9saXN0IHwgcmVzb2x2ZV9saXN0IF0uZGlzYWJsZTsgcHJvZ3Jlc3NfbGlzdC5sb2NrCisg
ICAgICAgICAgICAgICAgfSwgdHVwbGVzWyBpIF4gMSBdWyAyIF0uZGlzYWJsZSwgdHVwbGVzWyAy
IF1bIDIgXS5sb2NrICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIGRlZmVycmVk
WyByZXNvbHZlIHwgcmVqZWN0IHwgbm90aWZ5IF0gPSBsaXN0LmZpcmUKKyAgICAgICAgICAgIGRl
ZmVycmVkWyB0dXBsZVswXSBdID0gbGlzdC5maXJlOworICAgICAgICAgICAgZGVmZXJyZWRbIHR1
cGxlWzBdICsgIldpdGgiIF0gPSBsaXN0LmZpcmVXaXRoOworICAgICAgICB9KTsKKworICAgICAg
ICAvLyBNYWtlIHRoZSBkZWZlcnJlZCBhIHByb21pc2UKKyAgICAgICAgcHJvbWlzZS5wcm9taXNl
KCBkZWZlcnJlZCApOworCisgICAgICAgIC8vIENhbGwgZ2l2ZW4gZnVuYyBpZiBhbnkKKyAgICAg
ICAgaWYgKCBmdW5jICkgeworICAgICAgICAgICAgZnVuYy5jYWxsKCBkZWZlcnJlZCwgZGVmZXJy
ZWQgKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEFsbCBkb25lIQorICAgICAgICByZXR1cm4g
ZGVmZXJyZWQ7CisgICAgfSwKKworICAgIC8vIERlZmVycmVkIGhlbHBlcgorICAgIHdoZW46IGZ1
bmN0aW9uKCBzdWJvcmRpbmF0ZSAvKiAsIC4uLiwgc3Vib3JkaW5hdGVOICovICkgeworICAgICAg
ICB2YXIgaSA9IDAsCisgICAgICAgICAgICByZXNvbHZlVmFsdWVzID0gY29yZV9zbGljZS5jYWxs
KCBhcmd1bWVudHMgKSwKKyAgICAgICAgICAgIGxlbmd0aCA9IHJlc29sdmVWYWx1ZXMubGVuZ3Ro
LAorCisgICAgICAgICAgICAvLyB0aGUgY291bnQgb2YgdW5jb21wbGV0ZWQgc3Vib3JkaW5hdGVz
CisgICAgICAgICAgICByZW1haW5pbmcgPSBsZW5ndGggIT09IDEgfHwgKCBzdWJvcmRpbmF0ZSAm
JiBqUXVlcnkuaXNGdW5jdGlvbiggc3Vib3JkaW5hdGUucHJvbWlzZSApICkgPyBsZW5ndGggOiAw
LAorCisgICAgICAgICAgICAvLyB0aGUgbWFzdGVyIERlZmVycmVkLiBJZiByZXNvbHZlVmFsdWVz
IGNvbnNpc3Qgb2Ygb25seSBhIHNpbmdsZSBEZWZlcnJlZCwganVzdCB1c2UgdGhhdC4KKyAgICAg
ICAgICAgIGRlZmVycmVkID0gcmVtYWluaW5nID09PSAxID8gc3Vib3JkaW5hdGUgOiBqUXVlcnku
RGVmZXJyZWQoKSwKKworICAgICAgICAgICAgLy8gVXBkYXRlIGZ1bmN0aW9uIGZvciBib3RoIHJl
c29sdmUgYW5kIHByb2dyZXNzIHZhbHVlcworICAgICAgICAgICAgdXBkYXRlRnVuYyA9IGZ1bmN0
aW9uKCBpLCBjb250ZXh0cywgdmFsdWVzICkgeworICAgICAgICAgICAgICAgIHJldHVybiBmdW5j
dGlvbiggdmFsdWUgKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHRzWyBpIF0gPSB0aGlz
OworICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbIGkgXSA9IGFyZ3VtZW50cy5sZW5ndGggPiAx
ID8gY29yZV9zbGljZS5jYWxsKCBhcmd1bWVudHMgKSA6IHZhbHVlOworICAgICAgICAgICAgICAg
ICAgICBpZiggdmFsdWVzID09PSBwcm9ncmVzc1ZhbHVlcyApIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGRlZmVycmVkLm5vdGlmeVdpdGgoIGNvbnRleHRzLCB2YWx1ZXMgKTsKKyAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIGlmICggISggLS1yZW1haW5pbmcgKSApIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGRlZmVycmVkLnJlc29sdmVXaXRoKCBjb250ZXh0cywgdmFsdWVzICk7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgfSwK
KworICAgICAgICAgICAgcHJvZ3Jlc3NWYWx1ZXMsIHByb2dyZXNzQ29udGV4dHMsIHJlc29sdmVD
b250ZXh0czsKKworICAgICAgICAvLyBhZGQgbGlzdGVuZXJzIHRvIERlZmVycmVkIHN1Ym9yZGlu
YXRlczsgdHJlYXQgb3RoZXJzIGFzIHJlc29sdmVkCisgICAgICAgIGlmICggbGVuZ3RoID4gMSAp
IHsKKyAgICAgICAgICAgIHByb2dyZXNzVmFsdWVzID0gbmV3IEFycmF5KCBsZW5ndGggKTsKKyAg
ICAgICAgICAgIHByb2dyZXNzQ29udGV4dHMgPSBuZXcgQXJyYXkoIGxlbmd0aCApOworICAgICAg
ICAgICAgcmVzb2x2ZUNvbnRleHRzID0gbmV3IEFycmF5KCBsZW5ndGggKTsKKyAgICAgICAgICAg
IGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkgeworICAgICAgICAgICAgICAgIGlmICggcmVzb2x2
ZVZhbHVlc1sgaSBdICYmIGpRdWVyeS5pc0Z1bmN0aW9uKCByZXNvbHZlVmFsdWVzWyBpIF0ucHJv
bWlzZSApICkgeworICAgICAgICAgICAgICAgICAgICByZXNvbHZlVmFsdWVzWyBpIF0ucHJvbWlz
ZSgpCisgICAgICAgICAgICAgICAgICAgICAgICAuZG9uZSggdXBkYXRlRnVuYyggaSwgcmVzb2x2
ZUNvbnRleHRzLCByZXNvbHZlVmFsdWVzICkgKQorICAgICAgICAgICAgICAgICAgICAgICAgLmZh
aWwoIGRlZmVycmVkLnJlamVjdCApCisgICAgICAgICAgICAgICAgICAgICAgICAucHJvZ3Jlc3Mo
IHVwZGF0ZUZ1bmMoIGksIHByb2dyZXNzQ29udGV4dHMsIHByb2dyZXNzVmFsdWVzICkgKTsKKyAg
ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAtLXJlbWFpbmluZzsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAv
LyBpZiB3ZSdyZSBub3Qgd2FpdGluZyBvbiBhbnl0aGluZywgcmVzb2x2ZSB0aGUgbWFzdGVyCisg
ICAgICAgIGlmICggIXJlbWFpbmluZyApIHsKKyAgICAgICAgICAgIGRlZmVycmVkLnJlc29sdmVX
aXRoKCByZXNvbHZlQ29udGV4dHMsIHJlc29sdmVWYWx1ZXMgKTsKKyAgICAgICAgfQorCisgICAg
ICAgIHJldHVybiBkZWZlcnJlZC5wcm9taXNlKCk7CisgICAgfQorfSk7CitqUXVlcnkuc3VwcG9y
dCA9IChmdW5jdGlvbigpIHsKKworICAgIHZhciBzdXBwb3J0LAorICAgICAgICBhbGwsCisgICAg
ICAgIGEsCisgICAgICAgIHNlbGVjdCwKKyAgICAgICAgb3B0LAorICAgICAgICBpbnB1dCwKKyAg
ICAgICAgZnJhZ21lbnQsCisgICAgICAgIGV2ZW50TmFtZSwKKyAgICAgICAgaSwKKyAgICAgICAg
aXNTdXBwb3J0ZWQsCisgICAgICAgIGNsaWNrRm4sCisgICAgICAgIGRpdiA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoImRpdiIpOworCisgICAgLy8gU2V0dXAKKyAgICBkaXYuc2V0QXR0cmlidXRl
KCAiY2xhc3NOYW1lIiwgInQiICk7CisgICAgZGl2LmlubmVySFRNTCA9ICIgIDxsaW5rLz48dGFi
bGU+PC90YWJsZT48YSBocmVmPScvYSc+YTwvYT48aW5wdXQgdHlwZT0nY2hlY2tib3gnLz4iOwor
CisgICAgLy8gU3VwcG9ydCB0ZXN0cyB3b24ndCBydW4gaW4gc29tZSBsaW1pdGVkIG9yIG5vbi1i
cm93c2VyIGVudmlyb25tZW50cworICAgIGFsbCA9IGRpdi5nZXRFbGVtZW50c0J5VGFnTmFtZSgi
KiIpOworICAgIGEgPSBkaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImEiKVsgMCBdOworICAgIGlm
ICggIWFsbCB8fCAhYSB8fCAhYWxsLmxlbmd0aCApIHsKKyAgICAgICAgcmV0dXJuIHt9OworICAg
IH0KKworICAgIC8vIEZpcnN0IGJhdGNoIG9mIHRlc3RzCisgICAgc2VsZWN0ID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgic2VsZWN0Iik7CisgICAgb3B0ID0gc2VsZWN0LmFwcGVuZENoaWxkKCBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCJvcHRpb24iKSApOworICAgIGlucHV0ID0gZGl2LmdldEVs
ZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpWyAwIF07CisKKyAgICBhLnN0eWxlLmNzc1RleHQgPSAi
dG9wOjFweDtmbG9hdDpsZWZ0O29wYWNpdHk6LjUiOworICAgIHN1cHBvcnQgPSB7CisgICAgICAg
IC8vIElFIHN0cmlwcyBsZWFkaW5nIHdoaXRlc3BhY2Ugd2hlbiAuaW5uZXJIVE1MIGlzIHVzZWQK
KyAgICAgICAgbGVhZGluZ1doaXRlc3BhY2U6ICggZGl2LmZpcnN0Q2hpbGQubm9kZVR5cGUgPT09
IDMgKSwKKworICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0Ym9keSBlbGVtZW50cyBhcmVuJ3Qg
YXV0b21hdGljYWxseSBpbnNlcnRlZAorICAgICAgICAvLyBJRSB3aWxsIGluc2VydCB0aGVtIGlu
dG8gZW1wdHkgdGFibGVzCisgICAgICAgIHRib2R5OiAhZGl2LmdldEVsZW1lbnRzQnlUYWdOYW1l
KCJ0Ym9keSIpLmxlbmd0aCwKKworICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCBsaW5rIGVsZW1l
bnRzIGdldCBzZXJpYWxpemVkIGNvcnJlY3RseSBieSBpbm5lckhUTUwKKyAgICAgICAgLy8gVGhp
cyByZXF1aXJlcyBhIHdyYXBwZXIgZWxlbWVudCBpbiBJRQorICAgICAgICBodG1sU2VyaWFsaXpl
OiAhIWRpdi5nZXRFbGVtZW50c0J5VGFnTmFtZSgibGluayIpLmxlbmd0aCwKKworICAgICAgICAv
LyBHZXQgdGhlIHN0eWxlIGluZm9ybWF0aW9uIGZyb20gZ2V0QXR0cmlidXRlCisgICAgICAgIC8v
IChJRSB1c2VzIC5jc3NUZXh0IGluc3RlYWQpCisgICAgICAgIHN0eWxlOiAvdG9wLy50ZXN0KCBh
LmdldEF0dHJpYnV0ZSgic3R5bGUiKSApLAorCisgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IFVS
THMgYXJlbid0IG1hbmlwdWxhdGVkCisgICAgICAgIC8vIChJRSBub3JtYWxpemVzIGl0IGJ5IGRl
ZmF1bHQpCisgICAgICAgIGhyZWZOb3JtYWxpemVkOiAoIGEuZ2V0QXR0cmlidXRlKCJocmVmIikg
PT09ICIvYSIgKSwKKworICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCBlbGVtZW50IG9wYWNpdHkg
ZXhpc3RzCisgICAgICAgIC8vIChJRSB1c2VzIGZpbHRlciBpbnN0ZWFkKQorICAgICAgICAvLyBV
c2UgYSByZWdleCB0byB3b3JrIGFyb3VuZCBhIFdlYktpdCBpc3N1ZS4gU2VlICM1MTQ1CisgICAg
ICAgIG9wYWNpdHk6IC9eMC41Ly50ZXN0KCBhLnN0eWxlLm9wYWNpdHkgKSwKKworICAgICAgICAv
LyBWZXJpZnkgc3R5bGUgZmxvYXQgZXhpc3RlbmNlCisgICAgICAgIC8vIChJRSB1c2VzIHN0eWxl
RmxvYXQgaW5zdGVhZCBvZiBjc3NGbG9hdCkKKyAgICAgICAgY3NzRmxvYXQ6ICEhYS5zdHlsZS5j
c3NGbG9hdCwKKworICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCBpZiBubyB2YWx1ZSBpcyBzcGVj
aWZpZWQgZm9yIGEgY2hlY2tib3gKKyAgICAgICAgLy8gdGhhdCBpdCBkZWZhdWx0cyB0byAib24i
LgorICAgICAgICAvLyAoV2ViS2l0IGRlZmF1bHRzIHRvICIiIGluc3RlYWQpCisgICAgICAgIGNo
ZWNrT246ICggaW5wdXQudmFsdWUgPT09ICJvbiIgKSwKKworICAgICAgICAvLyBNYWtlIHN1cmUg
dGhhdCBhIHNlbGVjdGVkLWJ5LWRlZmF1bHQgb3B0aW9uIGhhcyBhIHdvcmtpbmcgc2VsZWN0ZWQg
cHJvcGVydHkuCisgICAgICAgIC8vIChXZWJLaXQgZGVmYXVsdHMgdG8gZmFsc2UgaW5zdGVhZCBv
ZiB0cnVlLCBJRSB0b28sIGlmIGl0J3MgaW4gYW4gb3B0Z3JvdXApCisgICAgICAgIG9wdFNlbGVj
dGVkOiBvcHQuc2VsZWN0ZWQsCisKKyAgICAgICAgLy8gVGVzdCBzZXRBdHRyaWJ1dGUgb24gY2Ft
ZWxDYXNlIGNsYXNzLiBJZiBpdCB3b3Jrcywgd2UgbmVlZCBhdHRyRml4ZXMgd2hlbiBkb2luZyBn
ZXQvc2V0QXR0cmlidXRlIChpZTYvNykKKyAgICAgICAgZ2V0U2V0QXR0cmlidXRlOiBkaXYuY2xh
c3NOYW1lICE9PSAidCIsCisKKyAgICAgICAgLy8gVGVzdHMgZm9yIGVuY3R5cGUgc3VwcG9ydCBv
biBhIGZvcm0gKCM2NzQzKQorICAgICAgICBlbmN0eXBlOiAhIWRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoImZvcm0iKS5lbmN0eXBlLAorCisgICAgICAgIC8vIE1ha2VzIHN1cmUgY2xvbmluZyBhbiBo
dG1sNSBlbGVtZW50IGRvZXMgbm90IGNhdXNlIHByb2JsZW1zCisgICAgICAgIC8vIFdoZXJlIG91
dGVySFRNTCBpcyB1bmRlZmluZWQsIHRoaXMgc3RpbGwgd29ya3MKKyAgICAgICAgaHRtbDVDbG9u
ZTogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibmF2IikuY2xvbmVOb2RlKCB0cnVlICkub3V0ZXJI
VE1MICE9PSAiPDpuYXY+PC86bmF2PiIsCisKKyAgICAgICAgLy8galF1ZXJ5LnN1cHBvcnQuYm94
TW9kZWwgREVQUkVDQVRFRCBpbiAxLjggc2luY2Ugd2UgZG9uJ3Qgc3VwcG9ydCBRdWlya3MgTW9k
ZQorICAgICAgICBib3hNb2RlbDogKCBkb2N1bWVudC5jb21wYXRNb2RlID09PSAiQ1NTMUNvbXBh
dCIgKSwKKworICAgICAgICAvLyBXaWxsIGJlIGRlZmluZWQgbGF0ZXIKKyAgICAgICAgc3VibWl0
QnViYmxlczogdHJ1ZSwKKyAgICAgICAgY2hhbmdlQnViYmxlczogdHJ1ZSwKKyAgICAgICAgZm9j
dXNpbkJ1YmJsZXM6IGZhbHNlLAorICAgICAgICBkZWxldGVFeHBhbmRvOiB0cnVlLAorICAgICAg
ICBub0Nsb25lRXZlbnQ6IHRydWUsCisgICAgICAgIGlubGluZUJsb2NrTmVlZHNMYXlvdXQ6IGZh
bHNlLAorICAgICAgICBzaHJpbmtXcmFwQmxvY2tzOiBmYWxzZSwKKyAgICAgICAgcmVsaWFibGVN
YXJnaW5SaWdodDogdHJ1ZSwKKyAgICAgICAgYm94U2l6aW5nUmVsaWFibGU6IHRydWUsCisgICAg
ICAgIHBpeGVsUG9zaXRpb246IGZhbHNlCisgICAgfTsKKworICAgIC8vIE1ha2Ugc3VyZSBjaGVj
a2VkIHN0YXR1cyBpcyBwcm9wZXJseSBjbG9uZWQKKyAgICBpbnB1dC5jaGVja2VkID0gdHJ1ZTsK
KyAgICBzdXBwb3J0Lm5vQ2xvbmVDaGVja2VkID0gaW5wdXQuY2xvbmVOb2RlKCB0cnVlICkuY2hl
Y2tlZDsKKworICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBvcHRpb25zIGluc2lkZSBkaXNhYmxl
ZCBzZWxlY3RzIGFyZW4ndCBtYXJrZWQgYXMgZGlzYWJsZWQKKyAgICAvLyAoV2ViS2l0IG1hcmtz
IHRoZW0gYXMgZGlzYWJsZWQpCisgICAgc2VsZWN0LmRpc2FibGVkID0gdHJ1ZTsKKyAgICBzdXBw
b3J0Lm9wdERpc2FibGVkID0gIW9wdC5kaXNhYmxlZDsKKworICAgIC8vIFRlc3QgdG8gc2VlIGlm
IGl0J3MgcG9zc2libGUgdG8gZGVsZXRlIGFuIGV4cGFuZG8gZnJvbSBhbiBlbGVtZW50CisgICAg
Ly8gRmFpbHMgaW4gSW50ZXJuZXQgRXhwbG9yZXIKKyAgICB0cnkgeworICAgICAgICBkZWxldGUg
ZGl2LnRlc3Q7CisgICAgfSBjYXRjaCggZSApIHsKKyAgICAgICAgc3VwcG9ydC5kZWxldGVFeHBh
bmRvID0gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCAhZGl2LmFkZEV2ZW50TGlzdGVuZXIgJiYg
ZGl2LmF0dGFjaEV2ZW50ICYmIGRpdi5maXJlRXZlbnQgKSB7CisgICAgICAgIGRpdi5hdHRhY2hF
dmVudCggIm9uY2xpY2siLCBjbGlja0ZuID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAvLyBD
bG9uaW5nIGEgbm9kZSBzaG91bGRuJ3QgY29weSBvdmVyIGFueQorICAgICAgICAgICAgLy8gYm91
bmQgZXZlbnQgaGFuZGxlcnMgKElFIGRvZXMgdGhpcykKKyAgICAgICAgICAgIHN1cHBvcnQubm9D
bG9uZUV2ZW50ID0gZmFsc2U7CisgICAgICAgIH0pOworICAgICAgICBkaXYuY2xvbmVOb2RlKCB0
cnVlICkuZmlyZUV2ZW50KCJvbmNsaWNrIik7CisgICAgICAgIGRpdi5kZXRhY2hFdmVudCggIm9u
Y2xpY2siLCBjbGlja0ZuICk7CisgICAgfQorCisgICAgLy8gQ2hlY2sgaWYgYSByYWRpbyBtYWlu
dGFpbnMgaXRzIHZhbHVlCisgICAgLy8gYWZ0ZXIgYmVpbmcgYXBwZW5kZWQgdG8gdGhlIERPTQor
ICAgIGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsKKyAgICBpbnB1dC52
YWx1ZSA9ICJ0IjsKKyAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoICJ0eXBlIiwgInJhZGlvIiApOwor
ICAgIHN1cHBvcnQucmFkaW9WYWx1ZSA9IGlucHV0LnZhbHVlID09PSAidCI7CisKKyAgICBpbnB1
dC5zZXRBdHRyaWJ1dGUoICJjaGVja2VkIiwgImNoZWNrZWQiICk7CisKKyAgICAvLyAjMTEyMTcg
LSBXZWJLaXQgbG9zZXMgY2hlY2sgd2hlbiB0aGUgbmFtZSBpcyBhZnRlciB0aGUgY2hlY2tlZCBh
dHRyaWJ1dGUKKyAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoICJuYW1lIiwgInQiICk7CisKKyAgICBk
aXYuYXBwZW5kQ2hpbGQoIGlucHV0ICk7CisgICAgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVE
b2N1bWVudEZyYWdtZW50KCk7CisgICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoIGRpdi5sYXN0Q2hp
bGQgKTsKKworICAgIC8vIFdlYktpdCBkb2Vzbid0IGNsb25lIGNoZWNrZWQgc3RhdGUgY29ycmVj
dGx5IGluIGZyYWdtZW50cworICAgIHN1cHBvcnQuY2hlY2tDbG9uZSA9IGZyYWdtZW50LmNsb25l
Tm9kZSggdHJ1ZSApLmNsb25lTm9kZSggdHJ1ZSApLmxhc3RDaGlsZC5jaGVja2VkOworCisgICAg
Ly8gQ2hlY2sgaWYgYSBkaXNjb25uZWN0ZWQgY2hlY2tib3ggd2lsbCByZXRhaW4gaXRzIGNoZWNr
ZWQKKyAgICAvLyB2YWx1ZSBvZiB0cnVlIGFmdGVyIGFwcGVuZGVkIHRvIHRoZSBET00gKElFNi83
KQorICAgIHN1cHBvcnQuYXBwZW5kQ2hlY2tlZCA9IGlucHV0LmNoZWNrZWQ7CisKKyAgICBmcmFn
bWVudC5yZW1vdmVDaGlsZCggaW5wdXQgKTsKKyAgICBmcmFnbWVudC5hcHBlbmRDaGlsZCggZGl2
ICk7CisKKyAgICAvLyBUZWNobmlxdWUgZnJvbSBKdXJpeSBaYXl0c2V2CisgICAgLy8gaHR0cDov
L3BlcmZlY3Rpb25raWxscy5jb20vZGV0ZWN0aW5nLWV2ZW50LXN1cHBvcnQtd2l0aG91dC1icm93
c2VyLXNuaWZmaW5nLworICAgIC8vIFdlIG9ubHkgY2FyZSBhYm91dCB0aGUgY2FzZSB3aGVyZSBu
b24tc3RhbmRhcmQgZXZlbnQgc3lzdGVtcworICAgIC8vIGFyZSB1c2VkLCBuYW1lbHkgaW4gSUUu
IFNob3J0LWNpcmN1aXRpbmcgaGVyZSBoZWxwcyB1cyB0bworICAgIC8vIGF2b2lkIGFuIGV2YWwg
Y2FsbCAoaW4gc2V0QXR0cmlidXRlKSB3aGljaCBjYW4gY2F1c2UgQ1NQCisgICAgLy8gdG8gZ28g
aGF5d2lyZS4gU2VlOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9TZWN1cml0eS9D
U1AKKyAgICBpZiAoIGRpdi5hdHRhY2hFdmVudCApIHsKKyAgICAgICAgZm9yICggaSBpbiB7Cisg
ICAgICAgICAgICBzdWJtaXQ6IHRydWUsCisgICAgICAgICAgICBjaGFuZ2U6IHRydWUsCisgICAg
ICAgICAgICBmb2N1c2luOiB0cnVlCisgICAgICAgIH0pIHsKKyAgICAgICAgICAgIGV2ZW50TmFt
ZSA9ICJvbiIgKyBpOworICAgICAgICAgICAgaXNTdXBwb3J0ZWQgPSAoIGV2ZW50TmFtZSBpbiBk
aXYgKTsKKyAgICAgICAgICAgIGlmICggIWlzU3VwcG9ydGVkICkgeworICAgICAgICAgICAgICAg
IGRpdi5zZXRBdHRyaWJ1dGUoIGV2ZW50TmFtZSwgInJldHVybjsiICk7CisgICAgICAgICAgICAg
ICAgaXNTdXBwb3J0ZWQgPSAoIHR5cGVvZiBkaXZbIGV2ZW50TmFtZSBdID09PSAiZnVuY3Rpb24i
ICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzdXBwb3J0WyBpICsgIkJ1YmJsZXMiIF0g
PSBpc1N1cHBvcnRlZDsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFJ1biB0ZXN0cyB0aGF0
IG5lZWQgYSBib2R5IGF0IGRvYyByZWFkeQorICAgIGpRdWVyeShmdW5jdGlvbigpIHsKKyAgICAg
ICAgdmFyIGNvbnRhaW5lciwgZGl2LCB0ZHMsIG1hcmdpbkRpdiwKKyAgICAgICAgICAgIGRpdlJl
c2V0ID0gInBhZGRpbmc6MDttYXJnaW46MDtib3JkZXI6MDtkaXNwbGF5OmJsb2NrO292ZXJmbG93
OmhpZGRlbjsiLAorICAgICAgICAgICAgYm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdO
YW1lKCJib2R5IilbMF07CisKKyAgICAgICAgaWYgKCAhYm9keSApIHsKKyAgICAgICAgICAgIC8v
IFJldHVybiBmb3IgZnJhbWVzZXQgZG9jcyB0aGF0IGRvbid0IGhhdmUgYSBib2R5CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBjb250YWluZXIgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICAgICAgY29udGFpbmVyLnN0eWxlLmNzc1RleHQgPSAi
dmlzaWJpbGl0eTpoaWRkZW47Ym9yZGVyOjA7d2lkdGg6MDtoZWlnaHQ6MDtwb3NpdGlvbjpzdGF0
aWM7dG9wOjA7bWFyZ2luLXRvcDoxcHgiOworICAgICAgICBib2R5Lmluc2VydEJlZm9yZSggY29u
dGFpbmVyLCBib2R5LmZpcnN0Q2hpbGQgKTsKKworICAgICAgICAvLyBDb25zdHJ1Y3QgdGhlIHRl
c3QgZWxlbWVudAorICAgICAgICBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsK
KyAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKCBkaXYgKTsKKworICAgICAgICAvLyBDaGVj
ayBpZiB0YWJsZSBjZWxscyBzdGlsbCBoYXZlIG9mZnNldFdpZHRoL0hlaWdodCB3aGVuIHRoZXkg
YXJlIHNldAorICAgICAgICAvLyB0byBkaXNwbGF5Om5vbmUgYW5kIHRoZXJlIGFyZSBzdGlsbCBv
dGhlciB2aXNpYmxlIHRhYmxlIGNlbGxzIGluIGEKKyAgICAgICAgLy8gdGFibGUgcm93OyBpZiBz
bywgb2Zmc2V0V2lkdGgvSGVpZ2h0IGFyZSBub3QgcmVsaWFibGUgZm9yIHVzZSB3aGVuCisgICAg
ICAgIC8vIGRldGVybWluaW5nIGlmIGFuIGVsZW1lbnQgaGFzIGJlZW4gaGlkZGVuIGRpcmVjdGx5
IHVzaW5nCisgICAgICAgIC8vIGRpc3BsYXk6bm9uZSAoaXQgaXMgc3RpbGwgc2FmZSB0byB1c2Ug
b2Zmc2V0cyBpZiBhIHBhcmVudCBlbGVtZW50IGlzCisgICAgICAgIC8vIGhpZGRlbjsgZG9uIHNh
ZmV0eSBnb2dnbGVzIGFuZCBzZWUgYnVnICM0NTEyIGZvciBtb3JlIGluZm9ybWF0aW9uKS4KKyAg
ICAgICAgLy8gKG9ubHkgSUUgOCBmYWlscyB0aGlzIHRlc3QpCisgICAgICAgIGRpdi5pbm5lckhU
TUwgPSAiPHRhYmxlPjx0cj48dGQ+PC90ZD48dGQ+dDwvdGQ+PC90cj48L3RhYmxlPiI7CisgICAg
ICAgIHRkcyA9IGRpdi5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGQiKTsKKyAgICAgICAgdGRzWyAw
IF0uc3R5bGUuY3NzVGV4dCA9ICJwYWRkaW5nOjA7bWFyZ2luOjA7Ym9yZGVyOjA7ZGlzcGxheTpu
b25lIjsKKyAgICAgICAgaXNTdXBwb3J0ZWQgPSAoIHRkc1sgMCBdLm9mZnNldEhlaWdodCA9PT0g
MCApOworCisgICAgICAgIHRkc1sgMCBdLnN0eWxlLmRpc3BsYXkgPSAiIjsKKyAgICAgICAgdGRz
WyAxIF0uc3R5bGUuZGlzcGxheSA9ICJub25lIjsKKworICAgICAgICAvLyBDaGVjayBpZiBlbXB0
eSB0YWJsZSBjZWxscyBzdGlsbCBoYXZlIG9mZnNldFdpZHRoL0hlaWdodAorICAgICAgICAvLyAo
SUUgPD0gOCBmYWlsIHRoaXMgdGVzdCkKKyAgICAgICAgc3VwcG9ydC5yZWxpYWJsZUhpZGRlbk9m
ZnNldHMgPSBpc1N1cHBvcnRlZCAmJiAoIHRkc1sgMCBdLm9mZnNldEhlaWdodCA9PT0gMCApOwor
CisgICAgICAgIC8vIENoZWNrIGJveC1zaXppbmcgYW5kIG1hcmdpbiBiZWhhdmlvcgorICAgICAg
ICBkaXYuaW5uZXJIVE1MID0gIiI7CisgICAgICAgIGRpdi5zdHlsZS5jc3NUZXh0ID0gImJveC1z
aXppbmc6Ym9yZGVyLWJveDstbW96LWJveC1zaXppbmc6Ym9yZGVyLWJveDstd2Via2l0LWJveC1z
aXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nOjFweDtib3JkZXI6MXB4O2Rpc3BsYXk6YmxvY2s7d2lk
dGg6NHB4O21hcmdpbi10b3A6MSU7cG9zaXRpb246YWJzb2x1dGU7dG9wOjElOyI7CisgICAgICAg
IHN1cHBvcnQuYm94U2l6aW5nID0gKCBkaXYub2Zmc2V0V2lkdGggPT09IDQgKTsKKyAgICAgICAg
c3VwcG9ydC5kb2VzTm90SW5jbHVkZU1hcmdpbkluQm9keU9mZnNldCA9ICggYm9keS5vZmZzZXRU
b3AgIT09IDEgKTsKKworICAgICAgICAvLyBOT1RFOiBUbyBhbnkgZnV0dXJlIG1haW50YWluZXIs
IHdlJ3ZlIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlCisgICAgICAgIC8vIGJlY2F1c2UganNkb20g
b24gbm9kZS5qcyB3aWxsIGJyZWFrIHdpdGhvdXQgaXQuCisgICAgICAgIGlmICggd2luZG93Lmdl
dENvbXB1dGVkU3R5bGUgKSB7CisgICAgICAgICAgICBzdXBwb3J0LnBpeGVsUG9zaXRpb24gPSAo
IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKCBkaXYsIG51bGwgKSB8fCB7fSApLnRvcCAhPT0gIjEl
IjsKKyAgICAgICAgICAgIHN1cHBvcnQuYm94U2l6aW5nUmVsaWFibGUgPSAoIHdpbmRvdy5nZXRD
b21wdXRlZFN0eWxlKCBkaXYsIG51bGwgKSB8fCB7IHdpZHRoOiAiNHB4IiB9ICkud2lkdGggPT09
ICI0cHgiOworCisgICAgICAgICAgICAvLyBDaGVjayBpZiBkaXYgd2l0aCBleHBsaWNpdCB3aWR0
aCBhbmQgbm8gbWFyZ2luLXJpZ2h0IGluY29ycmVjdGx5CisgICAgICAgICAgICAvLyBnZXRzIGNv
bXB1dGVkIG1hcmdpbi1yaWdodCBiYXNlZCBvbiB3aWR0aCBvZiBjb250YWluZXIuIEZvciBtb3Jl
CisgICAgICAgICAgICAvLyBpbmZvIHNlZSBidWcgIzMzMzMKKyAgICAgICAgICAgIC8vIEZhaWxz
IGluIFdlYktpdCBiZWZvcmUgRmViIDIwMTEgbmlnaHRsaWVzCisgICAgICAgICAgICAvLyBXZWJL
aXQgQnVnIDEzMzQzIC0gZ2V0Q29tcHV0ZWRTdHlsZSByZXR1cm5zIHdyb25nIHZhbHVlIGZvciBt
YXJnaW4tcmlnaHQKKyAgICAgICAgICAgIG1hcmdpbkRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoImRpdiIpOworICAgICAgICAgICAgbWFyZ2luRGl2LnN0eWxlLmNzc1RleHQgPSBkaXYuc3R5
bGUuY3NzVGV4dCA9IGRpdlJlc2V0OworICAgICAgICAgICAgbWFyZ2luRGl2LnN0eWxlLm1hcmdp
blJpZ2h0ID0gbWFyZ2luRGl2LnN0eWxlLndpZHRoID0gIjAiOworICAgICAgICAgICAgZGl2LnN0
eWxlLndpZHRoID0gIjFweCI7CisgICAgICAgICAgICBkaXYuYXBwZW5kQ2hpbGQoIG1hcmdpbkRp
diApOworICAgICAgICAgICAgc3VwcG9ydC5yZWxpYWJsZU1hcmdpblJpZ2h0ID0KKyAgICAgICAg
ICAgICAgICAhcGFyc2VGbG9hdCggKCB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSggbWFyZ2luRGl2
LCBudWxsICkgfHwge30gKS5tYXJnaW5SaWdodCApOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KCB0eXBlb2YgZGl2LnN0eWxlLnpvb20gIT09ICJ1bmRlZmluZWQiICkgeworICAgICAgICAgICAg
Ly8gQ2hlY2sgaWYgbmF0aXZlbHkgYmxvY2stbGV2ZWwgZWxlbWVudHMgYWN0IGxpa2UgaW5saW5l
LWJsb2NrCisgICAgICAgICAgICAvLyBlbGVtZW50cyB3aGVuIHNldHRpbmcgdGhlaXIgZGlzcGxh
eSB0byAnaW5saW5lJyBhbmQgZ2l2aW5nCisgICAgICAgICAgICAvLyB0aGVtIGxheW91dAorICAg
ICAgICAgICAgLy8gKElFIDwgOCBkb2VzIHRoaXMpCisgICAgICAgICAgICBkaXYuaW5uZXJIVE1M
ID0gIiI7CisgICAgICAgICAgICBkaXYuc3R5bGUuY3NzVGV4dCA9IGRpdlJlc2V0ICsgIndpZHRo
OjFweDtwYWRkaW5nOjFweDtkaXNwbGF5OmlubGluZTt6b29tOjEiOworICAgICAgICAgICAgc3Vw
cG9ydC5pbmxpbmVCbG9ja05lZWRzTGF5b3V0ID0gKCBkaXYub2Zmc2V0V2lkdGggPT09IDMgKTsK
KworICAgICAgICAgICAgLy8gQ2hlY2sgaWYgZWxlbWVudHMgd2l0aCBsYXlvdXQgc2hyaW5rLXdy
YXAgdGhlaXIgY2hpbGRyZW4KKyAgICAgICAgICAgIC8vIChJRSA2IGRvZXMgdGhpcykKKyAgICAg
ICAgICAgIGRpdi5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsKKyAgICAgICAgICAgIGRpdi5zdHls
ZS5vdmVyZmxvdyA9ICJ2aXNpYmxlIjsKKyAgICAgICAgICAgIGRpdi5pbm5lckhUTUwgPSAiPGRp
dj48L2Rpdj4iOworICAgICAgICAgICAgZGl2LmZpcnN0Q2hpbGQuc3R5bGUud2lkdGggPSAiNXB4
IjsKKyAgICAgICAgICAgIHN1cHBvcnQuc2hyaW5rV3JhcEJsb2NrcyA9ICggZGl2Lm9mZnNldFdp
ZHRoICE9PSAzICk7CisKKyAgICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS56b29tID0gMTsKKyAg
ICAgICAgfQorCisgICAgICAgIC8vIE51bGwgZWxlbWVudHMgdG8gYXZvaWQgbGVha3MgaW4gSUUK
KyAgICAgICAgYm9keS5yZW1vdmVDaGlsZCggY29udGFpbmVyICk7CisgICAgICAgIGNvbnRhaW5l
ciA9IGRpdiA9IHRkcyA9IG1hcmdpbkRpdiA9IG51bGw7CisgICAgfSk7CisKKyAgICAvLyBOdWxs
IGVsZW1lbnRzIHRvIGF2b2lkIGxlYWtzIGluIElFCisgICAgZnJhZ21lbnQucmVtb3ZlQ2hpbGQo
IGRpdiApOworICAgIGFsbCA9IGEgPSBzZWxlY3QgPSBvcHQgPSBpbnB1dCA9IGZyYWdtZW50ID0g
ZGl2ID0gbnVsbDsKKworICAgIHJldHVybiBzdXBwb3J0OworfSkoKTsKK3ZhciByYnJhY2UgPSAv
KD86XHtbXHNcU10qXH18XFtbXHNcU10qXF0pJC8sCisgICAgcm11bHRpRGFzaCA9IC8oW0EtWl0p
L2c7CisKK2pRdWVyeS5leHRlbmQoeworICAgIGNhY2hlOiB7fSwKKworICAgIGRlbGV0ZWRJZHM6
IFtdLAorCisgICAgLy8gUmVtb3ZlIGF0IG5leHQgbWFqb3IgcmVsZWFzZSAoMS45LzIuMCkKKyAg
ICB1dWlkOiAwLAorCisgICAgLy8gVW5pcXVlIGZvciBlYWNoIGNvcHkgb2YgalF1ZXJ5IG9uIHRo
ZSBwYWdlCisgICAgLy8gTm9uLWRpZ2l0cyByZW1vdmVkIHRvIG1hdGNoIHJpbmxpbmVqUXVlcnkK
KyAgICBleHBhbmRvOiAialF1ZXJ5IiArICggalF1ZXJ5LmZuLmpxdWVyeSArIE1hdGgucmFuZG9t
KCkgKS5yZXBsYWNlKCAvXEQvZywgIiIgKSwKKworICAgIC8vIFRoZSBmb2xsb3dpbmcgZWxlbWVu
dHMgdGhyb3cgdW5jYXRjaGFibGUgZXhjZXB0aW9ucyBpZiB5b3UKKyAgICAvLyBhdHRlbXB0IHRv
IGFkZCBleHBhbmRvIHByb3BlcnRpZXMgdG8gdGhlbS4KKyAgICBub0RhdGE6IHsKKyAgICAgICAg
ImVtYmVkIjogdHJ1ZSwKKyAgICAgICAgLy8gQmFuIGFsbCBvYmplY3RzIGV4Y2VwdCBmb3IgRmxh
c2ggKHdoaWNoIGhhbmRsZSBleHBhbmRvcykKKyAgICAgICAgIm9iamVjdCI6ICJjbHNpZDpEMjdD
REI2RS1BRTZELTExY2YtOTZCOC00NDQ1NTM1NDAwMDAiLAorICAgICAgICAiYXBwbGV0IjogdHJ1
ZQorICAgIH0sCisKKyAgICBoYXNEYXRhOiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgZWxl
bSA9IGVsZW0ubm9kZVR5cGUgPyBqUXVlcnkuY2FjaGVbIGVsZW1balF1ZXJ5LmV4cGFuZG9dIF0g
OiBlbGVtWyBqUXVlcnkuZXhwYW5kbyBdOworICAgICAgICByZXR1cm4gISFlbGVtICYmICFpc0Vt
cHR5RGF0YU9iamVjdCggZWxlbSApOworICAgIH0sCisKKyAgICBkYXRhOiBmdW5jdGlvbiggZWxl
bSwgbmFtZSwgZGF0YSwgcHZ0IC8qIEludGVybmFsIFVzZSBPbmx5ICovICkgeworICAgICAgICBp
ZiAoICFqUXVlcnkuYWNjZXB0RGF0YSggZWxlbSApICkgeworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisKKyAgICAgICAgdmFyIHRoaXNDYWNoZSwgcmV0LAorICAgICAgICAgICAgaW50
ZXJuYWxLZXkgPSBqUXVlcnkuZXhwYW5kbywKKyAgICAgICAgICAgIGdldEJ5TmFtZSA9IHR5cGVv
ZiBuYW1lID09PSAic3RyaW5nIiwKKworICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBoYW5kbGUg
RE9NIG5vZGVzIGFuZCBKUyBvYmplY3RzIGRpZmZlcmVudGx5IGJlY2F1c2UgSUU2LTcKKyAgICAg
ICAgICAgIC8vIGNhbid0IEdDIG9iamVjdCByZWZlcmVuY2VzIHByb3Blcmx5IGFjcm9zcyB0aGUg
RE9NLUpTIGJvdW5kYXJ5CisgICAgICAgICAgICBpc05vZGUgPSBlbGVtLm5vZGVUeXBlLAorCisg
ICAgICAgICAgICAvLyBPbmx5IERPTSBub2RlcyBuZWVkIHRoZSBnbG9iYWwgalF1ZXJ5IGNhY2hl
OyBKUyBvYmplY3QgZGF0YSBpcworICAgICAgICAgICAgLy8gYXR0YWNoZWQgZGlyZWN0bHkgdG8g
dGhlIG9iamVjdCBzbyBHQyBjYW4gb2NjdXIgYXV0b21hdGljYWxseQorICAgICAgICAgICAgY2Fj
aGUgPSBpc05vZGUgPyBqUXVlcnkuY2FjaGUgOiBlbGVtLAorCisgICAgICAgICAgICAvLyBPbmx5
IGRlZmluaW5nIGFuIElEIGZvciBKUyBvYmplY3RzIGlmIGl0cyBjYWNoZSBhbHJlYWR5IGV4aXN0
cyBhbGxvd3MKKyAgICAgICAgICAgIC8vIHRoZSBjb2RlIHRvIHNob3J0Y3V0IG9uIHRoZSBzYW1l
IHBhdGggYXMgYSBET00gbm9kZSB3aXRoIG5vIGNhY2hlCisgICAgICAgICAgICBpZCA9IGlzTm9k
ZSA/IGVsZW1bIGludGVybmFsS2V5IF0gOiBlbGVtWyBpbnRlcm5hbEtleSBdICYmIGludGVybmFs
S2V5OworCisgICAgICAgIC8vIEF2b2lkIGRvaW5nIGFueSBtb3JlIHdvcmsgdGhhbiB3ZSBuZWVk
IHRvIHdoZW4gdHJ5aW5nIHRvIGdldCBkYXRhIG9uIGFuCisgICAgICAgIC8vIG9iamVjdCB0aGF0
IGhhcyBubyBkYXRhIGF0IGFsbAorICAgICAgICBpZiAoICghaWQgfHwgIWNhY2hlW2lkXSB8fCAo
IXB2dCAmJiAhY2FjaGVbaWRdLmRhdGEpKSAmJiBnZXRCeU5hbWUgJiYgZGF0YSA9PT0gdW5kZWZp
bmVkICkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCAh
aWQgKSB7CisgICAgICAgICAgICAvLyBPbmx5IERPTSBub2RlcyBuZWVkIGEgbmV3IHVuaXF1ZSBJ
RCBmb3IgZWFjaCBlbGVtZW50IHNpbmNlIHRoZWlyIGRhdGEKKyAgICAgICAgICAgIC8vIGVuZHMg
dXAgaW4gdGhlIGdsb2JhbCBjYWNoZQorICAgICAgICAgICAgaWYgKCBpc05vZGUgKSB7CisgICAg
ICAgICAgICAgICAgZWxlbVsgaW50ZXJuYWxLZXkgXSA9IGlkID0galF1ZXJ5LmRlbGV0ZWRJZHMu
cG9wKCkgfHwgalF1ZXJ5Lmd1aWQrKzsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgaWQgPSBpbnRlcm5hbEtleTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIGlmICggIWNhY2hlWyBpZCBdICkgeworICAgICAgICAgICAgY2FjaGVbIGlkIF0gPSB7fTsK
KworICAgICAgICAgICAgLy8gQXZvaWRzIGV4cG9zaW5nIGpRdWVyeSBtZXRhZGF0YSBvbiBwbGFp
biBKUyBvYmplY3RzIHdoZW4gdGhlIG9iamVjdAorICAgICAgICAgICAgLy8gaXMgc2VyaWFsaXpl
ZCB1c2luZyBKU09OLnN0cmluZ2lmeQorICAgICAgICAgICAgaWYgKCAhaXNOb2RlICkgeworICAg
ICAgICAgICAgICAgIGNhY2hlWyBpZCBdLnRvSlNPTiA9IGpRdWVyeS5ub29wOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gQW4gb2JqZWN0IGNhbiBiZSBwYXNzZWQgdG8g
alF1ZXJ5LmRhdGEgaW5zdGVhZCBvZiBhIGtleS92YWx1ZSBwYWlyOyB0aGlzIGdldHMKKyAgICAg
ICAgLy8gc2hhbGxvdyBjb3BpZWQgb3ZlciBvbnRvIHRoZSBleGlzdGluZyBjYWNoZQorICAgICAg
ICBpZiAoIHR5cGVvZiBuYW1lID09PSAib2JqZWN0IiB8fCB0eXBlb2YgbmFtZSA9PT0gImZ1bmN0
aW9uIiApIHsKKyAgICAgICAgICAgIGlmICggcHZ0ICkgeworICAgICAgICAgICAgICAgIGNhY2hl
WyBpZCBdID0galF1ZXJ5LmV4dGVuZCggY2FjaGVbIGlkIF0sIG5hbWUgKTsKKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgY2FjaGVbIGlkIF0uZGF0YSA9IGpRdWVyeS5leHRl
bmQoIGNhY2hlWyBpZCBdLmRhdGEsIG5hbWUgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIHRoaXNDYWNoZSA9IGNhY2hlWyBpZCBdOworCisgICAgICAgIC8vIGpRdWVyeSBk
YXRhKCkgaXMgc3RvcmVkIGluIGEgc2VwYXJhdGUgb2JqZWN0IGluc2lkZSB0aGUgb2JqZWN0J3Mg
aW50ZXJuYWwgZGF0YQorICAgICAgICAvLyBjYWNoZSBpbiBvcmRlciB0byBhdm9pZCBrZXkgY29s
bGlzaW9ucyBiZXR3ZWVuIGludGVybmFsIGRhdGEgYW5kIHVzZXItZGVmaW5lZAorICAgICAgICAv
LyBkYXRhLgorICAgICAgICBpZiAoICFwdnQgKSB7CisgICAgICAgICAgICBpZiAoICF0aGlzQ2Fj
aGUuZGF0YSApIHsKKyAgICAgICAgICAgICAgICB0aGlzQ2FjaGUuZGF0YSA9IHt9OworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICB0aGlzQ2FjaGUgPSB0aGlzQ2FjaGUuZGF0YTsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmICggZGF0YSAhPT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAg
dGhpc0NhY2hlWyBqUXVlcnkuY2FtZWxDYXNlKCBuYW1lICkgXSA9IGRhdGE7CisgICAgICAgIH0K
KworICAgICAgICAvLyBDaGVjayBmb3IgYm90aCBjb252ZXJ0ZWQtdG8tY2FtZWwgYW5kIG5vbi1j
b252ZXJ0ZWQgZGF0YSBwcm9wZXJ0eSBuYW1lcworICAgICAgICAvLyBJZiBhIGRhdGEgcHJvcGVy
dHkgd2FzIHNwZWNpZmllZAorICAgICAgICBpZiAoIGdldEJ5TmFtZSApIHsKKworICAgICAgICAg
ICAgLy8gRmlyc3QgVHJ5IHRvIGZpbmQgYXMtaXMgcHJvcGVydHkgZGF0YQorICAgICAgICAgICAg
cmV0ID0gdGhpc0NhY2hlWyBuYW1lIF07CisKKyAgICAgICAgICAgIC8vIFRlc3QgZm9yIG51bGx8
dW5kZWZpbmVkIHByb3BlcnR5IGRhdGEKKyAgICAgICAgICAgIGlmICggcmV0ID09IG51bGwgKSB7
CisKKyAgICAgICAgICAgICAgICAvLyBUcnkgdG8gZmluZCB0aGUgY2FtZWxDYXNlZCBwcm9wZXJ0
eQorICAgICAgICAgICAgICAgIHJldCA9IHRoaXNDYWNoZVsgalF1ZXJ5LmNhbWVsQ2FzZSggbmFt
ZSApIF07CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXQg
PSB0aGlzQ2FjaGU7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcmV0OworICAgIH0sCisK
KyAgICByZW1vdmVEYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgcHZ0IC8qIEludGVybmFsIFVz
ZSBPbmx5ICovICkgeworICAgICAgICBpZiAoICFqUXVlcnkuYWNjZXB0RGF0YSggZWxlbSApICkg
eworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgdmFyIHRoaXNDYWNo
ZSwgaSwgbCwKKworICAgICAgICAgICAgaXNOb2RlID0gZWxlbS5ub2RlVHlwZSwKKworICAgICAg
ICAgICAgLy8gU2VlIGpRdWVyeS5kYXRhIGZvciBtb3JlIGluZm9ybWF0aW9uCisgICAgICAgICAg
ICBjYWNoZSA9IGlzTm9kZSA/IGpRdWVyeS5jYWNoZSA6IGVsZW0sCisgICAgICAgICAgICBpZCA9
IGlzTm9kZSA/IGVsZW1bIGpRdWVyeS5leHBhbmRvIF0gOiBqUXVlcnkuZXhwYW5kbzsKKworICAg
ICAgICAvLyBJZiB0aGVyZSBpcyBhbHJlYWR5IG5vIGNhY2hlIGVudHJ5IGZvciB0aGlzIG9iamVj
dCwgdGhlcmUgaXMgbm8KKyAgICAgICAgLy8gcHVycG9zZSBpbiBjb250aW51aW5nCisgICAgICAg
IGlmICggIWNhY2hlWyBpZCBdICkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKCBuYW1lICkgeworCisgICAgICAgICAgICB0aGlzQ2FjaGUgPSBwdnQgPyBj
YWNoZVsgaWQgXSA6IGNhY2hlWyBpZCBdLmRhdGE7CisKKyAgICAgICAgICAgIGlmICggdGhpc0Nh
Y2hlICkgeworCisgICAgICAgICAgICAgICAgLy8gU3VwcG9ydCBhcnJheSBvciBzcGFjZSBzZXBh
cmF0ZWQgc3RyaW5nIG5hbWVzIGZvciBkYXRhIGtleXMKKyAgICAgICAgICAgICAgICBpZiAoICFq
UXVlcnkuaXNBcnJheSggbmFtZSApICkgeworCisgICAgICAgICAgICAgICAgICAgIC8vIHRyeSB0
aGUgc3RyaW5nIGFzIGEga2V5IGJlZm9yZSBhbnkgbWFuaXB1bGF0aW9uCisgICAgICAgICAgICAg
ICAgICAgIGlmICggbmFtZSBpbiB0aGlzQ2FjaGUgKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBuYW1lID0gWyBuYW1lIF07CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIHNwbGl0IHRoZSBjYW1lbCBjYXNlZCB2ZXJzaW9uIGJ5IHNw
YWNlcyB1bmxlc3MgYSBrZXkgd2l0aCB0aGUgc3BhY2VzIGV4aXN0cworICAgICAgICAgICAgICAg
ICAgICAgICAgbmFtZSA9IGpRdWVyeS5jYW1lbENhc2UoIG5hbWUgKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggbmFtZSBpbiB0aGlzQ2FjaGUgKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbmFtZSA9IFsgbmFtZSBdOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gbmFtZS5zcGxpdCgiICIpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZm9yICggaSA9IDAsIGwgPSBuYW1lLmxlbmd0
aDsgaSA8IGw7IGkrKyApIHsKKyAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXNDYWNoZVsg
bmFtZVtpXSBdOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIElmIHRo
ZXJlIGlzIG5vIGRhdGEgbGVmdCBpbiB0aGUgY2FjaGUsIHdlIHdhbnQgdG8gY29udGludWUKKyAg
ICAgICAgICAgICAgICAvLyBhbmQgbGV0IHRoZSBjYWNoZSBvYmplY3QgaXRzZWxmIGdldCBkZXN0
cm95ZWQKKyAgICAgICAgICAgICAgICBpZiAoICEoIHB2dCA/IGlzRW1wdHlEYXRhT2JqZWN0IDog
alF1ZXJ5LmlzRW1wdHlPYmplY3QgKSggdGhpc0NhY2hlICkgKSB7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICAvLyBTZWUgalF1ZXJ5LmRhdGEgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyAgICAg
ICAgaWYgKCAhcHZ0ICkgeworICAgICAgICAgICAgZGVsZXRlIGNhY2hlWyBpZCBdLmRhdGE7CisK
KyAgICAgICAgICAgIC8vIERvbid0IGRlc3Ryb3kgdGhlIHBhcmVudCBjYWNoZSB1bmxlc3MgdGhl
IGludGVybmFsIGRhdGEgb2JqZWN0CisgICAgICAgICAgICAvLyBoYWQgYmVlbiB0aGUgb25seSB0
aGluZyBsZWZ0IGluIGl0CisgICAgICAgICAgICBpZiAoICFpc0VtcHR5RGF0YU9iamVjdCggY2Fj
aGVbIGlkIF0gKSApIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICAvLyBEZXN0cm95IHRoZSBjYWNoZQorICAgICAgICBpZiAoIGlz
Tm9kZSApIHsKKyAgICAgICAgICAgIGpRdWVyeS5jbGVhbkRhdGEoIFsgZWxlbSBdLCB0cnVlICk7
CisKKyAgICAgICAgLy8gVXNlIGRlbGV0ZSB3aGVuIHN1cHBvcnRlZCBmb3IgZXhwYW5kb3Mgb3Ig
YGNhY2hlYCBpcyBub3QgYSB3aW5kb3cgcGVyIGlzV2luZG93ICgjMTAwODApCisgICAgICAgIH0g
ZWxzZSBpZiAoIGpRdWVyeS5zdXBwb3J0LmRlbGV0ZUV4cGFuZG8gfHwgY2FjaGUgIT0gY2FjaGUu
d2luZG93ICkgeworICAgICAgICAgICAgZGVsZXRlIGNhY2hlWyBpZCBdOworCisgICAgICAgIC8v
IFdoZW4gYWxsIGVsc2UgZmFpbHMsIG51bGwKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IGNhY2hlWyBpZCBdID0gbnVsbDsKKyAgICAgICAgfQorICAgIH0sCisKKyAgICAvLyBGb3IgaW50
ZXJuYWwgdXNlIG9ubHkuCisgICAgX2RhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBkYXRhICkg
eworICAgICAgICByZXR1cm4galF1ZXJ5LmRhdGEoIGVsZW0sIG5hbWUsIGRhdGEsIHRydWUgKTsK
KyAgICB9LAorCisgICAgLy8gQSBtZXRob2QgZm9yIGRldGVybWluaW5nIGlmIGEgRE9NIG5vZGUg
Y2FuIGhhbmRsZSB0aGUgZGF0YSBleHBhbmRvCisgICAgYWNjZXB0RGF0YTogZnVuY3Rpb24oIGVs
ZW0gKSB7CisgICAgICAgIHZhciBub0RhdGEgPSBlbGVtLm5vZGVOYW1lICYmIGpRdWVyeS5ub0Rh
dGFbIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSBdOworCisgICAgICAgIC8vIG5vZGVzIGFj
Y2VwdCBkYXRhIHVubGVzcyBvdGhlcndpc2Ugc3BlY2lmaWVkOyByZWplY3Rpb24gY2FuIGJlIGNv
bmRpdGlvbmFsCisgICAgICAgIHJldHVybiAhbm9EYXRhIHx8IG5vRGF0YSAhPT0gdHJ1ZSAmJiBl
bGVtLmdldEF0dHJpYnV0ZSgiY2xhc3NpZCIpID09PSBub0RhdGE7CisgICAgfQorfSk7CisKK2pR
dWVyeS5mbi5leHRlbmQoeworICAgIGRhdGE6IGZ1bmN0aW9uKCBrZXksIHZhbHVlICkgeworICAg
ICAgICB2YXIgcGFydHMsIHBhcnQsIGF0dHIsIG5hbWUsIGwsCisgICAgICAgICAgICBlbGVtID0g
dGhpc1swXSwKKyAgICAgICAgICAgIGkgPSAwLAorICAgICAgICAgICAgZGF0YSA9IG51bGw7CisK
KyAgICAgICAgLy8gR2V0cyBhbGwgdmFsdWVzCisgICAgICAgIGlmICgga2V5ID09PSB1bmRlZmlu
ZWQgKSB7CisgICAgICAgICAgICBpZiAoIHRoaXMubGVuZ3RoICkgeworICAgICAgICAgICAgICAg
IGRhdGEgPSBqUXVlcnkuZGF0YSggZWxlbSApOworCisgICAgICAgICAgICAgICAgaWYgKCBlbGVt
Lm5vZGVUeXBlID09PSAxICYmICFqUXVlcnkuX2RhdGEoIGVsZW0sICJwYXJzZWRBdHRycyIgKSAp
IHsKKyAgICAgICAgICAgICAgICAgICAgYXR0ciA9IGVsZW0uYXR0cmlidXRlczsKKyAgICAgICAg
ICAgICAgICAgICAgZm9yICggbCA9IGF0dHIubGVuZ3RoOyBpIDwgbDsgaSsrICkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgbmFtZSA9IGF0dHJbaV0ubmFtZTsKKworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCAhbmFtZS5pbmRleE9mKCAiZGF0YS0iICkgKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbmFtZSA9IGpRdWVyeS5jYW1lbENhc2UoIG5hbWUuc3Vic3RyaW5nKDUp
ICk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhQXR0ciggZWxlbSwgbmFtZSwg
ZGF0YVsgbmFtZSBdICk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgalF1ZXJ5Ll9kYXRhKCBlbGVtLCAicGFyc2Vk
QXR0cnMiLCB0cnVlICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICByZXR1cm4gZGF0YTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFNldHMgbXVsdGlw
bGUgdmFsdWVzCisgICAgICAgIGlmICggdHlwZW9mIGtleSA9PT0gIm9iamVjdCIgKSB7CisgICAg
ICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGpR
dWVyeS5kYXRhKCB0aGlzLCBrZXkgKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisKKyAg
ICAgICAgcGFydHMgPSBrZXkuc3BsaXQoICIuIiwgMiApOworICAgICAgICBwYXJ0c1sxXSA9IHBh
cnRzWzFdID8gIi4iICsgcGFydHNbMV0gOiAiIjsKKyAgICAgICAgcGFydCA9IHBhcnRzWzFdICsg
IiEiOworCisgICAgICAgIHJldHVybiBqUXVlcnkuYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggdmFs
dWUgKSB7CisKKyAgICAgICAgICAgIGlmICggdmFsdWUgPT09IHVuZGVmaW5lZCApIHsKKyAgICAg
ICAgICAgICAgICBkYXRhID0gdGhpcy50cmlnZ2VySGFuZGxlciggImdldERhdGEiICsgcGFydCwg
WyBwYXJ0c1swXSBdICk7CisKKyAgICAgICAgICAgICAgICAvLyBUcnkgdG8gZmV0Y2ggYW55IGlu
dGVybmFsbHkgc3RvcmVkIGRhdGEgZmlyc3QKKyAgICAgICAgICAgICAgICBpZiAoIGRhdGEgPT09
IHVuZGVmaW5lZCAmJiBlbGVtICkgeworICAgICAgICAgICAgICAgICAgICBkYXRhID0galF1ZXJ5
LmRhdGEoIGVsZW0sIGtleSApOworICAgICAgICAgICAgICAgICAgICBkYXRhID0gZGF0YUF0dHIo
IGVsZW0sIGtleSwgZGF0YSApOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
IHJldHVybiBkYXRhID09PSB1bmRlZmluZWQgJiYgcGFydHNbMV0gPworICAgICAgICAgICAgICAg
ICAgICB0aGlzLmRhdGEoIHBhcnRzWzBdICkgOgorICAgICAgICAgICAgICAgICAgICBkYXRhOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwYXJ0c1sxXSA9IHZhbHVlOworICAgICAgICAg
ICAgdGhpcy5lYWNoKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHZhciBzZWxmID0galF1
ZXJ5KCB0aGlzICk7CisKKyAgICAgICAgICAgICAgICBzZWxmLnRyaWdnZXJIYW5kbGVyKCAic2V0
RGF0YSIgKyBwYXJ0LCBwYXJ0cyApOworICAgICAgICAgICAgICAgIGpRdWVyeS5kYXRhKCB0aGlz
LCBrZXksIHZhbHVlICk7CisgICAgICAgICAgICAgICAgc2VsZi50cmlnZ2VySGFuZGxlciggImNo
YW5nZURhdGEiICsgcGFydCwgcGFydHMgKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9LCBu
dWxsLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEsIG51bGwsIGZhbHNlICk7CisgICAgfSwK
KworICAgIHJlbW92ZURhdGE6IGZ1bmN0aW9uKCBrZXkgKSB7CisgICAgICAgIHJldHVybiB0aGlz
LmVhY2goZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBqUXVlcnkucmVtb3ZlRGF0YSggdGhpcywg
a2V5ICk7CisgICAgICAgIH0pOworICAgIH0KK30pOworCitmdW5jdGlvbiBkYXRhQXR0ciggZWxl
bSwga2V5LCBkYXRhICkgeworICAgIC8vIElmIG5vdGhpbmcgd2FzIGZvdW5kIGludGVybmFsbHks
IHRyeSB0byBmZXRjaCBhbnkKKyAgICAvLyBkYXRhIGZyb20gdGhlIEhUTUw1IGRhdGEtKiBhdHRy
aWJ1dGUKKyAgICBpZiAoIGRhdGEgPT09IHVuZGVmaW5lZCAmJiBlbGVtLm5vZGVUeXBlID09PSAx
ICkgeworCisgICAgICAgIHZhciBuYW1lID0gImRhdGEtIiArIGtleS5yZXBsYWNlKCBybXVsdGlE
YXNoLCAiLSQxIiApLnRvTG93ZXJDYXNlKCk7CisKKyAgICAgICAgZGF0YSA9IGVsZW0uZ2V0QXR0
cmlidXRlKCBuYW1lICk7CisKKyAgICAgICAgaWYgKCB0eXBlb2YgZGF0YSA9PT0gInN0cmluZyIg
KSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhID09PSAi
dHJ1ZSIgPyB0cnVlIDoKKyAgICAgICAgICAgICAgICBkYXRhID09PSAiZmFsc2UiID8gZmFsc2Ug
OgorICAgICAgICAgICAgICAgIGRhdGEgPT09ICJudWxsIiA/IG51bGwgOgorICAgICAgICAgICAg
ICAgIC8vIE9ubHkgY29udmVydCB0byBhIG51bWJlciBpZiBpdCBkb2Vzbid0IGNoYW5nZSB0aGUg
c3RyaW5nCisgICAgICAgICAgICAgICAgK2RhdGEgKyAiIiA9PT0gZGF0YSA/ICtkYXRhIDoKKyAg
ICAgICAgICAgICAgICByYnJhY2UudGVzdCggZGF0YSApID8galF1ZXJ5LnBhcnNlSlNPTiggZGF0
YSApIDoKKyAgICAgICAgICAgICAgICAgICAgZGF0YTsKKyAgICAgICAgICAgIH0gY2F0Y2goIGUg
KSB7fQorCisgICAgICAgICAgICAvLyBNYWtlIHN1cmUgd2Ugc2V0IHRoZSBkYXRhIHNvIGl0IGlz
bid0IGNoYW5nZWQgbGF0ZXIKKyAgICAgICAgICAgIGpRdWVyeS5kYXRhKCBlbGVtLCBrZXksIGRh
dGEgKTsKKworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZGF0YSA9IHVuZGVmaW5lZDsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBkYXRhOworfQorCisvLyBjaGVja3MgYSBj
YWNoZSBvYmplY3QgZm9yIGVtcHRpbmVzcworZnVuY3Rpb24gaXNFbXB0eURhdGFPYmplY3QoIG9i
aiApIHsKKyAgICB2YXIgbmFtZTsKKyAgICBmb3IgKCBuYW1lIGluIG9iaiApIHsKKworICAgICAg
ICAvLyBpZiB0aGUgcHVibGljIGRhdGEgb2JqZWN0IGlzIGVtcHR5LCB0aGUgcHJpdmF0ZSBpcyBz
dGlsbCBlbXB0eQorICAgICAgICBpZiAoIG5hbWUgPT09ICJkYXRhIiAmJiBqUXVlcnkuaXNFbXB0
eU9iamVjdCggb2JqW25hbWVdICkgKSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
fQorICAgICAgICBpZiAoIG5hbWUgIT09ICJ0b0pTT04iICkgeworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CitqUXVlcnku
ZXh0ZW5kKHsKKyAgICBxdWV1ZTogZnVuY3Rpb24oIGVsZW0sIHR5cGUsIGRhdGEgKSB7CisgICAg
ICAgIHZhciBxdWV1ZTsKKworICAgICAgICBpZiAoIGVsZW0gKSB7CisgICAgICAgICAgICB0eXBl
ID0gKCB0eXBlIHx8ICJmeCIgKSArICJxdWV1ZSI7CisgICAgICAgICAgICBxdWV1ZSA9IGpRdWVy
eS5fZGF0YSggZWxlbSwgdHlwZSApOworCisgICAgICAgICAgICAvLyBTcGVlZCB1cCBkZXF1ZXVl
IGJ5IGdldHRpbmcgb3V0IHF1aWNrbHkgaWYgdGhpcyBpcyBqdXN0IGEgbG9va3VwCisgICAgICAg
ICAgICBpZiAoIGRhdGEgKSB7CisgICAgICAgICAgICAgICAgaWYgKCAhcXVldWUgfHwgalF1ZXJ5
LmlzQXJyYXkoZGF0YSkgKSB7CisgICAgICAgICAgICAgICAgICAgIHF1ZXVlID0galF1ZXJ5Ll9k
YXRhKCBlbGVtLCB0eXBlLCBqUXVlcnkubWFrZUFycmF5KGRhdGEpICk7CisgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcXVldWUucHVzaCggZGF0YSApOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBxdWV1ZSB8
fCBbXTsKKyAgICAgICAgfQorICAgIH0sCisKKyAgICBkZXF1ZXVlOiBmdW5jdGlvbiggZWxlbSwg
dHlwZSApIHsKKyAgICAgICAgdHlwZSA9IHR5cGUgfHwgImZ4IjsKKworICAgICAgICB2YXIgcXVl
dWUgPSBqUXVlcnkucXVldWUoIGVsZW0sIHR5cGUgKSwKKyAgICAgICAgICAgIHN0YXJ0TGVuZ3Ro
ID0gcXVldWUubGVuZ3RoLAorICAgICAgICAgICAgZm4gPSBxdWV1ZS5zaGlmdCgpLAorICAgICAg
ICAgICAgaG9va3MgPSBqUXVlcnkuX3F1ZXVlSG9va3MoIGVsZW0sIHR5cGUgKSwKKyAgICAgICAg
ICAgIG5leHQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBqUXVlcnkuZGVxdWV1ZSgg
ZWxlbSwgdHlwZSApOworICAgICAgICAgICAgfTsKKworICAgICAgICAvLyBJZiB0aGUgZnggcXVl
dWUgaXMgZGVxdWV1ZWQsIGFsd2F5cyByZW1vdmUgdGhlIHByb2dyZXNzIHNlbnRpbmVsCisgICAg
ICAgIGlmICggZm4gPT09ICJpbnByb2dyZXNzIiApIHsKKyAgICAgICAgICAgIGZuID0gcXVldWUu
c2hpZnQoKTsKKyAgICAgICAgICAgIHN0YXJ0TGVuZ3RoLS07CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoIGZuICkgeworCisgICAgICAgICAgICAvLyBBZGQgYSBwcm9ncmVzcyBzZW50aW5lbCB0
byBwcmV2ZW50IHRoZSBmeCBxdWV1ZSBmcm9tIGJlaW5nCisgICAgICAgICAgICAvLyBhdXRvbWF0
aWNhbGx5IGRlcXVldWVkCisgICAgICAgICAgICBpZiAoIHR5cGUgPT09ICJmeCIgKSB7CisgICAg
ICAgICAgICAgICAgcXVldWUudW5zaGlmdCggImlucHJvZ3Jlc3MiICk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIC8vIGNsZWFyIHVwIHRoZSBsYXN0IHF1ZXVlIHN0b3AgZnVuY3Rpb24K
KyAgICAgICAgICAgIGRlbGV0ZSBob29rcy5zdG9wOworICAgICAgICAgICAgZm4uY2FsbCggZWxl
bSwgbmV4dCwgaG9va3MgKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggIXN0YXJ0TGVuZ3Ro
ICYmIGhvb2tzICkgeworICAgICAgICAgICAgaG9va3MuZW1wdHkuZmlyZSgpOworICAgICAgICB9
CisgICAgfSwKKworICAgIC8vIG5vdCBpbnRlbmRlZCBmb3IgcHVibGljIGNvbnN1bXB0aW9uIC0g
Z2VuZXJhdGVzIGEgcXVldWVIb29rcyBvYmplY3QsIG9yIHJldHVybnMgdGhlIGN1cnJlbnQgb25l
CisgICAgX3F1ZXVlSG9va3M6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlICkgeworICAgICAgICB2YXIg
a2V5ID0gdHlwZSArICJxdWV1ZUhvb2tzIjsKKyAgICAgICAgcmV0dXJuIGpRdWVyeS5fZGF0YSgg
ZWxlbSwga2V5ICkgfHwgalF1ZXJ5Ll9kYXRhKCBlbGVtLCBrZXksIHsKKyAgICAgICAgICAgIGVt
cHR5OiBqUXVlcnkuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLmFkZChmdW5jdGlvbigpIHsKKyAg
ICAgICAgICAgICAgICBqUXVlcnkucmVtb3ZlRGF0YSggZWxlbSwgdHlwZSArICJxdWV1ZSIsIHRy
dWUgKTsKKyAgICAgICAgICAgICAgICBqUXVlcnkucmVtb3ZlRGF0YSggZWxlbSwga2V5LCB0cnVl
ICk7CisgICAgICAgICAgICB9KQorICAgICAgICB9KTsKKyAgICB9Cit9KTsKKworalF1ZXJ5LmZu
LmV4dGVuZCh7CisgICAgcXVldWU6IGZ1bmN0aW9uKCB0eXBlLCBkYXRhICkgeworICAgICAgICB2
YXIgc2V0dGVyID0gMjsKKworICAgICAgICBpZiAoIHR5cGVvZiB0eXBlICE9PSAic3RyaW5nIiAp
IHsKKyAgICAgICAgICAgIGRhdGEgPSB0eXBlOworICAgICAgICAgICAgdHlwZSA9ICJmeCI7Cisg
ICAgICAgICAgICBzZXR0ZXItLTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggYXJndW1lbnRz
Lmxlbmd0aCA8IHNldHRlciApIHsKKyAgICAgICAgICAgIHJldHVybiBqUXVlcnkucXVldWUoIHRo
aXNbMF0sIHR5cGUgKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBkYXRhID09PSB1bmRl
ZmluZWQgPworICAgICAgICAgICAgdGhpcyA6CisgICAgICAgICAgICB0aGlzLmVhY2goZnVuY3Rp
b24oKSB7CisgICAgICAgICAgICAgICAgdmFyIHF1ZXVlID0galF1ZXJ5LnF1ZXVlKCB0aGlzLCB0
eXBlLCBkYXRhICk7CisKKyAgICAgICAgICAgICAgICAvLyBlbnN1cmUgYSBob29rcyBmb3IgdGhp
cyBxdWV1ZQorICAgICAgICAgICAgICAgIGpRdWVyeS5fcXVldWVIb29rcyggdGhpcywgdHlwZSAp
OworCisgICAgICAgICAgICAgICAgaWYgKCB0eXBlID09PSAiZngiICYmIHF1ZXVlWzBdICE9PSAi
aW5wcm9ncmVzcyIgKSB7CisgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5kZXF1ZXVlKCB0aGlz
LCB0eXBlICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgfSwKKyAg
ICBkZXF1ZXVlOiBmdW5jdGlvbiggdHlwZSApIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChm
dW5jdGlvbigpIHsKKyAgICAgICAgICAgIGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCB0eXBlICk7Cisg
ICAgICAgIH0pOworICAgIH0sCisgICAgLy8gQmFzZWQgb2ZmIG9mIHRoZSBwbHVnaW4gYnkgQ2xp
bnQgSGVsZmVycywgd2l0aCBwZXJtaXNzaW9uLgorICAgIC8vIGh0dHA6Ly9ibGluZHNpZ25hbHMu
Y29tL2luZGV4LnBocC8yMDA5LzA3L2pxdWVyeS1kZWxheS8KKyAgICBkZWxheTogZnVuY3Rpb24o
IHRpbWUsIHR5cGUgKSB7CisgICAgICAgIHRpbWUgPSBqUXVlcnkuZnggPyBqUXVlcnkuZnguc3Bl
ZWRzWyB0aW1lIF0gfHwgdGltZSA6IHRpbWU7CisgICAgICAgIHR5cGUgPSB0eXBlIHx8ICJmeCI7
CisKKyAgICAgICAgcmV0dXJuIHRoaXMucXVldWUoIHR5cGUsIGZ1bmN0aW9uKCBuZXh0LCBob29r
cyApIHsKKyAgICAgICAgICAgIHZhciB0aW1lb3V0ID0gc2V0VGltZW91dCggbmV4dCwgdGltZSAp
OworICAgICAgICAgICAgaG9va3Muc3RvcCA9IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAg
IGNsZWFyVGltZW91dCggdGltZW91dCApOworICAgICAgICAgICAgfTsKKyAgICAgICAgfSk7Cisg
ICAgfSwKKyAgICBjbGVhclF1ZXVlOiBmdW5jdGlvbiggdHlwZSApIHsKKyAgICAgICAgcmV0dXJu
IHRoaXMucXVldWUoIHR5cGUgfHwgImZ4IiwgW10gKTsKKyAgICB9LAorICAgIC8vIEdldCBhIHBy
b21pc2UgcmVzb2x2ZWQgd2hlbiBxdWV1ZXMgb2YgYSBjZXJ0YWluIHR5cGUKKyAgICAvLyBhcmUg
ZW1wdGllZCAoZnggaXMgdGhlIHR5cGUgYnkgZGVmYXVsdCkKKyAgICBwcm9taXNlOiBmdW5jdGlv
biggdHlwZSwgb2JqICkgeworICAgICAgICB2YXIgdG1wLAorICAgICAgICAgICAgY291bnQgPSAx
LAorICAgICAgICAgICAgZGVmZXIgPSBqUXVlcnkuRGVmZXJyZWQoKSwKKyAgICAgICAgICAgIGVs
ZW1lbnRzID0gdGhpcywKKyAgICAgICAgICAgIGkgPSB0aGlzLmxlbmd0aCwKKyAgICAgICAgICAg
IHJlc29sdmUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBpZiAoICEoIC0tY291bnQg
KSApIHsKKyAgICAgICAgICAgICAgICAgICAgZGVmZXIucmVzb2x2ZVdpdGgoIGVsZW1lbnRzLCBb
IGVsZW1lbnRzIF0gKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9OworCisgICAg
ICAgIGlmICggdHlwZW9mIHR5cGUgIT09ICJzdHJpbmciICkgeworICAgICAgICAgICAgb2JqID0g
dHlwZTsKKyAgICAgICAgICAgIHR5cGUgPSB1bmRlZmluZWQ7CisgICAgICAgIH0KKyAgICAgICAg
dHlwZSA9IHR5cGUgfHwgImZ4IjsKKworICAgICAgICB3aGlsZSggaS0tICkgeworICAgICAgICAg
ICAgdG1wID0galF1ZXJ5Ll9kYXRhKCBlbGVtZW50c1sgaSBdLCB0eXBlICsgInF1ZXVlSG9va3Mi
ICk7CisgICAgICAgICAgICBpZiAoIHRtcCAmJiB0bXAuZW1wdHkgKSB7CisgICAgICAgICAgICAg
ICAgY291bnQrKzsKKyAgICAgICAgICAgICAgICB0bXAuZW1wdHkuYWRkKCByZXNvbHZlICk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmVzb2x2ZSgpOworICAgICAgICByZXR1
cm4gZGVmZXIucHJvbWlzZSggb2JqICk7CisgICAgfQorfSk7Cit2YXIgbm9kZUhvb2ssIGJvb2xI
b29rLCBmaXhTcGVjaWZpZWQsCisgICAgcmNsYXNzID0gL1tcdFxyXG5dL2csCisgICAgcnJldHVy
biA9IC9cci9nLAorICAgIHJ0eXBlID0gL14oPzpidXR0b258aW5wdXQpJC9pLAorICAgIHJmb2N1
c2FibGUgPSAvXig/OmJ1dHRvbnxpbnB1dHxvYmplY3R8c2VsZWN0fHRleHRhcmVhKSQvaSwKKyAg
ICByY2xpY2thYmxlID0gL15hKD86cmVhfCkkL2ksCisgICAgcmJvb2xlYW4gPSAvXig/OmF1dG9m
b2N1c3xhdXRvcGxheXxhc3luY3xjaGVja2VkfGNvbnRyb2xzfGRlZmVyfGRpc2FibGVkfGhpZGRl
bnxsb29wfG11bHRpcGxlfG9wZW58cmVhZG9ubHl8cmVxdWlyZWR8c2NvcGVkfHNlbGVjdGVkKSQv
aSwKKyAgICBnZXRTZXRBdHRyaWJ1dGUgPSBqUXVlcnkuc3VwcG9ydC5nZXRTZXRBdHRyaWJ1dGU7
CisKK2pRdWVyeS5mbi5leHRlbmQoeworICAgIGF0dHI6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSAp
IHsKKyAgICAgICAgcmV0dXJuIGpRdWVyeS5hY2Nlc3MoIHRoaXMsIGpRdWVyeS5hdHRyLCBuYW1l
LCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgKTsKKyAgICB9LAorCisgICAgcmVtb3ZlQXR0
cjogZnVuY3Rpb24oIG5hbWUgKSB7CisgICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24o
KSB7CisgICAgICAgICAgICBqUXVlcnkucmVtb3ZlQXR0ciggdGhpcywgbmFtZSApOworICAgICAg
ICB9KTsKKyAgICB9LAorCisgICAgcHJvcDogZnVuY3Rpb24oIG5hbWUsIHZhbHVlICkgeworICAg
ICAgICByZXR1cm4galF1ZXJ5LmFjY2VzcyggdGhpcywgalF1ZXJ5LnByb3AsIG5hbWUsIHZhbHVl
LCBhcmd1bWVudHMubGVuZ3RoID4gMSApOworICAgIH0sCisKKyAgICByZW1vdmVQcm9wOiBmdW5j
dGlvbiggbmFtZSApIHsKKyAgICAgICAgbmFtZSA9IGpRdWVyeS5wcm9wRml4WyBuYW1lIF0gfHwg
bmFtZTsKKyAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHsKKyAgICAgICAgICAg
IC8vIHRyeS9jYXRjaCBoYW5kbGVzIGNhc2VzIHdoZXJlIElFIGJhbGtzIChzdWNoIGFzIHJlbW92
aW5nIGEgcHJvcGVydHkgb24gd2luZG93KQorICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAg
ICAgICB0aGlzWyBuYW1lIF0gPSB1bmRlZmluZWQ7CisgICAgICAgICAgICAgICAgZGVsZXRlIHRo
aXNbIG5hbWUgXTsKKyAgICAgICAgICAgIH0gY2F0Y2goIGUgKSB7fQorICAgICAgICB9KTsKKyAg
ICB9LAorCisgICAgYWRkQ2xhc3M6IGZ1bmN0aW9uKCB2YWx1ZSApIHsKKyAgICAgICAgdmFyIGNs
YXNzTmFtZXMsIGksIGwsIGVsZW0sCisgICAgICAgICAgICBzZXRDbGFzcywgYywgY2w7CisKKyAg
ICAgICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggdmFsdWUgKSApIHsKKyAgICAgICAgICAgIHJl
dHVybiB0aGlzLmVhY2goZnVuY3Rpb24oIGogKSB7CisgICAgICAgICAgICAgICAgalF1ZXJ5KCB0
aGlzICkuYWRkQ2xhc3MoIHZhbHVlLmNhbGwodGhpcywgaiwgdGhpcy5jbGFzc05hbWUpICk7Cisg
ICAgICAgICAgICB9KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggdmFsdWUgJiYgdHlwZW9m
IHZhbHVlID09PSAic3RyaW5nIiApIHsKKyAgICAgICAgICAgIGNsYXNzTmFtZXMgPSB2YWx1ZS5z
cGxpdCggY29yZV9yc3BhY2UgKTsKKworICAgICAgICAgICAgZm9yICggaSA9IDAsIGwgPSB0aGlz
Lmxlbmd0aDsgaSA8IGw7IGkrKyApIHsKKyAgICAgICAgICAgICAgICBlbGVtID0gdGhpc1sgaSBd
OworCisgICAgICAgICAgICAgICAgaWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICkgeworICAgICAg
ICAgICAgICAgICAgICBpZiAoICFlbGVtLmNsYXNzTmFtZSAmJiBjbGFzc05hbWVzLmxlbmd0aCA9
PT0gMSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uY2xhc3NOYW1lID0gdmFsdWU7
CisKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHNldENsYXNzID0gIiAiICsgZWxlbS5jbGFzc05hbWUgKyAiICI7CisKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGZvciAoIGMgPSAwLCBjbCA9IGNsYXNzTmFtZXMubGVuZ3RoOyBjIDwgY2w7IGMr
KyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHNldENsYXNzLmluZGV4T2Yo
ICIgIiArIGNsYXNzTmFtZXNbIGMgXSArICIgIiApIDwgMCApIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2V0Q2xhc3MgKz0gY2xhc3NOYW1lc1sgYyBdICsgIiAiOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgIGVsZW0uY2xhc3NOYW1lID0galF1ZXJ5LnRyaW0oIHNldENsYXNz
ICk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9LAorCisgICAgcmVt
b3ZlQ2xhc3M6IGZ1bmN0aW9uKCB2YWx1ZSApIHsKKyAgICAgICAgdmFyIHJlbW92ZXMsIGNsYXNz
TmFtZSwgZWxlbSwgYywgY2wsIGksIGw7CisKKyAgICAgICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlv
biggdmFsdWUgKSApIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oIGog
KSB7CisgICAgICAgICAgICAgICAgalF1ZXJ5KCB0aGlzICkucmVtb3ZlQ2xhc3MoIHZhbHVlLmNh
bGwodGhpcywgaiwgdGhpcy5jbGFzc05hbWUpICk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAg
fQorICAgICAgICBpZiAoICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICJzdHJpbmciKSB8fCB2
YWx1ZSA9PT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgcmVtb3ZlcyA9ICggdmFsdWUgfHwg
IiIgKS5zcGxpdCggY29yZV9yc3BhY2UgKTsKKworICAgICAgICAgICAgZm9yICggaSA9IDAsIGwg
PSB0aGlzLmxlbmd0aDsgaSA8IGw7IGkrKyApIHsKKyAgICAgICAgICAgICAgICBlbGVtID0gdGhp
c1sgaSBdOworICAgICAgICAgICAgICAgIGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSAmJiBlbGVt
LmNsYXNzTmFtZSApIHsKKworICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWUgPSAoIiAiICsg
ZWxlbS5jbGFzc05hbWUgKyAiICIpLnJlcGxhY2UoIHJjbGFzcywgIiAiICk7CisKKyAgICAgICAg
ICAgICAgICAgICAgLy8gbG9vcCBvdmVyIGVhY2ggaXRlbSBpbiB0aGUgcmVtb3ZhbCBsaXN0Cisg
ICAgICAgICAgICAgICAgICAgIGZvciAoIGMgPSAwLCBjbCA9IHJlbW92ZXMubGVuZ3RoOyBjIDwg
Y2w7IGMrKyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlbW92ZSB1bnRpbCB0aGVy
ZSBpcyBub3RoaW5nIHRvIHJlbW92ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgg
Y2xhc3NOYW1lLmluZGV4T2YoIiAiICsgcmVtb3Zlc1sgYyBdICsgIiAiKSA+PSAwICkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZSA9IGNsYXNzTmFtZS5yZXBsYWNlKCAi
ICIgKyByZW1vdmVzWyBjIF0gKyAiICIgLCAiICIgKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbGVtLmNsYXNz
TmFtZSA9IHZhbHVlID8galF1ZXJ5LnRyaW0oIGNsYXNzTmFtZSApIDogIiI7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRoaXM7
CisgICAgfSwKKworICAgIHRvZ2dsZUNsYXNzOiBmdW5jdGlvbiggdmFsdWUsIHN0YXRlVmFsICkg
eworICAgICAgICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZSwKKyAgICAgICAgICAgIGlzQm9vbCA9
IHR5cGVvZiBzdGF0ZVZhbCA9PT0gImJvb2xlYW4iOworCisgICAgICAgIGlmICggalF1ZXJ5Lmlz
RnVuY3Rpb24oIHZhbHVlICkgKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0
aW9uKCBpICkgeworICAgICAgICAgICAgICAgIGpRdWVyeSggdGhpcyApLnRvZ2dsZUNsYXNzKCB2
YWx1ZS5jYWxsKHRoaXMsIGksIHRoaXMuY2xhc3NOYW1lLCBzdGF0ZVZhbCksIHN0YXRlVmFsICk7
CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0aGlzLmVhY2go
ZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBpZiAoIHR5cGUgPT09ICJzdHJpbmciICkgeworICAg
ICAgICAgICAgICAgIC8vIHRvZ2dsZSBpbmRpdmlkdWFsIGNsYXNzIG5hbWVzCisgICAgICAgICAg
ICAgICAgdmFyIGNsYXNzTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgaSA9IDAsCisgICAgICAg
ICAgICAgICAgICAgIHNlbGYgPSBqUXVlcnkoIHRoaXMgKSwKKyAgICAgICAgICAgICAgICAgICAg
c3RhdGUgPSBzdGF0ZVZhbCwKKyAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lcyA9IHZhbHVl
LnNwbGl0KCBjb3JlX3JzcGFjZSApOworCisgICAgICAgICAgICAgICAgd2hpbGUgKCAoY2xhc3NO
YW1lID0gY2xhc3NOYW1lc1sgaSsrIF0pICkgeworICAgICAgICAgICAgICAgICAgICAvLyBjaGVj
ayBlYWNoIGNsYXNzTmFtZSBnaXZlbiwgc3BhY2Ugc2VwYXJhdGVkIGxpc3QKKyAgICAgICAgICAg
ICAgICAgICAgc3RhdGUgPSBpc0Jvb2wgPyBzdGF0ZSA6ICFzZWxmLmhhc0NsYXNzKCBjbGFzc05h
bWUgKTsKKyAgICAgICAgICAgICAgICAgICAgc2VsZlsgc3RhdGUgPyAiYWRkQ2xhc3MiIDogInJl
bW92ZUNsYXNzIiBdKCBjbGFzc05hbWUgKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIH0gZWxzZSBpZiAoIHR5cGUgPT09ICJ1bmRlZmluZWQiIHx8IHR5cGUgPT09ICJib29sZWFu
IiApIHsKKyAgICAgICAgICAgICAgICBpZiAoIHRoaXMuY2xhc3NOYW1lICkgeworICAgICAgICAg
ICAgICAgICAgICAvLyBzdG9yZSBjbGFzc05hbWUgaWYgc2V0CisgICAgICAgICAgICAgICAgICAg
IGpRdWVyeS5fZGF0YSggdGhpcywgIl9fY2xhc3NOYW1lX18iLCB0aGlzLmNsYXNzTmFtZSApOwor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIHRvZ2dsZSB3aG9sZSBjbGFz
c05hbWUKKyAgICAgICAgICAgICAgICB0aGlzLmNsYXNzTmFtZSA9IHRoaXMuY2xhc3NOYW1lIHx8
IHZhbHVlID09PSBmYWxzZSA/ICIiIDogalF1ZXJ5Ll9kYXRhKCB0aGlzLCAiX19jbGFzc05hbWVf
XyIgKSB8fCAiIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfSwKKworICAgIGhh
c0NsYXNzOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7CisgICAgICAgIHZhciBjbGFzc05hbWUgPSAi
ICIgKyBzZWxlY3RvciArICIgIiwKKyAgICAgICAgICAgIGkgPSAwLAorICAgICAgICAgICAgbCA9
IHRoaXMubGVuZ3RoOworICAgICAgICBmb3IgKCA7IGkgPCBsOyBpKysgKSB7CisgICAgICAgICAg
ICBpZiAoIHRoaXNbaV0ubm9kZVR5cGUgPT09IDEgJiYgKCIgIiArIHRoaXNbaV0uY2xhc3NOYW1l
ICsgIiAiKS5yZXBsYWNlKHJjbGFzcywgIiAiKS5pbmRleE9mKCBjbGFzc05hbWUgKSA+PSAwICkg
eworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0sCisKKyAgICB2YWw6IGZ1bmN0aW9uKCB2
YWx1ZSApIHsKKyAgICAgICAgdmFyIGhvb2tzLCByZXQsIGlzRnVuY3Rpb24sCisgICAgICAgICAg
ICBlbGVtID0gdGhpc1swXTsKKworICAgICAgICBpZiAoICFhcmd1bWVudHMubGVuZ3RoICkgewor
ICAgICAgICAgICAgaWYgKCBlbGVtICkgeworICAgICAgICAgICAgICAgIGhvb2tzID0galF1ZXJ5
LnZhbEhvb2tzWyBlbGVtLnR5cGUgXSB8fCBqUXVlcnkudmFsSG9va3NbIGVsZW0ubm9kZU5hbWUu
dG9Mb3dlckNhc2UoKSBdOworCisgICAgICAgICAgICAgICAgaWYgKCBob29rcyAmJiAiZ2V0IiBp
biBob29rcyAmJiAocmV0ID0gaG9va3MuZ2V0KCBlbGVtLCAidmFsdWUiICkpICE9PSB1bmRlZmlu
ZWQgKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgcmV0ID0gZWxlbS52YWx1ZTsKKworICAgICAgICAgICAgICAg
IHJldHVybiB0eXBlb2YgcmV0ID09PSAic3RyaW5nIiA/CisgICAgICAgICAgICAgICAgICAgIC8v
IGhhbmRsZSBtb3N0IGNvbW1vbiBzdHJpbmcgY2FzZXMKKyAgICAgICAgICAgICAgICAgICAgcmV0
LnJlcGxhY2UocnJldHVybiwgIiIpIDoKKyAgICAgICAgICAgICAgICAgICAgLy8gaGFuZGxlIGNh
c2VzIHdoZXJlIHZhbHVlIGlzIG51bGwvdW5kZWYgb3IgbnVtYmVyCisgICAgICAgICAgICAgICAg
ICAgIHJldCA9PSBudWxsID8gIiIgOiByZXQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlzRnVuY3Rpb24gPSBqUXVlcnkuaXNGdW5j
dGlvbiggdmFsdWUgKTsKKworICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCBpICkg
eworICAgICAgICAgICAgdmFyIHZhbCwKKyAgICAgICAgICAgICAgICBzZWxmID0galF1ZXJ5KHRo
aXMpOworCisgICAgICAgICAgICBpZiAoIHRoaXMubm9kZVR5cGUgIT09IDEgKSB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIGlzRnVu
Y3Rpb24gKSB7CisgICAgICAgICAgICAgICAgdmFsID0gdmFsdWUuY2FsbCggdGhpcywgaSwgc2Vs
Zi52YWwoKSApOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB2YWwgPSB2
YWx1ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gVHJlYXQgbnVsbC91bmRlZmlu
ZWQgYXMgIiI7IGNvbnZlcnQgbnVtYmVycyB0byBzdHJpbmcKKyAgICAgICAgICAgIGlmICggdmFs
ID09IG51bGwgKSB7CisgICAgICAgICAgICAgICAgdmFsID0gIiI7CisgICAgICAgICAgICB9IGVs
c2UgaWYgKCB0eXBlb2YgdmFsID09PSAibnVtYmVyIiApIHsKKyAgICAgICAgICAgICAgICB2YWwg
Kz0gIiI7CisgICAgICAgICAgICB9IGVsc2UgaWYgKCBqUXVlcnkuaXNBcnJheSggdmFsICkgKSB7
CisgICAgICAgICAgICAgICAgdmFsID0galF1ZXJ5Lm1hcCh2YWwsIGZ1bmN0aW9uICggdmFsdWUg
KSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZSA9PSBudWxsID8gIiIgOiB2YWx1
ZSArICIiOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBob29rcyA9IGpRdWVyeS52YWxIb29rc1sgdGhpcy50eXBlIF0gfHwgalF1ZXJ5LnZhbEhvb2tz
WyB0aGlzLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgXTsKKworICAgICAgICAgICAgLy8gSWYgc2V0
IHJldHVybnMgdW5kZWZpbmVkLCBmYWxsIGJhY2sgdG8gbm9ybWFsIHNldHRpbmcKKyAgICAgICAg
ICAgIGlmICggIWhvb2tzIHx8ICEoInNldCIgaW4gaG9va3MpIHx8IGhvb2tzLnNldCggdGhpcywg
dmFsLCAidmFsdWUiICkgPT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgICAgICB0aGlzLnZh
bHVlID0gdmFsOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB9Cit9KTsKKworalF1
ZXJ5LmV4dGVuZCh7CisgICAgdmFsSG9va3M6IHsKKyAgICAgICAgb3B0aW9uOiB7CisgICAgICAg
ICAgICBnZXQ6IGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAgICAgIC8vIGF0dHJpYnV0
ZXMudmFsdWUgaXMgdW5kZWZpbmVkIGluIEJsYWNrYmVycnkgNC43IGJ1dAorICAgICAgICAgICAg
ICAgIC8vIHVzZXMgLnZhbHVlLiBTZWUgIzY5MzIKKyAgICAgICAgICAgICAgICB2YXIgdmFsID0g
ZWxlbS5hdHRyaWJ1dGVzLnZhbHVlOworICAgICAgICAgICAgICAgIHJldHVybiAhdmFsIHx8IHZh
bC5zcGVjaWZpZWQgPyBlbGVtLnZhbHVlIDogZWxlbS50ZXh0OworICAgICAgICAgICAgfQorICAg
ICAgICB9LAorICAgICAgICBzZWxlY3Q6IHsKKyAgICAgICAgICAgIGdldDogZnVuY3Rpb24oIGVs
ZW0gKSB7CisgICAgICAgICAgICAgICAgdmFyIHZhbHVlLCBvcHRpb24sCisgICAgICAgICAgICAg
ICAgICAgIG9wdGlvbnMgPSBlbGVtLm9wdGlvbnMsCisgICAgICAgICAgICAgICAgICAgIGluZGV4
ID0gZWxlbS5zZWxlY3RlZEluZGV4LAorICAgICAgICAgICAgICAgICAgICBvbmUgPSBlbGVtLnR5
cGUgPT09ICJzZWxlY3Qtb25lIiB8fCBpbmRleCA8IDAsCisgICAgICAgICAgICAgICAgICAgIHZh
bHVlcyA9IG9uZSA/IG51bGwgOiBbXSwKKyAgICAgICAgICAgICAgICAgICAgbWF4ID0gb25lID8g
aW5kZXggKyAxIDogb3B0aW9ucy5sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgIGkgPSBpbmRl
eCA8IDAgPworICAgICAgICAgICAgICAgICAgICAgICAgbWF4IDoKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG9uZSA/IGluZGV4IDogMDsKKworICAgICAgICAgICAgICAgIC8vIExvb3AgdGhyb3Vn
aCBhbGwgdGhlIHNlbGVjdGVkIG9wdGlvbnMKKyAgICAgICAgICAgICAgICBmb3IgKCA7IGkgPCBt
YXg7IGkrKyApIHsKKyAgICAgICAgICAgICAgICAgICAgb3B0aW9uID0gb3B0aW9uc1sgaSBdOwor
CisgICAgICAgICAgICAgICAgICAgIC8vIG9sZElFIGRvZXNuJ3QgdXBkYXRlIHNlbGVjdGVkIGFm
dGVyIGZvcm0gcmVzZXQgKCMyNTUxKQorICAgICAgICAgICAgICAgICAgICBpZiAoICggb3B0aW9u
LnNlbGVjdGVkIHx8IGkgPT09IGluZGV4ICkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBEb24ndCByZXR1cm4gb3B0aW9ucyB0aGF0IGFyZSBkaXNhYmxlZCBvciBpbiBhIGRpc2Fi
bGVkIG9wdGdyb3VwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBqUXVlcnkuc3VwcG9y
dC5vcHREaXNhYmxlZCA/ICFvcHRpb24uZGlzYWJsZWQgOiBvcHRpb24uZ2V0QXR0cmlidXRlKCJk
aXNhYmxlZCIpID09PSBudWxsICkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoICFv
cHRpb24ucGFyZW50Tm9kZS5kaXNhYmxlZCB8fCAhalF1ZXJ5Lm5vZGVOYW1lKCBvcHRpb24ucGFy
ZW50Tm9kZSwgIm9wdGdyb3VwIiApICkgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8v
IEdldCB0aGUgc3BlY2lmaWMgdmFsdWUgZm9yIHRoZSBvcHRpb24KKyAgICAgICAgICAgICAgICAg
ICAgICAgIHZhbHVlID0galF1ZXJ5KCBvcHRpb24gKS52YWwoKTsKKworICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gV2UgZG9uJ3QgbmVlZCBhbiBhcnJheSBmb3Igb25lIHNlbGVjdHMKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggb25lICkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB2YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gTXVsdGktU2VsZWN0cyByZXR1cm4gYW4gYXJyYXkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHZhbHVlcy5wdXNoKCB2YWx1ZSApOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlczsK
KyAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgIHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVl
ICkgeworICAgICAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBqUXVlcnkubWFrZUFycmF5KCB2YWx1
ZSApOworCisgICAgICAgICAgICAgICAgalF1ZXJ5KGVsZW0pLmZpbmQoIm9wdGlvbiIpLmVhY2go
ZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWQgPSBqUXVlcnku
aW5BcnJheSggalF1ZXJ5KHRoaXMpLnZhbCgpLCB2YWx1ZXMgKSA+PSAwOworICAgICAgICAgICAg
ICAgIH0pOworCisgICAgICAgICAgICAgICAgaWYgKCAhdmFsdWVzLmxlbmd0aCApIHsKKyAgICAg
ICAgICAgICAgICAgICAgZWxlbS5zZWxlY3RlZEluZGV4ID0gLTE7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZXM7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9LAorCisgICAgLy8gVW51c2VkIGluIDEuOCwgbGVmdCBpbiBzbyBhdHRyRm4tc3Rh
YmJlcnMgd29uJ3QgZGllOyByZW1vdmUgaW4gMS45CisgICAgYXR0ckZuOiB7fSwKKworICAgIGF0
dHI6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSwgcGFzcyApIHsKKyAgICAgICAgdmFyIHJl
dCwgaG9va3MsIG5vdHhtbCwKKyAgICAgICAgICAgIG5UeXBlID0gZWxlbS5ub2RlVHlwZTsKKwor
ICAgICAgICAvLyBkb24ndCBnZXQvc2V0IGF0dHJpYnV0ZXMgb24gdGV4dCwgY29tbWVudCBhbmQg
YXR0cmlidXRlIG5vZGVzCisgICAgICAgIGlmICggIWVsZW0gfHwgblR5cGUgPT09IDMgfHwgblR5
cGUgPT09IDggfHwgblR5cGUgPT09IDIgKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICBpZiAoIHBhc3MgJiYgalF1ZXJ5LmlzRnVuY3Rpb24oIGpRdWVyeS5mblsg
bmFtZSBdICkgKSB7CisgICAgICAgICAgICByZXR1cm4galF1ZXJ5KCBlbGVtIClbIG5hbWUgXSgg
dmFsdWUgKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZhbGxiYWNrIHRvIHByb3Agd2hlbiBh
dHRyaWJ1dGVzIGFyZSBub3Qgc3VwcG9ydGVkCisgICAgICAgIGlmICggdHlwZW9mIGVsZW0uZ2V0
QXR0cmlidXRlID09PSAidW5kZWZpbmVkIiApIHsKKyAgICAgICAgICAgIHJldHVybiBqUXVlcnku
cHJvcCggZWxlbSwgbmFtZSwgdmFsdWUgKTsKKyAgICAgICAgfQorCisgICAgICAgIG5vdHhtbCA9
IG5UeXBlICE9PSAxIHx8ICFqUXVlcnkuaXNYTUxEb2MoIGVsZW0gKTsKKworICAgICAgICAvLyBB
bGwgYXR0cmlidXRlcyBhcmUgbG93ZXJjYXNlCisgICAgICAgIC8vIEdyYWIgbmVjZXNzYXJ5IGhv
b2sgaWYgb25lIGlzIGRlZmluZWQKKyAgICAgICAgaWYgKCBub3R4bWwgKSB7CisgICAgICAgICAg
ICBuYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpOworICAgICAgICAgICAgaG9va3MgPSBqUXVlcnku
YXR0ckhvb2tzWyBuYW1lIF0gfHwgKCByYm9vbGVhbi50ZXN0KCBuYW1lICkgPyBib29sSG9vayA6
IG5vZGVIb29rICk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIHZhbHVlICE9PSB1bmRlZmlu
ZWQgKSB7CisKKyAgICAgICAgICAgIGlmICggdmFsdWUgPT09IG51bGwgKSB7CisgICAgICAgICAg
ICAgICAgalF1ZXJ5LnJlbW92ZUF0dHIoIGVsZW0sIG5hbWUgKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoIGhvb2tzICYmICJzZXQiIGluIGhvb2tz
ICYmIG5vdHhtbCAmJiAocmV0ID0gaG9va3Muc2V0KCBlbGVtLCB2YWx1ZSwgbmFtZSApKSAhPT0g
dW5kZWZpbmVkICkgeworICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CisKKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZWxlbS5zZXRBdHRyaWJ1dGUoIG5hbWUsIHZhbHVl
ICsgIiIgKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgfSBlbHNlIGlmICggaG9va3MgJiYgImdldCIgaW4gaG9va3MgJiYgbm90eG1sICYm
IChyZXQgPSBob29rcy5nZXQoIGVsZW0sIG5hbWUgKSkgIT09IG51bGwgKSB7CisgICAgICAgICAg
ICByZXR1cm4gcmV0OworCisgICAgICAgIH0gZWxzZSB7CisKKyAgICAgICAgICAgIHJldCA9IGVs
ZW0uZ2V0QXR0cmlidXRlKCBuYW1lICk7CisKKyAgICAgICAgICAgIC8vIE5vbi1leGlzdGVudCBh
dHRyaWJ1dGVzIHJldHVybiBudWxsLCB3ZSBub3JtYWxpemUgdG8gdW5kZWZpbmVkCisgICAgICAg
ICAgICByZXR1cm4gcmV0ID09PSBudWxsID8KKyAgICAgICAgICAgICAgICB1bmRlZmluZWQgOgor
ICAgICAgICAgICAgICAgIHJldDsKKyAgICAgICAgfQorICAgIH0sCisKKyAgICByZW1vdmVBdHRy
OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7CisgICAgICAgIHZhciBwcm9wTmFtZSwgYXR0ck5h
bWVzLCBuYW1lLCBpc0Jvb2wsCisgICAgICAgICAgICBpID0gMDsKKworICAgICAgICBpZiAoIHZh
bHVlICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7CisKKyAgICAgICAgICAgIGF0dHJOYW1lcyA9
IHZhbHVlLnNwbGl0KCBjb3JlX3JzcGFjZSApOworCisgICAgICAgICAgICBmb3IgKCA7IGkgPCBh
dHRyTmFtZXMubGVuZ3RoOyBpKysgKSB7CisgICAgICAgICAgICAgICAgbmFtZSA9IGF0dHJOYW1l
c1sgaSBdOworCisgICAgICAgICAgICAgICAgaWYgKCBuYW1lICkgeworICAgICAgICAgICAgICAg
ICAgICBwcm9wTmFtZSA9IGpRdWVyeS5wcm9wRml4WyBuYW1lIF0gfHwgbmFtZTsKKyAgICAgICAg
ICAgICAgICAgICAgaXNCb29sID0gcmJvb2xlYW4udGVzdCggbmFtZSApOworCisgICAgICAgICAg
ICAgICAgICAgIC8vIFNlZSAjOTY5OSBmb3IgZXhwbGFuYXRpb24gb2YgdGhpcyBhcHByb2FjaCAo
c2V0dGluZyBmaXJzdCwgdGhlbiByZW1vdmFsKQorICAgICAgICAgICAgICAgICAgICAvLyBEbyBu
b3QgZG8gdGhpcyBmb3IgYm9vbGVhbiBhdHRyaWJ1dGVzIChzZWUgIzEwODcwKQorICAgICAgICAg
ICAgICAgICAgICBpZiAoICFpc0Jvb2wgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBqUXVl
cnkuYXR0ciggZWxlbSwgbmFtZSwgIiIgKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICBlbGVtLnJlbW92ZUF0dHJpYnV0ZSggZ2V0U2V0QXR0cmlidXRlID8gbmFt
ZSA6IHByb3BOYW1lICk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gU2V0IGNvcnJlc3BvbmRp
bmcgcHJvcGVydHkgdG8gZmFsc2UgZm9yIGJvb2xlYW4gYXR0cmlidXRlcworICAgICAgICAgICAg
ICAgICAgICBpZiAoIGlzQm9vbCAmJiBwcm9wTmFtZSBpbiBlbGVtICkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgZWxlbVsgcHJvcE5hbWUgXSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSwK
KworICAgIGF0dHJIb29rczogeworICAgICAgICB0eXBlOiB7CisgICAgICAgICAgICBzZXQ6IGZ1
bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHsKKyAgICAgICAgICAgICAgICAvLyBXZSBjYW4ndCBhbGxv
dyB0aGUgdHlwZSBwcm9wZXJ0eSB0byBiZSBjaGFuZ2VkIChzaW5jZSBpdCBjYXVzZXMgcHJvYmxl
bXMgaW4gSUUpCisgICAgICAgICAgICAgICAgaWYgKCBydHlwZS50ZXN0KCBlbGVtLm5vZGVOYW1l
ICkgJiYgZWxlbS5wYXJlbnROb2RlICkgeworICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXJy
b3IoICJ0eXBlIHByb3BlcnR5IGNhbid0IGJlIGNoYW5nZWQiICk7CisgICAgICAgICAgICAgICAg
fSBlbHNlIGlmICggIWpRdWVyeS5zdXBwb3J0LnJhZGlvVmFsdWUgJiYgdmFsdWUgPT09ICJyYWRp
byIgJiYgalF1ZXJ5Lm5vZGVOYW1lKGVsZW0sICJpbnB1dCIpICkgeworICAgICAgICAgICAgICAg
ICAgICAvLyBTZXR0aW5nIHRoZSB0eXBlIG9uIGEgcmFkaW8gYnV0dG9uIGFmdGVyIHRoZSB2YWx1
ZSByZXNldHMgdGhlIHZhbHVlIGluIElFNi05CisgICAgICAgICAgICAgICAgICAgIC8vIFJlc2V0
IHZhbHVlIHRvIGl0J3MgZGVmYXVsdCBpbiBjYXNlIHR5cGUgaXMgc2V0IGFmdGVyIHZhbHVlCisg
ICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgZm9yIGVsZW1lbnQgY3JlYXRpb24KKyAgICAg
ICAgICAgICAgICAgICAgdmFyIHZhbCA9IGVsZW0udmFsdWU7CisgICAgICAgICAgICAgICAgICAg
IGVsZW0uc2V0QXR0cmlidXRlKCAidHlwZSIsIHZhbHVlICk7CisgICAgICAgICAgICAgICAgICAg
IGlmICggdmFsICkgeworICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS52YWx1ZSA9IHZhbDsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9LAorICAgICAgICAv
LyBVc2UgdGhlIHZhbHVlIHByb3BlcnR5IGZvciBiYWNrIGNvbXBhdAorICAgICAgICAvLyBVc2Ug
dGhlIG5vZGVIb29rIGZvciBidXR0b24gZWxlbWVudHMgaW4gSUU2LzcgKCMxOTU0KQorICAgICAg
ICB2YWx1ZTogeworICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiggZWxlbSwgbmFtZSApIHsKKyAg
ICAgICAgICAgICAgICBpZiAoIG5vZGVIb29rICYmIGpRdWVyeS5ub2RlTmFtZSggZWxlbSwgImJ1
dHRvbiIgKSApIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGVIb29rLmdldCggZWxl
bSwgbmFtZSApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gbmFt
ZSBpbiBlbGVtID8KKyAgICAgICAgICAgICAgICAgICAgZWxlbS52YWx1ZSA6CisgICAgICAgICAg
ICAgICAgICAgIG51bGw7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgc2V0OiBmdW5jdGlv
biggZWxlbSwgdmFsdWUsIG5hbWUgKSB7CisgICAgICAgICAgICAgICAgaWYgKCBub2RlSG9vayAm
JiBqUXVlcnkubm9kZU5hbWUoIGVsZW0sICJidXR0b24iICkgKSB7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBub2RlSG9vay5zZXQoIGVsZW0sIHZhbHVlLCBuYW1lICk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIC8vIERvZXMgbm90IHJldHVybiBzbyB0aGF0IHNldEF0
dHJpYnV0ZSBpcyBhbHNvIHVzZWQKKyAgICAgICAgICAgICAgICBlbGVtLnZhbHVlID0gdmFsdWU7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9LAorCisgICAgcHJvcEZpeDogeworICAg
ICAgICB0YWJpbmRleDogInRhYkluZGV4IiwKKyAgICAgICAgcmVhZG9ubHk6ICJyZWFkT25seSIs
CisgICAgICAgICJmb3IiOiAiaHRtbEZvciIsCisgICAgICAgICJjbGFzcyI6ICJjbGFzc05hbWUi
LAorICAgICAgICBtYXhsZW5ndGg6ICJtYXhMZW5ndGgiLAorICAgICAgICBjZWxsc3BhY2luZzog
ImNlbGxTcGFjaW5nIiwKKyAgICAgICAgY2VsbHBhZGRpbmc6ICJjZWxsUGFkZGluZyIsCisgICAg
ICAgIHJvd3NwYW46ICJyb3dTcGFuIiwKKyAgICAgICAgY29sc3BhbjogImNvbFNwYW4iLAorICAg
ICAgICB1c2VtYXA6ICJ1c2VNYXAiLAorICAgICAgICBmcmFtZWJvcmRlcjogImZyYW1lQm9yZGVy
IiwKKyAgICAgICAgY29udGVudGVkaXRhYmxlOiAiY29udGVudEVkaXRhYmxlIgorICAgIH0sCisK
KyAgICBwcm9wOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUgKSB7CisgICAgICAgIHZhciBy
ZXQsIGhvb2tzLCBub3R4bWwsCisgICAgICAgICAgICBuVHlwZSA9IGVsZW0ubm9kZVR5cGU7CisK
KyAgICAgICAgLy8gZG9uJ3QgZ2V0L3NldCBwcm9wZXJ0aWVzIG9uIHRleHQsIGNvbW1lbnQgYW5k
IGF0dHJpYnV0ZSBub2RlcworICAgICAgICBpZiAoICFlbGVtIHx8IG5UeXBlID09PSAzIHx8IG5U
eXBlID09PSA4IHx8IG5UeXBlID09PSAyICkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgbm90eG1sID0gblR5cGUgIT09IDEgfHwgIWpRdWVyeS5pc1hNTERvYygg
ZWxlbSApOworCisgICAgICAgIGlmICggbm90eG1sICkgeworICAgICAgICAgICAgLy8gRml4IG5h
bWUgYW5kIGF0dGFjaCBob29rcworICAgICAgICAgICAgbmFtZSA9IGpRdWVyeS5wcm9wRml4WyBu
YW1lIF0gfHwgbmFtZTsKKyAgICAgICAgICAgIGhvb2tzID0galF1ZXJ5LnByb3BIb29rc1sgbmFt
ZSBdOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkgewor
ICAgICAgICAgICAgaWYgKCBob29rcyAmJiAic2V0IiBpbiBob29rcyAmJiAocmV0ID0gaG9va3Mu
c2V0KCBlbGVtLCB2YWx1ZSwgbmFtZSApKSAhPT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAg
ICAgIHJldHVybiByZXQ7CisKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
cmV0dXJuICggZWxlbVsgbmFtZSBdID0gdmFsdWUgKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKCBob29rcyAmJiAiZ2V0IiBpbiBob29rcyAmJiAo
cmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBuYW1lICkpICE9PSBudWxsICkgeworICAgICAgICAgICAg
ICAgIHJldHVybiByZXQ7CisKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGVsZW1bIG5hbWUgXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0sCisK
KyAgICBwcm9wSG9va3M6IHsKKyAgICAgICAgdGFiSW5kZXg6IHsKKyAgICAgICAgICAgIGdldDog
ZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAgICAgICAgLy8gZWxlbS50YWJJbmRleCBkb2Vz
bid0IGFsd2F5cyByZXR1cm4gdGhlIGNvcnJlY3QgdmFsdWUgd2hlbiBpdCBoYXNuJ3QgYmVlbiBl
eHBsaWNpdGx5IHNldAorICAgICAgICAgICAgICAgIC8vIGh0dHA6Ly9mbHVpZHByb2plY3Qub3Jn
L2Jsb2cvMjAwOC8wMS8wOS9nZXR0aW5nLXNldHRpbmctYW5kLXJlbW92aW5nLXRhYmluZGV4LXZh
bHVlcy13aXRoLWphdmFzY3JpcHQvCisgICAgICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZU5vZGUg
PSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoInRhYmluZGV4Iik7CisKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gYXR0cmlidXRlTm9kZSAmJiBhdHRyaWJ1dGVOb2RlLnNwZWNpZmllZCA/CisgICAgICAg
ICAgICAgICAgICAgIHBhcnNlSW50KCBhdHRyaWJ1dGVOb2RlLnZhbHVlLCAxMCApIDoKKyAgICAg
ICAgICAgICAgICAgICAgcmZvY3VzYWJsZS50ZXN0KCBlbGVtLm5vZGVOYW1lICkgfHwgcmNsaWNr
YWJsZS50ZXN0KCBlbGVtLm5vZGVOYW1lICkgJiYgZWxlbS5ocmVmID8KKyAgICAgICAgICAgICAg
ICAgICAgICAgIDAgOgorICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorfSk7CisKKy8vIEhvb2sgZm9yIGJvb2xlYW4gYXR0
cmlidXRlcworYm9vbEhvb2sgPSB7CisgICAgZ2V0OiBmdW5jdGlvbiggZWxlbSwgbmFtZSApIHsK
KyAgICAgICAgLy8gQWxpZ24gYm9vbGVhbiBhdHRyaWJ1dGVzIHdpdGggY29ycmVzcG9uZGluZyBw
cm9wZXJ0aWVzCisgICAgICAgIC8vIEZhbGwgYmFjayB0byBhdHRyaWJ1dGUgcHJlc2VuY2Ugd2hl
cmUgc29tZSBib29sZWFucyBhcmUgbm90IHN1cHBvcnRlZAorICAgICAgICB2YXIgYXR0ck5vZGUs
CisgICAgICAgICAgICBwcm9wZXJ0eSA9IGpRdWVyeS5wcm9wKCBlbGVtLCBuYW1lICk7CisgICAg
ICAgIHJldHVybiBwcm9wZXJ0eSA9PT0gdHJ1ZSB8fCB0eXBlb2YgcHJvcGVydHkgIT09ICJib29s
ZWFuIiAmJiAoIGF0dHJOb2RlID0gZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKG5hbWUpICkgJiYgYXR0
ck5vZGUubm9kZVZhbHVlICE9PSBmYWxzZSA/CisgICAgICAgICAgICBuYW1lLnRvTG93ZXJDYXNl
KCkgOgorICAgICAgICAgICAgdW5kZWZpbmVkOworICAgIH0sCisgICAgc2V0OiBmdW5jdGlvbigg
ZWxlbSwgdmFsdWUsIG5hbWUgKSB7CisgICAgICAgIHZhciBwcm9wTmFtZTsKKyAgICAgICAgaWYg
KCB2YWx1ZSA9PT0gZmFsc2UgKSB7CisgICAgICAgICAgICAvLyBSZW1vdmUgYm9vbGVhbiBhdHRy
aWJ1dGVzIHdoZW4gc2V0IHRvIGZhbHNlCisgICAgICAgICAgICBqUXVlcnkucmVtb3ZlQXR0cigg
ZWxlbSwgbmFtZSApOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gdmFsdWUgaXMg
dHJ1ZSBzaW5jZSB3ZSBrbm93IGF0IHRoaXMgcG9pbnQgaXQncyB0eXBlIGJvb2xlYW4gYW5kIG5v
dCBmYWxzZQorICAgICAgICAgICAgLy8gU2V0IGJvb2xlYW4gYXR0cmlidXRlcyB0byB0aGUgc2Ft
ZSBuYW1lIGFuZCBzZXQgdGhlIERPTSBwcm9wZXJ0eQorICAgICAgICAgICAgcHJvcE5hbWUgPSBq
UXVlcnkucHJvcEZpeFsgbmFtZSBdIHx8IG5hbWU7CisgICAgICAgICAgICBpZiAoIHByb3BOYW1l
IGluIGVsZW0gKSB7CisgICAgICAgICAgICAgICAgLy8gT25seSBzZXQgdGhlIElETCBzcGVjaWZp
Y2FsbHkgaWYgaXQgYWxyZWFkeSBleGlzdHMgb24gdGhlIGVsZW1lbnQKKyAgICAgICAgICAgICAg
ICBlbGVtWyBwcm9wTmFtZSBdID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ZWxlbS5zZXRBdHRyaWJ1dGUoIG5hbWUsIG5hbWUudG9Mb3dlckNhc2UoKSApOworICAgICAgICB9
CisgICAgICAgIHJldHVybiBuYW1lOworICAgIH0KK307CisKKy8vIElFNi83IGRvIG5vdCBzdXBw
b3J0IGdldHRpbmcvc2V0dGluZyBzb21lIGF0dHJpYnV0ZXMgd2l0aCBnZXQvc2V0QXR0cmlidXRl
CitpZiAoICFnZXRTZXRBdHRyaWJ1dGUgKSB7CisKKyAgICBmaXhTcGVjaWZpZWQgPSB7CisgICAg
ICAgIG5hbWU6IHRydWUsCisgICAgICAgIGlkOiB0cnVlLAorICAgICAgICBjb29yZHM6IHRydWUK
KyAgICB9OworCisgICAgLy8gVXNlIHRoaXMgZm9yIGFueSBhdHRyaWJ1dGUgaW4gSUU2LzcKKyAg
ICAvLyBUaGlzIGZpeGVzIGFsbW9zdCBldmVyeSBJRTYvNyBpc3N1ZQorICAgIG5vZGVIb29rID0g
alF1ZXJ5LnZhbEhvb2tzLmJ1dHRvbiA9IHsKKyAgICAgICAgZ2V0OiBmdW5jdGlvbiggZWxlbSwg
bmFtZSApIHsKKyAgICAgICAgICAgIHZhciByZXQ7CisgICAgICAgICAgICByZXQgPSBlbGVtLmdl
dEF0dHJpYnV0ZU5vZGUoIG5hbWUgKTsKKyAgICAgICAgICAgIHJldHVybiByZXQgJiYgKCBmaXhT
cGVjaWZpZWRbIG5hbWUgXSA/IHJldC52YWx1ZSAhPT0gIiIgOiByZXQuc3BlY2lmaWVkICkgPwor
ICAgICAgICAgICAgICAgIHJldC52YWx1ZSA6CisgICAgICAgICAgICAgICAgdW5kZWZpbmVkOwor
ICAgICAgICB9LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSwgbmFtZSApIHsK
KyAgICAgICAgICAgIC8vIFNldCB0aGUgZXhpc3Rpbmcgb3IgY3JlYXRlIGEgbmV3IGF0dHJpYnV0
ZSBub2RlCisgICAgICAgICAgICB2YXIgcmV0ID0gZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCBuYW1l
ICk7CisgICAgICAgICAgICBpZiAoICFyZXQgKSB7CisgICAgICAgICAgICAgICAgcmV0ID0gZG9j
dW1lbnQuY3JlYXRlQXR0cmlidXRlKCBuYW1lICk7CisgICAgICAgICAgICAgICAgZWxlbS5zZXRB
dHRyaWJ1dGVOb2RlKCByZXQgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiAo
IHJldC52YWx1ZSA9IHZhbHVlICsgIiIgKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICAvLyBT
ZXQgd2lkdGggYW5kIGhlaWdodCB0byBhdXRvIGluc3RlYWQgb2YgMCBvbiBlbXB0eSBzdHJpbmco
IEJ1ZyAjODE1MCApCisgICAgLy8gVGhpcyBpcyBmb3IgcmVtb3ZhbHMKKyAgICBqUXVlcnkuZWFj
aChbICJ3aWR0aCIsICJoZWlnaHQiIF0sIGZ1bmN0aW9uKCBpLCBuYW1lICkgeworICAgICAgICBq
UXVlcnkuYXR0ckhvb2tzWyBuYW1lIF0gPSBqUXVlcnkuZXh0ZW5kKCBqUXVlcnkuYXR0ckhvb2tz
WyBuYW1lIF0sIHsKKyAgICAgICAgICAgIHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkgewor
ICAgICAgICAgICAgICAgIGlmICggdmFsdWUgPT09ICIiICkgeworICAgICAgICAgICAgICAgICAg
ICBlbGVtLnNldEF0dHJpYnV0ZSggbmFtZSwgImF1dG8iICk7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiB2YWx1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0pOworICAgIH0pOworCisgICAgLy8gU2V0IGNvbnRlbnRlZGl0YWJsZSB0byBmYWxzZSBvbiBy
ZW1vdmFscygjMTA0MjkpCisgICAgLy8gU2V0dGluZyB0byBlbXB0eSBzdHJpbmcgdGhyb3dzIGFu
IGVycm9yIGFzIGFuIGludmFsaWQgdmFsdWUKKyAgICBqUXVlcnkuYXR0ckhvb2tzLmNvbnRlbnRl
ZGl0YWJsZSA9IHsKKyAgICAgICAgZ2V0OiBub2RlSG9vay5nZXQsCisgICAgICAgIHNldDogZnVu
Y3Rpb24oIGVsZW0sIHZhbHVlLCBuYW1lICkgeworICAgICAgICAgICAgaWYgKCB2YWx1ZSA9PT0g
IiIgKSB7CisgICAgICAgICAgICAgICAgdmFsdWUgPSAiZmFsc2UiOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgbm9kZUhvb2suc2V0KCBlbGVtLCB2YWx1ZSwgbmFtZSApOworICAgICAgICB9
CisgICAgfTsKK30KKworCisvLyBTb21lIGF0dHJpYnV0ZXMgcmVxdWlyZSBhIHNwZWNpYWwgY2Fs
bCBvbiBJRQoraWYgKCAhalF1ZXJ5LnN1cHBvcnQuaHJlZk5vcm1hbGl6ZWQgKSB7CisgICAgalF1
ZXJ5LmVhY2goWyAiaHJlZiIsICJzcmMiLCAid2lkdGgiLCAiaGVpZ2h0IiBdLCBmdW5jdGlvbigg
aSwgbmFtZSApIHsKKyAgICAgICAgalF1ZXJ5LmF0dHJIb29rc1sgbmFtZSBdID0galF1ZXJ5LmV4
dGVuZCggalF1ZXJ5LmF0dHJIb29rc1sgbmFtZSBdLCB7CisgICAgICAgICAgICBnZXQ6IGZ1bmN0
aW9uKCBlbGVtICkgeworICAgICAgICAgICAgICAgIHZhciByZXQgPSBlbGVtLmdldEF0dHJpYnV0
ZSggbmFtZSwgMiApOworICAgICAgICAgICAgICAgIHJldHVybiByZXQgPT09IG51bGwgPyB1bmRl
ZmluZWQgOiByZXQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgIH0pOworfQorCitp
ZiAoICFqUXVlcnkuc3VwcG9ydC5zdHlsZSApIHsKKyAgICBqUXVlcnkuYXR0ckhvb2tzLnN0eWxl
ID0geworICAgICAgICBnZXQ6IGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAgLy8gUmV0
dXJuIHVuZGVmaW5lZCBpbiB0aGUgY2FzZSBvZiBlbXB0eSBzdHJpbmcKKyAgICAgICAgICAgIC8v
IE5vcm1hbGl6ZSB0byBsb3dlcmNhc2Ugc2luY2UgSUUgdXBwZXJjYXNlcyBjc3MgcHJvcGVydHkg
bmFtZXMKKyAgICAgICAgICAgIHJldHVybiBlbGVtLnN0eWxlLmNzc1RleHQudG9Mb3dlckNhc2Uo
KSB8fCB1bmRlZmluZWQ7CisgICAgICAgIH0sCisgICAgICAgIHNldDogZnVuY3Rpb24oIGVsZW0s
IHZhbHVlICkgeworICAgICAgICAgICAgcmV0dXJuICggZWxlbS5zdHlsZS5jc3NUZXh0ID0gdmFs
dWUgKyAiIiApOworICAgICAgICB9CisgICAgfTsKK30KKworLy8gU2FmYXJpIG1pcy1yZXBvcnRz
IHRoZSBkZWZhdWx0IHNlbGVjdGVkIHByb3BlcnR5IG9mIGFuIG9wdGlvbgorLy8gQWNjZXNzaW5n
IHRoZSBwYXJlbnQncyBzZWxlY3RlZEluZGV4IHByb3BlcnR5IGZpeGVzIGl0CitpZiAoICFqUXVl
cnkuc3VwcG9ydC5vcHRTZWxlY3RlZCApIHsKKyAgICBqUXVlcnkucHJvcEhvb2tzLnNlbGVjdGVk
ID0galF1ZXJ5LmV4dGVuZCggalF1ZXJ5LnByb3BIb29rcy5zZWxlY3RlZCwgeworICAgICAgICBn
ZXQ6IGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAgdmFyIHBhcmVudCA9IGVsZW0ucGFy
ZW50Tm9kZTsKKworICAgICAgICAgICAgaWYgKCBwYXJlbnQgKSB7CisgICAgICAgICAgICAgICAg
cGFyZW50LnNlbGVjdGVkSW5kZXg7CisKKyAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhh
dCBpdCBhbHNvIHdvcmtzIHdpdGggb3B0Z3JvdXBzLCBzZWUgIzU3MDEKKyAgICAgICAgICAgICAg
ICBpZiAoIHBhcmVudC5wYXJlbnROb2RlICkgeworICAgICAgICAgICAgICAgICAgICBwYXJlbnQu
cGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAgfSk7Cit9CisKKy8v
IElFNi83IGNhbGwgZW5jdHlwZSBlbmNvZGluZworaWYgKCAhalF1ZXJ5LnN1cHBvcnQuZW5jdHlw
ZSApIHsKKyAgICBqUXVlcnkucHJvcEZpeC5lbmN0eXBlID0gImVuY29kaW5nIjsKK30KKworLy8g
UmFkaW9zIGFuZCBjaGVja2JveGVzIGdldHRlci9zZXR0ZXIKK2lmICggIWpRdWVyeS5zdXBwb3J0
LmNoZWNrT24gKSB7CisgICAgalF1ZXJ5LmVhY2goWyAicmFkaW8iLCAiY2hlY2tib3giIF0sIGZ1
bmN0aW9uKCkgeworICAgICAgICBqUXVlcnkudmFsSG9va3NbIHRoaXMgXSA9IHsKKyAgICAgICAg
ICAgIGdldDogZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAgICAgICAgLy8gSGFuZGxlIHRo
ZSBjYXNlIHdoZXJlIGluIFdlYmtpdCAiIiBpcyByZXR1cm5lZCBpbnN0ZWFkIG9mICJvbiIgaWYg
YSB2YWx1ZSBpc24ndCBzcGVjaWZpZWQKKyAgICAgICAgICAgICAgICByZXR1cm4gZWxlbS5nZXRB
dHRyaWJ1dGUoInZhbHVlIikgPT09IG51bGwgPyAib24iIDogZWxlbS52YWx1ZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfTsKKyAgICB9KTsKK30KK2pRdWVyeS5lYWNoKFsgInJhZGlvIiwgImNo
ZWNrYm94IiBdLCBmdW5jdGlvbigpIHsKKyAgICBqUXVlcnkudmFsSG9va3NbIHRoaXMgXSA9IGpR
dWVyeS5leHRlbmQoIGpRdWVyeS52YWxIb29rc1sgdGhpcyBdLCB7CisgICAgICAgIHNldDogZnVu
Y3Rpb24oIGVsZW0sIHZhbHVlICkgeworICAgICAgICAgICAgaWYgKCBqUXVlcnkuaXNBcnJheSgg
dmFsdWUgKSApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gKCBlbGVtLmNoZWNrZWQgPSBqUXVl
cnkuaW5BcnJheSggalF1ZXJ5KGVsZW0pLnZhbCgpLCB2YWx1ZSApID49IDAgKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0pOworfSk7Cit2YXIgcmZvcm1FbGVtcyA9IC9eKD86dGV4
dGFyZWF8aW5wdXR8c2VsZWN0KSQvaSwKKyAgICBydHlwZW5hbWVzcGFjZSA9IC9eKFteXC5dKnwp
KD86XC4oLispfCkkLywKKyAgICByaG92ZXJIYWNrID0gLyg/Ol58XHMpaG92ZXIoXC5cUyt8KVxi
LywKKyAgICBya2V5RXZlbnQgPSAvXmtleS8sCisgICAgcm1vdXNlRXZlbnQgPSAvXig/Om1vdXNl
fGNvbnRleHRtZW51KXxjbGljay8sCisgICAgcmZvY3VzTW9ycGggPSAvXig/OmZvY3VzaW5mb2N1
c3xmb2N1c291dGJsdXIpJC8sCisgICAgaG92ZXJIYWNrID0gZnVuY3Rpb24oIGV2ZW50cyApIHsK
KyAgICAgICAgcmV0dXJuIGpRdWVyeS5ldmVudC5zcGVjaWFsLmhvdmVyID8gZXZlbnRzIDogZXZl
bnRzLnJlcGxhY2UoIHJob3ZlckhhY2ssICJtb3VzZWVudGVyJDEgbW91c2VsZWF2ZSQxIiApOwor
ICAgIH07CisKKy8qCisgKiBIZWxwZXIgZnVuY3Rpb25zIGZvciBtYW5hZ2luZyBldmVudHMgLS0g
bm90IHBhcnQgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuCisgKiBQcm9wcyB0byBEZWFuIEVkd2Fy
ZHMnIGFkZEV2ZW50IGxpYnJhcnkgZm9yIG1hbnkgb2YgdGhlIGlkZWFzLgorICovCitqUXVlcnku
ZXZlbnQgPSB7CisKKyAgICBhZGQ6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlcywgaGFuZGxlciwgZGF0
YSwgc2VsZWN0b3IgKSB7CisKKyAgICAgICAgdmFyIGVsZW1EYXRhLCBldmVudEhhbmRsZSwgZXZl
bnRzLAorICAgICAgICAgICAgdCwgdG5zLCB0eXBlLCBuYW1lc3BhY2VzLCBoYW5kbGVPYmosCisg
ICAgICAgICAgICBoYW5kbGVPYmpJbiwgaGFuZGxlcnMsIHNwZWNpYWw7CisKKyAgICAgICAgLy8g
RG9uJ3QgYXR0YWNoIGV2ZW50cyB0byBub0RhdGEgb3IgdGV4dC9jb21tZW50IG5vZGVzIChhbGxv
dyBwbGFpbiBvYmplY3RzIHRobykKKyAgICAgICAgaWYgKCBlbGVtLm5vZGVUeXBlID09PSAzIHx8
IGVsZW0ubm9kZVR5cGUgPT09IDggfHwgIXR5cGVzIHx8ICFoYW5kbGVyIHx8ICEoZWxlbURhdGEg
PSBqUXVlcnkuX2RhdGEoIGVsZW0gKSkgKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICAvLyBDYWxsZXIgY2FuIHBhc3MgaW4gYW4gb2JqZWN0IG9mIGN1c3RvbSBk
YXRhIGluIGxpZXUgb2YgdGhlIGhhbmRsZXIKKyAgICAgICAgaWYgKCBoYW5kbGVyLmhhbmRsZXIg
KSB7CisgICAgICAgICAgICBoYW5kbGVPYmpJbiA9IGhhbmRsZXI7CisgICAgICAgICAgICBoYW5k
bGVyID0gaGFuZGxlT2JqSW4uaGFuZGxlcjsKKyAgICAgICAgICAgIHNlbGVjdG9yID0gaGFuZGxl
T2JqSW4uc2VsZWN0b3I7CisgICAgICAgIH0KKworICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0
aGUgaGFuZGxlciBoYXMgYSB1bmlxdWUgSUQsIHVzZWQgdG8gZmluZC9yZW1vdmUgaXQgbGF0ZXIK
KyAgICAgICAgaWYgKCAhaGFuZGxlci5ndWlkICkgeworICAgICAgICAgICAgaGFuZGxlci5ndWlk
ID0galF1ZXJ5Lmd1aWQrKzsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEluaXQgdGhlIGVsZW1l
bnQncyBldmVudCBzdHJ1Y3R1cmUgYW5kIG1haW4gaGFuZGxlciwgaWYgdGhpcyBpcyB0aGUgZmly
c3QKKyAgICAgICAgZXZlbnRzID0gZWxlbURhdGEuZXZlbnRzOworICAgICAgICBpZiAoICFldmVu
dHMgKSB7CisgICAgICAgICAgICBlbGVtRGF0YS5ldmVudHMgPSBldmVudHMgPSB7fTsKKyAgICAg
ICAgfQorICAgICAgICBldmVudEhhbmRsZSA9IGVsZW1EYXRhLmhhbmRsZTsKKyAgICAgICAgaWYg
KCAhZXZlbnRIYW5kbGUgKSB7CisgICAgICAgICAgICBlbGVtRGF0YS5oYW5kbGUgPSBldmVudEhh
bmRsZSA9IGZ1bmN0aW9uKCBlICkgeworICAgICAgICAgICAgICAgIC8vIERpc2NhcmQgdGhlIHNl
Y29uZCBldmVudCBvZiBhIGpRdWVyeS5ldmVudC50cmlnZ2VyKCkgYW5kCisgICAgICAgICAgICAg
ICAgLy8gd2hlbiBhbiBldmVudCBpcyBjYWxsZWQgYWZ0ZXIgYSBwYWdlIGhhcyB1bmxvYWRlZAor
ICAgICAgICAgICAgICAgIHJldHVybiB0eXBlb2YgalF1ZXJ5ICE9PSAidW5kZWZpbmVkIiAmJiAo
IWUgfHwgalF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCAhPT0gZS50eXBlKSA/CisgICAgICAgICAgICAg
ICAgICAgIGpRdWVyeS5ldmVudC5kaXNwYXRjaC5hcHBseSggZXZlbnRIYW5kbGUuZWxlbSwgYXJn
dW1lbnRzICkgOgorICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQ7CisgICAgICAgICAgICB9
OworICAgICAgICAgICAgLy8gQWRkIGVsZW0gYXMgYSBwcm9wZXJ0eSBvZiB0aGUgaGFuZGxlIGZu
IHRvIHByZXZlbnQgYSBtZW1vcnkgbGVhayB3aXRoIElFIG5vbi1uYXRpdmUgZXZlbnRzCisgICAg
ICAgICAgICBldmVudEhhbmRsZS5lbGVtID0gZWxlbTsKKyAgICAgICAgfQorCisgICAgICAgIC8v
IEhhbmRsZSBtdWx0aXBsZSBldmVudHMgc2VwYXJhdGVkIGJ5IGEgc3BhY2UKKyAgICAgICAgLy8g
alF1ZXJ5KC4uLikuYmluZCgibW91c2VvdmVyIG1vdXNlb3V0IiwgZm4pOworICAgICAgICB0eXBl
cyA9IGpRdWVyeS50cmltKCBob3ZlckhhY2sodHlwZXMpICkuc3BsaXQoICIgIiApOworICAgICAg
ICBmb3IgKCB0ID0gMDsgdCA8IHR5cGVzLmxlbmd0aDsgdCsrICkgeworCisgICAgICAgICAgICB0
bnMgPSBydHlwZW5hbWVzcGFjZS5leGVjKCB0eXBlc1t0XSApIHx8IFtdOworICAgICAgICAgICAg
dHlwZSA9IHRuc1sxXTsKKyAgICAgICAgICAgIG5hbWVzcGFjZXMgPSAoIHRuc1syXSB8fCAiIiAp
LnNwbGl0KCAiLiIgKS5zb3J0KCk7CisKKyAgICAgICAgICAgIC8vIElmIGV2ZW50IGNoYW5nZXMg
aXRzIHR5cGUsIHVzZSB0aGUgc3BlY2lhbCBldmVudCBoYW5kbGVycyBmb3IgdGhlIGNoYW5nZWQg
dHlwZQorICAgICAgICAgICAgc3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0g
fHwge307CisKKyAgICAgICAgICAgIC8vIElmIHNlbGVjdG9yIGRlZmluZWQsIGRldGVybWluZSBz
cGVjaWFsIGV2ZW50IGFwaSB0eXBlLCBvdGhlcndpc2UgZ2l2ZW4gdHlwZQorICAgICAgICAgICAg
dHlwZSA9ICggc2VsZWN0b3IgPyBzcGVjaWFsLmRlbGVnYXRlVHlwZSA6IHNwZWNpYWwuYmluZFR5
cGUgKSB8fCB0eXBlOworCisgICAgICAgICAgICAvLyBVcGRhdGUgc3BlY2lhbCBiYXNlZCBvbiBu
ZXdseSByZXNldCB0eXBlCisgICAgICAgICAgICBzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNp
YWxbIHR5cGUgXSB8fCB7fTsKKworICAgICAgICAgICAgLy8gaGFuZGxlT2JqIGlzIHBhc3NlZCB0
byBhbGwgZXZlbnQgaGFuZGxlcnMKKyAgICAgICAgICAgIGhhbmRsZU9iaiA9IGpRdWVyeS5leHRl
bmQoeworICAgICAgICAgICAgICAgIHR5cGU6IHR5cGUsCisgICAgICAgICAgICAgICAgb3JpZ1R5
cGU6IHRuc1sxXSwKKyAgICAgICAgICAgICAgICBkYXRhOiBkYXRhLAorICAgICAgICAgICAgICAg
IGhhbmRsZXI6IGhhbmRsZXIsCisgICAgICAgICAgICAgICAgZ3VpZDogaGFuZGxlci5ndWlkLAor
ICAgICAgICAgICAgICAgIHNlbGVjdG9yOiBzZWxlY3RvciwKKyAgICAgICAgICAgICAgICBuZWVk
c0NvbnRleHQ6IHNlbGVjdG9yICYmIGpRdWVyeS5leHByLm1hdGNoLm5lZWRzQ29udGV4dC50ZXN0
KCBzZWxlY3RvciApLAorICAgICAgICAgICAgICAgIG5hbWVzcGFjZTogbmFtZXNwYWNlcy5qb2lu
KCIuIikKKyAgICAgICAgICAgIH0sIGhhbmRsZU9iakluICk7CisKKyAgICAgICAgICAgIC8vIElu
aXQgdGhlIGV2ZW50IGhhbmRsZXIgcXVldWUgaWYgd2UncmUgdGhlIGZpcnN0CisgICAgICAgICAg
ICBoYW5kbGVycyA9IGV2ZW50c1sgdHlwZSBdOworICAgICAgICAgICAgaWYgKCAhaGFuZGxlcnMg
KSB7CisgICAgICAgICAgICAgICAgaGFuZGxlcnMgPSBldmVudHNbIHR5cGUgXSA9IFtdOworICAg
ICAgICAgICAgICAgIGhhbmRsZXJzLmRlbGVnYXRlQ291bnQgPSAwOworCisgICAgICAgICAgICAg
ICAgLy8gT25seSB1c2UgYWRkRXZlbnRMaXN0ZW5lci9hdHRhY2hFdmVudCBpZiB0aGUgc3BlY2lh
bCBldmVudHMgaGFuZGxlciByZXR1cm5zIGZhbHNlCisgICAgICAgICAgICAgICAgaWYgKCAhc3Bl
Y2lhbC5zZXR1cCB8fCBzcGVjaWFsLnNldHVwLmNhbGwoIGVsZW0sIGRhdGEsIG5hbWVzcGFjZXMs
IGV2ZW50SGFuZGxlICkgPT09IGZhbHNlICkgeworICAgICAgICAgICAgICAgICAgICAvLyBCaW5k
IHRoZSBnbG9iYWwgZXZlbnQgaGFuZGxlciB0byB0aGUgZWxlbWVudAorICAgICAgICAgICAgICAg
ICAgICBpZiAoIGVsZW0uYWRkRXZlbnRMaXN0ZW5lciApIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGVsZW0uYWRkRXZlbnRMaXN0ZW5lciggdHlwZSwgZXZlbnRIYW5kbGUsIGZhbHNlICk7CisK
KyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggZWxlbS5hdHRhY2hFdmVudCApIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGVsZW0uYXR0YWNoRXZlbnQoICJvbiIgKyB0eXBlLCBldmVu
dEhhbmRsZSApOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIHNwZWNpYWwuYWRkICkgeworICAgICAgICAg
ICAgICAgIHNwZWNpYWwuYWRkLmNhbGwoIGVsZW0sIGhhbmRsZU9iaiApOworCisgICAgICAgICAg
ICAgICAgaWYgKCAhaGFuZGxlT2JqLmhhbmRsZXIuZ3VpZCApIHsKKyAgICAgICAgICAgICAgICAg
ICAgaGFuZGxlT2JqLmhhbmRsZXIuZ3VpZCA9IGhhbmRsZXIuZ3VpZDsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEFkZCB0byB0aGUgZWxlbWVudCdz
IGhhbmRsZXIgbGlzdCwgZGVsZWdhdGVzIGluIGZyb250CisgICAgICAgICAgICBpZiAoIHNlbGVj
dG9yICkgeworICAgICAgICAgICAgICAgIGhhbmRsZXJzLnNwbGljZSggaGFuZGxlcnMuZGVsZWdh
dGVDb3VudCsrLCAwLCBoYW5kbGVPYmogKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgaGFuZGxlcnMucHVzaCggaGFuZGxlT2JqICk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIC8vIEtlZXAgdHJhY2sgb2Ygd2hpY2ggZXZlbnRzIGhhdmUgZXZlciBiZWVuIHVz
ZWQsIGZvciBldmVudCBvcHRpbWl6YXRpb24KKyAgICAgICAgICAgIGpRdWVyeS5ldmVudC5nbG9i
YWxbIHR5cGUgXSA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICAvLyBOdWxsaWZ5IGVsZW0g
dG8gcHJldmVudCBtZW1vcnkgbGVha3MgaW4gSUUKKyAgICAgICAgZWxlbSA9IG51bGw7CisgICAg
fSwKKworICAgIGdsb2JhbDoge30sCisKKyAgICAvLyBEZXRhY2ggYW4gZXZlbnQgb3Igc2V0IG9m
IGV2ZW50cyBmcm9tIGFuIGVsZW1lbnQKKyAgICByZW1vdmU6IGZ1bmN0aW9uKCBlbGVtLCB0eXBl
cywgaGFuZGxlciwgc2VsZWN0b3IsIG1hcHBlZFR5cGVzICkgeworCisgICAgICAgIHZhciB0LCB0
bnMsIHR5cGUsIG9yaWdUeXBlLCBuYW1lc3BhY2VzLCBvcmlnQ291bnQsCisgICAgICAgICAgICBq
LCBldmVudHMsIHNwZWNpYWwsIGV2ZW50VHlwZSwgaGFuZGxlT2JqLAorICAgICAgICAgICAgZWxl
bURhdGEgPSBqUXVlcnkuaGFzRGF0YSggZWxlbSApICYmIGpRdWVyeS5fZGF0YSggZWxlbSApOwor
CisgICAgICAgIGlmICggIWVsZW1EYXRhIHx8ICEoZXZlbnRzID0gZWxlbURhdGEuZXZlbnRzKSAp
IHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE9uY2UgZm9y
IGVhY2ggdHlwZS5uYW1lc3BhY2UgaW4gdHlwZXM7IHR5cGUgbWF5IGJlIG9taXR0ZWQKKyAgICAg
ICAgdHlwZXMgPSBqUXVlcnkudHJpbSggaG92ZXJIYWNrKCB0eXBlcyB8fCAiIiApICkuc3BsaXQo
IiAiKTsKKyAgICAgICAgZm9yICggdCA9IDA7IHQgPCB0eXBlcy5sZW5ndGg7IHQrKyApIHsKKyAg
ICAgICAgICAgIHRucyA9IHJ0eXBlbmFtZXNwYWNlLmV4ZWMoIHR5cGVzW3RdICkgfHwgW107Cisg
ICAgICAgICAgICB0eXBlID0gb3JpZ1R5cGUgPSB0bnNbMV07CisgICAgICAgICAgICBuYW1lc3Bh
Y2VzID0gdG5zWzJdOworCisgICAgICAgICAgICAvLyBVbmJpbmQgYWxsIGV2ZW50cyAob24gdGhp
cyBuYW1lc3BhY2UsIGlmIHByb3ZpZGVkKSBmb3IgdGhlIGVsZW1lbnQKKyAgICAgICAgICAgIGlm
ICggIXR5cGUgKSB7CisgICAgICAgICAgICAgICAgZm9yICggdHlwZSBpbiBldmVudHMgKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGpRdWVyeS5ldmVudC5yZW1vdmUoIGVsZW0sIHR5cGUgKyB0eXBl
c1sgdCBdLCBoYW5kbGVyLCBzZWxlY3RvciwgdHJ1ZSApOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3Bl
Y2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307CisgICAgICAgICAgICB0
eXBlID0gKCBzZWxlY3Rvcj8gc3BlY2lhbC5kZWxlZ2F0ZVR5cGUgOiBzcGVjaWFsLmJpbmRUeXBl
ICkgfHwgdHlwZTsKKyAgICAgICAgICAgIGV2ZW50VHlwZSA9IGV2ZW50c1sgdHlwZSBdIHx8IFtd
OworICAgICAgICAgICAgb3JpZ0NvdW50ID0gZXZlbnRUeXBlLmxlbmd0aDsKKyAgICAgICAgICAg
IG5hbWVzcGFjZXMgPSBuYW1lc3BhY2VzID8gbmV3IFJlZ0V4cCgiKF58XFwuKSIgKyBuYW1lc3Bh
Y2VzLnNwbGl0KCIuIikuc29ydCgpLmpvaW4oIlxcLig/Oi4qXFwufCkiKSArICIoXFwufCQpIikg
OiBudWxsOworCisgICAgICAgICAgICAvLyBSZW1vdmUgbWF0Y2hpbmcgZXZlbnRzCisgICAgICAg
ICAgICBmb3IgKCBqID0gMDsgaiA8IGV2ZW50VHlwZS5sZW5ndGg7IGorKyApIHsKKyAgICAgICAg
ICAgICAgICBoYW5kbGVPYmogPSBldmVudFR5cGVbIGogXTsKKworICAgICAgICAgICAgICAgIGlm
ICggKCBtYXBwZWRUeXBlcyB8fCBvcmlnVHlwZSA9PT0gaGFuZGxlT2JqLm9yaWdUeXBlICkgJiYK
KyAgICAgICAgICAgICAgICAgICAgICggIWhhbmRsZXIgfHwgaGFuZGxlci5ndWlkID09PSBoYW5k
bGVPYmouZ3VpZCApICYmCisgICAgICAgICAgICAgICAgICAgICAoICFuYW1lc3BhY2VzIHx8IG5h
bWVzcGFjZXMudGVzdCggaGFuZGxlT2JqLm5hbWVzcGFjZSApICkgJiYKKyAgICAgICAgICAgICAg
ICAgICAgICggIXNlbGVjdG9yIHx8IHNlbGVjdG9yID09PSBoYW5kbGVPYmouc2VsZWN0b3IgfHwg
c2VsZWN0b3IgPT09ICIqKiIgJiYgaGFuZGxlT2JqLnNlbGVjdG9yICkgKSB7CisgICAgICAgICAg
ICAgICAgICAgIGV2ZW50VHlwZS5zcGxpY2UoIGotLSwgMSApOworCisgICAgICAgICAgICAgICAg
ICAgIGlmICggaGFuZGxlT2JqLnNlbGVjdG9yICkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ZXZlbnRUeXBlLmRlbGVnYXRlQ291bnQtLTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICBpZiAoIHNwZWNpYWwucmVtb3ZlICkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgc3BlY2lhbC5yZW1vdmUuY2FsbCggZWxlbSwgaGFuZGxlT2JqICk7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIC8vIFJlbW92ZSBnZW5lcmljIGV2ZW50IGhhbmRsZXIgaWYgd2UgcmVtb3ZlZCBzb21ldGhp
bmcgYW5kIG5vIG1vcmUgaGFuZGxlcnMgZXhpc3QKKyAgICAgICAgICAgIC8vIChhdm9pZHMgcG90
ZW50aWFsIGZvciBlbmRsZXNzIHJlY3Vyc2lvbiBkdXJpbmcgcmVtb3ZhbCBvZiBzcGVjaWFsIGV2
ZW50IGhhbmRsZXJzKQorICAgICAgICAgICAgaWYgKCBldmVudFR5cGUubGVuZ3RoID09PSAwICYm
IG9yaWdDb3VudCAhPT0gZXZlbnRUeXBlLmxlbmd0aCApIHsKKyAgICAgICAgICAgICAgICBpZiAo
ICFzcGVjaWFsLnRlYXJkb3duIHx8IHNwZWNpYWwudGVhcmRvd24uY2FsbCggZWxlbSwgbmFtZXNw
YWNlcywgZWxlbURhdGEuaGFuZGxlICkgPT09IGZhbHNlICkgeworICAgICAgICAgICAgICAgICAg
ICBqUXVlcnkucmVtb3ZlRXZlbnQoIGVsZW0sIHR5cGUsIGVsZW1EYXRhLmhhbmRsZSApOworICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGRlbGV0ZSBldmVudHNbIHR5cGUgXTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIFJlbW92ZSB0aGUgZXhwYW5k
byBpZiBpdCdzIG5vIGxvbmdlciB1c2VkCisgICAgICAgIGlmICggalF1ZXJ5LmlzRW1wdHlPYmpl
Y3QoIGV2ZW50cyApICkgeworICAgICAgICAgICAgZGVsZXRlIGVsZW1EYXRhLmhhbmRsZTsKKwor
ICAgICAgICAgICAgLy8gcmVtb3ZlRGF0YSBhbHNvIGNoZWNrcyBmb3IgZW1wdGluZXNzIGFuZCBj
bGVhcnMgdGhlIGV4cGFuZG8gaWYgZW1wdHkKKyAgICAgICAgICAgIC8vIHNvIHVzZSBpdCBpbnN0
ZWFkIG9mIGRlbGV0ZQorICAgICAgICAgICAgalF1ZXJ5LnJlbW92ZURhdGEoIGVsZW0sICJldmVu
dHMiLCB0cnVlICk7CisgICAgICAgIH0KKyAgICB9LAorCisgICAgLy8gRXZlbnRzIHRoYXQgYXJl
IHNhZmUgdG8gc2hvcnQtY2lyY3VpdCBpZiBubyBoYW5kbGVycyBhcmUgYXR0YWNoZWQuCisgICAg
Ly8gTmF0aXZlIERPTSBldmVudHMgc2hvdWxkIG5vdCBiZSBhZGRlZCwgdGhleSBtYXkgaGF2ZSBp
bmxpbmUgaGFuZGxlcnMuCisgICAgY3VzdG9tRXZlbnQ6IHsKKyAgICAgICAgImdldERhdGEiOiB0
cnVlLAorICAgICAgICAic2V0RGF0YSI6IHRydWUsCisgICAgICAgICJjaGFuZ2VEYXRhIjogdHJ1
ZQorICAgIH0sCisKKyAgICB0cmlnZ2VyOiBmdW5jdGlvbiggZXZlbnQsIGRhdGEsIGVsZW0sIG9u
bHlIYW5kbGVycyApIHsKKyAgICAgICAgLy8gRG9uJ3QgZG8gZXZlbnRzIG9uIHRleHQgYW5kIGNv
bW1lbnQgbm9kZXMKKyAgICAgICAgaWYgKCBlbGVtICYmIChlbGVtLm5vZGVUeXBlID09PSAzIHx8
IGVsZW0ubm9kZVR5cGUgPT09IDgpICkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisKKyAgICAgICAgLy8gRXZlbnQgb2JqZWN0IG9yIGV2ZW50IHR5cGUKKyAgICAgICAgdmFyIGNh
Y2hlLCBleGNsdXNpdmUsIGksIGN1ciwgb2xkLCBvbnR5cGUsIHNwZWNpYWwsIGhhbmRsZSwgZXZl
bnRQYXRoLCBidWJibGVUeXBlLAorICAgICAgICAgICAgdHlwZSA9IGV2ZW50LnR5cGUgfHwgZXZl
bnQsCisgICAgICAgICAgICBuYW1lc3BhY2VzID0gW107CisKKyAgICAgICAgLy8gZm9jdXMvYmx1
ciBtb3JwaHMgdG8gZm9jdXNpbi9vdXQ7IGVuc3VyZSB3ZSdyZSBub3QgZmlyaW5nIHRoZW0gcmln
aHQgbm93CisgICAgICAgIGlmICggcmZvY3VzTW9ycGgudGVzdCggdHlwZSArIGpRdWVyeS5ldmVu
dC50cmlnZ2VyZWQgKSApIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmICggdHlwZS5pbmRleE9mKCAiISIgKSA+PSAwICkgeworICAgICAgICAgICAgLy8gRXhj
bHVzaXZlIGV2ZW50cyB0cmlnZ2VyIG9ubHkgZm9yIHRoZSBleGFjdCBldmVudCAobm8gbmFtZXNw
YWNlcykKKyAgICAgICAgICAgIHR5cGUgPSB0eXBlLnNsaWNlKDAsIC0xKTsKKyAgICAgICAgICAg
IGV4Y2x1c2l2ZSA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIHR5cGUuaW5kZXhP
ZiggIi4iICkgPj0gMCApIHsKKyAgICAgICAgICAgIC8vIE5hbWVzcGFjZWQgdHJpZ2dlcjsgY3Jl
YXRlIGEgcmVnZXhwIHRvIG1hdGNoIGV2ZW50IHR5cGUgaW4gaGFuZGxlKCkKKyAgICAgICAgICAg
IG5hbWVzcGFjZXMgPSB0eXBlLnNwbGl0KCIuIik7CisgICAgICAgICAgICB0eXBlID0gbmFtZXNw
YWNlcy5zaGlmdCgpOworICAgICAgICAgICAgbmFtZXNwYWNlcy5zb3J0KCk7CisgICAgICAgIH0K
KworICAgICAgICBpZiAoICghZWxlbSB8fCBqUXVlcnkuZXZlbnQuY3VzdG9tRXZlbnRbIHR5cGUg
XSkgJiYgIWpRdWVyeS5ldmVudC5nbG9iYWxbIHR5cGUgXSApIHsKKyAgICAgICAgICAgIC8vIE5v
IGpRdWVyeSBoYW5kbGVycyBmb3IgdGhpcyBldmVudCB0eXBlLCBhbmQgaXQgY2FuJ3QgaGF2ZSBp
bmxpbmUgaGFuZGxlcnMKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAg
IC8vIENhbGxlciBjYW4gcGFzcyBpbiBhbiBFdmVudCwgT2JqZWN0LCBvciBqdXN0IGFuIGV2ZW50
IHR5cGUgc3RyaW5nCisgICAgICAgIGV2ZW50ID0gdHlwZW9mIGV2ZW50ID09PSAib2JqZWN0IiA/
CisgICAgICAgICAgICAvLyBqUXVlcnkuRXZlbnQgb2JqZWN0CisgICAgICAgICAgICBldmVudFsg
alF1ZXJ5LmV4cGFuZG8gXSA/IGV2ZW50IDoKKyAgICAgICAgICAgIC8vIE9iamVjdCBsaXRlcmFs
CisgICAgICAgICAgICBuZXcgalF1ZXJ5LkV2ZW50KCB0eXBlLCBldmVudCApIDoKKyAgICAgICAg
ICAgIC8vIEp1c3QgdGhlIGV2ZW50IHR5cGUgKHN0cmluZykKKyAgICAgICAgICAgIG5ldyBqUXVl
cnkuRXZlbnQoIHR5cGUgKTsKKworICAgICAgICBldmVudC50eXBlID0gdHlwZTsKKyAgICAgICAg
ZXZlbnQuaXNUcmlnZ2VyID0gdHJ1ZTsKKyAgICAgICAgZXZlbnQuZXhjbHVzaXZlID0gZXhjbHVz
aXZlOworICAgICAgICBldmVudC5uYW1lc3BhY2UgPSBuYW1lc3BhY2VzLmpvaW4oICIuIiApOwor
ICAgICAgICBldmVudC5uYW1lc3BhY2VfcmUgPSBldmVudC5uYW1lc3BhY2U/IG5ldyBSZWdFeHAo
IihefFxcLikiICsgbmFtZXNwYWNlcy5qb2luKCJcXC4oPzouKlxcLnwpIikgKyAiKFxcLnwkKSIp
IDogbnVsbDsKKyAgICAgICAgb250eXBlID0gdHlwZS5pbmRleE9mKCAiOiIgKSA8IDAgPyAib24i
ICsgdHlwZSA6ICIiOworCisgICAgICAgIC8vIEhhbmRsZSBhIGdsb2JhbCB0cmlnZ2VyCisgICAg
ICAgIGlmICggIWVsZW0gKSB7CisKKyAgICAgICAgICAgIC8vIFRPRE86IFN0b3AgdGF1bnRpbmcg
dGhlIGRhdGEgY2FjaGU7IHJlbW92ZSBnbG9iYWwgZXZlbnRzIGFuZCBhbHdheXMgYXR0YWNoIHRv
IGRvY3VtZW50CisgICAgICAgICAgICBjYWNoZSA9IGpRdWVyeS5jYWNoZTsKKyAgICAgICAgICAg
IGZvciAoIGkgaW4gY2FjaGUgKSB7CisgICAgICAgICAgICAgICAgaWYgKCBjYWNoZVsgaSBdLmV2
ZW50cyAmJiBjYWNoZVsgaSBdLmV2ZW50c1sgdHlwZSBdICkgeworICAgICAgICAgICAgICAgICAg
ICBqUXVlcnkuZXZlbnQudHJpZ2dlciggZXZlbnQsIGRhdGEsIGNhY2hlWyBpIF0uaGFuZGxlLmVs
ZW0sIHRydWUgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBDbGVhbiB1cCB0aGUgZXZlbnQgaW4g
Y2FzZSBpdCBpcyBiZWluZyByZXVzZWQKKyAgICAgICAgZXZlbnQucmVzdWx0ID0gdW5kZWZpbmVk
OworICAgICAgICBpZiAoICFldmVudC50YXJnZXQgKSB7CisgICAgICAgICAgICBldmVudC50YXJn
ZXQgPSBlbGVtOworICAgICAgICB9CisKKyAgICAgICAgLy8gQ2xvbmUgYW55IGluY29taW5nIGRh
dGEgYW5kIHByZXBlbmQgdGhlIGV2ZW50LCBjcmVhdGluZyB0aGUgaGFuZGxlciBhcmcgbGlzdAor
ICAgICAgICBkYXRhID0gZGF0YSAhPSBudWxsID8galF1ZXJ5Lm1ha2VBcnJheSggZGF0YSApIDog
W107CisgICAgICAgIGRhdGEudW5zaGlmdCggZXZlbnQgKTsKKworICAgICAgICAvLyBBbGxvdyBz
cGVjaWFsIGV2ZW50cyB0byBkcmF3IG91dHNpZGUgdGhlIGxpbmVzCisgICAgICAgIHNwZWNpYWwg
PSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9OworICAgICAgICBpZiAoIHNwZWNp
YWwudHJpZ2dlciAmJiBzcGVjaWFsLnRyaWdnZXIuYXBwbHkoIGVsZW0sIGRhdGEgKSA9PT0gZmFs
c2UgKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBEZXRl
cm1pbmUgZXZlbnQgcHJvcGFnYXRpb24gcGF0aCBpbiBhZHZhbmNlLCBwZXIgVzNDIGV2ZW50cyBz
cGVjICgjOTk1MSkKKyAgICAgICAgLy8gQnViYmxlIHVwIHRvIGRvY3VtZW50LCB0aGVuIHRvIHdp
bmRvdzsgd2F0Y2ggZm9yIGEgZ2xvYmFsIG93bmVyRG9jdW1lbnQgdmFyICgjOTcyNCkKKyAgICAg
ICAgZXZlbnRQYXRoID0gW1sgZWxlbSwgc3BlY2lhbC5iaW5kVHlwZSB8fCB0eXBlIF1dOworICAg
ICAgICBpZiAoICFvbmx5SGFuZGxlcnMgJiYgIXNwZWNpYWwubm9CdWJibGUgJiYgIWpRdWVyeS5p
c1dpbmRvdyggZWxlbSApICkgeworCisgICAgICAgICAgICBidWJibGVUeXBlID0gc3BlY2lhbC5k
ZWxlZ2F0ZVR5cGUgfHwgdHlwZTsKKyAgICAgICAgICAgIGN1ciA9IHJmb2N1c01vcnBoLnRlc3Qo
IGJ1YmJsZVR5cGUgKyB0eXBlICkgPyBlbGVtIDogZWxlbS5wYXJlbnROb2RlOworICAgICAgICAg
ICAgZm9yICggb2xkID0gZWxlbTsgY3VyOyBjdXIgPSBjdXIucGFyZW50Tm9kZSApIHsKKyAgICAg
ICAgICAgICAgICBldmVudFBhdGgucHVzaChbIGN1ciwgYnViYmxlVHlwZSBdKTsKKyAgICAgICAg
ICAgICAgICBvbGQgPSBjdXI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIE9ubHkg
YWRkIHdpbmRvdyBpZiB3ZSBnb3QgdG8gZG9jdW1lbnQgKGUuZy4sIG5vdCBwbGFpbiBvYmogb3Ig
ZGV0YWNoZWQgRE9NKQorICAgICAgICAgICAgaWYgKCBvbGQgPT09IChlbGVtLm93bmVyRG9jdW1l
bnQgfHwgZG9jdW1lbnQpICkgeworICAgICAgICAgICAgICAgIGV2ZW50UGF0aC5wdXNoKFsgb2xk
LmRlZmF1bHRWaWV3IHx8IG9sZC5wYXJlbnRXaW5kb3cgfHwgd2luZG93LCBidWJibGVUeXBlIF0p
OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gRmlyZSBoYW5kbGVycyBv
biB0aGUgZXZlbnQgcGF0aAorICAgICAgICBmb3IgKCBpID0gMDsgaSA8IGV2ZW50UGF0aC5sZW5n
dGggJiYgIWV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCk7IGkrKyApIHsKKworICAgICAgICAg
ICAgY3VyID0gZXZlbnRQYXRoW2ldWzBdOworICAgICAgICAgICAgZXZlbnQudHlwZSA9IGV2ZW50
UGF0aFtpXVsxXTsKKworICAgICAgICAgICAgaGFuZGxlID0gKCBqUXVlcnkuX2RhdGEoIGN1ciwg
ImV2ZW50cyIgKSB8fCB7fSApWyBldmVudC50eXBlIF0gJiYgalF1ZXJ5Ll9kYXRhKCBjdXIsICJo
YW5kbGUiICk7CisgICAgICAgICAgICBpZiAoIGhhbmRsZSApIHsKKyAgICAgICAgICAgICAgICBo
YW5kbGUuYXBwbHkoIGN1ciwgZGF0YSApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8g
Tm90ZSB0aGF0IHRoaXMgaXMgYSBiYXJlIEpTIGZ1bmN0aW9uIGFuZCBub3QgYSBqUXVlcnkgaGFu
ZGxlcgorICAgICAgICAgICAgaGFuZGxlID0gb250eXBlICYmIGN1clsgb250eXBlIF07CisgICAg
ICAgICAgICBpZiAoIGhhbmRsZSAmJiBqUXVlcnkuYWNjZXB0RGF0YSggY3VyICkgJiYgaGFuZGxl
LmFwcGx5ICYmIGhhbmRsZS5hcHBseSggY3VyLCBkYXRhICkgPT09IGZhbHNlICkgeworICAgICAg
ICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgZXZlbnQudHlwZSA9IHR5cGU7CisKKyAgICAgICAgLy8gSWYgbm9ib2R5IHBy
ZXZlbnRlZCB0aGUgZGVmYXVsdCBhY3Rpb24sIGRvIGl0IG5vdworICAgICAgICBpZiAoICFvbmx5
SGFuZGxlcnMgJiYgIWV2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpICkgeworCisgICAgICAgICAg
ICBpZiAoICghc3BlY2lhbC5fZGVmYXVsdCB8fCBzcGVjaWFsLl9kZWZhdWx0LmFwcGx5KCBlbGVt
Lm93bmVyRG9jdW1lbnQsIGRhdGEgKSA9PT0gZmFsc2UpICYmCisgICAgICAgICAgICAgICAgISh0
eXBlID09PSAiY2xpY2siICYmIGpRdWVyeS5ub2RlTmFtZSggZWxlbSwgImEiICkpICYmIGpRdWVy
eS5hY2NlcHREYXRhKCBlbGVtICkgKSB7CisKKyAgICAgICAgICAgICAgICAvLyBDYWxsIGEgbmF0
aXZlIERPTSBtZXRob2Qgb24gdGhlIHRhcmdldCB3aXRoIHRoZSBzYW1lIG5hbWUgbmFtZSBhcyB0
aGUgZXZlbnQuCisgICAgICAgICAgICAgICAgLy8gQ2FuJ3QgdXNlIGFuIC5pc0Z1bmN0aW9uKCkg
Y2hlY2sgaGVyZSBiZWNhdXNlIElFNi83IGZhaWxzIHRoYXQgdGVzdC4KKyAgICAgICAgICAgICAg
ICAvLyBEb24ndCBkbyBkZWZhdWx0IGFjdGlvbnMgb24gd2luZG93LCB0aGF0J3Mgd2hlcmUgZ2xv
YmFsIHZhcmlhYmxlcyBiZSAoIzYxNzApCisgICAgICAgICAgICAgICAgLy8gSUU8OSBkaWVzIG9u
IGZvY3VzL2JsdXIgdG8gaGlkZGVuIGVsZW1lbnQgKCMxNDg2KQorICAgICAgICAgICAgICAgIGlm
ICggb250eXBlICYmIGVsZW1bIHR5cGUgXSAmJiAoKHR5cGUgIT09ICJmb2N1cyIgJiYgdHlwZSAh
PT0gImJsdXIiKSB8fCBldmVudC50YXJnZXQub2Zmc2V0V2lkdGggIT09IDApICYmICFqUXVlcnku
aXNXaW5kb3coIGVsZW0gKSApIHsKKworICAgICAgICAgICAgICAgICAgICAvLyBEb24ndCByZS10
cmlnZ2VyIGFuIG9uRk9PIGV2ZW50IHdoZW4gd2UgY2FsbCBpdHMgRk9PKCkgbWV0aG9kCisgICAg
ICAgICAgICAgICAgICAgIG9sZCA9IGVsZW1bIG9udHlwZSBdOworCisgICAgICAgICAgICAgICAg
ICAgIGlmICggb2xkICkgeworICAgICAgICAgICAgICAgICAgICAgICAgZWxlbVsgb250eXBlIF0g
PSBudWxsOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgLy8g
UHJldmVudCByZS10cmlnZ2VyaW5nIG9mIHRoZSBzYW1lIGV2ZW50LCBzaW5jZSB3ZSBhbHJlYWR5
IGJ1YmJsZWQgaXQgYWJvdmUKKyAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnRyaWdn
ZXJlZCA9IHR5cGU7CisgICAgICAgICAgICAgICAgICAgIGVsZW1bIHR5cGUgXSgpOworICAgICAg
ICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQudHJpZ2dlcmVkID0gdW5kZWZpbmVkOworCisgICAg
ICAgICAgICAgICAgICAgIGlmICggb2xkICkgeworICAgICAgICAgICAgICAgICAgICAgICAgZWxl
bVsgb250eXBlIF0gPSBvbGQ7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZXZlbnQucmVz
dWx0OworICAgIH0sCisKKyAgICBkaXNwYXRjaDogZnVuY3Rpb24oIGV2ZW50ICkgeworCisgICAg
ICAgIC8vIE1ha2UgYSB3cml0YWJsZSBqUXVlcnkuRXZlbnQgZnJvbSB0aGUgbmF0aXZlIGV2ZW50
IG9iamVjdAorICAgICAgICBldmVudCA9IGpRdWVyeS5ldmVudC5maXgoIGV2ZW50IHx8IHdpbmRv
dy5ldmVudCApOworCisgICAgICAgIHZhciBpLCBqLCBjdXIsIHJldCwgc2VsTWF0Y2gsIG1hdGNo
ZWQsIG1hdGNoZXMsIGhhbmRsZU9iaiwgc2VsLCByZWxhdGVkLAorICAgICAgICAgICAgaGFuZGxl
cnMgPSAoIChqUXVlcnkuX2RhdGEoIHRoaXMsICJldmVudHMiICkgfHwge30gKVsgZXZlbnQudHlw
ZSBdIHx8IFtdKSwKKyAgICAgICAgICAgIGRlbGVnYXRlQ291bnQgPSBoYW5kbGVycy5kZWxlZ2F0
ZUNvdW50LAorICAgICAgICAgICAgYXJncyA9IGNvcmVfc2xpY2UuY2FsbCggYXJndW1lbnRzICks
CisgICAgICAgICAgICBydW5fYWxsID0gIWV2ZW50LmV4Y2x1c2l2ZSAmJiAhZXZlbnQubmFtZXNw
YWNlLAorICAgICAgICAgICAgc3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyBldmVudC50
eXBlIF0gfHwge30sCisgICAgICAgICAgICBoYW5kbGVyUXVldWUgPSBbXTsKKworICAgICAgICAv
LyBVc2UgdGhlIGZpeC1lZCBqUXVlcnkuRXZlbnQgcmF0aGVyIHRoYW4gdGhlIChyZWFkLW9ubHkp
IG5hdGl2ZSBldmVudAorICAgICAgICBhcmdzWzBdID0gZXZlbnQ7CisgICAgICAgIGV2ZW50LmRl
bGVnYXRlVGFyZ2V0ID0gdGhpczsKKworICAgICAgICAvLyBDYWxsIHRoZSBwcmVEaXNwYXRjaCBo
b29rIGZvciB0aGUgbWFwcGVkIHR5cGUsIGFuZCBsZXQgaXQgYmFpbCBpZiBkZXNpcmVkCisgICAg
ICAgIGlmICggc3BlY2lhbC5wcmVEaXNwYXRjaCAmJiBzcGVjaWFsLnByZURpc3BhdGNoLmNhbGwo
IHRoaXMsIGV2ZW50ICkgPT09IGZhbHNlICkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgLy8gRGV0ZXJtaW5lIGhhbmRsZXJzIHRoYXQgc2hvdWxkIHJ1biBpZiB0
aGVyZSBhcmUgZGVsZWdhdGVkIGV2ZW50cworICAgICAgICAvLyBBdm9pZCBub24tbGVmdC1jbGlj
ayBidWJibGluZyBpbiBGaXJlZm94ICgjMzg2MSkKKyAgICAgICAgaWYgKCBkZWxlZ2F0ZUNvdW50
ICYmICEoZXZlbnQuYnV0dG9uICYmIGV2ZW50LnR5cGUgPT09ICJjbGljayIpICkgeworCisgICAg
ICAgICAgICBmb3IgKCBjdXIgPSBldmVudC50YXJnZXQ7IGN1ciAhPSB0aGlzOyBjdXIgPSBjdXIu
cGFyZW50Tm9kZSB8fCB0aGlzICkgeworCisgICAgICAgICAgICAgICAgLy8gRG9uJ3QgcHJvY2Vz
cyBjbGlja3MgKE9OTFkpIG9uIGRpc2FibGVkIGVsZW1lbnRzICgjNjkxMSwgIzgxNjUsICMxMTM4
MiwgIzExNzY0KQorICAgICAgICAgICAgICAgIGlmICggY3VyLmRpc2FibGVkICE9PSB0cnVlIHx8
IGV2ZW50LnR5cGUgIT09ICJjbGljayIgKSB7CisgICAgICAgICAgICAgICAgICAgIHNlbE1hdGNo
ID0ge307CisgICAgICAgICAgICAgICAgICAgIG1hdGNoZXMgPSBbXTsKKyAgICAgICAgICAgICAg
ICAgICAgZm9yICggaSA9IDA7IGkgPCBkZWxlZ2F0ZUNvdW50OyBpKysgKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBoYW5kbGVPYmogPSBoYW5kbGVyc1sgaSBdOworICAgICAgICAgICAgICAg
ICAgICAgICAgc2VsID0gaGFuZGxlT2JqLnNlbGVjdG9yOworCisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIHNlbE1hdGNoWyBzZWwgXSA9PT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNlbE1hdGNoWyBzZWwgXSA9IGhhbmRsZU9iai5uZWVkc0NvbnRleHQg
PworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkoIHNlbCwgdGhpcyApLmlu
ZGV4KCBjdXIgKSA+PSAwIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5
LmZpbmQoIHNlbCwgdGhpcywgbnVsbCwgWyBjdXIgXSApLmxlbmd0aDsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggc2VsTWF0Y2hbIHNlbCBd
ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZXMucHVzaCggaGFuZGxlT2Jq
ICk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgaWYgKCBtYXRjaGVzLmxlbmd0aCApIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGhhbmRsZXJRdWV1ZS5wdXNoKHsgZWxlbTogY3VyLCBtYXRjaGVzOiBtYXRjaGVz
IH0pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gQWRkIHRoZSByZW1haW5pbmcgKGRpcmVjdGx5
LWJvdW5kKSBoYW5kbGVycworICAgICAgICBpZiAoIGhhbmRsZXJzLmxlbmd0aCA+IGRlbGVnYXRl
Q291bnQgKSB7CisgICAgICAgICAgICBoYW5kbGVyUXVldWUucHVzaCh7IGVsZW06IHRoaXMsIG1h
dGNoZXM6IGhhbmRsZXJzLnNsaWNlKCBkZWxlZ2F0ZUNvdW50ICkgfSk7CisgICAgICAgIH0KKwor
ICAgICAgICAvLyBSdW4gZGVsZWdhdGVzIGZpcnN0OyB0aGV5IG1heSB3YW50IHRvIHN0b3AgcHJv
cGFnYXRpb24gYmVuZWF0aCB1cworICAgICAgICBmb3IgKCBpID0gMDsgaSA8IGhhbmRsZXJRdWV1
ZS5sZW5ndGggJiYgIWV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCk7IGkrKyApIHsKKyAgICAg
ICAgICAgIG1hdGNoZWQgPSBoYW5kbGVyUXVldWVbIGkgXTsKKyAgICAgICAgICAgIGV2ZW50LmN1
cnJlbnRUYXJnZXQgPSBtYXRjaGVkLmVsZW07CisKKyAgICAgICAgICAgIGZvciAoIGogPSAwOyBq
IDwgbWF0Y2hlZC5tYXRjaGVzLmxlbmd0aCAmJiAhZXZlbnQuaXNJbW1lZGlhdGVQcm9wYWdhdGlv
blN0b3BwZWQoKTsgaisrICkgeworICAgICAgICAgICAgICAgIGhhbmRsZU9iaiA9IG1hdGNoZWQu
bWF0Y2hlc1sgaiBdOworCisgICAgICAgICAgICAgICAgLy8gVHJpZ2dlcmVkIGV2ZW50IG11c3Qg
ZWl0aGVyIDEpIGJlIG5vbi1leGNsdXNpdmUgYW5kIGhhdmUgbm8gbmFtZXNwYWNlLCBvcgorICAg
ICAgICAgICAgICAgIC8vIDIpIGhhdmUgbmFtZXNwYWNlKHMpIGEgc3Vic2V0IG9yIGVxdWFsIHRv
IHRob3NlIGluIHRoZSBib3VuZCBldmVudCAoYm90aCBjYW4gaGF2ZSBubyBuYW1lc3BhY2UpLgor
ICAgICAgICAgICAgICAgIGlmICggcnVuX2FsbCB8fCAoIWV2ZW50Lm5hbWVzcGFjZSAmJiAhaGFu
ZGxlT2JqLm5hbWVzcGFjZSkgfHwgZXZlbnQubmFtZXNwYWNlX3JlICYmIGV2ZW50Lm5hbWVzcGFj
ZV9yZS50ZXN0KCBoYW5kbGVPYmoubmFtZXNwYWNlICkgKSB7CisKKyAgICAgICAgICAgICAgICAg
ICAgZXZlbnQuZGF0YSA9IGhhbmRsZU9iai5kYXRhOworICAgICAgICAgICAgICAgICAgICBldmVu
dC5oYW5kbGVPYmogPSBoYW5kbGVPYmo7CisKKyAgICAgICAgICAgICAgICAgICAgcmV0ID0gKCAo
alF1ZXJ5LmV2ZW50LnNwZWNpYWxbIGhhbmRsZU9iai5vcmlnVHlwZSBdIHx8IHt9KS5oYW5kbGUg
fHwgaGFuZGxlT2JqLmhhbmRsZXIgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hcHBs
eSggbWF0Y2hlZC5lbGVtLCBhcmdzICk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCByZXQg
IT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnJlc3VsdCA9
IHJldDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcmV0ID09PSBmYWxzZSApIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOworICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gQ2FsbCB0aGUgcG9zdERp
c3BhdGNoIGhvb2sgZm9yIHRoZSBtYXBwZWQgdHlwZQorICAgICAgICBpZiAoIHNwZWNpYWwucG9z
dERpc3BhdGNoICkgeworICAgICAgICAgICAgc3BlY2lhbC5wb3N0RGlzcGF0Y2guY2FsbCggdGhp
cywgZXZlbnQgKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBldmVudC5yZXN1bHQ7Cisg
ICAgfSwKKworICAgIC8vIEluY2x1ZGVzIHNvbWUgZXZlbnQgcHJvcHMgc2hhcmVkIGJ5IEtleUV2
ZW50IGFuZCBNb3VzZUV2ZW50CisgICAgLy8gKioqIGF0dHJDaGFuZ2UgYXR0ck5hbWUgcmVsYXRl
ZE5vZGUgc3JjRWxlbWVudCAgYXJlIG5vdCBub3JtYWxpemVkLCBub24tVzNDLCBkZXByZWNhdGVk
LCB3aWxsIGJlIHJlbW92ZWQgaW4gMS44ICoqKgorICAgIHByb3BzOiAiYXR0ckNoYW5nZSBhdHRy
TmFtZSByZWxhdGVkTm9kZSBzcmNFbGVtZW50IGFsdEtleSBidWJibGVzIGNhbmNlbGFibGUgY3Ry
bEtleSBjdXJyZW50VGFyZ2V0IGV2ZW50UGhhc2UgbWV0YUtleSByZWxhdGVkVGFyZ2V0IHNoaWZ0
S2V5IHRhcmdldCB0aW1lU3RhbXAgdmlldyB3aGljaCIuc3BsaXQoIiAiKSwKKworICAgIGZpeEhv
b2tzOiB7fSwKKworICAgIGtleUhvb2tzOiB7CisgICAgICAgIHByb3BzOiAiY2hhciBjaGFyQ29k
ZSBrZXkga2V5Q29kZSIuc3BsaXQoIiAiKSwKKyAgICAgICAgZmlsdGVyOiBmdW5jdGlvbiggZXZl
bnQsIG9yaWdpbmFsICkgeworCisgICAgICAgICAgICAvLyBBZGQgd2hpY2ggZm9yIGtleSBldmVu
dHMKKyAgICAgICAgICAgIGlmICggZXZlbnQud2hpY2ggPT0gbnVsbCApIHsKKyAgICAgICAgICAg
ICAgICBldmVudC53aGljaCA9IG9yaWdpbmFsLmNoYXJDb2RlICE9IG51bGwgPyBvcmlnaW5hbC5j
aGFyQ29kZSA6IG9yaWdpbmFsLmtleUNvZGU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IHJldHVybiBldmVudDsKKyAgICAgICAgfQorICAgIH0sCisKKyAgICBtb3VzZUhvb2tzOiB7Cisg
ICAgICAgIHByb3BzOiAiYnV0dG9uIGJ1dHRvbnMgY2xpZW50WCBjbGllbnRZIGZyb21FbGVtZW50
IG9mZnNldFggb2Zmc2V0WSBwYWdlWCBwYWdlWSBzY3JlZW5YIHNjcmVlblkgdG9FbGVtZW50Ii5z
cGxpdCgiICIpLAorICAgICAgICBmaWx0ZXI6IGZ1bmN0aW9uKCBldmVudCwgb3JpZ2luYWwgKSB7
CisgICAgICAgICAgICB2YXIgZXZlbnREb2MsIGRvYywgYm9keSwKKyAgICAgICAgICAgICAgICBi
dXR0b24gPSBvcmlnaW5hbC5idXR0b24sCisgICAgICAgICAgICAgICAgZnJvbUVsZW1lbnQgPSBv
cmlnaW5hbC5mcm9tRWxlbWVudDsKKworICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIHBhZ2VYL1kg
aWYgbWlzc2luZyBhbmQgY2xpZW50WC9ZIGF2YWlsYWJsZQorICAgICAgICAgICAgaWYgKCBldmVu
dC5wYWdlWCA9PSBudWxsICYmIG9yaWdpbmFsLmNsaWVudFggIT0gbnVsbCApIHsKKyAgICAgICAg
ICAgICAgICBldmVudERvYyA9IGV2ZW50LnRhcmdldC5vd25lckRvY3VtZW50IHx8IGRvY3VtZW50
OworICAgICAgICAgICAgICAgIGRvYyA9IGV2ZW50RG9jLmRvY3VtZW50RWxlbWVudDsKKyAgICAg
ICAgICAgICAgICBib2R5ID0gZXZlbnREb2MuYm9keTsKKworICAgICAgICAgICAgICAgIGV2ZW50
LnBhZ2VYID0gb3JpZ2luYWwuY2xpZW50WCArICggZG9jICYmIGRvYy5zY3JvbGxMZWZ0IHx8IGJv
ZHkgJiYgYm9keS5zY3JvbGxMZWZ0IHx8IDAgKSAtICggZG9jICYmIGRvYy5jbGllbnRMZWZ0IHx8
IGJvZHkgJiYgYm9keS5jbGllbnRMZWZ0IHx8IDAgKTsKKyAgICAgICAgICAgICAgICBldmVudC5w
YWdlWSA9IG9yaWdpbmFsLmNsaWVudFkgKyAoIGRvYyAmJiBkb2Muc2Nyb2xsVG9wICB8fCBib2R5
ICYmIGJvZHkuc2Nyb2xsVG9wICB8fCAwICkgLSAoIGRvYyAmJiBkb2MuY2xpZW50VG9wICB8fCBi
b2R5ICYmIGJvZHkuY2xpZW50VG9wICB8fCAwICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIC8vIEFkZCByZWxhdGVkVGFyZ2V0LCBpZiBuZWNlc3NhcnkKKyAgICAgICAgICAgIGlmICgg
IWV2ZW50LnJlbGF0ZWRUYXJnZXQgJiYgZnJvbUVsZW1lbnQgKSB7CisgICAgICAgICAgICAgICAg
ZXZlbnQucmVsYXRlZFRhcmdldCA9IGZyb21FbGVtZW50ID09PSBldmVudC50YXJnZXQgPyBvcmln
aW5hbC50b0VsZW1lbnQgOiBmcm9tRWxlbWVudDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgLy8gQWRkIHdoaWNoIGZvciBjbGljazogMSA9PT0gbGVmdDsgMiA9PT0gbWlkZGxlOyAzID09
PSByaWdodAorICAgICAgICAgICAgLy8gTm90ZTogYnV0dG9uIGlzIG5vdCBub3JtYWxpemVkLCBz
byBkb24ndCB1c2UgaXQKKyAgICAgICAgICAgIGlmICggIWV2ZW50LndoaWNoICYmIGJ1dHRvbiAh
PT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgICAgIGV2ZW50LndoaWNoID0gKCBidXR0b24g
JiAxID8gMSA6ICggYnV0dG9uICYgMiA/IDMgOiAoIGJ1dHRvbiAmIDQgPyAyIDogMCApICkgKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIGV2ZW50OworICAgICAgICB9Cisg
ICAgfSwKKworICAgIGZpeDogZnVuY3Rpb24oIGV2ZW50ICkgeworICAgICAgICBpZiAoIGV2ZW50
WyBqUXVlcnkuZXhwYW5kbyBdICkgeworICAgICAgICAgICAgcmV0dXJuIGV2ZW50OworICAgICAg
ICB9CisKKyAgICAgICAgLy8gQ3JlYXRlIGEgd3JpdGFibGUgY29weSBvZiB0aGUgZXZlbnQgb2Jq
ZWN0IGFuZCBub3JtYWxpemUgc29tZSBwcm9wZXJ0aWVzCisgICAgICAgIHZhciBpLCBwcm9wLAor
ICAgICAgICAgICAgb3JpZ2luYWxFdmVudCA9IGV2ZW50LAorICAgICAgICAgICAgZml4SG9vayA9
IGpRdWVyeS5ldmVudC5maXhIb29rc1sgZXZlbnQudHlwZSBdIHx8IHt9LAorICAgICAgICAgICAg
Y29weSA9IGZpeEhvb2sucHJvcHMgPyB0aGlzLnByb3BzLmNvbmNhdCggZml4SG9vay5wcm9wcyAp
IDogdGhpcy5wcm9wczsKKworICAgICAgICBldmVudCA9IGpRdWVyeS5FdmVudCggb3JpZ2luYWxF
dmVudCApOworCisgICAgICAgIGZvciAoIGkgPSBjb3B5Lmxlbmd0aDsgaTsgKSB7CisgICAgICAg
ICAgICBwcm9wID0gY29weVsgLS1pIF07CisgICAgICAgICAgICBldmVudFsgcHJvcCBdID0gb3Jp
Z2luYWxFdmVudFsgcHJvcCBdOworICAgICAgICB9CisKKyAgICAgICAgLy8gRml4IHRhcmdldCBw
cm9wZXJ0eSwgaWYgbmVjZXNzYXJ5ICgjMTkyNSwgSUUgNi83LzggJiBTYWZhcmkyKQorICAgICAg
ICBpZiAoICFldmVudC50YXJnZXQgKSB7CisgICAgICAgICAgICBldmVudC50YXJnZXQgPSBvcmln
aW5hbEV2ZW50LnNyY0VsZW1lbnQgfHwgZG9jdW1lbnQ7CisgICAgICAgIH0KKworICAgICAgICAv
LyBUYXJnZXQgc2hvdWxkIG5vdCBiZSBhIHRleHQgbm9kZSAoIzUwNCwgU2FmYXJpKQorICAgICAg
ICBpZiAoIGV2ZW50LnRhcmdldC5ub2RlVHlwZSA9PT0gMyApIHsKKyAgICAgICAgICAgIGV2ZW50
LnRhcmdldCA9IGV2ZW50LnRhcmdldC5wYXJlbnROb2RlOworICAgICAgICB9CisKKyAgICAgICAg
Ly8gRm9yIG1vdXNlL2tleSBldmVudHMsIG1ldGFLZXk9PWZhbHNlIGlmIGl0J3MgdW5kZWZpbmVk
ICgjMzM2OCwgIzExMzI4OyBJRTYvNy84KQorICAgICAgICBldmVudC5tZXRhS2V5ID0gISFldmVu
dC5tZXRhS2V5OworCisgICAgICAgIHJldHVybiBmaXhIb29rLmZpbHRlcj8gZml4SG9vay5maWx0
ZXIoIGV2ZW50LCBvcmlnaW5hbEV2ZW50ICkgOiBldmVudDsKKyAgICB9LAorCisgICAgc3BlY2lh
bDogeworICAgICAgICBsb2FkOiB7CisgICAgICAgICAgICAvLyBQcmV2ZW50IHRyaWdnZXJlZCBp
bWFnZS5sb2FkIGV2ZW50cyBmcm9tIGJ1YmJsaW5nIHRvIHdpbmRvdy5sb2FkCisgICAgICAgICAg
ICBub0J1YmJsZTogdHJ1ZQorICAgICAgICB9LAorCisgICAgICAgIGZvY3VzOiB7CisgICAgICAg
ICAgICBkZWxlZ2F0ZVR5cGU6ICJmb2N1c2luIgorICAgICAgICB9LAorICAgICAgICBibHVyOiB7
CisgICAgICAgICAgICBkZWxlZ2F0ZVR5cGU6ICJmb2N1c291dCIKKyAgICAgICAgfSwKKworICAg
ICAgICBiZWZvcmV1bmxvYWQ6IHsKKyAgICAgICAgICAgIHNldHVwOiBmdW5jdGlvbiggZGF0YSwg
bmFtZXNwYWNlcywgZXZlbnRIYW5kbGUgKSB7CisgICAgICAgICAgICAgICAgLy8gV2Ugb25seSB3
YW50IHRvIGRvIHRoaXMgc3BlY2lhbCBjYXNlIG9uIHdpbmRvd3MKKyAgICAgICAgICAgICAgICBp
ZiAoIGpRdWVyeS5pc1dpbmRvdyggdGhpcyApICkgeworICAgICAgICAgICAgICAgICAgICB0aGlz
Lm9uYmVmb3JldW5sb2FkID0gZXZlbnRIYW5kbGU7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfSwKKworICAgICAgICAgICAgdGVhcmRvd246IGZ1bmN0aW9uKCBuYW1lc3BhY2VzLCBl
dmVudEhhbmRsZSApIHsKKyAgICAgICAgICAgICAgICBpZiAoIHRoaXMub25iZWZvcmV1bmxvYWQg
PT09IGV2ZW50SGFuZGxlICkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLm9uYmVmb3JldW5s
b2FkID0gbnVsbDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9LAorCisgICAgc2ltdWxhdGU6IGZ1bmN0aW9uKCB0eXBlLCBlbGVtLCBldmVudCwgYnVi
YmxlICkgeworICAgICAgICAvLyBQaWdneWJhY2sgb24gYSBkb25vciBldmVudCB0byBzaW11bGF0
ZSBhIGRpZmZlcmVudCBvbmUuCisgICAgICAgIC8vIEZha2Ugb3JpZ2luYWxFdmVudCB0byBhdm9p
ZCBkb25vcidzIHN0b3BQcm9wYWdhdGlvbiwgYnV0IGlmIHRoZQorICAgICAgICAvLyBzaW11bGF0
ZWQgZXZlbnQgcHJldmVudHMgZGVmYXVsdCB0aGVuIHdlIGRvIHRoZSBzYW1lIG9uIHRoZSBkb25v
ci4KKyAgICAgICAgdmFyIGUgPSBqUXVlcnkuZXh0ZW5kKAorICAgICAgICAgICAgbmV3IGpRdWVy
eS5FdmVudCgpLAorICAgICAgICAgICAgZXZlbnQsCisgICAgICAgICAgICB7IHR5cGU6IHR5cGUs
CisgICAgICAgICAgICAgICAgaXNTaW11bGF0ZWQ6IHRydWUsCisgICAgICAgICAgICAgICAgb3Jp
Z2luYWxFdmVudDoge30KKyAgICAgICAgICAgIH0KKyAgICAgICAgKTsKKyAgICAgICAgaWYgKCBi
dWJibGUgKSB7CisgICAgICAgICAgICBqUXVlcnkuZXZlbnQudHJpZ2dlciggZSwgbnVsbCwgZWxl
bSApOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LmRpc3BhdGNo
LmNhbGwoIGVsZW0sIGUgKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIGUuaXNEZWZhdWx0UHJl
dmVudGVkKCkgKSB7CisgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOworICAgICAg
ICB9CisgICAgfQorfTsKKworLy8gU29tZSBwbHVnaW5zIGFyZSB1c2luZywgYnV0IGl0J3MgdW5k
b2N1bWVudGVkL2RlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZC4KKy8vIFRoZSAxLjcgc3Bl
Y2lhbCBldmVudCBpbnRlcmZhY2Ugc2hvdWxkIHByb3ZpZGUgYWxsIHRoZSBob29rcyBuZWVkZWQg
bm93LgoralF1ZXJ5LmV2ZW50LmhhbmRsZSA9IGpRdWVyeS5ldmVudC5kaXNwYXRjaDsKKworalF1
ZXJ5LnJlbW92ZUV2ZW50ID0gZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lciA/CisgICAgZnVu
Y3Rpb24oIGVsZW0sIHR5cGUsIGhhbmRsZSApIHsKKyAgICAgICAgaWYgKCBlbGVtLnJlbW92ZUV2
ZW50TGlzdGVuZXIgKSB7CisgICAgICAgICAgICBlbGVtLnJlbW92ZUV2ZW50TGlzdGVuZXIoIHR5
cGUsIGhhbmRsZSwgZmFsc2UgKTsKKyAgICAgICAgfQorICAgIH0gOgorICAgIGZ1bmN0aW9uKCBl
bGVtLCB0eXBlLCBoYW5kbGUgKSB7CisgICAgICAgIHZhciBuYW1lID0gIm9uIiArIHR5cGU7CisK
KyAgICAgICAgaWYgKCBlbGVtLmRldGFjaEV2ZW50ICkgeworCisgICAgICAgICAgICAvLyAjODU0
NSwgIzcwNTQsIHByZXZlbnRpbmcgbWVtb3J5IGxlYWtzIGZvciBjdXN0b20gZXZlbnRzIGluIElF
Ni04CisgICAgICAgICAgICAvLyBkZXRhY2hFdmVudCBuZWVkZWQgcHJvcGVydHkgb24gZWxlbWVu
dCwgYnkgbmFtZSBvZiB0aGF0IGV2ZW50LCB0byBwcm9wZXJseSBleHBvc2UgaXQgdG8gR0MKKyAg
ICAgICAgICAgIGlmICggdHlwZW9mIGVsZW1bIG5hbWUgXSA9PT0gInVuZGVmaW5lZCIgKSB7Cisg
ICAgICAgICAgICAgICAgZWxlbVsgbmFtZSBdID0gbnVsbDsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgZWxlbS5kZXRhY2hFdmVudCggbmFtZSwgaGFuZGxlICk7CisgICAgICAgIH0KKyAg
ICB9OworCitqUXVlcnkuRXZlbnQgPSBmdW5jdGlvbiggc3JjLCBwcm9wcyApIHsKKyAgICAvLyBB
bGxvdyBpbnN0YW50aWF0aW9uIHdpdGhvdXQgdGhlICduZXcnIGtleXdvcmQKKyAgICBpZiAoICEo
dGhpcyBpbnN0YW5jZW9mIGpRdWVyeS5FdmVudCkgKSB7CisgICAgICAgIHJldHVybiBuZXcgalF1
ZXJ5LkV2ZW50KCBzcmMsIHByb3BzICk7CisgICAgfQorCisgICAgLy8gRXZlbnQgb2JqZWN0Cisg
ICAgaWYgKCBzcmMgJiYgc3JjLnR5cGUgKSB7CisgICAgICAgIHRoaXMub3JpZ2luYWxFdmVudCA9
IHNyYzsKKyAgICAgICAgdGhpcy50eXBlID0gc3JjLnR5cGU7CisKKyAgICAgICAgLy8gRXZlbnRz
IGJ1YmJsaW5nIHVwIHRoZSBkb2N1bWVudCBtYXkgaGF2ZSBiZWVuIG1hcmtlZCBhcyBwcmV2ZW50
ZWQKKyAgICAgICAgLy8gYnkgYSBoYW5kbGVyIGxvd2VyIGRvd24gdGhlIHRyZWU7IHJlZmxlY3Qg
dGhlIGNvcnJlY3QgdmFsdWUuCisgICAgICAgIHRoaXMuaXNEZWZhdWx0UHJldmVudGVkID0gKCBz
cmMuZGVmYXVsdFByZXZlbnRlZCB8fCBzcmMucmV0dXJuVmFsdWUgPT09IGZhbHNlIHx8CisgICAg
ICAgICAgICBzcmMuZ2V0UHJldmVudERlZmF1bHQgJiYgc3JjLmdldFByZXZlbnREZWZhdWx0KCkg
KSA/IHJldHVyblRydWUgOiByZXR1cm5GYWxzZTsKKworICAgIC8vIEV2ZW50IHR5cGUKKyAgICB9
IGVsc2UgeworICAgICAgICB0aGlzLnR5cGUgPSBzcmM7CisgICAgfQorCisgICAgLy8gUHV0IGV4
cGxpY2l0bHkgcHJvdmlkZWQgcHJvcGVydGllcyBvbnRvIHRoZSBldmVudCBvYmplY3QKKyAgICBp
ZiAoIHByb3BzICkgeworICAgICAgICBqUXVlcnkuZXh0ZW5kKCB0aGlzLCBwcm9wcyApOworICAg
IH0KKworICAgIC8vIENyZWF0ZSBhIHRpbWVzdGFtcCBpZiBpbmNvbWluZyBldmVudCBkb2Vzbid0
IGhhdmUgb25lCisgICAgdGhpcy50aW1lU3RhbXAgPSBzcmMgJiYgc3JjLnRpbWVTdGFtcCB8fCBq
UXVlcnkubm93KCk7CisKKyAgICAvLyBNYXJrIGl0IGFzIGZpeGVkCisgICAgdGhpc1sgalF1ZXJ5
LmV4cGFuZG8gXSA9IHRydWU7Cit9OworCitmdW5jdGlvbiByZXR1cm5GYWxzZSgpIHsKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CitmdW5jdGlvbiByZXR1cm5UcnVlKCkgeworICAgIHJldHVybiB0cnVl
OworfQorCisvLyBqUXVlcnkuRXZlbnQgaXMgYmFzZWQgb24gRE9NMyBFdmVudHMgYXMgc3BlY2lm
aWVkIGJ5IHRoZSBFQ01BU2NyaXB0IExhbmd1YWdlIEJpbmRpbmcKKy8vIGh0dHA6Ly93d3cudzMu
b3JnL1RSLzIwMDMvV0QtRE9NLUxldmVsLTMtRXZlbnRzLTIwMDMwMzMxL2VjbWEtc2NyaXB0LWJp
bmRpbmcuaHRtbAoralF1ZXJ5LkV2ZW50LnByb3RvdHlwZSA9IHsKKyAgICBwcmV2ZW50RGVmYXVs
dDogZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMuaXNEZWZhdWx0UHJldmVudGVkID0gcmV0dXJu
VHJ1ZTsKKworICAgICAgICB2YXIgZSA9IHRoaXMub3JpZ2luYWxFdmVudDsKKyAgICAgICAgaWYg
KCAhZSApIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIGlm
IHByZXZlbnREZWZhdWx0IGV4aXN0cyBydW4gaXQgb24gdGhlIG9yaWdpbmFsIGV2ZW50CisgICAg
ICAgIGlmICggZS5wcmV2ZW50RGVmYXVsdCApIHsKKyAgICAgICAgICAgIGUucHJldmVudERlZmF1
bHQoKTsKKworICAgICAgICAvLyBvdGhlcndpc2Ugc2V0IHRoZSByZXR1cm5WYWx1ZSBwcm9wZXJ0
eSBvZiB0aGUgb3JpZ2luYWwgZXZlbnQgdG8gZmFsc2UgKElFKQorICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgZS5yZXR1cm5WYWx1ZSA9IGZhbHNlOworICAgICAgICB9CisgICAgfSwKKyAg
ICBzdG9wUHJvcGFnYXRpb246IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLmlzUHJvcGFnYXRp
b25TdG9wcGVkID0gcmV0dXJuVHJ1ZTsKKworICAgICAgICB2YXIgZSA9IHRoaXMub3JpZ2luYWxF
dmVudDsKKyAgICAgICAgaWYgKCAhZSApIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgICAgICAvLyBpZiBzdG9wUHJvcGFnYXRpb24gZXhpc3RzIHJ1biBpdCBvbiB0aGUgb3Jp
Z2luYWwgZXZlbnQKKyAgICAgICAgaWYgKCBlLnN0b3BQcm9wYWdhdGlvbiApIHsKKyAgICAgICAg
ICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gb3RoZXJ3aXNl
IHNldCB0aGUgY2FuY2VsQnViYmxlIHByb3BlcnR5IG9mIHRoZSBvcmlnaW5hbCBldmVudCB0byB0
cnVlIChJRSkKKyAgICAgICAgZS5jYW5jZWxCdWJibGUgPSB0cnVlOworICAgIH0sCisgICAgc3Rv
cEltbWVkaWF0ZVByb3BhZ2F0aW9uOiBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy5pc0ltbWVk
aWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCA9IHJldHVyblRydWU7CisgICAgICAgIHRoaXMuc3RvcFBy
b3BhZ2F0aW9uKCk7CisgICAgfSwKKyAgICBpc0RlZmF1bHRQcmV2ZW50ZWQ6IHJldHVybkZhbHNl
LAorICAgIGlzUHJvcGFnYXRpb25TdG9wcGVkOiByZXR1cm5GYWxzZSwKKyAgICBpc0ltbWVkaWF0
ZVByb3BhZ2F0aW9uU3RvcHBlZDogcmV0dXJuRmFsc2UKK307CisKKy8vIENyZWF0ZSBtb3VzZWVu
dGVyL2xlYXZlIGV2ZW50cyB1c2luZyBtb3VzZW92ZXIvb3V0IGFuZCBldmVudC10aW1lIGNoZWNr
cworalF1ZXJ5LmVhY2goeworICAgIG1vdXNlZW50ZXI6ICJtb3VzZW92ZXIiLAorICAgIG1vdXNl
bGVhdmU6ICJtb3VzZW91dCIKK30sIGZ1bmN0aW9uKCBvcmlnLCBmaXggKSB7CisgICAgalF1ZXJ5
LmV2ZW50LnNwZWNpYWxbIG9yaWcgXSA9IHsKKyAgICAgICAgZGVsZWdhdGVUeXBlOiBmaXgsCisg
ICAgICAgIGJpbmRUeXBlOiBmaXgsCisKKyAgICAgICAgaGFuZGxlOiBmdW5jdGlvbiggZXZlbnQg
KSB7CisgICAgICAgICAgICB2YXIgcmV0LAorICAgICAgICAgICAgICAgIHRhcmdldCA9IHRoaXMs
CisgICAgICAgICAgICAgICAgcmVsYXRlZCA9IGV2ZW50LnJlbGF0ZWRUYXJnZXQsCisgICAgICAg
ICAgICAgICAgaGFuZGxlT2JqID0gZXZlbnQuaGFuZGxlT2JqLAorICAgICAgICAgICAgICAgIHNl
bGVjdG9yID0gaGFuZGxlT2JqLnNlbGVjdG9yOworCisgICAgICAgICAgICAvLyBGb3IgbW91c2Vu
dGVyL2xlYXZlIGNhbGwgdGhlIGhhbmRsZXIgaWYgcmVsYXRlZCBpcyBvdXRzaWRlIHRoZSB0YXJn
ZXQuCisgICAgICAgICAgICAvLyBOQjogTm8gcmVsYXRlZFRhcmdldCBpZiB0aGUgbW91c2UgbGVm
dC9lbnRlcmVkIHRoZSBicm93c2VyIHdpbmRvdworICAgICAgICAgICAgaWYgKCAhcmVsYXRlZCB8
fCAocmVsYXRlZCAhPT0gdGFyZ2V0ICYmICFqUXVlcnkuY29udGFpbnMoIHRhcmdldCwgcmVsYXRl
ZCApKSApIHsKKyAgICAgICAgICAgICAgICBldmVudC50eXBlID0gaGFuZGxlT2JqLm9yaWdUeXBl
OworICAgICAgICAgICAgICAgIHJldCA9IGhhbmRsZU9iai5oYW5kbGVyLmFwcGx5KCB0aGlzLCBh
cmd1bWVudHMgKTsKKyAgICAgICAgICAgICAgICBldmVudC50eXBlID0gZml4OworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAgfQorICAgIH07Cit9KTsKKwor
Ly8gSUUgc3VibWl0IGRlbGVnYXRpb24KK2lmICggIWpRdWVyeS5zdXBwb3J0LnN1Ym1pdEJ1YmJs
ZXMgKSB7CisKKyAgICBqUXVlcnkuZXZlbnQuc3BlY2lhbC5zdWJtaXQgPSB7CisgICAgICAgIHNl
dHVwOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIC8vIE9ubHkgbmVlZCB0aGlzIGZvciBkZWxl
Z2F0ZWQgZm9ybSBzdWJtaXQgZXZlbnRzCisgICAgICAgICAgICBpZiAoIGpRdWVyeS5ub2RlTmFt
ZSggdGhpcywgImZvcm0iICkgKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBMYXp5LWFkZCBhIHN1Ym1pdCBoYW5kbGVyIHdo
ZW4gYSBkZXNjZW5kYW50IGZvcm0gbWF5IHBvdGVudGlhbGx5IGJlIHN1Ym1pdHRlZAorICAgICAg
ICAgICAgalF1ZXJ5LmV2ZW50LmFkZCggdGhpcywgImNsaWNrLl9zdWJtaXQga2V5cHJlc3MuX3N1
Ym1pdCIsIGZ1bmN0aW9uKCBlICkgeworICAgICAgICAgICAgICAgIC8vIE5vZGUgbmFtZSBjaGVj
ayBhdm9pZHMgYSBWTUwtcmVsYXRlZCBjcmFzaCBpbiBJRSAoIzk4MDcpCisgICAgICAgICAgICAg
ICAgdmFyIGVsZW0gPSBlLnRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgZm9ybSA9IGpRdWVy
eS5ub2RlTmFtZSggZWxlbSwgImlucHV0IiApIHx8IGpRdWVyeS5ub2RlTmFtZSggZWxlbSwgImJ1
dHRvbiIgKSA/IGVsZW0uZm9ybSA6IHVuZGVmaW5lZDsKKyAgICAgICAgICAgICAgICBpZiAoIGZv
cm0gJiYgIWpRdWVyeS5fZGF0YSggZm9ybSwgIl9zdWJtaXRfYXR0YWNoZWQiICkgKSB7CisgICAg
ICAgICAgICAgICAgICAgIGpRdWVyeS5ldmVudC5hZGQoIGZvcm0sICJzdWJtaXQuX3N1Ym1pdCIs
IGZ1bmN0aW9uKCBldmVudCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50Ll9zdWJt
aXRfYnViYmxlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAg
ICAgICAgIGpRdWVyeS5fZGF0YSggZm9ybSwgIl9zdWJtaXRfYXR0YWNoZWQiLCB0cnVlICk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAvLyByZXR1cm4g
dW5kZWZpbmVkIHNpbmNlIHdlIGRvbid0IG5lZWQgYW4gZXZlbnQgbGlzdGVuZXIKKyAgICAgICAg
fSwKKworICAgICAgICBwb3N0RGlzcGF0Y2g6IGZ1bmN0aW9uKCBldmVudCApIHsKKyAgICAgICAg
ICAgIC8vIElmIGZvcm0gd2FzIHN1Ym1pdHRlZCBieSB0aGUgdXNlciwgYnViYmxlIHRoZSBldmVu
dCB1cCB0aGUgdHJlZQorICAgICAgICAgICAgaWYgKCBldmVudC5fc3VibWl0X2J1YmJsZSApIHsK
KyAgICAgICAgICAgICAgICBkZWxldGUgZXZlbnQuX3N1Ym1pdF9idWJibGU7CisgICAgICAgICAg
ICAgICAgaWYgKCB0aGlzLnBhcmVudE5vZGUgJiYgIWV2ZW50LmlzVHJpZ2dlciApIHsKKyAgICAg
ICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnNpbXVsYXRlKCAic3VibWl0IiwgdGhpcy5wYXJl
bnROb2RlLCBldmVudCwgdHJ1ZSApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSwKKworICAgICAgICB0ZWFyZG93bjogZnVuY3Rpb24oKSB7CisgICAgICAgICAg
ICAvLyBPbmx5IG5lZWQgdGhpcyBmb3IgZGVsZWdhdGVkIGZvcm0gc3VibWl0IGV2ZW50cworICAg
ICAgICAgICAgaWYgKCBqUXVlcnkubm9kZU5hbWUoIHRoaXMsICJmb3JtIiApICkgeworICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8g
UmVtb3ZlIGRlbGVnYXRlZCBoYW5kbGVyczsgY2xlYW5EYXRhIGV2ZW50dWFsbHkgcmVhcHMgc3Vi
bWl0IGhhbmRsZXJzIGF0dGFjaGVkIGFib3ZlCisgICAgICAgICAgICBqUXVlcnkuZXZlbnQucmVt
b3ZlKCB0aGlzLCAiLl9zdWJtaXQiICk7CisgICAgICAgIH0KKyAgICB9OworfQorCisvLyBJRSBj
aGFuZ2UgZGVsZWdhdGlvbiBhbmQgY2hlY2tib3gvcmFkaW8gZml4CitpZiAoICFqUXVlcnkuc3Vw
cG9ydC5jaGFuZ2VCdWJibGVzICkgeworCisgICAgalF1ZXJ5LmV2ZW50LnNwZWNpYWwuY2hhbmdl
ID0geworCisgICAgICAgIHNldHVwOiBmdW5jdGlvbigpIHsKKworICAgICAgICAgICAgaWYgKCBy
Zm9ybUVsZW1zLnRlc3QoIHRoaXMubm9kZU5hbWUgKSApIHsKKyAgICAgICAgICAgICAgICAvLyBJ
RSBkb2Vzbid0IGZpcmUgY2hhbmdlIG9uIGEgY2hlY2svcmFkaW8gdW50aWwgYmx1cjsgdHJpZ2dl
ciBpdCBvbiBjbGljaworICAgICAgICAgICAgICAgIC8vIGFmdGVyIGEgcHJvcGVydHljaGFuZ2Uu
IEVhdCB0aGUgYmx1ci1jaGFuZ2UgaW4gc3BlY2lhbC5jaGFuZ2UuaGFuZGxlLgorICAgICAgICAg
ICAgICAgIC8vIFRoaXMgc3RpbGwgZmlyZXMgb25jaGFuZ2UgYSBzZWNvbmQgdGltZSBmb3IgY2hl
Y2svcmFkaW8gYWZ0ZXIgYmx1ci4KKyAgICAgICAgICAgICAgICBpZiAoIHRoaXMudHlwZSA9PT0g
ImNoZWNrYm94IiB8fCB0aGlzLnR5cGUgPT09ICJyYWRpbyIgKSB7CisgICAgICAgICAgICAgICAg
ICAgIGpRdWVyeS5ldmVudC5hZGQoIHRoaXMsICJwcm9wZXJ0eWNoYW5nZS5fY2hhbmdlIiwgZnVu
Y3Rpb24oIGV2ZW50ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBldmVudC5vcmln
aW5hbEV2ZW50LnByb3BlcnR5TmFtZSA9PT0gImNoZWNrZWQiICkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRoaXMuX2p1c3RfY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICBq
UXVlcnkuZXZlbnQuYWRkKCB0aGlzLCAiY2xpY2suX2NoYW5nZSIsIGZ1bmN0aW9uKCBldmVudCAp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdGhpcy5fanVzdF9jaGFuZ2VkICYmICFl
dmVudC5pc1RyaWdnZXIgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fanVz
dF9jaGFuZ2VkID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBBbGxvdyB0cmlnZ2VyZWQsIHNpbXVsYXRlZCBjaGFuZ2UgZXZlbnRz
ICgjMTE1MDApCisgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQuc2ltdWxhdGUo
ICJjaGFuZ2UiLCB0aGlzLCBldmVudCwgdHJ1ZSApOworICAgICAgICAgICAgICAgICAgICB9KTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgLy8gRGVsZWdhdGVkIGV2ZW50OyBsYXp5LWFkZCBhIGNoYW5n
ZSBoYW5kbGVyIG9uIGRlc2NlbmRhbnQgaW5wdXRzCisgICAgICAgICAgICBqUXVlcnkuZXZlbnQu
YWRkKCB0aGlzLCAiYmVmb3JlYWN0aXZhdGUuX2NoYW5nZSIsIGZ1bmN0aW9uKCBlICkgeworICAg
ICAgICAgICAgICAgIHZhciBlbGVtID0gZS50YXJnZXQ7CisKKyAgICAgICAgICAgICAgICBpZiAo
IHJmb3JtRWxlbXMudGVzdCggZWxlbS5ub2RlTmFtZSApICYmICFqUXVlcnkuX2RhdGEoIGVsZW0s
ICJfY2hhbmdlX2F0dGFjaGVkIiApICkgeworICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXZl
bnQuYWRkKCBlbGVtLCAiY2hhbmdlLl9jaGFuZ2UiLCBmdW5jdGlvbiggZXZlbnQgKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIHRoaXMucGFyZW50Tm9kZSAmJiAhZXZlbnQuaXNTaW11
bGF0ZWQgJiYgIWV2ZW50LmlzVHJpZ2dlciApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBqUXVlcnkuZXZlbnQuc2ltdWxhdGUoICJjaGFuZ2UiLCB0aGlzLnBhcmVudE5vZGUsIGV2ZW50
LCB0cnVlICk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IH0pOworICAgICAgICAgICAgICAgICAgICBqUXVlcnkuX2RhdGEoIGVsZW0sICJfY2hhbmdlX2F0
dGFjaGVkIiwgdHJ1ZSApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAg
ICAgICB9LAorCisgICAgICAgIGhhbmRsZTogZnVuY3Rpb24oIGV2ZW50ICkgeworICAgICAgICAg
ICAgdmFyIGVsZW0gPSBldmVudC50YXJnZXQ7CisKKyAgICAgICAgICAgIC8vIFN3YWxsb3cgbmF0
aXZlIGNoYW5nZSBldmVudHMgZnJvbSBjaGVja2JveC9yYWRpbywgd2UgYWxyZWFkeSB0cmlnZ2Vy
ZWQgdGhlbSBhYm92ZQorICAgICAgICAgICAgaWYgKCB0aGlzICE9PSBlbGVtIHx8IGV2ZW50Lmlz
U2ltdWxhdGVkIHx8IGV2ZW50LmlzVHJpZ2dlciB8fCAoZWxlbS50eXBlICE9PSAicmFkaW8iICYm
IGVsZW0udHlwZSAhPT0gImNoZWNrYm94IikgKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGV2
ZW50LmhhbmRsZU9iai5oYW5kbGVyLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfSwKKworICAgICAgICB0ZWFyZG93bjogZnVuY3Rpb24oKSB7CisgICAg
ICAgICAgICBqUXVlcnkuZXZlbnQucmVtb3ZlKCB0aGlzLCAiLl9jaGFuZ2UiICk7CisKKyAgICAg
ICAgICAgIHJldHVybiAhcmZvcm1FbGVtcy50ZXN0KCB0aGlzLm5vZGVOYW1lICk7CisgICAgICAg
IH0KKyAgICB9OworfQorCisvLyBDcmVhdGUgImJ1YmJsaW5nIiBmb2N1cyBhbmQgYmx1ciBldmVu
dHMKK2lmICggIWpRdWVyeS5zdXBwb3J0LmZvY3VzaW5CdWJibGVzICkgeworICAgIGpRdWVyeS5l
YWNoKHsgZm9jdXM6ICJmb2N1c2luIiwgYmx1cjogImZvY3Vzb3V0IiB9LCBmdW5jdGlvbiggb3Jp
ZywgZml4ICkgeworCisgICAgICAgIC8vIEF0dGFjaCBhIHNpbmdsZSBjYXB0dXJpbmcgaGFuZGxl
ciB3aGlsZSBzb21lb25lIHdhbnRzIGZvY3VzaW4vZm9jdXNvdXQKKyAgICAgICAgdmFyIGF0dGFj
aGVzID0gMCwKKyAgICAgICAgICAgIGhhbmRsZXIgPSBmdW5jdGlvbiggZXZlbnQgKSB7CisgICAg
ICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnNpbXVsYXRlKCBmaXgsIGV2ZW50LnRhcmdldCwgalF1
ZXJ5LmV2ZW50LmZpeCggZXZlbnQgKSwgdHJ1ZSApOworICAgICAgICAgICAgfTsKKworICAgICAg
ICBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgZml4IF0gPSB7CisgICAgICAgICAgICBzZXR1cDogZnVu
Y3Rpb24oKSB7CisgICAgICAgICAgICAgICAgaWYgKCBhdHRhY2hlcysrID09PSAwICkgeworICAg
ICAgICAgICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCBvcmlnLCBoYW5kbGVy
LCB0cnVlICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAg
IHRlYXJkb3duOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBpZiAoIC0tYXR0YWNoZXMg
PT09IDAgKSB7CisgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVu
ZXIoIG9yaWcsIGhhbmRsZXIsIHRydWUgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH07CisgICAgfSk7Cit9CisKK2pRdWVyeS5mbi5leHRlbmQoeworCisgICAg
b246IGZ1bmN0aW9uKCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuLCAvKklOVEVSTkFMKi8gb25l
ICkgeworICAgICAgICB2YXIgb3JpZ0ZuLCB0eXBlOworCisgICAgICAgIC8vIFR5cGVzIGNhbiBi
ZSBhIG1hcCBvZiB0eXBlcy9oYW5kbGVycworICAgICAgICBpZiAoIHR5cGVvZiB0eXBlcyA9PT0g
Im9iamVjdCIgKSB7CisgICAgICAgICAgICAvLyAoIHR5cGVzLU9iamVjdCwgc2VsZWN0b3IsIGRh
dGEgKQorICAgICAgICAgICAgaWYgKCB0eXBlb2Ygc2VsZWN0b3IgIT09ICJzdHJpbmciICkgeyAv
LyAmJiBzZWxlY3RvciAhPSBudWxsCisgICAgICAgICAgICAgICAgLy8gKCB0eXBlcy1PYmplY3Qs
IGRhdGEgKQorICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhIHx8IHNlbGVjdG9yOworICAgICAg
ICAgICAgICAgIHNlbGVjdG9yID0gdW5kZWZpbmVkOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZm9yICggdHlwZSBpbiB0eXBlcyApIHsKKyAgICAgICAgICAgICAgICB0aGlzLm9uKCB0eXBl
LCBzZWxlY3RvciwgZGF0YSwgdHlwZXNbIHR5cGUgXSwgb25lICk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggZGF0YSA9
PSBudWxsICYmIGZuID09IG51bGwgKSB7CisgICAgICAgICAgICAvLyAoIHR5cGVzLCBmbiApCisg
ICAgICAgICAgICBmbiA9IHNlbGVjdG9yOworICAgICAgICAgICAgZGF0YSA9IHNlbGVjdG9yID0g
dW5kZWZpbmVkOworICAgICAgICB9IGVsc2UgaWYgKCBmbiA9PSBudWxsICkgeworICAgICAgICAg
ICAgaWYgKCB0eXBlb2Ygc2VsZWN0b3IgPT09ICJzdHJpbmciICkgeworICAgICAgICAgICAgICAg
IC8vICggdHlwZXMsIHNlbGVjdG9yLCBmbiApCisgICAgICAgICAgICAgICAgZm4gPSBkYXRhOwor
ICAgICAgICAgICAgICAgIGRhdGEgPSB1bmRlZmluZWQ7CisgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgIC8vICggdHlwZXMsIGRhdGEsIGZuICkKKyAgICAgICAgICAgICAgICBm
biA9IGRhdGE7CisgICAgICAgICAgICAgICAgZGF0YSA9IHNlbGVjdG9yOworICAgICAgICAgICAg
ICAgIHNlbGVjdG9yID0gdW5kZWZpbmVkOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIGlmICggZm4gPT09IGZhbHNlICkgeworICAgICAgICAgICAgZm4gPSByZXR1cm5GYWxzZTsK
KyAgICAgICAgfSBlbHNlIGlmICggIWZuICkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXM7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoIG9uZSA9PT0gMSApIHsKKyAgICAgICAgICAgIG9yaWdG
biA9IGZuOworICAgICAgICAgICAgZm4gPSBmdW5jdGlvbiggZXZlbnQgKSB7CisgICAgICAgICAg
ICAgICAgLy8gQ2FuIHVzZSBhbiBlbXB0eSBzZXQsIHNpbmNlIGV2ZW50IGNvbnRhaW5zIHRoZSBp
bmZvCisgICAgICAgICAgICAgICAgalF1ZXJ5KCkub2ZmKCBldmVudCApOworICAgICAgICAgICAg
ICAgIHJldHVybiBvcmlnRm4uYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApOworICAgICAgICAgICAg
fTsKKyAgICAgICAgICAgIC8vIFVzZSBzYW1lIGd1aWQgc28gY2FsbGVyIGNhbiByZW1vdmUgdXNp
bmcgb3JpZ0ZuCisgICAgICAgICAgICBmbi5ndWlkID0gb3JpZ0ZuLmd1aWQgfHwgKCBvcmlnRm4u
Z3VpZCA9IGpRdWVyeS5ndWlkKysgKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpcy5l
YWNoKCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGpRdWVyeS5ldmVudC5hZGQoIHRoaXMsIHR5
cGVzLCBmbiwgZGF0YSwgc2VsZWN0b3IgKTsKKyAgICAgICAgfSk7CisgICAgfSwKKyAgICBvbmU6
IGZ1bmN0aW9uKCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuICkgeworICAgICAgICByZXR1cm4g
dGhpcy5vbiggdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiwgMSApOworICAgIH0sCisgICAgb2Zm
OiBmdW5jdGlvbiggdHlwZXMsIHNlbGVjdG9yLCBmbiApIHsKKyAgICAgICAgdmFyIGhhbmRsZU9i
aiwgdHlwZTsKKyAgICAgICAgaWYgKCB0eXBlcyAmJiB0eXBlcy5wcmV2ZW50RGVmYXVsdCAmJiB0
eXBlcy5oYW5kbGVPYmogKSB7CisgICAgICAgICAgICAvLyAoIGV2ZW50ICkgIGRpc3BhdGNoZWQg
alF1ZXJ5LkV2ZW50CisgICAgICAgICAgICBoYW5kbGVPYmogPSB0eXBlcy5oYW5kbGVPYmo7Cisg
ICAgICAgICAgICBqUXVlcnkoIHR5cGVzLmRlbGVnYXRlVGFyZ2V0ICkub2ZmKAorICAgICAgICAg
ICAgICAgIGhhbmRsZU9iai5uYW1lc3BhY2UgPyBoYW5kbGVPYmoub3JpZ1R5cGUgKyAiLiIgKyBo
YW5kbGVPYmoubmFtZXNwYWNlIDogaGFuZGxlT2JqLm9yaWdUeXBlLAorICAgICAgICAgICAgICAg
IGhhbmRsZU9iai5zZWxlY3RvciwKKyAgICAgICAgICAgICAgICBoYW5kbGVPYmouaGFuZGxlcgor
ICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisgICAg
ICAgIGlmICggdHlwZW9mIHR5cGVzID09PSAib2JqZWN0IiApIHsKKyAgICAgICAgICAgIC8vICgg
dHlwZXMtb2JqZWN0IFssIHNlbGVjdG9yXSApCisgICAgICAgICAgICBmb3IgKCB0eXBlIGluIHR5
cGVzICkgeworICAgICAgICAgICAgICAgIHRoaXMub2ZmKCB0eXBlLCBzZWxlY3RvciwgdHlwZXNb
IHR5cGUgXSApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKCBzZWxlY3RvciA9PT0gZmFsc2UgfHwgdHlwZW9mIHNlbGVjdG9y
ID09PSAiZnVuY3Rpb24iICkgeworICAgICAgICAgICAgLy8gKCB0eXBlcyBbLCBmbl0gKQorICAg
ICAgICAgICAgZm4gPSBzZWxlY3RvcjsKKyAgICAgICAgICAgIHNlbGVjdG9yID0gdW5kZWZpbmVk
OworICAgICAgICB9CisgICAgICAgIGlmICggZm4gPT09IGZhbHNlICkgeworICAgICAgICAgICAg
Zm4gPSByZXR1cm5GYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1
bmN0aW9uKCkgeworICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnJlbW92ZSggdGhpcywgdHlwZXMs
IGZuLCBzZWxlY3RvciApOworICAgICAgICB9KTsKKyAgICB9LAorCisgICAgYmluZDogZnVuY3Rp
b24oIHR5cGVzLCBkYXRhLCBmbiApIHsKKyAgICAgICAgcmV0dXJuIHRoaXMub24oIHR5cGVzLCBu
dWxsLCBkYXRhLCBmbiApOworICAgIH0sCisgICAgdW5iaW5kOiBmdW5jdGlvbiggdHlwZXMsIGZu
ICkgeworICAgICAgICByZXR1cm4gdGhpcy5vZmYoIHR5cGVzLCBudWxsLCBmbiApOworICAgIH0s
CisKKyAgICBsaXZlOiBmdW5jdGlvbiggdHlwZXMsIGRhdGEsIGZuICkgeworICAgICAgICBqUXVl
cnkoIHRoaXMuY29udGV4dCApLm9uKCB0eXBlcywgdGhpcy5zZWxlY3RvciwgZGF0YSwgZm4gKTsK
KyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfSwKKyAgICBkaWU6IGZ1bmN0aW9uKCB0eXBlcywg
Zm4gKSB7CisgICAgICAgIGpRdWVyeSggdGhpcy5jb250ZXh0ICkub2ZmKCB0eXBlcywgdGhpcy5z
ZWxlY3RvciB8fCAiKioiLCBmbiApOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9LAorCisg
ICAgZGVsZWdhdGU6IGZ1bmN0aW9uKCBzZWxlY3RvciwgdHlwZXMsIGRhdGEsIGZuICkgeworICAg
ICAgICByZXR1cm4gdGhpcy5vbiggdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiApOworICAgIH0s
CisgICAgdW5kZWxlZ2F0ZTogZnVuY3Rpb24oIHNlbGVjdG9yLCB0eXBlcywgZm4gKSB7CisgICAg
ICAgIC8vICggbmFtZXNwYWNlICkgb3IgKCBzZWxlY3RvciwgdHlwZXMgWywgZm5dICkKKyAgICAg
ICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgPyB0aGlzLm9mZiggc2VsZWN0b3IsICIq
KiIgKSA6IHRoaXMub2ZmKCB0eXBlcywgc2VsZWN0b3IgfHwgIioqIiwgZm4gKTsKKyAgICB9LAor
CisgICAgdHJpZ2dlcjogZnVuY3Rpb24oIHR5cGUsIGRhdGEgKSB7CisgICAgICAgIHJldHVybiB0
aGlzLmVhY2goZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBqUXVlcnkuZXZlbnQudHJpZ2dlcigg
dHlwZSwgZGF0YSwgdGhpcyApOworICAgICAgICB9KTsKKyAgICB9LAorICAgIHRyaWdnZXJIYW5k
bGVyOiBmdW5jdGlvbiggdHlwZSwgZGF0YSApIHsKKyAgICAgICAgaWYgKCB0aGlzWzBdICkgewor
ICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5ldmVudC50cmlnZ2VyKCB0eXBlLCBkYXRhLCB0aGlz
WzBdLCB0cnVlICk7CisgICAgICAgIH0KKyAgICB9LAorCisgICAgdG9nZ2xlOiBmdW5jdGlvbigg
Zm4gKSB7CisgICAgICAgIC8vIFNhdmUgcmVmZXJlbmNlIHRvIGFyZ3VtZW50cyBmb3IgYWNjZXNz
IGluIGNsb3N1cmUKKyAgICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHMsCisgICAgICAgICAgICBn
dWlkID0gZm4uZ3VpZCB8fCBqUXVlcnkuZ3VpZCsrLAorICAgICAgICAgICAgaSA9IDAsCisgICAg
ICAgICAgICB0b2dnbGVyID0gZnVuY3Rpb24oIGV2ZW50ICkgeworICAgICAgICAgICAgICAgIC8v
IEZpZ3VyZSBvdXQgd2hpY2ggZnVuY3Rpb24gdG8gZXhlY3V0ZQorICAgICAgICAgICAgICAgIHZh
ciBsYXN0VG9nZ2xlID0gKCBqUXVlcnkuX2RhdGEoIHRoaXMsICJsYXN0VG9nZ2xlIiArIGZuLmd1
aWQgKSB8fCAwICkgJSBpOworICAgICAgICAgICAgICAgIGpRdWVyeS5fZGF0YSggdGhpcywgImxh
c3RUb2dnbGUiICsgZm4uZ3VpZCwgbGFzdFRvZ2dsZSArIDEgKTsKKworICAgICAgICAgICAgICAg
IC8vIE1ha2Ugc3VyZSB0aGF0IGNsaWNrcyBzdG9wCisgICAgICAgICAgICAgICAgZXZlbnQucHJl
dmVudERlZmF1bHQoKTsKKworICAgICAgICAgICAgICAgIC8vIGFuZCBleGVjdXRlIHRoZSBmdW5j
dGlvbgorICAgICAgICAgICAgICAgIHJldHVybiBhcmdzWyBsYXN0VG9nZ2xlIF0uYXBwbHkoIHRo
aXMsIGFyZ3VtZW50cyApIHx8IGZhbHNlOworICAgICAgICAgICAgfTsKKworICAgICAgICAvLyBs
aW5rIGFsbCB0aGUgZnVuY3Rpb25zLCBzbyBhbnkgb2YgdGhlbSBjYW4gdW5iaW5kIHRoaXMgY2xp
Y2sgaGFuZGxlcgorICAgICAgICB0b2dnbGVyLmd1aWQgPSBndWlkOworICAgICAgICB3aGlsZSAo
IGkgPCBhcmdzLmxlbmd0aCApIHsKKyAgICAgICAgICAgIGFyZ3NbIGkrKyBdLmd1aWQgPSBndWlk
OworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRoaXMuY2xpY2soIHRvZ2dsZXIgKTsKKyAg
ICB9LAorCisgICAgaG92ZXI6IGZ1bmN0aW9uKCBmbk92ZXIsIGZuT3V0ICkgeworICAgICAgICBy
ZXR1cm4gdGhpcy5tb3VzZWVudGVyKCBmbk92ZXIgKS5tb3VzZWxlYXZlKCBmbk91dCB8fCBmbk92
ZXIgKTsKKyAgICB9Cit9KTsKKworalF1ZXJ5LmVhY2goICgiYmx1ciBmb2N1cyBmb2N1c2luIGZv
Y3Vzb3V0IGxvYWQgcmVzaXplIHNjcm9sbCB1bmxvYWQgY2xpY2sgZGJsY2xpY2sgIiArCisgICAg
Im1vdXNlZG93biBtb3VzZXVwIG1vdXNlbW92ZSBtb3VzZW92ZXIgbW91c2VvdXQgbW91c2VlbnRl
ciBtb3VzZWxlYXZlICIgKworICAgICJjaGFuZ2Ugc2VsZWN0IHN1Ym1pdCBrZXlkb3duIGtleXBy
ZXNzIGtleXVwIGVycm9yIGNvbnRleHRtZW51Iikuc3BsaXQoIiAiKSwgZnVuY3Rpb24oIGksIG5h
bWUgKSB7CisKKyAgICAvLyBIYW5kbGUgZXZlbnQgYmluZGluZworICAgIGpRdWVyeS5mblsgbmFt
ZSBdID0gZnVuY3Rpb24oIGRhdGEsIGZuICkgeworICAgICAgICBpZiAoIGZuID09IG51bGwgKSB7
CisgICAgICAgICAgICBmbiA9IGRhdGE7CisgICAgICAgICAgICBkYXRhID0gbnVsbDsKKyAgICAg
ICAgfQorCisgICAgICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID4gMCA/CisgICAgICAgICAg
ICB0aGlzLm9uKCBuYW1lLCBudWxsLCBkYXRhLCBmbiApIDoKKyAgICAgICAgICAgIHRoaXMudHJp
Z2dlciggbmFtZSApOworICAgIH07CisKKyAgICBpZiAoIHJrZXlFdmVudC50ZXN0KCBuYW1lICkg
KSB7CisgICAgICAgIGpRdWVyeS5ldmVudC5maXhIb29rc1sgbmFtZSBdID0galF1ZXJ5LmV2ZW50
LmtleUhvb2tzOworICAgIH0KKworICAgIGlmICggcm1vdXNlRXZlbnQudGVzdCggbmFtZSApICkg
eworICAgICAgICBqUXVlcnkuZXZlbnQuZml4SG9va3NbIG5hbWUgXSA9IGpRdWVyeS5ldmVudC5t
b3VzZUhvb2tzOworICAgIH0KK30pOworLyohCisgKiBTaXp6bGUgQ1NTIFNlbGVjdG9yIEVuZ2lu
ZQorICogQ29weXJpZ2h0IDIwMTIgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1
dG9ycworICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlCisgKiBodHRwOi8vc2l6emxl
anMuY29tLworICovCisoZnVuY3Rpb24oIHdpbmRvdywgdW5kZWZpbmVkICkgeworCit2YXIgY2Fj
aGVkcnVucywKKyAgICBhc3NlcnRHZXRJZE5vdE5hbWUsCisgICAgRXhwciwKKyAgICBnZXRUZXh0
LAorICAgIGlzWE1MLAorICAgIGNvbnRhaW5zLAorICAgIGNvbXBpbGUsCisgICAgc29ydE9yZGVy
LAorICAgIGhhc0R1cGxpY2F0ZSwKKyAgICBvdXRlcm1vc3RDb250ZXh0LAorCisgICAgYmFzZUhh
c0R1cGxpY2F0ZSA9IHRydWUsCisgICAgc3RydW5kZWZpbmVkID0gInVuZGVmaW5lZCIsCisKKyAg
ICBleHBhbmRvID0gKCAic2l6Y2FjaGUiICsgTWF0aC5yYW5kb20oKSApLnJlcGxhY2UoICIuIiwg
IiIgKSwKKworICAgIFRva2VuID0gU3RyaW5nLAorICAgIGRvY3VtZW50ID0gd2luZG93LmRvY3Vt
ZW50LAorICAgIGRvY0VsZW0gPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsCisgICAgZGlycnVu
cyA9IDAsCisgICAgZG9uZSA9IDAsCisgICAgcG9wID0gW10ucG9wLAorICAgIHB1c2ggPSBbXS5w
dXNoLAorICAgIHNsaWNlID0gW10uc2xpY2UsCisgICAgLy8gVXNlIGEgc3RyaXBwZWQtZG93biBp
bmRleE9mIGlmIGEgbmF0aXZlIG9uZSBpcyB1bmF2YWlsYWJsZQorICAgIGluZGV4T2YgPSBbXS5p
bmRleE9mIHx8IGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICB2YXIgaSA9IDAsCisgICAgICAg
ICAgICBsZW4gPSB0aGlzLmxlbmd0aDsKKyAgICAgICAgZm9yICggOyBpIDwgbGVuOyBpKysgKSB7
CisgICAgICAgICAgICBpZiAoIHRoaXNbaV0gPT09IGVsZW0gKSB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIC0xOwor
ICAgIH0sCisKKyAgICAvLyBBdWdtZW50IGEgZnVuY3Rpb24gZm9yIHNwZWNpYWwgdXNlIGJ5IFNp
enpsZQorICAgIG1hcmtGdW5jdGlvbiA9IGZ1bmN0aW9uKCBmbiwgdmFsdWUgKSB7CisgICAgICAg
IGZuWyBleHBhbmRvIF0gPSB2YWx1ZSA9PSBudWxsIHx8IHZhbHVlOworICAgICAgICByZXR1cm4g
Zm47CisgICAgfSwKKworICAgIGNyZWF0ZUNhY2hlID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZh
ciBjYWNoZSA9IHt9LAorICAgICAgICAgICAga2V5cyA9IFtdOworCisgICAgICAgIHJldHVybiBt
YXJrRnVuY3Rpb24oZnVuY3Rpb24oIGtleSwgdmFsdWUgKSB7CisgICAgICAgICAgICAvLyBPbmx5
IGtlZXAgdGhlIG1vc3QgcmVjZW50IGVudHJpZXMKKyAgICAgICAgICAgIGlmICgga2V5cy5wdXNo
KCBrZXkgKSA+IEV4cHIuY2FjaGVMZW5ndGggKSB7CisgICAgICAgICAgICAgICAgZGVsZXRlIGNh
Y2hlWyBrZXlzLnNoaWZ0KCkgXTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gUmV0
cmlldmUgd2l0aCAoa2V5ICsgIiAiKSB0byBhdm9pZCBjb2xsaXNpb24gd2l0aCBuYXRpdmUgT2Jq
ZWN0LnByb3RvdHlwZSBwcm9wZXJ0aWVzIChzZWUgSXNzdWUgIzE1NykKKyAgICAgICAgICAgIHJl
dHVybiAoY2FjaGVbIGtleSArICIgIiBdID0gdmFsdWUpOworICAgICAgICB9LCBjYWNoZSApOwor
ICAgIH0sCisKKyAgICBjbGFzc0NhY2hlID0gY3JlYXRlQ2FjaGUoKSwKKyAgICB0b2tlbkNhY2hl
ID0gY3JlYXRlQ2FjaGUoKSwKKyAgICBjb21waWxlckNhY2hlID0gY3JlYXRlQ2FjaGUoKSwKKwor
ICAgIC8vIFJlZ2V4CisKKyAgICAvLyBXaGl0ZXNwYWNlIGNoYXJhY3RlcnMgaHR0cDovL3d3dy53
My5vcmcvVFIvY3NzMy1zZWxlY3RvcnMvI3doaXRlc3BhY2UKKyAgICB3aGl0ZXNwYWNlID0gIltc
XHgyMFxcdFxcclxcblxcZl0iLAorICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL2NzczMtc3lu
dGF4LyNjaGFyYWN0ZXJzCisgICAgY2hhcmFjdGVyRW5jb2RpbmcgPSAiKD86XFxcXC58Wy1cXHdd
fFteXFx4MDAtXFx4YTBdKSsiLAorCisgICAgLy8gTG9vc2VseSBtb2RlbGVkIG9uIENTUyBpZGVu
dGlmaWVyIGNoYXJhY3RlcnMKKyAgICAvLyBBbiB1bnF1b3RlZCB2YWx1ZSBzaG91bGQgYmUgYSBD
U1MgaWRlbnRpZmllciAoaHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy1zZWxlY3RvcnMvI2F0dHJp
YnV0ZS1zZWxlY3RvcnMpCisgICAgLy8gUHJvcGVyIHN5bnRheDogaHR0cDovL3d3dy53My5vcmcv
VFIvQ1NTMjEvc3luZGF0YS5odG1sI3ZhbHVlLWRlZi1pZGVudGlmaWVyCisgICAgaWRlbnRpZmll
ciA9IGNoYXJhY3RlckVuY29kaW5nLnJlcGxhY2UoICJ3IiwgIncjIiApLAorCisgICAgLy8gQWNj
ZXB0YWJsZSBvcGVyYXRvcnMgaHR0cDovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzLyNhdHRyaWJ1
dGUtc2VsZWN0b3JzCisgICAgb3BlcmF0b3JzID0gIihbKl4kfCF+XT89KSIsCisgICAgYXR0cmli
dXRlcyA9ICJcXFsiICsgd2hpdGVzcGFjZSArICIqKCIgKyBjaGFyYWN0ZXJFbmNvZGluZyArICIp
IiArIHdoaXRlc3BhY2UgKworICAgICAgICAiKig/OiIgKyBvcGVyYXRvcnMgKyB3aGl0ZXNwYWNl
ICsgIiooPzooWydcIl0pKCg/OlxcXFwufFteXFxcXF0pKj8pXFwzfCgiICsgaWRlbnRpZmllciAr
ICIpfCl8KSIgKyB3aGl0ZXNwYWNlICsgIipcXF0iLAorCisgICAgLy8gUHJlZmVyIGFyZ3VtZW50
cyBub3QgaW4gcGFyZW5zL2JyYWNrZXRzLAorICAgIC8vICAgdGhlbiBhdHRyaWJ1dGUgc2VsZWN0
b3JzIGFuZCBub24tcHNldWRvcyAoZGVub3RlZCBieSA6KSwKKyAgICAvLyAgIHRoZW4gYW55dGhp
bmcgZWxzZQorICAgIC8vIFRoZXNlIHByZWZlcmVuY2VzIGFyZSBoZXJlIHRvIHJlZHVjZSB0aGUg
bnVtYmVyIG9mIHNlbGVjdG9ycworICAgIC8vICAgbmVlZGluZyB0b2tlbml6ZSBpbiB0aGUgUFNF
VURPIHByZUZpbHRlcgorICAgIHBzZXVkb3MgPSAiOigiICsgY2hhcmFjdGVyRW5jb2RpbmcgKyAi
KSg/OlxcKCg/OihbJ1wiXSkoKD86XFxcXC58W15cXFxcXSkqPylcXDJ8KFteKClbXFxdXSp8KD86
KD86IiArIGF0dHJpYnV0ZXMgKyAiKXxbXjpdfFxcXFwuKSp8LiopKVxcKXwpIiwKKworICAgIC8v
IEZvciBtYXRjaEV4cHIuUE9TIGFuZCBtYXRjaEV4cHIubmVlZHNDb250ZXh0CisgICAgcG9zID0g
IjooZXZlbnxvZGR8ZXF8Z3R8bHR8bnRofGZpcnN0fGxhc3QpKD86XFwoIiArIHdoaXRlc3BhY2Ug
KworICAgICAgICAiKigoPzotXFxkKT9cXGQqKSIgKyB3aGl0ZXNwYWNlICsgIipcXCl8KSg/PVte
LV18JCkiLAorCisgICAgLy8gTGVhZGluZyBhbmQgbm9uLWVzY2FwZWQgdHJhaWxpbmcgd2hpdGVz
cGFjZSwgY2FwdHVyaW5nIHNvbWUgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVycyBwcmVjZWRpbmcg
dGhlIGxhdHRlcgorICAgIHJ0cmltID0gbmV3IFJlZ0V4cCggIl4iICsgd2hpdGVzcGFjZSArICIr
fCgoPzpefFteXFxcXF0pKD86XFxcXC4pKikiICsgd2hpdGVzcGFjZSArICIrJCIsICJnIiApLAor
CisgICAgcmNvbW1hID0gbmV3IFJlZ0V4cCggIl4iICsgd2hpdGVzcGFjZSArICIqLCIgKyB3aGl0
ZXNwYWNlICsgIioiICksCisgICAgcmNvbWJpbmF0b3JzID0gbmV3IFJlZ0V4cCggIl4iICsgd2hp
dGVzcGFjZSArICIqKFtcXHgyMFxcdFxcclxcblxcZj4rfl0pIiArIHdoaXRlc3BhY2UgKyAiKiIg
KSwKKyAgICBycHNldWRvID0gbmV3IFJlZ0V4cCggcHNldWRvcyApLAorCisgICAgLy8gRWFzaWx5
LXBhcnNlYWJsZS9yZXRyaWV2YWJsZSBJRCBvciBUQUcgb3IgQ0xBU1Mgc2VsZWN0b3JzCisgICAg
cnF1aWNrRXhwciA9IC9eKD86IyhbXHdcLV0rKXwoXHcrKXxcLihbXHdcLV0rKSkkLywKKworICAg
IHJub3QgPSAvXjpub3QvLAorICAgIHJzaWJsaW5nID0gL1tceDIwXHRcclxuXGZdKlsrfl0vLAor
ICAgIHJlbmRzV2l0aE5vdCA9IC86bm90XCgkLywKKworICAgIHJoZWFkZXIgPSAvaFxkL2ksCisg
ICAgcmlucHV0cyA9IC9pbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uL2ksCisKKyAgICByYmFj
a3NsYXNoID0gL1xcKD8hXFwpL2csCisKKyAgICBtYXRjaEV4cHIgPSB7CisgICAgICAgICJJRCI6
IG5ldyBSZWdFeHAoICJeIygiICsgY2hhcmFjdGVyRW5jb2RpbmcgKyAiKSIgKSwKKyAgICAgICAg
IkNMQVNTIjogbmV3IFJlZ0V4cCggIl5cXC4oIiArIGNoYXJhY3RlckVuY29kaW5nICsgIikiICks
CisgICAgICAgICJOQU1FIjogbmV3IFJlZ0V4cCggIl5cXFtuYW1lPVsnXCJdPygiICsgY2hhcmFj
dGVyRW5jb2RpbmcgKyAiKVsnXCJdP1xcXSIgKSwKKyAgICAgICAgIlRBRyI6IG5ldyBSZWdFeHAo
ICJeKCIgKyBjaGFyYWN0ZXJFbmNvZGluZy5yZXBsYWNlKCAidyIsICJ3KiIgKSArICIpIiApLAor
ICAgICAgICAiQVRUUiI6IG5ldyBSZWdFeHAoICJeIiArIGF0dHJpYnV0ZXMgKSwKKyAgICAgICAg
IlBTRVVETyI6IG5ldyBSZWdFeHAoICJeIiArIHBzZXVkb3MgKSwKKyAgICAgICAgIlBPUyI6IG5l
dyBSZWdFeHAoIHBvcywgImkiICksCisgICAgICAgICJDSElMRCI6IG5ldyBSZWdFeHAoICJeOihv
bmx5fG50aHxmaXJzdHxsYXN0KS1jaGlsZCg/OlxcKCIgKyB3aGl0ZXNwYWNlICsKKyAgICAgICAg
ICAgICIqKGV2ZW58b2RkfCgoWystXXwpKFxcZCopbnwpIiArIHdoaXRlc3BhY2UgKyAiKig/Oihb
Ky1dfCkiICsgd2hpdGVzcGFjZSArCisgICAgICAgICAgICAiKihcXGQrKXwpKSIgKyB3aGl0ZXNw
YWNlICsgIipcXCl8KSIsICJpIiApLAorICAgICAgICAvLyBGb3IgdXNlIGluIGxpYnJhcmllcyBp
bXBsZW1lbnRpbmcgLmlzKCkKKyAgICAgICAgIm5lZWRzQ29udGV4dCI6IG5ldyBSZWdFeHAoICJe
IiArIHdoaXRlc3BhY2UgKyAiKls+K35dfCIgKyBwb3MsICJpIiApCisgICAgfSwKKworICAgIC8v
IFN1cHBvcnQKKworICAgIC8vIFVzZWQgZm9yIHRlc3Rpbmcgc29tZXRoaW5nIG9uIGFuIGVsZW1l
bnQKKyAgICBhc3NlcnQgPSBmdW5jdGlvbiggZm4gKSB7CisgICAgICAgIHZhciBkaXYgPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKworICAgICAgICB0cnkgeworICAgICAgICAgICAg
cmV0dXJuIGZuKCBkaXYgKTsKKyAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgLy8gcmVsZWFzZSBt
ZW1vcnkgaW4gSUUKKyAgICAgICAgICAgIGRpdiA9IG51bGw7CisgICAgICAgIH0KKyAgICB9LAor
CisgICAgLy8gQ2hlY2sgaWYgZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKSByZXR1cm5zIG9ubHkg
ZWxlbWVudHMKKyAgICBhc3NlcnRUYWdOYW1lTm9Db21tZW50cyA9IGFzc2VydChmdW5jdGlvbigg
ZGl2ICkgeworICAgICAgICBkaXYuYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQo
IiIpICk7CisgICAgICAgIHJldHVybiAhZGl2LmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikubGVu
Z3RoOworICAgIH0pLAorCisgICAgLy8gQ2hlY2sgaWYgZ2V0QXR0cmlidXRlIHJldHVybnMgbm9y
bWFsaXplZCBocmVmIGF0dHJpYnV0ZXMKKyAgICBhc3NlcnRIcmVmTm90Tm9ybWFsaXplZCA9IGFz
c2VydChmdW5jdGlvbiggZGl2ICkgeworICAgICAgICBkaXYuaW5uZXJIVE1MID0gIjxhIGhyZWY9
JyMnPjwvYT4iOworICAgICAgICByZXR1cm4gZGl2LmZpcnN0Q2hpbGQgJiYgdHlwZW9mIGRpdi5m
aXJzdENoaWxkLmdldEF0dHJpYnV0ZSAhPT0gc3RydW5kZWZpbmVkICYmCisgICAgICAgICAgICBk
aXYuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoImhyZWYiKSA9PT0gIiMiOworICAgIH0pLAorCisg
ICAgLy8gQ2hlY2sgaWYgYXR0cmlidXRlcyBzaG91bGQgYmUgcmV0cmlldmVkIGJ5IGF0dHJpYnV0
ZSBub2RlcworICAgIGFzc2VydEF0dHJpYnV0ZXMgPSBhc3NlcnQoZnVuY3Rpb24oIGRpdiApIHsK
KyAgICAgICAgZGl2LmlubmVySFRNTCA9ICI8c2VsZWN0Pjwvc2VsZWN0PiI7CisgICAgICAgIHZh
ciB0eXBlID0gdHlwZW9mIGRpdi5sYXN0Q2hpbGQuZ2V0QXR0cmlidXRlKCJtdWx0aXBsZSIpOwor
ICAgICAgICAvLyBJRTggcmV0dXJucyBhIHN0cmluZyBmb3Igc29tZSBhdHRyaWJ1dGVzIGV2ZW4g
d2hlbiBub3QgcHJlc2VudAorICAgICAgICByZXR1cm4gdHlwZSAhPT0gImJvb2xlYW4iICYmIHR5
cGUgIT09ICJzdHJpbmciOworICAgIH0pLAorCisgICAgLy8gQ2hlY2sgaWYgZ2V0RWxlbWVudHNC
eUNsYXNzTmFtZSBjYW4gYmUgdHJ1c3RlZAorICAgIGFzc2VydFVzYWJsZUNsYXNzTmFtZSA9IGFz
c2VydChmdW5jdGlvbiggZGl2ICkgeworICAgICAgICAvLyBPcGVyYSBjYW4ndCBmaW5kIGEgc2Vj
b25kIGNsYXNzbmFtZSAoaW4gOS42KQorICAgICAgICBkaXYuaW5uZXJIVE1MID0gIjxkaXYgY2xh
c3M9J2hpZGRlbiBlJz48L2Rpdj48ZGl2IGNsYXNzPSdoaWRkZW4nPjwvZGl2PiI7CisgICAgICAg
IGlmICggIWRpdi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lIHx8ICFkaXYuZ2V0RWxlbWVudHNCeUNs
YXNzTmFtZSgiZSIpLmxlbmd0aCApIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorCisgICAgICAgIC8vIFNhZmFyaSAzLjIgY2FjaGVzIGNsYXNzIGF0dHJpYnV0ZXMgYW5k
IGRvZXNuJ3QgY2F0Y2ggY2hhbmdlcworICAgICAgICBkaXYubGFzdENoaWxkLmNsYXNzTmFtZSA9
ICJlIjsKKyAgICAgICAgcmV0dXJuIGRpdi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJlIikubGVu
Z3RoID09PSAyOworICAgIH0pLAorCisgICAgLy8gQ2hlY2sgaWYgZ2V0RWxlbWVudEJ5SWQgcmV0
dXJucyBlbGVtZW50cyBieSBuYW1lCisgICAgLy8gQ2hlY2sgaWYgZ2V0RWxlbWVudHNCeU5hbWUg
cHJpdmlsZWdlcyBmb3JtIGNvbnRyb2xzIG9yIHJldHVybnMgZWxlbWVudHMgYnkgSUQKKyAgICBh
c3NlcnRVc2FibGVOYW1lID0gYXNzZXJ0KGZ1bmN0aW9uKCBkaXYgKSB7CisgICAgICAgIC8vIElu
amVjdCBjb250ZW50CisgICAgICAgIGRpdi5pZCA9IGV4cGFuZG8gKyAwOworICAgICAgICBkaXYu
aW5uZXJIVE1MID0gIjxhIG5hbWU9JyIgKyBleHBhbmRvICsgIic+PC9hPjxkaXYgbmFtZT0nIiAr
IGV4cGFuZG8gKyAiJz48L2Rpdj4iOworICAgICAgICBkb2NFbGVtLmluc2VydEJlZm9yZSggZGl2
LCBkb2NFbGVtLmZpcnN0Q2hpbGQgKTsKKworICAgICAgICAvLyBUZXN0CisgICAgICAgIHZhciBw
YXNzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUgJiYKKyAgICAgICAgICAgIC8vIGJ1Z2d5
IGJyb3dzZXJzIHdpbGwgcmV0dXJuIGZld2VyIHRoYW4gdGhlIGNvcnJlY3QgMgorICAgICAgICAg
ICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoIGV4cGFuZG8gKS5sZW5ndGggPT09IDIgKwor
ICAgICAgICAgICAgLy8gYnVnZ3kgYnJvd3NlcnMgd2lsbCByZXR1cm4gbW9yZSB0aGFuIHRoZSBj
b3JyZWN0IDAKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKCBleHBhbmRv
ICsgMCApLmxlbmd0aDsKKyAgICAgICAgYXNzZXJ0R2V0SWROb3ROYW1lID0gIWRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCBleHBhbmRvICk7CisKKyAgICAgICAgLy8gQ2xlYW51cAorICAgICAgICBk
b2NFbGVtLnJlbW92ZUNoaWxkKCBkaXYgKTsKKworICAgICAgICByZXR1cm4gcGFzczsKKyAgICB9
KTsKKworLy8gSWYgc2xpY2UgaXMgbm90IGF2YWlsYWJsZSwgcHJvdmlkZSBhIGJhY2t1cAordHJ5
IHsKKyAgICBzbGljZS5jYWxsKCBkb2NFbGVtLmNoaWxkTm9kZXMsIDAgKVswXS5ub2RlVHlwZTsK
K30gY2F0Y2ggKCBlICkgeworICAgIHNsaWNlID0gZnVuY3Rpb24oIGkgKSB7CisgICAgICAgIHZh
ciBlbGVtLAorICAgICAgICAgICAgcmVzdWx0cyA9IFtdOworICAgICAgICBmb3IgKCA7IChlbGVt
ID0gdGhpc1tpXSk7IGkrKyApIHsKKyAgICAgICAgICAgIHJlc3VsdHMucHVzaCggZWxlbSApOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHRzOworICAgIH07Cit9CisKK2Z1bmN0aW9u
IFNpenpsZSggc2VsZWN0b3IsIGNvbnRleHQsIHJlc3VsdHMsIHNlZWQgKSB7CisgICAgcmVzdWx0
cyA9IHJlc3VsdHMgfHwgW107CisgICAgY29udGV4dCA9IGNvbnRleHQgfHwgZG9jdW1lbnQ7Cisg
ICAgdmFyIG1hdGNoLCBlbGVtLCB4bWwsIG0sCisgICAgICAgIG5vZGVUeXBlID0gY29udGV4dC5u
b2RlVHlwZTsKKworICAgIGlmICggIXNlbGVjdG9yIHx8IHR5cGVvZiBzZWxlY3RvciAhPT0gInN0
cmluZyIgKSB7CisgICAgICAgIHJldHVybiByZXN1bHRzOworICAgIH0KKworICAgIGlmICggbm9k
ZVR5cGUgIT09IDEgJiYgbm9kZVR5cGUgIT09IDkgKSB7CisgICAgICAgIHJldHVybiBbXTsKKyAg
ICB9CisKKyAgICB4bWwgPSBpc1hNTCggY29udGV4dCApOworCisgICAgaWYgKCAheG1sICYmICFz
ZWVkICkgeworICAgICAgICBpZiAoIChtYXRjaCA9IHJxdWlja0V4cHIuZXhlYyggc2VsZWN0b3Ig
KSkgKSB7CisgICAgICAgICAgICAvLyBTcGVlZC11cDogU2l6emxlKCIjSUQiKQorICAgICAgICAg
ICAgaWYgKCAobSA9IG1hdGNoWzFdKSApIHsKKyAgICAgICAgICAgICAgICBpZiAoIG5vZGVUeXBl
ID09PSA5ICkgeworICAgICAgICAgICAgICAgICAgICBlbGVtID0gY29udGV4dC5nZXRFbGVtZW50
QnlJZCggbSApOworICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayBwYXJlbnROb2RlIHRvIGNh
dGNoIHdoZW4gQmxhY2tiZXJyeSA0LjYgcmV0dXJucworICAgICAgICAgICAgICAgICAgICAvLyBu
b2RlcyB0aGF0IGFyZSBubyBsb25nZXIgaW4gdGhlIGRvY3VtZW50ICM2OTYzCisgICAgICAgICAg
ICAgICAgICAgIGlmICggZWxlbSAmJiBlbGVtLnBhcmVudE5vZGUgKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgSUUsIE9wZXJhLCBhbmQgV2Via2l0
IHJldHVybiBpdGVtcworICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnkgbmFtZSBpbnN0ZWFk
IG9mIElECisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGVsZW0uaWQgPT09IG0gKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKCBlbGVtICk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7CisgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0czsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8vIENvbnRleHQgaXMgbm90IGEgZG9j
dW1lbnQKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBjb250ZXh0Lm93bmVyRG9jdW1lbnQgJiYg
KGVsZW0gPSBjb250ZXh0Lm93bmVyRG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIG0gKSkgJiYKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zKCBjb250ZXh0LCBlbGVtICkgJiYgZWxlbS5p
ZCA9PT0gbSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCggZWxlbSAp
OworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFNwZWVkLXVwOiBT
aXp6bGUoIlRBRyIpCisgICAgICAgICAgICB9IGVsc2UgaWYgKCBtYXRjaFsyXSApIHsKKyAgICAg
ICAgICAgICAgICBwdXNoLmFwcGx5KCByZXN1bHRzLCBzbGljZS5jYWxsKGNvbnRleHQuZ2V0RWxl
bWVudHNCeVRhZ05hbWUoIHNlbGVjdG9yICksIDApICk7CisgICAgICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdHM7CisKKyAgICAgICAgICAgIC8vIFNwZWVkLXVwOiBTaXp6bGUoIi5DTEFTUyIpCisg
ICAgICAgICAgICB9IGVsc2UgaWYgKCAobSA9IG1hdGNoWzNdKSAmJiBhc3NlcnRVc2FibGVDbGFz
c05hbWUgJiYgY29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICkgeworICAgICAgICAgICAg
ICAgIHB1c2guYXBwbHkoIHJlc3VsdHMsIHNsaWNlLmNhbGwoY29udGV4dC5nZXRFbGVtZW50c0J5
Q2xhc3NOYW1lKCBtICksIDApICk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBBbGwgb3RoZXJzCisgICAg
cmV0dXJuIHNlbGVjdCggc2VsZWN0b3IucmVwbGFjZSggcnRyaW0sICIkMSIgKSwgY29udGV4dCwg
cmVzdWx0cywgc2VlZCwgeG1sICk7Cit9CisKK1NpenpsZS5tYXRjaGVzID0gZnVuY3Rpb24oIGV4
cHIsIGVsZW1lbnRzICkgeworICAgIHJldHVybiBTaXp6bGUoIGV4cHIsIG51bGwsIG51bGwsIGVs
ZW1lbnRzICk7Cit9OworCitTaXp6bGUubWF0Y2hlc1NlbGVjdG9yID0gZnVuY3Rpb24oIGVsZW0s
IGV4cHIgKSB7CisgICAgcmV0dXJuIFNpenpsZSggZXhwciwgbnVsbCwgbnVsbCwgWyBlbGVtIF0g
KS5sZW5ndGggPiAwOworfTsKKworLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRvIHVzZSBpbiBwc2V1
ZG9zIGZvciBpbnB1dCB0eXBlcworZnVuY3Rpb24gY3JlYXRlSW5wdXRQc2V1ZG8oIHR5cGUgKSB7
CisgICAgcmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICB2YXIgbmFtZSA9IGVsZW0u
bm9kZU5hbWUudG9Mb3dlckNhc2UoKTsKKyAgICAgICAgcmV0dXJuIG5hbWUgPT09ICJpbnB1dCIg
JiYgZWxlbS50eXBlID09PSB0eXBlOworICAgIH07Cit9CisKKy8vIFJldHVybnMgYSBmdW5jdGlv
biB0byB1c2UgaW4gcHNldWRvcyBmb3IgYnV0dG9ucworZnVuY3Rpb24gY3JlYXRlQnV0dG9uUHNl
dWRvKCB0eXBlICkgeworICAgIHJldHVybiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgdmFy
IG5hbWUgPSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7CisgICAgICAgIHJldHVybiAobmFt
ZSA9PT0gImlucHV0IiB8fCBuYW1lID09PSAiYnV0dG9uIikgJiYgZWxlbS50eXBlID09PSB0eXBl
OworICAgIH07Cit9CisKKy8vIFJldHVybnMgYSBmdW5jdGlvbiB0byB1c2UgaW4gcHNldWRvcyBm
b3IgcG9zaXRpb25hbHMKK2Z1bmN0aW9uIGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oIGZuICkgewor
ICAgIHJldHVybiBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIGFyZ3VtZW50ICkgeworICAgICAgICBh
cmd1bWVudCA9ICthcmd1bWVudDsKKyAgICAgICAgcmV0dXJuIG1hcmtGdW5jdGlvbihmdW5jdGlv
biggc2VlZCwgbWF0Y2hlcyApIHsKKyAgICAgICAgICAgIHZhciBqLAorICAgICAgICAgICAgICAg
IG1hdGNoSW5kZXhlcyA9IGZuKCBbXSwgc2VlZC5sZW5ndGgsIGFyZ3VtZW50ICksCisgICAgICAg
ICAgICAgICAgaSA9IG1hdGNoSW5kZXhlcy5sZW5ndGg7CisKKyAgICAgICAgICAgIC8vIE1hdGNo
IGVsZW1lbnRzIGZvdW5kIGF0IHRoZSBzcGVjaWZpZWQgaW5kZXhlcworICAgICAgICAgICAgd2hp
bGUgKCBpLS0gKSB7CisgICAgICAgICAgICAgICAgaWYgKCBzZWVkWyAoaiA9IG1hdGNoSW5kZXhl
c1tpXSkgXSApIHsKKyAgICAgICAgICAgICAgICAgICAgc2VlZFtqXSA9ICEobWF0Y2hlc1tqXSA9
IHNlZWRbal0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7
CisgICAgfSk7Cit9CisKKy8qKgorICogVXRpbGl0eSBmdW5jdGlvbiBmb3IgcmV0cmlldmluZyB0
aGUgdGV4dCB2YWx1ZSBvZiBhbiBhcnJheSBvZiBET00gbm9kZXMKKyAqIEBwYXJhbSB7QXJyYXl8
RWxlbWVudH0gZWxlbQorICovCitnZXRUZXh0ID0gU2l6emxlLmdldFRleHQgPSBmdW5jdGlvbigg
ZWxlbSApIHsKKyAgICB2YXIgbm9kZSwKKyAgICAgICAgcmV0ID0gIiIsCisgICAgICAgIGkgPSAw
LAorICAgICAgICBub2RlVHlwZSA9IGVsZW0ubm9kZVR5cGU7CisKKyAgICBpZiAoIG5vZGVUeXBl
ICkgeworICAgICAgICBpZiAoIG5vZGVUeXBlID09PSAxIHx8IG5vZGVUeXBlID09PSA5IHx8IG5v
ZGVUeXBlID09PSAxMSApIHsKKyAgICAgICAgICAgIC8vIFVzZSB0ZXh0Q29udGVudCBmb3IgZWxl
bWVudHMKKyAgICAgICAgICAgIC8vIGlubmVyVGV4dCB1c2FnZSByZW1vdmVkIGZvciBjb25zaXN0
ZW5jeSBvZiBuZXcgbGluZXMgKHNlZSAjMTExNTMpCisgICAgICAgICAgICBpZiAoIHR5cGVvZiBl
bGVtLnRleHRDb250ZW50ID09PSAic3RyaW5nIiApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZWxlbS50ZXh0Q29udGVudDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
Ly8gVHJhdmVyc2UgaXRzIGNoaWxkcmVuCisgICAgICAgICAgICAgICAgZm9yICggZWxlbSA9IGVs
ZW0uZmlyc3RDaGlsZDsgZWxlbTsgZWxlbSA9IGVsZW0ubmV4dFNpYmxpbmcgKSB7CisgICAgICAg
ICAgICAgICAgICAgIHJldCArPSBnZXRUZXh0KCBlbGVtICk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKCBub2RlVHlwZSA9PT0gMyB8fCBub2Rl
VHlwZSA9PT0gNCApIHsKKyAgICAgICAgICAgIHJldHVybiBlbGVtLm5vZGVWYWx1ZTsKKyAgICAg
ICAgfQorICAgICAgICAvLyBEbyBub3QgaW5jbHVkZSBjb21tZW50IG9yIHByb2Nlc3NpbmcgaW5z
dHJ1Y3Rpb24gbm9kZXMKKyAgICB9IGVsc2UgeworCisgICAgICAgIC8vIElmIG5vIG5vZGVUeXBl
LCB0aGlzIGlzIGV4cGVjdGVkIHRvIGJlIGFuIGFycmF5CisgICAgICAgIGZvciAoIDsgKG5vZGUg
PSBlbGVtW2ldKTsgaSsrICkgeworICAgICAgICAgICAgLy8gRG8gbm90IHRyYXZlcnNlIGNvbW1l
bnQgbm9kZXMKKyAgICAgICAgICAgIHJldCArPSBnZXRUZXh0KCBub2RlICk7CisgICAgICAgIH0K
KyAgICB9CisgICAgcmV0dXJuIHJldDsKK307CisKK2lzWE1MID0gU2l6emxlLmlzWE1MID0gZnVu
Y3Rpb24oIGVsZW0gKSB7CisgICAgLy8gZG9jdW1lbnRFbGVtZW50IGlzIHZlcmlmaWVkIGZvciBj
YXNlcyB3aGVyZSBpdCBkb2Vzbid0IHlldCBleGlzdAorICAgIC8vIChzdWNoIGFzIGxvYWRpbmcg
aWZyYW1lcyBpbiBJRSAtICM0ODMzKQorICAgIHZhciBkb2N1bWVudEVsZW1lbnQgPSBlbGVtICYm
IChlbGVtLm93bmVyRG9jdW1lbnQgfHwgZWxlbSkuZG9jdW1lbnRFbGVtZW50OworICAgIHJldHVy
biBkb2N1bWVudEVsZW1lbnQgPyBkb2N1bWVudEVsZW1lbnQubm9kZU5hbWUgIT09ICJIVE1MIiA6
IGZhbHNlOworfTsKKworLy8gRWxlbWVudCBjb250YWlucyBhbm90aGVyCitjb250YWlucyA9IFNp
enpsZS5jb250YWlucyA9IGRvY0VsZW0uY29udGFpbnMgPworICAgIGZ1bmN0aW9uKCBhLCBiICkg
eworICAgICAgICB2YXIgYWRvd24gPSBhLm5vZGVUeXBlID09PSA5ID8gYS5kb2N1bWVudEVsZW1l
bnQgOiBhLAorICAgICAgICAgICAgYnVwID0gYiAmJiBiLnBhcmVudE5vZGU7CisgICAgICAgIHJl
dHVybiBhID09PSBidXAgfHwgISEoIGJ1cCAmJiBidXAubm9kZVR5cGUgPT09IDEgJiYgYWRvd24u
Y29udGFpbnMgJiYgYWRvd24uY29udGFpbnMoYnVwKSApOworICAgIH0gOgorICAgIGRvY0VsZW0u
Y29tcGFyZURvY3VtZW50UG9zaXRpb24gPworICAgIGZ1bmN0aW9uKCBhLCBiICkgeworICAgICAg
ICByZXR1cm4gYiAmJiAhISggYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiggYiApICYgMTYgKTsK
KyAgICB9IDoKKyAgICBmdW5jdGlvbiggYSwgYiApIHsKKyAgICAgICAgd2hpbGUgKCAoYiA9IGIu
cGFyZW50Tm9kZSkgKSB7CisgICAgICAgICAgICBpZiAoIGIgPT09IGEgKSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH07CisKK1NpenpsZS5hdHRyID0gZnVuY3Rpb24oIGVsZW0sIG5hbWUg
KSB7CisgICAgdmFyIHZhbCwKKyAgICAgICAgeG1sID0gaXNYTUwoIGVsZW0gKTsKKworICAgIGlm
ICggIXhtbCApIHsKKyAgICAgICAgbmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTsKKyAgICB9Cisg
ICAgaWYgKCAodmFsID0gRXhwci5hdHRySGFuZGxlWyBuYW1lIF0pICkgeworICAgICAgICByZXR1
cm4gdmFsKCBlbGVtICk7CisgICAgfQorICAgIGlmICggeG1sIHx8IGFzc2VydEF0dHJpYnV0ZXMg
KSB7CisgICAgICAgIHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSggbmFtZSApOworICAgIH0KKyAg
ICB2YWwgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoIG5hbWUgKTsKKyAgICByZXR1cm4gdmFsID8K
KyAgICAgICAgdHlwZW9mIGVsZW1bIG5hbWUgXSA9PT0gImJvb2xlYW4iID8KKyAgICAgICAgICAg
IGVsZW1bIG5hbWUgXSA/IG5hbWUgOiBudWxsIDoKKyAgICAgICAgICAgIHZhbC5zcGVjaWZpZWQg
PyB2YWwudmFsdWUgOiBudWxsIDoKKyAgICAgICAgbnVsbDsKK307CisKK0V4cHIgPSBTaXp6bGUu
c2VsZWN0b3JzID0geworCisgICAgLy8gQ2FuIGJlIGFkanVzdGVkIGJ5IHRoZSB1c2VyCisgICAg
Y2FjaGVMZW5ndGg6IDUwLAorCisgICAgY3JlYXRlUHNldWRvOiBtYXJrRnVuY3Rpb24sCisKKyAg
ICBtYXRjaDogbWF0Y2hFeHByLAorCisgICAgLy8gSUU2LzcgcmV0dXJuIGEgbW9kaWZpZWQgaHJl
ZgorICAgIGF0dHJIYW5kbGU6IGFzc2VydEhyZWZOb3ROb3JtYWxpemVkID8KKyAgICAgICAge30g
OgorICAgICAgICB7CisgICAgICAgICAgICAiaHJlZiI6IGZ1bmN0aW9uKCBlbGVtICkgeworICAg
ICAgICAgICAgICAgIHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSggImhyZWYiLCAyICk7CisgICAg
ICAgICAgICB9LAorICAgICAgICAgICAgInR5cGUiOiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUoInR5cGUiKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfSwKKworICAgIGZpbmQ6IHsKKyAgICAgICAgIklEIjogYXNzZXJ0R2V0SWRO
b3ROYW1lID8KKyAgICAgICAgICAgIGZ1bmN0aW9uKCBpZCwgY29udGV4dCwgeG1sICkgeworICAg
ICAgICAgICAgICAgIGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQgIT09IHN0cnVu
ZGVmaW5lZCAmJiAheG1sICkgeworICAgICAgICAgICAgICAgICAgICB2YXIgbSA9IGNvbnRleHQu
Z2V0RWxlbWVudEJ5SWQoIGlkICk7CisgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIHBhcmVu
dE5vZGUgdG8gY2F0Y2ggd2hlbiBCbGFja2JlcnJ5IDQuNiByZXR1cm5zCisgICAgICAgICAgICAg
ICAgICAgIC8vIG5vZGVzIHRoYXQgYXJlIG5vIGxvbmdlciBpbiB0aGUgZG9jdW1lbnQgIzY5NjMK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG0gJiYgbS5wYXJlbnROb2RlID8gW21dIDogW107
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSA6CisgICAgICAgICAgICBmdW5jdGlv
biggaWQsIGNvbnRleHQsIHhtbCApIHsKKyAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiBjb250
ZXh0LmdldEVsZW1lbnRCeUlkICE9PSBzdHJ1bmRlZmluZWQgJiYgIXhtbCApIHsKKyAgICAgICAg
ICAgICAgICAgICAgdmFyIG0gPSBjb250ZXh0LmdldEVsZW1lbnRCeUlkKCBpZCApOworCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBtID8KKyAgICAgICAgICAgICAgICAgICAgICAgIG0uaWQg
PT09IGlkIHx8IHR5cGVvZiBtLmdldEF0dHJpYnV0ZU5vZGUgIT09IHN0cnVuZGVmaW5lZCAmJiBt
LmdldEF0dHJpYnV0ZU5vZGUoImlkIikudmFsdWUgPT09IGlkID8KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBbbV0gOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCA6
CisgICAgICAgICAgICAgICAgICAgICAgICBbXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9LAorCisgICAgICAgICJUQUciOiBhc3NlcnRUYWdOYW1lTm9Db21tZW50cyA/CisgICAg
ICAgICAgICBmdW5jdGlvbiggdGFnLCBjb250ZXh0ICkgeworICAgICAgICAgICAgICAgIGlmICgg
dHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgIT09IHN0cnVuZGVmaW5lZCApIHsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUo
IHRhZyApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gOgorICAgICAgICAgICAg
ZnVuY3Rpb24oIHRhZywgY29udGV4dCApIHsKKyAgICAgICAgICAgICAgICB2YXIgcmVzdWx0cyA9
IGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIHRhZyApOworCisgICAgICAgICAgICAgICAg
Ly8gRmlsdGVyIG91dCBwb3NzaWJsZSBjb21tZW50cworICAgICAgICAgICAgICAgIGlmICggdGFn
ID09PSAiKiIgKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBlbGVtLAorICAgICAgICAgICAg
ICAgICAgICAgICAgdG1wID0gW10sCisgICAgICAgICAgICAgICAgICAgICAgICBpID0gMDsKKwor
ICAgICAgICAgICAgICAgICAgICBmb3IgKCA7IChlbGVtID0gcmVzdWx0c1tpXSk7IGkrKyApIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAucHVzaCggZWxlbSApOworICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRtcDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdHM7CisgICAgICAgICAgICB9LAorCisgICAgICAgICJOQU1FIjogYXNzZXJ0VXNhYmxl
TmFtZSAmJiBmdW5jdGlvbiggdGFnLCBjb250ZXh0ICkgeworICAgICAgICAgICAgaWYgKCB0eXBl
b2YgY29udGV4dC5nZXRFbGVtZW50c0J5TmFtZSAhPT0gc3RydW5kZWZpbmVkICkgeworICAgICAg
ICAgICAgICAgIHJldHVybiBjb250ZXh0LmdldEVsZW1lbnRzQnlOYW1lKCBuYW1lICk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0sCisKKyAgICAgICAgIkNMQVNTIjogYXNzZXJ0VXNhYmxlQ2xh
c3NOYW1lICYmIGZ1bmN0aW9uKCBjbGFzc05hbWUsIGNvbnRleHQsIHhtbCApIHsKKyAgICAgICAg
ICAgIGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAhPT0gc3RydW5k
ZWZpbmVkICYmICF4bWwgKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZ2V0RWxl
bWVudHNCeUNsYXNzTmFtZSggY2xhc3NOYW1lICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9LAorCisgICAgcmVsYXRpdmU6IHsKKyAgICAgICAgIj4iOiB7IGRpcjogInBhcmVudE5v
ZGUiLCBmaXJzdDogdHJ1ZSB9LAorICAgICAgICAiICI6IHsgZGlyOiAicGFyZW50Tm9kZSIgfSwK
KyAgICAgICAgIisiOiB7IGRpcjogInByZXZpb3VzU2libGluZyIsIGZpcnN0OiB0cnVlIH0sCisg
ICAgICAgICJ+IjogeyBkaXI6ICJwcmV2aW91c1NpYmxpbmciIH0KKyAgICB9LAorCisgICAgcHJl
RmlsdGVyOiB7CisgICAgICAgICJBVFRSIjogZnVuY3Rpb24oIG1hdGNoICkgeworICAgICAgICAg
ICAgbWF0Y2hbMV0gPSBtYXRjaFsxXS5yZXBsYWNlKCByYmFja3NsYXNoLCAiIiApOworCisgICAg
ICAgICAgICAvLyBNb3ZlIHRoZSBnaXZlbiB2YWx1ZSB0byBtYXRjaFszXSB3aGV0aGVyIHF1b3Rl
ZCBvciB1bnF1b3RlZAorICAgICAgICAgICAgbWF0Y2hbM10gPSAoIG1hdGNoWzRdIHx8IG1hdGNo
WzVdIHx8ICIiICkucmVwbGFjZSggcmJhY2tzbGFzaCwgIiIgKTsKKworICAgICAgICAgICAgaWYg
KCBtYXRjaFsyXSA9PT0gIn49IiApIHsKKyAgICAgICAgICAgICAgICBtYXRjaFszXSA9ICIgIiAr
IG1hdGNoWzNdICsgIiAiOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gbWF0
Y2guc2xpY2UoIDAsIDQgKTsKKyAgICAgICAgfSwKKworICAgICAgICAiQ0hJTEQiOiBmdW5jdGlv
biggbWF0Y2ggKSB7CisgICAgICAgICAgICAvKiBtYXRjaGVzIGZyb20gbWF0Y2hFeHByWyJDSElM
RCJdCisgICAgICAgICAgICAgICAgMSB0eXBlIChvbmx5fG50aHwuLi4pCisgICAgICAgICAgICAg
ICAgMiBhcmd1bWVudCAoZXZlbnxvZGR8XGQqfFxkKm4oWystXVxkKyk/fC4uLikKKyAgICAgICAg
ICAgICAgICAzIHhuLWNvbXBvbmVudCBvZiB4bit5IGFyZ3VtZW50IChbKy1dP1xkKm58KQorICAg
ICAgICAgICAgICAgIDQgc2lnbiBvZiB4bi1jb21wb25lbnQKKyAgICAgICAgICAgICAgICA1IHgg
b2YgeG4tY29tcG9uZW50CisgICAgICAgICAgICAgICAgNiBzaWduIG9mIHktY29tcG9uZW50Cisg
ICAgICAgICAgICAgICAgNyB5IG9mIHktY29tcG9uZW50CisgICAgICAgICAgICAqLworICAgICAg
ICAgICAgbWF0Y2hbMV0gPSBtYXRjaFsxXS50b0xvd2VyQ2FzZSgpOworCisgICAgICAgICAgICBp
ZiAoIG1hdGNoWzFdID09PSAibnRoIiApIHsKKyAgICAgICAgICAgICAgICAvLyBudGgtY2hpbGQg
cmVxdWlyZXMgYXJndW1lbnQKKyAgICAgICAgICAgICAgICBpZiAoICFtYXRjaFsyXSApIHsKKyAg
ICAgICAgICAgICAgICAgICAgU2l6emxlLmVycm9yKCBtYXRjaFswXSApOworICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgIC8vIG51bWVyaWMgeCBhbmQgeSBwYXJhbWV0ZXJzIGZv
ciBFeHByLmZpbHRlci5DSElMRAorICAgICAgICAgICAgICAgIC8vIHJlbWVtYmVyIHRoYXQgZmFs
c2UvdHJ1ZSBjYXN0IHJlc3BlY3RpdmVseSB0byAwLzEKKyAgICAgICAgICAgICAgICBtYXRjaFsz
XSA9ICsoIG1hdGNoWzNdID8gbWF0Y2hbNF0gKyAobWF0Y2hbNV0gfHwgMSkgOiAyICogKCBtYXRj
aFsyXSA9PT0gImV2ZW4iIHx8IG1hdGNoWzJdID09PSAib2RkIiApICk7CisgICAgICAgICAgICAg
ICAgbWF0Y2hbNF0gPSArKCAoIG1hdGNoWzZdICsgbWF0Y2hbN10gKSB8fCBtYXRjaFsyXSA9PT0g
Im9kZCIgKTsKKworICAgICAgICAgICAgLy8gb3RoZXIgdHlwZXMgcHJvaGliaXQgYXJndW1lbnRz
CisgICAgICAgICAgICB9IGVsc2UgaWYgKCBtYXRjaFsyXSApIHsKKyAgICAgICAgICAgICAgICBT
aXp6bGUuZXJyb3IoIG1hdGNoWzBdICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJl
dHVybiBtYXRjaDsKKyAgICAgICAgfSwKKworICAgICAgICAiUFNFVURPIjogZnVuY3Rpb24oIG1h
dGNoICkgeworICAgICAgICAgICAgdmFyIHVucXVvdGVkLCBleGNlc3M7CisgICAgICAgICAgICBp
ZiAoIG1hdGNoRXhwclsiQ0hJTEQiXS50ZXN0KCBtYXRjaFswXSApICkgeworICAgICAgICAgICAg
ICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIG1hdGNo
WzNdICkgeworICAgICAgICAgICAgICAgIG1hdGNoWzJdID0gbWF0Y2hbM107CisgICAgICAgICAg
ICB9IGVsc2UgaWYgKCAodW5xdW90ZWQgPSBtYXRjaFs0XSkgKSB7CisgICAgICAgICAgICAgICAg
Ly8gT25seSBjaGVjayBhcmd1bWVudHMgdGhhdCBjb250YWluIGEgcHNldWRvCisgICAgICAgICAg
ICAgICAgaWYgKCBycHNldWRvLnRlc3QodW5xdW90ZWQpICYmCisgICAgICAgICAgICAgICAgICAg
IC8vIEdldCBleGNlc3MgZnJvbSB0b2tlbml6ZSAocmVjdXJzaXZlbHkpCisgICAgICAgICAgICAg
ICAgICAgIChleGNlc3MgPSB0b2tlbml6ZSggdW5xdW90ZWQsIHRydWUgKSkgJiYKKyAgICAgICAg
ICAgICAgICAgICAgLy8gYWR2YW5jZSB0byB0aGUgbmV4dCBjbG9zaW5nIHBhcmVudGhlc2lzCisg
ICAgICAgICAgICAgICAgICAgIChleGNlc3MgPSB1bnF1b3RlZC5pbmRleE9mKCAiKSIsIHVucXVv
dGVkLmxlbmd0aCAtIGV4Y2VzcyApIC0gdW5xdW90ZWQubGVuZ3RoKSApIHsKKworICAgICAgICAg
ICAgICAgICAgICAvLyBleGNlc3MgaXMgYSBuZWdhdGl2ZSBpbmRleAorICAgICAgICAgICAgICAg
ICAgICB1bnF1b3RlZCA9IHVucXVvdGVkLnNsaWNlKCAwLCBleGNlc3MgKTsKKyAgICAgICAgICAg
ICAgICAgICAgbWF0Y2hbMF0gPSBtYXRjaFswXS5zbGljZSggMCwgZXhjZXNzICk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1hdGNoWzJdID0gdW5xdW90ZWQ7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIC8vIFJldHVybiBvbmx5IGNhcHR1cmVzIG5lZWRlZCBieSB0
aGUgcHNldWRvIGZpbHRlciBtZXRob2QgKHR5cGUgYW5kIGFyZ3VtZW50KQorICAgICAgICAgICAg
cmV0dXJuIG1hdGNoLnNsaWNlKCAwLCAzICk7CisgICAgICAgIH0KKyAgICB9LAorCisgICAgZmls
dGVyOiB7CisgICAgICAgICJJRCI6IGFzc2VydEdldElkTm90TmFtZSA/CisgICAgICAgICAgICBm
dW5jdGlvbiggaWQgKSB7CisgICAgICAgICAgICAgICAgaWQgPSBpZC5yZXBsYWNlKCByYmFja3Ns
YXNoLCAiIiApOworICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiggZWxlbSApIHsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKCJpZCIpID09PSBpZDsK
KyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgfSA6CisgICAgICAgICAgICBmdW5jdGlv
biggaWQgKSB7CisgICAgICAgICAgICAgICAgaWQgPSBpZC5yZXBsYWNlKCByYmFja3NsYXNoLCAi
IiApOworICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAg
ICAgICAgICAgICAgdmFyIG5vZGUgPSB0eXBlb2YgZWxlbS5nZXRBdHRyaWJ1dGVOb2RlICE9PSBz
dHJ1bmRlZmluZWQgJiYgZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpOworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gbm9kZSAmJiBub2RlLnZhbHVlID09PSBpZDsKKyAgICAgICAgICAgICAg
ICB9OworICAgICAgICAgICAgfSwKKworICAgICAgICAiVEFHIjogZnVuY3Rpb24oIG5vZGVOYW1l
ICkgeworICAgICAgICAgICAgaWYgKCBub2RlTmFtZSA9PT0gIioiICkgeworICAgICAgICAgICAg
ICAgIHJldHVybiBmdW5jdGlvbigpIHsgcmV0dXJuIHRydWU7IH07CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBub2RlTmFtZSA9IG5vZGVOYW1lLnJlcGxhY2UoIHJiYWNrc2xhc2gsICIiICku
dG9Mb3dlckNhc2UoKTsKKworICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkgewor
ICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLm5vZGVOYW1lICYmIGVsZW0ubm9kZU5hbWUudG9M
b3dlckNhc2UoKSA9PT0gbm9kZU5hbWU7CisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisg
ICAgICAgICJDTEFTUyI6IGZ1bmN0aW9uKCBjbGFzc05hbWUgKSB7CisgICAgICAgICAgICB2YXIg
cGF0dGVybiA9IGNsYXNzQ2FjaGVbIGV4cGFuZG8gXVsgY2xhc3NOYW1lICsgIiAiIF07CisKKyAg
ICAgICAgICAgIHJldHVybiBwYXR0ZXJuIHx8CisgICAgICAgICAgICAgICAgKHBhdHRlcm4gPSBu
ZXcgUmVnRXhwKCAiKF58IiArIHdoaXRlc3BhY2UgKyAiKSIgKyBjbGFzc05hbWUgKyAiKCIgKyB3
aGl0ZXNwYWNlICsgInwkKSIgKSkgJiYKKyAgICAgICAgICAgICAgICBjbGFzc0NhY2hlKCBjbGFz
c05hbWUsIGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGF0
dGVybi50ZXN0KCBlbGVtLmNsYXNzTmFtZSB8fCAodHlwZW9mIGVsZW0uZ2V0QXR0cmlidXRlICE9
PSBzdHJ1bmRlZmluZWQgJiYgZWxlbS5nZXRBdHRyaWJ1dGUoImNsYXNzIikpIHx8ICIiICk7Cisg
ICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0sCisKKyAgICAgICAgIkFUVFIiOiBmdW5jdGlv
biggbmFtZSwgb3BlcmF0b3IsIGNoZWNrICkgeworICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9u
KCBlbGVtLCBjb250ZXh0ICkgeworICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBTaXp6bGUu
YXR0ciggZWxlbSwgbmFtZSApOworCisgICAgICAgICAgICAgICAgaWYgKCByZXN1bHQgPT0gbnVs
bCApIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9wZXJhdG9yID09PSAiIT0iOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoICFvcGVyYXRvciApIHsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgcmVzdWx0ICs9ICIiOworCisgICAgICAgICAgICAgICAgcmV0dXJuIG9wZXJhdG9y
ID09PSAiPSIgPyByZXN1bHQgPT09IGNoZWNrIDoKKyAgICAgICAgICAgICAgICAgICAgb3BlcmF0
b3IgPT09ICIhPSIgPyByZXN1bHQgIT09IGNoZWNrIDoKKyAgICAgICAgICAgICAgICAgICAgb3Bl
cmF0b3IgPT09ICJePSIgPyBjaGVjayAmJiByZXN1bHQuaW5kZXhPZiggY2hlY2sgKSA9PT0gMCA6
CisgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yID09PSAiKj0iID8gY2hlY2sgJiYgcmVzdWx0
LmluZGV4T2YoIGNoZWNrICkgPiAtMSA6CisgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yID09
PSAiJD0iID8gY2hlY2sgJiYgcmVzdWx0LnN1YnN0ciggcmVzdWx0Lmxlbmd0aCAtIGNoZWNrLmxl
bmd0aCApID09PSBjaGVjayA6CisgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yID09PSAifj0i
ID8gKCAiICIgKyByZXN1bHQgKyAiICIgKS5pbmRleE9mKCBjaGVjayApID4gLTEgOgorICAgICAg
ICAgICAgICAgICAgICBvcGVyYXRvciA9PT0gInw9IiA/IHJlc3VsdCA9PT0gY2hlY2sgfHwgcmVz
dWx0LnN1YnN0ciggMCwgY2hlY2subGVuZ3RoICsgMSApID09PSBjaGVjayArICItIiA6CisgICAg
ICAgICAgICAgICAgICAgIGZhbHNlOworICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAg
ICAgICAiQ0hJTEQiOiBmdW5jdGlvbiggdHlwZSwgYXJndW1lbnQsIGZpcnN0LCBsYXN0ICkgewor
CisgICAgICAgICAgICBpZiAoIHR5cGUgPT09ICJudGgiICkgeworICAgICAgICAgICAgICAgIHJl
dHVybiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIG5vZGUsIGRp
ZmYsCisgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGU7CisK
KyAgICAgICAgICAgICAgICAgICAgaWYgKCBmaXJzdCA9PT0gMSAmJiBsYXN0ID09PSAwICkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgICAgICBpZiAoIHBhcmVudCApIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGRpZmYgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggbm9kZSA9
IHBhcmVudC5maXJzdENoaWxkOyBub2RlOyBub2RlID0gbm9kZS5uZXh0U2libGluZyApIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG5vZGUubm9kZVR5cGUgPT09IDEgKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZmYrKzsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCBlbGVtID09PSBub2RlICkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAvLyBJbmNv
cnBvcmF0ZSB0aGUgb2Zmc2V0IChvciBjYXN0IHRvIE5hTiksIHRoZW4gY2hlY2sgYWdhaW5zdCBj
eWNsZSBzaXplCisgICAgICAgICAgICAgICAgICAgIGRpZmYgLT0gbGFzdDsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGRpZmYgPT09IGZpcnN0IHx8ICggZGlmZiAlIGZpcnN0ID09PSAwICYm
IGRpZmYgLyBmaXJzdCA+PSAwICk7CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAgICAg
IHZhciBub2RlID0gZWxlbTsKKworICAgICAgICAgICAgICAgIHN3aXRjaCAoIHR5cGUgKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGNhc2UgIm9ubHkiOgorICAgICAgICAgICAgICAgICAgICBjYXNl
ICJmaXJzdCI6CisgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIChub2RlID0gbm9kZS5w
cmV2aW91c1NpYmxpbmcpICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbm9k
ZS5ub2RlVHlwZSA9PT0gMSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0eXBlID09PSAiZmly
c3QiICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBub2RlID0gZWxl
bTsKKworICAgICAgICAgICAgICAgICAgICAgICAgLyogZmFsbHMgdGhyb3VnaCAqLworICAgICAg
ICAgICAgICAgICAgICBjYXNlICJsYXN0IjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxl
ICggKG5vZGUgPSBub2RlLm5leHRTaWJsaW5nKSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIG5vZGUubm9kZVR5cGUgPT09IDEgKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisK
KyAgICAgICAgIlBTRVVETyI6IGZ1bmN0aW9uKCBwc2V1ZG8sIGFyZ3VtZW50ICkgeworICAgICAg
ICAgICAgLy8gcHNldWRvLWNsYXNzIG5hbWVzIGFyZSBjYXNlLWluc2Vuc2l0aXZlCisgICAgICAg
ICAgICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI3BzZXVkby1jbGFzc2VzCisg
ICAgICAgICAgICAvLyBQcmlvcml0aXplIGJ5IGNhc2Ugc2Vuc2l0aXZpdHkgaW4gY2FzZSBjdXN0
b20gcHNldWRvcyBhcmUgYWRkZWQgd2l0aCB1cHBlcmNhc2UgbGV0dGVycworICAgICAgICAgICAg
Ly8gUmVtZW1iZXIgdGhhdCBzZXRGaWx0ZXJzIGluaGVyaXRzIGZyb20gcHNldWRvcworICAgICAg
ICAgICAgdmFyIGFyZ3MsCisgICAgICAgICAgICAgICAgZm4gPSBFeHByLnBzZXVkb3NbIHBzZXVk
byBdIHx8IEV4cHIuc2V0RmlsdGVyc1sgcHNldWRvLnRvTG93ZXJDYXNlKCkgXSB8fAorICAgICAg
ICAgICAgICAgICAgICBTaXp6bGUuZXJyb3IoICJ1bnN1cHBvcnRlZCBwc2V1ZG86ICIgKyBwc2V1
ZG8gKTsKKworICAgICAgICAgICAgLy8gVGhlIHVzZXIgbWF5IHVzZSBjcmVhdGVQc2V1ZG8gdG8g
aW5kaWNhdGUgdGhhdAorICAgICAgICAgICAgLy8gYXJndW1lbnRzIGFyZSBuZWVkZWQgdG8gY3Jl
YXRlIHRoZSBmaWx0ZXIgZnVuY3Rpb24KKyAgICAgICAgICAgIC8vIGp1c3QgYXMgU2l6emxlIGRv
ZXMKKyAgICAgICAgICAgIGlmICggZm5bIGV4cGFuZG8gXSApIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZm4oIGFyZ3VtZW50ICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEJ1
dCBtYWludGFpbiBzdXBwb3J0IGZvciBvbGQgc2lnbmF0dXJlcworICAgICAgICAgICAgaWYgKCBm
bi5sZW5ndGggPiAxICkgeworICAgICAgICAgICAgICAgIGFyZ3MgPSBbIHBzZXVkbywgcHNldWRv
LCAiIiwgYXJndW1lbnQgXTsKKyAgICAgICAgICAgICAgICByZXR1cm4gRXhwci5zZXRGaWx0ZXJz
Lmhhc093blByb3BlcnR5KCBwc2V1ZG8udG9Mb3dlckNhc2UoKSApID8KKyAgICAgICAgICAgICAg
ICAgICAgbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBzZWVkLCBtYXRjaGVzICkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyIGlkeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRj
aGVkID0gZm4oIHNlZWQsIGFyZ3VtZW50ICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aSA9IG1hdGNoZWQubGVuZ3RoOworICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCBpLS0g
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR4ID0gaW5kZXhPZi5jYWxsKCBzZWVk
LCBtYXRjaGVkW2ldICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VlZFsgaWR4IF0g
PSAhKCBtYXRjaGVzWyBpZHggXSA9IG1hdGNoZWRbaV0gKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSkgOgorICAgICAgICAgICAgICAgICAgICBmdW5j
dGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmbiggZWxlbSwg
MCwgYXJncyApOworICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICByZXR1cm4gZm47CisgICAgICAgIH0KKyAgICB9LAorCisgICAgcHNldWRvczogewor
ICAgICAgICAibm90IjogbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBzZWxlY3RvciApIHsKKyAgICAg
ICAgICAgIC8vIFRyaW0gdGhlIHNlbGVjdG9yIHBhc3NlZCB0byBjb21waWxlCisgICAgICAgICAg
ICAvLyB0byBhdm9pZCB0cmVhdGluZyBsZWFkaW5nIGFuZCB0cmFpbGluZworICAgICAgICAgICAg
Ly8gc3BhY2VzIGFzIGNvbWJpbmF0b3JzCisgICAgICAgICAgICB2YXIgaW5wdXQgPSBbXSwKKyAg
ICAgICAgICAgICAgICByZXN1bHRzID0gW10sCisgICAgICAgICAgICAgICAgbWF0Y2hlciA9IGNv
bXBpbGUoIHNlbGVjdG9yLnJlcGxhY2UoIHJ0cmltLCAiJDEiICkgKTsKKworICAgICAgICAgICAg
cmV0dXJuIG1hdGNoZXJbIGV4cGFuZG8gXSA/CisgICAgICAgICAgICAgICAgbWFya0Z1bmN0aW9u
KGZ1bmN0aW9uKCBzZWVkLCBtYXRjaGVzLCBjb250ZXh0LCB4bWwgKSB7CisgICAgICAgICAgICAg
ICAgICAgIHZhciBlbGVtLAorICAgICAgICAgICAgICAgICAgICAgICAgdW5tYXRjaGVkID0gbWF0
Y2hlciggc2VlZCwgbnVsbCwgeG1sLCBbXSApLAorICAgICAgICAgICAgICAgICAgICAgICAgaSA9
IHNlZWQubGVuZ3RoOworCisgICAgICAgICAgICAgICAgICAgIC8vIE1hdGNoIGVsZW1lbnRzIHVu
bWF0Y2hlZCBieSBgbWF0Y2hlcmAKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCBpLS0gKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIChlbGVtID0gdW5tYXRjaGVkW2ldKSApIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWVkW2ldID0gIShtYXRjaGVzW2ldID0gZWxl
bSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9KSA6CisgICAgICAgICAgICAgICAgZnVuY3Rpb24oIGVsZW0sIGNvbnRl
eHQsIHhtbCApIHsKKyAgICAgICAgICAgICAgICAgICAgaW5wdXRbMF0gPSBlbGVtOworICAgICAg
ICAgICAgICAgICAgICBtYXRjaGVyKCBpbnB1dCwgbnVsbCwgeG1sLCByZXN1bHRzICk7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiAhcmVzdWx0cy5wb3AoKTsKKyAgICAgICAgICAgICAgICB9
OworICAgICAgICB9KSwKKworICAgICAgICAiaGFzIjogbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBz
ZWxlY3RvciApIHsKKyAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gU2l6emxlKCBzZWxlY3RvciwgZWxlbSApLmxlbmd0aCA+IDA7Cisg
ICAgICAgICAgICB9OworICAgICAgICB9KSwKKworICAgICAgICAiY29udGFpbnMiOiBtYXJrRnVu
Y3Rpb24oZnVuY3Rpb24oIHRleHQgKSB7CisgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oIGVs
ZW0gKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuICggZWxlbS50ZXh0Q29udGVudCB8fCBlbGVt
LmlubmVyVGV4dCB8fCBnZXRUZXh0KCBlbGVtICkgKS5pbmRleE9mKCB0ZXh0ICkgPiAtMTsKKyAg
ICAgICAgICAgIH07CisgICAgICAgIH0pLAorCisgICAgICAgICJlbmFibGVkIjogZnVuY3Rpb24o
IGVsZW0gKSB7CisgICAgICAgICAgICByZXR1cm4gZWxlbS5kaXNhYmxlZCA9PT0gZmFsc2U7Cisg
ICAgICAgIH0sCisKKyAgICAgICAgImRpc2FibGVkIjogZnVuY3Rpb24oIGVsZW0gKSB7CisgICAg
ICAgICAgICByZXR1cm4gZWxlbS5kaXNhYmxlZCA9PT0gdHJ1ZTsKKyAgICAgICAgfSwKKworICAg
ICAgICAiY2hlY2tlZCI6IGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAgLy8gSW4gQ1NT
MywgOmNoZWNrZWQgc2hvdWxkIHJldHVybiBib3RoIGNoZWNrZWQgYW5kIHNlbGVjdGVkIGVsZW1l
bnRzCisgICAgICAgICAgICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDExL1JFQy1jc3MzLXNl
bGVjdG9ycy0yMDExMDkyOS8jY2hlY2tlZAorICAgICAgICAgICAgdmFyIG5vZGVOYW1lID0gZWxl
bS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpOworICAgICAgICAgICAgcmV0dXJuIChub2RlTmFtZSA9
PT0gImlucHV0IiAmJiAhIWVsZW0uY2hlY2tlZCkgfHwgKG5vZGVOYW1lID09PSAib3B0aW9uIiAm
JiAhIWVsZW0uc2VsZWN0ZWQpOworICAgICAgICB9LAorCisgICAgICAgICJzZWxlY3RlZCI6IGZ1
bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAgLy8gQWNjZXNzaW5nIHRoaXMgcHJvcGVydHkg
bWFrZXMgc2VsZWN0ZWQtYnktZGVmYXVsdAorICAgICAgICAgICAgLy8gb3B0aW9ucyBpbiBTYWZh
cmkgd29yayBwcm9wZXJseQorICAgICAgICAgICAgaWYgKCBlbGVtLnBhcmVudE5vZGUgKSB7Cisg
ICAgICAgICAgICAgICAgZWxlbS5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXg7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIHJldHVybiBlbGVtLnNlbGVjdGVkID09PSB0cnVlOworICAgICAg
ICB9LAorCisgICAgICAgICJwYXJlbnQiOiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAg
IHJldHVybiAhRXhwci5wc2V1ZG9zWyJlbXB0eSJdKCBlbGVtICk7CisgICAgICAgIH0sCisKKyAg
ICAgICAgImVtcHR5IjogZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAgICAvLyBodHRwOi8v
d3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI2VtcHR5LXBzZXVkbworICAgICAgICAgICAgLy8gOmVt
cHR5IGlzIG9ubHkgYWZmZWN0ZWQgYnkgZWxlbWVudCBub2RlcyBhbmQgY29udGVudCBub2Rlcyhp
bmNsdWRpbmcgdGV4dCgzKSwgY2RhdGEoNCkpLAorICAgICAgICAgICAgLy8gICBub3QgY29tbWVu
dCwgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbnMsIG9yIG90aGVycworICAgICAgICAgICAgLy8gVGhh
bmtzIHRvIERpZWdvIFBlcmluaSBmb3IgdGhlIG5vZGVOYW1lIHNob3J0Y3V0CisgICAgICAgICAg
ICAvLyAgIEdyZWF0ZXIgdGhhbiAiQCIgbWVhbnMgYWxwaGEgY2hhcmFjdGVycyAoc3BlY2lmaWNh
bGx5IG5vdCBzdGFydGluZyB3aXRoICIjIiBvciAiPyIpCisgICAgICAgICAgICB2YXIgbm9kZVR5
cGU7CisgICAgICAgICAgICBlbGVtID0gZWxlbS5maXJzdENoaWxkOworICAgICAgICAgICAgd2hp
bGUgKCBlbGVtICkgeworICAgICAgICAgICAgICAgIGlmICggZWxlbS5ub2RlTmFtZSA+ICJAIiB8
fCAobm9kZVR5cGUgPSBlbGVtLm5vZGVUeXBlKSA9PT0gMyB8fCBub2RlVHlwZSA9PT0gNCApIHsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBlbGVtID0gZWxlbS5uZXh0U2libGluZzsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9LAorCisgICAgICAgICJoZWFkZXIiOiBm
dW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgIHJldHVybiByaGVhZGVyLnRlc3QoIGVsZW0u
bm9kZU5hbWUgKTsKKyAgICAgICAgfSwKKworICAgICAgICAidGV4dCI6IGZ1bmN0aW9uKCBlbGVt
ICkgeworICAgICAgICAgICAgdmFyIHR5cGUsIGF0dHI7CisgICAgICAgICAgICAvLyBJRTYgYW5k
IDcgd2lsbCBtYXAgZWxlbS50eXBlIHRvICd0ZXh0JyBmb3IgbmV3IEhUTUw1IHR5cGVzIChzZWFy
Y2gsIGV0YykKKyAgICAgICAgICAgIC8vIHVzZSBnZXRBdHRyaWJ1dGUgaW5zdGVhZCB0byB0ZXN0
IHRoaXMgY2FzZQorICAgICAgICAgICAgcmV0dXJuIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2Uo
KSA9PT0gImlucHV0IiAmJgorICAgICAgICAgICAgICAgICh0eXBlID0gZWxlbS50eXBlKSA9PT0g
InRleHQiICYmCisgICAgICAgICAgICAgICAgKCAoYXR0ciA9IGVsZW0uZ2V0QXR0cmlidXRlKCJ0
eXBlIikpID09IG51bGwgfHwgYXR0ci50b0xvd2VyQ2FzZSgpID09PSB0eXBlICk7CisgICAgICAg
IH0sCisKKyAgICAgICAgLy8gSW5wdXQgdHlwZXMKKyAgICAgICAgInJhZGlvIjogY3JlYXRlSW5w
dXRQc2V1ZG8oInJhZGlvIiksCisgICAgICAgICJjaGVja2JveCI6IGNyZWF0ZUlucHV0UHNldWRv
KCJjaGVja2JveCIpLAorICAgICAgICAiZmlsZSI6IGNyZWF0ZUlucHV0UHNldWRvKCJmaWxlIiks
CisgICAgICAgICJwYXNzd29yZCI6IGNyZWF0ZUlucHV0UHNldWRvKCJwYXNzd29yZCIpLAorICAg
ICAgICAiaW1hZ2UiOiBjcmVhdGVJbnB1dFBzZXVkbygiaW1hZ2UiKSwKKworICAgICAgICAic3Vi
bWl0IjogY3JlYXRlQnV0dG9uUHNldWRvKCJzdWJtaXQiKSwKKyAgICAgICAgInJlc2V0IjogY3Jl
YXRlQnV0dG9uUHNldWRvKCJyZXNldCIpLAorCisgICAgICAgICJidXR0b24iOiBmdW5jdGlvbigg
ZWxlbSApIHsKKyAgICAgICAgICAgIHZhciBuYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2Fz
ZSgpOworICAgICAgICAgICAgcmV0dXJuIG5hbWUgPT09ICJpbnB1dCIgJiYgZWxlbS50eXBlID09
PSAiYnV0dG9uIiB8fCBuYW1lID09PSAiYnV0dG9uIjsKKyAgICAgICAgfSwKKworICAgICAgICAi
aW5wdXQiOiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgIHJldHVybiByaW5wdXRzLnRl
c3QoIGVsZW0ubm9kZU5hbWUgKTsKKyAgICAgICAgfSwKKworICAgICAgICAiZm9jdXMiOiBmdW5j
dGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgIHZhciBkb2MgPSBlbGVtLm93bmVyRG9jdW1lbnQ7
CisgICAgICAgICAgICByZXR1cm4gZWxlbSA9PT0gZG9jLmFjdGl2ZUVsZW1lbnQgJiYgKCFkb2Mu
aGFzRm9jdXMgfHwgZG9jLmhhc0ZvY3VzKCkpICYmICEhKGVsZW0udHlwZSB8fCBlbGVtLmhyZWYg
fHwgfmVsZW0udGFiSW5kZXgpOworICAgICAgICB9LAorCisgICAgICAgICJhY3RpdmUiOiBmdW5j
dGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgIHJldHVybiBlbGVtID09PSBlbGVtLm93bmVyRG9j
dW1lbnQuYWN0aXZlRWxlbWVudDsKKyAgICAgICAgfSwKKworICAgICAgICAvLyBQb3NpdGlvbmFs
IHR5cGVzCisgICAgICAgICJmaXJzdCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24o
KSB7CisgICAgICAgICAgICByZXR1cm4gWyAwIF07CisgICAgICAgIH0pLAorCisgICAgICAgICJs
YXN0IjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5n
dGggKSB7CisgICAgICAgICAgICByZXR1cm4gWyBsZW5ndGggLSAxIF07CisgICAgICAgIH0pLAor
CisgICAgICAgICJlcSI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oIG1hdGNoSW5k
ZXhlcywgbGVuZ3RoLCBhcmd1bWVudCApIHsKKyAgICAgICAgICAgIHJldHVybiBbIGFyZ3VtZW50
IDwgMCA/IGFyZ3VtZW50ICsgbGVuZ3RoIDogYXJndW1lbnQgXTsKKyAgICAgICAgfSksCisKKyAg
ICAgICAgImV2ZW4iOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCBtYXRjaEluZGV4
ZXMsIGxlbmd0aCApIHsKKyAgICAgICAgICAgIGZvciAoIHZhciBpID0gMDsgaSA8IGxlbmd0aDsg
aSArPSAyICkgeworICAgICAgICAgICAgICAgIG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbWF0Y2hJbmRleGVzOworICAgICAgICB9KSwK
KworICAgICAgICAib2RkIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbiggbWF0Y2hJ
bmRleGVzLCBsZW5ndGggKSB7CisgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDE7IGkgPCBsZW5n
dGg7IGkgKz0gMiApIHsKKyAgICAgICAgICAgICAgICBtYXRjaEluZGV4ZXMucHVzaCggaSApOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIG1hdGNoSW5kZXhlczsKKyAgICAgICAg
fSksCisKKyAgICAgICAgImx0IjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbiggbWF0
Y2hJbmRleGVzLCBsZW5ndGgsIGFyZ3VtZW50ICkgeworICAgICAgICAgICAgZm9yICggdmFyIGkg
PSBhcmd1bWVudCA8IDAgPyBhcmd1bWVudCArIGxlbmd0aCA6IGFyZ3VtZW50OyAtLWkgPj0gMDsg
KSB7CisgICAgICAgICAgICAgICAgbWF0Y2hJbmRleGVzLnB1c2goIGkgKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHJldHVybiBtYXRjaEluZGV4ZXM7CisgICAgICAgIH0pLAorCisgICAg
ICAgICJndCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywg
bGVuZ3RoLCBhcmd1bWVudCApIHsKKyAgICAgICAgICAgIGZvciAoIHZhciBpID0gYXJndW1lbnQg
PCAwID8gYXJndW1lbnQgKyBsZW5ndGggOiBhcmd1bWVudDsgKytpIDwgbGVuZ3RoOyApIHsKKyAg
ICAgICAgICAgICAgICBtYXRjaEluZGV4ZXMucHVzaCggaSApOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgcmV0dXJuIG1hdGNoSW5kZXhlczsKKyAgICAgICAgfSkKKyAgICB9Cit9OworCitm
dW5jdGlvbiBzaWJsaW5nQ2hlY2soIGEsIGIsIHJldCApIHsKKyAgICBpZiAoIGEgPT09IGIgKSB7
CisgICAgICAgIHJldHVybiByZXQ7CisgICAgfQorCisgICAgdmFyIGN1ciA9IGEubmV4dFNpYmxp
bmc7CisKKyAgICB3aGlsZSAoIGN1ciApIHsKKyAgICAgICAgaWYgKCBjdXIgPT09IGIgKSB7Cisg
ICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKworICAgICAgICBjdXIgPSBjdXIubmV4
dFNpYmxpbmc7CisgICAgfQorCisgICAgcmV0dXJuIDE7Cit9CisKK3NvcnRPcmRlciA9IGRvY0Vs
ZW0uY29tcGFyZURvY3VtZW50UG9zaXRpb24gPworICAgIGZ1bmN0aW9uKCBhLCBiICkgeworICAg
ICAgICBpZiAoIGEgPT09IGIgKSB7CisgICAgICAgICAgICBoYXNEdXBsaWNhdGUgPSB0cnVlOwor
ICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gKCAhYS5j
b21wYXJlRG9jdW1lbnRQb3NpdGlvbiB8fCAhYi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiA/Cisg
ICAgICAgICAgICBhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uIDoKKyAgICAgICAgICAgIGEuY29t
cGFyZURvY3VtZW50UG9zaXRpb24oYikgJiA0CisgICAgICAgICkgPyAtMSA6IDE7CisgICAgfSA6
CisgICAgZnVuY3Rpb24oIGEsIGIgKSB7CisgICAgICAgIC8vIFRoZSBub2RlcyBhcmUgaWRlbnRp
Y2FsLCB3ZSBjYW4gZXhpdCBlYXJseQorICAgICAgICBpZiAoIGEgPT09IGIgKSB7CisgICAgICAg
ICAgICBoYXNEdXBsaWNhdGUgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAg
ICAgLy8gRmFsbGJhY2sgdG8gdXNpbmcgc291cmNlSW5kZXggKGluIElFKSBpZiBpdCdzIGF2YWls
YWJsZSBvbiBib3RoIG5vZGVzCisgICAgICAgIH0gZWxzZSBpZiAoIGEuc291cmNlSW5kZXggJiYg
Yi5zb3VyY2VJbmRleCApIHsKKyAgICAgICAgICAgIHJldHVybiBhLnNvdXJjZUluZGV4IC0gYi5z
b3VyY2VJbmRleDsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBhbCwgYmwsCisgICAgICAgICAg
ICBhcCA9IFtdLAorICAgICAgICAgICAgYnAgPSBbXSwKKyAgICAgICAgICAgIGF1cCA9IGEucGFy
ZW50Tm9kZSwKKyAgICAgICAgICAgIGJ1cCA9IGIucGFyZW50Tm9kZSwKKyAgICAgICAgICAgIGN1
ciA9IGF1cDsKKworICAgICAgICAvLyBJZiB0aGUgbm9kZXMgYXJlIHNpYmxpbmdzIChvciBpZGVu
dGljYWwpIHdlIGNhbiBkbyBhIHF1aWNrIGNoZWNrCisgICAgICAgIGlmICggYXVwID09PSBidXAg
KSB7CisgICAgICAgICAgICByZXR1cm4gc2libGluZ0NoZWNrKCBhLCBiICk7CisKKyAgICAgICAg
Ly8gSWYgbm8gcGFyZW50cyB3ZXJlIGZvdW5kIHRoZW4gdGhlIG5vZGVzIGFyZSBkaXNjb25uZWN0
ZWQKKyAgICAgICAgfSBlbHNlIGlmICggIWF1cCApIHsKKyAgICAgICAgICAgIHJldHVybiAtMTsK
KworICAgICAgICB9IGVsc2UgaWYgKCAhYnVwICkgeworICAgICAgICAgICAgcmV0dXJuIDE7Cisg
ICAgICAgIH0KKworICAgICAgICAvLyBPdGhlcndpc2UgdGhleSdyZSBzb21ld2hlcmUgZWxzZSBp
biB0aGUgdHJlZSBzbyB3ZSBuZWVkCisgICAgICAgIC8vIHRvIGJ1aWxkIHVwIGEgZnVsbCBsaXN0
IG9mIHRoZSBwYXJlbnROb2RlcyBmb3IgY29tcGFyaXNvbgorICAgICAgICB3aGlsZSAoIGN1ciAp
IHsKKyAgICAgICAgICAgIGFwLnVuc2hpZnQoIGN1ciApOworICAgICAgICAgICAgY3VyID0gY3Vy
LnBhcmVudE5vZGU7CisgICAgICAgIH0KKworICAgICAgICBjdXIgPSBidXA7CisKKyAgICAgICAg
d2hpbGUgKCBjdXIgKSB7CisgICAgICAgICAgICBicC51bnNoaWZ0KCBjdXIgKTsKKyAgICAgICAg
ICAgIGN1ciA9IGN1ci5wYXJlbnROb2RlOworICAgICAgICB9CisKKyAgICAgICAgYWwgPSBhcC5s
ZW5ndGg7CisgICAgICAgIGJsID0gYnAubGVuZ3RoOworCisgICAgICAgIC8vIFN0YXJ0IHdhbGtp
bmcgZG93biB0aGUgdHJlZSBsb29raW5nIGZvciBhIGRpc2NyZXBhbmN5CisgICAgICAgIGZvciAo
IHZhciBpID0gMDsgaSA8IGFsICYmIGkgPCBibDsgaSsrICkgeworICAgICAgICAgICAgaWYgKCBh
cFtpXSAhPT0gYnBbaV0gKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHNpYmxpbmdDaGVjaygg
YXBbaV0sIGJwW2ldICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBX
ZSBlbmRlZCBzb21lcGxhY2UgdXAgdGhlIHRyZWUgc28gZG8gYSBzaWJsaW5nIGNoZWNrCisgICAg
ICAgIHJldHVybiBpID09PSBhbCA/CisgICAgICAgICAgICBzaWJsaW5nQ2hlY2soIGEsIGJwW2ld
LCAtMSApIDoKKyAgICAgICAgICAgIHNpYmxpbmdDaGVjayggYXBbaV0sIGIsIDEgKTsKKyAgICB9
OworCisvLyBBbHdheXMgYXNzdW1lIHRoZSBwcmVzZW5jZSBvZiBkdXBsaWNhdGVzIGlmIHNvcnQg
ZG9lc24ndAorLy8gcGFzcyB0aGVtIHRvIG91ciBjb21wYXJpc29uIGZ1bmN0aW9uIChhcyBpbiBH
b29nbGUgQ2hyb21lKS4KK1swLCAwXS5zb3J0KCBzb3J0T3JkZXIgKTsKK2Jhc2VIYXNEdXBsaWNh
dGUgPSAhaGFzRHVwbGljYXRlOworCisvLyBEb2N1bWVudCBzb3J0aW5nIGFuZCByZW1vdmluZyBk
dXBsaWNhdGVzCitTaXp6bGUudW5pcXVlU29ydCA9IGZ1bmN0aW9uKCByZXN1bHRzICkgeworICAg
IHZhciBlbGVtLAorICAgICAgICBkdXBsaWNhdGVzID0gW10sCisgICAgICAgIGkgPSAxLAorICAg
ICAgICBqID0gMDsKKworICAgIGhhc0R1cGxpY2F0ZSA9IGJhc2VIYXNEdXBsaWNhdGU7CisgICAg
cmVzdWx0cy5zb3J0KCBzb3J0T3JkZXIgKTsKKworICAgIGlmICggaGFzRHVwbGljYXRlICkgewor
ICAgICAgICBmb3IgKCA7IChlbGVtID0gcmVzdWx0c1tpXSk7IGkrKyApIHsKKyAgICAgICAgICAg
IGlmICggZWxlbSA9PT0gcmVzdWx0c1sgaSAtIDEgXSApIHsKKyAgICAgICAgICAgICAgICBqID0g
ZHVwbGljYXRlcy5wdXNoKCBpICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
d2hpbGUgKCBqLS0gKSB7CisgICAgICAgICAgICByZXN1bHRzLnNwbGljZSggZHVwbGljYXRlc1sg
aiBdLCAxICk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0czsKK307CisK
K1NpenpsZS5lcnJvciA9IGZ1bmN0aW9uKCBtc2cgKSB7CisgICAgdGhyb3cgbmV3IEVycm9yKCAi
U3ludGF4IGVycm9yLCB1bnJlY29nbml6ZWQgZXhwcmVzc2lvbjogIiArIG1zZyApOworfTsKKwor
ZnVuY3Rpb24gdG9rZW5pemUoIHNlbGVjdG9yLCBwYXJzZU9ubHkgKSB7CisgICAgdmFyIG1hdGNo
ZWQsIG1hdGNoLCB0b2tlbnMsIHR5cGUsCisgICAgICAgIHNvRmFyLCBncm91cHMsIHByZUZpbHRl
cnMsCisgICAgICAgIGNhY2hlZCA9IHRva2VuQ2FjaGVbIGV4cGFuZG8gXVsgc2VsZWN0b3IgKyAi
ICIgXTsKKworICAgIGlmICggY2FjaGVkICkgeworICAgICAgICByZXR1cm4gcGFyc2VPbmx5ID8g
MCA6IGNhY2hlZC5zbGljZSggMCApOworICAgIH0KKworICAgIHNvRmFyID0gc2VsZWN0b3I7Cisg
ICAgZ3JvdXBzID0gW107CisgICAgcHJlRmlsdGVycyA9IEV4cHIucHJlRmlsdGVyOworCisgICAg
d2hpbGUgKCBzb0ZhciApIHsKKworICAgICAgICAvLyBDb21tYSBhbmQgZmlyc3QgcnVuCisgICAg
ICAgIGlmICggIW1hdGNoZWQgfHwgKG1hdGNoID0gcmNvbW1hLmV4ZWMoIHNvRmFyICkpICkgewor
ICAgICAgICAgICAgaWYgKCBtYXRjaCApIHsKKyAgICAgICAgICAgICAgICAvLyBEb24ndCBjb25z
dW1lIHRyYWlsaW5nIGNvbW1hcyBhcyB2YWxpZAorICAgICAgICAgICAgICAgIHNvRmFyID0gc29G
YXIuc2xpY2UoIG1hdGNoWzBdLmxlbmd0aCApIHx8IHNvRmFyOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgZ3JvdXBzLnB1c2goIHRva2VucyA9IFtdICk7CisgICAgICAgIH0KKworICAgICAg
ICBtYXRjaGVkID0gZmFsc2U7CisKKyAgICAgICAgLy8gQ29tYmluYXRvcnMKKyAgICAgICAgaWYg
KCAobWF0Y2ggPSByY29tYmluYXRvcnMuZXhlYyggc29GYXIgKSkgKSB7CisgICAgICAgICAgICB0
b2tlbnMucHVzaCggbWF0Y2hlZCA9IG5ldyBUb2tlbiggbWF0Y2guc2hpZnQoKSApICk7CisgICAg
ICAgICAgICBzb0ZhciA9IHNvRmFyLnNsaWNlKCBtYXRjaGVkLmxlbmd0aCApOworCisgICAgICAg
ICAgICAvLyBDYXN0IGRlc2NlbmRhbnQgY29tYmluYXRvcnMgdG8gc3BhY2UKKyAgICAgICAgICAg
IG1hdGNoZWQudHlwZSA9IG1hdGNoWzBdLnJlcGxhY2UoIHJ0cmltLCAiICIgKTsKKyAgICAgICAg
fQorCisgICAgICAgIC8vIEZpbHRlcnMKKyAgICAgICAgZm9yICggdHlwZSBpbiBFeHByLmZpbHRl
ciApIHsKKyAgICAgICAgICAgIGlmICggKG1hdGNoID0gbWF0Y2hFeHByWyB0eXBlIF0uZXhlYygg
c29GYXIgKSkgJiYgKCFwcmVGaWx0ZXJzWyB0eXBlIF0gfHwKKyAgICAgICAgICAgICAgICAobWF0
Y2ggPSBwcmVGaWx0ZXJzWyB0eXBlIF0oIG1hdGNoICkpKSApIHsKKworICAgICAgICAgICAgICAg
IHRva2Vucy5wdXNoKCBtYXRjaGVkID0gbmV3IFRva2VuKCBtYXRjaC5zaGlmdCgpICkgKTsKKyAg
ICAgICAgICAgICAgICBzb0ZhciA9IHNvRmFyLnNsaWNlKCBtYXRjaGVkLmxlbmd0aCApOworICAg
ICAgICAgICAgICAgIG1hdGNoZWQudHlwZSA9IHR5cGU7CisgICAgICAgICAgICAgICAgbWF0Y2hl
ZC5tYXRjaGVzID0gbWF0Y2g7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoICFtYXRjaGVkICkgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICAvLyBSZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUgaW52YWxpZCBleGNlc3MKKyAgICAvLyBp
ZiB3ZSdyZSBqdXN0IHBhcnNpbmcKKyAgICAvLyBPdGhlcndpc2UsIHRocm93IGFuIGVycm9yIG9y
IHJldHVybiB0b2tlbnMKKyAgICByZXR1cm4gcGFyc2VPbmx5ID8KKyAgICAgICAgc29GYXIubGVu
Z3RoIDoKKyAgICAgICAgc29GYXIgPworICAgICAgICAgICAgU2l6emxlLmVycm9yKCBzZWxlY3Rv
ciApIDoKKyAgICAgICAgICAgIC8vIENhY2hlIHRoZSB0b2tlbnMKKyAgICAgICAgICAgIHRva2Vu
Q2FjaGUoIHNlbGVjdG9yLCBncm91cHMgKS5zbGljZSggMCApOworfQorCitmdW5jdGlvbiBhZGRD
b21iaW5hdG9yKCBtYXRjaGVyLCBjb21iaW5hdG9yLCBiYXNlICkgeworICAgIHZhciBkaXIgPSBj
b21iaW5hdG9yLmRpciwKKyAgICAgICAgY2hlY2tOb25FbGVtZW50cyA9IGJhc2UgJiYgY29tYmlu
YXRvci5kaXIgPT09ICJwYXJlbnROb2RlIiwKKyAgICAgICAgZG9uZU5hbWUgPSBkb25lKys7CisK
KyAgICByZXR1cm4gY29tYmluYXRvci5maXJzdCA/CisgICAgICAgIC8vIENoZWNrIGFnYWluc3Qg
Y2xvc2VzdCBhbmNlc3Rvci9wcmVjZWRpbmcgZWxlbWVudAorICAgICAgICBmdW5jdGlvbiggZWxl
bSwgY29udGV4dCwgeG1sICkgeworICAgICAgICAgICAgd2hpbGUgKCAoZWxlbSA9IGVsZW1bIGRp
ciBdKSApIHsKKyAgICAgICAgICAgICAgICBpZiAoIGNoZWNrTm9uRWxlbWVudHMgfHwgZWxlbS5u
b2RlVHlwZSA9PT0gMSAgKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaGVyKCBl
bGVtLCBjb250ZXh0LCB4bWwgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0gOgorCisgICAgICAgIC8vIENoZWNrIGFnYWluc3QgYWxsIGFuY2VzdG9yL3ByZWNl
ZGluZyBlbGVtZW50cworICAgICAgICBmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkgewor
ICAgICAgICAgICAgLy8gV2UgY2FuJ3Qgc2V0IGFyYml0cmFyeSBkYXRhIG9uIFhNTCBub2Rlcywg
c28gdGhleSBkb24ndCBiZW5lZml0IGZyb20gZGlyIGNhY2hpbmcKKyAgICAgICAgICAgIGlmICgg
IXhtbCApIHsKKyAgICAgICAgICAgICAgICB2YXIgY2FjaGUsCisgICAgICAgICAgICAgICAgICAg
IGRpcmtleSA9IGRpcnJ1bnMgKyAiICIgKyBkb25lTmFtZSArICIgIiwKKyAgICAgICAgICAgICAg
ICAgICAgY2FjaGVka2V5ID0gZGlya2V5ICsgY2FjaGVkcnVuczsKKyAgICAgICAgICAgICAgICB3
aGlsZSAoIChlbGVtID0gZWxlbVsgZGlyIF0pICkgeworICAgICAgICAgICAgICAgICAgICBpZiAo
IGNoZWNrTm9uRWxlbWVudHMgfHwgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICggKGNhY2hlID0gZWxlbVsgZXhwYW5kbyBdKSA9PT0gY2FjaGVka2V5
ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLnNpenNldDsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIHR5cGVvZiBjYWNoZSA9PT0gInN0cmlu
ZyIgJiYgY2FjaGUuaW5kZXhPZihkaXJrZXkpID09PSAwICkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggZWxlbS5zaXpzZXQgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBlbGVtOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZWxlbVsgZXhwYW5kbyBdID0gY2FjaGVka2V5OworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICggbWF0Y2hlciggZWxlbSwgY29udGV4dCwgeG1sICkgKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGVsZW0uc2l6c2V0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGVsZW07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uc2l6c2V0ID0gZmFsc2U7CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHdoaWxlICggKGVsZW0g
PSBlbGVtWyBkaXIgXSkgKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICggY2hlY2tOb25FbGVt
ZW50cyB8fCBlbGVtLm5vZGVUeXBlID09PSAxICkgeworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCBtYXRjaGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKSApIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZWxlbTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfTsKK30KKworZnVuY3Rpb24gZWxlbWVudE1hdGNoZXIoIG1hdGNoZXJzICkgeworICAgIHJl
dHVybiBtYXRjaGVycy5sZW5ndGggPiAxID8KKyAgICAgICAgZnVuY3Rpb24oIGVsZW0sIGNvbnRl
eHQsIHhtbCApIHsKKyAgICAgICAgICAgIHZhciBpID0gbWF0Y2hlcnMubGVuZ3RoOworICAgICAg
ICAgICAgd2hpbGUgKCBpLS0gKSB7CisgICAgICAgICAgICAgICAgaWYgKCAhbWF0Y2hlcnNbaV0o
IGVsZW0sIGNvbnRleHQsIHhtbCApICkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0gOgorICAgICAgICBtYXRjaGVyc1swXTsKK30KKworZnVuY3Rpb24g
Y29uZGVuc2UoIHVubWF0Y2hlZCwgbWFwLCBmaWx0ZXIsIGNvbnRleHQsIHhtbCApIHsKKyAgICB2
YXIgZWxlbSwKKyAgICAgICAgbmV3VW5tYXRjaGVkID0gW10sCisgICAgICAgIGkgPSAwLAorICAg
ICAgICBsZW4gPSB1bm1hdGNoZWQubGVuZ3RoLAorICAgICAgICBtYXBwZWQgPSBtYXAgIT0gbnVs
bDsKKworICAgIGZvciAoIDsgaSA8IGxlbjsgaSsrICkgeworICAgICAgICBpZiAoIChlbGVtID0g
dW5tYXRjaGVkW2ldKSApIHsKKyAgICAgICAgICAgIGlmICggIWZpbHRlciB8fCBmaWx0ZXIoIGVs
ZW0sIGNvbnRleHQsIHhtbCApICkgeworICAgICAgICAgICAgICAgIG5ld1VubWF0Y2hlZC5wdXNo
KCBlbGVtICk7CisgICAgICAgICAgICAgICAgaWYgKCBtYXBwZWQgKSB7CisgICAgICAgICAgICAg
ICAgICAgIG1hcC5wdXNoKCBpICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIG5ld1VubWF0Y2hlZDsKK30KKworZnVuY3Rp
b24gc2V0TWF0Y2hlciggcHJlRmlsdGVyLCBzZWxlY3RvciwgbWF0Y2hlciwgcG9zdEZpbHRlciwg
cG9zdEZpbmRlciwgcG9zdFNlbGVjdG9yICkgeworICAgIGlmICggcG9zdEZpbHRlciAmJiAhcG9z
dEZpbHRlclsgZXhwYW5kbyBdICkgeworICAgICAgICBwb3N0RmlsdGVyID0gc2V0TWF0Y2hlcigg
cG9zdEZpbHRlciApOworICAgIH0KKyAgICBpZiAoIHBvc3RGaW5kZXIgJiYgIXBvc3RGaW5kZXJb
IGV4cGFuZG8gXSApIHsKKyAgICAgICAgcG9zdEZpbmRlciA9IHNldE1hdGNoZXIoIHBvc3RGaW5k
ZXIsIHBvc3RTZWxlY3RvciApOworICAgIH0KKyAgICByZXR1cm4gbWFya0Z1bmN0aW9uKGZ1bmN0
aW9uKCBzZWVkLCByZXN1bHRzLCBjb250ZXh0LCB4bWwgKSB7CisgICAgICAgIHZhciB0ZW1wLCBp
LCBlbGVtLAorICAgICAgICAgICAgcHJlTWFwID0gW10sCisgICAgICAgICAgICBwb3N0TWFwID0g
W10sCisgICAgICAgICAgICBwcmVleGlzdGluZyA9IHJlc3VsdHMubGVuZ3RoLAorCisgICAgICAg
ICAgICAvLyBHZXQgaW5pdGlhbCBlbGVtZW50cyBmcm9tIHNlZWQgb3IgY29udGV4dAorICAgICAg
ICAgICAgZWxlbXMgPSBzZWVkIHx8IG11bHRpcGxlQ29udGV4dHMoIHNlbGVjdG9yIHx8ICIqIiwg
Y29udGV4dC5ub2RlVHlwZSA/IFsgY29udGV4dCBdIDogY29udGV4dCwgW10gKSwKKworICAgICAg
ICAgICAgLy8gUHJlZmlsdGVyIHRvIGdldCBtYXRjaGVyIGlucHV0LCBwcmVzZXJ2aW5nIGEgbWFw
IGZvciBzZWVkLXJlc3VsdHMgc3luY2hyb25pemF0aW9uCisgICAgICAgICAgICBtYXRjaGVySW4g
PSBwcmVGaWx0ZXIgJiYgKCBzZWVkIHx8ICFzZWxlY3RvciApID8KKyAgICAgICAgICAgICAgICBj
b25kZW5zZSggZWxlbXMsIHByZU1hcCwgcHJlRmlsdGVyLCBjb250ZXh0LCB4bWwgKSA6CisgICAg
ICAgICAgICAgICAgZWxlbXMsCisKKyAgICAgICAgICAgIG1hdGNoZXJPdXQgPSBtYXRjaGVyID8K
KyAgICAgICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgcG9zdEZpbmRlciwgb3IgZmlsdGVyZWQg
c2VlZCwgb3Igbm9uLXNlZWQgcG9zdEZpbHRlciBvciBwcmVleGlzdGluZyByZXN1bHRzLAorICAg
ICAgICAgICAgICAgIHBvc3RGaW5kZXIgfHwgKCBzZWVkID8gcHJlRmlsdGVyIDogcHJlZXhpc3Rp
bmcgfHwgcG9zdEZpbHRlciApID8KKworICAgICAgICAgICAgICAgICAgICAvLyAuLi5pbnRlcm1l
ZGlhdGUgcHJvY2Vzc2luZyBpcyBuZWNlc3NhcnkKKyAgICAgICAgICAgICAgICAgICAgW10gOgor
CisgICAgICAgICAgICAgICAgICAgIC8vIC4uLm90aGVyd2lzZSB1c2UgcmVzdWx0cyBkaXJlY3Rs
eQorICAgICAgICAgICAgICAgICAgICByZXN1bHRzIDoKKyAgICAgICAgICAgICAgICBtYXRjaGVy
SW47CisKKyAgICAgICAgLy8gRmluZCBwcmltYXJ5IG1hdGNoZXMKKyAgICAgICAgaWYgKCBtYXRj
aGVyICkgeworICAgICAgICAgICAgbWF0Y2hlciggbWF0Y2hlckluLCBtYXRjaGVyT3V0LCBjb250
ZXh0LCB4bWwgKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEFwcGx5IHBvc3RGaWx0ZXIKKyAg
ICAgICAgaWYgKCBwb3N0RmlsdGVyICkgeworICAgICAgICAgICAgdGVtcCA9IGNvbmRlbnNlKCBt
YXRjaGVyT3V0LCBwb3N0TWFwICk7CisgICAgICAgICAgICBwb3N0RmlsdGVyKCB0ZW1wLCBbXSwg
Y29udGV4dCwgeG1sICk7CisKKyAgICAgICAgICAgIC8vIFVuLW1hdGNoIGZhaWxpbmcgZWxlbWVu
dHMgYnkgbW92aW5nIHRoZW0gYmFjayB0byBtYXRjaGVySW4KKyAgICAgICAgICAgIGkgPSB0ZW1w
Lmxlbmd0aDsKKyAgICAgICAgICAgIHdoaWxlICggaS0tICkgeworICAgICAgICAgICAgICAgIGlm
ICggKGVsZW0gPSB0ZW1wW2ldKSApIHsKKyAgICAgICAgICAgICAgICAgICAgbWF0Y2hlck91dFsg
cG9zdE1hcFtpXSBdID0gIShtYXRjaGVySW5bIHBvc3RNYXBbaV0gXSA9IGVsZW0pOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICggc2Vl
ZCApIHsKKyAgICAgICAgICAgIGlmICggcG9zdEZpbmRlciB8fCBwcmVGaWx0ZXIgKSB7CisgICAg
ICAgICAgICAgICAgaWYgKCBwb3N0RmluZGVyICkgeworICAgICAgICAgICAgICAgICAgICAvLyBH
ZXQgdGhlIGZpbmFsIG1hdGNoZXJPdXQgYnkgY29uZGVuc2luZyB0aGlzIGludGVybWVkaWF0ZSBp
bnRvIHBvc3RGaW5kZXIgY29udGV4dHMKKyAgICAgICAgICAgICAgICAgICAgdGVtcCA9IFtdOwor
ICAgICAgICAgICAgICAgICAgICBpID0gbWF0Y2hlck91dC5sZW5ndGg7CisgICAgICAgICAgICAg
ICAgICAgIHdoaWxlICggaS0tICkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAoZWxl
bSA9IG1hdGNoZXJPdXRbaV0pICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJl
c3RvcmUgbWF0Y2hlckluIHNpbmNlIGVsZW0gaXMgbm90IHlldCBhIGZpbmFsIG1hdGNoCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGVtcC5wdXNoKCAobWF0Y2hlckluW2ldID0gZWxlbSkg
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICBwb3N0RmluZGVyKCBudWxsLCAobWF0Y2hlck91dCA9IFtdKSwgdGVt
cCwgeG1sICk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gTW92ZSBt
YXRjaGVkIGVsZW1lbnRzIGZyb20gc2VlZCB0byByZXN1bHRzIHRvIGtlZXAgdGhlbSBzeW5jaHJv
bml6ZWQKKyAgICAgICAgICAgICAgICBpID0gbWF0Y2hlck91dC5sZW5ndGg7CisgICAgICAgICAg
ICAgICAgd2hpbGUgKCBpLS0gKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICggKGVsZW0gPSBt
YXRjaGVyT3V0W2ldKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgKHRlbXAgPSBwb3N0Rmlu
ZGVyID8gaW5kZXhPZi5jYWxsKCBzZWVkLCBlbGVtICkgOiBwcmVNYXBbaV0pID4gLTEgKSB7CisK
KyAgICAgICAgICAgICAgICAgICAgICAgIHNlZWRbdGVtcF0gPSAhKHJlc3VsdHNbdGVtcF0gPSBl
bGVtKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKworICAgICAgICAvLyBBZGQgZWxlbWVudHMgdG8gcmVzdWx0cywgdGhyb3VnaCBwb3N0
RmluZGVyIGlmIGRlZmluZWQKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1hdGNoZXJP
dXQgPSBjb25kZW5zZSgKKyAgICAgICAgICAgICAgICBtYXRjaGVyT3V0ID09PSByZXN1bHRzID8K
KyAgICAgICAgICAgICAgICAgICAgbWF0Y2hlck91dC5zcGxpY2UoIHByZWV4aXN0aW5nLCBtYXRj
aGVyT3V0Lmxlbmd0aCApIDoKKyAgICAgICAgICAgICAgICAgICAgbWF0Y2hlck91dAorICAgICAg
ICAgICAgKTsKKyAgICAgICAgICAgIGlmICggcG9zdEZpbmRlciApIHsKKyAgICAgICAgICAgICAg
ICBwb3N0RmluZGVyKCBudWxsLCByZXN1bHRzLCBtYXRjaGVyT3V0LCB4bWwgKTsKKyAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcHVzaC5hcHBseSggcmVzdWx0cywgbWF0Y2hl
ck91dCApOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSk7Cit9CisKK2Z1bmN0aW9u
IG1hdGNoZXJGcm9tVG9rZW5zKCB0b2tlbnMgKSB7CisgICAgdmFyIGNoZWNrQ29udGV4dCwgbWF0
Y2hlciwgaiwKKyAgICAgICAgbGVuID0gdG9rZW5zLmxlbmd0aCwKKyAgICAgICAgbGVhZGluZ1Jl
bGF0aXZlID0gRXhwci5yZWxhdGl2ZVsgdG9rZW5zWzBdLnR5cGUgXSwKKyAgICAgICAgaW1wbGlj
aXRSZWxhdGl2ZSA9IGxlYWRpbmdSZWxhdGl2ZSB8fCBFeHByLnJlbGF0aXZlWyIgIl0sCisgICAg
ICAgIGkgPSBsZWFkaW5nUmVsYXRpdmUgPyAxIDogMCwKKworICAgICAgICAvLyBUaGUgZm91bmRh
dGlvbmFsIG1hdGNoZXIgZW5zdXJlcyB0aGF0IGVsZW1lbnRzIGFyZSByZWFjaGFibGUgZnJvbSB0
b3AtbGV2ZWwgY29udGV4dChzKQorICAgICAgICBtYXRjaENvbnRleHQgPSBhZGRDb21iaW5hdG9y
KCBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgIHJldHVybiBlbGVtID09PSBjaGVja0Nv
bnRleHQ7CisgICAgICAgIH0sIGltcGxpY2l0UmVsYXRpdmUsIHRydWUgKSwKKyAgICAgICAgbWF0
Y2hBbnlDb250ZXh0ID0gYWRkQ29tYmluYXRvciggZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAg
ICAgICByZXR1cm4gaW5kZXhPZi5jYWxsKCBjaGVja0NvbnRleHQsIGVsZW0gKSA+IC0xOworICAg
ICAgICB9LCBpbXBsaWNpdFJlbGF0aXZlLCB0cnVlICksCisgICAgICAgIG1hdGNoZXJzID0gWyBm
dW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkgeworICAgICAgICAgICAgcmV0dXJuICggIWxl
YWRpbmdSZWxhdGl2ZSAmJiAoIHhtbCB8fCBjb250ZXh0ICE9PSBvdXRlcm1vc3RDb250ZXh0ICkg
KSB8fCAoCisgICAgICAgICAgICAgICAgKGNoZWNrQ29udGV4dCA9IGNvbnRleHQpLm5vZGVUeXBl
ID8KKyAgICAgICAgICAgICAgICAgICAgbWF0Y2hDb250ZXh0KCBlbGVtLCBjb250ZXh0LCB4bWwg
KSA6CisgICAgICAgICAgICAgICAgICAgIG1hdGNoQW55Q29udGV4dCggZWxlbSwgY29udGV4dCwg
eG1sICkgKTsKKyAgICAgICAgfSBdOworCisgICAgZm9yICggOyBpIDwgbGVuOyBpKysgKSB7Cisg
ICAgICAgIGlmICggKG1hdGNoZXIgPSBFeHByLnJlbGF0aXZlWyB0b2tlbnNbaV0udHlwZSBdKSAp
IHsKKyAgICAgICAgICAgIG1hdGNoZXJzID0gWyBhZGRDb21iaW5hdG9yKCBlbGVtZW50TWF0Y2hl
ciggbWF0Y2hlcnMgKSwgbWF0Y2hlciApIF07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBtYXRjaGVyID0gRXhwci5maWx0ZXJbIHRva2Vuc1tpXS50eXBlIF0uYXBwbHkoIG51bGwsIHRv
a2Vuc1tpXS5tYXRjaGVzICk7CisKKyAgICAgICAgICAgIC8vIFJldHVybiBzcGVjaWFsIHVwb24g
c2VlaW5nIGEgcG9zaXRpb25hbCBtYXRjaGVyCisgICAgICAgICAgICBpZiAoIG1hdGNoZXJbIGV4
cGFuZG8gXSApIHsKKyAgICAgICAgICAgICAgICAvLyBGaW5kIHRoZSBuZXh0IHJlbGF0aXZlIG9w
ZXJhdG9yIChpZiBhbnkpIGZvciBwcm9wZXIgaGFuZGxpbmcKKyAgICAgICAgICAgICAgICBqID0g
KytpOworICAgICAgICAgICAgICAgIGZvciAoIDsgaiA8IGxlbjsgaisrICkgeworICAgICAgICAg
ICAgICAgICAgICBpZiAoIEV4cHIucmVsYXRpdmVbIHRva2Vuc1tqXS50eXBlIF0gKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gc2V0TWF0Y2hlcigKKyAgICAgICAg
ICAgICAgICAgICAgaSA+IDEgJiYgZWxlbWVudE1hdGNoZXIoIG1hdGNoZXJzICksCisgICAgICAg
ICAgICAgICAgICAgIGkgPiAxICYmIHRva2Vucy5zbGljZSggMCwgaSAtIDEgKS5qb2luKCIiKS5y
ZXBsYWNlKCBydHJpbSwgIiQxIiApLAorICAgICAgICAgICAgICAgICAgICBtYXRjaGVyLAorICAg
ICAgICAgICAgICAgICAgICBpIDwgaiAmJiBtYXRjaGVyRnJvbVRva2VucyggdG9rZW5zLnNsaWNl
KCBpLCBqICkgKSwKKyAgICAgICAgICAgICAgICAgICAgaiA8IGxlbiAmJiBtYXRjaGVyRnJvbVRv
a2VucyggKHRva2VucyA9IHRva2Vucy5zbGljZSggaiApKSApLAorICAgICAgICAgICAgICAgICAg
ICBqIDwgbGVuICYmIHRva2Vucy5qb2luKCIiKQorICAgICAgICAgICAgICAgICk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBtYXRjaGVycy5wdXNoKCBtYXRjaGVyICk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICByZXR1cm4gZWxlbWVudE1hdGNoZXIoIG1hdGNoZXJzICk7Cit9CisKK2Z1
bmN0aW9uIG1hdGNoZXJGcm9tR3JvdXBNYXRjaGVycyggZWxlbWVudE1hdGNoZXJzLCBzZXRNYXRj
aGVycyApIHsKKyAgICB2YXIgYnlTZXQgPSBzZXRNYXRjaGVycy5sZW5ndGggPiAwLAorICAgICAg
ICBieUVsZW1lbnQgPSBlbGVtZW50TWF0Y2hlcnMubGVuZ3RoID4gMCwKKyAgICAgICAgc3VwZXJN
YXRjaGVyID0gZnVuY3Rpb24oIHNlZWQsIGNvbnRleHQsIHhtbCwgcmVzdWx0cywgZXhwYW5kQ29u
dGV4dCApIHsKKyAgICAgICAgICAgIHZhciBlbGVtLCBqLCBtYXRjaGVyLAorICAgICAgICAgICAg
ICAgIHNldE1hdGNoZWQgPSBbXSwKKyAgICAgICAgICAgICAgICBtYXRjaGVkQ291bnQgPSAwLAor
ICAgICAgICAgICAgICAgIGkgPSAiMCIsCisgICAgICAgICAgICAgICAgdW5tYXRjaGVkID0gc2Vl
ZCAmJiBbXSwKKyAgICAgICAgICAgICAgICBvdXRlcm1vc3QgPSBleHBhbmRDb250ZXh0ICE9IG51
bGwsCisgICAgICAgICAgICAgICAgY29udGV4dEJhY2t1cCA9IG91dGVybW9zdENvbnRleHQsCisg
ICAgICAgICAgICAgICAgLy8gV2UgbXVzdCBhbHdheXMgaGF2ZSBlaXRoZXIgc2VlZCBlbGVtZW50
cyBvciBjb250ZXh0CisgICAgICAgICAgICAgICAgZWxlbXMgPSBzZWVkIHx8IGJ5RWxlbWVudCAm
JiBFeHByLmZpbmRbIlRBRyJdKCAiKiIsIGV4cGFuZENvbnRleHQgJiYgY29udGV4dC5wYXJlbnRO
b2RlIHx8IGNvbnRleHQgKSwKKyAgICAgICAgICAgICAgICAvLyBOZXN0ZWQgbWF0Y2hlcnMgc2hv
dWxkIHVzZSBub24taW50ZWdlciBkaXJydW5zCisgICAgICAgICAgICAgICAgZGlycnVuc1VuaXF1
ZSA9IChkaXJydW5zICs9IGNvbnRleHRCYWNrdXAgPT0gbnVsbCA/IDEgOiBNYXRoLkUpOworCisg
ICAgICAgICAgICBpZiAoIG91dGVybW9zdCApIHsKKyAgICAgICAgICAgICAgICBvdXRlcm1vc3RD
b250ZXh0ID0gY29udGV4dCAhPT0gZG9jdW1lbnQgJiYgY29udGV4dDsKKyAgICAgICAgICAgICAg
ICBjYWNoZWRydW5zID0gc3VwZXJNYXRjaGVyLmVsOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAvLyBBZGQgZWxlbWVudHMgcGFzc2luZyBlbGVtZW50TWF0Y2hlcnMgZGlyZWN0bHkgdG8g
cmVzdWx0cworICAgICAgICAgICAgZm9yICggOyAoZWxlbSA9IGVsZW1zW2ldKSAhPSBudWxsOyBp
KysgKSB7CisgICAgICAgICAgICAgICAgaWYgKCBieUVsZW1lbnQgJiYgZWxlbSApIHsKKyAgICAg
ICAgICAgICAgICAgICAgZm9yICggaiA9IDA7IChtYXRjaGVyID0gZWxlbWVudE1hdGNoZXJzW2pd
KTsgaisrICkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBtYXRjaGVyKCBlbGVtLCBj
b250ZXh0LCB4bWwgKSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzLnB1
c2goIGVsZW0gKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICBpZiAoIG91dGVybW9zdCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpcnJ1bnMg
PSBkaXJydW5zVW5pcXVlOworICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVkcnVucyA9ICsr
c3VwZXJNYXRjaGVyLmVsOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgLy8gVHJhY2sgdW5tYXRjaGVkIGVsZW1lbnRzIGZvciBzZXQg
ZmlsdGVycworICAgICAgICAgICAgICAgIGlmICggYnlTZXQgKSB7CisgICAgICAgICAgICAgICAg
ICAgIC8vIFRoZXkgd2lsbCBoYXZlIGdvbmUgdGhyb3VnaCBhbGwgcG9zc2libGUgbWF0Y2hlcnMK
KyAgICAgICAgICAgICAgICAgICAgaWYgKCAoZWxlbSA9ICFtYXRjaGVyICYmIGVsZW0pICkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hlZENvdW50LS07CisgICAgICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgICAgICAvLyBMZW5ndGhlbiB0aGUgYXJyYXkgZm9yIGV2
ZXJ5IGVsZW1lbnQsIG1hdGNoZWQgb3Igbm90CisgICAgICAgICAgICAgICAgICAgIGlmICggc2Vl
ZCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVubWF0Y2hlZC5wdXNoKCBlbGVtICk7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIC8vIEFwcGx5IHNldCBmaWx0ZXJzIHRvIHVubWF0Y2hlZCBlbGVtZW50cwor
ICAgICAgICAgICAgbWF0Y2hlZENvdW50ICs9IGk7CisgICAgICAgICAgICBpZiAoIGJ5U2V0ICYm
IGkgIT09IG1hdGNoZWRDb3VudCApIHsKKyAgICAgICAgICAgICAgICBmb3IgKCBqID0gMDsgKG1h
dGNoZXIgPSBzZXRNYXRjaGVyc1tqXSk7IGorKyApIHsKKyAgICAgICAgICAgICAgICAgICAgbWF0
Y2hlciggdW5tYXRjaGVkLCBzZXRNYXRjaGVkLCBjb250ZXh0LCB4bWwgKTsKKyAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoIHNlZWQgKSB7CisgICAgICAgICAgICAgICAg
ICAgIC8vIFJlaW50ZWdyYXRlIGVsZW1lbnQgbWF0Y2hlcyB0byBlbGltaW5hdGUgdGhlIG5lZWQg
Zm9yIHNvcnRpbmcKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBtYXRjaGVkQ291bnQgPiAwICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCBpLS0gKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCAhKHVubWF0Y2hlZFtpXSB8fCBzZXRNYXRjaGVkW2ldKSApIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0TWF0Y2hlZFtpXSA9IHBvcC5jYWxs
KCByZXN1bHRzICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAg
ICAgLy8gRGlzY2FyZCBpbmRleCBwbGFjZWhvbGRlciB2YWx1ZXMgdG8gZ2V0IG9ubHkgYWN0dWFs
IG1hdGNoZXMKKyAgICAgICAgICAgICAgICAgICAgc2V0TWF0Y2hlZCA9IGNvbmRlbnNlKCBzZXRN
YXRjaGVkICk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gQWRkIG1h
dGNoZXMgdG8gcmVzdWx0cworICAgICAgICAgICAgICAgIHB1c2guYXBwbHkoIHJlc3VsdHMsIHNl
dE1hdGNoZWQgKTsKKworICAgICAgICAgICAgICAgIC8vIFNlZWRsZXNzIHNldCBtYXRjaGVzIHN1
Y2NlZWRpbmcgbXVsdGlwbGUgc3VjY2Vzc2Z1bCBtYXRjaGVycyBzdGlwdWxhdGUgc29ydGluZwor
ICAgICAgICAgICAgICAgIGlmICggb3V0ZXJtb3N0ICYmICFzZWVkICYmIHNldE1hdGNoZWQubGVu
Z3RoID4gMCAmJgorICAgICAgICAgICAgICAgICAgICAoIG1hdGNoZWRDb3VudCArIHNldE1hdGNo
ZXJzLmxlbmd0aCApID4gMSApIHsKKworICAgICAgICAgICAgICAgICAgICBTaXp6bGUudW5pcXVl
U29ydCggcmVzdWx0cyApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgLy8gT3ZlcnJpZGUgbWFuaXB1bGF0aW9uIG9mIGdsb2JhbHMgYnkgbmVzdGVkIG1h
dGNoZXJzCisgICAgICAgICAgICBpZiAoIG91dGVybW9zdCApIHsKKyAgICAgICAgICAgICAgICBk
aXJydW5zID0gZGlycnVuc1VuaXF1ZTsKKyAgICAgICAgICAgICAgICBvdXRlcm1vc3RDb250ZXh0
ID0gY29udGV4dEJhY2t1cDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIHVu
bWF0Y2hlZDsKKyAgICAgICAgfTsKKworICAgIHN1cGVyTWF0Y2hlci5lbCA9IDA7CisgICAgcmV0
dXJuIGJ5U2V0ID8KKyAgICAgICAgbWFya0Z1bmN0aW9uKCBzdXBlck1hdGNoZXIgKSA6CisgICAg
ICAgIHN1cGVyTWF0Y2hlcjsKK30KKworY29tcGlsZSA9IFNpenpsZS5jb21waWxlID0gZnVuY3Rp
b24oIHNlbGVjdG9yLCBncm91cCAvKiBJbnRlcm5hbCBVc2UgT25seSAqLyApIHsKKyAgICB2YXIg
aSwKKyAgICAgICAgc2V0TWF0Y2hlcnMgPSBbXSwKKyAgICAgICAgZWxlbWVudE1hdGNoZXJzID0g
W10sCisgICAgICAgIGNhY2hlZCA9IGNvbXBpbGVyQ2FjaGVbIGV4cGFuZG8gXVsgc2VsZWN0b3Ig
KyAiICIgXTsKKworICAgIGlmICggIWNhY2hlZCApIHsKKyAgICAgICAgLy8gR2VuZXJhdGUgYSBm
dW5jdGlvbiBvZiByZWN1cnNpdmUgZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHVzZWQgdG8gY2hlY2sg
ZWFjaCBlbGVtZW50CisgICAgICAgIGlmICggIWdyb3VwICkgeworICAgICAgICAgICAgZ3JvdXAg
PSB0b2tlbml6ZSggc2VsZWN0b3IgKTsKKyAgICAgICAgfQorICAgICAgICBpID0gZ3JvdXAubGVu
Z3RoOworICAgICAgICB3aGlsZSAoIGktLSApIHsKKyAgICAgICAgICAgIGNhY2hlZCA9IG1hdGNo
ZXJGcm9tVG9rZW5zKCBncm91cFtpXSApOworICAgICAgICAgICAgaWYgKCBjYWNoZWRbIGV4cGFu
ZG8gXSApIHsKKyAgICAgICAgICAgICAgICBzZXRNYXRjaGVycy5wdXNoKCBjYWNoZWQgKTsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZWxlbWVudE1hdGNoZXJzLnB1c2go
IGNhY2hlZCApOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gQ2FjaGUg
dGhlIGNvbXBpbGVkIGZ1bmN0aW9uCisgICAgICAgIGNhY2hlZCA9IGNvbXBpbGVyQ2FjaGUoIHNl
bGVjdG9yLCBtYXRjaGVyRnJvbUdyb3VwTWF0Y2hlcnMoIGVsZW1lbnRNYXRjaGVycywgc2V0TWF0
Y2hlcnMgKSApOworICAgIH0KKyAgICByZXR1cm4gY2FjaGVkOworfTsKKworZnVuY3Rpb24gbXVs
dGlwbGVDb250ZXh0cyggc2VsZWN0b3IsIGNvbnRleHRzLCByZXN1bHRzICkgeworICAgIHZhciBp
ID0gMCwKKyAgICAgICAgbGVuID0gY29udGV4dHMubGVuZ3RoOworICAgIGZvciAoIDsgaSA8IGxl
bjsgaSsrICkgeworICAgICAgICBTaXp6bGUoIHNlbGVjdG9yLCBjb250ZXh0c1tpXSwgcmVzdWx0
cyApOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0czsKK30KKworZnVuY3Rpb24gc2VsZWN0KCBz
ZWxlY3RvciwgY29udGV4dCwgcmVzdWx0cywgc2VlZCwgeG1sICkgeworICAgIHZhciBpLCB0b2tl
bnMsIHRva2VuLCB0eXBlLCBmaW5kLAorICAgICAgICBtYXRjaCA9IHRva2VuaXplKCBzZWxlY3Rv
ciApLAorICAgICAgICBqID0gbWF0Y2gubGVuZ3RoOworCisgICAgaWYgKCAhc2VlZCApIHsKKyAg
ICAgICAgLy8gVHJ5IHRvIG1pbmltaXplIG9wZXJhdGlvbnMgaWYgdGhlcmUgaXMgb25seSBvbmUg
Z3JvdXAKKyAgICAgICAgaWYgKCBtYXRjaC5sZW5ndGggPT09IDEgKSB7CisKKyAgICAgICAgICAg
IC8vIFRha2UgYSBzaG9ydGN1dCBhbmQgc2V0IHRoZSBjb250ZXh0IGlmIHRoZSByb290IHNlbGVj
dG9yIGlzIGFuIElECisgICAgICAgICAgICB0b2tlbnMgPSBtYXRjaFswXSA9IG1hdGNoWzBdLnNs
aWNlKCAwICk7CisgICAgICAgICAgICBpZiAoIHRva2Vucy5sZW5ndGggPiAyICYmICh0b2tlbiA9
IHRva2Vuc1swXSkudHlwZSA9PT0gIklEIiAmJgorICAgICAgICAgICAgICAgICAgICBjb250ZXh0
Lm5vZGVUeXBlID09PSA5ICYmICF4bWwgJiYKKyAgICAgICAgICAgICAgICAgICAgRXhwci5yZWxh
dGl2ZVsgdG9rZW5zWzFdLnR5cGUgXSApIHsKKworICAgICAgICAgICAgICAgIGNvbnRleHQgPSBF
eHByLmZpbmRbIklEIl0oIHRva2VuLm1hdGNoZXNbMF0ucmVwbGFjZSggcmJhY2tzbGFzaCwgIiIg
KSwgY29udGV4dCwgeG1sIClbMF07CisgICAgICAgICAgICAgICAgaWYgKCAhY29udGV4dCApIHsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7CisgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgc2VsZWN0b3IgPSBzZWxlY3Rvci5zbGljZSggdG9rZW5zLnNoaWZ0
KCkubGVuZ3RoICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEZldGNoIGEgc2Vl
ZCBzZXQgZm9yIHJpZ2h0LXRvLWxlZnQgbWF0Y2hpbmcKKyAgICAgICAgICAgIGZvciAoIGkgPSBt
YXRjaEV4cHJbIlBPUyJdLnRlc3QoIHNlbGVjdG9yICkgPyAtMSA6IHRva2Vucy5sZW5ndGggLSAx
OyBpID49IDA7IGktLSApIHsKKyAgICAgICAgICAgICAgICB0b2tlbiA9IHRva2Vuc1tpXTsKKwor
ICAgICAgICAgICAgICAgIC8vIEFib3J0IGlmIHdlIGhpdCBhIGNvbWJpbmF0b3IKKyAgICAgICAg
ICAgICAgICBpZiAoIEV4cHIucmVsYXRpdmVbICh0eXBlID0gdG9rZW4udHlwZSkgXSApIHsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGlmICggKGZpbmQgPSBFeHByLmZpbmRbIHR5cGUgXSkgKSB7CisgICAgICAgICAgICAgICAg
ICAgIC8vIFNlYXJjaCwgZXhwYW5kaW5nIGNvbnRleHQgZm9yIGxlYWRpbmcgc2libGluZyBjb21i
aW5hdG9ycworICAgICAgICAgICAgICAgICAgICBpZiAoIChzZWVkID0gZmluZCgKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHRva2VuLm1hdGNoZXNbMF0ucmVwbGFjZSggcmJhY2tzbGFzaCwgIiIg
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJzaWJsaW5nLnRlc3QoIHRva2Vuc1swXS50eXBl
ICkgJiYgY29udGV4dC5wYXJlbnROb2RlIHx8IGNvbnRleHQsCisgICAgICAgICAgICAgICAgICAg
ICAgICB4bWwKKyAgICAgICAgICAgICAgICAgICAgKSkgKSB7CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIElmIHNlZWQgaXMgZW1wdHkgb3Igbm8gdG9rZW5zIHJlbWFpbiwgd2UgY2FuIHJl
dHVybiBlYXJseQorICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW5zLnNwbGljZSggaSwgMSAp
OworICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3IgPSBzZWVkLmxlbmd0aCAmJiB0b2tl
bnMuam9pbigiIik7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFzZWxlY3RvciApIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoLmFwcGx5KCByZXN1bHRzLCBzbGljZS5j
YWxsKCBzZWVkLCAwICkgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVz
dWx0czsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBDb21waWxlIGFuZCBleGVjdXRl
IGEgZmlsdGVyaW5nIGZ1bmN0aW9uCisgICAgLy8gUHJvdmlkZSBgbWF0Y2hgIHRvIGF2b2lkIHJl
dG9rZW5pemF0aW9uIGlmIHdlIG1vZGlmaWVkIHRoZSBzZWxlY3RvciBhYm92ZQorICAgIGNvbXBp
bGUoIHNlbGVjdG9yLCBtYXRjaCApKAorICAgICAgICBzZWVkLAorICAgICAgICBjb250ZXh0LAor
ICAgICAgICB4bWwsCisgICAgICAgIHJlc3VsdHMsCisgICAgICAgIHJzaWJsaW5nLnRlc3QoIHNl
bGVjdG9yICkKKyAgICApOworICAgIHJldHVybiByZXN1bHRzOworfQorCitpZiAoIGRvY3VtZW50
LnF1ZXJ5U2VsZWN0b3JBbGwgKSB7CisgICAgKGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgZGlz
Y29ubmVjdGVkTWF0Y2gsCisgICAgICAgICAgICBvbGRTZWxlY3QgPSBzZWxlY3QsCisgICAgICAg
ICAgICByZXNjYXBlID0gLyd8XFwvZywKKyAgICAgICAgICAgIHJhdHRyaWJ1dGVRdW90ZXMgPSAv
XD1bXHgyMFx0XHJcblxmXSooW14nIlxdXSopW1x4MjBcdFxyXG5cZl0qXF0vZywKKworICAgICAg
ICAgICAgLy8gcVNhKDpmb2N1cykgcmVwb3J0cyBmYWxzZSB3aGVuIHRydWUgKENocm9tZSAyMSks
IG5vIG5lZWQgdG8gYWxzbyBhZGQgdG8gYnVnZ3lNYXRjaGVzIHNpbmNlIG1hdGNoZXMgY2hlY2tz
IGJ1Z2d5UVNBCisgICAgICAgICAgICAvLyBBIHN1cHBvcnQgdGVzdCB3b3VsZCByZXF1aXJlIHRv
byBtdWNoIGNvZGUgKHdvdWxkIGluY2x1ZGUgZG9jdW1lbnQgcmVhZHkpCisgICAgICAgICAgICBy
YnVnZ3lRU0EgPSBbICI6Zm9jdXMiIF0sCisKKyAgICAgICAgICAgIC8vIG1hdGNoZXNTZWxlY3Rv
cig6YWN0aXZlKSByZXBvcnRzIGZhbHNlIHdoZW4gdHJ1ZSAoSUU5L09wZXJhIDExLjUpCisgICAg
ICAgICAgICAvLyBBIHN1cHBvcnQgdGVzdCB3b3VsZCByZXF1aXJlIHRvbyBtdWNoIGNvZGUgKHdv
dWxkIGluY2x1ZGUgZG9jdW1lbnQgcmVhZHkpCisgICAgICAgICAgICAvLyBqdXN0IHNraXAgbWF0
Y2hlc1NlbGVjdG9yIGZvciA6YWN0aXZlCisgICAgICAgICAgICByYnVnZ3lNYXRjaGVzID0gWyAi
OmFjdGl2ZSIgXSwKKyAgICAgICAgICAgIG1hdGNoZXMgPSBkb2NFbGVtLm1hdGNoZXNTZWxlY3Rv
ciB8fAorICAgICAgICAgICAgICAgIGRvY0VsZW0ubW96TWF0Y2hlc1NlbGVjdG9yIHx8CisgICAg
ICAgICAgICAgICAgZG9jRWxlbS53ZWJraXRNYXRjaGVzU2VsZWN0b3IgfHwKKyAgICAgICAgICAg
ICAgICBkb2NFbGVtLm9NYXRjaGVzU2VsZWN0b3IgfHwKKyAgICAgICAgICAgICAgICBkb2NFbGVt
Lm1zTWF0Y2hlc1NlbGVjdG9yOworCisgICAgICAgIC8vIEJ1aWxkIFFTQSByZWdleAorICAgICAg
ICAvLyBSZWdleCBzdHJhdGVneSBhZG9wdGVkIGZyb20gRGllZ28gUGVyaW5pCisgICAgICAgIGFz
c2VydChmdW5jdGlvbiggZGl2ICkgeworICAgICAgICAgICAgLy8gU2VsZWN0IGlzIHNldCB0byBl
bXB0eSBzdHJpbmcgb24gcHVycG9zZQorICAgICAgICAgICAgLy8gVGhpcyBpcyB0byB0ZXN0IElF
J3MgdHJlYXRtZW50IG9mIG5vdCBleHBsaWN0bHkKKyAgICAgICAgICAgIC8vIHNldHRpbmcgYSBi
b29sZWFuIGNvbnRlbnQgYXR0cmlidXRlLAorICAgICAgICAgICAgLy8gc2luY2UgaXRzIHByZXNl
bmNlIHNob3VsZCBiZSBlbm91Z2gKKyAgICAgICAgICAgIC8vIGh0dHA6Ly9idWdzLmpxdWVyeS5j
b20vdGlja2V0LzEyMzU5CisgICAgICAgICAgICBkaXYuaW5uZXJIVE1MID0gIjxzZWxlY3Q+PG9w
dGlvbiBzZWxlY3RlZD0nJz48L29wdGlvbj48L3NlbGVjdD4iOworCisgICAgICAgICAgICAvLyBJ
RTggLSBTb21lIGJvb2xlYW4gYXR0cmlidXRlcyBhcmUgbm90IHRyZWF0ZWQgY29ycmVjdGx5Cisg
ICAgICAgICAgICBpZiAoICFkaXYucXVlcnlTZWxlY3RvckFsbCgiW3NlbGVjdGVkXSIpLmxlbmd0
aCApIHsKKyAgICAgICAgICAgICAgICByYnVnZ3lRU0EucHVzaCggIlxcWyIgKyB3aGl0ZXNwYWNl
ICsgIiooPzpjaGVja2VkfGRpc2FibGVkfGlzbWFwfG11bHRpcGxlfHJlYWRvbmx5fHNlbGVjdGVk
fHZhbHVlKSIgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gV2Via2l0L09wZXJh
IC0gOmNoZWNrZWQgc2hvdWxkIHJldHVybiBzZWxlY3RlZCBvcHRpb24gZWxlbWVudHMKKyAgICAg
ICAgICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTEvUkVDLWNzczMtc2VsZWN0b3JzLTIw
MTEwOTI5LyNjaGVja2VkCisgICAgICAgICAgICAvLyBJRTggdGhyb3dzIGVycm9yIGhlcmUgKGRv
IG5vdCBwdXQgdGVzdHMgYWZ0ZXIgdGhpcyBvbmUpCisgICAgICAgICAgICBpZiAoICFkaXYucXVl
cnlTZWxlY3RvckFsbCgiOmNoZWNrZWQiKS5sZW5ndGggKSB7CisgICAgICAgICAgICAgICAgcmJ1
Z2d5UVNBLnB1c2goIjpjaGVja2VkIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworCisg
ICAgICAgIGFzc2VydChmdW5jdGlvbiggZGl2ICkgeworCisgICAgICAgICAgICAvLyBPcGVyYSAx
MC0xMi9JRTkgLSBePSAkPSAqPSBhbmQgZW1wdHkgdmFsdWVzCisgICAgICAgICAgICAvLyBTaG91
bGQgbm90IHNlbGVjdCBhbnl0aGluZworICAgICAgICAgICAgZGl2LmlubmVySFRNTCA9ICI8cCB0
ZXN0PScnPjwvcD4iOworICAgICAgICAgICAgaWYgKCBkaXYucXVlcnlTZWxlY3RvckFsbCgiW3Rl
c3RePScnXSIpLmxlbmd0aCApIHsKKyAgICAgICAgICAgICAgICByYnVnZ3lRU0EucHVzaCggIlsq
XiRdPSIgKyB3aGl0ZXNwYWNlICsgIiooPzpcIlwifCcnKSIgKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgLy8gRkYgMy41IC0gOmVuYWJsZWQvOmRpc2FibGVkIGFuZCBoaWRkZW4gZWxl
bWVudHMgKGhpZGRlbiBlbGVtZW50cyBhcmUgc3RpbGwgZW5hYmxlZCkKKyAgICAgICAgICAgIC8v
IElFOCB0aHJvd3MgZXJyb3IgaGVyZSAoZG8gbm90IHB1dCB0ZXN0cyBhZnRlciB0aGlzIG9uZSkK
KyAgICAgICAgICAgIGRpdi5pbm5lckhUTUwgPSAiPGlucHV0IHR5cGU9J2hpZGRlbicvPiI7Cisg
ICAgICAgICAgICBpZiAoICFkaXYucXVlcnlTZWxlY3RvckFsbCgiOmVuYWJsZWQiKS5sZW5ndGgg
KSB7CisgICAgICAgICAgICAgICAgcmJ1Z2d5UVNBLnB1c2goIjplbmFibGVkIiwgIjpkaXNhYmxl
ZCIpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKworICAgICAgICAvLyByYnVnZ3lRU0Eg
YWx3YXlzIGNvbnRhaW5zIDpmb2N1cywgc28gbm8gbmVlZCBmb3IgYSBsZW5ndGggY2hlY2sKKyAg
ICAgICAgcmJ1Z2d5UVNBID0gLyogcmJ1Z2d5UVNBLmxlbmd0aCAmJiAqLyBuZXcgUmVnRXhwKCBy
YnVnZ3lRU0Euam9pbigifCIpICk7CisKKyAgICAgICAgc2VsZWN0ID0gZnVuY3Rpb24oIHNlbGVj
dG9yLCBjb250ZXh0LCByZXN1bHRzLCBzZWVkLCB4bWwgKSB7CisgICAgICAgICAgICAvLyBPbmx5
IHVzZSBxdWVyeVNlbGVjdG9yQWxsIHdoZW4gbm90IGZpbHRlcmluZywKKyAgICAgICAgICAgIC8v
IHdoZW4gdGhpcyBpcyBub3QgeG1sLAorICAgICAgICAgICAgLy8gYW5kIHdoZW4gbm8gUVNBIGJ1
Z3MgYXBwbHkKKyAgICAgICAgICAgIGlmICggIXNlZWQgJiYgIXhtbCAmJiAhcmJ1Z2d5UVNBLnRl
c3QoIHNlbGVjdG9yICkgKSB7CisgICAgICAgICAgICAgICAgdmFyIGdyb3VwcywgaSwKKyAgICAg
ICAgICAgICAgICAgICAgb2xkID0gdHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgbmlkID0gZXhw
YW5kbywKKyAgICAgICAgICAgICAgICAgICAgbmV3Q29udGV4dCA9IGNvbnRleHQsCisgICAgICAg
ICAgICAgICAgICAgIG5ld1NlbGVjdG9yID0gY29udGV4dC5ub2RlVHlwZSA9PT0gOSAmJiBzZWxl
Y3RvcjsKKworICAgICAgICAgICAgICAgIC8vIHFTQSB3b3JrcyBzdHJhbmdlbHkgb24gRWxlbWVu
dC1yb290ZWQgcXVlcmllcworICAgICAgICAgICAgICAgIC8vIFdlIGNhbiB3b3JrIGFyb3VuZCB0
aGlzIGJ5IHNwZWNpZnlpbmcgYW4gZXh0cmEgSUQgb24gdGhlIHJvb3QKKyAgICAgICAgICAgICAg
ICAvLyBhbmQgd29ya2luZyB1cCBmcm9tIHRoZXJlIChUaGFua3MgdG8gQW5kcmV3IER1cG9udCBm
b3IgdGhlIHRlY2huaXF1ZSkKKyAgICAgICAgICAgICAgICAvLyBJRSA4IGRvZXNuJ3Qgd29yayBv
biBvYmplY3QgZWxlbWVudHMKKyAgICAgICAgICAgICAgICBpZiAoIGNvbnRleHQubm9kZVR5cGUg
PT09IDEgJiYgY29udGV4dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpICE9PSAib2JqZWN0IiApIHsK
KyAgICAgICAgICAgICAgICAgICAgZ3JvdXBzID0gdG9rZW5pemUoIHNlbGVjdG9yICk7CisKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKCAob2xkID0gY29udGV4dC5nZXRBdHRyaWJ1dGUoImlkIikp
ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgbmlkID0gb2xkLnJlcGxhY2UoIHJlc2NhcGUs
ICJcXCQmIiApOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGV4dC5zZXRBdHRyaWJ1dGUoICJpZCIsIG5pZCApOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIG5pZCA9ICJbaWQ9JyIgKyBuaWQgKyAiJ10g
IjsKKworICAgICAgICAgICAgICAgICAgICBpID0gZ3JvdXBzLmxlbmd0aDsKKyAgICAgICAgICAg
ICAgICAgICAgd2hpbGUgKCBpLS0gKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBncm91cHNb
aV0gPSBuaWQgKyBncm91cHNbaV0uam9pbigiIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgbmV3Q29udGV4dCA9IHJzaWJsaW5nLnRlc3QoIHNlbGVjdG9yICkg
JiYgY29udGV4dC5wYXJlbnROb2RlIHx8IGNvbnRleHQ7CisgICAgICAgICAgICAgICAgICAgIG5l
d1NlbGVjdG9yID0gZ3JvdXBzLmpvaW4oIiwiKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICBpZiAoIG5ld1NlbGVjdG9yICkgeworICAgICAgICAgICAgICAgICAgICB0cnkg
eworICAgICAgICAgICAgICAgICAgICAgICAgcHVzaC5hcHBseSggcmVzdWx0cywgc2xpY2UuY2Fs
bCggbmV3Q29udGV4dC5xdWVyeVNlbGVjdG9yQWxsKAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5ld1NlbGVjdG9yCisgICAgICAgICAgICAgICAgICAgICAgICApLCAwICkgKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRzOworICAgICAgICAgICAgICAgICAgICB9
IGNhdGNoKHFzYUVycm9yKSB7CisgICAgICAgICAgICAgICAgICAgIH0gZmluYWxseSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoICFvbGQgKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGV4dC5yZW1vdmVBdHRyaWJ1dGUoImlkIik7CisgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBvbGRTZWxlY3QoIHNlbGVjdG9yLCBjb250ZXh0
LCByZXN1bHRzLCBzZWVkLCB4bWwgKTsKKyAgICAgICAgfTsKKworICAgICAgICBpZiAoIG1hdGNo
ZXMgKSB7CisgICAgICAgICAgICBhc3NlcnQoZnVuY3Rpb24oIGRpdiApIHsKKyAgICAgICAgICAg
ICAgICAvLyBDaGVjayB0byBzZWUgaWYgaXQncyBwb3NzaWJsZSB0byBkbyBtYXRjaGVzU2VsZWN0
b3IKKyAgICAgICAgICAgICAgICAvLyBvbiBhIGRpc2Nvbm5lY3RlZCBub2RlIChJRSA5KQorICAg
ICAgICAgICAgICAgIGRpc2Nvbm5lY3RlZE1hdGNoID0gbWF0Y2hlcy5jYWxsKCBkaXYsICJkaXYi
ICk7CisKKyAgICAgICAgICAgICAgICAvLyBUaGlzIHNob3VsZCBmYWlsIHdpdGggYW4gZXhjZXB0
aW9uCisgICAgICAgICAgICAgICAgLy8gR2Vja28gZG9lcyBub3QgZXJyb3IsIHJldHVybnMgZmFs
c2UgaW5zdGVhZAorICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgIG1h
dGNoZXMuY2FsbCggZGl2LCAiW3Rlc3QhPScnXTpzaXp6bGUiICk7CisgICAgICAgICAgICAgICAg
ICAgIHJidWdneU1hdGNoZXMucHVzaCggIiE9IiwgcHNldWRvcyApOworICAgICAgICAgICAgICAg
IH0gY2F0Y2ggKCBlICkge30KKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAvLyByYnVn
Z3lNYXRjaGVzIGFsd2F5cyBjb250YWlucyA6YWN0aXZlIGFuZCA6Zm9jdXMsIHNvIG5vIG5lZWQg
Zm9yIGEgbGVuZ3RoIGNoZWNrCisgICAgICAgICAgICByYnVnZ3lNYXRjaGVzID0gLyogcmJ1Z2d5
TWF0Y2hlcy5sZW5ndGggJiYgKi8gbmV3IFJlZ0V4cCggcmJ1Z2d5TWF0Y2hlcy5qb2luKCJ8Iikg
KTsKKworICAgICAgICAgICAgU2l6emxlLm1hdGNoZXNTZWxlY3RvciA9IGZ1bmN0aW9uKCBlbGVt
LCBleHByICkgeworICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGF0dHJpYnV0ZSBz
ZWxlY3RvcnMgYXJlIHF1b3RlZAorICAgICAgICAgICAgICAgIGV4cHIgPSBleHByLnJlcGxhY2Uo
IHJhdHRyaWJ1dGVRdW90ZXMsICI9JyQxJ10iICk7CisKKyAgICAgICAgICAgICAgICAvLyByYnVn
Z3lNYXRjaGVzIGFsd2F5cyBjb250YWlucyA6YWN0aXZlLCBzbyBubyBuZWVkIGZvciBhbiBleGlz
dGVuY2UgY2hlY2sKKyAgICAgICAgICAgICAgICBpZiAoICFpc1hNTCggZWxlbSApICYmICFyYnVn
Z3lNYXRjaGVzLnRlc3QoIGV4cHIgKSAmJiAhcmJ1Z2d5UVNBLnRlc3QoIGV4cHIgKSApIHsKKyAg
ICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXQg
PSBtYXRjaGVzLmNhbGwoIGVsZW0sIGV4cHIgKTsKKworICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gSUUgOSdzIG1hdGNoZXNTZWxlY3RvciByZXR1cm5zIGZhbHNlIG9uIGRpc2Nvbm5lY3RlZCBu
b2RlcworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCByZXQgfHwgZGlzY29ubmVjdGVkTWF0
Y2ggfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXMgd2VsbCwgZGlzY29u
bmVjdGVkIG5vZGVzIGFyZSBzYWlkIHRvIGJlIGluIGEgZG9jdW1lbnQKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gZnJhZ21lbnQgaW4gSUUgOQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlbGVtLmRvY3VtZW50ICYmIGVsZW0uZG9jdW1lbnQubm9kZVR5cGUgIT09
IDExICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2goZSkge30KKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByZXR1cm4gU2l6emxlKCBleHByLCBu
dWxsLCBudWxsLCBbIGVsZW0gXSApLmxlbmd0aCA+IDA7CisgICAgICAgICAgICB9OworICAgICAg
ICB9CisgICAgfSkoKTsKK30KKworLy8gRGVwcmVjYXRlZAorRXhwci5wc2V1ZG9zWyJudGgiXSA9
IEV4cHIucHNldWRvc1siZXEiXTsKKworLy8gQmFjay1jb21wYXQKK2Z1bmN0aW9uIHNldEZpbHRl
cnMoKSB7fQorRXhwci5maWx0ZXJzID0gc2V0RmlsdGVycy5wcm90b3R5cGUgPSBFeHByLnBzZXVk
b3M7CitFeHByLnNldEZpbHRlcnMgPSBuZXcgc2V0RmlsdGVycygpOworCisvLyBPdmVycmlkZSBz
aXp6bGUgYXR0cmlidXRlIHJldHJpZXZhbAorU2l6emxlLmF0dHIgPSBqUXVlcnkuYXR0cjsKK2pR
dWVyeS5maW5kID0gU2l6emxlOworalF1ZXJ5LmV4cHIgPSBTaXp6bGUuc2VsZWN0b3JzOworalF1
ZXJ5LmV4cHJbIjoiXSA9IGpRdWVyeS5leHByLnBzZXVkb3M7CitqUXVlcnkudW5pcXVlID0gU2l6
emxlLnVuaXF1ZVNvcnQ7CitqUXVlcnkudGV4dCA9IFNpenpsZS5nZXRUZXh0OworalF1ZXJ5Lmlz
WE1MRG9jID0gU2l6emxlLmlzWE1MOworalF1ZXJ5LmNvbnRhaW5zID0gU2l6emxlLmNvbnRhaW5z
OworCisKK30pKCB3aW5kb3cgKTsKK3ZhciBydW50aWwgPSAvVW50aWwkLywKKyAgICBycGFyZW50
c3ByZXYgPSAvXig/OnBhcmVudHN8cHJldig/OlVudGlsfEFsbCkpLywKKyAgICBpc1NpbXBsZSA9
IC9eLlteOiNcW1wuLF0qJC8sCisgICAgcm5lZWRzQ29udGV4dCA9IGpRdWVyeS5leHByLm1hdGNo
Lm5lZWRzQ29udGV4dCwKKyAgICAvLyBtZXRob2RzIGd1YXJhbnRlZWQgdG8gcHJvZHVjZSBhIHVu
aXF1ZSBzZXQgd2hlbiBzdGFydGluZyBmcm9tIGEgdW5pcXVlIHNldAorICAgIGd1YXJhbnRlZWRV
bmlxdWUgPSB7CisgICAgICAgIGNoaWxkcmVuOiB0cnVlLAorICAgICAgICBjb250ZW50czogdHJ1
ZSwKKyAgICAgICAgbmV4dDogdHJ1ZSwKKyAgICAgICAgcHJldjogdHJ1ZQorICAgIH07CisKK2pR
dWVyeS5mbi5leHRlbmQoeworICAgIGZpbmQ6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHsKKyAgICAg
ICAgdmFyIGksIGwsIGxlbmd0aCwgbiwgciwgcmV0LAorICAgICAgICAgICAgc2VsZiA9IHRoaXM7
CisKKyAgICAgICAgaWYgKCB0eXBlb2Ygc2VsZWN0b3IgIT09ICJzdHJpbmciICkgeworICAgICAg
ICAgICAgcmV0dXJuIGpRdWVyeSggc2VsZWN0b3IgKS5maWx0ZXIoZnVuY3Rpb24oKSB7CisgICAg
ICAgICAgICAgICAgZm9yICggaSA9IDAsIGwgPSBzZWxmLmxlbmd0aDsgaSA8IGw7IGkrKyApIHsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkuY29udGFpbnMoIHNlbGZbIGkgXSwgdGhp
cyApICkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAg
fQorCisgICAgICAgIHJldCA9IHRoaXMucHVzaFN0YWNrKCAiIiwgImZpbmQiLCBzZWxlY3RvciAp
OworCisgICAgICAgIGZvciAoIGkgPSAwLCBsID0gdGhpcy5sZW5ndGg7IGkgPCBsOyBpKysgKSB7
CisgICAgICAgICAgICBsZW5ndGggPSByZXQubGVuZ3RoOworICAgICAgICAgICAgalF1ZXJ5LmZp
bmQoIHNlbGVjdG9yLCB0aGlzW2ldLCByZXQgKTsKKworICAgICAgICAgICAgaWYgKCBpID4gMCAp
IHsKKyAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgcmVzdWx0cyBhcmUgdW5p
cXVlCisgICAgICAgICAgICAgICAgZm9yICggbiA9IGxlbmd0aDsgbiA8IHJldC5sZW5ndGg7IG4r
KyApIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yICggciA9IDA7IHIgPCBsZW5ndGg7IHIrKyAp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcmV0W3JdID09PSByZXRbbl0gKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0LnNwbGljZShuLS0sIDEpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9LAorCisgICAgaGFzOiBmdW5jdGlv
biggdGFyZ2V0ICkgeworICAgICAgICB2YXIgaSwKKyAgICAgICAgICAgIHRhcmdldHMgPSBqUXVl
cnkoIHRhcmdldCwgdGhpcyApLAorICAgICAgICAgICAgbGVuID0gdGFyZ2V0cy5sZW5ndGg7CisK
KyAgICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgZm9y
ICggaSA9IDA7IGkgPCBsZW47IGkrKyApIHsKKyAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5j
b250YWlucyggdGhpcywgdGFyZ2V0c1tpXSApICkgeworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0pOwor
ICAgIH0sCisKKyAgICBub3Q6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHsKKyAgICAgICAgcmV0dXJu
IHRoaXMucHVzaFN0YWNrKCB3aW5ub3codGhpcywgc2VsZWN0b3IsIGZhbHNlKSwgIm5vdCIsIHNl
bGVjdG9yKTsKKyAgICB9LAorCisgICAgZmlsdGVyOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7Cisg
ICAgICAgIHJldHVybiB0aGlzLnB1c2hTdGFjayggd2lubm93KHRoaXMsIHNlbGVjdG9yLCB0cnVl
KSwgImZpbHRlciIsIHNlbGVjdG9yICk7CisgICAgfSwKKworICAgIGlzOiBmdW5jdGlvbiggc2Vs
ZWN0b3IgKSB7CisgICAgICAgIHJldHVybiAhIXNlbGVjdG9yICYmICgKKyAgICAgICAgICAgIHR5
cGVvZiBzZWxlY3RvciA9PT0gInN0cmluZyIgPworICAgICAgICAgICAgICAgIC8vIElmIHRoaXMg
aXMgYSBwb3NpdGlvbmFsL3JlbGF0aXZlIHNlbGVjdG9yLCBjaGVjayBtZW1iZXJzaGlwIGluIHRo
ZSByZXR1cm5lZCBzZXQKKyAgICAgICAgICAgICAgICAvLyBzbyAkKCJwOmZpcnN0IikuaXMoInA6
bGFzdCIpIHdvbid0IHJldHVybiB0cnVlIGZvciBhIGRvYyB3aXRoIHR3byAicCIuCisgICAgICAg
ICAgICAgICAgcm5lZWRzQ29udGV4dC50ZXN0KCBzZWxlY3RvciApID8KKyAgICAgICAgICAgICAg
ICAgICAgalF1ZXJ5KCBzZWxlY3RvciwgdGhpcy5jb250ZXh0ICkuaW5kZXgoIHRoaXNbMF0gKSA+
PSAwIDoKKyAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmZpbHRlciggc2VsZWN0b3IsIHRoaXMg
KS5sZW5ndGggPiAwIDoKKyAgICAgICAgICAgICAgICB0aGlzLmZpbHRlciggc2VsZWN0b3IgKS5s
ZW5ndGggPiAwICk7CisgICAgfSwKKworICAgIGNsb3Nlc3Q6IGZ1bmN0aW9uKCBzZWxlY3RvcnMs
IGNvbnRleHQgKSB7CisgICAgICAgIHZhciBjdXIsCisgICAgICAgICAgICBpID0gMCwKKyAgICAg
ICAgICAgIGwgPSB0aGlzLmxlbmd0aCwKKyAgICAgICAgICAgIHJldCA9IFtdLAorICAgICAgICAg
ICAgcG9zID0gcm5lZWRzQ29udGV4dC50ZXN0KCBzZWxlY3RvcnMgKSB8fCB0eXBlb2Ygc2VsZWN0
b3JzICE9PSAic3RyaW5nIiA/CisgICAgICAgICAgICAgICAgalF1ZXJ5KCBzZWxlY3RvcnMsIGNv
bnRleHQgfHwgdGhpcy5jb250ZXh0ICkgOgorICAgICAgICAgICAgICAgIDA7CisKKyAgICAgICAg
Zm9yICggOyBpIDwgbDsgaSsrICkgeworICAgICAgICAgICAgY3VyID0gdGhpc1tpXTsKKworICAg
ICAgICAgICAgd2hpbGUgKCBjdXIgJiYgY3VyLm93bmVyRG9jdW1lbnQgJiYgY3VyICE9PSBjb250
ZXh0ICYmIGN1ci5ub2RlVHlwZSAhPT0gMTEgKSB7CisgICAgICAgICAgICAgICAgaWYgKCBwb3Mg
PyBwb3MuaW5kZXgoY3VyKSA+IC0xIDogalF1ZXJ5LmZpbmQubWF0Y2hlc1NlbGVjdG9yKGN1ciwg
c2VsZWN0b3JzKSApIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0LnB1c2goIGN1ciApOworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgY3VyID0gY3VyLnBhcmVudE5vZGU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICByZXQgPSByZXQubGVuZ3RoID4gMSA/IGpRdWVyeS51bmlxdWUoIHJldCApIDogcmV0Owor
CisgICAgICAgIHJldHVybiB0aGlzLnB1c2hTdGFjayggcmV0LCAiY2xvc2VzdCIsIHNlbGVjdG9y
cyApOworICAgIH0sCisKKyAgICAvLyBEZXRlcm1pbmUgdGhlIHBvc2l0aW9uIG9mIGFuIGVsZW1l
bnQgd2l0aGluCisgICAgLy8gdGhlIG1hdGNoZWQgc2V0IG9mIGVsZW1lbnRzCisgICAgaW5kZXg6
IGZ1bmN0aW9uKCBlbGVtICkgeworCisgICAgICAgIC8vIE5vIGFyZ3VtZW50LCByZXR1cm4gaW5k
ZXggaW4gcGFyZW50CisgICAgICAgIGlmICggIWVsZW0gKSB7CisgICAgICAgICAgICByZXR1cm4g
KCB0aGlzWzBdICYmIHRoaXNbMF0ucGFyZW50Tm9kZSApID8gdGhpcy5wcmV2QWxsKCkubGVuZ3Ro
IDogLTE7CisgICAgICAgIH0KKworICAgICAgICAvLyBpbmRleCBpbiBzZWxlY3RvcgorICAgICAg
ICBpZiAoIHR5cGVvZiBlbGVtID09PSAic3RyaW5nIiApIHsKKyAgICAgICAgICAgIHJldHVybiBq
UXVlcnkuaW5BcnJheSggdGhpc1swXSwgalF1ZXJ5KCBlbGVtICkgKTsKKyAgICAgICAgfQorCisg
ICAgICAgIC8vIExvY2F0ZSB0aGUgcG9zaXRpb24gb2YgdGhlIGRlc2lyZWQgZWxlbWVudAorICAg
ICAgICByZXR1cm4galF1ZXJ5LmluQXJyYXkoCisgICAgICAgICAgICAvLyBJZiBpdCByZWNlaXZl
cyBhIGpRdWVyeSBvYmplY3QsIHRoZSBmaXJzdCBlbGVtZW50IGlzIHVzZWQKKyAgICAgICAgICAg
IGVsZW0uanF1ZXJ5ID8gZWxlbVswXSA6IGVsZW0sIHRoaXMgKTsKKyAgICB9LAorCisgICAgYWRk
OiBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQgKSB7CisgICAgICAgIHZhciBzZXQgPSB0eXBl
b2Ygc2VsZWN0b3IgPT09ICJzdHJpbmciID8KKyAgICAgICAgICAgICAgICBqUXVlcnkoIHNlbGVj
dG9yLCBjb250ZXh0ICkgOgorICAgICAgICAgICAgICAgIGpRdWVyeS5tYWtlQXJyYXkoIHNlbGVj
dG9yICYmIHNlbGVjdG9yLm5vZGVUeXBlID8gWyBzZWxlY3RvciBdIDogc2VsZWN0b3IgKSwKKyAg
ICAgICAgICAgIGFsbCA9IGpRdWVyeS5tZXJnZSggdGhpcy5nZXQoKSwgc2V0ICk7CisKKyAgICAg
ICAgcmV0dXJuIHRoaXMucHVzaFN0YWNrKCBpc0Rpc2Nvbm5lY3RlZCggc2V0WzBdICkgfHwgaXNE
aXNjb25uZWN0ZWQoIGFsbFswXSApID8KKyAgICAgICAgICAgIGFsbCA6CisgICAgICAgICAgICBq
UXVlcnkudW5pcXVlKCBhbGwgKSApOworICAgIH0sCisKKyAgICBhZGRCYWNrOiBmdW5jdGlvbigg
c2VsZWN0b3IgKSB7CisgICAgICAgIHJldHVybiB0aGlzLmFkZCggc2VsZWN0b3IgPT0gbnVsbCA/
CisgICAgICAgICAgICB0aGlzLnByZXZPYmplY3QgOiB0aGlzLnByZXZPYmplY3QuZmlsdGVyKHNl
bGVjdG9yKQorICAgICAgICApOworICAgIH0KK30pOworCitqUXVlcnkuZm4uYW5kU2VsZiA9IGpR
dWVyeS5mbi5hZGRCYWNrOworCisvLyBBIHBhaW5mdWxseSBzaW1wbGUgY2hlY2sgdG8gc2VlIGlm
IGFuIGVsZW1lbnQgaXMgZGlzY29ubmVjdGVkCisvLyBmcm9tIGEgZG9jdW1lbnQgKHNob3VsZCBi
ZSBpbXByb3ZlZCwgd2hlcmUgZmVhc2libGUpLgorZnVuY3Rpb24gaXNEaXNjb25uZWN0ZWQoIG5v
ZGUgKSB7CisgICAgcmV0dXJuICFub2RlIHx8ICFub2RlLnBhcmVudE5vZGUgfHwgbm9kZS5wYXJl
bnROb2RlLm5vZGVUeXBlID09PSAxMTsKK30KKworZnVuY3Rpb24gc2libGluZyggY3VyLCBkaXIg
KSB7CisgICAgZG8geworICAgICAgICBjdXIgPSBjdXJbIGRpciBdOworICAgIH0gd2hpbGUgKCBj
dXIgJiYgY3VyLm5vZGVUeXBlICE9PSAxICk7CisKKyAgICByZXR1cm4gY3VyOworfQorCitqUXVl
cnkuZWFjaCh7CisgICAgcGFyZW50OiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgdmFyIHBh
cmVudCA9IGVsZW0ucGFyZW50Tm9kZTsKKyAgICAgICAgcmV0dXJuIHBhcmVudCAmJiBwYXJlbnQu
bm9kZVR5cGUgIT09IDExID8gcGFyZW50IDogbnVsbDsKKyAgICB9LAorICAgIHBhcmVudHM6IGZ1
bmN0aW9uKCBlbGVtICkgeworICAgICAgICByZXR1cm4galF1ZXJ5LmRpciggZWxlbSwgInBhcmVu
dE5vZGUiICk7CisgICAgfSwKKyAgICBwYXJlbnRzVW50aWw6IGZ1bmN0aW9uKCBlbGVtLCBpLCB1
bnRpbCApIHsKKyAgICAgICAgcmV0dXJuIGpRdWVyeS5kaXIoIGVsZW0sICJwYXJlbnROb2RlIiwg
dW50aWwgKTsKKyAgICB9LAorICAgIG5leHQ6IGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICBy
ZXR1cm4gc2libGluZyggZWxlbSwgIm5leHRTaWJsaW5nIiApOworICAgIH0sCisgICAgcHJldjog
ZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgIHJldHVybiBzaWJsaW5nKCBlbGVtLCAicHJldmlv
dXNTaWJsaW5nIiApOworICAgIH0sCisgICAgbmV4dEFsbDogZnVuY3Rpb24oIGVsZW0gKSB7Cisg
ICAgICAgIHJldHVybiBqUXVlcnkuZGlyKCBlbGVtLCAibmV4dFNpYmxpbmciICk7CisgICAgfSwK
KyAgICBwcmV2QWxsOiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgcmV0dXJuIGpRdWVyeS5k
aXIoIGVsZW0sICJwcmV2aW91c1NpYmxpbmciICk7CisgICAgfSwKKyAgICBuZXh0VW50aWw6IGZ1
bmN0aW9uKCBlbGVtLCBpLCB1bnRpbCApIHsKKyAgICAgICAgcmV0dXJuIGpRdWVyeS5kaXIoIGVs
ZW0sICJuZXh0U2libGluZyIsIHVudGlsICk7CisgICAgfSwKKyAgICBwcmV2VW50aWw6IGZ1bmN0
aW9uKCBlbGVtLCBpLCB1bnRpbCApIHsKKyAgICAgICAgcmV0dXJuIGpRdWVyeS5kaXIoIGVsZW0s
ICJwcmV2aW91c1NpYmxpbmciLCB1bnRpbCApOworICAgIH0sCisgICAgc2libGluZ3M6IGZ1bmN0
aW9uKCBlbGVtICkgeworICAgICAgICByZXR1cm4galF1ZXJ5LnNpYmxpbmcoICggZWxlbS5wYXJl
bnROb2RlIHx8IHt9ICkuZmlyc3RDaGlsZCwgZWxlbSApOworICAgIH0sCisgICAgY2hpbGRyZW46
IGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICByZXR1cm4galF1ZXJ5LnNpYmxpbmcoIGVsZW0u
Zmlyc3RDaGlsZCApOworICAgIH0sCisgICAgY29udGVudHM6IGZ1bmN0aW9uKCBlbGVtICkgewor
ICAgICAgICByZXR1cm4galF1ZXJ5Lm5vZGVOYW1lKCBlbGVtLCAiaWZyYW1lIiApID8KKyAgICAg
ICAgICAgIGVsZW0uY29udGVudERvY3VtZW50IHx8IGVsZW0uY29udGVudFdpbmRvdy5kb2N1bWVu
dCA6CisgICAgICAgICAgICBqUXVlcnkubWVyZ2UoIFtdLCBlbGVtLmNoaWxkTm9kZXMgKTsKKyAg
ICB9Cit9LCBmdW5jdGlvbiggbmFtZSwgZm4gKSB7CisgICAgalF1ZXJ5LmZuWyBuYW1lIF0gPSBm
dW5jdGlvbiggdW50aWwsIHNlbGVjdG9yICkgeworICAgICAgICB2YXIgcmV0ID0galF1ZXJ5Lm1h
cCggdGhpcywgZm4sIHVudGlsICk7CisKKyAgICAgICAgaWYgKCAhcnVudGlsLnRlc3QoIG5hbWUg
KSApIHsKKyAgICAgICAgICAgIHNlbGVjdG9yID0gdW50aWw7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoIHNlbGVjdG9yICYmIHR5cGVvZiBzZWxlY3RvciA9PT0gInN0cmluZyIgKSB7CisgICAg
ICAgICAgICByZXQgPSBqUXVlcnkuZmlsdGVyKCBzZWxlY3RvciwgcmV0ICk7CisgICAgICAgIH0K
KworICAgICAgICByZXQgPSB0aGlzLmxlbmd0aCA+IDEgJiYgIWd1YXJhbnRlZWRVbmlxdWVbIG5h
bWUgXSA/IGpRdWVyeS51bmlxdWUoIHJldCApIDogcmV0OworCisgICAgICAgIGlmICggdGhpcy5s
ZW5ndGggPiAxICYmIHJwYXJlbnRzcHJldi50ZXN0KCBuYW1lICkgKSB7CisgICAgICAgICAgICBy
ZXQgPSByZXQucmV2ZXJzZSgpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRoaXMucHVz
aFN0YWNrKCByZXQsIG5hbWUsIGNvcmVfc2xpY2UuY2FsbCggYXJndW1lbnRzICkuam9pbigiLCIp
ICk7CisgICAgfTsKK30pOworCitqUXVlcnkuZXh0ZW5kKHsKKyAgICBmaWx0ZXI6IGZ1bmN0aW9u
KCBleHByLCBlbGVtcywgbm90ICkgeworICAgICAgICBpZiAoIG5vdCApIHsKKyAgICAgICAgICAg
IGV4cHIgPSAiOm5vdCgiICsgZXhwciArICIpIjsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVy
biBlbGVtcy5sZW5ndGggPT09IDEgPworICAgICAgICAgICAgalF1ZXJ5LmZpbmQubWF0Y2hlc1Nl
bGVjdG9yKGVsZW1zWzBdLCBleHByKSA/IFsgZWxlbXNbMF0gXSA6IFtdIDoKKyAgICAgICAgICAg
IGpRdWVyeS5maW5kLm1hdGNoZXMoZXhwciwgZWxlbXMpOworICAgIH0sCisKKyAgICBkaXI6IGZ1
bmN0aW9uKCBlbGVtLCBkaXIsIHVudGlsICkgeworICAgICAgICB2YXIgbWF0Y2hlZCA9IFtdLAor
ICAgICAgICAgICAgY3VyID0gZWxlbVsgZGlyIF07CisKKyAgICAgICAgd2hpbGUgKCBjdXIgJiYg
Y3VyLm5vZGVUeXBlICE9PSA5ICYmICh1bnRpbCA9PT0gdW5kZWZpbmVkIHx8IGN1ci5ub2RlVHlw
ZSAhPT0gMSB8fCAhalF1ZXJ5KCBjdXIgKS5pcyggdW50aWwgKSkgKSB7CisgICAgICAgICAgICBp
ZiAoIGN1ci5ub2RlVHlwZSA9PT0gMSApIHsKKyAgICAgICAgICAgICAgICBtYXRjaGVkLnB1c2go
IGN1ciApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY3VyID0gY3VyW2Rpcl07CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIG1hdGNoZWQ7CisgICAgfSwKKworICAgIHNpYmxpbmc6IGZ1
bmN0aW9uKCBuLCBlbGVtICkgeworICAgICAgICB2YXIgciA9IFtdOworCisgICAgICAgIGZvciAo
IDsgbjsgbiA9IG4ubmV4dFNpYmxpbmcgKSB7CisgICAgICAgICAgICBpZiAoIG4ubm9kZVR5cGUg
PT09IDEgJiYgbiAhPT0gZWxlbSApIHsKKyAgICAgICAgICAgICAgICByLnB1c2goIG4gKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByOworICAgIH0KK30pOwor
CisvLyBJbXBsZW1lbnQgdGhlIGlkZW50aWNhbCBmdW5jdGlvbmFsaXR5IGZvciBmaWx0ZXIgYW5k
IG5vdAorZnVuY3Rpb24gd2lubm93KCBlbGVtZW50cywgcXVhbGlmaWVyLCBrZWVwICkgeworCisg
ICAgLy8gQ2FuJ3QgcGFzcyBudWxsIG9yIHVuZGVmaW5lZCB0byBpbmRleE9mIGluIEZpcmVmb3gg
NAorICAgIC8vIFNldCB0byAwIHRvIHNraXAgc3RyaW5nIGNoZWNrCisgICAgcXVhbGlmaWVyID0g
cXVhbGlmaWVyIHx8IDA7CisKKyAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBxdWFsaWZpZXIg
KSApIHsKKyAgICAgICAgcmV0dXJuIGpRdWVyeS5ncmVwKGVsZW1lbnRzLCBmdW5jdGlvbiggZWxl
bSwgaSApIHsKKyAgICAgICAgICAgIHZhciByZXRWYWwgPSAhIXF1YWxpZmllci5jYWxsKCBlbGVt
LCBpLCBlbGVtICk7CisgICAgICAgICAgICByZXR1cm4gcmV0VmFsID09PSBrZWVwOworICAgICAg
ICB9KTsKKworICAgIH0gZWxzZSBpZiAoIHF1YWxpZmllci5ub2RlVHlwZSApIHsKKyAgICAgICAg
cmV0dXJuIGpRdWVyeS5ncmVwKGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSwgaSApIHsKKyAgICAg
ICAgICAgIHJldHVybiAoIGVsZW0gPT09IHF1YWxpZmllciApID09PSBrZWVwOworICAgICAgICB9
KTsKKworICAgIH0gZWxzZSBpZiAoIHR5cGVvZiBxdWFsaWZpZXIgPT09ICJzdHJpbmciICkgewor
ICAgICAgICB2YXIgZmlsdGVyZWQgPSBqUXVlcnkuZ3JlcChlbGVtZW50cywgZnVuY3Rpb24oIGVs
ZW0gKSB7CisgICAgICAgICAgICByZXR1cm4gZWxlbS5ub2RlVHlwZSA9PT0gMTsKKyAgICAgICAg
fSk7CisKKyAgICAgICAgaWYgKCBpc1NpbXBsZS50ZXN0KCBxdWFsaWZpZXIgKSApIHsKKyAgICAg
ICAgICAgIHJldHVybiBqUXVlcnkuZmlsdGVyKHF1YWxpZmllciwgZmlsdGVyZWQsICFrZWVwKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHF1YWxpZmllciA9IGpRdWVyeS5maWx0ZXIo
IHF1YWxpZmllciwgZmlsdGVyZWQgKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBq
UXVlcnkuZ3JlcChlbGVtZW50cywgZnVuY3Rpb24oIGVsZW0sIGkgKSB7CisgICAgICAgIHJldHVy
biAoIGpRdWVyeS5pbkFycmF5KCBlbGVtLCBxdWFsaWZpZXIgKSA+PSAwICkgPT09IGtlZXA7Cisg
ICAgfSk7Cit9CitmdW5jdGlvbiBjcmVhdGVTYWZlRnJhZ21lbnQoIGRvY3VtZW50ICkgeworICAg
IHZhciBsaXN0ID0gbm9kZU5hbWVzLnNwbGl0KCAifCIgKSwKKyAgICBzYWZlRnJhZyA9IGRvY3Vt
ZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKKworICAgIGlmICggc2FmZUZyYWcuY3JlYXRl
RWxlbWVudCApIHsKKyAgICAgICAgd2hpbGUgKCBsaXN0Lmxlbmd0aCApIHsKKyAgICAgICAgICAg
IHNhZmVGcmFnLmNyZWF0ZUVsZW1lbnQoCisgICAgICAgICAgICAgICAgbGlzdC5wb3AoKQorICAg
ICAgICAgICAgKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gc2FmZUZyYWc7Cit9CisK
K3ZhciBub2RlTmFtZXMgPSAiYWJicnxhcnRpY2xlfGFzaWRlfGF1ZGlvfGJkaXxjYW52YXN8ZGF0
YXxkYXRhbGlzdHxkZXRhaWxzfGZpZ2NhcHRpb258ZmlndXJlfGZvb3RlcnwiICsKKyAgICAgICAg
ImhlYWRlcnxoZ3JvdXB8bWFya3xtZXRlcnxuYXZ8b3V0cHV0fHByb2dyZXNzfHNlY3Rpb258c3Vt
bWFyeXx0aW1lfHZpZGVvIiwKKyAgICByaW5saW5lalF1ZXJ5ID0gLyBqUXVlcnlcZCs9Iig/Om51
bGx8XGQrKSIvZywKKyAgICBybGVhZGluZ1doaXRlc3BhY2UgPSAvXlxzKy8sCisgICAgcnhodG1s
VGFnID0gLzwoPyFhcmVhfGJyfGNvbHxlbWJlZHxocnxpbWd8aW5wdXR8bGlua3xtZXRhfHBhcmFt
KSgoW1x3Ol0rKVtePl0qKVwvPi9naSwKKyAgICBydGFnTmFtZSA9IC88KFtcdzpdKykvLAorICAg
IHJ0Ym9keSA9IC88dGJvZHkvaSwKKyAgICByaHRtbCA9IC88fCYjP1x3KzsvLAorICAgIHJub0lu
bmVyaHRtbCA9IC88KD86c2NyaXB0fHN0eWxlfGxpbmspL2ksCisgICAgcm5vY2FjaGUgPSAvPCg/
OnNjcmlwdHxvYmplY3R8ZW1iZWR8b3B0aW9ufHN0eWxlKS9pLAorICAgIHJub3NoaW1jYWNoZSA9
IG5ldyBSZWdFeHAoIjwoPzoiICsgbm9kZU5hbWVzICsgIilbXFxzLz5dIiwgImkiKSwKKyAgICBy
Y2hlY2thYmxlVHlwZSA9IC9eKD86Y2hlY2tib3h8cmFkaW8pJC8sCisgICAgLy8gY2hlY2tlZD0i
Y2hlY2tlZCIgb3IgY2hlY2tlZAorICAgIHJjaGVja2VkID0gL2NoZWNrZWRccyooPzpbXj1dfD1c
cyouY2hlY2tlZC4pL2ksCisgICAgcnNjcmlwdFR5cGUgPSAvXC8oamF2YXxlY21hKXNjcmlwdC9p
LAorICAgIHJjbGVhblNjcmlwdCA9IC9eXHMqPCEoPzpcW0NEQVRBXFt8XC1cLSl8W1xdXC1dezJ9
PlxzKiQvZywKKyAgICB3cmFwTWFwID0geworICAgICAgICBvcHRpb246IFsgMSwgIjxzZWxlY3Qg
bXVsdGlwbGU9J211bHRpcGxlJz4iLCAiPC9zZWxlY3Q+IiBdLAorICAgICAgICBsZWdlbmQ6IFsg
MSwgIjxmaWVsZHNldD4iLCAiPC9maWVsZHNldD4iIF0sCisgICAgICAgIHRoZWFkOiBbIDEsICI8
dGFibGU+IiwgIjwvdGFibGU+IiBdLAorICAgICAgICB0cjogWyAyLCAiPHRhYmxlPjx0Ym9keT4i
LCAiPC90Ym9keT48L3RhYmxlPiIgXSwKKyAgICAgICAgdGQ6IFsgMywgIjx0YWJsZT48dGJvZHk+
PHRyPiIsICI8L3RyPjwvdGJvZHk+PC90YWJsZT4iIF0sCisgICAgICAgIGNvbDogWyAyLCAiPHRh
YmxlPjx0Ym9keT48L3Rib2R5Pjxjb2xncm91cD4iLCAiPC9jb2xncm91cD48L3RhYmxlPiIgXSwK
KyAgICAgICAgYXJlYTogWyAxLCAiPG1hcD4iLCAiPC9tYXA+IiBdLAorICAgICAgICBfZGVmYXVs
dDogWyAwLCAiIiwgIiIgXQorICAgIH0sCisgICAgc2FmZUZyYWdtZW50ID0gY3JlYXRlU2FmZUZy
YWdtZW50KCBkb2N1bWVudCApLAorICAgIGZyYWdtZW50RGl2ID0gc2FmZUZyYWdtZW50LmFwcGVu
ZENoaWxkKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSApOworCit3cmFwTWFwLm9wdGdy
b3VwID0gd3JhcE1hcC5vcHRpb247Cit3cmFwTWFwLnRib2R5ID0gd3JhcE1hcC50Zm9vdCA9IHdy
YXBNYXAuY29sZ3JvdXAgPSB3cmFwTWFwLmNhcHRpb24gPSB3cmFwTWFwLnRoZWFkOword3JhcE1h
cC50aCA9IHdyYXBNYXAudGQ7CisKKy8vIElFNi04IGNhbid0IHNlcmlhbGl6ZSBsaW5rLCBzY3Jp
cHQsIHN0eWxlLCBvciBhbnkgaHRtbDUgKE5vU2NvcGUpIHRhZ3MsCisvLyB1bmxlc3Mgd3JhcHBl
ZCBpbiBhIGRpdiB3aXRoIG5vbi1icmVha2luZyBjaGFyYWN0ZXJzIGluIGZyb250IG9mIGl0Lgor
aWYgKCAhalF1ZXJ5LnN1cHBvcnQuaHRtbFNlcmlhbGl6ZSApIHsKKyAgICB3cmFwTWFwLl9kZWZh
dWx0ID0gWyAxLCAiWDxkaXY+IiwgIjwvZGl2PiIgXTsKK30KKworalF1ZXJ5LmZuLmV4dGVuZCh7
CisgICAgdGV4dDogZnVuY3Rpb24oIHZhbHVlICkgeworICAgICAgICByZXR1cm4galF1ZXJ5LmFj
Y2VzcyggdGhpcywgZnVuY3Rpb24oIHZhbHVlICkgeworICAgICAgICAgICAgcmV0dXJuIHZhbHVl
ID09PSB1bmRlZmluZWQgPworICAgICAgICAgICAgICAgIGpRdWVyeS50ZXh0KCB0aGlzICkgOgor
ICAgICAgICAgICAgICAgIHRoaXMuZW1wdHkoKS5hcHBlbmQoICggdGhpc1swXSAmJiB0aGlzWzBd
Lm93bmVyRG9jdW1lbnQgfHwgZG9jdW1lbnQgKS5jcmVhdGVUZXh0Tm9kZSggdmFsdWUgKSApOwor
ICAgICAgICB9LCBudWxsLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCApOworICAgIH0sCisKKyAg
ICB3cmFwQWxsOiBmdW5jdGlvbiggaHRtbCApIHsKKyAgICAgICAgaWYgKCBqUXVlcnkuaXNGdW5j
dGlvbiggaHRtbCApICkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihp
KSB7CisgICAgICAgICAgICAgICAgalF1ZXJ5KHRoaXMpLndyYXBBbGwoIGh0bWwuY2FsbCh0aGlz
LCBpKSApOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIHRoaXNb
MF0gKSB7CisgICAgICAgICAgICAvLyBUaGUgZWxlbWVudHMgdG8gd3JhcCB0aGUgdGFyZ2V0IGFy
b3VuZAorICAgICAgICAgICAgdmFyIHdyYXAgPSBqUXVlcnkoIGh0bWwsIHRoaXNbMF0ub3duZXJE
b2N1bWVudCApLmVxKDApLmNsb25lKHRydWUpOworCisgICAgICAgICAgICBpZiAoIHRoaXNbMF0u
cGFyZW50Tm9kZSApIHsKKyAgICAgICAgICAgICAgICB3cmFwLmluc2VydEJlZm9yZSggdGhpc1sw
XSApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB3cmFwLm1hcChmdW5jdGlvbigpIHsK
KyAgICAgICAgICAgICAgICB2YXIgZWxlbSA9IHRoaXM7CisKKyAgICAgICAgICAgICAgICB3aGls
ZSAoIGVsZW0uZmlyc3RDaGlsZCAmJiBlbGVtLmZpcnN0Q2hpbGQubm9kZVR5cGUgPT09IDEgKSB7
CisgICAgICAgICAgICAgICAgICAgIGVsZW0gPSBlbGVtLmZpcnN0Q2hpbGQ7CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW07CisgICAgICAgICAgICB9KS5h
cHBlbmQoIHRoaXMgKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0aGlzOworICAgIH0s
CisKKyAgICB3cmFwSW5uZXI6IGZ1bmN0aW9uKCBodG1sICkgeworICAgICAgICBpZiAoIGpRdWVy
eS5pc0Z1bmN0aW9uKCBodG1sICkgKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1
bmN0aW9uKGkpIHsKKyAgICAgICAgICAgICAgICBqUXVlcnkodGhpcykud3JhcElubmVyKCBodG1s
LmNhbGwodGhpcywgaSkgKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisKKyAgICAgICAg
cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHZhciBzZWxmID0galF1
ZXJ5KCB0aGlzICksCisgICAgICAgICAgICAgICAgY29udGVudHMgPSBzZWxmLmNvbnRlbnRzKCk7
CisKKyAgICAgICAgICAgIGlmICggY29udGVudHMubGVuZ3RoICkgeworICAgICAgICAgICAgICAg
IGNvbnRlbnRzLndyYXBBbGwoIGh0bWwgKTsKKworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBzZWxmLmFwcGVuZCggaHRtbCApOworICAgICAgICAgICAgfQorICAgICAgICB9
KTsKKyAgICB9LAorCisgICAgd3JhcDogZnVuY3Rpb24oIGh0bWwgKSB7CisgICAgICAgIHZhciBp
c0Z1bmN0aW9uID0galF1ZXJ5LmlzRnVuY3Rpb24oIGh0bWwgKTsKKworICAgICAgICByZXR1cm4g
dGhpcy5lYWNoKGZ1bmN0aW9uKGkpIHsKKyAgICAgICAgICAgIGpRdWVyeSggdGhpcyApLndyYXBB
bGwoIGlzRnVuY3Rpb24gPyBodG1sLmNhbGwodGhpcywgaSkgOiBodG1sICk7CisgICAgICAgIH0p
OworICAgIH0sCisKKyAgICB1bndyYXA6IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhp
cy5wYXJlbnQoKS5lYWNoKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgaWYgKCAhalF1ZXJ5Lm5v
ZGVOYW1lKCB0aGlzLCAiYm9keSIgKSApIHsKKyAgICAgICAgICAgICAgICBqUXVlcnkoIHRoaXMg
KS5yZXBsYWNlV2l0aCggdGhpcy5jaGlsZE5vZGVzICk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0pLmVuZCgpOworICAgIH0sCisKKyAgICBhcHBlbmQ6IGZ1bmN0aW9uKCkgeworICAgICAgICBy
ZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsIHRydWUsIGZ1bmN0aW9uKCBlbGVtICkgewor
ICAgICAgICAgICAgaWYgKCB0aGlzLm5vZGVUeXBlID09PSAxIHx8IHRoaXMubm9kZVR5cGUgPT09
IDExICkgeworICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kQ2hpbGQoIGVsZW0gKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfSwKKworICAgIHByZXBlbmQ6IGZ1bmN0aW9uKCkg
eworICAgICAgICByZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsIHRydWUsIGZ1bmN0aW9u
KCBlbGVtICkgeworICAgICAgICAgICAgaWYgKCB0aGlzLm5vZGVUeXBlID09PSAxIHx8IHRoaXMu
bm9kZVR5cGUgPT09IDExICkgeworICAgICAgICAgICAgICAgIHRoaXMuaW5zZXJ0QmVmb3JlKCBl
bGVtLCB0aGlzLmZpcnN0Q2hpbGQgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAg
fSwKKworICAgIGJlZm9yZTogZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICggIWlzRGlzY29ubmVj
dGVkKCB0aGlzWzBdICkgKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1
bWVudHMsIGZhbHNlLCBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgICAgICB0aGlzLnBh
cmVudE5vZGUuaW5zZXJ0QmVmb3JlKCBlbGVtLCB0aGlzICk7CisgICAgICAgICAgICB9KTsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmICggYXJndW1lbnRzLmxlbmd0aCApIHsKKyAgICAgICAgICAg
IHZhciBzZXQgPSBqUXVlcnkuY2xlYW4oIGFyZ3VtZW50cyApOworICAgICAgICAgICAgcmV0dXJu
IHRoaXMucHVzaFN0YWNrKCBqUXVlcnkubWVyZ2UoIHNldCwgdGhpcyApLCAiYmVmb3JlIiwgdGhp
cy5zZWxlY3RvciApOworICAgICAgICB9CisgICAgfSwKKworICAgIGFmdGVyOiBmdW5jdGlvbigp
IHsKKyAgICAgICAgaWYgKCAhaXNEaXNjb25uZWN0ZWQoIHRoaXNbMF0gKSApIHsKKyAgICAgICAg
ICAgIHJldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cywgZmFsc2UsIGZ1bmN0aW9uKCBlbGVt
ICkgeworICAgICAgICAgICAgICAgIHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoIGVsZW0s
IHRoaXMubmV4dFNpYmxpbmcgKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKCBhcmd1bWVudHMubGVuZ3RoICkgeworICAgICAgICAgICAgdmFyIHNldCA9IGpRdWVy
eS5jbGVhbiggYXJndW1lbnRzICk7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5wdXNoU3RhY2so
IGpRdWVyeS5tZXJnZSggdGhpcywgc2V0ICksICJhZnRlciIsIHRoaXMuc2VsZWN0b3IgKTsKKyAg
ICAgICAgfQorICAgIH0sCisKKyAgICAvLyBrZWVwRGF0YSBpcyBmb3IgaW50ZXJuYWwgdXNlIG9u
bHktLWRvIG5vdCBkb2N1bWVudAorICAgIHJlbW92ZTogZnVuY3Rpb24oIHNlbGVjdG9yLCBrZWVw
RGF0YSApIHsKKyAgICAgICAgdmFyIGVsZW0sCisgICAgICAgICAgICBpID0gMDsKKworICAgICAg
ICBmb3IgKCA7IChlbGVtID0gdGhpc1tpXSkgIT0gbnVsbDsgaSsrICkgeworICAgICAgICAgICAg
aWYgKCAhc2VsZWN0b3IgfHwgalF1ZXJ5LmZpbHRlciggc2VsZWN0b3IsIFsgZWxlbSBdICkubGVu
Z3RoICkgeworICAgICAgICAgICAgICAgIGlmICggIWtlZXBEYXRhICYmIGVsZW0ubm9kZVR5cGUg
PT09IDEgKSB7CisgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5jbGVhbkRhdGEoIGVsZW0uZ2V0
RWxlbWVudHNCeVRhZ05hbWUoIioiKSApOworICAgICAgICAgICAgICAgICAgICBqUXVlcnkuY2xl
YW5EYXRhKCBbIGVsZW0gXSApOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
IGlmICggZWxlbS5wYXJlbnROb2RlICkgeworICAgICAgICAgICAgICAgICAgICBlbGVtLnBhcmVu
dE5vZGUucmVtb3ZlQ2hpbGQoIGVsZW0gKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9LAorCisgICAgZW1w
dHk6IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgZWxlbSwKKyAgICAgICAgICAgIGkgPSAwOwor
CisgICAgICAgIGZvciAoIDsgKGVsZW0gPSB0aGlzW2ldKSAhPSBudWxsOyBpKysgKSB7CisgICAg
ICAgICAgICAvLyBSZW1vdmUgZWxlbWVudCBub2RlcyBhbmQgcHJldmVudCBtZW1vcnkgbGVha3MK
KyAgICAgICAgICAgIGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHsKKyAgICAgICAgICAgICAg
ICBqUXVlcnkuY2xlYW5EYXRhKCBlbGVtLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikgKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gUmVtb3ZlIGFueSByZW1haW5pbmcgbm9kZXMK
KyAgICAgICAgICAgIHdoaWxlICggZWxlbS5maXJzdENoaWxkICkgeworICAgICAgICAgICAgICAg
IGVsZW0ucmVtb3ZlQ2hpbGQoIGVsZW0uZmlyc3RDaGlsZCApOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfSwKKworICAgIGNsb25lOiBmdW5j
dGlvbiggZGF0YUFuZEV2ZW50cywgZGVlcERhdGFBbmRFdmVudHMgKSB7CisgICAgICAgIGRhdGFB
bmRFdmVudHMgPSBkYXRhQW5kRXZlbnRzID09IG51bGwgPyBmYWxzZSA6IGRhdGFBbmRFdmVudHM7
CisgICAgICAgIGRlZXBEYXRhQW5kRXZlbnRzID0gZGVlcERhdGFBbmRFdmVudHMgPT0gbnVsbCA/
IGRhdGFBbmRFdmVudHMgOiBkZWVwRGF0YUFuZEV2ZW50czsKKworICAgICAgICByZXR1cm4gdGhp
cy5tYXAoIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiBqUXVlcnkuY2xvbmUoIHRo
aXMsIGRhdGFBbmRFdmVudHMsIGRlZXBEYXRhQW5kRXZlbnRzICk7CisgICAgICAgIH0pOworICAg
IH0sCisKKyAgICBodG1sOiBmdW5jdGlvbiggdmFsdWUgKSB7CisgICAgICAgIHJldHVybiBqUXVl
cnkuYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggdmFsdWUgKSB7CisgICAgICAgICAgICB2YXIgZWxl
bSA9IHRoaXNbMF0gfHwge30sCisgICAgICAgICAgICAgICAgaSA9IDAsCisgICAgICAgICAgICAg
ICAgbCA9IHRoaXMubGVuZ3RoOworCisgICAgICAgICAgICBpZiAoIHZhbHVlID09PSB1bmRlZmlu
ZWQgKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0ubm9kZVR5cGUgPT09IDEgPworICAg
ICAgICAgICAgICAgICAgICBlbGVtLmlubmVySFRNTC5yZXBsYWNlKCByaW5saW5lalF1ZXJ5LCAi
IiApIDoKKyAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAvLyBTZWUgaWYgd2UgY2FuIHRha2UgYSBzaG9ydGN1dCBhbmQganVzdCB1c2Ug
aW5uZXJIVE1MCisgICAgICAgICAgICBpZiAoIHR5cGVvZiB2YWx1ZSA9PT0gInN0cmluZyIgJiYg
IXJub0lubmVyaHRtbC50ZXN0KCB2YWx1ZSApICYmCisgICAgICAgICAgICAgICAgKCBqUXVlcnku
c3VwcG9ydC5odG1sU2VyaWFsaXplIHx8ICFybm9zaGltY2FjaGUudGVzdCggdmFsdWUgKSAgKSAm
JgorICAgICAgICAgICAgICAgICggalF1ZXJ5LnN1cHBvcnQubGVhZGluZ1doaXRlc3BhY2UgfHwg
IXJsZWFkaW5nV2hpdGVzcGFjZS50ZXN0KCB2YWx1ZSApICkgJiYKKyAgICAgICAgICAgICAgICAh
d3JhcE1hcFsgKCBydGFnTmFtZS5leGVjKCB2YWx1ZSApIHx8IFsiIiwgIiJdIClbMV0udG9Mb3dl
ckNhc2UoKSBdICkgeworCisgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKCBy
eGh0bWxUYWcsICI8JDE+PC8kMj4iICk7CisKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAg
ICAgICAgICAgICAgICBmb3IgKDsgaSA8IGw7IGkrKyApIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIFJlbW92ZSBlbGVtZW50IG5vZGVzIGFuZCBwcmV2ZW50IG1lbW9yeSBsZWFrcworICAg
ICAgICAgICAgICAgICAgICAgICAgZWxlbSA9IHRoaXNbaV0gfHwge307CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgalF1ZXJ5LmNsZWFuRGF0YSggZWxlbS5nZXRFbGVtZW50c0J5VGFnTmFtZSgg
IioiICkgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLmlubmVySFRNTCA9IHZh
bHVlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICAgICAgZWxlbSA9IDA7CisKKyAgICAgICAgICAgICAgICAvLyBJZiB1
c2luZyBpbm5lckhUTUwgdGhyb3dzIGFuIGV4Y2VwdGlvbiwgdXNlIHRoZSBmYWxsYmFjayBtZXRo
b2QKKyAgICAgICAgICAgICAgICB9IGNhdGNoKGUpIHt9CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGlmICggZWxlbSApIHsKKyAgICAgICAgICAgICAgICB0aGlzLmVtcHR5KCkuYXBwZW5k
KCB2YWx1ZSApOworICAgICAgICAgICAgfQorICAgICAgICB9LCBudWxsLCB2YWx1ZSwgYXJndW1l
bnRzLmxlbmd0aCApOworICAgIH0sCisKKyAgICByZXBsYWNlV2l0aDogZnVuY3Rpb24oIHZhbHVl
ICkgeworICAgICAgICBpZiAoICFpc0Rpc2Nvbm5lY3RlZCggdGhpc1swXSApICkgeworICAgICAg
ICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIGVsZW1lbnRzIGFyZSByZW1vdmVkIGZyb20gdGhl
IERPTSBiZWZvcmUgdGhleSBhcmUgaW5zZXJ0ZWQKKyAgICAgICAgICAgIC8vIHRoaXMgY2FuIGhl
bHAgZml4IHJlcGxhY2luZyBhIHBhcmVudCB3aXRoIGNoaWxkIGVsZW1lbnRzCisgICAgICAgICAg
ICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCB2YWx1ZSApICkgeworICAgICAgICAgICAgICAgIHJl
dHVybiB0aGlzLmVhY2goZnVuY3Rpb24oaSkgeworICAgICAgICAgICAgICAgICAgICB2YXIgc2Vs
ZiA9IGpRdWVyeSh0aGlzKSwgb2xkID0gc2VsZi5odG1sKCk7CisgICAgICAgICAgICAgICAgICAg
IHNlbGYucmVwbGFjZVdpdGgoIHZhbHVlLmNhbGwoIHRoaXMsIGksIG9sZCApICk7CisgICAgICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICggdHlwZW9mIHZh
bHVlICE9PSAic3RyaW5nIiApIHsKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGpRdWVyeSggdmFs
dWUgKS5kZXRhY2goKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIHRoaXMu
ZWFjaChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICB2YXIgbmV4dCA9IHRoaXMubmV4dFNp
YmxpbmcsCisgICAgICAgICAgICAgICAgICAgIHBhcmVudCA9IHRoaXMucGFyZW50Tm9kZTsKKwor
ICAgICAgICAgICAgICAgIGpRdWVyeSggdGhpcyApLnJlbW92ZSgpOworCisgICAgICAgICAgICAg
ICAgaWYgKCBuZXh0ICkgeworICAgICAgICAgICAgICAgICAgICBqUXVlcnkobmV4dCkuYmVmb3Jl
KCB2YWx1ZSApOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
IGpRdWVyeShwYXJlbnQpLmFwcGVuZCggdmFsdWUgKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9KTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0aGlzLmxlbmd0aCA/Cisg
ICAgICAgICAgICB0aGlzLnB1c2hTdGFjayggalF1ZXJ5KGpRdWVyeS5pc0Z1bmN0aW9uKHZhbHVl
KSA/IHZhbHVlKCkgOiB2YWx1ZSksICJyZXBsYWNlV2l0aCIsIHZhbHVlICkgOgorICAgICAgICAg
ICAgdGhpczsKKyAgICB9LAorCisgICAgZGV0YWNoOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7Cisg
ICAgICAgIHJldHVybiB0aGlzLnJlbW92ZSggc2VsZWN0b3IsIHRydWUgKTsKKyAgICB9LAorCisg
ICAgZG9tTWFuaXA6IGZ1bmN0aW9uKCBhcmdzLCB0YWJsZSwgY2FsbGJhY2sgKSB7CisKKyAgICAg
ICAgLy8gRmxhdHRlbiBhbnkgbmVzdGVkIGFycmF5cworICAgICAgICBhcmdzID0gW10uY29uY2F0
LmFwcGx5KCBbXSwgYXJncyApOworCisgICAgICAgIHZhciByZXN1bHRzLCBmaXJzdCwgZnJhZ21l
bnQsIGlOb0Nsb25lLAorICAgICAgICAgICAgaSA9IDAsCisgICAgICAgICAgICB2YWx1ZSA9IGFy
Z3NbMF0sCisgICAgICAgICAgICBzY3JpcHRzID0gW10sCisgICAgICAgICAgICBsID0gdGhpcy5s
ZW5ndGg7CisKKyAgICAgICAgLy8gV2UgY2FuJ3QgY2xvbmVOb2RlIGZyYWdtZW50cyB0aGF0IGNv
bnRhaW4gY2hlY2tlZCwgaW4gV2ViS2l0CisgICAgICAgIGlmICggIWpRdWVyeS5zdXBwb3J0LmNo
ZWNrQ2xvbmUgJiYgbCA+IDEgJiYgdHlwZW9mIHZhbHVlID09PSAic3RyaW5nIiAmJiByY2hlY2tl
ZC50ZXN0KCB2YWx1ZSApICkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlv
bigpIHsKKyAgICAgICAgICAgICAgICBqUXVlcnkodGhpcykuZG9tTWFuaXAoIGFyZ3MsIHRhYmxl
LCBjYWxsYmFjayApOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
IGpRdWVyeS5pc0Z1bmN0aW9uKHZhbHVlKSApIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLmVh
Y2goZnVuY3Rpb24oaSkgeworICAgICAgICAgICAgICAgIHZhciBzZWxmID0galF1ZXJ5KHRoaXMp
OworICAgICAgICAgICAgICAgIGFyZ3NbMF0gPSB2YWx1ZS5jYWxsKCB0aGlzLCBpLCB0YWJsZSA/
IHNlbGYuaHRtbCgpIDogdW5kZWZpbmVkICk7CisgICAgICAgICAgICAgICAgc2VsZi5kb21NYW5p
cCggYXJncywgdGFibGUsIGNhbGxiYWNrICk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQor
CisgICAgICAgIGlmICggdGhpc1swXSApIHsKKyAgICAgICAgICAgIHJlc3VsdHMgPSBqUXVlcnku
YnVpbGRGcmFnbWVudCggYXJncywgdGhpcywgc2NyaXB0cyApOworICAgICAgICAgICAgZnJhZ21l
bnQgPSByZXN1bHRzLmZyYWdtZW50OworICAgICAgICAgICAgZmlyc3QgPSBmcmFnbWVudC5maXJz
dENoaWxkOworCisgICAgICAgICAgICBpZiAoIGZyYWdtZW50LmNoaWxkTm9kZXMubGVuZ3RoID09
PSAxICkgeworICAgICAgICAgICAgICAgIGZyYWdtZW50ID0gZmlyc3Q7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGlmICggZmlyc3QgKSB7CisgICAgICAgICAgICAgICAgdGFibGUgPSB0
YWJsZSAmJiBqUXVlcnkubm9kZU5hbWUoIGZpcnN0LCAidHIiICk7CisKKyAgICAgICAgICAgICAg
ICAvLyBVc2UgdGhlIG9yaWdpbmFsIGZyYWdtZW50IGZvciB0aGUgbGFzdCBpdGVtIGluc3RlYWQg
b2YgdGhlIGZpcnN0IGJlY2F1c2UgaXQgY2FuIGVuZCB1cAorICAgICAgICAgICAgICAgIC8vIGJl
aW5nIGVtcHRpZWQgaW5jb3JyZWN0bHkgaW4gY2VydGFpbiBzaXR1YXRpb25zICgjODA3MCkuCisg
ICAgICAgICAgICAgICAgLy8gRnJhZ21lbnRzIGZyb20gdGhlIGZyYWdtZW50IGNhY2hlIG11c3Qg
YWx3YXlzIGJlIGNsb25lZCBhbmQgbmV2ZXIgdXNlZCBpbiBwbGFjZS4KKyAgICAgICAgICAgICAg
ICBmb3IgKCBpTm9DbG9uZSA9IHJlc3VsdHMuY2FjaGVhYmxlIHx8IGwgLSAxOyBpIDwgbDsgaSsr
ICkgeworICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5jYWxsKAorICAgICAgICAgICAgICAg
ICAgICAgICAgdGFibGUgJiYgalF1ZXJ5Lm5vZGVOYW1lKCB0aGlzW2ldLCAidGFibGUiICkgPwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmRPckFwcGVuZCggdGhpc1tpXSwgInRib2R5
IiApIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzW2ldLAorICAgICAgICAgICAg
ICAgICAgICAgICAgaSA9PT0gaU5vQ2xvbmUgPworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZyYWdtZW50IDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuY2xvbmUoIGZy
YWdtZW50LCB0cnVlLCB0cnVlICkKKyAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEZpeCAjMTE4MDk6IEF2b2lk
IGxlYWtpbmcgbWVtb3J5CisgICAgICAgICAgICBmcmFnbWVudCA9IGZpcnN0ID0gbnVsbDsKKwor
ICAgICAgICAgICAgaWYgKCBzY3JpcHRzLmxlbmd0aCApIHsKKyAgICAgICAgICAgICAgICBqUXVl
cnkuZWFjaCggc2NyaXB0cywgZnVuY3Rpb24oIGksIGVsZW0gKSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmICggZWxlbS5zcmMgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGpRdWVy
eS5hamF4ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5hamF4KHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBlbGVtLnNyYywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdHlwZTogIkdFVCIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRhdGFUeXBlOiAic2NyaXB0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYXN5bmM6IGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9i
YWw6IGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGhyb3dzIjogdHJ1
ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXJyb3IoIm5v
IGFqYXgiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5nbG9iYWxFdmFsKCAoIGVs
ZW0udGV4dCB8fCBlbGVtLnRleHRDb250ZW50IHx8IGVsZW0uaW5uZXJIVE1MIHx8ICIiICkucmVw
bGFjZSggcmNsZWFuU2NyaXB0LCAiIiApICk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgICAgICBpZiAoIGVsZW0ucGFyZW50Tm9kZSApIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGVsZW0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggZWxlbSApOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9Cit9KTsKKworZnVuY3Rpb24gZmluZE9y
QXBwZW5kKCBlbGVtLCB0YWcgKSB7CisgICAgcmV0dXJuIGVsZW0uZ2V0RWxlbWVudHNCeVRhZ05h
bWUoIHRhZyApWzBdIHx8IGVsZW0uYXBwZW5kQ2hpbGQoIGVsZW0ub3duZXJEb2N1bWVudC5jcmVh
dGVFbGVtZW50KCB0YWcgKSApOworfQorCitmdW5jdGlvbiBjbG9uZUNvcHlFdmVudCggc3JjLCBk
ZXN0ICkgeworCisgICAgaWYgKCBkZXN0Lm5vZGVUeXBlICE9PSAxIHx8ICFqUXVlcnkuaGFzRGF0
YSggc3JjICkgKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB2YXIgdHlwZSwgaSwg
bCwKKyAgICAgICAgb2xkRGF0YSA9IGpRdWVyeS5fZGF0YSggc3JjICksCisgICAgICAgIGN1ckRh
dGEgPSBqUXVlcnkuX2RhdGEoIGRlc3QsIG9sZERhdGEgKSwKKyAgICAgICAgZXZlbnRzID0gb2xk
RGF0YS5ldmVudHM7CisKKyAgICBpZiAoIGV2ZW50cyApIHsKKyAgICAgICAgZGVsZXRlIGN1ckRh
dGEuaGFuZGxlOworICAgICAgICBjdXJEYXRhLmV2ZW50cyA9IHt9OworCisgICAgICAgIGZvciAo
IHR5cGUgaW4gZXZlbnRzICkgeworICAgICAgICAgICAgZm9yICggaSA9IDAsIGwgPSBldmVudHNb
IHR5cGUgXS5sZW5ndGg7IGkgPCBsOyBpKysgKSB7CisgICAgICAgICAgICAgICAgalF1ZXJ5LmV2
ZW50LmFkZCggZGVzdCwgdHlwZSwgZXZlbnRzWyB0eXBlIF1bIGkgXSApOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gbWFrZSB0aGUgY2xvbmVkIHB1YmxpYyBkYXRh
IG9iamVjdCBhIGNvcHkgZnJvbSB0aGUgb3JpZ2luYWwKKyAgICBpZiAoIGN1ckRhdGEuZGF0YSAp
IHsKKyAgICAgICAgY3VyRGF0YS5kYXRhID0galF1ZXJ5LmV4dGVuZCgge30sIGN1ckRhdGEuZGF0
YSApOworICAgIH0KK30KKworZnVuY3Rpb24gY2xvbmVGaXhBdHRyaWJ1dGVzKCBzcmMsIGRlc3Qg
KSB7CisgICAgdmFyIG5vZGVOYW1lOworCisgICAgLy8gV2UgZG8gbm90IG5lZWQgdG8gZG8gYW55
dGhpbmcgZm9yIG5vbi1FbGVtZW50cworICAgIGlmICggZGVzdC5ub2RlVHlwZSAhPT0gMSApIHsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIGNsZWFyQXR0cmlidXRlcyByZW1vdmVz
IHRoZSBhdHRyaWJ1dGVzLCB3aGljaCB3ZSBkb24ndCB3YW50LAorICAgIC8vIGJ1dCBhbHNvIHJl
bW92ZXMgdGhlIGF0dGFjaEV2ZW50IGV2ZW50cywgd2hpY2ggd2UgKmRvKiB3YW50CisgICAgaWYg
KCBkZXN0LmNsZWFyQXR0cmlidXRlcyApIHsKKyAgICAgICAgZGVzdC5jbGVhckF0dHJpYnV0ZXMo
KTsKKyAgICB9CisKKyAgICAvLyBtZXJnZUF0dHJpYnV0ZXMsIGluIGNvbnRyYXN0LCBvbmx5IG1l
cmdlcyBiYWNrIG9uIHRoZQorICAgIC8vIG9yaWdpbmFsIGF0dHJpYnV0ZXMsIG5vdCB0aGUgZXZl
bnRzCisgICAgaWYgKCBkZXN0Lm1lcmdlQXR0cmlidXRlcyApIHsKKyAgICAgICAgZGVzdC5tZXJn
ZUF0dHJpYnV0ZXMoIHNyYyApOworICAgIH0KKworICAgIG5vZGVOYW1lID0gZGVzdC5ub2RlTmFt
ZS50b0xvd2VyQ2FzZSgpOworCisgICAgaWYgKCBub2RlTmFtZSA9PT0gIm9iamVjdCIgKSB7Cisg
ICAgICAgIC8vIElFNi0xMCBpbXByb3Blcmx5IGNsb25lcyBjaGlsZHJlbiBvZiBvYmplY3QgZWxl
bWVudHMgdXNpbmcgY2xhc3NpZC4KKyAgICAgICAgLy8gSUUxMCB0aHJvd3MgTm9Nb2RpZmljYXRp
b25BbGxvd2VkRXJyb3IgaWYgcGFyZW50IGlzIG51bGwsICMxMjEzMi4KKyAgICAgICAgaWYgKCBk
ZXN0LnBhcmVudE5vZGUgKSB7CisgICAgICAgICAgICBkZXN0Lm91dGVySFRNTCA9IHNyYy5vdXRl
ckhUTUw7CisgICAgICAgIH0KKworICAgICAgICAvLyBUaGlzIHBhdGggYXBwZWFycyB1bmF2b2lk
YWJsZSBmb3IgSUU5LiBXaGVuIGNsb25pbmcgYW4gb2JqZWN0CisgICAgICAgIC8vIGVsZW1lbnQg
aW4gSUU5LCB0aGUgb3V0ZXJIVE1MIHN0cmF0ZWd5IGFib3ZlIGlzIG5vdCBzdWZmaWNpZW50Lgor
ICAgICAgICAvLyBJZiB0aGUgc3JjIGhhcyBpbm5lckhUTUwgYW5kIHRoZSBkZXN0aW5hdGlvbiBk
b2VzIG5vdCwKKyAgICAgICAgLy8gY29weSB0aGUgc3JjLmlubmVySFRNTCBpbnRvIHRoZSBkZXN0
LmlubmVySFRNTC4gIzEwMzI0CisgICAgICAgIGlmICggalF1ZXJ5LnN1cHBvcnQuaHRtbDVDbG9u
ZSAmJiAoc3JjLmlubmVySFRNTCAmJiAhalF1ZXJ5LnRyaW0oZGVzdC5pbm5lckhUTUwpKSApIHsK
KyAgICAgICAgICAgIGRlc3QuaW5uZXJIVE1MID0gc3JjLmlubmVySFRNTDsKKyAgICAgICAgfQor
CisgICAgfSBlbHNlIGlmICggbm9kZU5hbWUgPT09ICJpbnB1dCIgJiYgcmNoZWNrYWJsZVR5cGUu
dGVzdCggc3JjLnR5cGUgKSApIHsKKyAgICAgICAgLy8gSUU2LTggZmFpbHMgdG8gcGVyc2lzdCB0
aGUgY2hlY2tlZCBzdGF0ZSBvZiBhIGNsb25lZCBjaGVja2JveAorICAgICAgICAvLyBvciByYWRp
byBidXR0b24uIFdvcnNlLCBJRTYtNyBmYWlsIHRvIGdpdmUgdGhlIGNsb25lZCBlbGVtZW50Cisg
ICAgICAgIC8vIGEgY2hlY2tlZCBhcHBlYXJhbmNlIGlmIHRoZSBkZWZhdWx0Q2hlY2tlZCB2YWx1
ZSBpc24ndCBhbHNvIHNldAorCisgICAgICAgIGRlc3QuZGVmYXVsdENoZWNrZWQgPSBkZXN0LmNo
ZWNrZWQgPSBzcmMuY2hlY2tlZDsKKworICAgICAgICAvLyBJRTYtNyBnZXQgY29uZnVzZWQgYW5k
IGVuZCB1cCBzZXR0aW5nIHRoZSB2YWx1ZSBvZiBhIGNsb25lZAorICAgICAgICAvLyBjaGVja2Jv
eC9yYWRpbyBidXR0b24gdG8gYW4gZW1wdHkgc3RyaW5nIGluc3RlYWQgb2YgIm9uIgorICAgICAg
ICBpZiAoIGRlc3QudmFsdWUgIT09IHNyYy52YWx1ZSApIHsKKyAgICAgICAgICAgIGRlc3QudmFs
dWUgPSBzcmMudmFsdWU7CisgICAgICAgIH0KKworICAgIC8vIElFNi04IGZhaWxzIHRvIHJldHVy
biB0aGUgc2VsZWN0ZWQgb3B0aW9uIHRvIHRoZSBkZWZhdWx0IHNlbGVjdGVkCisgICAgLy8gc3Rh
dGUgd2hlbiBjbG9uaW5nIG9wdGlvbnMKKyAgICB9IGVsc2UgaWYgKCBub2RlTmFtZSA9PT0gIm9w
dGlvbiIgKSB7CisgICAgICAgIGRlc3Quc2VsZWN0ZWQgPSBzcmMuZGVmYXVsdFNlbGVjdGVkOwor
CisgICAgLy8gSUU2LTggZmFpbHMgdG8gc2V0IHRoZSBkZWZhdWx0VmFsdWUgdG8gdGhlIGNvcnJl
Y3QgdmFsdWUgd2hlbgorICAgIC8vIGNsb25pbmcgb3RoZXIgdHlwZXMgb2YgaW5wdXQgZmllbGRz
CisgICAgfSBlbHNlIGlmICggbm9kZU5hbWUgPT09ICJpbnB1dCIgfHwgbm9kZU5hbWUgPT09ICJ0
ZXh0YXJlYSIgKSB7CisgICAgICAgIGRlc3QuZGVmYXVsdFZhbHVlID0gc3JjLmRlZmF1bHRWYWx1
ZTsKKworICAgIC8vIElFIGJsYW5rcyBjb250ZW50cyB3aGVuIGNsb25pbmcgc2NyaXB0cworICAg
IH0gZWxzZSBpZiAoIG5vZGVOYW1lID09PSAic2NyaXB0IiAmJiBkZXN0LnRleHQgIT09IHNyYy50
ZXh0ICkgeworICAgICAgICBkZXN0LnRleHQgPSBzcmMudGV4dDsKKyAgICB9CisKKyAgICAvLyBF
dmVudCBkYXRhIGdldHMgcmVmZXJlbmNlZCBpbnN0ZWFkIG9mIGNvcGllZCBpZiB0aGUgZXhwYW5k
bworICAgIC8vIGdldHMgY29waWVkIHRvbworICAgIGRlc3QucmVtb3ZlQXR0cmlidXRlKCBqUXVl
cnkuZXhwYW5kbyApOworfQorCitqUXVlcnkuYnVpbGRGcmFnbWVudCA9IGZ1bmN0aW9uKCBhcmdz
LCBjb250ZXh0LCBzY3JpcHRzICkgeworICAgIHZhciBmcmFnbWVudCwgY2FjaGVhYmxlLCBjYWNo
ZWhpdCwKKyAgICAgICAgZmlyc3QgPSBhcmdzWyAwIF07CisKKyAgICAvLyBTZXQgY29udGV4dCBm
cm9tIHdoYXQgbWF5IGNvbWUgaW4gYXMgdW5kZWZpbmVkIG9yIGEgalF1ZXJ5IGNvbGxlY3Rpb24g
b3IgYSBub2RlCisgICAgLy8gVXBkYXRlZCB0byBmaXggIzEyMjY2IHdoZXJlIGFjY2Vzc2luZyBj
b250ZXh0WzBdIGNvdWxkIHRocm93IGFuIGV4Y2VwdGlvbiBpbiBJRTkvMTAgJgorICAgIC8vIGFs
c28gZG91YmxlcyBhcyBmaXggZm9yICM4OTUwIHdoZXJlIHBsYWluIG9iamVjdHMgY2F1c2VkIGNy
ZWF0ZURvY3VtZW50RnJhZ21lbnQgZXhjZXB0aW9uCisgICAgY29udGV4dCA9IGNvbnRleHQgfHwg
ZG9jdW1lbnQ7CisgICAgY29udGV4dCA9ICFjb250ZXh0Lm5vZGVUeXBlICYmIGNvbnRleHRbMF0g
fHwgY29udGV4dDsKKyAgICBjb250ZXh0ID0gY29udGV4dC5vd25lckRvY3VtZW50IHx8IGNvbnRl
eHQ7CisKKyAgICAvLyBPbmx5IGNhY2hlICJzbWFsbCIgKDEvMiBLQikgSFRNTCBzdHJpbmdzIHRo
YXQgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgbWFpbiBkb2N1bWVudAorICAgIC8vIENsb25pbmcg
b3B0aW9ucyBsb3NlcyB0aGUgc2VsZWN0ZWQgc3RhdGUsIHNvIGRvbid0IGNhY2hlIHRoZW0KKyAg
ICAvLyBJRSA2IGRvZXNuJ3QgbGlrZSBpdCB3aGVuIHlvdSBwdXQgPG9iamVjdD4gb3IgPGVtYmVk
PiBlbGVtZW50cyBpbiBhIGZyYWdtZW50CisgICAgLy8gQWxzbywgV2ViS2l0IGRvZXMgbm90IGNs
b25lICdjaGVja2VkJyBhdHRyaWJ1dGVzIG9uIGNsb25lTm9kZSwgc28gZG9uJ3QgY2FjaGUKKyAg
ICAvLyBMYXN0bHksIElFNiw3LDggd2lsbCBub3QgY29ycmVjdGx5IHJldXNlIGNhY2hlZCBmcmFn
bWVudHMgdGhhdCB3ZXJlIGNyZWF0ZWQgZnJvbSB1bmtub3duIGVsZW1zICMxMDUwMQorICAgIGlm
ICggYXJncy5sZW5ndGggPT09IDEgJiYgdHlwZW9mIGZpcnN0ID09PSAic3RyaW5nIiAmJiBmaXJz
dC5sZW5ndGggPCA1MTIgJiYgY29udGV4dCA9PT0gZG9jdW1lbnQgJiYKKyAgICAgICAgZmlyc3Qu
Y2hhckF0KDApID09PSAiPCIgJiYgIXJub2NhY2hlLnRlc3QoIGZpcnN0ICkgJiYKKyAgICAgICAg
KGpRdWVyeS5zdXBwb3J0LmNoZWNrQ2xvbmUgfHwgIXJjaGVja2VkLnRlc3QoIGZpcnN0ICkpICYm
CisgICAgICAgIChqUXVlcnkuc3VwcG9ydC5odG1sNUNsb25lIHx8ICFybm9zaGltY2FjaGUudGVz
dCggZmlyc3QgKSkgKSB7CisKKyAgICAgICAgLy8gTWFyayBjYWNoZWFibGUgYW5kIGxvb2sgZm9y
IGEgaGl0CisgICAgICAgIGNhY2hlYWJsZSA9IHRydWU7CisgICAgICAgIGZyYWdtZW50ID0galF1
ZXJ5LmZyYWdtZW50c1sgZmlyc3QgXTsKKyAgICAgICAgY2FjaGVoaXQgPSBmcmFnbWVudCAhPT0g
dW5kZWZpbmVkOworICAgIH0KKworICAgIGlmICggIWZyYWdtZW50ICkgeworICAgICAgICBmcmFn
bWVudCA9IGNvbnRleHQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOworICAgICAgICBqUXVlcnku
Y2xlYW4oIGFyZ3MsIGNvbnRleHQsIGZyYWdtZW50LCBzY3JpcHRzICk7CisKKyAgICAgICAgLy8g
VXBkYXRlIHRoZSBjYWNoZSwgYnV0IG9ubHkgc3RvcmUgZmFsc2UKKyAgICAgICAgLy8gdW5sZXNz
IHRoaXMgaXMgYSBzZWNvbmQgcGFyc2luZyBvZiB0aGUgc2FtZSBjb250ZW50CisgICAgICAgIGlm
ICggY2FjaGVhYmxlICkgeworICAgICAgICAgICAgalF1ZXJ5LmZyYWdtZW50c1sgZmlyc3QgXSA9
IGNhY2hlaGl0ICYmIGZyYWdtZW50OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHsg
ZnJhZ21lbnQ6IGZyYWdtZW50LCBjYWNoZWFibGU6IGNhY2hlYWJsZSB9OworfTsKKworalF1ZXJ5
LmZyYWdtZW50cyA9IHt9OworCitqUXVlcnkuZWFjaCh7CisgICAgYXBwZW5kVG86ICJhcHBlbmQi
LAorICAgIHByZXBlbmRUbzogInByZXBlbmQiLAorICAgIGluc2VydEJlZm9yZTogImJlZm9yZSIs
CisgICAgaW5zZXJ0QWZ0ZXI6ICJhZnRlciIsCisgICAgcmVwbGFjZUFsbDogInJlcGxhY2VXaXRo
IgorfSwgZnVuY3Rpb24oIG5hbWUsIG9yaWdpbmFsICkgeworICAgIGpRdWVyeS5mblsgbmFtZSBd
ID0gZnVuY3Rpb24oIHNlbGVjdG9yICkgeworICAgICAgICB2YXIgZWxlbXMsCisgICAgICAgICAg
ICBpID0gMCwKKyAgICAgICAgICAgIHJldCA9IFtdLAorICAgICAgICAgICAgaW5zZXJ0ID0galF1
ZXJ5KCBzZWxlY3RvciApLAorICAgICAgICAgICAgbCA9IGluc2VydC5sZW5ndGgsCisgICAgICAg
ICAgICBwYXJlbnQgPSB0aGlzLmxlbmd0aCA9PT0gMSAmJiB0aGlzWzBdLnBhcmVudE5vZGU7CisK
KyAgICAgICAgaWYgKCAocGFyZW50ID09IG51bGwgfHwgcGFyZW50ICYmIHBhcmVudC5ub2RlVHlw
ZSA9PT0gMTEgJiYgcGFyZW50LmNoaWxkTm9kZXMubGVuZ3RoID09PSAxKSAmJiBsID09PSAxICkg
eworICAgICAgICAgICAgaW5zZXJ0WyBvcmlnaW5hbCBdKCB0aGlzWzBdICk7CisgICAgICAgICAg
ICByZXR1cm4gdGhpczsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZvciAoIDsgaSA8
IGw7IGkrKyApIHsKKyAgICAgICAgICAgICAgICBlbGVtcyA9ICggaSA+IDAgPyB0aGlzLmNsb25l
KHRydWUpIDogdGhpcyApLmdldCgpOworICAgICAgICAgICAgICAgIGpRdWVyeSggaW5zZXJ0W2ld
IClbIG9yaWdpbmFsIF0oIGVsZW1zICk7CisgICAgICAgICAgICAgICAgcmV0ID0gcmV0LmNvbmNh
dCggZWxlbXMgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIHRoaXMucHVz
aFN0YWNrKCByZXQsIG5hbWUsIGluc2VydC5zZWxlY3RvciApOworICAgICAgICB9CisgICAgfTsK
K30pOworCitmdW5jdGlvbiBnZXRBbGwoIGVsZW0gKSB7CisgICAgaWYgKCB0eXBlb2YgZWxlbS5n
ZXRFbGVtZW50c0J5VGFnTmFtZSAhPT0gInVuZGVmaW5lZCIgKSB7CisgICAgICAgIHJldHVybiBl
bGVtLmdldEVsZW1lbnRzQnlUYWdOYW1lKCAiKiIgKTsKKworICAgIH0gZWxzZSBpZiAoIHR5cGVv
ZiBlbGVtLnF1ZXJ5U2VsZWN0b3JBbGwgIT09ICJ1bmRlZmluZWQiICkgeworICAgICAgICByZXR1
cm4gZWxlbS5xdWVyeVNlbGVjdG9yQWxsKCAiKiIgKTsKKworICAgIH0gZWxzZSB7CisgICAgICAg
IHJldHVybiBbXTsKKyAgICB9Cit9CisKKy8vIFVzZWQgaW4gY2xlYW4sIGZpeGVzIHRoZSBkZWZh
dWx0Q2hlY2tlZCBwcm9wZXJ0eQorZnVuY3Rpb24gZml4RGVmYXVsdENoZWNrZWQoIGVsZW0gKSB7
CisgICAgaWYgKCByY2hlY2thYmxlVHlwZS50ZXN0KCBlbGVtLnR5cGUgKSApIHsKKyAgICAgICAg
ZWxlbS5kZWZhdWx0Q2hlY2tlZCA9IGVsZW0uY2hlY2tlZDsKKyAgICB9Cit9CisKK2pRdWVyeS5l
eHRlbmQoeworICAgIGNsb25lOiBmdW5jdGlvbiggZWxlbSwgZGF0YUFuZEV2ZW50cywgZGVlcERh
dGFBbmRFdmVudHMgKSB7CisgICAgICAgIHZhciBzcmNFbGVtZW50cywKKyAgICAgICAgICAgIGRl
c3RFbGVtZW50cywKKyAgICAgICAgICAgIGksCisgICAgICAgICAgICBjbG9uZTsKKworICAgICAg
ICBpZiAoIGpRdWVyeS5zdXBwb3J0Lmh0bWw1Q2xvbmUgfHwgalF1ZXJ5LmlzWE1MRG9jKGVsZW0p
IHx8ICFybm9zaGltY2FjaGUudGVzdCggIjwiICsgZWxlbS5ub2RlTmFtZSArICI+IiApICkgewor
ICAgICAgICAgICAgY2xvbmUgPSBlbGVtLmNsb25lTm9kZSggdHJ1ZSApOworCisgICAgICAgIC8v
IElFPD04IGRvZXMgbm90IHByb3Blcmx5IGNsb25lIGRldGFjaGVkLCB1bmtub3duIGVsZW1lbnQg
bm9kZXMKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZyYWdtZW50RGl2LmlubmVySFRN
TCA9IGVsZW0ub3V0ZXJIVE1MOworICAgICAgICAgICAgZnJhZ21lbnREaXYucmVtb3ZlQ2hpbGQo
IGNsb25lID0gZnJhZ21lbnREaXYuZmlyc3RDaGlsZCApOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKCAoIWpRdWVyeS5zdXBwb3J0Lm5vQ2xvbmVFdmVudCB8fCAhalF1ZXJ5LnN1cHBvcnQubm9D
bG9uZUNoZWNrZWQpICYmCisgICAgICAgICAgICAgICAgKGVsZW0ubm9kZVR5cGUgPT09IDEgfHwg
ZWxlbS5ub2RlVHlwZSA9PT0gMTEpICYmICFqUXVlcnkuaXNYTUxEb2MoZWxlbSkgKSB7CisgICAg
ICAgICAgICAvLyBJRSBjb3BpZXMgZXZlbnRzIGJvdW5kIHZpYSBhdHRhY2hFdmVudCB3aGVuIHVz
aW5nIGNsb25lTm9kZS4KKyAgICAgICAgICAgIC8vIENhbGxpbmcgZGV0YWNoRXZlbnQgb24gdGhl
IGNsb25lIHdpbGwgYWxzbyByZW1vdmUgdGhlIGV2ZW50cworICAgICAgICAgICAgLy8gZnJvbSB0
aGUgb3JpZ2luYWwuIEluIG9yZGVyIHRvIGdldCBhcm91bmQgdGhpcywgd2UgdXNlIHNvbWUKKyAg
ICAgICAgICAgIC8vIHByb3ByaWV0YXJ5IG1ldGhvZHMgdG8gY2xlYXIgdGhlIGV2ZW50cy4gVGhh
bmtzIHRvIE1vb1Rvb2xzCisgICAgICAgICAgICAvLyBndXlzIGZvciB0aGlzIGhvdG5lc3MuCisK
KyAgICAgICAgICAgIGNsb25lRml4QXR0cmlidXRlcyggZWxlbSwgY2xvbmUgKTsKKworICAgICAg
ICAgICAgLy8gVXNpbmcgU2l6emxlIGhlcmUgaXMgY3Jhenkgc2xvdywgc28gd2UgdXNlIGdldEVs
ZW1lbnRzQnlUYWdOYW1lIGluc3RlYWQKKyAgICAgICAgICAgIHNyY0VsZW1lbnRzID0gZ2V0QWxs
KCBlbGVtICk7CisgICAgICAgICAgICBkZXN0RWxlbWVudHMgPSBnZXRBbGwoIGNsb25lICk7CisK
KyAgICAgICAgICAgIC8vIFdlaXJkIGl0ZXJhdGlvbiBiZWNhdXNlIElFIHdpbGwgcmVwbGFjZSB0
aGUgbGVuZ3RoIHByb3BlcnR5CisgICAgICAgICAgICAvLyB3aXRoIGFuIGVsZW1lbnQgaWYgeW91
IGFyZSBjbG9uaW5nIHRoZSBib2R5IGFuZCBvbmUgb2YgdGhlCisgICAgICAgICAgICAvLyBlbGVt
ZW50cyBvbiB0aGUgcGFnZSBoYXMgYSBuYW1lIG9yIGlkIG9mICJsZW5ndGgiCisgICAgICAgICAg
ICBmb3IgKCBpID0gMDsgc3JjRWxlbWVudHNbaV07ICsraSApIHsKKyAgICAgICAgICAgICAgICAv
LyBFbnN1cmUgdGhhdCB0aGUgZGVzdGluYXRpb24gbm9kZSBpcyBub3QgbnVsbDsgRml4ZXMgIzk1
ODcKKyAgICAgICAgICAgICAgICBpZiAoIGRlc3RFbGVtZW50c1tpXSApIHsKKyAgICAgICAgICAg
ICAgICAgICAgY2xvbmVGaXhBdHRyaWJ1dGVzKCBzcmNFbGVtZW50c1tpXSwgZGVzdEVsZW1lbnRz
W2ldICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgICAgLy8gQ29weSB0aGUgZXZlbnRzIGZyb20gdGhlIG9yaWdpbmFsIHRvIHRoZSBjbG9uZQor
ICAgICAgICBpZiAoIGRhdGFBbmRFdmVudHMgKSB7CisgICAgICAgICAgICBjbG9uZUNvcHlFdmVu
dCggZWxlbSwgY2xvbmUgKTsKKworICAgICAgICAgICAgaWYgKCBkZWVwRGF0YUFuZEV2ZW50cyAp
IHsKKyAgICAgICAgICAgICAgICBzcmNFbGVtZW50cyA9IGdldEFsbCggZWxlbSApOworICAgICAg
ICAgICAgICAgIGRlc3RFbGVtZW50cyA9IGdldEFsbCggY2xvbmUgKTsKKworICAgICAgICAgICAg
ICAgIGZvciAoIGkgPSAwOyBzcmNFbGVtZW50c1tpXTsgKytpICkgeworICAgICAgICAgICAgICAg
ICAgICBjbG9uZUNvcHlFdmVudCggc3JjRWxlbWVudHNbaV0sIGRlc3RFbGVtZW50c1tpXSApOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHNy
Y0VsZW1lbnRzID0gZGVzdEVsZW1lbnRzID0gbnVsbDsKKworICAgICAgICAvLyBSZXR1cm4gdGhl
IGNsb25lZCBzZXQKKyAgICAgICAgcmV0dXJuIGNsb25lOworICAgIH0sCisKKyAgICBjbGVhbjog
ZnVuY3Rpb24oIGVsZW1zLCBjb250ZXh0LCBmcmFnbWVudCwgc2NyaXB0cyApIHsKKyAgICAgICAg
dmFyIGksIGosIGVsZW0sIHRhZywgd3JhcCwgZGVwdGgsIGRpdiwgaGFzQm9keSwgdGJvZHksIGxl
biwgaGFuZGxlU2NyaXB0LCBqc1RhZ3MsCisgICAgICAgICAgICBzYWZlID0gY29udGV4dCA9PT0g
ZG9jdW1lbnQgJiYgc2FmZUZyYWdtZW50LAorICAgICAgICAgICAgcmV0ID0gW107CisKKyAgICAg
ICAgLy8gRW5zdXJlIHRoYXQgY29udGV4dCBpcyBhIGRvY3VtZW50CisgICAgICAgIGlmICggIWNv
bnRleHQgfHwgdHlwZW9mIGNvbnRleHQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCA9PT0gInVuZGVm
aW5lZCIgKSB7CisgICAgICAgICAgICBjb250ZXh0ID0gZG9jdW1lbnQ7CisgICAgICAgIH0KKwor
ICAgICAgICAvLyBVc2UgdGhlIGFscmVhZHktY3JlYXRlZCBzYWZlIGZyYWdtZW50IGlmIGNvbnRl
eHQgcGVybWl0cworICAgICAgICBmb3IgKCBpID0gMDsgKGVsZW0gPSBlbGVtc1tpXSkgIT0gbnVs
bDsgaSsrICkgeworICAgICAgICAgICAgaWYgKCB0eXBlb2YgZWxlbSA9PT0gIm51bWJlciIgKSB7
CisgICAgICAgICAgICAgICAgZWxlbSArPSAiIjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKCAhZWxlbSApIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgLy8gQ29udmVydCBodG1sIHN0cmluZyBpbnRvIERPTSBub2Rlcwor
ICAgICAgICAgICAgaWYgKCB0eXBlb2YgZWxlbSA9PT0gInN0cmluZyIgKSB7CisgICAgICAgICAg
ICAgICAgaWYgKCAhcmh0bWwudGVzdCggZWxlbSApICkgeworICAgICAgICAgICAgICAgICAgICBl
bGVtID0gY29udGV4dC5jcmVhdGVUZXh0Tm9kZSggZWxlbSApOworICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEVuc3VyZSBhIHNhZmUgY29udGFpbmVyIGlu
IHdoaWNoIHRvIHJlbmRlciB0aGUgaHRtbAorICAgICAgICAgICAgICAgICAgICBzYWZlID0gc2Fm
ZSB8fCBjcmVhdGVTYWZlRnJhZ21lbnQoIGNvbnRleHQgKTsKKyAgICAgICAgICAgICAgICAgICAg
ZGl2ID0gY29udGV4dC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICAgICAgICAgICAgICAgICAg
c2FmZS5hcHBlbmRDaGlsZCggZGl2ICk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gRml4ICJY
SFRNTCItc3R5bGUgdGFncyBpbiBhbGwgYnJvd3NlcnMKKyAgICAgICAgICAgICAgICAgICAgZWxl
bSA9IGVsZW0ucmVwbGFjZShyeGh0bWxUYWcsICI8JDE+PC8kMj4iKTsKKworICAgICAgICAgICAg
ICAgICAgICAvLyBHbyB0byBodG1sIGFuZCBiYWNrLCB0aGVuIHBlZWwgb2ZmIGV4dHJhIHdyYXBw
ZXJzCisgICAgICAgICAgICAgICAgICAgIHRhZyA9ICggcnRhZ05hbWUuZXhlYyggZWxlbSApIHx8
IFsiIiwgIiJdIClbMV0udG9Mb3dlckNhc2UoKTsKKyAgICAgICAgICAgICAgICAgICAgd3JhcCA9
IHdyYXBNYXBbIHRhZyBdIHx8IHdyYXBNYXAuX2RlZmF1bHQ7CisgICAgICAgICAgICAgICAgICAg
IGRlcHRoID0gd3JhcFswXTsKKyAgICAgICAgICAgICAgICAgICAgZGl2LmlubmVySFRNTCA9IHdy
YXBbMV0gKyBlbGVtICsgd3JhcFsyXTsKKworICAgICAgICAgICAgICAgICAgICAvLyBNb3ZlIHRv
IHRoZSByaWdodCBkZXB0aAorICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIGRlcHRoLS0gKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBkaXYgPSBkaXYubGFzdENoaWxkOworICAgICAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIElFJ3MgYXV0b2lu
c2VydGVkIDx0Ym9keT4gZnJvbSB0YWJsZSBmcmFnbWVudHMKKyAgICAgICAgICAgICAgICAgICAg
aWYgKCAhalF1ZXJ5LnN1cHBvcnQudGJvZHkgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vIFN0cmluZyB3YXMgYSA8dGFibGU+LCAqbWF5KiBoYXZlIHNwdXJpb3VzIDx0Ym9keT4KKyAg
ICAgICAgICAgICAgICAgICAgICAgIGhhc0JvZHkgPSBydGJvZHkudGVzdChlbGVtKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0Ym9keSA9IHRhZyA9PT0gInRhYmxlIiAmJiAhaGFzQm9k
eSA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpdi5maXJzdENoaWxkICYmIGRp
di5maXJzdENoaWxkLmNoaWxkTm9kZXMgOgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIFN0cmluZyB3YXMgYSBiYXJlIDx0aGVhZD4gb3IgPHRmb290PgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB3cmFwWzFdID09PSAiPHRhYmxlPiIgJiYgIWhhc0JvZHkgPwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2LmNoaWxkTm9kZXMgOgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW107CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGZvciAoIGogPSB0Ym9keS5sZW5ndGggLSAxOyBqID49IDAgOyAtLWogKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkubm9kZU5hbWUoIHRib2R5WyBqIF0s
ICJ0Ym9keSIgKSAmJiAhdGJvZHlbIGogXS5jaGlsZE5vZGVzLmxlbmd0aCApIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGJvZHlbIGogXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxk
KCB0Ym9keVsgaiBdICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICAgICAgLy8gSUUgY29tcGxldGVseSBraWxscyBsZWFkaW5nIHdoaXRlc3BhY2Ugd2hlbiBpbm5l
ckhUTUwgaXMgdXNlZAorICAgICAgICAgICAgICAgICAgICBpZiAoICFqUXVlcnkuc3VwcG9ydC5s
ZWFkaW5nV2hpdGVzcGFjZSAmJiBybGVhZGluZ1doaXRlc3BhY2UudGVzdCggZWxlbSApICkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgZGl2Lmluc2VydEJlZm9yZSggY29udGV4dC5jcmVhdGVU
ZXh0Tm9kZSggcmxlYWRpbmdXaGl0ZXNwYWNlLmV4ZWMoZWxlbSlbMF0gKSwgZGl2LmZpcnN0Q2hp
bGQgKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGVsZW0g
PSBkaXYuY2hpbGROb2RlczsKKworICAgICAgICAgICAgICAgICAgICAvLyBUYWtlIG91dCBvZiBm
cmFnbWVudCBjb250YWluZXIgKHdlIG5lZWQgYSBmcmVzaCBkaXYgZWFjaCB0aW1lKQorICAgICAg
ICAgICAgICAgICAgICBkaXYucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggZGl2ICk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIGVsZW0ubm9kZVR5
cGUgKSB7CisgICAgICAgICAgICAgICAgcmV0LnB1c2goIGVsZW0gKTsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgalF1ZXJ5Lm1lcmdlKCByZXQsIGVsZW0gKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIEZpeCAjMTEzNTY6IENsZWFyIGVsZW1l
bnRzIGZyb20gc2FmZUZyYWdtZW50CisgICAgICAgIGlmICggZGl2ICkgeworICAgICAgICAgICAg
ZWxlbSA9IGRpdiA9IHNhZmUgPSBudWxsOworICAgICAgICB9CisKKyAgICAgICAgLy8gUmVzZXQg
ZGVmYXVsdENoZWNrZWQgZm9yIGFueSByYWRpb3MgYW5kIGNoZWNrYm94ZXMKKyAgICAgICAgLy8g
YWJvdXQgdG8gYmUgYXBwZW5kZWQgdG8gdGhlIERPTSBpbiBJRSA2LzcgKCM4MDYwKQorICAgICAg
ICBpZiAoICFqUXVlcnkuc3VwcG9ydC5hcHBlbmRDaGVja2VkICkgeworICAgICAgICAgICAgZm9y
ICggaSA9IDA7IChlbGVtID0gcmV0W2ldKSAhPSBudWxsOyBpKysgKSB7CisgICAgICAgICAgICAg
ICAgaWYgKCBqUXVlcnkubm9kZU5hbWUoIGVsZW0sICJpbnB1dCIgKSApIHsKKyAgICAgICAgICAg
ICAgICAgICAgZml4RGVmYXVsdENoZWNrZWQoIGVsZW0gKTsKKyAgICAgICAgICAgICAgICB9IGVs
c2UgaWYgKCB0eXBlb2YgZWxlbS5nZXRFbGVtZW50c0J5VGFnTmFtZSAhPT0gInVuZGVmaW5lZCIg
KSB7CisgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5ncmVwKCBlbGVtLmdldEVsZW1lbnRzQnlU
YWdOYW1lKCJpbnB1dCIpLCBmaXhEZWZhdWx0Q2hlY2tlZCApOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIEFwcGVuZCBlbGVtZW50cyB0
byBhIHByb3ZpZGVkIGRvY3VtZW50IGZyYWdtZW50CisgICAgICAgIGlmICggZnJhZ21lbnQgKSB7
CisgICAgICAgICAgICAvLyBTcGVjaWFsIGhhbmRsaW5nIG9mIGVhY2ggc2NyaXB0IGVsZW1lbnQK
KyAgICAgICAgICAgIGhhbmRsZVNjcmlwdCA9IGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAg
ICAgICAgIC8vIENoZWNrIGlmIHdlIGNvbnNpZGVyIGl0IGV4ZWN1dGFibGUKKyAgICAgICAgICAg
ICAgICBpZiAoICFlbGVtLnR5cGUgfHwgcnNjcmlwdFR5cGUudGVzdCggZWxlbS50eXBlICkgKSB7
CisgICAgICAgICAgICAgICAgICAgIC8vIERldGFjaCB0aGUgc2NyaXB0IGFuZCBzdG9yZSBpdCBp
biB0aGUgc2NyaXB0cyBhcnJheSAoaWYgcHJvdmlkZWQpIG9yIHRoZSBmcmFnbWVudAorICAgICAg
ICAgICAgICAgICAgICAvLyBSZXR1cm4gdHJ1dGh5IHRvIGluZGljYXRlIHRoYXQgaXQgaGFzIGJl
ZW4gaGFuZGxlZAorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2NyaXB0cyA/CisgICAgICAg
ICAgICAgICAgICAgICAgICBzY3JpcHRzLnB1c2goIGVsZW0ucGFyZW50Tm9kZSA/IGVsZW0ucGFy
ZW50Tm9kZS5yZW1vdmVDaGlsZCggZWxlbSApIDogZWxlbSApIDoKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGZyYWdtZW50LmFwcGVuZENoaWxkKCBlbGVtICk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgZm9yICggaSA9IDA7IChlbGVtID0gcmV0W2ld
KSAhPSBudWxsOyBpKysgKSB7CisgICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgd2UncmUgZG9u
ZSBhZnRlciBoYW5kbGluZyBhbiBleGVjdXRhYmxlIHNjcmlwdAorICAgICAgICAgICAgICAgIGlm
ICggISggalF1ZXJ5Lm5vZGVOYW1lKCBlbGVtLCAic2NyaXB0IiApICYmIGhhbmRsZVNjcmlwdCgg
ZWxlbSApICkgKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEFwcGVuZCB0byBmcmFnbWVudCBh
bmQgaGFuZGxlIGVtYmVkZGVkIHNjcmlwdHMKKyAgICAgICAgICAgICAgICAgICAgZnJhZ21lbnQu
YXBwZW5kQ2hpbGQoIGVsZW0gKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCB0eXBlb2YgZWxl
bS5nZXRFbGVtZW50c0J5VGFnTmFtZSAhPT0gInVuZGVmaW5lZCIgKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBoYW5kbGVTY3JpcHQgYWx0ZXJzIHRoZSBET00sIHNvIHVzZSBqUXVlcnku
bWVyZ2UgdG8gZW5zdXJlIHNuYXBzaG90IGl0ZXJhdGlvbgorICAgICAgICAgICAgICAgICAgICAg
ICAganNUYWdzID0galF1ZXJ5LmdyZXAoIGpRdWVyeS5tZXJnZSggW10sIGVsZW0uZ2V0RWxlbWVu
dHNCeVRhZ05hbWUoInNjcmlwdCIpICksIGhhbmRsZVNjcmlwdCApOworCisgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBTcGxpY2UgdGhlIHNjcmlwdHMgaW50byByZXQgYWZ0ZXIgdGhlaXIgZm9y
bWVyIGFuY2VzdG9yIGFuZCBhZHZhbmNlIG91ciBpbmRleCBiZXlvbmQgdGhlbQorICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0LnNwbGljZS5hcHBseSggcmV0LCBbaSArIDEsIDBdLmNvbmNhdCgg
anNUYWdzICkgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGkgKz0ganNUYWdzLmxlbmd0aDsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZXQ7CisgICAgfSwKKworICAgIGNsZWFuRGF0
YTogZnVuY3Rpb24oIGVsZW1zLCAvKiBpbnRlcm5hbCAqLyBhY2NlcHREYXRhICkgeworICAgICAg
ICB2YXIgZGF0YSwgaWQsIGVsZW0sIHR5cGUsCisgICAgICAgICAgICBpID0gMCwKKyAgICAgICAg
ICAgIGludGVybmFsS2V5ID0galF1ZXJ5LmV4cGFuZG8sCisgICAgICAgICAgICBjYWNoZSA9IGpR
dWVyeS5jYWNoZSwKKyAgICAgICAgICAgIGRlbGV0ZUV4cGFuZG8gPSBqUXVlcnkuc3VwcG9ydC5k
ZWxldGVFeHBhbmRvLAorICAgICAgICAgICAgc3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFs
OworCisgICAgICAgIGZvciAoIDsgKGVsZW0gPSBlbGVtc1tpXSkgIT0gbnVsbDsgaSsrICkgewor
CisgICAgICAgICAgICBpZiAoIGFjY2VwdERhdGEgfHwgalF1ZXJ5LmFjY2VwdERhdGEoIGVsZW0g
KSApIHsKKworICAgICAgICAgICAgICAgIGlkID0gZWxlbVsgaW50ZXJuYWxLZXkgXTsKKyAgICAg
ICAgICAgICAgICBkYXRhID0gaWQgJiYgY2FjaGVbIGlkIF07CisKKyAgICAgICAgICAgICAgICBp
ZiAoIGRhdGEgKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICggZGF0YS5ldmVudHMgKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCB0eXBlIGluIGRhdGEuZXZlbnRzICkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggc3BlY2lhbFsgdHlwZSBdICkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQucmVtb3ZlKCBlbGVtLCB0eXBl
ICk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgc2hvcnRjdXQg
dG8gYXZvaWQgalF1ZXJ5LmV2ZW50LnJlbW92ZSdzIG92ZXJoZWFkCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1
ZXJ5LnJlbW92ZUV2ZW50KCBlbGVtLCB0eXBlLCBkYXRhLmhhbmRsZSApOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBjYWNoZSBvbmx5IGlm
IGl0IHdhcyBub3QgYWxyZWFkeSByZW1vdmVkIGJ5IGpRdWVyeS5ldmVudC5yZW1vdmUKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCBjYWNoZVsgaWQgXSApIHsKKworICAgICAgICAgICAgICAgICAg
ICAgICAgZGVsZXRlIGNhY2hlWyBpZCBdOworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBJ
RSBkb2VzIG5vdCBhbGxvdyB1cyB0byBkZWxldGUgZXhwYW5kbyBwcm9wZXJ0aWVzIGZyb20gbm9k
ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBub3IgZG9lcyBpdCBoYXZlIGEgcmVtb3Zl
QXR0cmlidXRlIGZ1bmN0aW9uIG9uIERvY3VtZW50IG5vZGVzOworICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gd2UgbXVzdCBoYW5kbGUgYWxsIG9mIHRoZXNlIGNhc2VzCisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIGRlbGV0ZUV4cGFuZG8gKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGVsZXRlIGVsZW1bIGludGVybmFsS2V5IF07CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0gZWxzZSBpZiAoIGVsZW0ucmVtb3ZlQXR0cmlidXRlICkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGVsZW0ucmVtb3ZlQXR0cmlidXRlKCBpbnRlcm5hbEtleSApOworCisgICAg
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGVsZW1bIGludGVybmFsS2V5IF0gPSBudWxsOworICAgICAgICAgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZGVsZXRlZElkcy5wdXNoKCBpZCApOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorfSk7CisvLyBMaW1pdCBzY29wZSBwb2xsdXRpb24gZnJvbSBhbnkg
ZGVwcmVjYXRlZCBBUEkKKyhmdW5jdGlvbigpIHsKKwordmFyIG1hdGNoZWQsIGJyb3dzZXI7CisK
Ky8vIFVzZSBvZiBqUXVlcnkuYnJvd3NlciBpcyBmcm93bmVkIHVwb24uCisvLyBNb3JlIGRldGFp
bHM6IGh0dHA6Ly9hcGkuanF1ZXJ5LmNvbS9qUXVlcnkuYnJvd3NlcgorLy8galF1ZXJ5LnVhTWF0
Y2ggbWFpbnRhaW5lZCBmb3IgYmFjay1jb21wYXQKK2pRdWVyeS51YU1hdGNoID0gZnVuY3Rpb24o
IHVhICkgeworICAgIHVhID0gdWEudG9Mb3dlckNhc2UoKTsKKworICAgIHZhciBtYXRjaCA9IC8o
Y2hyb21lKVsgXC9dKFtcdy5dKykvLmV4ZWMoIHVhICkgfHwKKyAgICAgICAgLyh3ZWJraXQpWyBc
L10oW1x3Ll0rKS8uZXhlYyggdWEgKSB8fAorICAgICAgICAvKG9wZXJhKSg/Oi4qdmVyc2lvbnwp
WyBcL10oW1x3Ll0rKS8uZXhlYyggdWEgKSB8fAorICAgICAgICAvKG1zaWUpIChbXHcuXSspLy5l
eGVjKCB1YSApIHx8CisgICAgICAgIHVhLmluZGV4T2YoImNvbXBhdGlibGUiKSA8IDAgJiYgLyht
b3ppbGxhKSg/Oi4qPyBydjooW1x3Ll0rKXwpLy5leGVjKCB1YSApIHx8CisgICAgICAgIFtdOwor
CisgICAgcmV0dXJuIHsKKyAgICAgICAgYnJvd3NlcjogbWF0Y2hbIDEgXSB8fCAiIiwKKyAgICAg
ICAgdmVyc2lvbjogbWF0Y2hbIDIgXSB8fCAiMCIKKyAgICB9OworfTsKKworbWF0Y2hlZCA9IGpR
dWVyeS51YU1hdGNoKCBuYXZpZ2F0b3IudXNlckFnZW50ICk7Citicm93c2VyID0ge307CisKK2lm
ICggbWF0Y2hlZC5icm93c2VyICkgeworICAgIGJyb3dzZXJbIG1hdGNoZWQuYnJvd3NlciBdID0g
dHJ1ZTsKKyAgICBicm93c2VyLnZlcnNpb24gPSBtYXRjaGVkLnZlcnNpb247Cit9CisKKy8vIENo
cm9tZSBpcyBXZWJraXQsIGJ1dCBXZWJraXQgaXMgYWxzbyBTYWZhcmkuCitpZiAoIGJyb3dzZXIu
Y2hyb21lICkgeworICAgIGJyb3dzZXIud2Via2l0ID0gdHJ1ZTsKK30gZWxzZSBpZiAoIGJyb3dz
ZXIud2Via2l0ICkgeworICAgIGJyb3dzZXIuc2FmYXJpID0gdHJ1ZTsKK30KKworalF1ZXJ5LmJy
b3dzZXIgPSBicm93c2VyOworCitqUXVlcnkuc3ViID0gZnVuY3Rpb24oKSB7CisgICAgZnVuY3Rp
b24galF1ZXJ5U3ViKCBzZWxlY3RvciwgY29udGV4dCApIHsKKyAgICAgICAgcmV0dXJuIG5ldyBq
UXVlcnlTdWIuZm4uaW5pdCggc2VsZWN0b3IsIGNvbnRleHQgKTsKKyAgICB9CisgICAgalF1ZXJ5
LmV4dGVuZCggdHJ1ZSwgalF1ZXJ5U3ViLCB0aGlzICk7CisgICAgalF1ZXJ5U3ViLnN1cGVyY2xh
c3MgPSB0aGlzOworICAgIGpRdWVyeVN1Yi5mbiA9IGpRdWVyeVN1Yi5wcm90b3R5cGUgPSB0aGlz
KCk7CisgICAgalF1ZXJ5U3ViLmZuLmNvbnN0cnVjdG9yID0galF1ZXJ5U3ViOworICAgIGpRdWVy
eVN1Yi5zdWIgPSB0aGlzLnN1YjsKKyAgICBqUXVlcnlTdWIuZm4uaW5pdCA9IGZ1bmN0aW9uIGlu
aXQoIHNlbGVjdG9yLCBjb250ZXh0ICkgeworICAgICAgICBpZiAoIGNvbnRleHQgJiYgY29udGV4
dCBpbnN0YW5jZW9mIGpRdWVyeSAmJiAhKGNvbnRleHQgaW5zdGFuY2VvZiBqUXVlcnlTdWIpICkg
eworICAgICAgICAgICAgY29udGV4dCA9IGpRdWVyeVN1YiggY29udGV4dCApOworICAgICAgICB9
CisKKyAgICAgICAgcmV0dXJuIGpRdWVyeS5mbi5pbml0LmNhbGwoIHRoaXMsIHNlbGVjdG9yLCBj
b250ZXh0LCByb290alF1ZXJ5U3ViICk7CisgICAgfTsKKyAgICBqUXVlcnlTdWIuZm4uaW5pdC5w
cm90b3R5cGUgPSBqUXVlcnlTdWIuZm47CisgICAgdmFyIHJvb3RqUXVlcnlTdWIgPSBqUXVlcnlT
dWIoZG9jdW1lbnQpOworICAgIHJldHVybiBqUXVlcnlTdWI7Cit9OworCit9KSgpOwordmFyIGN1
ckNTUywgaWZyYW1lLCBpZnJhbWVEb2MsCisgICAgcmFscGhhID0gL2FscGhhXChbXildKlwpL2ks
CisgICAgcm9wYWNpdHkgPSAvb3BhY2l0eT0oW14pXSopLywKKyAgICBycG9zaXRpb24gPSAvXih0
b3B8cmlnaHR8Ym90dG9tfGxlZnQpJC8sCisgICAgLy8gc3dhcHBhYmxlIGlmIGRpc3BsYXkgaXMg
bm9uZSBvciBzdGFydHMgd2l0aCB0YWJsZSBleGNlcHQgInRhYmxlIiwgInRhYmxlLWNlbGwiLCBv
ciAidGFibGUtY2FwdGlvbiIKKyAgICAvLyBzZWUgaGVyZSBmb3IgZGlzcGxheSB2YWx1ZXM6IGh0
dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvQ1NTL2Rpc3BsYXkKKyAgICBy
ZGlzcGxheXN3YXAgPSAvXihub25lfHRhYmxlKD8hLWNbZWFdKS4rKS8sCisgICAgcm1hcmdpbiA9
IC9ebWFyZ2luLywKKyAgICBybnVtc3BsaXQgPSBuZXcgUmVnRXhwKCAiXigiICsgY29yZV9wbnVt
ICsgIikoLiopJCIsICJpIiApLAorICAgIHJudW1ub25weCA9IG5ldyBSZWdFeHAoICJeKCIgKyBj
b3JlX3BudW0gKyAiKSg/IXB4KVthLXolXSskIiwgImkiICksCisgICAgcnJlbE51bSA9IG5ldyBS
ZWdFeHAoICJeKFstK10pPSgiICsgY29yZV9wbnVtICsgIikiLCAiaSIgKSwKKyAgICBlbGVtZGlz
cGxheSA9IHsgQk9EWTogImJsb2NrIiB9LAorCisgICAgY3NzU2hvdyA9IHsgcG9zaXRpb246ICJh
YnNvbHV0ZSIsIHZpc2liaWxpdHk6ICJoaWRkZW4iLCBkaXNwbGF5OiAiYmxvY2siIH0sCisgICAg
Y3NzTm9ybWFsVHJhbnNmb3JtID0geworICAgICAgICBsZXR0ZXJTcGFjaW5nOiAwLAorICAgICAg
ICBmb250V2VpZ2h0OiA0MDAKKyAgICB9LAorCisgICAgY3NzRXhwYW5kID0gWyAiVG9wIiwgIlJp
Z2h0IiwgIkJvdHRvbSIsICJMZWZ0IiBdLAorICAgIGNzc1ByZWZpeGVzID0gWyAiV2Via2l0Iiwg
Ik8iLCAiTW96IiwgIm1zIiBdLAorCisgICAgZXZlbnRzVG9nZ2xlID0galF1ZXJ5LmZuLnRvZ2ds
ZTsKKworLy8gcmV0dXJuIGEgY3NzIHByb3BlcnR5IG1hcHBlZCB0byBhIHBvdGVudGlhbGx5IHZl
bmRvciBwcmVmaXhlZCBwcm9wZXJ0eQorZnVuY3Rpb24gdmVuZG9yUHJvcE5hbWUoIHN0eWxlLCBu
YW1lICkgeworCisgICAgLy8gc2hvcnRjdXQgZm9yIG5hbWVzIHRoYXQgYXJlIG5vdCB2ZW5kb3Ig
cHJlZml4ZWQKKyAgICBpZiAoIG5hbWUgaW4gc3R5bGUgKSB7CisgICAgICAgIHJldHVybiBuYW1l
OworICAgIH0KKworICAgIC8vIGNoZWNrIGZvciB2ZW5kb3IgcHJlZml4ZWQgbmFtZXMKKyAgICB2
YXIgY2FwTmFtZSA9IG5hbWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBuYW1lLnNsaWNlKDEp
LAorICAgICAgICBvcmlnTmFtZSA9IG5hbWUsCisgICAgICAgIGkgPSBjc3NQcmVmaXhlcy5sZW5n
dGg7CisKKyAgICB3aGlsZSAoIGktLSApIHsKKyAgICAgICAgbmFtZSA9IGNzc1ByZWZpeGVzWyBp
IF0gKyBjYXBOYW1lOworICAgICAgICBpZiAoIG5hbWUgaW4gc3R5bGUgKSB7CisgICAgICAgICAg
ICByZXR1cm4gbmFtZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBvcmlnTmFtZTsK
K30KKworZnVuY3Rpb24gaXNIaWRkZW4oIGVsZW0sIGVsICkgeworICAgIGVsZW0gPSBlbCB8fCBl
bGVtOworICAgIHJldHVybiBqUXVlcnkuY3NzKCBlbGVtLCAiZGlzcGxheSIgKSA9PT0gIm5vbmUi
IHx8ICFqUXVlcnkuY29udGFpbnMoIGVsZW0ub3duZXJEb2N1bWVudCwgZWxlbSApOworfQorCitm
dW5jdGlvbiBzaG93SGlkZSggZWxlbWVudHMsIHNob3cgKSB7CisgICAgdmFyIGVsZW0sIGRpc3Bs
YXksCisgICAgICAgIHZhbHVlcyA9IFtdLAorICAgICAgICBpbmRleCA9IDAsCisgICAgICAgIGxl
bmd0aCA9IGVsZW1lbnRzLmxlbmd0aDsKKworICAgIGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGlu
ZGV4KysgKSB7CisgICAgICAgIGVsZW0gPSBlbGVtZW50c1sgaW5kZXggXTsKKyAgICAgICAgaWYg
KCAhZWxlbS5zdHlsZSApIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAg
ICAgIHZhbHVlc1sgaW5kZXggXSA9IGpRdWVyeS5fZGF0YSggZWxlbSwgIm9sZGRpc3BsYXkiICk7
CisgICAgICAgIGlmICggc2hvdyApIHsKKyAgICAgICAgICAgIC8vIFJlc2V0IHRoZSBpbmxpbmUg
ZGlzcGxheSBvZiB0aGlzIGVsZW1lbnQgdG8gbGVhcm4gaWYgaXQgaXMKKyAgICAgICAgICAgIC8v
IGJlaW5nIGhpZGRlbiBieSBjYXNjYWRlZCBydWxlcyBvciBub3QKKyAgICAgICAgICAgIGlmICgg
IXZhbHVlc1sgaW5kZXggXSAmJiBlbGVtLnN0eWxlLmRpc3BsYXkgPT09ICJub25lIiApIHsKKyAg
ICAgICAgICAgICAgICBlbGVtLnN0eWxlLmRpc3BsYXkgPSAiIjsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgLy8gU2V0IGVsZW1lbnRzIHdoaWNoIGhhdmUgYmVlbiBvdmVycmlkZGVuIHdp
dGggZGlzcGxheTogbm9uZQorICAgICAgICAgICAgLy8gaW4gYSBzdHlsZXNoZWV0IHRvIHdoYXRl
dmVyIHRoZSBkZWZhdWx0IGJyb3dzZXIgc3R5bGUgaXMKKyAgICAgICAgICAgIC8vIGZvciBzdWNo
IGFuIGVsZW1lbnQKKyAgICAgICAgICAgIGlmICggZWxlbS5zdHlsZS5kaXNwbGF5ID09PSAiIiAm
JiBpc0hpZGRlbiggZWxlbSApICkgeworICAgICAgICAgICAgICAgIHZhbHVlc1sgaW5kZXggXSA9
IGpRdWVyeS5fZGF0YSggZWxlbSwgIm9sZGRpc3BsYXkiLCBjc3NfZGVmYXVsdERpc3BsYXkoZWxl
bS5ub2RlTmFtZSkgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIGRpc3BsYXkgPSBjdXJDU1MoIGVsZW0sICJkaXNwbGF5IiApOworCisgICAgICAgICAgICBp
ZiAoICF2YWx1ZXNbIGluZGV4IF0gJiYgZGlzcGxheSAhPT0gIm5vbmUiICkgeworICAgICAgICAg
ICAgICAgIGpRdWVyeS5fZGF0YSggZWxlbSwgIm9sZGRpc3BsYXkiLCBkaXNwbGF5ICk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBTZXQgdGhlIGRpc3BsYXkgb2Yg
bW9zdCBvZiB0aGUgZWxlbWVudHMgaW4gYSBzZWNvbmQgbG9vcAorICAgIC8vIHRvIGF2b2lkIHRo
ZSBjb25zdGFudCByZWZsb3cKKyAgICBmb3IgKCBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBp
bmRleCsrICkgeworICAgICAgICBlbGVtID0gZWxlbWVudHNbIGluZGV4IF07CisgICAgICAgIGlm
ICggIWVsZW0uc3R5bGUgKSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAoICFzaG93IHx8IGVsZW0uc3R5bGUuZGlzcGxheSA9PT0gIm5vbmUiIHx8IGVsZW0u
c3R5bGUuZGlzcGxheSA9PT0gIiIgKSB7CisgICAgICAgICAgICBlbGVtLnN0eWxlLmRpc3BsYXkg
PSBzaG93ID8gdmFsdWVzWyBpbmRleCBdIHx8ICIiIDogIm5vbmUiOworICAgICAgICB9CisgICAg
fQorCisgICAgcmV0dXJuIGVsZW1lbnRzOworfQorCitqUXVlcnkuZm4uZXh0ZW5kKHsKKyAgICBj
c3M6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHsKKyAgICAgICAgcmV0dXJuIGpRdWVyeS5hY2Nl
c3MoIHRoaXMsIGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSApIHsKKyAgICAgICAgICAgIHJl
dHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkID8KKyAgICAgICAgICAgICAgICBqUXVlcnkuc3R5bGUo
IGVsZW0sIG5hbWUsIHZhbHVlICkgOgorICAgICAgICAgICAgICAgIGpRdWVyeS5jc3MoIGVsZW0s
IG5hbWUgKTsKKyAgICAgICAgfSwgbmFtZSwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxICk7
CisgICAgfSwKKyAgICBzaG93OiBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHNob3dIaWRl
KCB0aGlzLCB0cnVlICk7CisgICAgfSwKKyAgICBoaWRlOiBmdW5jdGlvbigpIHsKKyAgICAgICAg
cmV0dXJuIHNob3dIaWRlKCB0aGlzICk7CisgICAgfSwKKyAgICB0b2dnbGU6IGZ1bmN0aW9uKCBz
dGF0ZSwgZm4yICkgeworICAgICAgICB2YXIgYm9vbCA9IHR5cGVvZiBzdGF0ZSA9PT0gImJvb2xl
YW4iOworCisgICAgICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHN0YXRlICkgJiYgalF1ZXJ5
LmlzRnVuY3Rpb24oIGZuMiApICkgeworICAgICAgICAgICAgcmV0dXJuIGV2ZW50c1RvZ2dsZS5h
cHBseSggdGhpcywgYXJndW1lbnRzICk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdGhp
cy5lYWNoKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgaWYgKCBib29sID8gc3RhdGUgOiBpc0hp
ZGRlbiggdGhpcyApICkgeworICAgICAgICAgICAgICAgIGpRdWVyeSggdGhpcyApLnNob3coKTsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgalF1ZXJ5KCB0aGlzICkuaGlk
ZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB9Cit9KTsKKworalF1ZXJ5LmV4
dGVuZCh7CisgICAgLy8gQWRkIGluIHN0eWxlIHByb3BlcnR5IGhvb2tzIGZvciBvdmVycmlkaW5n
IHRoZSBkZWZhdWx0CisgICAgLy8gYmVoYXZpb3Igb2YgZ2V0dGluZyBhbmQgc2V0dGluZyBhIHN0
eWxlIHByb3BlcnR5CisgICAgY3NzSG9va3M6IHsKKyAgICAgICAgb3BhY2l0eTogeworICAgICAg
ICAgICAgZ2V0OiBmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7CisgICAgICAgICAgICAgICAg
aWYgKCBjb21wdXRlZCApIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIGFsd2F5
cyBnZXQgYSBudW1iZXIgYmFjayBmcm9tIG9wYWNpdHkKKyAgICAgICAgICAgICAgICAgICAgdmFy
IHJldCA9IGN1ckNTUyggZWxlbSwgIm9wYWNpdHkiICk7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiByZXQgPT09ICIiID8gIjEiIDogcmV0OworCisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfSwKKworICAgIC8vIEV4Y2x1ZGUgdGhlIGZvbGxvd2lu
ZyBjc3MgcHJvcGVydGllcyB0byBhZGQgcHgKKyAgICBjc3NOdW1iZXI6IHsKKyAgICAgICAgImZp
bGxPcGFjaXR5IjogdHJ1ZSwKKyAgICAgICAgImZvbnRXZWlnaHQiOiB0cnVlLAorICAgICAgICAi
bGluZUhlaWdodCI6IHRydWUsCisgICAgICAgICJvcGFjaXR5IjogdHJ1ZSwKKyAgICAgICAgIm9y
cGhhbnMiOiB0cnVlLAorICAgICAgICAid2lkb3dzIjogdHJ1ZSwKKyAgICAgICAgInpJbmRleCI6
IHRydWUsCisgICAgICAgICJ6b29tIjogdHJ1ZQorICAgIH0sCisKKyAgICAvLyBBZGQgaW4gcHJv
cGVydGllcyB3aG9zZSBuYW1lcyB5b3Ugd2lzaCB0byBmaXggYmVmb3JlCisgICAgLy8gc2V0dGlu
ZyBvciBnZXR0aW5nIHRoZSB2YWx1ZQorICAgIGNzc1Byb3BzOiB7CisgICAgICAgIC8vIG5vcm1h
bGl6ZSBmbG9hdCBjc3MgcHJvcGVydHkKKyAgICAgICAgImZsb2F0IjogalF1ZXJ5LnN1cHBvcnQu
Y3NzRmxvYXQgPyAiY3NzRmxvYXQiIDogInN0eWxlRmxvYXQiCisgICAgfSwKKworICAgIC8vIEdl
dCBhbmQgc2V0IHRoZSBzdHlsZSBwcm9wZXJ0eSBvbiBhIERPTSBOb2RlCisgICAgc3R5bGU6IGZ1
bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSwgZXh0cmEgKSB7CisgICAgICAgIC8vIERvbid0IHNl
dCBzdHlsZXMgb24gdGV4dCBhbmQgY29tbWVudCBub2RlcworICAgICAgICBpZiAoICFlbGVtIHx8
IGVsZW0ubm9kZVR5cGUgPT09IDMgfHwgZWxlbS5ub2RlVHlwZSA9PT0gOCB8fCAhZWxlbS5zdHls
ZSApIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE1ha2Ug
c3VyZSB0aGF0IHdlJ3JlIHdvcmtpbmcgd2l0aCB0aGUgcmlnaHQgbmFtZQorICAgICAgICB2YXIg
cmV0LCB0eXBlLCBob29rcywKKyAgICAgICAgICAgIG9yaWdOYW1lID0galF1ZXJ5LmNhbWVsQ2Fz
ZSggbmFtZSApLAorICAgICAgICAgICAgc3R5bGUgPSBlbGVtLnN0eWxlOworCisgICAgICAgIG5h
bWUgPSBqUXVlcnkuY3NzUHJvcHNbIG9yaWdOYW1lIF0gfHwgKCBqUXVlcnkuY3NzUHJvcHNbIG9y
aWdOYW1lIF0gPSB2ZW5kb3JQcm9wTmFtZSggc3R5bGUsIG9yaWdOYW1lICkgKTsKKworICAgICAg
ICAvLyBnZXRzIGhvb2sgZm9yIHRoZSBwcmVmaXhlZCB2ZXJzaW9uCisgICAgICAgIC8vIGZvbGxv
d2VkIGJ5IHRoZSB1bnByZWZpeGVkIHZlcnNpb24KKyAgICAgICAgaG9va3MgPSBqUXVlcnkuY3Nz
SG9va3NbIG5hbWUgXSB8fCBqUXVlcnkuY3NzSG9va3NbIG9yaWdOYW1lIF07CisKKyAgICAgICAg
Ly8gQ2hlY2sgaWYgd2UncmUgc2V0dGluZyBhIHZhbHVlCisgICAgICAgIGlmICggdmFsdWUgIT09
IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgIHR5cGUgPSB0eXBlb2YgdmFsdWU7CisKKyAgICAg
ICAgICAgIC8vIGNvbnZlcnQgcmVsYXRpdmUgbnVtYmVyIHN0cmluZ3MgKCs9IG9yIC09KSB0byBy
ZWxhdGl2ZSBudW1iZXJzLiAjNzM0NQorICAgICAgICAgICAgaWYgKCB0eXBlID09PSAic3RyaW5n
IiAmJiAocmV0ID0gcnJlbE51bS5leGVjKCB2YWx1ZSApKSApIHsKKyAgICAgICAgICAgICAgICB2
YWx1ZSA9ICggcmV0WzFdICsgMSApICogcmV0WzJdICsgcGFyc2VGbG9hdCggalF1ZXJ5LmNzcygg
ZWxlbSwgbmFtZSApICk7CisgICAgICAgICAgICAgICAgLy8gRml4ZXMgYnVnICM5MjM3CisgICAg
ICAgICAgICAgICAgdHlwZSA9ICJudW1iZXIiOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAvLyBNYWtlIHN1cmUgdGhhdCBOYU4gYW5kIG51bGwgdmFsdWVzIGFyZW4ndCBzZXQuIFNlZTog
IzcxMTYKKyAgICAgICAgICAgIGlmICggdmFsdWUgPT0gbnVsbCB8fCB0eXBlID09PSAibnVtYmVy
IiAmJiBpc05hTiggdmFsdWUgKSApIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIC8vIElmIGEgbnVtYmVyIHdhcyBwYXNzZWQgaW4sIGFkZCAn
cHgnIHRvIHRoZSAoZXhjZXB0IGZvciBjZXJ0YWluIENTUyBwcm9wZXJ0aWVzKQorICAgICAgICAg
ICAgaWYgKCB0eXBlID09PSAibnVtYmVyIiAmJiAhalF1ZXJ5LmNzc051bWJlclsgb3JpZ05hbWUg
XSApIHsKKyAgICAgICAgICAgICAgICB2YWx1ZSArPSAicHgiOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAvLyBJZiBhIGhvb2sgd2FzIHByb3ZpZGVkLCB1c2UgdGhhdCB2YWx1ZSwgb3Ro
ZXJ3aXNlIGp1c3Qgc2V0IHRoZSBzcGVjaWZpZWQgdmFsdWUKKyAgICAgICAgICAgIGlmICggIWhv
b2tzIHx8ICEoInNldCIgaW4gaG9va3MpIHx8ICh2YWx1ZSA9IGhvb2tzLnNldCggZWxlbSwgdmFs
dWUsIGV4dHJhICkpICE9PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAgICAgICAgLy8gV3JhcHBl
ZCB0byBwcmV2ZW50IElFIGZyb20gdGhyb3dpbmcgZXJyb3JzIHdoZW4gJ2ludmFsaWQnIHZhbHVl
cyBhcmUgcHJvdmlkZWQKKyAgICAgICAgICAgICAgICAvLyBGaXhlcyBidWcgIzU1MDkKKyAgICAg
ICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICBzdHlsZVsgbmFtZSBdID0gdmFs
dWU7CisgICAgICAgICAgICAgICAgfSBjYXRjaChlKSB7fQorICAgICAgICAgICAgfQorCisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBJZiBhIGhvb2sgd2FzIHByb3ZpZGVkIGdldCB0
aGUgbm9uLWNvbXB1dGVkIHZhbHVlIGZyb20gdGhlcmUKKyAgICAgICAgICAgIGlmICggaG9va3Mg
JiYgImdldCIgaW4gaG9va3MgJiYgKHJldCA9IGhvb2tzLmdldCggZWxlbSwgZmFsc2UsIGV4dHJh
ICkpICE9PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgLy8gT3RoZXJ3aXNlIGp1c3QgZ2V0IHRoZSB2YWx1ZSBm
cm9tIHRoZSBzdHlsZSBvYmplY3QKKyAgICAgICAgICAgIHJldHVybiBzdHlsZVsgbmFtZSBdOwor
ICAgICAgICB9CisgICAgfSwKKworICAgIGNzczogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIG51bWVy
aWMsIGV4dHJhICkgeworICAgICAgICB2YXIgdmFsLCBudW0sIGhvb2tzLAorICAgICAgICAgICAg
b3JpZ05hbWUgPSBqUXVlcnkuY2FtZWxDYXNlKCBuYW1lICk7CisKKyAgICAgICAgLy8gTWFrZSBz
dXJlIHRoYXQgd2UncmUgd29ya2luZyB3aXRoIHRoZSByaWdodCBuYW1lCisgICAgICAgIG5hbWUg
PSBqUXVlcnkuY3NzUHJvcHNbIG9yaWdOYW1lIF0gfHwgKCBqUXVlcnkuY3NzUHJvcHNbIG9yaWdO
YW1lIF0gPSB2ZW5kb3JQcm9wTmFtZSggZWxlbS5zdHlsZSwgb3JpZ05hbWUgKSApOworCisgICAg
ICAgIC8vIGdldHMgaG9vayBmb3IgdGhlIHByZWZpeGVkIHZlcnNpb24KKyAgICAgICAgLy8gZm9s
bG93ZWQgYnkgdGhlIHVucHJlZml4ZWQgdmVyc2lvbgorICAgICAgICBob29rcyA9IGpRdWVyeS5j
c3NIb29rc1sgbmFtZSBdIHx8IGpRdWVyeS5jc3NIb29rc1sgb3JpZ05hbWUgXTsKKworICAgICAg
ICAvLyBJZiBhIGhvb2sgd2FzIHByb3ZpZGVkIGdldCB0aGUgY29tcHV0ZWQgdmFsdWUgZnJvbSB0
aGVyZQorICAgICAgICBpZiAoIGhvb2tzICYmICJnZXQiIGluIGhvb2tzICkgeworICAgICAgICAg
ICAgdmFsID0gaG9va3MuZ2V0KCBlbGVtLCB0cnVlLCBleHRyYSApOworICAgICAgICB9CisKKyAg
ICAgICAgLy8gT3RoZXJ3aXNlLCBpZiBhIHdheSB0byBnZXQgdGhlIGNvbXB1dGVkIHZhbHVlIGV4
aXN0cywgdXNlIHRoYXQKKyAgICAgICAgaWYgKCB2YWwgPT09IHVuZGVmaW5lZCApIHsKKyAgICAg
ICAgICAgIHZhbCA9IGN1ckNTUyggZWxlbSwgbmFtZSApOworICAgICAgICB9CisKKyAgICAgICAg
Ly9jb252ZXJ0ICJub3JtYWwiIHRvIGNvbXB1dGVkIHZhbHVlCisgICAgICAgIGlmICggdmFsID09
PSAibm9ybWFsIiAmJiBuYW1lIGluIGNzc05vcm1hbFRyYW5zZm9ybSApIHsKKyAgICAgICAgICAg
IHZhbCA9IGNzc05vcm1hbFRyYW5zZm9ybVsgbmFtZSBdOworICAgICAgICB9CisKKyAgICAgICAg
Ly8gUmV0dXJuLCBjb252ZXJ0aW5nIHRvIG51bWJlciBpZiBmb3JjZWQgb3IgYSBxdWFsaWZpZXIg
d2FzIHByb3ZpZGVkIGFuZCB2YWwgbG9va3MgbnVtZXJpYworICAgICAgICBpZiAoIG51bWVyaWMg
fHwgZXh0cmEgIT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgIG51bSA9IHBhcnNlRmxvYXQo
IHZhbCApOworICAgICAgICAgICAgcmV0dXJuIG51bWVyaWMgfHwgalF1ZXJ5LmlzTnVtZXJpYygg
bnVtICkgPyBudW0gfHwgMCA6IHZhbDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdmFsOwor
ICAgIH0sCisKKyAgICAvLyBBIG1ldGhvZCBmb3IgcXVpY2tseSBzd2FwcGluZyBpbi9vdXQgQ1NT
IHByb3BlcnRpZXMgdG8gZ2V0IGNvcnJlY3QgY2FsY3VsYXRpb25zCisgICAgc3dhcDogZnVuY3Rp
b24oIGVsZW0sIG9wdGlvbnMsIGNhbGxiYWNrICkgeworICAgICAgICB2YXIgcmV0LCBuYW1lLAor
ICAgICAgICAgICAgb2xkID0ge307CisKKyAgICAgICAgLy8gUmVtZW1iZXIgdGhlIG9sZCB2YWx1
ZXMsIGFuZCBpbnNlcnQgdGhlIG5ldyBvbmVzCisgICAgICAgIGZvciAoIG5hbWUgaW4gb3B0aW9u
cyApIHsKKyAgICAgICAgICAgIG9sZFsgbmFtZSBdID0gZWxlbS5zdHlsZVsgbmFtZSBdOworICAg
ICAgICAgICAgZWxlbS5zdHlsZVsgbmFtZSBdID0gb3B0aW9uc1sgbmFtZSBdOworICAgICAgICB9
CisKKyAgICAgICAgcmV0ID0gY2FsbGJhY2suY2FsbCggZWxlbSApOworCisgICAgICAgIC8vIFJl
dmVydCB0aGUgb2xkIHZhbHVlcworICAgICAgICBmb3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7Cisg
ICAgICAgICAgICBlbGVtLnN0eWxlWyBuYW1lIF0gPSBvbGRbIG5hbWUgXTsKKyAgICAgICAgfQor
CisgICAgICAgIHJldHVybiByZXQ7CisgICAgfQorfSk7CisKKy8vIE5PVEU6IFRvIGFueSBmdXR1
cmUgbWFpbnRhaW5lciwgd2UndmUgd2luZG93LmdldENvbXB1dGVkU3R5bGUKKy8vIGJlY2F1c2Ug
anNkb20gb24gbm9kZS5qcyB3aWxsIGJyZWFrIHdpdGhvdXQgaXQuCitpZiAoIHdpbmRvdy5nZXRD
b21wdXRlZFN0eWxlICkgeworICAgIGN1ckNTUyA9IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkgewor
ICAgICAgICB2YXIgcmV0LCB3aWR0aCwgbWluV2lkdGgsIG1heFdpZHRoLAorICAgICAgICAgICAg
Y29tcHV0ZWQgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSggZWxlbSwgbnVsbCApLAorICAgICAg
ICAgICAgc3R5bGUgPSBlbGVtLnN0eWxlOworCisgICAgICAgIGlmICggY29tcHV0ZWQgKSB7CisK
KyAgICAgICAgICAgIC8vIGdldFByb3BlcnR5VmFsdWUgaXMgb25seSBuZWVkZWQgZm9yIC5jc3Mo
J2ZpbHRlcicpIGluIElFOSwgc2VlICMxMjUzNworICAgICAgICAgICAgcmV0ID0gY29tcHV0ZWQu
Z2V0UHJvcGVydHlWYWx1ZSggbmFtZSApIHx8IGNvbXB1dGVkWyBuYW1lIF07CisKKyAgICAgICAg
ICAgIGlmICggcmV0ID09PSAiIiAmJiAhalF1ZXJ5LmNvbnRhaW5zKCBlbGVtLm93bmVyRG9jdW1l
bnQsIGVsZW0gKSApIHsKKyAgICAgICAgICAgICAgICByZXQgPSBqUXVlcnkuc3R5bGUoIGVsZW0s
IG5hbWUgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gQSB0cmlidXRlIHRvIHRo
ZSAiYXdlc29tZSBoYWNrIGJ5IERlYW4gRWR3YXJkcyIKKyAgICAgICAgICAgIC8vIENocm9tZSA8
IDE3IGFuZCBTYWZhcmkgNS4wIHVzZXMgImNvbXB1dGVkIHZhbHVlIiBpbnN0ZWFkIG9mICJ1c2Vk
IHZhbHVlIiBmb3IgbWFyZ2luLXJpZ2h0CisgICAgICAgICAgICAvLyBTYWZhcmkgNS4xLjcgKGF0
IGxlYXN0KSByZXR1cm5zIHBlcmNlbnRhZ2UgZm9yIGEgbGFyZ2VyIHNldCBvZiB2YWx1ZXMsIGJ1
dCB3aWR0aCBzZWVtcyB0byBiZSByZWxpYWJseSBwaXhlbHMKKyAgICAgICAgICAgIC8vIHRoaXMg
aXMgYWdhaW5zdCB0aGUgQ1NTT00gZHJhZnQgc3BlYzogaHR0cDovL2Rldi53My5vcmcvY3Nzd2cv
Y3Nzb20vI3Jlc29sdmVkLXZhbHVlcworICAgICAgICAgICAgaWYgKCBybnVtbm9ucHgudGVzdCgg
cmV0ICkgJiYgcm1hcmdpbi50ZXN0KCBuYW1lICkgKSB7CisgICAgICAgICAgICAgICAgd2lkdGgg
PSBzdHlsZS53aWR0aDsKKyAgICAgICAgICAgICAgICBtaW5XaWR0aCA9IHN0eWxlLm1pbldpZHRo
OworICAgICAgICAgICAgICAgIG1heFdpZHRoID0gc3R5bGUubWF4V2lkdGg7CisKKyAgICAgICAg
ICAgICAgICBzdHlsZS5taW5XaWR0aCA9IHN0eWxlLm1heFdpZHRoID0gc3R5bGUud2lkdGggPSBy
ZXQ7CisgICAgICAgICAgICAgICAgcmV0ID0gY29tcHV0ZWQud2lkdGg7CisKKyAgICAgICAgICAg
ICAgICBzdHlsZS53aWR0aCA9IHdpZHRoOworICAgICAgICAgICAgICAgIHN0eWxlLm1pbldpZHRo
ID0gbWluV2lkdGg7CisgICAgICAgICAgICAgICAgc3R5bGUubWF4V2lkdGggPSBtYXhXaWR0aDsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZXQ7CisgICAgfTsK
K30gZWxzZSBpZiAoIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jdXJyZW50U3R5bGUgKSB7Cisg
ICAgY3VyQ1NTID0gZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7CisgICAgICAgIHZhciBsZWZ0LCBy
c0xlZnQsCisgICAgICAgICAgICByZXQgPSBlbGVtLmN1cnJlbnRTdHlsZSAmJiBlbGVtLmN1cnJl
bnRTdHlsZVsgbmFtZSBdLAorICAgICAgICAgICAgc3R5bGUgPSBlbGVtLnN0eWxlOworCisgICAg
ICAgIC8vIEF2b2lkIHNldHRpbmcgcmV0IHRvIGVtcHR5IHN0cmluZyBoZXJlCisgICAgICAgIC8v
IHNvIHdlIGRvbid0IGRlZmF1bHQgdG8gYXV0bworICAgICAgICBpZiAoIHJldCA9PSBudWxsICYm
IHN0eWxlICYmIHN0eWxlWyBuYW1lIF0gKSB7CisgICAgICAgICAgICByZXQgPSBzdHlsZVsgbmFt
ZSBdOworICAgICAgICB9CisKKyAgICAgICAgLy8gRnJvbSB0aGUgYXdlc29tZSBoYWNrIGJ5IERl
YW4gRWR3YXJkcworICAgICAgICAvLyBodHRwOi8vZXJpay5lYWUubmV0L2FyY2hpdmVzLzIwMDcv
MDcvMjcvMTguNTQuMTUvI2NvbW1lbnQtMTAyMjkxCisKKyAgICAgICAgLy8gSWYgd2UncmUgbm90
IGRlYWxpbmcgd2l0aCBhIHJlZ3VsYXIgcGl4ZWwgbnVtYmVyCisgICAgICAgIC8vIGJ1dCBhIG51
bWJlciB0aGF0IGhhcyBhIHdlaXJkIGVuZGluZywgd2UgbmVlZCB0byBjb252ZXJ0IGl0IHRvIHBp
eGVscworICAgICAgICAvLyBidXQgbm90IHBvc2l0aW9uIGNzcyBhdHRyaWJ1dGVzLCBhcyB0aG9z
ZSBhcmUgcHJvcG9ydGlvbmFsIHRvIHRoZSBwYXJlbnQgZWxlbWVudCBpbnN0ZWFkCisgICAgICAg
IC8vIGFuZCB3ZSBjYW4ndCBtZWFzdXJlIHRoZSBwYXJlbnQgaW5zdGVhZCBiZWNhdXNlIGl0IG1p
Z2h0IHRyaWdnZXIgYSAic3RhY2tpbmcgZG9sbHMiIHByb2JsZW0KKyAgICAgICAgaWYgKCBybnVt
bm9ucHgudGVzdCggcmV0ICkgJiYgIXJwb3NpdGlvbi50ZXN0KCBuYW1lICkgKSB7CisKKyAgICAg
ICAgICAgIC8vIFJlbWVtYmVyIHRoZSBvcmlnaW5hbCB2YWx1ZXMKKyAgICAgICAgICAgIGxlZnQg
PSBzdHlsZS5sZWZ0OworICAgICAgICAgICAgcnNMZWZ0ID0gZWxlbS5ydW50aW1lU3R5bGUgJiYg
ZWxlbS5ydW50aW1lU3R5bGUubGVmdDsKKworICAgICAgICAgICAgLy8gUHV0IGluIHRoZSBuZXcg
dmFsdWVzIHRvIGdldCBhIGNvbXB1dGVkIHZhbHVlIG91dAorICAgICAgICAgICAgaWYgKCByc0xl
ZnQgKSB7CisgICAgICAgICAgICAgICAgZWxlbS5ydW50aW1lU3R5bGUubGVmdCA9IGVsZW0uY3Vy
cmVudFN0eWxlLmxlZnQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzdHlsZS5sZWZ0ID0g
bmFtZSA9PT0gImZvbnRTaXplIiA/ICIxZW0iIDogcmV0OworICAgICAgICAgICAgcmV0ID0gc3R5
bGUucGl4ZWxMZWZ0ICsgInB4IjsKKworICAgICAgICAgICAgLy8gUmV2ZXJ0IHRoZSBjaGFuZ2Vk
IHZhbHVlcworICAgICAgICAgICAgc3R5bGUubGVmdCA9IGxlZnQ7CisgICAgICAgICAgICBpZiAo
IHJzTGVmdCApIHsKKyAgICAgICAgICAgICAgICBlbGVtLnJ1bnRpbWVTdHlsZS5sZWZ0ID0gcnNM
ZWZ0OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHJldCA9PT0g
IiIgPyAiYXV0byIgOiByZXQ7CisgICAgfTsKK30KKworZnVuY3Rpb24gc2V0UG9zaXRpdmVOdW1i
ZXIoIGVsZW0sIHZhbHVlLCBzdWJ0cmFjdCApIHsKKyAgICB2YXIgbWF0Y2hlcyA9IHJudW1zcGxp
dC5leGVjKCB2YWx1ZSApOworICAgIHJldHVybiBtYXRjaGVzID8KKyAgICAgICAgICAgIE1hdGgu
bWF4KCAwLCBtYXRjaGVzWyAxIF0gLSAoIHN1YnRyYWN0IHx8IDAgKSApICsgKCBtYXRjaGVzWyAy
IF0gfHwgInB4IiApIDoKKyAgICAgICAgICAgIHZhbHVlOworfQorCitmdW5jdGlvbiBhdWdtZW50
V2lkdGhPckhlaWdodCggZWxlbSwgbmFtZSwgZXh0cmEsIGlzQm9yZGVyQm94ICkgeworICAgIHZh
ciBpID0gZXh0cmEgPT09ICggaXNCb3JkZXJCb3ggPyAiYm9yZGVyIiA6ICJjb250ZW50IiApID8K
KyAgICAgICAgLy8gSWYgd2UgYWxyZWFkeSBoYXZlIHRoZSByaWdodCBtZWFzdXJlbWVudCwgYXZv
aWQgYXVnbWVudGF0aW9uCisgICAgICAgIDQgOgorICAgICAgICAvLyBPdGhlcndpc2UgaW5pdGlh
bGl6ZSBmb3IgaG9yaXpvbnRhbCBvciB2ZXJ0aWNhbCBwcm9wZXJ0aWVzCisgICAgICAgIG5hbWUg
PT09ICJ3aWR0aCIgPyAxIDogMCwKKworICAgICAgICB2YWwgPSAwOworCisgICAgZm9yICggOyBp
IDwgNDsgaSArPSAyICkgeworICAgICAgICAvLyBib3RoIGJveCBtb2RlbHMgZXhjbHVkZSBtYXJn
aW4sIHNvIGFkZCBpdCBpZiB3ZSB3YW50IGl0CisgICAgICAgIGlmICggZXh0cmEgPT09ICJtYXJn
aW4iICkgeworICAgICAgICAgICAgLy8gd2UgdXNlIGpRdWVyeS5jc3MgaW5zdGVhZCBvZiBjdXJD
U1MgaGVyZQorICAgICAgICAgICAgLy8gYmVjYXVzZSBvZiB0aGUgcmVsaWFibGVNYXJnaW5SaWdo
dCBDU1MgaG9vayEKKyAgICAgICAgICAgIHZhbCArPSBqUXVlcnkuY3NzKCBlbGVtLCBleHRyYSAr
IGNzc0V4cGFuZFsgaSBdLCB0cnVlICk7CisgICAgICAgIH0KKworICAgICAgICAvLyBGcm9tIHRo
aXMgcG9pbnQgb24gd2UgdXNlIGN1ckNTUyBmb3IgbWF4aW11bSBwZXJmb3JtYW5jZSAocmVsZXZh
bnQgaW4gYW5pbWF0aW9ucykKKyAgICAgICAgaWYgKCBpc0JvcmRlckJveCApIHsKKyAgICAgICAg
ICAgIC8vIGJvcmRlci1ib3ggaW5jbHVkZXMgcGFkZGluZywgc28gcmVtb3ZlIGl0IGlmIHdlIHdh
bnQgY29udGVudAorICAgICAgICAgICAgaWYgKCBleHRyYSA9PT0gImNvbnRlbnQiICkgeworICAg
ICAgICAgICAgICAgIHZhbCAtPSBwYXJzZUZsb2F0KCBjdXJDU1MoIGVsZW0sICJwYWRkaW5nIiAr
IGNzc0V4cGFuZFsgaSBdICkgKSB8fCAwOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAv
LyBhdCB0aGlzIHBvaW50LCBleHRyYSBpc24ndCBib3JkZXIgbm9yIG1hcmdpbiwgc28gcmVtb3Zl
IGJvcmRlcgorICAgICAgICAgICAgaWYgKCBleHRyYSAhPT0gIm1hcmdpbiIgKSB7CisgICAgICAg
ICAgICAgICAgdmFsIC09IHBhcnNlRmxvYXQoIGN1ckNTUyggZWxlbSwgImJvcmRlciIgKyBjc3NF
eHBhbmRbIGkgXSArICJXaWR0aCIgKSApIHx8IDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAvLyBhdCB0aGlzIHBvaW50LCBleHRyYSBpc24ndCBjb250ZW50
LCBzbyBhZGQgcGFkZGluZworICAgICAgICAgICAgdmFsICs9IHBhcnNlRmxvYXQoIGN1ckNTUygg
ZWxlbSwgInBhZGRpbmciICsgY3NzRXhwYW5kWyBpIF0gKSApIHx8IDA7CisKKyAgICAgICAgICAg
IC8vIGF0IHRoaXMgcG9pbnQsIGV4dHJhIGlzbid0IGNvbnRlbnQgbm9yIHBhZGRpbmcsIHNvIGFk
ZCBib3JkZXIKKyAgICAgICAgICAgIGlmICggZXh0cmEgIT09ICJwYWRkaW5nIiApIHsKKyAgICAg
ICAgICAgICAgICB2YWwgKz0gcGFyc2VGbG9hdCggY3VyQ1NTKCBlbGVtLCAiYm9yZGVyIiArIGNz
c0V4cGFuZFsgaSBdICsgIldpZHRoIiApICkgfHwgMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKworICAgIHJldHVybiB2YWw7Cit9CisKK2Z1bmN0aW9uIGdldFdpZHRoT3JIZWln
aHQoIGVsZW0sIG5hbWUsIGV4dHJhICkgeworCisgICAgLy8gU3RhcnQgd2l0aCBvZmZzZXQgcHJv
cGVydHksIHdoaWNoIGlzIGVxdWl2YWxlbnQgdG8gdGhlIGJvcmRlci1ib3ggdmFsdWUKKyAgICB2
YXIgdmFsID0gbmFtZSA9PT0gIndpZHRoIiA/IGVsZW0ub2Zmc2V0V2lkdGggOiBlbGVtLm9mZnNl
dEhlaWdodCwKKyAgICAgICAgdmFsdWVJc0JvcmRlckJveCA9IHRydWUsCisgICAgICAgIGlzQm9y
ZGVyQm94ID0galF1ZXJ5LnN1cHBvcnQuYm94U2l6aW5nICYmIGpRdWVyeS5jc3MoIGVsZW0sICJi
b3hTaXppbmciICkgPT09ICJib3JkZXItYm94IjsKKworICAgIC8vIHNvbWUgbm9uLWh0bWwgZWxl
bWVudHMgcmV0dXJuIHVuZGVmaW5lZCBmb3Igb2Zmc2V0V2lkdGgsIHNvIGNoZWNrIGZvciBudWxs
L3VuZGVmaW5lZAorICAgIC8vIHN2ZyAtIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hv
d19idWcuY2dpP2lkPTY0OTI4NQorICAgIC8vIE1hdGhNTCAtIGh0dHBzOi8vYnVnemlsbGEubW96
aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTQ5MTY2OAorICAgIGlmICggdmFsIDw9IDAgfHwgdmFs
ID09IG51bGwgKSB7CisgICAgICAgIC8vIEZhbGwgYmFjayB0byBjb21wdXRlZCB0aGVuIHVuY29t
cHV0ZWQgY3NzIGlmIG5lY2Vzc2FyeQorICAgICAgICB2YWwgPSBjdXJDU1MoIGVsZW0sIG5hbWUg
KTsKKyAgICAgICAgaWYgKCB2YWwgPCAwIHx8IHZhbCA9PSBudWxsICkgeworICAgICAgICAgICAg
dmFsID0gZWxlbS5zdHlsZVsgbmFtZSBdOworICAgICAgICB9CisKKyAgICAgICAgLy8gQ29tcHV0
ZWQgdW5pdCBpcyBub3QgcGl4ZWxzLiBTdG9wIGhlcmUgYW5kIHJldHVybi4KKyAgICAgICAgaWYg
KCBybnVtbm9ucHgudGVzdCh2YWwpICkgeworICAgICAgICAgICAgcmV0dXJuIHZhbDsKKyAgICAg
ICAgfQorCisgICAgICAgIC8vIHdlIG5lZWQgdGhlIGNoZWNrIGZvciBzdHlsZSBpbiBjYXNlIGEg
YnJvd3NlciB3aGljaCByZXR1cm5zIHVucmVsaWFibGUgdmFsdWVzCisgICAgICAgIC8vIGZvciBn
ZXRDb21wdXRlZFN0eWxlIHNpbGVudGx5IGZhbGxzIGJhY2sgdG8gdGhlIHJlbGlhYmxlIGVsZW0u
c3R5bGUKKyAgICAgICAgdmFsdWVJc0JvcmRlckJveCA9IGlzQm9yZGVyQm94ICYmICggalF1ZXJ5
LnN1cHBvcnQuYm94U2l6aW5nUmVsaWFibGUgfHwgdmFsID09PSBlbGVtLnN0eWxlWyBuYW1lIF0g
KTsKKworICAgICAgICAvLyBOb3JtYWxpemUgIiIsIGF1dG8sIGFuZCBwcmVwYXJlIGZvciBleHRy
YQorICAgICAgICB2YWwgPSBwYXJzZUZsb2F0KCB2YWwgKSB8fCAwOworICAgIH0KKworICAgIC8v
IHVzZSB0aGUgYWN0aXZlIGJveC1zaXppbmcgbW9kZWwgdG8gYWRkL3N1YnRyYWN0IGlycmVsZXZh
bnQgc3R5bGVzCisgICAgcmV0dXJuICggdmFsICsKKyAgICAgICAgYXVnbWVudFdpZHRoT3JIZWln
aHQoCisgICAgICAgICAgICBlbGVtLAorICAgICAgICAgICAgbmFtZSwKKyAgICAgICAgICAgIGV4
dHJhIHx8ICggaXNCb3JkZXJCb3ggPyAiYm9yZGVyIiA6ICJjb250ZW50IiApLAorICAgICAgICAg
ICAgdmFsdWVJc0JvcmRlckJveAorICAgICAgICApCisgICAgKSArICJweCI7Cit9CisKKworLy8g
VHJ5IHRvIGRldGVybWluZSB0aGUgZGVmYXVsdCBkaXNwbGF5IHZhbHVlIG9mIGFuIGVsZW1lbnQK
K2Z1bmN0aW9uIGNzc19kZWZhdWx0RGlzcGxheSggbm9kZU5hbWUgKSB7CisgICAgaWYgKCBlbGVt
ZGlzcGxheVsgbm9kZU5hbWUgXSApIHsKKyAgICAgICAgcmV0dXJuIGVsZW1kaXNwbGF5WyBub2Rl
TmFtZSBdOworICAgIH0KKworICAgIHZhciBlbGVtID0galF1ZXJ5KCAiPCIgKyBub2RlTmFtZSAr
ICI+IiApLmFwcGVuZFRvKCBkb2N1bWVudC5ib2R5ICksCisgICAgICAgIGRpc3BsYXkgPSBlbGVt
LmNzcygiZGlzcGxheSIpOworICAgIGVsZW0ucmVtb3ZlKCk7CisKKyAgICAvLyBJZiB0aGUgc2lt
cGxlIHdheSBmYWlscywKKyAgICAvLyBnZXQgZWxlbWVudCdzIHJlYWwgZGVmYXVsdCBkaXNwbGF5
IGJ5IGF0dGFjaGluZyBpdCB0byBhIHRlbXAgaWZyYW1lCisgICAgaWYgKCBkaXNwbGF5ID09PSAi
bm9uZSIgfHwgZGlzcGxheSA9PT0gIiIgKSB7CisgICAgICAgIC8vIFVzZSB0aGUgYWxyZWFkeS1j
cmVhdGVkIGlmcmFtZSBpZiBwb3NzaWJsZQorICAgICAgICBpZnJhbWUgPSBkb2N1bWVudC5ib2R5
LmFwcGVuZENoaWxkKAorICAgICAgICAgICAgaWZyYW1lIHx8IGpRdWVyeS5leHRlbmQoIGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpLCB7CisgICAgICAgICAgICAgICAgZnJhbWVCb3Jk
ZXI6IDAsCisgICAgICAgICAgICAgICAgd2lkdGg6IDAsCisgICAgICAgICAgICAgICAgaGVpZ2h0
OiAwCisgICAgICAgICAgICB9KQorICAgICAgICApOworCisgICAgICAgIC8vIENyZWF0ZSBhIGNh
Y2hlYWJsZSBjb3B5IG9mIHRoZSBpZnJhbWUgZG9jdW1lbnQgb24gZmlyc3QgY2FsbC4KKyAgICAg
ICAgLy8gSUUgYW5kIE9wZXJhIHdpbGwgYWxsb3cgdXMgdG8gcmV1c2UgdGhlIGlmcmFtZURvYyB3
aXRob3V0IHJlLXdyaXRpbmcgdGhlIGZha2UgSFRNTAorICAgICAgICAvLyBkb2N1bWVudCB0byBp
dDsgV2ViS2l0ICYgRmlyZWZveCB3b24ndCBhbGxvdyByZXVzaW5nIHRoZSBpZnJhbWUgZG9jdW1l
bnQuCisgICAgICAgIGlmICggIWlmcmFtZURvYyB8fCAhaWZyYW1lLmNyZWF0ZUVsZW1lbnQgKSB7
CisgICAgICAgICAgICBpZnJhbWVEb2MgPSAoIGlmcmFtZS5jb250ZW50V2luZG93IHx8IGlmcmFt
ZS5jb250ZW50RG9jdW1lbnQgKS5kb2N1bWVudDsKKyAgICAgICAgICAgIGlmcmFtZURvYy53cml0
ZSgiPCFkb2N0eXBlIGh0bWw+PGh0bWw+PGJvZHk+Iik7CisgICAgICAgICAgICBpZnJhbWVEb2Mu
Y2xvc2UoKTsKKyAgICAgICAgfQorCisgICAgICAgIGVsZW0gPSBpZnJhbWVEb2MuYm9keS5hcHBl
bmRDaGlsZCggaWZyYW1lRG9jLmNyZWF0ZUVsZW1lbnQobm9kZU5hbWUpICk7CisKKyAgICAgICAg
ZGlzcGxheSA9IGN1ckNTUyggZWxlbSwgImRpc3BsYXkiICk7CisgICAgICAgIGRvY3VtZW50LmJv
ZHkucmVtb3ZlQ2hpbGQoIGlmcmFtZSApOworICAgIH0KKworICAgIC8vIFN0b3JlIHRoZSBjb3Jy
ZWN0IGRlZmF1bHQgZGlzcGxheQorICAgIGVsZW1kaXNwbGF5WyBub2RlTmFtZSBdID0gZGlzcGxh
eTsKKworICAgIHJldHVybiBkaXNwbGF5OworfQorCitqUXVlcnkuZWFjaChbICJoZWlnaHQiLCAi
d2lkdGgiIF0sIGZ1bmN0aW9uKCBpLCBuYW1lICkgeworICAgIGpRdWVyeS5jc3NIb29rc1sgbmFt
ZSBdID0geworICAgICAgICBnZXQ6IGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCwgZXh0cmEgKSB7
CisgICAgICAgICAgICBpZiAoIGNvbXB1dGVkICkgeworICAgICAgICAgICAgICAgIC8vIGNlcnRh
aW4gZWxlbWVudHMgY2FuIGhhdmUgZGltZW5zaW9uIGluZm8gaWYgd2UgaW52aXNpYmx5IHNob3cg
dGhlbQorICAgICAgICAgICAgICAgIC8vIGhvd2V2ZXIsIGl0IG11c3QgaGF2ZSBhIGN1cnJlbnQg
ZGlzcGxheSBzdHlsZSB0aGF0IHdvdWxkIGJlbmVmaXQgZnJvbSB0aGlzCisgICAgICAgICAgICAg
ICAgaWYgKCBlbGVtLm9mZnNldFdpZHRoID09PSAwICYmIHJkaXNwbGF5c3dhcC50ZXN0KCBjdXJD
U1MoIGVsZW0sICJkaXNwbGF5IiApICkgKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBq
UXVlcnkuc3dhcCggZWxlbSwgY3NzU2hvdywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZ2V0V2lkdGhPckhlaWdodCggZWxlbSwgbmFtZSwgZXh0cmEgKTsKKyAg
ICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGdldFdpZHRoT3JIZWlnaHQoIGVsZW0sIG5hbWUsIGV4dHJhICk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9LAorCisgICAgICAg
IHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlLCBleHRyYSApIHsKKyAgICAgICAgICAgIHJldHVy
biBzZXRQb3NpdGl2ZU51bWJlciggZWxlbSwgdmFsdWUsIGV4dHJhID8KKyAgICAgICAgICAgICAg
ICBhdWdtZW50V2lkdGhPckhlaWdodCgKKyAgICAgICAgICAgICAgICAgICAgZWxlbSwKKyAgICAg
ICAgICAgICAgICAgICAgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgZXh0cmEsCisgICAgICAg
ICAgICAgICAgICAgIGpRdWVyeS5zdXBwb3J0LmJveFNpemluZyAmJiBqUXVlcnkuY3NzKCBlbGVt
LCAiYm94U2l6aW5nIiApID09PSAiYm9yZGVyLWJveCIKKyAgICAgICAgICAgICAgICApIDogMAor
ICAgICAgICAgICAgKTsKKyAgICAgICAgfQorICAgIH07Cit9KTsKKworaWYgKCAhalF1ZXJ5LnN1
cHBvcnQub3BhY2l0eSApIHsKKyAgICBqUXVlcnkuY3NzSG9va3Mub3BhY2l0eSA9IHsKKyAgICAg
ICAgZ2V0OiBmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7CisgICAgICAgICAgICAvLyBJRSB1
c2VzIGZpbHRlcnMgZm9yIG9wYWNpdHkKKyAgICAgICAgICAgIHJldHVybiByb3BhY2l0eS50ZXN0
KCAoY29tcHV0ZWQgJiYgZWxlbS5jdXJyZW50U3R5bGUgPyBlbGVtLmN1cnJlbnRTdHlsZS5maWx0
ZXIgOiBlbGVtLnN0eWxlLmZpbHRlcikgfHwgIiIgKSA/CisgICAgICAgICAgICAgICAgKCAwLjAx
ICogcGFyc2VGbG9hdCggUmVnRXhwLiQxICkgKSArICIiIDoKKyAgICAgICAgICAgICAgICBjb21w
dXRlZCA/ICIxIiA6ICIiOworICAgICAgICB9LAorCisgICAgICAgIHNldDogZnVuY3Rpb24oIGVs
ZW0sIHZhbHVlICkgeworICAgICAgICAgICAgdmFyIHN0eWxlID0gZWxlbS5zdHlsZSwKKyAgICAg
ICAgICAgICAgICBjdXJyZW50U3R5bGUgPSBlbGVtLmN1cnJlbnRTdHlsZSwKKyAgICAgICAgICAg
ICAgICBvcGFjaXR5ID0galF1ZXJ5LmlzTnVtZXJpYyggdmFsdWUgKSA/ICJhbHBoYShvcGFjaXR5
PSIgKyB2YWx1ZSAqIDEwMCArICIpIiA6ICIiLAorICAgICAgICAgICAgICAgIGZpbHRlciA9IGN1
cnJlbnRTdHlsZSAmJiBjdXJyZW50U3R5bGUuZmlsdGVyIHx8IHN0eWxlLmZpbHRlciB8fCAiIjsK
KworICAgICAgICAgICAgLy8gSUUgaGFzIHRyb3VibGUgd2l0aCBvcGFjaXR5IGlmIGl0IGRvZXMg
bm90IGhhdmUgbGF5b3V0CisgICAgICAgICAgICAvLyBGb3JjZSBpdCBieSBzZXR0aW5nIHRoZSB6
b29tIGxldmVsCisgICAgICAgICAgICBzdHlsZS56b29tID0gMTsKKworICAgICAgICAgICAgLy8g
aWYgc2V0dGluZyBvcGFjaXR5IHRvIDEsIGFuZCBubyBvdGhlciBmaWx0ZXJzIGV4aXN0IC0gYXR0
ZW1wdCB0byByZW1vdmUgZmlsdGVyIGF0dHJpYnV0ZSAjNjY1MgorICAgICAgICAgICAgaWYgKCB2
YWx1ZSA+PSAxICYmIGpRdWVyeS50cmltKCBmaWx0ZXIucmVwbGFjZSggcmFscGhhLCAiIiApICkg
PT09ICIiICYmCisgICAgICAgICAgICAgICAgc3R5bGUucmVtb3ZlQXR0cmlidXRlICkgeworCisg
ICAgICAgICAgICAgICAgLy8gU2V0dGluZyBzdHlsZS5maWx0ZXIgdG8gbnVsbCwgIiIgJiAiICIg
c3RpbGwgbGVhdmUgImZpbHRlcjoiIGluIHRoZSBjc3NUZXh0CisgICAgICAgICAgICAgICAgLy8g
aWYgImZpbHRlcjoiIGlzIHByZXNlbnQgYXQgYWxsLCBjbGVhclR5cGUgaXMgZGlzYWJsZWQsIHdl
IHdhbnQgdG8gYXZvaWQgdGhpcworICAgICAgICAgICAgICAgIC8vIHN0eWxlLnJlbW92ZUF0dHJp
YnV0ZSBpcyBJRSBPbmx5LCBidXQgc28gYXBwYXJlbnRseSBpcyB0aGlzIGNvZGUgcGF0aC4uLgor
ICAgICAgICAgICAgICAgIHN0eWxlLnJlbW92ZUF0dHJpYnV0ZSggImZpbHRlciIgKTsKKworICAg
ICAgICAgICAgICAgIC8vIGlmIHRoZXJlIHRoZXJlIGlzIG5vIGZpbHRlciBzdHlsZSBhcHBsaWVk
IGluIGEgY3NzIHJ1bGUsIHdlIGFyZSBkb25lCisgICAgICAgICAgICAgICAgaWYgKCBjdXJyZW50
U3R5bGUgJiYgIWN1cnJlbnRTdHlsZS5maWx0ZXIgKSB7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8v
IG90aGVyd2lzZSwgc2V0IG5ldyBmaWx0ZXIgdmFsdWVzCisgICAgICAgICAgICBzdHlsZS5maWx0
ZXIgPSByYWxwaGEudGVzdCggZmlsdGVyICkgPworICAgICAgICAgICAgICAgIGZpbHRlci5yZXBs
YWNlKCByYWxwaGEsIG9wYWNpdHkgKSA6CisgICAgICAgICAgICAgICAgZmlsdGVyICsgIiAiICsg
b3BhY2l0eTsKKyAgICAgICAgfQorICAgIH07Cit9CisKKy8vIFRoZXNlIGhvb2tzIGNhbm5vdCBi
ZSBhZGRlZCB1bnRpbCBET00gcmVhZHkgYmVjYXVzZSB0aGUgc3VwcG9ydCB0ZXN0CisvLyBmb3Ig
aXQgaXMgbm90IHJ1biB1bnRpbCBhZnRlciBET00gcmVhZHkKK2pRdWVyeShmdW5jdGlvbigpIHsK
KyAgICBpZiAoICFqUXVlcnkuc3VwcG9ydC5yZWxpYWJsZU1hcmdpblJpZ2h0ICkgeworICAgICAg
ICBqUXVlcnkuY3NzSG9va3MubWFyZ2luUmlnaHQgPSB7CisgICAgICAgICAgICBnZXQ6IGZ1bmN0
aW9uKCBlbGVtLCBjb21wdXRlZCApIHsKKyAgICAgICAgICAgICAgICAvLyBXZWJLaXQgQnVnIDEz
MzQzIC0gZ2V0Q29tcHV0ZWRTdHlsZSByZXR1cm5zIHdyb25nIHZhbHVlIGZvciBtYXJnaW4tcmln
aHQKKyAgICAgICAgICAgICAgICAvLyBXb3JrIGFyb3VuZCBieSB0ZW1wb3JhcmlseSBzZXR0aW5n
IGVsZW1lbnQgZGlzcGxheSB0byBpbmxpbmUtYmxvY2sKKyAgICAgICAgICAgICAgICByZXR1cm4g
alF1ZXJ5LnN3YXAoIGVsZW0sIHsgImRpc3BsYXkiOiAiaW5saW5lLWJsb2NrIiB9LCBmdW5jdGlv
bigpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBjb21wdXRlZCApIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBjdXJDU1MoIGVsZW0sICJtYXJnaW5SaWdodCIgKTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAg
ICAgICB9OworICAgIH0KKworICAgIC8vIFdlYmtpdCBidWc6IGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yOTA4NAorICAgIC8vIGdldENvbXB1dGVkU3R5bGUgcmV0dXJu
cyBwZXJjZW50IHdoZW4gc3BlY2lmaWVkIGZvciB0b3AvbGVmdC9ib3R0b20vcmlnaHQKKyAgICAv
LyByYXRoZXIgdGhhbiBtYWtlIHRoZSBjc3MgbW9kdWxlIGRlcGVuZCBvbiB0aGUgb2Zmc2V0IG1v
ZHVsZSwgd2UganVzdCBjaGVjayBmb3IgaXQgaGVyZQorICAgIGlmICggIWpRdWVyeS5zdXBwb3J0
LnBpeGVsUG9zaXRpb24gJiYgalF1ZXJ5LmZuLnBvc2l0aW9uICkgeworICAgICAgICBqUXVlcnku
ZWFjaCggWyAidG9wIiwgImxlZnQiIF0sIGZ1bmN0aW9uKCBpLCBwcm9wICkgeworICAgICAgICAg
ICAgalF1ZXJ5LmNzc0hvb2tzWyBwcm9wIF0gPSB7CisgICAgICAgICAgICAgICAgZ2V0OiBmdW5j
dGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICggY29tcHV0
ZWQgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmV0ID0gY3VyQ1NTKCBlbGVtLCBw
cm9wICk7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiBjdXJDU1MgcmV0dXJucyBwZXJj
ZW50YWdlLCBmYWxsYmFjayB0byBvZmZzZXQKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBybnVtbm9ucHgudGVzdCggcmV0ICkgPyBqUXVlcnkoIGVsZW0gKS5wb3NpdGlvbigpWyBwcm9w
IF0gKyAicHgiIDogcmV0OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfTsKKyAgICAgICAgfSk7CisgICAgfQorCit9KTsKKworaWYgKCBqUXVl
cnkuZXhwciAmJiBqUXVlcnkuZXhwci5maWx0ZXJzICkgeworICAgIGpRdWVyeS5leHByLmZpbHRl
cnMuaGlkZGVuID0gZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgIHJldHVybiAoIGVsZW0ub2Zm
c2V0V2lkdGggPT09IDAgJiYgZWxlbS5vZmZzZXRIZWlnaHQgPT09IDAgKSB8fCAoIWpRdWVyeS5z
dXBwb3J0LnJlbGlhYmxlSGlkZGVuT2Zmc2V0cyAmJiAoKGVsZW0uc3R5bGUgJiYgZWxlbS5zdHls
ZS5kaXNwbGF5KSB8fCBjdXJDU1MoIGVsZW0sICJkaXNwbGF5IiApKSA9PT0gIm5vbmUiKTsKKyAg
ICB9OworCisgICAgalF1ZXJ5LmV4cHIuZmlsdGVycy52aXNpYmxlID0gZnVuY3Rpb24oIGVsZW0g
KSB7CisgICAgICAgIHJldHVybiAhalF1ZXJ5LmV4cHIuZmlsdGVycy5oaWRkZW4oIGVsZW0gKTsK
KyAgICB9OworfQorCisvLyBUaGVzZSBob29rcyBhcmUgdXNlZCBieSBhbmltYXRlIHRvIGV4cGFu
ZCBwcm9wZXJ0aWVzCitqUXVlcnkuZWFjaCh7CisgICAgbWFyZ2luOiAiIiwKKyAgICBwYWRkaW5n
OiAiIiwKKyAgICBib3JkZXI6ICJXaWR0aCIKK30sIGZ1bmN0aW9uKCBwcmVmaXgsIHN1ZmZpeCAp
IHsKKyAgICBqUXVlcnkuY3NzSG9va3NbIHByZWZpeCArIHN1ZmZpeCBdID0geworICAgICAgICBl
eHBhbmQ6IGZ1bmN0aW9uKCB2YWx1ZSApIHsKKyAgICAgICAgICAgIHZhciBpLAorCisgICAgICAg
ICAgICAgICAgLy8gYXNzdW1lcyBhIHNpbmdsZSBudW1iZXIgaWYgbm90IGEgc3RyaW5nCisgICAg
ICAgICAgICAgICAgcGFydHMgPSB0eXBlb2YgdmFsdWUgPT09ICJzdHJpbmciID8gdmFsdWUuc3Bs
aXQoIiAiKSA6IFsgdmFsdWUgXSwKKyAgICAgICAgICAgICAgICBleHBhbmRlZCA9IHt9OworCisg
ICAgICAgICAgICBmb3IgKCBpID0gMDsgaSA8IDQ7IGkrKyApIHsKKyAgICAgICAgICAgICAgICBl
eHBhbmRlZFsgcHJlZml4ICsgY3NzRXhwYW5kWyBpIF0gKyBzdWZmaXggXSA9CisgICAgICAgICAg
ICAgICAgICAgIHBhcnRzWyBpIF0gfHwgcGFydHNbIGkgLSAyIF0gfHwgcGFydHNbIDAgXTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIGV4cGFuZGVkOworICAgICAgICB9Cisg
ICAgfTsKKworICAgIGlmICggIXJtYXJnaW4udGVzdCggcHJlZml4ICkgKSB7CisgICAgICAgIGpR
dWVyeS5jc3NIb29rc1sgcHJlZml4ICsgc3VmZml4IF0uc2V0ID0gc2V0UG9zaXRpdmVOdW1iZXI7
CisgICAgfQorfSk7Cit2YXIgcjIwID0gLyUyMC9nLAorICAgIHJicmFja2V0ID0gL1xbXF0kLywK
KyAgICByQ1JMRiA9IC9ccj9cbi9nLAorICAgIHJpbnB1dCA9IC9eKD86Y29sb3J8ZGF0ZXxkYXRl
dGltZXxkYXRldGltZS1sb2NhbHxlbWFpbHxoaWRkZW58bW9udGh8bnVtYmVyfHBhc3N3b3JkfHJh
bmdlfHNlYXJjaHx0ZWx8dGV4dHx0aW1lfHVybHx3ZWVrKSQvaSwKKyAgICByc2VsZWN0VGV4dGFy
ZWEgPSAvXig/OnNlbGVjdHx0ZXh0YXJlYSkvaTsKKworalF1ZXJ5LmZuLmV4dGVuZCh7CisgICAg
c2VyaWFsaXplOiBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIGpRdWVyeS5wYXJhbSggdGhp
cy5zZXJpYWxpemVBcnJheSgpICk7CisgICAgfSwKKyAgICBzZXJpYWxpemVBcnJheTogZnVuY3Rp
b24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLm1hcChmdW5jdGlvbigpeworICAgICAgICAgICAg
cmV0dXJuIHRoaXMuZWxlbWVudHMgPyBqUXVlcnkubWFrZUFycmF5KCB0aGlzLmVsZW1lbnRzICkg
OiB0aGlzOworICAgICAgICB9KQorICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uKCl7CisgICAgICAg
ICAgICByZXR1cm4gdGhpcy5uYW1lICYmICF0aGlzLmRpc2FibGVkICYmCisgICAgICAgICAgICAg
ICAgKCB0aGlzLmNoZWNrZWQgfHwgcnNlbGVjdFRleHRhcmVhLnRlc3QoIHRoaXMubm9kZU5hbWUg
KSB8fAorICAgICAgICAgICAgICAgICAgICByaW5wdXQudGVzdCggdGhpcy50eXBlICkgKTsKKyAg
ICAgICAgfSkKKyAgICAgICAgLm1hcChmdW5jdGlvbiggaSwgZWxlbSApeworICAgICAgICAgICAg
dmFyIHZhbCA9IGpRdWVyeSggdGhpcyApLnZhbCgpOworCisgICAgICAgICAgICByZXR1cm4gdmFs
ID09IG51bGwgPworICAgICAgICAgICAgICAgIG51bGwgOgorICAgICAgICAgICAgICAgIGpRdWVy
eS5pc0FycmF5KCB2YWwgKSA/CisgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5tYXAoIHZhbCwg
ZnVuY3Rpb24oIHZhbCwgaSApeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgbmFt
ZTogZWxlbS5uYW1lLCB2YWx1ZTogdmFsLnJlcGxhY2UoIHJDUkxGLCAiXHJcbiIgKSB9OworICAg
ICAgICAgICAgICAgICAgICB9KSA6CisgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogZWxlbS5u
YW1lLCB2YWx1ZTogdmFsLnJlcGxhY2UoIHJDUkxGLCAiXHJcbiIgKSB9OworICAgICAgICB9KS5n
ZXQoKTsKKyAgICB9Cit9KTsKKworLy9TZXJpYWxpemUgYW4gYXJyYXkgb2YgZm9ybSBlbGVtZW50
cyBvciBhIHNldCBvZgorLy9rZXkvdmFsdWVzIGludG8gYSBxdWVyeSBzdHJpbmcKK2pRdWVyeS5w
YXJhbSA9IGZ1bmN0aW9uKCBhLCB0cmFkaXRpb25hbCApIHsKKyAgICB2YXIgcHJlZml4LAorICAg
ICAgICBzID0gW10sCisgICAgICAgIGFkZCA9IGZ1bmN0aW9uKCBrZXksIHZhbHVlICkgeworICAg
ICAgICAgICAgLy8gSWYgdmFsdWUgaXMgYSBmdW5jdGlvbiwgaW52b2tlIGl0IGFuZCByZXR1cm4g
aXRzIHZhbHVlCisgICAgICAgICAgICB2YWx1ZSA9IGpRdWVyeS5pc0Z1bmN0aW9uKCB2YWx1ZSAp
ID8gdmFsdWUoKSA6ICggdmFsdWUgPT0gbnVsbCA/ICIiIDogdmFsdWUgKTsKKyAgICAgICAgICAg
IHNbIHMubGVuZ3RoIF0gPSBlbmNvZGVVUklDb21wb25lbnQoIGtleSApICsgIj0iICsgZW5jb2Rl
VVJJQ29tcG9uZW50KCB2YWx1ZSApOworICAgICAgICB9OworCisgICAgLy8gU2V0IHRyYWRpdGlv
bmFsIHRvIHRydWUgZm9yIGpRdWVyeSA8PSAxLjMuMiBiZWhhdmlvci4KKyAgICBpZiAoIHRyYWRp
dGlvbmFsID09PSB1bmRlZmluZWQgKSB7CisgICAgICAgIHRyYWRpdGlvbmFsID0galF1ZXJ5LmFq
YXhTZXR0aW5ncyAmJiBqUXVlcnkuYWpheFNldHRpbmdzLnRyYWRpdGlvbmFsOworICAgIH0KKwor
ICAgIC8vIElmIGFuIGFycmF5IHdhcyBwYXNzZWQgaW4sIGFzc3VtZSB0aGF0IGl0IGlzIGFuIGFy
cmF5IG9mIGZvcm0gZWxlbWVudHMuCisgICAgaWYgKCBqUXVlcnkuaXNBcnJheSggYSApIHx8ICgg
YS5qcXVlcnkgJiYgIWpRdWVyeS5pc1BsYWluT2JqZWN0KCBhICkgKSApIHsKKyAgICAgICAgLy8g
U2VyaWFsaXplIHRoZSBmb3JtIGVsZW1lbnRzCisgICAgICAgIGpRdWVyeS5lYWNoKCBhLCBmdW5j
dGlvbigpIHsKKyAgICAgICAgICAgIGFkZCggdGhpcy5uYW1lLCB0aGlzLnZhbHVlICk7CisgICAg
ICAgIH0pOworCisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gSWYgdHJhZGl0aW9uYWwsIGVuY29k
ZSB0aGUgIm9sZCIgd2F5ICh0aGUgd2F5IDEuMy4yIG9yIG9sZGVyCisgICAgICAgIC8vIGRpZCBp
dCksIG90aGVyd2lzZSBlbmNvZGUgcGFyYW1zIHJlY3Vyc2l2ZWx5LgorICAgICAgICBmb3IgKCBw
cmVmaXggaW4gYSApIHsKKyAgICAgICAgICAgIGJ1aWxkUGFyYW1zKCBwcmVmaXgsIGFbIHByZWZp
eCBdLCB0cmFkaXRpb25hbCwgYWRkICk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBSZXR1
cm4gdGhlIHJlc3VsdGluZyBzZXJpYWxpemF0aW9uCisgICAgcmV0dXJuIHMuam9pbiggIiYiICku
cmVwbGFjZSggcjIwLCAiKyIgKTsKK307CisKK2Z1bmN0aW9uIGJ1aWxkUGFyYW1zKCBwcmVmaXgs
IG9iaiwgdHJhZGl0aW9uYWwsIGFkZCApIHsKKyAgICB2YXIgbmFtZTsKKworICAgIGlmICggalF1
ZXJ5LmlzQXJyYXkoIG9iaiApICkgeworICAgICAgICAvLyBTZXJpYWxpemUgYXJyYXkgaXRlbS4K
KyAgICAgICAgalF1ZXJ5LmVhY2goIG9iaiwgZnVuY3Rpb24oIGksIHYgKSB7CisgICAgICAgICAg
ICBpZiAoIHRyYWRpdGlvbmFsIHx8IHJicmFja2V0LnRlc3QoIHByZWZpeCApICkgeworICAgICAg
ICAgICAgICAgIC8vIFRyZWF0IGVhY2ggYXJyYXkgaXRlbSBhcyBhIHNjYWxhci4KKyAgICAgICAg
ICAgICAgICBhZGQoIHByZWZpeCwgdiApOworCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIC8vIElmIGFycmF5IGl0ZW0gaXMgbm9uLXNjYWxhciAoYXJyYXkgb3Igb2JqZWN0
KSwgZW5jb2RlIGl0cworICAgICAgICAgICAgICAgIC8vIG51bWVyaWMgaW5kZXggdG8gcmVzb2x2
ZSBkZXNlcmlhbGl6YXRpb24gYW1iaWd1aXR5IGlzc3Vlcy4KKyAgICAgICAgICAgICAgICAvLyBO
b3RlIHRoYXQgcmFjayAoYXMgb2YgMS4wLjApIGNhbid0IGN1cnJlbnRseSBkZXNlcmlhbGl6ZQor
ICAgICAgICAgICAgICAgIC8vIG5lc3RlZCBhcnJheXMgcHJvcGVybHksIGFuZCBhdHRlbXB0aW5n
IHRvIGRvIHNvIG1heSBjYXVzZQorICAgICAgICAgICAgICAgIC8vIGEgc2VydmVyIGVycm9yLiBQ
b3NzaWJsZSBmaXhlcyBhcmUgdG8gbW9kaWZ5IHJhY2sncworICAgICAgICAgICAgICAgIC8vIGRl
c2VyaWFsaXphdGlvbiBhbGdvcml0aG0gb3IgdG8gcHJvdmlkZSBhbiBvcHRpb24gb3IgZmxhZwor
ICAgICAgICAgICAgICAgIC8vIHRvIGZvcmNlIGFycmF5IHNlcmlhbGl6YXRpb24gdG8gYmUgc2hh
bGxvdy4KKyAgICAgICAgICAgICAgICBidWlsZFBhcmFtcyggcHJlZml4ICsgIlsiICsgKCB0eXBl
b2YgdiA9PT0gIm9iamVjdCIgPyBpIDogIiIgKSArICJdIiwgdiwgdHJhZGl0aW9uYWwsIGFkZCAp
OworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKworICAgIH0gZWxzZSBpZiAoICF0cmFkaXRp
b25hbCAmJiBqUXVlcnkudHlwZSggb2JqICkgPT09ICJvYmplY3QiICkgeworICAgICAgICAvLyBT
ZXJpYWxpemUgb2JqZWN0IGl0ZW0uCisgICAgICAgIGZvciAoIG5hbWUgaW4gb2JqICkgeworICAg
ICAgICAgICAgYnVpbGRQYXJhbXMoIHByZWZpeCArICJbIiArIG5hbWUgKyAiXSIsIG9ialsgbmFt
ZSBdLCB0cmFkaXRpb25hbCwgYWRkICk7CisgICAgICAgIH0KKworICAgIH0gZWxzZSB7CisgICAg
ICAgIC8vIFNlcmlhbGl6ZSBzY2FsYXIgaXRlbS4KKyAgICAgICAgYWRkKCBwcmVmaXgsIG9iaiAp
OworICAgIH0KK30KK3ZhcgorICAgIC8vIERvY3VtZW50IGxvY2F0aW9uCisgICAgYWpheExvY1Bh
cnRzLAorICAgIGFqYXhMb2NhdGlvbiwKKworICAgIHJoYXNoID0gLyMuKiQvLAorICAgIHJoZWFk
ZXJzID0gL14oLio/KTpbIFx0XSooW15cclxuXSopXHI/JC9tZywgLy8gSUUgbGVhdmVzIGFuIFxy
IGNoYXJhY3RlciBhdCBFT0wKKyAgICAvLyAjNzY1MywgIzgxMjUsICM4MTUyOiBsb2NhbCBwcm90
b2NvbCBkZXRlY3Rpb24KKyAgICBybG9jYWxQcm90b2NvbCA9IC9eKD86YWJvdXR8YXBwfGFwcFwt
c3RvcmFnZXwuK1wtZXh0ZW5zaW9ufGZpbGV8cmVzfHdpZGdldCk6JC8sCisgICAgcm5vQ29udGVu
dCA9IC9eKD86R0VUfEhFQUQpJC8sCisgICAgcnByb3RvY29sID0gL15cL1wvLywKKyAgICBycXVl
cnkgPSAvXD8vLAorICAgIHJzY3JpcHQgPSAvPHNjcmlwdFxiW148XSooPzooPyE8XC9zY3JpcHQ+
KTxbXjxdKikqPFwvc2NyaXB0Pi9naSwKKyAgICBydHMgPSAvKFs/Jl0pXz1bXiZdKi8sCisgICAg
cnVybCA9IC9eKFtcd1wrXC5cLV0rOikoPzpcL1wvKFteXC8/IzpdKikoPzo6KFxkKyl8KXwpLywK
KworICAgIC8vIEtlZXAgYSBjb3B5IG9mIHRoZSBvbGQgbG9hZCBtZXRob2QKKyAgICBfbG9hZCA9
IGpRdWVyeS5mbi5sb2FkLAorCisgICAgLyogUHJlZmlsdGVycworICAgICAqIDEpIFRoZXkgYXJl
IHVzZWZ1bCB0byBpbnRyb2R1Y2UgY3VzdG9tIGRhdGFUeXBlcyAoc2VlIGFqYXgvanNvbnAuanMg
Zm9yIGFuIGV4YW1wbGUpCisgICAgICogMikgVGhlc2UgYXJlIGNhbGxlZDoKKyAgICAgKiAgICAt
IEJFRk9SRSBhc2tpbmcgZm9yIGEgdHJhbnNwb3J0CisgICAgICogICAgLSBBRlRFUiBwYXJhbSBz
ZXJpYWxpemF0aW9uIChzLmRhdGEgaXMgYSBzdHJpbmcgaWYgcy5wcm9jZXNzRGF0YSBpcyB0cnVl
KQorICAgICAqIDMpIGtleSBpcyB0aGUgZGF0YVR5cGUKKyAgICAgKiA0KSB0aGUgY2F0Y2hhbGwg
c3ltYm9sICIqIiBjYW4gYmUgdXNlZAorICAgICAqIDUpIGV4ZWN1dGlvbiB3aWxsIHN0YXJ0IHdp
dGggdHJhbnNwb3J0IGRhdGFUeXBlIGFuZCBUSEVOIGNvbnRpbnVlIGRvd24gdG8gIioiIGlmIG5l
ZWRlZAorICAgICAqLworICAgIHByZWZpbHRlcnMgPSB7fSwKKworICAgIC8qIFRyYW5zcG9ydHMg
YmluZGluZ3MKKyAgICAgKiAxKSBrZXkgaXMgdGhlIGRhdGFUeXBlCisgICAgICogMikgdGhlIGNh
dGNoYWxsIHN5bWJvbCAiKiIgY2FuIGJlIHVzZWQKKyAgICAgKiAzKSBzZWxlY3Rpb24gd2lsbCBz
dGFydCB3aXRoIHRyYW5zcG9ydCBkYXRhVHlwZSBhbmQgVEhFTiBnbyB0byAiKiIgaWYgbmVlZGVk
CisgICAgICovCisgICAgdHJhbnNwb3J0cyA9IHt9LAorCisgICAgLy8gQXZvaWQgY29tbWVudC1w
cm9sb2cgY2hhciBzZXF1ZW5jZSAoIzEwMDk4KTsgbXVzdCBhcHBlYXNlIGxpbnQgYW5kIGV2YWRl
IGNvbXByZXNzaW9uCisgICAgYWxsVHlwZXMgPSBbIiovIl0gKyBbIioiXTsKKworLy8gIzgxMzgs
IElFIG1heSB0aHJvdyBhbiBleGNlcHRpb24gd2hlbiBhY2Nlc3NpbmcKKy8vIGEgZmllbGQgZnJv
bSB3aW5kb3cubG9jYXRpb24gaWYgZG9jdW1lbnQuZG9tYWluIGhhcyBiZWVuIHNldAordHJ5IHsK
KyAgICBhamF4TG9jYXRpb24gPSBsb2NhdGlvbi5ocmVmOworfSBjYXRjaCggZSApIHsKKyAgICAv
LyBVc2UgdGhlIGhyZWYgYXR0cmlidXRlIG9mIGFuIEEgZWxlbWVudAorICAgIC8vIHNpbmNlIElF
IHdpbGwgbW9kaWZ5IGl0IGdpdmVuIGRvY3VtZW50LmxvY2F0aW9uCisgICAgYWpheExvY2F0aW9u
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggImEiICk7CisgICAgYWpheExvY2F0aW9uLmhyZWYg
PSAiIjsKKyAgICBhamF4TG9jYXRpb24gPSBhamF4TG9jYXRpb24uaHJlZjsKK30KKworLy8gU2Vn
bWVudCBsb2NhdGlvbiBpbnRvIHBhcnRzCithamF4TG9jUGFydHMgPSBydXJsLmV4ZWMoIGFqYXhM
b2NhdGlvbi50b0xvd2VyQ2FzZSgpICkgfHwgW107CisKKy8vIEJhc2UgImNvbnN0cnVjdG9yIiBm
b3IgalF1ZXJ5LmFqYXhQcmVmaWx0ZXIgYW5kIGpRdWVyeS5hamF4VHJhbnNwb3J0CitmdW5jdGlv
biBhZGRUb1ByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHN0cnVjdHVyZSApIHsKKworICAgIC8vIGRh
dGFUeXBlRXhwcmVzc2lvbiBpcyBvcHRpb25hbCBhbmQgZGVmYXVsdHMgdG8gIioiCisgICAgcmV0
dXJuIGZ1bmN0aW9uKCBkYXRhVHlwZUV4cHJlc3Npb24sIGZ1bmMgKSB7CisKKyAgICAgICAgaWYg
KCB0eXBlb2YgZGF0YVR5cGVFeHByZXNzaW9uICE9PSAic3RyaW5nIiApIHsKKyAgICAgICAgICAg
IGZ1bmMgPSBkYXRhVHlwZUV4cHJlc3Npb247CisgICAgICAgICAgICBkYXRhVHlwZUV4cHJlc3Np
b24gPSAiKiI7CisgICAgICAgIH0KKworICAgICAgICB2YXIgZGF0YVR5cGUsIGxpc3QsIHBsYWNl
QmVmb3JlLAorICAgICAgICAgICAgZGF0YVR5cGVzID0gZGF0YVR5cGVFeHByZXNzaW9uLnRvTG93
ZXJDYXNlKCkuc3BsaXQoIGNvcmVfcnNwYWNlICksCisgICAgICAgICAgICBpID0gMCwKKyAgICAg
ICAgICAgIGxlbmd0aCA9IGRhdGFUeXBlcy5sZW5ndGg7CisKKyAgICAgICAgaWYgKCBqUXVlcnku
aXNGdW5jdGlvbiggZnVuYyApICkgeworICAgICAgICAgICAgLy8gRm9yIGVhY2ggZGF0YVR5cGUg
aW4gdGhlIGRhdGFUeXBlRXhwcmVzc2lvbgorICAgICAgICAgICAgZm9yICggOyBpIDwgbGVuZ3Ro
OyBpKysgKSB7CisgICAgICAgICAgICAgICAgZGF0YVR5cGUgPSBkYXRhVHlwZXNbIGkgXTsKKyAg
ICAgICAgICAgICAgICAvLyBXZSBjb250cm9sIGlmIHdlJ3JlIGFza2VkIHRvIGFkZCBiZWZvcmUK
KyAgICAgICAgICAgICAgICAvLyBhbnkgZXhpc3RpbmcgZWxlbWVudAorICAgICAgICAgICAgICAg
IHBsYWNlQmVmb3JlID0gL15cKy8udGVzdCggZGF0YVR5cGUgKTsKKyAgICAgICAgICAgICAgICBp
ZiAoIHBsYWNlQmVmb3JlICkgeworICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZSA9IGRhdGFU
eXBlLnN1YnN0ciggMSApIHx8ICIqIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgbGlzdCA9IHN0cnVjdHVyZVsgZGF0YVR5cGUgXSA9IHN0cnVjdHVyZVsgZGF0YVR5cGUgXSB8
fCBbXTsKKyAgICAgICAgICAgICAgICAvLyB0aGVuIHdlIGFkZCB0byB0aGUgc3RydWN0dXJlIGFj
Y29yZGluZ2x5CisgICAgICAgICAgICAgICAgbGlzdFsgcGxhY2VCZWZvcmUgPyAidW5zaGlmdCIg
OiAicHVzaCIgXSggZnVuYyApOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKK30K
KworLy8gQmFzZSBpbnNwZWN0aW9uIGZ1bmN0aW9uIGZvciBwcmVmaWx0ZXJzIGFuZCB0cmFuc3Bv
cnRzCitmdW5jdGlvbiBpbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNwb3J0cyggc3RydWN0dXJlLCBv
cHRpb25zLCBvcmlnaW5hbE9wdGlvbnMsIGpxWEhSLAorICAgICAgICBkYXRhVHlwZSAvKiBpbnRl
cm5hbCAqLywgaW5zcGVjdGVkIC8qIGludGVybmFsICovICkgeworCisgICAgZGF0YVR5cGUgPSBk
YXRhVHlwZSB8fCBvcHRpb25zLmRhdGFUeXBlc1sgMCBdOworICAgIGluc3BlY3RlZCA9IGluc3Bl
Y3RlZCB8fCB7fTsKKworICAgIGluc3BlY3RlZFsgZGF0YVR5cGUgXSA9IHRydWU7CisKKyAgICB2
YXIgc2VsZWN0aW9uLAorICAgICAgICBsaXN0ID0gc3RydWN0dXJlWyBkYXRhVHlwZSBdLAorICAg
ICAgICBpID0gMCwKKyAgICAgICAgbGVuZ3RoID0gbGlzdCA/IGxpc3QubGVuZ3RoIDogMCwKKyAg
ICAgICAgZXhlY3V0ZU9ubHkgPSAoIHN0cnVjdHVyZSA9PT0gcHJlZmlsdGVycyApOworCisgICAg
Zm9yICggOyBpIDwgbGVuZ3RoICYmICggZXhlY3V0ZU9ubHkgfHwgIXNlbGVjdGlvbiApOyBpKysg
KSB7CisgICAgICAgIHNlbGVjdGlvbiA9IGxpc3RbIGkgXSggb3B0aW9ucywgb3JpZ2luYWxPcHRp
b25zLCBqcVhIUiApOworICAgICAgICAvLyBJZiB3ZSBnb3QgcmVkaXJlY3RlZCB0byBhbm90aGVy
IGRhdGFUeXBlCisgICAgICAgIC8vIHdlIHRyeSB0aGVyZSBpZiBleGVjdXRpbmcgb25seSBhbmQg
bm90IGRvbmUgYWxyZWFkeQorICAgICAgICBpZiAoIHR5cGVvZiBzZWxlY3Rpb24gPT09ICJzdHJp
bmciICkgeworICAgICAgICAgICAgaWYgKCAhZXhlY3V0ZU9ubHkgfHwgaW5zcGVjdGVkWyBzZWxl
Y3Rpb24gXSApIHsKKyAgICAgICAgICAgICAgICBzZWxlY3Rpb24gPSB1bmRlZmluZWQ7CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG9wdGlvbnMuZGF0YVR5cGVzLnVuc2hp
ZnQoIHNlbGVjdGlvbiApOworICAgICAgICAgICAgICAgIHNlbGVjdGlvbiA9IGluc3BlY3RQcmVm
aWx0ZXJzT3JUcmFuc3BvcnRzKAorICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLCBv
cHRpb25zLCBvcmlnaW5hbE9wdGlvbnMsIGpxWEhSLCBzZWxlY3Rpb24sIGluc3BlY3RlZCApOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIC8vIElmIHdlJ3JlIG9ubHkgZXhl
Y3V0aW5nIG9yIG5vdGhpbmcgd2FzIHNlbGVjdGVkCisgICAgLy8gd2UgdHJ5IHRoZSBjYXRjaGFs
bCBkYXRhVHlwZSBpZiBub3QgZG9uZSBhbHJlYWR5CisgICAgaWYgKCAoIGV4ZWN1dGVPbmx5IHx8
ICFzZWxlY3Rpb24gKSAmJiAhaW5zcGVjdGVkWyAiKiIgXSApIHsKKyAgICAgICAgc2VsZWN0aW9u
ID0gaW5zcGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMoCisgICAgICAgICAgICAgICAgc3RydWN0
dXJlLCBvcHRpb25zLCBvcmlnaW5hbE9wdGlvbnMsIGpxWEhSLCAiKiIsIGluc3BlY3RlZCApOwor
ICAgIH0KKyAgICAvLyB1bm5lY2Vzc2FyeSB3aGVuIG9ubHkgZXhlY3V0aW5nIChwcmVmaWx0ZXJz
KQorICAgIC8vIGJ1dCBpdCdsbCBiZSBpZ25vcmVkIGJ5IHRoZSBjYWxsZXIgaW4gdGhhdCBjYXNl
CisgICAgcmV0dXJuIHNlbGVjdGlvbjsKK30KKworLy8gQSBzcGVjaWFsIGV4dGVuZCBmb3IgYWph
eCBvcHRpb25zCisvLyB0aGF0IHRha2VzICJmbGF0IiBvcHRpb25zIChub3QgdG8gYmUgZGVlcCBl
eHRlbmRlZCkKKy8vIEZpeGVzICM5ODg3CitmdW5jdGlvbiBhamF4RXh0ZW5kKCB0YXJnZXQsIHNy
YyApIHsKKyAgICB2YXIga2V5LCBkZWVwLAorICAgICAgICBmbGF0T3B0aW9ucyA9IGpRdWVyeS5h
amF4U2V0dGluZ3MuZmxhdE9wdGlvbnMgfHwge307CisgICAgZm9yICgga2V5IGluIHNyYyApIHsK
KyAgICAgICAgaWYgKCBzcmNbIGtleSBdICE9PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAgICAo
IGZsYXRPcHRpb25zWyBrZXkgXSA/IHRhcmdldCA6ICggZGVlcCB8fCAoIGRlZXAgPSB7fSApICkg
KVsga2V5IF0gPSBzcmNbIGtleSBdOworICAgICAgICB9CisgICAgfQorICAgIGlmICggZGVlcCAp
IHsKKyAgICAgICAgalF1ZXJ5LmV4dGVuZCggdHJ1ZSwgdGFyZ2V0LCBkZWVwICk7CisgICAgfQor
fQorCitqUXVlcnkuZm4ubG9hZCA9IGZ1bmN0aW9uKCB1cmwsIHBhcmFtcywgY2FsbGJhY2sgKSB7
CisgICAgaWYgKCB0eXBlb2YgdXJsICE9PSAic3RyaW5nIiAmJiBfbG9hZCApIHsKKyAgICAgICAg
cmV0dXJuIF9sb2FkLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTsKKyAgICB9CisKKyAgICAvLyBE
b24ndCBkbyBhIHJlcXVlc3QgaWYgbm8gZWxlbWVudHMgYXJlIGJlaW5nIHJlcXVlc3RlZAorICAg
IGlmICggIXRoaXMubGVuZ3RoICkgeworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9CisKKyAg
ICB2YXIgc2VsZWN0b3IsIHR5cGUsIHJlc3BvbnNlLAorICAgICAgICBzZWxmID0gdGhpcywKKyAg
ICAgICAgb2ZmID0gdXJsLmluZGV4T2YoIiAiKTsKKworICAgIGlmICggb2ZmID49IDAgKSB7Cisg
ICAgICAgIHNlbGVjdG9yID0gdXJsLnNsaWNlKCBvZmYsIHVybC5sZW5ndGggKTsKKyAgICAgICAg
dXJsID0gdXJsLnNsaWNlKCAwLCBvZmYgKTsKKyAgICB9CisKKyAgICAvLyBJZiBpdCdzIGEgZnVu
Y3Rpb24KKyAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBwYXJhbXMgKSApIHsKKworICAgICAg
ICAvLyBXZSBhc3N1bWUgdGhhdCBpdCdzIHRoZSBjYWxsYmFjaworICAgICAgICBjYWxsYmFjayA9
IHBhcmFtczsKKyAgICAgICAgcGFyYW1zID0gdW5kZWZpbmVkOworCisgICAgLy8gT3RoZXJ3aXNl
LCBidWlsZCBhIHBhcmFtIHN0cmluZworICAgIH0gZWxzZSBpZiAoIHBhcmFtcyAmJiB0eXBlb2Yg
cGFyYW1zID09PSAib2JqZWN0IiApIHsKKyAgICAgICAgdHlwZSA9ICJQT1NUIjsKKyAgICB9CisK
KyAgICAvLyBSZXF1ZXN0IHRoZSByZW1vdGUgZG9jdW1lbnQKKyAgICBqUXVlcnkuYWpheCh7Cisg
ICAgICAgIHVybDogdXJsLAorCisgICAgICAgIC8vIGlmICJ0eXBlIiB2YXJpYWJsZSBpcyB1bmRl
ZmluZWQsIHRoZW4gIkdFVCIgbWV0aG9kIHdpbGwgYmUgdXNlZAorICAgICAgICB0eXBlOiB0eXBl
LAorICAgICAgICBkYXRhVHlwZTogImh0bWwiLAorICAgICAgICBkYXRhOiBwYXJhbXMsCisgICAg
ICAgIGNvbXBsZXRlOiBmdW5jdGlvbigganFYSFIsIHN0YXR1cyApIHsKKyAgICAgICAgICAgIGlm
ICggY2FsbGJhY2sgKSB7CisgICAgICAgICAgICAgICAgc2VsZi5lYWNoKCBjYWxsYmFjaywgcmVz
cG9uc2UgfHwgWyBqcVhIUi5yZXNwb25zZVRleHQsIHN0YXR1cywganFYSFIgXSApOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfSkuZG9uZShmdW5jdGlvbiggcmVzcG9uc2VUZXh0ICkg
eworCisgICAgICAgIC8vIFNhdmUgcmVzcG9uc2UgZm9yIHVzZSBpbiBjb21wbGV0ZSBjYWxsYmFj
aworICAgICAgICByZXNwb25zZSA9IGFyZ3VtZW50czsKKworICAgICAgICAvLyBTZWUgaWYgYSBz
ZWxlY3RvciB3YXMgc3BlY2lmaWVkCisgICAgICAgIHNlbGYuaHRtbCggc2VsZWN0b3IgPworCisg
ICAgICAgICAgICAvLyBDcmVhdGUgYSBkdW1teSBkaXYgdG8gaG9sZCB0aGUgcmVzdWx0cworICAg
ICAgICAgICAgalF1ZXJ5KCI8ZGl2PiIpCisKKyAgICAgICAgICAgICAgICAvLyBpbmplY3QgdGhl
IGNvbnRlbnRzIG9mIHRoZSBkb2N1bWVudCBpbiwgcmVtb3ZpbmcgdGhlIHNjcmlwdHMKKyAgICAg
ICAgICAgICAgICAvLyB0byBhdm9pZCBhbnkgJ1Blcm1pc3Npb24gRGVuaWVkJyBlcnJvcnMgaW4g
SUUKKyAgICAgICAgICAgICAgICAuYXBwZW5kKCByZXNwb25zZVRleHQucmVwbGFjZSggcnNjcmlw
dCwgIiIgKSApCisKKyAgICAgICAgICAgICAgICAvLyBMb2NhdGUgdGhlIHNwZWNpZmllZCBlbGVt
ZW50cworICAgICAgICAgICAgICAgIC5maW5kKCBzZWxlY3RvciApIDoKKworICAgICAgICAgICAg
Ly8gSWYgbm90LCBqdXN0IGluamVjdCB0aGUgZnVsbCByZXN1bHQKKyAgICAgICAgICAgIHJlc3Bv
bnNlVGV4dCApOworCisgICAgfSk7CisKKyAgICByZXR1cm4gdGhpczsKK307CisKKy8vIEF0dGFj
aCBhIGJ1bmNoIG9mIGZ1bmN0aW9ucyBmb3IgaGFuZGxpbmcgY29tbW9uIEFKQVggZXZlbnRzCitq
UXVlcnkuZWFjaCggImFqYXhTdGFydCBhamF4U3RvcCBhamF4Q29tcGxldGUgYWpheEVycm9yIGFq
YXhTdWNjZXNzIGFqYXhTZW5kIi5zcGxpdCggIiAiICksIGZ1bmN0aW9uKCBpLCBvICl7CisgICAg
alF1ZXJ5LmZuWyBvIF0gPSBmdW5jdGlvbiggZiApeworICAgICAgICByZXR1cm4gdGhpcy5vbigg
bywgZiApOworICAgIH07Cit9KTsKKworalF1ZXJ5LmVhY2goIFsgImdldCIsICJwb3N0IiBdLCBm
dW5jdGlvbiggaSwgbWV0aG9kICkgeworICAgIGpRdWVyeVsgbWV0aG9kIF0gPSBmdW5jdGlvbigg
dXJsLCBkYXRhLCBjYWxsYmFjaywgdHlwZSApIHsKKyAgICAgICAgLy8gc2hpZnQgYXJndW1lbnRz
IGlmIGRhdGEgYXJndW1lbnQgd2FzIG9taXR0ZWQKKyAgICAgICAgaWYgKCBqUXVlcnkuaXNGdW5j
dGlvbiggZGF0YSApICkgeworICAgICAgICAgICAgdHlwZSA9IHR5cGUgfHwgY2FsbGJhY2s7Cisg
ICAgICAgICAgICBjYWxsYmFjayA9IGRhdGE7CisgICAgICAgICAgICBkYXRhID0gdW5kZWZpbmVk
OworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGpRdWVyeS5hamF4KHsKKyAgICAgICAgICAg
IHR5cGU6IG1ldGhvZCwKKyAgICAgICAgICAgIHVybDogdXJsLAorICAgICAgICAgICAgZGF0YTog
ZGF0YSwKKyAgICAgICAgICAgIHN1Y2Nlc3M6IGNhbGxiYWNrLAorICAgICAgICAgICAgZGF0YVR5
cGU6IHR5cGUKKyAgICAgICAgfSk7CisgICAgfTsKK30pOworCitqUXVlcnkuZXh0ZW5kKHsKKwor
ICAgIGdldFNjcmlwdDogZnVuY3Rpb24oIHVybCwgY2FsbGJhY2sgKSB7CisgICAgICAgIHJldHVy
biBqUXVlcnkuZ2V0KCB1cmwsIHVuZGVmaW5lZCwgY2FsbGJhY2ssICJzY3JpcHQiICk7CisgICAg
fSwKKworICAgIGdldEpTT046IGZ1bmN0aW9uKCB1cmwsIGRhdGEsIGNhbGxiYWNrICkgeworICAg
ICAgICByZXR1cm4galF1ZXJ5LmdldCggdXJsLCBkYXRhLCBjYWxsYmFjaywgImpzb24iICk7Cisg
ICAgfSwKKworICAgIC8vIENyZWF0ZXMgYSBmdWxsIGZsZWRnZWQgc2V0dGluZ3Mgb2JqZWN0IGlu
dG8gdGFyZ2V0CisgICAgLy8gd2l0aCBib3RoIGFqYXhTZXR0aW5ncyBhbmQgc2V0dGluZ3MgZmll
bGRzLgorICAgIC8vIElmIHRhcmdldCBpcyBvbWl0dGVkLCB3cml0ZXMgaW50byBhamF4U2V0dGlu
Z3MuCisgICAgYWpheFNldHVwOiBmdW5jdGlvbiggdGFyZ2V0LCBzZXR0aW5ncyApIHsKKyAgICAg
ICAgaWYgKCBzZXR0aW5ncyApIHsKKyAgICAgICAgICAgIC8vIEJ1aWxkaW5nIGEgc2V0dGluZ3Mg
b2JqZWN0CisgICAgICAgICAgICBhamF4RXh0ZW5kKCB0YXJnZXQsIGpRdWVyeS5hamF4U2V0dGlu
Z3MgKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIEV4dGVuZGluZyBhamF4U2V0
dGluZ3MKKyAgICAgICAgICAgIHNldHRpbmdzID0gdGFyZ2V0OworICAgICAgICAgICAgdGFyZ2V0
ID0galF1ZXJ5LmFqYXhTZXR0aW5nczsKKyAgICAgICAgfQorICAgICAgICBhamF4RXh0ZW5kKCB0
YXJnZXQsIHNldHRpbmdzICk7CisgICAgICAgIHJldHVybiB0YXJnZXQ7CisgICAgfSwKKworICAg
IGFqYXhTZXR0aW5nczogeworICAgICAgICB1cmw6IGFqYXhMb2NhdGlvbiwKKyAgICAgICAgaXNM
b2NhbDogcmxvY2FsUHJvdG9jb2wudGVzdCggYWpheExvY1BhcnRzWyAxIF0gKSwKKyAgICAgICAg
Z2xvYmFsOiB0cnVlLAorICAgICAgICB0eXBlOiAiR0VUIiwKKyAgICAgICAgY29udGVudFR5cGU6
ICJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7IGNoYXJzZXQ9VVRGLTgiLAorICAg
ICAgICBwcm9jZXNzRGF0YTogdHJ1ZSwKKyAgICAgICAgYXN5bmM6IHRydWUsCisgICAgICAgIC8q
CisgICAgICAgIHRpbWVvdXQ6IDAsCisgICAgICAgIGRhdGE6IG51bGwsCisgICAgICAgIGRhdGFU
eXBlOiBudWxsLAorICAgICAgICB1c2VybmFtZTogbnVsbCwKKyAgICAgICAgcGFzc3dvcmQ6IG51
bGwsCisgICAgICAgIGNhY2hlOiBudWxsLAorICAgICAgICB0aHJvd3M6IGZhbHNlLAorICAgICAg
ICB0cmFkaXRpb25hbDogZmFsc2UsCisgICAgICAgIGhlYWRlcnM6IHt9LAorICAgICAgICAqLwor
CisgICAgICAgIGFjY2VwdHM6IHsKKyAgICAgICAgICAgIHhtbDogImFwcGxpY2F0aW9uL3htbCwg
dGV4dC94bWwiLAorICAgICAgICAgICAgaHRtbDogInRleHQvaHRtbCIsCisgICAgICAgICAgICB0
ZXh0OiAidGV4dC9wbGFpbiIsCisgICAgICAgICAgICBqc29uOiAiYXBwbGljYXRpb24vanNvbiwg
dGV4dC9qYXZhc2NyaXB0IiwKKyAgICAgICAgICAgICIqIjogYWxsVHlwZXMKKyAgICAgICAgfSwK
KworICAgICAgICBjb250ZW50czogeworICAgICAgICAgICAgeG1sOiAveG1sLywKKyAgICAgICAg
ICAgIGh0bWw6IC9odG1sLywKKyAgICAgICAgICAgIGpzb246IC9qc29uLworICAgICAgICB9LAor
CisgICAgICAgIHJlc3BvbnNlRmllbGRzOiB7CisgICAgICAgICAgICB4bWw6ICJyZXNwb25zZVhN
TCIsCisgICAgICAgICAgICB0ZXh0OiAicmVzcG9uc2VUZXh0IgorICAgICAgICB9LAorCisgICAg
ICAgIC8vIExpc3Qgb2YgZGF0YSBjb252ZXJ0ZXJzCisgICAgICAgIC8vIDEpIGtleSBmb3JtYXQg
aXMgInNvdXJjZV90eXBlIGRlc3RpbmF0aW9uX3R5cGUiIChhIHNpbmdsZSBzcGFjZSBpbi1iZXR3
ZWVuKQorICAgICAgICAvLyAyKSB0aGUgY2F0Y2hhbGwgc3ltYm9sICIqIiBjYW4gYmUgdXNlZCBm
b3Igc291cmNlX3R5cGUKKyAgICAgICAgY29udmVydGVyczogeworCisgICAgICAgICAgICAvLyBD
b252ZXJ0IGFueXRoaW5nIHRvIHRleHQKKyAgICAgICAgICAgICIqIHRleHQiOiB3aW5kb3cuU3Ry
aW5nLAorCisgICAgICAgICAgICAvLyBUZXh0IHRvIGh0bWwgKHRydWUgPSBubyB0cmFuc2Zvcm1h
dGlvbikKKyAgICAgICAgICAgICJ0ZXh0IGh0bWwiOiB0cnVlLAorCisgICAgICAgICAgICAvLyBF
dmFsdWF0ZSB0ZXh0IGFzIGEganNvbiBleHByZXNzaW9uCisgICAgICAgICAgICAidGV4dCBqc29u
IjogalF1ZXJ5LnBhcnNlSlNPTiwKKworICAgICAgICAgICAgLy8gUGFyc2UgdGV4dCBhcyB4bWwK
KyAgICAgICAgICAgICJ0ZXh0IHhtbCI6IGpRdWVyeS5wYXJzZVhNTAorICAgICAgICB9LAorCisg
ICAgICAgIC8vIEZvciBvcHRpb25zIHRoYXQgc2hvdWxkbid0IGJlIGRlZXAgZXh0ZW5kZWQ6Cisg
ICAgICAgIC8vIHlvdSBjYW4gYWRkIHlvdXIgb3duIGN1c3RvbSBvcHRpb25zIGhlcmUgaWYKKyAg
ICAgICAgLy8gYW5kIHdoZW4geW91IGNyZWF0ZSBvbmUgdGhhdCBzaG91bGRuJ3QgYmUKKyAgICAg
ICAgLy8gZGVlcCBleHRlbmRlZCAoc2VlIGFqYXhFeHRlbmQpCisgICAgICAgIGZsYXRPcHRpb25z
OiB7CisgICAgICAgICAgICBjb250ZXh0OiB0cnVlLAorICAgICAgICAgICAgdXJsOiB0cnVlCisg
ICAgICAgIH0KKyAgICB9LAorCisgICAgYWpheFByZWZpbHRlcjogYWRkVG9QcmVmaWx0ZXJzT3JU
cmFuc3BvcnRzKCBwcmVmaWx0ZXJzICksCisgICAgYWpheFRyYW5zcG9ydDogYWRkVG9QcmVmaWx0
ZXJzT3JUcmFuc3BvcnRzKCB0cmFuc3BvcnRzICksCisKKyAgICAvLyBNYWluIG1ldGhvZAorICAg
IGFqYXg6IGZ1bmN0aW9uKCB1cmwsIG9wdGlvbnMgKSB7CisKKyAgICAgICAgLy8gSWYgdXJsIGlz
IGFuIG9iamVjdCwgc2ltdWxhdGUgcHJlLTEuNSBzaWduYXR1cmUKKyAgICAgICAgaWYgKCB0eXBl
b2YgdXJsID09PSAib2JqZWN0IiApIHsKKyAgICAgICAgICAgIG9wdGlvbnMgPSB1cmw7CisgICAg
ICAgICAgICB1cmwgPSB1bmRlZmluZWQ7CisgICAgICAgIH0KKworICAgICAgICAvLyBGb3JjZSBv
cHRpb25zIHRvIGJlIGFuIG9iamVjdAorICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsK
KworICAgICAgICB2YXIgLy8gaWZNb2RpZmllZCBrZXkKKyAgICAgICAgICAgIGlmTW9kaWZpZWRL
ZXksCisgICAgICAgICAgICAvLyBSZXNwb25zZSBoZWFkZXJzCisgICAgICAgICAgICByZXNwb25z
ZUhlYWRlcnNTdHJpbmcsCisgICAgICAgICAgICByZXNwb25zZUhlYWRlcnMsCisgICAgICAgICAg
ICAvLyB0cmFuc3BvcnQKKyAgICAgICAgICAgIHRyYW5zcG9ydCwKKyAgICAgICAgICAgIC8vIHRp
bWVvdXQgaGFuZGxlCisgICAgICAgICAgICB0aW1lb3V0VGltZXIsCisgICAgICAgICAgICAvLyBD
cm9zcy1kb21haW4gZGV0ZWN0aW9uIHZhcnMKKyAgICAgICAgICAgIHBhcnRzLAorICAgICAgICAg
ICAgLy8gVG8ga25vdyBpZiBnbG9iYWwgZXZlbnRzIGFyZSB0byBiZSBkaXNwYXRjaGVkCisgICAg
ICAgICAgICBmaXJlR2xvYmFscywKKyAgICAgICAgICAgIC8vIExvb3AgdmFyaWFibGUKKyAgICAg
ICAgICAgIGksCisgICAgICAgICAgICAvLyBDcmVhdGUgdGhlIGZpbmFsIG9wdGlvbnMgb2JqZWN0
CisgICAgICAgICAgICBzID0galF1ZXJ5LmFqYXhTZXR1cCgge30sIG9wdGlvbnMgKSwKKyAgICAg
ICAgICAgIC8vIENhbGxiYWNrcyBjb250ZXh0CisgICAgICAgICAgICBjYWxsYmFja0NvbnRleHQg
PSBzLmNvbnRleHQgfHwgcywKKyAgICAgICAgICAgIC8vIENvbnRleHQgZm9yIGdsb2JhbCBldmVu
dHMKKyAgICAgICAgICAgIC8vIEl0J3MgdGhlIGNhbGxiYWNrQ29udGV4dCBpZiBvbmUgd2FzIHBy
b3ZpZGVkIGluIHRoZSBvcHRpb25zCisgICAgICAgICAgICAvLyBhbmQgaWYgaXQncyBhIERPTSBu
b2RlIG9yIGEgalF1ZXJ5IGNvbGxlY3Rpb24KKyAgICAgICAgICAgIGdsb2JhbEV2ZW50Q29udGV4
dCA9IGNhbGxiYWNrQ29udGV4dCAhPT0gcyAmJgorICAgICAgICAgICAgICAgICggY2FsbGJhY2tD
b250ZXh0Lm5vZGVUeXBlIHx8IGNhbGxiYWNrQ29udGV4dCBpbnN0YW5jZW9mIGpRdWVyeSApID8K
KyAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeSggY2FsbGJhY2tDb250ZXh0ICkgOiBqUXVl
cnkuZXZlbnQsCisgICAgICAgICAgICAvLyBEZWZlcnJlZHMKKyAgICAgICAgICAgIGRlZmVycmVk
ID0galF1ZXJ5LkRlZmVycmVkKCksCisgICAgICAgICAgICBjb21wbGV0ZURlZmVycmVkID0galF1
ZXJ5LkNhbGxiYWNrcyggIm9uY2UgbWVtb3J5IiApLAorICAgICAgICAgICAgLy8gU3RhdHVzLWRl
cGVuZGVudCBjYWxsYmFja3MKKyAgICAgICAgICAgIHN0YXR1c0NvZGUgPSBzLnN0YXR1c0NvZGUg
fHwge30sCisgICAgICAgICAgICAvLyBIZWFkZXJzICh0aGV5IGFyZSBzZW50IGFsbCBhdCBvbmNl
KQorICAgICAgICAgICAgcmVxdWVzdEhlYWRlcnMgPSB7fSwKKyAgICAgICAgICAgIHJlcXVlc3RI
ZWFkZXJzTmFtZXMgPSB7fSwKKyAgICAgICAgICAgIC8vIFRoZSBqcVhIUiBzdGF0ZQorICAgICAg
ICAgICAgc3RhdGUgPSAwLAorICAgICAgICAgICAgLy8gRGVmYXVsdCBhYm9ydCBtZXNzYWdlCisg
ICAgICAgICAgICBzdHJBYm9ydCA9ICJjYW5jZWxlZCIsCisgICAgICAgICAgICAvLyBGYWtlIHho
cgorICAgICAgICAgICAganFYSFIgPSB7CisKKyAgICAgICAgICAgICAgICByZWFkeVN0YXRlOiAw
LAorCisgICAgICAgICAgICAgICAgLy8gQ2FjaGVzIHRoZSBoZWFkZXIKKyAgICAgICAgICAgICAg
ICBzZXRSZXF1ZXN0SGVhZGVyOiBmdW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7CisgICAgICAgICAg
ICAgICAgICAgIGlmICggIXN0YXRlICkgeworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxu
YW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9
IHJlcXVlc3RIZWFkZXJzTmFtZXNbIGxuYW1lIF0gPSByZXF1ZXN0SGVhZGVyc05hbWVzWyBsbmFt
ZSBdIHx8IG5hbWU7CisgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0SGVhZGVyc1sgbmFt
ZSBdID0gdmFsdWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRoaXM7CisgICAgICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgICAgIC8vIFJh
dyBzdHJpbmcKKyAgICAgICAgICAgICAgICBnZXRBbGxSZXNwb25zZUhlYWRlcnM6IGZ1bmN0aW9u
KCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGUgPT09IDIgPyByZXNwb25zZUhl
YWRlcnNTdHJpbmcgOiBudWxsOworICAgICAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgICAg
ICAvLyBCdWlsZHMgaGVhZGVycyBoYXNodGFibGUgaWYgbmVlZGVkCisgICAgICAgICAgICAgICAg
Z2V0UmVzcG9uc2VIZWFkZXI6IGZ1bmN0aW9uKCBrZXkgKSB7CisgICAgICAgICAgICAgICAgICAg
IHZhciBtYXRjaDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBzdGF0ZSA9PT0gMiApIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggIXJlc3BvbnNlSGVhZGVycyApIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXNwb25zZUhlYWRlcnMgPSB7fTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB3aGlsZSggKCBtYXRjaCA9IHJoZWFkZXJzLmV4ZWMoIHJlc3BvbnNlSGVh
ZGVyc1N0cmluZyApICkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3Bv
bnNlSGVhZGVyc1sgbWF0Y2hbMV0udG9Mb3dlckNhc2UoKSBdID0gbWF0Y2hbIDIgXTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICBtYXRjaCA9IHJlc3BvbnNlSGVhZGVyc1sga2V5LnRvTG93ZXJD
YXNlKCkgXTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gbWF0Y2ggPT09IHVuZGVmaW5lZCA/IG51bGwgOiBtYXRjaDsKKyAgICAgICAgICAgICAgICB9
LAorCisgICAgICAgICAgICAgICAgLy8gT3ZlcnJpZGVzIHJlc3BvbnNlIGNvbnRlbnQtdHlwZSBo
ZWFkZXIKKyAgICAgICAgICAgICAgICBvdmVycmlkZU1pbWVUeXBlOiBmdW5jdGlvbiggdHlwZSAp
IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCAhc3RhdGUgKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBzLm1pbWVUeXBlID0gdHlwZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgICAgICB9LAorCisgICAgICAg
ICAgICAgICAgLy8gQ2FuY2VsIHRoZSByZXF1ZXN0CisgICAgICAgICAgICAgICAgYWJvcnQ6IGZ1
bmN0aW9uKCBzdGF0dXNUZXh0ICkgeworICAgICAgICAgICAgICAgICAgICBzdGF0dXNUZXh0ID0g
c3RhdHVzVGV4dCB8fCBzdHJBYm9ydDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCB0cmFuc3Bv
cnQgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc3BvcnQuYWJvcnQoIHN0YXR1c1Rl
eHQgKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBkb25lKCAw
LCBzdGF0dXNUZXh0ICk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CisKKyAgICAgICAgLy8gQ2FsbGJhY2sgZm9yIHdo
ZW4gZXZlcnl0aGluZyBpcyBkb25lCisgICAgICAgIC8vIEl0IGlzIGRlZmluZWQgaGVyZSBiZWNh
dXNlIGpzbGludCBjb21wbGFpbnMgaWYgaXQgaXMgZGVjbGFyZWQKKyAgICAgICAgLy8gYXQgdGhl
IGVuZCBvZiB0aGUgZnVuY3Rpb24gKHdoaWNoIHdvdWxkIGJlIG1vcmUgbG9naWNhbCBhbmQgcmVh
ZGFibGUpCisgICAgICAgIGZ1bmN0aW9uIGRvbmUoIHN0YXR1cywgbmF0aXZlU3RhdHVzVGV4dCwg
cmVzcG9uc2VzLCBoZWFkZXJzICkgeworICAgICAgICAgICAgdmFyIGlzU3VjY2Vzcywgc3VjY2Vz
cywgZXJyb3IsIHJlc3BvbnNlLCBtb2RpZmllZCwKKyAgICAgICAgICAgICAgICBzdGF0dXNUZXh0
ID0gbmF0aXZlU3RhdHVzVGV4dDsKKworICAgICAgICAgICAgLy8gQ2FsbGVkIG9uY2UKKyAgICAg
ICAgICAgIGlmICggc3RhdGUgPT09IDIgKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBTdGF0ZSBpcyAiZG9uZSIgbm93CisgICAgICAg
ICAgICBzdGF0ZSA9IDI7CisKKyAgICAgICAgICAgIC8vIENsZWFyIHRpbWVvdXQgaWYgaXQgZXhp
c3RzCisgICAgICAgICAgICBpZiAoIHRpbWVvdXRUaW1lciApIHsKKyAgICAgICAgICAgICAgICBj
bGVhclRpbWVvdXQoIHRpbWVvdXRUaW1lciApOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAvLyBEZXJlZmVyZW5jZSB0cmFuc3BvcnQgZm9yIGVhcmx5IGdhcmJhZ2UgY29sbGVjdGlvbgor
ICAgICAgICAgICAgLy8gKG5vIG1hdHRlciBob3cgbG9uZyB0aGUganFYSFIgb2JqZWN0IHdpbGwg
YmUgdXNlZCkKKyAgICAgICAgICAgIHRyYW5zcG9ydCA9IHVuZGVmaW5lZDsKKworICAgICAgICAg
ICAgLy8gQ2FjaGUgcmVzcG9uc2UgaGVhZGVycworICAgICAgICAgICAgcmVzcG9uc2VIZWFkZXJz
U3RyaW5nID0gaGVhZGVycyB8fCAiIjsKKworICAgICAgICAgICAgLy8gU2V0IHJlYWR5U3RhdGUK
KyAgICAgICAgICAgIGpxWEhSLnJlYWR5U3RhdGUgPSBzdGF0dXMgPiAwID8gNCA6IDA7CisKKyAg
ICAgICAgICAgIC8vIEdldCByZXNwb25zZSBkYXRhCisgICAgICAgICAgICBpZiAoIHJlc3BvbnNl
cyApIHsKKyAgICAgICAgICAgICAgICByZXNwb25zZSA9IGFqYXhIYW5kbGVSZXNwb25zZXMoIHMs
IGpxWEhSLCByZXNwb25zZXMgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gSWYg
c3VjY2Vzc2Z1bCwgaGFuZGxlIHR5cGUgY2hhaW5pbmcKKyAgICAgICAgICAgIGlmICggc3RhdHVz
ID49IDIwMCAmJiBzdGF0dXMgPCAzMDAgfHwgc3RhdHVzID09PSAzMDQgKSB7CisKKyAgICAgICAg
ICAgICAgICAvLyBTZXQgdGhlIElmLU1vZGlmaWVkLVNpbmNlIGFuZC9vciBJZi1Ob25lLU1hdGNo
IGhlYWRlciwgaWYgaW4gaWZNb2RpZmllZCBtb2RlLgorICAgICAgICAgICAgICAgIGlmICggcy5p
Zk1vZGlmaWVkICkgeworCisgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVkID0ganFYSFIuZ2V0
UmVzcG9uc2VIZWFkZXIoIkxhc3QtTW9kaWZpZWQiKTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KCBtb2RpZmllZCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5sYXN0TW9kaWZp
ZWRbIGlmTW9kaWZpZWRLZXkgXSA9IG1vZGlmaWVkOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIG1vZGlmaWVkID0ganFYSFIuZ2V0UmVzcG9uc2VIZWFkZXIoIkV0
YWciKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBtb2RpZmllZCApIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGpRdWVyeS5ldGFnWyBpZk1vZGlmaWVkS2V5IF0gPSBtb2RpZmllZDsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
IC8vIElmIG5vdCBtb2RpZmllZAorICAgICAgICAgICAgICAgIGlmICggc3RhdHVzID09PSAzMDQg
KSB7CisKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzVGV4dCA9ICJub3Rtb2RpZmllZCI7Cisg
ICAgICAgICAgICAgICAgICAgIGlzU3VjY2VzcyA9IHRydWU7CisKKyAgICAgICAgICAgICAgICAv
LyBJZiB3ZSBoYXZlIGRhdGEKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworCisgICAgICAgICAg
ICAgICAgICAgIGlzU3VjY2VzcyA9IGFqYXhDb252ZXJ0KCBzLCByZXNwb25zZSApOworICAgICAg
ICAgICAgICAgICAgICBzdGF0dXNUZXh0ID0gaXNTdWNjZXNzLnN0YXRlOworICAgICAgICAgICAg
ICAgICAgICBzdWNjZXNzID0gaXNTdWNjZXNzLmRhdGE7CisgICAgICAgICAgICAgICAgICAgIGVy
cm9yID0gaXNTdWNjZXNzLmVycm9yOworICAgICAgICAgICAgICAgICAgICBpc1N1Y2Nlc3MgPSAh
ZXJyb3I7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAvLyBXZSBleHRyYWN0IGVycm9yIGZyb20gc3RhdHVzVGV4dAorICAgICAgICAgICAg
ICAgIC8vIHRoZW4gbm9ybWFsaXplIHN0YXR1c1RleHQgYW5kIHN0YXR1cyBmb3Igbm9uLWFib3J0
cworICAgICAgICAgICAgICAgIGVycm9yID0gc3RhdHVzVGV4dDsKKyAgICAgICAgICAgICAgICBp
ZiAoICFzdGF0dXNUZXh0IHx8IHN0YXR1cyApIHsKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVz
VGV4dCA9ICJlcnJvciI7CisgICAgICAgICAgICAgICAgICAgIGlmICggc3RhdHVzIDwgMCApIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IDA7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFNl
dCBkYXRhIGZvciB0aGUgZmFrZSB4aHIgb2JqZWN0CisgICAgICAgICAgICBqcVhIUi5zdGF0dXMg
PSBzdGF0dXM7CisgICAgICAgICAgICBqcVhIUi5zdGF0dXNUZXh0ID0gKCBuYXRpdmVTdGF0dXNU
ZXh0IHx8IHN0YXR1c1RleHQgKSArICIiOworCisgICAgICAgICAgICAvLyBTdWNjZXNzL0Vycm9y
CisgICAgICAgICAgICBpZiAoIGlzU3VjY2VzcyApIHsKKyAgICAgICAgICAgICAgICBkZWZlcnJl
ZC5yZXNvbHZlV2l0aCggY2FsbGJhY2tDb250ZXh0LCBbIHN1Y2Nlc3MsIHN0YXR1c1RleHQsIGpx
WEhSIF0gKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZGVmZXJyZWQu
cmVqZWN0V2l0aCggY2FsbGJhY2tDb250ZXh0LCBbIGpxWEhSLCBzdGF0dXNUZXh0LCBlcnJvciBd
ICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFN0YXR1cy1kZXBlbmRlbnQgY2Fs
bGJhY2tzCisgICAgICAgICAgICBqcVhIUi5zdGF0dXNDb2RlKCBzdGF0dXNDb2RlICk7CisgICAg
ICAgICAgICBzdGF0dXNDb2RlID0gdW5kZWZpbmVkOworCisgICAgICAgICAgICBpZiAoIGZpcmVH
bG9iYWxzICkgeworICAgICAgICAgICAgICAgIGdsb2JhbEV2ZW50Q29udGV4dC50cmlnZ2VyKCAi
YWpheCIgKyAoIGlzU3VjY2VzcyA/ICJTdWNjZXNzIiA6ICJFcnJvciIgKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIFsganFYSFIsIHMsIGlzU3VjY2VzcyA/IHN1Y2Nlc3MgOiBlcnJvciBdICk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIENvbXBsZXRlCisgICAgICAgICAgICBj
b21wbGV0ZURlZmVycmVkLmZpcmVXaXRoKCBjYWxsYmFja0NvbnRleHQsIFsganFYSFIsIHN0YXR1
c1RleHQgXSApOworCisgICAgICAgICAgICBpZiAoIGZpcmVHbG9iYWxzICkgeworICAgICAgICAg
ICAgICAgIGdsb2JhbEV2ZW50Q29udGV4dC50cmlnZ2VyKCAiYWpheENvbXBsZXRlIiwgWyBqcVhI
UiwgcyBdICk7CisgICAgICAgICAgICAgICAgLy8gSGFuZGxlIHRoZSBnbG9iYWwgQUpBWCBjb3Vu
dGVyCisgICAgICAgICAgICAgICAgaWYgKCAhKCAtLWpRdWVyeS5hY3RpdmUgKSApIHsKKyAgICAg
ICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnRyaWdnZXIoICJhamF4U3RvcCIgKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBBdHRh
Y2ggZGVmZXJyZWRzCisgICAgICAgIGRlZmVycmVkLnByb21pc2UoIGpxWEhSICk7CisgICAgICAg
IGpxWEhSLnN1Y2Nlc3MgPSBqcVhIUi5kb25lOworICAgICAgICBqcVhIUi5lcnJvciA9IGpxWEhS
LmZhaWw7CisgICAgICAgIGpxWEhSLmNvbXBsZXRlID0gY29tcGxldGVEZWZlcnJlZC5hZGQ7CisK
KyAgICAgICAgLy8gU3RhdHVzLWRlcGVuZGVudCBjYWxsYmFja3MKKyAgICAgICAganFYSFIuc3Rh
dHVzQ29kZSA9IGZ1bmN0aW9uKCBtYXAgKSB7CisgICAgICAgICAgICBpZiAoIG1hcCApIHsKKyAg
ICAgICAgICAgICAgICB2YXIgdG1wOworICAgICAgICAgICAgICAgIGlmICggc3RhdGUgPCAyICkg
eworICAgICAgICAgICAgICAgICAgICBmb3IgKCB0bXAgaW4gbWFwICkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgc3RhdHVzQ29kZVsgdG1wIF0gPSBbIHN0YXR1c0NvZGVbdG1wXSwgbWFwW3Rt
cF0gXTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgIHRtcCA9IG1hcFsganFYSFIuc3RhdHVzIF07CisgICAgICAgICAg
ICAgICAgICAgIGpxWEhSLmFsd2F5cyggdG1wICk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH07CisKKyAgICAgICAg
Ly8gUmVtb3ZlIGhhc2ggY2hhcmFjdGVyICgjNzUzMTogYW5kIHN0cmluZyBwcm9tb3Rpb24pCisg
ICAgICAgIC8vIEFkZCBwcm90b2NvbCBpZiBub3QgcHJvdmlkZWQgKCM1ODY2OiBJRTcgaXNzdWUg
d2l0aCBwcm90b2NvbC1sZXNzIHVybHMpCisgICAgICAgIC8vIFdlIGFsc28gdXNlIHRoZSB1cmwg
cGFyYW1ldGVyIGlmIGF2YWlsYWJsZQorICAgICAgICBzLnVybCA9ICggKCB1cmwgfHwgcy51cmwg
KSArICIiICkucmVwbGFjZSggcmhhc2gsICIiICkucmVwbGFjZSggcnByb3RvY29sLCBhamF4TG9j
UGFydHNbIDEgXSArICIvLyIgKTsKKworICAgICAgICAvLyBFeHRyYWN0IGRhdGFUeXBlcyBsaXN0
CisgICAgICAgIHMuZGF0YVR5cGVzID0galF1ZXJ5LnRyaW0oIHMuZGF0YVR5cGUgfHwgIioiICku
dG9Mb3dlckNhc2UoKS5zcGxpdCggY29yZV9yc3BhY2UgKTsKKworICAgICAgICAvLyBBIGNyb3Nz
LWRvbWFpbiByZXF1ZXN0IGlzIGluIG9yZGVyIHdoZW4gd2UgaGF2ZSBhIHByb3RvY29sOmhvc3Q6
cG9ydCBtaXNtYXRjaAorICAgICAgICBpZiAoIHMuY3Jvc3NEb21haW4gPT0gbnVsbCApIHsKKyAg
ICAgICAgICAgIHBhcnRzID0gcnVybC5leGVjKCBzLnVybC50b0xvd2VyQ2FzZSgpICk7CisgICAg
ICAgICAgICBzLmNyb3NzRG9tYWluID0gISEoIHBhcnRzICYmCisgICAgICAgICAgICAgICAgKCBw
YXJ0c1sgMSBdICE9PSBhamF4TG9jUGFydHNbIDEgXSB8fCBwYXJ0c1sgMiBdICE9PSBhamF4TG9j
UGFydHNbIDIgXSB8fAorICAgICAgICAgICAgICAgICAgICAoIHBhcnRzWyAzIF0gfHwgKCBwYXJ0
c1sgMSBdID09PSAiaHR0cDoiID8gODAgOiA0NDMgKSApICE9CisgICAgICAgICAgICAgICAgICAg
ICAgICAoIGFqYXhMb2NQYXJ0c1sgMyBdIHx8ICggYWpheExvY1BhcnRzWyAxIF0gPT09ICJodHRw
OiIgPyA4MCA6IDQ0MyApICkgKQorICAgICAgICAgICAgKTsKKyAgICAgICAgfQorCisgICAgICAg
IC8vIENvbnZlcnQgZGF0YSBpZiBub3QgYWxyZWFkeSBhIHN0cmluZworICAgICAgICBpZiAoIHMu
ZGF0YSAmJiBzLnByb2Nlc3NEYXRhICYmIHR5cGVvZiBzLmRhdGEgIT09ICJzdHJpbmciICkgewor
ICAgICAgICAgICAgcy5kYXRhID0galF1ZXJ5LnBhcmFtKCBzLmRhdGEsIHMudHJhZGl0aW9uYWwg
KTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEFwcGx5IHByZWZpbHRlcnMKKyAgICAgICAgaW5z
cGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHByZWZpbHRlcnMsIHMsIG9wdGlvbnMsIGpxWEhS
ICk7CisKKyAgICAgICAgLy8gSWYgcmVxdWVzdCB3YXMgYWJvcnRlZCBpbnNpZGUgYSBwcmVmaWx0
ZXIsIHN0b3AgdGhlcmUKKyAgICAgICAgaWYgKCBzdGF0ZSA9PT0gMiApIHsKKyAgICAgICAgICAg
IHJldHVybiBqcVhIUjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFdlIGNhbiBmaXJlIGdsb2Jh
bCBldmVudHMgYXMgb2Ygbm93IGlmIGFza2VkIHRvCisgICAgICAgIGZpcmVHbG9iYWxzID0gcy5n
bG9iYWw7CisKKyAgICAgICAgLy8gVXBwZXJjYXNlIHRoZSB0eXBlCisgICAgICAgIHMudHlwZSA9
IHMudHlwZS50b1VwcGVyQ2FzZSgpOworCisgICAgICAgIC8vIERldGVybWluZSBpZiByZXF1ZXN0
IGhhcyBjb250ZW50CisgICAgICAgIHMuaGFzQ29udGVudCA9ICFybm9Db250ZW50LnRlc3QoIHMu
dHlwZSApOworCisgICAgICAgIC8vIFdhdGNoIGZvciBhIG5ldyBzZXQgb2YgcmVxdWVzdHMKKyAg
ICAgICAgaWYgKCBmaXJlR2xvYmFscyAmJiBqUXVlcnkuYWN0aXZlKysgPT09IDAgKSB7CisgICAg
ICAgICAgICBqUXVlcnkuZXZlbnQudHJpZ2dlciggImFqYXhTdGFydCIgKTsKKyAgICAgICAgfQor
CisgICAgICAgIC8vIE1vcmUgb3B0aW9ucyBoYW5kbGluZyBmb3IgcmVxdWVzdHMgd2l0aCBubyBj
b250ZW50CisgICAgICAgIGlmICggIXMuaGFzQ29udGVudCApIHsKKworICAgICAgICAgICAgLy8g
SWYgZGF0YSBpcyBhdmFpbGFibGUsIGFwcGVuZCBkYXRhIHRvIHVybAorICAgICAgICAgICAgaWYg
KCBzLmRhdGEgKSB7CisgICAgICAgICAgICAgICAgcy51cmwgKz0gKCBycXVlcnkudGVzdCggcy51
cmwgKSA/ICImIiA6ICI/IiApICsgcy5kYXRhOworICAgICAgICAgICAgICAgIC8vICM5NjgyOiBy
ZW1vdmUgZGF0YSBzbyB0aGF0IGl0J3Mgbm90IHVzZWQgaW4gYW4gZXZlbnR1YWwgcmV0cnkKKyAg
ICAgICAgICAgICAgICBkZWxldGUgcy5kYXRhOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAvLyBHZXQgaWZNb2RpZmllZEtleSBiZWZvcmUgYWRkaW5nIHRoZSBhbnRpLWNhY2hlIHBhcmFt
ZXRlcgorICAgICAgICAgICAgaWZNb2RpZmllZEtleSA9IHMudXJsOworCisgICAgICAgICAgICAv
LyBBZGQgYW50aS1jYWNoZSBpbiB1cmwgaWYgbmVlZGVkCisgICAgICAgICAgICBpZiAoIHMuY2Fj
aGUgPT09IGZhbHNlICkgeworCisgICAgICAgICAgICAgICAgdmFyIHRzID0galF1ZXJ5Lm5vdygp
LAorICAgICAgICAgICAgICAgICAgICAvLyB0cnkgcmVwbGFjaW5nIF89IGlmIGl0IGlzIHRoZXJl
CisgICAgICAgICAgICAgICAgICAgIHJldCA9IHMudXJsLnJlcGxhY2UoIHJ0cywgIiQxXz0iICsg
dHMgKTsKKworICAgICAgICAgICAgICAgIC8vIGlmIG5vdGhpbmcgd2FzIHJlcGxhY2VkLCBhZGQg
dGltZXN0YW1wIHRvIHRoZSBlbmQKKyAgICAgICAgICAgICAgICBzLnVybCA9IHJldCArICggKCBy
ZXQgPT09IHMudXJsICkgPyAoIHJxdWVyeS50ZXN0KCBzLnVybCApID8gIiYiIDogIj8iICkgKyAi
Xz0iICsgdHMgOiAiIiApOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8g
U2V0IHRoZSBjb3JyZWN0IGhlYWRlciwgaWYgZGF0YSBpcyBiZWluZyBzZW50CisgICAgICAgIGlm
ICggcy5kYXRhICYmIHMuaGFzQ29udGVudCAmJiBzLmNvbnRlbnRUeXBlICE9PSBmYWxzZSB8fCBv
cHRpb25zLmNvbnRlbnRUeXBlICkgeworICAgICAgICAgICAganFYSFIuc2V0UmVxdWVzdEhlYWRl
ciggIkNvbnRlbnQtVHlwZSIsIHMuY29udGVudFR5cGUgKTsKKyAgICAgICAgfQorCisgICAgICAg
IC8vIFNldCB0aGUgSWYtTW9kaWZpZWQtU2luY2UgYW5kL29yIElmLU5vbmUtTWF0Y2ggaGVhZGVy
LCBpZiBpbiBpZk1vZGlmaWVkIG1vZGUuCisgICAgICAgIGlmICggcy5pZk1vZGlmaWVkICkgewor
ICAgICAgICAgICAgaWZNb2RpZmllZEtleSA9IGlmTW9kaWZpZWRLZXkgfHwgcy51cmw7CisgICAg
ICAgICAgICBpZiAoIGpRdWVyeS5sYXN0TW9kaWZpZWRbIGlmTW9kaWZpZWRLZXkgXSApIHsKKyAg
ICAgICAgICAgICAgICBqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCAiSWYtTW9kaWZpZWQtU2luY2Ui
LCBqUXVlcnkubGFzdE1vZGlmaWVkWyBpZk1vZGlmaWVkS2V5IF0gKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlmICggalF1ZXJ5LmV0YWdbIGlmTW9kaWZpZWRLZXkgXSApIHsKKyAgICAg
ICAgICAgICAgICBqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCAiSWYtTm9uZS1NYXRjaCIsIGpRdWVy
eS5ldGFnWyBpZk1vZGlmaWVkS2V5IF0gKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg
ICAgICAgIC8vIFNldCB0aGUgQWNjZXB0cyBoZWFkZXIgZm9yIHRoZSBzZXJ2ZXIsIGRlcGVuZGlu
ZyBvbiB0aGUgZGF0YVR5cGUKKyAgICAgICAganFYSFIuc2V0UmVxdWVzdEhlYWRlcigKKyAgICAg
ICAgICAgICJBY2NlcHQiLAorICAgICAgICAgICAgcy5kYXRhVHlwZXNbIDAgXSAmJiBzLmFjY2Vw
dHNbIHMuZGF0YVR5cGVzWzBdIF0gPworICAgICAgICAgICAgICAgIHMuYWNjZXB0c1sgcy5kYXRh
VHlwZXNbMF0gXSArICggcy5kYXRhVHlwZXNbIDAgXSAhPT0gIioiID8gIiwgIiArIGFsbFR5cGVz
ICsgIjsgcT0wLjAxIiA6ICIiICkgOgorICAgICAgICAgICAgICAgIHMuYWNjZXB0c1sgIioiIF0K
KyAgICAgICAgKTsKKworICAgICAgICAvLyBDaGVjayBmb3IgaGVhZGVycyBvcHRpb24KKyAgICAg
ICAgZm9yICggaSBpbiBzLmhlYWRlcnMgKSB7CisgICAgICAgICAgICBqcVhIUi5zZXRSZXF1ZXN0
SGVhZGVyKCBpLCBzLmhlYWRlcnNbIGkgXSApOworICAgICAgICB9CisKKyAgICAgICAgLy8gQWxs
b3cgY3VzdG9tIGhlYWRlcnMvbWltZXR5cGVzIGFuZCBlYXJseSBhYm9ydAorICAgICAgICBpZiAo
IHMuYmVmb3JlU2VuZCAmJiAoIHMuYmVmb3JlU2VuZC5jYWxsKCBjYWxsYmFja0NvbnRleHQsIGpx
WEhSLCBzICkgPT09IGZhbHNlIHx8IHN0YXRlID09PSAyICkgKSB7CisgICAgICAgICAgICAgICAg
Ly8gQWJvcnQgaWYgbm90IGRvbmUgYWxyZWFkeSBhbmQgcmV0dXJuCisgICAgICAgICAgICAgICAg
cmV0dXJuIGpxWEhSLmFib3J0KCk7CisKKyAgICAgICAgfQorCisgICAgICAgIC8vIGFib3J0aW5n
IGlzIG5vIGxvbmdlciBhIGNhbmNlbGxhdGlvbgorICAgICAgICBzdHJBYm9ydCA9ICJhYm9ydCI7
CisKKyAgICAgICAgLy8gSW5zdGFsbCBjYWxsYmFja3Mgb24gZGVmZXJyZWRzCisgICAgICAgIGZv
ciAoIGkgaW4geyBzdWNjZXNzOiAxLCBlcnJvcjogMSwgY29tcGxldGU6IDEgfSApIHsKKyAgICAg
ICAgICAgIGpxWEhSWyBpIF0oIHNbIGkgXSApOworICAgICAgICB9CisKKyAgICAgICAgLy8gR2V0
IHRyYW5zcG9ydAorICAgICAgICB0cmFuc3BvcnQgPSBpbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNw
b3J0cyggdHJhbnNwb3J0cywgcywgb3B0aW9ucywganFYSFIgKTsKKworICAgICAgICAvLyBJZiBu
byB0cmFuc3BvcnQsIHdlIGF1dG8tYWJvcnQKKyAgICAgICAgaWYgKCAhdHJhbnNwb3J0ICkgewor
ICAgICAgICAgICAgZG9uZSggLTEsICJObyBUcmFuc3BvcnQiICk7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBqcVhIUi5yZWFkeVN0YXRlID0gMTsKKyAgICAgICAgICAgIC8vIFNlbmQg
Z2xvYmFsIGV2ZW50CisgICAgICAgICAgICBpZiAoIGZpcmVHbG9iYWxzICkgeworICAgICAgICAg
ICAgICAgIGdsb2JhbEV2ZW50Q29udGV4dC50cmlnZ2VyKCAiYWpheFNlbmQiLCBbIGpxWEhSLCBz
IF0gKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIFRpbWVvdXQKKyAgICAgICAgICAg
IGlmICggcy5hc3luYyAmJiBzLnRpbWVvdXQgPiAwICkgeworICAgICAgICAgICAgICAgIHRpbWVv
dXRUaW1lciA9IHNldFRpbWVvdXQoIGZ1bmN0aW9uKCl7CisgICAgICAgICAgICAgICAgICAgIGpx
WEhSLmFib3J0KCAidGltZW91dCIgKTsKKyAgICAgICAgICAgICAgICB9LCBzLnRpbWVvdXQgKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBzdGF0
ZSA9IDE7CisgICAgICAgICAgICAgICAgdHJhbnNwb3J0LnNlbmQoIHJlcXVlc3RIZWFkZXJzLCBk
b25lICk7CisgICAgICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICAgICAgLy8gUHJv
cGFnYXRlIGV4Y2VwdGlvbiBhcyBlcnJvciBpZiBub3QgZG9uZQorICAgICAgICAgICAgICAgIGlm
ICggc3RhdGUgPCAyICkgeworICAgICAgICAgICAgICAgICAgICBkb25lKCAtMSwgZSApOworICAg
ICAgICAgICAgICAgIC8vIFNpbXBseSByZXRocm93IG90aGVyd2lzZQorICAgICAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93IGU7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGpxWEhSOworICAg
IH0sCisKKyAgICAvLyBDb3VudGVyIGZvciBob2xkaW5nIHRoZSBudW1iZXIgb2YgYWN0aXZlIHF1
ZXJpZXMKKyAgICBhY3RpdmU6IDAsCisKKyAgICAvLyBMYXN0LU1vZGlmaWVkIGhlYWRlciBjYWNo
ZSBmb3IgbmV4dCByZXF1ZXN0CisgICAgbGFzdE1vZGlmaWVkOiB7fSwKKyAgICBldGFnOiB7fQor
Cit9KTsKKworLyogSGFuZGxlcyByZXNwb25zZXMgdG8gYW4gYWpheCByZXF1ZXN0OgorICogLSBz
ZXRzIGFsbCByZXNwb25zZVhYWCBmaWVsZHMgYWNjb3JkaW5nbHkKKyAqIC0gZmluZHMgdGhlIHJp
Z2h0IGRhdGFUeXBlIChtZWRpYXRlcyBiZXR3ZWVuIGNvbnRlbnQtdHlwZSBhbmQgZXhwZWN0ZWQg
ZGF0YVR5cGUpCisgKiAtIHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgcmVzcG9uc2UKKyAqLwor
ZnVuY3Rpb24gYWpheEhhbmRsZVJlc3BvbnNlcyggcywganFYSFIsIHJlc3BvbnNlcyApIHsKKwor
ICAgIHZhciBjdCwgdHlwZSwgZmluYWxEYXRhVHlwZSwgZmlyc3REYXRhVHlwZSwKKyAgICAgICAg
Y29udGVudHMgPSBzLmNvbnRlbnRzLAorICAgICAgICBkYXRhVHlwZXMgPSBzLmRhdGFUeXBlcywK
KyAgICAgICAgcmVzcG9uc2VGaWVsZHMgPSBzLnJlc3BvbnNlRmllbGRzOworCisgICAgLy8gRmls
bCByZXNwb25zZVhYWCBmaWVsZHMKKyAgICBmb3IgKCB0eXBlIGluIHJlc3BvbnNlRmllbGRzICkg
eworICAgICAgICBpZiAoIHR5cGUgaW4gcmVzcG9uc2VzICkgeworICAgICAgICAgICAganFYSFJb
IHJlc3BvbnNlRmllbGRzW3R5cGVdIF0gPSByZXNwb25zZXNbIHR5cGUgXTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIC8vIFJlbW92ZSBhdXRvIGRhdGFUeXBlIGFuZCBnZXQgY29udGVudC10eXBl
IGluIHRoZSBwcm9jZXNzCisgICAgd2hpbGUoIGRhdGFUeXBlc1sgMCBdID09PSAiKiIgKSB7Cisg
ICAgICAgIGRhdGFUeXBlcy5zaGlmdCgpOworICAgICAgICBpZiAoIGN0ID09PSB1bmRlZmluZWQg
KSB7CisgICAgICAgICAgICBjdCA9IHMubWltZVR5cGUgfHwganFYSFIuZ2V0UmVzcG9uc2VIZWFk
ZXIoICJjb250ZW50LXR5cGUiICk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBDaGVjayBp
ZiB3ZSdyZSBkZWFsaW5nIHdpdGggYSBrbm93biBjb250ZW50LXR5cGUKKyAgICBpZiAoIGN0ICkg
eworICAgICAgICBmb3IgKCB0eXBlIGluIGNvbnRlbnRzICkgeworICAgICAgICAgICAgaWYgKCBj
b250ZW50c1sgdHlwZSBdICYmIGNvbnRlbnRzWyB0eXBlIF0udGVzdCggY3QgKSApIHsKKyAgICAg
ICAgICAgICAgICBkYXRhVHlwZXMudW5zaGlmdCggdHlwZSApOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gQ2hlY2sgdG8g
c2VlIGlmIHdlIGhhdmUgYSByZXNwb25zZSBmb3IgdGhlIGV4cGVjdGVkIGRhdGFUeXBlCisgICAg
aWYgKCBkYXRhVHlwZXNbIDAgXSBpbiByZXNwb25zZXMgKSB7CisgICAgICAgIGZpbmFsRGF0YVR5
cGUgPSBkYXRhVHlwZXNbIDAgXTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBUcnkgY29udmVy
dGlibGUgZGF0YVR5cGVzCisgICAgICAgIGZvciAoIHR5cGUgaW4gcmVzcG9uc2VzICkgeworICAg
ICAgICAgICAgaWYgKCAhZGF0YVR5cGVzWyAwIF0gfHwgcy5jb252ZXJ0ZXJzWyB0eXBlICsgIiAi
ICsgZGF0YVR5cGVzWzBdIF0gKSB7CisgICAgICAgICAgICAgICAgZmluYWxEYXRhVHlwZSA9IHR5
cGU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp
ZiAoICFmaXJzdERhdGFUeXBlICkgeworICAgICAgICAgICAgICAgIGZpcnN0RGF0YVR5cGUgPSB0
eXBlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8vIE9yIGp1c3QgdXNlIGZp
cnN0IG9uZQorICAgICAgICBmaW5hbERhdGFUeXBlID0gZmluYWxEYXRhVHlwZSB8fCBmaXJzdERh
dGFUeXBlOworICAgIH0KKworICAgIC8vIElmIHdlIGZvdW5kIGEgZGF0YVR5cGUKKyAgICAvLyBX
ZSBhZGQgdGhlIGRhdGFUeXBlIHRvIHRoZSBsaXN0IGlmIG5lZWRlZAorICAgIC8vIGFuZCByZXR1
cm4gdGhlIGNvcnJlc3BvbmRpbmcgcmVzcG9uc2UKKyAgICBpZiAoIGZpbmFsRGF0YVR5cGUgKSB7
CisgICAgICAgIGlmICggZmluYWxEYXRhVHlwZSAhPT0gZGF0YVR5cGVzWyAwIF0gKSB7CisgICAg
ICAgICAgICBkYXRhVHlwZXMudW5zaGlmdCggZmluYWxEYXRhVHlwZSApOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiByZXNwb25zZXNbIGZpbmFsRGF0YVR5cGUgXTsKKyAgICB9Cit9CisKKy8v
IENoYWluIGNvbnZlcnNpb25zIGdpdmVuIHRoZSByZXF1ZXN0IGFuZCB0aGUgb3JpZ2luYWwgcmVz
cG9uc2UKK2Z1bmN0aW9uIGFqYXhDb252ZXJ0KCBzLCByZXNwb25zZSApIHsKKworICAgIHZhciBj
b252LCBjb252MiwgY3VycmVudCwgdG1wLAorICAgICAgICAvLyBXb3JrIHdpdGggYSBjb3B5IG9m
IGRhdGFUeXBlcyBpbiBjYXNlIHdlIG5lZWQgdG8gbW9kaWZ5IGl0IGZvciBjb252ZXJzaW9uCisg
ICAgICAgIGRhdGFUeXBlcyA9IHMuZGF0YVR5cGVzLnNsaWNlKCksCisgICAgICAgIHByZXYgPSBk
YXRhVHlwZXNbIDAgXSwKKyAgICAgICAgY29udmVydGVycyA9IHt9LAorICAgICAgICBpID0gMDsK
KworICAgIC8vIEFwcGx5IHRoZSBkYXRhRmlsdGVyIGlmIHByb3ZpZGVkCisgICAgaWYgKCBzLmRh
dGFGaWx0ZXIgKSB7CisgICAgICAgIHJlc3BvbnNlID0gcy5kYXRhRmlsdGVyKCByZXNwb25zZSwg
cy5kYXRhVHlwZSApOworICAgIH0KKworICAgIC8vIENyZWF0ZSBjb252ZXJ0ZXJzIG1hcCB3aXRo
IGxvd2VyY2FzZWQga2V5cworICAgIGlmICggZGF0YVR5cGVzWyAxIF0gKSB7CisgICAgICAgIGZv
ciAoIGNvbnYgaW4gcy5jb252ZXJ0ZXJzICkgeworICAgICAgICAgICAgY29udmVydGVyc1sgY29u
di50b0xvd2VyQ2FzZSgpIF0gPSBzLmNvbnZlcnRlcnNbIGNvbnYgXTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIC8vIENvbnZlcnQgdG8gZWFjaCBzZXF1ZW50aWFsIGRhdGFUeXBlLCB0b2xlcmF0
aW5nIGxpc3QgbW9kaWZpY2F0aW9uCisgICAgZm9yICggOyAoY3VycmVudCA9IGRhdGFUeXBlc1sr
K2ldKTsgKSB7CisKKyAgICAgICAgLy8gVGhlcmUncyBvbmx5IHdvcmsgdG8gZG8gaWYgY3VycmVu
dCBkYXRhVHlwZSBpcyBub24tYXV0bworICAgICAgICBpZiAoIGN1cnJlbnQgIT09ICIqIiApIHsK
KworICAgICAgICAgICAgLy8gQ29udmVydCByZXNwb25zZSBpZiBwcmV2IGRhdGFUeXBlIGlzIG5v
bi1hdXRvIGFuZCBkaWZmZXJzIGZyb20gY3VycmVudAorICAgICAgICAgICAgaWYgKCBwcmV2ICE9
PSAiKiIgJiYgcHJldiAhPT0gY3VycmVudCApIHsKKworICAgICAgICAgICAgICAgIC8vIFNlZWsg
YSBkaXJlY3QgY29udmVydGVyCisgICAgICAgICAgICAgICAgY29udiA9IGNvbnZlcnRlcnNbIHBy
ZXYgKyAiICIgKyBjdXJyZW50IF0gfHwgY29udmVydGVyc1sgIiogIiArIGN1cnJlbnQgXTsKKwor
ICAgICAgICAgICAgICAgIC8vIElmIG5vbmUgZm91bmQsIHNlZWsgYSBwYWlyCisgICAgICAgICAg
ICAgICAgaWYgKCAhY29udiApIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yICggY29udjIgaW4g
Y29udmVydGVycyApIHsKKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgY29udjIgb3V0
cHV0cyBjdXJyZW50CisgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSBjb252Mi5zcGxpdCgi
ICIpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0bXBbIDEgXSA9PT0gY3VycmVudCAp
IHsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHByZXYgY2FuIGJlIGNvbnZl
cnRlZCB0byBhY2NlcHRlZCBpbnB1dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnYg
PSBjb252ZXJ0ZXJzWyBwcmV2ICsgIiAiICsgdG1wWyAwIF0gXSB8fAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb252ZXJ0ZXJzWyAiKiAiICsgdG1wWyAwIF0gXTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIGNvbnYgKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIENvbmRlbnNlIGVxdWl2YWxlbmNlIGNvbnZlcnRlcnMKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCBjb252ID09PSB0cnVlICkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29udiA9IGNvbnZlcnRlcnNbIGNvbnYyIF07CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCBpbnNlcnQgdGhlIGlu
dGVybWVkaWF0ZSBkYXRhVHlwZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgaWYgKCBjb252ZXJ0ZXJzWyBjb252MiBdICE9PSB0cnVlICkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY3VycmVudCA9IHRtcFsgMCBdOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGVzLnNwbGljZSggaS0tLCAwLCBjdXJyZW50ICk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBBcHBseSBjb252ZXJ0ZXIgKGlmIG5vdCBhbiBl
cXVpdmFsZW5jZSkKKyAgICAgICAgICAgICAgICBpZiAoIGNvbnYgIT09IHRydWUgKSB7CisKKyAg
ICAgICAgICAgICAgICAgICAgLy8gVW5sZXNzIGVycm9ycyBhcmUgYWxsb3dlZCB0byBidWJibGUs
IGNhdGNoIGFuZCByZXR1cm4gdGhlbQorICAgICAgICAgICAgICAgICAgICBpZiAoIGNvbnYgJiYg
c1sidGhyb3dzIl0gKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZSA9IGNvbnYo
IHJlc3BvbnNlICk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID0g
Y29udiggcmVzcG9uc2UgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKCBlICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IHN0YXRlOiAicGFyc2VyZXJy
b3IiLCBlcnJvcjogY29udiA/IGUgOiAiTm8gY29udmVyc2lvbiBmcm9tICIgKyBwcmV2ICsgIiB0
byAiICsgY3VycmVudCB9OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAvLyBVcGRhdGUgcHJldiBmb3IgbmV4dCBpdGVyYXRpb24KKyAgICAgICAgICAgIHByZXYgPSBj
dXJyZW50OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHsgc3RhdGU6ICJzdWNjZXNz
IiwgZGF0YTogcmVzcG9uc2UgfTsKK30KK3ZhciBvbGRDYWxsYmFja3MgPSBbXSwKKyAgICBycXVl
c3Rpb24gPSAvXD8vLAorICAgIHJqc29ucCA9IC8oPSlcPyg/PSZ8JCl8XD9cPy8sCisgICAgbm9u
Y2UgPSBqUXVlcnkubm93KCk7CisKKy8vIERlZmF1bHQganNvbnAgc2V0dGluZ3MKK2pRdWVyeS5h
amF4U2V0dXAoeworICAgIGpzb25wOiAiY2FsbGJhY2siLAorICAgIGpzb25wQ2FsbGJhY2s6IGZ1
bmN0aW9uKCkgeworICAgICAgICB2YXIgY2FsbGJhY2sgPSBvbGRDYWxsYmFja3MucG9wKCkgfHwg
KCBqUXVlcnkuZXhwYW5kbyArICJfIiArICggbm9uY2UrKyApICk7CisgICAgICAgIHRoaXNbIGNh
bGxiYWNrIF0gPSB0cnVlOworICAgICAgICByZXR1cm4gY2FsbGJhY2s7CisgICAgfQorfSk7CisK
Ky8vIERldGVjdCwgbm9ybWFsaXplIG9wdGlvbnMgYW5kIGluc3RhbGwgY2FsbGJhY2tzIGZvciBq
c29ucCByZXF1ZXN0cworalF1ZXJ5LmFqYXhQcmVmaWx0ZXIoICJqc29uIGpzb25wIiwgZnVuY3Rp
b24oIHMsIG9yaWdpbmFsU2V0dGluZ3MsIGpxWEhSICkgeworCisgICAgdmFyIGNhbGxiYWNrTmFt
ZSwgb3ZlcndyaXR0ZW4sIHJlc3BvbnNlQ29udGFpbmVyLAorICAgICAgICBkYXRhID0gcy5kYXRh
LAorICAgICAgICB1cmwgPSBzLnVybCwKKyAgICAgICAgaGFzQ2FsbGJhY2sgPSBzLmpzb25wICE9
PSBmYWxzZSwKKyAgICAgICAgcmVwbGFjZUluVXJsID0gaGFzQ2FsbGJhY2sgJiYgcmpzb25wLnRl
c3QoIHVybCApLAorICAgICAgICByZXBsYWNlSW5EYXRhID0gaGFzQ2FsbGJhY2sgJiYgIXJlcGxh
Y2VJblVybCAmJiB0eXBlb2YgZGF0YSA9PT0gInN0cmluZyIgJiYKKyAgICAgICAgICAgICEoIHMu
Y29udGVudFR5cGUgfHwgIiIgKS5pbmRleE9mKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVu
Y29kZWQiKSAmJgorICAgICAgICAgICAgcmpzb25wLnRlc3QoIGRhdGEgKTsKKworICAgIC8vIEhh
bmRsZSBpZmYgdGhlIGV4cGVjdGVkIGRhdGEgdHlwZSBpcyAianNvbnAiIG9yIHdlIGhhdmUgYSBw
YXJhbWV0ZXIgdG8gc2V0CisgICAgaWYgKCBzLmRhdGFUeXBlc1sgMCBdID09PSAianNvbnAiIHx8
IHJlcGxhY2VJblVybCB8fCByZXBsYWNlSW5EYXRhICkgeworCisgICAgICAgIC8vIEdldCBjYWxs
YmFjayBuYW1lLCByZW1lbWJlcmluZyBwcmVleGlzdGluZyB2YWx1ZSBhc3NvY2lhdGVkIHdpdGgg
aXQKKyAgICAgICAgY2FsbGJhY2tOYW1lID0gcy5qc29ucENhbGxiYWNrID0galF1ZXJ5LmlzRnVu
Y3Rpb24oIHMuanNvbnBDYWxsYmFjayApID8KKyAgICAgICAgICAgIHMuanNvbnBDYWxsYmFjaygp
IDoKKyAgICAgICAgICAgIHMuanNvbnBDYWxsYmFjazsKKyAgICAgICAgb3ZlcndyaXR0ZW4gPSB3
aW5kb3dbIGNhbGxiYWNrTmFtZSBdOworCisgICAgICAgIC8vIEluc2VydCBjYWxsYmFjayBpbnRv
IHVybCBvciBmb3JtIGRhdGEKKyAgICAgICAgaWYgKCByZXBsYWNlSW5VcmwgKSB7CisgICAgICAg
ICAgICBzLnVybCA9IHVybC5yZXBsYWNlKCByanNvbnAsICIkMSIgKyBjYWxsYmFja05hbWUgKTsK
KyAgICAgICAgfSBlbHNlIGlmICggcmVwbGFjZUluRGF0YSApIHsKKyAgICAgICAgICAgIHMuZGF0
YSA9IGRhdGEucmVwbGFjZSggcmpzb25wLCAiJDEiICsgY2FsbGJhY2tOYW1lICk7CisgICAgICAg
IH0gZWxzZSBpZiAoIGhhc0NhbGxiYWNrICkgeworICAgICAgICAgICAgcy51cmwgKz0gKCBycXVl
c3Rpb24udGVzdCggdXJsICkgPyAiJiIgOiAiPyIgKSArIHMuanNvbnAgKyAiPSIgKyBjYWxsYmFj
a05hbWU7CisgICAgICAgIH0KKworICAgICAgICAvLyBVc2UgZGF0YSBjb252ZXJ0ZXIgdG8gcmV0
cmlldmUganNvbiBhZnRlciBzY3JpcHQgZXhlY3V0aW9uCisgICAgICAgIHMuY29udmVydGVyc1si
c2NyaXB0IGpzb24iXSA9IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgaWYgKCAhcmVzcG9uc2VD
b250YWluZXIgKSB7CisgICAgICAgICAgICAgICAgalF1ZXJ5LmVycm9yKCBjYWxsYmFja05hbWUg
KyAiIHdhcyBub3QgY2FsbGVkIiApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJu
IHJlc3BvbnNlQ29udGFpbmVyWyAwIF07CisgICAgICAgIH07CisKKyAgICAgICAgLy8gZm9yY2Ug
anNvbiBkYXRhVHlwZQorICAgICAgICBzLmRhdGFUeXBlc1sgMCBdID0gImpzb24iOworCisgICAg
ICAgIC8vIEluc3RhbGwgY2FsbGJhY2sKKyAgICAgICAgd2luZG93WyBjYWxsYmFja05hbWUgXSA9
IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgcmVzcG9uc2VDb250YWluZXIgPSBhcmd1bWVudHM7
CisgICAgICAgIH07CisKKyAgICAgICAgLy8gQ2xlYW4tdXAgZnVuY3Rpb24gKGZpcmVzIGFmdGVy
IGNvbnZlcnRlcnMpCisgICAgICAgIGpxWEhSLmFsd2F5cyhmdW5jdGlvbigpIHsKKyAgICAgICAg
ICAgIC8vIFJlc3RvcmUgcHJlZXhpc3RpbmcgdmFsdWUKKyAgICAgICAgICAgIHdpbmRvd1sgY2Fs
bGJhY2tOYW1lIF0gPSBvdmVyd3JpdHRlbjsKKworICAgICAgICAgICAgLy8gU2F2ZSBiYWNrIGFz
IGZyZWUKKyAgICAgICAgICAgIGlmICggc1sgY2FsbGJhY2tOYW1lIF0gKSB7CisgICAgICAgICAg
ICAgICAgLy8gbWFrZSBzdXJlIHRoYXQgcmUtdXNpbmcgdGhlIG9wdGlvbnMgZG9lc24ndCBzY3Jl
dyB0aGluZ3MgYXJvdW5kCisgICAgICAgICAgICAgICAgcy5qc29ucENhbGxiYWNrID0gb3JpZ2lu
YWxTZXR0aW5ncy5qc29ucENhbGxiYWNrOworCisgICAgICAgICAgICAgICAgLy8gc2F2ZSB0aGUg
Y2FsbGJhY2sgbmFtZSBmb3IgZnV0dXJlIHVzZQorICAgICAgICAgICAgICAgIG9sZENhbGxiYWNr
cy5wdXNoKCBjYWxsYmFja05hbWUgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8g
Q2FsbCBpZiBpdCB3YXMgYSBmdW5jdGlvbiBhbmQgd2UgaGF2ZSBhIHJlc3BvbnNlCisgICAgICAg
ICAgICBpZiAoIHJlc3BvbnNlQ29udGFpbmVyICYmIGpRdWVyeS5pc0Z1bmN0aW9uKCBvdmVyd3Jp
dHRlbiApICkgeworICAgICAgICAgICAgICAgIG92ZXJ3cml0dGVuKCByZXNwb25zZUNvbnRhaW5l
clsgMCBdICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJlc3BvbnNlQ29udGFpbmVy
ID0gb3ZlcndyaXR0ZW4gPSB1bmRlZmluZWQ7CisgICAgICAgIH0pOworCisgICAgICAgIC8vIERl
bGVnYXRlIHRvIHNjcmlwdAorICAgICAgICByZXR1cm4gInNjcmlwdCI7CisgICAgfQorfSk7Cisv
LyBJbnN0YWxsIHNjcmlwdCBkYXRhVHlwZQoralF1ZXJ5LmFqYXhTZXR1cCh7CisgICAgYWNjZXB0
czogeworICAgICAgICBzY3JpcHQ6ICJ0ZXh0L2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2phdmFz
Y3JpcHQsIGFwcGxpY2F0aW9uL2VjbWFzY3JpcHQsIGFwcGxpY2F0aW9uL3gtZWNtYXNjcmlwdCIK
KyAgICB9LAorICAgIGNvbnRlbnRzOiB7CisgICAgICAgIHNjcmlwdDogL2phdmFzY3JpcHR8ZWNt
YXNjcmlwdC8KKyAgICB9LAorICAgIGNvbnZlcnRlcnM6IHsKKyAgICAgICAgInRleHQgc2NyaXB0
IjogZnVuY3Rpb24oIHRleHQgKSB7CisgICAgICAgICAgICBqUXVlcnkuZ2xvYmFsRXZhbCggdGV4
dCApOworICAgICAgICAgICAgcmV0dXJuIHRleHQ7CisgICAgICAgIH0KKyAgICB9Cit9KTsKKwor
Ly8gSGFuZGxlIGNhY2hlJ3Mgc3BlY2lhbCBjYXNlIGFuZCBnbG9iYWwKK2pRdWVyeS5hamF4UHJl
ZmlsdGVyKCAic2NyaXB0IiwgZnVuY3Rpb24oIHMgKSB7CisgICAgaWYgKCBzLmNhY2hlID09PSB1
bmRlZmluZWQgKSB7CisgICAgICAgIHMuY2FjaGUgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKCBz
LmNyb3NzRG9tYWluICkgeworICAgICAgICBzLnR5cGUgPSAiR0VUIjsKKyAgICAgICAgcy5nbG9i
YWwgPSBmYWxzZTsKKyAgICB9Cit9KTsKKworLy8gQmluZCBzY3JpcHQgdGFnIGhhY2sgdHJhbnNw
b3J0CitqUXVlcnkuYWpheFRyYW5zcG9ydCggInNjcmlwdCIsIGZ1bmN0aW9uKHMpIHsKKworICAg
IC8vIFRoaXMgdHJhbnNwb3J0IG9ubHkgZGVhbHMgd2l0aCBjcm9zcyBkb21haW4gcmVxdWVzdHMK
KyAgICBpZiAoIHMuY3Jvc3NEb21haW4gKSB7CisKKyAgICAgICAgdmFyIHNjcmlwdCwKKyAgICAg
ICAgICAgIGhlYWQgPSBkb2N1bWVudC5oZWFkIHx8IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdO
YW1lKCAiaGVhZCIgKVswXSB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7CisKKyAgICAgICAg
cmV0dXJuIHsKKworICAgICAgICAgICAgc2VuZDogZnVuY3Rpb24oIF8sIGNhbGxiYWNrICkgewor
CisgICAgICAgICAgICAgICAgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggInNjcmlw
dCIgKTsKKworICAgICAgICAgICAgICAgIHNjcmlwdC5hc3luYyA9ICJhc3luYyI7CisKKyAgICAg
ICAgICAgICAgICBpZiAoIHMuc2NyaXB0Q2hhcnNldCApIHsKKyAgICAgICAgICAgICAgICAgICAg
c2NyaXB0LmNoYXJzZXQgPSBzLnNjcmlwdENoYXJzZXQ7CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgc2NyaXB0LnNyYyA9IHMudXJsOworCisgICAgICAgICAgICAgICAgLy8g
QXR0YWNoIGhhbmRsZXJzIGZvciBhbGwgYnJvd3NlcnMKKyAgICAgICAgICAgICAgICBzY3JpcHQu
b25sb2FkID0gc2NyaXB0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCBfLCBpc0Fib3J0
ICkgeworCisgICAgICAgICAgICAgICAgICAgIGlmICggaXNBYm9ydCB8fCAhc2NyaXB0LnJlYWR5
U3RhdGUgfHwgL2xvYWRlZHxjb21wbGV0ZS8udGVzdCggc2NyaXB0LnJlYWR5U3RhdGUgKSApIHsK
KworICAgICAgICAgICAgICAgICAgICAgICAgLy8gSGFuZGxlIG1lbW9yeSBsZWFrIGluIElFCisg
ICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHQub25sb2FkID0gc2NyaXB0Lm9ucmVhZHlzdGF0
ZWNoYW5nZSA9IG51bGw7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUg
c2NyaXB0CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGhlYWQgJiYgc2NyaXB0LnBhcmVu
dE5vZGUgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZC5yZW1vdmVDaGlsZCgg
c2NyaXB0ICk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIERlcmVmZXJlbmNlIHRoZSBzY3JpcHQKKyAgICAgICAgICAgICAgICAgICAgICAg
IHNjcmlwdCA9IHVuZGVmaW5lZDsKKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FsbGJh
Y2sgaWYgbm90IGFib3J0CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFpc0Fib3J0ICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCAyMDAsICJzdWNjZXNzIiAp
OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAvLyBVc2UgaW5zZXJ0QmVmb3JlIGluc3Rl
YWQgb2YgYXBwZW5kQ2hpbGQgIHRvIGNpcmN1bXZlbnQgYW4gSUU2IGJ1Zy4KKyAgICAgICAgICAg
ICAgICAvLyBUaGlzIGFyaXNlcyB3aGVuIGEgYmFzZSBub2RlIGlzIHVzZWQgKCMyNzA5IGFuZCAj
NDM3OCkuCisgICAgICAgICAgICAgICAgaGVhZC5pbnNlcnRCZWZvcmUoIHNjcmlwdCwgaGVhZC5m
aXJzdENoaWxkICk7CisgICAgICAgICAgICB9LAorCisgICAgICAgICAgICBhYm9ydDogZnVuY3Rp
b24oKSB7CisgICAgICAgICAgICAgICAgaWYgKCBzY3JpcHQgKSB7CisgICAgICAgICAgICAgICAg
ICAgIHNjcmlwdC5vbmxvYWQoIDAsIDEgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH07CisgICAgfQorfSk7Cit2YXIgeGhyQ2FsbGJhY2tzLAorICAgIC8vICM1
MjgwOiBJbnRlcm5ldCBFeHBsb3JlciB3aWxsIGtlZXAgY29ubmVjdGlvbnMgYWxpdmUgaWYgd2Ug
ZG9uJ3QgYWJvcnQgb24gdW5sb2FkCisgICAgeGhyT25VbmxvYWRBYm9ydCA9IHdpbmRvdy5BY3Rp
dmVYT2JqZWN0ID8gZnVuY3Rpb24oKSB7CisgICAgICAgIC8vIEFib3J0IGFsbCBwZW5kaW5nIHJl
cXVlc3RzCisgICAgICAgIGZvciAoIHZhciBrZXkgaW4geGhyQ2FsbGJhY2tzICkgeworICAgICAg
ICAgICAgeGhyQ2FsbGJhY2tzWyBrZXkgXSggMCwgMSApOworICAgICAgICB9CisgICAgfSA6IGZh
bHNlLAorICAgIHhocklkID0gMDsKKworLy8gRnVuY3Rpb25zIHRvIGNyZWF0ZSB4aHJzCitmdW5j
dGlvbiBjcmVhdGVTdGFuZGFyZFhIUigpIHsKKyAgICB0cnkgeworICAgICAgICByZXR1cm4gbmV3
IHdpbmRvdy5YTUxIdHRwUmVxdWVzdCgpOworICAgIH0gY2F0Y2goIGUgKSB7fQorfQorCitmdW5j
dGlvbiBjcmVhdGVBY3RpdmVYSFIoKSB7CisgICAgdHJ5IHsKKyAgICAgICAgcmV0dXJuIG5ldyB3
aW5kb3cuQWN0aXZlWE9iamVjdCggIk1pY3Jvc29mdC5YTUxIVFRQIiApOworICAgIH0gY2F0Y2go
IGUgKSB7fQorfQorCisvLyBDcmVhdGUgdGhlIHJlcXVlc3Qgb2JqZWN0CisvLyAoVGhpcyBpcyBz
dGlsbCBhdHRhY2hlZCB0byBhamF4U2V0dGluZ3MgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkp
CitqUXVlcnkuYWpheFNldHRpbmdzLnhociA9IHdpbmRvdy5BY3RpdmVYT2JqZWN0ID8KKyAgICAv
KiBNaWNyb3NvZnQgZmFpbGVkIHRvIHByb3Blcmx5CisgICAgICogaW1wbGVtZW50IHRoZSBYTUxI
dHRwUmVxdWVzdCBpbiBJRTcgKGNhbid0IHJlcXVlc3QgbG9jYWwgZmlsZXMpLAorICAgICAqIHNv
IHdlIHVzZSB0aGUgQWN0aXZlWE9iamVjdCB3aGVuIGl0IGlzIGF2YWlsYWJsZQorICAgICAqIEFk
ZGl0aW9uYWxseSBYTUxIdHRwUmVxdWVzdCBjYW4gYmUgZGlzYWJsZWQgaW4gSUU3L0lFOCBzbwor
ICAgICAqIHdlIG5lZWQgYSBmYWxsYmFjay4KKyAgICAgKi8KKyAgICBmdW5jdGlvbigpIHsKKyAg
ICAgICAgcmV0dXJuICF0aGlzLmlzTG9jYWwgJiYgY3JlYXRlU3RhbmRhcmRYSFIoKSB8fCBjcmVh
dGVBY3RpdmVYSFIoKTsKKyAgICB9IDoKKyAgICAvLyBGb3IgYWxsIG90aGVyIGJyb3dzZXJzLCB1
c2UgdGhlIHN0YW5kYXJkIFhNTEh0dHBSZXF1ZXN0IG9iamVjdAorICAgIGNyZWF0ZVN0YW5kYXJk
WEhSOworCisvLyBEZXRlcm1pbmUgc3VwcG9ydCBwcm9wZXJ0aWVzCisoZnVuY3Rpb24oIHhociAp
IHsKKyAgICBqUXVlcnkuZXh0ZW5kKCBqUXVlcnkuc3VwcG9ydCwgeworICAgICAgICBhamF4OiAh
IXhociwKKyAgICAgICAgY29yczogISF4aHIgJiYgKCAid2l0aENyZWRlbnRpYWxzIiBpbiB4aHIg
KQorICAgIH0pOworfSkoIGpRdWVyeS5hamF4U2V0dGluZ3MueGhyKCkgKTsKKworLy8gQ3JlYXRl
IHRyYW5zcG9ydCBpZiB0aGUgYnJvd3NlciBjYW4gcHJvdmlkZSBhbiB4aHIKK2lmICggalF1ZXJ5
LnN1cHBvcnQuYWpheCApIHsKKworICAgIGpRdWVyeS5hamF4VHJhbnNwb3J0KGZ1bmN0aW9uKCBz
ICkgeworICAgICAgICAvLyBDcm9zcyBkb21haW4gb25seSBhbGxvd2VkIGlmIHN1cHBvcnRlZCB0
aHJvdWdoIFhNTEh0dHBSZXF1ZXN0CisgICAgICAgIGlmICggIXMuY3Jvc3NEb21haW4gfHwgalF1
ZXJ5LnN1cHBvcnQuY29ycyApIHsKKworICAgICAgICAgICAgdmFyIGNhbGxiYWNrOworCisgICAg
ICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHNlbmQ6IGZ1bmN0aW9uKCBoZWFkZXJz
LCBjb21wbGV0ZSApIHsKKworICAgICAgICAgICAgICAgICAgICAvLyBHZXQgYSBuZXcgeGhyCisg
ICAgICAgICAgICAgICAgICAgIHZhciBoYW5kbGUsIGksCisgICAgICAgICAgICAgICAgICAgICAg
ICB4aHIgPSBzLnhocigpOworCisgICAgICAgICAgICAgICAgICAgIC8vIE9wZW4gdGhlIHNvY2tl
dAorICAgICAgICAgICAgICAgICAgICAvLyBQYXNzaW5nIG51bGwgdXNlcm5hbWUsIGdlbmVyYXRl
cyBhIGxvZ2luIHBvcHVwIG9uIE9wZXJhICgjMjg2NSkKKyAgICAgICAgICAgICAgICAgICAgaWYg
KCBzLnVzZXJuYW1lICkgeworICAgICAgICAgICAgICAgICAgICAgICAgeGhyLm9wZW4oIHMudHlw
ZSwgcy51cmwsIHMuYXN5bmMsIHMudXNlcm5hbWUsIHMucGFzc3dvcmQgKTsKKyAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHhoci5vcGVuKCBzLnR5
cGUsIHMudXJsLCBzLmFzeW5jICk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgICAgICAvLyBBcHBseSBjdXN0b20gZmllbGRzIGlmIHByb3ZpZGVkCisgICAgICAgICAg
ICAgICAgICAgIGlmICggcy54aHJGaWVsZHMgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBm
b3IgKCBpIGluIHMueGhyRmllbGRzICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHho
clsgaSBdID0gcy54aHJGaWVsZHNbIGkgXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8vIE92ZXJyaWRlIG1p
bWUgdHlwZSBpZiBuZWVkZWQKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBzLm1pbWVUeXBlICYm
IHhoci5vdmVycmlkZU1pbWVUeXBlICkgeworICAgICAgICAgICAgICAgICAgICAgICAgeGhyLm92
ZXJyaWRlTWltZVR5cGUoIHMubWltZVR5cGUgKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgICAgIC8vIFgtUmVxdWVzdGVkLVdpdGggaGVhZGVyCisgICAgICAgICAg
ICAgICAgICAgIC8vIEZvciBjcm9zcy1kb21haW4gcmVxdWVzdHMsIHNlZWluZyBhcyBjb25kaXRp
b25zIGZvciBhIHByZWZsaWdodCBhcmUKKyAgICAgICAgICAgICAgICAgICAgLy8gYWtpbiB0byBh
IGppZ3NhdyBwdXp6bGUsIHdlIHNpbXBseSBuZXZlciBzZXQgaXQgdG8gYmUgc3VyZS4KKyAgICAg
ICAgICAgICAgICAgICAgLy8gKGl0IGNhbiBhbHdheXMgYmUgc2V0IG9uIGEgcGVyLXJlcXVlc3Qg
YmFzaXMgb3IgZXZlbiB1c2luZyBhamF4U2V0dXApCisgICAgICAgICAgICAgICAgICAgIC8vIEZv
ciBzYW1lLWRvbWFpbiByZXF1ZXN0cywgd29uJ3QgY2hhbmdlIGhlYWRlciBpZiBhbHJlYWR5IHBy
b3ZpZGVkLgorICAgICAgICAgICAgICAgICAgICBpZiAoICFzLmNyb3NzRG9tYWluICYmICFoZWFk
ZXJzWyJYLVJlcXVlc3RlZC1XaXRoIl0gKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBoZWFk
ZXJzWyAiWC1SZXF1ZXN0ZWQtV2l0aCIgXSA9ICJYTUxIdHRwUmVxdWVzdCI7CisgICAgICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAvLyBOZWVkIGFuIGV4dHJhIHRyeS9j
YXRjaCBmb3IgY3Jvc3MgZG9tYWluIHJlcXVlc3RzIGluIEZpcmVmb3ggMworICAgICAgICAgICAg
ICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggaSBpbiBoZWFkZXJz
ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCBp
LCBoZWFkZXJzWyBpIF0gKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgfSBjYXRjaCggXyApIHt9CisKKyAgICAgICAgICAgICAgICAgICAgLy8gRG8gc2Vu
ZCB0aGUgcmVxdWVzdAorICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIG1heSByYWlzZSBhbiBl
eGNlcHRpb24gd2hpY2ggaXMgYWN0dWFsbHkKKyAgICAgICAgICAgICAgICAgICAgLy8gaGFuZGxl
ZCBpbiBqUXVlcnkuYWpheCAoc28gbm8gdHJ5L2NhdGNoIGhlcmUpCisgICAgICAgICAgICAgICAg
ICAgIHhoci5zZW5kKCAoIHMuaGFzQ29udGVudCAmJiBzLmRhdGEgKSB8fCBudWxsICk7CisKKyAg
ICAgICAgICAgICAgICAgICAgLy8gTGlzdGVuZXIKKyAgICAgICAgICAgICAgICAgICAgY2FsbGJh
Y2sgPSBmdW5jdGlvbiggXywgaXNBYm9ydCApIHsKKworICAgICAgICAgICAgICAgICAgICAgICAg
dmFyIHN0YXR1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNUZXh0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlSGVhZGVycywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXNwb25zZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1s
OworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBGaXJlZm94IHRocm93cyBleGNlcHRpb25z
IHdoZW4gYWNjZXNzaW5nIHByb3BlcnRpZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9m
IGFuIHhociB3aGVuIGEgbmV0d29yayBlcnJvciBvY2N1cnJlZAorICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gaHR0cDovL2hlbHBmdWwua25vYnMtZGlhbHMuY29tL2luZGV4LnBocC9Db21wb25l
bnRfcmV0dXJuZWRfZmFpbHVyZV9jb2RlOl8weDgwMDQwMTExXyhOU19FUlJPUl9OT1RfQVZBSUxB
QkxFKQorICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIFdhcyBuZXZlciBjYWxsZWQgYW5kIGlzIGFib3J0ZWQgb3IgY29tcGxldGUK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGNhbGxiYWNrICYmICggaXNBYm9ydCB8
fCB4aHIucmVhZHlTdGF0ZSA9PT0gNCApICkgeworCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIE9ubHkgY2FsbGVkIG9uY2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY2FsbGJhY2sgPSB1bmRlZmluZWQ7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gRG8gbm90IGtlZXAgYXMgYWN0aXZlIGFueW1vcmUKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCBoYW5kbGUgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0galF1ZXJ5Lm5vb3A7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHhock9uVW5sb2FkQWJvcnQgKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHhockNhbGxiYWNrc1sg
aGFuZGxlIF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBJZiBpdCdzIGFuIGFib3J0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICggaXNBYm9ydCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IEFib3J0IGl0IG1hbnVhbGx5IGlmIG5lZWRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCB4aHIucmVhZHlTdGF0ZSAhPT0gNCApIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB4aHIuYWJvcnQoKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IHhoci5zdGF0
dXM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZUhlYWRlcnMg
PSB4aHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXNwb25zZXMgPSB7fTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHhtbCA9IHhoci5yZXNwb25zZVhNTDsKKworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gQ29uc3RydWN0IHJlc3BvbnNlIGxpc3QKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggeG1sICYmIHhtbC5kb2N1bWVudEVsZW1lbnQgLyogIzQ5
NTggKi8gKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9u
c2VzLnhtbCA9IHhtbDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2hlbiByZXF1ZXN0aW5nIGJp
bmFyeSBkYXRhLCBJRTYtOSB3aWxsIHRocm93IGFuIGV4Y2VwdGlvbgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gb24gYW55IGF0dGVtcHQgdG8gYWNjZXNzIHJlc3BvbnNl
VGV4dCAoIzExNDI2KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZXMudGV4dCA9
IHhoci5yZXNwb25zZVRleHQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
IGNhdGNoKCBlICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGaXJlZm94IHRocm93cyBhbiBl
eGNlcHRpb24gd2hlbiBhY2Nlc3NpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIHN0YXR1c1RleHQgZm9yIGZhdWx0eSBjcm9zcy1kb21haW4gcmVxdWVzdHMKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RhdHVzVGV4dCA9IHhoci5zdGF0dXNUZXh0OworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCggZSApIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBub3JtYWxpemUgd2l0aCBXZWJraXQg
Z2l2aW5nIGFuIGVtcHR5IHN0YXR1c1RleHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdGF0dXNUZXh0ID0gIiI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZpbHRl
ciBzdGF0dXMgZm9yIG5vbiBzdGFuZGFyZCBiZWhhdmlvcnMKKworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHJlcXVlc3QgaXMgbG9jYWwgYW5kIHdlIGhhdmUg
ZGF0YTogYXNzdW1lIGEgc3VjY2VzcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gKHN1Y2Nlc3Mgd2l0aCBubyBkYXRhIHdvbid0IGdldCBub3RpZmllZCwgdGhhdCdzIHRo
ZSBiZXN0IHdlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjYW4gZG8g
Z2l2ZW4gY3VycmVudCBpbXBsZW1lbnRhdGlvbnMpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoICFzdGF0dXMgJiYgcy5pc0xvY2FsICYmICFzLmNyb3NzRG9tYWluICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IHJlc3Bv
bnNlcy50ZXh0ID8gMjAwIDogNDA0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gSUUgLSAjMTQ1MDogc29tZXRpbWVzIHJldHVybnMgMTIyMyB3aGVuIGl0IHNob3VsZCBi
ZSAyMDQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIHN0
YXR1cyA9PT0gMTIyMyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdGF0dXMgPSAyMDQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoKCBmaXJlZm94QWNjZXNzRXhj
ZXB0aW9uICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIWlzQWJvcnQgKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlKCAtMSwgZmlyZWZveEFj
Y2Vzc0V4Y2VwdGlvbiApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FsbCBjb21w
bGV0ZSBpZiBuZWVkZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcmVzcG9uc2VzICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlKCBzdGF0dXMsIHN0YXR1c1Rl
eHQsIHJlc3BvbnNlcywgcmVzcG9uc2VIZWFkZXJzICk7CisgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCAh
cy5hc3luYyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIHdlJ3JlIGluIHN5bmMg
bW9kZSB3ZSBmaXJlIHRoZSBjYWxsYmFjaworICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJh
Y2soKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggeGhyLnJlYWR5U3RhdGUgPT09
IDQgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyAoSUU2ICYgSUU3KSBpZiBpdCdzIGlu
IGNhY2hlIGFuZCBoYXMgYmVlbgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmV0cmlldmVk
IGRpcmVjdGx5IHdlIG5lZWQgdG8gZmlyZSB0aGUgY2FsbGJhY2sKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHNldFRpbWVvdXQoIGNhbGxiYWNrLCAwICk7CisgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUgPSArK3hocklkOworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCB4aHJPblVubG9hZEFib3J0ICkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIENyZWF0ZSB0aGUgYWN0aXZlIHhocnMgY2FsbGJhY2tzIGxpc3Qg
aWYgbmVlZGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW5kIGF0dGFjaCB0aGUg
dW5sb2FkIGhhbmRsZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICF4aHJDYWxs
YmFja3MgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhockNhbGxiYWNrcyA9
IHt9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkoIHdpbmRvdyApLnVu
bG9hZCggeGhyT25VbmxvYWRBYm9ydCApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBZGQgdG8gbGlzdCBvZiBhY3RpdmUgeGhy
cyBjYWxsYmFja3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB4aHJDYWxsYmFja3NbIGhh
bmRsZSBdID0gY2FsbGJhY2s7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gY2FsbGJhY2s7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAgICAgYWJv
cnQ6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIGNhbGxiYWNrICkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soMCwxKTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CisgICAgICAgIH0KKyAgICB9
KTsKK30KK3ZhciBmeE5vdywgdGltZXJJZCwKKyAgICByZnh0eXBlcyA9IC9eKD86dG9nZ2xlfHNo
b3d8aGlkZSkkLywKKyAgICByZnhudW0gPSBuZXcgUmVnRXhwKCAiXig/OihbLStdKT18KSgiICsg
Y29yZV9wbnVtICsgIikoW2EteiVdKikkIiwgImkiICksCisgICAgcnJ1biA9IC9xdWV1ZUhvb2tz
JC8sCisgICAgYW5pbWF0aW9uUHJlZmlsdGVycyA9IFsgZGVmYXVsdFByZWZpbHRlciBdLAorICAg
IHR3ZWVuZXJzID0geworICAgICAgICAiKiI6IFtmdW5jdGlvbiggcHJvcCwgdmFsdWUgKSB7Cisg
ICAgICAgICAgICB2YXIgZW5kLCB1bml0LAorICAgICAgICAgICAgICAgIHR3ZWVuID0gdGhpcy5j
cmVhdGVUd2VlbiggcHJvcCwgdmFsdWUgKSwKKyAgICAgICAgICAgICAgICBwYXJ0cyA9IHJmeG51
bS5leGVjKCB2YWx1ZSApLAorICAgICAgICAgICAgICAgIHRhcmdldCA9IHR3ZWVuLmN1cigpLAor
ICAgICAgICAgICAgICAgIHN0YXJ0ID0gK3RhcmdldCB8fCAwLAorICAgICAgICAgICAgICAgIHNj
YWxlID0gMSwKKyAgICAgICAgICAgICAgICBtYXhJdGVyYXRpb25zID0gMjA7CisKKyAgICAgICAg
ICAgIGlmICggcGFydHMgKSB7CisgICAgICAgICAgICAgICAgZW5kID0gK3BhcnRzWzJdOworICAg
ICAgICAgICAgICAgIHVuaXQgPSBwYXJ0c1szXSB8fCAoIGpRdWVyeS5jc3NOdW1iZXJbIHByb3Ag
XSA/ICIiIDogInB4IiApOworCisgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBjb21wdXRl
IHN0YXJ0aW5nIHZhbHVlCisgICAgICAgICAgICAgICAgaWYgKCB1bml0ICE9PSAicHgiICYmIHN0
YXJ0ICkgeworICAgICAgICAgICAgICAgICAgICAvLyBJdGVyYXRpdmVseSBhcHByb3hpbWF0ZSBm
cm9tIGEgbm9uemVybyBzdGFydGluZyBwb2ludAorICAgICAgICAgICAgICAgICAgICAvLyBQcmVm
ZXIgdGhlIGN1cnJlbnQgcHJvcGVydHksIGJlY2F1c2UgdGhpcyBwcm9jZXNzIHdpbGwgYmUgdHJp
dmlhbCBpZiBpdCB1c2VzIHRoZSBzYW1lIHVuaXRzCisgICAgICAgICAgICAgICAgICAgIC8vIEZh
bGxiYWNrIHRvIGVuZCBvciBhIHNpbXBsZSBjb25zdGFudAorICAgICAgICAgICAgICAgICAgICBz
dGFydCA9IGpRdWVyeS5jc3MoIHR3ZWVuLmVsZW0sIHByb3AsIHRydWUgKSB8fCBlbmQgfHwgMTsK
KworICAgICAgICAgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBJ
ZiBwcmV2aW91cyBpdGVyYXRpb24gemVyb2VkIG91dCwgZG91YmxlIHVudGlsIHdlIGdldCAqc29t
ZXRoaW5nKgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gVXNlIGEgc3RyaW5nIGZvciBkb3Vi
bGluZyBmYWN0b3Igc28gd2UgZG9uJ3QgYWNjaWRlbnRhbGx5IHNlZSBzY2FsZSBhcyB1bmNoYW5n
ZWQgYmVsb3cKKyAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlID0gc2NhbGUgfHwgIi41IjsK
KworICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWRqdXN0IGFuZCBhcHBseQorICAgICAgICAg
ICAgICAgICAgICAgICAgc3RhcnQgPSBzdGFydCAvIHNjYWxlOworICAgICAgICAgICAgICAgICAg
ICAgICAgalF1ZXJ5LnN0eWxlKCB0d2Vlbi5lbGVtLCBwcm9wLCBzdGFydCArIHVuaXQgKTsKKwor
ICAgICAgICAgICAgICAgICAgICAvLyBVcGRhdGUgc2NhbGUsIHRvbGVyYXRpbmcgemVybyBvciBO
YU4gZnJvbSB0d2Vlbi5jdXIoKQorICAgICAgICAgICAgICAgICAgICAvLyBBbmQgYnJlYWtpbmcg
dGhlIGxvb3AgaWYgc2NhbGUgaXMgdW5jaGFuZ2VkIG9yIHBlcmZlY3QsIG9yIGlmIHdlJ3ZlIGp1
c3QgaGFkIGVub3VnaAorICAgICAgICAgICAgICAgICAgICB9IHdoaWxlICggc2NhbGUgIT09IChz
Y2FsZSA9IHR3ZWVuLmN1cigpIC8gdGFyZ2V0KSAmJiBzY2FsZSAhPT0gMSAmJiAtLW1heEl0ZXJh
dGlvbnMgKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB0d2Vlbi51bml0
ID0gdW5pdDsKKyAgICAgICAgICAgICAgICB0d2Vlbi5zdGFydCA9IHN0YXJ0OworICAgICAgICAg
ICAgICAgIC8vIElmIGEgKz0vLT0gdG9rZW4gd2FzIHByb3ZpZGVkLCB3ZSdyZSBkb2luZyBhIHJl
bGF0aXZlIGFuaW1hdGlvbgorICAgICAgICAgICAgICAgIHR3ZWVuLmVuZCA9IHBhcnRzWzFdID8g
c3RhcnQgKyAoIHBhcnRzWzFdICsgMSApICogZW5kIDogZW5kOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgcmV0dXJuIHR3ZWVuOworICAgICAgICB9XQorICAgIH07CisKKy8vIEFuaW1hdGlv
bnMgY3JlYXRlZCBzeW5jaHJvbm91c2x5IHdpbGwgcnVuIHN5bmNocm9ub3VzbHkKK2Z1bmN0aW9u
IGNyZWF0ZUZ4Tm93KCkgeworICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgIGZ4
Tm93ID0gdW5kZWZpbmVkOworICAgIH0sIDAgKTsKKyAgICByZXR1cm4gKCBmeE5vdyA9IGpRdWVy
eS5ub3coKSApOworfQorCitmdW5jdGlvbiBjcmVhdGVUd2VlbnMoIGFuaW1hdGlvbiwgcHJvcHMg
KSB7CisgICAgalF1ZXJ5LmVhY2goIHByb3BzLCBmdW5jdGlvbiggcHJvcCwgdmFsdWUgKSB7Cisg
ICAgICAgIHZhciBjb2xsZWN0aW9uID0gKCB0d2VlbmVyc1sgcHJvcCBdIHx8IFtdICkuY29uY2F0
KCB0d2VlbmVyc1sgIioiIF0gKSwKKyAgICAgICAgICAgIGluZGV4ID0gMCwKKyAgICAgICAgICAg
IGxlbmd0aCA9IGNvbGxlY3Rpb24ubGVuZ3RoOworICAgICAgICBmb3IgKCA7IGluZGV4IDwgbGVu
Z3RoOyBpbmRleCsrICkgeworICAgICAgICAgICAgaWYgKCBjb2xsZWN0aW9uWyBpbmRleCBdLmNh
bGwoIGFuaW1hdGlvbiwgcHJvcCwgdmFsdWUgKSApIHsKKworICAgICAgICAgICAgICAgIC8vIHdl
J3JlIGRvbmUgd2l0aCB0aGlzIHByb3BlcnR5CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfSk7Cit9CisKK2Z1bmN0aW9uIEFuaW1hdGlvbigg
ZWxlbSwgcHJvcGVydGllcywgb3B0aW9ucyApIHsKKyAgICB2YXIgcmVzdWx0LAorICAgICAgICBp
bmRleCA9IDAsCisgICAgICAgIHR3ZWVuZXJJbmRleCA9IDAsCisgICAgICAgIGxlbmd0aCA9IGFu
aW1hdGlvblByZWZpbHRlcnMubGVuZ3RoLAorICAgICAgICBkZWZlcnJlZCA9IGpRdWVyeS5EZWZl
cnJlZCgpLmFsd2F5cyggZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAvLyBkb24ndCBtYXRjaCBl
bGVtIGluIHRoZSA6YW5pbWF0ZWQgc2VsZWN0b3IKKyAgICAgICAgICAgIGRlbGV0ZSB0aWNrLmVs
ZW07CisgICAgICAgIH0pLAorICAgICAgICB0aWNrID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAg
ICB2YXIgY3VycmVudFRpbWUgPSBmeE5vdyB8fCBjcmVhdGVGeE5vdygpLAorICAgICAgICAgICAg
ICAgIHJlbWFpbmluZyA9IE1hdGgubWF4KCAwLCBhbmltYXRpb24uc3RhcnRUaW1lICsgYW5pbWF0
aW9uLmR1cmF0aW9uIC0gY3VycmVudFRpbWUgKSwKKyAgICAgICAgICAgICAgICAvLyBhcmNoYWlj
IGNyYXNoIGJ1ZyB3b24ndCBhbGxvdyB1cyB0byB1c2UgMSAtICggMC41IHx8IDAgKSAoIzEyNDk3
KQorICAgICAgICAgICAgICAgIHRlbXAgPSByZW1haW5pbmcgLyBhbmltYXRpb24uZHVyYXRpb24g
fHwgMCwKKyAgICAgICAgICAgICAgICBwZXJjZW50ID0gMSAtIHRlbXAsCisgICAgICAgICAgICAg
ICAgaW5kZXggPSAwLAorICAgICAgICAgICAgICAgIGxlbmd0aCA9IGFuaW1hdGlvbi50d2VlbnMu
bGVuZ3RoOworCisgICAgICAgICAgICBmb3IgKCA7IGluZGV4IDwgbGVuZ3RoIDsgaW5kZXgrKyAp
IHsKKyAgICAgICAgICAgICAgICBhbmltYXRpb24udHdlZW5zWyBpbmRleCBdLnJ1biggcGVyY2Vu
dCApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBkZWZlcnJlZC5ub3RpZnlXaXRoKCBl
bGVtLCBbIGFuaW1hdGlvbiwgcGVyY2VudCwgcmVtYWluaW5nIF0pOworCisgICAgICAgICAgICBp
ZiAoIHBlcmNlbnQgPCAxICYmIGxlbmd0aCApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVt
YWluaW5nOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBkZWZlcnJlZC5y
ZXNvbHZlV2l0aCggZWxlbSwgWyBhbmltYXRpb24gXSApOworICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgYW5pbWF0aW9uID0g
ZGVmZXJyZWQucHJvbWlzZSh7CisgICAgICAgICAgICBlbGVtOiBlbGVtLAorICAgICAgICAgICAg
cHJvcHM6IGpRdWVyeS5leHRlbmQoIHt9LCBwcm9wZXJ0aWVzICksCisgICAgICAgICAgICBvcHRz
OiBqUXVlcnkuZXh0ZW5kKCB0cnVlLCB7IHNwZWNpYWxFYXNpbmc6IHt9IH0sIG9wdGlvbnMgKSwK
KyAgICAgICAgICAgIG9yaWdpbmFsUHJvcGVydGllczogcHJvcGVydGllcywKKyAgICAgICAgICAg
IG9yaWdpbmFsT3B0aW9uczogb3B0aW9ucywKKyAgICAgICAgICAgIHN0YXJ0VGltZTogZnhOb3cg
fHwgY3JlYXRlRnhOb3coKSwKKyAgICAgICAgICAgIGR1cmF0aW9uOiBvcHRpb25zLmR1cmF0aW9u
LAorICAgICAgICAgICAgdHdlZW5zOiBbXSwKKyAgICAgICAgICAgIGNyZWF0ZVR3ZWVuOiBmdW5j
dGlvbiggcHJvcCwgZW5kLCBlYXNpbmcgKSB7CisgICAgICAgICAgICAgICAgdmFyIHR3ZWVuID0g
alF1ZXJ5LlR3ZWVuKCBlbGVtLCBhbmltYXRpb24ub3B0cywgcHJvcCwgZW5kLAorICAgICAgICAg
ICAgICAgICAgICAgICAgYW5pbWF0aW9uLm9wdHMuc3BlY2lhbEVhc2luZ1sgcHJvcCBdIHx8IGFu
aW1hdGlvbi5vcHRzLmVhc2luZyApOworICAgICAgICAgICAgICAgIGFuaW1hdGlvbi50d2VlbnMu
cHVzaCggdHdlZW4gKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHdlZW47CisgICAgICAgICAg
ICB9LAorICAgICAgICAgICAgc3RvcDogZnVuY3Rpb24oIGdvdG9FbmQgKSB7CisgICAgICAgICAg
ICAgICAgdmFyIGluZGV4ID0gMCwKKyAgICAgICAgICAgICAgICAgICAgLy8gaWYgd2UgYXJlIGdv
aW5nIHRvIHRoZSBlbmQsIHdlIHdhbnQgdG8gcnVuIGFsbCB0aGUgdHdlZW5zCisgICAgICAgICAg
ICAgICAgICAgIC8vIG90aGVyd2lzZSB3ZSBza2lwIHRoaXMgcGFydAorICAgICAgICAgICAgICAg
ICAgICBsZW5ndGggPSBnb3RvRW5kID8gYW5pbWF0aW9uLnR3ZWVucy5sZW5ndGggOiAwOworCisg
ICAgICAgICAgICAgICAgZm9yICggOyBpbmRleCA8IGxlbmd0aCA7IGluZGV4KysgKSB7CisgICAg
ICAgICAgICAgICAgICAgIGFuaW1hdGlvbi50d2VlbnNbIGluZGV4IF0ucnVuKCAxICk7CisgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gcmVzb2x2ZSB3aGVuIHdlIHBsYXll
ZCB0aGUgbGFzdCBmcmFtZQorICAgICAgICAgICAgICAgIC8vIG90aGVyd2lzZSwgcmVqZWN0Cisg
ICAgICAgICAgICAgICAgaWYgKCBnb3RvRW5kICkgeworICAgICAgICAgICAgICAgICAgICBkZWZl
cnJlZC5yZXNvbHZlV2l0aCggZWxlbSwgWyBhbmltYXRpb24sIGdvdG9FbmQgXSApOworICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLnJlamVjdFdp
dGgoIGVsZW0sIFsgYW5pbWF0aW9uLCBnb3RvRW5kIF0gKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICB9CisgICAgICAgIH0pLAor
ICAgICAgICBwcm9wcyA9IGFuaW1hdGlvbi5wcm9wczsKKworICAgIHByb3BGaWx0ZXIoIHByb3Bz
LCBhbmltYXRpb24ub3B0cy5zcGVjaWFsRWFzaW5nICk7CisKKyAgICBmb3IgKCA7IGluZGV4IDwg
bGVuZ3RoIDsgaW5kZXgrKyApIHsKKyAgICAgICAgcmVzdWx0ID0gYW5pbWF0aW9uUHJlZmlsdGVy
c1sgaW5kZXggXS5jYWxsKCBhbmltYXRpb24sIGVsZW0sIHByb3BzLCBhbmltYXRpb24ub3B0cyAp
OworICAgICAgICBpZiAoIHJlc3VsdCApIHsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBjcmVhdGVUd2VlbnMoIGFuaW1hdGlvbiwgcHJvcHMgKTsK
KworICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIGFuaW1hdGlvbi5vcHRzLnN0YXJ0ICkgKSB7
CisgICAgICAgIGFuaW1hdGlvbi5vcHRzLnN0YXJ0LmNhbGwoIGVsZW0sIGFuaW1hdGlvbiApOwor
ICAgIH0KKworICAgIGpRdWVyeS5meC50aW1lcigKKyAgICAgICAgalF1ZXJ5LmV4dGVuZCggdGlj
aywgeworICAgICAgICAgICAgYW5pbTogYW5pbWF0aW9uLAorICAgICAgICAgICAgcXVldWU6IGFu
aW1hdGlvbi5vcHRzLnF1ZXVlLAorICAgICAgICAgICAgZWxlbTogZWxlbQorICAgICAgICB9KQor
ICAgICk7CisKKyAgICAvLyBhdHRhY2ggY2FsbGJhY2tzIGZyb20gb3B0aW9ucworICAgIHJldHVy
biBhbmltYXRpb24ucHJvZ3Jlc3MoIGFuaW1hdGlvbi5vcHRzLnByb2dyZXNzICkKKyAgICAgICAg
LmRvbmUoIGFuaW1hdGlvbi5vcHRzLmRvbmUsIGFuaW1hdGlvbi5vcHRzLmNvbXBsZXRlICkKKyAg
ICAgICAgLmZhaWwoIGFuaW1hdGlvbi5vcHRzLmZhaWwgKQorICAgICAgICAuYWx3YXlzKCBhbmlt
YXRpb24ub3B0cy5hbHdheXMgKTsKK30KKworZnVuY3Rpb24gcHJvcEZpbHRlciggcHJvcHMsIHNw
ZWNpYWxFYXNpbmcgKSB7CisgICAgdmFyIGluZGV4LCBuYW1lLCBlYXNpbmcsIHZhbHVlLCBob29r
czsKKworICAgIC8vIGNhbWVsQ2FzZSwgc3BlY2lhbEVhc2luZyBhbmQgZXhwYW5kIGNzc0hvb2sg
cGFzcworICAgIGZvciAoIGluZGV4IGluIHByb3BzICkgeworICAgICAgICBuYW1lID0galF1ZXJ5
LmNhbWVsQ2FzZSggaW5kZXggKTsKKyAgICAgICAgZWFzaW5nID0gc3BlY2lhbEVhc2luZ1sgbmFt
ZSBdOworICAgICAgICB2YWx1ZSA9IHByb3BzWyBpbmRleCBdOworICAgICAgICBpZiAoIGpRdWVy
eS5pc0FycmF5KCB2YWx1ZSApICkgeworICAgICAgICAgICAgZWFzaW5nID0gdmFsdWVbIDEgXTsK
KyAgICAgICAgICAgIHZhbHVlID0gcHJvcHNbIGluZGV4IF0gPSB2YWx1ZVsgMCBdOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKCBpbmRleCAhPT0gbmFtZSApIHsKKyAgICAgICAgICAgIHByb3Bz
WyBuYW1lIF0gPSB2YWx1ZTsKKyAgICAgICAgICAgIGRlbGV0ZSBwcm9wc1sgaW5kZXggXTsKKyAg
ICAgICAgfQorCisgICAgICAgIGhvb2tzID0galF1ZXJ5LmNzc0hvb2tzWyBuYW1lIF07CisgICAg
ICAgIGlmICggaG9va3MgJiYgImV4cGFuZCIgaW4gaG9va3MgKSB7CisgICAgICAgICAgICB2YWx1
ZSA9IGhvb2tzLmV4cGFuZCggdmFsdWUgKTsKKyAgICAgICAgICAgIGRlbGV0ZSBwcm9wc1sgbmFt
ZSBdOworCisgICAgICAgICAgICAvLyBub3QgcXVpdGUgJC5leHRlbmQsIHRoaXMgd29udCBvdmVy
d3JpdGUga2V5cyBhbHJlYWR5IHByZXNlbnQuCisgICAgICAgICAgICAvLyBhbHNvIC0gcmV1c2lu
ZyAnaW5kZXgnIGZyb20gYWJvdmUgYmVjYXVzZSB3ZSBoYXZlIHRoZSBjb3JyZWN0ICJuYW1lIgor
ICAgICAgICAgICAgZm9yICggaW5kZXggaW4gdmFsdWUgKSB7CisgICAgICAgICAgICAgICAgaWYg
KCAhKCBpbmRleCBpbiBwcm9wcyApICkgeworICAgICAgICAgICAgICAgICAgICBwcm9wc1sgaW5k
ZXggXSA9IHZhbHVlWyBpbmRleCBdOworICAgICAgICAgICAgICAgICAgICBzcGVjaWFsRWFzaW5n
WyBpbmRleCBdID0gZWFzaW5nOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNwZWNpYWxFYXNpbmdbIG5hbWUgXSA9IGVhc2lu
ZzsKKyAgICAgICAgfQorICAgIH0KK30KKworalF1ZXJ5LkFuaW1hdGlvbiA9IGpRdWVyeS5leHRl
bmQoIEFuaW1hdGlvbiwgeworCisgICAgdHdlZW5lcjogZnVuY3Rpb24oIHByb3BzLCBjYWxsYmFj
ayApIHsKKyAgICAgICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggcHJvcHMgKSApIHsKKyAgICAg
ICAgICAgIGNhbGxiYWNrID0gcHJvcHM7CisgICAgICAgICAgICBwcm9wcyA9IFsgIioiIF07Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwcm9wcyA9IHByb3BzLnNwbGl0KCIgIik7Cisg
ICAgICAgIH0KKworICAgICAgICB2YXIgcHJvcCwKKyAgICAgICAgICAgIGluZGV4ID0gMCwKKyAg
ICAgICAgICAgIGxlbmd0aCA9IHByb3BzLmxlbmd0aDsKKworICAgICAgICBmb3IgKCA7IGluZGV4
IDwgbGVuZ3RoIDsgaW5kZXgrKyApIHsKKyAgICAgICAgICAgIHByb3AgPSBwcm9wc1sgaW5kZXgg
XTsKKyAgICAgICAgICAgIHR3ZWVuZXJzWyBwcm9wIF0gPSB0d2VlbmVyc1sgcHJvcCBdIHx8IFtd
OworICAgICAgICAgICAgdHdlZW5lcnNbIHByb3AgXS51bnNoaWZ0KCBjYWxsYmFjayApOworICAg
ICAgICB9CisgICAgfSwKKworICAgIHByZWZpbHRlcjogZnVuY3Rpb24oIGNhbGxiYWNrLCBwcmVw
ZW5kICkgeworICAgICAgICBpZiAoIHByZXBlbmQgKSB7CisgICAgICAgICAgICBhbmltYXRpb25Q
cmVmaWx0ZXJzLnVuc2hpZnQoIGNhbGxiYWNrICk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBhbmltYXRpb25QcmVmaWx0ZXJzLnB1c2goIGNhbGxiYWNrICk7CisgICAgICAgIH0KKyAg
ICB9Cit9KTsKKworZnVuY3Rpb24gZGVmYXVsdFByZWZpbHRlciggZWxlbSwgcHJvcHMsIG9wdHMg
KSB7CisgICAgdmFyIGluZGV4LCBwcm9wLCB2YWx1ZSwgbGVuZ3RoLCBkYXRhU2hvdywgdG9nZ2xl
LCB0d2VlbiwgaG9va3MsIG9sZGZpcmUsCisgICAgICAgIGFuaW0gPSB0aGlzLAorICAgICAgICBz
dHlsZSA9IGVsZW0uc3R5bGUsCisgICAgICAgIG9yaWcgPSB7fSwKKyAgICAgICAgaGFuZGxlZCA9
IFtdLAorICAgICAgICBoaWRkZW4gPSBlbGVtLm5vZGVUeXBlICYmIGlzSGlkZGVuKCBlbGVtICk7
CisKKyAgICAvLyBoYW5kbGUgcXVldWU6IGZhbHNlIHByb21pc2VzCisgICAgaWYgKCAhb3B0cy5x
dWV1ZSApIHsKKyAgICAgICAgaG9va3MgPSBqUXVlcnkuX3F1ZXVlSG9va3MoIGVsZW0sICJmeCIg
KTsKKyAgICAgICAgaWYgKCBob29rcy51bnF1ZXVlZCA9PSBudWxsICkgeworICAgICAgICAgICAg
aG9va3MudW5xdWV1ZWQgPSAwOworICAgICAgICAgICAgb2xkZmlyZSA9IGhvb2tzLmVtcHR5LmZp
cmU7CisgICAgICAgICAgICBob29rcy5lbXB0eS5maXJlID0gZnVuY3Rpb24oKSB7CisgICAgICAg
ICAgICAgICAgaWYgKCAhaG9va3MudW5xdWV1ZWQgKSB7CisgICAgICAgICAgICAgICAgICAgIG9s
ZGZpcmUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9OworICAgICAgICB9Cisg
ICAgICAgIGhvb2tzLnVucXVldWVkKys7CisKKyAgICAgICAgYW5pbS5hbHdheXMoZnVuY3Rpb24o
KSB7CisgICAgICAgICAgICAvLyBkb2luZyB0aGlzIG1ha2VzIHN1cmUgdGhhdCB0aGUgY29tcGxl
dGUgaGFuZGxlciB3aWxsIGJlIGNhbGxlZAorICAgICAgICAgICAgLy8gYmVmb3JlIHRoaXMgY29t
cGxldGVzCisgICAgICAgICAgICBhbmltLmFsd2F5cyhmdW5jdGlvbigpIHsKKyAgICAgICAgICAg
ICAgICBob29rcy51bnF1ZXVlZC0tOworICAgICAgICAgICAgICAgIGlmICggIWpRdWVyeS5xdWV1
ZSggZWxlbSwgImZ4IiApLmxlbmd0aCApIHsKKyAgICAgICAgICAgICAgICAgICAgaG9va3MuZW1w
dHkuZmlyZSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAgICB9
KTsKKyAgICB9CisKKyAgICAvLyBoZWlnaHQvd2lkdGggb3ZlcmZsb3cgcGFzcworICAgIGlmICgg
ZWxlbS5ub2RlVHlwZSA9PT0gMSAmJiAoICJoZWlnaHQiIGluIHByb3BzIHx8ICJ3aWR0aCIgaW4g
cHJvcHMgKSApIHsKKyAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgbm90aGluZyBzbmVha3Mgb3V0
CisgICAgICAgIC8vIFJlY29yZCBhbGwgMyBvdmVyZmxvdyBhdHRyaWJ1dGVzIGJlY2F1c2UgSUUg
ZG9lcyBub3QKKyAgICAgICAgLy8gY2hhbmdlIHRoZSBvdmVyZmxvdyBhdHRyaWJ1dGUgd2hlbiBv
dmVyZmxvd1ggYW5kCisgICAgICAgIC8vIG92ZXJmbG93WSBhcmUgc2V0IHRvIHRoZSBzYW1lIHZh
bHVlCisgICAgICAgIG9wdHMub3ZlcmZsb3cgPSBbIHN0eWxlLm92ZXJmbG93LCBzdHlsZS5vdmVy
Zmxvd1gsIHN0eWxlLm92ZXJmbG93WSBdOworCisgICAgICAgIC8vIFNldCBkaXNwbGF5IHByb3Bl
cnR5IHRvIGlubGluZS1ibG9jayBmb3IgaGVpZ2h0L3dpZHRoCisgICAgICAgIC8vIGFuaW1hdGlv
bnMgb24gaW5saW5lIGVsZW1lbnRzIHRoYXQgYXJlIGhhdmluZyB3aWR0aC9oZWlnaHQgYW5pbWF0
ZWQKKyAgICAgICAgaWYgKCBqUXVlcnkuY3NzKCBlbGVtLCAiZGlzcGxheSIgKSA9PT0gImlubGlu
ZSIgJiYKKyAgICAgICAgICAgICAgICBqUXVlcnkuY3NzKCBlbGVtLCAiZmxvYXQiICkgPT09ICJu
b25lIiApIHsKKworICAgICAgICAgICAgLy8gaW5saW5lLWxldmVsIGVsZW1lbnRzIGFjY2VwdCBp
bmxpbmUtYmxvY2s7CisgICAgICAgICAgICAvLyBibG9jay1sZXZlbCBlbGVtZW50cyBuZWVkIHRv
IGJlIGlubGluZSB3aXRoIGxheW91dAorICAgICAgICAgICAgaWYgKCAhalF1ZXJ5LnN1cHBvcnQu
aW5saW5lQmxvY2tOZWVkc0xheW91dCB8fCBjc3NfZGVmYXVsdERpc3BsYXkoIGVsZW0ubm9kZU5h
bWUgKSA9PT0gImlubGluZSIgKSB7CisgICAgICAgICAgICAgICAgc3R5bGUuZGlzcGxheSA9ICJp
bmxpbmUtYmxvY2siOworCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHN0
eWxlLnpvb20gPSAxOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYg
KCBvcHRzLm92ZXJmbG93ICkgeworICAgICAgICBzdHlsZS5vdmVyZmxvdyA9ICJoaWRkZW4iOwor
ICAgICAgICBpZiAoICFqUXVlcnkuc3VwcG9ydC5zaHJpbmtXcmFwQmxvY2tzICkgeworICAgICAg
ICAgICAgYW5pbS5kb25lKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHN0eWxlLm92ZXJm
bG93ID0gb3B0cy5vdmVyZmxvd1sgMCBdOworICAgICAgICAgICAgICAgIHN0eWxlLm92ZXJmbG93
WCA9IG9wdHMub3ZlcmZsb3dbIDEgXTsKKyAgICAgICAgICAgICAgICBzdHlsZS5vdmVyZmxvd1kg
PSBvcHRzLm92ZXJmbG93WyAyIF07CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgIH0K
KworCisgICAgLy8gc2hvdy9oaWRlIHBhc3MKKyAgICBmb3IgKCBpbmRleCBpbiBwcm9wcyApIHsK
KyAgICAgICAgdmFsdWUgPSBwcm9wc1sgaW5kZXggXTsKKyAgICAgICAgaWYgKCByZnh0eXBlcy5l
eGVjKCB2YWx1ZSApICkgeworICAgICAgICAgICAgZGVsZXRlIHByb3BzWyBpbmRleCBdOworICAg
ICAgICAgICAgdG9nZ2xlID0gdG9nZ2xlIHx8IHZhbHVlID09PSAidG9nZ2xlIjsKKyAgICAgICAg
ICAgIGlmICggdmFsdWUgPT09ICggaGlkZGVuID8gImhpZGUiIDogInNob3ciICkgKSB7CisgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBoYW5kbGVk
LnB1c2goIGluZGV4ICk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBsZW5ndGggPSBoYW5kbGVk
Lmxlbmd0aDsKKyAgICBpZiAoIGxlbmd0aCApIHsKKyAgICAgICAgZGF0YVNob3cgPSBqUXVlcnku
X2RhdGEoIGVsZW0sICJmeHNob3ciICkgfHwgalF1ZXJ5Ll9kYXRhKCBlbGVtLCAiZnhzaG93Iiwg
e30gKTsKKyAgICAgICAgaWYgKCAiaGlkZGVuIiBpbiBkYXRhU2hvdyApIHsKKyAgICAgICAgICAg
IGhpZGRlbiA9IGRhdGFTaG93LmhpZGRlbjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIHN0b3Jl
IHN0YXRlIGlmIGl0cyB0b2dnbGUgLSBlbmFibGVzIC5zdG9wKCkudG9nZ2xlKCkgdG8gInJldmVy
c2UiCisgICAgICAgIGlmICggdG9nZ2xlICkgeworICAgICAgICAgICAgZGF0YVNob3cuaGlkZGVu
ID0gIWhpZGRlbjsKKyAgICAgICAgfQorICAgICAgICBpZiAoIGhpZGRlbiApIHsKKyAgICAgICAg
ICAgIGpRdWVyeSggZWxlbSApLnNob3coKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IGFuaW0uZG9uZShmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBqUXVlcnkoIGVsZW0gKS5o
aWRlKCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgICBhbmltLmRvbmUoZnVu
Y3Rpb24oKSB7CisgICAgICAgICAgICB2YXIgcHJvcDsKKyAgICAgICAgICAgIGpRdWVyeS5yZW1v
dmVEYXRhKCBlbGVtLCAiZnhzaG93IiwgdHJ1ZSApOworICAgICAgICAgICAgZm9yICggcHJvcCBp
biBvcmlnICkgeworICAgICAgICAgICAgICAgIGpRdWVyeS5zdHlsZSggZWxlbSwgcHJvcCwgb3Jp
Z1sgcHJvcCBdICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgICBmb3IgKCBp
bmRleCA9IDAgOyBpbmRleCA8IGxlbmd0aCA7IGluZGV4KysgKSB7CisgICAgICAgICAgICBwcm9w
ID0gaGFuZGxlZFsgaW5kZXggXTsKKyAgICAgICAgICAgIHR3ZWVuID0gYW5pbS5jcmVhdGVUd2Vl
biggcHJvcCwgaGlkZGVuID8gZGF0YVNob3dbIHByb3AgXSA6IDAgKTsKKyAgICAgICAgICAgIG9y
aWdbIHByb3AgXSA9IGRhdGFTaG93WyBwcm9wIF0gfHwgalF1ZXJ5LnN0eWxlKCBlbGVtLCBwcm9w
ICk7CisKKyAgICAgICAgICAgIGlmICggISggcHJvcCBpbiBkYXRhU2hvdyApICkgeworICAgICAg
ICAgICAgICAgIGRhdGFTaG93WyBwcm9wIF0gPSB0d2Vlbi5zdGFydDsKKyAgICAgICAgICAgICAg
ICBpZiAoIGhpZGRlbiApIHsKKyAgICAgICAgICAgICAgICAgICAgdHdlZW4uZW5kID0gdHdlZW4u
c3RhcnQ7CisgICAgICAgICAgICAgICAgICAgIHR3ZWVuLnN0YXJ0ID0gcHJvcCA9PT0gIndpZHRo
IiB8fCBwcm9wID09PSAiaGVpZ2h0IiA/IDEgOiAwOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKworZnVuY3Rpb24gVHdlZW4oIGVsZW0sIG9w
dGlvbnMsIHByb3AsIGVuZCwgZWFzaW5nICkgeworICAgIHJldHVybiBuZXcgVHdlZW4ucHJvdG90
eXBlLmluaXQoIGVsZW0sIG9wdGlvbnMsIHByb3AsIGVuZCwgZWFzaW5nICk7Cit9CitqUXVlcnku
VHdlZW4gPSBUd2VlbjsKKworVHdlZW4ucHJvdG90eXBlID0geworICAgIGNvbnN0cnVjdG9yOiBU
d2VlbiwKKyAgICBpbml0OiBmdW5jdGlvbiggZWxlbSwgb3B0aW9ucywgcHJvcCwgZW5kLCBlYXNp
bmcsIHVuaXQgKSB7CisgICAgICAgIHRoaXMuZWxlbSA9IGVsZW07CisgICAgICAgIHRoaXMucHJv
cCA9IHByb3A7CisgICAgICAgIHRoaXMuZWFzaW5nID0gZWFzaW5nIHx8ICJzd2luZyI7CisgICAg
ICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7CisgICAgICAgIHRoaXMuc3RhcnQgPSB0aGlzLm5v
dyA9IHRoaXMuY3VyKCk7CisgICAgICAgIHRoaXMuZW5kID0gZW5kOworICAgICAgICB0aGlzLnVu
aXQgPSB1bml0IHx8ICggalF1ZXJ5LmNzc051bWJlclsgcHJvcCBdID8gIiIgOiAicHgiICk7Cisg
ICAgfSwKKyAgICBjdXI6IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgaG9va3MgPSBUd2Vlbi5w
cm9wSG9va3NbIHRoaXMucHJvcCBdOworCisgICAgICAgIHJldHVybiBob29rcyAmJiBob29rcy5n
ZXQgPworICAgICAgICAgICAgaG9va3MuZ2V0KCB0aGlzICkgOgorICAgICAgICAgICAgVHdlZW4u
cHJvcEhvb2tzLl9kZWZhdWx0LmdldCggdGhpcyApOworICAgIH0sCisgICAgcnVuOiBmdW5jdGlv
biggcGVyY2VudCApIHsKKyAgICAgICAgdmFyIGVhc2VkLAorICAgICAgICAgICAgaG9va3MgPSBU
d2Vlbi5wcm9wSG9va3NbIHRoaXMucHJvcCBdOworCisgICAgICAgIGlmICggdGhpcy5vcHRpb25z
LmR1cmF0aW9uICkgeworICAgICAgICAgICAgdGhpcy5wb3MgPSBlYXNlZCA9IGpRdWVyeS5lYXNp
bmdbIHRoaXMuZWFzaW5nIF0oCisgICAgICAgICAgICAgICAgcGVyY2VudCwgdGhpcy5vcHRpb25z
LmR1cmF0aW9uICogcGVyY2VudCwgMCwgMSwgdGhpcy5vcHRpb25zLmR1cmF0aW9uCisgICAgICAg
ICAgICApOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhpcy5wb3MgPSBlYXNlZCA9
IHBlcmNlbnQ7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5ub3cgPSAoIHRoaXMuZW5kIC0gdGhp
cy5zdGFydCApICogZWFzZWQgKyB0aGlzLnN0YXJ0OworCisgICAgICAgIGlmICggdGhpcy5vcHRp
b25zLnN0ZXAgKSB7CisgICAgICAgICAgICB0aGlzLm9wdGlvbnMuc3RlcC5jYWxsKCB0aGlzLmVs
ZW0sIHRoaXMubm93LCB0aGlzICk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIGhvb2tzICYm
IGhvb2tzLnNldCApIHsKKyAgICAgICAgICAgIGhvb2tzLnNldCggdGhpcyApOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgVHdlZW4ucHJvcEhvb2tzLl9kZWZhdWx0LnNldCggdGhpcyAp
OworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH0KK307CisKK1R3ZWVuLnBy
b3RvdHlwZS5pbml0LnByb3RvdHlwZSA9IFR3ZWVuLnByb3RvdHlwZTsKKworVHdlZW4ucHJvcEhv
b2tzID0geworICAgIF9kZWZhdWx0OiB7CisgICAgICAgIGdldDogZnVuY3Rpb24oIHR3ZWVuICkg
eworICAgICAgICAgICAgdmFyIHJlc3VsdDsKKworICAgICAgICAgICAgaWYgKCB0d2Vlbi5lbGVt
WyB0d2Vlbi5wcm9wIF0gIT0gbnVsbCAmJgorICAgICAgICAgICAgICAgICghdHdlZW4uZWxlbS5z
dHlsZSB8fCB0d2Vlbi5lbGVtLnN0eWxlWyB0d2Vlbi5wcm9wIF0gPT0gbnVsbCkgKSB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHR3ZWVuLmVsZW1bIHR3ZWVuLnByb3AgXTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgLy8gcGFzc2luZyBhbnkgdmFsdWUgYXMgYSA0dGggcGFyYW1ldGVy
IHRvIC5jc3Mgd2lsbCBhdXRvbWF0aWNhbGx5CisgICAgICAgICAgICAvLyBhdHRlbXB0IGEgcGFy
c2VGbG9hdCBhbmQgZmFsbGJhY2sgdG8gYSBzdHJpbmcgaWYgdGhlIHBhcnNlIGZhaWxzCisgICAg
ICAgICAgICAvLyBzbywgc2ltcGxlIHZhbHVlcyBzdWNoIGFzICIxMHB4IiBhcmUgcGFyc2VkIHRv
IEZsb2F0LgorICAgICAgICAgICAgLy8gY29tcGxleCB2YWx1ZXMgc3VjaCBhcyAicm90YXRlKDFy
YWQpIiBhcmUgcmV0dXJuZWQgYXMgaXMuCisgICAgICAgICAgICByZXN1bHQgPSBqUXVlcnkuY3Nz
KCB0d2Vlbi5lbGVtLCB0d2Vlbi5wcm9wLCBmYWxzZSwgIiIgKTsKKyAgICAgICAgICAgIC8vIEVt
cHR5IHN0cmluZ3MsIG51bGwsIHVuZGVmaW5lZCBhbmQgImF1dG8iIGFyZSBjb252ZXJ0ZWQgdG8g
MC4KKyAgICAgICAgICAgIHJldHVybiAhcmVzdWx0IHx8IHJlc3VsdCA9PT0gImF1dG8iID8gMCA6
IHJlc3VsdDsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiggdHdlZW4gKSB7Cisg
ICAgICAgICAgICAvLyB1c2Ugc3RlcCBob29rIGZvciBiYWNrIGNvbXBhdCAtIHVzZSBjc3NIb29r
IGlmIGl0cyB0aGVyZSAtIHVzZSAuc3R5bGUgaWYgaXRzCisgICAgICAgICAgICAvLyBhdmFpbGFi
bGUgYW5kIHVzZSBwbGFpbiBwcm9wZXJ0aWVzIHdoZXJlIGF2YWlsYWJsZQorICAgICAgICAgICAg
aWYgKCBqUXVlcnkuZnguc3RlcFsgdHdlZW4ucHJvcCBdICkgeworICAgICAgICAgICAgICAgIGpR
dWVyeS5meC5zdGVwWyB0d2Vlbi5wcm9wIF0oIHR3ZWVuICk7CisgICAgICAgICAgICB9IGVsc2Ug
aWYgKCB0d2Vlbi5lbGVtLnN0eWxlICYmICggdHdlZW4uZWxlbS5zdHlsZVsgalF1ZXJ5LmNzc1By
b3BzWyB0d2Vlbi5wcm9wIF0gXSAhPSBudWxsIHx8IGpRdWVyeS5jc3NIb29rc1sgdHdlZW4ucHJv
cCBdICkgKSB7CisgICAgICAgICAgICAgICAgalF1ZXJ5LnN0eWxlKCB0d2Vlbi5lbGVtLCB0d2Vl
bi5wcm9wLCB0d2Vlbi5ub3cgKyB0d2Vlbi51bml0ICk7CisgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgIHR3ZWVuLmVsZW1bIHR3ZWVuLnByb3AgXSA9IHR3ZWVuLm5vdzsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK307CisKKy8vIFJlbW92ZSBpbiAyLjAgLSB0
aGlzIHN1cHBvcnRzIElFOCdzIHBhbmljIGJhc2VkIGFwcHJvYWNoCisvLyB0byBzZXR0aW5nIHRo
aW5ncyBvbiBkaXNjb25uZWN0ZWQgbm9kZXMKKworVHdlZW4ucHJvcEhvb2tzLnNjcm9sbFRvcCA9
IFR3ZWVuLnByb3BIb29rcy5zY3JvbGxMZWZ0ID0geworICAgIHNldDogZnVuY3Rpb24oIHR3ZWVu
ICkgeworICAgICAgICBpZiAoIHR3ZWVuLmVsZW0ubm9kZVR5cGUgJiYgdHdlZW4uZWxlbS5wYXJl
bnROb2RlICkgeworICAgICAgICAgICAgdHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdID0gdHdlZW4u
bm93OworICAgICAgICB9CisgICAgfQorfTsKKworalF1ZXJ5LmVhY2goWyAidG9nZ2xlIiwgInNo
b3ciLCAiaGlkZSIgXSwgZnVuY3Rpb24oIGksIG5hbWUgKSB7CisgICAgdmFyIGNzc0ZuID0galF1
ZXJ5LmZuWyBuYW1lIF07CisgICAgalF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggc3BlZWQs
IGVhc2luZywgY2FsbGJhY2sgKSB7CisgICAgICAgIHJldHVybiBzcGVlZCA9PSBudWxsIHx8IHR5
cGVvZiBzcGVlZCA9PT0gImJvb2xlYW4iIHx8CisgICAgICAgICAgICAvLyBzcGVjaWFsIGNoZWNr
IGZvciAudG9nZ2xlKCBoYW5kbGVyLCBoYW5kbGVyLCAuLi4gKQorICAgICAgICAgICAgKCAhaSAm
JiBqUXVlcnkuaXNGdW5jdGlvbiggc3BlZWQgKSAmJiBqUXVlcnkuaXNGdW5jdGlvbiggZWFzaW5n
ICkgKSA/CisgICAgICAgICAgICBjc3NGbi5hcHBseSggdGhpcywgYXJndW1lbnRzICkgOgorICAg
ICAgICAgICAgdGhpcy5hbmltYXRlKCBnZW5GeCggbmFtZSwgdHJ1ZSApLCBzcGVlZCwgZWFzaW5n
LCBjYWxsYmFjayApOworICAgIH07Cit9KTsKKworalF1ZXJ5LmZuLmV4dGVuZCh7CisgICAgZmFk
ZVRvOiBmdW5jdGlvbiggc3BlZWQsIHRvLCBlYXNpbmcsIGNhbGxiYWNrICkgeworCisgICAgICAg
IC8vIHNob3cgYW55IGhpZGRlbiBlbGVtZW50cyBhZnRlciBzZXR0aW5nIG9wYWNpdHkgdG8gMAor
ICAgICAgICByZXR1cm4gdGhpcy5maWx0ZXIoIGlzSGlkZGVuICkuY3NzKCAib3BhY2l0eSIsIDAg
KS5zaG93KCkKKworICAgICAgICAgICAgLy8gYW5pbWF0ZSB0byB0aGUgdmFsdWUgc3BlY2lmaWVk
CisgICAgICAgICAgICAuZW5kKCkuYW5pbWF0ZSh7IG9wYWNpdHk6IHRvIH0sIHNwZWVkLCBlYXNp
bmcsIGNhbGxiYWNrICk7CisgICAgfSwKKyAgICBhbmltYXRlOiBmdW5jdGlvbiggcHJvcCwgc3Bl
ZWQsIGVhc2luZywgY2FsbGJhY2sgKSB7CisgICAgICAgIHZhciBlbXB0eSA9IGpRdWVyeS5pc0Vt
cHR5T2JqZWN0KCBwcm9wICksCisgICAgICAgICAgICBvcHRhbGwgPSBqUXVlcnkuc3BlZWQoIHNw
ZWVkLCBlYXNpbmcsIGNhbGxiYWNrICksCisgICAgICAgICAgICBkb0FuaW1hdGlvbiA9IGZ1bmN0
aW9uKCkgeworICAgICAgICAgICAgICAgIC8vIE9wZXJhdGUgb24gYSBjb3B5IG9mIHByb3Agc28g
cGVyLXByb3BlcnR5IGVhc2luZyB3b24ndCBiZSBsb3N0CisgICAgICAgICAgICAgICAgdmFyIGFu
aW0gPSBBbmltYXRpb24oIHRoaXMsIGpRdWVyeS5leHRlbmQoIHt9LCBwcm9wICksIG9wdGFsbCAp
OworCisgICAgICAgICAgICAgICAgLy8gRW1wdHkgYW5pbWF0aW9ucyByZXNvbHZlIGltbWVkaWF0
ZWx5CisgICAgICAgICAgICAgICAgaWYgKCBlbXB0eSApIHsKKyAgICAgICAgICAgICAgICAgICAg
YW5pbS5zdG9wKCB0cnVlICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfTsKKwor
ICAgICAgICByZXR1cm4gZW1wdHkgfHwgb3B0YWxsLnF1ZXVlID09PSBmYWxzZSA/CisgICAgICAg
ICAgICB0aGlzLmVhY2goIGRvQW5pbWF0aW9uICkgOgorICAgICAgICAgICAgdGhpcy5xdWV1ZSgg
b3B0YWxsLnF1ZXVlLCBkb0FuaW1hdGlvbiApOworICAgIH0sCisgICAgc3RvcDogZnVuY3Rpb24o
IHR5cGUsIGNsZWFyUXVldWUsIGdvdG9FbmQgKSB7CisgICAgICAgIHZhciBzdG9wUXVldWUgPSBm
dW5jdGlvbiggaG9va3MgKSB7CisgICAgICAgICAgICB2YXIgc3RvcCA9IGhvb2tzLnN0b3A7Cisg
ICAgICAgICAgICBkZWxldGUgaG9va3Muc3RvcDsKKyAgICAgICAgICAgIHN0b3AoIGdvdG9FbmQg
KTsKKyAgICAgICAgfTsKKworICAgICAgICBpZiAoIHR5cGVvZiB0eXBlICE9PSAic3RyaW5nIiAp
IHsKKyAgICAgICAgICAgIGdvdG9FbmQgPSBjbGVhclF1ZXVlOworICAgICAgICAgICAgY2xlYXJR
dWV1ZSA9IHR5cGU7CisgICAgICAgICAgICB0eXBlID0gdW5kZWZpbmVkOworICAgICAgICB9Cisg
ICAgICAgIGlmICggY2xlYXJRdWV1ZSAmJiB0eXBlICE9PSBmYWxzZSApIHsKKyAgICAgICAgICAg
IHRoaXMucXVldWUoIHR5cGUgfHwgImZ4IiwgW10gKTsKKyAgICAgICAgfQorCisgICAgICAgIHJl
dHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7CisgICAgICAgICAgICB2YXIgZGVxdWV1ZSA9IHRy
dWUsCisgICAgICAgICAgICAgICAgaW5kZXggPSB0eXBlICE9IG51bGwgJiYgdHlwZSArICJxdWV1
ZUhvb2tzIiwKKyAgICAgICAgICAgICAgICB0aW1lcnMgPSBqUXVlcnkudGltZXJzLAorICAgICAg
ICAgICAgICAgIGRhdGEgPSBqUXVlcnkuX2RhdGEoIHRoaXMgKTsKKworICAgICAgICAgICAgaWYg
KCBpbmRleCApIHsKKyAgICAgICAgICAgICAgICBpZiAoIGRhdGFbIGluZGV4IF0gJiYgZGF0YVsg
aW5kZXggXS5zdG9wICkgeworICAgICAgICAgICAgICAgICAgICBzdG9wUXVldWUoIGRhdGFbIGlu
ZGV4IF0gKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIGZvciAoIGluZGV4IGluIGRhdGEgKSB7CisgICAgICAgICAgICAgICAgICAgIGlm
ICggZGF0YVsgaW5kZXggXSAmJiBkYXRhWyBpbmRleCBdLnN0b3AgJiYgcnJ1bi50ZXN0KCBpbmRl
eCApICkgeworICAgICAgICAgICAgICAgICAgICAgICAgc3RvcFF1ZXVlKCBkYXRhWyBpbmRleCBd
ICk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGZvciAoIGluZGV4ID0gdGltZXJzLmxlbmd0aDsgaW5kZXgtLTsg
KSB7CisgICAgICAgICAgICAgICAgaWYgKCB0aW1lcnNbIGluZGV4IF0uZWxlbSA9PT0gdGhpcyAm
JiAodHlwZSA9PSBudWxsIHx8IHRpbWVyc1sgaW5kZXggXS5xdWV1ZSA9PT0gdHlwZSkgKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHRpbWVyc1sgaW5kZXggXS5hbmltLnN0b3AoIGdvdG9FbmQgKTsK
KyAgICAgICAgICAgICAgICAgICAgZGVxdWV1ZSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAg
ICB0aW1lcnMuc3BsaWNlKCBpbmRleCwgMSApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgLy8gc3RhcnQgdGhlIG5leHQgaW4gdGhlIHF1ZXVlIGlmIHRo
ZSBsYXN0IHN0ZXAgd2Fzbid0IGZvcmNlZAorICAgICAgICAgICAgLy8gdGltZXJzIGN1cnJlbnRs
eSB3aWxsIGNhbGwgdGhlaXIgY29tcGxldGUgY2FsbGJhY2tzLCB3aGljaCB3aWxsIGRlcXVldWUK
KyAgICAgICAgICAgIC8vIGJ1dCBvbmx5IGlmIHRoZXkgd2VyZSBnb3RvRW5kCisgICAgICAgICAg
ICBpZiAoIGRlcXVldWUgfHwgIWdvdG9FbmQgKSB7CisgICAgICAgICAgICAgICAgalF1ZXJ5LmRl
cXVldWUoIHRoaXMsIHR5cGUgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfQor
fSk7CisKKy8vIEdlbmVyYXRlIHBhcmFtZXRlcnMgdG8gY3JlYXRlIGEgc3RhbmRhcmQgYW5pbWF0
aW9uCitmdW5jdGlvbiBnZW5GeCggdHlwZSwgaW5jbHVkZVdpZHRoICkgeworICAgIHZhciB3aGlj
aCwKKyAgICAgICAgYXR0cnMgPSB7IGhlaWdodDogdHlwZSB9LAorICAgICAgICBpID0gMDsKKwor
ICAgIC8vIGlmIHdlIGluY2x1ZGUgd2lkdGgsIHN0ZXAgdmFsdWUgaXMgMSB0byBkbyBhbGwgY3Nz
RXhwYW5kIHZhbHVlcywKKyAgICAvLyBpZiB3ZSBkb24ndCBpbmNsdWRlIHdpZHRoLCBzdGVwIHZh
bHVlIGlzIDIgdG8gc2tpcCBvdmVyIExlZnQgYW5kIFJpZ2h0CisgICAgaW5jbHVkZVdpZHRoID0g
aW5jbHVkZVdpZHRoPyAxIDogMDsKKyAgICBmb3IoIDsgaSA8IDQgOyBpICs9IDIgLSBpbmNsdWRl
V2lkdGggKSB7CisgICAgICAgIHdoaWNoID0gY3NzRXhwYW5kWyBpIF07CisgICAgICAgIGF0dHJz
WyAibWFyZ2luIiArIHdoaWNoIF0gPSBhdHRyc1sgInBhZGRpbmciICsgd2hpY2ggXSA9IHR5cGU7
CisgICAgfQorCisgICAgaWYgKCBpbmNsdWRlV2lkdGggKSB7CisgICAgICAgIGF0dHJzLm9wYWNp
dHkgPSBhdHRycy53aWR0aCA9IHR5cGU7CisgICAgfQorCisgICAgcmV0dXJuIGF0dHJzOworfQor
CisvLyBHZW5lcmF0ZSBzaG9ydGN1dHMgZm9yIGN1c3RvbSBhbmltYXRpb25zCitqUXVlcnkuZWFj
aCh7CisgICAgc2xpZGVEb3duOiBnZW5GeCgic2hvdyIpLAorICAgIHNsaWRlVXA6IGdlbkZ4KCJo
aWRlIiksCisgICAgc2xpZGVUb2dnbGU6IGdlbkZ4KCJ0b2dnbGUiKSwKKyAgICBmYWRlSW46IHsg
b3BhY2l0eTogInNob3ciIH0sCisgICAgZmFkZU91dDogeyBvcGFjaXR5OiAiaGlkZSIgfSwKKyAg
ICBmYWRlVG9nZ2xlOiB7IG9wYWNpdHk6ICJ0b2dnbGUiIH0KK30sIGZ1bmN0aW9uKCBuYW1lLCBw
cm9wcyApIHsKKyAgICBqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBzcGVlZCwgZWFzaW5n
LCBjYWxsYmFjayApIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuYW5pbWF0ZSggcHJvcHMsIHNwZWVk
LCBlYXNpbmcsIGNhbGxiYWNrICk7CisgICAgfTsKK30pOworCitqUXVlcnkuc3BlZWQgPSBmdW5j
dGlvbiggc3BlZWQsIGVhc2luZywgZm4gKSB7CisgICAgdmFyIG9wdCA9IHNwZWVkICYmIHR5cGVv
ZiBzcGVlZCA9PT0gIm9iamVjdCIgPyBqUXVlcnkuZXh0ZW5kKCB7fSwgc3BlZWQgKSA6IHsKKyAg
ICAgICAgY29tcGxldGU6IGZuIHx8ICFmbiAmJiBlYXNpbmcgfHwKKyAgICAgICAgICAgIGpRdWVy
eS5pc0Z1bmN0aW9uKCBzcGVlZCApICYmIHNwZWVkLAorICAgICAgICBkdXJhdGlvbjogc3BlZWQs
CisgICAgICAgIGVhc2luZzogZm4gJiYgZWFzaW5nIHx8IGVhc2luZyAmJiAhalF1ZXJ5LmlzRnVu
Y3Rpb24oIGVhc2luZyApICYmIGVhc2luZworICAgIH07CisKKyAgICBvcHQuZHVyYXRpb24gPSBq
UXVlcnkuZngub2ZmID8gMCA6IHR5cGVvZiBvcHQuZHVyYXRpb24gPT09ICJudW1iZXIiID8gb3B0
LmR1cmF0aW9uIDoKKyAgICAgICAgb3B0LmR1cmF0aW9uIGluIGpRdWVyeS5meC5zcGVlZHMgPyBq
UXVlcnkuZnguc3BlZWRzWyBvcHQuZHVyYXRpb24gXSA6IGpRdWVyeS5meC5zcGVlZHMuX2RlZmF1
bHQ7CisKKyAgICAvLyBub3JtYWxpemUgb3B0LnF1ZXVlIC0gdHJ1ZS91bmRlZmluZWQvbnVsbCAt
PiAiZngiCisgICAgaWYgKCBvcHQucXVldWUgPT0gbnVsbCB8fCBvcHQucXVldWUgPT09IHRydWUg
KSB7CisgICAgICAgIG9wdC5xdWV1ZSA9ICJmeCI7CisgICAgfQorCisgICAgLy8gUXVldWVpbmcK
KyAgICBvcHQub2xkID0gb3B0LmNvbXBsZXRlOworCisgICAgb3B0LmNvbXBsZXRlID0gZnVuY3Rp
b24oKSB7CisgICAgICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIG9wdC5vbGQgKSApIHsKKyAg
ICAgICAgICAgIG9wdC5vbGQuY2FsbCggdGhpcyApOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KCBvcHQucXVldWUgKSB7CisgICAgICAgICAgICBqUXVlcnkuZGVxdWV1ZSggdGhpcywgb3B0LnF1
ZXVlICk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgcmV0dXJuIG9wdDsKK307CisKK2pRdWVy
eS5lYXNpbmcgPSB7CisgICAgbGluZWFyOiBmdW5jdGlvbiggcCApIHsKKyAgICAgICAgcmV0dXJu
IHA7CisgICAgfSwKKyAgICBzd2luZzogZnVuY3Rpb24oIHAgKSB7CisgICAgICAgIHJldHVybiAw
LjUgLSBNYXRoLmNvcyggcCpNYXRoLlBJICkgLyAyOworICAgIH0KK307CisKK2pRdWVyeS50aW1l
cnMgPSBbXTsKK2pRdWVyeS5meCA9IFR3ZWVuLnByb3RvdHlwZS5pbml0OworalF1ZXJ5LmZ4LnRp
Y2sgPSBmdW5jdGlvbigpIHsKKyAgICB2YXIgdGltZXIsCisgICAgICAgIHRpbWVycyA9IGpRdWVy
eS50aW1lcnMsCisgICAgICAgIGkgPSAwOworCisgICAgZnhOb3cgPSBqUXVlcnkubm93KCk7CisK
KyAgICBmb3IgKCA7IGkgPCB0aW1lcnMubGVuZ3RoOyBpKysgKSB7CisgICAgICAgIHRpbWVyID0g
dGltZXJzWyBpIF07CisgICAgICAgIC8vIENoZWNrcyB0aGUgdGltZXIgaGFzIG5vdCBhbHJlYWR5
IGJlZW4gcmVtb3ZlZAorICAgICAgICBpZiAoICF0aW1lcigpICYmIHRpbWVyc1sgaSBdID09PSB0
aW1lciApIHsKKyAgICAgICAgICAgIHRpbWVycy5zcGxpY2UoIGktLSwgMSApOworICAgICAgICB9
CisgICAgfQorCisgICAgaWYgKCAhdGltZXJzLmxlbmd0aCApIHsKKyAgICAgICAgalF1ZXJ5LmZ4
LnN0b3AoKTsKKyAgICB9CisgICAgZnhOb3cgPSB1bmRlZmluZWQ7Cit9OworCitqUXVlcnkuZngu
dGltZXIgPSBmdW5jdGlvbiggdGltZXIgKSB7CisgICAgaWYgKCB0aW1lcigpICYmIGpRdWVyeS50
aW1lcnMucHVzaCggdGltZXIgKSAmJiAhdGltZXJJZCApIHsKKyAgICAgICAgdGltZXJJZCA9IHNl
dEludGVydmFsKCBqUXVlcnkuZngudGljaywgalF1ZXJ5LmZ4LmludGVydmFsICk7CisgICAgfQor
fTsKKworalF1ZXJ5LmZ4LmludGVydmFsID0gMTM7CisKK2pRdWVyeS5meC5zdG9wID0gZnVuY3Rp
b24oKSB7CisgICAgY2xlYXJJbnRlcnZhbCggdGltZXJJZCApOworICAgIHRpbWVySWQgPSBudWxs
OworfTsKKworalF1ZXJ5LmZ4LnNwZWVkcyA9IHsKKyAgICBzbG93OiA2MDAsCisgICAgZmFzdDog
MjAwLAorICAgIC8vIERlZmF1bHQgc3BlZWQKKyAgICBfZGVmYXVsdDogNDAwCit9OworCisvLyBC
YWNrIENvbXBhdCA8MS44IGV4dGVuc2lvbiBwb2ludAoralF1ZXJ5LmZ4LnN0ZXAgPSB7fTsKKwor
aWYgKCBqUXVlcnkuZXhwciAmJiBqUXVlcnkuZXhwci5maWx0ZXJzICkgeworICAgIGpRdWVyeS5l
eHByLmZpbHRlcnMuYW5pbWF0ZWQgPSBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgcmV0dXJu
IGpRdWVyeS5ncmVwKGpRdWVyeS50aW1lcnMsIGZ1bmN0aW9uKCBmbiApIHsKKyAgICAgICAgICAg
IHJldHVybiBlbGVtID09PSBmbi5lbGVtOworICAgICAgICB9KS5sZW5ndGg7CisgICAgfTsKK30K
K3ZhciBycm9vdCA9IC9eKD86Ym9keXxodG1sKSQvaTsKKworalF1ZXJ5LmZuLm9mZnNldCA9IGZ1
bmN0aW9uKCBvcHRpb25zICkgeworICAgIGlmICggYXJndW1lbnRzLmxlbmd0aCApIHsKKyAgICAg
ICAgcmV0dXJuIG9wdGlvbnMgPT09IHVuZGVmaW5lZCA/CisgICAgICAgICAgICB0aGlzIDoKKyAg
ICAgICAgICAgIHRoaXMuZWFjaChmdW5jdGlvbiggaSApIHsKKyAgICAgICAgICAgICAgICBqUXVl
cnkub2Zmc2V0LnNldE9mZnNldCggdGhpcywgb3B0aW9ucywgaSApOworICAgICAgICAgICAgfSk7
CisgICAgfQorCisgICAgdmFyIGRvY0VsZW0sIGJvZHksIHdpbiwgY2xpZW50VG9wLCBjbGllbnRM
ZWZ0LCBzY3JvbGxUb3AsIHNjcm9sbExlZnQsCisgICAgICAgIGJveCA9IHsgdG9wOiAwLCBsZWZ0
OiAwIH0sCisgICAgICAgIGVsZW0gPSB0aGlzWyAwIF0sCisgICAgICAgIGRvYyA9IGVsZW0gJiYg
ZWxlbS5vd25lckRvY3VtZW50OworCisgICAgaWYgKCAhZG9jICkgeworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWYgKCAoYm9keSA9IGRvYy5ib2R5KSA9PT0gZWxlbSApIHsKKyAgICAg
ICAgcmV0dXJuIGpRdWVyeS5vZmZzZXQuYm9keU9mZnNldCggZWxlbSApOworICAgIH0KKworICAg
IGRvY0VsZW0gPSBkb2MuZG9jdW1lbnRFbGVtZW50OworCisgICAgLy8gTWFrZSBzdXJlIGl0J3Mg
bm90IGEgZGlzY29ubmVjdGVkIERPTSBub2RlCisgICAgaWYgKCAhalF1ZXJ5LmNvbnRhaW5zKCBk
b2NFbGVtLCBlbGVtICkgKSB7CisgICAgICAgIHJldHVybiBib3g7CisgICAgfQorCisgICAgLy8g
SWYgd2UgZG9uJ3QgaGF2ZSBnQkNSLCBqdXN0IHVzZSAwLDAgcmF0aGVyIHRoYW4gZXJyb3IKKyAg
ICAvLyBCbGFja0JlcnJ5IDUsIGlPUyAzIChvcmlnaW5hbCBpUGhvbmUpCisgICAgaWYgKCB0eXBl
b2YgZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QgIT09ICJ1bmRlZmluZWQiICkgeworICAgICAg
ICBib3ggPSBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOworICAgIH0KKyAgICB3aW4gPSBn
ZXRXaW5kb3coIGRvYyApOworICAgIGNsaWVudFRvcCAgPSBkb2NFbGVtLmNsaWVudFRvcCAgfHwg
Ym9keS5jbGllbnRUb3AgIHx8IDA7CisgICAgY2xpZW50TGVmdCA9IGRvY0VsZW0uY2xpZW50TGVm
dCB8fCBib2R5LmNsaWVudExlZnQgfHwgMDsKKyAgICBzY3JvbGxUb3AgID0gd2luLnBhZ2VZT2Zm
c2V0IHx8IGRvY0VsZW0uc2Nyb2xsVG9wOworICAgIHNjcm9sbExlZnQgPSB3aW4ucGFnZVhPZmZz
ZXQgfHwgZG9jRWxlbS5zY3JvbGxMZWZ0OworICAgIHJldHVybiB7CisgICAgICAgIHRvcDogYm94
LnRvcCAgKyBzY3JvbGxUb3AgIC0gY2xpZW50VG9wLAorICAgICAgICBsZWZ0OiBib3gubGVmdCAr
IHNjcm9sbExlZnQgLSBjbGllbnRMZWZ0CisgICAgfTsKK307CisKK2pRdWVyeS5vZmZzZXQgPSB7
CisKKyAgICBib2R5T2Zmc2V0OiBmdW5jdGlvbiggYm9keSApIHsKKyAgICAgICAgdmFyIHRvcCA9
IGJvZHkub2Zmc2V0VG9wLAorICAgICAgICAgICAgbGVmdCA9IGJvZHkub2Zmc2V0TGVmdDsKKwor
ICAgICAgICBpZiAoIGpRdWVyeS5zdXBwb3J0LmRvZXNOb3RJbmNsdWRlTWFyZ2luSW5Cb2R5T2Zm
c2V0ICkgeworICAgICAgICAgICAgdG9wICArPSBwYXJzZUZsb2F0KCBqUXVlcnkuY3NzKGJvZHks
ICJtYXJnaW5Ub3AiKSApIHx8IDA7CisgICAgICAgICAgICBsZWZ0ICs9IHBhcnNlRmxvYXQoIGpR
dWVyeS5jc3MoYm9keSwgIm1hcmdpbkxlZnQiKSApIHx8IDA7CisgICAgICAgIH0KKworICAgICAg
ICByZXR1cm4geyB0b3A6IHRvcCwgbGVmdDogbGVmdCB9OworICAgIH0sCisKKyAgICBzZXRPZmZz
ZXQ6IGZ1bmN0aW9uKCBlbGVtLCBvcHRpb25zLCBpICkgeworICAgICAgICB2YXIgcG9zaXRpb24g
PSBqUXVlcnkuY3NzKCBlbGVtLCAicG9zaXRpb24iICk7CisKKyAgICAgICAgLy8gc2V0IHBvc2l0
aW9uIGZpcnN0LCBpbi1jYXNlIHRvcC9sZWZ0IGFyZSBzZXQgZXZlbiBvbiBzdGF0aWMgZWxlbQor
ICAgICAgICBpZiAoIHBvc2l0aW9uID09PSAic3RhdGljIiApIHsKKyAgICAgICAgICAgIGVsZW0u
c3R5bGUucG9zaXRpb24gPSAicmVsYXRpdmUiOworICAgICAgICB9CisKKyAgICAgICAgdmFyIGN1
ckVsZW0gPSBqUXVlcnkoIGVsZW0gKSwKKyAgICAgICAgICAgIGN1ck9mZnNldCA9IGN1ckVsZW0u
b2Zmc2V0KCksCisgICAgICAgICAgICBjdXJDU1NUb3AgPSBqUXVlcnkuY3NzKCBlbGVtLCAidG9w
IiApLAorICAgICAgICAgICAgY3VyQ1NTTGVmdCA9IGpRdWVyeS5jc3MoIGVsZW0sICJsZWZ0IiAp
LAorICAgICAgICAgICAgY2FsY3VsYXRlUG9zaXRpb24gPSAoIHBvc2l0aW9uID09PSAiYWJzb2x1
dGUiIHx8IHBvc2l0aW9uID09PSAiZml4ZWQiICkgJiYgalF1ZXJ5LmluQXJyYXkoImF1dG8iLCBb
Y3VyQ1NTVG9wLCBjdXJDU1NMZWZ0XSkgPiAtMSwKKyAgICAgICAgICAgIHByb3BzID0ge30sIGN1
clBvc2l0aW9uID0ge30sIGN1clRvcCwgY3VyTGVmdDsKKworICAgICAgICAvLyBuZWVkIHRvIGJl
IGFibGUgdG8gY2FsY3VsYXRlIHBvc2l0aW9uIGlmIGVpdGhlciB0b3Agb3IgbGVmdCBpcyBhdXRv
IGFuZCBwb3NpdGlvbiBpcyBlaXRoZXIgYWJzb2x1dGUgb3IgZml4ZWQKKyAgICAgICAgaWYgKCBj
YWxjdWxhdGVQb3NpdGlvbiApIHsKKyAgICAgICAgICAgIGN1clBvc2l0aW9uID0gY3VyRWxlbS5w
b3NpdGlvbigpOworICAgICAgICAgICAgY3VyVG9wID0gY3VyUG9zaXRpb24udG9wOworICAgICAg
ICAgICAgY3VyTGVmdCA9IGN1clBvc2l0aW9uLmxlZnQ7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBjdXJUb3AgPSBwYXJzZUZsb2F0KCBjdXJDU1NUb3AgKSB8fCAwOworICAgICAgICAg
ICAgY3VyTGVmdCA9IHBhcnNlRmxvYXQoIGN1ckNTU0xlZnQgKSB8fCAwOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggb3B0aW9ucyApICkgeworICAgICAgICAg
ICAgb3B0aW9ucyA9IG9wdGlvbnMuY2FsbCggZWxlbSwgaSwgY3VyT2Zmc2V0ICk7CisgICAgICAg
IH0KKworICAgICAgICBpZiAoIG9wdGlvbnMudG9wICE9IG51bGwgKSB7CisgICAgICAgICAgICBw
cm9wcy50b3AgPSAoIG9wdGlvbnMudG9wIC0gY3VyT2Zmc2V0LnRvcCApICsgY3VyVG9wOworICAg
ICAgICB9CisgICAgICAgIGlmICggb3B0aW9ucy5sZWZ0ICE9IG51bGwgKSB7CisgICAgICAgICAg
ICBwcm9wcy5sZWZ0ID0gKCBvcHRpb25zLmxlZnQgLSBjdXJPZmZzZXQubGVmdCApICsgY3VyTGVm
dDsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggInVzaW5nIiBpbiBvcHRpb25zICkgeworICAg
ICAgICAgICAgb3B0aW9ucy51c2luZy5jYWxsKCBlbGVtLCBwcm9wcyApOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgY3VyRWxlbS5jc3MoIHByb3BzICk7CisgICAgICAgIH0KKyAgICB9
Cit9OworCisKK2pRdWVyeS5mbi5leHRlbmQoeworCisgICAgcG9zaXRpb246IGZ1bmN0aW9uKCkg
eworICAgICAgICBpZiAoICF0aGlzWzBdICkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgdmFyIGVsZW0gPSB0aGlzWzBdLAorCisgICAgICAgIC8vIEdldCAqcmVh
bCogb2Zmc2V0UGFyZW50CisgICAgICAgIG9mZnNldFBhcmVudCA9IHRoaXMub2Zmc2V0UGFyZW50
KCksCisKKyAgICAgICAgLy8gR2V0IGNvcnJlY3Qgb2Zmc2V0cworICAgICAgICBvZmZzZXQgICAg
ICAgPSB0aGlzLm9mZnNldCgpLAorICAgICAgICBwYXJlbnRPZmZzZXQgPSBycm9vdC50ZXN0KG9m
ZnNldFBhcmVudFswXS5ub2RlTmFtZSkgPyB7IHRvcDogMCwgbGVmdDogMCB9IDogb2Zmc2V0UGFy
ZW50Lm9mZnNldCgpOworCisgICAgICAgIC8vIFN1YnRyYWN0IGVsZW1lbnQgbWFyZ2lucworICAg
ICAgICAvLyBub3RlOiB3aGVuIGFuIGVsZW1lbnQgaGFzIG1hcmdpbjogYXV0byB0aGUgb2Zmc2V0
TGVmdCBhbmQgbWFyZ2luTGVmdAorICAgICAgICAvLyBhcmUgdGhlIHNhbWUgaW4gU2FmYXJpIGNh
dXNpbmcgb2Zmc2V0LmxlZnQgdG8gaW5jb3JyZWN0bHkgYmUgMAorICAgICAgICBvZmZzZXQudG9w
ICAtPSBwYXJzZUZsb2F0KCBqUXVlcnkuY3NzKGVsZW0sICJtYXJnaW5Ub3AiKSApIHx8IDA7Cisg
ICAgICAgIG9mZnNldC5sZWZ0IC09IHBhcnNlRmxvYXQoIGpRdWVyeS5jc3MoZWxlbSwgIm1hcmdp
bkxlZnQiKSApIHx8IDA7CisKKyAgICAgICAgLy8gQWRkIG9mZnNldFBhcmVudCBib3JkZXJzCisg
ICAgICAgIHBhcmVudE9mZnNldC50b3AgICs9IHBhcnNlRmxvYXQoIGpRdWVyeS5jc3Mob2Zmc2V0
UGFyZW50WzBdLCAiYm9yZGVyVG9wV2lkdGgiKSApIHx8IDA7CisgICAgICAgIHBhcmVudE9mZnNl
dC5sZWZ0ICs9IHBhcnNlRmxvYXQoIGpRdWVyeS5jc3Mob2Zmc2V0UGFyZW50WzBdLCAiYm9yZGVy
TGVmdFdpZHRoIikgKSB8fCAwOworCisgICAgICAgIC8vIFN1YnRyYWN0IHRoZSB0d28gb2Zmc2V0
cworICAgICAgICByZXR1cm4geworICAgICAgICAgICAgdG9wOiAgb2Zmc2V0LnRvcCAgLSBwYXJl
bnRPZmZzZXQudG9wLAorICAgICAgICAgICAgbGVmdDogb2Zmc2V0LmxlZnQgLSBwYXJlbnRPZmZz
ZXQubGVmdAorICAgICAgICB9OworICAgIH0sCisKKyAgICBvZmZzZXRQYXJlbnQ6IGZ1bmN0aW9u
KCkgeworICAgICAgICByZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICB2
YXIgb2Zmc2V0UGFyZW50ID0gdGhpcy5vZmZzZXRQYXJlbnQgfHwgZG9jdW1lbnQuYm9keTsKKyAg
ICAgICAgICAgIHdoaWxlICggb2Zmc2V0UGFyZW50ICYmICghcnJvb3QudGVzdChvZmZzZXRQYXJl
bnQubm9kZU5hbWUpICYmIGpRdWVyeS5jc3Mob2Zmc2V0UGFyZW50LCAicG9zaXRpb24iKSA9PT0g
InN0YXRpYyIpICkgeworICAgICAgICAgICAgICAgIG9mZnNldFBhcmVudCA9IG9mZnNldFBhcmVu
dC5vZmZzZXRQYXJlbnQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gb2Zmc2V0
UGFyZW50IHx8IGRvY3VtZW50LmJvZHk7CisgICAgICAgIH0pOworICAgIH0KK30pOworCisKKy8v
IENyZWF0ZSBzY3JvbGxMZWZ0IGFuZCBzY3JvbGxUb3AgbWV0aG9kcworalF1ZXJ5LmVhY2goIHtz
Y3JvbGxMZWZ0OiAicGFnZVhPZmZzZXQiLCBzY3JvbGxUb3A6ICJwYWdlWU9mZnNldCJ9LCBmdW5j
dGlvbiggbWV0aG9kLCBwcm9wICkgeworICAgIHZhciB0b3AgPSAvWS8udGVzdCggcHJvcCApOwor
CisgICAgalF1ZXJ5LmZuWyBtZXRob2QgXSA9IGZ1bmN0aW9uKCB2YWwgKSB7CisgICAgICAgIHJl
dHVybiBqUXVlcnkuYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgbWV0aG9kLCB2YWwgKSB7
CisgICAgICAgICAgICB2YXIgd2luID0gZ2V0V2luZG93KCBlbGVtICk7CisKKyAgICAgICAgICAg
IGlmICggdmFsID09PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHdpbiA/
IChwcm9wIGluIHdpbikgPyB3aW5bIHByb3AgXSA6CisgICAgICAgICAgICAgICAgICAgIHdpbi5k
b2N1bWVudC5kb2N1bWVudEVsZW1lbnRbIG1ldGhvZCBdIDoKKyAgICAgICAgICAgICAgICAgICAg
ZWxlbVsgbWV0aG9kIF07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICggd2luICkg
eworICAgICAgICAgICAgICAgIHdpbi5zY3JvbGxUbygKKyAgICAgICAgICAgICAgICAgICAgIXRv
cCA/IHZhbCA6IGpRdWVyeSggd2luICkuc2Nyb2xsTGVmdCgpLAorICAgICAgICAgICAgICAgICAg
ICAgdG9wID8gdmFsIDogalF1ZXJ5KCB3aW4gKS5zY3JvbGxUb3AoKQorICAgICAgICAgICAgICAg
ICk7CisKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZWxlbVsgbWV0aG9k
IF0gPSB2YWw7CisgICAgICAgICAgICB9CisgICAgICAgIH0sIG1ldGhvZCwgdmFsLCBhcmd1bWVu
dHMubGVuZ3RoLCBudWxsICk7CisgICAgfTsKK30pOworCitmdW5jdGlvbiBnZXRXaW5kb3coIGVs
ZW0gKSB7CisgICAgcmV0dXJuIGpRdWVyeS5pc1dpbmRvdyggZWxlbSApID8KKyAgICAgICAgZWxl
bSA6CisgICAgICAgIGVsZW0ubm9kZVR5cGUgPT09IDkgPworICAgICAgICAgICAgZWxlbS5kZWZh
dWx0VmlldyB8fCBlbGVtLnBhcmVudFdpbmRvdyA6CisgICAgICAgICAgICBmYWxzZTsKK30KKy8v
IENyZWF0ZSBpbm5lckhlaWdodCwgaW5uZXJXaWR0aCwgaGVpZ2h0LCB3aWR0aCwgb3V0ZXJIZWln
aHQgYW5kIG91dGVyV2lkdGggbWV0aG9kcworalF1ZXJ5LmVhY2goIHsgSGVpZ2h0OiAiaGVpZ2h0
IiwgV2lkdGg6ICJ3aWR0aCIgfSwgZnVuY3Rpb24oIG5hbWUsIHR5cGUgKSB7CisgICAgalF1ZXJ5
LmVhY2goIHsgcGFkZGluZzogImlubmVyIiArIG5hbWUsIGNvbnRlbnQ6IHR5cGUsICIiOiAib3V0
ZXIiICsgbmFtZSB9LCBmdW5jdGlvbiggZGVmYXVsdEV4dHJhLCBmdW5jTmFtZSApIHsKKyAgICAg
ICAgLy8gbWFyZ2luIGlzIG9ubHkgZm9yIG91dGVySGVpZ2h0LCBvdXRlcldpZHRoCisgICAgICAg
IGpRdWVyeS5mblsgZnVuY05hbWUgXSA9IGZ1bmN0aW9uKCBtYXJnaW4sIHZhbHVlICkgeworICAg
ICAgICAgICAgdmFyIGNoYWluYWJsZSA9IGFyZ3VtZW50cy5sZW5ndGggJiYgKCBkZWZhdWx0RXh0
cmEgfHwgdHlwZW9mIG1hcmdpbiAhPT0gImJvb2xlYW4iICksCisgICAgICAgICAgICAgICAgZXh0
cmEgPSBkZWZhdWx0RXh0cmEgfHwgKCBtYXJnaW4gPT09IHRydWUgfHwgdmFsdWUgPT09IHRydWUg
PyAibWFyZ2luIiA6ICJib3JkZXIiICk7CisKKyAgICAgICAgICAgIHJldHVybiBqUXVlcnkuYWNj
ZXNzKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgdHlwZSwgdmFsdWUgKSB7CisgICAgICAgICAgICAg
ICAgdmFyIGRvYzsKKworICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5LmlzV2luZG93KCBlbGVt
ICkgKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEFzIG9mIDUvOC8yMDEyIHRoaXMgd2lsbCB5
aWVsZCBpbmNvcnJlY3QgcmVzdWx0cyBmb3IgTW9iaWxlIFNhZmFyaSwgYnV0IHRoZXJlCisgICAg
ICAgICAgICAgICAgICAgIC8vIGlzbid0IGEgd2hvbGUgbG90IHdlIGNhbiBkby4gU2VlIHB1bGwg
cmVxdWVzdCBhdCB0aGlzIFVSTCBmb3IgZGlzY3Vzc2lvbjoKKyAgICAgICAgICAgICAgICAgICAg
Ly8gaHR0cHM6Ly9naXRodWIuY29tL2pxdWVyeS9qcXVlcnkvcHVsbC83NjQKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGVsZW0uZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50WyAiY2xpZW50IiAr
IG5hbWUgXTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBHZXQgZG9j
dW1lbnQgd2lkdGggb3IgaGVpZ2h0CisgICAgICAgICAgICAgICAgaWYgKCBlbGVtLm5vZGVUeXBl
ID09PSA5ICkgeworICAgICAgICAgICAgICAgICAgICBkb2MgPSBlbGVtLmRvY3VtZW50RWxlbWVu
dDsKKworICAgICAgICAgICAgICAgICAgICAvLyBFaXRoZXIgc2Nyb2xsW1dpZHRoL0hlaWdodF0g
b3Igb2Zmc2V0W1dpZHRoL0hlaWdodF0gb3IgY2xpZW50W1dpZHRoL0hlaWdodF0sIHdoaWNoZXZl
ciBpcyBncmVhdGVzdAorICAgICAgICAgICAgICAgICAgICAvLyB1bmZvcnR1bmF0ZWx5LCB0aGlz
IGNhdXNlcyBidWcgIzM4MzggaW4gSUU2Lzggb25seSwgYnV0IHRoZXJlIGlzIGN1cnJlbnRseSBu
byBnb29kLCBzbWFsbCB3YXkgdG8gZml4IGl0LgorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
TWF0aC5tYXgoCisgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLmJvZHlbICJzY3JvbGwiICsg
bmFtZSBdLCBkb2NbICJzY3JvbGwiICsgbmFtZSBdLAorICAgICAgICAgICAgICAgICAgICAgICAg
ZWxlbS5ib2R5WyAib2Zmc2V0IiArIG5hbWUgXSwgZG9jWyAib2Zmc2V0IiArIG5hbWUgXSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGRvY1sgImNsaWVudCIgKyBuYW1lIF0KKyAgICAgICAgICAg
ICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByZXR1cm4g
dmFsdWUgPT09IHVuZGVmaW5lZCA/CisgICAgICAgICAgICAgICAgICAgIC8vIEdldCB3aWR0aCBv
ciBoZWlnaHQgb24gdGhlIGVsZW1lbnQsIHJlcXVlc3RpbmcgYnV0IG5vdCBmb3JjaW5nIHBhcnNl
RmxvYXQKKyAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmNzcyggZWxlbSwgdHlwZSwgdmFsdWUs
IGV4dHJhICkgOgorCisgICAgICAgICAgICAgICAgICAgIC8vIFNldCB3aWR0aCBvciBoZWlnaHQg
b24gdGhlIGVsZW1lbnQKKyAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LnN0eWxlKCBlbGVtLCB0
eXBlLCB2YWx1ZSwgZXh0cmEgKTsKKyAgICAgICAgICAgIH0sIHR5cGUsIGNoYWluYWJsZSA/IG1h
cmdpbiA6IHVuZGVmaW5lZCwgY2hhaW5hYmxlLCBudWxsICk7CisgICAgICAgIH07CisgICAgfSk7
Cit9KTsKKy8vIEV4cG9zZSBqUXVlcnkgdG8gdGhlIGdsb2JhbCBvYmplY3QKK3dpbmRvdy5qUXVl
cnkgPSB3aW5kb3cuJCA9IGpRdWVyeTsKKworLy8gRXhwb3NlIGpRdWVyeSBhcyBhbiBBTUQgbW9k
dWxlLCBidXQgb25seSBmb3IgQU1EIGxvYWRlcnMgdGhhdAorLy8gdW5kZXJzdGFuZCB0aGUgaXNz
dWVzIHdpdGggbG9hZGluZyBtdWx0aXBsZSB2ZXJzaW9ucyBvZiBqUXVlcnkKKy8vIGluIGEgcGFn
ZSB0aGF0IGFsbCBtaWdodCBjYWxsIGRlZmluZSgpLiBUaGUgbG9hZGVyIHdpbGwgaW5kaWNhdGUK
Ky8vIHRoZXkgaGF2ZSBzcGVjaWFsIGFsbG93YW5jZXMgZm9yIG11bHRpcGxlIGpRdWVyeSB2ZXJz
aW9ucyBieQorLy8gc3BlY2lmeWluZyBkZWZpbmUuYW1kLmpRdWVyeSA9IHRydWUuIFJlZ2lzdGVy
IGFzIGEgbmFtZWQgbW9kdWxlLAorLy8gc2luY2UgalF1ZXJ5IGNhbiBiZSBjb25jYXRlbmF0ZWQg
d2l0aCBvdGhlciBmaWxlcyB0aGF0IG1heSB1c2UgZGVmaW5lLAorLy8gYnV0IG5vdCB1c2UgYSBw
cm9wZXIgY29uY2F0ZW5hdGlvbiBzY3JpcHQgdGhhdCB1bmRlcnN0YW5kcyBhbm9ueW1vdXMKKy8v
IEFNRCBtb2R1bGVzLiBBIG5hbWVkIEFNRCBpcyBzYWZlc3QgYW5kIG1vc3Qgcm9idXN0IHdheSB0
byByZWdpc3Rlci4KKy8vIExvd2VyY2FzZSBqcXVlcnkgaXMgdXNlZCBiZWNhdXNlIEFNRCBtb2R1
bGUgbmFtZXMgYXJlIGRlcml2ZWQgZnJvbQorLy8gZmlsZSBuYW1lcywgYW5kIGpRdWVyeSBpcyBu
b3JtYWxseSBkZWxpdmVyZWQgaW4gYSBsb3dlcmNhc2UgZmlsZSBuYW1lLgorLy8gRG8gdGhpcyBh
ZnRlciBjcmVhdGluZyB0aGUgZ2xvYmFsIHNvIHRoYXQgaWYgYW4gQU1EIG1vZHVsZSB3YW50cyB0
byBjYWxsCisvLyBub0NvbmZsaWN0IHRvIGhpZGUgdGhpcyB2ZXJzaW9uIG9mIGpRdWVyeSwgaXQg
d2lsbCB3b3JrLgoraWYgKCB0eXBlb2YgZGVmaW5lID09PSAiZnVuY3Rpb24iICYmIGRlZmluZS5h
bWQgJiYgZGVmaW5lLmFtZC5qUXVlcnkgKSB7CisgICAgZGVmaW5lKCAianF1ZXJ5IiwgW10sIGZ1
bmN0aW9uICgpIHsgcmV0dXJuIGpRdWVyeTsgfSApOworfQorCit9KSggd2luZG93ICk7CkluZGV4
OiBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2Nv
bXBvbmVudHMvanF1ZXJ5L2pxdWVyeS5taW4uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VU
ZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2pxdWVy
eS9qcXVlcnkubWluLmpzCShyZXZpc2lvbiAwKQorKysgUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2
ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2pxdWVyeS9qcXVlcnkubWlu
LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMiBAQAorLyohIGpRdWVyeSB2MS44LjMganF1
ZXJ5LmNvbSB8IGpxdWVyeS5vcmcvbGljZW5zZSAqLworKGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24g
XyhlKXt2YXIgdD1NW2VdPXt9O3JldHVybiB2LmVhY2goZS5zcGxpdCh5KSxmdW5jdGlvbihlLG4p
e3Rbbl09ITB9KSx0fWZ1bmN0aW9uIEgoZSxuLHIpe2lmKHI9PT10JiZlLm5vZGVUeXBlPT09MSl7
dmFyIGk9ImRhdGEtIituLnJlcGxhY2UoUCwiLSQxIikudG9Mb3dlckNhc2UoKTtyPWUuZ2V0QXR0
cmlidXRlKGkpO2lmKHR5cGVvZiByPT0ic3RyaW5nIil7dHJ5e3I9cj09PSJ0cnVlIj8hMDpyPT09
ImZhbHNlIj8hMTpyPT09Im51bGwiP251bGw6K3IrIiI9PT1yPytyOkQudGVzdChyKT92LnBhcnNl
SlNPTihyKTpyfWNhdGNoKHMpe312LmRhdGEoZSxuLHIpfWVsc2Ugcj10fXJldHVybiByfWZ1bmN0
aW9uIEIoZSl7dmFyIHQ7Zm9yKHQgaW4gZSl7aWYodD09PSJkYXRhIiYmdi5pc0VtcHR5T2JqZWN0
KGVbdF0pKWNvbnRpbnVlO2lmKHQhPT0idG9KU09OIilyZXR1cm4hMX1yZXR1cm4hMH1mdW5jdGlv
biBldCgpe3JldHVybiExfWZ1bmN0aW9uIHR0KCl7cmV0dXJuITB9ZnVuY3Rpb24gdXQoZSl7cmV0
dXJuIWV8fCFlLnBhcmVudE5vZGV8fGUucGFyZW50Tm9kZS5ub2RlVHlwZT09PTExfWZ1bmN0aW9u
IGF0KGUsdCl7ZG8gZT1lW3RdO3doaWxlKGUmJmUubm9kZVR5cGUhPT0xKTtyZXR1cm4gZX1mdW5j
dGlvbiBmdChlLHQsbil7dD10fHwwO2lmKHYuaXNGdW5jdGlvbih0KSlyZXR1cm4gdi5ncmVwKGUs
ZnVuY3Rpb24oZSxyKXt2YXIgaT0hIXQuY2FsbChlLHIsZSk7cmV0dXJuIGk9PT1ufSk7aWYodC5u
b2RlVHlwZSlyZXR1cm4gdi5ncmVwKGUsZnVuY3Rpb24oZSxyKXtyZXR1cm4gZT09PXQ9PT1ufSk7
aWYodHlwZW9mIHQ9PSJzdHJpbmciKXt2YXIgcj12LmdyZXAoZSxmdW5jdGlvbihlKXtyZXR1cm4g
ZS5ub2RlVHlwZT09PTF9KTtpZihpdC50ZXN0KHQpKXJldHVybiB2LmZpbHRlcih0LHIsIW4pO3Q9
di5maWx0ZXIodCxyKX1yZXR1cm4gdi5ncmVwKGUsZnVuY3Rpb24oZSxyKXtyZXR1cm4gdi5pbkFy
cmF5KGUsdCk+PTA9PT1ufSl9ZnVuY3Rpb24gbHQoZSl7dmFyIHQ9Y3Quc3BsaXQoInwiKSxuPWUu
Y3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO2lmKG4uY3JlYXRlRWxlbWVudCl3aGlsZSh0Lmxlbmd0
aCluLmNyZWF0ZUVsZW1lbnQodC5wb3AoKSk7cmV0dXJuIG59ZnVuY3Rpb24gTHQoZSx0KXtyZXR1
cm4gZS5nZXRFbGVtZW50c0J5VGFnTmFtZSh0KVswXXx8ZS5hcHBlbmRDaGlsZChlLm93bmVyRG9j
dW1lbnQuY3JlYXRlRWxlbWVudCh0KSl9ZnVuY3Rpb24gQXQoZSx0KXtpZih0Lm5vZGVUeXBlIT09
MXx8IXYuaGFzRGF0YShlKSlyZXR1cm47dmFyIG4scixpLHM9di5fZGF0YShlKSxvPXYuX2RhdGEo
dCxzKSx1PXMuZXZlbnRzO2lmKHUpe2RlbGV0ZSBvLmhhbmRsZSxvLmV2ZW50cz17fTtmb3IobiBp
biB1KWZvcihyPTAsaT11W25dLmxlbmd0aDtyPGk7cisrKXYuZXZlbnQuYWRkKHQsbix1W25dW3Jd
KX1vLmRhdGEmJihvLmRhdGE9di5leHRlbmQoe30sby5kYXRhKSl9ZnVuY3Rpb24gT3QoZSx0KXt2
YXIgbjtpZih0Lm5vZGVUeXBlIT09MSlyZXR1cm47dC5jbGVhckF0dHJpYnV0ZXMmJnQuY2xlYXJB
dHRyaWJ1dGVzKCksdC5tZXJnZUF0dHJpYnV0ZXMmJnQubWVyZ2VBdHRyaWJ1dGVzKGUpLG49dC5u
b2RlTmFtZS50b0xvd2VyQ2FzZSgpLG49PT0ib2JqZWN0Ij8odC5wYXJlbnROb2RlJiYodC5vdXRl
ckhUTUw9ZS5vdXRlckhUTUwpLHYuc3VwcG9ydC5odG1sNUNsb25lJiZlLmlubmVySFRNTCYmIXYu
dHJpbSh0LmlubmVySFRNTCkmJih0LmlubmVySFRNTD1lLmlubmVySFRNTCkpOm49PT0iaW5wdXQi
JiZFdC50ZXN0KGUudHlwZSk/KHQuZGVmYXVsdENoZWNrZWQ9dC5jaGVja2VkPWUuY2hlY2tlZCx0
LnZhbHVlIT09ZS52YWx1ZSYmKHQudmFsdWU9ZS52YWx1ZSkpOm49PT0ib3B0aW9uIj90LnNlbGVj
dGVkPWUuZGVmYXVsdFNlbGVjdGVkOm49PT0iaW5wdXQifHxuPT09InRleHRhcmVhIj90LmRlZmF1
bHRWYWx1ZT1lLmRlZmF1bHRWYWx1ZTpuPT09InNjcmlwdCImJnQudGV4dCE9PWUudGV4dCYmKHQu
dGV4dD1lLnRleHQpLHQucmVtb3ZlQXR0cmlidXRlKHYuZXhwYW5kbyl9ZnVuY3Rpb24gTXQoZSl7
cmV0dXJuIHR5cGVvZiBlLmdldEVsZW1lbnRzQnlUYWdOYW1lIT0idW5kZWZpbmVkIj9lLmdldEVs
ZW1lbnRzQnlUYWdOYW1lKCIqIik6dHlwZW9mIGUucXVlcnlTZWxlY3RvckFsbCE9InVuZGVmaW5l
ZCI/ZS5xdWVyeVNlbGVjdG9yQWxsKCIqIik6W119ZnVuY3Rpb24gX3QoZSl7RXQudGVzdChlLnR5
cGUpJiYoZS5kZWZhdWx0Q2hlY2tlZD1lLmNoZWNrZWQpfWZ1bmN0aW9uIFF0KGUsdCl7aWYodCBp
biBlKXJldHVybiB0O3ZhciBuPXQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrdC5zbGljZSgxKSxy
PXQsaT1KdC5sZW5ndGg7d2hpbGUoaS0tKXt0PUp0W2ldK247aWYodCBpbiBlKXJldHVybiB0fXJl
dHVybiByfWZ1bmN0aW9uIEd0KGUsdCl7cmV0dXJuIGU9dHx8ZSx2LmNzcyhlLCJkaXNwbGF5Iik9
PT0ibm9uZSJ8fCF2LmNvbnRhaW5zKGUub3duZXJEb2N1bWVudCxlKX1mdW5jdGlvbiBZdChlLHQp
e3ZhciBuLHIsaT1bXSxzPTAsbz1lLmxlbmd0aDtmb3IoO3M8bztzKyspe249ZVtzXTtpZighbi5z
dHlsZSljb250aW51ZTtpW3NdPXYuX2RhdGEobiwib2xkZGlzcGxheSIpLHQ/KCFpW3NdJiZuLnN0
eWxlLmRpc3BsYXk9PT0ibm9uZSImJihuLnN0eWxlLmRpc3BsYXk9IiIpLG4uc3R5bGUuZGlzcGxh
eT09PSIiJiZHdChuKSYmKGlbc109di5fZGF0YShuLCJvbGRkaXNwbGF5IixubihuLm5vZGVOYW1l
KSkpKToocj1EdChuLCJkaXNwbGF5IiksIWlbc10mJnIhPT0ibm9uZSImJnYuX2RhdGEobiwib2xk
ZGlzcGxheSIscikpfWZvcihzPTA7czxvO3MrKyl7bj1lW3NdO2lmKCFuLnN0eWxlKWNvbnRpbnVl
O2lmKCF0fHxuLnN0eWxlLmRpc3BsYXk9PT0ibm9uZSJ8fG4uc3R5bGUuZGlzcGxheT09PSIiKW4u
c3R5bGUuZGlzcGxheT10P2lbc118fCIiOiJub25lIn1yZXR1cm4gZX1mdW5jdGlvbiBadChlLHQs
bil7dmFyIHI9UnQuZXhlYyh0KTtyZXR1cm4gcj9NYXRoLm1heCgwLHJbMV0tKG58fDApKSsoclsy
XXx8InB4Iik6dH1mdW5jdGlvbiBlbihlLHQsbixyKXt2YXIgaT1uPT09KHI/ImJvcmRlciI6ImNv
bnRlbnQiKT80OnQ9PT0id2lkdGgiPzE6MCxzPTA7Zm9yKDtpPDQ7aSs9MiluPT09Im1hcmdpbiIm
JihzKz12LmNzcyhlLG4rJHRbaV0sITApKSxyPyhuPT09ImNvbnRlbnQiJiYocy09cGFyc2VGbG9h
dChEdChlLCJwYWRkaW5nIiskdFtpXSkpfHwwKSxuIT09Im1hcmdpbiImJihzLT1wYXJzZUZsb2F0
KER0KGUsImJvcmRlciIrJHRbaV0rIldpZHRoIikpfHwwKSk6KHMrPXBhcnNlRmxvYXQoRHQoZSwi
cGFkZGluZyIrJHRbaV0pKXx8MCxuIT09InBhZGRpbmciJiYocys9cGFyc2VGbG9hdChEdChlLCJi
b3JkZXIiKyR0W2ldKyJXaWR0aCIpKXx8MCkpO3JldHVybiBzfWZ1bmN0aW9uIHRuKGUsdCxuKXt2
YXIgcj10PT09IndpZHRoIj9lLm9mZnNldFdpZHRoOmUub2Zmc2V0SGVpZ2h0LGk9ITAscz12LnN1
cHBvcnQuYm94U2l6aW5nJiZ2LmNzcyhlLCJib3hTaXppbmciKT09PSJib3JkZXItYm94IjtpZihy
PD0wfHxyPT1udWxsKXtyPUR0KGUsdCk7aWYocjwwfHxyPT1udWxsKXI9ZS5zdHlsZVt0XTtpZihV
dC50ZXN0KHIpKXJldHVybiByO2k9cyYmKHYuc3VwcG9ydC5ib3hTaXppbmdSZWxpYWJsZXx8cj09
PWUuc3R5bGVbdF0pLHI9cGFyc2VGbG9hdChyKXx8MH1yZXR1cm4gcitlbihlLHQsbnx8KHM/ImJv
cmRlciI6ImNvbnRlbnQiKSxpKSsicHgifWZ1bmN0aW9uIG5uKGUpe2lmKFd0W2VdKXJldHVybiBX
dFtlXTt2YXIgdD12KCI8IitlKyI+IikuYXBwZW5kVG8oaS5ib2R5KSxuPXQuY3NzKCJkaXNwbGF5
Iik7dC5yZW1vdmUoKTtpZihuPT09Im5vbmUifHxuPT09IiIpe1B0PWkuYm9keS5hcHBlbmRDaGls
ZChQdHx8di5leHRlbmQoaS5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKSx7ZnJhbWVCb3JkZXI6MCx3
aWR0aDowLGhlaWdodDowfSkpO2lmKCFIdHx8IVB0LmNyZWF0ZUVsZW1lbnQpSHQ9KFB0LmNvbnRl
bnRXaW5kb3d8fFB0LmNvbnRlbnREb2N1bWVudCkuZG9jdW1lbnQsSHQud3JpdGUoIjwhZG9jdHlw
ZSBodG1sPjxodG1sPjxib2R5PiIpLEh0LmNsb3NlKCk7dD1IdC5ib2R5LmFwcGVuZENoaWxkKEh0
LmNyZWF0ZUVsZW1lbnQoZSkpLG49RHQodCwiZGlzcGxheSIpLGkuYm9keS5yZW1vdmVDaGlsZChQ
dCl9cmV0dXJuIFd0W2VdPW4sbn1mdW5jdGlvbiBmbihlLHQsbixyKXt2YXIgaTtpZih2LmlzQXJy
YXkodCkpdi5lYWNoKHQsZnVuY3Rpb24odCxpKXtufHxzbi50ZXN0KGUpP3IoZSxpKTpmbihlKyJb
IisodHlwZW9mIGk9PSJvYmplY3QiP3Q6IiIpKyJdIixpLG4scil9KTtlbHNlIGlmKCFuJiZ2LnR5
cGUodCk9PT0ib2JqZWN0Iilmb3IoaSBpbiB0KWZuKGUrIlsiK2krIl0iLHRbaV0sbixyKTtlbHNl
IHIoZSx0KX1mdW5jdGlvbiBDbihlKXtyZXR1cm4gZnVuY3Rpb24odCxuKXt0eXBlb2YgdCE9InN0
cmluZyImJihuPXQsdD0iKiIpO3ZhciByLGkscyxvPXQudG9Mb3dlckNhc2UoKS5zcGxpdCh5KSx1
PTAsYT1vLmxlbmd0aDtpZih2LmlzRnVuY3Rpb24obikpZm9yKDt1PGE7dSsrKXI9b1t1XSxzPS9e
XCsvLnRlc3QocikscyYmKHI9ci5zdWJzdHIoMSl8fCIqIiksaT1lW3JdPWVbcl18fFtdLGlbcz8i
dW5zaGlmdCI6InB1c2giXShuKX19ZnVuY3Rpb24ga24oZSxuLHIsaSxzLG8pe3M9c3x8bi5kYXRh
VHlwZXNbMF0sbz1vfHx7fSxvW3NdPSEwO3ZhciB1LGE9ZVtzXSxmPTAsbD1hP2EubGVuZ3RoOjAs
Yz1lPT09U247Zm9yKDtmPGwmJihjfHwhdSk7ZisrKXU9YVtmXShuLHIsaSksdHlwZW9mIHU9PSJz
dHJpbmciJiYoIWN8fG9bdV0/dT10OihuLmRhdGFUeXBlcy51bnNoaWZ0KHUpLHU9a24oZSxuLHIs
aSx1LG8pKSk7cmV0dXJuKGN8fCF1KSYmIW9bIioiXSYmKHU9a24oZSxuLHIsaSwiKiIsbykpLHV9
ZnVuY3Rpb24gTG4oZSxuKXt2YXIgcixpLHM9di5hamF4U2V0dGluZ3MuZmxhdE9wdGlvbnN8fHt9
O2ZvcihyIGluIG4pbltyXSE9PXQmJigoc1tyXT9lOml8fChpPXt9KSlbcl09bltyXSk7aSYmdi5l
eHRlbmQoITAsZSxpKX1mdW5jdGlvbiBBbihlLG4scil7dmFyIGkscyxvLHUsYT1lLmNvbnRlbnRz
LGY9ZS5kYXRhVHlwZXMsbD1lLnJlc3BvbnNlRmllbGRzO2ZvcihzIGluIGwpcyBpbiByJiYoblts
W3NdXT1yW3NdKTt3aGlsZShmWzBdPT09IioiKWYuc2hpZnQoKSxpPT09dCYmKGk9ZS5taW1lVHlw
ZXx8bi5nZXRSZXNwb25zZUhlYWRlcigiY29udGVudC10eXBlIikpO2lmKGkpZm9yKHMgaW4gYSlp
ZihhW3NdJiZhW3NdLnRlc3QoaSkpe2YudW5zaGlmdChzKTticmVha31pZihmWzBdaW4gcilvPWZb
MF07ZWxzZXtmb3IocyBpbiByKXtpZighZlswXXx8ZS5jb252ZXJ0ZXJzW3MrIiAiK2ZbMF1dKXtv
PXM7YnJlYWt9dXx8KHU9cyl9bz1vfHx1fWlmKG8pcmV0dXJuIG8hPT1mWzBdJiZmLnVuc2hpZnQo
bykscltvXX1mdW5jdGlvbiBPbihlLHQpe3ZhciBuLHIsaSxzLG89ZS5kYXRhVHlwZXMuc2xpY2Uo
KSx1PW9bMF0sYT17fSxmPTA7ZS5kYXRhRmlsdGVyJiYodD1lLmRhdGFGaWx0ZXIodCxlLmRhdGFU
eXBlKSk7aWYob1sxXSlmb3IobiBpbiBlLmNvbnZlcnRlcnMpYVtuLnRvTG93ZXJDYXNlKCldPWUu
Y29udmVydGVyc1tuXTtmb3IoO2k9b1srK2ZdOylpZihpIT09IioiKXtpZih1IT09IioiJiZ1IT09
aSl7bj1hW3UrIiAiK2ldfHxhWyIqICIraV07aWYoIW4pZm9yKHIgaW4gYSl7cz1yLnNwbGl0KCIg
Iik7aWYoc1sxXT09PWkpe249YVt1KyIgIitzWzBdXXx8YVsiKiAiK3NbMF1dO2lmKG4pe249PT0h
MD9uPWFbcl06YVtyXSE9PSEwJiYoaT1zWzBdLG8uc3BsaWNlKGYtLSwwLGkpKTticmVha319fWlm
KG4hPT0hMClpZihuJiZlWyJ0aHJvd3MiXSl0PW4odCk7ZWxzZSB0cnl7dD1uKHQpfWNhdGNoKGwp
e3JldHVybntzdGF0ZToicGFyc2VyZXJyb3IiLGVycm9yOm4/bDoiTm8gY29udmVyc2lvbiBmcm9t
ICIrdSsiIHRvICIraX19fXU9aX1yZXR1cm57c3RhdGU6InN1Y2Nlc3MiLGRhdGE6dH19ZnVuY3Rp
b24gRm4oKXt0cnl7cmV0dXJuIG5ldyBlLlhNTEh0dHBSZXF1ZXN0fWNhdGNoKHQpe319ZnVuY3Rp
b24gSW4oKXt0cnl7cmV0dXJuIG5ldyBlLkFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxIVFRQ
Iil9Y2F0Y2godCl7fX1mdW5jdGlvbiAkbigpe3JldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7
cW49dH0sMCkscW49di5ub3coKX1mdW5jdGlvbiBKbihlLHQpe3YuZWFjaCh0LGZ1bmN0aW9uKHQs
bil7dmFyIHI9KFZuW3RdfHxbXSkuY29uY2F0KFZuWyIqIl0pLGk9MCxzPXIubGVuZ3RoO2Zvcig7
aTxzO2krKylpZihyW2ldLmNhbGwoZSx0LG4pKXJldHVybn0pfWZ1bmN0aW9uIEtuKGUsdCxuKXt2
YXIgcixpPTAscz0wLG89WG4ubGVuZ3RoLHU9di5EZWZlcnJlZCgpLmFsd2F5cyhmdW5jdGlvbigp
e2RlbGV0ZSBhLmVsZW19KSxhPWZ1bmN0aW9uKCl7dmFyIHQ9cW58fCRuKCksbj1NYXRoLm1heCgw
LGYuc3RhcnRUaW1lK2YuZHVyYXRpb24tdCkscj1uL2YuZHVyYXRpb258fDAsaT0xLXIscz0wLG89
Zi50d2VlbnMubGVuZ3RoO2Zvcig7czxvO3MrKylmLnR3ZWVuc1tzXS5ydW4oaSk7cmV0dXJuIHUu
bm90aWZ5V2l0aChlLFtmLGksbl0pLGk8MSYmbz9uOih1LnJlc29sdmVXaXRoKGUsW2ZdKSwhMSl9
LGY9dS5wcm9taXNlKHtlbGVtOmUscHJvcHM6di5leHRlbmQoe30sdCksb3B0czp2LmV4dGVuZCgh
MCx7c3BlY2lhbEVhc2luZzp7fX0sbiksb3JpZ2luYWxQcm9wZXJ0aWVzOnQsb3JpZ2luYWxPcHRp
b25zOm4sc3RhcnRUaW1lOnFufHwkbigpLGR1cmF0aW9uOm4uZHVyYXRpb24sdHdlZW5zOltdLGNy
ZWF0ZVR3ZWVuOmZ1bmN0aW9uKHQsbixyKXt2YXIgaT12LlR3ZWVuKGUsZi5vcHRzLHQsbixmLm9w
dHMuc3BlY2lhbEVhc2luZ1t0XXx8Zi5vcHRzLmVhc2luZyk7cmV0dXJuIGYudHdlZW5zLnB1c2go
aSksaX0sc3RvcDpmdW5jdGlvbih0KXt2YXIgbj0wLHI9dD9mLnR3ZWVucy5sZW5ndGg6MDtmb3Io
O248cjtuKyspZi50d2VlbnNbbl0ucnVuKDEpO3JldHVybiB0P3UucmVzb2x2ZVdpdGgoZSxbZix0
XSk6dS5yZWplY3RXaXRoKGUsW2YsdF0pLHRoaXN9fSksbD1mLnByb3BzO1FuKGwsZi5vcHRzLnNw
ZWNpYWxFYXNpbmcpO2Zvcig7aTxvO2krKyl7cj1YbltpXS5jYWxsKGYsZSxsLGYub3B0cyk7aWYo
cilyZXR1cm4gcn1yZXR1cm4gSm4oZixsKSx2LmlzRnVuY3Rpb24oZi5vcHRzLnN0YXJ0KSYmZi5v
cHRzLnN0YXJ0LmNhbGwoZSxmKSx2LmZ4LnRpbWVyKHYuZXh0ZW5kKGEse2FuaW06ZixxdWV1ZTpm
Lm9wdHMucXVldWUsZWxlbTplfSkpLGYucHJvZ3Jlc3MoZi5vcHRzLnByb2dyZXNzKS5kb25lKGYu
b3B0cy5kb25lLGYub3B0cy5jb21wbGV0ZSkuZmFpbChmLm9wdHMuZmFpbCkuYWx3YXlzKGYub3B0
cy5hbHdheXMpfWZ1bmN0aW9uIFFuKGUsdCl7dmFyIG4scixpLHMsbztmb3IobiBpbiBlKXtyPXYu
Y2FtZWxDYXNlKG4pLGk9dFtyXSxzPWVbbl0sdi5pc0FycmF5KHMpJiYoaT1zWzFdLHM9ZVtuXT1z
WzBdKSxuIT09ciYmKGVbcl09cyxkZWxldGUgZVtuXSksbz12LmNzc0hvb2tzW3JdO2lmKG8mJiJl
eHBhbmQiaW4gbyl7cz1vLmV4cGFuZChzKSxkZWxldGUgZVtyXTtmb3IobiBpbiBzKW4gaW4gZXx8
KGVbbl09c1tuXSx0W25dPWkpfWVsc2UgdFtyXT1pfX1mdW5jdGlvbiBHbihlLHQsbil7dmFyIHIs
aSxzLG8sdSxhLGYsbCxjLGg9dGhpcyxwPWUuc3R5bGUsZD17fSxtPVtdLGc9ZS5ub2RlVHlwZSYm
R3QoZSk7bi5xdWV1ZXx8KGw9di5fcXVldWVIb29rcyhlLCJmeCIpLGwudW5xdWV1ZWQ9PW51bGwm
JihsLnVucXVldWVkPTAsYz1sLmVtcHR5LmZpcmUsbC5lbXB0eS5maXJlPWZ1bmN0aW9uKCl7bC51
bnF1ZXVlZHx8YygpfSksbC51bnF1ZXVlZCsrLGguYWx3YXlzKGZ1bmN0aW9uKCl7aC5hbHdheXMo
ZnVuY3Rpb24oKXtsLnVucXVldWVkLS0sdi5xdWV1ZShlLCJmeCIpLmxlbmd0aHx8bC5lbXB0eS5m
aXJlKCl9KX0pKSxlLm5vZGVUeXBlPT09MSYmKCJoZWlnaHQiaW4gdHx8IndpZHRoImluIHQpJiYo
bi5vdmVyZmxvdz1bcC5vdmVyZmxvdyxwLm92ZXJmbG93WCxwLm92ZXJmbG93WV0sdi5jc3MoZSwi
ZGlzcGxheSIpPT09ImlubGluZSImJnYuY3NzKGUsImZsb2F0Iik9PT0ibm9uZSImJighdi5zdXBw
b3J0LmlubGluZUJsb2NrTmVlZHNMYXlvdXR8fG5uKGUubm9kZU5hbWUpPT09ImlubGluZSI/cC5k
aXNwbGF5PSJpbmxpbmUtYmxvY2siOnAuem9vbT0xKSksbi5vdmVyZmxvdyYmKHAub3ZlcmZsb3c9
ImhpZGRlbiIsdi5zdXBwb3J0LnNocmlua1dyYXBCbG9ja3N8fGguZG9uZShmdW5jdGlvbigpe3Au
b3ZlcmZsb3c9bi5vdmVyZmxvd1swXSxwLm92ZXJmbG93WD1uLm92ZXJmbG93WzFdLHAub3ZlcmZs
b3dZPW4ub3ZlcmZsb3dbMl19KSk7Zm9yKHIgaW4gdCl7cz10W3JdO2lmKFVuLmV4ZWMocykpe2Rl
bGV0ZSB0W3JdLGE9YXx8cz09PSJ0b2dnbGUiO2lmKHM9PT0oZz8iaGlkZSI6InNob3ciKSljb250
aW51ZTttLnB1c2gocil9fW89bS5sZW5ndGg7aWYobyl7dT12Ll9kYXRhKGUsImZ4c2hvdyIpfHx2
Ll9kYXRhKGUsImZ4c2hvdyIse30pLCJoaWRkZW4iaW4gdSYmKGc9dS5oaWRkZW4pLGEmJih1Lmhp
ZGRlbj0hZyksZz92KGUpLnNob3coKTpoLmRvbmUoZnVuY3Rpb24oKXt2KGUpLmhpZGUoKX0pLGgu
ZG9uZShmdW5jdGlvbigpe3ZhciB0O3YucmVtb3ZlRGF0YShlLCJmeHNob3ciLCEwKTtmb3IodCBp
biBkKXYuc3R5bGUoZSx0LGRbdF0pfSk7Zm9yKHI9MDtyPG87cisrKWk9bVtyXSxmPWguY3JlYXRl
VHdlZW4oaSxnP3VbaV06MCksZFtpXT11W2ldfHx2LnN0eWxlKGUsaSksaSBpbiB1fHwodVtpXT1m
LnN0YXJ0LGcmJihmLmVuZD1mLnN0YXJ0LGYuc3RhcnQ9aT09PSJ3aWR0aCJ8fGk9PT0iaGVpZ2h0
Ij8xOjApKX19ZnVuY3Rpb24gWW4oZSx0LG4scixpKXtyZXR1cm4gbmV3IFluLnByb3RvdHlwZS5p
bml0KGUsdCxuLHIsaSl9ZnVuY3Rpb24gWm4oZSx0KXt2YXIgbixyPXtoZWlnaHQ6ZX0saT0wO3Q9
dD8xOjA7Zm9yKDtpPDQ7aSs9Mi10KW49JHRbaV0sclsibWFyZ2luIituXT1yWyJwYWRkaW5nIitu
XT1lO3JldHVybiB0JiYoci5vcGFjaXR5PXIud2lkdGg9ZSkscn1mdW5jdGlvbiB0cihlKXtyZXR1
cm4gdi5pc1dpbmRvdyhlKT9lOmUubm9kZVR5cGU9PT05P2UuZGVmYXVsdFZpZXd8fGUucGFyZW50
V2luZG93OiExfXZhciBuLHIsaT1lLmRvY3VtZW50LHM9ZS5sb2NhdGlvbixvPWUubmF2aWdhdG9y
LHU9ZS5qUXVlcnksYT1lLiQsZj1BcnJheS5wcm90b3R5cGUucHVzaCxsPUFycmF5LnByb3RvdHlw
ZS5zbGljZSxjPUFycmF5LnByb3RvdHlwZS5pbmRleE9mLGg9T2JqZWN0LnByb3RvdHlwZS50b1N0
cmluZyxwPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksZD1TdHJpbmcucHJvdG90eXBl
LnRyaW0sdj1mdW5jdGlvbihlLHQpe3JldHVybiBuZXcgdi5mbi5pbml0KGUsdCxuKX0sbT0vW1wt
K10/KD86XGQqXC58KVxkKyg/OltlRV1bXC0rXT9cZCt8KS8uc291cmNlLGc9L1xTLyx5PS9ccysv
LGI9L15bXHNcdUZFRkZceEEwXSt8W1xzXHVGRUZGXHhBMF0rJC9nLHc9L14oPzpbXiM8XSooPFtc
d1xXXSs+KVtePl0qJHwjKFtcd1wtXSopJCkvLEU9L148KFx3KylccypcLz8+KD86PFwvXDE+fCkk
LyxTPS9eW1xdLDp7fVxzXSokLyx4PS8oPzpefDp8LCkoPzpccypcWykrL2csVD0vXFwoPzpbIlxc
XC9iZm5ydF18dVtcZGEtZkEtRl17NH0pL2csTj0vIlteIlxcXHJcbl0qInx0cnVlfGZhbHNlfG51
bGx8LT8oPzpcZFxkKlwufClcZCsoPzpbZUVdW1wtK10/XGQrfCkvZyxDPS9eLW1zLS8saz0vLShb
XGRhLXpdKS9naSxMPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQrIiIpLnRvVXBwZXJDYXNlKCl9LEE9
ZnVuY3Rpb24oKXtpLmFkZEV2ZW50TGlzdGVuZXI/KGkucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9N
Q29udGVudExvYWRlZCIsQSwhMSksdi5yZWFkeSgpKTppLnJlYWR5U3RhdGU9PT0iY29tcGxldGUi
JiYoaS5kZXRhY2hFdmVudCgib25yZWFkeXN0YXRlY2hhbmdlIixBKSx2LnJlYWR5KCkpfSxPPXt9
O3YuZm49di5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnYsaW5pdDpmdW5jdGlvbihlLG4scil7dmFy
IHMsbyx1LGE7aWYoIWUpcmV0dXJuIHRoaXM7aWYoZS5ub2RlVHlwZSlyZXR1cm4gdGhpcy5jb250
ZXh0PXRoaXNbMF09ZSx0aGlzLmxlbmd0aD0xLHRoaXM7aWYodHlwZW9mIGU9PSJzdHJpbmciKXtl
LmNoYXJBdCgwKT09PSI8IiYmZS5jaGFyQXQoZS5sZW5ndGgtMSk9PT0iPiImJmUubGVuZ3RoPj0z
P3M9W251bGwsZSxudWxsXTpzPXcuZXhlYyhlKTtpZihzJiYoc1sxXXx8IW4pKXtpZihzWzFdKXJl
dHVybiBuPW4gaW5zdGFuY2VvZiB2P25bMF06bixhPW4mJm4ubm9kZVR5cGU/bi5vd25lckRvY3Vt
ZW50fHxuOmksZT12LnBhcnNlSFRNTChzWzFdLGEsITApLEUudGVzdChzWzFdKSYmdi5pc1BsYWlu
T2JqZWN0KG4pJiZ0aGlzLmF0dHIuY2FsbChlLG4sITApLHYubWVyZ2UodGhpcyxlKTtvPWkuZ2V0
RWxlbWVudEJ5SWQoc1syXSk7aWYobyYmby5wYXJlbnROb2RlKXtpZihvLmlkIT09c1syXSlyZXR1
cm4gci5maW5kKGUpO3RoaXMubGVuZ3RoPTEsdGhpc1swXT1vfXJldHVybiB0aGlzLmNvbnRleHQ9
aSx0aGlzLnNlbGVjdG9yPWUsdGhpc31yZXR1cm4hbnx8bi5qcXVlcnk/KG58fHIpLmZpbmQoZSk6
dGhpcy5jb25zdHJ1Y3RvcihuKS5maW5kKGUpfXJldHVybiB2LmlzRnVuY3Rpb24oZSk/ci5yZWFk
eShlKTooZS5zZWxlY3RvciE9PXQmJih0aGlzLnNlbGVjdG9yPWUuc2VsZWN0b3IsdGhpcy5jb250
ZXh0PWUuY29udGV4dCksdi5tYWtlQXJyYXkoZSx0aGlzKSl9LHNlbGVjdG9yOiIiLGpxdWVyeToi
MS44LjMiLGxlbmd0aDowLHNpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZW5ndGh9LHRvQXJy
YXk6ZnVuY3Rpb24oKXtyZXR1cm4gbC5jYWxsKHRoaXMpfSxnZXQ6ZnVuY3Rpb24oZSl7cmV0dXJu
IGU9PW51bGw/dGhpcy50b0FycmF5KCk6ZTwwP3RoaXNbdGhpcy5sZW5ndGgrZV06dGhpc1tlXX0s
cHVzaFN0YWNrOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj12Lm1lcmdlKHRoaXMuY29uc3RydWN0b3Io
KSxlKTtyZXR1cm4gci5wcmV2T2JqZWN0PXRoaXMsci5jb250ZXh0PXRoaXMuY29udGV4dCx0PT09
ImZpbmQiP3Iuc2VsZWN0b3I9dGhpcy5zZWxlY3RvcisodGhpcy5zZWxlY3Rvcj8iICI6IiIpK246
dCYmKHIuc2VsZWN0b3I9dGhpcy5zZWxlY3RvcisiLiIrdCsiKCIrbisiKSIpLHJ9LGVhY2g6ZnVu
Y3Rpb24oZSx0KXtyZXR1cm4gdi5lYWNoKHRoaXMsZSx0KX0scmVhZHk6ZnVuY3Rpb24oZSl7cmV0
dXJuIHYucmVhZHkucHJvbWlzZSgpLmRvbmUoZSksdGhpc30sZXE6ZnVuY3Rpb24oZSl7cmV0dXJu
IGU9K2UsZT09PS0xP3RoaXMuc2xpY2UoZSk6dGhpcy5zbGljZShlLGUrMSl9LGZpcnN0OmZ1bmN0
aW9uKCl7cmV0dXJuIHRoaXMuZXEoMCl9LGxhc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lcSgt
MSl9LHNsaWNlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGwuYXBwbHkodGhpcyxh
cmd1bWVudHMpLCJzbGljZSIsbC5jYWxsKGFyZ3VtZW50cykuam9pbigiLCIpKX0sbWFwOmZ1bmN0
aW9uKGUpe3JldHVybiB0aGlzLnB1c2hTdGFjayh2Lm1hcCh0aGlzLGZ1bmN0aW9uKHQsbil7cmV0
dXJuIGUuY2FsbCh0LG4sdCl9KSl9LGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnByZXZPYmpl
Y3R8fHRoaXMuY29uc3RydWN0b3IobnVsbCl9LHB1c2g6Zixzb3J0OltdLnNvcnQsc3BsaWNlOltd
LnNwbGljZX0sdi5mbi5pbml0LnByb3RvdHlwZT12LmZuLHYuZXh0ZW5kPXYuZm4uZXh0ZW5kPWZ1
bmN0aW9uKCl7dmFyIGUsbixyLGkscyxvLHU9YXJndW1lbnRzWzBdfHx7fSxhPTEsZj1hcmd1bWVu
dHMubGVuZ3RoLGw9ITE7dHlwZW9mIHU9PSJib29sZWFuIiYmKGw9dSx1PWFyZ3VtZW50c1sxXXx8
e30sYT0yKSx0eXBlb2YgdSE9Im9iamVjdCImJiF2LmlzRnVuY3Rpb24odSkmJih1PXt9KSxmPT09
YSYmKHU9dGhpcywtLWEpO2Zvcig7YTxmO2ErKylpZigoZT1hcmd1bWVudHNbYV0pIT1udWxsKWZv
cihuIGluIGUpe3I9dVtuXSxpPWVbbl07aWYodT09PWkpY29udGludWU7bCYmaSYmKHYuaXNQbGFp
bk9iamVjdChpKXx8KHM9di5pc0FycmF5KGkpKSk/KHM/KHM9ITEsbz1yJiZ2LmlzQXJyYXkocik/
cjpbXSk6bz1yJiZ2LmlzUGxhaW5PYmplY3Qocik/cjp7fSx1W25dPXYuZXh0ZW5kKGwsbyxpKSk6
aSE9PXQmJih1W25dPWkpfXJldHVybiB1fSx2LmV4dGVuZCh7bm9Db25mbGljdDpmdW5jdGlvbih0
KXtyZXR1cm4gZS4kPT09diYmKGUuJD1hKSx0JiZlLmpRdWVyeT09PXYmJihlLmpRdWVyeT11KSx2
fSxpc1JlYWR5OiExLHJlYWR5V2FpdDoxLGhvbGRSZWFkeTpmdW5jdGlvbihlKXtlP3YucmVhZHlX
YWl0Kys6di5yZWFkeSghMCl9LHJlYWR5OmZ1bmN0aW9uKGUpe2lmKGU9PT0hMD8tLXYucmVhZHlX
YWl0OnYuaXNSZWFkeSlyZXR1cm47aWYoIWkuYm9keSlyZXR1cm4gc2V0VGltZW91dCh2LnJlYWR5
LDEpO3YuaXNSZWFkeT0hMDtpZihlIT09ITAmJi0tdi5yZWFkeVdhaXQ+MClyZXR1cm47ci5yZXNv
bHZlV2l0aChpLFt2XSksdi5mbi50cmlnZ2VyJiZ2KGkpLnRyaWdnZXIoInJlYWR5Iikub2ZmKCJy
ZWFkeSIpfSxpc0Z1bmN0aW9uOmZ1bmN0aW9uKGUpe3JldHVybiB2LnR5cGUoZSk9PT0iZnVuY3Rp
b24ifSxpc0FycmF5OkFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKGUpe3JldHVybiB2LnR5cGUoZSk9
PT0iYXJyYXkifSxpc1dpbmRvdzpmdW5jdGlvbihlKXtyZXR1cm4gZSE9bnVsbCYmZT09ZS53aW5k
b3d9LGlzTnVtZXJpYzpmdW5jdGlvbihlKXtyZXR1cm4haXNOYU4ocGFyc2VGbG9hdChlKSkmJmlz
RmluaXRlKGUpfSx0eXBlOmZ1bmN0aW9uKGUpe3JldHVybiBlPT1udWxsP1N0cmluZyhlKTpPW2gu
Y2FsbChlKV18fCJvYmplY3QifSxpc1BsYWluT2JqZWN0OmZ1bmN0aW9uKGUpe2lmKCFlfHx2LnR5
cGUoZSkhPT0ib2JqZWN0Inx8ZS5ub2RlVHlwZXx8di5pc1dpbmRvdyhlKSlyZXR1cm4hMTt0cnl7
aWYoZS5jb25zdHJ1Y3RvciYmIXAuY2FsbChlLCJjb25zdHJ1Y3RvciIpJiYhcC5jYWxsKGUuY29u
c3RydWN0b3IucHJvdG90eXBlLCJpc1Byb3RvdHlwZU9mIikpcmV0dXJuITF9Y2F0Y2gobil7cmV0
dXJuITF9dmFyIHI7Zm9yKHIgaW4gZSk7cmV0dXJuIHI9PT10fHxwLmNhbGwoZSxyKX0saXNFbXB0
eU9iamVjdDpmdW5jdGlvbihlKXt2YXIgdDtmb3IodCBpbiBlKXJldHVybiExO3JldHVybiEwfSxl
cnJvcjpmdW5jdGlvbihlKXt0aHJvdyBuZXcgRXJyb3IoZSl9LHBhcnNlSFRNTDpmdW5jdGlvbihl
LHQsbil7dmFyIHI7cmV0dXJuIWV8fHR5cGVvZiBlIT0ic3RyaW5nIj9udWxsOih0eXBlb2YgdD09
ImJvb2xlYW4iJiYobj10LHQ9MCksdD10fHxpLChyPUUuZXhlYyhlKSk/W3QuY3JlYXRlRWxlbWVu
dChyWzFdKV06KHI9di5idWlsZEZyYWdtZW50KFtlXSx0LG4/bnVsbDpbXSksdi5tZXJnZShbXSwo
ci5jYWNoZWFibGU/di5jbG9uZShyLmZyYWdtZW50KTpyLmZyYWdtZW50KS5jaGlsZE5vZGVzKSkp
fSxwYXJzZUpTT046ZnVuY3Rpb24odCl7aWYoIXR8fHR5cGVvZiB0IT0ic3RyaW5nIilyZXR1cm4g
bnVsbDt0PXYudHJpbSh0KTtpZihlLkpTT04mJmUuSlNPTi5wYXJzZSlyZXR1cm4gZS5KU09OLnBh
cnNlKHQpO2lmKFMudGVzdCh0LnJlcGxhY2UoVCwiQCIpLnJlcGxhY2UoTiwiXSIpLnJlcGxhY2Uo
eCwiIikpKXJldHVybihuZXcgRnVuY3Rpb24oInJldHVybiAiK3QpKSgpO3YuZXJyb3IoIkludmFs
aWQgSlNPTjogIit0KX0scGFyc2VYTUw6ZnVuY3Rpb24obil7dmFyIHIsaTtpZighbnx8dHlwZW9m
IG4hPSJzdHJpbmciKXJldHVybiBudWxsO3RyeXtlLkRPTVBhcnNlcj8oaT1uZXcgRE9NUGFyc2Vy
LHI9aS5wYXJzZUZyb21TdHJpbmcobiwidGV4dC94bWwiKSk6KHI9bmV3IEFjdGl2ZVhPYmplY3Qo
Ik1pY3Jvc29mdC5YTUxET00iKSxyLmFzeW5jPSJmYWxzZSIsci5sb2FkWE1MKG4pKX1jYXRjaChz
KXtyPXR9cmV0dXJuKCFyfHwhci5kb2N1bWVudEVsZW1lbnR8fHIuZ2V0RWxlbWVudHNCeVRhZ05h
bWUoInBhcnNlcmVycm9yIikubGVuZ3RoKSYmdi5lcnJvcigiSW52YWxpZCBYTUw6ICIrbikscn0s
bm9vcDpmdW5jdGlvbigpe30sZ2xvYmFsRXZhbDpmdW5jdGlvbih0KXt0JiZnLnRlc3QodCkmJihl
LmV4ZWNTY3JpcHR8fGZ1bmN0aW9uKHQpe2UuZXZhbC5jYWxsKGUsdCl9KSh0KX0sY2FtZWxDYXNl
OmZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoQywibXMtIikucmVwbGFjZShrLEwpfSxub2Rl
TmFtZTpmdW5jdGlvbihlLHQpe3JldHVybiBlLm5vZGVOYW1lJiZlLm5vZGVOYW1lLnRvTG93ZXJD
YXNlKCk9PT10LnRvTG93ZXJDYXNlKCl9LGVhY2g6ZnVuY3Rpb24oZSxuLHIpe3ZhciBpLHM9MCxv
PWUubGVuZ3RoLHU9bz09PXR8fHYuaXNGdW5jdGlvbihlKTtpZihyKXtpZih1KXtmb3IoaSBpbiBl
KWlmKG4uYXBwbHkoZVtpXSxyKT09PSExKWJyZWFrfWVsc2UgZm9yKDtzPG87KWlmKG4uYXBwbHko
ZVtzKytdLHIpPT09ITEpYnJlYWt9ZWxzZSBpZih1KXtmb3IoaSBpbiBlKWlmKG4uY2FsbChlW2ld
LGksZVtpXSk9PT0hMSlicmVha31lbHNlIGZvcig7czxvOylpZihuLmNhbGwoZVtzXSxzLGVbcysr
XSk9PT0hMSlicmVhaztyZXR1cm4gZX0sdHJpbTpkJiYhZC5jYWxsKCJcdWZlZmZcdTAwYTAiKT9m
dW5jdGlvbihlKXtyZXR1cm4gZT09bnVsbD8iIjpkLmNhbGwoZSl9OmZ1bmN0aW9uKGUpe3JldHVy
biBlPT1udWxsPyIiOihlKyIiKS5yZXBsYWNlKGIsIiIpfSxtYWtlQXJyYXk6ZnVuY3Rpb24oZSx0
KXt2YXIgbixyPXR8fFtdO3JldHVybiBlIT1udWxsJiYobj12LnR5cGUoZSksZS5sZW5ndGg9PW51
bGx8fG49PT0ic3RyaW5nInx8bj09PSJmdW5jdGlvbiJ8fG49PT0icmVnZXhwInx8di5pc1dpbmRv
dyhlKT9mLmNhbGwocixlKTp2Lm1lcmdlKHIsZSkpLHJ9LGluQXJyYXk6ZnVuY3Rpb24oZSx0LG4p
e3ZhciByO2lmKHQpe2lmKGMpcmV0dXJuIGMuY2FsbCh0LGUsbik7cj10Lmxlbmd0aCxuPW4/bjww
P01hdGgubWF4KDAscituKTpuOjA7Zm9yKDtuPHI7bisrKWlmKG4gaW4gdCYmdFtuXT09PWUpcmV0
dXJuIG59cmV0dXJuLTF9LG1lcmdlOmZ1bmN0aW9uKGUsbil7dmFyIHI9bi5sZW5ndGgsaT1lLmxl
bmd0aCxzPTA7aWYodHlwZW9mIHI9PSJudW1iZXIiKWZvcig7czxyO3MrKyllW2krK109bltzXTtl
bHNlIHdoaWxlKG5bc10hPT10KWVbaSsrXT1uW3MrK107cmV0dXJuIGUubGVuZ3RoPWksZX0sZ3Jl
cDpmdW5jdGlvbihlLHQsbil7dmFyIHIsaT1bXSxzPTAsbz1lLmxlbmd0aDtuPSEhbjtmb3IoO3M8
bztzKyspcj0hIXQoZVtzXSxzKSxuIT09ciYmaS5wdXNoKGVbc10pO3JldHVybiBpfSxtYXA6ZnVu
Y3Rpb24oZSxuLHIpe3ZhciBpLHMsbz1bXSx1PTAsYT1lLmxlbmd0aCxmPWUgaW5zdGFuY2VvZiB2
fHxhIT09dCYmdHlwZW9mIGE9PSJudW1iZXIiJiYoYT4wJiZlWzBdJiZlW2EtMV18fGE9PT0wfHx2
LmlzQXJyYXkoZSkpO2lmKGYpZm9yKDt1PGE7dSsrKWk9bihlW3VdLHUsciksaSE9bnVsbCYmKG9b
by5sZW5ndGhdPWkpO2Vsc2UgZm9yKHMgaW4gZSlpPW4oZVtzXSxzLHIpLGkhPW51bGwmJihvW28u
bGVuZ3RoXT1pKTtyZXR1cm4gby5jb25jYXQuYXBwbHkoW10sbyl9LGd1aWQ6MSxwcm94eTpmdW5j
dGlvbihlLG4pe3ZhciByLGkscztyZXR1cm4gdHlwZW9mIG49PSJzdHJpbmciJiYocj1lW25dLG49
ZSxlPXIpLHYuaXNGdW5jdGlvbihlKT8oaT1sLmNhbGwoYXJndW1lbnRzLDIpLHM9ZnVuY3Rpb24o
KXtyZXR1cm4gZS5hcHBseShuLGkuY29uY2F0KGwuY2FsbChhcmd1bWVudHMpKSl9LHMuZ3VpZD1l
Lmd1aWQ9ZS5ndWlkfHx2Lmd1aWQrKyxzKTp0fSxhY2Nlc3M6ZnVuY3Rpb24oZSxuLHIsaSxzLG8s
dSl7dmFyIGEsZj1yPT1udWxsLGw9MCxjPWUubGVuZ3RoO2lmKHImJnR5cGVvZiByPT0ib2JqZWN0
Iil7Zm9yKGwgaW4gcil2LmFjY2VzcyhlLG4sbCxyW2xdLDEsbyxpKTtzPTF9ZWxzZSBpZihpIT09
dCl7YT11PT09dCYmdi5pc0Z1bmN0aW9uKGkpLGYmJihhPyhhPW4sbj1mdW5jdGlvbihlLHQsbil7
cmV0dXJuIGEuY2FsbCh2KGUpLG4pfSk6KG4uY2FsbChlLGkpLG49bnVsbCkpO2lmKG4pZm9yKDts
PGM7bCsrKW4oZVtsXSxyLGE/aS5jYWxsKGVbbF0sbCxuKGVbbF0scikpOmksdSk7cz0xfXJldHVy
biBzP2U6Zj9uLmNhbGwoZSk6Yz9uKGVbMF0scik6b30sbm93OmZ1bmN0aW9uKCl7cmV0dXJuKG5l
dyBEYXRlKS5nZXRUaW1lKCl9fSksdi5yZWFkeS5wcm9taXNlPWZ1bmN0aW9uKHQpe2lmKCFyKXty
PXYuRGVmZXJyZWQoKTtpZihpLnJlYWR5U3RhdGU9PT0iY29tcGxldGUiKXNldFRpbWVvdXQodi5y
ZWFkeSwxKTtlbHNlIGlmKGkuYWRkRXZlbnRMaXN0ZW5lcilpLmFkZEV2ZW50TGlzdGVuZXIoIkRP
TUNvbnRlbnRMb2FkZWQiLEEsITEpLGUuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsdi5yZWFkeSwh
MSk7ZWxzZXtpLmF0dGFjaEV2ZW50KCJvbnJlYWR5c3RhdGVjaGFuZ2UiLEEpLGUuYXR0YWNoRXZl
bnQoIm9ubG9hZCIsdi5yZWFkeSk7dmFyIG49ITE7dHJ5e249ZS5mcmFtZUVsZW1lbnQ9PW51bGwm
JmkuZG9jdW1lbnRFbGVtZW50fWNhdGNoKHMpe31uJiZuLmRvU2Nyb2xsJiZmdW5jdGlvbiBvKCl7
aWYoIXYuaXNSZWFkeSl7dHJ5e24uZG9TY3JvbGwoImxlZnQiKX1jYXRjaChlKXtyZXR1cm4gc2V0
VGltZW91dChvLDUwKX12LnJlYWR5KCl9fSgpfX1yZXR1cm4gci5wcm9taXNlKHQpfSx2LmVhY2go
IkJvb2xlYW4gTnVtYmVyIFN0cmluZyBGdW5jdGlvbiBBcnJheSBEYXRlIFJlZ0V4cCBPYmplY3Qi
LnNwbGl0KCIgIiksZnVuY3Rpb24oZSx0KXtPWyJbb2JqZWN0ICIrdCsiXSJdPXQudG9Mb3dlckNh
c2UoKX0pLG49dihpKTt2YXIgTT17fTt2LkNhbGxiYWNrcz1mdW5jdGlvbihlKXtlPXR5cGVvZiBl
PT0ic3RyaW5nIj9NW2VdfHxfKGUpOnYuZXh0ZW5kKHt9LGUpO3ZhciBuLHIsaSxzLG8sdSxhPVtd
LGY9IWUub25jZSYmW10sbD1mdW5jdGlvbih0KXtuPWUubWVtb3J5JiZ0LHI9ITAsdT1zfHwwLHM9
MCxvPWEubGVuZ3RoLGk9ITA7Zm9yKDthJiZ1PG87dSsrKWlmKGFbdV0uYXBwbHkodFswXSx0WzFd
KT09PSExJiZlLnN0b3BPbkZhbHNlKXtuPSExO2JyZWFrfWk9ITEsYSYmKGY/Zi5sZW5ndGgmJmwo
Zi5zaGlmdCgpKTpuP2E9W106Yy5kaXNhYmxlKCkpfSxjPXthZGQ6ZnVuY3Rpb24oKXtpZihhKXt2
YXIgdD1hLmxlbmd0aDsoZnVuY3Rpb24gcih0KXt2LmVhY2godCxmdW5jdGlvbih0LG4pe3ZhciBp
PXYudHlwZShuKTtpPT09ImZ1bmN0aW9uIj8oIWUudW5pcXVlfHwhYy5oYXMobikpJiZhLnB1c2go
bik6biYmbi5sZW5ndGgmJmkhPT0ic3RyaW5nIiYmcihuKX0pfSkoYXJndW1lbnRzKSxpP289YS5s
ZW5ndGg6biYmKHM9dCxsKG4pKX1yZXR1cm4gdGhpc30scmVtb3ZlOmZ1bmN0aW9uKCl7cmV0dXJu
IGEmJnYuZWFjaChhcmd1bWVudHMsZnVuY3Rpb24oZSx0KXt2YXIgbjt3aGlsZSgobj12LmluQXJy
YXkodCxhLG4pKT4tMSlhLnNwbGljZShuLDEpLGkmJihuPD1vJiZvLS0sbjw9dSYmdS0tKX0pLHRo
aXN9LGhhczpmdW5jdGlvbihlKXtyZXR1cm4gdi5pbkFycmF5KGUsYSk+LTF9LGVtcHR5OmZ1bmN0
aW9uKCl7cmV0dXJuIGE9W10sdGhpc30sZGlzYWJsZTpmdW5jdGlvbigpe3JldHVybiBhPWY9bj10
LHRoaXN9LGRpc2FibGVkOmZ1bmN0aW9uKCl7cmV0dXJuIWF9LGxvY2s6ZnVuY3Rpb24oKXtyZXR1
cm4gZj10LG58fGMuZGlzYWJsZSgpLHRoaXN9LGxvY2tlZDpmdW5jdGlvbigpe3JldHVybiFmfSxm
aXJlV2l0aDpmdW5jdGlvbihlLHQpe3JldHVybiB0PXR8fFtdLHQ9W2UsdC5zbGljZT90LnNsaWNl
KCk6dF0sYSYmKCFyfHxmKSYmKGk/Zi5wdXNoKHQpOmwodCkpLHRoaXN9LGZpcmU6ZnVuY3Rpb24o
KXtyZXR1cm4gYy5maXJlV2l0aCh0aGlzLGFyZ3VtZW50cyksdGhpc30sZmlyZWQ6ZnVuY3Rpb24o
KXtyZXR1cm4hIXJ9fTtyZXR1cm4gY30sdi5leHRlbmQoe0RlZmVycmVkOmZ1bmN0aW9uKGUpe3Zh
ciB0PVtbInJlc29sdmUiLCJkb25lIix2LkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSwicmVzb2x2
ZWQiXSxbInJlamVjdCIsImZhaWwiLHYuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLCJyZWplY3Rl
ZCJdLFsibm90aWZ5IiwicHJvZ3Jlc3MiLHYuQ2FsbGJhY2tzKCJtZW1vcnkiKV1dLG49InBlbmRp
bmciLHI9e3N0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIG59LGFsd2F5czpmdW5jdGlvbigpe3JldHVy
biBpLmRvbmUoYXJndW1lbnRzKS5mYWlsKGFyZ3VtZW50cyksdGhpc30sdGhlbjpmdW5jdGlvbigp
e3ZhciBlPWFyZ3VtZW50cztyZXR1cm4gdi5EZWZlcnJlZChmdW5jdGlvbihuKXt2LmVhY2godCxm
dW5jdGlvbih0LHIpe3ZhciBzPXJbMF0sbz1lW3RdO2lbclsxXV0odi5pc0Z1bmN0aW9uKG8pP2Z1
bmN0aW9uKCl7dmFyIGU9by5hcHBseSh0aGlzLGFyZ3VtZW50cyk7ZSYmdi5pc0Z1bmN0aW9uKGUu
cHJvbWlzZSk/ZS5wcm9taXNlKCkuZG9uZShuLnJlc29sdmUpLmZhaWwobi5yZWplY3QpLnByb2dy
ZXNzKG4ubm90aWZ5KTpuW3MrIldpdGgiXSh0aGlzPT09aT9uOnRoaXMsW2VdKX06bltzXSl9KSxl
PW51bGx9KS5wcm9taXNlKCl9LHByb21pc2U6ZnVuY3Rpb24oZSl7cmV0dXJuIGUhPW51bGw/di5l
eHRlbmQoZSxyKTpyfX0saT17fTtyZXR1cm4gci5waXBlPXIudGhlbix2LmVhY2godCxmdW5jdGlv
bihlLHMpe3ZhciBvPXNbMl0sdT1zWzNdO3Jbc1sxXV09by5hZGQsdSYmby5hZGQoZnVuY3Rpb24o
KXtuPXV9LHRbZV4xXVsyXS5kaXNhYmxlLHRbMl1bMl0ubG9jayksaVtzWzBdXT1vLmZpcmUsaVtz
WzBdKyJXaXRoIl09by5maXJlV2l0aH0pLHIucHJvbWlzZShpKSxlJiZlLmNhbGwoaSxpKSxpfSx3
aGVuOmZ1bmN0aW9uKGUpe3ZhciB0PTAsbj1sLmNhbGwoYXJndW1lbnRzKSxyPW4ubGVuZ3RoLGk9
ciE9PTF8fGUmJnYuaXNGdW5jdGlvbihlLnByb21pc2UpP3I6MCxzPWk9PT0xP2U6di5EZWZlcnJl
ZCgpLG89ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBmdW5jdGlvbihyKXt0W2VdPXRoaXMsbltlXT1h
cmd1bWVudHMubGVuZ3RoPjE/bC5jYWxsKGFyZ3VtZW50cyk6cixuPT09dT9zLm5vdGlmeVdpdGgo
dCxuKTotLWl8fHMucmVzb2x2ZVdpdGgodCxuKX19LHUsYSxmO2lmKHI+MSl7dT1uZXcgQXJyYXko
ciksYT1uZXcgQXJyYXkociksZj1uZXcgQXJyYXkocik7Zm9yKDt0PHI7dCsrKW5bdF0mJnYuaXNG
dW5jdGlvbihuW3RdLnByb21pc2UpP25bdF0ucHJvbWlzZSgpLmRvbmUobyh0LGYsbikpLmZhaWwo
cy5yZWplY3QpLnByb2dyZXNzKG8odCxhLHUpKTotLWl9cmV0dXJuIGl8fHMucmVzb2x2ZVdpdGgo
ZixuKSxzLnByb21pc2UoKX19KSx2LnN1cHBvcnQ9ZnVuY3Rpb24oKXt2YXIgdCxuLHIscyxvLHUs
YSxmLGwsYyxoLHA9aS5jcmVhdGVFbGVtZW50KCJkaXYiKTtwLnNldEF0dHJpYnV0ZSgiY2xhc3NO
YW1lIiwidCIpLHAuaW5uZXJIVE1MPSIgIDxsaW5rLz48dGFibGU+PC90YWJsZT48YSBocmVmPScv
YSc+YTwvYT48aW5wdXQgdHlwZT0nY2hlY2tib3gnLz4iLG49cC5nZXRFbGVtZW50c0J5VGFnTmFt
ZSgiKiIpLHI9cC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYSIpWzBdO2lmKCFufHwhcnx8IW4ubGVu
Z3RoKXJldHVybnt9O3M9aS5jcmVhdGVFbGVtZW50KCJzZWxlY3QiKSxvPXMuYXBwZW5kQ2hpbGQo
aS5jcmVhdGVFbGVtZW50KCJvcHRpb24iKSksdT1wLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1
dCIpWzBdLHIuc3R5bGUuY3NzVGV4dD0idG9wOjFweDtmbG9hdDpsZWZ0O29wYWNpdHk6LjUiLHQ9
e2xlYWRpbmdXaGl0ZXNwYWNlOnAuZmlyc3RDaGlsZC5ub2RlVHlwZT09PTMsdGJvZHk6IXAuZ2V0
RWxlbWVudHNCeVRhZ05hbWUoInRib2R5IikubGVuZ3RoLGh0bWxTZXJpYWxpemU6ISFwLmdldEVs
ZW1lbnRzQnlUYWdOYW1lKCJsaW5rIikubGVuZ3RoLHN0eWxlOi90b3AvLnRlc3Qoci5nZXRBdHRy
aWJ1dGUoInN0eWxlIikpLGhyZWZOb3JtYWxpemVkOnIuZ2V0QXR0cmlidXRlKCJocmVmIik9PT0i
L2EiLG9wYWNpdHk6L14wLjUvLnRlc3Qoci5zdHlsZS5vcGFjaXR5KSxjc3NGbG9hdDohIXIuc3R5
bGUuY3NzRmxvYXQsY2hlY2tPbjp1LnZhbHVlPT09Im9uIixvcHRTZWxlY3RlZDpvLnNlbGVjdGVk
LGdldFNldEF0dHJpYnV0ZTpwLmNsYXNzTmFtZSE9PSJ0IixlbmN0eXBlOiEhaS5jcmVhdGVFbGVt
ZW50KCJmb3JtIikuZW5jdHlwZSxodG1sNUNsb25lOmkuY3JlYXRlRWxlbWVudCgibmF2IikuY2xv
bmVOb2RlKCEwKS5vdXRlckhUTUwhPT0iPDpuYXY+PC86bmF2PiIsYm94TW9kZWw6aS5jb21wYXRN
b2RlPT09IkNTUzFDb21wYXQiLHN1Ym1pdEJ1YmJsZXM6ITAsY2hhbmdlQnViYmxlczohMCxmb2N1
c2luQnViYmxlczohMSxkZWxldGVFeHBhbmRvOiEwLG5vQ2xvbmVFdmVudDohMCxpbmxpbmVCbG9j
a05lZWRzTGF5b3V0OiExLHNocmlua1dyYXBCbG9ja3M6ITEscmVsaWFibGVNYXJnaW5SaWdodDoh
MCxib3hTaXppbmdSZWxpYWJsZTohMCxwaXhlbFBvc2l0aW9uOiExfSx1LmNoZWNrZWQ9ITAsdC5u
b0Nsb25lQ2hlY2tlZD11LmNsb25lTm9kZSghMCkuY2hlY2tlZCxzLmRpc2FibGVkPSEwLHQub3B0
RGlzYWJsZWQ9IW8uZGlzYWJsZWQ7dHJ5e2RlbGV0ZSBwLnRlc3R9Y2F0Y2goZCl7dC5kZWxldGVF
eHBhbmRvPSExfSFwLmFkZEV2ZW50TGlzdGVuZXImJnAuYXR0YWNoRXZlbnQmJnAuZmlyZUV2ZW50
JiYocC5hdHRhY2hFdmVudCgib25jbGljayIsaD1mdW5jdGlvbigpe3Qubm9DbG9uZUV2ZW50PSEx
fSkscC5jbG9uZU5vZGUoITApLmZpcmVFdmVudCgib25jbGljayIpLHAuZGV0YWNoRXZlbnQoIm9u
Y2xpY2siLGgpKSx1PWkuY3JlYXRlRWxlbWVudCgiaW5wdXQiKSx1LnZhbHVlPSJ0Iix1LnNldEF0
dHJpYnV0ZSgidHlwZSIsInJhZGlvIiksdC5yYWRpb1ZhbHVlPXUudmFsdWU9PT0idCIsdS5zZXRB
dHRyaWJ1dGUoImNoZWNrZWQiLCJjaGVja2VkIiksdS5zZXRBdHRyaWJ1dGUoIm5hbWUiLCJ0Iiks
cC5hcHBlbmRDaGlsZCh1KSxhPWkuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGEuYXBwZW5kQ2hp
bGQocC5sYXN0Q2hpbGQpLHQuY2hlY2tDbG9uZT1hLmNsb25lTm9kZSghMCkuY2xvbmVOb2RlKCEw
KS5sYXN0Q2hpbGQuY2hlY2tlZCx0LmFwcGVuZENoZWNrZWQ9dS5jaGVja2VkLGEucmVtb3ZlQ2hp
bGQodSksYS5hcHBlbmRDaGlsZChwKTtpZihwLmF0dGFjaEV2ZW50KWZvcihsIGlue3N1Ym1pdDoh
MCxjaGFuZ2U6ITAsZm9jdXNpbjohMH0pZj0ib24iK2wsYz1mIGluIHAsY3x8KHAuc2V0QXR0cmli
dXRlKGYsInJldHVybjsiKSxjPXR5cGVvZiBwW2ZdPT0iZnVuY3Rpb24iKSx0W2wrIkJ1YmJsZXMi
XT1jO3JldHVybiB2KGZ1bmN0aW9uKCl7dmFyIG4scixzLG8sdT0icGFkZGluZzowO21hcmdpbjow
O2JvcmRlcjowO2Rpc3BsYXk6YmxvY2s7b3ZlcmZsb3c6aGlkZGVuOyIsYT1pLmdldEVsZW1lbnRz
QnlUYWdOYW1lKCJib2R5IilbMF07aWYoIWEpcmV0dXJuO249aS5jcmVhdGVFbGVtZW50KCJkaXYi
KSxuLnN0eWxlLmNzc1RleHQ9InZpc2liaWxpdHk6aGlkZGVuO2JvcmRlcjowO3dpZHRoOjA7aGVp
Z2h0OjA7cG9zaXRpb246c3RhdGljO3RvcDowO21hcmdpbi10b3A6MXB4IixhLmluc2VydEJlZm9y
ZShuLGEuZmlyc3RDaGlsZCkscj1pLmNyZWF0ZUVsZW1lbnQoImRpdiIpLG4uYXBwZW5kQ2hpbGQo
ciksci5pbm5lckhUTUw9Ijx0YWJsZT48dHI+PHRkPjwvdGQ+PHRkPnQ8L3RkPjwvdHI+PC90YWJs
ZT4iLHM9ci5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGQiKSxzWzBdLnN0eWxlLmNzc1RleHQ9InBh
ZGRpbmc6MDttYXJnaW46MDtib3JkZXI6MDtkaXNwbGF5Om5vbmUiLGM9c1swXS5vZmZzZXRIZWln
aHQ9PT0wLHNbMF0uc3R5bGUuZGlzcGxheT0iIixzWzFdLnN0eWxlLmRpc3BsYXk9Im5vbmUiLHQu
cmVsaWFibGVIaWRkZW5PZmZzZXRzPWMmJnNbMF0ub2Zmc2V0SGVpZ2h0PT09MCxyLmlubmVySFRN
TD0iIixyLnN0eWxlLmNzc1RleHQ9ImJveC1zaXppbmc6Ym9yZGVyLWJveDstbW96LWJveC1zaXpp
bmc6Ym9yZGVyLWJveDstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nOjFweDti
b3JkZXI6MXB4O2Rpc3BsYXk6YmxvY2s7d2lkdGg6NHB4O21hcmdpbi10b3A6MSU7cG9zaXRpb246
YWJzb2x1dGU7dG9wOjElOyIsdC5ib3hTaXppbmc9ci5vZmZzZXRXaWR0aD09PTQsdC5kb2VzTm90
SW5jbHVkZU1hcmdpbkluQm9keU9mZnNldD1hLm9mZnNldFRvcCE9PTEsZS5nZXRDb21wdXRlZFN0
eWxlJiYodC5waXhlbFBvc2l0aW9uPShlLmdldENvbXB1dGVkU3R5bGUocixudWxsKXx8e30pLnRv
cCE9PSIxJSIsdC5ib3hTaXppbmdSZWxpYWJsZT0oZS5nZXRDb21wdXRlZFN0eWxlKHIsbnVsbCl8
fHt3aWR0aDoiNHB4In0pLndpZHRoPT09IjRweCIsbz1pLmNyZWF0ZUVsZW1lbnQoImRpdiIpLG8u
c3R5bGUuY3NzVGV4dD1yLnN0eWxlLmNzc1RleHQ9dSxvLnN0eWxlLm1hcmdpblJpZ2h0PW8uc3R5
bGUud2lkdGg9IjAiLHIuc3R5bGUud2lkdGg9IjFweCIsci5hcHBlbmRDaGlsZChvKSx0LnJlbGlh
YmxlTWFyZ2luUmlnaHQ9IXBhcnNlRmxvYXQoKGUuZ2V0Q29tcHV0ZWRTdHlsZShvLG51bGwpfHx7
fSkubWFyZ2luUmlnaHQpKSx0eXBlb2Ygci5zdHlsZS56b29tIT0idW5kZWZpbmVkIiYmKHIuaW5u
ZXJIVE1MPSIiLHIuc3R5bGUuY3NzVGV4dD11KyJ3aWR0aDoxcHg7cGFkZGluZzoxcHg7ZGlzcGxh
eTppbmxpbmU7em9vbToxIix0LmlubGluZUJsb2NrTmVlZHNMYXlvdXQ9ci5vZmZzZXRXaWR0aD09
PTMsci5zdHlsZS5kaXNwbGF5PSJibG9jayIsci5zdHlsZS5vdmVyZmxvdz0idmlzaWJsZSIsci5p
bm5lckhUTUw9IjxkaXY+PC9kaXY+IixyLmZpcnN0Q2hpbGQuc3R5bGUud2lkdGg9IjVweCIsdC5z
aHJpbmtXcmFwQmxvY2tzPXIub2Zmc2V0V2lkdGghPT0zLG4uc3R5bGUuem9vbT0xKSxhLnJlbW92
ZUNoaWxkKG4pLG49cj1zPW89bnVsbH0pLGEucmVtb3ZlQ2hpbGQocCksbj1yPXM9bz11PWE9cD1u
dWxsLHR9KCk7dmFyIEQ9Lyg/Olx7W1xzXFNdKlx9fFxbW1xzXFNdKlxdKSQvLFA9LyhbQS1aXSkv
Zzt2LmV4dGVuZCh7Y2FjaGU6e30sZGVsZXRlZElkczpbXSx1dWlkOjAsZXhwYW5kbzoialF1ZXJ5
Iisodi5mbi5qcXVlcnkrTWF0aC5yYW5kb20oKSkucmVwbGFjZSgvXEQvZywiIiksbm9EYXRhOntl
bWJlZDohMCxvYmplY3Q6ImNsc2lkOkQyN0NEQjZFLUFFNkQtMTFjZi05NkI4LTQ0NDU1MzU0MDAw
MCIsYXBwbGV0OiEwfSxoYXNEYXRhOmZ1bmN0aW9uKGUpe3JldHVybiBlPWUubm9kZVR5cGU/di5j
YWNoZVtlW3YuZXhwYW5kb11dOmVbdi5leHBhbmRvXSwhIWUmJiFCKGUpfSxkYXRhOmZ1bmN0aW9u
KGUsbixyLGkpe2lmKCF2LmFjY2VwdERhdGEoZSkpcmV0dXJuO3ZhciBzLG8sdT12LmV4cGFuZG8s
YT10eXBlb2Ygbj09InN0cmluZyIsZj1lLm5vZGVUeXBlLGw9Zj92LmNhY2hlOmUsYz1mP2VbdV06
ZVt1XSYmdTtpZigoIWN8fCFsW2NdfHwhaSYmIWxbY10uZGF0YSkmJmEmJnI9PT10KXJldHVybjtj
fHwoZj9lW3VdPWM9di5kZWxldGVkSWRzLnBvcCgpfHx2Lmd1aWQrKzpjPXUpLGxbY118fChsW2Nd
PXt9LGZ8fChsW2NdLnRvSlNPTj12Lm5vb3ApKTtpZih0eXBlb2Ygbj09Im9iamVjdCJ8fHR5cGVv
ZiBuPT0iZnVuY3Rpb24iKWk/bFtjXT12LmV4dGVuZChsW2NdLG4pOmxbY10uZGF0YT12LmV4dGVu
ZChsW2NdLmRhdGEsbik7cmV0dXJuIHM9bFtjXSxpfHwocy5kYXRhfHwocy5kYXRhPXt9KSxzPXMu
ZGF0YSksciE9PXQmJihzW3YuY2FtZWxDYXNlKG4pXT1yKSxhPyhvPXNbbl0sbz09bnVsbCYmKG89
c1t2LmNhbWVsQ2FzZShuKV0pKTpvPXMsb30scmVtb3ZlRGF0YTpmdW5jdGlvbihlLHQsbil7aWYo
IXYuYWNjZXB0RGF0YShlKSlyZXR1cm47dmFyIHIsaSxzLG89ZS5ub2RlVHlwZSx1PW8/di5jYWNo
ZTplLGE9bz9lW3YuZXhwYW5kb106di5leHBhbmRvO2lmKCF1W2FdKXJldHVybjtpZih0KXtyPW4/
dVthXTp1W2FdLmRhdGE7aWYocil7di5pc0FycmF5KHQpfHwodCBpbiByP3Q9W3RdOih0PXYuY2Ft
ZWxDYXNlKHQpLHQgaW4gcj90PVt0XTp0PXQuc3BsaXQoIiAiKSkpO2ZvcihpPTAscz10Lmxlbmd0
aDtpPHM7aSsrKWRlbGV0ZSByW3RbaV1dO2lmKCEobj9COnYuaXNFbXB0eU9iamVjdCkocikpcmV0
dXJufX1pZighbil7ZGVsZXRlIHVbYV0uZGF0YTtpZighQih1W2FdKSlyZXR1cm59bz92LmNsZWFu
RGF0YShbZV0sITApOnYuc3VwcG9ydC5kZWxldGVFeHBhbmRvfHx1IT11LndpbmRvdz9kZWxldGUg
dVthXTp1W2FdPW51bGx9LF9kYXRhOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdi5kYXRhKGUsdCxu
LCEwKX0sYWNjZXB0RGF0YTpmdW5jdGlvbihlKXt2YXIgdD1lLm5vZGVOYW1lJiZ2Lm5vRGF0YVtl
Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldO3JldHVybiF0fHx0IT09ITAmJmUuZ2V0QXR0cmlidXRl
KCJjbGFzc2lkIik9PT10fX0pLHYuZm4uZXh0ZW5kKHtkYXRhOmZ1bmN0aW9uKGUsbil7dmFyIHIs
aSxzLG8sdSxhPXRoaXNbMF0sZj0wLGw9bnVsbDtpZihlPT09dCl7aWYodGhpcy5sZW5ndGgpe2w9
di5kYXRhKGEpO2lmKGEubm9kZVR5cGU9PT0xJiYhdi5fZGF0YShhLCJwYXJzZWRBdHRycyIpKXtz
PWEuYXR0cmlidXRlcztmb3IodT1zLmxlbmd0aDtmPHU7ZisrKW89c1tmXS5uYW1lLG8uaW5kZXhP
ZigiZGF0YS0iKXx8KG89di5jYW1lbENhc2Uoby5zdWJzdHJpbmcoNSkpLEgoYSxvLGxbb10pKTt2
Ll9kYXRhKGEsInBhcnNlZEF0dHJzIiwhMCl9fXJldHVybiBsfXJldHVybiB0eXBlb2YgZT09Im9i
amVjdCI/dGhpcy5lYWNoKGZ1bmN0aW9uKCl7di5kYXRhKHRoaXMsZSl9KToocj1lLnNwbGl0KCIu
IiwyKSxyWzFdPXJbMV0/Ii4iK3JbMV06IiIsaT1yWzFdKyIhIix2LmFjY2Vzcyh0aGlzLGZ1bmN0
aW9uKG4pe2lmKG49PT10KXJldHVybiBsPXRoaXMudHJpZ2dlckhhbmRsZXIoImdldERhdGEiK2ks
W3JbMF1dKSxsPT09dCYmYSYmKGw9di5kYXRhKGEsZSksbD1IKGEsZSxsKSksbD09PXQmJnJbMV0/
dGhpcy5kYXRhKHJbMF0pOmw7clsxXT1uLHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciB0PXYodGhp
cyk7dC50cmlnZ2VySGFuZGxlcigic2V0RGF0YSIraSxyKSx2LmRhdGEodGhpcyxlLG4pLHQudHJp
Z2dlckhhbmRsZXIoImNoYW5nZURhdGEiK2kscil9KX0sbnVsbCxuLGFyZ3VtZW50cy5sZW5ndGg+
MSxudWxsLCExKSl9LHJlbW92ZURhdGE6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZWFjaChmdW5j
dGlvbigpe3YucmVtb3ZlRGF0YSh0aGlzLGUpfSl9fSksdi5leHRlbmQoe3F1ZXVlOmZ1bmN0aW9u
KGUsdCxuKXt2YXIgcjtpZihlKXJldHVybiB0PSh0fHwiZngiKSsicXVldWUiLHI9di5fZGF0YShl
LHQpLG4mJighcnx8di5pc0FycmF5KG4pP3I9di5fZGF0YShlLHQsdi5tYWtlQXJyYXkobikpOnIu
cHVzaChuKSkscnx8W119LGRlcXVldWU6ZnVuY3Rpb24oZSx0KXt0PXR8fCJmeCI7dmFyIG49di5x
dWV1ZShlLHQpLHI9bi5sZW5ndGgsaT1uLnNoaWZ0KCkscz12Ll9xdWV1ZUhvb2tzKGUsdCksbz1m
dW5jdGlvbigpe3YuZGVxdWV1ZShlLHQpfTtpPT09ImlucHJvZ3Jlc3MiJiYoaT1uLnNoaWZ0KCks
ci0tKSxpJiYodD09PSJmeCImJm4udW5zaGlmdCgiaW5wcm9ncmVzcyIpLGRlbGV0ZSBzLnN0b3As
aS5jYWxsKGUsbyxzKSksIXImJnMmJnMuZW1wdHkuZmlyZSgpfSxfcXVldWVIb29rczpmdW5jdGlv
bihlLHQpe3ZhciBuPXQrInF1ZXVlSG9va3MiO3JldHVybiB2Ll9kYXRhKGUsbil8fHYuX2RhdGEo
ZSxuLHtlbXB0eTp2LkNhbGxiYWNrcygib25jZSBtZW1vcnkiKS5hZGQoZnVuY3Rpb24oKXt2LnJl
bW92ZURhdGEoZSx0KyJxdWV1ZSIsITApLHYucmVtb3ZlRGF0YShlLG4sITApfSl9KX19KSx2LmZu
LmV4dGVuZCh7cXVldWU6ZnVuY3Rpb24oZSxuKXt2YXIgcj0yO3JldHVybiB0eXBlb2YgZSE9InN0
cmluZyImJihuPWUsZT0iZngiLHItLSksYXJndW1lbnRzLmxlbmd0aDxyP3YucXVldWUodGhpc1sw
XSxlKTpuPT09dD90aGlzOnRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciB0PXYucXVldWUodGhpcyxl
LG4pO3YuX3F1ZXVlSG9va3ModGhpcyxlKSxlPT09ImZ4IiYmdFswXSE9PSJpbnByb2dyZXNzIiYm
di5kZXF1ZXVlKHRoaXMsZSl9KX0sZGVxdWV1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lYWNo
KGZ1bmN0aW9uKCl7di5kZXF1ZXVlKHRoaXMsZSl9KX0sZGVsYXk6ZnVuY3Rpb24oZSx0KXtyZXR1
cm4gZT12LmZ4P3YuZnguc3BlZWRzW2VdfHxlOmUsdD10fHwiZngiLHRoaXMucXVldWUodCxmdW5j
dGlvbih0LG4pe3ZhciByPXNldFRpbWVvdXQodCxlKTtuLnN0b3A9ZnVuY3Rpb24oKXtjbGVhclRp
bWVvdXQocil9fSl9LGNsZWFyUXVldWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucXVldWUoZXx8
ImZ4IixbXSl9LHByb21pc2U6ZnVuY3Rpb24oZSxuKXt2YXIgcixpPTEscz12LkRlZmVycmVkKCks
bz10aGlzLHU9dGhpcy5sZW5ndGgsYT1mdW5jdGlvbigpey0taXx8cy5yZXNvbHZlV2l0aChvLFtv
XSl9O3R5cGVvZiBlIT0ic3RyaW5nIiYmKG49ZSxlPXQpLGU9ZXx8ImZ4Ijt3aGlsZSh1LS0pcj12
Ll9kYXRhKG9bdV0sZSsicXVldWVIb29rcyIpLHImJnIuZW1wdHkmJihpKyssci5lbXB0eS5hZGQo
YSkpO3JldHVybiBhKCkscy5wcm9taXNlKG4pfX0pO3ZhciBqLEYsSSxxPS9bXHRcclxuXS9nLFI9
L1xyL2csVT0vXig/OmJ1dHRvbnxpbnB1dCkkL2ksej0vXig/OmJ1dHRvbnxpbnB1dHxvYmplY3R8
c2VsZWN0fHRleHRhcmVhKSQvaSxXPS9eYSg/OnJlYXwpJC9pLFg9L14oPzphdXRvZm9jdXN8YXV0
b3BsYXl8YXN5bmN8Y2hlY2tlZHxjb250cm9sc3xkZWZlcnxkaXNhYmxlZHxoaWRkZW58bG9vcHxt
dWx0aXBsZXxvcGVufHJlYWRvbmx5fHJlcXVpcmVkfHNjb3BlZHxzZWxlY3RlZCkkL2ksVj12LnN1
cHBvcnQuZ2V0U2V0QXR0cmlidXRlO3YuZm4uZXh0ZW5kKHthdHRyOmZ1bmN0aW9uKGUsdCl7cmV0
dXJuIHYuYWNjZXNzKHRoaXMsdi5hdHRyLGUsdCxhcmd1bWVudHMubGVuZ3RoPjEpfSxyZW1vdmVB
dHRyOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2LnJlbW92ZUF0dHIo
dGhpcyxlKX0pfSxwcm9wOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHYuYWNjZXNzKHRoaXMsdi5wcm9w
LGUsdCxhcmd1bWVudHMubGVuZ3RoPjEpfSxyZW1vdmVQcm9wOmZ1bmN0aW9uKGUpe3JldHVybiBl
PXYucHJvcEZpeFtlXXx8ZSx0aGlzLmVhY2goZnVuY3Rpb24oKXt0cnl7dGhpc1tlXT10LGRlbGV0
ZSB0aGlzW2VdfWNhdGNoKG4pe319KX0sYWRkQ2xhc3M6ZnVuY3Rpb24oZSl7dmFyIHQsbixyLGks
cyxvLHU7aWYodi5pc0Z1bmN0aW9uKGUpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24odCl7dih0
aGlzKS5hZGRDbGFzcyhlLmNhbGwodGhpcyx0LHRoaXMuY2xhc3NOYW1lKSl9KTtpZihlJiZ0eXBl
b2YgZT09InN0cmluZyIpe3Q9ZS5zcGxpdCh5KTtmb3Iobj0wLHI9dGhpcy5sZW5ndGg7bjxyO24r
Kyl7aT10aGlzW25dO2lmKGkubm9kZVR5cGU9PT0xKWlmKCFpLmNsYXNzTmFtZSYmdC5sZW5ndGg9
PT0xKWkuY2xhc3NOYW1lPWU7ZWxzZXtzPSIgIitpLmNsYXNzTmFtZSsiICI7Zm9yKG89MCx1PXQu
bGVuZ3RoO288dTtvKyspcy5pbmRleE9mKCIgIit0W29dKyIgIik8MCYmKHMrPXRbb10rIiAiKTtp
LmNsYXNzTmFtZT12LnRyaW0ocyl9fX1yZXR1cm4gdGhpc30scmVtb3ZlQ2xhc3M6ZnVuY3Rpb24o
ZSl7dmFyIG4scixpLHMsbyx1LGE7aWYodi5pc0Z1bmN0aW9uKGUpKXJldHVybiB0aGlzLmVhY2go
ZnVuY3Rpb24odCl7dih0aGlzKS5yZW1vdmVDbGFzcyhlLmNhbGwodGhpcyx0LHRoaXMuY2xhc3NO
YW1lKSl9KTtpZihlJiZ0eXBlb2YgZT09InN0cmluZyJ8fGU9PT10KXtuPShlfHwiIikuc3BsaXQo
eSk7Zm9yKHU9MCxhPXRoaXMubGVuZ3RoO3U8YTt1Kyspe2k9dGhpc1t1XTtpZihpLm5vZGVUeXBl
PT09MSYmaS5jbGFzc05hbWUpe3I9KCIgIitpLmNsYXNzTmFtZSsiICIpLnJlcGxhY2UocSwiICIp
O2ZvcihzPTAsbz1uLmxlbmd0aDtzPG87cysrKXdoaWxlKHIuaW5kZXhPZigiICIrbltzXSsiICIp
Pj0wKXI9ci5yZXBsYWNlKCIgIituW3NdKyIgIiwiICIpO2kuY2xhc3NOYW1lPWU/di50cmltKHIp
OiIifX19cmV0dXJuIHRoaXN9LHRvZ2dsZUNsYXNzOmZ1bmN0aW9uKGUsdCl7dmFyIG49dHlwZW9m
IGUscj10eXBlb2YgdD09ImJvb2xlYW4iO3JldHVybiB2LmlzRnVuY3Rpb24oZSk/dGhpcy5lYWNo
KGZ1bmN0aW9uKG4pe3YodGhpcykudG9nZ2xlQ2xhc3MoZS5jYWxsKHRoaXMsbix0aGlzLmNsYXNz
TmFtZSx0KSx0KX0pOnRoaXMuZWFjaChmdW5jdGlvbigpe2lmKG49PT0ic3RyaW5nIil7dmFyIGks
cz0wLG89dih0aGlzKSx1PXQsYT1lLnNwbGl0KHkpO3doaWxlKGk9YVtzKytdKXU9cj91OiFvLmhh
c0NsYXNzKGkpLG9bdT8iYWRkQ2xhc3MiOiJyZW1vdmVDbGFzcyJdKGkpfWVsc2UgaWYobj09PSJ1
bmRlZmluZWQifHxuPT09ImJvb2xlYW4iKXRoaXMuY2xhc3NOYW1lJiZ2Ll9kYXRhKHRoaXMsIl9f
Y2xhc3NOYW1lX18iLHRoaXMuY2xhc3NOYW1lKSx0aGlzLmNsYXNzTmFtZT10aGlzLmNsYXNzTmFt
ZXx8ZT09PSExPyIiOnYuX2RhdGEodGhpcywiX19jbGFzc05hbWVfXyIpfHwiIn0pfSxoYXNDbGFz
czpmdW5jdGlvbihlKXt2YXIgdD0iICIrZSsiICIsbj0wLHI9dGhpcy5sZW5ndGg7Zm9yKDtuPHI7
bisrKWlmKHRoaXNbbl0ubm9kZVR5cGU9PT0xJiYoIiAiK3RoaXNbbl0uY2xhc3NOYW1lKyIgIiku
cmVwbGFjZShxLCIgIikuaW5kZXhPZih0KT49MClyZXR1cm4hMDtyZXR1cm4hMX0sdmFsOmZ1bmN0
aW9uKGUpe3ZhciBuLHIsaSxzPXRoaXNbMF07aWYoIWFyZ3VtZW50cy5sZW5ndGgpe2lmKHMpcmV0
dXJuIG49di52YWxIb29rc1tzLnR5cGVdfHx2LnZhbEhvb2tzW3Mubm9kZU5hbWUudG9Mb3dlckNh
c2UoKV0sbiYmImdldCJpbiBuJiYocj1uLmdldChzLCJ2YWx1ZSIpKSE9PXQ/cjoocj1zLnZhbHVl
LHR5cGVvZiByPT0ic3RyaW5nIj9yLnJlcGxhY2UoUiwiIik6cj09bnVsbD8iIjpyKTtyZXR1cm59
cmV0dXJuIGk9di5pc0Z1bmN0aW9uKGUpLHRoaXMuZWFjaChmdW5jdGlvbihyKXt2YXIgcyxvPXYo
dGhpcyk7aWYodGhpcy5ub2RlVHlwZSE9PTEpcmV0dXJuO2k/cz1lLmNhbGwodGhpcyxyLG8udmFs
KCkpOnM9ZSxzPT1udWxsP3M9IiI6dHlwZW9mIHM9PSJudW1iZXIiP3MrPSIiOnYuaXNBcnJheShz
KSYmKHM9di5tYXAocyxmdW5jdGlvbihlKXtyZXR1cm4gZT09bnVsbD8iIjplKyIifSkpLG49di52
YWxIb29rc1t0aGlzLnR5cGVdfHx2LnZhbEhvb2tzW3RoaXMubm9kZU5hbWUudG9Mb3dlckNhc2Uo
KV07aWYoIW58fCEoInNldCJpbiBuKXx8bi5zZXQodGhpcyxzLCJ2YWx1ZSIpPT09dCl0aGlzLnZh
bHVlPXN9KX19KSx2LmV4dGVuZCh7dmFsSG9va3M6e29wdGlvbjp7Z2V0OmZ1bmN0aW9uKGUpe3Zh
ciB0PWUuYXR0cmlidXRlcy52YWx1ZTtyZXR1cm4hdHx8dC5zcGVjaWZpZWQ/ZS52YWx1ZTplLnRl
eHR9fSxzZWxlY3Q6e2dldDpmdW5jdGlvbihlKXt2YXIgdCxuLHI9ZS5vcHRpb25zLGk9ZS5zZWxl
Y3RlZEluZGV4LHM9ZS50eXBlPT09InNlbGVjdC1vbmUifHxpPDAsbz1zP251bGw6W10sdT1zP2kr
MTpyLmxlbmd0aCxhPWk8MD91OnM/aTowO2Zvcig7YTx1O2ErKyl7bj1yW2FdO2lmKChuLnNlbGVj
dGVkfHxhPT09aSkmJih2LnN1cHBvcnQub3B0RGlzYWJsZWQ/IW4uZGlzYWJsZWQ6bi5nZXRBdHRy
aWJ1dGUoImRpc2FibGVkIik9PT1udWxsKSYmKCFuLnBhcmVudE5vZGUuZGlzYWJsZWR8fCF2Lm5v
ZGVOYW1lKG4ucGFyZW50Tm9kZSwib3B0Z3JvdXAiKSkpe3Q9dihuKS52YWwoKTtpZihzKXJldHVy
biB0O28ucHVzaCh0KX19cmV0dXJuIG99LHNldDpmdW5jdGlvbihlLHQpe3ZhciBuPXYubWFrZUFy
cmF5KHQpO3JldHVybiB2KGUpLmZpbmQoIm9wdGlvbiIpLmVhY2goZnVuY3Rpb24oKXt0aGlzLnNl
bGVjdGVkPXYuaW5BcnJheSh2KHRoaXMpLnZhbCgpLG4pPj0wfSksbi5sZW5ndGh8fChlLnNlbGVj
dGVkSW5kZXg9LTEpLG59fX0sYXR0ckZuOnt9LGF0dHI6ZnVuY3Rpb24oZSxuLHIsaSl7dmFyIHMs
byx1LGE9ZS5ub2RlVHlwZTtpZighZXx8YT09PTN8fGE9PT04fHxhPT09MilyZXR1cm47aWYoaSYm
di5pc0Z1bmN0aW9uKHYuZm5bbl0pKXJldHVybiB2KGUpW25dKHIpO2lmKHR5cGVvZiBlLmdldEF0
dHJpYnV0ZT09InVuZGVmaW5lZCIpcmV0dXJuIHYucHJvcChlLG4scik7dT1hIT09MXx8IXYuaXNY
TUxEb2MoZSksdSYmKG49bi50b0xvd2VyQ2FzZSgpLG89di5hdHRySG9va3Nbbl18fChYLnRlc3Qo
bik/RjpqKSk7aWYociE9PXQpe2lmKHI9PT1udWxsKXt2LnJlbW92ZUF0dHIoZSxuKTtyZXR1cm59
cmV0dXJuIG8mJiJzZXQiaW4gbyYmdSYmKHM9by5zZXQoZSxyLG4pKSE9PXQ/czooZS5zZXRBdHRy
aWJ1dGUobixyKyIiKSxyKX1yZXR1cm4gbyYmImdldCJpbiBvJiZ1JiYocz1vLmdldChlLG4pKSE9
PW51bGw/czoocz1lLmdldEF0dHJpYnV0ZShuKSxzPT09bnVsbD90OnMpfSxyZW1vdmVBdHRyOmZ1
bmN0aW9uKGUsdCl7dmFyIG4scixpLHMsbz0wO2lmKHQmJmUubm9kZVR5cGU9PT0xKXtyPXQuc3Bs
aXQoeSk7Zm9yKDtvPHIubGVuZ3RoO28rKylpPXJbb10saSYmKG49di5wcm9wRml4W2ldfHxpLHM9
WC50ZXN0KGkpLHN8fHYuYXR0cihlLGksIiIpLGUucmVtb3ZlQXR0cmlidXRlKFY/aTpuKSxzJiZu
IGluIGUmJihlW25dPSExKSl9fSxhdHRySG9va3M6e3R5cGU6e3NldDpmdW5jdGlvbihlLHQpe2lm
KFUudGVzdChlLm5vZGVOYW1lKSYmZS5wYXJlbnROb2RlKXYuZXJyb3IoInR5cGUgcHJvcGVydHkg
Y2FuJ3QgYmUgY2hhbmdlZCIpO2Vsc2UgaWYoIXYuc3VwcG9ydC5yYWRpb1ZhbHVlJiZ0PT09InJh
ZGlvIiYmdi5ub2RlTmFtZShlLCJpbnB1dCIpKXt2YXIgbj1lLnZhbHVlO3JldHVybiBlLnNldEF0
dHJpYnV0ZSgidHlwZSIsdCksbiYmKGUudmFsdWU9biksdH19fSx2YWx1ZTp7Z2V0OmZ1bmN0aW9u
KGUsdCl7cmV0dXJuIGomJnYubm9kZU5hbWUoZSwiYnV0dG9uIik/ai5nZXQoZSx0KTp0IGluIGU/
ZS52YWx1ZTpudWxsfSxzZXQ6ZnVuY3Rpb24oZSx0LG4pe2lmKGomJnYubm9kZU5hbWUoZSwiYnV0
dG9uIikpcmV0dXJuIGouc2V0KGUsdCxuKTtlLnZhbHVlPXR9fX0scHJvcEZpeDp7dGFiaW5kZXg6
InRhYkluZGV4IixyZWFkb25seToicmVhZE9ubHkiLCJmb3IiOiJodG1sRm9yIiwiY2xhc3MiOiJj
bGFzc05hbWUiLG1heGxlbmd0aDoibWF4TGVuZ3RoIixjZWxsc3BhY2luZzoiY2VsbFNwYWNpbmci
LGNlbGxwYWRkaW5nOiJjZWxsUGFkZGluZyIscm93c3Bhbjoicm93U3BhbiIsY29sc3BhbjoiY29s
U3BhbiIsdXNlbWFwOiJ1c2VNYXAiLGZyYW1lYm9yZGVyOiJmcmFtZUJvcmRlciIsY29udGVudGVk
aXRhYmxlOiJjb250ZW50RWRpdGFibGUifSxwcm9wOmZ1bmN0aW9uKGUsbixyKXt2YXIgaSxzLG8s
dT1lLm5vZGVUeXBlO2lmKCFlfHx1PT09M3x8dT09PTh8fHU9PT0yKXJldHVybjtyZXR1cm4gbz11
IT09MXx8IXYuaXNYTUxEb2MoZSksbyYmKG49di5wcm9wRml4W25dfHxuLHM9di5wcm9wSG9va3Nb
bl0pLHIhPT10P3MmJiJzZXQiaW4gcyYmKGk9cy5zZXQoZSxyLG4pKSE9PXQ/aTplW25dPXI6cyYm
ImdldCJpbiBzJiYoaT1zLmdldChlLG4pKSE9PW51bGw/aTplW25dfSxwcm9wSG9va3M6e3RhYklu
ZGV4OntnZXQ6ZnVuY3Rpb24oZSl7dmFyIG49ZS5nZXRBdHRyaWJ1dGVOb2RlKCJ0YWJpbmRleCIp
O3JldHVybiBuJiZuLnNwZWNpZmllZD9wYXJzZUludChuLnZhbHVlLDEwKTp6LnRlc3QoZS5ub2Rl
TmFtZSl8fFcudGVzdChlLm5vZGVOYW1lKSYmZS5ocmVmPzA6dH19fX0pLEY9e2dldDpmdW5jdGlv
bihlLG4pe3ZhciByLGk9di5wcm9wKGUsbik7cmV0dXJuIGk9PT0hMHx8dHlwZW9mIGkhPSJib29s
ZWFuIiYmKHI9ZS5nZXRBdHRyaWJ1dGVOb2RlKG4pKSYmci5ub2RlVmFsdWUhPT0hMT9uLnRvTG93
ZXJDYXNlKCk6dH0sc2V0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcjtyZXR1cm4gdD09PSExP3YucmVt
b3ZlQXR0cihlLG4pOihyPXYucHJvcEZpeFtuXXx8bixyIGluIGUmJihlW3JdPSEwKSxlLnNldEF0
dHJpYnV0ZShuLG4udG9Mb3dlckNhc2UoKSkpLG59fSxWfHwoST17bmFtZTohMCxpZDohMCxjb29y
ZHM6ITB9LGo9di52YWxIb29rcy5idXR0b249e2dldDpmdW5jdGlvbihlLG4pe3ZhciByO3JldHVy
biByPWUuZ2V0QXR0cmlidXRlTm9kZShuKSxyJiYoSVtuXT9yLnZhbHVlIT09IiI6ci5zcGVjaWZp
ZWQpP3IudmFsdWU6dH0sc2V0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1lLmdldEF0dHJpYnV0ZU5v
ZGUobik7cmV0dXJuIHJ8fChyPWkuY3JlYXRlQXR0cmlidXRlKG4pLGUuc2V0QXR0cmlidXRlTm9k
ZShyKSksci52YWx1ZT10KyIifX0sdi5lYWNoKFsid2lkdGgiLCJoZWlnaHQiXSxmdW5jdGlvbihl
LHQpe3YuYXR0ckhvb2tzW3RdPXYuZXh0ZW5kKHYuYXR0ckhvb2tzW3RdLHtzZXQ6ZnVuY3Rpb24o
ZSxuKXtpZihuPT09IiIpcmV0dXJuIGUuc2V0QXR0cmlidXRlKHQsImF1dG8iKSxufX0pfSksdi5h
dHRySG9va3MuY29udGVudGVkaXRhYmxlPXtnZXQ6ai5nZXQsc2V0OmZ1bmN0aW9uKGUsdCxuKXt0
PT09IiImJih0PSJmYWxzZSIpLGouc2V0KGUsdCxuKX19KSx2LnN1cHBvcnQuaHJlZk5vcm1hbGl6
ZWR8fHYuZWFjaChbImhyZWYiLCJzcmMiLCJ3aWR0aCIsImhlaWdodCJdLGZ1bmN0aW9uKGUsbil7
di5hdHRySG9va3Nbbl09di5leHRlbmQodi5hdHRySG9va3Nbbl0se2dldDpmdW5jdGlvbihlKXt2
YXIgcj1lLmdldEF0dHJpYnV0ZShuLDIpO3JldHVybiByPT09bnVsbD90OnJ9fSl9KSx2LnN1cHBv
cnQuc3R5bGV8fCh2LmF0dHJIb29rcy5zdHlsZT17Z2V0OmZ1bmN0aW9uKGUpe3JldHVybiBlLnN0
eWxlLmNzc1RleHQudG9Mb3dlckNhc2UoKXx8dH0sc2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUu
c3R5bGUuY3NzVGV4dD10KyIifX0pLHYuc3VwcG9ydC5vcHRTZWxlY3RlZHx8KHYucHJvcEhvb2tz
LnNlbGVjdGVkPXYuZXh0ZW5kKHYucHJvcEhvb2tzLnNlbGVjdGVkLHtnZXQ6ZnVuY3Rpb24oZSl7
dmFyIHQ9ZS5wYXJlbnROb2RlO3JldHVybiB0JiYodC5zZWxlY3RlZEluZGV4LHQucGFyZW50Tm9k
ZSYmdC5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXgpLG51bGx9fSkpLHYuc3VwcG9ydC5lbmN0eXBl
fHwodi5wcm9wRml4LmVuY3R5cGU9ImVuY29kaW5nIiksdi5zdXBwb3J0LmNoZWNrT258fHYuZWFj
aChbInJhZGlvIiwiY2hlY2tib3giXSxmdW5jdGlvbigpe3YudmFsSG9va3NbdGhpc109e2dldDpm
dW5jdGlvbihlKXtyZXR1cm4gZS5nZXRBdHRyaWJ1dGUoInZhbHVlIik9PT1udWxsPyJvbiI6ZS52
YWx1ZX19fSksdi5lYWNoKFsicmFkaW8iLCJjaGVja2JveCJdLGZ1bmN0aW9uKCl7di52YWxIb29r
c1t0aGlzXT12LmV4dGVuZCh2LnZhbEhvb2tzW3RoaXNdLHtzZXQ6ZnVuY3Rpb24oZSx0KXtpZih2
LmlzQXJyYXkodCkpcmV0dXJuIGUuY2hlY2tlZD12LmluQXJyYXkodihlKS52YWwoKSx0KT49MH19
KX0pO3ZhciAkPS9eKD86dGV4dGFyZWF8aW5wdXR8c2VsZWN0KSQvaSxKPS9eKFteXC5dKnwpKD86
XC4oLispfCkkLyxLPS8oPzpefFxzKWhvdmVyKFwuXFMrfClcYi8sUT0vXmtleS8sRz0vXig/Om1v
dXNlfGNvbnRleHRtZW51KXxjbGljay8sWT0vXig/OmZvY3VzaW5mb2N1c3xmb2N1c291dGJsdXIp
JC8sWj1mdW5jdGlvbihlKXtyZXR1cm4gdi5ldmVudC5zcGVjaWFsLmhvdmVyP2U6ZS5yZXBsYWNl
KEssIm1vdXNlZW50ZXIkMSBtb3VzZWxlYXZlJDEiKX07di5ldmVudD17YWRkOmZ1bmN0aW9uKGUs
bixyLGkscyl7dmFyIG8sdSxhLGYsbCxjLGgscCxkLG0sZztpZihlLm5vZGVUeXBlPT09M3x8ZS5u
b2RlVHlwZT09PTh8fCFufHwhcnx8IShvPXYuX2RhdGEoZSkpKXJldHVybjtyLmhhbmRsZXImJihk
PXIscj1kLmhhbmRsZXIscz1kLnNlbGVjdG9yKSxyLmd1aWR8fChyLmd1aWQ9di5ndWlkKyspLGE9
by5ldmVudHMsYXx8KG8uZXZlbnRzPWE9e30pLHU9by5oYW5kbGUsdXx8KG8uaGFuZGxlPXU9ZnVu
Y3Rpb24oZSl7cmV0dXJuIHR5cGVvZiB2PT0idW5kZWZpbmVkInx8ISFlJiZ2LmV2ZW50LnRyaWdn
ZXJlZD09PWUudHlwZT90OnYuZXZlbnQuZGlzcGF0Y2guYXBwbHkodS5lbGVtLGFyZ3VtZW50cyl9
LHUuZWxlbT1lKSxuPXYudHJpbShaKG4pKS5zcGxpdCgiICIpO2ZvcihmPTA7ZjxuLmxlbmd0aDtm
Kyspe2w9Si5leGVjKG5bZl0pfHxbXSxjPWxbMV0saD0obFsyXXx8IiIpLnNwbGl0KCIuIikuc29y
dCgpLGc9di5ldmVudC5zcGVjaWFsW2NdfHx7fSxjPShzP2cuZGVsZWdhdGVUeXBlOmcuYmluZFR5
cGUpfHxjLGc9di5ldmVudC5zcGVjaWFsW2NdfHx7fSxwPXYuZXh0ZW5kKHt0eXBlOmMsb3JpZ1R5
cGU6bFsxXSxkYXRhOmksaGFuZGxlcjpyLGd1aWQ6ci5ndWlkLHNlbGVjdG9yOnMsbmVlZHNDb250
ZXh0OnMmJnYuZXhwci5tYXRjaC5uZWVkc0NvbnRleHQudGVzdChzKSxuYW1lc3BhY2U6aC5qb2lu
KCIuIil9LGQpLG09YVtjXTtpZighbSl7bT1hW2NdPVtdLG0uZGVsZWdhdGVDb3VudD0wO2lmKCFn
LnNldHVwfHxnLnNldHVwLmNhbGwoZSxpLGgsdSk9PT0hMSllLmFkZEV2ZW50TGlzdGVuZXI/ZS5h
ZGRFdmVudExpc3RlbmVyKGMsdSwhMSk6ZS5hdHRhY2hFdmVudCYmZS5hdHRhY2hFdmVudCgib24i
K2MsdSl9Zy5hZGQmJihnLmFkZC5jYWxsKGUscCkscC5oYW5kbGVyLmd1aWR8fChwLmhhbmRsZXIu
Z3VpZD1yLmd1aWQpKSxzP20uc3BsaWNlKG0uZGVsZWdhdGVDb3VudCsrLDAscCk6bS5wdXNoKHAp
LHYuZXZlbnQuZ2xvYmFsW2NdPSEwfWU9bnVsbH0sZ2xvYmFsOnt9LHJlbW92ZTpmdW5jdGlvbihl
LHQsbixyLGkpe3ZhciBzLG8sdSxhLGYsbCxjLGgscCxkLG0sZz12Lmhhc0RhdGEoZSkmJnYuX2Rh
dGEoZSk7aWYoIWd8fCEoaD1nLmV2ZW50cykpcmV0dXJuO3Q9di50cmltKFoodHx8IiIpKS5zcGxp
dCgiICIpO2ZvcihzPTA7czx0Lmxlbmd0aDtzKyspe289Si5leGVjKHRbc10pfHxbXSx1PWE9b1sx
XSxmPW9bMl07aWYoIXUpe2Zvcih1IGluIGgpdi5ldmVudC5yZW1vdmUoZSx1K3Rbc10sbixyLCEw
KTtjb250aW51ZX1wPXYuZXZlbnQuc3BlY2lhbFt1XXx8e30sdT0ocj9wLmRlbGVnYXRlVHlwZTpw
LmJpbmRUeXBlKXx8dSxkPWhbdV18fFtdLGw9ZC5sZW5ndGgsZj1mP25ldyBSZWdFeHAoIihefFxc
LikiK2Yuc3BsaXQoIi4iKS5zb3J0KCkuam9pbigiXFwuKD86LipcXC58KSIpKyIoXFwufCQpIik6
bnVsbDtmb3IoYz0wO2M8ZC5sZW5ndGg7YysrKW09ZFtjXSwoaXx8YT09PW0ub3JpZ1R5cGUpJiYo
IW58fG4uZ3VpZD09PW0uZ3VpZCkmJighZnx8Zi50ZXN0KG0ubmFtZXNwYWNlKSkmJighcnx8cj09
PW0uc2VsZWN0b3J8fHI9PT0iKioiJiZtLnNlbGVjdG9yKSYmKGQuc3BsaWNlKGMtLSwxKSxtLnNl
bGVjdG9yJiZkLmRlbGVnYXRlQ291bnQtLSxwLnJlbW92ZSYmcC5yZW1vdmUuY2FsbChlLG0pKTtk
Lmxlbmd0aD09PTAmJmwhPT1kLmxlbmd0aCYmKCghcC50ZWFyZG93bnx8cC50ZWFyZG93bi5jYWxs
KGUsZixnLmhhbmRsZSk9PT0hMSkmJnYucmVtb3ZlRXZlbnQoZSx1LGcuaGFuZGxlKSxkZWxldGUg
aFt1XSl9di5pc0VtcHR5T2JqZWN0KGgpJiYoZGVsZXRlIGcuaGFuZGxlLHYucmVtb3ZlRGF0YShl
LCJldmVudHMiLCEwKSl9LGN1c3RvbUV2ZW50OntnZXREYXRhOiEwLHNldERhdGE6ITAsY2hhbmdl
RGF0YTohMH0sdHJpZ2dlcjpmdW5jdGlvbihuLHIscyxvKXtpZighc3x8cy5ub2RlVHlwZSE9PTMm
JnMubm9kZVR5cGUhPT04KXt2YXIgdSxhLGYsbCxjLGgscCxkLG0sZyx5PW4udHlwZXx8bixiPVtd
O2lmKFkudGVzdCh5K3YuZXZlbnQudHJpZ2dlcmVkKSlyZXR1cm47eS5pbmRleE9mKCIhIik+PTAm
Jih5PXkuc2xpY2UoMCwtMSksYT0hMCkseS5pbmRleE9mKCIuIik+PTAmJihiPXkuc3BsaXQoIi4i
KSx5PWIuc2hpZnQoKSxiLnNvcnQoKSk7aWYoKCFzfHx2LmV2ZW50LmN1c3RvbUV2ZW50W3ldKSYm
IXYuZXZlbnQuZ2xvYmFsW3ldKXJldHVybjtuPXR5cGVvZiBuPT0ib2JqZWN0Ij9uW3YuZXhwYW5k
b10/bjpuZXcgdi5FdmVudCh5LG4pOm5ldyB2LkV2ZW50KHkpLG4udHlwZT15LG4uaXNUcmlnZ2Vy
PSEwLG4uZXhjbHVzaXZlPWEsbi5uYW1lc3BhY2U9Yi5qb2luKCIuIiksbi5uYW1lc3BhY2VfcmU9
bi5uYW1lc3BhY2U/bmV3IFJlZ0V4cCgiKF58XFwuKSIrYi5qb2luKCJcXC4oPzouKlxcLnwpIikr
IihcXC58JCkiKTpudWxsLGg9eS5pbmRleE9mKCI6Iik8MD8ib24iK3k6IiI7aWYoIXMpe3U9di5j
YWNoZTtmb3IoZiBpbiB1KXVbZl0uZXZlbnRzJiZ1W2ZdLmV2ZW50c1t5XSYmdi5ldmVudC50cmln
Z2VyKG4scix1W2ZdLmhhbmRsZS5lbGVtLCEwKTtyZXR1cm59bi5yZXN1bHQ9dCxuLnRhcmdldHx8
KG4udGFyZ2V0PXMpLHI9ciE9bnVsbD92Lm1ha2VBcnJheShyKTpbXSxyLnVuc2hpZnQobikscD12
LmV2ZW50LnNwZWNpYWxbeV18fHt9O2lmKHAudHJpZ2dlciYmcC50cmlnZ2VyLmFwcGx5KHMscik9
PT0hMSlyZXR1cm47bT1bW3MscC5iaW5kVHlwZXx8eV1dO2lmKCFvJiYhcC5ub0J1YmJsZSYmIXYu
aXNXaW5kb3cocykpe2c9cC5kZWxlZ2F0ZVR5cGV8fHksbD1ZLnRlc3QoZyt5KT9zOnMucGFyZW50
Tm9kZTtmb3IoYz1zO2w7bD1sLnBhcmVudE5vZGUpbS5wdXNoKFtsLGddKSxjPWw7Yz09PShzLm93
bmVyRG9jdW1lbnR8fGkpJiZtLnB1c2goW2MuZGVmYXVsdFZpZXd8fGMucGFyZW50V2luZG93fHxl
LGddKX1mb3IoZj0wO2Y8bS5sZW5ndGgmJiFuLmlzUHJvcGFnYXRpb25TdG9wcGVkKCk7ZisrKWw9
bVtmXVswXSxuLnR5cGU9bVtmXVsxXSxkPSh2Ll9kYXRhKGwsImV2ZW50cyIpfHx7fSlbbi50eXBl
XSYmdi5fZGF0YShsLCJoYW5kbGUiKSxkJiZkLmFwcGx5KGwsciksZD1oJiZsW2hdLGQmJnYuYWNj
ZXB0RGF0YShsKSYmZC5hcHBseSYmZC5hcHBseShsLHIpPT09ITEmJm4ucHJldmVudERlZmF1bHQo
KTtyZXR1cm4gbi50eXBlPXksIW8mJiFuLmlzRGVmYXVsdFByZXZlbnRlZCgpJiYoIXAuX2RlZmF1
bHR8fHAuX2RlZmF1bHQuYXBwbHkocy5vd25lckRvY3VtZW50LHIpPT09ITEpJiYoeSE9PSJjbGlj
ayJ8fCF2Lm5vZGVOYW1lKHMsImEiKSkmJnYuYWNjZXB0RGF0YShzKSYmaCYmc1t5XSYmKHkhPT0i
Zm9jdXMiJiZ5IT09ImJsdXIifHxuLnRhcmdldC5vZmZzZXRXaWR0aCE9PTApJiYhdi5pc1dpbmRv
dyhzKSYmKGM9c1toXSxjJiYoc1toXT1udWxsKSx2LmV2ZW50LnRyaWdnZXJlZD15LHNbeV0oKSx2
LmV2ZW50LnRyaWdnZXJlZD10LGMmJihzW2hdPWMpKSxuLnJlc3VsdH1yZXR1cm59LGRpc3BhdGNo
OmZ1bmN0aW9uKG4pe249di5ldmVudC5maXgobnx8ZS5ldmVudCk7dmFyIHIsaSxzLG8sdSxhLGYs
YyxoLHAsZD0odi5fZGF0YSh0aGlzLCJldmVudHMiKXx8e30pW24udHlwZV18fFtdLG09ZC5kZWxl
Z2F0ZUNvdW50LGc9bC5jYWxsKGFyZ3VtZW50cykseT0hbi5leGNsdXNpdmUmJiFuLm5hbWVzcGFj
ZSxiPXYuZXZlbnQuc3BlY2lhbFtuLnR5cGVdfHx7fSx3PVtdO2dbMF09bixuLmRlbGVnYXRlVGFy
Z2V0PXRoaXM7aWYoYi5wcmVEaXNwYXRjaCYmYi5wcmVEaXNwYXRjaC5jYWxsKHRoaXMsbik9PT0h
MSlyZXR1cm47aWYobSYmKCFuLmJ1dHRvbnx8bi50eXBlIT09ImNsaWNrIikpZm9yKHM9bi50YXJn
ZXQ7cyE9dGhpcztzPXMucGFyZW50Tm9kZXx8dGhpcylpZihzLmRpc2FibGVkIT09ITB8fG4udHlw
ZSE9PSJjbGljayIpe3U9e30sZj1bXTtmb3Iocj0wO3I8bTtyKyspYz1kW3JdLGg9Yy5zZWxlY3Rv
cix1W2hdPT09dCYmKHVbaF09Yy5uZWVkc0NvbnRleHQ/dihoLHRoaXMpLmluZGV4KHMpPj0wOnYu
ZmluZChoLHRoaXMsbnVsbCxbc10pLmxlbmd0aCksdVtoXSYmZi5wdXNoKGMpO2YubGVuZ3RoJiZ3
LnB1c2goe2VsZW06cyxtYXRjaGVzOmZ9KX1kLmxlbmd0aD5tJiZ3LnB1c2goe2VsZW06dGhpcyxt
YXRjaGVzOmQuc2xpY2UobSl9KTtmb3Iocj0wO3I8dy5sZW5ndGgmJiFuLmlzUHJvcGFnYXRpb25T
dG9wcGVkKCk7cisrKXthPXdbcl0sbi5jdXJyZW50VGFyZ2V0PWEuZWxlbTtmb3IoaT0wO2k8YS5t
YXRjaGVzLmxlbmd0aCYmIW4uaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQoKTtpKyspe2M9
YS5tYXRjaGVzW2ldO2lmKHl8fCFuLm5hbWVzcGFjZSYmIWMubmFtZXNwYWNlfHxuLm5hbWVzcGFj
ZV9yZSYmbi5uYW1lc3BhY2VfcmUudGVzdChjLm5hbWVzcGFjZSkpbi5kYXRhPWMuZGF0YSxuLmhh
bmRsZU9iaj1jLG89KCh2LmV2ZW50LnNwZWNpYWxbYy5vcmlnVHlwZV18fHt9KS5oYW5kbGV8fGMu
aGFuZGxlcikuYXBwbHkoYS5lbGVtLGcpLG8hPT10JiYobi5yZXN1bHQ9byxvPT09ITEmJihuLnBy
ZXZlbnREZWZhdWx0KCksbi5zdG9wUHJvcGFnYXRpb24oKSkpfX1yZXR1cm4gYi5wb3N0RGlzcGF0
Y2gmJmIucG9zdERpc3BhdGNoLmNhbGwodGhpcyxuKSxuLnJlc3VsdH0scHJvcHM6ImF0dHJDaGFu
Z2UgYXR0ck5hbWUgcmVsYXRlZE5vZGUgc3JjRWxlbWVudCBhbHRLZXkgYnViYmxlcyBjYW5jZWxh
YmxlIGN0cmxLZXkgY3VycmVudFRhcmdldCBldmVudFBoYXNlIG1ldGFLZXkgcmVsYXRlZFRhcmdl
dCBzaGlmdEtleSB0YXJnZXQgdGltZVN0YW1wIHZpZXcgd2hpY2giLnNwbGl0KCIgIiksZml4SG9v
a3M6e30sa2V5SG9va3M6e3Byb3BzOiJjaGFyIGNoYXJDb2RlIGtleSBrZXlDb2RlIi5zcGxpdCgi
ICIpLGZpbHRlcjpmdW5jdGlvbihlLHQpe3JldHVybiBlLndoaWNoPT1udWxsJiYoZS53aGljaD10
LmNoYXJDb2RlIT1udWxsP3QuY2hhckNvZGU6dC5rZXlDb2RlKSxlfX0sbW91c2VIb29rczp7cHJv
cHM6ImJ1dHRvbiBidXR0b25zIGNsaWVudFggY2xpZW50WSBmcm9tRWxlbWVudCBvZmZzZXRYIG9m
ZnNldFkgcGFnZVggcGFnZVkgc2NyZWVuWCBzY3JlZW5ZIHRvRWxlbWVudCIuc3BsaXQoIiAiKSxm
aWx0ZXI6ZnVuY3Rpb24oZSxuKXt2YXIgcixzLG8sdT1uLmJ1dHRvbixhPW4uZnJvbUVsZW1lbnQ7
cmV0dXJuIGUucGFnZVg9PW51bGwmJm4uY2xpZW50WCE9bnVsbCYmKHI9ZS50YXJnZXQub3duZXJE
b2N1bWVudHx8aSxzPXIuZG9jdW1lbnRFbGVtZW50LG89ci5ib2R5LGUucGFnZVg9bi5jbGllbnRY
KyhzJiZzLnNjcm9sbExlZnR8fG8mJm8uc2Nyb2xsTGVmdHx8MCktKHMmJnMuY2xpZW50TGVmdHx8
byYmby5jbGllbnRMZWZ0fHwwKSxlLnBhZ2VZPW4uY2xpZW50WSsocyYmcy5zY3JvbGxUb3B8fG8m
Jm8uc2Nyb2xsVG9wfHwwKS0ocyYmcy5jbGllbnRUb3B8fG8mJm8uY2xpZW50VG9wfHwwKSksIWUu
cmVsYXRlZFRhcmdldCYmYSYmKGUucmVsYXRlZFRhcmdldD1hPT09ZS50YXJnZXQ/bi50b0VsZW1l
bnQ6YSksIWUud2hpY2gmJnUhPT10JiYoZS53aGljaD11JjE/MTp1JjI/Mzp1JjQ/MjowKSxlfX0s
Zml4OmZ1bmN0aW9uKGUpe2lmKGVbdi5leHBhbmRvXSlyZXR1cm4gZTt2YXIgdCxuLHI9ZSxzPXYu
ZXZlbnQuZml4SG9va3NbZS50eXBlXXx8e30sbz1zLnByb3BzP3RoaXMucHJvcHMuY29uY2F0KHMu
cHJvcHMpOnRoaXMucHJvcHM7ZT12LkV2ZW50KHIpO2Zvcih0PW8ubGVuZ3RoO3Q7KW49b1stLXRd
LGVbbl09cltuXTtyZXR1cm4gZS50YXJnZXR8fChlLnRhcmdldD1yLnNyY0VsZW1lbnR8fGkpLGUu
dGFyZ2V0Lm5vZGVUeXBlPT09MyYmKGUudGFyZ2V0PWUudGFyZ2V0LnBhcmVudE5vZGUpLGUubWV0
YUtleT0hIWUubWV0YUtleSxzLmZpbHRlcj9zLmZpbHRlcihlLHIpOmV9LHNwZWNpYWw6e2xvYWQ6
e25vQnViYmxlOiEwfSxmb2N1czp7ZGVsZWdhdGVUeXBlOiJmb2N1c2luIn0sYmx1cjp7ZGVsZWdh
dGVUeXBlOiJmb2N1c291dCJ9LGJlZm9yZXVubG9hZDp7c2V0dXA6ZnVuY3Rpb24oZSx0LG4pe3Yu
aXNXaW5kb3codGhpcykmJih0aGlzLm9uYmVmb3JldW5sb2FkPW4pfSx0ZWFyZG93bjpmdW5jdGlv
bihlLHQpe3RoaXMub25iZWZvcmV1bmxvYWQ9PT10JiYodGhpcy5vbmJlZm9yZXVubG9hZD1udWxs
KX19fSxzaW11bGF0ZTpmdW5jdGlvbihlLHQsbixyKXt2YXIgaT12LmV4dGVuZChuZXcgdi5FdmVu
dCxuLHt0eXBlOmUsaXNTaW11bGF0ZWQ6ITAsb3JpZ2luYWxFdmVudDp7fX0pO3I/di5ldmVudC50
cmlnZ2VyKGksbnVsbCx0KTp2LmV2ZW50LmRpc3BhdGNoLmNhbGwodCxpKSxpLmlzRGVmYXVsdFBy
ZXZlbnRlZCgpJiZuLnByZXZlbnREZWZhdWx0KCl9fSx2LmV2ZW50LmhhbmRsZT12LmV2ZW50LmRp
c3BhdGNoLHYucmVtb3ZlRXZlbnQ9aS5yZW1vdmVFdmVudExpc3RlbmVyP2Z1bmN0aW9uKGUsdCxu
KXtlLnJlbW92ZUV2ZW50TGlzdGVuZXImJmUucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LG4sITEpfTpm
dW5jdGlvbihlLHQsbil7dmFyIHI9Im9uIit0O2UuZGV0YWNoRXZlbnQmJih0eXBlb2YgZVtyXT09
InVuZGVmaW5lZCImJihlW3JdPW51bGwpLGUuZGV0YWNoRXZlbnQocixuKSl9LHYuRXZlbnQ9ZnVu
Y3Rpb24oZSx0KXtpZighKHRoaXMgaW5zdGFuY2VvZiB2LkV2ZW50KSlyZXR1cm4gbmV3IHYuRXZl
bnQoZSx0KTtlJiZlLnR5cGU/KHRoaXMub3JpZ2luYWxFdmVudD1lLHRoaXMudHlwZT1lLnR5cGUs
dGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9ZS5kZWZhdWx0UHJldmVudGVkfHxlLnJldHVyblZhbHVl
PT09ITF8fGUuZ2V0UHJldmVudERlZmF1bHQmJmUuZ2V0UHJldmVudERlZmF1bHQoKT90dDpldCk6
dGhpcy50eXBlPWUsdCYmdi5leHRlbmQodGhpcyx0KSx0aGlzLnRpbWVTdGFtcD1lJiZlLnRpbWVT
dGFtcHx8di5ub3coKSx0aGlzW3YuZXhwYW5kb109ITB9LHYuRXZlbnQucHJvdG90eXBlPXtwcmV2
ZW50RGVmYXVsdDpmdW5jdGlvbigpe3RoaXMuaXNEZWZhdWx0UHJldmVudGVkPXR0O3ZhciBlPXRo
aXMub3JpZ2luYWxFdmVudDtpZighZSlyZXR1cm47ZS5wcmV2ZW50RGVmYXVsdD9lLnByZXZlbnRE
ZWZhdWx0KCk6ZS5yZXR1cm5WYWx1ZT0hMX0sc3RvcFByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dGhp
cy5pc1Byb3BhZ2F0aW9uU3RvcHBlZD10dDt2YXIgZT10aGlzLm9yaWdpbmFsRXZlbnQ7aWYoIWUp
cmV0dXJuO2Uuc3RvcFByb3BhZ2F0aW9uJiZlLnN0b3BQcm9wYWdhdGlvbigpLGUuY2FuY2VsQnVi
YmxlPSEwfSxzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb246ZnVuY3Rpb24oKXt0aGlzLmlzSW1tZWRp
YXRlUHJvcGFnYXRpb25TdG9wcGVkPXR0LHRoaXMuc3RvcFByb3BhZ2F0aW9uKCl9LGlzRGVmYXVs
dFByZXZlbnRlZDpldCxpc1Byb3BhZ2F0aW9uU3RvcHBlZDpldCxpc0ltbWVkaWF0ZVByb3BhZ2F0
aW9uU3RvcHBlZDpldH0sdi5lYWNoKHttb3VzZWVudGVyOiJtb3VzZW92ZXIiLG1vdXNlbGVhdmU6
Im1vdXNlb3V0In0sZnVuY3Rpb24oZSx0KXt2LmV2ZW50LnNwZWNpYWxbZV09e2RlbGVnYXRlVHlw
ZTp0LGJpbmRUeXBlOnQsaGFuZGxlOmZ1bmN0aW9uKGUpe3ZhciBuLHI9dGhpcyxpPWUucmVsYXRl
ZFRhcmdldCxzPWUuaGFuZGxlT2JqLG89cy5zZWxlY3RvcjtpZighaXx8aSE9PXImJiF2LmNvbnRh
aW5zKHIsaSkpZS50eXBlPXMub3JpZ1R5cGUsbj1zLmhhbmRsZXIuYXBwbHkodGhpcyxhcmd1bWVu
dHMpLGUudHlwZT10O3JldHVybiBufX19KSx2LnN1cHBvcnQuc3VibWl0QnViYmxlc3x8KHYuZXZl
bnQuc3BlY2lhbC5zdWJtaXQ9e3NldHVwOmZ1bmN0aW9uKCl7aWYodi5ub2RlTmFtZSh0aGlzLCJm
b3JtIikpcmV0dXJuITE7di5ldmVudC5hZGQodGhpcywiY2xpY2suX3N1Ym1pdCBrZXlwcmVzcy5f
c3VibWl0IixmdW5jdGlvbihlKXt2YXIgbj1lLnRhcmdldCxyPXYubm9kZU5hbWUobiwiaW5wdXQi
KXx8di5ub2RlTmFtZShuLCJidXR0b24iKT9uLmZvcm06dDtyJiYhdi5fZGF0YShyLCJfc3VibWl0
X2F0dGFjaGVkIikmJih2LmV2ZW50LmFkZChyLCJzdWJtaXQuX3N1Ym1pdCIsZnVuY3Rpb24oZSl7
ZS5fc3VibWl0X2J1YmJsZT0hMH0pLHYuX2RhdGEociwiX3N1Ym1pdF9hdHRhY2hlZCIsITApKX0p
fSxwb3N0RGlzcGF0Y2g6ZnVuY3Rpb24oZSl7ZS5fc3VibWl0X2J1YmJsZSYmKGRlbGV0ZSBlLl9z
dWJtaXRfYnViYmxlLHRoaXMucGFyZW50Tm9kZSYmIWUuaXNUcmlnZ2VyJiZ2LmV2ZW50LnNpbXVs
YXRlKCJzdWJtaXQiLHRoaXMucGFyZW50Tm9kZSxlLCEwKSl9LHRlYXJkb3duOmZ1bmN0aW9uKCl7
aWYodi5ub2RlTmFtZSh0aGlzLCJmb3JtIikpcmV0dXJuITE7di5ldmVudC5yZW1vdmUodGhpcywi
Ll9zdWJtaXQiKX19KSx2LnN1cHBvcnQuY2hhbmdlQnViYmxlc3x8KHYuZXZlbnQuc3BlY2lhbC5j
aGFuZ2U9e3NldHVwOmZ1bmN0aW9uKCl7aWYoJC50ZXN0KHRoaXMubm9kZU5hbWUpKXtpZih0aGlz
LnR5cGU9PT0iY2hlY2tib3gifHx0aGlzLnR5cGU9PT0icmFkaW8iKXYuZXZlbnQuYWRkKHRoaXMs
InByb3BlcnR5Y2hhbmdlLl9jaGFuZ2UiLGZ1bmN0aW9uKGUpe2Uub3JpZ2luYWxFdmVudC5wcm9w
ZXJ0eU5hbWU9PT0iY2hlY2tlZCImJih0aGlzLl9qdXN0X2NoYW5nZWQ9ITApfSksdi5ldmVudC5h
ZGQodGhpcywiY2xpY2suX2NoYW5nZSIsZnVuY3Rpb24oZSl7dGhpcy5fanVzdF9jaGFuZ2VkJiYh
ZS5pc1RyaWdnZXImJih0aGlzLl9qdXN0X2NoYW5nZWQ9ITEpLHYuZXZlbnQuc2ltdWxhdGUoImNo
YW5nZSIsdGhpcyxlLCEwKX0pO3JldHVybiExfXYuZXZlbnQuYWRkKHRoaXMsImJlZm9yZWFjdGl2
YXRlLl9jaGFuZ2UiLGZ1bmN0aW9uKGUpe3ZhciB0PWUudGFyZ2V0OyQudGVzdCh0Lm5vZGVOYW1l
KSYmIXYuX2RhdGEodCwiX2NoYW5nZV9hdHRhY2hlZCIpJiYodi5ldmVudC5hZGQodCwiY2hhbmdl
Ll9jaGFuZ2UiLGZ1bmN0aW9uKGUpe3RoaXMucGFyZW50Tm9kZSYmIWUuaXNTaW11bGF0ZWQmJiFl
LmlzVHJpZ2dlciYmdi5ldmVudC5zaW11bGF0ZSgiY2hhbmdlIix0aGlzLnBhcmVudE5vZGUsZSwh
MCl9KSx2Ll9kYXRhKHQsIl9jaGFuZ2VfYXR0YWNoZWQiLCEwKSl9KX0saGFuZGxlOmZ1bmN0aW9u
KGUpe3ZhciB0PWUudGFyZ2V0O2lmKHRoaXMhPT10fHxlLmlzU2ltdWxhdGVkfHxlLmlzVHJpZ2dl
cnx8dC50eXBlIT09InJhZGlvIiYmdC50eXBlIT09ImNoZWNrYm94IilyZXR1cm4gZS5oYW5kbGVP
YmouaGFuZGxlci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LHRlYXJkb3duOmZ1bmN0aW9uKCl7cmV0
dXJuIHYuZXZlbnQucmVtb3ZlKHRoaXMsIi5fY2hhbmdlIiksISQudGVzdCh0aGlzLm5vZGVOYW1l
KX19KSx2LnN1cHBvcnQuZm9jdXNpbkJ1YmJsZXN8fHYuZWFjaCh7Zm9jdXM6ImZvY3VzaW4iLGJs
dXI6ImZvY3Vzb3V0In0sZnVuY3Rpb24oZSx0KXt2YXIgbj0wLHI9ZnVuY3Rpb24oZSl7di5ldmVu
dC5zaW11bGF0ZSh0LGUudGFyZ2V0LHYuZXZlbnQuZml4KGUpLCEwKX07di5ldmVudC5zcGVjaWFs
W3RdPXtzZXR1cDpmdW5jdGlvbigpe24rKz09PTAmJmkuYWRkRXZlbnRMaXN0ZW5lcihlLHIsITAp
fSx0ZWFyZG93bjpmdW5jdGlvbigpey0tbj09PTAmJmkucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLHIs
ITApfX19KSx2LmZuLmV4dGVuZCh7b246ZnVuY3Rpb24oZSxuLHIsaSxzKXt2YXIgbyx1O2lmKHR5
cGVvZiBlPT0ib2JqZWN0Iil7dHlwZW9mIG4hPSJzdHJpbmciJiYocj1yfHxuLG49dCk7Zm9yKHUg
aW4gZSl0aGlzLm9uKHUsbixyLGVbdV0scyk7cmV0dXJuIHRoaXN9cj09bnVsbCYmaT09bnVsbD8o
aT1uLHI9bj10KTppPT1udWxsJiYodHlwZW9mIG49PSJzdHJpbmciPyhpPXIscj10KTooaT1yLHI9
bixuPXQpKTtpZihpPT09ITEpaT1ldDtlbHNlIGlmKCFpKXJldHVybiB0aGlzO3JldHVybiBzPT09
MSYmKG89aSxpPWZ1bmN0aW9uKGUpe3JldHVybiB2KCkub2ZmKGUpLG8uYXBwbHkodGhpcyxhcmd1
bWVudHMpfSxpLmd1aWQ9by5ndWlkfHwoby5ndWlkPXYuZ3VpZCsrKSksdGhpcy5lYWNoKGZ1bmN0
aW9uKCl7di5ldmVudC5hZGQodGhpcyxlLGkscixuKX0pfSxvbmU6ZnVuY3Rpb24oZSx0LG4scil7
cmV0dXJuIHRoaXMub24oZSx0LG4sciwxKX0sb2ZmOmZ1bmN0aW9uKGUsbixyKXt2YXIgaSxzO2lm
KGUmJmUucHJldmVudERlZmF1bHQmJmUuaGFuZGxlT2JqKXJldHVybiBpPWUuaGFuZGxlT2JqLHYo
ZS5kZWxlZ2F0ZVRhcmdldCkub2ZmKGkubmFtZXNwYWNlP2kub3JpZ1R5cGUrIi4iK2kubmFtZXNw
YWNlOmkub3JpZ1R5cGUsaS5zZWxlY3RvcixpLmhhbmRsZXIpLHRoaXM7aWYodHlwZW9mIGU9PSJv
YmplY3QiKXtmb3IocyBpbiBlKXRoaXMub2ZmKHMsbixlW3NdKTtyZXR1cm4gdGhpc31pZihuPT09
ITF8fHR5cGVvZiBuPT0iZnVuY3Rpb24iKXI9bixuPXQ7cmV0dXJuIHI9PT0hMSYmKHI9ZXQpLHRo
aXMuZWFjaChmdW5jdGlvbigpe3YuZXZlbnQucmVtb3ZlKHRoaXMsZSxyLG4pfSl9LGJpbmQ6ZnVu
Y3Rpb24oZSx0LG4pe3JldHVybiB0aGlzLm9uKGUsbnVsbCx0LG4pfSx1bmJpbmQ6ZnVuY3Rpb24o
ZSx0KXtyZXR1cm4gdGhpcy5vZmYoZSxudWxsLHQpfSxsaXZlOmZ1bmN0aW9uKGUsdCxuKXtyZXR1
cm4gdih0aGlzLmNvbnRleHQpLm9uKGUsdGhpcy5zZWxlY3Rvcix0LG4pLHRoaXN9LGRpZTpmdW5j
dGlvbihlLHQpe3JldHVybiB2KHRoaXMuY29udGV4dCkub2ZmKGUsdGhpcy5zZWxlY3Rvcnx8Iioq
Iix0KSx0aGlzfSxkZWxlZ2F0ZTpmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gdGhpcy5vbih0LGUs
bixyKX0sdW5kZWxlZ2F0ZTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9
PT0xP3RoaXMub2ZmKGUsIioqIik6dGhpcy5vZmYodCxlfHwiKioiLG4pfSx0cmlnZ2VyOmZ1bmN0
aW9uKGUsdCl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3YuZXZlbnQudHJpZ2dlcihlLHQs
dGhpcyl9KX0sdHJpZ2dlckhhbmRsZXI6ZnVuY3Rpb24oZSx0KXtpZih0aGlzWzBdKXJldHVybiB2
LmV2ZW50LnRyaWdnZXIoZSx0LHRoaXNbMF0sITApfSx0b2dnbGU6ZnVuY3Rpb24oZSl7dmFyIHQ9
YXJndW1lbnRzLG49ZS5ndWlkfHx2Lmd1aWQrKyxyPTAsaT1mdW5jdGlvbihuKXt2YXIgaT0odi5f
ZGF0YSh0aGlzLCJsYXN0VG9nZ2xlIitlLmd1aWQpfHwwKSVyO3JldHVybiB2Ll9kYXRhKHRoaXMs
Imxhc3RUb2dnbGUiK2UuZ3VpZCxpKzEpLG4ucHJldmVudERlZmF1bHQoKSx0W2ldLmFwcGx5KHRo
aXMsYXJndW1lbnRzKXx8ITF9O2kuZ3VpZD1uO3doaWxlKHI8dC5sZW5ndGgpdFtyKytdLmd1aWQ9
bjtyZXR1cm4gdGhpcy5jbGljayhpKX0saG92ZXI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5t
b3VzZWVudGVyKGUpLm1vdXNlbGVhdmUodHx8ZSl9fSksdi5lYWNoKCJibHVyIGZvY3VzIGZvY3Vz
aW4gZm9jdXNvdXQgbG9hZCByZXNpemUgc2Nyb2xsIHVubG9hZCBjbGljayBkYmxjbGljayBtb3Vz
ZWRvd24gbW91c2V1cCBtb3VzZW1vdmUgbW91c2VvdmVyIG1vdXNlb3V0IG1vdXNlZW50ZXIgbW91
c2VsZWF2ZSBjaGFuZ2Ugc2VsZWN0IHN1Ym1pdCBrZXlkb3duIGtleXByZXNzIGtleXVwIGVycm9y
IGNvbnRleHRtZW51Ii5zcGxpdCgiICIpLGZ1bmN0aW9uKGUsdCl7di5mblt0XT1mdW5jdGlvbihl
LG4pe3JldHVybiBuPT1udWxsJiYobj1lLGU9bnVsbCksYXJndW1lbnRzLmxlbmd0aD4wP3RoaXMu
b24odCxudWxsLGUsbik6dGhpcy50cmlnZ2VyKHQpfSxRLnRlc3QodCkmJih2LmV2ZW50LmZpeEhv
b2tzW3RdPXYuZXZlbnQua2V5SG9va3MpLEcudGVzdCh0KSYmKHYuZXZlbnQuZml4SG9va3NbdF09
di5ldmVudC5tb3VzZUhvb2tzKX0pLGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbnQoZSx0LG4scil7
bj1ufHxbXSx0PXR8fGc7dmFyIGkscyxhLGYsbD10Lm5vZGVUeXBlO2lmKCFlfHx0eXBlb2YgZSE9
InN0cmluZyIpcmV0dXJuIG47aWYobCE9PTEmJmwhPT05KXJldHVybltdO2E9byh0KTtpZighYSYm
IXIpaWYoaT1SLmV4ZWMoZSkpaWYoZj1pWzFdKXtpZihsPT09OSl7cz10LmdldEVsZW1lbnRCeUlk
KGYpO2lmKCFzfHwhcy5wYXJlbnROb2RlKXJldHVybiBuO2lmKHMuaWQ9PT1mKXJldHVybiBuLnB1
c2gocyksbn1lbHNlIGlmKHQub3duZXJEb2N1bWVudCYmKHM9dC5vd25lckRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKGYpKSYmdSh0LHMpJiZzLmlkPT09ZilyZXR1cm4gbi5wdXNoKHMpLG59ZWxzZXtp
ZihpWzJdKXJldHVybiBTLmFwcGx5KG4seC5jYWxsKHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoZSks
MCkpLG47aWYoKGY9aVszXSkmJlomJnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSlyZXR1cm4gUy5h
cHBseShuLHguY2FsbCh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoZiksMCkpLG59cmV0dXJuIHZ0
KGUucmVwbGFjZShqLCIkMSIpLHQsbixyLGEpfWZ1bmN0aW9uIHJ0KGUpe3JldHVybiBmdW5jdGlv
bih0KXt2YXIgbj10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuIG49PT0iaW5wdXQiJiZ0
LnR5cGU9PT1lfX1mdW5jdGlvbiBpdChlKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIG49dC5ub2Rl
TmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybihuPT09ImlucHV0Inx8bj09PSJidXR0b24iKSYmdC50
eXBlPT09ZX19ZnVuY3Rpb24gc3QoZSl7cmV0dXJuIE4oZnVuY3Rpb24odCl7cmV0dXJuIHQ9K3Qs
TihmdW5jdGlvbihuLHIpe3ZhciBpLHM9ZShbXSxuLmxlbmd0aCx0KSxvPXMubGVuZ3RoO3doaWxl
KG8tLSluW2k9c1tvXV0mJihuW2ldPSEocltpXT1uW2ldKSl9KX0pfWZ1bmN0aW9uIG90KGUsdCxu
KXtpZihlPT09dClyZXR1cm4gbjt2YXIgcj1lLm5leHRTaWJsaW5nO3doaWxlKHIpe2lmKHI9PT10
KXJldHVybi0xO3I9ci5uZXh0U2libGluZ31yZXR1cm4gMX1mdW5jdGlvbiB1dChlLHQpe3ZhciBu
LHIscyxvLHUsYSxmLGw9TFtkXVtlKyIgIl07aWYobClyZXR1cm4gdD8wOmwuc2xpY2UoMCk7dT1l
LGE9W10sZj1pLnByZUZpbHRlcjt3aGlsZSh1KXtpZighbnx8KHI9Ri5leGVjKHUpKSlyJiYodT11
LnNsaWNlKHJbMF0ubGVuZ3RoKXx8dSksYS5wdXNoKHM9W10pO249ITE7aWYocj1JLmV4ZWModSkp
cy5wdXNoKG49bmV3IG0oci5zaGlmdCgpKSksdT11LnNsaWNlKG4ubGVuZ3RoKSxuLnR5cGU9clsw
XS5yZXBsYWNlKGosIiAiKTtmb3IobyBpbiBpLmZpbHRlcikocj1KW29dLmV4ZWModSkpJiYoIWZb
b118fChyPWZbb10ocikpKSYmKHMucHVzaChuPW5ldyBtKHIuc2hpZnQoKSkpLHU9dS5zbGljZShu
Lmxlbmd0aCksbi50eXBlPW8sbi5tYXRjaGVzPXIpO2lmKCFuKWJyZWFrfXJldHVybiB0P3UubGVu
Z3RoOnU/bnQuZXJyb3IoZSk6TChlLGEpLnNsaWNlKDApfWZ1bmN0aW9uIGF0KGUsdCxyKXt2YXIg
aT10LmRpcixzPXImJnQuZGlyPT09InBhcmVudE5vZGUiLG89dysrO3JldHVybiB0LmZpcnN0P2Z1
bmN0aW9uKHQsbixyKXt3aGlsZSh0PXRbaV0paWYoc3x8dC5ub2RlVHlwZT09PTEpcmV0dXJuIGUo
dCxuLHIpfTpmdW5jdGlvbih0LHIsdSl7aWYoIXUpe3ZhciBhLGY9YisiICIrbysiICIsbD1mK247
d2hpbGUodD10W2ldKWlmKHN8fHQubm9kZVR5cGU9PT0xKXtpZigoYT10W2RdKT09PWwpcmV0dXJu
IHQuc2l6c2V0O2lmKHR5cGVvZiBhPT0ic3RyaW5nIiYmYS5pbmRleE9mKGYpPT09MCl7aWYodC5z
aXpzZXQpcmV0dXJuIHR9ZWxzZXt0W2RdPWw7aWYoZSh0LHIsdSkpcmV0dXJuIHQuc2l6c2V0PSEw
LHQ7dC5zaXpzZXQ9ITF9fX1lbHNlIHdoaWxlKHQ9dFtpXSlpZihzfHx0Lm5vZGVUeXBlPT09MSlp
ZihlKHQscix1KSlyZXR1cm4gdH19ZnVuY3Rpb24gZnQoZSl7cmV0dXJuIGUubGVuZ3RoPjE/ZnVu
Y3Rpb24odCxuLHIpe3ZhciBpPWUubGVuZ3RoO3doaWxlKGktLSlpZighZVtpXSh0LG4scikpcmV0
dXJuITE7cmV0dXJuITB9OmVbMF19ZnVuY3Rpb24gbHQoZSx0LG4scixpKXt2YXIgcyxvPVtdLHU9
MCxhPWUubGVuZ3RoLGY9dCE9bnVsbDtmb3IoO3U8YTt1KyspaWYocz1lW3VdKWlmKCFufHxuKHMs
cixpKSlvLnB1c2gocyksZiYmdC5wdXNoKHUpO3JldHVybiBvfWZ1bmN0aW9uIGN0KGUsdCxuLHIs
aSxzKXtyZXR1cm4gciYmIXJbZF0mJihyPWN0KHIpKSxpJiYhaVtkXSYmKGk9Y3QoaSxzKSksTihm
dW5jdGlvbihzLG8sdSxhKXt2YXIgZixsLGMsaD1bXSxwPVtdLGQ9by5sZW5ndGgsdj1zfHxkdCh0
fHwiKiIsdS5ub2RlVHlwZT9bdV06dSxbXSksbT1lJiYoc3x8IXQpP2x0KHYsaCxlLHUsYSk6dixn
PW4/aXx8KHM/ZTpkfHxyKT9bXTpvOm07biYmbihtLGcsdSxhKTtpZihyKXtmPWx0KGcscCkscihm
LFtdLHUsYSksbD1mLmxlbmd0aDt3aGlsZShsLS0paWYoYz1mW2xdKWdbcFtsXV09IShtW3BbbF1d
PWMpfWlmKHMpe2lmKGl8fGUpe2lmKGkpe2Y9W10sbD1nLmxlbmd0aDt3aGlsZShsLS0pKGM9Z1ts
XSkmJmYucHVzaChtW2xdPWMpO2kobnVsbCxnPVtdLGYsYSl9bD1nLmxlbmd0aDt3aGlsZShsLS0p
KGM9Z1tsXSkmJihmPWk/VC5jYWxsKHMsYyk6aFtsXSk+LTEmJihzW2ZdPSEob1tmXT1jKSl9fWVs
c2UgZz1sdChnPT09bz9nLnNwbGljZShkLGcubGVuZ3RoKTpnKSxpP2kobnVsbCxvLGcsYSk6Uy5h
cHBseShvLGcpfSl9ZnVuY3Rpb24gaHQoZSl7dmFyIHQsbixyLHM9ZS5sZW5ndGgsbz1pLnJlbGF0
aXZlW2VbMF0udHlwZV0sdT1vfHxpLnJlbGF0aXZlWyIgIl0sYT1vPzE6MCxmPWF0KGZ1bmN0aW9u
KGUpe3JldHVybiBlPT09dH0sdSwhMCksbD1hdChmdW5jdGlvbihlKXtyZXR1cm4gVC5jYWxsKHQs
ZSk+LTF9LHUsITApLGg9W2Z1bmN0aW9uKGUsbixyKXtyZXR1cm4hbyYmKHJ8fG4hPT1jKXx8KCh0
PW4pLm5vZGVUeXBlP2YoZSxuLHIpOmwoZSxuLHIpKX1dO2Zvcig7YTxzO2ErKylpZihuPWkucmVs
YXRpdmVbZVthXS50eXBlXSloPVthdChmdChoKSxuKV07ZWxzZXtuPWkuZmlsdGVyW2VbYV0udHlw
ZV0uYXBwbHkobnVsbCxlW2FdLm1hdGNoZXMpO2lmKG5bZF0pe3I9KythO2Zvcig7cjxzO3IrKylp
ZihpLnJlbGF0aXZlW2Vbcl0udHlwZV0pYnJlYWs7cmV0dXJuIGN0KGE+MSYmZnQoaCksYT4xJiZl
LnNsaWNlKDAsYS0xKS5qb2luKCIiKS5yZXBsYWNlKGosIiQxIiksbixhPHImJmh0KGUuc2xpY2Uo
YSxyKSkscjxzJiZodChlPWUuc2xpY2UocikpLHI8cyYmZS5qb2luKCIiKSl9aC5wdXNoKG4pfXJl
dHVybiBmdChoKX1mdW5jdGlvbiBwdChlLHQpe3ZhciByPXQubGVuZ3RoPjAscz1lLmxlbmd0aD4w
LG89ZnVuY3Rpb24odSxhLGYsbCxoKXt2YXIgcCxkLHYsbT1bXSx5PTAsdz0iMCIseD11JiZbXSxU
PWghPW51bGwsTj1jLEM9dXx8cyYmaS5maW5kLlRBRygiKiIsaCYmYS5wYXJlbnROb2RlfHxhKSxr
PWIrPU49PW51bGw/MTpNYXRoLkU7VCYmKGM9YSE9PWcmJmEsbj1vLmVsKTtmb3IoOyhwPUNbd10p
IT1udWxsO3crKyl7aWYocyYmcCl7Zm9yKGQ9MDt2PWVbZF07ZCsrKWlmKHYocCxhLGYpKXtsLnB1
c2gocCk7YnJlYWt9VCYmKGI9ayxuPSsrby5lbCl9ciYmKChwPSF2JiZwKSYmeS0tLHUmJngucHVz
aChwKSl9eSs9dztpZihyJiZ3IT09eSl7Zm9yKGQ9MDt2PXRbZF07ZCsrKXYoeCxtLGEsZik7aWYo
dSl7aWYoeT4wKXdoaWxlKHctLSkheFt3XSYmIW1bd10mJihtW3ddPUUuY2FsbChsKSk7bT1sdCht
KX1TLmFwcGx5KGwsbSksVCYmIXUmJm0ubGVuZ3RoPjAmJnkrdC5sZW5ndGg+MSYmbnQudW5pcXVl
U29ydChsKX1yZXR1cm4gVCYmKGI9ayxjPU4pLHh9O3JldHVybiBvLmVsPTAscj9OKG8pOm99ZnVu
Y3Rpb24gZHQoZSx0LG4pe3ZhciByPTAsaT10Lmxlbmd0aDtmb3IoO3I8aTtyKyspbnQoZSx0W3Jd
LG4pO3JldHVybiBufWZ1bmN0aW9uIHZ0KGUsdCxuLHIscyl7dmFyIG8sdSxmLGwsYyxoPXV0KGUp
LHA9aC5sZW5ndGg7aWYoIXImJmgubGVuZ3RoPT09MSl7dT1oWzBdPWhbMF0uc2xpY2UoMCk7aWYo
dS5sZW5ndGg+MiYmKGY9dVswXSkudHlwZT09PSJJRCImJnQubm9kZVR5cGU9PT05JiYhcyYmaS5y
ZWxhdGl2ZVt1WzFdLnR5cGVdKXt0PWkuZmluZC5JRChmLm1hdGNoZXNbMF0ucmVwbGFjZSgkLCIi
KSx0LHMpWzBdO2lmKCF0KXJldHVybiBuO2U9ZS5zbGljZSh1LnNoaWZ0KCkubGVuZ3RoKX1mb3Io
bz1KLlBPUy50ZXN0KGUpPy0xOnUubGVuZ3RoLTE7bz49MDtvLS0pe2Y9dVtvXTtpZihpLnJlbGF0
aXZlW2w9Zi50eXBlXSlicmVhaztpZihjPWkuZmluZFtsXSlpZihyPWMoZi5tYXRjaGVzWzBdLnJl
cGxhY2UoJCwiIiksei50ZXN0KHVbMF0udHlwZSkmJnQucGFyZW50Tm9kZXx8dCxzKSl7dS5zcGxp
Y2UobywxKSxlPXIubGVuZ3RoJiZ1LmpvaW4oIiIpO2lmKCFlKXJldHVybiBTLmFwcGx5KG4seC5j
YWxsKHIsMCkpLG47YnJlYWt9fX1yZXR1cm4gYShlLGgpKHIsdCxzLG4sei50ZXN0KGUpKSxufWZ1
bmN0aW9uIG10KCl7fXZhciBuLHIsaSxzLG8sdSxhLGYsbCxjLGg9ITAscD0idW5kZWZpbmVkIixk
PSgic2l6Y2FjaGUiK01hdGgucmFuZG9tKCkpLnJlcGxhY2UoIi4iLCIiKSxtPVN0cmluZyxnPWUu
ZG9jdW1lbnQseT1nLmRvY3VtZW50RWxlbWVudCxiPTAsdz0wLEU9W10ucG9wLFM9W10ucHVzaCx4
PVtdLnNsaWNlLFQ9W10uaW5kZXhPZnx8ZnVuY3Rpb24oZSl7dmFyIHQ9MCxuPXRoaXMubGVuZ3Ro
O2Zvcig7dDxuO3QrKylpZih0aGlzW3RdPT09ZSlyZXR1cm4gdDtyZXR1cm4tMX0sTj1mdW5jdGlv
bihlLHQpe3JldHVybiBlW2RdPXQ9PW51bGx8fHQsZX0sQz1mdW5jdGlvbigpe3ZhciBlPXt9LHQ9
W107cmV0dXJuIE4oZnVuY3Rpb24obixyKXtyZXR1cm4gdC5wdXNoKG4pPmkuY2FjaGVMZW5ndGgm
JmRlbGV0ZSBlW3Quc2hpZnQoKV0sZVtuKyIgIl09cn0sZSl9LGs9QygpLEw9QygpLEE9QygpLE89
IltcXHgyMFxcdFxcclxcblxcZl0iLE09Iig/OlxcXFwufFstXFx3XXxbXlxceDAwLVxceGEwXSkr
IixfPU0ucmVwbGFjZSgidyIsIncjIiksRD0iKFsqXiR8IX5dPz0pIixQPSJcXFsiK08rIiooIitN
KyIpIitPKyIqKD86IitEK08rIiooPzooWydcIl0pKCg/OlxcXFwufFteXFxcXF0pKj8pXFwzfCgi
K18rIil8KXwpIitPKyIqXFxdIixIPSI6KCIrTSsiKSg/OlxcKCg/OihbJ1wiXSkoKD86XFxcXC58
W15cXFxcXSkqPylcXDJ8KFteKClbXFxdXSp8KD86KD86IitQKyIpfFteOl18XFxcXC4pKnwuKikp
XFwpfCkiLEI9IjooZXZlbnxvZGR8ZXF8Z3R8bHR8bnRofGZpcnN0fGxhc3QpKD86XFwoIitPKyIq
KCg/Oi1cXGQpP1xcZCopIitPKyIqXFwpfCkoPz1bXi1dfCQpIixqPW5ldyBSZWdFeHAoIl4iK08r
Iit8KCg/Ol58W15cXFxcXSkoPzpcXFxcLikqKSIrTysiKyQiLCJnIiksRj1uZXcgUmVnRXhwKCJe
IitPKyIqLCIrTysiKiIpLEk9bmV3IFJlZ0V4cCgiXiIrTysiKihbXFx4MjBcXHRcXHJcXG5cXGY+
K35dKSIrTysiKiIpLHE9bmV3IFJlZ0V4cChIKSxSPS9eKD86IyhbXHdcLV0rKXwoXHcrKXxcLihb
XHdcLV0rKSkkLyxVPS9eOm5vdC8sej0vW1x4MjBcdFxyXG5cZl0qWyt+XS8sVz0vOm5vdFwoJC8s
WD0vaFxkL2ksVj0vaW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbi9pLCQ9L1xcKD8hXFwpL2cs
Sj17SUQ6bmV3IFJlZ0V4cCgiXiMoIitNKyIpIiksQ0xBU1M6bmV3IFJlZ0V4cCgiXlxcLigiK00r
IikiKSxOQU1FOm5ldyBSZWdFeHAoIl5cXFtuYW1lPVsnXCJdPygiK00rIilbJ1wiXT9cXF0iKSxU
QUc6bmV3IFJlZ0V4cCgiXigiK00ucmVwbGFjZSgidyIsIncqIikrIikiKSxBVFRSOm5ldyBSZWdF
eHAoIl4iK1ApLFBTRVVETzpuZXcgUmVnRXhwKCJeIitIKSxQT1M6bmV3IFJlZ0V4cChCLCJpIiks
Q0hJTEQ6bmV3IFJlZ0V4cCgiXjoob25seXxudGh8Zmlyc3R8bGFzdCktY2hpbGQoPzpcXCgiK08r
IiooZXZlbnxvZGR8KChbKy1dfCkoXFxkKilufCkiK08rIiooPzooWystXXwpIitPKyIqKFxcZCsp
fCkpIitPKyIqXFwpfCkiLCJpIiksbmVlZHNDb250ZXh0Om5ldyBSZWdFeHAoIl4iK08rIipbPit+
XXwiK0IsImkiKX0sSz1mdW5jdGlvbihlKXt2YXIgdD1nLmNyZWF0ZUVsZW1lbnQoImRpdiIpO3Ry
eXtyZXR1cm4gZSh0KX1jYXRjaChuKXtyZXR1cm4hMX1maW5hbGx5e3Q9bnVsbH19LFE9SyhmdW5j
dGlvbihlKXtyZXR1cm4gZS5hcHBlbmRDaGlsZChnLmNyZWF0ZUNvbW1lbnQoIiIpKSwhZS5nZXRF
bGVtZW50c0J5VGFnTmFtZSgiKiIpLmxlbmd0aH0pLEc9SyhmdW5jdGlvbihlKXtyZXR1cm4gZS5p
bm5lckhUTUw9IjxhIGhyZWY9JyMnPjwvYT4iLGUuZmlyc3RDaGlsZCYmdHlwZW9mIGUuZmlyc3RD
aGlsZC5nZXRBdHRyaWJ1dGUhPT1wJiZlLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCJocmVmIik9
PT0iIyJ9KSxZPUsoZnVuY3Rpb24oZSl7ZS5pbm5lckhUTUw9IjxzZWxlY3Q+PC9zZWxlY3Q+Ijt2
YXIgdD10eXBlb2YgZS5sYXN0Q2hpbGQuZ2V0QXR0cmlidXRlKCJtdWx0aXBsZSIpO3JldHVybiB0
IT09ImJvb2xlYW4iJiZ0IT09InN0cmluZyJ9KSxaPUsoZnVuY3Rpb24oZSl7cmV0dXJuIGUuaW5u
ZXJIVE1MPSI8ZGl2IGNsYXNzPSdoaWRkZW4gZSc+PC9kaXY+PGRpdiBjbGFzcz0naGlkZGVuJz48
L2Rpdj4iLCFlLmdldEVsZW1lbnRzQnlDbGFzc05hbWV8fCFlLmdldEVsZW1lbnRzQnlDbGFzc05h
bWUoImUiKS5sZW5ndGg/ITE6KGUubGFzdENoaWxkLmNsYXNzTmFtZT0iZSIsZS5nZXRFbGVtZW50
c0J5Q2xhc3NOYW1lKCJlIikubGVuZ3RoPT09Mil9KSxldD1LKGZ1bmN0aW9uKGUpe2UuaWQ9ZCsw
LGUuaW5uZXJIVE1MPSI8YSBuYW1lPSciK2QrIic+PC9hPjxkaXYgbmFtZT0nIitkKyInPjwvZGl2
PiIseS5pbnNlcnRCZWZvcmUoZSx5LmZpcnN0Q2hpbGQpO3ZhciB0PWcuZ2V0RWxlbWVudHNCeU5h
bWUmJmcuZ2V0RWxlbWVudHNCeU5hbWUoZCkubGVuZ3RoPT09MitnLmdldEVsZW1lbnRzQnlOYW1l
KGQrMCkubGVuZ3RoO3JldHVybiByPSFnLmdldEVsZW1lbnRCeUlkKGQpLHkucmVtb3ZlQ2hpbGQo
ZSksdH0pO3RyeXt4LmNhbGwoeS5jaGlsZE5vZGVzLDApWzBdLm5vZGVUeXBlfWNhdGNoKHR0KXt4
PWZ1bmN0aW9uKGUpe3ZhciB0LG49W107Zm9yKDt0PXRoaXNbZV07ZSsrKW4ucHVzaCh0KTtyZXR1
cm4gbn19bnQubWF0Y2hlcz1mdW5jdGlvbihlLHQpe3JldHVybiBudChlLG51bGwsbnVsbCx0KX0s
bnQubWF0Y2hlc1NlbGVjdG9yPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG50KHQsbnVsbCxudWxsLFtl
XSkubGVuZ3RoPjB9LHM9bnQuZ2V0VGV4dD1mdW5jdGlvbihlKXt2YXIgdCxuPSIiLHI9MCxpPWUu
bm9kZVR5cGU7aWYoaSl7aWYoaT09PTF8fGk9PT05fHxpPT09MTEpe2lmKHR5cGVvZiBlLnRleHRD
b250ZW50PT0ic3RyaW5nIilyZXR1cm4gZS50ZXh0Q29udGVudDtmb3IoZT1lLmZpcnN0Q2hpbGQ7
ZTtlPWUubmV4dFNpYmxpbmcpbis9cyhlKX1lbHNlIGlmKGk9PT0zfHxpPT09NClyZXR1cm4gZS5u
b2RlVmFsdWV9ZWxzZSBmb3IoO3Q9ZVtyXTtyKyspbis9cyh0KTtyZXR1cm4gbn0sbz1udC5pc1hN
TD1mdW5jdGlvbihlKXt2YXIgdD1lJiYoZS5vd25lckRvY3VtZW50fHxlKS5kb2N1bWVudEVsZW1l
bnQ7cmV0dXJuIHQ/dC5ub2RlTmFtZSE9PSJIVE1MIjohMX0sdT1udC5jb250YWlucz15LmNvbnRh
aW5zP2Z1bmN0aW9uKGUsdCl7dmFyIG49ZS5ub2RlVHlwZT09PTk/ZS5kb2N1bWVudEVsZW1lbnQ6
ZSxyPXQmJnQucGFyZW50Tm9kZTtyZXR1cm4gZT09PXJ8fCEhKHImJnIubm9kZVR5cGU9PT0xJiZu
LmNvbnRhaW5zJiZuLmNvbnRhaW5zKHIpKX06eS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbj9mdW5j
dGlvbihlLHQpe3JldHVybiB0JiYhIShlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHQpJjE2KX06
ZnVuY3Rpb24oZSx0KXt3aGlsZSh0PXQucGFyZW50Tm9kZSlpZih0PT09ZSlyZXR1cm4hMDtyZXR1
cm4hMX0sbnQuYXR0cj1mdW5jdGlvbihlLHQpe3ZhciBuLHI9byhlKTtyZXR1cm4gcnx8KHQ9dC50
b0xvd2VyQ2FzZSgpKSwobj1pLmF0dHJIYW5kbGVbdF0pP24oZSk6cnx8WT9lLmdldEF0dHJpYnV0
ZSh0KToobj1lLmdldEF0dHJpYnV0ZU5vZGUodCksbj90eXBlb2YgZVt0XT09ImJvb2xlYW4iP2Vb
dF0/dDpudWxsOm4uc3BlY2lmaWVkP24udmFsdWU6bnVsbDpudWxsKX0saT1udC5zZWxlY3RvcnM9
e2NhY2hlTGVuZ3RoOjUwLGNyZWF0ZVBzZXVkbzpOLG1hdGNoOkosYXR0ckhhbmRsZTpHP3t9Onto
cmVmOmZ1bmN0aW9uKGUpe3JldHVybiBlLmdldEF0dHJpYnV0ZSgiaHJlZiIsMil9LHR5cGU6ZnVu
Y3Rpb24oZSl7cmV0dXJuIGUuZ2V0QXR0cmlidXRlKCJ0eXBlIil9fSxmaW5kOntJRDpyP2Z1bmN0
aW9uKGUsdCxuKXtpZih0eXBlb2YgdC5nZXRFbGVtZW50QnlJZCE9PXAmJiFuKXt2YXIgcj10Lmdl
dEVsZW1lbnRCeUlkKGUpO3JldHVybiByJiZyLnBhcmVudE5vZGU/W3JdOltdfX06ZnVuY3Rpb24o
ZSxuLHIpe2lmKHR5cGVvZiBuLmdldEVsZW1lbnRCeUlkIT09cCYmIXIpe3ZhciBpPW4uZ2V0RWxl
bWVudEJ5SWQoZSk7cmV0dXJuIGk/aS5pZD09PWV8fHR5cGVvZiBpLmdldEF0dHJpYnV0ZU5vZGUh
PT1wJiZpLmdldEF0dHJpYnV0ZU5vZGUoImlkIikudmFsdWU9PT1lP1tpXTp0OltdfX0sVEFHOlE/
ZnVuY3Rpb24oZSx0KXtpZih0eXBlb2YgdC5nZXRFbGVtZW50c0J5VGFnTmFtZSE9PXApcmV0dXJu
IHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoZSl9OmZ1bmN0aW9uKGUsdCl7dmFyIG49dC5nZXRFbGVt
ZW50c0J5VGFnTmFtZShlKTtpZihlPT09IioiKXt2YXIgcixpPVtdLHM9MDtmb3IoO3I9bltzXTtz
Kyspci5ub2RlVHlwZT09PTEmJmkucHVzaChyKTtyZXR1cm4gaX1yZXR1cm4gbn0sTkFNRTpldCYm
ZnVuY3Rpb24oZSx0KXtpZih0eXBlb2YgdC5nZXRFbGVtZW50c0J5TmFtZSE9PXApcmV0dXJuIHQu
Z2V0RWxlbWVudHNCeU5hbWUobmFtZSl9LENMQVNTOlomJmZ1bmN0aW9uKGUsdCxuKXtpZih0eXBl
b2YgdC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lIT09cCYmIW4pcmV0dXJuIHQuZ2V0RWxlbWVudHNC
eUNsYXNzTmFtZShlKX19LHJlbGF0aXZlOnsiPiI6e2RpcjoicGFyZW50Tm9kZSIsZmlyc3Q6ITB9
LCIgIjp7ZGlyOiJwYXJlbnROb2RlIn0sIisiOntkaXI6InByZXZpb3VzU2libGluZyIsZmlyc3Q6
ITB9LCJ+Ijp7ZGlyOiJwcmV2aW91c1NpYmxpbmcifX0scHJlRmlsdGVyOntBVFRSOmZ1bmN0aW9u
KGUpe3JldHVybiBlWzFdPWVbMV0ucmVwbGFjZSgkLCIiKSxlWzNdPShlWzRdfHxlWzVdfHwiIiku
cmVwbGFjZSgkLCIiKSxlWzJdPT09In49IiYmKGVbM109IiAiK2VbM10rIiAiKSxlLnNsaWNlKDAs
NCl9LENISUxEOmZ1bmN0aW9uKGUpe3JldHVybiBlWzFdPWVbMV0udG9Mb3dlckNhc2UoKSxlWzFd
PT09Im50aCI/KGVbMl18fG50LmVycm9yKGVbMF0pLGVbM109KyhlWzNdP2VbNF0rKGVbNV18fDEp
OjIqKGVbMl09PT0iZXZlbiJ8fGVbMl09PT0ib2RkIikpLGVbNF09KyhlWzZdK2VbN118fGVbMl09
PT0ib2RkIikpOmVbMl0mJm50LmVycm9yKGVbMF0pLGV9LFBTRVVETzpmdW5jdGlvbihlKXt2YXIg
dCxuO2lmKEouQ0hJTEQudGVzdChlWzBdKSlyZXR1cm4gbnVsbDtpZihlWzNdKWVbMl09ZVszXTtl
bHNlIGlmKHQ9ZVs0XSlxLnRlc3QodCkmJihuPXV0KHQsITApKSYmKG49dC5pbmRleE9mKCIpIix0
Lmxlbmd0aC1uKS10Lmxlbmd0aCkmJih0PXQuc2xpY2UoMCxuKSxlWzBdPWVbMF0uc2xpY2UoMCxu
KSksZVsyXT10O3JldHVybiBlLnNsaWNlKDAsMyl9fSxmaWx0ZXI6e0lEOnI/ZnVuY3Rpb24oZSl7
cmV0dXJuIGU9ZS5yZXBsYWNlKCQsIiIpLGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldEF0dHJpYnV0
ZSgiaWQiKT09PWV9fTpmdW5jdGlvbihlKXtyZXR1cm4gZT1lLnJlcGxhY2UoJCwiIiksZnVuY3Rp
b24odCl7dmFyIG49dHlwZW9mIHQuZ2V0QXR0cmlidXRlTm9kZSE9PXAmJnQuZ2V0QXR0cmlidXRl
Tm9kZSgiaWQiKTtyZXR1cm4gbiYmbi52YWx1ZT09PWV9fSxUQUc6ZnVuY3Rpb24oZSl7cmV0dXJu
IGU9PT0iKiI/ZnVuY3Rpb24oKXtyZXR1cm4hMH06KGU9ZS5yZXBsYWNlKCQsIiIpLnRvTG93ZXJD
YXNlKCksZnVuY3Rpb24odCl7cmV0dXJuIHQubm9kZU5hbWUmJnQubm9kZU5hbWUudG9Mb3dlckNh
c2UoKT09PWV9KX0sQ0xBU1M6ZnVuY3Rpb24oZSl7dmFyIHQ9a1tkXVtlKyIgIl07cmV0dXJuIHR8
fCh0PW5ldyBSZWdFeHAoIihefCIrTysiKSIrZSsiKCIrTysifCQpIikpJiZrKGUsZnVuY3Rpb24o
ZSl7cmV0dXJuIHQudGVzdChlLmNsYXNzTmFtZXx8dHlwZW9mIGUuZ2V0QXR0cmlidXRlIT09cCYm
ZS5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiKX0pfSxBVFRSOmZ1bmN0aW9uKGUsdCxuKXtyZXR1
cm4gZnVuY3Rpb24ocixpKXt2YXIgcz1udC5hdHRyKHIsZSk7cmV0dXJuIHM9PW51bGw/dD09PSIh
PSI6dD8ocys9IiIsdD09PSI9Ij9zPT09bjp0PT09IiE9Ij9zIT09bjp0PT09Il49Ij9uJiZzLmlu
ZGV4T2Yobik9PT0wOnQ9PT0iKj0iP24mJnMuaW5kZXhPZihuKT4tMTp0PT09IiQ9Ij9uJiZzLnN1
YnN0cihzLmxlbmd0aC1uLmxlbmd0aCk9PT1uOnQ9PT0ifj0iPygiICIrcysiICIpLmluZGV4T2Yo
bik+LTE6dD09PSJ8PSI/cz09PW58fHMuc3Vic3RyKDAsbi5sZW5ndGgrMSk9PT1uKyItIjohMSk6
ITB9fSxDSElMRDpmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gZT09PSJudGgiP2Z1bmN0aW9uKGUp
e3ZhciB0LGkscz1lLnBhcmVudE5vZGU7aWYobj09PTEmJnI9PT0wKXJldHVybiEwO2lmKHMpe2k9
MDtmb3IodD1zLmZpcnN0Q2hpbGQ7dDt0PXQubmV4dFNpYmxpbmcpaWYodC5ub2RlVHlwZT09PTEp
e2krKztpZihlPT09dClicmVha319cmV0dXJuIGktPXIsaT09PW58fGklbj09PTAmJmkvbj49MH06
ZnVuY3Rpb24odCl7dmFyIG49dDtzd2l0Y2goZSl7Y2FzZSJvbmx5IjpjYXNlImZpcnN0Ijp3aGls
ZShuPW4ucHJldmlvdXNTaWJsaW5nKWlmKG4ubm9kZVR5cGU9PT0xKXJldHVybiExO2lmKGU9PT0i
Zmlyc3QiKXJldHVybiEwO249dDtjYXNlImxhc3QiOndoaWxlKG49bi5uZXh0U2libGluZylpZihu
Lm5vZGVUeXBlPT09MSlyZXR1cm4hMTtyZXR1cm4hMH19fSxQU0VVRE86ZnVuY3Rpb24oZSx0KXt2
YXIgbixyPWkucHNldWRvc1tlXXx8aS5zZXRGaWx0ZXJzW2UudG9Mb3dlckNhc2UoKV18fG50LmVy
cm9yKCJ1bnN1cHBvcnRlZCBwc2V1ZG86ICIrZSk7cmV0dXJuIHJbZF0/cih0KTpyLmxlbmd0aD4x
PyhuPVtlLGUsIiIsdF0saS5zZXRGaWx0ZXJzLmhhc093blByb3BlcnR5KGUudG9Mb3dlckNhc2Uo
KSk/TihmdW5jdGlvbihlLG4pe3ZhciBpLHM9cihlLHQpLG89cy5sZW5ndGg7d2hpbGUoby0tKWk9
VC5jYWxsKGUsc1tvXSksZVtpXT0hKG5baV09c1tvXSl9KTpmdW5jdGlvbihlKXtyZXR1cm4gcihl
LDAsbil9KTpyfX0scHNldWRvczp7bm90Ok4oZnVuY3Rpb24oZSl7dmFyIHQ9W10sbj1bXSxyPWEo
ZS5yZXBsYWNlKGosIiQxIikpO3JldHVybiByW2RdP04oZnVuY3Rpb24oZSx0LG4saSl7dmFyIHMs
bz1yKGUsbnVsbCxpLFtdKSx1PWUubGVuZ3RoO3doaWxlKHUtLSlpZihzPW9bdV0pZVt1XT0hKHRb
dV09cyl9KTpmdW5jdGlvbihlLGkscyl7cmV0dXJuIHRbMF09ZSxyKHQsbnVsbCxzLG4pLCFuLnBv
cCgpfX0pLGhhczpOKGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gbnQoZSx0
KS5sZW5ndGg+MH19KSxjb250YWluczpOKGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXty
ZXR1cm4odC50ZXh0Q29udGVudHx8dC5pbm5lclRleHR8fHModCkpLmluZGV4T2YoZSk+LTF9fSks
ZW5hYmxlZDpmdW5jdGlvbihlKXtyZXR1cm4gZS5kaXNhYmxlZD09PSExfSxkaXNhYmxlZDpmdW5j
dGlvbihlKXtyZXR1cm4gZS5kaXNhYmxlZD09PSEwfSxjaGVja2VkOmZ1bmN0aW9uKGUpe3ZhciB0
PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4gdD09PSJpbnB1dCImJiEhZS5jaGVja2Vk
fHx0PT09Im9wdGlvbiImJiEhZS5zZWxlY3RlZH0sc2VsZWN0ZWQ6ZnVuY3Rpb24oZSl7cmV0dXJu
IGUucGFyZW50Tm9kZSYmZS5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXgsZS5zZWxlY3RlZD09PSEw
fSxwYXJlbnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIWkucHNldWRvcy5lbXB0eShlKX0sZW1wdHk6ZnVu
Y3Rpb24oZSl7dmFyIHQ7ZT1lLmZpcnN0Q2hpbGQ7d2hpbGUoZSl7aWYoZS5ub2RlTmFtZT4iQCJ8
fCh0PWUubm9kZVR5cGUpPT09M3x8dD09PTQpcmV0dXJuITE7ZT1lLm5leHRTaWJsaW5nfXJldHVy
biEwfSxoZWFkZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIFgudGVzdChlLm5vZGVOYW1lKX0sdGV4dDpm
dW5jdGlvbihlKXt2YXIgdCxuO3JldHVybiBlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT0iaW5w
dXQiJiYodD1lLnR5cGUpPT09InRleHQiJiYoKG49ZS5nZXRBdHRyaWJ1dGUoInR5cGUiKSk9PW51
bGx8fG4udG9Mb3dlckNhc2UoKT09PXQpfSxyYWRpbzpydCgicmFkaW8iKSxjaGVja2JveDpydCgi
Y2hlY2tib3giKSxmaWxlOnJ0KCJmaWxlIikscGFzc3dvcmQ6cnQoInBhc3N3b3JkIiksaW1hZ2U6
cnQoImltYWdlIiksc3VibWl0Oml0KCJzdWJtaXQiKSxyZXNldDppdCgicmVzZXQiKSxidXR0b246
ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiB0PT09Imlu
cHV0IiYmZS50eXBlPT09ImJ1dHRvbiJ8fHQ9PT0iYnV0dG9uIn0saW5wdXQ6ZnVuY3Rpb24oZSl7
cmV0dXJuIFYudGVzdChlLm5vZGVOYW1lKX0sZm9jdXM6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5vd25l
ckRvY3VtZW50O3JldHVybiBlPT09dC5hY3RpdmVFbGVtZW50JiYoIXQuaGFzRm9jdXN8fHQuaGFz
Rm9jdXMoKSkmJiEhKGUudHlwZXx8ZS5ocmVmfHx+ZS50YWJJbmRleCl9LGFjdGl2ZTpmdW5jdGlv
bihlKXtyZXR1cm4gZT09PWUub3duZXJEb2N1bWVudC5hY3RpdmVFbGVtZW50fSxmaXJzdDpzdChm
dW5jdGlvbigpe3JldHVyblswXX0pLGxhc3Q6c3QoZnVuY3Rpb24oZSx0KXtyZXR1cm5bdC0xXX0p
LGVxOnN0KGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm5bbjwwP24rdDpuXX0pLGV2ZW46c3QoZnVuY3Rp
b24oZSx0KXtmb3IodmFyIG49MDtuPHQ7bis9MillLnB1c2gobik7cmV0dXJuIGV9KSxvZGQ6c3Qo
ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49MTtuPHQ7bis9MillLnB1c2gobik7cmV0dXJuIGV9KSxs
dDpzdChmdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPW48MD9uK3Q6bjstLXI+PTA7KWUucHVzaChy
KTtyZXR1cm4gZX0pLGd0OnN0KGZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9bjwwP24rdDpuOysr
cjx0OyllLnB1c2gocik7cmV0dXJuIGV9KX19LGY9eS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbj9m
dW5jdGlvbihlLHQpe3JldHVybiBlPT09dD8obD0hMCwwKTooIWUuY29tcGFyZURvY3VtZW50UG9z
aXRpb258fCF0LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uP2UuY29tcGFyZURvY3VtZW50UG9zaXRp
b246ZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0KSY0KT8tMToxfTpmdW5jdGlvbihlLHQpe2lm
KGU9PT10KXJldHVybiBsPSEwLDA7aWYoZS5zb3VyY2VJbmRleCYmdC5zb3VyY2VJbmRleClyZXR1
cm4gZS5zb3VyY2VJbmRleC10LnNvdXJjZUluZGV4O3ZhciBuLHIsaT1bXSxzPVtdLG89ZS5wYXJl
bnROb2RlLHU9dC5wYXJlbnROb2RlLGE9bztpZihvPT09dSlyZXR1cm4gb3QoZSx0KTtpZighbyly
ZXR1cm4tMTtpZighdSlyZXR1cm4gMTt3aGlsZShhKWkudW5zaGlmdChhKSxhPWEucGFyZW50Tm9k
ZTthPXU7d2hpbGUoYSlzLnVuc2hpZnQoYSksYT1hLnBhcmVudE5vZGU7bj1pLmxlbmd0aCxyPXMu
bGVuZ3RoO2Zvcih2YXIgZj0wO2Y8biYmZjxyO2YrKylpZihpW2ZdIT09c1tmXSlyZXR1cm4gb3Qo
aVtmXSxzW2ZdKTtyZXR1cm4gZj09PW4/b3QoZSxzW2ZdLC0xKTpvdChpW2ZdLHQsMSl9LFswLDBd
LnNvcnQoZiksaD0hbCxudC51bmlxdWVTb3J0PWZ1bmN0aW9uKGUpe3ZhciB0LG49W10scj0xLGk9
MDtsPWgsZS5zb3J0KGYpO2lmKGwpe2Zvcig7dD1lW3JdO3IrKyl0PT09ZVtyLTFdJiYoaT1uLnB1
c2gocikpO3doaWxlKGktLSllLnNwbGljZShuW2ldLDEpfXJldHVybiBlfSxudC5lcnJvcj1mdW5j
dGlvbihlKXt0aHJvdyBuZXcgRXJyb3IoIlN5bnRheCBlcnJvciwgdW5yZWNvZ25pemVkIGV4cHJl
c3Npb246ICIrZSl9LGE9bnQuY29tcGlsZT1mdW5jdGlvbihlLHQpe3ZhciBuLHI9W10saT1bXSxz
PUFbZF1bZSsiICJdO2lmKCFzKXt0fHwodD11dChlKSksbj10Lmxlbmd0aDt3aGlsZShuLS0pcz1o
dCh0W25dKSxzW2RdP3IucHVzaChzKTppLnB1c2gocyk7cz1BKGUscHQoaSxyKSl9cmV0dXJuIHN9
LGcucXVlcnlTZWxlY3RvckFsbCYmZnVuY3Rpb24oKXt2YXIgZSx0PXZ0LG49Lyd8XFwvZyxyPS9c
PVtceDIwXHRcclxuXGZdKihbXiciXF1dKilbXHgyMFx0XHJcblxmXSpcXS9nLGk9WyI6Zm9jdXMi
XSxzPVsiOmFjdGl2ZSJdLHU9eS5tYXRjaGVzU2VsZWN0b3J8fHkubW96TWF0Y2hlc1NlbGVjdG9y
fHx5LndlYmtpdE1hdGNoZXNTZWxlY3Rvcnx8eS5vTWF0Y2hlc1NlbGVjdG9yfHx5Lm1zTWF0Y2hl
c1NlbGVjdG9yO0soZnVuY3Rpb24oZSl7ZS5pbm5lckhUTUw9IjxzZWxlY3Q+PG9wdGlvbiBzZWxl
Y3RlZD0nJz48L29wdGlvbj48L3NlbGVjdD4iLGUucXVlcnlTZWxlY3RvckFsbCgiW3NlbGVjdGVk
XSIpLmxlbmd0aHx8aS5wdXNoKCJcXFsiK08rIiooPzpjaGVja2VkfGRpc2FibGVkfGlzbWFwfG11
bHRpcGxlfHJlYWRvbmx5fHNlbGVjdGVkfHZhbHVlKSIpLGUucXVlcnlTZWxlY3RvckFsbCgiOmNo
ZWNrZWQiKS5sZW5ndGh8fGkucHVzaCgiOmNoZWNrZWQiKX0pLEsoZnVuY3Rpb24oZSl7ZS5pbm5l
ckhUTUw9IjxwIHRlc3Q9Jyc+PC9wPiIsZS5xdWVyeVNlbGVjdG9yQWxsKCJbdGVzdF49JyddIiku
bGVuZ3RoJiZpLnB1c2goIlsqXiRdPSIrTysiKig/OlwiXCJ8JycpIiksZS5pbm5lckhUTUw9Ijxp
bnB1dCB0eXBlPSdoaWRkZW4nLz4iLGUucXVlcnlTZWxlY3RvckFsbCgiOmVuYWJsZWQiKS5sZW5n
dGh8fGkucHVzaCgiOmVuYWJsZWQiLCI6ZGlzYWJsZWQiKX0pLGk9bmV3IFJlZ0V4cChpLmpvaW4o
InwiKSksdnQ9ZnVuY3Rpb24oZSxyLHMsbyx1KXtpZighbyYmIXUmJiFpLnRlc3QoZSkpe3ZhciBh
LGYsbD0hMCxjPWQsaD1yLHA9ci5ub2RlVHlwZT09PTkmJmU7aWYoci5ub2RlVHlwZT09PTEmJnIu
bm9kZU5hbWUudG9Mb3dlckNhc2UoKSE9PSJvYmplY3QiKXthPXV0KGUpLChsPXIuZ2V0QXR0cmli
dXRlKCJpZCIpKT9jPWwucmVwbGFjZShuLCJcXCQmIik6ci5zZXRBdHRyaWJ1dGUoImlkIixjKSxj
PSJbaWQ9JyIrYysiJ10gIixmPWEubGVuZ3RoO3doaWxlKGYtLSlhW2ZdPWMrYVtmXS5qb2luKCIi
KTtoPXoudGVzdChlKSYmci5wYXJlbnROb2RlfHxyLHA9YS5qb2luKCIsIil9aWYocCl0cnl7cmV0
dXJuIFMuYXBwbHkocyx4LmNhbGwoaC5xdWVyeVNlbGVjdG9yQWxsKHApLDApKSxzfWNhdGNoKHYp
e31maW5hbGx5e2x8fHIucmVtb3ZlQXR0cmlidXRlKCJpZCIpfX1yZXR1cm4gdChlLHIscyxvLHUp
fSx1JiYoSyhmdW5jdGlvbih0KXtlPXUuY2FsbCh0LCJkaXYiKTt0cnl7dS5jYWxsKHQsIlt0ZXN0
IT0nJ106c2l6emxlIikscy5wdXNoKCIhPSIsSCl9Y2F0Y2gobil7fX0pLHM9bmV3IFJlZ0V4cChz
LmpvaW4oInwiKSksbnQubWF0Y2hlc1NlbGVjdG9yPWZ1bmN0aW9uKHQsbil7bj1uLnJlcGxhY2Uo
ciwiPSckMSddIik7aWYoIW8odCkmJiFzLnRlc3QobikmJiFpLnRlc3QobikpdHJ5e3ZhciBhPXUu
Y2FsbCh0LG4pO2lmKGF8fGV8fHQuZG9jdW1lbnQmJnQuZG9jdW1lbnQubm9kZVR5cGUhPT0xMSly
ZXR1cm4gYX1jYXRjaChmKXt9cmV0dXJuIG50KG4sbnVsbCxudWxsLFt0XSkubGVuZ3RoPjB9KX0o
KSxpLnBzZXVkb3MubnRoPWkucHNldWRvcy5lcSxpLmZpbHRlcnM9bXQucHJvdG90eXBlPWkucHNl
dWRvcyxpLnNldEZpbHRlcnM9bmV3IG10LG50LmF0dHI9di5hdHRyLHYuZmluZD1udCx2LmV4cHI9
bnQuc2VsZWN0b3JzLHYuZXhwclsiOiJdPXYuZXhwci5wc2V1ZG9zLHYudW5pcXVlPW50LnVuaXF1
ZVNvcnQsdi50ZXh0PW50LmdldFRleHQsdi5pc1hNTERvYz1udC5pc1hNTCx2LmNvbnRhaW5zPW50
LmNvbnRhaW5zfShlKTt2YXIgbnQ9L1VudGlsJC8scnQ9L14oPzpwYXJlbnRzfHByZXYoPzpVbnRp
bHxBbGwpKS8saXQ9L14uW146I1xbXC4sXSokLyxzdD12LmV4cHIubWF0Y2gubmVlZHNDb250ZXh0
LG90PXtjaGlsZHJlbjohMCxjb250ZW50czohMCxuZXh0OiEwLHByZXY6ITB9O3YuZm4uZXh0ZW5k
KHtmaW5kOmZ1bmN0aW9uKGUpe3ZhciB0LG4scixpLHMsbyx1PXRoaXM7aWYodHlwZW9mIGUhPSJz
dHJpbmciKXJldHVybiB2KGUpLmZpbHRlcihmdW5jdGlvbigpe2Zvcih0PTAsbj11Lmxlbmd0aDt0
PG47dCsrKWlmKHYuY29udGFpbnModVt0XSx0aGlzKSlyZXR1cm4hMH0pO289dGhpcy5wdXNoU3Rh
Y2soIiIsImZpbmQiLGUpO2Zvcih0PTAsbj10aGlzLmxlbmd0aDt0PG47dCsrKXtyPW8ubGVuZ3Ro
LHYuZmluZChlLHRoaXNbdF0sbyk7aWYodD4wKWZvcihpPXI7aTxvLmxlbmd0aDtpKyspZm9yKHM9
MDtzPHI7cysrKWlmKG9bc109PT1vW2ldKXtvLnNwbGljZShpLS0sMSk7YnJlYWt9fXJldHVybiBv
fSxoYXM6ZnVuY3Rpb24oZSl7dmFyIHQsbj12KGUsdGhpcykscj1uLmxlbmd0aDtyZXR1cm4gdGhp
cy5maWx0ZXIoZnVuY3Rpb24oKXtmb3IodD0wO3Q8cjt0KyspaWYodi5jb250YWlucyh0aGlzLG5b
dF0pKXJldHVybiEwfSl9LG5vdDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soZnQo
dGhpcyxlLCExKSwibm90IixlKX0sZmlsdGVyOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnB1c2hT
dGFjayhmdCh0aGlzLGUsITApLCJmaWx0ZXIiLGUpfSxpczpmdW5jdGlvbihlKXtyZXR1cm4hIWUm
Jih0eXBlb2YgZT09InN0cmluZyI/c3QudGVzdChlKT92KGUsdGhpcy5jb250ZXh0KS5pbmRleCh0
aGlzWzBdKT49MDp2LmZpbHRlcihlLHRoaXMpLmxlbmd0aD4wOnRoaXMuZmlsdGVyKGUpLmxlbmd0
aD4wKX0sY2xvc2VzdDpmdW5jdGlvbihlLHQpe3ZhciBuLHI9MCxpPXRoaXMubGVuZ3RoLHM9W10s
bz1zdC50ZXN0KGUpfHx0eXBlb2YgZSE9InN0cmluZyI/dihlLHR8fHRoaXMuY29udGV4dCk6MDtm
b3IoO3I8aTtyKyspe249dGhpc1tyXTt3aGlsZShuJiZuLm93bmVyRG9jdW1lbnQmJm4hPT10JiZu
Lm5vZGVUeXBlIT09MTEpe2lmKG8/by5pbmRleChuKT4tMTp2LmZpbmQubWF0Y2hlc1NlbGVjdG9y
KG4sZSkpe3MucHVzaChuKTticmVha31uPW4ucGFyZW50Tm9kZX19cmV0dXJuIHM9cy5sZW5ndGg+
MT92LnVuaXF1ZShzKTpzLHRoaXMucHVzaFN0YWNrKHMsImNsb3Nlc3QiLGUpfSxpbmRleDpmdW5j
dGlvbihlKXtyZXR1cm4gZT90eXBlb2YgZT09InN0cmluZyI/di5pbkFycmF5KHRoaXNbMF0sdihl
KSk6di5pbkFycmF5KGUuanF1ZXJ5P2VbMF06ZSx0aGlzKTp0aGlzWzBdJiZ0aGlzWzBdLnBhcmVu
dE5vZGU/dGhpcy5wcmV2QWxsKCkubGVuZ3RoOi0xfSxhZGQ6ZnVuY3Rpb24oZSx0KXt2YXIgbj10
eXBlb2YgZT09InN0cmluZyI/dihlLHQpOnYubWFrZUFycmF5KGUmJmUubm9kZVR5cGU/W2VdOmUp
LHI9di5tZXJnZSh0aGlzLmdldCgpLG4pO3JldHVybiB0aGlzLnB1c2hTdGFjayh1dChuWzBdKXx8
dXQoclswXSk/cjp2LnVuaXF1ZShyKSl9LGFkZEJhY2s6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMu
YWRkKGU9PW51bGw/dGhpcy5wcmV2T2JqZWN0OnRoaXMucHJldk9iamVjdC5maWx0ZXIoZSkpfX0p
LHYuZm4uYW5kU2VsZj12LmZuLmFkZEJhY2ssdi5lYWNoKHtwYXJlbnQ6ZnVuY3Rpb24oZSl7dmFy
IHQ9ZS5wYXJlbnROb2RlO3JldHVybiB0JiZ0Lm5vZGVUeXBlIT09MTE/dDpudWxsfSxwYXJlbnRz
OmZ1bmN0aW9uKGUpe3JldHVybiB2LmRpcihlLCJwYXJlbnROb2RlIil9LHBhcmVudHNVbnRpbDpm
dW5jdGlvbihlLHQsbil7cmV0dXJuIHYuZGlyKGUsInBhcmVudE5vZGUiLG4pfSxuZXh0OmZ1bmN0
aW9uKGUpe3JldHVybiBhdChlLCJuZXh0U2libGluZyIpfSxwcmV2OmZ1bmN0aW9uKGUpe3JldHVy
biBhdChlLCJwcmV2aW91c1NpYmxpbmciKX0sbmV4dEFsbDpmdW5jdGlvbihlKXtyZXR1cm4gdi5k
aXIoZSwibmV4dFNpYmxpbmciKX0scHJldkFsbDpmdW5jdGlvbihlKXtyZXR1cm4gdi5kaXIoZSwi
cHJldmlvdXNTaWJsaW5nIil9LG5leHRVbnRpbDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIHYuZGly
KGUsIm5leHRTaWJsaW5nIixuKX0scHJldlVudGlsOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdi5k
aXIoZSwicHJldmlvdXNTaWJsaW5nIixuKX0sc2libGluZ3M6ZnVuY3Rpb24oZSl7cmV0dXJuIHYu
c2libGluZygoZS5wYXJlbnROb2RlfHx7fSkuZmlyc3RDaGlsZCxlKX0sY2hpbGRyZW46ZnVuY3Rp
b24oZSl7cmV0dXJuIHYuc2libGluZyhlLmZpcnN0Q2hpbGQpfSxjb250ZW50czpmdW5jdGlvbihl
KXtyZXR1cm4gdi5ub2RlTmFtZShlLCJpZnJhbWUiKT9lLmNvbnRlbnREb2N1bWVudHx8ZS5jb250
ZW50V2luZG93LmRvY3VtZW50OnYubWVyZ2UoW10sZS5jaGlsZE5vZGVzKX19LGZ1bmN0aW9uKGUs
dCl7di5mbltlXT1mdW5jdGlvbihuLHIpe3ZhciBpPXYubWFwKHRoaXMsdCxuKTtyZXR1cm4gbnQu
dGVzdChlKXx8KHI9biksciYmdHlwZW9mIHI9PSJzdHJpbmciJiYoaT12LmZpbHRlcihyLGkpKSxp
PXRoaXMubGVuZ3RoPjEmJiFvdFtlXT92LnVuaXF1ZShpKTppLHRoaXMubGVuZ3RoPjEmJnJ0LnRl
c3QoZSkmJihpPWkucmV2ZXJzZSgpKSx0aGlzLnB1c2hTdGFjayhpLGUsbC5jYWxsKGFyZ3VtZW50
cykuam9pbigiLCIpKX19KSx2LmV4dGVuZCh7ZmlsdGVyOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4g
biYmKGU9Ijpub3QoIitlKyIpIiksdC5sZW5ndGg9PT0xP3YuZmluZC5tYXRjaGVzU2VsZWN0b3Io
dFswXSxlKT9bdFswXV06W106di5maW5kLm1hdGNoZXMoZSx0KX0sZGlyOmZ1bmN0aW9uKGUsbixy
KXt2YXIgaT1bXSxzPWVbbl07d2hpbGUocyYmcy5ub2RlVHlwZSE9PTkmJihyPT09dHx8cy5ub2Rl
VHlwZSE9PTF8fCF2KHMpLmlzKHIpKSlzLm5vZGVUeXBlPT09MSYmaS5wdXNoKHMpLHM9c1tuXTty
ZXR1cm4gaX0sc2libGluZzpmdW5jdGlvbihlLHQpe3ZhciBuPVtdO2Zvcig7ZTtlPWUubmV4dFNp
YmxpbmcpZS5ub2RlVHlwZT09PTEmJmUhPT10JiZuLnB1c2goZSk7cmV0dXJuIG59fSk7dmFyIGN0
PSJhYmJyfGFydGljbGV8YXNpZGV8YXVkaW98YmRpfGNhbnZhc3xkYXRhfGRhdGFsaXN0fGRldGFp
bHN8ZmlnY2FwdGlvbnxmaWd1cmV8Zm9vdGVyfGhlYWRlcnxoZ3JvdXB8bWFya3xtZXRlcnxuYXZ8
b3V0cHV0fHByb2dyZXNzfHNlY3Rpb258c3VtbWFyeXx0aW1lfHZpZGVvIixodD0vIGpRdWVyeVxk
Kz0iKD86bnVsbHxcZCspIi9nLHB0PS9eXHMrLyxkdD0vPCg/IWFyZWF8YnJ8Y29sfGVtYmVkfGhy
fGltZ3xpbnB1dHxsaW5rfG1ldGF8cGFyYW0pKChbXHc6XSspW14+XSopXC8+L2dpLHZ0PS88KFtc
dzpdKykvLG10PS88dGJvZHkvaSxndD0vPHwmIz9cdys7Lyx5dD0vPCg/OnNjcmlwdHxzdHlsZXxs
aW5rKS9pLGJ0PS88KD86c2NyaXB0fG9iamVjdHxlbWJlZHxvcHRpb258c3R5bGUpL2ksd3Q9bmV3
IFJlZ0V4cCgiPCg/OiIrY3QrIilbXFxzLz5dIiwiaSIpLEV0PS9eKD86Y2hlY2tib3h8cmFkaW8p
JC8sU3Q9L2NoZWNrZWRccyooPzpbXj1dfD1ccyouY2hlY2tlZC4pL2kseHQ9L1wvKGphdmF8ZWNt
YSlzY3JpcHQvaSxUdD0vXlxzKjwhKD86XFtDREFUQVxbfFwtXC0pfFtcXVwtXXsyfT5ccyokL2cs
TnQ9e29wdGlvbjpbMSwiPHNlbGVjdCBtdWx0aXBsZT0nbXVsdGlwbGUnPiIsIjwvc2VsZWN0PiJd
LGxlZ2VuZDpbMSwiPGZpZWxkc2V0PiIsIjwvZmllbGRzZXQ+Il0sdGhlYWQ6WzEsIjx0YWJsZT4i
LCI8L3RhYmxlPiJdLHRyOlsyLCI8dGFibGU+PHRib2R5PiIsIjwvdGJvZHk+PC90YWJsZT4iXSx0
ZDpbMywiPHRhYmxlPjx0Ym9keT48dHI+IiwiPC90cj48L3Rib2R5PjwvdGFibGU+Il0sY29sOlsy
LCI8dGFibGU+PHRib2R5PjwvdGJvZHk+PGNvbGdyb3VwPiIsIjwvY29sZ3JvdXA+PC90YWJsZT4i
XSxhcmVhOlsxLCI8bWFwPiIsIjwvbWFwPiJdLF9kZWZhdWx0OlswLCIiLCIiXX0sQ3Q9bHQoaSks
a3Q9Q3QuYXBwZW5kQ2hpbGQoaS5jcmVhdGVFbGVtZW50KCJkaXYiKSk7TnQub3B0Z3JvdXA9TnQu
b3B0aW9uLE50LnRib2R5PU50LnRmb290PU50LmNvbGdyb3VwPU50LmNhcHRpb249TnQudGhlYWQs
TnQudGg9TnQudGQsdi5zdXBwb3J0Lmh0bWxTZXJpYWxpemV8fChOdC5fZGVmYXVsdD1bMSwiWDxk
aXY+IiwiPC9kaXY+Il0pLHYuZm4uZXh0ZW5kKHt0ZXh0OmZ1bmN0aW9uKGUpe3JldHVybiB2LmFj
Y2Vzcyh0aGlzLGZ1bmN0aW9uKGUpe3JldHVybiBlPT09dD92LnRleHQodGhpcyk6dGhpcy5lbXB0
eSgpLmFwcGVuZCgodGhpc1swXSYmdGhpc1swXS5vd25lckRvY3VtZW50fHxpKS5jcmVhdGVUZXh0
Tm9kZShlKSl9LG51bGwsZSxhcmd1bWVudHMubGVuZ3RoKX0sd3JhcEFsbDpmdW5jdGlvbihlKXtp
Zih2LmlzRnVuY3Rpb24oZSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbih0KXt2KHRoaXMpLndy
YXBBbGwoZS5jYWxsKHRoaXMsdCkpfSk7aWYodGhpc1swXSl7dmFyIHQ9dihlLHRoaXNbMF0ub3du
ZXJEb2N1bWVudCkuZXEoMCkuY2xvbmUoITApO3RoaXNbMF0ucGFyZW50Tm9kZSYmdC5pbnNlcnRC
ZWZvcmUodGhpc1swXSksdC5tYXAoZnVuY3Rpb24oKXt2YXIgZT10aGlzO3doaWxlKGUuZmlyc3RD
aGlsZCYmZS5maXJzdENoaWxkLm5vZGVUeXBlPT09MSllPWUuZmlyc3RDaGlsZDtyZXR1cm4gZX0p
LmFwcGVuZCh0aGlzKX1yZXR1cm4gdGhpc30sd3JhcElubmVyOmZ1bmN0aW9uKGUpe3JldHVybiB2
LmlzRnVuY3Rpb24oZSk/dGhpcy5lYWNoKGZ1bmN0aW9uKHQpe3YodGhpcykud3JhcElubmVyKGUu
Y2FsbCh0aGlzLHQpKX0pOnRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciB0PXYodGhpcyksbj10LmNv
bnRlbnRzKCk7bi5sZW5ndGg/bi53cmFwQWxsKGUpOnQuYXBwZW5kKGUpfSl9LHdyYXA6ZnVuY3Rp
b24oZSl7dmFyIHQ9di5pc0Z1bmN0aW9uKGUpO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24obil7
dih0aGlzKS53cmFwQWxsKHQ/ZS5jYWxsKHRoaXMsbik6ZSl9KX0sdW53cmFwOmZ1bmN0aW9uKCl7
cmV0dXJuIHRoaXMucGFyZW50KCkuZWFjaChmdW5jdGlvbigpe3Yubm9kZU5hbWUodGhpcywiYm9k
eSIpfHx2KHRoaXMpLnJlcGxhY2VXaXRoKHRoaXMuY2hpbGROb2Rlcyl9KS5lbmQoKX0sYXBwZW5k
OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLCEwLGZ1bmN0aW9uKGUp
eyh0aGlzLm5vZGVUeXBlPT09MXx8dGhpcy5ub2RlVHlwZT09PTExKSYmdGhpcy5hcHBlbmRDaGls
ZChlKX0pfSxwcmVwZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRz
LCEwLGZ1bmN0aW9uKGUpeyh0aGlzLm5vZGVUeXBlPT09MXx8dGhpcy5ub2RlVHlwZT09PTExKSYm
dGhpcy5pbnNlcnRCZWZvcmUoZSx0aGlzLmZpcnN0Q2hpbGQpfSl9LGJlZm9yZTpmdW5jdGlvbigp
e2lmKCF1dCh0aGlzWzBdKSlyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsITEsZnVuY3Rp
b24oZSl7dGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlLHRoaXMpfSk7aWYoYXJndW1lbnRz
Lmxlbmd0aCl7dmFyIGU9di5jbGVhbihhcmd1bWVudHMpO3JldHVybiB0aGlzLnB1c2hTdGFjayh2
Lm1lcmdlKGUsdGhpcyksImJlZm9yZSIsdGhpcy5zZWxlY3Rvcil9fSxhZnRlcjpmdW5jdGlvbigp
e2lmKCF1dCh0aGlzWzBdKSlyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsITEsZnVuY3Rp
b24oZSl7dGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlLHRoaXMubmV4dFNpYmxpbmcpfSk7
aWYoYXJndW1lbnRzLmxlbmd0aCl7dmFyIGU9di5jbGVhbihhcmd1bWVudHMpO3JldHVybiB0aGlz
LnB1c2hTdGFjayh2Lm1lcmdlKHRoaXMsZSksImFmdGVyIix0aGlzLnNlbGVjdG9yKX19LHJlbW92
ZTpmdW5jdGlvbihlLHQpe3ZhciBuLHI9MDtmb3IoOyhuPXRoaXNbcl0pIT1udWxsO3IrKylpZigh
ZXx8di5maWx0ZXIoZSxbbl0pLmxlbmd0aCkhdCYmbi5ub2RlVHlwZT09PTEmJih2LmNsZWFuRGF0
YShuLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikpLHYuY2xlYW5EYXRhKFtuXSkpLG4ucGFyZW50
Tm9kZSYmbi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG4pO3JldHVybiB0aGlzfSxlbXB0eTpmdW5j
dGlvbigpe3ZhciBlLHQ9MDtmb3IoOyhlPXRoaXNbdF0pIT1udWxsO3QrKyl7ZS5ub2RlVHlwZT09
PTEmJnYuY2xlYW5EYXRhKGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKSk7d2hpbGUoZS5maXJz
dENoaWxkKWUucmVtb3ZlQ2hpbGQoZS5maXJzdENoaWxkKX1yZXR1cm4gdGhpc30sY2xvbmU6ZnVu
Y3Rpb24oZSx0KXtyZXR1cm4gZT1lPT1udWxsPyExOmUsdD10PT1udWxsP2U6dCx0aGlzLm1hcChm
dW5jdGlvbigpe3JldHVybiB2LmNsb25lKHRoaXMsZSx0KX0pfSxodG1sOmZ1bmN0aW9uKGUpe3Jl
dHVybiB2LmFjY2Vzcyh0aGlzLGZ1bmN0aW9uKGUpe3ZhciBuPXRoaXNbMF18fHt9LHI9MCxpPXRo
aXMubGVuZ3RoO2lmKGU9PT10KXJldHVybiBuLm5vZGVUeXBlPT09MT9uLmlubmVySFRNTC5yZXBs
YWNlKGh0LCIiKTp0O2lmKHR5cGVvZiBlPT0ic3RyaW5nIiYmIXl0LnRlc3QoZSkmJih2LnN1cHBv
cnQuaHRtbFNlcmlhbGl6ZXx8IXd0LnRlc3QoZSkpJiYodi5zdXBwb3J0LmxlYWRpbmdXaGl0ZXNw
YWNlfHwhcHQudGVzdChlKSkmJiFOdFsodnQuZXhlYyhlKXx8WyIiLCIiXSlbMV0udG9Mb3dlckNh
c2UoKV0pe2U9ZS5yZXBsYWNlKGR0LCI8JDE+PC8kMj4iKTt0cnl7Zm9yKDtyPGk7cisrKW49dGhp
c1tyXXx8e30sbi5ub2RlVHlwZT09PTEmJih2LmNsZWFuRGF0YShuLmdldEVsZW1lbnRzQnlUYWdO
YW1lKCIqIikpLG4uaW5uZXJIVE1MPWUpO249MH1jYXRjaChzKXt9fW4mJnRoaXMuZW1wdHkoKS5h
cHBlbmQoZSl9LG51bGwsZSxhcmd1bWVudHMubGVuZ3RoKX0scmVwbGFjZVdpdGg6ZnVuY3Rpb24o
ZSl7cmV0dXJuIHV0KHRoaXNbMF0pP3RoaXMubGVuZ3RoP3RoaXMucHVzaFN0YWNrKHYodi5pc0Z1
bmN0aW9uKGUpP2UoKTplKSwicmVwbGFjZVdpdGgiLGUpOnRoaXM6di5pc0Z1bmN0aW9uKGUpP3Ro
aXMuZWFjaChmdW5jdGlvbih0KXt2YXIgbj12KHRoaXMpLHI9bi5odG1sKCk7bi5yZXBsYWNlV2l0
aChlLmNhbGwodGhpcyx0LHIpKX0pOih0eXBlb2YgZSE9InN0cmluZyImJihlPXYoZSkuZGV0YWNo
KCkpLHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciB0PXRoaXMubmV4dFNpYmxpbmcsbj10aGlzLnBh
cmVudE5vZGU7dih0aGlzKS5yZW1vdmUoKSx0P3YodCkuYmVmb3JlKGUpOnYobikuYXBwZW5kKGUp
fSkpfSxkZXRhY2g6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucmVtb3ZlKGUsITApfSxkb21NYW5p
cDpmdW5jdGlvbihlLG4scil7ZT1bXS5jb25jYXQuYXBwbHkoW10sZSk7dmFyIGkscyxvLHUsYT0w
LGY9ZVswXSxsPVtdLGM9dGhpcy5sZW5ndGg7aWYoIXYuc3VwcG9ydC5jaGVja0Nsb25lJiZjPjEm
JnR5cGVvZiBmPT0ic3RyaW5nIiYmU3QudGVzdChmKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9u
KCl7dih0aGlzKS5kb21NYW5pcChlLG4scil9KTtpZih2LmlzRnVuY3Rpb24oZikpcmV0dXJuIHRo
aXMuZWFjaChmdW5jdGlvbihpKXt2YXIgcz12KHRoaXMpO2VbMF09Zi5jYWxsKHRoaXMsaSxuP3Mu
aHRtbCgpOnQpLHMuZG9tTWFuaXAoZSxuLHIpfSk7aWYodGhpc1swXSl7aT12LmJ1aWxkRnJhZ21l
bnQoZSx0aGlzLGwpLG89aS5mcmFnbWVudCxzPW8uZmlyc3RDaGlsZCxvLmNoaWxkTm9kZXMubGVu
Z3RoPT09MSYmKG89cyk7aWYocyl7bj1uJiZ2Lm5vZGVOYW1lKHMsInRyIik7Zm9yKHU9aS5jYWNo
ZWFibGV8fGMtMTthPGM7YSsrKXIuY2FsbChuJiZ2Lm5vZGVOYW1lKHRoaXNbYV0sInRhYmxlIik/
THQodGhpc1thXSwidGJvZHkiKTp0aGlzW2FdLGE9PT11P286di5jbG9uZShvLCEwLCEwKSl9bz1z
PW51bGwsbC5sZW5ndGgmJnYuZWFjaChsLGZ1bmN0aW9uKGUsdCl7dC5zcmM/di5hamF4P3YuYWph
eCh7dXJsOnQuc3JjLHR5cGU6IkdFVCIsZGF0YVR5cGU6InNjcmlwdCIsYXN5bmM6ITEsZ2xvYmFs
OiExLCJ0aHJvd3MiOiEwfSk6di5lcnJvcigibm8gYWpheCIpOnYuZ2xvYmFsRXZhbCgodC50ZXh0
fHx0LnRleHRDb250ZW50fHx0LmlubmVySFRNTHx8IiIpLnJlcGxhY2UoVHQsIiIpKSx0LnBhcmVu
dE5vZGUmJnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0KX0pfXJldHVybiB0aGlzfX0pLHYuYnVp
bGRGcmFnbWVudD1mdW5jdGlvbihlLG4scil7dmFyIHMsbyx1LGE9ZVswXTtyZXR1cm4gbj1ufHxp
LG49IW4ubm9kZVR5cGUmJm5bMF18fG4sbj1uLm93bmVyRG9jdW1lbnR8fG4sZS5sZW5ndGg9PT0x
JiZ0eXBlb2YgYT09InN0cmluZyImJmEubGVuZ3RoPDUxMiYmbj09PWkmJmEuY2hhckF0KDApPT09
IjwiJiYhYnQudGVzdChhKSYmKHYuc3VwcG9ydC5jaGVja0Nsb25lfHwhU3QudGVzdChhKSkmJih2
LnN1cHBvcnQuaHRtbDVDbG9uZXx8IXd0LnRlc3QoYSkpJiYobz0hMCxzPXYuZnJhZ21lbnRzW2Fd
LHU9cyE9PXQpLHN8fChzPW4uY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLHYuY2xlYW4oZSxuLHMs
ciksbyYmKHYuZnJhZ21lbnRzW2FdPXUmJnMpKSx7ZnJhZ21lbnQ6cyxjYWNoZWFibGU6b319LHYu
ZnJhZ21lbnRzPXt9LHYuZWFjaCh7YXBwZW5kVG86ImFwcGVuZCIscHJlcGVuZFRvOiJwcmVwZW5k
IixpbnNlcnRCZWZvcmU6ImJlZm9yZSIsaW5zZXJ0QWZ0ZXI6ImFmdGVyIixyZXBsYWNlQWxsOiJy
ZXBsYWNlV2l0aCJ9LGZ1bmN0aW9uKGUsdCl7di5mbltlXT1mdW5jdGlvbihuKXt2YXIgcixpPTAs
cz1bXSxvPXYobiksdT1vLmxlbmd0aCxhPXRoaXMubGVuZ3RoPT09MSYmdGhpc1swXS5wYXJlbnRO
b2RlO2lmKChhPT1udWxsfHxhJiZhLm5vZGVUeXBlPT09MTEmJmEuY2hpbGROb2Rlcy5sZW5ndGg9
PT0xKSYmdT09PTEpcmV0dXJuIG9bdF0odGhpc1swXSksdGhpcztmb3IoO2k8dTtpKyspcj0oaT4w
P3RoaXMuY2xvbmUoITApOnRoaXMpLmdldCgpLHYob1tpXSlbdF0ocikscz1zLmNvbmNhdChyKTty
ZXR1cm4gdGhpcy5wdXNoU3RhY2socyxlLG8uc2VsZWN0b3IpfX0pLHYuZXh0ZW5kKHtjbG9uZTpm
dW5jdGlvbihlLHQsbil7dmFyIHIsaSxzLG87di5zdXBwb3J0Lmh0bWw1Q2xvbmV8fHYuaXNYTUxE
b2MoZSl8fCF3dC50ZXN0KCI8IitlLm5vZGVOYW1lKyI+Iik/bz1lLmNsb25lTm9kZSghMCk6KGt0
LmlubmVySFRNTD1lLm91dGVySFRNTCxrdC5yZW1vdmVDaGlsZChvPWt0LmZpcnN0Q2hpbGQpKTtp
ZigoIXYuc3VwcG9ydC5ub0Nsb25lRXZlbnR8fCF2LnN1cHBvcnQubm9DbG9uZUNoZWNrZWQpJiYo
ZS5ub2RlVHlwZT09PTF8fGUubm9kZVR5cGU9PT0xMSkmJiF2LmlzWE1MRG9jKGUpKXtPdChlLG8p
LHI9TXQoZSksaT1NdChvKTtmb3Iocz0wO3Jbc107KytzKWlbc10mJk90KHJbc10saVtzXSl9aWYo
dCl7QXQoZSxvKTtpZihuKXtyPU10KGUpLGk9TXQobyk7Zm9yKHM9MDtyW3NdOysrcylBdChyW3Nd
LGlbc10pfX1yZXR1cm4gcj1pPW51bGwsb30sY2xlYW46ZnVuY3Rpb24oZSx0LG4scil7dmFyIHMs
byx1LGEsZixsLGMsaCxwLGQsbSxnLHk9dD09PWkmJkN0LGI9W107aWYoIXR8fHR5cGVvZiB0LmNy
ZWF0ZURvY3VtZW50RnJhZ21lbnQ9PSJ1bmRlZmluZWQiKXQ9aTtmb3Iocz0wOyh1PWVbc10pIT1u
dWxsO3MrKyl7dHlwZW9mIHU9PSJudW1iZXIiJiYodSs9IiIpO2lmKCF1KWNvbnRpbnVlO2lmKHR5
cGVvZiB1PT0ic3RyaW5nIilpZighZ3QudGVzdCh1KSl1PXQuY3JlYXRlVGV4dE5vZGUodSk7ZWxz
ZXt5PXl8fGx0KHQpLGM9dC5jcmVhdGVFbGVtZW50KCJkaXYiKSx5LmFwcGVuZENoaWxkKGMpLHU9
dS5yZXBsYWNlKGR0LCI8JDE+PC8kMj4iKSxhPSh2dC5leGVjKHUpfHxbIiIsIiJdKVsxXS50b0xv
d2VyQ2FzZSgpLGY9TnRbYV18fE50Ll9kZWZhdWx0LGw9ZlswXSxjLmlubmVySFRNTD1mWzFdK3Ur
ZlsyXTt3aGlsZShsLS0pYz1jLmxhc3RDaGlsZDtpZighdi5zdXBwb3J0LnRib2R5KXtoPW10LnRl
c3QodSkscD1hPT09InRhYmxlIiYmIWg/Yy5maXJzdENoaWxkJiZjLmZpcnN0Q2hpbGQuY2hpbGRO
b2RlczpmWzFdPT09Ijx0YWJsZT4iJiYhaD9jLmNoaWxkTm9kZXM6W107Zm9yKG89cC5sZW5ndGgt
MTtvPj0wOy0tbyl2Lm5vZGVOYW1lKHBbb10sInRib2R5IikmJiFwW29dLmNoaWxkTm9kZXMubGVu
Z3RoJiZwW29dLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQocFtvXSl9IXYuc3VwcG9ydC5sZWFkaW5n
V2hpdGVzcGFjZSYmcHQudGVzdCh1KSYmYy5pbnNlcnRCZWZvcmUodC5jcmVhdGVUZXh0Tm9kZShw
dC5leGVjKHUpWzBdKSxjLmZpcnN0Q2hpbGQpLHU9Yy5jaGlsZE5vZGVzLGMucGFyZW50Tm9kZS5y
ZW1vdmVDaGlsZChjKX11Lm5vZGVUeXBlP2IucHVzaCh1KTp2Lm1lcmdlKGIsdSl9YyYmKHU9Yz15
PW51bGwpO2lmKCF2LnN1cHBvcnQuYXBwZW5kQ2hlY2tlZClmb3Iocz0wOyh1PWJbc10pIT1udWxs
O3MrKyl2Lm5vZGVOYW1lKHUsImlucHV0Iik/X3QodSk6dHlwZW9mIHUuZ2V0RWxlbWVudHNCeVRh
Z05hbWUhPSJ1bmRlZmluZWQiJiZ2LmdyZXAodS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQi
KSxfdCk7aWYobil7bT1mdW5jdGlvbihlKXtpZighZS50eXBlfHx4dC50ZXN0KGUudHlwZSkpcmV0
dXJuIHI/ci5wdXNoKGUucGFyZW50Tm9kZT9lLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZSk6ZSk6
bi5hcHBlbmRDaGlsZChlKX07Zm9yKHM9MDsodT1iW3NdKSE9bnVsbDtzKyspaWYoIXYubm9kZU5h
bWUodSwic2NyaXB0Iil8fCFtKHUpKW4uYXBwZW5kQ2hpbGQodSksdHlwZW9mIHUuZ2V0RWxlbWVu
dHNCeVRhZ05hbWUhPSJ1bmRlZmluZWQiJiYoZz12LmdyZXAodi5tZXJnZShbXSx1LmdldEVsZW1l
bnRzQnlUYWdOYW1lKCJzY3JpcHQiKSksbSksYi5zcGxpY2UuYXBwbHkoYixbcysxLDBdLmNvbmNh
dChnKSkscys9Zy5sZW5ndGgpfXJldHVybiBifSxjbGVhbkRhdGE6ZnVuY3Rpb24oZSx0KXt2YXIg
bixyLGkscyxvPTAsdT12LmV4cGFuZG8sYT12LmNhY2hlLGY9di5zdXBwb3J0LmRlbGV0ZUV4cGFu
ZG8sbD12LmV2ZW50LnNwZWNpYWw7Zm9yKDsoaT1lW29dKSE9bnVsbDtvKyspaWYodHx8di5hY2Nl
cHREYXRhKGkpKXtyPWlbdV0sbj1yJiZhW3JdO2lmKG4pe2lmKG4uZXZlbnRzKWZvcihzIGluIG4u
ZXZlbnRzKWxbc10/di5ldmVudC5yZW1vdmUoaSxzKTp2LnJlbW92ZUV2ZW50KGkscyxuLmhhbmRs
ZSk7YVtyXSYmKGRlbGV0ZSBhW3JdLGY/ZGVsZXRlIGlbdV06aS5yZW1vdmVBdHRyaWJ1dGU/aS5y
ZW1vdmVBdHRyaWJ1dGUodSk6aVt1XT1udWxsLHYuZGVsZXRlZElkcy5wdXNoKHIpKX19fX0pLGZ1
bmN0aW9uKCl7dmFyIGUsdDt2LnVhTWF0Y2g9ZnVuY3Rpb24oZSl7ZT1lLnRvTG93ZXJDYXNlKCk7
dmFyIHQ9LyhjaHJvbWUpWyBcL10oW1x3Ll0rKS8uZXhlYyhlKXx8Lyh3ZWJraXQpWyBcL10oW1x3
Ll0rKS8uZXhlYyhlKXx8LyhvcGVyYSkoPzouKnZlcnNpb258KVsgXC9dKFtcdy5dKykvLmV4ZWMo
ZSl8fC8obXNpZSkgKFtcdy5dKykvLmV4ZWMoZSl8fGUuaW5kZXhPZigiY29tcGF0aWJsZSIpPDAm
Ji8obW96aWxsYSkoPzouKj8gcnY6KFtcdy5dKyl8KS8uZXhlYyhlKXx8W107cmV0dXJue2Jyb3dz
ZXI6dFsxXXx8IiIsdmVyc2lvbjp0WzJdfHwiMCJ9fSxlPXYudWFNYXRjaChvLnVzZXJBZ2VudCks
dD17fSxlLmJyb3dzZXImJih0W2UuYnJvd3Nlcl09ITAsdC52ZXJzaW9uPWUudmVyc2lvbiksdC5j
aHJvbWU/dC53ZWJraXQ9ITA6dC53ZWJraXQmJih0LnNhZmFyaT0hMCksdi5icm93c2VyPXQsdi5z
dWI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQsbil7cmV0dXJuIG5ldyBlLmZuLmluaXQodCxuKX12
LmV4dGVuZCghMCxlLHRoaXMpLGUuc3VwZXJjbGFzcz10aGlzLGUuZm49ZS5wcm90b3R5cGU9dGhp
cygpLGUuZm4uY29uc3RydWN0b3I9ZSxlLnN1Yj10aGlzLnN1YixlLmZuLmluaXQ9ZnVuY3Rpb24o
cixpKXtyZXR1cm4gaSYmaSBpbnN0YW5jZW9mIHYmJiEoaSBpbnN0YW5jZW9mIGUpJiYoaT1lKGkp
KSx2LmZuLmluaXQuY2FsbCh0aGlzLHIsaSx0KX0sZS5mbi5pbml0LnByb3RvdHlwZT1lLmZuO3Zh
ciB0PWUoaSk7cmV0dXJuIGV9fSgpO3ZhciBEdCxQdCxIdCxCdD0vYWxwaGFcKFteKV0qXCkvaSxq
dD0vb3BhY2l0eT0oW14pXSopLyxGdD0vXih0b3B8cmlnaHR8Ym90dG9tfGxlZnQpJC8sSXQ9L14o
bm9uZXx0YWJsZSg/IS1jW2VhXSkuKykvLHF0PS9ebWFyZ2luLyxSdD1uZXcgUmVnRXhwKCJeKCIr
bSsiKSguKikkIiwiaSIpLFV0PW5ldyBSZWdFeHAoIl4oIittKyIpKD8hcHgpW2EteiVdKyQiLCJp
IiksenQ9bmV3IFJlZ0V4cCgiXihbLStdKT0oIittKyIpIiwiaSIpLFd0PXtCT0RZOiJibG9jayJ9
LFh0PXtwb3NpdGlvbjoiYWJzb2x1dGUiLHZpc2liaWxpdHk6ImhpZGRlbiIsZGlzcGxheToiYmxv
Y2sifSxWdD17bGV0dGVyU3BhY2luZzowLGZvbnRXZWlnaHQ6NDAwfSwkdD1bIlRvcCIsIlJpZ2h0
IiwiQm90dG9tIiwiTGVmdCJdLEp0PVsiV2Via2l0IiwiTyIsIk1veiIsIm1zIl0sS3Q9di5mbi50
b2dnbGU7di5mbi5leHRlbmQoe2NzczpmdW5jdGlvbihlLG4pe3JldHVybiB2LmFjY2Vzcyh0aGlz
LGZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gciE9PXQ/di5zdHlsZShlLG4scik6di5jc3MoZSxuKX0s
ZSxuLGFyZ3VtZW50cy5sZW5ndGg+MSl9LHNob3c6ZnVuY3Rpb24oKXtyZXR1cm4gWXQodGhpcywh
MCl9LGhpZGU6ZnVuY3Rpb24oKXtyZXR1cm4gWXQodGhpcyl9LHRvZ2dsZTpmdW5jdGlvbihlLHQp
e3ZhciBuPXR5cGVvZiBlPT0iYm9vbGVhbiI7cmV0dXJuIHYuaXNGdW5jdGlvbihlKSYmdi5pc0Z1
bmN0aW9uKHQpP0t0LmFwcGx5KHRoaXMsYXJndW1lbnRzKTp0aGlzLmVhY2goZnVuY3Rpb24oKXso
bj9lOkd0KHRoaXMpKT92KHRoaXMpLnNob3coKTp2KHRoaXMpLmhpZGUoKX0pfX0pLHYuZXh0ZW5k
KHtjc3NIb29rczp7b3BhY2l0eTp7Z2V0OmZ1bmN0aW9uKGUsdCl7aWYodCl7dmFyIG49RHQoZSwi
b3BhY2l0eSIpO3JldHVybiBuPT09IiI/IjEiOm59fX19LGNzc051bWJlcjp7ZmlsbE9wYWNpdHk6
ITAsZm9udFdlaWdodDohMCxsaW5lSGVpZ2h0OiEwLG9wYWNpdHk6ITAsb3JwaGFuczohMCx3aWRv
d3M6ITAsekluZGV4OiEwLHpvb206ITB9LGNzc1Byb3BzOnsiZmxvYXQiOnYuc3VwcG9ydC5jc3NG
bG9hdD8iY3NzRmxvYXQiOiJzdHlsZUZsb2F0In0sc3R5bGU6ZnVuY3Rpb24oZSxuLHIsaSl7aWYo
IWV8fGUubm9kZVR5cGU9PT0zfHxlLm5vZGVUeXBlPT09OHx8IWUuc3R5bGUpcmV0dXJuO3ZhciBz
LG8sdSxhPXYuY2FtZWxDYXNlKG4pLGY9ZS5zdHlsZTtuPXYuY3NzUHJvcHNbYV18fCh2LmNzc1By
b3BzW2FdPVF0KGYsYSkpLHU9di5jc3NIb29rc1tuXXx8di5jc3NIb29rc1thXTtpZihyPT09dCly
ZXR1cm4gdSYmImdldCJpbiB1JiYocz11LmdldChlLCExLGkpKSE9PXQ/czpmW25dO289dHlwZW9m
IHIsbz09PSJzdHJpbmciJiYocz16dC5leGVjKHIpKSYmKHI9KHNbMV0rMSkqc1syXStwYXJzZUZs
b2F0KHYuY3NzKGUsbikpLG89Im51bWJlciIpO2lmKHI9PW51bGx8fG89PT0ibnVtYmVyIiYmaXNO
YU4ocikpcmV0dXJuO289PT0ibnVtYmVyIiYmIXYuY3NzTnVtYmVyW2FdJiYocis9InB4Iik7aWYo
IXV8fCEoInNldCJpbiB1KXx8KHI9dS5zZXQoZSxyLGkpKSE9PXQpdHJ5e2Zbbl09cn1jYXRjaChs
KXt9fSxjc3M6ZnVuY3Rpb24oZSxuLHIsaSl7dmFyIHMsbyx1LGE9di5jYW1lbENhc2Uobik7cmV0
dXJuIG49di5jc3NQcm9wc1thXXx8KHYuY3NzUHJvcHNbYV09UXQoZS5zdHlsZSxhKSksdT12LmNz
c0hvb2tzW25dfHx2LmNzc0hvb2tzW2FdLHUmJiJnZXQiaW4gdSYmKHM9dS5nZXQoZSwhMCxpKSks
cz09PXQmJihzPUR0KGUsbikpLHM9PT0ibm9ybWFsIiYmbiBpbiBWdCYmKHM9VnRbbl0pLHJ8fGkh
PT10PyhvPXBhcnNlRmxvYXQocykscnx8di5pc051bWVyaWMobyk/b3x8MDpzKTpzfSxzd2FwOmZ1
bmN0aW9uKGUsdCxuKXt2YXIgcixpLHM9e307Zm9yKGkgaW4gdClzW2ldPWUuc3R5bGVbaV0sZS5z
dHlsZVtpXT10W2ldO3I9bi5jYWxsKGUpO2ZvcihpIGluIHQpZS5zdHlsZVtpXT1zW2ldO3JldHVy
biByfX0pLGUuZ2V0Q29tcHV0ZWRTdHlsZT9EdD1mdW5jdGlvbih0LG4pe3ZhciByLGkscyxvLHU9
ZS5nZXRDb21wdXRlZFN0eWxlKHQsbnVsbCksYT10LnN0eWxlO3JldHVybiB1JiYocj11LmdldFBy
b3BlcnR5VmFsdWUobil8fHVbbl0scj09PSIiJiYhdi5jb250YWlucyh0Lm93bmVyRG9jdW1lbnQs
dCkmJihyPXYuc3R5bGUodCxuKSksVXQudGVzdChyKSYmcXQudGVzdChuKSYmKGk9YS53aWR0aCxz
PWEubWluV2lkdGgsbz1hLm1heFdpZHRoLGEubWluV2lkdGg9YS5tYXhXaWR0aD1hLndpZHRoPXIs
cj11LndpZHRoLGEud2lkdGg9aSxhLm1pbldpZHRoPXMsYS5tYXhXaWR0aD1vKSkscn06aS5kb2N1
bWVudEVsZW1lbnQuY3VycmVudFN0eWxlJiYoRHQ9ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGk9ZS5j
dXJyZW50U3R5bGUmJmUuY3VycmVudFN0eWxlW3RdLHM9ZS5zdHlsZTtyZXR1cm4gaT09bnVsbCYm
cyYmc1t0XSYmKGk9c1t0XSksVXQudGVzdChpKSYmIUZ0LnRlc3QodCkmJihuPXMubGVmdCxyPWUu
cnVudGltZVN0eWxlJiZlLnJ1bnRpbWVTdHlsZS5sZWZ0LHImJihlLnJ1bnRpbWVTdHlsZS5sZWZ0
PWUuY3VycmVudFN0eWxlLmxlZnQpLHMubGVmdD10PT09ImZvbnRTaXplIj8iMWVtIjppLGk9cy5w
aXhlbExlZnQrInB4IixzLmxlZnQ9bixyJiYoZS5ydW50aW1lU3R5bGUubGVmdD1yKSksaT09PSIi
PyJhdXRvIjppfSksdi5lYWNoKFsiaGVpZ2h0Iiwid2lkdGgiXSxmdW5jdGlvbihlLHQpe3YuY3Nz
SG9va3NbdF09e2dldDpmdW5jdGlvbihlLG4scil7aWYobilyZXR1cm4gZS5vZmZzZXRXaWR0aD09
PTAmJkl0LnRlc3QoRHQoZSwiZGlzcGxheSIpKT92LnN3YXAoZSxYdCxmdW5jdGlvbigpe3JldHVy
biB0bihlLHQscil9KTp0bihlLHQscil9LHNldDpmdW5jdGlvbihlLG4scil7cmV0dXJuIFp0KGUs
bixyP2VuKGUsdCxyLHYuc3VwcG9ydC5ib3hTaXppbmcmJnYuY3NzKGUsImJveFNpemluZyIpPT09
ImJvcmRlci1ib3giKTowKX19fSksdi5zdXBwb3J0Lm9wYWNpdHl8fCh2LmNzc0hvb2tzLm9wYWNp
dHk9e2dldDpmdW5jdGlvbihlLHQpe3JldHVybiBqdC50ZXN0KCh0JiZlLmN1cnJlbnRTdHlsZT9l
LmN1cnJlbnRTdHlsZS5maWx0ZXI6ZS5zdHlsZS5maWx0ZXIpfHwiIik/LjAxKnBhcnNlRmxvYXQo
UmVnRXhwLiQxKSsiIjp0PyIxIjoiIn0sc2V0OmZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5zdHlsZSxy
PWUuY3VycmVudFN0eWxlLGk9di5pc051bWVyaWModCk/ImFscGhhKG9wYWNpdHk9Iit0KjEwMCsi
KSI6IiIscz1yJiZyLmZpbHRlcnx8bi5maWx0ZXJ8fCIiO24uem9vbT0xO2lmKHQ+PTEmJnYudHJp
bShzLnJlcGxhY2UoQnQsIiIpKT09PSIiJiZuLnJlbW92ZUF0dHJpYnV0ZSl7bi5yZW1vdmVBdHRy
aWJ1dGUoImZpbHRlciIpO2lmKHImJiFyLmZpbHRlcilyZXR1cm59bi5maWx0ZXI9QnQudGVzdChz
KT9zLnJlcGxhY2UoQnQsaSk6cysiICIraX19KSx2KGZ1bmN0aW9uKCl7di5zdXBwb3J0LnJlbGlh
YmxlTWFyZ2luUmlnaHR8fCh2LmNzc0hvb2tzLm1hcmdpblJpZ2h0PXtnZXQ6ZnVuY3Rpb24oZSx0
KXtyZXR1cm4gdi5zd2FwKGUse2Rpc3BsYXk6ImlubGluZS1ibG9jayJ9LGZ1bmN0aW9uKCl7aWYo
dClyZXR1cm4gRHQoZSwibWFyZ2luUmlnaHQiKX0pfX0pLCF2LnN1cHBvcnQucGl4ZWxQb3NpdGlv
biYmdi5mbi5wb3NpdGlvbiYmdi5lYWNoKFsidG9wIiwibGVmdCJdLGZ1bmN0aW9uKGUsdCl7di5j
c3NIb29rc1t0XT17Z2V0OmZ1bmN0aW9uKGUsbil7aWYobil7dmFyIHI9RHQoZSx0KTtyZXR1cm4g
VXQudGVzdChyKT92KGUpLnBvc2l0aW9uKClbdF0rInB4IjpyfX19fSl9KSx2LmV4cHImJnYuZXhw
ci5maWx0ZXJzJiYodi5leHByLmZpbHRlcnMuaGlkZGVuPWZ1bmN0aW9uKGUpe3JldHVybiBlLm9m
ZnNldFdpZHRoPT09MCYmZS5vZmZzZXRIZWlnaHQ9PT0wfHwhdi5zdXBwb3J0LnJlbGlhYmxlSGlk
ZGVuT2Zmc2V0cyYmKGUuc3R5bGUmJmUuc3R5bGUuZGlzcGxheXx8RHQoZSwiZGlzcGxheSIpKT09
PSJub25lIn0sdi5leHByLmZpbHRlcnMudmlzaWJsZT1mdW5jdGlvbihlKXtyZXR1cm4hdi5leHBy
LmZpbHRlcnMuaGlkZGVuKGUpfSksdi5lYWNoKHttYXJnaW46IiIscGFkZGluZzoiIixib3JkZXI6
IldpZHRoIn0sZnVuY3Rpb24oZSx0KXt2LmNzc0hvb2tzW2UrdF09e2V4cGFuZDpmdW5jdGlvbihu
KXt2YXIgcixpPXR5cGVvZiBuPT0ic3RyaW5nIj9uLnNwbGl0KCIgIik6W25dLHM9e307Zm9yKHI9
MDtyPDQ7cisrKXNbZSskdFtyXSt0XT1pW3JdfHxpW3ItMl18fGlbMF07cmV0dXJuIHN9fSxxdC50
ZXN0KGUpfHwodi5jc3NIb29rc1tlK3RdLnNldD1adCl9KTt2YXIgcm49LyUyMC9nLHNuPS9cW1xd
JC8sb249L1xyP1xuL2csdW49L14oPzpjb2xvcnxkYXRlfGRhdGV0aW1lfGRhdGV0aW1lLWxvY2Fs
fGVtYWlsfGhpZGRlbnxtb250aHxudW1iZXJ8cGFzc3dvcmR8cmFuZ2V8c2VhcmNofHRlbHx0ZXh0
fHRpbWV8dXJsfHdlZWspJC9pLGFuPS9eKD86c2VsZWN0fHRleHRhcmVhKS9pO3YuZm4uZXh0ZW5k
KHtzZXJpYWxpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdi5wYXJhbSh0aGlzLnNlcmlhbGl6ZUFycmF5
KCkpfSxzZXJpYWxpemVBcnJheTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigp
e3JldHVybiB0aGlzLmVsZW1lbnRzP3YubWFrZUFycmF5KHRoaXMuZWxlbWVudHMpOnRoaXN9KS5m
aWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uYW1lJiYhdGhpcy5kaXNhYmxlZCYmKHRoaXMu
Y2hlY2tlZHx8YW4udGVzdCh0aGlzLm5vZGVOYW1lKXx8dW4udGVzdCh0aGlzLnR5cGUpKX0pLm1h
cChmdW5jdGlvbihlLHQpe3ZhciBuPXYodGhpcykudmFsKCk7cmV0dXJuIG49PW51bGw/bnVsbDp2
LmlzQXJyYXkobik/di5tYXAobixmdW5jdGlvbihlLG4pe3JldHVybntuYW1lOnQubmFtZSx2YWx1
ZTplLnJlcGxhY2Uob24sIlxyXG4iKX19KTp7bmFtZTp0Lm5hbWUsdmFsdWU6bi5yZXBsYWNlKG9u
LCJcclxuIil9fSkuZ2V0KCl9fSksdi5wYXJhbT1mdW5jdGlvbihlLG4pe3ZhciByLGk9W10scz1m
dW5jdGlvbihlLHQpe3Q9di5pc0Z1bmN0aW9uKHQpP3QoKTp0PT1udWxsPyIiOnQsaVtpLmxlbmd0
aF09ZW5jb2RlVVJJQ29tcG9uZW50KGUpKyI9IitlbmNvZGVVUklDb21wb25lbnQodCl9O249PT10
JiYobj12LmFqYXhTZXR0aW5ncyYmdi5hamF4U2V0dGluZ3MudHJhZGl0aW9uYWwpO2lmKHYuaXNB
cnJheShlKXx8ZS5qcXVlcnkmJiF2LmlzUGxhaW5PYmplY3QoZSkpdi5lYWNoKGUsZnVuY3Rpb24o
KXtzKHRoaXMubmFtZSx0aGlzLnZhbHVlKX0pO2Vsc2UgZm9yKHIgaW4gZSlmbihyLGVbcl0sbixz
KTtyZXR1cm4gaS5qb2luKCImIikucmVwbGFjZShybiwiKyIpfTt2YXIgbG4sY24saG49LyMuKiQv
LHBuPS9eKC4qPyk6WyBcdF0qKFteXHJcbl0qKVxyPyQvbWcsZG49L14oPzphYm91dHxhcHB8YXBw
XC1zdG9yYWdlfC4rXC1leHRlbnNpb258ZmlsZXxyZXN8d2lkZ2V0KTokLyx2bj0vXig/OkdFVHxI
RUFEKSQvLG1uPS9eXC9cLy8sZ249L1w/Lyx5bj0vPHNjcmlwdFxiW148XSooPzooPyE8XC9zY3Jp
cHQ+KTxbXjxdKikqPFwvc2NyaXB0Pi9naSxibj0vKFs/Jl0pXz1bXiZdKi8sd249L14oW1x3XCtc
LlwtXSs6KSg/OlwvXC8oW15cLz8jOl0qKSg/OjooXGQrKXwpfCkvLEVuPXYuZm4ubG9hZCxTbj17
fSx4bj17fSxUbj1bIiovIl0rWyIqIl07dHJ5e2NuPXMuaHJlZn1jYXRjaChObil7Y249aS5jcmVh
dGVFbGVtZW50KCJhIiksY24uaHJlZj0iIixjbj1jbi5ocmVmfWxuPXduLmV4ZWMoY24udG9Mb3dl
ckNhc2UoKSl8fFtdLHYuZm4ubG9hZD1mdW5jdGlvbihlLG4scil7aWYodHlwZW9mIGUhPSJzdHJp
bmciJiZFbilyZXR1cm4gRW4uYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKCF0aGlzLmxlbmd0aCly
ZXR1cm4gdGhpczt2YXIgaSxzLG8sdT10aGlzLGE9ZS5pbmRleE9mKCIgIik7cmV0dXJuIGE+PTAm
JihpPWUuc2xpY2UoYSxlLmxlbmd0aCksZT1lLnNsaWNlKDAsYSkpLHYuaXNGdW5jdGlvbihuKT8o
cj1uLG49dCk6biYmdHlwZW9mIG49PSJvYmplY3QiJiYocz0iUE9TVCIpLHYuYWpheCh7dXJsOmUs
dHlwZTpzLGRhdGFUeXBlOiJodG1sIixkYXRhOm4sY29tcGxldGU6ZnVuY3Rpb24oZSx0KXtyJiZ1
LmVhY2gocixvfHxbZS5yZXNwb25zZVRleHQsdCxlXSl9fSkuZG9uZShmdW5jdGlvbihlKXtvPWFy
Z3VtZW50cyx1Lmh0bWwoaT92KCI8ZGl2PiIpLmFwcGVuZChlLnJlcGxhY2UoeW4sIiIpKS5maW5k
KGkpOmUpfSksdGhpc30sdi5lYWNoKCJhamF4U3RhcnQgYWpheFN0b3AgYWpheENvbXBsZXRlIGFq
YXhFcnJvciBhamF4U3VjY2VzcyBhamF4U2VuZCIuc3BsaXQoIiAiKSxmdW5jdGlvbihlLHQpe3Yu
Zm5bdF09ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMub24odCxlKX19KSx2LmVhY2goWyJnZXQiLCJw
b3N0Il0sZnVuY3Rpb24oZSxuKXt2W25dPWZ1bmN0aW9uKGUscixpLHMpe3JldHVybiB2LmlzRnVu
Y3Rpb24ocikmJihzPXN8fGksaT1yLHI9dCksdi5hamF4KHt0eXBlOm4sdXJsOmUsZGF0YTpyLHN1
Y2Nlc3M6aSxkYXRhVHlwZTpzfSl9fSksdi5leHRlbmQoe2dldFNjcmlwdDpmdW5jdGlvbihlLG4p
e3JldHVybiB2LmdldChlLHQsbiwic2NyaXB0Iil9LGdldEpTT046ZnVuY3Rpb24oZSx0LG4pe3Jl
dHVybiB2LmdldChlLHQsbiwianNvbiIpfSxhamF4U2V0dXA6ZnVuY3Rpb24oZSx0KXtyZXR1cm4g
dD9MbihlLHYuYWpheFNldHRpbmdzKToodD1lLGU9di5hamF4U2V0dGluZ3MpLExuKGUsdCksZX0s
YWpheFNldHRpbmdzOnt1cmw6Y24saXNMb2NhbDpkbi50ZXN0KGxuWzFdKSxnbG9iYWw6ITAsdHlw
ZToiR0VUIixjb250ZW50VHlwZToiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBj
aGFyc2V0PVVURi04Iixwcm9jZXNzRGF0YTohMCxhc3luYzohMCxhY2NlcHRzOnt4bWw6ImFwcGxp
Y2F0aW9uL3htbCwgdGV4dC94bWwiLGh0bWw6InRleHQvaHRtbCIsdGV4dDoidGV4dC9wbGFpbiIs
anNvbjoiYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0IiwiKiI6VG59LGNvbnRlbnRz
Ont4bWw6L3htbC8saHRtbDovaHRtbC8sanNvbjovanNvbi99LHJlc3BvbnNlRmllbGRzOnt4bWw6
InJlc3BvbnNlWE1MIix0ZXh0OiJyZXNwb25zZVRleHQifSxjb252ZXJ0ZXJzOnsiKiB0ZXh0Ijpl
LlN0cmluZywidGV4dCBodG1sIjohMCwidGV4dCBqc29uIjp2LnBhcnNlSlNPTiwidGV4dCB4bWwi
OnYucGFyc2VYTUx9LGZsYXRPcHRpb25zOntjb250ZXh0OiEwLHVybDohMH19LGFqYXhQcmVmaWx0
ZXI6Q24oU24pLGFqYXhUcmFuc3BvcnQ6Q24oeG4pLGFqYXg6ZnVuY3Rpb24oZSxuKXtmdW5jdGlv
biBUKGUsbixzLGEpe3ZhciBsLHksYix3LFMsVD1uO2lmKEU9PT0yKXJldHVybjtFPTIsdSYmY2xl
YXJUaW1lb3V0KHUpLG89dCxpPWF8fCIiLHgucmVhZHlTdGF0ZT1lPjA/NDowLHMmJih3PUFuKGMs
eCxzKSk7aWYoZT49MjAwJiZlPDMwMHx8ZT09PTMwNCljLmlmTW9kaWZpZWQmJihTPXguZ2V0UmVz
cG9uc2VIZWFkZXIoIkxhc3QtTW9kaWZpZWQiKSxTJiYodi5sYXN0TW9kaWZpZWRbcl09UyksUz14
LmdldFJlc3BvbnNlSGVhZGVyKCJFdGFnIiksUyYmKHYuZXRhZ1tyXT1TKSksZT09PTMwND8oVD0i
bm90bW9kaWZpZWQiLGw9ITApOihsPU9uKGMsdyksVD1sLnN0YXRlLHk9bC5kYXRhLGI9bC5lcnJv
cixsPSFiKTtlbHNle2I9VDtpZighVHx8ZSlUPSJlcnJvciIsZTwwJiYoZT0wKX14LnN0YXR1cz1l
LHguc3RhdHVzVGV4dD0obnx8VCkrIiIsbD9kLnJlc29sdmVXaXRoKGgsW3ksVCx4XSk6ZC5yZWpl
Y3RXaXRoKGgsW3gsVCxiXSkseC5zdGF0dXNDb2RlKGcpLGc9dCxmJiZwLnRyaWdnZXIoImFqYXgi
KyhsPyJTdWNjZXNzIjoiRXJyb3IiKSxbeCxjLGw/eTpiXSksbS5maXJlV2l0aChoLFt4LFRdKSxm
JiYocC50cmlnZ2VyKCJhamF4Q29tcGxldGUiLFt4LGNdKSwtLXYuYWN0aXZlfHx2LmV2ZW50LnRy
aWdnZXIoImFqYXhTdG9wIikpfXR5cGVvZiBlPT0ib2JqZWN0IiYmKG49ZSxlPXQpLG49bnx8e307
dmFyIHIsaSxzLG8sdSxhLGYsbCxjPXYuYWpheFNldHVwKHt9LG4pLGg9Yy5jb250ZXh0fHxjLHA9
aCE9PWMmJihoLm5vZGVUeXBlfHxoIGluc3RhbmNlb2Ygdik/dihoKTp2LmV2ZW50LGQ9di5EZWZl
cnJlZCgpLG09di5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IiksZz1jLnN0YXR1c0NvZGV8fHt9LGI9
e30sdz17fSxFPTAsUz0iY2FuY2VsZWQiLHg9e3JlYWR5U3RhdGU6MCxzZXRSZXF1ZXN0SGVhZGVy
OmZ1bmN0aW9uKGUsdCl7aWYoIUUpe3ZhciBuPWUudG9Mb3dlckNhc2UoKTtlPXdbbl09d1tuXXx8
ZSxiW2VdPXR9cmV0dXJuIHRoaXN9LGdldEFsbFJlc3BvbnNlSGVhZGVyczpmdW5jdGlvbigpe3Jl
dHVybiBFPT09Mj9pOm51bGx9LGdldFJlc3BvbnNlSGVhZGVyOmZ1bmN0aW9uKGUpe3ZhciBuO2lm
KEU9PT0yKXtpZighcyl7cz17fTt3aGlsZShuPXBuLmV4ZWMoaSkpc1tuWzFdLnRvTG93ZXJDYXNl
KCldPW5bMl19bj1zW2UudG9Mb3dlckNhc2UoKV19cmV0dXJuIG49PT10P251bGw6bn0sb3ZlcnJp
ZGVNaW1lVHlwZTpmdW5jdGlvbihlKXtyZXR1cm4gRXx8KGMubWltZVR5cGU9ZSksdGhpc30sYWJv
cnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZXx8UyxvJiZvLmFib3J0KGUpLFQoMCxlKSx0aGlzfX07
ZC5wcm9taXNlKHgpLHguc3VjY2Vzcz14LmRvbmUseC5lcnJvcj14LmZhaWwseC5jb21wbGV0ZT1t
LmFkZCx4LnN0YXR1c0NvZGU9ZnVuY3Rpb24oZSl7aWYoZSl7dmFyIHQ7aWYoRTwyKWZvcih0IGlu
IGUpZ1t0XT1bZ1t0XSxlW3RdXTtlbHNlIHQ9ZVt4LnN0YXR1c10seC5hbHdheXModCl9cmV0dXJu
IHRoaXN9LGMudXJsPSgoZXx8Yy51cmwpKyIiKS5yZXBsYWNlKGhuLCIiKS5yZXBsYWNlKG1uLGxu
WzFdKyIvLyIpLGMuZGF0YVR5cGVzPXYudHJpbShjLmRhdGFUeXBlfHwiKiIpLnRvTG93ZXJDYXNl
KCkuc3BsaXQoeSksYy5jcm9zc0RvbWFpbj09bnVsbCYmKGE9d24uZXhlYyhjLnVybC50b0xvd2Vy
Q2FzZSgpKSxjLmNyb3NzRG9tYWluPSEoIWF8fGFbMV09PT1sblsxXSYmYVsyXT09PWxuWzJdJiYo
YVszXXx8KGFbMV09PT0iaHR0cDoiPzgwOjQ0MykpPT0obG5bM118fChsblsxXT09PSJodHRwOiI/
ODA6NDQzKSkpKSxjLmRhdGEmJmMucHJvY2Vzc0RhdGEmJnR5cGVvZiBjLmRhdGEhPSJzdHJpbmci
JiYoYy5kYXRhPXYucGFyYW0oYy5kYXRhLGMudHJhZGl0aW9uYWwpKSxrbihTbixjLG4seCk7aWYo
RT09PTIpcmV0dXJuIHg7Zj1jLmdsb2JhbCxjLnR5cGU9Yy50eXBlLnRvVXBwZXJDYXNlKCksYy5o
YXNDb250ZW50PSF2bi50ZXN0KGMudHlwZSksZiYmdi5hY3RpdmUrKz09PTAmJnYuZXZlbnQudHJp
Z2dlcigiYWpheFN0YXJ0Iik7aWYoIWMuaGFzQ29udGVudCl7Yy5kYXRhJiYoYy51cmwrPShnbi50
ZXN0KGMudXJsKT8iJiI6Ij8iKStjLmRhdGEsZGVsZXRlIGMuZGF0YSkscj1jLnVybDtpZihjLmNh
Y2hlPT09ITEpe3ZhciBOPXYubm93KCksQz1jLnVybC5yZXBsYWNlKGJuLCIkMV89IitOKTtjLnVy
bD1DKyhDPT09Yy51cmw/KGduLnRlc3QoYy51cmwpPyImIjoiPyIpKyJfPSIrTjoiIil9fShjLmRh
dGEmJmMuaGFzQ29udGVudCYmYy5jb250ZW50VHlwZSE9PSExfHxuLmNvbnRlbnRUeXBlKSYmeC5z
ZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLGMuY29udGVudFR5cGUpLGMuaWZNb2RpZmll
ZCYmKHI9cnx8Yy51cmwsdi5sYXN0TW9kaWZpZWRbcl0mJnguc2V0UmVxdWVzdEhlYWRlcigiSWYt
TW9kaWZpZWQtU2luY2UiLHYubGFzdE1vZGlmaWVkW3JdKSx2LmV0YWdbcl0mJnguc2V0UmVxdWVz
dEhlYWRlcigiSWYtTm9uZS1NYXRjaCIsdi5ldGFnW3JdKSkseC5zZXRSZXF1ZXN0SGVhZGVyKCJB
Y2NlcHQiLGMuZGF0YVR5cGVzWzBdJiZjLmFjY2VwdHNbYy5kYXRhVHlwZXNbMF1dP2MuYWNjZXB0
c1tjLmRhdGFUeXBlc1swXV0rKGMuZGF0YVR5cGVzWzBdIT09IioiPyIsICIrVG4rIjsgcT0wLjAx
IjoiIik6Yy5hY2NlcHRzWyIqIl0pO2ZvcihsIGluIGMuaGVhZGVycyl4LnNldFJlcXVlc3RIZWFk
ZXIobCxjLmhlYWRlcnNbbF0pO2lmKCFjLmJlZm9yZVNlbmR8fGMuYmVmb3JlU2VuZC5jYWxsKGgs
eCxjKSE9PSExJiZFIT09Mil7Uz0iYWJvcnQiO2ZvcihsIGlue3N1Y2Nlc3M6MSxlcnJvcjoxLGNv
bXBsZXRlOjF9KXhbbF0oY1tsXSk7bz1rbih4bixjLG4seCk7aWYoIW8pVCgtMSwiTm8gVHJhbnNw
b3J0Iik7ZWxzZXt4LnJlYWR5U3RhdGU9MSxmJiZwLnRyaWdnZXIoImFqYXhTZW5kIixbeCxjXSks
Yy5hc3luYyYmYy50aW1lb3V0PjAmJih1PXNldFRpbWVvdXQoZnVuY3Rpb24oKXt4LmFib3J0KCJ0
aW1lb3V0Iil9LGMudGltZW91dCkpO3RyeXtFPTEsby5zZW5kKGIsVCl9Y2F0Y2goayl7aWYoIShF
PDIpKXRocm93IGs7VCgtMSxrKX19cmV0dXJuIHh9cmV0dXJuIHguYWJvcnQoKX0sYWN0aXZlOjAs
bGFzdE1vZGlmaWVkOnt9LGV0YWc6e319KTt2YXIgTW49W10sX249L1w/LyxEbj0vKD0pXD8oPz0m
fCQpfFw/XD8vLFBuPXYubm93KCk7di5hamF4U2V0dXAoe2pzb25wOiJjYWxsYmFjayIsanNvbnBD
YWxsYmFjazpmdW5jdGlvbigpe3ZhciBlPU1uLnBvcCgpfHx2LmV4cGFuZG8rIl8iK1BuKys7cmV0
dXJuIHRoaXNbZV09ITAsZX19KSx2LmFqYXhQcmVmaWx0ZXIoImpzb24ganNvbnAiLGZ1bmN0aW9u
KG4scixpKXt2YXIgcyxvLHUsYT1uLmRhdGEsZj1uLnVybCxsPW4uanNvbnAhPT0hMSxjPWwmJkRu
LnRlc3QoZiksaD1sJiYhYyYmdHlwZW9mIGE9PSJzdHJpbmciJiYhKG4uY29udGVudFR5cGV8fCIi
KS5pbmRleE9mKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKSYmRG4udGVzdChh
KTtpZihuLmRhdGFUeXBlc1swXT09PSJqc29ucCJ8fGN8fGgpcmV0dXJuIHM9bi5qc29ucENhbGxi
YWNrPXYuaXNGdW5jdGlvbihuLmpzb25wQ2FsbGJhY2spP24uanNvbnBDYWxsYmFjaygpOm4uanNv
bnBDYWxsYmFjayxvPWVbc10sYz9uLnVybD1mLnJlcGxhY2UoRG4sIiQxIitzKTpoP24uZGF0YT1h
LnJlcGxhY2UoRG4sIiQxIitzKTpsJiYobi51cmwrPShfbi50ZXN0KGYpPyImIjoiPyIpK24uanNv
bnArIj0iK3MpLG4uY29udmVydGVyc1sic2NyaXB0IGpzb24iXT1mdW5jdGlvbigpe3JldHVybiB1
fHx2LmVycm9yKHMrIiB3YXMgbm90IGNhbGxlZCIpLHVbMF19LG4uZGF0YVR5cGVzWzBdPSJqc29u
IixlW3NdPWZ1bmN0aW9uKCl7dT1hcmd1bWVudHN9LGkuYWx3YXlzKGZ1bmN0aW9uKCl7ZVtzXT1v
LG5bc10mJihuLmpzb25wQ2FsbGJhY2s9ci5qc29ucENhbGxiYWNrLE1uLnB1c2gocykpLHUmJnYu
aXNGdW5jdGlvbihvKSYmbyh1WzBdKSx1PW89dH0pLCJzY3JpcHQifSksdi5hamF4U2V0dXAoe2Fj
Y2VwdHM6e3NjcmlwdDoidGV4dC9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9qYXZhc2NyaXB0LCBh
cHBsaWNhdGlvbi9lY21hc2NyaXB0LCBhcHBsaWNhdGlvbi94LWVjbWFzY3JpcHQifSxjb250ZW50
czp7c2NyaXB0Oi9qYXZhc2NyaXB0fGVjbWFzY3JpcHQvfSxjb252ZXJ0ZXJzOnsidGV4dCBzY3Jp
cHQiOmZ1bmN0aW9uKGUpe3JldHVybiB2Lmdsb2JhbEV2YWwoZSksZX19fSksdi5hamF4UHJlZmls
dGVyKCJzY3JpcHQiLGZ1bmN0aW9uKGUpe2UuY2FjaGU9PT10JiYoZS5jYWNoZT0hMSksZS5jcm9z
c0RvbWFpbiYmKGUudHlwZT0iR0VUIixlLmdsb2JhbD0hMSl9KSx2LmFqYXhUcmFuc3BvcnQoInNj
cmlwdCIsZnVuY3Rpb24oZSl7aWYoZS5jcm9zc0RvbWFpbil7dmFyIG4scj1pLmhlYWR8fGkuZ2V0
RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXXx8aS5kb2N1bWVudEVsZW1lbnQ7cmV0dXJue3Nl
bmQ6ZnVuY3Rpb24ocyxvKXtuPWkuY3JlYXRlRWxlbWVudCgic2NyaXB0Iiksbi5hc3luYz0iYXN5
bmMiLGUuc2NyaXB0Q2hhcnNldCYmKG4uY2hhcnNldD1lLnNjcmlwdENoYXJzZXQpLG4uc3JjPWUu
dXJsLG4ub25sb2FkPW4ub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKGUsaSl7aWYoaXx8IW4u
cmVhZHlTdGF0ZXx8L2xvYWRlZHxjb21wbGV0ZS8udGVzdChuLnJlYWR5U3RhdGUpKW4ub25sb2Fk
PW4ub25yZWFkeXN0YXRlY2hhbmdlPW51bGwsciYmbi5wYXJlbnROb2RlJiZyLnJlbW92ZUNoaWxk
KG4pLG49dCxpfHxvKDIwMCwic3VjY2VzcyIpfSxyLmluc2VydEJlZm9yZShuLHIuZmlyc3RDaGls
ZCl9LGFib3J0OmZ1bmN0aW9uKCl7biYmbi5vbmxvYWQoMCwxKX19fX0pO3ZhciBIbixCbj1lLkFj
dGl2ZVhPYmplY3Q/ZnVuY3Rpb24oKXtmb3IodmFyIGUgaW4gSG4pSG5bZV0oMCwxKX06ITEsam49
MDt2LmFqYXhTZXR0aW5ncy54aHI9ZS5BY3RpdmVYT2JqZWN0P2Z1bmN0aW9uKCl7cmV0dXJuIXRo
aXMuaXNMb2NhbCYmRm4oKXx8SW4oKX06Rm4sZnVuY3Rpb24oZSl7di5leHRlbmQodi5zdXBwb3J0
LHthamF4OiEhZSxjb3JzOiEhZSYmIndpdGhDcmVkZW50aWFscyJpbiBlfSl9KHYuYWpheFNldHRp
bmdzLnhocigpKSx2LnN1cHBvcnQuYWpheCYmdi5hamF4VHJhbnNwb3J0KGZ1bmN0aW9uKG4pe2lm
KCFuLmNyb3NzRG9tYWlufHx2LnN1cHBvcnQuY29ycyl7dmFyIHI7cmV0dXJue3NlbmQ6ZnVuY3Rp
b24oaSxzKXt2YXIgbyx1LGE9bi54aHIoKTtuLnVzZXJuYW1lP2Eub3BlbihuLnR5cGUsbi51cmws
bi5hc3luYyxuLnVzZXJuYW1lLG4ucGFzc3dvcmQpOmEub3BlbihuLnR5cGUsbi51cmwsbi5hc3lu
Yyk7aWYobi54aHJGaWVsZHMpZm9yKHUgaW4gbi54aHJGaWVsZHMpYVt1XT1uLnhockZpZWxkc1t1
XTtuLm1pbWVUeXBlJiZhLm92ZXJyaWRlTWltZVR5cGUmJmEub3ZlcnJpZGVNaW1lVHlwZShuLm1p
bWVUeXBlKSwhbi5jcm9zc0RvbWFpbiYmIWlbIlgtUmVxdWVzdGVkLVdpdGgiXSYmKGlbIlgtUmVx
dWVzdGVkLVdpdGgiXT0iWE1MSHR0cFJlcXVlc3QiKTt0cnl7Zm9yKHUgaW4gaSlhLnNldFJlcXVl
c3RIZWFkZXIodSxpW3VdKX1jYXRjaChmKXt9YS5zZW5kKG4uaGFzQ29udGVudCYmbi5kYXRhfHxu
dWxsKSxyPWZ1bmN0aW9uKGUsaSl7dmFyIHUsZixsLGMsaDt0cnl7aWYociYmKGl8fGEucmVhZHlT
dGF0ZT09PTQpKXtyPXQsbyYmKGEub25yZWFkeXN0YXRlY2hhbmdlPXYubm9vcCxCbiYmZGVsZXRl
IEhuW29dKTtpZihpKWEucmVhZHlTdGF0ZSE9PTQmJmEuYWJvcnQoKTtlbHNle3U9YS5zdGF0dXMs
bD1hLmdldEFsbFJlc3BvbnNlSGVhZGVycygpLGM9e30saD1hLnJlc3BvbnNlWE1MLGgmJmguZG9j
dW1lbnRFbGVtZW50JiYoYy54bWw9aCk7dHJ5e2MudGV4dD1hLnJlc3BvbnNlVGV4dH1jYXRjaChw
KXt9dHJ5e2Y9YS5zdGF0dXNUZXh0fWNhdGNoKHApe2Y9IiJ9IXUmJm4uaXNMb2NhbCYmIW4uY3Jv
c3NEb21haW4/dT1jLnRleHQ/MjAwOjQwNDp1PT09MTIyMyYmKHU9MjA0KX19fWNhdGNoKGQpe2l8
fHMoLTEsZCl9YyYmcyh1LGYsYyxsKX0sbi5hc3luYz9hLnJlYWR5U3RhdGU9PT00P3NldFRpbWVv
dXQociwwKToobz0rK2puLEJuJiYoSG58fChIbj17fSx2KGUpLnVubG9hZChCbikpLEhuW29dPXIp
LGEub25yZWFkeXN0YXRlY2hhbmdlPXIpOnIoKX0sYWJvcnQ6ZnVuY3Rpb24oKXtyJiZyKDAsMSl9
fX19KTt2YXIgcW4sUm4sVW49L14oPzp0b2dnbGV8c2hvd3xoaWRlKSQvLHpuPW5ldyBSZWdFeHAo
Il4oPzooWy0rXSk9fCkoIittKyIpKFthLXolXSopJCIsImkiKSxXbj0vcXVldWVIb29rcyQvLFhu
PVtHbl0sVm49eyIqIjpbZnVuY3Rpb24oZSx0KXt2YXIgbixyLGk9dGhpcy5jcmVhdGVUd2Vlbihl
LHQpLHM9em4uZXhlYyh0KSxvPWkuY3VyKCksdT0rb3x8MCxhPTEsZj0yMDtpZihzKXtuPStzWzJd
LHI9c1szXXx8KHYuY3NzTnVtYmVyW2VdPyIiOiJweCIpO2lmKHIhPT0icHgiJiZ1KXt1PXYuY3Nz
KGkuZWxlbSxlLCEwKXx8bnx8MTtkbyBhPWF8fCIuNSIsdS89YSx2LnN0eWxlKGkuZWxlbSxlLHUr
cik7d2hpbGUoYSE9PShhPWkuY3VyKCkvbykmJmEhPT0xJiYtLWYpfWkudW5pdD1yLGkuc3RhcnQ9
dSxpLmVuZD1zWzFdP3UrKHNbMV0rMSkqbjpufXJldHVybiBpfV19O3YuQW5pbWF0aW9uPXYuZXh0
ZW5kKEtuLHt0d2VlbmVyOmZ1bmN0aW9uKGUsdCl7di5pc0Z1bmN0aW9uKGUpPyh0PWUsZT1bIioi
XSk6ZT1lLnNwbGl0KCIgIik7dmFyIG4scj0wLGk9ZS5sZW5ndGg7Zm9yKDtyPGk7cisrKW49ZVty
XSxWbltuXT1WbltuXXx8W10sVm5bbl0udW5zaGlmdCh0KX0scHJlZmlsdGVyOmZ1bmN0aW9uKGUs
dCl7dD9Ybi51bnNoaWZ0KGUpOlhuLnB1c2goZSl9fSksdi5Ud2Vlbj1ZbixZbi5wcm90b3R5cGU9
e2NvbnN0cnVjdG9yOlluLGluaXQ6ZnVuY3Rpb24oZSx0LG4scixpLHMpe3RoaXMuZWxlbT1lLHRo
aXMucHJvcD1uLHRoaXMuZWFzaW5nPWl8fCJzd2luZyIsdGhpcy5vcHRpb25zPXQsdGhpcy5zdGFy
dD10aGlzLm5vdz10aGlzLmN1cigpLHRoaXMuZW5kPXIsdGhpcy51bml0PXN8fCh2LmNzc051bWJl
cltuXT8iIjoicHgiKX0sY3VyOmZ1bmN0aW9uKCl7dmFyIGU9WW4ucHJvcEhvb2tzW3RoaXMucHJv
cF07cmV0dXJuIGUmJmUuZ2V0P2UuZ2V0KHRoaXMpOlluLnByb3BIb29rcy5fZGVmYXVsdC5nZXQo
dGhpcyl9LHJ1bjpmdW5jdGlvbihlKXt2YXIgdCxuPVluLnByb3BIb29rc1t0aGlzLnByb3BdO3Jl
dHVybiB0aGlzLm9wdGlvbnMuZHVyYXRpb24/dGhpcy5wb3M9dD12LmVhc2luZ1t0aGlzLmVhc2lu
Z10oZSx0aGlzLm9wdGlvbnMuZHVyYXRpb24qZSwwLDEsdGhpcy5vcHRpb25zLmR1cmF0aW9uKTp0
aGlzLnBvcz10PWUsdGhpcy5ub3c9KHRoaXMuZW5kLXRoaXMuc3RhcnQpKnQrdGhpcy5zdGFydCx0
aGlzLm9wdGlvbnMuc3RlcCYmdGhpcy5vcHRpb25zLnN0ZXAuY2FsbCh0aGlzLmVsZW0sdGhpcy5u
b3csdGhpcyksbiYmbi5zZXQ/bi5zZXQodGhpcyk6WW4ucHJvcEhvb2tzLl9kZWZhdWx0LnNldCh0
aGlzKSx0aGlzfX0sWW4ucHJvdG90eXBlLmluaXQucHJvdG90eXBlPVluLnByb3RvdHlwZSxZbi5w
cm9wSG9va3M9e19kZWZhdWx0OntnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIGUuZWxlbVtl
LnByb3BdPT1udWxsfHwhIWUuZWxlbS5zdHlsZSYmZS5lbGVtLnN0eWxlW2UucHJvcF0hPW51bGw/
KHQ9di5jc3MoZS5lbGVtLGUucHJvcCwhMSwiIiksIXR8fHQ9PT0iYXV0byI/MDp0KTplLmVsZW1b
ZS5wcm9wXX0sc2V0OmZ1bmN0aW9uKGUpe3YuZnguc3RlcFtlLnByb3BdP3YuZnguc3RlcFtlLnBy
b3BdKGUpOmUuZWxlbS5zdHlsZSYmKGUuZWxlbS5zdHlsZVt2LmNzc1Byb3BzW2UucHJvcF1dIT1u
dWxsfHx2LmNzc0hvb2tzW2UucHJvcF0pP3Yuc3R5bGUoZS5lbGVtLGUucHJvcCxlLm5vdytlLnVu
aXQpOmUuZWxlbVtlLnByb3BdPWUubm93fX19LFluLnByb3BIb29rcy5zY3JvbGxUb3A9WW4ucHJv
cEhvb2tzLnNjcm9sbExlZnQ9e3NldDpmdW5jdGlvbihlKXtlLmVsZW0ubm9kZVR5cGUmJmUuZWxl
bS5wYXJlbnROb2RlJiYoZS5lbGVtW2UucHJvcF09ZS5ub3cpfX0sdi5lYWNoKFsidG9nZ2xlIiwi
c2hvdyIsImhpZGUiXSxmdW5jdGlvbihlLHQpe3ZhciBuPXYuZm5bdF07di5mblt0XT1mdW5jdGlv
bihyLGkscyl7cmV0dXJuIHI9PW51bGx8fHR5cGVvZiByPT0iYm9vbGVhbiJ8fCFlJiZ2LmlzRnVu
Y3Rpb24ocikmJnYuaXNGdW5jdGlvbihpKT9uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTp0aGlzLmFu
aW1hdGUoWm4odCwhMCkscixpLHMpfX0pLHYuZm4uZXh0ZW5kKHtmYWRlVG86ZnVuY3Rpb24oZSx0
LG4scil7cmV0dXJuIHRoaXMuZmlsdGVyKEd0KS5jc3MoIm9wYWNpdHkiLDApLnNob3coKS5lbmQo
KS5hbmltYXRlKHtvcGFjaXR5OnR9LGUsbixyKX0sYW5pbWF0ZTpmdW5jdGlvbihlLHQsbixyKXt2
YXIgaT12LmlzRW1wdHlPYmplY3QoZSkscz12LnNwZWVkKHQsbixyKSxvPWZ1bmN0aW9uKCl7dmFy
IHQ9S24odGhpcyx2LmV4dGVuZCh7fSxlKSxzKTtpJiZ0LnN0b3AoITApfTtyZXR1cm4gaXx8cy5x
dWV1ZT09PSExP3RoaXMuZWFjaChvKTp0aGlzLnF1ZXVlKHMucXVldWUsbyl9LHN0b3A6ZnVuY3Rp
b24oZSxuLHIpe3ZhciBpPWZ1bmN0aW9uKGUpe3ZhciB0PWUuc3RvcDtkZWxldGUgZS5zdG9wLHQo
cil9O3JldHVybiB0eXBlb2YgZSE9InN0cmluZyImJihyPW4sbj1lLGU9dCksbiYmZSE9PSExJiZ0
aGlzLnF1ZXVlKGV8fCJmeCIsW10pLHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciB0PSEwLG49ZSE9
bnVsbCYmZSsicXVldWVIb29rcyIscz12LnRpbWVycyxvPXYuX2RhdGEodGhpcyk7aWYobilvW25d
JiZvW25dLnN0b3AmJmkob1tuXSk7ZWxzZSBmb3IobiBpbiBvKW9bbl0mJm9bbl0uc3RvcCYmV24u
dGVzdChuKSYmaShvW25dKTtmb3Iobj1zLmxlbmd0aDtuLS07KXNbbl0uZWxlbT09PXRoaXMmJihl
PT1udWxsfHxzW25dLnF1ZXVlPT09ZSkmJihzW25dLmFuaW0uc3RvcChyKSx0PSExLHMuc3BsaWNl
KG4sMSkpOyh0fHwhcikmJnYuZGVxdWV1ZSh0aGlzLGUpfSl9fSksdi5lYWNoKHtzbGlkZURvd246
Wm4oInNob3ciKSxzbGlkZVVwOlpuKCJoaWRlIiksc2xpZGVUb2dnbGU6Wm4oInRvZ2dsZSIpLGZh
ZGVJbjp7b3BhY2l0eToic2hvdyJ9LGZhZGVPdXQ6e29wYWNpdHk6ImhpZGUifSxmYWRlVG9nZ2xl
OntvcGFjaXR5OiJ0b2dnbGUifX0sZnVuY3Rpb24oZSx0KXt2LmZuW2VdPWZ1bmN0aW9uKGUsbixy
KXtyZXR1cm4gdGhpcy5hbmltYXRlKHQsZSxuLHIpfX0pLHYuc3BlZWQ9ZnVuY3Rpb24oZSx0LG4p
e3ZhciByPWUmJnR5cGVvZiBlPT0ib2JqZWN0Ij92LmV4dGVuZCh7fSxlKTp7Y29tcGxldGU6bnx8
IW4mJnR8fHYuaXNGdW5jdGlvbihlKSYmZSxkdXJhdGlvbjplLGVhc2luZzpuJiZ0fHx0JiYhdi5p
c0Z1bmN0aW9uKHQpJiZ0fTtyLmR1cmF0aW9uPXYuZngub2ZmPzA6dHlwZW9mIHIuZHVyYXRpb249
PSJudW1iZXIiP3IuZHVyYXRpb246ci5kdXJhdGlvbiBpbiB2LmZ4LnNwZWVkcz92LmZ4LnNwZWVk
c1tyLmR1cmF0aW9uXTp2LmZ4LnNwZWVkcy5fZGVmYXVsdDtpZihyLnF1ZXVlPT1udWxsfHxyLnF1
ZXVlPT09ITApci5xdWV1ZT0iZngiO3JldHVybiByLm9sZD1yLmNvbXBsZXRlLHIuY29tcGxldGU9
ZnVuY3Rpb24oKXt2LmlzRnVuY3Rpb24oci5vbGQpJiZyLm9sZC5jYWxsKHRoaXMpLHIucXVldWUm
JnYuZGVxdWV1ZSh0aGlzLHIucXVldWUpfSxyfSx2LmVhc2luZz17bGluZWFyOmZ1bmN0aW9uKGUp
e3JldHVybiBlfSxzd2luZzpmdW5jdGlvbihlKXtyZXR1cm4uNS1NYXRoLmNvcyhlKk1hdGguUEkp
LzJ9fSx2LnRpbWVycz1bXSx2LmZ4PVluLnByb3RvdHlwZS5pbml0LHYuZngudGljaz1mdW5jdGlv
bigpe3ZhciBlLG49di50aW1lcnMscj0wO3FuPXYubm93KCk7Zm9yKDtyPG4ubGVuZ3RoO3IrKyll
PW5bcl0sIWUoKSYmbltyXT09PWUmJm4uc3BsaWNlKHItLSwxKTtuLmxlbmd0aHx8di5meC5zdG9w
KCkscW49dH0sdi5meC50aW1lcj1mdW5jdGlvbihlKXtlKCkmJnYudGltZXJzLnB1c2goZSkmJiFS
biYmKFJuPXNldEludGVydmFsKHYuZngudGljayx2LmZ4LmludGVydmFsKSl9LHYuZnguaW50ZXJ2
YWw9MTMsdi5meC5zdG9wPWZ1bmN0aW9uKCl7Y2xlYXJJbnRlcnZhbChSbiksUm49bnVsbH0sdi5m
eC5zcGVlZHM9e3Nsb3c6NjAwLGZhc3Q6MjAwLF9kZWZhdWx0OjQwMH0sdi5meC5zdGVwPXt9LHYu
ZXhwciYmdi5leHByLmZpbHRlcnMmJih2LmV4cHIuZmlsdGVycy5hbmltYXRlZD1mdW5jdGlvbihl
KXtyZXR1cm4gdi5ncmVwKHYudGltZXJzLGZ1bmN0aW9uKHQpe3JldHVybiBlPT09dC5lbGVtfSku
bGVuZ3RofSk7dmFyIGVyPS9eKD86Ym9keXxodG1sKSQvaTt2LmZuLm9mZnNldD1mdW5jdGlvbihl
KXtpZihhcmd1bWVudHMubGVuZ3RoKXJldHVybiBlPT09dD90aGlzOnRoaXMuZWFjaChmdW5jdGlv
bih0KXt2Lm9mZnNldC5zZXRPZmZzZXQodGhpcyxlLHQpfSk7dmFyIG4scixpLHMsbyx1LGEsZj17
dG9wOjAsbGVmdDowfSxsPXRoaXNbMF0sYz1sJiZsLm93bmVyRG9jdW1lbnQ7aWYoIWMpcmV0dXJu
O3JldHVybihyPWMuYm9keSk9PT1sP3Yub2Zmc2V0LmJvZHlPZmZzZXQobCk6KG49Yy5kb2N1bWVu
dEVsZW1lbnQsdi5jb250YWlucyhuLGwpPyh0eXBlb2YgbC5nZXRCb3VuZGluZ0NsaWVudFJlY3Qh
PSJ1bmRlZmluZWQiJiYoZj1sLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKSxpPXRyKGMpLHM9bi5j
bGllbnRUb3B8fHIuY2xpZW50VG9wfHwwLG89bi5jbGllbnRMZWZ0fHxyLmNsaWVudExlZnR8fDAs
dT1pLnBhZ2VZT2Zmc2V0fHxuLnNjcm9sbFRvcCxhPWkucGFnZVhPZmZzZXR8fG4uc2Nyb2xsTGVm
dCx7dG9wOmYudG9wK3UtcyxsZWZ0OmYubGVmdCthLW99KTpmKX0sdi5vZmZzZXQ9e2JvZHlPZmZz
ZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5vZmZzZXRUb3Asbj1lLm9mZnNldExlZnQ7cmV0dXJuIHYu
c3VwcG9ydC5kb2VzTm90SW5jbHVkZU1hcmdpbkluQm9keU9mZnNldCYmKHQrPXBhcnNlRmxvYXQo
di5jc3MoZSwibWFyZ2luVG9wIikpfHwwLG4rPXBhcnNlRmxvYXQodi5jc3MoZSwibWFyZ2luTGVm
dCIpKXx8MCkse3RvcDp0LGxlZnQ6bn19LHNldE9mZnNldDpmdW5jdGlvbihlLHQsbil7dmFyIHI9
di5jc3MoZSwicG9zaXRpb24iKTtyPT09InN0YXRpYyImJihlLnN0eWxlLnBvc2l0aW9uPSJyZWxh
dGl2ZSIpO3ZhciBpPXYoZSkscz1pLm9mZnNldCgpLG89di5jc3MoZSwidG9wIiksdT12LmNzcyhl
LCJsZWZ0IiksYT0ocj09PSJhYnNvbHV0ZSJ8fHI9PT0iZml4ZWQiKSYmdi5pbkFycmF5KCJhdXRv
Iixbbyx1XSk+LTEsZj17fSxsPXt9LGMsaDthPyhsPWkucG9zaXRpb24oKSxjPWwudG9wLGg9bC5s
ZWZ0KTooYz1wYXJzZUZsb2F0KG8pfHwwLGg9cGFyc2VGbG9hdCh1KXx8MCksdi5pc0Z1bmN0aW9u
KHQpJiYodD10LmNhbGwoZSxuLHMpKSx0LnRvcCE9bnVsbCYmKGYudG9wPXQudG9wLXMudG9wK2Mp
LHQubGVmdCE9bnVsbCYmKGYubGVmdD10LmxlZnQtcy5sZWZ0K2gpLCJ1c2luZyJpbiB0P3QudXNp
bmcuY2FsbChlLGYpOmkuY3NzKGYpfX0sdi5mbi5leHRlbmQoe3Bvc2l0aW9uOmZ1bmN0aW9uKCl7
aWYoIXRoaXNbMF0pcmV0dXJuO3ZhciBlPXRoaXNbMF0sdD10aGlzLm9mZnNldFBhcmVudCgpLG49
dGhpcy5vZmZzZXQoKSxyPWVyLnRlc3QodFswXS5ub2RlTmFtZSk/e3RvcDowLGxlZnQ6MH06dC5v
ZmZzZXQoKTtyZXR1cm4gbi50b3AtPXBhcnNlRmxvYXQodi5jc3MoZSwibWFyZ2luVG9wIikpfHww
LG4ubGVmdC09cGFyc2VGbG9hdCh2LmNzcyhlLCJtYXJnaW5MZWZ0IikpfHwwLHIudG9wKz1wYXJz
ZUZsb2F0KHYuY3NzKHRbMF0sImJvcmRlclRvcFdpZHRoIikpfHwwLHIubGVmdCs9cGFyc2VGbG9h
dCh2LmNzcyh0WzBdLCJib3JkZXJMZWZ0V2lkdGgiKSl8fDAse3RvcDpuLnRvcC1yLnRvcCxsZWZ0
Om4ubGVmdC1yLmxlZnR9fSxvZmZzZXRQYXJlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAo
ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9mZnNldFBhcmVudHx8aS5ib2R5O3doaWxlKGUmJiFlci50
ZXN0KGUubm9kZU5hbWUpJiZ2LmNzcyhlLCJwb3NpdGlvbiIpPT09InN0YXRpYyIpZT1lLm9mZnNl
dFBhcmVudDtyZXR1cm4gZXx8aS5ib2R5fSl9fSksdi5lYWNoKHtzY3JvbGxMZWZ0OiJwYWdlWE9m
ZnNldCIsc2Nyb2xsVG9wOiJwYWdlWU9mZnNldCJ9LGZ1bmN0aW9uKGUsbil7dmFyIHI9L1kvLnRl
c3Qobik7di5mbltlXT1mdW5jdGlvbihpKXtyZXR1cm4gdi5hY2Nlc3ModGhpcyxmdW5jdGlvbihl
LGkscyl7dmFyIG89dHIoZSk7aWYocz09PXQpcmV0dXJuIG8/biBpbiBvP29bbl06by5kb2N1bWVu
dC5kb2N1bWVudEVsZW1lbnRbaV06ZVtpXTtvP28uc2Nyb2xsVG8ocj92KG8pLnNjcm9sbExlZnQo
KTpzLHI/czp2KG8pLnNjcm9sbFRvcCgpKTplW2ldPXN9LGUsaSxhcmd1bWVudHMubGVuZ3RoLG51
bGwpfX0pLHYuZWFjaCh7SGVpZ2h0OiJoZWlnaHQiLFdpZHRoOiJ3aWR0aCJ9LGZ1bmN0aW9uKGUs
bil7di5lYWNoKHtwYWRkaW5nOiJpbm5lciIrZSxjb250ZW50Om4sIiI6Im91dGVyIitlfSxmdW5j
dGlvbihyLGkpe3YuZm5baV09ZnVuY3Rpb24oaSxzKXt2YXIgbz1hcmd1bWVudHMubGVuZ3RoJiYo
cnx8dHlwZW9mIGkhPSJib29sZWFuIiksdT1yfHwoaT09PSEwfHxzPT09ITA/Im1hcmdpbiI6ImJv
cmRlciIpO3JldHVybiB2LmFjY2Vzcyh0aGlzLGZ1bmN0aW9uKG4scixpKXt2YXIgcztyZXR1cm4g
di5pc1dpbmRvdyhuKT9uLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFsiY2xpZW50IitlXTpuLm5v
ZGVUeXBlPT09OT8ocz1uLmRvY3VtZW50RWxlbWVudCxNYXRoLm1heChuLmJvZHlbInNjcm9sbCIr
ZV0sc1sic2Nyb2xsIitlXSxuLmJvZHlbIm9mZnNldCIrZV0sc1sib2Zmc2V0IitlXSxzWyJjbGll
bnQiK2VdKSk6aT09PXQ/di5jc3MobixyLGksdSk6di5zdHlsZShuLHIsaSx1KX0sbixvP2k6dCxv
LG51bGwpfX0pfSksZS5qUXVlcnk9ZS4kPXYsdHlwZW9mIGRlZmluZT09ImZ1bmN0aW9uIiYmZGVm
aW5lLmFtZCYmZGVmaW5lLmFtZC5qUXVlcnkmJmRlZmluZSgianF1ZXJ5IixbXSxmdW5jdGlvbigp
e3JldHVybiB2fSl9KSh3aW5kb3cpOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6
IFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29t
cG9uZW50cy9tdXN0YWNoZS9tdXN0YWNoZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRl
c3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvbXVzdGFj
aGUvbXVzdGFjaGUuanMJKHJldmlzaW9uIDApCisrKyBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZl
bkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvbXVzdGFjaGUvbXVzdGFjaGUu
anMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MzUgQEAKKy8qIQorICogbXVzdGFjaGUuanMg
LSBMb2dpYy1sZXNzIHt7bXVzdGFjaGV9fSB0ZW1wbGF0ZXMgd2l0aCBKYXZhU2NyaXB0CisgKiBo
dHRwOi8vZ2l0aHViLmNvbS9qYW5sL211c3RhY2hlLmpzCisgKi8KKworLypnbG9iYWwgZGVmaW5l
OiBmYWxzZSovCisKK3ZhciBNdXN0YWNoZTsKKworLyohCisgKiBtdXN0YWNoZS5qcyAtIExvZ2lj
LWxlc3Mge3ttdXN0YWNoZX19IHRlbXBsYXRlcyB3aXRoIEphdmFTY3JpcHQKKyAqIGh0dHA6Ly9n
aXRodWIuY29tL2phbmwvbXVzdGFjaGUuanMKKyAqLworCisvKmdsb2JhbCBkZWZpbmU6IGZhbHNl
Ki8KKwordmFyIE11c3RhY2hlOworCisoZnVuY3Rpb24gKGV4cG9ydHMpIHsKKyAgaWYgKHR5cGVv
ZiBtb2R1bGUgIT09ICJ1bmRlZmluZWQiICYmIG1vZHVsZS5leHBvcnRzKSB7CisgICAgbW9kdWxl
LmV4cG9ydHMgPSBleHBvcnRzOyAvLyBDb21tb25KUworICB9IGVsc2UgaWYgKHR5cGVvZiBkZWZp
bmUgPT09ICJmdW5jdGlvbiIpIHsKKyAgICBkZWZpbmUoZXhwb3J0cyk7IC8vIEFNRAorICB9IGVs
c2UgeworICAgIE11c3RhY2hlID0gZXhwb3J0czsgLy8gPHNjcmlwdD4KKyAgfQorfSgoZnVuY3Rp
b24gKCkgeworCisgIHZhciBleHBvcnRzID0ge307CisKKyAgZXhwb3J0cy5uYW1lID0gIm11c3Rh
Y2hlLmpzIjsKKyAgZXhwb3J0cy52ZXJzaW9uID0gIjAuNy4xIjsKKyAgZXhwb3J0cy50YWdzID0g
WyJ7eyIsICJ9fSJdOworCisgIGV4cG9ydHMuU2Nhbm5lciA9IFNjYW5uZXI7CisgIGV4cG9ydHMu
Q29udGV4dCA9IENvbnRleHQ7CisgIGV4cG9ydHMuV3JpdGVyID0gV3JpdGVyOworCisgIHZhciB3
aGl0ZVJlID0gL1xzKi87CisgIHZhciBzcGFjZVJlID0gL1xzKy87CisgIHZhciBub25TcGFjZVJl
ID0gL1xTLzsKKyAgdmFyIGVxUmUgPSAvXHMqPS87CisgIHZhciBjdXJseVJlID0gL1xzKlx9LzsK
KyAgdmFyIHRhZ1JlID0gLyN8XF58XC98Pnxce3wmfD18IS87CisKKyAgLy8gV29ya2Fyb3VuZCBm
b3IgaHR0cHM6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9DT1VDSERCLTU3NworICAv
LyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2phbmwvbXVzdGFjaGUuanMvaXNzdWVzLzE4OQorICBm
dW5jdGlvbiB0ZXN0UmUocmUsIHN0cmluZykgeworICAgIHJldHVybiBSZWdFeHAucHJvdG90eXBl
LnRlc3QuY2FsbChyZSwgc3RyaW5nKTsKKyAgfQorCisgIGZ1bmN0aW9uIGlzV2hpdGVzcGFjZShz
dHJpbmcpIHsKKyAgICByZXR1cm4gIXRlc3RSZShub25TcGFjZVJlLCBzdHJpbmcpOworICB9CisK
KyAgdmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIChvYmopIHsKKyAgICBy
ZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikgPT09ICJbb2JqZWN0IEFy
cmF5XSI7CisgIH07CisKKyAgZnVuY3Rpb24gZXNjYXBlUmUoc3RyaW5nKSB7CisgICAgcmV0dXJu
IHN0cmluZy5yZXBsYWNlKC9bXC1cW1xde30oKSorPy4sXFxcXiR8I1xzXS9nLCAiXFwkJiIpOwor
ICB9CisKKyAgdmFyIGVudGl0eU1hcCA9IHsKKyAgICAiJiI6ICImYW1wOyIsCisgICAgIjwiOiAi
Jmx0OyIsCisgICAgIj4iOiAiJmd0OyIsCisgICAgJyInOiAnJnF1b3Q7JywKKyAgICAiJyI6ICcm
IzM5OycsCisgICAgIi8iOiAnJiN4MkY7JworICB9OworCisgIGZ1bmN0aW9uIGVzY2FwZUh0bWwo
c3RyaW5nKSB7CisgICAgcmV0dXJuIFN0cmluZyhzdHJpbmcpLnJlcGxhY2UoL1smPD4iJ1wvXS9n
LCBmdW5jdGlvbiAocykgeworICAgICAgcmV0dXJuIGVudGl0eU1hcFtzXTsKKyAgICB9KTsKKyAg
fQorCisgIC8vIEV4cG9ydCB0aGUgZXNjYXBpbmcgZnVuY3Rpb24gc28gdGhhdCB0aGUgdXNlciBt
YXkgb3ZlcnJpZGUgaXQuCisgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vamFubC9tdXN0YWNo
ZS5qcy9pc3N1ZXMvMjQ0CisgIGV4cG9ydHMuZXNjYXBlID0gZXNjYXBlSHRtbDsKKworICBmdW5j
dGlvbiBTY2FubmVyKHN0cmluZykgeworICAgIHRoaXMuc3RyaW5nID0gc3RyaW5nOworICAgIHRo
aXMudGFpbCA9IHN0cmluZzsKKyAgICB0aGlzLnBvcyA9IDA7CisgIH0KKworICAvKioKKyAgICog
UmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHRhaWwgaXMgZW1wdHkgKGVuZCBvZiBzdHJpbmcpLgorICAg
Ki8KKyAgU2Nhbm5lci5wcm90b3R5cGUuZW9zID0gZnVuY3Rpb24gKCkgeworICAgIHJldHVybiB0
aGlzLnRhaWwgPT09ICIiOworICB9OworCisgIC8qKgorICAgKiBUcmllcyB0byBtYXRjaCB0aGUg
Z2l2ZW4gcmVndWxhciBleHByZXNzaW9uIGF0IHRoZSBjdXJyZW50IHBvc2l0aW9uLgorICAgKiBS
ZXR1cm5zIHRoZSBtYXRjaGVkIHRleHQgaWYgaXQgY2FuIG1hdGNoLCB0aGUgZW1wdHkgc3RyaW5n
IG90aGVyd2lzZS4KKyAgICovCisgIFNjYW5uZXIucHJvdG90eXBlLnNjYW4gPSBmdW5jdGlvbiAo
cmUpIHsKKyAgICB2YXIgbWF0Y2ggPSB0aGlzLnRhaWwubWF0Y2gocmUpOworCisgICAgaWYgKG1h
dGNoICYmIG1hdGNoLmluZGV4ID09PSAwKSB7CisgICAgICB0aGlzLnRhaWwgPSB0aGlzLnRhaWwu
c3Vic3RyaW5nKG1hdGNoWzBdLmxlbmd0aCk7CisgICAgICB0aGlzLnBvcyArPSBtYXRjaFswXS5s
ZW5ndGg7CisgICAgICByZXR1cm4gbWF0Y2hbMF07CisgICAgfQorCisgICAgcmV0dXJuICIiOwor
ICB9OworCisgIC8qKgorICAgKiBTa2lwcyBhbGwgdGV4dCB1bnRpbCB0aGUgZ2l2ZW4gcmVndWxh
ciBleHByZXNzaW9uIGNhbiBiZSBtYXRjaGVkLiBSZXR1cm5zCisgICAqIHRoZSBza2lwcGVkIHN0
cmluZywgd2hpY2ggaXMgdGhlIGVudGlyZSB0YWlsIGlmIG5vIG1hdGNoIGNhbiBiZSBtYWRlLgor
ICAgKi8KKyAgU2Nhbm5lci5wcm90b3R5cGUuc2NhblVudGlsID0gZnVuY3Rpb24gKHJlKSB7Cisg
ICAgdmFyIG1hdGNoLCBwb3MgPSB0aGlzLnRhaWwuc2VhcmNoKHJlKTsKKworICAgIHN3aXRjaCAo
cG9zKSB7CisgICAgY2FzZSAtMToKKyAgICAgIG1hdGNoID0gdGhpcy50YWlsOworICAgICAgdGhp
cy5wb3MgKz0gdGhpcy50YWlsLmxlbmd0aDsKKyAgICAgIHRoaXMudGFpbCA9ICIiOworICAgICAg
YnJlYWs7CisgICAgY2FzZSAwOgorICAgICAgbWF0Y2ggPSAiIjsKKyAgICAgIGJyZWFrOworICAg
IGRlZmF1bHQ6CisgICAgICBtYXRjaCA9IHRoaXMudGFpbC5zdWJzdHJpbmcoMCwgcG9zKTsKKyAg
ICAgIHRoaXMudGFpbCA9IHRoaXMudGFpbC5zdWJzdHJpbmcocG9zKTsKKyAgICAgIHRoaXMucG9z
ICs9IHBvczsKKyAgICB9CisKKyAgICByZXR1cm4gbWF0Y2g7CisgIH07CisKKyAgZnVuY3Rpb24g
Q29udGV4dCh2aWV3LCBwYXJlbnQpIHsKKyAgICB0aGlzLnZpZXcgPSB2aWV3OworICAgIHRoaXMu
cGFyZW50ID0gcGFyZW50OworICAgIHRoaXMuY2xlYXJDYWNoZSgpOworICB9CisKKyAgQ29udGV4
dC5tYWtlID0gZnVuY3Rpb24gKHZpZXcpIHsKKyAgICByZXR1cm4gKHZpZXcgaW5zdGFuY2VvZiBD
b250ZXh0KSA/IHZpZXcgOiBuZXcgQ29udGV4dCh2aWV3KTsKKyAgfTsKKworICBDb250ZXh0LnBy
b3RvdHlwZS5jbGVhckNhY2hlID0gZnVuY3Rpb24gKCkgeworICAgIHRoaXMuX2NhY2hlID0ge307
CisgIH07CisKKyAgQ29udGV4dC5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uICh2aWV3KSB7Cisg
ICAgcmV0dXJuIG5ldyBDb250ZXh0KHZpZXcsIHRoaXMpOworICB9OworCisgIENvbnRleHQucHJv
dG90eXBlLmxvb2t1cCA9IGZ1bmN0aW9uIChuYW1lKSB7CisgICAgdmFyIHZhbHVlID0gdGhpcy5f
Y2FjaGVbbmFtZV07CisKKyAgICBpZiAoIXZhbHVlKSB7CisgICAgICBpZiAobmFtZSA9PT0gIi4i
KSB7CisgICAgICAgIHZhbHVlID0gdGhpcy52aWV3OworICAgICAgfSBlbHNlIHsKKyAgICAgICAg
dmFyIGNvbnRleHQgPSB0aGlzOworCisgICAgICAgIHdoaWxlIChjb250ZXh0KSB7CisgICAgICAg
ICAgaWYgKG5hbWUuaW5kZXhPZigiLiIpID4gMCkgeworICAgICAgICAgICAgdmFyIG5hbWVzID0g
bmFtZS5zcGxpdCgiLiIpLCBpID0gMDsKKworICAgICAgICAgICAgdmFsdWUgPSBjb250ZXh0LnZp
ZXc7CisKKyAgICAgICAgICAgIHdoaWxlICh2YWx1ZSAmJiBpIDwgbmFtZXMubGVuZ3RoKSB7Cisg
ICAgICAgICAgICAgIHZhbHVlID0gdmFsdWVbbmFtZXNbaSsrXV07CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZhbHVlID0gY29udGV4dC52aWV3W25hbWVd
OworICAgICAgICAgIH0KKworICAgICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBjb250ZXh0ID0gY29udGV4dC5w
YXJlbnQ7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgdGhpcy5fY2FjaGVbbmFtZV0gPSB2
YWx1ZTsKKyAgICB9CisKKyAgICBpZiAodHlwZW9mIHZhbHVlID09PSAiZnVuY3Rpb24iKSB7Cisg
ICAgICB2YWx1ZSA9IHZhbHVlLmNhbGwodGhpcy52aWV3KTsKKyAgICB9CisKKyAgICByZXR1cm4g
dmFsdWU7CisgIH07CisKKyAgZnVuY3Rpb24gV3JpdGVyKCkgeworICAgIHRoaXMuY2xlYXJDYWNo
ZSgpOworICB9CisKKyAgV3JpdGVyLnByb3RvdHlwZS5jbGVhckNhY2hlID0gZnVuY3Rpb24gKCkg
eworICAgIHRoaXMuX2NhY2hlID0ge307CisgICAgdGhpcy5fcGFydGlhbENhY2hlID0ge307Cisg
IH07CisKKyAgV3JpdGVyLnByb3RvdHlwZS5jb21waWxlID0gZnVuY3Rpb24gKHRlbXBsYXRlLCB0
YWdzKSB7CisgICAgdmFyIGZuID0gdGhpcy5fY2FjaGVbdGVtcGxhdGVdOworCisgICAgaWYgKCFm
bikgeworICAgICAgdmFyIHRva2VucyA9IGV4cG9ydHMucGFyc2UodGVtcGxhdGUsIHRhZ3MpOwor
ICAgICAgZm4gPSB0aGlzLl9jYWNoZVt0ZW1wbGF0ZV0gPSB0aGlzLmNvbXBpbGVUb2tlbnModG9r
ZW5zLCB0ZW1wbGF0ZSk7CisgICAgfQorCisgICAgcmV0dXJuIGZuOworICB9OworCisgIFdyaXRl
ci5wcm90b3R5cGUuY29tcGlsZVBhcnRpYWwgPSBmdW5jdGlvbiAobmFtZSwgdGVtcGxhdGUsIHRh
Z3MpIHsKKyAgICB2YXIgZm4gPSB0aGlzLmNvbXBpbGUodGVtcGxhdGUsIHRhZ3MpOworICAgIHRo
aXMuX3BhcnRpYWxDYWNoZVtuYW1lXSA9IGZuOworICAgIHJldHVybiBmbjsKKyAgfTsKKworICBX
cml0ZXIucHJvdG90eXBlLmNvbXBpbGVUb2tlbnMgPSBmdW5jdGlvbiAodG9rZW5zLCB0ZW1wbGF0
ZSkgeworICAgIHZhciBmbiA9IGNvbXBpbGVUb2tlbnModG9rZW5zKTsKKyAgICB2YXIgc2VsZiA9
IHRoaXM7CisKKyAgICByZXR1cm4gZnVuY3Rpb24gKHZpZXcsIHBhcnRpYWxzKSB7CisgICAgICBp
ZiAocGFydGlhbHMpIHsKKyAgICAgICAgaWYgKHR5cGVvZiBwYXJ0aWFscyA9PT0gImZ1bmN0aW9u
IikgeworICAgICAgICAgIHNlbGYuX2xvYWRQYXJ0aWFsID0gcGFydGlhbHM7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgZm9yICh2YXIgbmFtZSBpbiBwYXJ0aWFscykgeworICAgICAgICAg
ICAgc2VsZi5jb21waWxlUGFydGlhbChuYW1lLCBwYXJ0aWFsc1tuYW1lXSk7CisgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICB9CisKKyAgICAgIHJldHVybiBmbihzZWxmLCBDb250ZXh0Lm1h
a2UodmlldyksIHRlbXBsYXRlKTsKKyAgICB9OworICB9OworCisgIFdyaXRlci5wcm90b3R5cGUu
cmVuZGVyID0gZnVuY3Rpb24gKHRlbXBsYXRlLCB2aWV3LCBwYXJ0aWFscykgeworICAgIHJldHVy
biB0aGlzLmNvbXBpbGUodGVtcGxhdGUpKHZpZXcsIHBhcnRpYWxzKTsKKyAgfTsKKworICBXcml0
ZXIucHJvdG90eXBlLl9zZWN0aW9uID0gZnVuY3Rpb24gKG5hbWUsIGNvbnRleHQsIHRleHQsIGNh
bGxiYWNrKSB7CisgICAgdmFyIHZhbHVlID0gY29udGV4dC5sb29rdXAobmFtZSk7CisKKyAgICBz
d2l0Y2ggKHR5cGVvZiB2YWx1ZSkgeworICAgIGNhc2UgIm9iamVjdCI6CisgICAgICBpZiAoaXNB
cnJheSh2YWx1ZSkpIHsKKyAgICAgICAgdmFyIGJ1ZmZlciA9ICIiOworCisgICAgICAgIGZvciAo
dmFyIGkgPSAwLCBsZW4gPSB2YWx1ZS5sZW5ndGg7IGkgPCBsZW47ICsraSkgeworICAgICAgICAg
IGJ1ZmZlciArPSBjYWxsYmFjayh0aGlzLCBjb250ZXh0LnB1c2godmFsdWVbaV0pKTsKKyAgICAg
ICAgfQorCisgICAgICAgIHJldHVybiBidWZmZXI7CisgICAgICB9CisKKyAgICAgIHJldHVybiB2
YWx1ZSA/IGNhbGxiYWNrKHRoaXMsIGNvbnRleHQucHVzaCh2YWx1ZSkpIDogIiI7CisgICAgY2Fz
ZSAiZnVuY3Rpb24iOgorICAgICAgdmFyIHNlbGYgPSB0aGlzOworICAgICAgdmFyIHNjb3BlZFJl
bmRlciA9IGZ1bmN0aW9uICh0ZW1wbGF0ZSkgeworICAgICAgICByZXR1cm4gc2VsZi5yZW5kZXIo
dGVtcGxhdGUsIGNvbnRleHQpOworICAgICAgfTsKKworICAgICAgdmFyIHJlc3VsdCA9IHZhbHVl
LmNhbGwoY29udGV4dC52aWV3LCB0ZXh0LCBzY29wZWRSZW5kZXIpOworICAgICAgcmV0dXJuIHJl
c3VsdCAhPSBudWxsID8gcmVzdWx0IDogIiI7CisgICAgZGVmYXVsdDoKKyAgICAgIGlmICh2YWx1
ZSkgeworICAgICAgICByZXR1cm4gY2FsbGJhY2sodGhpcywgY29udGV4dCk7CisgICAgICB9Cisg
ICAgfQorCisgICAgcmV0dXJuICIiOworICB9OworCisgIFdyaXRlci5wcm90b3R5cGUuX2ludmVy
dGVkID0gZnVuY3Rpb24gKG5hbWUsIGNvbnRleHQsIGNhbGxiYWNrKSB7CisgICAgdmFyIHZhbHVl
ID0gY29udGV4dC5sb29rdXAobmFtZSk7CisKKyAgICAvLyBVc2UgSmF2YVNjcmlwdCdzIGRlZmlu
aXRpb24gb2YgZmFsc3kuIEluY2x1ZGUgZW1wdHkgYXJyYXlzLgorICAgIC8vIFNlZSBodHRwczov
L2dpdGh1Yi5jb20vamFubC9tdXN0YWNoZS5qcy9pc3N1ZXMvMTg2CisgICAgaWYgKCF2YWx1ZSB8
fCAoaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID09PSAwKSkgeworICAgICAgcmV0dXJu
IGNhbGxiYWNrKHRoaXMsIGNvbnRleHQpOworICAgIH0KKworICAgIHJldHVybiAiIjsKKyAgfTsK
KworICBXcml0ZXIucHJvdG90eXBlLl9wYXJ0aWFsID0gZnVuY3Rpb24gKG5hbWUsIGNvbnRleHQp
IHsKKyAgICBpZiAoIShuYW1lIGluIHRoaXMuX3BhcnRpYWxDYWNoZSkgJiYgdGhpcy5fbG9hZFBh
cnRpYWwpIHsKKyAgICAgIHRoaXMuY29tcGlsZVBhcnRpYWwobmFtZSwgdGhpcy5fbG9hZFBhcnRp
YWwobmFtZSkpOworICAgIH0KKworICAgIHZhciBmbiA9IHRoaXMuX3BhcnRpYWxDYWNoZVtuYW1l
XTsKKworICAgIHJldHVybiBmbiA/IGZuKGNvbnRleHQpIDogIiI7CisgIH07CisKKyAgV3JpdGVy
LnByb3RvdHlwZS5fbmFtZSA9IGZ1bmN0aW9uIChuYW1lLCBjb250ZXh0KSB7CisgICAgdmFyIHZh
bHVlID0gY29udGV4dC5sb29rdXAobmFtZSk7CisKKyAgICBpZiAodHlwZW9mIHZhbHVlID09PSAi
ZnVuY3Rpb24iKSB7CisgICAgICB2YWx1ZSA9IHZhbHVlLmNhbGwoY29udGV4dC52aWV3KTsKKyAg
ICB9CisKKyAgICByZXR1cm4gKHZhbHVlID09IG51bGwpID8gIiIgOiBTdHJpbmcodmFsdWUpOwor
ICB9OworCisgIFdyaXRlci5wcm90b3R5cGUuX2VzY2FwZWQgPSBmdW5jdGlvbiAobmFtZSwgY29u
dGV4dCkgeworICAgIHJldHVybiBleHBvcnRzLmVzY2FwZSh0aGlzLl9uYW1lKG5hbWUsIGNvbnRl
eHQpKTsKKyAgfTsKKworICAvKioKKyAgICogQ2FsY3VsYXRlcyB0aGUgYm91bmRzIG9mIHRoZSBz
ZWN0aW9uIHJlcHJlc2VudGVkIGJ5IHRoZSBnaXZlbiBgdG9rZW5gIGluCisgICAqIHRoZSBvcmln
aW5hbCB0ZW1wbGF0ZSBieSBkcmlsbGluZyBkb3duIGludG8gbmVzdGVkIHNlY3Rpb25zIHRvIGZp
bmQgdGhlCisgICAqIGxhc3QgdG9rZW4gdGhhdCBpcyBwYXJ0IG9mIHRoYXQgc2VjdGlvbi4gUmV0
dXJucyBhbiBhcnJheSBvZiBbc3RhcnQsIGVuZF0uCisgICAqLworICBmdW5jdGlvbiBzZWN0aW9u
Qm91bmRzKHRva2VuKSB7CisgICAgdmFyIHN0YXJ0ID0gdG9rZW5bM107CisgICAgdmFyIGVuZCA9
IHN0YXJ0OworCisgICAgdmFyIHRva2VuczsKKyAgICB3aGlsZSAoKHRva2VucyA9IHRva2VuWzRd
KSAmJiB0b2tlbnMubGVuZ3RoKSB7CisgICAgICB0b2tlbiA9IHRva2Vuc1t0b2tlbnMubGVuZ3Ro
IC0gMV07CisgICAgICBlbmQgPSB0b2tlblszXTsKKyAgICB9CisKKyAgICByZXR1cm4gW3N0YXJ0
LCBlbmRdOworICB9CisKKyAgLyoqCisgICAqIExvdy1sZXZlbCBmdW5jdGlvbiB0aGF0IGNvbXBp
bGVzIHRoZSBnaXZlbiBgdG9rZW5zYCBpbnRvIGEgZnVuY3Rpb24KKyAgICogdGhhdCBhY2NlcHRz
IHRocmVlIGFyZ3VtZW50czogYSBXcml0ZXIsIGEgQ29udGV4dCwgYW5kIHRoZSB0ZW1wbGF0ZS4K
KyAgICovCisgIGZ1bmN0aW9uIGNvbXBpbGVUb2tlbnModG9rZW5zKSB7CisgICAgdmFyIHN1YlJl
bmRlcnMgPSB7fTsKKworICAgIGZ1bmN0aW9uIHN1YlJlbmRlcihpLCB0b2tlbnMsIHRlbXBsYXRl
KSB7CisgICAgICBpZiAoIXN1YlJlbmRlcnNbaV0pIHsKKyAgICAgICAgdmFyIGZuID0gY29tcGls
ZVRva2Vucyh0b2tlbnMpOworICAgICAgICBzdWJSZW5kZXJzW2ldID0gZnVuY3Rpb24gKHdyaXRl
ciwgY29udGV4dCkgeworICAgICAgICAgIHJldHVybiBmbih3cml0ZXIsIGNvbnRleHQsIHRlbXBs
YXRlKTsKKyAgICAgICAgfTsKKyAgICAgIH0KKworICAgICAgcmV0dXJuIHN1YlJlbmRlcnNbaV07
CisgICAgfQorCisgICAgcmV0dXJuIGZ1bmN0aW9uICh3cml0ZXIsIGNvbnRleHQsIHRlbXBsYXRl
KSB7CisgICAgICB2YXIgYnVmZmVyID0gIiI7CisgICAgICB2YXIgdG9rZW4sIHNlY3Rpb25UZXh0
OworCisgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gdG9rZW5zLmxlbmd0aDsgaSA8IGxlbjsg
KytpKSB7CisgICAgICAgIHRva2VuID0gdG9rZW5zW2ldOworCisgICAgICAgIHN3aXRjaCAodG9r
ZW5bMF0pIHsKKyAgICAgICAgY2FzZSAiIyI6CisgICAgICAgICAgc2VjdGlvblRleHQgPSB0ZW1w
bGF0ZS5zbGljZS5hcHBseSh0ZW1wbGF0ZSwgc2VjdGlvbkJvdW5kcyh0b2tlbikpOworICAgICAg
ICAgIGJ1ZmZlciArPSB3cml0ZXIuX3NlY3Rpb24odG9rZW5bMV0sIGNvbnRleHQsIHNlY3Rpb25U
ZXh0LCBzdWJSZW5kZXIoaSwgdG9rZW5bNF0sIHRlbXBsYXRlKSk7CisgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgIl4iOgorICAgICAgICAgIGJ1ZmZlciArPSB3cml0ZXIuX2ludmVydGVk
KHRva2VuWzFdLCBjb250ZXh0LCBzdWJSZW5kZXIoaSwgdG9rZW5bNF0sIHRlbXBsYXRlKSk7Cisg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgIj4iOgorICAgICAgICAgIGJ1ZmZlciArPSB3
cml0ZXIuX3BhcnRpYWwodG9rZW5bMV0sIGNvbnRleHQpOworICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlICImIjoKKyAgICAgICAgICBidWZmZXIgKz0gd3JpdGVyLl9uYW1lKHRva2VuWzFd
LCBjb250ZXh0KTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAibmFtZSI6CisgICAg
ICAgICAgYnVmZmVyICs9IHdyaXRlci5fZXNjYXBlZCh0b2tlblsxXSwgY29udGV4dCk7CisgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgInRleHQiOgorICAgICAgICAgIGJ1ZmZlciArPSB0
b2tlblsxXTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBy
ZXR1cm4gYnVmZmVyOworICAgIH07CisgIH0KKworICAvKioKKyAgICogRm9ybXMgdGhlIGdpdmVu
IGFycmF5IG9mIGB0b2tlbnNgIGludG8gYSBuZXN0ZWQgdHJlZSBzdHJ1Y3R1cmUgd2hlcmUKKyAg
ICogdG9rZW5zIHRoYXQgcmVwcmVzZW50IGEgc2VjdGlvbiBoYXZlIGEgZmlmdGggaXRlbTogYW4g
YXJyYXkgdGhhdCBjb250YWlucworICAgKiBhbGwgdG9rZW5zIGluIHRoYXQgc2VjdGlvbi4KKyAg
ICovCisgIGZ1bmN0aW9uIG5lc3RUb2tlbnModG9rZW5zKSB7CisgICAgdmFyIHRyZWUgPSBbXTsK
KyAgICB2YXIgY29sbGVjdG9yID0gdHJlZTsKKyAgICB2YXIgc2VjdGlvbnMgPSBbXTsKKyAgICB2
YXIgdG9rZW4sIHNlY3Rpb247CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRva2Vucy5sZW5n
dGg7ICsraSkgeworICAgICAgdG9rZW4gPSB0b2tlbnNbaV07CisKKyAgICAgIHN3aXRjaCAodG9r
ZW5bMF0pIHsKKyAgICAgIGNhc2UgIiMiOgorICAgICAgY2FzZSAiXiI6CisgICAgICAgIHRva2Vu
WzRdID0gW107CisgICAgICAgIHNlY3Rpb25zLnB1c2godG9rZW4pOworICAgICAgICBjb2xsZWN0
b3IucHVzaCh0b2tlbik7CisgICAgICAgIGNvbGxlY3RvciA9IHRva2VuWzRdOworICAgICAgICBi
cmVhazsKKyAgICAgIGNhc2UgIi8iOgorICAgICAgICBpZiAoc2VjdGlvbnMubGVuZ3RoID09PSAw
KSB7CisgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJVbm9wZW5lZCBzZWN0aW9uOiAiICsgdG9r
ZW5bMV0pOworICAgICAgICB9CisKKyAgICAgICAgc2VjdGlvbiA9IHNlY3Rpb25zLnBvcCgpOwor
CisgICAgICAgIGlmIChzZWN0aW9uWzFdICE9PSB0b2tlblsxXSkgeworICAgICAgICAgIHRocm93
IG5ldyBFcnJvcigiVW5jbG9zZWQgc2VjdGlvbjogIiArIHNlY3Rpb25bMV0pOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKHNlY3Rpb25zLmxlbmd0aCA+IDApIHsKKyAgICAgICAgICBjb2xsZWN0
b3IgPSBzZWN0aW9uc1tzZWN0aW9ucy5sZW5ndGggLSAxXVs0XTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICBjb2xsZWN0b3IgPSB0cmVlOworICAgICAgICB9CisgICAgICAgIGJyZWFrOwor
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgY29sbGVjdG9yLnB1c2godG9rZW4pOworICAgICAgfQor
ICAgIH0KKworICAgIC8vIE1ha2Ugc3VyZSB0aGVyZSB3ZXJlIG5vIG9wZW4gc2VjdGlvbnMgd2hl
biB3ZSdyZSBkb25lLgorICAgIHNlY3Rpb24gPSBzZWN0aW9ucy5wb3AoKTsKKworICAgIGlmIChz
ZWN0aW9uKSB7CisgICAgICB0aHJvdyBuZXcgRXJyb3IoIlVuY2xvc2VkIHNlY3Rpb246ICIgKyBz
ZWN0aW9uWzFdKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJlZTsKKyAgfQorCisgIC8qKgorICAg
KiBDb21iaW5lcyB0aGUgdmFsdWVzIG9mIGNvbnNlY3V0aXZlIHRleHQgdG9rZW5zIGluIHRoZSBn
aXZlbiBgdG9rZW5zYCBhcnJheQorICAgKiB0byBhIHNpbmdsZSB0b2tlbi4KKyAgICovCisgIGZ1
bmN0aW9uIHNxdWFzaFRva2Vucyh0b2tlbnMpIHsKKyAgICB2YXIgdG9rZW4sIGxhc3RUb2tlbiwg
c3F1YXNoZWRUb2tlbnMgPSBbXTsKKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG9rZW5zLmxl
bmd0aDsgKytpKSB7CisgICAgICB0b2tlbiA9IHRva2Vuc1tpXTsKKworICAgICAgaWYgKGxhc3RU
b2tlbiAmJiBsYXN0VG9rZW5bMF0gPT09ICJ0ZXh0IiAmJiB0b2tlblswXSA9PT0gInRleHQiKSB7
CisgICAgICAgIGxhc3RUb2tlblsxXSArPSB0b2tlblsxXTsKKyAgICAgICAgbGFzdFRva2VuWzNd
ID0gdG9rZW5bM107CisgICAgICB9IGVsc2UgeworICAgICAgICBsYXN0VG9rZW4gPSB0b2tlbjsK
KyAgICAgICAgc3F1YXNoZWRUb2tlbnMucHVzaCh0b2tlbik7CisgICAgICB9CisgICAgfQorCisg
ICAgcmV0dXJuIHNxdWFzaGVkVG9rZW5zOworICB9CisKKyAgZnVuY3Rpb24gZXNjYXBlVGFncyh0
YWdzKSB7CisgICAgaWYgKHRhZ3MubGVuZ3RoICE9PSAyKSB7CisgICAgICB0aHJvdyBuZXcgRXJy
b3IoIkludmFsaWQgdGFnczogIiArIHRhZ3Muam9pbigiICIpKTsKKyAgICB9CisKKyAgICByZXR1
cm4gWworICAgICAgbmV3IFJlZ0V4cChlc2NhcGVSZSh0YWdzWzBdKSArICJcXHMqIiksCisgICAg
ICBuZXcgUmVnRXhwKCJcXHMqIiArIGVzY2FwZVJlKHRhZ3NbMV0pKQorICAgIF07CisgIH0KKwor
ICAvKioKKyAgICogQnJlYWtzIHVwIHRoZSBnaXZlbiBgdGVtcGxhdGVgIHN0cmluZyBpbnRvIGEg
dHJlZSBvZiB0b2tlbiBvYmplY3RzLiBJZgorICAgKiBgdGFnc2AgaXMgZ2l2ZW4gaGVyZSBpdCBt
dXN0IGJlIGFuIGFycmF5IHdpdGggdHdvIHN0cmluZyB2YWx1ZXM6IHRoZQorICAgKiBvcGVuaW5n
IGFuZCBjbG9zaW5nIHRhZ3MgdXNlZCBpbiB0aGUgdGVtcGxhdGUgKGUuZy4gWyI8JSIsICIlPiJd
KS4gT2YKKyAgICogY291cnNlLCB0aGUgZGVmYXVsdCBpcyB0byB1c2UgbXVzdGFjaGVzIChpLmUu
IE11c3RhY2hlLnRhZ3MpLgorICAgKi8KKyAgZXhwb3J0cy5wYXJzZSA9IGZ1bmN0aW9uICh0ZW1w
bGF0ZSwgdGFncykgeworICAgIHRlbXBsYXRlID0gdGVtcGxhdGUgfHwgJyc7CisgICAgdGFncyA9
IHRhZ3MgfHwgZXhwb3J0cy50YWdzOworCisgICAgdmFyIHRhZ1JlcyA9IGVzY2FwZVRhZ3ModGFn
cyk7CisgICAgdmFyIHNjYW5uZXIgPSBuZXcgU2Nhbm5lcih0ZW1wbGF0ZSk7CisKKyAgICB2YXIg
dG9rZW5zID0gW10sICAgICAgLy8gQnVmZmVyIHRvIGhvbGQgdGhlIHRva2VucworICAgICAgICBz
cGFjZXMgPSBbXSwgICAgICAvLyBJbmRpY2VzIG9mIHdoaXRlc3BhY2UgdG9rZW5zIG9uIHRoZSBj
dXJyZW50IGxpbmUKKyAgICAgICAgaGFzVGFnID0gZmFsc2UsICAgLy8gSXMgdGhlcmUgYSB7e3Rh
Z319IG9uIHRoZSBjdXJyZW50IGxpbmU/CisgICAgICAgIG5vblNwYWNlID0gZmFsc2U7IC8vIElz
IHRoZXJlIGEgbm9uLXNwYWNlIGNoYXIgb24gdGhlIGN1cnJlbnQgbGluZT8KKworICAgIC8vIFN0
cmlwcyBhbGwgd2hpdGVzcGFjZSB0b2tlbnMgYXJyYXkgZm9yIHRoZSBjdXJyZW50IGxpbmUKKyAg
ICAvLyBpZiB0aGVyZSB3YXMgYSB7eyN0YWd9fSBvbiBpdCBhbmQgb3RoZXJ3aXNlIG9ubHkgc3Bh
Y2UuCisgICAgZnVuY3Rpb24gc3RyaXBTcGFjZSgpIHsKKyAgICAgIGlmIChoYXNUYWcgJiYgIW5v
blNwYWNlKSB7CisgICAgICAgIHdoaWxlIChzcGFjZXMubGVuZ3RoKSB7CisgICAgICAgICAgdG9r
ZW5zLnNwbGljZShzcGFjZXMucG9wKCksIDEpOworICAgICAgICB9CisgICAgICB9IGVsc2Ugewor
ICAgICAgICBzcGFjZXMgPSBbXTsKKyAgICAgIH0KKworICAgICAgaGFzVGFnID0gZmFsc2U7Cisg
ICAgICBub25TcGFjZSA9IGZhbHNlOworICAgIH0KKworICAgIHZhciBzdGFydCwgdHlwZSwgdmFs
dWUsIGNocjsKKworICAgIHdoaWxlICghc2Nhbm5lci5lb3MoKSkgeworICAgICAgc3RhcnQgPSBz
Y2FubmVyLnBvczsKKyAgICAgIHZhbHVlID0gc2Nhbm5lci5zY2FuVW50aWwodGFnUmVzWzBdKTsK
KworICAgICAgaWYgKHZhbHVlKSB7CisgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSB2YWx1
ZS5sZW5ndGg7IGkgPCBsZW47ICsraSkgeworICAgICAgICAgIGNociA9IHZhbHVlLmNoYXJBdChp
KTsKKworICAgICAgICAgIGlmIChpc1doaXRlc3BhY2UoY2hyKSkgeworICAgICAgICAgICAgc3Bh
Y2VzLnB1c2godG9rZW5zLmxlbmd0aCk7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IG5vblNwYWNlID0gdHJ1ZTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICB0b2tlbnMucHVzaChb
InRleHQiLCBjaHIsIHN0YXJ0LCBzdGFydCArIDFdKTsKKyAgICAgICAgICBzdGFydCArPSAxOwor
CisgICAgICAgICAgaWYgKGNociA9PT0gIlxuIikgeworICAgICAgICAgICAgc3RyaXBTcGFjZSgp
OyAvLyBDaGVjayBmb3Igd2hpdGVzcGFjZSBvbiB0aGUgY3VycmVudCBsaW5lLgorICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBzdGFydCA9IHNjYW5uZXIucG9zOworCisg
ICAgICAvLyBNYXRjaCB0aGUgb3BlbmluZyB0YWcuCisgICAgICBpZiAoIXNjYW5uZXIuc2Nhbih0
YWdSZXNbMF0pKSB7CisgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICBoYXNUYWcgPSB0
cnVlOworICAgICAgdHlwZSA9IHNjYW5uZXIuc2Nhbih0YWdSZSkgfHwgIm5hbWUiOworCisgICAg
ICAvLyBTa2lwIGFueSB3aGl0ZXNwYWNlIGJldHdlZW4gdGFnIGFuZCB2YWx1ZS4KKyAgICAgIHNj
YW5uZXIuc2Nhbih3aGl0ZVJlKTsKKworICAgICAgLy8gRXh0cmFjdCB0aGUgdGFnIHZhbHVlLgor
ICAgICAgaWYgKHR5cGUgPT09ICI9IikgeworICAgICAgICB2YWx1ZSA9IHNjYW5uZXIuc2NhblVu
dGlsKGVxUmUpOworICAgICAgICBzY2FubmVyLnNjYW4oZXFSZSk7CisgICAgICAgIHNjYW5uZXIu
c2NhblVudGlsKHRhZ1Jlc1sxXSk7CisgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICJ7Iikgewor
ICAgICAgICB2YXIgY2xvc2VSZSA9IG5ldyBSZWdFeHAoIlxccyoiICsgZXNjYXBlUmUoIn0iICsg
dGFnc1sxXSkpOworICAgICAgICB2YWx1ZSA9IHNjYW5uZXIuc2NhblVudGlsKGNsb3NlUmUpOwor
ICAgICAgICBzY2FubmVyLnNjYW4oY3VybHlSZSk7CisgICAgICAgIHNjYW5uZXIuc2NhblVudGls
KHRhZ1Jlc1sxXSk7CisgICAgICAgIHR5cGUgPSAiJiI7CisgICAgICB9IGVsc2UgeworICAgICAg
ICB2YWx1ZSA9IHNjYW5uZXIuc2NhblVudGlsKHRhZ1Jlc1sxXSk7CisgICAgICB9CisKKyAgICAg
IC8vIE1hdGNoIHRoZSBjbG9zaW5nIHRhZy4KKyAgICAgIGlmICghc2Nhbm5lci5zY2FuKHRhZ1Jl
c1sxXSkpIHsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJVbmNsb3NlZCB0YWcgYXQgIiArIHNj
YW5uZXIucG9zKTsKKyAgICAgIH0KKworICAgICAgdG9rZW5zLnB1c2goW3R5cGUsIHZhbHVlLCBz
dGFydCwgc2Nhbm5lci5wb3NdKTsKKworICAgICAgaWYgKHR5cGUgPT09ICJuYW1lIiB8fCB0eXBl
ID09PSAieyIgfHwgdHlwZSA9PT0gIiYiKSB7CisgICAgICAgIG5vblNwYWNlID0gdHJ1ZTsKKyAg
ICAgIH0KKworICAgICAgLy8gU2V0IHRoZSB0YWdzIGZvciB0aGUgbmV4dCB0aW1lIGFyb3VuZC4K
KyAgICAgIGlmICh0eXBlID09PSAiPSIpIHsKKyAgICAgICAgdGFncyA9IHZhbHVlLnNwbGl0KHNw
YWNlUmUpOworICAgICAgICB0YWdSZXMgPSBlc2NhcGVUYWdzKHRhZ3MpOworICAgICAgfQorICAg
IH0KKworICAgIHRva2VucyA9IHNxdWFzaFRva2Vucyh0b2tlbnMpOworCisgICAgcmV0dXJuIG5l
c3RUb2tlbnModG9rZW5zKTsKKyAgfTsKKworICAvLyBUaGUgaGlnaC1sZXZlbCBjbGVhckNhY2hl
LCBjb21waWxlLCBjb21waWxlUGFydGlhbCwgYW5kIHJlbmRlciBmdW5jdGlvbnMKKyAgLy8gdXNl
IHRoaXMgZGVmYXVsdCB3cml0ZXIuCisgIHZhciBfd3JpdGVyID0gbmV3IFdyaXRlcigpOworCisg
IC8qKgorICAgKiBDbGVhcnMgYWxsIGNhY2hlZCB0ZW1wbGF0ZXMgYW5kIHBhcnRpYWxzIGluIHRo
ZSBkZWZhdWx0IHdyaXRlci4KKyAgICovCisgIGV4cG9ydHMuY2xlYXJDYWNoZSA9IGZ1bmN0aW9u
ICgpIHsKKyAgICByZXR1cm4gX3dyaXRlci5jbGVhckNhY2hlKCk7CisgIH07CisKKyAgLyoqCisg
ICAqIENvbXBpbGVzIHRoZSBnaXZlbiBgdGVtcGxhdGVgIHRvIGEgcmV1c2FibGUgZnVuY3Rpb24g
dXNpbmcgdGhlIGRlZmF1bHQKKyAgICogd3JpdGVyLgorICAgKi8KKyAgZXhwb3J0cy5jb21waWxl
ID0gZnVuY3Rpb24gKHRlbXBsYXRlLCB0YWdzKSB7CisgICAgcmV0dXJuIF93cml0ZXIuY29tcGls
ZSh0ZW1wbGF0ZSwgdGFncyk7CisgIH07CisKKyAgLyoqCisgICAqIENvbXBpbGVzIHRoZSBwYXJ0
aWFsIHdpdGggdGhlIGdpdmVuIGBuYW1lYCBhbmQgYHRlbXBsYXRlYCB0byBhIHJldXNhYmxlCisg
ICAqIGZ1bmN0aW9uIHVzaW5nIHRoZSBkZWZhdWx0IHdyaXRlci4KKyAgICovCisgIGV4cG9ydHMu
Y29tcGlsZVBhcnRpYWwgPSBmdW5jdGlvbiAobmFtZSwgdGVtcGxhdGUsIHRhZ3MpIHsKKyAgICBy
ZXR1cm4gX3dyaXRlci5jb21waWxlUGFydGlhbChuYW1lLCB0ZW1wbGF0ZSwgdGFncyk7CisgIH07
CisKKyAgLyoqCisgICAqIENvbXBpbGVzIHRoZSBnaXZlbiBhcnJheSBvZiB0b2tlbnMgKHRoZSBv
dXRwdXQgb2YgYSBwYXJzZSkgdG8gYSByZXVzYWJsZQorICAgKiBmdW5jdGlvbiB1c2luZyB0aGUg
ZGVmYXVsdCB3cml0ZXIuCisgICAqLworICBleHBvcnRzLmNvbXBpbGVUb2tlbnMgPSBmdW5jdGlv
biAodG9rZW5zLCB0ZW1wbGF0ZSkgeworICAgIHJldHVybiBfd3JpdGVyLmNvbXBpbGVUb2tlbnMo
dG9rZW5zLCB0ZW1wbGF0ZSk7CisgIH07CisKKyAgLyoqCisgICAqIFJlbmRlcnMgdGhlIGB0ZW1w
bGF0ZWAgd2l0aCB0aGUgZ2l2ZW4gYHZpZXdgIGFuZCBgcGFydGlhbHNgIHVzaW5nIHRoZQorICAg
KiBkZWZhdWx0IHdyaXRlci4KKyAgICovCisgIGV4cG9ydHMucmVuZGVyID0gZnVuY3Rpb24gKHRl
bXBsYXRlLCB2aWV3LCBwYXJ0aWFscykgeworICAgIHJldHVybiBfd3JpdGVyLnJlbmRlcih0ZW1w
bGF0ZSwgdmlldywgcGFydGlhbHMpOworICB9OworCisgIC8vIFRoaXMgaXMgaGVyZSBmb3IgYmFj
a3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCAwLjQueC4KKyAgZXhwb3J0cy50b19odG1sID0gZnVu
Y3Rpb24gKHRlbXBsYXRlLCB2aWV3LCBwYXJ0aWFscywgc2VuZCkgeworICAgIHZhciByZXN1bHQg
PSBleHBvcnRzLnJlbmRlcih0ZW1wbGF0ZSwgdmlldywgcGFydGlhbHMpOworCisgICAgaWYgKHR5
cGVvZiBzZW5kID09PSAiZnVuY3Rpb24iKSB7CisgICAgICBzZW5kKHJlc3VsdCk7CisgICAgfSBl
bHNlIHsKKyAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICB9OworCisgIHJldHVybiBleHBv
cnRzOworCit9KCkpKSk7CkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2Zs
aWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvcmVxdWlyZWpzL3JlcXVpcmUuanMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxl
LWFwcC9jb21wb25lbnRzL3JlcXVpcmVqcy9yZXF1aXJlLmpzCShyZXZpc2lvbiAwKQorKysgUGVy
Zm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25l
bnRzL3JlcXVpcmVqcy9yZXF1aXJlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTk5MyBA
QAorLyoqIHZpbTogZXQ6dHM9NDpzdz00OnN0cz00CisgKiBAbGljZW5zZSBSZXF1aXJlSlMgMi4x
LjIgQ29weXJpZ2h0IChjKSAyMDEwLTIwMTIsIFRoZSBEb2pvIEZvdW5kYXRpb24gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KKyAqIEF2YWlsYWJsZSB2aWEgdGhlIE1JVCBvciBuZXcgQlNEIGxpY2Vuc2Uu
CisgKiBzZWU6IGh0dHA6Ly9naXRodWIuY29tL2pyYnVya2UvcmVxdWlyZWpzIGZvciBkZXRhaWxz
CisgKi8KKy8vTm90IHVzaW5nIHN0cmljdDogdW5ldmVuIHN0cmljdCBzdXBwb3J0IGluIGJyb3dz
ZXJzLCAjMzkyLCBhbmQgY2F1c2VzCisvL3Byb2JsZW1zIHdpdGggcmVxdWlyZWpzLmV4ZWMoKS90
cmFuc3BpbGVyIHBsdWdpbnMgdGhhdCBtYXkgbm90IGJlIHN0cmljdC4KKy8qanNsaW50IHJlZ2V4
cDogdHJ1ZSwgbm9tZW46IHRydWUsIHNsb3BweTogdHJ1ZSAqLworLypnbG9iYWwgd2luZG93LCBu
YXZpZ2F0b3IsIGRvY3VtZW50LCBpbXBvcnRTY3JpcHRzLCBqUXVlcnksIHNldFRpbWVvdXQsIG9w
ZXJhICovCisKK3ZhciByZXF1aXJlanMsIHJlcXVpcmUsIGRlZmluZTsKKyhmdW5jdGlvbiAoZ2xv
YmFsKSB7CisgICAgdmFyIHJlcSwgcywgaGVhZCwgYmFzZUVsZW1lbnQsIGRhdGFNYWluLCBzcmMs
CisgICAgICAgIGludGVyYWN0aXZlU2NyaXB0LCBjdXJyZW50bHlBZGRpbmdTY3JpcHQsIG1haW5T
Y3JpcHQsIHN1YlBhdGgsCisgICAgICAgIHZlcnNpb24gPSAnMi4xLjInLAorICAgICAgICBjb21t
ZW50UmVnRXhwID0gLyhcL1wqKFtcc1xTXSo/KVwqXC98KFteOl18XilcL1wvKC4qKSQpL21nLAor
ICAgICAgICBjanNSZXF1aXJlUmVnRXhwID0gL1teLl1ccypyZXF1aXJlXHMqXChccypbIiddKFte
JyJcc10rKVsiJ11ccypcKS9nLAorICAgICAgICBqc1N1ZmZpeFJlZ0V4cCA9IC9cLmpzJC8sCisg
ICAgICAgIGN1cnJEaXJSZWdFeHAgPSAvXlwuXC8vLAorICAgICAgICBvcCA9IE9iamVjdC5wcm90
b3R5cGUsCisgICAgICAgIG9zdHJpbmcgPSBvcC50b1N0cmluZywKKyAgICAgICAgaGFzT3duID0g
b3AuaGFzT3duUHJvcGVydHksCisgICAgICAgIGFwID0gQXJyYXkucHJvdG90eXBlLAorICAgICAg
ICBhcHMgPSBhcC5zbGljZSwKKyAgICAgICAgYXBzcCA9IGFwLnNwbGljZSwKKyAgICAgICAgaXNC
cm93c2VyID0gISEodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgbmF2aWdhdG9yICYm
IGRvY3VtZW50KSwKKyAgICAgICAgaXNXZWJXb3JrZXIgPSAhaXNCcm93c2VyICYmIHR5cGVvZiBp
bXBvcnRTY3JpcHRzICE9PSAndW5kZWZpbmVkJywKKyAgICAgICAgLy9QUzMgaW5kaWNhdGVzIGxv
YWRlZCBhbmQgY29tcGxldGUsIGJ1dCBuZWVkIHRvIHdhaXQgZm9yIGNvbXBsZXRlCisgICAgICAg
IC8vc3BlY2lmaWNhbGx5LiBTZXF1ZW5jZSBpcyAnbG9hZGluZycsICdsb2FkZWQnLCBleGVjdXRp
b24sCisgICAgICAgIC8vIHRoZW4gJ2NvbXBsZXRlJy4gVGhlIFVBIGNoZWNrIGlzIHVuZm9ydHVu
YXRlLCBidXQgbm90IHN1cmUgaG93CisgICAgICAgIC8vdG8gZmVhdHVyZSB0ZXN0IHcvbyBjYXVz
aW5nIHBlcmYgaXNzdWVzLgorICAgICAgICByZWFkeVJlZ0V4cCA9IGlzQnJvd3NlciAmJiBuYXZp
Z2F0b3IucGxhdGZvcm0gPT09ICdQTEFZU1RBVElPTiAzJyA/CisgICAgICAgICAgICAgICAgICAg
ICAgL15jb21wbGV0ZSQvIDogL14oY29tcGxldGV8bG9hZGVkKSQvLAorICAgICAgICBkZWZDb250
ZXh0TmFtZSA9ICdfJywKKyAgICAgICAgLy9PaCB0aGUgdHJhZ2VkeSwgZGV0ZWN0aW5nIG9wZXJh
LiBTZWUgdGhlIHVzYWdlIG9mIGlzT3BlcmEgZm9yIHJlYXNvbi4KKyAgICAgICAgaXNPcGVyYSA9
IHR5cGVvZiBvcGVyYSAhPT0gJ3VuZGVmaW5lZCcgJiYgb3BlcmEudG9TdHJpbmcoKSA9PT0gJ1tv
YmplY3QgT3BlcmFdJywKKyAgICAgICAgY29udGV4dHMgPSB7fSwKKyAgICAgICAgY2ZnID0ge30s
CisgICAgICAgIGdsb2JhbERlZlF1ZXVlID0gW10sCisgICAgICAgIHVzZUludGVyYWN0aXZlID0g
ZmFsc2U7CisKKyAgICBmdW5jdGlvbiBpc0Z1bmN0aW9uKGl0KSB7CisgICAgICAgIHJldHVybiBv
c3RyaW5nLmNhbGwoaXQpID09PSAnW29iamVjdCBGdW5jdGlvbl0nOworICAgIH0KKworICAgIGZ1
bmN0aW9uIGlzQXJyYXkoaXQpIHsKKyAgICAgICAgcmV0dXJuIG9zdHJpbmcuY2FsbChpdCkgPT09
ICdbb2JqZWN0IEFycmF5XSc7CisgICAgfQorCisgICAgLyoqCisgICAgICogSGVscGVyIGZ1bmN0
aW9uIGZvciBpdGVyYXRpbmcgb3ZlciBhbiBhcnJheS4gSWYgdGhlIGZ1bmMgcmV0dXJucworICAg
ICAqIGEgdHJ1ZSB2YWx1ZSwgaXQgd2lsbCBicmVhayBvdXQgb2YgdGhlIGxvb3AuCisgICAgICov
CisgICAgZnVuY3Rpb24gZWFjaChhcnksIGZ1bmMpIHsKKyAgICAgICAgaWYgKGFyeSkgeworICAg
ICAgICAgICAgdmFyIGk7CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYXJ5Lmxlbmd0aDsg
aSArPSAxKSB7CisgICAgICAgICAgICAgICAgaWYgKGFyeVtpXSAmJiBmdW5jKGFyeVtpXSwgaSwg
YXJ5KSkgeworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBIZWxwZXIg
ZnVuY3Rpb24gZm9yIGl0ZXJhdGluZyBvdmVyIGFuIGFycmF5IGJhY2t3YXJkcy4gSWYgdGhlIGZ1
bmMKKyAgICAgKiByZXR1cm5zIGEgdHJ1ZSB2YWx1ZSwgaXQgd2lsbCBicmVhayBvdXQgb2YgdGhl
IGxvb3AuCisgICAgICovCisgICAgZnVuY3Rpb24gZWFjaFJldmVyc2UoYXJ5LCBmdW5jKSB7Cisg
ICAgICAgIGlmIChhcnkpIHsKKyAgICAgICAgICAgIHZhciBpOworICAgICAgICAgICAgZm9yIChp
ID0gYXJ5Lmxlbmd0aCAtIDE7IGkgPiAtMTsgaSAtPSAxKSB7CisgICAgICAgICAgICAgICAgaWYg
KGFyeVtpXSAmJiBmdW5jKGFyeVtpXSwgaSwgYXJ5KSkgeworICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBmdW5jdGlvbiBoYXNQcm9wKG9iaiwgcHJvcCkgeworICAgICAgICByZXR1cm4gaGFz
T3duLmNhbGwob2JqLCBwcm9wKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBnZXRPd24ob2JqLCBw
cm9wKSB7CisgICAgICAgIHJldHVybiBoYXNQcm9wKG9iaiwgcHJvcCkgJiYgb2JqW3Byb3BdOwor
ICAgIH0KKworICAgIC8qKgorICAgICAqIEN5Y2xlcyBvdmVyIHByb3BlcnRpZXMgaW4gYW4gb2Jq
ZWN0IGFuZCBjYWxscyBhIGZ1bmN0aW9uIGZvciBlYWNoCisgICAgICogcHJvcGVydHkgdmFsdWUu
IElmIHRoZSBmdW5jdGlvbiByZXR1cm5zIGEgdHJ1dGh5IHZhbHVlLCB0aGVuIHRoZQorICAgICAq
IGl0ZXJhdGlvbiBpcyBzdG9wcGVkLgorICAgICAqLworICAgIGZ1bmN0aW9uIGVhY2hQcm9wKG9i
aiwgZnVuYykgeworICAgICAgICB2YXIgcHJvcDsKKyAgICAgICAgZm9yIChwcm9wIGluIG9iaikg
eworICAgICAgICAgICAgaWYgKGhhc1Byb3Aob2JqLCBwcm9wKSkgeworICAgICAgICAgICAgICAg
IGlmIChmdW5jKG9ialtwcm9wXSwgcHJvcCkpIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisg
ICAgLyoqCisgICAgICogU2ltcGxlIGZ1bmN0aW9uIHRvIG1peCBpbiBwcm9wZXJ0aWVzIGZyb20g
c291cmNlIGludG8gdGFyZ2V0LAorICAgICAqIGJ1dCBvbmx5IGlmIHRhcmdldCBkb2VzIG5vdCBh
bHJlYWR5IGhhdmUgYSBwcm9wZXJ0eSBvZiB0aGUgc2FtZSBuYW1lLgorICAgICAqLworICAgIGZ1
bmN0aW9uIG1peGluKHRhcmdldCwgc291cmNlLCBmb3JjZSwgZGVlcFN0cmluZ01peGluKSB7Cisg
ICAgICAgIGlmIChzb3VyY2UpIHsKKyAgICAgICAgICAgIGVhY2hQcm9wKHNvdXJjZSwgZnVuY3Rp
b24gKHZhbHVlLCBwcm9wKSB7CisgICAgICAgICAgICAgICAgaWYgKGZvcmNlIHx8ICFoYXNQcm9w
KHRhcmdldCwgcHJvcCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGRlZXBTdHJpbmdNaXhp
biAmJiB0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIXRhcmdldFtwcm9wXSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdl
dFtwcm9wXSA9IHt9OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgbWl4aW4odGFyZ2V0W3Byb3BdLCB2YWx1ZSwgZm9yY2UsIGRlZXBTdHJpbmdNaXhp
bik7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICB0YXJnZXRbcHJvcF0gPSB2YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0YXJn
ZXQ7CisgICAgfQorCisgICAgLy9TaW1pbGFyIHRvIEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLCBi
dXQgdGhlICd0aGlzJyBvYmplY3QgaXMgc3BlY2lmaWVkCisgICAgLy9maXJzdCwgc2luY2UgaXQg
aXMgZWFzaWVyIHRvIHJlYWQvZmlndXJlIG91dCB3aGF0ICd0aGlzJyB3aWxsIGJlLgorICAgIGZ1
bmN0aW9uIGJpbmQob2JqLCBmbikgeworICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeworICAg
ICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KG9iaiwgYXJndW1lbnRzKTsKKyAgICAgICAgfTsKKyAg
ICB9CisKKyAgICBmdW5jdGlvbiBzY3JpcHRzKCkgeworICAgICAgICByZXR1cm4gZG9jdW1lbnQu
Z2V0RWxlbWVudHNCeVRhZ05hbWUoJ3NjcmlwdCcpOworICAgIH0KKworICAgIC8vQWxsb3cgZ2V0
dGluZyBhIGdsb2JhbCB0aGF0IGV4cHJlc3NlZCBpbgorICAgIC8vZG90IG5vdGF0aW9uLCBsaWtl
ICdhLmIuYycuCisgICAgZnVuY3Rpb24gZ2V0R2xvYmFsKHZhbHVlKSB7CisgICAgICAgIGlmICgh
dmFsdWUpIHsKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICAgICAgfQorICAgICAgICB2
YXIgZyA9IGdsb2JhbDsKKyAgICAgICAgZWFjaCh2YWx1ZS5zcGxpdCgnLicpLCBmdW5jdGlvbiAo
cGFydCkgeworICAgICAgICAgICAgZyA9IGdbcGFydF07CisgICAgICAgIH0pOworICAgICAgICBy
ZXR1cm4gZzsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RzIGFuIGVycm9yIHdp
dGggYSBwb2ludGVyIHRvIGFuIFVSTCB3aXRoIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICogQHBh
cmFtIHtTdHJpbmd9IGlkIHRoZSBlcnJvciBJRCB0aGF0IG1hcHMgdG8gYW4gSUQgb24gYSB3ZWIg
cGFnZS4KKyAgICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZSBodW1hbiByZWFkYWJsZSBlcnJv
ci4KKyAgICAgKiBAcGFyYW0ge0Vycm9yfSBbZXJyXSB0aGUgb3JpZ2luYWwgZXJyb3IsIGlmIHRo
ZXJlIGlzIG9uZS4KKyAgICAgKgorICAgICAqIEByZXR1cm5zIHtFcnJvcn0KKyAgICAgKi8KKyAg
ICBmdW5jdGlvbiBtYWtlRXJyb3IoaWQsIG1zZywgZXJyLCByZXF1aXJlTW9kdWxlcykgeworICAg
ICAgICB2YXIgZSA9IG5ldyBFcnJvcihtc2cgKyAnXG5odHRwOi8vcmVxdWlyZWpzLm9yZy9kb2Nz
L2Vycm9ycy5odG1sIycgKyBpZCk7CisgICAgICAgIGUucmVxdWlyZVR5cGUgPSBpZDsKKyAgICAg
ICAgZS5yZXF1aXJlTW9kdWxlcyA9IHJlcXVpcmVNb2R1bGVzOworICAgICAgICBpZiAoZXJyKSB7
CisgICAgICAgICAgICBlLm9yaWdpbmFsRXJyb3IgPSBlcnI7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIGU7CisgICAgfQorCisgICAgaWYgKHR5cGVvZiBkZWZpbmUgIT09ICd1bmRlZmluZWQn
KSB7CisgICAgICAgIC8vSWYgYSBkZWZpbmUgaXMgYWxyZWFkeSBpbiBwbGF5IHZpYSBhbm90aGVy
IEFNRCBsb2FkZXIsCisgICAgICAgIC8vZG8gbm90IG92ZXJ3cml0ZS4KKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmICh0eXBlb2YgcmVxdWlyZWpzICE9PSAndW5kZWZpbmVkJykgewor
ICAgICAgICBpZiAoaXNGdW5jdGlvbihyZXF1aXJlanMpKSB7CisgICAgICAgICAgICAvL0RvIG5v
dCBvdmVyd3JpdGUgYW5kIGV4aXN0aW5nIHJlcXVpcmVqcyBpbnN0YW5jZS4KKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBjZmcgPSByZXF1aXJlanM7CisgICAgICAgIHJl
cXVpcmVqcyA9IHVuZGVmaW5lZDsKKyAgICB9CisKKyAgICAvL0FsbG93IGZvciBhIHJlcXVpcmUg
Y29uZmlnIG9iamVjdAorICAgIGlmICh0eXBlb2YgcmVxdWlyZSAhPT0gJ3VuZGVmaW5lZCcgJiYg
IWlzRnVuY3Rpb24ocmVxdWlyZSkpIHsKKyAgICAgICAgLy9hc3N1bWUgaXQgaXMgYSBjb25maWcg
b2JqZWN0LgorICAgICAgICBjZmcgPSByZXF1aXJlOworICAgICAgICByZXF1aXJlID0gdW5kZWZp
bmVkOworICAgIH0KKworICAgIGZ1bmN0aW9uIG5ld0NvbnRleHQoY29udGV4dE5hbWUpIHsKKyAg
ICAgICAgdmFyIGluQ2hlY2tMb2FkZWQsIE1vZHVsZSwgY29udGV4dCwgaGFuZGxlcnMsCisgICAg
ICAgICAgICBjaGVja0xvYWRlZFRpbWVvdXRJZCwKKyAgICAgICAgICAgIGNvbmZpZyA9IHsKKyAg
ICAgICAgICAgICAgICB3YWl0U2Vjb25kczogNywKKyAgICAgICAgICAgICAgICBiYXNlVXJsOiAn
Li8nLAorICAgICAgICAgICAgICAgIHBhdGhzOiB7fSwKKyAgICAgICAgICAgICAgICBwa2dzOiB7
fSwKKyAgICAgICAgICAgICAgICBzaGltOiB7fSwKKyAgICAgICAgICAgICAgICBtYXA6IHt9LAor
ICAgICAgICAgICAgICAgIGNvbmZpZzoge30KKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBy
ZWdpc3RyeSA9IHt9LAorICAgICAgICAgICAgdW5kZWZFdmVudHMgPSB7fSwKKyAgICAgICAgICAg
IGRlZlF1ZXVlID0gW10sCisgICAgICAgICAgICBkZWZpbmVkID0ge30sCisgICAgICAgICAgICB1
cmxGZXRjaGVkID0ge30sCisgICAgICAgICAgICByZXF1aXJlQ291bnRlciA9IDEsCisgICAgICAg
ICAgICB1bm5vcm1hbGl6ZWRDb3VudGVyID0gMTsKKworICAgICAgICAvKioKKyAgICAgICAgICog
VHJpbXMgdGhlIC4gYW5kIC4uIGZyb20gYW4gYXJyYXkgb2YgcGF0aCBzZWdtZW50cy4KKyAgICAg
ICAgICogSXQgd2lsbCBrZWVwIGEgbGVhZGluZyBwYXRoIHNlZ21lbnQgaWYgYSAuLiB3aWxsIGJl
Y29tZQorICAgICAgICAgKiB0aGUgZmlyc3QgcGF0aCBzZWdtZW50LCB0byBoZWxwIHdpdGggbW9k
dWxlIG5hbWUgbG9va3VwcywKKyAgICAgICAgICogd2hpY2ggYWN0IGxpa2UgcGF0aHMsIGJ1dCBj
YW4gYmUgcmVtYXBwZWQuIEJ1dCB0aGUgZW5kIHJlc3VsdCwKKyAgICAgICAgICogYWxsIHBhdGhz
IHRoYXQgdXNlIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGxvb2sgbm9ybWFsaXplZC4KKyAgICAgICAg
ICogTk9URTogdGhpcyBtZXRob2QgTU9ESUZJRVMgdGhlIGlucHV0IGFycmF5LgorICAgICAgICAg
KiBAcGFyYW0ge0FycmF5fSBhcnkgdGhlIGFycmF5IG9mIHBhdGggc2VnbWVudHMuCisgICAgICAg
ICAqLworICAgICAgICBmdW5jdGlvbiB0cmltRG90cyhhcnkpIHsKKyAgICAgICAgICAgIHZhciBp
LCBwYXJ0OworICAgICAgICAgICAgZm9yIChpID0gMDsgYXJ5W2ldOyBpICs9IDEpIHsKKyAgICAg
ICAgICAgICAgICBwYXJ0ID0gYXJ5W2ldOworICAgICAgICAgICAgICAgIGlmIChwYXJ0ID09PSAn
LicpIHsKKyAgICAgICAgICAgICAgICAgICAgYXJ5LnNwbGljZShpLCAxKTsKKyAgICAgICAgICAg
ICAgICAgICAgaSAtPSAxOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFydCA9PT0gJy4u
JykgeworICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PT0gMSAmJiAoYXJ5WzJdID09PSAnLi4n
IHx8IGFyeVswXSA9PT0gJy4uJykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vRW5kIG9m
IHRoZSBsaW5lLiBLZWVwIGF0IGxlYXN0IG9uZSBub24tZG90CisgICAgICAgICAgICAgICAgICAg
ICAgICAvL3BhdGggc2VnbWVudCBhdCB0aGUgZnJvbnQgc28gaXQgY2FuIGJlIG1hcHBlZAorICAg
ICAgICAgICAgICAgICAgICAgICAgLy9jb3JyZWN0bHkgdG8gZGlzay4gT3RoZXJ3aXNlLCB0aGVy
ZSBpcyBsaWtlbHkKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vbm8gcGF0aCBtYXBwaW5nIGZv
ciBhIHBhdGggc3RhcnRpbmcgd2l0aCAnLi4nLgorICAgICAgICAgICAgICAgICAgICAgICAgLy9U
aGlzIGNhbiBzdGlsbCBmYWlsLCBidXQgY2F0Y2hlcyB0aGUgbW9zdCByZWFzb25hYmxlCisgICAg
ICAgICAgICAgICAgICAgICAgICAvL3VzZXMgb2YgLi4KKyAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGkgPiAwKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBhcnkuc3BsaWNlKGkgLSAxLCAyKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGkgLT0gMjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBHaXZl
biBhIHJlbGF0aXZlIG1vZHVsZSBuYW1lLCBsaWtlIC4vc29tZXRoaW5nLCBub3JtYWxpemUgaXQg
dG8KKyAgICAgICAgICogYSByZWFsIG5hbWUgdGhhdCBjYW4gYmUgbWFwcGVkIHRvIGEgcGF0aC4K
KyAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgdGhlIHJlbGF0aXZlIG5hbWUKKyAgICAg
ICAgICogQHBhcmFtIHtTdHJpbmd9IGJhc2VOYW1lIGEgcmVhbCBuYW1lIHRoYXQgdGhlIG5hbWUg
YXJnIGlzIHJlbGF0aXZlCisgICAgICAgICAqIHRvLgorICAgICAgICAgKiBAcGFyYW0ge0Jvb2xl
YW59IGFwcGx5TWFwIGFwcGx5IHRoZSBtYXAgY29uZmlnIHRvIHRoZSB2YWx1ZS4gU2hvdWxkCisg
ICAgICAgICAqIG9ubHkgYmUgZG9uZSBpZiB0aGlzIG5vcm1hbGl6YXRpb24gaXMgZm9yIGEgZGVw
ZW5kZW5jeSBJRC4KKyAgICAgICAgICogQHJldHVybnMge1N0cmluZ30gbm9ybWFsaXplZCBuYW1l
CisgICAgICAgICAqLworICAgICAgICBmdW5jdGlvbiBub3JtYWxpemUobmFtZSwgYmFzZU5hbWUs
IGFwcGx5TWFwKSB7CisgICAgICAgICAgICB2YXIgcGtnTmFtZSwgcGtnQ29uZmlnLCBtYXBWYWx1
ZSwgbmFtZVBhcnRzLCBpLCBqLCBuYW1lU2VnbWVudCwKKyAgICAgICAgICAgICAgICBmb3VuZE1h
cCwgZm91bmRJLCBmb3VuZFN0YXJNYXAsIHN0YXJJLAorICAgICAgICAgICAgICAgIGJhc2VQYXJ0
cyA9IGJhc2VOYW1lICYmIGJhc2VOYW1lLnNwbGl0KCcvJyksCisgICAgICAgICAgICAgICAgbm9y
bWFsaXplZEJhc2VQYXJ0cyA9IGJhc2VQYXJ0cywKKyAgICAgICAgICAgICAgICBtYXAgPSBjb25m
aWcubWFwLAorICAgICAgICAgICAgICAgIHN0YXJNYXAgPSBtYXAgJiYgbWFwWycqJ107CisKKyAg
ICAgICAgICAgIC8vQWRqdXN0IGFueSByZWxhdGl2ZSBwYXRocy4KKyAgICAgICAgICAgIGlmIChu
YW1lICYmIG5hbWUuY2hhckF0KDApID09PSAnLicpIHsKKyAgICAgICAgICAgICAgICAvL0lmIGhh
dmUgYSBiYXNlIG5hbWUsIHRyeSB0byBub3JtYWxpemUgYWdhaW5zdCBpdCwKKyAgICAgICAgICAg
ICAgICAvL290aGVyd2lzZSwgYXNzdW1lIGl0IGlzIGEgdG9wLWxldmVsIHJlcXVpcmUgdGhhdCB3
aWxsCisgICAgICAgICAgICAgICAgLy9iZSByZWxhdGl2ZSB0byBiYXNlVXJsIGluIHRoZSBlbmQu
CisgICAgICAgICAgICAgICAgaWYgKGJhc2VOYW1lKSB7CisgICAgICAgICAgICAgICAgICAgIGlm
IChnZXRPd24oY29uZmlnLnBrZ3MsIGJhc2VOYW1lKSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgLy9JZiB0aGUgYmFzZU5hbWUgaXMgYSBwYWNrYWdlIG5hbWUsIHRoZW4ganVzdCB0cmVhdCBp
dCBhcyBvbmUKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vbmFtZSB0byBjb25jYXQgdGhlIG5h
bWUgd2l0aC4KKyAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRCYXNlUGFydHMgPSBi
YXNlUGFydHMgPSBbYmFzZU5hbWVdOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICAgICAgLy9Db252ZXJ0IGJhc2VOYW1lIHRvIGFycmF5LCBhbmQgbG9w
IG9mZiB0aGUgbGFzdCBwYXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgLy9zbyB0aGF0IC4g
bWF0Y2hlcyB0aGF0ICdkaXJlY3RvcnknIGFuZCBub3QgbmFtZSBvZiB0aGUgYmFzZU5hbWUncwor
ICAgICAgICAgICAgICAgICAgICAgICAgLy9tb2R1bGUuIEZvciBpbnN0YW5jZSwgYmFzZU5hbWUg
b2YgJ29uZS90d28vdGhyZWUnLCBtYXBzIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAvLydv
bmUvdHdvL3RocmVlLmpzJywgYnV0IHdlIHdhbnQgdGhlIGRpcmVjdG9yeSwgJ29uZS90d28nIGZv
cgorICAgICAgICAgICAgICAgICAgICAgICAgLy90aGlzIG5vcm1hbGl6YXRpb24uCisgICAgICAg
ICAgICAgICAgICAgICAgICBub3JtYWxpemVkQmFzZVBhcnRzID0gYmFzZVBhcnRzLnNsaWNlKDAs
IGJhc2VQYXJ0cy5sZW5ndGggLSAxKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgICAgIG5hbWUgPSBub3JtYWxpemVkQmFzZVBhcnRzLmNvbmNhdChuYW1lLnNwbGl0
KCcvJykpOworICAgICAgICAgICAgICAgICAgICB0cmltRG90cyhuYW1lKTsKKworICAgICAgICAg
ICAgICAgICAgICAvL1NvbWUgdXNlIG9mIHBhY2thZ2VzIG1heSB1c2UgYSAuIHBhdGggdG8gcmVm
ZXJlbmNlIHRoZQorICAgICAgICAgICAgICAgICAgICAvLydtYWluJyBtb2R1bGUgbmFtZSwgc28g
bm9ybWFsaXplIGZvciB0aGF0LgorICAgICAgICAgICAgICAgICAgICBwa2dDb25maWcgPSBnZXRP
d24oY29uZmlnLnBrZ3MsIChwa2dOYW1lID0gbmFtZVswXSkpOworICAgICAgICAgICAgICAgICAg
ICBuYW1lID0gbmFtZS5qb2luKCcvJyk7CisgICAgICAgICAgICAgICAgICAgIGlmIChwa2dDb25m
aWcgJiYgbmFtZSA9PT0gcGtnTmFtZSArICcvJyArIHBrZ0NvbmZpZy5tYWluKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBuYW1lID0gcGtnTmFtZTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobmFtZS5pbmRleE9mKCcuLycpID09PSAwKSB7Cisg
ICAgICAgICAgICAgICAgICAgIC8vIE5vIGJhc2VOYW1lLCBzbyB0aGlzIGlzIElEIGlzIHJlc29s
dmVkIHJlbGF0aXZlCisgICAgICAgICAgICAgICAgICAgIC8vIHRvIGJhc2VVcmwsIHB1bGwgb2Zm
IHRoZSBsZWFkaW5nIGRvdC4KKyAgICAgICAgICAgICAgICAgICAgbmFtZSA9IG5hbWUuc3Vic3Ry
aW5nKDIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Ly9BcHBseSBtYXAgY29uZmlnIGlmIGF2YWlsYWJsZS4KKyAgICAgICAgICAgIGlmIChhcHBseU1h
cCAmJiAoYmFzZVBhcnRzIHx8IHN0YXJNYXApICYmIG1hcCkgeworICAgICAgICAgICAgICAgIG5h
bWVQYXJ0cyA9IG5hbWUuc3BsaXQoJy8nKTsKKworICAgICAgICAgICAgICAgIGZvciAoaSA9IG5h
bWVQYXJ0cy5sZW5ndGg7IGkgPiAwOyBpIC09IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgbmFt
ZVNlZ21lbnQgPSBuYW1lUGFydHMuc2xpY2UoMCwgaSkuam9pbignLycpOworCisgICAgICAgICAg
ICAgICAgICAgIGlmIChiYXNlUGFydHMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vRmlu
ZCB0aGUgbG9uZ2VzdCBiYXNlTmFtZSBzZWdtZW50IG1hdGNoIGluIHRoZSBjb25maWcuCisgICAg
ICAgICAgICAgICAgICAgICAgICAvL1NvLCBkbyBqb2lucyBvbiB0aGUgYmlnZ2VzdCB0byBzbWFs
bGVzdCBsZW5ndGhzIG9mIGJhc2VQYXJ0cy4KKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAo
aiA9IGJhc2VQYXJ0cy5sZW5ndGg7IGogPiAwOyBqIC09IDEpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtYXBWYWx1ZSA9IGdldE93bihtYXAsIGJhc2VQYXJ0cy5zbGljZSgwLCBqKS5q
b2luKCcvJykpOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9iYXNlTmFtZSBzZWdt
ZW50IGhhcyBjb25maWcsIGZpbmQgaWYgaXQgaGFzIG9uZSBmb3IKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvL3RoaXMgbmFtZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
bWFwVmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwVmFsdWUgPSBn
ZXRPd24obWFwVmFsdWUsIG5hbWVTZWdtZW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKG1hcFZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvL01hdGNoLCB1cGRhdGUgbmFtZSB0byB0aGUgbmV3IHZhbHVlLgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZm91bmRNYXAgPSBtYXBWYWx1ZTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZvdW5kSSA9IGk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmIChmb3VuZE1h
cCkgeworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgICAgICAvL0NoZWNrIGZvciBhIHN0YXIgbWFwIG1hdGNoLCBi
dXQganVzdCBob2xkIG9uIHRvIGl0LAorICAgICAgICAgICAgICAgICAgICAvL2lmIHRoZXJlIGlz
IGEgc2hvcnRlciBzZWdtZW50IG1hdGNoIGxhdGVyIGluIGEgbWF0Y2hpbmcKKyAgICAgICAgICAg
ICAgICAgICAgLy9jb25maWcsIHRoZW4gZmF2b3Igb3ZlciB0aGlzIHN0YXIgbWFwLgorICAgICAg
ICAgICAgICAgICAgICBpZiAoIWZvdW5kU3Rhck1hcCAmJiBzdGFyTWFwICYmIGdldE93bihzdGFy
TWFwLCBuYW1lU2VnbWVudCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kU3Rhck1h
cCA9IGdldE93bihzdGFyTWFwLCBuYW1lU2VnbWVudCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBzdGFySSA9IGk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICBpZiAoIWZvdW5kTWFwICYmIGZvdW5kU3Rhck1hcCkgeworICAgICAg
ICAgICAgICAgICAgICBmb3VuZE1hcCA9IGZvdW5kU3Rhck1hcDsKKyAgICAgICAgICAgICAgICAg
ICAgZm91bmRJID0gc3Rhckk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
aWYgKGZvdW5kTWFwKSB7CisgICAgICAgICAgICAgICAgICAgIG5hbWVQYXJ0cy5zcGxpY2UoMCwg
Zm91bmRJLCBmb3VuZE1hcCk7CisgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBuYW1lUGFydHMu
am9pbignLycpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgcmV0dXJuIG5hbWU7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiByZW1vdmVTY3Jp
cHQobmFtZSkgeworICAgICAgICAgICAgaWYgKGlzQnJvd3NlcikgeworICAgICAgICAgICAgICAg
IGVhY2goc2NyaXB0cygpLCBmdW5jdGlvbiAoc2NyaXB0Tm9kZSkgeworICAgICAgICAgICAgICAg
ICAgICBpZiAoc2NyaXB0Tm9kZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtcmVxdWlyZW1vZHVsZScpID09
PSBuYW1lICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0Tm9kZS5nZXRBdHRy
aWJ1dGUoJ2RhdGEtcmVxdWlyZWNvbnRleHQnKSA9PT0gY29udGV4dC5jb250ZXh0TmFtZSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0Tm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxk
KHNjcmlwdE5vZGUpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIGhhc1BhdGhGYWxsYmFjayhpZCkgeworICAgICAg
ICAgICAgdmFyIHBhdGhDb25maWcgPSBnZXRPd24oY29uZmlnLnBhdGhzLCBpZCk7CisgICAgICAg
ICAgICBpZiAocGF0aENvbmZpZyAmJiBpc0FycmF5KHBhdGhDb25maWcpICYmIHBhdGhDb25maWcu
bGVuZ3RoID4gMSkgeworICAgICAgICAgICAgICAgIHJlbW92ZVNjcmlwdChpZCk7CisgICAgICAg
ICAgICAgICAgLy9Qb3Agb2ZmIHRoZSBmaXJzdCBhcnJheSB2YWx1ZSwgc2luY2UgaXQgZmFpbGVk
LCBhbmQKKyAgICAgICAgICAgICAgICAvL3JldHJ5CisgICAgICAgICAgICAgICAgcGF0aENvbmZp
Zy5zaGlmdCgpOworICAgICAgICAgICAgICAgIGNvbnRleHQucmVxdWlyZS51bmRlZihpZCk7Cisg
ICAgICAgICAgICAgICAgY29udGV4dC5yZXF1aXJlKFtpZF0pOworICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy9UdXJucyBh
IHBsdWdpbiFyZXNvdXJjZSB0byBbcGx1Z2luLCByZXNvdXJjZV0KKyAgICAgICAgLy93aXRoIHRo
ZSBwbHVnaW4gYmVpbmcgdW5kZWZpbmVkIGlmIHRoZSBuYW1lCisgICAgICAgIC8vZGlkIG5vdCBo
YXZlIGEgcGx1Z2luIHByZWZpeC4KKyAgICAgICAgZnVuY3Rpb24gc3BsaXRQcmVmaXgobmFtZSkg
eworICAgICAgICAgICAgdmFyIHByZWZpeCwKKyAgICAgICAgICAgICAgICBpbmRleCA9IG5hbWUg
PyBuYW1lLmluZGV4T2YoJyEnKSA6IC0xOworICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHsK
KyAgICAgICAgICAgICAgICBwcmVmaXggPSBuYW1lLnN1YnN0cmluZygwLCBpbmRleCk7CisgICAg
ICAgICAgICAgICAgbmFtZSA9IG5hbWUuc3Vic3RyaW5nKGluZGV4ICsgMSwgbmFtZS5sZW5ndGgp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIFtwcmVmaXgsIG5hbWVdOworICAg
ICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIENyZWF0ZXMgYSBtb2R1bGUgbWFwcGlu
ZyB0aGF0IGluY2x1ZGVzIHBsdWdpbiBwcmVmaXgsIG1vZHVsZQorICAgICAgICAgKiBuYW1lLCBh
bmQgcGF0aC4gSWYgcGFyZW50TW9kdWxlTWFwIGlzIHByb3ZpZGVkIGl0IHdpbGwKKyAgICAgICAg
ICogYWxzbyBub3JtYWxpemUgdGhlIG5hbWUgdmlhIHJlcXVpcmUubm9ybWFsaXplKCkKKyAgICAg
ICAgICoKKyAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgdGhlIG1vZHVsZSBuYW1lCisg
ICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBbcGFyZW50TW9kdWxlTWFwXSBwYXJlbnQgbW9kdWxl
IG1hcAorICAgICAgICAgKiBmb3IgdGhlIG1vZHVsZSBuYW1lLCB1c2VkIHRvIHJlc29sdmUgcmVs
YXRpdmUgbmFtZXMuCisgICAgICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gaXNOb3JtYWxpemVkOiBp
cyB0aGUgSUQgYWxyZWFkeSBub3JtYWxpemVkLgorICAgICAgICAgKiBUaGlzIGlzIHRydWUgaWYg
dGhpcyBjYWxsIGlzIGRvbmUgZm9yIGEgZGVmaW5lKCkgbW9kdWxlIElELgorICAgICAgICAgKiBA
cGFyYW0ge0Jvb2xlYW59IGFwcGx5TWFwOiBhcHBseSB0aGUgbWFwIGNvbmZpZyB0byB0aGUgSUQu
CisgICAgICAgICAqIFNob3VsZCBvbmx5IGJlIHRydWUgaWYgdGhpcyBtYXAgaXMgZm9yIGEgZGVw
ZW5kZW5jeS4KKyAgICAgICAgICoKKyAgICAgICAgICogQHJldHVybnMge09iamVjdH0KKyAgICAg
ICAgICovCisgICAgICAgIGZ1bmN0aW9uIG1ha2VNb2R1bGVNYXAobmFtZSwgcGFyZW50TW9kdWxl
TWFwLCBpc05vcm1hbGl6ZWQsIGFwcGx5TWFwKSB7CisgICAgICAgICAgICB2YXIgdXJsLCBwbHVn
aW5Nb2R1bGUsIHN1ZmZpeCwgbmFtZVBhcnRzLAorICAgICAgICAgICAgICAgIHByZWZpeCA9IG51
bGwsCisgICAgICAgICAgICAgICAgcGFyZW50TmFtZSA9IHBhcmVudE1vZHVsZU1hcCA/IHBhcmVu
dE1vZHVsZU1hcC5uYW1lIDogbnVsbCwKKyAgICAgICAgICAgICAgICBvcmlnaW5hbE5hbWUgPSBu
YW1lLAorICAgICAgICAgICAgICAgIGlzRGVmaW5lID0gdHJ1ZSwKKyAgICAgICAgICAgICAgICBu
b3JtYWxpemVkTmFtZSA9ICcnOworCisgICAgICAgICAgICAvL0lmIG5vIG5hbWUsIHRoZW4gaXQg
bWVhbnMgaXQgaXMgYSByZXF1aXJlIGNhbGwsIGdlbmVyYXRlIGFuCisgICAgICAgICAgICAvL2lu
dGVybmFsIG5hbWUuCisgICAgICAgICAgICBpZiAoIW5hbWUpIHsKKyAgICAgICAgICAgICAgICBp
c0RlZmluZSA9IGZhbHNlOworICAgICAgICAgICAgICAgIG5hbWUgPSAnX0ByJyArIChyZXF1aXJl
Q291bnRlciArPSAxKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbmFtZVBhcnRzID0g
c3BsaXRQcmVmaXgobmFtZSk7CisgICAgICAgICAgICBwcmVmaXggPSBuYW1lUGFydHNbMF07Cisg
ICAgICAgICAgICBuYW1lID0gbmFtZVBhcnRzWzFdOworCisgICAgICAgICAgICBpZiAocHJlZml4
KSB7CisgICAgICAgICAgICAgICAgcHJlZml4ID0gbm9ybWFsaXplKHByZWZpeCwgcGFyZW50TmFt
ZSwgYXBwbHlNYXApOworICAgICAgICAgICAgICAgIHBsdWdpbk1vZHVsZSA9IGdldE93bihkZWZp
bmVkLCBwcmVmaXgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvL0FjY291bnQgZm9y
IHJlbGF0aXZlIHBhdGhzIGlmIHRoZXJlIGlzIGEgYmFzZSBuYW1lLgorICAgICAgICAgICAgaWYg
KG5hbWUpIHsKKyAgICAgICAgICAgICAgICBpZiAocHJlZml4KSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChwbHVnaW5Nb2R1bGUgJiYgcGx1Z2luTW9kdWxlLm5vcm1hbGl6ZSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgLy9QbHVnaW4gaXMgbG9hZGVkLCB1c2UgaXRzIG5vcm1hbGl6ZSBt
ZXRob2QuCisgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkTmFtZSA9IHBsdWdpbk1v
ZHVsZS5ub3JtYWxpemUobmFtZSwgZnVuY3Rpb24gKG5hbWUpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gbm9ybWFsaXplKG5hbWUsIHBhcmVudE5hbWUsIGFwcGx5TWFwKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZE5hbWUgPSBub3JtYWxpemUobmFt
ZSwgcGFyZW50TmFtZSwgYXBwbHlNYXApOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy9BIHJlZ3VsYXIgbW9kdWxl
LgorICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkTmFtZSA9IG5vcm1hbGl6ZShuYW1lLCBw
YXJlbnROYW1lLCBhcHBseU1hcCk7CisKKyAgICAgICAgICAgICAgICAgICAgLy9Ob3JtYWxpemVk
IG5hbWUgbWF5IGJlIGEgcGx1Z2luIElEIGR1ZSB0byBtYXAgY29uZmlnCisgICAgICAgICAgICAg
ICAgICAgIC8vYXBwbGljYXRpb24gaW4gbm9ybWFsaXplLiBUaGUgbWFwIGNvbmZpZyB2YWx1ZXMg
bXVzdAorICAgICAgICAgICAgICAgICAgICAvL2FscmVhZHkgYmUgbm9ybWFsaXplZCwgc28gZG8g
bm90IG5lZWQgdG8gcmVkbyB0aGF0IHBhcnQuCisgICAgICAgICAgICAgICAgICAgIG5hbWVQYXJ0
cyA9IHNwbGl0UHJlZml4KG5vcm1hbGl6ZWROYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgcHJl
Zml4ID0gbmFtZVBhcnRzWzBdOworICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkTmFtZSA9
IG5hbWVQYXJ0c1sxXTsKKyAgICAgICAgICAgICAgICAgICAgaXNOb3JtYWxpemVkID0gdHJ1ZTsK
KworICAgICAgICAgICAgICAgICAgICB1cmwgPSBjb250ZXh0Lm5hbWVUb1VybChub3JtYWxpemVk
TmFtZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAv
L0lmIHRoZSBpZCBpcyBhIHBsdWdpbiBpZCB0aGF0IGNhbm5vdCBiZSBkZXRlcm1pbmVkIGlmIGl0
IG5lZWRzCisgICAgICAgICAgICAvL25vcm1hbGl6YXRpb24sIHN0YW1wIGl0IHdpdGggYSB1bmlx
dWUgSUQgc28gdHdvIG1hdGNoaW5nIHJlbGF0aXZlCisgICAgICAgICAgICAvL2lkcyB0aGF0IG1h
eSBjb25mbGljdCBjYW4gYmUgc2VwYXJhdGUuCisgICAgICAgICAgICBzdWZmaXggPSBwcmVmaXgg
JiYgIXBsdWdpbk1vZHVsZSAmJiAhaXNOb3JtYWxpemVkID8KKyAgICAgICAgICAgICAgICAgICAg
ICdfdW5ub3JtYWxpemVkJyArICh1bm5vcm1hbGl6ZWRDb3VudGVyICs9IDEpIDoKKyAgICAgICAg
ICAgICAgICAgICAgICcnOworCisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAg
IHByZWZpeDogcHJlZml4LAorICAgICAgICAgICAgICAgIG5hbWU6IG5vcm1hbGl6ZWROYW1lLAor
ICAgICAgICAgICAgICAgIHBhcmVudE1hcDogcGFyZW50TW9kdWxlTWFwLAorICAgICAgICAgICAg
ICAgIHVubm9ybWFsaXplZDogISFzdWZmaXgsCisgICAgICAgICAgICAgICAgdXJsOiB1cmwsCisg
ICAgICAgICAgICAgICAgb3JpZ2luYWxOYW1lOiBvcmlnaW5hbE5hbWUsCisgICAgICAgICAgICAg
ICAgaXNEZWZpbmU6IGlzRGVmaW5lLAorICAgICAgICAgICAgICAgIGlkOiAocHJlZml4ID8KKyAg
ICAgICAgICAgICAgICAgICAgICAgIHByZWZpeCArICchJyArIG5vcm1hbGl6ZWROYW1lIDoKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWROYW1lKSArIHN1ZmZpeAorICAgICAgICAg
ICAgfTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIGdldE1vZHVsZShkZXBNYXApIHsK
KyAgICAgICAgICAgIHZhciBpZCA9IGRlcE1hcC5pZCwKKyAgICAgICAgICAgICAgICBtb2QgPSBn
ZXRPd24ocmVnaXN0cnksIGlkKTsKKworICAgICAgICAgICAgaWYgKCFtb2QpIHsKKyAgICAgICAg
ICAgICAgICBtb2QgPSByZWdpc3RyeVtpZF0gPSBuZXcgY29udGV4dC5Nb2R1bGUoZGVwTWFwKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIG1vZDsKKyAgICAgICAgfQorCisg
ICAgICAgIGZ1bmN0aW9uIG9uKGRlcE1hcCwgbmFtZSwgZm4pIHsKKyAgICAgICAgICAgIHZhciBp
ZCA9IGRlcE1hcC5pZCwKKyAgICAgICAgICAgICAgICBtb2QgPSBnZXRPd24ocmVnaXN0cnksIGlk
KTsKKworICAgICAgICAgICAgaWYgKGhhc1Byb3AoZGVmaW5lZCwgaWQpICYmCisgICAgICAgICAg
ICAgICAgICAgICghbW9kIHx8IG1vZC5kZWZpbmVFbWl0Q29tcGxldGUpKSB7CisgICAgICAgICAg
ICAgICAgaWYgKG5hbWUgPT09ICdkZWZpbmVkJykgeworICAgICAgICAgICAgICAgICAgICBmbihk
ZWZpbmVkW2lkXSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBnZXRNb2R1bGUoZGVwTWFwKS5vbihuYW1lLCBmbik7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBvbkVycm9yKGVyciwgZXJyYmFjaykg
eworICAgICAgICAgICAgdmFyIGlkcyA9IGVyci5yZXF1aXJlTW9kdWxlcywKKyAgICAgICAgICAg
ICAgICBub3RpZmllZCA9IGZhbHNlOworCisgICAgICAgICAgICBpZiAoZXJyYmFjaykgeworICAg
ICAgICAgICAgICAgIGVycmJhY2soZXJyKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgZWFjaChpZHMsIGZ1bmN0aW9uIChpZCkgeworICAgICAgICAgICAgICAgICAgICB2
YXIgbW9kID0gZ2V0T3duKHJlZ2lzdHJ5LCBpZCk7CisgICAgICAgICAgICAgICAgICAgIGlmICht
b2QpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vU2V0IGVycm9yIG9uIG1vZHVsZSwgc28g
aXQgc2tpcHMgdGltZW91dCBjaGVja3MuCisgICAgICAgICAgICAgICAgICAgICAgICBtb2QuZXJy
b3IgPSBlcnI7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobW9kLmV2ZW50cy5lcnJvcikg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmaWVkID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtb2QuZW1pdCgnZXJyb3InLCBlcnIpOworICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSk7
CisKKyAgICAgICAgICAgICAgICBpZiAoIW5vdGlmaWVkKSB7CisgICAgICAgICAgICAgICAgICAg
IHJlcS5vbkVycm9yKGVycik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIEludGVybmFsIG1ldGhvZCB0byB0cmFu
c2ZlciBnbG9iYWxRdWV1ZSBpdGVtcyB0byB0aGlzIGNvbnRleHQncworICAgICAgICAgKiBkZWZR
dWV1ZS4KKyAgICAgICAgICovCisgICAgICAgIGZ1bmN0aW9uIHRha2VHbG9iYWxRdWV1ZSgpIHsK
KyAgICAgICAgICAgIC8vUHVzaCBhbGwgdGhlIGdsb2JhbERlZlF1ZXVlIGl0ZW1zIGludG8gdGhl
IGNvbnRleHQncyBkZWZRdWV1ZQorICAgICAgICAgICAgaWYgKGdsb2JhbERlZlF1ZXVlLmxlbmd0
aCkgeworICAgICAgICAgICAgICAgIC8vQXJyYXkgc3BsaWNlIGluIHRoZSB2YWx1ZXMgc2luY2Ug
dGhlIGNvbnRleHQgY29kZSBoYXMgYQorICAgICAgICAgICAgICAgIC8vbG9jYWwgdmFyIHJlZiB0
byBkZWZRdWV1ZSwgc28gY2Fubm90IGp1c3QgcmVhc3NpZ24gdGhlIG9uZQorICAgICAgICAgICAg
ICAgIC8vb24gY29udGV4dC4KKyAgICAgICAgICAgICAgICBhcHNwLmFwcGx5KGRlZlF1ZXVlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RlZlF1ZXVlLmxlbmd0aCAtIDEsIDBdLmNvbmNh
dChnbG9iYWxEZWZRdWV1ZSkpOworICAgICAgICAgICAgICAgIGdsb2JhbERlZlF1ZXVlID0gW107
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBoYW5kbGVycyA9IHsKKyAgICAg
ICAgICAgICdyZXF1aXJlJzogZnVuY3Rpb24gKG1vZCkgeworICAgICAgICAgICAgICAgIGlmICht
b2QucmVxdWlyZSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9kLnJlcXVpcmU7Cisg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChtb2Qu
cmVxdWlyZSA9IGNvbnRleHQubWFrZVJlcXVpcmUobW9kLm1hcCkpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICAnZXhwb3J0cyc6IGZ1bmN0aW9uIChtb2Qp
IHsKKyAgICAgICAgICAgICAgICBtb2QudXNpbmdFeHBvcnRzID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICBpZiAobW9kLm1hcC5pc0RlZmluZSkgeworICAgICAgICAgICAgICAgICAgICBpZiAobW9k
LmV4cG9ydHMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtb2QuZXhwb3J0czsK
KyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiAobW9kLmV4cG9ydHMgPSBkZWZpbmVkW21vZC5tYXAuaWRdID0ge30pOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwKKyAgICAgICAg
ICAgICdtb2R1bGUnOiBmdW5jdGlvbiAobW9kKSB7CisgICAgICAgICAgICAgICAgaWYgKG1vZC5t
b2R1bGUpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1vZC5tb2R1bGU7CisgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChtb2QubW9kdWxl
ID0geworICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IG1vZC5tYXAuaWQsCisgICAgICAgICAg
ICAgICAgICAgICAgICB1cmk6IG1vZC5tYXAudXJsLAorICAgICAgICAgICAgICAgICAgICAgICAg
Y29uZmlnOiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IChjb25maWcuY29uZmlnICYmIGdldE93bihjb25maWcuY29uZmlnLCBtb2QubWFwLmlkKSkgfHwg
e307CisgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAg
ZXhwb3J0czogZGVmaW5lZFttb2QubWFwLmlkXQorICAgICAgICAgICAgICAgICAgICB9KTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgZnVu
Y3Rpb24gY2xlYW5SZWdpc3RyeShpZCkgeworICAgICAgICAgICAgLy9DbGVhbiB1cCBtYWNoaW5l
cnkgdXNlZCBmb3Igd2FpdGluZyBtb2R1bGVzLgorICAgICAgICAgICAgZGVsZXRlIHJlZ2lzdHJ5
W2lkXTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIGJyZWFrQ3ljbGUobW9kLCB0cmFj
ZWQsIHByb2Nlc3NlZCkgeworICAgICAgICAgICAgdmFyIGlkID0gbW9kLm1hcC5pZDsKKworICAg
ICAgICAgICAgaWYgKG1vZC5lcnJvcikgeworICAgICAgICAgICAgICAgIG1vZC5lbWl0KCdlcnJv
cicsIG1vZC5lcnJvcik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHRy
YWNlZFtpZF0gPSB0cnVlOworICAgICAgICAgICAgICAgIGVhY2gobW9kLmRlcE1hcHMsIGZ1bmN0
aW9uIChkZXBNYXAsIGkpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGRlcElkID0gZGVwTWFw
LmlkLAorICAgICAgICAgICAgICAgICAgICAgICAgZGVwID0gZ2V0T3duKHJlZ2lzdHJ5LCBkZXBJ
ZCk7CisKKyAgICAgICAgICAgICAgICAgICAgLy9Pbmx5IGZvcmNlIHRoaW5ncyB0aGF0IGhhdmUg
bm90IGNvbXBsZXRlZAorICAgICAgICAgICAgICAgICAgICAvL2JlaW5nIGRlZmluZWQsIHNvIHN0
aWxsIGluIHRoZSByZWdpc3RyeSwKKyAgICAgICAgICAgICAgICAgICAgLy9hbmQgb25seSBpZiBp
dCBoYXMgbm90IGJlZW4gbWF0Y2hlZCB1cAorICAgICAgICAgICAgICAgICAgICAvL2luIHRoZSBt
b2R1bGUgYWxyZWFkeS4KKyAgICAgICAgICAgICAgICAgICAgaWYgKGRlcCAmJiAhbW9kLmRlcE1h
dGNoZWRbaV0gJiYgIXByb2Nlc3NlZFtkZXBJZF0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChnZXRPd24odHJhY2VkLCBkZXBJZCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtb2QuZGVmaW5lRGVwKGksIGRlZmluZWRbZGVwSWRdKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtb2QuY2hlY2soKTsgLy9wYXNzIGZhbHNlPworICAgICAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha0N5Y2xlKGRlcCwg
dHJhY2VkLCBwcm9jZXNzZWQpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgcHJvY2Vz
c2VkW2lkXSA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBmdW5j
dGlvbiBjaGVja0xvYWRlZCgpIHsKKyAgICAgICAgICAgIHZhciBtYXAsIG1vZElkLCBlcnIsIHVz
aW5nUGF0aEZhbGxiYWNrLAorICAgICAgICAgICAgICAgIHdhaXRJbnRlcnZhbCA9IGNvbmZpZy53
YWl0U2Vjb25kcyAqIDEwMDAsCisgICAgICAgICAgICAgICAgLy9JdCBpcyBwb3NzaWJsZSB0byBk
aXNhYmxlIHRoZSB3YWl0IGludGVydmFsIGJ5IHVzaW5nIHdhaXRTZWNvbmRzIG9mIDAuCisgICAg
ICAgICAgICAgICAgZXhwaXJlZCA9IHdhaXRJbnRlcnZhbCAmJiAoY29udGV4dC5zdGFydFRpbWUg
KyB3YWl0SW50ZXJ2YWwpIDwgbmV3IERhdGUoKS5nZXRUaW1lKCksCisgICAgICAgICAgICAgICAg
bm9Mb2FkcyA9IFtdLAorICAgICAgICAgICAgICAgIHJlcUNhbGxzID0gW10sCisgICAgICAgICAg
ICAgICAgc3RpbGxMb2FkaW5nID0gZmFsc2UsCisgICAgICAgICAgICAgICAgbmVlZEN5Y2xlQ2hl
Y2sgPSB0cnVlOworCisgICAgICAgICAgICAvL0RvIG5vdCBib3RoZXIgaWYgdGhpcyBjYWxsIHdh
cyBhIHJlc3VsdCBvZiBhIGN5Y2xlIGJyZWFrLgorICAgICAgICAgICAgaWYgKGluQ2hlY2tMb2Fk
ZWQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGluQ2hlY2tMb2FkZWQgPSB0cnVlOworCisgICAgICAgICAgICAvL0ZpZ3VyZSBvdXQgdGhl
IHN0YXRlIG9mIGFsbCB0aGUgbW9kdWxlcy4KKyAgICAgICAgICAgIGVhY2hQcm9wKHJlZ2lzdHJ5
LCBmdW5jdGlvbiAobW9kKSB7CisgICAgICAgICAgICAgICAgbWFwID0gbW9kLm1hcDsKKyAgICAg
ICAgICAgICAgICBtb2RJZCA9IG1hcC5pZDsKKworICAgICAgICAgICAgICAgIC8vU2tpcCB0aGlu
Z3MgdGhhdCBhcmUgbm90IGVuYWJsZWQgb3IgaW4gZXJyb3Igc3RhdGUuCisgICAgICAgICAgICAg
ICAgaWYgKCFtb2QuZW5hYmxlZCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKCFtYXAuaXNEZWZpbmUpIHsKKyAg
ICAgICAgICAgICAgICAgICAgcmVxQ2FsbHMucHVzaChtb2QpOworICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIGlmICghbW9kLmVycm9yKSB7CisgICAgICAgICAgICAgICAgICAg
IC8vSWYgdGhlIG1vZHVsZSBzaG91bGQgYmUgZXhlY3V0ZWQsIGFuZCBpdCBoYXMgbm90CisgICAg
ICAgICAgICAgICAgICAgIC8vYmVlbiBpbml0ZWQgYW5kIHRpbWUgaXMgdXAsIHJlbWVtYmVyIGl0
LgorICAgICAgICAgICAgICAgICAgICBpZiAoIW1vZC5pbml0ZWQgJiYgZXhwaXJlZCkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1BhdGhGYWxsYmFjayhtb2RJZCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1c2luZ1BhdGhGYWxsYmFjayA9IHRydWU7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RpbGxMb2FkaW5nID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9Mb2Fkcy5w
dXNoKG1vZElkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVTY3JpcHQobW9k
SWQpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgaWYgKCFtb2QuaW5pdGVkICYmIG1vZC5mZXRjaGVkICYmIG1hcC5pc0RlZmluZSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgc3RpbGxMb2FkaW5nID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICghbWFwLnByZWZpeCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vTm8gcmVhc29uIHRvIGtlZXAgbG9va2luZyBmb3IgdW5maW5pc2hlZAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vbG9hZGluZy4gSWYgdGhlIG9ubHkgc3RpbGxMb2FkaW5nIGlzIGEK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3BsdWdpbiByZXNvdXJjZSB0aG91Z2gsIGtl
ZXAgZ29pbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9iZWNhdXNlIGl0IG1heSBi
ZSB0aGF0IGEgcGx1Z2luIHJlc291cmNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9p
cyB3YWl0aW5nIG9uIGEgbm9uLXBsdWdpbiBjeWNsZS4KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gKG5lZWRDeWNsZUNoZWNrID0gZmFsc2UpOworICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfSk7CisKKyAgICAgICAgICAgIGlmIChleHBpcmVkICYmIG5vTG9hZHMubGVuZ3RoKSB7
CisgICAgICAgICAgICAgICAgLy9JZiB3YWl0IHRpbWUgZXhwaXJlZCwgdGhyb3cgZXJyb3Igb2Yg
dW5sb2FkZWQgbW9kdWxlcy4KKyAgICAgICAgICAgICAgICBlcnIgPSBtYWtlRXJyb3IoJ3RpbWVv
dXQnLCAnTG9hZCB0aW1lb3V0IGZvciBtb2R1bGVzOiAnICsgbm9Mb2FkcywgbnVsbCwgbm9Mb2Fk
cyk7CisgICAgICAgICAgICAgICAgZXJyLmNvbnRleHROYW1lID0gY29udGV4dC5jb250ZXh0TmFt
ZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gb25FcnJvcihlcnIpOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAvL05vdCBleHBpcmVkLCBjaGVjayBmb3IgYSBjeWNsZS4KKyAgICAgICAg
ICAgIGlmIChuZWVkQ3ljbGVDaGVjaykgeworICAgICAgICAgICAgICAgIGVhY2gocmVxQ2FsbHMs
IGZ1bmN0aW9uIChtb2QpIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWtDeWNsZShtb2QsIHt9
LCB7fSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IC8vSWYgc3RpbGwgd2FpdGluZyBvbiBsb2FkcywgYW5kIHRoZSB3YWl0aW5nIGxvYWQgaXMgc29t
ZXRoaW5nCisgICAgICAgICAgICAvL290aGVyIHRoYW4gYSBwbHVnaW4gcmVzb3VyY2UsIG9yIHRo
ZXJlIGFyZSBzdGlsbCBvdXRzdGFuZGluZworICAgICAgICAgICAgLy9zY3JpcHRzLCB0aGVuIGp1
c3QgdHJ5IGJhY2sgbGF0ZXIuCisgICAgICAgICAgICBpZiAoKCFleHBpcmVkIHx8IHVzaW5nUGF0
aEZhbGxiYWNrKSAmJiBzdGlsbExvYWRpbmcpIHsKKyAgICAgICAgICAgICAgICAvL1NvbWV0aGlu
ZyBpcyBzdGlsbCB3YWl0aW5nIHRvIGxvYWQuIFdhaXQgZm9yIGl0LCBidXQgb25seQorICAgICAg
ICAgICAgICAgIC8vaWYgYSB0aW1lb3V0IGlzIG5vdCBhbHJlYWR5IGluIGVmZmVjdC4KKyAgICAg
ICAgICAgICAgICBpZiAoKGlzQnJvd3NlciB8fCBpc1dlYldvcmtlcikgJiYgIWNoZWNrTG9hZGVk
VGltZW91dElkKSB7CisgICAgICAgICAgICAgICAgICAgIGNoZWNrTG9hZGVkVGltZW91dElkID0g
c2V0VGltZW91dChmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjaGVja0xv
YWRlZFRpbWVvdXRJZCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBjaGVja0xvYWRlZCgp
OworICAgICAgICAgICAgICAgICAgICB9LCA1MCk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpbkNoZWNrTG9hZGVkID0gZmFsc2U7CisgICAgICAgIH0K
KworICAgICAgICBNb2R1bGUgPSBmdW5jdGlvbiAobWFwKSB7CisgICAgICAgICAgICB0aGlzLmV2
ZW50cyA9IGdldE93bih1bmRlZkV2ZW50cywgbWFwLmlkKSB8fCB7fTsKKyAgICAgICAgICAgIHRo
aXMubWFwID0gbWFwOworICAgICAgICAgICAgdGhpcy5zaGltID0gZ2V0T3duKGNvbmZpZy5zaGlt
LCBtYXAuaWQpOworICAgICAgICAgICAgdGhpcy5kZXBFeHBvcnRzID0gW107CisgICAgICAgICAg
ICB0aGlzLmRlcE1hcHMgPSBbXTsKKyAgICAgICAgICAgIHRoaXMuZGVwTWF0Y2hlZCA9IFtdOwor
ICAgICAgICAgICAgdGhpcy5wbHVnaW5NYXBzID0ge307CisgICAgICAgICAgICB0aGlzLmRlcENv
dW50ID0gMDsKKworICAgICAgICAgICAgLyogdGhpcy5leHBvcnRzIHRoaXMuZmFjdG9yeQorICAg
ICAgICAgICAgICAgdGhpcy5kZXBNYXBzID0gW10sCisgICAgICAgICAgICAgICB0aGlzLmVuYWJs
ZWQsIHRoaXMuZmV0Y2hlZAorICAgICAgICAgICAgKi8KKyAgICAgICAgfTsKKworICAgICAgICBN
b2R1bGUucHJvdG90eXBlID0geworICAgICAgICAgICAgaW5pdDogZnVuY3Rpb24gKGRlcE1hcHMs
IGZhY3RvcnksIGVycmJhY2ssIG9wdGlvbnMpIHsKKyAgICAgICAgICAgICAgICBvcHRpb25zID0g
b3B0aW9ucyB8fCB7fTsKKworICAgICAgICAgICAgICAgIC8vRG8gbm90IGRvIG1vcmUgaW5pdHMg
aWYgYWxyZWFkeSBkb25lLiBDYW4gaGFwcGVuIGlmIHRoZXJlCisgICAgICAgICAgICAgICAgLy9h
cmUgbXVsdGlwbGUgZGVmaW5lIGNhbGxzIGZvciB0aGUgc2FtZSBtb2R1bGUuIFRoYXQgaXMgbm90
CisgICAgICAgICAgICAgICAgLy9hIG5vcm1hbCwgY29tbW9uIGNhc2UsIGJ1dCBpdCBpcyBhbHNv
IG5vdCB1bmV4cGVjdGVkLgorICAgICAgICAgICAgICAgIGlmICh0aGlzLmluaXRlZCkgeworICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgdGhpcy5mYWN0b3J5ID0gZmFjdG9yeTsKKworICAgICAgICAgICAgICAgIGlmIChlcnJi
YWNrKSB7CisgICAgICAgICAgICAgICAgICAgIC8vUmVnaXN0ZXIgZm9yIGVycm9ycyBvbiB0aGlz
IG1vZHVsZS4KKyAgICAgICAgICAgICAgICAgICAgdGhpcy5vbignZXJyb3InLCBlcnJiYWNrKTsK
KyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZXZlbnRzLmVycm9yKSB7CisgICAgICAg
ICAgICAgICAgICAgIC8vSWYgbm8gZXJyYmFjayBhbHJlYWR5LCBidXQgdGhlcmUgYXJlIGVycm9y
IGxpc3RlbmVycworICAgICAgICAgICAgICAgICAgICAvL29uIHRoaXMgbW9kdWxlLCBzZXQgdXAg
YW4gZXJyYmFjayB0byBwYXNzIHRvIHRoZSBkZXBzLgorICAgICAgICAgICAgICAgICAgICBlcnJi
YWNrID0gYmluZCh0aGlzLCBmdW5jdGlvbiAoZXJyKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICB0aGlzLmVtaXQoJ2Vycm9yJywgZXJyKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy9EbyBhIGNvcHkgb2YgdGhlIGRlcGVu
ZGVuY3kgYXJyYXksIHNvIHRoYXQKKyAgICAgICAgICAgICAgICAvL3NvdXJjZSBpbnB1dHMgYXJl
IG5vdCBtb2RpZmllZC4gRm9yIGV4YW1wbGUKKyAgICAgICAgICAgICAgICAvLyJzaGltIiBkZXBz
IGFyZSBwYXNzZWQgaW4gaGVyZSBkaXJlY3RseSwgYW5kCisgICAgICAgICAgICAgICAgLy9kb2lu
ZyBhIGRpcmVjdCBtb2RpZmljYXRpb24gb2YgdGhlIGRlcE1hcHMgYXJyYXkKKyAgICAgICAgICAg
ICAgICAvL3dvdWxkIGFmZmVjdCB0aGF0IGNvbmZpZy4KKyAgICAgICAgICAgICAgICB0aGlzLmRl
cE1hcHMgPSBkZXBNYXBzICYmIGRlcE1hcHMuc2xpY2UoMCk7CisKKyAgICAgICAgICAgICAgICB0
aGlzLmVycmJhY2sgPSBlcnJiYWNrOworCisgICAgICAgICAgICAgICAgLy9JbmRpY2F0ZSB0aGlz
IG1vZHVsZSBoYXMgYmUgaW5pdGlhbGl6ZWQKKyAgICAgICAgICAgICAgICB0aGlzLmluaXRlZCA9
IHRydWU7CisKKyAgICAgICAgICAgICAgICB0aGlzLmlnbm9yZSA9IG9wdGlvbnMuaWdub3JlOwor
CisgICAgICAgICAgICAgICAgLy9Db3VsZCBoYXZlIG9wdGlvbiB0byBpbml0IHRoaXMgbW9kdWxl
IGluIGVuYWJsZWQgbW9kZSwKKyAgICAgICAgICAgICAgICAvL29yIGNvdWxkIGhhdmUgYmVlbiBw
cmV2aW91c2x5IG1hcmtlZCBhcyBlbmFibGVkLiBIb3dldmVyLAorICAgICAgICAgICAgICAgIC8v
dGhlIGRlcGVuZGVuY2llcyBhcmUgbm90IGtub3duIHVudGlsIGluaXQgaXMgY2FsbGVkLiBTbwor
ICAgICAgICAgICAgICAgIC8vaWYgZW5hYmxlZCBwcmV2aW91c2x5LCBub3cgdHJpZ2dlciBkZXBl
bmRlbmNpZXMgYXMgZW5hYmxlZC4KKyAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5lbmFibGVk
IHx8IHRoaXMuZW5hYmxlZCkgeworICAgICAgICAgICAgICAgICAgICAvL0VuYWJsZSB0aGlzIG1v
ZHVsZSBhbmQgZGVwZW5kZW5jaWVzLgorICAgICAgICAgICAgICAgICAgICAvL1dpbGwgY2FsbCB0
aGlzLmNoZWNrKCkKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmFibGUoKTsKKyAgICAgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICB0aGlzLmNoZWNrKCk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgZGVmaW5lRGVwOiBm
dW5jdGlvbiAoaSwgZGVwRXhwb3J0cykgeworICAgICAgICAgICAgICAgIC8vQmVjYXVzZSBvZiBj
eWNsZXMsIGRlZmluZWQgY2FsbGJhY2sgZm9yIGEgZ2l2ZW4KKyAgICAgICAgICAgICAgICAvL2V4
cG9ydCBjYW4gYmUgY2FsbGVkIG1vcmUgdGhhbiBvbmNlLgorICAgICAgICAgICAgICAgIGlmICgh
dGhpcy5kZXBNYXRjaGVkW2ldKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVwTWF0Y2hl
ZFtpXSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVwQ291bnQgLT0gMTsKKyAg
ICAgICAgICAgICAgICAgICAgdGhpcy5kZXBFeHBvcnRzW2ldID0gZGVwRXhwb3J0czsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9LAorCisgICAgICAgICAgICBmZXRjaDogZnVuY3Rp
b24gKCkgeworICAgICAgICAgICAgICAgIGlmICh0aGlzLmZldGNoZWQpIHsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0aGlz
LmZldGNoZWQgPSB0cnVlOworCisgICAgICAgICAgICAgICAgY29udGV4dC5zdGFydFRpbWUgPSAo
bmV3IERhdGUoKSkuZ2V0VGltZSgpOworCisgICAgICAgICAgICAgICAgdmFyIG1hcCA9IHRoaXMu
bWFwOworCisgICAgICAgICAgICAgICAgLy9JZiB0aGUgbWFuYWdlciBpcyBmb3IgYSBwbHVnaW4g
bWFuYWdlZCByZXNvdXJjZSwKKyAgICAgICAgICAgICAgICAvL2FzayB0aGUgcGx1Z2luIHRvIGxv
YWQgaXQgbm93LgorICAgICAgICAgICAgICAgIGlmICh0aGlzLnNoaW0pIHsKKyAgICAgICAgICAg
ICAgICAgICAgY29udGV4dC5tYWtlUmVxdWlyZSh0aGlzLm1hcCwgeworICAgICAgICAgICAgICAg
ICAgICAgICAgZW5hYmxlQnVpbGRDYWxsYmFjazogdHJ1ZQorICAgICAgICAgICAgICAgICAgICB9
KSh0aGlzLnNoaW0uZGVwcyB8fCBbXSwgYmluZCh0aGlzLCBmdW5jdGlvbiAoKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gbWFwLnByZWZpeCA/IHRoaXMuY2FsbFBsdWdpbigpIDog
dGhpcy5sb2FkKCk7CisgICAgICAgICAgICAgICAgICAgIH0pKTsKKyAgICAgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAvL1JlZ3VsYXIgZGVwZW5kZW5jeS4KKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIG1hcC5wcmVmaXggPyB0aGlzLmNhbGxQbHVnaW4oKSA6IHRo
aXMubG9hZCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sCisKKyAgICAgICAg
ICAgIGxvYWQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICB2YXIgdXJsID0gdGhpcy5t
YXAudXJsOworCisgICAgICAgICAgICAgICAgLy9SZWd1bGFyIGRlcGVuZGVuY3kuCisgICAgICAg
ICAgICAgICAgaWYgKCF1cmxGZXRjaGVkW3VybF0pIHsKKyAgICAgICAgICAgICAgICAgICAgdXJs
RmV0Y2hlZFt1cmxdID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5sb2FkKHRo
aXMubWFwLmlkLCB1cmwpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sCisKKyAg
ICAgICAgICAgIC8qKgorICAgICAgICAgICAgICogQ2hlY2tzIGlzIHRoZSBtb2R1bGUgaXMgcmVh
ZHkgdG8gZGVmaW5lIGl0c2VsZiwgYW5kIGlmIHNvLAorICAgICAgICAgICAgICogZGVmaW5lIGl0
LgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBjaGVjazogZnVuY3Rpb24gKCkgeworICAg
ICAgICAgICAgICAgIGlmICghdGhpcy5lbmFibGVkIHx8IHRoaXMuZW5hYmxpbmcpIHsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgIHZhciBlcnIsIGNqc01vZHVsZSwKKyAgICAgICAgICAgICAgICAgICAgaWQgPSB0aGlzLm1h
cC5pZCwKKyAgICAgICAgICAgICAgICAgICAgZGVwRXhwb3J0cyA9IHRoaXMuZGVwRXhwb3J0cywK
KyAgICAgICAgICAgICAgICAgICAgZXhwb3J0cyA9IHRoaXMuZXhwb3J0cywKKyAgICAgICAgICAg
ICAgICAgICAgZmFjdG9yeSA9IHRoaXMuZmFjdG9yeTsKKworICAgICAgICAgICAgICAgIGlmICgh
dGhpcy5pbml0ZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5mZXRjaCgpOworICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5lcnJvcikgeworICAgICAgICAgICAgICAgICAgICB0
aGlzLmVtaXQoJ2Vycm9yJywgdGhpcy5lcnJvcik7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlm
ICghdGhpcy5kZWZpbmluZykgeworICAgICAgICAgICAgICAgICAgICAvL1RoZSBmYWN0b3J5IGNv
dWxkIHRyaWdnZXIgYW5vdGhlciByZXF1aXJlIGNhbGwKKyAgICAgICAgICAgICAgICAgICAgLy90
aGF0IHdvdWxkIHJlc3VsdCBpbiBjaGVja2luZyB0aGlzIG1vZHVsZSB0bworICAgICAgICAgICAg
ICAgICAgICAvL2RlZmluZSBpdHNlbGYgYWdhaW4uIElmIGFscmVhZHkgaW4gdGhlIHByb2Nlc3MK
KyAgICAgICAgICAgICAgICAgICAgLy9vZiBkb2luZyB0aGF0LCBza2lwIHRoaXMgd29yay4KKyAg
ICAgICAgICAgICAgICAgICAgdGhpcy5kZWZpbmluZyA9IHRydWU7CisKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHRoaXMuZGVwQ291bnQgPCAxICYmICF0aGlzLmRlZmluZWQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKGZhY3RvcnkpKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy9JZiB0aGVyZSBpcyBhbiBlcnJvciBsaXN0ZW5lciwgZmF2b3IgcGFz
c2luZworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vdG8gdGhhdCBpbnN0ZWFkIG9mIHRo
cm93aW5nIGFuIGVycm9yLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmV2
ZW50cy5lcnJvcikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwb3J0cyA9IGNvbnRleHQuZXhlY0Ni
KGlkLCBmYWN0b3J5LCBkZXBFeHBvcnRzLCBleHBvcnRzKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZXJyID0gZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGV4cG9ydHMgPSBjb250ZXh0LmV4ZWNDYihpZCwgZmFjdG9yeSwgZGVwRXhwb3J0cywg
ZXhwb3J0cyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHRoaXMubWFwLmlzRGVmaW5lKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vSWYgc2V0dGluZyBleHBvcnRzIHZpYSAnbW9kdWxlJyBpcyBpbiBw
bGF5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2Zhdm9yIHRoYXQgb3ZlciBy
ZXR1cm4gdmFsdWUgYW5kIGV4cG9ydHMuIEFmdGVyIHRoYXQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vZmF2b3IgYSBub24tdW5kZWZpbmVkIHJldHVybiB2YWx1ZSBvdmVyIGV4
cG9ydHMgdXNlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjanNNb2R1bGUgPSB0
aGlzLm1vZHVsZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNqc01vZHVs
ZSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNqc01vZHVsZS5l
eHBvcnRzICE9PSB1bmRlZmluZWQgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvL01ha2Ugc3VyZSBpdCBpcyBub3QgYWxyZWFkeSB0aGUgZXhwb3J0cyB2YWx1ZQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNqc01vZHVsZS5leHBvcnRz
ICE9PSB0aGlzLmV4cG9ydHMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGV4cG9ydHMgPSBjanNNb2R1bGUuZXhwb3J0czsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIGlmIChleHBvcnRzID09PSB1bmRlZmluZWQgJiYgdGhpcy51c2luZ0V4cG9y
dHMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vZXhwb3J0cyBhbHJl
YWR5IHNldCB0aGUgZGVmaW5lZCB2YWx1ZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGV4cG9ydHMgPSB0aGlzLmV4cG9ydHM7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoZXJyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGVyci5yZXF1aXJlTWFwID0gdGhpcy5tYXA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVyci5yZXF1aXJlTW9kdWxlcyA9IFt0aGlzLm1hcC5pZF07CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGVyci5yZXF1aXJlVHlwZSA9ICdkZWZpbmUnOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gb25FcnJvcigodGhpcy5lcnJvciA9IGVycikpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0p1c3QgYSBsaXRlcmFsIHZh
bHVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwb3J0cyA9IGZhY3Rvcnk7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXhw
b3J0cyA9IGV4cG9ydHM7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hcC5p
c0RlZmluZSAmJiAhdGhpcy5pZ25vcmUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
ZWZpbmVkW2lkXSA9IGV4cG9ydHM7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
cmVxLm9uUmVzb3VyY2VMb2FkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
cS5vblJlc291cmNlTG9hZChjb250ZXh0LCB0aGlzLm1hcCwgdGhpcy5kZXBNYXBzKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vQ2xlYW4gdXAKKyAgICAgICAgICAgICAgICAgICAgICAg
IGRlbGV0ZSByZWdpc3RyeVtpZF07CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVm
aW5lZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAg
ICAvL0ZpbmlzaGVkIHRoZSBkZWZpbmUgc3RhZ2UuIEFsbG93IGNhbGxpbmcgY2hlY2sgYWdhaW4K
KyAgICAgICAgICAgICAgICAgICAgLy90byBhbGxvdyBkZWZpbmUgbm90aWZpY2F0aW9ucyBiZWxv
dyBpbiB0aGUgY2FzZSBvZiBhCisgICAgICAgICAgICAgICAgICAgIC8vY3ljbGUuCisgICAgICAg
ICAgICAgICAgICAgIHRoaXMuZGVmaW5pbmcgPSBmYWxzZTsKKworICAgICAgICAgICAgICAgICAg
ICBpZiAodGhpcy5kZWZpbmVkICYmICF0aGlzLmRlZmluZUVtaXR0ZWQpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHRoaXMuZGVmaW5lRW1pdHRlZCA9IHRydWU7CisgICAgICAgICAgICAgICAg
ICAgICAgICB0aGlzLmVtaXQoJ2RlZmluZWQnLCB0aGlzLmV4cG9ydHMpOworICAgICAgICAgICAg
ICAgICAgICAgICAgdGhpcy5kZWZpbmVFbWl0Q29tcGxldGUgPSB0cnVlOworICAgICAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LAorCisgICAgICAg
ICAgICBjYWxsUGx1Z2luOiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgdmFyIG1hcCA9
IHRoaXMubWFwLAorICAgICAgICAgICAgICAgICAgICBpZCA9IG1hcC5pZCwKKyAgICAgICAgICAg
ICAgICAgICAgLy9NYXAgYWxyZWFkeSBub3JtYWxpemVkIHRoZSBwcmVmaXguCisgICAgICAgICAg
ICAgICAgICAgIHBsdWdpbk1hcCA9IG1ha2VNb2R1bGVNYXAobWFwLnByZWZpeCk7CisKKyAgICAg
ICAgICAgICAgICAvL01hcmsgdGhpcyBhcyBhIGRlcGVuZGVuY3kgZm9yIHRoaXMgcGx1Z2luLCBz
byBpdAorICAgICAgICAgICAgICAgIC8vY2FuIGJlIHRyYWNlZCBmb3IgY3ljbGVzLgorICAgICAg
ICAgICAgICAgIHRoaXMuZGVwTWFwcy5wdXNoKHBsdWdpbk1hcCk7CisKKyAgICAgICAgICAgICAg
ICBvbihwbHVnaW5NYXAsICdkZWZpbmVkJywgYmluZCh0aGlzLCBmdW5jdGlvbiAocGx1Z2luKSB7
CisgICAgICAgICAgICAgICAgICAgIHZhciBsb2FkLCBub3JtYWxpemVkTWFwLCBub3JtYWxpemVk
TW9kLAorICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IHRoaXMubWFwLm5hbWUsCisgICAg
ICAgICAgICAgICAgICAgICAgICBwYXJlbnROYW1lID0gdGhpcy5tYXAucGFyZW50TWFwID8gdGhp
cy5tYXAucGFyZW50TWFwLm5hbWUgOiBudWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgbG9j
YWxSZXF1aXJlID0gY29udGV4dC5tYWtlUmVxdWlyZShtYXAucGFyZW50TWFwLCB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZW5hYmxlQnVpbGRDYWxsYmFjazogdHJ1ZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBza2lwTWFwOiB0cnVlCisgICAgICAgICAgICAgICAgICAgICAg
ICB9KTsKKworICAgICAgICAgICAgICAgICAgICAvL0lmIGN1cnJlbnQgbWFwIGlzIG5vdCBub3Jt
YWxpemVkLCB3YWl0IGZvciB0aGF0CisgICAgICAgICAgICAgICAgICAgIC8vbm9ybWFsaXplZCBu
YW1lIHRvIGxvYWQgaW5zdGVhZCBvZiBjb250aW51aW5nLgorICAgICAgICAgICAgICAgICAgICBp
ZiAodGhpcy5tYXAudW5ub3JtYWxpemVkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvL05v
cm1hbGl6ZSB0aGUgSUQgaWYgdGhlIHBsdWdpbiBhbGxvd3MgaXQuCisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAocGx1Z2luLm5vcm1hbGl6ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5hbWUgPSBwbHVnaW4ubm9ybWFsaXplKG5hbWUsIGZ1bmN0aW9uIChuYW1lKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBub3JtYWxpemUobmFtZSwgcGFyZW50
TmFtZSwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkgfHwgJyc7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vcHJlZml4
IGFuZCBuYW1lIHNob3VsZCBhbHJlYWR5IGJlIG5vcm1hbGl6ZWQsIG5vIG5lZWQKKyAgICAgICAg
ICAgICAgICAgICAgICAgIC8vZm9yIGFwcGx5aW5nIG1hcCBjb25maWcgYWdhaW4gZWl0aGVyLgor
ICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZE1hcCA9IG1ha2VNb2R1bGVNYXAobWFw
LnByZWZpeCArICchJyArIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0aGlzLm1hcC5wYXJlbnRNYXApOworICAgICAgICAgICAgICAg
ICAgICAgICAgb24obm9ybWFsaXplZE1hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAn
ZGVmaW5lZCcsIGJpbmQodGhpcywgZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRoaXMuaW5pdChbXSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gdmFsdWU7
IH0sIG51bGwsIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZWQ6
IHRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmU6IHRydWUK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfSkpOworCisgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkTW9kID0g
Z2V0T3duKHJlZ2lzdHJ5LCBub3JtYWxpemVkTWFwLmlkKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChub3JtYWxpemVkTW9kKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9N
YXJrIHRoaXMgYXMgYSBkZXBlbmRlbmN5IGZvciB0aGlzIHBsdWdpbiwgc28gaXQKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvL2NhbiBiZSB0cmFjZWQgZm9yIGN5Y2xlcy4KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0aGlzLmRlcE1hcHMucHVzaChub3JtYWxpemVkTWFwKTsKKwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmV2ZW50cy5lcnJvcikgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkTW9kLm9uKCdlcnJvcicsIGJp
bmQodGhpcywgZnVuY3Rpb24gKGVycikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIGVycik7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbm9ybWFsaXplZE1vZC5lbmFibGUoKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgbG9hZCA9IGJpbmQodGhpcywgZnVuY3Rp
b24gKHZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluaXQoW10sIGZ1bmN0
aW9uICgpIHsgcmV0dXJuIHZhbHVlOyB9LCBudWxsLCB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZW5hYmxlZDogdHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAgICAgICAgIGxvYWQuZXJyb3IgPSBiaW5k
KHRoaXMsIGZ1bmN0aW9uIChlcnIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5p
dGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBlcnI7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBlcnIucmVxdWlyZU1vZHVsZXMgPSBbaWRdOworCisgICAg
ICAgICAgICAgICAgICAgICAgICAvL1JlbW92ZSB0ZW1wIHVubm9ybWFsaXplZCBtb2R1bGVzIGZv
ciB0aGlzIG1vZHVsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vc2luY2UgdGhleSB3aWxs
IG5ldmVyIGJlIHJlc29sdmVkIG90aGVyd2lzZSBub3cuCisgICAgICAgICAgICAgICAgICAgICAg
ICBlYWNoUHJvcChyZWdpc3RyeSwgZnVuY3Rpb24gKG1vZCkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChtb2QubWFwLmlkLmluZGV4T2YoaWQgKyAnX3Vubm9ybWFsaXplZCcpID09
PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFuUmVnaXN0cnkobW9k
Lm1hcC5pZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIG9uRXJyb3IoZXJyKTsKKyAg
ICAgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAgICAgICAgLy9BbGxvdyBwbHVn
aW5zIHRvIGxvYWQgb3RoZXIgY29kZSB3aXRob3V0IGhhdmluZyB0byBrbm93IHRoZQorICAgICAg
ICAgICAgICAgICAgICAvL2NvbnRleHQgb3IgaG93IHRvICdjb21wbGV0ZScgdGhlIGxvYWQuCisg
ICAgICAgICAgICAgICAgICAgIGxvYWQuZnJvbVRleHQgPSBiaW5kKHRoaXMsIGZ1bmN0aW9uICh0
ZXh0LCB0ZXh0QWx0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvKmpzbGludCBldmlsOiB0
cnVlICovCisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbW9kdWxlTmFtZSA9IG1hcC5uYW1l
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZU1hcCA9IG1ha2VNb2R1bGVNYXAo
bW9kdWxlTmFtZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzSW50ZXJhY3RpdmUg
PSB1c2VJbnRlcmFjdGl2ZTsKKworICAgICAgICAgICAgICAgICAgICAgICAgLy9BcyBvZiAyLjEu
MCwgc3VwcG9ydCBqdXN0IHBhc3NpbmcgdGhlIHRleHQsIHRvIHJlaW5mb3JjZQorICAgICAgICAg
ICAgICAgICAgICAgICAgLy9mcm9tVGV4dCBvbmx5IGJlaW5nIGNhbGxlZCBvbmNlIHBlciByZXNv
dXJjZS4gU3RpbGwKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vc3VwcG9ydCBvbGQgc3R5bGUg
b2YgcGFzc2luZyBtb2R1bGVOYW1lIGJ1dCBkaXNjYXJkCisgICAgICAgICAgICAgICAgICAgICAg
ICAvL3RoYXQgbW9kdWxlTmFtZSBpbiBmYXZvciBvZiB0aGUgaW50ZXJuYWwgcmVmLgorICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHRleHRBbHQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0ZXh0ID0gdGV4dEFsdDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgICAgICAgICAgLy9UdXJuIG9mZiBpbnRlcmFjdGl2ZSBzY3JpcHQgbWF0Y2hpbmcg
Zm9yIElFIGZvciBhbnkgZGVmaW5lCisgICAgICAgICAgICAgICAgICAgICAgICAvL2NhbGxzIGlu
IHRoZSB0ZXh0LCB0aGVuIHR1cm4gaXQgYmFjayBvbiBhdCB0aGUgZW5kLgorICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGhhc0ludGVyYWN0aXZlKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdXNlSW50ZXJhY3RpdmUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgICAgICAgICAgLy9QcmltZSB0aGUgc3lzdGVtIGJ5IGNyZWF0aW5n
IGEgbW9kdWxlIGluc3RhbmNlIGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgLy9pdC4KKyAg
ICAgICAgICAgICAgICAgICAgICAgIGdldE1vZHVsZShtb2R1bGVNYXApOworCisgICAgICAgICAg
ICAgICAgICAgICAgICAvL1RyYW5zZmVyIGFueSBjb25maWcgdG8gdGhpcyBvdGhlciBtb2R1bGUu
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzUHJvcChjb25maWcuY29uZmlnLCBpZCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcuY29uZmlnW21vZHVsZU5hbWVd
ID0gY29uZmlnLmNvbmZpZ1tpZF07CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVx
LmV4ZWModGV4dCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdmcm9tVGV4dCBldmFsIGZv
ciAnICsgbW9kdWxlTmFtZSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICcgZmFpbGVkOiAnICsgZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNJbnRlcmFjdGl2ZSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVzZUludGVyYWN0aXZlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgLy9NYXJrIHRoaXMgYXMgYSBkZXBl
bmRlbmN5IGZvciB0aGUgcGx1Z2luCisgICAgICAgICAgICAgICAgICAgICAgICAvL3Jlc291cmNl
CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlcE1hcHMucHVzaChtb2R1bGVNYXApOwor
CisgICAgICAgICAgICAgICAgICAgICAgICAvL1N1cHBvcnQgYW5vbnltb3VzIG1vZHVsZXMuCisg
ICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmNvbXBsZXRlTG9hZChtb2R1bGVOYW1lKTsK
KworICAgICAgICAgICAgICAgICAgICAgICAgLy9CaW5kIHRoZSB2YWx1ZSBvZiB0aGF0IG1vZHVs
ZSB0byB0aGUgdmFsdWUgZm9yIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vcmVzb3Vy
Y2UgSUQuCisgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbFJlcXVpcmUoW21vZHVsZU5hbWVd
LCBsb2FkKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAgICAgICAg
Ly9Vc2UgcGFyZW50TmFtZSBoZXJlIHNpbmNlIHRoZSBwbHVnaW4ncyBuYW1lIGlzIG5vdCByZWxp
YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgLy9jb3VsZCBiZSBzb21lIHdlaXJkIHN0cmluZyB3
aXRoIG5vIHBhdGggdGhhdCBhY3R1YWxseSB3YW50cyB0bworICAgICAgICAgICAgICAgICAgICAv
L3JlZmVyZW5jZSB0aGUgcGFyZW50TmFtZSdzIHBhdGguCisgICAgICAgICAgICAgICAgICAgIHBs
dWdpbi5sb2FkKG1hcC5uYW1lLCBsb2NhbFJlcXVpcmUsIGxvYWQsIGNvbmZpZyk7CisgICAgICAg
ICAgICAgICAgfSkpOworCisgICAgICAgICAgICAgICAgY29udGV4dC5lbmFibGUocGx1Z2luTWFw
LCB0aGlzKTsKKyAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbk1hcHNbcGx1Z2luTWFwLmlkXSA9
IHBsdWdpbk1hcDsKKyAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgIGVuYWJsZTogZnVuY3Rp
b24gKCkgeworICAgICAgICAgICAgICAgIHRoaXMuZW5hYmxlZCA9IHRydWU7CisKKyAgICAgICAg
ICAgICAgICAvL1NldCBmbGFnIG1lbnRpb25pbmcgdGhhdCB0aGUgbW9kdWxlIGlzIGVuYWJsaW5n
LAorICAgICAgICAgICAgICAgIC8vc28gdGhhdCBpbW1lZGlhdGUgY2FsbHMgdG8gdGhlIGRlZmlu
ZWQgY2FsbGJhY2tzCisgICAgICAgICAgICAgICAgLy9mb3IgZGVwZW5kZW5jaWVzIGRvIG5vdCB0
cmlnZ2VyIGluYWR2ZXJ0ZW50IGxvYWQKKyAgICAgICAgICAgICAgICAvL3dpdGggdGhlIGRlcENv
dW50IHN0aWxsIGJlaW5nIHplcm8uCisgICAgICAgICAgICAgICAgdGhpcy5lbmFibGluZyA9IHRy
dWU7CisKKyAgICAgICAgICAgICAgICAvL0VuYWJsZSBlYWNoIGRlcGVuZGVuY3kKKyAgICAgICAg
ICAgICAgICBlYWNoKHRoaXMuZGVwTWFwcywgYmluZCh0aGlzLCBmdW5jdGlvbiAoZGVwTWFwLCBp
KSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBpZCwgbW9kLCBoYW5kbGVyOworCisgICAgICAg
ICAgICAgICAgICAgIGlmICh0eXBlb2YgZGVwTWFwID09PSAnc3RyaW5nJykgeworICAgICAgICAg
ICAgICAgICAgICAgICAgLy9EZXBlbmRlbmN5IG5lZWRzIHRvIGJlIGNvbnZlcnRlZCB0byBhIGRl
cE1hcAorICAgICAgICAgICAgICAgICAgICAgICAgLy9hbmQgd2lyZWQgdXAgdG8gdGhpcyBtb2R1
bGUuCisgICAgICAgICAgICAgICAgICAgICAgICBkZXBNYXAgPSBtYWtlTW9kdWxlTWFwKGRlcE1h
cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMu
bWFwLmlzRGVmaW5lID8gdGhpcy5tYXAgOiB0aGlzLm1hcC5wYXJlbnRNYXApLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIXRoaXMuc2tpcE1hcCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICB0aGlzLmRlcE1hcHNbaV0gPSBkZXBNYXA7CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGhhbmRsZXIgPSBnZXRPd24oaGFuZGxlcnMsIGRlcE1hcC5pZCk7CisK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYW5kbGVyKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGhpcy5kZXBFeHBvcnRzW2ldID0gaGFuZGxlcih0aGlzKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVwQ291bnQgKz0gMTsKKworICAgICAgICAg
ICAgICAgICAgICAgICAgb24oZGVwTWFwLCAnZGVmaW5lZCcsIGJpbmQodGhpcywgZnVuY3Rpb24g
KGRlcEV4cG9ydHMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlZmluZURl
cChpLCBkZXBFeHBvcnRzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoZWNr
KCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9KSk7CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICh0aGlzLmVycmJhY2spIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbihk
ZXBNYXAsICdlcnJvcicsIHRoaXMuZXJyYmFjayk7CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZCA9IGRlcE1h
cC5pZDsKKyAgICAgICAgICAgICAgICAgICAgbW9kID0gcmVnaXN0cnlbaWRdOworCisgICAgICAg
ICAgICAgICAgICAgIC8vU2tpcCBzcGVjaWFsIG1vZHVsZXMgbGlrZSAncmVxdWlyZScsICdleHBv
cnRzJywgJ21vZHVsZScKKyAgICAgICAgICAgICAgICAgICAgLy9BbHNvLCBkb24ndCBjYWxsIGVu
YWJsZSBpZiBpdCBpcyBhbHJlYWR5IGVuYWJsZWQsCisgICAgICAgICAgICAgICAgICAgIC8vaW1w
b3J0YW50IGluIGNpcmN1bGFyIGRlcGVuZGVuY3kgY2FzZXMuCisgICAgICAgICAgICAgICAgICAg
IGlmICghaGFzUHJvcChoYW5kbGVycywgaWQpICYmIG1vZCAmJiAhbW9kLmVuYWJsZWQpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZW5hYmxlKGRlcE1hcCwgdGhpcyk7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9KSk7CisKKyAgICAgICAgICAgICAg
ICAvL0VuYWJsZSBlYWNoIHBsdWdpbiB0aGF0IGlzIHVzZWQgaW4KKyAgICAgICAgICAgICAgICAv
L2EgZGVwZW5kZW5jeQorICAgICAgICAgICAgICAgIGVhY2hQcm9wKHRoaXMucGx1Z2luTWFwcywg
YmluZCh0aGlzLCBmdW5jdGlvbiAocGx1Z2luTWFwKSB7CisgICAgICAgICAgICAgICAgICAgIHZh
ciBtb2QgPSBnZXRPd24ocmVnaXN0cnksIHBsdWdpbk1hcC5pZCk7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChtb2QgJiYgIW1vZC5lbmFibGVkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBj
b250ZXh0LmVuYWJsZShwbHVnaW5NYXAsIHRoaXMpOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfSkpOworCisgICAgICAgICAgICAgICAgdGhpcy5lbmFibGluZyA9IGZh
bHNlOworCisgICAgICAgICAgICAgICAgdGhpcy5jaGVjaygpOworICAgICAgICAgICAgfSwKKwor
ICAgICAgICAgICAgb246IGZ1bmN0aW9uIChuYW1lLCBjYikgeworICAgICAgICAgICAgICAgIHZh
ciBjYnMgPSB0aGlzLmV2ZW50c1tuYW1lXTsKKyAgICAgICAgICAgICAgICBpZiAoIWNicykgewor
ICAgICAgICAgICAgICAgICAgICBjYnMgPSB0aGlzLmV2ZW50c1tuYW1lXSA9IFtdOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjYnMucHVzaChjYik7CisgICAgICAgICAgICB9
LAorCisgICAgICAgICAgICBlbWl0OiBmdW5jdGlvbiAobmFtZSwgZXZ0KSB7CisgICAgICAgICAg
ICAgICAgZWFjaCh0aGlzLmV2ZW50c1tuYW1lXSwgZnVuY3Rpb24gKGNiKSB7CisgICAgICAgICAg
ICAgICAgICAgIGNiKGV2dCk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAg
aWYgKG5hbWUgPT09ICdlcnJvcicpIHsKKyAgICAgICAgICAgICAgICAgICAgLy9Ob3cgdGhhdCB0
aGUgZXJyb3IgaGFuZGxlciB3YXMgdHJpZ2dlcmVkLCByZW1vdmUKKyAgICAgICAgICAgICAgICAg
ICAgLy90aGUgbGlzdGVuZXJzLCBzaW5jZSB0aGlzIGJyb2tlbiBNb2R1bGUgaW5zdGFuY2UKKyAg
ICAgICAgICAgICAgICAgICAgLy9jYW4gc3RheSBhcm91bmQgZm9yIGEgd2hpbGUgaW4gdGhlIHJl
Z2lzdHJ5LgorICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5ldmVudHNbbmFtZV07Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIGZ1
bmN0aW9uIGNhbGxHZXRNb2R1bGUoYXJncykgeworICAgICAgICAgICAgLy9Ta2lwIG1vZHVsZXMg
YWxyZWFkeSBkZWZpbmVkLgorICAgICAgICAgICAgaWYgKCFoYXNQcm9wKGRlZmluZWQsIGFyZ3Nb
MF0pKSB7CisgICAgICAgICAgICAgICAgZ2V0TW9kdWxlKG1ha2VNb2R1bGVNYXAoYXJnc1swXSwg
bnVsbCwgdHJ1ZSkpLmluaXQoYXJnc1sxXSwgYXJnc1syXSk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICAgICBmdW5jdGlvbiByZW1vdmVMaXN0ZW5lcihub2RlLCBmdW5jLCBuYW1l
LCBpZU5hbWUpIHsKKyAgICAgICAgICAgIC8vRmF2b3IgZGV0YWNoRXZlbnQgYmVjYXVzZSBvZiBJ
RTkKKyAgICAgICAgICAgIC8vaXNzdWUsIHNlZSBhdHRhY2hFdmVudC9hZGRFdmVudExpc3RlbmVy
IGNvbW1lbnQgZWxzZXdoZXJlCisgICAgICAgICAgICAvL2luIHRoaXMgZmlsZS4KKyAgICAgICAg
ICAgIGlmIChub2RlLmRldGFjaEV2ZW50ICYmICFpc09wZXJhKSB7CisgICAgICAgICAgICAgICAg
Ly9Qcm9iYWJseSBJRS4gSWYgbm90IGl0IHdpbGwgdGhyb3cgYW4gZXJyb3IsIHdoaWNoIHdpbGwg
YmUKKyAgICAgICAgICAgICAgICAvL3VzZWZ1bCB0byBrbm93LgorICAgICAgICAgICAgICAgIGlm
IChpZU5hbWUpIHsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS5kZXRhY2hFdmVudChpZU5hbWUs
IGZ1bmMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgbm9kZS5yZW1vdmVFdmVudExpc3RlbmVyKG5hbWUsIGZ1bmMsIGZhbHNlKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBHaXZlbiBh
biBldmVudCBmcm9tIGEgc2NyaXB0IG5vZGUsIGdldCB0aGUgcmVxdWlyZWpzIGluZm8gZnJvbSBp
dCwKKyAgICAgICAgICogYW5kIHRoZW4gcmVtb3ZlcyB0aGUgZXZlbnQgbGlzdGVuZXJzIG9uIHRo
ZSBub2RlLgorICAgICAgICAgKiBAcGFyYW0ge0V2ZW50fSBldnQKKyAgICAgICAgICogQHJldHVy
bnMge09iamVjdH0KKyAgICAgICAgICovCisgICAgICAgIGZ1bmN0aW9uIGdldFNjcmlwdERhdGEo
ZXZ0KSB7CisgICAgICAgICAgICAvL1VzaW5nIGN1cnJlbnRUYXJnZXQgaW5zdGVhZCBvZiB0YXJn
ZXQgZm9yIEZpcmVmb3ggMi4wJ3Mgc2FrZS4gTm90CisgICAgICAgICAgICAvL2FsbCBvbGQgYnJv
d3NlcnMgd2lsbCBiZSBzdXBwb3J0ZWQsIGJ1dCB0aGlzIG9uZSB3YXMgZWFzeSBlbm91Z2gKKyAg
ICAgICAgICAgIC8vdG8gc3VwcG9ydCBhbmQgc3RpbGwgbWFrZXMgc2Vuc2UuCisgICAgICAgICAg
ICB2YXIgbm9kZSA9IGV2dC5jdXJyZW50VGFyZ2V0IHx8IGV2dC5zcmNFbGVtZW50OworCisgICAg
ICAgICAgICAvL1JlbW92ZSB0aGUgbGlzdGVuZXJzIG9uY2UgaGVyZS4KKyAgICAgICAgICAgIHJl
bW92ZUxpc3RlbmVyKG5vZGUsIGNvbnRleHQub25TY3JpcHRMb2FkLCAnbG9hZCcsICdvbnJlYWR5
c3RhdGVjaGFuZ2UnKTsKKyAgICAgICAgICAgIHJlbW92ZUxpc3RlbmVyKG5vZGUsIGNvbnRleHQu
b25TY3JpcHRFcnJvciwgJ2Vycm9yJyk7CisKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAg
ICAgICAgICAgbm9kZTogbm9kZSwKKyAgICAgICAgICAgICAgICBpZDogbm9kZSAmJiBub2RlLmdl
dEF0dHJpYnV0ZSgnZGF0YS1yZXF1aXJlbW9kdWxlJykKKyAgICAgICAgICAgIH07CisgICAgICAg
IH0KKworICAgICAgICBmdW5jdGlvbiBpbnRha2VEZWZpbmVzKCkgeworICAgICAgICAgICAgdmFy
IGFyZ3M7CisKKyAgICAgICAgICAgIC8vQW55IGRlZmluZWQgbW9kdWxlcyBpbiB0aGUgZ2xvYmFs
IHF1ZXVlLCBpbnRha2UgdGhlbSBub3cuCisgICAgICAgICAgICB0YWtlR2xvYmFsUXVldWUoKTsK
KworICAgICAgICAgICAgLy9NYWtlIHN1cmUgYW55IHJlbWFpbmluZyBkZWZRdWV1ZSBpdGVtcyBn
ZXQgcHJvcGVybHkgcHJvY2Vzc2VkLgorICAgICAgICAgICAgd2hpbGUgKGRlZlF1ZXVlLmxlbmd0
aCkgeworICAgICAgICAgICAgICAgIGFyZ3MgPSBkZWZRdWV1ZS5zaGlmdCgpOworICAgICAgICAg
ICAgICAgIGlmIChhcmdzWzBdID09PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBvbkVycm9yKG1ha2VFcnJvcignbWlzbWF0Y2gnLCAnTWlzbWF0Y2hlZCBhbm9ueW1vdXMgZGVm
aW5lKCkgbW9kdWxlOiAnICsgYXJnc1thcmdzLmxlbmd0aCAtIDFdKSk7CisgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy9hcmdzIGFyZSBpZCwgZGVwcywgZmFj
dG9yeS4gU2hvdWxkIGJlIG5vcm1hbGl6ZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgIC8v
ZGVmaW5lKCkgZnVuY3Rpb24uCisgICAgICAgICAgICAgICAgICAgIGNhbGxHZXRNb2R1bGUoYXJn
cyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgY29udGV4dCA9IHsKKyAgICAgICAgICAgIGNvbmZpZzogY29uZmlnLAorICAgICAgICAgICAg
Y29udGV4dE5hbWU6IGNvbnRleHROYW1lLAorICAgICAgICAgICAgcmVnaXN0cnk6IHJlZ2lzdHJ5
LAorICAgICAgICAgICAgZGVmaW5lZDogZGVmaW5lZCwKKyAgICAgICAgICAgIHVybEZldGNoZWQ6
IHVybEZldGNoZWQsCisgICAgICAgICAgICBkZWZRdWV1ZTogZGVmUXVldWUsCisgICAgICAgICAg
ICBNb2R1bGU6IE1vZHVsZSwKKyAgICAgICAgICAgIG1ha2VNb2R1bGVNYXA6IG1ha2VNb2R1bGVN
YXAsCisgICAgICAgICAgICBuZXh0VGljazogcmVxLm5leHRUaWNrLAorCisgICAgICAgICAgICAv
KioKKyAgICAgICAgICAgICAqIFNldCBhIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBjb250ZXh0Lgor
ICAgICAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGNmZyBjb25maWcgb2JqZWN0IHRvIGludGVn
cmF0ZS4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgY29uZmlndXJlOiBmdW5jdGlvbiAo
Y2ZnKSB7CisgICAgICAgICAgICAgICAgLy9NYWtlIHN1cmUgdGhlIGJhc2VVcmwgZW5kcyBpbiBh
IHNsYXNoLgorICAgICAgICAgICAgICAgIGlmIChjZmcuYmFzZVVybCkgeworICAgICAgICAgICAg
ICAgICAgICBpZiAoY2ZnLmJhc2VVcmwuY2hhckF0KGNmZy5iYXNlVXJsLmxlbmd0aCAtIDEpICE9
PSAnLycpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNmZy5iYXNlVXJsICs9ICcvJzsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
IC8vU2F2ZSBvZmYgdGhlIHBhdGhzIGFuZCBwYWNrYWdlcyBzaW5jZSB0aGV5IHJlcXVpcmUgc3Bl
Y2lhbCBwcm9jZXNzaW5nLAorICAgICAgICAgICAgICAgIC8vdGhleSBhcmUgYWRkaXRpdmUuCisg
ICAgICAgICAgICAgICAgdmFyIHBrZ3MgPSBjb25maWcucGtncywKKyAgICAgICAgICAgICAgICAg
ICAgc2hpbSA9IGNvbmZpZy5zaGltLAorICAgICAgICAgICAgICAgICAgICBvYmpzID0geworICAg
ICAgICAgICAgICAgICAgICAgICAgcGF0aHM6IHRydWUsCisgICAgICAgICAgICAgICAgICAgICAg
ICBjb25maWc6IHRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICBtYXA6IHRydWUKKyAgICAg
ICAgICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgIGVhY2hQcm9wKGNmZywgZnVuY3Rp
b24gKHZhbHVlLCBwcm9wKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChvYmpzW3Byb3BdKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcCA9PT0gJ21hcCcpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtaXhpbihjb25maWdbcHJvcF0sIHZhbHVlLCB0cnVlLCB0cnVl
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbWl4aW4oY29uZmlnW3Byb3BdLCB2YWx1ZSwgdHJ1ZSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBjb25maWdbcHJvcF0gPSB2YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAgICAgLy9NZXJnZSBzaGltCisgICAg
ICAgICAgICAgICAgaWYgKGNmZy5zaGltKSB7CisgICAgICAgICAgICAgICAgICAgIGVhY2hQcm9w
KGNmZy5zaGltLCBmdW5jdGlvbiAodmFsdWUsIGlkKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAvL05vcm1hbGl6ZSB0aGUgc3RydWN0dXJlCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
aXNBcnJheSh2YWx1ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwczogdmFsdWUKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCh2YWx1ZS5leHBvcnRzIHx8IHZhbHVlLmluaXQpICYmICF2YWx1
ZS5leHBvcnRzRm4pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS5leHBvcnRz
Rm4gPSBjb250ZXh0Lm1ha2VTaGltRXhwb3J0cyh2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBzaGltW2lkXSA9IHZhbHVlOworICAgICAg
ICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgY29uZmlnLnNoaW0gPSBzaGlt
OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vQWRqdXN0IHBhY2thZ2Vz
IGlmIG5lY2Vzc2FyeS4KKyAgICAgICAgICAgICAgICBpZiAoY2ZnLnBhY2thZ2VzKSB7CisgICAg
ICAgICAgICAgICAgICAgIGVhY2goY2ZnLnBhY2thZ2VzLCBmdW5jdGlvbiAocGtnT2JqKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB2YXIgbG9jYXRpb247CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHBrZ09iaiA9IHR5cGVvZiBwa2dPYmogPT09ICdzdHJpbmcnID8geyBuYW1lOiBwa2dP
YmogfSA6IHBrZ09iajsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uID0gcGtnT2Jq
LmxvY2F0aW9uOworCisgICAgICAgICAgICAgICAgICAgICAgICAvL0NyZWF0ZSBhIGJyYW5kIG5l
dyBvYmplY3Qgb24gcGtncywgc2luY2UgY3VycmVudFBhY2thZ2VzIGNhbgorICAgICAgICAgICAg
ICAgICAgICAgICAgLy9iZSBwYXNzZWQgaW4gYWdhaW4sIGFuZCBjb25maWcucGtncyBpcyB0aGUg
aW50ZXJuYWwgdHJhbnNmb3JtZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vc3RhdGUgZm9y
IGFsbCBwYWNrYWdlIGNvbmZpZ3MuCisgICAgICAgICAgICAgICAgICAgICAgICBwa2dzW3BrZ09i
ai5uYW1lXSA9IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBwa2dPYmoubmFt
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbjogbG9jYXRpb24gfHwgcGtn
T2JqLm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9SZW1vdmUgbGVhZGluZyBk
b3QgaW4gbWFpbiwgc28gbWFpbiBwYXRocyBhcmUgbm9ybWFsaXplZCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvL2FuZCByZW1vdmUgYW55IHRyYWlsaW5nIC5qcywgc2luY2UgZGlmZmVy
ZW50IHBhY2thZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2VudnMgaGF2ZSBkaWZm
ZXJlbnQgY29udmVudGlvbnM6IHNvbWUgdXNlIGEgbW9kdWxlIG5hbWUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy9zb21lIHVzZSBhIGZpbGUgbmFtZS4KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtYWluOiAocGtnT2JqLm1haW4gfHwgJ21haW4nKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKGN1cnJEaXJSZWdFeHAsICcnKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKGpzU3VmZml4UmVnRXhwLCAnJykKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgIH0pOworCisgICAg
ICAgICAgICAgICAgICAgIC8vRG9uZSB3aXRoIG1vZGlmaWNhdGlvbnMsIGFzc2luZyBwYWNrYWdl
cyBiYWNrIHRvIGNvbnRleHQgY29uZmlnCisgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5wa2dz
ID0gcGtnczsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvL0lmIHRoZXJl
IGFyZSBhbnkgIndhaXRpbmcgdG8gZXhlY3V0ZSIgbW9kdWxlcyBpbiB0aGUgcmVnaXN0cnksCisg
ICAgICAgICAgICAgICAgLy91cGRhdGUgdGhlIG1hcHMgZm9yIHRoZW0sIHNpbmNlIHRoZWlyIGlu
Zm8sIGxpa2UgVVJMcyB0byBsb2FkLAorICAgICAgICAgICAgICAgIC8vbWF5IGhhdmUgY2hhbmdl
ZC4KKyAgICAgICAgICAgICAgICBlYWNoUHJvcChyZWdpc3RyeSwgZnVuY3Rpb24gKG1vZCwgaWQp
IHsKKyAgICAgICAgICAgICAgICAgICAgLy9JZiBtb2R1bGUgYWxyZWFkeSBoYXMgaW5pdCBjYWxs
ZWQsIHNpbmNlIGl0IGlzIHRvbworICAgICAgICAgICAgICAgICAgICAvL2xhdGUgdG8gbW9kaWZ5
IHRoZW0sIGFuZCBpZ25vcmUgdW5ub3JtYWxpemVkIG9uZXMKKyAgICAgICAgICAgICAgICAgICAg
Ly9zaW5jZSB0aGV5IGFyZSB0cmFuc2llbnQuCisgICAgICAgICAgICAgICAgICAgIGlmICghbW9k
LmluaXRlZCAmJiAhbW9kLm1hcC51bm5vcm1hbGl6ZWQpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG1vZC5tYXAgPSBtYWtlTW9kdWxlTWFwKGlkKTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAgICAgLy9JZiBhIGRlcHMgYXJyYXkg
b3IgYSBjb25maWcgY2FsbGJhY2sgaXMgc3BlY2lmaWVkLCB0aGVuIGNhbGwKKyAgICAgICAgICAg
ICAgICAvL3JlcXVpcmUgd2l0aCB0aG9zZSBhcmdzLiBUaGlzIGlzIHVzZWZ1bCB3aGVuIHJlcXVp
cmUgaXMgZGVmaW5lZCBhcyBhCisgICAgICAgICAgICAgICAgLy9jb25maWcgb2JqZWN0IGJlZm9y
ZSByZXF1aXJlLmpzIGlzIGxvYWRlZC4KKyAgICAgICAgICAgICAgICBpZiAoY2ZnLmRlcHMgfHwg
Y2ZnLmNhbGxiYWNrKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVxdWlyZShjZmcu
ZGVwcyB8fCBbXSwgY2ZnLmNhbGxiYWNrKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9LAorCisgICAgICAgICAgICBtYWtlU2hpbUV4cG9ydHM6IGZ1bmN0aW9uICh2YWx1ZSkgewor
ICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGZuKCkgeworICAgICAgICAgICAgICAgICAgICB2YXIg
cmV0OworICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUuaW5pdCkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0ID0gdmFsdWUuaW5pdC5hcHBseShnbG9iYWwsIGFyZ3VtZW50cyk7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldCB8fCAo
dmFsdWUuZXhwb3J0cyAmJiBnZXRHbG9iYWwodmFsdWUuZXhwb3J0cykpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gZm47CisgICAgICAgICAgICB9LAorCisgICAg
ICAgICAgICBtYWtlUmVxdWlyZTogZnVuY3Rpb24gKHJlbE1hcCwgb3B0aW9ucykgeworICAgICAg
ICAgICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9OworCisgICAgICAgICAgICAgICAgZnVu
Y3Rpb24gbG9jYWxSZXF1aXJlKGRlcHMsIGNhbGxiYWNrLCBlcnJiYWNrKSB7CisgICAgICAgICAg
ICAgICAgICAgIHZhciBpZCwgbWFwLCByZXF1aXJlTW9kOworCisgICAgICAgICAgICAgICAgICAg
IGlmIChvcHRpb25zLmVuYWJsZUJ1aWxkQ2FsbGJhY2sgJiYgY2FsbGJhY2sgJiYgaXNGdW5jdGlv
bihjYWxsYmFjaykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLl9fcmVxdWly
ZUpzQnVpbGQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHR5cGVvZiBkZXBzID09PSAnc3RyaW5nJykgeworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGlzRnVuY3Rpb24oY2FsbGJhY2spKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy9JbnZhbGlkIGNhbGwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
b25FcnJvcihtYWtlRXJyb3IoJ3JlcXVpcmVhcmdzJywgJ0ludmFsaWQgcmVxdWlyZSBjYWxsJyks
IGVycmJhY2spOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
ICAgICAgICAvL0lmIHJlcXVpcmV8ZXhwb3J0c3xtb2R1bGUgYXJlIHJlcXVlc3RlZCwgZ2V0IHRo
ZQorICAgICAgICAgICAgICAgICAgICAgICAgLy92YWx1ZSBmb3IgdGhlbSBmcm9tIHRoZSBzcGVj
aWFsIGhhbmRsZXJzLiBDYXZlYXQ6CisgICAgICAgICAgICAgICAgICAgICAgICAvL3RoaXMgb25s
eSB3b3JrcyB3aGlsZSBtb2R1bGUgaXMgYmVpbmcgZGVmaW5lZC4KKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChyZWxNYXAgJiYgaGFzUHJvcChoYW5kbGVycywgZGVwcykpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlcnNbZGVwc10ocmVnaXN0cnlbcmVsTWFw
LmlkXSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgIC8vU3luY2hyb25vdXMgYWNjZXNzIHRvIG9uZSBtb2R1bGUuIElmIHJlcXVpcmUuZ2V0IGlz
CisgICAgICAgICAgICAgICAgICAgICAgICAvL2F2YWlsYWJsZSAoYXMgaW4gdGhlIE5vZGUgYWRh
cHRlciksIHByZWZlciB0aGF0LgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcS5nZXQp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVxLmdldChjb250ZXh0LCBk
ZXBzLCByZWxNYXApOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgICAgICAgICAvL05vcm1hbGl6ZSBtb2R1bGUgbmFtZSwgaWYgaXQgY29udGFpbnMgLiBvciAu
LgorICAgICAgICAgICAgICAgICAgICAgICAgbWFwID0gbWFrZU1vZHVsZU1hcChkZXBzLCByZWxN
YXAsIGZhbHNlLCB0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkID0gbWFwLmlkOwor
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWhhc1Byb3AoZGVmaW5lZCwgaWQpKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9uRXJyb3IobWFrZUVycm9yKCdub3Rs
b2FkZWQnLCAnTW9kdWxlIG5hbWUgIicgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlkICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn
IiBoYXMgbm90IGJlZW4gbG9hZGVkIHlldCBmb3IgY29udGV4dDogJyArCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dE5hbWUgKworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIChyZWxNYXAgPyAnJyA6ICcuIFVzZSByZXF1aXJlKFtd
KScpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZGVmaW5lZFtpZF07CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgICAgICAvL0dyYWIgZGVmaW5lcyB3YWl0aW5nIGluIHRoZSBnbG9iYWwgcXVldWUuCisg
ICAgICAgICAgICAgICAgICAgIGludGFrZURlZmluZXMoKTsKKworICAgICAgICAgICAgICAgICAg
ICAvL01hcmsgYWxsIHRoZSBkZXBlbmRlbmNpZXMgYXMgbmVlZGluZyB0byBiZSBsb2FkZWQuCisg
ICAgICAgICAgICAgICAgICAgIGNvbnRleHQubmV4dFRpY2soZnVuY3Rpb24gKCkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgLy9Tb21lIGRlZmluZXMgY291bGQgaGF2ZSBiZWVuIGFkZGVkIHNp
bmNlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgLy9yZXF1aXJlIGNhbGwsIGNvbGxlY3Qg
dGhlbS4KKyAgICAgICAgICAgICAgICAgICAgICAgIGludGFrZURlZmluZXMoKTsKKworICAgICAg
ICAgICAgICAgICAgICAgICAgcmVxdWlyZU1vZCA9IGdldE1vZHVsZShtYWtlTW9kdWxlTWFwKG51
bGwsIHJlbE1hcCkpOworCisgICAgICAgICAgICAgICAgICAgICAgICAvL1N0b3JlIGlmIG1hcCBj
b25maWcgc2hvdWxkIGJlIGFwcGxpZWQgdG8gdGhpcyByZXF1aXJlCisgICAgICAgICAgICAgICAg
ICAgICAgICAvL2NhbGwgZm9yIGRlcGVuZGVuY2llcy4KKyAgICAgICAgICAgICAgICAgICAgICAg
IHJlcXVpcmVNb2Quc2tpcE1hcCA9IG9wdGlvbnMuc2tpcE1hcDsKKworICAgICAgICAgICAgICAg
ICAgICAgICAgcmVxdWlyZU1vZC5pbml0KGRlcHMsIGNhbGxiYWNrLCBlcnJiYWNrLCB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlZDogdHJ1ZQorICAgICAgICAgICAgICAgICAg
ICAgICAgfSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrTG9hZGVkKCk7CisgICAg
ICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBsb2NhbFJl
cXVpcmU7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbWl4aW4obG9jYWxS
ZXF1aXJlLCB7CisgICAgICAgICAgICAgICAgICAgIGlzQnJvd3NlcjogaXNCcm93c2VyLAorCisg
ICAgICAgICAgICAgICAgICAgIC8qKgorICAgICAgICAgICAgICAgICAgICAgKiBDb252ZXJ0cyBh
IG1vZHVsZSBuYW1lICsgLmV4dGVuc2lvbiBpbnRvIGFuIFVSTCBwYXRoLgorICAgICAgICAgICAg
ICAgICAgICAgKiAqUmVxdWlyZXMqIHRoZSB1c2Ugb2YgYSBtb2R1bGUgbmFtZS4gSXQgZG9lcyBu
b3Qgc3VwcG9ydCB1c2luZworICAgICAgICAgICAgICAgICAgICAgKiBwbGFpbiBVUkxzIGxpa2Ug
bmFtZVRvVXJsLgorICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAg
dG9Vcmw6IGZ1bmN0aW9uIChtb2R1bGVOYW1lUGx1c0V4dCkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgdmFyIGluZGV4ID0gbW9kdWxlTmFtZVBsdXNFeHQubGFzdEluZGV4T2YoJy4nKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBleHQgPSBudWxsOworCisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZXh0ID0gbW9kdWxlTmFtZVBsdXNFeHQuc3Vic3RyaW5nKGluZGV4LCBtb2R1bGVOYW1lUGx1c0V4
dC5sZW5ndGgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZU5hbWVQbHVzRXh0
ID0gbW9kdWxlTmFtZVBsdXNFeHQuc3Vic3RyaW5nKDAsIGluZGV4KTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQubmFt
ZVRvVXJsKG5vcm1hbGl6ZShtb2R1bGVOYW1lUGx1c0V4dCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbE1hcCAmJiByZWxNYXAuaWQsIHRydWUpLCBl
eHQpOworICAgICAgICAgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAgICAgICAgIGRlZmlu
ZWQ6IGZ1bmN0aW9uIChpZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhc1By
b3AoZGVmaW5lZCwgbWFrZU1vZHVsZU1hcChpZCwgcmVsTWFwLCBmYWxzZSwgdHJ1ZSkuaWQpOwor
ICAgICAgICAgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllZDog
ZnVuY3Rpb24gKGlkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZCA9IG1ha2VNb2R1bGVN
YXAoaWQsIHJlbE1hcCwgZmFsc2UsIHRydWUpLmlkOworICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGhhc1Byb3AoZGVmaW5lZCwgaWQpIHx8IGhhc1Byb3AocmVnaXN0cnksIGlkKTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAg
ICAgLy9Pbmx5IGFsbG93IHVuZGVmIG9uIHRvcCBsZXZlbCByZXF1aXJlIGNhbGxzCisgICAgICAg
ICAgICAgICAgaWYgKCFyZWxNYXApIHsKKyAgICAgICAgICAgICAgICAgICAgbG9jYWxSZXF1aXJl
LnVuZGVmID0gZnVuY3Rpb24gKGlkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvL0JpbmQg
YW55IHdhaXRpbmcgZGVmaW5lKCkgY2FsbHMgdG8gdGhpcyBjb250ZXh0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgLy9maXggZm9yICM0MDgKKyAgICAgICAgICAgICAgICAgICAgICAgIHRha2VH
bG9iYWxRdWV1ZSgpOworCisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWFwID0gbWFrZU1v
ZHVsZU1hcChpZCwgcmVsTWFwLCB0cnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
b2QgPSBnZXRPd24ocmVnaXN0cnksIGlkKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgZGVs
ZXRlIGRlZmluZWRbaWRdOworICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHVybEZldGNo
ZWRbbWFwLnVybF07CisgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgdW5kZWZFdmVudHNb
aWRdOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobW9kKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy9Ib2xkIG9uIHRvIGxpc3RlbmVycyBpbiBjYXNlIHRoZQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vbW9kdWxlIHdpbGwgYmUgYXR0ZW1wdGVkIHRvIGJlIHJl
bG9hZGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy91c2luZyBhIGRpZmZlcmVudCBj
b25maWcuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1vZC5ldmVudHMuZGVmaW5l
ZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZkV2ZW50c1tpZF0gPSBt
b2QuZXZlbnRzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNsZWFuUmVnaXN0cnkoaWQpOworICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgIHJldHVybiBsb2NhbFJlcXVpcmU7CisgICAgICAgICAgICB9LAorCisgICAgICAg
ICAgICAvKioKKyAgICAgICAgICAgICAqIENhbGxlZCB0byBlbmFibGUgYSBtb2R1bGUgaWYgaXQg
aXMgc3RpbGwgaW4gdGhlIHJlZ2lzdHJ5CisgICAgICAgICAgICAgKiBhd2FpdGluZyBlbmFibGVt
ZW50LiBwYXJlbnQgbW9kdWxlIGlzIHBhc3NlZCBpbiBmb3IgY29udGV4dCwKKyAgICAgICAgICAg
ICAqIHVzZWQgYnkgdGhlIG9wdGltaXplci4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAg
ZW5hYmxlOiBmdW5jdGlvbiAoZGVwTWFwLCBwYXJlbnQpIHsKKyAgICAgICAgICAgICAgICB2YXIg
bW9kID0gZ2V0T3duKHJlZ2lzdHJ5LCBkZXBNYXAuaWQpOworICAgICAgICAgICAgICAgIGlmICht
b2QpIHsKKyAgICAgICAgICAgICAgICAgICAgZ2V0TW9kdWxlKGRlcE1hcCkuZW5hYmxlKCk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgLyoqCisgICAg
ICAgICAgICAgKiBJbnRlcm5hbCBtZXRob2QgdXNlZCBieSBlbnZpcm9ubWVudCBhZGFwdGVycyB0
byBjb21wbGV0ZSBhIGxvYWQgZXZlbnQuCisgICAgICAgICAgICAgKiBBIGxvYWQgZXZlbnQgY291
bGQgYmUgYSBzY3JpcHQgbG9hZCBvciBqdXN0IGEgbG9hZCBwYXNzIGZyb20gYSBzeW5jaHJvbm91
cworICAgICAgICAgICAgICogbG9hZCBjYWxsLgorICAgICAgICAgICAgICogQHBhcmFtIHtTdHJp
bmd9IG1vZHVsZU5hbWUgdGhlIG5hbWUgb2YgdGhlIG1vZHVsZSB0byBwb3RlbnRpYWxseSBjb21w
bGV0ZS4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgY29tcGxldGVMb2FkOiBmdW5jdGlv
biAobW9kdWxlTmFtZSkgeworICAgICAgICAgICAgICAgIHZhciBmb3VuZCwgYXJncywgbW9kLAor
ICAgICAgICAgICAgICAgICAgICBzaGltID0gZ2V0T3duKGNvbmZpZy5zaGltLCBtb2R1bGVOYW1l
KSB8fCB7fSwKKyAgICAgICAgICAgICAgICAgICAgc2hFeHBvcnRzID0gc2hpbS5leHBvcnRzOwor
CisgICAgICAgICAgICAgICAgdGFrZUdsb2JhbFF1ZXVlKCk7CisKKyAgICAgICAgICAgICAgICB3
aGlsZSAoZGVmUXVldWUubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBkZWZR
dWV1ZS5zaGlmdCgpOworICAgICAgICAgICAgICAgICAgICBpZiAoYXJnc1swXSA9PT0gbnVsbCkg
eworICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1swXSA9IG1vZHVsZU5hbWU7CisgICAgICAg
ICAgICAgICAgICAgICAgICAvL0lmIGFscmVhZHkgZm91bmQgYW4gYW5vbnltb3VzIG1vZHVsZSBh
bmQgYm91bmQgaXQKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vdG8gdGhpcyBuYW1lLCB0aGVu
IHRoaXMgaXMgc29tZSBvdGhlciBhbm9uIG1vZHVsZQorICAgICAgICAgICAgICAgICAgICAgICAg
Ly93YWl0aW5nIGZvciBpdHMgY29tcGxldGVMb2FkIHRvIGZpcmUuCisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoZm91bmQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5k
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhcmdzWzBdID09PSBtb2R1
bGVOYW1lKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvL0ZvdW5kIG1hdGNoaW5nIGRlZmlu
ZSBjYWxsIGZvciB0aGlzIHNjcmlwdCEKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGNhbGxH
ZXRNb2R1bGUoYXJncyk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy9E
byB0aGlzIGFmdGVyIHRoZSBjeWNsZSBvZiBjYWxsR2V0TW9kdWxlIGluIGNhc2UgdGhlIHJlc3Vs
dAorICAgICAgICAgICAgICAgIC8vb2YgdGhvc2UgY2FsbHMvaW5pdCBjYWxscyBjaGFuZ2VzIHRo
ZSByZWdpc3RyeS4KKyAgICAgICAgICAgICAgICBtb2QgPSBnZXRPd24ocmVnaXN0cnksIG1vZHVs
ZU5hbWUpOworCisgICAgICAgICAgICAgICAgaWYgKCFmb3VuZCAmJiAhaGFzUHJvcChkZWZpbmVk
LCBtb2R1bGVOYW1lKSAmJiBtb2QgJiYgIW1vZC5pbml0ZWQpIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGNvbmZpZy5lbmZvcmNlRGVmaW5lICYmICghc2hFeHBvcnRzIHx8ICFnZXRHbG9iYWwo
c2hFeHBvcnRzKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNQYXRoRmFsbGJh
Y2sobW9kdWxlTmFtZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBvbkVycm9yKG1ha2VFcnJvcignbm9kZWZpbmUnLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ05vIGRlZmluZSBjYWxsIGZvciAnICsgbW9k
dWxlTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51
bGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbW9kdWxl
TmFtZV0pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vQSBzY3JpcHQgdGhhdCBkb2VzIG5v
dCBjYWxsIGRlZmluZSgpLCBzbyBqdXN0IHNpbXVsYXRlCisgICAgICAgICAgICAgICAgICAgICAg
ICAvL3RoZSBjYWxsIGZvciBpdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxHZXRNb2R1
bGUoW21vZHVsZU5hbWUsIChzaGltLmRlcHMgfHwgW10pLCBzaGltLmV4cG9ydHNGbl0pOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
Y2hlY2tMb2FkZWQoKTsKKyAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgIC8qKgorICAgICAg
ICAgICAgICogQ29udmVydHMgYSBtb2R1bGUgbmFtZSB0byBhIGZpbGUgcGF0aC4gU3VwcG9ydHMg
Y2FzZXMgd2hlcmUKKyAgICAgICAgICAgICAqIG1vZHVsZU5hbWUgbWF5IGFjdHVhbGx5IGJlIGp1
c3QgYW4gVVJMLgorICAgICAgICAgICAgICogTm90ZSB0aGF0IGl0ICoqZG9lcyBub3QqKiBjYWxs
IG5vcm1hbGl6ZSBvbiB0aGUgbW9kdWxlTmFtZSwKKyAgICAgICAgICAgICAqIGl0IGlzIGFzc3Vt
ZWQgdG8gaGF2ZSBhbHJlYWR5IGJlZW4gbm9ybWFsaXplZC4gVGhpcyBpcyBhbgorICAgICAgICAg
ICAgICogaW50ZXJuYWwgQVBJLCBub3QgYSBwdWJsaWMgb25lLiBVc2UgdG9VcmwgZm9yIHRoZSBw
dWJsaWMgQVBJLgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBuYW1lVG9Vcmw6IGZ1bmN0
aW9uIChtb2R1bGVOYW1lLCBleHQpIHsKKyAgICAgICAgICAgICAgICB2YXIgcGF0aHMsIHBrZ3Ms
IHBrZywgcGtnUGF0aCwgc3ltcywgaSwgcGFyZW50TW9kdWxlLCB1cmwsCisgICAgICAgICAgICAg
ICAgICAgIHBhcmVudFBhdGg7CisKKyAgICAgICAgICAgICAgICAvL0lmIGEgY29sb24gaXMgaW4g
dGhlIFVSTCwgaXQgaW5kaWNhdGVzIGEgcHJvdG9jb2wgaXMgdXNlZCBhbmQgaXQgaXMganVzdAor
ICAgICAgICAgICAgICAgIC8vYW4gVVJMIHRvIGEgZmlsZSwgb3IgaWYgaXQgc3RhcnRzIHdpdGgg
YSBzbGFzaCwgY29udGFpbnMgYSBxdWVyeSBhcmcgKGkuZS4gPykKKyAgICAgICAgICAgICAgICAv
L29yIGVuZHMgd2l0aCAuanMsIHRoZW4gYXNzdW1lIHRoZSB1c2VyIG1lYW50IHRvIHVzZSBhbiB1
cmwgYW5kIG5vdCBhIG1vZHVsZSBpZC4KKyAgICAgICAgICAgICAgICAvL1RoZSBzbGFzaCBpcyBp
bXBvcnRhbnQgZm9yIHByb3RvY29sLWxlc3MgVVJMcyBhcyB3ZWxsIGFzIGZ1bGwgcGF0aHMuCisg
ICAgICAgICAgICAgICAgaWYgKHJlcS5qc0V4dFJlZ0V4cC50ZXN0KG1vZHVsZU5hbWUpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIC8vSnVzdCBhIHBsYWluIHBhdGgsIG5vdCBtb2R1bGUgbmFtZSBs
b29rdXAsIHNvIGp1c3QgcmV0dXJuIGl0LgorICAgICAgICAgICAgICAgICAgICAvL0FkZCBleHRl
bnNpb24gaWYgaXQgaXMgaW5jbHVkZWQuIFRoaXMgaXMgYSBiaXQgd29ua3ksIG9ubHkgbm9uLS5q
cyB0aGluZ3MgcGFzcworICAgICAgICAgICAgICAgICAgICAvL2FuIGV4dGVuc2lvbiwgdGhpcyBt
ZXRob2QgcHJvYmFibHkgbmVlZHMgdG8gYmUgcmV3b3JrZWQuCisgICAgICAgICAgICAgICAgICAg
IHVybCA9IG1vZHVsZU5hbWUgKyAoZXh0IHx8ICcnKTsKKyAgICAgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICAvL0EgbW9kdWxlIHRoYXQgbmVlZHMgdG8gYmUgY29udmVy
dGVkIHRvIGEgcGF0aC4KKyAgICAgICAgICAgICAgICAgICAgcGF0aHMgPSBjb25maWcucGF0aHM7
CisgICAgICAgICAgICAgICAgICAgIHBrZ3MgPSBjb25maWcucGtnczsKKworICAgICAgICAgICAg
ICAgICAgICBzeW1zID0gbW9kdWxlTmFtZS5zcGxpdCgnLycpOworICAgICAgICAgICAgICAgICAg
ICAvL0ZvciBlYWNoIG1vZHVsZSBuYW1lIHNlZ21lbnQsIHNlZSBpZiB0aGVyZSBpcyBhIHBhdGgK
KyAgICAgICAgICAgICAgICAgICAgLy9yZWdpc3RlcmVkIGZvciBpdC4gU3RhcnQgd2l0aCBtb3N0
IHNwZWNpZmljIG5hbWUKKyAgICAgICAgICAgICAgICAgICAgLy9hbmQgd29yayB1cCBmcm9tIGl0
LgorICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSBzeW1zLmxlbmd0aDsgaSA+IDA7IGkgLT0g
MSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50TW9kdWxlID0gc3ltcy5zbGljZSgw
LCBpKS5qb2luKCcvJyk7CisgICAgICAgICAgICAgICAgICAgICAgICBwa2cgPSBnZXRPd24ocGtn
cywgcGFyZW50TW9kdWxlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFBhdGggPSBn
ZXRPd24ocGF0aHMsIHBhcmVudE1vZHVsZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
cGFyZW50UGF0aCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vSWYgYW4gYXJyYXks
IGl0IG1lYW5zIHRoZXJlIGFyZSBhIGZldyBjaG9pY2VzLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vQ2hvb3NlIHRoZSBvbmUgdGhhdCBpcyBkZXNpcmVkCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGlzQXJyYXkocGFyZW50UGF0aCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcGFyZW50UGF0aCA9IHBhcmVudFBhdGhbMF07CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bXMuc3BsaWNl
KDAsIGksIHBhcmVudFBhdGgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwa2cpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvL0lmIG1vZHVsZSBuYW1lIGlzIGp1c3QgdGhlIHBhY2thZ2UgbmFtZSwg
dGhlbiBsb29raW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9mb3IgdGhlIG1haW4g
bW9kdWxlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtb2R1bGVOYW1lID09PSBw
a2cubmFtZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwa2dQYXRoID0gcGtn
LmxvY2F0aW9uICsgJy8nICsgcGtnLm1haW47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGtnUGF0aCA9IHBrZy5s
b2NhdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3ltcy5zcGxpY2UoMCwgaSwgcGtnUGF0aCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAvL0pvaW4gdGhlIHBhdGggcGFydHMg
dG9nZXRoZXIsIHRoZW4gZmlndXJlIG91dCBpZiBiYXNlVXJsIGlzIG5lZWRlZC4KKyAgICAgICAg
ICAgICAgICAgICAgdXJsID0gc3ltcy5qb2luKCcvJyk7CisgICAgICAgICAgICAgICAgICAgIHVy
bCArPSAoZXh0IHx8ICgvXD8vLnRlc3QodXJsKSA/ICcnIDogJy5qcycpKTsKKyAgICAgICAgICAg
ICAgICAgICAgdXJsID0gKHVybC5jaGFyQXQoMCkgPT09ICcvJyB8fCB1cmwubWF0Y2goL15bXHdc
K1wuXC1dKzovKSA/ICcnIDogY29uZmlnLmJhc2VVcmwpICsgdXJsOworICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgIHJldHVybiBjb25maWcudXJsQXJncyA/IHVybCArCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1cmwuaW5kZXhPZignPycpID09
PSAtMSA/ICc/JyA6ICcmJykgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25maWcudXJsQXJncykgOiB1cmw7CisgICAgICAgICAgICB9LAorCisgICAgICAgICAg
ICAvL0RlbGVnYXRlcyB0byByZXEubG9hZC4gQnJva2VuIG91dCBhcyBhIHNlcGFyYXRlIGZ1bmN0
aW9uIHRvCisgICAgICAgICAgICAvL2FsbG93IG92ZXJyaWRpbmcgaW4gdGhlIG9wdGltaXplci4K
KyAgICAgICAgICAgIGxvYWQ6IGZ1bmN0aW9uIChpZCwgdXJsKSB7CisgICAgICAgICAgICAgICAg
cmVxLmxvYWQoY29udGV4dCwgaWQsIHVybCk7CisgICAgICAgICAgICB9LAorCisgICAgICAgICAg
ICAvKioKKyAgICAgICAgICAgICAqIEV4ZWN1dGVzIGEgbW9kdWxlIGNhbGxhY2sgZnVuY3Rpb24u
IEJyb2tlbiBvdXQgYXMgYSBzZXBhcmF0ZSBmdW5jdGlvbgorICAgICAgICAgICAgICogc29sZWx5
IHRvIGFsbG93IHRoZSBidWlsZCBzeXN0ZW0gdG8gc2VxdWVuY2UgdGhlIGZpbGVzIGluIHRoZSBi
dWlsdAorICAgICAgICAgICAgICogbGF5ZXIgaW4gdGhlIHJpZ2h0IHNlcXVlbmNlLgorICAgICAg
ICAgICAgICoKKyAgICAgICAgICAgICAqIEBwcml2YXRlCisgICAgICAgICAgICAgKi8KKyAgICAg
ICAgICAgIGV4ZWNDYjogZnVuY3Rpb24gKG5hbWUsIGNhbGxiYWNrLCBhcmdzLCBleHBvcnRzKSB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KGV4cG9ydHMsIGFyZ3MpOwor
ICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgLyoqCisgICAgICAgICAgICAgKiBjYWxsYmFj
ayBmb3Igc2NyaXB0IGxvYWRzLCB1c2VkIHRvIGNoZWNrIHN0YXR1cyBvZiBsb2FkaW5nLgorICAg
ICAgICAgICAgICoKKyAgICAgICAgICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2dCB0aGUgZXZlbnQg
ZnJvbSB0aGUgYnJvd3NlciBmb3IgdGhlIHNjcmlwdAorICAgICAgICAgICAgICogdGhhdCB3YXMg
bG9hZGVkLgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBvblNjcmlwdExvYWQ6IGZ1bmN0
aW9uIChldnQpIHsKKyAgICAgICAgICAgICAgICAvL1VzaW5nIGN1cnJlbnRUYXJnZXQgaW5zdGVh
ZCBvZiB0YXJnZXQgZm9yIEZpcmVmb3ggMi4wJ3Mgc2FrZS4gTm90CisgICAgICAgICAgICAgICAg
Ly9hbGwgb2xkIGJyb3dzZXJzIHdpbGwgYmUgc3VwcG9ydGVkLCBidXQgdGhpcyBvbmUgd2FzIGVh
c3kgZW5vdWdoCisgICAgICAgICAgICAgICAgLy90byBzdXBwb3J0IGFuZCBzdGlsbCBtYWtlcyBz
ZW5zZS4KKyAgICAgICAgICAgICAgICBpZiAoZXZ0LnR5cGUgPT09ICdsb2FkJyB8fAorICAgICAg
ICAgICAgICAgICAgICAgICAgKHJlYWR5UmVnRXhwLnRlc3QoKGV2dC5jdXJyZW50VGFyZ2V0IHx8
IGV2dC5zcmNFbGVtZW50KS5yZWFkeVN0YXRlKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy9S
ZXNldCBpbnRlcmFjdGl2ZSBzY3JpcHQgc28gYSBzY3JpcHQgbm9kZSBpcyBub3QgaGVsZCBvbnRv
IGZvcgorICAgICAgICAgICAgICAgICAgICAvL3RvIGxvbmcuCisgICAgICAgICAgICAgICAgICAg
IGludGVyYWN0aXZlU2NyaXB0ID0gbnVsbDsKKworICAgICAgICAgICAgICAgICAgICAvL1B1bGwg
b3V0IHRoZSBuYW1lIG9mIHRoZSBtb2R1bGUgYW5kIHRoZSBjb250ZXh0LgorICAgICAgICAgICAg
ICAgICAgICB2YXIgZGF0YSA9IGdldFNjcmlwdERhdGEoZXZ0KTsKKyAgICAgICAgICAgICAgICAg
ICAgY29udGV4dC5jb21wbGV0ZUxvYWQoZGF0YS5pZCk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfSwKKworICAgICAgICAgICAgLyoqCisgICAgICAgICAgICAgKiBDYWxsYmFjayBm
b3Igc2NyaXB0IGVycm9ycy4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgb25TY3JpcHRF
cnJvcjogZnVuY3Rpb24gKGV2dCkgeworICAgICAgICAgICAgICAgIHZhciBkYXRhID0gZ2V0U2Ny
aXB0RGF0YShldnQpOworICAgICAgICAgICAgICAgIGlmICghaGFzUGF0aEZhbGxiYWNrKGRhdGEu
aWQpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBvbkVycm9yKG1ha2VFcnJvcignc2Ny
aXB0ZXJyb3InLCAnU2NyaXB0IGVycm9yJywgZXZ0LCBbZGF0YS5pZF0pKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgY29udGV4dC5yZXF1
aXJlID0gY29udGV4dC5tYWtlUmVxdWlyZSgpOworICAgICAgICByZXR1cm4gY29udGV4dDsKKyAg
ICB9CisKKyAgICAvKioKKyAgICAgKiBNYWluIGVudHJ5IHBvaW50LgorICAgICAqCisgICAgICog
SWYgdGhlIG9ubHkgYXJndW1lbnQgdG8gcmVxdWlyZSBpcyBhIHN0cmluZywgdGhlbiB0aGUgbW9k
dWxlIHRoYXQKKyAgICAgKiBpcyByZXByZXNlbnRlZCBieSB0aGF0IHN0cmluZyBpcyBmZXRjaGVk
IGZvciB0aGUgYXBwcm9wcmlhdGUgY29udGV4dC4KKyAgICAgKgorICAgICAqIElmIHRoZSBmaXJz
dCBhcmd1bWVudCBpcyBhbiBhcnJheSwgdGhlbiBpdCB3aWxsIGJlIHRyZWF0ZWQgYXMgYW4gYXJy
YXkKKyAgICAgKiBvZiBkZXBlbmRlbmN5IHN0cmluZyBuYW1lcyB0byBmZXRjaC4gQW4gb3B0aW9u
YWwgZnVuY3Rpb24gY2FsbGJhY2sgY2FuCisgICAgICogYmUgc3BlY2lmaWVkIHRvIGV4ZWN1dGUg
d2hlbiBhbGwgb2YgdGhvc2UgZGVwZW5kZW5jaWVzIGFyZSBhdmFpbGFibGUuCisgICAgICoKKyAg
ICAgKiBNYWtlIGEgbG9jYWwgcmVxIHZhcmlhYmxlIHRvIGhlbHAgQ2FqYSBjb21wbGlhbmNlIChp
dCBhc3N1bWVzIHRoaW5ncworICAgICAqIG9uIGEgcmVxdWlyZSB0aGF0IGFyZSBub3Qgc3RhbmRh
cmRpemVkKSwgYW5kIHRvIGdpdmUgYSBzaG9ydAorICAgICAqIG5hbWUgZm9yIG1pbmlmaWNhdGlv
bi9sb2NhbCBzY29wZSB1c2UuCisgICAgICovCisgICAgcmVxID0gcmVxdWlyZWpzID0gZnVuY3Rp
b24gKGRlcHMsIGNhbGxiYWNrLCBlcnJiYWNrLCBvcHRpb25hbCkgeworCisgICAgICAgIC8vRmlu
ZCB0aGUgcmlnaHQgY29udGV4dCwgdXNlIGRlZmF1bHQKKyAgICAgICAgdmFyIGNvbnRleHQsIGNv
bmZpZywKKyAgICAgICAgICAgIGNvbnRleHROYW1lID0gZGVmQ29udGV4dE5hbWU7CisKKyAgICAg
ICAgLy8gRGV0ZXJtaW5lIGlmIGhhdmUgY29uZmlnIG9iamVjdCBpbiB0aGUgY2FsbC4KKyAgICAg
ICAgaWYgKCFpc0FycmF5KGRlcHMpICYmIHR5cGVvZiBkZXBzICE9PSAnc3RyaW5nJykgeworICAg
ICAgICAgICAgLy8gZGVwcyBpcyBhIGNvbmZpZyBvYmplY3QKKyAgICAgICAgICAgIGNvbmZpZyA9
IGRlcHM7CisgICAgICAgICAgICBpZiAoaXNBcnJheShjYWxsYmFjaykpIHsKKyAgICAgICAgICAg
ICAgICAvLyBBZGp1c3QgYXJncyBpZiB0aGVyZSBhcmUgZGVwZW5kZW5jaWVzCisgICAgICAgICAg
ICAgICAgZGVwcyA9IGNhbGxiYWNrOworICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gZXJyYmFj
azsKKyAgICAgICAgICAgICAgICBlcnJiYWNrID0gb3B0aW9uYWw7CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIGRlcHMgPSBbXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIGlmIChjb25maWcgJiYgY29uZmlnLmNvbnRleHQpIHsKKyAgICAgICAgICAg
IGNvbnRleHROYW1lID0gY29uZmlnLmNvbnRleHQ7CisgICAgICAgIH0KKworICAgICAgICBjb250
ZXh0ID0gZ2V0T3duKGNvbnRleHRzLCBjb250ZXh0TmFtZSk7CisgICAgICAgIGlmICghY29udGV4
dCkgeworICAgICAgICAgICAgY29udGV4dCA9IGNvbnRleHRzW2NvbnRleHROYW1lXSA9IHJlcS5z
Lm5ld0NvbnRleHQoY29udGV4dE5hbWUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGNvbmZp
ZykgeworICAgICAgICAgICAgY29udGV4dC5jb25maWd1cmUoY29uZmlnKTsKKyAgICAgICAgfQor
CisgICAgICAgIHJldHVybiBjb250ZXh0LnJlcXVpcmUoZGVwcywgY2FsbGJhY2ssIGVycmJhY2sp
OworICAgIH07CisKKyAgICAvKioKKyAgICAgKiBTdXBwb3J0IHJlcXVpcmUuY29uZmlnKCkgdG8g
bWFrZSBpdCBlYXNpZXIgdG8gY29vcGVyYXRlIHdpdGggb3RoZXIKKyAgICAgKiBBTUQgbG9hZGVy
cyBvbiBnbG9iYWxseSBhZ3JlZWQgbmFtZXMuCisgICAgICovCisgICAgcmVxLmNvbmZpZyA9IGZ1
bmN0aW9uIChjb25maWcpIHsKKyAgICAgICAgcmV0dXJuIHJlcShjb25maWcpOworICAgIH07CisK
KyAgICAvKioKKyAgICAgKiBFeGVjdXRlIHNvbWV0aGluZyBhZnRlciB0aGUgY3VycmVudCB0aWNr
CisgICAgICogb2YgdGhlIGV2ZW50IGxvb3AuIE92ZXJyaWRlIGZvciBvdGhlciBlbnZzCisgICAg
ICogdGhhdCBoYXZlIGEgYmV0dGVyIHNvbHV0aW9uIHRoYW4gc2V0VGltZW91dC4KKyAgICAgKiBA
cGFyYW0gIHtGdW5jdGlvbn0gZm4gZnVuY3Rpb24gdG8gZXhlY3V0ZSBsYXRlci4KKyAgICAgKi8K
KyAgICByZXEubmV4dFRpY2sgPSB0eXBlb2Ygc2V0VGltZW91dCAhPT0gJ3VuZGVmaW5lZCcgPyBm
dW5jdGlvbiAoZm4pIHsKKyAgICAgICAgc2V0VGltZW91dChmbiwgNCk7CisgICAgfSA6IGZ1bmN0
aW9uIChmbikgeyBmbigpOyB9OworCisgICAgLyoqCisgICAgICogRXhwb3J0IHJlcXVpcmUgYXMg
YSBnbG9iYWwsIGJ1dCBvbmx5IGlmIGl0IGRvZXMgbm90IGFscmVhZHkgZXhpc3QuCisgICAgICov
CisgICAgaWYgKCFyZXF1aXJlKSB7CisgICAgICAgIHJlcXVpcmUgPSByZXE7CisgICAgfQorCisg
ICAgcmVxLnZlcnNpb24gPSB2ZXJzaW9uOworCisgICAgLy9Vc2VkIHRvIGZpbHRlciBvdXQgZGVw
ZW5kZW5jaWVzIHRoYXQgYXJlIGFscmVhZHkgcGF0aHMuCisgICAgcmVxLmpzRXh0UmVnRXhwID0g
L15cL3w6fFw/fFwuanMkLzsKKyAgICByZXEuaXNCcm93c2VyID0gaXNCcm93c2VyOworICAgIHMg
PSByZXEucyA9IHsKKyAgICAgICAgY29udGV4dHM6IGNvbnRleHRzLAorICAgICAgICBuZXdDb250
ZXh0OiBuZXdDb250ZXh0CisgICAgfTsKKworICAgIC8vQ3JlYXRlIGRlZmF1bHQgY29udGV4dC4K
KyAgICByZXEoe30pOworCisgICAgLy9FeHBvcnRzIHNvbWUgY29udGV4dC1zZW5zaXRpdmUgbWV0
aG9kcyBvbiBnbG9iYWwgcmVxdWlyZS4KKyAgICBlYWNoKFsKKyAgICAgICAgJ3RvVXJsJywKKyAg
ICAgICAgJ3VuZGVmJywKKyAgICAgICAgJ2RlZmluZWQnLAorICAgICAgICAnc3BlY2lmaWVkJwor
ICAgIF0sIGZ1bmN0aW9uIChwcm9wKSB7CisgICAgICAgIC8vUmVmZXJlbmNlIGZyb20gY29udGV4
dHMgaW5zdGVhZCBvZiBlYXJseSBiaW5kaW5nIHRvIGRlZmF1bHQgY29udGV4dCwKKyAgICAgICAg
Ly9zbyB0aGF0IGR1cmluZyBidWlsZHMsIHRoZSBsYXRlc3QgaW5zdGFuY2Ugb2YgdGhlIGRlZmF1
bHQgY29udGV4dAorICAgICAgICAvL3dpdGggaXRzIGNvbmZpZyBnZXRzIHVzZWQuCisgICAgICAg
IHJlcVtwcm9wXSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHZhciBjdHggPSBjb250ZXh0
c1tkZWZDb250ZXh0TmFtZV07CisgICAgICAgICAgICByZXR1cm4gY3R4LnJlcXVpcmVbcHJvcF0u
YXBwbHkoY3R4LCBhcmd1bWVudHMpOworICAgICAgICB9OworICAgIH0pOworCisgICAgaWYgKGlz
QnJvd3NlcikgeworICAgICAgICBoZWFkID0gcy5oZWFkID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNC
eVRhZ05hbWUoJ2hlYWQnKVswXTsKKyAgICAgICAgLy9JZiBCQVNFIHRhZyBpcyBpbiBwbGF5LCB1
c2luZyBhcHBlbmRDaGlsZCBpcyBhIHByb2JsZW0gZm9yIElFNi4KKyAgICAgICAgLy9XaGVuIHRo
YXQgYnJvd3NlciBkaWVzLCB0aGlzIGNhbiBiZSByZW1vdmVkLiBEZXRhaWxzIGluIHRoaXMgalF1
ZXJ5IGJ1ZzoKKyAgICAgICAgLy9odHRwOi8vZGV2LmpxdWVyeS5jb20vdGlja2V0LzI3MDkKKyAg
ICAgICAgYmFzZUVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYmFzZScp
WzBdOworICAgICAgICBpZiAoYmFzZUVsZW1lbnQpIHsKKyAgICAgICAgICAgIGhlYWQgPSBzLmhl
YWQgPSBiYXNlRWxlbWVudC5wYXJlbnROb2RlOworICAgICAgICB9CisgICAgfQorCisgICAgLyoq
CisgICAgICogQW55IGVycm9ycyB0aGF0IHJlcXVpcmUgZXhwbGljaXRseSBnZW5lcmF0ZXMgd2ls
bCBiZSBwYXNzZWQgdG8gdGhpcworICAgICAqIGZ1bmN0aW9uLiBJbnRlcmNlcHQvb3ZlcnJpZGUg
aXQgaWYgeW91IHdhbnQgY3VzdG9tIGVycm9yIGhhbmRsaW5nLgorICAgICAqIEBwYXJhbSB7RXJy
b3J9IGVyciB0aGUgZXJyb3Igb2JqZWN0LgorICAgICAqLworICAgIHJlcS5vbkVycm9yID0gZnVu
Y3Rpb24gKGVycikgeworICAgICAgICB0aHJvdyBlcnI7CisgICAgfTsKKworICAgIC8qKgorICAg
ICAqIERvZXMgdGhlIHJlcXVlc3QgdG8gbG9hZCBhIG1vZHVsZSBmb3IgdGhlIGJyb3dzZXIgY2Fz
ZS4KKyAgICAgKiBNYWtlIHRoaXMgYSBzZXBhcmF0ZSBmdW5jdGlvbiB0byBhbGxvdyBvdGhlciBl
bnZpcm9ubWVudHMKKyAgICAgKiB0byBvdmVycmlkZSBpdC4KKyAgICAgKgorICAgICAqIEBwYXJh
bSB7T2JqZWN0fSBjb250ZXh0IHRoZSByZXF1aXJlIGNvbnRleHQgdG8gZmluZCBzdGF0ZS4KKyAg
ICAgKiBAcGFyYW0ge1N0cmluZ30gbW9kdWxlTmFtZSB0aGUgbmFtZSBvZiB0aGUgbW9kdWxlLgor
ICAgICAqIEBwYXJhbSB7T2JqZWN0fSB1cmwgdGhlIFVSTCB0byB0aGUgbW9kdWxlLgorICAgICAq
LworICAgIHJlcS5sb2FkID0gZnVuY3Rpb24gKGNvbnRleHQsIG1vZHVsZU5hbWUsIHVybCkgewor
ICAgICAgICB2YXIgY29uZmlnID0gKGNvbnRleHQgJiYgY29udGV4dC5jb25maWcpIHx8IHt9LAor
ICAgICAgICAgICAgbm9kZTsKKyAgICAgICAgaWYgKGlzQnJvd3NlcikgeworICAgICAgICAgICAg
Ly9JbiB0aGUgYnJvd3NlciBzbyB1c2UgYSBzY3JpcHQgdGFnCisgICAgICAgICAgICBub2RlID0g
Y29uZmlnLnhodG1sID8KKyAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dE5TKCdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sJywgJ2h0bWw6c2NyaXB0JykgOgorICAg
ICAgICAgICAgICAgICAgICBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsKKyAgICAg
ICAgICAgIG5vZGUudHlwZSA9IGNvbmZpZy5zY3JpcHRUeXBlIHx8ICd0ZXh0L2phdmFzY3JpcHQn
OworICAgICAgICAgICAgbm9kZS5jaGFyc2V0ID0gJ3V0Zi04JzsKKyAgICAgICAgICAgIG5vZGUu
YXN5bmMgPSB0cnVlOworCisgICAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZSgnZGF0YS1yZXF1
aXJlY29udGV4dCcsIGNvbnRleHQuY29udGV4dE5hbWUpOworICAgICAgICAgICAgbm9kZS5zZXRB
dHRyaWJ1dGUoJ2RhdGEtcmVxdWlyZW1vZHVsZScsIG1vZHVsZU5hbWUpOworCisgICAgICAgICAg
ICAvL1NldCB1cCBsb2FkIGxpc3RlbmVyLiBUZXN0IGF0dGFjaEV2ZW50IGZpcnN0IGJlY2F1c2Ug
SUU5IGhhcworICAgICAgICAgICAgLy9hIHN1YnRsZSBpc3N1ZSBpbiBpdHMgYWRkRXZlbnRMaXN0
ZW5lciBhbmQgc2NyaXB0IG9ubG9hZCBmaXJpbmdzCisgICAgICAgICAgICAvL3RoYXQgZG8gbm90
IG1hdGNoIHRoZSBiZWhhdmlvciBvZiBhbGwgb3RoZXIgYnJvd3NlcnMgd2l0aAorICAgICAgICAg
ICAgLy9hZGRFdmVudExpc3RlbmVyIHN1cHBvcnQsIHdoaWNoIGZpcmUgdGhlIG9ubG9hZCBldmVu
dCBmb3IgYQorICAgICAgICAgICAgLy9zY3JpcHQgcmlnaHQgYWZ0ZXIgdGhlIHNjcmlwdCBleGVj
dXRpb24uIFNlZToKKyAgICAgICAgICAgIC8vaHR0cHM6Ly9jb25uZWN0Lm1pY3Jvc29mdC5jb20v
SUUvZmVlZGJhY2svZGV0YWlscy82NDgwNTcvc2NyaXB0LW9ubG9hZC1ldmVudC1pcy1ub3QtZmly
ZWQtaW1tZWRpYXRlbHktYWZ0ZXItc2NyaXB0LWV4ZWN1dGlvbgorICAgICAgICAgICAgLy9VTkZP
UlRVTkFURUxZIE9wZXJhIGltcGxlbWVudHMgYXR0YWNoRXZlbnQgYnV0IGRvZXMgbm90IGZvbGxv
dyB0aGUgc2NyaXB0CisgICAgICAgICAgICAvL3NjcmlwdCBleGVjdXRpb24gbW9kZS4KKyAgICAg
ICAgICAgIGlmIChub2RlLmF0dGFjaEV2ZW50ICYmCisgICAgICAgICAgICAgICAgICAgIC8vQ2hl
Y2sgaWYgbm9kZS5hdHRhY2hFdmVudCBpcyBhcnRpZmljaWFsbHkgYWRkZWQgYnkgY3VzdG9tIHNj
cmlwdCBvcgorICAgICAgICAgICAgICAgICAgICAvL25hdGl2ZWx5IHN1cHBvcnRlZCBieSBicm93
c2VyCisgICAgICAgICAgICAgICAgICAgIC8vcmVhZCBodHRwczovL2dpdGh1Yi5jb20vanJidXJr
ZS9yZXF1aXJlanMvaXNzdWVzLzE4NworICAgICAgICAgICAgICAgICAgICAvL2lmIHdlIGNhbiBO
T1QgZmluZCBbbmF0aXZlIGNvZGVdIHRoZW4gaXQgbXVzdCBOT1QgbmF0aXZlbHkgc3VwcG9ydGVk
LgorICAgICAgICAgICAgICAgICAgICAvL2luIElFOCwgbm9kZS5hdHRhY2hFdmVudCBkb2VzIG5v
dCBoYXZlIHRvU3RyaW5nKCkKKyAgICAgICAgICAgICAgICAgICAgLy9Ob3RlIHRoZSB0ZXN0IGZv
ciAiW25hdGl2ZSBjb2RlIiB3aXRoIG5vIGNsb3NpbmcgYnJhY2UsIHNlZToKKyAgICAgICAgICAg
ICAgICAgICAgLy9odHRwczovL2dpdGh1Yi5jb20vanJidXJrZS9yZXF1aXJlanMvaXNzdWVzLzI3
MworICAgICAgICAgICAgICAgICAgICAhKG5vZGUuYXR0YWNoRXZlbnQudG9TdHJpbmcgJiYgbm9k
ZS5hdHRhY2hFdmVudC50b1N0cmluZygpLmluZGV4T2YoJ1tuYXRpdmUgY29kZScpIDwgMCkgJiYK
KyAgICAgICAgICAgICAgICAgICAgIWlzT3BlcmEpIHsKKyAgICAgICAgICAgICAgICAvL1Byb2Jh
Ymx5IElFLiBJRSAoYXQgbGVhc3QgNi04KSBkbyBub3QgZmlyZQorICAgICAgICAgICAgICAgIC8v
c2NyaXB0IG9ubG9hZCByaWdodCBhZnRlciBleGVjdXRpbmcgdGhlIHNjcmlwdCwgc28KKyAgICAg
ICAgICAgICAgICAvL3dlIGNhbm5vdCB0aWUgdGhlIGFub255bW91cyBkZWZpbmUgY2FsbCB0byBh
IG5hbWUuCisgICAgICAgICAgICAgICAgLy9Ib3dldmVyLCBJRSByZXBvcnRzIHRoZSBzY3JpcHQg
YXMgYmVpbmcgaW4gJ2ludGVyYWN0aXZlJworICAgICAgICAgICAgICAgIC8vcmVhZHlTdGF0ZSBh
dCB0aGUgdGltZSBvZiB0aGUgZGVmaW5lIGNhbGwuCisgICAgICAgICAgICAgICAgdXNlSW50ZXJh
Y3RpdmUgPSB0cnVlOworCisgICAgICAgICAgICAgICAgbm9kZS5hdHRhY2hFdmVudCgnb25yZWFk
eXN0YXRlY2hhbmdlJywgY29udGV4dC5vblNjcmlwdExvYWQpOworICAgICAgICAgICAgICAgIC8v
SXQgd291bGQgYmUgZ3JlYXQgdG8gYWRkIGFuIGVycm9yIGhhbmRsZXIgaGVyZSB0byBjYXRjaAor
ICAgICAgICAgICAgICAgIC8vNDA0cyBpbiBJRTkrLiBIb3dldmVyLCBvbnJlYWR5c3RhdGVjaGFu
Z2Ugd2lsbCBmaXJlIGJlZm9yZQorICAgICAgICAgICAgICAgIC8vdGhlIGVycm9yIGhhbmRsZXIs
IHNvIHRoYXQgZG9lcyBub3QgaGVscC4gSWYgYWRkRXZlbkxpc3RlbmVyCisgICAgICAgICAgICAg
ICAgLy9pcyB1c2VkLCB0aGVuIElFIHdpbGwgZmlyZSBlcnJvciBiZWZvcmUgbG9hZCwgYnV0IHdl
IGNhbm5vdAorICAgICAgICAgICAgICAgIC8vdXNlIHRoYXQgcGF0aHdheSBnaXZlbiB0aGUgY29u
bmVjdC5taWNyb3NvZnQuY29tIGlzc3VlCisgICAgICAgICAgICAgICAgLy9tZW50aW9uZWQgYWJv
dmUgYWJvdXQgbm90IGRvaW5nIHRoZSAnc2NyaXB0IGV4ZWN1dGUsCisgICAgICAgICAgICAgICAg
Ly90aGVuIGZpcmUgdGhlIHNjcmlwdCBsb2FkIGV2ZW50IGxpc3RlbmVyIGJlZm9yZSBleGVjdXRl
CisgICAgICAgICAgICAgICAgLy9uZXh0IHNjcmlwdCcgdGhhdCBvdGhlciBicm93c2VycyBkby4K
KyAgICAgICAgICAgICAgICAvL0Jlc3QgaG9wZTogSUUxMCBmaXhlcyB0aGUgaXNzdWVzLAorICAg
ICAgICAgICAgICAgIC8vYW5kIHRoZW4gZGVzdHJveXMgYWxsIGluc3RhbGxzIG9mIElFIDYtOS4K
KyAgICAgICAgICAgICAgICAvL25vZGUuYXR0YWNoRXZlbnQoJ29uZXJyb3InLCBjb250ZXh0Lm9u
U2NyaXB0RXJyb3IpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBub2Rl
LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBjb250ZXh0Lm9uU2NyaXB0TG9hZCwgZmFsc2UpOwor
ICAgICAgICAgICAgICAgIG5vZGUuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCBjb250ZXh0Lm9u
U2NyaXB0RXJyb3IsIGZhbHNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG5vZGUuc3Jj
ID0gdXJsOworCisgICAgICAgICAgICAvL0ZvciBzb21lIGNhY2hlIGNhc2VzIGluIElFIDYtOCwg
dGhlIHNjcmlwdCBleGVjdXRlcyBiZWZvcmUgdGhlIGVuZAorICAgICAgICAgICAgLy9vZiB0aGUg
YXBwZW5kQ2hpbGQgZXhlY3V0aW9uLCBzbyB0byB0aWUgYW4gYW5vbnltb3VzIGRlZmluZQorICAg
ICAgICAgICAgLy9jYWxsIHRvIHRoZSBtb2R1bGUgbmFtZSAod2hpY2ggaXMgc3RvcmVkIG9uIHRo
ZSBub2RlKSwgaG9sZCBvbgorICAgICAgICAgICAgLy90byBhIHJlZmVyZW5jZSB0byB0aGlzIG5v
ZGUsIGJ1dCBjbGVhciBhZnRlciB0aGUgRE9NIGluc2VydGlvbi4KKyAgICAgICAgICAgIGN1cnJl
bnRseUFkZGluZ1NjcmlwdCA9IG5vZGU7CisgICAgICAgICAgICBpZiAoYmFzZUVsZW1lbnQpIHsK
KyAgICAgICAgICAgICAgICBoZWFkLmluc2VydEJlZm9yZShub2RlLCBiYXNlRWxlbWVudCk7Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGhlYWQuYXBwZW5kQ2hpbGQobm9k
ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjdXJyZW50bHlBZGRpbmdTY3JpcHQgPSBu
dWxsOworCisgICAgICAgICAgICByZXR1cm4gbm9kZTsKKyAgICAgICAgfSBlbHNlIGlmIChpc1dl
YldvcmtlcikgeworICAgICAgICAgICAgLy9JbiBhIHdlYiB3b3JrZXIsIHVzZSBpbXBvcnRTY3Jp
cHRzLiBUaGlzIGlzIG5vdCBhIHZlcnkKKyAgICAgICAgICAgIC8vZWZmaWNpZW50IHVzZSBvZiBp
bXBvcnRTY3JpcHRzLCBpbXBvcnRTY3JpcHRzIHdpbGwgYmxvY2sgdW50aWwKKyAgICAgICAgICAg
IC8vaXRzIHNjcmlwdCBpcyBkb3dubG9hZGVkIGFuZCBldmFsdWF0ZWQuIEhvd2V2ZXIsIGlmIHdl
YiB3b3JrZXJzCisgICAgICAgICAgICAvL2FyZSBpbiBwbGF5LCB0aGUgZXhwZWN0YXRpb24gdGhh
dCBhIGJ1aWxkIGhhcyBiZWVuIGRvbmUgc28gdGhhdAorICAgICAgICAgICAgLy9vbmx5IG9uZSBz
Y3JpcHQgbmVlZHMgdG8gYmUgbG9hZGVkIGFueXdheS4gVGhpcyBtYXkgbmVlZCB0byBiZQorICAg
ICAgICAgICAgLy9yZWV2YWx1YXRlZCBpZiBvdGhlciB1c2UgY2FzZXMgYmVjb21lIGNvbW1vbi4K
KyAgICAgICAgICAgIGltcG9ydFNjcmlwdHModXJsKTsKKworICAgICAgICAgICAgLy9BY2NvdW50
IGZvciBhbm9ueW1vdXMgbW9kdWxlcworICAgICAgICAgICAgY29udGV4dC5jb21wbGV0ZUxvYWQo
bW9kdWxlTmFtZSk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgZnVuY3Rpb24gZ2V0SW50ZXJh
Y3RpdmVTY3JpcHQoKSB7CisgICAgICAgIGlmIChpbnRlcmFjdGl2ZVNjcmlwdCAmJiBpbnRlcmFj
dGl2ZVNjcmlwdC5yZWFkeVN0YXRlID09PSAnaW50ZXJhY3RpdmUnKSB7CisgICAgICAgICAgICBy
ZXR1cm4gaW50ZXJhY3RpdmVTY3JpcHQ7CisgICAgICAgIH0KKworICAgICAgICBlYWNoUmV2ZXJz
ZShzY3JpcHRzKCksIGZ1bmN0aW9uIChzY3JpcHQpIHsKKyAgICAgICAgICAgIGlmIChzY3JpcHQu
cmVhZHlTdGF0ZSA9PT0gJ2ludGVyYWN0aXZlJykgeworICAgICAgICAgICAgICAgIHJldHVybiAo
aW50ZXJhY3RpdmVTY3JpcHQgPSBzY3JpcHQpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsK
KyAgICAgICAgcmV0dXJuIGludGVyYWN0aXZlU2NyaXB0OworICAgIH0KKworICAgIC8vTG9vayBm
b3IgYSBkYXRhLW1haW4gc2NyaXB0IGF0dHJpYnV0ZSwgd2hpY2ggY291bGQgYWxzbyBhZGp1c3Qg
dGhlIGJhc2VVcmwuCisgICAgaWYgKGlzQnJvd3NlcikgeworICAgICAgICAvL0ZpZ3VyZSBvdXQg
YmFzZVVybC4gR2V0IGl0IGZyb20gdGhlIHNjcmlwdCB0YWcgd2l0aCByZXF1aXJlLmpzIGluIGl0
LgorICAgICAgICBlYWNoUmV2ZXJzZShzY3JpcHRzKCksIGZ1bmN0aW9uIChzY3JpcHQpIHsKKyAg
ICAgICAgICAgIC8vU2V0IHRoZSAnaGVhZCcgd2hlcmUgd2UgY2FuIGFwcGVuZCBjaGlsZHJlbiBi
eQorICAgICAgICAgICAgLy91c2luZyB0aGUgc2NyaXB0J3MgcGFyZW50LgorICAgICAgICAgICAg
aWYgKCFoZWFkKSB7CisgICAgICAgICAgICAgICAgaGVhZCA9IHNjcmlwdC5wYXJlbnROb2RlOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvL0xvb2sgZm9yIGEgZGF0YS1tYWluIGF0dHJp
YnV0ZSB0byBzZXQgbWFpbiBzY3JpcHQgZm9yIHRoZSBwYWdlCisgICAgICAgICAgICAvL3RvIGxv
YWQuIElmIGl0IGlzIHRoZXJlLCB0aGUgcGF0aCB0byBkYXRhIG1haW4gYmVjb21lcyB0aGUKKyAg
ICAgICAgICAgIC8vYmFzZVVybCwgaWYgaXQgaXMgbm90IGFscmVhZHkgc2V0LgorICAgICAgICAg
ICAgZGF0YU1haW4gPSBzY3JpcHQuZ2V0QXR0cmlidXRlKCdkYXRhLW1haW4nKTsKKyAgICAgICAg
ICAgIGlmIChkYXRhTWFpbikgeworICAgICAgICAgICAgICAgIC8vU2V0IGZpbmFsIGJhc2VVcmwg
aWYgdGhlcmUgaXMgbm90IGFscmVhZHkgYW4gZXhwbGljaXQgb25lLgorICAgICAgICAgICAgICAg
IGlmICghY2ZnLmJhc2VVcmwpIHsKKyAgICAgICAgICAgICAgICAgICAgLy9QdWxsIG9mZiB0aGUg
ZGlyZWN0b3J5IG9mIGRhdGEtbWFpbiBmb3IgdXNlIGFzIHRoZQorICAgICAgICAgICAgICAgICAg
ICAvL2Jhc2VVcmwuCisgICAgICAgICAgICAgICAgICAgIHNyYyA9IGRhdGFNYWluLnNwbGl0KCcv
Jyk7CisgICAgICAgICAgICAgICAgICAgIG1haW5TY3JpcHQgPSBzcmMucG9wKCk7CisgICAgICAg
ICAgICAgICAgICAgIHN1YlBhdGggPSBzcmMubGVuZ3RoID8gc3JjLmpvaW4oJy8nKSAgKyAnLycg
OiAnLi8nOworCisgICAgICAgICAgICAgICAgICAgIGNmZy5iYXNlVXJsID0gc3ViUGF0aDsKKyAg
ICAgICAgICAgICAgICAgICAgZGF0YU1haW4gPSBtYWluU2NyaXB0OworICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgIC8vU3RyaXAgb2ZmIGFueSB0cmFpbGluZyAuanMgc2luY2Ug
ZGF0YU1haW4gaXMgbm93CisgICAgICAgICAgICAgICAgLy9saWtlIGEgbW9kdWxlIG5hbWUuCisg
ICAgICAgICAgICAgICAgZGF0YU1haW4gPSBkYXRhTWFpbi5yZXBsYWNlKGpzU3VmZml4UmVnRXhw
LCAnJyk7CisKKyAgICAgICAgICAgICAgICAvL1B1dCB0aGUgZGF0YS1tYWluIHNjcmlwdCBpbiB0
aGUgZmlsZXMgdG8gbG9hZC4KKyAgICAgICAgICAgICAgICBjZmcuZGVwcyA9IGNmZy5kZXBzID8g
Y2ZnLmRlcHMuY29uY2F0KGRhdGFNYWluKSA6IFtkYXRhTWFpbl07CisKKyAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfQorCisgICAg
LyoqCisgICAgICogVGhlIGZ1bmN0aW9uIHRoYXQgaGFuZGxlcyBkZWZpbml0aW9ucyBvZiBtb2R1
bGVzLiBEaWZmZXJzIGZyb20KKyAgICAgKiByZXF1aXJlKCkgaW4gdGhhdCBhIHN0cmluZyBmb3Ig
dGhlIG1vZHVsZSBzaG91bGQgYmUgdGhlIGZpcnN0IGFyZ3VtZW50LAorICAgICAqIGFuZCB0aGUg
ZnVuY3Rpb24gdG8gZXhlY3V0ZSBhZnRlciBkZXBlbmRlbmNpZXMgYXJlIGxvYWRlZCBzaG91bGQK
KyAgICAgKiByZXR1cm4gYSB2YWx1ZSB0byBkZWZpbmUgdGhlIG1vZHVsZSBjb3JyZXNwb25kaW5n
IHRvIHRoZSBmaXJzdCBhcmd1bWVudCdzCisgICAgICogbmFtZS4KKyAgICAgKi8KKyAgICBkZWZp
bmUgPSBmdW5jdGlvbiAobmFtZSwgZGVwcywgY2FsbGJhY2spIHsKKyAgICAgICAgdmFyIG5vZGUs
IGNvbnRleHQ7CisKKyAgICAgICAgLy9BbGxvdyBmb3IgYW5vbnltb3VzIG1vZHVsZXMKKyAgICAg
ICAgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJykgeworICAgICAgICAgICAgLy9BZGp1c3Qg
YXJncyBhcHByb3ByaWF0ZWx5CisgICAgICAgICAgICBjYWxsYmFjayA9IGRlcHM7CisgICAgICAg
ICAgICBkZXBzID0gbmFtZTsKKyAgICAgICAgICAgIG5hbWUgPSBudWxsOworICAgICAgICB9CisK
KyAgICAgICAgLy9UaGlzIG1vZHVsZSBtYXkgbm90IGhhdmUgZGVwZW5kZW5jaWVzCisgICAgICAg
IGlmICghaXNBcnJheShkZXBzKSkgeworICAgICAgICAgICAgY2FsbGJhY2sgPSBkZXBzOworICAg
ICAgICAgICAgZGVwcyA9IFtdOworICAgICAgICB9CisKKyAgICAgICAgLy9JZiBubyBuYW1lLCBh
bmQgY2FsbGJhY2sgaXMgYSBmdW5jdGlvbiwgdGhlbiBmaWd1cmUgb3V0IGlmIGl0IGEKKyAgICAg
ICAgLy9Db21tb25KUyB0aGluZyB3aXRoIGRlcGVuZGVuY2llcy4KKyAgICAgICAgaWYgKCFkZXBz
Lmxlbmd0aCAmJiBpc0Z1bmN0aW9uKGNhbGxiYWNrKSkgeworICAgICAgICAgICAgLy9SZW1vdmUg
Y29tbWVudHMgZnJvbSB0aGUgY2FsbGJhY2sgc3RyaW5nLAorICAgICAgICAgICAgLy9sb29rIGZv
ciByZXF1aXJlIGNhbGxzLCBhbmQgcHVsbCB0aGVtIGludG8gdGhlIGRlcGVuZGVuY2llcywKKyAg
ICAgICAgICAgIC8vYnV0IG9ubHkgaWYgdGhlcmUgYXJlIGZ1bmN0aW9uIGFyZ3MuCisgICAgICAg
ICAgICBpZiAoY2FsbGJhY2subGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgY2FsbGJhY2sKKyAg
ICAgICAgICAgICAgICAgICAgLnRvU3RyaW5nKCkKKyAgICAgICAgICAgICAgICAgICAgLnJlcGxh
Y2UoY29tbWVudFJlZ0V4cCwgJycpCisgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKGNqc1Jl
cXVpcmVSZWdFeHAsIGZ1bmN0aW9uIChtYXRjaCwgZGVwKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBkZXBzLnB1c2goZGVwKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAg
ICAgICAgICAvL01heSBiZSBhIENvbW1vbkpTIHRoaW5nIGV2ZW4gd2l0aG91dCByZXF1aXJlIGNh
bGxzLCBidXQgc3RpbGwKKyAgICAgICAgICAgICAgICAvL2NvdWxkIHVzZSBleHBvcnRzLCBhbmQg
bW9kdWxlLiBBdm9pZCBkb2luZyBleHBvcnRzIGFuZCBtb2R1bGUKKyAgICAgICAgICAgICAgICAv
L3dvcmsgdGhvdWdoIGlmIGl0IGp1c3QgbmVlZHMgcmVxdWlyZS4KKyAgICAgICAgICAgICAgICAv
L1JFUVVJUkVTIHRoZSBmdW5jdGlvbiB0byBleHBlY3QgdGhlIENvbW1vbkpTIHZhcmlhYmxlcyBp
biB0aGUKKyAgICAgICAgICAgICAgICAvL29yZGVyIGxpc3RlZCBiZWxvdy4KKyAgICAgICAgICAg
ICAgICBkZXBzID0gKGNhbGxiYWNrLmxlbmd0aCA9PT0gMSA/IFsncmVxdWlyZSddIDogWydyZXF1
aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJ10pLmNvbmNhdChkZXBzKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIC8vSWYgaW4gSUUgNi04IGFuZCBoaXQgYW4gYW5vbnltb3Vz
IGRlZmluZSgpIGNhbGwsIGRvIHRoZSBpbnRlcmFjdGl2ZQorICAgICAgICAvL3dvcmsuCisgICAg
ICAgIGlmICh1c2VJbnRlcmFjdGl2ZSkgeworICAgICAgICAgICAgbm9kZSA9IGN1cnJlbnRseUFk
ZGluZ1NjcmlwdCB8fCBnZXRJbnRlcmFjdGl2ZVNjcmlwdCgpOworICAgICAgICAgICAgaWYgKG5v
ZGUpIHsKKyAgICAgICAgICAgICAgICBpZiAoIW5hbWUpIHsKKyAgICAgICAgICAgICAgICAgICAg
bmFtZSA9IG5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLXJlcXVpcmVtb2R1bGUnKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgY29udGV4dCA9IGNvbnRleHRzW25vZGUuZ2V0QXR0
cmlidXRlKCdkYXRhLXJlcXVpcmVjb250ZXh0JyldOworICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgLy9BbHdheXMgc2F2ZSBvZmYgZXZhbHVhdGluZyB0aGUgZGVmIGNhbGwgdW50
aWwgdGhlIHNjcmlwdCBvbmxvYWQgaGFuZGxlci4KKyAgICAgICAgLy9UaGlzIGFsbG93cyBtdWx0
aXBsZSBtb2R1bGVzIHRvIGJlIGluIGEgZmlsZSB3aXRob3V0IHByZW1hdHVyZWx5CisgICAgICAg
IC8vdHJhY2luZyBkZXBlbmRlbmNpZXMsIGFuZCBhbGxvd3MgZm9yIGFub255bW91cyBtb2R1bGUg
c3VwcG9ydCwKKyAgICAgICAgLy93aGVyZSB0aGUgbW9kdWxlIG5hbWUgaXMgbm90IGtub3duIHVu
dGlsIHRoZSBzY3JpcHQgb25sb2FkIGV2ZW50CisgICAgICAgIC8vb2NjdXJzLiBJZiBubyBjb250
ZXh0LCB1c2UgdGhlIGdsb2JhbCBxdWV1ZSwgYW5kIGdldCBpdCBwcm9jZXNzZWQKKyAgICAgICAg
Ly9pbiB0aGUgb25zY3JpcHQgbG9hZCBjYWxsYmFjay4KKyAgICAgICAgKGNvbnRleHQgPyBjb250
ZXh0LmRlZlF1ZXVlIDogZ2xvYmFsRGVmUXVldWUpLnB1c2goW25hbWUsIGRlcHMsIGNhbGxiYWNr
XSk7CisgICAgfTsKKworICAgIGRlZmluZS5hbWQgPSB7CisgICAgICAgIGpRdWVyeTogdHJ1ZQor
ICAgIH07CisKKworICAgIC8qKgorICAgICAqIEV4ZWN1dGVzIHRoZSB0ZXh0LiBOb3JtYWxseSBq
dXN0IHVzZXMgZXZhbCwgYnV0IGNhbiBiZSBtb2RpZmllZAorICAgICAqIHRvIHVzZSBhIGJldHRl
ciwgZW52aXJvbm1lbnQtc3BlY2lmaWMgY2FsbC4gT25seSB1c2VkIGZvciB0cmFuc3BpbGluZwor
ICAgICAqIGxvYWRlciBwbHVnaW5zLCBub3QgZm9yIHBsYWluIEpTIG1vZHVsZXMuCisgICAgICog
QHBhcmFtIHtTdHJpbmd9IHRleHQgdGhlIHRleHQgdG8gZXhlY3V0ZS9ldmFsdWF0ZS4KKyAgICAg
Ki8KKyAgICByZXEuZXhlYyA9IGZ1bmN0aW9uICh0ZXh0KSB7CisgICAgICAgIC8qanNsaW50IGV2
aWw6IHRydWUgKi8KKyAgICAgICAgcmV0dXJuIGV2YWwodGV4dCk7CisgICAgfTsKKworICAgIC8v
U2V0IHVwIHdpdGggY29uZmlnIGluZm8uCisgICAgcmVxKGNmZyk7Cit9KHRoaXMpKTsKSW5kZXg6
IFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvdGVz
dC90ZXN0LW1haW4uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5C
ZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC90ZXN0L3Rlc3QtbWFpbi5qcwkocmV2aXNpb24gMCkK
KysrIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAv
dGVzdC90ZXN0LW1haW4uanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMiBAQAorJ3VzZSBz
dHJpY3QnOworCit2YXIgdGVzdHMgPSBPYmplY3Qua2V5cyh3aW5kb3cuX19rYXJtYV9fLmZpbGVz
KS5maWx0ZXIoZnVuY3Rpb24gKGZpbGUpIHsKKyAgcmV0dXJuICgvX3NwZWNcLmpzJC8udGVzdChm
aWxlKSk7Cit9KTsKKworcmVxdWlyZWpzLmNvbmZpZyh7CisgIC8vIEthcm1hIHNlcnZlcyBmaWxl
cyBmcm9tICcvYmFzZScKKyAgYmFzZVVybDogJy9iYXNlJywKKworICBwYXRoczogeworICAgICdm
bGlnaHQnOiAnY29tcG9uZW50cy9mbGlnaHQnCisgIH0sCisKKyAgLy8gYXNrIFJlcXVpcmUuanMg
dG8gbG9hZCB0aGVzZSBmaWxlcyAoYWxsIG91ciB0ZXN0cykKKyAgZGVwczogdGVzdHMsCisKKyAg
Ly8gc3RhcnQgdGVzdCBydW4sIG9uY2UgUmVxdWlyZS5qcyBpcyBkb25lCisgIGNhbGxiYWNrOiB3
aW5kb3cuX19rYXJtYV9fLnN0YXJ0Cit9KTsKKworamFzbWluZS5nZXRGaXh0dXJlcygpLmZpeHR1
cmVzUGF0aCA9ICdiYXNlL3Rlc3QvZml4dHVyZXMnOwpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9E
b1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC90ZXN0L2ZpeHR1cmVzL2NvbXBvc2Vf
Ym94Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9m
bGlnaHRqcy1leGFtcGxlLWFwcC90ZXN0L2ZpeHR1cmVzL2NvbXBvc2VfYm94Lmh0bWwJKHJldmlz
aW9uIDApCisrKyBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1w
bGUtYXBwL3Rlc3QvZml4dHVyZXMvY29tcG9zZV9ib3guaHRtbAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDE2IEBACis8ZGl2IGlkPSJuZXdfbWFpbCI+PC9kaXY+Cis8ZGl2IGlkPSJjb21wb3Nl
X2JveCIgY2xhc3M9ImNvbXBvc2UtYm94IG1vZGFsIGhpZGUgZmFkZSBpbiIgc3R5bGU9ImRpc3Bs
YXk6IGJsb2NrOyI+CisgIDxkaXYgaWQ9ImNvbXBvc2VfdG8iIGNsYXNzPSJtb2RhbC1oZWFkZXIg
Y29tcG9zZS1oZWFkZXIiPgorICAgIFRvOiA8c2VsZWN0IGlkPSJyZWNpcGllbnRfc2VsZWN0Ij4K
KyAgICAgIDxvcHRpb24gaWQ9InJlY2lwaWVudF9oaW50IiBjbGFzcz0iaGludCIgc3R5bGU9ImNv
bG9yOiNDQUNBQ0EiPltTZWxlY3QgUmVjaXBpZW50XTwvb3B0aW9uPgorICAgIDwvc2VsZWN0Pgor
ICA8L2Rpdj4KKyAgPGRpdiBjbGFzcz0ibW9kYWwtYm9keSBjb21wb3NlLWJvZHkiPgorICAgIDxk
aXYgaWQ9ImNvbXBvc2Vfc3ViamVjdCIgY2xhc3M9ImhpbnQiIGNvbnRlbnRlZGl0YWJsZT0idHJ1
ZSI+U3ViamVjdDwvZGl2PgorICAgIDxkaXYgaWQ9ImNvbXBvc2VfbWVzc2FnZSIgY2xhc3M9Imhp
bnQiIGNvbnRlbnRlZGl0YWJsZT0idHJ1ZSI+TWVzc2FnZTwvZGl2PgorICA8L2Rpdj4KKyAgPGRp
diBjbGFzcz0ibW9kYWwtZm9vdGVyIj4KKyAgICA8YnV0dG9uIGlkPSJzZW5kX2NvbXBvc2VkIiBk
aXNhYmxlZD0iZGlzYWJsZWQiIGNsYXNzPSJidG4gYnRuLXByaW1hcnkiPlNlbmQ8L2J1dHRvbj4K
KyAgICA8YnV0dG9uIGlkPSJjYW5jZWxfY29tcG9zZWQiIGNsYXNzPSJidG4iPkNhbmNlbDwvYnV0
dG9uPgorICA8L2Rpdj4KKzwvZGl2PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6
IFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvdGVz
dC9maXh0dXJlcy9tYWlsX2NvbnRyb2xzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VU
ZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC90ZXN0L2ZpeHR1cmVzL21h
aWxfY29udHJvbHMuaHRtbAkocmV2aXNpb24gMCkKKysrIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VF
dmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvdGVzdC9maXh0dXJlcy9tYWlsX2NvbnRyb2xz
Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4IEBACis8ZGl2IGlkPSJtYWlsX2NvbnRy
b2xzIiBjbGFzcz0iYnRuLXRvb2xiYXIiPgorICA8ZGl2IGNsYXNzPSJidG4tZ3JvdXAiPgorICAg
IDxidXR0b24gaWQ9ImRlbGV0ZV9tYWlsIiBjbGFzcz0iYnRuIG1haWwtYWN0aW9uIiBkaXNhYmxl
ZD0iZGlzYWJsZWQiPjxpIGNsYXNzPSJpY29uLXRyYXNoIj48L2k+IGRlbGV0ZTwvYnV0dG9uPgor
ICAgIDxidXR0b24gaWQ9Im1vdmVfbWFpbCIgY2xhc3M9ImJ0biBtYWlsLWFjdGlvbiIgZGlzYWJs
ZWQ9ImRpc2FibGVkIj48aSBjbGFzcz0iaWNvbi1tb3ZlIj48L2k+IG1vdmU8L2J1dHRvbj4KKyAg
ICA8YnV0dG9uIGlkPSJmb3J3YXJkIiBjbGFzcz0iYnRuIGNvbXBvc2UgbWFpbC1hY3Rpb24gc2lu
Z2xlLWl0ZW0iIGRpc2FibGVkPSJkaXNhYmxlZCI+PGkgY2xhc3M9Imljb24tYXJyb3ctcmlnaHQi
PjwvaT4gZm9yd2FyZDwvYnV0dG9uPgorICAgIDxidXR0b24gaWQ9InJlcGx5IiBjbGFzcz0iYnRu
IGNvbXBvc2UgbWFpbC1hY3Rpb24gc2luZ2xlLWl0ZW0iIGRpc2FibGVkPSJkaXNhYmxlZCI+PGkg
Y2xhc3M9Imljb24tcGVuY2lsIj48L2k+IHJlcGx5PC9idXR0b24+CisgIDwvZGl2PgorPC9kaXY+
ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9Eb1lv
dUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC90ZXN0L2ZpeHR1cmVzL21haWxfaXRlbXMu
aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdo
dGpzLWV4YW1wbGUtYXBwL3Rlc3QvZml4dHVyZXMvbWFpbF9pdGVtcy5odG1sCShyZXZpc2lvbiAw
KQorKysgUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFw
cC90ZXN0L2ZpeHR1cmVzL21haWxfaXRlbXMuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDE5IEBACis8dHIgaWQ9Im1haWxfMSIgY2xhc3M9Im1haWwtaXRlbSI+CisgIDx0ZCBjbGFzcz0i
c3BhbjEiPjxzcGFuPiZuYnNwOzwvc3Bhbj48L3RkPgorICA8dGQgY2xhc3M9InNwYW4yIG1haWxD
b250YWN0Ij5iaWxsPC90ZD4KKyAgPHRkIGNsYXNzPSJzcGFuOCI+PHNwYW4gY2xhc3M9Im1haWxT
dWJqZWN0Ij5Db25zZWN0ZXR1ciBhZGlwaXNjaW5nIGVsaXQ8L3NwYW4+CisgIDxzcGFuIGNsYXNz
PSJtYWlsTWVzc2FnZSI+LSA8YSBocmVmPSIjIj5WZXN0aWJ1bHVtIHZlc3RpYnVsdW08L2E+PC9z
cGFuPjwvdGQ+Cis8L3RyPgorPHRyIGlkPSJtYWlsXzIiIGNsYXNzPSJtYWlsLWl0ZW0iPgorICA8
dGQgY2xhc3M9InNwYW4xIj48c3BhbiBjbGFzcz0ibGFiZWwgbGFiZWwtaW1wb3J0YW50Ij5JbXBv
cnRhbnQ8L3NwYW4+PC90ZD4KKyAgPHRkIGNsYXNzPSJzcGFuMiBtYWlsQ29udGFjdCI+amFuZTwv
dGQ+CisgIDx0ZCBjbGFzcz0ic3BhbjgiPjxzcGFuIGNsYXNzPSJtYWlsU3ViamVjdCI+TmVxdWUg
cG9ycm8gcXVpc3F1YW0gdmVsaXQhITwvc3Bhbj4KKyAgPHNwYW4gY2xhc3M9Im1haWxNZXNzYWdl
Ij4tIDxhIGhyZWY9IiMiPkN1cmFiaXR1ciBzb2xsaWNpdHVkaW48L2E+PC9zcGFuPjwvdGQ+Cis8
L3RyPgorPHRyIGlkPSJtYWlsXzMiIGNsYXNzPSJtYWlsLWl0ZW0iPgorICA8dGQgY2xhc3M9InNw
YW4xIj48c3BhbiBjbGFzcz0ibGFiZWwgbGFiZWwtaW1wb3J0YW50Ij5JbXBvcnRhbnQ8L3NwYW4+
PC90ZD4KKyAgPHRkIGNsYXNzPSJzcGFuMiBtYWlsQ29udGFjdCI+Ym9iPC90ZD4KKyAgPHRkIGNs
YXNzPSJzcGFuOCI+PHNwYW4gY2xhc3M9Im1haWxTdWJqZWN0Ij5Qcm9pbiBlZ2VzdGFzIGFsaXF1
YW0gOik8L3NwYW4+CisgIDxzcGFuIGNsYXNzPSJtYWlsTWVzc2FnZSI+LSA8YSBocmVmPSIjIj5B
ZW5lYW4gbmVjIGVyYXQgaWQ8L2E+PC9zcGFuPjwvdGQ+Cis8L3RyPgorCkluZGV4OiBQZXJmb3Jt
YW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL3Rlc3QvZml4dHVy
ZXMvbW92ZV90b19zZWxlY3Rvci5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMv
RG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvdGVzdC9maXh0dXJlcy9tb3ZlX3Rv
X3NlbGVjdG9yLmh0bWwJKHJldmlzaW9uIDApCisrKyBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZl
bkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL3Rlc3QvZml4dHVyZXMvbW92ZV90b19zZWxlY3Rv
ci5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOCBAQAorPGRpdiBpZD0ibW92ZV9tYWls
Ij48L2Rpdj4KKzxkaXYgaWQ9Im1vdmVfdG9fc2VsZWN0b3IiIGNsYXNzPSJtb3ZlLXRvLXNlbGVj
dG9yIGhpZGUiPgorICA8dWwgY2xhc3M9Im5hdiBuYXYtbGlzdCI+CisgICAgPGxpIGlkPSJsYXRl
ciIgY2xhc3M9Im1vdmUtdG8taXRlbSI+bGF0ZXI8L2xpPgorICAgIDxsaSBpZD0ic2VudCIgY2xh
c3M9Im1vdmUtdG8taXRlbSI+c2VudDwvbGk+CisgICAgPGxpIGlkPSJ0cmFzaCIgY2xhc3M9Im1v
dmUtdG8taXRlbSI+dHJhc2g8L2xpPgorICA8L3VsPgorPC9kaXY+ClwgTm8gbmV3bGluZSBhdCBl
bmQgb2YgZmlsZQpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRq
cy1leGFtcGxlLWFwcC90ZXN0L3NwZWMvY29tcG9uZW50X2RhdGEvY29tcG9zZV9ib3hfc3BlYy5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpz
LWV4YW1wbGUtYXBwL3Rlc3Qvc3BlYy9jb21wb25lbnRfZGF0YS9jb21wb3NlX2JveF9zcGVjLmpz
CShyZXZpc2lvbiAwKQorKysgUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRq
cy1leGFtcGxlLWFwcC90ZXN0L3NwZWMvY29tcG9uZW50X2RhdGEvY29tcG9zZV9ib3hfc3BlYy5q
cwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ2IEBACisidXNlIHN0cmljdCI7CisKK2Rlc2Ny
aWJlQ29tcG9uZW50KCdhcHAvY29tcG9uZW50X2RhdGEvY29tcG9zZV9ib3gnLCBmdW5jdGlvbigp
IHsKKyAgYmVmb3JlRWFjaChmdW5jdGlvbigpIHsKKyAgICBzZXR1cENvbXBvbmVudCgKKyAgICAg
IHsKKyAgICAgICAgcmVjaXBpZW50SGludElkOiAiYWJjIiwKKyAgICAgICAgZGF0YVN0b3JlOiB7
CisgICAgICAgICAgY29udGFjdHM6IFsKKyAgICAgICAgICAgIHsiaWQiOiAiY29udGFjdF8zIn0s
CisgICAgICAgICAgICB7ImlkIjogImNvbnRhY3RfNSJ9CisgICAgICAgICAgXSwKKyAgICAgICAg
ICBtYWlsOiBbCisgICAgICAgICAgICB7aWQ6ICJtYWlsXzEiLCBjb250YWN0X2lkOiAiY29udGFj
dF8zIiwgc3ViamVjdDoiYmxhaCIsIG1lc3NhZ2U6ICJibHVnaCIsIGZvbGRlcnM6IFsnaW5ib3gn
XX0sCisgICAgICAgICAgICB7aWQ6ICJtYWlsXzIiLCBjb250YWN0X2lkOiAiY29udGFjdF81Iiwg
c3ViamVjdDoiYmxlZSIsIG1lc3NhZ2U6ICJibG9vbyIsIGZvbGRlcnM6IFsnbGF0ZXInXX0KKyAg
ICAgICAgICBdCisgICAgICAgIH0KKyAgICAgIH0KKyAgICApOworICB9KTsKKworICBpdCgnc2Vy
dmVzIGNvbXBvc2UgYm94IHdoZW4gcmVxdWVzdGVkJywgZnVuY3Rpb24oKSB7CisgICAgc3B5T25F
dmVudChkb2N1bWVudCwgJ2RhdGFDb21wb3NlQm94U2VydmVkJyk7CisgICAgdGhpcy5jb21wb25l
bnQudHJpZ2dlcigndWlDb21wb3NlQm94UmVxdWVzdGVkJywge30pOworICAgIGV4cGVjdCgnZGF0
YUNvbXBvc2VCb3hTZXJ2ZWQnKS50b0hhdmVCZWVuVHJpZ2dlcmVkT24oZG9jdW1lbnQpOworICB9
KTsKKworICBpdCgncmV0dXJucyB0aGUgY29udGFjdF9pZCB3aGVuIGdldFJlY2lwaWVudElkIGlz
IHBhc3NlZCBhIHJlbGF0ZWRNYWlsSWQnLCBmdW5jdGlvbigpIHsKKyAgICBleHBlY3QodGhpcy5j
b21wb25lbnQuZ2V0UmVjaXBpZW50SWQoJ3JlcGx5JywgJ21haWxfMScpKS50b0JlKCdjb250YWN0
XzMnKTsKKyAgfSk7CisKKyAgaXQoJ3JldHVybnMgdGhlIHJlY2lwaWVudEhpbnRJZCB3aGVuIGdl
dFJlY2lwaWVudElkIGlzIG5vdCBwYXNzZWQgYSByZWxhdGVkTWFpbElkJywgZnVuY3Rpb24oKSB7
CisgICAgZXhwZWN0KHRoaXMuY29tcG9uZW50LmdldFJlY2lwaWVudElkKCdyZXBseScpKS50b0Jl
KHRoaXMuY29tcG9uZW50LmF0dHIucmVjaXBpZW50SGludElkKTsKKyAgfSk7CisKKyAgaXQoJ3Nl
bmRzIGVtYWlsIHdoZW4gcmVxdWVzdGVkJywgZnVuY3Rpb24oKSB7CisgICAgdmFyIGRhdGFNYWls
SXRlbXNSZWZyZXNoUmVxdWVzdGVkID0gc3B5T25FdmVudChkb2N1bWVudCwgJ2RhdGFNYWlsSXRl
bXNSZWZyZXNoUmVxdWVzdGVkJyk7CisgICAgdGhpcy5jb21wb25lbnQudHJpZ2dlcigndWlTZW5k
UmVxdWVzdGVkJywge3RvX2lkOiAnY29udGFjdF85Jywgc3ViamVjdDogJ2InLCBtZXNzYWdlOiAn
Yyd9KTsKKyAgICBleHBlY3QoJ2RhdGFNYWlsSXRlbXNSZWZyZXNoUmVxdWVzdGVkJykudG9IYXZl
QmVlblRyaWdnZXJlZE9uKGRvY3VtZW50KTsKKyAgICB2YXIgbmV3TWFpbCA9IHRoaXMuY29tcG9u
ZW50LmF0dHIuZGF0YVN0b3JlLm1haWwuZmlsdGVyKGZ1bmN0aW9uKGUpIHtyZXR1cm4gZS5jb250
YWN0X2lkID09ICdjb250YWN0XzknfSlbMF07CisgICAgZXhwZWN0KG5ld01haWwpLnRvQmVEZWZp
bmVkKCk7CisgICAgZXhwZWN0KG5ld01haWwuY29udGFjdF9pZCkudG9CZSgnY29udGFjdF85Jyk7
CisgICAgZXhwZWN0KG5ld01haWwuc3ViamVjdCkudG9CZSgnYicpOworICAgIGV4cGVjdChuZXdN
YWlsLm1lc3NhZ2UpLnRvQmUoJ2MnKTsKKyAgfSk7Cit9KTsKSW5kZXg6IFBlcmZvcm1hbmNlVGVz
dHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvdGVzdC9zcGVjL2NvbXBvbmVu
dF9kYXRhL21haWxfaXRlbXNfc3BlYy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3Rz
L0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL3Rlc3Qvc3BlYy9jb21wb25lbnRf
ZGF0YS9tYWlsX2l0ZW1zX3NwZWMuanMJKHJldmlzaW9uIDApCisrKyBQZXJmb3JtYW5jZVRlc3Rz
L0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL3Rlc3Qvc3BlYy9jb21wb25lbnRf
ZGF0YS9tYWlsX2l0ZW1zX3NwZWMuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MiBAQAor
InVzZSBzdHJpY3QiOworCitkZXNjcmliZUNvbXBvbmVudCgnYXBwL2NvbXBvbmVudF9kYXRhL21h
aWxfaXRlbXMnLCBmdW5jdGlvbigpIHsKKyAgYmVmb3JlRWFjaChmdW5jdGlvbigpIHsKKyAgICBz
ZXR1cENvbXBvbmVudCgKKyAgICAgIHsKKyAgICAgICAgZGF0YVN0b3JlOiB7CisgICAgICAgICAg
Y29udGFjdHM6IFsKKyAgICAgICAgICAgIHsiaWQiOiAiY29udGFjdF8zIn0sCisgICAgICAgICAg
ICB7ImlkIjogImNvbnRhY3RfNSJ9CisgICAgICAgICAgXSwKKyAgICAgICAgICBtYWlsOiBbCisg
ICAgICAgICAgICB7aWQ6ICJtYWlsXzEiLCBjb250YWN0X2lkOiAiY29udGFjdF8zIiwgc3ViamVj
dDoiYmxhaCIsIG1lc3NhZ2U6ICJibHVnaCIsIGZvbGRlcnM6IFsnaW5ib3gnXX0sCisgICAgICAg
ICAgICB7aWQ6ICJtYWlsXzIiLCBjb250YWN0X2lkOiAiY29udGFjdF81Iiwgc3ViamVjdDoiYmxl
ZSIsIG1lc3NhZ2U6ICJibG9vbyIsIGZvbGRlcnM6IFsnbGF0ZXInXX0KKyAgICAgICAgICBdCisg
ICAgICAgIH0KKyAgICAgIH0KKyAgICApOworICB9KTsKKworICBpdCgnc2VydmVzIG1haWwgaXRl
bXMgd2hlbiByZXF1ZXN0ZWQnLCBmdW5jdGlvbigpIHsKKyAgICBzcHlPbkV2ZW50KGRvY3VtZW50
LCAnZGF0YU1haWxJdGVtc1NlcnZlZCcpOworICAgIHRoaXMuY29tcG9uZW50LnRyaWdnZXIoJ3Vp
TWFpbEl0ZW1zUmVxdWVzdGVkJywge2ZvbGRlcjogJ2luYm94J30pOworICAgIGV4cGVjdCgnZGF0
YU1haWxJdGVtc1NlcnZlZCcpLnRvSGF2ZUJlZW5UcmlnZ2VyZWRPbihkb2N1bWVudCk7CisgIH0p
OworCisgIGl0KCdzaG91bGQgY29sbGF0ZSBpdGVtcyBmb3IgZ2l2ZW4gZm9sZGVyIHdoZW4gYXNz
ZW1ibGVJdGVtcyBpcyBpbnZva2VkIHdpdGggZm9sZGVyJywgZnVuY3Rpb24oKSB7CisgICAgdmFy
IGl0ZW1zID0gdGhpcy5jb21wb25lbnQuYXNzZW1ibGVJdGVtcygnaW5ib3gnKTsKKyAgICBleHBl
Y3QoaXRlbXMubGVuZ3RoKS50b0JlKDEpOworICAgIGl0ZW1zID0gdGhpcy5jb21wb25lbnQuYXNz
ZW1ibGVJdGVtcygnc2VudCcpOworICAgIGV4cGVjdChpdGVtcy5sZW5ndGgpLnRvQmUoMCk7Cisg
ICAgaXRlbXMgPSB0aGlzLmNvbXBvbmVudC5hc3NlbWJsZUl0ZW1zKCdsYXRlcicpOworICAgIGV4
cGVjdChpdGVtcy5sZW5ndGgpLnRvQmUoMSk7CisgIH0pOworCisgIGl0KCdzZXJ2ZXMgbWFpbCBp
dGVtcyBhZnRlciByZWZyZXNoJywgZnVuY3Rpb24oKSB7CisgICAgc3B5T25FdmVudChkb2N1bWVu
dCwgJ2RhdGFNYWlsSXRlbXNTZXJ2ZWQnKTsKKyAgICB0aGlzLmNvbXBvbmVudC50cmlnZ2VyKCdk
YXRhTWFpbEl0ZW1zUmVmcmVzaFJlcXVlc3RlZCcsIHt9KTsKKyAgICBleHBlY3QoJ2RhdGFNYWls
SXRlbXNTZXJ2ZWQnKS50b0hhdmVCZWVuVHJpZ2dlcmVkT24oZG9jdW1lbnQpOworICB9KTsKKwor
fSk7CkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1w
bGUtYXBwL3Rlc3Qvc3BlYy9jb21wb25lbnRfZGF0YS9tb3ZlX3RvX3NwZWMuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFw
cC90ZXN0L3NwZWMvY29tcG9uZW50X2RhdGEvbW92ZV90b19zcGVjLmpzCShyZXZpc2lvbiAwKQor
KysgUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC90
ZXN0L3NwZWMvY29tcG9uZW50X2RhdGEvbW92ZV90b19zcGVjLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNDQgQEAKKyJ1c2Ugc3RyaWN0IjsKKworZGVzY3JpYmVDb21wb25lbnQoJ2FwcC9j
b21wb25lbnRfZGF0YS9tb3ZlX3RvJywgZnVuY3Rpb24oKSB7CisgIGJlZm9yZUVhY2goZnVuY3Rp
b24oKSB7CisgICAgc2V0dXBDb21wb25lbnQoCisgICAgICB7CisgICAgICAgIHJlY2lwaWVudEhp
bnRJZDogJ2FiYycsCisgICAgICAgIGRhdGFTdG9yZTogeworICAgICAgICAgIGZvbGRlcnM6IFsi
aW5ib3giLCAibGF0ZXIiLCAic2VudCIsICJ0cmFzaCJdLAorICAgICAgICAgIGNvbnRhY3RzOiBb
CisgICAgICAgICAgICB7ImlkIjogImNvbnRhY3RfMyJ9LAorICAgICAgICAgICAgeyJpZCI6ICJj
b250YWN0XzUifQorICAgICAgICAgIF0sCisgICAgICAgICAgbWFpbDogWworICAgICAgICAgICAg
e2lkOiAibWFpbF8xIiwgY29udGFjdF9pZDogImNvbnRhY3RfMyIsIHN1YmplY3Q6ImJsYWgiLCBt
ZXNzYWdlOiAiYmx1Z2giLCBmb2xkZXJzOiBbJ2luYm94J119LAorICAgICAgICAgICAge2lkOiAi
bWFpbF8yIiwgY29udGFjdF9pZDogImNvbnRhY3RfNSIsIHN1YmplY3Q6ImJsZWUiLCBtZXNzYWdl
OiAiYmxvb28iLCBmb2xkZXJzOiBbJ2xhdGVyJ119CisgICAgICAgICAgXQorICAgICAgICB9Cisg
ICAgICB9CisgICAgKTsKKyAgfSk7CisKKyAgaXQoJ3NlcnZlcyBtb3ZlIHRvIGl0ZW1zIHdoZW4g
cmVxdWVzdGVkJywgZnVuY3Rpb24oKSB7CisgICAgc3B5T25FdmVudChkb2N1bWVudCwgJ2RhdGFN
b3ZlVG9JdGVtc1NlcnZlZCcpOworICAgIHRoaXMuY29tcG9uZW50LnRyaWdnZXIoJ3VpQXZhaWxh
YmxlRm9sZGVyc1JlcXVlc3RlZCcsIHtmb2xkZXI6ICdpbmJveCd9KTsKKyAgICBleHBlY3QoJ2Rh
dGFNb3ZlVG9JdGVtc1NlcnZlZCcpLnRvSGF2ZUJlZW5UcmlnZ2VyZWRPbihkb2N1bWVudCk7Cisg
IH0pOworCisgIGl0KCdtb3ZlcyByZXF1ZXN0ZWQgaXRlbXMnLCBmdW5jdGlvbigpIHsKKyAgICB2
YXIgbWFpbElkID0gJ21haWxfMSc7CisgICAgdmFyIG1vdmVkTWFpbCA9IHRoaXMuY29tcG9uZW50
LmF0dHIuZGF0YVN0b3JlLm1haWwuZmlsdGVyKGZ1bmN0aW9uKGUpIHtyZXR1cm4gZS5pZCA9PSBt
YWlsSWR9KVswXTsKKyAgICBleHBlY3QobW92ZWRNYWlsLmZvbGRlcnNbMF0pLnRvQmUoJ2luYm94
Jyk7CisgICAgdGhpcy5jb21wb25lbnQudHJpZ2dlcigndWlNb3ZlSXRlbXNSZXF1ZXN0ZWQnLCB7
aXRlbUlkczogW21haWxJZF0sIHRvRm9sZGVyOiAnbGF0ZXInfSk7CisgICAgZXhwZWN0KG1vdmVk
TWFpbC5mb2xkZXJzWzBdKS50b0JlKCdsYXRlcicpOworICB9KTsKKworICBpdCgncmVmcmVzaGVz
IG1haWwgaXRlbXMgYWZ0ZXIgbW92ZScsIGZ1bmN0aW9uKCkgeworICAgIHNweU9uRXZlbnQoZG9j
dW1lbnQsICdkYXRhTWFpbEl0ZW1zUmVmcmVzaFJlcXVlc3RlZCcpOworICAgIHRoaXMuY29tcG9u
ZW50LnRyaWdnZXIoJ3VpTW92ZUl0ZW1zUmVxdWVzdGVkJywge2l0ZW1JZHM6IFsibWFpbF8yIl0s
IHRvRm9sZGVyOiAnbGF0ZXInfSk7CisgICAgZXhwZWN0KCdkYXRhTWFpbEl0ZW1zUmVmcmVzaFJl
cXVlc3RlZCcpLnRvSGF2ZUJlZW5UcmlnZ2VyZWRPbihkb2N1bWVudCk7CisgIH0pOworCisKK30p
OwpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxl
LWFwcC90ZXN0L3NwZWMvY29tcG9uZW50X3VpL2NvbXBvc2VfYm94X3NwZWMuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFw
cC90ZXN0L3NwZWMvY29tcG9uZW50X3VpL2NvbXBvc2VfYm94X3NwZWMuanMJKHJldmlzaW9uIDAp
CisrKyBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBw
L3Rlc3Qvc3BlYy9jb21wb25lbnRfdWkvY29tcG9zZV9ib3hfc3BlYy5qcwkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDY4IEBACisidXNlIHN0cmljdCI7CisKK2Rlc2NyaWJlQ29tcG9uZW50KCdh
cHAvY29tcG9uZW50X3VpL2NvbXBvc2VfYm94JywgZnVuY3Rpb24oKSB7CisKKyAgYmVmb3JlRWFj
aChmdW5jdGlvbigpIHsKKyAgICBzZXR1cENvbXBvbmVudCgKKyAgICAgIHJlYWRGaXh0dXJlcygn
Y29tcG9zZV9ib3guaHRtbCcpLAorICAgICAgeworICAgICAgICBuZXdNYWlsVHlwZTogJ25ld01h
aWwnLAorICAgICAgICBmb3J3YXJkTWFpbFR5cGU6ICdmb3J3YXJkJywKKyAgICAgICAgcmVwbHlN
YWlsVHlwZTogJ3JlcGx5JywKKyAgICAgICAgbmV3Q29udHJvbFNlbGVjdG9yOiAnI25ld19tYWls
JywKKyAgICAgICAgY2FuY2VsU2VsZWN0b3I6ICcjY2FuY2VsX2NvbXBvc2VkJywKKyAgICAgICAg
c2VuZFNlbGVjdG9yOiAnI3NlbmRfY29tcG9zZWQnLAorICAgICAgICByZWNpcGllbnRTZWxlY3Rv
cjogJyNyZWNpcGllbnRfc2VsZWN0JworICAgICAgfQorICAgICk7CisgIH0pOworCisgIGl0KCdz
aG93cyBjb21wb3NlIGJveCB3aGVuIGNvbXBvc2UgYm94IGRhdGEgaXMgc2VydmVkJywgZnVuY3Rp
b24oKSB7CisgICAgdGhpcy5jb21wb25lbnQudHJpZ2dlcignZGF0YUNvbXBvc2VCb3hTZXJ2ZWQn
LCB7dHlwZTogJ2FueXRoaW5nJ30pOworICAgIGV4cGVjdCh0aGlzLmNvbXBvbmVudC4kbm9kZSku
dG9CZVZpc2libGUoKTsKKyAgfSk7CisKKyAgaXQoJ2hpZGVzIGNvbXBvc2UgYm94IHdoZW4gY2Fu
Y2VsIGlzIHRyaWdnZXJlZCcsIGZ1bmN0aW9uKCkgeworICAgIHRoaXMuY29tcG9uZW50LnRyaWdn
ZXIodGhpcy5jb21wb25lbnQuYXR0ci5jYW5jZWxTZWxlY3RvciwgJ2NsaWNrJyk7CisgICAgZXhw
ZWN0KHRoaXMuY29tcG9uZW50LiRub2RlKS5ub3QudG9CZVZpc2libGUoKTsKKyAgfSk7CisKKyAg
aXQoJ3JlcXVlc3RzIGFwcHJvcHJpYXRlIGNvbXBvc2UgYm94IHdoZW4gbmV3IG1haWwgaXMgdHJp
Z2dlcmVkJywgZnVuY3Rpb24oKSB7CisgICAgdmFyIHVpQ29tcG9zZUJveFJlcXVlc3RlZCA9IHNw
eU9uRXZlbnQoZG9jdW1lbnQsICd1aUNvbXBvc2VCb3hSZXF1ZXN0ZWQnKTsKKyAgICB0aGlzLmNv
bXBvbmVudC50cmlnZ2VyKHRoaXMuY29tcG9uZW50LmF0dHIubmV3Q29udHJvbFNlbGVjdG9yLCAn
Y2xpY2snKTsKKyAgICBleHBlY3QoJ3VpQ29tcG9zZUJveFJlcXVlc3RlZCcpLnRvSGF2ZUJlZW5U
cmlnZ2VyZWRPbihkb2N1bWVudCk7CisgICAgZXhwZWN0KHVpQ29tcG9zZUJveFJlcXVlc3RlZC5t
b3N0UmVjZW50Q2FsbC5kYXRhLnR5cGUpLnRvRXF1YWwodGhpcy5jb21wb25lbnQuYXR0ci5uZXdN
YWlsVHlwZSk7CisgIH0pOworCisgIGl0KCdyZXF1ZXN0cyBhcHByb3ByaWF0ZSBjb21wb3NlIGJv
eCB3aGVuIGZvcndhcmQgaXMgdHJpZ2dlcmVkJywgZnVuY3Rpb24oKSB7CisgICAgdmFyIHVpQ29t
cG9zZUJveFJlcXVlc3RlZCA9IHNweU9uRXZlbnQoZG9jdW1lbnQsICd1aUNvbXBvc2VCb3hSZXF1
ZXN0ZWQnKTsKKyAgICB0aGlzLmNvbXBvbmVudC50cmlnZ2VyKCd1aUZvcndhcmRNYWlsJyk7Cisg
ICAgZXhwZWN0KCd1aUNvbXBvc2VCb3hSZXF1ZXN0ZWQnKS50b0hhdmVCZWVuVHJpZ2dlcmVkT24o
ZG9jdW1lbnQpOworICAgIGV4cGVjdCh1aUNvbXBvc2VCb3hSZXF1ZXN0ZWQubW9zdFJlY2VudENh
bGwuZGF0YS50eXBlKS50b0VxdWFsKHRoaXMuY29tcG9uZW50LmF0dHIuZm9yd2FyZE1haWxUeXBl
KTsKKyAgfSk7CisKKyAgaXQoJ3JlcXVlc3RzIGFwcHJvcHJpYXRlIGNvbXBvc2UgYm94IHdoZW4g
cmVwbHkgaXMgdHJpZ2dlcmVkJywgZnVuY3Rpb24oKSB7CisgICAgdmFyIHVpQ29tcG9zZUJveFJl
cXVlc3RlZCA9IHNweU9uRXZlbnQoZG9jdW1lbnQsICd1aUNvbXBvc2VCb3hSZXF1ZXN0ZWQnKTsK
KyAgICB0aGlzLmNvbXBvbmVudC50cmlnZ2VyKCd1aVJlcGx5VG9NYWlsJyk7CisgICAgZXhwZWN0
KCd1aUNvbXBvc2VCb3hSZXF1ZXN0ZWQnKS50b0hhdmVCZWVuVHJpZ2dlcmVkT24oZG9jdW1lbnQp
OworICAgIGV4cGVjdCh1aUNvbXBvc2VCb3hSZXF1ZXN0ZWQubW9zdFJlY2VudENhbGwuZGF0YS50
eXBlKS50b0VxdWFsKHRoaXMuY29tcG9uZW50LmF0dHIucmVwbHlNYWlsVHlwZSk7CisgIH0pOwor
CisgIGl0KCd0cmlnZ2VycyBzZW5kIHJlcXVlc3Qgd2hlbiBzZW5kIHNlbGVjdGVkJywgZnVuY3Rp
b24oKSB7CisgICAgc3B5T25FdmVudChkb2N1bWVudCwgJ3VpU2VuZFJlcXVlc3RlZCcpOworICAg
IHRoaXMuY29tcG9uZW50LnRyaWdnZXIodGhpcy5jb21wb25lbnQuYXR0ci5zZW5kU2VsZWN0b3Is
ICdjbGljaycpOworICAgIGV4cGVjdCgndWlTZW5kUmVxdWVzdGVkJykudG9IYXZlQmVlblRyaWdn
ZXJlZE9uKGRvY3VtZW50KTsKKyAgfSk7CisKKyAgaXQoJ2hpZGVzIGNvbXBvc2UgYm94IHdoZW4g
c2VuZCBzZWxlY3RlZCcsIGZ1bmN0aW9uKCkgeworICAgIHRoaXMuY29tcG9uZW50LnRyaWdnZXIo
dGhpcy5jb21wb25lbnQuYXR0ci5zZW5kU2VsZWN0b3IsICdjbGljaycpOworICAgIGV4cGVjdCh0
aGlzLmNvbXBvbmVudC4kbm9kZSkubm90LnRvQmVWaXNpYmxlKCk7CisgIH0pOworCisgIGl0KCdl
bmFibGVzIHNlbmQgd2hlbiByZWNpcGllbnQgaXMgY2hhbmdlZCcsIGZ1bmN0aW9uKCkgeworICAg
IHRoaXMuY29tcG9uZW50LnRyaWdnZXIodGhpcy5jb21wb25lbnQuYXR0ci5yZWNpcGllbnRTZWxl
Y3RvciwgJ2NoYW5nZScpOworICAgIGV4cGVjdCh0aGlzLmNvbXBvbmVudC5zZWxlY3QoJ3NlbmRT
ZWxlY3RvcicpKS5ub3QudG9CZURpc2FibGVkKCk7CisgIH0pOworCisKK30pOwpJbmRleDogUGVy
Zm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC90ZXN0L3Nw
ZWMvY29tcG9uZW50X3VpL2ZvbGRlcnNfc3BlYy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5j
ZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL3Rlc3Qvc3BlYy9jb21w
b25lbnRfdWkvZm9sZGVyc19zcGVjLmpzCShyZXZpc2lvbiAwKQorKysgUGVyZm9ybWFuY2VUZXN0
cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC90ZXN0L3NwZWMvY29tcG9uZW50
X3VpL2ZvbGRlcnNfc3BlYy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE2IEBACisidXNl
IHN0cmljdCI7CisKK2Rlc2NyaWJlQ29tcG9uZW50KCdhcHAvY29tcG9uZW50X3VpL2ZvbGRlcnMn
LCBmdW5jdGlvbigpIHsKKyAgYmVmb3JlRWFjaChmdW5jdGlvbigpIHsKKyAgICBzZXR1cENvbXBv
bmVudCgpOworICB9KTsKKworICBpdCgnc2hvdWxkIGxpc3RlbiB0byB1aUZvbGRlclNlbGVjdGlv
bkNoYW5nZWQgYW5kIHRyaWdnZXIgZmV0Y2hNYWlsSXRlbXMnLCBmdW5jdGlvbigpIHsKKyAgICB2
YXIgdWlNYWlsSXRlbXNSZXF1ZXN0ZWQgPSBzcHlPbkV2ZW50KGRvY3VtZW50LCAndWlNYWlsSXRl
bXNSZXF1ZXN0ZWQnKTsKKyAgICB0aGlzLmNvbXBvbmVudC50cmlnZ2VyKCd1aUZvbGRlclNlbGVj
dGlvbkNoYW5nZWQnLCB7c2VsZWN0ZWRJZHM6IFsyLCAzLCA0XX0pOworICAgIGV4cGVjdCgndWlN
YWlsSXRlbXNSZXF1ZXN0ZWQnKS50b0hhdmVCZWVuVHJpZ2dlcmVkT24oZG9jdW1lbnQpOworICAg
IGV4cGVjdCh1aU1haWxJdGVtc1JlcXVlc3RlZC5tb3N0UmVjZW50Q2FsbC5kYXRhKS50b0VxdWFs
KHsKKyAgICAgIGZvbGRlcjogMgorICAgIH0pOworICB9KTsKK30pOwpJbmRleDogUGVyZm9ybWFu
Y2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC90ZXN0L3NwZWMvY29t
cG9uZW50X3VpL21haWxfY29udHJvbHNfc3BlYy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5j
ZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL3Rlc3Qvc3BlYy9jb21w
b25lbnRfdWkvbWFpbF9jb250cm9sc19zcGVjLmpzCShyZXZpc2lvbiAwKQorKysgUGVyZm9ybWFu
Y2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC90ZXN0L3NwZWMvY29t
cG9uZW50X3VpL21haWxfY29udHJvbHNfc3BlYy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDc1IEBACisidXNlIHN0cmljdCI7CisKK2Rlc2NyaWJlQ29tcG9uZW50KCdhcHAvY29tcG9uZW50
X3VpL21haWxfY29udHJvbHMnLCBmdW5jdGlvbigpIHsKKyAgYmVmb3JlRWFjaChmdW5jdGlvbiAo
KSB7CisgICAgc2V0dXBDb21wb25lbnQocmVhZEZpeHR1cmVzKCdtYWlsX2NvbnRyb2xzLmh0bWwn
KSk7CisgIH0pOworCisgIGl0KCdzaG91bGQgdHJpZ2dlciBhcHByb3ByaWF0ZSBldmVudCB3aGVu
IGRlbGV0ZSBjb250cm9sIGNsaWNrZWQnLCBmdW5jdGlvbigpIHsKKyAgICBzcHlPbkV2ZW50KGRv
Y3VtZW50LCAndWlEZWxldGVNYWlsJyk7CisgICAgdGhpcy5jb21wb25lbnQudHJpZ2dlcih0aGlz
LmNvbXBvbmVudC5zZWxlY3QoJ2RlbGV0ZUNvbnRyb2xTZWxlY3RvcicpLCAnY2xpY2snKTsKKyAg
ICBleHBlY3QoJ3VpRGVsZXRlTWFpbCcpLnRvSGF2ZUJlZW5UcmlnZ2VyZWRPbihkb2N1bWVudCk7
CisgIH0pOworCisKKyAgaXQoJ3Nob3VsZCB0cmlnZ2VyIGFwcHJvcHJpYXRlIGV2ZW50IHdoZW4g
bW92ZSBjb250cm9sIGNsaWNrZWQnLCBmdW5jdGlvbigpIHsKKyAgICBzcHlPbkV2ZW50KGRvY3Vt
ZW50LCAndWlNb3ZlTWFpbCcpOworICAgIHRoaXMuY29tcG9uZW50LnRyaWdnZXIodGhpcy5jb21w
b25lbnQuc2VsZWN0KCdtb3ZlQ29udHJvbFNlbGVjdG9yJyksICdjbGljaycpOworICAgIGV4cGVj
dCgndWlNb3ZlTWFpbCcpLnRvSGF2ZUJlZW5UcmlnZ2VyZWRPbihkb2N1bWVudCk7CisgIH0pOwor
CisKKyAgaXQoJ3Nob3VsZCB0cmlnZ2VyIGFwcHJvcHJpYXRlIGV2ZW50IHdoZW4gZm9yd2FyZCBj
b250cm9sIGNsaWNrZWQnLCBmdW5jdGlvbigpIHsKKyAgICBzcHlPbkV2ZW50KGRvY3VtZW50LCAn
dWlGb3J3YXJkTWFpbCcpOworICAgIHRoaXMuY29tcG9uZW50LnRyaWdnZXIodGhpcy5jb21wb25l
bnQuc2VsZWN0KCdmb3J3YXJkQ29udHJvbFNlbGVjdG9yJyksICdjbGljaycpOworICAgIGV4cGVj
dCgndWlGb3J3YXJkTWFpbCcpLnRvSGF2ZUJlZW5UcmlnZ2VyZWRPbihkb2N1bWVudCk7CisgIH0p
OworCisKKyAgaXQoJ3Nob3VsZCB0cmlnZ2VyIGFwcHJvcHJpYXRlIGV2ZW50IHdoZW4gcmVwbHkg
dG8gY29udHJvbCBjbGlja2VkJywgZnVuY3Rpb24oKSB7CisgICAgc3B5T25FdmVudChkb2N1bWVu
dCwgJ3VpUmVwbHlUb01haWwnKTsKKyAgICB0aGlzLmNvbXBvbmVudC50cmlnZ2VyKHRoaXMuY29t
cG9uZW50LnNlbGVjdCgncmVwbHlDb250cm9sU2VsZWN0b3InKSwgJ2NsaWNrJyk7CisgICAgZXhw
ZWN0KCd1aVJlcGx5VG9NYWlsJykudG9IYXZlQmVlblRyaWdnZXJlZE9uKGRvY3VtZW50KTsKKyAg
fSk7CisKKyAgaXQoJ3Nob3VsZCBub3QgZW5hYmxlIGFueSBidXR0b25zIHdoZW4gbm8gaXRlbXMg
YXJlIHNlbGVjdGVkJywgZnVuY3Rpb24oKSB7CisgICAgdGhpcy5jb21wb25lbnQudHJpZ2dlcign
dWlNYWlsSXRlbVNlbGVjdGlvbkNoYW5nZWQnLCB7c2VsZWN0ZWRJZHM6W119KTsKKyAgICB2YXIg
c2VsZWN0ZWQgPSB0aGlzLmNvbXBvbmVudC5zZWxlY3QoJ2FjdGlvbkNvbnRyb2xzU2VsZWN0b3In
KS5maWx0ZXIoZnVuY3Rpb24oKSB7CisgICAgICByZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGUoJ2Rp
c2FibGVkJykgPT0gbnVsbDsKKyAgICB9KTsKKyAgICBleHBlY3Qoc2VsZWN0ZWQubGVuZ3RoKS50
b0JlKDApOworICB9KTsKKworICBpdCgnc2hvdWxkIGVuYWJsZSBhbGwgYnV0dG9ucyB3aGVuIGV4
YWN0bHkgb25lIGl0ZW0gaXMgc2VsZWN0ZWQnLCBmdW5jdGlvbigpIHsKKyAgICB0aGlzLmNvbXBv
bmVudC50cmlnZ2VyKCd1aU1haWxJdGVtU2VsZWN0aW9uQ2hhbmdlZCcsIHtzZWxlY3RlZElkczpb
MF19KTsKKyAgICB2YXIgc2VsZWN0ZWQgPSB0aGlzLmNvbXBvbmVudC5zZWxlY3QoJ2FjdGlvbkNv
bnRyb2xzU2VsZWN0b3InKS5maWx0ZXIoZnVuY3Rpb24oKSB7CisgICAgICByZXR1cm4gdGhpcy5n
ZXRBdHRyaWJ1dGUoJ2Rpc2FibGVkJykgPT0gJ2Rpc2FibGVkJzsKKyAgICB9KTsKKyAgICBleHBl
Y3Qoc2VsZWN0ZWQubGVuZ3RoKS50b0JlKDApOworICB9KTsKKworICBpdCgnc2hvdWxkIGVuYWJs
ZSBkZWxldGUgYW5kIG1vdmUgd2hlbiBtb3JlIHRoYW4gb25lIGl0ZW0gaXMgc2VsZWN0ZWQnLCBm
dW5jdGlvbigpIHsKKyAgICB0aGlzLmNvbXBvbmVudC50cmlnZ2VyKCd1aU1haWxJdGVtU2VsZWN0
aW9uQ2hhbmdlZCcsIHtzZWxlY3RlZElkczpbMCwgMV19KTsKKyAgICBleHBlY3QodGhpcy5jb21w
b25lbnQuc2VsZWN0KCdkZWxldGVDb250cm9sU2VsZWN0b3InKSkubm90LnRvQmVEaXNhYmxlZCgp
OworICAgIGV4cGVjdCh0aGlzLmNvbXBvbmVudC5zZWxlY3QoJ21vdmVDb250cm9sU2VsZWN0b3In
KSkubm90LnRvQmVEaXNhYmxlZCgpOworICB9KTsKKworICBpdCgnc2hvdWxkIG5vdCBlbmFibGUg
ZndkIGFuZCByZXBseSB3aGVuIG1vcmUgdGhhbiBvbmUgaXRlbSBpcyBzZWxlY3RlZCcsIGZ1bmN0
aW9uKCkgeworICAgIHRoaXMuY29tcG9uZW50LnRyaWdnZXIoJ3VpTWFpbEl0ZW1TZWxlY3Rpb25D
aGFuZ2VkJywge3NlbGVjdGVkSWRzOlswLCAxXX0pOworICAgIGV4cGVjdCh0aGlzLmNvbXBvbmVu
dC5zZWxlY3QoJ2ZvcndhcmRDb250cm9sU2VsZWN0b3InKSkudG9CZURpc2FibGVkKCk7CisgICAg
ZXhwZWN0KHRoaXMuY29tcG9uZW50LnNlbGVjdCgncmVwbHlDb250cm9sU2VsZWN0b3InKSkudG9C
ZURpc2FibGVkKCk7CisgIH0pOworCisgIGl0KCdzaG91bGQgZGlzYmFsZSBhbGwgYnV0dG9ucyB3
aGVuIGZvbGRlciBpcyBzZWxlY3RlZCcsIGZ1bmN0aW9uKCkgeworICAgIHRoaXMuY29tcG9uZW50
LnRyaWdnZXIoJ3VpRm9sZGVyU2VsZWN0aW9uQ2hhbmdlZCcpOworICAgIHZhciBzZWxlY3RlZCA9
IHRoaXMuY29tcG9uZW50LnNlbGVjdCgnYWN0aW9uQ29udHJvbHNTZWxlY3RvcicpLmZpbHRlcihm
dW5jdGlvbigpIHsKKyAgICAgIHJldHVybiB0aGlzLmdldEF0dHJpYnV0ZSgnZGlzYWJsZWQnKSA9
PSBudWxsOworICAgIH0pOworICAgIGV4cGVjdChzZWxlY3RlZC5sZW5ndGgpLnRvQmUoMCk7Cisg
IH0pOworCisKKworCisKK30pOwpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5j
aC9mbGlnaHRqcy1leGFtcGxlLWFwcC90ZXN0L3NwZWMvY29tcG9uZW50X3VpL21haWxfaXRlbXNf
c3BlYy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2Zs
aWdodGpzLWV4YW1wbGUtYXBwL3Rlc3Qvc3BlYy9jb21wb25lbnRfdWkvbWFpbF9pdGVtc19zcGVj
LmpzCShyZXZpc2lvbiAwKQorKysgUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGln
aHRqcy1leGFtcGxlLWFwcC90ZXN0L3NwZWMvY29tcG9uZW50X3VpL21haWxfaXRlbXNfc3BlYy5q
cwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ3IEBACisidXNlIHN0cmljdCI7CisKK2Rlc2Ny
aWJlQ29tcG9uZW50KCdhcHAvY29tcG9uZW50X3VpL21haWxfaXRlbXMnLCBmdW5jdGlvbigpIHsK
KyAgYmVmb3JlRWFjaChmdW5jdGlvbigpIHsKKyAgICBzZXR1cENvbXBvbmVudCgnPGRpdiBpZD0i
Y29udGFpbmVyIj48Lz4nLCB7CisgICAgICBpdGVtQ29udGFpbmVyU2VsZWN0b3I6ICcjY29udGFp
bmVyJywKKyAgICAgIGRlbGV0ZUZvbGRlcjogJ2RlbGV0ZScsCisgICAgICBzZWxlY3RlZEZvbGRl
cnM6IFsnaW5ib3gnXSwKKyAgICAgIHNlbGVjdGVkTWFpbEl0ZW1zOiBbMiwgM119KTsKKyAgfSk7
CisKKyAgaXQoJ3Nob3VsZCByZW5kZXIgbWFpbCBkYXRhIGluIGl0ZW1zIGNvbnRhaW5lcicsIGZ1
bmN0aW9uKCkgeworICAgIHRoaXMuY29tcG9uZW50LmF0dHIuaXRlbUNvbnRhaW5lclNlbGVjdG9y
ID0gJyNjb250YWluZXInOworICAgIHRoaXMuY29tcG9uZW50LnRyaWdnZXIoJ2RhdGFNYWlsSXRl
bXNTZXJ2ZWQnLCB7bWFya3VwOiByZWFkRml4dHVyZXMoJ21haWxfaXRlbXMuaHRtbCcpfSk7Cisg
ICAgZXhwZWN0KHRoaXMuY29tcG9uZW50LnNlbGVjdCgnaXRlbUNvbnRhaW5lclNlbGVjdG9yJyku
ZmluZCgndHInKS5sZW5ndGgpLnRvQmUoMyk7CisgIH0pOworCisgIGl0KCdzaG91bGQgdHJpZ2dl
ciB1bnNlbGVjdCBhbGwgd2hlbiByZW5kZXJpbmcgbWFpbCcsIGZ1bmN0aW9uKCkgeworICAgIHZh
ciB1aU1haWxJdGVtU2VsZWN0aW9uQ2hhbmdlZCA9IHNweU9uRXZlbnQoZG9jdW1lbnQsICd1aU1h
aWxJdGVtU2VsZWN0aW9uQ2hhbmdlZCcpOworICAgIHRoaXMuY29tcG9uZW50LnRyaWdnZXIoJ2Rh
dGFNYWlsSXRlbXNTZXJ2ZWQnLCB7bWFya3VwOiByZWFkRml4dHVyZXMoJ21haWxfaXRlbXMuaHRt
bCcpfSk7CisgICAgZXhwZWN0KCd1aU1haWxJdGVtU2VsZWN0aW9uQ2hhbmdlZCcpLnRvSGF2ZUJl
ZW5UcmlnZ2VyZWRPbihkb2N1bWVudCk7CisgICAgZXhwZWN0KHVpTWFpbEl0ZW1TZWxlY3Rpb25D
aGFuZ2VkLm1vc3RSZWNlbnRDYWxsLmRhdGEpLnRvRXF1YWwoeworICAgICAgc2VsZWN0ZWRJZHM6
IFtdCisgICAgfSk7CisgIH0pOworCisgIGl0KCdzaG91bGQgcmVxdWVzdCBzZWxlY3Rpb25zIHRv
IG1vdmUgdG8gdHJhc2ggd2hlbiBkZWxldGUgdHJpZ2dlcmVkJywgZnVuY3Rpb24oKSB7CisgICAg
dmFyIHVpTW92ZUl0ZW1zUmVxdWVzdGVkID0gc3B5T25FdmVudChkb2N1bWVudCwgJ3VpTW92ZUl0
ZW1zUmVxdWVzdGVkJyk7CisgICAgdGhpcy5jb21wb25lbnQudHJpZ2dlcigndWlEZWxldGVNYWls
Jyk7CisgICAgZXhwZWN0KCd1aU1vdmVJdGVtc1JlcXVlc3RlZCcpLnRvSGF2ZUJlZW5UcmlnZ2Vy
ZWRPbihkb2N1bWVudCk7CisgICAgZXhwZWN0KHVpTW92ZUl0ZW1zUmVxdWVzdGVkLm1vc3RSZWNl
bnRDYWxsLmRhdGEpLnRvRXF1YWwoeworICAgICAgaXRlbUlkczogWzIsIDNdLAorICAgICAgZnJv
bUZvbGRlcjogJ2luYm94JywKKyAgICAgIHRvRm9sZGVyOiAnZGVsZXRlJworICAgIH0pOworICB9
KTsKKworICBpdCgnc2hvdWxkIHVwZGF0ZSBtYWlsIHNlbGVjdGlvbnMnLCBmdW5jdGlvbigpIHsK
KyAgICB0aGlzLmNvbXBvbmVudC50cmlnZ2VyKCd1aU1haWxJdGVtU2VsZWN0aW9uQ2hhbmdlZCcs
IHtzZWxlY3RlZElkczogWzQsIDVdfSk7CisgICAgZXhwZWN0KHRoaXMuY29tcG9uZW50LmF0dHIu
c2VsZWN0ZWRNYWlsSXRlbXMpLnRvRXF1YWwoWzQsIDVdKTsKKyAgfSk7CisKKyAgaXQoJ3Nob3Vs
ZCB1cGRhdGUgZm9sZGVyIHNlbGVjdGlvbnMnLCBmdW5jdGlvbigpIHsKKyAgICB0aGlzLmNvbXBv
bmVudC50cmlnZ2VyKCd1aUZvbGRlclNlbGVjdGlvbkNoYW5nZWQnLCB7c2VsZWN0ZWRJZHM6IFsn
c2VudCddfSk7CisgICAgZXhwZWN0KHRoaXMuY29tcG9uZW50LmF0dHIuc2VsZWN0ZWRGb2xkZXJz
KS50b0VxdWFsKFsnc2VudCddKTsKKyAgfSk7Cit9KTsKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMv
RG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvdGVzdC9zcGVjL2NvbXBvbmVudF91
aS9tb3ZlX3RvX3NlbGVjdG9yX3NwZWMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0
cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC90ZXN0L3NwZWMvY29tcG9uZW50
X3VpL21vdmVfdG9fc2VsZWN0b3Jfc3BlYy5qcwkocmV2aXNpb24gMCkKKysrIFBlcmZvcm1hbmNl
VGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvdGVzdC9zcGVjL2NvbXBv
bmVudF91aS9tb3ZlX3RvX3NlbGVjdG9yX3NwZWMuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwzNiBAQAorInVzZSBzdHJpY3QiOworCitkZXNjcmliZUNvbXBvbmVudCgnYXBwL2NvbXBvbmVu
dF91aS9tb3ZlX3RvX3NlbGVjdG9yJywgZnVuY3Rpb24oKSB7CisgIGJlZm9yZUVhY2goZnVuY3Rp
b24gKCkgeworICAgIHNldHVwQ29tcG9uZW50KHJlYWRGaXh0dXJlcygnbW92ZV90b19zZWxlY3Rv
ci5odG1sJyksIHsKKyAgICAgIG1vdmVBY3Rpb25TZWxlY3RvcjogJyNtb3ZlX21haWwnCisgICAg
fSk7CisgIH0pOworCisgIGl0KCdhc2tzIGZvciBhdmFpbGFibGUgZm9sZGVycyB3aGVuIG1vdmUg
aXMgcmVxdWVzdGVkJywgZnVuY3Rpb24oKSB7CisgICAgc3B5T25FdmVudChkb2N1bWVudCwgJ3Vp
QXZhaWxhYmxlRm9sZGVyc1JlcXVlc3RlZCcpOworICAgIHRoaXMuY29tcG9uZW50LnRyaWdnZXIo
J3VpTW92ZU1haWwnKTsKKyAgICBleHBlY3QoJ3VpQXZhaWxhYmxlRm9sZGVyc1JlcXVlc3RlZCcp
LnRvSGF2ZUJlZW5UcmlnZ2VyZWRPbihkb2N1bWVudCk7CisgIH0pOworCisgIGl0KCdsYXVuY2hl
cyBtb3ZlIHNlbGVjdG9yIHdoZW4gYXZhaWxhYmxlIGZvbGRlcnMgYXJlIHNlcnZlZCcsIGZ1bmN0
aW9uKCkgeworICAgIHRoaXMuY29tcG9uZW50LnRyaWdnZXIoJ2RhdGFNb3ZlVG9JdGVtc1NlcnZl
ZCcsIHttYXJrdXA6ICc8YnI+J30pOworICAgIGV4cGVjdCh0aGlzLmNvbXBvbmVudC4kbm9kZSku
dG9CZVZpc2libGUoKTsKKyAgfSk7CisKKyAgaXQoJ2hpZGVzIGxhdW5jaGVkIHNlbGVjdG9yIGFm
dGVyIGNsaWNrJywgZnVuY3Rpb24oKSB7CisgICAgdGhpcy5jb21wb25lbnQubGF1bmNoU2VsZWN0
b3IobnVsbCwge21hcmt1cDogJzxicj4nfSkKKyAgICB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlv
bigpIHsKKyAgICAgIHRoaXMuY29tcG9uZW50LnRyaWdnZXIoJ2NsaWNrJyk7CisgICAgICBleHBl
Y3QodGhpcy5jb21wb25lbnQuJG5vZGUpLm5vdC50b0JlVmlzaWJsZSgpOworICAgIH0uYmluZCh0
aGlzKSwwKTsKKyAgfSk7CisKKyAgaXQoJ3JlcXVlc3RzIG1vdmUgd2hlbiBmb2xkZXIgc2VsZWN0
ZWQnLCBmdW5jdGlvbigpIHsKKyAgICB2YXIgdWlNb3ZlSXRlbXNSZXF1ZXN0ZWQgPSBzcHlPbkV2
ZW50KGRvY3VtZW50LCAndWlNb3ZlSXRlbXNSZXF1ZXN0ZWQnKTsKKyAgICB0aGlzLmNvbXBvbmVu
dC50cmlnZ2VyKCd1aU1vdmVUb1NlbGVjdGlvbkNoYW5nZWQnLCB7c2VsZWN0ZWRJZHM6IFs5Nl19
KTsKKyAgICBleHBlY3QoJ3VpTW92ZUl0ZW1zUmVxdWVzdGVkJykudG9IYXZlQmVlblRyaWdnZXJl
ZE9uKGRvY3VtZW50KTsKKyAgICBleHBlY3QodWlNb3ZlSXRlbXNSZXF1ZXN0ZWQubW9zdFJlY2Vu
dENhbGwuZGF0YS50b0ZvbGRlcikudG9FcXVhbCg5Nik7CisgIH0pOworCit9KTsKSW5kZXg6IFBl
cmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvdGVzdC9z
cGVjL2NvbXBvbmVudF91aS93aXRoX3NlbGVjdF9zcGVjLmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZv
cm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvdGVzdC9zcGVj
L2NvbXBvbmVudF91aS93aXRoX3NlbGVjdF9zcGVjLmpzCShyZXZpc2lvbiAwKQorKysgUGVyZm9y
bWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC90ZXN0L3NwZWMv
Y29tcG9uZW50X3VpL3dpdGhfc2VsZWN0X3NwZWMuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw4MSBAQAorInVzZSBzdHJpY3QiOworCitkZXNjcmliZU1peGluKCdhcHAvY29tcG9uZW50X3Vp
L3dpdGhfc2VsZWN0JywgZnVuY3Rpb24oKSB7CisgIGJlZm9yZUVhY2goZnVuY3Rpb24oKSB7Cisg
ICAgc2V0dXBDb21wb25lbnQocmVhZEZpeHR1cmVzKCdtYWlsX2l0ZW1zLmh0bWwnKSwgeworICAg
ICAgc2VsZWN0ZWRJdGVtU2VsZWN0b3I6ICd0ci5tYWlsLWl0ZW0uc2VsZWN0ZWQnLAorICAgICAg
c2VsZWN0aW9uQ2hhbmdlZEV2ZW50OiAndGVzdFNlbGVjdGlvbkNoYW5nZWRFdmVudCcsCisgICAg
ICBzZWxlY3RlZENsYXNzOiAnc2VsZWN0ZWQnCisgICAgfSk7CisgIH0pOworCisgIGl0KCdhcHBl
bmRzIHNlbGVjdGlvbiB0byB0aGUgc2VsZWN0aW9uSXRlbSBjYWNoZScsIGZ1bmN0aW9uKCkgewor
ICAgIHZhciAkc2VsZWN0ZWRFbGVtID0gJCgnI21haWxfMScpOworICAgIHRoaXMuY29tcG9uZW50
LnNlbGVjdEl0ZW0oJHNlbGVjdGVkRWxlbSk7CisgICAgZXhwZWN0KHRoaXMuY29tcG9uZW50Lmdl
dFNlbGVjdGVkSWRzKCkubGVuZ3RoKS50b0JlKDEpOworICB9KTsKKworICBpdCgnYWRkcyB0aGUg
c2VsZWN0ZWQgY2xhc3MgdG8gdGhlIHNlbGVjdGVkIGl0ZW0nLCBmdW5jdGlvbigpIHsKKyAgICB2
YXIgJHNlbGVjdGVkRWxlbSA9ICQoJyNtYWlsXzInKTsKKyAgICB0aGlzLmNvbXBvbmVudC5zZWxl
Y3RJdGVtKCRzZWxlY3RlZEVsZW0pOworICAgIGV4cGVjdCgkc2VsZWN0ZWRFbGVtKS50b0JlKCcu
JyArIHRoaXMuY29tcG9uZW50LmF0dHIuc2VsZWN0ZWRDbGFzcyk7CisgIH0pOworCisgIGl0KCdp
dCB0cmlnZ2VycyBzZWxlY3Rpb25DaGFuZ2VkRXZlbnQgb24gc2VsZWN0aW9uJywgZnVuY3Rpb24o
KSB7CisgICAgdmFyICRzZWxlY3RlZEVsZW0gPSAkKCcjbWFpbF8yMTM5Jyk7CisgICAgdmFyIHRl
c3RTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgPSBzcHlPbkV2ZW50KGRvY3VtZW50LCAndGVzdFNlbGVj
dGlvbkNoYW5nZWRFdmVudCcpOworICAgIHRoaXMuY29tcG9uZW50LnNlbGVjdEl0ZW0oJHNlbGVj
dGVkRWxlbSk7CisgICAgZXhwZWN0KCd0ZXN0U2VsZWN0aW9uQ2hhbmdlZEV2ZW50JykudG9IYXZl
QmVlblRyaWdnZXJlZE9uKGRvY3VtZW50KTsKKyAgICBleHBlY3QodGVzdFNlbGVjdGlvbkNoYW5n
ZWRFdmVudC5tb3N0UmVjZW50Q2FsbC5kYXRhKS50b0VxdWFsKHsKKyAgICAgIHNlbGVjdGVkSWRz
OiB0aGlzLmNvbXBvbmVudC5nZXRTZWxlY3RlZElkcygpCisgICAgfSk7CisgIH0pOworCisgIGl0
KCdyZW1vdmVzIHVuc2VsZWN0ZWQgaXRlbSBmcm9tIHRoZSBzZWxlY3Rpb25JdGVtIGNhY2hlJywg
ZnVuY3Rpb24oKSB7CisgICAgdmFyICR1bnNlbGVjdGVkRWxlbSA9ICQoJyNtYWlsXzEnKTsKKyAg
ICB0aGlzLmNvbXBvbmVudC5hdHRyLnNlbGVjdGVkSWRzID0gWycjbWFpbF8xJ10KKyAgICB0aGlz
LmNvbXBvbmVudC51bnNlbGVjdEl0ZW0oJHVuc2VsZWN0ZWRFbGVtKTsKKyAgICBleHBlY3QodGhp
cy5jb21wb25lbnQuZ2V0U2VsZWN0ZWRJZHMoKS5sZW5ndGgpLnRvQmUoMCk7CisgIH0pOworCisg
IGl0KCdyZW1vdmVzIHRoZSBzZWxlY3RlZCBjbGFzcyBmcm9tIHRoZSB1bnNlbGVjdGVkIGl0ZW0n
LCBmdW5jdGlvbigpIHsKKyAgICB2YXIgJHVuc2VsZWN0ZWRFbGVtID0gJCgnI21haWxfMScpOwor
ICAgICR1bnNlbGVjdGVkRWxlbS5hZGRDbGFzcyh0aGlzLmNvbXBvbmVudC5hdHRyLnNlbGVjdGVk
Q2xhc3MpOworICAgIHRoaXMuY29tcG9uZW50LnVuc2VsZWN0SXRlbSgkdW5zZWxlY3RlZEVsZW0p
OworICAgIGV4cGVjdCgkdW5zZWxlY3RlZEVsZW0pLm5vdC50b0JlKCcuJyArIHRoaXMuY29tcG9u
ZW50LmF0dHIuc2VsZWN0ZWRDbGFzcyk7CisgIH0pOworCisgIGl0KCd0cmlnZ2VycyBzZWxlY3Rp
b25DaGFuZ2VkRXZlbnQgb24gdW5zZWxlY3Rpb24nLCBmdW5jdGlvbigpIHsKKyAgICB2YXIgJHVu
c2VsZWN0ZWRFbGVtID0gJCgnI21haWxfMScpOworICAgIHZhciB0ZXN0U2VsZWN0aW9uQ2hhbmdl
ZEV2ZW50ID0gc3B5T25FdmVudChkb2N1bWVudCwgJ3Rlc3RTZWxlY3Rpb25DaGFuZ2VkRXZlbnQn
KTsKKyAgICB0aGlzLmNvbXBvbmVudC5zZWxlY3RJdGVtKCR1bnNlbGVjdGVkRWxlbSk7CisgICAg
ZXhwZWN0KCd0ZXN0U2VsZWN0aW9uQ2hhbmdlZEV2ZW50JykudG9IYXZlQmVlblRyaWdnZXJlZE9u
KGRvY3VtZW50KTsKKyAgICBleHBlY3QodGVzdFNlbGVjdGlvbkNoYW5nZWRFdmVudC5tb3N0UmVj
ZW50Q2FsbC5kYXRhKS50b0VxdWFsKHsKKyAgICAgIHNlbGVjdGVkSWRzOiB0aGlzLmNvbXBvbmVu
dC5nZXRTZWxlY3RlZElkcygpCisgICAgfSk7CisgIH0pOworCisgIGl0KCd1bnNlbGVjdHMgd2hl
biB0b2dnbGVJdGVtU2VsZWN0IGlzIGNhbGxlZCBvbiBhIHNlbGVjdGVkIGl0ZW0nLCBmdW5jdGlv
bigpIHsKKyAgICB2YXIgJHNlbGVjdGVkRWxlbSA9ICQoJyNtYWlsXzEnKTsKKyAgICB0aGlzLmNv
bXBvbmVudC5hdHRyLnNlbGVjdGVkSWRzID0gWycjbWFpbF8xJ107CisgICAgJHNlbGVjdGVkRWxl
bS5hZGRDbGFzcyh0aGlzLmNvbXBvbmVudC5hdHRyLnNlbGVjdGVkQ2xhc3MpOworICAgIHRoaXMu
Y29tcG9uZW50LnRvZ2dsZUl0ZW1TZWxlY3QobnVsbCwge2VsOiAkc2VsZWN0ZWRFbGVtfSk7Cisg
ICAgZXhwZWN0KHRoaXMuY29tcG9uZW50LmdldFNlbGVjdGVkSWRzKCkubGVuZ3RoKS50b0JlKDAp
OworICAgIGV4cGVjdCgkc2VsZWN0ZWRFbGVtKS5ub3QudG9CZSgnLicgKyB0aGlzLmNvbXBvbmVu
dC5hdHRyLnNlbGVjdGVkQ2xhc3MpOworICB9KTsKKworICBpdCgnc2VsZWN0cyB3aGVuIHRvZ2ds
ZUl0ZW1TZWxlY3QgaXMgY2FsbGVkIG9uIGFuIHVuc2VsZWN0ZWQgaXRlbScsIGZ1bmN0aW9uKCkg
eworICAgIHZhciAkc2VsZWN0ZWRFbGVtID0gJCgnI21haWxfMScpOworICAgIHRoaXMuY29tcG9u
ZW50LnRvZ2dsZUl0ZW1TZWxlY3QobnVsbCwge2VsOiAkc2VsZWN0ZWRFbGVtfSk7CisgICAgZXhw
ZWN0KHRoaXMuY29tcG9uZW50LmdldFNlbGVjdGVkSWRzKCkubGVuZ3RoKS50b0JlKDEpOworICAg
IGV4cGVjdCgkc2VsZWN0ZWRFbGVtKS50b0JlKCcuJyArIHRoaXMuY29tcG9uZW50LmF0dHIuc2Vs
ZWN0ZWRDbGFzcyk7CisgIH0pOworCisgIGl0KCdhZGRzIHNlbGVjdGVkIGl0ZW1zIHRvIHNlbGVj
dGVkSWRzIHdoZW4gaW5pdGlhbGl6ZVNlbGVjdGlvbnMgY2FsbGVkJywgZnVuY3Rpb24oKSB7Cisg
ICAgJCgnI21haWxfMScpLmFkZENsYXNzKHRoaXMuY29tcG9uZW50LmF0dHIuc2VsZWN0ZWRDbGFz
cyk7CisgICAgJCgnI21haWxfMicpLmFkZENsYXNzKHRoaXMuY29tcG9uZW50LmF0dHIuc2VsZWN0
ZWRDbGFzcyk7CisgICAgdGhpcy5jb21wb25lbnQuaW5pdGlhbGl6ZVNlbGVjdGlvbnMoKTsKKyAg
ICBleHBlY3QodGhpcy5jb21wb25lbnQuZ2V0U2VsZWN0ZWRJZHMoKSkudG9FcXVhbChbJ21haWxf
MScsICdtYWlsXzInXSk7CisgIH0pOworCit9KTsKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvRG9Z
b3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9ib290c3RyYXAvaW1n
L2dseXBoaWNvbnMtaGFsZmxpbmdzLXdoaXRlLnBuZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNhbm5vdCBkaXNwbGF5
OiBmaWxlIG1hcmtlZCBhcyBhIGJpbmFyeSB0eXBlLgpzdm46bWltZS10eXBlID0gaW1hZ2UvcG5n
CkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUt
YXBwL2NvbXBvbmVudHMvYm9vdHN0cmFwL2ltZy9nbHlwaGljb25zLWhhbGZsaW5ncy13aGl0ZS5w
bmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRq
cy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2Jvb3RzdHJhcC9pbWcvZ2x5cGhpY29ucy1oYWxmbGlu
Z3Mtd2hpdGUucG5nCShyZXZpc2lvbiAwKQorKysgUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5C
ZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2Jvb3RzdHJhcC9pbWcvZ2x5cGhp
Y29ucy1oYWxmbGluZ3Mtd2hpdGUucG5nCSh3b3JraW5nIGNvcHkpCgpQcm9wZXJ0eSBjaGFuZ2Vz
IG9uOiBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBw
L2NvbXBvbmVudHMvYm9vdHN0cmFwL2ltZy9nbHlwaGljb25zLWhhbGZsaW5ncy13aGl0ZS5wbmcK
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fXwpBZGRlZDogc3ZuOm1pbWUtdHlwZQojIyAtMCwwICsxICMjCitpbWFnZS9wbmcK
XCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQoKaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FB
QWRVQUFBQ2ZDQU1BQUFDWTA3TjdBQUFDMlZCTVZFWC8vLzhBQUFBQUFBRDUrZm4vLy84QQpBQUQv
Ly8vOS9mMXRiVzBBQUFELy8vLy8vLy8vLy84QUFBQUFBQUQvLy8vdzhQRCsvdjcyOXZZQUFBRDgv
UHdBQUFBQUFBRC8vLy8vCi8vL2EydG9BQUFEQ3dzTDA5UFQvLy8vLy8vLzA5UFQzOS9mLy8vOEFB
QUFBQUFDenM3UDkvZjBBQUFEaTR1S3dzTEQvLy8vLy8vLzcKKy92bjUrZisvdjcvLy84QUFBRHQ3
ZTBBQUFEUHo4OEFBQUQ5L2YzMjl2YnQ3ZTM3Ky92bjUrZjYrdnJoNGVHU2twTCsvdjcrL3Y3Qgp3
Y0dZbUpoMGRIVGg0ZUhRME5BQUFBRHo4L083dTd1aG9hR0FnSUQ5L2YzVTFOUmlZbUwvLy8vVjFk
WDQrUGpjM056Nit2cjcrL3ZwCjZlbjcrL3Y5L2YzOS9mM1IwZEh5OHZMOC9QejQrUGpyNit2OC9Q
eTJ0cmJHeHNibDVlWHU3dTcxOWZYOS9mMWxaV1ZuWjJmdzhQQzIKdHJiZzRPRDM5L2Y2K3ZycDZl
bmw1ZVg2K3ZyNCtQakx5OHYvLy8rRWhJVHg4ZkY0ZUhqMzkvZmQzZDM1K2ZuSXlNalMwdExzN096
NgordnJlM3Q3aTR1TG01dWJ6OC9PYm01dW9xS2lscGFYYzNOenU3dTcvLy8veDhmSEp5Y253OFBE
Ly8vLy8vLy9lM3Q3R3hzYTh2THpyCjYrdlcxdGJRME5EaTR1TDUrZm4wOVBUaTR1THM3T3oxOWZX
MHRMVC8vLy85L2YzNysvdjgvUHo2K3ZybTV1WUFBQURrNU9UOC9QejMKOS9ld3NMQ1ptWm45L2Yz
czdPejgvUHpCd2NIcDZlbi8vLy9hMnRydzhQRHc4UEQxOWZYeDhmSCsvdjc0K1BqKy92Nk9qbzdp
NHVMNworL3Y1K2ZuYzNOei8vLy95OHZMNit2cWZuNS90N2UzMzkvZjI5dmJvNk9qejgvUDYrdnIx
OWZYMTlmV21wcWJMeTh2Nit2cjQrUGpUCjA5UHI2K3Y2K3ZycjYrdXFxcXJ6OC9QdDdlMmlvcUxQ
ejgvYTJ0clcxdGFpb3FMcjYrdmk0dUw1K2ZsVlZWWE56YzMvLy8vVzF0YmoKNCtQaDRlSHE2dXI4
L1B6Ly8vLzI5dmI3Ky92ejgvUDA5UFRNek16Ly8vLy8vLy81K2ZuMTlmWC8vLy95OHZMOS9mMEFB
QURaMmRuOAovUHo3Ky92OC9QenA2ZW0vdjcvNysvdnE2dXJwNmVuKy92Ny8vLy80Y2svbUFBQUE4
blJTVGxNQUdnRFV6d0lQOFNNUTc1OWZDZ1V2CnFmREdGZUlZQTc4ZmJ4TlR0OTgvaHNWL0JoZEQ0
UTFyUkkrdndvM0FUeEpURDE4SW9LV2Fzb3pURVRiUTRENDBJWDVoQzZkQU1SN1IKWHlkdkVzUnVv
dEtMa1pDQVRZYWhrek94UWxGcW1iWndKaVVoRld5MXd5SlljWEk3Z0IyWElFRmJnanhnaVdGdGZU
U0ZNeTh3U1lnRQpxRkJEVFNFMktDcG5TeVpaVWFaSFJGQXNEdVdCWUpKN0FWWlFwQzBaNm5qQktX
amRONGRsTVYzMGlOOGJWNyt6SkplSE1SaURZc1I2ClU5eVZZeGRQMmMxZGo4Q0tGWlpWRmp0YWFU
eE9JOWNNS1FrNE5uQlc0UEtVT21pTkkva3dXb1FZVWRRT1NrNkd2a1VVUkZTTTNuNzEKaDE0QUFC
NHRTVVJCVkhoZTdKMkhmeVBIbWFhL1lpY0NEVFFDUVJBa1FXZ0FCcE1jRFNrT3czQ0dNNW84R2sy
UVJqbFpPVmpCc2l6YgpjczVwbmRiMjJyN2QyM3liYzd6YmREbm5uSFBPK2Q2LzRGamRJR3U2dm1w
MjgwQ3RiRisva2tuL25pcCthUFNERHFBK0ZPbTdKM25jCklvRGkwTkFRa1kzZDJJYUpTd3MyTk5a
Wm5Db3VkdWhBc3JnZjdvNEJZeTU5TzRmdm4zUk9KUUtvUkVrQkdLcVl5dEFKQ0NFUVdoMjIKMEk4
MVRQRklvekxhTmlDTUg0UEpyNDdXSW9vTDFDMWlzVVVzRlN3cGtNcVBBTUFSRFVJRmpMY1lwajV0
R2JtcXcrUDZiaHo0OWpadwpiWjlTOWs4S2QyMFFRTERkekZiZEl6L0pKME9GeUpGYUk2bU9jWjZI
R096QUd4ZGkwdE44SkwwNjNDbUp3aTlGdmlYMzRtNEZVcmx4CmwwUGdhQmdJYnJYSkpmVnAwOHlU
cmJxMnR0OTliSU50Q2o5cC8yVGlaTU1pZ0N6WUdhMFd4d0JnckVqeENCVWljaTU2b2J5TGpzRisK
L2V6OEtHTHdVZHhWSnVxOUhaY3BsalgxNmxnamxhZWc4aFRwbVVWTnF1YmNVanpOS25CYkdJQmJK
UzZwVDhuTW81aWxBbXMza3hzQQpiRWx2c1AwRHFQMlR0dDlLc0VZSW9CRUxwV3hXRHlITW9jU0Rk
VWlDWU1ZRHZKbUFsNXNVRStjRGdpYWlMTWQ2RnJUSlVtc2tGYVR5CkVhaDhKUFpzaXJ1OFdHTDhv
dUxweDJyZnFzaGtWUWl4K3ovT295Ukl0ZTY0R2FsWHNiNS9KRlg3SjRVZnhzVkkzRVVjTXlyVnJi
cUEKdGJWVkIxeDk2cTM5ZjRZbzBnb1lwQko2RW1oV2EzMW54M1dyVW1za0ZhVHlKYWg4aVZTb2ZO
cnFZMnVtSE9lTnN5SVE0NTdrc1VUbgpsUDBkcTROZlZ5dUxycFRLTGxIeTBzVXAxVUFTcS8yVHhy
MkFTQWlpd0p2TllyVnpCTGpVYko0QmpsUzBxYmRFLy9TdFVnQUV4QU15CldHMmpJMkVGRGQzcXVq
TnNXY1BPZXN4cXVZNmQxT09TbWlNYklkNFlDVFQrQkVxMHhEalJLQUNNOG1PMUh3RjJtWW0rRG5S
ZHJSUmgKdDVoVW1SUEhBZUQ0Q2RMM2p3QkVCUTNPaGVDODRWRS9YaTJMMVE5ZkIxNGtPZ0ZjLyt6
ZVZnbWdKS3VWVG56c1BTaDJpRm9uY1k4Mgp1VnJ3MTRhSDEveENOVmJzek80aGVZYTB2RFBrMzB1
Yy8rT3h2MkxnQkFBR2RqU004UjU0OE92cW94SGlVbDBiWVd5WDdSOGgxUDVKCjIyK0hVSWxBeFhT
bDVGWURlWlM2N2hIZ1RPLy8yYW9QYld5MTJyOUpxRlZpZkZzcXNMWUdiR3RsSnlxK1YyVHVCUnJB
M1dUZ3MvQVkKNzBTMzA1MTlYRmViZzE5WDM1MjArYmFrY3RCTzJqK1orTnQyM3FzZHdkdXlXQ1du
ampCMWgvWnZkV2txaFB4S1ZoaTNnTWFtaDJJbApobjMwNHhlSWFUVkpwVmxzVHA5RkxSdDNGOURQ
Z3Z0bVgxY3piZjRGU2VYZ2hjVDlrNFdYTFl4dGc4b1lyTEpSS1pOVEM3WFdhN1IvCnExUkRDRGZx
N1JsdHBEd2l4UFRjaklkaWkxUjg3TVlucHRVa3RkS1luNlB6ODlaU0pqNmw2azhOY0ErYzlicWF2
dm1GNmpiZEhxd1cKMHZZUDUvcTlkTEdvN3FWVHJZNU9YS25YcjB5TTdtM1YrRnpJQXM0UzBjckVj
a0NtQkRPZWRZMVVDbUkzK3ROMExqVXVjYW4weURPeQpjakQ4UFprNFZKRENCMysvcW1tdFNxbGM2
OGcyZFVZS2xMSi9Vcmd6TWw3M0d1M3hFU2ZGcW9yendPME9zWGlJNGttckNlL1NSb1E0ClQzc2xP
SzJlYTBxYTAwMVRnY2kwRTJUaVFrVms1dEhvb085WG5ZSkRXY1AzVHpvdlQ0eE9MNWRKaXhEcVh6
MjlnSGhHUlpUUklSb2cKelQybDVtazZiOEYrRzVLaHR5QjUvaisybWllM21pZTNtbHZOazF2Tmsx
dk5rMXZOazF2TnJaYm91eTY1VlI4K3NTVDNVSmJHcG9wagpKWVpkb05zRlhHT3B0RHJwZkFuOUxH
V3ZVNXhhTEpGdm1yOVljdTNrenN0WXVpSHJVdWFVRnNmR0ZnL3lRT0ZhK0hhQ0lBZUhNTlRuClBn
QS93U3JucmczVVBQRCsxUjhBSG53UStJRVVxN3hPTnY0dytyazdleDJ2QmhSaG5nOWtzK295R0FY
VTZYWXJST1R6WG5UZzRQclIKVzNFQUlRUUk4dHVlVm4zSStHYXJuTnVvejQrT3p0ZFovK3BsNEtX
WGdNc3BWbm1kYkh3V0lneG05MVhIQTdKeGlKMUE2NGpIdkpnMApXUzBDbUJxeldmM05MU0cyTm1H
VG5vcENPbThsOFJaS3BOc0RTYkcwbDFVZlVYeWpWY1pMcUU4RW9HQ2lyajFjQy8yMEVxM3lPZ2py
Ck1MNnd3SGdMRm9XeFVHSHppY3gxaUI0Q1FKeTdJZWU3UzRiaUF3NFFVTTlrMVhob2R6RSsxeVJx
em8yemszWVhrUFphWk9Eb0VKbDQKOGF2VlU1cFZRUWpGSmx0VlVnSGZaSlg5Ti9ERHVKM0NlcmRy
L2FzdkE1aWNCUEJ5b2xWZUI2eU81QjJnby9PWGR6cEpMdUFWVnNldQpHT3YwLzJNK2NlNkVuTzB1
SVJPM2VsUGJjaWFyczlVeWhTbFhaL2tKdm9WU0NTM09hZU5SQ1RpLzU5ajdVR0ZjMEo3WFZTV1Zh
ZDJoCnB2NVZFTzlmUFFYZ3d4OEdjTXI0Q1J5YlRIV2c2aWp1bmdKT3VSby9ocCtnTUQrQnc0WTZY
YjNPck9TRzFCVFBkS3hDSlpOVmZKbjYKK2JLaFRuTWNHRzl5VHYrNVpyYjZDUVQ0TEx0UUVBa0JJ
Ukt0RmdSMklncFpyRGE4YUV6dlg2MEFRQkFBUUlWaTZiZHpFYTlqQTdhcwpvM0ZuR3BoMk5BNThu
Y0o4SFRCc3o1L1E2OVFrRDFPTTlUbU5qdTd5WXNxeG10RnFJNDZmbzM2ZWc4SFN6d00vYjdMM2ZS
NlJrWVB3CmZUZHpRVkJ0T2tsV3VUMXVsZmV2Q2lIMC90VjdzWnQ3emQxb3ZNNUY0S0txb3pnQnBI
TUE2QkIxQUlETmIweXVHT3ZJVlBBazhZVDEKQnp0VzNmcTVyWE1iOWZaamNleEVFd0VIcGpQdytM
anhEUHdIMnhIZ3ZJSVBNeTVFQnF0Q2lCU3I2ZjJyc3dBYVFqUUF6Q2JzRlZZbgoyTndNVkIzRkNX
RDFBZUM5Uk84RkFEYi9tWjZhejdmemNmMTUrV3I3QnpoV25ZblY1aXJyMWdQdFdDWDlzd1NiUUhP
clhONXFjazYxCkJ5VGdmUFk5RHpVQy9zNkdJQ2ZzYlZYQ0ZLdHAvYXRML1k5cEhRS0FKVU9aeVVu
d09uTnpZUjNHaFdBY0ttRHpIYlU5R2Zwc3ZmY3AKUHNoMTFaaE5aWFZURzVxYnQ2aEo4bC9PVC9l
SVRQeWpYNmw5a0c4bXFlMGN3R3A2LytyZEFIQ2Q2THIrZXdLb3BOYmgzR3gxa0RvRQpUL0hCcnF2
R3pDbXJjNlFsR0ZGQTQ4MGszanhkWnBzSkVvQ2dlRThsaGZkUVEySm9jaktqMWZUKzFSb0F2Si9v
L1FCUVM3Zks2M0NlClpqVzlUc09yTTE0ZEhXK3IrYW42dkYzcVpiSkt5dXJCcEduUVFwaWNORFkw
RTRhQVhuUUM3MytOaDNYWnN2NVYxb3c2UnpRbnY0L3kKTWpKWjZuRE82NGpNZGFaSEp4Z3ZVSG5a
TkQraC91Z3VIZFhtVTBLRVVGOFBQcEVTMGVzWkc1cEpEQWt4ZERQT2svZEM1TW10NXNtdAo1c210
NXNtdDVsYno1RmJ6NUZiejVGYno1Rlp6cStZR3cxM3VzeUhYTmpjSEtLckhad3V2cEtXTGlubURz
RUNHbEF3ZE5ENVIydklnCjM5VldxMGF0ZlY1WTE0ZnMycnlJa3RWcWpiVWVwbVVXOXpJMkNVeWVz
OUFsbnZKWnRFZmlhQUVMKzdPYWJCcUpRNjE5clNuVDRqd0sKaUNIYVJhRDA4TWRGdlZEbldoVlhX
cG05akZZckVmNUF3b1lRejFJTk5RWjdRRzkxR0pmSmtIK0dCelN5Z2hXeUpvVUFoSmkwU0lYUgpB
YXcyOTJXMWVTQldFNHVJM1lBSUdBT1lWc1dsMXNHc3ZoTGhZM0ZhaE42U3FYTHMweFpLeHVkNVF1
cm1lUWVlMHhHSVJuclJEL1ZHCkZFNmlKS0lRajBnZFlzakkxUkN6S2hFcm5XclZqM0h5MFkzT3dD
RGFxeDJZYTkyL1ZlQlloSzhEYkxwbEFiY0M3TVQydmgvRU1aUFYKeWhyYVpBamdNR1JlOVMyUlFp
V0pnNTE5RCtvTW5QaTRlMW4xb1JlWkpYTEhLdEpxTlVGck5hWjFFS3V6SXN3c3R6cCs2ZEs0NFZt
KwozQWgrQ21pWjkvc0R4Rk5Cblg2L3JUWVZIdXdNdkpCbWRjRnMxWWRtdFlwN3lMVlJkRUZVU05C
YWlHc2R3S3FLeHEwdkFGK3d1TlZUCm4rNjhidUg3dVFxeGRSWW5YV0w1WFh4dFlLdENoZkhFZ2NI
UHdLRWVTaXhQSk8zQlpIVmR0MW9RYzY0TndFWk0zenFweFBuNitwdGgKOWZpTHdJdkhtZFVPd3N3
YVZEVFBiK0IrWW5rWVAzZHd4MnJtdTZYV1FaeUJoZGdvZ0hqNVhZVENoaENtK29XcVp0WHR0bjRF
WVc3VwpweStlcWJpL1hzaGsxZHF5OW1NVkg5amErZ0NZMVljc0ljUVcwREdwK0drY0pwWWJlR2xm
Vmt0QWFYQ3J6WU01QTYvUTNsWnBKV0U3CkM5VVlyMHdCUDRrd1NoK1RLcm1TbXNXcU5kd2N0cmhW
MFErM2lwTW53YXk2ZUY3dXNqWWU0bFpicFJwZUlCYmdlL1psVlpuSTBueVgKT2pENFBUQ0h1OGhr
MjZ0dmg2Z1E1eXBLSDVNYWNTV1ZXNjNHOVZuRFRyaVlMbk5SaEV5TGRXU2FXekxYOEFVNS9rbjk4
enBYd1c2WAoxTWovME5rQ0ZoS095bTBlbVZnWWJLWGFnNzRITnRjaEdHeVBUbXlIMlZiWjFhZExW
YnlrcEdwVzQxeEtKYWxWMzRxZDMwS3dqa3hqClMyWVg0V0xYRmZZK0ZtRWFrejNTWXB0K0g3bFNY
V0ZISlZ1ZCt2Zlhhbk5BcXp4cGoxdlFwU3BlTG1RN1ZVbXBVaXZyVHc5RW1ESmwKeXR5MjVTRDZv
VkhENDA0enFUUWlNYU9GM1IvUytJYm9aNk13NFByREIzVUdGcFJjaHhUa1NYM2N3ZVBRZDBaVzJQ
OFpOSGt2Uko3YwphcDdjYXA3Y2FtNDFUMjQxVDI0MVQyNDFUMjQxdCtxMmFPQXMwcmRWY3F1dVhh
d1lGcnBkVEY2L2w2ZURKVXFPdTBTRHh2ZHBIOG10CnVzOGVSOUhVblEzZnRLNHZBTnNsUFNkeGlz
T2xLY2paOHVjNmpJOVJ5enkvV0tFdXErVW45S09IVzVWQStWQVNuK3JRQWNSMnd5L0oKdkFXd29Z
anl1RDR2RkRud1RkaTMzWmhWMXo1NXliSll4MEI5c3cyVURPdnJScUswZEFIY1oxNkMyeHAyVDF5
d250TzRkM2FDY0pYUApINjk2TTRFUG0wczFhUVdrSVNSUVBwVEVnY1VXR1FLQWtMa25CdElSbEZi
R202eVVva3llSERKeUdMVDZRS1JWVGNQSlM4UDZXcS8xCmlibmxOZzRiMXRjRndIUjNqT3VubjhL
bUVHTGtoRzNmTWVKb2ZQUjh5UWNXWFgxK3VUQWErTUFGVFdwQkFLTEF0QUxTRUJJb0gwcmkKQUly
ZHdhMUtFVkEyT0FmTVF5WjVjc2pNMTRsbEhYMnRhaHFPWDJQTFNyMC82a2t3cks5cjZ0cytGY0th
cTFlWml4N2grQW5HKzR1WgpyK2w4b1VLKzNwM2hMaUpVUlZoa2p5QU5nUXpVT0pURUlXTjNCclVx
UlNnYkJzNUtLY3JseVNIT0UxdFhJcTFxR2w4VjFNUGgwS0psCldGL1gwQVZZUWp1azl4dXZiN0NH
VHpCK1A2dzZVTDFENHdzb0xyTHR0ckViVzdjUmpwR1I4aUZYY2FNbDN4M1VLbXhsdzhCWktVV1oK
UEY2SVMrVmF1VlNWTmpEV0hRTXU4UFdCSTZ1MStFRmMvYVRCTlFFN1VtM0dmM1JyWk1JYkx6Z2Fm
NmNIS1RWK2dyK2dyRjR3MmlBago1VU5yR21lV3BnYTJHbVhOekhrcGpiS1hzYzIydjVIVXV0SUFz
RGJFcGFvOGdDZy94dGNISnNuMTlYVi83a0dFNFZhZmt2VnRNRjVvCkVwMHVsM1FlekhoU0t2VFhZ
ZlNwSi9ZNkJTeWxTS2Q4NkE3RmpaYXF6d3hzTlhxRU94STRLMldtSTJJbkkzejdmVExHRHg5M0tI
eEwKWTVaS3ZRM0liRFlONndNRGdMYStybmY1aTE2QzFZK01iOWNIR0pkcCtwd0hNeHNGQWtqVEdn
M3FVZ2tZbG83TWxBODVpaHNzV1pNRgpaMUNyMXJBNlRneWNXelZURmNQMis0bFNoNTBob3Fma1d4
b3BsZWRkRm9ENm5HbDlZQUQ2K3JwdHJCMlN1RTZ4Tk5DbHViTGpkdEZnCmZEdG1IcXdvcnJSRzcy
eDBxUVNFb2t6VU9KVEV3N2RhSTcxQjc1YWtUeVhWd0ZrcFRybFZyalZaNmhEUlpaeThaSlpLemtV
UGpUTmsKV2gvWXNKTCt4enpJZUxmSDhaM1l5WjBEOGVTMlpTQVVsVUQ1VUJJSDJxZlBELzdPUnZw
VVVnMmNsVEpUb2NLMzMvek9waTkxaUZxdwpmdkNhUStZRU00M0gxRmpLZXJ6TjAxVVBxSjRPNG5q
MVhBTXlqWE9yQS9Ia3RtVWdGSlZFK1pCRUx1ZU55ZVZtUWs4bVpXN2RKMm5JCjVWSWxqd2FaUDBa
NXVGWnpVMzRrZFlpdWJZMmNkeWdwd2JSeWxMb2ViN013S2tTQjdaalZhU0V6dlRvWVQyNWJGa0sx
SVhQS2gwTGsKY0Q3ZG93TklWTmt4OHVnTE8vWTRUZGRxYnNxUHBBNlIwNlR2dk9SeEVuRGVDekZv
OGw2SVBMblZQTG5WUExuVjNHcWUzR3FlM0dxZQozR3FlM0dwdTFkemYrNVp4MVNoeGNQVUhUMnVx
a3RSOXVOLzRTVDlVV1RoSXE2NXRhSTk1UzdnYUFzeWRkVFdQemMvQ0I4NUpuSFQzClpkVnVVVUxl
bDJDMVVzVENZSzhhdDBYQVVNc05yZHFtOXBpOXVRZDQrNWtQcTU2OVByaytnT0lTa2FFUGVYUytE
bnMvZkp6WEoyb3AKbE1uR0FvQzFmVmxWMjgva0dWWDUyOXg3NTBCVzVZY3ZnRW94N0VZckFZQVFy
TDgzNUlDSlcwOVhxMDliNXZrTkdQaTVrWWw1amJQSApWVm1yalFNZnFwV0k5U0UvUXZUSVJCMGxu
UWRFZ1psWGFydytMUlZCYVRaNG8zb3B1OVhPVlFBTENWSzkrYXF4a2pjVERHVDEyUnFLClFCRzFa
NGVJRGdNQUVldnZsVnlHYzIvWUtSU2NZYzgwMzNwbUhJeGJxMWNyZ1pXeFBybTRxd3ljLzFDTjlE
N2tDbndmbGR0eFRPUFIKUnhjNGozYml1T0xxeUtPRW1HeTBhcENwdFRKYTdSWVJ4blRjM3l2bEZZ
eFdwZFJCckRablBJUXZqdVlRVVEwUWdrZ0lyZWRUY2huTwpvNVBSR3VmV1pIM1krVm1QY2VEVVox
MkFjMWxkNXp0L0JGMUc2ME1PcWtBMUNMeFpqZFBWbG8wMXprT3BNK1U0YjlrcGE1b3hHeWY3Ci9H
UTJxejVVQ3lyTHlvYVNwMVY2S0tWdEtmdmlya05FRFdDSDFraGxMNzR1OFRybmwzb1RUcVhJT1hC
bmJ3MG1UZ1NkUTZiWGc0emUKaDd3ZVByWlgwL2pWc0YrUzhVaHFvUEVwcEZobE5rYUVBS0EzY0pK
dHZpM29ZQ2ZXWTRhNzNCVXUxUStyaThKQldqMFVqYlArWHNsbApPUGZDUnRjN1BKM0wrOFJLTVhz
ZDgrT0tLemduZ01tcUo0VFdoMXhCdFNxL0h0TDRqMXV5QzR2eFVpUlY0NDlaS1ZhNURmTkJlY21E
CmpIY3BqaDlGWXlNODFWU0hnNVM3WEhaWFBKQlZNZTlKMkpnWFEwUnZpOFpaZjIvSUFSTzNYZDkz
YmM1aGQ0cm1Pa0lZdVNBU09pZW4KV2lzQmY3SjJGK2w5eU1GOG9UQWZITkhySEhHR3E4TU9NWTVR
cXM2RDRTcUFwSFVEbFkxVXE4MDNJUE5HTTQ2eE9iM1M2MEY5SklIZAo1V2E3Sys1dmpjajhCK2Ri
eGVpOVNiRTFGUGIzeXJEKzNyMTRFU2dtelIrVUU5M3hhUUMxdThxOEQxbmVBNC94T21PL1VIQXFC
bzY3CkFtS2NuTUs0QjBxSXNwRnFsVlkzQUd5c2FuUnpUZ0pycHB4Mmw4dnZpZ2U3VzdwbWVUUEFq
R2RkRytyMzk0TDE5NzUxbkp6Q0ZlRHAKc3JFUHVjam1aK2RLK0l4RmhqQWJLVlpweFlLMW9zTzU2
TUdEbEx0Y2RsYzhzRlZuK0hRQUJLZGw3MzVDZis5Ynd0VVF3T0JCMWcrRwppWWZaU0xWS0Z4dVh5
QnduNVM2WDNSVVBicFdjSmdreDFKUzkrd245dlc4bFo4MnhCMStmaVU0WkVPWU5DcWFibERYcUxs
ZlhHdXoxCk0za3ZSSjd2Wkt0NWNxdTUxVHk1MVR5NTFUeTUxVHk1MVR5NTFkeHFudHlxZTVXK3Ja
UDNBM2RoZDRnNk5ycGtTcWM3QmliVi9nanQKTTR0d0RYUnNqSXl4WVhNSTlkVWNuN0xrMVZkZlZk
L2V4RlNBQTE4bk9Ycy84R0dyaG9VRjFLekR4T3lWYkFBdk1LdjM0Uk5rU0dkeApiR3l4WStiLytz
ODR4RktDZWZub0ZvQ1VuZ0VlYlQzTG9wcGZqTTI2NVpaYjFMYzNNYTk0SWdiY0l0c1V4bFBXU1da
V2svdHk4ZnlNCkJYZ3p6ek41bFNrQWFIK05EZFR3eDJqTTFhQzdpRENMcnBFLzBYTFo4NmtCTlpk
NG12dXdpdjVmL0F3dDJzYjV5R3JWOWQza0E4YjMKR2ZVTjlZdXMwWWR2VHpybjZ5U2JyWllBV0VK
WUFFcXM2dEdqa0RHOGlCcmpqOE1qMW9oMU43MWc4eFo2ZFRMZy9IdnZrMXc3NU90MQozSmV4T1VD
b01OdkZWaVFWRnpKWW5adWJVOS80NHN2bUF5YjZwdE5DRldITS9WdnZUOXAra2RGcXRFNHkzNkRJ
cWkrdEhvNmEvR3A2Clg2NEFnTnR1QXdCQnNhd0IzdG5wZjZlLzZJaCtFOERDQzlwMStBamFhQUJB
RlVkTS9FLzlaY20xQzgvSFB3NVVpTVVGNEdZOFZvV1kKOTZ6WFpmdUlRTFdRd1NvQTlTMTk4V1gz
QnFSQUg4QU43VEJhZEF2OEwzNi9ocDI4bE8xWWJURGJLdWFPMWNncS9LRklKMXlYcndHcgpyTEx6
ckhYNjYxUHNSYmZVYlFLc1RCZld1L0hSTm9BZnM5RGwvSTg3S3haN0hXd0NtOG8xMjcwWnI2dkI2
VDhkZFJrcXFabXRtaGRmCjVxc0pUbWt0T29WSlFDdzdobDMvMDlqSlY3SlovV0FKS3NVVXEvcmZn
RzRBd0ZOUDhmVitqMjdudHR2a1YvMVFzaTRlZ2N3WFkvenkKanhLc3NGcUxWQjdFZGFlKzlnQlFi
MTdIZ3pmejQ5djhkL0FYaVVLdVVrTGpWNEZmYmFCa2FzWURpcFVZaGRqOWg3VDhRaEhlMi84Mgow
VHJ0enlxWDJralN5aFlYN1FIbVhmK3o2S2ZSekdTMVVUNEZsWHRTcmE2cnlldkovYnAwMjI0b2xz
OTZ6eGNoVTljM2J3clg3d1NBCjEwbGxybzd1bVhjQTlUTmQxT2RpM0pmOEUrVEhPTGsxZk1acHQ1
M1BvT2JxVXRzQTJrcHJ5ckZha1ZKUEZpdnFIamlqVlNhMU9sMlYKV29scFpWS0prcXdHSHFJOFNa
bXNmckFERlh6UlpKV3ZueXlEYW9IMTY2YWZnWHVIRU1ZN3d6ZnZoVlVBNk4yTXoxaTRmMEtJaWFk
ZwpuZEg0a1k5YjZIVTFmaC9hUFhyOGNlcTF0Y1d3aTk2NVpRREw1N3hpbG1NMStzekpiOWIwMjNz
UE85SHU5dXFBMzZuNFFEdW03Z0xrCmJpcFVnUXZFdFRLcEJDVGNxSTZLTU40bnMxa3RQd3FWYXBO
YjVWcWo2MnExd1BxQjA2MjZkdi9tNTJtSExlaU9CeXB5Ukh2cWJVd3QKTEV5aFBlekVlUlhBbjIy
aEd1TWRlQitMdHZwakhqcXgrcWRYWmZYSzZ1bDIwckhLKzIvRGp4VEZoSXdLd0xvaVpFYkoyTmIr
T0Z2bgpWSDNUdFVZYnp5MzVTY3ZlVnZDSmJGWmJVTUdYczd5ektVUldDME9zSHpqZHFuMThhMXJN
end2V0RQMnhCc1o3RDdHVnljbFpubnp5CkhlOTRjbkxaMFhoaDh2ZndSMS9VMXM0K2lTajg4MHJM
VFlyZWx6ZVhzeHlyMGxwQUZJeXlOZDFoWHVTNlhFZVllcG12YzZxKzZjK0IKVllMU0txVnlUYzls
czNvZlZLeGV5anJKckJlQzljMm1XRDArM0NRS0FtSnBQck5WSmxpc0RsRnZlV0ppdVVmRStHdjRC
ODA0cnlDVwpDc1hTbUJmempmMy9iaWt1MVkyazhwelo4QUJ2NHd3TkZCR2x3RjRIVFlGdER1Rmtz
MXFEeXZOcDZ5UnpxNnB2bG0vZTZpcDd1elRzCjdORmxUR0trVE5teklnS05CQ0lXYlhnNm9HQTZi
Y2xybmdKYkc5Z1laMlZVaU5FVmg5NnNDQ21kd1lRbk1DcFVtSnRDNFlCN0lSejYKN2tuZUM1RW50
NW9udDVvbnQ1b250NXBielpOYnpaTmJ6Wk5ielpOYlhaaGFpSVBjYWd0UmlpNWxqUXNZSnkrNHJu
bjNkbEdrTnpINApLRm9tSEliejBsaVI5VDhmS0YrY21scVVuTWNkQTdxVUtYdDB4TnFBYlpnZVd1
My93RmZSejQrUUthMnJMVU9UQVlvVjAvSzB0ZzFxCmNlRnU3U3pNaTU4aTRVbDJpNmE5VlV6WUlX
aWltZG5xbTcvdThhbXYzWFBuYTVMekhFRmpjazZDOVA3a3ZaclJoSUNCaFZaRk5QWXcKK25tWVdO
elNHSDdsR2pSNnlyaFc0N093SmJmeExPbTUzL3NwWmhYNHc4QUZjWFREY0poMXBuN2pEUkFMM3Zp
TnFZN1JLdjJUcVFWZQo1dFl3T3VYOXorbmNzdll6L3pPRnd3L1BTczdpQWsvMEtLWWJ0L2FqbTFw
Q1AwdVpYZ1Vnd0haZEd4aVNkVzZnbnh0czUvci85RmYrCndCK0NBN1pwTUxSd05xMklXK3l3cWVC
RFh6VlkvU01RQmZwYnYvWjNXRFBoWXZITzVidXJ4Rks5ZS9uTzRxSk9TL0JCZis3UC93V00KNldV
Z1U2dm8wMldxZk4zakNCdTVkL0dpeDNqaXVzcmVjL1R4Yno3V1VGemxoSlRVbFRiU08yNVcyeEZ0
cjJiclNTVGcrSWtUeC90Vwp6Wk5LTFFEYlNpWFdqTHlPTUsvelZYZjdXZENPeVZQMTh3L3oxeFp1
a1hYLzBtMy82SmV1eHZtcmVIcTFGQlhTeTVkV244YXIya20xCmRtNGQ5RmYvMmwvL0czRk1uVnJZ
eC9McEloRmZsMWl1ZW9mREd2ZkdDd0E0eDExQmNKZUpnNGpOUDRhMlE4MFhpd0NPa1o0MXlEU0kK
dHpQeGpodDZkeWpjZXpkbHNpcklzbURic0t3aFFkUlJrenJ4UzFVVWJ2V1ZDTC9DL3doNkZPdGQr
akY1aGxhRStKdEhZYkQ2US8vcQpmMjB3N2xCWkN0bWFWWGcyVkZRbUI3ZG9WdTg1Vmhpbkh3cis3
dC9Ucko1Nnc1R2dJREZiOTFpdWVvZGFuTXZWN29RUTBEbXFaYUp5Cm0zSHpTcml6dUU1RTN5LzVy
TGxudC81WXB1c3FPVytYOE8xT05xdEV3OE1XWUEwUHkzdmc5NnBKN3lVVnkwMjBlam5DbCtOVUh2
dFIKanAvZ2xvaisvamNlWnZaY0ltcit3MTh6MmY3VzUzNEdlRUxoSjRDZitkeTNpSWhablp0ZEtr
dlFqT1B1azZzbEl2clU1eldySGlMdwp5SEY0Y1g3OEVaS0J4cFU5bmJjRmthaHF2QUcwdWxQaFBt
b1lwRmJudHlZQ2ZsMFZNcUI0ZWh2QVJvKzQxZTJmTVZpVnAxOTVFdDc1ClJBYkF6andqVHBMVjdn
N3ZVa0wzMUgwR1MvVFAvOFV2blkzemYya2RpWXA1aHZtLzljc05JVllVWGhHaThjdS9aYkpLbjRr
YWgzMHYKUm12djhVSGYramVmKzdjZzR1c1ZVNm5JMXlzdWxpaGxIV09ObDRoS09uOFNtSHJ3ZzZy
elY1TmFDSnFLc091cWxuY0I3OUxaVVprZgovdUh3RzhVU25uNWgyOUxxaE5qTmhQWnc1ellzWlRY
dHJ5eXNDQ3VpbHBUQkxQMzcvL0FmcmZQeEcvZi9kTEYyOVNWUFhrLzQvRTk5CjQ5ZWZJQzFQL1Bv
M1BtV3kybXREcGpZVG8zZGhIZlJmL3V0L1E1ME1EYUtMZkwzaUNKczVrWkhYS3BXYXpoK0hITmdV
VjhieHVFR3EKQWluWFZiWktaK29aT0R6OVdvQzBtbmhlUDRUL3ZqS3lkYmF0V2YzdHMvWG9LbDQv
Kzl2YWgwdERyUlphcEZ1Qy82bi8rVEF1a3BiZwpRN1d2UUFKdHZ1ZlQ1MzhSM3lRdDM4UXZmcDU4
ajFtbDVWdGwvbmNRZzJWUkFQMmYyZGUySmhSajZ4SVB5aytlTkhOOGlaeGprcWRLCjVmdWZkM1B2
K3g1WXpSSTRHaS94bXJ6T05zOHZDOXE4R1R2bkowYXZURTVlR1owNEgzOGRYZHNhZ1dWaFpPdGFE
QXN4SjY3Y0FMQVoKa0o0ZjkxNkdCTnI4bVJyN3ZJZE1zeDRla1hOQ1pQd2xFZ2pUSzAyaXQyRGQ0
MU5MOW8wNDE2U3k5NnZzdWlxRHFnSXBaMnlRRUNPTwpNeUxFRUpKbjBZcVlVd3NaeCtNVWk0NnBj
WFJqZUhpRG1ueElQcGFzeHZnOThCaU1PclBGQk9jVC9jNXR5bXJWNWF6Zi8relZWZC95CndmTjJv
M0hzZVkyUGM2bmNrcDVNWjJ6K0cwTTJLMXRHelZOWEhHZUY5cE01OVppRGQxWXp2REcxUVFuckRJ
OU9sTjlFdmp6Tis2dkwKd2lRMVpmOFhLSE9FK28yaG9QOWJEaHpRQUFBQUlBamJxR0lDK3Blemg1
NWhSaTRWbEtoZHNVdWg3c2NBQUFBQVNVVk9SSzVDWUlJPQoKSW5kZXg6IFBlcmZvcm1hbmNlVGVz
dHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9ib290c3Ry
YXAvaW1nL2dseXBoaWNvbnMtaGFsZmxpbmdzLnBuZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNhbm5vdCBkaXNwbGF5
OiBmaWxlIG1hcmtlZCBhcyBhIGJpbmFyeSB0eXBlLgpzdm46bWltZS10eXBlID0gaW1hZ2UvcG5n
CkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUt
YXBwL2NvbXBvbmVudHMvYm9vdHN0cmFwL2ltZy9nbHlwaGljb25zLWhhbGZsaW5ncy5wbmcKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFt
cGxlLWFwcC9jb21wb25lbnRzL2Jvb3RzdHJhcC9pbWcvZ2x5cGhpY29ucy1oYWxmbGluZ3MucG5n
CShyZXZpc2lvbiAwKQorKysgUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRq
cy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2Jvb3RzdHJhcC9pbWcvZ2x5cGhpY29ucy1oYWxmbGlu
Z3MucG5nCSh3b3JraW5nIGNvcHkpCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBQZXJmb3JtYW5jZVRl
c3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvYm9vdHN0
cmFwL2ltZy9nbHlwaGljb25zLWhhbGZsaW5ncy5wbmcKX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOm1p
bWUtdHlwZQojIyAtMCwwICsxICMjCitpbWFnZS9wbmcKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBw
cm9wZXJ0eQoKaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQWRVQUFBQ2ZDQVFBQUFBRkJJdkNBQUFB
R1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSgpiV0ZuWlZKbFlXUjVjY2xsUEFBQU1hRkpSRUZV
ZU5ydGZXMXNYRVc2cGxleXRGN0p1clpFSkh4dUhIY24vcUE3ZG4vUmpzYzRqVzB3CitaaHJQR2Ja
T05tQXN3NFRQTXRvTXlTSURDQVNDQXhpTEcxdTVLRE1EYU1nMHBNUkY3alhFcjZyTVBIZUgwd2dX
V0EyY3ljZFBnWVUKckZFQ0FieS9yaDIzN3AvOVUvdStwN3I2bkc2ZlUvVldwenN4UzcxSGlkdjJj
K3JVcWZNK1ZXKzl4L1ZVVlpVeFk4YVduVmwxMXJ6Rgo3R1BlK1dFbTk2UENJME1zY05pYXhCSVV1
RDVyMnJvTUY1KzIrcFpWZzB4WENnOHRjOFp1eHpOV25YRzg2MzVPbXY2ajcyL1dHUHhqCjZNZjRT
YnQrVE1VQUd4V2plLy9nTFFuRyt2RklPQ1ZmNk8rZFRiTENvM2YyUXIvaXNqWkZWN0xWTE1TaWNJ
YThHWUtzbmNWWkF2NFAKTWl1dEtGbXo2N0FDOEVDZzc3RW00Zk5CdXkrYXRnS2tCbzYxTTJ0WTQ0
Rm80QnZmamRndEdXR043Nm9mczlkQndBZlU2RHcrVVBpVgpqQ2Rjd2FPYlNzczdLUGg5aGlNQW0x
RjZoSmIvbElDSE9qVEQvU1Z0UDI1bW9tNTBTeW9Zd0sreTVtekxPVXJKMk5vcm9VVGU3a21uCi9W
bDFNVm1ScUt4YVhweWdLQjVkV1ZsRnJiNW1RT3lkd0I3aTBKNnViRmpoN25wZGgxWFhkS1VkRUFt
b2ozVzVEYjRtNFFFMUxWQ2EKcE8xWGdIMkQva0IwOEpGODNTTk05WmhaZjVJOSs3Uno4Si9JM0lJ
ZnJNYjVMSGNqQnl1K1V2R1VLeFEva2NhTFlkWjQwZjhKV09rdworQTRpRUJ0bFlTbWRkUDFIRncv
ZEt0U2hkMVlRcm5jVzYxWmVxc0lBY21ZbGVFSUVLQWh4MXJ5OE5ENmFGaC84VjlWSHRpUGRCUEdP
CmJGY1JWVHpRZ2N6NDBSTzdXRXBXMGJhM2syejNpNnpCdmxMOXhPNGthLzFFVm5MVFNhK3VvK21r
Tnpyd1dEeVBjejRsV09BeEFwMisKVHJLT1JYb1BHdm02ZDVhS3B6dDUwdTQ1NzNyQU9maFAxQ1VY
ZnBiamwzNmw0WFdweXNtWEJDcjZQYkdxcXNUblNSdlJlSkZqNFhsOQpydllmSEZrby9xUHJiOVlZ
RXBWMUNzS3hUaVNyWGhpc2FwLytDKzZ1dS84Q1pWejFpV2xZN2ZHZG5LeGQyZU03V1MybGNvZjJB
TmZqCnJCSFJzb29tdm9FK3VpRi9wWHBzQ0ZuSllWWklWazdVc004NVBZZUxYWW9mUFlmOUg0Mllz
TWR0VXEvTVRkNzlIbzRiZjJTN0dxOVAKVlJ4REM2bEtHMVZwVkJWOWN2RlhHcjZvVnljU0ZaL2F1
WFdxdUNuS29vVHBGdmNmeTBZaVdWWCtJL0Q4VU9QWHZwK0U1K29tM0pIdAowSVhQNk14UzVVL0Fx
b3ZZZDNsNjIrbHRBeGtrcTZxN1Q3TFIzeFQrY3o4Z0lDdGVrRVpVMjhIcTNkOUprRVhoY2ZjbHVm
TW1tWnVzCmdxaCs1d3crN2szVndjZDlYYkhoMUpiaUVMdDNGdTY3UVlidm1Scy9DZzVieS9yM1Ru
UmxaWGh1N2lqbDVvNnFsWityUXJwa0dwM1AKVFZUWkZLcHd5cVdhYm5IL2NlNVQ2VCthK05oaVY1
Yjd2T2lRV0cxWE52R056bmdxZXdKV1grTzcrUHVwSVZiRGFzNm44SFBqdTFaTQpYbXJ2a2NKL2hR
MVlhODlSYXFsVjlQK3UwRGFjQmRmcmN4NXJsUFhNcVc1Ky9WdjhjZkxIdVA0dC82WmdEZGhQRlI4
REdSbVJvTWs2ClI2WWM5TWdVNjVUZE4rS0gzMnkxZ3lKcnVKbjl4MytRNCsxelV2a1paWW95cXE1
MkhmSlIxVDNPVWNhOFNzOVZyVmhnb1Ixbm5nRWEKVVhsK0V3bkVqKzVMZzdmSXNOeC9zRVd3WGRU
K0kvRDhVT083NXpxWGRLYWQyV1MyWEZTOUwzWEhIL0gzbTlyNG5lUG5PLzdZcy9rNgpxRXJMWXkw
bEo2YWdaZWVOL3d3Y2NZR1QxUW9FUHdKcXZDSXZlV2lHaGF3MGpxdzRvbHBwRmhxYThiL0MrZFRT
TWZKOFNsWC9wKzkxCjhBOCtvcjVmeFAvTlR1dk0zVHRvZUhlL1RobFZDOU5Lc2xGVk53TmM2Ymxx
ODZtRUhjeXVZbFNpT3FPdm1MUEtBa0xoUHpieENQNmoKNjIrOWYwcXd3akhPaWlXSTgwa0tWVmt0
SDBtRDc5bHBOSHVFUFo5eXg2UTNpS3BBS1VpSVMrZEtLNFptRXBnMHoxZ1ovamhEMTJURApQeWRx
MkE2RE1mVEYvQ0NTbFJaTzBmTFhQSnNMTTlvNS9KK1MxVVU4akhmZnJJYUFWbzJIOTNxWFJYM2cv
VjVmWmVhcXRBeHdwZWVxCkgzVHJ0cjR6K29vNXF5empxdXMvdXZpeFo1SnN6Vm4zVDliQXVEejJq
TTU0cW5nQzFYeUd1cEpoRnRpTythcFZaWmVGcXZCRzliTFQKNjRjSjh6RVcyanVCazNzTVJVYlRN
QTlnZ1FYL3h1TkV4VktScHZ3cmtsWFdGQTVaYVVUbDJkL1JOT3NlUDRwWllCMThRb0dIdm5NeQp5
Tng1YVhDYlNmOXg0N3MrVjlWdi9RMm5CRmFjdWVGVStmeEgyOThhZW1jaitBb2xsb3NSejBRd0k5
eWdNNTZxbUJOYmRLWnBBNW5ZCm9yb2JLQXRWMXl6RVhjNHhNaldRMlh6dStFN0Z6SzBCWm5mWU4z
ZXpJT2FhN2NZTCtMOTFLdzYrd29vWDJjSmRxRVMxWWwzZndrdW0KSUp6WmVHSlg2Z3ZWbXpjZGZP
T1YwSkw2aDFqamxadVZBYTc4ZTFYZDFzY1lpV1A1bVJoSGxjOS85UEZZaHdocndxeitmQk9MS1A4
QQphQ2xKVmN4aEtSYi9iSEFnTTVENWJCRDY3dFIxVUZYOFhVU1M4SmNwcVM4UU4zNDBWNGtXdUhR
SE5Sbmx2QmhLZmJIN1ZyOEg2ZmtLCldQVXdxNmVHZXVZZ3kxWk5xY1BHT3o2K1I5U1oxVjdvZjZD
dmZQaTRaMFk2enVTamFtRmE2YnYyWGhVcE56UkRJMnJ1R1hkeUxOQzEKVS9WczlmeEhINDkxMkRz
eGtPbk1kczl0UGdkL1BORXB2dzk5cXZLclBMM3I4RlphQzNWbDI2QkU1NThyYXRWNWg1YnJyeHFy
U2paVwplMm9ML2JHU1M2MkJQclNHV2dQMzFlRlIxWllQNy8yM0p2NXRXanFlbGdHK01lOVZvVTFD
NVg2aTVmSWZDaDdHWVJqdHdJTTY1Qy9oCm5KYzZTLzlYbmxkUEhkS2dKb1d0bjZxNldRYTBxcTR5
WnV3RytZL3hOMlBHakJrelpzeVlNV1BHakJrelpzeVlNV1BHakJrelpzeVkKTVdQR2pCa3pac3lZ
c2VWbnBjZ3FHak5tN0VZVE5kMU1FR0swa2FVSVRvN0JNaU5VWmoxRDZSQmdJUm1XZnhBTy9GcEhy
MVZsNnFPSApoMldDeFRKV3d4V3B6enljTVcxclU2VEo1UU1leFRScHo1Y3FMcHA3VHZ3NFdKbGhC
R3ArQm83cDc5cUE0bTVCbW5ncy81ZlhKV1pGCk9zTjg2Vm1ZUkZiM2Fnc0tudXVzd3FMYWJHYzJ3
aWc2cTJ0K2pLWDNUZlpONHRjMVA2WTBDVjFYVDdjK3V2am9yNHRYcGNnWG81ZGEKSDVRVmFVZjhm
SmhSeTBmOFNoWmx0T2RMVzFsajFiVzVjRzFxUlZ4bUw3N0hqamdtdkU5Ui96UE5JQm1MNHB6Mi9T
NHpHWFM1Nm5ReQpKNzB0VnVBNDMvbmhoWENEV0xWVHNITEhXU05LSWF2NzhWSHd1T3AvSUlNaXBD
eDFZdGRBUnEyekd2b1VTOTg2dm5YY1h1MzVhWG1wCnFsc2ZYVHd1UTNldml3Q2RnNjhyVng5Y2pT
bS83Mks4cXAwS2E2OXlMYUVYQk9XRDdpNU5vZ1owcEJmYWdOUk5xSkZ4eHNxRUZmV1AKd0xMKzA5
dXdIcWUzamFZakpKMWVXQ1NlMFNLY2phZUp2YnZ4Vm1DVlZJbzBtUnNaYmVIU2Z2ZDNKVkMxY0RH
M21ueUZLeVpWZU5SWgpCWW1LT0t2RktzSnlzamc2byt6bXJBQVg5T0JyTjFIUWc5S0FWS3E2NndQ
aWs4cjZ1UENUMWlRQkg0amJBdENPOWM3R21iOEtnVk0rCmZxZFRIL3l1OWJXRWFzeHo0YTA2TmQ1
eExuZXdKbDlhTGdUMFdEMlZxb244T3Q2SVluY0c2MkNVd1JyU0lGL2dDR3RrZ25zbm9zb3cKMnpy
WVpNY08zSFBVL2lQd3F4aHhxNDBjdm1raE1qSTAwL2FWL0c1eGlWeVNPWVF0a2FwTFZSZFU1SE5U
VmIzc0czVldEMjhWbFVBNwp2Rld1czNyYlBsNzZvVDI4bDA2eTIvYVZqNnJ1K25DOHZENENiL1dG
VU1HL1Q0WEgyaGNLa0tCQVNmc1Q2dnBBNEJ1ajF5ZEhrNUJxCk5ha2JiNjhxVmE0K0ZlN2tYcXNx
a1dXYmQ0c1M1RDdOcThxbmg5ZmhxNkFTVWJDR2xEVU16WVN2eXVlR1BDVG5JNTQxdGtyUzJidngK
cUdyUzlqWmw3aW53MjE4Ti9lNzUrMlJkc2RNeWdyQ1dRanJBaDZwZThpZ3Fzam80U3NyQjBWa1Yx
VlBwcklhdTh0THZTOTJYaytnTQpYVlUwWDhaeWFxUUllOXoxNFRXUzE0ZmpZY2VSTCsxNTg1ZFdu
UUwvUDVQc1I3OTAvK1JIdndRUnJBL1U5WWxpUUhoUVZaL2tOd0pQCk02ZDhxdW1OcWdrUC8wbXc4
bEUxemg3ZFVmeXpSM2ZFQ1NvWktEdXpkNklaWnJjd0t0ZFE4RlZWanp3UVdhVEdsSWovOGJaMmhy
SzgKL21LaHpuVEM5alY3TWlIckxIMnBpcjNzMHFhV2o1UTZLUWUzem1veVQydVp6cW9WRTVJbkVB
eldpakJKTG5GY0tNUWxiMnBSSDhzVwpwdUxFbHRXSDQyRTg2cmJyMUkyTGxHVjQzRUZuZEl2N0o2
TmJaRHZYdU5zSEh2bXJxdnBnY3NoalpMdnNHNTZtbG1vSW9JcFF1VVpWCjNTU1VGMVZsU3IxSk50
bFUvTFBKSmxwOXFxcnVlaFMvM3ZVb2xYcjNESFptZGFoNnp5Qy9tM3NHZmR1LzM1M1I1ZDJlYkhp
VHpsWDEKR2xvWDcraXNpc2N1MTFubHNwOWl6TTduRlg4bHU0YU9FSmVvRDI1M3dMZEFrTmZIcWIr
NFV6bmUxbnpGdW5NbDJqN0xGbC8xYnlPbgovSjQ1MkZ5a1JWVisvd1V2M2RxQjkzUVNLSEtkVzcx
UnRSU3FXblVEbVFQN1QyODdzSi9MNkIzYklVMXlWYnRkMjg0d1ZOUHFZd1Z3ClJNV1IxVDhBTHF6
MTJtTWJ6dXBRZGUyeHplZXNHRWFBc29DWis3STdENXk4SHFxS1RGKzVxYXFyczRyNVU5N1RZbjI0
VWkrTVNsL0wKNXc0ckdkL1VhS1V5SkJmMVliV2phWkFMclZYVng2bS91Rk01UHIrTjBJUjlOeE9x
Tm5MS0I2bTFlblg1M3UzNTRIN2xtNzAwcmYxdgp4S2dLTVVxY3JZQVUwUXExakY2eHpKamp3SDZq
R0I2amFSNEFROTY0Z1RYQS96VVVQRkR2MnI2ZGN1OHZ4RWUrSHY5WjYydmdxN1dVCmx6V2liVXNL
Z0lzVE11V25xcDdPcWpVc3d0L2VQL0V4Sng4Q0Q5TnF3NU5SbFByQWNCZFU2NzY2OFBiR0NpcTg4
MzdSU1Q5STFkZWQKOHFzcE9yVDZ1clZjcWZuNSsrajRTbytxT2pQbjBiUVhWVWNWYnlsWThNUXV6
TU9MdkxIcUtnSi9hb3RjOTc0WVAzM2Y0NG1PeFVkKwpRWHRaSThaWEVSSXZNNnJxNmF5MnZ5SEt2
T09QK0QzZjcwUDJad1RGZFFrcTFQNzFkVi8xOE42dUs2dFJaZXVETmNKM3J6cjR5czlWCjZZYnF5
MHVwaWo5Vm5GZUxHekZxWE1mR1V6VXZIVHlyQVhvM1VGN1c4UGVxUEJNc1U2UVV2eFZxaUZWVk9Q
emNFS3JxNkt4MkxJb3kKaDEvRzc0ZGZGdC83YWRycnU0cXU3cXNlWHArcXBkWUhFMUlER1RVZVhu
YWs5azVzUGtmWHVWMzZaNFgrOVhmMnZITU8rVzRMZWxSMQpUejJLUHk4UGs5UGIvWHJHc21NKzJ2
NEd6cDhZWXJZak45YTdZMmVTNW11Ly90NmJWSjFWbHdKcWtQZXBLaTFVUFJWZDNmcm80M1YxCmZh
K2pQdDJvMms3UXJRM1orQTRkblZzTlhlS1VCem9sTDErYkRLN3JVL2Q2WFRaRUx0UnRyb2VEck1U
c1JEZFZ4b3daTTJiTW1ERmoKeG93Wk0yYk1tREZqeG93Wk0yYk1tREZqeG93Wk0yYk1tREZqeG93
Wk0yYk1tREZqQmViNm8reTBQdDVLRXpSbzYxQlFoYTRycTZkQgptenNublVkZnJsaExvZHB0VEt1
Rm1EVkpMbjBzZDBaR2RhZmViU1JUbGkybFJZMHRPOE9WQ2tNelNTMFZZQWZQUXV2ZlVwM1ZlREcr
CmlOS1RWTEZLM1pVN2FNNktuRGlqQzBUcVdmaXFTbzJDR3hkdk83VG53UDdlMlJCWndwbzFqQjlO
c3MzbjVFdTNyTW13VFgrZHRUdWEKcXI0bFVMcVVqZ0JrT1V2dWFKVDRnRzdudEVRWVczcXZ4V2RX
YU9nc3JuOFNwU2REQXhtNkNuQWhYazNXS0xOWFN6S3FXS1UrVlZHQwp4Q1hpOXJCZWd4Q2JjRGdK
eTczV1hpT1F6cGJZaEJVVUt5NUFsOVR4WitwRDZub2x5WlFhQkMxUWNnc0tsb0s0Uzc5WS80Z0t2
SVdDCnBtN1R3UmEzUHIyNzF6MkwxWlRlMGFqd3hXVlRGblpTbDljVm81Sk1sM3FxOHIzV05TVTVW
VkZUSUtLaEFseU1WNUhWcTluS1M5WDIKSjl4b21YQXBGOE8wQ2txM2xIS1lhS0hmRFo3dW5VMHd5
a1lNb3M0b1poMWZwRkkxOFFjdnlTOHZwd0pINytRckdQT3FpL1grbzdFTwp0bmdKSERFaTZMLytz
NmhsVS9ENkN6V0ZrQXF0MWpwVTlmWm1mNzd3UFN1S054VEpVUlhKcDZjQ1hJeVhrN1d5VkVXaW9h
Q25jL3pnCnZLenZjc2JmM2xtdWN6ajZHNVVjSm9acjdlejUrN2IvcmFvamNGUFZpaldkQkUzZ3Mx
U3FZcXVxUk55S1cwNW5vVFZSMGx4enh4cnQKQURWUVFrQmI4UUE0eWFpUlZqR3FGS3FpcEsrc0p2
YW1ORmR6ZVI1Ym1zZStDcDkzMGxXQXZmRXlzbGFXcXJidTdEY0Z3Y0kzbElCcQo3OFRVME5UUTNv
bGtYbjVaWnJmdFE2bXJYNExBYUR0aExzekg2aWFHVGE0S2FaMGdIcWNXRk1KVmxxcTZHaGE2QWFw
WGNIcHpBMkErCjl5L1dJcVRVSjAveVNaMzI0ZHJic3VlTEhCdDVCWW1LbTRBRUZxdzZHODlDZW1U
MXcvdVR0ZkpValJmMG4zSENvKytkUGRDNWlxMWkKQnpxRmdyQWkvTDI2K1cyckw3NEIwUzB2VU53
ZDkxZkJSRkh6eDdUTmtPTC9OY251L2g4M242cTZHaGI2cWhmNkFXM2xBbUQwRjBqOQpwUjBsUVoz
YTgxYTEwaUhKU0x6VW05ZS9wUklYdGZkQUNDSlJvN1lBZXVQRkhONkxmT3Zma2xUV0I3LytMZSt6
S2s5Vi9WNjYrOUttCk52eTZxYTM3RWlISTdvdERkNFFDYTlGOGFLSW1CVWhrTlk1TVJWbmdlUktS
amlmWnhxTTNuNm9sdlNyVFBFTW5RSzFzQUl5RUc1bGkKSVhjQVRMdFhWeG9vQkNYNDB0dERFTi9t
anpRVXI0TVhnNEhtKzZPNU0xeTcraFNURDRTenBQdlFlT0d0OVBxM3ZNOHFqYXE5czZlMwpVVWE4
MHFnYWhUeng2VzJudDRVZmpoSzZnOURmZ3h4blA5K0p6QjdEKzZpa3VCOFNYckVQS1VTS2ZZWjcz
MVdPcXRhWUhYeU5VUWl0Cm04L1ZQVU1uUUsxOEFJd1pkWGNBVEx2WGdsR3dSYTg5a1QvK2VDdldl
S1VOSXI3Yi9wZG4vZDNrVXhIVkMrOVAxTktvYXV2azE0Z04KTHRUQlpuRnFXLzNvbTFuZ284Qkh6
YVQ5UThQczRlZUVrMjArQjN2by9EMHByUlN3eGxxdkpkbWR2NmRRQ2J1TUIvb3FSOVhtM0YzcgpC
OENWeUFBdmx3QzRPQU5NRndIVXpRQjNnYm9rUHpoLy9QRk51U2xjeEsrckVlU2pFTFVZTHlPcU4x
V0habVEzSnphMEVCdGNFR2d4Cjd3cDJBa21TR0dhVVJVbHltSmpIUFpCL3ZUSDRkL2JjWFBKWFM5
WWVubFphQmNSSUVCTkwvSnhuL2xxSmc4MmhuU1FHYmFUa2VMZUwKeWRJZ0pRV2N5dzEvM1JsZ2Fu
M1VWSFZVSElHQjlsRktXcS9vS2tnK0tsSGRlR3RNUmxTL0VNQWY3OTU1aHBOVjFSVEZmd0toTFlZ
cAprY08wRG1LK3JtbEJxTm56ZkhGZ3diOUdyUVViSjhHZkg5UXJDWmpoNXpSZVViWjVDN1I0aTg1
SUtaSWU3aVBFZEY2dGxUOUFYVjRaCllFSFZVdXBUaXFweEdhaHFaNTVDT3NWeVBHak1oc29aVWhW
dUVZVUMxY3A2MUJhVTMxRE9wc3NwRWFmeVd4VXJsVzRMNnRKTjJWZ0IKL2tnaGg2YTB1WDh3NW8z
blNRLzNnWW1VY2dhY3l3MnY3M05MejZIVnB4UlY0MUl5OE10VUNWajlad0RHdE5xelJmMFRZOGFN
R1RObQp6Smd4WThhTUdUTm16Smd4WThhTUdUTm16Smd4WThhTUdUTm16Smd4WThadWpzRnF1Y0N5
cU1lMGVSYkdqRW1JMm5oUi9IRzZGRGRtClRZUHV5elJGRnN4R243RXV3L3FYTXpROEx1Y0dhWlRo
a2p1YjRXWFFrbW1hc3JJeFl5VTUrYnJtN2tzSjZjb1I3b2JOb0RJVWdYL04KU28xRGxPeHV4dFYz
MlFUOEQvZ01SY0trK1dPUVJ2bUtnclNHb1JOZ2p1QTFkamFySmN1L1hmZ3p1S3BVcS94NTdNUmdq
WDZkbXFoaApvckt5VzFzVzIwb2ZxejVMRHcvMzI3ZHNQREx2TFRTL1dZcm5TK0pvWjFHd3J2Wk0w
OFI0bkZhbmQ5NVF0dXgrMGNrREgwME45YzZtCnZwQ1BrYmd3YkNBem1zYUYxbUhGaWtsVWlCbkln
R2gzU3F3VGJieW9yT2pCcUsyWkZIaEpUYVRWdWFXNGZKMnJWVGQ0eTRaVHZiTisKTXAwQzM1VWRQ
NHByQjFjeGF3K2wvTDBUUXpOZDJlTTdXYTJWYmxQZUFaZTYwcEZCRiswZlpicFl5bGw2K0Rnc0o0
SjRpVHdORW1zMwpTeFY0a1oyRDNzSmQxdmtrczZWNHZpU09kaFlGNjdSbm1GUWpkL3VUTzIvd0g4
bjk4c0pBQ3dqSWVxRmZWdERhOTIzaGJueWlIVWpXCnRlL0xhQjNsMkZwbkxWNVVRVzZycnkySERD
bUQ0SmF2UUI0MG5Wc3ExRGw0UytQRnhvdm4xc0d5c21vRlBzVWFJU3dIQWF4V2RNczYKWmZtdzFB
K1h3bkVTYmpnbGIyZ1Vzc3JwVTRRb011aGNVWWZMWHVsaGFXZnA0ZkVhN2JoR2w3Z3pnTE4yczFS
VlJCbFd1R3lTVWNqcQpoYWVzVjZWajNlMFpKWkpWNE9XcVpZNXhxVFNmMHAzQ3VpL3R2bFcrRUEy
bEpJWmY1cDlSRlNIQzVMUSt2TFg0RWNuVmROZDg2U0RYCkxNaWJBa2M4Rm5UZlEvZWx3VnZVZUZS
WWJXWjg3QU8zUEtuRVQ5cWhyMDFVMlFKOEtIYzZ6TnpqWDFqYUZRaWswLzVxTjNld3RMTjAKOGJ6
bEV5QzdDa0ZZMzgybXFuRFpKSWthWG5oYXExS3g3dmFra2RYQjYycXNlSlR1Rk9iV1lQQXpGRDBS
NGw2eEQvRWNmMnhzc1N2TApsMlc3SDFIaUc5azRIR2M0Vmd1SGtTditPVTNMN3dIckw2T3F3QWVl
andDV2IrZ3hOSE51bldJVW13eWhIdXQwV05uY2pSZmJjNHI5Cnlmelhka1hBYkN0QVhJeVNaYmdj
TE9Vc3QyUFJydUk4cHlpR3dtbjFTRlpacW5LWHBWSERDMDhWTjZOaDNlMUpxWkUrVVNWazFTTnEK
VmRXR3MzdzdERWl2MkZ0aXlNTEI3cm5Pck1janlzckc0YUVaSEt2ekFpeFg2WE0zVGxRWk1RUisz
ZFRwYlJBbXg3dXlleWNnWEsyVwo0NSsrdHd1U1l1MUNTMG9Tdm04NDVTVzNJUStZaFlBa2xhcFJs
NXVvejJvNnFZY3ZwbEpZS1NSVGVhb1czck4vRE9TTnArc1FVckNGClJGVm5YMFQ3ZytpN3BzWkt6
MXpSL2VvU3RhcHEzMDZ1cU5hV1UxVTdmcmMvdHZkUGlieG9tSE56L1JkazRmWEdvMzJURGpiT0tG
UU4KUEJiTjFWK2VOTW52M0JKaU5majExQmJXSUtOZVRndXE5dmhPakNVNFVXVnFScnczZEcvbnBP
NU5lZHZUcWVwZ0tXZWRXNmVITDZiUwowTXpIOTl4OHFycnZ3VDhHOHNiVHFVckI1dVYxM0VlbnV2
M2pUTy9sblpXT0Y5NHZmejJqUTFUY29HaGt5bWxtU0xyVStHUEhub0g1CjV0bmlSelQyakN5ODd2
ano0ZldPc21DU1JOV2V3M3NuZVAyanlrZGZjQzgxK09LSlFHMGdLOWNrYWxiVVNLaThpalBWWVE4
aWhaQXEKeGFrY0xPVXNvZnRJdjByU3RhOFB5TGlGVkY1UmVhcWlieVpKdzRrWG5rcFZHbFozVngr
bi9jTk01MlZOdVBoK0E0L3gxek4wb3FLOQpreENQSExLN1FhbmpOdlRPMnNGeXpOMTN5YVRLTnB5
TnN0Vy83YjhnMFBLZFhEQkl3RXdsVEtvYVdEWHFrbU9vb2NibmswQ2dTRWpECmd3UmFpN3A4VGxi
Y3l5czNWMDJyd3g1Ny9LMm1xQjRYWTJsbjZlS0Y0Q3E4enVxa3lMaFZtcXJjTjJuRGlSZWVHcXZR
c1hxS2lQcGsKOVNBcXpBdy9GYTluZE9USFdQV1I3VGp1OWN5ZFQ2bXdXTTBJN3JBNjcvUmRNdnpK
alYzWmNGNnd1Q3NyOHNjK3dmZ1R1RUdVNk50VwoycHRGN1h2aTV1RUxrd0swUkVJdXlDYW9IaS9G
MHM3U3crTTFOcCtEcVVIamNuaFpJOXlWRnZkNTRTbjBvMk5MVVJSMHlLcnpzcWJnCmZxMEF6dkMy
LzYzcTlZekh4U0VnN0prN3RrTjlIc3FEN3AwWXlIUm1lK1kybjRNa1RxZjhIRlp6YWd2K3VRRjNk
WENZV2lsNnhZSDkKZlBvdGxIY1A3R2NyYmg3ZVRWWnF4aThmWkN0Vmo3MndsTE1FeW43TnI4VGI2
c1Vkc21tTmwvTTZYMmw0bXFNTGQ3WHFhSEdmZzNJKwpxZW1uZ3kzTmVLdnJ2S3dwdXQvZHQ5cDUw
TVpTQkQwaElPeVcwOGdkQnNPc09nWDREb3BLTDJ6TUZNcEphNGZVRHNOV1FMbHU1ZDBWCk54ZnZO
RGMxNCtjNHExcjEyQXRMMFVybUtQNmNWWGlhZXZHTk1YZWRLVjdxb0Z5ZjFLT2VCdlo2eUtyenNx
YW9ZNElHcUtreVpzelkKamVoMnFpdUhObWJNbURGanhvd1pNMmJNbURGanhvd1pNMmJNbURGanhv
d1pNMmJNbURGanhvd1pNMmJNbUxFeW02NU83L2NOYjU5RApscDFjbnZXdnVBOEZvRVl4bmRhMDJB
Mm9WVnIzU2xiTW1seXVOTTNwOU1ZWlRhZjMrNFlYWjNFWk1YcDdKck9kV1ozNlZBcC9veXp3CkVV
aFlma1N0QzNYQlhNR2RaL1QzZlhqK1ByMHJXYkhBQXVoa1R0N01yb2J2YjVFVGJBMjRXclJZSzBh
bDAxc2FuaTlxdy84clUzNHkKTDJwVzd2SzVPUE5LRzd0eVhxM2I3K2dlczlTSlhRTVpTbjFLeGUr
ZG9Pa3EyNDg4bysweUd0U3dKcU5LM2FQcnBXb1VCVSsxOWsxQQo0dEd2QkNNdzRCUGdwVS9mVzRu
NlU0bks5N2V3aDRaWTAwSmVCZzExZXZsbGhSNlFYS2ZYd2J1ZFhZWHZuZjFrRTY3Zi9HUVRMckNs
Cmx5K0VvTlI0V0VVS29tWW5kdEhyVDd0ZnRLYVRIWXRJaWlSNzZDVVFPNVZyR09kMGp6ZmVnZDl0
dklQRmtYenkrZ2lkWkh0aG9RYmUKaXJWZW85UWZoY2ViRnFMYWprV25oalVjeW91bTBVSnlYVmUz
K3F3OXFGKzVtdEhEVTBHOEU3dUdaaWo0TUFnZ0lCNkYyVzhlVmRjMQp4eGR4Zndzc0grc2ZYMXpY
YlA4Q2RYcWR5NnAxZWgyOCs1RGp1N0s0OWc3WGIrS2FQUnhaYWVYM3puNThENmVJQ2c4U01DdXNQ
VmFNCjFmSzE5cFR5aFFDb1NwZllxZ3V6M1MreUJwdmVqUSs5MUhwTjF0QmM5eGg2UXhUbFRNUC9z
Y05iVmZVUk9oZDhhd1VxWGpnaXRwQmMKVjltYVhBMHVxTzlZVkdwWWdUVUx6bE5ydlVZWmkzVmNI
WlF4NTRNZ3JaNlhjU2VPOW0yL0VzU2pML0VIVWIrZGxGWFlsYU1xcTBISgp2VVJPV3RldVAxK29H
bHNVSTR3Tnk0MDAvanE5RGw0Y2FuekNGUlkxblV3UXlrZjVyWUVNRW54OEFLbXR3c080d2tKWGV6
WmJkVkZHCnFiKzRBN1V1TVlxMEpIRkd5QTd0T2JUSEFvZEpTR2NwWFBlWTFRN040SjQxc09vZlBr
UERmeVBIdzNYMldBSGNXcUhwSkJHZkl5bzgKeUFZWkhnUGZrS3R6VXNsMnVURlVhZ1ErU3JpNmJS
Z1JQaXFucStQR0k0bWlLSzdwQ3NucFcwYW1hTVJ6MTZuMU5mVWMxU3BxVWNxOApsaWFhaHVnbTEv
MG1VT3FJNDd2bmlwdE1ydE5iR3Q1UmxPR3FNU3I4MUJDcmh5Q3ZtanVrR3ArMEZZOVlmZE5KbGM2
d3dGc0ZVWVEvCjNuRVFxRkc5V2cxSTZCN3orK1QzM1ptVjFRZngxcDVXdG9wRmMwS1NCTHhEMUZv
NXZ1bEtWRXUyeXd1cm9nYVgyM1IxZ1oyS0dYQ2gKcTh1M3V1b0xMNmxQNyt5eEhiUXNMbXVoRUZW
a2lYT0RUMGhOWngwUk5EMHRLZThyMkwvby9aTm9Nc0YvdVU2dmczZjNMM0o4VjlaUgpiajIzRGtk
SlZma0JPNU9ZSjZvU2p3ZUVhaXlzMUJsMjhPNW04Y2V6L3M4RzdabHd2MldQcktqNkpCUDE0THJI
Vmd4SFZCeFo4WE5DCldoL0VUNGN4Y09kcU9nVDhtSnVvY3Z5eEhZNGlicWxVVlZORFo1eWNHbklM
eDNabHA0YWtRZXpibUxFWW1jS1lSdWdTUXl2VmxpT0wKVzBxV3VQSlVaZjBuZGprdDFETUhDVVR1
YmFqVHU5UjEvWFY2SGJ6N2tPTVR0cGcvenQwd3U1VWdsRy9MLy9jSm90THE0dzVvMVhnUgo4S3Qx
aVZuMTBBd21reEMzN3FjZGk3dGZsRFUwMXoxbXRkREFNRGVILzJ2WG5GWFZCL0F3aDdkZEVFUTYx
UGptZ3VTSEhNOXFzV1IzCjBDOFhIaXVlMmxDb29VZFZWdlBrVTQ3blBQbVVYREtvSFhXbXUyRjB0
R01hMVY0SWVsbmNVckxFaFcxRDFDdlUwamUwQXJ6K3ZDT0wKNHdZc2ZQcUJPcjNGYVJhWlRxK0Rk
L2U2S253VVhuUGczRzNsZkpSWVB1NldrdENxajE3OTNUR0JYSmNZSTRIQjA4MjVsQWttbUtTUApK
YWQ3TERMQXVGV0lxajZJRDkyT0xnaGpNQUdQTllGNjJDT3FDbS9yWjRYMlR1Q2oxMDhycWFsUnl1
eVRyUkNTN3lDQ3JoQ1ZBNklHCjh4SEZMTTdNeTVmRkxTVkxYUG0wMHU1YlUxOWcvWG1LcXl1Yitt
TDNyYmxmT1lyck5KM2UwdkFpbzFXcDhpdUg1ODZPWVhDU2ZiSkoKcmJqbzZCNWI4MDBzUXFxUEx0
NU9kQkh4bk9ESGQ2b0ZTSmNFMndScWxPYThySVVIL0t4RmlReTY3NXo2RW9XZVROTE5FdCtBRERC
RQpXQ2lwYTQvYXRhZTJ1SlFMaFU1dkYxV245M3VHRjJkeGRYb0tVdWdlZDJ2VnAxSjRKeERXZFJw
YTRGdWE4eDdaM2pNbm42VjYzWGw1CnNyalhreVd1UEZXRmptaE9XN21tNks3MWRIcS9mM2d4NHlC
amwyUDlxL1ZkUmd2ZHI5VkNxQ0pkQVdGYlNoYTNtS3o2Uk5XOVcyUEcKakJrelpzeVlNV1BHakJr
elpzeVlNV1BHakJrelpzeVlNV1BHakJrelpzeVlNV1BHakJrelZnYURaWE43VENzWU0xWklDdzFk
V1ZDNgpRUW1QUHZ0em43Mm0vNkRHbGZyZy9ETnFXVVpjMmRwenVPTDNQVzB4cWh3bTFQcU1WdGta
bGNKQkhzbThQMnRjSzEzR05ua09EKy92CnZwTytIYnN4aXNQcVozVGRUMGxYRnpmMlllOXNmREVJ
cSt5dHlTRG9xZlhPeGo0a1hXVU1uVGZJMnRpZHYxZXZTUWk4RkdVLzNxYlIKQVV3amxlRC9QaDE4
eC8rOTh3cnRqOUt0c1FpMERsM2EwZ3B3c1UwMVRhMENWWTFrU2ZxeW9EWXg3ZjNVb1B0bEhzZThm
MW05Ui9EdwovdTY3YU8xUG9HNkgxRFBuMWExU09sNFFGZGRyWHlkWmRYVnhJK3poNTNEMUl3b1E0
a3EvaDUrTHFCMHkxbmlsbWZIcmJEN1gvMDlxCnFxNEYyY3oxRDloaldaMnk2YWFEckowaGxkcWhL
L0J6V2kvODdlemUxd3RFa1gzUDRUS2VvQVpCSElOWkRXMlpsSzRBaUhBU3JtTVAKSThZOEozaTd6
MU5MZUphZllPV21LbGRiTEdWOGtZODI0cmRDLzBncDQ3YWthMnFWeU5sd21idEV2bFVvTW5GNmVJ
ZW9PZW5WMHNrcQpkSEZobVM4czZoRUtEQklkV2x1L3J3a3d6ejc5N05Pb3A5YWNGeFh6ZjR5QmhY
aE9LV2J2eElQN3cwQngxYWlIemRIK1JsWFZuYitYCmR4d1lLTGNYdUdFN3k0c2NFL0FQUHRKOFZJ
WVhZM3dDMUhjSE1xREc5eEsxWldsVVhTcm1JVjljbFZjRkJCa1BSM3NLancybjZGMkIKckY3UTJ3
V2RCZDJGMzhsYU5jelU3YmgwZkpHUE5zNXZXVWpJenNqcjMzOWg2YjBPdjZ6Yi92NVBRTDg5N2F1
RXVNUUxiWGxlWVd2awp2eE82dVBGRi9DNitxTkxGZGZTTDducmdyZ2NjWFNQWnBibWdhRmQyL0Nq
cjdqclVMSlVkNHpZZXlmVkJrK3ZmaVVybndvM3ZSbUdjCkZ1TGVYQXNJNG9KM3FmaFgxL1NtWlhn
K2RxRTg1K3MvZlAySHR0UW1hVjhXdm5HR2V1c016L0NVeVYwTFpiSlNYOFEzQ0trUmZDWWcKWXhv
cWoyc1Yxb0EwWnRUeHlDeEtJS3RWbC9qY0dWL0VhSlA0WERFV1FhU0U3dTdvR3ZtVnYvbTFwZmU2
ZFZ5My9TMkpURnpQbkY3bgo2bjRTMUZDNWFITER5U3AwY1dFd3I0Tm1WT3JpT2cvZlRWWDV4VHNX
Y2RRK3RXVjBpM1c1VGRuUFdjUFdRUkUraGhpT2dPR3IvaWt1CkZDejVvRHZKcHU5REF0cGlIWGZi
YWtVSEtmalVWN0RpdnNVZnp3MkZ4a2JUcTBEK2N6U05vbVVVb2paZTVMVlJPVzlKZlRUSWVEejcK
azlVdTFVSS9vcFpDMWNMZnErc2ppSm9ra1JYbFNIanNCaTU0T1N5VnpHRWhybElJVk9od1p4UmtO
YnIvaWFYMytuaEN0LzFsaW82UAovQUt5TGt3M0EwQ2xLdStlQ2hWQmMyUjFkSFFEandVZVUrdmlW
bFZoNElzSFVsVjhsbzlKQ1hnWVI3WUgzNE1rVks3OHcrdjk4YTJmCnJKdkNHK3VkRlNOZm5QbEpS
dmROd296MlgxajFRR2IxYi9mWndsR3dTVVROK245SnNyNUpQM3ozSlk2Lzk2VWsyM0ljZitxUEZ3
bWwKbnJrWmU1eWZpZlRNUmRUYlRzUzQzQnQzM3BYenNuRVlIWEhwUDlVRDdlbmlSSjNZdlgydGZR
ZHZsUzlnMDZPcVExU3hhUW1kclBFOApVZjFTZTF4NVdjZnB4d2VLN3hSR3dacnlVUlZLYTJqN3l2
dWM3YTllUDFWek90bEZoLzE4SFYzYzF2eFdBL0lBRlNsYWZFamRhbk5YCjl1SG5BZ3VSZk9sSUoz
OTgxTzV2a1lMNzhqMWtmSVBmdkdvZ2d5UGkrVlRuL3c3YUpaOVA0Y2dKVndqNjRTR2dUaU1leDNm
TU1WdHAKZjd4SUtMM3dVMWE5K2R6bWM2ejZoWi9hV3ozVXlZaUtnYWtZNHplZnMrZVZNZjhIeUxP
K2hmOVVYVUVnUjlUbWo1dnNzdjB6d0pXbApxa05VR05lNytXeFN2ZDJWUTFZNVVmMGNYRllqM0p1
ZzhFNEgzdE9QYXZ6TGh6RzFMKzV6am13QW9sS1Z6OGtMSlY1ek1aT3VqbTVWCjFXckdENlNvK0N5
OWVIMy9oV2FYdEg5WDlueEtkVXZZR0hmK25xMXdsTzM5ME9kVHZiTnRMUEE4bklJM0ZnODgxZ2FQ
My84S2lJY0UKeUx1di94Q2RoZFZiQjhOU1BDYVVnS0p3L1FmM1A3Z2Y3d2JKSjl2dkxMRFFtUVdK
NzQ1Y3pUc083Ty9NQmhiS05hcGlTQ1RrTThjagp1QkZSa3pRRFhPeTQ0aG40WDRIdnB3Y1oxejdJ
TDZkNWQrTlB1ZzJuY2tRTk9ha2Y3d1NYRjFsVlJGM3E0SmdKem9uRCtxU2lRSFBLCjVlaGQyY0cv
S3lkVllVeDkyL3NNYUlPYWNzeFZzUlhkMytjbk43bzZ1cnB6Vlh4ckd5bEkrb0JBcC9UaGlQRm8z
MDYrY1IyZUkzL28KbTgrMXdUaU03M210eTYzZ1dMTEh6OFd4SS9hMkUzZjkyUXEwTVNHVjdaMkp4
aGRTSnpmaTUyYklkZVBYa3h1N3NqQ0srYjYvM1hBVwpwQ0ZYaUxyRGxsY3JUbTNaY0xaY282cWdt
aTJIYVc5RUpNOEFvK1B5Wi9yWm9NdUZKWjBsNzd6RGtQaHR5dTFXZ0YyVXpMR2NtWExoCmR5cXl5
bHJlZmIvNWVac3JFMHk3Q2s2KzVHL25kYWxxQmRwOXpuaDBoL1NWazZLREtXeFRuKzkwZFhIMXFO
cDRzZnZTNlcyZ1RnZDUKUzh4VnFnV2dUMjVFWW9Ob1puM3JhN3crempZYTNnK2RkY0JtVk84bC9w
RDR3OEI3aC9ZVXBpQTg4WkN1dUFlUyt0c09iV29EdktSRwp6Ujlqd20xVnZodkRyNnZzQ0tINVk5
L3lPN0IzRllydE9KNkNRR1JIdVVaVlFiWDhKbytwZ2lESjV4cnEwY3M5YnZCeDFUVmRhVkM4CmlB
ajVmYWQ2RHVvNnVXdml2TGFSM1MyOHhNcVR1d25PbW13cUoxV2JqM3JqWVhpclY0VzExQTVHMW1S
YXVyaDZWTzIrQkU1U2szTXIKa29nanEvbjRIaUIzQTg3QWVtZHBPcmV3VFVJSGhNQngrTCtlZEkz
NlRkQU4vR3dqa0toZTFpZEhtZCtqakNwZTJuVGJlNDJjMk5VOQpwM0pGL2JucVVwTzZicDBPVWZr
a1lXUktiTVF3TWlXZnJsVGFpbDZLaE5UZEFUelRmbWVuUDlaUDgyWXFWZGRlODhZLy9KdzZyTDFP
Cm9vcWVsSzRybTIrMlcrQlF2bFhTYzVKODUxR1R1MUluWGVkVzh4b3RUQ2xJRFoxTHYrU1FuZzF0
V2N2VmJyVmNzYjgwZlZtcDYxYlQKUkwwTHptakp6ZmhTOEttNjZqdG5vZ1hWTGFuN0p4Q0ZNMkhY
b2VaTnFBeEVyV2lqZlFjZnRERmp4b3daTTJiTW1ERmp4b3daTTJiTQptREZqeG93Wk0yYk1tREZq
eG93Wk0yYk1tREZqeG96OS8ydTRLc2lhTk8xZ1RPWWtnV0xaQ2FyeW5OWlY2dXl5NnpSY0Z3Umtk
SnpYCjFpZWUvNjQraFJCSXlJUjgxUzZXM0N0Wkt5K0hSNTNuZVpyTzh6TEZUME5YZGhuK0g5UHl1
VE4yR3gwc3F5ZHJhV0hsejhyWXlBeXQKOUtWWHM3K0pqQlFMVHpiZnIwWDBQVWgyQlFva1RMQnN1
WGhKdm9FRDZMcU5GeHN2aHBoOUJZb09YbDNvMnZqUkJOTjRqSmxjTXh6VQo2QXpteWE0MXIrY2dz
QWFrQnY5UjBWUWRKa2ZuT1VIVWVWNk8rTGF2K3Y5cDVKVjlUOXp6V3pYZXNjWjNjYVUwTEhNTVNr
clgxa2t1CmJYbEYxRjdyRXlXSXpSYVdKMVlJOFVKK3ZXU0IxNitKemc1OTR5b1cvbXIzclNxSENY
Nlp5SFVEd1k5VTVhNXJodldoR1Z4bWhrdlEKck13cXRxNVpYWnZBODUzWlgzWW5TUkxaMXN1bzVy
cmhGT3QvOXVtUnFUYlNXQWFhQ0pkdi8rY25uMm9tZFFiTjdNbW5idjluR0FYNgo2RlFGWFoxdjdR
WHloTnFNL3NZNWxBNnJxZk5jS3I1M1ZralRscjk4RU13SnhUNk0vanJ5TlVVUVJ2Z25TZ1FOdjRu
TEhQM0puV0R1CnRzUURxU0hyOGtHbXI1all3K3F1SU1rS3hObm5aWDdBeDE4N3FzendFVFhuMTdI
UGlxa2ErNHpndU9tVmkyMWZKdjVQOTcvR0dhdFcKYWRyRjNlczhGWDBpcSttZGpicndzR2hYT2Ra
WXNUYjIwRXNZSDFER293MUhoU0xyeHEyalA3bnpMOEgzbE9WUHIxN1k5d1RyYUg5RApwa2poMk5C
TSt4dXNZOThUcXhlc2FjSUl6RkFZcGFwcTMrUC9LWDM3KzlCUm5WSFZwbzJKSTNSTkhxY0luV2Ur
c0RuL0RNYlVlRWQzCmw0THZ5aDdaZm1RN1grVktLOThSQ0ZMaHU3SzRQUHoxSHg3ck83WURaUWVp
akJMYkRON0NOUzlSQVhPbEx6VzZzazViOGdQSklSTzAKWVN1RVRvbFF6MklyL05HNmt1bEp4bjIw
KzlMZ0xZTzNkRi9pY1pNWVZUMldUVXZjeXA3WkJsbkgzQS8rTlc1dm51RXF5c2ZhN25hWAozbmEz
WW83S2ludGR1T0trZkpRTWZnbGFCWTBZSDZoN0xlai9qNGo2dmhLNDY0R0hYb2o5bS85R1ZuWnB6
N1V6a0psWllZM1pBdEw4Cm1QU3JQUjQyYm95dCtHUlRPNXd0bjgyMFhqdXdIM1hxcXFwZURmNTg4
TDg5K3ZOZnlIY3JzUG9paTQ3NHl1QnBmOTBtTktIemJKTWoKdEhlQ2sybnQrM0o4VnhhVzlJZWNN
MVg0Sk52OUlrb0g3SDZSaXVkUFFGMStCM1FZRzg3aVVrcFdzNmxOU0w5M0VEck1wcE84N05WQQpQ
LzhGL2o3clQ2WEw2VC9vZG1SeXVySWZkRk9uS2lUdEpnaCtNVDZKMmhQQXFCMnI1TmJkV24xZUJm
a0ZiczFNS1BUR1hjSm1LcW9tCm5pcm9VWjZTWWQ5SkZNckg4TkRxbllSOGxJd3oxQ3F3bDR2M1Q0
Mmk2aitOcXF6NjU1SEIvM0wvUDdZcThiYXpOSWhIZVhwYjVHc3YKZE9Scmw0SlJBNWJQejVhMXov
WlhRNzlERXRsTHVtc3YzZnA0cDd3MTEzejU1RlBPS21BV2tzL1B1YzZ6bUZHeEJ0ekNCT0ttUlJt
KwpkeGFVbXhxY2VaSUtid3VSMkV1cldRTWZjVlQ0WXFyNjR4UGZKTmtQenZQUExTOVFkS3B6SFZw
TzdwdEx6aHpiVWI2NUtqNm5pZDJpCjdJbmQ1VldaUUx2UWp5SktVVHVpeE0vQ3VTYThDb3BNZUJm
U095dFU0d3N2SzcvMDJrL2Q2TFdmeXNNV1B1aTdEd3dHS0ZTeW0vNC8KeExkRVhrNHFxU2ZDY1Bi
dnQvYU4vaVJKcExiMVY5YVE5UmZVVnhwKzB3czkvT1pLZk5CL0FkUmZpZk5WVkdYQnhEZldzRkFS
WVA4TwpPME5aYW12Z1BSemZjOTlWVzZ2bGJkK1pMYno2eGp1d2ZUdXpNbnozcFkxM0ZMYUFIRyty
SGpFZWczQ1JNQlVlZ3NaK1BvYndNTnNmCjMvVnRFcmYxQ2tCSzczTEhuL05qMmJjMG9nN05uTmdG
NGo5eGY4VU85MXpWR1ZWVjZVbFdQektGNVk5TXFRU0NIQy9HSzlDbzZvUysKUEF3V3ZkeUhYbFQx
MjlzTnBUOTBxV29kWEJMUVNuS2p1QVBjMG9EY2Y2ZVlRaXJCbUxQK2pqMXIvMjM4cUF5Ly9sanZM
RzU5WWIvZQpBYW1zMVpLNVNXSDVvV1RzY05lMzl1TnM4V3dmZTF6ditqWjJPSlNrVXJXcTZvV2Z1
cmV0c3RLeW1STGt1WDltcFRHNUJkMUdmTldQCndqdmtaZk05WEVUQzN4b0xMRVNsT3MrSWo2Snk4
Wmg0VVpCVTRwZU9raXA4ZTI2MmlWTUtPWDdnUGZ4OTA1Vyt5VWQrRVNWcSt6cEUKaGFscXJUelQ0
WjZyT3FPcWFrOGxqUDd3Q3U4a1ZEZ2hhdi9zMDl0MmJkdmxmQ2RQcEluUWw0ZkJ3cm5pbnJGNlhI
WnpTWFpnLzhpVQpFNmpLcUdxTnRTMmhYcHNrTFlET1hxeWc2RWNNajFHdm9YdmJiWitsdm1DTjBs
VDdtaVBiWTR2V25xM2p1SjJmZkc3aUx0K3FUbzRrCjN2Y2VUd3ZIMXNUN3lSR3Jta3BWVnIvaDdN
cThtM1FzSHQvcGo5Mzk0bXJHWjdZdDk0WCsrMjN2cllId1RsYTJvL01NaEowV2VzeisKT3M4Y244
Q1hLTlBPbVNwOE1WWFZlSkE5ajFteDFtc3EvSVA3K1hTckRjNFlUYlArendiM1RzamxUdDFFVmM5
b1M1bXI4aURZbmxnbwo1WWlFVW5ieElYK3hJMEpmSGdhWEhLdGp2M2p2ajRCU25hZTNqUi9GdVlt
TXFtKzJqUjlGTlVSbkdqNlFHVC82WnB1a3FRTllVWWVvClVlbkxsSHhBaXlMVDFhRk5rWmVqN01o
MlpVUFhQdlRTYmRjZVR5UklHZVBlSTExWmxMVU1ya2s5M01HT0tWL0FIT3ZyWUttSGcydjQKQ0tt
bUtncVNPbUhZZno0aEUxaXo1OHNobTZwWDFsN2Q5QnFHZDlLU0c1eTJiQ2ZvUER2NGRuZG5TY0RU
ZEtRRkhsL2JCVDlLYUpTZgpZSU9QSTBVNlptUjRQYUtXTmxkMVBJT0cwdElaOXN3QTI5T0w0bVF5
cGhGa2FSbSsxeGFmeTRLTVl5Tm9ITUtzWXpUdDMvc0FCdFFRClB4czh0T2ZRSGtpNnBPQzdSbGx2
dFB0V2NMOU84WjRPTzRUZHQwcGNFZnZBSVBhMmljLy9HajZFWUFzb2lvanBkTGd6ZTlzKzRxYUsK
d2VNN094WnhocnBHc1ltSGVOMDBrRmxqcXdmakNJbTFVNzhrZDc4dW9MMkZoWmRrM2RCaEttdWpx
L044by9CUkZ0VXN2KzByZVBHUwp1ZjF6R1Y2UHFFdmZxOUxtcXZ3WlVGN2M2ZTV1Z0UvV3JnTk1O
VzJ0U2R0M2JEOHRMc3F5MDl2UzkwbzRId3NXcDBiVUFjUHFoZFVMCkZQMUNMaTA2TW9VQndNaVUz
U0hRenVyTUJTOUJ5aU5pMWR0ZmJTWE1TY1FvbkErVTRpUjh2RkJhVzYvM3BhQXh2VWVzZTE3bkdT
TWEKdGE3eThzUnZQdGN6MS9WdDZIY1BQeWZIWTNpc283ZGIvRjZWT2xlVmF5K1hIbUFuUGYrdzBI
N1dwY2JxK2daWDBpZ1Y5V2RSajdhcQpZbWFQZGpkVmpucko2RTMrTTdXUnFjWXIySTJSUytjNnp4
alJOSHhIOFIwUVF4QjBxdmtFUWNzclMvVC95cWo2Rm50QXFjclF4cFlMCnNWc3crRFh0OFAyeC93
ZEZtM3dCZVc0MFRRQUFBQUJKUlU1RXJrSmdnZz09CgpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9E
b1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2VzNS1zaGltL3Rl
c3RzL2xpYi9qYXNtaW5lX2Zhdmljb24ucG5nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2Fubm90IGRpc3BsYXk6IGZp
bGUgbWFya2VkIGFzIGEgYmluYXJ5IHR5cGUuCnN2bjptaW1lLXR5cGUgPSBpbWFnZS9wbmcKSW5k
ZXg6IFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAv
Y29tcG9uZW50cy9lczUtc2hpbS90ZXN0cy9saWIvamFzbWluZV9mYXZpY29uLnBuZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUt
YXBwL2NvbXBvbmVudHMvZXM1LXNoaW0vdGVzdHMvbGliL2phc21pbmVfZmF2aWNvbi5wbmcJKHJl
dmlzaW9uIDApCisrKyBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4
YW1wbGUtYXBwL2NvbXBvbmVudHMvZXM1LXNoaW0vdGVzdHMvbGliL2phc21pbmVfZmF2aWNvbi5w
bmcJKHdvcmtpbmcgY29weSkKClByb3BlcnR5IGNoYW5nZXMgb246IFBlcmZvcm1hbmNlVGVzdHMv
RG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9lczUtc2hpbS90
ZXN0cy9saWIvamFzbWluZV9mYXZpY29uLnBuZwpfX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46bWltZS10
eXBlCiMjIC0wLDAgKzEgIyMKK2ltYWdlL3BuZwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3Bl
cnR5CgppVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkFBQUFBUUNBWUFBQUFmOC85aEFBQUFCR2RC
VFVFQUFMR1BDL3hoQlFBQUFBRnpVa2RDCkFLN09IT2tBQUFBZ1kwaFNUUUFBZWlZQUFJQ0VBQUQ2
QUFBQWdPZ0FBSFV3QUFEcVlBQUFPcGdBQUJkd25McFJQQUFBQUFaaVMwZEUKQVA4QS93RC9vTDJu
a3dBQUFBbHdTRmx6QUFBTEV3QUFDeE1CQUpxY0dBQUFBdUJKUkVGVU9NdWxra3RJVkdFWWh0Ly9u
UCtjR1U5ego4emdYUzZKVXRNanhrcGVNTW9zaTBsb0VRUzJFN2dSRjBLWk5peGJScGhzVkJRVXRv
aUtpQzBWUjBUME5vOUlhTFpreVI4ZHl4aktkCkd0TVp6K2pvblA5dlVSTlN1SWllMWZ2Qjk3MThO
NEpmVEU2M1QxKy9xV1ozZTF1SDUvNjl1b3RhYkdRUUFBeXlsREsvb216RnRLek0KQWdLdTY0bXgr
TlVydDA5cXNlRUl4cFB2enExODdXdlUyajY5alIwN3NlOUdiczYwSW9tSzB0WnQ2L1o2UHpSRmdn
TmQvTk5nZ0YrLwpjOUZyczVxY3lUcWFGSVhGQmZQU25FNGpsU1JoellaMUs2ZG5aMlhmdW5yOTly
YWRPN2JiWGVsbXhoaEVVWVRmMTlFV2pXcjlmeG1NCnhrYzF6aG5oQURoaktLdVk3ODZZbXVFMld5
emduSU1RZ3RoUU5QSDB5Yk1IT3VPSlpKMlFGTFdQNjYvVjNybGZMeEFDUWdnQVFER1oKd2NFQkFK
d3pORGUrN0hqVjRLa2JQN3FZRkxIWVNMVDkzZnUzczR2emw5bFUxY1l3aHZlUkovZ1liWUpGZGlJ
VzFrQXBOUlNWRkphbQpXazJ1WUtEYlB6d1MxMzRiT0IzcTFJb0Y1Y3VMU29ybXlaSmtZVlJISk5H
TGx0QkRXSTBPWkxvS29Ub2NodHk4V1ptVlN4WXVIWTFwCmNzTUx6eU5xTWlscVZmWGltcldiMTI0
cExDdkpOeGhUQ0dNTUJBUVpKQTg1cVQyWVlwcnhjd3dBZWlJQjJXREVrdXFsVmVmUFhqb3EKemlr
cldMNXJ6NjZEeFhQTHM0aElDZWNjZ2lDQTZUb0VYVUsydlJReVU5RC9OY1JsZzB3b3BSQUVBbVdT
WXZVMk5iZUtmWDNmQW04OAp6UjZIWGMxeXVaenBuREVTNnUwZCtPRHpSV3lwcXNtUW9vQlNpbUJu
WitqNC9pTUhHcDgzTkxXMmVOKzF0bmhiL08yZGJTUzVnelRWCjZzcHp6eXhYbEJTbDYyT3cwMTB3
cS9Md3FXT0hxQ1FUUVJEUTVmZUhWbFd0cnZ6eUplUWJmNFhmZnhEdUgreXJyMis4bVl6TkZyTk4K
R3hxSzI5UTBJd2lCcnV1Y0FBUi9JR0FDZ29IdTlzK0I3aDZSVXVpSk1kVGVmWEF2SFA0ZStET1BU
bVR3TFR6UTQybDQ5VksxcDlrdQpuRDUzNXZ6WnkwZmlvMlBEK0JkS1MvSVhWMWN2MmtqSXhKMytO
ejhBWjlzcEp2WTJQS0VBQUFBQVNVVk9SSzVDWUlJPQoK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>212629</attachid>
            <date>2013-09-25 15:05:33 -0700</date>
            <delta_ts>2013-09-25 15:14:07 -0700</delta_ts>
            <desc>Got rid of flightjs-example-app/test</desc>
            <filename>bug-121926-20130925150537.patch</filename>
            <type>text/plain</type>
            <size>1238854</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1h
bmNlVGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNTY0MjIpCisrKyBQZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExNCBAQAorMjAxMy0wOS0yNSAg
Unlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBEb1lvdUV2ZW5CZW5j
aDogQWRkIGEgdGVzdCBjYXNlIGZvciBGbGlnaHRKUworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIxOTI2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGEgRmxpZ2h0SlMgdGVzdCBjYXNlLgorCisgICAg
ICAgICogRG9Zb3VFdmVuQmVuY2gvYmVuY2htYXJrLmh0bWw6CisgICAgICAgICogRG9Zb3VFdmVu
QmVuY2gvYmVuY2htYXJrLmpzOgorICAgICAgICAqIERvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4
YW1wbGUtYXBwOiBBZGRlZC4KKyAgICAgICAgKiBEb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFt
cGxlLWFwcC9MSUNFTlNFLm1kOiBBZGRlZC4KKyAgICAgICAgKiBEb1lvdUV2ZW5CZW5jaC9mbGln
aHRqcy1leGFtcGxlLWFwcC9SRUFETUUubWQ6IEFkZGVkLgorICAgICAgICAqIERvWW91RXZlbkJl
bmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2FwcDogQWRkZWQuCisgICAgICAgICogRG9Zb3VFdmVu
QmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvYXBwL2Jvb3Q6IEFkZGVkLgorICAgICAgICAqIERv
WW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2FwcC9ib290L3BhZ2UuanM6IEFkZGVk
LgorICAgICAgICAqIERvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2FwcC9jb21w
b25lbnRfZGF0YTogQWRkZWQuCisgICAgICAgICogRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhh
bXBsZS1hcHAvYXBwL2NvbXBvbmVudF9kYXRhL2NvbXBvc2VfYm94LmpzOiBBZGRlZC4KKyAgICAg
ICAgKiBEb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9hcHAvY29tcG9uZW50X2Rh
dGEvbWFpbF9pdGVtcy5qczogQWRkZWQuCisgICAgICAgICogRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0
anMtZXhhbXBsZS1hcHAvYXBwL2NvbXBvbmVudF9kYXRhL21vdmVfdG8uanM6IEFkZGVkLgorICAg
ICAgICAqIERvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2FwcC9jb21wb25lbnRf
dWk6IEFkZGVkLgorICAgICAgICAqIERvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBw
L2FwcC9jb21wb25lbnRfdWkvY29tcG9zZV9ib3guanM6IEFkZGVkLgorICAgICAgICAqIERvWW91
RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2FwcC9jb21wb25lbnRfdWkvZm9sZGVycy5q
czogQWRkZWQuCisgICAgICAgICogRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAv
YXBwL2NvbXBvbmVudF91aS9tYWlsX2NvbnRyb2xzLmpzOiBBZGRlZC4KKyAgICAgICAgKiBEb1lv
dUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9hcHAvY29tcG9uZW50X3VpL21haWxfaXRl
bXMuanM6IEFkZGVkLgorICAgICAgICAqIERvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUt
YXBwL2FwcC9jb21wb25lbnRfdWkvbW92ZV90b19zZWxlY3Rvci5qczogQWRkZWQuCisgICAgICAg
ICogRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvYXBwL2NvbXBvbmVudF91aS93
aXRoX3NlbGVjdC5qczogQWRkZWQuCisgICAgICAgICogRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMt
ZXhhbXBsZS1hcHAvYXBwL2NzczogQWRkZWQuCisgICAgICAgICogRG9Zb3VFdmVuQmVuY2gvZmxp
Z2h0anMtZXhhbXBsZS1hcHAvYXBwL2Nzcy9jdXN0b20uY3NzOiBBZGRlZC4KKyAgICAgICAgKiBE
b1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9hcHAvZGF0YS5qczogQWRkZWQuCisg
ICAgICAgICogRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvYXBwL3RlbXBsYXRl
cy5qczogQWRkZWQuCisgICAgICAgICogRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1h
cHAvY29tcG9uZW50czogQWRkZWQuCisgICAgICAgICogRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMt
ZXhhbXBsZS1hcHAvY29tcG9uZW50cy9ib290c3RyYXA6IEFkZGVkLgorICAgICAgICAqIERvWW91
RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvYm9vdHN0cmFwL2Nzczog
QWRkZWQuCisgICAgICAgICogRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29t
cG9uZW50cy9ib290c3RyYXAvY3NzL2Jvb3RzdHJhcC1yZXNwb25zaXZlLmNzczogQWRkZWQuCisg
ICAgICAgICogRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9i
b290c3RyYXAvY3NzL2Jvb3RzdHJhcC1yZXNwb25zaXZlLm1pbi5jc3M6IEFkZGVkLgorICAgICAg
ICAqIERvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvYm9vdHN0
cmFwL2Nzcy9ib290c3RyYXAuY3NzOiBBZGRlZC4KKyAgICAgICAgKiBEb1lvdUV2ZW5CZW5jaC9m
bGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2Jvb3RzdHJhcC9jc3MvYm9vdHN0cmFwLm1p
bi5jc3M6IEFkZGVkLgorICAgICAgICAqIERvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUt
YXBwL2NvbXBvbmVudHMvYm9vdHN0cmFwL2ltZzogQWRkZWQuCisgICAgICAgICogRG9Zb3VFdmVu
QmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9ib290c3RyYXAvaW1nL2dseXBo
aWNvbnMtaGFsZmxpbmdzLXdoaXRlLnBuZzogQWRkZWQuCisgICAgICAgICogRG9Zb3VFdmVuQmVu
Y2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9ib290c3RyYXAvaW1nL2dseXBoaWNv
bnMtaGFsZmxpbmdzLnBuZzogQWRkZWQuCisgICAgICAgICogRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0
anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9ib290c3RyYXAvanM6IEFkZGVkLgorICAgICAgICAq
IERvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvYm9vdHN0cmFw
L2pzL2Jvb3RzdHJhcC5qczogQWRkZWQuCisgICAgICAgICogRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0
anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9ib290c3RyYXAvanMvYm9vdHN0cmFwLm1pbi5qczog
QWRkZWQuCisgICAgICAgICogRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29t
cG9uZW50cy9lczUtc2hpbTogQWRkZWQuCisgICAgICAgICogRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0
anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9lczUtc2hpbS8uZ2l0aWdub3JlOiBBZGRlZC4KKyAg
ICAgICAgKiBEb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2Vz
NS1zaGltL0NIQU5HRVM6IEFkZGVkLgorICAgICAgICAqIERvWW91RXZlbkJlbmNoL2ZsaWdodGpz
LWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvZXM1LXNoaW0vQ09OVFJJQlVUT1JTLm1kOiBBZGRlZC4K
KyAgICAgICAgKiBEb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRz
L2VzNS1zaGltL0xJQ0VOU0U6IEFkZGVkLgorICAgICAgICAqIERvWW91RXZlbkJlbmNoL2ZsaWdo
dGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvZXM1LXNoaW0vUkVBRE1FLm1kOiBBZGRlZC4KKyAg
ICAgICAgKiBEb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2Vz
NS1zaGltL2NvbXBvbmVudC5qc29uOiBBZGRlZC4KKyAgICAgICAgKiBEb1lvdUV2ZW5CZW5jaC9m
bGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2VzNS1zaGltL2VzNS1zaGFtLmpzOiBBZGRl
ZC4KKyAgICAgICAgKiBEb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25l
bnRzL2VzNS1zaGltL2VzNS1zaGFtLm1pbi5qczogQWRkZWQuCisgICAgICAgICogRG9Zb3VFdmVu
QmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9lczUtc2hpbS9lczUtc2hpbS5q
czogQWRkZWQuCisgICAgICAgICogRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAv
Y29tcG9uZW50cy9lczUtc2hpbS9lczUtc2hpbS5taW4uanM6IEFkZGVkLgorICAgICAgICAqIERv
WW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvZXM1LXNoaW0vcGFj
a2FnZS5qc29uOiBBZGRlZC4KKyAgICAgICAgKiBEb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFt
cGxlLWFwcC9jb21wb25lbnRzL2VzNS1zaGltL3Rlc3RzOiBBZGRlZC4KKyAgICAgICAgKiBEb1lv
dUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2VzNS1zaGltL3Rlc3Rz
L2hlbHBlcnM6IEFkZGVkLgorICAgICAgICAqIERvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1w
bGUtYXBwL2NvbXBvbmVudHMvZXM1LXNoaW0vdGVzdHMvaGVscGVycy9oLWtpbGwuanM6IEFkZGVk
LgorICAgICAgICAqIERvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVu
dHMvZXM1LXNoaW0vdGVzdHMvaGVscGVycy9oLW1hdGNoZXJzLmpzOiBBZGRlZC4KKyAgICAgICAg
KiBEb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2VzNS1zaGlt
L3Rlc3RzL2hlbHBlcnMvaC5qczogQWRkZWQuCisgICAgICAgICogRG9Zb3VFdmVuQmVuY2gvZmxp
Z2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9lczUtc2hpbS90ZXN0cy9pbmRleC5odG1sOiBB
ZGRlZC4KKyAgICAgICAgKiBEb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21w
b25lbnRzL2VzNS1zaGltL3Rlc3RzL2xpYjogQWRkZWQuCisgICAgICAgICogRG9Zb3VFdmVuQmVu
Y2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9lczUtc2hpbS90ZXN0cy9saWIvamFz
bWluZS1odG1sLmpzOiBBZGRlZC4KKyAgICAgICAgKiBEb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1l
eGFtcGxlLWFwcC9jb21wb25lbnRzL2VzNS1zaGltL3Rlc3RzL2xpYi9qYXNtaW5lLmNzczogQWRk
ZWQuCisgICAgICAgICogRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9u
ZW50cy9lczUtc2hpbS90ZXN0cy9saWIvamFzbWluZS5qczogQWRkZWQuCisgICAgICAgICogRG9Z
b3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9lczUtc2hpbS90ZXN0
cy9saWIvamFzbWluZV9mYXZpY29uLnBuZzogQWRkZWQuCisgICAgICAgICogRG9Zb3VFdmVuQmVu
Y2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9lczUtc2hpbS90ZXN0cy9saWIvanNv
bjIuanM6IEFkZGVkLgorICAgICAgICAqIERvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUt
YXBwL2NvbXBvbmVudHMvZXM1LXNoaW0vdGVzdHMvc3BlYzogQWRkZWQuCisgICAgICAgICogRG9Z
b3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9lczUtc2hpbS90ZXN0
cy9zcGVjL3MtYXJyYXkuanM6IEFkZGVkLgorICAgICAgICAqIERvWW91RXZlbkJlbmNoL2ZsaWdo
dGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvZXM1LXNoaW0vdGVzdHMvc3BlYy9zLWRhdGUuanM6
IEFkZGVkLgorICAgICAgICAqIERvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2Nv
bXBvbmVudHMvZXM1LXNoaW0vdGVzdHMvc3BlYy9zLWZ1bmN0aW9uLmpzOiBBZGRlZC4KKyAgICAg
ICAgKiBEb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2VzNS1z
aGltL3Rlc3RzL3NwZWMvcy1vYmplY3QuanM6IEFkZGVkLgorICAgICAgICAqIERvWW91RXZlbkJl
bmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvZXM1LXNoaW0vdGVzdHMvc3BlYy9z
LXN0cmluZy5qczogQWRkZWQuCisgICAgICAgICogRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhh
bXBsZS1hcHAvY29tcG9uZW50cy9mbGlnaHQ6IEFkZGVkLgorICAgICAgICAqIERvWW91RXZlbkJl
bmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvZmxpZ2h0Ly50cmF2aXMueW1sOiBB
ZGRlZC4KKyAgICAgICAgKiBEb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21w
b25lbnRzL2ZsaWdodC9saWI6IEFkZGVkLgorICAgICAgICAqIERvWW91RXZlbkJlbmNoL2ZsaWdo
dGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvZmxpZ2h0L2xpYi9hZHZpY2UuanM6IEFkZGVkLgor
ICAgICAgICAqIERvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMv
ZmxpZ2h0L2xpYi9jb21wb25lbnQuanM6IEFkZGVkLgorICAgICAgICAqIERvWW91RXZlbkJlbmNo
L2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvZmxpZ2h0L2xpYi9jb21wb3NlLmpzOiBB
ZGRlZC4KKyAgICAgICAgKiBEb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21w
b25lbnRzL2ZsaWdodC9saWIvaW5kZXguanM6IEFkZGVkLgorICAgICAgICAqIERvWW91RXZlbkJl
bmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvZmxpZ2h0L2xpYi9sb2dnZXIuanM6
IEFkZGVkLgorICAgICAgICAqIERvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2Nv
bXBvbmVudHMvZmxpZ2h0L2xpYi9yZWdpc3RyeS5qczogQWRkZWQuCisgICAgICAgICogRG9Zb3VF
dmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9mbGlnaHQvbGliL3V0aWxz
LmpzOiBBZGRlZC4KKyAgICAgICAgKiBEb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFw
cC9jb21wb25lbnRzL2ZsaWdodC90b29sczogQWRkZWQuCisgICAgICAgICogRG9Zb3VFdmVuQmVu
Y2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9mbGlnaHQvdG9vbHMvZGVidWc6IEFk
ZGVkLgorICAgICAgICAqIERvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBv
bmVudHMvZmxpZ2h0L3Rvb2xzL2RlYnVnL2RlYnVnLmpzOiBBZGRlZC4KKyAgICAgICAgKiBEb1lv
dUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2phc21pbmUtZmxpZ2h0
OiBBZGRlZC4KKyAgICAgICAgKiBEb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9j
b21wb25lbnRzL2phc21pbmUtZmxpZ2h0L0xJQ0VOU0UubWQ6IEFkZGVkLgorICAgICAgICAqIERv
WW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvamFzbWluZS1mbGln
aHQvUkVBRE1FLm1kOiBBZGRlZC4KKyAgICAgICAgKiBEb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1l
eGFtcGxlLWFwcC9jb21wb25lbnRzL2phc21pbmUtZmxpZ2h0L2Jvd2VyLmpzb246IEFkZGVkLgor
ICAgICAgICAqIERvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMv
amFzbWluZS1mbGlnaHQvbGliOiBBZGRlZC4KKyAgICAgICAgKiBEb1lvdUV2ZW5CZW5jaC9mbGln
aHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2phc21pbmUtZmxpZ2h0L2xpYi9qYXNtaW5lLWZs
aWdodC5qczogQWRkZWQuCisgICAgICAgICogRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBs
ZS1hcHAvY29tcG9uZW50cy9qYXNtaW5lLWpxdWVyeTogQWRkZWQuCisgICAgICAgICogRG9Zb3VF
dmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9qYXNtaW5lLWpxdWVyeS9s
aWI6IEFkZGVkLgorICAgICAgICAqIERvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBw
L2NvbXBvbmVudHMvamFzbWluZS1qcXVlcnkvbGliL2phc21pbmUtanF1ZXJ5LmpzOiBBZGRlZC4K
KyAgICAgICAgKiBEb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRz
L2pxdWVyeTogQWRkZWQuCisgICAgICAgICogRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBs
ZS1hcHAvY29tcG9uZW50cy9qcXVlcnkvY29tcG9uZW50Lmpzb246IEFkZGVkLgorICAgICAgICAq
IERvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvanF1ZXJ5L2Nv
bXBvc2VyLmpzb246IEFkZGVkLgorICAgICAgICAqIERvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4
YW1wbGUtYXBwL2NvbXBvbmVudHMvanF1ZXJ5L2pxdWVyeS5qczogQWRkZWQuCisgICAgICAgICog
RG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9qcXVlcnkvanF1
ZXJ5Lm1pbi5qczogQWRkZWQuCisgICAgICAgICogRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhh
bXBsZS1hcHAvY29tcG9uZW50cy9tdXN0YWNoZTogQWRkZWQuCisgICAgICAgICogRG9Zb3VFdmVu
QmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9tdXN0YWNoZS9tdXN0YWNoZS5q
czogQWRkZWQuCisgICAgICAgICogRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAv
Y29tcG9uZW50cy9yZXF1aXJlanM6IEFkZGVkLgorICAgICAgICAqIERvWW91RXZlbkJlbmNoL2Zs
aWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvcmVxdWlyZWpzL3JlcXVpcmUuanM6IEFkZGVk
LgorICAgICAgICAqIERvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2luZGV4Lmh0
bWw6IEFkZGVkLgorICAgICAgICAqIERvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBw
L2thcm1hLmNvbmYuanM6IEFkZGVkLgorICAgICAgICAqIERvWW91RXZlbkJlbmNoL2ZsaWdodGpz
LWV4YW1wbGUtYXBwL3BhY2thZ2UuanNvbjogQWRkZWQuCisgICAgICAgICogRG9Zb3VFdmVuQmVu
Y2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvcmVxdWlyZU1haW4uanM6IEFkZGVkLgorCiAyMDEzLTA5
LTE5ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIERvWW91RXZl
bkJlbmNoOiBJbmRlbnRhdGlvbnMgaW4gYmVuY2htYXJrLmpzIGFuZCBiZW5jaG1hcmsuaHRtbCBh
cmUgYWxsIG1lc3NlZCB1cApJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9i
ZW5jaG1hcmsuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJl
bmNoL2JlbmNobWFyay5odG1sCShyZXZpc2lvbiAxNTY0MTkpCisrKyBQZXJmb3JtYW5jZVRlc3Rz
L0RvWW91RXZlbkJlbmNoL2JlbmNobWFyay5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsNyAr
MTEzLDYgQEAgQmVuY2htYXJrUnVubmVyLnN1aXRlKHsKICAgICBuYW1lOiAnalF1ZXJ5L1RvZG9N
VkMnLAogICAgIHVybDogJ3RvZG9tdmMvYXJjaGl0ZWN0dXJlLWV4YW1wbGVzL2pxdWVyeS9pbmRl
eC5odG1sJywKICAgICBwcmVwYXJlOiBmdW5jdGlvbiAoY29udGVudFdpbmRvdywgY29udGVudERv
Y3VtZW50KSB7Ci0gICAgdmFyIHN0b3JhZ2UgPSBbXTsKICAgICAgICAgcmV0dXJuIEJlbmNobWFy
a1J1bm5lci53YWl0Rm9yRWxlbWVudCgnI25ldy10b2RvJykudGhlbihmdW5jdGlvbiAoZWxlbWVu
dCkgewogICAgICAgICAgICAgZWxlbWVudC5mb2N1cygpOwogICAgICAgICAgICAgcmV0dXJuIGVs
ZW1lbnQ7CkBAIC0xNDcsNyArMTQ2LDYgQEAgQmVuY2htYXJrUnVubmVyLnN1aXRlKHsKICAgICBu
YW1lOiAnQW5ndWxhckpTL1RvZG9NVkMnLAogICAgIHVybDogJ3RvZG9tdmMvYXJjaGl0ZWN0dXJl
LWV4YW1wbGVzL2FuZ3VsYXJqcy9pbmRleC5odG1sJywKICAgICBwcmVwYXJlOiBmdW5jdGlvbiAo
Y29udGVudFdpbmRvdywgY29udGVudERvY3VtZW50KSB7Ci0gICAgdmFyIHN0b3JhZ2UgPSBbXTsK
ICAgICAgICAgcmV0dXJuIEJlbmNobWFya1J1bm5lci53YWl0Rm9yRWxlbWVudCgnI25ldy10b2Rv
JykudGhlbihmdW5jdGlvbiAoZWxlbWVudCkgewogICAgICAgICAgICAgZWxlbWVudC5mb2N1cygp
OwogICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CkBAIC0xNzksOSArMTc3LDYyIEBAIEJlbmNo
bWFya1J1bm5lci5zdWl0ZSh7CiAgICAgXQogfSk7CiAKK3ZhciBhY3Rpb25Db3VudCA9IDUwOwor
QmVuY2htYXJrUnVubmVyLnN1aXRlKHsKKyAgICBuYW1lOiAnRmxpZ2h0SlMvTWFpbENsaWVudCcs
CisgICAgdXJsOiAnZmxpZ2h0anMtZXhhbXBsZS1hcHAvaW5kZXguaHRtbCcsCisgICAgcHJlcGFy
ZTogZnVuY3Rpb24gKGNvbnRlbnRXaW5kb3csIGNvbnRlbnREb2N1bWVudCkgeworICAgICAgICBy
ZXR1cm4gQmVuY2htYXJrUnVubmVyLndhaXRGb3JFbGVtZW50KCcuc3BhbjgnKS50aGVuKGZ1bmN0
aW9uIChlbGVtZW50KSB7CisgICAgICAgICAgICBlbGVtZW50LmZvY3VzKCk7CisgICAgICAgICAg
ICByZXR1cm4gZWxlbWVudDsKKyAgICAgICAgfSk7CisgICAgfSwKKyAgICB0ZXN0czogWworICAg
ICAgICBbJ09wZW5pbmdUYWJzJyArIGFjdGlvbkNvdW50ICsgJ1RpbWVzJywgZnVuY3Rpb24gKG5l
d1RvZG8sIGNvbnRlbnRXaW5kb3csIGNvbnRlbnREb2N1bWVudCkgeworICAgICAgICAgICAgY29u
dGVudERvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbmJveCcpLmNsaWNrKCk7CisgICAgICAgICAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IGFjdGlvbkNvdW50OyBpKyspIHsKKyAgICAgICAgICAgICAg
ICBjb250ZW50RG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xhdGVyJykuY2xpY2soKTsKKyAgICAg
ICAgICAgICAgICBjb250ZW50RG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NlbnQnKS5jbGljaygp
OworICAgICAgICAgICAgICAgIGNvbnRlbnREb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndHJhc2gn
KS5jbGljaygpOworICAgICAgICAgICAgICAgIGNvbnRlbnREb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgnaW5ib3gnKS5jbGljaygpOworICAgICAgICAgICAgfQorICAgICAgICB9XSwKKyAgICAgICAg
WydNb3ZpbmdFbWFpbHMnICsgYWN0aW9uQ291bnQgKyAnVGltZXMnLCBmdW5jdGlvbiAobmV3VG9k
bywgY29udGVudFdpbmRvdywgY29udGVudERvY3VtZW50KSB7CisgICAgICAgICAgICBjb250ZW50
RG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2luYm94JykuY2xpY2soKTsKKyAgICAgICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgYWN0aW9uQ291bnQ7IGkrKykgeworICAgICAgICAgICAgICAgIGNv
bnRlbnREb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFpbF8yMTM5JykuY2xpY2soKTsKKyAgICAg
ICAgICAgICAgICBjb250ZW50RG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vdmVfbWFpbCcpLmNs
aWNrKCk7CisgICAgICAgICAgICAgICAgY29udGVudERvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNt
b3ZlX3RvX3NlbGVjdG9yICNsYXRlcicpLmNsaWNrKCk7CisgICAgICAgICAgICAgICAgY29udGVu
dERvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsYXRlcicpLmNsaWNrKCk7CisgICAgICAgICAgICAg
ICAgY29udGVudERvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYWlsXzIxMzknKS5jbGljaygpOwor
ICAgICAgICAgICAgICAgIGNvbnRlbnREb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW92ZV9tYWls
JykuY2xpY2soKTsKKyAgICAgICAgICAgICAgICBjb250ZW50RG9jdW1lbnQucXVlcnlTZWxlY3Rv
cignI21vdmVfdG9fc2VsZWN0b3IgI3RyYXNoJykuY2xpY2soKTsKKyAgICAgICAgICAgICAgICBj
b250ZW50RG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RyYXNoJykuY2xpY2soKTsKKyAgICAgICAg
ICAgICAgICBjb250ZW50RG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21haWxfMjEzOScpLmNsaWNr
KCk7CisgICAgICAgICAgICAgICAgY29udGVudERvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb3Zl
X21haWwnKS5jbGljaygpOworICAgICAgICAgICAgICAgIGNvbnRlbnREb2N1bWVudC5xdWVyeVNl
bGVjdG9yKCcjbW92ZV90b19zZWxlY3RvciAjaW5ib3gnKS5jbGljaygpOworICAgICAgICAgICAg
ICAgIGNvbnRlbnREb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW5ib3gnKS5jbGljaygpOworICAg
ICAgICAgICAgfQorICAgICAgICB9XSwKKyAgICAgICAgWydTZW5kaW5nJyArIGFjdGlvbkNvdW50
ICsgJ05ld0VtYWlscycsIGZ1bmN0aW9uIChuZXdUb2RvLCBjb250ZW50V2luZG93LCBjb250ZW50
RG9jdW1lbnQpIHsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYWN0aW9uQ291bnQ7
IGkrKykgeworICAgICAgICAgICAgICAgIGNvbnRlbnREb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn
bmV3X21haWwnKS5jbGljaygpOworICAgICAgICAgICAgICAgIHZhciBzdWJqZWN0ID0gY29udGVu
dERvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb21wb3NlX3N1YmplY3QnKTsKKyAgICAgICAgICAg
ICAgICB2YXIgbWVzc2FnZSA9IGNvbnRlbnREb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29tcG9z
ZV9tZXNzYWdlJyk7CisgICAgICAgICAgICAgICAgc3ViamVjdC5mb2N1cygpOworICAgICAgICAg
ICAgICAgIGNvbnRlbnRXaW5kb3cuJChzdWJqZWN0KS50cmlnZ2VyKCdrZXlkb3duJyk7CisgICAg
ICAgICAgICAgICAgY29udGVudERvY3VtZW50LmV4ZWNDb21tYW5kKCdJbnNlcnRUZXh0JywgZmFs
c2UsICdIZWxsbycpOworICAgICAgICAgICAgICAgIG1lc3NhZ2UuZm9jdXMoKTsKKyAgICAgICAg
ICAgICAgICBjb250ZW50V2luZG93LiQobWVzc2FnZSkudHJpZ2dlcigna2V5ZG93bicpOworICAg
ICAgICAgICAgICAgIGNvbnRlbnREb2N1bWVudC5leGVjQ29tbWFuZCgnSW5zZXJ0VGV4dCcsIGZh
bHNlLCAnSGVsbG8sXG5cblRoaXMgaXMgYSB0ZXN0IG1lc3NhZ2UuXG5cbi0gV2ViS2l0dGVuJyk7
CisgICAgICAgICAgICAgICAgY29udGVudERvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZW5kX2Nv
bXBvc2VkJykuY2xpY2soKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfV0sCisgICAgXQorfSk7
CisKIDwvc2NyaXB0PgogPC9oZWFkPgogPGJvZHk+Ci08cD48L3A+CiA8L2JvZHk+CiA8L2h0bWw+
CkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2JlbmNobWFyay5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2JlbmNobWFyay5qcwko
cmV2aXNpb24gMTU2NDE5KQorKysgUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9iZW5j
aG1hcmsuanMJKHdvcmtpbmcgY29weSkKQEAgLTMxOSw3ICszMTksNyBAQCB3aW5kb3cuYWRkRXZl
bnRMaXN0ZW5lcignbG9hZCcsIGZ1bmN0aW9uCiAKIChmdW5jdGlvbiAoKSB7CiAgICAgdmFyIHN0
eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTsKLSAgICBzdHlsZS5hcHBlbmRD
aGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnaWZyYW1lIHsgd2lkdGg6IDcwMHB4OyBoZWln
aHQ6IDUwMHB4OyBib3JkZXI6IDJweCBzb2xpZCBibGFjazsgfScKKyAgICBzdHlsZS5hcHBlbmRD
aGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnaWZyYW1lIHsgd2lkdGg6IDEwMDBweDsgaGVp
Z2h0OiA1MDBweDsgYm9yZGVyOiAycHggc29saWQgYmxhY2s7IH0nCiAgICAgICAgICsgJ29sIHsg
bGlzdC1zdHlsZTogbm9uZTsgbWFyZ2luOiAwOyBwYWRkaW5nOiAwOyB9JwogICAgICAgICArICdv
bCBvbCB7IG1hcmdpbi1sZWZ0OiAyZW07IGxpc3QtcG9zaXRpb246IG91dHNpZGU7IH0nCiAgICAg
ICAgICsgJy5ydW5uaW5nIHsgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7IH0nCkluZGV4OiBQ
ZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL0xJQ0VO
U0UubWQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGln
aHRqcy1leGFtcGxlLWFwcC9MSUNFTlNFLm1kCShyZXZpc2lvbiAwKQorKysgUGVyZm9ybWFuY2VU
ZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9MSUNFTlNFLm1kCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTkgQEAKK0NvcHlyaWdodCAoYykgVHdpdHRlciBJbmMKKwor
UGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJz
b24gb2J0YWluaW5nIGEgY29weQorb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1
bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKK2luIHRoZSBTb2Z0d2Fy
ZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSBy
aWdodHMKK3RvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwg
c3VibGljZW5zZSwgYW5kL29yIHNlbGwKK2NvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBw
ZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworZnVybmlzaGVkIHRvIGRvIHNv
LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworVGhlIGFib3ZlIGNvcHly
aWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQg
aW4KK2FsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgor
CitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBB
TlkgS0lORCwgRVhQUkVTUyBPUgorSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBU
TyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCitGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUK
K0FVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERB
TUFHRVMgT1IgT1RIRVIKK0xJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJB
Q1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCitPVVQgT0YgT1IgSU4gQ09OTkVD
VElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCitU
SEUgU09GVFdBUkUuCkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdo
dGpzLWV4YW1wbGUtYXBwL1JFQURNRS5tZAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3Rz
L0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL1JFQURNRS5tZAkocmV2aXNpb24g
MCkKKysrIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1h
cHAvUkVBRE1FLm1kCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNSBAQAorIyBGbGlnaHQgZXhh
bXBsZSBhcHAKKworWyFbQnVpbGQgU3RhdHVzXShodHRwczovL3RyYXZpcy1jaS5vcmcvZmxpZ2h0
anMvZXhhbXBsZS1hcHAucG5nP2JyYW5jaD1tYXN0ZXIpXShodHRwOi8vdHJhdmlzLWNpLm9yZy9m
bGlnaHRqcy9leGFtcGxlLWFwcCkKKworQW4gZXhhbXBsZSBGbGlnaHQgYXBwbGljYXRpb24uCklu
ZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBw
L2luZGV4Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5j
aC9mbGlnaHRqcy1leGFtcGxlLWFwcC9pbmRleC5odG1sCShyZXZpc2lvbiAwKQorKysgUGVyZm9y
bWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9pbmRleC5odG1s
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjAgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+
CisgIDxoZWFkPgorICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAgICA8dGl0bGU+RmxpZ2h0
IE1haWw8L3RpdGxlPgorICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iY29tcG9uZW50
cy9ib290c3RyYXAvY3NzL2Jvb3RzdHJhcC5taW4uY3NzIj4KKyAgICA8bGluayByZWw9InN0eWxl
c2hlZXQiIGhyZWY9ImNvbXBvbmVudHMvYm9vdHN0cmFwL2Nzcy9ib290c3RyYXAtcmVzcG9uc2l2
ZS5taW4uY3NzIj4KKyAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImFwcC9jc3MvY3Vz
dG9tLmNzcyI+CisgIDwvaGVhZD4KKworICA8Ym9keT4KKyAgICA8YnI+CisKKyAgICA8ZGl2IGNs
YXNzPSJjb250YWluZXItZmx1aWQiPgorICAgICAgPGRpdiBjbGFzcz0icm93LWZsdWlkIj4KKyAg
ICAgICAgPGRpdiBjbGFzcz0ic3BhbjIiPgorICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXIt
bmF2Ij4KKworICAgICAgICAgICAgPGJ1dHRvbiBpZD0ibmV3X21haWwiIGNsYXNzPSJidG4gY29t
cG9zZSIgZGF0YS10b2dnbGU9ImRyb3Bkb3duIj5OZXc8L2J1dHRvbj4KKworICAgICAgICAgICAg
PGJyPjxicj4KKworICAgICAgICAgICAgPHVsIGlkPSJmb2xkZXJzIiBjbGFzcz0ibmF2IG5hdi1s
aXN0Ij4KKyAgICAgICAgICAgICAgPGxpIGNsYXNzPSJmb2xkZXItaXRlbSBzZWxlY3RlZCIgaWQ9
ImluYm94Ij48aSBjbGFzcz0iaWNvbi1mb2xkZXItY2xvc2UiPjwvaT4gSW5ib3g8L2xpPgorICAg
ICAgICAgICAgICA8bGkgY2xhc3M9ImZvbGRlci1pdGVtIiBpZD0ibGF0ZXIiPjxpIGNsYXNzPSJp
Y29uLWZvbGRlci1jbG9zZSI+PC9pPiBMYXRlcjwvbGk+CisgICAgICAgICAgICAgIDxsaSBjbGFz
cz0iZm9sZGVyLWl0ZW0iIGlkPSJzZW50Ij48aSBjbGFzcz0iaWNvbi1zaGFyZS1hbHQiPjwvaT4g
U2VudDwvbGk+CisgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZm9sZGVyLWl0ZW0iIGlkPSJ0cmFz
aCI+PGkgY2xhc3M9Imljb24tdHJhc2giPjwvaT4gVHJhc2g8L2xpPgorICAgICAgICAgICAgPC91
bD4KKyAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgPC9kaXY+CisKKyAgICAgICAgPGRpdiBpZD0i
bWFpbF9wYW5lbCIgY2xhc3M9InNwYW4xMCI+CisKKyAgICAgICAgICA8ZGl2IGlkPSJtYWlsX2Nv
bnRyb2xzIiBjbGFzcz0iYnRuLXRvb2xiYXIiIHN0eWxlPSJtYXJnaW46IDAgMCAxM3B4Ij4KKyAg
ICAgICAgICAgIDxkaXYgY2xhc3M9ImJ0bi1ncm91cCI+CisgICAgICAgICAgICAgIDxidXR0b24g
aWQ9ImRlbGV0ZV9tYWlsIiBjbGFzcz0iYnRuIG1haWwtYWN0aW9uIiBkaXNhYmxlZD48aSBjbGFz
cz0iaWNvbi10cmFzaCI+PC9pPiBkZWxldGU8L2J1dHRvbj4KKyAgICAgICAgICAgICAgPGJ1dHRv
biBpZD0ibW92ZV9tYWlsIiBjbGFzcz0iYnRuIG1haWwtYWN0aW9uIiBkaXNhYmxlZD48aSBjbGFz
cz0iaWNvbi1tb3ZlIj48L2k+IG1vdmU8L2J1dHRvbj4KKyAgICAgICAgICAgICAgPGJ1dHRvbiBp
ZD0iZm9yd2FyZCIgY2xhc3M9ImJ0biBjb21wb3NlIG1haWwtYWN0aW9uIHNpbmdsZS1pdGVtIiBk
aXNhYmxlZD48aSBjbGFzcz0iaWNvbi1hcnJvdy1yaWdodCI+PC9pPiBmb3J3YXJkPC9idXR0b24+
CisgICAgICAgICAgICAgIDxidXR0b24gaWQ9InJlcGx5IiBjbGFzcz0iYnRuIGNvbXBvc2UgbWFp
bC1hY3Rpb24gc2luZ2xlLWl0ZW0iIGRpc2FibGVkPjxpIGNsYXNzPSJpY29uLXBlbmNpbCI+PC9p
PiByZXBseTwvYnV0dG9uPgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgPC9kaXY+CisK
KyAgICAgICAgICA8dGFibGUgaWQ9Im1haWxfaXRlbXMiIGNsYXNzPSJoZXJvLXVuaXQgdGFibGUg
dGFibGUtaG92ZXIiIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGRkZGIj4KKyAgICAgICAg
ICAgIDx0Ym9keSBpZD0ibWFpbF9pdGVtc19UQiI+CisgICAgICAgICAgICA8L3Rib2R5PgorICAg
ICAgICAgIDwvdGFibGU+CisgICAgICAgIDwvZGl2PgorICAgICAgPC9kaXY+CisgICAgPC9kaXY+
CisKKyAgICA8ZGl2IGlkPSJjb21wb3NlX2JveCIgY2xhc3M9ImNvbXBvc2UtYm94IG1vZGFsIGhp
ZGUgZmFkZSBpbiI+PC9kaXY+CisKKyAgICA8ZGl2IGlkPSJtb3ZlX3RvX3NlbGVjdG9yIiBjbGFz
cz0ibW92ZS10by1zZWxlY3RvciBoaWRlIj48L2Rpdj4KKworICAgIDxzY3JpcHQgc3JjPSJjb21w
b25lbnRzL2pxdWVyeS9qcXVlcnkuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJjb21w
b25lbnRzL2VzNS1zaGltL2VzNS1zaGltLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0i
Y29tcG9uZW50cy9lczUtc2hpbS9lczUtc2hhbS5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBk
YXRhLW1haW49InJlcXVpcmVNYWluLmpzIiBzcmM9ImNvbXBvbmVudHMvcmVxdWlyZWpzL3JlcXVp
cmUuanMiPjwvc2NyaXB0PgorICA8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBQZXJmb3JtYW5jZVRl
c3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2thcm1hLmNvbmYuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFt
cGxlLWFwcC9rYXJtYS5jb25mLmpzCShyZXZpc2lvbiAwKQorKysgUGVyZm9ybWFuY2VUZXN0cy9E
b1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9rYXJtYS5jb25mLmpzCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNTggQEAKKy8vIEthcm1hIGNvbmZpZ3VyYXRpb24gZmlsZQorLy8K
Ky8vIEZvciBhbGwgYXZhaWxhYmxlIGNvbmZpZyBvcHRpb25zIGFuZCBkZWZhdWx0IHZhbHVlcywg
c2VlOgorLy8gaHR0cHM6Ly9naXRodWIuY29tL2thcm1hLXJ1bm5lci9rYXJtYS9ibG9iL3N0YWJs
ZS9saWIvY29uZmlnLmpzI0w1NAorCisKKy8vIGJhc2UgcGF0aCwgdGhhdCB3aWxsIGJlIHVzZWQg
dG8gcmVzb2x2ZSBmaWxlcyBhbmQgZXhjbHVkZQorYmFzZVBhdGggPSAnJzsKKworLy8gbGlzdCBv
ZiBmaWxlcyAvIHBhdHRlcm5zIHRvIGxvYWQgaW4gdGhlIGJyb3dzZXIKK2ZpbGVzID0gWworICAn
Y29tcG9uZW50cy9lczUtc2hpbS9lczUtc2hpbS5qcycsCisgICdjb21wb25lbnRzL2VzNS1zaGlt
L2VzNS1zaGFtLmpzJywKKworICAvLyBmcmFtZXdvcmtzCisgIEpBU01JTkUsCisgIEpBU01JTkVf
QURBUFRFUiwKKyAgUkVRVUlSRSwKKyAgUkVRVUlSRV9BREFQVEVSLAorCisgIC8vIGxvYWRlZCB3
aXRob3V0IHJlcXVpcmUKKyAgJ2NvbXBvbmVudHMvanF1ZXJ5L2pxdWVyeS5qcycsCisgICdjb21w
b25lbnRzL2phc21pbmUtanF1ZXJ5L2xpYi9qYXNtaW5lLWpxdWVyeS5qcycsCisgICdjb21wb25l
bnRzL2phc21pbmUtZmxpZ2h0L2xpYi9qYXNtaW5lLWZsaWdodC5qcycsCisKKyAgLy8gbG9hZGVk
IHdpdGggcmVxdWlyZQorICB7cGF0dGVybjogJ2NvbXBvbmVudHMvZmxpZ2h0LyoqLyouanMnLCBp
bmNsdWRlZDogZmFsc2V9LAorICB7cGF0dGVybjogJ2NvbXBvbmVudHMvbXVzdGFjaGUvKiovKi5q
cycsIGluY2x1ZGVkOiBmYWxzZX0sCisgIHtwYXR0ZXJuOiAnYXBwLyoqLyouanMnLCBpbmNsdWRl
ZDogZmFsc2V9LAorICB7cGF0dGVybjogJ3Rlc3QvZml4dHVyZXMvKiovKi5odG1sJywgaW5jbHVk
ZWQ6IGZhbHNlfSwKKyAge3BhdHRlcm46ICd0ZXN0L3NwZWMvKiovKi5qcycsIGluY2x1ZGVkOiBm
YWxzZX0sCisKKyAgJ3Rlc3QvdGVzdC1tYWluLmpzJworXTsKKworLy8gbGlzdCBvZiBmaWxlcyB0
byBleGNsdWRlCitleGNsdWRlID0gWworCitdOworCisvLyB1c2UgZG90cyByZXBvcnRlciwgYXMg
dHJhdmlzIHRlcm1pbmFsIGRvZXMgbm90IHN1cHBvcnQgZXNjYXBpbmcgc2VxdWVuY2VzCityZXBv
cnRlcnMgPSBbCisgICdkb3RzJworXTsKKworLy8gZW5hYmxlIC8gZGlzYWJsZSB3YXRjaGluZyBm
aWxlIGFuZCBleGVjdXRpbmcgdGVzdHMgd2hlbmV2ZXIgYW55IGZpbGUgY2hhbmdlcworLy8gQ0xJ
IC0tYXV0by13YXRjaCAtLW5vLWF1dG8td2F0Y2gKK2F1dG9XYXRjaCA9IHRydWU7CisKKy8vIHN0
YXJ0IHRoZXNlIGJyb3dzZXJzCiticm93c2VycyA9IFsKKyAgJ0Nocm9tZScsCisgICdGaXJlZm94
JworXTsKKworLy8gYXV0byBydW4gdGVzdHMgb24gc3RhcnQgKHdoZW4gYnJvd3NlcnMgYXJlIGNh
cHR1cmVkKSBhbmQgZXhpdAorLy8gQ0xJIC0tc2luZ2xlLXJ1biAtLW5vLXNpbmdsZS1ydW4KK3Np
bmdsZVJ1biA9IGZhbHNlOwpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9m
bGlnaHRqcy1leGFtcGxlLWFwcC9wYWNrYWdlLmpzb24KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFu
Y2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9wYWNrYWdlLmpzb24J
KHJldmlzaW9uIDApCisrKyBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpz
LWV4YW1wbGUtYXBwL3BhY2thZ2UuanNvbgkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExIEBA
Cit7CisgICJwcml2YXRlIjogdHJ1ZSwKKyAgIm5hbWUiOiAiZmxpZ2h0LWV4YW1wbGUtYXBwIiwK
KyAgInZlcnNpb24iOiAiMC4wLjAiLAorICAiZGV2RGVwZW5kZW5jaWVzIjogeworICAgICJrYXJt
YSI6ICJ+MC44LjUiCisgIH0sCisgICJzY3JpcHRzIjogeworICAgICJ0ZXN0IjogIi4vbm9kZV9t
b2R1bGVzLy5iaW4va2FybWEgc3RhcnQgLS1zaW5nbGUtcnVuIC0tYnJvd3NlcnMgRmlyZWZveCIK
KyAgfQorfQpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1l
eGFtcGxlLWFwcC9yZXF1aXJlTWFpbi5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3Rz
L0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL3JlcXVpcmVNYWluLmpzCShyZXZp
c2lvbiAwKQorKysgUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFt
cGxlLWFwcC9yZXF1aXJlTWFpbi5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI0IEBACity
ZXF1aXJlanMuY29uZmlnKHsKKyAgYmFzZVVybDogJycsCisgIHBhdGhzOiB7CisgICAgJ2ZsaWdo
dCc6ICdjb21wb25lbnRzL2ZsaWdodCcKKyAgfQorfSk7CisKK3JlcXVpcmUoCisgIFsKKyAgICAn
ZmxpZ2h0L2xpYi9jb21wb3NlJywKKyAgICAnZmxpZ2h0L2xpYi9yZWdpc3RyeScsCisgICAgJ2Zs
aWdodC9saWIvYWR2aWNlJywKKyAgICAnZmxpZ2h0L2xpYi9sb2dnZXInLAorICAgICdmbGlnaHQv
dG9vbHMvZGVidWcvZGVidWcnCisgIF0sCisKKyAgZnVuY3Rpb24oY29tcG9zZSwgcmVnaXN0cnks
IGFkdmljZSwgd2l0aExvZ2dpbmcsIGRlYnVnKSB7CisgICAgZGVidWcuZW5hYmxlKHRydWUpOwor
ICAgIGNvbXBvc2UubWl4aW4ocmVnaXN0cnksIFthZHZpY2Uud2l0aEFkdmljZSwgd2l0aExvZ2dp
bmddKTsKKyAgICByZXF1aXJlKFsnYXBwL2Jvb3QvcGFnZSddLCBmdW5jdGlvbihpbml0aWFsaXpl
KSB7CisgICAgICBpbml0aWFsaXplKCk7CisgICAgfSk7CisgIH0KKyk7CkluZGV4OiBQZXJmb3Jt
YW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2FwcC9kYXRhLmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMt
ZXhhbXBsZS1hcHAvYXBwL2RhdGEuanMJKHJldmlzaW9uIDApCisrKyBQZXJmb3JtYW5jZVRlc3Rz
L0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2FwcC9kYXRhLmpzCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTEwIEBACisndXNlIHN0cmljdCc7CisKK2RlZmluZSgKKyAgZnVu
Y3Rpb24oKSB7CisgICAgcmV0dXJuIHsKKyAgICAgIGZvbGRlcnM6IFsiaW5ib3giLCAibGF0ZXIi
LCAic2VudCIsICJ0cmFzaCJdLAorICAgICAgY29udGFjdHM6IFsKKyAgICAgICAgeworICAgICAg
ICAgICJpZCI6ICJjb250YWN0XzM0MiIsCisgICAgICAgICAgImZpcnN0TmFtZSI6ICJNaWNoYWVs
IiwKKyAgICAgICAgICAibGFzdE5hbWUiOiAiU21pdGgiLAorICAgICAgICAgICJlbWFpbCI6ICJt
c0Bwcm94eXdlYi5jb20iCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAiaWQiOiAi
Y29udGFjdF8zNzciLAorICAgICAgICAgICJmaXJzdE5hbWUiOiAiTWFyeSIsCisgICAgICAgICAg
Imxhc3ROYW1lIjogIkpvbmVzIiwKKyAgICAgICAgICAiZW1haWwiOiAibWFyeUBqb25lcy5uZXQi
CisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAiaWQiOiAiY29udGFjdF8zOTgiLAor
ICAgICAgICAgICJmaXJzdE5hbWUiOiAiQmlsbHkiLAorICAgICAgICAgICJsYXN0TmFtZSI6ICJJ
ZGlvdCIsCisgICAgICAgICAgImVtYWlsIjogIndpbGxpYW1faWRpb3RAZ21haWwuY29tIgorICAg
ICAgICB9CisgICAgICBdLAorICAgICAgbWFpbDogWworICAgICAgICB7CisgICAgICAgICAgImlk
IjogIm1haWxfMjEzOSIsCisgICAgICAgICAgImNvbnRhY3RfaWQiOiAiY29udGFjdF8zNDIiLAor
ICAgICAgICAgICJmb2xkZXJzIjogWyJpbmJveCJdLAorICAgICAgICAgICJ0aW1lIjogMTMzNDg5
MTk3NjEwNCwKKyAgICAgICAgICAic3ViamVjdCI6ICJDb25zZWN0ZXR1ciBhZGlwaXNjaW5nIGVs
aXQiLAorICAgICAgICAgICJtZXNzYWdlIjogIlZlc3RpYnVsdW0gdmVzdGlidWx1bSB2YXJpdXMg
ZGlhbSBpbiBpYWN1bGlzLiBQcmFlc2VudCB1bHRyaWNlcyBkdWkgdml0YWUgbmliaCBtYWxlc3Vh
ZGEgbm9uIGlhY3VsaXMgYW50ZSB2dWxwdXRhdGUuIFN1c3BlbmRpc3NlIGZldWdpYXQgdWx0cmlj
aWVzIGVnZXN0YXMuIEFlbmVhbiBhIG9kaW8gbGliZXJvLiBRdWlzcXVlIG1vbGxpcyBsZW8gZXQg
ZXN0IGV1aXNtb2Qgc2l0IGFtZXQgZGlnbmlzc2ltIHNhcGllbiB2ZW5lbmF0aXMuIE1vcmJpIGlu
dGVyZHVtIGFkaXBpc2NpbmcgbWFzc2EiCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAg
ICAiaWQiOiAibWFpbF8yMTQzIiwKKyAgICAgICAgICAiY29udGFjdF9pZCI6ICJjb250YWN0XzM3
NyIsCisgICAgICAgICAgImZvbGRlcnMiOiBbImluYm94IiwgImxhdGVyIl0sCisgICAgICAgICAg
ImltcG9ydGFudCI6ICJ0cnVlIiwKKyAgICAgICAgICAidGltZSI6IDEzMzQ4ODQ5NzYxMDQsCisg
ICAgICAgICAgInN1YmplY3QiOiAiTmVxdWUgcG9ycm8gcXVpc3F1YW0gdmVsaXQhISIsCisgICAg
ICAgICAgIm1lc3NhZ2UiOiAiQ3VyYWJpdHVyIHNvbGxpY2l0dWRpbiBtaSBlZ2V0IHNhcGllbiBw
b3N1ZXJlIHNlbXBlci4gRnVzY2UgYXQgbmVxdWUgZXQgbGFjdXMgbHVjdHVzIHZ1bHB1dGF0ZSB2
ZWhpY3VsYSBhYyBlbmltIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgImlkIjog
Im1haWxfMjE1NCIsCisgICAgICAgICAgImNvbnRhY3RfaWQiOiAiY29udGFjdF8zOTgiLAorICAg
ICAgICAgICJmb2xkZXJzIjogWyJpbmJveCJdLAorICAgICAgICAgICJpbXBvcnRhbnQiOiAidHJ1
ZSIsCisgICAgICAgICAgInVucmVhZCI6ICJ0cnVlIiwKKyAgICAgICAgICAidGltZSI6IDEzMzQ4
NzQ5NzYxOTksCisgICAgICAgICAgInN1YmplY3QiOiAiUHJvaW4gZWdlc3RhcyBhbGlxdWFtIDop
IiwKKyAgICAgICAgICAibWVzc2FnZSI6ICJBZW5lYW4gbmVjIGVyYXQgaWQgaXBzdW0gZmF1Y2li
dXMgdHJpc3RpcXVlLiBOYW0gYmxhbmRpdCBlc3QgbGFjaW5pYSB0dXJwaXMgY29uc2VjdGV0dXIg
ZWxlbWVudHVtLiBOdWxsYSBpbiByaXN1cyB1dCBzYXBpZW4gZGlnbmlzc2ltIGZldWdpYXQuIFBy
b2luIHVsdHJpY2VzIHNvZGFsZXMgaW1wZXJkaWV0LiBWZXN0aWJ1bHVtIHZlaGljdWxhIGJsYW5k
aXQgdGluY2lkdW50LiBWaXZhbXVzIHBvc3VlcmUgcmhvbmN1cyBvcmNpLCBwb3J0YSBjb21tb2Rv
IG1hdXJpcyBhbGlxdWFtIG5lYyIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICJp
ZCI6ICJtYWlsXzIxNzYiLAorICAgICAgICAgICJjb250YWN0X2lkIjogImNvbnRhY3RfMzc3IiwK
KyAgICAgICAgICAiZm9sZGVycyI6IFsiaW5ib3giXSwKKyAgICAgICAgICAidGltZSI6IDEzMzQ4
ODQ5NzYxMDQsCisgICAgICAgICAgInN1YmplY3QiOiAiU2VkIHV0IHBlcnNwaWNpYXRpcyB1bmRl
IG9tbmlzPyIsCisgICAgICAgICAgIm1lc3NhZ2UiOiAibGF1ZGFudGl1bSwgdG90YW0gcmVtIGFw
ZXJpYW0sIGVhcXVlIGlwc2EgcXVhZSBhYiBpbGxvIGludmVudG9yZSB2ZXJpdGF0aXMgZXQgcXVh
c2kgYXJjaGl0ZWN0byBiZWF0YWUgdml0YWUgZGljdGEgc3VudCBleHBsaWNhYm8uIE5lbW8gZW5p
bSBpcHNhbSB2b2x1cHRhdGVtIHF1aWEgdm9sdXB0YXMgc2l0IGFzcGVybmF0dXIgYXV0IG9kaXQg
YXV0IGZ1Z2l0LCBzZWQgcXVpYSBjb25zZXF1dW50dXIgbWFnbmkgZG9sb3JlcyBlb3MgcXVpIHJh
dGlvbmUgdm9sdXB0YXRlbSBzZXF1aSBuZXNjaXVudC4gTmVxdWUgcG9ycm8gcXVpc3F1YW0gZXN0
LCBxdWkgZG9sb3JlbSBpcHN1bSBxdWlhIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciwgYWRp
cGlzY2kgdmVsaXQsIHNlZCBxdWlhIG5vbiBudW1xdWFtIGVpdXMgbW9kaSB0ZW1wb3JhIGluY2lk
dW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmFtIGFsaXF1YW0gcXVhZXJhdCB2b2x1cHRhdGVt
LiIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICJpZCI6ICJtYWlsXzIxOTEiLAor
ICAgICAgICAgICJjb250YWN0X2lkIjogImNvbnRhY3RfMzk4IiwKKyAgICAgICAgICAiZm9sZGVy
cyI6IFsiaW5ib3giXSwKKyAgICAgICAgICAidW5yZWFkIjogInRydWUiLAorICAgICAgICAgICJ0
aW1lIjogMTMzNDg3NDk3NjE5OSwKKyAgICAgICAgICAic3ViamVjdCI6ICJBdCB2ZXJvIGVvcyBl
dCBhY2N1c2FtdXMhIiwKKyAgICAgICAgICAibWVzc2FnZSI6ICJOYW0gbGliZXJvIHRlbXBvcmUs
IGN1bSBzb2x1dGEgbm9iaXMgZXN0IGVsaWdlbmRpIG9wdGlvIGN1bXF1ZSBuaWhpbCBpbXBlZGl0
IHF1byBtaW51cyBpZCBxdW9kIG1heGltZSBwbGFjZWF0IGZhY2VyZSBwb3NzaW11cywgb21uaXMg
dm9sdXB0YXMgYXNzdW1lbmRhIGVzdCwgb21uaXMgZG9sb3IgcmVwZWxsZW5kdXMuIFRlbXBvcmli
dXMgYXV0ZW0gcXVpYnVzZGFtIGV0IGF1dCBvZmZpY2lpcyBkZWJpdGlzIGF1dCByZXJ1bSBuZWNl
c3NpdGF0aWJ1cyBzYWVwZSBldmVuaWV0IHV0IGV0IHZvbHVwdGF0ZXMgcmVwdWRpYW5kYWUgc2lu
dCBldCBtb2xlc3RpYWUgbm9uIHJlY3VzYW5kYWUuIEl0YXF1ZSBlYXJ1bSByZXJ1bSBoaWMgdGVu
ZXR1ciBhIHNhcGllbnRlIGRlbGVjdHVzLCB1dCBhdXQgcmVpY2llbmRpcyB2b2x1cHRhdGlidXMg
bWFpb3JlcyBhbGlhcyBjb25zZXF1YXR1ciBhdXQgcGVyZmVyZW5kaXMgZG9sb3JpYnVzIGFzcGVy
aW9yZXMgcmVwZWxsYXQiCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAiaWQiOiAi
bWFpbF8yMjAzIiwKKyAgICAgICAgICAiY29udGFjdF9pZCI6ICJjb250YWN0XzM3NyIsCisgICAg
ICAgICAgImZvbGRlcnMiOiBbImxhdGVyIl0sCisgICAgICAgICAgImltcG9ydGFudCI6ICJ0cnVl
IiwKKyAgICAgICAgICAidGltZSI6IDEzMzQ4NzQ1NzYxOTksCisgICAgICAgICAgInN1YmplY3Qi
OiAiTWkgbmV0dXMgY29udmFsbGlzIiwKKyAgICAgICAgICAibWVzc2FnZSI6ICJFZ2VzdGFzIG1v
cmJpIGF0LiBDdXJhYml0dXIgYWxpcXVldCBldCBjb21tb2RvIG5vbnVtbXksIGFsaXF1YW0gcXVp
cyBhcmN1LCBzZWQgcGVsbGVudGVzcXVlIHZpdGFlIG1vbGVzdGllIG1hdHRpcyBtYWduYSwgaW4g
ZWdldCwgcmlzdXMgbnVsbGEgdml2YW11cyB2dWxwdXRhdGUiCisgICAgICAgIH0sCisgICAgICAg
IHsKKyAgICAgICAgICAiaWQiOiAibWFpbF8yMjEyIiwKKyAgICAgICAgICAiY29udGFjdF9pZCI6
ICJjb250YWN0XzM5OCIsCisgICAgICAgICAgImZvbGRlcnMiOiBbInNlbnQiXSwKKyAgICAgICAg
ICAidGltZSI6IDEzMzQ4NzQ1Nzk4NjcsCisgICAgICAgICAgInN1YmplY3QiOiAiRnVzY2UgdHJp
c3RpcXVlIHByZXRpdW0gZXJvcyBhIGdyYXZpZGEiLAorICAgICAgICAgICJtZXNzYWdlIjogIlBy
b2luIG1hbGVzdWFkYSIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICJpZCI6ICJt
YWlsXzIwMjEiLAorICAgICAgICAgICJjb250YWN0X2lkIjogImNvbnRhY3RfMzQyIiwKKyAgICAg
ICAgICAiZm9sZGVycyI6IFsidHJhc2giXSwKKyAgICAgICAgICAidGltZSI6IDExMzQ4NzQ1Nzk4
MjQsCisgICAgICAgICAgInN1YmplY3QiOiAiUGhhc2VsbHVzIHZpdGFlIGludGVyZHVtIG51bGxh
LiIsCisgICAgICAgICAgIm1lc3NhZ2UiOiAiUGVsbGVudGVzcXVlIHF1YW0gZXJvcywgbW9sbGlz
IHF1aXMgdnVscHV0YXRlIGVnZXQsIHBlbGxlbnRlc3F1ZSBuZWMgaXBzdW0uIENyYXMgZGlnbmlz
c2ltIGZyaW5naWxsYSBsaWd1bGEsIGFjIHVsbGFtY29ycGVyIGR1aSBjb252YWxsaXMgYmxhbmRp
dC4gUGVsbGVudGVzcXVlIGhhYml0YW50IG1vcmJpIHRyaXN0aXF1ZSBzZW5lY3R1cyBldCBuZXR1
cyBldCBtYWxlc3VhZGEgZmFtZXMgYWMgdHVycGlzIGVnZXN0YXMuIEV0aWFtIGlkIG51bmMgYWMg
b3JjaSBoZW5kcmVyaXQgZmF1Y2lidXMgdmVsIGluIGFudGUuIE1hdXJpcyBuZWMgZXN0IHR1cnBp
cywgdXQgZnJpbmdpbGxhIG1pLiBTdXNwZW5kaXNzZSB2ZWwgdG9ydG9yIGF0IG51bGxhIGZhY2ls
aXNpcyB2ZW5lbmF0aXMgaW4gc2l0IGFtZXQgbGlndWxhLiIKKyAgICAgICAgfSwKKyAgICAgICAg
eworICAgICAgICAgICJpZCI6ICJtYWlsXzE5NzYiLAorICAgICAgICAgICJjb250YWN0X2lkIjog
ImNvbnRhY3RfMzc3IiwKKyAgICAgICAgICAiZm9sZGVycyI6IFsidHJhc2giXSwKKyAgICAgICAg
ICAidGltZSI6IDEwMzQ4NzQ1Nzk4MTMsCisgICAgICAgICAgInN1YmplY3QiOiAiRnVzY2UgdHJp
c3RpcXVlIHByZXRpdW0gOigiLAorICAgICAgICAgICJtZXNzYWdlIjogImFsaXF1YW0gcXVpcyBh
cmN1LiIKKyAgICAgICAgfQorICAgICAgXQorICAgIH07CisgICAgcmV0dXJuIGRhdGE7CisgIH0K
Kyk7CisKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhh
bXBsZS1hcHAvYXBwL3RlbXBsYXRlcy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3Rz
L0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2FwcC90ZW1wbGF0ZXMuanMJKHJl
dmlzaW9uIDApCisrKyBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4
YW1wbGUtYXBwL2FwcC90ZW1wbGF0ZXMuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MiBA
QAorJ3VzZSBzdHJpY3QnOworCitkZWZpbmUoCisgIGZ1bmN0aW9uKCkgeworICAgIHZhciBtYWls
SXRlbSA9CisgICAgICAne3sjbWFpbEl0ZW1zfX1cCisgICAgICAgIDx0ciBpZD0ie3tpZH19IiBj
bGFzcz0ibWFpbC1pdGVtIj5cCisgICAgICAgIHt7I2ltcG9ydGFudH19XAorICAgICAgICAgIDx0
ZCBjbGFzcz0ic3BhbjEiPjxzcGFuIGNsYXNzPSJsYWJlbCBsYWJlbC1pbXBvcnRhbnQiPkltcG9y
dGFudDwvc3Bhbj48L3RkPlwKKyAgICAgICAge3svaW1wb3J0YW50fX1cCisgICAgICAgIHt7Xmlt
cG9ydGFudH19XAorICAgICAgICAgIDx0ZCBjbGFzcz0ic3BhbjEiPjxzcGFuPiZuYnNwOzwvc3Bh
bj48L3RkPlwKKyAgICAgICAge3svaW1wb3J0YW50fX1cCisgICAgICAgICAgPHRkIGNsYXNzPSJz
cGFuMiBtYWlsQ29udGFjdCI+e3tuYW1lfX08L3RkPlwKKyAgICAgICAgICA8dGQgY2xhc3M9InNw
YW44Ij5cCisgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibWFpbFN1YmplY3QiPlwKKyAgICAgICAg
ICAgICAge3tmb3JtYXR0ZWRTdWJqZWN0fX1cCisgICAgICAgICAgICA8L3NwYW4+XAorICAgICAg
ICAgICAgPHNwYW4gY2xhc3M9Im1haWxNZXNzYWdlIj5cCisgICAgICAgICAgICAgIC0gPGEgaHJl
Zj0iIyI+e3tmb3JtYXR0ZWRNZXNzYWdlfX08L2E+XAorICAgICAgICAgICAgPC9zcGFuPlwKKyAg
ICAgICAgICA8L3RkPlwKKyAgICAgICAgPC90cj5cCisgICAgICB7ey9tYWlsSXRlbXN9fSc7CisK
KyAgICB2YXIgY29tcG9zZUJveCA9CisgICAgICAnPGRpdiBpZD0iY29tcG9zZV90byIgY2xhc3M9
Im1vZGFsLWhlYWRlciBjb21wb3NlLWhlYWRlciI+XAorICAgICAgICBUbzogPHNlbGVjdCBpZD0i
cmVjaXBpZW50X3NlbGVjdCI+XAorICAgICAgICAgIHt7XnJlcGx5fX08b3B0aW9uIGlkPSJyZWNp
cGllbnRfaGludCIgY2xhc3M9ImhpbnQiIHN0eWxlPSJjb2xvcjojQ0FDQUNBIiA+W1NlbGVjdCBS
ZWNpcGllbnRdPC9vcHRpb24+e3svcmVwbHl9fVwKKyAgICAgICAgICB7eyNjb250YWN0c319XAor
ICAgICAgICAgICA8b3B0aW9uIGlkPSJ7e2lkfX0ie3sjcmVjaXBpZW50fX0gc2VsZWN0ZWR7ey9y
ZWNpcGllbnR9fT57e2ZpcnN0TmFtZX19IHt7bGFzdE5hbWV9fTwvb3B0aW9uPlwKKyAgICAgICAg
ICB7ey9jb250YWN0c319XAorICAgICAgICA8L3NlbGVjdD5cCisgICAgICA8L2Rpdj5cCisgICAg
ICA8ZGl2IGNsYXNzPSJtb2RhbC1ib2R5IGNvbXBvc2UtYm9keSI+XAorICAgICAgICA8ZGl2IGlk
PSJjb21wb3NlX3N1YmplY3QiIGNsYXNzPSJ7eyNuZXdNYWlsfX1oaW50e3svbmV3TWFpbH19e3te
bmV3TWFpbH19Y29tcG9zZS1oZWFkZXJ7ey9uZXdNYWlsfX0iIGNvbnRlbnRFZGl0YWJsZT0idHJ1
ZSI+XAorICAgICAgICAgIHt7c3ViamVjdH19XAorICAgICAgICA8L2Rpdj5cCisgICAgICAgIDxk
aXYgaWQ9ImNvbXBvc2VfbWVzc2FnZSIgY2xhc3M9ImhpbnQiIGNvbnRlbnRFZGl0YWJsZT0idHJ1
ZSI+XAorICAgICAgICAgIHt7bWVzc2FnZX19XAorICAgICAgICA8L2Rpdj5cCisgICAgICA8L2Rp
dj5cCisgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1mb290ZXIiPlwKKyAgICAgICAgPGJ1dHRvbiBp
ZD0ic2VuZF9jb21wb3NlZCIge3tecmVwbHl9fWRpc2FibGVkPSJkaXNhYmxlZCJ7ey9yZXBseX19
IGNsYXNzPSJidG4gYnRuLXByaW1hcnkiPlNlbmQ8L2J1dHRvbj5cCisgICAgICAgIDxidXR0b24g
aWQ9ImNhbmNlbF9jb21wb3NlZCIgY2xhc3M9ImJ0biI+Q2FuY2VsPC9idXR0b24+XAorICAgICAg
PC9kaXY+JzsKKworICAgIHZhciBtb3ZlVG9TZWxlY3RvciA9CisgICAgICAnPHVsIGNsYXNzPSJu
YXYgbmF2LWxpc3QiPlwKKyAgICAgIHt7I21vdmVUb0l0ZW1zfX1cCisgICAgICAgIDxsaSBpZD0i
e3sufX0iIGNsYXNzPSJtb3ZlLXRvLWl0ZW0iPnt7Ln19PC9saT5cCisgICAgICB7ey9tb3ZlVG9J
dGVtc319XAorICAgICAgPC91bD4nOworCisgICAgcmV0dXJuIHsKKyAgICAgIG1haWxJdGVtOiBt
YWlsSXRlbSwKKyAgICAgIGNvbXBvc2VCb3g6IGNvbXBvc2VCb3gsCisgICAgICBtb3ZlVG9TZWxl
Y3RvcjogbW92ZVRvU2VsZWN0b3IKKyAgICB9CisgIH0KKworKTsKSW5kZXg6IFBlcmZvcm1hbmNl
VGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvYXBwL2Jvb3QvcGFnZS5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpz
LWV4YW1wbGUtYXBwL2FwcC9ib290L3BhZ2UuanMJKHJldmlzaW9uIDApCisrKyBQZXJmb3JtYW5j
ZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2FwcC9ib290L3BhZ2Uu
anMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NyBAQAorJ3VzZSBzdHJpY3QnOworCitkZWZp
bmUoCisKKyAgWworICAgICdhcHAvY29tcG9uZW50X2RhdGEvbWFpbF9pdGVtcycsCisgICAgJ2Fw
cC9jb21wb25lbnRfZGF0YS9jb21wb3NlX2JveCcsCisgICAgJ2FwcC9jb21wb25lbnRfZGF0YS9t
b3ZlX3RvJywKKyAgICAnYXBwL2NvbXBvbmVudF91aS9tYWlsX2l0ZW1zJywKKyAgICAnYXBwL2Nv
bXBvbmVudF91aS9tYWlsX2NvbnRyb2xzJywKKyAgICAnYXBwL2NvbXBvbmVudF91aS9jb21wb3Nl
X2JveCcsCisgICAgJ2FwcC9jb21wb25lbnRfdWkvZm9sZGVycycsCisgICAgJ2FwcC9jb21wb25l
bnRfdWkvbW92ZV90b19zZWxlY3RvcicKKyAgXSwKKworICBmdW5jdGlvbigKKyAgICBNYWlsSXRl
bXNEYXRhLAorICAgIENvbXBvc2VCb3hEYXRhLAorICAgIE1vdmVUb0RhdGEsCisgICAgTWFpbEl0
ZW1zVUksCisgICAgTWFpbENvbnRyb2xzVUksCisgICAgQ29tcG9zZUJveFVJLAorICAgIEZvbGRl
cnNVSSwKKyAgICBNb3ZlVG9TZWxlY3RvclVJKSB7CisKKyAgICBmdW5jdGlvbiBpbml0aWFsaXpl
KCkgeworICAgICAgTWFpbEl0ZW1zRGF0YS5hdHRhY2hUbyhkb2N1bWVudCk7CisgICAgICBDb21w
b3NlQm94RGF0YS5hdHRhY2hUbyhkb2N1bWVudCwgeworICAgICAgICBzZWxlY3RlZEZvbGRlcnM6
IFsnaW5ib3gnXQorICAgICAgfSk7CisgICAgICBNb3ZlVG9EYXRhLmF0dGFjaFRvKGRvY3VtZW50
KTsKKyAgICAgIE1haWxJdGVtc1VJLmF0dGFjaFRvKCcjbWFpbF9pdGVtcycsIHsKKyAgICAgICAg
aXRlbUNvbnRhaW5lclNlbGVjdG9yOiAnI21haWxfaXRlbXNfVEInLAorICAgICAgICBzZWxlY3Rl
ZEZvbGRlcnM6IFsnaW5ib3gnXQorICAgICAgfSk7CisgICAgICBNYWlsQ29udHJvbHNVSS5hdHRh
Y2hUbygnI21haWxfY29udHJvbHMnKTsKKyAgICAgIENvbXBvc2VCb3hVSS5hdHRhY2hUbygnI2Nv
bXBvc2VfYm94Jyk7CisgICAgICBGb2xkZXJzVUkuYXR0YWNoVG8oJyNmb2xkZXJzJyk7CisgICAg
ICBNb3ZlVG9TZWxlY3RvclVJLmF0dGFjaFRvKCcjbW92ZV90b19zZWxlY3RvcicsIHsKKyAgICAg
ICAgbW92ZUFjdGlvblNlbGVjdG9yOiAnI21vdmVfbWFpbCcsCisgICAgICAgIHNlbGVjdGVkRm9s
ZGVyczogWydpbmJveCddCisgICAgICB9KTsKKyAgICB9CisKKyAgICByZXR1cm4gaW5pdGlhbGl6
ZTsKKyAgfQorKTsKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0
anMtZXhhbXBsZS1hcHAvYXBwL2NvbXBvbmVudF9kYXRhL2NvbXBvc2VfYm94LmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1h
cHAvYXBwL2NvbXBvbmVudF9kYXRhL2NvbXBvc2VfYm94LmpzCShyZXZpc2lvbiAwKQorKysgUGVy
Zm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9hcHAvY29t
cG9uZW50X2RhdGEvY29tcG9zZV9ib3guanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5MyBA
QAorJ3VzZSBzdHJpY3QnOworCitkZWZpbmUoCisKKyAgWworICAgICdmbGlnaHQvbGliL2NvbXBv
bmVudCcsCisgICAgJ2NvbXBvbmVudHMvbXVzdGFjaGUvbXVzdGFjaGUnLAorICAgICdhcHAvZGF0
YScsCisgICAgJ2FwcC90ZW1wbGF0ZXMnCisgIF0sCisKKyAgZnVuY3Rpb24oZGVmaW5lQ29tcG9u
ZW50LCBNdXN0YWNoZSwgZGF0YVN0b3JlLCB0ZW1wbGF0ZXMpIHsKKyAgICByZXR1cm4gZGVmaW5l
Q29tcG9uZW50KGNvbXBvc2VCb3gpOworCisgICAgZnVuY3Rpb24gY29tcG9zZUJveCgpIHsKKwor
ICAgICAgdGhpcy5kZWZhdWx0QXR0cnMoeworICAgICAgICBkYXRhU3RvcmU6IGRhdGFTdG9yZSwK
KyAgICAgICAgcmVjaXBpZW50SGludElkOiAncmVjaXBpZW50X2hpbnQnLAorICAgICAgICBzdWJq
ZWN0SGludDogJ1N1YmplY3QnLAorICAgICAgICBtZXNzYWdlSGludDogJ01lc3NhZ2UnLAorICAg
ICAgICB0b0hpbnQ6ICdUbycsCisgICAgICAgIGZvcndhcmRQcmVmaXg6ICdGdycsCisgICAgICAg
IHJlcGx5UHJlZml4OiAnUmUnCisgICAgICB9KTsKKworICAgICAgdGhpcy5zZXJ2ZUNvbXBvc2VC
b3ggPSBmdW5jdGlvbihldiwgZGF0YSkgeworICAgICAgICB0aGlzLnRyaWdnZXIoImRhdGFDb21w
b3NlQm94U2VydmVkIiwgeworICAgICAgICAgIG1hcmt1cDogdGhpcy5yZW5kZXJDb21wb3NlQm94
KGRhdGEudHlwZSwgZGF0YS5yZWxhdGVkTWFpbElkKSwKKyAgICAgICAgICB0eXBlOiBkYXRhLnR5
cGV9KTsKKyAgICAgIH07CisKKyAgICAgIHRoaXMuZ2V0U3ViamVjdCA9IGZ1bmN0aW9uKHR5cGUs
IHJlbGF0ZWRNYWlsSWQpIHsKKyAgICAgICAgdmFyIHJlbGF0ZWRNYWlsID0gdGhpcy5hdHRyLmRh
dGFTdG9yZS5tYWlsLmZpbHRlcihmdW5jdGlvbihlYWNoKSB7CisgICAgICAgICAgcmV0dXJuIGVh
Y2guaWQgPT0gIHJlbGF0ZWRNYWlsSWQ7CisgICAgICAgIH0pWzBdOworCisgICAgICAgIHZhciBz
dWJqZWN0ID0gcmVsYXRlZE1haWwgJiYgcmVsYXRlZE1haWwuc3ViamVjdDsKKworICAgICAgICB2
YXIgc3ViamVjdExvb2t1cCA9IHsKKyAgICAgICAgICBuZXdNYWlsOiB0aGlzLmF0dHIuc3ViamVj
dEhpbnQsCisgICAgICAgICAgZm9yd2FyZDogdGhpcy5hdHRyLmZvcndhcmRQcmVmaXggKyAiOiAi
ICsgc3ViamVjdCwKKyAgICAgICAgICByZXBseTogdGhpcy5hdHRyLnJlcGx5UHJlZml4ICsgIjog
IiArIHN1YmplY3QKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBzdWJqZWN0TG9va3VwW3R5
cGVdOworICAgICAgfTsKKworICAgICAgdGhpcy5yZW5kZXJDb21wb3NlQm94ID0gZnVuY3Rpb24o
dHlwZSwgcmVsYXRlZE1haWxJZCkgeworICAgICAgICB2YXIgcmVjaXBpZW50SWQgPSB0aGlzLmdl
dFJlY2lwaWVudElkKHR5cGUsIHJlbGF0ZWRNYWlsSWQpOworICAgICAgICB2YXIgY29udGFjdHMg
PSB0aGlzLmF0dHIuZGF0YVN0b3JlLmNvbnRhY3RzLm1hcChmdW5jdGlvbihjb250YWN0KSB7Cisg
ICAgICAgICAgY29udGFjdC5yZWNpcGllbnQgPSAoY29udGFjdC5pZCA9PSByZWNpcGllbnRJZCk7
CisgICAgICAgICAgcmV0dXJuIGNvbnRhY3Q7CisgICAgICAgIH0pOworCisgICAgICAgIHJldHVy
biBNdXN0YWNoZS5yZW5kZXIodGVtcGxhdGVzLmNvbXBvc2VCb3gsIHsKKyAgICAgICAgICBuZXdN
YWlsOiB0eXBlID09ICduZXdNYWlsJywKKyAgICAgICAgICByZXBseTogdHlwZSA9PSAncmVwbHkn
LAorICAgICAgICAgIHN1YmplY3Q6IHRoaXMuZ2V0U3ViamVjdCh0eXBlLCByZWxhdGVkTWFpbElk
KSwKKyAgICAgICAgICBtZXNzYWdlOiB0aGlzLmF0dHIubWVzc2FnZUhpbnQsCisgICAgICAgICAg
Y29udGFjdHM6IGNvbnRhY3RzCisgICAgICAgIH0pOworICAgICAgfTsKKworICAgICAgdGhpcy5n
ZXRSZWNpcGllbnRJZCA9IGZ1bmN0aW9uKHR5cGUsIHJlbGF0ZWRNYWlsSWQpIHsKKyAgICAgICAg
dmFyIHJlbGF0ZWRNYWlsID0gKHR5cGUgPT0gJ3JlcGx5JykgJiYgdGhpcy5hdHRyLmRhdGFTdG9y
ZS5tYWlsLmZpbHRlcihmdW5jdGlvbihlYWNoKSB7CisgICAgICAgICAgcmV0dXJuIGVhY2guaWQg
PT0gIHJlbGF0ZWRNYWlsSWQ7CisgICAgICAgIH0pWzBdOworCisgICAgICAgIHJldHVybiByZWxh
dGVkTWFpbCAmJiByZWxhdGVkTWFpbC5jb250YWN0X2lkIHx8IHRoaXMuYXR0ci5yZWNpcGllbnRI
aW50SWQ7CisgICAgICB9OworCisKKyAgICAgIHRoaXMuc2VuZCA9IGZ1bmN0aW9uKGV2LCBkYXRh
KSB7CisgICAgICAgIHRoaXMuYXR0ci5kYXRhU3RvcmUubWFpbC5wdXNoKHsKKyAgICAgICAgICBp
ZDogU3RyaW5nKERhdGUubm93KCkpLAorICAgICAgICAgIGNvbnRhY3RfaWQ6IGRhdGEudG9faWQs
CisgICAgICAgICAgZm9sZGVyczogWyJzZW50Il0sCisgICAgICAgICAgdGltZTogRGF0ZS5ub3co
KSwKKyAgICAgICAgICBzdWJqZWN0OiBkYXRhLnN1YmplY3QsCisgICAgICAgICAgbWVzc2FnZTog
ZGF0YS5tZXNzYWdlCisgICAgICAgIH0pOworICAgICAgICB0aGlzLnRyaWdnZXIoJ2RhdGFNYWls
SXRlbXNSZWZyZXNoUmVxdWVzdGVkJywge2ZvbGRlcjogZGF0YS5jdXJyZW50Rm9sZGVyfSk7Cisg
ICAgICB9OworCisgICAgICB0aGlzLmFmdGVyKCJpbml0aWFsaXplIiwgZnVuY3Rpb24oKSB7Cisg
ICAgICAgIHRoaXMub24oInVpQ29tcG9zZUJveFJlcXVlc3RlZCIsIHRoaXMuc2VydmVDb21wb3Nl
Qm94KTsKKyAgICAgICAgdGhpcy5vbigidWlTZW5kUmVxdWVzdGVkIiwgdGhpcy5zZW5kKTsKKyAg
ICAgIH0pOworICAgIH0KKworICB9CispOwpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2
ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9hcHAvY29tcG9uZW50X2RhdGEvbWFpbF9pdGVt
cy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdo
dGpzLWV4YW1wbGUtYXBwL2FwcC9jb21wb25lbnRfZGF0YS9tYWlsX2l0ZW1zLmpzCShyZXZpc2lv
biAwKQorKysgUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxl
LWFwcC9hcHAvY29tcG9uZW50X2RhdGEvbWFpbF9pdGVtcy5qcwkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDY4IEBACisndXNlIHN0cmljdCc7CisKK2RlZmluZSgKKworICBbCisgICAgJ2ZsaWdo
dC9saWIvY29tcG9uZW50JywKKyAgICAnY29tcG9uZW50cy9tdXN0YWNoZS9tdXN0YWNoZScsCisg
ICAgJ2FwcC9kYXRhJywKKyAgICAnYXBwL3RlbXBsYXRlcycKKyAgXSwKKworICBmdW5jdGlvbihk
ZWZpbmVDb21wb25lbnQsIE11c3RhY2hlLCBkYXRhU3RvcmUsIHRlbXBsYXRlcykgeworICAgIHJl
dHVybiBkZWZpbmVDb21wb25lbnQobWFpbEl0ZW1zKTsKKworICAgIGZ1bmN0aW9uIG1haWxJdGVt
cygpIHsKKworICAgICAgdGhpcy5kZWZhdWx0QXR0cnMoeworICAgICAgICBmb2xkZXI6ICdpbmJv
eCcsCisgICAgICAgIGRhdGFTdG9yZTogZGF0YVN0b3JlCisgICAgICB9KTsKKworICAgICAgdGhp
cy5zZXJ2ZU1haWxJdGVtcyA9IGZ1bmN0aW9uKGV2LCBkYXRhKSB7CisgICAgICAgIHZhciBmb2xk
ZXIgPSAoZGF0YSAmJiBkYXRhLmZvbGRlcikgfHwgdGhpcy5hdHRyLmZvbGRlcjsKKyAgICAgICAg
dGhpcy50cmlnZ2VyKCJkYXRhTWFpbEl0ZW1zU2VydmVkIiwge21hcmt1cDogdGhpcy5yZW5kZXJJ
dGVtcyh0aGlzLmFzc2VtYmxlSXRlbXMoZm9sZGVyKSl9KQorICAgICAgfTsKKworICAgICAgdGhp
cy5yZW5kZXJJdGVtcyA9IGZ1bmN0aW9uKGl0ZW1zKSB7CisgICAgICAgIHJldHVybiBNdXN0YWNo
ZS5yZW5kZXIodGVtcGxhdGVzLm1haWxJdGVtLCB7bWFpbEl0ZW1zOiBpdGVtc30pOworICAgICAg
fTsKKworICAgICAgdGhpcy5hc3NlbWJsZUl0ZW1zID0gZnVuY3Rpb24oZm9sZGVyKSB7CisgICAg
ICAgIHZhciBpdGVtcyA9IFtdOworCisgICAgICAgIHRoaXMuYXR0ci5kYXRhU3RvcmUubWFpbC5m
b3JFYWNoKGZ1bmN0aW9uKGVhY2gpIHsKKyAgICAgICAgICBpZiAoZWFjaC5mb2xkZXJzICYmIGVh
Y2guZm9sZGVycy5pbmRleE9mKGZvbGRlcikgPiAtMSkgeworICAgICAgICAgICAgaXRlbXMucHVz
aCh0aGlzLmdldEl0ZW1Gb3JWaWV3KGVhY2gpKTsKKyAgICAgICAgICB9CisgICAgICAgIH0sIHRo
aXMpOworCisgICAgICAgIHJldHVybiBpdGVtczsKKyAgICAgIH07CisKKyAgICAgIHRoaXMuZ2V0
SXRlbUZvclZpZXcgPSBmdW5jdGlvbihpdGVtRGF0YSkgeworICAgICAgICB2YXIgdGhpc0l0ZW0s
IHRoaXNDb250YWN0LCBtc2cKKworICAgICAgICB0aGlzSXRlbSA9IHtpZDogaXRlbURhdGEuaWQs
IGltcG9ydGFudDogaXRlbURhdGEuaW1wb3J0YW50fTsKKworICAgICAgICB0aGlzQ29udGFjdCA9
IHRoaXMuYXR0ci5kYXRhU3RvcmUuY29udGFjdHMuZmlsdGVyKGZ1bmN0aW9uKGNvbnRhY3QpIHsK
KyAgICAgICAgICByZXR1cm4gY29udGFjdC5pZCA9PSBpdGVtRGF0YS5jb250YWN0X2lkCisgICAg
ICAgIH0pWzBdOworICAgICAgICB0aGlzSXRlbS5uYW1lID0gW3RoaXNDb250YWN0LmZpcnN0TmFt
ZSwgdGhpc0NvbnRhY3QubGFzdE5hbWVdLmpvaW4oJyAnKTsKKworICAgICAgICB2YXIgc3ViaiA9
IGl0ZW1EYXRhLnN1YmplY3Q7CisgICAgICAgIHRoaXNJdGVtLmZvcm1hdHRlZFN1YmplY3QgPSBz
dWJqLmxlbmd0aCA+IDcwID8gc3Viai5zbGljZSgwLCA3MCkgKyAiLi4uIiA6IHN1Ymo7CisKKyAg
ICAgICAgdmFyIG1zZyA9IGl0ZW1EYXRhLm1lc3NhZ2U7CisgICAgICAgIHRoaXNJdGVtLmZvcm1h
dHRlZE1lc3NhZ2UgPSBtc2cubGVuZ3RoID4gNzAgPyBtc2cuc2xpY2UoMCwgNzApICsgIi4uLiIg
OiBtc2c7CisKKyAgICAgICAgcmV0dXJuIHRoaXNJdGVtOworICAgICAgfTsKKworICAgICAgdGhp
cy5hZnRlcigiaW5pdGlhbGl6ZSIsIGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLm9uKCJ1aU1h
aWxJdGVtc1JlcXVlc3RlZCIsIHRoaXMuc2VydmVNYWlsSXRlbXMpOworICAgICAgICB0aGlzLm9u
KCJkYXRhTWFpbEl0ZW1zUmVmcmVzaFJlcXVlc3RlZCIsIHRoaXMuc2VydmVNYWlsSXRlbXMpOwor
ICAgICAgfSk7CisgICAgfQorICB9CispOwpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2
ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9hcHAvY29tcG9uZW50X2RhdGEvbW92ZV90by5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpz
LWV4YW1wbGUtYXBwL2FwcC9jb21wb25lbnRfZGF0YS9tb3ZlX3RvLmpzCShyZXZpc2lvbiAwKQor
KysgUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9h
cHAvY29tcG9uZW50X2RhdGEvbW92ZV90by5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUy
IEBACisndXNlIHN0cmljdCc7CisKK2RlZmluZSgKKworICBbCisgICAgJ2ZsaWdodC9saWIvY29t
cG9uZW50JywKKyAgICAnY29tcG9uZW50cy9tdXN0YWNoZS9tdXN0YWNoZScsCisgICAgJ2FwcC9k
YXRhJywKKyAgICAnYXBwL3RlbXBsYXRlcycKKyAgXSwKKworICBmdW5jdGlvbihkZWZpbmVDb21w
b25lbnQsIE11c3RhY2hlLCBkYXRhU3RvcmUsIHRlbXBsYXRlcykgeworICAgIHJldHVybiBkZWZp
bmVDb21wb25lbnQobW92ZVRvKTsKKworICAgIGZ1bmN0aW9uIG1vdmVUbygpIHsKKworICAgICAg
dGhpcy5kZWZhdWx0QXR0cnMoeworICAgICAgICBkYXRhU3RvcmU6IGRhdGFTdG9yZQorICAgICAg
fSk7CisKKyAgICAgIHRoaXMuc2VydmVBdmFpbGFibGVGb2xkZXJzID0gZnVuY3Rpb24oZXYsIGRh
dGEpIHsKKyAgICAgICAgdGhpcy50cmlnZ2VyKCJkYXRhTW92ZVRvSXRlbXNTZXJ2ZWQiLCB7Cisg
ICAgICAgICAgbWFya3VwOiB0aGlzLnJlbmRlckZvbGRlclNlbGVjdG9yKHRoaXMuZ2V0T3RoZXJG
b2xkZXJzKGRhdGEuZm9sZGVyKSkKKyAgICAgICAgfSkKKyAgICAgIH07CisKKyAgICAgIHRoaXMu
cmVuZGVyRm9sZGVyU2VsZWN0b3IgPSBmdW5jdGlvbihpdGVtcykgeworICAgICAgICByZXR1cm4g
TXVzdGFjaGUucmVuZGVyKHRlbXBsYXRlcy5tb3ZlVG9TZWxlY3Rvciwge21vdmVUb0l0ZW1zOiBp
dGVtc30pOworICAgICAgfTsKKworICAgICAgdGhpcy5tb3ZlSXRlbXMgPSBmdW5jdGlvbihldiwg
ZGF0YSkgeworICAgICAgICB2YXIgaXRlbXNUb01vdmVJZHMgPSBkYXRhLml0ZW1JZHMKKyAgICAg
ICAgdGhpcy5hdHRyLmRhdGFTdG9yZS5tYWlsLmZvckVhY2goZnVuY3Rpb24oaXRlbSkgeworICAg
ICAgICAgIGlmIChpdGVtc1RvTW92ZUlkcy5pbmRleE9mKGl0ZW0uaWQpID4gLTEpIHsKKyAgICAg
ICAgICAgIGl0ZW0uZm9sZGVycyA9IFtkYXRhLnRvRm9sZGVyXTsKKyAgICAgICAgICB9CisgICAg
ICAgIH0pOworICAgICAgICB0aGlzLnRyaWdnZXIoJ2RhdGFNYWlsSXRlbXNSZWZyZXNoUmVxdWVz
dGVkJywge2ZvbGRlcjogZGF0YS5mcm9tRm9sZGVyfSk7CisgICAgICB9OworCisgICAgICB0aGlz
LmdldE90aGVyRm9sZGVycyA9IGZ1bmN0aW9uKGZvbGRlcikgeworICAgICAgICByZXR1cm4gdGhp
cy5hdHRyLmRhdGFTdG9yZS5mb2xkZXJzLmZpbHRlcihmdW5jdGlvbihlKSB7cmV0dXJuIGUgIT0g
Zm9sZGVyfSk7CisgICAgICB9OworCisgICAgICB0aGlzLmFmdGVyKCJpbml0aWFsaXplIiwgZnVu
Y3Rpb24oKSB7CisgICAgICAgIHRoaXMub24oInVpQXZhaWxhYmxlRm9sZGVyc1JlcXVlc3RlZCIs
IHRoaXMuc2VydmVBdmFpbGFibGVGb2xkZXJzKTsKKyAgICAgICAgdGhpcy5vbigidWlNb3ZlSXRl
bXNSZXF1ZXN0ZWQiLCB0aGlzLm1vdmVJdGVtcyk7CisgICAgICB9KTsKKyAgICB9CisKKyAgfQor
KTsKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBs
ZS1hcHAvYXBwL2NvbXBvbmVudF91aS9jb21wb3NlX2JveC5qcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJm
b3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2FwcC9jb21w
b25lbnRfdWkvY29tcG9zZV9ib3guanMJKHJldmlzaW9uIDApCisrKyBQZXJmb3JtYW5jZVRlc3Rz
L0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2FwcC9jb21wb25lbnRfdWkvY29t
cG9zZV9ib3guanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTMgQEAKKyd1c2Ugc3RyaWN0
JzsKKworZGVmaW5lKAorCisgIFsKKyAgICAnZmxpZ2h0L2xpYi9jb21wb25lbnQnCisgIF0sCisK
KyAgZnVuY3Rpb24oZGVmaW5lQ29tcG9uZW50KSB7CisKKyAgICByZXR1cm4gZGVmaW5lQ29tcG9u
ZW50KGNvbXBvc2VCb3gpOworCisgICAgZnVuY3Rpb24gY29tcG9zZUJveCgpIHsKKworICAgICAg
dGhpcy5kZWZhdWx0QXR0cnMoeworICAgICAgICBuZXdNYWlsVHlwZTogJ25ld01haWwnLAorICAg
ICAgICBmb3J3YXJkTWFpbFR5cGU6ICdmb3J3YXJkJywKKyAgICAgICAgcmVwbHlNYWlsVHlwZTog
J3JlcGx5JywKKyAgICAgICAgaGludENsYXNzOiAnaGludCcsCisgICAgICAgIHNlbGVjdGVkRm9s
ZGVyczogW10sCisgICAgICAgIHNlbGVjdGVkTWFpbEl0ZW1zOiBbXSwKKworICAgICAgICAvL3Nl
bGVjdG9ycworICAgICAgICBjb21wb3NlQ29udHJvbDogJy5jb21wb3NlJywKKyAgICAgICAgbmV3
Q29udHJvbFNlbGVjdG9yOiAnI25ld19tYWlsJywKKyAgICAgICAgY2FuY2VsU2VsZWN0b3I6ICcj
Y2FuY2VsX2NvbXBvc2VkJywKKyAgICAgICAgc2VuZFNlbGVjdG9yOiAnI3NlbmRfY29tcG9zZWQn
LAorICAgICAgICB0b1NlbGVjdG9yOiAnI2NvbXBvc2VfdG8nLAorICAgICAgICBzdWJqZWN0U2Vs
ZWN0b3I6ICcjY29tcG9zZV9zdWJqZWN0JywKKyAgICAgICAgbWVzc2FnZVNlbGVjdG9yOiAnI2Nv
bXBvc2VfbWVzc2FnZScsCisgICAgICAgIHJlY2lwaWVudFNlbGVjdG9yOiAnI3JlY2lwaWVudF9z
ZWxlY3QnLAorICAgICAgICByZWNpcGllbnRIaW50U2VsZWN0b3I6ICcjcmVjaXBpZW50X2hpbnQn
LAorICAgICAgICBzZWxlY3RlZFJlY2lwaWVudFNlbGVjdG9yOiAnI3JlY2lwaWVudF9zZWxlY3Qg
OnNlbGVjdGVkJywKKyAgICAgICAgaGludFNlbGVjdG9yOiAnZGl2LmhpbnQnCisgICAgICB9KTsK
KworICAgICAgdGhpcy5uZXdNYWlsID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMucmVxdWVz
dENvbXBvc2VCb3godGhpcy5hdHRyLm5ld01haWxUeXBlKTsKKyAgICAgIH07CisKKyAgICAgIHRo
aXMuZm9yd2FyZCA9IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLnJlcXVlc3RDb21wb3NlQm94
KHRoaXMuYXR0ci5mb3J3YXJkTWFpbFR5cGUsIHRoaXMuYXR0ci5zZWxlY3RlZE1haWxJdGVtcyk7
CisgICAgICB9OworCisgICAgICB0aGlzLnJlcGx5ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHRo
aXMucmVxdWVzdENvbXBvc2VCb3godGhpcy5hdHRyLnJlcGx5TWFpbFR5cGUsIHRoaXMuYXR0ci5z
ZWxlY3RlZE1haWxJdGVtcyk7CisgICAgICB9OworCisgICAgICB0aGlzLnJlcXVlc3RDb21wb3Nl
Qm94ID0gZnVuY3Rpb24odHlwZSwgcmVsYXRlZE1haWxJZCkgeworICAgICAgICB0aGlzLnRyaWdn
ZXIoJ3VpQ29tcG9zZUJveFJlcXVlc3RlZCcsIHt0eXBlOiB0eXBlLCByZWxhdGVkTWFpbElkOiBy
ZWxhdGVkTWFpbElkfSk7CisgICAgICB9OworCisgICAgICB0aGlzLmxhdW5jaENvbXBvc2VCb3gg
PSBmdW5jdGlvbihldiwgZGF0YSkgeworICAgICAgICB2YXIgZm9jdXNTZWxlY3RvciA9IChkYXRh
LnR5cGUgPT0gdGhpcy5hdHRyLnJlcGx5TWFpbFR5cGUpID8gJ21lc3NhZ2VTZWxlY3RvcicgOiAn
dG9TZWxlY3Rvcic7CisgICAgICAgIHRoaXMuJG5vZGUuaHRtbChkYXRhLm1hcmt1cCkuc2hvdygp
OworICAgICAgICB0aGlzLnNlbGVjdChmb2N1c1NlbGVjdG9yKS5mb2N1cygpOworICAgICAgfTsK
KworICAgICAgdGhpcy5jYW5jZWwgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy4kbm9kZS5o
dG1sKCcnKS5oaWRlKCk7CisgICAgICB9OworCisgICAgICB0aGlzLnJlcXVlc3RTZW5kID0gZnVu
Y3Rpb24oKSB7CisgICAgICAgIHZhciBkYXRhID0geworICAgICAgICAgIHRvX2lkOiB0aGlzLnNl
bGVjdCgnc2VsZWN0ZWRSZWNpcGllbnRTZWxlY3RvcicpLmF0dHIoJ2lkJyksCisgICAgICAgICAg
c3ViamVjdDogdGhpcy5zZWxlY3QoJ3N1YmplY3RTZWxlY3RvcicpLnRleHQoKSwKKyAgICAgICAg
ICBtZXNzYWdlOiB0aGlzLnNlbGVjdCgnbWVzc2FnZVNlbGVjdG9yJykudGV4dCgpLAorICAgICAg
ICAgIGN1cnJlbnRGb2xkZXI6IHRoaXMuYXR0ci5zZWxlY3RlZEZvbGRlcnNbMF0KKyAgICAgICAg
fTsKKyAgICAgICAgdGhpcy50cmlnZ2VyKCd1aVNlbmRSZXF1ZXN0ZWQnLCBkYXRhKTsKKyAgICAg
ICAgdGhpcy4kbm9kZS5oaWRlKCk7CisgICAgICB9OworCisgICAgICB0aGlzLmVuYWJsZVNlbmQg
PSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy5zZWxlY3QoJ3JlY2lwaWVudEhpbnRTZWxlY3Rv
cicpLmF0dHIoJ2Rpc2FibGVkJywgJ2Rpc2FibGVkJyk7CisgICAgICAgIHRoaXMuc2VsZWN0KCdz
ZW5kU2VsZWN0b3InKS5yZW1vdmVBdHRyKCdkaXNhYmxlZCcpOworICAgICAgfTsKKworICAgICAg
dGhpcy5yZW1vdmVIaW50ID0gZnVuY3Rpb24oZXYsIGRhdGEpIHsKKyAgICAgICAgJChldi50YXJn
ZXQpLmh0bWwoJycpLnJlbW92ZUNsYXNzKHRoaXMuYXR0ci5oaW50Q2xhc3MpOworICAgICAgfTsK
KworICAgICAgdGhpcy51cGRhdGVNYWlsSXRlbVNlbGVjdGlvbnMgPSBmdW5jdGlvbihldiwgZGF0
YSkgeworICAgICAgICB0aGlzLmF0dHIuc2VsZWN0ZWRNYWlsSXRlbXMgPSBkYXRhLnNlbGVjdGVk
SWRzOworICAgICAgfQorCisgICAgICB0aGlzLnVwZGF0ZUZvbGRlclNlbGVjdGlvbnMgPSBmdW5j
dGlvbihldiwgZGF0YSkgeworICAgICAgICB0aGlzLmF0dHIuc2VsZWN0ZWRGb2xkZXJzID0gZGF0
YS5zZWxlY3RlZElkczsKKyAgICAgIH0KKworICAgICAgdGhpcy5hZnRlcignaW5pdGlhbGl6ZScs
IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLm9uKGRvY3VtZW50LCAnZGF0YUNvbXBvc2VCb3hT
ZXJ2ZWQnLCB0aGlzLmxhdW5jaENvbXBvc2VCb3gpOworICAgICAgICB0aGlzLm9uKGRvY3VtZW50
LCAndWlGb3J3YXJkTWFpbCcsIHRoaXMuZm9yd2FyZCk7CisgICAgICAgIHRoaXMub24oZG9jdW1l
bnQsICd1aVJlcGx5VG9NYWlsJywgdGhpcy5yZXBseSk7CisgICAgICAgIHRoaXMub24oZG9jdW1l
bnQsICd1aU1haWxJdGVtU2VsZWN0aW9uQ2hhbmdlZCcsIHRoaXMudXBkYXRlTWFpbEl0ZW1TZWxl
Y3Rpb25zKTsKKyAgICAgICAgdGhpcy5vbihkb2N1bWVudCwgJ3VpRm9sZGVyU2VsZWN0aW9uQ2hh
bmdlZCcsIHRoaXMudXBkYXRlRm9sZGVyU2VsZWN0aW9ucyk7CisKKyAgICAgICAgLy90aGUgZm9s
bG93aW5nIGJpbmRpbmdzIHVzZSBkZWxlZ2F0aW9uIHNvIHRoYXQgdGhlIGV2ZW50IHRhcmdldCBp
cyByZWFkIGF0IGV2ZW50IHRpbWUKKyAgICAgICAgdGhpcy5vbihkb2N1bWVudCwgImNsaWNrIiwg
eworICAgICAgICAgICdjYW5jZWxTZWxlY3Rvcic6IHRoaXMuY2FuY2VsLAorICAgICAgICAgICdz
ZW5kU2VsZWN0b3InOiB0aGlzLnJlcXVlc3RTZW5kLAorICAgICAgICAgICduZXdDb250cm9sU2Vs
ZWN0b3InOiB0aGlzLm5ld01haWwKKyAgICAgICAgfSk7CisgICAgICAgIHRoaXMub24oJ2NoYW5n
ZScsIHsKKyAgICAgICAgICAncmVjaXBpZW50U2VsZWN0b3InOiB0aGlzLmVuYWJsZVNlbmQKKyAg
ICAgICAgfSk7CisgICAgICAgIHRoaXMub24oJ2tleWRvd24nLCB7CisgICAgICAgICAgJ2hpbnRT
ZWxlY3Rvcic6IHRoaXMucmVtb3ZlSGludAorICAgICAgICB9KTsKKyAgICAgIH0pOworICAgIH0K
KyAgfQorKTsKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMt
ZXhhbXBsZS1hcHAvYXBwL2NvbXBvbmVudF91aS9mb2xkZXJzLmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBl
cmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvYXBwL2Nv
bXBvbmVudF91aS9mb2xkZXJzLmpzCShyZXZpc2lvbiAwKQorKysgUGVyZm9ybWFuY2VUZXN0cy9E
b1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9hcHAvY29tcG9uZW50X3VpL2ZvbGRl
cnMuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNCBAQAorJ3VzZSBzdHJpY3QnOworCitk
ZWZpbmUoCisKKyAgWworICAgICdmbGlnaHQvbGliL2NvbXBvbmVudCcsCisgICAgJy4vd2l0aF9z
ZWxlY3QnCisgIF0sCisKKyAgZnVuY3Rpb24oZGVmaW5lQ29tcG9uZW50LCB3aXRoU2VsZWN0KSB7
CisKKyAgICByZXR1cm4gZGVmaW5lQ29tcG9uZW50KGZvbGRlcnMsIHdpdGhTZWxlY3QpOworCisg
ICAgZnVuY3Rpb24gZm9sZGVycygpIHsKKworICAgICAgdGhpcy5kZWZhdWx0QXR0cnMoeworICAg
ICAgICBzZWxlY3RlZENsYXNzOiAnc2VsZWN0ZWQnLAorICAgICAgICBzZWxlY3Rpb25DaGFuZ2Vk
RXZlbnQ6ICd1aUZvbGRlclNlbGVjdGlvbkNoYW5nZWQnLAorCisgICAgICAgIC8vc2VsZWN0b3Jz
CisgICAgICAgIGl0ZW1TZWxlY3RvcjogJ2xpLmZvbGRlci1pdGVtJywKKyAgICAgICAgc2VsZWN0
ZWRJdGVtU2VsZWN0b3I6ICdsaS5mb2xkZXItaXRlbS5zZWxlY3RlZCcKKyAgICAgIH0pOworCisg
ICAgICB0aGlzLmZldGNoTWFpbEl0ZW1zID0gZnVuY3Rpb24oZXYsIGRhdGEpIHsKKyAgICAgICAg
ICB0aGlzLnRyaWdnZXIoJ3VpTWFpbEl0ZW1zUmVxdWVzdGVkJywge2ZvbGRlcjogZGF0YS5zZWxl
Y3RlZElkc1swXX0pOworICAgICAgfQorCisgICAgICB0aGlzLmFmdGVyKCdpbml0aWFsaXplJywg
ZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMub24oJ3VpRm9sZGVyU2VsZWN0aW9uQ2hhbmdlZCcs
IHRoaXMuZmV0Y2hNYWlsSXRlbXMpOworICAgICAgfSk7CisgICAgfQorICB9CispOwpJbmRleDog
UGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9hcHAv
Y29tcG9uZW50X3VpL21haWxfY29udHJvbHMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VU
ZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9hcHAvY29tcG9uZW50X3Vp
L21haWxfY29udHJvbHMuanMJKHJldmlzaW9uIDApCisrKyBQZXJmb3JtYW5jZVRlc3RzL0RvWW91
RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2FwcC9jb21wb25lbnRfdWkvbWFpbF9jb250
cm9scy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY3IEBACisndXNlIHN0cmljdCc7CisK
K2RlZmluZSgKKyAgWworICAgICdmbGlnaHQvbGliL2NvbXBvbmVudCcKKyAgXSwKKworICBmdW5j
dGlvbihkZWZpbmVDb21wb25lbnQpIHsKKworICAgIHJldHVybiBkZWZpbmVDb21wb25lbnQobWFp
bENvbnRyb2xzKTsKKworICAgIGZ1bmN0aW9uIG1haWxDb250cm9scygpIHsKKyAgICAgIHRoaXMu
ZGVmYXVsdEF0dHJzKHsKKyAgICAgICAgLy9zZWxlY3RvcnMKKyAgICAgICAgYWN0aW9uQ29udHJv
bHNTZWxlY3RvcjogJ2J1dHRvbi5tYWlsLWFjdGlvbicsCisgICAgICAgIGRlbGV0ZUNvbnRyb2xT
ZWxlY3RvcjogJyNkZWxldGVfbWFpbCcsCisgICAgICAgIG1vdmVDb250cm9sU2VsZWN0b3I6ICcj
bW92ZV9tYWlsJywKKyAgICAgICAgZm9yd2FyZENvbnRyb2xTZWxlY3RvcjogJyNmb3J3YXJkJywK
KyAgICAgICAgcmVwbHlDb250cm9sU2VsZWN0b3I6ICcjcmVwbHknLAorICAgICAgICBzaW5nbGVJ
dGVtQWN0aW9uU2VsZWN0b3I6ICdidXR0b24uc2luZ2xlLWl0ZW0nCisgICAgICB9KTsKKworICAg
ICAgdGhpcy5kaXNhYmxlQWxsID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMuc2VsZWN0KCdh
Y3Rpb25Db250cm9sc1NlbGVjdG9yJykuYXR0cignZGlzYWJsZWQnLCAnZGlzYWJsZWQnKTsKKyAg
ICAgIH07CisKKyAgICAgIHRoaXMucmVzdHlsZU9uU2VsZWN0aW9uQ2hhbmdlID0gZnVuY3Rpb24o
ZXYsIGRhdGEpIHsKKyAgICAgICAgaWYgKGRhdGEuc2VsZWN0ZWRJZHMubGVuZ3RoID4gMSkgewor
ICAgICAgICAgIHRoaXMuc2VsZWN0KCdhY3Rpb25Db250cm9sc1NlbGVjdG9yJykubm90KCdidXR0
b24uc2luZ2xlLWl0ZW0nKS5yZW1vdmVBdHRyKCdkaXNhYmxlZCcpOworICAgICAgICAgIHRoaXMu
c2VsZWN0KCdzaW5nbGVJdGVtQWN0aW9uU2VsZWN0b3InKS5hdHRyKCdkaXNhYmxlZCcsICdkaXNh
YmxlZCcpOworICAgICAgICB9IGVsc2UgaWYgKGRhdGEuc2VsZWN0ZWRJZHMubGVuZ3RoID09IDEp
IHsKKyAgICAgICAgICB0aGlzLnNlbGVjdCgnYWN0aW9uQ29udHJvbHNTZWxlY3RvcicpLnJlbW92
ZUF0dHIoJ2Rpc2FibGVkJyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgdGhpcy5kaXNh
YmxlQWxsKCk7CisgICAgICAgIH0KKyAgICAgIH07CisKKyAgICAgIHRoaXMuZGVsZXRlTWFpbCA9
IGZ1bmN0aW9uKGV2LCBkYXRhKSB7CisgICAgICAgIHRoaXMudHJpZ2dlcigndWlEZWxldGVNYWls
Jyk7CisgICAgICB9OworCisgICAgICB0aGlzLm1vdmVNYWlsID0gZnVuY3Rpb24oZXYsIGRhdGEp
IHsKKyAgICAgICAgdGhpcy50cmlnZ2VyKCd1aU1vdmVNYWlsJyk7CisgICAgICB9OworCisgICAg
ICB0aGlzLmZvcndhcmRNYWlsID0gZnVuY3Rpb24oZXYsIGRhdGEpIHsKKyAgICAgICAgdGhpcy50
cmlnZ2VyKCd1aUZvcndhcmRNYWlsJyk7CisgICAgICB9OworCisgICAgICB0aGlzLnJlcGx5VG9N
YWlsID0gZnVuY3Rpb24oZXYsIGRhdGEpIHsKKyAgICAgICAgdGhpcy50cmlnZ2VyKCd1aVJlcGx5
VG9NYWlsJyk7CisgICAgICB9OworCisgICAgICB0aGlzLmFmdGVyKCdpbml0aWFsaXplJywgZnVu
Y3Rpb24oKSB7CisgICAgICAgIHRoaXMub24oJy5tYWlsLWFjdGlvbicsICdjbGljaycsIHsKKyAg
ICAgICAgICAnZGVsZXRlQ29udHJvbFNlbGVjdG9yJzogdGhpcy5kZWxldGVNYWlsLAorICAgICAg
ICAgICdtb3ZlQ29udHJvbFNlbGVjdG9yJzogdGhpcy5tb3ZlTWFpbCwKKyAgICAgICAgICAnZm9y
d2FyZENvbnRyb2xTZWxlY3Rvcic6IHRoaXMuZm9yd2FyZE1haWwsCisgICAgICAgICAgJ3JlcGx5
Q29udHJvbFNlbGVjdG9yJzogdGhpcy5yZXBseVRvTWFpbAorICAgICAgICB9KTsKKyAgICAgICAg
dGhpcy5vbihkb2N1bWVudCwgJ3VpTWFpbEl0ZW1TZWxlY3Rpb25DaGFuZ2VkJywgdGhpcy5yZXN0
eWxlT25TZWxlY3Rpb25DaGFuZ2UpOworICAgICAgICB0aGlzLm9uKGRvY3VtZW50LCAndWlGb2xk
ZXJTZWxlY3Rpb25DaGFuZ2VkJywgdGhpcy5kaXNhYmxlQWxsKTsKKyAgICAgIH0pOworICAgIH0K
KyAgfQorKTsKKwpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRq
cy1leGFtcGxlLWFwcC9hcHAvY29tcG9uZW50X3VpL21haWxfaXRlbXMuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9h
cHAvY29tcG9uZW50X3VpL21haWxfaXRlbXMuanMJKHJldmlzaW9uIDApCisrKyBQZXJmb3JtYW5j
ZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2FwcC9jb21wb25lbnRf
dWkvbWFpbF9pdGVtcy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYxIEBACisndXNlIHN0
cmljdCc7CisKK2RlZmluZSgKKworICBbCisgICAgJ2ZsaWdodC9saWIvY29tcG9uZW50JywKKyAg
ICAnLi93aXRoX3NlbGVjdCcKKyAgXSwKKworICBmdW5jdGlvbihkZWZpbmVDb21wb25lbnQsIHdp
dGhTZWxlY3QpIHsKKworICAgIHJldHVybiBkZWZpbmVDb21wb25lbnQobWFpbEl0ZW1zLCB3aXRo
U2VsZWN0KTsKKworICAgIGZ1bmN0aW9uIG1haWxJdGVtcygpIHsKKworICAgICAgdGhpcy5kZWZh
dWx0QXR0cnMoeworICAgICAgICBkZWxldGVGb2xkZXI6ICd0cmFzaCcsCisgICAgICAgIHNlbGVj
dGVkQ2xhc3M6ICdzZWxlY3RlZCcsCisgICAgICAgIGFsbG93TXVsdGlTZWxlY3Q6IHRydWUsCisg
ICAgICAgIHNlbGVjdGlvbkNoYW5nZWRFdmVudDogJ3VpTWFpbEl0ZW1TZWxlY3Rpb25DaGFuZ2Vk
JywKKyAgICAgICAgc2VsZWN0ZWRNYWlsSXRlbXM6IFtdLAorICAgICAgICBzZWxlY3RlZEZvbGRl
cnM6IFtdLAorICAgICAgICAvL3NlbGVjdG9ycworICAgICAgICBpdGVtU2VsZWN0b3I6ICd0ci5t
YWlsLWl0ZW0nLAorICAgICAgICBzZWxlY3RlZEl0ZW1TZWxlY3RvcjogJ3RyLm1haWwtaXRlbS5z
ZWxlY3RlZCcKKyAgICAgIH0pOworCisgICAgICB0aGlzLnJlbmRlckl0ZW1zID0gZnVuY3Rpb24o
ZXYsIGRhdGEpIHsKKyAgICAgICAgdGhpcy5zZWxlY3QoJ2l0ZW1Db250YWluZXJTZWxlY3Rvcicp
Lmh0bWwoZGF0YS5tYXJrdXApOworICAgICAgICAvL25ldyBpdGVtcywgc28gbm8gc2VsZWN0aW9u
cworICAgICAgICB0aGlzLnRyaWdnZXIoJ3VpTWFpbEl0ZW1TZWxlY3Rpb25DaGFuZ2VkJywge3Nl
bGVjdGVkSWRzOiBbXX0pOworICAgICAgfQorCisgICAgICB0aGlzLnVwZGF0ZU1haWxJdGVtU2Vs
ZWN0aW9ucyA9IGZ1bmN0aW9uKGV2LCBkYXRhKSB7CisgICAgICAgIHRoaXMuYXR0ci5zZWxlY3Rl
ZE1haWxJdGVtcyA9IGRhdGEuc2VsZWN0ZWRJZHM7CisgICAgICB9CisKKyAgICAgIHRoaXMudXBk
YXRlRm9sZGVyU2VsZWN0aW9ucyA9IGZ1bmN0aW9uKGV2LCBkYXRhKSB7CisgICAgICAgIHRoaXMu
YXR0ci5zZWxlY3RlZEZvbGRlcnMgPSBkYXRhLnNlbGVjdGVkSWRzOworICAgICAgfQorCisgICAg
ICB0aGlzLnJlcXVlc3REZWxldGlvbiA9IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLnRyaWdn
ZXIoJ3VpTW92ZUl0ZW1zUmVxdWVzdGVkJywgeworICAgICAgICAgIGl0ZW1JZHM6IHRoaXMuYXR0
ci5zZWxlY3RlZE1haWxJdGVtcywKKyAgICAgICAgICBmcm9tRm9sZGVyOiB0aGlzLmF0dHIuc2Vs
ZWN0ZWRGb2xkZXJzWzBdLAorICAgICAgICAgIHRvRm9sZGVyOiB0aGlzLmF0dHIuZGVsZXRlRm9s
ZGVyCisgICAgICAgIH0pOworICAgICAgfTsKKworICAgICAgdGhpcy5hZnRlcignaW5pdGlhbGl6
ZScsIGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLm9uKGRvY3VtZW50LCAnZGF0YU1haWxJdGVt
c1NlcnZlZCcsIHRoaXMucmVuZGVySXRlbXMpOworICAgICAgICB0aGlzLm9uKGRvY3VtZW50LCAn
dWlEZWxldGVNYWlsJywgdGhpcy5yZXF1ZXN0RGVsZXRpb24pOworCisgICAgICAgIHRoaXMub24o
J3VpTWFpbEl0ZW1TZWxlY3Rpb25DaGFuZ2VkJywgdGhpcy51cGRhdGVNYWlsSXRlbVNlbGVjdGlv
bnMpOworICAgICAgICB0aGlzLm9uKGRvY3VtZW50LCAndWlGb2xkZXJTZWxlY3Rpb25DaGFuZ2Vk
JywgdGhpcy51cGRhdGVGb2xkZXJTZWxlY3Rpb25zKTsKKworICAgICAgICB0aGlzLnRyaWdnZXIo
J3VpTWFpbEl0ZW1zUmVxdWVzdGVkJyk7CisgICAgICB9KTsKKyAgICB9CisgIH0KKyk7CkluZGV4
OiBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2Fw
cC9jb21wb25lbnRfdWkvbW92ZV90b19zZWxlY3Rvci5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3Jt
YW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2FwcC9jb21wb25l
bnRfdWkvbW92ZV90b19zZWxlY3Rvci5qcwkocmV2aXNpb24gMCkKKysrIFBlcmZvcm1hbmNlVGVz
dHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvYXBwL2NvbXBvbmVudF91aS9t
b3ZlX3RvX3NlbGVjdG9yLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzkgQEAKKyd1c2Ug
c3RyaWN0JzsKKworZGVmaW5lKAorCisgIFsKKyAgICAnZmxpZ2h0L2xpYi9jb21wb25lbnQnLAor
ICAgICcuL3dpdGhfc2VsZWN0JworICBdLAorCisgIGZ1bmN0aW9uKGRlZmluZUNvbXBvbmVudCwg
d2l0aFNlbGVjdCkgeworCisgICAgcmV0dXJuIGRlZmluZUNvbXBvbmVudChtb3ZlVG9TZWxlY3Rv
ciwgd2l0aFNlbGVjdCk7CisKKyAgICBmdW5jdGlvbiBtb3ZlVG9TZWxlY3RvcigpIHsKKworICAg
ICAgdGhpcy5kZWZhdWx0QXR0cnMoeworICAgICAgICBzZWxlY3Rpb25DaGFuZ2VkRXZlbnQ6ICd1
aU1vdmVUb1NlbGVjdGlvbkNoYW5nZWQnLAorICAgICAgICBzZWxlY3RlZE1haWxJdGVtczogW10s
CisgICAgICAgIHNlbGVjdGVkRm9sZGVyczogW10sCisgICAgICAgIC8vc2VsZWN0b3JzCisgICAg
ICAgIGl0ZW1TZWxlY3RvcjogJ2xpLm1vdmUtdG8taXRlbScsCisgICAgICAgIHNlbGVjdGVkSXRl
bVNlbGVjdG9yOiAnbGkubW92ZS10by1pdGVtLnNlbGVjdGVkJworICAgICAgfSk7CisKKyAgICAg
IHRoaXMucmVxdWVzdFNlbGVjdG9yV2lkZ2V0ID0gZnVuY3Rpb24oZXYsIGRhdGEpIHsKKyAgICAg
ICAgdGhpcy50cmlnZ2VyKCd1aUF2YWlsYWJsZUZvbGRlcnNSZXF1ZXN0ZWQnLCB7CisgICAgICAg
ICAgZm9sZGVyOiB0aGlzLmF0dHIuc2VsZWN0ZWRGb2xkZXJzWzBdCisgICAgICAgIH0pCisgICAg
ICB9OworCisgICAgICB0aGlzLmxhdW5jaFNlbGVjdG9yID0gZnVuY3Rpb24oZXYsIGRhdGEpIHsK
KyAgICAgICAgdmFyIGNvbnRyb2xQb3NpdGlvbiA9ICQodGhpcy5hdHRyLm1vdmVBY3Rpb25TZWxl
Y3Rvcikub2Zmc2V0KCk7CisgICAgICAgIHRoaXMuJG5vZGUuaHRtbChkYXRhLm1hcmt1cCkuc2hv
dygpLmNzcyh7CisgICAgICAgICAgbGVmdDogY29udHJvbFBvc2l0aW9uLmxlZnQsCisgICAgICAg
ICAgdG9wOiBjb250cm9sUG9zaXRpb24udG9wICsgJCh0aGlzLmF0dHIubW92ZUFjdGlvblNlbGVj
dG9yKS5vdXRlckhlaWdodCgpLAorICAgICAgICAgIHdpZHRoOiAkKHRoaXMuYXR0ci5tb3ZlQWN0
aW9uU2VsZWN0b3IpLm91dGVyV2lkdGgoKQorICAgICAgICB9KTsKKyAgICAgICAgd2luZG93LnNl
dFRpbWVvdXQoCisgICAgICAgICAgKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgdGhpcy5vbihk
b2N1bWVudCwgJ2NsaWNrJywgdGhpcy5oaWRlU2VsZWN0b3IpCisgICAgICAgICAgfSkuYmluZCh0
aGlzKSwgMCk7CisgICAgICB9OworCisgICAgICB0aGlzLmhpZGVTZWxlY3RvciA9IGZ1bmN0aW9u
KCkgeworICAgICAgICB0aGlzLm9mZihkb2N1bWVudCwgJ2NsaWNrJywgdGhpcy5oaWRlU2VsZWN0
b3IpOworICAgICAgICB0aGlzLiRub2RlLmhpZGUoKTsKKyAgICAgIH0KKworICAgICAgdGhpcy51
cGRhdGVNYWlsSXRlbVNlbGVjdGlvbnMgPSBmdW5jdGlvbihldiwgZGF0YSkgeworICAgICAgICB0
aGlzLmF0dHIuc2VsZWN0ZWRNYWlsSXRlbXMgPSBkYXRhLnNlbGVjdGVkSWRzOworICAgICAgfQor
CisgICAgICB0aGlzLnVwZGF0ZUZvbGRlclNlbGVjdGlvbnMgPSBmdW5jdGlvbihldiwgZGF0YSkg
eworICAgICAgICB0aGlzLmF0dHIuc2VsZWN0ZWRGb2xkZXJzID0gZGF0YS5zZWxlY3RlZElkczsK
KyAgICAgIH0KKworICAgICAgdGhpcy5yZXF1ZXN0TW92ZVRvID0gZnVuY3Rpb24oZXYsIGRhdGEp
IHsKKyAgICAgICAgdGhpcy50cmlnZ2VyKCd1aU1vdmVJdGVtc1JlcXVlc3RlZCcsIHsKKyAgICAg
ICAgICBpdGVtSWRzOiB0aGlzLmF0dHIuc2VsZWN0ZWRNYWlsSXRlbXMsCisgICAgICAgICAgZnJv
bUZvbGRlcjogdGhpcy5hdHRyLnNlbGVjdGVkRm9sZGVyc1swXSwKKyAgICAgICAgICB0b0ZvbGRl
cjogZGF0YS5zZWxlY3RlZElkc1swXQorICAgICAgICB9KTsKKyAgICAgICAgdGhpcy4kbm9kZS5o
aWRlKCk7CisgICAgICB9OworCisgICAgICB0aGlzLmFmdGVyKCdpbml0aWFsaXplJywgZnVuY3Rp
b24oKSB7CisgICAgICAgIC8vc2hvdyBzZWxlY3RvciB3aWRnZXQKKyAgICAgICAgdGhpcy5vbihk
b2N1bWVudCwgJ3VpTW92ZU1haWwnLCB0aGlzLnJlcXVlc3RTZWxlY3RvcldpZGdldCk7CisgICAg
ICAgIHRoaXMub24oZG9jdW1lbnQsICdkYXRhTW92ZVRvSXRlbXNTZXJ2ZWQnLCB0aGlzLmxhdW5j
aFNlbGVjdG9yKTsKKyAgICAgICAgLy9saXN0ZW4gZm9yIG90aGVyIHNlbGVjdGlvbnMKKyAgICAg
ICAgdGhpcy5vbihkb2N1bWVudCwgJ3VpTWFpbEl0ZW1TZWxlY3Rpb25DaGFuZ2VkJywgdGhpcy51
cGRhdGVNYWlsSXRlbVNlbGVjdGlvbnMpOworICAgICAgICB0aGlzLm9uKGRvY3VtZW50LCAndWlG
b2xkZXJTZWxlY3Rpb25DaGFuZ2VkJywgdGhpcy51cGRhdGVGb2xkZXJTZWxlY3Rpb25zKTsKKyAg
ICAgICAgLy9tb3ZlIGl0ZW1zCisgICAgICAgIHRoaXMub24oJ3VpTW92ZVRvU2VsZWN0aW9uQ2hh
bmdlZCcsIHRoaXMucmVxdWVzdE1vdmVUbyk7CisKKyAgICAgIH0pOworICAgIH0KKyAgfQorKTsK
SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1h
cHAvYXBwL2NvbXBvbmVudF91aS93aXRoX3NlbGVjdC5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3Jt
YW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2FwcC9jb21wb25l
bnRfdWkvd2l0aF9zZWxlY3QuanMJKHJldmlzaW9uIDApCisrKyBQZXJmb3JtYW5jZVRlc3RzL0Rv
WW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2FwcC9jb21wb25lbnRfdWkvd2l0aF9z
ZWxlY3QuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NCBAQAorJ3VzZSBzdHJpY3QnOwor
CitkZWZpbmUoCisKKyAgZnVuY3Rpb24oKSB7CisKKyAgICByZXR1cm4gd2l0aFNlbGVjdDsKKwor
ICAgIGZ1bmN0aW9uIHdpdGhTZWxlY3QoKSB7CisKKyAgICAgIHRoaXMuZGVmYXVsdEF0dHJzKHsK
KyAgICAgICAgc2VsZWN0ZWRJZHM6IFtdCisgICAgICB9KTsKKworICAgICAgdGhpcy5pbml0aWFs
aXplU2VsZWN0aW9ucyA9IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLnNlbGVjdCgnc2VsZWN0
ZWRJdGVtU2VsZWN0b3InKS50b0FycmF5KCkuZm9yRWFjaChmdW5jdGlvbihlbCkgeworICAgICAg
ICAgIHRoaXMuYXR0ci5zZWxlY3RlZElkcy5wdXNoKGVsLmdldEF0dHJpYnV0ZSgnaWQnKSk7Cisg
ICAgICAgIH0sIHRoaXMpOworICAgICAgfTsKKworICAgICAgdGhpcy5nZXRTZWxlY3RlZElkcyA9
IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy5hdHRyLnNlbGVjdGVkSWRzOworICAg
ICAgfTsKKworICAgICAgdGhpcy50b2dnbGVJdGVtU2VsZWN0ID0gZnVuY3Rpb24oZXYsIGRhdGEp
IHsKKyAgICAgICAgdmFyICRpdGVtID0gJChkYXRhLmVsKSwgYXBwZW5kOworCisgICAgICAgIGlm
ICgkaXRlbS5oYXNDbGFzcyh0aGlzLmF0dHIuc2VsZWN0ZWRDbGFzcykpIHsKKyAgICAgICAgICB0
aGlzLnVuc2VsZWN0SXRlbSgkaXRlbSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgYXBw
ZW5kID0gdGhpcy5hdHRyLmFsbG93TXVsdGlTZWxlY3QgJiYgKGV2Lm1ldGFLZXkgfHwgZXYuY3Ry
bEtleSB8fCBldi5zaGlmdEtleSk7CisgICAgICAgICAgdGhpcy5zZWxlY3RJdGVtKCRpdGVtLCBh
cHBlbmQpOworICAgICAgICB9CisgICAgICB9OworCisgICAgICB0aGlzLnNlbGVjdEl0ZW0gPSBm
dW5jdGlvbigkaXRlbSwgYXBwZW5kKSB7CisgICAgICAgIGlmICghYXBwZW5kKSB7CisgICAgICAg
ICAgdGhpcy5zZWxlY3QoJ3NlbGVjdGVkSXRlbVNlbGVjdG9yJykucmVtb3ZlQ2xhc3ModGhpcy5h
dHRyLnNlbGVjdGVkQ2xhc3MpOworICAgICAgICAgIHRoaXMuYXR0ci5zZWxlY3RlZElkcyA9IFtd
OworICAgICAgICB9CisgICAgICAgICRpdGVtLmFkZENsYXNzKHRoaXMuYXR0ci5zZWxlY3RlZENs
YXNzKTsKKworICAgICAgICB0aGlzLmF0dHIuc2VsZWN0ZWRJZHMucHVzaCgkaXRlbS5hdHRyKCdp
ZCcpKTsKKyAgICAgICAgdGhpcy50cmlnZ2VyKHRoaXMuYXR0ci5zZWxlY3Rpb25DaGFuZ2VkRXZl
bnQsIHtzZWxlY3RlZElkczogdGhpcy5hdHRyLnNlbGVjdGVkSWRzfSk7CisgICAgICB9OworCisg
ICAgICB0aGlzLnVuc2VsZWN0SXRlbSA9IGZ1bmN0aW9uKCRpdGVtKSB7CisgICAgICAgICRpdGVt
LnJlbW92ZUNsYXNzKHRoaXMuYXR0ci5zZWxlY3RlZENsYXNzKTsKKworICAgICAgICB2YXIgdGhp
c0lkSW5kZXggPSB0aGlzLmF0dHIuc2VsZWN0ZWRJZHMuaW5kZXhPZigkaXRlbS5hdHRyKCdpZCcp
KTsKKyAgICAgICAgdGhpcy5hdHRyLnNlbGVjdGVkSWRzLnNwbGljZSh0aGlzSWRJbmRleCwgMSk7
CisgICAgICAgIHRoaXMudHJpZ2dlcih0aGlzLmF0dHIuc2VsZWN0aW9uQ2hhbmdlZEV2ZW50LCB7
c2VsZWN0ZWRJZHM6IHRoaXMuYXR0ci5zZWxlY3RlZElkc30pOworICAgICAgfTsKKworICAgICAg
dGhpcy5hZnRlcigiaW5pdGlhbGl6ZSIsIGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLm9uKCdj
bGljaycsIHsKKyAgICAgICAgICAnaXRlbVNlbGVjdG9yJzogdGhpcy50b2dnbGVJdGVtU2VsZWN0
CisgICAgICAgIH0pOworCisgICAgICAgIHRoaXMuaW5pdGlhbGl6ZVNlbGVjdGlvbnMoKTsKKyAg
ICAgIH0pOworICAgIH0KKyAgfQorKTsKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVu
QmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvYXBwL2Nzcy9jdXN0b20uY3NzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAv
YXBwL2Nzcy9jdXN0b20uY3NzCShyZXZpc2lvbiAwKQorKysgUGVyZm9ybWFuY2VUZXN0cy9Eb1lv
dUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9hcHAvY3NzL2N1c3RvbS5jc3MJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxMDIgQEAKKy5tb2RhbC5mYWRlLmluIHsKKyAgbGVmdDogNSU7
CisgIHRvcDogMTAlOworICBtYXJnaW46IGF1dG8gYXV0byBhdXRvIGF1dG87Cit9CisKK3RhYmxl
IHsKKyAgLXdlYmtpdC10b3VjaC1jYWxsb3V0OiBub25lOworICAtd2Via2l0LXVzZXItc2VsZWN0
OiBub25lOworICAtbW96LXVzZXItc2VsZWN0OiBub25lOworICAtbXMtdXNlci1zZWxlY3Q6IG5v
bmU7CisgIHVzZXItc2VsZWN0OiBub25lOworfQorCit0ZC5tYWlsQ29udGFjdCwKK3NwYW4ubWFp
bFN1YmplY3QsCitzcGFuLm1haWxNZXNzYWdlIHsKKyAgZm9udC1zaXplOiAxNXB4OworfQorCit0
ZC5tYWlsQ29udGFjdCwKK3NwYW4ubWFpbFN1YmplY3QgeworICBmb250LXdlaWdodDogYm9sZDsK
K30KKwordHIubWFpbC1pdGVtLnNlbGVjdGVkIHRkLAorbGkuZm9sZGVyLWl0ZW0uc2VsZWN0ZWQs
CitsaS5tb3ZlLXRvLWl0ZW0uc2VsZWN0ZWQgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjRDlFREY3
OworfQorCit0ci5tYWlsLWl0ZW0uc2VsZWN0ZWQ6aG92ZXIgdGQsCitsaS5mb2xkZXItaXRlbS5z
ZWxlY3RlZDpob3ZlciwKK2xpLm1vdmUtdG8taXRlbS5zZWxlY3RlZDpob3ZlciB7CisgIGJhY2tn
cm91bmQtY29sb3I6ICNDMUUxRkY7Cit9CisKK2xpLmZvbGRlci1pdGVtOmhvdmVyLAorbGkubW92
ZS10by1pdGVtOmhvdmVyIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI0VERURFRDsKK30KKworbGku
Zm9sZGVyLWl0ZW0sCitsaS5tb3ZlLXRvLWl0ZW0geworICBwYWRkaW5nOiAzcHggMDsKKyAgbWFy
Z2luLWxlZnQ6IC0xNXB4OworICBmb250LXNpemU6IDE1cHg7CisgIGN1cnNvcjpwb2ludGVyOwor
fQorCitsaS5tb3ZlLXRvLWl0ZW0geworICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgIG1hcmdpbi1y
aWdodDogLTE1cHg7Cit9CisKKyNuZXdfbWFpbCB7CisgIHdpZHRoOiAxMDBweDsKK30KKworZGl2
LmNvbXBvc2UtYm94IHsKKyAgcG9zaXRpb246IGFic29sdXRlOworICB6LWluZGV4OiAxMDsKKyAg
YmFja2dyb3VuZC1jb2xvcjogI0ZGRkZGRjsKKyAgd2lkdGg6IDM1MHB4OworICBib3JkZXI6IDFw
eCBzb2xpZDsKK30KKworZGl2LmNvbXBvc2UtYm9keSB7CisgIHBhZGRpbmc6IDA7Cit9CisKK2Rp
di5jb21wb3NlLWhlYWRlciB7CisgIGZvbnQtc2l6ZTogMTVweDsKK30KKworI3JlY2lwaWVudF9z
ZWxlY3QgeworICB3aWR0aDogOTAlOworICBtYXJnaW4tYm90dG9tOiAwOworICBmb250LXdlaWdo
dDogYm9sZDsKK30KKworZGl2LmhpbnQgeworICBib3JkZXI6IDFweCBzb2xpZCAjRUFFQUVBOwor
ICBjb2xvcjojQ0FDQUNBOworfQorCisjY29tcG9zZV9tZXNzYWdlIHsKKyAgaGVpZ2h0OiAxODBw
eDsKK30KKworI2NvbXBvc2Vfc3ViamVjdCwKKyNjb21wb3NlX21lc3NhZ2UgeworICBmb250LXNp
emU6IDE1cHg7CisgIHBhZGRpbmc6IDE1cHg7Cit9CisKKyNtb3ZlX3RvX3NlbGVjdG9yIHsKKyAg
cG9zaXRpb246IGFic29sdXRlOworICB6LWluZGV4OiAxMDsKKyAgYmFja2dyb3VuZC1jb2xvcjog
I0ZGRkZGRjsKKyAgYm9yZGVyOiAxcHggc29saWQ7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2Yg
ZmlsZQpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFt
cGxlLWFwcC9jb21wb25lbnRzL2Jvb3RzdHJhcC9jc3MvYm9vdHN0cmFwLXJlc3BvbnNpdmUuY3Nz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMt
ZXhhbXBsZS1hcHAvY29tcG9uZW50cy9ib290c3RyYXAvY3NzL2Jvb3RzdHJhcC1yZXNwb25zaXZl
LmNzcwkocmV2aXNpb24gMCkKKysrIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxp
Z2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9ib290c3RyYXAvY3NzL2Jvb3RzdHJhcC1yZXNw
b25zaXZlLmNzcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwOTIgQEAKKy8qIQorICogQm9v
dHN0cmFwIFJlc3BvbnNpdmUgdjIuMi4yCisgKgorICogQ29weXJpZ2h0IDIwMTIgVHdpdHRlciwg
SW5jCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UgdjIuMAorICogaHR0cDov
L3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogRGVzaWduZWQgYW5k
IGJ1aWx0IHdpdGggYWxsIHRoZSBsb3ZlIGluIHRoZSB3b3JsZCBAdHdpdHRlciBieSBAbWRvIGFu
ZCBAZmF0LgorICovCisKK0AtbXMtdmlld3BvcnQgeworICB3aWR0aDogZGV2aWNlLXdpZHRoOwor
fQorCisuY2xlYXJmaXggeworICAqem9vbTogMTsKK30KKworLmNsZWFyZml4OmJlZm9yZSwKKy5j
bGVhcmZpeDphZnRlciB7CisgIGRpc3BsYXk6IHRhYmxlOworICBsaW5lLWhlaWdodDogMDsKKyAg
Y29udGVudDogIiI7Cit9CisKKy5jbGVhcmZpeDphZnRlciB7CisgIGNsZWFyOiBib3RoOworfQor
CisuaGlkZS10ZXh0IHsKKyAgZm9udDogMC8wIGE7CisgIGNvbG9yOiB0cmFuc3BhcmVudDsKKyAg
dGV4dC1zaGFkb3c6IG5vbmU7CisgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OworICBi
b3JkZXI6IDA7Cit9CisKKy5pbnB1dC1ibG9jay1sZXZlbCB7CisgIGRpc3BsYXk6IGJsb2NrOwor
ICB3aWR0aDogMTAwJTsKKyAgbWluLWhlaWdodDogMzBweDsKKyAgLXdlYmtpdC1ib3gtc2l6aW5n
OiBib3JkZXItYm94OworICAgICAtbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7CisgICAgICAg
ICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKK30KKworLmhpZGRlbiB7CisgIGRpc3BsYXk6IG5v
bmU7CisgIHZpc2liaWxpdHk6IGhpZGRlbjsKK30KKworLnZpc2libGUtcGhvbmUgeworICBkaXNw
bGF5OiBub25lICFpbXBvcnRhbnQ7Cit9CisKKy52aXNpYmxlLXRhYmxldCB7CisgIGRpc3BsYXk6
IG5vbmUgIWltcG9ydGFudDsKK30KKworLmhpZGRlbi1kZXNrdG9wIHsKKyAgZGlzcGxheTogbm9u
ZSAhaW1wb3J0YW50OworfQorCisudmlzaWJsZS1kZXNrdG9wIHsKKyAgZGlzcGxheTogaW5oZXJp
dCAhaW1wb3J0YW50OworfQorCitAbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIGFuZCAobWF4LXdp
ZHRoOiA5NzlweCkgeworICAuaGlkZGVuLWRlc2t0b3AgeworICAgIGRpc3BsYXk6IGluaGVyaXQg
IWltcG9ydGFudDsKKyAgfQorICAudmlzaWJsZS1kZXNrdG9wIHsKKyAgICBkaXNwbGF5OiBub25l
ICFpbXBvcnRhbnQgOworICB9CisgIC52aXNpYmxlLXRhYmxldCB7CisgICAgZGlzcGxheTogaW5o
ZXJpdCAhaW1wb3J0YW50OworICB9CisgIC5oaWRkZW4tdGFibGV0IHsKKyAgICBkaXNwbGF5OiBu
b25lICFpbXBvcnRhbnQ7CisgIH0KK30KKworQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7Cisg
IC5oaWRkZW4tZGVza3RvcCB7CisgICAgZGlzcGxheTogaW5oZXJpdCAhaW1wb3J0YW50OworICB9
CisgIC52aXNpYmxlLWRlc2t0b3AgeworICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKKyAg
fQorICAudmlzaWJsZS1waG9uZSB7CisgICAgZGlzcGxheTogaW5oZXJpdCAhaW1wb3J0YW50Owor
ICB9CisgIC5oaWRkZW4tcGhvbmUgeworICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKKyAg
fQorfQorCitAbWVkaWEgKG1pbi13aWR0aDogMTIwMHB4KSB7CisgIC5yb3cgeworICAgIG1hcmdp
bi1sZWZ0OiAtMzBweDsKKyAgICAqem9vbTogMTsKKyAgfQorICAucm93OmJlZm9yZSwKKyAgLnJv
dzphZnRlciB7CisgICAgZGlzcGxheTogdGFibGU7CisgICAgbGluZS1oZWlnaHQ6IDA7CisgICAg
Y29udGVudDogIiI7CisgIH0KKyAgLnJvdzphZnRlciB7CisgICAgY2xlYXI6IGJvdGg7CisgIH0K
KyAgW2NsYXNzKj0ic3BhbiJdIHsKKyAgICBmbG9hdDogbGVmdDsKKyAgICBtaW4taGVpZ2h0OiAx
cHg7CisgICAgbWFyZ2luLWxlZnQ6IDMwcHg7CisgIH0KKyAgLmNvbnRhaW5lciwKKyAgLm5hdmJh
ci1zdGF0aWMtdG9wIC5jb250YWluZXIsCisgIC5uYXZiYXItZml4ZWQtdG9wIC5jb250YWluZXIs
CisgIC5uYXZiYXItZml4ZWQtYm90dG9tIC5jb250YWluZXIgeworICAgIHdpZHRoOiAxMTcwcHg7
CisgIH0KKyAgLnNwYW4xMiB7CisgICAgd2lkdGg6IDExNzBweDsKKyAgfQorICAuc3BhbjExIHsK
KyAgICB3aWR0aDogMTA3MHB4OworICB9CisgIC5zcGFuMTAgeworICAgIHdpZHRoOiA5NzBweDsK
KyAgfQorICAuc3BhbjkgeworICAgIHdpZHRoOiA4NzBweDsKKyAgfQorICAuc3BhbjggeworICAg
IHdpZHRoOiA3NzBweDsKKyAgfQorICAuc3BhbjcgeworICAgIHdpZHRoOiA2NzBweDsKKyAgfQor
ICAuc3BhbjYgeworICAgIHdpZHRoOiA1NzBweDsKKyAgfQorICAuc3BhbjUgeworICAgIHdpZHRo
OiA0NzBweDsKKyAgfQorICAuc3BhbjQgeworICAgIHdpZHRoOiAzNzBweDsKKyAgfQorICAuc3Bh
bjMgeworICAgIHdpZHRoOiAyNzBweDsKKyAgfQorICAuc3BhbjIgeworICAgIHdpZHRoOiAxNzBw
eDsKKyAgfQorICAuc3BhbjEgeworICAgIHdpZHRoOiA3MHB4OworICB9CisgIC5vZmZzZXQxMiB7
CisgICAgbWFyZ2luLWxlZnQ6IDEyMzBweDsKKyAgfQorICAub2Zmc2V0MTEgeworICAgIG1hcmdp
bi1sZWZ0OiAxMTMwcHg7CisgIH0KKyAgLm9mZnNldDEwIHsKKyAgICBtYXJnaW4tbGVmdDogMTAz
MHB4OworICB9CisgIC5vZmZzZXQ5IHsKKyAgICBtYXJnaW4tbGVmdDogOTMwcHg7CisgIH0KKyAg
Lm9mZnNldDggeworICAgIG1hcmdpbi1sZWZ0OiA4MzBweDsKKyAgfQorICAub2Zmc2V0NyB7Cisg
ICAgbWFyZ2luLWxlZnQ6IDczMHB4OworICB9CisgIC5vZmZzZXQ2IHsKKyAgICBtYXJnaW4tbGVm
dDogNjMwcHg7CisgIH0KKyAgLm9mZnNldDUgeworICAgIG1hcmdpbi1sZWZ0OiA1MzBweDsKKyAg
fQorICAub2Zmc2V0NCB7CisgICAgbWFyZ2luLWxlZnQ6IDQzMHB4OworICB9CisgIC5vZmZzZXQz
IHsKKyAgICBtYXJnaW4tbGVmdDogMzMwcHg7CisgIH0KKyAgLm9mZnNldDIgeworICAgIG1hcmdp
bi1sZWZ0OiAyMzBweDsKKyAgfQorICAub2Zmc2V0MSB7CisgICAgbWFyZ2luLWxlZnQ6IDEzMHB4
OworICB9CisgIC5yb3ctZmx1aWQgeworICAgIHdpZHRoOiAxMDAlOworICAgICp6b29tOiAxOwor
ICB9CisgIC5yb3ctZmx1aWQ6YmVmb3JlLAorICAucm93LWZsdWlkOmFmdGVyIHsKKyAgICBkaXNw
bGF5OiB0YWJsZTsKKyAgICBsaW5lLWhlaWdodDogMDsKKyAgICBjb250ZW50OiAiIjsKKyAgfQor
ICAucm93LWZsdWlkOmFmdGVyIHsKKyAgICBjbGVhcjogYm90aDsKKyAgfQorICAucm93LWZsdWlk
IFtjbGFzcyo9InNwYW4iXSB7CisgICAgZGlzcGxheTogYmxvY2s7CisgICAgZmxvYXQ6IGxlZnQ7
CisgICAgd2lkdGg6IDEwMCU7CisgICAgbWluLWhlaWdodDogMzBweDsKKyAgICBtYXJnaW4tbGVm
dDogMi41NjQxMDI1NjQxMDI1NjQlOworICAgICptYXJnaW4tbGVmdDogMi41MTA5MTEwNzQ3NDA4
NjE2JTsKKyAgICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7CisgICAgICAgLW1vei1i
b3gtc2l6aW5nOiBib3JkZXItYm94OworICAgICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJv
eDsKKyAgfQorICAucm93LWZsdWlkIFtjbGFzcyo9InNwYW4iXTpmaXJzdC1jaGlsZCB7CisgICAg
bWFyZ2luLWxlZnQ6IDA7CisgIH0KKyAgLnJvdy1mbHVpZCAuY29udHJvbHMtcm93IFtjbGFzcyo9
InNwYW4iXSArIFtjbGFzcyo9InNwYW4iXSB7CisgICAgbWFyZ2luLWxlZnQ6IDIuNTY0MTAyNTY0
MTAyNTY0JTsKKyAgfQorICAucm93LWZsdWlkIC5zcGFuMTIgeworICAgIHdpZHRoOiAxMDAlOwor
ICAgICp3aWR0aDogOTkuOTQ2ODA4NTEwNjM4MjklOworICB9CisgIC5yb3ctZmx1aWQgLnNwYW4x
MSB7CisgICAgd2lkdGg6IDkxLjQ1Mjk5MTQ1Mjk5MTQ1JTsKKyAgICAqd2lkdGg6IDkxLjM5OTc5
OTk2MzYyOTc1JTsKKyAgfQorICAucm93LWZsdWlkIC5zcGFuMTAgeworICAgIHdpZHRoOiA4Mi45
MDU5ODI5MDU5ODI5MSU7CisgICAgKndpZHRoOiA4Mi44NTI3OTE0MTY2MjEyJTsKKyAgfQorICAu
cm93LWZsdWlkIC5zcGFuOSB7CisgICAgd2lkdGg6IDc0LjM1ODk3NDM1ODk3NDM2JTsKKyAgICAq
d2lkdGg6IDc0LjMwNTc4Mjg2OTYxMjY2JTsKKyAgfQorICAucm93LWZsdWlkIC5zcGFuOCB7Cisg
ICAgd2lkdGg6IDY1LjgxMTk2NTgxMTk2NTgyJTsKKyAgICAqd2lkdGg6IDY1Ljc1ODc3NDMyMjYw
NDExJTsKKyAgfQorICAucm93LWZsdWlkIC5zcGFuNyB7CisgICAgd2lkdGg6IDU3LjI2NDk1NzI2
NDk1NzI2JTsKKyAgICAqd2lkdGg6IDU3LjIxMTc2NTc3NTU5NTU2JTsKKyAgfQorICAucm93LWZs
dWlkIC5zcGFuNiB7CisgICAgd2lkdGg6IDQ4LjcxNzk0ODcxNzk0ODcxNSU7CisgICAgKndpZHRo
OiA0OC42NjQ3NTcyMjg1ODcwMTQlOworICB9CisgIC5yb3ctZmx1aWQgLnNwYW41IHsKKyAgICB3
aWR0aDogNDAuMTcwOTQwMTcwOTQwMTclOworICAgICp3aWR0aDogNDAuMTE3NzQ4NjgxNTc4NDcl
OworICB9CisgIC5yb3ctZmx1aWQgLnNwYW40IHsKKyAgICB3aWR0aDogMzEuNjIzOTMxNjIzOTMx
NjI1JTsKKyAgICAqd2lkdGg6IDMxLjU3MDc0MDEzNDU2OTkyNCU7CisgIH0KKyAgLnJvdy1mbHVp
ZCAuc3BhbjMgeworICAgIHdpZHRoOiAyMy4wNzY5MjMwNzY5MjMwNzclOworICAgICp3aWR0aDog
MjMuMDIzNzMxNTg3NTYxMzc1JTsKKyAgfQorICAucm93LWZsdWlkIC5zcGFuMiB7CisgICAgd2lk
dGg6IDE0LjUyOTkxNDUyOTkxNDUzJTsKKyAgICAqd2lkdGg6IDE0LjQ3NjcyMzA0MDU1MjgyOCU7
CisgIH0KKyAgLnJvdy1mbHVpZCAuc3BhbjEgeworICAgIHdpZHRoOiA1Ljk4MjkwNTk4MjkwNTk4
MyU7CisgICAgKndpZHRoOiA1LjkyOTcxNDQ5MzU0NDI4MSU7CisgIH0KKyAgLnJvdy1mbHVpZCAu
b2Zmc2V0MTIgeworICAgIG1hcmdpbi1sZWZ0OiAxMDUuMTI4MjA1MTI4MjA1MTIlOworICAgICpt
YXJnaW4tbGVmdDogMTA1LjAyMTgyMjE0OTQ4MTcxJTsKKyAgfQorICAucm93LWZsdWlkIC5vZmZz
ZXQxMjpmaXJzdC1jaGlsZCB7CisgICAgbWFyZ2luLWxlZnQ6IDEwMi41NjQxMDI1NjQxMDI1NyU7
CisgICAgKm1hcmdpbi1sZWZ0OiAxMDIuNDU3NzE5NTg1Mzc5MTUlOworICB9CisgIC5yb3ctZmx1
aWQgLm9mZnNldDExIHsKKyAgICBtYXJnaW4tbGVmdDogOTYuNTgxMTk2NTgxMTk2NTglOworICAg
ICptYXJnaW4tbGVmdDogOTYuNDc0ODEzNjAyNDczMTYlOworICB9CisgIC5yb3ctZmx1aWQgLm9m
ZnNldDExOmZpcnN0LWNoaWxkIHsKKyAgICBtYXJnaW4tbGVmdDogOTQuMDE3MDk0MDE3MDk0MDIl
OworICAgICptYXJnaW4tbGVmdDogOTMuOTEwNzExMDM4MzcwNjElOworICB9CisgIC5yb3ctZmx1
aWQgLm9mZnNldDEwIHsKKyAgICBtYXJnaW4tbGVmdDogODguMDM0MTg4MDM0MTg4MDMlOworICAg
ICptYXJnaW4tbGVmdDogODcuOTI3ODA1MDU1NDY0NjIlOworICB9CisgIC5yb3ctZmx1aWQgLm9m
ZnNldDEwOmZpcnN0LWNoaWxkIHsKKyAgICBtYXJnaW4tbGVmdDogODUuNDcwMDg1NDcwMDg1NDgl
OworICAgICptYXJnaW4tbGVmdDogODUuMzYzNzAyNDkxMzYyMDYlOworICB9CisgIC5yb3ctZmx1
aWQgLm9mZnNldDkgeworICAgIG1hcmdpbi1sZWZ0OiA3OS40ODcxNzk0ODcxNzk0OSU7CisgICAg
Km1hcmdpbi1sZWZ0OiA3OS4zODA3OTY1MDg0NTYwNyU7CisgIH0KKyAgLnJvdy1mbHVpZCAub2Zm
c2V0OTpmaXJzdC1jaGlsZCB7CisgICAgbWFyZ2luLWxlZnQ6IDc2LjkyMzA3NjkyMzA3NjkzJTsK
KyAgICAqbWFyZ2luLWxlZnQ6IDc2LjgxNjY5Mzk0NDM1MzUyJTsKKyAgfQorICAucm93LWZsdWlk
IC5vZmZzZXQ4IHsKKyAgICBtYXJnaW4tbGVmdDogNzAuOTQwMTcwOTQwMTcwOTQlOworICAgICpt
YXJnaW4tbGVmdDogNzAuODMzNzg3OTYxNDQ3NTMlOworICB9CisgIC5yb3ctZmx1aWQgLm9mZnNl
dDg6Zmlyc3QtY2hpbGQgeworICAgIG1hcmdpbi1sZWZ0OiA2OC4zNzYwNjgzNzYwNjgzOSU7Cisg
ICAgKm1hcmdpbi1sZWZ0OiA2OC4yNjk2ODUzOTczNDQ5NyU7CisgIH0KKyAgLnJvdy1mbHVpZCAu
b2Zmc2V0NyB7CisgICAgbWFyZ2luLWxlZnQ6IDYyLjM5MzE2MjM5MzE2MjM4NSU7CisgICAgKm1h
cmdpbi1sZWZ0OiA2Mi4yODY3Nzk0MTQ0Mzg5OSU7CisgIH0KKyAgLnJvdy1mbHVpZCAub2Zmc2V0
NzpmaXJzdC1jaGlsZCB7CisgICAgbWFyZ2luLWxlZnQ6IDU5LjgyOTA1OTgyOTA1OTgyJTsKKyAg
ICAqbWFyZ2luLWxlZnQ6IDU5LjcyMjY3Njg1MDMzNjQyJTsKKyAgfQorICAucm93LWZsdWlkIC5v
ZmZzZXQ2IHsKKyAgICBtYXJnaW4tbGVmdDogNTMuODQ2MTUzODQ2MTUzODQlOworICAgICptYXJn
aW4tbGVmdDogNTMuNzM5NzcwODY3NDMwNDQ0JTsKKyAgfQorICAucm93LWZsdWlkIC5vZmZzZXQ2
OmZpcnN0LWNoaWxkIHsKKyAgICBtYXJnaW4tbGVmdDogNTEuMjgyMDUxMjgyMDUxMjglOworICAg
ICptYXJnaW4tbGVmdDogNTEuMTc1NjY4MzAzMzI3ODc1JTsKKyAgfQorICAucm93LWZsdWlkIC5v
ZmZzZXQ1IHsKKyAgICBtYXJnaW4tbGVmdDogNDUuMjk5MTQ1Mjk5MTQ1Mjk1JTsKKyAgICAqbWFy
Z2luLWxlZnQ6IDQ1LjE5Mjc2MjMyMDQyMTklOworICB9CisgIC5yb3ctZmx1aWQgLm9mZnNldDU6
Zmlyc3QtY2hpbGQgeworICAgIG1hcmdpbi1sZWZ0OiA0Mi43MzUwNDI3MzUwNDI3MyU7CisgICAg
Km1hcmdpbi1sZWZ0OiA0Mi42Mjg2NTk3NTYzMTkzMyU7CisgIH0KKyAgLnJvdy1mbHVpZCAub2Zm
c2V0NCB7CisgICAgbWFyZ2luLWxlZnQ6IDM2Ljc1MjEzNjc1MjEzNjc1JTsKKyAgICAqbWFyZ2lu
LWxlZnQ6IDM2LjY0NTc1Mzc3MzQxMzM1NCU7CisgIH0KKyAgLnJvdy1mbHVpZCAub2Zmc2V0NDpm
aXJzdC1jaGlsZCB7CisgICAgbWFyZ2luLWxlZnQ6IDM0LjE4ODAzNDE4ODAzNDE5JTsKKyAgICAq
bWFyZ2luLWxlZnQ6IDM0LjA4MTY1MTIwOTMxMDc4NSU7CisgIH0KKyAgLnJvdy1mbHVpZCAub2Zm
c2V0MyB7CisgICAgbWFyZ2luLWxlZnQ6IDI4LjIwNTEyODIwNTEyODIwNCU7CisgICAgKm1hcmdp
bi1sZWZ0OiAyOC4wOTg3NDUyMjY0MDQ4JTsKKyAgfQorICAucm93LWZsdWlkIC5vZmZzZXQzOmZp
cnN0LWNoaWxkIHsKKyAgICBtYXJnaW4tbGVmdDogMjUuNjQxMDI1NjQxMDI1NjQyJTsKKyAgICAq
bWFyZ2luLWxlZnQ6IDI1LjUzNDY0MjY2MjMwMjI0JTsKKyAgfQorICAucm93LWZsdWlkIC5vZmZz
ZXQyIHsKKyAgICBtYXJnaW4tbGVmdDogMTkuNjU4MTE5NjU4MTE5NjYlOworICAgICptYXJnaW4t
bGVmdDogMTkuNTUxNzM2Njc5Mzk2MjU3JTsKKyAgfQorICAucm93LWZsdWlkIC5vZmZzZXQyOmZp
cnN0LWNoaWxkIHsKKyAgICBtYXJnaW4tbGVmdDogMTcuMDk0MDE3MDk0MDE3MDk0JTsKKyAgICAq
bWFyZ2luLWxlZnQ6IDE2Ljk4NzYzNDExNTI5MzY5JTsKKyAgfQorICAucm93LWZsdWlkIC5vZmZz
ZXQxIHsKKyAgICBtYXJnaW4tbGVmdDogMTEuMTExMTExMTExMTExMTElOworICAgICptYXJnaW4t
bGVmdDogMTEuMDA0NzI4MTMyMzg3NzA4JTsKKyAgfQorICAucm93LWZsdWlkIC5vZmZzZXQxOmZp
cnN0LWNoaWxkIHsKKyAgICBtYXJnaW4tbGVmdDogOC41NDcwMDg1NDcwMDg1NDclOworICAgICpt
YXJnaW4tbGVmdDogOC40NDA2MjU1NjgyODUxNDIlOworICB9CisgIGlucHV0LAorICB0ZXh0YXJl
YSwKKyAgLnVuZWRpdGFibGUtaW5wdXQgeworICAgIG1hcmdpbi1sZWZ0OiAwOworICB9CisgIC5j
b250cm9scy1yb3cgW2NsYXNzKj0ic3BhbiJdICsgW2NsYXNzKj0ic3BhbiJdIHsKKyAgICBtYXJn
aW4tbGVmdDogMzBweDsKKyAgfQorICBpbnB1dC5zcGFuMTIsCisgIHRleHRhcmVhLnNwYW4xMiwK
KyAgLnVuZWRpdGFibGUtaW5wdXQuc3BhbjEyIHsKKyAgICB3aWR0aDogMTE1NnB4OworICB9Cisg
IGlucHV0LnNwYW4xMSwKKyAgdGV4dGFyZWEuc3BhbjExLAorICAudW5lZGl0YWJsZS1pbnB1dC5z
cGFuMTEgeworICAgIHdpZHRoOiAxMDU2cHg7CisgIH0KKyAgaW5wdXQuc3BhbjEwLAorICB0ZXh0
YXJlYS5zcGFuMTAsCisgIC51bmVkaXRhYmxlLWlucHV0LnNwYW4xMCB7CisgICAgd2lkdGg6IDk1
NnB4OworICB9CisgIGlucHV0LnNwYW45LAorICB0ZXh0YXJlYS5zcGFuOSwKKyAgLnVuZWRpdGFi
bGUtaW5wdXQuc3BhbjkgeworICAgIHdpZHRoOiA4NTZweDsKKyAgfQorICBpbnB1dC5zcGFuOCwK
KyAgdGV4dGFyZWEuc3BhbjgsCisgIC51bmVkaXRhYmxlLWlucHV0LnNwYW44IHsKKyAgICB3aWR0
aDogNzU2cHg7CisgIH0KKyAgaW5wdXQuc3BhbjcsCisgIHRleHRhcmVhLnNwYW43LAorICAudW5l
ZGl0YWJsZS1pbnB1dC5zcGFuNyB7CisgICAgd2lkdGg6IDY1NnB4OworICB9CisgIGlucHV0LnNw
YW42LAorICB0ZXh0YXJlYS5zcGFuNiwKKyAgLnVuZWRpdGFibGUtaW5wdXQuc3BhbjYgeworICAg
IHdpZHRoOiA1NTZweDsKKyAgfQorICBpbnB1dC5zcGFuNSwKKyAgdGV4dGFyZWEuc3BhbjUsCisg
IC51bmVkaXRhYmxlLWlucHV0LnNwYW41IHsKKyAgICB3aWR0aDogNDU2cHg7CisgIH0KKyAgaW5w
dXQuc3BhbjQsCisgIHRleHRhcmVhLnNwYW40LAorICAudW5lZGl0YWJsZS1pbnB1dC5zcGFuNCB7
CisgICAgd2lkdGg6IDM1NnB4OworICB9CisgIGlucHV0LnNwYW4zLAorICB0ZXh0YXJlYS5zcGFu
MywKKyAgLnVuZWRpdGFibGUtaW5wdXQuc3BhbjMgeworICAgIHdpZHRoOiAyNTZweDsKKyAgfQor
ICBpbnB1dC5zcGFuMiwKKyAgdGV4dGFyZWEuc3BhbjIsCisgIC51bmVkaXRhYmxlLWlucHV0LnNw
YW4yIHsKKyAgICB3aWR0aDogMTU2cHg7CisgIH0KKyAgaW5wdXQuc3BhbjEsCisgIHRleHRhcmVh
LnNwYW4xLAorICAudW5lZGl0YWJsZS1pbnB1dC5zcGFuMSB7CisgICAgd2lkdGg6IDU2cHg7Cisg
IH0KKyAgLnRodW1ibmFpbHMgeworICAgIG1hcmdpbi1sZWZ0OiAtMzBweDsKKyAgfQorICAudGh1
bWJuYWlscyA+IGxpIHsKKyAgICBtYXJnaW4tbGVmdDogMzBweDsKKyAgfQorICAucm93LWZsdWlk
IC50aHVtYm5haWxzIHsKKyAgICBtYXJnaW4tbGVmdDogMDsKKyAgfQorfQorCitAbWVkaWEgKG1p
bi13aWR0aDogNzY4cHgpIGFuZCAobWF4LXdpZHRoOiA5NzlweCkgeworICAucm93IHsKKyAgICBt
YXJnaW4tbGVmdDogLTIwcHg7CisgICAgKnpvb206IDE7CisgIH0KKyAgLnJvdzpiZWZvcmUsCisg
IC5yb3c6YWZ0ZXIgeworICAgIGRpc3BsYXk6IHRhYmxlOworICAgIGxpbmUtaGVpZ2h0OiAwOwor
ICAgIGNvbnRlbnQ6ICIiOworICB9CisgIC5yb3c6YWZ0ZXIgeworICAgIGNsZWFyOiBib3RoOwor
ICB9CisgIFtjbGFzcyo9InNwYW4iXSB7CisgICAgZmxvYXQ6IGxlZnQ7CisgICAgbWluLWhlaWdo
dDogMXB4OworICAgIG1hcmdpbi1sZWZ0OiAyMHB4OworICB9CisgIC5jb250YWluZXIsCisgIC5u
YXZiYXItc3RhdGljLXRvcCAuY29udGFpbmVyLAorICAubmF2YmFyLWZpeGVkLXRvcCAuY29udGFp
bmVyLAorICAubmF2YmFyLWZpeGVkLWJvdHRvbSAuY29udGFpbmVyIHsKKyAgICB3aWR0aDogNzI0
cHg7CisgIH0KKyAgLnNwYW4xMiB7CisgICAgd2lkdGg6IDcyNHB4OworICB9CisgIC5zcGFuMTEg
eworICAgIHdpZHRoOiA2NjJweDsKKyAgfQorICAuc3BhbjEwIHsKKyAgICB3aWR0aDogNjAwcHg7
CisgIH0KKyAgLnNwYW45IHsKKyAgICB3aWR0aDogNTM4cHg7CisgIH0KKyAgLnNwYW44IHsKKyAg
ICB3aWR0aDogNDc2cHg7CisgIH0KKyAgLnNwYW43IHsKKyAgICB3aWR0aDogNDE0cHg7CisgIH0K
KyAgLnNwYW42IHsKKyAgICB3aWR0aDogMzUycHg7CisgIH0KKyAgLnNwYW41IHsKKyAgICB3aWR0
aDogMjkwcHg7CisgIH0KKyAgLnNwYW40IHsKKyAgICB3aWR0aDogMjI4cHg7CisgIH0KKyAgLnNw
YW4zIHsKKyAgICB3aWR0aDogMTY2cHg7CisgIH0KKyAgLnNwYW4yIHsKKyAgICB3aWR0aDogMTA0
cHg7CisgIH0KKyAgLnNwYW4xIHsKKyAgICB3aWR0aDogNDJweDsKKyAgfQorICAub2Zmc2V0MTIg
eworICAgIG1hcmdpbi1sZWZ0OiA3NjRweDsKKyAgfQorICAub2Zmc2V0MTEgeworICAgIG1hcmdp
bi1sZWZ0OiA3MDJweDsKKyAgfQorICAub2Zmc2V0MTAgeworICAgIG1hcmdpbi1sZWZ0OiA2NDBw
eDsKKyAgfQorICAub2Zmc2V0OSB7CisgICAgbWFyZ2luLWxlZnQ6IDU3OHB4OworICB9CisgIC5v
ZmZzZXQ4IHsKKyAgICBtYXJnaW4tbGVmdDogNTE2cHg7CisgIH0KKyAgLm9mZnNldDcgeworICAg
IG1hcmdpbi1sZWZ0OiA0NTRweDsKKyAgfQorICAub2Zmc2V0NiB7CisgICAgbWFyZ2luLWxlZnQ6
IDM5MnB4OworICB9CisgIC5vZmZzZXQ1IHsKKyAgICBtYXJnaW4tbGVmdDogMzMwcHg7CisgIH0K
KyAgLm9mZnNldDQgeworICAgIG1hcmdpbi1sZWZ0OiAyNjhweDsKKyAgfQorICAub2Zmc2V0MyB7
CisgICAgbWFyZ2luLWxlZnQ6IDIwNnB4OworICB9CisgIC5vZmZzZXQyIHsKKyAgICBtYXJnaW4t
bGVmdDogMTQ0cHg7CisgIH0KKyAgLm9mZnNldDEgeworICAgIG1hcmdpbi1sZWZ0OiA4MnB4Owor
ICB9CisgIC5yb3ctZmx1aWQgeworICAgIHdpZHRoOiAxMDAlOworICAgICp6b29tOiAxOworICB9
CisgIC5yb3ctZmx1aWQ6YmVmb3JlLAorICAucm93LWZsdWlkOmFmdGVyIHsKKyAgICBkaXNwbGF5
OiB0YWJsZTsKKyAgICBsaW5lLWhlaWdodDogMDsKKyAgICBjb250ZW50OiAiIjsKKyAgfQorICAu
cm93LWZsdWlkOmFmdGVyIHsKKyAgICBjbGVhcjogYm90aDsKKyAgfQorICAucm93LWZsdWlkIFtj
bGFzcyo9InNwYW4iXSB7CisgICAgZGlzcGxheTogYmxvY2s7CisgICAgZmxvYXQ6IGxlZnQ7Cisg
ICAgd2lkdGg6IDEwMCU7CisgICAgbWluLWhlaWdodDogMzBweDsKKyAgICBtYXJnaW4tbGVmdDog
Mi43NjI0MzA5MzkyMjY1MTk0JTsKKyAgICAqbWFyZ2luLWxlZnQ6IDIuNzA5MjM5NDQ5ODY0ODE3
JTsKKyAgICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7CisgICAgICAgLW1vei1ib3gt
c2l6aW5nOiBib3JkZXItYm94OworICAgICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsK
KyAgfQorICAucm93LWZsdWlkIFtjbGFzcyo9InNwYW4iXTpmaXJzdC1jaGlsZCB7CisgICAgbWFy
Z2luLWxlZnQ6IDA7CisgIH0KKyAgLnJvdy1mbHVpZCAuY29udHJvbHMtcm93IFtjbGFzcyo9InNw
YW4iXSArIFtjbGFzcyo9InNwYW4iXSB7CisgICAgbWFyZ2luLWxlZnQ6IDIuNzYyNDMwOTM5MjI2
NTE5NCU7CisgIH0KKyAgLnJvdy1mbHVpZCAuc3BhbjEyIHsKKyAgICB3aWR0aDogMTAwJTsKKyAg
ICAqd2lkdGg6IDk5Ljk0NjgwODUxMDYzODI5JTsKKyAgfQorICAucm93LWZsdWlkIC5zcGFuMTEg
eworICAgIHdpZHRoOiA5MS40MzY0NjQwODgzOTc3OCU7CisgICAgKndpZHRoOiA5MS4zODMyNzI1
OTkwMzYwOCU7CisgIH0KKyAgLnJvdy1mbHVpZCAuc3BhbjEwIHsKKyAgICB3aWR0aDogODIuODcy
OTI4MTc2Nzk1NTglOworICAgICp3aWR0aDogODIuODE5NzM2Njg3NDMzODclOworICB9CisgIC5y
b3ctZmx1aWQgLnNwYW45IHsKKyAgICB3aWR0aDogNzQuMzA5MzkyMjY1MTkzMzclOworICAgICp3
aWR0aDogNzQuMjU2MjAwNzc1ODMxNjYlOworICB9CisgIC5yb3ctZmx1aWQgLnNwYW44IHsKKyAg
ICB3aWR0aDogNjUuNzQ1ODU2MzUzNTkxMTclOworICAgICp3aWR0aDogNjUuNjkyNjY0ODY0MjI5
NDYlOworICB9CisgIC5yb3ctZmx1aWQgLnNwYW43IHsKKyAgICB3aWR0aDogNTcuMTgyMzIwNDQx
OTg4OTUlOworICAgICp3aWR0aDogNTcuMTI5MTI4OTUyNjI3MjUlOworICB9CisgIC5yb3ctZmx1
aWQgLnNwYW42IHsKKyAgICB3aWR0aDogNDguNjE4Nzg0NTMwMzg2NzQlOworICAgICp3aWR0aDog
NDguNTY1NTkzMDQxMDI1MDQlOworICB9CisgIC5yb3ctZmx1aWQgLnNwYW41IHsKKyAgICB3aWR0
aDogNDAuMDU1MjQ4NjE4Nzg0NTMlOworICAgICp3aWR0aDogNDAuMDAyMDU3MTI5NDIyODMlOwor
ICB9CisgIC5yb3ctZmx1aWQgLnNwYW40IHsKKyAgICB3aWR0aDogMzEuNDkxNzEyNzA3MTgyMzIz
JTsKKyAgICAqd2lkdGg6IDMxLjQzODUyMTIxNzgyMDYyJTsKKyAgfQorICAucm93LWZsdWlkIC5z
cGFuMyB7CisgICAgd2lkdGg6IDIyLjkyODE3Njc5NTU4MDExJTsKKyAgICAqd2lkdGg6IDIyLjg3
NDk4NTMwNjIxODQxJTsKKyAgfQorICAucm93LWZsdWlkIC5zcGFuMiB7CisgICAgd2lkdGg6IDE0
LjM2NDY0MDg4Mzk3NzklOworICAgICp3aWR0aDogMTQuMzExNDQ5Mzk0NjE2MTk5JTsKKyAgfQor
ICAucm93LWZsdWlkIC5zcGFuMSB7CisgICAgd2lkdGg6IDUuODAxMTA0OTcyMzc1NjkxJTsKKyAg
ICAqd2lkdGg6IDUuNzQ3OTEzNDgzMDEzOTg4JTsKKyAgfQorICAucm93LWZsdWlkIC5vZmZzZXQx
MiB7CisgICAgbWFyZ2luLWxlZnQ6IDEwNS41MjQ4NjE4Nzg0NTMwNCU7CisgICAgKm1hcmdpbi1s
ZWZ0OiAxMDUuNDE4NDc4ODk5NzI5NjIlOworICB9CisgIC5yb3ctZmx1aWQgLm9mZnNldDEyOmZp
cnN0LWNoaWxkIHsKKyAgICBtYXJnaW4tbGVmdDogMTAyLjc2MjQzMDkzOTIyNjUyJTsKKyAgICAq
bWFyZ2luLWxlZnQ6IDEwMi42NTYwNDc5NjA1MDMxJTsKKyAgfQorICAucm93LWZsdWlkIC5vZmZz
ZXQxMSB7CisgICAgbWFyZ2luLWxlZnQ6IDk2Ljk2MTMyNTk2Njg1MDgyJTsKKyAgICAqbWFyZ2lu
LWxlZnQ6IDk2Ljg1NDk0Mjk4ODEyNzQlOworICB9CisgIC5yb3ctZmx1aWQgLm9mZnNldDExOmZp
cnN0LWNoaWxkIHsKKyAgICBtYXJnaW4tbGVmdDogOTQuMTk4ODk1MDI3NjI0MyU7CisgICAgKm1h
cmdpbi1sZWZ0OiA5NC4wOTI1MTIwNDg5MDA4OSU7CisgIH0KKyAgLnJvdy1mbHVpZCAub2Zmc2V0
MTAgeworICAgIG1hcmdpbi1sZWZ0OiA4OC4zOTc3OTAwNTUyNDg2MiU7CisgICAgKm1hcmdpbi1s
ZWZ0OiA4OC4yOTE0MDcwNzY1MjUyJTsKKyAgfQorICAucm93LWZsdWlkIC5vZmZzZXQxMDpmaXJz
dC1jaGlsZCB7CisgICAgbWFyZ2luLWxlZnQ6IDg1LjYzNTM1OTExNjAyMjElOworICAgICptYXJn
aW4tbGVmdDogODUuNTI4OTc2MTM3Mjk4NjglOworICB9CisgIC5yb3ctZmx1aWQgLm9mZnNldDkg
eworICAgIG1hcmdpbi1sZWZ0OiA3OS44MzQyNTQxNDM2NDY0JTsKKyAgICAqbWFyZ2luLWxlZnQ6
IDc5LjcyNzg3MTE2NDkyMjk5JTsKKyAgfQorICAucm93LWZsdWlkIC5vZmZzZXQ5OmZpcnN0LWNo
aWxkIHsKKyAgICBtYXJnaW4tbGVmdDogNzcuMDcxODIzMjA0NDE5ODklOworICAgICptYXJnaW4t
bGVmdDogNzYuOTY1NDQwMjI1Njk2NDclOworICB9CisgIC5yb3ctZmx1aWQgLm9mZnNldDggewor
ICAgIG1hcmdpbi1sZWZ0OiA3MS4yNzA3MTgyMzIwNDQyJTsKKyAgICAqbWFyZ2luLWxlZnQ6IDcx
LjE2NDMzNTI1MzMyMDc5JTsKKyAgfQorICAucm93LWZsdWlkIC5vZmZzZXQ4OmZpcnN0LWNoaWxk
IHsKKyAgICBtYXJnaW4tbGVmdDogNjguNTA4Mjg3MjkyODE3NjglOworICAgICptYXJnaW4tbGVm
dDogNjguNDAxOTA0MzE0MDk0MjclOworICB9CisgIC5yb3ctZmx1aWQgLm9mZnNldDcgeworICAg
IG1hcmdpbi1sZWZ0OiA2Mi43MDcxODIzMjA0NDE5OSU7CisgICAgKm1hcmdpbi1sZWZ0OiA2Mi42
MDA3OTkzNDE3MTg1ODQlOworICB9CisgIC5yb3ctZmx1aWQgLm9mZnNldDc6Zmlyc3QtY2hpbGQg
eworICAgIG1hcmdpbi1sZWZ0OiA1OS45NDQ3NTEzODEyMTU0NyU7CisgICAgKm1hcmdpbi1sZWZ0
OiA1OS44MzgzNjg0MDI0OTIwNjUlOworICB9CisgIC5yb3ctZmx1aWQgLm9mZnNldDYgeworICAg
IG1hcmdpbi1sZWZ0OiA1NC4xNDM2NDY0MDg4Mzk3OCU7CisgICAgKm1hcmdpbi1sZWZ0OiA1NC4w
MzcyNjM0MzAxMTYzNzYlOworICB9CisgIC5yb3ctZmx1aWQgLm9mZnNldDY6Zmlyc3QtY2hpbGQg
eworICAgIG1hcmdpbi1sZWZ0OiA1MS4zODEyMTU0Njk2MTMyNiU7CisgICAgKm1hcmdpbi1sZWZ0
OiA1MS4yNzQ4MzI0OTA4ODk4NiU7CisgIH0KKyAgLnJvdy1mbHVpZCAub2Zmc2V0NSB7CisgICAg
bWFyZ2luLWxlZnQ6IDQ1LjU4MDExMDQ5NzIzNzU3JTsKKyAgICAqbWFyZ2luLWxlZnQ6IDQ1LjQ3
MzcyNzUxODUxNDE3JTsKKyAgfQorICAucm93LWZsdWlkIC5vZmZzZXQ1OmZpcnN0LWNoaWxkIHsK
KyAgICBtYXJnaW4tbGVmdDogNDIuODE3Njc5NTU4MDExMDUlOworICAgICptYXJnaW4tbGVmdDog
NDIuNzExMjk2NTc5Mjg3NjUlOworICB9CisgIC5yb3ctZmx1aWQgLm9mZnNldDQgeworICAgIG1h
cmdpbi1sZWZ0OiAzNy4wMTY1NzQ1ODU2MzUzNiU7CisgICAgKm1hcmdpbi1sZWZ0OiAzNi45MTAx
OTE2MDY5MTE5NiU7CisgIH0KKyAgLnJvdy1mbHVpZCAub2Zmc2V0NDpmaXJzdC1jaGlsZCB7Cisg
ICAgbWFyZ2luLWxlZnQ6IDM0LjI1NDE0MzY0NjQwODg0JTsKKyAgICAqbWFyZ2luLWxlZnQ6IDM0
LjE0Nzc2MDY2NzY4NTQ0JTsKKyAgfQorICAucm93LWZsdWlkIC5vZmZzZXQzIHsKKyAgICBtYXJn
aW4tbGVmdDogMjguNDUzMDM4Njc0MDMzMTUlOworICAgICptYXJnaW4tbGVmdDogMjguMzQ2NjU1
Njk1MzA5NzQ2JTsKKyAgfQorICAucm93LWZsdWlkIC5vZmZzZXQzOmZpcnN0LWNoaWxkIHsKKyAg
ICBtYXJnaW4tbGVmdDogMjUuNjkwNjA3NzM0ODA2NjMlOworICAgICptYXJnaW4tbGVmdDogMjUu
NTg0MjI0NzU2MDgzMjI3JTsKKyAgfQorICAucm93LWZsdWlkIC5vZmZzZXQyIHsKKyAgICBtYXJn
aW4tbGVmdDogMTkuODg5NTAyNzYyNDMwOTQlOworICAgICptYXJnaW4tbGVmdDogMTkuNzgzMTE5
NzgzNzA3NTM3JTsKKyAgfQorICAucm93LWZsdWlkIC5vZmZzZXQyOmZpcnN0LWNoaWxkIHsKKyAg
ICBtYXJnaW4tbGVmdDogMTcuMTI3MDcxODIzMjA0NDIlOworICAgICptYXJnaW4tbGVmdDogMTcu
MDIwNjg4ODQ0NDgxMDIlOworICB9CisgIC5yb3ctZmx1aWQgLm9mZnNldDEgeworICAgIG1hcmdp
bi1sZWZ0OiAxMS4zMjU5NjY4NTA4Mjg3MyU7CisgICAgKm1hcmdpbi1sZWZ0OiAxMS4yMTk1ODM4
NzIxMDUzMjUlOworICB9CisgIC5yb3ctZmx1aWQgLm9mZnNldDE6Zmlyc3QtY2hpbGQgeworICAg
IG1hcmdpbi1sZWZ0OiA4LjU2MzUzNTkxMTYwMjIxJTsKKyAgICAqbWFyZ2luLWxlZnQ6IDguNDU3
MTUyOTMyODc4ODA2JTsKKyAgfQorICBpbnB1dCwKKyAgdGV4dGFyZWEsCisgIC51bmVkaXRhYmxl
LWlucHV0IHsKKyAgICBtYXJnaW4tbGVmdDogMDsKKyAgfQorICAuY29udHJvbHMtcm93IFtjbGFz
cyo9InNwYW4iXSArIFtjbGFzcyo9InNwYW4iXSB7CisgICAgbWFyZ2luLWxlZnQ6IDIwcHg7Cisg
IH0KKyAgaW5wdXQuc3BhbjEyLAorICB0ZXh0YXJlYS5zcGFuMTIsCisgIC51bmVkaXRhYmxlLWlu
cHV0LnNwYW4xMiB7CisgICAgd2lkdGg6IDcxMHB4OworICB9CisgIGlucHV0LnNwYW4xMSwKKyAg
dGV4dGFyZWEuc3BhbjExLAorICAudW5lZGl0YWJsZS1pbnB1dC5zcGFuMTEgeworICAgIHdpZHRo
OiA2NDhweDsKKyAgfQorICBpbnB1dC5zcGFuMTAsCisgIHRleHRhcmVhLnNwYW4xMCwKKyAgLnVu
ZWRpdGFibGUtaW5wdXQuc3BhbjEwIHsKKyAgICB3aWR0aDogNTg2cHg7CisgIH0KKyAgaW5wdXQu
c3BhbjksCisgIHRleHRhcmVhLnNwYW45LAorICAudW5lZGl0YWJsZS1pbnB1dC5zcGFuOSB7Cisg
ICAgd2lkdGg6IDUyNHB4OworICB9CisgIGlucHV0LnNwYW44LAorICB0ZXh0YXJlYS5zcGFuOCwK
KyAgLnVuZWRpdGFibGUtaW5wdXQuc3BhbjggeworICAgIHdpZHRoOiA0NjJweDsKKyAgfQorICBp
bnB1dC5zcGFuNywKKyAgdGV4dGFyZWEuc3BhbjcsCisgIC51bmVkaXRhYmxlLWlucHV0LnNwYW43
IHsKKyAgICB3aWR0aDogNDAwcHg7CisgIH0KKyAgaW5wdXQuc3BhbjYsCisgIHRleHRhcmVhLnNw
YW42LAorICAudW5lZGl0YWJsZS1pbnB1dC5zcGFuNiB7CisgICAgd2lkdGg6IDMzOHB4OworICB9
CisgIGlucHV0LnNwYW41LAorICB0ZXh0YXJlYS5zcGFuNSwKKyAgLnVuZWRpdGFibGUtaW5wdXQu
c3BhbjUgeworICAgIHdpZHRoOiAyNzZweDsKKyAgfQorICBpbnB1dC5zcGFuNCwKKyAgdGV4dGFy
ZWEuc3BhbjQsCisgIC51bmVkaXRhYmxlLWlucHV0LnNwYW40IHsKKyAgICB3aWR0aDogMjE0cHg7
CisgIH0KKyAgaW5wdXQuc3BhbjMsCisgIHRleHRhcmVhLnNwYW4zLAorICAudW5lZGl0YWJsZS1p
bnB1dC5zcGFuMyB7CisgICAgd2lkdGg6IDE1MnB4OworICB9CisgIGlucHV0LnNwYW4yLAorICB0
ZXh0YXJlYS5zcGFuMiwKKyAgLnVuZWRpdGFibGUtaW5wdXQuc3BhbjIgeworICAgIHdpZHRoOiA5
MHB4OworICB9CisgIGlucHV0LnNwYW4xLAorICB0ZXh0YXJlYS5zcGFuMSwKKyAgLnVuZWRpdGFi
bGUtaW5wdXQuc3BhbjEgeworICAgIHdpZHRoOiAyOHB4OworICB9Cit9CisKK0BtZWRpYSAobWF4
LXdpZHRoOiA3NjdweCkgeworICBib2R5IHsKKyAgICBwYWRkaW5nLXJpZ2h0OiAyMHB4OworICAg
IHBhZGRpbmctbGVmdDogMjBweDsKKyAgfQorICAubmF2YmFyLWZpeGVkLXRvcCwKKyAgLm5hdmJh
ci1maXhlZC1ib3R0b20sCisgIC5uYXZiYXItc3RhdGljLXRvcCB7CisgICAgbWFyZ2luLXJpZ2h0
OiAtMjBweDsKKyAgICBtYXJnaW4tbGVmdDogLTIwcHg7CisgIH0KKyAgLmNvbnRhaW5lci1mbHVp
ZCB7CisgICAgcGFkZGluZzogMDsKKyAgfQorICAuZGwtaG9yaXpvbnRhbCBkdCB7CisgICAgZmxv
YXQ6IG5vbmU7CisgICAgd2lkdGg6IGF1dG87CisgICAgY2xlYXI6IG5vbmU7CisgICAgdGV4dC1h
bGlnbjogbGVmdDsKKyAgfQorICAuZGwtaG9yaXpvbnRhbCBkZCB7CisgICAgbWFyZ2luLWxlZnQ6
IDA7CisgIH0KKyAgLmNvbnRhaW5lciB7CisgICAgd2lkdGg6IGF1dG87CisgIH0KKyAgLnJvdy1m
bHVpZCB7CisgICAgd2lkdGg6IDEwMCU7CisgIH0KKyAgLnJvdywKKyAgLnRodW1ibmFpbHMgewor
ICAgIG1hcmdpbi1sZWZ0OiAwOworICB9CisgIC50aHVtYm5haWxzID4gbGkgeworICAgIGZsb2F0
OiBub25lOworICAgIG1hcmdpbi1sZWZ0OiAwOworICB9CisgIFtjbGFzcyo9InNwYW4iXSwKKyAg
LnVuZWRpdGFibGUtaW5wdXRbY2xhc3MqPSJzcGFuIl0sCisgIC5yb3ctZmx1aWQgW2NsYXNzKj0i
c3BhbiJdIHsKKyAgICBkaXNwbGF5OiBibG9jazsKKyAgICBmbG9hdDogbm9uZTsKKyAgICB3aWR0
aDogMTAwJTsKKyAgICBtYXJnaW4tbGVmdDogMDsKKyAgICAtd2Via2l0LWJveC1zaXppbmc6IGJv
cmRlci1ib3g7CisgICAgICAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94OworICAgICAgICAg
ICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKKyAgfQorICAuc3BhbjEyLAorICAucm93LWZsdWlk
IC5zcGFuMTIgeworICAgIHdpZHRoOiAxMDAlOworICAgIC13ZWJraXQtYm94LXNpemluZzogYm9y
ZGVyLWJveDsKKyAgICAgICAtbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7CisgICAgICAgICAg
ICBib3gtc2l6aW5nOiBib3JkZXItYm94OworICB9CisgIC5yb3ctZmx1aWQgW2NsYXNzKj0ib2Zm
c2V0Il06Zmlyc3QtY2hpbGQgeworICAgIG1hcmdpbi1sZWZ0OiAwOworICB9CisgIC5pbnB1dC1s
YXJnZSwKKyAgLmlucHV0LXhsYXJnZSwKKyAgLmlucHV0LXh4bGFyZ2UsCisgIGlucHV0W2NsYXNz
Kj0ic3BhbiJdLAorICBzZWxlY3RbY2xhc3MqPSJzcGFuIl0sCisgIHRleHRhcmVhW2NsYXNzKj0i
c3BhbiJdLAorICAudW5lZGl0YWJsZS1pbnB1dCB7CisgICAgZGlzcGxheTogYmxvY2s7CisgICAg
d2lkdGg6IDEwMCU7CisgICAgbWluLWhlaWdodDogMzBweDsKKyAgICAtd2Via2l0LWJveC1zaXpp
bmc6IGJvcmRlci1ib3g7CisgICAgICAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94OworICAg
ICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKKyAgfQorICAuaW5wdXQtcHJlcGVuZCBp
bnB1dCwKKyAgLmlucHV0LWFwcGVuZCBpbnB1dCwKKyAgLmlucHV0LXByZXBlbmQgaW5wdXRbY2xh
c3MqPSJzcGFuIl0sCisgIC5pbnB1dC1hcHBlbmQgaW5wdXRbY2xhc3MqPSJzcGFuIl0geworICAg
IGRpc3BsYXk6IGlubGluZS1ibG9jazsKKyAgICB3aWR0aDogYXV0bzsKKyAgfQorICAuY29udHJv
bHMtcm93IFtjbGFzcyo9InNwYW4iXSArIFtjbGFzcyo9InNwYW4iXSB7CisgICAgbWFyZ2luLWxl
ZnQ6IDA7CisgIH0KKyAgLm1vZGFsIHsKKyAgICBwb3NpdGlvbjogZml4ZWQ7CisgICAgdG9wOiAy
MHB4OworICAgIHJpZ2h0OiAyMHB4OworICAgIGxlZnQ6IDIwcHg7CisgICAgd2lkdGg6IGF1dG87
CisgICAgbWFyZ2luOiAwOworICB9CisgIC5tb2RhbC5mYWRlIHsKKyAgICB0b3A6IC0xMDBweDsK
KyAgfQorICAubW9kYWwuZmFkZS5pbiB7CisgICAgdG9wOiAyMHB4OworICB9Cit9CisKK0BtZWRp
YSAobWF4LXdpZHRoOiA0ODBweCkgeworICAubmF2LWNvbGxhcHNlIHsKKyAgICAtd2Via2l0LXRy
YW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMCwgMCk7CisgIH0KKyAgLnBhZ2UtaGVhZGVyIGgxIHNt
YWxsIHsKKyAgICBkaXNwbGF5OiBibG9jazsKKyAgICBsaW5lLWhlaWdodDogMjBweDsKKyAgfQor
ICBpbnB1dFt0eXBlPSJjaGVja2JveCJdLAorICBpbnB1dFt0eXBlPSJyYWRpbyJdIHsKKyAgICBi
b3JkZXI6IDFweCBzb2xpZCAjY2NjOworICB9CisgIC5mb3JtLWhvcml6b250YWwgLmNvbnRyb2wt
bGFiZWwgeworICAgIGZsb2F0OiBub25lOworICAgIHdpZHRoOiBhdXRvOworICAgIHBhZGRpbmct
dG9wOiAwOworICAgIHRleHQtYWxpZ246IGxlZnQ7CisgIH0KKyAgLmZvcm0taG9yaXpvbnRhbCAu
Y29udHJvbHMgeworICAgIG1hcmdpbi1sZWZ0OiAwOworICB9CisgIC5mb3JtLWhvcml6b250YWwg
LmNvbnRyb2wtbGlzdCB7CisgICAgcGFkZGluZy10b3A6IDA7CisgIH0KKyAgLmZvcm0taG9yaXpv
bnRhbCAuZm9ybS1hY3Rpb25zIHsKKyAgICBwYWRkaW5nLXJpZ2h0OiAxMHB4OworICAgIHBhZGRp
bmctbGVmdDogMTBweDsKKyAgfQorICAubWVkaWEgLnB1bGwtbGVmdCwKKyAgLm1lZGlhIC5wdWxs
LXJpZ2h0IHsKKyAgICBkaXNwbGF5OiBibG9jazsKKyAgICBmbG9hdDogbm9uZTsKKyAgICBtYXJn
aW4tYm90dG9tOiAxMHB4OworICB9CisgIC5tZWRpYS1vYmplY3QgeworICAgIG1hcmdpbi1yaWdo
dDogMDsKKyAgICBtYXJnaW4tbGVmdDogMDsKKyAgfQorICAubW9kYWwgeworICAgIHRvcDogMTBw
eDsKKyAgICByaWdodDogMTBweDsKKyAgICBsZWZ0OiAxMHB4OworICB9CisgIC5tb2RhbC1oZWFk
ZXIgLmNsb3NlIHsKKyAgICBwYWRkaW5nOiAxMHB4OworICAgIG1hcmdpbjogLTEwcHg7CisgIH0K
KyAgLmNhcm91c2VsLWNhcHRpb24geworICAgIHBvc2l0aW9uOiBzdGF0aWM7CisgIH0KK30KKwor
QG1lZGlhIChtYXgtd2lkdGg6IDk3OXB4KSB7CisgIGJvZHkgeworICAgIHBhZGRpbmctdG9wOiAw
OworICB9CisgIC5uYXZiYXItZml4ZWQtdG9wLAorICAubmF2YmFyLWZpeGVkLWJvdHRvbSB7Cisg
ICAgcG9zaXRpb246IHN0YXRpYzsKKyAgfQorICAubmF2YmFyLWZpeGVkLXRvcCB7CisgICAgbWFy
Z2luLWJvdHRvbTogMjBweDsKKyAgfQorICAubmF2YmFyLWZpeGVkLWJvdHRvbSB7CisgICAgbWFy
Z2luLXRvcDogMjBweDsKKyAgfQorICAubmF2YmFyLWZpeGVkLXRvcCAubmF2YmFyLWlubmVyLAor
ICAubmF2YmFyLWZpeGVkLWJvdHRvbSAubmF2YmFyLWlubmVyIHsKKyAgICBwYWRkaW5nOiA1cHg7
CisgIH0KKyAgLm5hdmJhciAuY29udGFpbmVyIHsKKyAgICB3aWR0aDogYXV0bzsKKyAgICBwYWRk
aW5nOiAwOworICB9CisgIC5uYXZiYXIgLmJyYW5kIHsKKyAgICBwYWRkaW5nLXJpZ2h0OiAxMHB4
OworICAgIHBhZGRpbmctbGVmdDogMTBweDsKKyAgICBtYXJnaW46IDAgMCAwIC01cHg7CisgIH0K
KyAgLm5hdi1jb2xsYXBzZSB7CisgICAgY2xlYXI6IGJvdGg7CisgIH0KKyAgLm5hdi1jb2xsYXBz
ZSAubmF2IHsKKyAgICBmbG9hdDogbm9uZTsKKyAgICBtYXJnaW46IDAgMCAxMHB4OworICB9Cisg
IC5uYXYtY29sbGFwc2UgLm5hdiA+IGxpIHsKKyAgICBmbG9hdDogbm9uZTsKKyAgfQorICAubmF2
LWNvbGxhcHNlIC5uYXYgPiBsaSA+IGEgeworICAgIG1hcmdpbi1ib3R0b206IDJweDsKKyAgfQor
ICAubmF2LWNvbGxhcHNlIC5uYXYgPiAuZGl2aWRlci12ZXJ0aWNhbCB7CisgICAgZGlzcGxheTog
bm9uZTsKKyAgfQorICAubmF2LWNvbGxhcHNlIC5uYXYgLm5hdi1oZWFkZXIgeworICAgIGNvbG9y
OiAjNzc3Nzc3OworICAgIHRleHQtc2hhZG93OiBub25lOworICB9CisgIC5uYXYtY29sbGFwc2Ug
Lm5hdiA+IGxpID4gYSwKKyAgLm5hdi1jb2xsYXBzZSAuZHJvcGRvd24tbWVudSBhIHsKKyAgICBw
YWRkaW5nOiA5cHggMTVweDsKKyAgICBmb250LXdlaWdodDogYm9sZDsKKyAgICBjb2xvcjogIzc3
Nzc3NzsKKyAgICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDNweDsKKyAgICAgICAtbW96LWJvcmRl
ci1yYWRpdXM6IDNweDsKKyAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDsKKyAgfQorICAu
bmF2LWNvbGxhcHNlIC5idG4geworICAgIHBhZGRpbmc6IDRweCAxMHB4IDRweDsKKyAgICBmb250
LXdlaWdodDogbm9ybWFsOworICAgIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNHB4OworICAgICAg
IC1tb3otYm9yZGVyLXJhZGl1czogNHB4OworICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4
OworICB9CisgIC5uYXYtY29sbGFwc2UgLmRyb3Bkb3duLW1lbnUgbGkgKyBsaSBhIHsKKyAgICBt
YXJnaW4tYm90dG9tOiAycHg7CisgIH0KKyAgLm5hdi1jb2xsYXBzZSAubmF2ID4gbGkgPiBhOmhv
dmVyLAorICAubmF2LWNvbGxhcHNlIC5kcm9wZG93bi1tZW51IGE6aG92ZXIgeworICAgIGJhY2tn
cm91bmQtY29sb3I6ICNmMmYyZjI7CisgIH0KKyAgLm5hdmJhci1pbnZlcnNlIC5uYXYtY29sbGFw
c2UgLm5hdiA+IGxpID4gYSwKKyAgLm5hdmJhci1pbnZlcnNlIC5uYXYtY29sbGFwc2UgLmRyb3Bk
b3duLW1lbnUgYSB7CisgICAgY29sb3I6ICM5OTk5OTk7CisgIH0KKyAgLm5hdmJhci1pbnZlcnNl
IC5uYXYtY29sbGFwc2UgLm5hdiA+IGxpID4gYTpob3ZlciwKKyAgLm5hdmJhci1pbnZlcnNlIC5u
YXYtY29sbGFwc2UgLmRyb3Bkb3duLW1lbnUgYTpob3ZlciB7CisgICAgYmFja2dyb3VuZC1jb2xv
cjogIzExMTExMTsKKyAgfQorICAubmF2LWNvbGxhcHNlLmluIC5idG4tZ3JvdXAgeworICAgIHBh
ZGRpbmc6IDA7CisgICAgbWFyZ2luLXRvcDogNXB4OworICB9CisgIC5uYXYtY29sbGFwc2UgLmRy
b3Bkb3duLW1lbnUgeworICAgIHBvc2l0aW9uOiBzdGF0aWM7CisgICAgdG9wOiBhdXRvOworICAg
IGxlZnQ6IGF1dG87CisgICAgZGlzcGxheTogbm9uZTsKKyAgICBmbG9hdDogbm9uZTsKKyAgICBt
YXgtd2lkdGg6IG5vbmU7CisgICAgcGFkZGluZzogMDsKKyAgICBtYXJnaW46IDAgMTVweDsKKyAg
ICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKKyAgICBib3JkZXI6IG5vbmU7CisgICAg
LXdlYmtpdC1ib3JkZXItcmFkaXVzOiAwOworICAgICAgIC1tb3otYm9yZGVyLXJhZGl1czogMDsK
KyAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDA7CisgICAgLXdlYmtpdC1ib3gtc2hhZG93OiBu
b25lOworICAgICAgIC1tb3otYm94LXNoYWRvdzogbm9uZTsKKyAgICAgICAgICAgIGJveC1zaGFk
b3c6IG5vbmU7CisgIH0KKyAgLm5hdi1jb2xsYXBzZSAub3BlbiA+IC5kcm9wZG93bi1tZW51IHsK
KyAgICBkaXNwbGF5OiBibG9jazsKKyAgfQorICAubmF2LWNvbGxhcHNlIC5kcm9wZG93bi1tZW51
OmJlZm9yZSwKKyAgLm5hdi1jb2xsYXBzZSAuZHJvcGRvd24tbWVudTphZnRlciB7CisgICAgZGlz
cGxheTogbm9uZTsKKyAgfQorICAubmF2LWNvbGxhcHNlIC5kcm9wZG93bi1tZW51IC5kaXZpZGVy
IHsKKyAgICBkaXNwbGF5OiBub25lOworICB9CisgIC5uYXYtY29sbGFwc2UgLm5hdiA+IGxpID4g
LmRyb3Bkb3duLW1lbnU6YmVmb3JlLAorICAubmF2LWNvbGxhcHNlIC5uYXYgPiBsaSA+IC5kcm9w
ZG93bi1tZW51OmFmdGVyIHsKKyAgICBkaXNwbGF5OiBub25lOworICB9CisgIC5uYXYtY29sbGFw
c2UgLm5hdmJhci1mb3JtLAorICAubmF2LWNvbGxhcHNlIC5uYXZiYXItc2VhcmNoIHsKKyAgICBm
bG9hdDogbm9uZTsKKyAgICBwYWRkaW5nOiAxMHB4IDE1cHg7CisgICAgbWFyZ2luOiAxMHB4IDA7
CisgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNmMmYyZjI7CisgICAgYm9yZGVyLWJvdHRvbTog
MXB4IHNvbGlkICNmMmYyZjI7CisgICAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAwIDFweCAw
IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKSwgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAu
MSk7CisgICAgICAgLW1vei1ib3gtc2hhZG93OiBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUs
IDI1NSwgMC4xKSwgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7CisgICAgICAgICAg
ICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKSwgMCAx
cHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7CisgIH0KKyAgLm5hdmJhci1pbnZlcnNlIC5u
YXYtY29sbGFwc2UgLm5hdmJhci1mb3JtLAorICAubmF2YmFyLWludmVyc2UgLm5hdi1jb2xsYXBz
ZSAubmF2YmFyLXNlYXJjaCB7CisgICAgYm9yZGVyLXRvcC1jb2xvcjogIzExMTExMTsKKyAgICBi
b3JkZXItYm90dG9tLWNvbG9yOiAjMTExMTExOworICB9CisgIC5uYXZiYXIgLm5hdi1jb2xsYXBz
ZSAubmF2LnB1bGwtcmlnaHQgeworICAgIGZsb2F0OiBub25lOworICAgIG1hcmdpbi1sZWZ0OiAw
OworICB9CisgIC5uYXYtY29sbGFwc2UsCisgIC5uYXYtY29sbGFwc2UuY29sbGFwc2UgeworICAg
IGhlaWdodDogMDsKKyAgICBvdmVyZmxvdzogaGlkZGVuOworICB9CisgIC5uYXZiYXIgLmJ0bi1u
YXZiYXIgeworICAgIGRpc3BsYXk6IGJsb2NrOworICB9CisgIC5uYXZiYXItc3RhdGljIC5uYXZi
YXItaW5uZXIgeworICAgIHBhZGRpbmctcmlnaHQ6IDEwcHg7CisgICAgcGFkZGluZy1sZWZ0OiAx
MHB4OworICB9Cit9CisKK0BtZWRpYSAobWluLXdpZHRoOiA5ODBweCkgeworICAubmF2LWNvbGxh
cHNlLmNvbGxhcHNlIHsKKyAgICBoZWlnaHQ6IGF1dG8gIWltcG9ydGFudDsKKyAgICBvdmVyZmxv
dzogdmlzaWJsZSAhaW1wb3J0YW50OworICB9Cit9CkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0Rv
WW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvYm9vdHN0cmFwL2Nz
cy9ib290c3RyYXAtcmVzcG9uc2l2ZS5taW4uY3NzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNl
VGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9ib290
c3RyYXAvY3NzL2Jvb3RzdHJhcC1yZXNwb25zaXZlLm1pbi5jc3MJKHJldmlzaW9uIDApCisrKyBQ
ZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBv
bmVudHMvYm9vdHN0cmFwL2Nzcy9ib290c3RyYXAtcmVzcG9uc2l2ZS5taW4uY3NzCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsOSBAQAorLyohCisgKiBCb290c3RyYXAgUmVzcG9uc2l2ZSB2Mi4y
LjIKKyAqCisgKiBDb3B5cmlnaHQgMjAxMiBUd2l0dGVyLCBJbmMKKyAqIExpY2Vuc2VkIHVuZGVy
IHRoZSBBcGFjaGUgTGljZW5zZSB2Mi4wCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5z
ZXMvTElDRU5TRS0yLjAKKyAqCisgKiBEZXNpZ25lZCBhbmQgYnVpbHQgd2l0aCBhbGwgdGhlIGxv
dmUgaW4gdGhlIHdvcmxkIEB0d2l0dGVyIGJ5IEBtZG8gYW5kIEBmYXQuCisgKi9ALW1zLXZpZXdw
b3J0e3dpZHRoOmRldmljZS13aWR0aH0uY2xlYXJmaXh7Knpvb206MX0uY2xlYXJmaXg6YmVmb3Jl
LC5jbGVhcmZpeDphZnRlcntkaXNwbGF5OnRhYmxlO2xpbmUtaGVpZ2h0OjA7Y29udGVudDoiIn0u
Y2xlYXJmaXg6YWZ0ZXJ7Y2xlYXI6Ym90aH0uaGlkZS10ZXh0e2ZvbnQ6MC8wIGE7Y29sb3I6dHJh
bnNwYXJlbnQ7dGV4dC1zaGFkb3c6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2Jv
cmRlcjowfS5pbnB1dC1ibG9jay1sZXZlbHtkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCU7bWluLWhl
aWdodDozMHB4Oy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94Oy1tb3otYm94LXNpemluZzpi
b3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveH0uaGlkZGVue2Rpc3BsYXk6bm9uZTt2aXNp
YmlsaXR5OmhpZGRlbn0udmlzaWJsZS1waG9uZXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fS52aXNp
YmxlLXRhYmxldHtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fS5oaWRkZW4tZGVza3RvcHtkaXNwbGF5
Om5vbmUhaW1wb3J0YW50fS52aXNpYmxlLWRlc2t0b3B7ZGlzcGxheTppbmhlcml0IWltcG9ydGFu
dH1AbWVkaWEobWluLXdpZHRoOjc2OHB4KSBhbmQgKG1heC13aWR0aDo5NzlweCl7LmhpZGRlbi1k
ZXNrdG9we2Rpc3BsYXk6aW5oZXJpdCFpbXBvcnRhbnR9LnZpc2libGUtZGVza3RvcHtkaXNwbGF5
Om5vbmUhaW1wb3J0YW50fS52aXNpYmxlLXRhYmxldHtkaXNwbGF5OmluaGVyaXQhaW1wb3J0YW50
fS5oaWRkZW4tdGFibGV0e2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9fUBtZWRpYShtYXgtd2lkdGg6
NzY3cHgpey5oaWRkZW4tZGVza3RvcHtkaXNwbGF5OmluaGVyaXQhaW1wb3J0YW50fS52aXNpYmxl
LWRlc2t0b3B7ZGlzcGxheTpub25lIWltcG9ydGFudH0udmlzaWJsZS1waG9uZXtkaXNwbGF5Omlu
aGVyaXQhaW1wb3J0YW50fS5oaWRkZW4tcGhvbmV7ZGlzcGxheTpub25lIWltcG9ydGFudH19QG1l
ZGlhKG1pbi13aWR0aDoxMjAwcHgpey5yb3d7bWFyZ2luLWxlZnQ6LTMwcHg7Knpvb206MX0ucm93
OmJlZm9yZSwucm93OmFmdGVye2Rpc3BsYXk6dGFibGU7bGluZS1oZWlnaHQ6MDtjb250ZW50OiIi
fS5yb3c6YWZ0ZXJ7Y2xlYXI6Ym90aH1bY2xhc3MqPSJzcGFuIl17ZmxvYXQ6bGVmdDttaW4taGVp
Z2h0OjFweDttYXJnaW4tbGVmdDozMHB4fS5jb250YWluZXIsLm5hdmJhci1zdGF0aWMtdG9wIC5j
b250YWluZXIsLm5hdmJhci1maXhlZC10b3AgLmNvbnRhaW5lciwubmF2YmFyLWZpeGVkLWJvdHRv
bSAuY29udGFpbmVye3dpZHRoOjExNzBweH0uc3BhbjEye3dpZHRoOjExNzBweH0uc3BhbjExe3dp
ZHRoOjEwNzBweH0uc3BhbjEwe3dpZHRoOjk3MHB4fS5zcGFuOXt3aWR0aDo4NzBweH0uc3Bhbjh7
d2lkdGg6NzcwcHh9LnNwYW43e3dpZHRoOjY3MHB4fS5zcGFuNnt3aWR0aDo1NzBweH0uc3BhbjV7
d2lkdGg6NDcwcHh9LnNwYW40e3dpZHRoOjM3MHB4fS5zcGFuM3t3aWR0aDoyNzBweH0uc3BhbjJ7
d2lkdGg6MTcwcHh9LnNwYW4xe3dpZHRoOjcwcHh9Lm9mZnNldDEye21hcmdpbi1sZWZ0OjEyMzBw
eH0ub2Zmc2V0MTF7bWFyZ2luLWxlZnQ6MTEzMHB4fS5vZmZzZXQxMHttYXJnaW4tbGVmdDoxMDMw
cHh9Lm9mZnNldDl7bWFyZ2luLWxlZnQ6OTMwcHh9Lm9mZnNldDh7bWFyZ2luLWxlZnQ6ODMwcHh9
Lm9mZnNldDd7bWFyZ2luLWxlZnQ6NzMwcHh9Lm9mZnNldDZ7bWFyZ2luLWxlZnQ6NjMwcHh9Lm9m
ZnNldDV7bWFyZ2luLWxlZnQ6NTMwcHh9Lm9mZnNldDR7bWFyZ2luLWxlZnQ6NDMwcHh9Lm9mZnNl
dDN7bWFyZ2luLWxlZnQ6MzMwcHh9Lm9mZnNldDJ7bWFyZ2luLWxlZnQ6MjMwcHh9Lm9mZnNldDF7
bWFyZ2luLWxlZnQ6MTMwcHh9LnJvdy1mbHVpZHt3aWR0aDoxMDAlOyp6b29tOjF9LnJvdy1mbHVp
ZDpiZWZvcmUsLnJvdy1mbHVpZDphZnRlcntkaXNwbGF5OnRhYmxlO2xpbmUtaGVpZ2h0OjA7Y29u
dGVudDoiIn0ucm93LWZsdWlkOmFmdGVye2NsZWFyOmJvdGh9LnJvdy1mbHVpZCBbY2xhc3MqPSJz
cGFuIl17ZGlzcGxheTpibG9jaztmbG9hdDpsZWZ0O3dpZHRoOjEwMCU7bWluLWhlaWdodDozMHB4
O21hcmdpbi1sZWZ0OjIuNTY0MTAyNTY0MTAyNTY0JTsqbWFyZ2luLWxlZnQ6Mi41MTA5MTEwNzQ3
NDA4NjE2JTstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDstbW96LWJveC1zaXppbmc6Ym9y
ZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3h9LnJvdy1mbHVpZCBbY2xhc3MqPSJzcGFuIl06
Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6MH0ucm93LWZsdWlkIC5jb250cm9scy1yb3cgW2NsYXNz
Kj0ic3BhbiJdK1tjbGFzcyo9InNwYW4iXXttYXJnaW4tbGVmdDoyLjU2NDEwMjU2NDEwMjU2NCV9
LnJvdy1mbHVpZCAuc3BhbjEye3dpZHRoOjEwMCU7KndpZHRoOjk5Ljk0NjgwODUxMDYzODI5JX0u
cm93LWZsdWlkIC5zcGFuMTF7d2lkdGg6OTEuNDUyOTkxNDUyOTkxNDUlOyp3aWR0aDo5MS4zOTk3
OTk5NjM2Mjk3NSV9LnJvdy1mbHVpZCAuc3BhbjEwe3dpZHRoOjgyLjkwNTk4MjkwNTk4MjkxJTsq
d2lkdGg6ODIuODUyNzkxNDE2NjIxMiV9LnJvdy1mbHVpZCAuc3Bhbjl7d2lkdGg6NzQuMzU4OTc0
MzU4OTc0MzYlOyp3aWR0aDo3NC4zMDU3ODI4Njk2MTI2NiV9LnJvdy1mbHVpZCAuc3Bhbjh7d2lk
dGg6NjUuODExOTY1ODExOTY1ODIlOyp3aWR0aDo2NS43NTg3NzQzMjI2MDQxMSV9LnJvdy1mbHVp
ZCAuc3Bhbjd7d2lkdGg6NTcuMjY0OTU3MjY0OTU3MjYlOyp3aWR0aDo1Ny4yMTE3NjU3NzU1OTU1
NiV9LnJvdy1mbHVpZCAuc3BhbjZ7d2lkdGg6NDguNzE3OTQ4NzE3OTQ4NzE1JTsqd2lkdGg6NDgu
NjY0NzU3MjI4NTg3MDE0JX0ucm93LWZsdWlkIC5zcGFuNXt3aWR0aDo0MC4xNzA5NDAxNzA5NDAx
NyU7KndpZHRoOjQwLjExNzc0ODY4MTU3ODQ3JX0ucm93LWZsdWlkIC5zcGFuNHt3aWR0aDozMS42
MjM5MzE2MjM5MzE2MjUlOyp3aWR0aDozMS41NzA3NDAxMzQ1Njk5MjQlfS5yb3ctZmx1aWQgLnNw
YW4ze3dpZHRoOjIzLjA3NjkyMzA3NjkyMzA3NyU7KndpZHRoOjIzLjAyMzczMTU4NzU2MTM3NSV9
LnJvdy1mbHVpZCAuc3BhbjJ7d2lkdGg6MTQuNTI5OTE0NTI5OTE0NTMlOyp3aWR0aDoxNC40NzY3
MjMwNDA1NTI4MjglfS5yb3ctZmx1aWQgLnNwYW4xe3dpZHRoOjUuOTgyOTA1OTgyOTA1OTgzJTsq
d2lkdGg6NS45Mjk3MTQ0OTM1NDQyODElfS5yb3ctZmx1aWQgLm9mZnNldDEye21hcmdpbi1sZWZ0
OjEwNS4xMjgyMDUxMjgyMDUxMiU7Km1hcmdpbi1sZWZ0OjEwNS4wMjE4MjIxNDk0ODE3MSV9LnJv
dy1mbHVpZCAub2Zmc2V0MTI6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6MTAyLjU2NDEwMjU2NDEw
MjU3JTsqbWFyZ2luLWxlZnQ6MTAyLjQ1NzcxOTU4NTM3OTE1JX0ucm93LWZsdWlkIC5vZmZzZXQx
MXttYXJnaW4tbGVmdDo5Ni41ODExOTY1ODExOTY1OCU7Km1hcmdpbi1sZWZ0Ojk2LjQ3NDgxMzYw
MjQ3MzE2JX0ucm93LWZsdWlkIC5vZmZzZXQxMTpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDo5NC4w
MTcwOTQwMTcwOTQwMiU7Km1hcmdpbi1sZWZ0OjkzLjkxMDcxMTAzODM3MDYxJX0ucm93LWZsdWlk
IC5vZmZzZXQxMHttYXJnaW4tbGVmdDo4OC4wMzQxODgwMzQxODgwMyU7Km1hcmdpbi1sZWZ0Ojg3
LjkyNzgwNTA1NTQ2NDYyJX0ucm93LWZsdWlkIC5vZmZzZXQxMDpmaXJzdC1jaGlsZHttYXJnaW4t
bGVmdDo4NS40NzAwODU0NzAwODU0OCU7Km1hcmdpbi1sZWZ0Ojg1LjM2MzcwMjQ5MTM2MjA2JX0u
cm93LWZsdWlkIC5vZmZzZXQ5e21hcmdpbi1sZWZ0Ojc5LjQ4NzE3OTQ4NzE3OTQ5JTsqbWFyZ2lu
LWxlZnQ6NzkuMzgwNzk2NTA4NDU2MDclfS5yb3ctZmx1aWQgLm9mZnNldDk6Zmlyc3QtY2hpbGR7
bWFyZ2luLWxlZnQ6NzYuOTIzMDc2OTIzMDc2OTMlOyptYXJnaW4tbGVmdDo3Ni44MTY2OTM5NDQz
NTM1MiV9LnJvdy1mbHVpZCAub2Zmc2V0OHttYXJnaW4tbGVmdDo3MC45NDAxNzA5NDAxNzA5NCU7
Km1hcmdpbi1sZWZ0OjcwLjgzMzc4Nzk2MTQ0NzUzJX0ucm93LWZsdWlkIC5vZmZzZXQ4OmZpcnN0
LWNoaWxke21hcmdpbi1sZWZ0OjY4LjM3NjA2ODM3NjA2ODM5JTsqbWFyZ2luLWxlZnQ6NjguMjY5
Njg1Mzk3MzQ0OTclfS5yb3ctZmx1aWQgLm9mZnNldDd7bWFyZ2luLWxlZnQ6NjIuMzkzMTYyMzkz
MTYyMzg1JTsqbWFyZ2luLWxlZnQ6NjIuMjg2Nzc5NDE0NDM4OTklfS5yb3ctZmx1aWQgLm9mZnNl
dDc6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6NTkuODI5MDU5ODI5MDU5ODIlOyptYXJnaW4tbGVm
dDo1OS43MjI2NzY4NTAzMzY0MiV9LnJvdy1mbHVpZCAub2Zmc2V0NnttYXJnaW4tbGVmdDo1My44
NDYxNTM4NDYxNTM4NCU7Km1hcmdpbi1sZWZ0OjUzLjczOTc3MDg2NzQzMDQ0NCV9LnJvdy1mbHVp
ZCAub2Zmc2V0NjpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDo1MS4yODIwNTEyODIwNTEyOCU7Km1h
cmdpbi1sZWZ0OjUxLjE3NTY2ODMwMzMyNzg3NSV9LnJvdy1mbHVpZCAub2Zmc2V0NXttYXJnaW4t
bGVmdDo0NS4yOTkxNDUyOTkxNDUyOTUlOyptYXJnaW4tbGVmdDo0NS4xOTI3NjIzMjA0MjE5JX0u
cm93LWZsdWlkIC5vZmZzZXQ1OmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjQyLjczNTA0MjczNTA0
MjczJTsqbWFyZ2luLWxlZnQ6NDIuNjI4NjU5NzU2MzE5MzMlfS5yb3ctZmx1aWQgLm9mZnNldDR7
bWFyZ2luLWxlZnQ6MzYuNzUyMTM2NzUyMTM2NzUlOyptYXJnaW4tbGVmdDozNi42NDU3NTM3NzM0
MTMzNTQlfS5yb3ctZmx1aWQgLm9mZnNldDQ6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6MzQuMTg4
MDM0MTg4MDM0MTklOyptYXJnaW4tbGVmdDozNC4wODE2NTEyMDkzMTA3ODUlfS5yb3ctZmx1aWQg
Lm9mZnNldDN7bWFyZ2luLWxlZnQ6MjguMjA1MTI4MjA1MTI4MjA0JTsqbWFyZ2luLWxlZnQ6Mjgu
MDk4NzQ1MjI2NDA0OCV9LnJvdy1mbHVpZCAub2Zmc2V0MzpmaXJzdC1jaGlsZHttYXJnaW4tbGVm
dDoyNS42NDEwMjU2NDEwMjU2NDIlOyptYXJnaW4tbGVmdDoyNS41MzQ2NDI2NjIzMDIyNCV9LnJv
dy1mbHVpZCAub2Zmc2V0MnttYXJnaW4tbGVmdDoxOS42NTgxMTk2NTgxMTk2NiU7Km1hcmdpbi1s
ZWZ0OjE5LjU1MTczNjY3OTM5NjI1NyV9LnJvdy1mbHVpZCAub2Zmc2V0MjpmaXJzdC1jaGlsZHtt
YXJnaW4tbGVmdDoxNy4wOTQwMTcwOTQwMTcwOTQlOyptYXJnaW4tbGVmdDoxNi45ODc2MzQxMTUy
OTM2OSV9LnJvdy1mbHVpZCAub2Zmc2V0MXttYXJnaW4tbGVmdDoxMS4xMTExMTExMTExMTExMSU7
Km1hcmdpbi1sZWZ0OjExLjAwNDcyODEzMjM4NzcwOCV9LnJvdy1mbHVpZCAub2Zmc2V0MTpmaXJz
dC1jaGlsZHttYXJnaW4tbGVmdDo4LjU0NzAwODU0NzAwODU0NyU7Km1hcmdpbi1sZWZ0OjguNDQw
NjI1NTY4Mjg1MTQyJX1pbnB1dCx0ZXh0YXJlYSwudW5lZGl0YWJsZS1pbnB1dHttYXJnaW4tbGVm
dDowfS5jb250cm9scy1yb3cgW2NsYXNzKj0ic3BhbiJdK1tjbGFzcyo9InNwYW4iXXttYXJnaW4t
bGVmdDozMHB4fWlucHV0LnNwYW4xMix0ZXh0YXJlYS5zcGFuMTIsLnVuZWRpdGFibGUtaW5wdXQu
c3BhbjEye3dpZHRoOjExNTZweH1pbnB1dC5zcGFuMTEsdGV4dGFyZWEuc3BhbjExLC51bmVkaXRh
YmxlLWlucHV0LnNwYW4xMXt3aWR0aDoxMDU2cHh9aW5wdXQuc3BhbjEwLHRleHRhcmVhLnNwYW4x
MCwudW5lZGl0YWJsZS1pbnB1dC5zcGFuMTB7d2lkdGg6OTU2cHh9aW5wdXQuc3BhbjksdGV4dGFy
ZWEuc3BhbjksLnVuZWRpdGFibGUtaW5wdXQuc3Bhbjl7d2lkdGg6ODU2cHh9aW5wdXQuc3Bhbjgs
dGV4dGFyZWEuc3BhbjgsLnVuZWRpdGFibGUtaW5wdXQuc3Bhbjh7d2lkdGg6NzU2cHh9aW5wdXQu
c3BhbjcsdGV4dGFyZWEuc3BhbjcsLnVuZWRpdGFibGUtaW5wdXQuc3Bhbjd7d2lkdGg6NjU2cHh9
aW5wdXQuc3BhbjYsdGV4dGFyZWEuc3BhbjYsLnVuZWRpdGFibGUtaW5wdXQuc3BhbjZ7d2lkdGg6
NTU2cHh9aW5wdXQuc3BhbjUsdGV4dGFyZWEuc3BhbjUsLnVuZWRpdGFibGUtaW5wdXQuc3BhbjV7
d2lkdGg6NDU2cHh9aW5wdXQuc3BhbjQsdGV4dGFyZWEuc3BhbjQsLnVuZWRpdGFibGUtaW5wdXQu
c3BhbjR7d2lkdGg6MzU2cHh9aW5wdXQuc3BhbjMsdGV4dGFyZWEuc3BhbjMsLnVuZWRpdGFibGUt
aW5wdXQuc3BhbjN7d2lkdGg6MjU2cHh9aW5wdXQuc3BhbjIsdGV4dGFyZWEuc3BhbjIsLnVuZWRp
dGFibGUtaW5wdXQuc3BhbjJ7d2lkdGg6MTU2cHh9aW5wdXQuc3BhbjEsdGV4dGFyZWEuc3BhbjEs
LnVuZWRpdGFibGUtaW5wdXQuc3BhbjF7d2lkdGg6NTZweH0udGh1bWJuYWlsc3ttYXJnaW4tbGVm
dDotMzBweH0udGh1bWJuYWlscz5saXttYXJnaW4tbGVmdDozMHB4fS5yb3ctZmx1aWQgLnRodW1i
bmFpbHN7bWFyZ2luLWxlZnQ6MH19QG1lZGlhKG1pbi13aWR0aDo3NjhweCkgYW5kIChtYXgtd2lk
dGg6OTc5cHgpey5yb3d7bWFyZ2luLWxlZnQ6LTIwcHg7Knpvb206MX0ucm93OmJlZm9yZSwucm93
OmFmdGVye2Rpc3BsYXk6dGFibGU7bGluZS1oZWlnaHQ6MDtjb250ZW50OiIifS5yb3c6YWZ0ZXJ7
Y2xlYXI6Ym90aH1bY2xhc3MqPSJzcGFuIl17ZmxvYXQ6bGVmdDttaW4taGVpZ2h0OjFweDttYXJn
aW4tbGVmdDoyMHB4fS5jb250YWluZXIsLm5hdmJhci1zdGF0aWMtdG9wIC5jb250YWluZXIsLm5h
dmJhci1maXhlZC10b3AgLmNvbnRhaW5lciwubmF2YmFyLWZpeGVkLWJvdHRvbSAuY29udGFpbmVy
e3dpZHRoOjcyNHB4fS5zcGFuMTJ7d2lkdGg6NzI0cHh9LnNwYW4xMXt3aWR0aDo2NjJweH0uc3Bh
bjEwe3dpZHRoOjYwMHB4fS5zcGFuOXt3aWR0aDo1MzhweH0uc3Bhbjh7d2lkdGg6NDc2cHh9LnNw
YW43e3dpZHRoOjQxNHB4fS5zcGFuNnt3aWR0aDozNTJweH0uc3BhbjV7d2lkdGg6MjkwcHh9LnNw
YW40e3dpZHRoOjIyOHB4fS5zcGFuM3t3aWR0aDoxNjZweH0uc3BhbjJ7d2lkdGg6MTA0cHh9LnNw
YW4xe3dpZHRoOjQycHh9Lm9mZnNldDEye21hcmdpbi1sZWZ0Ojc2NHB4fS5vZmZzZXQxMXttYXJn
aW4tbGVmdDo3MDJweH0ub2Zmc2V0MTB7bWFyZ2luLWxlZnQ6NjQwcHh9Lm9mZnNldDl7bWFyZ2lu
LWxlZnQ6NTc4cHh9Lm9mZnNldDh7bWFyZ2luLWxlZnQ6NTE2cHh9Lm9mZnNldDd7bWFyZ2luLWxl
ZnQ6NDU0cHh9Lm9mZnNldDZ7bWFyZ2luLWxlZnQ6MzkycHh9Lm9mZnNldDV7bWFyZ2luLWxlZnQ6
MzMwcHh9Lm9mZnNldDR7bWFyZ2luLWxlZnQ6MjY4cHh9Lm9mZnNldDN7bWFyZ2luLWxlZnQ6MjA2
cHh9Lm9mZnNldDJ7bWFyZ2luLWxlZnQ6MTQ0cHh9Lm9mZnNldDF7bWFyZ2luLWxlZnQ6ODJweH0u
cm93LWZsdWlke3dpZHRoOjEwMCU7Knpvb206MX0ucm93LWZsdWlkOmJlZm9yZSwucm93LWZsdWlk
OmFmdGVye2Rpc3BsYXk6dGFibGU7bGluZS1oZWlnaHQ6MDtjb250ZW50OiIifS5yb3ctZmx1aWQ6
YWZ0ZXJ7Y2xlYXI6Ym90aH0ucm93LWZsdWlkIFtjbGFzcyo9InNwYW4iXXtkaXNwbGF5OmJsb2Nr
O2Zsb2F0OmxlZnQ7d2lkdGg6MTAwJTttaW4taGVpZ2h0OjMwcHg7bWFyZ2luLWxlZnQ6Mi43NjI0
MzA5MzkyMjY1MTk0JTsqbWFyZ2luLWxlZnQ6Mi43MDkyMzk0NDk4NjQ4MTclOy13ZWJraXQtYm94
LXNpemluZzpib3JkZXItYm94Oy1tb3otYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6
Ym9yZGVyLWJveH0ucm93LWZsdWlkIFtjbGFzcyo9InNwYW4iXTpmaXJzdC1jaGlsZHttYXJnaW4t
bGVmdDowfS5yb3ctZmx1aWQgLmNvbnRyb2xzLXJvdyBbY2xhc3MqPSJzcGFuIl0rW2NsYXNzKj0i
c3BhbiJde21hcmdpbi1sZWZ0OjIuNzYyNDMwOTM5MjI2NTE5NCV9LnJvdy1mbHVpZCAuc3BhbjEy
e3dpZHRoOjEwMCU7KndpZHRoOjk5Ljk0NjgwODUxMDYzODI5JX0ucm93LWZsdWlkIC5zcGFuMTF7
d2lkdGg6OTEuNDM2NDY0MDg4Mzk3NzglOyp3aWR0aDo5MS4zODMyNzI1OTkwMzYwOCV9LnJvdy1m
bHVpZCAuc3BhbjEwe3dpZHRoOjgyLjg3MjkyODE3Njc5NTU4JTsqd2lkdGg6ODIuODE5NzM2Njg3
NDMzODclfS5yb3ctZmx1aWQgLnNwYW45e3dpZHRoOjc0LjMwOTM5MjI2NTE5MzM3JTsqd2lkdGg6
NzQuMjU2MjAwNzc1ODMxNjYlfS5yb3ctZmx1aWQgLnNwYW44e3dpZHRoOjY1Ljc0NTg1NjM1MzU5
MTE3JTsqd2lkdGg6NjUuNjkyNjY0ODY0MjI5NDYlfS5yb3ctZmx1aWQgLnNwYW43e3dpZHRoOjU3
LjE4MjMyMDQ0MTk4ODk1JTsqd2lkdGg6NTcuMTI5MTI4OTUyNjI3MjUlfS5yb3ctZmx1aWQgLnNw
YW42e3dpZHRoOjQ4LjYxODc4NDUzMDM4Njc0JTsqd2lkdGg6NDguNTY1NTkzMDQxMDI1MDQlfS5y
b3ctZmx1aWQgLnNwYW41e3dpZHRoOjQwLjA1NTI0ODYxODc4NDUzJTsqd2lkdGg6NDAuMDAyMDU3
MTI5NDIyODMlfS5yb3ctZmx1aWQgLnNwYW40e3dpZHRoOjMxLjQ5MTcxMjcwNzE4MjMyMyU7Kndp
ZHRoOjMxLjQzODUyMTIxNzgyMDYyJX0ucm93LWZsdWlkIC5zcGFuM3t3aWR0aDoyMi45MjgxNzY3
OTU1ODAxMSU7KndpZHRoOjIyLjg3NDk4NTMwNjIxODQxJX0ucm93LWZsdWlkIC5zcGFuMnt3aWR0
aDoxNC4zNjQ2NDA4ODM5Nzc5JTsqd2lkdGg6MTQuMzExNDQ5Mzk0NjE2MTk5JX0ucm93LWZsdWlk
IC5zcGFuMXt3aWR0aDo1LjgwMTEwNDk3MjM3NTY5MSU7KndpZHRoOjUuNzQ3OTEzNDgzMDEzOTg4
JX0ucm93LWZsdWlkIC5vZmZzZXQxMnttYXJnaW4tbGVmdDoxMDUuNTI0ODYxODc4NDUzMDQlOypt
YXJnaW4tbGVmdDoxMDUuNDE4NDc4ODk5NzI5NjIlfS5yb3ctZmx1aWQgLm9mZnNldDEyOmZpcnN0
LWNoaWxke21hcmdpbi1sZWZ0OjEwMi43NjI0MzA5MzkyMjY1MiU7Km1hcmdpbi1sZWZ0OjEwMi42
NTYwNDc5NjA1MDMxJX0ucm93LWZsdWlkIC5vZmZzZXQxMXttYXJnaW4tbGVmdDo5Ni45NjEzMjU5
NjY4NTA4MiU7Km1hcmdpbi1sZWZ0Ojk2Ljg1NDk0Mjk4ODEyNzQlfS5yb3ctZmx1aWQgLm9mZnNl
dDExOmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0Ojk0LjE5ODg5NTAyNzYyNDMlOyptYXJnaW4tbGVm
dDo5NC4wOTI1MTIwNDg5MDA4OSV9LnJvdy1mbHVpZCAub2Zmc2V0MTB7bWFyZ2luLWxlZnQ6ODgu
Mzk3NzkwMDU1MjQ4NjIlOyptYXJnaW4tbGVmdDo4OC4yOTE0MDcwNzY1MjUyJX0ucm93LWZsdWlk
IC5vZmZzZXQxMDpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDo4NS42MzUzNTkxMTYwMjIxJTsqbWFy
Z2luLWxlZnQ6ODUuNTI4OTc2MTM3Mjk4NjglfS5yb3ctZmx1aWQgLm9mZnNldDl7bWFyZ2luLWxl
ZnQ6NzkuODM0MjU0MTQzNjQ2NCU7Km1hcmdpbi1sZWZ0Ojc5LjcyNzg3MTE2NDkyMjk5JX0ucm93
LWZsdWlkIC5vZmZzZXQ5OmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0Ojc3LjA3MTgyMzIwNDQxOTg5
JTsqbWFyZ2luLWxlZnQ6NzYuOTY1NDQwMjI1Njk2NDclfS5yb3ctZmx1aWQgLm9mZnNldDh7bWFy
Z2luLWxlZnQ6NzEuMjcwNzE4MjMyMDQ0MiU7Km1hcmdpbi1sZWZ0OjcxLjE2NDMzNTI1MzMyMDc5
JX0ucm93LWZsdWlkIC5vZmZzZXQ4OmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjY4LjUwODI4NzI5
MjgxNzY4JTsqbWFyZ2luLWxlZnQ6NjguNDAxOTA0MzE0MDk0MjclfS5yb3ctZmx1aWQgLm9mZnNl
dDd7bWFyZ2luLWxlZnQ6NjIuNzA3MTgyMzIwNDQxOTklOyptYXJnaW4tbGVmdDo2Mi42MDA3OTkz
NDE3MTg1ODQlfS5yb3ctZmx1aWQgLm9mZnNldDc6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6NTku
OTQ0NzUxMzgxMjE1NDclOyptYXJnaW4tbGVmdDo1OS44MzgzNjg0MDI0OTIwNjUlfS5yb3ctZmx1
aWQgLm9mZnNldDZ7bWFyZ2luLWxlZnQ6NTQuMTQzNjQ2NDA4ODM5NzglOyptYXJnaW4tbGVmdDo1
NC4wMzcyNjM0MzAxMTYzNzYlfS5yb3ctZmx1aWQgLm9mZnNldDY6Zmlyc3QtY2hpbGR7bWFyZ2lu
LWxlZnQ6NTEuMzgxMjE1NDY5NjEzMjYlOyptYXJnaW4tbGVmdDo1MS4yNzQ4MzI0OTA4ODk4NiV9
LnJvdy1mbHVpZCAub2Zmc2V0NXttYXJnaW4tbGVmdDo0NS41ODAxMTA0OTcyMzc1NyU7Km1hcmdp
bi1sZWZ0OjQ1LjQ3MzcyNzUxODUxNDE3JX0ucm93LWZsdWlkIC5vZmZzZXQ1OmZpcnN0LWNoaWxk
e21hcmdpbi1sZWZ0OjQyLjgxNzY3OTU1ODAxMTA1JTsqbWFyZ2luLWxlZnQ6NDIuNzExMjk2NTc5
Mjg3NjUlfS5yb3ctZmx1aWQgLm9mZnNldDR7bWFyZ2luLWxlZnQ6MzcuMDE2NTc0NTg1NjM1MzYl
OyptYXJnaW4tbGVmdDozNi45MTAxOTE2MDY5MTE5NiV9LnJvdy1mbHVpZCAub2Zmc2V0NDpmaXJz
dC1jaGlsZHttYXJnaW4tbGVmdDozNC4yNTQxNDM2NDY0MDg4NCU7Km1hcmdpbi1sZWZ0OjM0LjE0
Nzc2MDY2NzY4NTQ0JX0ucm93LWZsdWlkIC5vZmZzZXQze21hcmdpbi1sZWZ0OjI4LjQ1MzAzODY3
NDAzMzE1JTsqbWFyZ2luLWxlZnQ6MjguMzQ2NjU1Njk1MzA5NzQ2JX0ucm93LWZsdWlkIC5vZmZz
ZXQzOmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjI1LjY5MDYwNzczNDgwNjYzJTsqbWFyZ2luLWxl
ZnQ6MjUuNTg0MjI0NzU2MDgzMjI3JX0ucm93LWZsdWlkIC5vZmZzZXQye21hcmdpbi1sZWZ0OjE5
Ljg4OTUwMjc2MjQzMDk0JTsqbWFyZ2luLWxlZnQ6MTkuNzgzMTE5NzgzNzA3NTM3JX0ucm93LWZs
dWlkIC5vZmZzZXQyOmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjE3LjEyNzA3MTgyMzIwNDQyJTsq
bWFyZ2luLWxlZnQ6MTcuMDIwNjg4ODQ0NDgxMDIlfS5yb3ctZmx1aWQgLm9mZnNldDF7bWFyZ2lu
LWxlZnQ6MTEuMzI1OTY2ODUwODI4NzMlOyptYXJnaW4tbGVmdDoxMS4yMTk1ODM4NzIxMDUzMjUl
fS5yb3ctZmx1aWQgLm9mZnNldDE6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6OC41NjM1MzU5MTE2
MDIyMSU7Km1hcmdpbi1sZWZ0OjguNDU3MTUyOTMyODc4ODA2JX1pbnB1dCx0ZXh0YXJlYSwudW5l
ZGl0YWJsZS1pbnB1dHttYXJnaW4tbGVmdDowfS5jb250cm9scy1yb3cgW2NsYXNzKj0ic3BhbiJd
K1tjbGFzcyo9InNwYW4iXXttYXJnaW4tbGVmdDoyMHB4fWlucHV0LnNwYW4xMix0ZXh0YXJlYS5z
cGFuMTIsLnVuZWRpdGFibGUtaW5wdXQuc3BhbjEye3dpZHRoOjcxMHB4fWlucHV0LnNwYW4xMSx0
ZXh0YXJlYS5zcGFuMTEsLnVuZWRpdGFibGUtaW5wdXQuc3BhbjExe3dpZHRoOjY0OHB4fWlucHV0
LnNwYW4xMCx0ZXh0YXJlYS5zcGFuMTAsLnVuZWRpdGFibGUtaW5wdXQuc3BhbjEwe3dpZHRoOjU4
NnB4fWlucHV0LnNwYW45LHRleHRhcmVhLnNwYW45LC51bmVkaXRhYmxlLWlucHV0LnNwYW45e3dp
ZHRoOjUyNHB4fWlucHV0LnNwYW44LHRleHRhcmVhLnNwYW44LC51bmVkaXRhYmxlLWlucHV0LnNw
YW44e3dpZHRoOjQ2MnB4fWlucHV0LnNwYW43LHRleHRhcmVhLnNwYW43LC51bmVkaXRhYmxlLWlu
cHV0LnNwYW43e3dpZHRoOjQwMHB4fWlucHV0LnNwYW42LHRleHRhcmVhLnNwYW42LC51bmVkaXRh
YmxlLWlucHV0LnNwYW42e3dpZHRoOjMzOHB4fWlucHV0LnNwYW41LHRleHRhcmVhLnNwYW41LC51
bmVkaXRhYmxlLWlucHV0LnNwYW41e3dpZHRoOjI3NnB4fWlucHV0LnNwYW40LHRleHRhcmVhLnNw
YW40LC51bmVkaXRhYmxlLWlucHV0LnNwYW40e3dpZHRoOjIxNHB4fWlucHV0LnNwYW4zLHRleHRh
cmVhLnNwYW4zLC51bmVkaXRhYmxlLWlucHV0LnNwYW4ze3dpZHRoOjE1MnB4fWlucHV0LnNwYW4y
LHRleHRhcmVhLnNwYW4yLC51bmVkaXRhYmxlLWlucHV0LnNwYW4ye3dpZHRoOjkwcHh9aW5wdXQu
c3BhbjEsdGV4dGFyZWEuc3BhbjEsLnVuZWRpdGFibGUtaW5wdXQuc3BhbjF7d2lkdGg6MjhweH19
QG1lZGlhKG1heC13aWR0aDo3NjdweCl7Ym9keXtwYWRkaW5nLXJpZ2h0OjIwcHg7cGFkZGluZy1s
ZWZ0OjIwcHh9Lm5hdmJhci1maXhlZC10b3AsLm5hdmJhci1maXhlZC1ib3R0b20sLm5hdmJhci1z
dGF0aWMtdG9we21hcmdpbi1yaWdodDotMjBweDttYXJnaW4tbGVmdDotMjBweH0uY29udGFpbmVy
LWZsdWlke3BhZGRpbmc6MH0uZGwtaG9yaXpvbnRhbCBkdHtmbG9hdDpub25lO3dpZHRoOmF1dG87
Y2xlYXI6bm9uZTt0ZXh0LWFsaWduOmxlZnR9LmRsLWhvcml6b250YWwgZGR7bWFyZ2luLWxlZnQ6
MH0uY29udGFpbmVye3dpZHRoOmF1dG99LnJvdy1mbHVpZHt3aWR0aDoxMDAlfS5yb3csLnRodW1i
bmFpbHN7bWFyZ2luLWxlZnQ6MH0udGh1bWJuYWlscz5saXtmbG9hdDpub25lO21hcmdpbi1sZWZ0
OjB9W2NsYXNzKj0ic3BhbiJdLC51bmVkaXRhYmxlLWlucHV0W2NsYXNzKj0ic3BhbiJdLC5yb3ct
Zmx1aWQgW2NsYXNzKj0ic3BhbiJde2Rpc3BsYXk6YmxvY2s7ZmxvYXQ6bm9uZTt3aWR0aDoxMDAl
O21hcmdpbi1sZWZ0OjA7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7LW1vei1ib3gtc2l6
aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94fS5zcGFuMTIsLnJvdy1mbHVpZCAu
c3BhbjEye3dpZHRoOjEwMCU7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7LW1vei1ib3gt
c2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94fS5yb3ctZmx1aWQgW2NsYXNz
Kj0ib2Zmc2V0Il06Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6MH0uaW5wdXQtbGFyZ2UsLmlucHV0
LXhsYXJnZSwuaW5wdXQteHhsYXJnZSxpbnB1dFtjbGFzcyo9InNwYW4iXSxzZWxlY3RbY2xhc3Mq
PSJzcGFuIl0sdGV4dGFyZWFbY2xhc3MqPSJzcGFuIl0sLnVuZWRpdGFibGUtaW5wdXR7ZGlzcGxh
eTpibG9jazt3aWR0aDoxMDAlO21pbi1oZWlnaHQ6MzBweDstd2Via2l0LWJveC1zaXppbmc6Ym9y
ZGVyLWJveDstbW96LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3h9
LmlucHV0LXByZXBlbmQgaW5wdXQsLmlucHV0LWFwcGVuZCBpbnB1dCwuaW5wdXQtcHJlcGVuZCBp
bnB1dFtjbGFzcyo9InNwYW4iXSwuaW5wdXQtYXBwZW5kIGlucHV0W2NsYXNzKj0ic3BhbiJde2Rp
c3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOmF1dG99LmNvbnRyb2xzLXJvdyBbY2xhc3MqPSJzcGFu
Il0rW2NsYXNzKj0ic3BhbiJde21hcmdpbi1sZWZ0OjB9Lm1vZGFse3Bvc2l0aW9uOmZpeGVkO3Rv
cDoyMHB4O3JpZ2h0OjIwcHg7bGVmdDoyMHB4O3dpZHRoOmF1dG87bWFyZ2luOjB9Lm1vZGFsLmZh
ZGV7dG9wOi0xMDBweH0ubW9kYWwuZmFkZS5pbnt0b3A6MjBweH19QG1lZGlhKG1heC13aWR0aDo0
ODBweCl7Lm5hdi1jb2xsYXBzZXstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLDAsMCl9
LnBhZ2UtaGVhZGVyIGgxIHNtYWxse2Rpc3BsYXk6YmxvY2s7bGluZS1oZWlnaHQ6MjBweH1pbnB1
dFt0eXBlPSJjaGVja2JveCJdLGlucHV0W3R5cGU9InJhZGlvIl17Ym9yZGVyOjFweCBzb2xpZCAj
Y2NjfS5mb3JtLWhvcml6b250YWwgLmNvbnRyb2wtbGFiZWx7ZmxvYXQ6bm9uZTt3aWR0aDphdXRv
O3BhZGRpbmctdG9wOjA7dGV4dC1hbGlnbjpsZWZ0fS5mb3JtLWhvcml6b250YWwgLmNvbnRyb2xz
e21hcmdpbi1sZWZ0OjB9LmZvcm0taG9yaXpvbnRhbCAuY29udHJvbC1saXN0e3BhZGRpbmctdG9w
OjB9LmZvcm0taG9yaXpvbnRhbCAuZm9ybS1hY3Rpb25ze3BhZGRpbmctcmlnaHQ6MTBweDtwYWRk
aW5nLWxlZnQ6MTBweH0ubWVkaWEgLnB1bGwtbGVmdCwubWVkaWEgLnB1bGwtcmlnaHR7ZGlzcGxh
eTpibG9jaztmbG9hdDpub25lO21hcmdpbi1ib3R0b206MTBweH0ubWVkaWEtb2JqZWN0e21hcmdp
bi1yaWdodDowO21hcmdpbi1sZWZ0OjB9Lm1vZGFse3RvcDoxMHB4O3JpZ2h0OjEwcHg7bGVmdDox
MHB4fS5tb2RhbC1oZWFkZXIgLmNsb3Nle3BhZGRpbmc6MTBweDttYXJnaW46LTEwcHh9LmNhcm91
c2VsLWNhcHRpb257cG9zaXRpb246c3RhdGljfX1AbWVkaWEobWF4LXdpZHRoOjk3OXB4KXtib2R5
e3BhZGRpbmctdG9wOjB9Lm5hdmJhci1maXhlZC10b3AsLm5hdmJhci1maXhlZC1ib3R0b217cG9z
aXRpb246c3RhdGljfS5uYXZiYXItZml4ZWQtdG9we21hcmdpbi1ib3R0b206MjBweH0ubmF2YmFy
LWZpeGVkLWJvdHRvbXttYXJnaW4tdG9wOjIwcHh9Lm5hdmJhci1maXhlZC10b3AgLm5hdmJhci1p
bm5lciwubmF2YmFyLWZpeGVkLWJvdHRvbSAubmF2YmFyLWlubmVye3BhZGRpbmc6NXB4fS5uYXZi
YXIgLmNvbnRhaW5lcnt3aWR0aDphdXRvO3BhZGRpbmc6MH0ubmF2YmFyIC5icmFuZHtwYWRkaW5n
LXJpZ2h0OjEwcHg7cGFkZGluZy1sZWZ0OjEwcHg7bWFyZ2luOjAgMCAwIC01cHh9Lm5hdi1jb2xs
YXBzZXtjbGVhcjpib3RofS5uYXYtY29sbGFwc2UgLm5hdntmbG9hdDpub25lO21hcmdpbjowIDAg
MTBweH0ubmF2LWNvbGxhcHNlIC5uYXY+bGl7ZmxvYXQ6bm9uZX0ubmF2LWNvbGxhcHNlIC5uYXY+
bGk+YXttYXJnaW4tYm90dG9tOjJweH0ubmF2LWNvbGxhcHNlIC5uYXY+LmRpdmlkZXItdmVydGlj
YWx7ZGlzcGxheTpub25lfS5uYXYtY29sbGFwc2UgLm5hdiAubmF2LWhlYWRlcntjb2xvcjojNzc3
O3RleHQtc2hhZG93Om5vbmV9Lm5hdi1jb2xsYXBzZSAubmF2PmxpPmEsLm5hdi1jb2xsYXBzZSAu
ZHJvcGRvd24tbWVudSBhe3BhZGRpbmc6OXB4IDE1cHg7Zm9udC13ZWlnaHQ6Ym9sZDtjb2xvcjoj
Nzc3Oy13ZWJraXQtYm9yZGVyLXJhZGl1czozcHg7LW1vei1ib3JkZXItcmFkaXVzOjNweDtib3Jk
ZXItcmFkaXVzOjNweH0ubmF2LWNvbGxhcHNlIC5idG57cGFkZGluZzo0cHggMTBweCA0cHg7Zm9u
dC13ZWlnaHQ6bm9ybWFsOy13ZWJraXQtYm9yZGVyLXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFk
aXVzOjRweDtib3JkZXItcmFkaXVzOjRweH0ubmF2LWNvbGxhcHNlIC5kcm9wZG93bi1tZW51IGxp
K2xpIGF7bWFyZ2luLWJvdHRvbToycHh9Lm5hdi1jb2xsYXBzZSAubmF2PmxpPmE6aG92ZXIsLm5h
di1jb2xsYXBzZSAuZHJvcGRvd24tbWVudSBhOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2YyZjJm
Mn0ubmF2YmFyLWludmVyc2UgLm5hdi1jb2xsYXBzZSAubmF2PmxpPmEsLm5hdmJhci1pbnZlcnNl
IC5uYXYtY29sbGFwc2UgLmRyb3Bkb3duLW1lbnUgYXtjb2xvcjojOTk5fS5uYXZiYXItaW52ZXJz
ZSAubmF2LWNvbGxhcHNlIC5uYXY+bGk+YTpob3ZlciwubmF2YmFyLWludmVyc2UgLm5hdi1jb2xs
YXBzZSAuZHJvcGRvd24tbWVudSBhOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzExMX0ubmF2LWNv
bGxhcHNlLmluIC5idG4tZ3JvdXB7cGFkZGluZzowO21hcmdpbi10b3A6NXB4fS5uYXYtY29sbGFw
c2UgLmRyb3Bkb3duLW1lbnV7cG9zaXRpb246c3RhdGljO3RvcDphdXRvO2xlZnQ6YXV0bztkaXNw
bGF5Om5vbmU7ZmxvYXQ6bm9uZTttYXgtd2lkdGg6bm9uZTtwYWRkaW5nOjA7bWFyZ2luOjAgMTVw
eDtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlcjowOy13ZWJraXQtYm9yZGVyLXJh
ZGl1czowOy1tb3otYm9yZGVyLXJhZGl1czowO2JvcmRlci1yYWRpdXM6MDstd2Via2l0LWJveC1z
aGFkb3c6bm9uZTstbW96LWJveC1zaGFkb3c6bm9uZTtib3gtc2hhZG93Om5vbmV9Lm5hdi1jb2xs
YXBzZSAub3Blbj4uZHJvcGRvd24tbWVudXtkaXNwbGF5OmJsb2NrfS5uYXYtY29sbGFwc2UgLmRy
b3Bkb3duLW1lbnU6YmVmb3JlLC5uYXYtY29sbGFwc2UgLmRyb3Bkb3duLW1lbnU6YWZ0ZXJ7ZGlz
cGxheTpub25lfS5uYXYtY29sbGFwc2UgLmRyb3Bkb3duLW1lbnUgLmRpdmlkZXJ7ZGlzcGxheTpu
b25lfS5uYXYtY29sbGFwc2UgLm5hdj5saT4uZHJvcGRvd24tbWVudTpiZWZvcmUsLm5hdi1jb2xs
YXBzZSAubmF2PmxpPi5kcm9wZG93bi1tZW51OmFmdGVye2Rpc3BsYXk6bm9uZX0ubmF2LWNvbGxh
cHNlIC5uYXZiYXItZm9ybSwubmF2LWNvbGxhcHNlIC5uYXZiYXItc2VhcmNoe2Zsb2F0Om5vbmU7
cGFkZGluZzoxMHB4IDE1cHg7bWFyZ2luOjEwcHggMDtib3JkZXItdG9wOjFweCBzb2xpZCAjZjJm
MmYyO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNmMmYyZjI7LXdlYmtpdC1ib3gtc2hhZG93Omlu
c2V0IDAgMXB4IDAgcmdiYSgyNTUsMjU1LDI1NSwwLjEpLDAgMXB4IDAgcmdiYSgyNTUsMjU1LDI1
NSwwLjEpOy1tb3otYm94LXNoYWRvdzppbnNldCAwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4x
KSwwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4xKTtib3gtc2hhZG93Omluc2V0IDAgMXB4IDAg
cmdiYSgyNTUsMjU1LDI1NSwwLjEpLDAgMXB4IDAgcmdiYSgyNTUsMjU1LDI1NSwwLjEpfS5uYXZi
YXItaW52ZXJzZSAubmF2LWNvbGxhcHNlIC5uYXZiYXItZm9ybSwubmF2YmFyLWludmVyc2UgLm5h
di1jb2xsYXBzZSAubmF2YmFyLXNlYXJjaHtib3JkZXItdG9wLWNvbG9yOiMxMTE7Ym9yZGVyLWJv
dHRvbS1jb2xvcjojMTExfS5uYXZiYXIgLm5hdi1jb2xsYXBzZSAubmF2LnB1bGwtcmlnaHR7Zmxv
YXQ6bm9uZTttYXJnaW4tbGVmdDowfS5uYXYtY29sbGFwc2UsLm5hdi1jb2xsYXBzZS5jb2xsYXBz
ZXtoZWlnaHQ6MDtvdmVyZmxvdzpoaWRkZW59Lm5hdmJhciAuYnRuLW5hdmJhcntkaXNwbGF5OmJs
b2NrfS5uYXZiYXItc3RhdGljIC5uYXZiYXItaW5uZXJ7cGFkZGluZy1yaWdodDoxMHB4O3BhZGRp
bmctbGVmdDoxMHB4fX1AbWVkaWEobWluLXdpZHRoOjk4MHB4KXsubmF2LWNvbGxhcHNlLmNvbGxh
cHNle2hlaWdodDphdXRvIWltcG9ydGFudDtvdmVyZmxvdzp2aXNpYmxlIWltcG9ydGFudH19Cklu
ZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBw
L2NvbXBvbmVudHMvYm9vdHN0cmFwL2Nzcy9ib290c3RyYXAuY3NzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBl
cmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9u
ZW50cy9ib290c3RyYXAvY3NzL2Jvb3RzdHJhcC5jc3MJKHJldmlzaW9uIDApCisrKyBQZXJmb3Jt
YW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMv
Ym9vdHN0cmFwL2Nzcy9ib290c3RyYXAuY3NzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjQ3
MCBAQAorLyohCisgKiBCb290c3RyYXAgdjEuNC4wCisgKgorICogQ29weXJpZ2h0IDIwMTEgVHdp
dHRlciwgSW5jCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UgdjIuMAorICog
aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogRGVzaWdu
ZWQgYW5kIGJ1aWx0IHdpdGggYWxsIHRoZSBsb3ZlIGluIHRoZSB3b3JsZCBAdHdpdHRlciBieSBA
bWRvIGFuZCBAZmF0LgorICogRGF0ZTogU3VuIERlYyAyNSAyMDoxODozMSBQU1QgMjAxMQorICov
CisvKiBSZXNldC5sZXNzCisgKiBQcm9wcyB0byBFcmljIE1leWVyIChtZXllcndlYi5jb20pIGZv
ciBoaXMgQ1NTIHJlc2V0IGZpbGUuIFdlJ3JlIHVzaW5nIGFuIGFkYXB0ZWQgdmVyc2lvbiBoZXJl
ICAgIHRoYXQgY3V0cyBvdXQgc29tZSBvZiB0aGUgcmVzZXQgSFRNTCBlbGVtZW50cyB3ZSB3aWxs
IG5ldmVyIG5lZWQgaGVyZSAoaS5lLiwgZGZuLCBzYW1wLCBldGMpLgorICogLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSAqLworaHRtbCwgYm9keSB7CisgIG1hcmdpbjogMDsKKyAgcGFkZGluZzogMDsKK30KK2gx
LAoraDIsCitoMywKK2g0LAoraDUsCitoNiwKK3AsCitibG9ja3F1b3RlLAorcHJlLAorYSwKK2Fi
YnIsCithY3JvbnltLAorYWRkcmVzcywKK2NpdGUsCitjb2RlLAorZGVsLAorZGZuLAorZW0sCitp
bWcsCitxLAorcywKK3NhbXAsCitzbWFsbCwKK3N0cmlrZSwKK3N0cm9uZywKK3N1YiwKK3N1cCwK
K3R0LAordmFyLAorZGQsCitkbCwKK2R0LAorbGksCitvbCwKK3VsLAorZmllbGRzZXQsCitmb3Jt
LAorbGFiZWwsCitsZWdlbmQsCitidXR0b24sCit0YWJsZSwKK2NhcHRpb24sCit0Ym9keSwKK3Rm
b290LAordGhlYWQsCit0ciwKK3RoLAordGQgeworICBtYXJnaW46IDA7CisgIHBhZGRpbmc6IDA7
CisgIGJvcmRlcjogMDsKKyAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKKyAgZm9udC1zdHlsZTogbm9y
bWFsOworICBmb250LXNpemU6IDEwMCU7CisgIGxpbmUtaGVpZ2h0OiAxOworICBmb250LWZhbWls
eTogaW5oZXJpdDsKK30KK3RhYmxlIHsKKyAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsKKyAg
Ym9yZGVyLXNwYWNpbmc6IDA7Cit9CitvbCwgdWwgeworICBsaXN0LXN0eWxlOiBub25lOworfQor
cTpiZWZvcmUsCitxOmFmdGVyLAorYmxvY2txdW90ZTpiZWZvcmUsCitibG9ja3F1b3RlOmFmdGVy
IHsKKyAgY29udGVudDogIiI7Cit9CitodG1sIHsKKyAgb3ZlcmZsb3cteTogc2Nyb2xsOworICBm
b250LXNpemU6IDEwMCU7CisgIC13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsKKyAgLW1z
LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7Cit9CithOmZvY3VzIHsKKyAgb3V0bGluZTogdGhpbiBk
b3R0ZWQ7Cit9CithOmhvdmVyLCBhOmFjdGl2ZSB7CisgIG91dGxpbmU6IDA7Cit9CithcnRpY2xl
LAorYXNpZGUsCitkZXRhaWxzLAorZmlnY2FwdGlvbiwKK2ZpZ3VyZSwKK2Zvb3RlciwKK2hlYWRl
ciwKK2hncm91cCwKK25hdiwKK3NlY3Rpb24geworICBkaXNwbGF5OiBibG9jazsKK30KK2F1ZGlv
LCBjYW52YXMsIHZpZGVvIHsKKyAgZGlzcGxheTogaW5saW5lLWJsb2NrOworICAqZGlzcGxheTog
aW5saW5lOworICAqem9vbTogMTsKK30KK2F1ZGlvOm5vdChbY29udHJvbHNdKSB7CisgIGRpc3Bs
YXk6IG5vbmU7Cit9CitzdWIsIHN1cCB7CisgIGZvbnQtc2l6ZTogNzUlOworICBsaW5lLWhlaWdo
dDogMDsKKyAgcG9zaXRpb246IHJlbGF0aXZlOworICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7
Cit9CitzdXAgeworICB0b3A6IC0wLjVlbTsKK30KK3N1YiB7CisgIGJvdHRvbTogLTAuMjVlbTsK
K30KK2ltZyB7CisgIGJvcmRlcjogMDsKKyAgLW1zLWludGVycG9sYXRpb24tbW9kZTogYmljdWJp
YzsKK30KK2J1dHRvbiwKK2lucHV0LAorc2VsZWN0LAordGV4dGFyZWEgeworICBmb250LXNpemU6
IDEwMCU7CisgIG1hcmdpbjogMDsKKyAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOworICAqdmVy
dGljYWwtYWxpZ246IG1pZGRsZTsKK30KK2J1dHRvbiwgaW5wdXQgeworICBsaW5lLWhlaWdodDog
bm9ybWFsOworICAqb3ZlcmZsb3c6IHZpc2libGU7Cit9CitidXR0b246Oi1tb3otZm9jdXMtaW5u
ZXIsIGlucHV0OjotbW96LWZvY3VzLWlubmVyIHsKKyAgYm9yZGVyOiAwOworICBwYWRkaW5nOiAw
OworfQorYnV0dG9uLAoraW5wdXRbdHlwZT0iYnV0dG9uIl0sCitpbnB1dFt0eXBlPSJyZXNldCJd
LAoraW5wdXRbdHlwZT0ic3VibWl0Il0geworICBjdXJzb3I6IHBvaW50ZXI7CisgIC13ZWJraXQt
YXBwZWFyYW5jZTogYnV0dG9uOworfQoraW5wdXRbdHlwZT0ic2VhcmNoIl0geworICAtd2Via2l0
LWFwcGVhcmFuY2U6IHRleHRmaWVsZDsKKyAgLXdlYmtpdC1ib3gtc2l6aW5nOiBjb250ZW50LWJv
eDsKKyAgLW1vei1ib3gtc2l6aW5nOiBjb250ZW50LWJveDsKKyAgYm94LXNpemluZzogY29udGVu
dC1ib3g7Cit9CitpbnB1dFt0eXBlPSJzZWFyY2giXTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlv
biB7CisgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsKK30KK3RleHRhcmVhIHsKKyAgb3ZlcmZs
b3c6IGF1dG87CisgIHZlcnRpY2FsLWFsaWduOiB0b3A7Cit9CisvKiBWYXJpYWJsZXMubGVzcwor
ICogVmFyaWFibGVzIHRvIGN1c3RvbWl6ZSB0aGUgbG9vayBhbmQgZmVlbCBvZiBCb290c3RyYXAK
KyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
ICovCisvKiBNaXhpbnMubGVzcworICogU25pcHBldHMgb2YgcmV1c2FibGUgQ1NTIHRvIGRldmVs
b3AgZmFzdGVyIGFuZCBrZWVwIGNvZGUgcmVhZGFibGUKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKgorICog
U2NhZmZvbGRpbmcKKyAqIEJhc2ljIGFuZCBnbG9iYWwgc3R5bGVzIGZvciBnZW5lcmF0aW5nIGEg
Z3JpZCBzeXN0ZW0sIHN0cnVjdHVyYWwgbGF5b3V0LCBhbmQgcGFnZSB0ZW1wbGF0ZXMKKyAqIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KK2JvZHkgeworICBiYWNrZ3JvdW5k
LWNvbG9yOiAjZmZmZmZmOworICBtYXJnaW46IDA7CisgIGZvbnQtZmFtaWx5OiAiSGVsdmV0aWNh
IE5ldWUiLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmOworICBmb250LXNpemU6IDEzcHg7
CisgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CisgIGxpbmUtaGVpZ2h0OiAxOHB4OworICBjb2xvcjog
IzQwNDA0MDsKK30KKy5jb250YWluZXIgeworICB3aWR0aDogOTQwcHg7CisgIG1hcmdpbi1sZWZ0
OiBhdXRvOworICBtYXJnaW4tcmlnaHQ6IGF1dG87CisgIHpvb206IDE7Cit9CisuY29udGFpbmVy
OmJlZm9yZSwgLmNvbnRhaW5lcjphZnRlciB7CisgIGRpc3BsYXk6IHRhYmxlOworICBjb250ZW50
OiAiIjsKKyAgem9vbTogMTsKK30KKy5jb250YWluZXI6YWZ0ZXIgeworICBjbGVhcjogYm90aDsK
K30KKy5jb250YWluZXItZmx1aWQgeworICBwb3NpdGlvbjogcmVsYXRpdmU7CisgIG1pbi13aWR0
aDogOTQwcHg7CisgIHBhZGRpbmctbGVmdDogMjBweDsKKyAgcGFkZGluZy1yaWdodDogMjBweDsK
KyAgem9vbTogMTsKK30KKy5jb250YWluZXItZmx1aWQ6YmVmb3JlLCAuY29udGFpbmVyLWZsdWlk
OmFmdGVyIHsKKyAgZGlzcGxheTogdGFibGU7CisgIGNvbnRlbnQ6ICIiOworICB6b29tOiAxOwor
fQorLmNvbnRhaW5lci1mbHVpZDphZnRlciB7CisgIGNsZWFyOiBib3RoOworfQorLmNvbnRhaW5l
ci1mbHVpZCA+IC5zaWRlYmFyIHsKKyAgcG9zaXRpb246IGFic29sdXRlOworICB0b3A6IDA7Cisg
IGxlZnQ6IDIwcHg7CisgIHdpZHRoOiAyMjBweDsKK30KKy5jb250YWluZXItZmx1aWQgPiAuY29u
dGVudCB7CisgIG1hcmdpbi1sZWZ0OiAyNDBweDsKK30KK2EgeworICBjb2xvcjogIzAwNjlkNjsK
KyAgdGV4dC1kZWNvcmF0aW9uOiBub25lOworICBsaW5lLWhlaWdodDogaW5oZXJpdDsKKyAgZm9u
dC13ZWlnaHQ6IGluaGVyaXQ7Cit9CithOmhvdmVyIHsKKyAgY29sb3I6ICMwMDQzOGE7CisgIHRl
eHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworfQorLnB1bGwtcmlnaHQgeworICBmbG9hdDogcmln
aHQ7Cit9CisucHVsbC1sZWZ0IHsKKyAgZmxvYXQ6IGxlZnQ7Cit9CisuaGlkZSB7CisgIGRpc3Bs
YXk6IG5vbmU7Cit9Cisuc2hvdyB7CisgIGRpc3BsYXk6IGJsb2NrOworfQorLnJvdyB7CisgIHpv
b206IDE7CisgIG1hcmdpbi1sZWZ0OiAtMjBweDsKK30KKy5yb3c6YmVmb3JlLCAucm93OmFmdGVy
IHsKKyAgZGlzcGxheTogdGFibGU7CisgIGNvbnRlbnQ6ICIiOworICB6b29tOiAxOworfQorLnJv
dzphZnRlciB7CisgIGNsZWFyOiBib3RoOworfQorLnJvdyA+IFtjbGFzcyo9InNwYW4iXSB7Cisg
IGRpc3BsYXk6IGlubGluZTsKKyAgZmxvYXQ6IGxlZnQ7CisgIG1hcmdpbi1sZWZ0OiAyMHB4Owor
fQorLnNwYW4xIHsKKyAgd2lkdGg6IDQwcHg7Cit9Cisuc3BhbjIgeworICB3aWR0aDogMTAwcHg7
Cit9Cisuc3BhbjMgeworICB3aWR0aDogMTYwcHg7Cit9Cisuc3BhbjQgeworICB3aWR0aDogMjIw
cHg7Cit9Cisuc3BhbjUgeworICB3aWR0aDogMjgwcHg7Cit9Cisuc3BhbjYgeworICB3aWR0aDog
MzQwcHg7Cit9Cisuc3BhbjcgeworICB3aWR0aDogNDAwcHg7Cit9Cisuc3BhbjggeworICB3aWR0
aDogNDYwcHg7Cit9Cisuc3BhbjkgeworICB3aWR0aDogNTIwcHg7Cit9Cisuc3BhbjEwIHsKKyAg
d2lkdGg6IDU4MHB4OworfQorLnNwYW4xMSB7CisgIHdpZHRoOiA2NDBweDsKK30KKy5zcGFuMTIg
eworICB3aWR0aDogNzAwcHg7Cit9Cisuc3BhbjEzIHsKKyAgd2lkdGg6IDc2MHB4OworfQorLnNw
YW4xNCB7CisgIHdpZHRoOiA4MjBweDsKK30KKy5zcGFuMTUgeworICB3aWR0aDogODgwcHg7Cit9
Cisuc3BhbjE2IHsKKyAgd2lkdGg6IDk0MHB4OworfQorLnNwYW4xNyB7CisgIHdpZHRoOiAxMDAw
cHg7Cit9Cisuc3BhbjE4IHsKKyAgd2lkdGg6IDEwNjBweDsKK30KKy5zcGFuMTkgeworICB3aWR0
aDogMTEyMHB4OworfQorLnNwYW4yMCB7CisgIHdpZHRoOiAxMTgwcHg7Cit9Cisuc3BhbjIxIHsK
KyAgd2lkdGg6IDEyNDBweDsKK30KKy5zcGFuMjIgeworICB3aWR0aDogMTMwMHB4OworfQorLnNw
YW4yMyB7CisgIHdpZHRoOiAxMzYwcHg7Cit9Cisuc3BhbjI0IHsKKyAgd2lkdGg6IDE0MjBweDsK
K30KKy5yb3cgPiAub2Zmc2V0MSB7CisgIG1hcmdpbi1sZWZ0OiA4MHB4OworfQorLnJvdyA+IC5v
ZmZzZXQyIHsKKyAgbWFyZ2luLWxlZnQ6IDE0MHB4OworfQorLnJvdyA+IC5vZmZzZXQzIHsKKyAg
bWFyZ2luLWxlZnQ6IDIwMHB4OworfQorLnJvdyA+IC5vZmZzZXQ0IHsKKyAgbWFyZ2luLWxlZnQ6
IDI2MHB4OworfQorLnJvdyA+IC5vZmZzZXQ1IHsKKyAgbWFyZ2luLWxlZnQ6IDMyMHB4OworfQor
LnJvdyA+IC5vZmZzZXQ2IHsKKyAgbWFyZ2luLWxlZnQ6IDM4MHB4OworfQorLnJvdyA+IC5vZmZz
ZXQ3IHsKKyAgbWFyZ2luLWxlZnQ6IDQ0MHB4OworfQorLnJvdyA+IC5vZmZzZXQ4IHsKKyAgbWFy
Z2luLWxlZnQ6IDUwMHB4OworfQorLnJvdyA+IC5vZmZzZXQ5IHsKKyAgbWFyZ2luLWxlZnQ6IDU2
MHB4OworfQorLnJvdyA+IC5vZmZzZXQxMCB7CisgIG1hcmdpbi1sZWZ0OiA2MjBweDsKK30KKy5y
b3cgPiAub2Zmc2V0MTEgeworICBtYXJnaW4tbGVmdDogNjgwcHg7Cit9Cisucm93ID4gLm9mZnNl
dDEyIHsKKyAgbWFyZ2luLWxlZnQ6IDc0MHB4OworfQorLnNwYW4tb25lLXRoaXJkIHsKKyAgd2lk
dGg6IDMwMHB4OworfQorLnNwYW4tdHdvLXRoaXJkcyB7CisgIHdpZHRoOiA2MjBweDsKK30KKy5y
b3cgPiAub2Zmc2V0LW9uZS10aGlyZCB7CisgIG1hcmdpbi1sZWZ0OiAzNDBweDsKK30KKy5yb3cg
PiAub2Zmc2V0LXR3by10aGlyZHMgeworICBtYXJnaW4tbGVmdDogNjYwcHg7Cit9CisvKiBUeXBv
Z3JhcGh5Lmxlc3MKKyAqIEhlYWRpbmdzLCBib2R5IHRleHQsIGxpc3RzLCBjb2RlLCBhbmQgbW9y
ZSBmb3IgYSB2ZXJzYXRpbGUgYW5kIGR1cmFibGUgdHlwb2dyYXBoeSBzeXN0ZW0KKyAqIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KK3AgeworICBmb250LXNpemU6IDEzcHg7Cisg
IGZvbnQtd2VpZ2h0OiBub3JtYWw7CisgIGxpbmUtaGVpZ2h0OiAxOHB4OworICBtYXJnaW4tYm90
dG9tOiA5cHg7Cit9CitwIHNtYWxsIHsKKyAgZm9udC1zaXplOiAxMXB4OworICBjb2xvcjogI2Jm
YmZiZjsKK30KK2gxLAoraDIsCitoMywKK2g0LAoraDUsCitoNiB7CisgIGZvbnQtd2VpZ2h0OiBi
b2xkOworICBjb2xvcjogIzQwNDA0MDsKK30KK2gxIHNtYWxsLAoraDIgc21hbGwsCitoMyBzbWFs
bCwKK2g0IHNtYWxsLAoraDUgc21hbGwsCitoNiBzbWFsbCB7CisgIGNvbG9yOiAjYmZiZmJmOwor
fQoraDEgeworICBtYXJnaW4tYm90dG9tOiAxOHB4OworICBmb250LXNpemU6IDMwcHg7CisgIGxp
bmUtaGVpZ2h0OiAzNnB4OworfQoraDEgc21hbGwgeworICBmb250LXNpemU6IDE4cHg7Cit9Cito
MiB7CisgIGZvbnQtc2l6ZTogMjRweDsKKyAgbGluZS1oZWlnaHQ6IDM2cHg7Cit9CitoMiBzbWFs
bCB7CisgIGZvbnQtc2l6ZTogMTRweDsKK30KK2gzLAoraDQsCitoNSwKK2g2IHsKKyAgbGluZS1o
ZWlnaHQ6IDM2cHg7Cit9CitoMyB7CisgIGZvbnQtc2l6ZTogMThweDsKK30KK2gzIHNtYWxsIHsK
KyAgZm9udC1zaXplOiAxNHB4OworfQoraDQgeworICBmb250LXNpemU6IDE2cHg7Cit9CitoNCBz
bWFsbCB7CisgIGZvbnQtc2l6ZTogMTJweDsKK30KK2g1IHsKKyAgZm9udC1zaXplOiAxNHB4Owor
fQoraDYgeworICBmb250LXNpemU6IDEzcHg7CisgIGNvbG9yOiAjYmZiZmJmOworICB0ZXh0LXRy
YW5zZm9ybTogdXBwZXJjYXNlOworfQordWwsIG9sIHsKKyAgbWFyZ2luOiAwIDAgMThweCAyNXB4
OworfQordWwgdWwsCit1bCBvbCwKK29sIG9sLAorb2wgdWwgeworICBtYXJnaW4tYm90dG9tOiAw
OworfQordWwgeworICBsaXN0LXN0eWxlOiBkaXNjOworfQorb2wgeworICBsaXN0LXN0eWxlOiBk
ZWNpbWFsOworfQorbGkgeworICBsaW5lLWhlaWdodDogMThweDsKKyAgY29sb3I6ICM4MDgwODA7
Cit9Cit1bC51bnN0eWxlZCB7CisgIGxpc3Qtc3R5bGU6IG5vbmU7CisgIG1hcmdpbi1sZWZ0OiAw
OworfQorZGwgeworICBtYXJnaW4tYm90dG9tOiAxOHB4OworfQorZGwgZHQsIGRsIGRkIHsKKyAg
bGluZS1oZWlnaHQ6IDE4cHg7Cit9CitkbCBkdCB7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQor
ZGwgZGQgeworICBtYXJnaW4tbGVmdDogOXB4OworfQoraHIgeworICBtYXJnaW46IDIwcHggMCAx
OXB4OworICBib3JkZXI6IDA7CisgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZWVlOworfQor
c3Ryb25nIHsKKyAgZm9udC1zdHlsZTogaW5oZXJpdDsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9
CitlbSB7CisgIGZvbnQtc3R5bGU6IGl0YWxpYzsKKyAgZm9udC13ZWlnaHQ6IGluaGVyaXQ7Cisg
IGxpbmUtaGVpZ2h0OiBpbmhlcml0OworfQorLm11dGVkIHsKKyAgY29sb3I6ICNiZmJmYmY7Cit9
CitibG9ja3F1b3RlIHsKKyAgbWFyZ2luLWJvdHRvbTogMThweDsKKyAgYm9yZGVyLWxlZnQ6IDVw
eCBzb2xpZCAjZWVlOworICBwYWRkaW5nLWxlZnQ6IDE1cHg7Cit9CitibG9ja3F1b3RlIHAgewor
ICBmb250LXNpemU6IDE0cHg7CisgIGZvbnQtd2VpZ2h0OiAzMDA7CisgIGxpbmUtaGVpZ2h0OiAx
OHB4OworICBtYXJnaW4tYm90dG9tOiAwOworfQorYmxvY2txdW90ZSBzbWFsbCB7CisgIGRpc3Bs
YXk6IGJsb2NrOworICBmb250LXNpemU6IDEycHg7CisgIGZvbnQtd2VpZ2h0OiAzMDA7CisgIGxp
bmUtaGVpZ2h0OiAxOHB4OworICBjb2xvcjogI2JmYmZiZjsKK30KK2Jsb2NrcXVvdGUgc21hbGw6
YmVmb3JlIHsKKyAgY29udGVudDogJ1wyMDE0IFwwMEEwJzsKK30KK2FkZHJlc3MgeworICBkaXNw
bGF5OiBibG9jazsKKyAgbGluZS1oZWlnaHQ6IDE4cHg7CisgIG1hcmdpbi1ib3R0b206IDE4cHg7
Cit9Citjb2RlLCBwcmUgeworICBwYWRkaW5nOiAwIDNweCAycHg7CisgIGZvbnQtZmFtaWx5OiBN
b25hY28sIEFuZGFsZSBNb25vLCBDb3VyaWVyIE5ldywgbW9ub3NwYWNlOworICBmb250LXNpemU6
IDEycHg7CisgIC13ZWJraXQtYm9yZGVyLXJhZGl1czogM3B4OworICAtbW96LWJvcmRlci1yYWRp
dXM6IDNweDsKKyAgYm9yZGVyLXJhZGl1czogM3B4OworfQorY29kZSB7CisgIGJhY2tncm91bmQt
Y29sb3I6ICNmZWU5Y2M7CisgIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNzUpOworICBwYWRkaW5n
OiAxcHggM3B4OworfQorcHJlIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2Y1ZjVmNTsKKyAgZGlz
cGxheTogYmxvY2s7CisgIHBhZGRpbmc6IDguNXB4OworICBtYXJnaW46IDAgMCAxOHB4OworICBs
aW5lLWhlaWdodDogMThweDsKKyAgZm9udC1zaXplOiAxMnB4OworICBib3JkZXI6IDFweCBzb2xp
ZCAjY2NjOworICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuMTUpOworICAtd2Vi
a2l0LWJvcmRlci1yYWRpdXM6IDNweDsKKyAgLW1vei1ib3JkZXItcmFkaXVzOiAzcHg7CisgIGJv
cmRlci1yYWRpdXM6IDNweDsKKyAgd2hpdGUtc3BhY2U6IHByZTsKKyAgd2hpdGUtc3BhY2U6IHBy
ZS13cmFwOworICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7Cit9CisvKiBGb3Jtcy5sZXNzCisgKiBC
YXNlIHN0eWxlcyBmb3IgdmFyaW91cyBpbnB1dCB0eXBlcywgZm9ybSBsYXlvdXRzLCBhbmQgc3Rh
dGVzCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tICovCitmb3JtIHsKKyAgbWFyZ2luLWJvdHRvbTogMThweDsKK30KK2ZpZWxk
c2V0IHsKKyAgbWFyZ2luLWJvdHRvbTogMThweDsKKyAgcGFkZGluZy10b3A6IDE4cHg7Cit9Citm
aWVsZHNldCBsZWdlbmQgeworICBkaXNwbGF5OiBibG9jazsKKyAgcGFkZGluZy1sZWZ0OiAxNTBw
eDsKKyAgZm9udC1zaXplOiAxOS41cHg7CisgIGxpbmUtaGVpZ2h0OiAxOworICBjb2xvcjogIzQw
NDA0MDsKKyAgKnBhZGRpbmc6IDAgMCA1cHggMTQ1cHg7CisgIC8qIElFNi03ICovCisKKyAgKmxp
bmUtaGVpZ2h0OiAxLjU7CisgIC8qIElFNi03ICovCisKK30KK2Zvcm0gLmNsZWFyZml4IHsKKyAg
bWFyZ2luLWJvdHRvbTogMThweDsKKyAgem9vbTogMTsKK30KK2Zvcm0gLmNsZWFyZml4OmJlZm9y
ZSwgZm9ybSAuY2xlYXJmaXg6YWZ0ZXIgeworICBkaXNwbGF5OiB0YWJsZTsKKyAgY29udGVudDog
IiI7CisgIHpvb206IDE7Cit9Citmb3JtIC5jbGVhcmZpeDphZnRlciB7CisgIGNsZWFyOiBib3Ro
OworfQorbGFiZWwsCitpbnB1dCwKK3NlbGVjdCwKK3RleHRhcmVhIHsKKyAgZm9udC1mYW1pbHk6
ICJIZWx2ZXRpY2EgTmV1ZSIsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7CisgIGZvbnQt
c2l6ZTogMTNweDsKKyAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKKyAgbGluZS1oZWlnaHQ6IG5vcm1h
bDsKK30KK2xhYmVsIHsKKyAgcGFkZGluZy10b3A6IDZweDsKKyAgZm9udC1zaXplOiAxM3B4Owor
ICBsaW5lLWhlaWdodDogMThweDsKKyAgZmxvYXQ6IGxlZnQ7CisgIHdpZHRoOiAxMzBweDsKKyAg
dGV4dC1hbGlnbjogcmlnaHQ7CisgIGNvbG9yOiAjNDA0MDQwOworfQorZm9ybSAuaW5wdXQgewor
ICBtYXJnaW4tbGVmdDogMTUwcHg7Cit9CitpbnB1dFt0eXBlPWNoZWNrYm94XSwgaW5wdXRbdHlw
ZT1yYWRpb10geworICBjdXJzb3I6IHBvaW50ZXI7Cit9CitpbnB1dCwKK3RleHRhcmVhLAorc2Vs
ZWN0LAorLnVuZWRpdGFibGUtaW5wdXQgeworICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CisgIHdp
ZHRoOiAyMTBweDsKKyAgaGVpZ2h0OiAxOHB4OworICBwYWRkaW5nOiA0cHg7CisgIGZvbnQtc2l6
ZTogMTNweDsKKyAgbGluZS1oZWlnaHQ6IDE4cHg7CisgIGNvbG9yOiAjODA4MDgwOworICBib3Jk
ZXI6IDFweCBzb2xpZCAjY2NjOworICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDNweDsKKyAgLW1v
ei1ib3JkZXItcmFkaXVzOiAzcHg7CisgIGJvcmRlci1yYWRpdXM6IDNweDsKK30KK3NlbGVjdCB7
CisgIHBhZGRpbmc6IGluaXRpYWw7Cit9CitpbnB1dFt0eXBlPWNoZWNrYm94XSwgaW5wdXRbdHlw
ZT1yYWRpb10geworICB3aWR0aDogYXV0bzsKKyAgaGVpZ2h0OiBhdXRvOworICBwYWRkaW5nOiAw
OworICBtYXJnaW46IDNweCAwOworICAqbWFyZ2luLXRvcDogMDsKKyAgLyogSUU2LTcgKi8KKwor
ICBsaW5lLWhlaWdodDogbm9ybWFsOworICBib3JkZXI6IG5vbmU7Cit9CitpbnB1dFt0eXBlPWZp
bGVdIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjsKKyAgcGFkZGluZzogaW5pdGlhbDsK
KyAgYm9yZGVyOiBpbml0aWFsOworICBsaW5lLWhlaWdodDogaW5pdGlhbDsKKyAgLXdlYmtpdC1i
b3gtc2hhZG93OiBub25lOworICAtbW96LWJveC1zaGFkb3c6IG5vbmU7CisgIGJveC1zaGFkb3c6
IG5vbmU7Cit9CitpbnB1dFt0eXBlPWJ1dHRvbl0sIGlucHV0W3R5cGU9cmVzZXRdLCBpbnB1dFt0
eXBlPXN1Ym1pdF0geworICB3aWR0aDogYXV0bzsKKyAgaGVpZ2h0OiBhdXRvOworfQorc2VsZWN0
LCBpbnB1dFt0eXBlPWZpbGVdIHsKKyAgaGVpZ2h0OiAyN3B4OworICAqaGVpZ2h0OiBhdXRvOwor
ICBsaW5lLWhlaWdodDogMjdweDsKKyAgKm1hcmdpbi10b3A6IDRweDsKKyAgLyogRm9yIElFNywg
YWRkIHRvcCBtYXJnaW4gdG8gYWxpZ24gc2VsZWN0IHdpdGggbGFiZWxzICovCisKK30KK3NlbGVj
dFttdWx0aXBsZV0geworICBoZWlnaHQ6IGluaGVyaXQ7CisgIGJhY2tncm91bmQtY29sb3I6ICNm
ZmZmZmY7Cit9Cit0ZXh0YXJlYSB7CisgIGhlaWdodDogYXV0bzsKK30KKy51bmVkaXRhYmxlLWlu
cHV0IHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjsKKyAgZGlzcGxheTogYmxvY2s7Cisg
IGJvcmRlci1jb2xvcjogI2VlZTsKKyAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAwIDFweCAy
cHggcmdiYSgwLCAwLCAwLCAwLjAyNSk7CisgIC1tb3otYm94LXNoYWRvdzogaW5zZXQgMCAxcHgg
MnB4IHJnYmEoMCwgMCwgMCwgMC4wMjUpOworICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAycHgg
cmdiYSgwLCAwLCAwLCAwLjAyNSk7CisgIGN1cnNvcjogbm90LWFsbG93ZWQ7Cit9Cis6LW1vei1w
bGFjZWhvbGRlciB7CisgIGNvbG9yOiAjYmZiZmJmOworfQorOjotd2Via2l0LWlucHV0LXBsYWNl
aG9sZGVyIHsKKyAgY29sb3I6ICNiZmJmYmY7Cit9CitpbnB1dCwgdGV4dGFyZWEgeworICAtd2Vi
a2l0LXRyYW5zaXRpb246IGJvcmRlciBsaW5lYXIgMC4ycywgYm94LXNoYWRvdyBsaW5lYXIgMC4y
czsKKyAgLW1vei10cmFuc2l0aW9uOiBib3JkZXIgbGluZWFyIDAuMnMsIGJveC1zaGFkb3cgbGlu
ZWFyIDAuMnM7CisgIC1tcy10cmFuc2l0aW9uOiBib3JkZXIgbGluZWFyIDAuMnMsIGJveC1zaGFk
b3cgbGluZWFyIDAuMnM7CisgIC1vLXRyYW5zaXRpb246IGJvcmRlciBsaW5lYXIgMC4ycywgYm94
LXNoYWRvdyBsaW5lYXIgMC4yczsKKyAgdHJhbnNpdGlvbjogYm9yZGVyIGxpbmVhciAwLjJzLCBi
b3gtc2hhZG93IGxpbmVhciAwLjJzOworICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IDAgMXB4
IDNweCByZ2JhKDAsIDAsIDAsIDAuMSk7CisgIC1tb3otYm94LXNoYWRvdzogaW5zZXQgMCAxcHgg
M3B4IHJnYmEoMCwgMCwgMCwgMC4xKTsKKyAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggM3B4IHJn
YmEoMCwgMCwgMCwgMC4xKTsKK30KK2lucHV0OmZvY3VzLCB0ZXh0YXJlYTpmb2N1cyB7CisgIG91
dGxpbmU6IDA7CisgIGJvcmRlci1jb2xvcjogcmdiYSg4MiwgMTY4LCAyMzYsIDAuOCk7CisgIC13
ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xKSwgMCAw
IDhweCByZ2JhKDgyLCAxNjgsIDIzNiwgMC42KTsKKyAgLW1vei1ib3gtc2hhZG93OiBpbnNldCAw
IDFweCAzcHggcmdiYSgwLCAwLCAwLCAwLjEpLCAwIDAgOHB4IHJnYmEoODIsIDE2OCwgMjM2LCAw
LjYpOworICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAzcHggcmdiYSgwLCAwLCAwLCAwLjEpLCAw
IDAgOHB4IHJnYmEoODIsIDE2OCwgMjM2LCAwLjYpOworfQoraW5wdXRbdHlwZT1maWxlXTpmb2N1
cywgaW5wdXRbdHlwZT1jaGVja2JveF06Zm9jdXMsIHNlbGVjdDpmb2N1cyB7CisgIC13ZWJraXQt
Ym94LXNoYWRvdzogbm9uZTsKKyAgLW1vei1ib3gtc2hhZG93OiBub25lOworICBib3gtc2hhZG93
OiBub25lOworICBvdXRsaW5lOiAxcHggZG90dGVkICM2NjY7Cit9Citmb3JtIC5jbGVhcmZpeC5l
cnJvciA+IGxhYmVsLCBmb3JtIC5jbGVhcmZpeC5lcnJvciAuaGVscC1ibG9jaywgZm9ybSAuY2xl
YXJmaXguZXJyb3IgLmhlbHAtaW5saW5lIHsKKyAgY29sb3I6ICNiOTRhNDg7Cit9Citmb3JtIC5j
bGVhcmZpeC5lcnJvciBpbnB1dCwgZm9ybSAuY2xlYXJmaXguZXJyb3IgdGV4dGFyZWEgeworICBj
b2xvcjogI2I5NGE0ODsKKyAgYm9yZGVyLWNvbG9yOiAjZWU1ZjViOworfQorZm9ybSAuY2xlYXJm
aXguZXJyb3IgaW5wdXQ6Zm9jdXMsIGZvcm0gLmNsZWFyZml4LmVycm9yIHRleHRhcmVhOmZvY3Vz
IHsKKyAgYm9yZGVyLWNvbG9yOiAjZTkzMjJkOworICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMCA2
cHggI2Y4YjliNzsKKyAgLW1vei1ib3gtc2hhZG93OiAwIDAgNnB4ICNmOGI5Yjc7CisgIGJveC1z
aGFkb3c6IDAgMCA2cHggI2Y4YjliNzsKK30KK2Zvcm0gLmNsZWFyZml4LmVycm9yIC5pbnB1dC1w
cmVwZW5kIC5hZGQtb24sIGZvcm0gLmNsZWFyZml4LmVycm9yIC5pbnB1dC1hcHBlbmQgLmFkZC1v
biB7CisgIGNvbG9yOiAjYjk0YTQ4OworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmNlNmU2OworICBi
b3JkZXItY29sb3I6ICNiOTRhNDg7Cit9Citmb3JtIC5jbGVhcmZpeC53YXJuaW5nID4gbGFiZWws
IGZvcm0gLmNsZWFyZml4Lndhcm5pbmcgLmhlbHAtYmxvY2ssIGZvcm0gLmNsZWFyZml4Lndhcm5p
bmcgLmhlbHAtaW5saW5lIHsKKyAgY29sb3I6ICNjMDk4NTM7Cit9Citmb3JtIC5jbGVhcmZpeC53
YXJuaW5nIGlucHV0LCBmb3JtIC5jbGVhcmZpeC53YXJuaW5nIHRleHRhcmVhIHsKKyAgY29sb3I6
ICNjMDk4NTM7CisgIGJvcmRlci1jb2xvcjogI2NjYWU2NDsKK30KK2Zvcm0gLmNsZWFyZml4Lndh
cm5pbmcgaW5wdXQ6Zm9jdXMsIGZvcm0gLmNsZWFyZml4Lndhcm5pbmcgdGV4dGFyZWE6Zm9jdXMg
eworICBib3JkZXItY29sb3I6ICNiZTlhM2Y7CisgIC13ZWJraXQtYm94LXNoYWRvdzogMCAwIDZw
eCAjZTVkNmIxOworICAtbW96LWJveC1zaGFkb3c6IDAgMCA2cHggI2U1ZDZiMTsKKyAgYm94LXNo
YWRvdzogMCAwIDZweCAjZTVkNmIxOworfQorZm9ybSAuY2xlYXJmaXgud2FybmluZyAuaW5wdXQt
cHJlcGVuZCAuYWRkLW9uLCBmb3JtIC5jbGVhcmZpeC53YXJuaW5nIC5pbnB1dC1hcHBlbmQgLmFk
ZC1vbiB7CisgIGNvbG9yOiAjYzA5ODUzOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDJiODc3Owor
ICBib3JkZXItY29sb3I6ICNjMDk4NTM7Cit9Citmb3JtIC5jbGVhcmZpeC5zdWNjZXNzID4gbGFi
ZWwsIGZvcm0gLmNsZWFyZml4LnN1Y2Nlc3MgLmhlbHAtYmxvY2ssIGZvcm0gLmNsZWFyZml4LnN1
Y2Nlc3MgLmhlbHAtaW5saW5lIHsKKyAgY29sb3I6ICM0Njg4NDc7Cit9Citmb3JtIC5jbGVhcmZp
eC5zdWNjZXNzIGlucHV0LCBmb3JtIC5jbGVhcmZpeC5zdWNjZXNzIHRleHRhcmVhIHsKKyAgY29s
b3I6ICM0Njg4NDc7CisgIGJvcmRlci1jb2xvcjogIzU3YTk1NzsKK30KK2Zvcm0gLmNsZWFyZml4
LnN1Y2Nlc3MgaW5wdXQ6Zm9jdXMsIGZvcm0gLmNsZWFyZml4LnN1Y2Nlc3MgdGV4dGFyZWE6Zm9j
dXMgeworICBib3JkZXItY29sb3I6ICM0NTg4NDU7CisgIC13ZWJraXQtYm94LXNoYWRvdzogMCAw
IDZweCAjOWFjYzlhOworICAtbW96LWJveC1zaGFkb3c6IDAgMCA2cHggIzlhY2M5YTsKKyAgYm94
LXNoYWRvdzogMCAwIDZweCAjOWFjYzlhOworfQorZm9ybSAuY2xlYXJmaXguc3VjY2VzcyAuaW5w
dXQtcHJlcGVuZCAuYWRkLW9uLCBmb3JtIC5jbGVhcmZpeC5zdWNjZXNzIC5pbnB1dC1hcHBlbmQg
LmFkZC1vbiB7CisgIGNvbG9yOiAjNDY4ODQ3OworICBiYWNrZ3JvdW5kLWNvbG9yOiAjYmNkZGJj
OworICBib3JkZXItY29sb3I6ICM0Njg4NDc7Cit9CisuaW5wdXQtbWluaSwKK2lucHV0Lm1pbmks
Cit0ZXh0YXJlYS5taW5pLAorc2VsZWN0Lm1pbmkgeworICB3aWR0aDogNjBweDsKK30KKy5pbnB1
dC1zbWFsbCwKK2lucHV0LnNtYWxsLAordGV4dGFyZWEuc21hbGwsCitzZWxlY3Quc21hbGwgewor
ICB3aWR0aDogOTBweDsKK30KKy5pbnB1dC1tZWRpdW0sCitpbnB1dC5tZWRpdW0sCit0ZXh0YXJl
YS5tZWRpdW0sCitzZWxlY3QubWVkaXVtIHsKKyAgd2lkdGg6IDE1MHB4OworfQorLmlucHV0LWxh
cmdlLAoraW5wdXQubGFyZ2UsCit0ZXh0YXJlYS5sYXJnZSwKK3NlbGVjdC5sYXJnZSB7CisgIHdp
ZHRoOiAyMTBweDsKK30KKy5pbnB1dC14bGFyZ2UsCitpbnB1dC54bGFyZ2UsCit0ZXh0YXJlYS54
bGFyZ2UsCitzZWxlY3QueGxhcmdlIHsKKyAgd2lkdGg6IDI3MHB4OworfQorLmlucHV0LXh4bGFy
Z2UsCitpbnB1dC54eGxhcmdlLAordGV4dGFyZWEueHhsYXJnZSwKK3NlbGVjdC54eGxhcmdlIHsK
KyAgd2lkdGg6IDUzMHB4OworfQordGV4dGFyZWEueHhsYXJnZSB7CisgIG92ZXJmbG93LXk6IGF1
dG87Cit9CitpbnB1dC5zcGFuMSwgdGV4dGFyZWEuc3BhbjEgeworICBkaXNwbGF5OiBpbmxpbmUt
YmxvY2s7CisgIGZsb2F0OiBub25lOworICB3aWR0aDogMzBweDsKKyAgbWFyZ2luLWxlZnQ6IDA7
Cit9CitpbnB1dC5zcGFuMiwgdGV4dGFyZWEuc3BhbjIgeworICBkaXNwbGF5OiBpbmxpbmUtYmxv
Y2s7CisgIGZsb2F0OiBub25lOworICB3aWR0aDogOTBweDsKKyAgbWFyZ2luLWxlZnQ6IDA7Cit9
CitpbnB1dC5zcGFuMywgdGV4dGFyZWEuc3BhbjMgeworICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7
CisgIGZsb2F0OiBub25lOworICB3aWR0aDogMTUwcHg7CisgIG1hcmdpbi1sZWZ0OiAwOworfQor
aW5wdXQuc3BhbjQsIHRleHRhcmVhLnNwYW40IHsKKyAgZGlzcGxheTogaW5saW5lLWJsb2NrOwor
ICBmbG9hdDogbm9uZTsKKyAgd2lkdGg6IDIxMHB4OworICBtYXJnaW4tbGVmdDogMDsKK30KK2lu
cHV0LnNwYW41LCB0ZXh0YXJlYS5zcGFuNSB7CisgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKKyAg
ZmxvYXQ6IG5vbmU7CisgIHdpZHRoOiAyNzBweDsKKyAgbWFyZ2luLWxlZnQ6IDA7Cit9CitpbnB1
dC5zcGFuNiwgdGV4dGFyZWEuc3BhbjYgeworICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CisgIGZs
b2F0OiBub25lOworICB3aWR0aDogMzMwcHg7CisgIG1hcmdpbi1sZWZ0OiAwOworfQoraW5wdXQu
c3BhbjcsIHRleHRhcmVhLnNwYW43IHsKKyAgZGlzcGxheTogaW5saW5lLWJsb2NrOworICBmbG9h
dDogbm9uZTsKKyAgd2lkdGg6IDM5MHB4OworICBtYXJnaW4tbGVmdDogMDsKK30KK2lucHV0LnNw
YW44LCB0ZXh0YXJlYS5zcGFuOCB7CisgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKKyAgZmxvYXQ6
IG5vbmU7CisgIHdpZHRoOiA0NTBweDsKKyAgbWFyZ2luLWxlZnQ6IDA7Cit9CitpbnB1dC5zcGFu
OSwgdGV4dGFyZWEuc3BhbjkgeworICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CisgIGZsb2F0OiBu
b25lOworICB3aWR0aDogNTEwcHg7CisgIG1hcmdpbi1sZWZ0OiAwOworfQoraW5wdXQuc3BhbjEw
LCB0ZXh0YXJlYS5zcGFuMTAgeworICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CisgIGZsb2F0OiBu
b25lOworICB3aWR0aDogNTcwcHg7CisgIG1hcmdpbi1sZWZ0OiAwOworfQoraW5wdXQuc3BhbjEx
LCB0ZXh0YXJlYS5zcGFuMTEgeworICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CisgIGZsb2F0OiBu
b25lOworICB3aWR0aDogNjMwcHg7CisgIG1hcmdpbi1sZWZ0OiAwOworfQoraW5wdXQuc3BhbjEy
LCB0ZXh0YXJlYS5zcGFuMTIgeworICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CisgIGZsb2F0OiBu
b25lOworICB3aWR0aDogNjkwcHg7CisgIG1hcmdpbi1sZWZ0OiAwOworfQoraW5wdXQuc3BhbjEz
LCB0ZXh0YXJlYS5zcGFuMTMgeworICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CisgIGZsb2F0OiBu
b25lOworICB3aWR0aDogNzUwcHg7CisgIG1hcmdpbi1sZWZ0OiAwOworfQoraW5wdXQuc3BhbjE0
LCB0ZXh0YXJlYS5zcGFuMTQgeworICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CisgIGZsb2F0OiBu
b25lOworICB3aWR0aDogODEwcHg7CisgIG1hcmdpbi1sZWZ0OiAwOworfQoraW5wdXQuc3BhbjE1
LCB0ZXh0YXJlYS5zcGFuMTUgeworICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CisgIGZsb2F0OiBu
b25lOworICB3aWR0aDogODcwcHg7CisgIG1hcmdpbi1sZWZ0OiAwOworfQoraW5wdXQuc3BhbjE2
LCB0ZXh0YXJlYS5zcGFuMTYgeworICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CisgIGZsb2F0OiBu
b25lOworICB3aWR0aDogOTMwcHg7CisgIG1hcmdpbi1sZWZ0OiAwOworfQoraW5wdXRbZGlzYWJs
ZWRdLAorc2VsZWN0W2Rpc2FibGVkXSwKK3RleHRhcmVhW2Rpc2FibGVkXSwKK2lucHV0W3JlYWRv
bmx5XSwKK3NlbGVjdFtyZWFkb25seV0sCit0ZXh0YXJlYVtyZWFkb25seV0geworICBiYWNrZ3Jv
dW5kLWNvbG9yOiAjZjVmNWY1OworICBib3JkZXItY29sb3I6ICNkZGQ7CisgIGN1cnNvcjogbm90
LWFsbG93ZWQ7Cit9CisuYWN0aW9ucyB7CisgIGJhY2tncm91bmQ6ICNmNWY1ZjU7CisgIG1hcmdp
bi10b3A6IDE4cHg7CisgIG1hcmdpbi1ib3R0b206IDE4cHg7CisgIHBhZGRpbmc6IDE3cHggMjBw
eCAxOHB4IDE1MHB4OworICBib3JkZXItdG9wOiAxcHggc29saWQgI2RkZDsKKyAgLXdlYmtpdC1i
b3JkZXItcmFkaXVzOiAwIDAgM3B4IDNweDsKKyAgLW1vei1ib3JkZXItcmFkaXVzOiAwIDAgM3B4
IDNweDsKKyAgYm9yZGVyLXJhZGl1czogMCAwIDNweCAzcHg7Cit9CisuYWN0aW9ucyAuc2Vjb25k
YXJ5LWFjdGlvbiB7CisgIGZsb2F0OiByaWdodDsKK30KKy5hY3Rpb25zIC5zZWNvbmRhcnktYWN0
aW9uIGEgeworICBsaW5lLWhlaWdodDogMzBweDsKK30KKy5hY3Rpb25zIC5zZWNvbmRhcnktYWN0
aW9uIGE6aG92ZXIgeworICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKK30KKy5oZWxwLWlu
bGluZSwgLmhlbHAtYmxvY2sgeworICBmb250LXNpemU6IDEzcHg7CisgIGxpbmUtaGVpZ2h0OiAx
OHB4OworICBjb2xvcjogI2JmYmZiZjsKK30KKy5oZWxwLWlubGluZSB7CisgIHBhZGRpbmctbGVm
dDogNXB4OworICAqcG9zaXRpb246IHJlbGF0aXZlOworICAvKiBJRTYtNyAqLworCisgICp0b3A6
IC01cHg7CisgIC8qIElFNi03ICovCisKK30KKy5oZWxwLWJsb2NrIHsKKyAgZGlzcGxheTogYmxv
Y2s7CisgIG1heC13aWR0aDogNjAwcHg7Cit9CisuaW5saW5lLWlucHV0cyB7CisgIGNvbG9yOiAj
ODA4MDgwOworfQorLmlubGluZS1pbnB1dHMgc3BhbiB7CisgIHBhZGRpbmc6IDAgMnB4IDAgMXB4
OworfQorLmlucHV0LXByZXBlbmQgaW5wdXQsIC5pbnB1dC1hcHBlbmQgaW5wdXQgeworICAtd2Vi
a2l0LWJvcmRlci1yYWRpdXM6IDAgM3B4IDNweCAwOworICAtbW96LWJvcmRlci1yYWRpdXM6IDAg
M3B4IDNweCAwOworICBib3JkZXItcmFkaXVzOiAwIDNweCAzcHggMDsKK30KKy5pbnB1dC1wcmVw
ZW5kIC5hZGQtb24sIC5pbnB1dC1hcHBlbmQgLmFkZC1vbiB7CisgIHBvc2l0aW9uOiByZWxhdGl2
ZTsKKyAgYmFja2dyb3VuZDogI2Y1ZjVmNTsKKyAgYm9yZGVyOiAxcHggc29saWQgI2NjYzsKKyAg
ei1pbmRleDogMjsKKyAgZmxvYXQ6IGxlZnQ7CisgIGRpc3BsYXk6IGJsb2NrOworICB3aWR0aDog
YXV0bzsKKyAgbWluLXdpZHRoOiAxNnB4OworICBoZWlnaHQ6IDE4cHg7CisgIHBhZGRpbmc6IDRw
eCA0cHggNHB4IDVweDsKKyAgbWFyZ2luLXJpZ2h0OiAtMXB4OworICBmb250LXdlaWdodDogbm9y
bWFsOworICBsaW5lLWhlaWdodDogMThweDsKKyAgY29sb3I6ICNiZmJmYmY7CisgIHRleHQtYWxp
Z246IGNlbnRlcjsKKyAgdGV4dC1zaGFkb3c6IDAgMXB4IDAgI2ZmZmZmZjsKKyAgLXdlYmtpdC1i
b3JkZXItcmFkaXVzOiAzcHggMCAwIDNweDsKKyAgLW1vei1ib3JkZXItcmFkaXVzOiAzcHggMCAw
IDNweDsKKyAgYm9yZGVyLXJhZGl1czogM3B4IDAgMCAzcHg7Cit9CisuaW5wdXQtcHJlcGVuZCAu
YWN0aXZlLCAuaW5wdXQtYXBwZW5kIC5hY3RpdmUgeworICBiYWNrZ3JvdW5kOiAjYTlkYmE5Owor
ICBib3JkZXItY29sb3I6ICM0NmE1NDY7Cit9CisuaW5wdXQtcHJlcGVuZCAuYWRkLW9uIHsKKyAg
Km1hcmdpbi10b3A6IDFweDsKKyAgLyogSUU2LTcgKi8KKworfQorLmlucHV0LWFwcGVuZCBpbnB1
dCB7CisgIGZsb2F0OiBsZWZ0OworICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDNweCAwIDAgM3B4
OworICAtbW96LWJvcmRlci1yYWRpdXM6IDNweCAwIDAgM3B4OworICBib3JkZXItcmFkaXVzOiAz
cHggMCAwIDNweDsKK30KKy5pbnB1dC1hcHBlbmQgLmFkZC1vbiB7CisgIC13ZWJraXQtYm9yZGVy
LXJhZGl1czogMCAzcHggM3B4IDA7CisgIC1tb3otYm9yZGVyLXJhZGl1czogMCAzcHggM3B4IDA7
CisgIGJvcmRlci1yYWRpdXM6IDAgM3B4IDNweCAwOworICBtYXJnaW4tcmlnaHQ6IDA7CisgIG1h
cmdpbi1sZWZ0OiAtMXB4OworfQorLmlucHV0cy1saXN0IHsKKyAgbWFyZ2luOiAwIDAgNXB4Owor
ICB3aWR0aDogMTAwJTsKK30KKy5pbnB1dHMtbGlzdCBsaSB7CisgIGRpc3BsYXk6IGJsb2NrOwor
ICBwYWRkaW5nOiAwOworICB3aWR0aDogMTAwJTsKK30KKy5pbnB1dHMtbGlzdCBsYWJlbCB7Cisg
IGRpc3BsYXk6IGJsb2NrOworICBmbG9hdDogbm9uZTsKKyAgd2lkdGg6IGF1dG87CisgIHBhZGRp
bmc6IDA7CisgIG1hcmdpbi1sZWZ0OiAyMHB4OworICBsaW5lLWhlaWdodDogMThweDsKKyAgdGV4
dC1hbGlnbjogbGVmdDsKKyAgd2hpdGUtc3BhY2U6IG5vcm1hbDsKK30KKy5pbnB1dHMtbGlzdCBs
YWJlbCBzdHJvbmcgeworICBjb2xvcjogIzgwODA4MDsKK30KKy5pbnB1dHMtbGlzdCBsYWJlbCBz
bWFsbCB7CisgIGZvbnQtc2l6ZTogMTFweDsKKyAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKK30KKy5p
bnB1dHMtbGlzdCAuaW5wdXRzLWxpc3QgeworICBtYXJnaW4tbGVmdDogMjVweDsKKyAgbWFyZ2lu
LWJvdHRvbTogMTBweDsKKyAgcGFkZGluZy10b3A6IDA7Cit9CisuaW5wdXRzLWxpc3Q6Zmlyc3Qt
Y2hpbGQgeworICBwYWRkaW5nLXRvcDogNnB4OworfQorLmlucHV0cy1saXN0IGxpICsgbGkgewor
ICBwYWRkaW5nLXRvcDogMnB4OworfQorLmlucHV0cy1saXN0IGlucHV0W3R5cGU9cmFkaW9dLCAu
aW5wdXRzLWxpc3QgaW5wdXRbdHlwZT1jaGVja2JveF0geworICBtYXJnaW4tYm90dG9tOiAwOwor
ICBtYXJnaW4tbGVmdDogLTIwcHg7CisgIGZsb2F0OiBsZWZ0OworfQorLmZvcm0tc3RhY2tlZCB7
CisgIHBhZGRpbmctbGVmdDogMjBweDsKK30KKy5mb3JtLXN0YWNrZWQgZmllbGRzZXQgeworICBw
YWRkaW5nLXRvcDogOXB4OworfQorLmZvcm0tc3RhY2tlZCBsZWdlbmQgeworICBwYWRkaW5nLWxl
ZnQ6IDA7Cit9CisuZm9ybS1zdGFja2VkIGxhYmVsIHsKKyAgZGlzcGxheTogYmxvY2s7CisgIGZs
b2F0OiBub25lOworICB3aWR0aDogYXV0bzsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgIHRleHQt
YWxpZ246IGxlZnQ7CisgIGxpbmUtaGVpZ2h0OiAyMHB4OworICBwYWRkaW5nLXRvcDogMDsKK30K
Ky5mb3JtLXN0YWNrZWQgLmNsZWFyZml4IHsKKyAgbWFyZ2luLWJvdHRvbTogOXB4OworfQorLmZv
cm0tc3RhY2tlZCAuY2xlYXJmaXggZGl2LmlucHV0IHsKKyAgbWFyZ2luLWxlZnQ6IDA7Cit9Cisu
Zm9ybS1zdGFja2VkIC5pbnB1dHMtbGlzdCB7CisgIG1hcmdpbi1ib3R0b206IDA7Cit9CisuZm9y
bS1zdGFja2VkIC5pbnB1dHMtbGlzdCBsaSB7CisgIHBhZGRpbmctdG9wOiAwOworfQorLmZvcm0t
c3RhY2tlZCAuaW5wdXRzLWxpc3QgbGkgbGFiZWwgeworICBmb250LXdlaWdodDogbm9ybWFsOwor
ICBwYWRkaW5nLXRvcDogMDsKK30KKy5mb3JtLXN0YWNrZWQgZGl2LmNsZWFyZml4LmVycm9yIHsK
KyAgcGFkZGluZy10b3A6IDEwcHg7CisgIHBhZGRpbmctYm90dG9tOiAxMHB4OworICBwYWRkaW5n
LWxlZnQ6IDEwcHg7CisgIG1hcmdpbi10b3A6IDA7CisgIG1hcmdpbi1sZWZ0OiAtMTBweDsKK30K
Ky5mb3JtLXN0YWNrZWQgLmFjdGlvbnMgeworICBtYXJnaW4tbGVmdDogLTIwcHg7CisgIHBhZGRp
bmctbGVmdDogMjBweDsKK30KKy8qCisgKiBUYWJsZXMubGVzcworICogVGFibGVzIGZvciwgeW91
IGd1ZXNzZWQgaXQsIHRhYnVsYXIgZGF0YQorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSAqLwordGFibGUgeworICB3aWR0aDogMTAwJTsKKyAgbWFyZ2luLWJvdHRv
bTogMThweDsKKyAgcGFkZGluZzogMDsKKyAgZm9udC1zaXplOiAxM3B4OworICBib3JkZXItY29s
bGFwc2U6IGNvbGxhcHNlOworfQordGFibGUgdGgsIHRhYmxlIHRkIHsKKyAgcGFkZGluZzogMTBw
eCAxMHB4IDlweDsKKyAgbGluZS1oZWlnaHQ6IDE4cHg7CisgIHRleHQtYWxpZ246IGxlZnQ7Cit9
Cit0YWJsZSB0aCB7CisgIHBhZGRpbmctdG9wOiA5cHg7CisgIGZvbnQtd2VpZ2h0OiBib2xkOwor
ICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOworfQordGFibGUgdGQgeworICB2ZXJ0aWNhbC1hbGln
bjogdG9wOworICBib3JkZXItdG9wOiAxcHggc29saWQgI2RkZDsKK30KK3RhYmxlIHRib2R5IHRo
IHsKKyAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNkZGQ7CisgIHZlcnRpY2FsLWFsaWduOiB0b3A7
Cit9CisuY29uZGVuc2VkLXRhYmxlIHRoLCAuY29uZGVuc2VkLXRhYmxlIHRkIHsKKyAgcGFkZGlu
ZzogNXB4IDVweCA0cHg7Cit9CisuYm9yZGVyZWQtdGFibGUgeworICBib3JkZXI6IDFweCBzb2xp
ZCAjZGRkOworICBib3JkZXItY29sbGFwc2U6IHNlcGFyYXRlOworICAqYm9yZGVyLWNvbGxhcHNl
OiBjb2xsYXBzZTsKKyAgLyogSUU3LCBjb2xsYXBzZSB0YWJsZSB0byByZW1vdmUgc3BhY2luZyAq
LworCisgIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNHB4OworICAtbW96LWJvcmRlci1yYWRpdXM6
IDRweDsKKyAgYm9yZGVyLXJhZGl1czogNHB4OworfQorLmJvcmRlcmVkLXRhYmxlIHRoICsgdGgs
IC5ib3JkZXJlZC10YWJsZSB0ZCArIHRkLCAuYm9yZGVyZWQtdGFibGUgdGggKyB0ZCB7CisgIGJv
cmRlci1sZWZ0OiAxcHggc29saWQgI2RkZDsKK30KKy5ib3JkZXJlZC10YWJsZSB0aGVhZCB0cjpm
aXJzdC1jaGlsZCB0aDpmaXJzdC1jaGlsZCwgLmJvcmRlcmVkLXRhYmxlIHRib2R5IHRyOmZpcnN0
LWNoaWxkIHRkOmZpcnN0LWNoaWxkIHsKKyAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA0cHggMCAw
IDA7CisgIC1tb3otYm9yZGVyLXJhZGl1czogNHB4IDAgMCAwOworICBib3JkZXItcmFkaXVzOiA0
cHggMCAwIDA7Cit9CisuYm9yZGVyZWQtdGFibGUgdGhlYWQgdHI6Zmlyc3QtY2hpbGQgdGg6bGFz
dC1jaGlsZCwgLmJvcmRlcmVkLXRhYmxlIHRib2R5IHRyOmZpcnN0LWNoaWxkIHRkOmxhc3QtY2hp
bGQgeworICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDAgNHB4IDAgMDsKKyAgLW1vei1ib3JkZXIt
cmFkaXVzOiAwIDRweCAwIDA7CisgIGJvcmRlci1yYWRpdXM6IDAgNHB4IDAgMDsKK30KKy5ib3Jk
ZXJlZC10YWJsZSB0Ym9keSB0cjpsYXN0LWNoaWxkIHRkOmZpcnN0LWNoaWxkIHsKKyAgLXdlYmtp
dC1ib3JkZXItcmFkaXVzOiAwIDAgMCA0cHg7CisgIC1tb3otYm9yZGVyLXJhZGl1czogMCAwIDAg
NHB4OworICBib3JkZXItcmFkaXVzOiAwIDAgMCA0cHg7Cit9CisuYm9yZGVyZWQtdGFibGUgdGJv
ZHkgdHI6bGFzdC1jaGlsZCB0ZDpsYXN0LWNoaWxkIHsKKyAgLXdlYmtpdC1ib3JkZXItcmFkaXVz
OiAwIDAgNHB4IDA7CisgIC1tb3otYm9yZGVyLXJhZGl1czogMCAwIDRweCAwOworICBib3JkZXIt
cmFkaXVzOiAwIDAgNHB4IDA7Cit9Cit0YWJsZSAuc3BhbjEgeworICB3aWR0aDogMjBweDsKK30K
K3RhYmxlIC5zcGFuMiB7CisgIHdpZHRoOiA2MHB4OworfQordGFibGUgLnNwYW4zIHsKKyAgd2lk
dGg6IDEwMHB4OworfQordGFibGUgLnNwYW40IHsKKyAgd2lkdGg6IDE0MHB4OworfQordGFibGUg
LnNwYW41IHsKKyAgd2lkdGg6IDE4MHB4OworfQordGFibGUgLnNwYW42IHsKKyAgd2lkdGg6IDIy
MHB4OworfQordGFibGUgLnNwYW43IHsKKyAgd2lkdGg6IDI2MHB4OworfQordGFibGUgLnNwYW44
IHsKKyAgd2lkdGg6IDMwMHB4OworfQordGFibGUgLnNwYW45IHsKKyAgd2lkdGg6IDM0MHB4Owor
fQordGFibGUgLnNwYW4xMCB7CisgIHdpZHRoOiAzODBweDsKK30KK3RhYmxlIC5zcGFuMTEgewor
ICB3aWR0aDogNDIwcHg7Cit9Cit0YWJsZSAuc3BhbjEyIHsKKyAgd2lkdGg6IDQ2MHB4OworfQor
dGFibGUgLnNwYW4xMyB7CisgIHdpZHRoOiA1MDBweDsKK30KK3RhYmxlIC5zcGFuMTQgeworICB3
aWR0aDogNTQwcHg7Cit9Cit0YWJsZSAuc3BhbjE1IHsKKyAgd2lkdGg6IDU4MHB4OworfQordGFi
bGUgLnNwYW4xNiB7CisgIHdpZHRoOiA2MjBweDsKK30KKy56ZWJyYS1zdHJpcGVkIHRib2R5IHRy
Om50aC1jaGlsZChvZGQpIHRkLCAuemVicmEtc3RyaXBlZCB0Ym9keSB0cjpudGgtY2hpbGQob2Rk
KSB0aCB7CisgIGJhY2tncm91bmQtY29sb3I6ICNmOWY5Zjk7Cit9CisuemVicmEtc3RyaXBlZCB0
Ym9keSB0cjpob3ZlciB0ZCwgLnplYnJhLXN0cmlwZWQgdGJvZHkgdHI6aG92ZXIgdGggeworICBi
YWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1OworfQordGFibGUgLmhlYWRlciB7CisgIGN1cnNvcjog
cG9pbnRlcjsKK30KK3RhYmxlIC5oZWFkZXI6YWZ0ZXIgeworICBjb250ZW50OiAiIjsKKyAgZmxv
YXQ6IHJpZ2h0OworICBtYXJnaW4tdG9wOiA3cHg7CisgIGJvcmRlci13aWR0aDogMCA0cHggNHB4
OworICBib3JkZXItc3R5bGU6IHNvbGlkOworICBib3JkZXItY29sb3I6ICMwMDAgdHJhbnNwYXJl
bnQ7CisgIHZpc2liaWxpdHk6IGhpZGRlbjsKK30KK3RhYmxlIC5oZWFkZXJTb3J0VXAsIHRhYmxl
IC5oZWFkZXJTb3J0RG93biB7CisgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMTQxLCAxOTIsIDIx
OSwgMC4yNSk7CisgIHRleHQtc2hhZG93OiAwIDFweCAxcHggcmdiYSgyNTUsIDI1NSwgMjU1LCAw
Ljc1KTsKK30KK3RhYmxlIC5oZWFkZXI6aG92ZXI6YWZ0ZXIgeworICB2aXNpYmlsaXR5OiB2aXNp
YmxlOworfQordGFibGUgLmhlYWRlclNvcnREb3duOmFmdGVyLCB0YWJsZSAuaGVhZGVyU29ydERv
d246aG92ZXI6YWZ0ZXIgeworICB2aXNpYmlsaXR5OiB2aXNpYmxlOworICBmaWx0ZXI6IGFscGhh
KG9wYWNpdHk9NjApOworICAta2h0bWwtb3BhY2l0eTogMC42OworICAtbW96LW9wYWNpdHk6IDAu
NjsKKyAgb3BhY2l0eTogMC42OworfQordGFibGUgLmhlYWRlclNvcnRVcDphZnRlciB7CisgIGJv
cmRlci1ib3R0b206IG5vbmU7CisgIGJvcmRlci1sZWZ0OiA0cHggc29saWQgdHJhbnNwYXJlbnQ7
CisgIGJvcmRlci1yaWdodDogNHB4IHNvbGlkIHRyYW5zcGFyZW50OworICBib3JkZXItdG9wOiA0
cHggc29saWQgIzAwMDsKKyAgdmlzaWJpbGl0eTogdmlzaWJsZTsKKyAgLXdlYmtpdC1ib3gtc2hh
ZG93OiBub25lOworICAtbW96LWJveC1zaGFkb3c6IG5vbmU7CisgIGJveC1zaGFkb3c6IG5vbmU7
CisgIGZpbHRlcjogYWxwaGEob3BhY2l0eT02MCk7CisgIC1raHRtbC1vcGFjaXR5OiAwLjY7Cisg
IC1tb3otb3BhY2l0eTogMC42OworICBvcGFjaXR5OiAwLjY7Cit9Cit0YWJsZSAuYmx1ZSB7Cisg
IGNvbG9yOiAjMDQ5Y2RiOworICBib3JkZXItYm90dG9tLWNvbG9yOiAjMDQ5Y2RiOworfQordGFi
bGUgLmhlYWRlclNvcnRVcC5ibHVlLCB0YWJsZSAuaGVhZGVyU29ydERvd24uYmx1ZSB7CisgIGJh
Y2tncm91bmQtY29sb3I6ICNhZGU2ZmU7Cit9Cit0YWJsZSAuZ3JlZW4geworICBjb2xvcjogIzQ2
YTU0NjsKKyAgYm9yZGVyLWJvdHRvbS1jb2xvcjogIzQ2YTU0NjsKK30KK3RhYmxlIC5oZWFkZXJT
b3J0VXAuZ3JlZW4sIHRhYmxlIC5oZWFkZXJTb3J0RG93bi5ncmVlbiB7CisgIGJhY2tncm91bmQt
Y29sb3I6ICNjZGVhY2Q7Cit9Cit0YWJsZSAucmVkIHsKKyAgY29sb3I6ICM5ZDI2MWQ7CisgIGJv
cmRlci1ib3R0b20tY29sb3I6ICM5ZDI2MWQ7Cit9Cit0YWJsZSAuaGVhZGVyU29ydFVwLnJlZCwg
dGFibGUgLmhlYWRlclNvcnREb3duLnJlZCB7CisgIGJhY2tncm91bmQtY29sb3I6ICNmNGM4YzU7
Cit9Cit0YWJsZSAueWVsbG93IHsKKyAgY29sb3I6ICNmZmM0MGQ7CisgIGJvcmRlci1ib3R0b20t
Y29sb3I6ICNmZmM0MGQ7Cit9Cit0YWJsZSAuaGVhZGVyU29ydFVwLnllbGxvdywgdGFibGUgLmhl
YWRlclNvcnREb3duLnllbGxvdyB7CisgIGJhY2tncm91bmQtY29sb3I6ICNmZmY2ZDk7Cit9Cit0
YWJsZSAub3JhbmdlIHsKKyAgY29sb3I6ICNmODk0MDY7CisgIGJvcmRlci1ib3R0b20tY29sb3I6
ICNmODk0MDY7Cit9Cit0YWJsZSAuaGVhZGVyU29ydFVwLm9yYW5nZSwgdGFibGUgLmhlYWRlclNv
cnREb3duLm9yYW5nZSB7CisgIGJhY2tncm91bmQtY29sb3I6ICNmZWU5Y2M7Cit9Cit0YWJsZSAu
cHVycGxlIHsKKyAgY29sb3I6ICM3YTQzYjY7CisgIGJvcmRlci1ib3R0b20tY29sb3I6ICM3YTQz
YjY7Cit9Cit0YWJsZSAuaGVhZGVyU29ydFVwLnB1cnBsZSwgdGFibGUgLmhlYWRlclNvcnREb3du
LnB1cnBsZSB7CisgIGJhY2tncm91bmQtY29sb3I6ICNlMmQ1ZjA7Cit9CisvKiBQYXR0ZXJucy5s
ZXNzCisgKiBSZXBlYXRhYmxlIFVJIGVsZW1lbnRzIG91dHNpZGUgdGhlIGJhc2Ugc3R5bGVzIHBy
b3ZpZGVkIGZyb20gdGhlIHNjYWZmb2xkaW5nCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisu
dG9wYmFyIHsKKyAgaGVpZ2h0OiA0MHB4OworICBwb3NpdGlvbjogZml4ZWQ7CisgIHRvcDogMDsK
KyAgbGVmdDogMDsKKyAgcmlnaHQ6IDA7CisgIHotaW5kZXg6IDEwMDAwOworICBvdmVyZmxvdzog
dmlzaWJsZTsKK30KKy50b3BiYXIgYSB7CisgIGNvbG9yOiAjYmZiZmJmOworICB0ZXh0LXNoYWRv
dzogMCAtMXB4IDAgcmdiYSgwLCAwLCAwLCAwLjI1KTsKK30KKy50b3BiYXIgaDMgYTpob3Zlciwg
LnRvcGJhciAuYnJhbmQ6aG92ZXIsIC50b3BiYXIgdWwgLmFjdGl2ZSA+IGEgeworICBiYWNrZ3Jv
dW5kLWNvbG9yOiAjMzMzOworICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUs
IDAuMDUpOworICBjb2xvcjogI2ZmZmZmZjsKKyAgdGV4dC1kZWNvcmF0aW9uOiBub25lOworfQor
LnRvcGJhciBoMyB7CisgIHBvc2l0aW9uOiByZWxhdGl2ZTsKK30KKy50b3BiYXIgaDMgYSwgLnRv
cGJhciAuYnJhbmQgeworICBmbG9hdDogbGVmdDsKKyAgZGlzcGxheTogYmxvY2s7CisgIHBhZGRp
bmc6IDhweCAyMHB4IDEycHg7CisgIG1hcmdpbi1sZWZ0OiAtMjBweDsKKyAgY29sb3I6ICNmZmZm
ZmY7CisgIGZvbnQtc2l6ZTogMjBweDsKKyAgZm9udC13ZWlnaHQ6IDIwMDsKKyAgbGluZS1oZWln
aHQ6IDE7Cit9CisudG9wYmFyIHAgeworICBtYXJnaW46IDA7CisgIGxpbmUtaGVpZ2h0OiA0MHB4
OworfQorLnRvcGJhciBwIGE6aG92ZXIgeworICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVu
dDsKKyAgY29sb3I6ICNmZmZmZmY7Cit9CisudG9wYmFyIGZvcm0geworICBmbG9hdDogbGVmdDsK
KyAgbWFyZ2luOiA1cHggMCAwIDA7CisgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgZmlsdGVyOiBh
bHBoYShvcGFjaXR5PTEwMCk7CisgIC1raHRtbC1vcGFjaXR5OiAxOworICAtbW96LW9wYWNpdHk6
IDE7CisgIG9wYWNpdHk6IDE7Cit9CisudG9wYmFyIGZvcm0ucHVsbC1yaWdodCB7CisgIGZsb2F0
OiByaWdodDsKK30KKy50b3BiYXIgaW5wdXQgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDQ0Owor
ICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMyk7CisgIGZvbnQtZmFt
aWx5OiAiSGVsdmV0aWNhIE5ldWUiLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmOworICBm
b250LXNpemU6IG5vcm1hbDsKKyAgZm9udC13ZWlnaHQ6IDEzcHg7CisgIGxpbmUtaGVpZ2h0OiAx
OworICBwYWRkaW5nOiA0cHggOXB4OworICBjb2xvcjogI2ZmZmZmZjsKKyAgY29sb3I6IHJnYmEo
MjU1LCAyNTUsIDI1NSwgMC43NSk7CisgIGJvcmRlcjogMXB4IHNvbGlkICMxMTE7CisgIC13ZWJr
aXQtYm9yZGVyLXJhZGl1czogNHB4OworICAtbW96LWJvcmRlci1yYWRpdXM6IDRweDsKKyAgYm9y
ZGVyLXJhZGl1czogNHB4OworICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDJweCBy
Z2JhKDAsIDAsIDAsIDAuMSksIDAgMXB4IDBweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjUpOwor
ICAtbW96LWJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMSksIDAg
MXB4IDBweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjUpOworICBib3gtc2hhZG93OiBpbnNldCAw
IDFweCAycHggcmdiYSgwLCAwLCAwLCAwLjEpLCAwIDFweCAwcHggcmdiYSgyNTUsIDI1NSwgMjU1
LCAwLjI1KTsKKyAgLXdlYmtpdC10cmFuc2l0aW9uOiBub25lOworICAtbW96LXRyYW5zaXRpb246
IG5vbmU7CisgIC1tcy10cmFuc2l0aW9uOiBub25lOworICAtby10cmFuc2l0aW9uOiBub25lOwor
ICB0cmFuc2l0aW9uOiBub25lOworfQorLnRvcGJhciBpbnB1dDotbW96LXBsYWNlaG9sZGVyIHsK
KyAgY29sb3I6ICNlNmU2ZTY7Cit9CisudG9wYmFyIGlucHV0Ojotd2Via2l0LWlucHV0LXBsYWNl
aG9sZGVyIHsKKyAgY29sb3I6ICNlNmU2ZTY7Cit9CisudG9wYmFyIGlucHV0OmhvdmVyIHsKKyAg
YmFja2dyb3VuZC1jb2xvcjogI2JmYmZiZjsKKyAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUs
IDI1NSwgMjU1LCAwLjUpOworICBjb2xvcjogI2ZmZmZmZjsKK30KKy50b3BiYXIgaW5wdXQ6Zm9j
dXMsIC50b3BiYXIgaW5wdXQuZm9jdXNlZCB7CisgIG91dGxpbmU6IDA7CisgIGJhY2tncm91bmQt
Y29sb3I6ICNmZmZmZmY7CisgIGNvbG9yOiAjNDA0MDQwOworICB0ZXh0LXNoYWRvdzogMCAxcHgg
MCAjZmZmZmZmOworICBib3JkZXI6IDA7CisgIHBhZGRpbmc6IDVweCAxMHB4OworICAtd2Via2l0
LWJveC1zaGFkb3c6IDAgMCAzcHggcmdiYSgwLCAwLCAwLCAwLjE1KTsKKyAgLW1vei1ib3gtc2hh
ZG93OiAwIDAgM3B4IHJnYmEoMCwgMCwgMCwgMC4xNSk7CisgIGJveC1zaGFkb3c6IDAgMCAzcHgg
cmdiYSgwLCAwLCAwLCAwLjE1KTsKK30KKy50b3BiYXItaW5uZXIsIC50b3BiYXIgLmZpbGwgewor
ICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjIyOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjIyMjIyOwor
ICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7CisgIGJhY2tncm91bmQtaW1hZ2U6IC1raHRt
bC1ncmFkaWVudChsaW5lYXIsIGxlZnQgdG9wLCBsZWZ0IGJvdHRvbSwgZnJvbSgjMzMzMzMzKSwg
dG8oIzIyMjIyMikpOworICBiYWNrZ3JvdW5kLWltYWdlOiAtbW96LWxpbmVhci1ncmFkaWVudCh0
b3AsICMzMzMzMzMsICMyMjIyMjIpOworICBiYWNrZ3JvdW5kLWltYWdlOiAtbXMtbGluZWFyLWdy
YWRpZW50KHRvcCwgIzMzMzMzMywgIzIyMjIyMik7CisgIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJr
aXQtZ3JhZGllbnQobGluZWFyLCBsZWZ0IHRvcCwgbGVmdCBib3R0b20sIGNvbG9yLXN0b3AoMCUs
ICMzMzMzMzMpLCBjb2xvci1zdG9wKDEwMCUsICMyMjIyMjIpKTsKKyAgYmFja2dyb3VuZC1pbWFn
ZTogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCAjMzMzMzMzLCAjMjIyMjIyKTsKKyAgYmFj
a2dyb3VuZC1pbWFnZTogLW8tbGluZWFyLWdyYWRpZW50KHRvcCwgIzMzMzMzMywgIzIyMjIyMik7
CisgIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0b3AsICMzMzMzMzMsICMyMjIy
MjIpOworICBmaWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVu
dChzdGFydENvbG9yc3RyPScjMzMzMzMzJywgZW5kQ29sb3JzdHI9JyMyMjIyMjInLCBHcmFkaWVu
dFR5cGU9MCk7CisgIC13ZWJraXQtYm94LXNoYWRvdzogMCAxcHggM3B4IHJnYmEoMCwgMCwgMCwg
MC4yNSksIGluc2V0IDAgLTFweCAwIHJnYmEoMCwgMCwgMCwgMC4xKTsKKyAgLW1vei1ib3gtc2hh
ZG93OiAwIDFweCAzcHggcmdiYSgwLCAwLCAwLCAwLjI1KSwgaW5zZXQgMCAtMXB4IDAgcmdiYSgw
LCAwLCAwLCAwLjEpOworICBib3gtc2hhZG93OiAwIDFweCAzcHggcmdiYSgwLCAwLCAwLCAwLjI1
KSwgaW5zZXQgMCAtMXB4IDAgcmdiYSgwLCAwLCAwLCAwLjEpOworfQorLnRvcGJhciBkaXYgPiB1
bCwgLm5hdiB7CisgIGRpc3BsYXk6IGJsb2NrOworICBmbG9hdDogbGVmdDsKKyAgbWFyZ2luOiAw
IDEwcHggMCAwOworICBwb3NpdGlvbjogcmVsYXRpdmU7CisgIGxlZnQ6IDA7Cit9CisudG9wYmFy
IGRpdiA+IHVsID4gbGksIC5uYXYgPiBsaSB7CisgIGRpc3BsYXk6IGJsb2NrOworICBmbG9hdDog
bGVmdDsKK30KKy50b3BiYXIgZGl2ID4gdWwgYSwgLm5hdiBhIHsKKyAgZGlzcGxheTogYmxvY2s7
CisgIGZsb2F0OiBub25lOworICBwYWRkaW5nOiAxMHB4IDEwcHggMTFweDsKKyAgbGluZS1oZWln
aHQ6IDE5cHg7CisgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKK30KKy50b3BiYXIgZGl2ID4gdWwg
YTpob3ZlciwgLm5hdiBhOmhvdmVyIHsKKyAgY29sb3I6ICNmZmZmZmY7CisgIHRleHQtZGVjb3Jh
dGlvbjogbm9uZTsKK30KKy50b3BiYXIgZGl2ID4gdWwgLmFjdGl2ZSA+IGEsIC5uYXYgLmFjdGl2
ZSA+IGEgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjIyOworICBiYWNrZ3JvdW5kLWNvbG9yOiBy
Z2JhKDAsIDAsIDAsIDAuNSk7Cit9CisudG9wYmFyIGRpdiA+IHVsLnNlY29uZGFyeS1uYXYsIC5u
YXYuc2Vjb25kYXJ5LW5hdiB7CisgIGZsb2F0OiByaWdodDsKKyAgbWFyZ2luLWxlZnQ6IDEwcHg7
CisgIG1hcmdpbi1yaWdodDogMDsKK30KKy50b3BiYXIgZGl2ID4gdWwuc2Vjb25kYXJ5LW5hdiAu
bWVudS1kcm9wZG93biwKKy5uYXYuc2Vjb25kYXJ5LW5hdiAubWVudS1kcm9wZG93biwKKy50b3Bi
YXIgZGl2ID4gdWwuc2Vjb25kYXJ5LW5hdiAuZHJvcGRvd24tbWVudSwKKy5uYXYuc2Vjb25kYXJ5
LW5hdiAuZHJvcGRvd24tbWVudSB7CisgIHJpZ2h0OiAwOworICBib3JkZXI6IDA7Cit9CisudG9w
YmFyIGRpdiA+IHVsIGEubWVudTpob3ZlciwKKy5uYXYgYS5tZW51OmhvdmVyLAorLnRvcGJhciBk
aXYgPiB1bCBsaS5vcGVuIC5tZW51LAorLm5hdiBsaS5vcGVuIC5tZW51LAorLnRvcGJhciBkaXYg
PiB1bCAuZHJvcGRvd24tdG9nZ2xlOmhvdmVyLAorLm5hdiAuZHJvcGRvd24tdG9nZ2xlOmhvdmVy
LAorLnRvcGJhciBkaXYgPiB1bCAuZHJvcGRvd24ub3BlbiAuZHJvcGRvd24tdG9nZ2xlLAorLm5h
diAuZHJvcGRvd24ub3BlbiAuZHJvcGRvd24tdG9nZ2xlIHsKKyAgYmFja2dyb3VuZDogIzQ0NDsK
KyAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA1KTsKK30KKy50b3BiYXIgZGl2
ID4gdWwgLm1lbnUtZHJvcGRvd24sCisubmF2IC5tZW51LWRyb3Bkb3duLAorLnRvcGJhciBkaXYg
PiB1bCAuZHJvcGRvd24tbWVudSwKKy5uYXYgLmRyb3Bkb3duLW1lbnUgeworICBiYWNrZ3JvdW5k
LWNvbG9yOiAjMzMzOworfQorLnRvcGJhciBkaXYgPiB1bCAubWVudS1kcm9wZG93biBhLm1lbnUs
CisubmF2IC5tZW51LWRyb3Bkb3duIGEubWVudSwKKy50b3BiYXIgZGl2ID4gdWwgLmRyb3Bkb3du
LW1lbnUgYS5tZW51LAorLm5hdiAuZHJvcGRvd24tbWVudSBhLm1lbnUsCisudG9wYmFyIGRpdiA+
IHVsIC5tZW51LWRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGUsCisubmF2IC5tZW51LWRyb3Bkb3du
IC5kcm9wZG93bi10b2dnbGUsCisudG9wYmFyIGRpdiA+IHVsIC5kcm9wZG93bi1tZW51IC5kcm9w
ZG93bi10b2dnbGUsCisubmF2IC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi10b2dnbGUgeworICBj
b2xvcjogI2ZmZmZmZjsKK30KKy50b3BiYXIgZGl2ID4gdWwgLm1lbnUtZHJvcGRvd24gYS5tZW51
Lm9wZW4sCisubmF2IC5tZW51LWRyb3Bkb3duIGEubWVudS5vcGVuLAorLnRvcGJhciBkaXYgPiB1
bCAuZHJvcGRvd24tbWVudSBhLm1lbnUub3BlbiwKKy5uYXYgLmRyb3Bkb3duLW1lbnUgYS5tZW51
Lm9wZW4sCisudG9wYmFyIGRpdiA+IHVsIC5tZW51LWRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGUu
b3BlbiwKKy5uYXYgLm1lbnUtZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZS5vcGVuLAorLnRvcGJh
ciBkaXYgPiB1bCAuZHJvcGRvd24tbWVudSAuZHJvcGRvd24tdG9nZ2xlLm9wZW4sCisubmF2IC5k
cm9wZG93bi1tZW51IC5kcm9wZG93bi10b2dnbGUub3BlbiB7CisgIGJhY2tncm91bmQ6ICM0NDQ7
CisgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNSk7Cit9CisudG9wYmFyIGRp
diA+IHVsIC5tZW51LWRyb3Bkb3duIGxpIGEsCisubmF2IC5tZW51LWRyb3Bkb3duIGxpIGEsCisu
dG9wYmFyIGRpdiA+IHVsIC5kcm9wZG93bi1tZW51IGxpIGEsCisubmF2IC5kcm9wZG93bi1tZW51
IGxpIGEgeworICBjb2xvcjogIzk5OTsKKyAgdGV4dC1zaGFkb3c6IDAgMXB4IDAgcmdiYSgwLCAw
LCAwLCAwLjUpOworfQorLnRvcGJhciBkaXYgPiB1bCAubWVudS1kcm9wZG93biBsaSBhOmhvdmVy
LAorLm5hdiAubWVudS1kcm9wZG93biBsaSBhOmhvdmVyLAorLnRvcGJhciBkaXYgPiB1bCAuZHJv
cGRvd24tbWVudSBsaSBhOmhvdmVyLAorLm5hdiAuZHJvcGRvd24tbWVudSBsaSBhOmhvdmVyIHsK
KyAgYmFja2dyb3VuZC1jb2xvcjogIzE5MTkxOTsKKyAgYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVh
dC14OworICBiYWNrZ3JvdW5kLWltYWdlOiAta2h0bWwtZ3JhZGllbnQobGluZWFyLCBsZWZ0IHRv
cCwgbGVmdCBib3R0b20sIGZyb20oIzI5MjkyOSksIHRvKCMxOTE5MTkpKTsKKyAgYmFja2dyb3Vu
ZC1pbWFnZTogLW1vei1saW5lYXItZ3JhZGllbnQodG9wLCAjMjkyOTI5LCAjMTkxOTE5KTsKKyAg
YmFja2dyb3VuZC1pbWFnZTogLW1zLWxpbmVhci1ncmFkaWVudCh0b3AsICMyOTI5MjksICMxOTE5
MTkpOworICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgbGVmdCB0
b3AsIGxlZnQgYm90dG9tLCBjb2xvci1zdG9wKDAlLCAjMjkyOTI5KSwgY29sb3Itc3RvcCgxMDAl
LCAjMTkxOTE5KSk7CisgIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50
KHRvcCwgIzI5MjkyOSwgIzE5MTkxOSk7CisgIGJhY2tncm91bmQtaW1hZ2U6IC1vLWxpbmVhci1n
cmFkaWVudCh0b3AsICMyOTI5MjksICMxOTE5MTkpOworICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5l
YXItZ3JhZGllbnQodG9wLCAjMjkyOTI5LCAjMTkxOTE5KTsKKyAgZmlsdGVyOiBwcm9naWQ6RFhJ
bWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nIzI5MjkyOScs
IGVuZENvbG9yc3RyPScjMTkxOTE5JywgR3JhZGllbnRUeXBlPTApOworICBjb2xvcjogI2ZmZmZm
ZjsKK30KKy50b3BiYXIgZGl2ID4gdWwgLm1lbnUtZHJvcGRvd24gLmFjdGl2ZSBhLAorLm5hdiAu
bWVudS1kcm9wZG93biAuYWN0aXZlIGEsCisudG9wYmFyIGRpdiA+IHVsIC5kcm9wZG93bi1tZW51
IC5hY3RpdmUgYSwKKy5uYXYgLmRyb3Bkb3duLW1lbnUgLmFjdGl2ZSBhIHsKKyAgY29sb3I6ICNm
ZmZmZmY7Cit9CisudG9wYmFyIGRpdiA+IHVsIC5tZW51LWRyb3Bkb3duIC5kaXZpZGVyLAorLm5h
diAubWVudS1kcm9wZG93biAuZGl2aWRlciwKKy50b3BiYXIgZGl2ID4gdWwgLmRyb3Bkb3duLW1l
bnUgLmRpdmlkZXIsCisubmF2IC5kcm9wZG93bi1tZW51IC5kaXZpZGVyIHsKKyAgYmFja2dyb3Vu
ZC1jb2xvcjogIzIyMjsKKyAgYm9yZGVyLWNvbG9yOiAjNDQ0OworfQorLnRvcGJhciB1bCAubWVu
dS1kcm9wZG93biBsaSBhLCAudG9wYmFyIHVsIC5kcm9wZG93bi1tZW51IGxpIGEgeworICBwYWRk
aW5nOiA0cHggMTVweDsKK30KK2xpLm1lbnUsIC5kcm9wZG93biB7CisgIHBvc2l0aW9uOiByZWxh
dGl2ZTsKK30KK2EubWVudTphZnRlciwgLmRyb3Bkb3duLXRvZ2dsZTphZnRlciB7CisgIHdpZHRo
OiAwOworICBoZWlnaHQ6IDA7CisgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKKyAgY29udGVudDog
IiZkYXJyOyI7CisgIHRleHQtaW5kZW50OiAtOTk5OTlweDsKKyAgdmVydGljYWwtYWxpZ246IHRv
cDsKKyAgbWFyZ2luLXRvcDogOHB4OworICBtYXJnaW4tbGVmdDogNHB4OworICBib3JkZXItbGVm
dDogNHB4IHNvbGlkIHRyYW5zcGFyZW50OworICBib3JkZXItcmlnaHQ6IDRweCBzb2xpZCB0cmFu
c3BhcmVudDsKKyAgYm9yZGVyLXRvcDogNHB4IHNvbGlkICNmZmZmZmY7CisgIGZpbHRlcjogYWxw
aGEob3BhY2l0eT01MCk7CisgIC1raHRtbC1vcGFjaXR5OiAwLjU7CisgIC1tb3otb3BhY2l0eTog
MC41OworICBvcGFjaXR5OiAwLjU7Cit9CisubWVudS1kcm9wZG93biwgLmRyb3Bkb3duLW1lbnUg
eworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmOworICBmbG9hdDogbGVmdDsKKyAgZGlzcGxh
eTogbm9uZTsKKyAgcG9zaXRpb246IGFic29sdXRlOworICB0b3A6IDQwcHg7CisgIHotaW5kZXg6
IDkwMDsKKyAgbWluLXdpZHRoOiAxNjBweDsKKyAgbWF4LXdpZHRoOiAyMjBweDsKKyAgX3dpZHRo
OiAxNjBweDsKKyAgbWFyZ2luLWxlZnQ6IDA7CisgIG1hcmdpbi1yaWdodDogMDsKKyAgcGFkZGlu
ZzogNnB4IDA7CisgIHpvb206IDE7CisgIGJvcmRlci1jb2xvcjogIzk5OTsKKyAgYm9yZGVyLWNv
bG9yOiByZ2JhKDAsIDAsIDAsIDAuMik7CisgIGJvcmRlci1zdHlsZTogc29saWQ7CisgIGJvcmRl
ci13aWR0aDogMCAxcHggMXB4OworICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDAgMCA2cHggNnB4
OworICAtbW96LWJvcmRlci1yYWRpdXM6IDAgMCA2cHggNnB4OworICBib3JkZXItcmFkaXVzOiAw
IDAgNnB4IDZweDsKKyAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDJweCA0cHggcmdiYSgwLCAwLCAw
LCAwLjIpOworICAtbW96LWJveC1zaGFkb3c6IDAgMnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMik7
CisgIGJveC1zaGFkb3c6IDAgMnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMik7CisgIC13ZWJraXQt
YmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDsKKyAgLW1vei1iYWNrZ3JvdW5kLWNsaXA6IHBh
ZGRpbmctYm94OworICBiYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmctYm94OworfQorLm1lbnUtZHJv
cGRvd24gbGksIC5kcm9wZG93bi1tZW51IGxpIHsKKyAgZmxvYXQ6IG5vbmU7CisgIGRpc3BsYXk6
IGJsb2NrOworICBiYWNrZ3JvdW5kLWNvbG9yOiBub25lOworfQorLm1lbnUtZHJvcGRvd24gLmRp
dmlkZXIsIC5kcm9wZG93bi1tZW51IC5kaXZpZGVyIHsKKyAgaGVpZ2h0OiAxcHg7CisgIG1hcmdp
bjogNXB4IDA7CisgIG92ZXJmbG93OiBoaWRkZW47CisgIGJhY2tncm91bmQtY29sb3I6ICNlZWU7
CisgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZmZmZmZmOworfQorLnRvcGJhciAuZHJvcGRv
d24tbWVudSBhLCAuZHJvcGRvd24tbWVudSBhIHsKKyAgZGlzcGxheTogYmxvY2s7CisgIHBhZGRp
bmc6IDRweCAxNXB4OworICBjbGVhcjogYm90aDsKKyAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKKyAg
bGluZS1oZWlnaHQ6IDE4cHg7CisgIGNvbG9yOiAjODA4MDgwOworICB0ZXh0LXNoYWRvdzogMCAx
cHggMCAjZmZmZmZmOworfQorLnRvcGJhciAuZHJvcGRvd24tbWVudSBhOmhvdmVyLAorLmRyb3Bk
b3duLW1lbnUgYTpob3ZlciwKKy50b3BiYXIgLmRyb3Bkb3duLW1lbnUgYS5ob3ZlciwKKy5kcm9w
ZG93bi1tZW51IGEuaG92ZXIgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGRkZGRkOworICBiYWNr
Z3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7CisgIGJhY2tncm91bmQtaW1hZ2U6IC1raHRtbC1ncmFk
aWVudChsaW5lYXIsIGxlZnQgdG9wLCBsZWZ0IGJvdHRvbSwgZnJvbSgjZWVlZWVlKSwgdG8oI2Rk
ZGRkZCkpOworICBiYWNrZ3JvdW5kLWltYWdlOiAtbW96LWxpbmVhci1ncmFkaWVudCh0b3AsICNl
ZWVlZWUsICNkZGRkZGQpOworICBiYWNrZ3JvdW5kLWltYWdlOiAtbXMtbGluZWFyLWdyYWRpZW50
KHRvcCwgI2VlZWVlZSwgI2RkZGRkZCk7CisgIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtZ3Jh
ZGllbnQobGluZWFyLCBsZWZ0IHRvcCwgbGVmdCBib3R0b20sIGNvbG9yLXN0b3AoMCUsICNlZWVl
ZWUpLCBjb2xvci1zdG9wKDEwMCUsICNkZGRkZGQpKTsKKyAgYmFja2dyb3VuZC1pbWFnZTogLXdl
YmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCAjZWVlZWVlLCAjZGRkZGRkKTsKKyAgYmFja2dyb3Vu
ZC1pbWFnZTogLW8tbGluZWFyLWdyYWRpZW50KHRvcCwgI2VlZWVlZSwgI2RkZGRkZCk7CisgIGJh
Y2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0b3AsICNlZWVlZWUsICNkZGRkZGQpOwor
ICBmaWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFy
dENvbG9yc3RyPScjZWVlZWVlJywgZW5kQ29sb3JzdHI9JyNkZGRkZGQnLCBHcmFkaWVudFR5cGU9
MCk7CisgIGNvbG9yOiAjNDA0MDQwOworICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CisgIC13ZWJr
aXQtYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMCByZ2JhKDAsIDAsIDAsIDAuMDI1KSwgaW5zZXQg
MCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4wMjUpOworICAtbW96LWJveC1zaGFkb3c6IGluc2V0IDAg
MXB4IDAgcmdiYSgwLCAwLCAwLCAwLjAyNSksIGluc2V0IDAgLTFweCByZ2JhKDAsIDAsIDAsIDAu
MDI1KTsKKyAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMCByZ2JhKDAsIDAsIDAsIDAuMDI1KSwg
aW5zZXQgMCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4wMjUpOworfQorLm9wZW4gLm1lbnUsCisuZHJv
cGRvd24ub3BlbiAubWVudSwKKy5vcGVuIC5kcm9wZG93bi10b2dnbGUsCisuZHJvcGRvd24ub3Bl
biAuZHJvcGRvd24tdG9nZ2xlIHsKKyAgY29sb3I6ICNmZmZmZmY7CisgIGJhY2tncm91bmQ6ICNj
Y2M7CisgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4zKTsKK30KKy5vcGVuIC5tZW51LWRy
b3Bkb3duLAorLmRyb3Bkb3duLm9wZW4gLm1lbnUtZHJvcGRvd24sCisub3BlbiAuZHJvcGRvd24t
bWVudSwKKy5kcm9wZG93bi5vcGVuIC5kcm9wZG93bi1tZW51IHsKKyAgZGlzcGxheTogYmxvY2s7
Cit9CisudGFicywgLnBpbGxzIHsKKyAgbWFyZ2luOiAwIDAgMThweDsKKyAgcGFkZGluZzogMDsK
KyAgbGlzdC1zdHlsZTogbm9uZTsKKyAgem9vbTogMTsKK30KKy50YWJzOmJlZm9yZSwKKy5waWxs
czpiZWZvcmUsCisudGFiczphZnRlciwKKy5waWxsczphZnRlciB7CisgIGRpc3BsYXk6IHRhYmxl
OworICBjb250ZW50OiAiIjsKKyAgem9vbTogMTsKK30KKy50YWJzOmFmdGVyLCAucGlsbHM6YWZ0
ZXIgeworICBjbGVhcjogYm90aDsKK30KKy50YWJzID4gbGksIC5waWxscyA+IGxpIHsKKyAgZmxv
YXQ6IGxlZnQ7Cit9CisudGFicyA+IGxpID4gYSwgLnBpbGxzID4gbGkgPiBhIHsKKyAgZGlzcGxh
eTogYmxvY2s7Cit9CisudGFicyB7CisgIGJvcmRlci1jb2xvcjogI2RkZDsKKyAgYm9yZGVyLXN0
eWxlOiBzb2xpZDsKKyAgYm9yZGVyLXdpZHRoOiAwIDAgMXB4OworfQorLnRhYnMgPiBsaSB7Cisg
IHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgbWFyZ2luLWJvdHRvbTogLTFweDsKK30KKy50YWJzID4g
bGkgPiBhIHsKKyAgcGFkZGluZzogMCAxNXB4OworICBtYXJnaW4tcmlnaHQ6IDJweDsKKyAgbGlu
ZS1oZWlnaHQ6IDM0cHg7CisgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50OworICAtd2Vi
a2l0LWJvcmRlci1yYWRpdXM6IDRweCA0cHggMCAwOworICAtbW96LWJvcmRlci1yYWRpdXM6IDRw
eCA0cHggMCAwOworICBib3JkZXItcmFkaXVzOiA0cHggNHB4IDAgMDsKK30KKy50YWJzID4gbGkg
PiBhOmhvdmVyIHsKKyAgdGV4dC1kZWNvcmF0aW9uOiBub25lOworICBiYWNrZ3JvdW5kLWNvbG9y
OiAjZWVlOworICBib3JkZXItY29sb3I6ICNlZWUgI2VlZSAjZGRkOworfQorLnRhYnMgLmFjdGl2
ZSA+IGEsIC50YWJzIC5hY3RpdmUgPiBhOmhvdmVyIHsKKyAgY29sb3I6ICM4MDgwODA7CisgIGJh
Y2tncm91bmQtY29sb3I6ICNmZmZmZmY7CisgIGJvcmRlcjogMXB4IHNvbGlkICNkZGQ7CisgIGJv
cmRlci1ib3R0b20tY29sb3I6IHRyYW5zcGFyZW50OworICBjdXJzb3I6IGRlZmF1bHQ7Cit9Cisu
dGFicyAubWVudS1kcm9wZG93biwgLnRhYnMgLmRyb3Bkb3duLW1lbnUgeworICB0b3A6IDM1cHg7
CisgIGJvcmRlci13aWR0aDogMXB4OworICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDAgNnB4IDZw
eCA2cHg7CisgIC1tb3otYm9yZGVyLXJhZGl1czogMCA2cHggNnB4IDZweDsKKyAgYm9yZGVyLXJh
ZGl1czogMCA2cHggNnB4IDZweDsKK30KKy50YWJzIGEubWVudTphZnRlciwgLnRhYnMgLmRyb3Bk
b3duLXRvZ2dsZTphZnRlciB7CisgIGJvcmRlci10b3AtY29sb3I6ICM5OTk7CisgIG1hcmdpbi10
b3A6IDE1cHg7CisgIG1hcmdpbi1sZWZ0OiA1cHg7Cit9CisudGFicyBsaS5vcGVuLm1lbnUgLm1l
bnUsIC50YWJzIC5vcGVuLmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGUgeworICBib3JkZXItY29s
b3I6ICM5OTk7Cit9CisudGFicyBsaS5vcGVuIGEubWVudTphZnRlciwgLnRhYnMgLmRyb3Bkb3du
Lm9wZW4gLmRyb3Bkb3duLXRvZ2dsZTphZnRlciB7CisgIGJvcmRlci10b3AtY29sb3I6ICM1NTU7
Cit9CisucGlsbHMgYSB7CisgIG1hcmdpbjogNXB4IDNweCA1cHggMDsKKyAgcGFkZGluZzogMCAx
NXB4OworICBsaW5lLWhlaWdodDogMzBweDsKKyAgdGV4dC1zaGFkb3c6IDAgMXB4IDFweCAjZmZm
ZmZmOworICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDE1cHg7CisgIC1tb3otYm9yZGVyLXJhZGl1
czogMTVweDsKKyAgYm9yZGVyLXJhZGl1czogMTVweDsKK30KKy5waWxscyBhOmhvdmVyIHsKKyAg
Y29sb3I6ICNmZmZmZmY7CisgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKKyAgdGV4dC1zaGFkb3c6
IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMjUpOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA0
MzhhOworfQorLnBpbGxzIC5hY3RpdmUgYSB7CisgIGNvbG9yOiAjZmZmZmZmOworICB0ZXh0LXNo
YWRvdzogMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4yNSk7CisgIGJhY2tncm91bmQtY29sb3I6
ICMwMDY5ZDY7Cit9CisucGlsbHMtdmVydGljYWwgPiBsaSB7CisgIGZsb2F0OiBub25lOworfQor
LnRhYi1jb250ZW50ID4gLnRhYi1wYW5lLAorLnBpbGwtY29udGVudCA+IC5waWxsLXBhbmUsCisu
dGFiLWNvbnRlbnQgPiBkaXYsCisucGlsbC1jb250ZW50ID4gZGl2IHsKKyAgZGlzcGxheTogbm9u
ZTsKK30KKy50YWItY29udGVudCA+IC5hY3RpdmUsIC5waWxsLWNvbnRlbnQgPiAuYWN0aXZlIHsK
KyAgZGlzcGxheTogYmxvY2s7Cit9CisuYnJlYWRjcnVtYiB7CisgIHBhZGRpbmc6IDdweCAxNHB4
OworICBtYXJnaW46IDAgMCAxOHB4OworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1OworICBi
YWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7CisgIGJhY2tncm91bmQtaW1hZ2U6IC1raHRtbC1n
cmFkaWVudChsaW5lYXIsIGxlZnQgdG9wLCBsZWZ0IGJvdHRvbSwgZnJvbSgjZmZmZmZmKSwgdG8o
I2Y1ZjVmNSkpOworICBiYWNrZ3JvdW5kLWltYWdlOiAtbW96LWxpbmVhci1ncmFkaWVudCh0b3As
ICNmZmZmZmYsICNmNWY1ZjUpOworICBiYWNrZ3JvdW5kLWltYWdlOiAtbXMtbGluZWFyLWdyYWRp
ZW50KHRvcCwgI2ZmZmZmZiwgI2Y1ZjVmNSk7CisgIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQt
Z3JhZGllbnQobGluZWFyLCBsZWZ0IHRvcCwgbGVmdCBib3R0b20sIGNvbG9yLXN0b3AoMCUsICNm
ZmZmZmYpLCBjb2xvci1zdG9wKDEwMCUsICNmNWY1ZjUpKTsKKyAgYmFja2dyb3VuZC1pbWFnZTog
LXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCAjZmZmZmZmLCAjZjVmNWY1KTsKKyAgYmFja2dy
b3VuZC1pbWFnZTogLW8tbGluZWFyLWdyYWRpZW50KHRvcCwgI2ZmZmZmZiwgI2Y1ZjVmNSk7Cisg
IGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0b3AsICNmZmZmZmYsICNmNWY1ZjUp
OworICBmaWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChz
dGFydENvbG9yc3RyPScjZmZmZmZmJywgZW5kQ29sb3JzdHI9JyNmNWY1ZjUnLCBHcmFkaWVudFR5
cGU9MCk7CisgIGJvcmRlcjogMXB4IHNvbGlkICNkZGQ7CisgIC13ZWJraXQtYm9yZGVyLXJhZGl1
czogM3B4OworICAtbW96LWJvcmRlci1yYWRpdXM6IDNweDsKKyAgYm9yZGVyLXJhZGl1czogM3B4
OworICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDAgI2ZmZmZmZjsKKyAgLW1vei1i
b3gtc2hhZG93OiBpbnNldCAwIDFweCAwICNmZmZmZmY7CisgIGJveC1zaGFkb3c6IGluc2V0IDAg
MXB4IDAgI2ZmZmZmZjsKK30KKy5icmVhZGNydW1iIGxpIHsKKyAgZGlzcGxheTogaW5saW5lOwor
ICB0ZXh0LXNoYWRvdzogMCAxcHggMCAjZmZmZmZmOworfQorLmJyZWFkY3J1bWIgLmRpdmlkZXIg
eworICBwYWRkaW5nOiAwIDVweDsKKyAgY29sb3I6ICNiZmJmYmY7Cit9CisuYnJlYWRjcnVtYiAu
YWN0aXZlIGEgeworICBjb2xvcjogIzQwNDA0MDsKK30KKy5oZXJvLXVuaXQgeworICBiYWNrZ3Jv
dW5kLWNvbG9yOiAjZjVmNWY1OworICBtYXJnaW4tYm90dG9tOiAzMHB4OworICBwYWRkaW5nOiA2
MHB4OworICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDZweDsKKyAgLW1vei1ib3JkZXItcmFkaXVz
OiA2cHg7CisgIGJvcmRlci1yYWRpdXM6IDZweDsKK30KKy5oZXJvLXVuaXQgaDEgeworICBtYXJn
aW4tYm90dG9tOiAwOworICBmb250LXNpemU6IDYwcHg7CisgIGxpbmUtaGVpZ2h0OiAxOworICBs
ZXR0ZXItc3BhY2luZzogLTFweDsKK30KKy5oZXJvLXVuaXQgcCB7CisgIGZvbnQtc2l6ZTogMThw
eDsKKyAgZm9udC13ZWlnaHQ6IDIwMDsKKyAgbGluZS1oZWlnaHQ6IDI3cHg7Cit9Citmb290ZXIg
eworICBtYXJnaW4tdG9wOiAxN3B4OworICBwYWRkaW5nLXRvcDogMTdweDsKKyAgYm9yZGVyLXRv
cDogMXB4IHNvbGlkICNlZWU7Cit9CisucGFnZS1oZWFkZXIgeworICBtYXJnaW4tYm90dG9tOiAx
N3B4OworICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2RkZDsKKyAgLXdlYmtpdC1ib3gtc2hh
ZG93OiAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTsKKyAgLW1vei1ib3gtc2hhZG93
OiAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTsKKyAgYm94LXNoYWRvdzogMCAxcHgg
MCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7Cit9CisucGFnZS1oZWFkZXIgaDEgeworICBtYXJn
aW4tYm90dG9tOiA4cHg7Cit9CisuYnRuLmRhbmdlciwKKy5hbGVydC1tZXNzYWdlLmRhbmdlciwK
Ky5idG4uZGFuZ2VyOmhvdmVyLAorLmFsZXJ0LW1lc3NhZ2UuZGFuZ2VyOmhvdmVyLAorLmJ0bi5l
cnJvciwKKy5hbGVydC1tZXNzYWdlLmVycm9yLAorLmJ0bi5lcnJvcjpob3ZlciwKKy5hbGVydC1t
ZXNzYWdlLmVycm9yOmhvdmVyLAorLmJ0bi5zdWNjZXNzLAorLmFsZXJ0LW1lc3NhZ2Uuc3VjY2Vz
cywKKy5idG4uc3VjY2Vzczpob3ZlciwKKy5hbGVydC1tZXNzYWdlLnN1Y2Nlc3M6aG92ZXIsCisu
YnRuLmluZm8sCisuYWxlcnQtbWVzc2FnZS5pbmZvLAorLmJ0bi5pbmZvOmhvdmVyLAorLmFsZXJ0
LW1lc3NhZ2UuaW5mbzpob3ZlciB7CisgIGNvbG9yOiAjZmZmZmZmOworfQorLmJ0biAuY2xvc2Us
IC5hbGVydC1tZXNzYWdlIC5jbG9zZSB7CisgIGZvbnQtZmFtaWx5OiBBcmlhbCwgc2Fucy1zZXJp
ZjsKKyAgbGluZS1oZWlnaHQ6IDE4cHg7Cit9CisuYnRuLmRhbmdlciwKKy5hbGVydC1tZXNzYWdl
LmRhbmdlciwKKy5idG4uZXJyb3IsCisuYWxlcnQtbWVzc2FnZS5lcnJvciB7CisgIGJhY2tncm91
bmQtY29sb3I6ICNjNDNjMzU7CisgIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDsKKyAgYmFj
a2dyb3VuZC1pbWFnZTogLWtodG1sLWdyYWRpZW50KGxpbmVhciwgbGVmdCB0b3AsIGxlZnQgYm90
dG9tLCBmcm9tKCNlZTVmNWIpLCB0bygjYzQzYzM1KSk7CisgIGJhY2tncm91bmQtaW1hZ2U6IC1t
b3otbGluZWFyLWdyYWRpZW50KHRvcCwgI2VlNWY1YiwgI2M0M2MzNSk7CisgIGJhY2tncm91bmQt
aW1hZ2U6IC1tcy1saW5lYXItZ3JhZGllbnQodG9wLCAjZWU1ZjViLCAjYzQzYzM1KTsKKyAgYmFj
a2dyb3VuZC1pbWFnZTogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIGxlZnQgdG9wLCBsZWZ0IGJv
dHRvbSwgY29sb3Itc3RvcCgwJSwgI2VlNWY1YiksIGNvbG9yLXN0b3AoMTAwJSwgI2M0M2MzNSkp
OworICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AsICNlZTVm
NWIsICNjNDNjMzUpOworICBiYWNrZ3JvdW5kLWltYWdlOiAtby1saW5lYXItZ3JhZGllbnQodG9w
LCAjZWU1ZjViLCAjYzQzYzM1KTsKKyAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50
KHRvcCwgI2VlNWY1YiwgI2M0M2MzNSk7CisgIGZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zv
cm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyNlZTVmNWInLCBlbmRDb2xvcnN0
cj0nI2M0M2MzNScsIEdyYWRpZW50VHlwZT0wKTsKKyAgdGV4dC1zaGFkb3c6IDAgLTFweCAwIHJn
YmEoMCwgMCwgMCwgMC4yNSk7CisgIGJvcmRlci1jb2xvcjogI2M0M2MzNSAjYzQzYzM1ICM4ODJh
MjU7CisgIGJvcmRlci1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjEpIHJnYmEoMCwgMCwgMCwgMC4x
KSByZ2JhKDAsIDAsIDAsIDAuMjUpOworfQorLmJ0bi5zdWNjZXNzLCAuYWxlcnQtbWVzc2FnZS5z
dWNjZXNzIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogIzU3YTk1NzsKKyAgYmFja2dyb3VuZC1yZXBl
YXQ6IHJlcGVhdC14OworICBiYWNrZ3JvdW5kLWltYWdlOiAta2h0bWwtZ3JhZGllbnQobGluZWFy
LCBsZWZ0IHRvcCwgbGVmdCBib3R0b20sIGZyb20oIzYyYzQ2MiksIHRvKCM1N2E5NTcpKTsKKyAg
YmFja2dyb3VuZC1pbWFnZTogLW1vei1saW5lYXItZ3JhZGllbnQodG9wLCAjNjJjNDYyLCAjNTdh
OTU3KTsKKyAgYmFja2dyb3VuZC1pbWFnZTogLW1zLWxpbmVhci1ncmFkaWVudCh0b3AsICM2MmM0
NjIsICM1N2E5NTcpOworICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWdyYWRpZW50KGxpbmVh
ciwgbGVmdCB0b3AsIGxlZnQgYm90dG9tLCBjb2xvci1zdG9wKDAlLCAjNjJjNDYyKSwgY29sb3It
c3RvcCgxMDAlLCAjNTdhOTU3KSk7CisgIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtbGluZWFy
LWdyYWRpZW50KHRvcCwgIzYyYzQ2MiwgIzU3YTk1Nyk7CisgIGJhY2tncm91bmQtaW1hZ2U6IC1v
LWxpbmVhci1ncmFkaWVudCh0b3AsICM2MmM0NjIsICM1N2E5NTcpOworICBiYWNrZ3JvdW5kLWlt
YWdlOiBsaW5lYXItZ3JhZGllbnQodG9wLCAjNjJjNDYyLCAjNTdhOTU3KTsKKyAgZmlsdGVyOiBw
cm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0n
IzYyYzQ2MicsIGVuZENvbG9yc3RyPScjNTdhOTU3JywgR3JhZGllbnRUeXBlPTApOworICB0ZXh0
LXNoYWRvdzogMCAtMXB4IDAgcmdiYSgwLCAwLCAwLCAwLjI1KTsKKyAgYm9yZGVyLWNvbG9yOiAj
NTdhOTU3ICM1N2E5NTcgIzNkNzczZDsKKyAgYm9yZGVyLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAu
MSkgcmdiYSgwLCAwLCAwLCAwLjEpIHJnYmEoMCwgMCwgMCwgMC4yNSk7Cit9CisuYnRuLmluZm8s
IC5hbGVydC1tZXNzYWdlLmluZm8geworICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzM5YmI5OworICBi
YWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7CisgIGJhY2tncm91bmQtaW1hZ2U6IC1raHRtbC1n
cmFkaWVudChsaW5lYXIsIGxlZnQgdG9wLCBsZWZ0IGJvdHRvbSwgZnJvbSgjNWJjMGRlKSwgdG8o
IzMzOWJiOSkpOworICBiYWNrZ3JvdW5kLWltYWdlOiAtbW96LWxpbmVhci1ncmFkaWVudCh0b3As
ICM1YmMwZGUsICMzMzliYjkpOworICBiYWNrZ3JvdW5kLWltYWdlOiAtbXMtbGluZWFyLWdyYWRp
ZW50KHRvcCwgIzViYzBkZSwgIzMzOWJiOSk7CisgIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQt
Z3JhZGllbnQobGluZWFyLCBsZWZ0IHRvcCwgbGVmdCBib3R0b20sIGNvbG9yLXN0b3AoMCUsICM1
YmMwZGUpLCBjb2xvci1zdG9wKDEwMCUsICMzMzliYjkpKTsKKyAgYmFja2dyb3VuZC1pbWFnZTog
LXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCAjNWJjMGRlLCAjMzM5YmI5KTsKKyAgYmFja2dy
b3VuZC1pbWFnZTogLW8tbGluZWFyLWdyYWRpZW50KHRvcCwgIzViYzBkZSwgIzMzOWJiOSk7Cisg
IGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0b3AsICM1YmMwZGUsICMzMzliYjkp
OworICBmaWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChz
dGFydENvbG9yc3RyPScjNWJjMGRlJywgZW5kQ29sb3JzdHI9JyMzMzliYjknLCBHcmFkaWVudFR5
cGU9MCk7CisgIHRleHQtc2hhZG93OiAwIC0xcHggMCByZ2JhKDAsIDAsIDAsIDAuMjUpOworICBi
b3JkZXItY29sb3I6ICMzMzliYjkgIzMzOWJiOSAjMjI2OTdkOworICBib3JkZXItY29sb3I6IHJn
YmEoMCwgMCwgMCwgMC4xKSByZ2JhKDAsIDAsIDAsIDAuMSkgcmdiYSgwLCAwLCAwLCAwLjI1KTsK
K30KKy5idG4geworICBjdXJzb3I6IHBvaW50ZXI7CisgIGRpc3BsYXk6IGlubGluZS1ibG9jazsK
KyAgYmFja2dyb3VuZC1jb2xvcjogI2U2ZTZlNjsKKyAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJl
cGVhdDsKKyAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIDAgMCwg
MCAxMDAlLCBmcm9tKCNmZmZmZmYpLCBjb2xvci1zdG9wKDI1JSwgI2ZmZmZmZiksIHRvKCNlNmU2
ZTYpKTsKKyAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQoI2ZmZmZm
ZiwgI2ZmZmZmZiAyNSUsICNlNmU2ZTYpOworICBiYWNrZ3JvdW5kLWltYWdlOiAtbW96LWxpbmVh
ci1ncmFkaWVudCh0b3AsICNmZmZmZmYsICNmZmZmZmYgMjUlLCAjZTZlNmU2KTsKKyAgYmFja2dy
b3VuZC1pbWFnZTogLW1zLWxpbmVhci1ncmFkaWVudCgjZmZmZmZmLCAjZmZmZmZmIDI1JSwgI2U2
ZTZlNik7CisgIGJhY2tncm91bmQtaW1hZ2U6IC1vLWxpbmVhci1ncmFkaWVudCgjZmZmZmZmLCAj
ZmZmZmZmIDI1JSwgI2U2ZTZlNik7CisgIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVu
dCgjZmZmZmZmLCAjZmZmZmZmIDI1JSwgI2U2ZTZlNik7CisgIGZpbHRlcjogcHJvZ2lkOkRYSW1h
Z2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyNmZmZmZmYnLCBl
bmRDb2xvcnN0cj0nI2U2ZTZlNicsIEdyYWRpZW50VHlwZT0wKTsKKyAgcGFkZGluZzogNXB4IDE0
cHggNnB4OworICB0ZXh0LXNoYWRvdzogMCAxcHggMXB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43
NSk7CisgIGNvbG9yOiAjMzMzOworICBmb250LXNpemU6IDEzcHg7CisgIGxpbmUtaGVpZ2h0OiBu
b3JtYWw7CisgIGJvcmRlcjogMXB4IHNvbGlkICNjY2M7CisgIGJvcmRlci1ib3R0b20tY29sb3I6
ICNiYmI7CisgIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNHB4OworICAtbW96LWJvcmRlci1yYWRp
dXM6IDRweDsKKyAgYm9yZGVyLXJhZGl1czogNHB4OworICAtd2Via2l0LWJveC1zaGFkb3c6IGlu
c2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpLCAwIDFweCAycHggcmdiYSgwLCAw
LCAwLCAwLjA1KTsKKyAgLW1vei1ib3gtc2hhZG93OiBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAy
NTUsIDI1NSwgMC4yKSwgMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4wNSk7CisgIGJveC1zaGFk
b3c6IGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpLCAwIDFweCAycHggcmdi
YSgwLCAwLCAwLCAwLjA1KTsKKyAgLXdlYmtpdC10cmFuc2l0aW9uOiAwLjFzIGxpbmVhciBhbGw7
CisgIC1tb3otdHJhbnNpdGlvbjogMC4xcyBsaW5lYXIgYWxsOworICAtbXMtdHJhbnNpdGlvbjog
MC4xcyBsaW5lYXIgYWxsOworICAtby10cmFuc2l0aW9uOiAwLjFzIGxpbmVhciBhbGw7CisgIHRy
YW5zaXRpb246IDAuMXMgbGluZWFyIGFsbDsKK30KKy5idG46aG92ZXIgeworICBiYWNrZ3JvdW5k
LXBvc2l0aW9uOiAwIC0xNXB4OworICBjb2xvcjogIzMzMzsKKyAgdGV4dC1kZWNvcmF0aW9uOiBu
b25lOworfQorLmJ0bjpmb2N1cyB7CisgIG91dGxpbmU6IDFweCBkb3R0ZWQgIzY2NjsKK30KKy5i
dG4ucHJpbWFyeSB7CisgIGNvbG9yOiAjZmZmZmZmOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA2
NGNkOworICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7CisgIGJhY2tncm91bmQtaW1hZ2U6
IC1raHRtbC1ncmFkaWVudChsaW5lYXIsIGxlZnQgdG9wLCBsZWZ0IGJvdHRvbSwgZnJvbSgjMDQ5
Y2RiKSwgdG8oIzAwNjRjZCkpOworICBiYWNrZ3JvdW5kLWltYWdlOiAtbW96LWxpbmVhci1ncmFk
aWVudCh0b3AsICMwNDljZGIsICMwMDY0Y2QpOworICBiYWNrZ3JvdW5kLWltYWdlOiAtbXMtbGlu
ZWFyLWdyYWRpZW50KHRvcCwgIzA0OWNkYiwgIzAwNjRjZCk7CisgIGJhY2tncm91bmQtaW1hZ2U6
IC13ZWJraXQtZ3JhZGllbnQobGluZWFyLCBsZWZ0IHRvcCwgbGVmdCBib3R0b20sIGNvbG9yLXN0
b3AoMCUsICMwNDljZGIpLCBjb2xvci1zdG9wKDEwMCUsICMwMDY0Y2QpKTsKKyAgYmFja2dyb3Vu
ZC1pbWFnZTogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCAjMDQ5Y2RiLCAjMDA2NGNkKTsK
KyAgYmFja2dyb3VuZC1pbWFnZTogLW8tbGluZWFyLWdyYWRpZW50KHRvcCwgIzA0OWNkYiwgIzAw
NjRjZCk7CisgIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0b3AsICMwNDljZGIs
ICMwMDY0Y2QpOworICBmaWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5n
cmFkaWVudChzdGFydENvbG9yc3RyPScjMDQ5Y2RiJywgZW5kQ29sb3JzdHI9JyMwMDY0Y2QnLCBH
cmFkaWVudFR5cGU9MCk7CisgIHRleHQtc2hhZG93OiAwIC0xcHggMCByZ2JhKDAsIDAsIDAsIDAu
MjUpOworICBib3JkZXItY29sb3I6ICMwMDY0Y2QgIzAwNjRjZCAjMDAzZjgxOworICBib3JkZXIt
Y29sb3I6IHJnYmEoMCwgMCwgMCwgMC4xKSByZ2JhKDAsIDAsIDAsIDAuMSkgcmdiYSgwLCAwLCAw
LCAwLjI1KTsKK30KKy5idG4uYWN0aXZlLCAuYnRuOmFjdGl2ZSB7CisgIC13ZWJraXQtYm94LXNo
YWRvdzogaW5zZXQgMCAycHggNHB4IHJnYmEoMCwgMCwgMCwgMC4yNSksIDAgMXB4IDJweCByZ2Jh
KDAsIDAsIDAsIDAuMDUpOworICAtbW96LWJveC1zaGFkb3c6IGluc2V0IDAgMnB4IDRweCByZ2Jh
KDAsIDAsIDAsIDAuMjUpLCAwIDFweCAycHggcmdiYSgwLCAwLCAwLCAwLjA1KTsKKyAgYm94LXNo
YWRvdzogaW5zZXQgMCAycHggNHB4IHJnYmEoMCwgMCwgMCwgMC4yNSksIDAgMXB4IDJweCByZ2Jh
KDAsIDAsIDAsIDAuMDUpOworfQorLmJ0bi5kaXNhYmxlZCB7CisgIGN1cnNvcjogZGVmYXVsdDsK
KyAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTsKKyAgZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5z
Zm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoZW5hYmxlZCA9IGZhbHNlKTsKKyAgZmlsdGVyOiBhbHBo
YShvcGFjaXR5PTY1KTsKKyAgLWtodG1sLW9wYWNpdHk6IDAuNjU7CisgIC1tb3otb3BhY2l0eTog
MC42NTsKKyAgb3BhY2l0eTogMC42NTsKKyAgLXdlYmtpdC1ib3gtc2hhZG93OiBub25lOworICAt
bW96LWJveC1zaGFkb3c6IG5vbmU7CisgIGJveC1zaGFkb3c6IG5vbmU7Cit9CisuYnRuW2Rpc2Fi
bGVkXSB7CisgIGN1cnNvcjogZGVmYXVsdDsKKyAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTsKKyAg
ZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoZW5hYmxl
ZCA9IGZhbHNlKTsKKyAgZmlsdGVyOiBhbHBoYShvcGFjaXR5PTY1KTsKKyAgLWtodG1sLW9wYWNp
dHk6IDAuNjU7CisgIC1tb3otb3BhY2l0eTogMC42NTsKKyAgb3BhY2l0eTogMC42NTsKKyAgLXdl
YmtpdC1ib3gtc2hhZG93OiBub25lOworICAtbW96LWJveC1zaGFkb3c6IG5vbmU7CisgIGJveC1z
aGFkb3c6IG5vbmU7Cit9CisuYnRuLmxhcmdlIHsKKyAgZm9udC1zaXplOiAxNXB4OworICBsaW5l
LWhlaWdodDogbm9ybWFsOworICBwYWRkaW5nOiA5cHggMTRweCA5cHg7CisgIC13ZWJraXQtYm9y
ZGVyLXJhZGl1czogNnB4OworICAtbW96LWJvcmRlci1yYWRpdXM6IDZweDsKKyAgYm9yZGVyLXJh
ZGl1czogNnB4OworfQorLmJ0bi5zbWFsbCB7CisgIHBhZGRpbmc6IDdweCA5cHggN3B4OworICBm
b250LXNpemU6IDExcHg7Cit9Cis6cm9vdCAuYWxlcnQtbWVzc2FnZSwgOnJvb3QgLmJ0biB7Cisg
IGJvcmRlci1yYWRpdXM6IDAgXDA7Cit9CitidXR0b24uYnRuOjotbW96LWZvY3VzLWlubmVyLCBp
bnB1dFt0eXBlPXN1Ym1pdF0uYnRuOjotbW96LWZvY3VzLWlubmVyIHsKKyAgcGFkZGluZzogMDsK
KyAgYm9yZGVyOiAwOworfQorLmNsb3NlIHsKKyAgZmxvYXQ6IHJpZ2h0OworICBjb2xvcjogIzAw
MDAwMDsKKyAgZm9udC1zaXplOiAyMHB4OworICBmb250LXdlaWdodDogYm9sZDsKKyAgbGluZS1o
ZWlnaHQ6IDEzLjVweDsKKyAgdGV4dC1zaGFkb3c6IDAgMXB4IDAgI2ZmZmZmZjsKKyAgZmlsdGVy
OiBhbHBoYShvcGFjaXR5PTI1KTsKKyAgLWtodG1sLW9wYWNpdHk6IDAuMjU7CisgIC1tb3otb3Bh
Y2l0eTogMC4yNTsKKyAgb3BhY2l0eTogMC4yNTsKK30KKy5jbG9zZTpob3ZlciB7CisgIGNvbG9y
OiAjMDAwMDAwOworICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CisgIGZpbHRlcjogYWxwaGEob3Bh
Y2l0eT00MCk7CisgIC1raHRtbC1vcGFjaXR5OiAwLjQ7CisgIC1tb3otb3BhY2l0eTogMC40Owor
ICBvcGFjaXR5OiAwLjQ7Cit9CisuYWxlcnQtbWVzc2FnZSB7CisgIHBvc2l0aW9uOiByZWxhdGl2
ZTsKKyAgcGFkZGluZzogN3B4IDE1cHg7CisgIG1hcmdpbi1ib3R0b206IDE4cHg7CisgIGNvbG9y
OiAjNDA0MDQwOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVkYzk0OworICBiYWNrZ3JvdW5kLXJl
cGVhdDogcmVwZWF0LXg7CisgIGJhY2tncm91bmQtaW1hZ2U6IC1raHRtbC1ncmFkaWVudChsaW5l
YXIsIGxlZnQgdG9wLCBsZWZ0IGJvdHRvbSwgZnJvbSgjZmNlZWMxKSwgdG8oI2VlZGM5NCkpOwor
ICBiYWNrZ3JvdW5kLWltYWdlOiAtbW96LWxpbmVhci1ncmFkaWVudCh0b3AsICNmY2VlYzEsICNl
ZWRjOTQpOworICBiYWNrZ3JvdW5kLWltYWdlOiAtbXMtbGluZWFyLWdyYWRpZW50KHRvcCwgI2Zj
ZWVjMSwgI2VlZGM5NCk7CisgIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtZ3JhZGllbnQobGlu
ZWFyLCBsZWZ0IHRvcCwgbGVmdCBib3R0b20sIGNvbG9yLXN0b3AoMCUsICNmY2VlYzEpLCBjb2xv
ci1zdG9wKDEwMCUsICNlZWRjOTQpKTsKKyAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1saW5l
YXItZ3JhZGllbnQodG9wLCAjZmNlZWMxLCAjZWVkYzk0KTsKKyAgYmFja2dyb3VuZC1pbWFnZTog
LW8tbGluZWFyLWdyYWRpZW50KHRvcCwgI2ZjZWVjMSwgI2VlZGM5NCk7CisgIGJhY2tncm91bmQt
aW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0b3AsICNmY2VlYzEsICNlZWRjOTQpOworICBmaWx0ZXI6
IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3Ry
PScjZmNlZWMxJywgZW5kQ29sb3JzdHI9JyNlZWRjOTQnLCBHcmFkaWVudFR5cGU9MCk7CisgIHRl
eHQtc2hhZG93OiAwIC0xcHggMCByZ2JhKDAsIDAsIDAsIDAuMjUpOworICBib3JkZXItY29sb3I6
ICNlZWRjOTQgI2VlZGM5NCAjZTRjNjUyOworICBib3JkZXItY29sb3I6IHJnYmEoMCwgMCwgMCwg
MC4xKSByZ2JhKDAsIDAsIDAsIDAuMSkgcmdiYSgwLCAwLCAwLCAwLjI1KTsKKyAgdGV4dC1zaGFk
b3c6IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpOworICBib3JkZXItd2lkdGg6IDFw
eDsKKyAgYm9yZGVyLXN0eWxlOiBzb2xpZDsKKyAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA0cHg7
CisgIC1tb3otYm9yZGVyLXJhZGl1czogNHB4OworICBib3JkZXItcmFkaXVzOiA0cHg7CisgIC13
ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjUp
OworICAtbW96LWJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAw
LjI1KTsKKyAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAu
MjUpOworfQorLmFsZXJ0LW1lc3NhZ2UgLmNsb3NlIHsKKyAgbWFyZ2luLXRvcDogMXB4OworICAq
bWFyZ2luLXRvcDogMDsKK30KKy5hbGVydC1tZXNzYWdlIGEgeworICBmb250LXdlaWdodDogYm9s
ZDsKKyAgY29sb3I6ICM0MDQwNDA7Cit9CisuYWxlcnQtbWVzc2FnZS5kYW5nZXIgcCBhLAorLmFs
ZXJ0LW1lc3NhZ2UuZXJyb3IgcCBhLAorLmFsZXJ0LW1lc3NhZ2Uuc3VjY2VzcyBwIGEsCisuYWxl
cnQtbWVzc2FnZS5pbmZvIHAgYSB7CisgIGNvbG9yOiAjZmZmZmZmOworfQorLmFsZXJ0LW1lc3Nh
Z2UgaDUgeworICBsaW5lLWhlaWdodDogMThweDsKK30KKy5hbGVydC1tZXNzYWdlIHAgeworICBt
YXJnaW4tYm90dG9tOiAwOworfQorLmFsZXJ0LW1lc3NhZ2UgZGl2IHsKKyAgbWFyZ2luLXRvcDog
NXB4OworICBtYXJnaW4tYm90dG9tOiAycHg7CisgIGxpbmUtaGVpZ2h0OiAyOHB4OworfQorLmFs
ZXJ0LW1lc3NhZ2UgLmJ0biB7CisgIC13ZWJraXQtYm94LXNoYWRvdzogMCAxcHggMCByZ2JhKDI1
NSwgMjU1LCAyNTUsIDAuMjUpOworICAtbW96LWJveC1zaGFkb3c6IDAgMXB4IDAgcmdiYSgyNTUs
IDI1NSwgMjU1LCAwLjI1KTsKKyAgYm94LXNoYWRvdzogMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAy
NTUsIDAuMjUpOworfQorLmFsZXJ0LW1lc3NhZ2UuYmxvY2stbWVzc2FnZSB7CisgIGJhY2tncm91
bmQtaW1hZ2U6IG5vbmU7CisgIGJhY2tncm91bmQtY29sb3I6ICNmZGY1ZDk7CisgIGZpbHRlcjog
cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KGVuYWJsZWQgPSBmYWxz
ZSk7CisgIHBhZGRpbmc6IDE0cHg7CisgIGJvcmRlci1jb2xvcjogI2ZjZWVjMTsKKyAgLXdlYmtp
dC1ib3gtc2hhZG93OiBub25lOworICAtbW96LWJveC1zaGFkb3c6IG5vbmU7CisgIGJveC1zaGFk
b3c6IG5vbmU7Cit9CisuYWxlcnQtbWVzc2FnZS5ibG9jay1tZXNzYWdlIHVsLCAuYWxlcnQtbWVz
c2FnZS5ibG9jay1tZXNzYWdlIHAgeworICBtYXJnaW4tcmlnaHQ6IDMwcHg7Cit9CisuYWxlcnQt
bWVzc2FnZS5ibG9jay1tZXNzYWdlIHVsIHsKKyAgbWFyZ2luLWJvdHRvbTogMDsKK30KKy5hbGVy
dC1tZXNzYWdlLmJsb2NrLW1lc3NhZ2UgbGkgeworICBjb2xvcjogIzQwNDA0MDsKK30KKy5hbGVy
dC1tZXNzYWdlLmJsb2NrLW1lc3NhZ2UgLmFsZXJ0LWFjdGlvbnMgeworICBtYXJnaW4tdG9wOiA1
cHg7Cit9CisuYWxlcnQtbWVzc2FnZS5ibG9jay1tZXNzYWdlLmVycm9yLCAuYWxlcnQtbWVzc2Fn
ZS5ibG9jay1tZXNzYWdlLnN1Y2Nlc3MsIC5hbGVydC1tZXNzYWdlLmJsb2NrLW1lc3NhZ2UuaW5m
byB7CisgIGNvbG9yOiAjNDA0MDQwOworICB0ZXh0LXNoYWRvdzogMCAxcHggMCByZ2JhKDI1NSwg
MjU1LCAyNTUsIDAuNSk7Cit9CisuYWxlcnQtbWVzc2FnZS5ibG9jay1tZXNzYWdlLmVycm9yIHsK
KyAgYmFja2dyb3VuZC1jb2xvcjogI2ZkZGZkZTsKKyAgYm9yZGVyLWNvbG9yOiAjZmJjN2M2Owor
fQorLmFsZXJ0LW1lc3NhZ2UuYmxvY2stbWVzc2FnZS5zdWNjZXNzIHsKKyAgYmFja2dyb3VuZC1j
b2xvcjogI2QxZWVkMTsKKyAgYm9yZGVyLWNvbG9yOiAjYmZlN2JmOworfQorLmFsZXJ0LW1lc3Nh
Z2UuYmxvY2stbWVzc2FnZS5pbmZvIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2RkZjRmYjsKKyAg
Ym9yZGVyLWNvbG9yOiAjYzZlZGY5OworfQorLmFsZXJ0LW1lc3NhZ2UuYmxvY2stbWVzc2FnZS5k
YW5nZXIgcCBhLAorLmFsZXJ0LW1lc3NhZ2UuYmxvY2stbWVzc2FnZS5lcnJvciBwIGEsCisuYWxl
cnQtbWVzc2FnZS5ibG9jay1tZXNzYWdlLnN1Y2Nlc3MgcCBhLAorLmFsZXJ0LW1lc3NhZ2UuYmxv
Y2stbWVzc2FnZS5pbmZvIHAgYSB7CisgIGNvbG9yOiAjNDA0MDQwOworfQorLnBhZ2luYXRpb24g
eworICBoZWlnaHQ6IDM2cHg7CisgIG1hcmdpbjogMThweCAwOworfQorLnBhZ2luYXRpb24gdWwg
eworICBmbG9hdDogbGVmdDsKKyAgbWFyZ2luOiAwOworICBib3JkZXI6IDFweCBzb2xpZCAjZGRk
OworICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuMTUpOworICAtd2Via2l0LWJv
cmRlci1yYWRpdXM6IDNweDsKKyAgLW1vei1ib3JkZXItcmFkaXVzOiAzcHg7CisgIGJvcmRlci1y
YWRpdXM6IDNweDsKKyAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDFweCAycHggcmdiYSgwLCAwLCAw
LCAwLjA1KTsKKyAgLW1vei1ib3gtc2hhZG93OiAwIDFweCAycHggcmdiYSgwLCAwLCAwLCAwLjA1
KTsKKyAgYm94LXNoYWRvdzogMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4wNSk7Cit9CisucGFn
aW5hdGlvbiBsaSB7CisgIGRpc3BsYXk6IGlubGluZTsKK30KKy5wYWdpbmF0aW9uIGEgeworICBm
bG9hdDogbGVmdDsKKyAgcGFkZGluZzogMCAxNHB4OworICBsaW5lLWhlaWdodDogMzRweDsKKyAg
Ym9yZGVyLXJpZ2h0OiAxcHggc29saWQ7CisgIGJvcmRlci1yaWdodC1jb2xvcjogI2RkZDsKKyAg
Ym9yZGVyLXJpZ2h0LWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMTUpOworICAqYm9yZGVyLXJpZ2h0
LWNvbG9yOiAjZGRkOworICAvKiBJRTYtNyAqLworCisgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsK
K30KKy5wYWdpbmF0aW9uIGE6aG92ZXIsIC5wYWdpbmF0aW9uIC5hY3RpdmUgYSB7CisgIGJhY2tn
cm91bmQtY29sb3I6ICNjN2VlZmU7Cit9CisucGFnaW5hdGlvbiAuZGlzYWJsZWQgYSwgLnBhZ2lu
YXRpb24gLmRpc2FibGVkIGE6aG92ZXIgeworICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVu
dDsKKyAgY29sb3I6ICNiZmJmYmY7Cit9CisucGFnaW5hdGlvbiAubmV4dCBhIHsKKyAgYm9yZGVy
OiAwOworfQorLndlbGwgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1OworICBtYXJnaW4t
Ym90dG9tOiAyMHB4OworICBwYWRkaW5nOiAxOXB4OworICBtaW4taGVpZ2h0OiAyMHB4OworICBi
b3JkZXI6IDFweCBzb2xpZCAjZWVlOworICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDAsIDAsIDAs
IDAuMDUpOworICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDRweDsKKyAgLW1vei1ib3JkZXItcmFk
aXVzOiA0cHg7CisgIGJvcmRlci1yYWRpdXM6IDRweDsKKyAgLXdlYmtpdC1ib3gtc2hhZG93OiBp
bnNldCAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjA1KTsKKyAgLW1vei1ib3gtc2hhZG93OiBp
bnNldCAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjA1KTsKKyAgYm94LXNoYWRvdzogaW5zZXQg
MCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wNSk7Cit9Cisud2VsbCBibG9ja3F1b3RlIHsKKyAg
Ym9yZGVyLWNvbG9yOiAjZGRkOworICBib3JkZXItY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4xNSk7
Cit9CisubW9kYWwtYmFja2Ryb3AgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwMDAwOworICBw
b3NpdGlvbjogZml4ZWQ7CisgIHRvcDogMDsKKyAgbGVmdDogMDsKKyAgcmlnaHQ6IDA7CisgIGJv
dHRvbTogMDsKKyAgei1pbmRleDogMTAwMDA7Cit9CisubW9kYWwtYmFja2Ryb3AuZmFkZSB7Cisg
IG9wYWNpdHk6IDA7Cit9CisubW9kYWwtYmFja2Ryb3AsIC5tb2RhbC1iYWNrZHJvcC5mYWRlLmlu
IHsKKyAgZmlsdGVyOiBhbHBoYShvcGFjaXR5PTgwKTsKKyAgLWtodG1sLW9wYWNpdHk6IDAuODsK
KyAgLW1vei1vcGFjaXR5OiAwLjg7CisgIG9wYWNpdHk6IDAuODsKK30KKy5tb2RhbCB7CisgIHBv
c2l0aW9uOiBmaXhlZDsKKyAgdG9wOiA1MCU7CisgIGxlZnQ6IDUwJTsKKyAgei1pbmRleDogMTEw
MDA7CisgIG1heC1oZWlnaHQ6IDUwMHB4OworICBvdmVyZmxvdzogYXV0bzsKKyAgd2lkdGg6IDU2
MHB4OworICBtYXJnaW46IC0yNTBweCAwIDAgLTI4MHB4OworICBiYWNrZ3JvdW5kLWNvbG9yOiAj
ZmZmZmZmOworICBib3JkZXI6IDFweCBzb2xpZCAjOTk5OworICBib3JkZXI6IDFweCBzb2xpZCBy
Z2JhKDAsIDAsIDAsIDAuMyk7CisgICpib3JkZXI6IDFweCBzb2xpZCAjOTk5OworICAvKiBJRTYt
NyAqLworCisgIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNnB4OworICAtbW96LWJvcmRlci1yYWRp
dXM6IDZweDsKKyAgYm9yZGVyLXJhZGl1czogNnB4OworICAtd2Via2l0LWJveC1zaGFkb3c6IDAg
M3B4IDdweCByZ2JhKDAsIDAsIDAsIDAuMyk7CisgIC1tb3otYm94LXNoYWRvdzogMCAzcHggN3B4
IHJnYmEoMCwgMCwgMCwgMC4zKTsKKyAgYm94LXNoYWRvdzogMCAzcHggN3B4IHJnYmEoMCwgMCwg
MCwgMC4zKTsKKyAgLXdlYmtpdC1iYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmctYm94OworICAtbW96
LWJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7CisgIGJhY2tncm91bmQtY2xpcDogcGFkZGlu
Zy1ib3g7Cit9CisubW9kYWwgLmNsb3NlIHsKKyAgbWFyZ2luLXRvcDogN3B4OworfQorLm1vZGFs
LmZhZGUgeworICAtd2Via2l0LXRyYW5zaXRpb246IG9wYWNpdHkgLjNzIGxpbmVhciwgdG9wIC4z
cyBlYXNlLW91dDsKKyAgLW1vei10cmFuc2l0aW9uOiBvcGFjaXR5IC4zcyBsaW5lYXIsIHRvcCAu
M3MgZWFzZS1vdXQ7CisgIC1tcy10cmFuc2l0aW9uOiBvcGFjaXR5IC4zcyBsaW5lYXIsIHRvcCAu
M3MgZWFzZS1vdXQ7CisgIC1vLXRyYW5zaXRpb246IG9wYWNpdHkgLjNzIGxpbmVhciwgdG9wIC4z
cyBlYXNlLW91dDsKKyAgdHJhbnNpdGlvbjogb3BhY2l0eSAuM3MgbGluZWFyLCB0b3AgLjNzIGVh
c2Utb3V0OworICB0b3A6IC0yNSU7Cit9CisubW9kYWwuZmFkZS5pbiB7CisgIHRvcDogNTAlOwor
fQorLm1vZGFsLWhlYWRlciB7CisgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZWVlOworICBw
YWRkaW5nOiA1cHggMTVweDsKK30KKy5tb2RhbC1ib2R5IHsKKyAgcGFkZGluZzogMTVweDsKK30K
Ky5tb2RhbC1ib2R5IGZvcm0geworICBtYXJnaW4tYm90dG9tOiAwOworfQorLm1vZGFsLWZvb3Rl
ciB7CisgIGJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7CisgIHBhZGRpbmc6IDE0cHggMTVweCAx
NXB4OworICBib3JkZXItdG9wOiAxcHggc29saWQgI2RkZDsKKyAgLXdlYmtpdC1ib3JkZXItcmFk
aXVzOiAwIDAgNnB4IDZweDsKKyAgLW1vei1ib3JkZXItcmFkaXVzOiAwIDAgNnB4IDZweDsKKyAg
Ym9yZGVyLXJhZGl1czogMCAwIDZweCA2cHg7CisgIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQg
MCAxcHggMCAjZmZmZmZmOworICAtbW96LWJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDAgI2ZmZmZm
ZjsKKyAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMCAjZmZmZmZmOworICB6b29tOiAxOworICBt
YXJnaW4tYm90dG9tOiAwOworfQorLm1vZGFsLWZvb3RlcjpiZWZvcmUsIC5tb2RhbC1mb290ZXI6
YWZ0ZXIgeworICBkaXNwbGF5OiB0YWJsZTsKKyAgY29udGVudDogIiI7CisgIHpvb206IDE7Cit9
CisubW9kYWwtZm9vdGVyOmFmdGVyIHsKKyAgY2xlYXI6IGJvdGg7Cit9CisubW9kYWwtZm9vdGVy
IC5idG4geworICBmbG9hdDogcmlnaHQ7CisgIG1hcmdpbi1sZWZ0OiA1cHg7Cit9CisubW9kYWwg
LnBvcG92ZXIsIC5tb2RhbCAudHdpcHN5IHsKKyAgei1pbmRleDogMTIwMDA7Cit9CisudHdpcHN5
IHsKKyAgZGlzcGxheTogYmxvY2s7CisgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgdmlzaWJpbGl0
eTogdmlzaWJsZTsKKyAgcGFkZGluZzogNXB4OworICBmb250LXNpemU6IDExcHg7CisgIHotaW5k
ZXg6IDEwMDA7CisgIGZpbHRlcjogYWxwaGEob3BhY2l0eT04MCk7CisgIC1raHRtbC1vcGFjaXR5
OiAwLjg7CisgIC1tb3otb3BhY2l0eTogMC44OworICBvcGFjaXR5OiAwLjg7Cit9CisudHdpcHN5
LmZhZGUuaW4geworICBmaWx0ZXI6IGFscGhhKG9wYWNpdHk9ODApOworICAta2h0bWwtb3BhY2l0
eTogMC44OworICAtbW96LW9wYWNpdHk6IDAuODsKKyAgb3BhY2l0eTogMC44OworfQorLnR3aXBz
eS5hYm92ZSAudHdpcHN5LWFycm93IHsKKyAgYm90dG9tOiAwOworICBsZWZ0OiA1MCU7CisgIG1h
cmdpbi1sZWZ0OiAtNXB4OworICBib3JkZXItbGVmdDogNXB4IHNvbGlkIHRyYW5zcGFyZW50Owor
ICBib3JkZXItcmlnaHQ6IDVweCBzb2xpZCB0cmFuc3BhcmVudDsKKyAgYm9yZGVyLXRvcDogNXB4
IHNvbGlkICMwMDAwMDA7Cit9CisudHdpcHN5LmxlZnQgLnR3aXBzeS1hcnJvdyB7CisgIHRvcDog
NTAlOworICByaWdodDogMDsKKyAgbWFyZ2luLXRvcDogLTVweDsKKyAgYm9yZGVyLXRvcDogNXB4
IHNvbGlkIHRyYW5zcGFyZW50OworICBib3JkZXItYm90dG9tOiA1cHggc29saWQgdHJhbnNwYXJl
bnQ7CisgIGJvcmRlci1sZWZ0OiA1cHggc29saWQgIzAwMDAwMDsKK30KKy50d2lwc3kuYmVsb3cg
LnR3aXBzeS1hcnJvdyB7CisgIHRvcDogMDsKKyAgbGVmdDogNTAlOworICBtYXJnaW4tbGVmdDog
LTVweDsKKyAgYm9yZGVyLWxlZnQ6IDVweCBzb2xpZCB0cmFuc3BhcmVudDsKKyAgYm9yZGVyLXJp
Z2h0OiA1cHggc29saWQgdHJhbnNwYXJlbnQ7CisgIGJvcmRlci1ib3R0b206IDVweCBzb2xpZCAj
MDAwMDAwOworfQorLnR3aXBzeS5yaWdodCAudHdpcHN5LWFycm93IHsKKyAgdG9wOiA1MCU7Cisg
IGxlZnQ6IDA7CisgIG1hcmdpbi10b3A6IC01cHg7CisgIGJvcmRlci10b3A6IDVweCBzb2xpZCB0
cmFuc3BhcmVudDsKKyAgYm9yZGVyLWJvdHRvbTogNXB4IHNvbGlkIHRyYW5zcGFyZW50OworICBi
b3JkZXItcmlnaHQ6IDVweCBzb2xpZCAjMDAwMDAwOworfQorLnR3aXBzeS1pbm5lciB7CisgIHBh
ZGRpbmc6IDNweCA4cHg7CisgIGJhY2tncm91bmQtY29sb3I6ICMwMDAwMDA7CisgIGNvbG9yOiB3
aGl0ZTsKKyAgdGV4dC1hbGlnbjogY2VudGVyOworICBtYXgtd2lkdGg6IDIwMHB4OworICB0ZXh0
LWRlY29yYXRpb246IG5vbmU7CisgIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNHB4OworICAtbW96
LWJvcmRlci1yYWRpdXM6IDRweDsKKyAgYm9yZGVyLXJhZGl1czogNHB4OworfQorLnR3aXBzeS1h
cnJvdyB7CisgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgd2lkdGg6IDA7CisgIGhlaWdodDogMDsK
K30KKy5wb3BvdmVyIHsKKyAgcG9zaXRpb246IGFic29sdXRlOworICB0b3A6IDA7CisgIGxlZnQ6
IDA7CisgIHotaW5kZXg6IDEwMDA7CisgIHBhZGRpbmc6IDVweDsKKyAgZGlzcGxheTogbm9uZTsK
K30KKy5wb3BvdmVyLmFib3ZlIC5hcnJvdyB7CisgIGJvdHRvbTogMDsKKyAgbGVmdDogNTAlOwor
ICBtYXJnaW4tbGVmdDogLTVweDsKKyAgYm9yZGVyLWxlZnQ6IDVweCBzb2xpZCB0cmFuc3BhcmVu
dDsKKyAgYm9yZGVyLXJpZ2h0OiA1cHggc29saWQgdHJhbnNwYXJlbnQ7CisgIGJvcmRlci10b3A6
IDVweCBzb2xpZCAjMDAwMDAwOworfQorLnBvcG92ZXIucmlnaHQgLmFycm93IHsKKyAgdG9wOiA1
MCU7CisgIGxlZnQ6IDA7CisgIG1hcmdpbi10b3A6IC01cHg7CisgIGJvcmRlci10b3A6IDVweCBz
b2xpZCB0cmFuc3BhcmVudDsKKyAgYm9yZGVyLWJvdHRvbTogNXB4IHNvbGlkIHRyYW5zcGFyZW50
OworICBib3JkZXItcmlnaHQ6IDVweCBzb2xpZCAjMDAwMDAwOworfQorLnBvcG92ZXIuYmVsb3cg
LmFycm93IHsKKyAgdG9wOiAwOworICBsZWZ0OiA1MCU7CisgIG1hcmdpbi1sZWZ0OiAtNXB4Owor
ICBib3JkZXItbGVmdDogNXB4IHNvbGlkIHRyYW5zcGFyZW50OworICBib3JkZXItcmlnaHQ6IDVw
eCBzb2xpZCB0cmFuc3BhcmVudDsKKyAgYm9yZGVyLWJvdHRvbTogNXB4IHNvbGlkICMwMDAwMDA7
Cit9CisucG9wb3Zlci5sZWZ0IC5hcnJvdyB7CisgIHRvcDogNTAlOworICByaWdodDogMDsKKyAg
bWFyZ2luLXRvcDogLTVweDsKKyAgYm9yZGVyLXRvcDogNXB4IHNvbGlkIHRyYW5zcGFyZW50Owor
ICBib3JkZXItYm90dG9tOiA1cHggc29saWQgdHJhbnNwYXJlbnQ7CisgIGJvcmRlci1sZWZ0OiA1
cHggc29saWQgIzAwMDAwMDsKK30KKy5wb3BvdmVyIC5hcnJvdyB7CisgIHBvc2l0aW9uOiBhYnNv
bHV0ZTsKKyAgd2lkdGg6IDA7CisgIGhlaWdodDogMDsKK30KKy5wb3BvdmVyIC5pbm5lciB7Cisg
IGJhY2tncm91bmQ6ICMwMDAwMDA7CisgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC44KTsK
KyAgcGFkZGluZzogM3B4OworICBvdmVyZmxvdzogaGlkZGVuOworICB3aWR0aDogMjgwcHg7Cisg
IC13ZWJraXQtYm9yZGVyLXJhZGl1czogNnB4OworICAtbW96LWJvcmRlci1yYWRpdXM6IDZweDsK
KyAgYm9yZGVyLXJhZGl1czogNnB4OworICAtd2Via2l0LWJveC1zaGFkb3c6IDAgM3B4IDdweCBy
Z2JhKDAsIDAsIDAsIDAuMyk7CisgIC1tb3otYm94LXNoYWRvdzogMCAzcHggN3B4IHJnYmEoMCwg
MCwgMCwgMC4zKTsKKyAgYm94LXNoYWRvdzogMCAzcHggN3B4IHJnYmEoMCwgMCwgMCwgMC4zKTsK
K30KKy5wb3BvdmVyIC50aXRsZSB7CisgIGJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7CisgIHBh
ZGRpbmc6IDlweCAxNXB4OworICBsaW5lLWhlaWdodDogMTsKKyAgLXdlYmtpdC1ib3JkZXItcmFk
aXVzOiAzcHggM3B4IDAgMDsKKyAgLW1vei1ib3JkZXItcmFkaXVzOiAzcHggM3B4IDAgMDsKKyAg
Ym9yZGVyLXJhZGl1czogM3B4IDNweCAwIDA7CisgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAj
ZWVlOworfQorLnBvcG92ZXIgLmNvbnRlbnQgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZm
OworICBwYWRkaW5nOiAxNHB4OworICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDAgMCAzcHggM3B4
OworICAtbW96LWJvcmRlci1yYWRpdXM6IDAgMCAzcHggM3B4OworICBib3JkZXItcmFkaXVzOiAw
IDAgM3B4IDNweDsKKyAgLXdlYmtpdC1iYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmctYm94OworICAt
bW96LWJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7CisgIGJhY2tncm91bmQtY2xpcDogcGFk
ZGluZy1ib3g7Cit9CisucG9wb3ZlciAuY29udGVudCBwLCAucG9wb3ZlciAuY29udGVudCB1bCwg
LnBvcG92ZXIgLmNvbnRlbnQgb2wgeworICBtYXJnaW4tYm90dG9tOiAwOworfQorLmZhZGUgewor
ICAtd2Via2l0LXRyYW5zaXRpb246IG9wYWNpdHkgMC4xNXMgbGluZWFyOworICAtbW96LXRyYW5z
aXRpb246IG9wYWNpdHkgMC4xNXMgbGluZWFyOworICAtbXMtdHJhbnNpdGlvbjogb3BhY2l0eSAw
LjE1cyBsaW5lYXI7CisgIC1vLXRyYW5zaXRpb246IG9wYWNpdHkgMC4xNXMgbGluZWFyOworICB0
cmFuc2l0aW9uOiBvcGFjaXR5IDAuMTVzIGxpbmVhcjsKKyAgb3BhY2l0eTogMDsKK30KKy5mYWRl
LmluIHsKKyAgb3BhY2l0eTogMTsKK30KKy5sYWJlbCB7CisgIHBhZGRpbmc6IDFweCAzcHggMnB4
OworICBmb250LXNpemU6IDkuNzVweDsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgIGNvbG9yOiAj
ZmZmZmZmOworICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOworICB3aGl0ZS1zcGFjZTogbm93
cmFwOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjYmZiZmJmOworICAtd2Via2l0LWJvcmRlci1yYWRp
dXM6IDNweDsKKyAgLW1vei1ib3JkZXItcmFkaXVzOiAzcHg7CisgIGJvcmRlci1yYWRpdXM6IDNw
eDsKKyAgdGV4dC1zaGFkb3c6IG5vbmU7Cit9CisubGFiZWwuaW1wb3J0YW50IHsKKyAgYmFja2dy
b3VuZC1jb2xvcjogI2M0M2MzNTsKK30KKy5sYWJlbC53YXJuaW5nIHsKKyAgYmFja2dyb3VuZC1j
b2xvcjogI2Y4OTQwNjsKK30KKy5sYWJlbC5zdWNjZXNzIHsKKyAgYmFja2dyb3VuZC1jb2xvcjog
IzQ2YTU0NjsKK30KKy5sYWJlbC5ub3RpY2UgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjNjJjZmZj
OworfQorLm1lZGlhLWdyaWQgeworICBtYXJnaW4tbGVmdDogLTIwcHg7CisgIG1hcmdpbi1ib3R0
b206IDA7CisgIHpvb206IDE7Cit9CisubWVkaWEtZ3JpZDpiZWZvcmUsIC5tZWRpYS1ncmlkOmFm
dGVyIHsKKyAgZGlzcGxheTogdGFibGU7CisgIGNvbnRlbnQ6ICIiOworICB6b29tOiAxOworfQor
Lm1lZGlhLWdyaWQ6YWZ0ZXIgeworICBjbGVhcjogYm90aDsKK30KKy5tZWRpYS1ncmlkIGxpIHsK
KyAgZGlzcGxheTogaW5saW5lOworfQorLm1lZGlhLWdyaWQgYSB7CisgIGZsb2F0OiBsZWZ0Owor
ICBwYWRkaW5nOiA0cHg7CisgIG1hcmdpbjogMCAwIDE4cHggMjBweDsKKyAgYm9yZGVyOiAxcHgg
c29saWQgI2RkZDsKKyAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA0cHg7CisgIC1tb3otYm9yZGVy
LXJhZGl1czogNHB4OworICBib3JkZXItcmFkaXVzOiA0cHg7CisgIC13ZWJraXQtYm94LXNoYWRv
dzogMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wNzUpOworICAtbW96LWJveC1zaGFkb3c6IDAg
MXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMDc1KTsKKyAgYm94LXNoYWRvdzogMCAxcHggMXB4IHJn
YmEoMCwgMCwgMCwgMC4wNzUpOworfQorLm1lZGlhLWdyaWQgYSBpbWcgeworICBkaXNwbGF5OiBi
bG9jazsKK30KKy5tZWRpYS1ncmlkIGE6aG92ZXIgeworICBib3JkZXItY29sb3I6ICMwMDY5ZDY7
CisgIC13ZWJraXQtYm94LXNoYWRvdzogMCAxcHggNHB4IHJnYmEoMCwgMTA1LCAyMTQsIDAuMjUp
OworICAtbW96LWJveC1zaGFkb3c6IDAgMXB4IDRweCByZ2JhKDAsIDEwNSwgMjE0LCAwLjI1KTsK
KyAgYm94LXNoYWRvdzogMCAxcHggNHB4IHJnYmEoMCwgMTA1LCAyMTQsIDAuMjUpOworfQpcIE5v
IG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVu
QmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9ib290c3RyYXAvY3NzL2Jvb3Rz
dHJhcC5taW4uY3NzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVu
Y2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9ib290c3RyYXAvY3NzL2Jvb3RzdHJh
cC5taW4uY3NzCShyZXZpc2lvbiAwKQorKysgUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5j
aC9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2Jvb3RzdHJhcC9jc3MvYm9vdHN0cmFw
Lm1pbi5jc3MJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5IEBACisvKiEKKyAqIEJvb3RzdHJh
cCB2Mi4yLjIKKyAqCisgKiBDb3B5cmlnaHQgMjAxMiBUd2l0dGVyLCBJbmMKKyAqIExpY2Vuc2Vk
IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSB2Mi4wCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcv
bGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBEZXNpZ25lZCBhbmQgYnVpbHQgd2l0aCBhbGwg
dGhlIGxvdmUgaW4gdGhlIHdvcmxkIEB0d2l0dGVyIGJ5IEBtZG8gYW5kIEBmYXQuCisgKi9hcnRp
Y2xlLGFzaWRlLGRldGFpbHMsZmlnY2FwdGlvbixmaWd1cmUsZm9vdGVyLGhlYWRlcixoZ3JvdXAs
bmF2LHNlY3Rpb257ZGlzcGxheTpibG9ja31hdWRpbyxjYW52YXMsdmlkZW97ZGlzcGxheTppbmxp
bmUtYmxvY2s7KmRpc3BsYXk6aW5saW5lOyp6b29tOjF9YXVkaW86bm90KFtjb250cm9sc10pe2Rp
c3BsYXk6bm9uZX1odG1se2ZvbnQtc2l6ZToxMDAlOy13ZWJraXQtdGV4dC1zaXplLWFkanVzdDox
MDAlOy1tcy10ZXh0LXNpemUtYWRqdXN0OjEwMCV9YTpmb2N1c3tvdXRsaW5lOnRoaW4gZG90dGVk
ICMzMzM7b3V0bGluZTo1cHggYXV0byAtd2Via2l0LWZvY3VzLXJpbmctY29sb3I7b3V0bGluZS1v
ZmZzZXQ6LTJweH1hOmhvdmVyLGE6YWN0aXZle291dGxpbmU6MH1zdWIsc3Vwe3Bvc2l0aW9uOnJl
bGF0aXZlO2ZvbnQtc2l6ZTo3NSU7bGluZS1oZWlnaHQ6MDt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGlu
ZX1zdXB7dG9wOi0wLjVlbX1zdWJ7Ym90dG9tOi0wLjI1ZW19aW1ne3dpZHRoOmF1dG9cOTtoZWln
aHQ6YXV0bzttYXgtd2lkdGg6MTAwJTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7Ym9yZGVyOjA7LW1z
LWludGVycG9sYXRpb24tbW9kZTpiaWN1YmljfSNtYXBfY2FudmFzIGltZywuZ29vZ2xlLW1hcHMg
aW1ne21heC13aWR0aDpub25lfWJ1dHRvbixpbnB1dCxzZWxlY3QsdGV4dGFyZWF7bWFyZ2luOjA7
Zm9udC1zaXplOjEwMCU7dmVydGljYWwtYWxpZ246bWlkZGxlfWJ1dHRvbixpbnB1dHsqb3ZlcmZs
b3c6dmlzaWJsZTtsaW5lLWhlaWdodDpub3JtYWx9YnV0dG9uOjotbW96LWZvY3VzLWlubmVyLGlu
cHV0OjotbW96LWZvY3VzLWlubmVye3BhZGRpbmc6MDtib3JkZXI6MH1idXR0b24saHRtbCBpbnB1
dFt0eXBlPSJidXR0b24iXSxpbnB1dFt0eXBlPSJyZXNldCJdLGlucHV0W3R5cGU9InN1Ym1pdCJd
e2N1cnNvcjpwb2ludGVyOy13ZWJraXQtYXBwZWFyYW5jZTpidXR0b259bGFiZWwsc2VsZWN0LGJ1
dHRvbixpbnB1dFt0eXBlPSJidXR0b24iXSxpbnB1dFt0eXBlPSJyZXNldCJdLGlucHV0W3R5cGU9
InN1Ym1pdCJdLGlucHV0W3R5cGU9InJhZGlvIl0saW5wdXRbdHlwZT0iY2hlY2tib3giXXtjdXJz
b3I6cG9pbnRlcn1pbnB1dFt0eXBlPSJzZWFyY2giXXstd2Via2l0LWJveC1zaXppbmc6Y29udGVu
dC1ib3g7LW1vei1ib3gtc2l6aW5nOmNvbnRlbnQtYm94O2JveC1zaXppbmc6Y29udGVudC1ib3g7
LXdlYmtpdC1hcHBlYXJhbmNlOnRleHRmaWVsZH1pbnB1dFt0eXBlPSJzZWFyY2giXTo6LXdlYmtp
dC1zZWFyY2gtZGVjb3JhdGlvbixpbnB1dFt0eXBlPSJzZWFyY2giXTo6LXdlYmtpdC1zZWFyY2gt
Y2FuY2VsLWJ1dHRvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX10ZXh0YXJlYXtvdmVyZmxvdzph
dXRvO3ZlcnRpY2FsLWFsaWduOnRvcH1AbWVkaWEgcHJpbnR7Kntjb2xvcjojMDAwIWltcG9ydGFu
dDt0ZXh0LXNoYWRvdzpub25lIWltcG9ydGFudDtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50IWltcG9y
dGFudDtib3gtc2hhZG93Om5vbmUhaW1wb3J0YW50fWEsYTp2aXNpdGVke3RleHQtZGVjb3JhdGlv
bjp1bmRlcmxpbmV9YVtocmVmXTphZnRlcntjb250ZW50OiIgKCIgYXR0cihocmVmKSAiKSJ9YWJi
clt0aXRsZV06YWZ0ZXJ7Y29udGVudDoiICgiIGF0dHIodGl0bGUpICIpIn0uaXIgYTphZnRlcixh
W2hyZWZePSJqYXZhc2NyaXB0OiJdOmFmdGVyLGFbaHJlZl49IiMiXTphZnRlcntjb250ZW50OiIi
fXByZSxibG9ja3F1b3Rle2JvcmRlcjoxcHggc29saWQgIzk5OTtwYWdlLWJyZWFrLWluc2lkZTph
dm9pZH10aGVhZHtkaXNwbGF5OnRhYmxlLWhlYWRlci1ncm91cH10cixpbWd7cGFnZS1icmVhay1p
bnNpZGU6YXZvaWR9aW1ne21heC13aWR0aDoxMDAlIWltcG9ydGFudH1AcGFnZXttYXJnaW46LjVj
bX1wLGgyLGgze29ycGhhbnM6Mzt3aWRvd3M6M31oMixoM3twYWdlLWJyZWFrLWFmdGVyOmF2b2lk
fX0uY2xlYXJmaXh7Knpvb206MX0uY2xlYXJmaXg6YmVmb3JlLC5jbGVhcmZpeDphZnRlcntkaXNw
bGF5OnRhYmxlO2xpbmUtaGVpZ2h0OjA7Y29udGVudDoiIn0uY2xlYXJmaXg6YWZ0ZXJ7Y2xlYXI6
Ym90aH0uaGlkZS10ZXh0e2ZvbnQ6MC8wIGE7Y29sb3I6dHJhbnNwYXJlbnQ7dGV4dC1zaGFkb3c6
bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlcjowfS5pbnB1dC1ibG9jay1s
ZXZlbHtkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCU7bWluLWhlaWdodDozMHB4Oy13ZWJraXQtYm94
LXNpemluZzpib3JkZXItYm94Oy1tb3otYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6
Ym9yZGVyLWJveH1ib2R5e21hcmdpbjowO2ZvbnQtZmFtaWx5OiJIZWx2ZXRpY2EgTmV1ZSIsSGVs
dmV0aWNhLEFyaWFsLHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7bGluZS1oZWlnaHQ6MjBweDtj
b2xvcjojMzMzO2JhY2tncm91bmQtY29sb3I6I2ZmZn1he2NvbG9yOiMwOGM7dGV4dC1kZWNvcmF0
aW9uOm5vbmV9YTpob3Zlcntjb2xvcjojMDA1NTgwO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmV9
LmltZy1yb3VuZGVkey13ZWJraXQtYm9yZGVyLXJhZGl1czo2cHg7LW1vei1ib3JkZXItcmFkaXVz
OjZweDtib3JkZXItcmFkaXVzOjZweH0uaW1nLXBvbGFyb2lke3BhZGRpbmc6NHB4O2JhY2tncm91
bmQtY29sb3I6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNjY2M7Ym9yZGVyOjFweCBzb2xpZCByZ2Jh
KDAsMCwwLDAuMik7LXdlYmtpdC1ib3gtc2hhZG93OjAgMXB4IDNweCByZ2JhKDAsMCwwLDAuMSk7
LW1vei1ib3gtc2hhZG93OjAgMXB4IDNweCByZ2JhKDAsMCwwLDAuMSk7Ym94LXNoYWRvdzowIDFw
eCAzcHggcmdiYSgwLDAsMCwwLjEpfS5pbWctY2lyY2xley13ZWJraXQtYm9yZGVyLXJhZGl1czo1
MDBweDstbW96LWJvcmRlci1yYWRpdXM6NTAwcHg7Ym9yZGVyLXJhZGl1czo1MDBweH0ucm93e21h
cmdpbi1sZWZ0Oi0yMHB4Oyp6b29tOjF9LnJvdzpiZWZvcmUsLnJvdzphZnRlcntkaXNwbGF5OnRh
YmxlO2xpbmUtaGVpZ2h0OjA7Y29udGVudDoiIn0ucm93OmFmdGVye2NsZWFyOmJvdGh9W2NsYXNz
Kj0ic3BhbiJde2Zsb2F0OmxlZnQ7bWluLWhlaWdodDoxcHg7bWFyZ2luLWxlZnQ6MjBweH0uY29u
dGFpbmVyLC5uYXZiYXItc3RhdGljLXRvcCAuY29udGFpbmVyLC5uYXZiYXItZml4ZWQtdG9wIC5j
b250YWluZXIsLm5hdmJhci1maXhlZC1ib3R0b20gLmNvbnRhaW5lcnt3aWR0aDo5NDBweH0uc3Bh
bjEye3dpZHRoOjk0MHB4fS5zcGFuMTF7d2lkdGg6ODYwcHh9LnNwYW4xMHt3aWR0aDo3ODBweH0u
c3Bhbjl7d2lkdGg6NzAwcHh9LnNwYW44e3dpZHRoOjYyMHB4fS5zcGFuN3t3aWR0aDo1NDBweH0u
c3BhbjZ7d2lkdGg6NDYwcHh9LnNwYW41e3dpZHRoOjM4MHB4fS5zcGFuNHt3aWR0aDozMDBweH0u
c3BhbjN7d2lkdGg6MjIwcHh9LnNwYW4ye3dpZHRoOjE0MHB4fS5zcGFuMXt3aWR0aDo2MHB4fS5v
ZmZzZXQxMnttYXJnaW4tbGVmdDo5ODBweH0ub2Zmc2V0MTF7bWFyZ2luLWxlZnQ6OTAwcHh9Lm9m
ZnNldDEwe21hcmdpbi1sZWZ0OjgyMHB4fS5vZmZzZXQ5e21hcmdpbi1sZWZ0Ojc0MHB4fS5vZmZz
ZXQ4e21hcmdpbi1sZWZ0OjY2MHB4fS5vZmZzZXQ3e21hcmdpbi1sZWZ0OjU4MHB4fS5vZmZzZXQ2
e21hcmdpbi1sZWZ0OjUwMHB4fS5vZmZzZXQ1e21hcmdpbi1sZWZ0OjQyMHB4fS5vZmZzZXQ0e21h
cmdpbi1sZWZ0OjM0MHB4fS5vZmZzZXQze21hcmdpbi1sZWZ0OjI2MHB4fS5vZmZzZXQye21hcmdp
bi1sZWZ0OjE4MHB4fS5vZmZzZXQxe21hcmdpbi1sZWZ0OjEwMHB4fS5yb3ctZmx1aWR7d2lkdGg6
MTAwJTsqem9vbToxfS5yb3ctZmx1aWQ6YmVmb3JlLC5yb3ctZmx1aWQ6YWZ0ZXJ7ZGlzcGxheTp0
YWJsZTtsaW5lLWhlaWdodDowO2NvbnRlbnQ6IiJ9LnJvdy1mbHVpZDphZnRlcntjbGVhcjpib3Ro
fS5yb3ctZmx1aWQgW2NsYXNzKj0ic3BhbiJde2Rpc3BsYXk6YmxvY2s7ZmxvYXQ6bGVmdDt3aWR0
aDoxMDAlO21pbi1oZWlnaHQ6MzBweDttYXJnaW4tbGVmdDoyLjEyNzY1OTU3NDQ2ODA4NSU7Km1h
cmdpbi1sZWZ0OjIuMDc0NDY4MDg1MTA2MzgzJTstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJv
eDstbW96LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3h9LnJvdy1m
bHVpZCBbY2xhc3MqPSJzcGFuIl06Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6MH0ucm93LWZsdWlk
IC5jb250cm9scy1yb3cgW2NsYXNzKj0ic3BhbiJdK1tjbGFzcyo9InNwYW4iXXttYXJnaW4tbGVm
dDoyLjEyNzY1OTU3NDQ2ODA4NSV9LnJvdy1mbHVpZCAuc3BhbjEye3dpZHRoOjEwMCU7KndpZHRo
Ojk5Ljk0NjgwODUxMDYzODI5JX0ucm93LWZsdWlkIC5zcGFuMTF7d2lkdGg6OTEuNDg5MzYxNzAy
MTI3NjUlOyp3aWR0aDo5MS40MzYxNzAyMTI3NjU5NCV9LnJvdy1mbHVpZCAuc3BhbjEwe3dpZHRo
OjgyLjk3ODcyMzQwNDI1NTMyJTsqd2lkdGg6ODIuOTI1NTMxOTE0ODkzNjElfS5yb3ctZmx1aWQg
LnNwYW45e3dpZHRoOjc0LjQ2ODA4NTEwNjM4Mjk3JTsqd2lkdGg6NzQuNDE0ODkzNjE3MDIxMjYl
fS5yb3ctZmx1aWQgLnNwYW44e3dpZHRoOjY1Ljk1NzQ0NjgwODUxMDY0JTsqd2lkdGg6NjUuOTA0
MjU1MzE5MTQ4OTMlfS5yb3ctZmx1aWQgLnNwYW43e3dpZHRoOjU3LjQ0NjgwODUxMDYzODI5JTsq
d2lkdGg6NTcuMzkzNjE3MDIxMjc2NTklfS5yb3ctZmx1aWQgLnNwYW42e3dpZHRoOjQ4LjkzNjE3
MDIxMjc2NTk1JTsqd2lkdGg6NDguODgyOTc4NzIzNDA0MjUlfS5yb3ctZmx1aWQgLnNwYW41e3dp
ZHRoOjQwLjQyNTUzMTkxNDg5MzYyJTsqd2lkdGg6NDAuMzcyMzQwNDI1NTMxOTIlfS5yb3ctZmx1
aWQgLnNwYW40e3dpZHRoOjMxLjkxNDg5MzYxNzAyMTI3OCU7KndpZHRoOjMxLjg2MTcwMjEyNzY1
OTU3NiV9LnJvdy1mbHVpZCAuc3BhbjN7d2lkdGg6MjMuNDA0MjU1MzE5MTQ4OTM0JTsqd2lkdGg6
MjMuMzUxMDYzODI5Nzg3MjMzJX0ucm93LWZsdWlkIC5zcGFuMnt3aWR0aDoxNC44OTM2MTcwMjEy
NzY1OTUlOyp3aWR0aDoxNC44NDA0MjU1MzE5MTQ4OTQlfS5yb3ctZmx1aWQgLnNwYW4xe3dpZHRo
OjYuMzgyOTc4NzIzNDA0MjU1JTsqd2lkdGg6Ni4zMjk3ODcyMzQwNDI1NTMlfS5yb3ctZmx1aWQg
Lm9mZnNldDEye21hcmdpbi1sZWZ0OjEwNC4yNTUzMTkxNDg5MzYxNyU7Km1hcmdpbi1sZWZ0OjEw
NC4xNDg5MzYxNzAyMTI3NSV9LnJvdy1mbHVpZCAub2Zmc2V0MTI6Zmlyc3QtY2hpbGR7bWFyZ2lu
LWxlZnQ6MTAyLjEyNzY1OTU3NDQ2ODA4JTsqbWFyZ2luLWxlZnQ6MTAyLjAyMTI3NjU5NTc0NDY3
JX0ucm93LWZsdWlkIC5vZmZzZXQxMXttYXJnaW4tbGVmdDo5NS43NDQ2ODA4NTEwNjM4MiU7Km1h
cmdpbi1sZWZ0Ojk1LjYzODI5Nzg3MjM0MDQlfS5yb3ctZmx1aWQgLm9mZnNldDExOmZpcnN0LWNo
aWxke21hcmdpbi1sZWZ0OjkzLjYxNzAyMTI3NjU5NTc0JTsqbWFyZ2luLWxlZnQ6OTMuNTEwNjM4
Mjk3ODcyMzIlfS5yb3ctZmx1aWQgLm9mZnNldDEwe21hcmdpbi1sZWZ0Ojg3LjIzNDA0MjU1MzE5
MTQ5JTsqbWFyZ2luLWxlZnQ6ODcuMTI3NjU5NTc0NDY4MDclfS5yb3ctZmx1aWQgLm9mZnNldDEw
OmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0Ojg1LjEwNjM4Mjk3ODcyMzQlOyptYXJnaW4tbGVmdDo4
NC45OTk5OTk5OTk5OTk5OSV9LnJvdy1mbHVpZCAub2Zmc2V0OXttYXJnaW4tbGVmdDo3OC43MjM0
MDQyNTUzMTkxNCU7Km1hcmdpbi1sZWZ0Ojc4LjYxNzAyMTI3NjU5NTcyJX0ucm93LWZsdWlkIC5v
ZmZzZXQ5OmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0Ojc2LjU5NTc0NDY4MDg1MTA2JTsqbWFyZ2lu
LWxlZnQ6NzYuNDg5MzYxNzAyMTI3NjQlfS5yb3ctZmx1aWQgLm9mZnNldDh7bWFyZ2luLWxlZnQ6
NzAuMjEyNzY1OTU3NDQ2OCU7Km1hcmdpbi1sZWZ0OjcwLjEwNjM4Mjk3ODcyMzM5JX0ucm93LWZs
dWlkIC5vZmZzZXQ4OmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjY4LjA4NTEwNjM4Mjk3ODcyJTsq
bWFyZ2luLWxlZnQ6NjcuOTc4NzIzNDA0MjU1MyV9LnJvdy1mbHVpZCAub2Zmc2V0N3ttYXJnaW4t
bGVmdDo2MS43MDIxMjc2NTk1NzQ0NiU7Km1hcmdpbi1sZWZ0OjYxLjU5NTc0NDY4MDg1MTA2JX0u
cm93LWZsdWlkIC5vZmZzZXQ3OmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjU5LjU3NDQ2ODA4NTEw
NjM3NSU7Km1hcmdpbi1sZWZ0OjU5LjQ2ODA4NTEwNjM4Mjk3JX0ucm93LWZsdWlkIC5vZmZzZXQ2
e21hcmdpbi1sZWZ0OjUzLjE5MTQ4OTM2MTcwMjEyNSU7Km1hcmdpbi1sZWZ0OjUzLjA4NTEwNjM4
Mjk3ODcxNSV9LnJvdy1mbHVpZCAub2Zmc2V0NjpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDo1MS4w
NjM4Mjk3ODcyMzQwMzUlOyptYXJnaW4tbGVmdDo1MC45NTc0NDY4MDg1MTA2MyV9LnJvdy1mbHVp
ZCAub2Zmc2V0NXttYXJnaW4tbGVmdDo0NC42ODA4NTEwNjM4Mjk3OSU7Km1hcmdpbi1sZWZ0OjQ0
LjU3NDQ2ODA4NTEwNjM4JX0ucm93LWZsdWlkIC5vZmZzZXQ1OmZpcnN0LWNoaWxke21hcmdpbi1s
ZWZ0OjQyLjU1MzE5MTQ4OTM2MTclOyptYXJnaW4tbGVmdDo0Mi40NDY4MDg1MTA2MzgzJX0ucm93
LWZsdWlkIC5vZmZzZXQ0e21hcmdpbi1sZWZ0OjM2LjE3MDIxMjc2NTk1NzQ0NCU7Km1hcmdpbi1s
ZWZ0OjM2LjA2MzgyOTc4NzIzNDA1JX0ucm93LWZsdWlkIC5vZmZzZXQ0OmZpcnN0LWNoaWxke21h
cmdpbi1sZWZ0OjM0LjA0MjU1MzE5MTQ4OTM2JTsqbWFyZ2luLWxlZnQ6MzMuOTM2MTcwMjEyNzY1
OTYlfS5yb3ctZmx1aWQgLm9mZnNldDN7bWFyZ2luLWxlZnQ6MjcuNjU5NTc0NDY4MDg1MTA0JTsq
bWFyZ2luLWxlZnQ6MjcuNTUzMTkxNDg5MzYxNyV9LnJvdy1mbHVpZCAub2Zmc2V0MzpmaXJzdC1j
aGlsZHttYXJnaW4tbGVmdDoyNS41MzE5MTQ4OTM2MTcwMiU7Km1hcmdpbi1sZWZ0OjI1LjQyNTUz
MTkxNDg5MzYxOCV9LnJvdy1mbHVpZCAub2Zmc2V0MnttYXJnaW4tbGVmdDoxOS4xNDg5MzYxNzAy
MTI3NjQlOyptYXJnaW4tbGVmdDoxOS4wNDI1NTMxOTE0ODkzNiV9LnJvdy1mbHVpZCAub2Zmc2V0
MjpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDoxNy4wMjEyNzY1OTU3NDQ2OCU7Km1hcmdpbi1sZWZ0
OjE2LjkxNDg5MzYxNzAyMTI3OCV9LnJvdy1mbHVpZCAub2Zmc2V0MXttYXJnaW4tbGVmdDoxMC42
MzgyOTc4NzIzNDA0MjUlOyptYXJnaW4tbGVmdDoxMC41MzE5MTQ4OTM2MTcwMiV9LnJvdy1mbHVp
ZCAub2Zmc2V0MTpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDo4LjUxMDYzODI5Nzg3MjM0JTsqbWFy
Z2luLWxlZnQ6OC40MDQyNTUzMTkxNDg5MzglfVtjbGFzcyo9InNwYW4iXS5oaWRlLC5yb3ctZmx1
aWQgW2NsYXNzKj0ic3BhbiJdLmhpZGV7ZGlzcGxheTpub25lfVtjbGFzcyo9InNwYW4iXS5wdWxs
LXJpZ2h0LC5yb3ctZmx1aWQgW2NsYXNzKj0ic3BhbiJdLnB1bGwtcmlnaHR7ZmxvYXQ6cmlnaHR9
LmNvbnRhaW5lcnttYXJnaW4tcmlnaHQ6YXV0bzttYXJnaW4tbGVmdDphdXRvOyp6b29tOjF9LmNv
bnRhaW5lcjpiZWZvcmUsLmNvbnRhaW5lcjphZnRlcntkaXNwbGF5OnRhYmxlO2xpbmUtaGVpZ2h0
OjA7Y29udGVudDoiIn0uY29udGFpbmVyOmFmdGVye2NsZWFyOmJvdGh9LmNvbnRhaW5lci1mbHVp
ZHtwYWRkaW5nLXJpZ2h0OjIwcHg7cGFkZGluZy1sZWZ0OjIwcHg7Knpvb206MX0uY29udGFpbmVy
LWZsdWlkOmJlZm9yZSwuY29udGFpbmVyLWZsdWlkOmFmdGVye2Rpc3BsYXk6dGFibGU7bGluZS1o
ZWlnaHQ6MDtjb250ZW50OiIifS5jb250YWluZXItZmx1aWQ6YWZ0ZXJ7Y2xlYXI6Ym90aH1we21h
cmdpbjowIDAgMTBweH0ubGVhZHttYXJnaW4tYm90dG9tOjIwcHg7Zm9udC1zaXplOjIxcHg7Zm9u
dC13ZWlnaHQ6MjAwO2xpbmUtaGVpZ2h0OjMwcHh9c21hbGx7Zm9udC1zaXplOjg1JX1zdHJvbmd7
Zm9udC13ZWlnaHQ6Ym9sZH1lbXtmb250LXN0eWxlOml0YWxpY31jaXRle2ZvbnQtc3R5bGU6bm9y
bWFsfS5tdXRlZHtjb2xvcjojOTk5fWEubXV0ZWQ6aG92ZXJ7Y29sb3I6IzgwODA4MH0udGV4dC13
YXJuaW5ne2NvbG9yOiNjMDk4NTN9YS50ZXh0LXdhcm5pbmc6aG92ZXJ7Y29sb3I6I2E0N2UzY30u
dGV4dC1lcnJvcntjb2xvcjojYjk0YTQ4fWEudGV4dC1lcnJvcjpob3Zlcntjb2xvcjojOTUzYjM5
fS50ZXh0LWluZm97Y29sb3I6IzNhODdhZH1hLnRleHQtaW5mbzpob3Zlcntjb2xvcjojMmQ2OTg3
fS50ZXh0LXN1Y2Nlc3N7Y29sb3I6IzQ2ODg0N31hLnRleHQtc3VjY2Vzczpob3Zlcntjb2xvcjoj
MzU2NjM1fWgxLGgyLGgzLGg0LGg1LGg2e21hcmdpbjoxMHB4IDA7Zm9udC1mYW1pbHk6aW5oZXJp
dDtmb250LXdlaWdodDpib2xkO2xpbmUtaGVpZ2h0OjIwcHg7Y29sb3I6aW5oZXJpdDt0ZXh0LXJl
bmRlcmluZzpvcHRpbWl6ZWxlZ2liaWxpdHl9aDEgc21hbGwsaDIgc21hbGwsaDMgc21hbGwsaDQg
c21hbGwsaDUgc21hbGwsaDYgc21hbGx7Zm9udC13ZWlnaHQ6bm9ybWFsO2xpbmUtaGVpZ2h0OjE7
Y29sb3I6Izk5OX1oMSxoMixoM3tsaW5lLWhlaWdodDo0MHB4fWgxe2ZvbnQtc2l6ZTozOC41cHh9
aDJ7Zm9udC1zaXplOjMxLjVweH1oM3tmb250LXNpemU6MjQuNXB4fWg0e2ZvbnQtc2l6ZToxNy41
cHh9aDV7Zm9udC1zaXplOjE0cHh9aDZ7Zm9udC1zaXplOjExLjlweH1oMSBzbWFsbHtmb250LXNp
emU6MjQuNXB4fWgyIHNtYWxse2ZvbnQtc2l6ZToxNy41cHh9aDMgc21hbGx7Zm9udC1zaXplOjE0
cHh9aDQgc21hbGx7Zm9udC1zaXplOjE0cHh9LnBhZ2UtaGVhZGVye3BhZGRpbmctYm90dG9tOjlw
eDttYXJnaW46MjBweCAwIDMwcHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2VlZX11bCxvbHtw
YWRkaW5nOjA7bWFyZ2luOjAgMCAxMHB4IDI1cHh9dWwgdWwsdWwgb2wsb2wgb2wsb2wgdWx7bWFy
Z2luLWJvdHRvbTowfWxpe2xpbmUtaGVpZ2h0OjIwcHh9dWwudW5zdHlsZWQsb2wudW5zdHlsZWR7
bWFyZ2luLWxlZnQ6MDtsaXN0LXN0eWxlOm5vbmV9dWwuaW5saW5lLG9sLmlubGluZXttYXJnaW4t
bGVmdDowO2xpc3Qtc3R5bGU6bm9uZX11bC5pbmxpbmU+bGksb2wuaW5saW5lPmxpe2Rpc3BsYXk6
aW5saW5lLWJsb2NrO3BhZGRpbmctcmlnaHQ6NXB4O3BhZGRpbmctbGVmdDo1cHh9ZGx7bWFyZ2lu
LWJvdHRvbToyMHB4fWR0LGRke2xpbmUtaGVpZ2h0OjIwcHh9ZHR7Zm9udC13ZWlnaHQ6Ym9sZH1k
ZHttYXJnaW4tbGVmdDoxMHB4fS5kbC1ob3Jpem9udGFseyp6b29tOjF9LmRsLWhvcml6b250YWw6
YmVmb3JlLC5kbC1ob3Jpem9udGFsOmFmdGVye2Rpc3BsYXk6dGFibGU7bGluZS1oZWlnaHQ6MDtj
b250ZW50OiIifS5kbC1ob3Jpem9udGFsOmFmdGVye2NsZWFyOmJvdGh9LmRsLWhvcml6b250YWwg
ZHR7ZmxvYXQ6bGVmdDt3aWR0aDoxNjBweDtvdmVyZmxvdzpoaWRkZW47Y2xlYXI6bGVmdDt0ZXh0
LWFsaWduOnJpZ2h0O3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwfS5k
bC1ob3Jpem9udGFsIGRke21hcmdpbi1sZWZ0OjE4MHB4fWhye21hcmdpbjoyMHB4IDA7Ym9yZGVy
OjA7Ym9yZGVyLXRvcDoxcHggc29saWQgI2VlZTtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZmZm
fWFiYnJbdGl0bGVdLGFiYnJbZGF0YS1vcmlnaW5hbC10aXRsZV17Y3Vyc29yOmhlbHA7Ym9yZGVy
LWJvdHRvbToxcHggZG90dGVkICM5OTl9YWJici5pbml0aWFsaXNte2ZvbnQtc2l6ZTo5MCU7dGV4
dC10cmFuc2Zvcm06dXBwZXJjYXNlfWJsb2NrcXVvdGV7cGFkZGluZzowIDAgMCAxNXB4O21hcmdp
bjowIDAgMjBweDtib3JkZXItbGVmdDo1cHggc29saWQgI2VlZX1ibG9ja3F1b3RlIHB7bWFyZ2lu
LWJvdHRvbTowO2ZvbnQtc2l6ZToxNnB4O2ZvbnQtd2VpZ2h0OjMwMDtsaW5lLWhlaWdodDoyNXB4
fWJsb2NrcXVvdGUgc21hbGx7ZGlzcGxheTpibG9jaztsaW5lLWhlaWdodDoyMHB4O2NvbG9yOiM5
OTl9YmxvY2txdW90ZSBzbWFsbDpiZWZvcmV7Y29udGVudDonXDIwMTQgXDAwQTAnfWJsb2NrcXVv
dGUucHVsbC1yaWdodHtmbG9hdDpyaWdodDtwYWRkaW5nLXJpZ2h0OjE1cHg7cGFkZGluZy1sZWZ0
OjA7Ym9yZGVyLXJpZ2h0OjVweCBzb2xpZCAjZWVlO2JvcmRlci1sZWZ0OjB9YmxvY2txdW90ZS5w
dWxsLXJpZ2h0IHAsYmxvY2txdW90ZS5wdWxsLXJpZ2h0IHNtYWxse3RleHQtYWxpZ246cmlnaHR9
YmxvY2txdW90ZS5wdWxsLXJpZ2h0IHNtYWxsOmJlZm9yZXtjb250ZW50OicnfWJsb2NrcXVvdGUu
cHVsbC1yaWdodCBzbWFsbDphZnRlcntjb250ZW50OidcMDBBMCBcMjAxNCd9cTpiZWZvcmUscTph
ZnRlcixibG9ja3F1b3RlOmJlZm9yZSxibG9ja3F1b3RlOmFmdGVye2NvbnRlbnQ6IiJ9YWRkcmVz
c3tkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206MjBweDtmb250LXN0eWxlOm5vcm1hbDtsaW5l
LWhlaWdodDoyMHB4fWNvZGUscHJle3BhZGRpbmc6MCAzcHggMnB4O2ZvbnQtZmFtaWx5Ok1vbmFj
byxNZW5sbyxDb25zb2xhcywiQ291cmllciBOZXciLG1vbm9zcGFjZTtmb250LXNpemU6MTJweDtj
b2xvcjojMzMzOy13ZWJraXQtYm9yZGVyLXJhZGl1czozcHg7LW1vei1ib3JkZXItcmFkaXVzOjNw
eDtib3JkZXItcmFkaXVzOjNweH1jb2Rle3BhZGRpbmc6MnB4IDRweDtjb2xvcjojZDE0O3doaXRl
LXNwYWNlOm5vd3JhcDtiYWNrZ3JvdW5kLWNvbG9yOiNmN2Y3Zjk7Ym9yZGVyOjFweCBzb2xpZCAj
ZTFlMWU4fXByZXtkaXNwbGF5OmJsb2NrO3BhZGRpbmc6OS41cHg7bWFyZ2luOjAgMCAxMHB4O2Zv
bnQtc2l6ZToxM3B4O2xpbmUtaGVpZ2h0OjIwcHg7d29yZC1icmVhazpicmVhay1hbGw7d29yZC13
cmFwOmJyZWFrLXdvcmQ7d2hpdGUtc3BhY2U6cHJlO3doaXRlLXNwYWNlOnByZS13cmFwO2JhY2tn
cm91bmQtY29sb3I6I2Y1ZjVmNTtib3JkZXI6MXB4IHNvbGlkICNjY2M7Ym9yZGVyOjFweCBzb2xp
ZCByZ2JhKDAsMCwwLDAuMTUpOy13ZWJraXQtYm9yZGVyLXJhZGl1czo0cHg7LW1vei1ib3JkZXIt
cmFkaXVzOjRweDtib3JkZXItcmFkaXVzOjRweH1wcmUucHJldHR5cHJpbnR7bWFyZ2luLWJvdHRv
bToyMHB4fXByZSBjb2Rle3BhZGRpbmc6MDtjb2xvcjppbmhlcml0O3doaXRlLXNwYWNlOnByZTt3
aGl0ZS1zcGFjZTpwcmUtd3JhcDtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlcjow
fS5wcmUtc2Nyb2xsYWJsZXttYXgtaGVpZ2h0OjM0MHB4O292ZXJmbG93LXk6c2Nyb2xsfWZvcm17
bWFyZ2luOjAgMCAyMHB4fWZpZWxkc2V0e3BhZGRpbmc6MDttYXJnaW46MDtib3JkZXI6MH1sZWdl
bmR7ZGlzcGxheTpibG9jazt3aWR0aDoxMDAlO3BhZGRpbmc6MDttYXJnaW4tYm90dG9tOjIwcHg7
Zm9udC1zaXplOjIxcHg7bGluZS1oZWlnaHQ6NDBweDtjb2xvcjojMzMzO2JvcmRlcjowO2JvcmRl
ci1ib3R0b206MXB4IHNvbGlkICNlNWU1ZTV9bGVnZW5kIHNtYWxse2ZvbnQtc2l6ZToxNXB4O2Nv
bG9yOiM5OTl9bGFiZWwsaW5wdXQsYnV0dG9uLHNlbGVjdCx0ZXh0YXJlYXtmb250LXNpemU6MTRw
eDtmb250LXdlaWdodDpub3JtYWw7bGluZS1oZWlnaHQ6MjBweH1pbnB1dCxidXR0b24sc2VsZWN0
LHRleHRhcmVhe2ZvbnQtZmFtaWx5OiJIZWx2ZXRpY2EgTmV1ZSIsSGVsdmV0aWNhLEFyaWFsLHNh
bnMtc2VyaWZ9bGFiZWx7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjVweH1zZWxlY3QsdGV4
dGFyZWEsaW5wdXRbdHlwZT0idGV4dCJdLGlucHV0W3R5cGU9InBhc3N3b3JkIl0saW5wdXRbdHlw
ZT0iZGF0ZXRpbWUiXSxpbnB1dFt0eXBlPSJkYXRldGltZS1sb2NhbCJdLGlucHV0W3R5cGU9ImRh
dGUiXSxpbnB1dFt0eXBlPSJtb250aCJdLGlucHV0W3R5cGU9InRpbWUiXSxpbnB1dFt0eXBlPSJ3
ZWVrIl0saW5wdXRbdHlwZT0ibnVtYmVyIl0saW5wdXRbdHlwZT0iZW1haWwiXSxpbnB1dFt0eXBl
PSJ1cmwiXSxpbnB1dFt0eXBlPSJzZWFyY2giXSxpbnB1dFt0eXBlPSJ0ZWwiXSxpbnB1dFt0eXBl
PSJjb2xvciJdLC51bmVkaXRhYmxlLWlucHV0e2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoy
MHB4O3BhZGRpbmc6NHB4IDZweDttYXJnaW4tYm90dG9tOjEwcHg7Zm9udC1zaXplOjE0cHg7bGlu
ZS1oZWlnaHQ6MjBweDtjb2xvcjojNTU1O3ZlcnRpY2FsLWFsaWduOm1pZGRsZTstd2Via2l0LWJv
cmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyLXJhZGl1czo0cHh9
aW5wdXQsdGV4dGFyZWEsLnVuZWRpdGFibGUtaW5wdXR7d2lkdGg6MjA2cHh9dGV4dGFyZWF7aGVp
Z2h0OmF1dG99dGV4dGFyZWEsaW5wdXRbdHlwZT0idGV4dCJdLGlucHV0W3R5cGU9InBhc3N3b3Jk
Il0saW5wdXRbdHlwZT0iZGF0ZXRpbWUiXSxpbnB1dFt0eXBlPSJkYXRldGltZS1sb2NhbCJdLGlu
cHV0W3R5cGU9ImRhdGUiXSxpbnB1dFt0eXBlPSJtb250aCJdLGlucHV0W3R5cGU9InRpbWUiXSxp
bnB1dFt0eXBlPSJ3ZWVrIl0saW5wdXRbdHlwZT0ibnVtYmVyIl0saW5wdXRbdHlwZT0iZW1haWwi
XSxpbnB1dFt0eXBlPSJ1cmwiXSxpbnB1dFt0eXBlPSJzZWFyY2giXSxpbnB1dFt0eXBlPSJ0ZWwi
XSxpbnB1dFt0eXBlPSJjb2xvciJdLC51bmVkaXRhYmxlLWlucHV0e2JhY2tncm91bmQtY29sb3I6
I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNjY2M7LXdlYmtpdC1ib3gtc2hhZG93Omluc2V0IDAgMXB4
IDFweCByZ2JhKDAsMCwwLDAuMDc1KTstbW96LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJn
YmEoMCwwLDAsMC4wNzUpO2JveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4w
NzUpOy13ZWJraXQtdHJhbnNpdGlvbjpib3JkZXIgbGluZWFyIC4ycyxib3gtc2hhZG93IGxpbmVh
ciAuMnM7LW1vei10cmFuc2l0aW9uOmJvcmRlciBsaW5lYXIgLjJzLGJveC1zaGFkb3cgbGluZWFy
IC4yczstby10cmFuc2l0aW9uOmJvcmRlciBsaW5lYXIgLjJzLGJveC1zaGFkb3cgbGluZWFyIC4y
czt0cmFuc2l0aW9uOmJvcmRlciBsaW5lYXIgLjJzLGJveC1zaGFkb3cgbGluZWFyIC4yc310ZXh0
YXJlYTpmb2N1cyxpbnB1dFt0eXBlPSJ0ZXh0Il06Zm9jdXMsaW5wdXRbdHlwZT0icGFzc3dvcmQi
XTpmb2N1cyxpbnB1dFt0eXBlPSJkYXRldGltZSJdOmZvY3VzLGlucHV0W3R5cGU9ImRhdGV0aW1l
LWxvY2FsIl06Zm9jdXMsaW5wdXRbdHlwZT0iZGF0ZSJdOmZvY3VzLGlucHV0W3R5cGU9Im1vbnRo
Il06Zm9jdXMsaW5wdXRbdHlwZT0idGltZSJdOmZvY3VzLGlucHV0W3R5cGU9IndlZWsiXTpmb2N1
cyxpbnB1dFt0eXBlPSJudW1iZXIiXTpmb2N1cyxpbnB1dFt0eXBlPSJlbWFpbCJdOmZvY3VzLGlu
cHV0W3R5cGU9InVybCJdOmZvY3VzLGlucHV0W3R5cGU9InNlYXJjaCJdOmZvY3VzLGlucHV0W3R5
cGU9InRlbCJdOmZvY3VzLGlucHV0W3R5cGU9ImNvbG9yIl06Zm9jdXMsLnVuZWRpdGFibGUtaW5w
dXQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOnJnYmEoODIsMTY4LDIzNiwwLjgpO291dGxpbmU6MDtvdXRs
aW5lOnRoaW4gZG90dGVkIFw5Oy13ZWJraXQtYm94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdi
YSgwLDAsMCwwLjA3NSksMCAwIDhweCByZ2JhKDgyLDE2OCwyMzYsMC42KTstbW96LWJveC1zaGFk
b3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4wNzUpLDAgMCA4cHggcmdiYSg4MiwxNjgs
MjM2LDAuNik7Ym94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA3NSksMCAw
IDhweCByZ2JhKDgyLDE2OCwyMzYsMC42KX1pbnB1dFt0eXBlPSJyYWRpbyJdLGlucHV0W3R5cGU9
ImNoZWNrYm94Il17bWFyZ2luOjRweCAwIDA7bWFyZ2luLXRvcDoxcHggXDk7Km1hcmdpbi10b3A6
MDtsaW5lLWhlaWdodDpub3JtYWx9aW5wdXRbdHlwZT0iZmlsZSJdLGlucHV0W3R5cGU9ImltYWdl
Il0saW5wdXRbdHlwZT0ic3VibWl0Il0saW5wdXRbdHlwZT0icmVzZXQiXSxpbnB1dFt0eXBlPSJi
dXR0b24iXSxpbnB1dFt0eXBlPSJyYWRpbyJdLGlucHV0W3R5cGU9ImNoZWNrYm94Il17d2lkdGg6
YXV0b31zZWxlY3QsaW5wdXRbdHlwZT0iZmlsZSJde2hlaWdodDozMHB4OyptYXJnaW4tdG9wOjRw
eDtsaW5lLWhlaWdodDozMHB4fXNlbGVjdHt3aWR0aDoyMjBweDtiYWNrZ3JvdW5kLWNvbG9yOiNm
ZmY7Ym9yZGVyOjFweCBzb2xpZCAjY2NjfXNlbGVjdFttdWx0aXBsZV0sc2VsZWN0W3NpemVde2hl
aWdodDphdXRvfXNlbGVjdDpmb2N1cyxpbnB1dFt0eXBlPSJmaWxlIl06Zm9jdXMsaW5wdXRbdHlw
ZT0icmFkaW8iXTpmb2N1cyxpbnB1dFt0eXBlPSJjaGVja2JveCJdOmZvY3Vze291dGxpbmU6dGhp
biBkb3R0ZWQgIzMzMztvdXRsaW5lOjVweCBhdXRvIC13ZWJraXQtZm9jdXMtcmluZy1jb2xvcjtv
dXRsaW5lLW9mZnNldDotMnB4fS51bmVkaXRhYmxlLWlucHV0LC51bmVkaXRhYmxlLXRleHRhcmVh
e2NvbG9yOiM5OTk7Y3Vyc29yOm5vdC1hbGxvd2VkO2JhY2tncm91bmQtY29sb3I6I2ZjZmNmYzti
b3JkZXItY29sb3I6I2NjYzstd2Via2l0LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMnB4IHJnYmEo
MCwwLDAsMC4wMjUpOy1tb3otYm94LXNoYWRvdzppbnNldCAwIDFweCAycHggcmdiYSgwLDAsMCww
LjAyNSk7Ym94LXNoYWRvdzppbnNldCAwIDFweCAycHggcmdiYSgwLDAsMCwwLjAyNSl9LnVuZWRp
dGFibGUtaW5wdXR7b3ZlcmZsb3c6aGlkZGVuO3doaXRlLXNwYWNlOm5vd3JhcH0udW5lZGl0YWJs
ZS10ZXh0YXJlYXt3aWR0aDphdXRvO2hlaWdodDphdXRvfWlucHV0Oi1tb3otcGxhY2Vob2xkZXIs
dGV4dGFyZWE6LW1vei1wbGFjZWhvbGRlcntjb2xvcjojOTk5fWlucHV0Oi1tcy1pbnB1dC1wbGFj
ZWhvbGRlcix0ZXh0YXJlYTotbXMtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6Izk5OX1pbnB1dDo6
LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlcix0ZXh0YXJlYTo6LXdlYmtpdC1pbnB1dC1wbGFjZWhv
bGRlcntjb2xvcjojOTk5fS5yYWRpbywuY2hlY2tib3h7bWluLWhlaWdodDoyMHB4O3BhZGRpbmct
bGVmdDoyMHB4fS5yYWRpbyBpbnB1dFt0eXBlPSJyYWRpbyJdLC5jaGVja2JveCBpbnB1dFt0eXBl
PSJjaGVja2JveCJde2Zsb2F0OmxlZnQ7bWFyZ2luLWxlZnQ6LTIwcHh9LmNvbnRyb2xzPi5yYWRp
bzpmaXJzdC1jaGlsZCwuY29udHJvbHM+LmNoZWNrYm94OmZpcnN0LWNoaWxke3BhZGRpbmctdG9w
OjVweH0ucmFkaW8uaW5saW5lLC5jaGVja2JveC5pbmxpbmV7ZGlzcGxheTppbmxpbmUtYmxvY2s7
cGFkZGluZy10b3A6NXB4O21hcmdpbi1ib3R0b206MDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LnJh
ZGlvLmlubGluZSsucmFkaW8uaW5saW5lLC5jaGVja2JveC5pbmxpbmUrLmNoZWNrYm94LmlubGlu
ZXttYXJnaW4tbGVmdDoxMHB4fS5pbnB1dC1taW5pe3dpZHRoOjYwcHh9LmlucHV0LXNtYWxse3dp
ZHRoOjkwcHh9LmlucHV0LW1lZGl1bXt3aWR0aDoxNTBweH0uaW5wdXQtbGFyZ2V7d2lkdGg6MjEw
cHh9LmlucHV0LXhsYXJnZXt3aWR0aDoyNzBweH0uaW5wdXQteHhsYXJnZXt3aWR0aDo1MzBweH1p
bnB1dFtjbGFzcyo9InNwYW4iXSxzZWxlY3RbY2xhc3MqPSJzcGFuIl0sdGV4dGFyZWFbY2xhc3Mq
PSJzcGFuIl0sLnVuZWRpdGFibGUtaW5wdXRbY2xhc3MqPSJzcGFuIl0sLnJvdy1mbHVpZCBpbnB1
dFtjbGFzcyo9InNwYW4iXSwucm93LWZsdWlkIHNlbGVjdFtjbGFzcyo9InNwYW4iXSwucm93LWZs
dWlkIHRleHRhcmVhW2NsYXNzKj0ic3BhbiJdLC5yb3ctZmx1aWQgLnVuZWRpdGFibGUtaW5wdXRb
Y2xhc3MqPSJzcGFuIl17ZmxvYXQ6bm9uZTttYXJnaW4tbGVmdDowfS5pbnB1dC1hcHBlbmQgaW5w
dXRbY2xhc3MqPSJzcGFuIl0sLmlucHV0LWFwcGVuZCAudW5lZGl0YWJsZS1pbnB1dFtjbGFzcyo9
InNwYW4iXSwuaW5wdXQtcHJlcGVuZCBpbnB1dFtjbGFzcyo9InNwYW4iXSwuaW5wdXQtcHJlcGVu
ZCAudW5lZGl0YWJsZS1pbnB1dFtjbGFzcyo9InNwYW4iXSwucm93LWZsdWlkIGlucHV0W2NsYXNz
Kj0ic3BhbiJdLC5yb3ctZmx1aWQgc2VsZWN0W2NsYXNzKj0ic3BhbiJdLC5yb3ctZmx1aWQgdGV4
dGFyZWFbY2xhc3MqPSJzcGFuIl0sLnJvdy1mbHVpZCAudW5lZGl0YWJsZS1pbnB1dFtjbGFzcyo9
InNwYW4iXSwucm93LWZsdWlkIC5pbnB1dC1wcmVwZW5kIFtjbGFzcyo9InNwYW4iXSwucm93LWZs
dWlkIC5pbnB1dC1hcHBlbmQgW2NsYXNzKj0ic3BhbiJde2Rpc3BsYXk6aW5saW5lLWJsb2NrfWlu
cHV0LHRleHRhcmVhLC51bmVkaXRhYmxlLWlucHV0e21hcmdpbi1sZWZ0OjB9LmNvbnRyb2xzLXJv
dyBbY2xhc3MqPSJzcGFuIl0rW2NsYXNzKj0ic3BhbiJde21hcmdpbi1sZWZ0OjIwcHh9aW5wdXQu
c3BhbjEyLHRleHRhcmVhLnNwYW4xMiwudW5lZGl0YWJsZS1pbnB1dC5zcGFuMTJ7d2lkdGg6OTI2
cHh9aW5wdXQuc3BhbjExLHRleHRhcmVhLnNwYW4xMSwudW5lZGl0YWJsZS1pbnB1dC5zcGFuMTF7
d2lkdGg6ODQ2cHh9aW5wdXQuc3BhbjEwLHRleHRhcmVhLnNwYW4xMCwudW5lZGl0YWJsZS1pbnB1
dC5zcGFuMTB7d2lkdGg6NzY2cHh9aW5wdXQuc3BhbjksdGV4dGFyZWEuc3BhbjksLnVuZWRpdGFi
bGUtaW5wdXQuc3Bhbjl7d2lkdGg6Njg2cHh9aW5wdXQuc3BhbjgsdGV4dGFyZWEuc3BhbjgsLnVu
ZWRpdGFibGUtaW5wdXQuc3Bhbjh7d2lkdGg6NjA2cHh9aW5wdXQuc3BhbjcsdGV4dGFyZWEuc3Bh
bjcsLnVuZWRpdGFibGUtaW5wdXQuc3Bhbjd7d2lkdGg6NTI2cHh9aW5wdXQuc3BhbjYsdGV4dGFy
ZWEuc3BhbjYsLnVuZWRpdGFibGUtaW5wdXQuc3BhbjZ7d2lkdGg6NDQ2cHh9aW5wdXQuc3BhbjUs
dGV4dGFyZWEuc3BhbjUsLnVuZWRpdGFibGUtaW5wdXQuc3BhbjV7d2lkdGg6MzY2cHh9aW5wdXQu
c3BhbjQsdGV4dGFyZWEuc3BhbjQsLnVuZWRpdGFibGUtaW5wdXQuc3BhbjR7d2lkdGg6Mjg2cHh9
aW5wdXQuc3BhbjMsdGV4dGFyZWEuc3BhbjMsLnVuZWRpdGFibGUtaW5wdXQuc3BhbjN7d2lkdGg6
MjA2cHh9aW5wdXQuc3BhbjIsdGV4dGFyZWEuc3BhbjIsLnVuZWRpdGFibGUtaW5wdXQuc3BhbjJ7
d2lkdGg6MTI2cHh9aW5wdXQuc3BhbjEsdGV4dGFyZWEuc3BhbjEsLnVuZWRpdGFibGUtaW5wdXQu
c3BhbjF7d2lkdGg6NDZweH0uY29udHJvbHMtcm93eyp6b29tOjF9LmNvbnRyb2xzLXJvdzpiZWZv
cmUsLmNvbnRyb2xzLXJvdzphZnRlcntkaXNwbGF5OnRhYmxlO2xpbmUtaGVpZ2h0OjA7Y29udGVu
dDoiIn0uY29udHJvbHMtcm93OmFmdGVye2NsZWFyOmJvdGh9LmNvbnRyb2xzLXJvdyBbY2xhc3Mq
PSJzcGFuIl0sLnJvdy1mbHVpZCAuY29udHJvbHMtcm93IFtjbGFzcyo9InNwYW4iXXtmbG9hdDps
ZWZ0fS5jb250cm9scy1yb3cgLmNoZWNrYm94W2NsYXNzKj0ic3BhbiJdLC5jb250cm9scy1yb3cg
LnJhZGlvW2NsYXNzKj0ic3BhbiJde3BhZGRpbmctdG9wOjVweH1pbnB1dFtkaXNhYmxlZF0sc2Vs
ZWN0W2Rpc2FibGVkXSx0ZXh0YXJlYVtkaXNhYmxlZF0saW5wdXRbcmVhZG9ubHldLHNlbGVjdFty
ZWFkb25seV0sdGV4dGFyZWFbcmVhZG9ubHlde2N1cnNvcjpub3QtYWxsb3dlZDtiYWNrZ3JvdW5k
LWNvbG9yOiNlZWV9aW5wdXRbdHlwZT0icmFkaW8iXVtkaXNhYmxlZF0saW5wdXRbdHlwZT0iY2hl
Y2tib3giXVtkaXNhYmxlZF0saW5wdXRbdHlwZT0icmFkaW8iXVtyZWFkb25seV0saW5wdXRbdHlw
ZT0iY2hlY2tib3giXVtyZWFkb25seV17YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0uY29u
dHJvbC1ncm91cC53YXJuaW5nIC5jb250cm9sLWxhYmVsLC5jb250cm9sLWdyb3VwLndhcm5pbmcg
LmhlbHAtYmxvY2ssLmNvbnRyb2wtZ3JvdXAud2FybmluZyAuaGVscC1pbmxpbmV7Y29sb3I6I2Mw
OTg1M30uY29udHJvbC1ncm91cC53YXJuaW5nIC5jaGVja2JveCwuY29udHJvbC1ncm91cC53YXJu
aW5nIC5yYWRpbywuY29udHJvbC1ncm91cC53YXJuaW5nIGlucHV0LC5jb250cm9sLWdyb3VwLndh
cm5pbmcgc2VsZWN0LC5jb250cm9sLWdyb3VwLndhcm5pbmcgdGV4dGFyZWF7Y29sb3I6I2MwOTg1
M30uY29udHJvbC1ncm91cC53YXJuaW5nIGlucHV0LC5jb250cm9sLWdyb3VwLndhcm5pbmcgc2Vs
ZWN0LC5jb250cm9sLWdyb3VwLndhcm5pbmcgdGV4dGFyZWF7Ym9yZGVyLWNvbG9yOiNjMDk4NTM7
LXdlYmtpdC1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDc1KTstbW96
LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4wNzUpO2JveC1zaGFkb3c6
aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4wNzUpfS5jb250cm9sLWdyb3VwLndhcm5pbmcg
aW5wdXQ6Zm9jdXMsLmNvbnRyb2wtZ3JvdXAud2FybmluZyBzZWxlY3Q6Zm9jdXMsLmNvbnRyb2wt
Z3JvdXAud2FybmluZyB0ZXh0YXJlYTpmb2N1c3tib3JkZXItY29sb3I6I2E0N2UzYzstd2Via2l0
LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4wNzUpLDAgMCA2cHggI2Ri
YzU5ZTstbW96LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4wNzUpLDAg
MCA2cHggI2RiYzU5ZTtib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDc1
KSwwIDAgNnB4ICNkYmM1OWV9LmNvbnRyb2wtZ3JvdXAud2FybmluZyAuaW5wdXQtcHJlcGVuZCAu
YWRkLW9uLC5jb250cm9sLWdyb3VwLndhcm5pbmcgLmlucHV0LWFwcGVuZCAuYWRkLW9ue2NvbG9y
OiNjMDk4NTM7YmFja2dyb3VuZC1jb2xvcjojZmNmOGUzO2JvcmRlci1jb2xvcjojYzA5ODUzfS5j
b250cm9sLWdyb3VwLmVycm9yIC5jb250cm9sLWxhYmVsLC5jb250cm9sLWdyb3VwLmVycm9yIC5o
ZWxwLWJsb2NrLC5jb250cm9sLWdyb3VwLmVycm9yIC5oZWxwLWlubGluZXtjb2xvcjojYjk0YTQ4
fS5jb250cm9sLWdyb3VwLmVycm9yIC5jaGVja2JveCwuY29udHJvbC1ncm91cC5lcnJvciAucmFk
aW8sLmNvbnRyb2wtZ3JvdXAuZXJyb3IgaW5wdXQsLmNvbnRyb2wtZ3JvdXAuZXJyb3Igc2VsZWN0
LC5jb250cm9sLWdyb3VwLmVycm9yIHRleHRhcmVhe2NvbG9yOiNiOTRhNDh9LmNvbnRyb2wtZ3Jv
dXAuZXJyb3IgaW5wdXQsLmNvbnRyb2wtZ3JvdXAuZXJyb3Igc2VsZWN0LC5jb250cm9sLWdyb3Vw
LmVycm9yIHRleHRhcmVhe2JvcmRlci1jb2xvcjojYjk0YTQ4Oy13ZWJraXQtYm94LXNoYWRvdzpp
bnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA3NSk7LW1vei1ib3gtc2hhZG93Omluc2V0IDAg
MXB4IDFweCByZ2JhKDAsMCwwLDAuMDc1KTtib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2Jh
KDAsMCwwLDAuMDc1KX0uY29udHJvbC1ncm91cC5lcnJvciBpbnB1dDpmb2N1cywuY29udHJvbC1n
cm91cC5lcnJvciBzZWxlY3Q6Zm9jdXMsLmNvbnRyb2wtZ3JvdXAuZXJyb3IgdGV4dGFyZWE6Zm9j
dXN7Ym9yZGVyLWNvbG9yOiM5NTNiMzk7LXdlYmtpdC1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDFw
eCByZ2JhKDAsMCwwLDAuMDc1KSwwIDAgNnB4ICNkNTkzOTI7LW1vei1ib3gtc2hhZG93Omluc2V0
IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDc1KSwwIDAgNnB4ICNkNTkzOTI7Ym94LXNoYWRvdzpp
bnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA3NSksMCAwIDZweCAjZDU5MzkyfS5jb250cm9s
LWdyb3VwLmVycm9yIC5pbnB1dC1wcmVwZW5kIC5hZGQtb24sLmNvbnRyb2wtZ3JvdXAuZXJyb3Ig
LmlucHV0LWFwcGVuZCAuYWRkLW9ue2NvbG9yOiNiOTRhNDg7YmFja2dyb3VuZC1jb2xvcjojZjJk
ZWRlO2JvcmRlci1jb2xvcjojYjk0YTQ4fS5jb250cm9sLWdyb3VwLnN1Y2Nlc3MgLmNvbnRyb2wt
bGFiZWwsLmNvbnRyb2wtZ3JvdXAuc3VjY2VzcyAuaGVscC1ibG9jaywuY29udHJvbC1ncm91cC5z
dWNjZXNzIC5oZWxwLWlubGluZXtjb2xvcjojNDY4ODQ3fS5jb250cm9sLWdyb3VwLnN1Y2Nlc3Mg
LmNoZWNrYm94LC5jb250cm9sLWdyb3VwLnN1Y2Nlc3MgLnJhZGlvLC5jb250cm9sLWdyb3VwLnN1
Y2Nlc3MgaW5wdXQsLmNvbnRyb2wtZ3JvdXAuc3VjY2VzcyBzZWxlY3QsLmNvbnRyb2wtZ3JvdXAu
c3VjY2VzcyB0ZXh0YXJlYXtjb2xvcjojNDY4ODQ3fS5jb250cm9sLWdyb3VwLnN1Y2Nlc3MgaW5w
dXQsLmNvbnRyb2wtZ3JvdXAuc3VjY2VzcyBzZWxlY3QsLmNvbnRyb2wtZ3JvdXAuc3VjY2VzcyB0
ZXh0YXJlYXtib3JkZXItY29sb3I6IzQ2ODg0Nzstd2Via2l0LWJveC1zaGFkb3c6aW5zZXQgMCAx
cHggMXB4IHJnYmEoMCwwLDAsMC4wNzUpOy1tb3otYm94LXNoYWRvdzppbnNldCAwIDFweCAxcHgg
cmdiYSgwLDAsMCwwLjA3NSk7Ym94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCww
LjA3NSl9LmNvbnRyb2wtZ3JvdXAuc3VjY2VzcyBpbnB1dDpmb2N1cywuY29udHJvbC1ncm91cC5z
dWNjZXNzIHNlbGVjdDpmb2N1cywuY29udHJvbC1ncm91cC5zdWNjZXNzIHRleHRhcmVhOmZvY3Vz
e2JvcmRlci1jb2xvcjojMzU2NjM1Oy13ZWJraXQtYm94LXNoYWRvdzppbnNldCAwIDFweCAxcHgg
cmdiYSgwLDAsMCwwLjA3NSksMCAwIDZweCAjN2FiYTdiOy1tb3otYm94LXNoYWRvdzppbnNldCAw
IDFweCAxcHggcmdiYSgwLDAsMCwwLjA3NSksMCAwIDZweCAjN2FiYTdiO2JveC1zaGFkb3c6aW5z
ZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4wNzUpLDAgMCA2cHggIzdhYmE3Yn0uY29udHJvbC1n
cm91cC5zdWNjZXNzIC5pbnB1dC1wcmVwZW5kIC5hZGQtb24sLmNvbnRyb2wtZ3JvdXAuc3VjY2Vz
cyAuaW5wdXQtYXBwZW5kIC5hZGQtb257Y29sb3I6IzQ2ODg0NztiYWNrZ3JvdW5kLWNvbG9yOiNk
ZmYwZDg7Ym9yZGVyLWNvbG9yOiM0Njg4NDd9LmNvbnRyb2wtZ3JvdXAuaW5mbyAuY29udHJvbC1s
YWJlbCwuY29udHJvbC1ncm91cC5pbmZvIC5oZWxwLWJsb2NrLC5jb250cm9sLWdyb3VwLmluZm8g
LmhlbHAtaW5saW5le2NvbG9yOiMzYTg3YWR9LmNvbnRyb2wtZ3JvdXAuaW5mbyAuY2hlY2tib3gs
LmNvbnRyb2wtZ3JvdXAuaW5mbyAucmFkaW8sLmNvbnRyb2wtZ3JvdXAuaW5mbyBpbnB1dCwuY29u
dHJvbC1ncm91cC5pbmZvIHNlbGVjdCwuY29udHJvbC1ncm91cC5pbmZvIHRleHRhcmVhe2NvbG9y
OiMzYTg3YWR9LmNvbnRyb2wtZ3JvdXAuaW5mbyBpbnB1dCwuY29udHJvbC1ncm91cC5pbmZvIHNl
bGVjdCwuY29udHJvbC1ncm91cC5pbmZvIHRleHRhcmVhe2JvcmRlci1jb2xvcjojM2E4N2FkOy13
ZWJraXQtYm94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA3NSk7LW1vei1i
b3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDc1KTtib3gtc2hhZG93Omlu
c2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDc1KX0uY29udHJvbC1ncm91cC5pbmZvIGlucHV0
OmZvY3VzLC5jb250cm9sLWdyb3VwLmluZm8gc2VsZWN0OmZvY3VzLC5jb250cm9sLWdyb3VwLmlu
Zm8gdGV4dGFyZWE6Zm9jdXN7Ym9yZGVyLWNvbG9yOiMyZDY5ODc7LXdlYmtpdC1ib3gtc2hhZG93
Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDc1KSwwIDAgNnB4ICM3YWI1ZDM7LW1vei1i
b3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDc1KSwwIDAgNnB4ICM3YWI1
ZDM7Ym94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA3NSksMCAwIDZweCAj
N2FiNWQzfS5jb250cm9sLWdyb3VwLmluZm8gLmlucHV0LXByZXBlbmQgLmFkZC1vbiwuY29udHJv
bC1ncm91cC5pbmZvIC5pbnB1dC1hcHBlbmQgLmFkZC1vbntjb2xvcjojM2E4N2FkO2JhY2tncm91
bmQtY29sb3I6I2Q5ZWRmNztib3JkZXItY29sb3I6IzNhODdhZH1pbnB1dDpmb2N1czppbnZhbGlk
LHRleHRhcmVhOmZvY3VzOmludmFsaWQsc2VsZWN0OmZvY3VzOmludmFsaWR7Y29sb3I6I2I5NGE0
ODtib3JkZXItY29sb3I6I2VlNWY1Yn1pbnB1dDpmb2N1czppbnZhbGlkOmZvY3VzLHRleHRhcmVh
OmZvY3VzOmludmFsaWQ6Zm9jdXMsc2VsZWN0OmZvY3VzOmludmFsaWQ6Zm9jdXN7Ym9yZGVyLWNv
bG9yOiNlOTMyMmQ7LXdlYmtpdC1ib3gtc2hhZG93OjAgMCA2cHggI2Y4YjliNzstbW96LWJveC1z
aGFkb3c6MCAwIDZweCAjZjhiOWI3O2JveC1zaGFkb3c6MCAwIDZweCAjZjhiOWI3fS5mb3JtLWFj
dGlvbnN7cGFkZGluZzoxOXB4IDIwcHggMjBweDttYXJnaW4tdG9wOjIwcHg7bWFyZ2luLWJvdHRv
bToyMHB4O2JhY2tncm91bmQtY29sb3I6I2Y1ZjVmNTtib3JkZXItdG9wOjFweCBzb2xpZCAjZTVl
NWU1Oyp6b29tOjF9LmZvcm0tYWN0aW9uczpiZWZvcmUsLmZvcm0tYWN0aW9uczphZnRlcntkaXNw
bGF5OnRhYmxlO2xpbmUtaGVpZ2h0OjA7Y29udGVudDoiIn0uZm9ybS1hY3Rpb25zOmFmdGVye2Ns
ZWFyOmJvdGh9LmhlbHAtYmxvY2ssLmhlbHAtaW5saW5le2NvbG9yOiM1OTU5NTl9LmhlbHAtYmxv
Y2t7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjEwcHh9LmhlbHAtaW5saW5le2Rpc3BsYXk6
aW5saW5lLWJsb2NrOypkaXNwbGF5OmlubGluZTtwYWRkaW5nLWxlZnQ6NXB4O3ZlcnRpY2FsLWFs
aWduOm1pZGRsZTsqem9vbToxfS5pbnB1dC1hcHBlbmQsLmlucHV0LXByZXBlbmR7bWFyZ2luLWJv
dHRvbTo1cHg7Zm9udC1zaXplOjA7d2hpdGUtc3BhY2U6bm93cmFwfS5pbnB1dC1hcHBlbmQgaW5w
dXQsLmlucHV0LXByZXBlbmQgaW5wdXQsLmlucHV0LWFwcGVuZCBzZWxlY3QsLmlucHV0LXByZXBl
bmQgc2VsZWN0LC5pbnB1dC1hcHBlbmQgLnVuZWRpdGFibGUtaW5wdXQsLmlucHV0LXByZXBlbmQg
LnVuZWRpdGFibGUtaW5wdXQsLmlucHV0LWFwcGVuZCAuZHJvcGRvd24tbWVudSwuaW5wdXQtcHJl
cGVuZCAuZHJvcGRvd24tbWVudXtmb250LXNpemU6MTRweH0uaW5wdXQtYXBwZW5kIGlucHV0LC5p
bnB1dC1wcmVwZW5kIGlucHV0LC5pbnB1dC1hcHBlbmQgc2VsZWN0LC5pbnB1dC1wcmVwZW5kIHNl
bGVjdCwuaW5wdXQtYXBwZW5kIC51bmVkaXRhYmxlLWlucHV0LC5pbnB1dC1wcmVwZW5kIC51bmVk
aXRhYmxlLWlucHV0e3Bvc2l0aW9uOnJlbGF0aXZlO21hcmdpbi1ib3R0b206MDsqbWFyZ2luLWxl
ZnQ6MDt2ZXJ0aWNhbC1hbGlnbjp0b3A7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjAgNHB4IDRweCAw
Oy1tb3otYm9yZGVyLXJhZGl1czowIDRweCA0cHggMDtib3JkZXItcmFkaXVzOjAgNHB4IDRweCAw
fS5pbnB1dC1hcHBlbmQgaW5wdXQ6Zm9jdXMsLmlucHV0LXByZXBlbmQgaW5wdXQ6Zm9jdXMsLmlu
cHV0LWFwcGVuZCBzZWxlY3Q6Zm9jdXMsLmlucHV0LXByZXBlbmQgc2VsZWN0OmZvY3VzLC5pbnB1
dC1hcHBlbmQgLnVuZWRpdGFibGUtaW5wdXQ6Zm9jdXMsLmlucHV0LXByZXBlbmQgLnVuZWRpdGFi
bGUtaW5wdXQ6Zm9jdXN7ei1pbmRleDoyfS5pbnB1dC1hcHBlbmQgLmFkZC1vbiwuaW5wdXQtcHJl
cGVuZCAuYWRkLW9ue2Rpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOmF1dG87aGVpZ2h0OjIwcHg7
bWluLXdpZHRoOjE2cHg7cGFkZGluZzo0cHggNXB4O2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0
Om5vcm1hbDtsaW5lLWhlaWdodDoyMHB4O3RleHQtYWxpZ246Y2VudGVyO3RleHQtc2hhZG93OjAg
MXB4IDAgI2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiNlZWU7Ym9yZGVyOjFweCBzb2xpZCAjY2NjfS5p
bnB1dC1hcHBlbmQgLmFkZC1vbiwuaW5wdXQtcHJlcGVuZCAuYWRkLW9uLC5pbnB1dC1hcHBlbmQg
LmJ0biwuaW5wdXQtcHJlcGVuZCAuYnRuLC5pbnB1dC1hcHBlbmQgLmJ0bi1ncm91cD4uZHJvcGRv
d24tdG9nZ2xlLC5pbnB1dC1wcmVwZW5kIC5idG4tZ3JvdXA+LmRyb3Bkb3duLXRvZ2dsZXt2ZXJ0
aWNhbC1hbGlnbjp0b3A7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjA7LW1vei1ib3JkZXItcmFkaXVz
OjA7Ym9yZGVyLXJhZGl1czowfS5pbnB1dC1hcHBlbmQgLmFjdGl2ZSwuaW5wdXQtcHJlcGVuZCAu
YWN0aXZle2JhY2tncm91bmQtY29sb3I6I2E5ZGJhOTtib3JkZXItY29sb3I6IzQ2YTU0Nn0uaW5w
dXQtcHJlcGVuZCAuYWRkLW9uLC5pbnB1dC1wcmVwZW5kIC5idG57bWFyZ2luLXJpZ2h0Oi0xcHh9
LmlucHV0LXByZXBlbmQgLmFkZC1vbjpmaXJzdC1jaGlsZCwuaW5wdXQtcHJlcGVuZCAuYnRuOmZp
cnN0LWNoaWxkey13ZWJraXQtYm9yZGVyLXJhZGl1czo0cHggMCAwIDRweDstbW96LWJvcmRlci1y
YWRpdXM6NHB4IDAgMCA0cHg7Ym9yZGVyLXJhZGl1czo0cHggMCAwIDRweH0uaW5wdXQtYXBwZW5k
IGlucHV0LC5pbnB1dC1hcHBlbmQgc2VsZWN0LC5pbnB1dC1hcHBlbmQgLnVuZWRpdGFibGUtaW5w
dXR7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweCAwIDAgNHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0
cHggMCAwIDRweDtib3JkZXItcmFkaXVzOjRweCAwIDAgNHB4fS5pbnB1dC1hcHBlbmQgaW5wdXQr
LmJ0bi1ncm91cCAuYnRuOmxhc3QtY2hpbGQsLmlucHV0LWFwcGVuZCBzZWxlY3QrLmJ0bi1ncm91
cCAuYnRuOmxhc3QtY2hpbGQsLmlucHV0LWFwcGVuZCAudW5lZGl0YWJsZS1pbnB1dCsuYnRuLWdy
b3VwIC5idG46bGFzdC1jaGlsZHstd2Via2l0LWJvcmRlci1yYWRpdXM6MCA0cHggNHB4IDA7LW1v
ei1ib3JkZXItcmFkaXVzOjAgNHB4IDRweCAwO2JvcmRlci1yYWRpdXM6MCA0cHggNHB4IDB9Lmlu
cHV0LWFwcGVuZCAuYWRkLW9uLC5pbnB1dC1hcHBlbmQgLmJ0biwuaW5wdXQtYXBwZW5kIC5idG4t
Z3JvdXB7bWFyZ2luLWxlZnQ6LTFweH0uaW5wdXQtYXBwZW5kIC5hZGQtb246bGFzdC1jaGlsZCwu
aW5wdXQtYXBwZW5kIC5idG46bGFzdC1jaGlsZCwuaW5wdXQtYXBwZW5kIC5idG4tZ3JvdXA6bGFz
dC1jaGlsZD4uZHJvcGRvd24tdG9nZ2xley13ZWJraXQtYm9yZGVyLXJhZGl1czowIDRweCA0cHgg
MDstbW96LWJvcmRlci1yYWRpdXM6MCA0cHggNHB4IDA7Ym9yZGVyLXJhZGl1czowIDRweCA0cHgg
MH0uaW5wdXQtcHJlcGVuZC5pbnB1dC1hcHBlbmQgaW5wdXQsLmlucHV0LXByZXBlbmQuaW5wdXQt
YXBwZW5kIHNlbGVjdCwuaW5wdXQtcHJlcGVuZC5pbnB1dC1hcHBlbmQgLnVuZWRpdGFibGUtaW5w
dXR7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjA7LW1vei1ib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXJh
ZGl1czowfS5pbnB1dC1wcmVwZW5kLmlucHV0LWFwcGVuZCBpbnB1dCsuYnRuLWdyb3VwIC5idG4s
LmlucHV0LXByZXBlbmQuaW5wdXQtYXBwZW5kIHNlbGVjdCsuYnRuLWdyb3VwIC5idG4sLmlucHV0
LXByZXBlbmQuaW5wdXQtYXBwZW5kIC51bmVkaXRhYmxlLWlucHV0Ky5idG4tZ3JvdXAgLmJ0bnst
d2Via2l0LWJvcmRlci1yYWRpdXM6MCA0cHggNHB4IDA7LW1vei1ib3JkZXItcmFkaXVzOjAgNHB4
IDRweCAwO2JvcmRlci1yYWRpdXM6MCA0cHggNHB4IDB9LmlucHV0LXByZXBlbmQuaW5wdXQtYXBw
ZW5kIC5hZGQtb246Zmlyc3QtY2hpbGQsLmlucHV0LXByZXBlbmQuaW5wdXQtYXBwZW5kIC5idG46
Zmlyc3QtY2hpbGR7bWFyZ2luLXJpZ2h0Oi0xcHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweCAw
IDAgNHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHggMCAwIDRweDtib3JkZXItcmFkaXVzOjRweCAw
IDAgNHB4fS5pbnB1dC1wcmVwZW5kLmlucHV0LWFwcGVuZCAuYWRkLW9uOmxhc3QtY2hpbGQsLmlu
cHV0LXByZXBlbmQuaW5wdXQtYXBwZW5kIC5idG46bGFzdC1jaGlsZHttYXJnaW4tbGVmdDotMXB4
Oy13ZWJraXQtYm9yZGVyLXJhZGl1czowIDRweCA0cHggMDstbW96LWJvcmRlci1yYWRpdXM6MCA0
cHggNHB4IDA7Ym9yZGVyLXJhZGl1czowIDRweCA0cHggMH0uaW5wdXQtcHJlcGVuZC5pbnB1dC1h
cHBlbmQgLmJ0bi1ncm91cDpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDowfWlucHV0LnNlYXJjaC1x
dWVyeXtwYWRkaW5nLXJpZ2h0OjE0cHg7cGFkZGluZy1yaWdodDo0cHggXDk7cGFkZGluZy1sZWZ0
OjE0cHg7cGFkZGluZy1sZWZ0OjRweCBcOTttYXJnaW4tYm90dG9tOjA7LXdlYmtpdC1ib3JkZXIt
cmFkaXVzOjE1cHg7LW1vei1ib3JkZXItcmFkaXVzOjE1cHg7Ym9yZGVyLXJhZGl1czoxNXB4fS5m
b3JtLXNlYXJjaCAuaW5wdXQtYXBwZW5kIC5zZWFyY2gtcXVlcnksLmZvcm0tc2VhcmNoIC5pbnB1
dC1wcmVwZW5kIC5zZWFyY2gtcXVlcnl7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjA7LW1vei1ib3Jk
ZXItcmFkaXVzOjA7Ym9yZGVyLXJhZGl1czowfS5mb3JtLXNlYXJjaCAuaW5wdXQtYXBwZW5kIC5z
ZWFyY2gtcXVlcnl7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjE0cHggMCAwIDE0cHg7LW1vei1ib3Jk
ZXItcmFkaXVzOjE0cHggMCAwIDE0cHg7Ym9yZGVyLXJhZGl1czoxNHB4IDAgMCAxNHB4fS5mb3Jt
LXNlYXJjaCAuaW5wdXQtYXBwZW5kIC5idG57LXdlYmtpdC1ib3JkZXItcmFkaXVzOjAgMTRweCAx
NHB4IDA7LW1vei1ib3JkZXItcmFkaXVzOjAgMTRweCAxNHB4IDA7Ym9yZGVyLXJhZGl1czowIDE0
cHggMTRweCAwfS5mb3JtLXNlYXJjaCAuaW5wdXQtcHJlcGVuZCAuc2VhcmNoLXF1ZXJ5ey13ZWJr
aXQtYm9yZGVyLXJhZGl1czowIDE0cHggMTRweCAwOy1tb3otYm9yZGVyLXJhZGl1czowIDE0cHgg
MTRweCAwO2JvcmRlci1yYWRpdXM6MCAxNHB4IDE0cHggMH0uZm9ybS1zZWFyY2ggLmlucHV0LXBy
ZXBlbmQgLmJ0bnstd2Via2l0LWJvcmRlci1yYWRpdXM6MTRweCAwIDAgMTRweDstbW96LWJvcmRl
ci1yYWRpdXM6MTRweCAwIDAgMTRweDtib3JkZXItcmFkaXVzOjE0cHggMCAwIDE0cHh9LmZvcm0t
c2VhcmNoIGlucHV0LC5mb3JtLWlubGluZSBpbnB1dCwuZm9ybS1ob3Jpem9udGFsIGlucHV0LC5m
b3JtLXNlYXJjaCB0ZXh0YXJlYSwuZm9ybS1pbmxpbmUgdGV4dGFyZWEsLmZvcm0taG9yaXpvbnRh
bCB0ZXh0YXJlYSwuZm9ybS1zZWFyY2ggc2VsZWN0LC5mb3JtLWlubGluZSBzZWxlY3QsLmZvcm0t
aG9yaXpvbnRhbCBzZWxlY3QsLmZvcm0tc2VhcmNoIC5oZWxwLWlubGluZSwuZm9ybS1pbmxpbmUg
LmhlbHAtaW5saW5lLC5mb3JtLWhvcml6b250YWwgLmhlbHAtaW5saW5lLC5mb3JtLXNlYXJjaCAu
dW5lZGl0YWJsZS1pbnB1dCwuZm9ybS1pbmxpbmUgLnVuZWRpdGFibGUtaW5wdXQsLmZvcm0taG9y
aXpvbnRhbCAudW5lZGl0YWJsZS1pbnB1dCwuZm9ybS1zZWFyY2ggLmlucHV0LXByZXBlbmQsLmZv
cm0taW5saW5lIC5pbnB1dC1wcmVwZW5kLC5mb3JtLWhvcml6b250YWwgLmlucHV0LXByZXBlbmQs
LmZvcm0tc2VhcmNoIC5pbnB1dC1hcHBlbmQsLmZvcm0taW5saW5lIC5pbnB1dC1hcHBlbmQsLmZv
cm0taG9yaXpvbnRhbCAuaW5wdXQtYXBwZW5ke2Rpc3BsYXk6aW5saW5lLWJsb2NrOypkaXNwbGF5
OmlubGluZTttYXJnaW4tYm90dG9tOjA7dmVydGljYWwtYWxpZ246bWlkZGxlOyp6b29tOjF9LmZv
cm0tc2VhcmNoIC5oaWRlLC5mb3JtLWlubGluZSAuaGlkZSwuZm9ybS1ob3Jpem9udGFsIC5oaWRl
e2Rpc3BsYXk6bm9uZX0uZm9ybS1zZWFyY2ggbGFiZWwsLmZvcm0taW5saW5lIGxhYmVsLC5mb3Jt
LXNlYXJjaCAuYnRuLWdyb3VwLC5mb3JtLWlubGluZSAuYnRuLWdyb3Vwe2Rpc3BsYXk6aW5saW5l
LWJsb2NrfS5mb3JtLXNlYXJjaCAuaW5wdXQtYXBwZW5kLC5mb3JtLWlubGluZSAuaW5wdXQtYXBw
ZW5kLC5mb3JtLXNlYXJjaCAuaW5wdXQtcHJlcGVuZCwuZm9ybS1pbmxpbmUgLmlucHV0LXByZXBl
bmR7bWFyZ2luLWJvdHRvbTowfS5mb3JtLXNlYXJjaCAucmFkaW8sLmZvcm0tc2VhcmNoIC5jaGVj
a2JveCwuZm9ybS1pbmxpbmUgLnJhZGlvLC5mb3JtLWlubGluZSAuY2hlY2tib3h7cGFkZGluZy1s
ZWZ0OjA7bWFyZ2luLWJvdHRvbTowO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uZm9ybS1zZWFyY2gg
LnJhZGlvIGlucHV0W3R5cGU9InJhZGlvIl0sLmZvcm0tc2VhcmNoIC5jaGVja2JveCBpbnB1dFt0
eXBlPSJjaGVja2JveCJdLC5mb3JtLWlubGluZSAucmFkaW8gaW5wdXRbdHlwZT0icmFkaW8iXSwu
Zm9ybS1pbmxpbmUgLmNoZWNrYm94IGlucHV0W3R5cGU9ImNoZWNrYm94Il17ZmxvYXQ6bGVmdDtt
YXJnaW4tcmlnaHQ6M3B4O21hcmdpbi1sZWZ0OjB9LmNvbnRyb2wtZ3JvdXB7bWFyZ2luLWJvdHRv
bToxMHB4fWxlZ2VuZCsuY29udHJvbC1ncm91cHttYXJnaW4tdG9wOjIwcHg7LXdlYmtpdC1tYXJn
aW4tdG9wLWNvbGxhcHNlOnNlcGFyYXRlfS5mb3JtLWhvcml6b250YWwgLmNvbnRyb2wtZ3JvdXB7
bWFyZ2luLWJvdHRvbToyMHB4Oyp6b29tOjF9LmZvcm0taG9yaXpvbnRhbCAuY29udHJvbC1ncm91
cDpiZWZvcmUsLmZvcm0taG9yaXpvbnRhbCAuY29udHJvbC1ncm91cDphZnRlcntkaXNwbGF5OnRh
YmxlO2xpbmUtaGVpZ2h0OjA7Y29udGVudDoiIn0uZm9ybS1ob3Jpem9udGFsIC5jb250cm9sLWdy
b3VwOmFmdGVye2NsZWFyOmJvdGh9LmZvcm0taG9yaXpvbnRhbCAuY29udHJvbC1sYWJlbHtmbG9h
dDpsZWZ0O3dpZHRoOjE2MHB4O3BhZGRpbmctdG9wOjVweDt0ZXh0LWFsaWduOnJpZ2h0fS5mb3Jt
LWhvcml6b250YWwgLmNvbnRyb2xzeypkaXNwbGF5OmlubGluZS1ibG9jazsqcGFkZGluZy1sZWZ0
OjIwcHg7bWFyZ2luLWxlZnQ6MTgwcHg7Km1hcmdpbi1sZWZ0OjB9LmZvcm0taG9yaXpvbnRhbCAu
Y29udHJvbHM6Zmlyc3QtY2hpbGR7KnBhZGRpbmctbGVmdDoxODBweH0uZm9ybS1ob3Jpem9udGFs
IC5oZWxwLWJsb2Nre21hcmdpbi1ib3R0b206MH0uZm9ybS1ob3Jpem9udGFsIGlucHV0Ky5oZWxw
LWJsb2NrLC5mb3JtLWhvcml6b250YWwgc2VsZWN0Ky5oZWxwLWJsb2NrLC5mb3JtLWhvcml6b250
YWwgdGV4dGFyZWErLmhlbHAtYmxvY2ssLmZvcm0taG9yaXpvbnRhbCAudW5lZGl0YWJsZS1pbnB1
dCsuaGVscC1ibG9jaywuZm9ybS1ob3Jpem9udGFsIC5pbnB1dC1wcmVwZW5kKy5oZWxwLWJsb2Nr
LC5mb3JtLWhvcml6b250YWwgLmlucHV0LWFwcGVuZCsuaGVscC1ibG9ja3ttYXJnaW4tdG9wOjEw
cHh9LmZvcm0taG9yaXpvbnRhbCAuZm9ybS1hY3Rpb25ze3BhZGRpbmctbGVmdDoxODBweH10YWJs
ZXttYXgtd2lkdGg6MTAwJTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlci1jb2xs
YXBzZTpjb2xsYXBzZTtib3JkZXItc3BhY2luZzowfS50YWJsZXt3aWR0aDoxMDAlO21hcmdpbi1i
b3R0b206MjBweH0udGFibGUgdGgsLnRhYmxlIHRke3BhZGRpbmc6OHB4O2xpbmUtaGVpZ2h0OjIw
cHg7dGV4dC1hbGlnbjpsZWZ0O3ZlcnRpY2FsLWFsaWduOnRvcDtib3JkZXItdG9wOjFweCBzb2xp
ZCAjZGRkfS50YWJsZSB0aHtmb250LXdlaWdodDpib2xkfS50YWJsZSB0aGVhZCB0aHt2ZXJ0aWNh
bC1hbGlnbjpib3R0b219LnRhYmxlIGNhcHRpb24rdGhlYWQgdHI6Zmlyc3QtY2hpbGQgdGgsLnRh
YmxlIGNhcHRpb24rdGhlYWQgdHI6Zmlyc3QtY2hpbGQgdGQsLnRhYmxlIGNvbGdyb3VwK3RoZWFk
IHRyOmZpcnN0LWNoaWxkIHRoLC50YWJsZSBjb2xncm91cCt0aGVhZCB0cjpmaXJzdC1jaGlsZCB0
ZCwudGFibGUgdGhlYWQ6Zmlyc3QtY2hpbGQgdHI6Zmlyc3QtY2hpbGQgdGgsLnRhYmxlIHRoZWFk
OmZpcnN0LWNoaWxkIHRyOmZpcnN0LWNoaWxkIHRke2JvcmRlci10b3A6MH0udGFibGUgdGJvZHkr
dGJvZHl7Ym9yZGVyLXRvcDoycHggc29saWQgI2RkZH0udGFibGUgLnRhYmxle2JhY2tncm91bmQt
Y29sb3I6I2ZmZn0udGFibGUtY29uZGVuc2VkIHRoLC50YWJsZS1jb25kZW5zZWQgdGR7cGFkZGlu
Zzo0cHggNXB4fS50YWJsZS1ib3JkZXJlZHtib3JkZXI6MXB4IHNvbGlkICNkZGQ7Ym9yZGVyLWNv
bGxhcHNlOnNlcGFyYXRlOypib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7Ym9yZGVyLWxlZnQ6MDst
d2Via2l0LWJvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyLXJh
ZGl1czo0cHh9LnRhYmxlLWJvcmRlcmVkIHRoLC50YWJsZS1ib3JkZXJlZCB0ZHtib3JkZXItbGVm
dDoxcHggc29saWQgI2RkZH0udGFibGUtYm9yZGVyZWQgY2FwdGlvbit0aGVhZCB0cjpmaXJzdC1j
aGlsZCB0aCwudGFibGUtYm9yZGVyZWQgY2FwdGlvbit0Ym9keSB0cjpmaXJzdC1jaGlsZCB0aCwu
dGFibGUtYm9yZGVyZWQgY2FwdGlvbit0Ym9keSB0cjpmaXJzdC1jaGlsZCB0ZCwudGFibGUtYm9y
ZGVyZWQgY29sZ3JvdXArdGhlYWQgdHI6Zmlyc3QtY2hpbGQgdGgsLnRhYmxlLWJvcmRlcmVkIGNv
bGdyb3VwK3Rib2R5IHRyOmZpcnN0LWNoaWxkIHRoLC50YWJsZS1ib3JkZXJlZCBjb2xncm91cCt0
Ym9keSB0cjpmaXJzdC1jaGlsZCB0ZCwudGFibGUtYm9yZGVyZWQgdGhlYWQ6Zmlyc3QtY2hpbGQg
dHI6Zmlyc3QtY2hpbGQgdGgsLnRhYmxlLWJvcmRlcmVkIHRib2R5OmZpcnN0LWNoaWxkIHRyOmZp
cnN0LWNoaWxkIHRoLC50YWJsZS1ib3JkZXJlZCB0Ym9keTpmaXJzdC1jaGlsZCB0cjpmaXJzdC1j
aGlsZCB0ZHtib3JkZXItdG9wOjB9LnRhYmxlLWJvcmRlcmVkIHRoZWFkOmZpcnN0LWNoaWxkIHRy
OmZpcnN0LWNoaWxkPnRoOmZpcnN0LWNoaWxkLC50YWJsZS1ib3JkZXJlZCB0Ym9keTpmaXJzdC1j
aGlsZCB0cjpmaXJzdC1jaGlsZD50ZDpmaXJzdC1jaGlsZHstd2Via2l0LWJvcmRlci10b3AtbGVm
dC1yYWRpdXM6NHB4O2JvcmRlci10b3AtbGVmdC1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1
cy10b3BsZWZ0OjRweH0udGFibGUtYm9yZGVyZWQgdGhlYWQ6Zmlyc3QtY2hpbGQgdHI6Zmlyc3Qt
Y2hpbGQ+dGg6bGFzdC1jaGlsZCwudGFibGUtYm9yZGVyZWQgdGJvZHk6Zmlyc3QtY2hpbGQgdHI6
Zmlyc3QtY2hpbGQ+dGQ6bGFzdC1jaGlsZHstd2Via2l0LWJvcmRlci10b3AtcmlnaHQtcmFkaXVz
OjRweDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzLXRvcHJp
Z2h0OjRweH0udGFibGUtYm9yZGVyZWQgdGhlYWQ6bGFzdC1jaGlsZCB0cjpsYXN0LWNoaWxkPnRo
OmZpcnN0LWNoaWxkLC50YWJsZS1ib3JkZXJlZCB0Ym9keTpsYXN0LWNoaWxkIHRyOmxhc3QtY2hp
bGQ+dGQ6Zmlyc3QtY2hpbGQsLnRhYmxlLWJvcmRlcmVkIHRmb290Omxhc3QtY2hpbGQgdHI6bGFz
dC1jaGlsZD50ZDpmaXJzdC1jaGlsZHstd2Via2l0LWJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6
NHB4O2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1cy1ib3R0
b21sZWZ0OjRweH0udGFibGUtYm9yZGVyZWQgdGhlYWQ6bGFzdC1jaGlsZCB0cjpsYXN0LWNoaWxk
PnRoOmxhc3QtY2hpbGQsLnRhYmxlLWJvcmRlcmVkIHRib2R5Omxhc3QtY2hpbGQgdHI6bGFzdC1j
aGlsZD50ZDpsYXN0LWNoaWxkLC50YWJsZS1ib3JkZXJlZCB0Zm9vdDpsYXN0LWNoaWxkIHRyOmxh
c3QtY2hpbGQ+dGQ6bGFzdC1jaGlsZHstd2Via2l0LWJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVz
OjRweDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzLWJv
dHRvbXJpZ2h0OjRweH0udGFibGUtYm9yZGVyZWQgdGZvb3QrdGJvZHk6bGFzdC1jaGlsZCB0cjps
YXN0LWNoaWxkIHRkOmZpcnN0LWNoaWxkey13ZWJraXQtYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1
czowO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MDstbW96LWJvcmRlci1yYWRpdXMtYm90dG9t
bGVmdDowfS50YWJsZS1ib3JkZXJlZCB0Zm9vdCt0Ym9keTpsYXN0LWNoaWxkIHRyOmxhc3QtY2hp
bGQgdGQ6bGFzdC1jaGlsZHstd2Via2l0LWJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjA7Ym9y
ZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MDstbW96LWJvcmRlci1yYWRpdXMtYm90dG9tcmlnaHQ6
MH0udGFibGUtYm9yZGVyZWQgY2FwdGlvbit0aGVhZCB0cjpmaXJzdC1jaGlsZCB0aDpmaXJzdC1j
aGlsZCwudGFibGUtYm9yZGVyZWQgY2FwdGlvbit0Ym9keSB0cjpmaXJzdC1jaGlsZCB0ZDpmaXJz
dC1jaGlsZCwudGFibGUtYm9yZGVyZWQgY29sZ3JvdXArdGhlYWQgdHI6Zmlyc3QtY2hpbGQgdGg6
Zmlyc3QtY2hpbGQsLnRhYmxlLWJvcmRlcmVkIGNvbGdyb3VwK3Rib2R5IHRyOmZpcnN0LWNoaWxk
IHRkOmZpcnN0LWNoaWxkey13ZWJraXQtYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czo0cHg7Ym9yZGVy
LXRvcC1sZWZ0LXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzLXRvcGxlZnQ6NHB4fS50YWJs
ZS1ib3JkZXJlZCBjYXB0aW9uK3RoZWFkIHRyOmZpcnN0LWNoaWxkIHRoOmxhc3QtY2hpbGQsLnRh
YmxlLWJvcmRlcmVkIGNhcHRpb24rdGJvZHkgdHI6Zmlyc3QtY2hpbGQgdGQ6bGFzdC1jaGlsZCwu
dGFibGUtYm9yZGVyZWQgY29sZ3JvdXArdGhlYWQgdHI6Zmlyc3QtY2hpbGQgdGg6bGFzdC1jaGls
ZCwudGFibGUtYm9yZGVyZWQgY29sZ3JvdXArdGJvZHkgdHI6Zmlyc3QtY2hpbGQgdGQ6bGFzdC1j
aGlsZHstd2Via2l0LWJvcmRlci10b3AtcmlnaHQtcmFkaXVzOjRweDtib3JkZXItdG9wLXJpZ2h0
LXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzLXRvcHJpZ2h0OjRweH0udGFibGUtc3RyaXBl
ZCB0Ym9keT50cjpudGgtY2hpbGQob2RkKT50ZCwudGFibGUtc3RyaXBlZCB0Ym9keT50cjpudGgt
Y2hpbGQob2RkKT50aHtiYWNrZ3JvdW5kLWNvbG9yOiNmOWY5Zjl9LnRhYmxlLWhvdmVyIHRib2R5
IHRyOmhvdmVyIHRkLC50YWJsZS1ob3ZlciB0Ym9keSB0cjpob3ZlciB0aHtiYWNrZ3JvdW5kLWNv
bG9yOiNmNWY1ZjV9dGFibGUgdGRbY2xhc3MqPSJzcGFuIl0sdGFibGUgdGhbY2xhc3MqPSJzcGFu
Il0sLnJvdy1mbHVpZCB0YWJsZSB0ZFtjbGFzcyo9InNwYW4iXSwucm93LWZsdWlkIHRhYmxlIHRo
W2NsYXNzKj0ic3BhbiJde2Rpc3BsYXk6dGFibGUtY2VsbDtmbG9hdDpub25lO21hcmdpbi1sZWZ0
OjB9LnRhYmxlIHRkLnNwYW4xLC50YWJsZSB0aC5zcGFuMXtmbG9hdDpub25lO3dpZHRoOjQ0cHg7
bWFyZ2luLWxlZnQ6MH0udGFibGUgdGQuc3BhbjIsLnRhYmxlIHRoLnNwYW4ye2Zsb2F0Om5vbmU7
d2lkdGg6MTI0cHg7bWFyZ2luLWxlZnQ6MH0udGFibGUgdGQuc3BhbjMsLnRhYmxlIHRoLnNwYW4z
e2Zsb2F0Om5vbmU7d2lkdGg6MjA0cHg7bWFyZ2luLWxlZnQ6MH0udGFibGUgdGQuc3BhbjQsLnRh
YmxlIHRoLnNwYW40e2Zsb2F0Om5vbmU7d2lkdGg6Mjg0cHg7bWFyZ2luLWxlZnQ6MH0udGFibGUg
dGQuc3BhbjUsLnRhYmxlIHRoLnNwYW41e2Zsb2F0Om5vbmU7d2lkdGg6MzY0cHg7bWFyZ2luLWxl
ZnQ6MH0udGFibGUgdGQuc3BhbjYsLnRhYmxlIHRoLnNwYW42e2Zsb2F0Om5vbmU7d2lkdGg6NDQ0
cHg7bWFyZ2luLWxlZnQ6MH0udGFibGUgdGQuc3BhbjcsLnRhYmxlIHRoLnNwYW43e2Zsb2F0Om5v
bmU7d2lkdGg6NTI0cHg7bWFyZ2luLWxlZnQ6MH0udGFibGUgdGQuc3BhbjgsLnRhYmxlIHRoLnNw
YW44e2Zsb2F0Om5vbmU7d2lkdGg6NjA0cHg7bWFyZ2luLWxlZnQ6MH0udGFibGUgdGQuc3Bhbjks
LnRhYmxlIHRoLnNwYW45e2Zsb2F0Om5vbmU7d2lkdGg6Njg0cHg7bWFyZ2luLWxlZnQ6MH0udGFi
bGUgdGQuc3BhbjEwLC50YWJsZSB0aC5zcGFuMTB7ZmxvYXQ6bm9uZTt3aWR0aDo3NjRweDttYXJn
aW4tbGVmdDowfS50YWJsZSB0ZC5zcGFuMTEsLnRhYmxlIHRoLnNwYW4xMXtmbG9hdDpub25lO3dp
ZHRoOjg0NHB4O21hcmdpbi1sZWZ0OjB9LnRhYmxlIHRkLnNwYW4xMiwudGFibGUgdGguc3BhbjEy
e2Zsb2F0Om5vbmU7d2lkdGg6OTI0cHg7bWFyZ2luLWxlZnQ6MH0udGFibGUgdGJvZHkgdHIuc3Vj
Y2VzcyB0ZHtiYWNrZ3JvdW5kLWNvbG9yOiNkZmYwZDh9LnRhYmxlIHRib2R5IHRyLmVycm9yIHRk
e2JhY2tncm91bmQtY29sb3I6I2YyZGVkZX0udGFibGUgdGJvZHkgdHIud2FybmluZyB0ZHtiYWNr
Z3JvdW5kLWNvbG9yOiNmY2Y4ZTN9LnRhYmxlIHRib2R5IHRyLmluZm8gdGR7YmFja2dyb3VuZC1j
b2xvcjojZDllZGY3fS50YWJsZS1ob3ZlciB0Ym9keSB0ci5zdWNjZXNzOmhvdmVyIHRke2JhY2tn
cm91bmQtY29sb3I6I2QwZTljNn0udGFibGUtaG92ZXIgdGJvZHkgdHIuZXJyb3I6aG92ZXIgdGR7
YmFja2dyb3VuZC1jb2xvcjojZWJjY2NjfS50YWJsZS1ob3ZlciB0Ym9keSB0ci53YXJuaW5nOmhv
dmVyIHRke2JhY2tncm91bmQtY29sb3I6I2ZhZjJjY30udGFibGUtaG92ZXIgdGJvZHkgdHIuaW5m
bzpob3ZlciB0ZHtiYWNrZ3JvdW5kLWNvbG9yOiNjNGUzZjN9W2NsYXNzXj0iaWNvbi0iXSxbY2xh
c3MqPSIgaWNvbi0iXXtkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDoxNHB4O2hlaWdodDoxNHB4
O21hcmdpbi10b3A6MXB4OyptYXJnaW4tcmlnaHQ6LjNlbTtsaW5lLWhlaWdodDoxNHB4O3ZlcnRp
Y2FsLWFsaWduOnRleHQtdG9wO2JhY2tncm91bmQtaW1hZ2U6dXJsKCIuLi9pbWcvZ2x5cGhpY29u
cy1oYWxmbGluZ3MucG5nIik7YmFja2dyb3VuZC1wb3NpdGlvbjoxNHB4IDE0cHg7YmFja2dyb3Vu
ZC1yZXBlYXQ6bm8tcmVwZWF0fS5pY29uLXdoaXRlLC5uYXYtcGlsbHM+LmFjdGl2ZT5hPltjbGFz
c149Imljb24tIl0sLm5hdi1waWxscz4uYWN0aXZlPmE+W2NsYXNzKj0iIGljb24tIl0sLm5hdi1s
aXN0Pi5hY3RpdmU+YT5bY2xhc3NePSJpY29uLSJdLC5uYXYtbGlzdD4uYWN0aXZlPmE+W2NsYXNz
Kj0iIGljb24tIl0sLm5hdmJhci1pbnZlcnNlIC5uYXY+LmFjdGl2ZT5hPltjbGFzc149Imljb24t
Il0sLm5hdmJhci1pbnZlcnNlIC5uYXY+LmFjdGl2ZT5hPltjbGFzcyo9IiBpY29uLSJdLC5kcm9w
ZG93bi1tZW51PmxpPmE6aG92ZXI+W2NsYXNzXj0iaWNvbi0iXSwuZHJvcGRvd24tbWVudT5saT5h
OmhvdmVyPltjbGFzcyo9IiBpY29uLSJdLC5kcm9wZG93bi1tZW51Pi5hY3RpdmU+YT5bY2xhc3Ne
PSJpY29uLSJdLC5kcm9wZG93bi1tZW51Pi5hY3RpdmU+YT5bY2xhc3MqPSIgaWNvbi0iXSwuZHJv
cGRvd24tc3VibWVudTpob3Zlcj5hPltjbGFzc149Imljb24tIl0sLmRyb3Bkb3duLXN1Ym1lbnU6
aG92ZXI+YT5bY2xhc3MqPSIgaWNvbi0iXXtiYWNrZ3JvdW5kLWltYWdlOnVybCgiLi4vaW1nL2ds
eXBoaWNvbnMtaGFsZmxpbmdzLXdoaXRlLnBuZyIpfS5pY29uLWdsYXNze2JhY2tncm91bmQtcG9z
aXRpb246MCAwfS5pY29uLW11c2lje2JhY2tncm91bmQtcG9zaXRpb246LTI0cHggMH0uaWNvbi1z
ZWFyY2h7YmFja2dyb3VuZC1wb3NpdGlvbjotNDhweCAwfS5pY29uLWVudmVsb3Ble2JhY2tncm91
bmQtcG9zaXRpb246LTcycHggMH0uaWNvbi1oZWFydHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4
IDB9Lmljb24tc3RhcntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMjBweCAwfS5pY29uLXN0YXItZW1w
dHl7YmFja2dyb3VuZC1wb3NpdGlvbjotMTQ0cHggMH0uaWNvbi11c2Vye2JhY2tncm91bmQtcG9z
aXRpb246LTE2OHB4IDB9Lmljb24tZmlsbXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xOTJweCAwfS5p
Y29uLXRoLWxhcmdle2JhY2tncm91bmQtcG9zaXRpb246LTIxNnB4IDB9Lmljb24tdGh7YmFja2dy
b3VuZC1wb3NpdGlvbjotMjQwcHggMH0uaWNvbi10aC1saXN0e2JhY2tncm91bmQtcG9zaXRpb246
LTI2NHB4IDB9Lmljb24tb2t7YmFja2dyb3VuZC1wb3NpdGlvbjotMjg4cHggMH0uaWNvbi1yZW1v
dmV7YmFja2dyb3VuZC1wb3NpdGlvbjotMzEycHggMH0uaWNvbi16b29tLWlue2JhY2tncm91bmQt
cG9zaXRpb246LTMzNnB4IDB9Lmljb24tem9vbS1vdXR7YmFja2dyb3VuZC1wb3NpdGlvbjotMzYw
cHggMH0uaWNvbi1vZmZ7YmFja2dyb3VuZC1wb3NpdGlvbjotMzg0cHggMH0uaWNvbi1zaWduYWx7
YmFja2dyb3VuZC1wb3NpdGlvbjotNDA4cHggMH0uaWNvbi1jb2d7YmFja2dyb3VuZC1wb3NpdGlv
bjotNDMycHggMH0uaWNvbi10cmFzaHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00NTZweCAwfS5pY29u
LWhvbWV7YmFja2dyb3VuZC1wb3NpdGlvbjowIC0yNHB4fS5pY29uLWZpbGV7YmFja2dyb3VuZC1w
b3NpdGlvbjotMjRweCAtMjRweH0uaWNvbi10aW1le2JhY2tncm91bmQtcG9zaXRpb246LTQ4cHgg
LTI0cHh9Lmljb24tcm9hZHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi03MnB4IC0yNHB4fS5pY29uLWRv
d25sb2FkLWFsdHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4IC0yNHB4fS5pY29uLWRvd25sb2Fk
e2JhY2tncm91bmQtcG9zaXRpb246LTEyMHB4IC0yNHB4fS5pY29uLXVwbG9hZHtiYWNrZ3JvdW5k
LXBvc2l0aW9uOi0xNDRweCAtMjRweH0uaWNvbi1pbmJveHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0x
NjhweCAtMjRweH0uaWNvbi1wbGF5LWNpcmNsZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xOTJweCAt
MjRweH0uaWNvbi1yZXBlYXR7YmFja2dyb3VuZC1wb3NpdGlvbjotMjE2cHggLTI0cHh9Lmljb24t
cmVmcmVzaHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yNDBweCAtMjRweH0uaWNvbi1saXN0LWFsdHti
YWNrZ3JvdW5kLXBvc2l0aW9uOi0yNjRweCAtMjRweH0uaWNvbi1sb2Nre2JhY2tncm91bmQtcG9z
aXRpb246LTI4N3B4IC0yNHB4fS5pY29uLWZsYWd7YmFja2dyb3VuZC1wb3NpdGlvbjotMzEycHgg
LTI0cHh9Lmljb24taGVhZHBob25lc3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMzZweCAtMjRweH0u
aWNvbi12b2x1bWUtb2Zme2JhY2tncm91bmQtcG9zaXRpb246LTM2MHB4IC0yNHB4fS5pY29uLXZv
bHVtZS1kb3due2JhY2tncm91bmQtcG9zaXRpb246LTM4NHB4IC0yNHB4fS5pY29uLXZvbHVtZS11
cHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00MDhweCAtMjRweH0uaWNvbi1xcmNvZGV7YmFja2dyb3Vu
ZC1wb3NpdGlvbjotNDMycHggLTI0cHh9Lmljb24tYmFyY29kZXtiYWNrZ3JvdW5kLXBvc2l0aW9u
Oi00NTZweCAtMjRweH0uaWNvbi10YWd7YmFja2dyb3VuZC1wb3NpdGlvbjowIC00OHB4fS5pY29u
LXRhZ3N7YmFja2dyb3VuZC1wb3NpdGlvbjotMjVweCAtNDhweH0uaWNvbi1ib29re2JhY2tncm91
bmQtcG9zaXRpb246LTQ4cHggLTQ4cHh9Lmljb24tYm9va21hcmt7YmFja2dyb3VuZC1wb3NpdGlv
bjotNzJweCAtNDhweH0uaWNvbi1wcmludHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4IC00OHB4
fS5pY29uLWNhbWVyYXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMjBweCAtNDhweH0uaWNvbi1mb250
e2JhY2tncm91bmQtcG9zaXRpb246LTE0NHB4IC00OHB4fS5pY29uLWJvbGR7YmFja2dyb3VuZC1w
b3NpdGlvbjotMTY3cHggLTQ4cHh9Lmljb24taXRhbGlje2JhY2tncm91bmQtcG9zaXRpb246LTE5
MnB4IC00OHB4fS5pY29uLXRleHQtaGVpZ2h0e2JhY2tncm91bmQtcG9zaXRpb246LTIxNnB4IC00
OHB4fS5pY29uLXRleHQtd2lkdGh7YmFja2dyb3VuZC1wb3NpdGlvbjotMjQwcHggLTQ4cHh9Lmlj
b24tYWxpZ24tbGVmdHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yNjRweCAtNDhweH0uaWNvbi1hbGln
bi1jZW50ZXJ7YmFja2dyb3VuZC1wb3NpdGlvbjotMjg4cHggLTQ4cHh9Lmljb24tYWxpZ24tcmln
aHR7YmFja2dyb3VuZC1wb3NpdGlvbjotMzEycHggLTQ4cHh9Lmljb24tYWxpZ24tanVzdGlmeXti
YWNrZ3JvdW5kLXBvc2l0aW9uOi0zMzZweCAtNDhweH0uaWNvbi1saXN0e2JhY2tncm91bmQtcG9z
aXRpb246LTM2MHB4IC00OHB4fS5pY29uLWluZGVudC1sZWZ0e2JhY2tncm91bmQtcG9zaXRpb246
LTM4NHB4IC00OHB4fS5pY29uLWluZGVudC1yaWdodHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00MDhw
eCAtNDhweH0uaWNvbi1mYWNldGltZS12aWRlb3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi00MzJweCAt
NDhweH0uaWNvbi1waWN0dXJle2JhY2tncm91bmQtcG9zaXRpb246LTQ1NnB4IC00OHB4fS5pY29u
LXBlbmNpbHtiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTcycHh9Lmljb24tbWFwLW1hcmtlcntiYWNr
Z3JvdW5kLXBvc2l0aW9uOi0yNHB4IC03MnB4fS5pY29uLWFkanVzdHtiYWNrZ3JvdW5kLXBvc2l0
aW9uOi00OHB4IC03MnB4fS5pY29uLXRpbnR7YmFja2dyb3VuZC1wb3NpdGlvbjotNzJweCAtNzJw
eH0uaWNvbi1lZGl0e2JhY2tncm91bmQtcG9zaXRpb246LTk2cHggLTcycHh9Lmljb24tc2hhcmV7
YmFja2dyb3VuZC1wb3NpdGlvbjotMTIwcHggLTcycHh9Lmljb24tY2hlY2t7YmFja2dyb3VuZC1w
b3NpdGlvbjotMTQ0cHggLTcycHh9Lmljb24tbW92ZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNjhw
eCAtNzJweH0uaWNvbi1zdGVwLWJhY2t3YXJke2JhY2tncm91bmQtcG9zaXRpb246LTE5MnB4IC03
MnB4fS5pY29uLWZhc3QtYmFja3dhcmR7YmFja2dyb3VuZC1wb3NpdGlvbjotMjE2cHggLTcycHh9
Lmljb24tYmFja3dhcmR7YmFja2dyb3VuZC1wb3NpdGlvbjotMjQwcHggLTcycHh9Lmljb24tcGxh
eXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yNjRweCAtNzJweH0uaWNvbi1wYXVzZXtiYWNrZ3JvdW5k
LXBvc2l0aW9uOi0yODhweCAtNzJweH0uaWNvbi1zdG9we2JhY2tncm91bmQtcG9zaXRpb246LTMx
MnB4IC03MnB4fS5pY29uLWZvcndhcmR7YmFja2dyb3VuZC1wb3NpdGlvbjotMzM2cHggLTcycHh9
Lmljb24tZmFzdC1mb3J3YXJke2JhY2tncm91bmQtcG9zaXRpb246LTM2MHB4IC03MnB4fS5pY29u
LXN0ZXAtZm9yd2FyZHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zODRweCAtNzJweH0uaWNvbi1lamVj
dHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00MDhweCAtNzJweH0uaWNvbi1jaGV2cm9uLWxlZnR7YmFj
a2dyb3VuZC1wb3NpdGlvbjotNDMycHggLTcycHh9Lmljb24tY2hldnJvbi1yaWdodHtiYWNrZ3Jv
dW5kLXBvc2l0aW9uOi00NTZweCAtNzJweH0uaWNvbi1wbHVzLXNpZ257YmFja2dyb3VuZC1wb3Np
dGlvbjowIC05NnB4fS5pY29uLW1pbnVzLXNpZ257YmFja2dyb3VuZC1wb3NpdGlvbjotMjRweCAt
OTZweH0uaWNvbi1yZW1vdmUtc2lnbntiYWNrZ3JvdW5kLXBvc2l0aW9uOi00OHB4IC05NnB4fS5p
Y29uLW9rLXNpZ257YmFja2dyb3VuZC1wb3NpdGlvbjotNzJweCAtOTZweH0uaWNvbi1xdWVzdGlv
bi1zaWdue2JhY2tncm91bmQtcG9zaXRpb246LTk2cHggLTk2cHh9Lmljb24taW5mby1zaWdue2Jh
Y2tncm91bmQtcG9zaXRpb246LTEyMHB4IC05NnB4fS5pY29uLXNjcmVlbnNob3R7YmFja2dyb3Vu
ZC1wb3NpdGlvbjotMTQ0cHggLTk2cHh9Lmljb24tcmVtb3ZlLWNpcmNsZXtiYWNrZ3JvdW5kLXBv
c2l0aW9uOi0xNjhweCAtOTZweH0uaWNvbi1vay1jaXJjbGV7YmFja2dyb3VuZC1wb3NpdGlvbjot
MTkycHggLTk2cHh9Lmljb24tYmFuLWNpcmNsZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yMTZweCAt
OTZweH0uaWNvbi1hcnJvdy1sZWZ0e2JhY2tncm91bmQtcG9zaXRpb246LTI0MHB4IC05NnB4fS5p
Y29uLWFycm93LXJpZ2h0e2JhY2tncm91bmQtcG9zaXRpb246LTI2NHB4IC05NnB4fS5pY29uLWFy
cm93LXVwe2JhY2tncm91bmQtcG9zaXRpb246LTI4OXB4IC05NnB4fS5pY29uLWFycm93LWRvd257
YmFja2dyb3VuZC1wb3NpdGlvbjotMzEycHggLTk2cHh9Lmljb24tc2hhcmUtYWx0e2JhY2tncm91
bmQtcG9zaXRpb246LTMzNnB4IC05NnB4fS5pY29uLXJlc2l6ZS1mdWxse2JhY2tncm91bmQtcG9z
aXRpb246LTM2MHB4IC05NnB4fS5pY29uLXJlc2l6ZS1zbWFsbHtiYWNrZ3JvdW5kLXBvc2l0aW9u
Oi0zODRweCAtOTZweH0uaWNvbi1wbHVze2JhY2tncm91bmQtcG9zaXRpb246LTQwOHB4IC05NnB4
fS5pY29uLW1pbnVze2JhY2tncm91bmQtcG9zaXRpb246LTQzM3B4IC05NnB4fS5pY29uLWFzdGVy
aXNre2JhY2tncm91bmQtcG9zaXRpb246LTQ1NnB4IC05NnB4fS5pY29uLWV4Y2xhbWF0aW9uLXNp
Z257YmFja2dyb3VuZC1wb3NpdGlvbjowIC0xMjBweH0uaWNvbi1naWZ0e2JhY2tncm91bmQtcG9z
aXRpb246LTI0cHggLTEyMHB4fS5pY29uLWxlYWZ7YmFja2dyb3VuZC1wb3NpdGlvbjotNDhweCAt
MTIwcHh9Lmljb24tZmlyZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi03MnB4IC0xMjBweH0uaWNvbi1l
eWUtb3BlbntiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4IC0xMjBweH0uaWNvbi1leWUtY2xvc2V7
YmFja2dyb3VuZC1wb3NpdGlvbjotMTIwcHggLTEyMHB4fS5pY29uLXdhcm5pbmctc2lnbntiYWNr
Z3JvdW5kLXBvc2l0aW9uOi0xNDRweCAtMTIwcHh9Lmljb24tcGxhbmV7YmFja2dyb3VuZC1wb3Np
dGlvbjotMTY4cHggLTEyMHB4fS5pY29uLWNhbGVuZGFye2JhY2tncm91bmQtcG9zaXRpb246LTE5
MnB4IC0xMjBweH0uaWNvbi1yYW5kb217d2lkdGg6MTZweDtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0y
MTZweCAtMTIwcHh9Lmljb24tY29tbWVudHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yNDBweCAtMTIw
cHh9Lmljb24tbWFnbmV0e2JhY2tncm91bmQtcG9zaXRpb246LTI2NHB4IC0xMjBweH0uaWNvbi1j
aGV2cm9uLXVwe2JhY2tncm91bmQtcG9zaXRpb246LTI4OHB4IC0xMjBweH0uaWNvbi1jaGV2cm9u
LWRvd257YmFja2dyb3VuZC1wb3NpdGlvbjotMzEzcHggLTExOXB4fS5pY29uLXJldHdlZXR7YmFj
a2dyb3VuZC1wb3NpdGlvbjotMzM2cHggLTEyMHB4fS5pY29uLXNob3BwaW5nLWNhcnR7YmFja2dy
b3VuZC1wb3NpdGlvbjotMzYwcHggLTEyMHB4fS5pY29uLWZvbGRlci1jbG9zZXtiYWNrZ3JvdW5k
LXBvc2l0aW9uOi0zODRweCAtMTIwcHh9Lmljb24tZm9sZGVyLW9wZW57d2lkdGg6MTZweDtiYWNr
Z3JvdW5kLXBvc2l0aW9uOi00MDhweCAtMTIwcHh9Lmljb24tcmVzaXplLXZlcnRpY2Fse2JhY2tn
cm91bmQtcG9zaXRpb246LTQzMnB4IC0xMTlweH0uaWNvbi1yZXNpemUtaG9yaXpvbnRhbHtiYWNr
Z3JvdW5kLXBvc2l0aW9uOi00NTZweCAtMTE4cHh9Lmljb24taGRke2JhY2tncm91bmQtcG9zaXRp
b246MCAtMTQ0cHh9Lmljb24tYnVsbGhvcm57YmFja2dyb3VuZC1wb3NpdGlvbjotMjRweCAtMTQ0
cHh9Lmljb24tYmVsbHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00OHB4IC0xNDRweH0uaWNvbi1jZXJ0
aWZpY2F0ZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi03MnB4IC0xNDRweH0uaWNvbi10aHVtYnMtdXB7
YmFja2dyb3VuZC1wb3NpdGlvbjotOTZweCAtMTQ0cHh9Lmljb24tdGh1bWJzLWRvd257YmFja2dy
b3VuZC1wb3NpdGlvbjotMTIwcHggLTE0NHB4fS5pY29uLWhhbmQtcmlnaHR7YmFja2dyb3VuZC1w
b3NpdGlvbjotMTQ0cHggLTE0NHB4fS5pY29uLWhhbmQtbGVmdHtiYWNrZ3JvdW5kLXBvc2l0aW9u
Oi0xNjhweCAtMTQ0cHh9Lmljb24taGFuZC11cHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xOTJweCAt
MTQ0cHh9Lmljb24taGFuZC1kb3due2JhY2tncm91bmQtcG9zaXRpb246LTIxNnB4IC0xNDRweH0u
aWNvbi1jaXJjbGUtYXJyb3ctcmlnaHR7YmFja2dyb3VuZC1wb3NpdGlvbjotMjQwcHggLTE0NHB4
fS5pY29uLWNpcmNsZS1hcnJvdy1sZWZ0e2JhY2tncm91bmQtcG9zaXRpb246LTI2NHB4IC0xNDRw
eH0uaWNvbi1jaXJjbGUtYXJyb3ctdXB7YmFja2dyb3VuZC1wb3NpdGlvbjotMjg4cHggLTE0NHB4
fS5pY29uLWNpcmNsZS1hcnJvdy1kb3due2JhY2tncm91bmQtcG9zaXRpb246LTMxMnB4IC0xNDRw
eH0uaWNvbi1nbG9iZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMzZweCAtMTQ0cHh9Lmljb24td3Jl
bmNoe2JhY2tncm91bmQtcG9zaXRpb246LTM2MHB4IC0xNDRweH0uaWNvbi10YXNrc3tiYWNrZ3Jv
dW5kLXBvc2l0aW9uOi0zODRweCAtMTQ0cHh9Lmljb24tZmlsdGVye2JhY2tncm91bmQtcG9zaXRp
b246LTQwOHB4IC0xNDRweH0uaWNvbi1icmllZmNhc2V7YmFja2dyb3VuZC1wb3NpdGlvbjotNDMy
cHggLTE0NHB4fS5pY29uLWZ1bGxzY3JlZW57YmFja2dyb3VuZC1wb3NpdGlvbjotNDU2cHggLTE0
NHB4fS5kcm9wdXAsLmRyb3Bkb3due3Bvc2l0aW9uOnJlbGF0aXZlfS5kcm9wZG93bi10b2dnbGV7
Km1hcmdpbi1ib3R0b206LTNweH0uZHJvcGRvd24tdG9nZ2xlOmFjdGl2ZSwub3BlbiAuZHJvcGRv
d24tdG9nZ2xle291dGxpbmU6MH0uY2FyZXR7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6MDto
ZWlnaHQ6MDt2ZXJ0aWNhbC1hbGlnbjp0b3A7Ym9yZGVyLXRvcDo0cHggc29saWQgIzAwMDtib3Jk
ZXItcmlnaHQ6NHB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1sZWZ0OjRweCBzb2xpZCB0cmFu
c3BhcmVudDtjb250ZW50OiIifS5kcm9wZG93biAuY2FyZXR7bWFyZ2luLXRvcDo4cHg7bWFyZ2lu
LWxlZnQ6MnB4fS5kcm9wZG93bi1tZW51e3Bvc2l0aW9uOmFic29sdXRlO3RvcDoxMDAlO2xlZnQ6
MDt6LWluZGV4OjEwMDA7ZGlzcGxheTpub25lO2Zsb2F0OmxlZnQ7bWluLXdpZHRoOjE2MHB4O3Bh
ZGRpbmc6NXB4IDA7bWFyZ2luOjJweCAwIDA7bGlzdC1zdHlsZTpub25lO2JhY2tncm91bmQtY29s
b3I6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNjY2M7Ym9yZGVyOjFweCBzb2xpZCByZ2JhKDAsMCww
LDAuMik7KmJvcmRlci1yaWdodC13aWR0aDoycHg7KmJvcmRlci1ib3R0b20td2lkdGg6MnB4Oy13
ZWJraXQtYm9yZGVyLXJhZGl1czo2cHg7LW1vei1ib3JkZXItcmFkaXVzOjZweDtib3JkZXItcmFk
aXVzOjZweDstd2Via2l0LWJveC1zaGFkb3c6MCA1cHggMTBweCByZ2JhKDAsMCwwLDAuMik7LW1v
ei1ib3gtc2hhZG93OjAgNXB4IDEwcHggcmdiYSgwLDAsMCwwLjIpO2JveC1zaGFkb3c6MCA1cHgg
MTBweCByZ2JhKDAsMCwwLDAuMik7LXdlYmtpdC1iYWNrZ3JvdW5kLWNsaXA6cGFkZGluZy1ib3g7
LW1vei1iYWNrZ3JvdW5kLWNsaXA6cGFkZGluZztiYWNrZ3JvdW5kLWNsaXA6cGFkZGluZy1ib3h9
LmRyb3Bkb3duLW1lbnUucHVsbC1yaWdodHtyaWdodDowO2xlZnQ6YXV0b30uZHJvcGRvd24tbWVu
dSAuZGl2aWRlcnsqd2lkdGg6MTAwJTtoZWlnaHQ6MXB4O21hcmdpbjo5cHggMXB4OyptYXJnaW46
LTVweCAwIDVweDtvdmVyZmxvdzpoaWRkZW47YmFja2dyb3VuZC1jb2xvcjojZTVlNWU1O2JvcmRl
ci1ib3R0b206MXB4IHNvbGlkICNmZmZ9LmRyb3Bkb3duLW1lbnUgbGk+YXtkaXNwbGF5OmJsb2Nr
O3BhZGRpbmc6M3B4IDIwcHg7Y2xlYXI6Ym90aDtmb250LXdlaWdodDpub3JtYWw7bGluZS1oZWln
aHQ6MjBweDtjb2xvcjojMzMzO3doaXRlLXNwYWNlOm5vd3JhcH0uZHJvcGRvd24tbWVudSBsaT5h
OmhvdmVyLC5kcm9wZG93bi1tZW51IGxpPmE6Zm9jdXMsLmRyb3Bkb3duLXN1Ym1lbnU6aG92ZXI+
YXtjb2xvcjojZmZmO3RleHQtZGVjb3JhdGlvbjpub25lO2JhY2tncm91bmQtY29sb3I6IzAwODFj
MjtiYWNrZ3JvdW5kLWltYWdlOi1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwjMDhjLCMwMDc3YjMp
O2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsMCAwLDAgMTAwJSxmcm9t
KCMwOGMpLHRvKCMwMDc3YjMpKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRp
ZW50KHRvcCwjMDhjLCMwMDc3YjMpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50
KHRvcCwjMDhjLCMwMDc3YjMpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJv
dHRvbSwjMDhjLCMwMDc3YjMpO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14O2ZpbHRlcjpwcm9n
aWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI2Zm
MDA4OGNjJyxlbmRDb2xvcnN0cj0nI2ZmMDA3N2IzJyxHcmFkaWVudFR5cGU9MCl9LmRyb3Bkb3du
LW1lbnUgLmFjdGl2ZT5hLC5kcm9wZG93bi1tZW51IC5hY3RpdmU+YTpob3Zlcntjb2xvcjojZmZm
O3RleHQtZGVjb3JhdGlvbjpub25lO2JhY2tncm91bmQtY29sb3I6IzAwODFjMjtiYWNrZ3JvdW5k
LWltYWdlOi1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwjMDhjLCMwMDc3YjMpO2JhY2tncm91bmQt
aW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsMCAwLDAgMTAwJSxmcm9tKCMwOGMpLHRvKCMw
MDc3YjMpKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwjMDhj
LCMwMDc3YjMpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KHRvcCwjMDhjLCMw
MDc3YjMpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwjMDhjLCMw
MDc3YjMpO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14O291dGxpbmU6MDtmaWx0ZXI6cHJvZ2lk
OkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyNmZjAw
ODhjYycsZW5kQ29sb3JzdHI9JyNmZjAwNzdiMycsR3JhZGllbnRUeXBlPTApfS5kcm9wZG93bi1t
ZW51IC5kaXNhYmxlZD5hLC5kcm9wZG93bi1tZW51IC5kaXNhYmxlZD5hOmhvdmVye2NvbG9yOiM5
OTl9LmRyb3Bkb3duLW1lbnUgLmRpc2FibGVkPmE6aG92ZXJ7dGV4dC1kZWNvcmF0aW9uOm5vbmU7
Y3Vyc29yOmRlZmF1bHQ7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtiYWNrZ3JvdW5kLWlt
YWdlOm5vbmU7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVu
dChlbmFibGVkPWZhbHNlKX0ub3Blbnsqei1pbmRleDoxMDAwfS5vcGVuPi5kcm9wZG93bi1tZW51
e2Rpc3BsYXk6YmxvY2t9LnB1bGwtcmlnaHQ+LmRyb3Bkb3duLW1lbnV7cmlnaHQ6MDtsZWZ0OmF1
dG99LmRyb3B1cCAuY2FyZXQsLm5hdmJhci1maXhlZC1ib3R0b20gLmRyb3Bkb3duIC5jYXJldHti
b3JkZXItdG9wOjA7Ym9yZGVyLWJvdHRvbTo0cHggc29saWQgIzAwMDtjb250ZW50OiIifS5kcm9w
dXAgLmRyb3Bkb3duLW1lbnUsLm5hdmJhci1maXhlZC1ib3R0b20gLmRyb3Bkb3duIC5kcm9wZG93
bi1tZW51e3RvcDphdXRvO2JvdHRvbToxMDAlO21hcmdpbi1ib3R0b206MXB4fS5kcm9wZG93bi1z
dWJtZW51e3Bvc2l0aW9uOnJlbGF0aXZlfS5kcm9wZG93bi1zdWJtZW51Pi5kcm9wZG93bi1tZW51
e3RvcDowO2xlZnQ6MTAwJTttYXJnaW4tdG9wOi02cHg7bWFyZ2luLWxlZnQ6LTFweDstd2Via2l0
LWJvcmRlci1yYWRpdXM6MCA2cHggNnB4IDZweDstbW96LWJvcmRlci1yYWRpdXM6MCA2cHggNnB4
IDZweDtib3JkZXItcmFkaXVzOjAgNnB4IDZweCA2cHh9LmRyb3Bkb3duLXN1Ym1lbnU6aG92ZXI+
LmRyb3Bkb3duLW1lbnV7ZGlzcGxheTpibG9ja30uZHJvcHVwIC5kcm9wZG93bi1zdWJtZW51Pi5k
cm9wZG93bi1tZW51e3RvcDphdXRvO2JvdHRvbTowO21hcmdpbi10b3A6MDttYXJnaW4tYm90dG9t
Oi0ycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjVweCA1cHggNXB4IDA7LW1vei1ib3JkZXItcmFk
aXVzOjVweCA1cHggNXB4IDA7Ym9yZGVyLXJhZGl1czo1cHggNXB4IDVweCAwfS5kcm9wZG93bi1z
dWJtZW51PmE6YWZ0ZXJ7ZGlzcGxheTpibG9jaztmbG9hdDpyaWdodDt3aWR0aDowO2hlaWdodDow
O21hcmdpbi10b3A6NXB4O21hcmdpbi1yaWdodDotMTBweDtib3JkZXItY29sb3I6dHJhbnNwYXJl
bnQ7Ym9yZGVyLWxlZnQtY29sb3I6I2NjYztib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXdpZHRo
OjVweCAwIDVweCA1cHg7Y29udGVudDoiICJ9LmRyb3Bkb3duLXN1Ym1lbnU6aG92ZXI+YTphZnRl
cntib3JkZXItbGVmdC1jb2xvcjojZmZmfS5kcm9wZG93bi1zdWJtZW51LnB1bGwtbGVmdHtmbG9h
dDpub25lfS5kcm9wZG93bi1zdWJtZW51LnB1bGwtbGVmdD4uZHJvcGRvd24tbWVudXtsZWZ0Oi0x
MDAlO21hcmdpbi1sZWZ0OjEwcHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjZweCAwIDZweCA2cHg7
LW1vei1ib3JkZXItcmFkaXVzOjZweCAwIDZweCA2cHg7Ym9yZGVyLXJhZGl1czo2cHggMCA2cHgg
NnB4fS5kcm9wZG93biAuZHJvcGRvd24tbWVudSAubmF2LWhlYWRlcntwYWRkaW5nLXJpZ2h0OjIw
cHg7cGFkZGluZy1sZWZ0OjIwcHh9LnR5cGVhaGVhZHt6LWluZGV4OjEwNTE7bWFyZ2luLXRvcDoy
cHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4O2JvcmRl
ci1yYWRpdXM6NHB4fS53ZWxse21pbi1oZWlnaHQ6MjBweDtwYWRkaW5nOjE5cHg7bWFyZ2luLWJv
dHRvbToyMHB4O2JhY2tncm91bmQtY29sb3I6I2Y1ZjVmNTtib3JkZXI6MXB4IHNvbGlkICNlM2Uz
ZTM7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4O2JvcmRl
ci1yYWRpdXM6NHB4Oy13ZWJraXQtYm94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAs
MCwwLjA1KTstbW96LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4wNSk7
Ym94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA1KX0ud2VsbCBibG9ja3F1
b3Rle2JvcmRlci1jb2xvcjojZGRkO2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLDAuMTUpfS53ZWxs
LWxhcmdle3BhZGRpbmc6MjRweDstd2Via2l0LWJvcmRlci1yYWRpdXM6NnB4Oy1tb3otYm9yZGVy
LXJhZGl1czo2cHg7Ym9yZGVyLXJhZGl1czo2cHh9LndlbGwtc21hbGx7cGFkZGluZzo5cHg7LXdl
YmtpdC1ib3JkZXItcmFkaXVzOjNweDstbW96LWJvcmRlci1yYWRpdXM6M3B4O2JvcmRlci1yYWRp
dXM6M3B4fS5mYWRle29wYWNpdHk6MDstd2Via2l0LXRyYW5zaXRpb246b3BhY2l0eSAuMTVzIGxp
bmVhcjstbW96LXRyYW5zaXRpb246b3BhY2l0eSAuMTVzIGxpbmVhcjstby10cmFuc2l0aW9uOm9w
YWNpdHkgLjE1cyBsaW5lYXI7dHJhbnNpdGlvbjpvcGFjaXR5IC4xNXMgbGluZWFyfS5mYWRlLmlu
e29wYWNpdHk6MX0uY29sbGFwc2V7cG9zaXRpb246cmVsYXRpdmU7aGVpZ2h0OjA7b3ZlcmZsb3c6
aGlkZGVuOy13ZWJraXQtdHJhbnNpdGlvbjpoZWlnaHQgLjM1cyBlYXNlOy1tb3otdHJhbnNpdGlv
bjpoZWlnaHQgLjM1cyBlYXNlOy1vLXRyYW5zaXRpb246aGVpZ2h0IC4zNXMgZWFzZTt0cmFuc2l0
aW9uOmhlaWdodCAuMzVzIGVhc2V9LmNvbGxhcHNlLmlue2hlaWdodDphdXRvfS5jbG9zZXtmbG9h
dDpyaWdodDtmb250LXNpemU6MjBweDtmb250LXdlaWdodDpib2xkO2xpbmUtaGVpZ2h0OjIwcHg7
Y29sb3I6IzAwMDt0ZXh0LXNoYWRvdzowIDFweCAwICNmZmY7b3BhY2l0eTouMjtmaWx0ZXI6YWxw
aGEob3BhY2l0eT0yMCl9LmNsb3NlOmhvdmVye2NvbG9yOiMwMDA7dGV4dC1kZWNvcmF0aW9uOm5v
bmU7Y3Vyc29yOnBvaW50ZXI7b3BhY2l0eTouNDtmaWx0ZXI6YWxwaGEob3BhY2l0eT00MCl9YnV0
dG9uLmNsb3Nle3BhZGRpbmc6MDtjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50
O2JvcmRlcjowOy13ZWJraXQtYXBwZWFyYW5jZTpub25lfS5idG57ZGlzcGxheTppbmxpbmUtYmxv
Y2s7KmRpc3BsYXk6aW5saW5lO3BhZGRpbmc6NHB4IDEycHg7bWFyZ2luLWJvdHRvbTowOyptYXJn
aW4tbGVmdDouM2VtO2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjIwcHg7Y29sb3I6IzMzMzt0
ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LXNoYWRvdzowIDFweCAxcHggcmdiYSgyNTUsMjU1LDI1NSww
Ljc1KTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7Y3Vyc29yOnBvaW50ZXI7YmFja2dyb3VuZC1jb2xv
cjojZjVmNWY1OypiYWNrZ3JvdW5kLWNvbG9yOiNlNmU2ZTY7YmFja2dyb3VuZC1pbWFnZTotbW96
LWxpbmVhci1ncmFkaWVudCh0b3AsI2ZmZiwjZTZlNmU2KTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJr
aXQtZ3JhZGllbnQobGluZWFyLDAgMCwwIDEwMCUsZnJvbSgjZmZmKSx0bygjZTZlNmU2KSk7YmFj
a2dyb3VuZC1pbWFnZTotd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AsI2ZmZiwjZTZlNmU2KTti
YWNrZ3JvdW5kLWltYWdlOi1vLWxpbmVhci1ncmFkaWVudCh0b3AsI2ZmZiwjZTZlNmU2KTtiYWNr
Z3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sI2ZmZiwjZTZlNmU2KTtiYWNr
Z3JvdW5kLXJlcGVhdDpyZXBlYXQteDtib3JkZXI6MXB4IHNvbGlkICNiYmI7KmJvcmRlcjowO2Jv
cmRlci1jb2xvcjojZTZlNmU2ICNlNmU2ZTYgI2JmYmZiZjtib3JkZXItY29sb3I6cmdiYSgwLDAs
MCwwLjEpIHJnYmEoMCwwLDAsMC4xKSByZ2JhKDAsMCwwLDAuMjUpO2JvcmRlci1ib3R0b20tY29s
b3I6I2EyYTJhMjstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0
cHg7Ym9yZGVyLXJhZGl1czo0cHg7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jv
c29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmZmZmZmZmYnLGVuZENvbG9yc3RyPScjZmZl
NmU2ZTYnLEdyYWRpZW50VHlwZT0wKTtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWlj
cm9zb2Z0LmdyYWRpZW50KGVuYWJsZWQ9ZmFsc2UpOyp6b29tOjE7LXdlYmtpdC1ib3gtc2hhZG93
Omluc2V0IDAgMXB4IDAgcmdiYSgyNTUsMjU1LDI1NSwwLjIpLDAgMXB4IDJweCByZ2JhKDAsMCww
LDAuMDUpOy1tb3otYm94LXNoYWRvdzppbnNldCAwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4y
KSwwIDFweCAycHggcmdiYSgwLDAsMCwwLjA1KTtib3gtc2hhZG93Omluc2V0IDAgMXB4IDAgcmdi
YSgyNTUsMjU1LDI1NSwwLjIpLDAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMDUpfS5idG46aG92ZXIs
LmJ0bjphY3RpdmUsLmJ0bi5hY3RpdmUsLmJ0bi5kaXNhYmxlZCwuYnRuW2Rpc2FibGVkXXtjb2xv
cjojMzMzO2JhY2tncm91bmQtY29sb3I6I2U2ZTZlNjsqYmFja2dyb3VuZC1jb2xvcjojZDlkOWQ5
fS5idG46YWN0aXZlLC5idG4uYWN0aXZle2JhY2tncm91bmQtY29sb3I6I2NjYyBcOX0uYnRuOmZp
cnN0LWNoaWxkeyptYXJnaW4tbGVmdDowfS5idG46aG92ZXJ7Y29sb3I6IzMzMzt0ZXh0LWRlY29y
YXRpb246bm9uZTtiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTE1cHg7LXdlYmtpdC10cmFuc2l0aW9u
OmJhY2tncm91bmQtcG9zaXRpb24gLjFzIGxpbmVhcjstbW96LXRyYW5zaXRpb246YmFja2dyb3Vu
ZC1wb3NpdGlvbiAuMXMgbGluZWFyOy1vLXRyYW5zaXRpb246YmFja2dyb3VuZC1wb3NpdGlvbiAu
MXMgbGluZWFyO3RyYW5zaXRpb246YmFja2dyb3VuZC1wb3NpdGlvbiAuMXMgbGluZWFyfS5idG46
Zm9jdXN7b3V0bGluZTp0aGluIGRvdHRlZCAjMzMzO291dGxpbmU6NXB4IGF1dG8gLXdlYmtpdC1m
b2N1cy1yaW5nLWNvbG9yO291dGxpbmUtb2Zmc2V0Oi0ycHh9LmJ0bi5hY3RpdmUsLmJ0bjphY3Rp
dmV7YmFja2dyb3VuZC1pbWFnZTpub25lO291dGxpbmU6MDstd2Via2l0LWJveC1zaGFkb3c6aW5z
ZXQgMCAycHggNHB4IHJnYmEoMCwwLDAsMC4xNSksMCAxcHggMnB4IHJnYmEoMCwwLDAsMC4wNSk7
LW1vei1ib3gtc2hhZG93Omluc2V0IDAgMnB4IDRweCByZ2JhKDAsMCwwLDAuMTUpLDAgMXB4IDJw
eCByZ2JhKDAsMCwwLDAuMDUpO2JveC1zaGFkb3c6aW5zZXQgMCAycHggNHB4IHJnYmEoMCwwLDAs
MC4xNSksMCAxcHggMnB4IHJnYmEoMCwwLDAsMC4wNSl9LmJ0bi5kaXNhYmxlZCwuYnRuW2Rpc2Fi
bGVkXXtjdXJzb3I6ZGVmYXVsdDtiYWNrZ3JvdW5kLWltYWdlOm5vbmU7b3BhY2l0eTouNjU7Zmls
dGVyOmFscGhhKG9wYWNpdHk9NjUpOy13ZWJraXQtYm94LXNoYWRvdzpub25lOy1tb3otYm94LXNo
YWRvdzpub25lO2JveC1zaGFkb3c6bm9uZX0uYnRuLWxhcmdle3BhZGRpbmc6MTFweCAxOXB4O2Zv
bnQtc2l6ZToxNy41cHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjZweDstbW96LWJvcmRlci1yYWRp
dXM6NnB4O2JvcmRlci1yYWRpdXM6NnB4fS5idG4tbGFyZ2UgW2NsYXNzXj0iaWNvbi0iXSwuYnRu
LWxhcmdlIFtjbGFzcyo9IiBpY29uLSJde21hcmdpbi10b3A6NHB4fS5idG4tc21hbGx7cGFkZGlu
ZzoycHggMTBweDtmb250LXNpemU6MTEuOXB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czozcHg7LW1v
ei1ib3JkZXItcmFkaXVzOjNweDtib3JkZXItcmFkaXVzOjNweH0uYnRuLXNtYWxsIFtjbGFzc149
Imljb24tIl0sLmJ0bi1zbWFsbCBbY2xhc3MqPSIgaWNvbi0iXXttYXJnaW4tdG9wOjB9LmJ0bi1t
aW5pIFtjbGFzc149Imljb24tIl0sLmJ0bi1taW5pIFtjbGFzcyo9IiBpY29uLSJde21hcmdpbi10
b3A6LTFweH0uYnRuLW1pbml7cGFkZGluZzowIDZweDtmb250LXNpemU6MTAuNXB4Oy13ZWJraXQt
Ym9yZGVyLXJhZGl1czozcHg7LW1vei1ib3JkZXItcmFkaXVzOjNweDtib3JkZXItcmFkaXVzOjNw
eH0uYnRuLWJsb2Nre2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJTtwYWRkaW5nLXJpZ2h0OjA7cGFk
ZGluZy1sZWZ0OjA7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7LW1vei1ib3gtc2l6aW5n
OmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94fS5idG4tYmxvY2srLmJ0bi1ibG9ja3tt
YXJnaW4tdG9wOjVweH1pbnB1dFt0eXBlPSJzdWJtaXQiXS5idG4tYmxvY2ssaW5wdXRbdHlwZT0i
cmVzZXQiXS5idG4tYmxvY2ssaW5wdXRbdHlwZT0iYnV0dG9uIl0uYnRuLWJsb2Nre3dpZHRoOjEw
MCV9LmJ0bi1wcmltYXJ5LmFjdGl2ZSwuYnRuLXdhcm5pbmcuYWN0aXZlLC5idG4tZGFuZ2VyLmFj
dGl2ZSwuYnRuLXN1Y2Nlc3MuYWN0aXZlLC5idG4taW5mby5hY3RpdmUsLmJ0bi1pbnZlcnNlLmFj
dGl2ZXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LDAuNzUpfS5idG57Ym9yZGVyLWNvbG9yOiNjNWM1
YzU7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsMC4xNSkgcmdiYSgwLDAsMCwwLjE1KSByZ2JhKDAs
MCwwLDAuMjUpfS5idG4tcHJpbWFyeXtjb2xvcjojZmZmO3RleHQtc2hhZG93OjAgLTFweCAwIHJn
YmEoMCwwLDAsMC4yNSk7YmFja2dyb3VuZC1jb2xvcjojMDA2ZGNjOypiYWNrZ3JvdW5kLWNvbG9y
OiMwNGM7YmFja2dyb3VuZC1pbWFnZTotbW96LWxpbmVhci1ncmFkaWVudCh0b3AsIzA4YywjMDRj
KTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtZ3JhZGllbnQobGluZWFyLDAgMCwwIDEwMCUsZnJv
bSgjMDhjKSx0bygjMDRjKSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWxpbmVhci1ncmFkaWVu
dCh0b3AsIzA4YywjMDRjKTtiYWNrZ3JvdW5kLWltYWdlOi1vLWxpbmVhci1ncmFkaWVudCh0b3As
IzA4YywjMDRjKTtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIzA4
YywjMDRjKTtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteDtib3JkZXItY29sb3I6IzA0YyAjMDRj
ICMwMDJhODA7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsMC4xKSByZ2JhKDAsMCwwLDAuMSkgcmdi
YSgwLDAsMCwwLjI1KTtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0Lmdy
YWRpZW50KHN0YXJ0Q29sb3JzdHI9JyNmZjAwODhjYycsZW5kQ29sb3JzdHI9JyNmZjAwNDRjYycs
R3JhZGllbnRUeXBlPTApO2ZpbHRlcjpwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQu
Z3JhZGllbnQoZW5hYmxlZD1mYWxzZSl9LmJ0bi1wcmltYXJ5OmhvdmVyLC5idG4tcHJpbWFyeTph
Y3RpdmUsLmJ0bi1wcmltYXJ5LmFjdGl2ZSwuYnRuLXByaW1hcnkuZGlzYWJsZWQsLmJ0bi1wcmlt
YXJ5W2Rpc2FibGVkXXtjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6IzA0YzsqYmFja2dyb3Vu
ZC1jb2xvcjojMDAzYmIzfS5idG4tcHJpbWFyeTphY3RpdmUsLmJ0bi1wcmltYXJ5LmFjdGl2ZXti
YWNrZ3JvdW5kLWNvbG9yOiMwMzkgXDl9LmJ0bi13YXJuaW5ne2NvbG9yOiNmZmY7dGV4dC1zaGFk
b3c6MCAtMXB4IDAgcmdiYSgwLDAsMCwwLjI1KTtiYWNrZ3JvdW5kLWNvbG9yOiNmYWE3MzI7KmJh
Y2tncm91bmQtY29sb3I6I2Y4OTQwNjtiYWNrZ3JvdW5kLWltYWdlOi1tb3otbGluZWFyLWdyYWRp
ZW50KHRvcCwjZmJiNDUwLCNmODk0MDYpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVu
dChsaW5lYXIsMCAwLDAgMTAwJSxmcm9tKCNmYmI0NTApLHRvKCNmODk0MDYpKTtiYWNrZ3JvdW5k
LWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwjZmJiNDUwLCNmODk0MDYpO2JhY2tn
cm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KHRvcCwjZmJiNDUwLCNmODk0MDYpO2JhY2tn
cm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwjZmJiNDUwLCNmODk0MDYpO2Jh
Y2tncm91bmQtcmVwZWF0OnJlcGVhdC14O2JvcmRlci1jb2xvcjojZjg5NDA2ICNmODk0MDYgI2Fk
NjcwNDtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwwLjEpIHJnYmEoMCwwLDAsMC4xKSByZ2JhKDAs
MCwwLDAuMjUpO2ZpbHRlcjpwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGll
bnQoc3RhcnRDb2xvcnN0cj0nI2ZmZmJiNDUwJyxlbmRDb2xvcnN0cj0nI2ZmZjg5NDA2JyxHcmFk
aWVudFR5cGU9MCk7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFk
aWVudChlbmFibGVkPWZhbHNlKX0uYnRuLXdhcm5pbmc6aG92ZXIsLmJ0bi13YXJuaW5nOmFjdGl2
ZSwuYnRuLXdhcm5pbmcuYWN0aXZlLC5idG4td2FybmluZy5kaXNhYmxlZCwuYnRuLXdhcm5pbmdb
ZGlzYWJsZWRde2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojZjg5NDA2OypiYWNrZ3JvdW5k
LWNvbG9yOiNkZjg1MDV9LmJ0bi13YXJuaW5nOmFjdGl2ZSwuYnRuLXdhcm5pbmcuYWN0aXZle2Jh
Y2tncm91bmQtY29sb3I6I2M2NzYwNSBcOX0uYnRuLWRhbmdlcntjb2xvcjojZmZmO3RleHQtc2hh
ZG93OjAgLTFweCAwIHJnYmEoMCwwLDAsMC4yNSk7YmFja2dyb3VuZC1jb2xvcjojZGE0ZjQ5Oypi
YWNrZ3JvdW5kLWNvbG9yOiNiZDM2MmY7YmFja2dyb3VuZC1pbWFnZTotbW96LWxpbmVhci1ncmFk
aWVudCh0b3AsI2VlNWY1YiwjYmQzNjJmKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtZ3JhZGll
bnQobGluZWFyLDAgMCwwIDEwMCUsZnJvbSgjZWU1ZjViKSx0bygjYmQzNjJmKSk7YmFja2dyb3Vu
ZC1pbWFnZTotd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AsI2VlNWY1YiwjYmQzNjJmKTtiYWNr
Z3JvdW5kLWltYWdlOi1vLWxpbmVhci1ncmFkaWVudCh0b3AsI2VlNWY1YiwjYmQzNjJmKTtiYWNr
Z3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sI2VlNWY1YiwjYmQzNjJmKTti
YWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteDtib3JkZXItY29sb3I6I2JkMzYyZiAjYmQzNjJmICM4
MDI0MjA7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsMC4xKSByZ2JhKDAsMCwwLDAuMSkgcmdiYSgw
LDAsMCwwLjI1KTtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRp
ZW50KHN0YXJ0Q29sb3JzdHI9JyNmZmVlNWY1YicsZW5kQ29sb3JzdHI9JyNmZmJkMzYyZicsR3Jh
ZGllbnRUeXBlPTApO2ZpbHRlcjpwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3Jh
ZGllbnQoZW5hYmxlZD1mYWxzZSl9LmJ0bi1kYW5nZXI6aG92ZXIsLmJ0bi1kYW5nZXI6YWN0aXZl
LC5idG4tZGFuZ2VyLmFjdGl2ZSwuYnRuLWRhbmdlci5kaXNhYmxlZCwuYnRuLWRhbmdlcltkaXNh
YmxlZF17Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiNiZDM2MmY7KmJhY2tncm91bmQtY29s
b3I6I2E5MzAyYX0uYnRuLWRhbmdlcjphY3RpdmUsLmJ0bi1kYW5nZXIuYWN0aXZle2JhY2tncm91
bmQtY29sb3I6Izk0MmEyNSBcOX0uYnRuLXN1Y2Nlc3N7Y29sb3I6I2ZmZjt0ZXh0LXNoYWRvdzow
IC0xcHggMCByZ2JhKDAsMCwwLDAuMjUpO2JhY2tncm91bmQtY29sb3I6IzViYjc1YjsqYmFja2dy
b3VuZC1jb2xvcjojNTFhMzUxO2JhY2tncm91bmQtaW1hZ2U6LW1vei1saW5lYXItZ3JhZGllbnQo
dG9wLCM2MmM0NjIsIzUxYTM1MSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxp
bmVhciwwIDAsMCAxMDAlLGZyb20oIzYyYzQ2MiksdG8oIzUxYTM1MSkpO2JhY2tncm91bmQtaW1h
Z2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCM2MmM0NjIsIzUxYTM1MSk7YmFja2dyb3Vu
ZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQodG9wLCM2MmM0NjIsIzUxYTM1MSk7YmFja2dyb3Vu
ZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCM2MmM0NjIsIzUxYTM1MSk7YmFja2dy
b3VuZC1yZXBlYXQ6cmVwZWF0LXg7Ym9yZGVyLWNvbG9yOiM1MWEzNTEgIzUxYTM1MSAjMzg3MDM4
O2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLDAuMSkgcmdiYSgwLDAsMCwwLjEpIHJnYmEoMCwwLDAs
MC4yNSk7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChz
dGFydENvbG9yc3RyPScjZmY2MmM0NjInLGVuZENvbG9yc3RyPScjZmY1MWEzNTEnLEdyYWRpZW50
VHlwZT0wKTtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50
KGVuYWJsZWQ9ZmFsc2UpfS5idG4tc3VjY2Vzczpob3ZlciwuYnRuLXN1Y2Nlc3M6YWN0aXZlLC5i
dG4tc3VjY2Vzcy5hY3RpdmUsLmJ0bi1zdWNjZXNzLmRpc2FibGVkLC5idG4tc3VjY2Vzc1tkaXNh
YmxlZF17Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiM1MWEzNTE7KmJhY2tncm91bmQtY29s
b3I6IzQ5OTI0OX0uYnRuLXN1Y2Nlc3M6YWN0aXZlLC5idG4tc3VjY2Vzcy5hY3RpdmV7YmFja2dy
b3VuZC1jb2xvcjojNDA4MTQwIFw5fS5idG4taW5mb3tjb2xvcjojZmZmO3RleHQtc2hhZG93OjAg
LTFweCAwIHJnYmEoMCwwLDAsMC4yNSk7YmFja2dyb3VuZC1jb2xvcjojNDlhZmNkOypiYWNrZ3Jv
dW5kLWNvbG9yOiMyZjk2YjQ7YmFja2dyb3VuZC1pbWFnZTotbW96LWxpbmVhci1ncmFkaWVudCh0
b3AsIzViYzBkZSwjMmY5NmI0KTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtZ3JhZGllbnQobGlu
ZWFyLDAgMCwwIDEwMCUsZnJvbSgjNWJjMGRlKSx0bygjMmY5NmI0KSk7YmFja2dyb3VuZC1pbWFn
ZTotd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AsIzViYzBkZSwjMmY5NmI0KTtiYWNrZ3JvdW5k
LWltYWdlOi1vLWxpbmVhci1ncmFkaWVudCh0b3AsIzViYzBkZSwjMmY5NmI0KTtiYWNrZ3JvdW5k
LWltYWdlOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIzViYzBkZSwjMmY5NmI0KTtiYWNrZ3Jv
dW5kLXJlcGVhdDpyZXBlYXQteDtib3JkZXItY29sb3I6IzJmOTZiNCAjMmY5NmI0ICMxZjYzNzc7
Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsMC4xKSByZ2JhKDAsMCwwLDAuMSkgcmdiYSgwLDAsMCww
LjI1KTtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0
YXJ0Q29sb3JzdHI9JyNmZjViYzBkZScsZW5kQ29sb3JzdHI9JyNmZjJmOTZiNCcsR3JhZGllbnRU
eXBlPTApO2ZpbHRlcjpwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQo
ZW5hYmxlZD1mYWxzZSl9LmJ0bi1pbmZvOmhvdmVyLC5idG4taW5mbzphY3RpdmUsLmJ0bi1pbmZv
LmFjdGl2ZSwuYnRuLWluZm8uZGlzYWJsZWQsLmJ0bi1pbmZvW2Rpc2FibGVkXXtjb2xvcjojZmZm
O2JhY2tncm91bmQtY29sb3I6IzJmOTZiNDsqYmFja2dyb3VuZC1jb2xvcjojMmE4NWEwfS5idG4t
aW5mbzphY3RpdmUsLmJ0bi1pbmZvLmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOiMyNDc0OGMgXDl9
LmJ0bi1pbnZlcnNle2NvbG9yOiNmZmY7dGV4dC1zaGFkb3c6MCAtMXB4IDAgcmdiYSgwLDAsMCww
LjI1KTtiYWNrZ3JvdW5kLWNvbG9yOiMzNjM2MzY7KmJhY2tncm91bmQtY29sb3I6IzIyMjtiYWNr
Z3JvdW5kLWltYWdlOi1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwjNDQ0LCMyMjIpO2JhY2tncm91
bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsMCAwLDAgMTAwJSxmcm9tKCM0NDQpLHRv
KCMyMjIpKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwjNDQ0
LCMyMjIpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KHRvcCwjNDQ0LCMyMjIp
O2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwjNDQ0LCMyMjIpO2Jh
Y2tncm91bmQtcmVwZWF0OnJlcGVhdC14O2JvcmRlci1jb2xvcjojMjIyICMyMjIgIzAwMDtib3Jk
ZXItY29sb3I6cmdiYSgwLDAsMCwwLjEpIHJnYmEoMCwwLDAsMC4xKSByZ2JhKDAsMCwwLDAuMjUp
O2ZpbHRlcjpwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRD
b2xvcnN0cj0nI2ZmNDQ0NDQ0JyxlbmRDb2xvcnN0cj0nI2ZmMjIyMjIyJyxHcmFkaWVudFR5cGU9
MCk7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChlbmFi
bGVkPWZhbHNlKX0uYnRuLWludmVyc2U6aG92ZXIsLmJ0bi1pbnZlcnNlOmFjdGl2ZSwuYnRuLWlu
dmVyc2UuYWN0aXZlLC5idG4taW52ZXJzZS5kaXNhYmxlZCwuYnRuLWludmVyc2VbZGlzYWJsZWRd
e2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojMjIyOypiYWNrZ3JvdW5kLWNvbG9yOiMxNTE1
MTV9LmJ0bi1pbnZlcnNlOmFjdGl2ZSwuYnRuLWludmVyc2UuYWN0aXZle2JhY2tncm91bmQtY29s
b3I6IzA4MDgwOCBcOX1idXR0b24uYnRuLGlucHV0W3R5cGU9InN1Ym1pdCJdLmJ0bnsqcGFkZGlu
Zy10b3A6M3B4OypwYWRkaW5nLWJvdHRvbTozcHh9YnV0dG9uLmJ0bjo6LW1vei1mb2N1cy1pbm5l
cixpbnB1dFt0eXBlPSJzdWJtaXQiXS5idG46Oi1tb3otZm9jdXMtaW5uZXJ7cGFkZGluZzowO2Jv
cmRlcjowfWJ1dHRvbi5idG4uYnRuLWxhcmdlLGlucHV0W3R5cGU9InN1Ym1pdCJdLmJ0bi5idG4t
bGFyZ2V7KnBhZGRpbmctdG9wOjdweDsqcGFkZGluZy1ib3R0b206N3B4fWJ1dHRvbi5idG4uYnRu
LXNtYWxsLGlucHV0W3R5cGU9InN1Ym1pdCJdLmJ0bi5idG4tc21hbGx7KnBhZGRpbmctdG9wOjNw
eDsqcGFkZGluZy1ib3R0b206M3B4fWJ1dHRvbi5idG4uYnRuLW1pbmksaW5wdXRbdHlwZT0ic3Vi
bWl0Il0uYnRuLmJ0bi1taW5peypwYWRkaW5nLXRvcDoxcHg7KnBhZGRpbmctYm90dG9tOjFweH0u
YnRuLWxpbmssLmJ0bi1saW5rOmFjdGl2ZSwuYnRuLWxpbmtbZGlzYWJsZWRde2JhY2tncm91bmQt
Y29sb3I6dHJhbnNwYXJlbnQ7YmFja2dyb3VuZC1pbWFnZTpub25lOy13ZWJraXQtYm94LXNoYWRv
dzpub25lOy1tb3otYm94LXNoYWRvdzpub25lO2JveC1zaGFkb3c6bm9uZX0uYnRuLWxpbmt7Y29s
b3I6IzA4YztjdXJzb3I6cG9pbnRlcjtib3JkZXItY29sb3I6dHJhbnNwYXJlbnQ7LXdlYmtpdC1i
b3JkZXItcmFkaXVzOjA7LW1vei1ib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXJhZGl1czowfS5idG4t
bGluazpob3Zlcntjb2xvcjojMDA1NTgwO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7YmFja2dy
b3VuZC1jb2xvcjp0cmFuc3BhcmVudH0uYnRuLWxpbmtbZGlzYWJsZWRdOmhvdmVye2NvbG9yOiMz
MzM7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LmJ0bi1ncm91cHtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNw
bGF5OmlubGluZS1ibG9jazsqZGlzcGxheTppbmxpbmU7Km1hcmdpbi1sZWZ0Oi4zZW07Zm9udC1z
aXplOjA7d2hpdGUtc3BhY2U6bm93cmFwO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTsqem9vbToxfS5i
dG4tZ3JvdXA6Zmlyc3QtY2hpbGR7Km1hcmdpbi1sZWZ0OjB9LmJ0bi1ncm91cCsuYnRuLWdyb3Vw
e21hcmdpbi1sZWZ0OjVweH0uYnRuLXRvb2xiYXJ7bWFyZ2luLXRvcDoxMHB4O21hcmdpbi1ib3R0
b206MTBweDtmb250LXNpemU6MH0uYnRuLXRvb2xiYXI+LmJ0bisuYnRuLC5idG4tdG9vbGJhcj4u
YnRuLWdyb3VwKy5idG4sLmJ0bi10b29sYmFyPi5idG4rLmJ0bi1ncm91cHttYXJnaW4tbGVmdDo1
cHh9LmJ0bi1ncm91cD4uYnRue3Bvc2l0aW9uOnJlbGF0aXZlOy13ZWJraXQtYm9yZGVyLXJhZGl1
czowOy1tb3otYm9yZGVyLXJhZGl1czowO2JvcmRlci1yYWRpdXM6MH0uYnRuLWdyb3VwPi5idG4r
LmJ0bnttYXJnaW4tbGVmdDotMXB4fS5idG4tZ3JvdXA+LmJ0biwuYnRuLWdyb3VwPi5kcm9wZG93
bi1tZW51LC5idG4tZ3JvdXA+LnBvcG92ZXJ7Zm9udC1zaXplOjE0cHh9LmJ0bi1ncm91cD4uYnRu
LW1pbml7Zm9udC1zaXplOjEwLjVweH0uYnRuLWdyb3VwPi5idG4tc21hbGx7Zm9udC1zaXplOjEx
LjlweH0uYnRuLWdyb3VwPi5idG4tbGFyZ2V7Zm9udC1zaXplOjE3LjVweH0uYnRuLWdyb3VwPi5i
dG46Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6MDstd2Via2l0LWJvcmRlci1ib3R0b20tbGVmdC1y
YWRpdXM6NHB4O2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6NHB4Oy13ZWJraXQtYm9yZGVyLXRv
cC1sZWZ0LXJhZGl1czo0cHg7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czo0cHg7LW1vei1ib3JkZXIt
cmFkaXVzLWJvdHRvbWxlZnQ6NHB4Oy1tb3otYm9yZGVyLXJhZGl1cy10b3BsZWZ0OjRweH0uYnRu
LWdyb3VwPi5idG46bGFzdC1jaGlsZCwuYnRuLWdyb3VwPi5kcm9wZG93bi10b2dnbGV7LXdlYmtp
dC1ib3JkZXItdG9wLXJpZ2h0LXJhZGl1czo0cHg7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6NHB4
Oy13ZWJraXQtYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6NHB4O2JvcmRlci1ib3R0b20tcmln
aHQtcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXMtdG9wcmlnaHQ6NHB4Oy1tb3otYm9yZGVy
LXJhZGl1cy1ib3R0b21yaWdodDo0cHh9LmJ0bi1ncm91cD4uYnRuLmxhcmdlOmZpcnN0LWNoaWxk
e21hcmdpbi1sZWZ0OjA7LXdlYmtpdC1ib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjZweDtib3Jk
ZXItYm90dG9tLWxlZnQtcmFkaXVzOjZweDstd2Via2l0LWJvcmRlci10b3AtbGVmdC1yYWRpdXM6
NnB4O2JvcmRlci10b3AtbGVmdC1yYWRpdXM6NnB4Oy1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21s
ZWZ0OjZweDstbW96LWJvcmRlci1yYWRpdXMtdG9wbGVmdDo2cHh9LmJ0bi1ncm91cD4uYnRuLmxh
cmdlOmxhc3QtY2hpbGQsLmJ0bi1ncm91cD4ubGFyZ2UuZHJvcGRvd24tdG9nZ2xley13ZWJraXQt
Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6NnB4O2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjZweDst
d2Via2l0LWJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjZweDtib3JkZXItYm90dG9tLXJpZ2h0
LXJhZGl1czo2cHg7LW1vei1ib3JkZXItcmFkaXVzLXRvcHJpZ2h0OjZweDstbW96LWJvcmRlci1y
YWRpdXMtYm90dG9tcmlnaHQ6NnB4fS5idG4tZ3JvdXA+LmJ0bjpob3ZlciwuYnRuLWdyb3VwPi5i
dG46Zm9jdXMsLmJ0bi1ncm91cD4uYnRuOmFjdGl2ZSwuYnRuLWdyb3VwPi5idG4uYWN0aXZle3ot
aW5kZXg6Mn0uYnRuLWdyb3VwIC5kcm9wZG93bi10b2dnbGU6YWN0aXZlLC5idG4tZ3JvdXAub3Bl
biAuZHJvcGRvd24tdG9nZ2xle291dGxpbmU6MH0uYnRuLWdyb3VwPi5idG4rLmRyb3Bkb3duLXRv
Z2dsZXsqcGFkZGluZy10b3A6NXB4O3BhZGRpbmctcmlnaHQ6OHB4OypwYWRkaW5nLWJvdHRvbTo1
cHg7cGFkZGluZy1sZWZ0OjhweDstd2Via2l0LWJveC1zaGFkb3c6aW5zZXQgMXB4IDAgMCByZ2Jh
KDI1NSwyNTUsMjU1LDAuMTI1KSxpbnNldCAwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4yKSww
IDFweCAycHggcmdiYSgwLDAsMCwwLjA1KTstbW96LWJveC1zaGFkb3c6aW5zZXQgMXB4IDAgMCBy
Z2JhKDI1NSwyNTUsMjU1LDAuMTI1KSxpbnNldCAwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4y
KSwwIDFweCAycHggcmdiYSgwLDAsMCwwLjA1KTtib3gtc2hhZG93Omluc2V0IDFweCAwIDAgcmdi
YSgyNTUsMjU1LDI1NSwwLjEyNSksaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwyNTUsMjU1LDAuMiks
MCAxcHggMnB4IHJnYmEoMCwwLDAsMC4wNSl9LmJ0bi1ncm91cD4uYnRuLW1pbmkrLmRyb3Bkb3du
LXRvZ2dsZXsqcGFkZGluZy10b3A6MnB4O3BhZGRpbmctcmlnaHQ6NXB4OypwYWRkaW5nLWJvdHRv
bToycHg7cGFkZGluZy1sZWZ0OjVweH0uYnRuLWdyb3VwPi5idG4tc21hbGwrLmRyb3Bkb3duLXRv
Z2dsZXsqcGFkZGluZy10b3A6NXB4OypwYWRkaW5nLWJvdHRvbTo0cHh9LmJ0bi1ncm91cD4uYnRu
LWxhcmdlKy5kcm9wZG93bi10b2dnbGV7KnBhZGRpbmctdG9wOjdweDtwYWRkaW5nLXJpZ2h0OjEy
cHg7KnBhZGRpbmctYm90dG9tOjdweDtwYWRkaW5nLWxlZnQ6MTJweH0uYnRuLWdyb3VwLm9wZW4g
LmRyb3Bkb3duLXRvZ2dsZXtiYWNrZ3JvdW5kLWltYWdlOm5vbmU7LXdlYmtpdC1ib3gtc2hhZG93
Omluc2V0IDAgMnB4IDRweCByZ2JhKDAsMCwwLDAuMTUpLDAgMXB4IDJweCByZ2JhKDAsMCwwLDAu
MDUpOy1tb3otYm94LXNoYWRvdzppbnNldCAwIDJweCA0cHggcmdiYSgwLDAsMCwwLjE1KSwwIDFw
eCAycHggcmdiYSgwLDAsMCwwLjA1KTtib3gtc2hhZG93Omluc2V0IDAgMnB4IDRweCByZ2JhKDAs
MCwwLDAuMTUpLDAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMDUpfS5idG4tZ3JvdXAub3BlbiAuYnRu
LmRyb3Bkb3duLXRvZ2dsZXtiYWNrZ3JvdW5kLWNvbG9yOiNlNmU2ZTZ9LmJ0bi1ncm91cC5vcGVu
IC5idG4tcHJpbWFyeS5kcm9wZG93bi10b2dnbGV7YmFja2dyb3VuZC1jb2xvcjojMDRjfS5idG4t
Z3JvdXAub3BlbiAuYnRuLXdhcm5pbmcuZHJvcGRvd24tdG9nZ2xle2JhY2tncm91bmQtY29sb3I6
I2Y4OTQwNn0uYnRuLWdyb3VwLm9wZW4gLmJ0bi1kYW5nZXIuZHJvcGRvd24tdG9nZ2xle2JhY2tn
cm91bmQtY29sb3I6I2JkMzYyZn0uYnRuLWdyb3VwLm9wZW4gLmJ0bi1zdWNjZXNzLmRyb3Bkb3du
LXRvZ2dsZXtiYWNrZ3JvdW5kLWNvbG9yOiM1MWEzNTF9LmJ0bi1ncm91cC5vcGVuIC5idG4taW5m
by5kcm9wZG93bi10b2dnbGV7YmFja2dyb3VuZC1jb2xvcjojMmY5NmI0fS5idG4tZ3JvdXAub3Bl
biAuYnRuLWludmVyc2UuZHJvcGRvd24tdG9nZ2xle2JhY2tncm91bmQtY29sb3I6IzIyMn0uYnRu
IC5jYXJldHttYXJnaW4tdG9wOjhweDttYXJnaW4tbGVmdDowfS5idG4tbWluaSAuY2FyZXQsLmJ0
bi1zbWFsbCAuY2FyZXQsLmJ0bi1sYXJnZSAuY2FyZXR7bWFyZ2luLXRvcDo2cHh9LmJ0bi1sYXJn
ZSAuY2FyZXR7Ym9yZGVyLXRvcC13aWR0aDo1cHg7Ym9yZGVyLXJpZ2h0LXdpZHRoOjVweDtib3Jk
ZXItbGVmdC13aWR0aDo1cHh9LmRyb3B1cCAuYnRuLWxhcmdlIC5jYXJldHtib3JkZXItYm90dG9t
LXdpZHRoOjVweH0uYnRuLXByaW1hcnkgLmNhcmV0LC5idG4td2FybmluZyAuY2FyZXQsLmJ0bi1k
YW5nZXIgLmNhcmV0LC5idG4taW5mbyAuY2FyZXQsLmJ0bi1zdWNjZXNzIC5jYXJldCwuYnRuLWlu
dmVyc2UgLmNhcmV0e2JvcmRlci10b3AtY29sb3I6I2ZmZjtib3JkZXItYm90dG9tLWNvbG9yOiNm
ZmZ9LmJ0bi1ncm91cC12ZXJ0aWNhbHtkaXNwbGF5OmlubGluZS1ibG9jazsqZGlzcGxheTppbmxp
bmU7Knpvb206MX0uYnRuLWdyb3VwLXZlcnRpY2FsPi5idG57ZGlzcGxheTpibG9jaztmbG9hdDpu
b25lO21heC13aWR0aDoxMDAlOy13ZWJraXQtYm9yZGVyLXJhZGl1czowOy1tb3otYm9yZGVyLXJh
ZGl1czowO2JvcmRlci1yYWRpdXM6MH0uYnRuLWdyb3VwLXZlcnRpY2FsPi5idG4rLmJ0bnttYXJn
aW4tdG9wOi0xcHg7bWFyZ2luLWxlZnQ6MH0uYnRuLWdyb3VwLXZlcnRpY2FsPi5idG46Zmlyc3Qt
Y2hpbGR7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweCA0cHggMCAwOy1tb3otYm9yZGVyLXJhZGl1
czo0cHggNHB4IDAgMDtib3JkZXItcmFkaXVzOjRweCA0cHggMCAwfS5idG4tZ3JvdXAtdmVydGlj
YWw+LmJ0bjpsYXN0LWNoaWxkey13ZWJraXQtYm9yZGVyLXJhZGl1czowIDAgNHB4IDRweDstbW96
LWJvcmRlci1yYWRpdXM6MCAwIDRweCA0cHg7Ym9yZGVyLXJhZGl1czowIDAgNHB4IDRweH0uYnRu
LWdyb3VwLXZlcnRpY2FsPi5idG4tbGFyZ2U6Zmlyc3QtY2hpbGR7LXdlYmtpdC1ib3JkZXItcmFk
aXVzOjZweCA2cHggMCAwOy1tb3otYm9yZGVyLXJhZGl1czo2cHggNnB4IDAgMDtib3JkZXItcmFk
aXVzOjZweCA2cHggMCAwfS5idG4tZ3JvdXAtdmVydGljYWw+LmJ0bi1sYXJnZTpsYXN0LWNoaWxk
ey13ZWJraXQtYm9yZGVyLXJhZGl1czowIDAgNnB4IDZweDstbW96LWJvcmRlci1yYWRpdXM6MCAw
IDZweCA2cHg7Ym9yZGVyLXJhZGl1czowIDAgNnB4IDZweH0uYWxlcnR7cGFkZGluZzo4cHggMzVw
eCA4cHggMTRweDttYXJnaW4tYm90dG9tOjIwcHg7dGV4dC1zaGFkb3c6MCAxcHggMCByZ2JhKDI1
NSwyNTUsMjU1LDAuNSk7YmFja2dyb3VuZC1jb2xvcjojZmNmOGUzO2JvcmRlcjoxcHggc29saWQg
I2ZiZWVkNTstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7
Ym9yZGVyLXJhZGl1czo0cHh9LmFsZXJ0LC5hbGVydCBoNHtjb2xvcjojYzA5ODUzfS5hbGVydCBo
NHttYXJnaW46MH0uYWxlcnQgLmNsb3Nle3Bvc2l0aW9uOnJlbGF0aXZlO3RvcDotMnB4O3JpZ2h0
Oi0yMXB4O2xpbmUtaGVpZ2h0OjIwcHh9LmFsZXJ0LXN1Y2Nlc3N7Y29sb3I6IzQ2ODg0NztiYWNr
Z3JvdW5kLWNvbG9yOiNkZmYwZDg7Ym9yZGVyLWNvbG9yOiNkNmU5YzZ9LmFsZXJ0LXN1Y2Nlc3Mg
aDR7Y29sb3I6IzQ2ODg0N30uYWxlcnQtZGFuZ2VyLC5hbGVydC1lcnJvcntjb2xvcjojYjk0YTQ4
O2JhY2tncm91bmQtY29sb3I6I2YyZGVkZTtib3JkZXItY29sb3I6I2VlZDNkN30uYWxlcnQtZGFu
Z2VyIGg0LC5hbGVydC1lcnJvciBoNHtjb2xvcjojYjk0YTQ4fS5hbGVydC1pbmZve2NvbG9yOiMz
YTg3YWQ7YmFja2dyb3VuZC1jb2xvcjojZDllZGY3O2JvcmRlci1jb2xvcjojYmNlOGYxfS5hbGVy
dC1pbmZvIGg0e2NvbG9yOiMzYTg3YWR9LmFsZXJ0LWJsb2Nre3BhZGRpbmctdG9wOjE0cHg7cGFk
ZGluZy1ib3R0b206MTRweH0uYWxlcnQtYmxvY2s+cCwuYWxlcnQtYmxvY2s+dWx7bWFyZ2luLWJv
dHRvbTowfS5hbGVydC1ibG9jayBwK3B7bWFyZ2luLXRvcDo1cHh9Lm5hdnttYXJnaW4tYm90dG9t
OjIwcHg7bWFyZ2luLWxlZnQ6MDtsaXN0LXN0eWxlOm5vbmV9Lm5hdj5saT5he2Rpc3BsYXk6Ymxv
Y2t9Lm5hdj5saT5hOmhvdmVye3RleHQtZGVjb3JhdGlvbjpub25lO2JhY2tncm91bmQtY29sb3I6
I2VlZX0ubmF2PmxpPmE+aW1ne21heC13aWR0aDpub25lfS5uYXY+LnB1bGwtcmlnaHR7ZmxvYXQ6
cmlnaHR9Lm5hdi1oZWFkZXJ7ZGlzcGxheTpibG9jaztwYWRkaW5nOjNweCAxNXB4O2ZvbnQtc2l6
ZToxMXB4O2ZvbnQtd2VpZ2h0OmJvbGQ7bGluZS1oZWlnaHQ6MjBweDtjb2xvcjojOTk5O3RleHQt
c2hhZG93OjAgMXB4IDAgcmdiYSgyNTUsMjU1LDI1NSwwLjUpO3RleHQtdHJhbnNmb3JtOnVwcGVy
Y2FzZX0ubmF2IGxpKy5uYXYtaGVhZGVye21hcmdpbi10b3A6OXB4fS5uYXYtbGlzdHtwYWRkaW5n
LXJpZ2h0OjE1cHg7cGFkZGluZy1sZWZ0OjE1cHg7bWFyZ2luLWJvdHRvbTowfS5uYXYtbGlzdD5s
aT5hLC5uYXYtbGlzdCAubmF2LWhlYWRlcnttYXJnaW4tcmlnaHQ6LTE1cHg7bWFyZ2luLWxlZnQ6
LTE1cHg7dGV4dC1zaGFkb3c6MCAxcHggMCByZ2JhKDI1NSwyNTUsMjU1LDAuNSl9Lm5hdi1saXN0
PmxpPmF7cGFkZGluZzozcHggMTVweH0ubmF2LWxpc3Q+LmFjdGl2ZT5hLC5uYXYtbGlzdD4uYWN0
aXZlPmE6aG92ZXJ7Y29sb3I6I2ZmZjt0ZXh0LXNoYWRvdzowIC0xcHggMCByZ2JhKDAsMCwwLDAu
Mik7YmFja2dyb3VuZC1jb2xvcjojMDhjfS5uYXYtbGlzdCBbY2xhc3NePSJpY29uLSJdLC5uYXYt
bGlzdCBbY2xhc3MqPSIgaWNvbi0iXXttYXJnaW4tcmlnaHQ6MnB4fS5uYXYtbGlzdCAuZGl2aWRl
cnsqd2lkdGg6MTAwJTtoZWlnaHQ6MXB4O21hcmdpbjo5cHggMXB4OyptYXJnaW46LTVweCAwIDVw
eDtvdmVyZmxvdzpoaWRkZW47YmFja2dyb3VuZC1jb2xvcjojZTVlNWU1O2JvcmRlci1ib3R0b206
MXB4IHNvbGlkICNmZmZ9Lm5hdi10YWJzLC5uYXYtcGlsbHN7Knpvb206MX0ubmF2LXRhYnM6YmVm
b3JlLC5uYXYtcGlsbHM6YmVmb3JlLC5uYXYtdGFiczphZnRlciwubmF2LXBpbGxzOmFmdGVye2Rp
c3BsYXk6dGFibGU7bGluZS1oZWlnaHQ6MDtjb250ZW50OiIifS5uYXYtdGFiczphZnRlciwubmF2
LXBpbGxzOmFmdGVye2NsZWFyOmJvdGh9Lm5hdi10YWJzPmxpLC5uYXYtcGlsbHM+bGl7ZmxvYXQ6
bGVmdH0ubmF2LXRhYnM+bGk+YSwubmF2LXBpbGxzPmxpPmF7cGFkZGluZy1yaWdodDoxMnB4O3Bh
ZGRpbmctbGVmdDoxMnB4O21hcmdpbi1yaWdodDoycHg7bGluZS1oZWlnaHQ6MTRweH0ubmF2LXRh
YnN7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2RkZH0ubmF2LXRhYnM+bGl7bWFyZ2luLWJvdHRv
bTotMXB4fS5uYXYtdGFicz5saT5he3BhZGRpbmctdG9wOjhweDtwYWRkaW5nLWJvdHRvbTo4cHg7
bGluZS1oZWlnaHQ6MjBweDtib3JkZXI6MXB4IHNvbGlkIHRyYW5zcGFyZW50Oy13ZWJraXQtYm9y
ZGVyLXJhZGl1czo0cHggNHB4IDAgMDstbW96LWJvcmRlci1yYWRpdXM6NHB4IDRweCAwIDA7Ym9y
ZGVyLXJhZGl1czo0cHggNHB4IDAgMH0ubmF2LXRhYnM+bGk+YTpob3Zlcntib3JkZXItY29sb3I6
I2VlZSAjZWVlICNkZGR9Lm5hdi10YWJzPi5hY3RpdmU+YSwubmF2LXRhYnM+LmFjdGl2ZT5hOmhv
dmVye2NvbG9yOiM1NTU7Y3Vyc29yOmRlZmF1bHQ7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRl
cjoxcHggc29saWQgI2RkZDtib3JkZXItYm90dG9tLWNvbG9yOnRyYW5zcGFyZW50fS5uYXYtcGls
bHM+bGk+YXtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4O21hcmdpbi10b3A6MnB4
O21hcmdpbi1ib3R0b206MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czo1cHg7LW1vei1ib3JkZXIt
cmFkaXVzOjVweDtib3JkZXItcmFkaXVzOjVweH0ubmF2LXBpbGxzPi5hY3RpdmU+YSwubmF2LXBp
bGxzPi5hY3RpdmU+YTpob3Zlcntjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6IzA4Y30ubmF2
LXN0YWNrZWQ+bGl7ZmxvYXQ6bm9uZX0ubmF2LXN0YWNrZWQ+bGk+YXttYXJnaW4tcmlnaHQ6MH0u
bmF2LXRhYnMubmF2LXN0YWNrZWR7Ym9yZGVyLWJvdHRvbTowfS5uYXYtdGFicy5uYXYtc3RhY2tl
ZD5saT5he2JvcmRlcjoxcHggc29saWQgI2RkZDstd2Via2l0LWJvcmRlci1yYWRpdXM6MDstbW96
LWJvcmRlci1yYWRpdXM6MDtib3JkZXItcmFkaXVzOjB9Lm5hdi10YWJzLm5hdi1zdGFja2VkPmxp
OmZpcnN0LWNoaWxkPmF7LXdlYmtpdC1ib3JkZXItdG9wLXJpZ2h0LXJhZGl1czo0cHg7Ym9yZGVy
LXRvcC1yaWdodC1yYWRpdXM6NHB4Oy13ZWJraXQtYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czo0cHg7
Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzLXRvcHJpZ2h0OjRw
eDstbW96LWJvcmRlci1yYWRpdXMtdG9wbGVmdDo0cHh9Lm5hdi10YWJzLm5hdi1zdGFja2VkPmxp
Omxhc3QtY2hpbGQ+YXstd2Via2l0LWJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjRweDtib3Jk
ZXItYm90dG9tLXJpZ2h0LXJhZGl1czo0cHg7LXdlYmtpdC1ib3JkZXItYm90dG9tLWxlZnQtcmFk
aXVzOjRweDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXMt
Ym90dG9tcmlnaHQ6NHB4Oy1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21sZWZ0OjRweH0ubmF2LXRh
YnMubmF2LXN0YWNrZWQ+bGk+YTpob3Zlcnt6LWluZGV4OjI7Ym9yZGVyLWNvbG9yOiNkZGR9Lm5h
di1waWxscy5uYXYtc3RhY2tlZD5saT5he21hcmdpbi1ib3R0b206M3B4fS5uYXYtcGlsbHMubmF2
LXN0YWNrZWQ+bGk6bGFzdC1jaGlsZD5he21hcmdpbi1ib3R0b206MXB4fS5uYXYtdGFicyAuZHJv
cGRvd24tbWVudXstd2Via2l0LWJvcmRlci1yYWRpdXM6MCAwIDZweCA2cHg7LW1vei1ib3JkZXIt
cmFkaXVzOjAgMCA2cHggNnB4O2JvcmRlci1yYWRpdXM6MCAwIDZweCA2cHh9Lm5hdi1waWxscyAu
ZHJvcGRvd24tbWVudXstd2Via2l0LWJvcmRlci1yYWRpdXM6NnB4Oy1tb3otYm9yZGVyLXJhZGl1
czo2cHg7Ym9yZGVyLXJhZGl1czo2cHh9Lm5hdiAuZHJvcGRvd24tdG9nZ2xlIC5jYXJldHttYXJn
aW4tdG9wOjZweDtib3JkZXItdG9wLWNvbG9yOiMwOGM7Ym9yZGVyLWJvdHRvbS1jb2xvcjojMDhj
fS5uYXYgLmRyb3Bkb3duLXRvZ2dsZTpob3ZlciAuY2FyZXR7Ym9yZGVyLXRvcC1jb2xvcjojMDA1
NTgwO2JvcmRlci1ib3R0b20tY29sb3I6IzAwNTU4MH0ubmF2LXRhYnMgLmRyb3Bkb3duLXRvZ2ds
ZSAuY2FyZXR7bWFyZ2luLXRvcDo4cHh9Lm5hdiAuYWN0aXZlIC5kcm9wZG93bi10b2dnbGUgLmNh
cmV0e2JvcmRlci10b3AtY29sb3I6I2ZmZjtib3JkZXItYm90dG9tLWNvbG9yOiNmZmZ9Lm5hdi10
YWJzIC5hY3RpdmUgLmRyb3Bkb3duLXRvZ2dsZSAuY2FyZXR7Ym9yZGVyLXRvcC1jb2xvcjojNTU1
O2JvcmRlci1ib3R0b20tY29sb3I6IzU1NX0ubmF2Pi5kcm9wZG93bi5hY3RpdmU+YTpob3Zlcntj
dXJzb3I6cG9pbnRlcn0ubmF2LXRhYnMgLm9wZW4gLmRyb3Bkb3duLXRvZ2dsZSwubmF2LXBpbGxz
IC5vcGVuIC5kcm9wZG93bi10b2dnbGUsLm5hdj5saS5kcm9wZG93bi5vcGVuLmFjdGl2ZT5hOmhv
dmVye2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojOTk5O2JvcmRlci1jb2xvcjojOTk5fS5u
YXYgbGkuZHJvcGRvd24ub3BlbiAuY2FyZXQsLm5hdiBsaS5kcm9wZG93bi5vcGVuLmFjdGl2ZSAu
Y2FyZXQsLm5hdiBsaS5kcm9wZG93bi5vcGVuIGE6aG92ZXIgLmNhcmV0e2JvcmRlci10b3AtY29s
b3I6I2ZmZjtib3JkZXItYm90dG9tLWNvbG9yOiNmZmY7b3BhY2l0eToxO2ZpbHRlcjphbHBoYShv
cGFjaXR5PTEwMCl9LnRhYnMtc3RhY2tlZCAub3Blbj5hOmhvdmVye2JvcmRlci1jb2xvcjojOTk5
fS50YWJiYWJsZXsqem9vbToxfS50YWJiYWJsZTpiZWZvcmUsLnRhYmJhYmxlOmFmdGVye2Rpc3Bs
YXk6dGFibGU7bGluZS1oZWlnaHQ6MDtjb250ZW50OiIifS50YWJiYWJsZTphZnRlcntjbGVhcjpi
b3RofS50YWItY29udGVudHtvdmVyZmxvdzphdXRvfS50YWJzLWJlbG93Pi5uYXYtdGFicywudGFi
cy1yaWdodD4ubmF2LXRhYnMsLnRhYnMtbGVmdD4ubmF2LXRhYnN7Ym9yZGVyLWJvdHRvbTowfS50
YWItY29udGVudD4udGFiLXBhbmUsLnBpbGwtY29udGVudD4ucGlsbC1wYW5le2Rpc3BsYXk6bm9u
ZX0udGFiLWNvbnRlbnQ+LmFjdGl2ZSwucGlsbC1jb250ZW50Pi5hY3RpdmV7ZGlzcGxheTpibG9j
a30udGFicy1iZWxvdz4ubmF2LXRhYnN7Ym9yZGVyLXRvcDoxcHggc29saWQgI2RkZH0udGFicy1i
ZWxvdz4ubmF2LXRhYnM+bGl7bWFyZ2luLXRvcDotMXB4O21hcmdpbi1ib3R0b206MH0udGFicy1i
ZWxvdz4ubmF2LXRhYnM+bGk+YXstd2Via2l0LWJvcmRlci1yYWRpdXM6MCAwIDRweCA0cHg7LW1v
ei1ib3JkZXItcmFkaXVzOjAgMCA0cHggNHB4O2JvcmRlci1yYWRpdXM6MCAwIDRweCA0cHh9LnRh
YnMtYmVsb3c+Lm5hdi10YWJzPmxpPmE6aG92ZXJ7Ym9yZGVyLXRvcC1jb2xvcjojZGRkO2JvcmRl
ci1ib3R0b20tY29sb3I6dHJhbnNwYXJlbnR9LnRhYnMtYmVsb3c+Lm5hdi10YWJzPi5hY3RpdmU+
YSwudGFicy1iZWxvdz4ubmF2LXRhYnM+LmFjdGl2ZT5hOmhvdmVye2JvcmRlci1jb2xvcjp0cmFu
c3BhcmVudCAjZGRkICNkZGQgI2RkZH0udGFicy1sZWZ0Pi5uYXYtdGFicz5saSwudGFicy1yaWdo
dD4ubmF2LXRhYnM+bGl7ZmxvYXQ6bm9uZX0udGFicy1sZWZ0Pi5uYXYtdGFicz5saT5hLC50YWJz
LXJpZ2h0Pi5uYXYtdGFicz5saT5he21pbi13aWR0aDo3NHB4O21hcmdpbi1yaWdodDowO21hcmdp
bi1ib3R0b206M3B4fS50YWJzLWxlZnQ+Lm5hdi10YWJze2Zsb2F0OmxlZnQ7bWFyZ2luLXJpZ2h0
OjE5cHg7Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjZGRkfS50YWJzLWxlZnQ+Lm5hdi10YWJzPmxp
PmF7bWFyZ2luLXJpZ2h0Oi0xcHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweCAwIDAgNHB4Oy1t
b3otYm9yZGVyLXJhZGl1czo0cHggMCAwIDRweDtib3JkZXItcmFkaXVzOjRweCAwIDAgNHB4fS50
YWJzLWxlZnQ+Lm5hdi10YWJzPmxpPmE6aG92ZXJ7Ym9yZGVyLWNvbG9yOiNlZWUgI2RkZCAjZWVl
ICNlZWV9LnRhYnMtbGVmdD4ubmF2LXRhYnMgLmFjdGl2ZT5hLC50YWJzLWxlZnQ+Lm5hdi10YWJz
IC5hY3RpdmU+YTpob3Zlcntib3JkZXItY29sb3I6I2RkZCB0cmFuc3BhcmVudCAjZGRkICNkZGQ7
KmJvcmRlci1yaWdodC1jb2xvcjojZmZmfS50YWJzLXJpZ2h0Pi5uYXYtdGFic3tmbG9hdDpyaWdo
dDttYXJnaW4tbGVmdDoxOXB4O2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjZGRkfS50YWJzLXJpZ2h0
Pi5uYXYtdGFicz5saT5he21hcmdpbi1sZWZ0Oi0xcHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjAg
NHB4IDRweCAwOy1tb3otYm9yZGVyLXJhZGl1czowIDRweCA0cHggMDtib3JkZXItcmFkaXVzOjAg
NHB4IDRweCAwfS50YWJzLXJpZ2h0Pi5uYXYtdGFicz5saT5hOmhvdmVye2JvcmRlci1jb2xvcjoj
ZWVlICNlZWUgI2VlZSAjZGRkfS50YWJzLXJpZ2h0Pi5uYXYtdGFicyAuYWN0aXZlPmEsLnRhYnMt
cmlnaHQ+Lm5hdi10YWJzIC5hY3RpdmU+YTpob3Zlcntib3JkZXItY29sb3I6I2RkZCAjZGRkICNk
ZGQgdHJhbnNwYXJlbnQ7KmJvcmRlci1sZWZ0LWNvbG9yOiNmZmZ9Lm5hdj4uZGlzYWJsZWQ+YXtj
b2xvcjojOTk5fS5uYXY+LmRpc2FibGVkPmE6aG92ZXJ7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y3Vy
c29yOmRlZmF1bHQ7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0ubmF2YmFyeypwb3NpdGlv
bjpyZWxhdGl2ZTsqei1pbmRleDoyO21hcmdpbi1ib3R0b206MjBweDtvdmVyZmxvdzp2aXNpYmxl
fS5uYXZiYXItaW5uZXJ7bWluLWhlaWdodDo0MHB4O3BhZGRpbmctcmlnaHQ6MjBweDtwYWRkaW5n
LWxlZnQ6MjBweDtiYWNrZ3JvdW5kLWNvbG9yOiNmYWZhZmE7YmFja2dyb3VuZC1pbWFnZTotbW96
LWxpbmVhci1ncmFkaWVudCh0b3AsI2ZmZiwjZjJmMmYyKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJr
aXQtZ3JhZGllbnQobGluZWFyLDAgMCwwIDEwMCUsZnJvbSgjZmZmKSx0bygjZjJmMmYyKSk7YmFj
a2dyb3VuZC1pbWFnZTotd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AsI2ZmZiwjZjJmMmYyKTti
YWNrZ3JvdW5kLWltYWdlOi1vLWxpbmVhci1ncmFkaWVudCh0b3AsI2ZmZiwjZjJmMmYyKTtiYWNr
Z3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sI2ZmZiwjZjJmMmYyKTtiYWNr
Z3JvdW5kLXJlcGVhdDpyZXBlYXQteDtib3JkZXI6MXB4IHNvbGlkICNkNGQ0ZDQ7LXdlYmtpdC1i
b3JkZXItcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4O2JvcmRlci1yYWRpdXM6NHB4
O2ZpbHRlcjpwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRD
b2xvcnN0cj0nI2ZmZmZmZmZmJyxlbmRDb2xvcnN0cj0nI2ZmZjJmMmYyJyxHcmFkaWVudFR5cGU9
MCk7Knpvb206MTstd2Via2l0LWJveC1zaGFkb3c6MCAxcHggNHB4IHJnYmEoMCwwLDAsMC4wNjUp
Oy1tb3otYm94LXNoYWRvdzowIDFweCA0cHggcmdiYSgwLDAsMCwwLjA2NSk7Ym94LXNoYWRvdzow
IDFweCA0cHggcmdiYSgwLDAsMCwwLjA2NSl9Lm5hdmJhci1pbm5lcjpiZWZvcmUsLm5hdmJhci1p
bm5lcjphZnRlcntkaXNwbGF5OnRhYmxlO2xpbmUtaGVpZ2h0OjA7Y29udGVudDoiIn0ubmF2YmFy
LWlubmVyOmFmdGVye2NsZWFyOmJvdGh9Lm5hdmJhciAuY29udGFpbmVye3dpZHRoOmF1dG99Lm5h
di1jb2xsYXBzZS5jb2xsYXBzZXtoZWlnaHQ6YXV0bztvdmVyZmxvdzp2aXNpYmxlfS5uYXZiYXIg
LmJyYW5ke2Rpc3BsYXk6YmxvY2s7ZmxvYXQ6bGVmdDtwYWRkaW5nOjEwcHggMjBweCAxMHB4O21h
cmdpbi1sZWZ0Oi0yMHB4O2ZvbnQtc2l6ZToyMHB4O2ZvbnQtd2VpZ2h0OjIwMDtjb2xvcjojNzc3
O3RleHQtc2hhZG93OjAgMXB4IDAgI2ZmZn0ubmF2YmFyIC5icmFuZDpob3Zlcnt0ZXh0LWRlY29y
YXRpb246bm9uZX0ubmF2YmFyLXRleHR7bWFyZ2luLWJvdHRvbTowO2xpbmUtaGVpZ2h0OjQwcHg7
Y29sb3I6Izc3N30ubmF2YmFyLWxpbmt7Y29sb3I6Izc3N30ubmF2YmFyLWxpbms6aG92ZXJ7Y29s
b3I6IzMzM30ubmF2YmFyIC5kaXZpZGVyLXZlcnRpY2Fse2hlaWdodDo0MHB4O21hcmdpbjowIDlw
eDtib3JkZXItcmlnaHQ6MXB4IHNvbGlkICNmZmY7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICNmMmYy
ZjJ9Lm5hdmJhciAuYnRuLC5uYXZiYXIgLmJ0bi1ncm91cHttYXJnaW4tdG9wOjVweH0ubmF2YmFy
IC5idG4tZ3JvdXAgLmJ0biwubmF2YmFyIC5pbnB1dC1wcmVwZW5kIC5idG4sLm5hdmJhciAuaW5w
dXQtYXBwZW5kIC5idG57bWFyZ2luLXRvcDowfS5uYXZiYXItZm9ybXttYXJnaW4tYm90dG9tOjA7
Knpvb206MX0ubmF2YmFyLWZvcm06YmVmb3JlLC5uYXZiYXItZm9ybTphZnRlcntkaXNwbGF5OnRh
YmxlO2xpbmUtaGVpZ2h0OjA7Y29udGVudDoiIn0ubmF2YmFyLWZvcm06YWZ0ZXJ7Y2xlYXI6Ym90
aH0ubmF2YmFyLWZvcm0gaW5wdXQsLm5hdmJhci1mb3JtIHNlbGVjdCwubmF2YmFyLWZvcm0gLnJh
ZGlvLC5uYXZiYXItZm9ybSAuY2hlY2tib3h7bWFyZ2luLXRvcDo1cHh9Lm5hdmJhci1mb3JtIGlu
cHV0LC5uYXZiYXItZm9ybSBzZWxlY3QsLm5hdmJhci1mb3JtIC5idG57ZGlzcGxheTppbmxpbmUt
YmxvY2s7bWFyZ2luLWJvdHRvbTowfS5uYXZiYXItZm9ybSBpbnB1dFt0eXBlPSJpbWFnZSJdLC5u
YXZiYXItZm9ybSBpbnB1dFt0eXBlPSJjaGVja2JveCJdLC5uYXZiYXItZm9ybSBpbnB1dFt0eXBl
PSJyYWRpbyJde21hcmdpbi10b3A6M3B4fS5uYXZiYXItZm9ybSAuaW5wdXQtYXBwZW5kLC5uYXZi
YXItZm9ybSAuaW5wdXQtcHJlcGVuZHttYXJnaW4tdG9wOjVweDt3aGl0ZS1zcGFjZTpub3dyYXB9
Lm5hdmJhci1mb3JtIC5pbnB1dC1hcHBlbmQgaW5wdXQsLm5hdmJhci1mb3JtIC5pbnB1dC1wcmVw
ZW5kIGlucHV0e21hcmdpbi10b3A6MH0ubmF2YmFyLXNlYXJjaHtwb3NpdGlvbjpyZWxhdGl2ZTtm
bG9hdDpsZWZ0O21hcmdpbi10b3A6NXB4O21hcmdpbi1ib3R0b206MH0ubmF2YmFyLXNlYXJjaCAu
c2VhcmNoLXF1ZXJ5e3BhZGRpbmc6NHB4IDE0cHg7bWFyZ2luLWJvdHRvbTowO2ZvbnQtZmFtaWx5
OiJIZWx2ZXRpY2EgTmV1ZSIsSGVsdmV0aWNhLEFyaWFsLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEz
cHg7Zm9udC13ZWlnaHQ6bm9ybWFsO2xpbmUtaGVpZ2h0OjE7LXdlYmtpdC1ib3JkZXItcmFkaXVz
OjE1cHg7LW1vei1ib3JkZXItcmFkaXVzOjE1cHg7Ym9yZGVyLXJhZGl1czoxNXB4fS5uYXZiYXIt
c3RhdGljLXRvcHtwb3NpdGlvbjpzdGF0aWM7bWFyZ2luLWJvdHRvbTowfS5uYXZiYXItc3RhdGlj
LXRvcCAubmF2YmFyLWlubmVyey13ZWJraXQtYm9yZGVyLXJhZGl1czowOy1tb3otYm9yZGVyLXJh
ZGl1czowO2JvcmRlci1yYWRpdXM6MH0ubmF2YmFyLWZpeGVkLXRvcCwubmF2YmFyLWZpeGVkLWJv
dHRvbXtwb3NpdGlvbjpmaXhlZDtyaWdodDowO2xlZnQ6MDt6LWluZGV4OjEwMzA7bWFyZ2luLWJv
dHRvbTowfS5uYXZiYXItZml4ZWQtdG9wIC5uYXZiYXItaW5uZXIsLm5hdmJhci1zdGF0aWMtdG9w
IC5uYXZiYXItaW5uZXJ7Ym9yZGVyLXdpZHRoOjAgMCAxcHh9Lm5hdmJhci1maXhlZC1ib3R0b20g
Lm5hdmJhci1pbm5lcntib3JkZXItd2lkdGg6MXB4IDAgMH0ubmF2YmFyLWZpeGVkLXRvcCAubmF2
YmFyLWlubmVyLC5uYXZiYXItZml4ZWQtYm90dG9tIC5uYXZiYXItaW5uZXJ7cGFkZGluZy1yaWdo
dDowO3BhZGRpbmctbGVmdDowOy13ZWJraXQtYm9yZGVyLXJhZGl1czowOy1tb3otYm9yZGVyLXJh
ZGl1czowO2JvcmRlci1yYWRpdXM6MH0ubmF2YmFyLXN0YXRpYy10b3AgLmNvbnRhaW5lciwubmF2
YmFyLWZpeGVkLXRvcCAuY29udGFpbmVyLC5uYXZiYXItZml4ZWQtYm90dG9tIC5jb250YWluZXJ7
d2lkdGg6OTQwcHh9Lm5hdmJhci1maXhlZC10b3B7dG9wOjB9Lm5hdmJhci1maXhlZC10b3AgLm5h
dmJhci1pbm5lciwubmF2YmFyLXN0YXRpYy10b3AgLm5hdmJhci1pbm5lcnstd2Via2l0LWJveC1z
aGFkb3c6MCAxcHggMTBweCByZ2JhKDAsMCwwLDAuMSk7LW1vei1ib3gtc2hhZG93OjAgMXB4IDEw
cHggcmdiYSgwLDAsMCwwLjEpO2JveC1zaGFkb3c6MCAxcHggMTBweCByZ2JhKDAsMCwwLDAuMSl9
Lm5hdmJhci1maXhlZC1ib3R0b217Ym90dG9tOjB9Lm5hdmJhci1maXhlZC1ib3R0b20gLm5hdmJh
ci1pbm5lcnstd2Via2l0LWJveC1zaGFkb3c6MCAtMXB4IDEwcHggcmdiYSgwLDAsMCwwLjEpOy1t
b3otYm94LXNoYWRvdzowIC0xcHggMTBweCByZ2JhKDAsMCwwLDAuMSk7Ym94LXNoYWRvdzowIC0x
cHggMTBweCByZ2JhKDAsMCwwLDAuMSl9Lm5hdmJhciAubmF2e3Bvc2l0aW9uOnJlbGF0aXZlO2xl
ZnQ6MDtkaXNwbGF5OmJsb2NrO2Zsb2F0OmxlZnQ7bWFyZ2luOjAgMTBweCAwIDB9Lm5hdmJhciAu
bmF2LnB1bGwtcmlnaHR7ZmxvYXQ6cmlnaHQ7bWFyZ2luLXJpZ2h0OjB9Lm5hdmJhciAubmF2Pmxp
e2Zsb2F0OmxlZnR9Lm5hdmJhciAubmF2PmxpPmF7ZmxvYXQ6bm9uZTtwYWRkaW5nOjEwcHggMTVw
eCAxMHB4O2NvbG9yOiM3Nzc7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dGV4dC1zaGFkb3c6MCAxcHgg
MCAjZmZmfS5uYXZiYXIgLm5hdiAuZHJvcGRvd24tdG9nZ2xlIC5jYXJldHttYXJnaW4tdG9wOjhw
eH0ubmF2YmFyIC5uYXY+bGk+YTpmb2N1cywubmF2YmFyIC5uYXY+bGk+YTpob3Zlcntjb2xvcjoj
MzMzO3RleHQtZGVjb3JhdGlvbjpub25lO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9Lm5h
dmJhciAubmF2Pi5hY3RpdmU+YSwubmF2YmFyIC5uYXY+LmFjdGl2ZT5hOmhvdmVyLC5uYXZiYXIg
Lm5hdj4uYWN0aXZlPmE6Zm9jdXN7Y29sb3I6IzU1NTt0ZXh0LWRlY29yYXRpb246bm9uZTtiYWNr
Z3JvdW5kLWNvbG9yOiNlNWU1ZTU7LXdlYmtpdC1ib3gtc2hhZG93Omluc2V0IDAgM3B4IDhweCBy
Z2JhKDAsMCwwLDAuMTI1KTstbW96LWJveC1zaGFkb3c6aW5zZXQgMCAzcHggOHB4IHJnYmEoMCww
LDAsMC4xMjUpO2JveC1zaGFkb3c6aW5zZXQgMCAzcHggOHB4IHJnYmEoMCwwLDAsMC4xMjUpfS5u
YXZiYXIgLmJ0bi1uYXZiYXJ7ZGlzcGxheTpub25lO2Zsb2F0OnJpZ2h0O3BhZGRpbmc6N3B4IDEw
cHg7bWFyZ2luLXJpZ2h0OjVweDttYXJnaW4tbGVmdDo1cHg7Y29sb3I6I2ZmZjt0ZXh0LXNoYWRv
dzowIC0xcHggMCByZ2JhKDAsMCwwLDAuMjUpO2JhY2tncm91bmQtY29sb3I6I2VkZWRlZDsqYmFj
a2dyb3VuZC1jb2xvcjojZTVlNWU1O2JhY2tncm91bmQtaW1hZ2U6LW1vei1saW5lYXItZ3JhZGll
bnQodG9wLCNmMmYyZjIsI2U1ZTVlNSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50
KGxpbmVhciwwIDAsMCAxMDAlLGZyb20oI2YyZjJmMiksdG8oI2U1ZTVlNSkpO2JhY2tncm91bmQt
aW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCNmMmYyZjIsI2U1ZTVlNSk7YmFja2dy
b3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQodG9wLCNmMmYyZjIsI2U1ZTVlNSk7YmFja2dy
b3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCNmMmYyZjIsI2U1ZTVlNSk7YmFj
a2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7Ym9yZGVyLWNvbG9yOiNlNWU1ZTUgI2U1ZTVlNSAjYmZi
ZmJmO2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLDAuMSkgcmdiYSgwLDAsMCwwLjEpIHJnYmEoMCww
LDAsMC4yNSk7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVu
dChzdGFydENvbG9yc3RyPScjZmZmMmYyZjInLGVuZENvbG9yc3RyPScjZmZlNWU1ZTUnLEdyYWRp
ZW50VHlwZT0wKTtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRp
ZW50KGVuYWJsZWQ9ZmFsc2UpOy13ZWJraXQtYm94LXNoYWRvdzppbnNldCAwIDFweCAwIHJnYmEo
MjU1LDI1NSwyNTUsMC4xKSwwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4wNzUpOy1tb3otYm94
LXNoYWRvdzppbnNldCAwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4xKSwwIDFweCAwIHJnYmEo
MjU1LDI1NSwyNTUsMC4wNzUpO2JveC1zaGFkb3c6aW5zZXQgMCAxcHggMCByZ2JhKDI1NSwyNTUs
MjU1LDAuMSksMCAxcHggMCByZ2JhKDI1NSwyNTUsMjU1LDAuMDc1KX0ubmF2YmFyIC5idG4tbmF2
YmFyOmhvdmVyLC5uYXZiYXIgLmJ0bi1uYXZiYXI6YWN0aXZlLC5uYXZiYXIgLmJ0bi1uYXZiYXIu
YWN0aXZlLC5uYXZiYXIgLmJ0bi1uYXZiYXIuZGlzYWJsZWQsLm5hdmJhciAuYnRuLW5hdmJhcltk
aXNhYmxlZF17Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiNlNWU1ZTU7KmJhY2tncm91bmQt
Y29sb3I6I2Q5ZDlkOX0ubmF2YmFyIC5idG4tbmF2YmFyOmFjdGl2ZSwubmF2YmFyIC5idG4tbmF2
YmFyLmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOiNjY2MgXDl9Lm5hdmJhciAuYnRuLW5hdmJhciAu
aWNvbi1iYXJ7ZGlzcGxheTpibG9jazt3aWR0aDoxOHB4O2hlaWdodDoycHg7YmFja2dyb3VuZC1j
b2xvcjojZjVmNWY1Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoxcHg7LW1vei1ib3JkZXItcmFkaXVz
OjFweDtib3JkZXItcmFkaXVzOjFweDstd2Via2l0LWJveC1zaGFkb3c6MCAxcHggMCByZ2JhKDAs
MCwwLDAuMjUpOy1tb3otYm94LXNoYWRvdzowIDFweCAwIHJnYmEoMCwwLDAsMC4yNSk7Ym94LXNo
YWRvdzowIDFweCAwIHJnYmEoMCwwLDAsMC4yNSl9LmJ0bi1uYXZiYXIgLmljb24tYmFyKy5pY29u
LWJhcnttYXJnaW4tdG9wOjNweH0ubmF2YmFyIC5uYXY+bGk+LmRyb3Bkb3duLW1lbnU6YmVmb3Jl
e3Bvc2l0aW9uOmFic29sdXRlO3RvcDotN3B4O2xlZnQ6OXB4O2Rpc3BsYXk6aW5saW5lLWJsb2Nr
O2JvcmRlci1yaWdodDo3cHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLWJvdHRvbTo3cHggc29s
aWQgI2NjYztib3JkZXItbGVmdDo3cHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLWJvdHRvbS1j
b2xvcjpyZ2JhKDAsMCwwLDAuMik7Y29udGVudDonJ30ubmF2YmFyIC5uYXY+bGk+LmRyb3Bkb3du
LW1lbnU6YWZ0ZXJ7cG9zaXRpb246YWJzb2x1dGU7dG9wOi02cHg7bGVmdDoxMHB4O2Rpc3BsYXk6
aW5saW5lLWJsb2NrO2JvcmRlci1yaWdodDo2cHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLWJv
dHRvbTo2cHggc29saWQgI2ZmZjtib3JkZXItbGVmdDo2cHggc29saWQgdHJhbnNwYXJlbnQ7Y29u
dGVudDonJ30ubmF2YmFyLWZpeGVkLWJvdHRvbSAubmF2PmxpPi5kcm9wZG93bi1tZW51OmJlZm9y
ZXt0b3A6YXV0bztib3R0b206LTdweDtib3JkZXItdG9wOjdweCBzb2xpZCAjY2NjO2JvcmRlci1i
b3R0b206MDtib3JkZXItdG9wLWNvbG9yOnJnYmEoMCwwLDAsMC4yKX0ubmF2YmFyLWZpeGVkLWJv
dHRvbSAubmF2PmxpPi5kcm9wZG93bi1tZW51OmFmdGVye3RvcDphdXRvO2JvdHRvbTotNnB4O2Jv
cmRlci10b3A6NnB4IHNvbGlkICNmZmY7Ym9yZGVyLWJvdHRvbTowfS5uYXZiYXIgLm5hdiBsaS5k
cm9wZG93bj5hOmhvdmVyIC5jYXJldHtib3JkZXItdG9wLWNvbG9yOiM1NTU7Ym9yZGVyLWJvdHRv
bS1jb2xvcjojNTU1fS5uYXZiYXIgLm5hdiBsaS5kcm9wZG93bi5vcGVuPi5kcm9wZG93bi10b2dn
bGUsLm5hdmJhciAubmF2IGxpLmRyb3Bkb3duLmFjdGl2ZT4uZHJvcGRvd24tdG9nZ2xlLC5uYXZi
YXIgLm5hdiBsaS5kcm9wZG93bi5vcGVuLmFjdGl2ZT4uZHJvcGRvd24tdG9nZ2xle2NvbG9yOiM1
NTU7YmFja2dyb3VuZC1jb2xvcjojZTVlNWU1fS5uYXZiYXIgLm5hdiBsaS5kcm9wZG93bj4uZHJv
cGRvd24tdG9nZ2xlIC5jYXJldHtib3JkZXItdG9wLWNvbG9yOiM3Nzc7Ym9yZGVyLWJvdHRvbS1j
b2xvcjojNzc3fS5uYXZiYXIgLm5hdiBsaS5kcm9wZG93bi5vcGVuPi5kcm9wZG93bi10b2dnbGUg
LmNhcmV0LC5uYXZiYXIgLm5hdiBsaS5kcm9wZG93bi5hY3RpdmU+LmRyb3Bkb3duLXRvZ2dsZSAu
Y2FyZXQsLm5hdmJhciAubmF2IGxpLmRyb3Bkb3duLm9wZW4uYWN0aXZlPi5kcm9wZG93bi10b2dn
bGUgLmNhcmV0e2JvcmRlci10b3AtY29sb3I6IzU1NTtib3JkZXItYm90dG9tLWNvbG9yOiM1NTV9
Lm5hdmJhciAucHVsbC1yaWdodD5saT4uZHJvcGRvd24tbWVudSwubmF2YmFyIC5uYXY+bGk+LmRy
b3Bkb3duLW1lbnUucHVsbC1yaWdodHtyaWdodDowO2xlZnQ6YXV0b30ubmF2YmFyIC5wdWxsLXJp
Z2h0PmxpPi5kcm9wZG93bi1tZW51OmJlZm9yZSwubmF2YmFyIC5uYXY+bGk+LmRyb3Bkb3duLW1l
bnUucHVsbC1yaWdodDpiZWZvcmV7cmlnaHQ6MTJweDtsZWZ0OmF1dG99Lm5hdmJhciAucHVsbC1y
aWdodD5saT4uZHJvcGRvd24tbWVudTphZnRlciwubmF2YmFyIC5uYXY+bGk+LmRyb3Bkb3duLW1l
bnUucHVsbC1yaWdodDphZnRlcntyaWdodDoxM3B4O2xlZnQ6YXV0b30ubmF2YmFyIC5wdWxsLXJp
Z2h0PmxpPi5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1tZW51LC5uYXZiYXIgLm5hdj5saT4uZHJv
cGRvd24tbWVudS5wdWxsLXJpZ2h0IC5kcm9wZG93bi1tZW51e3JpZ2h0OjEwMCU7bGVmdDphdXRv
O21hcmdpbi1yaWdodDotMXB4O21hcmdpbi1sZWZ0OjA7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjZw
eCAwIDZweCA2cHg7LW1vei1ib3JkZXItcmFkaXVzOjZweCAwIDZweCA2cHg7Ym9yZGVyLXJhZGl1
czo2cHggMCA2cHggNnB4fS5uYXZiYXItaW52ZXJzZSAubmF2YmFyLWlubmVye2JhY2tncm91bmQt
Y29sb3I6IzFiMWIxYjtiYWNrZ3JvdW5kLWltYWdlOi1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwj
MjIyLCMxMTEpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsMCAwLDAg
MTAwJSxmcm9tKCMyMjIpLHRvKCMxMTEpKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFy
LWdyYWRpZW50KHRvcCwjMjIyLCMxMTEpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRp
ZW50KHRvcCwjMjIyLCMxMTEpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJv
dHRvbSwjMjIyLCMxMTEpO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14O2JvcmRlci1jb2xvcjoj
MjUyNTI1O2ZpbHRlcjpwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQo
c3RhcnRDb2xvcnN0cj0nI2ZmMjIyMjIyJyxlbmRDb2xvcnN0cj0nI2ZmMTExMTExJyxHcmFkaWVu
dFR5cGU9MCl9Lm5hdmJhci1pbnZlcnNlIC5icmFuZCwubmF2YmFyLWludmVyc2UgLm5hdj5saT5h
e2NvbG9yOiM5OTk7dGV4dC1zaGFkb3c6MCAtMXB4IDAgcmdiYSgwLDAsMCwwLjI1KX0ubmF2YmFy
LWludmVyc2UgLmJyYW5kOmhvdmVyLC5uYXZiYXItaW52ZXJzZSAubmF2PmxpPmE6aG92ZXJ7Y29s
b3I6I2ZmZn0ubmF2YmFyLWludmVyc2UgLmJyYW5ke2NvbG9yOiM5OTl9Lm5hdmJhci1pbnZlcnNl
IC5uYXZiYXItdGV4dHtjb2xvcjojOTk5fS5uYXZiYXItaW52ZXJzZSAubmF2PmxpPmE6Zm9jdXMs
Lm5hdmJhci1pbnZlcnNlIC5uYXY+bGk+YTpob3Zlcntjb2xvcjojZmZmO2JhY2tncm91bmQtY29s
b3I6dHJhbnNwYXJlbnR9Lm5hdmJhci1pbnZlcnNlIC5uYXYgLmFjdGl2ZT5hLC5uYXZiYXItaW52
ZXJzZSAubmF2IC5hY3RpdmU+YTpob3ZlciwubmF2YmFyLWludmVyc2UgLm5hdiAuYWN0aXZlPmE6
Zm9jdXN7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiMxMTF9Lm5hdmJhci1pbnZlcnNlIC5u
YXZiYXItbGlua3tjb2xvcjojOTk5fS5uYXZiYXItaW52ZXJzZSAubmF2YmFyLWxpbms6aG92ZXJ7
Y29sb3I6I2ZmZn0ubmF2YmFyLWludmVyc2UgLmRpdmlkZXItdmVydGljYWx7Ym9yZGVyLXJpZ2h0
LWNvbG9yOiMyMjI7Ym9yZGVyLWxlZnQtY29sb3I6IzExMX0ubmF2YmFyLWludmVyc2UgLm5hdiBs
aS5kcm9wZG93bi5vcGVuPi5kcm9wZG93bi10b2dnbGUsLm5hdmJhci1pbnZlcnNlIC5uYXYgbGku
ZHJvcGRvd24uYWN0aXZlPi5kcm9wZG93bi10b2dnbGUsLm5hdmJhci1pbnZlcnNlIC5uYXYgbGku
ZHJvcGRvd24ub3Blbi5hY3RpdmU+LmRyb3Bkb3duLXRvZ2dsZXtjb2xvcjojZmZmO2JhY2tncm91
bmQtY29sb3I6IzExMX0ubmF2YmFyLWludmVyc2UgLm5hdiBsaS5kcm9wZG93bj5hOmhvdmVyIC5j
YXJldHtib3JkZXItdG9wLWNvbG9yOiNmZmY7Ym9yZGVyLWJvdHRvbS1jb2xvcjojZmZmfS5uYXZi
YXItaW52ZXJzZSAubmF2IGxpLmRyb3Bkb3duPi5kcm9wZG93bi10b2dnbGUgLmNhcmV0e2JvcmRl
ci10b3AtY29sb3I6Izk5OTtib3JkZXItYm90dG9tLWNvbG9yOiM5OTl9Lm5hdmJhci1pbnZlcnNl
IC5uYXYgbGkuZHJvcGRvd24ub3Blbj4uZHJvcGRvd24tdG9nZ2xlIC5jYXJldCwubmF2YmFyLWlu
dmVyc2UgLm5hdiBsaS5kcm9wZG93bi5hY3RpdmU+LmRyb3Bkb3duLXRvZ2dsZSAuY2FyZXQsLm5h
dmJhci1pbnZlcnNlIC5uYXYgbGkuZHJvcGRvd24ub3Blbi5hY3RpdmU+LmRyb3Bkb3duLXRvZ2ds
ZSAuY2FyZXR7Ym9yZGVyLXRvcC1jb2xvcjojZmZmO2JvcmRlci1ib3R0b20tY29sb3I6I2ZmZn0u
bmF2YmFyLWludmVyc2UgLm5hdmJhci1zZWFyY2ggLnNlYXJjaC1xdWVyeXtjb2xvcjojZmZmO2Jh
Y2tncm91bmQtY29sb3I6IzUxNTE1MTtib3JkZXItY29sb3I6IzExMTstd2Via2l0LWJveC1zaGFk
b3c6aW5zZXQgMCAxcHggMnB4IHJnYmEoMCwwLDAsMC4xKSwwIDFweCAwIHJnYmEoMjU1LDI1NSwy
NTUsMC4xNSk7LW1vei1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMSks
MCAxcHggMCByZ2JhKDI1NSwyNTUsMjU1LDAuMTUpO2JveC1zaGFkb3c6aW5zZXQgMCAxcHggMnB4
IHJnYmEoMCwwLDAsMC4xKSwwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4xNSk7LXdlYmtpdC10
cmFuc2l0aW9uOm5vbmU7LW1vei10cmFuc2l0aW9uOm5vbmU7LW8tdHJhbnNpdGlvbjpub25lO3Ry
YW5zaXRpb246bm9uZX0ubmF2YmFyLWludmVyc2UgLm5hdmJhci1zZWFyY2ggLnNlYXJjaC1xdWVy
eTotbW96LXBsYWNlaG9sZGVye2NvbG9yOiNjY2N9Lm5hdmJhci1pbnZlcnNlIC5uYXZiYXItc2Vh
cmNoIC5zZWFyY2gtcXVlcnk6LW1zLWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOiNjY2N9Lm5hdmJh
ci1pbnZlcnNlIC5uYXZiYXItc2VhcmNoIC5zZWFyY2gtcXVlcnk6Oi13ZWJraXQtaW5wdXQtcGxh
Y2Vob2xkZXJ7Y29sb3I6I2NjY30ubmF2YmFyLWludmVyc2UgLm5hdmJhci1zZWFyY2ggLnNlYXJj
aC1xdWVyeTpmb2N1cywubmF2YmFyLWludmVyc2UgLm5hdmJhci1zZWFyY2ggLnNlYXJjaC1xdWVy
eS5mb2N1c2Vke3BhZGRpbmc6NXB4IDE1cHg7Y29sb3I6IzMzMzt0ZXh0LXNoYWRvdzowIDFweCAw
ICNmZmY7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjowO291dGxpbmU6MDstd2Via2l0LWJv
eC1zaGFkb3c6MCAwIDNweCByZ2JhKDAsMCwwLDAuMTUpOy1tb3otYm94LXNoYWRvdzowIDAgM3B4
IHJnYmEoMCwwLDAsMC4xNSk7Ym94LXNoYWRvdzowIDAgM3B4IHJnYmEoMCwwLDAsMC4xNSl9Lm5h
dmJhci1pbnZlcnNlIC5idG4tbmF2YmFye2NvbG9yOiNmZmY7dGV4dC1zaGFkb3c6MCAtMXB4IDAg
cmdiYSgwLDAsMCwwLjI1KTtiYWNrZ3JvdW5kLWNvbG9yOiMwZTBlMGU7KmJhY2tncm91bmQtY29s
b3I6IzA0MDQwNDtiYWNrZ3JvdW5kLWltYWdlOi1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwjMTUx
NTE1LCMwNDA0MDQpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsMCAw
LDAgMTAwJSxmcm9tKCMxNTE1MTUpLHRvKCMwNDA0MDQpKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJr
aXQtbGluZWFyLWdyYWRpZW50KHRvcCwjMTUxNTE1LCMwNDA0MDQpO2JhY2tncm91bmQtaW1hZ2U6
LW8tbGluZWFyLWdyYWRpZW50KHRvcCwjMTUxNTE1LCMwNDA0MDQpO2JhY2tncm91bmQtaW1hZ2U6
bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwjMTUxNTE1LCMwNDA0MDQpO2JhY2tncm91bmQtcmVw
ZWF0OnJlcGVhdC14O2JvcmRlci1jb2xvcjojMDQwNDA0ICMwNDA0MDQgIzAwMDtib3JkZXItY29s
b3I6cmdiYSgwLDAsMCwwLjEpIHJnYmEoMCwwLDAsMC4xKSByZ2JhKDAsMCwwLDAuMjUpO2ZpbHRl
cjpwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0
cj0nI2ZmMTUxNTE1JyxlbmRDb2xvcnN0cj0nI2ZmMDQwNDA0JyxHcmFkaWVudFR5cGU9MCk7Zmls
dGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChlbmFibGVkPWZh
bHNlKX0ubmF2YmFyLWludmVyc2UgLmJ0bi1uYXZiYXI6aG92ZXIsLm5hdmJhci1pbnZlcnNlIC5i
dG4tbmF2YmFyOmFjdGl2ZSwubmF2YmFyLWludmVyc2UgLmJ0bi1uYXZiYXIuYWN0aXZlLC5uYXZi
YXItaW52ZXJzZSAuYnRuLW5hdmJhci5kaXNhYmxlZCwubmF2YmFyLWludmVyc2UgLmJ0bi1uYXZi
YXJbZGlzYWJsZWRde2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojMDQwNDA0OypiYWNrZ3Jv
dW5kLWNvbG9yOiMwMDB9Lm5hdmJhci1pbnZlcnNlIC5idG4tbmF2YmFyOmFjdGl2ZSwubmF2YmFy
LWludmVyc2UgLmJ0bi1uYXZiYXIuYWN0aXZle2JhY2tncm91bmQtY29sb3I6IzAwMCBcOX0uYnJl
YWRjcnVtYntwYWRkaW5nOjhweCAxNXB4O21hcmdpbjowIDAgMjBweDtsaXN0LXN0eWxlOm5vbmU7
YmFja2dyb3VuZC1jb2xvcjojZjVmNWY1Oy13ZWJraXQtYm9yZGVyLXJhZGl1czo0cHg7LW1vei1i
b3JkZXItcmFkaXVzOjRweDtib3JkZXItcmFkaXVzOjRweH0uYnJlYWRjcnVtYj5saXtkaXNwbGF5
OmlubGluZS1ibG9jazsqZGlzcGxheTppbmxpbmU7dGV4dC1zaGFkb3c6MCAxcHggMCAjZmZmOyp6
b29tOjF9LmJyZWFkY3J1bWI+bGk+LmRpdmlkZXJ7cGFkZGluZzowIDVweDtjb2xvcjojY2NjfS5i
cmVhZGNydW1iPi5hY3RpdmV7Y29sb3I6Izk5OX0ucGFnaW5hdGlvbnttYXJnaW46MjBweCAwfS5w
YWdpbmF0aW9uIHVse2Rpc3BsYXk6aW5saW5lLWJsb2NrOypkaXNwbGF5OmlubGluZTttYXJnaW4t
Ym90dG9tOjA7bWFyZ2luLWxlZnQ6MDstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9y
ZGVyLXJhZGl1czo0cHg7Ym9yZGVyLXJhZGl1czo0cHg7Knpvb206MTstd2Via2l0LWJveC1zaGFk
b3c6MCAxcHggMnB4IHJnYmEoMCwwLDAsMC4wNSk7LW1vei1ib3gtc2hhZG93OjAgMXB4IDJweCBy
Z2JhKDAsMCwwLDAuMDUpO2JveC1zaGFkb3c6MCAxcHggMnB4IHJnYmEoMCwwLDAsMC4wNSl9LnBh
Z2luYXRpb24gdWw+bGl7ZGlzcGxheTppbmxpbmV9LnBhZ2luYXRpb24gdWw+bGk+YSwucGFnaW5h
dGlvbiB1bD5saT5zcGFue2Zsb2F0OmxlZnQ7cGFkZGluZzo0cHggMTJweDtsaW5lLWhlaWdodDoy
MHB4O3RleHQtZGVjb3JhdGlvbjpub25lO2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXI6MXB4
IHNvbGlkICNkZGQ7Ym9yZGVyLWxlZnQtd2lkdGg6MH0ucGFnaW5hdGlvbiB1bD5saT5hOmhvdmVy
LC5wYWdpbmF0aW9uIHVsPi5hY3RpdmU+YSwucGFnaW5hdGlvbiB1bD4uYWN0aXZlPnNwYW57YmFj
a2dyb3VuZC1jb2xvcjojZjVmNWY1fS5wYWdpbmF0aW9uIHVsPi5hY3RpdmU+YSwucGFnaW5hdGlv
biB1bD4uYWN0aXZlPnNwYW57Y29sb3I6Izk5OTtjdXJzb3I6ZGVmYXVsdH0ucGFnaW5hdGlvbiB1
bD4uZGlzYWJsZWQ+c3BhbiwucGFnaW5hdGlvbiB1bD4uZGlzYWJsZWQ+YSwucGFnaW5hdGlvbiB1
bD4uZGlzYWJsZWQ+YTpob3Zlcntjb2xvcjojOTk5O2N1cnNvcjpkZWZhdWx0O2JhY2tncm91bmQt
Y29sb3I6dHJhbnNwYXJlbnR9LnBhZ2luYXRpb24gdWw+bGk6Zmlyc3QtY2hpbGQ+YSwucGFnaW5h
dGlvbiB1bD5saTpmaXJzdC1jaGlsZD5zcGFue2JvcmRlci1sZWZ0LXdpZHRoOjFweDstd2Via2l0
LWJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6NHB4O2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6
NHB4Oy13ZWJraXQtYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czo0cHg7Ym9yZGVyLXRvcC1sZWZ0LXJh
ZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbWxlZnQ6NHB4Oy1tb3otYm9yZGVyLXJh
ZGl1cy10b3BsZWZ0OjRweH0ucGFnaW5hdGlvbiB1bD5saTpsYXN0LWNoaWxkPmEsLnBhZ2luYXRp
b24gdWw+bGk6bGFzdC1jaGlsZD5zcGFuey13ZWJraXQtYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6
NHB4O2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjRweDstd2Via2l0LWJvcmRlci1ib3R0b20tcmln
aHQtcmFkaXVzOjRweDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czo0cHg7LW1vei1ib3JkZXIt
cmFkaXVzLXRvcHJpZ2h0OjRweDstbW96LWJvcmRlci1yYWRpdXMtYm90dG9tcmlnaHQ6NHB4fS5w
YWdpbmF0aW9uLWNlbnRlcmVke3RleHQtYWxpZ246Y2VudGVyfS5wYWdpbmF0aW9uLXJpZ2h0e3Rl
eHQtYWxpZ246cmlnaHR9LnBhZ2luYXRpb24tbGFyZ2UgdWw+bGk+YSwucGFnaW5hdGlvbi1sYXJn
ZSB1bD5saT5zcGFue3BhZGRpbmc6MTFweCAxOXB4O2ZvbnQtc2l6ZToxNy41cHh9LnBhZ2luYXRp
b24tbGFyZ2UgdWw+bGk6Zmlyc3QtY2hpbGQ+YSwucGFnaW5hdGlvbi1sYXJnZSB1bD5saTpmaXJz
dC1jaGlsZD5zcGFuey13ZWJraXQtYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czo2cHg7Ym9yZGVy
LWJvdHRvbS1sZWZ0LXJhZGl1czo2cHg7LXdlYmtpdC1ib3JkZXItdG9wLWxlZnQtcmFkaXVzOjZw
eDtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjZweDstbW96LWJvcmRlci1yYWRpdXMtYm90dG9tbGVm
dDo2cHg7LW1vei1ib3JkZXItcmFkaXVzLXRvcGxlZnQ6NnB4fS5wYWdpbmF0aW9uLWxhcmdlIHVs
PmxpOmxhc3QtY2hpbGQ+YSwucGFnaW5hdGlvbi1sYXJnZSB1bD5saTpsYXN0LWNoaWxkPnNwYW57
LXdlYmtpdC1ib3JkZXItdG9wLXJpZ2h0LXJhZGl1czo2cHg7Ym9yZGVyLXRvcC1yaWdodC1yYWRp
dXM6NnB4Oy13ZWJraXQtYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6NnB4O2JvcmRlci1ib3R0
b20tcmlnaHQtcmFkaXVzOjZweDstbW96LWJvcmRlci1yYWRpdXMtdG9wcmlnaHQ6NnB4Oy1tb3ot
Ym9yZGVyLXJhZGl1cy1ib3R0b21yaWdodDo2cHh9LnBhZ2luYXRpb24tbWluaSB1bD5saTpmaXJz
dC1jaGlsZD5hLC5wYWdpbmF0aW9uLXNtYWxsIHVsPmxpOmZpcnN0LWNoaWxkPmEsLnBhZ2luYXRp
b24tbWluaSB1bD5saTpmaXJzdC1jaGlsZD5zcGFuLC5wYWdpbmF0aW9uLXNtYWxsIHVsPmxpOmZp
cnN0LWNoaWxkPnNwYW57LXdlYmtpdC1ib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjNweDtib3Jk
ZXItYm90dG9tLWxlZnQtcmFkaXVzOjNweDstd2Via2l0LWJvcmRlci10b3AtbGVmdC1yYWRpdXM6
M3B4O2JvcmRlci10b3AtbGVmdC1yYWRpdXM6M3B4Oy1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21s
ZWZ0OjNweDstbW96LWJvcmRlci1yYWRpdXMtdG9wbGVmdDozcHh9LnBhZ2luYXRpb24tbWluaSB1
bD5saTpsYXN0LWNoaWxkPmEsLnBhZ2luYXRpb24tc21hbGwgdWw+bGk6bGFzdC1jaGlsZD5hLC5w
YWdpbmF0aW9uLW1pbmkgdWw+bGk6bGFzdC1jaGlsZD5zcGFuLC5wYWdpbmF0aW9uLXNtYWxsIHVs
PmxpOmxhc3QtY2hpbGQ+c3Bhbnstd2Via2l0LWJvcmRlci10b3AtcmlnaHQtcmFkaXVzOjNweDti
b3JkZXItdG9wLXJpZ2h0LXJhZGl1czozcHg7LXdlYmtpdC1ib3JkZXItYm90dG9tLXJpZ2h0LXJh
ZGl1czozcHg7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6M3B4Oy1tb3otYm9yZGVyLXJhZGl1
cy10b3ByaWdodDozcHg7LW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbXJpZ2h0OjNweH0ucGFnaW5h
dGlvbi1zbWFsbCB1bD5saT5hLC5wYWdpbmF0aW9uLXNtYWxsIHVsPmxpPnNwYW57cGFkZGluZzoy
cHggMTBweDtmb250LXNpemU6MTEuOXB4fS5wYWdpbmF0aW9uLW1pbmkgdWw+bGk+YSwucGFnaW5h
dGlvbi1taW5pIHVsPmxpPnNwYW57cGFkZGluZzowIDZweDtmb250LXNpemU6MTAuNXB4fS5wYWdl
cnttYXJnaW46MjBweCAwO3RleHQtYWxpZ246Y2VudGVyO2xpc3Qtc3R5bGU6bm9uZTsqem9vbTox
fS5wYWdlcjpiZWZvcmUsLnBhZ2VyOmFmdGVye2Rpc3BsYXk6dGFibGU7bGluZS1oZWlnaHQ6MDtj
b250ZW50OiIifS5wYWdlcjphZnRlcntjbGVhcjpib3RofS5wYWdlciBsaXtkaXNwbGF5OmlubGlu
ZX0ucGFnZXIgbGk+YSwucGFnZXIgbGk+c3BhbntkaXNwbGF5OmlubGluZS1ibG9jaztwYWRkaW5n
OjVweCAxNHB4O2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNkZGQ7LXdl
YmtpdC1ib3JkZXItcmFkaXVzOjE1cHg7LW1vei1ib3JkZXItcmFkaXVzOjE1cHg7Ym9yZGVyLXJh
ZGl1czoxNXB4fS5wYWdlciBsaT5hOmhvdmVye3RleHQtZGVjb3JhdGlvbjpub25lO2JhY2tncm91
bmQtY29sb3I6I2Y1ZjVmNX0ucGFnZXIgLm5leHQ+YSwucGFnZXIgLm5leHQ+c3BhbntmbG9hdDpy
aWdodH0ucGFnZXIgLnByZXZpb3VzPmEsLnBhZ2VyIC5wcmV2aW91cz5zcGFue2Zsb2F0OmxlZnR9
LnBhZ2VyIC5kaXNhYmxlZD5hLC5wYWdlciAuZGlzYWJsZWQ+YTpob3ZlciwucGFnZXIgLmRpc2Fi
bGVkPnNwYW57Y29sb3I6Izk5OTtjdXJzb3I6ZGVmYXVsdDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9
Lm1vZGFsLWJhY2tkcm9we3Bvc2l0aW9uOmZpeGVkO3RvcDowO3JpZ2h0OjA7Ym90dG9tOjA7bGVm
dDowO3otaW5kZXg6MTA0MDtiYWNrZ3JvdW5kLWNvbG9yOiMwMDB9Lm1vZGFsLWJhY2tkcm9wLmZh
ZGV7b3BhY2l0eTowfS5tb2RhbC1iYWNrZHJvcCwubW9kYWwtYmFja2Ryb3AuZmFkZS5pbntvcGFj
aXR5Oi44O2ZpbHRlcjphbHBoYShvcGFjaXR5PTgwKX0ubW9kYWx7cG9zaXRpb246Zml4ZWQ7dG9w
OjEwJTtsZWZ0OjUwJTt6LWluZGV4OjEwNTA7d2lkdGg6NTYwcHg7bWFyZ2luLWxlZnQ6LTI4MHB4
O2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICM5OTk7Ym9yZGVyOjFweCBz
b2xpZCByZ2JhKDAsMCwwLDAuMyk7KmJvcmRlcjoxcHggc29saWQgIzk5OTstd2Via2l0LWJvcmRl
ci1yYWRpdXM6NnB4Oy1tb3otYm9yZGVyLXJhZGl1czo2cHg7Ym9yZGVyLXJhZGl1czo2cHg7b3V0
bGluZTowOy13ZWJraXQtYm94LXNoYWRvdzowIDNweCA3cHggcmdiYSgwLDAsMCwwLjMpOy1tb3ot
Ym94LXNoYWRvdzowIDNweCA3cHggcmdiYSgwLDAsMCwwLjMpO2JveC1zaGFkb3c6MCAzcHggN3B4
IHJnYmEoMCwwLDAsMC4zKTstd2Via2l0LWJhY2tncm91bmQtY2xpcDpwYWRkaW5nLWJveDstbW96
LWJhY2tncm91bmQtY2xpcDpwYWRkaW5nLWJveDtiYWNrZ3JvdW5kLWNsaXA6cGFkZGluZy1ib3h9
Lm1vZGFsLmZhZGV7dG9wOi0yNSU7LXdlYmtpdC10cmFuc2l0aW9uOm9wYWNpdHkgLjNzIGxpbmVh
cix0b3AgLjNzIGVhc2Utb3V0Oy1tb3otdHJhbnNpdGlvbjpvcGFjaXR5IC4zcyBsaW5lYXIsdG9w
IC4zcyBlYXNlLW91dDstby10cmFuc2l0aW9uOm9wYWNpdHkgLjNzIGxpbmVhcix0b3AgLjNzIGVh
c2Utb3V0O3RyYW5zaXRpb246b3BhY2l0eSAuM3MgbGluZWFyLHRvcCAuM3MgZWFzZS1vdXR9Lm1v
ZGFsLmZhZGUuaW57dG9wOjEwJX0ubW9kYWwtaGVhZGVye3BhZGRpbmc6OXB4IDE1cHg7Ym9yZGVy
LWJvdHRvbToxcHggc29saWQgI2VlZX0ubW9kYWwtaGVhZGVyIC5jbG9zZXttYXJnaW4tdG9wOjJw
eH0ubW9kYWwtaGVhZGVyIGgze21hcmdpbjowO2xpbmUtaGVpZ2h0OjMwcHh9Lm1vZGFsLWJvZHl7
cG9zaXRpb246cmVsYXRpdmU7bWF4LWhlaWdodDo0MDBweDtwYWRkaW5nOjE1cHg7b3ZlcmZsb3ct
eTphdXRvfS5tb2RhbC1mb3Jte21hcmdpbi1ib3R0b206MH0ubW9kYWwtZm9vdGVye3BhZGRpbmc6
MTRweCAxNXB4IDE1cHg7bWFyZ2luLWJvdHRvbTowO3RleHQtYWxpZ246cmlnaHQ7YmFja2dyb3Vu
ZC1jb2xvcjojZjVmNWY1O2JvcmRlci10b3A6MXB4IHNvbGlkICNkZGQ7LXdlYmtpdC1ib3JkZXIt
cmFkaXVzOjAgMCA2cHggNnB4Oy1tb3otYm9yZGVyLXJhZGl1czowIDAgNnB4IDZweDtib3JkZXIt
cmFkaXVzOjAgMCA2cHggNnB4Oyp6b29tOjE7LXdlYmtpdC1ib3gtc2hhZG93Omluc2V0IDAgMXB4
IDAgI2ZmZjstbW96LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMCAjZmZmO2JveC1zaGFkb3c6aW5z
ZXQgMCAxcHggMCAjZmZmfS5tb2RhbC1mb290ZXI6YmVmb3JlLC5tb2RhbC1mb290ZXI6YWZ0ZXJ7
ZGlzcGxheTp0YWJsZTtsaW5lLWhlaWdodDowO2NvbnRlbnQ6IiJ9Lm1vZGFsLWZvb3RlcjphZnRl
cntjbGVhcjpib3RofS5tb2RhbC1mb290ZXIgLmJ0bisuYnRue21hcmdpbi1ib3R0b206MDttYXJn
aW4tbGVmdDo1cHh9Lm1vZGFsLWZvb3RlciAuYnRuLWdyb3VwIC5idG4rLmJ0bnttYXJnaW4tbGVm
dDotMXB4fS5tb2RhbC1mb290ZXIgLmJ0bi1ibG9jaysuYnRuLWJsb2Nre21hcmdpbi1sZWZ0OjB9
LnRvb2x0aXB7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDMwO2Rpc3BsYXk6YmxvY2s7cGFk
ZGluZzo1cHg7Zm9udC1zaXplOjExcHg7b3BhY2l0eTowO2ZpbHRlcjphbHBoYShvcGFjaXR5PTAp
O3Zpc2liaWxpdHk6dmlzaWJsZX0udG9vbHRpcC5pbntvcGFjaXR5Oi44O2ZpbHRlcjphbHBoYShv
cGFjaXR5PTgwKX0udG9vbHRpcC50b3B7bWFyZ2luLXRvcDotM3B4fS50b29sdGlwLnJpZ2h0e21h
cmdpbi1sZWZ0OjNweH0udG9vbHRpcC5ib3R0b217bWFyZ2luLXRvcDozcHh9LnRvb2x0aXAubGVm
dHttYXJnaW4tbGVmdDotM3B4fS50b29sdGlwLWlubmVye21heC13aWR0aDoyMDBweDtwYWRkaW5n
OjNweCA4cHg7Y29sb3I6I2ZmZjt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9u
ZTtiYWNrZ3JvdW5kLWNvbG9yOiMwMDA7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDstbW96LWJv
cmRlci1yYWRpdXM6NHB4O2JvcmRlci1yYWRpdXM6NHB4fS50b29sdGlwLWFycm93e3Bvc2l0aW9u
OmFic29sdXRlO3dpZHRoOjA7aGVpZ2h0OjA7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50O2JvcmRl
ci1zdHlsZTpzb2xpZH0udG9vbHRpcC50b3AgLnRvb2x0aXAtYXJyb3d7Ym90dG9tOjA7bGVmdDo1
MCU7bWFyZ2luLWxlZnQ6LTVweDtib3JkZXItdG9wLWNvbG9yOiMwMDA7Ym9yZGVyLXdpZHRoOjVw
eCA1cHggMH0udG9vbHRpcC5yaWdodCAudG9vbHRpcC1hcnJvd3t0b3A6NTAlO2xlZnQ6MDttYXJn
aW4tdG9wOi01cHg7Ym9yZGVyLXJpZ2h0LWNvbG9yOiMwMDA7Ym9yZGVyLXdpZHRoOjVweCA1cHgg
NXB4IDB9LnRvb2x0aXAubGVmdCAudG9vbHRpcC1hcnJvd3t0b3A6NTAlO3JpZ2h0OjA7bWFyZ2lu
LXRvcDotNXB4O2JvcmRlci1sZWZ0LWNvbG9yOiMwMDA7Ym9yZGVyLXdpZHRoOjVweCAwIDVweCA1
cHh9LnRvb2x0aXAuYm90dG9tIC50b29sdGlwLWFycm93e3RvcDowO2xlZnQ6NTAlO21hcmdpbi1s
ZWZ0Oi01cHg7Ym9yZGVyLWJvdHRvbS1jb2xvcjojMDAwO2JvcmRlci13aWR0aDowIDVweCA1cHh9
LnBvcG92ZXJ7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO3otaW5kZXg6MTAxMDtkaXNw
bGF5Om5vbmU7d2lkdGg6MjM2cHg7cGFkZGluZzoxcHg7dGV4dC1hbGlnbjpsZWZ0O3doaXRlLXNw
YWNlOm5vcm1hbDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2Jv
cmRlcjoxcHggc29saWQgcmdiYSgwLDAsMCwwLjIpOy13ZWJraXQtYm9yZGVyLXJhZGl1czo2cHg7
LW1vei1ib3JkZXItcmFkaXVzOjZweDtib3JkZXItcmFkaXVzOjZweDstd2Via2l0LWJveC1zaGFk
b3c6MCA1cHggMTBweCByZ2JhKDAsMCwwLDAuMik7LW1vei1ib3gtc2hhZG93OjAgNXB4IDEwcHgg
cmdiYSgwLDAsMCwwLjIpO2JveC1zaGFkb3c6MCA1cHggMTBweCByZ2JhKDAsMCwwLDAuMik7LXdl
YmtpdC1iYWNrZ3JvdW5kLWNsaXA6cGFkZGluZy1ib3g7LW1vei1iYWNrZ3JvdW5kLWNsaXA6cGFk
ZGluZztiYWNrZ3JvdW5kLWNsaXA6cGFkZGluZy1ib3h9LnBvcG92ZXIudG9we21hcmdpbi10b3A6
LTEwcHh9LnBvcG92ZXIucmlnaHR7bWFyZ2luLWxlZnQ6MTBweH0ucG9wb3Zlci5ib3R0b217bWFy
Z2luLXRvcDoxMHB4fS5wb3BvdmVyLmxlZnR7bWFyZ2luLWxlZnQ6LTEwcHh9LnBvcG92ZXItdGl0
bGV7cGFkZGluZzo4cHggMTRweDttYXJnaW46MDtmb250LXNpemU6MTRweDtmb250LXdlaWdodDpu
b3JtYWw7bGluZS1oZWlnaHQ6MThweDtiYWNrZ3JvdW5kLWNvbG9yOiNmN2Y3Zjc7Ym9yZGVyLWJv
dHRvbToxcHggc29saWQgI2ViZWJlYjstd2Via2l0LWJvcmRlci1yYWRpdXM6NXB4IDVweCAwIDA7
LW1vei1ib3JkZXItcmFkaXVzOjVweCA1cHggMCAwO2JvcmRlci1yYWRpdXM6NXB4IDVweCAwIDB9
LnBvcG92ZXItY29udGVudHtwYWRkaW5nOjlweCAxNHB4fS5wb3BvdmVyIC5hcnJvdywucG9wb3Zl
ciAuYXJyb3c6YWZ0ZXJ7cG9zaXRpb246YWJzb2x1dGU7ZGlzcGxheTpibG9jazt3aWR0aDowO2hl
aWdodDowO2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudDtib3JkZXItc3R5bGU6c29saWR9LnBvcG92
ZXIgLmFycm93e2JvcmRlci13aWR0aDoxMXB4fS5wb3BvdmVyIC5hcnJvdzphZnRlcntib3JkZXIt
d2lkdGg6MTBweDtjb250ZW50OiIifS5wb3BvdmVyLnRvcCAuYXJyb3d7Ym90dG9tOi0xMXB4O2xl
ZnQ6NTAlO21hcmdpbi1sZWZ0Oi0xMXB4O2JvcmRlci10b3AtY29sb3I6Izk5OTtib3JkZXItdG9w
LWNvbG9yOnJnYmEoMCwwLDAsMC4yNSk7Ym9yZGVyLWJvdHRvbS13aWR0aDowfS5wb3BvdmVyLnRv
cCAuYXJyb3c6YWZ0ZXJ7Ym90dG9tOjFweDttYXJnaW4tbGVmdDotMTBweDtib3JkZXItdG9wLWNv
bG9yOiNmZmY7Ym9yZGVyLWJvdHRvbS13aWR0aDowfS5wb3BvdmVyLnJpZ2h0IC5hcnJvd3t0b3A6
NTAlO2xlZnQ6LTExcHg7bWFyZ2luLXRvcDotMTFweDtib3JkZXItcmlnaHQtY29sb3I6Izk5OTti
b3JkZXItcmlnaHQtY29sb3I6cmdiYSgwLDAsMCwwLjI1KTtib3JkZXItbGVmdC13aWR0aDowfS5w
b3BvdmVyLnJpZ2h0IC5hcnJvdzphZnRlcntib3R0b206LTEwcHg7bGVmdDoxcHg7Ym9yZGVyLXJp
Z2h0LWNvbG9yOiNmZmY7Ym9yZGVyLWxlZnQtd2lkdGg6MH0ucG9wb3Zlci5ib3R0b20gLmFycm93
e3RvcDotMTFweDtsZWZ0OjUwJTttYXJnaW4tbGVmdDotMTFweDtib3JkZXItYm90dG9tLWNvbG9y
OiM5OTk7Ym9yZGVyLWJvdHRvbS1jb2xvcjpyZ2JhKDAsMCwwLDAuMjUpO2JvcmRlci10b3Atd2lk
dGg6MH0ucG9wb3Zlci5ib3R0b20gLmFycm93OmFmdGVye3RvcDoxcHg7bWFyZ2luLWxlZnQ6LTEw
cHg7Ym9yZGVyLWJvdHRvbS1jb2xvcjojZmZmO2JvcmRlci10b3Atd2lkdGg6MH0ucG9wb3Zlci5s
ZWZ0IC5hcnJvd3t0b3A6NTAlO3JpZ2h0Oi0xMXB4O21hcmdpbi10b3A6LTExcHg7Ym9yZGVyLWxl
ZnQtY29sb3I6Izk5OTtib3JkZXItbGVmdC1jb2xvcjpyZ2JhKDAsMCwwLDAuMjUpO2JvcmRlci1y
aWdodC13aWR0aDowfS5wb3BvdmVyLmxlZnQgLmFycm93OmFmdGVye3JpZ2h0OjFweDtib3R0b206
LTEwcHg7Ym9yZGVyLWxlZnQtY29sb3I6I2ZmZjtib3JkZXItcmlnaHQtd2lkdGg6MH0udGh1bWJu
YWlsc3ttYXJnaW4tbGVmdDotMjBweDtsaXN0LXN0eWxlOm5vbmU7Knpvb206MX0udGh1bWJuYWls
czpiZWZvcmUsLnRodW1ibmFpbHM6YWZ0ZXJ7ZGlzcGxheTp0YWJsZTtsaW5lLWhlaWdodDowO2Nv
bnRlbnQ6IiJ9LnRodW1ibmFpbHM6YWZ0ZXJ7Y2xlYXI6Ym90aH0ucm93LWZsdWlkIC50aHVtYm5h
aWxze21hcmdpbi1sZWZ0OjB9LnRodW1ibmFpbHM+bGl7ZmxvYXQ6bGVmdDttYXJnaW4tYm90dG9t
OjIwcHg7bWFyZ2luLWxlZnQ6MjBweH0udGh1bWJuYWlse2Rpc3BsYXk6YmxvY2s7cGFkZGluZzo0
cHg7bGluZS1oZWlnaHQ6MjBweDtib3JkZXI6MXB4IHNvbGlkICNkZGQ7LXdlYmtpdC1ib3JkZXIt
cmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4O2JvcmRlci1yYWRpdXM6NHB4Oy13ZWJr
aXQtYm94LXNoYWRvdzowIDFweCAzcHggcmdiYSgwLDAsMCwwLjA1NSk7LW1vei1ib3gtc2hhZG93
OjAgMXB4IDNweCByZ2JhKDAsMCwwLDAuMDU1KTtib3gtc2hhZG93OjAgMXB4IDNweCByZ2JhKDAs
MCwwLDAuMDU1KTstd2Via2l0LXRyYW5zaXRpb246YWxsIC4ycyBlYXNlLWluLW91dDstbW96LXRy
YW5zaXRpb246YWxsIC4ycyBlYXNlLWluLW91dDstby10cmFuc2l0aW9uOmFsbCAuMnMgZWFzZS1p
bi1vdXQ7dHJhbnNpdGlvbjphbGwgLjJzIGVhc2UtaW4tb3V0fWEudGh1bWJuYWlsOmhvdmVye2Jv
cmRlci1jb2xvcjojMDhjOy13ZWJraXQtYm94LXNoYWRvdzowIDFweCA0cHggcmdiYSgwLDEwNSwy
MTQsMC4yNSk7LW1vei1ib3gtc2hhZG93OjAgMXB4IDRweCByZ2JhKDAsMTA1LDIxNCwwLjI1KTti
b3gtc2hhZG93OjAgMXB4IDRweCByZ2JhKDAsMTA1LDIxNCwwLjI1KX0udGh1bWJuYWlsPmltZ3tk
aXNwbGF5OmJsb2NrO21heC13aWR0aDoxMDAlO21hcmdpbi1yaWdodDphdXRvO21hcmdpbi1sZWZ0
OmF1dG99LnRodW1ibmFpbCAuY2FwdGlvbntwYWRkaW5nOjlweDtjb2xvcjojNTU1fS5tZWRpYSwu
bWVkaWEtYm9keXtvdmVyZmxvdzpoaWRkZW47Km92ZXJmbG93OnZpc2libGU7em9vbToxfS5tZWRp
YSwubWVkaWEgLm1lZGlhe21hcmdpbi10b3A6MTVweH0ubWVkaWE6Zmlyc3QtY2hpbGR7bWFyZ2lu
LXRvcDowfS5tZWRpYS1vYmplY3R7ZGlzcGxheTpibG9ja30ubWVkaWEtaGVhZGluZ3ttYXJnaW46
MCAwIDVweH0ubWVkaWEgLnB1bGwtbGVmdHttYXJnaW4tcmlnaHQ6MTBweH0ubWVkaWEgLnB1bGwt
cmlnaHR7bWFyZ2luLWxlZnQ6MTBweH0ubWVkaWEtbGlzdHttYXJnaW4tbGVmdDowO2xpc3Qtc3R5
bGU6bm9uZX0ubGFiZWwsLmJhZGdle2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmc6MnB4IDRw
eDtmb250LXNpemU6MTEuODQ0cHg7Zm9udC13ZWlnaHQ6Ym9sZDtsaW5lLWhlaWdodDoxNHB4O2Nv
bG9yOiNmZmY7dGV4dC1zaGFkb3c6MCAtMXB4IDAgcmdiYSgwLDAsMCwwLjI1KTt3aGl0ZS1zcGFj
ZTpub3dyYXA7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7YmFja2dyb3VuZC1jb2xvcjojOTk5fS5s
YWJlbHstd2Via2l0LWJvcmRlci1yYWRpdXM6M3B4Oy1tb3otYm9yZGVyLXJhZGl1czozcHg7Ym9y
ZGVyLXJhZGl1czozcHh9LmJhZGdle3BhZGRpbmctcmlnaHQ6OXB4O3BhZGRpbmctbGVmdDo5cHg7
LXdlYmtpdC1ib3JkZXItcmFkaXVzOjlweDstbW96LWJvcmRlci1yYWRpdXM6OXB4O2JvcmRlci1y
YWRpdXM6OXB4fS5sYWJlbDplbXB0eSwuYmFkZ2U6ZW1wdHl7ZGlzcGxheTpub25lfWEubGFiZWw6
aG92ZXIsYS5iYWRnZTpob3Zlcntjb2xvcjojZmZmO3RleHQtZGVjb3JhdGlvbjpub25lO2N1cnNv
cjpwb2ludGVyfS5sYWJlbC1pbXBvcnRhbnQsLmJhZGdlLWltcG9ydGFudHtiYWNrZ3JvdW5kLWNv
bG9yOiNiOTRhNDh9LmxhYmVsLWltcG9ydGFudFtocmVmXSwuYmFkZ2UtaW1wb3J0YW50W2hyZWZd
e2JhY2tncm91bmQtY29sb3I6Izk1M2IzOX0ubGFiZWwtd2FybmluZywuYmFkZ2Utd2FybmluZ3ti
YWNrZ3JvdW5kLWNvbG9yOiNmODk0MDZ9LmxhYmVsLXdhcm5pbmdbaHJlZl0sLmJhZGdlLXdhcm5p
bmdbaHJlZl17YmFja2dyb3VuZC1jb2xvcjojYzY3NjA1fS5sYWJlbC1zdWNjZXNzLC5iYWRnZS1z
dWNjZXNze2JhY2tncm91bmQtY29sb3I6IzQ2ODg0N30ubGFiZWwtc3VjY2Vzc1tocmVmXSwuYmFk
Z2Utc3VjY2Vzc1tocmVmXXtiYWNrZ3JvdW5kLWNvbG9yOiMzNTY2MzV9LmxhYmVsLWluZm8sLmJh
ZGdlLWluZm97YmFja2dyb3VuZC1jb2xvcjojM2E4N2FkfS5sYWJlbC1pbmZvW2hyZWZdLC5iYWRn
ZS1pbmZvW2hyZWZde2JhY2tncm91bmQtY29sb3I6IzJkNjk4N30ubGFiZWwtaW52ZXJzZSwuYmFk
Z2UtaW52ZXJzZXtiYWNrZ3JvdW5kLWNvbG9yOiMzMzN9LmxhYmVsLWludmVyc2VbaHJlZl0sLmJh
ZGdlLWludmVyc2VbaHJlZl17YmFja2dyb3VuZC1jb2xvcjojMWExYTFhfS5idG4gLmxhYmVsLC5i
dG4gLmJhZGdle3Bvc2l0aW9uOnJlbGF0aXZlO3RvcDotMXB4fS5idG4tbWluaSAubGFiZWwsLmJ0
bi1taW5pIC5iYWRnZXt0b3A6MH1ALXdlYmtpdC1rZXlmcmFtZXMgcHJvZ3Jlc3MtYmFyLXN0cmlw
ZXN7ZnJvbXtiYWNrZ3JvdW5kLXBvc2l0aW9uOjQwcHggMH10b3tiYWNrZ3JvdW5kLXBvc2l0aW9u
OjAgMH19QC1tb3ota2V5ZnJhbWVzIHByb2dyZXNzLWJhci1zdHJpcGVze2Zyb217YmFja2dyb3Vu
ZC1wb3NpdGlvbjo0MHB4IDB9dG97YmFja2dyb3VuZC1wb3NpdGlvbjowIDB9fUAtbXMta2V5ZnJh
bWVzIHByb2dyZXNzLWJhci1zdHJpcGVze2Zyb217YmFja2dyb3VuZC1wb3NpdGlvbjo0MHB4IDB9
dG97YmFja2dyb3VuZC1wb3NpdGlvbjowIDB9fUAtby1rZXlmcmFtZXMgcHJvZ3Jlc3MtYmFyLXN0
cmlwZXN7ZnJvbXtiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgMH10b3tiYWNrZ3JvdW5kLXBvc2l0aW9u
OjQwcHggMH19QGtleWZyYW1lcyBwcm9ncmVzcy1iYXItc3RyaXBlc3tmcm9te2JhY2tncm91bmQt
cG9zaXRpb246NDBweCAwfXRve2JhY2tncm91bmQtcG9zaXRpb246MCAwfX0ucHJvZ3Jlc3N7aGVp
Z2h0OjIwcHg7bWFyZ2luLWJvdHRvbToyMHB4O292ZXJmbG93OmhpZGRlbjtiYWNrZ3JvdW5kLWNv
bG9yOiNmN2Y3Zjc7YmFja2dyb3VuZC1pbWFnZTotbW96LWxpbmVhci1ncmFkaWVudCh0b3AsI2Y1
ZjVmNSwjZjlmOWY5KTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtZ3JhZGllbnQobGluZWFyLDAg
MCwwIDEwMCUsZnJvbSgjZjVmNWY1KSx0bygjZjlmOWY5KSk7YmFja2dyb3VuZC1pbWFnZTotd2Vi
a2l0LWxpbmVhci1ncmFkaWVudCh0b3AsI2Y1ZjVmNSwjZjlmOWY5KTtiYWNrZ3JvdW5kLWltYWdl
Oi1vLWxpbmVhci1ncmFkaWVudCh0b3AsI2Y1ZjVmNSwjZjlmOWY5KTtiYWNrZ3JvdW5kLWltYWdl
OmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sI2Y1ZjVmNSwjZjlmOWY5KTtiYWNrZ3JvdW5kLXJl
cGVhdDpyZXBlYXQteDstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1
czo0cHg7Ym9yZGVyLXJhZGl1czo0cHg7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1p
Y3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmZmNWY1ZjUnLGVuZENvbG9yc3RyPScj
ZmZmOWY5ZjknLEdyYWRpZW50VHlwZT0wKTstd2Via2l0LWJveC1zaGFkb3c6aW5zZXQgMCAxcHgg
MnB4IHJnYmEoMCwwLDAsMC4xKTstbW96LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMnB4IHJnYmEo
MCwwLDAsMC4xKTtib3gtc2hhZG93Omluc2V0IDAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMSl9LnBy
b2dyZXNzIC5iYXJ7ZmxvYXQ6bGVmdDt3aWR0aDowO2hlaWdodDoxMDAlO2ZvbnQtc2l6ZToxMnB4
O2NvbG9yOiNmZmY7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1zaGFkb3c6MCAtMXB4IDAgcmdiYSgw
LDAsMCwwLjI1KTtiYWNrZ3JvdW5kLWNvbG9yOiMwZTkwZDI7YmFja2dyb3VuZC1pbWFnZTotbW96
LWxpbmVhci1ncmFkaWVudCh0b3AsIzE0OWJkZiwjMDQ4MGJlKTtiYWNrZ3JvdW5kLWltYWdlOi13
ZWJraXQtZ3JhZGllbnQobGluZWFyLDAgMCwwIDEwMCUsZnJvbSgjMTQ5YmRmKSx0bygjMDQ4MGJl
KSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AsIzE0OWJkZiwj
MDQ4MGJlKTtiYWNrZ3JvdW5kLWltYWdlOi1vLWxpbmVhci1ncmFkaWVudCh0b3AsIzE0OWJkZiwj
MDQ4MGJlKTtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIzE0OWJk
ZiwjMDQ4MGJlKTtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteDtmaWx0ZXI6cHJvZ2lkOkRYSW1h
Z2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyNmZjE0OWJkZics
ZW5kQ29sb3JzdHI9JyNmZjA0ODBiZScsR3JhZGllbnRUeXBlPTApOy13ZWJraXQtYm94LXNoYWRv
dzppbnNldCAwIC0xcHggMCByZ2JhKDAsMCwwLDAuMTUpOy1tb3otYm94LXNoYWRvdzppbnNldCAw
IC0xcHggMCByZ2JhKDAsMCwwLDAuMTUpO2JveC1zaGFkb3c6aW5zZXQgMCAtMXB4IDAgcmdiYSgw
LDAsMCwwLjE1KTstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDstbW96LWJveC1zaXppbmc6
Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3g7LXdlYmtpdC10cmFuc2l0aW9uOndpZHRo
IC42cyBlYXNlOy1tb3otdHJhbnNpdGlvbjp3aWR0aCAuNnMgZWFzZTstby10cmFuc2l0aW9uOndp
ZHRoIC42cyBlYXNlO3RyYW5zaXRpb246d2lkdGggLjZzIGVhc2V9LnByb2dyZXNzIC5iYXIrLmJh
cnstd2Via2l0LWJveC1zaGFkb3c6aW5zZXQgMXB4IDAgMCByZ2JhKDAsMCwwLDAuMTUpLGluc2V0
IDAgLTFweCAwIHJnYmEoMCwwLDAsMC4xNSk7LW1vei1ib3gtc2hhZG93Omluc2V0IDFweCAwIDAg
cmdiYSgwLDAsMCwwLjE1KSxpbnNldCAwIC0xcHggMCByZ2JhKDAsMCwwLDAuMTUpO2JveC1zaGFk
b3c6aW5zZXQgMXB4IDAgMCByZ2JhKDAsMCwwLDAuMTUpLGluc2V0IDAgLTFweCAwIHJnYmEoMCww
LDAsMC4xNSl9LnByb2dyZXNzLXN0cmlwZWQgLmJhcntiYWNrZ3JvdW5kLWNvbG9yOiMxNDliZGY7
YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciwwIDEwMCUsMTAwJSAwLGNv
bG9yLXN0b3AoMC4yNSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpKSxjb2xvci1zdG9wKDAuMjUsdHJh
bnNwYXJlbnQpLGNvbG9yLXN0b3AoMC41LHRyYW5zcGFyZW50KSxjb2xvci1zdG9wKDAuNSxyZ2Jh
KDI1NSwyNTUsMjU1LDAuMTUpKSxjb2xvci1zdG9wKDAuNzUscmdiYSgyNTUsMjU1LDI1NSwwLjE1
KSksY29sb3Itc3RvcCgwLjc1LHRyYW5zcGFyZW50KSx0byh0cmFuc3BhcmVudCkpO2JhY2tncm91
bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQoNDVkZWcscmdiYSgyNTUsMjU1LDI1NSww
LjE1KSAyNSUsdHJhbnNwYXJlbnQgMjUlLHRyYW5zcGFyZW50IDUwJSxyZ2JhKDI1NSwyNTUsMjU1
LDAuMTUpIDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDc1JSx0cmFuc3BhcmVudCA3NSUsdHJh
bnNwYXJlbnQpO2JhY2tncm91bmQtaW1hZ2U6LW1vei1saW5lYXItZ3JhZGllbnQoNDVkZWcscmdi
YSgyNTUsMjU1LDI1NSwwLjE1KSAyNSUsdHJhbnNwYXJlbnQgMjUlLHRyYW5zcGFyZW50IDUwJSxy
Z2JhKDI1NSwyNTUsMjU1LDAuMTUpIDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDc1JSx0cmFu
c3BhcmVudCA3NSUsdHJhbnNwYXJlbnQpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRp
ZW50KDQ1ZGVnLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgMjUlLHRyYW5zcGFyZW50IDI1JSx0cmFu
c3BhcmVudCA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA1MCUscmdiYSgyNTUsMjU1LDI1NSww
LjE1KSA3NSUsdHJhbnNwYXJlbnQgNzUlLHRyYW5zcGFyZW50KTtiYWNrZ3JvdW5kLWltYWdlOmxp
bmVhci1ncmFkaWVudCg0NWRlZyxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDI1JSx0cmFuc3BhcmVu
dCAyNSUsdHJhbnNwYXJlbnQgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNTAlLHJnYmEoMjU1
LDI1NSwyNTUsMC4xNSkgNzUlLHRyYW5zcGFyZW50IDc1JSx0cmFuc3BhcmVudCk7LXdlYmtpdC1i
YWNrZ3JvdW5kLXNpemU6NDBweCA0MHB4Oy1tb3otYmFja2dyb3VuZC1zaXplOjQwcHggNDBweDst
by1iYWNrZ3JvdW5kLXNpemU6NDBweCA0MHB4O2JhY2tncm91bmQtc2l6ZTo0MHB4IDQwcHh9LnBy
b2dyZXNzLmFjdGl2ZSAuYmFyey13ZWJraXQtYW5pbWF0aW9uOnByb2dyZXNzLWJhci1zdHJpcGVz
IDJzIGxpbmVhciBpbmZpbml0ZTstbW96LWFuaW1hdGlvbjpwcm9ncmVzcy1iYXItc3RyaXBlcyAy
cyBsaW5lYXIgaW5maW5pdGU7LW1zLWFuaW1hdGlvbjpwcm9ncmVzcy1iYXItc3RyaXBlcyAycyBs
aW5lYXIgaW5maW5pdGU7LW8tYW5pbWF0aW9uOnByb2dyZXNzLWJhci1zdHJpcGVzIDJzIGxpbmVh
ciBpbmZpbml0ZTthbmltYXRpb246cHJvZ3Jlc3MtYmFyLXN0cmlwZXMgMnMgbGluZWFyIGluZmlu
aXRlfS5wcm9ncmVzcy1kYW5nZXIgLmJhciwucHJvZ3Jlc3MgLmJhci1kYW5nZXJ7YmFja2dyb3Vu
ZC1jb2xvcjojZGQ1MTRjO2JhY2tncm91bmQtaW1hZ2U6LW1vei1saW5lYXItZ3JhZGllbnQodG9w
LCNlZTVmNWIsI2M0M2MzNSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVh
ciwwIDAsMCAxMDAlLGZyb20oI2VlNWY1YiksdG8oI2M0M2MzNSkpO2JhY2tncm91bmQtaW1hZ2U6
LXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCNlZTVmNWIsI2M0M2MzNSk7YmFja2dyb3VuZC1p
bWFnZTotby1saW5lYXItZ3JhZGllbnQodG9wLCNlZTVmNWIsI2M0M2MzNSk7YmFja2dyb3VuZC1p
bWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCNlZTVmNWIsI2M0M2MzNSk7YmFja2dyb3Vu
ZC1yZXBlYXQ6cmVwZWF0LXg7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29m
dC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmZlZTVmNWInLGVuZENvbG9yc3RyPScjZmZjNDNj
MzUnLEdyYWRpZW50VHlwZT0wKX0ucHJvZ3Jlc3MtZGFuZ2VyLnByb2dyZXNzLXN0cmlwZWQgLmJh
ciwucHJvZ3Jlc3Mtc3RyaXBlZCAuYmFyLWRhbmdlcntiYWNrZ3JvdW5kLWNvbG9yOiNlZTVmNWI7
YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciwwIDEwMCUsMTAwJSAwLGNv
bG9yLXN0b3AoMC4yNSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpKSxjb2xvci1zdG9wKDAuMjUsdHJh
bnNwYXJlbnQpLGNvbG9yLXN0b3AoMC41LHRyYW5zcGFyZW50KSxjb2xvci1zdG9wKDAuNSxyZ2Jh
KDI1NSwyNTUsMjU1LDAuMTUpKSxjb2xvci1zdG9wKDAuNzUscmdiYSgyNTUsMjU1LDI1NSwwLjE1
KSksY29sb3Itc3RvcCgwLjc1LHRyYW5zcGFyZW50KSx0byh0cmFuc3BhcmVudCkpO2JhY2tncm91
bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQoNDVkZWcscmdiYSgyNTUsMjU1LDI1NSww
LjE1KSAyNSUsdHJhbnNwYXJlbnQgMjUlLHRyYW5zcGFyZW50IDUwJSxyZ2JhKDI1NSwyNTUsMjU1
LDAuMTUpIDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDc1JSx0cmFuc3BhcmVudCA3NSUsdHJh
bnNwYXJlbnQpO2JhY2tncm91bmQtaW1hZ2U6LW1vei1saW5lYXItZ3JhZGllbnQoNDVkZWcscmdi
YSgyNTUsMjU1LDI1NSwwLjE1KSAyNSUsdHJhbnNwYXJlbnQgMjUlLHRyYW5zcGFyZW50IDUwJSxy
Z2JhKDI1NSwyNTUsMjU1LDAuMTUpIDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDc1JSx0cmFu
c3BhcmVudCA3NSUsdHJhbnNwYXJlbnQpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRp
ZW50KDQ1ZGVnLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgMjUlLHRyYW5zcGFyZW50IDI1JSx0cmFu
c3BhcmVudCA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA1MCUscmdiYSgyNTUsMjU1LDI1NSww
LjE1KSA3NSUsdHJhbnNwYXJlbnQgNzUlLHRyYW5zcGFyZW50KTtiYWNrZ3JvdW5kLWltYWdlOmxp
bmVhci1ncmFkaWVudCg0NWRlZyxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDI1JSx0cmFuc3BhcmVu
dCAyNSUsdHJhbnNwYXJlbnQgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNTAlLHJnYmEoMjU1
LDI1NSwyNTUsMC4xNSkgNzUlLHRyYW5zcGFyZW50IDc1JSx0cmFuc3BhcmVudCl9LnByb2dyZXNz
LXN1Y2Nlc3MgLmJhciwucHJvZ3Jlc3MgLmJhci1zdWNjZXNze2JhY2tncm91bmQtY29sb3I6IzVl
Yjk1ZTtiYWNrZ3JvdW5kLWltYWdlOi1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwjNjJjNDYyLCM1
N2E5NTcpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsMCAwLDAgMTAw
JSxmcm9tKCM2MmM0NjIpLHRvKCM1N2E5NTcpKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGlu
ZWFyLWdyYWRpZW50KHRvcCwjNjJjNDYyLCM1N2E5NTcpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGlu
ZWFyLWdyYWRpZW50KHRvcCwjNjJjNDYyLCM1N2E5NTcpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFy
LWdyYWRpZW50KHRvIGJvdHRvbSwjNjJjNDYyLCM1N2E5NTcpO2JhY2tncm91bmQtcmVwZWF0OnJl
cGVhdC14O2ZpbHRlcjpwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQo
c3RhcnRDb2xvcnN0cj0nI2ZmNjJjNDYyJyxlbmRDb2xvcnN0cj0nI2ZmNTdhOTU3JyxHcmFkaWVu
dFR5cGU9MCl9LnByb2dyZXNzLXN1Y2Nlc3MucHJvZ3Jlc3Mtc3RyaXBlZCAuYmFyLC5wcm9ncmVz
cy1zdHJpcGVkIC5iYXItc3VjY2Vzc3tiYWNrZ3JvdW5kLWNvbG9yOiM2MmM0NjI7YmFja2dyb3Vu
ZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciwwIDEwMCUsMTAwJSAwLGNvbG9yLXN0b3Ao
MC4yNSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpKSxjb2xvci1zdG9wKDAuMjUsdHJhbnNwYXJlbnQp
LGNvbG9yLXN0b3AoMC41LHRyYW5zcGFyZW50KSxjb2xvci1zdG9wKDAuNSxyZ2JhKDI1NSwyNTUs
MjU1LDAuMTUpKSxjb2xvci1zdG9wKDAuNzUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSksY29sb3It
c3RvcCgwLjc1LHRyYW5zcGFyZW50KSx0byh0cmFuc3BhcmVudCkpO2JhY2tncm91bmQtaW1hZ2U6
LXdlYmtpdC1saW5lYXItZ3JhZGllbnQoNDVkZWcscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSAyNSUs
dHJhbnNwYXJlbnQgMjUlLHRyYW5zcGFyZW50IDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDUw
JSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDc1JSx0cmFuc3BhcmVudCA3NSUsdHJhbnNwYXJlbnQp
O2JhY2tncm91bmQtaW1hZ2U6LW1vei1saW5lYXItZ3JhZGllbnQoNDVkZWcscmdiYSgyNTUsMjU1
LDI1NSwwLjE1KSAyNSUsdHJhbnNwYXJlbnQgMjUlLHRyYW5zcGFyZW50IDUwJSxyZ2JhKDI1NSwy
NTUsMjU1LDAuMTUpIDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDc1JSx0cmFuc3BhcmVudCA3
NSUsdHJhbnNwYXJlbnQpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KDQ1ZGVn
LHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgMjUlLHRyYW5zcGFyZW50IDI1JSx0cmFuc3BhcmVudCA1
MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA3NSUs
dHJhbnNwYXJlbnQgNzUlLHRyYW5zcGFyZW50KTtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFk
aWVudCg0NWRlZyxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDI1JSx0cmFuc3BhcmVudCAyNSUsdHJh
bnNwYXJlbnQgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNTAlLHJnYmEoMjU1LDI1NSwyNTUs
MC4xNSkgNzUlLHRyYW5zcGFyZW50IDc1JSx0cmFuc3BhcmVudCl9LnByb2dyZXNzLWluZm8gLmJh
ciwucHJvZ3Jlc3MgLmJhci1pbmZve2JhY2tncm91bmQtY29sb3I6IzRiYjFjZjtiYWNrZ3JvdW5k
LWltYWdlOi1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwjNWJjMGRlLCMzMzliYjkpO2JhY2tncm91
bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsMCAwLDAgMTAwJSxmcm9tKCM1YmMwZGUp
LHRvKCMzMzliYjkpKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRv
cCwjNWJjMGRlLCMzMzliYjkpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KHRv
cCwjNWJjMGRlLCMzMzliYjkpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJv
dHRvbSwjNWJjMGRlLCMzMzliYjkpO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14O2ZpbHRlcjpw
cm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0n
I2ZmNWJjMGRlJyxlbmRDb2xvcnN0cj0nI2ZmMzM5YmI5JyxHcmFkaWVudFR5cGU9MCl9LnByb2dy
ZXNzLWluZm8ucHJvZ3Jlc3Mtc3RyaXBlZCAuYmFyLC5wcm9ncmVzcy1zdHJpcGVkIC5iYXItaW5m
b3tiYWNrZ3JvdW5kLWNvbG9yOiM1YmMwZGU7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRp
ZW50KGxpbmVhciwwIDEwMCUsMTAwJSAwLGNvbG9yLXN0b3AoMC4yNSxyZ2JhKDI1NSwyNTUsMjU1
LDAuMTUpKSxjb2xvci1zdG9wKDAuMjUsdHJhbnNwYXJlbnQpLGNvbG9yLXN0b3AoMC41LHRyYW5z
cGFyZW50KSxjb2xvci1zdG9wKDAuNSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpKSxjb2xvci1zdG9w
KDAuNzUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSksY29sb3Itc3RvcCgwLjc1LHRyYW5zcGFyZW50
KSx0byh0cmFuc3BhcmVudCkpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGll
bnQoNDVkZWcscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSAyNSUsdHJhbnNwYXJlbnQgMjUlLHRyYW5z
cGFyZW50IDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAu
MTUpIDc1JSx0cmFuc3BhcmVudCA3NSUsdHJhbnNwYXJlbnQpO2JhY2tncm91bmQtaW1hZ2U6LW1v
ei1saW5lYXItZ3JhZGllbnQoNDVkZWcscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSAyNSUsdHJhbnNw
YXJlbnQgMjUlLHRyYW5zcGFyZW50IDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDUwJSxyZ2Jh
KDI1NSwyNTUsMjU1LDAuMTUpIDc1JSx0cmFuc3BhcmVudCA3NSUsdHJhbnNwYXJlbnQpO2JhY2tn
cm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KDQ1ZGVnLHJnYmEoMjU1LDI1NSwyNTUsMC4x
NSkgMjUlLHRyYW5zcGFyZW50IDI1JSx0cmFuc3BhcmVudCA1MCUscmdiYSgyNTUsMjU1LDI1NSww
LjE1KSA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA3NSUsdHJhbnNwYXJlbnQgNzUlLHRyYW5z
cGFyZW50KTtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCg0NWRlZyxyZ2JhKDI1NSwy
NTUsMjU1LDAuMTUpIDI1JSx0cmFuc3BhcmVudCAyNSUsdHJhbnNwYXJlbnQgNTAlLHJnYmEoMjU1
LDI1NSwyNTUsMC4xNSkgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNzUlLHRyYW5zcGFyZW50
IDc1JSx0cmFuc3BhcmVudCl9LnByb2dyZXNzLXdhcm5pbmcgLmJhciwucHJvZ3Jlc3MgLmJhci13
YXJuaW5ne2JhY2tncm91bmQtY29sb3I6I2ZhYTczMjtiYWNrZ3JvdW5kLWltYWdlOi1tb3otbGlu
ZWFyLWdyYWRpZW50KHRvcCwjZmJiNDUwLCNmODk0MDYpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtp
dC1ncmFkaWVudChsaW5lYXIsMCAwLDAgMTAwJSxmcm9tKCNmYmI0NTApLHRvKCNmODk0MDYpKTti
YWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwjZmJiNDUwLCNmODk0
MDYpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KHRvcCwjZmJiNDUwLCNmODk0
MDYpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwjZmJiNDUwLCNm
ODk0MDYpO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14O2ZpbHRlcjpwcm9naWQ6RFhJbWFnZVRy
YW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI2ZmZmJiNDUwJyxlbmRD
b2xvcnN0cj0nI2ZmZjg5NDA2JyxHcmFkaWVudFR5cGU9MCl9LnByb2dyZXNzLXdhcm5pbmcucHJv
Z3Jlc3Mtc3RyaXBlZCAuYmFyLC5wcm9ncmVzcy1zdHJpcGVkIC5iYXItd2FybmluZ3tiYWNrZ3Jv
dW5kLWNvbG9yOiNmYmI0NTA7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVh
ciwwIDEwMCUsMTAwJSAwLGNvbG9yLXN0b3AoMC4yNSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpKSxj
b2xvci1zdG9wKDAuMjUsdHJhbnNwYXJlbnQpLGNvbG9yLXN0b3AoMC41LHRyYW5zcGFyZW50KSxj
b2xvci1zdG9wKDAuNSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpKSxjb2xvci1zdG9wKDAuNzUscmdi
YSgyNTUsMjU1LDI1NSwwLjE1KSksY29sb3Itc3RvcCgwLjc1LHRyYW5zcGFyZW50KSx0byh0cmFu
c3BhcmVudCkpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQoNDVkZWcs
cmdiYSgyNTUsMjU1LDI1NSwwLjE1KSAyNSUsdHJhbnNwYXJlbnQgMjUlLHRyYW5zcGFyZW50IDUw
JSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDc1JSx0
cmFuc3BhcmVudCA3NSUsdHJhbnNwYXJlbnQpO2JhY2tncm91bmQtaW1hZ2U6LW1vei1saW5lYXIt
Z3JhZGllbnQoNDVkZWcscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSAyNSUsdHJhbnNwYXJlbnQgMjUl
LHRyYW5zcGFyZW50IDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDUwJSxyZ2JhKDI1NSwyNTUs
MjU1LDAuMTUpIDc1JSx0cmFuc3BhcmVudCA3NSUsdHJhbnNwYXJlbnQpO2JhY2tncm91bmQtaW1h
Z2U6LW8tbGluZWFyLWdyYWRpZW50KDQ1ZGVnLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgMjUlLHRy
YW5zcGFyZW50IDI1JSx0cmFuc3BhcmVudCA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA1MCUs
cmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA3NSUsdHJhbnNwYXJlbnQgNzUlLHRyYW5zcGFyZW50KTti
YWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCg0NWRlZyxyZ2JhKDI1NSwyNTUsMjU1LDAu
MTUpIDI1JSx0cmFuc3BhcmVudCAyNSUsdHJhbnNwYXJlbnQgNTAlLHJnYmEoMjU1LDI1NSwyNTUs
MC4xNSkgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNzUlLHRyYW5zcGFyZW50IDc1JSx0cmFu
c3BhcmVudCl9LmFjY29yZGlvbnttYXJnaW4tYm90dG9tOjIwcHh9LmFjY29yZGlvbi1ncm91cHtt
YXJnaW4tYm90dG9tOjJweDtib3JkZXI6MXB4IHNvbGlkICNlNWU1ZTU7LXdlYmtpdC1ib3JkZXIt
cmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4O2JvcmRlci1yYWRpdXM6NHB4fS5hY2Nv
cmRpb24taGVhZGluZ3tib3JkZXItYm90dG9tOjB9LmFjY29yZGlvbi1oZWFkaW5nIC5hY2NvcmRp
b24tdG9nZ2xle2Rpc3BsYXk6YmxvY2s7cGFkZGluZzo4cHggMTVweH0uYWNjb3JkaW9uLXRvZ2ds
ZXtjdXJzb3I6cG9pbnRlcn0uYWNjb3JkaW9uLWlubmVye3BhZGRpbmc6OXB4IDE1cHg7Ym9yZGVy
LXRvcDoxcHggc29saWQgI2U1ZTVlNX0uY2Fyb3VzZWx7cG9zaXRpb246cmVsYXRpdmU7bWFyZ2lu
LWJvdHRvbToyMHB4O2xpbmUtaGVpZ2h0OjF9LmNhcm91c2VsLWlubmVye3Bvc2l0aW9uOnJlbGF0
aXZlO3dpZHRoOjEwMCU7b3ZlcmZsb3c6aGlkZGVufS5jYXJvdXNlbC1pbm5lcj4uaXRlbXtwb3Np
dGlvbjpyZWxhdGl2ZTtkaXNwbGF5Om5vbmU7LXdlYmtpdC10cmFuc2l0aW9uOi42cyBlYXNlLWlu
LW91dCBsZWZ0Oy1tb3otdHJhbnNpdGlvbjouNnMgZWFzZS1pbi1vdXQgbGVmdDstby10cmFuc2l0
aW9uOi42cyBlYXNlLWluLW91dCBsZWZ0O3RyYW5zaXRpb246LjZzIGVhc2UtaW4tb3V0IGxlZnR9
LmNhcm91c2VsLWlubmVyPi5pdGVtPmltZ3tkaXNwbGF5OmJsb2NrO2xpbmUtaGVpZ2h0OjF9LmNh
cm91c2VsLWlubmVyPi5hY3RpdmUsLmNhcm91c2VsLWlubmVyPi5uZXh0LC5jYXJvdXNlbC1pbm5l
cj4ucHJldntkaXNwbGF5OmJsb2NrfS5jYXJvdXNlbC1pbm5lcj4uYWN0aXZle2xlZnQ6MH0uY2Fy
b3VzZWwtaW5uZXI+Lm5leHQsLmNhcm91c2VsLWlubmVyPi5wcmV2e3Bvc2l0aW9uOmFic29sdXRl
O3RvcDowO3dpZHRoOjEwMCV9LmNhcm91c2VsLWlubmVyPi5uZXh0e2xlZnQ6MTAwJX0uY2Fyb3Vz
ZWwtaW5uZXI+LnByZXZ7bGVmdDotMTAwJX0uY2Fyb3VzZWwtaW5uZXI+Lm5leHQubGVmdCwuY2Fy
b3VzZWwtaW5uZXI+LnByZXYucmlnaHR7bGVmdDowfS5jYXJvdXNlbC1pbm5lcj4uYWN0aXZlLmxl
ZnR7bGVmdDotMTAwJX0uY2Fyb3VzZWwtaW5uZXI+LmFjdGl2ZS5yaWdodHtsZWZ0OjEwMCV9LmNh
cm91c2VsLWNvbnRyb2x7cG9zaXRpb246YWJzb2x1dGU7dG9wOjQwJTtsZWZ0OjE1cHg7d2lkdGg6
NDBweDtoZWlnaHQ6NDBweDttYXJnaW4tdG9wOi0yMHB4O2ZvbnQtc2l6ZTo2MHB4O2ZvbnQtd2Vp
Z2h0OjEwMDtsaW5lLWhlaWdodDozMHB4O2NvbG9yOiNmZmY7dGV4dC1hbGlnbjpjZW50ZXI7YmFj
a2dyb3VuZDojMjIyO2JvcmRlcjozcHggc29saWQgI2ZmZjstd2Via2l0LWJvcmRlci1yYWRpdXM6
MjNweDstbW96LWJvcmRlci1yYWRpdXM6MjNweDtib3JkZXItcmFkaXVzOjIzcHg7b3BhY2l0eTou
NTtmaWx0ZXI6YWxwaGEob3BhY2l0eT01MCl9LmNhcm91c2VsLWNvbnRyb2wucmlnaHR7cmlnaHQ6
MTVweDtsZWZ0OmF1dG99LmNhcm91c2VsLWNvbnRyb2w6aG92ZXJ7Y29sb3I6I2ZmZjt0ZXh0LWRl
Y29yYXRpb246bm9uZTtvcGFjaXR5Oi45O2ZpbHRlcjphbHBoYShvcGFjaXR5PTkwKX0uY2Fyb3Vz
ZWwtY2FwdGlvbntwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO2JvdHRvbTowO2xlZnQ6MDtwYWRk
aW5nOjE1cHg7YmFja2dyb3VuZDojMzMzO2JhY2tncm91bmQ6cmdiYSgwLDAsMCwwLjc1KX0uY2Fy
b3VzZWwtY2FwdGlvbiBoNCwuY2Fyb3VzZWwtY2FwdGlvbiBwe2xpbmUtaGVpZ2h0OjIwcHg7Y29s
b3I6I2ZmZn0uY2Fyb3VzZWwtY2FwdGlvbiBoNHttYXJnaW46MCAwIDVweH0uY2Fyb3VzZWwtY2Fw
dGlvbiBwe21hcmdpbi1ib3R0b206MH0uaGVyby11bml0e3BhZGRpbmc6NjBweDttYXJnaW4tYm90
dG9tOjMwcHg7Zm9udC1zaXplOjE4cHg7Zm9udC13ZWlnaHQ6MjAwO2xpbmUtaGVpZ2h0OjMwcHg7
Y29sb3I6aW5oZXJpdDtiYWNrZ3JvdW5kLWNvbG9yOiNlZWU7LXdlYmtpdC1ib3JkZXItcmFkaXVz
OjZweDstbW96LWJvcmRlci1yYWRpdXM6NnB4O2JvcmRlci1yYWRpdXM6NnB4fS5oZXJvLXVuaXQg
aDF7bWFyZ2luLWJvdHRvbTowO2ZvbnQtc2l6ZTo2MHB4O2xpbmUtaGVpZ2h0OjE7bGV0dGVyLXNw
YWNpbmc6LTFweDtjb2xvcjppbmhlcml0fS5oZXJvLXVuaXQgbGl7bGluZS1oZWlnaHQ6MzBweH0u
cHVsbC1yaWdodHtmbG9hdDpyaWdodH0ucHVsbC1sZWZ0e2Zsb2F0OmxlZnR9LmhpZGV7ZGlzcGxh
eTpub25lfS5zaG93e2Rpc3BsYXk6YmxvY2t9LmludmlzaWJsZXt2aXNpYmlsaXR5OmhpZGRlbn0u
YWZmaXh7cG9zaXRpb246Zml4ZWR9CkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJl
bmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvYm9vdHN0cmFwL2pzL2Jvb3RzdHJh
cC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdo
dGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvYm9vdHN0cmFwL2pzL2Jvb3RzdHJhcC5qcwkocmV2
aXNpb24gMCkKKysrIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhh
bXBsZS1hcHAvY29tcG9uZW50cy9ib290c3RyYXAvanMvYm9vdHN0cmFwLmpzCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMjE1OSBAQAorLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09CisgKiBib290c3RyYXAtdHJhbnNpdGlvbi5qcyB2Mi4yLjIK
KyAqIGh0dHA6Ly90d2l0dGVyLmdpdGh1Yi5jb20vYm9vdHN0cmFwL2phdmFzY3JpcHQuaHRtbCN0
cmFuc2l0aW9ucworICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09CisgKiBDb3B5cmlnaHQgMjAxMiBUd2l0dGVyLCBJbmMuCisgKgorICogTGljZW5z
ZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7
CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgg
dGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQK
KyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisg
KiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRp
bmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmli
dXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJ
VElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhl
IExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMg
YW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqID09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworCishZnVu
Y3Rpb24gKCQpIHsKKworICAidXNlIHN0cmljdCI7IC8vIGpzaGludCA7XzsKKworCisgIC8qIENT
UyBUUkFOU0lUSU9OIFNVUFBPUlQgKGh0dHA6Ly93d3cubW9kZXJuaXpyLmNvbS8pCisgICAqID09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8K
KworICAkKGZ1bmN0aW9uICgpIHsKKworICAgICQuc3VwcG9ydC50cmFuc2l0aW9uID0gKGZ1bmN0
aW9uICgpIHsKKworICAgICAgdmFyIHRyYW5zaXRpb25FbmQgPSAoZnVuY3Rpb24gKCkgeworCisg
ICAgICAgIHZhciBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Jvb3RzdHJhcCcpCisgICAg
ICAgICAgLCB0cmFuc0VuZEV2ZW50TmFtZXMgPSB7CisgICAgICAgICAgICAgICAnV2Via2l0VHJh
bnNpdGlvbicgOiAnd2Via2l0VHJhbnNpdGlvbkVuZCcKKyAgICAgICAgICAgICwgICdNb3pUcmFu
c2l0aW9uJyAgICA6ICd0cmFuc2l0aW9uZW5kJworICAgICAgICAgICAgLCAgJ09UcmFuc2l0aW9u
JyAgICAgIDogJ29UcmFuc2l0aW9uRW5kIG90cmFuc2l0aW9uZW5kJworICAgICAgICAgICAgLCAg
J3RyYW5zaXRpb24nICAgICAgIDogJ3RyYW5zaXRpb25lbmQnCisgICAgICAgICAgICB9CisgICAg
ICAgICAgLCBuYW1lCisKKyAgICAgICAgZm9yIChuYW1lIGluIHRyYW5zRW5kRXZlbnROYW1lcyl7
CisgICAgICAgICAgaWYgKGVsLnN0eWxlW25hbWVdICE9PSB1bmRlZmluZWQpIHsKKyAgICAgICAg
ICAgIHJldHVybiB0cmFuc0VuZEV2ZW50TmFtZXNbbmFtZV0KKyAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgfSgpKQorCisgICAgICByZXR1cm4gdHJhbnNpdGlvbkVuZCAmJiB7CisgICAg
ICAgIGVuZDogdHJhbnNpdGlvbkVuZAorICAgICAgfQorCisgICAgfSkoKQorCisgIH0pCisKK30o
d2luZG93LmpRdWVyeSk7LyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQorICogYm9vdHN0cmFwLWFsZXJ0LmpzIHYyLjIuMgorICogaHR0
cDovL3R3aXR0ZXIuZ2l0aHViLmNvbS9ib290c3RyYXAvamF2YXNjcmlwdC5odG1sI2FsZXJ0cwor
ICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQorICogQ29weXJpZ2h0IDIwMTIgVHdpdHRlciwgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVu
ZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICog
eW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBM
aWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgor
ICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5s
ZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBz
b2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQg
b24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05T
IE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNl
bnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAor
ICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKiA9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKworIWZ1bmN0aW9u
ICgkKSB7CisKKyAgInVzZSBzdHJpY3QiOyAvLyBqc2hpbnQgO187CisKKworIC8qIEFMRVJUIENM
QVNTIERFRklOSVRJT04KKyAgKiA9PT09PT09PT09PT09PT09PT09PT09ICovCisKKyAgdmFyIGRp
c21pc3MgPSAnW2RhdGEtZGlzbWlzcz0iYWxlcnQiXScKKyAgICAsIEFsZXJ0ID0gZnVuY3Rpb24g
KGVsKSB7CisgICAgICAgICQoZWwpLm9uKCdjbGljaycsIGRpc21pc3MsIHRoaXMuY2xvc2UpCisg
ICAgICB9CisKKyAgQWxlcnQucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24gKGUpIHsKKyAgICB2
YXIgJHRoaXMgPSAkKHRoaXMpCisgICAgICAsIHNlbGVjdG9yID0gJHRoaXMuYXR0cignZGF0YS10
YXJnZXQnKQorICAgICAgLCAkcGFyZW50CisKKyAgICBpZiAoIXNlbGVjdG9yKSB7CisgICAgICBz
ZWxlY3RvciA9ICR0aGlzLmF0dHIoJ2hyZWYnKQorICAgICAgc2VsZWN0b3IgPSBzZWxlY3RvciAm
JiBzZWxlY3Rvci5yZXBsYWNlKC8uKig/PSNbXlxzXSokKS8sICcnKSAvL3N0cmlwIGZvciBpZTcK
KyAgICB9CisKKyAgICAkcGFyZW50ID0gJChzZWxlY3RvcikKKworICAgIGUgJiYgZS5wcmV2ZW50
RGVmYXVsdCgpCisKKyAgICAkcGFyZW50Lmxlbmd0aCB8fCAoJHBhcmVudCA9ICR0aGlzLmhhc0Ns
YXNzKCdhbGVydCcpID8gJHRoaXMgOiAkdGhpcy5wYXJlbnQoKSkKKworICAgICRwYXJlbnQudHJp
Z2dlcihlID0gJC5FdmVudCgnY2xvc2UnKSkKKworICAgIGlmIChlLmlzRGVmYXVsdFByZXZlbnRl
ZCgpKSByZXR1cm4KKworICAgICRwYXJlbnQucmVtb3ZlQ2xhc3MoJ2luJykKKworICAgIGZ1bmN0
aW9uIHJlbW92ZUVsZW1lbnQoKSB7CisgICAgICAkcGFyZW50CisgICAgICAgIC50cmlnZ2VyKCdj
bG9zZWQnKQorICAgICAgICAucmVtb3ZlKCkKKyAgICB9CisKKyAgICAkLnN1cHBvcnQudHJhbnNp
dGlvbiAmJiAkcGFyZW50Lmhhc0NsYXNzKCdmYWRlJykgPworICAgICAgJHBhcmVudC5vbigkLnN1
cHBvcnQudHJhbnNpdGlvbi5lbmQsIHJlbW92ZUVsZW1lbnQpIDoKKyAgICAgIHJlbW92ZUVsZW1l
bnQoKQorICB9CisKKworIC8qIEFMRVJUIFBMVUdJTiBERUZJTklUSU9OCisgICogPT09PT09PT09
PT09PT09PT09PT09PT0gKi8KKworICB2YXIgb2xkID0gJC5mbi5hbGVydAorCisgICQuZm4uYWxl
cnQgPSBmdW5jdGlvbiAob3B0aW9uKSB7CisgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAo
KSB7CisgICAgICB2YXIgJHRoaXMgPSAkKHRoaXMpCisgICAgICAgICwgZGF0YSA9ICR0aGlzLmRh
dGEoJ2FsZXJ0JykKKyAgICAgIGlmICghZGF0YSkgJHRoaXMuZGF0YSgnYWxlcnQnLCAoZGF0YSA9
IG5ldyBBbGVydCh0aGlzKSkpCisgICAgICBpZiAodHlwZW9mIG9wdGlvbiA9PSAnc3RyaW5nJykg
ZGF0YVtvcHRpb25dLmNhbGwoJHRoaXMpCisgICAgfSkKKyAgfQorCisgICQuZm4uYWxlcnQuQ29u
c3RydWN0b3IgPSBBbGVydAorCisKKyAvKiBBTEVSVCBOTyBDT05GTElDVAorICAqID09PT09PT09
PT09PT09PT09ICovCisKKyAgJC5mbi5hbGVydC5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKCkgewor
ICAgICQuZm4uYWxlcnQgPSBvbGQKKyAgICByZXR1cm4gdGhpcworICB9CisKKworIC8qIEFMRVJU
IERBVEEtQVBJCisgICogPT09PT09PT09PT09PT0gKi8KKworICAkKGRvY3VtZW50KS5vbignY2xp
Y2suYWxlcnQuZGF0YS1hcGknLCBkaXNtaXNzLCBBbGVydC5wcm90b3R5cGUuY2xvc2UpCisKK30o
d2luZG93LmpRdWVyeSk7LyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09CisgKiBib290c3RyYXAtYnV0dG9uLmpzIHYyLjIuMgorICog
aHR0cDovL3R3aXR0ZXIuZ2l0aHViLmNvbS9ib290c3RyYXAvamF2YXNjcmlwdC5odG1sI2J1dHRv
bnMKKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQorICogQ29weXJpZ2h0IDIwMTIgVHdpdHRlciwgSW5jLgorICoKKyAqIExpY2Vu
c2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIp
OworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRo
IHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0
CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgor
ICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0
aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJp
YnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05E
SVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRo
ZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25z
IGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKiA9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworCish
ZnVuY3Rpb24gKCQpIHsKKworICAidXNlIHN0cmljdCI7IC8vIGpzaGludCA7XzsKKworCisgLyog
QlVUVE9OIFBVQkxJQyBDTEFTUyBERUZJTklUSU9OCisgICogPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ICovCisKKyAgdmFyIEJ1dHRvbiA9IGZ1bmN0aW9uIChlbGVtZW50LCBvcHRpb25z
KSB7CisgICAgdGhpcy4kZWxlbWVudCA9ICQoZWxlbWVudCkKKyAgICB0aGlzLm9wdGlvbnMgPSAk
LmV4dGVuZCh7fSwgJC5mbi5idXR0b24uZGVmYXVsdHMsIG9wdGlvbnMpCisgIH0KKworICBCdXR0
b24ucHJvdG90eXBlLnNldFN0YXRlID0gZnVuY3Rpb24gKHN0YXRlKSB7CisgICAgdmFyIGQgPSAn
ZGlzYWJsZWQnCisgICAgICAsICRlbCA9IHRoaXMuJGVsZW1lbnQKKyAgICAgICwgZGF0YSA9ICRl
bC5kYXRhKCkKKyAgICAgICwgdmFsID0gJGVsLmlzKCdpbnB1dCcpID8gJ3ZhbCcgOiAnaHRtbCcK
KworICAgIHN0YXRlID0gc3RhdGUgKyAnVGV4dCcKKyAgICBkYXRhLnJlc2V0VGV4dCB8fCAkZWwu
ZGF0YSgncmVzZXRUZXh0JywgJGVsW3ZhbF0oKSkKKworICAgICRlbFt2YWxdKGRhdGFbc3RhdGVd
IHx8IHRoaXMub3B0aW9uc1tzdGF0ZV0pCisKKyAgICAvLyBwdXNoIHRvIGV2ZW50IGxvb3AgdG8g
YWxsb3cgZm9ybXMgdG8gc3VibWl0CisgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CisgICAg
ICBzdGF0ZSA9PSAnbG9hZGluZ1RleHQnID8KKyAgICAgICAgJGVsLmFkZENsYXNzKGQpLmF0dHIo
ZCwgZCkgOgorICAgICAgICAkZWwucmVtb3ZlQ2xhc3MoZCkucmVtb3ZlQXR0cihkKQorICAgIH0s
IDApCisgIH0KKworICBCdXR0b24ucHJvdG90eXBlLnRvZ2dsZSA9IGZ1bmN0aW9uICgpIHsKKyAg
ICB2YXIgJHBhcmVudCA9IHRoaXMuJGVsZW1lbnQuY2xvc2VzdCgnW2RhdGEtdG9nZ2xlPSJidXR0
b25zLXJhZGlvIl0nKQorCisgICAgJHBhcmVudCAmJiAkcGFyZW50CisgICAgICAuZmluZCgnLmFj
dGl2ZScpCisgICAgICAucmVtb3ZlQ2xhc3MoJ2FjdGl2ZScpCisKKyAgICB0aGlzLiRlbGVtZW50
LnRvZ2dsZUNsYXNzKCdhY3RpdmUnKQorICB9CisKKworIC8qIEJVVFRPTiBQTFVHSU4gREVGSU5J
VElPTgorICAqID09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisgIHZhciBvbGQgPSAkLmZu
LmJ1dHRvbgorCisgICQuZm4uYnV0dG9uID0gZnVuY3Rpb24gKG9wdGlvbikgeworICAgIHJldHVy
biB0aGlzLmVhY2goZnVuY3Rpb24gKCkgeworICAgICAgdmFyICR0aGlzID0gJCh0aGlzKQorICAg
ICAgICAsIGRhdGEgPSAkdGhpcy5kYXRhKCdidXR0b24nKQorICAgICAgICAsIG9wdGlvbnMgPSB0
eXBlb2Ygb3B0aW9uID09ICdvYmplY3QnICYmIG9wdGlvbgorICAgICAgaWYgKCFkYXRhKSAkdGhp
cy5kYXRhKCdidXR0b24nLCAoZGF0YSA9IG5ldyBCdXR0b24odGhpcywgb3B0aW9ucykpKQorICAg
ICAgaWYgKG9wdGlvbiA9PSAndG9nZ2xlJykgZGF0YS50b2dnbGUoKQorICAgICAgZWxzZSBpZiAo
b3B0aW9uKSBkYXRhLnNldFN0YXRlKG9wdGlvbikKKyAgICB9KQorICB9CisKKyAgJC5mbi5idXR0
b24uZGVmYXVsdHMgPSB7CisgICAgbG9hZGluZ1RleHQ6ICdsb2FkaW5nLi4uJworICB9CisKKyAg
JC5mbi5idXR0b24uQ29uc3RydWN0b3IgPSBCdXR0b24KKworCisgLyogQlVUVE9OIE5PIENPTkZM
SUNUCisgICogPT09PT09PT09PT09PT09PT09ICovCisKKyAgJC5mbi5idXR0b24ubm9Db25mbGlj
dCA9IGZ1bmN0aW9uICgpIHsKKyAgICAkLmZuLmJ1dHRvbiA9IG9sZAorICAgIHJldHVybiB0aGlz
CisgIH0KKworCisgLyogQlVUVE9OIERBVEEtQVBJCisgICogPT09PT09PT09PT09PT09ICovCisK
KyAgJChkb2N1bWVudCkub24oJ2NsaWNrLmJ1dHRvbi5kYXRhLWFwaScsICdbZGF0YS10b2dnbGVe
PWJ1dHRvbl0nLCBmdW5jdGlvbiAoZSkgeworICAgIHZhciAkYnRuID0gJChlLnRhcmdldCkKKyAg
ICBpZiAoISRidG4uaGFzQ2xhc3MoJ2J0bicpKSAkYnRuID0gJGJ0bi5jbG9zZXN0KCcuYnRuJykK
KyAgICAkYnRuLmJ1dHRvbigndG9nZ2xlJykKKyAgfSkKKworfSh3aW5kb3cualF1ZXJ5KTsvKiA9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
CisgKiBib290c3RyYXAtY2Fyb3VzZWwuanMgdjIuMi4yCisgKiBodHRwOi8vdHdpdHRlci5naXRo
dWIuY29tL2Jvb3RzdHJhcC9qYXZhc2NyaXB0Lmh0bWwjY2Fyb3VzZWwKKyAqID09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHly
aWdodCAyMDEyIFR3aXR0ZXIsIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hl
IExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVz
ZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlv
dSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cu
YXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBi
eSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRp
c3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIg
QkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwg
ZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNw
ZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25z
IHVuZGVyIHRoZSBMaWNlbnNlLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisKKyFmdW5jdGlvbiAoJCkgeworCisgICJ1
c2Ugc3RyaWN0IjsgLy8ganNoaW50IDtfOworCisKKyAvKiBDQVJPVVNFTCBDTEFTUyBERUZJTklU
SU9OCisgICogPT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisgIHZhciBDYXJvdXNlbCA9
IGZ1bmN0aW9uIChlbGVtZW50LCBvcHRpb25zKSB7CisgICAgdGhpcy4kZWxlbWVudCA9ICQoZWxl
bWVudCkKKyAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zCisgICAgdGhpcy5vcHRpb25zLnBhdXNl
ID09ICdob3ZlcicgJiYgdGhpcy4kZWxlbWVudAorICAgICAgLm9uKCdtb3VzZWVudGVyJywgJC5w
cm94eSh0aGlzLnBhdXNlLCB0aGlzKSkKKyAgICAgIC5vbignbW91c2VsZWF2ZScsICQucHJveHko
dGhpcy5jeWNsZSwgdGhpcykpCisgIH0KKworICBDYXJvdXNlbC5wcm90b3R5cGUgPSB7CisKKyAg
ICBjeWNsZTogZnVuY3Rpb24gKGUpIHsKKyAgICAgIGlmICghZSkgdGhpcy5wYXVzZWQgPSBmYWxz
ZQorICAgICAgdGhpcy5vcHRpb25zLmludGVydmFsCisgICAgICAgICYmICF0aGlzLnBhdXNlZAor
ICAgICAgICAmJiAodGhpcy5pbnRlcnZhbCA9IHNldEludGVydmFsKCQucHJveHkodGhpcy5uZXh0
LCB0aGlzKSwgdGhpcy5vcHRpb25zLmludGVydmFsKSkKKyAgICAgIHJldHVybiB0aGlzCisgICAg
fQorCisgICwgdG86IGZ1bmN0aW9uIChwb3MpIHsKKyAgICAgIHZhciAkYWN0aXZlID0gdGhpcy4k
ZWxlbWVudC5maW5kKCcuaXRlbS5hY3RpdmUnKQorICAgICAgICAsIGNoaWxkcmVuID0gJGFjdGl2
ZS5wYXJlbnQoKS5jaGlsZHJlbigpCisgICAgICAgICwgYWN0aXZlUG9zID0gY2hpbGRyZW4uaW5k
ZXgoJGFjdGl2ZSkKKyAgICAgICAgLCB0aGF0ID0gdGhpcworCisgICAgICBpZiAocG9zID4gKGNo
aWxkcmVuLmxlbmd0aCAtIDEpIHx8IHBvcyA8IDApIHJldHVybgorCisgICAgICBpZiAodGhpcy5z
bGlkaW5nKSB7CisgICAgICAgIHJldHVybiB0aGlzLiRlbGVtZW50Lm9uZSgnc2xpZCcsIGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgICB0aGF0LnRvKHBvcykKKyAgICAgICAgfSkKKyAgICAgIH0KKwor
ICAgICAgaWYgKGFjdGl2ZVBvcyA9PSBwb3MpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMucGF1c2Uo
KS5jeWNsZSgpCisgICAgICB9CisKKyAgICAgIHJldHVybiB0aGlzLnNsaWRlKHBvcyA+IGFjdGl2
ZVBvcyA/ICduZXh0JyA6ICdwcmV2JywgJChjaGlsZHJlbltwb3NdKSkKKyAgICB9CisKKyAgLCBw
YXVzZTogZnVuY3Rpb24gKGUpIHsKKyAgICAgIGlmICghZSkgdGhpcy5wYXVzZWQgPSB0cnVlCisg
ICAgICBpZiAodGhpcy4kZWxlbWVudC5maW5kKCcubmV4dCwgLnByZXYnKS5sZW5ndGggJiYgJC5z
dXBwb3J0LnRyYW5zaXRpb24uZW5kKSB7CisgICAgICAgIHRoaXMuJGVsZW1lbnQudHJpZ2dlcigk
LnN1cHBvcnQudHJhbnNpdGlvbi5lbmQpCisgICAgICAgIHRoaXMuY3ljbGUoKQorICAgICAgfQor
ICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmludGVydmFsKQorICAgICAgdGhpcy5pbnRlcnZhbCA9
IG51bGwKKyAgICAgIHJldHVybiB0aGlzCisgICAgfQorCisgICwgbmV4dDogZnVuY3Rpb24gKCkg
eworICAgICAgaWYgKHRoaXMuc2xpZGluZykgcmV0dXJuCisgICAgICByZXR1cm4gdGhpcy5zbGlk
ZSgnbmV4dCcpCisgICAgfQorCisgICwgcHJldjogZnVuY3Rpb24gKCkgeworICAgICAgaWYgKHRo
aXMuc2xpZGluZykgcmV0dXJuCisgICAgICByZXR1cm4gdGhpcy5zbGlkZSgncHJldicpCisgICAg
fQorCisgICwgc2xpZGU6IGZ1bmN0aW9uICh0eXBlLCBuZXh0KSB7CisgICAgICB2YXIgJGFjdGl2
ZSA9IHRoaXMuJGVsZW1lbnQuZmluZCgnLml0ZW0uYWN0aXZlJykKKyAgICAgICAgLCAkbmV4dCA9
IG5leHQgfHwgJGFjdGl2ZVt0eXBlXSgpCisgICAgICAgICwgaXNDeWNsaW5nID0gdGhpcy5pbnRl
cnZhbAorICAgICAgICAsIGRpcmVjdGlvbiA9IHR5cGUgPT0gJ25leHQnID8gJ2xlZnQnIDogJ3Jp
Z2h0JworICAgICAgICAsIGZhbGxiYWNrICA9IHR5cGUgPT0gJ25leHQnID8gJ2ZpcnN0JyA6ICds
YXN0JworICAgICAgICAsIHRoYXQgPSB0aGlzCisgICAgICAgICwgZQorCisgICAgICB0aGlzLnNs
aWRpbmcgPSB0cnVlCisKKyAgICAgIGlzQ3ljbGluZyAmJiB0aGlzLnBhdXNlKCkKKworICAgICAg
JG5leHQgPSAkbmV4dC5sZW5ndGggPyAkbmV4dCA6IHRoaXMuJGVsZW1lbnQuZmluZCgnLml0ZW0n
KVtmYWxsYmFja10oKQorCisgICAgICBlID0gJC5FdmVudCgnc2xpZGUnLCB7CisgICAgICAgIHJl
bGF0ZWRUYXJnZXQ6ICRuZXh0WzBdCisgICAgICB9KQorCisgICAgICBpZiAoJG5leHQuaGFzQ2xh
c3MoJ2FjdGl2ZScpKSByZXR1cm4KKworICAgICAgaWYgKCQuc3VwcG9ydC50cmFuc2l0aW9uICYm
IHRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoJ3NsaWRlJykpIHsKKyAgICAgICAgdGhpcy4kZWxlbWVu
dC50cmlnZ2VyKGUpCisgICAgICAgIGlmIChlLmlzRGVmYXVsdFByZXZlbnRlZCgpKSByZXR1cm4K
KyAgICAgICAgJG5leHQuYWRkQ2xhc3ModHlwZSkKKyAgICAgICAgJG5leHRbMF0ub2Zmc2V0V2lk
dGggLy8gZm9yY2UgcmVmbG93CisgICAgICAgICRhY3RpdmUuYWRkQ2xhc3MoZGlyZWN0aW9uKQor
ICAgICAgICAkbmV4dC5hZGRDbGFzcyhkaXJlY3Rpb24pCisgICAgICAgIHRoaXMuJGVsZW1lbnQu
b25lKCQuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCwgZnVuY3Rpb24gKCkgeworICAgICAgICAgICRu
ZXh0LnJlbW92ZUNsYXNzKFt0eXBlLCBkaXJlY3Rpb25dLmpvaW4oJyAnKSkuYWRkQ2xhc3MoJ2Fj
dGl2ZScpCisgICAgICAgICAgJGFjdGl2ZS5yZW1vdmVDbGFzcyhbJ2FjdGl2ZScsIGRpcmVjdGlv
bl0uam9pbignICcpKQorICAgICAgICAgIHRoYXQuc2xpZGluZyA9IGZhbHNlCisgICAgICAgICAg
c2V0VGltZW91dChmdW5jdGlvbiAoKSB7IHRoYXQuJGVsZW1lbnQudHJpZ2dlcignc2xpZCcpIH0s
IDApCisgICAgICAgIH0pCisgICAgICB9IGVsc2UgeworICAgICAgICB0aGlzLiRlbGVtZW50LnRy
aWdnZXIoZSkKKyAgICAgICAgaWYgKGUuaXNEZWZhdWx0UHJldmVudGVkKCkpIHJldHVybgorICAg
ICAgICAkYWN0aXZlLnJlbW92ZUNsYXNzKCdhY3RpdmUnKQorICAgICAgICAkbmV4dC5hZGRDbGFz
cygnYWN0aXZlJykKKyAgICAgICAgdGhpcy5zbGlkaW5nID0gZmFsc2UKKyAgICAgICAgdGhpcy4k
ZWxlbWVudC50cmlnZ2VyKCdzbGlkJykKKyAgICAgIH0KKworICAgICAgaXNDeWNsaW5nICYmIHRo
aXMuY3ljbGUoKQorCisgICAgICByZXR1cm4gdGhpcworICAgIH0KKworICB9CisKKworIC8qIENB
Uk9VU0VMIFBMVUdJTiBERUZJTklUSU9OCisgICogPT09PT09PT09PT09PT09PT09PT09PT09PT0g
Ki8KKworICB2YXIgb2xkID0gJC5mbi5jYXJvdXNlbAorCisgICQuZm4uY2Fyb3VzZWwgPSBmdW5j
dGlvbiAob3B0aW9uKSB7CisgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7CisgICAg
ICB2YXIgJHRoaXMgPSAkKHRoaXMpCisgICAgICAgICwgZGF0YSA9ICR0aGlzLmRhdGEoJ2Nhcm91
c2VsJykKKyAgICAgICAgLCBvcHRpb25zID0gJC5leHRlbmQoe30sICQuZm4uY2Fyb3VzZWwuZGVm
YXVsdHMsIHR5cGVvZiBvcHRpb24gPT0gJ29iamVjdCcgJiYgb3B0aW9uKQorICAgICAgICAsIGFj
dGlvbiA9IHR5cGVvZiBvcHRpb24gPT0gJ3N0cmluZycgPyBvcHRpb24gOiBvcHRpb25zLnNsaWRl
CisgICAgICBpZiAoIWRhdGEpICR0aGlzLmRhdGEoJ2Nhcm91c2VsJywgKGRhdGEgPSBuZXcgQ2Fy
b3VzZWwodGhpcywgb3B0aW9ucykpKQorICAgICAgaWYgKHR5cGVvZiBvcHRpb24gPT0gJ251bWJl
cicpIGRhdGEudG8ob3B0aW9uKQorICAgICAgZWxzZSBpZiAoYWN0aW9uKSBkYXRhW2FjdGlvbl0o
KQorICAgICAgZWxzZSBpZiAob3B0aW9ucy5pbnRlcnZhbCkgZGF0YS5jeWNsZSgpCisgICAgfSkK
KyAgfQorCisgICQuZm4uY2Fyb3VzZWwuZGVmYXVsdHMgPSB7CisgICAgaW50ZXJ2YWw6IDUwMDAK
KyAgLCBwYXVzZTogJ2hvdmVyJworICB9CisKKyAgJC5mbi5jYXJvdXNlbC5Db25zdHJ1Y3RvciA9
IENhcm91c2VsCisKKworIC8qIENBUk9VU0VMIE5PIENPTkZMSUNUCisgICogPT09PT09PT09PT09
PT09PT09PT0gKi8KKworICAkLmZuLmNhcm91c2VsLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7
CisgICAgJC5mbi5jYXJvdXNlbCA9IG9sZAorICAgIHJldHVybiB0aGlzCisgIH0KKworIC8qIENB
Uk9VU0VMIERBVEEtQVBJCisgICogPT09PT09PT09PT09PT09PT0gKi8KKworICAkKGRvY3VtZW50
KS5vbignY2xpY2suY2Fyb3VzZWwuZGF0YS1hcGknLCAnW2RhdGEtc2xpZGVdJywgZnVuY3Rpb24g
KGUpIHsKKyAgICB2YXIgJHRoaXMgPSAkKHRoaXMpLCBocmVmCisgICAgICAsICR0YXJnZXQgPSAk
KCR0aGlzLmF0dHIoJ2RhdGEtdGFyZ2V0JykgfHwgKGhyZWYgPSAkdGhpcy5hdHRyKCdocmVmJykp
ICYmIGhyZWYucmVwbGFjZSgvLiooPz0jW15cc10rJCkvLCAnJykpIC8vc3RyaXAgZm9yIGllNwor
ICAgICAgLCBvcHRpb25zID0gJC5leHRlbmQoe30sICR0YXJnZXQuZGF0YSgpLCAkdGhpcy5kYXRh
KCkpCisgICAgJHRhcmdldC5jYXJvdXNlbChvcHRpb25zKQorICAgIGUucHJldmVudERlZmF1bHQo
KQorICB9KQorCit9KHdpbmRvdy5qUXVlcnkpOy8qID09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIGJvb3RzdHJhcC1jb2xsYXBz
ZS5qcyB2Mi4yLjIKKyAqIGh0dHA6Ly90d2l0dGVyLmdpdGh1Yi5jb20vYm9vdHN0cmFwL2phdmFz
Y3JpcHQuaHRtbCNjb2xsYXBzZQorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IDIwMTIgVHdpdHRlciwg
SW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAy
LjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQg
aW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5
IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2Vz
L0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9y
IGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhl
IExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQg
V0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBp
bXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292
ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2Uu
CisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0gKi8KKworCishZnVuY3Rpb24gKCQpIHsKKworICAidXNlIHN0cmljdCI7IC8vIGpz
aGludCA7XzsKKworCisgLyogQ09MTEFQU0UgUFVCTElDIENMQVNTIERFRklOSVRJT04KKyAgKiA9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisgIHZhciBDb2xsYXBzZSA9IGZ1
bmN0aW9uIChlbGVtZW50LCBvcHRpb25zKSB7CisgICAgdGhpcy4kZWxlbWVudCA9ICQoZWxlbWVu
dCkKKyAgICB0aGlzLm9wdGlvbnMgPSAkLmV4dGVuZCh7fSwgJC5mbi5jb2xsYXBzZS5kZWZhdWx0
cywgb3B0aW9ucykKKworICAgIGlmICh0aGlzLm9wdGlvbnMucGFyZW50KSB7CisgICAgICB0aGlz
LiRwYXJlbnQgPSAkKHRoaXMub3B0aW9ucy5wYXJlbnQpCisgICAgfQorCisgICAgdGhpcy5vcHRp
b25zLnRvZ2dsZSAmJiB0aGlzLnRvZ2dsZSgpCisgIH0KKworICBDb2xsYXBzZS5wcm90b3R5cGUg
PSB7CisKKyAgICBjb25zdHJ1Y3RvcjogQ29sbGFwc2UKKworICAsIGRpbWVuc2lvbjogZnVuY3Rp
b24gKCkgeworICAgICAgdmFyIGhhc1dpZHRoID0gdGhpcy4kZWxlbWVudC5oYXNDbGFzcygnd2lk
dGgnKQorICAgICAgcmV0dXJuIGhhc1dpZHRoID8gJ3dpZHRoJyA6ICdoZWlnaHQnCisgICAgfQor
CisgICwgc2hvdzogZnVuY3Rpb24gKCkgeworICAgICAgdmFyIGRpbWVuc2lvbgorICAgICAgICAs
IHNjcm9sbAorICAgICAgICAsIGFjdGl2ZXMKKyAgICAgICAgLCBoYXNEYXRhCisKKyAgICAgIGlm
ICh0aGlzLnRyYW5zaXRpb25pbmcpIHJldHVybgorCisgICAgICBkaW1lbnNpb24gPSB0aGlzLmRp
bWVuc2lvbigpCisgICAgICBzY3JvbGwgPSAkLmNhbWVsQ2FzZShbJ3Njcm9sbCcsIGRpbWVuc2lv
bl0uam9pbignLScpKQorICAgICAgYWN0aXZlcyA9IHRoaXMuJHBhcmVudCAmJiB0aGlzLiRwYXJl
bnQuZmluZCgnPiAuYWNjb3JkaW9uLWdyb3VwID4gLmluJykKKworICAgICAgaWYgKGFjdGl2ZXMg
JiYgYWN0aXZlcy5sZW5ndGgpIHsKKyAgICAgICAgaGFzRGF0YSA9IGFjdGl2ZXMuZGF0YSgnY29s
bGFwc2UnKQorICAgICAgICBpZiAoaGFzRGF0YSAmJiBoYXNEYXRhLnRyYW5zaXRpb25pbmcpIHJl
dHVybgorICAgICAgICBhY3RpdmVzLmNvbGxhcHNlKCdoaWRlJykKKyAgICAgICAgaGFzRGF0YSB8
fCBhY3RpdmVzLmRhdGEoJ2NvbGxhcHNlJywgbnVsbCkKKyAgICAgIH0KKworICAgICAgdGhpcy4k
ZWxlbWVudFtkaW1lbnNpb25dKDApCisgICAgICB0aGlzLnRyYW5zaXRpb24oJ2FkZENsYXNzJywg
JC5FdmVudCgnc2hvdycpLCAnc2hvd24nKQorICAgICAgJC5zdXBwb3J0LnRyYW5zaXRpb24gJiYg
dGhpcy4kZWxlbWVudFtkaW1lbnNpb25dKHRoaXMuJGVsZW1lbnRbMF1bc2Nyb2xsXSkKKyAgICB9
CisKKyAgLCBoaWRlOiBmdW5jdGlvbiAoKSB7CisgICAgICB2YXIgZGltZW5zaW9uCisgICAgICBp
ZiAodGhpcy50cmFuc2l0aW9uaW5nKSByZXR1cm4KKyAgICAgIGRpbWVuc2lvbiA9IHRoaXMuZGlt
ZW5zaW9uKCkKKyAgICAgIHRoaXMucmVzZXQodGhpcy4kZWxlbWVudFtkaW1lbnNpb25dKCkpCisg
ICAgICB0aGlzLnRyYW5zaXRpb24oJ3JlbW92ZUNsYXNzJywgJC5FdmVudCgnaGlkZScpLCAnaGlk
ZGVuJykKKyAgICAgIHRoaXMuJGVsZW1lbnRbZGltZW5zaW9uXSgwKQorICAgIH0KKworICAsIHJl
c2V0OiBmdW5jdGlvbiAoc2l6ZSkgeworICAgICAgdmFyIGRpbWVuc2lvbiA9IHRoaXMuZGltZW5z
aW9uKCkKKworICAgICAgdGhpcy4kZWxlbWVudAorICAgICAgICAucmVtb3ZlQ2xhc3MoJ2NvbGxh
cHNlJykKKyAgICAgICAgW2RpbWVuc2lvbl0oc2l6ZSB8fCAnYXV0bycpCisgICAgICAgIFswXS5v
ZmZzZXRXaWR0aAorCisgICAgICB0aGlzLiRlbGVtZW50W3NpemUgIT09IG51bGwgPyAnYWRkQ2xh
c3MnIDogJ3JlbW92ZUNsYXNzJ10oJ2NvbGxhcHNlJykKKworICAgICAgcmV0dXJuIHRoaXMKKyAg
ICB9CisKKyAgLCB0cmFuc2l0aW9uOiBmdW5jdGlvbiAobWV0aG9kLCBzdGFydEV2ZW50LCBjb21w
bGV0ZUV2ZW50KSB7CisgICAgICB2YXIgdGhhdCA9IHRoaXMKKyAgICAgICAgLCBjb21wbGV0ZSA9
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGlmIChzdGFydEV2ZW50LnR5cGUgPT0gJ3Nob3cn
KSB0aGF0LnJlc2V0KCkKKyAgICAgICAgICAgIHRoYXQudHJhbnNpdGlvbmluZyA9IDAKKyAgICAg
ICAgICAgIHRoYXQuJGVsZW1lbnQudHJpZ2dlcihjb21wbGV0ZUV2ZW50KQorICAgICAgICAgIH0K
KworICAgICAgdGhpcy4kZWxlbWVudC50cmlnZ2VyKHN0YXJ0RXZlbnQpCisKKyAgICAgIGlmIChz
dGFydEV2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpKSByZXR1cm4KKworICAgICAgdGhpcy50cmFu
c2l0aW9uaW5nID0gMQorCisgICAgICB0aGlzLiRlbGVtZW50W21ldGhvZF0oJ2luJykKKworICAg
ICAgJC5zdXBwb3J0LnRyYW5zaXRpb24gJiYgdGhpcy4kZWxlbWVudC5oYXNDbGFzcygnY29sbGFw
c2UnKSA/CisgICAgICAgIHRoaXMuJGVsZW1lbnQub25lKCQuc3VwcG9ydC50cmFuc2l0aW9uLmVu
ZCwgY29tcGxldGUpIDoKKyAgICAgICAgY29tcGxldGUoKQorICAgIH0KKworICAsIHRvZ2dsZTog
ZnVuY3Rpb24gKCkgeworICAgICAgdGhpc1t0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCdpbicpID8g
J2hpZGUnIDogJ3Nob3cnXSgpCisgICAgfQorCisgIH0KKworCisgLyogQ09MTEFQU0UgUExVR0lO
IERFRklOSVRJT04KKyAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisgIHZhciBv
bGQgPSAkLmZuLmNvbGxhcHNlCisKKyAgJC5mbi5jb2xsYXBzZSA9IGZ1bmN0aW9uIChvcHRpb24p
IHsKKyAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHsKKyAgICAgIHZhciAkdGhpcyA9
ICQodGhpcykKKyAgICAgICAgLCBkYXRhID0gJHRoaXMuZGF0YSgnY29sbGFwc2UnKQorICAgICAg
ICAsIG9wdGlvbnMgPSB0eXBlb2Ygb3B0aW9uID09ICdvYmplY3QnICYmIG9wdGlvbgorICAgICAg
aWYgKCFkYXRhKSAkdGhpcy5kYXRhKCdjb2xsYXBzZScsIChkYXRhID0gbmV3IENvbGxhcHNlKHRo
aXMsIG9wdGlvbnMpKSkKKyAgICAgIGlmICh0eXBlb2Ygb3B0aW9uID09ICdzdHJpbmcnKSBkYXRh
W29wdGlvbl0oKQorICAgIH0pCisgIH0KKworICAkLmZuLmNvbGxhcHNlLmRlZmF1bHRzID0gewor
ICAgIHRvZ2dsZTogdHJ1ZQorICB9CisKKyAgJC5mbi5jb2xsYXBzZS5Db25zdHJ1Y3RvciA9IENv
bGxhcHNlCisKKworIC8qIENPTExBUFNFIE5PIENPTkZMSUNUCisgICogPT09PT09PT09PT09PT09
PT09PT0gKi8KKworICAkLmZuLmNvbGxhcHNlLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7Cisg
ICAgJC5mbi5jb2xsYXBzZSA9IG9sZAorICAgIHJldHVybiB0aGlzCisgIH0KKworCisgLyogQ09M
TEFQU0UgREFUQS1BUEkKKyAgKiA9PT09PT09PT09PT09PT09PSAqLworCisgICQoZG9jdW1lbnQp
Lm9uKCdjbGljay5jb2xsYXBzZS5kYXRhLWFwaScsICdbZGF0YS10b2dnbGU9Y29sbGFwc2VdJywg
ZnVuY3Rpb24gKGUpIHsKKyAgICB2YXIgJHRoaXMgPSAkKHRoaXMpLCBocmVmCisgICAgICAsIHRh
cmdldCA9ICR0aGlzLmF0dHIoJ2RhdGEtdGFyZ2V0JykKKyAgICAgICAgfHwgZS5wcmV2ZW50RGVm
YXVsdCgpCisgICAgICAgIHx8IChocmVmID0gJHRoaXMuYXR0cignaHJlZicpKSAmJiBocmVmLnJl
cGxhY2UoLy4qKD89I1teXHNdKyQpLywgJycpIC8vc3RyaXAgZm9yIGllNworICAgICAgLCBvcHRp
b24gPSAkKHRhcmdldCkuZGF0YSgnY29sbGFwc2UnKSA/ICd0b2dnbGUnIDogJHRoaXMuZGF0YSgp
CisgICAgJHRoaXNbJCh0YXJnZXQpLmhhc0NsYXNzKCdpbicpID8gJ2FkZENsYXNzJyA6ICdyZW1v
dmVDbGFzcyddKCdjb2xsYXBzZWQnKQorICAgICQodGFyZ2V0KS5jb2xsYXBzZShvcHRpb24pCisg
IH0pCisKK30od2luZG93LmpRdWVyeSk7LyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBib290c3RyYXAtZHJvcGRvd24uanMg
djIuMi4yCisgKiBodHRwOi8vdHdpdHRlci5naXRodWIuY29tL2Jvb3RzdHJhcC9qYXZhc2NyaXB0
Lmh0bWwjZHJvcGRvd25zCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAyMDEyIFR3aXR0ZXIsIEluYy4K
KyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0
aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNv
bXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0
aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNF
TlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3Jl
ZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNl
bnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJB
TlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGll
ZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmlu
ZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICog
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ICovCisKKworIWZ1bmN0aW9uICgkKSB7CisKKyAgInVzZSBzdHJpY3QiOyAvLyBqc2hpbnQg
O187CisKKworIC8qIERST1BET1dOIENMQVNTIERFRklOSVRJT04KKyAgKiA9PT09PT09PT09PT09
PT09PT09PT09PT09ICovCisKKyAgdmFyIHRvZ2dsZSA9ICdbZGF0YS10b2dnbGU9ZHJvcGRvd25d
JworICAgICwgRHJvcGRvd24gPSBmdW5jdGlvbiAoZWxlbWVudCkgeworICAgICAgICB2YXIgJGVs
ID0gJChlbGVtZW50KS5vbignY2xpY2suZHJvcGRvd24uZGF0YS1hcGknLCB0aGlzLnRvZ2dsZSkK
KyAgICAgICAgJCgnaHRtbCcpLm9uKCdjbGljay5kcm9wZG93bi5kYXRhLWFwaScsIGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgICAkZWwucGFyZW50KCkucmVtb3ZlQ2xhc3MoJ29wZW4nKQorICAgICAg
ICB9KQorICAgICAgfQorCisgIERyb3Bkb3duLnByb3RvdHlwZSA9IHsKKworICAgIGNvbnN0cnVj
dG9yOiBEcm9wZG93bgorCisgICwgdG9nZ2xlOiBmdW5jdGlvbiAoZSkgeworICAgICAgdmFyICR0
aGlzID0gJCh0aGlzKQorICAgICAgICAsICRwYXJlbnQKKyAgICAgICAgLCBpc0FjdGl2ZQorCisg
ICAgICBpZiAoJHRoaXMuaXMoJy5kaXNhYmxlZCwgOmRpc2FibGVkJykpIHJldHVybgorCisgICAg
ICAkcGFyZW50ID0gZ2V0UGFyZW50KCR0aGlzKQorCisgICAgICBpc0FjdGl2ZSA9ICRwYXJlbnQu
aGFzQ2xhc3MoJ29wZW4nKQorCisgICAgICBjbGVhck1lbnVzKCkKKworICAgICAgaWYgKCFpc0Fj
dGl2ZSkgeworICAgICAgICAkcGFyZW50LnRvZ2dsZUNsYXNzKCdvcGVuJykKKyAgICAgIH0KKwor
ICAgICAgJHRoaXMuZm9jdXMoKQorCisgICAgICByZXR1cm4gZmFsc2UKKyAgICB9CisKKyAgLCBr
ZXlkb3duOiBmdW5jdGlvbiAoZSkgeworICAgICAgdmFyICR0aGlzCisgICAgICAgICwgJGl0ZW1z
CisgICAgICAgICwgJGFjdGl2ZQorICAgICAgICAsICRwYXJlbnQKKyAgICAgICAgLCBpc0FjdGl2
ZQorICAgICAgICAsIGluZGV4CisKKyAgICAgIGlmICghLygzOHw0MHwyNykvLnRlc3QoZS5rZXlD
b2RlKSkgcmV0dXJuCisKKyAgICAgICR0aGlzID0gJCh0aGlzKQorCisgICAgICBlLnByZXZlbnRE
ZWZhdWx0KCkKKyAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCkKKworICAgICAgaWYgKCR0aGlzLmlz
KCcuZGlzYWJsZWQsIDpkaXNhYmxlZCcpKSByZXR1cm4KKworICAgICAgJHBhcmVudCA9IGdldFBh
cmVudCgkdGhpcykKKworICAgICAgaXNBY3RpdmUgPSAkcGFyZW50Lmhhc0NsYXNzKCdvcGVuJykK
KworICAgICAgaWYgKCFpc0FjdGl2ZSB8fCAoaXNBY3RpdmUgJiYgZS5rZXlDb2RlID09IDI3KSkg
cmV0dXJuICR0aGlzLmNsaWNrKCkKKworICAgICAgJGl0ZW1zID0gJCgnW3JvbGU9bWVudV0gbGk6
bm90KC5kaXZpZGVyKTp2aXNpYmxlIGEnLCAkcGFyZW50KQorCisgICAgICBpZiAoISRpdGVtcy5s
ZW5ndGgpIHJldHVybgorCisgICAgICBpbmRleCA9ICRpdGVtcy5pbmRleCgkaXRlbXMuZmlsdGVy
KCc6Zm9jdXMnKSkKKworICAgICAgaWYgKGUua2V5Q29kZSA9PSAzOCAmJiBpbmRleCA+IDApIGlu
ZGV4LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdXAKKyAgICAg
IGlmIChlLmtleUNvZGUgPT0gNDAgJiYgaW5kZXggPCAkaXRlbXMubGVuZ3RoIC0gMSkgaW5kZXgr
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRvd24KKyAgICAgIGlmICghfmluZGV4KSBpbmRl
eCA9IDAKKworICAgICAgJGl0ZW1zCisgICAgICAgIC5lcShpbmRleCkKKyAgICAgICAgLmZvY3Vz
KCkKKyAgICB9CisKKyAgfQorCisgIGZ1bmN0aW9uIGNsZWFyTWVudXMoKSB7CisgICAgJCh0b2dn
bGUpLmVhY2goZnVuY3Rpb24gKCkgeworICAgICAgZ2V0UGFyZW50KCQodGhpcykpLnJlbW92ZUNs
YXNzKCdvcGVuJykKKyAgICB9KQorICB9CisKKyAgZnVuY3Rpb24gZ2V0UGFyZW50KCR0aGlzKSB7
CisgICAgdmFyIHNlbGVjdG9yID0gJHRoaXMuYXR0cignZGF0YS10YXJnZXQnKQorICAgICAgLCAk
cGFyZW50CisKKyAgICBpZiAoIXNlbGVjdG9yKSB7CisgICAgICBzZWxlY3RvciA9ICR0aGlzLmF0
dHIoJ2hyZWYnKQorICAgICAgc2VsZWN0b3IgPSBzZWxlY3RvciAmJiAvIy8udGVzdChzZWxlY3Rv
cikgJiYgc2VsZWN0b3IucmVwbGFjZSgvLiooPz0jW15cc10qJCkvLCAnJykgLy9zdHJpcCBmb3Ig
aWU3CisgICAgfQorCisgICAgJHBhcmVudCA9ICQoc2VsZWN0b3IpCisgICAgJHBhcmVudC5sZW5n
dGggfHwgKCRwYXJlbnQgPSAkdGhpcy5wYXJlbnQoKSkKKworICAgIHJldHVybiAkcGFyZW50Cisg
IH0KKworCisgIC8qIERST1BET1dOIFBMVUdJTiBERUZJTklUSU9OCisgICAqID09PT09PT09PT09
PT09PT09PT09PT09PT09ICovCisKKyAgdmFyIG9sZCA9ICQuZm4uZHJvcGRvd24KKworICAkLmZu
LmRyb3Bkb3duID0gZnVuY3Rpb24gKG9wdGlvbikgeworICAgIHJldHVybiB0aGlzLmVhY2goZnVu
Y3Rpb24gKCkgeworICAgICAgdmFyICR0aGlzID0gJCh0aGlzKQorICAgICAgICAsIGRhdGEgPSAk
dGhpcy5kYXRhKCdkcm9wZG93bicpCisgICAgICBpZiAoIWRhdGEpICR0aGlzLmRhdGEoJ2Ryb3Bk
b3duJywgKGRhdGEgPSBuZXcgRHJvcGRvd24odGhpcykpKQorICAgICAgaWYgKHR5cGVvZiBvcHRp
b24gPT0gJ3N0cmluZycpIGRhdGFbb3B0aW9uXS5jYWxsKCR0aGlzKQorICAgIH0pCisgIH0KKwor
ICAkLmZuLmRyb3Bkb3duLkNvbnN0cnVjdG9yID0gRHJvcGRvd24KKworCisgLyogRFJPUERPV04g
Tk8gQ09ORkxJQ1QKKyAgKiA9PT09PT09PT09PT09PT09PT09PSAqLworCisgICQuZm4uZHJvcGRv
d24ubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHsKKyAgICAkLmZuLmRyb3Bkb3duID0gb2xkCisg
ICAgcmV0dXJuIHRoaXMKKyAgfQorCisKKyAgLyogQVBQTFkgVE8gU1RBTkRBUkQgRFJPUERPV04g
RUxFTUVOVFMKKyAgICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKwor
ICAkKGRvY3VtZW50KQorICAgIC5vbignY2xpY2suZHJvcGRvd24uZGF0YS1hcGkgdG91Y2hzdGFy
dC5kcm9wZG93bi5kYXRhLWFwaScsIGNsZWFyTWVudXMpCisgICAgLm9uKCdjbGljay5kcm9wZG93
biB0b3VjaHN0YXJ0LmRyb3Bkb3duLmRhdGEtYXBpJywgJy5kcm9wZG93biBmb3JtJywgZnVuY3Rp
b24gKGUpIHsgZS5zdG9wUHJvcGFnYXRpb24oKSB9KQorICAgIC5vbigndG91Y2hzdGFydC5kcm9w
ZG93bi5kYXRhLWFwaScsICcuZHJvcGRvd24tbWVudScsIGZ1bmN0aW9uIChlKSB7IGUuc3RvcFBy
b3BhZ2F0aW9uKCkgfSkKKyAgICAub24oJ2NsaWNrLmRyb3Bkb3duLmRhdGEtYXBpIHRvdWNoc3Rh
cnQuZHJvcGRvd24uZGF0YS1hcGknICAsIHRvZ2dsZSwgRHJvcGRvd24ucHJvdG90eXBlLnRvZ2ds
ZSkKKyAgICAub24oJ2tleWRvd24uZHJvcGRvd24uZGF0YS1hcGkgdG91Y2hzdGFydC5kcm9wZG93
bi5kYXRhLWFwaScsIHRvZ2dsZSArICcsIFtyb2xlPW1lbnVdJyAsIERyb3Bkb3duLnByb3RvdHlw
ZS5rZXlkb3duKQorCit9KHdpbmRvdy5qUXVlcnkpOy8qID09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogYm9vdHN0cmFwLW1vZGFsLmpz
IHYyLjIuMgorICogaHR0cDovL3R3aXR0ZXIuZ2l0aHViLmNvbS9ib290c3RyYXAvamF2YXNjcmlw
dC5odG1sI21vZGFscworICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgMjAxMiBUd2l0dGVyLCBJbmMuCisgKgor
ICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJM
aWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlh
bmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExp
Y2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0y
LjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRv
IGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBp
cyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVT
IE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisg
KiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVy
bWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqID09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwor
CisKKyFmdW5jdGlvbiAoJCkgeworCisgICJ1c2Ugc3RyaWN0IjsgLy8ganNoaW50IDtfOworCisK
KyAvKiBNT0RBTCBDTEFTUyBERUZJTklUSU9OCisgICogPT09PT09PT09PT09PT09PT09PT09PSAq
LworCisgIHZhciBNb2RhbCA9IGZ1bmN0aW9uIChlbGVtZW50LCBvcHRpb25zKSB7CisgICAgdGhp
cy5vcHRpb25zID0gb3B0aW9ucworICAgIHRoaXMuJGVsZW1lbnQgPSAkKGVsZW1lbnQpCisgICAg
ICAuZGVsZWdhdGUoJ1tkYXRhLWRpc21pc3M9Im1vZGFsIl0nLCAnY2xpY2suZGlzbWlzcy5tb2Rh
bCcsICQucHJveHkodGhpcy5oaWRlLCB0aGlzKSkKKyAgICB0aGlzLm9wdGlvbnMucmVtb3RlICYm
IHRoaXMuJGVsZW1lbnQuZmluZCgnLm1vZGFsLWJvZHknKS5sb2FkKHRoaXMub3B0aW9ucy5yZW1v
dGUpCisgIH0KKworICBNb2RhbC5wcm90b3R5cGUgPSB7CisKKyAgICAgIGNvbnN0cnVjdG9yOiBN
b2RhbAorCisgICAgLCB0b2dnbGU6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXNb
IXRoaXMuaXNTaG93biA/ICdzaG93JyA6ICdoaWRlJ10oKQorICAgICAgfQorCisgICAgLCBzaG93
OiBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciB0aGF0ID0gdGhpcworICAgICAgICAgICwgZSA9
ICQuRXZlbnQoJ3Nob3cnKQorCisgICAgICAgIHRoaXMuJGVsZW1lbnQudHJpZ2dlcihlKQorCisg
ICAgICAgIGlmICh0aGlzLmlzU2hvd24gfHwgZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkgcmV0dXJu
CisKKyAgICAgICAgdGhpcy5pc1Nob3duID0gdHJ1ZQorCisgICAgICAgIHRoaXMuZXNjYXBlKCkK
KworICAgICAgICB0aGlzLmJhY2tkcm9wKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICB2YXIgdHJh
bnNpdGlvbiA9ICQuc3VwcG9ydC50cmFuc2l0aW9uICYmIHRoYXQuJGVsZW1lbnQuaGFzQ2xhc3Mo
J2ZhZGUnKQorCisgICAgICAgICAgaWYgKCF0aGF0LiRlbGVtZW50LnBhcmVudCgpLmxlbmd0aCkg
eworICAgICAgICAgICAgdGhhdC4kZWxlbWVudC5hcHBlbmRUbyhkb2N1bWVudC5ib2R5KSAvL2Rv
bid0IG1vdmUgbW9kYWxzIGRvbSBwb3NpdGlvbgorICAgICAgICAgIH0KKworICAgICAgICAgIHRo
YXQuJGVsZW1lbnQKKyAgICAgICAgICAgIC5zaG93KCkKKworICAgICAgICAgIGlmICh0cmFuc2l0
aW9uKSB7CisgICAgICAgICAgICB0aGF0LiRlbGVtZW50WzBdLm9mZnNldFdpZHRoIC8vIGZvcmNl
IHJlZmxvdworICAgICAgICAgIH0KKworICAgICAgICAgIHRoYXQuJGVsZW1lbnQKKyAgICAgICAg
ICAgIC5hZGRDbGFzcygnaW4nKQorICAgICAgICAgICAgLmF0dHIoJ2FyaWEtaGlkZGVuJywgZmFs
c2UpCisKKyAgICAgICAgICB0aGF0LmVuZm9yY2VGb2N1cygpCisKKyAgICAgICAgICB0cmFuc2l0
aW9uID8KKyAgICAgICAgICAgIHRoYXQuJGVsZW1lbnQub25lKCQuc3VwcG9ydC50cmFuc2l0aW9u
LmVuZCwgZnVuY3Rpb24gKCkgeyB0aGF0LiRlbGVtZW50LmZvY3VzKCkudHJpZ2dlcignc2hvd24n
KSB9KSA6CisgICAgICAgICAgICB0aGF0LiRlbGVtZW50LmZvY3VzKCkudHJpZ2dlcignc2hvd24n
KQorCisgICAgICAgIH0pCisgICAgICB9CisKKyAgICAsIGhpZGU6IGZ1bmN0aW9uIChlKSB7Cisg
ICAgICAgIGUgJiYgZS5wcmV2ZW50RGVmYXVsdCgpCisKKyAgICAgICAgdmFyIHRoYXQgPSB0aGlz
CisKKyAgICAgICAgZSA9ICQuRXZlbnQoJ2hpZGUnKQorCisgICAgICAgIHRoaXMuJGVsZW1lbnQu
dHJpZ2dlcihlKQorCisgICAgICAgIGlmICghdGhpcy5pc1Nob3duIHx8IGUuaXNEZWZhdWx0UHJl
dmVudGVkKCkpIHJldHVybgorCisgICAgICAgIHRoaXMuaXNTaG93biA9IGZhbHNlCisKKyAgICAg
ICAgdGhpcy5lc2NhcGUoKQorCisgICAgICAgICQoZG9jdW1lbnQpLm9mZignZm9jdXNpbi5tb2Rh
bCcpCisKKyAgICAgICAgdGhpcy4kZWxlbWVudAorICAgICAgICAgIC5yZW1vdmVDbGFzcygnaW4n
KQorICAgICAgICAgIC5hdHRyKCdhcmlhLWhpZGRlbicsIHRydWUpCisKKyAgICAgICAgJC5zdXBw
b3J0LnRyYW5zaXRpb24gJiYgdGhpcy4kZWxlbWVudC5oYXNDbGFzcygnZmFkZScpID8KKyAgICAg
ICAgICB0aGlzLmhpZGVXaXRoVHJhbnNpdGlvbigpIDoKKyAgICAgICAgICB0aGlzLmhpZGVNb2Rh
bCgpCisgICAgICB9CisKKyAgICAsIGVuZm9yY2VGb2N1czogZnVuY3Rpb24gKCkgeworICAgICAg
ICB2YXIgdGhhdCA9IHRoaXMKKyAgICAgICAgJChkb2N1bWVudCkub24oJ2ZvY3VzaW4ubW9kYWwn
LCBmdW5jdGlvbiAoZSkgeworICAgICAgICAgIGlmICh0aGF0LiRlbGVtZW50WzBdICE9PSBlLnRh
cmdldCAmJiAhdGhhdC4kZWxlbWVudC5oYXMoZS50YXJnZXQpLmxlbmd0aCkgeworICAgICAgICAg
ICAgdGhhdC4kZWxlbWVudC5mb2N1cygpCisgICAgICAgICAgfQorICAgICAgICB9KQorICAgICAg
fQorCisgICAgLCBlc2NhcGU6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIHRoYXQgPSB0aGlz
CisgICAgICAgIGlmICh0aGlzLmlzU2hvd24gJiYgdGhpcy5vcHRpb25zLmtleWJvYXJkKSB7Cisg
ICAgICAgICAgdGhpcy4kZWxlbWVudC5vbigna2V5dXAuZGlzbWlzcy5tb2RhbCcsIGZ1bmN0aW9u
ICggZSApIHsKKyAgICAgICAgICAgIGUud2hpY2ggPT0gMjcgJiYgdGhhdC5oaWRlKCkKKyAgICAg
ICAgICB9KQorICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLmlzU2hvd24pIHsKKyAgICAgICAgICB0
aGlzLiRlbGVtZW50Lm9mZigna2V5dXAuZGlzbWlzcy5tb2RhbCcpCisgICAgICAgIH0KKyAgICAg
IH0KKworICAgICwgaGlkZVdpdGhUcmFuc2l0aW9uOiBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZh
ciB0aGF0ID0gdGhpcworICAgICAgICAgICwgdGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgICB0aGF0LiRlbGVtZW50Lm9mZigkLnN1cHBvcnQudHJhbnNpdGlv
bi5lbmQpCisgICAgICAgICAgICAgIHRoYXQuaGlkZU1vZGFsKCkKKyAgICAgICAgICAgIH0sIDUw
MCkKKworICAgICAgICB0aGlzLiRlbGVtZW50Lm9uZSgkLnN1cHBvcnQudHJhbnNpdGlvbi5lbmQs
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCkKKyAgICAgICAg
ICB0aGF0LmhpZGVNb2RhbCgpCisgICAgICAgIH0pCisgICAgICB9CisKKyAgICAsIGhpZGVNb2Rh
bDogZnVuY3Rpb24gKHRoYXQpIHsKKyAgICAgICAgdGhpcy4kZWxlbWVudAorICAgICAgICAgIC5o
aWRlKCkKKyAgICAgICAgICAudHJpZ2dlcignaGlkZGVuJykKKworICAgICAgICB0aGlzLmJhY2tk
cm9wKCkKKyAgICAgIH0KKworICAgICwgcmVtb3ZlQmFja2Ryb3A6IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgdGhpcy4kYmFja2Ryb3AucmVtb3ZlKCkKKyAgICAgICAgdGhpcy4kYmFja2Ryb3AgPSBu
dWxsCisgICAgICB9CisKKyAgICAsIGJhY2tkcm9wOiBmdW5jdGlvbiAoY2FsbGJhY2spIHsKKyAg
ICAgICAgdmFyIHRoYXQgPSB0aGlzCisgICAgICAgICAgLCBhbmltYXRlID0gdGhpcy4kZWxlbWVu
dC5oYXNDbGFzcygnZmFkZScpID8gJ2ZhZGUnIDogJycKKworICAgICAgICBpZiAodGhpcy5pc1No
b3duICYmIHRoaXMub3B0aW9ucy5iYWNrZHJvcCkgeworICAgICAgICAgIHZhciBkb0FuaW1hdGUg
PSAkLnN1cHBvcnQudHJhbnNpdGlvbiAmJiBhbmltYXRlCisKKyAgICAgICAgICB0aGlzLiRiYWNr
ZHJvcCA9ICQoJzxkaXYgY2xhc3M9Im1vZGFsLWJhY2tkcm9wICcgKyBhbmltYXRlICsgJyIgLz4n
KQorICAgICAgICAgICAgLmFwcGVuZFRvKGRvY3VtZW50LmJvZHkpCisKKyAgICAgICAgICB0aGlz
LiRiYWNrZHJvcC5jbGljaygKKyAgICAgICAgICAgIHRoaXMub3B0aW9ucy5iYWNrZHJvcCA9PSAn
c3RhdGljJyA/CisgICAgICAgICAgICAgICQucHJveHkodGhpcy4kZWxlbWVudFswXS5mb2N1cywg
dGhpcy4kZWxlbWVudFswXSkKKyAgICAgICAgICAgIDogJC5wcm94eSh0aGlzLmhpZGUsIHRoaXMp
CisgICAgICAgICAgKQorCisgICAgICAgICAgaWYgKGRvQW5pbWF0ZSkgdGhpcy4kYmFja2Ryb3Bb
MF0ub2Zmc2V0V2lkdGggLy8gZm9yY2UgcmVmbG93CisKKyAgICAgICAgICB0aGlzLiRiYWNrZHJv
cC5hZGRDbGFzcygnaW4nKQorCisgICAgICAgICAgZG9BbmltYXRlID8KKyAgICAgICAgICAgIHRo
aXMuJGJhY2tkcm9wLm9uZSgkLnN1cHBvcnQudHJhbnNpdGlvbi5lbmQsIGNhbGxiYWNrKSA6Cisg
ICAgICAgICAgICBjYWxsYmFjaygpCisKKyAgICAgICAgfSBlbHNlIGlmICghdGhpcy5pc1Nob3du
ICYmIHRoaXMuJGJhY2tkcm9wKSB7CisgICAgICAgICAgdGhpcy4kYmFja2Ryb3AucmVtb3ZlQ2xh
c3MoJ2luJykKKworICAgICAgICAgICQuc3VwcG9ydC50cmFuc2l0aW9uICYmIHRoaXMuJGVsZW1l
bnQuaGFzQ2xhc3MoJ2ZhZGUnKT8KKyAgICAgICAgICAgIHRoaXMuJGJhY2tkcm9wLm9uZSgkLnN1
cHBvcnQudHJhbnNpdGlvbi5lbmQsICQucHJveHkodGhpcy5yZW1vdmVCYWNrZHJvcCwgdGhpcykp
IDoKKyAgICAgICAgICAgIHRoaXMucmVtb3ZlQmFja2Ryb3AoKQorCisgICAgICAgIH0gZWxzZSBp
ZiAoY2FsbGJhY2spIHsKKyAgICAgICAgICBjYWxsYmFjaygpCisgICAgICAgIH0KKyAgICAgIH0K
KyAgfQorCisKKyAvKiBNT0RBTCBQTFVHSU4gREVGSU5JVElPTgorICAqID09PT09PT09PT09PT09
PT09PT09PT09ICovCisKKyAgdmFyIG9sZCA9ICQuZm4ubW9kYWwKKworICAkLmZuLm1vZGFsID0g
ZnVuY3Rpb24gKG9wdGlvbikgeworICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkgewor
ICAgICAgdmFyICR0aGlzID0gJCh0aGlzKQorICAgICAgICAsIGRhdGEgPSAkdGhpcy5kYXRhKCdt
b2RhbCcpCisgICAgICAgICwgb3B0aW9ucyA9ICQuZXh0ZW5kKHt9LCAkLmZuLm1vZGFsLmRlZmF1
bHRzLCAkdGhpcy5kYXRhKCksIHR5cGVvZiBvcHRpb24gPT0gJ29iamVjdCcgJiYgb3B0aW9uKQor
ICAgICAgaWYgKCFkYXRhKSAkdGhpcy5kYXRhKCdtb2RhbCcsIChkYXRhID0gbmV3IE1vZGFsKHRo
aXMsIG9wdGlvbnMpKSkKKyAgICAgIGlmICh0eXBlb2Ygb3B0aW9uID09ICdzdHJpbmcnKSBkYXRh
W29wdGlvbl0oKQorICAgICAgZWxzZSBpZiAob3B0aW9ucy5zaG93KSBkYXRhLnNob3coKQorICAg
IH0pCisgIH0KKworICAkLmZuLm1vZGFsLmRlZmF1bHRzID0geworICAgICAgYmFja2Ryb3A6IHRy
dWUKKyAgICAsIGtleWJvYXJkOiB0cnVlCisgICAgLCBzaG93OiB0cnVlCisgIH0KKworICAkLmZu
Lm1vZGFsLkNvbnN0cnVjdG9yID0gTW9kYWwKKworCisgLyogTU9EQUwgTk8gQ09ORkxJQ1QKKyAg
KiA9PT09PT09PT09PT09PT09PSAqLworCisgICQuZm4ubW9kYWwubm9Db25mbGljdCA9IGZ1bmN0
aW9uICgpIHsKKyAgICAkLmZuLm1vZGFsID0gb2xkCisgICAgcmV0dXJuIHRoaXMKKyAgfQorCisK
KyAvKiBNT0RBTCBEQVRBLUFQSQorICAqID09PT09PT09PT09PT09ICovCisKKyAgJChkb2N1bWVu
dCkub24oJ2NsaWNrLm1vZGFsLmRhdGEtYXBpJywgJ1tkYXRhLXRvZ2dsZT0ibW9kYWwiXScsIGZ1
bmN0aW9uIChlKSB7CisgICAgdmFyICR0aGlzID0gJCh0aGlzKQorICAgICAgLCBocmVmID0gJHRo
aXMuYXR0cignaHJlZicpCisgICAgICAsICR0YXJnZXQgPSAkKCR0aGlzLmF0dHIoJ2RhdGEtdGFy
Z2V0JykgfHwgKGhyZWYgJiYgaHJlZi5yZXBsYWNlKC8uKig/PSNbXlxzXSskKS8sICcnKSkpIC8v
c3RyaXAgZm9yIGllNworICAgICAgLCBvcHRpb24gPSAkdGFyZ2V0LmRhdGEoJ21vZGFsJykgPyAn
dG9nZ2xlJyA6ICQuZXh0ZW5kKHsgcmVtb3RlOiEvIy8udGVzdChocmVmKSAmJiBocmVmIH0sICR0
YXJnZXQuZGF0YSgpLCAkdGhpcy5kYXRhKCkpCisKKyAgICBlLnByZXZlbnREZWZhdWx0KCkKKwor
ICAgICR0YXJnZXQKKyAgICAgIC5tb2RhbChvcHRpb24pCisgICAgICAub25lKCdoaWRlJywgZnVu
Y3Rpb24gKCkgeworICAgICAgICAkdGhpcy5mb2N1cygpCisgICAgICB9KQorICB9KQorCit9KHdp
bmRvdy5qUXVlcnkpOworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KKyAqIGJvb3RzdHJhcC10b29sdGlwLmpzIHYyLjIuMgorICog
aHR0cDovL3R3aXR0ZXIuZ2l0aHViLmNvbS9ib290c3RyYXAvamF2YXNjcmlwdC5odG1sI3Rvb2x0
aXBzCisgKiBJbnNwaXJlZCBieSB0aGUgb3JpZ2luYWwgalF1ZXJ5LnRpcHN5IGJ5IEphc29uIEZy
YW1lCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQorICogQ29weXJpZ2h0IDIwMTIgVHdpdHRlciwgSW5jLgorICoKKyAqIExpY2Vu
c2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIp
OworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRo
IHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0
CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgor
ICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0
aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJp
YnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05E
SVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRo
ZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25z
IGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKiA9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKworIWZ1
bmN0aW9uICgkKSB7CisKKyAgInVzZSBzdHJpY3QiOyAvLyBqc2hpbnQgO187CisKKworIC8qIFRP
T0xUSVAgUFVCTElDIENMQVNTIERFRklOSVRJT04KKyAgKiA9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ICovCisKKyAgdmFyIFRvb2x0aXAgPSBmdW5jdGlvbiAoZWxlbWVudCwgb3B0aW9u
cykgeworICAgIHRoaXMuaW5pdCgndG9vbHRpcCcsIGVsZW1lbnQsIG9wdGlvbnMpCisgIH0KKwor
ICBUb29sdGlwLnByb3RvdHlwZSA9IHsKKworICAgIGNvbnN0cnVjdG9yOiBUb29sdGlwCisKKyAg
LCBpbml0OiBmdW5jdGlvbiAodHlwZSwgZWxlbWVudCwgb3B0aW9ucykgeworICAgICAgdmFyIGV2
ZW50SW4KKyAgICAgICAgLCBldmVudE91dAorCisgICAgICB0aGlzLnR5cGUgPSB0eXBlCisgICAg
ICB0aGlzLiRlbGVtZW50ID0gJChlbGVtZW50KQorICAgICAgdGhpcy5vcHRpb25zID0gdGhpcy5n
ZXRPcHRpb25zKG9wdGlvbnMpCisgICAgICB0aGlzLmVuYWJsZWQgPSB0cnVlCisKKyAgICAgIGlm
ICh0aGlzLm9wdGlvbnMudHJpZ2dlciA9PSAnY2xpY2snKSB7CisgICAgICAgIHRoaXMuJGVsZW1l
bnQub24oJ2NsaWNrLicgKyB0aGlzLnR5cGUsIHRoaXMub3B0aW9ucy5zZWxlY3RvciwgJC5wcm94
eSh0aGlzLnRvZ2dsZSwgdGhpcykpCisgICAgICB9IGVsc2UgaWYgKHRoaXMub3B0aW9ucy50cmln
Z2VyICE9ICdtYW51YWwnKSB7CisgICAgICAgIGV2ZW50SW4gPSB0aGlzLm9wdGlvbnMudHJpZ2dl
ciA9PSAnaG92ZXInID8gJ21vdXNlZW50ZXInIDogJ2ZvY3VzJworICAgICAgICBldmVudE91dCA9
IHRoaXMub3B0aW9ucy50cmlnZ2VyID09ICdob3ZlcicgPyAnbW91c2VsZWF2ZScgOiAnYmx1cicK
KyAgICAgICAgdGhpcy4kZWxlbWVudC5vbihldmVudEluICsgJy4nICsgdGhpcy50eXBlLCB0aGlz
Lm9wdGlvbnMuc2VsZWN0b3IsICQucHJveHkodGhpcy5lbnRlciwgdGhpcykpCisgICAgICAgIHRo
aXMuJGVsZW1lbnQub24oZXZlbnRPdXQgKyAnLicgKyB0aGlzLnR5cGUsIHRoaXMub3B0aW9ucy5z
ZWxlY3RvciwgJC5wcm94eSh0aGlzLmxlYXZlLCB0aGlzKSkKKyAgICAgIH0KKworICAgICAgdGhp
cy5vcHRpb25zLnNlbGVjdG9yID8KKyAgICAgICAgKHRoaXMuX29wdGlvbnMgPSAkLmV4dGVuZCh7
fSwgdGhpcy5vcHRpb25zLCB7IHRyaWdnZXI6ICdtYW51YWwnLCBzZWxlY3RvcjogJycgfSkpIDoK
KyAgICAgICAgdGhpcy5maXhUaXRsZSgpCisgICAgfQorCisgICwgZ2V0T3B0aW9uczogZnVuY3Rp
b24gKG9wdGlvbnMpIHsKKyAgICAgIG9wdGlvbnMgPSAkLmV4dGVuZCh7fSwgJC5mblt0aGlzLnR5
cGVdLmRlZmF1bHRzLCBvcHRpb25zLCB0aGlzLiRlbGVtZW50LmRhdGEoKSkKKworICAgICAgaWYg
KG9wdGlvbnMuZGVsYXkgJiYgdHlwZW9mIG9wdGlvbnMuZGVsYXkgPT0gJ251bWJlcicpIHsKKyAg
ICAgICAgb3B0aW9ucy5kZWxheSA9IHsKKyAgICAgICAgICBzaG93OiBvcHRpb25zLmRlbGF5Cisg
ICAgICAgICwgaGlkZTogb3B0aW9ucy5kZWxheQorICAgICAgICB9CisgICAgICB9CisKKyAgICAg
IHJldHVybiBvcHRpb25zCisgICAgfQorCisgICwgZW50ZXI6IGZ1bmN0aW9uIChlKSB7CisgICAg
ICB2YXIgc2VsZiA9ICQoZS5jdXJyZW50VGFyZ2V0KVt0aGlzLnR5cGVdKHRoaXMuX29wdGlvbnMp
LmRhdGEodGhpcy50eXBlKQorCisgICAgICBpZiAoIXNlbGYub3B0aW9ucy5kZWxheSB8fCAhc2Vs
Zi5vcHRpb25zLmRlbGF5LnNob3cpIHJldHVybiBzZWxmLnNob3coKQorCisgICAgICBjbGVhclRp
bWVvdXQodGhpcy50aW1lb3V0KQorICAgICAgc2VsZi5ob3ZlclN0YXRlID0gJ2luJworICAgICAg
dGhpcy50aW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHNlbGYu
aG92ZXJTdGF0ZSA9PSAnaW4nKSBzZWxmLnNob3coKQorICAgICAgfSwgc2VsZi5vcHRpb25zLmRl
bGF5LnNob3cpCisgICAgfQorCisgICwgbGVhdmU6IGZ1bmN0aW9uIChlKSB7CisgICAgICB2YXIg
c2VsZiA9ICQoZS5jdXJyZW50VGFyZ2V0KVt0aGlzLnR5cGVdKHRoaXMuX29wdGlvbnMpLmRhdGEo
dGhpcy50eXBlKQorCisgICAgICBpZiAodGhpcy50aW1lb3V0KSBjbGVhclRpbWVvdXQodGhpcy50
aW1lb3V0KQorICAgICAgaWYgKCFzZWxmLm9wdGlvbnMuZGVsYXkgfHwgIXNlbGYub3B0aW9ucy5k
ZWxheS5oaWRlKSByZXR1cm4gc2VsZi5oaWRlKCkKKworICAgICAgc2VsZi5ob3ZlclN0YXRlID0g
J291dCcKKyAgICAgIHRoaXMudGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAg
ICAgIGlmIChzZWxmLmhvdmVyU3RhdGUgPT0gJ291dCcpIHNlbGYuaGlkZSgpCisgICAgICB9LCBz
ZWxmLm9wdGlvbnMuZGVsYXkuaGlkZSkKKyAgICB9CisKKyAgLCBzaG93OiBmdW5jdGlvbiAoKSB7
CisgICAgICB2YXIgJHRpcAorICAgICAgICAsIGluc2lkZQorICAgICAgICAsIHBvcworICAgICAg
ICAsIGFjdHVhbFdpZHRoCisgICAgICAgICwgYWN0dWFsSGVpZ2h0CisgICAgICAgICwgcGxhY2Vt
ZW50CisgICAgICAgICwgdHAKKworICAgICAgaWYgKHRoaXMuaGFzQ29udGVudCgpICYmIHRoaXMu
ZW5hYmxlZCkgeworICAgICAgICAkdGlwID0gdGhpcy50aXAoKQorICAgICAgICB0aGlzLnNldENv
bnRlbnQoKQorCisgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYW5pbWF0aW9uKSB7CisgICAgICAg
ICAgJHRpcC5hZGRDbGFzcygnZmFkZScpCisgICAgICAgIH0KKworICAgICAgICBwbGFjZW1lbnQg
PSB0eXBlb2YgdGhpcy5vcHRpb25zLnBsYWNlbWVudCA9PSAnZnVuY3Rpb24nID8KKyAgICAgICAg
ICB0aGlzLm9wdGlvbnMucGxhY2VtZW50LmNhbGwodGhpcywgJHRpcFswXSwgdGhpcy4kZWxlbWVu
dFswXSkgOgorICAgICAgICAgIHRoaXMub3B0aW9ucy5wbGFjZW1lbnQKKworICAgICAgICBpbnNp
ZGUgPSAvaW4vLnRlc3QocGxhY2VtZW50KQorCisgICAgICAgICR0aXAKKyAgICAgICAgICAuZGV0
YWNoKCkKKyAgICAgICAgICAuY3NzKHsgdG9wOiAwLCBsZWZ0OiAwLCBkaXNwbGF5OiAnYmxvY2sn
IH0pCisgICAgICAgICAgLmluc2VydEFmdGVyKHRoaXMuJGVsZW1lbnQpCisKKyAgICAgICAgcG9z
ID0gdGhpcy5nZXRQb3NpdGlvbihpbnNpZGUpCisKKyAgICAgICAgYWN0dWFsV2lkdGggPSAkdGlw
WzBdLm9mZnNldFdpZHRoCisgICAgICAgIGFjdHVhbEhlaWdodCA9ICR0aXBbMF0ub2Zmc2V0SGVp
Z2h0CisKKyAgICAgICAgc3dpdGNoIChpbnNpZGUgPyBwbGFjZW1lbnQuc3BsaXQoJyAnKVsxXSA6
IHBsYWNlbWVudCkgeworICAgICAgICAgIGNhc2UgJ2JvdHRvbSc6CisgICAgICAgICAgICB0cCA9
IHt0b3A6IHBvcy50b3AgKyBwb3MuaGVpZ2h0LCBsZWZ0OiBwb3MubGVmdCArIHBvcy53aWR0aCAv
IDIgLSBhY3R1YWxXaWR0aCAvIDJ9CisgICAgICAgICAgICBicmVhaworICAgICAgICAgIGNhc2Ug
J3RvcCc6CisgICAgICAgICAgICB0cCA9IHt0b3A6IHBvcy50b3AgLSBhY3R1YWxIZWlnaHQsIGxl
ZnQ6IHBvcy5sZWZ0ICsgcG9zLndpZHRoIC8gMiAtIGFjdHVhbFdpZHRoIC8gMn0KKyAgICAgICAg
ICAgIGJyZWFrCisgICAgICAgICAgY2FzZSAnbGVmdCc6CisgICAgICAgICAgICB0cCA9IHt0b3A6
IHBvcy50b3AgKyBwb3MuaGVpZ2h0IC8gMiAtIGFjdHVhbEhlaWdodCAvIDIsIGxlZnQ6IHBvcy5s
ZWZ0IC0gYWN0dWFsV2lkdGh9CisgICAgICAgICAgICBicmVhaworICAgICAgICAgIGNhc2UgJ3Jp
Z2h0JzoKKyAgICAgICAgICAgIHRwID0ge3RvcDogcG9zLnRvcCArIHBvcy5oZWlnaHQgLyAyIC0g
YWN0dWFsSGVpZ2h0IC8gMiwgbGVmdDogcG9zLmxlZnQgKyBwb3Mud2lkdGh9CisgICAgICAgICAg
ICBicmVhaworICAgICAgICB9CisKKyAgICAgICAgJHRpcAorICAgICAgICAgIC5vZmZzZXQodHAp
CisgICAgICAgICAgLmFkZENsYXNzKHBsYWNlbWVudCkKKyAgICAgICAgICAuYWRkQ2xhc3MoJ2lu
JykKKyAgICAgIH0KKyAgICB9CisKKyAgLCBzZXRDb250ZW50OiBmdW5jdGlvbiAoKSB7CisgICAg
ICB2YXIgJHRpcCA9IHRoaXMudGlwKCkKKyAgICAgICAgLCB0aXRsZSA9IHRoaXMuZ2V0VGl0bGUo
KQorCisgICAgICAkdGlwLmZpbmQoJy50b29sdGlwLWlubmVyJylbdGhpcy5vcHRpb25zLmh0bWwg
PyAnaHRtbCcgOiAndGV4dCddKHRpdGxlKQorICAgICAgJHRpcC5yZW1vdmVDbGFzcygnZmFkZSBp
biB0b3AgYm90dG9tIGxlZnQgcmlnaHQnKQorICAgIH0KKworICAsIGhpZGU6IGZ1bmN0aW9uICgp
IHsKKyAgICAgIHZhciB0aGF0ID0gdGhpcworICAgICAgICAsICR0aXAgPSB0aGlzLnRpcCgpCisK
KyAgICAgICR0aXAucmVtb3ZlQ2xhc3MoJ2luJykKKworICAgICAgZnVuY3Rpb24gcmVtb3ZlV2l0
aEFuaW1hdGlvbigpIHsKKyAgICAgICAgdmFyIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgICAkdGlwLm9mZigkLnN1cHBvcnQudHJhbnNpdGlvbi5lbmQpLmRldGFj
aCgpCisgICAgICAgIH0sIDUwMCkKKworICAgICAgICAkdGlwLm9uZSgkLnN1cHBvcnQudHJhbnNp
dGlvbi5lbmQsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCkK
KyAgICAgICAgICAkdGlwLmRldGFjaCgpCisgICAgICAgIH0pCisgICAgICB9CisKKyAgICAgICQu
c3VwcG9ydC50cmFuc2l0aW9uICYmIHRoaXMuJHRpcC5oYXNDbGFzcygnZmFkZScpID8KKyAgICAg
ICAgcmVtb3ZlV2l0aEFuaW1hdGlvbigpIDoKKyAgICAgICAgJHRpcC5kZXRhY2goKQorCisgICAg
ICByZXR1cm4gdGhpcworICAgIH0KKworICAsIGZpeFRpdGxlOiBmdW5jdGlvbiAoKSB7CisgICAg
ICB2YXIgJGUgPSB0aGlzLiRlbGVtZW50CisgICAgICBpZiAoJGUuYXR0cigndGl0bGUnKSB8fCB0
eXBlb2YoJGUuYXR0cignZGF0YS1vcmlnaW5hbC10aXRsZScpKSAhPSAnc3RyaW5nJykgeworICAg
ICAgICAkZS5hdHRyKCdkYXRhLW9yaWdpbmFsLXRpdGxlJywgJGUuYXR0cigndGl0bGUnKSB8fCAn
JykucmVtb3ZlQXR0cigndGl0bGUnKQorICAgICAgfQorICAgIH0KKworICAsIGhhc0NvbnRlbnQ6
IGZ1bmN0aW9uICgpIHsKKyAgICAgIHJldHVybiB0aGlzLmdldFRpdGxlKCkKKyAgICB9CisKKyAg
LCBnZXRQb3NpdGlvbjogZnVuY3Rpb24gKGluc2lkZSkgeworICAgICAgcmV0dXJuICQuZXh0ZW5k
KHt9LCAoaW5zaWRlID8ge3RvcDogMCwgbGVmdDogMH0gOiB0aGlzLiRlbGVtZW50Lm9mZnNldCgp
KSwgeworICAgICAgICB3aWR0aDogdGhpcy4kZWxlbWVudFswXS5vZmZzZXRXaWR0aAorICAgICAg
LCBoZWlnaHQ6IHRoaXMuJGVsZW1lbnRbMF0ub2Zmc2V0SGVpZ2h0CisgICAgICB9KQorICAgIH0K
KworICAsIGdldFRpdGxlOiBmdW5jdGlvbiAoKSB7CisgICAgICB2YXIgdGl0bGUKKyAgICAgICAg
LCAkZSA9IHRoaXMuJGVsZW1lbnQKKyAgICAgICAgLCBvID0gdGhpcy5vcHRpb25zCisKKyAgICAg
IHRpdGxlID0gJGUuYXR0cignZGF0YS1vcmlnaW5hbC10aXRsZScpCisgICAgICAgIHx8ICh0eXBl
b2Ygby50aXRsZSA9PSAnZnVuY3Rpb24nID8gby50aXRsZS5jYWxsKCRlWzBdKSA6ICBvLnRpdGxl
KQorCisgICAgICByZXR1cm4gdGl0bGUKKyAgICB9CisKKyAgLCB0aXA6IGZ1bmN0aW9uICgpIHsK
KyAgICAgIHJldHVybiB0aGlzLiR0aXAgPSB0aGlzLiR0aXAgfHwgJCh0aGlzLm9wdGlvbnMudGVt
cGxhdGUpCisgICAgfQorCisgICwgdmFsaWRhdGU6IGZ1bmN0aW9uICgpIHsKKyAgICAgIGlmICgh
dGhpcy4kZWxlbWVudFswXS5wYXJlbnROb2RlKSB7CisgICAgICAgIHRoaXMuaGlkZSgpCisgICAg
ICAgIHRoaXMuJGVsZW1lbnQgPSBudWxsCisgICAgICAgIHRoaXMub3B0aW9ucyA9IG51bGwKKyAg
ICAgIH0KKyAgICB9CisKKyAgLCBlbmFibGU6IGZ1bmN0aW9uICgpIHsKKyAgICAgIHRoaXMuZW5h
YmxlZCA9IHRydWUKKyAgICB9CisKKyAgLCBkaXNhYmxlOiBmdW5jdGlvbiAoKSB7CisgICAgICB0
aGlzLmVuYWJsZWQgPSBmYWxzZQorICAgIH0KKworICAsIHRvZ2dsZUVuYWJsZWQ6IGZ1bmN0aW9u
ICgpIHsKKyAgICAgIHRoaXMuZW5hYmxlZCA9ICF0aGlzLmVuYWJsZWQKKyAgICB9CisKKyAgLCB0
b2dnbGU6IGZ1bmN0aW9uIChlKSB7CisgICAgICB2YXIgc2VsZiA9ICQoZS5jdXJyZW50VGFyZ2V0
KVt0aGlzLnR5cGVdKHRoaXMuX29wdGlvbnMpLmRhdGEodGhpcy50eXBlKQorICAgICAgc2VsZltz
ZWxmLnRpcCgpLmhhc0NsYXNzKCdpbicpID8gJ2hpZGUnIDogJ3Nob3cnXSgpCisgICAgfQorCisg
ICwgZGVzdHJveTogZnVuY3Rpb24gKCkgeworICAgICAgdGhpcy5oaWRlKCkuJGVsZW1lbnQub2Zm
KCcuJyArIHRoaXMudHlwZSkucmVtb3ZlRGF0YSh0aGlzLnR5cGUpCisgICAgfQorCisgIH0KKwor
CisgLyogVE9PTFRJUCBQTFVHSU4gREVGSU5JVElPTgorICAqID09PT09PT09PT09PT09PT09PT09
PT09PT0gKi8KKworICB2YXIgb2xkID0gJC5mbi50b29sdGlwCisKKyAgJC5mbi50b29sdGlwID0g
ZnVuY3Rpb24gKCBvcHRpb24gKSB7CisgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7
CisgICAgICB2YXIgJHRoaXMgPSAkKHRoaXMpCisgICAgICAgICwgZGF0YSA9ICR0aGlzLmRhdGEo
J3Rvb2x0aXAnKQorICAgICAgICAsIG9wdGlvbnMgPSB0eXBlb2Ygb3B0aW9uID09ICdvYmplY3Qn
ICYmIG9wdGlvbgorICAgICAgaWYgKCFkYXRhKSAkdGhpcy5kYXRhKCd0b29sdGlwJywgKGRhdGEg
PSBuZXcgVG9vbHRpcCh0aGlzLCBvcHRpb25zKSkpCisgICAgICBpZiAodHlwZW9mIG9wdGlvbiA9
PSAnc3RyaW5nJykgZGF0YVtvcHRpb25dKCkKKyAgICB9KQorICB9CisKKyAgJC5mbi50b29sdGlw
LkNvbnN0cnVjdG9yID0gVG9vbHRpcAorCisgICQuZm4udG9vbHRpcC5kZWZhdWx0cyA9IHsKKyAg
ICBhbmltYXRpb246IHRydWUKKyAgLCBwbGFjZW1lbnQ6ICd0b3AnCisgICwgc2VsZWN0b3I6IGZh
bHNlCisgICwgdGVtcGxhdGU6ICc8ZGl2IGNsYXNzPSJ0b29sdGlwIj48ZGl2IGNsYXNzPSJ0b29s
dGlwLWFycm93Ij48L2Rpdj48ZGl2IGNsYXNzPSJ0b29sdGlwLWlubmVyIj48L2Rpdj48L2Rpdj4n
CisgICwgdHJpZ2dlcjogJ2hvdmVyJworICAsIHRpdGxlOiAnJworICAsIGRlbGF5OiAwCisgICwg
aHRtbDogZmFsc2UKKyAgfQorCisKKyAvKiBUT09MVElQIE5PIENPTkZMSUNUCisgICogPT09PT09
PT09PT09PT09PT09PSAqLworCisgICQuZm4udG9vbHRpcC5ub0NvbmZsaWN0ID0gZnVuY3Rpb24g
KCkgeworICAgICQuZm4udG9vbHRpcCA9IG9sZAorICAgIHJldHVybiB0aGlzCisgIH0KKworfSh3
aW5kb3cualF1ZXJ5KTsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQorICogYm9vdHN0cmFwLXBvcG92ZXIuanMgdjIuMi4yCisgKiBo
dHRwOi8vdHdpdHRlci5naXRodWIuY29tL2Jvb3RzdHJhcC9qYXZhc2NyaXB0Lmh0bWwjcG9wb3Zl
cnMKKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09CisgKiBDb3B5cmlnaHQgMjAxMiBUd2l0dGVyLCBJbmMuCisgKgorICogTGljZW5z
ZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7
CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgg
dGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQK
KyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisg
KiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRp
bmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmli
dXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJ
VElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhl
IExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMg
YW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqID09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKworIWZ1
bmN0aW9uICgkKSB7CisKKyAgInVzZSBzdHJpY3QiOyAvLyBqc2hpbnQgO187CisKKworIC8qIFBP
UE9WRVIgUFVCTElDIENMQVNTIERFRklOSVRJT04KKyAgKiA9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ICovCisKKyAgdmFyIFBvcG92ZXIgPSBmdW5jdGlvbiAoZWxlbWVudCwgb3B0aW9u
cykgeworICAgIHRoaXMuaW5pdCgncG9wb3ZlcicsIGVsZW1lbnQsIG9wdGlvbnMpCisgIH0KKwor
CisgIC8qIE5PVEU6IFBPUE9WRVIgRVhURU5EUyBCT09UU1RSQVAtVE9PTFRJUC5qcworICAgICA9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworICBQb3BvdmVy
LnByb3RvdHlwZSA9ICQuZXh0ZW5kKHt9LCAkLmZuLnRvb2x0aXAuQ29uc3RydWN0b3IucHJvdG90
eXBlLCB7CisKKyAgICBjb25zdHJ1Y3RvcjogUG9wb3ZlcgorCisgICwgc2V0Q29udGVudDogZnVu
Y3Rpb24gKCkgeworICAgICAgdmFyICR0aXAgPSB0aGlzLnRpcCgpCisgICAgICAgICwgdGl0bGUg
PSB0aGlzLmdldFRpdGxlKCkKKyAgICAgICAgLCBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50KCkK
KworICAgICAgJHRpcC5maW5kKCcucG9wb3Zlci10aXRsZScpW3RoaXMub3B0aW9ucy5odG1sID8g
J2h0bWwnIDogJ3RleHQnXSh0aXRsZSkKKyAgICAgICR0aXAuZmluZCgnLnBvcG92ZXItY29udGVu
dCcpW3RoaXMub3B0aW9ucy5odG1sID8gJ2h0bWwnIDogJ3RleHQnXShjb250ZW50KQorCisgICAg
ICAkdGlwLnJlbW92ZUNsYXNzKCdmYWRlIHRvcCBib3R0b20gbGVmdCByaWdodCBpbicpCisgICAg
fQorCisgICwgaGFzQ29udGVudDogZnVuY3Rpb24gKCkgeworICAgICAgcmV0dXJuIHRoaXMuZ2V0
VGl0bGUoKSB8fCB0aGlzLmdldENvbnRlbnQoKQorICAgIH0KKworICAsIGdldENvbnRlbnQ6IGZ1
bmN0aW9uICgpIHsKKyAgICAgIHZhciBjb250ZW50CisgICAgICAgICwgJGUgPSB0aGlzLiRlbGVt
ZW50CisgICAgICAgICwgbyA9IHRoaXMub3B0aW9ucworCisgICAgICBjb250ZW50ID0gJGUuYXR0
cignZGF0YS1jb250ZW50JykKKyAgICAgICAgfHwgKHR5cGVvZiBvLmNvbnRlbnQgPT0gJ2Z1bmN0
aW9uJyA/IG8uY29udGVudC5jYWxsKCRlWzBdKSA6ICBvLmNvbnRlbnQpCisKKyAgICAgIHJldHVy
biBjb250ZW50CisgICAgfQorCisgICwgdGlwOiBmdW5jdGlvbiAoKSB7CisgICAgICBpZiAoIXRo
aXMuJHRpcCkgeworICAgICAgICB0aGlzLiR0aXAgPSAkKHRoaXMub3B0aW9ucy50ZW1wbGF0ZSkK
KyAgICAgIH0KKyAgICAgIHJldHVybiB0aGlzLiR0aXAKKyAgICB9CisKKyAgLCBkZXN0cm95OiBm
dW5jdGlvbiAoKSB7CisgICAgICB0aGlzLmhpZGUoKS4kZWxlbWVudC5vZmYoJy4nICsgdGhpcy50
eXBlKS5yZW1vdmVEYXRhKHRoaXMudHlwZSkKKyAgICB9CisKKyAgfSkKKworCisgLyogUE9QT1ZF
UiBQTFVHSU4gREVGSU5JVElPTgorICAqID09PT09PT09PT09PT09PT09PT09PT09ICovCisKKyAg
dmFyIG9sZCA9ICQuZm4ucG9wb3ZlcgorCisgICQuZm4ucG9wb3ZlciA9IGZ1bmN0aW9uIChvcHRp
b24pIHsKKyAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHsKKyAgICAgIHZhciAkdGhp
cyA9ICQodGhpcykKKyAgICAgICAgLCBkYXRhID0gJHRoaXMuZGF0YSgncG9wb3ZlcicpCisgICAg
ICAgICwgb3B0aW9ucyA9IHR5cGVvZiBvcHRpb24gPT0gJ29iamVjdCcgJiYgb3B0aW9uCisgICAg
ICBpZiAoIWRhdGEpICR0aGlzLmRhdGEoJ3BvcG92ZXInLCAoZGF0YSA9IG5ldyBQb3BvdmVyKHRo
aXMsIG9wdGlvbnMpKSkKKyAgICAgIGlmICh0eXBlb2Ygb3B0aW9uID09ICdzdHJpbmcnKSBkYXRh
W29wdGlvbl0oKQorICAgIH0pCisgIH0KKworICAkLmZuLnBvcG92ZXIuQ29uc3RydWN0b3IgPSBQ
b3BvdmVyCisKKyAgJC5mbi5wb3BvdmVyLmRlZmF1bHRzID0gJC5leHRlbmQoe30gLCAkLmZuLnRv
b2x0aXAuZGVmYXVsdHMsIHsKKyAgICBwbGFjZW1lbnQ6ICdyaWdodCcKKyAgLCB0cmlnZ2VyOiAn
Y2xpY2snCisgICwgY29udGVudDogJycKKyAgLCB0ZW1wbGF0ZTogJzxkaXYgY2xhc3M9InBvcG92
ZXIiPjxkaXYgY2xhc3M9ImFycm93Ij48L2Rpdj48ZGl2IGNsYXNzPSJwb3BvdmVyLWlubmVyIj48
aDMgY2xhc3M9InBvcG92ZXItdGl0bGUiPjwvaDM+PGRpdiBjbGFzcz0icG9wb3Zlci1jb250ZW50
Ij48L2Rpdj48L2Rpdj48L2Rpdj4nCisgIH0pCisKKworIC8qIFBPUE9WRVIgTk8gQ09ORkxJQ1QK
KyAgKiA9PT09PT09PT09PT09PT09PT09ICovCisKKyAgJC5mbi5wb3BvdmVyLm5vQ29uZmxpY3Qg
PSBmdW5jdGlvbiAoKSB7CisgICAgJC5mbi5wb3BvdmVyID0gb2xkCisgICAgcmV0dXJuIHRoaXMK
KyAgfQorCit9KHdpbmRvdy5qUXVlcnkpOy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIGJvb3RzdHJhcC1zY3JvbGxzcHku
anMgdjIuMi4yCisgKiBodHRwOi8vdHdpdHRlci5naXRodWIuY29tL2Jvb3RzdHJhcC9qYXZhc2Ny
aXB0Lmh0bWwjc2Nyb2xsc3B5CisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgMjAxMiBUd2l0dGVyLCBJ
bmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIu
MCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBp
biBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkg
b2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMv
TElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3Ig
YWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUg
TGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBX
QVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGlt
cGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zl
cm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4K
KyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ICovCisKKworIWZ1bmN0aW9uICgkKSB7CisKKyAgInVzZSBzdHJpY3QiOyAvLyBq
c2hpbnQgO187CisKKworIC8qIFNDUk9MTFNQWSBDTEFTUyBERUZJTklUSU9OCisgICogPT09PT09
PT09PT09PT09PT09PT09PT09PT0gKi8KKworICBmdW5jdGlvbiBTY3JvbGxTcHkoZWxlbWVudCwg
b3B0aW9ucykgeworICAgIHZhciBwcm9jZXNzID0gJC5wcm94eSh0aGlzLnByb2Nlc3MsIHRoaXMp
CisgICAgICAsICRlbGVtZW50ID0gJChlbGVtZW50KS5pcygnYm9keScpID8gJCh3aW5kb3cpIDog
JChlbGVtZW50KQorICAgICAgLCBocmVmCisgICAgdGhpcy5vcHRpb25zID0gJC5leHRlbmQoe30s
ICQuZm4uc2Nyb2xsc3B5LmRlZmF1bHRzLCBvcHRpb25zKQorICAgIHRoaXMuJHNjcm9sbEVsZW1l
bnQgPSAkZWxlbWVudC5vbignc2Nyb2xsLnNjcm9sbC1zcHkuZGF0YS1hcGknLCBwcm9jZXNzKQor
ICAgIHRoaXMuc2VsZWN0b3IgPSAodGhpcy5vcHRpb25zLnRhcmdldAorICAgICAgfHwgKChocmVm
ID0gJChlbGVtZW50KS5hdHRyKCdocmVmJykpICYmIGhyZWYucmVwbGFjZSgvLiooPz0jW15cc10r
JCkvLCAnJykpIC8vc3RyaXAgZm9yIGllNworICAgICAgfHwgJycpICsgJyAubmF2IGxpID4gYScK
KyAgICB0aGlzLiRib2R5ID0gJCgnYm9keScpCisgICAgdGhpcy5yZWZyZXNoKCkKKyAgICB0aGlz
LnByb2Nlc3MoKQorICB9CisKKyAgU2Nyb2xsU3B5LnByb3RvdHlwZSA9IHsKKworICAgICAgY29u
c3RydWN0b3I6IFNjcm9sbFNweQorCisgICAgLCByZWZyZXNoOiBmdW5jdGlvbiAoKSB7CisgICAg
ICAgIHZhciBzZWxmID0gdGhpcworICAgICAgICAgICwgJHRhcmdldHMKKworICAgICAgICB0aGlz
Lm9mZnNldHMgPSAkKFtdKQorICAgICAgICB0aGlzLnRhcmdldHMgPSAkKFtdKQorCisgICAgICAg
ICR0YXJnZXRzID0gdGhpcy4kYm9keQorICAgICAgICAgIC5maW5kKHRoaXMuc2VsZWN0b3IpCisg
ICAgICAgICAgLm1hcChmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB2YXIgJGVsID0gJCh0aGlz
KQorICAgICAgICAgICAgICAsIGhyZWYgPSAkZWwuZGF0YSgndGFyZ2V0JykgfHwgJGVsLmF0dHIo
J2hyZWYnKQorICAgICAgICAgICAgICAsICRocmVmID0gL14jXHcvLnRlc3QoaHJlZikgJiYgJCho
cmVmKQorICAgICAgICAgICAgcmV0dXJuICggJGhyZWYKKyAgICAgICAgICAgICAgJiYgJGhyZWYu
bGVuZ3RoCisgICAgICAgICAgICAgICYmIFtbICRocmVmLnBvc2l0aW9uKCkudG9wICsgc2VsZi4k
c2Nyb2xsRWxlbWVudC5zY3JvbGxUb3AoKSwgaHJlZiBdXSApIHx8IG51bGwKKyAgICAgICAgICB9
KQorICAgICAgICAgIC5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBhWzBdIC0gYlswXSB9
KQorICAgICAgICAgIC5lYWNoKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHNlbGYub2Zmc2V0
cy5wdXNoKHRoaXNbMF0pCisgICAgICAgICAgICBzZWxmLnRhcmdldHMucHVzaCh0aGlzWzFdKQor
ICAgICAgICAgIH0pCisgICAgICB9CisKKyAgICAsIHByb2Nlc3M6IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgdmFyIHNjcm9sbFRvcCA9IHRoaXMuJHNjcm9sbEVsZW1lbnQuc2Nyb2xsVG9wKCkgKyB0
aGlzLm9wdGlvbnMub2Zmc2V0CisgICAgICAgICAgLCBzY3JvbGxIZWlnaHQgPSB0aGlzLiRzY3Jv
bGxFbGVtZW50WzBdLnNjcm9sbEhlaWdodCB8fCB0aGlzLiRib2R5WzBdLnNjcm9sbEhlaWdodAor
ICAgICAgICAgICwgbWF4U2Nyb2xsID0gc2Nyb2xsSGVpZ2h0IC0gdGhpcy4kc2Nyb2xsRWxlbWVu
dC5oZWlnaHQoKQorICAgICAgICAgICwgb2Zmc2V0cyA9IHRoaXMub2Zmc2V0cworICAgICAgICAg
ICwgdGFyZ2V0cyA9IHRoaXMudGFyZ2V0cworICAgICAgICAgICwgYWN0aXZlVGFyZ2V0ID0gdGhp
cy5hY3RpdmVUYXJnZXQKKyAgICAgICAgICAsIGkKKworICAgICAgICBpZiAoc2Nyb2xsVG9wID49
IG1heFNjcm9sbCkgeworICAgICAgICAgIHJldHVybiBhY3RpdmVUYXJnZXQgIT0gKGkgPSB0YXJn
ZXRzLmxhc3QoKVswXSkKKyAgICAgICAgICAgICYmIHRoaXMuYWN0aXZhdGUgKCBpICkKKyAgICAg
ICAgfQorCisgICAgICAgIGZvciAoaSA9IG9mZnNldHMubGVuZ3RoOyBpLS07KSB7CisgICAgICAg
ICAgYWN0aXZlVGFyZ2V0ICE9IHRhcmdldHNbaV0KKyAgICAgICAgICAgICYmIHNjcm9sbFRvcCA+
PSBvZmZzZXRzW2ldCisgICAgICAgICAgICAmJiAoIW9mZnNldHNbaSArIDFdIHx8IHNjcm9sbFRv
cCA8PSBvZmZzZXRzW2kgKyAxXSkKKyAgICAgICAgICAgICYmIHRoaXMuYWN0aXZhdGUoIHRhcmdl
dHNbaV0gKQorICAgICAgICB9CisgICAgICB9CisKKyAgICAsIGFjdGl2YXRlOiBmdW5jdGlvbiAo
dGFyZ2V0KSB7CisgICAgICAgIHZhciBhY3RpdmUKKyAgICAgICAgICAsIHNlbGVjdG9yCisKKyAg
ICAgICAgdGhpcy5hY3RpdmVUYXJnZXQgPSB0YXJnZXQKKworICAgICAgICAkKHRoaXMuc2VsZWN0
b3IpCisgICAgICAgICAgLnBhcmVudCgnLmFjdGl2ZScpCisgICAgICAgICAgLnJlbW92ZUNsYXNz
KCdhY3RpdmUnKQorCisgICAgICAgIHNlbGVjdG9yID0gdGhpcy5zZWxlY3RvcgorICAgICAgICAg
ICsgJ1tkYXRhLXRhcmdldD0iJyArIHRhcmdldCArICciXSwnCisgICAgICAgICAgKyB0aGlzLnNl
bGVjdG9yICsgJ1tocmVmPSInICsgdGFyZ2V0ICsgJyJdJworCisgICAgICAgIGFjdGl2ZSA9ICQo
c2VsZWN0b3IpCisgICAgICAgICAgLnBhcmVudCgnbGknKQorICAgICAgICAgIC5hZGRDbGFzcygn
YWN0aXZlJykKKworICAgICAgICBpZiAoYWN0aXZlLnBhcmVudCgnLmRyb3Bkb3duLW1lbnUnKS5s
ZW5ndGgpICB7CisgICAgICAgICAgYWN0aXZlID0gYWN0aXZlLmNsb3Nlc3QoJ2xpLmRyb3Bkb3du
JykuYWRkQ2xhc3MoJ2FjdGl2ZScpCisgICAgICAgIH0KKworICAgICAgICBhY3RpdmUudHJpZ2dl
cignYWN0aXZhdGUnKQorICAgICAgfQorCisgIH0KKworCisgLyogU0NST0xMU1BZIFBMVUdJTiBE
RUZJTklUSU9OCisgICogPT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKyAgdmFyIG9s
ZCA9ICQuZm4uc2Nyb2xsc3B5CisKKyAgJC5mbi5zY3JvbGxzcHkgPSBmdW5jdGlvbiAob3B0aW9u
KSB7CisgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7CisgICAgICB2YXIgJHRoaXMg
PSAkKHRoaXMpCisgICAgICAgICwgZGF0YSA9ICR0aGlzLmRhdGEoJ3Njcm9sbHNweScpCisgICAg
ICAgICwgb3B0aW9ucyA9IHR5cGVvZiBvcHRpb24gPT0gJ29iamVjdCcgJiYgb3B0aW9uCisgICAg
ICBpZiAoIWRhdGEpICR0aGlzLmRhdGEoJ3Njcm9sbHNweScsIChkYXRhID0gbmV3IFNjcm9sbFNw
eSh0aGlzLCBvcHRpb25zKSkpCisgICAgICBpZiAodHlwZW9mIG9wdGlvbiA9PSAnc3RyaW5nJykg
ZGF0YVtvcHRpb25dKCkKKyAgICB9KQorICB9CisKKyAgJC5mbi5zY3JvbGxzcHkuQ29uc3RydWN0
b3IgPSBTY3JvbGxTcHkKKworICAkLmZuLnNjcm9sbHNweS5kZWZhdWx0cyA9IHsKKyAgICBvZmZz
ZXQ6IDEwCisgIH0KKworCisgLyogU0NST0xMU1BZIE5PIENPTkZMSUNUCisgICogPT09PT09PT09
PT09PT09PT09PT09ICovCisKKyAgJC5mbi5zY3JvbGxzcHkubm9Db25mbGljdCA9IGZ1bmN0aW9u
ICgpIHsKKyAgICAkLmZuLnNjcm9sbHNweSA9IG9sZAorICAgIHJldHVybiB0aGlzCisgIH0KKwor
CisgLyogU0NST0xMU1BZIERBVEEtQVBJCisgICogPT09PT09PT09PT09PT09PT09ICovCisKKyAg
JCh3aW5kb3cpLm9uKCdsb2FkJywgZnVuY3Rpb24gKCkgeworICAgICQoJ1tkYXRhLXNweT0ic2Ny
b2xsIl0nKS5lYWNoKGZ1bmN0aW9uICgpIHsKKyAgICAgIHZhciAkc3B5ID0gJCh0aGlzKQorICAg
ICAgJHNweS5zY3JvbGxzcHkoJHNweS5kYXRhKCkpCisgICAgfSkKKyAgfSkKKworfSh3aW5kb3cu
alF1ZXJ5KTsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQorICogYm9vdHN0cmFwLXRhYi5qcyB2Mi4yLjIKKyAqIGh0dHA6Ly90d2l0dGVy
LmdpdGh1Yi5jb20vYm9vdHN0cmFwL2phdmFzY3JpcHQuaHRtbCN0YWJzCisgKiA9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJp
Z2h0IDIwMTIgVHdpdHRlciwgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUg
TGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNl
IHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91
IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5h
cGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5
IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlz
dHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBC
QVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBl
aXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3Bl
Y2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMg
dW5kZXIgdGhlIExpY2Vuc2UuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PSAqLworCisKKyFmdW5jdGlvbiAoJCkgeworCisgICJ1c2Ug
c3RyaWN0IjsgLy8ganNoaW50IDtfOworCisKKyAvKiBUQUIgQ0xBU1MgREVGSU5JVElPTgorICAq
ID09PT09PT09PT09PT09PT09PT09ICovCisKKyAgdmFyIFRhYiA9IGZ1bmN0aW9uIChlbGVtZW50
KSB7CisgICAgdGhpcy5lbGVtZW50ID0gJChlbGVtZW50KQorICB9CisKKyAgVGFiLnByb3RvdHlw
ZSA9IHsKKworICAgIGNvbnN0cnVjdG9yOiBUYWIKKworICAsIHNob3c6IGZ1bmN0aW9uICgpIHsK
KyAgICAgIHZhciAkdGhpcyA9IHRoaXMuZWxlbWVudAorICAgICAgICAsICR1bCA9ICR0aGlzLmNs
b3Nlc3QoJ3VsOm5vdCguZHJvcGRvd24tbWVudSknKQorICAgICAgICAsIHNlbGVjdG9yID0gJHRo
aXMuYXR0cignZGF0YS10YXJnZXQnKQorICAgICAgICAsIHByZXZpb3VzCisgICAgICAgICwgJHRh
cmdldAorICAgICAgICAsIGUKKworICAgICAgaWYgKCFzZWxlY3RvcikgeworICAgICAgICBzZWxl
Y3RvciA9ICR0aGlzLmF0dHIoJ2hyZWYnKQorICAgICAgICBzZWxlY3RvciA9IHNlbGVjdG9yICYm
IHNlbGVjdG9yLnJlcGxhY2UoLy4qKD89I1teXHNdKiQpLywgJycpIC8vc3RyaXAgZm9yIGllNwor
ICAgICAgfQorCisgICAgICBpZiAoICR0aGlzLnBhcmVudCgnbGknKS5oYXNDbGFzcygnYWN0aXZl
JykgKSByZXR1cm4KKworICAgICAgcHJldmlvdXMgPSAkdWwuZmluZCgnLmFjdGl2ZTpsYXN0IGEn
KVswXQorCisgICAgICBlID0gJC5FdmVudCgnc2hvdycsIHsKKyAgICAgICAgcmVsYXRlZFRhcmdl
dDogcHJldmlvdXMKKyAgICAgIH0pCisKKyAgICAgICR0aGlzLnRyaWdnZXIoZSkKKworICAgICAg
aWYgKGUuaXNEZWZhdWx0UHJldmVudGVkKCkpIHJldHVybgorCisgICAgICAkdGFyZ2V0ID0gJChz
ZWxlY3RvcikKKworICAgICAgdGhpcy5hY3RpdmF0ZSgkdGhpcy5wYXJlbnQoJ2xpJyksICR1bCkK
KyAgICAgIHRoaXMuYWN0aXZhdGUoJHRhcmdldCwgJHRhcmdldC5wYXJlbnQoKSwgZnVuY3Rpb24g
KCkgeworICAgICAgICAkdGhpcy50cmlnZ2VyKHsKKyAgICAgICAgICB0eXBlOiAnc2hvd24nCisg
ICAgICAgICwgcmVsYXRlZFRhcmdldDogcHJldmlvdXMKKyAgICAgICAgfSkKKyAgICAgIH0pCisg
ICAgfQorCisgICwgYWN0aXZhdGU6IGZ1bmN0aW9uICggZWxlbWVudCwgY29udGFpbmVyLCBjYWxs
YmFjaykgeworICAgICAgdmFyICRhY3RpdmUgPSBjb250YWluZXIuZmluZCgnPiAuYWN0aXZlJykK
KyAgICAgICAgLCB0cmFuc2l0aW9uID0gY2FsbGJhY2sKKyAgICAgICAgICAgICYmICQuc3VwcG9y
dC50cmFuc2l0aW9uCisgICAgICAgICAgICAmJiAkYWN0aXZlLmhhc0NsYXNzKCdmYWRlJykKKwor
ICAgICAgZnVuY3Rpb24gbmV4dCgpIHsKKyAgICAgICAgJGFjdGl2ZQorICAgICAgICAgIC5yZW1v
dmVDbGFzcygnYWN0aXZlJykKKyAgICAgICAgICAuZmluZCgnPiAuZHJvcGRvd24tbWVudSA+IC5h
Y3RpdmUnKQorICAgICAgICAgIC5yZW1vdmVDbGFzcygnYWN0aXZlJykKKworICAgICAgICBlbGVt
ZW50LmFkZENsYXNzKCdhY3RpdmUnKQorCisgICAgICAgIGlmICh0cmFuc2l0aW9uKSB7CisgICAg
ICAgICAgZWxlbWVudFswXS5vZmZzZXRXaWR0aCAvLyByZWZsb3cgZm9yIHRyYW5zaXRpb24KKyAg
ICAgICAgICBlbGVtZW50LmFkZENsYXNzKCdpbicpCisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgZWxlbWVudC5yZW1vdmVDbGFzcygnZmFkZScpCisgICAgICAgIH0KKworICAgICAgICBpZiAo
IGVsZW1lbnQucGFyZW50KCcuZHJvcGRvd24tbWVudScpICkgeworICAgICAgICAgIGVsZW1lbnQu
Y2xvc2VzdCgnbGkuZHJvcGRvd24nKS5hZGRDbGFzcygnYWN0aXZlJykKKyAgICAgICAgfQorCisg
ICAgICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrKCkKKyAgICAgIH0KKworICAgICAgdHJhbnNpdGlv
biA/CisgICAgICAgICRhY3RpdmUub25lKCQuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCwgbmV4dCkg
OgorICAgICAgICBuZXh0KCkKKworICAgICAgJGFjdGl2ZS5yZW1vdmVDbGFzcygnaW4nKQorICAg
IH0KKyAgfQorCisKKyAvKiBUQUIgUExVR0lOIERFRklOSVRJT04KKyAgKiA9PT09PT09PT09PT09
PT09PT09PT0gKi8KKworICB2YXIgb2xkID0gJC5mbi50YWIKKworICAkLmZuLnRhYiA9IGZ1bmN0
aW9uICggb3B0aW9uICkgeworICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkgeworICAg
ICAgdmFyICR0aGlzID0gJCh0aGlzKQorICAgICAgICAsIGRhdGEgPSAkdGhpcy5kYXRhKCd0YWIn
KQorICAgICAgaWYgKCFkYXRhKSAkdGhpcy5kYXRhKCd0YWInLCAoZGF0YSA9IG5ldyBUYWIodGhp
cykpKQorICAgICAgaWYgKHR5cGVvZiBvcHRpb24gPT0gJ3N0cmluZycpIGRhdGFbb3B0aW9uXSgp
CisgICAgfSkKKyAgfQorCisgICQuZm4udGFiLkNvbnN0cnVjdG9yID0gVGFiCisKKworIC8qIFRB
QiBOTyBDT05GTElDVAorICAqID09PT09PT09PT09PT09PSAqLworCisgICQuZm4udGFiLm5vQ29u
ZmxpY3QgPSBmdW5jdGlvbiAoKSB7CisgICAgJC5mbi50YWIgPSBvbGQKKyAgICByZXR1cm4gdGhp
cworICB9CisKKworIC8qIFRBQiBEQVRBLUFQSQorICAqID09PT09PT09PT09PSAqLworCisgICQo
ZG9jdW1lbnQpLm9uKCdjbGljay50YWIuZGF0YS1hcGknLCAnW2RhdGEtdG9nZ2xlPSJ0YWIiXSwg
W2RhdGEtdG9nZ2xlPSJwaWxsIl0nLCBmdW5jdGlvbiAoZSkgeworICAgIGUucHJldmVudERlZmF1
bHQoKQorICAgICQodGhpcykudGFiKCdzaG93JykKKyAgfSkKKworfSh3aW5kb3cualF1ZXJ5KTsv
KiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09CisgKiBib290c3RyYXAtdHlwZWFoZWFkLmpzIHYyLjIuMgorICogaHR0cDovL3R3aXR0
ZXIuZ2l0aHViLmNvbS9ib290c3RyYXAvamF2YXNjcmlwdC5odG1sI3R5cGVhaGVhZAorICogPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQorICogQ29weXJpZ2h0IDIwMTIgVHdpdHRlciwgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVy
IHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91
IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNl
bnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICog
aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNz
IHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0
d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24g
YW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9G
IEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNl
IGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICog
bGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKiA9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworCishZnVuY3Rpb24o
JCl7CisKKyAgInVzZSBzdHJpY3QiOyAvLyBqc2hpbnQgO187CisKKworIC8qIFRZUEVBSEVBRCBQ
VUJMSUMgQ0xBU1MgREVGSU5JVElPTgorICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PSAqLworCisgIHZhciBUeXBlYWhlYWQgPSBmdW5jdGlvbiAoZWxlbWVudCwgb3B0aW9ucykg
eworICAgIHRoaXMuJGVsZW1lbnQgPSAkKGVsZW1lbnQpCisgICAgdGhpcy5vcHRpb25zID0gJC5l
eHRlbmQoe30sICQuZm4udHlwZWFoZWFkLmRlZmF1bHRzLCBvcHRpb25zKQorICAgIHRoaXMubWF0
Y2hlciA9IHRoaXMub3B0aW9ucy5tYXRjaGVyIHx8IHRoaXMubWF0Y2hlcgorICAgIHRoaXMuc29y
dGVyID0gdGhpcy5vcHRpb25zLnNvcnRlciB8fCB0aGlzLnNvcnRlcgorICAgIHRoaXMuaGlnaGxp
Z2h0ZXIgPSB0aGlzLm9wdGlvbnMuaGlnaGxpZ2h0ZXIgfHwgdGhpcy5oaWdobGlnaHRlcgorICAg
IHRoaXMudXBkYXRlciA9IHRoaXMub3B0aW9ucy51cGRhdGVyIHx8IHRoaXMudXBkYXRlcgorICAg
IHRoaXMuc291cmNlID0gdGhpcy5vcHRpb25zLnNvdXJjZQorICAgIHRoaXMuJG1lbnUgPSAkKHRo
aXMub3B0aW9ucy5tZW51KQorICAgIHRoaXMuc2hvd24gPSBmYWxzZQorICAgIHRoaXMubGlzdGVu
KCkKKyAgfQorCisgIFR5cGVhaGVhZC5wcm90b3R5cGUgPSB7CisKKyAgICBjb25zdHJ1Y3Rvcjog
VHlwZWFoZWFkCisKKyAgLCBzZWxlY3Q6IGZ1bmN0aW9uICgpIHsKKyAgICAgIHZhciB2YWwgPSB0
aGlzLiRtZW51LmZpbmQoJy5hY3RpdmUnKS5hdHRyKCdkYXRhLXZhbHVlJykKKyAgICAgIHRoaXMu
JGVsZW1lbnQKKyAgICAgICAgLnZhbCh0aGlzLnVwZGF0ZXIodmFsKSkKKyAgICAgICAgLmNoYW5n
ZSgpCisgICAgICByZXR1cm4gdGhpcy5oaWRlKCkKKyAgICB9CisKKyAgLCB1cGRhdGVyOiBmdW5j
dGlvbiAoaXRlbSkgeworICAgICAgcmV0dXJuIGl0ZW0KKyAgICB9CisKKyAgLCBzaG93OiBmdW5j
dGlvbiAoKSB7CisgICAgICB2YXIgcG9zID0gJC5leHRlbmQoe30sIHRoaXMuJGVsZW1lbnQucG9z
aXRpb24oKSwgeworICAgICAgICBoZWlnaHQ6IHRoaXMuJGVsZW1lbnRbMF0ub2Zmc2V0SGVpZ2h0
CisgICAgICB9KQorCisgICAgICB0aGlzLiRtZW51CisgICAgICAgIC5pbnNlcnRBZnRlcih0aGlz
LiRlbGVtZW50KQorICAgICAgICAuY3NzKHsKKyAgICAgICAgICB0b3A6IHBvcy50b3AgKyBwb3Mu
aGVpZ2h0CisgICAgICAgICwgbGVmdDogcG9zLmxlZnQKKyAgICAgICAgfSkKKyAgICAgICAgLnNo
b3coKQorCisgICAgICB0aGlzLnNob3duID0gdHJ1ZQorICAgICAgcmV0dXJuIHRoaXMKKyAgICB9
CisKKyAgLCBoaWRlOiBmdW5jdGlvbiAoKSB7CisgICAgICB0aGlzLiRtZW51LmhpZGUoKQorICAg
ICAgdGhpcy5zaG93biA9IGZhbHNlCisgICAgICByZXR1cm4gdGhpcworICAgIH0KKworICAsIGxv
b2t1cDogZnVuY3Rpb24gKGV2ZW50KSB7CisgICAgICB2YXIgaXRlbXMKKworICAgICAgdGhpcy5x
dWVyeSA9IHRoaXMuJGVsZW1lbnQudmFsKCkKKworICAgICAgaWYgKCF0aGlzLnF1ZXJ5IHx8IHRo
aXMucXVlcnkubGVuZ3RoIDwgdGhpcy5vcHRpb25zLm1pbkxlbmd0aCkgeworICAgICAgICByZXR1
cm4gdGhpcy5zaG93biA/IHRoaXMuaGlkZSgpIDogdGhpcworICAgICAgfQorCisgICAgICBpdGVt
cyA9ICQuaXNGdW5jdGlvbih0aGlzLnNvdXJjZSkgPyB0aGlzLnNvdXJjZSh0aGlzLnF1ZXJ5LCAk
LnByb3h5KHRoaXMucHJvY2VzcywgdGhpcykpIDogdGhpcy5zb3VyY2UKKworICAgICAgcmV0dXJu
IGl0ZW1zID8gdGhpcy5wcm9jZXNzKGl0ZW1zKSA6IHRoaXMKKyAgICB9CisKKyAgLCBwcm9jZXNz
OiBmdW5jdGlvbiAoaXRlbXMpIHsKKyAgICAgIHZhciB0aGF0ID0gdGhpcworCisgICAgICBpdGVt
cyA9ICQuZ3JlcChpdGVtcywgZnVuY3Rpb24gKGl0ZW0pIHsKKyAgICAgICAgcmV0dXJuIHRoYXQu
bWF0Y2hlcihpdGVtKQorICAgICAgfSkKKworICAgICAgaXRlbXMgPSB0aGlzLnNvcnRlcihpdGVt
cykKKworICAgICAgaWYgKCFpdGVtcy5sZW5ndGgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuc2hv
d24gPyB0aGlzLmhpZGUoKSA6IHRoaXMKKyAgICAgIH0KKworICAgICAgcmV0dXJuIHRoaXMucmVu
ZGVyKGl0ZW1zLnNsaWNlKDAsIHRoaXMub3B0aW9ucy5pdGVtcykpLnNob3coKQorICAgIH0KKwor
ICAsIG1hdGNoZXI6IGZ1bmN0aW9uIChpdGVtKSB7CisgICAgICByZXR1cm4gfml0ZW0udG9Mb3dl
ckNhc2UoKS5pbmRleE9mKHRoaXMucXVlcnkudG9Mb3dlckNhc2UoKSkKKyAgICB9CisKKyAgLCBz
b3J0ZXI6IGZ1bmN0aW9uIChpdGVtcykgeworICAgICAgdmFyIGJlZ2luc3dpdGggPSBbXQorICAg
ICAgICAsIGNhc2VTZW5zaXRpdmUgPSBbXQorICAgICAgICAsIGNhc2VJbnNlbnNpdGl2ZSA9IFtd
CisgICAgICAgICwgaXRlbQorCisgICAgICB3aGlsZSAoaXRlbSA9IGl0ZW1zLnNoaWZ0KCkpIHsK
KyAgICAgICAgaWYgKCFpdGVtLnRvTG93ZXJDYXNlKCkuaW5kZXhPZih0aGlzLnF1ZXJ5LnRvTG93
ZXJDYXNlKCkpKSBiZWdpbnN3aXRoLnB1c2goaXRlbSkKKyAgICAgICAgZWxzZSBpZiAofml0ZW0u
aW5kZXhPZih0aGlzLnF1ZXJ5KSkgY2FzZVNlbnNpdGl2ZS5wdXNoKGl0ZW0pCisgICAgICAgIGVs
c2UgY2FzZUluc2Vuc2l0aXZlLnB1c2goaXRlbSkKKyAgICAgIH0KKworICAgICAgcmV0dXJuIGJl
Z2luc3dpdGguY29uY2F0KGNhc2VTZW5zaXRpdmUsIGNhc2VJbnNlbnNpdGl2ZSkKKyAgICB9CisK
KyAgLCBoaWdobGlnaHRlcjogZnVuY3Rpb24gKGl0ZW0pIHsKKyAgICAgIHZhciBxdWVyeSA9IHRo
aXMucXVlcnkucmVwbGFjZSgvW1wtXFtcXXt9KCkqKz8uLFxcXF4kfCNcc10vZywgJ1xcJCYnKQor
ICAgICAgcmV0dXJuIGl0ZW0ucmVwbGFjZShuZXcgUmVnRXhwKCcoJyArIHF1ZXJ5ICsgJyknLCAn
aWcnKSwgZnVuY3Rpb24gKCQxLCBtYXRjaCkgeworICAgICAgICByZXR1cm4gJzxzdHJvbmc+JyAr
IG1hdGNoICsgJzwvc3Ryb25nPicKKyAgICAgIH0pCisgICAgfQorCisgICwgcmVuZGVyOiBmdW5j
dGlvbiAoaXRlbXMpIHsKKyAgICAgIHZhciB0aGF0ID0gdGhpcworCisgICAgICBpdGVtcyA9ICQo
aXRlbXMpLm1hcChmdW5jdGlvbiAoaSwgaXRlbSkgeworICAgICAgICBpID0gJCh0aGF0Lm9wdGlv
bnMuaXRlbSkuYXR0cignZGF0YS12YWx1ZScsIGl0ZW0pCisgICAgICAgIGkuZmluZCgnYScpLmh0
bWwodGhhdC5oaWdobGlnaHRlcihpdGVtKSkKKyAgICAgICAgcmV0dXJuIGlbMF0KKyAgICAgIH0p
CisKKyAgICAgIGl0ZW1zLmZpcnN0KCkuYWRkQ2xhc3MoJ2FjdGl2ZScpCisgICAgICB0aGlzLiRt
ZW51Lmh0bWwoaXRlbXMpCisgICAgICByZXR1cm4gdGhpcworICAgIH0KKworICAsIG5leHQ6IGZ1
bmN0aW9uIChldmVudCkgeworICAgICAgdmFyIGFjdGl2ZSA9IHRoaXMuJG1lbnUuZmluZCgnLmFj
dGl2ZScpLnJlbW92ZUNsYXNzKCdhY3RpdmUnKQorICAgICAgICAsIG5leHQgPSBhY3RpdmUubmV4
dCgpCisKKyAgICAgIGlmICghbmV4dC5sZW5ndGgpIHsKKyAgICAgICAgbmV4dCA9ICQodGhpcy4k
bWVudS5maW5kKCdsaScpWzBdKQorICAgICAgfQorCisgICAgICBuZXh0LmFkZENsYXNzKCdhY3Rp
dmUnKQorICAgIH0KKworICAsIHByZXY6IGZ1bmN0aW9uIChldmVudCkgeworICAgICAgdmFyIGFj
dGl2ZSA9IHRoaXMuJG1lbnUuZmluZCgnLmFjdGl2ZScpLnJlbW92ZUNsYXNzKCdhY3RpdmUnKQor
ICAgICAgICAsIHByZXYgPSBhY3RpdmUucHJldigpCisKKyAgICAgIGlmICghcHJldi5sZW5ndGgp
IHsKKyAgICAgICAgcHJldiA9IHRoaXMuJG1lbnUuZmluZCgnbGknKS5sYXN0KCkKKyAgICAgIH0K
KworICAgICAgcHJldi5hZGRDbGFzcygnYWN0aXZlJykKKyAgICB9CisKKyAgLCBsaXN0ZW46IGZ1
bmN0aW9uICgpIHsKKyAgICAgIHRoaXMuJGVsZW1lbnQKKyAgICAgICAgLm9uKCdibHVyJywgICAg
ICQucHJveHkodGhpcy5ibHVyLCB0aGlzKSkKKyAgICAgICAgLm9uKCdrZXlwcmVzcycsICQucHJv
eHkodGhpcy5rZXlwcmVzcywgdGhpcykpCisgICAgICAgIC5vbigna2V5dXAnLCAgICAkLnByb3h5
KHRoaXMua2V5dXAsIHRoaXMpKQorCisgICAgICBpZiAodGhpcy5ldmVudFN1cHBvcnRlZCgna2V5
ZG93bicpKSB7CisgICAgICAgIHRoaXMuJGVsZW1lbnQub24oJ2tleWRvd24nLCAkLnByb3h5KHRo
aXMua2V5ZG93biwgdGhpcykpCisgICAgICB9CisKKyAgICAgIHRoaXMuJG1lbnUKKyAgICAgICAg
Lm9uKCdjbGljaycsICQucHJveHkodGhpcy5jbGljaywgdGhpcykpCisgICAgICAgIC5vbignbW91
c2VlbnRlcicsICdsaScsICQucHJveHkodGhpcy5tb3VzZWVudGVyLCB0aGlzKSkKKyAgICB9CisK
KyAgLCBldmVudFN1cHBvcnRlZDogZnVuY3Rpb24oZXZlbnROYW1lKSB7CisgICAgICB2YXIgaXNT
dXBwb3J0ZWQgPSBldmVudE5hbWUgaW4gdGhpcy4kZWxlbWVudAorICAgICAgaWYgKCFpc1N1cHBv
cnRlZCkgeworICAgICAgICB0aGlzLiRlbGVtZW50LnNldEF0dHJpYnV0ZShldmVudE5hbWUsICdy
ZXR1cm47JykKKyAgICAgICAgaXNTdXBwb3J0ZWQgPSB0eXBlb2YgdGhpcy4kZWxlbWVudFtldmVu
dE5hbWVdID09PSAnZnVuY3Rpb24nCisgICAgICB9CisgICAgICByZXR1cm4gaXNTdXBwb3J0ZWQK
KyAgICB9CisKKyAgLCBtb3ZlOiBmdW5jdGlvbiAoZSkgeworICAgICAgaWYgKCF0aGlzLnNob3du
KSByZXR1cm4KKworICAgICAgc3dpdGNoKGUua2V5Q29kZSkgeworICAgICAgICBjYXNlIDk6IC8v
IHRhYgorICAgICAgICBjYXNlIDEzOiAvLyBlbnRlcgorICAgICAgICBjYXNlIDI3OiAvLyBlc2Nh
cGUKKyAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCkKKyAgICAgICAgICBicmVhaworCisgICAg
ICAgIGNhc2UgMzg6IC8vIHVwIGFycm93CisgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpCisg
ICAgICAgICAgdGhpcy5wcmV2KCkKKyAgICAgICAgICBicmVhaworCisgICAgICAgIGNhc2UgNDA6
IC8vIGRvd24gYXJyb3cKKyAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCkKKyAgICAgICAgICB0
aGlzLm5leHQoKQorICAgICAgICAgIGJyZWFrCisgICAgICB9CisKKyAgICAgIGUuc3RvcFByb3Bh
Z2F0aW9uKCkKKyAgICB9CisKKyAgLCBrZXlkb3duOiBmdW5jdGlvbiAoZSkgeworICAgICAgdGhp
cy5zdXBwcmVzc0tleVByZXNzUmVwZWF0ID0gfiQuaW5BcnJheShlLmtleUNvZGUsIFs0MCwzOCw5
LDEzLDI3XSkKKyAgICAgIHRoaXMubW92ZShlKQorICAgIH0KKworICAsIGtleXByZXNzOiBmdW5j
dGlvbiAoZSkgeworICAgICAgaWYgKHRoaXMuc3VwcHJlc3NLZXlQcmVzc1JlcGVhdCkgcmV0dXJu
CisgICAgICB0aGlzLm1vdmUoZSkKKyAgICB9CisKKyAgLCBrZXl1cDogZnVuY3Rpb24gKGUpIHsK
KyAgICAgIHN3aXRjaChlLmtleUNvZGUpIHsKKyAgICAgICAgY2FzZSA0MDogLy8gZG93biBhcnJv
dworICAgICAgICBjYXNlIDM4OiAvLyB1cCBhcnJvdworICAgICAgICBjYXNlIDE2OiAvLyBzaGlm
dAorICAgICAgICBjYXNlIDE3OiAvLyBjdHJsCisgICAgICAgIGNhc2UgMTg6IC8vIGFsdAorICAg
ICAgICAgIGJyZWFrCisKKyAgICAgICAgY2FzZSA5OiAvLyB0YWIKKyAgICAgICAgY2FzZSAxMzog
Ly8gZW50ZXIKKyAgICAgICAgICBpZiAoIXRoaXMuc2hvd24pIHJldHVybgorICAgICAgICAgIHRo
aXMuc2VsZWN0KCkKKyAgICAgICAgICBicmVhaworCisgICAgICAgIGNhc2UgMjc6IC8vIGVzY2Fw
ZQorICAgICAgICAgIGlmICghdGhpcy5zaG93bikgcmV0dXJuCisgICAgICAgICAgdGhpcy5oaWRl
KCkKKyAgICAgICAgICBicmVhaworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgdGhpcy5s
b29rdXAoKQorICAgICAgfQorCisgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpCisgICAgICBlLnBy
ZXZlbnREZWZhdWx0KCkKKyAgfQorCisgICwgYmx1cjogZnVuY3Rpb24gKGUpIHsKKyAgICAgIHZh
ciB0aGF0ID0gdGhpcworICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IHRoYXQuaGlkZSgp
IH0sIDE1MCkKKyAgICB9CisKKyAgLCBjbGljazogZnVuY3Rpb24gKGUpIHsKKyAgICAgIGUuc3Rv
cFByb3BhZ2F0aW9uKCkKKyAgICAgIGUucHJldmVudERlZmF1bHQoKQorICAgICAgdGhpcy5zZWxl
Y3QoKQorICAgIH0KKworICAsIG1vdXNlZW50ZXI6IGZ1bmN0aW9uIChlKSB7CisgICAgICB0aGlz
LiRtZW51LmZpbmQoJy5hY3RpdmUnKS5yZW1vdmVDbGFzcygnYWN0aXZlJykKKyAgICAgICQoZS5j
dXJyZW50VGFyZ2V0KS5hZGRDbGFzcygnYWN0aXZlJykKKyAgICB9CisKKyAgfQorCisKKyAgLyog
VFlQRUFIRUFEIFBMVUdJTiBERUZJTklUSU9OCisgICAqID09PT09PT09PT09PT09PT09PT09PT09
PT09PSAqLworCisgIHZhciBvbGQgPSAkLmZuLnR5cGVhaGVhZAorCisgICQuZm4udHlwZWFoZWFk
ID0gZnVuY3Rpb24gKG9wdGlvbikgeworICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkg
eworICAgICAgdmFyICR0aGlzID0gJCh0aGlzKQorICAgICAgICAsIGRhdGEgPSAkdGhpcy5kYXRh
KCd0eXBlYWhlYWQnKQorICAgICAgICAsIG9wdGlvbnMgPSB0eXBlb2Ygb3B0aW9uID09ICdvYmpl
Y3QnICYmIG9wdGlvbgorICAgICAgaWYgKCFkYXRhKSAkdGhpcy5kYXRhKCd0eXBlYWhlYWQnLCAo
ZGF0YSA9IG5ldyBUeXBlYWhlYWQodGhpcywgb3B0aW9ucykpKQorICAgICAgaWYgKHR5cGVvZiBv
cHRpb24gPT0gJ3N0cmluZycpIGRhdGFbb3B0aW9uXSgpCisgICAgfSkKKyAgfQorCisgICQuZm4u
dHlwZWFoZWFkLmRlZmF1bHRzID0geworICAgIHNvdXJjZTogW10KKyAgLCBpdGVtczogOAorICAs
IG1lbnU6ICc8dWwgY2xhc3M9InR5cGVhaGVhZCBkcm9wZG93bi1tZW51Ij48L3VsPicKKyAgLCBp
dGVtOiAnPGxpPjxhIGhyZWY9IiMiPjwvYT48L2xpPicKKyAgLCBtaW5MZW5ndGg6IDEKKyAgfQor
CisgICQuZm4udHlwZWFoZWFkLkNvbnN0cnVjdG9yID0gVHlwZWFoZWFkCisKKworIC8qIFRZUEVB
SEVBRCBOTyBDT05GTElDVAorICAqID09PT09PT09PT09PT09PT09PT0gKi8KKworICAkLmZuLnR5
cGVhaGVhZC5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKCkgeworICAgICQuZm4udHlwZWFoZWFkID0g
b2xkCisgICAgcmV0dXJuIHRoaXMKKyAgfQorCisKKyAvKiBUWVBFQUhFQUQgREFUQS1BUEkKKyAg
KiA9PT09PT09PT09PT09PT09PT0gKi8KKworICAkKGRvY3VtZW50KS5vbignZm9jdXMudHlwZWFo
ZWFkLmRhdGEtYXBpJywgJ1tkYXRhLXByb3ZpZGU9InR5cGVhaGVhZCJdJywgZnVuY3Rpb24gKGUp
IHsKKyAgICB2YXIgJHRoaXMgPSAkKHRoaXMpCisgICAgaWYgKCR0aGlzLmRhdGEoJ3R5cGVhaGVh
ZCcpKSByZXR1cm4KKyAgICBlLnByZXZlbnREZWZhdWx0KCkKKyAgICAkdGhpcy50eXBlYWhlYWQo
JHRoaXMuZGF0YSgpKQorICB9KQorCit9KHdpbmRvdy5qUXVlcnkpOworLyogPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogYm9vdHN0
cmFwLWFmZml4LmpzIHYyLjIuMgorICogaHR0cDovL3R3aXR0ZXIuZ2l0aHViLmNvbS9ib290c3Ry
YXAvamF2YXNjcmlwdC5odG1sI2FmZml4CisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgMjAxMiBUd2l0dGVy
LCBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9u
IDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2Vw
dCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNv
cHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5z
ZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcg
b3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0
aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9V
VCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9y
IGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBn
b3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5z
ZS4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0gKi8KKworCishZnVuY3Rpb24gKCQpIHsKKworICAidXNlIHN0cmljdCI7IC8vIGpz
aGludCA7XzsKKworCisgLyogQUZGSVggQ0xBU1MgREVGSU5JVElPTgorICAqID09PT09PT09PT09
PT09PT09PT09PT0gKi8KKworICB2YXIgQWZmaXggPSBmdW5jdGlvbiAoZWxlbWVudCwgb3B0aW9u
cykgeworICAgIHRoaXMub3B0aW9ucyA9ICQuZXh0ZW5kKHt9LCAkLmZuLmFmZml4LmRlZmF1bHRz
LCBvcHRpb25zKQorICAgIHRoaXMuJHdpbmRvdyA9ICQod2luZG93KQorICAgICAgLm9uKCdzY3Jv
bGwuYWZmaXguZGF0YS1hcGknLCAkLnByb3h5KHRoaXMuY2hlY2tQb3NpdGlvbiwgdGhpcykpCisg
ICAgICAub24oJ2NsaWNrLmFmZml4LmRhdGEtYXBpJywgICQucHJveHkoZnVuY3Rpb24gKCkgeyBz
ZXRUaW1lb3V0KCQucHJveHkodGhpcy5jaGVja1Bvc2l0aW9uLCB0aGlzKSwgMSkgfSwgdGhpcykp
CisgICAgdGhpcy4kZWxlbWVudCA9ICQoZWxlbWVudCkKKyAgICB0aGlzLmNoZWNrUG9zaXRpb24o
KQorICB9CisKKyAgQWZmaXgucHJvdG90eXBlLmNoZWNrUG9zaXRpb24gPSBmdW5jdGlvbiAoKSB7
CisgICAgaWYgKCF0aGlzLiRlbGVtZW50LmlzKCc6dmlzaWJsZScpKSByZXR1cm4KKworICAgIHZh
ciBzY3JvbGxIZWlnaHQgPSAkKGRvY3VtZW50KS5oZWlnaHQoKQorICAgICAgLCBzY3JvbGxUb3Ag
PSB0aGlzLiR3aW5kb3cuc2Nyb2xsVG9wKCkKKyAgICAgICwgcG9zaXRpb24gPSB0aGlzLiRlbGVt
ZW50Lm9mZnNldCgpCisgICAgICAsIG9mZnNldCA9IHRoaXMub3B0aW9ucy5vZmZzZXQKKyAgICAg
ICwgb2Zmc2V0Qm90dG9tID0gb2Zmc2V0LmJvdHRvbQorICAgICAgLCBvZmZzZXRUb3AgPSBvZmZz
ZXQudG9wCisgICAgICAsIHJlc2V0ID0gJ2FmZml4IGFmZml4LXRvcCBhZmZpeC1ib3R0b20nCisg
ICAgICAsIGFmZml4CisKKyAgICBpZiAodHlwZW9mIG9mZnNldCAhPSAnb2JqZWN0Jykgb2Zmc2V0
Qm90dG9tID0gb2Zmc2V0VG9wID0gb2Zmc2V0CisgICAgaWYgKHR5cGVvZiBvZmZzZXRUb3AgPT0g
J2Z1bmN0aW9uJykgb2Zmc2V0VG9wID0gb2Zmc2V0LnRvcCgpCisgICAgaWYgKHR5cGVvZiBvZmZz
ZXRCb3R0b20gPT0gJ2Z1bmN0aW9uJykgb2Zmc2V0Qm90dG9tID0gb2Zmc2V0LmJvdHRvbSgpCisK
KyAgICBhZmZpeCA9IHRoaXMudW5waW4gIT0gbnVsbCAmJiAoc2Nyb2xsVG9wICsgdGhpcy51bnBp
biA8PSBwb3NpdGlvbi50b3ApID8KKyAgICAgIGZhbHNlICAgIDogb2Zmc2V0Qm90dG9tICE9IG51
bGwgJiYgKHBvc2l0aW9uLnRvcCArIHRoaXMuJGVsZW1lbnQuaGVpZ2h0KCkgPj0gc2Nyb2xsSGVp
Z2h0IC0gb2Zmc2V0Qm90dG9tKSA/CisgICAgICAnYm90dG9tJyA6IG9mZnNldFRvcCAhPSBudWxs
ICYmIHNjcm9sbFRvcCA8PSBvZmZzZXRUb3AgPworICAgICAgJ3RvcCcgICAgOiBmYWxzZQorCisg
ICAgaWYgKHRoaXMuYWZmaXhlZCA9PT0gYWZmaXgpIHJldHVybgorCisgICAgdGhpcy5hZmZpeGVk
ID0gYWZmaXgKKyAgICB0aGlzLnVucGluID0gYWZmaXggPT0gJ2JvdHRvbScgPyBwb3NpdGlvbi50
b3AgLSBzY3JvbGxUb3AgOiBudWxsCisKKyAgICB0aGlzLiRlbGVtZW50LnJlbW92ZUNsYXNzKHJl
c2V0KS5hZGRDbGFzcygnYWZmaXgnICsgKGFmZml4ID8gJy0nICsgYWZmaXggOiAnJykpCisgIH0K
KworCisgLyogQUZGSVggUExVR0lOIERFRklOSVRJT04KKyAgKiA9PT09PT09PT09PT09PT09PT09
PT09PSAqLworCisgIHZhciBvbGQgPSAkLmZuLmFmZml4CisKKyAgJC5mbi5hZmZpeCA9IGZ1bmN0
aW9uIChvcHRpb24pIHsKKyAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHsKKyAgICAg
IHZhciAkdGhpcyA9ICQodGhpcykKKyAgICAgICAgLCBkYXRhID0gJHRoaXMuZGF0YSgnYWZmaXgn
KQorICAgICAgICAsIG9wdGlvbnMgPSB0eXBlb2Ygb3B0aW9uID09ICdvYmplY3QnICYmIG9wdGlv
bgorICAgICAgaWYgKCFkYXRhKSAkdGhpcy5kYXRhKCdhZmZpeCcsIChkYXRhID0gbmV3IEFmZml4
KHRoaXMsIG9wdGlvbnMpKSkKKyAgICAgIGlmICh0eXBlb2Ygb3B0aW9uID09ICdzdHJpbmcnKSBk
YXRhW29wdGlvbl0oKQorICAgIH0pCisgIH0KKworICAkLmZuLmFmZml4LkNvbnN0cnVjdG9yID0g
QWZmaXgKKworICAkLmZuLmFmZml4LmRlZmF1bHRzID0geworICAgIG9mZnNldDogMAorICB9CisK
KworIC8qIEFGRklYIE5PIENPTkZMSUNUCisgICogPT09PT09PT09PT09PT09PT0gKi8KKworICAk
LmZuLmFmZml4Lm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7CisgICAgJC5mbi5hZmZpeCA9IG9s
ZAorICAgIHJldHVybiB0aGlzCisgIH0KKworCisgLyogQUZGSVggREFUQS1BUEkKKyAgKiA9PT09
PT09PT09PT09PSAqLworCisgICQod2luZG93KS5vbignbG9hZCcsIGZ1bmN0aW9uICgpIHsKKyAg
ICAkKCdbZGF0YS1zcHk9ImFmZml4Il0nKS5lYWNoKGZ1bmN0aW9uICgpIHsKKyAgICAgIHZhciAk
c3B5ID0gJCh0aGlzKQorICAgICAgICAsIGRhdGEgPSAkc3B5LmRhdGEoKQorCisgICAgICBkYXRh
Lm9mZnNldCA9IGRhdGEub2Zmc2V0IHx8IHt9CisKKyAgICAgIGRhdGEub2Zmc2V0Qm90dG9tICYm
IChkYXRhLm9mZnNldC5ib3R0b20gPSBkYXRhLm9mZnNldEJvdHRvbSkKKyAgICAgIGRhdGEub2Zm
c2V0VG9wICYmIChkYXRhLm9mZnNldC50b3AgPSBkYXRhLm9mZnNldFRvcCkKKworICAgICAgJHNw
eS5hZmZpeChkYXRhKQorICAgIH0pCisgIH0pCisKKworfSh3aW5kb3cualF1ZXJ5KTsKXCBObyBu
ZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJl
bmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvYm9vdHN0cmFwL2pzL2Jvb3RzdHJh
cC5taW4uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9m
bGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2Jvb3RzdHJhcC9qcy9ib290c3RyYXAubWlu
LmpzCShyZXZpc2lvbiAwKQorKysgUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGln
aHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2Jvb3RzdHJhcC9qcy9ib290c3RyYXAubWluLmpz
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNiBAQAorLyohCisqIEJvb3RzdHJhcC5qcyBieSBA
ZmF0ICYgQG1kbworKiBDb3B5cmlnaHQgMjAxMiBUd2l0dGVyLCBJbmMuCisqIGh0dHA6Ly93d3cu
YXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMC50eHQKKyovCishZnVuY3Rpb24oJCl7InVz
ZSBzdHJpY3QiOyQoZnVuY3Rpb24oKXskLnN1cHBvcnQudHJhbnNpdGlvbj1mdW5jdGlvbigpe3Zh
ciB0cmFuc2l0aW9uRW5kPWZ1bmN0aW9uKCl7dmFyIG5hbWUsZWw9ZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgiYm9vdHN0cmFwIiksdHJhbnNFbmRFdmVudE5hbWVzPXtXZWJraXRUcmFuc2l0aW9uOiJ3
ZWJraXRUcmFuc2l0aW9uRW5kIixNb3pUcmFuc2l0aW9uOiJ0cmFuc2l0aW9uZW5kIixPVHJhbnNp
dGlvbjoib1RyYW5zaXRpb25FbmQgb3RyYW5zaXRpb25lbmQiLHRyYW5zaXRpb246InRyYW5zaXRp
b25lbmQifTtmb3IobmFtZSBpbiB0cmFuc0VuZEV2ZW50TmFtZXMpaWYodm9pZCAwIT09ZWwuc3R5
bGVbbmFtZV0pcmV0dXJuIHRyYW5zRW5kRXZlbnROYW1lc1tuYW1lXX0oKTtyZXR1cm4gdHJhbnNp
dGlvbkVuZCYme2VuZDp0cmFuc2l0aW9uRW5kfX0oKX0pfSh3aW5kb3cualF1ZXJ5KSwhZnVuY3Rp
b24oJCl7InVzZSBzdHJpY3QiO3ZhciBkaXNtaXNzPSdbZGF0YS1kaXNtaXNzPSJhbGVydCJdJyxB
bGVydD1mdW5jdGlvbihlbCl7JChlbCkub24oImNsaWNrIixkaXNtaXNzLHRoaXMuY2xvc2UpfTtB
bGVydC5wcm90b3R5cGUuY2xvc2U9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcmVtb3ZlRWxlbWVudCgp
eyRwYXJlbnQudHJpZ2dlcigiY2xvc2VkIikucmVtb3ZlKCl9dmFyICRwYXJlbnQsJHRoaXM9JCh0
aGlzKSxzZWxlY3Rvcj0kdGhpcy5hdHRyKCJkYXRhLXRhcmdldCIpO3NlbGVjdG9yfHwoc2VsZWN0
b3I9JHRoaXMuYXR0cigiaHJlZiIpLHNlbGVjdG9yPXNlbGVjdG9yJiZzZWxlY3Rvci5yZXBsYWNl
KC8uKig/PSNbXlxzXSokKS8sIiIpKSwkcGFyZW50PSQoc2VsZWN0b3IpLGUmJmUucHJldmVudERl
ZmF1bHQoKSwkcGFyZW50Lmxlbmd0aHx8KCRwYXJlbnQ9JHRoaXMuaGFzQ2xhc3MoImFsZXJ0Iik/
JHRoaXM6JHRoaXMucGFyZW50KCkpLCRwYXJlbnQudHJpZ2dlcihlPSQuRXZlbnQoImNsb3NlIikp
LGUuaXNEZWZhdWx0UHJldmVudGVkKCl8fCgkcGFyZW50LnJlbW92ZUNsYXNzKCJpbiIpLCQuc3Vw
cG9ydC50cmFuc2l0aW9uJiYkcGFyZW50Lmhhc0NsYXNzKCJmYWRlIik/JHBhcmVudC5vbigkLnN1
cHBvcnQudHJhbnNpdGlvbi5lbmQscmVtb3ZlRWxlbWVudCk6cmVtb3ZlRWxlbWVudCgpKX07dmFy
IG9sZD0kLmZuLmFsZXJ0OyQuZm4uYWxlcnQ9ZnVuY3Rpb24ob3B0aW9uKXtyZXR1cm4gdGhpcy5l
YWNoKGZ1bmN0aW9uKCl7dmFyICR0aGlzPSQodGhpcyksZGF0YT0kdGhpcy5kYXRhKCJhbGVydCIp
O2RhdGF8fCR0aGlzLmRhdGEoImFsZXJ0IixkYXRhPW5ldyBBbGVydCh0aGlzKSksInN0cmluZyI9
PXR5cGVvZiBvcHRpb24mJmRhdGFbb3B0aW9uXS5jYWxsKCR0aGlzKX0pfSwkLmZuLmFsZXJ0LkNv
bnN0cnVjdG9yPUFsZXJ0LCQuZm4uYWxlcnQubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiAk
LmZuLmFsZXJ0PW9sZCx0aGlzfSwkKGRvY3VtZW50KS5vbigiY2xpY2suYWxlcnQuZGF0YS1hcGki
LGRpc21pc3MsQWxlcnQucHJvdG90eXBlLmNsb3NlKX0od2luZG93LmpRdWVyeSksIWZ1bmN0aW9u
KCQpeyJ1c2Ugc3RyaWN0Ijt2YXIgQnV0dG9uPWZ1bmN0aW9uKGVsZW1lbnQsb3B0aW9ucyl7dGhp
cy4kZWxlbWVudD0kKGVsZW1lbnQpLHRoaXMub3B0aW9ucz0kLmV4dGVuZCh7fSwkLmZuLmJ1dHRv
bi5kZWZhdWx0cyxvcHRpb25zKX07QnV0dG9uLnByb3RvdHlwZS5zZXRTdGF0ZT1mdW5jdGlvbihz
dGF0ZSl7dmFyIGQ9ImRpc2FibGVkIiwkZWw9dGhpcy4kZWxlbWVudCxkYXRhPSRlbC5kYXRhKCks
dmFsPSRlbC5pcygiaW5wdXQiKT8idmFsIjoiaHRtbCI7c3RhdGUrPSJUZXh0IixkYXRhLnJlc2V0
VGV4dHx8JGVsLmRhdGEoInJlc2V0VGV4dCIsJGVsW3ZhbF0oKSksJGVsW3ZhbF0oZGF0YVtzdGF0
ZV18fHRoaXMub3B0aW9uc1tzdGF0ZV0pLHNldFRpbWVvdXQoZnVuY3Rpb24oKXsibG9hZGluZ1Rl
eHQiPT1zdGF0ZT8kZWwuYWRkQ2xhc3MoZCkuYXR0cihkLGQpOiRlbC5yZW1vdmVDbGFzcyhkKS5y
ZW1vdmVBdHRyKGQpfSwwKX0sQnV0dG9uLnByb3RvdHlwZS50b2dnbGU9ZnVuY3Rpb24oKXt2YXIg
JHBhcmVudD10aGlzLiRlbGVtZW50LmNsb3Nlc3QoJ1tkYXRhLXRvZ2dsZT0iYnV0dG9ucy1yYWRp
byJdJyk7JHBhcmVudCYmJHBhcmVudC5maW5kKCIuYWN0aXZlIikucmVtb3ZlQ2xhc3MoImFjdGl2
ZSIpLHRoaXMuJGVsZW1lbnQudG9nZ2xlQ2xhc3MoImFjdGl2ZSIpfTt2YXIgb2xkPSQuZm4uYnV0
dG9uOyQuZm4uYnV0dG9uPWZ1bmN0aW9uKG9wdGlvbil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlv
bigpe3ZhciAkdGhpcz0kKHRoaXMpLGRhdGE9JHRoaXMuZGF0YSgiYnV0dG9uIiksb3B0aW9ucz0i
b2JqZWN0Ij09dHlwZW9mIG9wdGlvbiYmb3B0aW9uO2RhdGF8fCR0aGlzLmRhdGEoImJ1dHRvbiIs
ZGF0YT1uZXcgQnV0dG9uKHRoaXMsb3B0aW9ucykpLCJ0b2dnbGUiPT1vcHRpb24/ZGF0YS50b2dn
bGUoKTpvcHRpb24mJmRhdGEuc2V0U3RhdGUob3B0aW9uKX0pfSwkLmZuLmJ1dHRvbi5kZWZhdWx0
cz17bG9hZGluZ1RleHQ6ImxvYWRpbmcuLi4ifSwkLmZuLmJ1dHRvbi5Db25zdHJ1Y3Rvcj1CdXR0
b24sJC5mbi5idXR0b24ubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiAkLmZuLmJ1dHRvbj1v
bGQsdGhpc30sJChkb2N1bWVudCkub24oImNsaWNrLmJ1dHRvbi5kYXRhLWFwaSIsIltkYXRhLXRv
Z2dsZV49YnV0dG9uXSIsZnVuY3Rpb24oZSl7dmFyICRidG49JChlLnRhcmdldCk7JGJ0bi5oYXND
bGFzcygiYnRuIil8fCgkYnRuPSRidG4uY2xvc2VzdCgiLmJ0biIpKSwkYnRuLmJ1dHRvbigidG9n
Z2xlIil9KX0od2luZG93LmpRdWVyeSksIWZ1bmN0aW9uKCQpeyJ1c2Ugc3RyaWN0Ijt2YXIgQ2Fy
b3VzZWw9ZnVuY3Rpb24oZWxlbWVudCxvcHRpb25zKXt0aGlzLiRlbGVtZW50PSQoZWxlbWVudCks
dGhpcy5vcHRpb25zPW9wdGlvbnMsImhvdmVyIj09dGhpcy5vcHRpb25zLnBhdXNlJiZ0aGlzLiRl
bGVtZW50Lm9uKCJtb3VzZWVudGVyIiwkLnByb3h5KHRoaXMucGF1c2UsdGhpcykpLm9uKCJtb3Vz
ZWxlYXZlIiwkLnByb3h5KHRoaXMuY3ljbGUsdGhpcykpfTtDYXJvdXNlbC5wcm90b3R5cGU9e2N5
Y2xlOmZ1bmN0aW9uKGUpe3JldHVybiBlfHwodGhpcy5wYXVzZWQ9ITEpLHRoaXMub3B0aW9ucy5p
bnRlcnZhbCYmIXRoaXMucGF1c2VkJiYodGhpcy5pbnRlcnZhbD1zZXRJbnRlcnZhbCgkLnByb3h5
KHRoaXMubmV4dCx0aGlzKSx0aGlzLm9wdGlvbnMuaW50ZXJ2YWwpKSx0aGlzfSx0bzpmdW5jdGlv
bihwb3Mpe3ZhciAkYWN0aXZlPXRoaXMuJGVsZW1lbnQuZmluZCgiLml0ZW0uYWN0aXZlIiksY2hp
bGRyZW49JGFjdGl2ZS5wYXJlbnQoKS5jaGlsZHJlbigpLGFjdGl2ZVBvcz1jaGlsZHJlbi5pbmRl
eCgkYWN0aXZlKSx0aGF0PXRoaXM7aWYoIShwb3M+Y2hpbGRyZW4ubGVuZ3RoLTF8fDA+cG9zKSly
ZXR1cm4gdGhpcy5zbGlkaW5nP3RoaXMuJGVsZW1lbnQub25lKCJzbGlkIixmdW5jdGlvbigpe3Ro
YXQudG8ocG9zKX0pOmFjdGl2ZVBvcz09cG9zP3RoaXMucGF1c2UoKS5jeWNsZSgpOnRoaXMuc2xp
ZGUocG9zPmFjdGl2ZVBvcz8ibmV4dCI6InByZXYiLCQoY2hpbGRyZW5bcG9zXSkpfSxwYXVzZTpm
dW5jdGlvbihlKXtyZXR1cm4gZXx8KHRoaXMucGF1c2VkPSEwKSx0aGlzLiRlbGVtZW50LmZpbmQo
Ii5uZXh0LCAucHJldiIpLmxlbmd0aCYmJC5zdXBwb3J0LnRyYW5zaXRpb24uZW5kJiYodGhpcy4k
ZWxlbWVudC50cmlnZ2VyKCQuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCksdGhpcy5jeWNsZSgpKSxj
bGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWwpLHRoaXMuaW50ZXJ2YWw9bnVsbCx0aGlzfSxuZXh0
OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2xpZGluZz92b2lkIDA6dGhpcy5zbGlkZSgibmV4dCIp
fSxwcmV2OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2xpZGluZz92b2lkIDA6dGhpcy5zbGlkZSgi
cHJldiIpfSxzbGlkZTpmdW5jdGlvbih0eXBlLG5leHQpe3ZhciBlLCRhY3RpdmU9dGhpcy4kZWxl
bWVudC5maW5kKCIuaXRlbS5hY3RpdmUiKSwkbmV4dD1uZXh0fHwkYWN0aXZlW3R5cGVdKCksaXND
eWNsaW5nPXRoaXMuaW50ZXJ2YWwsZGlyZWN0aW9uPSJuZXh0Ij09dHlwZT8ibGVmdCI6InJpZ2h0
IixmYWxsYmFjaz0ibmV4dCI9PXR5cGU/ImZpcnN0IjoibGFzdCIsdGhhdD10aGlzO2lmKHRoaXMu
c2xpZGluZz0hMCxpc0N5Y2xpbmcmJnRoaXMucGF1c2UoKSwkbmV4dD0kbmV4dC5sZW5ndGg/JG5l
eHQ6dGhpcy4kZWxlbWVudC5maW5kKCIuaXRlbSIpW2ZhbGxiYWNrXSgpLGU9JC5FdmVudCgic2xp
ZGUiLHtyZWxhdGVkVGFyZ2V0OiRuZXh0WzBdfSksISRuZXh0Lmhhc0NsYXNzKCJhY3RpdmUiKSl7
aWYoJC5zdXBwb3J0LnRyYW5zaXRpb24mJnRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoInNsaWRlIikp
e2lmKHRoaXMuJGVsZW1lbnQudHJpZ2dlcihlKSxlLmlzRGVmYXVsdFByZXZlbnRlZCgpKXJldHVy
bjskbmV4dC5hZGRDbGFzcyh0eXBlKSwkbmV4dFswXS5vZmZzZXRXaWR0aCwkYWN0aXZlLmFkZENs
YXNzKGRpcmVjdGlvbiksJG5leHQuYWRkQ2xhc3MoZGlyZWN0aW9uKSx0aGlzLiRlbGVtZW50Lm9u
ZSgkLnN1cHBvcnQudHJhbnNpdGlvbi5lbmQsZnVuY3Rpb24oKXskbmV4dC5yZW1vdmVDbGFzcyhb
dHlwZSxkaXJlY3Rpb25dLmpvaW4oIiAiKSkuYWRkQ2xhc3MoImFjdGl2ZSIpLCRhY3RpdmUucmVt
b3ZlQ2xhc3MoWyJhY3RpdmUiLGRpcmVjdGlvbl0uam9pbigiICIpKSx0aGF0LnNsaWRpbmc9ITEs
c2V0VGltZW91dChmdW5jdGlvbigpe3RoYXQuJGVsZW1lbnQudHJpZ2dlcigic2xpZCIpfSwwKX0p
fWVsc2V7aWYodGhpcy4kZWxlbWVudC50cmlnZ2VyKGUpLGUuaXNEZWZhdWx0UHJldmVudGVkKCkp
cmV0dXJuOyRhY3RpdmUucmVtb3ZlQ2xhc3MoImFjdGl2ZSIpLCRuZXh0LmFkZENsYXNzKCJhY3Rp
dmUiKSx0aGlzLnNsaWRpbmc9ITEsdGhpcy4kZWxlbWVudC50cmlnZ2VyKCJzbGlkIil9cmV0dXJu
IGlzQ3ljbGluZyYmdGhpcy5jeWNsZSgpLHRoaXN9fX07dmFyIG9sZD0kLmZuLmNhcm91c2VsOyQu
Zm4uY2Fyb3VzZWw9ZnVuY3Rpb24ob3B0aW9uKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7
dmFyICR0aGlzPSQodGhpcyksZGF0YT0kdGhpcy5kYXRhKCJjYXJvdXNlbCIpLG9wdGlvbnM9JC5l
eHRlbmQoe30sJC5mbi5jYXJvdXNlbC5kZWZhdWx0cywib2JqZWN0Ij09dHlwZW9mIG9wdGlvbiYm
b3B0aW9uKSxhY3Rpb249InN0cmluZyI9PXR5cGVvZiBvcHRpb24/b3B0aW9uOm9wdGlvbnMuc2xp
ZGU7ZGF0YXx8JHRoaXMuZGF0YSgiY2Fyb3VzZWwiLGRhdGE9bmV3IENhcm91c2VsKHRoaXMsb3B0
aW9ucykpLCJudW1iZXIiPT10eXBlb2Ygb3B0aW9uP2RhdGEudG8ob3B0aW9uKTphY3Rpb24/ZGF0
YVthY3Rpb25dKCk6b3B0aW9ucy5pbnRlcnZhbCYmZGF0YS5jeWNsZSgpfSl9LCQuZm4uY2Fyb3Vz
ZWwuZGVmYXVsdHM9e2ludGVydmFsOjVlMyxwYXVzZToiaG92ZXIifSwkLmZuLmNhcm91c2VsLkNv
bnN0cnVjdG9yPUNhcm91c2VsLCQuZm4uY2Fyb3VzZWwubm9Db25mbGljdD1mdW5jdGlvbigpe3Jl
dHVybiAkLmZuLmNhcm91c2VsPW9sZCx0aGlzfSwkKGRvY3VtZW50KS5vbigiY2xpY2suY2Fyb3Vz
ZWwuZGF0YS1hcGkiLCJbZGF0YS1zbGlkZV0iLGZ1bmN0aW9uKGUpe3ZhciBocmVmLCR0aGlzPSQo
dGhpcyksJHRhcmdldD0kKCR0aGlzLmF0dHIoImRhdGEtdGFyZ2V0Iil8fChocmVmPSR0aGlzLmF0
dHIoImhyZWYiKSkmJmhyZWYucmVwbGFjZSgvLiooPz0jW15cc10rJCkvLCIiKSksb3B0aW9ucz0k
LmV4dGVuZCh7fSwkdGFyZ2V0LmRhdGEoKSwkdGhpcy5kYXRhKCkpOyR0YXJnZXQuY2Fyb3VzZWwo
b3B0aW9ucyksZS5wcmV2ZW50RGVmYXVsdCgpfSl9KHdpbmRvdy5qUXVlcnkpLCFmdW5jdGlvbigk
KXsidXNlIHN0cmljdCI7dmFyIENvbGxhcHNlPWZ1bmN0aW9uKGVsZW1lbnQsb3B0aW9ucyl7dGhp
cy4kZWxlbWVudD0kKGVsZW1lbnQpLHRoaXMub3B0aW9ucz0kLmV4dGVuZCh7fSwkLmZuLmNvbGxh
cHNlLmRlZmF1bHRzLG9wdGlvbnMpLHRoaXMub3B0aW9ucy5wYXJlbnQmJih0aGlzLiRwYXJlbnQ9
JCh0aGlzLm9wdGlvbnMucGFyZW50KSksdGhpcy5vcHRpb25zLnRvZ2dsZSYmdGhpcy50b2dnbGUo
KX07Q29sbGFwc2UucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpDb2xsYXBzZSxkaW1lbnNpb246ZnVu
Y3Rpb24oKXt2YXIgaGFzV2lkdGg9dGhpcy4kZWxlbWVudC5oYXNDbGFzcygid2lkdGgiKTtyZXR1
cm4gaGFzV2lkdGg/IndpZHRoIjoiaGVpZ2h0In0sc2hvdzpmdW5jdGlvbigpe3ZhciBkaW1lbnNp
b24sc2Nyb2xsLGFjdGl2ZXMsaGFzRGF0YTtpZighdGhpcy50cmFuc2l0aW9uaW5nKXtpZihkaW1l
bnNpb249dGhpcy5kaW1lbnNpb24oKSxzY3JvbGw9JC5jYW1lbENhc2UoWyJzY3JvbGwiLGRpbWVu
c2lvbl0uam9pbigiLSIpKSxhY3RpdmVzPXRoaXMuJHBhcmVudCYmdGhpcy4kcGFyZW50LmZpbmQo
Ij4gLmFjY29yZGlvbi1ncm91cCA+IC5pbiIpLGFjdGl2ZXMmJmFjdGl2ZXMubGVuZ3RoKXtpZiho
YXNEYXRhPWFjdGl2ZXMuZGF0YSgiY29sbGFwc2UiKSxoYXNEYXRhJiZoYXNEYXRhLnRyYW5zaXRp
b25pbmcpcmV0dXJuO2FjdGl2ZXMuY29sbGFwc2UoImhpZGUiKSxoYXNEYXRhfHxhY3RpdmVzLmRh
dGEoImNvbGxhcHNlIixudWxsKX10aGlzLiRlbGVtZW50W2RpbWVuc2lvbl0oMCksdGhpcy50cmFu
c2l0aW9uKCJhZGRDbGFzcyIsJC5FdmVudCgic2hvdyIpLCJzaG93biIpLCQuc3VwcG9ydC50cmFu
c2l0aW9uJiZ0aGlzLiRlbGVtZW50W2RpbWVuc2lvbl0odGhpcy4kZWxlbWVudFswXVtzY3JvbGxd
KX19LGhpZGU6ZnVuY3Rpb24oKXt2YXIgZGltZW5zaW9uO3RoaXMudHJhbnNpdGlvbmluZ3x8KGRp
bWVuc2lvbj10aGlzLmRpbWVuc2lvbigpLHRoaXMucmVzZXQodGhpcy4kZWxlbWVudFtkaW1lbnNp
b25dKCkpLHRoaXMudHJhbnNpdGlvbigicmVtb3ZlQ2xhc3MiLCQuRXZlbnQoImhpZGUiKSwiaGlk
ZGVuIiksdGhpcy4kZWxlbWVudFtkaW1lbnNpb25dKDApKX0scmVzZXQ6ZnVuY3Rpb24oc2l6ZSl7
dmFyIGRpbWVuc2lvbj10aGlzLmRpbWVuc2lvbigpO3JldHVybiB0aGlzLiRlbGVtZW50LnJlbW92
ZUNsYXNzKCJjb2xsYXBzZSIpW2RpbWVuc2lvbl0oc2l6ZXx8ImF1dG8iKVswXS5vZmZzZXRXaWR0
aCx0aGlzLiRlbGVtZW50W251bGwhPT1zaXplPyJhZGRDbGFzcyI6InJlbW92ZUNsYXNzIl0oImNv
bGxhcHNlIiksdGhpc30sdHJhbnNpdGlvbjpmdW5jdGlvbihtZXRob2Qsc3RhcnRFdmVudCxjb21w
bGV0ZUV2ZW50KXt2YXIgdGhhdD10aGlzLGNvbXBsZXRlPWZ1bmN0aW9uKCl7InNob3ciPT1zdGFy
dEV2ZW50LnR5cGUmJnRoYXQucmVzZXQoKSx0aGF0LnRyYW5zaXRpb25pbmc9MCx0aGF0LiRlbGVt
ZW50LnRyaWdnZXIoY29tcGxldGVFdmVudCl9O3RoaXMuJGVsZW1lbnQudHJpZ2dlcihzdGFydEV2
ZW50KSxzdGFydEV2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpfHwodGhpcy50cmFuc2l0aW9uaW5n
PTEsdGhpcy4kZWxlbWVudFttZXRob2RdKCJpbiIpLCQuc3VwcG9ydC50cmFuc2l0aW9uJiZ0aGlz
LiRlbGVtZW50Lmhhc0NsYXNzKCJjb2xsYXBzZSIpP3RoaXMuJGVsZW1lbnQub25lKCQuc3VwcG9y
dC50cmFuc2l0aW9uLmVuZCxjb21wbGV0ZSk6Y29tcGxldGUoKSl9LHRvZ2dsZTpmdW5jdGlvbigp
e3RoaXNbdGhpcy4kZWxlbWVudC5oYXNDbGFzcygiaW4iKT8iaGlkZSI6InNob3ciXSgpfX07dmFy
IG9sZD0kLmZuLmNvbGxhcHNlOyQuZm4uY29sbGFwc2U9ZnVuY3Rpb24ob3B0aW9uKXtyZXR1cm4g
dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyICR0aGlzPSQodGhpcyksZGF0YT0kdGhpcy5kYXRhKCJj
b2xsYXBzZSIpLG9wdGlvbnM9Im9iamVjdCI9PXR5cGVvZiBvcHRpb24mJm9wdGlvbjtkYXRhfHwk
dGhpcy5kYXRhKCJjb2xsYXBzZSIsZGF0YT1uZXcgQ29sbGFwc2UodGhpcyxvcHRpb25zKSksInN0
cmluZyI9PXR5cGVvZiBvcHRpb24mJmRhdGFbb3B0aW9uXSgpfSl9LCQuZm4uY29sbGFwc2UuZGVm
YXVsdHM9e3RvZ2dsZTohMH0sJC5mbi5jb2xsYXBzZS5Db25zdHJ1Y3Rvcj1Db2xsYXBzZSwkLmZu
LmNvbGxhcHNlLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gJC5mbi5jb2xsYXBzZT1vbGQs
dGhpc30sJChkb2N1bWVudCkub24oImNsaWNrLmNvbGxhcHNlLmRhdGEtYXBpIiwiW2RhdGEtdG9n
Z2xlPWNvbGxhcHNlXSIsZnVuY3Rpb24oZSl7dmFyIGhyZWYsJHRoaXM9JCh0aGlzKSx0YXJnZXQ9
JHRoaXMuYXR0cigiZGF0YS10YXJnZXQiKXx8ZS5wcmV2ZW50RGVmYXVsdCgpfHwoaHJlZj0kdGhp
cy5hdHRyKCJocmVmIikpJiZocmVmLnJlcGxhY2UoLy4qKD89I1teXHNdKyQpLywiIiksb3B0aW9u
PSQodGFyZ2V0KS5kYXRhKCJjb2xsYXBzZSIpPyJ0b2dnbGUiOiR0aGlzLmRhdGEoKTskdGhpc1sk
KHRhcmdldCkuaGFzQ2xhc3MoImluIik/ImFkZENsYXNzIjoicmVtb3ZlQ2xhc3MiXSgiY29sbGFw
c2VkIiksJCh0YXJnZXQpLmNvbGxhcHNlKG9wdGlvbil9KX0od2luZG93LmpRdWVyeSksIWZ1bmN0
aW9uKCQpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBjbGVhck1lbnVzKCl7JCh0b2dnbGUpLmVhY2go
ZnVuY3Rpb24oKXtnZXRQYXJlbnQoJCh0aGlzKSkucmVtb3ZlQ2xhc3MoIm9wZW4iKX0pfWZ1bmN0
aW9uIGdldFBhcmVudCgkdGhpcyl7dmFyICRwYXJlbnQsc2VsZWN0b3I9JHRoaXMuYXR0cigiZGF0
YS10YXJnZXQiKTtyZXR1cm4gc2VsZWN0b3J8fChzZWxlY3Rvcj0kdGhpcy5hdHRyKCJocmVmIiks
c2VsZWN0b3I9c2VsZWN0b3ImJi8jLy50ZXN0KHNlbGVjdG9yKSYmc2VsZWN0b3IucmVwbGFjZSgv
LiooPz0jW15cc10qJCkvLCIiKSksJHBhcmVudD0kKHNlbGVjdG9yKSwkcGFyZW50Lmxlbmd0aHx8
KCRwYXJlbnQ9JHRoaXMucGFyZW50KCkpLCRwYXJlbnR9dmFyIHRvZ2dsZT0iW2RhdGEtdG9nZ2xl
PWRyb3Bkb3duXSIsRHJvcGRvd249ZnVuY3Rpb24oZWxlbWVudCl7dmFyICRlbD0kKGVsZW1lbnQp
Lm9uKCJjbGljay5kcm9wZG93bi5kYXRhLWFwaSIsdGhpcy50b2dnbGUpOyQoImh0bWwiKS5vbigi
Y2xpY2suZHJvcGRvd24uZGF0YS1hcGkiLGZ1bmN0aW9uKCl7JGVsLnBhcmVudCgpLnJlbW92ZUNs
YXNzKCJvcGVuIil9KX07RHJvcGRvd24ucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpEcm9wZG93bix0
b2dnbGU6ZnVuY3Rpb24oKXt2YXIgJHBhcmVudCxpc0FjdGl2ZSwkdGhpcz0kKHRoaXMpO2lmKCEk
dGhpcy5pcygiLmRpc2FibGVkLCA6ZGlzYWJsZWQiKSlyZXR1cm4gJHBhcmVudD1nZXRQYXJlbnQo
JHRoaXMpLGlzQWN0aXZlPSRwYXJlbnQuaGFzQ2xhc3MoIm9wZW4iKSxjbGVhck1lbnVzKCksaXNB
Y3RpdmV8fCRwYXJlbnQudG9nZ2xlQ2xhc3MoIm9wZW4iKSwkdGhpcy5mb2N1cygpLCExfSxrZXlk
b3duOmZ1bmN0aW9uKGUpe3ZhciAkdGhpcywkaXRlbXMsJHBhcmVudCxpc0FjdGl2ZSxpbmRleDtp
ZigvKDM4fDQwfDI3KS8udGVzdChlLmtleUNvZGUpJiYoJHRoaXM9JCh0aGlzKSxlLnByZXZlbnRE
ZWZhdWx0KCksZS5zdG9wUHJvcGFnYXRpb24oKSwhJHRoaXMuaXMoIi5kaXNhYmxlZCwgOmRpc2Fi
bGVkIikpKXtpZigkcGFyZW50PWdldFBhcmVudCgkdGhpcyksaXNBY3RpdmU9JHBhcmVudC5oYXND
bGFzcygib3BlbiIpLCFpc0FjdGl2ZXx8aXNBY3RpdmUmJjI3PT1lLmtleUNvZGUpcmV0dXJuICR0
aGlzLmNsaWNrKCk7JGl0ZW1zPSQoIltyb2xlPW1lbnVdIGxpOm5vdCguZGl2aWRlcik6dmlzaWJs
ZSBhIiwkcGFyZW50KSwkaXRlbXMubGVuZ3RoJiYoaW5kZXg9JGl0ZW1zLmluZGV4KCRpdGVtcy5m
aWx0ZXIoIjpmb2N1cyIpKSwzOD09ZS5rZXlDb2RlJiZpbmRleD4wJiZpbmRleC0tLDQwPT1lLmtl
eUNvZGUmJiRpdGVtcy5sZW5ndGgtMT5pbmRleCYmaW5kZXgrKyx+aW5kZXh8fChpbmRleD0wKSwk
aXRlbXMuZXEoaW5kZXgpLmZvY3VzKCkpfX19O3ZhciBvbGQ9JC5mbi5kcm9wZG93bjskLmZuLmRy
b3Bkb3duPWZ1bmN0aW9uKG9wdGlvbil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciAk
dGhpcz0kKHRoaXMpLGRhdGE9JHRoaXMuZGF0YSgiZHJvcGRvd24iKTtkYXRhfHwkdGhpcy5kYXRh
KCJkcm9wZG93biIsZGF0YT1uZXcgRHJvcGRvd24odGhpcykpLCJzdHJpbmciPT10eXBlb2Ygb3B0
aW9uJiZkYXRhW29wdGlvbl0uY2FsbCgkdGhpcyl9KX0sJC5mbi5kcm9wZG93bi5Db25zdHJ1Y3Rv
cj1Ecm9wZG93biwkLmZuLmRyb3Bkb3duLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gJC5m
bi5kcm9wZG93bj1vbGQsdGhpc30sJChkb2N1bWVudCkub24oImNsaWNrLmRyb3Bkb3duLmRhdGEt
YXBpIHRvdWNoc3RhcnQuZHJvcGRvd24uZGF0YS1hcGkiLGNsZWFyTWVudXMpLm9uKCJjbGljay5k
cm9wZG93biB0b3VjaHN0YXJ0LmRyb3Bkb3duLmRhdGEtYXBpIiwiLmRyb3Bkb3duIGZvcm0iLGZ1
bmN0aW9uKGUpe2Uuc3RvcFByb3BhZ2F0aW9uKCl9KS5vbigidG91Y2hzdGFydC5kcm9wZG93bi5k
YXRhLWFwaSIsIi5kcm9wZG93bi1tZW51IixmdW5jdGlvbihlKXtlLnN0b3BQcm9wYWdhdGlvbigp
fSkub24oImNsaWNrLmRyb3Bkb3duLmRhdGEtYXBpIHRvdWNoc3RhcnQuZHJvcGRvd24uZGF0YS1h
cGkiLHRvZ2dsZSxEcm9wZG93bi5wcm90b3R5cGUudG9nZ2xlKS5vbigia2V5ZG93bi5kcm9wZG93
bi5kYXRhLWFwaSB0b3VjaHN0YXJ0LmRyb3Bkb3duLmRhdGEtYXBpIix0b2dnbGUrIiwgW3JvbGU9
bWVudV0iLERyb3Bkb3duLnByb3RvdHlwZS5rZXlkb3duKX0od2luZG93LmpRdWVyeSksIWZ1bmN0
aW9uKCQpeyJ1c2Ugc3RyaWN0Ijt2YXIgTW9kYWw9ZnVuY3Rpb24oZWxlbWVudCxvcHRpb25zKXt0
aGlzLm9wdGlvbnM9b3B0aW9ucyx0aGlzLiRlbGVtZW50PSQoZWxlbWVudCkuZGVsZWdhdGUoJ1tk
YXRhLWRpc21pc3M9Im1vZGFsIl0nLCJjbGljay5kaXNtaXNzLm1vZGFsIiwkLnByb3h5KHRoaXMu
aGlkZSx0aGlzKSksdGhpcy5vcHRpb25zLnJlbW90ZSYmdGhpcy4kZWxlbWVudC5maW5kKCIubW9k
YWwtYm9keSIpLmxvYWQodGhpcy5vcHRpb25zLnJlbW90ZSl9O01vZGFsLnByb3RvdHlwZT17Y29u
c3RydWN0b3I6TW9kYWwsdG9nZ2xlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbdGhpcy5pc1Nob3du
PyJoaWRlIjoic2hvdyJdKCl9LHNob3c6ZnVuY3Rpb24oKXt2YXIgdGhhdD10aGlzLGU9JC5FdmVu
dCgic2hvdyIpO3RoaXMuJGVsZW1lbnQudHJpZ2dlcihlKSx0aGlzLmlzU2hvd258fGUuaXNEZWZh
dWx0UHJldmVudGVkKCl8fCh0aGlzLmlzU2hvd249ITAsdGhpcy5lc2NhcGUoKSx0aGlzLmJhY2tk
cm9wKGZ1bmN0aW9uKCl7dmFyIHRyYW5zaXRpb249JC5zdXBwb3J0LnRyYW5zaXRpb24mJnRoYXQu
JGVsZW1lbnQuaGFzQ2xhc3MoImZhZGUiKTt0aGF0LiRlbGVtZW50LnBhcmVudCgpLmxlbmd0aHx8
dGhhdC4kZWxlbWVudC5hcHBlbmRUbyhkb2N1bWVudC5ib2R5KSx0aGF0LiRlbGVtZW50LnNob3co
KSx0cmFuc2l0aW9uJiZ0aGF0LiRlbGVtZW50WzBdLm9mZnNldFdpZHRoLHRoYXQuJGVsZW1lbnQu
YWRkQ2xhc3MoImluIikuYXR0cigiYXJpYS1oaWRkZW4iLCExKSx0aGF0LmVuZm9yY2VGb2N1cygp
LHRyYW5zaXRpb24/dGhhdC4kZWxlbWVudC5vbmUoJC5zdXBwb3J0LnRyYW5zaXRpb24uZW5kLGZ1
bmN0aW9uKCl7dGhhdC4kZWxlbWVudC5mb2N1cygpLnRyaWdnZXIoInNob3duIil9KTp0aGF0LiRl
bGVtZW50LmZvY3VzKCkudHJpZ2dlcigic2hvd24iKX0pKX0saGlkZTpmdW5jdGlvbihlKXtlJiZl
LnByZXZlbnREZWZhdWx0KCksZT0kLkV2ZW50KCJoaWRlIiksdGhpcy4kZWxlbWVudC50cmlnZ2Vy
KGUpLHRoaXMuaXNTaG93biYmIWUuaXNEZWZhdWx0UHJldmVudGVkKCkmJih0aGlzLmlzU2hvd249
ITEsdGhpcy5lc2NhcGUoKSwkKGRvY3VtZW50KS5vZmYoImZvY3VzaW4ubW9kYWwiKSx0aGlzLiRl
bGVtZW50LnJlbW92ZUNsYXNzKCJpbiIpLmF0dHIoImFyaWEtaGlkZGVuIiwhMCksJC5zdXBwb3J0
LnRyYW5zaXRpb24mJnRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoImZhZGUiKT90aGlzLmhpZGVXaXRo
VHJhbnNpdGlvbigpOnRoaXMuaGlkZU1vZGFsKCkpfSxlbmZvcmNlRm9jdXM6ZnVuY3Rpb24oKXt2
YXIgdGhhdD10aGlzOyQoZG9jdW1lbnQpLm9uKCJmb2N1c2luLm1vZGFsIixmdW5jdGlvbihlKXt0
aGF0LiRlbGVtZW50WzBdPT09ZS50YXJnZXR8fHRoYXQuJGVsZW1lbnQuaGFzKGUudGFyZ2V0KS5s
ZW5ndGh8fHRoYXQuJGVsZW1lbnQuZm9jdXMoKX0pfSxlc2NhcGU6ZnVuY3Rpb24oKXt2YXIgdGhh
dD10aGlzO3RoaXMuaXNTaG93biYmdGhpcy5vcHRpb25zLmtleWJvYXJkP3RoaXMuJGVsZW1lbnQu
b24oImtleXVwLmRpc21pc3MubW9kYWwiLGZ1bmN0aW9uKGUpezI3PT1lLndoaWNoJiZ0aGF0Lmhp
ZGUoKX0pOnRoaXMuaXNTaG93bnx8dGhpcy4kZWxlbWVudC5vZmYoImtleXVwLmRpc21pc3MubW9k
YWwiKX0saGlkZVdpdGhUcmFuc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIHRoYXQ9dGhpcyx0aW1lb3V0
PXNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGF0LiRlbGVtZW50Lm9mZigkLnN1cHBvcnQudHJhbnNp
dGlvbi5lbmQpLHRoYXQuaGlkZU1vZGFsKCl9LDUwMCk7dGhpcy4kZWxlbWVudC5vbmUoJC5zdXBw
b3J0LnRyYW5zaXRpb24uZW5kLGZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KHRpbWVvdXQpLHRoYXQu
aGlkZU1vZGFsKCl9KX0saGlkZU1vZGFsOmZ1bmN0aW9uKCl7dGhpcy4kZWxlbWVudC5oaWRlKCku
dHJpZ2dlcigiaGlkZGVuIiksdGhpcy5iYWNrZHJvcCgpfSxyZW1vdmVCYWNrZHJvcDpmdW5jdGlv
bigpe3RoaXMuJGJhY2tkcm9wLnJlbW92ZSgpLHRoaXMuJGJhY2tkcm9wPW51bGx9LGJhY2tkcm9w
OmZ1bmN0aW9uKGNhbGxiYWNrKXt2YXIgYW5pbWF0ZT10aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCJm
YWRlIik/ImZhZGUiOiIiO2lmKHRoaXMuaXNTaG93biYmdGhpcy5vcHRpb25zLmJhY2tkcm9wKXt2
YXIgZG9BbmltYXRlPSQuc3VwcG9ydC50cmFuc2l0aW9uJiZhbmltYXRlO3RoaXMuJGJhY2tkcm9w
PSQoJzxkaXYgY2xhc3M9Im1vZGFsLWJhY2tkcm9wICcrYW5pbWF0ZSsnIiAvPicpLmFwcGVuZFRv
KGRvY3VtZW50LmJvZHkpLHRoaXMuJGJhY2tkcm9wLmNsaWNrKCJzdGF0aWMiPT10aGlzLm9wdGlv
bnMuYmFja2Ryb3A/JC5wcm94eSh0aGlzLiRlbGVtZW50WzBdLmZvY3VzLHRoaXMuJGVsZW1lbnRb
MF0pOiQucHJveHkodGhpcy5oaWRlLHRoaXMpKSxkb0FuaW1hdGUmJnRoaXMuJGJhY2tkcm9wWzBd
Lm9mZnNldFdpZHRoLHRoaXMuJGJhY2tkcm9wLmFkZENsYXNzKCJpbiIpLGRvQW5pbWF0ZT90aGlz
LiRiYWNrZHJvcC5vbmUoJC5zdXBwb3J0LnRyYW5zaXRpb24uZW5kLGNhbGxiYWNrKTpjYWxsYmFj
aygpfWVsc2UhdGhpcy5pc1Nob3duJiZ0aGlzLiRiYWNrZHJvcD8odGhpcy4kYmFja2Ryb3AucmVt
b3ZlQ2xhc3MoImluIiksJC5zdXBwb3J0LnRyYW5zaXRpb24mJnRoaXMuJGVsZW1lbnQuaGFzQ2xh
c3MoImZhZGUiKT90aGlzLiRiYWNrZHJvcC5vbmUoJC5zdXBwb3J0LnRyYW5zaXRpb24uZW5kLCQu
cHJveHkodGhpcy5yZW1vdmVCYWNrZHJvcCx0aGlzKSk6dGhpcy5yZW1vdmVCYWNrZHJvcCgpKTpj
YWxsYmFjayYmY2FsbGJhY2soKX19O3ZhciBvbGQ9JC5mbi5tb2RhbDskLmZuLm1vZGFsPWZ1bmN0
aW9uKG9wdGlvbil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciAkdGhpcz0kKHRoaXMp
LGRhdGE9JHRoaXMuZGF0YSgibW9kYWwiKSxvcHRpb25zPSQuZXh0ZW5kKHt9LCQuZm4ubW9kYWwu
ZGVmYXVsdHMsJHRoaXMuZGF0YSgpLCJvYmplY3QiPT10eXBlb2Ygb3B0aW9uJiZvcHRpb24pO2Rh
dGF8fCR0aGlzLmRhdGEoIm1vZGFsIixkYXRhPW5ldyBNb2RhbCh0aGlzLG9wdGlvbnMpKSwic3Ry
aW5nIj09dHlwZW9mIG9wdGlvbj9kYXRhW29wdGlvbl0oKTpvcHRpb25zLnNob3cmJmRhdGEuc2hv
dygpfSl9LCQuZm4ubW9kYWwuZGVmYXVsdHM9e2JhY2tkcm9wOiEwLGtleWJvYXJkOiEwLHNob3c6
ITB9LCQuZm4ubW9kYWwuQ29uc3RydWN0b3I9TW9kYWwsJC5mbi5tb2RhbC5ub0NvbmZsaWN0PWZ1
bmN0aW9uKCl7cmV0dXJuICQuZm4ubW9kYWw9b2xkLHRoaXN9LCQoZG9jdW1lbnQpLm9uKCJjbGlj
ay5tb2RhbC5kYXRhLWFwaSIsJ1tkYXRhLXRvZ2dsZT0ibW9kYWwiXScsZnVuY3Rpb24oZSl7dmFy
ICR0aGlzPSQodGhpcyksaHJlZj0kdGhpcy5hdHRyKCJocmVmIiksJHRhcmdldD0kKCR0aGlzLmF0
dHIoImRhdGEtdGFyZ2V0Iil8fGhyZWYmJmhyZWYucmVwbGFjZSgvLiooPz0jW15cc10rJCkvLCIi
KSksb3B0aW9uPSR0YXJnZXQuZGF0YSgibW9kYWwiKT8idG9nZ2xlIjokLmV4dGVuZCh7cmVtb3Rl
OiEvIy8udGVzdChocmVmKSYmaHJlZn0sJHRhcmdldC5kYXRhKCksJHRoaXMuZGF0YSgpKTtlLnBy
ZXZlbnREZWZhdWx0KCksJHRhcmdldC5tb2RhbChvcHRpb24pLm9uZSgiaGlkZSIsZnVuY3Rpb24o
KXskdGhpcy5mb2N1cygpfSl9KX0od2luZG93LmpRdWVyeSksIWZ1bmN0aW9uKCQpeyJ1c2Ugc3Ry
aWN0Ijt2YXIgVG9vbHRpcD1mdW5jdGlvbihlbGVtZW50LG9wdGlvbnMpe3RoaXMuaW5pdCgidG9v
bHRpcCIsZWxlbWVudCxvcHRpb25zKX07VG9vbHRpcC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlRv
b2x0aXAsaW5pdDpmdW5jdGlvbih0eXBlLGVsZW1lbnQsb3B0aW9ucyl7dmFyIGV2ZW50SW4sZXZl
bnRPdXQ7dGhpcy50eXBlPXR5cGUsdGhpcy4kZWxlbWVudD0kKGVsZW1lbnQpLHRoaXMub3B0aW9u
cz10aGlzLmdldE9wdGlvbnMob3B0aW9ucyksdGhpcy5lbmFibGVkPSEwLCJjbGljayI9PXRoaXMu
b3B0aW9ucy50cmlnZ2VyP3RoaXMuJGVsZW1lbnQub24oImNsaWNrLiIrdGhpcy50eXBlLHRoaXMu
b3B0aW9ucy5zZWxlY3RvciwkLnByb3h5KHRoaXMudG9nZ2xlLHRoaXMpKToibWFudWFsIiE9dGhp
cy5vcHRpb25zLnRyaWdnZXImJihldmVudEluPSJob3ZlciI9PXRoaXMub3B0aW9ucy50cmlnZ2Vy
PyJtb3VzZWVudGVyIjoiZm9jdXMiLGV2ZW50T3V0PSJob3ZlciI9PXRoaXMub3B0aW9ucy50cmln
Z2VyPyJtb3VzZWxlYXZlIjoiYmx1ciIsdGhpcy4kZWxlbWVudC5vbihldmVudEluKyIuIit0aGlz
LnR5cGUsdGhpcy5vcHRpb25zLnNlbGVjdG9yLCQucHJveHkodGhpcy5lbnRlcix0aGlzKSksdGhp
cy4kZWxlbWVudC5vbihldmVudE91dCsiLiIrdGhpcy50eXBlLHRoaXMub3B0aW9ucy5zZWxlY3Rv
ciwkLnByb3h5KHRoaXMubGVhdmUsdGhpcykpKSx0aGlzLm9wdGlvbnMuc2VsZWN0b3I/dGhpcy5f
b3B0aW9ucz0kLmV4dGVuZCh7fSx0aGlzLm9wdGlvbnMse3RyaWdnZXI6Im1hbnVhbCIsc2VsZWN0
b3I6IiJ9KTp0aGlzLmZpeFRpdGxlKCl9LGdldE9wdGlvbnM6ZnVuY3Rpb24ob3B0aW9ucyl7cmV0
dXJuIG9wdGlvbnM9JC5leHRlbmQoe30sJC5mblt0aGlzLnR5cGVdLmRlZmF1bHRzLG9wdGlvbnMs
dGhpcy4kZWxlbWVudC5kYXRhKCkpLG9wdGlvbnMuZGVsYXkmJiJudW1iZXIiPT10eXBlb2Ygb3B0
aW9ucy5kZWxheSYmKG9wdGlvbnMuZGVsYXk9e3Nob3c6b3B0aW9ucy5kZWxheSxoaWRlOm9wdGlv
bnMuZGVsYXl9KSxvcHRpb25zfSxlbnRlcjpmdW5jdGlvbihlKXt2YXIgc2VsZj0kKGUuY3VycmVu
dFRhcmdldClbdGhpcy50eXBlXSh0aGlzLl9vcHRpb25zKS5kYXRhKHRoaXMudHlwZSk7cmV0dXJu
IHNlbGYub3B0aW9ucy5kZWxheSYmc2VsZi5vcHRpb25zLmRlbGF5LnNob3c/KGNsZWFyVGltZW91
dCh0aGlzLnRpbWVvdXQpLHNlbGYuaG92ZXJTdGF0ZT0iaW4iLHRoaXMudGltZW91dD1zZXRUaW1l
b3V0KGZ1bmN0aW9uKCl7ImluIj09c2VsZi5ob3ZlclN0YXRlJiZzZWxmLnNob3coKX0sc2VsZi5v
cHRpb25zLmRlbGF5LnNob3cpLHZvaWQgMCk6c2VsZi5zaG93KCl9LGxlYXZlOmZ1bmN0aW9uKGUp
e3ZhciBzZWxmPSQoZS5jdXJyZW50VGFyZ2V0KVt0aGlzLnR5cGVdKHRoaXMuX29wdGlvbnMpLmRh
dGEodGhpcy50eXBlKTtyZXR1cm4gdGhpcy50aW1lb3V0JiZjbGVhclRpbWVvdXQodGhpcy50aW1l
b3V0KSxzZWxmLm9wdGlvbnMuZGVsYXkmJnNlbGYub3B0aW9ucy5kZWxheS5oaWRlPyhzZWxmLmhv
dmVyU3RhdGU9Im91dCIsdGhpcy50aW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXsib3V0Ij09
c2VsZi5ob3ZlclN0YXRlJiZzZWxmLmhpZGUoKX0sc2VsZi5vcHRpb25zLmRlbGF5LmhpZGUpLHZv
aWQgMCk6c2VsZi5oaWRlKCl9LHNob3c6ZnVuY3Rpb24oKXt2YXIgJHRpcCxpbnNpZGUscG9zLGFj
dHVhbFdpZHRoLGFjdHVhbEhlaWdodCxwbGFjZW1lbnQsdHA7aWYodGhpcy5oYXNDb250ZW50KCkm
JnRoaXMuZW5hYmxlZCl7c3dpdGNoKCR0aXA9dGhpcy50aXAoKSx0aGlzLnNldENvbnRlbnQoKSx0
aGlzLm9wdGlvbnMuYW5pbWF0aW9uJiYkdGlwLmFkZENsYXNzKCJmYWRlIikscGxhY2VtZW50PSJm
dW5jdGlvbiI9PXR5cGVvZiB0aGlzLm9wdGlvbnMucGxhY2VtZW50P3RoaXMub3B0aW9ucy5wbGFj
ZW1lbnQuY2FsbCh0aGlzLCR0aXBbMF0sdGhpcy4kZWxlbWVudFswXSk6dGhpcy5vcHRpb25zLnBs
YWNlbWVudCxpbnNpZGU9L2luLy50ZXN0KHBsYWNlbWVudCksJHRpcC5kZXRhY2goKS5jc3Moe3Rv
cDowLGxlZnQ6MCxkaXNwbGF5OiJibG9jayJ9KS5pbnNlcnRBZnRlcih0aGlzLiRlbGVtZW50KSxw
b3M9dGhpcy5nZXRQb3NpdGlvbihpbnNpZGUpLGFjdHVhbFdpZHRoPSR0aXBbMF0ub2Zmc2V0V2lk
dGgsYWN0dWFsSGVpZ2h0PSR0aXBbMF0ub2Zmc2V0SGVpZ2h0LGluc2lkZT9wbGFjZW1lbnQuc3Bs
aXQoIiAiKVsxXTpwbGFjZW1lbnQpe2Nhc2UiYm90dG9tIjp0cD17dG9wOnBvcy50b3ArcG9zLmhl
aWdodCxsZWZ0OnBvcy5sZWZ0K3Bvcy53aWR0aC8yLWFjdHVhbFdpZHRoLzJ9O2JyZWFrO2Nhc2Ui
dG9wIjp0cD17dG9wOnBvcy50b3AtYWN0dWFsSGVpZ2h0LGxlZnQ6cG9zLmxlZnQrcG9zLndpZHRo
LzItYWN0dWFsV2lkdGgvMn07YnJlYWs7Y2FzZSJsZWZ0Ijp0cD17dG9wOnBvcy50b3ArcG9zLmhl
aWdodC8yLWFjdHVhbEhlaWdodC8yLGxlZnQ6cG9zLmxlZnQtYWN0dWFsV2lkdGh9O2JyZWFrO2Nh
c2UicmlnaHQiOnRwPXt0b3A6cG9zLnRvcCtwb3MuaGVpZ2h0LzItYWN0dWFsSGVpZ2h0LzIsbGVm
dDpwb3MubGVmdCtwb3Mud2lkdGh9fSR0aXAub2Zmc2V0KHRwKS5hZGRDbGFzcyhwbGFjZW1lbnQp
LmFkZENsYXNzKCJpbiIpfX0sc2V0Q29udGVudDpmdW5jdGlvbigpe3ZhciAkdGlwPXRoaXMudGlw
KCksdGl0bGU9dGhpcy5nZXRUaXRsZSgpOyR0aXAuZmluZCgiLnRvb2x0aXAtaW5uZXIiKVt0aGlz
Lm9wdGlvbnMuaHRtbD8iaHRtbCI6InRleHQiXSh0aXRsZSksJHRpcC5yZW1vdmVDbGFzcygiZmFk
ZSBpbiB0b3AgYm90dG9tIGxlZnQgcmlnaHQiKX0saGlkZTpmdW5jdGlvbigpe2Z1bmN0aW9uIHJl
bW92ZVdpdGhBbmltYXRpb24oKXt2YXIgdGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7JHRp
cC5vZmYoJC5zdXBwb3J0LnRyYW5zaXRpb24uZW5kKS5kZXRhY2goKX0sNTAwKTskdGlwLm9uZSgk
LnN1cHBvcnQudHJhbnNpdGlvbi5lbmQsZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQodGltZW91dCks
JHRpcC5kZXRhY2goKX0pfXZhciAkdGlwPXRoaXMudGlwKCk7cmV0dXJuICR0aXAucmVtb3ZlQ2xh
c3MoImluIiksJC5zdXBwb3J0LnRyYW5zaXRpb24mJnRoaXMuJHRpcC5oYXNDbGFzcygiZmFkZSIp
P3JlbW92ZVdpdGhBbmltYXRpb24oKTokdGlwLmRldGFjaCgpLHRoaXN9LGZpeFRpdGxlOmZ1bmN0
aW9uKCl7dmFyICRlPXRoaXMuJGVsZW1lbnQ7KCRlLmF0dHIoInRpdGxlIil8fCJzdHJpbmciIT10
eXBlb2YgJGUuYXR0cigiZGF0YS1vcmlnaW5hbC10aXRsZSIpKSYmJGUuYXR0cigiZGF0YS1vcmln
aW5hbC10aXRsZSIsJGUuYXR0cigidGl0bGUiKXx8IiIpLnJlbW92ZUF0dHIoInRpdGxlIil9LGhh
c0NvbnRlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRUaXRsZSgpfSxnZXRQb3NpdGlvbjpm
dW5jdGlvbihpbnNpZGUpe3JldHVybiAkLmV4dGVuZCh7fSxpbnNpZGU/e3RvcDowLGxlZnQ6MH06
dGhpcy4kZWxlbWVudC5vZmZzZXQoKSx7d2lkdGg6dGhpcy4kZWxlbWVudFswXS5vZmZzZXRXaWR0
aCxoZWlnaHQ6dGhpcy4kZWxlbWVudFswXS5vZmZzZXRIZWlnaHR9KX0sZ2V0VGl0bGU6ZnVuY3Rp
b24oKXt2YXIgdGl0bGUsJGU9dGhpcy4kZWxlbWVudCxvPXRoaXMub3B0aW9ucztyZXR1cm4gdGl0
bGU9JGUuYXR0cigiZGF0YS1vcmlnaW5hbC10aXRsZSIpfHwoImZ1bmN0aW9uIj09dHlwZW9mIG8u
dGl0bGU/by50aXRsZS5jYWxsKCRlWzBdKTpvLnRpdGxlKX0sdGlwOmZ1bmN0aW9uKCl7cmV0dXJu
IHRoaXMuJHRpcD10aGlzLiR0aXB8fCQodGhpcy5vcHRpb25zLnRlbXBsYXRlKX0sdmFsaWRhdGU6
ZnVuY3Rpb24oKXt0aGlzLiRlbGVtZW50WzBdLnBhcmVudE5vZGV8fCh0aGlzLmhpZGUoKSx0aGlz
LiRlbGVtZW50PW51bGwsdGhpcy5vcHRpb25zPW51bGwpfSxlbmFibGU6ZnVuY3Rpb24oKXt0aGlz
LmVuYWJsZWQ9ITB9LGRpc2FibGU6ZnVuY3Rpb24oKXt0aGlzLmVuYWJsZWQ9ITF9LHRvZ2dsZUVu
YWJsZWQ6ZnVuY3Rpb24oKXt0aGlzLmVuYWJsZWQ9IXRoaXMuZW5hYmxlZH0sdG9nZ2xlOmZ1bmN0
aW9uKGUpe3ZhciBzZWxmPSQoZS5jdXJyZW50VGFyZ2V0KVt0aGlzLnR5cGVdKHRoaXMuX29wdGlv
bnMpLmRhdGEodGhpcy50eXBlKTtzZWxmW3NlbGYudGlwKCkuaGFzQ2xhc3MoImluIik/ImhpZGUi
OiJzaG93Il0oKX0sZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuaGlkZSgpLiRlbGVtZW50Lm9mZigi
LiIrdGhpcy50eXBlKS5yZW1vdmVEYXRhKHRoaXMudHlwZSl9fTt2YXIgb2xkPSQuZm4udG9vbHRp
cDskLmZuLnRvb2x0aXA9ZnVuY3Rpb24ob3B0aW9uKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9u
KCl7dmFyICR0aGlzPSQodGhpcyksZGF0YT0kdGhpcy5kYXRhKCJ0b29sdGlwIiksb3B0aW9ucz0i
b2JqZWN0Ij09dHlwZW9mIG9wdGlvbiYmb3B0aW9uO2RhdGF8fCR0aGlzLmRhdGEoInRvb2x0aXAi
LGRhdGE9bmV3IFRvb2x0aXAodGhpcyxvcHRpb25zKSksInN0cmluZyI9PXR5cGVvZiBvcHRpb24m
JmRhdGFbb3B0aW9uXSgpfSl9LCQuZm4udG9vbHRpcC5Db25zdHJ1Y3Rvcj1Ub29sdGlwLCQuZm4u
dG9vbHRpcC5kZWZhdWx0cz17YW5pbWF0aW9uOiEwLHBsYWNlbWVudDoidG9wIixzZWxlY3Rvcjoh
MSx0ZW1wbGF0ZTonPGRpdiBjbGFzcz0idG9vbHRpcCI+PGRpdiBjbGFzcz0idG9vbHRpcC1hcnJv
dyI+PC9kaXY+PGRpdiBjbGFzcz0idG9vbHRpcC1pbm5lciI+PC9kaXY+PC9kaXY+Jyx0cmlnZ2Vy
OiJob3ZlciIsdGl0bGU6IiIsZGVsYXk6MCxodG1sOiExfSwkLmZuLnRvb2x0aXAubm9Db25mbGlj
dD1mdW5jdGlvbigpe3JldHVybiAkLmZuLnRvb2x0aXA9b2xkLHRoaXN9fSh3aW5kb3cualF1ZXJ5
KSwhZnVuY3Rpb24oJCl7InVzZSBzdHJpY3QiO3ZhciBQb3BvdmVyPWZ1bmN0aW9uKGVsZW1lbnQs
b3B0aW9ucyl7dGhpcy5pbml0KCJwb3BvdmVyIixlbGVtZW50LG9wdGlvbnMpfTtQb3BvdmVyLnBy
b3RvdHlwZT0kLmV4dGVuZCh7fSwkLmZuLnRvb2x0aXAuQ29uc3RydWN0b3IucHJvdG90eXBlLHtj
b25zdHJ1Y3RvcjpQb3BvdmVyLHNldENvbnRlbnQ6ZnVuY3Rpb24oKXt2YXIgJHRpcD10aGlzLnRp
cCgpLHRpdGxlPXRoaXMuZ2V0VGl0bGUoKSxjb250ZW50PXRoaXMuZ2V0Q29udGVudCgpOyR0aXAu
ZmluZCgiLnBvcG92ZXItdGl0bGUiKVt0aGlzLm9wdGlvbnMuaHRtbD8iaHRtbCI6InRleHQiXSh0
aXRsZSksJHRpcC5maW5kKCIucG9wb3Zlci1jb250ZW50IilbdGhpcy5vcHRpb25zLmh0bWw/Imh0
bWwiOiJ0ZXh0Il0oY29udGVudCksJHRpcC5yZW1vdmVDbGFzcygiZmFkZSB0b3AgYm90dG9tIGxl
ZnQgcmlnaHQgaW4iKX0saGFzQ29udGVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFRpdGxl
KCl8fHRoaXMuZ2V0Q29udGVudCgpfSxnZXRDb250ZW50OmZ1bmN0aW9uKCl7dmFyIGNvbnRlbnQs
JGU9dGhpcy4kZWxlbWVudCxvPXRoaXMub3B0aW9ucztyZXR1cm4gY29udGVudD0kZS5hdHRyKCJk
YXRhLWNvbnRlbnQiKXx8KCJmdW5jdGlvbiI9PXR5cGVvZiBvLmNvbnRlbnQ/by5jb250ZW50LmNh
bGwoJGVbMF0pOm8uY29udGVudCl9LHRpcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLiR0aXB8fCh0
aGlzLiR0aXA9JCh0aGlzLm9wdGlvbnMudGVtcGxhdGUpKSx0aGlzLiR0aXB9LGRlc3Ryb3k6ZnVu
Y3Rpb24oKXt0aGlzLmhpZGUoKS4kZWxlbWVudC5vZmYoIi4iK3RoaXMudHlwZSkucmVtb3ZlRGF0
YSh0aGlzLnR5cGUpfX0pO3ZhciBvbGQ9JC5mbi5wb3BvdmVyOyQuZm4ucG9wb3Zlcj1mdW5jdGlv
bihvcHRpb24pe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgJHRoaXM9JCh0aGlzKSxk
YXRhPSR0aGlzLmRhdGEoInBvcG92ZXIiKSxvcHRpb25zPSJvYmplY3QiPT10eXBlb2Ygb3B0aW9u
JiZvcHRpb247ZGF0YXx8JHRoaXMuZGF0YSgicG9wb3ZlciIsZGF0YT1uZXcgUG9wb3Zlcih0aGlz
LG9wdGlvbnMpKSwic3RyaW5nIj09dHlwZW9mIG9wdGlvbiYmZGF0YVtvcHRpb25dKCl9KX0sJC5m
bi5wb3BvdmVyLkNvbnN0cnVjdG9yPVBvcG92ZXIsJC5mbi5wb3BvdmVyLmRlZmF1bHRzPSQuZXh0
ZW5kKHt9LCQuZm4udG9vbHRpcC5kZWZhdWx0cyx7cGxhY2VtZW50OiJyaWdodCIsdHJpZ2dlcjoi
Y2xpY2siLGNvbnRlbnQ6IiIsdGVtcGxhdGU6JzxkaXYgY2xhc3M9InBvcG92ZXIiPjxkaXYgY2xh
c3M9ImFycm93Ij48L2Rpdj48ZGl2IGNsYXNzPSJwb3BvdmVyLWlubmVyIj48aDMgY2xhc3M9InBv
cG92ZXItdGl0bGUiPjwvaDM+PGRpdiBjbGFzcz0icG9wb3Zlci1jb250ZW50Ij48L2Rpdj48L2Rp
dj48L2Rpdj4nfSksJC5mbi5wb3BvdmVyLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gJC5m
bi5wb3BvdmVyPW9sZCx0aGlzfX0od2luZG93LmpRdWVyeSksIWZ1bmN0aW9uKCQpeyJ1c2Ugc3Ry
aWN0IjtmdW5jdGlvbiBTY3JvbGxTcHkoZWxlbWVudCxvcHRpb25zKXt2YXIgaHJlZixwcm9jZXNz
PSQucHJveHkodGhpcy5wcm9jZXNzLHRoaXMpLCRlbGVtZW50PSQoZWxlbWVudCkuaXMoImJvZHki
KT8kKHdpbmRvdyk6JChlbGVtZW50KTt0aGlzLm9wdGlvbnM9JC5leHRlbmQoe30sJC5mbi5zY3Jv
bGxzcHkuZGVmYXVsdHMsb3B0aW9ucyksdGhpcy4kc2Nyb2xsRWxlbWVudD0kZWxlbWVudC5vbigi
c2Nyb2xsLnNjcm9sbC1zcHkuZGF0YS1hcGkiLHByb2Nlc3MpLHRoaXMuc2VsZWN0b3I9KHRoaXMu
b3B0aW9ucy50YXJnZXR8fChocmVmPSQoZWxlbWVudCkuYXR0cigiaHJlZiIpKSYmaHJlZi5yZXBs
YWNlKC8uKig/PSNbXlxzXSskKS8sIiIpfHwiIikrIiAubmF2IGxpID4gYSIsdGhpcy4kYm9keT0k
KCJib2R5IiksdGhpcy5yZWZyZXNoKCksdGhpcy5wcm9jZXNzKCl9U2Nyb2xsU3B5LnByb3RvdHlw
ZT17Y29uc3RydWN0b3I6U2Nyb2xsU3B5LHJlZnJlc2g6ZnVuY3Rpb24oKXt2YXIgJHRhcmdldHMs
c2VsZj10aGlzO3RoaXMub2Zmc2V0cz0kKFtdKSx0aGlzLnRhcmdldHM9JChbXSksJHRhcmdldHM9
dGhpcy4kYm9keS5maW5kKHRoaXMuc2VsZWN0b3IpLm1hcChmdW5jdGlvbigpe3ZhciAkZWw9JCh0
aGlzKSxocmVmPSRlbC5kYXRhKCJ0YXJnZXQiKXx8JGVsLmF0dHIoImhyZWYiKSwkaHJlZj0vXiNc
dy8udGVzdChocmVmKSYmJChocmVmKTtyZXR1cm4gJGhyZWYmJiRocmVmLmxlbmd0aCYmW1skaHJl
Zi5wb3NpdGlvbigpLnRvcCtzZWxmLiRzY3JvbGxFbGVtZW50LnNjcm9sbFRvcCgpLGhyZWZdXXx8
bnVsbH0pLnNvcnQoZnVuY3Rpb24oYSxiKXtyZXR1cm4gYVswXS1iWzBdfSkuZWFjaChmdW5jdGlv
bigpe3NlbGYub2Zmc2V0cy5wdXNoKHRoaXNbMF0pLHNlbGYudGFyZ2V0cy5wdXNoKHRoaXNbMV0p
fSl9LHByb2Nlc3M6ZnVuY3Rpb24oKXt2YXIgaSxzY3JvbGxUb3A9dGhpcy4kc2Nyb2xsRWxlbWVu
dC5zY3JvbGxUb3AoKSt0aGlzLm9wdGlvbnMub2Zmc2V0LHNjcm9sbEhlaWdodD10aGlzLiRzY3Jv
bGxFbGVtZW50WzBdLnNjcm9sbEhlaWdodHx8dGhpcy4kYm9keVswXS5zY3JvbGxIZWlnaHQsbWF4
U2Nyb2xsPXNjcm9sbEhlaWdodC10aGlzLiRzY3JvbGxFbGVtZW50LmhlaWdodCgpLG9mZnNldHM9
dGhpcy5vZmZzZXRzLHRhcmdldHM9dGhpcy50YXJnZXRzLGFjdGl2ZVRhcmdldD10aGlzLmFjdGl2
ZVRhcmdldDtpZihzY3JvbGxUb3A+PW1heFNjcm9sbClyZXR1cm4gYWN0aXZlVGFyZ2V0IT0oaT10
YXJnZXRzLmxhc3QoKVswXSkmJnRoaXMuYWN0aXZhdGUoaSk7Zm9yKGk9b2Zmc2V0cy5sZW5ndGg7
aS0tOylhY3RpdmVUYXJnZXQhPXRhcmdldHNbaV0mJnNjcm9sbFRvcD49b2Zmc2V0c1tpXSYmKCFv
ZmZzZXRzW2krMV18fG9mZnNldHNbaSsxXT49c2Nyb2xsVG9wKSYmdGhpcy5hY3RpdmF0ZSh0YXJn
ZXRzW2ldKX0sYWN0aXZhdGU6ZnVuY3Rpb24odGFyZ2V0KXt2YXIgYWN0aXZlLHNlbGVjdG9yO3Ro
aXMuYWN0aXZlVGFyZ2V0PXRhcmdldCwkKHRoaXMuc2VsZWN0b3IpLnBhcmVudCgiLmFjdGl2ZSIp
LnJlbW92ZUNsYXNzKCJhY3RpdmUiKSxzZWxlY3Rvcj10aGlzLnNlbGVjdG9yKydbZGF0YS10YXJn
ZXQ9IicrdGFyZ2V0KyciXSwnK3RoaXMuc2VsZWN0b3IrJ1tocmVmPSInK3RhcmdldCsnIl0nLGFj
dGl2ZT0kKHNlbGVjdG9yKS5wYXJlbnQoImxpIikuYWRkQ2xhc3MoImFjdGl2ZSIpLGFjdGl2ZS5w
YXJlbnQoIi5kcm9wZG93bi1tZW51IikubGVuZ3RoJiYoYWN0aXZlPWFjdGl2ZS5jbG9zZXN0KCJs
aS5kcm9wZG93biIpLmFkZENsYXNzKCJhY3RpdmUiKSksYWN0aXZlLnRyaWdnZXIoImFjdGl2YXRl
Iil9fTt2YXIgb2xkPSQuZm4uc2Nyb2xsc3B5OyQuZm4uc2Nyb2xsc3B5PWZ1bmN0aW9uKG9wdGlv
bil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciAkdGhpcz0kKHRoaXMpLGRhdGE9JHRo
aXMuZGF0YSgic2Nyb2xsc3B5Iiksb3B0aW9ucz0ib2JqZWN0Ij09dHlwZW9mIG9wdGlvbiYmb3B0
aW9uO2RhdGF8fCR0aGlzLmRhdGEoInNjcm9sbHNweSIsZGF0YT1uZXcgU2Nyb2xsU3B5KHRoaXMs
b3B0aW9ucykpLCJzdHJpbmciPT10eXBlb2Ygb3B0aW9uJiZkYXRhW29wdGlvbl0oKX0pfSwkLmZu
LnNjcm9sbHNweS5Db25zdHJ1Y3Rvcj1TY3JvbGxTcHksJC5mbi5zY3JvbGxzcHkuZGVmYXVsdHM9
e29mZnNldDoxMH0sJC5mbi5zY3JvbGxzcHkubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiAk
LmZuLnNjcm9sbHNweT1vbGQsdGhpc30sJCh3aW5kb3cpLm9uKCJsb2FkIixmdW5jdGlvbigpeyQo
J1tkYXRhLXNweT0ic2Nyb2xsIl0nKS5lYWNoKGZ1bmN0aW9uKCl7dmFyICRzcHk9JCh0aGlzKTsk
c3B5LnNjcm9sbHNweSgkc3B5LmRhdGEoKSl9KX0pfSh3aW5kb3cualF1ZXJ5KSwhZnVuY3Rpb24o
JCl7InVzZSBzdHJpY3QiO3ZhciBUYWI9ZnVuY3Rpb24oZWxlbWVudCl7dGhpcy5lbGVtZW50PSQo
ZWxlbWVudCl9O1RhYi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlRhYixzaG93OmZ1bmN0aW9uKCl7
dmFyIHByZXZpb3VzLCR0YXJnZXQsZSwkdGhpcz10aGlzLmVsZW1lbnQsJHVsPSR0aGlzLmNsb3Nl
c3QoInVsOm5vdCguZHJvcGRvd24tbWVudSkiKSxzZWxlY3Rvcj0kdGhpcy5hdHRyKCJkYXRhLXRh
cmdldCIpO3NlbGVjdG9yfHwoc2VsZWN0b3I9JHRoaXMuYXR0cigiaHJlZiIpLHNlbGVjdG9yPXNl
bGVjdG9yJiZzZWxlY3Rvci5yZXBsYWNlKC8uKig/PSNbXlxzXSokKS8sIiIpKSwkdGhpcy5wYXJl
bnQoImxpIikuaGFzQ2xhc3MoImFjdGl2ZSIpfHwocHJldmlvdXM9JHVsLmZpbmQoIi5hY3RpdmU6
bGFzdCBhIilbMF0sZT0kLkV2ZW50KCJzaG93Iix7cmVsYXRlZFRhcmdldDpwcmV2aW91c30pLCR0
aGlzLnRyaWdnZXIoZSksZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKXx8KCR0YXJnZXQ9JChzZWxlY3Rv
ciksdGhpcy5hY3RpdmF0ZSgkdGhpcy5wYXJlbnQoImxpIiksJHVsKSx0aGlzLmFjdGl2YXRlKCR0
YXJnZXQsJHRhcmdldC5wYXJlbnQoKSxmdW5jdGlvbigpeyR0aGlzLnRyaWdnZXIoe3R5cGU6InNo
b3duIixyZWxhdGVkVGFyZ2V0OnByZXZpb3VzfSl9KSkpfSxhY3RpdmF0ZTpmdW5jdGlvbihlbGVt
ZW50LGNvbnRhaW5lcixjYWxsYmFjayl7ZnVuY3Rpb24gbmV4dCgpeyRhY3RpdmUucmVtb3ZlQ2xh
c3MoImFjdGl2ZSIpLmZpbmQoIj4gLmRyb3Bkb3duLW1lbnUgPiAuYWN0aXZlIikucmVtb3ZlQ2xh
c3MoImFjdGl2ZSIpLGVsZW1lbnQuYWRkQ2xhc3MoImFjdGl2ZSIpLHRyYW5zaXRpb24/KGVsZW1l
bnRbMF0ub2Zmc2V0V2lkdGgsZWxlbWVudC5hZGRDbGFzcygiaW4iKSk6ZWxlbWVudC5yZW1vdmVD
bGFzcygiZmFkZSIpLGVsZW1lbnQucGFyZW50KCIuZHJvcGRvd24tbWVudSIpJiZlbGVtZW50LmNs
b3Nlc3QoImxpLmRyb3Bkb3duIikuYWRkQ2xhc3MoImFjdGl2ZSIpLGNhbGxiYWNrJiZjYWxsYmFj
aygpfXZhciAkYWN0aXZlPWNvbnRhaW5lci5maW5kKCI+IC5hY3RpdmUiKSx0cmFuc2l0aW9uPWNh
bGxiYWNrJiYkLnN1cHBvcnQudHJhbnNpdGlvbiYmJGFjdGl2ZS5oYXNDbGFzcygiZmFkZSIpO3Ry
YW5zaXRpb24/JGFjdGl2ZS5vbmUoJC5zdXBwb3J0LnRyYW5zaXRpb24uZW5kLG5leHQpOm5leHQo
KSwkYWN0aXZlLnJlbW92ZUNsYXNzKCJpbiIpfX07dmFyIG9sZD0kLmZuLnRhYjskLmZuLnRhYj1m
dW5jdGlvbihvcHRpb24pe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgJHRoaXM9JCh0
aGlzKSxkYXRhPSR0aGlzLmRhdGEoInRhYiIpO2RhdGF8fCR0aGlzLmRhdGEoInRhYiIsZGF0YT1u
ZXcgVGFiKHRoaXMpKSwic3RyaW5nIj09dHlwZW9mIG9wdGlvbiYmZGF0YVtvcHRpb25dKCl9KX0s
JC5mbi50YWIuQ29uc3RydWN0b3I9VGFiLCQuZm4udGFiLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXty
ZXR1cm4gJC5mbi50YWI9b2xkLHRoaXN9LCQoZG9jdW1lbnQpLm9uKCJjbGljay50YWIuZGF0YS1h
cGkiLCdbZGF0YS10b2dnbGU9InRhYiJdLCBbZGF0YS10b2dnbGU9InBpbGwiXScsZnVuY3Rpb24o
ZSl7ZS5wcmV2ZW50RGVmYXVsdCgpLCQodGhpcykudGFiKCJzaG93Iil9KX0od2luZG93LmpRdWVy
eSksIWZ1bmN0aW9uKCQpeyJ1c2Ugc3RyaWN0Ijt2YXIgVHlwZWFoZWFkPWZ1bmN0aW9uKGVsZW1l
bnQsb3B0aW9ucyl7dGhpcy4kZWxlbWVudD0kKGVsZW1lbnQpLHRoaXMub3B0aW9ucz0kLmV4dGVu
ZCh7fSwkLmZuLnR5cGVhaGVhZC5kZWZhdWx0cyxvcHRpb25zKSx0aGlzLm1hdGNoZXI9dGhpcy5v
cHRpb25zLm1hdGNoZXJ8fHRoaXMubWF0Y2hlcix0aGlzLnNvcnRlcj10aGlzLm9wdGlvbnMuc29y
dGVyfHx0aGlzLnNvcnRlcix0aGlzLmhpZ2hsaWdodGVyPXRoaXMub3B0aW9ucy5oaWdobGlnaHRl
cnx8dGhpcy5oaWdobGlnaHRlcix0aGlzLnVwZGF0ZXI9dGhpcy5vcHRpb25zLnVwZGF0ZXJ8fHRo
aXMudXBkYXRlcix0aGlzLnNvdXJjZT10aGlzLm9wdGlvbnMuc291cmNlLHRoaXMuJG1lbnU9JCh0
aGlzLm9wdGlvbnMubWVudSksdGhpcy5zaG93bj0hMSx0aGlzLmxpc3RlbigpfTtUeXBlYWhlYWQu
cHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpUeXBlYWhlYWQsc2VsZWN0OmZ1bmN0aW9uKCl7dmFyIHZh
bD10aGlzLiRtZW51LmZpbmQoIi5hY3RpdmUiKS5hdHRyKCJkYXRhLXZhbHVlIik7cmV0dXJuIHRo
aXMuJGVsZW1lbnQudmFsKHRoaXMudXBkYXRlcih2YWwpKS5jaGFuZ2UoKSx0aGlzLmhpZGUoKX0s
dXBkYXRlcjpmdW5jdGlvbihpdGVtKXtyZXR1cm4gaXRlbX0sc2hvdzpmdW5jdGlvbigpe3ZhciBw
b3M9JC5leHRlbmQoe30sdGhpcy4kZWxlbWVudC5wb3NpdGlvbigpLHtoZWlnaHQ6dGhpcy4kZWxl
bWVudFswXS5vZmZzZXRIZWlnaHR9KTtyZXR1cm4gdGhpcy4kbWVudS5pbnNlcnRBZnRlcih0aGlz
LiRlbGVtZW50KS5jc3Moe3RvcDpwb3MudG9wK3Bvcy5oZWlnaHQsbGVmdDpwb3MubGVmdH0pLnNo
b3coKSx0aGlzLnNob3duPSEwLHRoaXN9LGhpZGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kbWVu
dS5oaWRlKCksdGhpcy5zaG93bj0hMSx0aGlzfSxsb29rdXA6ZnVuY3Rpb24oKXt2YXIgaXRlbXM7
cmV0dXJuIHRoaXMucXVlcnk9dGhpcy4kZWxlbWVudC52YWwoKSwhdGhpcy5xdWVyeXx8dGhpcy5x
dWVyeS5sZW5ndGg8dGhpcy5vcHRpb25zLm1pbkxlbmd0aD90aGlzLnNob3duP3RoaXMuaGlkZSgp
OnRoaXM6KGl0ZW1zPSQuaXNGdW5jdGlvbih0aGlzLnNvdXJjZSk/dGhpcy5zb3VyY2UodGhpcy5x
dWVyeSwkLnByb3h5KHRoaXMucHJvY2Vzcyx0aGlzKSk6dGhpcy5zb3VyY2UsaXRlbXM/dGhpcy5w
cm9jZXNzKGl0ZW1zKTp0aGlzKX0scHJvY2VzczpmdW5jdGlvbihpdGVtcyl7dmFyIHRoYXQ9dGhp
cztyZXR1cm4gaXRlbXM9JC5ncmVwKGl0ZW1zLGZ1bmN0aW9uKGl0ZW0pe3JldHVybiB0aGF0Lm1h
dGNoZXIoaXRlbSl9KSxpdGVtcz10aGlzLnNvcnRlcihpdGVtcyksaXRlbXMubGVuZ3RoP3RoaXMu
cmVuZGVyKGl0ZW1zLnNsaWNlKDAsdGhpcy5vcHRpb25zLml0ZW1zKSkuc2hvdygpOnRoaXMuc2hv
d24/dGhpcy5oaWRlKCk6dGhpc30sbWF0Y2hlcjpmdW5jdGlvbihpdGVtKXtyZXR1cm5+aXRlbS50
b0xvd2VyQ2FzZSgpLmluZGV4T2YodGhpcy5xdWVyeS50b0xvd2VyQ2FzZSgpKX0sc29ydGVyOmZ1
bmN0aW9uKGl0ZW1zKXtmb3IodmFyIGl0ZW0sYmVnaW5zd2l0aD1bXSxjYXNlU2Vuc2l0aXZlPVtd
LGNhc2VJbnNlbnNpdGl2ZT1bXTtpdGVtPWl0ZW1zLnNoaWZ0KCk7KWl0ZW0udG9Mb3dlckNhc2Uo
KS5pbmRleE9mKHRoaXMucXVlcnkudG9Mb3dlckNhc2UoKSk/fml0ZW0uaW5kZXhPZih0aGlzLnF1
ZXJ5KT9jYXNlU2Vuc2l0aXZlLnB1c2goaXRlbSk6Y2FzZUluc2Vuc2l0aXZlLnB1c2goaXRlbSk6
YmVnaW5zd2l0aC5wdXNoKGl0ZW0pO3JldHVybiBiZWdpbnN3aXRoLmNvbmNhdChjYXNlU2Vuc2l0
aXZlLGNhc2VJbnNlbnNpdGl2ZSl9LGhpZ2hsaWdodGVyOmZ1bmN0aW9uKGl0ZW0pe3ZhciBxdWVy
eT10aGlzLnF1ZXJ5LnJlcGxhY2UoL1tcLVxbXF17fSgpKis/LixcXFxeJHwjXHNdL2csIlxcJCYi
KTtyZXR1cm4gaXRlbS5yZXBsYWNlKFJlZ0V4cCgiKCIrcXVlcnkrIikiLCJpZyIpLGZ1bmN0aW9u
KCQxLG1hdGNoKXtyZXR1cm4iPHN0cm9uZz4iK21hdGNoKyI8L3N0cm9uZz4ifSl9LHJlbmRlcjpm
dW5jdGlvbihpdGVtcyl7dmFyIHRoYXQ9dGhpcztyZXR1cm4gaXRlbXM9JChpdGVtcykubWFwKGZ1
bmN0aW9uKGksaXRlbSl7cmV0dXJuIGk9JCh0aGF0Lm9wdGlvbnMuaXRlbSkuYXR0cigiZGF0YS12
YWx1ZSIsaXRlbSksaS5maW5kKCJhIikuaHRtbCh0aGF0LmhpZ2hsaWdodGVyKGl0ZW0pKSxpWzBd
fSksaXRlbXMuZmlyc3QoKS5hZGRDbGFzcygiYWN0aXZlIiksdGhpcy4kbWVudS5odG1sKGl0ZW1z
KSx0aGlzfSxuZXh0OmZ1bmN0aW9uKCl7dmFyIGFjdGl2ZT10aGlzLiRtZW51LmZpbmQoIi5hY3Rp
dmUiKS5yZW1vdmVDbGFzcygiYWN0aXZlIiksbmV4dD1hY3RpdmUubmV4dCgpO25leHQubGVuZ3Ro
fHwobmV4dD0kKHRoaXMuJG1lbnUuZmluZCgibGkiKVswXSkpLG5leHQuYWRkQ2xhc3MoImFjdGl2
ZSIpfSxwcmV2OmZ1bmN0aW9uKCl7dmFyIGFjdGl2ZT10aGlzLiRtZW51LmZpbmQoIi5hY3RpdmUi
KS5yZW1vdmVDbGFzcygiYWN0aXZlIikscHJldj1hY3RpdmUucHJldigpO3ByZXYubGVuZ3RofHwo
cHJldj10aGlzLiRtZW51LmZpbmQoImxpIikubGFzdCgpKSxwcmV2LmFkZENsYXNzKCJhY3RpdmUi
KX0sbGlzdGVuOmZ1bmN0aW9uKCl7dGhpcy4kZWxlbWVudC5vbigiYmx1ciIsJC5wcm94eSh0aGlz
LmJsdXIsdGhpcykpLm9uKCJrZXlwcmVzcyIsJC5wcm94eSh0aGlzLmtleXByZXNzLHRoaXMpKS5v
bigia2V5dXAiLCQucHJveHkodGhpcy5rZXl1cCx0aGlzKSksdGhpcy5ldmVudFN1cHBvcnRlZCgi
a2V5ZG93biIpJiZ0aGlzLiRlbGVtZW50Lm9uKCJrZXlkb3duIiwkLnByb3h5KHRoaXMua2V5ZG93
bix0aGlzKSksdGhpcy4kbWVudS5vbigiY2xpY2siLCQucHJveHkodGhpcy5jbGljayx0aGlzKSku
b24oIm1vdXNlZW50ZXIiLCJsaSIsJC5wcm94eSh0aGlzLm1vdXNlZW50ZXIsdGhpcykpfSxldmVu
dFN1cHBvcnRlZDpmdW5jdGlvbihldmVudE5hbWUpe3ZhciBpc1N1cHBvcnRlZD1ldmVudE5hbWUg
aW4gdGhpcy4kZWxlbWVudDtyZXR1cm4gaXNTdXBwb3J0ZWR8fCh0aGlzLiRlbGVtZW50LnNldEF0
dHJpYnV0ZShldmVudE5hbWUsInJldHVybjsiKSxpc1N1cHBvcnRlZD0iZnVuY3Rpb24iPT10eXBl
b2YgdGhpcy4kZWxlbWVudFtldmVudE5hbWVdKSxpc1N1cHBvcnRlZH0sbW92ZTpmdW5jdGlvbihl
KXtpZih0aGlzLnNob3duKXtzd2l0Y2goZS5rZXlDb2RlKXtjYXNlIDk6Y2FzZSAxMzpjYXNlIDI3
OmUucHJldmVudERlZmF1bHQoKTticmVhaztjYXNlIDM4OmUucHJldmVudERlZmF1bHQoKSx0aGlz
LnByZXYoKTticmVhaztjYXNlIDQwOmUucHJldmVudERlZmF1bHQoKSx0aGlzLm5leHQoKX1lLnN0
b3BQcm9wYWdhdGlvbigpfX0sa2V5ZG93bjpmdW5jdGlvbihlKXt0aGlzLnN1cHByZXNzS2V5UHJl
c3NSZXBlYXQ9fiQuaW5BcnJheShlLmtleUNvZGUsWzQwLDM4LDksMTMsMjddKSx0aGlzLm1vdmUo
ZSl9LGtleXByZXNzOmZ1bmN0aW9uKGUpe3RoaXMuc3VwcHJlc3NLZXlQcmVzc1JlcGVhdHx8dGhp
cy5tb3ZlKGUpfSxrZXl1cDpmdW5jdGlvbihlKXtzd2l0Y2goZS5rZXlDb2RlKXtjYXNlIDQwOmNh
c2UgMzg6Y2FzZSAxNjpjYXNlIDE3OmNhc2UgMTg6YnJlYWs7Y2FzZSA5OmNhc2UgMTM6aWYoIXRo
aXMuc2hvd24pcmV0dXJuO3RoaXMuc2VsZWN0KCk7YnJlYWs7Y2FzZSAyNzppZighdGhpcy5zaG93
bilyZXR1cm47dGhpcy5oaWRlKCk7YnJlYWs7ZGVmYXVsdDp0aGlzLmxvb2t1cCgpfWUuc3RvcFBy
b3BhZ2F0aW9uKCksZS5wcmV2ZW50RGVmYXVsdCgpfSxibHVyOmZ1bmN0aW9uKCl7dmFyIHRoYXQ9
dGhpcztzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhhdC5oaWRlKCl9LDE1MCl9LGNsaWNrOmZ1bmN0
aW9uKGUpe2Uuc3RvcFByb3BhZ2F0aW9uKCksZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuc2VsZWN0
KCl9LG1vdXNlZW50ZXI6ZnVuY3Rpb24oZSl7dGhpcy4kbWVudS5maW5kKCIuYWN0aXZlIikucmVt
b3ZlQ2xhc3MoImFjdGl2ZSIpLCQoZS5jdXJyZW50VGFyZ2V0KS5hZGRDbGFzcygiYWN0aXZlIil9
fTt2YXIgb2xkPSQuZm4udHlwZWFoZWFkOyQuZm4udHlwZWFoZWFkPWZ1bmN0aW9uKG9wdGlvbil7
cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciAkdGhpcz0kKHRoaXMpLGRhdGE9JHRoaXMu
ZGF0YSgidHlwZWFoZWFkIiksb3B0aW9ucz0ib2JqZWN0Ij09dHlwZW9mIG9wdGlvbiYmb3B0aW9u
O2RhdGF8fCR0aGlzLmRhdGEoInR5cGVhaGVhZCIsZGF0YT1uZXcgVHlwZWFoZWFkKHRoaXMsb3B0
aW9ucykpLCJzdHJpbmciPT10eXBlb2Ygb3B0aW9uJiZkYXRhW29wdGlvbl0oKX0pfSwkLmZuLnR5
cGVhaGVhZC5kZWZhdWx0cz17c291cmNlOltdLGl0ZW1zOjgsbWVudTonPHVsIGNsYXNzPSJ0eXBl
YWhlYWQgZHJvcGRvd24tbWVudSI+PC91bD4nLGl0ZW06JzxsaT48YSBocmVmPSIjIj48L2E+PC9s
aT4nLG1pbkxlbmd0aDoxfSwkLmZuLnR5cGVhaGVhZC5Db25zdHJ1Y3Rvcj1UeXBlYWhlYWQsJC5m
bi50eXBlYWhlYWQubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiAkLmZuLnR5cGVhaGVhZD1v
bGQsdGhpc30sJChkb2N1bWVudCkub24oImZvY3VzLnR5cGVhaGVhZC5kYXRhLWFwaSIsJ1tkYXRh
LXByb3ZpZGU9InR5cGVhaGVhZCJdJyxmdW5jdGlvbihlKXt2YXIgJHRoaXM9JCh0aGlzKTskdGhp
cy5kYXRhKCJ0eXBlYWhlYWQiKXx8KGUucHJldmVudERlZmF1bHQoKSwkdGhpcy50eXBlYWhlYWQo
JHRoaXMuZGF0YSgpKSl9KX0od2luZG93LmpRdWVyeSksIWZ1bmN0aW9uKCQpeyJ1c2Ugc3RyaWN0
Ijt2YXIgQWZmaXg9ZnVuY3Rpb24oZWxlbWVudCxvcHRpb25zKXt0aGlzLm9wdGlvbnM9JC5leHRl
bmQoe30sJC5mbi5hZmZpeC5kZWZhdWx0cyxvcHRpb25zKSx0aGlzLiR3aW5kb3c9JCh3aW5kb3cp
Lm9uKCJzY3JvbGwuYWZmaXguZGF0YS1hcGkiLCQucHJveHkodGhpcy5jaGVja1Bvc2l0aW9uLHRo
aXMpKS5vbigiY2xpY2suYWZmaXguZGF0YS1hcGkiLCQucHJveHkoZnVuY3Rpb24oKXtzZXRUaW1l
b3V0KCQucHJveHkodGhpcy5jaGVja1Bvc2l0aW9uLHRoaXMpLDEpfSx0aGlzKSksdGhpcy4kZWxl
bWVudD0kKGVsZW1lbnQpLHRoaXMuY2hlY2tQb3NpdGlvbigpfTtBZmZpeC5wcm90b3R5cGUuY2hl
Y2tQb3NpdGlvbj1mdW5jdGlvbigpe2lmKHRoaXMuJGVsZW1lbnQuaXMoIjp2aXNpYmxlIikpe3Zh
ciBhZmZpeCxzY3JvbGxIZWlnaHQ9JChkb2N1bWVudCkuaGVpZ2h0KCksc2Nyb2xsVG9wPXRoaXMu
JHdpbmRvdy5zY3JvbGxUb3AoKSxwb3NpdGlvbj10aGlzLiRlbGVtZW50Lm9mZnNldCgpLG9mZnNl
dD10aGlzLm9wdGlvbnMub2Zmc2V0LG9mZnNldEJvdHRvbT1vZmZzZXQuYm90dG9tLG9mZnNldFRv
cD1vZmZzZXQudG9wLHJlc2V0PSJhZmZpeCBhZmZpeC10b3AgYWZmaXgtYm90dG9tIjsib2JqZWN0
IiE9dHlwZW9mIG9mZnNldCYmKG9mZnNldEJvdHRvbT1vZmZzZXRUb3A9b2Zmc2V0KSwiZnVuY3Rp
b24iPT10eXBlb2Ygb2Zmc2V0VG9wJiYob2Zmc2V0VG9wPW9mZnNldC50b3AoKSksImZ1bmN0aW9u
Ij09dHlwZW9mIG9mZnNldEJvdHRvbSYmKG9mZnNldEJvdHRvbT1vZmZzZXQuYm90dG9tKCkpLGFm
Zml4PW51bGwhPXRoaXMudW5waW4mJnNjcm9sbFRvcCt0aGlzLnVucGluPD1wb3NpdGlvbi50b3A/
ITE6bnVsbCE9b2Zmc2V0Qm90dG9tJiZwb3NpdGlvbi50b3ArdGhpcy4kZWxlbWVudC5oZWlnaHQo
KT49c2Nyb2xsSGVpZ2h0LW9mZnNldEJvdHRvbT8iYm90dG9tIjpudWxsIT1vZmZzZXRUb3AmJm9m
ZnNldFRvcD49c2Nyb2xsVG9wPyJ0b3AiOiExLHRoaXMuYWZmaXhlZCE9PWFmZml4JiYodGhpcy5h
ZmZpeGVkPWFmZml4LHRoaXMudW5waW49ImJvdHRvbSI9PWFmZml4P3Bvc2l0aW9uLnRvcC1zY3Jv
bGxUb3A6bnVsbCx0aGlzLiRlbGVtZW50LnJlbW92ZUNsYXNzKHJlc2V0KS5hZGRDbGFzcygiYWZm
aXgiKyhhZmZpeD8iLSIrYWZmaXg6IiIpKSl9fTt2YXIgb2xkPSQuZm4uYWZmaXg7JC5mbi5hZmZp
eD1mdW5jdGlvbihvcHRpb24pe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgJHRoaXM9
JCh0aGlzKSxkYXRhPSR0aGlzLmRhdGEoImFmZml4Iiksb3B0aW9ucz0ib2JqZWN0Ij09dHlwZW9m
IG9wdGlvbiYmb3B0aW9uO2RhdGF8fCR0aGlzLmRhdGEoImFmZml4IixkYXRhPW5ldyBBZmZpeCh0
aGlzLG9wdGlvbnMpKSwic3RyaW5nIj09dHlwZW9mIG9wdGlvbiYmZGF0YVtvcHRpb25dKCl9KX0s
JC5mbi5hZmZpeC5Db25zdHJ1Y3Rvcj1BZmZpeCwkLmZuLmFmZml4LmRlZmF1bHRzPXtvZmZzZXQ6
MH0sJC5mbi5hZmZpeC5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuICQuZm4uYWZmaXg9b2xk
LHRoaXN9LCQod2luZG93KS5vbigibG9hZCIsZnVuY3Rpb24oKXskKCdbZGF0YS1zcHk9ImFmZml4
Il0nKS5lYWNoKGZ1bmN0aW9uKCl7dmFyICRzcHk9JCh0aGlzKSxkYXRhPSRzcHkuZGF0YSgpO2Rh
dGEub2Zmc2V0PWRhdGEub2Zmc2V0fHx7fSxkYXRhLm9mZnNldEJvdHRvbSYmKGRhdGEub2Zmc2V0
LmJvdHRvbT1kYXRhLm9mZnNldEJvdHRvbSksZGF0YS5vZmZzZXRUb3AmJihkYXRhLm9mZnNldC50
b3A9ZGF0YS5vZmZzZXRUb3ApLCRzcHkuYWZmaXgoZGF0YSl9KX0pfSh3aW5kb3cualF1ZXJ5KTsK
XCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0RvWW91
RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvZXM1LXNoaW0vLmdpdGln
bm9yZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdo
dGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvZXM1LXNoaW0vLmdpdGlnbm9yZQkocmV2aXNpb24g
MCkKKysrIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1h
cHAvY29tcG9uZW50cy9lczUtc2hpbS8uZ2l0aWdub3JlCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMiBAQAorbm9kZV9tb2R1bGVzCisuRFNfU3RvcmUKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMv
RG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9lczUtc2hpbS9D
SEFOR0VTCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxp
Z2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9lczUtc2hpbS9DSEFOR0VTCShyZXZpc2lvbiAw
KQorKysgUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFw
cC9jb21wb25lbnRzL2VzNS1zaGltL0NIQU5HRVMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5
MyBAQAorCisyLjAuMAorIC0gU2VwYXJhdGUgcmVsaWFibGUgc2hpbXMgZnJvbSBkdWJpb3VzIHNo
aW1zIChzaGFtcykuCisKKzEuMi4xMAorIC0gR3JvdXAtZWZmb3J0IFN0eWxlIENsZWFudXAKKyAt
IFRvb2sgYSBzdGFiIGF0IGZpeGluZyBPYmplY3QuZGVmaW5lUHJvcGVydHkgb24gSUU4IHdpdGhv
dXQKKyAgIGJhZCBzaWRlLWVmZmVjdHMuIChAaGF4KQorIC0gT2JqZWN0LmlzRXh0ZW5zaWJsZSBu
byBsb25nZXIgZmFrZXMgaXQuIChAeGF2aWVybSkKKyAtIERhdGUucHJvdG90eXBlLnRvSVNPU3Ry
aW5nIG5vIGxvbmdlciBkZWFscyB3aXRoIHBhcnRpYWwKKyAgIElTTyBkYXRlcywgcGVyIHNwZWMg
KEBraXRjYW1icmlkZ2UpCisgLSBNb3JlIChtb3N0bHkgZnJvbSBAYnJ5YW5mb3JiZXMpCisKKzEu
Mi45CisgLSBDb3JyZWN0aW9ucyB0byB0b0lTT1N0cmluZyBieSBAa2l0Y2FtYnJpZGdlCisgLSBG
aXhlZCB0aHJlZSBidWdzIGluIGFycmF5IG1ldGhvZHMgcmV2ZWFsZWQgYnkgSmFzbWluZSB0ZXN0
cy4KKyAtIENsZWFuZWQgdXAgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQgd2l0aCBtb3JlIGZpeGVz
IGFuZCB0ZXN0cyBmcm9tCisgICBAYnJ5YW5mb3JiZXMuCisKKzEuMi44CisgLSBBY3R1YWxseSBm
aXhlZCBwcm9ibGVtcyB3aXRoIEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLCBhbmQgcmVncmVzc2lv
bnMKKyAgIGZyb20gMS4yLjcgKEBicnlhbmZvcmJlcywgQGpkYWx0b24gIzM2KQorCisxLjIuNyAt
IFJFR1JFU1NFRAorIC0gRml4ZWQgcHJvYmxlbXMgd2l0aCBGdW5jdGlvbi5wcm90b3R5cGUuYmlu
ZCB3aGVuIGNhbGxlZCBhcyBhIGNvbnN0cnVjdG9yLgorICAgKEBqZGFsdG9uICMzNikKKworMS4y
LjYKKyAtIFJldmlzZWQgRGF0ZS5wYXJzZSB0byBtYXRjaCBFUyA1LjEgKGtpdGNhbWJyaWRnZSkK
KworMS4yLjUKKyAtIEZpeGVkIGEgYnVnIGZvciBwYWRkaW5nIGl0IERhdGUuLnRvSVNPU3RyaW5n
ICh0YWRmaXNoZXIgaXNzdWUgIzMzKQorCisxLjIuNAorIC0gRml4ZWQgYSBkZXNjcmlwdG9yIGJ1
ZyBpbiBPYmplY3QuZGVmaW5lUHJvcGVydHkgKHJheW5vcykKKworMS4yLjMKKyAtIENsZWFuZWQg
dXAgUmVxdWlyZUpTIGFuZCA8c2NyaXB0PiBib2lsZXJwbGF0ZQorCisxLjIuMgorIC0gQ2hhbmdl
ZCByZWR1Y2UgdG8gZm9sbG93IHRoZSBsZXR0ZXIgb2YgdGhlIHNwZWMgd2l0aCByZWdhcmQgdG8g
aGF2aW5nIGFuZAorICAgb3duaW5nIHByb3BlcnRpZXMuCisgLSBGaXhlZCBhIGJ1ZyB3aGVyZSBS
ZWdFeHBzIHBhc3MgYXMgRnVuY3Rpb25zIGluIHNvbWUgZW5naW5lcyBpbiByZWR1Y2UuCisKKzEu
Mi4xCisgLSBBZGRpbmcgZmV3IGZpeGVzIHRvIG1ha2UganNoaW50IGhhcHB5LgorIC0gRml4IGZv
ciBpc3N1ZSAjMTIsIGZ1bmN0aW9uIGV4cHJlc3Npb25zIGNhbiBjYXVzZSBzY29waW5nIGlzc3Vl
cyBpbiBJRS4KKyAtIE5QTSB3aWxsIG1pbmlmeSBvbiBpbnN0YWxsIG9yIHdoZW4gYG5wbSBydW4t
c2NyaXB0IGluc3RhbGxgIGlzIGV4ZWN1dGVkLgorIC0gQWRkaW5nIC5naXRpZ25vcmUgdG8gYXZv
aWQgcHVibGlzaGluZyBkZXYgZGVwZW5kZW5jaWVzLgorCisxLjIuMAorIC0gTWFraW5nIHNjcmlw
dCBsb2FkYWJsZSBhcyBBTUQgbW9kdWxlLgorIC0gQWRkaW5nIGBpbmRleE9mYCB0byB0aGUgbGlz
dCBvZiBzYWZlIHNoaW1zLgorCisxLjEuMAorIC0gQWRkZWQgc3VwcG9ydCBmb3IgYWNjZXNzb3Ig
cHJvcGVydGllcyB3aGVyZSBwb3NzaWJsZSAod2hpY2ggaXMgYWxsIGJyb3dzZXJzCisgICBleGNl
cHQgSUUpLgorIC0gU3RvcCBleHBvc2luZyBib3VuZCBmdW5jdGlvbidzICh0aGF0IGFyZSByZXR1
cm5lZCBieQorICAgYEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kYCkgaW50ZXJuYWwgcHJvcGVydGll
cyAoYGJvdW5kLCBib3VuZFRvLCBib3VuZEFyZ3NgKQorICAgYXMgaW4gc29tZSBjYXNlcyAod2hl
biB1c2luZyBmYWNhZGUgb2JqZWN0cyBmb3IgZXhhbXBsZSkgY2FwYWJpbGl0aWVzIG9mIHRoZQor
ICAgZW5jbG9zZWQgZnVuY3Rpb25zIHdpbGwgYmUgbGVha2VkLgorIC0gYE9iamVjdC5jcmVhdGVg
IG5vdyBleHBsaWNpdGx5IHNldHMgYF9fcHJvdG9fX2AgcHJvcGVydHkgdG8gZ3VhcmFudGVlCisg
ICBjb3JyZWN0IGJlaGF2aW9yIG9mIGBPYmplY3QuZ2V0UHJvdG90eXBlT2ZgJ3Mgb24gYWxsIG9i
amVjdHMgY3JlYXRlZCB1c2luZworICAgYE9iamVjdC5jcmVhdGVgLgorIC0gU3dpdGNoZWQgdG8g
YD09PWAgZnJvbSBgPT1gIHdoZXJlIHBvc3NpYmxlIGFzIGl0J3Mgc2xpZ2h0bHkgZmFzdGVyIG9u
IG9sZGVyCisgICBicm93c2VycyB0aGF0IGFyZSB0YXJnZXQgb2YgdGhpcyBsaWIuCisgLSBBZGRl
ZCBuYW1lcyB0byBhbGwgYW5vbnltb3VzIGZ1bmN0aW9ucyB0byBoYXZlIGEgYmV0dGVyIHN0YWNr
IHRyYWNlcy4KKworMS4wLjAKKyAtIGZpeGVkIERhdGUudG9JU09EYXRlLCB1c2luZyBVVEMgYWNj
ZXNzb3JzLCBhcyBpbgorICAgaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL3Y4L3NvdXJjZS9icm93
c2UvdHJ1bmsvc3JjL2RhdGUuanM/cj02MTIwIzk4NgorICAgKGFyaWFuKQorCiswLjAuNAorIC0g
UmV2aXNlZCBPYmplY3QuZ2V0UHJvdG90eXBlT2YgdG8gd29yayBpbiBtb3JlIGNhc2VzCisgICBp
biByZXNwb25zZSB0byBodHRwOi8vZWpvaG4ub3JnL2Jsb2cvb2JqZWN0Z2V0cHJvdG90eXBlb2Yv
CisgICBbaXNzdWUgIzJdIChmc2NoYWVmZXIpCisKKzAuMC4zCisgLSBGaXhlZCB0eXBvcyBpbiBP
YmplY3Qua2V5cyAoc2Ftc29uanMpCisKKzAuMC4yCisgICBQZXIga2FuZ2F4J3MgcmVjb21tZW5k
YXRpb25zOgorIC0gZmFzdGVyIE9iamVjdC5jcmVhdGUobnVsbCkKKyAtIGZpeGVkIGEgZnVuY3Rp
b24tc2NvcGUgZnVuY3Rpb24gZGVjbGFyYXRpb24gc3RhdGVtZW50IGluIE9iamVjdC5jcmVhdGUK
KworMC4wLjEKKyAtIGZpeGVkIE9iamVjdC5jcmVhdGUobnVsbCksIGluIHNvIGZhciBhcyB0aGF0
J3MgcG9zc2libGUKKyAtIHJld29ya2VkIFJoaW5vIE9iamVjdC5mcmVlemUoRnVuY3Rpb24pIGJ1
ZyBkZXRlY3RvciBhbmQgcGF0Y2hlcgorCiswLjAuMAorIC0gZm9ya2VkIGZyb20gbmFyd2hhbC1s
aWIKKwpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFt
cGxlLWFwcC9jb21wb25lbnRzL2VzNS1zaGltL0NPTlRSSUJVVE9SUy5tZAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2Nv
bXBvbmVudHMvZXM1LXNoaW0vQ09OVFJJQlVUT1JTLm1kCShyZXZpc2lvbiAwKQorKysgUGVyZm9y
bWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRz
L2VzNS1zaGltL0NPTlRSSUJVVE9SUy5tZAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI1IEBA
CisKKy0gICBrcmlza293YWwgS3JpcyBLb3dhbCBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMSBNSVQg
TGljZW5zZQorLSAgIHRscm9iaW5zb24gVG9tIFJvYmluc29uIENvcHlyaWdodCAoQykgMjAwOS0y
MDEwIE1JVCBMaWNlbnNlIChOYXJ3aGFsCisgICAgUHJvamVjdCkKKy0gICBkYW50bWFuIERhbmll
bCBGcmllc2VuIENvcHlyaWdodCAoQykgMjAxMCBYWFggVE9ETyBMaWNlbnNlIG9yIENMQQorLSAg
IGZzY2hhZWZlciBGbG9yaWFuIFNjaMOkZmVyIENvcHlyaWdodCAoQykgMjAxMCBNSVQgTGljZW5z
ZQorLSAgIEdvemFsYSBJcmFrbGkgR296YWxpc2h2aWxpIENvcHlyaWdodCAoQykgMjAxMCBNSVQg
TGljZW5zZQorLSAgIGtpdGNhbWJyaWRnZSBLaXQgQ2FtYnJpZGdlIENvcHlyaWdodCAoQykgMjAx
MSBNSVQgTGljZW5zZQorLSAgIGtvc3Nub2NvcnAgU2FzaGEgS29zcyBYWFggVE9ETyBMaWNlbnNl
IG9yIENMQQorLSAgIGJyeWFuZm9yYmVzIEJyeWFuIEZvcmJlcyBYWFggVE9ETyBMaWNlbnNlIG9y
IENMQQorLSAgIGtpbGxkcmVhbSBRdWlsZHJlZW4gTW90dGEgQ29weXJpZ2h0IChDKSAyMDExIE1J
VCBMaWNlbmNlCistICAgbWljaGFlbGZpY2FycmEgTWljaGFlbCBGaWNhcnJhIENvcHlyaWdodCAo
QykgMjAxMSAzLWNsYXVzZSBCU0QKKyAgICBMaWNlbnNlCistICAgc2hhcmticmFpbmd1eSBHZXJh
cmQgUGFhcHUgQ29weXJpZ2h0IChDKSAyMDExIE1JVCBMaWNlbnNlCistICAgYmJxc3JjIEJyZW5k
YW4gTW9sbG95IChDKSAyMDExIENyZWF0aXZlIENvbW1vbnMgWmVybyAocHVibGljIGRvbWFpbikK
Ky0gICBpd3lnIFhYWCBUT0RPIExpY2Vuc2Ugb3IgQ0xBCistICAgRG9tZW5pY0Rlbmljb2xhIERv
bWVuaWMgRGVuaWNvbGEgQ29weXJpZ2h0IChDKSAyMDExIE1JVCBMaWNlbnNlCistICAgeGF2aWVy
bTAyIE1vbnRpbGxldCBYYXZpZXIgQ29weXJpZ2h0IChDKSAyMDExIE1JVCBMaWNlbnNlCistICAg
UmF5bm9zIEpha2UgVmVyYmF0ZW4gQ29weXJpZ2h0IChDKSAyMDExIE1JVCBMaWNlbmNlCistICAg
c2Ftc29uanMgU2FtaSBTYW1odXJpIENvcHlyaWdodCAoQykgMjAxMCBNSVQgTGljZW5zZQorLSAg
IHJ3bGRybiBSaWNrIFdhbGRyb24gQ29weXJpZ2h0IChDKSAyMDExIE1JVCBMaWNlbnNlCistICAg
bGV4ZXIgQWxleGV5IFpha2hhcm92IFhYWCBUT0RPIExpY2Vuc2Ugb3IgQ0xBCistICAgMjgwIE5v
cnRoIEluYy4gKE5vdyBNb3Rvcm9sYSBMTEMsIGEgc3Vic2lkaWFyeSBvZiBHb29nbGUgSW5jLikK
KyAgICBDb3B5cmlnaHQgKEMpIDIwMDkgTUlUIExpY2Vuc2UKKwpJbmRleDogUGVyZm9ybWFuY2VU
ZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2VzNS1z
aGltL0xJQ0VOU0UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5j
aC9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2VzNS1zaGltL0xJQ0VOU0UJKHJldmlz
aW9uIDApCisrKyBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1w
bGUtYXBwL2NvbXBvbmVudHMvZXM1LXNoaW0vTElDRU5TRQkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDE5IEBACisKK0NvcHlyaWdodCAyMDA5LCAyMDEwIEtyaXN0b3BoZXIgTWljaGFlbCBLb3dh
bC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZy
ZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKK29mIHRoaXMgc29m
dHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIp
LCB0bworZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5n
IHdpdGhvdXQgbGltaXRhdGlvbiB0aGUKK3JpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVy
Z2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vcgorc2VsbCBjb3BpZXMg
b2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdh
cmUgaXMKK2Z1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnM6CisKK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24g
bm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCithbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBv
cnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJ
UyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKK0lNUExJRUQsIElO
Q0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZLAorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVO
VC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCitBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJF
IExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCitMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORwor
RlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVT
RSBPUiBPVEhFUiBERUFMSU5HUworSU4gVEhFIFNPRlRXQVJFLgpJbmRleDogUGVyZm9ybWFuY2VU
ZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2VzNS1z
aGltL1JFQURNRS5tZAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJl
bmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvZXM1LXNoaW0vUkVBRE1FLm1kCShy
ZXZpc2lvbiAwKQorKysgUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1l
eGFtcGxlLWFwcC9jb21wb25lbnRzL2VzNS1zaGltL1JFQURNRS5tZAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDE2MSBAQAorCitgZXM1LXNoaW0uanNgIGFuZCBgZXM1LXNoaW0ubWluLmpzYCBt
b25rZXktcGF0Y2ggYSBKYXZhU2NyaXB0IGNvbnRleHQgdG8KK2NvbnRhaW4gYWxsIEVjbWFTY3Jp
cHQgNSBtZXRob2RzIHRoYXQgY2FuIGJlIGZhaXRoZnVsbHkgZW11bGF0ZWQgd2l0aCBhCitsZWdh
Y3kgSmF2YVNjcmlwdCBlbmdpbmUuCisKK2BlczUtc2hhbS5qc2AgYW5kIGBlczUtc2hhbS5taW4u
anNgIG1vbmtleS1wYXRjaCBvdGhlciBFUzUgbWV0aG9kcyBhcworY2xvc2VseSBhcyBwb3NzaWJs
ZS4gIEZvciB0aGVzZSBtZXRob2RzLCBhcyBjbG9zZWx5IGFzIHBvc3NpYmxlIHRvIEVTNQoraXMg
bm90IHZlcnkgY2xvc2UuICBNYW55IG9mIHRoZXNlIHNoYW1zIGFyZSBpbnRlbmRlZCBvbmx5IHRv
IGFsbG93IGNvZGUKK3RvIGJlIHdyaXR0ZW4gdG8gRVM1IHdpdGhvdXQgY2F1c2luZyBydW4tdGlt
ZSBlcnJvcnMgaW4gb2xkZXIgZW5naW5lcy4KK0luIG1hbnkgY2FzZXMsIHRoaXMgbWVhbnMgdGhh
dCB0aGVzZSBzaGFtcyBjYXVzZSBtYW55IEVTNSBtZXRob2RzIHRvCitzaWxlbnRseSBmYWlsLiAg
RGVjaWRlIGNhcmVmdWxseSB3aGV0aGVyIHRoaXMgaXMgd2hhdCB5b3Ugd2FudC4KKworCisjIyBU
ZXN0cworCitUaGUgdGVzdHMgYXJlIHdyaXR0ZW4gd2l0aCB0aGUgSmFzbWluZSBCREQgdGVzdCBm
cmFtZXdvcmsuCitUbyBydW4gdGhlIHRlc3RzLCBuYXZpZ2F0ZSB0byA8cm9vdC1mb2xkZXI+L3Rl
c3RzLy4gCisKK0luIG9yZGVyIHRvIHJ1biBhZ2FpbnN0IHRoZSBzaGltLWNvZGUsIHRoZSB0ZXN0
cyBhdHRlbXB0IHRvIGtpbGwgdGhlIGN1cnJlbnQgCitpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbWlz
c2luZyBtZXRob2RzLiBUaGlzIGhhcHBlbnMgaW4gPHJvb3QtZm9sZGVyPi90ZXN0cy9oZWxwZXJz
L2gta2lsbC5qcy4KK1NvIGluIG9yZGVyIHRvIHJ1biB0aGUgdGVzdHMgYWdhaW5zdCB0aGUgYnVp
bGQtaW4gbWV0aG9kcywgaW52YWxpZGF0ZSB0aGF0IGZpbGUgc29tZWhvdworKGNvbW1lbnQtb3V0
LCBkZWxldGUgdGhlIGZpbGUsIGRlbGV0ZSB0aGUgc2NyaXB0LXRhZywgZXRjLikuCisKKyMjIFNo
aW1zCisKKyMjIyBDb21wbGV0ZSB0ZXN0cyAjIyMKKworKiBBcnJheS5wcm90b3R5cGUuZXZlcnkK
KyogQXJyYXkucHJvdG90eXBlLmZpbHRlcgorKiBBcnJheS5wcm90b3R5cGUuZm9yRWFjaAorKiBB
cnJheS5wcm90b3R5cGUuaW5kZXhPZgorKiBBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YKKyog
QXJyYXkucHJvdG90eXBlLm1hcAorKiBBcnJheS5wcm90b3R5cGUuc29tZQorKiBBcnJheS5wcm90
b3R5cGUucmVkdWNlCisqIEFycmF5LnByb3RvdHlwZS5yZWR1Y2VSaWdodAorKiBBcnJheS5pc0Fy
cmF5CisqIERhdGUubm93CisqIERhdGUucHJvdG90eXBlLnRvSlNPTgorKiBGdW5jdGlvbi5wcm90
b3R5cGUuYmluZAorICAgICogLyFcIENhdmVhdDogdGhlIGJvdW5kIGZ1bmN0aW9uJ3MgbGVuZ3Ro
IGlzIGFsd2F5cyAwLgorICAgICogLyFcIENhdmVhdDogdGhlIGJvdW5kIGZ1bmN0aW9uIGhhcyBh
IHByb3RvdHlwZSBwcm9wZXJ0eS4KKyAgICAqIC8hXCBDYXZlYXQ6IGJvdW5kIGZ1bmN0aW9ucyBk
byBub3QgdHJ5IHRvbyBoYXJkIHRvIGtlZXAgeW91CisgICAgICBmcm9tIG1hbmlwdWxhdGluZyB0
aGVpciBgYGFyZ3VtZW50c2BgIGFuZCBgYGNhbGxlcmBgIHByb3BlcnRpZXMuCisgICAgKiAvIVwg
Q2F2ZWF0OiBib3VuZCBmdW5jdGlvbnMgZG9uJ3QgaGF2ZSBjaGVja3MgaW4gYGBjYWxsYGAgYW5k
CisgICAgICBgYGFwcGx5YGAgdG8gYXZvaWQgZXhlY3V0aW5nIGFzIGEgY29uc3RydWN0b3IuCisq
IE9iamVjdC5rZXlzCisqIFN0cmluZy5wcm90b3R5cGUudHJpbQorCisjIyMgVW50ZXN0ZWQgIyMj
CisKKyogRGF0ZS5wYXJzZSAoZm9yIElTTyBwYXJzaW5nKQorKiBEYXRlLnByb3RvdHlwZS50b0lT
T1N0cmluZworCisjIyBTaGFtcworCisqIC8/XCBPYmplY3QuY3JlYXRlCisKKyAgICBGb3IgdGhl
IGNhc2Ugb2Ygc2ltcGx5ICJiZWdldHRpbmciIGFuIG9iamVjdCB0aGF0CisgICAgaW5oZXJpdHMg
cHJvdG90eXBpY2FsbHkgZnJvbSBhbm90aGVyLCB0aGlzIHNob3VsZCB3b3JrCisgICAgZmluZSBh
Y3Jvc3MgbGVnYWN5IGVuZ2luZXMuCisKKyAgICAvIVwgT2JqZWN0LmNyZWF0ZShudWxsKSB3aWxs
IHdvcmsgb25seSBpbiBicm93c2VycyB0aGF0CisgICAgc3VwcG9ydCBwcm90b3R5cGUgYXNzaWdu
bWVudC4gIFRoaXMgY3JlYXRlcyBhbiBvYmplY3QKKyAgICB0aGF0IGRvZXMgbm90IGhhdmUgYW55
IHByb3BlcnRpZXMgaW5oZXJpdGVkIGZyb20KKyAgICBPYmplY3QucHJvdG90eXBlLiAgSXQgd2ls
bCBzaWxlbnRseSBmYWlsIG90aGVyd2lzZS4KKworICAgIC8hXCBUaGUgc2Vjb25kIGFyZ3VtZW50
IGlzIHBhc3NlZCB0bworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzIHdoaWNoIHdpbGwgcHJv
YmFibHkgZmFpbAorICAgIHNpbGVudGx5LgorCisqIC8/XCBPYmplY3QuZ2V0UHJvdG90eXBlT2YK
KworICAgIFRoaXMgd2lsbCByZXR1cm4gInVuZGVmaW5lZCIgaW4gc29tZSBjYXNlcy4gIEl0IHVz
ZXMKKyAgICBfX3Byb3RvX18gaWYgaXQncyBhdmFpbGFibGUuICBGYWlsaW5nIHRoYXQsIGl0IHVz
ZXMKKyAgICBjb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHdoaWNoIGRlcGVuZHMgb24gdGhlIGNvbnN0
cnVjdG9yCisgICAgcHJvcGVydHkgb2YgdGhlIG9iamVjdCdzIHByb3RvdHlwZSBoYXZpbmcgbm90
IGJlZW4KKyAgICByZXBsYWNlZC4gIElmIHlvdXIgb2JqZWN0IHdhcyBjcmVhdGVkIGxpa2UgdGhp
cywgaXQKKyAgICB3b24ndCB3b3JrOgorCisgICAgICAgIGZ1bmN0aW9uIEZvbygpIHsKKyAgICAg
ICAgfQorICAgICAgICBGb28ucHJvdG90eXBlID0ge307CisKKyAgICBCZWNhdXNlIHRoZSBwcm90
b3R5cGUgcmVhc3NpZ25tZW50IGRlc3Ryb3lzIHRoZQorICAgIGNvbnN0cnVjdG9yIHByb3BlcnR5
LgorCisgICAgVGhpcyB3aWxsIHdvcmsgZm9yIGFsbCBvYmplY3RzIHRoYXQgd2VyZSBjcmVhdGVk
IHVzaW5nCisgICAgYE9iamVjdC5jcmVhdGVgIGltcGxlbWVudGVkIHdpdGggdGhpcyBsaWJyYXJ5
LgorCisqIC8hXCBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcworCisgICAgVGhpcyBtZXRob2Qg
dXNlcyBPYmplY3Qua2V5cywgc28gaXQgd2lsbCBub3QgYmUgYWNjdXJhdGUKKyAgICBvbiBsZWdh
Y3kgZW5naW5lcy4KKworKiBPYmplY3QuaXNTZWFsZWQKKworICAgIFJldHVybnMgImZhbHNlIiBp
biBhbGwgbGVnYWN5IGVuZ2luZXMgZm9yIGFsbCBvYmplY3RzLAorICAgIHdoaWNoIGlzIGNvbnZl
bmllbnRseSBndWFyYW50ZWVkIHRvIGJlIGFjY3VyYXRlLgorCisqIE9iamVjdC5pc0Zyb3plbgor
CisgICAgUmV0dXJucyAiZmFsc2UiIGluIGFsbCBsZWdhY3kgZW5naW5lcyBmb3IgYWxsIG9iamVj
dHMsCisgICAgd2hpY2ggaXMgY29udmVuaWVudGx5IGd1YXJhbnRlZWQgdG8gYmUgYWNjdXJhdGUu
CisKKyogT2JqZWN0LmlzRXh0ZW5zaWJsZQorCisgICAgV29ya3MgbGlrZSBhIGNoYXJtLCBieSB0
cnlpbmcgdmVyeSBoYXJkIHRvIGV4dGVuZCB0aGUKKyAgICBvYmplY3QgdGhlbiByZWRhY3Rpbmcg
dGhlIGV4dGVuc2lvbi4KKworIyMjIEZhaWwgc2lsZW50bHkKKworKiAvIVwgT2JqZWN0LmdldE93
blByb3BlcnR5RGVzY3JpcHRvcgorICAgIAorICAgIFRoZSBiZWhhdmlvciBvZiB0aGlzIHNoaW0g
ZG9lcyBub3QgY29uZm9ybSB0byBFUzUuICBJdAorICAgIHNob3VsZCBwcm9iYWJseSBub3QgYmUg
dXNlZCBhdCB0aGlzIHRpbWUsIHVudGlsIGl0cworICAgIGJlaGF2aW9yIGhhcyBiZWVuIHJldmll
d2VkIGFuZCBiZWVuIGNvbmZpcm1lZCB0byBiZQorICAgIHVzZWZ1bCBpbiBsZWdhY3kgZW5naW5l
cy4KKworKiAvIVwgT2JqZWN0LmRlZmluZVByb3BlcnR5CisKKyAgICBUaGlzIG1ldGhvZCB3aWxs
IHNpbGVudGx5IGZhaWwgdG8gc2V0ICJ3cml0YWJsZSIsCisgICAgImVudW1lcmFibGUiLCBhbmQg
ImNvbmZpZ3VyYWJsZSIgcHJvcGVydGllcy4KKyAgICAKKyAgICBQcm92aWRpbmcgYSBnZXR0ZXIg
b3Igc2V0dGVyIHdpdGggImdldCIgb3IgInNldCIgb24gYQorICAgIGRlc2NyaXB0b3Igd2lsbCBz
aWxlbnRseSBmYWlsIG9uIGVuZ2luZXMgdGhhdCBsYWNrCisgICAgIl9fZGVmaW5lR2V0dGVyX18i
IGFuZCAiX19kZWZpbmVTZXR0ZXJfXyIsIHdoaWNoIGluY2x1ZGUKKyAgICBhbGwgdmVyc2lvbnMg
b2YgSUUgdXAgdG8gdmVyc2lvbiA4IHNvIGZhci4KKworICAgIElFIDggcHJvdmlkZXMgYSB2ZXJz
aW9uIG9mIHRoaXMgbWV0aG9kIGJ1dCBpdCBvbmx5IHdvcmtzCisgICAgb24gRE9NIG9iamVjdHMu
ICBUaHVzLCB0aGUgc2hpbSB3aWxsIG5vdCBnZXQgaW5zdGFsbGVkCisgICAgYW5kIGF0dGVtcHRz
IHRvIHNldCAidmFsdWUiIHByb3BlcnRpZXMgd2lsbCBmYWlsCisgICAgc2lsZW50bHkgb24gbm9u
LURPTSBvYmplY3RzLgorCisgICAgaHR0cHM6Ly9naXRodWIuY29tL2tyaXNrb3dhbC9lczUtc2hp
bS9pc3N1ZXMjaXNzdWUvNQorCisqIC8hXCBPYmplY3QuZGVmaW5lUHJvcGVydGllcworCisgICAg
VGhpcyB1c2VzIHRoZSBPYmplY3QuZGVmaW5lUHJvcGVydHkgc2hpbQorCisqIE9iamVjdC5zZWFs
CisKKyAgICBTaWxlbnRseSBmYWlscyBvbiBhbGwgbGVnYWN5IGVuZ2luZXMuICBUaGlzIHNob3Vs
ZCBiZQorICAgIGZpbmUgdW5sZXNzIHlvdSBhcmUgZGVwZW5kaW5nIG9uIHRoZSBzYWZldHkgYW5k
IHNlY3VyaXR5CisgICAgcHJvdmlzaW9ucyBvZiB0aGlzIG1ldGhvZCwgd2hpY2ggeW91IGNhbm5v
dCBwb3NzaWJseQorICAgIG9idGFpbiBpbiBsZWdhY3kgZW5naW5lcy4KKworKiBPYmplY3QuZnJl
ZXplCisKKyAgICBTaWxlbnRseSBmYWlscyBvbiBhbGwgbGVnYWN5IGVuZ2luZXMuICBUaGlzIHNo
b3VsZCBiZQorICAgIGZpbmUgdW5sZXNzIHlvdSBhcmUgZGVwZW5kaW5nIG9uIHRoZSBzYWZldHkg
YW5kIHNlY3VyaXR5CisgICAgcHJvdmlzaW9ucyBvZiB0aGlzIG1ldGhvZCwgd2hpY2ggeW91IGNh
bm5vdCBwb3NzaWJseQorICAgIG9idGFpbiBpbiBsZWdhY3kgZW5naW5lcy4KKworKiBPYmplY3Qu
cHJldmVudEV4dGVuc2lvbnMKKworICAgIFNpbGVudGx5IGZhaWxzIG9uIGFsbCBsZWdhY3kgZW5n
aW5lcy4gIFRoaXMgc2hvdWxkIGJlCisgICAgZmluZSB1bmxlc3MgeW91IGFyZSBkZXBlbmRpbmcg
b24gdGhlIHNhZmV0eSBhbmQgc2VjdXJpdHkKKyAgICBwcm92aXNpb25zIG9mIHRoaXMgbWV0aG9k
LCB3aGljaCB5b3UgY2Fubm90IHBvc3NpYmx5CisgICAgb2J0YWluIGluIGxlZ2FjeSBlbmdpbmVz
LgorCkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1w
bGUtYXBwL2NvbXBvbmVudHMvZXM1LXNoaW0vY29tcG9uZW50Lmpzb24KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
UGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21w
b25lbnRzL2VzNS1zaGltL2NvbXBvbmVudC5qc29uCShyZXZpc2lvbiAwKQorKysgUGVyZm9ybWFu
Y2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2Vz
NS1zaGltL2NvbXBvbmVudC5qc29uCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTQgQEAKK3sK
KyAgIm5hbWUiOiAiZXM1LXNoaW0iLAorICAidmVyc2lvbiI6ICIyLjAuMCIsCisgICJkZXNjcmlw
dGlvbiI6ICJFUzUgYXMgaW1wbGVtZW50YWJsZSBvbiBwcmV2aW91cyBlbmdpbmVzIiwKKyAgImhv
bWVwYWdlIjogImh0dHA6Ly9naXRodWIuY29tL2tyaXNrb3dhbC9lczUtc2hpbS8iLAorICAiY29u
dHJpYnV0b3JzIjogWworICAgIHsKKyAgICAgICJuYW1lIjogIktyaXMgS293YWwiLAorICAgICAg
ImVtYWlsIjogImtyaXNAY2l4YXIuY29tIiwKKyAgICAgICJ1cmwiOiAiaHR0cDovL2dpdGh1Yi5j
b20va3Jpc2tvd2FsLyIKKyAgICB9LAorICAgIHsKKyAgICAgICJuYW1lIjogIlNhbWkgU2FtaHVy
aSIsCisgICAgICAiZW1haWwiOiAic2FtaS5zYW1odXJpQGdtYWlsLmNvbSIsCisgICAgICAidXJs
IjogImh0dHA6Ly9zYW1odXJpLm5ldC8iCisgICAgfSwKKyAgICB7CisgICAgICAibmFtZSI6ICJG
bG9yaWFuIFNjaMOkZmVyIiwKKyAgICAgICJlbWFpbCI6ICJmbG9yaWFuLnNjaGFlZmVyQGdtYWls
LmNvbSIsCisgICAgICAidXJsIjogImh0dHA6Ly9naXRodWIuY29tL2ZzY2hhZWZlciIKKyAgICB9
LAorICAgIHsKKyAgICAgICJuYW1lIjogIklyYWtsaSBHb3phbGlzaHZpbGkiLAorICAgICAgImVt
YWlsIjogInJmb2JpY0BnbWFpbC5jb20iLAorICAgICAgInVybCI6ICJodHRwOi8vamVkaXRvb2xr
aXQuY29tIgorICAgIH0sCisgICAgeworICAgICAgIm5hbWUiOiAiS2l0IENhbWJyaWRnZSIsCisg
ICAgICAiZW1haWwiOiAia2l0Y2FtYnJpZGdlQGdtYWlsLmNvbSIsCisgICAgICAidXJsIjogImh0
dHA6Ly9raXRjYW1icmlkZ2UuZ2l0aHViLmNvbSIKKyAgICB9CisgIF0sCisgICJidWdzIjogewor
ICAgICJtYWlsIjogImtyaXNAY2l4YXIuY29tIiwKKyAgICAidXJsIjogImh0dHA6Ly9naXRodWIu
Y29tL2tyaXNrb3dhbC9lczUtc2hpbS9pc3N1ZXMiCisgIH0sCisgICJsaWNlbnNlcyI6IFsKKyAg
ICB7CisgICAgICAidHlwZSI6ICJNSVQiLAorICAgICAgInVybCI6ICJodHRwOi8vZ2l0aHViLmNv
bS9rcmlza293YWwvZXM1LXNoaW0vcmF3L21hc3Rlci9MSUNFTlNFIgorICAgIH0KKyAgXSwKKyAg
Im1haW4iOiAiZXM1LXNoaW0uanMiLAorICAicmVwb3NpdG9yeSI6IHsKKyAgICAidHlwZSI6ICJn
aXQiLAorICAgICJ1cmwiOiAiZ2l0Oi8vZ2l0aHViLmNvbS9rcmlza293YWwvZXM1LXNoaW0uZ2l0
IgorICB9LAorICAiZW5naW5lcyI6IHsKKyAgICAibm9kZSI6ICI+PTAuMi4wIgorICB9LAorICAi
cmVhZG1lIjogIlxuYGVzNS1zaGltLmpzYCBhbmQgYGVzNS1zaGltLm1pbi5qc2AgbW9ua2V5LXBh
dGNoIGEgSmF2YVNjcmlwdCBjb250ZXh0IHRvXG5jb250YWluIGFsbCBFY21hU2NyaXB0IDUgbWV0
aG9kcyB0aGF0IGNhbiBiZSBmYWl0aGZ1bGx5IGVtdWxhdGVkIHdpdGggYVxubGVnYWN5IEphdmFT
Y3JpcHQgZW5naW5lLlxuXG5gZXM1LXNoYW0uanNgIGFuZCBgZXM1LXNoYW0ubWluLmpzYCBtb25r
ZXktcGF0Y2ggb3RoZXIgRVM1IG1ldGhvZHMgYXNcbmNsb3NlbHkgYXMgcG9zc2libGUuICBGb3Ig
dGhlc2UgbWV0aG9kcywgYXMgY2xvc2VseSBhcyBwb3NzaWJsZSB0byBFUzVcbmlzIG5vdCB2ZXJ5
IGNsb3NlLiAgTWFueSBvZiB0aGVzZSBzaGFtcyBhcmUgaW50ZW5kZWQgb25seSB0byBhbGxvdyBj
b2RlXG50byBiZSB3cml0dGVuIHRvIEVTNSB3aXRob3V0IGNhdXNpbmcgcnVuLXRpbWUgZXJyb3Jz
IGluIG9sZGVyIGVuZ2luZXMuXG5JbiBtYW55IGNhc2VzLCB0aGlzIG1lYW5zIHRoYXQgdGhlc2Ug
c2hhbXMgY2F1c2UgbWFueSBFUzUgbWV0aG9kcyB0b1xuc2lsZW50bHkgZmFpbC4gIERlY2lkZSBj
YXJlZnVsbHkgd2hldGhlciB0aGlzIGlzIHdoYXQgeW91IHdhbnQuXG5cblxuIyMgVGVzdHNcblxu
VGhlIHRlc3RzIGFyZSB3cml0dGVuIHdpdGggdGhlIEphc21pbmUgQkREIHRlc3QgZnJhbWV3b3Jr
LlxuVG8gcnVuIHRoZSB0ZXN0cywgbmF2aWdhdGUgdG8gPHJvb3QtZm9sZGVyPi90ZXN0cy8uIFxu
XG5JbiBvcmRlciB0byBydW4gYWdhaW5zdCB0aGUgc2hpbS1jb2RlLCB0aGUgdGVzdHMgYXR0ZW1w
dCB0byBraWxsIHRoZSBjdXJyZW50IFxuaW1wbGVtZW50YXRpb24gb2YgdGhlIG1pc3NpbmcgbWV0
aG9kcy4gVGhpcyBoYXBwZW5zIGluIDxyb290LWZvbGRlcj4vdGVzdHMvaGVscGVycy9oLWtpbGwu
anMuXG5TbyBpbiBvcmRlciB0byBydW4gdGhlIHRlc3RzIGFnYWluc3QgdGhlIGJ1aWxkLWluIG1l
dGhvZHMsIGludmFsaWRhdGUgdGhhdCBmaWxlIHNvbWVob3dcbihjb21tZW50LW91dCwgZGVsZXRl
IHRoZSBmaWxlLCBkZWxldGUgdGhlIHNjcmlwdC10YWcsIGV0Yy4pLlxuXG4jIyBTaGltc1xuXG4j
IyMgQ29tcGxldGUgdGVzdHMgIyMjXG5cbiogQXJyYXkucHJvdG90eXBlLmV2ZXJ5XG4qIEFycmF5
LnByb3RvdHlwZS5maWx0ZXJcbiogQXJyYXkucHJvdG90eXBlLmZvckVhY2hcbiogQXJyYXkucHJv
dG90eXBlLmluZGV4T2ZcbiogQXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mXG4qIEFycmF5LnBy
b3RvdHlwZS5tYXBcbiogQXJyYXkucHJvdG90eXBlLnNvbWVcbiogQXJyYXkucHJvdG90eXBlLnJl
ZHVjZVxuKiBBcnJheS5wcm90b3R5cGUucmVkdWNlUmlnaHRcbiogQXJyYXkuaXNBcnJheVxuKiBE
YXRlLm5vd1xuKiBEYXRlLnByb3RvdHlwZS50b0pTT05cbiogRnVuY3Rpb24ucHJvdG90eXBlLmJp
bmRcbiAgICAqIC8hXFwgQ2F2ZWF0OiB0aGUgYm91bmQgZnVuY3Rpb24ncyBsZW5ndGggaXMgYWx3
YXlzIDAuXG4gICAgKiAvIVxcIENhdmVhdDogdGhlIGJvdW5kIGZ1bmN0aW9uIGhhcyBhIHByb3Rv
dHlwZSBwcm9wZXJ0eS5cbiAgICAqIC8hXFwgQ2F2ZWF0OiBib3VuZCBmdW5jdGlvbnMgZG8gbm90
IHRyeSB0b28gaGFyZCB0byBrZWVwIHlvdVxuICAgICAgZnJvbSBtYW5pcHVsYXRpbmcgdGhlaXIg
YGBhcmd1bWVudHNgYCBhbmQgYGBjYWxsZXJgYCBwcm9wZXJ0aWVzLlxuICAgICogLyFcXCBDYXZl
YXQ6IGJvdW5kIGZ1bmN0aW9ucyBkb24ndCBoYXZlIGNoZWNrcyBpbiBgYGNhbGxgYCBhbmRcbiAg
ICAgIGBgYXBwbHlgYCB0byBhdm9pZCBleGVjdXRpbmcgYXMgYSBjb25zdHJ1Y3Rvci5cbiogT2Jq
ZWN0LmtleXNcbiogU3RyaW5nLnByb3RvdHlwZS50cmltXG5cbiMjIyBVbnRlc3RlZCAjIyNcblxu
KiBEYXRlLnBhcnNlIChmb3IgSVNPIHBhcnNpbmcpXG4qIERhdGUucHJvdG90eXBlLnRvSVNPU3Ry
aW5nXG5cbiMjIFNoYW1zXG5cbiogLz9cXCBPYmplY3QuY3JlYXRlXG5cbiAgICBGb3IgdGhlIGNh
c2Ugb2Ygc2ltcGx5IFwiYmVnZXR0aW5nXCIgYW4gb2JqZWN0IHRoYXRcbiAgICBpbmhlcml0cyBw
cm90b3R5cGljYWxseSBmcm9tIGFub3RoZXIsIHRoaXMgc2hvdWxkIHdvcmtcbiAgICBmaW5lIGFj
cm9zcyBsZWdhY3kgZW5naW5lcy5cblxuICAgIC8hXFwgT2JqZWN0LmNyZWF0ZShudWxsKSB3aWxs
IHdvcmsgb25seSBpbiBicm93c2VycyB0aGF0XG4gICAgc3VwcG9ydCBwcm90b3R5cGUgYXNzaWdu
bWVudC4gIFRoaXMgY3JlYXRlcyBhbiBvYmplY3RcbiAgICB0aGF0IGRvZXMgbm90IGhhdmUgYW55
IHByb3BlcnRpZXMgaW5oZXJpdGVkIGZyb21cbiAgICBPYmplY3QucHJvdG90eXBlLiAgSXQgd2ls
bCBzaWxlbnRseSBmYWlsIG90aGVyd2lzZS5cblxuICAgIC8hXFwgVGhlIHNlY29uZCBhcmd1bWVu
dCBpcyBwYXNzZWQgdG9cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyB3aGljaCB3aWxsIHBy
b2JhYmx5IGZhaWxcbiAgICBzaWxlbnRseS5cblxuKiAvP1xcIE9iamVjdC5nZXRQcm90b3R5cGVP
ZlxuXG4gICAgVGhpcyB3aWxsIHJldHVybiBcInVuZGVmaW5lZFwiIGluIHNvbWUgY2FzZXMuICBJ
dCB1c2VzXG4gICAgX19wcm90b19fIGlmIGl0J3MgYXZhaWxhYmxlLiAgRmFpbGluZyB0aGF0LCBp
dCB1c2VzXG4gICAgY29uc3RydWN0b3IucHJvdG90eXBlLCB3aGljaCBkZXBlbmRzIG9uIHRoZSBj
b25zdHJ1Y3RvclxuICAgIHByb3BlcnR5IG9mIHRoZSBvYmplY3QncyBwcm90b3R5cGUgaGF2aW5n
IG5vdCBiZWVuXG4gICAgcmVwbGFjZWQuICBJZiB5b3VyIG9iamVjdCB3YXMgY3JlYXRlZCBsaWtl
IHRoaXMsIGl0XG4gICAgd29uJ3Qgd29yazpcblxuICAgICAgICBmdW5jdGlvbiBGb28oKSB7XG4g
ICAgICAgIH1cbiAgICAgICAgRm9vLnByb3RvdHlwZSA9IHt9O1xuXG4gICAgQmVjYXVzZSB0aGUg
cHJvdG90eXBlIHJlYXNzaWdubWVudCBkZXN0cm95cyB0aGVcbiAgICBjb25zdHJ1Y3RvciBwcm9w
ZXJ0eS5cblxuICAgIFRoaXMgd2lsbCB3b3JrIGZvciBhbGwgb2JqZWN0cyB0aGF0IHdlcmUgY3Jl
YXRlZCB1c2luZ1xuICAgIGBPYmplY3QuY3JlYXRlYCBpbXBsZW1lbnRlZCB3aXRoIHRoaXMgbGli
cmFyeS5cblxuKiAvIVxcIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzXG5cbiAgICBUaGlzIG1l
dGhvZCB1c2VzIE9iamVjdC5rZXlzLCBzbyBpdCB3aWxsIG5vdCBiZSBhY2N1cmF0ZVxuICAgIG9u
IGxlZ2FjeSBlbmdpbmVzLlxuXG4qIE9iamVjdC5pc1NlYWxlZFxuXG4gICAgUmV0dXJucyBcImZh
bHNlXCIgaW4gYWxsIGxlZ2FjeSBlbmdpbmVzIGZvciBhbGwgb2JqZWN0cyxcbiAgICB3aGljaCBp
cyBjb252ZW5pZW50bHkgZ3VhcmFudGVlZCB0byBiZSBhY2N1cmF0ZS5cblxuKiBPYmplY3QuaXNG
cm96ZW5cblxuICAgIFJldHVybnMgXCJmYWxzZVwiIGluIGFsbCBsZWdhY3kgZW5naW5lcyBmb3Ig
YWxsIG9iamVjdHMsXG4gICAgd2hpY2ggaXMgY29udmVuaWVudGx5IGd1YXJhbnRlZWQgdG8gYmUg
YWNjdXJhdGUuXG5cbiogT2JqZWN0LmlzRXh0ZW5zaWJsZVxuXG4gICAgV29ya3MgbGlrZSBhIGNo
YXJtLCBieSB0cnlpbmcgdmVyeSBoYXJkIHRvIGV4dGVuZCB0aGVcbiAgICBvYmplY3QgdGhlbiBy
ZWRhY3RpbmcgdGhlIGV4dGVuc2lvbi5cblxuIyMjIEZhaWwgc2lsZW50bHlcblxuKiAvIVxcIE9i
amVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JcbiAgICBcbiAgICBUaGUgYmVoYXZpb3Igb2Yg
dGhpcyBzaGltIGRvZXMgbm90IGNvbmZvcm0gdG8gRVM1LiAgSXRcbiAgICBzaG91bGQgcHJvYmFi
bHkgbm90IGJlIHVzZWQgYXQgdGhpcyB0aW1lLCB1bnRpbCBpdHNcbiAgICBiZWhhdmlvciBoYXMg
YmVlbiByZXZpZXdlZCBhbmQgYmVlbiBjb25maXJtZWQgdG8gYmVcbiAgICB1c2VmdWwgaW4gbGVn
YWN5IGVuZ2luZXMuXG5cbiogLyFcXCBPYmplY3QuZGVmaW5lUHJvcGVydHlcblxuICAgIFRoaXMg
bWV0aG9kIHdpbGwgc2lsZW50bHkgZmFpbCB0byBzZXQgXCJ3cml0YWJsZVwiLFxuICAgIFwiZW51
bWVyYWJsZVwiLCBhbmQgXCJjb25maWd1cmFibGVcIiBwcm9wZXJ0aWVzLlxuICAgIFxuICAgIFBy
b3ZpZGluZyBhIGdldHRlciBvciBzZXR0ZXIgd2l0aCBcImdldFwiIG9yIFwic2V0XCIgb24gYVxu
ICAgIGRlc2NyaXB0b3Igd2lsbCBzaWxlbnRseSBmYWlsIG9uIGVuZ2luZXMgdGhhdCBsYWNrXG4g
ICAgXCJfX2RlZmluZUdldHRlcl9fXCIgYW5kIFwiX19kZWZpbmVTZXR0ZXJfX1wiLCB3aGljaCBp
bmNsdWRlXG4gICAgYWxsIHZlcnNpb25zIG9mIElFIHVwIHRvIHZlcnNpb24gOCBzbyBmYXIuXG5c
biAgICBJRSA4IHByb3ZpZGVzIGEgdmVyc2lvbiBvZiB0aGlzIG1ldGhvZCBidXQgaXQgb25seSB3
b3Jrc1xuICAgIG9uIERPTSBvYmplY3RzLiAgVGh1cywgdGhlIHNoaW0gd2lsbCBub3QgZ2V0IGlu
c3RhbGxlZFxuICAgIGFuZCBhdHRlbXB0cyB0byBzZXQgXCJ2YWx1ZVwiIHByb3BlcnRpZXMgd2ls
bCBmYWlsXG4gICAgc2lsZW50bHkgb24gbm9uLURPTSBvYmplY3RzLlxuXG4gICAgaHR0cHM6Ly9n
aXRodWIuY29tL2tyaXNrb3dhbC9lczUtc2hpbS9pc3N1ZXMjaXNzdWUvNVxuXG4qIC8hXFwgT2Jq
ZWN0LmRlZmluZVByb3BlcnRpZXNcblxuICAgIFRoaXMgdXNlcyB0aGUgT2JqZWN0LmRlZmluZVBy
b3BlcnR5IHNoaW1cblxuKiBPYmplY3Quc2VhbFxuXG4gICAgU2lsZW50bHkgZmFpbHMgb24gYWxs
IGxlZ2FjeSBlbmdpbmVzLiAgVGhpcyBzaG91bGQgYmVcbiAgICBmaW5lIHVubGVzcyB5b3UgYXJl
IGRlcGVuZGluZyBvbiB0aGUgc2FmZXR5IGFuZCBzZWN1cml0eVxuICAgIHByb3Zpc2lvbnMgb2Yg
dGhpcyBtZXRob2QsIHdoaWNoIHlvdSBjYW5ub3QgcG9zc2libHlcbiAgICBvYnRhaW4gaW4gbGVn
YWN5IGVuZ2luZXMuXG5cbiogT2JqZWN0LmZyZWV6ZVxuXG4gICAgU2lsZW50bHkgZmFpbHMgb24g
YWxsIGxlZ2FjeSBlbmdpbmVzLiAgVGhpcyBzaG91bGQgYmVcbiAgICBmaW5lIHVubGVzcyB5b3Ug
YXJlIGRlcGVuZGluZyBvbiB0aGUgc2FmZXR5IGFuZCBzZWN1cml0eVxuICAgIHByb3Zpc2lvbnMg
b2YgdGhpcyBtZXRob2QsIHdoaWNoIHlvdSBjYW5ub3QgcG9zc2libHlcbiAgICBvYnRhaW4gaW4g
bGVnYWN5IGVuZ2luZXMuXG5cbiogT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zXG5cbiAgICBTaWxl
bnRseSBmYWlscyBvbiBhbGwgbGVnYWN5IGVuZ2luZXMuICBUaGlzIHNob3VsZCBiZVxuICAgIGZp
bmUgdW5sZXNzIHlvdSBhcmUgZGVwZW5kaW5nIG9uIHRoZSBzYWZldHkgYW5kIHNlY3VyaXR5XG4g
ICAgcHJvdmlzaW9ucyBvZiB0aGlzIG1ldGhvZCwgd2hpY2ggeW91IGNhbm5vdCBwb3NzaWJseVxu
ICAgIG9idGFpbiBpbiBsZWdhY3kgZW5naW5lcy5cblxuIiwKKyAgInJlYWRtZUZpbGVuYW1lIjog
IlJFQURNRS5tZCIsCisgICJfaWQiOiAiZXM1LXNoaW1AMi4wLjAiCit9ClwgTm8gbmV3bGluZSBh
dCBlbmQgb2YgZmlsZQpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGln
aHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2VzNS1zaGltL2VzNS1zaGFtLmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1h
cHAvY29tcG9uZW50cy9lczUtc2hpbS9lczUtc2hhbS5qcwkocmV2aXNpb24gMCkKKysrIFBlcmZv
cm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50
cy9lczUtc2hpbS9lczUtc2hhbS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMyNiBAQAor
Ly8gQ29weXJpZ2h0IDIwMDktMjAxMiBieSBjb250cmlidXRvcnMsIE1JVCBMaWNlbnNlCisvLyB2
aW06IHRzPTQgc3RzPTQgc3c9NCBleHBhbmR0YWIKKworLy8gTW9kdWxlIHN5c3RlbXMgbWFnaWMg
ZGFuY2UKKyhmdW5jdGlvbiAoZGVmaW5pdGlvbikgeworICAgIC8vIFJlcXVpcmVKUworICAgIGlm
ICh0eXBlb2YgZGVmaW5lID09ICJmdW5jdGlvbiIpIHsKKyAgICAgICAgZGVmaW5lKGRlZmluaXRp
b24pOworICAgIC8vIFlVSTMKKyAgICB9IGVsc2UgaWYgKHR5cGVvZiBZVUkgPT0gImZ1bmN0aW9u
IikgeworICAgICAgICBZVUkuYWRkKCJlczUtc2hhbSIsIGRlZmluaXRpb24pOworICAgIC8vIENv
bW1vbkpTIGFuZCA8c2NyaXB0PgorICAgIH0gZWxzZSB7CisgICAgICAgIGRlZmluaXRpb24oKTsK
KyAgICB9Cit9KShmdW5jdGlvbiAoKSB7CisKKy8vIEVTNSAxNS4yLjMuMgorLy8gaHR0cDovL2Vz
NS5naXRodWIuY29tLyN4MTUuMi4zLjIKK2lmICghT2JqZWN0LmdldFByb3RvdHlwZU9mKSB7Cisg
ICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2tyaXNrb3dhbC9lczUtc2hpbS9pc3N1ZXMjaXNzdWUv
MgorICAgIC8vIGh0dHA6Ly9lam9obi5vcmcvYmxvZy9vYmplY3RnZXRwcm90b3R5cGVvZi8KKyAg
ICAvLyByZWNvbW1lbmRlZCBieSBmc2NoYWVmZXIgb24gZ2l0aHViCisgICAgT2JqZWN0LmdldFBy
b3RvdHlwZU9mID0gZnVuY3Rpb24gZ2V0UHJvdG90eXBlT2Yob2JqZWN0KSB7CisgICAgICAgIHJl
dHVybiBvYmplY3QuX19wcm90b19fIHx8ICgKKyAgICAgICAgICAgIG9iamVjdC5jb25zdHJ1Y3Rv
cgorICAgICAgICAgICAgICAgID8gb2JqZWN0LmNvbnN0cnVjdG9yLnByb3RvdHlwZQorICAgICAg
ICAgICAgICAgIDogcHJvdG90eXBlT2ZPYmplY3QKKyAgICAgICAgKTsKKyAgICB9OworfQorCisv
LyBFUzUgMTUuMi4zLjMKKy8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjIuMy4zCitpZiAo
IU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IpIHsKKyAgICB2YXIgRVJSX05PTl9PQkpF
Q1QgPSAiT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvciBjYWxsZWQgb24gYSBub24tb2Jq
ZWN0OiAiOworCisgICAgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGZ1bmN0aW9u
IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHByb3BlcnR5KSB7CisgICAgICAgIGlm
ICgodHlwZW9mIG9iamVjdCAhPSAib2JqZWN0IiAmJiB0eXBlb2Ygb2JqZWN0ICE9ICJmdW5jdGlv
biIpIHx8IG9iamVjdCA9PT0gbnVsbCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJv
cihFUlJfTk9OX09CSkVDVCArIG9iamVjdCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gSWYgb2Jq
ZWN0IGRvZXMgbm90IG93bnMgcHJvcGVydHkgcmV0dXJuIHVuZGVmaW5lZCBpbW1lZGlhdGVseS4K
KyAgICAgICAgaWYgKCFvd25zKG9iamVjdCwgcHJvcGVydHkpKSB7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBJZiBvYmplY3QgaGFzIGEgcHJvcGVydHkgdGhl
biBpdCdzIGZvciBzdXJlIGJvdGggYGVudW1lcmFibGVgIGFuZAorICAgICAgICAvLyBgY29uZmln
dXJhYmxlYC4KKyAgICAgICAgdmFyIGRlc2NyaXB0b3IgPSAgeyBlbnVtZXJhYmxlOiB0cnVlLCBj
b25maWd1cmFibGU6IHRydWUgfTsKKworICAgICAgICAvLyBJZiBKUyBlbmdpbmUgc3VwcG9ydHMg
YWNjZXNzb3IgcHJvcGVydGllcyB0aGVuIHByb3BlcnR5IG1heSBiZSBhCisgICAgICAgIC8vIGdl
dHRlciBvciBzZXR0ZXIuCisgICAgICAgIGlmIChzdXBwb3J0c0FjY2Vzc29ycykgeworICAgICAg
ICAgICAgLy8gVW5mb3J0dW5hdGVseSBgX19sb29rdXBHZXR0ZXJfX2Agd2lsbCByZXR1cm4gYSBn
ZXR0ZXIgZXZlbgorICAgICAgICAgICAgLy8gaWYgb2JqZWN0IGhhcyBvd24gbm9uIGdldHRlciBw
cm9wZXJ0eSBhbG9uZyB3aXRoIGEgc2FtZSBuYW1lZAorICAgICAgICAgICAgLy8gaW5oZXJpdGVk
IGdldHRlci4gVG8gYXZvaWQgbWlzYmVoYXZpb3Igd2UgdGVtcG9yYXJ5IHJlbW92ZQorICAgICAg
ICAgICAgLy8gYF9fcHJvdG9fX2Agc28gdGhhdCBgX19sb29rdXBHZXR0ZXJfX2Agd2lsbCByZXR1
cm4gZ2V0dGVyIG9ubHkKKyAgICAgICAgICAgIC8vIGlmIGl0J3Mgb3duZWQgYnkgYW4gb2JqZWN0
LgorICAgICAgICAgICAgdmFyIHByb3RvdHlwZSA9IG9iamVjdC5fX3Byb3RvX187CisgICAgICAg
ICAgICBvYmplY3QuX19wcm90b19fID0gcHJvdG90eXBlT2ZPYmplY3Q7CisKKyAgICAgICAgICAg
IHZhciBnZXR0ZXIgPSBsb29rdXBHZXR0ZXIob2JqZWN0LCBwcm9wZXJ0eSk7CisgICAgICAgICAg
ICB2YXIgc2V0dGVyID0gbG9va3VwU2V0dGVyKG9iamVjdCwgcHJvcGVydHkpOworCisgICAgICAg
ICAgICAvLyBPbmNlIHdlIGhhdmUgZ2V0dGVyIGFuZCBzZXR0ZXIgd2UgY2FuIHB1dCB2YWx1ZXMg
YmFjay4KKyAgICAgICAgICAgIG9iamVjdC5fX3Byb3RvX18gPSBwcm90b3R5cGU7CisKKyAgICAg
ICAgICAgIGlmIChnZXR0ZXIgfHwgc2V0dGVyKSB7CisgICAgICAgICAgICAgICAgaWYgKGdldHRl
cikgeworICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdG9yLmdldCA9IGdldHRlcjsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHNldHRlcikgeworICAgICAgICAgICAg
ICAgICAgICBkZXNjcmlwdG9yLnNldCA9IHNldHRlcjsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgLy8gSWYgaXQgd2FzIGFjY2Vzc29yIHByb3BlcnR5IHdlJ3JlIGRvbmUgYW5k
IHJldHVybiBoZXJlCisgICAgICAgICAgICAgICAgLy8gaW4gb3JkZXIgdG8gYXZvaWQgYWRkaW5n
IGB2YWx1ZWAgdG8gdGhlIGRlc2NyaXB0b3IuCisgICAgICAgICAgICAgICAgcmV0dXJuIGRlc2Ny
aXB0b3I7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBJZiB3ZSBnb3Qg
dGhpcyBmYXIgd2Uga25vdyB0aGF0IG9iamVjdCBoYXMgYW4gb3duIHByb3BlcnR5IHRoYXQgaXMK
KyAgICAgICAgLy8gbm90IGFuIGFjY2Vzc29yIHNvIHdlIHNldCBpdCBhcyBhIHZhbHVlIGFuZCBy
ZXR1cm4gZGVzY3JpcHRvci4KKyAgICAgICAgZGVzY3JpcHRvci52YWx1ZSA9IG9iamVjdFtwcm9w
ZXJ0eV07CisgICAgICAgIHJldHVybiBkZXNjcmlwdG9yOworICAgIH07Cit9CisKKy8vIEVTNSAx
NS4yLjMuNAorLy8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUuMi4zLjQKK2lmICghT2JqZWN0
LmdldE93blByb3BlcnR5TmFtZXMpIHsKKyAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyA9
IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMob2JqZWN0KSB7CisgICAgICAgIHJldHVybiBP
YmplY3Qua2V5cyhvYmplY3QpOworICAgIH07Cit9CisKKy8vIEVTNSAxNS4yLjMuNQorLy8gaHR0
cDovL2VzNS5naXRodWIuY29tLyN4MTUuMi4zLjUKK2lmICghT2JqZWN0LmNyZWF0ZSkgeworICAg
IE9iamVjdC5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUocHJvdG90eXBlLCBwcm9wZXJ0aWVzKSB7
CisgICAgICAgIHZhciBvYmplY3Q7CisgICAgICAgIGlmIChwcm90b3R5cGUgPT09IG51bGwpIHsK
KyAgICAgICAgICAgIG9iamVjdCA9IHsgIl9fcHJvdG9fXyI6IG51bGwgfTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIGlmICh0eXBlb2YgcHJvdG90eXBlICE9ICJvYmplY3QiKSB7Cisg
ICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigidHlwZW9mIHByb3RvdHlwZVsiKyh0
eXBlb2YgcHJvdG90eXBlKSsiXSAhPSAnb2JqZWN0JyIpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgdmFyIFR5cGUgPSBmdW5jdGlvbiAoKSB7fTsKKyAgICAgICAgICAgIFR5cGUucHJvdG90
eXBlID0gcHJvdG90eXBlOworICAgICAgICAgICAgb2JqZWN0ID0gbmV3IFR5cGUoKTsKKyAgICAg
ICAgICAgIC8vIElFIGhhcyBubyBidWlsdC1pbiBpbXBsZW1lbnRhdGlvbiBvZiBgT2JqZWN0Lmdl
dFByb3RvdHlwZU9mYAorICAgICAgICAgICAgLy8gbmVpdGhlciBgX19wcm90b19fYCwgYnV0IHRo
aXMgbWFudWFsbHkgc2V0dGluZyBgX19wcm90b19fYCB3aWxsCisgICAgICAgICAgICAvLyBndWFy
YW50ZWUgdGhhdCBgT2JqZWN0LmdldFByb3RvdHlwZU9mYCB3aWxsIHdvcmsgYXMgZXhwZWN0ZWQg
d2l0aAorICAgICAgICAgICAgLy8gb2JqZWN0cyBjcmVhdGVkIHVzaW5nIGBPYmplY3QuY3JlYXRl
YAorICAgICAgICAgICAgb2JqZWN0Ll9fcHJvdG9fXyA9IHByb3RvdHlwZTsKKyAgICAgICAgfQor
ICAgICAgICBpZiAocHJvcGVydGllcyAhPT0gdm9pZCAwKSB7CisgICAgICAgICAgICBPYmplY3Qu
ZGVmaW5lUHJvcGVydGllcyhvYmplY3QsIHByb3BlcnRpZXMpOworICAgICAgICB9CisgICAgICAg
IHJldHVybiBvYmplY3Q7CisgICAgfTsKK30KKworLy8gRVM1IDE1LjIuMy42CisvLyBodHRwOi8v
ZXM1LmdpdGh1Yi5jb20vI3gxNS4yLjMuNgorCisvLyBQYXRjaCBmb3IgV2ViS2l0IGFuZCBJRTgg
c3RhbmRhcmQgbW9kZQorLy8gRGVzaWduZWQgYnkgaGF4IDxoYXguZ2l0aHViLmNvbT4KKy8vIHJl
bGF0ZWQgaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9rcmlza293YWwvZXM1LXNoaW0vaXNzdWVz
I2lzc3VlLzUKKy8vIElFOCBSZWZlcmVuY2U6CisvLyAgICAgaHR0cDovL21zZG4ubWljcm9zb2Z0
LmNvbS9lbi11cy9saWJyYXJ5L2RkMjgyOTAwLmFzcHgKKy8vICAgICBodHRwOi8vbXNkbi5taWNy
b3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvZGQyMjk5MTYuYXNweAorLy8gV2ViS2l0IEJ1Z3M6Cisv
LyAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM2NDIzCisKK2Z1
bmN0aW9uIGRvZXNEZWZpbmVQcm9wZXJ0eVdvcmsob2JqZWN0KSB7CisgICAgdHJ5IHsKKyAgICAg
ICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iamVjdCwgInNlbnRpbmVsIiwge30pOworICAgICAg
ICByZXR1cm4gInNlbnRpbmVsIiBpbiBvYmplY3Q7CisgICAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7
CisgICAgICAgIC8vIHJldHVybnMgZmFsc3kKKyAgICB9Cit9CisKKy8vIGNoZWNrIHdoZXRoZXIg
ZGVmaW5lUHJvcGVydHkgd29ya3MgaWYgaXQncyBnaXZlbi4gT3RoZXJ3aXNlLAorLy8gc2hpbSBw
YXJ0aWFsbHkuCitpZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7CisgICAgdmFyIGRlZmluZVBy
b3BlcnR5V29ya3NPbk9iamVjdCA9IGRvZXNEZWZpbmVQcm9wZXJ0eVdvcmsoe30pOworICAgIHZh
ciBkZWZpbmVQcm9wZXJ0eVdvcmtzT25Eb20gPSB0eXBlb2YgZG9jdW1lbnQgPT0gInVuZGVmaW5l
ZCIgfHwKKyAgICAgICAgZG9lc0RlZmluZVByb3BlcnR5V29yayhkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCJkaXYiKSk7CisgICAgaWYgKCFkZWZpbmVQcm9wZXJ0eVdvcmtzT25PYmplY3QgfHwgIWRl
ZmluZVByb3BlcnR5V29ya3NPbkRvbSkgeworICAgICAgICB2YXIgZGVmaW5lUHJvcGVydHlGYWxs
YmFjayA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTsKKyAgICB9Cit9CisKK2lmICghT2JqZWN0LmRl
ZmluZVByb3BlcnR5IHx8IGRlZmluZVByb3BlcnR5RmFsbGJhY2spIHsKKyAgICB2YXIgRVJSX05P
Tl9PQkpFQ1RfREVTQ1JJUFRPUiA9ICJQcm9wZXJ0eSBkZXNjcmlwdGlvbiBtdXN0IGJlIGFuIG9i
amVjdDogIjsKKyAgICB2YXIgRVJSX05PTl9PQkpFQ1RfVEFSR0VUID0gIk9iamVjdC5kZWZpbmVQ
cm9wZXJ0eSBjYWxsZWQgb24gbm9uLW9iamVjdDogIgorICAgIHZhciBFUlJfQUNDRVNTT1JTX05P
VF9TVVBQT1JURUQgPSAiZ2V0dGVycyAmIHNldHRlcnMgY2FuIG5vdCBiZSBkZWZpbmVkICIgKwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib24gdGhpcyBqYXZhc2NyaXB0
IGVuZ2luZSI7CisKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiBkZWZpbmVQ
cm9wZXJ0eShvYmplY3QsIHByb3BlcnR5LCBkZXNjcmlwdG9yKSB7CisgICAgICAgIGlmICgodHlw
ZW9mIG9iamVjdCAhPSAib2JqZWN0IiAmJiB0eXBlb2Ygb2JqZWN0ICE9ICJmdW5jdGlvbiIpIHx8
IG9iamVjdCA9PT0gbnVsbCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihFUlJf
Tk9OX09CSkVDVF9UQVJHRVQgKyBvYmplY3QpOworICAgICAgICB9CisgICAgICAgIGlmICgodHlw
ZW9mIGRlc2NyaXB0b3IgIT0gIm9iamVjdCIgJiYgdHlwZW9mIGRlc2NyaXB0b3IgIT0gImZ1bmN0
aW9uIikgfHwgZGVzY3JpcHRvciA9PT0gbnVsbCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFR5
cGVFcnJvcihFUlJfTk9OX09CSkVDVF9ERVNDUklQVE9SICsgZGVzY3JpcHRvcik7CisgICAgICAg
IH0KKyAgICAgICAgLy8gbWFrZSBhIHZhbGlhbnQgYXR0ZW1wdCB0byB1c2UgdGhlIHJlYWwgZGVm
aW5lUHJvcGVydHkKKyAgICAgICAgLy8gZm9yIEk4J3MgRE9NIGVsZW1lbnRzLgorICAgICAgICBp
ZiAoZGVmaW5lUHJvcGVydHlGYWxsYmFjaykgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZGVmaW5lUHJvcGVydHlGYWxsYmFjay5jYWxsKE9iamVjdCwgb2JqZWN0
LCBwcm9wZXJ0eSwgZGVzY3JpcHRvcik7CisgICAgICAgICAgICB9IGNhdGNoIChleGNlcHRpb24p
IHsKKyAgICAgICAgICAgICAgICAvLyB0cnkgdGhlIHNoaW0gaWYgdGhlIHJlYWwgb25lIGRvZXNu
J3Qgd29yaworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gSWYgaXQncyBh
IGRhdGEgcHJvcGVydHkuCisgICAgICAgIGlmIChvd25zKGRlc2NyaXB0b3IsICJ2YWx1ZSIpKSB7
CisgICAgICAgICAgICAvLyBmYWlsIHNpbGVudGx5IGlmICJ3cml0YWJsZSIsICJlbnVtZXJhYmxl
Iiwgb3IgImNvbmZpZ3VyYWJsZSIKKyAgICAgICAgICAgIC8vIGFyZSByZXF1ZXN0ZWQgYnV0IG5v
dCBzdXBwb3J0ZWQKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAvLyBhbHRlcm5hdGUgYXBw
cm9hY2g6CisgICAgICAgICAgICBpZiAoIC8vIGNhbid0IGltcGxlbWVudCB0aGVzZSBmZWF0dXJl
czsgYWxsb3cgZmFsc2UgYnV0IG5vdCB0cnVlCisgICAgICAgICAgICAgICAgIShvd25zKGRlc2Ny
aXB0b3IsICJ3cml0YWJsZSIpID8gZGVzY3JpcHRvci53cml0YWJsZSA6IHRydWUpIHx8CisgICAg
ICAgICAgICAgICAgIShvd25zKGRlc2NyaXB0b3IsICJlbnVtZXJhYmxlIikgPyBkZXNjcmlwdG9y
LmVudW1lcmFibGUgOiB0cnVlKSB8fAorICAgICAgICAgICAgICAgICEob3ducyhkZXNjcmlwdG9y
LCAiY29uZmlndXJhYmxlIikgPyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA6IHRydWUpCisgICAg
ICAgICAgICApCisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoCisgICAgICAg
ICAgICAgICAgICAgICJUaGlzIGltcGxlbWVudGF0aW9uIG9mIE9iamVjdC5kZWZpbmVQcm9wZXJ0
eSBkb2VzIG5vdCAiICsKKyAgICAgICAgICAgICAgICAgICAgInN1cHBvcnQgY29uZmlndXJhYmxl
LCBlbnVtZXJhYmxlLCBvciB3cml0YWJsZS4iCisgICAgICAgICAgICAgICAgKTsKKyAgICAgICAg
ICAgICovCisKKyAgICAgICAgICAgIGlmIChzdXBwb3J0c0FjY2Vzc29ycyAmJiAobG9va3VwR2V0
dGVyKG9iamVjdCwgcHJvcGVydHkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGxvb2t1cFNldHRlcihvYmplY3QsIHByb3BlcnR5KSkpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgLy8gQXMgYWNjZXNzb3JzIGFyZSBzdXBwb3J0ZWQgb25seSBvbiBlbmdp
bmVzIGltcGxlbWVudGluZworICAgICAgICAgICAgICAgIC8vIGBfX3Byb3RvX19gIHdlIGNhbiBz
YWZlbHkgb3ZlcnJpZGUgYF9fcHJvdG9fX2Agd2hpbGUgZGVmaW5pbmcKKyAgICAgICAgICAgICAg
ICAvLyBhIHByb3BlcnR5IHRvIG1ha2Ugc3VyZSB0aGF0IHdlIGRvbid0IGhpdCBhbiBpbmhlcml0
ZWQKKyAgICAgICAgICAgICAgICAvLyBhY2Nlc3Nvci4KKyAgICAgICAgICAgICAgICB2YXIgcHJv
dG90eXBlID0gb2JqZWN0Ll9fcHJvdG9fXzsKKyAgICAgICAgICAgICAgICBvYmplY3QuX19wcm90
b19fID0gcHJvdG90eXBlT2ZPYmplY3Q7CisgICAgICAgICAgICAgICAgLy8gRGVsZXRpbmcgYSBw
cm9wZXJ0eSBhbnl3YXkgc2luY2UgZ2V0dGVyIC8gc2V0dGVyIG1heSBiZQorICAgICAgICAgICAg
ICAgIC8vIGRlZmluZWQgb24gb2JqZWN0IGl0c2VsZi4KKyAgICAgICAgICAgICAgICBkZWxldGUg
b2JqZWN0W3Byb3BlcnR5XTsKKyAgICAgICAgICAgICAgICBvYmplY3RbcHJvcGVydHldID0gZGVz
Y3JpcHRvci52YWx1ZTsKKyAgICAgICAgICAgICAgICAvLyBTZXR0aW5nIG9yaWdpbmFsIGBfX3By
b3RvX19gIGJhY2sgbm93LgorICAgICAgICAgICAgICAgIG9iamVjdC5fX3Byb3RvX18gPSBwcm90
b3R5cGU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG9iamVjdFtwcm9w
ZXJ0eV0gPSBkZXNjcmlwdG9yLnZhbHVlOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgaWYgKCFzdXBwb3J0c0FjY2Vzc29ycykgeworICAgICAgICAgICAgICAg
IHRocm93IG5ldyBUeXBlRXJyb3IoRVJSX0FDQ0VTU09SU19OT1RfU1VQUE9SVEVEKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIC8vIElmIHdlIGdvdCB0aGF0IGZhciB0aGVuIGdldHRlcnMg
YW5kIHNldHRlcnMgY2FuIGJlIGRlZmluZWQgISEKKyAgICAgICAgICAgIGlmIChvd25zKGRlc2Ny
aXB0b3IsICJnZXQiKSkgeworICAgICAgICAgICAgICAgIGRlZmluZUdldHRlcihvYmplY3QsIHBy
b3BlcnR5LCBkZXNjcmlwdG9yLmdldCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
b3ducyhkZXNjcmlwdG9yLCAic2V0IikpIHsKKyAgICAgICAgICAgICAgICBkZWZpbmVTZXR0ZXIo
b2JqZWN0LCBwcm9wZXJ0eSwgZGVzY3JpcHRvci5zZXQpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIHJldHVybiBvYmplY3Q7CisgICAgfTsKK30KKworLy8gRVM1IDE1LjIuMy43
CisvLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS4yLjMuNworaWYgKCFPYmplY3QuZGVmaW5l
UHJvcGVydGllcykgeworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzID0gZnVuY3Rpb24gZGVm
aW5lUHJvcGVydGllcyhvYmplY3QsIHByb3BlcnRpZXMpIHsKKyAgICAgICAgZm9yICh2YXIgcHJv
cGVydHkgaW4gcHJvcGVydGllcykgeworICAgICAgICAgICAgaWYgKG93bnMocHJvcGVydGllcywg
cHJvcGVydHkpICYmIHByb3BlcnR5ICE9ICJfX3Byb3RvX18iKSB7CisgICAgICAgICAgICAgICAg
T2JqZWN0LmRlZmluZVByb3BlcnR5KG9iamVjdCwgcHJvcGVydHksIHByb3BlcnRpZXNbcHJvcGVy
dHldKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gb2JqZWN0Owor
ICAgIH07Cit9CisKKy8vIEVTNSAxNS4yLjMuOAorLy8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4
MTUuMi4zLjgKK2lmICghT2JqZWN0LnNlYWwpIHsKKyAgICBPYmplY3Quc2VhbCA9IGZ1bmN0aW9u
IHNlYWwob2JqZWN0KSB7CisgICAgICAgIC8vIHRoaXMgaXMgbWlzbGVhZGluZyBhbmQgYnJlYWtz
IGZlYXR1cmUtZGV0ZWN0aW9uLCBidXQKKyAgICAgICAgLy8gYWxsb3dzICJzZWN1cmFibGUiIGNv
ZGUgdG8gImdyYWNlZnVsbHkiIGRlZ3JhZGUgdG8gd29ya2luZworICAgICAgICAvLyBidXQgaW5z
ZWN1cmUgY29kZS4KKyAgICAgICAgcmV0dXJuIG9iamVjdDsKKyAgICB9OworfQorCisvLyBFUzUg
MTUuMi4zLjkKKy8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjIuMy45CitpZiAoIU9iamVj
dC5mcmVlemUpIHsKKyAgICBPYmplY3QuZnJlZXplID0gZnVuY3Rpb24gZnJlZXplKG9iamVjdCkg
eworICAgICAgICAvLyB0aGlzIGlzIG1pc2xlYWRpbmcgYW5kIGJyZWFrcyBmZWF0dXJlLWRldGVj
dGlvbiwgYnV0CisgICAgICAgIC8vIGFsbG93cyAic2VjdXJhYmxlIiBjb2RlIHRvICJncmFjZWZ1
bGx5IiBkZWdyYWRlIHRvIHdvcmtpbmcKKyAgICAgICAgLy8gYnV0IGluc2VjdXJlIGNvZGUuCisg
ICAgICAgIHJldHVybiBvYmplY3Q7CisgICAgfTsKK30KKworLy8gZGV0ZWN0IGEgUmhpbm8gYnVn
IGFuZCBwYXRjaCBpdAordHJ5IHsKKyAgICBPYmplY3QuZnJlZXplKGZ1bmN0aW9uICgpIHt9KTsK
K30gY2F0Y2ggKGV4Y2VwdGlvbikgeworICAgIE9iamVjdC5mcmVlemUgPSAoZnVuY3Rpb24gZnJl
ZXplKGZyZWV6ZU9iamVjdCkgeworICAgICAgICByZXR1cm4gZnVuY3Rpb24gZnJlZXplKG9iamVj
dCkgeworICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmplY3QgPT0gImZ1bmN0aW9uIikgeworICAg
ICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIHJldHVybiBmcmVlemVPYmplY3Qob2JqZWN0KTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfTsKKyAgICB9KShPYmplY3QuZnJlZXplKTsKK30KKworLy8gRVM1IDE1LjIuMy4xMAor
Ly8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUuMi4zLjEwCitpZiAoIU9iamVjdC5wcmV2ZW50
RXh0ZW5zaW9ucykgeworICAgIE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyA9IGZ1bmN0aW9uIHBy
ZXZlbnRFeHRlbnNpb25zKG9iamVjdCkgeworICAgICAgICAvLyB0aGlzIGlzIG1pc2xlYWRpbmcg
YW5kIGJyZWFrcyBmZWF0dXJlLWRldGVjdGlvbiwgYnV0CisgICAgICAgIC8vIGFsbG93cyAic2Vj
dXJhYmxlIiBjb2RlIHRvICJncmFjZWZ1bGx5IiBkZWdyYWRlIHRvIHdvcmtpbmcKKyAgICAgICAg
Ly8gYnV0IGluc2VjdXJlIGNvZGUuCisgICAgICAgIHJldHVybiBvYmplY3Q7CisgICAgfTsKK30K
KworLy8gRVM1IDE1LjIuMy4xMQorLy8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUuMi4zLjEx
CitpZiAoIU9iamVjdC5pc1NlYWxlZCkgeworICAgIE9iamVjdC5pc1NlYWxlZCA9IGZ1bmN0aW9u
IGlzU2VhbGVkKG9iamVjdCkgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfTsKK30KKwor
Ly8gRVM1IDE1LjIuMy4xMgorLy8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUuMi4zLjEyCitp
ZiAoIU9iamVjdC5pc0Zyb3plbikgeworICAgIE9iamVjdC5pc0Zyb3plbiA9IGZ1bmN0aW9uIGlz
RnJvemVuKG9iamVjdCkgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfTsKK30KKworLy8g
RVM1IDE1LjIuMy4xMworLy8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUuMi4zLjEzCitpZiAo
IU9iamVjdC5pc0V4dGVuc2libGUpIHsKKyAgICBPYmplY3QuaXNFeHRlbnNpYmxlID0gZnVuY3Rp
b24gaXNFeHRlbnNpYmxlKG9iamVjdCkgeworICAgICAgICAvLyAxLiBJZiBUeXBlKE8pIGlzIG5v
dCBPYmplY3QgdGhyb3cgYSBUeXBlRXJyb3IgZXhjZXB0aW9uLgorICAgICAgICBpZiAoT2JqZWN0
KG9iamVjdCkgIT09IG9iamVjdCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigp
OyAvLyBUT0RPIG1lc3NhZ2UKKyAgICAgICAgfQorICAgICAgICAvLyAyLiBSZXR1cm4gdGhlIEJv
b2xlYW4gdmFsdWUgb2YgdGhlIFtbRXh0ZW5zaWJsZV1dIGludGVybmFsIHByb3BlcnR5IG9mIE8u
CisgICAgICAgIHZhciBuYW1lID0gJyc7CisgICAgICAgIHdoaWxlIChvd25zKG9iamVjdCwgbmFt
ZSkpIHsKKyAgICAgICAgICAgIG5hbWUgKz0gJz8nOworICAgICAgICB9CisgICAgICAgIG9iamVj
dFtuYW1lXSA9IHRydWU7CisgICAgICAgIHZhciByZXR1cm5WYWx1ZSA9IG93bnMob2JqZWN0LCBu
YW1lKTsKKyAgICAgICAgZGVsZXRlIG9iamVjdFtuYW1lXTsKKyAgICAgICAgcmV0dXJuIHJldHVy
blZhbHVlOworICAgIH07Cit9CisKK30pOwpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2
ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2VzNS1zaGltL2VzNS1zaGFt
Lm1pbi5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2Zs
aWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvZXM1LXNoaW0vZXM1LXNoYW0ubWluLmpzCShy
ZXZpc2lvbiAwKQorKysgUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1l
eGFtcGxlLWFwcC9jb21wb25lbnRzL2VzNS1zaGltL2VzNS1zaGFtLm1pbi5qcwkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDYgQEAKKyhmdW5jdGlvbihkKXsiZnVuY3Rpb24iPT10eXBlb2YgZGVm
aW5lP2RlZmluZShkKToiZnVuY3Rpb24iPT10eXBlb2YgWVVJP1lVSS5hZGQoImVzNS1zaGFtIixk
KTpkKCl9KShmdW5jdGlvbigpe2Z1bmN0aW9uIGQoYSl7dHJ5e3JldHVybiBPYmplY3QuZGVmaW5l
UHJvcGVydHkoYSwic2VudGluZWwiLHt9KSwic2VudGluZWwiaW4gYX1jYXRjaChjKXt9fU9iamVj
dC5nZXRQcm90b3R5cGVPZnx8KE9iamVjdC5nZXRQcm90b3R5cGVPZj1mdW5jdGlvbihhKXtyZXR1
cm4gYS5fX3Byb3RvX198fChhLmNvbnN0cnVjdG9yP2EuY29uc3RydWN0b3IucHJvdG90eXBlOnBy
b3RvdHlwZU9mT2JqZWN0KX0pO09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3J8fChPYmpl
Y3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yPWZ1bmN0aW9uKGEsYyl7aWYodHlwZW9mIGEhPSJv
YmplY3QiJiZ0eXBlb2YgYSE9ImZ1bmN0aW9uInx8YT09PW51bGwpdGhyb3cgbmV3IFR5cGVFcnJv
cigiT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvciBjYWxsZWQgb24gYSBub24tb2JqZWN0
OiAiKworYSk7aWYob3ducyhhLGMpKXt2YXIgYj17ZW51bWVyYWJsZTp0cnVlLGNvbmZpZ3VyYWJs
ZTp0cnVlfTtpZihzdXBwb3J0c0FjY2Vzc29ycyl7dmFyIGQ9YS5fX3Byb3RvX187YS5fX3Byb3Rv
X189cHJvdG90eXBlT2ZPYmplY3Q7dmFyIGY9bG9va3VwR2V0dGVyKGEsYyksZT1sb29rdXBTZXR0
ZXIoYSxjKTthLl9fcHJvdG9fXz1kO2lmKGZ8fGUpe2lmKGYpYi5nZXQ9ZjtpZihlKWIuc2V0PWU7
cmV0dXJuIGJ9fWIudmFsdWU9YVtjXTtyZXR1cm4gYn19KTtPYmplY3QuZ2V0T3duUHJvcGVydHlO
YW1lc3x8KE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzPWZ1bmN0aW9uKGEpe3JldHVybiBPYmpl
Y3Qua2V5cyhhKX0pO09iamVjdC5jcmVhdGV8fChPYmplY3QuY3JlYXRlPWZ1bmN0aW9uKGEsYyl7
dmFyIGI7aWYoYT09PW51bGwpYj17X19wcm90b19fOm51bGx9O2Vsc2V7aWYodHlwZW9mIGEhPSJv
YmplY3QiKXRocm93IG5ldyBUeXBlRXJyb3IoInR5cGVvZiBwcm90b3R5cGVbIit0eXBlb2YgYSsK
KyJdICE9ICdvYmplY3QnIik7Yj1mdW5jdGlvbigpe307Yi5wcm90b3R5cGU9YTtiPW5ldyBiO2Iu
X19wcm90b19fPWF9YyE9PXZvaWQgMCYmT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoYixjKTtyZXR1
cm4gYn0pO2lmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSl7dmFyIGc9ZCh7fSksaD0idW5kZWZpbmVk
Ij09dHlwZW9mIGRvY3VtZW50fHxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpKTtpZigh
Z3x8IWgpdmFyIGU9T2JqZWN0LmRlZmluZVByb3BlcnR5fWlmKCFPYmplY3QuZGVmaW5lUHJvcGVy
dHl8fGUpT2JqZWN0LmRlZmluZVByb3BlcnR5PWZ1bmN0aW9uKGEsYyxiKXtpZih0eXBlb2YgYSE9
Im9iamVjdCImJnR5cGVvZiBhIT0iZnVuY3Rpb24ifHxhPT09bnVsbCl0aHJvdyBuZXcgVHlwZUVy
cm9yKCJPYmplY3QuZGVmaW5lUHJvcGVydHkgY2FsbGVkIG9uIG5vbi1vYmplY3Q6ICIrYSk7aWYo
dHlwZW9mIGIhPSJvYmplY3QiJiZ0eXBlb2YgYiE9ImZ1bmN0aW9uInx8Yj09PQorbnVsbCl0aHJv
dyBuZXcgVHlwZUVycm9yKCJQcm9wZXJ0eSBkZXNjcmlwdGlvbiBtdXN0IGJlIGFuIG9iamVjdDog
IitiKTtpZihlKXRyeXtyZXR1cm4gZS5jYWxsKE9iamVjdCxhLGMsYil9Y2F0Y2goZCl7fWlmKG93
bnMoYiwidmFsdWUiKSlpZihzdXBwb3J0c0FjY2Vzc29ycyYmKGxvb2t1cEdldHRlcihhLGMpfHxs
b29rdXBTZXR0ZXIoYSxjKSkpe3ZhciBmPWEuX19wcm90b19fO2EuX19wcm90b19fPXByb3RvdHlw
ZU9mT2JqZWN0O2RlbGV0ZSBhW2NdO2FbY109Yi52YWx1ZTthLl9fcHJvdG9fXz1mfWVsc2UgYVtj
XT1iLnZhbHVlO2Vsc2V7aWYoIXN1cHBvcnRzQWNjZXNzb3JzKXRocm93IG5ldyBUeXBlRXJyb3Io
ImdldHRlcnMgJiBzZXR0ZXJzIGNhbiBub3QgYmUgZGVmaW5lZCBvbiB0aGlzIGphdmFzY3JpcHQg
ZW5naW5lIik7b3ducyhiLCJnZXQiKSYmZGVmaW5lR2V0dGVyKGEsYyxiLmdldCk7b3ducyhiLCJz
ZXQiKSYmZGVmaW5lU2V0dGVyKGEsYyxiLnNldCl9cmV0dXJuIGF9OworT2JqZWN0LmRlZmluZVBy
b3BlcnRpZXN8fChPYmplY3QuZGVmaW5lUHJvcGVydGllcz1mdW5jdGlvbihhLGMpe2Zvcih2YXIg
YiBpbiBjKW93bnMoYyxiKSYmYiE9Il9fcHJvdG9fXyImJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShh
LGIsY1tiXSk7cmV0dXJuIGF9KTtPYmplY3Quc2VhbHx8KE9iamVjdC5zZWFsPWZ1bmN0aW9uKGEp
e3JldHVybiBhfSk7T2JqZWN0LmZyZWV6ZXx8KE9iamVjdC5mcmVlemU9ZnVuY3Rpb24oYSl7cmV0
dXJuIGF9KTt0cnl7T2JqZWN0LmZyZWV6ZShmdW5jdGlvbigpe30pfWNhdGNoKGope3ZhciBpPU9i
amVjdC5mcmVlemU7T2JqZWN0LmZyZWV6ZT1mdW5jdGlvbihhKXtyZXR1cm4gdHlwZW9mIGE9PSJm
dW5jdGlvbiI/YTppKGEpfX1PYmplY3QucHJldmVudEV4dGVuc2lvbnN8fChPYmplY3QucHJldmVu
dEV4dGVuc2lvbnM9ZnVuY3Rpb24oYSl7cmV0dXJuIGF9KTtPYmplY3QuaXNTZWFsZWR8fChPYmpl
Y3QuaXNTZWFsZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gZmFsc2V9KTsKK09iamVjdC5pc0Zyb3plbnx8
KE9iamVjdC5pc0Zyb3plbj1mdW5jdGlvbigpe3JldHVybiBmYWxzZX0pO09iamVjdC5pc0V4dGVu
c2libGV8fChPYmplY3QuaXNFeHRlbnNpYmxlPWZ1bmN0aW9uKGEpe2lmKE9iamVjdChhKSE9PWEp
dGhyb3cgbmV3IFR5cGVFcnJvcjtmb3IodmFyIGM9IiI7b3ducyhhLGMpOyljPWMrIj8iO2FbY109
dHJ1ZTt2YXIgYj1vd25zKGEsYyk7ZGVsZXRlIGFbY107cmV0dXJuIGJ9KX0pOwpJbmRleDogUGVy
Zm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25l
bnRzL2VzNS1zaGltL2VzNS1zaGltLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMv
RG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9lczUtc2hpbS9l
czUtc2hpbS5qcwkocmV2aXNpb24gMCkKKysrIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVu
Y2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9lczUtc2hpbS9lczUtc2hpbS5qcwko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc3OCBAQAorLy8gQ29weXJpZ2h0IDIwMDktMjAxMiBi
eSBjb250cmlidXRvcnMsIE1JVCBMaWNlbnNlCisvLyB2aW06IHRzPTQgc3RzPTQgc3c9NCBleHBh
bmR0YWIKKworLy8gTW9kdWxlIHN5c3RlbXMgbWFnaWMgZGFuY2UKKyhmdW5jdGlvbiAoZGVmaW5p
dGlvbikgeworICAgIC8vIFJlcXVpcmVKUworICAgIGlmICh0eXBlb2YgZGVmaW5lID09ICJmdW5j
dGlvbiIpIHsKKyAgICAgICAgZGVmaW5lKGRlZmluaXRpb24pOworICAgIC8vIFlVSTMKKyAgICB9
IGVsc2UgaWYgKHR5cGVvZiBZVUkgPT0gImZ1bmN0aW9uIikgeworICAgICAgICBZVUkuYWRkKCJl
czUiLCBkZWZpbml0aW9uKTsKKyAgICAvLyBDb21tb25KUyBhbmQgPHNjcmlwdD4KKyAgICB9IGVs
c2UgeworICAgICAgICBkZWZpbml0aW9uKCk7CisgICAgfQorfSkoZnVuY3Rpb24gKCkgeworCisv
KioKKyAqIEJyaW5ncyBhbiBlbnZpcm9ubWVudCBhcyBjbG9zZSB0byBFQ01BU2NyaXB0IDUgY29t
cGxpYW5jZQorICogYXMgaXMgcG9zc2libGUgd2l0aCB0aGUgZmFjaWxpdGllcyBvZiBlcnN0d2hp
bGUgZW5naW5lcy4KKyAqCisgKiBBbm5vdGF0ZWQgRVM1OiBodHRwOi8vZXM1LmdpdGh1Yi5jb20v
IChzcGVjaWZpYyBsaW5rcyBiZWxvdykKKyAqIEVTNSBTcGVjOiBodHRwOi8vd3d3LmVjbWEtaW50
ZXJuYXRpb25hbC5vcmcvcHVibGljYXRpb25zL2ZpbGVzL0VDTUEtU1QvRWNtYS0yNjIucGRmCisg
KiBSZXF1aXJlZCByZWFkaW5nOiBodHRwOi8vamF2YXNjcmlwdHdlYmxvZy53b3JkcHJlc3MuY29t
LzIwMTEvMTIvMDUvZXh0ZW5kaW5nLWphdmFzY3JpcHQtbmF0aXZlcy8KKyAqLworCisvLworLy8g
RnVuY3Rpb24KKy8vID09PT09PT09CisvLworCisvLyBFUy01IDE1LjMuNC41CisvLyBodHRwOi8v
ZXM1LmdpdGh1Yi5jb20vI3gxNS4zLjQuNQorCitpZiAoIUZ1bmN0aW9uLnByb3RvdHlwZS5iaW5k
KSB7CisgICAgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiBiaW5kKHRoYXQpIHsg
Ly8gLmxlbmd0aCBpcyAxCisgICAgICAgIC8vIDEuIExldCBUYXJnZXQgYmUgdGhlIHRoaXMgdmFs
dWUuCisgICAgICAgIHZhciB0YXJnZXQgPSB0aGlzOworICAgICAgICAvLyAyLiBJZiBJc0NhbGxh
YmxlKFRhcmdldCkgaXMgZmFsc2UsIHRocm93IGEgVHlwZUVycm9yIGV4Y2VwdGlvbi4KKyAgICAg
ICAgaWYgKHR5cGVvZiB0YXJnZXQgIT0gImZ1bmN0aW9uIikgeworICAgICAgICAgICAgdGhyb3cg
bmV3IFR5cGVFcnJvcigiRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQgY2FsbGVkIG9uIGluY29tcGF0
aWJsZSAiICsgdGFyZ2V0KTsKKyAgICAgICAgfQorICAgICAgICAvLyAzLiBMZXQgQSBiZSBhIG5l
dyAocG9zc2libHkgZW1wdHkpIGludGVybmFsIGxpc3Qgb2YgYWxsIG9mIHRoZQorICAgICAgICAv
LyAgIGFyZ3VtZW50IHZhbHVlcyBwcm92aWRlZCBhZnRlciB0aGlzQXJnIChhcmcxLCBhcmcyIGV0
YyksIGluIG9yZGVyLgorICAgICAgICAvLyBYWFggc2xpY2VkQXJncyB3aWxsIHN0YW5kIGluIGZv
ciAiQSIgaWYgdXNlZAorICAgICAgICB2YXIgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAx
KTsgLy8gZm9yIG5vcm1hbCBjYWxsCisgICAgICAgIC8vIDQuIExldCBGIGJlIGEgbmV3IG5hdGl2
ZSBFQ01BU2NyaXB0IG9iamVjdC4KKyAgICAgICAgLy8gMTEuIFNldCB0aGUgW1tQcm90b3R5cGVd
XSBpbnRlcm5hbCBwcm9wZXJ0eSBvZiBGIHRvIHRoZSBzdGFuZGFyZAorICAgICAgICAvLyAgIGJ1
aWx0LWluIEZ1bmN0aW9uIHByb3RvdHlwZSBvYmplY3QgYXMgc3BlY2lmaWVkIGluIDE1LjMuMy4x
LgorICAgICAgICAvLyAxMi4gU2V0IHRoZSBbW0NhbGxdXSBpbnRlcm5hbCBwcm9wZXJ0eSBvZiBG
IGFzIGRlc2NyaWJlZCBpbgorICAgICAgICAvLyAgIDE1LjMuNC41LjEuCisgICAgICAgIC8vIDEz
LiBTZXQgdGhlIFtbQ29uc3RydWN0XV0gaW50ZXJuYWwgcHJvcGVydHkgb2YgRiBhcyBkZXNjcmli
ZWQgaW4KKyAgICAgICAgLy8gICAxNS4zLjQuNS4yLgorICAgICAgICAvLyAxNC4gU2V0IHRoZSBb
W0hhc0luc3RhbmNlXV0gaW50ZXJuYWwgcHJvcGVydHkgb2YgRiBhcyBkZXNjcmliZWQgaW4KKyAg
ICAgICAgLy8gICAxNS4zLjQuNS4zLgorICAgICAgICB2YXIgYm91bmQgPSBmdW5jdGlvbiAoKSB7
CisKKyAgICAgICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgYm91bmQpIHsKKyAgICAgICAgICAg
ICAgICAvLyAxNS4zLjQuNS4yIFtbQ29uc3RydWN0XV0KKyAgICAgICAgICAgICAgICAvLyBXaGVu
IHRoZSBbW0NvbnN0cnVjdF1dIGludGVybmFsIG1ldGhvZCBvZiBhIGZ1bmN0aW9uIG9iamVjdCwK
KyAgICAgICAgICAgICAgICAvLyBGIHRoYXQgd2FzIGNyZWF0ZWQgdXNpbmcgdGhlIGJpbmQgZnVu
Y3Rpb24gaXMgY2FsbGVkIHdpdGggYQorICAgICAgICAgICAgICAgIC8vIGxpc3Qgb2YgYXJndW1l
bnRzIEV4dHJhQXJncywgdGhlIGZvbGxvd2luZyBzdGVwcyBhcmUgdGFrZW46CisgICAgICAgICAg
ICAgICAgLy8gMS4gTGV0IHRhcmdldCBiZSB0aGUgdmFsdWUgb2YgRidzIFtbVGFyZ2V0RnVuY3Rp
b25dXQorICAgICAgICAgICAgICAgIC8vICAgaW50ZXJuYWwgcHJvcGVydHkuCisgICAgICAgICAg
ICAgICAgLy8gMi4gSWYgdGFyZ2V0IGhhcyBubyBbW0NvbnN0cnVjdF1dIGludGVybmFsIG1ldGhv
ZCwgYQorICAgICAgICAgICAgICAgIC8vICAgVHlwZUVycm9yIGV4Y2VwdGlvbiBpcyB0aHJvd24u
CisgICAgICAgICAgICAgICAgLy8gMy4gTGV0IGJvdW5kQXJncyBiZSB0aGUgdmFsdWUgb2YgRidz
IFtbQm91bmRBcmdzXV0gaW50ZXJuYWwKKyAgICAgICAgICAgICAgICAvLyAgIHByb3BlcnR5Lgor
ICAgICAgICAgICAgICAgIC8vIDQuIExldCBhcmdzIGJlIGEgbmV3IGxpc3QgY29udGFpbmluZyB0
aGUgc2FtZSB2YWx1ZXMgYXMgdGhlCisgICAgICAgICAgICAgICAgLy8gICBsaXN0IGJvdW5kQXJn
cyBpbiB0aGUgc2FtZSBvcmRlciBmb2xsb3dlZCBieSB0aGUgc2FtZQorICAgICAgICAgICAgICAg
IC8vICAgdmFsdWVzIGFzIHRoZSBsaXN0IEV4dHJhQXJncyBpbiB0aGUgc2FtZSBvcmRlci4KKyAg
ICAgICAgICAgICAgICAvLyA1LiBSZXR1cm4gdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0Nv
bnN0cnVjdF1dIGludGVybmFsCisgICAgICAgICAgICAgICAgLy8gICBtZXRob2Qgb2YgdGFyZ2V0
IHByb3ZpZGluZyBhcmdzIGFzIHRoZSBhcmd1bWVudHMuCisKKyAgICAgICAgICAgICAgICB2YXIg
RiA9IGZ1bmN0aW9uKCl7fTsKKyAgICAgICAgICAgICAgICBGLnByb3RvdHlwZSA9IHRhcmdldC5w
cm90b3R5cGU7CisgICAgICAgICAgICAgICAgdmFyIHNlbGYgPSBuZXcgRjsKKworICAgICAgICAg
ICAgICAgIHZhciByZXN1bHQgPSB0YXJnZXQuYXBwbHkoCisgICAgICAgICAgICAgICAgICAgIHNl
bGYsCisgICAgICAgICAgICAgICAgICAgIGFyZ3MuY29uY2F0KHNsaWNlLmNhbGwoYXJndW1lbnRz
KSkKKyAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgIGlmIChPYmplY3QocmVzdWx0
KSA9PT0gcmVzdWx0KSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmOworCisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIDE1LjMuNC41LjEgW1tDYWxsXV0KKyAgICAg
ICAgICAgICAgICAvLyBXaGVuIHRoZSBbW0NhbGxdXSBpbnRlcm5hbCBtZXRob2Qgb2YgYSBmdW5j
dGlvbiBvYmplY3QsIEYsCisgICAgICAgICAgICAgICAgLy8gd2hpY2ggd2FzIGNyZWF0ZWQgdXNp
bmcgdGhlIGJpbmQgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggYQorICAgICAgICAgICAgICAgIC8v
IHRoaXMgdmFsdWUgYW5kIGEgbGlzdCBvZiBhcmd1bWVudHMgRXh0cmFBcmdzLCB0aGUgZm9sbG93
aW5nCisgICAgICAgICAgICAgICAgLy8gc3RlcHMgYXJlIHRha2VuOgorICAgICAgICAgICAgICAg
IC8vIDEuIExldCBib3VuZEFyZ3MgYmUgdGhlIHZhbHVlIG9mIEYncyBbW0JvdW5kQXJnc11dIGlu
dGVybmFsCisgICAgICAgICAgICAgICAgLy8gICBwcm9wZXJ0eS4KKyAgICAgICAgICAgICAgICAv
LyAyLiBMZXQgYm91bmRUaGlzIGJlIHRoZSB2YWx1ZSBvZiBGJ3MgW1tCb3VuZFRoaXNdXSBpbnRl
cm5hbAorICAgICAgICAgICAgICAgIC8vICAgcHJvcGVydHkuCisgICAgICAgICAgICAgICAgLy8g
My4gTGV0IHRhcmdldCBiZSB0aGUgdmFsdWUgb2YgRidzIFtbVGFyZ2V0RnVuY3Rpb25dXSBpbnRl
cm5hbAorICAgICAgICAgICAgICAgIC8vICAgcHJvcGVydHkuCisgICAgICAgICAgICAgICAgLy8g
NC4gTGV0IGFyZ3MgYmUgYSBuZXcgbGlzdCBjb250YWluaW5nIHRoZSBzYW1lIHZhbHVlcyBhcyB0
aGUKKyAgICAgICAgICAgICAgICAvLyAgIGxpc3QgYm91bmRBcmdzIGluIHRoZSBzYW1lIG9yZGVy
IGZvbGxvd2VkIGJ5IHRoZSBzYW1lCisgICAgICAgICAgICAgICAgLy8gICB2YWx1ZXMgYXMgdGhl
IGxpc3QgRXh0cmFBcmdzIGluIHRoZSBzYW1lIG9yZGVyLgorICAgICAgICAgICAgICAgIC8vIDUu
IFJldHVybiB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIFtbQ2FsbF1dIGludGVybmFsIG1ldGhv
ZAorICAgICAgICAgICAgICAgIC8vICAgb2YgdGFyZ2V0IHByb3ZpZGluZyBib3VuZFRoaXMgYXMg
dGhlIHRoaXMgdmFsdWUgYW5kCisgICAgICAgICAgICAgICAgLy8gICBwcm92aWRpbmcgYXJncyBh
cyB0aGUgYXJndW1lbnRzLgorCisgICAgICAgICAgICAgICAgLy8gZXF1aXY6IHRhcmdldC5jYWxs
KHRoaXMsIC4uLmJvdW5kQXJncywgLi4uYXJncykKKyAgICAgICAgICAgICAgICByZXR1cm4gdGFy
Z2V0LmFwcGx5KAorICAgICAgICAgICAgICAgICAgICB0aGF0LAorICAgICAgICAgICAgICAgICAg
ICBhcmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykpCisgICAgICAgICAgICAgICAgKTsK
KworICAgICAgICAgICAgfQorCisgICAgICAgIH07CisgICAgICAgIC8vIFhYWCBib3VuZC5sZW5n
dGggaXMgbmV2ZXIgd3JpdGFibGUsIHNvIGRvbid0IGV2ZW4gdHJ5CisgICAgICAgIC8vCisgICAg
ICAgIC8vIDE1LiBJZiB0aGUgW1tDbGFzc11dIGludGVybmFsIHByb3BlcnR5IG9mIFRhcmdldCBp
cyAiRnVuY3Rpb24iLCB0aGVuCisgICAgICAgIC8vICAgICBhLiBMZXQgTCBiZSB0aGUgbGVuZ3Ro
IHByb3BlcnR5IG9mIFRhcmdldCBtaW51cyB0aGUgbGVuZ3RoIG9mIEEuCisgICAgICAgIC8vICAg
ICBiLiBTZXQgdGhlIGxlbmd0aCBvd24gcHJvcGVydHkgb2YgRiB0byBlaXRoZXIgMCBvciBMLCB3
aGljaGV2ZXIgaXMKKyAgICAgICAgLy8gICAgICAgbGFyZ2VyLgorICAgICAgICAvLyAxNi4gRWxz
ZSBzZXQgdGhlIGxlbmd0aCBvd24gcHJvcGVydHkgb2YgRiB0byAwLgorICAgICAgICAvLyAxNy4g
U2V0IHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBsZW5ndGggb3duIHByb3BlcnR5IG9mIEYgdG8gdGhl
IHZhbHVlcworICAgICAgICAvLyAgIHNwZWNpZmllZCBpbiAxNS4zLjUuMS4KKworICAgICAgICAv
LyBUT0RPCisgICAgICAgIC8vIDE4LiBTZXQgdGhlIFtbRXh0ZW5zaWJsZV1dIGludGVybmFsIHBy
b3BlcnR5IG9mIEYgdG8gdHJ1ZS4KKworICAgICAgICAvLyBUT0RPCisgICAgICAgIC8vIDE5LiBM
ZXQgdGhyb3dlciBiZSB0aGUgW1tUaHJvd1R5cGVFcnJvcl1dIGZ1bmN0aW9uIE9iamVjdCAoMTMu
Mi4zKS4KKyAgICAgICAgLy8gMjAuIENhbGwgdGhlIFtbRGVmaW5lT3duUHJvcGVydHldXSBpbnRl
cm5hbCBtZXRob2Qgb2YgRiB3aXRoCisgICAgICAgIC8vICAgYXJndW1lbnRzICJjYWxsZXIiLCBQ
cm9wZXJ0eURlc2NyaXB0b3Ige1tbR2V0XV06IHRocm93ZXIsIFtbU2V0XV06CisgICAgICAgIC8v
ICAgdGhyb3dlciwgW1tFbnVtZXJhYmxlXV06IGZhbHNlLCBbW0NvbmZpZ3VyYWJsZV1dOiBmYWxz
ZX0sIGFuZAorICAgICAgICAvLyAgIGZhbHNlLgorICAgICAgICAvLyAyMS4gQ2FsbCB0aGUgW1tE
ZWZpbmVPd25Qcm9wZXJ0eV1dIGludGVybmFsIG1ldGhvZCBvZiBGIHdpdGgKKyAgICAgICAgLy8g
ICBhcmd1bWVudHMgImFyZ3VtZW50cyIsIFByb3BlcnR5RGVzY3JpcHRvciB7W1tHZXRdXTogdGhy
b3dlciwKKyAgICAgICAgLy8gICBbW1NldF1dOiB0aHJvd2VyLCBbW0VudW1lcmFibGVdXTogZmFs
c2UsIFtbQ29uZmlndXJhYmxlXV06IGZhbHNlfSwKKyAgICAgICAgLy8gICBhbmQgZmFsc2UuCisK
KyAgICAgICAgLy8gVE9ETworICAgICAgICAvLyBOT1RFIEZ1bmN0aW9uIG9iamVjdHMgY3JlYXRl
ZCB1c2luZyBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCBkbyBub3QKKyAgICAgICAgLy8gaGF2ZSBh
IHByb3RvdHlwZSBwcm9wZXJ0eSBvciB0aGUgW1tDb2RlXV0sIFtbRm9ybWFsUGFyYW1ldGVyc11d
LCBhbmQKKyAgICAgICAgLy8gW1tTY29wZV1dIGludGVybmFsIHByb3BlcnRpZXMuCisgICAgICAg
IC8vIFhYWCBjYW4ndCBkZWxldGUgcHJvdG90eXBlIGluIHB1cmUtanMuCisKKyAgICAgICAgLy8g
MjIuIFJldHVybiBGLgorICAgICAgICByZXR1cm4gYm91bmQ7CisgICAgfTsKK30KKworLy8gU2hv
cnRjdXQgdG8gYW4gb2Z0ZW4gYWNjZXNzZWQgcHJvcGVydGllcywgaW4gb3JkZXIgdG8gYXZvaWQg
bXVsdGlwbGUKKy8vIGRlcmVmZXJlbmNlIHRoYXQgY29zdHMgdW5pdmVyc2FsbHkuCisvLyBfUGxl
YXNlIG5vdGU6IFNob3J0Y3V0cyBhcmUgZGVmaW5lZCBhZnRlciBgRnVuY3Rpb24ucHJvdG90eXBl
LmJpbmRgIGFzIHdlCisvLyB1cyBpdCBpbiBkZWZpbmluZyBzaG9ydGN1dHMuCit2YXIgY2FsbCA9
IEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsOwordmFyIHByb3RvdHlwZU9mQXJyYXkgPSBBcnJheS5w
cm90b3R5cGU7Cit2YXIgcHJvdG90eXBlT2ZPYmplY3QgPSBPYmplY3QucHJvdG90eXBlOwordmFy
IHNsaWNlID0gcHJvdG90eXBlT2ZBcnJheS5zbGljZTsKKy8vIEhhdmluZyBhIHRvU3RyaW5nIGxv
Y2FsIHZhcmlhYmxlIG5hbWUgYnJlYWtzIGluIE9wZXJhIHNvIHVzZSBfdG9TdHJpbmcuCit2YXIg
X3RvU3RyaW5nID0gY2FsbC5iaW5kKHByb3RvdHlwZU9mT2JqZWN0LnRvU3RyaW5nKTsKK3ZhciBv
d25zID0gY2FsbC5iaW5kKHByb3RvdHlwZU9mT2JqZWN0Lmhhc093blByb3BlcnR5KTsKKworLy8g
SWYgSlMgZW5naW5lIHN1cHBvcnRzIGFjY2Vzc29ycyBjcmVhdGluZyBzaG9ydGN1dHMuCit2YXIg
ZGVmaW5lR2V0dGVyOwordmFyIGRlZmluZVNldHRlcjsKK3ZhciBsb29rdXBHZXR0ZXI7Cit2YXIg
bG9va3VwU2V0dGVyOwordmFyIHN1cHBvcnRzQWNjZXNzb3JzOworaWYgKChzdXBwb3J0c0FjY2Vz
c29ycyA9IG93bnMocHJvdG90eXBlT2ZPYmplY3QsICJfX2RlZmluZUdldHRlcl9fIikpKSB7Cisg
ICAgZGVmaW5lR2V0dGVyID0gY2FsbC5iaW5kKHByb3RvdHlwZU9mT2JqZWN0Ll9fZGVmaW5lR2V0
dGVyX18pOworICAgIGRlZmluZVNldHRlciA9IGNhbGwuYmluZChwcm90b3R5cGVPZk9iamVjdC5f
X2RlZmluZVNldHRlcl9fKTsKKyAgICBsb29rdXBHZXR0ZXIgPSBjYWxsLmJpbmQocHJvdG90eXBl
T2ZPYmplY3QuX19sb29rdXBHZXR0ZXJfXyk7CisgICAgbG9va3VwU2V0dGVyID0gY2FsbC5iaW5k
KHByb3RvdHlwZU9mT2JqZWN0Ll9fbG9va3VwU2V0dGVyX18pOworfQorCisvLworLy8gQXJyYXkK
Ky8vID09PT09CisvLworCisvLyBFUzUgMTUuNC4zLjIKKy8vIGh0dHA6Ly9lczUuZ2l0aHViLmNv
bS8jeDE1LjQuMy4yCisvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9KYXZhU2Ny
aXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9BcnJheS9pc0FycmF5CitpZiAoIUFycmF5Lmlz
QXJyYXkpIHsKKyAgICBBcnJheS5pc0FycmF5ID0gZnVuY3Rpb24gaXNBcnJheShvYmopIHsKKyAg
ICAgICAgcmV0dXJuIF90b1N0cmluZyhvYmopID09ICJbb2JqZWN0IEFycmF5XSI7CisgICAgfTsK
K30KKworLy8gVGhlIElzQ2FsbGFibGUoKSBjaGVjayBpbiB0aGUgQXJyYXkgZnVuY3Rpb25zCisv
LyBoYXMgYmVlbiByZXBsYWNlZCB3aXRoIGEgc3RyaWN0IGNoZWNrIG9uIHRoZQorLy8gaW50ZXJu
YWwgY2xhc3Mgb2YgdGhlIG9iamVjdCB0byB0cmFwIGNhc2VzIHdoZXJlCisvLyB0aGUgcHJvdmlk
ZWQgZnVuY3Rpb24gd2FzIGFjdHVhbGx5IGEgcmVndWxhcgorLy8gZXhwcmVzc2lvbiBsaXRlcmFs
LCB3aGljaCBpbiBWOCBhbmQKKy8vIEphdmFTY3JpcHRDb3JlIGlzIGEgdHlwZW9mICJmdW5jdGlv
biIuICBPbmx5IGluCisvLyBWOCBhcmUgcmVndWxhciBleHByZXNzaW9uIGxpdGVyYWxzIHBlcm1p
dHRlZCBhcworLy8gcmVkdWNlIHBhcmFtZXRlcnMsIHNvIGl0IGlzIGRlc2lyYWJsZSBpbiB0aGUK
Ky8vIGdlbmVyYWwgY2FzZSBmb3IgdGhlIHNoaW0gdG8gbWF0Y2ggdGhlIG1vcmUKKy8vIHN0cmlj
dCBhbmQgY29tbW9uIGJlaGF2aW9yIG9mIHJlamVjdGluZyByZWd1bGFyCisvLyBleHByZXNzaW9u
cy4KKworLy8gRVM1IDE1LjQuNC4xOAorLy8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUuNC40
LjE4CisvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9KYXZhU2NyaXB0L1JlZmVy
ZW5jZS9HbG9iYWxfT2JqZWN0cy9hcnJheS9mb3JFYWNoCitpZiAoIUFycmF5LnByb3RvdHlwZS5m
b3JFYWNoKSB7CisgICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiBmb3JFYWNo
KGZ1biAvKiwgdGhpc3AqLykgeworICAgICAgICB2YXIgc2VsZiA9IHRvT2JqZWN0KHRoaXMpLAor
ICAgICAgICAgICAgdGhpc3AgPSBhcmd1bWVudHNbMV0sCisgICAgICAgICAgICBpID0gLTEsCisg
ICAgICAgICAgICBsZW5ndGggPSBzZWxmLmxlbmd0aCA+Pj4gMDsKKworICAgICAgICAvLyBJZiBu
byBjYWxsYmFjayBmdW5jdGlvbiBvciBpZiBjYWxsYmFjayBpcyBub3QgYSBjYWxsYWJsZSBmdW5j
dGlvbgorICAgICAgICBpZiAoX3RvU3RyaW5nKGZ1bikgIT0gIltvYmplY3QgRnVuY3Rpb25dIikg
eworICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigpOyAvLyBUT0RPIG1lc3NhZ2UKKyAg
ICAgICAgfQorCisgICAgICAgIHdoaWxlICgrK2kgPCBsZW5ndGgpIHsKKyAgICAgICAgICAgIGlm
IChpIGluIHNlbGYpIHsKKyAgICAgICAgICAgICAgICAvLyBJbnZva2UgdGhlIGNhbGxiYWNrIGZ1
bmN0aW9uIHdpdGggY2FsbCwgcGFzc2luZyBhcmd1bWVudHM6CisgICAgICAgICAgICAgICAgLy8g
Y29udGV4dCwgcHJvcGVydHkgdmFsdWUsIHByb3BlcnR5IGtleSwgdGhpc0FyZyBvYmplY3QgY29u
dGV4dAorICAgICAgICAgICAgICAgIGZ1bi5jYWxsKHRoaXNwLCBzZWxmW2ldLCBpLCBzZWxmKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07Cit9CisKKy8vIEVTNSAxNS40LjQuMTkK
Ky8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjQuNC4xOQorLy8gaHR0cHM6Ly9kZXZlbG9w
ZXIubW96aWxsYS5vcmcvZW4vQ29yZV9KYXZhU2NyaXB0XzEuNV9SZWZlcmVuY2UvT2JqZWN0cy9B
cnJheS9tYXAKK2lmICghQXJyYXkucHJvdG90eXBlLm1hcCkgeworICAgIEFycmF5LnByb3RvdHlw
ZS5tYXAgPSBmdW5jdGlvbiBtYXAoZnVuIC8qLCB0aGlzcCovKSB7CisgICAgICAgIHZhciBzZWxm
ID0gdG9PYmplY3QodGhpcyksCisgICAgICAgICAgICBsZW5ndGggPSBzZWxmLmxlbmd0aCA+Pj4g
MCwKKyAgICAgICAgICAgIHJlc3VsdCA9IEFycmF5KGxlbmd0aCksCisgICAgICAgICAgICB0aGlz
cCA9IGFyZ3VtZW50c1sxXTsKKworICAgICAgICAvLyBJZiBubyBjYWxsYmFjayBmdW5jdGlvbiBv
ciBpZiBjYWxsYmFjayBpcyBub3QgYSBjYWxsYWJsZSBmdW5jdGlvbgorICAgICAgICBpZiAoX3Rv
U3RyaW5nKGZ1bikgIT0gIltvYmplY3QgRnVuY3Rpb25dIikgeworICAgICAgICAgICAgdGhyb3cg
bmV3IFR5cGVFcnJvcihmdW4gKyAiIGlzIG5vdCBhIGZ1bmN0aW9uIik7CisgICAgICAgIH0KKwor
ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBp
ZiAoaSBpbiBzZWxmKQorICAgICAgICAgICAgICAgIHJlc3VsdFtpXSA9IGZ1bi5jYWxsKHRoaXNw
LCBzZWxmW2ldLCBpLCBzZWxmKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgIH07Cit9CisKKy8vIEVTNSAxNS40LjQuMjAKKy8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8j
eDE1LjQuNC4yMAorLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vQ29yZV9KYXZh
U2NyaXB0XzEuNV9SZWZlcmVuY2UvT2JqZWN0cy9BcnJheS9maWx0ZXIKK2lmICghQXJyYXkucHJv
dG90eXBlLmZpbHRlcikgeworICAgIEFycmF5LnByb3RvdHlwZS5maWx0ZXIgPSBmdW5jdGlvbiBm
aWx0ZXIoZnVuIC8qLCB0aGlzcCAqLykgeworICAgICAgICB2YXIgc2VsZiA9IHRvT2JqZWN0KHRo
aXMpLAorICAgICAgICAgICAgbGVuZ3RoID0gc2VsZi5sZW5ndGggPj4+IDAsCisgICAgICAgICAg
ICByZXN1bHQgPSBbXSwKKyAgICAgICAgICAgIHZhbHVlLAorICAgICAgICAgICAgdGhpc3AgPSBh
cmd1bWVudHNbMV07CisKKyAgICAgICAgLy8gSWYgbm8gY2FsbGJhY2sgZnVuY3Rpb24gb3IgaWYg
Y2FsbGJhY2sgaXMgbm90IGEgY2FsbGFibGUgZnVuY3Rpb24KKyAgICAgICAgaWYgKF90b1N0cmlu
ZyhmdW4pICE9ICJbb2JqZWN0IEZ1bmN0aW9uXSIpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBU
eXBlRXJyb3IoZnVuICsgIiBpcyBub3QgYSBmdW5jdGlvbiIpOworICAgICAgICB9CisKKyAgICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgaWYgKGkg
aW4gc2VsZikgeworICAgICAgICAgICAgICAgIHZhbHVlID0gc2VsZltpXTsKKyAgICAgICAgICAg
ICAgICBpZiAoZnVuLmNhbGwodGhpc3AsIHZhbHVlLCBpLCBzZWxmKSkgeworICAgICAgICAgICAg
ICAgICAgICByZXN1bHQucHVzaCh2YWx1ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfTsKK30KKworLy8g
RVM1IDE1LjQuNC4xNgorLy8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUuNC40LjE2CisvLyBo
dHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9i
YWxfT2JqZWN0cy9BcnJheS9ldmVyeQoraWYgKCFBcnJheS5wcm90b3R5cGUuZXZlcnkpIHsKKyAg
ICBBcnJheS5wcm90b3R5cGUuZXZlcnkgPSBmdW5jdGlvbiBldmVyeShmdW4gLyosIHRoaXNwICov
KSB7CisgICAgICAgIHZhciBzZWxmID0gdG9PYmplY3QodGhpcyksCisgICAgICAgICAgICBsZW5n
dGggPSBzZWxmLmxlbmd0aCA+Pj4gMCwKKyAgICAgICAgICAgIHRoaXNwID0gYXJndW1lbnRzWzFd
OworCisgICAgICAgIC8vIElmIG5vIGNhbGxiYWNrIGZ1bmN0aW9uIG9yIGlmIGNhbGxiYWNrIGlz
IG5vdCBhIGNhbGxhYmxlIGZ1bmN0aW9uCisgICAgICAgIGlmIChfdG9TdHJpbmcoZnVuKSAhPSAi
W29iamVjdCBGdW5jdGlvbl0iKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGZ1
biArICIgaXMgbm90IGEgZnVuY3Rpb24iKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGlmIChpIGluIHNlbGYgJiYg
IWZ1bi5jYWxsKHRoaXNwLCBzZWxmW2ldLCBpLCBzZWxmKSkgeworICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9OworfQorCisvLyBFUzUgMTUuNC40LjE3CisvLyBodHRwOi8vZXM1LmdpdGh1Yi5j
b20vI3gxNS40LjQuMTcKKy8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL0phdmFT
Y3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0FycmF5L3NvbWUKK2lmICghQXJyYXkucHJv
dG90eXBlLnNvbWUpIHsKKyAgICBBcnJheS5wcm90b3R5cGUuc29tZSA9IGZ1bmN0aW9uIHNvbWUo
ZnVuIC8qLCB0aGlzcCAqLykgeworICAgICAgICB2YXIgc2VsZiA9IHRvT2JqZWN0KHRoaXMpLAor
ICAgICAgICAgICAgbGVuZ3RoID0gc2VsZi5sZW5ndGggPj4+IDAsCisgICAgICAgICAgICB0aGlz
cCA9IGFyZ3VtZW50c1sxXTsKKworICAgICAgICAvLyBJZiBubyBjYWxsYmFjayBmdW5jdGlvbiBv
ciBpZiBjYWxsYmFjayBpcyBub3QgYSBjYWxsYWJsZSBmdW5jdGlvbgorICAgICAgICBpZiAoX3Rv
U3RyaW5nKGZ1bikgIT0gIltvYmplY3QgRnVuY3Rpb25dIikgeworICAgICAgICAgICAgdGhyb3cg
bmV3IFR5cGVFcnJvcihmdW4gKyAiIGlzIG5vdCBhIGZ1bmN0aW9uIik7CisgICAgICAgIH0KKwor
ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBp
ZiAoaSBpbiBzZWxmICYmIGZ1bi5jYWxsKHRoaXNwLCBzZWxmW2ldLCBpLCBzZWxmKSkgeworICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9OworfQorCisvLyBFUzUgMTUuNC40LjIxCisvLyBodHRw
Oi8vZXM1LmdpdGh1Yi5jb20vI3gxNS40LjQuMjEKKy8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemls
bGEub3JnL2VuL0NvcmVfSmF2YVNjcmlwdF8xLjVfUmVmZXJlbmNlL09iamVjdHMvQXJyYXkvcmVk
dWNlCitpZiAoIUFycmF5LnByb3RvdHlwZS5yZWR1Y2UpIHsKKyAgICBBcnJheS5wcm90b3R5cGUu
cmVkdWNlID0gZnVuY3Rpb24gcmVkdWNlKGZ1biAvKiwgaW5pdGlhbCovKSB7CisgICAgICAgIHZh
ciBzZWxmID0gdG9PYmplY3QodGhpcyksCisgICAgICAgICAgICBsZW5ndGggPSBzZWxmLmxlbmd0
aCA+Pj4gMDsKKworICAgICAgICAvLyBJZiBubyBjYWxsYmFjayBmdW5jdGlvbiBvciBpZiBjYWxs
YmFjayBpcyBub3QgYSBjYWxsYWJsZSBmdW5jdGlvbgorICAgICAgICBpZiAoX3RvU3RyaW5nKGZ1
bikgIT0gIltvYmplY3QgRnVuY3Rpb25dIikgeworICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVF
cnJvcihmdW4gKyAiIGlzIG5vdCBhIGZ1bmN0aW9uIik7CisgICAgICAgIH0KKworICAgICAgICAv
LyBubyB2YWx1ZSB0byByZXR1cm4gaWYgbm8gaW5pdGlhbCB2YWx1ZSBhbmQgYW4gZW1wdHkgYXJy
YXkKKyAgICAgICAgaWYgKCFsZW5ndGggJiYgYXJndW1lbnRzLmxlbmd0aCA9PSAxKSB7CisgICAg
ICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdyZWR1Y2Ugb2YgZW1wdHkgYXJyYXkgd2l0aCBu
byBpbml0aWFsIHZhbHVlJyk7CisgICAgICAgIH0KKworICAgICAgICB2YXIgaSA9IDA7CisgICAg
ICAgIHZhciByZXN1bHQ7CisgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID49IDIpIHsKKyAg
ICAgICAgICAgIHJlc3VsdCA9IGFyZ3VtZW50c1sxXTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICBpZiAoaSBpbiBzZWxmKSB7CisgICAgICAgICAg
ICAgICAgICAgIHJlc3VsdCA9IHNlbGZbaSsrXTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gaWYgYXJyYXkgY29udGFp
bnMgbm8gdmFsdWVzLCBubyBpbml0aWFsIHZhbHVlIHRvIHJldHVybgorICAgICAgICAgICAgICAg
IGlmICgrK2kgPj0gbGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBl
RXJyb3IoJ3JlZHVjZSBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWUnKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IHdoaWxlICh0cnVlKTsKKyAgICAgICAgfQor
CisgICAgICAgIGZvciAoOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGlmIChpIGlu
IHNlbGYpIHsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBmdW4uY2FsbCh2b2lkIDAsIHJlc3Vs
dCwgc2VsZltpXSwgaSwgc2VsZik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgIH07Cit9CisKKy8vIEVTNSAxNS40LjQuMjIKKy8vIGh0dHA6
Ly9lczUuZ2l0aHViLmNvbS8jeDE1LjQuNC4yMgorLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxs
YS5vcmcvZW4vQ29yZV9KYXZhU2NyaXB0XzEuNV9SZWZlcmVuY2UvT2JqZWN0cy9BcnJheS9yZWR1
Y2VSaWdodAoraWYgKCFBcnJheS5wcm90b3R5cGUucmVkdWNlUmlnaHQpIHsKKyAgICBBcnJheS5w
cm90b3R5cGUucmVkdWNlUmlnaHQgPSBmdW5jdGlvbiByZWR1Y2VSaWdodChmdW4gLyosIGluaXRp
YWwqLykgeworICAgICAgICB2YXIgc2VsZiA9IHRvT2JqZWN0KHRoaXMpLAorICAgICAgICAgICAg
bGVuZ3RoID0gc2VsZi5sZW5ndGggPj4+IDA7CisKKyAgICAgICAgLy8gSWYgbm8gY2FsbGJhY2sg
ZnVuY3Rpb24gb3IgaWYgY2FsbGJhY2sgaXMgbm90IGEgY2FsbGFibGUgZnVuY3Rpb24KKyAgICAg
ICAgaWYgKF90b1N0cmluZyhmdW4pICE9ICJbb2JqZWN0IEZ1bmN0aW9uXSIpIHsKKyAgICAgICAg
ICAgIHRocm93IG5ldyBUeXBlRXJyb3IoZnVuICsgIiBpcyBub3QgYSBmdW5jdGlvbiIpOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gbm8gdmFsdWUgdG8gcmV0dXJuIGlmIG5vIGluaXRpYWwgdmFs
dWUsIGVtcHR5IGFycmF5CisgICAgICAgIGlmICghbGVuZ3RoICYmIGFyZ3VtZW50cy5sZW5ndGgg
PT0gMSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigncmVkdWNlUmlnaHQgb2Yg
ZW1wdHkgYXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlJyk7CisgICAgICAgIH0KKworICAgICAg
ICB2YXIgcmVzdWx0LCBpID0gbGVuZ3RoIC0gMTsKKyAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5n
dGggPj0gMikgeworICAgICAgICAgICAgcmVzdWx0ID0gYXJndW1lbnRzWzFdOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgIGlmIChpIGluIHNlbGYp
IHsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gc2VsZltpLS1dOworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBp
ZiBhcnJheSBjb250YWlucyBubyB2YWx1ZXMsIG5vIGluaXRpYWwgdmFsdWUgdG8gcmV0dXJuCisg
ICAgICAgICAgICAgICAgaWYgKC0taSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3cg
bmV3IFR5cGVFcnJvcigncmVkdWNlUmlnaHQgb2YgZW1wdHkgYXJyYXkgd2l0aCBubyBpbml0aWFs
IHZhbHVlJyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSB3aGlsZSAodHJ1ZSk7
CisgICAgICAgIH0KKworICAgICAgICBkbyB7CisgICAgICAgICAgICBpZiAoaSBpbiB0aGlzKSB7
CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gZnVuLmNhbGwodm9pZCAwLCByZXN1bHQsIHNlbGZb
aV0sIGksIHNlbGYpOworICAgICAgICAgICAgfQorICAgICAgICB9IHdoaWxlIChpLS0pOworCisg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfTsKK30KKworLy8gRVM1IDE1LjQuNC4xNAorLy8g
aHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUuNC40LjE0CisvLyBodHRwczovL2RldmVsb3Blci5t
b3ppbGxhLm9yZy9lbi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9BcnJheS9p
bmRleE9mCitpZiAoIUFycmF5LnByb3RvdHlwZS5pbmRleE9mKSB7CisgICAgQXJyYXkucHJvdG90
eXBlLmluZGV4T2YgPSBmdW5jdGlvbiBpbmRleE9mKHNvdWdodCAvKiwgZnJvbUluZGV4ICovICkg
eworICAgICAgICB2YXIgc2VsZiA9IHRvT2JqZWN0KHRoaXMpLAorICAgICAgICAgICAgbGVuZ3Ro
ID0gc2VsZi5sZW5ndGggPj4+IDA7CisKKyAgICAgICAgaWYgKCFsZW5ndGgpIHsKKyAgICAgICAg
ICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBpID0gMDsKKyAgICAgICAg
aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7CisgICAgICAgICAgICBpID0gdG9JbnRlZ2VyKGFy
Z3VtZW50c1sxXSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBoYW5kbGUgbmVnYXRpdmUgaW5k
aWNlcworICAgICAgICBpID0gaSA+PSAwID8gaSA6IE1hdGgubWF4KDAsIGxlbmd0aCArIGkpOwor
ICAgICAgICBmb3IgKDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBpZiAoaSBpbiBz
ZWxmICYmIHNlbGZbaV0gPT09IHNvdWdodCkgeworICAgICAgICAgICAgICAgIHJldHVybiBpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9OworfQor
CisvLyBFUzUgMTUuNC40LjE1CisvLyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS40LjQuMTUK
Ky8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL0phdmFTY3JpcHQvUmVmZXJlbmNl
L0dsb2JhbF9PYmplY3RzL0FycmF5L2xhc3RJbmRleE9mCitpZiAoIUFycmF5LnByb3RvdHlwZS5s
YXN0SW5kZXhPZikgeworICAgIEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZiA9IGZ1bmN0aW9u
IGxhc3RJbmRleE9mKHNvdWdodCAvKiwgZnJvbUluZGV4ICovKSB7CisgICAgICAgIHZhciBzZWxm
ID0gdG9PYmplY3QodGhpcyksCisgICAgICAgICAgICBsZW5ndGggPSBzZWxmLmxlbmd0aCA+Pj4g
MDsKKworICAgICAgICBpZiAoIWxlbmd0aCkgeworICAgICAgICAgICAgcmV0dXJuIC0xOworICAg
ICAgICB9CisgICAgICAgIHZhciBpID0gbGVuZ3RoIC0gMTsKKyAgICAgICAgaWYgKGFyZ3VtZW50
cy5sZW5ndGggPiAxKSB7CisgICAgICAgICAgICBpID0gTWF0aC5taW4oaSwgdG9JbnRlZ2VyKGFy
Z3VtZW50c1sxXSkpOworICAgICAgICB9CisgICAgICAgIC8vIGhhbmRsZSBuZWdhdGl2ZSBpbmRp
Y2VzCisgICAgICAgIGkgPSBpID49IDAgPyBpIDogbGVuZ3RoIC0gTWF0aC5hYnMoaSk7CisgICAg
ICAgIGZvciAoOyBpID49IDA7IGktLSkgeworICAgICAgICAgICAgaWYgKGkgaW4gc2VsZiAmJiBz
b3VnaHQgPT09IHNlbGZbaV0pIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gaTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gLTE7CisgICAgfTsKK30KKworLy8KKy8v
IE9iamVjdAorLy8gPT09PT09CisvLworCisvLyBFUzUgMTUuMi4zLjE0CisvLyBodHRwOi8vZXM1
LmdpdGh1Yi5jb20vI3gxNS4yLjMuMTQKK2lmICghT2JqZWN0LmtleXMpIHsKKyAgICAvLyBodHRw
Oi8vd2hhdHRoZWhlYWRzYWlkLmNvbS8yMDEwLzEwL2Etc2FmZXItb2JqZWN0LWtleXMtY29tcGF0
aWJpbGl0eS1pbXBsZW1lbnRhdGlvbgorICAgIHZhciBoYXNEb250RW51bUJ1ZyA9IHRydWUsCisg
ICAgICAgIGRvbnRFbnVtcyA9IFsKKyAgICAgICAgICAgICJ0b1N0cmluZyIsCisgICAgICAgICAg
ICAidG9Mb2NhbGVTdHJpbmciLAorICAgICAgICAgICAgInZhbHVlT2YiLAorICAgICAgICAgICAg
Imhhc093blByb3BlcnR5IiwKKyAgICAgICAgICAgICJpc1Byb3RvdHlwZU9mIiwKKyAgICAgICAg
ICAgICJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsCisgICAgICAgICAgICAiY29uc3RydWN0b3IiCisg
ICAgICAgIF0sCisgICAgICAgIGRvbnRFbnVtc0xlbmd0aCA9IGRvbnRFbnVtcy5sZW5ndGg7CisK
KyAgICBmb3IgKHZhciBrZXkgaW4geyJ0b1N0cmluZyI6IG51bGx9KSB7CisgICAgICAgIGhhc0Rv
bnRFbnVtQnVnID0gZmFsc2U7CisgICAgfQorCisgICAgT2JqZWN0LmtleXMgPSBmdW5jdGlvbiBr
ZXlzKG9iamVjdCkgeworCisgICAgICAgIGlmICgodHlwZW9mIG9iamVjdCAhPSAib2JqZWN0IiAm
JiB0eXBlb2Ygb2JqZWN0ICE9ICJmdW5jdGlvbiIpIHx8IG9iamVjdCA9PT0gbnVsbCkgeworICAg
ICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0LmtleXMgY2FsbGVkIG9uIGEgbm9u
LW9iamVjdCIpOworICAgICAgICB9CisKKyAgICAgICAgdmFyIGtleXMgPSBbXTsKKyAgICAgICAg
Zm9yICh2YXIgbmFtZSBpbiBvYmplY3QpIHsKKyAgICAgICAgICAgIGlmIChvd25zKG9iamVjdCwg
bmFtZSkpIHsKKyAgICAgICAgICAgICAgICBrZXlzLnB1c2gobmFtZSk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgICAgICBpZiAoaGFzRG9udEVudW1CdWcpIHsKKyAgICAgICAgICAg
IGZvciAodmFyIGkgPSAwLCBpaSA9IGRvbnRFbnVtc0xlbmd0aDsgaSA8IGlpOyBpKyspIHsKKyAg
ICAgICAgICAgICAgICB2YXIgZG9udEVudW0gPSBkb250RW51bXNbaV07CisgICAgICAgICAgICAg
ICAgaWYgKG93bnMob2JqZWN0LCBkb250RW51bSkpIHsKKyAgICAgICAgICAgICAgICAgICAga2V5
cy5wdXNoKGRvbnRFbnVtKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIGtleXM7CisgICAgfTsKKworfQorCisvLworLy8gRGF0ZQor
Ly8gPT09PQorLy8KKworLy8gRVM1IDE1LjkuNS40MworLy8gaHR0cDovL2VzNS5naXRodWIuY29t
LyN4MTUuOS41LjQzCisvLyBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSBTdHJpbmcgdmFsdWUgcmVw
cmVzZW50IHRoZSBpbnN0YW5jZSBpbiB0aW1lCisvLyByZXByZXNlbnRlZCBieSB0aGlzIERhdGUg
b2JqZWN0LiBUaGUgZm9ybWF0IG9mIHRoZSBTdHJpbmcgaXMgdGhlIERhdGUgVGltZQorLy8gc3Ry
aW5nIGZvcm1hdCBkZWZpbmVkIGluIDE1LjkuMS4xNS4gQWxsIGZpZWxkcyBhcmUgcHJlc2VudCBp
biB0aGUgU3RyaW5nLgorLy8gVGhlIHRpbWUgem9uZSBpcyBhbHdheXMgVVRDLCBkZW5vdGVkIGJ5
IHRoZSBzdWZmaXggWi4gSWYgdGhlIHRpbWUgdmFsdWUgb2YKKy8vIHRoaXMgb2JqZWN0IGlzIG5v
dCBhIGZpbml0ZSBOdW1iZXIgYSBSYW5nZUVycm9yIGV4Y2VwdGlvbiBpcyB0aHJvd24uCitpZiAo
IURhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nIHx8IChuZXcgRGF0ZSgtNjIxOTg3NTUyMDAwMDAp
LnRvSVNPU3RyaW5nKCkuaW5kZXhPZignLTAwMDAwMScpID09PSAtMSkpIHsKKyAgICBEYXRlLnBy
b3RvdHlwZS50b0lTT1N0cmluZyA9IGZ1bmN0aW9uIHRvSVNPU3RyaW5nKCkgeworICAgICAgICB2
YXIgcmVzdWx0LCBsZW5ndGgsIHZhbHVlLCB5ZWFyOworICAgICAgICBpZiAoIWlzRmluaXRlKHRo
aXMpKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigiRGF0ZS5wcm90b3R5cGUu
dG9JU09TdHJpbmcgY2FsbGVkIG9uIG5vbi1maW5pdGUgdmFsdWUuIik7CisgICAgICAgIH0KKwor
ICAgICAgICAvLyB0aGUgZGF0ZSB0aW1lIHN0cmluZyBmb3JtYXQgaXMgc3BlY2lmaWVkIGluIDE1
LjkuMS4xNS4KKyAgICAgICAgcmVzdWx0ID0gW3RoaXMuZ2V0VVRDTW9udGgoKSArIDEsIHRoaXMu
Z2V0VVRDRGF0ZSgpLAorICAgICAgICAgICAgdGhpcy5nZXRVVENIb3VycygpLCB0aGlzLmdldFVU
Q01pbnV0ZXMoKSwgdGhpcy5nZXRVVENTZWNvbmRzKCldOworICAgICAgICB5ZWFyID0gdGhpcy5n
ZXRVVENGdWxsWWVhcigpOworICAgICAgICB5ZWFyID0gKHllYXIgPCAwID8gJy0nIDogKHllYXIg
PiA5OTk5ID8gJysnIDogJycpKSArICgnMDAwMDAnICsgTWF0aC5hYnMoeWVhcikpLnNsaWNlKDAg
PD0geWVhciAmJiB5ZWFyIDw9IDk5OTkgPyAtNCA6IC02KTsKKworICAgICAgICBsZW5ndGggPSBy
ZXN1bHQubGVuZ3RoOworICAgICAgICB3aGlsZSAobGVuZ3RoLS0pIHsKKyAgICAgICAgICAgIHZh
bHVlID0gcmVzdWx0W2xlbmd0aF07CisgICAgICAgICAgICAvLyBwYWQgbW9udGhzLCBkYXlzLCBo
b3VycywgbWludXRlcywgYW5kIHNlY29uZHMgdG8gaGF2ZSB0d28gZGlnaXRzLgorICAgICAgICAg
ICAgaWYgKHZhbHVlIDwgMTApIHsKKyAgICAgICAgICAgICAgICByZXN1bHRbbGVuZ3RoXSA9ICIw
IiArIHZhbHVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8vIHBhZCBtaWxs
aXNlY29uZHMgdG8gaGF2ZSB0aHJlZSBkaWdpdHMuCisgICAgICAgIHJldHVybiB5ZWFyICsgIi0i
ICsgcmVzdWx0LnNsaWNlKDAsIDIpLmpvaW4oIi0iKSArICJUIiArIHJlc3VsdC5zbGljZSgyKS5q
b2luKCI6IikgKyAiLiIgKworICAgICAgICAgICAgKCIwMDAiICsgdGhpcy5nZXRVVENNaWxsaXNl
Y29uZHMoKSkuc2xpY2UoLTMpICsgIloiOworICAgIH0KK30KKworLy8gRVM1IDE1LjkuNC40Cisv
LyBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3gxNS45LjQuNAoraWYgKCFEYXRlLm5vdykgeworICAg
IERhdGUubm93ID0gZnVuY3Rpb24gbm93KCkgeworICAgICAgICByZXR1cm4gbmV3IERhdGUoKS5n
ZXRUaW1lKCk7CisgICAgfTsKK30KKworLy8gRVM1IDE1LjkuNS40NAorLy8gaHR0cDovL2VzNS5n
aXRodWIuY29tLyN4MTUuOS41LjQ0CisvLyBUaGlzIGZ1bmN0aW9uIHByb3ZpZGVzIGEgU3RyaW5n
IHJlcHJlc2VudGF0aW9uIG9mIGEgRGF0ZSBvYmplY3QgZm9yIHVzZSBieQorLy8gSlNPTi5zdHJp
bmdpZnkgKDE1LjEyLjMpLgoraWYgKCFEYXRlLnByb3RvdHlwZS50b0pTT04pIHsKKyAgICBEYXRl
LnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiB0b0pTT04oa2V5KSB7CisgICAgICAgIC8vIFdo
ZW4gdGhlIHRvSlNPTiBtZXRob2QgaXMgY2FsbGVkIHdpdGggYXJndW1lbnQga2V5LCB0aGUgZm9s
bG93aW5nCisgICAgICAgIC8vIHN0ZXBzIGFyZSB0YWtlbjoKKworICAgICAgICAvLyAxLiAgTGV0
IE8gYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIFRvT2JqZWN0LCBnaXZpbmcgaXQgdGhlIHRoaXMK
KyAgICAgICAgLy8gdmFsdWUgYXMgaXRzIGFyZ3VtZW50LgorICAgICAgICAvLyAyLiBMZXQgdHYg
YmUgVG9QcmltaXRpdmUoTywgaGludCBOdW1iZXIpLgorICAgICAgICAvLyAzLiBJZiB0diBpcyBh
IE51bWJlciBhbmQgaXMgbm90IGZpbml0ZSwgcmV0dXJuIG51bGwuCisgICAgICAgIC8vIFhYWAor
ICAgICAgICAvLyA0LiBMZXQgdG9JU08gYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0dl
dF1dIGludGVybmFsIG1ldGhvZCBvZgorICAgICAgICAvLyBPIHdpdGggYXJndW1lbnQgInRvSVNP
U3RyaW5nIi4KKyAgICAgICAgLy8gNS4gSWYgSXNDYWxsYWJsZSh0b0lTTykgaXMgZmFsc2UsIHRo
cm93IGEgVHlwZUVycm9yIGV4Y2VwdGlvbi4KKyAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRvSVNP
U3RyaW5nICE9ICJmdW5jdGlvbiIpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3Io
J3RvSVNPU3RyaW5nIHByb3BlcnR5IGlzIG5vdCBjYWxsYWJsZScpOworICAgICAgICB9CisgICAg
ICAgIC8vIDYuIFJldHVybiB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIFtbQ2FsbF1dIGludGVy
bmFsIG1ldGhvZCBvZgorICAgICAgICAvLyAgdG9JU08gd2l0aCBPIGFzIHRoZSB0aGlzIHZhbHVl
IGFuZCBhbiBlbXB0eSBhcmd1bWVudCBsaXN0LgorICAgICAgICByZXR1cm4gdGhpcy50b0lTT1N0
cmluZygpOworCisgICAgICAgIC8vIE5PVEUgMSBUaGUgYXJndW1lbnQgaXMgaWdub3JlZC4KKwor
ICAgICAgICAvLyBOT1RFIDIgVGhlIHRvSlNPTiBmdW5jdGlvbiBpcyBpbnRlbnRpb25hbGx5IGdl
bmVyaWM7IGl0IGRvZXMgbm90CisgICAgICAgIC8vIHJlcXVpcmUgdGhhdCBpdHMgdGhpcyB2YWx1
ZSBiZSBhIERhdGUgb2JqZWN0LiBUaGVyZWZvcmUsIGl0IGNhbiBiZQorICAgICAgICAvLyB0cmFu
c2ZlcnJlZCB0byBvdGhlciBraW5kcyBvZiBvYmplY3RzIGZvciB1c2UgYXMgYSBtZXRob2QuIEhv
d2V2ZXIsCisgICAgICAgIC8vIGl0IGRvZXMgcmVxdWlyZSB0aGF0IGFueSBzdWNoIG9iamVjdCBo
YXZlIGEgdG9JU09TdHJpbmcgbWV0aG9kLiBBbgorICAgICAgICAvLyBvYmplY3QgaXMgZnJlZSB0
byB1c2UgdGhlIGFyZ3VtZW50IGtleSB0byBmaWx0ZXIgaXRzCisgICAgICAgIC8vIHN0cmluZ2lm
aWNhdGlvbi4KKyAgICB9OworfQorCisvLyBFUzUgMTUuOS40LjIKKy8vIGh0dHA6Ly9lczUuZ2l0
aHViLmNvbS8jeDE1LjkuNC4yCisvLyBiYXNlZCBvbiB3b3JrIHNoYXJlZCBieSBEYW5pZWwgRnJp
ZXNlbiAoZGFudG1hbikKKy8vIGh0dHA6Ly9naXN0LmdpdGh1Yi5jb20vMzAzMjQ5CitpZiAoIURh
dGUucGFyc2UgfHwgRGF0ZS5wYXJzZSgiKzI3NTc2MC0wOS0xM1QwMDowMDowMC4wMDBaIikgIT09
IDguNjRlMTUpIHsKKyAgICAvLyBYWFggZ2xvYmFsIGFzc2lnbm1lbnQgd29uJ3Qgd29yayBpbiBl
bWJlZGRpbmdzIHRoYXQgdXNlCisgICAgLy8gYW4gYWx0ZXJuYXRlIG9iamVjdCBmb3IgdGhlIGNv
bnRleHQuCisgICAgRGF0ZSA9IChmdW5jdGlvbihOYXRpdmVEYXRlKSB7CisKKyAgICAgICAgLy8g
RGF0ZS5sZW5ndGggPT09IDcKKyAgICAgICAgdmFyIERhdGUgPSBmdW5jdGlvbiBEYXRlKFksIE0s
IEQsIGgsIG0sIHMsIG1zKSB7CisgICAgICAgICAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxl
bmd0aDsKKyAgICAgICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgTmF0aXZlRGF0ZSkgeworICAg
ICAgICAgICAgICAgIHZhciBkYXRlID0gbGVuZ3RoID09IDEgJiYgU3RyaW5nKFkpID09PSBZID8g
Ly8gaXNTdHJpbmcoWSkKKyAgICAgICAgICAgICAgICAgICAgLy8gV2UgZXhwbGljaXRseSBwYXNz
IGl0IHRocm91Z2ggcGFyc2U6CisgICAgICAgICAgICAgICAgICAgIG5ldyBOYXRpdmVEYXRlKERh
dGUucGFyc2UoWSkpIDoKKyAgICAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBtYW51YWxs
eSBtYWtlIGNhbGxzIGRlcGVuZGluZyBvbiBhcmd1bWVudAorICAgICAgICAgICAgICAgICAgICAv
LyBsZW5ndGggaGVyZQorICAgICAgICAgICAgICAgICAgICBsZW5ndGggPj0gNyA/IG5ldyBOYXRp
dmVEYXRlKFksIE0sIEQsIGgsIG0sIHMsIG1zKSA6CisgICAgICAgICAgICAgICAgICAgIGxlbmd0
aCA+PSA2ID8gbmV3IE5hdGl2ZURhdGUoWSwgTSwgRCwgaCwgbSwgcykgOgorICAgICAgICAgICAg
ICAgICAgICBsZW5ndGggPj0gNSA/IG5ldyBOYXRpdmVEYXRlKFksIE0sIEQsIGgsIG0pIDoKKyAg
ICAgICAgICAgICAgICAgICAgbGVuZ3RoID49IDQgPyBuZXcgTmF0aXZlRGF0ZShZLCBNLCBELCBo
KSA6CisgICAgICAgICAgICAgICAgICAgIGxlbmd0aCA+PSAzID8gbmV3IE5hdGl2ZURhdGUoWSwg
TSwgRCkgOgorICAgICAgICAgICAgICAgICAgICBsZW5ndGggPj0gMiA/IG5ldyBOYXRpdmVEYXRl
KFksIE0pIDoKKyAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID49IDEgPyBuZXcgTmF0aXZlRGF0
ZShZKSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IE5hdGl2ZURhdGUo
KTsKKyAgICAgICAgICAgICAgICAvLyBQcmV2ZW50IG1peHVwcyB3aXRoIHVuZml4ZWQgRGF0ZSBv
YmplY3QKKyAgICAgICAgICAgICAgICBkYXRlLmNvbnN0cnVjdG9yID0gRGF0ZTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZGF0ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBO
YXRpdmVEYXRlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisgICAgICAgIH07CisKKyAgICAgICAg
Ly8gMTUuOS4xLjE1IERhdGUgVGltZSBTdHJpbmcgRm9ybWF0LgorICAgICAgICB2YXIgaXNvRGF0
ZUV4cHJlc3Npb24gPSBuZXcgUmVnRXhwKCJeIiArCisgICAgICAgICAgICAiKFxcZHs0fXxbXCtc
LV1cXGR7Nn0pIiArIC8vIGZvdXItZGlnaXQgeWVhciBjYXB0dXJlIG9yIHNpZ24gKyA2LWRpZ2l0
IGV4dGVuZGVkIHllYXIKKyAgICAgICAgICAgICIoPzotKFxcZHsyfSkiICsgLy8gb3B0aW9uYWwg
bW9udGggY2FwdHVyZQorICAgICAgICAgICAgIig/Oi0oXFxkezJ9KSIgKyAvLyBvcHRpb25hbCBk
YXkgY2FwdHVyZQorICAgICAgICAgICAgIig/OiIgKyAvLyBjYXB0dXJlIGhvdXJzOm1pbnV0ZXM6
c2Vjb25kcy5taWxsaXNlY29uZHMKKyAgICAgICAgICAgICAgICAiVChcXGR7Mn0pIiArIC8vIGhv
dXJzIGNhcHR1cmUKKyAgICAgICAgICAgICAgICAiOihcXGR7Mn0pIiArIC8vIG1pbnV0ZXMgY2Fw
dHVyZQorICAgICAgICAgICAgICAgICIoPzoiICsgLy8gb3B0aW9uYWwgOnNlY29uZHMubWlsbGlz
ZWNvbmRzCisgICAgICAgICAgICAgICAgICAgICI6KFxcZHsyfSkiICsgLy8gc2Vjb25kcyBjYXB0
dXJlCisgICAgICAgICAgICAgICAgICAgICIoPzpcXC4oXFxkezN9KSk/IiArIC8vIG1pbGxpc2Vj
b25kcyBjYXB0dXJlCisgICAgICAgICAgICAgICAgIik/IiArCisgICAgICAgICAgICAiKD86IiAr
IC8vIGNhcHR1cmUgVVRDIG9mZnNldCBjb21wb25lbnQKKyAgICAgICAgICAgICAgICAiWnwiICsg
Ly8gVVRDIGNhcHR1cmUKKyAgICAgICAgICAgICAgICAiKD86IiArIC8vIG9mZnNldCBzcGVjaWZp
ZXIgKy8taG91cnM6bWludXRlcworICAgICAgICAgICAgICAgICAgICAiKFstK10pIiArIC8vIHNp
Z24gY2FwdHVyZQorICAgICAgICAgICAgICAgICAgICAiKFxcZHsyfSkiICsgLy8gaG91cnMgb2Zm
c2V0IGNhcHR1cmUKKyAgICAgICAgICAgICAgICAgICAgIjooXFxkezJ9KSIgKyAvLyBtaW51dGVz
IG9mZnNldCBjYXB0dXJlCisgICAgICAgICAgICAgICAgIikiICsKKyAgICAgICAgICAgICIpPyk/
KT8pPyIgKworICAgICAgICAiJCIpOworCisgICAgICAgIC8vIENvcHkgYW55IGN1c3RvbSBtZXRo
b2RzIGEgM3JkIHBhcnR5IGxpYnJhcnkgbWF5IGhhdmUgYWRkZWQKKyAgICAgICAgZm9yICh2YXIg
a2V5IGluIE5hdGl2ZURhdGUpIHsKKyAgICAgICAgICAgIERhdGVba2V5XSA9IE5hdGl2ZURhdGVb
a2V5XTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIENvcHkgIm5hdGl2ZSIgbWV0aG9kcyBleHBs
aWNpdGx5OyB0aGV5IG1heSBiZSBub24tZW51bWVyYWJsZQorICAgICAgICBEYXRlLm5vdyA9IE5h
dGl2ZURhdGUubm93OworICAgICAgICBEYXRlLlVUQyA9IE5hdGl2ZURhdGUuVVRDOworICAgICAg
ICBEYXRlLnByb3RvdHlwZSA9IE5hdGl2ZURhdGUucHJvdG90eXBlOworICAgICAgICBEYXRlLnBy
b3RvdHlwZS5jb25zdHJ1Y3RvciA9IERhdGU7CisKKyAgICAgICAgLy8gVXBncmFkZSBEYXRlLnBh
cnNlIHRvIGhhbmRsZSBzaW1wbGlmaWVkIElTTyA4NjAxIHN0cmluZ3MKKyAgICAgICAgRGF0ZS5w
YXJzZSA9IGZ1bmN0aW9uIHBhcnNlKHN0cmluZykgeworICAgICAgICAgICAgdmFyIG1hdGNoID0g
aXNvRGF0ZUV4cHJlc3Npb24uZXhlYyhzdHJpbmcpOworICAgICAgICAgICAgaWYgKG1hdGNoKSB7
CisgICAgICAgICAgICAgICAgbWF0Y2guc2hpZnQoKTsgLy8ga2lsbCBtYXRjaFswXSwgdGhlIGZ1
bGwgbWF0Y2gKKyAgICAgICAgICAgICAgICAvLyBwYXJzZSBtb250aHMsIGRheXMsIGhvdXJzLCBt
aW51dGVzLCBzZWNvbmRzLCBhbmQgbWlsbGlzZWNvbmRzCisgICAgICAgICAgICAgICAgZm9yICh2
YXIgaSA9IDE7IGkgPCA3OyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gcHJvdmlkZSBk
ZWZhdWx0IHZhbHVlcyBpZiBuZWNlc3NhcnkKKyAgICAgICAgICAgICAgICAgICAgbWF0Y2hbaV0g
PSArKG1hdGNoW2ldIHx8IChpIDwgMyA/IDEgOiAwKSk7CisgICAgICAgICAgICAgICAgICAgIC8v
IG1hdGNoWzFdIGlzIHRoZSBtb250aC4gTW9udGhzIGFyZSAwLTExIGluIEphdmFTY3JpcHQKKyAg
ICAgICAgICAgICAgICAgICAgLy8gYERhdGVgIG9iamVjdHMsIGJ1dCAxLTEyIGluIElTTyBub3Rh
dGlvbiwgc28gd2UKKyAgICAgICAgICAgICAgICAgICAgLy8gZGVjcmVtZW50LgorICAgICAgICAg
ICAgICAgICAgICBpZiAoaSA9PSAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaFtp
XS0tOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgLy8gcGFyc2UgdGhlIFVUQyBvZmZzZXQgY29tcG9uZW50CisgICAgICAgICAgICAg
ICAgdmFyIG1pbnV0ZU9mZnNldCA9ICttYXRjaC5wb3AoKSwgaG91ck9mZnNldCA9ICttYXRjaC5w
b3AoKSwgc2lnbiA9IG1hdGNoLnBvcCgpOworCisgICAgICAgICAgICAgICAgLy8gY29tcHV0ZSB0
aGUgZXhwbGljaXQgdGltZSB6b25lIG9mZnNldCBpZiBzcGVjaWZpZWQKKyAgICAgICAgICAgICAg
ICB2YXIgb2Zmc2V0ID0gMDsKKyAgICAgICAgICAgICAgICBpZiAoc2lnbikgeworICAgICAgICAg
ICAgICAgICAgICAvLyBkZXRlY3QgaW52YWxpZCBvZmZzZXRzIGFuZCByZXR1cm4gZWFybHkKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKGhvdXJPZmZzZXQgPiAyMyB8fCBtaW51dGVPZmZzZXQgPiA1
OSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5hTjsKKyAgICAgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8vIGV4cHJlc3MgdGhlIHByb3ZpZGVkIHRp
bWUgem9uZSBvZmZzZXQgaW4gbWludXRlcy4gVGhlIG9mZnNldCBpcworICAgICAgICAgICAgICAg
ICAgICAvLyBuZWdhdGl2ZSBmb3IgdGltZSB6b25lcyB3ZXN0IG9mIFVUQzsgcG9zaXRpdmUgb3Ro
ZXJ3aXNlLgorICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSAoaG91ck9mZnNldCAqIDYwICsg
bWludXRlT2Zmc2V0KSAqIDZlNCAqIChzaWduID09ICIrIiA/IC0xIDogMSk7CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gRGF0ZS5VVEMgZm9yIHllYXJzIGJldHdlZW4g
MCBhbmQgOTkgY29udmVydHMgeWVhciB0byAxOTAwICsgeWVhcgorICAgICAgICAgICAgICAgIC8v
IFRoZSBHcmVnb3JpYW4gY2FsZW5kYXIgaGFzIGEgNDAwLXllYXIgY3ljbGUsIHNvCisgICAgICAg
ICAgICAgICAgLy8gdG8gRGF0ZS5VVEMoeWVhciArIDQwMCwgLi4uLiApIC0gMTI2MjI3ODA4MDAw
MDAgPT0gRGF0ZS5VVEMoeWVhciwgLi4uKSwKKyAgICAgICAgICAgICAgICAvLyB3aGVyZSAxMjYy
Mjc4MDgwMDAwMCAtIG51bWJlciBvZiBtaWxsaXNlY29uZHMgaW4gR3JlZ29yaWFuIGNhbGVuZGFy
IDQwMCB5ZWFycworICAgICAgICAgICAgICAgIHZhciB5ZWFyID0gK21hdGNoWzBdOworICAgICAg
ICAgICAgICAgIGlmICgwIDw9IHllYXIgJiYgeWVhciA8PSA5OSkgeworICAgICAgICAgICAgICAg
ICAgICBtYXRjaFswXSA9IHllYXIgKyA0MDA7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBO
YXRpdmVEYXRlLlVUQy5hcHBseSh0aGlzLCBtYXRjaCkgKyBvZmZzZXQgLSAxMjYyMjc4MDgwMDAw
MDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBjb21wdXRlIGEgbmV3
IFVUQyBkYXRlIHZhbHVlLCBhY2NvdW50aW5nIGZvciB0aGUgb3B0aW9uYWwgb2Zmc2V0CisgICAg
ICAgICAgICAgICAgcmV0dXJuIE5hdGl2ZURhdGUuVVRDLmFwcGx5KHRoaXMsIG1hdGNoKSArIG9m
ZnNldDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBOYXRpdmVEYXRlLnBhcnNl
LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisgICAgICAgIH07CisKKyAgICAgICAgcmV0dXJuIERh
dGU7CisgICAgfSkoRGF0ZSk7Cit9CisKKy8vCisvLyBTdHJpbmcKKy8vID09PT09PQorLy8KKwor
Ly8gRVM1IDE1LjUuNC4yMAorLy8gaHR0cDovL2VzNS5naXRodWIuY29tLyN4MTUuNS40LjIwCit2
YXIgd3MgPSAiXHgwOVx4MEFceDBCXHgwQ1x4MERceDIwXHhBMFx1MTY4MFx1MTgwRVx1MjAwMFx1
MjAwMVx1MjAwMlx1MjAwMyIgKworICAgICJcdTIwMDRcdTIwMDVcdTIwMDZcdTIwMDdcdTIwMDhc
dTIwMDlcdTIwMEFcdTIwMkZcdTIwNUZcdTMwMDBcdTIwMjgiICsKKyAgICAiXHUyMDI5XHVGRUZG
IjsKK2lmICghU3RyaW5nLnByb3RvdHlwZS50cmltIHx8IHdzLnRyaW0oKSkgeworICAgIC8vIGh0
dHA6Ly9ibG9nLnN0ZXZlbmxldml0aGFuLmNvbS9hcmNoaXZlcy9mYXN0ZXItdHJpbS1qYXZhc2Ny
aXB0CisgICAgLy8gaHR0cDovL3BlcmZlY3Rpb25raWxscy5jb20vd2hpdGVzcGFjZS1kZXZpYXRp
b25zLworICAgIHdzID0gIlsiICsgd3MgKyAiXSI7CisgICAgdmFyIHRyaW1CZWdpblJlZ2V4cCA9
IG5ldyBSZWdFeHAoIl4iICsgd3MgKyB3cyArICIqIiksCisgICAgICAgIHRyaW1FbmRSZWdleHAg
PSBuZXcgUmVnRXhwKHdzICsgd3MgKyAiKiQiKTsKKyAgICBTdHJpbmcucHJvdG90eXBlLnRyaW0g
PSBmdW5jdGlvbiB0cmltKCkgeworICAgICAgICBpZiAodGhpcyA9PT0gdW5kZWZpbmVkIHx8IHRo
aXMgPT09IG51bGwpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoImNhbid0IGNv
bnZlcnQgIit0aGlzKyIgdG8gb2JqZWN0Iik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFN0
cmluZyh0aGlzKS5yZXBsYWNlKHRyaW1CZWdpblJlZ2V4cCwgIiIpLnJlcGxhY2UodHJpbUVuZFJl
Z2V4cCwgIiIpOworICAgIH07Cit9CisKKy8vCisvLyBVdGlsCisvLyA9PT09PT0KKy8vCisKKy8v
IEVTNSA5LjQKKy8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDkuNAorLy8gaHR0cDovL2pzcGVy
Zi5jb20vdG8taW50ZWdlcgordmFyIHRvSW50ZWdlciA9IGZ1bmN0aW9uIChuKSB7CisgICAgbiA9
ICtuOworICAgIGlmIChuICE9PSBuKSB7IC8vIGlzTmFOCisgICAgICAgIG4gPSAwOworICAgIH0g
ZWxzZSBpZiAobiAhPT0gMCAmJiBuICE9PSAoMS8wKSAmJiBuICE9PSAtKDEvMCkpIHsKKyAgICAg
ICAgbiA9IChuID4gMCB8fCAtMSkgKiBNYXRoLmZsb29yKE1hdGguYWJzKG4pKTsKKyAgICB9Cisg
ICAgcmV0dXJuIG47Cit9OworCit2YXIgcHJlcGFyZVN0cmluZyA9ICJhIlswXSAhPSAiYSI7Cisg
ICAgLy8gRVM1IDkuOQorICAgIC8vIGh0dHA6Ly9lczUuZ2l0aHViLmNvbS8jeDkuOQordmFyIHRv
T2JqZWN0ID0gZnVuY3Rpb24gKG8pIHsKKyAgICBpZiAobyA9PSBudWxsKSB7IC8vIHRoaXMgbWF0
Y2hlcyBib3RoIG51bGwgYW5kIHVuZGVmaW5lZAorICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9y
KCJjYW4ndCBjb252ZXJ0ICIrbysiIHRvIG9iamVjdCIpOworICAgIH0KKyAgICAvLyBJZiB0aGUg
aW1wbGVtZW50YXRpb24gZG9lc24ndCBzdXBwb3J0IGJ5LWluZGV4IGFjY2VzcyBvZgorICAgIC8v
IHN0cmluZyBjaGFyYWN0ZXJzIChleC4gSUUgPCA5KSwgc3BsaXQgdGhlIHN0cmluZworICAgIGlm
IChwcmVwYXJlU3RyaW5nICYmIHR5cGVvZiBvID09ICJzdHJpbmciICYmIG8pIHsKKyAgICAgICAg
cmV0dXJuIG8uc3BsaXQoIiIpOworICAgIH0KKyAgICByZXR1cm4gT2JqZWN0KG8pOworfTsKKwor
fSk7CkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1w
bGUtYXBwL2NvbXBvbmVudHMvZXM1LXNoaW0vZXM1LXNoaW0ubWluLmpzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29t
cG9uZW50cy9lczUtc2hpbS9lczUtc2hpbS5taW4uanMJKHJldmlzaW9uIDApCisrKyBQZXJmb3Jt
YW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMv
ZXM1LXNoaW0vZXM1LXNoaW0ubWluLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTMgQEAK
KyhmdW5jdGlvbihmKXsiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lP2RlZmluZShmKToiZnVuY3Rp
b24iPT10eXBlb2YgWVVJP1lVSS5hZGQoImVzNSIsZik6ZigpfSkoZnVuY3Rpb24oKXtGdW5jdGlv
bi5wcm90b3R5cGUuYmluZHx8KEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKGQpe3Zh
ciBjPXRoaXM7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGMpdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVu
Y3Rpb24ucHJvdG90eXBlLmJpbmQgY2FsbGVkIG9uIGluY29tcGF0aWJsZSAiK2MpO3ZhciBhPW4u
Y2FsbChhcmd1bWVudHMsMSksYj1mdW5jdGlvbigpe2lmKHRoaXMgaW5zdGFuY2VvZiBiKXt2YXIg
ZT1mdW5jdGlvbigpe307ZS5wcm90b3R5cGU9Yy5wcm90b3R5cGU7dmFyIGU9bmV3IGUsaT1jLmFw
cGx5KGUsYS5jb25jYXQobi5jYWxsKGFyZ3VtZW50cykpKTtyZXR1cm4gT2JqZWN0KGkpPT09aT9p
OmV9cmV0dXJuIGMuYXBwbHkoZCxhLmNvbmNhdChuLmNhbGwoYXJndW1lbnRzKSkpfTsKK3JldHVy
biBifSk7dmFyIGY9RnVuY3Rpb24ucHJvdG90eXBlLmNhbGwsbT1PYmplY3QucHJvdG90eXBlLG49
QXJyYXkucHJvdG90eXBlLnNsaWNlLGw9Zi5iaW5kKG0udG9TdHJpbmcpLG89Zi5iaW5kKG0uaGFz
T3duUHJvcGVydHkpO28obSwiX19kZWZpbmVHZXR0ZXJfXyIpJiYoZi5iaW5kKG0uX19kZWZpbmVH
ZXR0ZXJfXyksZi5iaW5kKG0uX19kZWZpbmVTZXR0ZXJfXyksZi5iaW5kKG0uX19sb29rdXBHZXR0
ZXJfXyksZi5iaW5kKG0uX19sb29rdXBTZXR0ZXJfXykpO0FycmF5LmlzQXJyYXl8fChBcnJheS5p
c0FycmF5PWZ1bmN0aW9uKGQpe3JldHVybiBsKGQpPT0iW29iamVjdCBBcnJheV0ifSk7QXJyYXku
cHJvdG90eXBlLmZvckVhY2h8fChBcnJheS5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbihkLGMp
e3ZhciBhPWoodGhpcyksYj0tMSxlPWEubGVuZ3RoPj4+MDtpZihsKGQpIT0iW29iamVjdCBGdW5j
dGlvbl0iKXRocm93IG5ldyBUeXBlRXJyb3I7Zm9yKDsrK2I8ZTspYiBpbgorYSYmZC5jYWxsKGMs
YVtiXSxiLGEpfSk7QXJyYXkucHJvdG90eXBlLm1hcHx8KEFycmF5LnByb3RvdHlwZS5tYXA9ZnVu
Y3Rpb24oZCxjKXt2YXIgYT1qKHRoaXMpLGI9YS5sZW5ndGg+Pj4wLGU9QXJyYXkoYik7aWYobChk
KSE9IltvYmplY3QgRnVuY3Rpb25dIil0aHJvdyBuZXcgVHlwZUVycm9yKGQrIiBpcyBub3QgYSBm
dW5jdGlvbiIpO2Zvcih2YXIgaT0wO2k8YjtpKyspaSBpbiBhJiYoZVtpXT1kLmNhbGwoYyxhW2ld
LGksYSkpO3JldHVybiBlfSk7QXJyYXkucHJvdG90eXBlLmZpbHRlcnx8KEFycmF5LnByb3RvdHlw
ZS5maWx0ZXI9ZnVuY3Rpb24oZCxjKXt2YXIgYT1qKHRoaXMpLGI9YS5sZW5ndGg+Pj4wLGU9W10s
aTtpZihsKGQpIT0iW29iamVjdCBGdW5jdGlvbl0iKXRocm93IG5ldyBUeXBlRXJyb3IoZCsiIGlz
IG5vdCBhIGZ1bmN0aW9uIik7Zm9yKHZhciBmPTA7ZjxiO2YrKylpZihmIGluIGEpe2k9YVtmXTtk
LmNhbGwoYyxpLGYsYSkmJmUucHVzaChpKX1yZXR1cm4gZX0pOworQXJyYXkucHJvdG90eXBlLmV2
ZXJ5fHwoQXJyYXkucHJvdG90eXBlLmV2ZXJ5PWZ1bmN0aW9uKGQsYyl7dmFyIGE9aih0aGlzKSxi
PWEubGVuZ3RoPj4+MDtpZihsKGQpIT0iW29iamVjdCBGdW5jdGlvbl0iKXRocm93IG5ldyBUeXBl
RXJyb3IoZCsiIGlzIG5vdCBhIGZ1bmN0aW9uIik7Zm9yKHZhciBlPTA7ZTxiO2UrKylpZihlIGlu
IGEmJiFkLmNhbGwoYyxhW2VdLGUsYSkpcmV0dXJuIGZhbHNlO3JldHVybiB0cnVlfSk7QXJyYXku
cHJvdG90eXBlLnNvbWV8fChBcnJheS5wcm90b3R5cGUuc29tZT1mdW5jdGlvbihkLGMpe3ZhciBh
PWoodGhpcyksYj1hLmxlbmd0aD4+PjA7aWYobChkKSE9IltvYmplY3QgRnVuY3Rpb25dIil0aHJv
dyBuZXcgVHlwZUVycm9yKGQrIiBpcyBub3QgYSBmdW5jdGlvbiIpO2Zvcih2YXIgZT0wO2U8Yjtl
KyspaWYoZSBpbiBhJiZkLmNhbGwoYyxhW2VdLGUsYSkpcmV0dXJuIHRydWU7cmV0dXJuIGZhbHNl
fSk7QXJyYXkucHJvdG90eXBlLnJlZHVjZXx8CisoQXJyYXkucHJvdG90eXBlLnJlZHVjZT1mdW5j
dGlvbihkKXt2YXIgYz1qKHRoaXMpLGE9Yy5sZW5ndGg+Pj4wO2lmKGwoZCkhPSJbb2JqZWN0IEZ1
bmN0aW9uXSIpdGhyb3cgbmV3IFR5cGVFcnJvcihkKyIgaXMgbm90IGEgZnVuY3Rpb24iKTtpZigh
YSYmYXJndW1lbnRzLmxlbmd0aD09MSl0aHJvdyBuZXcgVHlwZUVycm9yKCJyZWR1Y2Ugb2YgZW1w
dHkgYXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlIik7dmFyIGI9MCxlO2lmKGFyZ3VtZW50cy5s
ZW5ndGg+PTIpZT1hcmd1bWVudHNbMV07ZWxzZXtkb3tpZihiIGluIGMpe2U9Y1tiKytdO2JyZWFr
fWlmKCsrYj49YSl0aHJvdyBuZXcgVHlwZUVycm9yKCJyZWR1Y2Ugb2YgZW1wdHkgYXJyYXkgd2l0
aCBubyBpbml0aWFsIHZhbHVlIik7fXdoaWxlKDEpfWZvcig7YjxhO2IrKyliIGluIGMmJihlPWQu
Y2FsbCh2b2lkIDAsZSxjW2JdLGIsYykpO3JldHVybiBlfSk7QXJyYXkucHJvdG90eXBlLnJlZHVj
ZVJpZ2h0fHwoQXJyYXkucHJvdG90eXBlLnJlZHVjZVJpZ2h0PQorZnVuY3Rpb24oZCl7dmFyIGM9
aih0aGlzKSxhPWMubGVuZ3RoPj4+MDtpZihsKGQpIT0iW29iamVjdCBGdW5jdGlvbl0iKXRocm93
IG5ldyBUeXBlRXJyb3IoZCsiIGlzIG5vdCBhIGZ1bmN0aW9uIik7aWYoIWEmJmFyZ3VtZW50cy5s
ZW5ndGg9PTEpdGhyb3cgbmV3IFR5cGVFcnJvcigicmVkdWNlUmlnaHQgb2YgZW1wdHkgYXJyYXkg
d2l0aCBubyBpbml0aWFsIHZhbHVlIik7dmFyIGIsYT1hLTE7aWYoYXJndW1lbnRzLmxlbmd0aD49
MiliPWFyZ3VtZW50c1sxXTtlbHNle2Rve2lmKGEgaW4gYyl7Yj1jW2EtLV07YnJlYWt9aWYoLS1h
PDApdGhyb3cgbmV3IFR5cGVFcnJvcigicmVkdWNlUmlnaHQgb2YgZW1wdHkgYXJyYXkgd2l0aCBu
byBpbml0aWFsIHZhbHVlIik7fXdoaWxlKDEpfWRvIGEgaW4gdGhpcyYmKGI9ZC5jYWxsKHZvaWQg
MCxiLGNbYV0sYSxjKSk7d2hpbGUoYS0tKTtyZXR1cm4gYn0pO0FycmF5LnByb3RvdHlwZS5pbmRl
eE9mfHwoQXJyYXkucHJvdG90eXBlLmluZGV4T2Y9CitmdW5jdGlvbihkKXt2YXIgYz1qKHRoaXMp
LGE9Yy5sZW5ndGg+Pj4wO2lmKCFhKXJldHVybi0xO3ZhciBiPTA7YXJndW1lbnRzLmxlbmd0aD4x
JiYoYj1wKGFyZ3VtZW50c1sxXSkpO2ZvcihiPWI+PTA/YjpNYXRoLm1heCgwLGErYik7YjxhO2Ir
KylpZihiIGluIGMmJmNbYl09PT1kKXJldHVybiBiO3JldHVybi0xfSk7QXJyYXkucHJvdG90eXBl
Lmxhc3RJbmRleE9mfHwoQXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mPWZ1bmN0aW9uKGQpe3Zh
ciBjPWoodGhpcyksYT1jLmxlbmd0aD4+PjA7aWYoIWEpcmV0dXJuLTE7dmFyIGI9YS0xO2FyZ3Vt
ZW50cy5sZW5ndGg+MSYmKGI9TWF0aC5taW4oYixwKGFyZ3VtZW50c1sxXSkpKTtmb3IoYj1iPj0w
P2I6YS1NYXRoLmFicyhiKTtiPj0wO2ItLSlpZihiIGluIGMmJmQ9PT1jW2JdKXJldHVybiBiO3Jl
dHVybi0xfSk7aWYoIU9iamVjdC5rZXlzKXt2YXIgcT0hMCxyPSJ0b1N0cmluZyB0b0xvY2FsZVN0
cmluZyB2YWx1ZU9mIGhhc093blByb3BlcnR5IGlzUHJvdG90eXBlT2YgcHJvcGVydHlJc0VudW1l
cmFibGUgY29uc3RydWN0b3IiLnNwbGl0KCIgIiksCitzPXIubGVuZ3RoLHQ7Zm9yKHQgaW57dG9T
dHJpbmc6bnVsbH0pcT0hMTtPYmplY3Qua2V5cz1mdW5jdGlvbihkKXtpZih0eXBlb2YgZCE9Im9i
amVjdCImJnR5cGVvZiBkIT0iZnVuY3Rpb24ifHxkPT09bnVsbCl0aHJvdyBuZXcgVHlwZUVycm9y
KCJPYmplY3Qua2V5cyBjYWxsZWQgb24gYSBub24tb2JqZWN0Iik7dmFyIGM9W10sYTtmb3IoYSBp
biBkKW8oZCxhKSYmYy5wdXNoKGEpO2lmKHEpZm9yKGE9MDthPHM7YSsrKXt2YXIgYj1yW2FdO28o
ZCxiKSYmYy5wdXNoKGIpfXJldHVybiBjfX1pZighRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmd8
fC0xPT09KG5ldyBEYXRlKC02MjE5ODc1NTJFNSkpLnRvSVNPU3RyaW5nKCkuaW5kZXhPZigiLTAw
MDAwMSIpKURhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nPWZ1bmN0aW9uKCl7dmFyIGQsYyxhLGI7
aWYoIWlzRmluaXRlKHRoaXMpKXRocm93IG5ldyBSYW5nZUVycm9yKCJEYXRlLnByb3RvdHlwZS50
b0lTT1N0cmluZyBjYWxsZWQgb24gbm9uLWZpbml0ZSB2YWx1ZS4iKTsKK2Q9W3RoaXMuZ2V0VVRD
TW9udGgoKSsxLHRoaXMuZ2V0VVRDRGF0ZSgpLHRoaXMuZ2V0VVRDSG91cnMoKSx0aGlzLmdldFVU
Q01pbnV0ZXMoKSx0aGlzLmdldFVUQ1NlY29uZHMoKV07Yj10aGlzLmdldFVUQ0Z1bGxZZWFyKCk7
Yj0oYjwwPyItIjpiPjk5OTk/IisiOiIiKSsoIjAwMDAwIitNYXRoLmFicyhiKSkuc2xpY2UoMDw9
YiYmYjw9OTk5OT8tNDotNik7Zm9yKGM9ZC5sZW5ndGg7Yy0tOyl7YT1kW2NdO2E8MTAmJihkW2Nd
PSIwIithKX1yZXR1cm4gYisiLSIrZC5zbGljZSgwLDIpLmpvaW4oIi0iKSsiVCIrZC5zbGljZSgy
KS5qb2luKCI6IikrIi4iKygiMDAwIit0aGlzLmdldFVUQ01pbGxpc2Vjb25kcygpKS5zbGljZSgt
MykrIloifTtEYXRlLm5vd3x8KERhdGUubm93PWZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlKS5n
ZXRUaW1lKCl9KTtEYXRlLnByb3RvdHlwZS50b0pTT058fChEYXRlLnByb3RvdHlwZS50b0pTT049
ZnVuY3Rpb24oKXtpZih0eXBlb2YgdGhpcy50b0lTT1N0cmluZyE9CisiZnVuY3Rpb24iKXRocm93
IG5ldyBUeXBlRXJyb3IoInRvSVNPU3RyaW5nIHByb3BlcnR5IGlzIG5vdCBjYWxsYWJsZSIpO3Jl
dHVybiB0aGlzLnRvSVNPU3RyaW5nKCl9KTtpZighRGF0ZS5wYXJzZXx8ODY0RTEzIT09RGF0ZS5w
YXJzZSgiKzI3NTc2MC0wOS0xM1QwMDowMDowMC4wMDBaIikpe3ZhciBnPURhdGUsZj1mdW5jdGlv
biBjKGEsYixlLGYsaCxqLGwpe3ZhciBrPWFyZ3VtZW50cy5sZW5ndGg7aWYodGhpcyBpbnN0YW5j
ZW9mIGcpe2s9az09MSYmU3RyaW5nKGEpPT09YT9uZXcgZyhjLnBhcnNlKGEpKTprPj03P25ldyBn
KGEsYixlLGYsaCxqLGwpOms+PTY/bmV3IGcoYSxiLGUsZixoLGopOms+PTU/bmV3IGcoYSxiLGUs
ZixoKTprPj00P25ldyBnKGEsYixlLGYpOms+PTM/bmV3IGcoYSxiLGUpOms+PTI/bmV3IGcoYSxi
KTprPj0xP25ldyBnKGEpOm5ldyBnO2suY29uc3RydWN0b3I9YztyZXR1cm4ga31yZXR1cm4gZy5h
cHBseSh0aGlzLGFyZ3VtZW50cyl9LHU9UmVnRXhwKCJeKFxcZHs0fXxbKy1dXFxkezZ9KSg/Oi0o
XFxkezJ9KSg/Oi0oXFxkezJ9KSg/OlQoXFxkezJ9KTooXFxkezJ9KSg/OjooXFxkezJ9KSg/Olxc
LihcXGR7M30pKT8pPyg/Olp8KD86KFstK10pKFxcZHsyfSk6KFxcZHsyfSkpKT8pPyk/KT8kIiks
CitoO2ZvcihoIGluIGcpZltoXT1nW2hdO2Yubm93PWcubm93O2YuVVRDPWcuVVRDO2YucHJvdG90
eXBlPWcucHJvdG90eXBlO2YucHJvdG90eXBlLmNvbnN0cnVjdG9yPWY7Zi5wYXJzZT1mdW5jdGlv
bihjKXt2YXIgYT11LmV4ZWMoYyk7aWYoYSl7YS5zaGlmdCgpO2Zvcih2YXIgYj0xO2I8NztiKysp
e2FbYl09KyhhW2JdfHwoYjwzPzE6MCkpO2I9PTEmJmFbYl0tLX12YXIgZT0rYS5wb3AoKSxmPSth
LnBvcCgpLGg9YS5wb3AoKSxiPTA7aWYoaCl7aWYoZj4yM3x8ZT41OSlyZXR1cm4gTmFOO2I9KGYq
NjArZSkqNkU0KihoPT0iKyI/LTE6MSl9ZT0rYVswXTtpZigwPD1lJiZlPD05OSl7YVswXT1lKzQw
MDtyZXR1cm4gZy5VVEMuYXBwbHkodGhpcyxhKStiLTEyNjIyNzgwOEU1fXJldHVybiBnLlVUQy5h
cHBseSh0aGlzLGEpK2J9cmV0dXJuIGcucGFyc2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtEYXRl
PWZ9aD0iXHRcblx4MEJcZlxyIFx1MDBhMFx1MTY4MFx1MTgwZVx1MjAwMFx1MjAwMVx1MjAwMlx1
MjAwM1x1MjAwNFx1MjAwNVx1MjAwNlx1MjAwN1x1MjAwOFx1MjAwOVx1MjAwYVx1MjAyZlx1MjA1
Zlx1MzAwMFx1MjAyOFx1MjAyOVx1ZmVmZiI7CitpZighU3RyaW5nLnByb3RvdHlwZS50cmltfHxo
LnRyaW0oKSl7aD0iWyIraCsiXSI7dmFyIHY9UmVnRXhwKCJeIitoK2grIioiKSx3PVJlZ0V4cCho
K2grIiokIik7U3RyaW5nLnByb3RvdHlwZS50cmltPWZ1bmN0aW9uKCl7aWYodGhpcz09PXZvaWQg
MHx8dGhpcz09PW51bGwpdGhyb3cgbmV3IFR5cGVFcnJvcigiY2FuJ3QgY29udmVydCAiK3RoaXMr
IiB0byBvYmplY3QiKTtyZXR1cm4gU3RyaW5nKHRoaXMpLnJlcGxhY2UodiwiIikucmVwbGFjZSh3
LCIiKX19dmFyIHA9ZnVuY3Rpb24oYyl7Yz0rYztjIT09Yz9jPTA6YyE9PTAmJihjIT09MS8wJiZj
IT09LSgxLzApKSYmKGM9KGM+MHx8LTEpKk1hdGguZmxvb3IoTWF0aC5hYnMoYykpKTtyZXR1cm4g
Y30seD0iYSIhPSJhIlswXSxqPWZ1bmN0aW9uKGMpe2lmKGM9PW51bGwpdGhyb3cgbmV3IFR5cGVF
cnJvcigiY2FuJ3QgY29udmVydCAiK2MrIiB0byBvYmplY3QiKTtyZXR1cm4geCYmdHlwZW9mIGM9
PSJzdHJpbmciJiZjP2Muc3BsaXQoIiIpOgorT2JqZWN0KGMpfX0pOwpJbmRleDogUGVyZm9ybWFu
Y2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2Vz
NS1zaGltL3BhY2thZ2UuanNvbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0RvWW91
RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvZXM1LXNoaW0vcGFja2Fn
ZS5qc29uCShyZXZpc2lvbiAwKQorKysgUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9m
bGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2VzNS1zaGltL3BhY2thZ2UuanNvbgkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDMxIEBACit7CisgICAgIm5hbWUiOiAiZXM1LXNoaW0iLAor
ICAgICJ2ZXJzaW9uIjogIjIuMC4wIiwKKyAgICAiZGVzY3JpcHRpb24iOiAiRVM1IGFzIGltcGxl
bWVudGFibGUgb24gcHJldmlvdXMgZW5naW5lcyIsCisgICAgImhvbWVwYWdlIjogImh0dHA6Ly9n
aXRodWIuY29tL2tyaXNrb3dhbC9lczUtc2hpbS8iLAorICAgICJjb250cmlidXRvcnMiOiBbCisg
ICAgICAgICJLcmlzIEtvd2FsIDxrcmlzQGNpeGFyLmNvbT4gKGh0dHA6Ly9naXRodWIuY29tL2ty
aXNrb3dhbC8pIiwKKyAgICAgICAgIlNhbWkgU2FtaHVyaSA8c2FtaS5zYW1odXJpQGdtYWlsLmNv
bT4gKGh0dHA6Ly9zYW1odXJpLm5ldC8pIiwKKyAgICAgICAgIkZsb3JpYW4gU2Now6RmZXIgPGZs
b3JpYW4uc2NoYWVmZXJAZ21haWwuY29tPiAoaHR0cDovL2dpdGh1Yi5jb20vZnNjaGFlZmVyKSIs
CisgICAgICAgICJJcmFrbGkgR296YWxpc2h2aWxpIDxyZm9iaWNAZ21haWwuY29tPiAoaHR0cDov
L2plZGl0b29sa2l0LmNvbSkiLAorICAgICAgICAiS2l0IENhbWJyaWRnZSA8a2l0Y2FtYnJpZGdl
QGdtYWlsLmNvbT4gKGh0dHA6Ly9raXRjYW1icmlkZ2UuZ2l0aHViLmNvbSkiCisgICAgXSwKKyAg
ICAiYnVncyI6IHsKKyAgICAgICAgIm1haWwiOiAia3Jpc0BjaXhhci5jb20iLAorICAgICAgICAi
dXJsIjogImh0dHA6Ly9naXRodWIuY29tL2tyaXNrb3dhbC9lczUtc2hpbS9pc3N1ZXMiCisgICAg
fSwKKyAgICAibGljZW5zZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJ0eXBlIjogIk1J
VCIsCisgICAgICAgICAgICAidXJsIjogImh0dHA6Ly9naXRodWIuY29tL2tyaXNrb3dhbC9lczUt
c2hpbS9yYXcvbWFzdGVyL0xJQ0VOU0UiCisgICAgICAgIH0KKyAgICBdLAorICAgICJtYWluIjog
ImVzNS1zaGltLmpzIiwKKyAgICAicmVwb3NpdG9yeSI6IHsKKyAgICAgICAgInR5cGUiOiAiZ2l0
IiwKKyAgICAgICAgInVybCI6ICJodHRwOi8vZ2l0aHViLmNvbS9rcmlza293YWwvZXM1LXNoaW0u
Z2l0IgorICAgIH0sCisgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MC4yLjAi
CisgICAgfQorfQpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRq
cy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2VzNS1zaGltL3Rlc3RzL2luZGV4Lmh0bWwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxl
LWFwcC9jb21wb25lbnRzL2VzNS1zaGltL3Rlc3RzL2luZGV4Lmh0bWwJKHJldmlzaW9uIDApCisr
KyBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2Nv
bXBvbmVudHMvZXM1LXNoaW0vdGVzdHMvaW5kZXguaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDYyIEBACis8IURPQ1RZUEUgSFRNTD4KKzxodG1sPgorPGhlYWQ+CisgICAgPHRpdGxlPkph
c21pbmUgU3BlYyBSdW5uZXI8L3RpdGxlPgorCisgICAgPGxpbmsgcmVsPSJzaG9ydGN1dCBpY29u
IiB0eXBlPSJpbWFnZS9wbmciIGhyZWY9ImxpYi9qYXNtaW5lX2Zhdmljb24ucG5nIj4KKworICAg
IDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9ImxpYi9qYXNtaW5l
LmNzcyI+CisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ibGliL2phc21p
bmUuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9
ImxpYi9qYXNtaW5lLWh0bWwuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9q
YXZhc2NyaXB0IiBzcmM9ImxpYi9qc29uMi5qcyI+PC9zY3JpcHQ+CisKKyAgICA8IS0tIGluY2x1
ZGUgaGVscGVyIGZpbGVzIGhlcmUuLi4gLS0+CisgICAgPHNjcmlwdCBzcmM9ImhlbHBlcnMvaC5q
cyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9ImhlbHBlcnMvaC1raWxsLmpzIj48L3Njcmlw
dD4KKyAgICA8c2NyaXB0IHNyYz0iaGVscGVycy9oLW1hdGNoZXJzLmpzIj48L3NjcmlwdD4KKwor
ICAgIDwhLS0gaW5jbHVkZSBzb3VyY2UgZmlsZXMgaGVyZS4uLiAtLT4KKyAgICA8c2NyaXB0IHNy
Yz0iLi4vZXM1LXNoaW0uanMiPjwvc2NyaXB0PgorCisgICAgPCEtLSBpbmNsdWRlIHNwZWMgZmls
ZXMgaGVyZS4uLiAtLT4KKyAgICA8c2NyaXB0IHNyYz0ic3BlYy9zLWFycmF5LmpzIj48L3Njcmlw
dD4KKyAgICA8c2NyaXB0IHNyYz0ic3BlYy9zLWZ1bmN0aW9uLmpzIj48L3NjcmlwdD4KKyAgICA8
c2NyaXB0IHNyYz0ic3BlYy9zLXN0cmluZy5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9
InNwZWMvcy1vYmplY3QuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJzcGVjL3MtZGF0
ZS5qcyI+PC9zY3JpcHQ+CisKKworICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4K
KyAgICAgICAgKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgdmFyIGphc21pbmVFbnYgPSBqYXNt
aW5lLmdldEVudigpOworICAgICAgICAgICAgamFzbWluZUVudi51cGRhdGVJbnRlcnZhbCA9IDEw
MDA7CisKKyAgICAgICAgICAgIHZhciB0cml2aWFsUmVwb3J0ZXIgPSBuZXcgamFzbWluZS5Ucml2
aWFsUmVwb3J0ZXIoKTsKKworICAgICAgICAgICAgamFzbWluZUVudi5hZGRSZXBvcnRlcih0cml2
aWFsUmVwb3J0ZXIpOworCisgICAgICAgICAgICBqYXNtaW5lRW52LnNwZWNGaWx0ZXIgPSBmdW5j
dGlvbihzcGVjKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRyaXZpYWxSZXBvcnRlci5zcGVj
RmlsdGVyKHNwZWMpOworICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgdmFyIGN1cnJlbnRX
aW5kb3dPbmxvYWQgPSB3aW5kb3cub25sb2FkOworCisgICAgICAgICAgICB3aW5kb3cub25sb2Fk
ID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRXaW5kb3dPbmxvYWQp
IHsKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudFdpbmRvd09ubG9hZCgpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBleGVjSmFzbWluZSgpOworICAgICAgICAgICAgfTsK
KworICAgICAgICAgICAgZnVuY3Rpb24gZXhlY0phc21pbmUoKSB7CisgICAgICAgICAgICAgICAg
amFzbWluZUVudi5leGVjdXRlKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgfSkoKTsKKyAg
ICA8L3NjcmlwdD4KKworPC9oZWFkPgorCis8Ym9keT4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6
IFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29t
cG9uZW50cy9lczUtc2hpbS90ZXN0cy9oZWxwZXJzL2gta2lsbC5qcwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQ
ZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBv
bmVudHMvZXM1LXNoaW0vdGVzdHMvaGVscGVycy9oLWtpbGwuanMJKHJldmlzaW9uIDApCisrKyBQ
ZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBv
bmVudHMvZXM1LXNoaW0vdGVzdHMvaGVscGVycy9oLWtpbGwuanMJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw1OSBAQAorLy8gVGhpcyBtZXRob2RzIGFsbG93cyB0aGUga2lsbGluZyBvZiBidWls
dC1pbiBmdW5jdGlvbnMsCisvLyBzbyB0aGUgc2hpbSBjYW4gdGFrZSBvdmVyIHdpdGggdGhhdCBp
bXBsZW1lbnRhdGlvbgordmFyIEhMUCA9IChmdW5jdGlvbigpIHsKKyAgICAidXNlIHN0cmljdCI7
CisgICAgdmFyIGtpbGw7CisgICAgCisgICAga2lsbCA9IGZ1bmN0aW9uKF9jbGFzcywgbWV0aG9k
cykgeworICAgICAgICAvKmlmKCFBcnJheS5pc0FycmF5KG1ldGhvZHMpKQorICAgICAgICAgICAg
cmV0dXJuOyovCisgICAgICAgIGlmKCFfY2xhc3Mub3JpZ2luYWxzKQorICAgICAgICAgICAgX2Ns
YXNzLm9yaWdpbmFscyA9IHt9OworCisgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBtZXRo
b2RzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7CisgICAgICAgICAgICB2YXIgb2JqID0gbWV0aG9k
c1tpXTsKKyAgICAgICAgICAgIF9jbGFzcy5vcmlnaW5hbHNbb2JqXSA9IF9jbGFzc1tvYmpdOwor
ICAgICAgICAgICAgZGVsZXRlIF9jbGFzc1tvYmpdOworICAgICAgICAgICAgaWYgKG9iaiBpbiBf
Y2xhc3MpIHsKKyAgICAgICAgICAgICAgICAvLyB0cnkgc29tZXRoaW5nIG1vcmUgYWdncmVzc2l2
ZSBzaW5jZSBWOCBhdCBsZWFzdAorICAgICAgICAgICAgICAgIC8vIGFwcGVhcnMgdG8gaWdub3Jl
IHRoZSBkZWxldGUuCisgICAgICAgICAgICAgICAgX2NsYXNzW29ial0gPSBudWxsOworICAgICAg
ICAgICAgICAgIGlmIChfY2xhc3Nbb2JqXSkgeworICAgICAgICAgICAgICAgICAgICBjb25zb2xl
LmxvZygiQ291bG4ndCBvdmVyd3JpdGUiLCBvYmosICJvZiIsIF9jbGFzcyk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICByZXR1cm4geyBr
aWxsOiBraWxsIH07Cit9KCkpOworCitITFAua2lsbChGdW5jdGlvbi5wcm90b3R5cGUsIFsKKyAg
ICAnYmluZCcKK10pOworCitITFAua2lsbChBcnJheSwgWworICAgICdpc0FycmF5JworXSk7CisK
K0hMUC5raWxsKFN0cmluZy5wcm90b3R5cGUsIFsKKyAgICAidHJpbSIKK10pOworCitITFAua2ls
bChPYmplY3QsIFsKKyAgICAna2V5cycKK10pOworCitITFAua2lsbChEYXRlLCBbCisgICAgJ25v
dycsICdwYXJzZScKK10pOworCitITFAua2lsbChEYXRlLnByb3RvdHlwZSwgWworICAgICJ0b0pT
T04iLCAidG9JU09TdHJpbmciCitdKTsKKworSExQLmtpbGwoQXJyYXkucHJvdG90eXBlLCBbCisg
ICAgJ2ZvckVhY2gnLCAnc29tZScsICdldmVyeScsIAorICAgICdpbmRleE9mJywgJ2xhc3RJbmRl
eE9mJywgCisgICAgJ21hcCcsICdmaWx0ZXInLCAKKyAgICAncmVkdWNlJywgJ3JlZHVjZVJpZ2h0
JworXSk7CkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4
YW1wbGUtYXBwL2NvbXBvbmVudHMvZXM1LXNoaW0vdGVzdHMvaGVscGVycy9oLW1hdGNoZXJzLmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMt
ZXhhbXBsZS1hcHAvY29tcG9uZW50cy9lczUtc2hpbS90ZXN0cy9oZWxwZXJzL2gtbWF0Y2hlcnMu
anMJKHJldmlzaW9uIDApCisrKyBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdo
dGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvZXM1LXNoaW0vdGVzdHMvaGVscGVycy9oLW1hdGNo
ZXJzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzQgQEAKK2JlZm9yZUVhY2goZnVuY3Rp
b24oKSB7CisgICAgdGhpcy5hZGRNYXRjaGVycyh7CisgICAgICAgIHRvRXhhY3RseU1hdGNoOiBm
dW5jdGlvbihleHBlY3RlZCkgeworICAgICAgICAgICAgdmFyIGExLCBhMiwKKyAgICAgICAgICAg
ICAgICBsLCBpLAorICAgICAgICAgICAgICAgIGtleSwKKyAgICAgICAgICAgICAgICBhY3R1YWwg
PSB0aGlzLmFjdHVhbDsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgdmFyIGdldEtleXMgPSBm
dW5jdGlvbihvKSB7CisgICAgICAgICAgICAgICAgdmFyIGEgPSBbXTsKKyAgICAgICAgICAgICAg
ICBmb3Ioa2V5IGluIG8pIHsKKyAgICAgICAgICAgICAgICAgICAgaWYoby5oYXNPd25Qcm9wZXJ0
eShrZXkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhLnB1c2goa2V5KTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4g
YTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGExID0gZ2V0S2V5cyhhY3R1YWwpOworICAg
ICAgICAgICAgYTIgPSBnZXRLZXlzKGV4cGVjdGVkKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgbCA9IGExLmxlbmd0aDsKKyAgICAgICAgICAgIGlmKGwgIT09IGEyLmxlbmd0aCkgeworICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZv
cihpID0gMDsgaSA8IGw7IGkrKykgeworICAgICAgICAgICAgICAgIGtleSA9IGExW2ldOworICAg
ICAgICAgICAgICAgIGV4cGVjdChrZXkpLnRvRXF1YWwoYTJbaV0pOworICAgICAgICAgICAgICAg
IGV4cGVjdChhY3R1YWxba2V5XSkudG9FcXVhbChleHBlY3RlZFtrZXldKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAg
ICB9KQorfSk7CkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpz
LWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvZXM1LXNoaW0vdGVzdHMvaGVscGVycy9oLmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBs
ZS1hcHAvY29tcG9uZW50cy9lczUtc2hpbS90ZXN0cy9oZWxwZXJzL2guanMJKHJldmlzaW9uIDAp
CisrKyBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBw
L2NvbXBvbmVudHMvZXM1LXNoaW0vdGVzdHMvaGVscGVycy9oLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMyBAQAorZnVuY3Rpb24gaW1wbGVtZW50KCkgeworICAgIHRocm93ICdOb3QgaW1w
bGVtZW50ZWQnOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IFBlcmZvcm1h
bmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9l
czUtc2hpbS90ZXN0cy9saWIvamFzbWluZS1odG1sLmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1h
bmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9l
czUtc2hpbS90ZXN0cy9saWIvamFzbWluZS1odG1sLmpzCShyZXZpc2lvbiAwKQorKysgUGVyZm9y
bWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRz
L2VzNS1zaGltL3Rlc3RzL2xpYi9qYXNtaW5lLWh0bWwuanMJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxOTAgQEAKK2phc21pbmUuVHJpdmlhbFJlcG9ydGVyID0gZnVuY3Rpb24oZG9jKSB7Cisg
IHRoaXMuZG9jdW1lbnQgPSBkb2MgfHwgZG9jdW1lbnQ7CisgIHRoaXMuc3VpdGVEaXZzID0ge307
CisgIHRoaXMubG9nUnVubmluZ1NwZWNzID0gZmFsc2U7Cit9OworCitqYXNtaW5lLlRyaXZpYWxS
ZXBvcnRlci5wcm90b3R5cGUuY3JlYXRlRG9tID0gZnVuY3Rpb24odHlwZSwgYXR0cnMsIGNoaWxk
cmVuVmFyQXJncykgeworICB2YXIgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHR5cGUpOwor
CisgIGZvciAodmFyIGkgPSAyOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7CisgICAgdmFy
IGNoaWxkID0gYXJndW1lbnRzW2ldOworCisgICAgaWYgKHR5cGVvZiBjaGlsZCA9PT0gJ3N0cmlu
ZycpIHsKKyAgICAgIGVsLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNoaWxk
KSk7CisgICAgfSBlbHNlIHsKKyAgICAgIGlmIChjaGlsZCkgeyBlbC5hcHBlbmRDaGlsZChjaGls
ZCk7IH0KKyAgICB9CisgIH0KKworICBmb3IgKHZhciBhdHRyIGluIGF0dHJzKSB7CisgICAgaWYg
KGF0dHIgPT0gImNsYXNzTmFtZSIpIHsKKyAgICAgIGVsW2F0dHJdID0gYXR0cnNbYXR0cl07Cisg
ICAgfSBlbHNlIHsKKyAgICAgIGVsLnNldEF0dHJpYnV0ZShhdHRyLCBhdHRyc1thdHRyXSk7Cisg
ICAgfQorICB9CisKKyAgcmV0dXJuIGVsOworfTsKKworamFzbWluZS5Ucml2aWFsUmVwb3J0ZXIu
cHJvdG90eXBlLnJlcG9ydFJ1bm5lclN0YXJ0aW5nID0gZnVuY3Rpb24ocnVubmVyKSB7CisgIHZh
ciBzaG93UGFzc2VkLCBzaG93U2tpcHBlZDsKKworICB0aGlzLm91dGVyRGl2ID0gdGhpcy5jcmVh
dGVEb20oJ2RpdicsIHsgY2xhc3NOYW1lOiAnamFzbWluZV9yZXBvcnRlcicgfSwKKyAgICAgIHRo
aXMuY3JlYXRlRG9tKCdkaXYnLCB7IGNsYXNzTmFtZTogJ2Jhbm5lcicgfSwKKyAgICAgICAgdGhp
cy5jcmVhdGVEb20oJ2RpdicsIHsgY2xhc3NOYW1lOiAnbG9nbycgfSwKKyAgICAgICAgICAgIHRo
aXMuY3JlYXRlRG9tKCdzcGFuJywgeyBjbGFzc05hbWU6ICd0aXRsZScgfSwgIkphc21pbmUiKSwK
KyAgICAgICAgICAgIHRoaXMuY3JlYXRlRG9tKCdzcGFuJywgeyBjbGFzc05hbWU6ICd2ZXJzaW9u
JyB9LCBydW5uZXIuZW52LnZlcnNpb25TdHJpbmcoKSkpLAorICAgICAgICB0aGlzLmNyZWF0ZURv
bSgnZGl2JywgeyBjbGFzc05hbWU6ICdvcHRpb25zJyB9LAorICAgICAgICAgICAgIlNob3cgIiwK
KyAgICAgICAgICAgIHNob3dQYXNzZWQgPSB0aGlzLmNyZWF0ZURvbSgnaW5wdXQnLCB7IGlkOiAi
X19qYXNtaW5lX1RyaXZpYWxSZXBvcnRlcl9zaG93UGFzc2VkX18iLCB0eXBlOiAnY2hlY2tib3gn
IH0pLAorICAgICAgICAgICAgdGhpcy5jcmVhdGVEb20oJ2xhYmVsJywgeyAiZm9yIjogIl9famFz
bWluZV9Ucml2aWFsUmVwb3J0ZXJfc2hvd1Bhc3NlZF9fIiB9LCAiIHBhc3NlZCAiKSwKKyAgICAg
ICAgICAgIHNob3dTa2lwcGVkID0gdGhpcy5jcmVhdGVEb20oJ2lucHV0JywgeyBpZDogIl9famFz
bWluZV9Ucml2aWFsUmVwb3J0ZXJfc2hvd1NraXBwZWRfXyIsIHR5cGU6ICdjaGVja2JveCcgfSks
CisgICAgICAgICAgICB0aGlzLmNyZWF0ZURvbSgnbGFiZWwnLCB7ICJmb3IiOiAiX19qYXNtaW5l
X1RyaXZpYWxSZXBvcnRlcl9zaG93U2tpcHBlZF9fIiB9LCAiIHNraXBwZWQiKQorICAgICAgICAg
ICAgKQorICAgICAgICAgICksCisKKyAgICAgIHRoaXMucnVubmVyRGl2ID0gdGhpcy5jcmVhdGVE
b20oJ2RpdicsIHsgY2xhc3NOYW1lOiAncnVubmVyIHJ1bm5pbmcnIH0sCisgICAgICAgICAgdGhp
cy5jcmVhdGVEb20oJ2EnLCB7IGNsYXNzTmFtZTogJ3J1bl9zcGVjJywgaHJlZjogJz8nIH0sICJy
dW4gYWxsIiksCisgICAgICAgICAgdGhpcy5ydW5uZXJNZXNzYWdlU3BhbiA9IHRoaXMuY3JlYXRl
RG9tKCdzcGFuJywge30sICJSdW5uaW5nLi4uIiksCisgICAgICAgICAgdGhpcy5maW5pc2hlZEF0
U3BhbiA9IHRoaXMuY3JlYXRlRG9tKCdzcGFuJywgeyBjbGFzc05hbWU6ICdmaW5pc2hlZC1hdCcg
fSwgIiIpKQorICAgICAgKTsKKworICB0aGlzLmRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhp
cy5vdXRlckRpdik7CisKKyAgdmFyIHN1aXRlcyA9IHJ1bm5lci5zdWl0ZXMoKTsKKyAgZm9yICh2
YXIgaSA9IDA7IGkgPCBzdWl0ZXMubGVuZ3RoOyBpKyspIHsKKyAgICB2YXIgc3VpdGUgPSBzdWl0
ZXNbaV07CisgICAgdmFyIHN1aXRlRGl2ID0gdGhpcy5jcmVhdGVEb20oJ2RpdicsIHsgY2xhc3NO
YW1lOiAnc3VpdGUnIH0sCisgICAgICAgIHRoaXMuY3JlYXRlRG9tKCdhJywgeyBjbGFzc05hbWU6
ICdydW5fc3BlYycsIGhyZWY6ICc/c3BlYz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHN1aXRlLmdl
dEZ1bGxOYW1lKCkpIH0sICJydW4iKSwKKyAgICAgICAgdGhpcy5jcmVhdGVEb20oJ2EnLCB7IGNs
YXNzTmFtZTogJ2Rlc2NyaXB0aW9uJywgaHJlZjogJz9zcGVjPScgKyBlbmNvZGVVUklDb21wb25l
bnQoc3VpdGUuZ2V0RnVsbE5hbWUoKSkgfSwgc3VpdGUuZGVzY3JpcHRpb24pKTsKKyAgICB0aGlz
LnN1aXRlRGl2c1tzdWl0ZS5pZF0gPSBzdWl0ZURpdjsKKyAgICB2YXIgcGFyZW50RGl2ID0gdGhp
cy5vdXRlckRpdjsKKyAgICBpZiAoc3VpdGUucGFyZW50U3VpdGUpIHsKKyAgICAgIHBhcmVudERp
diA9IHRoaXMuc3VpdGVEaXZzW3N1aXRlLnBhcmVudFN1aXRlLmlkXTsKKyAgICB9CisgICAgcGFy
ZW50RGl2LmFwcGVuZENoaWxkKHN1aXRlRGl2KTsKKyAgfQorCisgIHRoaXMuc3RhcnRlZEF0ID0g
bmV3IERhdGUoKTsKKworICB2YXIgc2VsZiA9IHRoaXM7CisgIHNob3dQYXNzZWQub25jbGljayA9
IGZ1bmN0aW9uKGV2dCkgeworICAgIGlmIChzaG93UGFzc2VkLmNoZWNrZWQpIHsKKyAgICAgIHNl
bGYub3V0ZXJEaXYuY2xhc3NOYW1lICs9ICcgc2hvdy1wYXNzZWQnOworICAgIH0gZWxzZSB7Cisg
ICAgICBzZWxmLm91dGVyRGl2LmNsYXNzTmFtZSA9IHNlbGYub3V0ZXJEaXYuY2xhc3NOYW1lLnJl
cGxhY2UoLyBzaG93LXBhc3NlZC8sICcnKTsKKyAgICB9CisgIH07CisKKyAgc2hvd1NraXBwZWQu
b25jbGljayA9IGZ1bmN0aW9uKGV2dCkgeworICAgIGlmIChzaG93U2tpcHBlZC5jaGVja2VkKSB7
CisgICAgICBzZWxmLm91dGVyRGl2LmNsYXNzTmFtZSArPSAnIHNob3ctc2tpcHBlZCc7CisgICAg
fSBlbHNlIHsKKyAgICAgIHNlbGYub3V0ZXJEaXYuY2xhc3NOYW1lID0gc2VsZi5vdXRlckRpdi5j
bGFzc05hbWUucmVwbGFjZSgvIHNob3ctc2tpcHBlZC8sICcnKTsKKyAgICB9CisgIH07Cit9Owor
CitqYXNtaW5lLlRyaXZpYWxSZXBvcnRlci5wcm90b3R5cGUucmVwb3J0UnVubmVyUmVzdWx0cyA9
IGZ1bmN0aW9uKHJ1bm5lcikgeworICB2YXIgcmVzdWx0cyA9IHJ1bm5lci5yZXN1bHRzKCk7Cisg
IHZhciBjbGFzc05hbWUgPSAocmVzdWx0cy5mYWlsZWRDb3VudCA+IDApID8gInJ1bm5lciBmYWls
ZWQiIDogInJ1bm5lciBwYXNzZWQiOworICB0aGlzLnJ1bm5lckRpdi5zZXRBdHRyaWJ1dGUoImNs
YXNzIiwgY2xhc3NOYW1lKTsKKyAgLy9kbyBpdCB0d2ljZSBmb3IgSUUKKyAgdGhpcy5ydW5uZXJE
aXYuc2V0QXR0cmlidXRlKCJjbGFzc05hbWUiLCBjbGFzc05hbWUpOworICB2YXIgc3BlY3MgPSBy
dW5uZXIuc3BlY3MoKTsKKyAgdmFyIHNwZWNDb3VudCA9IDA7CisgIGZvciAodmFyIGkgPSAwOyBp
IDwgc3BlY3MubGVuZ3RoOyBpKyspIHsKKyAgICBpZiAodGhpcy5zcGVjRmlsdGVyKHNwZWNzW2ld
KSkgeworICAgICAgc3BlY0NvdW50Kys7CisgICAgfQorICB9CisgIHZhciBtZXNzYWdlID0gIiIg
KyBzcGVjQ291bnQgKyAiIHNwZWMiICsgKHNwZWNDb3VudCA9PSAxID8gIiIgOiAicyIgKSArICIs
ICIgKyByZXN1bHRzLmZhaWxlZENvdW50ICsgIiBmYWlsdXJlIiArICgocmVzdWx0cy5mYWlsZWRD
b3VudCA9PSAxKSA/ICIiIDogInMiKTsKKyAgbWVzc2FnZSArPSAiIGluICIgKyAoKG5ldyBEYXRl
KCkuZ2V0VGltZSgpIC0gdGhpcy5zdGFydGVkQXQuZ2V0VGltZSgpKSAvIDEwMDApICsgInMiOwor
ICB0aGlzLnJ1bm5lck1lc3NhZ2VTcGFuLnJlcGxhY2VDaGlsZCh0aGlzLmNyZWF0ZURvbSgnYScs
IHsgY2xhc3NOYW1lOiAnZGVzY3JpcHRpb24nLCBocmVmOiAnPyd9LCBtZXNzYWdlKSwgdGhpcy5y
dW5uZXJNZXNzYWdlU3Bhbi5maXJzdENoaWxkKTsKKworICB0aGlzLmZpbmlzaGVkQXRTcGFuLmFw
cGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJGaW5pc2hlZCBhdCAiICsgbmV3IERh
dGUoKS50b1N0cmluZygpKSk7Cit9OworCitqYXNtaW5lLlRyaXZpYWxSZXBvcnRlci5wcm90b3R5
cGUucmVwb3J0U3VpdGVSZXN1bHRzID0gZnVuY3Rpb24oc3VpdGUpIHsKKyAgdmFyIHJlc3VsdHMg
PSBzdWl0ZS5yZXN1bHRzKCk7CisgIHZhciBzdGF0dXMgPSByZXN1bHRzLnBhc3NlZCgpID8gJ3Bh
c3NlZCcgOiAnZmFpbGVkJzsKKyAgaWYgKHJlc3VsdHMudG90YWxDb3VudCA9PT0gMCkgeyAvLyB0
b2RvOiBjaGFuZ2UgdGhpcyB0byBjaGVjayByZXN1bHRzLnNraXBwZWQKKyAgICBzdGF0dXMgPSAn
c2tpcHBlZCc7CisgIH0KKyAgdGhpcy5zdWl0ZURpdnNbc3VpdGUuaWRdLmNsYXNzTmFtZSArPSAi
ICIgKyBzdGF0dXM7Cit9OworCitqYXNtaW5lLlRyaXZpYWxSZXBvcnRlci5wcm90b3R5cGUucmVw
b3J0U3BlY1N0YXJ0aW5nID0gZnVuY3Rpb24oc3BlYykgeworICBpZiAodGhpcy5sb2dSdW5uaW5n
U3BlY3MpIHsKKyAgICB0aGlzLmxvZygnPj4gSmFzbWluZSBSdW5uaW5nICcgKyBzcGVjLnN1aXRl
LmRlc2NyaXB0aW9uICsgJyAnICsgc3BlYy5kZXNjcmlwdGlvbiArICcuLi4nKTsKKyAgfQorfTsK
KworamFzbWluZS5Ucml2aWFsUmVwb3J0ZXIucHJvdG90eXBlLnJlcG9ydFNwZWNSZXN1bHRzID0g
ZnVuY3Rpb24oc3BlYykgeworICB2YXIgcmVzdWx0cyA9IHNwZWMucmVzdWx0cygpOworICB2YXIg
c3RhdHVzID0gcmVzdWx0cy5wYXNzZWQoKSA/ICdwYXNzZWQnIDogJ2ZhaWxlZCc7CisgIGlmIChy
ZXN1bHRzLnNraXBwZWQpIHsKKyAgICBzdGF0dXMgPSAnc2tpcHBlZCc7CisgIH0KKyAgdmFyIHNw
ZWNEaXYgPSB0aGlzLmNyZWF0ZURvbSgnZGl2JywgeyBjbGFzc05hbWU6ICdzcGVjICcgICsgc3Rh
dHVzIH0sCisgICAgICB0aGlzLmNyZWF0ZURvbSgnYScsIHsgY2xhc3NOYW1lOiAncnVuX3NwZWMn
LCBocmVmOiAnP3NwZWM9JyArIGVuY29kZVVSSUNvbXBvbmVudChzcGVjLmdldEZ1bGxOYW1lKCkp
IH0sICJydW4iKSwKKyAgICAgIHRoaXMuY3JlYXRlRG9tKCdhJywgeworICAgICAgICBjbGFzc05h
bWU6ICdkZXNjcmlwdGlvbicsCisgICAgICAgIGhyZWY6ICc/c3BlYz0nICsgZW5jb2RlVVJJQ29t
cG9uZW50KHNwZWMuZ2V0RnVsbE5hbWUoKSksCisgICAgICAgIHRpdGxlOiBzcGVjLmdldEZ1bGxO
YW1lKCkKKyAgICAgIH0sIHNwZWMuZGVzY3JpcHRpb24pKTsKKworCisgIHZhciByZXN1bHRJdGVt
cyA9IHJlc3VsdHMuZ2V0SXRlbXMoKTsKKyAgdmFyIG1lc3NhZ2VzRGl2ID0gdGhpcy5jcmVhdGVE
b20oJ2RpdicsIHsgY2xhc3NOYW1lOiAnbWVzc2FnZXMnIH0pOworICBmb3IgKHZhciBpID0gMDsg
aSA8IHJlc3VsdEl0ZW1zLmxlbmd0aDsgaSsrKSB7CisgICAgdmFyIHJlc3VsdCA9IHJlc3VsdEl0
ZW1zW2ldOworCisgICAgaWYgKHJlc3VsdC50eXBlID09ICdsb2cnKSB7CisgICAgICBtZXNzYWdl
c0Rpdi5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZURvbSgnZGl2Jywge2NsYXNzTmFtZTogJ3Jlc3Vs
dE1lc3NhZ2UgbG9nJ30sIHJlc3VsdC50b1N0cmluZygpKSk7CisgICAgfSBlbHNlIGlmIChyZXN1
bHQudHlwZSA9PSAnZXhwZWN0JyAmJiByZXN1bHQucGFzc2VkICYmICFyZXN1bHQucGFzc2VkKCkp
IHsKKyAgICAgIG1lc3NhZ2VzRGl2LmFwcGVuZENoaWxkKHRoaXMuY3JlYXRlRG9tKCdkaXYnLCB7
Y2xhc3NOYW1lOiAncmVzdWx0TWVzc2FnZSBmYWlsJ30sIHJlc3VsdC5tZXNzYWdlKSk7CisKKyAg
ICAgIGlmIChyZXN1bHQudHJhY2Uuc3RhY2spIHsKKyAgICAgICAgbWVzc2FnZXNEaXYuYXBwZW5k
Q2hpbGQodGhpcy5jcmVhdGVEb20oJ2RpdicsIHtjbGFzc05hbWU6ICdzdGFja1RyYWNlJ30sIHJl
c3VsdC50cmFjZS5zdGFjaykpOworICAgICAgfQorICAgIH0KKyAgfQorCisgIGlmIChtZXNzYWdl
c0Rpdi5jaGlsZE5vZGVzLmxlbmd0aCA+IDApIHsKKyAgICBzcGVjRGl2LmFwcGVuZENoaWxkKG1l
c3NhZ2VzRGl2KTsKKyAgfQorCisgIHRoaXMuc3VpdGVEaXZzW3NwZWMuc3VpdGUuaWRdLmFwcGVu
ZENoaWxkKHNwZWNEaXYpOworfTsKKworamFzbWluZS5Ucml2aWFsUmVwb3J0ZXIucHJvdG90eXBl
LmxvZyA9IGZ1bmN0aW9uKCkgeworICB2YXIgY29uc29sZSA9IGphc21pbmUuZ2V0R2xvYmFsKCku
Y29uc29sZTsKKyAgaWYgKGNvbnNvbGUgJiYgY29uc29sZS5sb2cpIHsKKyAgICBpZiAoY29uc29s
ZS5sb2cuYXBwbHkpIHsKKyAgICAgIGNvbnNvbGUubG9nLmFwcGx5KGNvbnNvbGUsIGFyZ3VtZW50
cyk7CisgICAgfSBlbHNlIHsKKyAgICAgIGNvbnNvbGUubG9nKGFyZ3VtZW50cyk7IC8vIGllIGZp
eDogY29uc29sZS5sb2cuYXBwbHkgZG9lc24ndCBleGlzdCBvbiBpZQorICAgIH0KKyAgfQorfTsK
KworamFzbWluZS5Ucml2aWFsUmVwb3J0ZXIucHJvdG90eXBlLmdldExvY2F0aW9uID0gZnVuY3Rp
b24oKSB7CisgIHJldHVybiB0aGlzLmRvY3VtZW50LmxvY2F0aW9uOworfTsKKworamFzbWluZS5U
cml2aWFsUmVwb3J0ZXIucHJvdG90eXBlLnNwZWNGaWx0ZXIgPSBmdW5jdGlvbihzcGVjKSB7Cisg
IHZhciBwYXJhbU1hcCA9IHt9OworICB2YXIgcGFyYW1zID0gdGhpcy5nZXRMb2NhdGlvbigpLnNl
YXJjaC5zdWJzdHJpbmcoMSkuc3BsaXQoJyYnKTsKKyAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJh
bXMubGVuZ3RoOyBpKyspIHsKKyAgICB2YXIgcCA9IHBhcmFtc1tpXS5zcGxpdCgnPScpOworICAg
IHBhcmFtTWFwW2RlY29kZVVSSUNvbXBvbmVudChwWzBdKV0gPSBkZWNvZGVVUklDb21wb25lbnQo
cFsxXSk7CisgIH0KKworICBpZiAoIXBhcmFtTWFwLnNwZWMpIHsKKyAgICByZXR1cm4gdHJ1ZTsK
KyAgfQorICByZXR1cm4gc3BlYy5nZXRGdWxsTmFtZSgpLmluZGV4T2YocGFyYW1NYXAuc3BlYykg
PT09IDA7Cit9OwpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRq
cy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2VzNS1zaGltL3Rlc3RzL2xpYi9qYXNtaW5lLmNzcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4
YW1wbGUtYXBwL2NvbXBvbmVudHMvZXM1LXNoaW0vdGVzdHMvbGliL2phc21pbmUuY3NzCShyZXZp
c2lvbiAwKQorKysgUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFt
cGxlLWFwcC9jb21wb25lbnRzL2VzNS1zaGltL3Rlc3RzL2xpYi9qYXNtaW5lLmNzcwkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDE2NiBAQAorYm9keSB7CisgIGZvbnQtZmFtaWx5OiAiSGVsdmV0
aWNhIE5ldWUgTGlnaHQiLCAiTHVjaWRhIEdyYW5kZSIsICJDYWxpYnJpIiwgIkFyaWFsIiwgc2Fu
cy1zZXJpZjsKK30KKworCisuamFzbWluZV9yZXBvcnRlciBhOnZpc2l0ZWQsIC5qYXNtaW5lX3Jl
cG9ydGVyIGEgeworICBjb2xvcjogIzMwMzsgCit9CisKKy5qYXNtaW5lX3JlcG9ydGVyIGE6aG92
ZXIsIC5qYXNtaW5lX3JlcG9ydGVyIGE6YWN0aXZlIHsKKyAgY29sb3I6IGJsdWU7IAorfQorCisu
cnVuX3NwZWMgeworICBmbG9hdDpyaWdodDsKKyAgcGFkZGluZy1yaWdodDogNXB4OworICBmb250
LXNpemU6IC44ZW07CisgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKK30KKworLmphc21pbmVfcmVw
b3J0ZXIgeworICBtYXJnaW46IDAgNXB4OworfQorCisuYmFubmVyIHsKKyAgY29sb3I6ICMzMDM7
CisgIGJhY2tncm91bmQtY29sb3I6ICNmZWY7CisgIHBhZGRpbmc6IDVweDsKK30KKworLmxvZ28g
eworICBmbG9hdDogbGVmdDsKKyAgZm9udC1zaXplOiAxLjFlbTsKKyAgcGFkZGluZy1sZWZ0OiA1
cHg7Cit9CisKKy5sb2dvIC52ZXJzaW9uIHsKKyAgZm9udC1zaXplOiAuNmVtOworICBwYWRkaW5n
LWxlZnQ6IDFlbTsKK30KKworLnJ1bm5lci5ydW5uaW5nIHsKKyAgYmFja2dyb3VuZC1jb2xvcjog
eWVsbG93OworfQorCisKKy5vcHRpb25zIHsKKyAgdGV4dC1hbGlnbjogcmlnaHQ7CisgIGZvbnQt
c2l6ZTogLjhlbTsKK30KKworCisKKworLnN1aXRlIHsKKyAgYm9yZGVyOiAxcHggb3V0c2V0IGdy
YXk7CisgIG1hcmdpbjogNXB4IDA7CisgIHBhZGRpbmctbGVmdDogMWVtOworfQorCisuc3VpdGUg
LnN1aXRlIHsKKyAgbWFyZ2luOiA1cHg7IAorfQorCisuc3VpdGUucGFzc2VkIHsKKyAgYmFja2dy
b3VuZC1jb2xvcjogI2RmZDsKK30KKworLnN1aXRlLmZhaWxlZCB7CisgIGJhY2tncm91bmQtY29s
b3I6ICNmZGQ7Cit9CisKKy5zcGVjIHsKKyAgbWFyZ2luOiA1cHg7CisgIHBhZGRpbmctbGVmdDog
MWVtOworICBjbGVhcjogYm90aDsKK30KKworLnNwZWMuZmFpbGVkLCAuc3BlYy5wYXNzZWQsIC5z
cGVjLnNraXBwZWQgeworICBwYWRkaW5nLWJvdHRvbTogNXB4OworICBib3JkZXI6IDFweCBzb2xp
ZCBncmF5OworfQorCisuc3BlYy5mYWlsZWQgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmJiOwor
ICBib3JkZXItY29sb3I6IHJlZDsKK30KKworLnNwZWMucGFzc2VkIHsKKyAgYmFja2dyb3VuZC1j
b2xvcjogI2JmYjsKKyAgYm9yZGVyLWNvbG9yOiBncmVlbjsKK30KKworLnNwZWMuc2tpcHBlZCB7
CisgIGJhY2tncm91bmQtY29sb3I6ICNiYmI7Cit9CisKKy5tZXNzYWdlcyB7CisgIGJvcmRlci1s
ZWZ0OiAxcHggZGFzaGVkIGdyYXk7CisgIHBhZGRpbmctbGVmdDogMWVtOworICBwYWRkaW5nLXJp
Z2h0OiAxZW07Cit9CisKKy5wYXNzZWQgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjY2ZjOworICBk
aXNwbGF5OiBub25lOworfQorCisuZmFpbGVkIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2ZiYjsK
K30KKworLnNraXBwZWQgeworICBjb2xvcjogIzc3NzsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2Vl
ZTsKKyAgZGlzcGxheTogbm9uZTsKK30KKworCisvKi5yZXN1bHRNZXNzYWdlIHsqLworICAvKndo
aXRlLXNwYWNlOiBwcmU7Ki8KKy8qfSovCisKKy5yZXN1bHRNZXNzYWdlIHNwYW4ucmVzdWx0IHsK
KyAgZGlzcGxheTogYmxvY2s7CisgIGxpbmUtaGVpZ2h0OiAyZW07CisgIGNvbG9yOiBibGFjazsK
K30KKworLnJlc3VsdE1lc3NhZ2UgLm1pc21hdGNoIHsKKyAgY29sb3I6IGJsYWNrOworfQorCisu
c3RhY2tUcmFjZSB7CisgIHdoaXRlLXNwYWNlOiBwcmU7CisgIGZvbnQtc2l6ZTogLjhlbTsKKyAg
bWFyZ2luLWxlZnQ6IDEwcHg7CisgIG1heC1oZWlnaHQ6IDVlbTsKKyAgb3ZlcmZsb3c6IGF1dG87
CisgIGJvcmRlcjogMXB4IGluc2V0IHJlZDsKKyAgcGFkZGluZzogMWVtOworICBiYWNrZ3JvdW5k
OiAjZWVmOworfQorCisuZmluaXNoZWQtYXQgeworICBwYWRkaW5nLWxlZnQ6IDFlbTsKKyAgZm9u
dC1zaXplOiAuNmVtOworfQorCisuc2hvdy1wYXNzZWQgLnBhc3NlZCwKKy5zaG93LXNraXBwZWQg
LnNraXBwZWQgeworICBkaXNwbGF5OiBibG9jazsKK30KKworCisjamFzbWluZV9jb250ZW50IHsK
KyAgcG9zaXRpb246Zml4ZWQ7CisgIHJpZ2h0OiAxMDAlOworfQorCisucnVubmVyIHsKKyAgYm9y
ZGVyOiAxcHggc29saWQgZ3JheTsKKyAgZGlzcGxheTogYmxvY2s7CisgIG1hcmdpbjogNXB4IDA7
CisgIHBhZGRpbmc6IDJweCAwIDJweCAxMHB4OworfQpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9E
b1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2VzNS1zaGltL3Rl
c3RzL2xpYi9qYXNtaW5lLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VF
dmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9lczUtc2hpbS90ZXN0cy9s
aWIvamFzbWluZS5qcwkocmV2aXNpb24gMCkKKysrIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVu
QmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9lczUtc2hpbS90ZXN0cy9saWIv
amFzbWluZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI0NzcgQEAKK3ZhciBpc0NvbW1v
bkpTID0gdHlwZW9mIHdpbmRvdyA9PSAidW5kZWZpbmVkIjsKKworLyoqCisgKiBUb3AgbGV2ZWwg
bmFtZXNwYWNlIGZvciBKYXNtaW5lLCBhIGxpZ2h0d2VpZ2h0IEphdmFTY3JpcHQgQkREL3NwZWMv
dGVzdGluZyBmcmFtZXdvcmsuCisgKgorICogQG5hbWVzcGFjZQorICovCit2YXIgamFzbWluZSA9
IHt9OworaWYgKGlzQ29tbW9uSlMpIGV4cG9ydHMuamFzbWluZSA9IGphc21pbmU7CisvKioKKyAq
IEBwcml2YXRlCisgKi8KK2phc21pbmUudW5pbXBsZW1lbnRlZE1ldGhvZF8gPSBmdW5jdGlvbigp
IHsKKyAgdGhyb3cgbmV3IEVycm9yKCJ1bmltcGxlbWVudGVkIG1ldGhvZCIpOworfTsKKworLyoq
CisgKiBVc2UgPGNvZGU+amFzbWluZS51bmRlZmluZWQ8L2NvZGU+IGluc3RlYWQgb2YgPGNvZGU+
dW5kZWZpbmVkPC9jb2RlPiwgc2luY2UgPGNvZGU+dW5kZWZpbmVkPC9jb2RlPiBpcyBqdXN0Cisg
KiBhIHBsYWluIG9sZCB2YXJpYWJsZSBhbmQgbWF5IGJlIHJlZGVmaW5lZCBieSBzb21lYm9keSBl
bHNlLgorICoKKyAqIEBwcml2YXRlCisgKi8KK2phc21pbmUudW5kZWZpbmVkID0gamFzbWluZS5f
X191bmRlZmluZWRfX187CisKKy8qKgorICogU2hvdyBkaWFnbm9zdGljIG1lc3NhZ2VzIGluIHRo
ZSBjb25zb2xlIGlmIHNldCB0byB0cnVlCisgKgorICovCitqYXNtaW5lLlZFUkJPU0UgPSBmYWxz
ZTsKKworLyoqCisgKiBEZWZhdWx0IGludGVydmFsIGluIG1pbGxpc2Vjb25kcyBmb3IgZXZlbnQg
bG9vcCB5aWVsZHMgKGUuZy4gdG8gYWxsb3cgbmV0d29yayBhY3Rpdml0eSBvciB0byByZWZyZXNo
IHRoZSBzY3JlZW4gd2l0aCB0aGUgSFRNTC1iYXNlZCBydW5uZXIpLiBTbWFsbCB2YWx1ZXMgaGVy
ZSBtYXkgcmVzdWx0IGluIHNsb3cgdGVzdCBydW5uaW5nLiBaZXJvIG1lYW5zIG5vIHVwZGF0ZXMg
dW50aWwgYWxsIHRlc3RzIGhhdmUgY29tcGxldGVkLgorICoKKyAqLworamFzbWluZS5ERUZBVUxU
X1VQREFURV9JTlRFUlZBTCA9IDI1MDsKKworLyoqCisgKiBEZWZhdWx0IHRpbWVvdXQgaW50ZXJ2
YWwgaW4gbWlsbGlzZWNvbmRzIGZvciB3YWl0c0ZvcigpIGJsb2Nrcy4KKyAqLworamFzbWluZS5E
RUZBVUxUX1RJTUVPVVRfSU5URVJWQUwgPSA1MDAwOworCitqYXNtaW5lLmdldEdsb2JhbCA9IGZ1
bmN0aW9uKCkgeworICBmdW5jdGlvbiBnZXRHbG9iYWwoKSB7CisgICAgcmV0dXJuIHRoaXM7Cisg
IH0KKworICByZXR1cm4gZ2V0R2xvYmFsKCk7Cit9OworCisvKioKKyAqIEFsbG93cyBmb3IgYm91
bmQgZnVuY3Rpb25zIHRvIGJlIGNvbXBhcmVkLiAgSW50ZXJuYWwgdXNlIG9ubHkuCisgKgorICog
QGlnbm9yZQorICogQHByaXZhdGUKKyAqIEBwYXJhbSBiYXNlIHtPYmplY3R9IGJvdW5kICd0aGlz
JyBmb3IgdGhlIGZ1bmN0aW9uCisgKiBAcGFyYW0gbmFtZSB7RnVuY3Rpb259IGZ1bmN0aW9uIHRv
IGZpbmQKKyAqLworamFzbWluZS5iaW5kT3JpZ2luYWxfID0gZnVuY3Rpb24oYmFzZSwgbmFtZSkg
eworICB2YXIgb3JpZ2luYWwgPSBiYXNlW25hbWVdOworICBpZiAob3JpZ2luYWwuYXBwbHkpIHsK
KyAgICByZXR1cm4gZnVuY3Rpb24oKSB7CisgICAgICByZXR1cm4gb3JpZ2luYWwuYXBwbHkoYmFz
ZSwgYXJndW1lbnRzKTsKKyAgICB9OworICB9IGVsc2UgeworICAgIC8vIElFIHN1cHBvcnQKKyAg
ICByZXR1cm4gamFzbWluZS5nZXRHbG9iYWwoKVtuYW1lXTsKKyAgfQorfTsKKworamFzbWluZS5z
ZXRUaW1lb3V0ID0gamFzbWluZS5iaW5kT3JpZ2luYWxfKGphc21pbmUuZ2V0R2xvYmFsKCksICdz
ZXRUaW1lb3V0Jyk7CitqYXNtaW5lLmNsZWFyVGltZW91dCA9IGphc21pbmUuYmluZE9yaWdpbmFs
XyhqYXNtaW5lLmdldEdsb2JhbCgpLCAnY2xlYXJUaW1lb3V0Jyk7CitqYXNtaW5lLnNldEludGVy
dmFsID0gamFzbWluZS5iaW5kT3JpZ2luYWxfKGphc21pbmUuZ2V0R2xvYmFsKCksICdzZXRJbnRl
cnZhbCcpOworamFzbWluZS5jbGVhckludGVydmFsID0gamFzbWluZS5iaW5kT3JpZ2luYWxfKGph
c21pbmUuZ2V0R2xvYmFsKCksICdjbGVhckludGVydmFsJyk7CisKK2phc21pbmUuTWVzc2FnZVJl
c3VsdCA9IGZ1bmN0aW9uKHZhbHVlcykgeworICB0aGlzLnR5cGUgPSAnbG9nJzsKKyAgdGhpcy52
YWx1ZXMgPSB2YWx1ZXM7CisgIHRoaXMudHJhY2UgPSBuZXcgRXJyb3IoKTsgLy8gdG9kbzogdGVz
dCBiZXR0ZXIKK307CisKK2phc21pbmUuTWVzc2FnZVJlc3VsdC5wcm90b3R5cGUudG9TdHJpbmcg
PSBmdW5jdGlvbigpIHsKKyAgdmFyIHRleHQgPSAiIjsKKyAgZm9yICh2YXIgaSA9IDA7IGkgPCB0
aGlzLnZhbHVlcy5sZW5ndGg7IGkrKykgeworICAgIGlmIChpID4gMCkgdGV4dCArPSAiICI7Cisg
ICAgaWYgKGphc21pbmUuaXNTdHJpbmdfKHRoaXMudmFsdWVzW2ldKSkgeworICAgICAgdGV4dCAr
PSB0aGlzLnZhbHVlc1tpXTsKKyAgICB9IGVsc2UgeworICAgICAgdGV4dCArPSBqYXNtaW5lLnBw
KHRoaXMudmFsdWVzW2ldKTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIHRleHQ7Cit9OworCitqYXNt
aW5lLkV4cGVjdGF0aW9uUmVzdWx0ID0gZnVuY3Rpb24ocGFyYW1zKSB7CisgIHRoaXMudHlwZSA9
ICdleHBlY3QnOworICB0aGlzLm1hdGNoZXJOYW1lID0gcGFyYW1zLm1hdGNoZXJOYW1lOworICB0
aGlzLnBhc3NlZF8gPSBwYXJhbXMucGFzc2VkOworICB0aGlzLmV4cGVjdGVkID0gcGFyYW1zLmV4
cGVjdGVkOworICB0aGlzLmFjdHVhbCA9IHBhcmFtcy5hY3R1YWw7CisgIHRoaXMubWVzc2FnZSA9
IHRoaXMucGFzc2VkXyA/ICdQYXNzZWQuJyA6IHBhcmFtcy5tZXNzYWdlOworCisgIHZhciB0cmFj
ZSA9IChwYXJhbXMudHJhY2UgfHwgbmV3IEVycm9yKHRoaXMubWVzc2FnZSkpOworICB0aGlzLnRy
YWNlID0gdGhpcy5wYXNzZWRfID8gJycgOiB0cmFjZTsKK307CisKK2phc21pbmUuRXhwZWN0YXRp
b25SZXN1bHQucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkgeworICByZXR1cm4gdGhp
cy5tZXNzYWdlOworfTsKKworamFzbWluZS5FeHBlY3RhdGlvblJlc3VsdC5wcm90b3R5cGUucGFz
c2VkID0gZnVuY3Rpb24gKCkgeworICByZXR1cm4gdGhpcy5wYXNzZWRfOworfTsKKworLyoqCisg
KiBHZXR0ZXIgZm9yIHRoZSBKYXNtaW5lIGVudmlyb25tZW50LiBFbnN1cmVzIG9uZSBnZXRzIGNy
ZWF0ZWQKKyAqLworamFzbWluZS5nZXRFbnYgPSBmdW5jdGlvbigpIHsKKyAgdmFyIGVudiA9IGph
c21pbmUuY3VycmVudEVudl8gPSBqYXNtaW5lLmN1cnJlbnRFbnZfIHx8IG5ldyBqYXNtaW5lLkVu
digpOworICByZXR1cm4gZW52OworfTsKKworLyoqCisgKiBAaWdub3JlCisgKiBAcHJpdmF0ZQor
ICogQHBhcmFtIHZhbHVlCisgKiBAcmV0dXJucyB7Qm9vbGVhbn0KKyAqLworamFzbWluZS5pc0Fy
cmF5XyA9IGZ1bmN0aW9uKHZhbHVlKSB7CisgIHJldHVybiBqYXNtaW5lLmlzQV8oIkFycmF5Iiwg
dmFsdWUpOworfTsKKworLyoqCisgKiBAaWdub3JlCisgKiBAcHJpdmF0ZQorICogQHBhcmFtIHZh
bHVlCisgKiBAcmV0dXJucyB7Qm9vbGVhbn0KKyAqLworamFzbWluZS5pc1N0cmluZ18gPSBmdW5j
dGlvbih2YWx1ZSkgeworICByZXR1cm4gamFzbWluZS5pc0FfKCJTdHJpbmciLCB2YWx1ZSk7Cit9
OworCisvKioKKyAqIEBpZ25vcmUKKyAqIEBwcml2YXRlCisgKiBAcGFyYW0gdmFsdWUKKyAqIEBy
ZXR1cm5zIHtCb29sZWFufQorICovCitqYXNtaW5lLmlzTnVtYmVyXyA9IGZ1bmN0aW9uKHZhbHVl
KSB7CisgIHJldHVybiBqYXNtaW5lLmlzQV8oIk51bWJlciIsIHZhbHVlKTsKK307CisKKy8qKgor
ICogQGlnbm9yZQorICogQHByaXZhdGUKKyAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlTmFtZQorICog
QHBhcmFtIHZhbHVlCisgKiBAcmV0dXJucyB7Qm9vbGVhbn0KKyAqLworamFzbWluZS5pc0FfID0g
ZnVuY3Rpb24odHlwZU5hbWUsIHZhbHVlKSB7CisgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRv
U3RyaW5nLmFwcGx5KHZhbHVlKSA9PT0gJ1tvYmplY3QgJyArIHR5cGVOYW1lICsgJ10nOworfTsK
KworLyoqCisgKiBQcmV0dHkgcHJpbnRlciBmb3IgZXhwZWNhdGlvbnMuICBUYWtlcyBhbnkgb2Jq
ZWN0IGFuZCB0dXJucyBpdCBpbnRvIGEgaHVtYW4tcmVhZGFibGUgc3RyaW5nLgorICoKKyAqIEBw
YXJhbSB2YWx1ZSB7T2JqZWN0fSBhbiBvYmplY3QgdG8gYmUgb3V0cHV0dGVkCisgKiBAcmV0dXJu
cyB7U3RyaW5nfQorICovCitqYXNtaW5lLnBwID0gZnVuY3Rpb24odmFsdWUpIHsKKyAgdmFyIHN0
cmluZ1ByZXR0eVByaW50ZXIgPSBuZXcgamFzbWluZS5TdHJpbmdQcmV0dHlQcmludGVyKCk7Cisg
IHN0cmluZ1ByZXR0eVByaW50ZXIuZm9ybWF0KHZhbHVlKTsKKyAgcmV0dXJuIHN0cmluZ1ByZXR0
eVByaW50ZXIuc3RyaW5nOworfTsKKworLyoqCisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIG9iamVj
dCBpcyBhIERPTSBOb2RlLgorICoKKyAqIEBwYXJhbSB7T2JqZWN0fSBvYmogb2JqZWN0IHRvIGNo
ZWNrCisgKiBAcmV0dXJucyB7Qm9vbGVhbn0KKyAqLworamFzbWluZS5pc0RvbU5vZGUgPSBmdW5j
dGlvbihvYmopIHsKKyAgcmV0dXJuIG9iai5ub2RlVHlwZSA+IDA7Cit9OworCisvKioKKyAqIFJl
dHVybnMgYSBtYXRjaGFibGUgJ2dlbmVyaWMnIG9iamVjdCBvZiB0aGUgY2xhc3MgdHlwZS4gIEZv
ciB1c2UgaW4gZXhwZWNhdGlvbnMgb2YgdHlwZSB3aGVuIHZhbHVlcyBkb24ndCBtYXR0ZXIuCisg
KgorICogQGV4YW1wbGUKKyAqIC8vIGRvbid0IGNhcmUgYWJvdXQgd2hpY2ggZnVuY3Rpb24gaXMg
cGFzc2VkIGluLCBhcyBsb25nIGFzIGl0J3MgYSBmdW5jdGlvbgorICogZXhwZWN0KG15U3B5KS50
b0hhdmVCZWVuQ2FsbGVkV2l0aChqYXNtaW5lLmFueShGdW5jdGlvbikpOworICoKKyAqIEBwYXJh
bSB7Q2xhc3N9IGNsYXp6CisgKiBAcmV0dXJucyBtYXRjaGFibGUgb2JqZWN0IG9mIHRoZSB0eXBl
IGNsYXp6CisgKi8KK2phc21pbmUuYW55ID0gZnVuY3Rpb24oY2xhenopIHsKKyAgcmV0dXJuIG5l
dyBqYXNtaW5lLk1hdGNoZXJzLkFueShjbGF6eik7Cit9OworCisvKioKKyAqIEphc21pbmUgU3Bp
ZXMgYXJlIHRlc3QgZG91YmxlcyB0aGF0IGNhbiBhY3QgYXMgc3R1YnMsIHNwaWVzLCBmYWtlcyBv
ciB3aGVuIHVzZWQgaW4gYW4gZXhwZWNhdGlvbiwgbW9ja3MuCisgKgorICogU3BpZXMgc2hvdWxk
IGJlIGNyZWF0ZWQgaW4gdGVzdCBzZXR1cCwgYmVmb3JlIGV4cGVjdGF0aW9ucy4gIFRoZXkgY2Fu
IHRoZW4gYmUgY2hlY2tlZCwgdXNpbmcgdGhlIHN0YW5kYXJkIEphc21pbmUKKyAqIGV4cGVjdGF0
aW9uIHN5bnRheC4gU3BpZXMgY2FuIGJlIGNoZWNrZWQgaWYgdGhleSB3ZXJlIGNhbGxlZCBvciBu
b3QgYW5kIHdoYXQgdGhlIGNhbGxpbmcgcGFyYW1zIHdlcmUuCisgKgorICogQSBTcHkgaGFzIHRo
ZSBmb2xsb3dpbmcgZmllbGRzOiB3YXNDYWxsZWQsIGNhbGxDb3VudCwgbW9zdFJlY2VudENhbGws
IGFuZCBhcmdzRm9yQ2FsbCAoc2VlIGRvY3MpLgorICoKKyAqIFNwaWVzIGFyZSB0b3JuIGRvd24g
YXQgdGhlIGVuZCBvZiBldmVyeSBzcGVjLgorICoKKyAqIE5vdGU6IERvIDxiPm5vdDwvYj4gY2Fs
bCBuZXcgamFzbWluZS5TcHkoKSBkaXJlY3RseSAtIGEgc3B5IG11c3QgYmUgY3JlYXRlZCB1c2lu
ZyBzcHlPbiwgamFzbWluZS5jcmVhdGVTcHkgb3IgamFzbWluZS5jcmVhdGVTcHlPYmouCisgKgor
ICogQGV4YW1wbGUKKyAqIC8vIGEgc3R1YgorICogdmFyIG15U3R1YiA9IGphc21pbmUuY3JlYXRl
U3B5KCdteVN0dWInKTsgIC8vIGNhbiBiZSB1c2VkIGFueXdoZXJlCisgKgorICogLy8gc3B5IGV4
YW1wbGUKKyAqIHZhciBmb28gPSB7CisgKiAgIG5vdDogZnVuY3Rpb24oYm9vbCkgeyByZXR1cm4g
IWJvb2w7IH0KKyAqIH0KKyAqCisgKiAvLyBhY3R1YWwgZm9vLm5vdCB3aWxsIG5vdCBiZSBjYWxs
ZWQsIGV4ZWN1dGlvbiBzdG9wcworICogc3B5T24oZm9vLCAnbm90Jyk7CisKKyAvLyBmb28ubm90
IHNwaWVkIHVwb24sIGV4ZWN1dGlvbiB3aWxsIGNvbnRpbnVlIHRvIGltcGxlbWVudGF0aW9uCisg
KiBzcHlPbihmb28sICdub3QnKS5hbmRDYWxsVGhyb3VnaCgpOworICoKKyAqIC8vIGZha2UgZXhh
bXBsZQorICogdmFyIGZvbyA9IHsKKyAqICAgbm90OiBmdW5jdGlvbihib29sKSB7IHJldHVybiAh
Ym9vbDsgfQorICogfQorICoKKyAqIC8vIGZvby5ub3QodmFsKSB3aWxsIHJldHVybiB2YWwKKyAq
IHNweU9uKGZvbywgJ25vdCcpLmFuZENhbGxGYWtlKGZ1bmN0aW9uKHZhbHVlKSB7cmV0dXJuIHZh
bHVlO30pOworICoKKyAqIC8vIG1vY2sgZXhhbXBsZQorICogZm9vLm5vdCg3ID09IDcpOworICog
ZXhwZWN0KGZvby5ub3QpLnRvSGF2ZUJlZW5DYWxsZWQoKTsKKyAqIGV4cGVjdChmb28ubm90KS50
b0hhdmVCZWVuQ2FsbGVkV2l0aCh0cnVlKTsKKyAqCisgKiBAY29uc3RydWN0b3IKKyAqIEBzZWUg
c3B5T24sIGphc21pbmUuY3JlYXRlU3B5LCBqYXNtaW5lLmNyZWF0ZVNweU9iagorICogQHBhcmFt
IHtTdHJpbmd9IG5hbWUKKyAqLworamFzbWluZS5TcHkgPSBmdW5jdGlvbihuYW1lKSB7CisgIC8q
KgorICAgKiBUaGUgbmFtZSBvZiB0aGUgc3B5LCBpZiBwcm92aWRlZC4KKyAgICovCisgIHRoaXMu
aWRlbnRpdHkgPSBuYW1lIHx8ICd1bmtub3duJzsKKyAgLyoqCisgICAqICBJcyB0aGlzIE9iamVj
dCBhIHNweT8KKyAgICovCisgIHRoaXMuaXNTcHkgPSB0cnVlOworICAvKioKKyAgICogVGhlIGFj
dHVhbCBmdW5jdGlvbiB0aGlzIHNweSBzdHVicy4KKyAgICovCisgIHRoaXMucGxhbiA9IGZ1bmN0
aW9uKCkgeworICB9OworICAvKioKKyAgICogVHJhY2tpbmcgb2YgdGhlIG1vc3QgcmVjZW50IGNh
bGwgdG8gdGhlIHNweS4KKyAgICogQGV4YW1wbGUKKyAgICogdmFyIG15U3B5ID0gamFzbWluZS5j
cmVhdGVTcHkoJ2ZvbycpOworICAgKiBteVNweSgxLCAyKTsKKyAgICogbXlTcHkubW9zdFJlY2Vu
dENhbGwuYXJncyA9IFsxLCAyXTsKKyAgICovCisgIHRoaXMubW9zdFJlY2VudENhbGwgPSB7fTsK
KworICAvKioKKyAgICogSG9sZHMgYXJndW1lbnRzIGZvciBlYWNoIGNhbGwgdG8gdGhlIHNweSwg
aW5kZXhlZCBieSBjYWxsIGNvdW50CisgICAqIEBleGFtcGxlCisgICAqIHZhciBteVNweSA9IGph
c21pbmUuY3JlYXRlU3B5KCdmb28nKTsKKyAgICogbXlTcHkoMSwgMik7CisgICAqIG15U3B5KDcs
IDgpOworICAgKiBteVNweS5tb3N0UmVjZW50Q2FsbC5hcmdzID0gWzcsIDhdOworICAgKiBteVNw
eS5hcmdzRm9yQ2FsbFswXSA9IFsxLCAyXTsKKyAgICogbXlTcHkuYXJnc0ZvckNhbGxbMV0gPSBb
NywgOF07CisgICAqLworICB0aGlzLmFyZ3NGb3JDYWxsID0gW107CisgIHRoaXMuY2FsbHMgPSBb
XTsKK307CisKKy8qKgorICogVGVsbHMgYSBzcHkgdG8gY2FsbCB0aHJvdWdoIHRvIHRoZSBhY3R1
YWwgaW1wbGVtZW5hdGF0aW9uLgorICoKKyAqIEBleGFtcGxlCisgKiB2YXIgZm9vID0geworICog
ICBiYXI6IGZ1bmN0aW9uKCkgeyAvLyBkbyBzb21lIHN0dWZmIH0KKyAqIH0KKyAqCisgKiAvLyBk
ZWZpbmluZyBhIHNweSBvbiBhbiBleGlzdGluZyBwcm9wZXJ0eTogZm9vLmJhcgorICogc3B5T24o
Zm9vLCAnYmFyJykuYW5kQ2FsbFRocm91Z2goKTsKKyAqLworamFzbWluZS5TcHkucHJvdG90eXBl
LmFuZENhbGxUaHJvdWdoID0gZnVuY3Rpb24oKSB7CisgIHRoaXMucGxhbiA9IHRoaXMub3JpZ2lu
YWxWYWx1ZTsKKyAgcmV0dXJuIHRoaXM7Cit9OworCisvKioKKyAqIEZvciBzZXR0aW5nIHRoZSBy
ZXR1cm4gdmFsdWUgb2YgYSBzcHkuCisgKgorICogQGV4YW1wbGUKKyAqIC8vIGRlZmluaW5nIGEg
c3B5IGZyb20gc2NyYXRjaDogZm9vKCkgcmV0dXJucyAnYmF6JworICogdmFyIGZvbyA9IGphc21p
bmUuY3JlYXRlU3B5KCdzcHkgb24gZm9vJykuYW5kUmV0dXJuKCdiYXonKTsKKyAqCisgKiAvLyBk
ZWZpbmluZyBhIHNweSBvbiBhbiBleGlzdGluZyBwcm9wZXJ0eTogZm9vLmJhcigpIHJldHVybnMg
J2JheicKKyAqIHNweU9uKGZvbywgJ2JhcicpLmFuZFJldHVybignYmF6Jyk7CisgKgorICogQHBh
cmFtIHtPYmplY3R9IHZhbHVlCisgKi8KK2phc21pbmUuU3B5LnByb3RvdHlwZS5hbmRSZXR1cm4g
PSBmdW5jdGlvbih2YWx1ZSkgeworICB0aGlzLnBsYW4gPSBmdW5jdGlvbigpIHsKKyAgICByZXR1
cm4gdmFsdWU7CisgIH07CisgIHJldHVybiB0aGlzOworfTsKKworLyoqCisgKiBGb3IgdGhyb3dp
bmcgYW4gZXhjZXB0aW9uIHdoZW4gYSBzcHkgaXMgY2FsbGVkLgorICoKKyAqIEBleGFtcGxlCisg
KiAvLyBkZWZpbmluZyBhIHNweSBmcm9tIHNjcmF0Y2g6IGZvbygpIHRocm93cyBhbiBleGNlcHRp
b24gdy8gbWVzc2FnZSAnb3VjaCcKKyAqIHZhciBmb28gPSBqYXNtaW5lLmNyZWF0ZVNweSgnc3B5
IG9uIGZvbycpLmFuZFRocm93KCdiYXonKTsKKyAqCisgKiAvLyBkZWZpbmluZyBhIHNweSBvbiBh
biBleGlzdGluZyBwcm9wZXJ0eTogZm9vLmJhcigpIHRocm93cyBhbiBleGNlcHRpb24gdy8gbWVz
c2FnZSAnb3VjaCcKKyAqIHNweU9uKGZvbywgJ2JhcicpLmFuZFRocm93KCdiYXonKTsKKyAqCisg
KiBAcGFyYW0ge1N0cmluZ30gZXhjZXB0aW9uTXNnCisgKi8KK2phc21pbmUuU3B5LnByb3RvdHlw
ZS5hbmRUaHJvdyA9IGZ1bmN0aW9uKGV4Y2VwdGlvbk1zZykgeworICB0aGlzLnBsYW4gPSBmdW5j
dGlvbigpIHsKKyAgICB0aHJvdyBleGNlcHRpb25Nc2c7CisgIH07CisgIHJldHVybiB0aGlzOwor
fTsKKworLyoqCisgKiBDYWxscyBhbiBhbHRlcm5hdGUgaW1wbGVtZW50YXRpb24gd2hlbiBhIHNw
eSBpcyBjYWxsZWQuCisgKgorICogQGV4YW1wbGUKKyAqIHZhciBiYXogPSBmdW5jdGlvbigpIHsK
KyAqICAgLy8gZG8gc29tZSBzdHVmZiwgcmV0dXJuIHNvbWV0aGluZworICogfQorICogLy8gZGVm
aW5pbmcgYSBzcHkgZnJvbSBzY3JhdGNoOiBmb28oKSBjYWxscyB0aGUgZnVuY3Rpb24gYmF6Cisg
KiB2YXIgZm9vID0gamFzbWluZS5jcmVhdGVTcHkoJ3NweSBvbiBmb28nKS5hbmRDYWxsKGJheik7
CisgKgorICogLy8gZGVmaW5pbmcgYSBzcHkgb24gYW4gZXhpc3RpbmcgcHJvcGVydHk6IGZvby5i
YXIoKSBjYWxscyBhbiBhbm9ueW1ub3VzIGZ1bmN0aW9uCisgKiBzcHlPbihmb28sICdiYXInKS5h
bmRDYWxsKGZ1bmN0aW9uKCkgeyByZXR1cm4gJ2Jheic7fSApOworICoKKyAqIEBwYXJhbSB7RnVu
Y3Rpb259IGZha2VGdW5jCisgKi8KK2phc21pbmUuU3B5LnByb3RvdHlwZS5hbmRDYWxsRmFrZSA9
IGZ1bmN0aW9uKGZha2VGdW5jKSB7CisgIHRoaXMucGxhbiA9IGZha2VGdW5jOworICByZXR1cm4g
dGhpczsKK307CisKKy8qKgorICogUmVzZXRzIGFsbCBvZiBhIHNweSdzIHRoZSB0cmFja2luZyB2
YXJpYWJsZXMgc28gdGhhdCBpdCBjYW4gYmUgdXNlZCBhZ2Fpbi4KKyAqCisgKiBAZXhhbXBsZQor
ICogc3B5T24oZm9vLCAnYmFyJyk7CisgKgorICogZm9vLmJhcigpOworICoKKyAqIGV4cGVjdChm
b28uYmFyLmNhbGxDb3VudCkudG9FcXVhbCgxKTsKKyAqCisgKiBmb28uYmFyLnJlc2V0KCk7Cisg
KgorICogZXhwZWN0KGZvby5iYXIuY2FsbENvdW50KS50b0VxdWFsKDApOworICovCitqYXNtaW5l
LlNweS5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbigpIHsKKyAgdGhpcy53YXNDYWxsZWQgPSBm
YWxzZTsKKyAgdGhpcy5jYWxsQ291bnQgPSAwOworICB0aGlzLmFyZ3NGb3JDYWxsID0gW107Cisg
IHRoaXMuY2FsbHMgPSBbXTsKKyAgdGhpcy5tb3N0UmVjZW50Q2FsbCA9IHt9OworfTsKKworamFz
bWluZS5jcmVhdGVTcHkgPSBmdW5jdGlvbihuYW1lKSB7CisKKyAgdmFyIHNweU9iaiA9IGZ1bmN0
aW9uKCkgeworICAgIHNweU9iai53YXNDYWxsZWQgPSB0cnVlOworICAgIHNweU9iai5jYWxsQ291
bnQrKzsKKyAgICB2YXIgYXJncyA9IGphc21pbmUudXRpbC5hcmdzVG9BcnJheShhcmd1bWVudHMp
OworICAgIHNweU9iai5tb3N0UmVjZW50Q2FsbC5vYmplY3QgPSB0aGlzOworICAgIHNweU9iai5t
b3N0UmVjZW50Q2FsbC5hcmdzID0gYXJnczsKKyAgICBzcHlPYmouYXJnc0ZvckNhbGwucHVzaChh
cmdzKTsKKyAgICBzcHlPYmouY2FsbHMucHVzaCh7b2JqZWN0OiB0aGlzLCBhcmdzOiBhcmdzfSk7
CisgICAgcmV0dXJuIHNweU9iai5wbGFuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisgIH07CisK
KyAgdmFyIHNweSA9IG5ldyBqYXNtaW5lLlNweShuYW1lKTsKKworICBmb3IgKHZhciBwcm9wIGlu
IHNweSkgeworICAgIHNweU9ialtwcm9wXSA9IHNweVtwcm9wXTsKKyAgfQorCisgIHNweU9iai5y
ZXNldCgpOworCisgIHJldHVybiBzcHlPYmo7Cit9OworCisvKioKKyAqIERldGVybWluZXMgd2hl
dGhlciBhbiBvYmplY3QgaXMgYSBzcHkuCisgKgorICogQHBhcmFtIHtqYXNtaW5lLlNweXxPYmpl
Y3R9IHB1dGF0aXZlU3B5CisgKiBAcmV0dXJucyB7Qm9vbGVhbn0KKyAqLworamFzbWluZS5pc1Nw
eSA9IGZ1bmN0aW9uKHB1dGF0aXZlU3B5KSB7CisgIHJldHVybiBwdXRhdGl2ZVNweSAmJiBwdXRh
dGl2ZVNweS5pc1NweTsKK307CisKKy8qKgorICogQ3JlYXRlcyBhIG1vcmUgY29tcGxpY2F0ZWQg
c3B5OiBhbiBPYmplY3QgdGhhdCBoYXMgZXZlcnkgcHJvcGVydHkgYSBmdW5jdGlvbiB0aGF0IGlz
IGEgc3B5LiAgVXNlZCBmb3Igc3R1YmJpbmcgc29tZXRoaW5nCisgKiBsYXJnZSBpbiBvbmUgY2Fs
bC4KKyAqCisgKiBAcGFyYW0ge1N0cmluZ30gYmFzZU5hbWUgbmFtZSBvZiBzcHkgY2xhc3MKKyAq
IEBwYXJhbSB7QXJyYXl9IG1ldGhvZE5hbWVzIGFycmF5IG9mIG5hbWVzIG9mIG1ldGhvZHMgdG8g
bWFrZSBzcGllcworICovCitqYXNtaW5lLmNyZWF0ZVNweU9iaiA9IGZ1bmN0aW9uKGJhc2VOYW1l
LCBtZXRob2ROYW1lcykgeworICBpZiAoIWphc21pbmUuaXNBcnJheV8obWV0aG9kTmFtZXMpIHx8
IG1ldGhvZE5hbWVzLmxlbmd0aCA9PT0gMCkgeworICAgIHRocm93IG5ldyBFcnJvcignY3JlYXRl
U3B5T2JqIHJlcXVpcmVzIGEgbm9uLWVtcHR5IGFycmF5IG9mIG1ldGhvZCBuYW1lcyB0byBjcmVh
dGUgc3BpZXMgZm9yJyk7CisgIH0KKyAgdmFyIG9iaiA9IHt9OworICBmb3IgKHZhciBpID0gMDsg
aSA8IG1ldGhvZE5hbWVzLmxlbmd0aDsgaSsrKSB7CisgICAgb2JqW21ldGhvZE5hbWVzW2ldXSA9
IGphc21pbmUuY3JlYXRlU3B5KGJhc2VOYW1lICsgJy4nICsgbWV0aG9kTmFtZXNbaV0pOworICB9
CisgIHJldHVybiBvYmo7Cit9OworCisvKioKKyAqIEFsbCBwYXJhbWV0ZXJzIGFyZSBwcmV0dHkt
cHJpbnRlZCBhbmQgY29uY2F0ZW5hdGVkIHRvZ2V0aGVyLCB0aGVuIHdyaXR0ZW4gdG8gdGhlIGN1
cnJlbnQgc3BlYydzIG91dHB1dC4KKyAqCisgKiBCZSBjYXJlZnVsIG5vdCB0byBsZWF2ZSBjYWxs
cyB0byA8Y29kZT5qYXNtaW5lLmxvZzwvY29kZT4gaW4gcHJvZHVjdGlvbiBjb2RlLgorICovCitq
YXNtaW5lLmxvZyA9IGZ1bmN0aW9uKCkgeworICB2YXIgc3BlYyA9IGphc21pbmUuZ2V0RW52KCku
Y3VycmVudFNwZWM7CisgIHNwZWMubG9nLmFwcGx5KHNwZWMsIGFyZ3VtZW50cyk7Cit9OworCisv
KioKKyAqIEZ1bmN0aW9uIHRoYXQgaW5zdGFsbHMgYSBzcHkgb24gYW4gZXhpc3Rpbmcgb2JqZWN0
J3MgbWV0aG9kIG5hbWUuICBVc2VkIHdpdGhpbiBhIFNwZWMgdG8gY3JlYXRlIGEgc3B5LgorICoK
KyAqIEBleGFtcGxlCisgKiAvLyBzcHkgZXhhbXBsZQorICogdmFyIGZvbyA9IHsKKyAqICAgbm90
OiBmdW5jdGlvbihib29sKSB7IHJldHVybiAhYm9vbDsgfQorICogfQorICogc3B5T24oZm9vLCAn
bm90Jyk7IC8vIGFjdHVhbCBmb28ubm90IHdpbGwgbm90IGJlIGNhbGxlZCwgZXhlY3V0aW9uIHN0
b3BzCisgKgorICogQHNlZSBqYXNtaW5lLmNyZWF0ZVNweQorICogQHBhcmFtIG9iagorICogQHBh
cmFtIG1ldGhvZE5hbWUKKyAqIEByZXR1cm5zIGEgSmFzbWluZSBzcHkgdGhhdCBjYW4gYmUgY2hh
aW5lZCB3aXRoIGFsbCBzcHkgbWV0aG9kcworICovCit2YXIgc3B5T24gPSBmdW5jdGlvbihvYmos
IG1ldGhvZE5hbWUpIHsKKyAgcmV0dXJuIGphc21pbmUuZ2V0RW52KCkuY3VycmVudFNwZWMuc3B5
T24ob2JqLCBtZXRob2ROYW1lKTsKK307CitpZiAoaXNDb21tb25KUykgZXhwb3J0cy5zcHlPbiA9
IHNweU9uOworCisvKioKKyAqIENyZWF0ZXMgYSBKYXNtaW5lIHNwZWMgdGhhdCB3aWxsIGJlIGFk
ZGVkIHRvIHRoZSBjdXJyZW50IHN1aXRlLgorICoKKyAqIC8vIFRPRE86IHBlbmRpbmcgdGVzdHMK
KyAqCisgKiBAZXhhbXBsZQorICogaXQoJ3Nob3VsZCBiZSB0cnVlJywgZnVuY3Rpb24oKSB7Cisg
KiAgIGV4cGVjdCh0cnVlKS50b0VxdWFsKHRydWUpOworICogfSk7CisgKgorICogQHBhcmFtIHtT
dHJpbmd9IGRlc2MgZGVzY3JpcHRpb24gb2YgdGhpcyBzcGVjaWZpY2F0aW9uCisgKiBAcGFyYW0g
e0Z1bmN0aW9ufSBmdW5jIGRlZmluZXMgdGhlIHByZWNvbmRpdGlvbnMgYW5kIGV4cGVjdGF0aW9u
cyBvZiB0aGUgc3BlYworICovCit2YXIgaXQgPSBmdW5jdGlvbihkZXNjLCBmdW5jKSB7CisgIHJl
dHVybiBqYXNtaW5lLmdldEVudigpLml0KGRlc2MsIGZ1bmMpOworfTsKK2lmIChpc0NvbW1vbkpT
KSBleHBvcnRzLml0ID0gaXQ7CisKKy8qKgorICogQ3JlYXRlcyBhIDxlbT5kaXNhYmxlZDwvZW0+
IEphc21pbmUgc3BlYy4KKyAqCisgKiBBIGNvbnZlbmllbmNlIG1ldGhvZCB0aGF0IGFsbG93cyBl
eGlzdGluZyBzcGVjcyB0byBiZSBkaXNhYmxlZCB0ZW1wb3JhcmlseSBkdXJpbmcgZGV2ZWxvcG1l
bnQuCisgKgorICogQHBhcmFtIHtTdHJpbmd9IGRlc2MgZGVzY3JpcHRpb24gb2YgdGhpcyBzcGVj
aWZpY2F0aW9uCisgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIGRlZmluZXMgdGhlIHByZWNvbmRp
dGlvbnMgYW5kIGV4cGVjdGF0aW9ucyBvZiB0aGUgc3BlYworICovCit2YXIgeGl0ID0gZnVuY3Rp
b24oZGVzYywgZnVuYykgeworICByZXR1cm4gamFzbWluZS5nZXRFbnYoKS54aXQoZGVzYywgZnVu
Yyk7Cit9OworaWYgKGlzQ29tbW9uSlMpIGV4cG9ydHMueGl0ID0geGl0OworCisvKioKKyAqIFN0
YXJ0cyBhIGNoYWluIGZvciBhIEphc21pbmUgZXhwZWN0YXRpb24uCisgKgorICogSXQgaXMgcGFz
c2VkIGFuIE9iamVjdCB0aGF0IGlzIHRoZSBhY3R1YWwgdmFsdWUgYW5kIHNob3VsZCBjaGFpbiB0
byBvbmUgb2YgdGhlIG1hbnkKKyAqIGphc21pbmUuTWF0Y2hlcnMgZnVuY3Rpb25zLgorICoKKyAq
IEBwYXJhbSB7T2JqZWN0fSBhY3R1YWwgQWN0dWFsIHZhbHVlIHRvIHRlc3QgYWdhaW5zdCBhbmQg
ZXhwZWN0ZWQgdmFsdWUKKyAqLwordmFyIGV4cGVjdCA9IGZ1bmN0aW9uKGFjdHVhbCkgeworICBy
ZXR1cm4gamFzbWluZS5nZXRFbnYoKS5jdXJyZW50U3BlYy5leHBlY3QoYWN0dWFsKTsKK307Citp
ZiAoaXNDb21tb25KUykgZXhwb3J0cy5leHBlY3QgPSBleHBlY3Q7CisKKy8qKgorICogRGVmaW5l
cyBwYXJ0IG9mIGEgamFzbWluZSBzcGVjLiAgVXNlZCBpbiBjb21pbmJpbmF0aW9uIHdpdGggd2Fp
dHMgb3Igd2FpdHNGb3IgaW4gYXN5bmNocm5vdXMgc3BlY3MuCisgKgorICogQHBhcmFtIHtGdW5j
dGlvbn0gZnVuYyBGdW5jdGlvbiB0aGF0IGRlZmluZXMgcGFydCBvZiBhIGphc21pbmUgc3BlYy4K
KyAqLwordmFyIHJ1bnMgPSBmdW5jdGlvbihmdW5jKSB7CisgIGphc21pbmUuZ2V0RW52KCkuY3Vy
cmVudFNwZWMucnVucyhmdW5jKTsKK307CitpZiAoaXNDb21tb25KUykgZXhwb3J0cy5ydW5zID0g
cnVuczsKKworLyoqCisgKiBXYWl0cyBhIGZpeGVkIHRpbWUgcGVyaW9kIGJlZm9yZSBtb3Zpbmcg
dG8gdGhlIG5leHQgYmxvY2suCisgKgorICogQGRlcHJlY2F0ZWQgVXNlIHdhaXRzRm9yKCkgaW5z
dGVhZAorICogQHBhcmFtIHtOdW1iZXJ9IHRpbWVvdXQgbWlsbGlzZWNvbmRzIHRvIHdhaXQKKyAq
LwordmFyIHdhaXRzID0gZnVuY3Rpb24odGltZW91dCkgeworICBqYXNtaW5lLmdldEVudigpLmN1
cnJlbnRTcGVjLndhaXRzKHRpbWVvdXQpOworfTsKK2lmIChpc0NvbW1vbkpTKSBleHBvcnRzLndh
aXRzID0gd2FpdHM7CisKKy8qKgorICogV2FpdHMgZm9yIHRoZSBsYXRjaEZ1bmN0aW9uIHRvIHJl
dHVybiB0cnVlIGJlZm9yZSBwcm9jZWVkaW5nIHRvIHRoZSBuZXh0IGJsb2NrLgorICoKKyAqIEBw
YXJhbSB7RnVuY3Rpb259IGxhdGNoRnVuY3Rpb24KKyAqIEBwYXJhbSB7U3RyaW5nfSBvcHRpb25h
bF90aW1lb3V0TWVzc2FnZQorICogQHBhcmFtIHtOdW1iZXJ9IG9wdGlvbmFsX3RpbWVvdXQKKyAq
LwordmFyIHdhaXRzRm9yID0gZnVuY3Rpb24obGF0Y2hGdW5jdGlvbiwgb3B0aW9uYWxfdGltZW91
dE1lc3NhZ2UsIG9wdGlvbmFsX3RpbWVvdXQpIHsKKyAgamFzbWluZS5nZXRFbnYoKS5jdXJyZW50
U3BlYy53YWl0c0Zvci5hcHBseShqYXNtaW5lLmdldEVudigpLmN1cnJlbnRTcGVjLCBhcmd1bWVu
dHMpOworfTsKK2lmIChpc0NvbW1vbkpTKSBleHBvcnRzLndhaXRzRm9yID0gd2FpdHNGb3I7CisK
Ky8qKgorICogQSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCBiZWZvcmUgZWFjaCBzcGVjIGluIGEg
c3VpdGUuCisgKgorICogVXNlZCBmb3Igc3BlYyBzZXR1cCwgaW5jbHVkaW5nIHZhbGlkYXRpbmcg
YXNzdW1wdGlvbnMuCisgKgorICogQHBhcmFtIHtGdW5jdGlvbn0gYmVmb3JlRWFjaEZ1bmN0aW9u
CisgKi8KK3ZhciBiZWZvcmVFYWNoID0gZnVuY3Rpb24oYmVmb3JlRWFjaEZ1bmN0aW9uKSB7Cisg
IGphc21pbmUuZ2V0RW52KCkuYmVmb3JlRWFjaChiZWZvcmVFYWNoRnVuY3Rpb24pOworfTsKK2lm
IChpc0NvbW1vbkpTKSBleHBvcnRzLmJlZm9yZUVhY2ggPSBiZWZvcmVFYWNoOworCisvKioKKyAq
IEEgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgYWZ0ZXIgZWFjaCBzcGVjIGluIGEgc3VpdGUuCisg
KgorICogVXNlZCBmb3IgcmVzdG9yaW5nIGFueSBzdGF0ZSB0aGF0IGlzIGhpamFja2VkIGR1cmlu
ZyBzcGVjIGV4ZWN1dGlvbi4KKyAqCisgKiBAcGFyYW0ge0Z1bmN0aW9ufSBhZnRlckVhY2hGdW5j
dGlvbgorICovCit2YXIgYWZ0ZXJFYWNoID0gZnVuY3Rpb24oYWZ0ZXJFYWNoRnVuY3Rpb24pIHsK
KyAgamFzbWluZS5nZXRFbnYoKS5hZnRlckVhY2goYWZ0ZXJFYWNoRnVuY3Rpb24pOworfTsKK2lm
IChpc0NvbW1vbkpTKSBleHBvcnRzLmFmdGVyRWFjaCA9IGFmdGVyRWFjaDsKKworLyoqCisgKiBE
ZWZpbmVzIGEgc3VpdGUgb2Ygc3BlY2lmaWNhdGlvbnMuCisgKgorICogU3RvcmVzIHRoZSBkZXNj
cmlwdGlvbiBhbmQgYWxsIGRlZmluZWQgc3BlY3MgaW4gdGhlIEphc21pbmUgZW52aXJvbm1lbnQg
YXMgb25lIHN1aXRlIG9mIHNwZWNzLiBWYXJpYWJsZXMgZGVjbGFyZWQKKyAqIGFyZSBhY2Nlc3Np
YmxlIGJ5IGNhbGxzIHRvIGJlZm9yZUVhY2gsIGl0LCBhbmQgYWZ0ZXJFYWNoLiBEZXNjcmliZSBi
bG9ja3MgY2FuIGJlIG5lc3RlZCwgYWxsb3dpbmcgZm9yIHNwZWNpYWxpemF0aW9uCisgKiBvZiBz
ZXR1cCBpbiBzb21lIHRlc3RzLgorICoKKyAqIEBleGFtcGxlCisgKiAvLyBUT0RPOiBhIHNpbXBs
ZSBzdWl0ZQorICoKKyAqIC8vIFRPRE86IGEgc2ltcGxlIHN1aXRlIHdpdGggYSBuZXN0ZWQgZGVz
Y3JpYmUgYmxvY2sKKyAqCisgKiBAcGFyYW0ge1N0cmluZ30gZGVzY3JpcHRpb24gQSBzdHJpbmcs
IHVzdWFsbHkgdGhlIGNsYXNzIHVuZGVyIHRlc3QuCisgKiBAcGFyYW0ge0Z1bmN0aW9ufSBzcGVj
RGVmaW5pdGlvbnMgZnVuY3Rpb24gdGhhdCBkZWZpbmVzIHNldmVyYWwgc3BlY3MuCisgKi8KK3Zh
ciBkZXNjcmliZSA9IGZ1bmN0aW9uKGRlc2NyaXB0aW9uLCBzcGVjRGVmaW5pdGlvbnMpIHsKKyAg
cmV0dXJuIGphc21pbmUuZ2V0RW52KCkuZGVzY3JpYmUoZGVzY3JpcHRpb24sIHNwZWNEZWZpbml0
aW9ucyk7Cit9OworaWYgKGlzQ29tbW9uSlMpIGV4cG9ydHMuZGVzY3JpYmUgPSBkZXNjcmliZTsK
KworLyoqCisgKiBEaXNhYmxlcyBhIHN1aXRlIG9mIHNwZWNpZmljYXRpb25zLiAgVXNlZCB0byBk
aXNhYmxlIHNvbWUgc3VpdGVzIGluIGEgZmlsZSwgb3IgZmlsZXMsIHRlbXBvcmFyaWx5IGR1cmlu
ZyBkZXZlbG9wbWVudC4KKyAqCisgKiBAcGFyYW0ge1N0cmluZ30gZGVzY3JpcHRpb24gQSBzdHJp
bmcsIHVzdWFsbHkgdGhlIGNsYXNzIHVuZGVyIHRlc3QuCisgKiBAcGFyYW0ge0Z1bmN0aW9ufSBz
cGVjRGVmaW5pdGlvbnMgZnVuY3Rpb24gdGhhdCBkZWZpbmVzIHNldmVyYWwgc3BlY3MuCisgKi8K
K3ZhciB4ZGVzY3JpYmUgPSBmdW5jdGlvbihkZXNjcmlwdGlvbiwgc3BlY0RlZmluaXRpb25zKSB7
CisgIHJldHVybiBqYXNtaW5lLmdldEVudigpLnhkZXNjcmliZShkZXNjcmlwdGlvbiwgc3BlY0Rl
ZmluaXRpb25zKTsKK307CitpZiAoaXNDb21tb25KUykgZXhwb3J0cy54ZGVzY3JpYmUgPSB4ZGVz
Y3JpYmU7CisKKworLy8gUHJvdmlkZSB0aGUgWE1MSHR0cFJlcXVlc3QgY2xhc3MgZm9yIElFIDUu
eC02Lng6CitqYXNtaW5lLlhtbEh0dHBSZXF1ZXN0ID0gKHR5cGVvZiBYTUxIdHRwUmVxdWVzdCA9
PSAidW5kZWZpbmVkIikgPyBmdW5jdGlvbigpIHsKKyAgZnVuY3Rpb24gdHJ5SXQoZikgeworICAg
IHRyeSB7CisgICAgICByZXR1cm4gZigpOworICAgIH0gY2F0Y2goZSkgeworICAgIH0KKyAgICBy
ZXR1cm4gbnVsbDsKKyAgfQorCisgIHZhciB4aHIgPSB0cnlJdChmdW5jdGlvbigpIHsKKyAgICBy
ZXR1cm4gbmV3IEFjdGl2ZVhPYmplY3QoIk1zeG1sMi5YTUxIVFRQLjYuMCIpOworICB9KSB8fAor
ICAgIHRyeUl0KGZ1bmN0aW9uKCkgeworICAgICAgcmV0dXJuIG5ldyBBY3RpdmVYT2JqZWN0KCJN
c3htbDIuWE1MSFRUUC4zLjAiKTsKKyAgICB9KSB8fAorICAgIHRyeUl0KGZ1bmN0aW9uKCkgewor
ICAgICAgcmV0dXJuIG5ldyBBY3RpdmVYT2JqZWN0KCJNc3htbDIuWE1MSFRUUCIpOworICAgIH0p
IHx8CisgICAgdHJ5SXQoZnVuY3Rpb24oKSB7CisgICAgICByZXR1cm4gbmV3IEFjdGl2ZVhPYmpl
Y3QoIk1pY3Jvc29mdC5YTUxIVFRQIik7CisgICAgfSk7CisKKyAgaWYgKCF4aHIpIHRocm93IG5l
dyBFcnJvcigiVGhpcyBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgWE1MSHR0cFJlcXVlc3QuIik7
CisKKyAgcmV0dXJuIHhocjsKK30gOiBYTUxIdHRwUmVxdWVzdDsKKy8qKgorICogQG5hbWVzcGFj
ZQorICovCitqYXNtaW5lLnV0aWwgPSB7fTsKKworLyoqCisgKiBEZWNsYXJlIHRoYXQgYSBjaGls
ZCBjbGFzcyBpbmhlcml0IGl0J3MgcHJvdG90eXBlIGZyb20gdGhlIHBhcmVudCBjbGFzcy4KKyAq
CisgKiBAcHJpdmF0ZQorICogQHBhcmFtIHtGdW5jdGlvbn0gY2hpbGRDbGFzcworICogQHBhcmFt
IHtGdW5jdGlvbn0gcGFyZW50Q2xhc3MKKyAqLworamFzbWluZS51dGlsLmluaGVyaXQgPSBmdW5j
dGlvbihjaGlsZENsYXNzLCBwYXJlbnRDbGFzcykgeworICAvKioKKyAgICogQHByaXZhdGUKKyAg
ICovCisgIHZhciBzdWJjbGFzcyA9IGZ1bmN0aW9uKCkgeworICB9OworICBzdWJjbGFzcy5wcm90
b3R5cGUgPSBwYXJlbnRDbGFzcy5wcm90b3R5cGU7CisgIGNoaWxkQ2xhc3MucHJvdG90eXBlID0g
bmV3IHN1YmNsYXNzKCk7Cit9OworCitqYXNtaW5lLnV0aWwuZm9ybWF0RXhjZXB0aW9uID0gZnVu
Y3Rpb24oZSkgeworICB2YXIgbGluZU51bWJlcjsKKyAgaWYgKGUubGluZSkgeworICAgIGxpbmVO
dW1iZXIgPSBlLmxpbmU7CisgIH0KKyAgZWxzZSBpZiAoZS5saW5lTnVtYmVyKSB7CisgICAgbGlu
ZU51bWJlciA9IGUubGluZU51bWJlcjsKKyAgfQorCisgIHZhciBmaWxlOworCisgIGlmIChlLnNv
dXJjZVVSTCkgeworICAgIGZpbGUgPSBlLnNvdXJjZVVSTDsKKyAgfQorICBlbHNlIGlmIChlLmZp
bGVOYW1lKSB7CisgICAgZmlsZSA9IGUuZmlsZU5hbWU7CisgIH0KKworICB2YXIgbWVzc2FnZSA9
IChlLm5hbWUgJiYgZS5tZXNzYWdlKSA/IChlLm5hbWUgKyAnOiAnICsgZS5tZXNzYWdlKSA6IGUu
dG9TdHJpbmcoKTsKKworICBpZiAoZmlsZSAmJiBsaW5lTnVtYmVyKSB7CisgICAgbWVzc2FnZSAr
PSAnIGluICcgKyBmaWxlICsgJyAobGluZSAnICsgbGluZU51bWJlciArICcpJzsKKyAgfQorCisg
IHJldHVybiBtZXNzYWdlOworfTsKKworamFzbWluZS51dGlsLmh0bWxFc2NhcGUgPSBmdW5jdGlv
bihzdHIpIHsKKyAgaWYgKCFzdHIpIHJldHVybiBzdHI7CisgIHJldHVybiBzdHIucmVwbGFjZSgv
Ji9nLCAnJmFtcDsnKQorICAgIC5yZXBsYWNlKC88L2csICcmbHQ7JykKKyAgICAucmVwbGFjZSgv
Pi9nLCAnJmd0OycpOworfTsKKworamFzbWluZS51dGlsLmFyZ3NUb0FycmF5ID0gZnVuY3Rpb24o
YXJncykgeworICB2YXIgYXJyYXlPZkFyZ3MgPSBbXTsKKyAgZm9yICh2YXIgaSA9IDA7IGkgPCBh
cmdzLmxlbmd0aDsgaSsrKSBhcnJheU9mQXJncy5wdXNoKGFyZ3NbaV0pOworICByZXR1cm4gYXJy
YXlPZkFyZ3M7Cit9OworCitqYXNtaW5lLnV0aWwuZXh0ZW5kID0gZnVuY3Rpb24oZGVzdGluYXRp
b24sIHNvdXJjZSkgeworICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBzb3VyY2UpIGRlc3RpbmF0aW9u
W3Byb3BlcnR5XSA9IHNvdXJjZVtwcm9wZXJ0eV07CisgIHJldHVybiBkZXN0aW5hdGlvbjsKK307
CisKKy8qKgorICogRW52aXJvbm1lbnQgZm9yIEphc21pbmUKKyAqCisgKiBAY29uc3RydWN0b3IK
KyAqLworamFzbWluZS5FbnYgPSBmdW5jdGlvbigpIHsKKyAgdGhpcy5jdXJyZW50U3BlYyA9IG51
bGw7CisgIHRoaXMuY3VycmVudFN1aXRlID0gbnVsbDsKKyAgdGhpcy5jdXJyZW50UnVubmVyXyA9
IG5ldyBqYXNtaW5lLlJ1bm5lcih0aGlzKTsKKworICB0aGlzLnJlcG9ydGVyID0gbmV3IGphc21p
bmUuTXVsdGlSZXBvcnRlcigpOworCisgIHRoaXMudXBkYXRlSW50ZXJ2YWwgPSBqYXNtaW5lLkRF
RkFVTFRfVVBEQVRFX0lOVEVSVkFMOworICB0aGlzLmRlZmF1bHRUaW1lb3V0SW50ZXJ2YWwgPSBq
YXNtaW5lLkRFRkFVTFRfVElNRU9VVF9JTlRFUlZBTDsKKyAgdGhpcy5sYXN0VXBkYXRlID0gMDsK
KyAgdGhpcy5zcGVjRmlsdGVyID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIHRydWU7CisgIH07
CisKKyAgdGhpcy5uZXh0U3BlY0lkXyA9IDA7CisgIHRoaXMubmV4dFN1aXRlSWRfID0gMDsKKyAg
dGhpcy5lcXVhbGl0eVRlc3RlcnNfID0gW107CisKKyAgLy8gd3JhcCBtYXRjaGVycworICB0aGlz
Lm1hdGNoZXJzQ2xhc3MgPSBmdW5jdGlvbigpIHsKKyAgICBqYXNtaW5lLk1hdGNoZXJzLmFwcGx5
KHRoaXMsIGFyZ3VtZW50cyk7CisgIH07CisgIGphc21pbmUudXRpbC5pbmhlcml0KHRoaXMubWF0
Y2hlcnNDbGFzcywgamFzbWluZS5NYXRjaGVycyk7CisKKyAgamFzbWluZS5NYXRjaGVycy53cmFw
SW50b18oamFzbWluZS5NYXRjaGVycy5wcm90b3R5cGUsIHRoaXMubWF0Y2hlcnNDbGFzcyk7Cit9
OworCisKK2phc21pbmUuRW52LnByb3RvdHlwZS5zZXRUaW1lb3V0ID0gamFzbWluZS5zZXRUaW1l
b3V0OworamFzbWluZS5FbnYucHJvdG90eXBlLmNsZWFyVGltZW91dCA9IGphc21pbmUuY2xlYXJU
aW1lb3V0OworamFzbWluZS5FbnYucHJvdG90eXBlLnNldEludGVydmFsID0gamFzbWluZS5zZXRJ
bnRlcnZhbDsKK2phc21pbmUuRW52LnByb3RvdHlwZS5jbGVhckludGVydmFsID0gamFzbWluZS5j
bGVhckludGVydmFsOworCisvKioKKyAqIEByZXR1cm5zIGFuIG9iamVjdCBjb250YWluaW5nIGph
c21pbmUgdmVyc2lvbiBidWlsZCBpbmZvLCBpZiBzZXQuCisgKi8KK2phc21pbmUuRW52LnByb3Rv
dHlwZS52ZXJzaW9uID0gZnVuY3Rpb24gKCkgeworICBpZiAoamFzbWluZS52ZXJzaW9uXykgewor
ICAgIHJldHVybiBqYXNtaW5lLnZlcnNpb25fOworICB9IGVsc2UgeworICAgIHRocm93IG5ldyBF
cnJvcignVmVyc2lvbiBub3Qgc2V0Jyk7CisgIH0KK307CisKKy8qKgorICogQHJldHVybnMgc3Ry
aW5nIGNvbnRhaW5pbmcgamFzbWluZSB2ZXJzaW9uIGJ1aWxkIGluZm8sIGlmIHNldC4KKyAqLwor
amFzbWluZS5FbnYucHJvdG90eXBlLnZlcnNpb25TdHJpbmcgPSBmdW5jdGlvbigpIHsKKyAgaWYg
KCFqYXNtaW5lLnZlcnNpb25fKSB7CisgICAgcmV0dXJuICJ2ZXJzaW9uIHVua25vd24iOworICB9
CisKKyAgdmFyIHZlcnNpb24gPSB0aGlzLnZlcnNpb24oKTsKKyAgdmFyIHZlcnNpb25TdHJpbmcg
PSB2ZXJzaW9uLm1ham9yICsgIi4iICsgdmVyc2lvbi5taW5vciArICIuIiArIHZlcnNpb24uYnVp
bGQ7CisgIGlmICh2ZXJzaW9uLnJlbGVhc2VfY2FuZGlkYXRlKSB7CisgICAgdmVyc2lvblN0cmlu
ZyArPSAiLnJjIiArIHZlcnNpb24ucmVsZWFzZV9jYW5kaWRhdGUKKyAgfQorICB2ZXJzaW9uU3Ry
aW5nICs9ICIgcmV2aXNpb24gIiArIHZlcnNpb24ucmV2aXNpb247CisgIHJldHVybiB2ZXJzaW9u
U3RyaW5nOworfTsKKworLyoqCisgKiBAcmV0dXJucyBhIHNlcXVlbnRpYWwgaW50ZWdlciBzdGFy
dGluZyBhdCAwCisgKi8KK2phc21pbmUuRW52LnByb3RvdHlwZS5uZXh0U3BlY0lkID0gZnVuY3Rp
b24gKCkgeworICByZXR1cm4gdGhpcy5uZXh0U3BlY0lkXysrOworfTsKKworLyoqCisgKiBAcmV0
dXJucyBhIHNlcXVlbnRpYWwgaW50ZWdlciBzdGFydGluZyBhdCAwCisgKi8KK2phc21pbmUuRW52
LnByb3RvdHlwZS5uZXh0U3VpdGVJZCA9IGZ1bmN0aW9uICgpIHsKKyAgcmV0dXJuIHRoaXMubmV4
dFN1aXRlSWRfKys7Cit9OworCisvKioKKyAqIFJlZ2lzdGVyIGEgcmVwb3J0ZXIgdG8gcmVjZWl2
ZSBzdGF0dXMgdXBkYXRlcyBmcm9tIEphc21pbmUuCisgKiBAcGFyYW0ge2phc21pbmUuUmVwb3J0
ZXJ9IHJlcG9ydGVyIEFuIG9iamVjdCB3aGljaCB3aWxsIHJlY2VpdmUgc3RhdHVzIHVwZGF0ZXMu
CisgKi8KK2phc21pbmUuRW52LnByb3RvdHlwZS5hZGRSZXBvcnRlciA9IGZ1bmN0aW9uKHJlcG9y
dGVyKSB7CisgIHRoaXMucmVwb3J0ZXIuYWRkUmVwb3J0ZXIocmVwb3J0ZXIpOworfTsKKworamFz
bWluZS5FbnYucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbigpIHsKKyAgdGhpcy5jdXJyZW50
UnVubmVyXy5leGVjdXRlKCk7Cit9OworCitqYXNtaW5lLkVudi5wcm90b3R5cGUuZGVzY3JpYmUg
PSBmdW5jdGlvbihkZXNjcmlwdGlvbiwgc3BlY0RlZmluaXRpb25zKSB7CisgIHZhciBzdWl0ZSA9
IG5ldyBqYXNtaW5lLlN1aXRlKHRoaXMsIGRlc2NyaXB0aW9uLCBzcGVjRGVmaW5pdGlvbnMsIHRo
aXMuY3VycmVudFN1aXRlKTsKKworICB2YXIgcGFyZW50U3VpdGUgPSB0aGlzLmN1cnJlbnRTdWl0
ZTsKKyAgaWYgKHBhcmVudFN1aXRlKSB7CisgICAgcGFyZW50U3VpdGUuYWRkKHN1aXRlKTsKKyAg
fSBlbHNlIHsKKyAgICB0aGlzLmN1cnJlbnRSdW5uZXJfLmFkZChzdWl0ZSk7CisgIH0KKworICB0
aGlzLmN1cnJlbnRTdWl0ZSA9IHN1aXRlOworCisgIHZhciBkZWNsYXJhdGlvbkVycm9yID0gbnVs
bDsKKyAgdHJ5IHsKKyAgICBzcGVjRGVmaW5pdGlvbnMuY2FsbChzdWl0ZSk7CisgIH0gY2F0Y2go
ZSkgeworICAgIGRlY2xhcmF0aW9uRXJyb3IgPSBlOworICB9CisKKyAgaWYgKGRlY2xhcmF0aW9u
RXJyb3IpIHsKKyAgICB0aGlzLml0KCJlbmNvdW50ZXJlZCBhIGRlY2xhcmF0aW9uIGV4Y2VwdGlv
biIsIGZ1bmN0aW9uKCkgeworICAgICAgdGhyb3cgZGVjbGFyYXRpb25FcnJvcjsKKyAgICB9KTsK
KyAgfQorCisgIHRoaXMuY3VycmVudFN1aXRlID0gcGFyZW50U3VpdGU7CisKKyAgcmV0dXJuIHN1
aXRlOworfTsKKworamFzbWluZS5FbnYucHJvdG90eXBlLmJlZm9yZUVhY2ggPSBmdW5jdGlvbihi
ZWZvcmVFYWNoRnVuY3Rpb24pIHsKKyAgaWYgKHRoaXMuY3VycmVudFN1aXRlKSB7CisgICAgdGhp
cy5jdXJyZW50U3VpdGUuYmVmb3JlRWFjaChiZWZvcmVFYWNoRnVuY3Rpb24pOworICB9IGVsc2Ug
eworICAgIHRoaXMuY3VycmVudFJ1bm5lcl8uYmVmb3JlRWFjaChiZWZvcmVFYWNoRnVuY3Rpb24p
OworICB9Cit9OworCitqYXNtaW5lLkVudi5wcm90b3R5cGUuY3VycmVudFJ1bm5lciA9IGZ1bmN0
aW9uICgpIHsKKyAgcmV0dXJuIHRoaXMuY3VycmVudFJ1bm5lcl87Cit9OworCitqYXNtaW5lLkVu
di5wcm90b3R5cGUuYWZ0ZXJFYWNoID0gZnVuY3Rpb24oYWZ0ZXJFYWNoRnVuY3Rpb24pIHsKKyAg
aWYgKHRoaXMuY3VycmVudFN1aXRlKSB7CisgICAgdGhpcy5jdXJyZW50U3VpdGUuYWZ0ZXJFYWNo
KGFmdGVyRWFjaEZ1bmN0aW9uKTsKKyAgfSBlbHNlIHsKKyAgICB0aGlzLmN1cnJlbnRSdW5uZXJf
LmFmdGVyRWFjaChhZnRlckVhY2hGdW5jdGlvbik7CisgIH0KKworfTsKKworamFzbWluZS5FbnYu
cHJvdG90eXBlLnhkZXNjcmliZSA9IGZ1bmN0aW9uKGRlc2MsIHNwZWNEZWZpbml0aW9ucykgewor
ICByZXR1cm4geworICAgIGV4ZWN1dGU6IGZ1bmN0aW9uKCkgeworICAgIH0KKyAgfTsKK307CisK
K2phc21pbmUuRW52LnByb3RvdHlwZS5pdCA9IGZ1bmN0aW9uKGRlc2NyaXB0aW9uLCBmdW5jKSB7
CisgIHZhciBzcGVjID0gbmV3IGphc21pbmUuU3BlYyh0aGlzLCB0aGlzLmN1cnJlbnRTdWl0ZSwg
ZGVzY3JpcHRpb24pOworICB0aGlzLmN1cnJlbnRTdWl0ZS5hZGQoc3BlYyk7CisgIHRoaXMuY3Vy
cmVudFNwZWMgPSBzcGVjOworCisgIGlmIChmdW5jKSB7CisgICAgc3BlYy5ydW5zKGZ1bmMpOwor
ICB9CisKKyAgcmV0dXJuIHNwZWM7Cit9OworCitqYXNtaW5lLkVudi5wcm90b3R5cGUueGl0ID0g
ZnVuY3Rpb24oZGVzYywgZnVuYykgeworICByZXR1cm4geworICAgIGlkOiB0aGlzLm5leHRTcGVj
SWQoKSwKKyAgICBydW5zOiBmdW5jdGlvbigpIHsKKyAgICB9CisgIH07Cit9OworCitqYXNtaW5l
LkVudi5wcm90b3R5cGUuY29tcGFyZU9iamVjdHNfID0gZnVuY3Rpb24oYSwgYiwgbWlzbWF0Y2hL
ZXlzLCBtaXNtYXRjaFZhbHVlcykgeworICBpZiAoYS5fX0phc21pbmVfYmVlbl9oZXJlX2JlZm9y
ZV9fID09PSBiICYmIGIuX19KYXNtaW5lX2JlZW5faGVyZV9iZWZvcmVfXyA9PT0gYSkgeworICAg
IHJldHVybiB0cnVlOworICB9CisKKyAgYS5fX0phc21pbmVfYmVlbl9oZXJlX2JlZm9yZV9fID0g
YjsKKyAgYi5fX0phc21pbmVfYmVlbl9oZXJlX2JlZm9yZV9fID0gYTsKKworICB2YXIgaGFzS2V5
ID0gZnVuY3Rpb24ob2JqLCBrZXlOYW1lKSB7CisgICAgcmV0dXJuIG9iaiAhPT0gbnVsbCAmJiBv
Ympba2V5TmFtZV0gIT09IGphc21pbmUudW5kZWZpbmVkOworICB9OworCisgIGZvciAodmFyIHBy
b3BlcnR5IGluIGIpIHsKKyAgICBpZiAoIWhhc0tleShhLCBwcm9wZXJ0eSkgJiYgaGFzS2V5KGIs
IHByb3BlcnR5KSkgeworICAgICAgbWlzbWF0Y2hLZXlzLnB1c2goImV4cGVjdGVkIGhhcyBrZXkg
JyIgKyBwcm9wZXJ0eSArICInLCBidXQgbWlzc2luZyBmcm9tIGFjdHVhbC4iKTsKKyAgICB9Cisg
IH0KKyAgZm9yIChwcm9wZXJ0eSBpbiBhKSB7CisgICAgaWYgKCFoYXNLZXkoYiwgcHJvcGVydHkp
ICYmIGhhc0tleShhLCBwcm9wZXJ0eSkpIHsKKyAgICAgIG1pc21hdGNoS2V5cy5wdXNoKCJleHBl
Y3RlZCBtaXNzaW5nIGtleSAnIiArIHByb3BlcnR5ICsgIicsIGJ1dCBwcmVzZW50IGluIGFjdHVh
bC4iKTsKKyAgICB9CisgIH0KKyAgZm9yIChwcm9wZXJ0eSBpbiBiKSB7CisgICAgaWYgKHByb3Bl
cnR5ID09ICdfX0phc21pbmVfYmVlbl9oZXJlX2JlZm9yZV9fJykgY29udGludWU7CisgICAgaWYg
KCF0aGlzLmVxdWFsc18oYVtwcm9wZXJ0eV0sIGJbcHJvcGVydHldLCBtaXNtYXRjaEtleXMsIG1p
c21hdGNoVmFsdWVzKSkgeworICAgICAgbWlzbWF0Y2hWYWx1ZXMucHVzaCgiJyIgKyBwcm9wZXJ0
eSArICInIHdhcyAnIiArIChiW3Byb3BlcnR5XSA/IGphc21pbmUudXRpbC5odG1sRXNjYXBlKGJb
cHJvcGVydHldLnRvU3RyaW5nKCkpIDogYltwcm9wZXJ0eV0pICsgIicgaW4gZXhwZWN0ZWQsIGJ1
dCB3YXMgJyIgKyAoYVtwcm9wZXJ0eV0gPyBqYXNtaW5lLnV0aWwuaHRtbEVzY2FwZShhW3Byb3Bl
cnR5XS50b1N0cmluZygpKSA6IGFbcHJvcGVydHldKSArICInIGluIGFjdHVhbC4iKTsKKyAgICB9
CisgIH0KKworICBpZiAoamFzbWluZS5pc0FycmF5XyhhKSAmJiBqYXNtaW5lLmlzQXJyYXlfKGIp
ICYmIGEubGVuZ3RoICE9IGIubGVuZ3RoKSB7CisgICAgbWlzbWF0Y2hWYWx1ZXMucHVzaCgiYXJy
YXlzIHdlcmUgbm90IHRoZSBzYW1lIGxlbmd0aCIpOworICB9CisKKyAgZGVsZXRlIGEuX19KYXNt
aW5lX2JlZW5faGVyZV9iZWZvcmVfXzsKKyAgZGVsZXRlIGIuX19KYXNtaW5lX2JlZW5faGVyZV9i
ZWZvcmVfXzsKKyAgcmV0dXJuIChtaXNtYXRjaEtleXMubGVuZ3RoID09PSAwICYmIG1pc21hdGNo
VmFsdWVzLmxlbmd0aCA9PT0gMCk7Cit9OworCitqYXNtaW5lLkVudi5wcm90b3R5cGUuZXF1YWxz
XyA9IGZ1bmN0aW9uKGEsIGIsIG1pc21hdGNoS2V5cywgbWlzbWF0Y2hWYWx1ZXMpIHsKKyAgbWlz
bWF0Y2hLZXlzID0gbWlzbWF0Y2hLZXlzIHx8IFtdOworICBtaXNtYXRjaFZhbHVlcyA9IG1pc21h
dGNoVmFsdWVzIHx8IFtdOworCisgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5lcXVhbGl0eVRl
c3RlcnNfLmxlbmd0aDsgaSsrKSB7CisgICAgdmFyIGVxdWFsaXR5VGVzdGVyID0gdGhpcy5lcXVh
bGl0eVRlc3RlcnNfW2ldOworICAgIHZhciByZXN1bHQgPSBlcXVhbGl0eVRlc3RlcihhLCBiLCB0
aGlzLCBtaXNtYXRjaEtleXMsIG1pc21hdGNoVmFsdWVzKTsKKyAgICBpZiAocmVzdWx0ICE9PSBq
YXNtaW5lLnVuZGVmaW5lZCkgcmV0dXJuIHJlc3VsdDsKKyAgfQorCisgIGlmIChhID09PSBiKSBy
ZXR1cm4gdHJ1ZTsKKworICBpZiAoYSA9PT0gamFzbWluZS51bmRlZmluZWQgfHwgYSA9PT0gbnVs
bCB8fCBiID09PSBqYXNtaW5lLnVuZGVmaW5lZCB8fCBiID09PSBudWxsKSB7CisgICAgcmV0dXJu
IChhID09IGphc21pbmUudW5kZWZpbmVkICYmIGIgPT0gamFzbWluZS51bmRlZmluZWQpOworICB9
CisKKyAgaWYgKGphc21pbmUuaXNEb21Ob2RlKGEpICYmIGphc21pbmUuaXNEb21Ob2RlKGIpKSB7
CisgICAgcmV0dXJuIGEgPT09IGI7CisgIH0KKworICBpZiAoYSBpbnN0YW5jZW9mIERhdGUgJiYg
YiBpbnN0YW5jZW9mIERhdGUpIHsKKyAgICByZXR1cm4gYS5nZXRUaW1lKCkgPT0gYi5nZXRUaW1l
KCk7CisgIH0KKworICBpZiAoYSBpbnN0YW5jZW9mIGphc21pbmUuTWF0Y2hlcnMuQW55KSB7Cisg
ICAgcmV0dXJuIGEubWF0Y2hlcyhiKTsKKyAgfQorCisgIGlmIChiIGluc3RhbmNlb2YgamFzbWlu
ZS5NYXRjaGVycy5BbnkpIHsKKyAgICByZXR1cm4gYi5tYXRjaGVzKGEpOworICB9CisKKyAgaWYg
KGphc21pbmUuaXNTdHJpbmdfKGEpICYmIGphc21pbmUuaXNTdHJpbmdfKGIpKSB7CisgICAgcmV0
dXJuIChhID09IGIpOworICB9CisKKyAgaWYgKGphc21pbmUuaXNOdW1iZXJfKGEpICYmIGphc21p
bmUuaXNOdW1iZXJfKGIpKSB7CisgICAgcmV0dXJuIChhID09IGIpOworICB9CisKKyAgaWYgKHR5
cGVvZiBhID09PSAib2JqZWN0IiAmJiB0eXBlb2YgYiA9PT0gIm9iamVjdCIpIHsKKyAgICByZXR1
cm4gdGhpcy5jb21wYXJlT2JqZWN0c18oYSwgYiwgbWlzbWF0Y2hLZXlzLCBtaXNtYXRjaFZhbHVl
cyk7CisgIH0KKworICAvL1N0cmFpZ2h0IGNoZWNrCisgIHJldHVybiAoYSA9PT0gYik7Cit9Owor
CitqYXNtaW5lLkVudi5wcm90b3R5cGUuY29udGFpbnNfID0gZnVuY3Rpb24oaGF5c3RhY2ssIG5l
ZWRsZSkgeworICBpZiAoamFzbWluZS5pc0FycmF5XyhoYXlzdGFjaykpIHsKKyAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IGhheXN0YWNrLmxlbmd0aDsgaSsrKSB7CisgICAgICBpZiAodGhpcy5lcXVh
bHNfKGhheXN0YWNrW2ldLCBuZWVkbGUpKSByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJu
IGZhbHNlOworICB9CisgIHJldHVybiBoYXlzdGFjay5pbmRleE9mKG5lZWRsZSkgPj0gMDsKK307
CisKK2phc21pbmUuRW52LnByb3RvdHlwZS5hZGRFcXVhbGl0eVRlc3RlciA9IGZ1bmN0aW9uKGVx
dWFsaXR5VGVzdGVyKSB7CisgIHRoaXMuZXF1YWxpdHlUZXN0ZXJzXy5wdXNoKGVxdWFsaXR5VGVz
dGVyKTsKK307CisvKiogTm8tb3AgYmFzZSBjbGFzcyBmb3IgSmFzbWluZSByZXBvcnRlcnMuCisg
KgorICogQGNvbnN0cnVjdG9yCisgKi8KK2phc21pbmUuUmVwb3J0ZXIgPSBmdW5jdGlvbigpIHsK
K307CisKKy8vbm9pbnNwZWN0aW9uIEpTVW51c2VkTG9jYWxTeW1ib2xzCitqYXNtaW5lLlJlcG9y
dGVyLnByb3RvdHlwZS5yZXBvcnRSdW5uZXJTdGFydGluZyA9IGZ1bmN0aW9uKHJ1bm5lcikgewor
fTsKKworLy9ub2luc3BlY3Rpb24gSlNVbnVzZWRMb2NhbFN5bWJvbHMKK2phc21pbmUuUmVwb3J0
ZXIucHJvdG90eXBlLnJlcG9ydFJ1bm5lclJlc3VsdHMgPSBmdW5jdGlvbihydW5uZXIpIHsKK307
CisKKy8vbm9pbnNwZWN0aW9uIEpTVW51c2VkTG9jYWxTeW1ib2xzCitqYXNtaW5lLlJlcG9ydGVy
LnByb3RvdHlwZS5yZXBvcnRTdWl0ZVJlc3VsdHMgPSBmdW5jdGlvbihzdWl0ZSkgeworfTsKKwor
Ly9ub2luc3BlY3Rpb24gSlNVbnVzZWRMb2NhbFN5bWJvbHMKK2phc21pbmUuUmVwb3J0ZXIucHJv
dG90eXBlLnJlcG9ydFNwZWNTdGFydGluZyA9IGZ1bmN0aW9uKHNwZWMpIHsKK307CisKKy8vbm9p
bnNwZWN0aW9uIEpTVW51c2VkTG9jYWxTeW1ib2xzCitqYXNtaW5lLlJlcG9ydGVyLnByb3RvdHlw
ZS5yZXBvcnRTcGVjUmVzdWx0cyA9IGZ1bmN0aW9uKHNwZWMpIHsKK307CisKKy8vbm9pbnNwZWN0
aW9uIEpTVW51c2VkTG9jYWxTeW1ib2xzCitqYXNtaW5lLlJlcG9ydGVyLnByb3RvdHlwZS5sb2cg
PSBmdW5jdGlvbihzdHIpIHsKK307CisKKy8qKgorICogQmxvY2tzIGFyZSBmdW5jdGlvbnMgd2l0
aCBleGVjdXRhYmxlIGNvZGUgdGhhdCBtYWtlIHVwIGEgc3BlYy4KKyAqCisgKiBAY29uc3RydWN0
b3IKKyAqIEBwYXJhbSB7amFzbWluZS5FbnZ9IGVudgorICogQHBhcmFtIHtGdW5jdGlvbn0gZnVu
YworICogQHBhcmFtIHtqYXNtaW5lLlNwZWN9IHNwZWMKKyAqLworamFzbWluZS5CbG9jayA9IGZ1
bmN0aW9uKGVudiwgZnVuYywgc3BlYykgeworICB0aGlzLmVudiA9IGVudjsKKyAgdGhpcy5mdW5j
ID0gZnVuYzsKKyAgdGhpcy5zcGVjID0gc3BlYzsKK307CisKK2phc21pbmUuQmxvY2sucHJvdG90
eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbihvbkNvbXBsZXRlKSB7ICAKKyAgdHJ5IHsKKyAgICB0aGlz
LmZ1bmMuYXBwbHkodGhpcy5zcGVjKTsKKyAgfSBjYXRjaCAoZSkgeworICAgIHRoaXMuc3BlYy5m
YWlsKGUpOworICB9CisgIG9uQ29tcGxldGUoKTsKK307CisvKiogSmF2YVNjcmlwdCBBUEkgcmVw
b3J0ZXIuCisgKgorICogQGNvbnN0cnVjdG9yCisgKi8KK2phc21pbmUuSnNBcGlSZXBvcnRlciA9
IGZ1bmN0aW9uKCkgeworICB0aGlzLnN0YXJ0ZWQgPSBmYWxzZTsKKyAgdGhpcy5maW5pc2hlZCA9
IGZhbHNlOworICB0aGlzLnN1aXRlc18gPSBbXTsKKyAgdGhpcy5yZXN1bHRzXyA9IHt9OworfTsK
KworamFzbWluZS5Kc0FwaVJlcG9ydGVyLnByb3RvdHlwZS5yZXBvcnRSdW5uZXJTdGFydGluZyA9
IGZ1bmN0aW9uKHJ1bm5lcikgeworICB0aGlzLnN0YXJ0ZWQgPSB0cnVlOworICB2YXIgc3VpdGVz
ID0gcnVubmVyLnRvcExldmVsU3VpdGVzKCk7CisgIGZvciAodmFyIGkgPSAwOyBpIDwgc3VpdGVz
Lmxlbmd0aDsgaSsrKSB7CisgICAgdmFyIHN1aXRlID0gc3VpdGVzW2ldOworICAgIHRoaXMuc3Vp
dGVzXy5wdXNoKHRoaXMuc3VtbWFyaXplXyhzdWl0ZSkpOworICB9Cit9OworCitqYXNtaW5lLkpz
QXBpUmVwb3J0ZXIucHJvdG90eXBlLnN1aXRlcyA9IGZ1bmN0aW9uKCkgeworICByZXR1cm4gdGhp
cy5zdWl0ZXNfOworfTsKKworamFzbWluZS5Kc0FwaVJlcG9ydGVyLnByb3RvdHlwZS5zdW1tYXJp
emVfID0gZnVuY3Rpb24oc3VpdGVPclNwZWMpIHsKKyAgdmFyIGlzU3VpdGUgPSBzdWl0ZU9yU3Bl
YyBpbnN0YW5jZW9mIGphc21pbmUuU3VpdGU7CisgIHZhciBzdW1tYXJ5ID0geworICAgIGlkOiBz
dWl0ZU9yU3BlYy5pZCwKKyAgICBuYW1lOiBzdWl0ZU9yU3BlYy5kZXNjcmlwdGlvbiwKKyAgICB0
eXBlOiBpc1N1aXRlID8gJ3N1aXRlJyA6ICdzcGVjJywKKyAgICBjaGlsZHJlbjogW10KKyAgfTsK
KyAgCisgIGlmIChpc1N1aXRlKSB7CisgICAgdmFyIGNoaWxkcmVuID0gc3VpdGVPclNwZWMuY2hp
bGRyZW4oKTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7
CisgICAgICBzdW1tYXJ5LmNoaWxkcmVuLnB1c2godGhpcy5zdW1tYXJpemVfKGNoaWxkcmVuW2ld
KSk7CisgICAgfQorICB9CisgIHJldHVybiBzdW1tYXJ5OworfTsKKworamFzbWluZS5Kc0FwaVJl
cG9ydGVyLnByb3RvdHlwZS5yZXN1bHRzID0gZnVuY3Rpb24oKSB7CisgIHJldHVybiB0aGlzLnJl
c3VsdHNfOworfTsKKworamFzbWluZS5Kc0FwaVJlcG9ydGVyLnByb3RvdHlwZS5yZXN1bHRzRm9y
U3BlYyA9IGZ1bmN0aW9uKHNwZWNJZCkgeworICByZXR1cm4gdGhpcy5yZXN1bHRzX1tzcGVjSWRd
OworfTsKKworLy9ub2luc3BlY3Rpb24gSlNVbnVzZWRMb2NhbFN5bWJvbHMKK2phc21pbmUuSnNB
cGlSZXBvcnRlci5wcm90b3R5cGUucmVwb3J0UnVubmVyUmVzdWx0cyA9IGZ1bmN0aW9uKHJ1bm5l
cikgeworICB0aGlzLmZpbmlzaGVkID0gdHJ1ZTsKK307CisKKy8vbm9pbnNwZWN0aW9uIEpTVW51
c2VkTG9jYWxTeW1ib2xzCitqYXNtaW5lLkpzQXBpUmVwb3J0ZXIucHJvdG90eXBlLnJlcG9ydFN1
aXRlUmVzdWx0cyA9IGZ1bmN0aW9uKHN1aXRlKSB7Cit9OworCisvL25vaW5zcGVjdGlvbiBKU1Vu
dXNlZExvY2FsU3ltYm9scworamFzbWluZS5Kc0FwaVJlcG9ydGVyLnByb3RvdHlwZS5yZXBvcnRT
cGVjUmVzdWx0cyA9IGZ1bmN0aW9uKHNwZWMpIHsKKyAgdGhpcy5yZXN1bHRzX1tzcGVjLmlkXSA9
IHsKKyAgICBtZXNzYWdlczogc3BlYy5yZXN1bHRzKCkuZ2V0SXRlbXMoKSwKKyAgICByZXN1bHQ6
IHNwZWMucmVzdWx0cygpLmZhaWxlZENvdW50ID4gMCA/ICJmYWlsZWQiIDogInBhc3NlZCIKKyAg
fTsKK307CisKKy8vbm9pbnNwZWN0aW9uIEpTVW51c2VkTG9jYWxTeW1ib2xzCitqYXNtaW5lLkpz
QXBpUmVwb3J0ZXIucHJvdG90eXBlLmxvZyA9IGZ1bmN0aW9uKHN0cikgeworfTsKKworamFzbWlu
ZS5Kc0FwaVJlcG9ydGVyLnByb3RvdHlwZS5yZXN1bHRzRm9yU3BlY3MgPSBmdW5jdGlvbihzcGVj
SWRzKXsKKyAgdmFyIHJlc3VsdHMgPSB7fTsKKyAgZm9yICh2YXIgaSA9IDA7IGkgPCBzcGVjSWRz
Lmxlbmd0aDsgaSsrKSB7CisgICAgdmFyIHNwZWNJZCA9IHNwZWNJZHNbaV07CisgICAgcmVzdWx0
c1tzcGVjSWRdID0gdGhpcy5zdW1tYXJpemVSZXN1bHRfKHRoaXMucmVzdWx0c19bc3BlY0lkXSk7
CisgIH0KKyAgcmV0dXJuIHJlc3VsdHM7Cit9OworCitqYXNtaW5lLkpzQXBpUmVwb3J0ZXIucHJv
dG90eXBlLnN1bW1hcml6ZVJlc3VsdF8gPSBmdW5jdGlvbihyZXN1bHQpeworICB2YXIgc3VtbWFy
eU1lc3NhZ2VzID0gW107CisgIHZhciBtZXNzYWdlc0xlbmd0aCA9IHJlc3VsdC5tZXNzYWdlcy5s
ZW5ndGg7CisgIGZvciAodmFyIG1lc3NhZ2VJbmRleCA9IDA7IG1lc3NhZ2VJbmRleCA8IG1lc3Nh
Z2VzTGVuZ3RoOyBtZXNzYWdlSW5kZXgrKykgeworICAgIHZhciByZXN1bHRNZXNzYWdlID0gcmVz
dWx0Lm1lc3NhZ2VzW21lc3NhZ2VJbmRleF07CisgICAgc3VtbWFyeU1lc3NhZ2VzLnB1c2goewor
ICAgICAgdGV4dDogcmVzdWx0TWVzc2FnZS50eXBlID09ICdsb2cnID8gcmVzdWx0TWVzc2FnZS50
b1N0cmluZygpIDogamFzbWluZS51bmRlZmluZWQsCisgICAgICBwYXNzZWQ6IHJlc3VsdE1lc3Nh
Z2UucGFzc2VkID8gcmVzdWx0TWVzc2FnZS5wYXNzZWQoKSA6IHRydWUsCisgICAgICB0eXBlOiBy
ZXN1bHRNZXNzYWdlLnR5cGUsCisgICAgICBtZXNzYWdlOiByZXN1bHRNZXNzYWdlLm1lc3NhZ2Us
CisgICAgICB0cmFjZTogeworICAgICAgICBzdGFjazogcmVzdWx0TWVzc2FnZS5wYXNzZWQgJiYg
IXJlc3VsdE1lc3NhZ2UucGFzc2VkKCkgPyByZXN1bHRNZXNzYWdlLnRyYWNlLnN0YWNrIDogamFz
bWluZS51bmRlZmluZWQKKyAgICAgIH0KKyAgICB9KTsKKyAgfQorCisgIHJldHVybiB7CisgICAg
cmVzdWx0IDogcmVzdWx0LnJlc3VsdCwKKyAgICBtZXNzYWdlcyA6IHN1bW1hcnlNZXNzYWdlcwor
ICB9OworfTsKKworLyoqCisgKiBAY29uc3RydWN0b3IKKyAqIEBwYXJhbSB7amFzbWluZS5FbnZ9
IGVudgorICogQHBhcmFtIGFjdHVhbAorICogQHBhcmFtIHtqYXNtaW5lLlNwZWN9IHNwZWMKKyAq
LworamFzbWluZS5NYXRjaGVycyA9IGZ1bmN0aW9uKGVudiwgYWN0dWFsLCBzcGVjLCBvcHRfaXNO
b3QpIHsKKyAgdGhpcy5lbnYgPSBlbnY7CisgIHRoaXMuYWN0dWFsID0gYWN0dWFsOworICB0aGlz
LnNwZWMgPSBzcGVjOworICB0aGlzLmlzTm90ID0gb3B0X2lzTm90IHx8IGZhbHNlOworICB0aGlz
LnJlcG9ydFdhc0NhbGxlZF8gPSBmYWxzZTsKK307CisKKy8vIHRvZG86IEBkZXByZWNhdGVkIGFz
IG9mIEphc21pbmUgMC4xMSwgcmVtb3ZlIHNvb24gW3h3XQoramFzbWluZS5NYXRjaGVycy5wcCA9
IGZ1bmN0aW9uKHN0cikgeworICB0aHJvdyBuZXcgRXJyb3IoImphc21pbmUuTWF0Y2hlcnMucHAo
KSBpcyBubyBsb25nZXIgc3VwcG9ydGVkLCBwbGVhc2UgdXNlIGphc21pbmUucHAoKSBpbnN0ZWFk
ISIpOworfTsKKworLy8gdG9kbzogQGRlcHJlY2F0ZWQgRGVwcmVjYXRlZCBhcyBvZiBKYXNtaW5l
IDAuMTAuIFJld3JpdGUgeW91ciBjdXN0b20gbWF0Y2hlcnMgdG8gcmV0dXJuIHRydWUgb3IgZmFs
c2UuIFt4d10KK2phc21pbmUuTWF0Y2hlcnMucHJvdG90eXBlLnJlcG9ydCA9IGZ1bmN0aW9uKHJl
c3VsdCwgZmFpbGluZ19tZXNzYWdlLCBkZXRhaWxzKSB7CisgIHRocm93IG5ldyBFcnJvcigiQXMg
b2YgamFzbWluZSAwLjExLCBjdXN0b20gbWF0Y2hlcnMgbXVzdCBiZSBpbXBsZW1lbnRlZCBkaWZm
ZXJlbnRseSAtLSBwbGVhc2Ugc2VlIGphc21pbmUgZG9jcyIpOworfTsKKworamFzbWluZS5NYXRj
aGVycy53cmFwSW50b18gPSBmdW5jdGlvbihwcm90b3R5cGUsIG1hdGNoZXJzQ2xhc3MpIHsKKyAg
Zm9yICh2YXIgbWV0aG9kTmFtZSBpbiBwcm90b3R5cGUpIHsKKyAgICBpZiAobWV0aG9kTmFtZSA9
PSAncmVwb3J0JykgY29udGludWU7CisgICAgdmFyIG9yaWcgPSBwcm90b3R5cGVbbWV0aG9kTmFt
ZV07CisgICAgbWF0Y2hlcnNDbGFzcy5wcm90b3R5cGVbbWV0aG9kTmFtZV0gPSBqYXNtaW5lLk1h
dGNoZXJzLm1hdGNoZXJGbl8obWV0aG9kTmFtZSwgb3JpZyk7CisgIH0KK307CisKK2phc21pbmUu
TWF0Y2hlcnMubWF0Y2hlckZuXyA9IGZ1bmN0aW9uKG1hdGNoZXJOYW1lLCBtYXRjaGVyRnVuY3Rp
b24pIHsKKyAgcmV0dXJuIGZ1bmN0aW9uKCkgeworICAgIHZhciBtYXRjaGVyQXJncyA9IGphc21p
bmUudXRpbC5hcmdzVG9BcnJheShhcmd1bWVudHMpOworICAgIHZhciByZXN1bHQgPSBtYXRjaGVy
RnVuY3Rpb24uYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKworICAgIGlmICh0aGlzLmlzTm90KSB7
CisgICAgICByZXN1bHQgPSAhcmVzdWx0OworICAgIH0KKworICAgIGlmICh0aGlzLnJlcG9ydFdh
c0NhbGxlZF8pIHJldHVybiByZXN1bHQ7CisKKyAgICB2YXIgbWVzc2FnZTsKKyAgICBpZiAoIXJl
c3VsdCkgeworICAgICAgaWYgKHRoaXMubWVzc2FnZSkgeworICAgICAgICBtZXNzYWdlID0gdGhp
cy5tZXNzYWdlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisgICAgICAgIGlmIChqYXNtaW5lLmlz
QXJyYXlfKG1lc3NhZ2UpKSB7CisgICAgICAgICAgbWVzc2FnZSA9IG1lc3NhZ2VbdGhpcy5pc05v
dCA/IDEgOiAwXTsKKyAgICAgICAgfQorICAgICAgfSBlbHNlIHsKKyAgICAgICAgdmFyIGVuZ2xp
c2h5UHJlZGljYXRlID0gbWF0Y2hlck5hbWUucmVwbGFjZSgvW0EtWl0vZywgZnVuY3Rpb24ocykg
eyByZXR1cm4gJyAnICsgcy50b0xvd2VyQ2FzZSgpOyB9KTsKKyAgICAgICAgbWVzc2FnZSA9ICJF
eHBlY3RlZCAiICsgamFzbWluZS5wcCh0aGlzLmFjdHVhbCkgKyAodGhpcy5pc05vdCA/ICIgbm90
ICIgOiAiICIpICsgZW5nbGlzaHlQcmVkaWNhdGU7CisgICAgICAgIGlmIChtYXRjaGVyQXJncy5s
ZW5ndGggPiAwKSB7CisgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXRjaGVyQXJncy5s
ZW5ndGg7IGkrKykgeworICAgICAgICAgICAgaWYgKGkgPiAwKSBtZXNzYWdlICs9ICIsIjsKKyAg
ICAgICAgICAgIG1lc3NhZ2UgKz0gIiAiICsgamFzbWluZS5wcChtYXRjaGVyQXJnc1tpXSk7Cisg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIG1lc3NhZ2UgKz0gIi4iOworICAgICAgfQor
ICAgIH0KKyAgICB2YXIgZXhwZWN0YXRpb25SZXN1bHQgPSBuZXcgamFzbWluZS5FeHBlY3RhdGlv
blJlc3VsdCh7CisgICAgICBtYXRjaGVyTmFtZTogbWF0Y2hlck5hbWUsCisgICAgICBwYXNzZWQ6
IHJlc3VsdCwKKyAgICAgIGV4cGVjdGVkOiBtYXRjaGVyQXJncy5sZW5ndGggPiAxID8gbWF0Y2hl
ckFyZ3MgOiBtYXRjaGVyQXJnc1swXSwKKyAgICAgIGFjdHVhbDogdGhpcy5hY3R1YWwsCisgICAg
ICBtZXNzYWdlOiBtZXNzYWdlCisgICAgfSk7CisgICAgdGhpcy5zcGVjLmFkZE1hdGNoZXJSZXN1
bHQoZXhwZWN0YXRpb25SZXN1bHQpOworICAgIHJldHVybiBqYXNtaW5lLnVuZGVmaW5lZDsKKyAg
fTsKK307CisKKworCisKKy8qKgorICogdG9CZTogY29tcGFyZXMgdGhlIGFjdHVhbCB0byB0aGUg
ZXhwZWN0ZWQgdXNpbmcgPT09CisgKiBAcGFyYW0gZXhwZWN0ZWQKKyAqLworamFzbWluZS5NYXRj
aGVycy5wcm90b3R5cGUudG9CZSA9IGZ1bmN0aW9uKGV4cGVjdGVkKSB7CisgIHJldHVybiB0aGlz
LmFjdHVhbCA9PT0gZXhwZWN0ZWQ7Cit9OworCisvKioKKyAqIHRvTm90QmU6IGNvbXBhcmVzIHRo
ZSBhY3R1YWwgdG8gdGhlIGV4cGVjdGVkIHVzaW5nICE9PQorICogQHBhcmFtIGV4cGVjdGVkCisg
KiBAZGVwcmVjYXRlZCBhcyBvZiAxLjAuIFVzZSBub3QudG9CZSgpIGluc3RlYWQuCisgKi8KK2ph
c21pbmUuTWF0Y2hlcnMucHJvdG90eXBlLnRvTm90QmUgPSBmdW5jdGlvbihleHBlY3RlZCkgewor
ICByZXR1cm4gdGhpcy5hY3R1YWwgIT09IGV4cGVjdGVkOworfTsKKworLyoqCisgKiB0b0VxdWFs
OiBjb21wYXJlcyB0aGUgYWN0dWFsIHRvIHRoZSBleHBlY3RlZCB1c2luZyBjb21tb24gc2Vuc2Ug
ZXF1YWxpdHkuIEhhbmRsZXMgT2JqZWN0cywgQXJyYXlzLCBldGMuCisgKgorICogQHBhcmFtIGV4
cGVjdGVkCisgKi8KK2phc21pbmUuTWF0Y2hlcnMucHJvdG90eXBlLnRvRXF1YWwgPSBmdW5jdGlv
bihleHBlY3RlZCkgeworICByZXR1cm4gdGhpcy5lbnYuZXF1YWxzXyh0aGlzLmFjdHVhbCwgZXhw
ZWN0ZWQpOworfTsKKworLyoqCisgKiB0b05vdEVxdWFsOiBjb21wYXJlcyB0aGUgYWN0dWFsIHRv
IHRoZSBleHBlY3RlZCB1c2luZyB0aGUgISBvZiBqYXNtaW5lLk1hdGNoZXJzLnRvRXF1YWwKKyAq
IEBwYXJhbSBleHBlY3RlZAorICogQGRlcHJlY2F0ZWQgYXMgb2YgMS4wLiBVc2Ugbm90LnRvTm90
RXF1YWwoKSBpbnN0ZWFkLgorICovCitqYXNtaW5lLk1hdGNoZXJzLnByb3RvdHlwZS50b05vdEVx
dWFsID0gZnVuY3Rpb24oZXhwZWN0ZWQpIHsKKyAgcmV0dXJuICF0aGlzLmVudi5lcXVhbHNfKHRo
aXMuYWN0dWFsLCBleHBlY3RlZCk7Cit9OworCisvKioKKyAqIE1hdGNoZXIgdGhhdCBjb21wYXJl
cyB0aGUgYWN0dWFsIHRvIHRoZSBleHBlY3RlZCB1c2luZyBhIHJlZ3VsYXIgZXhwcmVzc2lvbi4g
IENvbnN0cnVjdHMgYSBSZWdFeHAsIHNvIHRha2VzCisgKiBhIHBhdHRlcm4gb3IgYSBTdHJpbmcu
CisgKgorICogQHBhcmFtIGV4cGVjdGVkCisgKi8KK2phc21pbmUuTWF0Y2hlcnMucHJvdG90eXBl
LnRvTWF0Y2ggPSBmdW5jdGlvbihleHBlY3RlZCkgeworICByZXR1cm4gbmV3IFJlZ0V4cChleHBl
Y3RlZCkudGVzdCh0aGlzLmFjdHVhbCk7Cit9OworCisvKioKKyAqIE1hdGNoZXIgdGhhdCBjb21w
YXJlcyB0aGUgYWN0dWFsIHRvIHRoZSBleHBlY3RlZCB1c2luZyB0aGUgYm9vbGVhbiBpbnZlcnNl
IG9mIGphc21pbmUuTWF0Y2hlcnMudG9NYXRjaAorICogQHBhcmFtIGV4cGVjdGVkCisgKiBAZGVw
cmVjYXRlZCBhcyBvZiAxLjAuIFVzZSBub3QudG9NYXRjaCgpIGluc3RlYWQuCisgKi8KK2phc21p
bmUuTWF0Y2hlcnMucHJvdG90eXBlLnRvTm90TWF0Y2ggPSBmdW5jdGlvbihleHBlY3RlZCkgewor
ICByZXR1cm4gIShuZXcgUmVnRXhwKGV4cGVjdGVkKS50ZXN0KHRoaXMuYWN0dWFsKSk7Cit9Owor
CisvKioKKyAqIE1hdGNoZXIgdGhhdCBjb21wYXJlcyB0aGUgYWN0dWFsIHRvIGphc21pbmUudW5k
ZWZpbmVkLgorICovCitqYXNtaW5lLk1hdGNoZXJzLnByb3RvdHlwZS50b0JlRGVmaW5lZCA9IGZ1
bmN0aW9uKCkgeworICByZXR1cm4gKHRoaXMuYWN0dWFsICE9PSBqYXNtaW5lLnVuZGVmaW5lZCk7
Cit9OworCisvKioKKyAqIE1hdGNoZXIgdGhhdCBjb21wYXJlcyB0aGUgYWN0dWFsIHRvIGphc21p
bmUudW5kZWZpbmVkLgorICovCitqYXNtaW5lLk1hdGNoZXJzLnByb3RvdHlwZS50b0JlVW5kZWZp
bmVkID0gZnVuY3Rpb24oKSB7CisgIHJldHVybiAodGhpcy5hY3R1YWwgPT09IGphc21pbmUudW5k
ZWZpbmVkKTsKK307CisKKy8qKgorICogTWF0Y2hlciB0aGF0IGNvbXBhcmVzIHRoZSBhY3R1YWwg
dG8gbnVsbC4KKyAqLworamFzbWluZS5NYXRjaGVycy5wcm90b3R5cGUudG9CZU51bGwgPSBmdW5j
dGlvbigpIHsKKyAgcmV0dXJuICh0aGlzLmFjdHVhbCA9PT0gbnVsbCk7Cit9OworCisvKioKKyAq
IE1hdGNoZXIgdGhhdCBib29sZWFuIG5vdC1ub3RzIHRoZSBhY3R1YWwuCisgKi8KK2phc21pbmUu
TWF0Y2hlcnMucHJvdG90eXBlLnRvQmVUcnV0aHkgPSBmdW5jdGlvbigpIHsKKyAgcmV0dXJuICEh
dGhpcy5hY3R1YWw7Cit9OworCisKKy8qKgorICogTWF0Y2hlciB0aGF0IGJvb2xlYW4gbm90cyB0
aGUgYWN0dWFsLgorICovCitqYXNtaW5lLk1hdGNoZXJzLnByb3RvdHlwZS50b0JlRmFsc3kgPSBm
dW5jdGlvbigpIHsKKyAgcmV0dXJuICF0aGlzLmFjdHVhbDsKK307CisKKworLyoqCisgKiBNYXRj
aGVyIHRoYXQgY2hlY2tzIHRvIHNlZSBpZiB0aGUgYWN0dWFsLCBhIEphc21pbmUgc3B5LCB3YXMg
Y2FsbGVkLgorICovCitqYXNtaW5lLk1hdGNoZXJzLnByb3RvdHlwZS50b0hhdmVCZWVuQ2FsbGVk
ID0gZnVuY3Rpb24oKSB7CisgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMCkgeworICAgIHRocm93
IG5ldyBFcnJvcigndG9IYXZlQmVlbkNhbGxlZCBkb2VzIG5vdCB0YWtlIGFyZ3VtZW50cywgdXNl
IHRvSGF2ZUJlZW5DYWxsZWRXaXRoJyk7CisgIH0KKworICBpZiAoIWphc21pbmUuaXNTcHkodGhp
cy5hY3R1YWwpKSB7CisgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBhIHNweSwgYnV0IGdv
dCAnICsgamFzbWluZS5wcCh0aGlzLmFjdHVhbCkgKyAnLicpOworICB9CisKKyAgdGhpcy5tZXNz
YWdlID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIFsKKyAgICAgICJFeHBlY3RlZCBzcHkgIiAr
IHRoaXMuYWN0dWFsLmlkZW50aXR5ICsgIiB0byBoYXZlIGJlZW4gY2FsbGVkLiIsCisgICAgICAi
RXhwZWN0ZWQgc3B5ICIgKyB0aGlzLmFjdHVhbC5pZGVudGl0eSArICIgbm90IHRvIGhhdmUgYmVl
biBjYWxsZWQuIgorICAgIF07CisgIH07CisKKyAgcmV0dXJuIHRoaXMuYWN0dWFsLndhc0NhbGxl
ZDsKK307CisKKy8qKiBAZGVwcmVjYXRlZCBVc2UgZXhwZWN0KHh4eCkudG9IYXZlQmVlbkNhbGxl
ZCgpIGluc3RlYWQgKi8KK2phc21pbmUuTWF0Y2hlcnMucHJvdG90eXBlLndhc0NhbGxlZCA9IGph
c21pbmUuTWF0Y2hlcnMucHJvdG90eXBlLnRvSGF2ZUJlZW5DYWxsZWQ7CisKKy8qKgorICogTWF0
Y2hlciB0aGF0IGNoZWNrcyB0byBzZWUgaWYgdGhlIGFjdHVhbCwgYSBKYXNtaW5lIHNweSwgd2Fz
IG5vdCBjYWxsZWQuCisgKgorICogQGRlcHJlY2F0ZWQgVXNlIGV4cGVjdCh4eHgpLm5vdC50b0hh
dmVCZWVuQ2FsbGVkKCkgaW5zdGVhZAorICovCitqYXNtaW5lLk1hdGNoZXJzLnByb3RvdHlwZS53
YXNOb3RDYWxsZWQgPSBmdW5jdGlvbigpIHsKKyAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAwKSB7
CisgICAgdGhyb3cgbmV3IEVycm9yKCd3YXNOb3RDYWxsZWQgZG9lcyBub3QgdGFrZSBhcmd1bWVu
dHMnKTsKKyAgfQorCisgIGlmICghamFzbWluZS5pc1NweSh0aGlzLmFjdHVhbCkpIHsKKyAgICB0
aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIGEgc3B5LCBidXQgZ290ICcgKyBqYXNtaW5lLnBwKHRo
aXMuYWN0dWFsKSArICcuJyk7CisgIH0KKworICB0aGlzLm1lc3NhZ2UgPSBmdW5jdGlvbigpIHsK
KyAgICByZXR1cm4gWworICAgICAgIkV4cGVjdGVkIHNweSAiICsgdGhpcy5hY3R1YWwuaWRlbnRp
dHkgKyAiIHRvIG5vdCBoYXZlIGJlZW4gY2FsbGVkLiIsCisgICAgICAiRXhwZWN0ZWQgc3B5ICIg
KyB0aGlzLmFjdHVhbC5pZGVudGl0eSArICIgdG8gaGF2ZSBiZWVuIGNhbGxlZC4iCisgICAgXTsK
KyAgfTsKKworICByZXR1cm4gIXRoaXMuYWN0dWFsLndhc0NhbGxlZDsKK307CisKKy8qKgorICog
TWF0Y2hlciB0aGF0IGNoZWNrcyB0byBzZWUgaWYgdGhlIGFjdHVhbCwgYSBKYXNtaW5lIHNweSwg
d2FzIGNhbGxlZCB3aXRoIGEgc2V0IG9mIHBhcmFtZXRlcnMuCisgKgorICogQGV4YW1wbGUKKyAq
CisgKi8KK2phc21pbmUuTWF0Y2hlcnMucHJvdG90eXBlLnRvSGF2ZUJlZW5DYWxsZWRXaXRoID0g
ZnVuY3Rpb24oKSB7CisgIHZhciBleHBlY3RlZEFyZ3MgPSBqYXNtaW5lLnV0aWwuYXJnc1RvQXJy
YXkoYXJndW1lbnRzKTsKKyAgaWYgKCFqYXNtaW5lLmlzU3B5KHRoaXMuYWN0dWFsKSkgeworICAg
IHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgYSBzcHksIGJ1dCBnb3QgJyArIGphc21pbmUucHAo
dGhpcy5hY3R1YWwpICsgJy4nKTsKKyAgfQorICB0aGlzLm1lc3NhZ2UgPSBmdW5jdGlvbigpIHsK
KyAgICBpZiAodGhpcy5hY3R1YWwuY2FsbENvdW50ID09PSAwKSB7CisgICAgICAvLyB0b2RvOiB3
aGF0IHNob3VsZCB0aGUgZmFpbHVyZSBtZXNzYWdlIGZvciAubm90LnRvSGF2ZUJlZW5DYWxsZWRX
aXRoKCkgYmU/IGlzIHRoaXMgcmlnaHQ/IHRlc3QgYmV0dGVyLiBbeHddCisgICAgICByZXR1cm4g
WworICAgICAgICAiRXhwZWN0ZWQgc3B5ICIgKyB0aGlzLmFjdHVhbC5pZGVudGl0eSArICIgdG8g
aGF2ZSBiZWVuIGNhbGxlZCB3aXRoICIgKyBqYXNtaW5lLnBwKGV4cGVjdGVkQXJncykgKyAiIGJ1
dCBpdCB3YXMgbmV2ZXIgY2FsbGVkLiIsCisgICAgICAgICJFeHBlY3RlZCBzcHkgIiArIHRoaXMu
YWN0dWFsLmlkZW50aXR5ICsgIiBub3QgdG8gaGF2ZSBiZWVuIGNhbGxlZCB3aXRoICIgKyBqYXNt
aW5lLnBwKGV4cGVjdGVkQXJncykgKyAiIGJ1dCBpdCB3YXMuIgorICAgICAgXTsKKyAgICB9IGVs
c2UgeworICAgICAgcmV0dXJuIFsKKyAgICAgICAgIkV4cGVjdGVkIHNweSAiICsgdGhpcy5hY3R1
YWwuaWRlbnRpdHkgKyAiIHRvIGhhdmUgYmVlbiBjYWxsZWQgd2l0aCAiICsgamFzbWluZS5wcChl
eHBlY3RlZEFyZ3MpICsgIiBidXQgd2FzIGNhbGxlZCB3aXRoICIgKyBqYXNtaW5lLnBwKHRoaXMu
YWN0dWFsLmFyZ3NGb3JDYWxsKSwKKyAgICAgICAgIkV4cGVjdGVkIHNweSAiICsgdGhpcy5hY3R1
YWwuaWRlbnRpdHkgKyAiIG5vdCB0byBoYXZlIGJlZW4gY2FsbGVkIHdpdGggIiArIGphc21pbmUu
cHAoZXhwZWN0ZWRBcmdzKSArICIgYnV0IHdhcyBjYWxsZWQgd2l0aCAiICsgamFzbWluZS5wcCh0
aGlzLmFjdHVhbC5hcmdzRm9yQ2FsbCkKKyAgICAgIF07CisgICAgfQorICB9OworCisgIHJldHVy
biB0aGlzLmVudi5jb250YWluc18odGhpcy5hY3R1YWwuYXJnc0ZvckNhbGwsIGV4cGVjdGVkQXJn
cyk7Cit9OworCisvKiogQGRlcHJlY2F0ZWQgVXNlIGV4cGVjdCh4eHgpLnRvSGF2ZUJlZW5DYWxs
ZWRXaXRoKCkgaW5zdGVhZCAqLworamFzbWluZS5NYXRjaGVycy5wcm90b3R5cGUud2FzQ2FsbGVk
V2l0aCA9IGphc21pbmUuTWF0Y2hlcnMucHJvdG90eXBlLnRvSGF2ZUJlZW5DYWxsZWRXaXRoOwor
CisvKiogQGRlcHJlY2F0ZWQgVXNlIGV4cGVjdCh4eHgpLm5vdC50b0hhdmVCZWVuQ2FsbGVkV2l0
aCgpIGluc3RlYWQgKi8KK2phc21pbmUuTWF0Y2hlcnMucHJvdG90eXBlLndhc05vdENhbGxlZFdp
dGggPSBmdW5jdGlvbigpIHsKKyAgdmFyIGV4cGVjdGVkQXJncyA9IGphc21pbmUudXRpbC5hcmdz
VG9BcnJheShhcmd1bWVudHMpOworICBpZiAoIWphc21pbmUuaXNTcHkodGhpcy5hY3R1YWwpKSB7
CisgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBhIHNweSwgYnV0IGdvdCAnICsgamFzbWlu
ZS5wcCh0aGlzLmFjdHVhbCkgKyAnLicpOworICB9CisKKyAgdGhpcy5tZXNzYWdlID0gZnVuY3Rp
b24oKSB7CisgICAgcmV0dXJuIFsKKyAgICAgICJFeHBlY3RlZCBzcHkgbm90IHRvIGhhdmUgYmVl
biBjYWxsZWQgd2l0aCAiICsgamFzbWluZS5wcChleHBlY3RlZEFyZ3MpICsgIiBidXQgaXQgd2Fz
IiwKKyAgICAgICJFeHBlY3RlZCBzcHkgdG8gaGF2ZSBiZWVuIGNhbGxlZCB3aXRoICIgKyBqYXNt
aW5lLnBwKGV4cGVjdGVkQXJncykgKyAiIGJ1dCBpdCB3YXMiCisgICAgXTsKKyAgfTsKKworICBy
ZXR1cm4gIXRoaXMuZW52LmNvbnRhaW5zXyh0aGlzLmFjdHVhbC5hcmdzRm9yQ2FsbCwgZXhwZWN0
ZWRBcmdzKTsKK307CisKKy8qKgorICogTWF0Y2hlciB0aGF0IGNoZWNrcyB0aGF0IHRoZSBleHBl
Y3RlZCBpdGVtIGlzIGFuIGVsZW1lbnQgaW4gdGhlIGFjdHVhbCBBcnJheS4KKyAqCisgKiBAcGFy
YW0ge09iamVjdH0gZXhwZWN0ZWQKKyAqLworamFzbWluZS5NYXRjaGVycy5wcm90b3R5cGUudG9D
b250YWluID0gZnVuY3Rpb24oZXhwZWN0ZWQpIHsKKyAgcmV0dXJuIHRoaXMuZW52LmNvbnRhaW5z
Xyh0aGlzLmFjdHVhbCwgZXhwZWN0ZWQpOworfTsKKworLyoqCisgKiBNYXRjaGVyIHRoYXQgY2hl
Y2tzIHRoYXQgdGhlIGV4cGVjdGVkIGl0ZW0gaXMgTk9UIGFuIGVsZW1lbnQgaW4gdGhlIGFjdHVh
bCBBcnJheS4KKyAqCisgKiBAcGFyYW0ge09iamVjdH0gZXhwZWN0ZWQKKyAqIEBkZXByZWNhdGVk
IGFzIG9mIDEuMC4gVXNlIG5vdC50b05vdENvbnRhaW4oKSBpbnN0ZWFkLgorICovCitqYXNtaW5l
Lk1hdGNoZXJzLnByb3RvdHlwZS50b05vdENvbnRhaW4gPSBmdW5jdGlvbihleHBlY3RlZCkgewor
ICByZXR1cm4gIXRoaXMuZW52LmNvbnRhaW5zXyh0aGlzLmFjdHVhbCwgZXhwZWN0ZWQpOworfTsK
KworamFzbWluZS5NYXRjaGVycy5wcm90b3R5cGUudG9CZUxlc3NUaGFuID0gZnVuY3Rpb24oZXhw
ZWN0ZWQpIHsKKyAgcmV0dXJuIHRoaXMuYWN0dWFsIDwgZXhwZWN0ZWQ7Cit9OworCitqYXNtaW5l
Lk1hdGNoZXJzLnByb3RvdHlwZS50b0JlR3JlYXRlclRoYW4gPSBmdW5jdGlvbihleHBlY3RlZCkg
eworICByZXR1cm4gdGhpcy5hY3R1YWwgPiBleHBlY3RlZDsKK307CisKKy8qKgorICogTWF0Y2hl
ciB0aGF0IGNoZWNrcyB0aGF0IHRoZSBleHBlY3RlZCBpdGVtIGlzIGVxdWFsIHRvIHRoZSBhY3R1
YWwgaXRlbQorICogdXAgdG8gYSBnaXZlbiBsZXZlbCBvZiBkZWNpbWFsIHByZWNpc2lvbiAoZGVm
YXVsdCAyKS4KKyAqCisgKiBAcGFyYW0ge051bWJlcn0gZXhwZWN0ZWQKKyAqIEBwYXJhbSB7TnVt
YmVyfSBwcmVjaXNpb24KKyAqLworamFzbWluZS5NYXRjaGVycy5wcm90b3R5cGUudG9CZUNsb3Nl
VG8gPSBmdW5jdGlvbihleHBlY3RlZCwgcHJlY2lzaW9uKSB7CisgIGlmICghKHByZWNpc2lvbiA9
PT0gMCkpIHsKKyAgICBwcmVjaXNpb24gPSBwcmVjaXNpb24gfHwgMjsKKyAgfQorICB2YXIgbXVs
dGlwbGllciA9IE1hdGgucG93KDEwLCBwcmVjaXNpb24pOworICB2YXIgYWN0dWFsID0gTWF0aC5y
b3VuZCh0aGlzLmFjdHVhbCAqIG11bHRpcGxpZXIpOworICBleHBlY3RlZCA9IE1hdGgucm91bmQo
ZXhwZWN0ZWQgKiBtdWx0aXBsaWVyKTsKKyAgcmV0dXJuIGV4cGVjdGVkID09IGFjdHVhbDsKK307
CisKKy8qKgorICogTWF0Y2hlciB0aGF0IGNoZWNrcyB0aGF0IHRoZSBleHBlY3RlZCBleGNlcHRp
b24gd2FzIHRocm93biBieSB0aGUgYWN0dWFsLgorICoKKyAqIEBwYXJhbSB7U3RyaW5nfSBleHBl
Y3RlZAorICovCitqYXNtaW5lLk1hdGNoZXJzLnByb3RvdHlwZS50b1Rocm93ID0gZnVuY3Rpb24o
ZXhwZWN0ZWQpIHsKKyAgdmFyIHJlc3VsdCA9IGZhbHNlOworICB2YXIgZXhjZXB0aW9uOworICBp
ZiAodHlwZW9mIHRoaXMuYWN0dWFsICE9ICdmdW5jdGlvbicpIHsKKyAgICB0aHJvdyBuZXcgRXJy
b3IoJ0FjdHVhbCBpcyBub3QgYSBmdW5jdGlvbicpOworICB9CisgIHRyeSB7CisgICAgdGhpcy5h
Y3R1YWwoKTsKKyAgfSBjYXRjaCAoZSkgeworICAgIGV4Y2VwdGlvbiA9IGU7CisgIH0KKyAgaWYg
KGV4Y2VwdGlvbikgeworICAgIHJlc3VsdCA9IChleHBlY3RlZCA9PT0gamFzbWluZS51bmRlZmlu
ZWQgfHwgdGhpcy5lbnYuZXF1YWxzXyhleGNlcHRpb24ubWVzc2FnZSB8fCBleGNlcHRpb24sIGV4
cGVjdGVkLm1lc3NhZ2UgfHwgZXhwZWN0ZWQpKTsKKyAgfQorCisgIHZhciBub3QgPSB0aGlzLmlz
Tm90ID8gIm5vdCAiIDogIiI7CisKKyAgdGhpcy5tZXNzYWdlID0gZnVuY3Rpb24oKSB7CisgICAg
aWYgKGV4Y2VwdGlvbiAmJiAoZXhwZWN0ZWQgPT09IGphc21pbmUudW5kZWZpbmVkIHx8ICF0aGlz
LmVudi5lcXVhbHNfKGV4Y2VwdGlvbi5tZXNzYWdlIHx8IGV4Y2VwdGlvbiwgZXhwZWN0ZWQubWVz
c2FnZSB8fCBleHBlY3RlZCkpKSB7CisgICAgICByZXR1cm4gWyJFeHBlY3RlZCBmdW5jdGlvbiAi
ICsgbm90ICsgInRvIHRocm93IiwgZXhwZWN0ZWQgPyBleHBlY3RlZC5tZXNzYWdlIHx8IGV4cGVj
dGVkIDogImFuIGV4Y2VwdGlvbiIsICIsIGJ1dCBpdCB0aHJldyIsIGV4Y2VwdGlvbi5tZXNzYWdl
IHx8IGV4Y2VwdGlvbl0uam9pbignICcpOworICAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gIkV4
cGVjdGVkIGZ1bmN0aW9uIHRvIHRocm93IGFuIGV4Y2VwdGlvbi4iOworICAgIH0KKyAgfTsKKwor
ICByZXR1cm4gcmVzdWx0OworfTsKKworamFzbWluZS5NYXRjaGVycy5BbnkgPSBmdW5jdGlvbihl
eHBlY3RlZENsYXNzKSB7CisgIHRoaXMuZXhwZWN0ZWRDbGFzcyA9IGV4cGVjdGVkQ2xhc3M7Cit9
OworCitqYXNtaW5lLk1hdGNoZXJzLkFueS5wcm90b3R5cGUubWF0Y2hlcyA9IGZ1bmN0aW9uKG90
aGVyKSB7CisgIGlmICh0aGlzLmV4cGVjdGVkQ2xhc3MgPT0gU3RyaW5nKSB7CisgICAgcmV0dXJu
IHR5cGVvZiBvdGhlciA9PSAnc3RyaW5nJyB8fCBvdGhlciBpbnN0YW5jZW9mIFN0cmluZzsKKyAg
fQorCisgIGlmICh0aGlzLmV4cGVjdGVkQ2xhc3MgPT0gTnVtYmVyKSB7CisgICAgcmV0dXJuIHR5
cGVvZiBvdGhlciA9PSAnbnVtYmVyJyB8fCBvdGhlciBpbnN0YW5jZW9mIE51bWJlcjsKKyAgfQor
CisgIGlmICh0aGlzLmV4cGVjdGVkQ2xhc3MgPT0gRnVuY3Rpb24pIHsKKyAgICByZXR1cm4gdHlw
ZW9mIG90aGVyID09ICdmdW5jdGlvbicgfHwgb3RoZXIgaW5zdGFuY2VvZiBGdW5jdGlvbjsKKyAg
fQorCisgIGlmICh0aGlzLmV4cGVjdGVkQ2xhc3MgPT0gT2JqZWN0KSB7CisgICAgcmV0dXJuIHR5
cGVvZiBvdGhlciA9PSAnb2JqZWN0JzsKKyAgfQorCisgIHJldHVybiBvdGhlciBpbnN0YW5jZW9m
IHRoaXMuZXhwZWN0ZWRDbGFzczsKK307CisKK2phc21pbmUuTWF0Y2hlcnMuQW55LnByb3RvdHlw
ZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkgeworICByZXR1cm4gJzxqYXNtaW5lLmFueSgnICsgdGhp
cy5leHBlY3RlZENsYXNzICsgJyk+JzsKK307CisKKy8qKgorICogQGNvbnN0cnVjdG9yCisgKi8K
K2phc21pbmUuTXVsdGlSZXBvcnRlciA9IGZ1bmN0aW9uKCkgeworICB0aGlzLnN1YlJlcG9ydGVy
c18gPSBbXTsKK307CitqYXNtaW5lLnV0aWwuaW5oZXJpdChqYXNtaW5lLk11bHRpUmVwb3J0ZXIs
IGphc21pbmUuUmVwb3J0ZXIpOworCitqYXNtaW5lLk11bHRpUmVwb3J0ZXIucHJvdG90eXBlLmFk
ZFJlcG9ydGVyID0gZnVuY3Rpb24ocmVwb3J0ZXIpIHsKKyAgdGhpcy5zdWJSZXBvcnRlcnNfLnB1
c2gocmVwb3J0ZXIpOworfTsKKworKGZ1bmN0aW9uKCkgeworICB2YXIgZnVuY3Rpb25OYW1lcyA9
IFsKKyAgICAicmVwb3J0UnVubmVyU3RhcnRpbmciLAorICAgICJyZXBvcnRSdW5uZXJSZXN1bHRz
IiwKKyAgICAicmVwb3J0U3VpdGVSZXN1bHRzIiwKKyAgICAicmVwb3J0U3BlY1N0YXJ0aW5nIiwK
KyAgICAicmVwb3J0U3BlY1Jlc3VsdHMiLAorICAgICJsb2ciCisgIF07CisgIGZvciAodmFyIGkg
PSAwOyBpIDwgZnVuY3Rpb25OYW1lcy5sZW5ndGg7IGkrKykgeworICAgIHZhciBmdW5jdGlvbk5h
bWUgPSBmdW5jdGlvbk5hbWVzW2ldOworICAgIGphc21pbmUuTXVsdGlSZXBvcnRlci5wcm90b3R5
cGVbZnVuY3Rpb25OYW1lXSA9IChmdW5jdGlvbihmdW5jdGlvbk5hbWUpIHsKKyAgICAgIHJldHVy
biBmdW5jdGlvbigpIHsKKyAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB0aGlzLnN1YlJlcG9y
dGVyc18ubGVuZ3RoOyBqKyspIHsKKyAgICAgICAgICB2YXIgc3ViUmVwb3J0ZXIgPSB0aGlzLnN1
YlJlcG9ydGVyc19bal07CisgICAgICAgICAgaWYgKHN1YlJlcG9ydGVyW2Z1bmN0aW9uTmFtZV0p
IHsKKyAgICAgICAgICAgIHN1YlJlcG9ydGVyW2Z1bmN0aW9uTmFtZV0uYXBwbHkoc3ViUmVwb3J0
ZXIsIGFyZ3VtZW50cyk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9OworICAgIH0p
KGZ1bmN0aW9uTmFtZSk7CisgIH0KK30pKCk7CisvKioKKyAqIEhvbGRzIHJlc3VsdHMgZm9yIGEg
c2V0IG9mIEphc21pbmUgc3BlYy4gQWxsb3dzIGZvciB0aGUgcmVzdWx0cyBhcnJheSB0byBob2xk
IGFub3RoZXIgamFzbWluZS5OZXN0ZWRSZXN1bHRzCisgKgorICogQGNvbnN0cnVjdG9yCisgKi8K
K2phc21pbmUuTmVzdGVkUmVzdWx0cyA9IGZ1bmN0aW9uKCkgeworICAvKioKKyAgICogVGhlIHRv
dGFsIGNvdW50IG9mIHJlc3VsdHMKKyAgICovCisgIHRoaXMudG90YWxDb3VudCA9IDA7CisgIC8q
KgorICAgKiBOdW1iZXIgb2YgcGFzc2VkIHJlc3VsdHMKKyAgICovCisgIHRoaXMucGFzc2VkQ291
bnQgPSAwOworICAvKioKKyAgICogTnVtYmVyIG9mIGZhaWxlZCByZXN1bHRzCisgICAqLworICB0
aGlzLmZhaWxlZENvdW50ID0gMDsKKyAgLyoqCisgICAqIFdhcyB0aGlzIHN1aXRlL3NwZWMgc2tp
cHBlZD8KKyAgICovCisgIHRoaXMuc2tpcHBlZCA9IGZhbHNlOworICAvKioKKyAgICogQGlnbm9y
ZQorICAgKi8KKyAgdGhpcy5pdGVtc18gPSBbXTsKK307CisKKy8qKgorICogUm9sbCB1cCB0aGUg
cmVzdWx0IGNvdW50cy4KKyAqCisgKiBAcGFyYW0gcmVzdWx0CisgKi8KK2phc21pbmUuTmVzdGVk
UmVzdWx0cy5wcm90b3R5cGUucm9sbHVwQ291bnRzID0gZnVuY3Rpb24ocmVzdWx0KSB7CisgIHRo
aXMudG90YWxDb3VudCArPSByZXN1bHQudG90YWxDb3VudDsKKyAgdGhpcy5wYXNzZWRDb3VudCAr
PSByZXN1bHQucGFzc2VkQ291bnQ7CisgIHRoaXMuZmFpbGVkQ291bnQgKz0gcmVzdWx0LmZhaWxl
ZENvdW50OworfTsKKworLyoqCisgKiBBZGRzIGEgbG9nIG1lc3NhZ2UuCisgKiBAcGFyYW0gdmFs
dWVzIEFycmF5IG9mIG1lc3NhZ2UgcGFydHMgd2hpY2ggd2lsbCBiZSBjb25jYXRlbmF0ZWQgbGF0
ZXIuCisgKi8KK2phc21pbmUuTmVzdGVkUmVzdWx0cy5wcm90b3R5cGUubG9nID0gZnVuY3Rpb24o
dmFsdWVzKSB7CisgIHRoaXMuaXRlbXNfLnB1c2gobmV3IGphc21pbmUuTWVzc2FnZVJlc3VsdCh2
YWx1ZXMpKTsKK307CisKKy8qKgorICogR2V0dGVyIGZvciB0aGUgcmVzdWx0czogbWVzc2FnZSAm
IHJlc3VsdHMuCisgKi8KK2phc21pbmUuTmVzdGVkUmVzdWx0cy5wcm90b3R5cGUuZ2V0SXRlbXMg
PSBmdW5jdGlvbigpIHsKKyAgcmV0dXJuIHRoaXMuaXRlbXNfOworfTsKKworLyoqCisgKiBBZGRz
IGEgcmVzdWx0LCB0cmFja2luZyBjb3VudHMgKHRvdGFsLCBwYXNzZWQsICYgZmFpbGVkKQorICog
QHBhcmFtIHtqYXNtaW5lLkV4cGVjdGF0aW9uUmVzdWx0fGphc21pbmUuTmVzdGVkUmVzdWx0c30g
cmVzdWx0CisgKi8KK2phc21pbmUuTmVzdGVkUmVzdWx0cy5wcm90b3R5cGUuYWRkUmVzdWx0ID0g
ZnVuY3Rpb24ocmVzdWx0KSB7CisgIGlmIChyZXN1bHQudHlwZSAhPSAnbG9nJykgeworICAgIGlm
IChyZXN1bHQuaXRlbXNfKSB7CisgICAgICB0aGlzLnJvbGx1cENvdW50cyhyZXN1bHQpOworICAg
IH0gZWxzZSB7CisgICAgICB0aGlzLnRvdGFsQ291bnQrKzsKKyAgICAgIGlmIChyZXN1bHQucGFz
c2VkKCkpIHsKKyAgICAgICAgdGhpcy5wYXNzZWRDb3VudCsrOworICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgdGhpcy5mYWlsZWRDb3VudCsrOworICAgICAgfQorICAgIH0KKyAgfQorICB0aGlzLml0
ZW1zXy5wdXNoKHJlc3VsdCk7Cit9OworCisvKioKKyAqIEByZXR1cm5zIHtCb29sZWFufSBUcnVl
IGlmIDxiPmV2ZXJ5dGhpbmc8L2I+IGJlbG93IHBhc3NlZAorICovCitqYXNtaW5lLk5lc3RlZFJl
c3VsdHMucHJvdG90eXBlLnBhc3NlZCA9IGZ1bmN0aW9uKCkgeworICByZXR1cm4gdGhpcy5wYXNz
ZWRDb3VudCA9PT0gdGhpcy50b3RhbENvdW50OworfTsKKy8qKgorICogQmFzZSBjbGFzcyBmb3Ig
cHJldHR5IHByaW50aW5nIGZvciBleHBlY3RhdGlvbiByZXN1bHRzLgorICovCitqYXNtaW5lLlBy
ZXR0eVByaW50ZXIgPSBmdW5jdGlvbigpIHsKKyAgdGhpcy5wcE5lc3RMZXZlbF8gPSAwOworfTsK
KworLyoqCisgKiBGb3JtYXRzIGEgdmFsdWUgaW4gYSBuaWNlLCBodW1hbi1yZWFkYWJsZSBzdHJp
bmcuCisgKgorICogQHBhcmFtIHZhbHVlCisgKi8KK2phc21pbmUuUHJldHR5UHJpbnRlci5wcm90
b3R5cGUuZm9ybWF0ID0gZnVuY3Rpb24odmFsdWUpIHsKKyAgaWYgKHRoaXMucHBOZXN0TGV2ZWxf
ID4gNDApIHsKKyAgICB0aHJvdyBuZXcgRXJyb3IoJ2phc21pbmUuUHJldHR5UHJpbnRlcjogZm9y
bWF0KCkgbmVzdGVkIHRvbyBkZWVwbHkhJyk7CisgIH0KKworICB0aGlzLnBwTmVzdExldmVsXysr
OworICB0cnkgeworICAgIGlmICh2YWx1ZSA9PT0gamFzbWluZS51bmRlZmluZWQpIHsKKyAgICAg
IHRoaXMuZW1pdFNjYWxhcigndW5kZWZpbmVkJyk7CisgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0g
bnVsbCkgeworICAgICAgdGhpcy5lbWl0U2NhbGFyKCdudWxsJyk7CisgICAgfSBlbHNlIGlmICh2
YWx1ZSA9PT0gamFzbWluZS5nZXRHbG9iYWwoKSkgeworICAgICAgdGhpcy5lbWl0U2NhbGFyKCc8
Z2xvYmFsPicpOworICAgIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBqYXNtaW5lLk1hdGNo
ZXJzLkFueSkgeworICAgICAgdGhpcy5lbWl0U2NhbGFyKHZhbHVlLnRvU3RyaW5nKCkpOworICAg
IH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykgeworICAgICAgdGhpcy5lbWl0
U3RyaW5nKHZhbHVlKTsKKyAgICB9IGVsc2UgaWYgKGphc21pbmUuaXNTcHkodmFsdWUpKSB7Cisg
ICAgICB0aGlzLmVtaXRTY2FsYXIoInNweSBvbiAiICsgdmFsdWUuaWRlbnRpdHkpOworICAgIH0g
ZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBSZWdFeHApIHsKKyAgICAgIHRoaXMuZW1pdFNjYWxh
cih2YWx1ZS50b1N0cmluZygpKTsKKyAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1
bmN0aW9uJykgeworICAgICAgdGhpcy5lbWl0U2NhbGFyKCdGdW5jdGlvbicpOworICAgIH0gZWxz
ZSBpZiAodHlwZW9mIHZhbHVlLm5vZGVUeXBlID09PSAnbnVtYmVyJykgeworICAgICAgdGhpcy5l
bWl0U2NhbGFyKCdIVE1MTm9kZScpOworICAgIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBE
YXRlKSB7CisgICAgICB0aGlzLmVtaXRTY2FsYXIoJ0RhdGUoJyArIHZhbHVlICsgJyknKTsKKyAg
ICB9IGVsc2UgaWYgKHZhbHVlLl9fSmFzbWluZV9iZWVuX2hlcmVfYmVmb3JlX18pIHsKKyAgICAg
IHRoaXMuZW1pdFNjYWxhcignPGNpcmN1bGFyIHJlZmVyZW5jZTogJyArIChqYXNtaW5lLmlzQXJy
YXlfKHZhbHVlKSA/ICdBcnJheScgOiAnT2JqZWN0JykgKyAnPicpOworICAgIH0gZWxzZSBpZiAo
amFzbWluZS5pc0FycmF5Xyh2YWx1ZSkgfHwgdHlwZW9mIHZhbHVlID09ICdvYmplY3QnKSB7Cisg
ICAgICB2YWx1ZS5fX0phc21pbmVfYmVlbl9oZXJlX2JlZm9yZV9fID0gdHJ1ZTsKKyAgICAgIGlm
IChqYXNtaW5lLmlzQXJyYXlfKHZhbHVlKSkgeworICAgICAgICB0aGlzLmVtaXRBcnJheSh2YWx1
ZSk7CisgICAgICB9IGVsc2UgeworICAgICAgICB0aGlzLmVtaXRPYmplY3QodmFsdWUpOworICAg
ICAgfQorICAgICAgZGVsZXRlIHZhbHVlLl9fSmFzbWluZV9iZWVuX2hlcmVfYmVmb3JlX187Cisg
ICAgfSBlbHNlIHsKKyAgICAgIHRoaXMuZW1pdFNjYWxhcih2YWx1ZS50b1N0cmluZygpKTsKKyAg
ICB9CisgIH0gZmluYWxseSB7CisgICAgdGhpcy5wcE5lc3RMZXZlbF8tLTsKKyAgfQorfTsKKwor
amFzbWluZS5QcmV0dHlQcmludGVyLnByb3RvdHlwZS5pdGVyYXRlT2JqZWN0ID0gZnVuY3Rpb24o
b2JqLCBmbikgeworICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBvYmopIHsKKyAgICBpZiAocHJvcGVy
dHkgPT0gJ19fSmFzbWluZV9iZWVuX2hlcmVfYmVmb3JlX18nKSBjb250aW51ZTsKKyAgICBmbihw
cm9wZXJ0eSwgb2JqLl9fbG9va3VwR2V0dGVyX18gPyAob2JqLl9fbG9va3VwR2V0dGVyX18ocHJv
cGVydHkpICE9PSBqYXNtaW5lLnVuZGVmaW5lZCAmJiAKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgb2JqLl9fbG9va3VwR2V0dGVyX18ocHJvcGVydHkpICE9PSBudWxs
KSA6IGZhbHNlKTsKKyAgfQorfTsKKworamFzbWluZS5QcmV0dHlQcmludGVyLnByb3RvdHlwZS5l
bWl0QXJyYXkgPSBqYXNtaW5lLnVuaW1wbGVtZW50ZWRNZXRob2RfOworamFzbWluZS5QcmV0dHlQ
cmludGVyLnByb3RvdHlwZS5lbWl0T2JqZWN0ID0gamFzbWluZS51bmltcGxlbWVudGVkTWV0aG9k
XzsKK2phc21pbmUuUHJldHR5UHJpbnRlci5wcm90b3R5cGUuZW1pdFNjYWxhciA9IGphc21pbmUu
dW5pbXBsZW1lbnRlZE1ldGhvZF87CitqYXNtaW5lLlByZXR0eVByaW50ZXIucHJvdG90eXBlLmVt
aXRTdHJpbmcgPSBqYXNtaW5lLnVuaW1wbGVtZW50ZWRNZXRob2RfOworCitqYXNtaW5lLlN0cmlu
Z1ByZXR0eVByaW50ZXIgPSBmdW5jdGlvbigpIHsKKyAgamFzbWluZS5QcmV0dHlQcmludGVyLmNh
bGwodGhpcyk7CisKKyAgdGhpcy5zdHJpbmcgPSAnJzsKK307CitqYXNtaW5lLnV0aWwuaW5oZXJp
dChqYXNtaW5lLlN0cmluZ1ByZXR0eVByaW50ZXIsIGphc21pbmUuUHJldHR5UHJpbnRlcik7CisK
K2phc21pbmUuU3RyaW5nUHJldHR5UHJpbnRlci5wcm90b3R5cGUuZW1pdFNjYWxhciA9IGZ1bmN0
aW9uKHZhbHVlKSB7CisgIHRoaXMuYXBwZW5kKHZhbHVlKTsKK307CisKK2phc21pbmUuU3RyaW5n
UHJldHR5UHJpbnRlci5wcm90b3R5cGUuZW1pdFN0cmluZyA9IGZ1bmN0aW9uKHZhbHVlKSB7Cisg
IHRoaXMuYXBwZW5kKCInIiArIHZhbHVlICsgIiciKTsKK307CisKK2phc21pbmUuU3RyaW5nUHJl
dHR5UHJpbnRlci5wcm90b3R5cGUuZW1pdEFycmF5ID0gZnVuY3Rpb24oYXJyYXkpIHsKKyAgdGhp
cy5hcHBlbmQoJ1sgJyk7CisgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKysp
IHsKKyAgICBpZiAoaSA+IDApIHsKKyAgICAgIHRoaXMuYXBwZW5kKCcsICcpOworICAgIH0KKyAg
ICB0aGlzLmZvcm1hdChhcnJheVtpXSk7CisgIH0KKyAgdGhpcy5hcHBlbmQoJyBdJyk7Cit9Owor
CitqYXNtaW5lLlN0cmluZ1ByZXR0eVByaW50ZXIucHJvdG90eXBlLmVtaXRPYmplY3QgPSBmdW5j
dGlvbihvYmopIHsKKyAgdmFyIHNlbGYgPSB0aGlzOworICB0aGlzLmFwcGVuZCgneyAnKTsKKyAg
dmFyIGZpcnN0ID0gdHJ1ZTsKKworICB0aGlzLml0ZXJhdGVPYmplY3Qob2JqLCBmdW5jdGlvbihw
cm9wZXJ0eSwgaXNHZXR0ZXIpIHsKKyAgICBpZiAoZmlyc3QpIHsKKyAgICAgIGZpcnN0ID0gZmFs
c2U7CisgICAgfSBlbHNlIHsKKyAgICAgIHNlbGYuYXBwZW5kKCcsICcpOworICAgIH0KKworICAg
IHNlbGYuYXBwZW5kKHByb3BlcnR5KTsKKyAgICBzZWxmLmFwcGVuZCgnIDogJyk7CisgICAgaWYg
KGlzR2V0dGVyKSB7CisgICAgICBzZWxmLmFwcGVuZCgnPGdldHRlcj4nKTsKKyAgICB9IGVsc2Ug
eworICAgICAgc2VsZi5mb3JtYXQob2JqW3Byb3BlcnR5XSk7CisgICAgfQorICB9KTsKKworICB0
aGlzLmFwcGVuZCgnIH0nKTsKK307CisKK2phc21pbmUuU3RyaW5nUHJldHR5UHJpbnRlci5wcm90
b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24odmFsdWUpIHsKKyAgdGhpcy5zdHJpbmcgKz0gdmFsdWU7
Cit9OworamFzbWluZS5RdWV1ZSA9IGZ1bmN0aW9uKGVudikgeworICB0aGlzLmVudiA9IGVudjsK
KyAgdGhpcy5ibG9ja3MgPSBbXTsKKyAgdGhpcy5ydW5uaW5nID0gZmFsc2U7CisgIHRoaXMuaW5k
ZXggPSAwOworICB0aGlzLm9mZnNldCA9IDA7CisgIHRoaXMuYWJvcnQgPSBmYWxzZTsKK307CisK
K2phc21pbmUuUXVldWUucHJvdG90eXBlLmFkZEJlZm9yZSA9IGZ1bmN0aW9uKGJsb2NrKSB7Cisg
IHRoaXMuYmxvY2tzLnVuc2hpZnQoYmxvY2spOworfTsKKworamFzbWluZS5RdWV1ZS5wcm90b3R5
cGUuYWRkID0gZnVuY3Rpb24oYmxvY2spIHsKKyAgdGhpcy5ibG9ja3MucHVzaChibG9jayk7Cit9
OworCitqYXNtaW5lLlF1ZXVlLnByb3RvdHlwZS5pbnNlcnROZXh0ID0gZnVuY3Rpb24oYmxvY2sp
IHsKKyAgdGhpcy5ibG9ja3Muc3BsaWNlKCh0aGlzLmluZGV4ICsgdGhpcy5vZmZzZXQgKyAxKSwg
MCwgYmxvY2spOworICB0aGlzLm9mZnNldCsrOworfTsKKworamFzbWluZS5RdWV1ZS5wcm90b3R5
cGUuc3RhcnQgPSBmdW5jdGlvbihvbkNvbXBsZXRlKSB7CisgIHRoaXMucnVubmluZyA9IHRydWU7
CisgIHRoaXMub25Db21wbGV0ZSA9IG9uQ29tcGxldGU7CisgIHRoaXMubmV4dF8oKTsKK307CisK
K2phc21pbmUuUXVldWUucHJvdG90eXBlLmlzUnVubmluZyA9IGZ1bmN0aW9uKCkgeworICByZXR1
cm4gdGhpcy5ydW5uaW5nOworfTsKKworamFzbWluZS5RdWV1ZS5MT09QX0RPTlRfUkVDVVJTRSA9
IHRydWU7CisKK2phc21pbmUuUXVldWUucHJvdG90eXBlLm5leHRfID0gZnVuY3Rpb24oKSB7Cisg
IHZhciBzZWxmID0gdGhpczsKKyAgdmFyIGdvQWdhaW4gPSB0cnVlOworCisgIHdoaWxlIChnb0Fn
YWluKSB7CisgICAgZ29BZ2FpbiA9IGZhbHNlOworICAgIAorICAgIGlmIChzZWxmLmluZGV4IDwg
c2VsZi5ibG9ja3MubGVuZ3RoICYmICF0aGlzLmFib3J0KSB7CisgICAgICB2YXIgY2FsbGVkU3lu
Y2hyb25vdXNseSA9IHRydWU7CisgICAgICB2YXIgY29tcGxldGVkU3luY2hyb25vdXNseSA9IGZh
bHNlOworCisgICAgICB2YXIgb25Db21wbGV0ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYg
KGphc21pbmUuUXVldWUuTE9PUF9ET05UX1JFQ1VSU0UgJiYgY2FsbGVkU3luY2hyb25vdXNseSkg
eworICAgICAgICAgIGNvbXBsZXRlZFN5bmNocm9ub3VzbHkgPSB0cnVlOworICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzZWxmLmJsb2Nrc1tzZWxmLmluZGV4XS5h
Ym9ydCkgeworICAgICAgICAgIHNlbGYuYWJvcnQgPSB0cnVlOworICAgICAgICB9CisKKyAgICAg
ICAgc2VsZi5vZmZzZXQgPSAwOworICAgICAgICBzZWxmLmluZGV4Kys7CisKKyAgICAgICAgdmFy
IG5vdyA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpOworICAgICAgICBpZiAoc2VsZi5lbnYudXBkYXRl
SW50ZXJ2YWwgJiYgbm93IC0gc2VsZi5lbnYubGFzdFVwZGF0ZSA+IHNlbGYuZW52LnVwZGF0ZUlu
dGVydmFsKSB7CisgICAgICAgICAgc2VsZi5lbnYubGFzdFVwZGF0ZSA9IG5vdzsKKyAgICAgICAg
ICBzZWxmLmVudi5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgc2VsZi5uZXh0
XygpOworICAgICAgICAgIH0sIDApOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGlmIChq
YXNtaW5lLlF1ZXVlLkxPT1BfRE9OVF9SRUNVUlNFICYmIGNvbXBsZXRlZFN5bmNocm9ub3VzbHkp
IHsKKyAgICAgICAgICAgIGdvQWdhaW4gPSB0cnVlOworICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBzZWxmLm5leHRfKCk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9Owor
ICAgICAgc2VsZi5ibG9ja3Nbc2VsZi5pbmRleF0uZXhlY3V0ZShvbkNvbXBsZXRlKTsKKworICAg
ICAgY2FsbGVkU3luY2hyb25vdXNseSA9IGZhbHNlOworICAgICAgaWYgKGNvbXBsZXRlZFN5bmNo
cm9ub3VzbHkpIHsKKyAgICAgICAgb25Db21wbGV0ZSgpOworICAgICAgfQorICAgICAgCisgICAg
fSBlbHNlIHsKKyAgICAgIHNlbGYucnVubmluZyA9IGZhbHNlOworICAgICAgaWYgKHNlbGYub25D
b21wbGV0ZSkgeworICAgICAgICBzZWxmLm9uQ29tcGxldGUoKTsKKyAgICAgIH0KKyAgICB9Cisg
IH0KK307CisKK2phc21pbmUuUXVldWUucHJvdG90eXBlLnJlc3VsdHMgPSBmdW5jdGlvbigpIHsK
KyAgdmFyIHJlc3VsdHMgPSBuZXcgamFzbWluZS5OZXN0ZWRSZXN1bHRzKCk7CisgIGZvciAodmFy
IGkgPSAwOyBpIDwgdGhpcy5ibG9ja3MubGVuZ3RoOyBpKyspIHsKKyAgICBpZiAodGhpcy5ibG9j
a3NbaV0ucmVzdWx0cykgeworICAgICAgcmVzdWx0cy5hZGRSZXN1bHQodGhpcy5ibG9ja3NbaV0u
cmVzdWx0cygpKTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIHJlc3VsdHM7Cit9OworCisKKy8qKgor
ICogUnVubmVyCisgKgorICogQGNvbnN0cnVjdG9yCisgKiBAcGFyYW0ge2phc21pbmUuRW52fSBl
bnYKKyAqLworamFzbWluZS5SdW5uZXIgPSBmdW5jdGlvbihlbnYpIHsKKyAgdmFyIHNlbGYgPSB0
aGlzOworICBzZWxmLmVudiA9IGVudjsKKyAgc2VsZi5xdWV1ZSA9IG5ldyBqYXNtaW5lLlF1ZXVl
KGVudik7CisgIHNlbGYuYmVmb3JlXyA9IFtdOworICBzZWxmLmFmdGVyXyA9IFtdOworICBzZWxm
LnN1aXRlc18gPSBbXTsKK307CisKK2phc21pbmUuUnVubmVyLnByb3RvdHlwZS5leGVjdXRlID0g
ZnVuY3Rpb24oKSB7CisgIHZhciBzZWxmID0gdGhpczsKKyAgaWYgKHNlbGYuZW52LnJlcG9ydGVy
LnJlcG9ydFJ1bm5lclN0YXJ0aW5nKSB7CisgICAgc2VsZi5lbnYucmVwb3J0ZXIucmVwb3J0UnVu
bmVyU3RhcnRpbmcodGhpcyk7CisgIH0KKyAgc2VsZi5xdWV1ZS5zdGFydChmdW5jdGlvbiAoKSB7
CisgICAgc2VsZi5maW5pc2hDYWxsYmFjaygpOworICB9KTsKK307CisKK2phc21pbmUuUnVubmVy
LnByb3RvdHlwZS5iZWZvcmVFYWNoID0gZnVuY3Rpb24oYmVmb3JlRWFjaEZ1bmN0aW9uKSB7Cisg
IGJlZm9yZUVhY2hGdW5jdGlvbi50eXBlTmFtZSA9ICdiZWZvcmVFYWNoJzsKKyAgdGhpcy5iZWZv
cmVfLnNwbGljZSgwLDAsYmVmb3JlRWFjaEZ1bmN0aW9uKTsKK307CisKK2phc21pbmUuUnVubmVy
LnByb3RvdHlwZS5hZnRlckVhY2ggPSBmdW5jdGlvbihhZnRlckVhY2hGdW5jdGlvbikgeworICBh
ZnRlckVhY2hGdW5jdGlvbi50eXBlTmFtZSA9ICdhZnRlckVhY2gnOworICB0aGlzLmFmdGVyXy5z
cGxpY2UoMCwwLGFmdGVyRWFjaEZ1bmN0aW9uKTsKK307CisKKworamFzbWluZS5SdW5uZXIucHJv
dG90eXBlLmZpbmlzaENhbGxiYWNrID0gZnVuY3Rpb24oKSB7CisgIHRoaXMuZW52LnJlcG9ydGVy
LnJlcG9ydFJ1bm5lclJlc3VsdHModGhpcyk7Cit9OworCitqYXNtaW5lLlJ1bm5lci5wcm90b3R5
cGUuYWRkU3VpdGUgPSBmdW5jdGlvbihzdWl0ZSkgeworICB0aGlzLnN1aXRlc18ucHVzaChzdWl0
ZSk7Cit9OworCitqYXNtaW5lLlJ1bm5lci5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24oYmxvY2sp
IHsKKyAgaWYgKGJsb2NrIGluc3RhbmNlb2YgamFzbWluZS5TdWl0ZSkgeworICAgIHRoaXMuYWRk
U3VpdGUoYmxvY2spOworICB9CisgIHRoaXMucXVldWUuYWRkKGJsb2NrKTsKK307CisKK2phc21p
bmUuUnVubmVyLnByb3RvdHlwZS5zcGVjcyA9IGZ1bmN0aW9uICgpIHsKKyAgdmFyIHN1aXRlcyA9
IHRoaXMuc3VpdGVzKCk7CisgIHZhciBzcGVjcyA9IFtdOworICBmb3IgKHZhciBpID0gMDsgaSA8
IHN1aXRlcy5sZW5ndGg7IGkrKykgeworICAgIHNwZWNzID0gc3BlY3MuY29uY2F0KHN1aXRlc1tp
XS5zcGVjcygpKTsKKyAgfQorICByZXR1cm4gc3BlY3M7Cit9OworCitqYXNtaW5lLlJ1bm5lci5w
cm90b3R5cGUuc3VpdGVzID0gZnVuY3Rpb24oKSB7CisgIHJldHVybiB0aGlzLnN1aXRlc187Cit9
OworCitqYXNtaW5lLlJ1bm5lci5wcm90b3R5cGUudG9wTGV2ZWxTdWl0ZXMgPSBmdW5jdGlvbigp
IHsKKyAgdmFyIHRvcExldmVsU3VpdGVzID0gW107CisgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhp
cy5zdWl0ZXNfLmxlbmd0aDsgaSsrKSB7CisgICAgaWYgKCF0aGlzLnN1aXRlc19baV0ucGFyZW50
U3VpdGUpIHsKKyAgICAgIHRvcExldmVsU3VpdGVzLnB1c2godGhpcy5zdWl0ZXNfW2ldKTsKKyAg
ICB9CisgIH0KKyAgcmV0dXJuIHRvcExldmVsU3VpdGVzOworfTsKKworamFzbWluZS5SdW5uZXIu
cHJvdG90eXBlLnJlc3VsdHMgPSBmdW5jdGlvbigpIHsKKyAgcmV0dXJuIHRoaXMucXVldWUucmVz
dWx0cygpOworfTsKKy8qKgorICogSW50ZXJuYWwgcmVwcmVzZW50YXRpb24gb2YgYSBKYXNtaW5l
IHNwZWNpZmljYXRpb24sIG9yIHRlc3QuCisgKgorICogQGNvbnN0cnVjdG9yCisgKiBAcGFyYW0g
e2phc21pbmUuRW52fSBlbnYKKyAqIEBwYXJhbSB7amFzbWluZS5TdWl0ZX0gc3VpdGUKKyAqIEBw
YXJhbSB7U3RyaW5nfSBkZXNjcmlwdGlvbgorICovCitqYXNtaW5lLlNwZWMgPSBmdW5jdGlvbihl
bnYsIHN1aXRlLCBkZXNjcmlwdGlvbikgeworICBpZiAoIWVudikgeworICAgIHRocm93IG5ldyBF
cnJvcignamFzbWluZS5FbnYoKSByZXF1aXJlZCcpOworICB9CisgIGlmICghc3VpdGUpIHsKKyAg
ICB0aHJvdyBuZXcgRXJyb3IoJ2phc21pbmUuU3VpdGUoKSByZXF1aXJlZCcpOworICB9CisgIHZh
ciBzcGVjID0gdGhpczsKKyAgc3BlYy5pZCA9IGVudi5uZXh0U3BlY0lkID8gZW52Lm5leHRTcGVj
SWQoKSA6IG51bGw7CisgIHNwZWMuZW52ID0gZW52OworICBzcGVjLnN1aXRlID0gc3VpdGU7Cisg
IHNwZWMuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjsKKyAgc3BlYy5xdWV1ZSA9IG5ldyBqYXNt
aW5lLlF1ZXVlKGVudik7CisKKyAgc3BlYy5hZnRlckNhbGxiYWNrcyA9IFtdOworICBzcGVjLnNw
aWVzXyA9IFtdOworCisgIHNwZWMucmVzdWx0c18gPSBuZXcgamFzbWluZS5OZXN0ZWRSZXN1bHRz
KCk7CisgIHNwZWMucmVzdWx0c18uZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjsKKyAgc3BlYy5t
YXRjaGVyc0NsYXNzID0gbnVsbDsKK307CisKK2phc21pbmUuU3BlYy5wcm90b3R5cGUuZ2V0RnVs
bE5hbWUgPSBmdW5jdGlvbigpIHsKKyAgcmV0dXJuIHRoaXMuc3VpdGUuZ2V0RnVsbE5hbWUoKSAr
ICcgJyArIHRoaXMuZGVzY3JpcHRpb24gKyAnLic7Cit9OworCisKK2phc21pbmUuU3BlYy5wcm90
b3R5cGUucmVzdWx0cyA9IGZ1bmN0aW9uKCkgeworICByZXR1cm4gdGhpcy5yZXN1bHRzXzsKK307
CisKKy8qKgorICogQWxsIHBhcmFtZXRlcnMgYXJlIHByZXR0eS1wcmludGVkIGFuZCBjb25jYXRl
bmF0ZWQgdG9nZXRoZXIsIHRoZW4gd3JpdHRlbiB0byB0aGUgc3BlYydzIG91dHB1dC4KKyAqCisg
KiBCZSBjYXJlZnVsIG5vdCB0byBsZWF2ZSBjYWxscyB0byA8Y29kZT5qYXNtaW5lLmxvZzwvY29k
ZT4gaW4gcHJvZHVjdGlvbiBjb2RlLgorICovCitqYXNtaW5lLlNwZWMucHJvdG90eXBlLmxvZyA9
IGZ1bmN0aW9uKCkgeworICByZXR1cm4gdGhpcy5yZXN1bHRzXy5sb2coYXJndW1lbnRzKTsKK307
CisKK2phc21pbmUuU3BlYy5wcm90b3R5cGUucnVucyA9IGZ1bmN0aW9uIChmdW5jKSB7CisgIHZh
ciBibG9jayA9IG5ldyBqYXNtaW5lLkJsb2NrKHRoaXMuZW52LCBmdW5jLCB0aGlzKTsKKyAgdGhp
cy5hZGRUb1F1ZXVlKGJsb2NrKTsKKyAgcmV0dXJuIHRoaXM7Cit9OworCitqYXNtaW5lLlNwZWMu
cHJvdG90eXBlLmFkZFRvUXVldWUgPSBmdW5jdGlvbiAoYmxvY2spIHsKKyAgaWYgKHRoaXMucXVl
dWUuaXNSdW5uaW5nKCkpIHsKKyAgICB0aGlzLnF1ZXVlLmluc2VydE5leHQoYmxvY2spOworICB9
IGVsc2UgeworICAgIHRoaXMucXVldWUuYWRkKGJsb2NrKTsKKyAgfQorfTsKKworLyoqCisgKiBA
cGFyYW0ge2phc21pbmUuRXhwZWN0YXRpb25SZXN1bHR9IHJlc3VsdAorICovCitqYXNtaW5lLlNw
ZWMucHJvdG90eXBlLmFkZE1hdGNoZXJSZXN1bHQgPSBmdW5jdGlvbihyZXN1bHQpIHsKKyAgdGhp
cy5yZXN1bHRzXy5hZGRSZXN1bHQocmVzdWx0KTsKK307CisKK2phc21pbmUuU3BlYy5wcm90b3R5
cGUuZXhwZWN0ID0gZnVuY3Rpb24oYWN0dWFsKSB7CisgIHZhciBwb3NpdGl2ZSA9IG5ldyAodGhp
cy5nZXRNYXRjaGVyc0NsYXNzXygpKSh0aGlzLmVudiwgYWN0dWFsLCB0aGlzKTsKKyAgcG9zaXRp
dmUubm90ID0gbmV3ICh0aGlzLmdldE1hdGNoZXJzQ2xhc3NfKCkpKHRoaXMuZW52LCBhY3R1YWws
IHRoaXMsIHRydWUpOworICByZXR1cm4gcG9zaXRpdmU7Cit9OworCisvKioKKyAqIFdhaXRzIGEg
Zml4ZWQgdGltZSBwZXJpb2QgYmVmb3JlIG1vdmluZyB0byB0aGUgbmV4dCBibG9jay4KKyAqCisg
KiBAZGVwcmVjYXRlZCBVc2Ugd2FpdHNGb3IoKSBpbnN0ZWFkCisgKiBAcGFyYW0ge051bWJlcn0g
dGltZW91dCBtaWxsaXNlY29uZHMgdG8gd2FpdAorICovCitqYXNtaW5lLlNwZWMucHJvdG90eXBl
LndhaXRzID0gZnVuY3Rpb24odGltZW91dCkgeworICB2YXIgd2FpdHNGdW5jID0gbmV3IGphc21p
bmUuV2FpdHNCbG9jayh0aGlzLmVudiwgdGltZW91dCwgdGhpcyk7CisgIHRoaXMuYWRkVG9RdWV1
ZSh3YWl0c0Z1bmMpOworICByZXR1cm4gdGhpczsKK307CisKKy8qKgorICogV2FpdHMgZm9yIHRo
ZSBsYXRjaEZ1bmN0aW9uIHRvIHJldHVybiB0cnVlIGJlZm9yZSBwcm9jZWVkaW5nIHRvIHRoZSBu
ZXh0IGJsb2NrLgorICoKKyAqIEBwYXJhbSB7RnVuY3Rpb259IGxhdGNoRnVuY3Rpb24KKyAqIEBw
YXJhbSB7U3RyaW5nfSBvcHRpb25hbF90aW1lb3V0TWVzc2FnZQorICogQHBhcmFtIHtOdW1iZXJ9
IG9wdGlvbmFsX3RpbWVvdXQKKyAqLworamFzbWluZS5TcGVjLnByb3RvdHlwZS53YWl0c0ZvciA9
IGZ1bmN0aW9uKGxhdGNoRnVuY3Rpb24sIG9wdGlvbmFsX3RpbWVvdXRNZXNzYWdlLCBvcHRpb25h
bF90aW1lb3V0KSB7CisgIHZhciBsYXRjaEZ1bmN0aW9uXyA9IG51bGw7CisgIHZhciBvcHRpb25h
bF90aW1lb3V0TWVzc2FnZV8gPSBudWxsOworICB2YXIgb3B0aW9uYWxfdGltZW91dF8gPSBudWxs
OworCisgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7CisgICAg
dmFyIGFyZyA9IGFyZ3VtZW50c1tpXTsKKyAgICBzd2l0Y2ggKHR5cGVvZiBhcmcpIHsKKyAgICAg
IGNhc2UgJ2Z1bmN0aW9uJzoKKyAgICAgICAgbGF0Y2hGdW5jdGlvbl8gPSBhcmc7CisgICAgICAg
IGJyZWFrOworICAgICAgY2FzZSAnc3RyaW5nJzoKKyAgICAgICAgb3B0aW9uYWxfdGltZW91dE1l
c3NhZ2VfID0gYXJnOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgJ251bWJlcic6CisgICAg
ICAgIG9wdGlvbmFsX3RpbWVvdXRfID0gYXJnOworICAgICAgICBicmVhazsKKyAgICB9CisgIH0K
KworICB2YXIgd2FpdHNGb3JGdW5jID0gbmV3IGphc21pbmUuV2FpdHNGb3JCbG9jayh0aGlzLmVu
diwgb3B0aW9uYWxfdGltZW91dF8sIGxhdGNoRnVuY3Rpb25fLCBvcHRpb25hbF90aW1lb3V0TWVz
c2FnZV8sIHRoaXMpOworICB0aGlzLmFkZFRvUXVldWUod2FpdHNGb3JGdW5jKTsKKyAgcmV0dXJu
IHRoaXM7Cit9OworCitqYXNtaW5lLlNwZWMucHJvdG90eXBlLmZhaWwgPSBmdW5jdGlvbiAoZSkg
eworICB2YXIgZXhwZWN0YXRpb25SZXN1bHQgPSBuZXcgamFzbWluZS5FeHBlY3RhdGlvblJlc3Vs
dCh7CisgICAgcGFzc2VkOiBmYWxzZSwKKyAgICBtZXNzYWdlOiBlID8gamFzbWluZS51dGlsLmZv
cm1hdEV4Y2VwdGlvbihlKSA6ICdFeGNlcHRpb24nLAorICAgIHRyYWNlOiB7IHN0YWNrOiBlLnN0
YWNrIH0KKyAgfSk7CisgIHRoaXMucmVzdWx0c18uYWRkUmVzdWx0KGV4cGVjdGF0aW9uUmVzdWx0
KTsKK307CisKK2phc21pbmUuU3BlYy5wcm90b3R5cGUuZ2V0TWF0Y2hlcnNDbGFzc18gPSBmdW5j
dGlvbigpIHsKKyAgcmV0dXJuIHRoaXMubWF0Y2hlcnNDbGFzcyB8fCB0aGlzLmVudi5tYXRjaGVy
c0NsYXNzOworfTsKKworamFzbWluZS5TcGVjLnByb3RvdHlwZS5hZGRNYXRjaGVycyA9IGZ1bmN0
aW9uKG1hdGNoZXJzUHJvdG90eXBlKSB7CisgIHZhciBwYXJlbnQgPSB0aGlzLmdldE1hdGNoZXJz
Q2xhc3NfKCk7CisgIHZhciBuZXdNYXRjaGVyc0NsYXNzID0gZnVuY3Rpb24oKSB7CisgICAgcGFy
ZW50LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisgIH07CisgIGphc21pbmUudXRpbC5pbmhlcml0
KG5ld01hdGNoZXJzQ2xhc3MsIHBhcmVudCk7CisgIGphc21pbmUuTWF0Y2hlcnMud3JhcEludG9f
KG1hdGNoZXJzUHJvdG90eXBlLCBuZXdNYXRjaGVyc0NsYXNzKTsKKyAgdGhpcy5tYXRjaGVyc0Ns
YXNzID0gbmV3TWF0Y2hlcnNDbGFzczsKK307CisKK2phc21pbmUuU3BlYy5wcm90b3R5cGUuZmlu
aXNoQ2FsbGJhY2sgPSBmdW5jdGlvbigpIHsKKyAgdGhpcy5lbnYucmVwb3J0ZXIucmVwb3J0U3Bl
Y1Jlc3VsdHModGhpcyk7Cit9OworCitqYXNtaW5lLlNwZWMucHJvdG90eXBlLmZpbmlzaCA9IGZ1
bmN0aW9uKG9uQ29tcGxldGUpIHsKKyAgdGhpcy5yZW1vdmVBbGxTcGllcygpOworICB0aGlzLmZp
bmlzaENhbGxiYWNrKCk7CisgIGlmIChvbkNvbXBsZXRlKSB7CisgICAgb25Db21wbGV0ZSgpOwor
ICB9Cit9OworCitqYXNtaW5lLlNwZWMucHJvdG90eXBlLmFmdGVyID0gZnVuY3Rpb24oZG9BZnRl
cikgeworICBpZiAodGhpcy5xdWV1ZS5pc1J1bm5pbmcoKSkgeworICAgIHRoaXMucXVldWUuYWRk
KG5ldyBqYXNtaW5lLkJsb2NrKHRoaXMuZW52LCBkb0FmdGVyLCB0aGlzKSk7CisgIH0gZWxzZSB7
CisgICAgdGhpcy5hZnRlckNhbGxiYWNrcy51bnNoaWZ0KGRvQWZ0ZXIpOworICB9Cit9OworCitq
YXNtaW5lLlNwZWMucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbihvbkNvbXBsZXRlKSB7Cisg
IHZhciBzcGVjID0gdGhpczsKKyAgaWYgKCFzcGVjLmVudi5zcGVjRmlsdGVyKHNwZWMpKSB7Cisg
ICAgc3BlYy5yZXN1bHRzXy5za2lwcGVkID0gdHJ1ZTsKKyAgICBzcGVjLmZpbmlzaChvbkNvbXBs
ZXRlKTsKKyAgICByZXR1cm47CisgIH0KKworICB0aGlzLmVudi5yZXBvcnRlci5yZXBvcnRTcGVj
U3RhcnRpbmcodGhpcyk7CisKKyAgc3BlYy5lbnYuY3VycmVudFNwZWMgPSBzcGVjOworCisgIHNw
ZWMuYWRkQmVmb3Jlc0FuZEFmdGVyc1RvUXVldWUoKTsKKworICBzcGVjLnF1ZXVlLnN0YXJ0KGZ1
bmN0aW9uICgpIHsKKyAgICBzcGVjLmZpbmlzaChvbkNvbXBsZXRlKTsKKyAgfSk7Cit9OworCitq
YXNtaW5lLlNwZWMucHJvdG90eXBlLmFkZEJlZm9yZXNBbmRBZnRlcnNUb1F1ZXVlID0gZnVuY3Rp
b24oKSB7CisgIHZhciBydW5uZXIgPSB0aGlzLmVudi5jdXJyZW50UnVubmVyKCk7CisgIHZhciBp
OworCisgIGZvciAodmFyIHN1aXRlID0gdGhpcy5zdWl0ZTsgc3VpdGU7IHN1aXRlID0gc3VpdGUu
cGFyZW50U3VpdGUpIHsKKyAgICBmb3IgKGkgPSAwOyBpIDwgc3VpdGUuYmVmb3JlXy5sZW5ndGg7
IGkrKykgeworICAgICAgdGhpcy5xdWV1ZS5hZGRCZWZvcmUobmV3IGphc21pbmUuQmxvY2sodGhp
cy5lbnYsIHN1aXRlLmJlZm9yZV9baV0sIHRoaXMpKTsKKyAgICB9CisgIH0KKyAgZm9yIChpID0g
MDsgaSA8IHJ1bm5lci5iZWZvcmVfLmxlbmd0aDsgaSsrKSB7CisgICAgdGhpcy5xdWV1ZS5hZGRC
ZWZvcmUobmV3IGphc21pbmUuQmxvY2sodGhpcy5lbnYsIHJ1bm5lci5iZWZvcmVfW2ldLCB0aGlz
KSk7CisgIH0KKyAgZm9yIChpID0gMDsgaSA8IHRoaXMuYWZ0ZXJDYWxsYmFja3MubGVuZ3RoOyBp
KyspIHsKKyAgICB0aGlzLnF1ZXVlLmFkZChuZXcgamFzbWluZS5CbG9jayh0aGlzLmVudiwgdGhp
cy5hZnRlckNhbGxiYWNrc1tpXSwgdGhpcykpOworICB9CisgIGZvciAoc3VpdGUgPSB0aGlzLnN1
aXRlOyBzdWl0ZTsgc3VpdGUgPSBzdWl0ZS5wYXJlbnRTdWl0ZSkgeworICAgIGZvciAoaSA9IDA7
IGkgPCBzdWl0ZS5hZnRlcl8ubGVuZ3RoOyBpKyspIHsKKyAgICAgIHRoaXMucXVldWUuYWRkKG5l
dyBqYXNtaW5lLkJsb2NrKHRoaXMuZW52LCBzdWl0ZS5hZnRlcl9baV0sIHRoaXMpKTsKKyAgICB9
CisgIH0KKyAgZm9yIChpID0gMDsgaSA8IHJ1bm5lci5hZnRlcl8ubGVuZ3RoOyBpKyspIHsKKyAg
ICB0aGlzLnF1ZXVlLmFkZChuZXcgamFzbWluZS5CbG9jayh0aGlzLmVudiwgcnVubmVyLmFmdGVy
X1tpXSwgdGhpcykpOworICB9Cit9OworCitqYXNtaW5lLlNwZWMucHJvdG90eXBlLmV4cGxvZGVz
ID0gZnVuY3Rpb24oKSB7CisgIHRocm93ICdleHBsb2RlcyBmdW5jdGlvbiBzaG91bGQgbm90IGhh
dmUgYmVlbiBjYWxsZWQnOworfTsKKworamFzbWluZS5TcGVjLnByb3RvdHlwZS5zcHlPbiA9IGZ1
bmN0aW9uKG9iaiwgbWV0aG9kTmFtZSwgaWdub3JlTWV0aG9kRG9lc250RXhpc3QpIHsKKyAgaWYg
KG9iaiA9PSBqYXNtaW5lLnVuZGVmaW5lZCkgeworICAgIHRocm93ICJzcHlPbiBjb3VsZCBub3Qg
ZmluZCBhbiBvYmplY3QgdG8gc3B5IHVwb24gZm9yICIgKyBtZXRob2ROYW1lICsgIigpIjsKKyAg
fQorCisgIGlmICghaWdub3JlTWV0aG9kRG9lc250RXhpc3QgJiYgb2JqW21ldGhvZE5hbWVdID09
PSBqYXNtaW5lLnVuZGVmaW5lZCkgeworICAgIHRocm93IG1ldGhvZE5hbWUgKyAnKCkgbWV0aG9k
IGRvZXMgbm90IGV4aXN0JzsKKyAgfQorCisgIGlmICghaWdub3JlTWV0aG9kRG9lc250RXhpc3Qg
JiYgb2JqW21ldGhvZE5hbWVdICYmIG9ialttZXRob2ROYW1lXS5pc1NweSkgeworICAgIHRocm93
IG5ldyBFcnJvcihtZXRob2ROYW1lICsgJyBoYXMgYWxyZWFkeSBiZWVuIHNwaWVkIHVwb24nKTsK
KyAgfQorCisgIHZhciBzcHlPYmogPSBqYXNtaW5lLmNyZWF0ZVNweShtZXRob2ROYW1lKTsKKwor
ICB0aGlzLnNwaWVzXy5wdXNoKHNweU9iaik7CisgIHNweU9iai5iYXNlT2JqID0gb2JqOworICBz
cHlPYmoubWV0aG9kTmFtZSA9IG1ldGhvZE5hbWU7CisgIHNweU9iai5vcmlnaW5hbFZhbHVlID0g
b2JqW21ldGhvZE5hbWVdOworCisgIG9ialttZXRob2ROYW1lXSA9IHNweU9iajsKKworICByZXR1
cm4gc3B5T2JqOworfTsKKworamFzbWluZS5TcGVjLnByb3RvdHlwZS5yZW1vdmVBbGxTcGllcyA9
IGZ1bmN0aW9uKCkgeworICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuc3BpZXNfLmxlbmd0aDsg
aSsrKSB7CisgICAgdmFyIHNweSA9IHRoaXMuc3BpZXNfW2ldOworICAgIHNweS5iYXNlT2JqW3Nw
eS5tZXRob2ROYW1lXSA9IHNweS5vcmlnaW5hbFZhbHVlOworICB9CisgIHRoaXMuc3BpZXNfID0g
W107Cit9OworCisvKioKKyAqIEludGVybmFsIHJlcHJlc2VudGF0aW9uIG9mIGEgSmFzbWluZSBz
dWl0ZS4KKyAqCisgKiBAY29uc3RydWN0b3IKKyAqIEBwYXJhbSB7amFzbWluZS5FbnZ9IGVudgor
ICogQHBhcmFtIHtTdHJpbmd9IGRlc2NyaXB0aW9uCisgKiBAcGFyYW0ge0Z1bmN0aW9ufSBzcGVj
RGVmaW5pdGlvbnMKKyAqIEBwYXJhbSB7amFzbWluZS5TdWl0ZX0gcGFyZW50U3VpdGUKKyAqLwor
amFzbWluZS5TdWl0ZSA9IGZ1bmN0aW9uKGVudiwgZGVzY3JpcHRpb24sIHNwZWNEZWZpbml0aW9u
cywgcGFyZW50U3VpdGUpIHsKKyAgdmFyIHNlbGYgPSB0aGlzOworICBzZWxmLmlkID0gZW52Lm5l
eHRTdWl0ZUlkID8gZW52Lm5leHRTdWl0ZUlkKCkgOiBudWxsOworICBzZWxmLmRlc2NyaXB0aW9u
ID0gZGVzY3JpcHRpb247CisgIHNlbGYucXVldWUgPSBuZXcgamFzbWluZS5RdWV1ZShlbnYpOwor
ICBzZWxmLnBhcmVudFN1aXRlID0gcGFyZW50U3VpdGU7CisgIHNlbGYuZW52ID0gZW52OworICBz
ZWxmLmJlZm9yZV8gPSBbXTsKKyAgc2VsZi5hZnRlcl8gPSBbXTsKKyAgc2VsZi5jaGlsZHJlbl8g
PSBbXTsKKyAgc2VsZi5zdWl0ZXNfID0gW107CisgIHNlbGYuc3BlY3NfID0gW107Cit9OworCitq
YXNtaW5lLlN1aXRlLnByb3RvdHlwZS5nZXRGdWxsTmFtZSA9IGZ1bmN0aW9uKCkgeworICB2YXIg
ZnVsbE5hbWUgPSB0aGlzLmRlc2NyaXB0aW9uOworICBmb3IgKHZhciBwYXJlbnRTdWl0ZSA9IHRo
aXMucGFyZW50U3VpdGU7IHBhcmVudFN1aXRlOyBwYXJlbnRTdWl0ZSA9IHBhcmVudFN1aXRlLnBh
cmVudFN1aXRlKSB7CisgICAgZnVsbE5hbWUgPSBwYXJlbnRTdWl0ZS5kZXNjcmlwdGlvbiArICcg
JyArIGZ1bGxOYW1lOworICB9CisgIHJldHVybiBmdWxsTmFtZTsKK307CisKK2phc21pbmUuU3Vp
dGUucHJvdG90eXBlLmZpbmlzaCA9IGZ1bmN0aW9uKG9uQ29tcGxldGUpIHsKKyAgdGhpcy5lbnYu
cmVwb3J0ZXIucmVwb3J0U3VpdGVSZXN1bHRzKHRoaXMpOworICB0aGlzLmZpbmlzaGVkID0gdHJ1
ZTsKKyAgaWYgKHR5cGVvZihvbkNvbXBsZXRlKSA9PSAnZnVuY3Rpb24nKSB7CisgICAgb25Db21w
bGV0ZSgpOworICB9Cit9OworCitqYXNtaW5lLlN1aXRlLnByb3RvdHlwZS5iZWZvcmVFYWNoID0g
ZnVuY3Rpb24oYmVmb3JlRWFjaEZ1bmN0aW9uKSB7CisgIGJlZm9yZUVhY2hGdW5jdGlvbi50eXBl
TmFtZSA9ICdiZWZvcmVFYWNoJzsKKyAgdGhpcy5iZWZvcmVfLnVuc2hpZnQoYmVmb3JlRWFjaEZ1
bmN0aW9uKTsKK307CisKK2phc21pbmUuU3VpdGUucHJvdG90eXBlLmFmdGVyRWFjaCA9IGZ1bmN0
aW9uKGFmdGVyRWFjaEZ1bmN0aW9uKSB7CisgIGFmdGVyRWFjaEZ1bmN0aW9uLnR5cGVOYW1lID0g
J2FmdGVyRWFjaCc7CisgIHRoaXMuYWZ0ZXJfLnVuc2hpZnQoYWZ0ZXJFYWNoRnVuY3Rpb24pOwor
fTsKKworamFzbWluZS5TdWl0ZS5wcm90b3R5cGUucmVzdWx0cyA9IGZ1bmN0aW9uKCkgeworICBy
ZXR1cm4gdGhpcy5xdWV1ZS5yZXN1bHRzKCk7Cit9OworCitqYXNtaW5lLlN1aXRlLnByb3RvdHlw
ZS5hZGQgPSBmdW5jdGlvbihzdWl0ZU9yU3BlYykgeworICB0aGlzLmNoaWxkcmVuXy5wdXNoKHN1
aXRlT3JTcGVjKTsKKyAgaWYgKHN1aXRlT3JTcGVjIGluc3RhbmNlb2YgamFzbWluZS5TdWl0ZSkg
eworICAgIHRoaXMuc3VpdGVzXy5wdXNoKHN1aXRlT3JTcGVjKTsKKyAgICB0aGlzLmVudi5jdXJy
ZW50UnVubmVyKCkuYWRkU3VpdGUoc3VpdGVPclNwZWMpOworICB9IGVsc2UgeworICAgIHRoaXMu
c3BlY3NfLnB1c2goc3VpdGVPclNwZWMpOworICB9CisgIHRoaXMucXVldWUuYWRkKHN1aXRlT3JT
cGVjKTsKK307CisKK2phc21pbmUuU3VpdGUucHJvdG90eXBlLnNwZWNzID0gZnVuY3Rpb24oKSB7
CisgIHJldHVybiB0aGlzLnNwZWNzXzsKK307CisKK2phc21pbmUuU3VpdGUucHJvdG90eXBlLnN1
aXRlcyA9IGZ1bmN0aW9uKCkgeworICByZXR1cm4gdGhpcy5zdWl0ZXNfOworfTsKKworamFzbWlu
ZS5TdWl0ZS5wcm90b3R5cGUuY2hpbGRyZW4gPSBmdW5jdGlvbigpIHsKKyAgcmV0dXJuIHRoaXMu
Y2hpbGRyZW5fOworfTsKKworamFzbWluZS5TdWl0ZS5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0
aW9uKG9uQ29tcGxldGUpIHsKKyAgdmFyIHNlbGYgPSB0aGlzOworICB0aGlzLnF1ZXVlLnN0YXJ0
KGZ1bmN0aW9uICgpIHsKKyAgICBzZWxmLmZpbmlzaChvbkNvbXBsZXRlKTsKKyAgfSk7Cit9Owor
amFzbWluZS5XYWl0c0Jsb2NrID0gZnVuY3Rpb24oZW52LCB0aW1lb3V0LCBzcGVjKSB7CisgIHRo
aXMudGltZW91dCA9IHRpbWVvdXQ7CisgIGphc21pbmUuQmxvY2suY2FsbCh0aGlzLCBlbnYsIG51
bGwsIHNwZWMpOworfTsKKworamFzbWluZS51dGlsLmluaGVyaXQoamFzbWluZS5XYWl0c0Jsb2Nr
LCBqYXNtaW5lLkJsb2NrKTsKKworamFzbWluZS5XYWl0c0Jsb2NrLnByb3RvdHlwZS5leGVjdXRl
ID0gZnVuY3Rpb24gKG9uQ29tcGxldGUpIHsKKyAgaWYgKGphc21pbmUuVkVSQk9TRSkgeworICAg
IHRoaXMuZW52LnJlcG9ydGVyLmxvZygnPj4gSmFzbWluZSB3YWl0aW5nIGZvciAnICsgdGhpcy50
aW1lb3V0ICsgJyBtcy4uLicpOworICB9CisgIHRoaXMuZW52LnNldFRpbWVvdXQoZnVuY3Rpb24g
KCkgeworICAgIG9uQ29tcGxldGUoKTsKKyAgfSwgdGhpcy50aW1lb3V0KTsKK307CisvKioKKyAq
IEEgYmxvY2sgd2hpY2ggd2FpdHMgZm9yIHNvbWUgY29uZGl0aW9uIHRvIGJlY29tZSB0cnVlLCB3
aXRoIHRpbWVvdXQuCisgKgorICogQGNvbnN0cnVjdG9yCisgKiBAZXh0ZW5kcyBqYXNtaW5lLkJs
b2NrCisgKiBAcGFyYW0ge2phc21pbmUuRW52fSBlbnYgVGhlIEphc21pbmUgZW52aXJvbm1lbnQu
CisgKiBAcGFyYW0ge051bWJlcn0gdGltZW91dCBUaGUgbWF4aW11bSB0aW1lIGluIG1pbGxpc2Vj
b25kcyB0byB3YWl0IGZvciB0aGUgY29uZGl0aW9uIHRvIGJlY29tZSB0cnVlLgorICogQHBhcmFt
IHtGdW5jdGlvbn0gbGF0Y2hGdW5jdGlvbiBBIGZ1bmN0aW9uIHdoaWNoIHJldHVybnMgdHJ1ZSB3
aGVuIHRoZSBkZXNpcmVkIGNvbmRpdGlvbiBoYXMgYmVlbiBtZXQuCisgKiBAcGFyYW0ge1N0cmlu
Z30gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBkaXNwbGF5IGlmIHRoZSBkZXNpcmVkIGNvbmRpdGlv
biBoYXNuJ3QgYmVlbiBtZXQgd2l0aGluIHRoZSBnaXZlbiB0aW1lIHBlcmlvZC4KKyAqIEBwYXJh
bSB7amFzbWluZS5TcGVjfSBzcGVjIFRoZSBKYXNtaW5lIHNwZWMuCisgKi8KK2phc21pbmUuV2Fp
dHNGb3JCbG9jayA9IGZ1bmN0aW9uKGVudiwgdGltZW91dCwgbGF0Y2hGdW5jdGlvbiwgbWVzc2Fn
ZSwgc3BlYykgeworICB0aGlzLnRpbWVvdXQgPSB0aW1lb3V0IHx8IGVudi5kZWZhdWx0VGltZW91
dEludGVydmFsOworICB0aGlzLmxhdGNoRnVuY3Rpb24gPSBsYXRjaEZ1bmN0aW9uOworICB0aGlz
Lm1lc3NhZ2UgPSBtZXNzYWdlOworICB0aGlzLnRvdGFsVGltZVNwZW50V2FpdGluZ0ZvckxhdGNo
ID0gMDsKKyAgamFzbWluZS5CbG9jay5jYWxsKHRoaXMsIGVudiwgbnVsbCwgc3BlYyk7Cit9Owor
amFzbWluZS51dGlsLmluaGVyaXQoamFzbWluZS5XYWl0c0ZvckJsb2NrLCBqYXNtaW5lLkJsb2Nr
KTsKKworamFzbWluZS5XYWl0c0ZvckJsb2NrLlRJTUVPVVRfSU5DUkVNRU5UID0gMTA7CisKK2ph
c21pbmUuV2FpdHNGb3JCbG9jay5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uKG9uQ29tcGxl
dGUpIHsKKyAgaWYgKGphc21pbmUuVkVSQk9TRSkgeworICAgIHRoaXMuZW52LnJlcG9ydGVyLmxv
ZygnPj4gSmFzbWluZSB3YWl0aW5nIGZvciAnICsgKHRoaXMubWVzc2FnZSB8fCAnc29tZXRoaW5n
IHRvIGhhcHBlbicpKTsKKyAgfQorICB2YXIgbGF0Y2hGdW5jdGlvblJlc3VsdDsKKyAgdHJ5IHsK
KyAgICBsYXRjaEZ1bmN0aW9uUmVzdWx0ID0gdGhpcy5sYXRjaEZ1bmN0aW9uLmFwcGx5KHRoaXMu
c3BlYyk7CisgIH0gY2F0Y2ggKGUpIHsKKyAgICB0aGlzLnNwZWMuZmFpbChlKTsKKyAgICBvbkNv
bXBsZXRlKCk7CisgICAgcmV0dXJuOworICB9CisKKyAgaWYgKGxhdGNoRnVuY3Rpb25SZXN1bHQp
IHsKKyAgICBvbkNvbXBsZXRlKCk7CisgIH0gZWxzZSBpZiAodGhpcy50b3RhbFRpbWVTcGVudFdh
aXRpbmdGb3JMYXRjaCA+PSB0aGlzLnRpbWVvdXQpIHsKKyAgICB2YXIgbWVzc2FnZSA9ICd0aW1l
ZCBvdXQgYWZ0ZXIgJyArIHRoaXMudGltZW91dCArICcgbXNlYyB3YWl0aW5nIGZvciAnICsgKHRo
aXMubWVzc2FnZSB8fCAnc29tZXRoaW5nIHRvIGhhcHBlbicpOworICAgIHRoaXMuc3BlYy5mYWls
KHsKKyAgICAgIG5hbWU6ICd0aW1lb3V0JywKKyAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UKKyAgICB9
KTsKKworICAgIHRoaXMuYWJvcnQgPSB0cnVlOworICAgIG9uQ29tcGxldGUoKTsKKyAgfSBlbHNl
IHsKKyAgICB0aGlzLnRvdGFsVGltZVNwZW50V2FpdGluZ0ZvckxhdGNoICs9IGphc21pbmUuV2Fp
dHNGb3JCbG9jay5USU1FT1VUX0lOQ1JFTUVOVDsKKyAgICB2YXIgc2VsZiA9IHRoaXM7CisgICAg
dGhpcy5lbnYuc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgIHNlbGYuZXhlY3V0ZShvbkNv
bXBsZXRlKTsKKyAgICB9LCBqYXNtaW5lLldhaXRzRm9yQmxvY2suVElNRU9VVF9JTkNSRU1FTlQp
OworICB9Cit9OworLy8gTW9jayBzZXRUaW1lb3V0LCBjbGVhclRpbWVvdXQKKy8vIENvbnRyaWJ1
dGVkIGJ5IFBpdm90YWwgQ29tcHV0ZXIgU3lzdGVtcywgd3d3LnBpdm90YWxzZi5jb20KKworamFz
bWluZS5GYWtlVGltZXIgPSBmdW5jdGlvbigpIHsKKyAgdGhpcy5yZXNldCgpOworCisgIHZhciBz
ZWxmID0gdGhpczsKKyAgc2VsZi5zZXRUaW1lb3V0ID0gZnVuY3Rpb24oZnVuY1RvQ2FsbCwgbWls
bGlzKSB7CisgICAgc2VsZi50aW1lb3V0c01hZGUrKzsKKyAgICBzZWxmLnNjaGVkdWxlRnVuY3Rp
b24oc2VsZi50aW1lb3V0c01hZGUsIGZ1bmNUb0NhbGwsIG1pbGxpcywgZmFsc2UpOworICAgIHJl
dHVybiBzZWxmLnRpbWVvdXRzTWFkZTsKKyAgfTsKKworICBzZWxmLnNldEludGVydmFsID0gZnVu
Y3Rpb24oZnVuY1RvQ2FsbCwgbWlsbGlzKSB7CisgICAgc2VsZi50aW1lb3V0c01hZGUrKzsKKyAg
ICBzZWxmLnNjaGVkdWxlRnVuY3Rpb24oc2VsZi50aW1lb3V0c01hZGUsIGZ1bmNUb0NhbGwsIG1p
bGxpcywgdHJ1ZSk7CisgICAgcmV0dXJuIHNlbGYudGltZW91dHNNYWRlOworICB9OworCisgIHNl
bGYuY2xlYXJUaW1lb3V0ID0gZnVuY3Rpb24odGltZW91dEtleSkgeworICAgIHNlbGYuc2NoZWR1
bGVkRnVuY3Rpb25zW3RpbWVvdXRLZXldID0gamFzbWluZS51bmRlZmluZWQ7CisgIH07CisKKyAg
c2VsZi5jbGVhckludGVydmFsID0gZnVuY3Rpb24odGltZW91dEtleSkgeworICAgIHNlbGYuc2No
ZWR1bGVkRnVuY3Rpb25zW3RpbWVvdXRLZXldID0gamFzbWluZS51bmRlZmluZWQ7CisgIH07CisK
K307CisKK2phc21pbmUuRmFrZVRpbWVyLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uKCkgewor
ICB0aGlzLnRpbWVvdXRzTWFkZSA9IDA7CisgIHRoaXMuc2NoZWR1bGVkRnVuY3Rpb25zID0ge307
CisgIHRoaXMubm93TWlsbGlzID0gMDsKK307CisKK2phc21pbmUuRmFrZVRpbWVyLnByb3RvdHlw
ZS50aWNrID0gZnVuY3Rpb24obWlsbGlzKSB7CisgIHZhciBvbGRNaWxsaXMgPSB0aGlzLm5vd01p
bGxpczsKKyAgdmFyIG5ld01pbGxpcyA9IG9sZE1pbGxpcyArIG1pbGxpczsKKyAgdGhpcy5ydW5G
dW5jdGlvbnNXaXRoaW5SYW5nZShvbGRNaWxsaXMsIG5ld01pbGxpcyk7CisgIHRoaXMubm93TWls
bGlzID0gbmV3TWlsbGlzOworfTsKKworamFzbWluZS5GYWtlVGltZXIucHJvdG90eXBlLnJ1bkZ1
bmN0aW9uc1dpdGhpblJhbmdlID0gZnVuY3Rpb24ob2xkTWlsbGlzLCBub3dNaWxsaXMpIHsKKyAg
dmFyIHNjaGVkdWxlZEZ1bmM7CisgIHZhciBmdW5jc1RvUnVuID0gW107CisgIGZvciAodmFyIHRp
bWVvdXRLZXkgaW4gdGhpcy5zY2hlZHVsZWRGdW5jdGlvbnMpIHsKKyAgICBzY2hlZHVsZWRGdW5j
ID0gdGhpcy5zY2hlZHVsZWRGdW5jdGlvbnNbdGltZW91dEtleV07CisgICAgaWYgKHNjaGVkdWxl
ZEZ1bmMgIT0gamFzbWluZS51bmRlZmluZWQgJiYKKyAgICAgICAgc2NoZWR1bGVkRnVuYy5ydW5B
dE1pbGxpcyA+PSBvbGRNaWxsaXMgJiYKKyAgICAgICAgc2NoZWR1bGVkRnVuYy5ydW5BdE1pbGxp
cyA8PSBub3dNaWxsaXMpIHsKKyAgICAgIGZ1bmNzVG9SdW4ucHVzaChzY2hlZHVsZWRGdW5jKTsK
KyAgICAgIHRoaXMuc2NoZWR1bGVkRnVuY3Rpb25zW3RpbWVvdXRLZXldID0gamFzbWluZS51bmRl
ZmluZWQ7CisgICAgfQorICB9CisKKyAgaWYgKGZ1bmNzVG9SdW4ubGVuZ3RoID4gMCkgeworICAg
IGZ1bmNzVG9SdW4uc29ydChmdW5jdGlvbihhLCBiKSB7CisgICAgICByZXR1cm4gYS5ydW5BdE1p
bGxpcyAtIGIucnVuQXRNaWxsaXM7CisgICAgfSk7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBm
dW5jc1RvUnVuLmxlbmd0aDsgKytpKSB7CisgICAgICB0cnkgeworICAgICAgICB2YXIgZnVuY1Rv
UnVuID0gZnVuY3NUb1J1bltpXTsKKyAgICAgICAgdGhpcy5ub3dNaWxsaXMgPSBmdW5jVG9SdW4u
cnVuQXRNaWxsaXM7CisgICAgICAgIGZ1bmNUb1J1bi5mdW5jVG9DYWxsKCk7CisgICAgICAgIGlm
IChmdW5jVG9SdW4ucmVjdXJyaW5nKSB7CisgICAgICAgICAgdGhpcy5zY2hlZHVsZUZ1bmN0aW9u
KGZ1bmNUb1J1bi50aW1lb3V0S2V5LAorICAgICAgICAgICAgICBmdW5jVG9SdW4uZnVuY1RvQ2Fs
bCwKKyAgICAgICAgICAgICAgZnVuY1RvUnVuLm1pbGxpcywKKyAgICAgICAgICAgICAgdHJ1ZSk7
CisgICAgICAgIH0KKyAgICAgIH0gY2F0Y2goZSkgeworICAgICAgfQorICAgIH0KKyAgICB0aGlz
LnJ1bkZ1bmN0aW9uc1dpdGhpblJhbmdlKG9sZE1pbGxpcywgbm93TWlsbGlzKTsKKyAgfQorfTsK
KworamFzbWluZS5GYWtlVGltZXIucHJvdG90eXBlLnNjaGVkdWxlRnVuY3Rpb24gPSBmdW5jdGlv
bih0aW1lb3V0S2V5LCBmdW5jVG9DYWxsLCBtaWxsaXMsIHJlY3VycmluZykgeworICB0aGlzLnNj
aGVkdWxlZEZ1bmN0aW9uc1t0aW1lb3V0S2V5XSA9IHsKKyAgICBydW5BdE1pbGxpczogdGhpcy5u
b3dNaWxsaXMgKyBtaWxsaXMsCisgICAgZnVuY1RvQ2FsbDogZnVuY1RvQ2FsbCwKKyAgICByZWN1
cnJpbmc6IHJlY3VycmluZywKKyAgICB0aW1lb3V0S2V5OiB0aW1lb3V0S2V5LAorICAgIG1pbGxp
czogbWlsbGlzCisgIH07Cit9OworCisvKioKKyAqIEBuYW1lc3BhY2UKKyAqLworamFzbWluZS5D
bG9jayA9IHsKKyAgZGVmYXVsdEZha2VUaW1lcjogbmV3IGphc21pbmUuRmFrZVRpbWVyKCksCisK
KyAgcmVzZXQ6IGZ1bmN0aW9uKCkgeworICAgIGphc21pbmUuQ2xvY2suYXNzZXJ0SW5zdGFsbGVk
KCk7CisgICAgamFzbWluZS5DbG9jay5kZWZhdWx0RmFrZVRpbWVyLnJlc2V0KCk7CisgIH0sCisK
KyAgdGljazogZnVuY3Rpb24obWlsbGlzKSB7CisgICAgamFzbWluZS5DbG9jay5hc3NlcnRJbnN0
YWxsZWQoKTsKKyAgICBqYXNtaW5lLkNsb2NrLmRlZmF1bHRGYWtlVGltZXIudGljayhtaWxsaXMp
OworICB9LAorCisgIHJ1bkZ1bmN0aW9uc1dpdGhpblJhbmdlOiBmdW5jdGlvbihvbGRNaWxsaXMs
IG5vd01pbGxpcykgeworICAgIGphc21pbmUuQ2xvY2suZGVmYXVsdEZha2VUaW1lci5ydW5GdW5j
dGlvbnNXaXRoaW5SYW5nZShvbGRNaWxsaXMsIG5vd01pbGxpcyk7CisgIH0sCisKKyAgc2NoZWR1
bGVGdW5jdGlvbjogZnVuY3Rpb24odGltZW91dEtleSwgZnVuY1RvQ2FsbCwgbWlsbGlzLCByZWN1
cnJpbmcpIHsKKyAgICBqYXNtaW5lLkNsb2NrLmRlZmF1bHRGYWtlVGltZXIuc2NoZWR1bGVGdW5j
dGlvbih0aW1lb3V0S2V5LCBmdW5jVG9DYWxsLCBtaWxsaXMsIHJlY3VycmluZyk7CisgIH0sCisK
KyAgdXNlTW9jazogZnVuY3Rpb24oKSB7CisgICAgaWYgKCFqYXNtaW5lLkNsb2NrLmlzSW5zdGFs
bGVkKCkpIHsKKyAgICAgIHZhciBzcGVjID0gamFzbWluZS5nZXRFbnYoKS5jdXJyZW50U3BlYzsK
KyAgICAgIHNwZWMuYWZ0ZXIoamFzbWluZS5DbG9jay51bmluc3RhbGxNb2NrKTsKKworICAgICAg
amFzbWluZS5DbG9jay5pbnN0YWxsTW9jaygpOworICAgIH0KKyAgfSwKKworICBpbnN0YWxsTW9j
azogZnVuY3Rpb24oKSB7CisgICAgamFzbWluZS5DbG9jay5pbnN0YWxsZWQgPSBqYXNtaW5lLkNs
b2NrLmRlZmF1bHRGYWtlVGltZXI7CisgIH0sCisKKyAgdW5pbnN0YWxsTW9jazogZnVuY3Rpb24o
KSB7CisgICAgamFzbWluZS5DbG9jay5hc3NlcnRJbnN0YWxsZWQoKTsKKyAgICBqYXNtaW5lLkNs
b2NrLmluc3RhbGxlZCA9IGphc21pbmUuQ2xvY2sucmVhbDsKKyAgfSwKKworICByZWFsOiB7Cisg
ICAgc2V0VGltZW91dDogamFzbWluZS5nZXRHbG9iYWwoKS5zZXRUaW1lb3V0LAorICAgIGNsZWFy
VGltZW91dDogamFzbWluZS5nZXRHbG9iYWwoKS5jbGVhclRpbWVvdXQsCisgICAgc2V0SW50ZXJ2
YWw6IGphc21pbmUuZ2V0R2xvYmFsKCkuc2V0SW50ZXJ2YWwsCisgICAgY2xlYXJJbnRlcnZhbDog
amFzbWluZS5nZXRHbG9iYWwoKS5jbGVhckludGVydmFsCisgIH0sCisKKyAgYXNzZXJ0SW5zdGFs
bGVkOiBmdW5jdGlvbigpIHsKKyAgICBpZiAoIWphc21pbmUuQ2xvY2suaXNJbnN0YWxsZWQoKSkg
eworICAgICAgdGhyb3cgbmV3IEVycm9yKCJNb2NrIGNsb2NrIGlzIG5vdCBpbnN0YWxsZWQsIHVz
ZSBqYXNtaW5lLkNsb2NrLnVzZU1vY2soKSIpOworICAgIH0KKyAgfSwKKworICBpc0luc3RhbGxl
ZDogZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIGphc21pbmUuQ2xvY2suaW5zdGFsbGVkID09IGph
c21pbmUuQ2xvY2suZGVmYXVsdEZha2VUaW1lcjsKKyAgfSwKKworICBpbnN0YWxsZWQ6IG51bGwK
K307CitqYXNtaW5lLkNsb2NrLmluc3RhbGxlZCA9IGphc21pbmUuQ2xvY2sucmVhbDsKKworLy9l
bHNlIGZvciBJRSBzdXBwb3J0CitqYXNtaW5lLmdldEdsb2JhbCgpLnNldFRpbWVvdXQgPSBmdW5j
dGlvbihmdW5jVG9DYWxsLCBtaWxsaXMpIHsKKyAgaWYgKGphc21pbmUuQ2xvY2suaW5zdGFsbGVk
LnNldFRpbWVvdXQuYXBwbHkpIHsKKyAgICByZXR1cm4gamFzbWluZS5DbG9jay5pbnN0YWxsZWQu
c2V0VGltZW91dC5hcHBseSh0aGlzLCBhcmd1bWVudHMpOworICB9IGVsc2UgeworICAgIHJldHVy
biBqYXNtaW5lLkNsb2NrLmluc3RhbGxlZC5zZXRUaW1lb3V0KGZ1bmNUb0NhbGwsIG1pbGxpcyk7
CisgIH0KK307CisKK2phc21pbmUuZ2V0R2xvYmFsKCkuc2V0SW50ZXJ2YWwgPSBmdW5jdGlvbihm
dW5jVG9DYWxsLCBtaWxsaXMpIHsKKyAgaWYgKGphc21pbmUuQ2xvY2suaW5zdGFsbGVkLnNldElu
dGVydmFsLmFwcGx5KSB7CisgICAgcmV0dXJuIGphc21pbmUuQ2xvY2suaW5zdGFsbGVkLnNldElu
dGVydmFsLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIGph
c21pbmUuQ2xvY2suaW5zdGFsbGVkLnNldEludGVydmFsKGZ1bmNUb0NhbGwsIG1pbGxpcyk7Cisg
IH0KK307CisKK2phc21pbmUuZ2V0R2xvYmFsKCkuY2xlYXJUaW1lb3V0ID0gZnVuY3Rpb24odGlt
ZW91dEtleSkgeworICBpZiAoamFzbWluZS5DbG9jay5pbnN0YWxsZWQuY2xlYXJUaW1lb3V0LmFw
cGx5KSB7CisgICAgcmV0dXJuIGphc21pbmUuQ2xvY2suaW5zdGFsbGVkLmNsZWFyVGltZW91dC5h
cHBseSh0aGlzLCBhcmd1bWVudHMpOworICB9IGVsc2UgeworICAgIHJldHVybiBqYXNtaW5lLkNs
b2NrLmluc3RhbGxlZC5jbGVhclRpbWVvdXQodGltZW91dEtleSk7CisgIH0KK307CisKK2phc21p
bmUuZ2V0R2xvYmFsKCkuY2xlYXJJbnRlcnZhbCA9IGZ1bmN0aW9uKHRpbWVvdXRLZXkpIHsKKyAg
aWYgKGphc21pbmUuQ2xvY2suaW5zdGFsbGVkLmNsZWFyVGltZW91dC5hcHBseSkgeworICAgIHJl
dHVybiBqYXNtaW5lLkNsb2NrLmluc3RhbGxlZC5jbGVhckludGVydmFsLmFwcGx5KHRoaXMsIGFy
Z3VtZW50cyk7CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIGphc21pbmUuQ2xvY2suaW5zdGFsbGVk
LmNsZWFySW50ZXJ2YWwodGltZW91dEtleSk7CisgIH0KK307CisKK2phc21pbmUudmVyc2lvbl89
IHsKKyAgIm1ham9yIjogMSwKKyAgIm1pbm9yIjogMSwKKyAgImJ1aWxkIjogMCwKKyAgInJldmlz
aW9uIjogMTMwODYxODk0OCwKKyAgInJlbGVhc2VfY2FuZGlkYXRlIjogMQorfTsKSW5kZXg6IFBl
cmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9u
ZW50cy9lczUtc2hpbS90ZXN0cy9saWIvanNvbjIuanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFu
Y2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2Vz
NS1zaGltL3Rlc3RzL2xpYi9qc29uMi5qcwkocmV2aXNpb24gMCkKKysrIFBlcmZvcm1hbmNlVGVz
dHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9lczUtc2hp
bS90ZXN0cy9saWIvanNvbjIuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NzggQEAKKy8q
CisgICAgaHR0cDovL3d3dy5KU09OLm9yZy9qc29uMi5qcworICAgIDIwMDktMDgtMTcKKworICAg
IFB1YmxpYyBEb21haW4uCisKKyAgICBOTyBXQVJSQU5UWSBFWFBSRVNTRUQgT1IgSU1QTElFRC4g
VVNFIEFUIFlPVVIgT1dOIFJJU0suCisKKyAgICBTZWUgaHR0cDovL3d3dy5KU09OLm9yZy9qcy5o
dG1sCisKKyAgICBUaGlzIGZpbGUgY3JlYXRlcyBhIGdsb2JhbCBKU09OIG9iamVjdCBjb250YWlu
aW5nIHR3byBtZXRob2RzOiBzdHJpbmdpZnkKKyAgICBhbmQgcGFyc2UuCisKKyAgICAgICAgSlNP
Ti5zdHJpbmdpZnkodmFsdWUsIHJlcGxhY2VyLCBzcGFjZSkKKyAgICAgICAgICAgIHZhbHVlICAg
ICAgIGFueSBKYXZhU2NyaXB0IHZhbHVlLCB1c3VhbGx5IGFuIG9iamVjdCBvciBhcnJheS4KKwor
ICAgICAgICAgICAgcmVwbGFjZXIgICAgYW4gb3B0aW9uYWwgcGFyYW1ldGVyIHRoYXQgZGV0ZXJt
aW5lcyBob3cgb2JqZWN0CisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgYXJlIHN0cmlu
Z2lmaWVkIGZvciBvYmplY3RzLiBJdCBjYW4gYmUgYQorICAgICAgICAgICAgICAgICAgICAgICAg
ZnVuY3Rpb24gb3IgYW4gYXJyYXkgb2Ygc3RyaW5ncy4KKworICAgICAgICAgICAgc3BhY2UgICAg
ICAgYW4gb3B0aW9uYWwgcGFyYW1ldGVyIHRoYXQgc3BlY2lmaWVzIHRoZSBpbmRlbnRhdGlvbgor
ICAgICAgICAgICAgICAgICAgICAgICAgb2YgbmVzdGVkIHN0cnVjdHVyZXMuIElmIGl0IGlzIG9t
aXR0ZWQsIHRoZSB0ZXh0IHdpbGwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlIHBhY2tlZCB3
aXRob3V0IGV4dHJhIHdoaXRlc3BhY2UuIElmIGl0IGlzIGEgbnVtYmVyLAorICAgICAgICAgICAg
ICAgICAgICAgICAgaXQgd2lsbCBzcGVjaWZ5IHRoZSBudW1iZXIgb2Ygc3BhY2VzIHRvIGluZGVu
dCBhdCBlYWNoCisgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbC4gSWYgaXQgaXMgYSBzdHJp
bmcgKHN1Y2ggYXMgJ1x0JyBvciAnJm5ic3A7JyksCisgICAgICAgICAgICAgICAgICAgICAgICBp
dCBjb250YWlucyB0aGUgY2hhcmFjdGVycyB1c2VkIHRvIGluZGVudCBhdCBlYWNoIGxldmVsLgor
CisgICAgICAgICAgICBUaGlzIG1ldGhvZCBwcm9kdWNlcyBhIEpTT04gdGV4dCBmcm9tIGEgSmF2
YVNjcmlwdCB2YWx1ZS4KKworICAgICAgICAgICAgV2hlbiBhbiBvYmplY3QgdmFsdWUgaXMgZm91
bmQsIGlmIHRoZSBvYmplY3QgY29udGFpbnMgYSB0b0pTT04KKyAgICAgICAgICAgIG1ldGhvZCwg
aXRzIHRvSlNPTiBtZXRob2Qgd2lsbCBiZSBjYWxsZWQgYW5kIHRoZSByZXN1bHQgd2lsbCBiZQor
ICAgICAgICAgICAgc3RyaW5naWZpZWQuIEEgdG9KU09OIG1ldGhvZCBkb2VzIG5vdCBzZXJpYWxp
emU6IGl0IHJldHVybnMgdGhlCisgICAgICAgICAgICB2YWx1ZSByZXByZXNlbnRlZCBieSB0aGUg
bmFtZS92YWx1ZSBwYWlyIHRoYXQgc2hvdWxkIGJlIHNlcmlhbGl6ZWQsCisgICAgICAgICAgICBv
ciB1bmRlZmluZWQgaWYgbm90aGluZyBzaG91bGQgYmUgc2VyaWFsaXplZC4gVGhlIHRvSlNPTiBt
ZXRob2QKKyAgICAgICAgICAgIHdpbGwgYmUgcGFzc2VkIHRoZSBrZXkgYXNzb2NpYXRlZCB3aXRo
IHRoZSB2YWx1ZSwgYW5kIHRoaXMgd2lsbCBiZQorICAgICAgICAgICAgYm91bmQgdG8gdGhlIHZh
bHVlCisKKyAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGlzIHdvdWxkIHNlcmlhbGl6ZSBEYXRl
cyBhcyBJU08gc3RyaW5ncy4KKworICAgICAgICAgICAgICAgIERhdGUucHJvdG90eXBlLnRvSlNP
TiA9IGZ1bmN0aW9uIChrZXkpIHsKKyAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZihuKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBGb3JtYXQgaW50ZWdlcnMgdG8gaGF2ZSBhdCBs
ZWFzdCB0d28gZGlnaXRzLgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG4gPCAxMCA/
ICcwJyArIG4gOiBuOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuZ2V0VVRDRnVsbFllYXIoKSAgICsgJy0nICsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICBmKHRoaXMuZ2V0VVRDTW9udGgoKSArIDEpICsgJy0nICsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICBmKHRoaXMuZ2V0VVRDRGF0ZSgpKSAgICAgICsgJ1QnICsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICBmKHRoaXMuZ2V0VVRDSG91cnMoKSkgICAgICsgJzonICsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICBmKHRoaXMuZ2V0VVRDTWludXRlcygpKSAgICsgJzonICsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICBmKHRoaXMuZ2V0VVRDU2Vjb25kcygpKSAgICsgJ1onOwor
ICAgICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIFlvdSBjYW4gcHJvdmlkZSBhbiBvcHRp
b25hbCByZXBsYWNlciBtZXRob2QuIEl0IHdpbGwgYmUgcGFzc2VkIHRoZQorICAgICAgICAgICAg
a2V5IGFuZCB2YWx1ZSBvZiBlYWNoIG1lbWJlciwgd2l0aCB0aGlzIGJvdW5kIHRvIHRoZSBjb250
YWluaW5nCisgICAgICAgICAgICBvYmplY3QuIFRoZSB2YWx1ZSB0aGF0IGlzIHJldHVybmVkIGZy
b20geW91ciBtZXRob2Qgd2lsbCBiZQorICAgICAgICAgICAgc2VyaWFsaXplZC4gSWYgeW91ciBt
ZXRob2QgcmV0dXJucyB1bmRlZmluZWQsIHRoZW4gdGhlIG1lbWJlciB3aWxsCisgICAgICAgICAg
ICBiZSBleGNsdWRlZCBmcm9tIHRoZSBzZXJpYWxpemF0aW9uLgorCisgICAgICAgICAgICBJZiB0
aGUgcmVwbGFjZXIgcGFyYW1ldGVyIGlzIGFuIGFycmF5IG9mIHN0cmluZ3MsIHRoZW4gaXQgd2ls
bCBiZQorICAgICAgICAgICAgdXNlZCB0byBzZWxlY3QgdGhlIG1lbWJlcnMgdG8gYmUgc2VyaWFs
aXplZC4gSXQgZmlsdGVycyB0aGUgcmVzdWx0cworICAgICAgICAgICAgc3VjaCB0aGF0IG9ubHkg
bWVtYmVycyB3aXRoIGtleXMgbGlzdGVkIGluIHRoZSByZXBsYWNlciBhcnJheSBhcmUKKyAgICAg
ICAgICAgIHN0cmluZ2lmaWVkLgorCisgICAgICAgICAgICBWYWx1ZXMgdGhhdCBkbyBub3QgaGF2
ZSBKU09OIHJlcHJlc2VudGF0aW9ucywgc3VjaCBhcyB1bmRlZmluZWQgb3IKKyAgICAgICAgICAg
IGZ1bmN0aW9ucywgd2lsbCBub3QgYmUgc2VyaWFsaXplZC4gU3VjaCB2YWx1ZXMgaW4gb2JqZWN0
cyB3aWxsIGJlCisgICAgICAgICAgICBkcm9wcGVkOyBpbiBhcnJheXMgdGhleSB3aWxsIGJlIHJl
cGxhY2VkIHdpdGggbnVsbC4gWW91IGNhbiB1c2UKKyAgICAgICAgICAgIGEgcmVwbGFjZXIgZnVu
Y3Rpb24gdG8gcmVwbGFjZSB0aG9zZSB3aXRoIEpTT04gdmFsdWVzLgorICAgICAgICAgICAgSlNP
Ti5zdHJpbmdpZnkodW5kZWZpbmVkKSByZXR1cm5zIHVuZGVmaW5lZC4KKworICAgICAgICAgICAg
VGhlIG9wdGlvbmFsIHNwYWNlIHBhcmFtZXRlciBwcm9kdWNlcyBhIHN0cmluZ2lmaWNhdGlvbiBv
ZiB0aGUKKyAgICAgICAgICAgIHZhbHVlIHRoYXQgaXMgZmlsbGVkIHdpdGggbGluZSBicmVha3Mg
YW5kIGluZGVudGF0aW9uIHRvIG1ha2UgaXQKKyAgICAgICAgICAgIGVhc2llciB0byByZWFkLgor
CisgICAgICAgICAgICBJZiB0aGUgc3BhY2UgcGFyYW1ldGVyIGlzIGEgbm9uLWVtcHR5IHN0cmlu
ZywgdGhlbiB0aGF0IHN0cmluZyB3aWxsCisgICAgICAgICAgICBiZSB1c2VkIGZvciBpbmRlbnRh
dGlvbi4gSWYgdGhlIHNwYWNlIHBhcmFtZXRlciBpcyBhIG51bWJlciwgdGhlbgorICAgICAgICAg
ICAgdGhlIGluZGVudGF0aW9uIHdpbGwgYmUgdGhhdCBtYW55IHNwYWNlcy4KKworICAgICAgICAg
ICAgRXhhbXBsZToKKworICAgICAgICAgICAgdGV4dCA9IEpTT04uc3RyaW5naWZ5KFsnZScsIHtw
bHVyaWJ1czogJ3VudW0nfV0pOworICAgICAgICAgICAgLy8gdGV4dCBpcyAnWyJlIix7InBsdXJp
YnVzIjoidW51bSJ9XScKKworCisgICAgICAgICAgICB0ZXh0ID0gSlNPTi5zdHJpbmdpZnkoWydl
Jywge3BsdXJpYnVzOiAndW51bSd9XSwgbnVsbCwgJ1x0Jyk7CisgICAgICAgICAgICAvLyB0ZXh0
IGlzICdbXG5cdCJlIixcblx0e1xuXHRcdCJwbHVyaWJ1cyI6ICJ1bnVtIlxuXHR9XG5dJworCisg
ICAgICAgICAgICB0ZXh0ID0gSlNPTi5zdHJpbmdpZnkoW25ldyBEYXRlKCldLCBmdW5jdGlvbiAo
a2V5LCB2YWx1ZSkgeworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzW2tleV0gaW5zdGFuY2Vv
ZiBEYXRlID8KKyAgICAgICAgICAgICAgICAgICAgJ0RhdGUoJyArIHRoaXNba2V5XSArICcpJyA6
IHZhbHVlOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAvLyB0ZXh0IGlzICdbIkRhdGUo
LS0tY3VycmVudCB0aW1lLS0tKSJdJworCisKKyAgICAgICAgSlNPTi5wYXJzZSh0ZXh0LCByZXZp
dmVyKQorICAgICAgICAgICAgVGhpcyBtZXRob2QgcGFyc2VzIGEgSlNPTiB0ZXh0IHRvIHByb2R1
Y2UgYW4gb2JqZWN0IG9yIGFycmF5LgorICAgICAgICAgICAgSXQgY2FuIHRocm93IGEgU3ludGF4
RXJyb3IgZXhjZXB0aW9uLgorCisgICAgICAgICAgICBUaGUgb3B0aW9uYWwgcmV2aXZlciBwYXJh
bWV0ZXIgaXMgYSBmdW5jdGlvbiB0aGF0IGNhbiBmaWx0ZXIgYW5kCisgICAgICAgICAgICB0cmFu
c2Zvcm0gdGhlIHJlc3VsdHMuIEl0IHJlY2VpdmVzIGVhY2ggb2YgdGhlIGtleXMgYW5kIHZhbHVl
cywKKyAgICAgICAgICAgIGFuZCBpdHMgcmV0dXJuIHZhbHVlIGlzIHVzZWQgaW5zdGVhZCBvZiB0
aGUgb3JpZ2luYWwgdmFsdWUuCisgICAgICAgICAgICBJZiBpdCByZXR1cm5zIHdoYXQgaXQgcmVj
ZWl2ZWQsIHRoZW4gdGhlIHN0cnVjdHVyZSBpcyBub3QgbW9kaWZpZWQuCisgICAgICAgICAgICBJ
ZiBpdCByZXR1cm5zIHVuZGVmaW5lZCB0aGVuIHRoZSBtZW1iZXIgaXMgZGVsZXRlZC4KKworICAg
ICAgICAgICAgRXhhbXBsZToKKworICAgICAgICAgICAgLy8gUGFyc2UgdGhlIHRleHQuIFZhbHVl
cyB0aGF0IGxvb2sgbGlrZSBJU08gZGF0ZSBzdHJpbmdzIHdpbGwKKyAgICAgICAgICAgIC8vIGJl
IGNvbnZlcnRlZCB0byBEYXRlIG9iamVjdHMuCisKKyAgICAgICAgICAgIG15RGF0YSA9IEpTT04u
cGFyc2UodGV4dCwgZnVuY3Rpb24gKGtleSwgdmFsdWUpIHsKKyAgICAgICAgICAgICAgICB2YXIg
YTsKKyAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykgeworICAg
ICAgICAgICAgICAgICAgICBhID0KKy9eKFxkezR9KS0oXGR7Mn0pLShcZHsyfSlUKFxkezJ9KToo
XGR7Mn0pOihcZHsyfSg/OlwuXGQqKT8pWiQvLmV4ZWModmFsdWUpOworICAgICAgICAgICAgICAg
ICAgICBpZiAoYSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKERh
dGUuVVRDKCthWzFdLCArYVsyXSAtIDEsICthWzNdLCArYVs0XSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICArYVs1XSwgK2FbNl0pKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgICAgICAgICB9
KTsKKworICAgICAgICAgICAgbXlEYXRhID0gSlNPTi5wYXJzZSgnWyJEYXRlKDA5LzA5LzIwMDEp
Il0nLCBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkgeworICAgICAgICAgICAgICAgIHZhciBkOworICAg
ICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmCisgICAgICAgICAg
ICAgICAgICAgICAgICB2YWx1ZS5zbGljZSgwLCA1KSA9PT0gJ0RhdGUoJyAmJgorICAgICAgICAg
ICAgICAgICAgICAgICAgdmFsdWUuc2xpY2UoLTEpID09PSAnKScpIHsKKyAgICAgICAgICAgICAg
ICAgICAgZCA9IG5ldyBEYXRlKHZhbHVlLnNsaWNlKDUsIC0xKSk7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZDsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4g
dmFsdWU7CisgICAgICAgICAgICB9KTsKKworCisgICAgVGhpcyBpcyBhIHJlZmVyZW5jZSBpbXBs
ZW1lbnRhdGlvbi4gWW91IGFyZSBmcmVlIHRvIGNvcHksIG1vZGlmeSwgb3IKKyAgICByZWRpc3Ry
aWJ1dGUuCisKKyAgICBUaGlzIGNvZGUgc2hvdWxkIGJlIG1pbmlmaWVkIGJlZm9yZSBkZXBsb3lt
ZW50LgorICAgIFNlZSBodHRwOi8vamF2YXNjcmlwdC5jcm9ja2ZvcmQuY29tL2pzbWluLmh0bWwK
KworICAgIFVTRSBZT1VSIE9XTiBDT1BZLiBJVCBJUyBFWFRSRU1FTFkgVU5XSVNFIFRPIExPQUQg
Q09ERSBGUk9NIFNFUlZFUlMgWU9VIERPCisgICAgTk9UIENPTlRST0wuCisqLworCisvKmpzbGlu
dCBldmlsOiB0cnVlICovCisKKy8qbWVtYmVycyAiIiwgIlxiIiwgIlx0IiwgIlxuIiwgIlxmIiwg
IlxyIiwgIlwiIiwgSlNPTiwgIlxcIiwgYXBwbHksCisgICAgY2FsbCwgY2hhckNvZGVBdCwgZ2V0
VVRDRGF0ZSwgZ2V0VVRDRnVsbFllYXIsIGdldFVUQ0hvdXJzLAorICAgIGdldFVUQ01pbnV0ZXMs
IGdldFVUQ01vbnRoLCBnZXRVVENTZWNvbmRzLCBoYXNPd25Qcm9wZXJ0eSwgam9pbiwKKyAgICBs
YXN0SW5kZXgsIGxlbmd0aCwgcGFyc2UsIHByb3RvdHlwZSwgcHVzaCwgcmVwbGFjZSwgc2xpY2Us
IHN0cmluZ2lmeSwKKyAgICB0ZXN0LCB0b0pTT04sIHRvU3RyaW5nLCB2YWx1ZU9mCisqLworCisi
dXNlIHN0cmljdCI7CisKKy8vIENyZWF0ZSBhIEpTT04gb2JqZWN0IG9ubHkgaWYgb25lIGRvZXMg
bm90IGFscmVhZHkgZXhpc3QuIFdlIGNyZWF0ZSB0aGUKKy8vIG1ldGhvZHMgaW4gYSBjbG9zdXJl
IHRvIGF2b2lkIGNyZWF0aW5nIGdsb2JhbCB2YXJpYWJsZXMuCisKK2lmICghdGhpcy5KU09OKSB7
CisgICAgdGhpcy5KU09OID0ge307Cit9CisKKyhmdW5jdGlvbiAoKSB7CisKKyAgICBmdW5jdGlv
biBmKG4pIHsKKyAgICAgICAgLy8gRm9ybWF0IGludGVnZXJzIHRvIGhhdmUgYXQgbGVhc3QgdHdv
IGRpZ2l0cy4KKyAgICAgICAgcmV0dXJuIG4gPCAxMCA/ICcwJyArIG4gOiBuOworICAgIH0KKwor
ICAgIGlmICh0eXBlb2YgRGF0ZS5wcm90b3R5cGUudG9KU09OICE9PSAnZnVuY3Rpb24nKSB7CisK
KyAgICAgICAgRGF0ZS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKGtleSkgeworCisgICAg
ICAgICAgICByZXR1cm4gaXNGaW5pdGUodGhpcy52YWx1ZU9mKCkpID8KKyAgICAgICAgICAgICAg
ICAgICB0aGlzLmdldFVUQ0Z1bGxZZWFyKCkgICArICctJyArCisgICAgICAgICAgICAgICAgIGYo
dGhpcy5nZXRVVENNb250aCgpICsgMSkgKyAnLScgKworICAgICAgICAgICAgICAgICBmKHRoaXMu
Z2V0VVRDRGF0ZSgpKSAgICAgICsgJ1QnICsKKyAgICAgICAgICAgICAgICAgZih0aGlzLmdldFVU
Q0hvdXJzKCkpICAgICArICc6JyArCisgICAgICAgICAgICAgICAgIGYodGhpcy5nZXRVVENNaW51
dGVzKCkpICAgKyAnOicgKworICAgICAgICAgICAgICAgICBmKHRoaXMuZ2V0VVRDU2Vjb25kcygp
KSAgICsgJ1onIDogbnVsbDsKKyAgICAgICAgfTsKKworICAgICAgICBTdHJpbmcucHJvdG90eXBl
LnRvSlNPTiA9CisgICAgICAgIE51bWJlci5wcm90b3R5cGUudG9KU09OID0KKyAgICAgICAgQm9v
bGVhbi5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKGtleSkgeworICAgICAgICAgICAgcmV0
dXJuIHRoaXMudmFsdWVPZigpOworICAgICAgICB9OworICAgIH0KKworICAgIHZhciBjeCA9IC9b
XHUwMDAwXHUwMGFkXHUwNjAwLVx1MDYwNFx1MDcwZlx1MTdiNFx1MTdiNVx1MjAwYy1cdTIwMGZc
dTIwMjgtXHUyMDJmXHUyMDYwLVx1MjA2Zlx1ZmVmZlx1ZmZmMC1cdWZmZmZdL2csCisgICAgICAg
IGVzY2FwYWJsZSA9IC9bXFxcIlx4MDAtXHgxZlx4N2YtXHg5Zlx1MDBhZFx1MDYwMC1cdTA2MDRc
dTA3MGZcdTE3YjRcdTE3YjVcdTIwMGMtXHUyMDBmXHUyMDI4LVx1MjAyZlx1MjA2MC1cdTIwNmZc
dWZlZmZcdWZmZjAtXHVmZmZmXS9nLAorICAgICAgICBnYXAsCisgICAgICAgIGluZGVudCwKKyAg
ICAgICAgbWV0YSA9IHsgICAgLy8gdGFibGUgb2YgY2hhcmFjdGVyIHN1YnN0aXR1dGlvbnMKKyAg
ICAgICAgICAgICdcYic6ICdcXGInLAorICAgICAgICAgICAgJ1x0JzogJ1xcdCcsCisgICAgICAg
ICAgICAnXG4nOiAnXFxuJywKKyAgICAgICAgICAgICdcZic6ICdcXGYnLAorICAgICAgICAgICAg
J1xyJzogJ1xccicsCisgICAgICAgICAgICAnIicgOiAnXFwiJywKKyAgICAgICAgICAgICdcXCc6
ICdcXFxcJworICAgICAgICB9LAorICAgICAgICByZXA7CisKKworICAgIGZ1bmN0aW9uIHF1b3Rl
KHN0cmluZykgeworCisvLyBJZiB0aGUgc3RyaW5nIGNvbnRhaW5zIG5vIGNvbnRyb2wgY2hhcmFj
dGVycywgbm8gcXVvdGUgY2hhcmFjdGVycywgYW5kIG5vCisvLyBiYWNrc2xhc2ggY2hhcmFjdGVy
cywgdGhlbiB3ZSBjYW4gc2FmZWx5IHNsYXAgc29tZSBxdW90ZXMgYXJvdW5kIGl0LgorLy8gT3Ro
ZXJ3aXNlIHdlIG11c3QgYWxzbyByZXBsYWNlIHRoZSBvZmZlbmRpbmcgY2hhcmFjdGVycyB3aXRo
IHNhZmUgZXNjYXBlCisvLyBzZXF1ZW5jZXMuCisKKyAgICAgICAgZXNjYXBhYmxlLmxhc3RJbmRl
eCA9IDA7CisgICAgICAgIHJldHVybiBlc2NhcGFibGUudGVzdChzdHJpbmcpID8KKyAgICAgICAg
ICAgICciJyArIHN0cmluZy5yZXBsYWNlKGVzY2FwYWJsZSwgZnVuY3Rpb24gKGEpIHsKKyAgICAg
ICAgICAgICAgICB2YXIgYyA9IG1ldGFbYV07CisgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVv
ZiBjID09PSAnc3RyaW5nJyA/IGMgOgorICAgICAgICAgICAgICAgICAgICAnXFx1JyArICgnMDAw
MCcgKyBhLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpKS5zbGljZSgtNCk7CisgICAgICAgICAg
ICB9KSArICciJyA6CisgICAgICAgICAgICAnIicgKyBzdHJpbmcgKyAnIic7CisgICAgfQorCisK
KyAgICBmdW5jdGlvbiBzdHIoa2V5LCBob2xkZXIpIHsKKy8vIFByb2R1Y2UgYSBzdHJpbmcgZnJv
bSBob2xkZXJba2V5XS4KKworICAgICAgICB2YXIgaSwgICAgICAgICAgLy8gVGhlIGxvb3AgY291
bnRlci4KKyAgICAgICAgICAgIGssICAgICAgICAgIC8vIFRoZSBtZW1iZXIga2V5LgorICAgICAg
ICAgICAgdiwgICAgICAgICAgLy8gVGhlIG1lbWJlciB2YWx1ZS4KKyAgICAgICAgICAgIGxlbmd0
aCwKKyAgICAgICAgICAgIG1pbmQgPSBnYXAsCisgICAgICAgICAgICBwYXJ0aWFsLAorICAgICAg
ICAgICAgdmFsdWUgPSBob2xkZXJba2V5XTsKKworLy8gSWYgdGhlIHZhbHVlIGhhcyBhIHRvSlNP
TiBtZXRob2QsIGNhbGwgaXQgdG8gb2J0YWluIGEgcmVwbGFjZW1lbnQgdmFsdWUuCisKKyAgICAg
ICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYKKyAgICAgICAgICAg
ICAgICB0eXBlb2YgdmFsdWUudG9KU09OID09PSAnZnVuY3Rpb24nKSB7CisgICAgICAgICAgICB2
YWx1ZSA9IHZhbHVlLnRvSlNPTihrZXkpOworICAgICAgICB9CisKKy8vIElmIHdlIHdlcmUgY2Fs
bGVkIHdpdGggYSByZXBsYWNlciBmdW5jdGlvbiwgdGhlbiBjYWxsIHRoZSByZXBsYWNlciB0bwor
Ly8gb2J0YWluIGEgcmVwbGFjZW1lbnQgdmFsdWUuCisKKyAgICAgICAgaWYgKHR5cGVvZiByZXAg
PT09ICdmdW5jdGlvbicpIHsKKyAgICAgICAgICAgIHZhbHVlID0gcmVwLmNhbGwoaG9sZGVyLCBr
ZXksIHZhbHVlKTsKKyAgICAgICAgfQorCisvLyBXaGF0IGhhcHBlbnMgbmV4dCBkZXBlbmRzIG9u
IHRoZSB2YWx1ZSdzIHR5cGUuCisKKyAgICAgICAgc3dpdGNoICh0eXBlb2YgdmFsdWUpIHsKKyAg
ICAgICAgY2FzZSAnc3RyaW5nJzoKKyAgICAgICAgICAgIHJldHVybiBxdW90ZSh2YWx1ZSk7CisK
KyAgICAgICAgY2FzZSAnbnVtYmVyJzoKKworLy8gSlNPTiBudW1iZXJzIG11c3QgYmUgZmluaXRl
LiBFbmNvZGUgbm9uLWZpbml0ZSBudW1iZXJzIGFzIG51bGwuCisKKyAgICAgICAgICAgIHJldHVy
biBpc0Zpbml0ZSh2YWx1ZSkgPyBTdHJpbmcodmFsdWUpIDogJ251bGwnOworCisgICAgICAgIGNh
c2UgJ2Jvb2xlYW4nOgorICAgICAgICBjYXNlICdudWxsJzoKKworLy8gSWYgdGhlIHZhbHVlIGlz
IGEgYm9vbGVhbiBvciBudWxsLCBjb252ZXJ0IGl0IHRvIGEgc3RyaW5nLiBOb3RlOgorLy8gdHlw
ZW9mIG51bGwgZG9lcyBub3QgcHJvZHVjZSAnbnVsbCcuIFRoZSBjYXNlIGlzIGluY2x1ZGVkIGhl
cmUgaW4KKy8vIHRoZSByZW1vdGUgY2hhbmNlIHRoYXQgdGhpcyBnZXRzIGZpeGVkIHNvbWVkYXku
CisKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpOworCisvLyBJZiB0aGUgdHlwZSBp
cyAnb2JqZWN0Jywgd2UgbWlnaHQgYmUgZGVhbGluZyB3aXRoIGFuIG9iamVjdCBvciBhbiBhcnJh
eSBvcgorLy8gbnVsbC4KKworICAgICAgICBjYXNlICdvYmplY3QnOgorCisvLyBEdWUgdG8gYSBz
cGVjaWZpY2F0aW9uIGJsdW5kZXIgaW4gRUNNQVNjcmlwdCwgdHlwZW9mIG51bGwgaXMgJ29iamVj
dCcsCisvLyBzbyB3YXRjaCBvdXQgZm9yIHRoYXQgY2FzZS4KKworICAgICAgICAgICAgaWYgKCF2
YWx1ZSkgeworICAgICAgICAgICAgICAgIHJldHVybiAnbnVsbCc7CisgICAgICAgICAgICB9CisK
Ky8vIE1ha2UgYW4gYXJyYXkgdG8gaG9sZCB0aGUgcGFydGlhbCByZXN1bHRzIG9mIHN0cmluZ2lm
eWluZyB0aGlzIG9iamVjdCB2YWx1ZS4KKworICAgICAgICAgICAgZ2FwICs9IGluZGVudDsKKyAg
ICAgICAgICAgIHBhcnRpYWwgPSBbXTsKKworLy8gSXMgdGhlIHZhbHVlIGFuIGFycmF5PworCisg
ICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5hcHBseSh2YWx1ZSkgPT09
ICdbb2JqZWN0IEFycmF5XScpIHsKKworLy8gVGhlIHZhbHVlIGlzIGFuIGFycmF5LiBTdHJpbmdp
ZnkgZXZlcnkgZWxlbWVudC4gVXNlIG51bGwgYXMgYSBwbGFjZWhvbGRlcgorLy8gZm9yIG5vbi1K
U09OIHZhbHVlcy4KKworICAgICAgICAgICAgICAgIGxlbmd0aCA9IHZhbHVlLmxlbmd0aDsKKyAg
ICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDEpIHsKKyAgICAgICAg
ICAgICAgICAgICAgcGFydGlhbFtpXSA9IHN0cihpLCB2YWx1ZSkgfHwgJ251bGwnOworICAgICAg
ICAgICAgICAgIH0KKworLy8gSm9pbiBhbGwgb2YgdGhlIGVsZW1lbnRzIHRvZ2V0aGVyLCBzZXBh
cmF0ZWQgd2l0aCBjb21tYXMsIGFuZCB3cmFwIHRoZW0gaW4KKy8vIGJyYWNrZXRzLgorCisgICAg
ICAgICAgICAgICAgdiA9IHBhcnRpYWwubGVuZ3RoID09PSAwID8gJ1tdJyA6CisgICAgICAgICAg
ICAgICAgICAgIGdhcCA/ICdbXG4nICsgZ2FwICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwYXJ0aWFsLmpvaW4oJyxcbicgKyBnYXApICsgJ1xuJyArCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1pbmQgKyAnXScgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAnWycg
KyBwYXJ0aWFsLmpvaW4oJywnKSArICddJzsKKyAgICAgICAgICAgICAgICBnYXAgPSBtaW5kOwor
ICAgICAgICAgICAgICAgIHJldHVybiB2OworICAgICAgICAgICAgfQorCisvLyBJZiB0aGUgcmVw
bGFjZXIgaXMgYW4gYXJyYXksIHVzZSBpdCB0byBzZWxlY3QgdGhlIG1lbWJlcnMgdG8gYmUgc3Ry
aW5naWZpZWQuCisKKyAgICAgICAgICAgIGlmIChyZXAgJiYgdHlwZW9mIHJlcCA9PT0gJ29iamVj
dCcpIHsKKyAgICAgICAgICAgICAgICBsZW5ndGggPSByZXAubGVuZ3RoOworICAgICAgICAgICAg
ICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gMSkgeworICAgICAgICAgICAgICAgICAg
ICBrID0gcmVwW2ldOworICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGsgPT09ICdzdHJp
bmcnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2ID0gc3RyKGssIHZhbHVlKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICh2KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cGFydGlhbC5wdXNoKHF1b3RlKGspICsgKGdhcCA/ICc6ICcgOiAnOicpICsgdik7CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9IGVsc2UgeworCisvLyBPdGhlcndpc2UsIGl0ZXJhdGUgdGhyb3Vn
aCBhbGwgb2YgdGhlIGtleXMgaW4gdGhlIG9iamVjdC4KKworICAgICAgICAgICAgICAgIGZvciAo
ayBpbiB2YWx1ZSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoT2JqZWN0Lmhhc093blByb3Bl
cnR5LmNhbGwodmFsdWUsIGspKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2ID0gc3RyKGss
IHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2KSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcGFydGlhbC5wdXNoKHF1b3RlKGspICsgKGdhcCA/ICc6ICcgOiAnOicp
ICsgdik7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKy8vIEpvaW4gYWxsIG9mIHRoZSBt
ZW1iZXIgdGV4dHMgdG9nZXRoZXIsIHNlcGFyYXRlZCB3aXRoIGNvbW1hcywKKy8vIGFuZCB3cmFw
IHRoZW0gaW4gYnJhY2VzLgorCisgICAgICAgICAgICB2ID0gcGFydGlhbC5sZW5ndGggPT09IDAg
PyAne30nIDoKKyAgICAgICAgICAgICAgICBnYXAgPyAne1xuJyArIGdhcCArIHBhcnRpYWwuam9p
bignLFxuJyArIGdhcCkgKyAnXG4nICsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1pbmQgKyAn
fScgOiAneycgKyBwYXJ0aWFsLmpvaW4oJywnKSArICd9JzsKKyAgICAgICAgICAgIGdhcCA9IG1p
bmQ7CisgICAgICAgICAgICByZXR1cm4gdjsKKyAgICAgICAgfQorICAgIH0KKworLy8gSWYgdGhl
IEpTT04gb2JqZWN0IGRvZXMgbm90IHlldCBoYXZlIGEgc3RyaW5naWZ5IG1ldGhvZCwgZ2l2ZSBp
dCBvbmUuCisKKyAgICBpZiAodHlwZW9mIEpTT04uc3RyaW5naWZ5ICE9PSAnZnVuY3Rpb24nKSB7
CisgICAgICAgIEpTT04uc3RyaW5naWZ5ID0gZnVuY3Rpb24gKHZhbHVlLCByZXBsYWNlciwgc3Bh
Y2UpIHsKKy8vIFRoZSBzdHJpbmdpZnkgbWV0aG9kIHRha2VzIGEgdmFsdWUgYW5kIGFuIG9wdGlv
bmFsIHJlcGxhY2VyLCBhbmQgYW4gb3B0aW9uYWwKKy8vIHNwYWNlIHBhcmFtZXRlciwgYW5kIHJl
dHVybnMgYSBKU09OIHRleHQuIFRoZSByZXBsYWNlciBjYW4gYmUgYSBmdW5jdGlvbgorLy8gdGhh
dCBjYW4gcmVwbGFjZSB2YWx1ZXMsIG9yIGFuIGFycmF5IG9mIHN0cmluZ3MgdGhhdCB3aWxsIHNl
bGVjdCB0aGUga2V5cy4KKy8vIEEgZGVmYXVsdCByZXBsYWNlciBtZXRob2QgY2FuIGJlIHByb3Zp
ZGVkLiBVc2Ugb2YgdGhlIHNwYWNlIHBhcmFtZXRlciBjYW4KKy8vIHByb2R1Y2UgdGV4dCB0aGF0
IGlzIG1vcmUgZWFzaWx5IHJlYWRhYmxlLgorCisgICAgICAgICAgICB2YXIgaTsKKyAgICAgICAg
ICAgIGdhcCA9ICcnOworICAgICAgICAgICAgaW5kZW50ID0gJyc7CisKKy8vIElmIHRoZSBzcGFj
ZSBwYXJhbWV0ZXIgaXMgYSBudW1iZXIsIG1ha2UgYW4gaW5kZW50IHN0cmluZyBjb250YWluaW5n
IHRoYXQKKy8vIG1hbnkgc3BhY2VzLgorCisgICAgICAgICAgICBpZiAodHlwZW9mIHNwYWNlID09
PSAnbnVtYmVyJykgeworICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzcGFjZTsgaSAr
PSAxKSB7CisgICAgICAgICAgICAgICAgICAgIGluZGVudCArPSAnICc7CisgICAgICAgICAgICAg
ICAgfQorCisvLyBJZiB0aGUgc3BhY2UgcGFyYW1ldGVyIGlzIGEgc3RyaW5nLCBpdCB3aWxsIGJl
IHVzZWQgYXMgdGhlIGluZGVudCBzdHJpbmcuCisKKyAgICAgICAgICAgIH0gZWxzZSBpZiAodHlw
ZW9mIHNwYWNlID09PSAnc3RyaW5nJykgeworICAgICAgICAgICAgICAgIGluZGVudCA9IHNwYWNl
OworICAgICAgICAgICAgfQorCisvLyBJZiB0aGVyZSBpcyBhIHJlcGxhY2VyLCBpdCBtdXN0IGJl
IGEgZnVuY3Rpb24gb3IgYW4gYXJyYXkuCisvLyBPdGhlcndpc2UsIHRocm93IGFuIGVycm9yLgor
CisgICAgICAgICAgICByZXAgPSByZXBsYWNlcjsKKyAgICAgICAgICAgIGlmIChyZXBsYWNlciAm
JiB0eXBlb2YgcmVwbGFjZXIgIT09ICdmdW5jdGlvbicgJiYKKyAgICAgICAgICAgICAgICAgICAg
KHR5cGVvZiByZXBsYWNlciAhPT0gJ29iamVjdCcgfHwKKyAgICAgICAgICAgICAgICAgICAgIHR5
cGVvZiByZXBsYWNlci5sZW5ndGggIT09ICdudW1iZXInKSkgeworICAgICAgICAgICAgICAgIHRo
cm93IG5ldyBFcnJvcignSlNPTi5zdHJpbmdpZnknKTsKKyAgICAgICAgICAgIH0KKworLy8gTWFr
ZSBhIGZha2Ugcm9vdCBvYmplY3QgY29udGFpbmluZyBvdXIgdmFsdWUgdW5kZXIgdGhlIGtleSBv
ZiAnJy4KKy8vIFJldHVybiB0aGUgcmVzdWx0IG9mIHN0cmluZ2lmeWluZyB0aGUgdmFsdWUuCisK
KyAgICAgICAgICAgIHJldHVybiBzdHIoJycsIHsnJzogdmFsdWV9KTsKKyAgICAgICAgfTsKKyAg
ICB9CisKKworLy8gSWYgdGhlIEpTT04gb2JqZWN0IGRvZXMgbm90IHlldCBoYXZlIGEgcGFyc2Ug
bWV0aG9kLCBnaXZlIGl0IG9uZS4KKworICAgIGlmICh0eXBlb2YgSlNPTi5wYXJzZSAhPT0gJ2Z1
bmN0aW9uJykgeworICAgICAgICBKU09OLnBhcnNlID0gZnVuY3Rpb24gKHRleHQsIHJldml2ZXIp
IHsKKworLy8gVGhlIHBhcnNlIG1ldGhvZCB0YWtlcyBhIHRleHQgYW5kIGFuIG9wdGlvbmFsIHJl
dml2ZXIgZnVuY3Rpb24sIGFuZCByZXR1cm5zCisvLyBhIEphdmFTY3JpcHQgdmFsdWUgaWYgdGhl
IHRleHQgaXMgYSB2YWxpZCBKU09OIHRleHQuCisKKyAgICAgICAgICAgIHZhciBqOworCisgICAg
ICAgICAgICBmdW5jdGlvbiB3YWxrKGhvbGRlciwga2V5KSB7CisKKy8vIFRoZSB3YWxrIG1ldGhv
ZCBpcyB1c2VkIHRvIHJlY3Vyc2l2ZWx5IHdhbGsgdGhlIHJlc3VsdGluZyBzdHJ1Y3R1cmUgc28K
Ky8vIHRoYXQgbW9kaWZpY2F0aW9ucyBjYW4gYmUgbWFkZS4KKworICAgICAgICAgICAgICAgIHZh
ciBrLCB2LCB2YWx1ZSA9IGhvbGRlcltrZXldOworICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAm
JiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAo
ayBpbiB2YWx1ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE9iamVjdC5oYXNPd25Q
cm9wZXJ0eS5jYWxsKHZhbHVlLCBrKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYg
PSB3YWxrKHZhbHVlLCBrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodiAhPT0g
dW5kZWZpbmVkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlW2tdID0g
djsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkZWxldGUgdmFsdWVba107CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiByZXZpdmVyLmNhbGwo
aG9sZGVyLCBrZXksIHZhbHVlKTsKKyAgICAgICAgICAgIH0KKworCisvLyBQYXJzaW5nIGhhcHBl
bnMgaW4gZm91ciBzdGFnZXMuIEluIHRoZSBmaXJzdCBzdGFnZSwgd2UgcmVwbGFjZSBjZXJ0YWlu
CisvLyBVbmljb2RlIGNoYXJhY3RlcnMgd2l0aCBlc2NhcGUgc2VxdWVuY2VzLiBKYXZhU2NyaXB0
IGhhbmRsZXMgbWFueSBjaGFyYWN0ZXJzCisvLyBpbmNvcnJlY3RseSwgZWl0aGVyIHNpbGVudGx5
IGRlbGV0aW5nIHRoZW0sIG9yIHRyZWF0aW5nIHRoZW0gYXMgbGluZSBlbmRpbmdzLgorCisgICAg
ICAgICAgICBjeC5sYXN0SW5kZXggPSAwOworICAgICAgICAgICAgaWYgKGN4LnRlc3QodGV4dCkp
IHsKKyAgICAgICAgICAgICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKGN4LCBmdW5jdGlvbiAoYSkg
eworICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1xcdScgKworICAgICAgICAgICAgICAgICAg
ICAgICAgKCcwMDAwJyArIGEuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikpLnNsaWNlKC00KTsK
KyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKworLy8gSW4gdGhlIHNlY29uZCBz
dGFnZSwgd2UgcnVuIHRoZSB0ZXh0IGFnYWluc3QgcmVndWxhciBleHByZXNzaW9ucyB0aGF0IGxv
b2sKKy8vIGZvciBub24tSlNPTiBwYXR0ZXJucy4gV2UgYXJlIGVzcGVjaWFsbHkgY29uY2VybmVk
IHdpdGggJygpJyBhbmQgJ25ldycKKy8vIGJlY2F1c2UgdGhleSBjYW4gY2F1c2UgaW52b2NhdGlv
biwgYW5kICc9JyBiZWNhdXNlIGl0IGNhbiBjYXVzZSBtdXRhdGlvbi4KKy8vIEJ1dCBqdXN0IHRv
IGJlIHNhZmUsIHdlIHdhbnQgdG8gcmVqZWN0IGFsbCB1bmV4cGVjdGVkIGZvcm1zLgorCisvLyBX
ZSBzcGxpdCB0aGUgc2Vjb25kIHN0YWdlIGludG8gNCByZWdleHAgb3BlcmF0aW9ucyBpbiBvcmRl
ciB0byB3b3JrIGFyb3VuZAorLy8gY3JpcHBsaW5nIGluZWZmaWNpZW5jaWVzIGluIElFJ3MgYW5k
IFNhZmFyaSdzIHJlZ2V4cCBlbmdpbmVzLiBGaXJzdCB3ZQorLy8gcmVwbGFjZSB0aGUgSlNPTiBi
YWNrc2xhc2ggcGFpcnMgd2l0aCAnQCcgKGEgbm9uLUpTT04gY2hhcmFjdGVyKS4gU2Vjb25kLCB3
ZQorLy8gcmVwbGFjZSBhbGwgc2ltcGxlIHZhbHVlIHRva2VucyB3aXRoICddJyBjaGFyYWN0ZXJz
LiBUaGlyZCwgd2UgZGVsZXRlIGFsbAorLy8gb3BlbiBicmFja2V0cyB0aGF0IGZvbGxvdyBhIGNv
bG9uIG9yIGNvbW1hIG9yIHRoYXQgYmVnaW4gdGhlIHRleHQuIEZpbmFsbHksCisvLyB3ZSBsb29r
IHRvIHNlZSB0aGF0IHRoZSByZW1haW5pbmcgY2hhcmFjdGVycyBhcmUgb25seSB3aGl0ZXNwYWNl
IG9yICddJyBvcgorLy8gJywnIG9yICc6JyBvciAneycgb3IgJ30nLiBJZiB0aGF0IGlzIHNvLCB0
aGVuIHRoZSB0ZXh0IGlzIHNhZmUgZm9yIGV2YWwuCisKKyAgICAgICAgICAgIGlmICgvXltcXSw6
e31cc10qJC8uCit0ZXN0KHRleHQucmVwbGFjZSgvXFwoPzpbIlxcXC9iZm5ydF18dVswLTlhLWZB
LUZdezR9KS9nLCAnQCcpLgorcmVwbGFjZSgvIlteIlxcXG5ccl0qInx0cnVlfGZhbHNlfG51bGx8
LT9cZCsoPzpcLlxkKik/KD86W2VFXVsrXC1dP1xkKyk/L2csICddJykuCityZXBsYWNlKC8oPzpe
fDp8LCkoPzpccypcWykrL2csICcnKSkpIHsKKworLy8gSW4gdGhlIHRoaXJkIHN0YWdlIHdlIHVz
ZSB0aGUgZXZhbCBmdW5jdGlvbiB0byBjb21waWxlIHRoZSB0ZXh0IGludG8gYQorLy8gSmF2YVNj
cmlwdCBzdHJ1Y3R1cmUuIFRoZSAneycgb3BlcmF0b3IgaXMgc3ViamVjdCB0byBhIHN5bnRhY3Rp
YyBhbWJpZ3VpdHkKKy8vIGluIEphdmFTY3JpcHQ6IGl0IGNhbiBiZWdpbiBhIGJsb2NrIG9yIGFu
IG9iamVjdCBsaXRlcmFsLiBXZSB3cmFwIHRoZSB0ZXh0CisvLyBpbiBwYXJlbnMgdG8gZWxpbWlu
YXRlIHRoZSBhbWJpZ3VpdHkuCisKKyAgICAgICAgICAgICAgICBqID0gZXZhbCgnKCcgKyB0ZXh0
ICsgJyknKTsKKworLy8gSW4gdGhlIG9wdGlvbmFsIGZvdXJ0aCBzdGFnZSwgd2UgcmVjdXJzaXZl
bHkgd2FsayB0aGUgbmV3IHN0cnVjdHVyZSwgcGFzc2luZworLy8gZWFjaCBuYW1lL3ZhbHVlIHBh
aXIgdG8gYSByZXZpdmVyIGZ1bmN0aW9uIGZvciBwb3NzaWJsZSB0cmFuc2Zvcm1hdGlvbi4KKwor
ICAgICAgICAgICAgICAgIHJldHVybiB0eXBlb2YgcmV2aXZlciA9PT0gJ2Z1bmN0aW9uJyA/Cisg
ICAgICAgICAgICAgICAgICAgIHdhbGsoeycnOiBqfSwgJycpIDogajsKKyAgICAgICAgICAgIH0K
KworLy8gSWYgdGhlIHRleHQgaXMgbm90IEpTT04gcGFyc2VhYmxlLCB0aGVuIGEgU3ludGF4RXJy
b3IgaXMgdGhyb3duLgorCisgICAgICAgICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0pTT04u
cGFyc2UnKTsKKyAgICAgICAgfTsKKyAgICB9Cit9KCkpOwpJbmRleDogUGVyZm9ybWFuY2VUZXN0
cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2VzNS1zaGlt
L3Rlc3RzL3NwZWMvcy1hcnJheS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0Rv
WW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvZXM1LXNoaW0vdGVz
dHMvc3BlYy9zLWFycmF5LmpzCShyZXZpc2lvbiAwKQorKysgUGVyZm9ybWFuY2VUZXN0cy9Eb1lv
dUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2VzNS1zaGltL3Rlc3Rz
L3NwZWMvcy1hcnJheS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwNzAgQEAKK2Rlc2Ny
aWJlKCdBcnJheScsIGZ1bmN0aW9uKCkgeworICAgIHZhciB0ZXN0U3ViamVjdDsKKyAgICBiZWZv
cmVFYWNoKGZ1bmN0aW9uKCkgeworICAgICAgICB0ZXN0U3ViamVjdCA9IFsyLCAzLCB1bmRlZmlu
ZWQsIHRydWUsICdoZWonLCBudWxsLCBmYWxzZSwgMF07CisgICAgICAgIGRlbGV0ZSB0ZXN0U3Vi
amVjdFsxXTsKKyAgICB9KTsKKyAgICBmdW5jdGlvbiBjcmVhdGVBcnJheUxpa2VGcm9tQXJyYXko
YXJyKSB7CisgICAgICAgIHZhciBvID0ge307CisgICAgICAgIEFycmF5LnByb3RvdHlwZS5mb3JF
YWNoLmNhbGwoYXJyLCBmdW5jdGlvbihlLCBpKSB7CisgICAgICAgICAgICBvW2ldPWU7CisgICAg
ICAgIH0pOworICAgICAgICBvLmxlbmd0aCA9IGFyci5sZW5ndGg7CisgICAgICAgIHJldHVybiBv
OworICAgIH07CisgICAgCisgICAgZGVzY3JpYmUoJ2ZvckVhY2gnLCBmdW5jdGlvbigpIHsKKyAg
ICAgICAgInVzZSBzdHJpY3QiOworICAgICAgICB2YXIgZXhwZWN0ZWQsIGFjdHVhbDsKKyAgICAg
ICAgCisgICAgICAgIGJlZm9yZUVhY2goZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBleHBlY3Rl
ZCA9IHswOjIsIDI6IHVuZGVmaW5lZCwgMzp0cnVlLCA0OiAnaGVqJywgNTpudWxsLCA2OmZhbHNl
LCA3OjAgfTsKKyAgICAgICAgICAgIGFjdHVhbCA9IHt9OworICAgICAgICB9KTsKKyAgICAgICAg
aXQoJ3Nob3VsZCBwYXNzIHRoZSByaWdodCBwYXJhbWV0ZXJzJywgZnVuY3Rpb24oKSB7CisgICAg
ICAgICAgICB2YXIgY2FsbGJhY2sgPSBqYXNtaW5lLmNyZWF0ZVNweSgnY2FsbGJhY2snKSwKKyAg
ICAgICAgICAgICAgICBhcnJheSA9IFsnMSddOworICAgICAgICAgICAgYXJyYXkuZm9yRWFjaChj
YWxsYmFjayk7CisgICAgICAgICAgICBleHBlY3QoY2FsbGJhY2spLnRvSGF2ZUJlZW5DYWxsZWRX
aXRoKCcxJywgMCwgYXJyYXkpOworICAgICAgICB9KTsKKyAgICAgICAgaXQoJ3Nob3VsZCBub3Qg
YWZmZWN0IGVsZW1lbnRzIGFkZGVkIHRvIHRoZSBhcnJheSBhZnRlciBpdCBoYXMgYmVndW4nLCBm
dW5jdGlvbigpIHsKKyAgICAgICAgICAgIHZhciBhcnIgPSBbMSwyLDNdLAorICAgICAgICAgICAg
ICAgIGkgPSAwOworICAgICAgICAgICAgYXJyLmZvckVhY2goZnVuY3Rpb24oYSkgeworICAgICAg
ICAgICAgICAgIGkrKzsKKyAgICAgICAgICAgICAgICBhcnIucHVzaChhKzMpOworICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgICBleHBlY3QoYXJyKS50b0VxdWFsKFsxLDIsMyw0LDUsNl0pOwor
ICAgICAgICAgICAgZXhwZWN0KGkpLnRvQmUoMyk7CisgICAgICAgIH0pOworICAgICAgICAKKyAg
ICAgICAgaXQoJ3Nob3VsZCBzZXQgdGhlIHJpZ2h0IGNvbnRleHQgd2hlbiBnaXZlbiBub25lJywg
ZnVuY3Rpb24oKSB7CisgICAgICAgICAgICB2YXIgY29udGV4dDsKKyAgICAgICAgICAgIFsxXS5m
b3JFYWNoKGZ1bmN0aW9uKCkge2NvbnRleHQgPSB0aGlzO30pOworICAgICAgICAgICAgZXhwZWN0
KGNvbnRleHQpLnRvQmUoZnVuY3Rpb24oKSB7cmV0dXJuIHRoaXN9LmNhbGwoKSk7CisgICAgICAg
IH0pOworICAgICAgICBpdCgnc2hvdWxkIGl0ZXJhdGUgYWxsJywgZnVuY3Rpb24oKSB7CisgICAg
ICAgICAgICB0ZXN0U3ViamVjdC5mb3JFYWNoKGZ1bmN0aW9uKG9iaiwgaW5kZXgpIHsKKyAgICAg
ICAgICAgICAgICBhY3R1YWxbaW5kZXhdID0gb2JqOworICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICBleHBlY3QoYWN0dWFsKS50b0V4YWN0bHlNYXRjaChleHBlY3RlZCk7CisgICAgICAgIH0p
OworICAgICAgICBpdCgnc2hvdWxkIGl0ZXJhdGUgYWxsIHVzaW5nIGEgY29udGV4dCcsIGZ1bmN0
aW9uKCkgeworICAgICAgICAgICAgdmFyIG8gPSB7IGE6IGFjdHVhbCB9OworICAgIAorICAgICAg
ICAgICAgdGVzdFN1YmplY3QuZm9yRWFjaChmdW5jdGlvbihvYmosIGluZGV4KSB7CisgICAgICAg
ICAgICAgICAgdGhpcy5hW2luZGV4XSA9IG9iajsKKyAgICAgICAgICAgIH0sIG8pOworICAgICAg
ICAgICAgZXhwZWN0KGFjdHVhbCkudG9FeGFjdGx5TWF0Y2goZXhwZWN0ZWQpOworICAgICAgICB9
KTsKKyAgICAgICAgCisgICAgICAgIGl0KCdzaG91bGQgaXRlcmF0ZSBhbGwgaW4gYW4gYXJyYXkt
bGlrZSBvYmplY3QnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHZhciB0cyA9IGNyZWF0ZUFy
cmF5TGlrZUZyb21BcnJheSh0ZXN0U3ViamVjdCk7CisgICAgICAgICAgICBBcnJheS5wcm90b3R5
cGUuZm9yRWFjaC5jYWxsKHRzLCBmdW5jdGlvbihvYmosIGluZGV4KSB7CisgICAgICAgICAgICAg
ICAgYWN0dWFsW2luZGV4XSA9IG9iajsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgZXhw
ZWN0KGFjdHVhbCkudG9FeGFjdGx5TWF0Y2goZXhwZWN0ZWQpOworICAgICAgICB9KTsKKyAgICAg
ICAgaXQoJ3Nob3VsZCBpdGVyYXRlIGFsbCBpbiBhbiBhcnJheS1saWtlIG9iamVjdCB1c2luZyBh
IGNvbnRleHQnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHZhciB0cyA9IGNyZWF0ZUFycmF5
TGlrZUZyb21BcnJheSh0ZXN0U3ViamVjdCksCisgICAgICAgICAgICAgICAgbyA9IHsgYTogYWN0
dWFsIH07CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNo
LmNhbGwodHMsIGZ1bmN0aW9uKG9iaiwgaW5kZXgpIHsKKyAgICAgICAgICAgICAgICB0aGlzLmFb
aW5kZXhdID0gb2JqOworICAgICAgICAgICAgfSwgbyk7CisgICAgICAgICAgICBleHBlY3QoYWN0
dWFsKS50b0V4YWN0bHlNYXRjaChleHBlY3RlZCk7CisgICAgICAgIH0pOworICAgIH0pOworICAg
IGRlc2NyaWJlKCdzb21lJywgZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBhY3R1YWwsIGV4cGVj
dGVkLCBudW1iZXJPZlJ1bnM7CisgICAgICAgIAorICAgICAgICBiZWZvcmVFYWNoKGZ1bmN0aW9u
KCkgeworICAgICAgICAgICAgZXhwZWN0ZWQgPSB7MDoyLCAyOiB1bmRlZmluZWQsIDM6dHJ1ZSB9
OworICAgICAgICAgICAgYWN0dWFsID0ge307CisgICAgICAgICAgICBudW1iZXJPZlJ1bnMgPSAw
OworICAgICAgICB9KTsKKyAgICAgICAgCisgICAgICAgIGl0KCdzaG91bGQgcGFzcyB0aGUgY29y
cmVjdCB2YWx1ZXMgYWxvbmcgdG8gdGhlIGNhbGxiYWNrJywgZnVuY3Rpb24oKSB7CisgICAgICAg
ICAgICB2YXIgY2FsbGJhY2sgPSBqYXNtaW5lLmNyZWF0ZVNweSgnY2FsbGJhY2snKTsKKyAgICAg
ICAgICAgIHZhciBhcnJheSA9IFsnMSddOworICAgICAgICAgICAgYXJyYXkuc29tZShjYWxsYmFj
ayk7CisgICAgICAgICAgICBleHBlY3QoY2FsbGJhY2spLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKCcx
JywgMCwgYXJyYXkpOworICAgICAgICB9KTsKKyAgICAgICAgaXQoJ3Nob3VsZCBub3QgYWZmZWN0
IGVsZW1lbnRzIGFkZGVkIHRvIHRoZSBhcnJheSBhZnRlciBpdCBoYXMgYmVndW4nLCBmdW5jdGlv
bigpIHsKKyAgICAgICAgICAgIHZhciBhcnIgPSBbMSwyLDNdLAorICAgICAgICAgICAgICAgIGkg
PSAwOworICAgICAgICAgICAgYXJyLnNvbWUoZnVuY3Rpb24oYSkgeworICAgICAgICAgICAgICAg
IGkrKzsKKyAgICAgICAgICAgICAgICBhcnIucHVzaChhKzMpOworICAgICAgICAgICAgICAgIHJl
dHVybiBpID4gMzsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgZXhwZWN0KGFycikudG9F
cXVhbChbMSwyLDMsNCw1LDZdKTsKKyAgICAgICAgICAgIGV4cGVjdChpKS50b0JlKDMpOworICAg
ICAgICB9KTsKKyAgICAgICAgaXQoJ3Nob3VsZCBzZXQgdGhlIHJpZ2h0IGNvbnRleHQgd2hlbiBn
aXZlbiBub25lJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICB2YXIgY29udGV4dDsKKyAgICAg
ICAgICAgIFsxXS5zb21lKGZ1bmN0aW9uKCkge2NvbnRleHQgPSB0aGlzO30pOworICAgICAgICAg
ICAgZXhwZWN0KGNvbnRleHQpLnRvQmUoZnVuY3Rpb24oKSB7cmV0dXJuIHRoaXN9LmNhbGwoKSk7
CisgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ug
aWYgaXQgcnVucyB0byB0aGUgZW5kJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBhY3R1YWwg
PSB0ZXN0U3ViamVjdC5zb21lKGZ1bmN0aW9uKCkge30pOworICAgICAgICAgICAgZXhwZWN0KGFj
dHVhbCkudG9CZUZhbHN5KCk7CisgICAgICAgIH0pOworICAgICAgICBpdCgnc2hvdWxkIHJldHVy
biB0cnVlIGlmIGl0IGlzIHN0b3BwZWQgc29tZXdoZXJlJywgZnVuY3Rpb24oKSB7CisgICAgICAg
ICAgICBhY3R1YWwgPSB0ZXN0U3ViamVjdC5zb21lKGZ1bmN0aW9uKCkgeyByZXR1cm4gdHJ1ZTsg
fSk7CisgICAgICAgICAgICBleHBlY3QoYWN0dWFsKS50b0JlVHJ1dGh5KCk7CisgICAgICAgIH0p
OworICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSBpZiB0aGVyZSBhcmUgbm8gZWxlbWVu
dHMnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGFjdHVhbCA9IFtdLnNvbWUoZnVuY3Rpb24o
KSB7IHJldHVybiB0cnVlOyB9KTsKKyAgICAgICAgICAgIGV4cGVjdChhY3R1YWwpLnRvQmVGYWxz
eSgpOworICAgICAgICB9KTsKKyAgICAgICAgCisgICAgICAgIGl0KCdzaG91bGQgc3RvcCBhZnRl
ciAzIGVsZW1lbnRzJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICB0ZXN0U3ViamVjdC5zb21l
KGZ1bmN0aW9uKG9iaiwgaW5kZXgpIHsKKyAgICAgICAgICAgICAgICBhY3R1YWxbaW5kZXhdID0g
b2JqOworICAgICAgICAgICAgICAgIG51bWJlck9mUnVucyArPSAxOworICAgICAgICAgICAgICAg
IGlmKG51bWJlck9mUnVucyA9PSAzKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgIGV4cGVjdChhY3R1YWwpLnRvRXhhY3RseU1hdGNoKGV4
cGVjdGVkKTsKKyAgICAgICAgfSk7CisgICAgICAgIGl0KCdzaG91bGQgc3RvcCBhZnRlciAzIGVs
ZW1lbnRzIHVzaW5nIGEgY29udGV4dCcsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgdmFyIG8g
PSB7IGE6IGFjdHVhbCB9OworICAgICAgICAgICAgdGVzdFN1YmplY3Quc29tZShmdW5jdGlvbihv
YmosIGluZGV4KSB7CisgICAgICAgICAgICAgICAgdGhpcy5hW2luZGV4XSA9IG9iajsKKyAgICAg
ICAgICAgICAgICBudW1iZXJPZlJ1bnMgKz0gMTsKKyAgICAgICAgICAgICAgICBpZihudW1iZXJP
ZlJ1bnMgPT0gMykgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfSwg
byk7CisgICAgICAgICAgICBleHBlY3QoYWN0dWFsKS50b0V4YWN0bHlNYXRjaChleHBlY3RlZCk7
CisgICAgICAgIH0pOworICAgIAorICAgICAgICBpdCgnc2hvdWxkIHN0b3AgYWZ0ZXIgMyBlbGVt
ZW50cyBpbiBhbiBhcnJheS1saWtlIG9iamVjdCcsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAg
dmFyIHRzID0gY3JlYXRlQXJyYXlMaWtlRnJvbUFycmF5KHRlc3RTdWJqZWN0KTsKKyAgICAgICAg
ICAgIEFycmF5LnByb3RvdHlwZS5zb21lLmNhbGwodHMsIGZ1bmN0aW9uKG9iaiwgaW5kZXgpIHsK
KyAgICAgICAgICAgICAgICBhY3R1YWxbaW5kZXhdID0gb2JqOworICAgICAgICAgICAgICAgIG51
bWJlck9mUnVucyArPSAxOworICAgICAgICAgICAgICAgIGlmKG51bWJlck9mUnVucyA9PSAzKSB7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAg
IGV4cGVjdChhY3R1YWwpLnRvRXhhY3RseU1hdGNoKGV4cGVjdGVkKTsKKyAgICAgICAgfSk7Cisg
ICAgICAgIGl0KCdzaG91bGQgc3RvcCBhZnRlciAzIGVsZW1lbnRzIGluIGFuIGFycmF5LWxpa2Ug
b2JqZWN0IHVzaW5nIGEgY29udGV4dCcsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgdmFyIHRz
ID0gY3JlYXRlQXJyYXlMaWtlRnJvbUFycmF5KHRlc3RTdWJqZWN0KTsKKyAgICAgICAgICAgIHZh
ciBvID0geyBhOiBhY3R1YWwgfTsKKyAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5zb21lLmNh
bGwodHMsIGZ1bmN0aW9uKG9iaiwgaW5kZXgpIHsKKyAgICAgICAgICAgICAgICB0aGlzLmFbaW5k
ZXhdID0gb2JqOworICAgICAgICAgICAgICAgIG51bWJlck9mUnVucyArPSAxOworICAgICAgICAg
ICAgICAgIGlmKG51bWJlck9mUnVucyA9PSAzKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICB9LCBvKTsKKyAgICAgICAgICAgIGV4cGVjdChhY3R1YWwpLnRvRXhhY3Rs
eU1hdGNoKGV4cGVjdGVkKTsKKyAgICAgICAgfSk7CisgICAgfSk7CisgICAgZGVzY3JpYmUoJ2V2
ZXJ5JywgZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBhY3R1YWwsIGV4cGVjdGVkLCBudW1iZXJP
ZlJ1bnM7CisgICAgICAgIAorICAgICAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uKCkgeworICAgICAg
ICAgICAgZXhwZWN0ZWQgPSB7MDoyLCAyOiB1bmRlZmluZWQsIDM6dHJ1ZSB9OworICAgICAgICAg
ICAgYWN0dWFsID0ge307CisgICAgICAgICAgICBudW1iZXJPZlJ1bnMgPSAwOworICAgICAgICB9
KTsKKyAgICAgICAgCisgICAgICAgIGl0KCdzaG91bGQgcGFzcyB0aGUgY29ycmVjdCB2YWx1ZXMg
YWxvbmcgdG8gdGhlIGNhbGxiYWNrJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICB2YXIgY2Fs
bGJhY2sgPSBqYXNtaW5lLmNyZWF0ZVNweSgnY2FsbGJhY2snKTsKKyAgICAgICAgICAgIHZhciBh
cnJheSA9IFsnMSddOworICAgICAgICAgICAgYXJyYXkuZXZlcnkoY2FsbGJhY2spOworICAgICAg
ICAgICAgZXhwZWN0KGNhbGxiYWNrKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgnMScsIDAsIGFycmF5
KTsKKyAgICAgICAgfSk7CisgICAgICAgIGl0KCdzaG91bGQgbm90IGFmZmVjdCBlbGVtZW50cyBh
ZGRlZCB0byB0aGUgYXJyYXkgYWZ0ZXIgaXQgaGFzIGJlZ3VuJywgZnVuY3Rpb24oKSB7CisgICAg
ICAgICAgICB2YXIgYXJyID0gWzEsMiwzXSwKKyAgICAgICAgICAgICAgICBpID0gMDsKKyAgICAg
ICAgICAgIGFyci5ldmVyeShmdW5jdGlvbihhKSB7CisgICAgICAgICAgICAgICAgaSsrOworICAg
ICAgICAgICAgICAgIGFyci5wdXNoKGErMyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGkgPD0g
MzsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgZXhwZWN0KGFycikudG9FcXVhbChbMSwy
LDMsNCw1LDZdKTsKKyAgICAgICAgICAgIGV4cGVjdChpKS50b0JlKDMpOworICAgICAgICB9KTsK
KyAgICAgICAgaXQoJ3Nob3VsZCBzZXQgdGhlIHJpZ2h0IGNvbnRleHQgd2hlbiBnaXZlbiBub25l
JywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICB2YXIgY29udGV4dDsKKyAgICAgICAgICAgIFsx
XS5ldmVyeShmdW5jdGlvbigpIHtjb250ZXh0ID0gdGhpczt9KTsKKyAgICAgICAgICAgIGV4cGVj
dChjb250ZXh0KS50b0JlKGZ1bmN0aW9uKCkge3JldHVybiB0aGlzfS5jYWxsKCkpOworICAgICAg
ICB9KTsKKyAgICAgICAgCisgICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgaWYgdGhlIGFy
cmF5IGlzIGVtcHR5JywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBhY3R1YWwgPSBbXS5ldmVy
eShmdW5jdGlvbigpIHsgcmV0dXJuIHRydWU7IH0pOworICAgICAgICAgICAgZXhwZWN0KGFjdHVh
bCkudG9CZVRydXRoeSgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBhY3R1YWwgPSBbXS5l
dmVyeShmdW5jdGlvbigpIHsgcmV0dXJuIGZhbHNlOyB9KTsKKyAgICAgICAgICAgIGV4cGVjdChh
Y3R1YWwpLnRvQmVUcnV0aHkoKTsKKyAgICAgICAgfSk7CisgICAgICAgIGl0KCdzaG91bGQgcmV0
dXJuIHRydWUgaWYgaXQgcnVucyB0byB0aGUgZW5kJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAg
ICBhY3R1YWwgPSBbMSwyLDNdLmV2ZXJ5KGZ1bmN0aW9uKCkgeyByZXR1cm4gdHJ1ZTsgfSk7Cisg
ICAgICAgICAgICBleHBlY3QoYWN0dWFsKS50b0JlVHJ1dGh5KCk7CisgICAgICAgIH0pOworICAg
ICAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSBpZiBpdCBpcyBzdG9wcGVkIGJlZm9yZSB0aGUg
ZW5kJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBhY3R1YWwgPSBbMSwyLDNdLmV2ZXJ5KGZ1
bmN0aW9uKCkgeyByZXR1cm4gZmFsc2U7IH0pOworICAgICAgICAgICAgZXhwZWN0KGFjdHVhbCku
dG9CZUZhbHN5KCk7CisgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAgaXQoJ3Nob3VsZCBy
ZXR1cm4gYWZ0ZXIgMyBlbGVtZW50cycsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgdGVzdFN1
YmplY3QuZXZlcnkoZnVuY3Rpb24ob2JqLCBpbmRleCkgeworICAgICAgICAgICAgICAgIGFjdHVh
bFtpbmRleF0gPSBvYmo7CisgICAgICAgICAgICAgICAgbnVtYmVyT2ZSdW5zICs9IDE7CisgICAg
ICAgICAgICAgICAgaWYobnVtYmVyT2ZSdW5zID09IDMpIHsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgZXhwZWN0KGFjdHVhbCkudG9FeGFj
dGx5TWF0Y2goZXhwZWN0ZWQpOworICAgICAgICB9KTsKKyAgICAgICAgaXQoJ3Nob3VsZCBzdG9w
IGFmdGVyIDMgZWxlbWVudHMgdXNpbmcgYSBjb250ZXh0JywgZnVuY3Rpb24oKSB7CisgICAgICAg
ICAgICB2YXIgbyA9IHsgYTogYWN0dWFsIH07CisgICAgICAgICAgICB0ZXN0U3ViamVjdC5ldmVy
eShmdW5jdGlvbihvYmosIGluZGV4KSB7CisgICAgICAgICAgICAgICAgdGhpcy5hW2luZGV4XSA9
IG9iajsKKyAgICAgICAgICAgICAgICBudW1iZXJPZlJ1bnMgKz0gMTsKKyAgICAgICAgICAgICAg
ICBpZihudW1iZXJPZlJ1bnMgPT0gMykgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICAgICAgfSwgbyk7CisgICAgICAgICAgICBleHBlY3QoYWN0dWFsKS50b0V4YWN0bHlNYXRj
aChleHBlY3RlZCk7CisgICAgICAgIH0pOworICAgIAorICAgICAgICBpdCgnc2hvdWxkIHN0b3Ag
YWZ0ZXIgMyBlbGVtZW50cyBpbiBhbiBhcnJheS1saWtlIG9iamVjdCcsIGZ1bmN0aW9uKCkgewor
ICAgICAgICAgICAgdmFyIHRzID0gY3JlYXRlQXJyYXlMaWtlRnJvbUFycmF5KHRlc3RTdWJqZWN0
KTsKKyAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5ldmVyeS5jYWxsKHRzLCBmdW5jdGlvbihv
YmosIGluZGV4KSB7CisgICAgICAgICAgICAgICAgYWN0dWFsW2luZGV4XSA9IG9iajsKKyAgICAg
ICAgICAgICAgICBudW1iZXJPZlJ1bnMgKz0gMTsKKyAgICAgICAgICAgICAgICBpZihudW1iZXJP
ZlJ1bnMgPT0gMykgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfSk7
CisgICAgICAgICAgICBleHBlY3QoYWN0dWFsKS50b0V4YWN0bHlNYXRjaChleHBlY3RlZCk7Cisg
ICAgICAgIH0pOworICAgICAgICBpdCgnc2hvdWxkIHN0b3AgYWZ0ZXIgMyBlbGVtZW50cyBpbiBh
biBhcnJheS1saWtlIG9iamVjdCB1c2luZyBhIGNvbnRleHQnLCBmdW5jdGlvbigpIHsKKyAgICAg
ICAgICAgIHZhciB0cyA9IGNyZWF0ZUFycmF5TGlrZUZyb21BcnJheSh0ZXN0U3ViamVjdCk7Cisg
ICAgICAgICAgICB2YXIgbyA9IHsgYTogYWN0dWFsIH07CisgICAgICAgICAgICBBcnJheS5wcm90
b3R5cGUuZXZlcnkuY2FsbCh0cywgZnVuY3Rpb24ob2JqLCBpbmRleCkgeworICAgICAgICAgICAg
ICAgIHRoaXMuYVtpbmRleF0gPSBvYmo7CisgICAgICAgICAgICAgICAgbnVtYmVyT2ZSdW5zICs9
IDE7CisgICAgICAgICAgICAgICAgaWYobnVtYmVyT2ZSdW5zID09IDMpIHsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0sIG8pOworICAgICAgICAgICAgZXhwZWN0KGFj
dHVhbCkudG9FeGFjdGx5TWF0Y2goZXhwZWN0ZWQpOworICAgICAgICB9KTsKKyAgICB9KTsKKyAg
ICAKKyAgICBkZXNjcmliZSgnaW5kZXhPZicsIGZ1bmN0aW9uKCkgeworICAgICAgICAidXNlIHN0
cmljdCI7CisgICAgICAgIHZhciBhY3R1YWwsIGV4cGVjdGVkLCB0ZXN0U3ViamVjdDsKKyAgICAg
ICAgCisgICAgICAgIGJlZm9yZUVhY2goZnVuY3Rpb24oKSB7CisgICAgICAgICAgICB0ZXN0U3Vi
amVjdCA9IFsyLCAzLCB1bmRlZmluZWQsIHRydWUsICdoZWonLCBudWxsLCAyLCBmYWxzZSwgMF07
CisgICAgICAgICAgICBkZWxldGUgdGVzdFN1YmplY3RbMV07CisgICAgCisgICAgICAgIH0pOwor
ICAgIAorICAgICAgICBpdCgnc2hvdWxkIGZpbmQgdGhlIGVsZW1lbnQnLCBmdW5jdGlvbigpIHsK
KyAgICAgICAgICAgIGV4cGVjdGVkID0gNDsKKyAgICAgICAgICAgIGFjdHVhbCA9IHRlc3RTdWJq
ZWN0LmluZGV4T2YoJ2hlaicpOworICAgICAgICAgICAgZXhwZWN0KGFjdHVhbCkudG9FcXVhbChl
eHBlY3RlZCk7CisgICAgICAgIH0pOworICAgICAgICBpdCgnc2hvdWxkIG5vdCBmaW5kIHRoZSBl
bGVtZW50JywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBleHBlY3RlZCA9IC0xOworICAgICAg
ICAgICAgYWN0dWFsID0gdGVzdFN1YmplY3QuaW5kZXhPZignbXVzJyk7CisgICAgICAgICAgICBl
eHBlY3QoYWN0dWFsKS50b0VxdWFsKGV4cGVjdGVkKTsKKyAgICAgICAgfSk7CisgICAgICAgIGl0
KCdzaG91bGQgZmluZCB1bmRlZmluZWQgYXMgd2VsbCcsIGZ1bmN0aW9uKCkgeworICAgICAgICAg
ICAgZXhwZWN0ZWQgPSAtMTsKKyAgICAgICAgICAgIGFjdHVhbCA9IHRlc3RTdWJqZWN0LmluZGV4
T2YodW5kZWZpbmVkKTsKKyAgICAgICAgICAgIGV4cGVjdChhY3R1YWwpLm5vdC50b0VxdWFsKGV4
cGVjdGVkKTsKKyAgICAgICAgfSk7CisgICAgICAgIGl0KCdzaG91bGQgc2tpcCB1bnNldCBpbmRl
eGVzJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBleHBlY3RlZCA9IDI7CisgICAgICAgICAg
ICBhY3R1YWwgPSB0ZXN0U3ViamVjdC5pbmRleE9mKHVuZGVmaW5lZCk7CisgICAgICAgICAgICBl
eHBlY3QoYWN0dWFsKS50b0VxdWFsKGV4cGVjdGVkKTsKKyAgICAgICAgfSk7CisgICAgICAgIGl0
KCdzaG91bGQgdXNlIGEgc3RyaWN0IHRlc3QnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGFj
dHVhbCA9IHRlc3RTdWJqZWN0LmluZGV4T2YobnVsbCk7CisgICAgICAgICAgICBleHBlY3QoYWN0
dWFsKS50b0VxdWFsKDUpOworICAgICAgICAgICAgCisgICAgICAgICAgICBhY3R1YWwgPSB0ZXN0
U3ViamVjdC5pbmRleE9mKCcyJyk7CisgICAgICAgICAgICBleHBlY3QoYWN0dWFsKS50b0VxdWFs
KC0xKTsKKyAgICAgICAgfSk7CisgICAgICAgIGl0KCdzaG91bGQgc2tpcCB0aGUgZmlyc3QgaWYg
ZnJvbUluZGV4IGlzIHNldCcsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgZXhwZWN0KHRlc3RT
dWJqZWN0LmluZGV4T2YoMiwgMikpLnRvRXF1YWwoNik7CisgICAgICAgICAgICBleHBlY3QodGVz
dFN1YmplY3QuaW5kZXhPZigyLCAwKSkudG9FcXVhbCgwKTsKKyAgICAgICAgICAgIGV4cGVjdCh0
ZXN0U3ViamVjdC5pbmRleE9mKDIsIDYpKS50b0VxdWFsKDYpOworICAgICAgICB9KTsKKyAgICAg
ICAgaXQoJ3Nob3VsZCB3b3JrIHdpdGggbmVnYXRpdmUgZnJvbUluZGV4JywgZnVuY3Rpb24oKSB7
CisgICAgICAgICAgICBleHBlY3QodGVzdFN1YmplY3QuaW5kZXhPZigyLCAtMykpLnRvRXF1YWwo
Nik7CisgICAgICAgICAgICBleHBlY3QodGVzdFN1YmplY3QuaW5kZXhPZigyLCAtOSkpLnRvRXF1
YWwoMCk7CisgICAgICAgIH0pOworICAgICAgICBpdCgnc2hvdWxkIHdvcmsgd2l0aCBmcm9tSW5k
ZXggYmVpbmcgZ3JlYXRlciB0aGFuIHRoZSBsZW5ndGgnLCBmdW5jdGlvbigpIHsKKyAgICAgICAg
ICAgIGV4cGVjdCh0ZXN0U3ViamVjdC5pbmRleE9mKCdoZWonLCAyMCkpLnRvRXF1YWwoLTEpOwor
ICAgICAgICB9KTsKKyAgICAgICAgaXQoJ3Nob3VsZCB3b3JrIHdpdGggZnJvbUluZGV4IGJlaW5n
IG5lZ2F0aXZlIGFuZCBncmVhdGVyIHRoYW4gdGhlIGxlbmd0aCcsIGZ1bmN0aW9uKCkgeworICAg
ICAgICAgICAgZXhwZWN0KHRlc3RTdWJqZWN0LmluZGV4T2YoJ2hlaicsIC0yMCkpLnRvRXF1YWwo
NCk7CisgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAgZGVzY3JpYmUoJ0FycmF5LWxpa2Un
LCBmdW5jdGlvbiBBcnJheUxpa2UoKSB7CisgICAgICAgICAgICB2YXIgaW5kZXhPZiA9IEFycmF5
LnByb3RvdHlwZS5pbmRleE9mLAorICAgICAgICAgICAgICAgIHRlc3RBTDsKKyAgICAgICAgICAg
IGJlZm9yZUVhY2goZnVuY3Rpb24gYmVmb3JlRWFjaCgpIHsKKyAgICAgICAgICAgICAgICB0ZXN0
QUwgPSB7fTsKKyAgICAgICAgICAgICAgICB0ZXN0U3ViamVjdCA9IFsyLCAzLCB1bmRlZmluZWQs
IHRydWUsICdoZWonLCBudWxsLCAyLCBmYWxzZSwgMF07CisgICAgICAgICAgICAgICAgdGVzdFN1
YmplY3QuZm9yRWFjaChmdW5jdGlvbiAobyxpKSB7CisgICAgICAgICAgICAgICAgICAgIHRlc3RB
TFtpXSA9IG87CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgdGVzdEFMLmxl
bmd0aCA9IHRlc3RTdWJqZWN0Lmxlbmd0aDsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAg
aXQoJ3Nob3VsZCBmaW5kIHRoZSBlbGVtZW50IChhcnJheS1saWtlKScsIGZ1bmN0aW9uKCkgewor
ICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gNDsKKyAgICAgICAgICAgICAgICBhY3R1YWwgPSBp
bmRleE9mLmNhbGwodGVzdEFMLCAnaGVqJyk7CisgICAgICAgICAgICAgICAgZXhwZWN0KGFjdHVh
bCkudG9FcXVhbChleHBlY3RlZCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGl0KCdz
aG91bGQgbm90IGZpbmQgdGhlIGVsZW1lbnQgKGFycmF5LWxpa2UpJywgZnVuY3Rpb24oKSB7Cisg
ICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSAtMTsKKyAgICAgICAgICAgICAgICBhY3R1YWwgPSBp
bmRleE9mLmNhbGwodGVzdEFMLCAnbXVzJyk7CisgICAgICAgICAgICAgICAgZXhwZWN0KGFjdHVh
bCkudG9FcXVhbChleHBlY3RlZCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGl0KCdz
aG91bGQgZmluZCB1bmRlZmluZWQgYXMgd2VsbCAoYXJyYXktbGlrZSknLCBmdW5jdGlvbigpIHsK
KyAgICAgICAgICAgICAgICBleHBlY3RlZCA9IC0xOworICAgICAgICAgICAgICAgIGFjdHVhbCA9
IGluZGV4T2YuY2FsbCh0ZXN0QUwsIHVuZGVmaW5lZCk7CisgICAgICAgICAgICAgICAgZXhwZWN0
KGFjdHVhbCkubm90LnRvRXF1YWwoZXhwZWN0ZWQpOworICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICBpdCgnc2hvdWxkIHNraXAgdW5zZXQgaW5kZXhlcyAoYXJyYXktbGlrZSknLCBmdW5jdGlv
bigpIHsKKyAgICAgICAgICAgICAgICBleHBlY3RlZCA9IDI7CisgICAgICAgICAgICAgICAgYWN0
dWFsID0gaW5kZXhPZi5jYWxsKHRlc3RBTCwgdW5kZWZpbmVkKTsKKyAgICAgICAgICAgICAgICBl
eHBlY3QoYWN0dWFsKS50b0VxdWFsKGV4cGVjdGVkKTsKKyAgICAgICAgICAgIH0pOworICAgICAg
ICAgICAgaXQoJ3Nob3VsZCB1c2UgYSBzdHJpY3QgdGVzdCAoYXJyYXktbGlrZSknLCBmdW5jdGlv
bigpIHsKKyAgICAgICAgICAgICAgICBhY3R1YWwgPSBBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5j
YWxsKHRlc3RBTCwgbnVsbCk7CisgICAgICAgICAgICAgICAgZXhwZWN0KGFjdHVhbCkudG9FcXVh
bCg1KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBhY3R1YWwgPSBBcnJheS5w
cm90b3R5cGUuaW5kZXhPZi5jYWxsKHRlc3RBTCwgJzInKTsKKyAgICAgICAgICAgICAgICBleHBl
Y3QoYWN0dWFsKS50b0VxdWFsKC0xKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgaXQo
J3Nob3VsZCBza2lwIHRoZSBmaXJzdCBpZiBmcm9tSW5kZXggaXMgc2V0IChhcnJheS1saWtlKScs
IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGV4cGVjdChpbmRleE9mLmNhbGwodGVzdEFM
LCAyLCAyKSkudG9FcXVhbCg2KTsKKyAgICAgICAgICAgICAgICBleHBlY3QoaW5kZXhPZi5jYWxs
KHRlc3RBTCwgMiwgMCkpLnRvRXF1YWwoMCk7CisgICAgICAgICAgICAgICAgZXhwZWN0KGluZGV4
T2YuY2FsbCh0ZXN0QUwsIDIsIDYpKS50b0VxdWFsKDYpOworICAgICAgICAgICAgfSk7CisgICAg
ICAgICAgICBpdCgnc2hvdWxkIHdvcmsgd2l0aCBuZWdhdGl2ZSBmcm9tSW5kZXggKGFycmF5LWxp
a2UpJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgZXhwZWN0KGluZGV4T2YuY2FsbCh0
ZXN0QUwsIDIsIC0zKSkudG9FcXVhbCg2KTsKKyAgICAgICAgICAgICAgICBleHBlY3QoaW5kZXhP
Zi5jYWxsKHRlc3RBTCwgMiwgLTkpKS50b0VxdWFsKDApOworICAgICAgICAgICAgfSk7CisgICAg
ICAgICAgICBpdCgnc2hvdWxkIHdvcmsgd2l0aCBmcm9tSW5kZXggYmVpbmcgZ3JlYXRlciB0aGFu
IHRoZSBsZW5ndGggKGFycmF5LWxpa2UpJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAg
ZXhwZWN0KGluZGV4T2YuY2FsbCh0ZXN0QUwsICdoZWonLCAyMCkpLnRvRXF1YWwoLTEpOworICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICBpdCgnc2hvdWxkIHdvcmsgd2l0aCBmcm9tSW5kZXgg
YmVpbmcgbmVnYXRpdmUgYW5kIGdyZWF0ZXIgdGhhbiB0aGUgbGVuZ3RoIChhcnJheS1saWtlKScs
IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGV4cGVjdChpbmRleE9mLmNhbGwodGVzdEFM
LCAnaGVqJywgLTIwKSkudG9FcXVhbCg0KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsK
KyAgICB9KTsKKyAgICBkZXNjcmliZSgnbGFzdEluZGV4T2YnLCBmdW5jdGlvbigpIHsKKyAgICAg
ICAgInVzZSBzdHJpY3QiOworICAgICAgICB2YXIgYWN0dWFsLCBleHBlY3RlZCwgdGVzdFN1Ympl
Y3QsIHRlc3RBTDsKKyAgICAgICAgCisgICAgICAgIGJlZm9yZUVhY2goZnVuY3Rpb24oKSB7Cisg
ICAgICAgICAgICB0ZXN0U3ViamVjdCA9IFsyLCAzLCB1bmRlZmluZWQsIHRydWUsICdoZWonLCBu
dWxsLCAyLCAzLCBmYWxzZSwgMF07CisgICAgICAgICAgICBkZWxldGUgdGVzdFN1YmplY3RbMV07
CisgICAgICAgICAgICBkZWxldGUgdGVzdFN1YmplY3RbN107CisgICAgICAgIH0pOworICAgICAg
ICBkZXNjcmliZSgnQXJyYXknLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGl0KCdzaG91bGQg
ZmluZCB0aGUgZWxlbWVudCcsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGV4cGVjdGVk
ID0gNDsKKyAgICAgICAgICAgICAgICBhY3R1YWwgPSB0ZXN0U3ViamVjdC5sYXN0SW5kZXhPZign
aGVqJyk7CisgICAgICAgICAgICAgICAgZXhwZWN0KGFjdHVhbCkudG9FcXVhbChleHBlY3RlZCk7
CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGl0KCdzaG91bGQgbm90IGZpbmQgdGhlIGVs
ZW1lbnQnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBleHBlY3RlZCA9IC0xOworICAg
ICAgICAgICAgICAgIGFjdHVhbCA9IHRlc3RTdWJqZWN0Lmxhc3RJbmRleE9mKCdtdXMnKTsKKyAg
ICAgICAgICAgICAgICBleHBlY3QoYWN0dWFsKS50b0VxdWFsKGV4cGVjdGVkKTsKKyAgICAgICAg
ICAgIH0pOworICAgICAgICAgICAgaXQoJ3Nob3VsZCBmaW5kIHVuZGVmaW5lZCBhcyB3ZWxsJywg
ZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSAtMTsKKyAgICAgICAgICAg
ICAgICBhY3R1YWwgPSB0ZXN0U3ViamVjdC5sYXN0SW5kZXhPZih1bmRlZmluZWQpOworICAgICAg
ICAgICAgICAgIGV4cGVjdChhY3R1YWwpLm5vdC50b0VxdWFsKGV4cGVjdGVkKTsKKyAgICAgICAg
ICAgIH0pOworICAgICAgICAgICAgaXQoJ3Nob3VsZCBza2lwIHVuc2V0IGluZGV4ZXMnLCBmdW5j
dGlvbigpIHsKKyAgICAgICAgICAgICAgICBleHBlY3RlZCA9IDI7CisgICAgICAgICAgICAgICAg
YWN0dWFsID0gdGVzdFN1YmplY3QubGFzdEluZGV4T2YodW5kZWZpbmVkKTsKKyAgICAgICAgICAg
ICAgICBleHBlY3QoYWN0dWFsKS50b0VxdWFsKGV4cGVjdGVkKTsKKyAgICAgICAgICAgIH0pOwor
ICAgICAgICAgICAgaXQoJ3Nob3VsZCB1c2UgYSBzdHJpY3QgdGVzdCcsIGZ1bmN0aW9uKCkgewor
ICAgICAgICAgICAgICAgIGFjdHVhbCA9IHRlc3RTdWJqZWN0Lmxhc3RJbmRleE9mKG51bGwpOwor
ICAgICAgICAgICAgICAgIGV4cGVjdChhY3R1YWwpLnRvRXF1YWwoNSk7CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgYWN0dWFsID0gdGVzdFN1YmplY3QubGFzdEluZGV4T2YoJzIn
KTsKKyAgICAgICAgICAgICAgICBleHBlY3QoYWN0dWFsKS50b0VxdWFsKC0xKTsKKyAgICAgICAg
ICAgIH0pOworICAgICAgICAgICAgaXQoJ3Nob3VsZCBza2lwIHRoZSBmaXJzdCBpZiBmcm9tSW5k
ZXggaXMgc2V0JywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgZXhwZWN0KHRlc3RTdWJq
ZWN0Lmxhc3RJbmRleE9mKDIsIDIpKS50b0VxdWFsKDApOworICAgICAgICAgICAgICAgIGV4cGVj
dCh0ZXN0U3ViamVjdC5sYXN0SW5kZXhPZigyLCAwKSkudG9FcXVhbCgwKTsKKyAgICAgICAgICAg
ICAgICBleHBlY3QodGVzdFN1YmplY3QubGFzdEluZGV4T2YoMiwgNikpLnRvRXF1YWwoNik7Cisg
ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGl0KCdzaG91bGQgd29yayB3aXRoIG5lZ2F0aXZl
IGZyb21JbmRleCcsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGV4cGVjdCh0ZXN0U3Vi
amVjdC5sYXN0SW5kZXhPZigyLCAtMykpLnRvRXF1YWwoNik7CisgICAgICAgICAgICAgICAgZXhw
ZWN0KHRlc3RTdWJqZWN0Lmxhc3RJbmRleE9mKDIsIC05KSkudG9FcXVhbCgwKTsKKyAgICAgICAg
ICAgIH0pOworICAgICAgICAgICAgaXQoJ3Nob3VsZCB3b3JrIHdpdGggZnJvbUluZGV4IGJlaW5n
IGdyZWF0ZXIgdGhhbiB0aGUgbGVuZ3RoJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAg
ZXhwZWN0KHRlc3RTdWJqZWN0Lmxhc3RJbmRleE9mKDIsIDIwKSkudG9FcXVhbCg2KTsKKyAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgaXQoJ3Nob3VsZCB3b3JrIHdpdGggZnJvbUluZGV4IGJl
aW5nIG5lZ2F0aXZlIGFuZCBncmVhdGVyIHRoYW4gdGhlIGxlbmd0aCcsIGZ1bmN0aW9uKCkgewor
ICAgICAgICAgICAgICAgIGV4cGVjdCh0ZXN0U3ViamVjdC5sYXN0SW5kZXhPZigyLCAtMjApKS50
b0VxdWFsKC0xKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICAKKyAgICAgICAg
ZGVzY3JpYmUoJ0FycmF5IGxpa2UnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHZhciBsYXN0
SW5kZXhPZiA9IEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZiwKKyAgICAgICAgICAgICAgICB0
ZXN0QUw7CisgICAgICAgICAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAg
ICAgIHRlc3RBTCA9IHt9OworICAgICAgICAgICAgICAgIHRlc3RTdWJqZWN0LmZvckVhY2goZnVu
Y3Rpb24gKG8saSkgeworICAgICAgICAgICAgICAgICAgICB0ZXN0QUxbaV0gPSBvOworICAgICAg
ICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIHRlc3RBTC5sZW5ndGggPSB0ZXN0U3ViamVj
dC5sZW5ndGg7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGl0KCdzaG91bGQgZmluZCB0
aGUgZWxlbWVudCAoYXJyYXktbGlrZSknLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBl
eHBlY3RlZCA9IDQ7CisgICAgICAgICAgICAgICAgYWN0dWFsID0gbGFzdEluZGV4T2YuY2FsbCh0
ZXN0QUwsICdoZWonKTsKKyAgICAgICAgICAgICAgICBleHBlY3QoYWN0dWFsKS50b0VxdWFsKGV4
cGVjdGVkKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgaXQoJ3Nob3VsZCBub3QgZmlu
ZCB0aGUgZWxlbWVudCAoYXJyYXktbGlrZSknLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAg
ICBleHBlY3RlZCA9IC0xOworICAgICAgICAgICAgICAgIGFjdHVhbCA9IGxhc3RJbmRleE9mLmNh
bGwodGVzdEFMLCAnbXVzJyk7CisgICAgICAgICAgICAgICAgZXhwZWN0KGFjdHVhbCkudG9FcXVh
bChleHBlY3RlZCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGl0KCdzaG91bGQgZmlu
ZCB1bmRlZmluZWQgYXMgd2VsbCAoYXJyYXktbGlrZSknLCBmdW5jdGlvbigpIHsKKyAgICAgICAg
ICAgICAgICBleHBlY3RlZCA9IC0xOworICAgICAgICAgICAgICAgIGFjdHVhbCA9IGxhc3RJbmRl
eE9mLmNhbGwodGVzdEFMLCB1bmRlZmluZWQpOworICAgICAgICAgICAgICAgIGV4cGVjdChhY3R1
YWwpLm5vdC50b0VxdWFsKGV4cGVjdGVkKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAg
aXQoJ3Nob3VsZCBza2lwIHVuc2V0IGluZGV4ZXMgKGFycmF5LWxpa2UpJywgZnVuY3Rpb24oKSB7
CisgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSAyOworICAgICAgICAgICAgICAgIGFjdHVhbCA9
IGxhc3RJbmRleE9mLmNhbGwodGVzdEFMLCB1bmRlZmluZWQpOworICAgICAgICAgICAgICAgIGV4
cGVjdChhY3R1YWwpLnRvRXF1YWwoZXhwZWN0ZWQpOworICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICBpdCgnc2hvdWxkIHVzZSBhIHN0cmljdCB0ZXN0IChhcnJheS1saWtlKScsIGZ1bmN0aW9u
KCkgeworICAgICAgICAgICAgICAgIGFjdHVhbCA9IGxhc3RJbmRleE9mLmNhbGwodGVzdEFMLCBu
dWxsKTsKKyAgICAgICAgICAgICAgICBleHBlY3QoYWN0dWFsKS50b0VxdWFsKDUpOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIGFjdHVhbCA9IGxhc3RJbmRleE9mLmNhbGwodGVz
dEFMLCAnMicpOworICAgICAgICAgICAgICAgIGV4cGVjdChhY3R1YWwpLnRvRXF1YWwoLTEpOwor
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBpdCgnc2hvdWxkIHNraXAgdGhlIGZpcnN0IGlm
IGZyb21JbmRleCBpcyBzZXQnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBleHBlY3Qo
bGFzdEluZGV4T2YuY2FsbCh0ZXN0QUwsIDIsIDIpKS50b0VxdWFsKDApOworICAgICAgICAgICAg
ICAgIGV4cGVjdChsYXN0SW5kZXhPZi5jYWxsKHRlc3RBTCwgMiwgMCkpLnRvRXF1YWwoMCk7Cisg
ICAgICAgICAgICAgICAgZXhwZWN0KGxhc3RJbmRleE9mLmNhbGwodGVzdEFMLCAyLCA2KSkudG9F
cXVhbCg2KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgaXQoJ3Nob3VsZCB3b3JrIHdp
dGggbmVnYXRpdmUgZnJvbUluZGV4JywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgZXhw
ZWN0KGxhc3RJbmRleE9mLmNhbGwodGVzdEFMLCAyLCAtMykpLnRvRXF1YWwoNik7CisgICAgICAg
ICAgICAgICAgZXhwZWN0KGxhc3RJbmRleE9mLmNhbGwodGVzdEFMLCAyLCAtOSkpLnRvRXF1YWwo
MCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGl0KCdzaG91bGQgd29yayB3aXRoIGZy
b21JbmRleCBiZWluZyBncmVhdGVyIHRoYW4gdGhlIGxlbmd0aCcsIGZ1bmN0aW9uKCkgeworICAg
ICAgICAgICAgICAgIGV4cGVjdChsYXN0SW5kZXhPZi5jYWxsKHRlc3RBTCwgMiwgMjApKS50b0Vx
dWFsKDYpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBpdCgnc2hvdWxkIHdvcmsgd2l0
aCBmcm9tSW5kZXggYmVpbmcgbmVnYXRpdmUgYW5kIGdyZWF0ZXIgdGhhbiB0aGUgbGVuZ3RoJywg
ZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgZXhwZWN0KGxhc3RJbmRleE9mLmNhbGwodGVz
dEFMLCAyLCAtMjApKS50b0VxdWFsKC0xKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsK
KyAgICB9KTsKKyAgICAKKyAgICBkZXNjcmliZSgnZmlsdGVyJywgZnVuY3Rpb24oKSB7CisgICAg
ICAgIHZhciBmaWx0ZXJlZEFycmF5LAorICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiBj
YWxsYmFjayhvLCBpLCBhcnIpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gKAorICAgICAgICAg
ICAgICAgICAgICBpICE9IDMgJiYgaSAhPSA1CisgICAgICAgICAgICAgICAgKTsKKyAgICAgICAg
ICAgIH07CisgICAgICAgIAorICAgICAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uKCkgeworICAgICAg
ICAgICAgdGVzdFN1YmplY3QgPSBbMiwgMywgdW5kZWZpbmVkLCB0cnVlLCAnaGVqJywgMywgbnVs
bCwgZmFsc2UsIDBdOworICAgICAgICAgICAgZGVsZXRlIHRlc3RTdWJqZWN0WzFdOworICAgICAg
ICAgICAgZmlsdGVyZWRBcnJheSA9IFsyLCB1bmRlZmluZWQsICdoZWonLCBudWxsLCBmYWxzZSwg
MF07CisgICAgICAgIH0pOworICAgICAgICBkZXNjcmliZSgnQXJyYXkgb2JqZWN0JywgZnVuY3Rp
b24oKSB7CisKKyAgICAgICAgICAgIGl0KCdzaG91bGQgY2FsbCB0aGUgY2FsbGJhY2sgd2l0aCB0
aGUgcHJvcGVyIGFyZ3VtZW50cycsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHZhciBj
YWxsYmFjayA9IGphc21pbmUuY3JlYXRlU3B5KCdjYWxsYmFjaycpLAorICAgICAgICAgICAgICAg
ICAgICBhcnIgPSBbJzEnXTsKKyAgICAgICAgICAgICAgICBhcnIuZmlsdGVyKGNhbGxiYWNrKTsK
KyAgICAgICAgICAgICAgICBleHBlY3QoY2FsbGJhY2spLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKCcx
JywgMCwgYXJyKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgaXQoJ3Nob3VsZCBub3Qg
YWZmZWN0IGVsZW1lbnRzIGFkZGVkIHRvIHRoZSBhcnJheSBhZnRlciBpdCBoYXMgYmVndW4nLCBm
dW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICB2YXIgYXJyID0gWzEsMiwzXSwKKyAgICAgICAg
ICAgICAgICAgICAgaSA9IDA7CisgICAgICAgICAgICAgICAgYXJyLmZpbHRlcihmdW5jdGlvbihh
KSB7CisgICAgICAgICAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICAgICAgICAgICAgaWYoaSA8
PSA0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhcnIucHVzaChhKzMpOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgICAgIGV4cGVjdChhcnIpLnRvRXF1YWwoWzEsMiwzLDQs
NSw2XSk7CisgICAgICAgICAgICAgICAgZXhwZWN0KGkpLnRvQmUoMyk7CisgICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgIGl0KCdzaG91bGQgc2tpcCBub24tc2V0IHZhbHVlcycsIGZ1bmN0aW9u
KCkgeworICAgICAgICAgICAgICAgIHZhciBwYXNzZWRWYWx1ZXMgPSB7fTsKKyAgICAgICAgICAg
ICAgICB0ZXN0U3ViamVjdCA9IFsxLDIsMyw0XTsKKyAgICAgICAgICAgICAgICBkZWxldGUgdGVz
dFN1YmplY3RbMV07CisgICAgICAgICAgICAgICAgdGVzdFN1YmplY3QuZmlsdGVyKGZ1bmN0aW9u
KG8sIGkpIHsKKyAgICAgICAgICAgICAgICAgICAgcGFzc2VkVmFsdWVzW2ldID0gbzsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICAgICAgZXhwZWN0KHBhc3NlZFZhbHVlcykudG9FeGFjdGx5TWF0Y2godGVzdFN1YmplY3Qp
OworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBpdCgnc2hvdWxkIHBhc3MgdGhlIHJpZ2h0
IGNvbnRleHQgdG8gdGhlIGZpbHRlcicsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHZh
ciBwYXNzZWRWYWx1ZXMgPSB7fTsKKyAgICAgICAgICAgICAgICB0ZXN0U3ViamVjdCA9IFsxLDIs
Myw0XTsKKyAgICAgICAgICAgICAgICBkZWxldGUgdGVzdFN1YmplY3RbMV07CisgICAgICAgICAg
ICAgICAgdGVzdFN1YmplY3QuZmlsdGVyKGZ1bmN0aW9uKG8sIGkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgdGhpc1tpXSA9IG87CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICAgICAgICAgIH0sIHBhc3NlZFZhbHVlcyk7CisgICAgICAgICAgICAgICAgZXhwZWN0KHBh
c3NlZFZhbHVlcykudG9FeGFjdGx5TWF0Y2godGVzdFN1YmplY3QpOworICAgICAgICAgICAgfSk7
CisgICAgICAgICAgICBpdCgnc2hvdWxkIHNldCB0aGUgcmlnaHQgY29udGV4dCB3aGVuIGdpdmVu
IG5vbmUnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICB2YXIgY29udGV4dDsKKyAgICAg
ICAgICAgICAgICBbMV0uZmlsdGVyKGZ1bmN0aW9uKCkge2NvbnRleHQgPSB0aGlzO30pOworICAg
ICAgICAgICAgICAgIGV4cGVjdChjb250ZXh0KS50b0JlKGZ1bmN0aW9uKCkge3JldHVybiB0aGlz
fS5jYWxsKCkpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBpdCgnc2hvdWxkIHJlbW92
ZSBvbmx5IHRoZSB2YWx1ZXMgZm9yIHdoaWNoIHRoZSBjYWxsYmFjayByZXR1cm5zIGZhbHNlJywg
ZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHRlc3RTdWJqZWN0LmZp
bHRlcihjYWxsYmFjayk7CisgICAgICAgICAgICAgICAgZXhwZWN0KHJlc3VsdCkudG9FeGFjdGx5
TWF0Y2goZmlsdGVyZWRBcnJheSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGl0KCdz
aG91bGQgbGVhdmUgdGhlIG9yaWdpbmFsIGFycmF5IHVudG91Y2hlZCcsIGZ1bmN0aW9uKCkgewor
ICAgICAgICAgICAgICAgIHZhciBjb3B5ID0gdGVzdFN1YmplY3Quc2xpY2UoKTsKKyAgICAgICAg
ICAgICAgICB0ZXN0U3ViamVjdC5maWx0ZXIoY2FsbGJhY2spOworICAgICAgICAgICAgICAgIGV4
cGVjdCh0ZXN0U3ViamVjdCkudG9FeGFjdGx5TWF0Y2goY29weSk7CisgICAgICAgICAgICB9KTsK
KyAgICAgICAgICAgIGl0KCdzaG91bGQgbm90IGJlIGFmZmVjdGVkIGJ5IHNhbWUtaW5kZXggbXV0
YXRpb24nLCBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSBbMSwg
MiwgM10KKyAgICAgICAgICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGFy
cmF5KSB7CisgICAgICAgICAgICAgICAgICAgIGFycmF5W2luZGV4XSA9ICdhJzsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAg
ICAgICAgZXhwZWN0KHJlc3VsdHMpLnRvRXF1YWwoWzEsIDIsIDNdKTsKKyAgICAgICAgICAgIH0p
OworICAgICAgICB9KTsKKyAgICAgICAgZGVzY3JpYmUoJ0FycmF5IGxpa2UnLCBmdW5jdGlvbigp
IHsKKyAgICAgICAgICAgIGJlZm9yZUVhY2goZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAg
dGVzdFN1YmplY3QgPSBjcmVhdGVBcnJheUxpa2VGcm9tQXJyYXkodGVzdFN1YmplY3QpOworICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICBpdCgnc2hvdWxkIGNhbGwgdGhlIGNhbGxiYWNrIHdp
dGggdGhlIHByb3BlciBhcmd1bWVudHMnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICB2
YXIgY2FsbGJhY2sgPSBqYXNtaW5lLmNyZWF0ZVNweSgnY2FsbGJhY2snKSwKKyAgICAgICAgICAg
ICAgICAgICAgYXJyID0gY3JlYXRlQXJyYXlMaWtlRnJvbUFycmF5KFsnMSddKTsKKyAgICAgICAg
ICAgICAgICBBcnJheS5wcm90b3R5cGUuZmlsdGVyLmNhbGwoYXJyLCBjYWxsYmFjayk7CisgICAg
ICAgICAgICAgICAgZXhwZWN0KGNhbGxiYWNrKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgnMScsIDAs
IGFycik7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGl0KCdzaG91bGQgbm90IGFmZmVj
dCBlbGVtZW50cyBhZGRlZCB0byB0aGUgYXJyYXkgYWZ0ZXIgaXQgaGFzIGJlZ3VuJywgZnVuY3Rp
b24oKSB7CisgICAgICAgICAgICAgICAgdmFyIGFyciA9IGNyZWF0ZUFycmF5TGlrZUZyb21BcnJh
eShbMSwyLDNdKSwKKyAgICAgICAgICAgICAgICAgICAgaSA9IDA7CisgICAgICAgICAgICAgICAg
QXJyYXkucHJvdG90eXBlLmZpbHRlci5jYWxsKGFyciwgZnVuY3Rpb24oYSkgeworICAgICAgICAg
ICAgICAgICAgICBpKys7CisgICAgICAgICAgICAgICAgICAgIGlmKGkgPD0gNCkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgYXJyW2krMl0gPSBhKzM7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfSk7Cisg
ICAgICAgICAgICAgICAgZGVsZXRlIGFyci5sZW5ndGg7CisgICAgICAgICAgICAgICAgZXhwZWN0
KGFycikudG9FeGFjdGx5TWF0Y2goWzEsMiwzLDQsNSw2XSk7CisgICAgICAgICAgICAgICAgZXhw
ZWN0KGkpLnRvQmUoMyk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGl0KCdzaG91bGQg
c2tpcCBub24tc2V0IHZhbHVlcycsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHZhciBw
YXNzZWRWYWx1ZXMgPSB7fTsKKyAgICAgICAgICAgICAgICB0ZXN0U3ViamVjdCA9IGNyZWF0ZUFy
cmF5TGlrZUZyb21BcnJheShbMSwyLDMsNF0pOworICAgICAgICAgICAgICAgIGRlbGV0ZSB0ZXN0
U3ViamVjdFsxXTsKKyAgICAgICAgICAgICAgICBBcnJheS5wcm90b3R5cGUuZmlsdGVyLmNhbGwo
dGVzdFN1YmplY3QsIGZ1bmN0aW9uKG8sIGkpIHsKKyAgICAgICAgICAgICAgICAgICAgcGFzc2Vk
VmFsdWVzW2ldID0gbzsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgZGVsZXRlIHRlc3RTdWJqZWN0Lmxlbmd0aDsK
KyAgICAgICAgICAgICAgICBleHBlY3QocGFzc2VkVmFsdWVzKS50b0V4YWN0bHlNYXRjaCh0ZXN0
U3ViamVjdCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGl0KCdzaG91bGQgc2V0IHRo
ZSByaWdodCBjb250ZXh0IHdoZW4gZ2l2ZW4gbm9uZScsIGZ1bmN0aW9uKCkgeworICAgICAgICAg
ICAgICAgIHZhciBjb250ZXh0OworICAgICAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5maWx0
ZXIuY2FsbChjcmVhdGVBcnJheUxpa2VGcm9tQXJyYXkoWzFdKSwgZnVuY3Rpb24oKSB7Y29udGV4
dCA9IHRoaXM7fSwgdW5kZWZpbmVkKTsKKyAgICAgICAgICAgICAgICBleHBlY3QoY29udGV4dCku
dG9CZShmdW5jdGlvbigpIHtyZXR1cm4gdGhpc30uY2FsbCgpKTsKKyAgICAgICAgICAgIH0pOwor
ICAgICAgICAgICAgaXQoJ3Nob3VsZCBwYXNzIHRoZSByaWdodCBjb250ZXh0IHRvIHRoZSBmaWx0
ZXInLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICB2YXIgcGFzc2VkVmFsdWVzID0ge307
CisgICAgICAgICAgICAgICAgdGVzdFN1YmplY3QgPSBjcmVhdGVBcnJheUxpa2VGcm9tQXJyYXko
WzEsMiwzLDRdKTsKKyAgICAgICAgICAgICAgICBkZWxldGUgdGVzdFN1YmplY3RbMV07CisgICAg
ICAgICAgICAgICAgQXJyYXkucHJvdG90eXBlLmZpbHRlci5jYWxsKHRlc3RTdWJqZWN0LCBmdW5j
dGlvbihvLCBpKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXNbaV0gPSBvOworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9LCBwYXNzZWRWYWx1ZXMp
OworICAgICAgICAgICAgICAgIGRlbGV0ZSB0ZXN0U3ViamVjdC5sZW5ndGg7CisgICAgICAgICAg
ICAgICAgZXhwZWN0KHBhc3NlZFZhbHVlcykudG9FeGFjdGx5TWF0Y2godGVzdFN1YmplY3QpOwor
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBpdCgnc2hvdWxkIHJlbW92ZSBvbmx5IHRoZSB2
YWx1ZXMgZm9yIHdoaWNoIHRoZSBjYWxsYmFjayByZXR1cm5zIGZhbHNlJywgZnVuY3Rpb24oKSB7
CisgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IEFycmF5LnByb3RvdHlwZS5maWx0ZXIuY2Fs
bCh0ZXN0U3ViamVjdCwgY2FsbGJhY2spOworICAgICAgICAgICAgICAgIGV4cGVjdChyZXN1bHQp
LnRvRXhhY3RseU1hdGNoKGZpbHRlcmVkQXJyYXkpOworICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICBpdCgnc2hvdWxkIGxlYXZlIHRoZSBvcmlnaW5hbCBhcnJheSB1bnRvdWNoZWQnLCBmdW5j
dGlvbigpIHsKKyAgICAgICAgICAgICAgICB2YXIgY29weSA9IGNyZWF0ZUFycmF5TGlrZUZyb21B
cnJheSh0ZXN0U3ViamVjdCk7CisgICAgICAgICAgICAgICAgQXJyYXkucHJvdG90eXBlLmZpbHRl
ci5jYWxsKHRlc3RTdWJqZWN0LCBjYWxsYmFjayk7CisgICAgICAgICAgICAgICAgZXhwZWN0KHRl
c3RTdWJqZWN0KS50b0V4YWN0bHlNYXRjaChjb3B5KTsKKyAgICAgICAgICAgIH0pOworICAgICAg
ICB9KTsKKyAgICB9KTsKKyAgICBkZXNjcmliZSgnbWFwJywgZnVuY3Rpb24oKSB7CisgICAgICAg
IHZhciBjYWxsYmFjazsKKyAgICAgICAgYmVmb3JlRWFjaChmdW5jdGlvbigpIHsKKyAgICAgICAg
ICAgIHZhciBpID0gMDsKKyAgICAgICAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24oKSB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGkrKzsKKyAgICAgICAgICAgIH07CisgICAgICAgIH0pOworICAg
ICAgICBkZXNjcmliZSgnQXJyYXkgb2JqZWN0JywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBp
dCgnc2hvdWxkIGNhbGwgY2FsbGJhY2sgd2l0aCB0aGUgcmlnaHQgcGFyYW1ldGVycycsIGZ1bmN0
aW9uKCkgeworICAgICAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGphc21pbmUuY3JlYXRlU3B5
KCdjYWxsYmFjaycpLAorICAgICAgICAgICAgICAgICAgICBhcnJheSA9IFsxXTsKKyAgICAgICAg
ICAgICAgICBhcnJheS5tYXAoY2FsbGJhY2spOworICAgICAgICAgICAgICAgIGV4cGVjdChjYWxs
YmFjaykudG9IYXZlQmVlbkNhbGxlZFdpdGgoMSwgMCwgYXJyYXkpOworICAgICAgICAgICAgfSk7
CisgICAgICAgICAgICBpdCgnc2hvdWxkIHNldCB0aGUgY29udGV4dCBjb3JyZWN0bHknLCBmdW5j
dGlvbigpIHsKKyAgICAgICAgICAgICAgICB2YXIgY29udGV4dCA9IHt9OworICAgICAgICAgICAg
ICAgIHRlc3RTdWJqZWN0Lm1hcChmdW5jdGlvbihvLGkpIHsKKyAgICAgICAgICAgICAgICAgICAg
dGhpc1tpXSA9IG87CisgICAgICAgICAgICAgICAgfSwgY29udGV4dCk7CisgICAgICAgICAgICAg
ICAgZXhwZWN0KGNvbnRleHQpLnRvRXhhY3RseU1hdGNoKHRlc3RTdWJqZWN0KTsKKyAgICAgICAg
ICAgIH0pOworICAgICAgICAgICAgaXQoJ3Nob3VsZCBzZXQgdGhlIHJpZ2h0IGNvbnRleHQgd2hl
biBnaXZlbiBub25lJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdmFyIGNvbnRleHQ7
CisgICAgICAgICAgICAgICAgWzFdLm1hcChmdW5jdGlvbigpIHtjb250ZXh0ID0gdGhpczt9KTsK
KyAgICAgICAgICAgICAgICBleHBlY3QoY29udGV4dCkudG9CZShmdW5jdGlvbigpIHtyZXR1cm4g
dGhpc30uY2FsbCgpKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgaXQoJ3Nob3VsZCBu
b3QgY2hhbmdlIHRoZSBhcnJheSBpdCBpcyBjYWxsZWQgb24nLCBmdW5jdGlvbigpIHsKKyAgICAg
ICAgICAgICAgICB2YXIgY29weSA9IHRlc3RTdWJqZWN0LnNsaWNlKCk7CisgICAgICAgICAgICAg
ICAgdGVzdFN1YmplY3QubWFwKGNhbGxiYWNrKTsKKyAgICAgICAgICAgICAgICBleHBlY3QodGVz
dFN1YmplY3QpLnRvRXhhY3RseU1hdGNoKGNvcHkpOworICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICBpdCgnc2hvdWxkIG9ubHkgcnVuIGZvciB0aGUgbnVtYmVyIG9mIG9iamVjdHMgaW4gdGhl
IGFycmF5IHdoZW4gaXQgc3RhcnRlZCcsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHZh
ciBhcnIgPSBbMSwyLDNdLAorICAgICAgICAgICAgICAgICAgICBpID0gMDsKKyAgICAgICAgICAg
ICAgICBhcnIubWFwKGZ1bmN0aW9uKG8pIHsKKyAgICAgICAgICAgICAgICAgICAgYXJyLnB1c2go
byszKTsKKyAgICAgICAgICAgICAgICAgICAgaSsrOworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gbzsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICBleHBlY3QoYXJyKS50
b0V4YWN0bHlNYXRjaChbMSwyLDMsNCw1LDZdKTsKKyAgICAgICAgICAgICAgICBleHBlY3QoaSku
dG9CZSgzKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgaXQoJ3Nob3VsZCBwcm9wZXJs
eSB0cmFuc2xhdGUgdGhlIHZhbHVlcyBhcyBhY2NvcmRpbmcgdG8gdGhlIGNhbGxiYWNrJywgZnVu
Y3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHRlc3RTdWJqZWN0Lm1hcChj
YWxsYmFjayksCisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gWzAsMCwxLDIsMyw0LDUs
Nl07CisgICAgICAgICAgICAgICAgZGVsZXRlIGV4cGVjdGVkWzFdOworICAgICAgICAgICAgICAg
IGV4cGVjdChyZXN1bHQpLnRvRXhhY3RseU1hdGNoKGV4cGVjdGVkKTsKKyAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgaXQoJ3Nob3VsZCBza2lwIG5vbi1leGlzdGluZyB2YWx1ZXMnLCBmdW5j
dGlvbigpIHsKKyAgICAgICAgICAgICAgICB2YXIgYXJyYXkgPSBbMSwyLDMsNF0sIAorICAgICAg
ICAgICAgICAgICAgICBpID0gMDsKKyAgICAgICAgICAgICAgICBkZWxldGUgYXJyYXlbMl07Cisg
ICAgICAgICAgICAgICAgYXJyYXkubWFwKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAg
ICBpKys7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgZXhwZWN0KGkpLnRv
QmUoMyk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgICAgIGRlc2NyaWJlKCdB
cnJheS1saWtlJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBiZWZvcmVFYWNoKGZ1bmN0aW9u
KCkgeworICAgICAgICAgICAgICAgIHRlc3RTdWJqZWN0ID0gY3JlYXRlQXJyYXlMaWtlRnJvbUFy
cmF5KHRlc3RTdWJqZWN0KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgaXQoJ3Nob3Vs
ZCBjYWxsIGNhbGxiYWNrIHdpdGggdGhlIHJpZ2h0IHBhcmFtZXRlcnMnLCBmdW5jdGlvbigpIHsK
KyAgICAgICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBqYXNtaW5lLmNyZWF0ZVNweSgnY2FsbGJh
Y2snKSwKKyAgICAgICAgICAgICAgICAgICAgYXJyYXkgPSBjcmVhdGVBcnJheUxpa2VGcm9tQXJy
YXkoWzFdKTsKKyAgICAgICAgICAgICAgICBBcnJheS5wcm90b3R5cGUubWFwLmNhbGwoYXJyYXks
IGNhbGxiYWNrKTsKKyAgICAgICAgICAgICAgICBleHBlY3QoY2FsbGJhY2spLnRvSGF2ZUJlZW5D
YWxsZWRXaXRoKDEsIDAsIGFycmF5KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgaXQo
J3Nob3VsZCBzZXQgdGhlIGNvbnRleHQgY29ycmVjdGx5JywgZnVuY3Rpb24oKSB7CisgICAgICAg
ICAgICAgICAgdmFyIGNvbnRleHQgPSB7fTsKKyAgICAgICAgICAgICAgICBBcnJheS5wcm90b3R5
cGUubWFwLmNhbGwodGVzdFN1YmplY3QsIGZ1bmN0aW9uKG8saSkgeworICAgICAgICAgICAgICAg
ICAgICB0aGlzW2ldID0gbzsKKyAgICAgICAgICAgICAgICB9LCBjb250ZXh0KTsKKyAgICAgICAg
ICAgICAgICBkZWxldGUgdGVzdFN1YmplY3QubGVuZ3RoOworICAgICAgICAgICAgICAgIGV4cGVj
dChjb250ZXh0KS50b0V4YWN0bHlNYXRjaCh0ZXN0U3ViamVjdCk7CisgICAgICAgICAgICB9KTsK
KyAgICAgICAgICAgIGl0KCdzaG91bGQgc2V0IHRoZSByaWdodCBjb250ZXh0IHdoZW4gZ2l2ZW4g
bm9uZScsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHZhciBjb250ZXh0OworICAgICAg
ICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5tYXAuY2FsbChjcmVhdGVBcnJheUxpa2VGcm9tQXJy
YXkoWzFdKSwgZnVuY3Rpb24oKSB7Y29udGV4dCA9IHRoaXM7fSk7CisgICAgICAgICAgICAgICAg
ZXhwZWN0KGNvbnRleHQpLnRvQmUoZnVuY3Rpb24oKSB7cmV0dXJuIHRoaXN9LmNhbGwoKSk7Cisg
ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGl0KCdzaG91bGQgbm90IGNoYW5nZSB0aGUgYXJy
YXkgaXQgaXMgY2FsbGVkIG9uJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdmFyIGNv
cHkgPSBjcmVhdGVBcnJheUxpa2VGcm9tQXJyYXkodGVzdFN1YmplY3QpOworICAgICAgICAgICAg
ICAgIEFycmF5LnByb3RvdHlwZS5tYXAuY2FsbCh0ZXN0U3ViamVjdCwgY2FsbGJhY2spOworICAg
ICAgICAgICAgICAgIGV4cGVjdCh0ZXN0U3ViamVjdCkudG9FeGFjdGx5TWF0Y2goY29weSk7Cisg
ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGl0KCdzaG91bGQgb25seSBydW4gZm9yIHRoZSBu
dW1iZXIgb2Ygb2JqZWN0cyBpbiB0aGUgYXJyYXkgd2hlbiBpdCBzdGFydGVkJywgZnVuY3Rpb24o
KSB7CisgICAgICAgICAgICAgICAgdmFyIGFyciA9IGNyZWF0ZUFycmF5TGlrZUZyb21BcnJheShb
MSwyLDNdKSwKKyAgICAgICAgICAgICAgICAgICAgaSA9IDA7CisgICAgICAgICAgICAgICAgQXJy
YXkucHJvdG90eXBlLm1hcC5jYWxsKGFyciwgZnVuY3Rpb24obykgeworICAgICAgICAgICAgICAg
ICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5jYWxsKGFyciwgbyszKTsKKyAgICAgICAgICAgICAg
ICAgICAgaSsrOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbzsKKyAgICAgICAgICAgICAg
ICB9KTsKKyAgICAgICAgICAgICAgICBkZWxldGUgYXJyLmxlbmd0aDsKKyAgICAgICAgICAgICAg
ICBleHBlY3QoYXJyKS50b0V4YWN0bHlNYXRjaChbMSwyLDMsNCw1LDZdKTsKKyAgICAgICAgICAg
ICAgICBleHBlY3QoaSkudG9CZSgzKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgaXQo
J3Nob3VsZCBwcm9wZXJseSB0cmFuc2xhdGUgdGhlIHZhbHVlcyBhcyBhY2NvcmRpbmcgdG8gdGhl
IGNhbGxiYWNrJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IEFy
cmF5LnByb3RvdHlwZS5tYXAuY2FsbCh0ZXN0U3ViamVjdCwgY2FsbGJhY2spLAorICAgICAgICAg
ICAgICAgICAgICBleHBlY3RlZCA9IFswLDAsMSwyLDMsNCw1LDZdOworICAgICAgICAgICAgICAg
IGRlbGV0ZSBleHBlY3RlZFsxXTsKKyAgICAgICAgICAgICAgICBleHBlY3QocmVzdWx0KS50b0V4
YWN0bHlNYXRjaChleHBlY3RlZCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGl0KCdz
aG91bGQgc2tpcCBub24tZXhpc3RpbmcgdmFsdWVzJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAg
ICAgICAgdmFyIGFycmF5ID0gY3JlYXRlQXJyYXlMaWtlRnJvbUFycmF5KFsxLDIsMyw0XSksIAor
ICAgICAgICAgICAgICAgICAgICBpID0gMDsKKyAgICAgICAgICAgICAgICBkZWxldGUgYXJyYXlb
Ml07CisgICAgICAgICAgICAgICAgQXJyYXkucHJvdG90eXBlLm1hcC5jYWxsKGFycmF5LCBmdW5j
dGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgaSsrOworICAgICAgICAgICAgICAgIH0pOwor
ICAgICAgICAgICAgICAgIGV4cGVjdChpKS50b0JlKDMpOworICAgICAgICAgICAgfSk7CisgICAg
ICAgIH0pOworICAgIH0pOworICAgIAorICAgIGRlc2NyaWJlKCdyZWR1Y2UnLCBmdW5jdGlvbigp
IHsKKyAgICAgICAgYmVmb3JlRWFjaChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHRlc3RTdWJq
ZWN0ID0gWzEsMiwzXTsKKyAgICAgICAgfSk7CisgICAgICAgIAorICAgICAgICBkZXNjcmliZSgn
QXJyYXknLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGl0KCdzaG91bGQgcGFzcyB0aGUgY29y
cmVjdCBhcmd1bWVudHMgdG8gdGhlIGNhbGxiYWNrJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAg
ICAgICAgdmFyIHNweSA9IGphc21pbmUuY3JlYXRlU3B5KCkuYW5kUmV0dXJuKDApOworICAgICAg
ICAgICAgICAgIHRlc3RTdWJqZWN0LnJlZHVjZShzcHkpOworICAgICAgICAgICAgICAgIGV4cGVj
dChzcHkuY2FsbHNbMF0uYXJncykudG9FeGFjdGx5TWF0Y2goWzEsIDIsIDEsIHRlc3RTdWJqZWN0
XSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGl0KCdzaG91bGQgc3RhcnQgd2l0aCB0
aGUgcmlnaHQgaW5pdGlhbFZhbHVlJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdmFy
IHNweSA9IGphc21pbmUuY3JlYXRlU3B5KCkuYW5kUmV0dXJuKDApOworICAgICAgICAgICAgICAg
IHRlc3RTdWJqZWN0LnJlZHVjZShzcHksIDApOworICAgICAgICAgICAgICAgIGV4cGVjdChzcHku
Y2FsbHNbMF0uYXJncykudG9FeGFjdGx5TWF0Y2goWzAsIDEsIDAsIHRlc3RTdWJqZWN0XSk7Cisg
ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGl0KCdzaG91bGQgbm90IGFmZmVjdCBlbGVtZW50
cyBhZGRlZCB0byB0aGUgYXJyYXkgYWZ0ZXIgaXQgaGFzIGJlZ3VuJywgZnVuY3Rpb24oKSB7Cisg
ICAgICAgICAgICAgICAgdmFyIGFyciA9IFsxLDIsM10sCisgICAgICAgICAgICAgICAgICAgIGkg
PSAwOworICAgICAgICAgICAgICAgIGFyci5yZWR1Y2UoZnVuY3Rpb24oYSwgYikgeworICAgICAg
ICAgICAgICAgICAgICBpKys7CisgICAgICAgICAgICAgICAgICAgIGlmKGkgPD0gNCkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgYXJyLnB1c2goYSszKTsKKyAgICAgICAgICAgICAgICAgICAg
fTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGI7CisgICAgICAgICAgICAgICAgfSk7Cisg
ICAgICAgICAgICAgICAgZXhwZWN0KGFycikudG9FcXVhbChbMSwyLDMsNCw1XSk7CisgICAgICAg
ICAgICAgICAgZXhwZWN0KGkpLnRvQmUoMik7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAg
IGl0KCdzaG91bGQgd29yayBhcyBleHBlY3RlZCBmb3IgZW1wdHkgYXJyYXlzJywgZnVuY3Rpb24o
KSB7CisgICAgICAgICAgICAgICAgdmFyIHNweSA9IGphc21pbmUuY3JlYXRlU3B5KCk7CisgICAg
ICAgICAgICAgICAgZXhwZWN0KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICBbXS5y
ZWR1Y2Uoc3B5KTsKKyAgICAgICAgICAgICAgICB9KS50b1Rocm93KCk7CisgICAgICAgICAgICAg
ICAgZXhwZWN0KHNweSkubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTsKKyAgICAgICAgICAgIH0pOwor
ICAgICAgICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBjb3JyZWN0bHkgaWYgbm8gY2FsbGJhY2sgaXMg
Z2l2ZW4nLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBleHBlY3QoZnVuY3Rpb24oKSB7
CisgICAgICAgICAgICAgICAgICAgIHRlc3RTdWJqZWN0LnJlZHVjZSgpOworICAgICAgICAgICAg
ICAgIH0pLnRvVGhyb3coKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgaXQoJ3Nob3Vs
ZCByZXR1cm4gdGhlIGV4cGVjdGVkIHJlc3VsdCcsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAg
ICAgIGV4cGVjdCh0ZXN0U3ViamVjdC5yZWR1Y2UoZnVuY3Rpb24oYSxiKSB7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiAoYXx8JycpLnRvU3RyaW5nKCkrKGJ8fCcnKS50b1N0cmluZygpOwor
ICAgICAgICAgICAgICAgIH0pKS50b0VxdWFsKHRlc3RTdWJqZWN0LmpvaW4oJycpKTsKKyAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgaXQoJ3Nob3VsZCBub3QgZGlyZWN0bHkgYWZmZWN0IHRo
ZSBwYXNzZWQgYXJyYXknLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICB2YXIgY29weSA9
IHRlc3RTdWJqZWN0LnNsaWNlKCk7CisgICAgICAgICAgICAgICAgdGVzdFN1YmplY3QucmVkdWNl
KGZ1bmN0aW9uKGEsYikgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gYStiOworICAgICAg
ICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIGV4cGVjdCh0ZXN0U3ViamVjdCkudG9FcXVh
bChjb3B5KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgaXQoJ3Nob3VsZCBza2lwIG5v
bi1zZXQgdmFsdWVzJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgZGVsZXRlIHRlc3RT
dWJqZWN0WzFdOworICAgICAgICAgICAgICAgIHZhciB2aXNpdGVkID0ge307CisgICAgICAgICAg
ICAgICAgdGVzdFN1YmplY3QucmVkdWNlKGZ1bmN0aW9uKGEsYikgeworICAgICAgICAgICAgICAg
ICAgICBpZihhKQorICAgICAgICAgICAgICAgICAgICAgICAgdmlzaXRlZFthXSA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgICAgIGlmKGIpCisgICAgICAgICAgICAgICAgICAgICAgICB2aXNpdGVk
W2JdID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZXhwZWN0KHZpc2l0ZWQp
LnRvRXF1YWwoeyAnMSc6IHRydWUsICczJzogdHJ1ZSB9KTsKKyAgICAgICAgICAgIH0pOworICAg
ICAgICAgICAgaXQoJ3Nob3VsZCBoYXZlIHRoZSByaWdodCBsZW5ndGgnLCBmdW5jdGlvbigpIHsK
KyAgICAgICAgICAgICAgICBleHBlY3QodGVzdFN1YmplY3QucmVkdWNlLmxlbmd0aCkudG9CZSgx
KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICAgICAgZGVzY3JpYmUoJ0FycmF5
LWxpa2Ugb2JqZWN0cycsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgYmVmb3JlRWFjaChmdW5j
dGlvbigpIHsKKyAgICAgICAgICAgICAgICB0ZXN0U3ViamVjdCA9IGNyZWF0ZUFycmF5TGlrZUZy
b21BcnJheSh0ZXN0U3ViamVjdCk7CisgICAgICAgICAgICAgICAgdGVzdFN1YmplY3QucmVkdWNl
ID0gQXJyYXkucHJvdG90eXBlLnJlZHVjZTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAg
aXQoJ3Nob3VsZCBwYXNzIHRoZSBjb3JyZWN0IGFyZ3VtZW50cyB0byB0aGUgY2FsbGJhY2snLCBm
dW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICB2YXIgc3B5ID0gamFzbWluZS5jcmVhdGVTcHko
KS5hbmRSZXR1cm4oMCk7CisgICAgICAgICAgICAgICAgdGVzdFN1YmplY3QucmVkdWNlKHNweSk7
CisgICAgICAgICAgICAgICAgZXhwZWN0KHNweS5jYWxsc1swXS5hcmdzKS50b0V4YWN0bHlNYXRj
aChbMSwgMiwgMSwgdGVzdFN1YmplY3RdKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAg
aXQoJ3Nob3VsZCBzdGFydCB3aXRoIHRoZSByaWdodCBpbml0aWFsVmFsdWUnLCBmdW5jdGlvbigp
IHsKKyAgICAgICAgICAgICAgICB2YXIgc3B5ID0gamFzbWluZS5jcmVhdGVTcHkoKS5hbmRSZXR1
cm4oMCk7CisgICAgICAgICAgICAgICAgdGVzdFN1YmplY3QucmVkdWNlKHNweSwgMCk7CisgICAg
ICAgICAgICAgICAgZXhwZWN0KHNweS5jYWxsc1swXS5hcmdzKS50b0V4YWN0bHlNYXRjaChbMCwg
MSwgMCwgdGVzdFN1YmplY3RdKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgaXQoJ3No
b3VsZCBub3QgYWZmZWN0IGVsZW1lbnRzIGFkZGVkIHRvIHRoZSBhcnJheSBhZnRlciBpdCBoYXMg
YmVndW4nLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICB2YXIgYXJyID0gY3JlYXRlQXJy
YXlMaWtlRnJvbUFycmF5KFsxLDIsM10pLAorICAgICAgICAgICAgICAgICAgICBpID0gMDsKKyAg
ICAgICAgICAgICAgICBBcnJheS5wcm90b3R5cGUucmVkdWNlLmNhbGwoYXJyLCBmdW5jdGlvbihh
LCBiKSB7CisgICAgICAgICAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICAgICAgICAgICAgaWYo
aSA8PSA0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhcnJbaSsyXSA9IGErMzsKKyAgICAg
ICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGI7CisgICAgICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgZXhwZWN0KGFycikudG9FcXVhbCh7CisgICAg
ICAgICAgICAgICAgICAgIDA6IDEsCisgICAgICAgICAgICAgICAgICAgIDE6IDIsCisgICAgICAg
ICAgICAgICAgICAgIDI6IDMsCisgICAgICAgICAgICAgICAgICAgIDM6IDQsCisgICAgICAgICAg
ICAgICAgICAgIDQ6IDUsCisgICAgICAgICAgICAgICAgICAgIGxlbmd0aDogMworICAgICAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgICAgIGV4cGVjdChpKS50b0JlKDIpOworICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgICBpdCgnc2hvdWxkIHdvcmsgYXMgZXhwZWN0ZWQgZm9yIGVtcHR5
IGFycmF5cycsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHZhciBzcHkgPSBqYXNtaW5l
LmNyZWF0ZVNweSgpOworICAgICAgICAgICAgICAgIGV4cGVjdChmdW5jdGlvbigpIHsKKyAgICAg
ICAgICAgICAgICAgICAgQXJyYXkucHJvdG90eXBlLnJlZHVjZS5jYWxsKHtsZW5ndGg6IDB9LCBz
cHkpOworICAgICAgICAgICAgICAgIH0pLnRvVGhyb3coKTsKKyAgICAgICAgICAgICAgICBleHBl
Y3Qoc3B5KS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpOworICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICBpdCgnc2hvdWxkIHRocm93IGNvcnJlY3RseSBpZiBubyBjYWxsYmFjayBpcyBnaXZlbics
IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGV4cGVjdChmdW5jdGlvbigpIHsKKyAgICAg
ICAgICAgICAgICAgICAgdGVzdFN1YmplY3QucmVkdWNlKCk7CisgICAgICAgICAgICAgICAgfSku
dG9UaHJvdygpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBpdCgnc2hvdWxkIHJldHVy
biB0aGUgZXhwZWN0ZWQgcmVzdWx0JywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgZXhw
ZWN0KHRlc3RTdWJqZWN0LnJlZHVjZShmdW5jdGlvbihhLGIpIHsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIChhfHwnJykudG9TdHJpbmcoKSsoYnx8JycpLnRvU3RyaW5nKCk7CisgICAgICAg
ICAgICAgICAgfSkpLnRvRXF1YWwoJzEyMycpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAg
ICBpdCgnc2hvdWxkIG5vdCBkaXJlY3RseSBhZmZlY3QgdGhlIHBhc3NlZCBhcnJheScsIGZ1bmN0
aW9uKCkgeworICAgICAgICAgICAgICAgIHZhciBjb3B5ID0gY3JlYXRlQXJyYXlMaWtlRnJvbUFy
cmF5KHRlc3RTdWJqZWN0KTsKKyAgICAgICAgICAgICAgICB0ZXN0U3ViamVjdC5yZWR1Y2UoZnVu
Y3Rpb24oYSxiKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBhK2I7CisgICAgICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgICAgICAgZGVsZXRlKHRlc3RTdWJqZWN0LnJlZHVjZSk7Cisg
ICAgICAgICAgICAgICAgZXhwZWN0KHRlc3RTdWJqZWN0KS50b0VxdWFsKGNvcHkpOworICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgICBpdCgnc2hvdWxkIHNraXAgbm9uLXNldCB2YWx1ZXMnLCBm
dW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBkZWxldGUgdGVzdFN1YmplY3RbMV07CisgICAg
ICAgICAgICAgICAgdmFyIHZpc2l0ZWQgPSB7fTsKKyAgICAgICAgICAgICAgICB0ZXN0U3ViamVj
dC5yZWR1Y2UoZnVuY3Rpb24oYSxiKSB7CisgICAgICAgICAgICAgICAgICAgIGlmKGEpCisgICAg
ICAgICAgICAgICAgICAgICAgICB2aXNpdGVkW2FdID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYoYikKKyAgICAgICAgICAgICAgICAgICAgICAgIHZpc2l0ZWRbYl0gPSB0cnVlOworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBleHBlY3QodmlzaXRlZCkudG9FcXVhbCh7ICcxJzog
dHJ1ZSwgJzMnOiB0cnVlIH0pOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBpdCgnc2hv
dWxkIGhhdmUgdGhlIHJpZ2h0IGxlbmd0aCcsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAg
IGV4cGVjdCh0ZXN0U3ViamVjdC5yZWR1Y2UubGVuZ3RoKS50b0JlKDEpOworICAgICAgICAgICAg
fSk7CisgICAgICAgIH0pOworICAgIH0pOworICAgIGRlc2NyaWJlKCdyZWR1Y2VSaWdodCcsIGZ1
bmN0aW9uKCkgeworICAgICAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAg
dGVzdFN1YmplY3QgPSBbMSwyLDNdOworICAgICAgICB9KTsKKyAgICAgICAgCisgICAgICAgIGRl
c2NyaWJlKCdBcnJheScsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgaXQoJ3Nob3VsZCBwYXNz
IHRoZSBjb3JyZWN0IGFyZ3VtZW50cyB0byB0aGUgY2FsbGJhY2snLCBmdW5jdGlvbigpIHsKKyAg
ICAgICAgICAgICAgICB2YXIgc3B5ID0gamFzbWluZS5jcmVhdGVTcHkoKS5hbmRSZXR1cm4oMCk7
CisgICAgICAgICAgICAgICAgdGVzdFN1YmplY3QucmVkdWNlUmlnaHQoc3B5KTsKKyAgICAgICAg
ICAgICAgICBleHBlY3Qoc3B5LmNhbGxzWzBdLmFyZ3MpLnRvRXhhY3RseU1hdGNoKFszLCAyLCAx
LCB0ZXN0U3ViamVjdF0pOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBpdCgnc2hvdWxk
IHN0YXJ0IHdpdGggdGhlIHJpZ2h0IGluaXRpYWxWYWx1ZScsIGZ1bmN0aW9uKCkgeworICAgICAg
ICAgICAgICAgIHZhciBzcHkgPSBqYXNtaW5lLmNyZWF0ZVNweSgpLmFuZFJldHVybigwKTsKKyAg
ICAgICAgICAgICAgICB0ZXN0U3ViamVjdC5yZWR1Y2VSaWdodChzcHksIDApOworICAgICAgICAg
ICAgICAgIGV4cGVjdChzcHkuY2FsbHNbMF0uYXJncykudG9FeGFjdGx5TWF0Y2goWzAsIDMsIDIs
IHRlc3RTdWJqZWN0XSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGl0KCdzaG91bGQg
bm90IGFmZmVjdCBlbGVtZW50cyBhZGRlZCB0byB0aGUgYXJyYXkgYWZ0ZXIgaXQgaGFzIGJlZ3Vu
JywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdmFyIGFyciA9IFsxLDIsM10sCisgICAg
ICAgICAgICAgICAgICAgIGkgPSAwOworICAgICAgICAgICAgICAgIGFyci5yZWR1Y2VSaWdodChm
dW5jdGlvbihhLCBiKSB7CisgICAgICAgICAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICAgICAg
ICAgICAgaWYoaSA8PSA0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhcnIucHVzaChhKzMp
OworICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICByZXR1cm4gYjsK
KyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICBleHBlY3QoYXJyKS50b0VxdWFs
KFsxLDIsMyw2LDVdKTsKKyAgICAgICAgICAgICAgICBleHBlY3QoaSkudG9CZSgyKTsKKyAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgaXQoJ3Nob3VsZCB3b3JrIGFzIGV4cGVjdGVkIGZvciBl
bXB0eSBhcnJheXMnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICB2YXIgc3B5ID0gamFz
bWluZS5jcmVhdGVTcHkoKTsKKyAgICAgICAgICAgICAgICBleHBlY3QoZnVuY3Rpb24oKSB7Cisg
ICAgICAgICAgICAgICAgICAgIFtdLnJlZHVjZVJpZ2h0KHNweSk7CisgICAgICAgICAgICAgICAg
fSkudG9UaHJvdygpOworICAgICAgICAgICAgICAgIGV4cGVjdChzcHkpLm5vdC50b0hhdmVCZWVu
Q2FsbGVkKCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGl0KCdzaG91bGQgdGhyb3cg
Y29ycmVjdGx5IGlmIG5vIGNhbGxiYWNrIGlzIGdpdmVuJywgZnVuY3Rpb24oKSB7CisgICAgICAg
ICAgICAgICAgZXhwZWN0KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICB0ZXN0U3Vi
amVjdC5yZWR1Y2VSaWdodCgpOworICAgICAgICAgICAgICAgIH0pLnRvVGhyb3coKTsKKyAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIGV4cGVjdGVkIHJl
c3VsdCcsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGV4cGVjdCh0ZXN0U3ViamVjdC5y
ZWR1Y2VSaWdodChmdW5jdGlvbihhLGIpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChh
fHwnJykudG9TdHJpbmcoKSsoYnx8JycpLnRvU3RyaW5nKCk7CisgICAgICAgICAgICAgICAgfSkp
LnRvRXF1YWwoJzMyMScpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBpdCgnc2hvdWxk
IG5vdCBkaXJlY3RseSBhZmZlY3QgdGhlIHBhc3NlZCBhcnJheScsIGZ1bmN0aW9uKCkgeworICAg
ICAgICAgICAgICAgIHZhciBjb3B5ID0gdGVzdFN1YmplY3Quc2xpY2UoKTsKKyAgICAgICAgICAg
ICAgICB0ZXN0U3ViamVjdC5yZWR1Y2VSaWdodChmdW5jdGlvbihhLGIpIHsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGErYjsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAg
ICBleHBlY3QodGVzdFN1YmplY3QpLnRvRXF1YWwoY29weSk7CisgICAgICAgICAgICB9KTsKKyAg
ICAgICAgICAgIGl0KCdzaG91bGQgc2tpcCBub24tc2V0IHZhbHVlcycsIGZ1bmN0aW9uKCkgewor
ICAgICAgICAgICAgICAgIGRlbGV0ZSB0ZXN0U3ViamVjdFsxXTsKKyAgICAgICAgICAgICAgICB2
YXIgdmlzaXRlZCA9IHt9OworICAgICAgICAgICAgICAgIHRlc3RTdWJqZWN0LnJlZHVjZVJpZ2h0
KGZ1bmN0aW9uKGEsYikgeworICAgICAgICAgICAgICAgICAgICBpZihhKQorICAgICAgICAgICAg
ICAgICAgICAgICAgdmlzaXRlZFthXSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGlmKGIp
CisgICAgICAgICAgICAgICAgICAgICAgICB2aXNpdGVkW2JdID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgZXhwZWN0KHZpc2l0ZWQpLnRvRXF1YWwoeyAnMSc6IHRydWUsICcz
JzogdHJ1ZSB9KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgaXQoJ3Nob3VsZCBoYXZl
IHRoZSByaWdodCBsZW5ndGgnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBleHBlY3Qo
dGVzdFN1YmplY3QucmVkdWNlUmlnaHQubGVuZ3RoKS50b0JlKDEpOworICAgICAgICAgICAgfSk7
CisgICAgICAgIH0pOworICAgICAgICBkZXNjcmliZSgnQXJyYXktbGlrZSBvYmplY3RzJywgZnVu
Y3Rpb24oKSB7CisgICAgICAgICAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uKCkgeworICAgICAgICAg
ICAgICAgIHRlc3RTdWJqZWN0ID0gY3JlYXRlQXJyYXlMaWtlRnJvbUFycmF5KHRlc3RTdWJqZWN0
KTsKKyAgICAgICAgICAgICAgICB0ZXN0U3ViamVjdC5yZWR1Y2VSaWdodCA9IEFycmF5LnByb3Rv
dHlwZS5yZWR1Y2VSaWdodDsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgaXQoJ3Nob3Vs
ZCBwYXNzIHRoZSBjb3JyZWN0IGFyZ3VtZW50cyB0byB0aGUgY2FsbGJhY2snLCBmdW5jdGlvbigp
IHsKKyAgICAgICAgICAgICAgICB2YXIgc3B5ID0gamFzbWluZS5jcmVhdGVTcHkoKS5hbmRSZXR1
cm4oMCk7CisgICAgICAgICAgICAgICAgdGVzdFN1YmplY3QucmVkdWNlUmlnaHQoc3B5KTsKKyAg
ICAgICAgICAgICAgICBleHBlY3Qoc3B5LmNhbGxzWzBdLmFyZ3MpLnRvRXhhY3RseU1hdGNoKFsz
LCAyLCAxLCB0ZXN0U3ViamVjdF0pOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBpdCgn
c2hvdWxkIHN0YXJ0IHdpdGggdGhlIHJpZ2h0IGluaXRpYWxWYWx1ZScsIGZ1bmN0aW9uKCkgewor
ICAgICAgICAgICAgICAgIHZhciBzcHkgPSBqYXNtaW5lLmNyZWF0ZVNweSgpLmFuZFJldHVybigw
KTsKKyAgICAgICAgICAgICAgICB0ZXN0U3ViamVjdC5yZWR1Y2VSaWdodChzcHksIDApOworICAg
ICAgICAgICAgICAgIGV4cGVjdChzcHkuY2FsbHNbMF0uYXJncykudG9FeGFjdGx5TWF0Y2goWzAs
IDMsIDIsIHRlc3RTdWJqZWN0XSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGl0KCdz
aG91bGQgbm90IGFmZmVjdCBlbGVtZW50cyBhZGRlZCB0byB0aGUgYXJyYXkgYWZ0ZXIgaXQgaGFz
IGJlZ3VuJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdmFyIGFyciA9IGNyZWF0ZUFy
cmF5TGlrZUZyb21BcnJheShbMSwyLDNdKSwKKyAgICAgICAgICAgICAgICAgICAgaSA9IDA7Cisg
ICAgICAgICAgICAgICAgQXJyYXkucHJvdG90eXBlLnJlZHVjZVJpZ2h0LmNhbGwoYXJyLCBmdW5j
dGlvbihhLCBiKSB7CisgICAgICAgICAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICAgICAgICAg
ICAgaWYoaSA8PSA0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhcnJbaSsyXSA9IGErMzsK
KyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGI7Cisg
ICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgZXhwZWN0KGFycikudG9FcXVhbCh7
CisgICAgICAgICAgICAgICAgICAgIDA6IDEsCisgICAgICAgICAgICAgICAgICAgIDE6IDIsCisg
ICAgICAgICAgICAgICAgICAgIDI6IDMsCisgICAgICAgICAgICAgICAgICAgIDM6IDYsCisgICAg
ICAgICAgICAgICAgICAgIDQ6IDUsCisgICAgICAgICAgICAgICAgICAgIGxlbmd0aDogMyAvLyBk
b2VzIG5vdCBnZXQgdXBkYXRlZCBvbiBwcm9wZXJ0eSBhc3NpZ25tZW50CisgICAgICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgICAgICAgZXhwZWN0KGkpLnRvQmUoMik7CisgICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgIGl0KCdzaG91bGQgd29yayBhcyBleHBlY3RlZCBmb3IgZW1wdHkgYXJy
YXlzJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdmFyIHNweSA9IGphc21pbmUuY3Jl
YXRlU3B5KCk7CisgICAgICAgICAgICAgICAgZXhwZWN0KGZ1bmN0aW9uKCkgeworICAgICAgICAg
ICAgICAgICAgICBBcnJheS5wcm90b3R5cGUucmVkdWNlUmlnaHQuY2FsbCh7bGVuZ3RoOjB9LCBz
cHkpOworICAgICAgICAgICAgICAgIH0pLnRvVGhyb3coKTsKKyAgICAgICAgICAgICAgICBleHBl
Y3Qoc3B5KS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpOworICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICBpdCgnc2hvdWxkIHRocm93IGNvcnJlY3RseSBpZiBubyBjYWxsYmFjayBpcyBnaXZlbics
IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGV4cGVjdChmdW5jdGlvbigpIHsKKyAgICAg
ICAgICAgICAgICAgICAgdGVzdFN1YmplY3QucmVkdWNlUmlnaHQoKTsKKyAgICAgICAgICAgICAg
ICB9KS50b1Rocm93KCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGl0KCdzaG91bGQg
cmV0dXJuIHRoZSBleHBlY3RlZCByZXN1bHQnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAg
ICBleHBlY3QodGVzdFN1YmplY3QucmVkdWNlUmlnaHQoZnVuY3Rpb24oYSxiKSB7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiAoYXx8JycpLnRvU3RyaW5nKCkrKGJ8fCcnKS50b1N0cmluZygp
OworICAgICAgICAgICAgICAgIH0pKS50b0VxdWFsKCczMjEnKTsKKyAgICAgICAgICAgIH0pOwor
ICAgICAgICAgICAgaXQoJ3Nob3VsZCBub3QgZGlyZWN0bHkgYWZmZWN0IHRoZSBwYXNzZWQgYXJy
YXknLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICB2YXIgY29weSA9IGNyZWF0ZUFycmF5
TGlrZUZyb21BcnJheSh0ZXN0U3ViamVjdCk7CisgICAgICAgICAgICAgICAgdGVzdFN1YmplY3Qu
cmVkdWNlUmlnaHQoZnVuY3Rpb24oYSxiKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBh
K2I7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgZGVsZXRlKHRlc3RTdWJq
ZWN0LnJlZHVjZVJpZ2h0KTsKKyAgICAgICAgICAgICAgICBleHBlY3QodGVzdFN1YmplY3QpLnRv
RXF1YWwoY29weSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGl0KCdzaG91bGQgc2tp
cCBub24tc2V0IHZhbHVlcycsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGRlbGV0ZSB0
ZXN0U3ViamVjdFsxXTsKKyAgICAgICAgICAgICAgICB2YXIgdmlzaXRlZCA9IHt9OworICAgICAg
ICAgICAgICAgIHRlc3RTdWJqZWN0LnJlZHVjZVJpZ2h0KGZ1bmN0aW9uKGEsYikgeworICAgICAg
ICAgICAgICAgICAgICBpZihhKQorICAgICAgICAgICAgICAgICAgICAgICAgdmlzaXRlZFthXSA9
IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGlmKGIpCisgICAgICAgICAgICAgICAgICAgICAg
ICB2aXNpdGVkW2JdID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAg
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZXhwZWN0
KHZpc2l0ZWQpLnRvRXF1YWwoeyAnMSc6IHRydWUsICczJzogdHJ1ZSB9KTsKKyAgICAgICAgICAg
IH0pOworICAgICAgICAgICAgaXQoJ3Nob3VsZCBoYXZlIHRoZSByaWdodCBsZW5ndGgnLCBmdW5j
dGlvbigpIHsKKyAgICAgICAgICAgICAgICBleHBlY3QodGVzdFN1YmplY3QucmVkdWNlUmlnaHQu
bGVuZ3RoKS50b0JlKDEpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgIH0pOwor
CisgICAgZGVzY3JpYmUoJ2lzQXJyYXknLCBmdW5jdGlvbiAoKSB7CisgICAgICAgIGl0KCdzaG91
bGQgd29yayBmb3IgQXJyYXknLCBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB2YXIgcmV0ID0g
QXJyYXkuaXNBcnJheShbXSk7CisKKyAgICAgICAgICAgIGV4cGVjdChyZXQpLnRvQmUodHJ1ZSk7
CisgICAgICAgIH0pOworCisgICAgICAgIGl0KCdzaG91bGQgZmFpbCBmb3Igb3RoZXIgb2JqZWN0
cycsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHZhciBvYmplY3RzID0gWworICAgICAgICAg
ICAgICAgICJzb21lU3RyaW5nIiwKKyAgICAgICAgICAgICAgICB0cnVlLAorICAgICAgICAgICAg
ICAgIGZhbHNlLAorICAgICAgICAgICAgICAgIDQyLAorICAgICAgICAgICAgICAgIDAsCisgICAg
ICAgICAgICAgICAge30sCisgICAgICAgICAgICAgICAgT2JqZWN0LmNyZWF0ZShudWxsKSwKKyAg
ICAgICAgICAgICAgICAvZm9vLywKKyAgICAgICAgICAgICAgICBhcmd1bWVudHMsCisgICAgICAg
ICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImRpdiIpCisgICAgICAgICAg
ICBdOworCisgICAgICAgICAgICBvYmplY3RzLmZvckVhY2goZnVuY3Rpb24gKHYpIHsKKyAgICAg
ICAgICAgICAgICBleHBlY3QoQXJyYXkuaXNBcnJheSh2KSkudG9CZShmYWxzZSk7CisgICAgICAg
ICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgfSk7CisKKyAgICAKK30pOwpJbmRleDogUGVyZm9y
bWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRz
L2VzNS1zaGltL3Rlc3RzL3NwZWMvcy1kYXRlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNl
VGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9lczUt
c2hpbS90ZXN0cy9zcGVjL3MtZGF0ZS5qcwkocmV2aXNpb24gMCkKKysrIFBlcmZvcm1hbmNlVGVz
dHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9lczUtc2hp
bS90ZXN0cy9zcGVjL3MtZGF0ZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQwIEBACitk
ZXNjcmliZSgnRGF0ZScsIGZ1bmN0aW9uICgpIHsKKyAgICAKKyAgICBkZXNjcmliZSgnbm93Jywg
ZnVuY3Rpb24gKCkgeworICAgICAgICBpdCgnc2hvdWxkIGJlIHRoZSBjdXJyZW50IHRpbWUnLCBm
dW5jdGlvbiAoKSB7CisgICAgICAgICAgICBleHBlY3QoRGF0ZS5ub3coKSA9PT0gbmV3IERhdGUo
KS5nZXRUaW1lKCkpLnRvQmUodHJ1ZSk7CisgICAgICAgIH0pOworICAgIH0pOworCisgICAgZGVz
Y3JpYmUoInBhcnNlIiwgZnVuY3Rpb24gKCkgeworICAgICAgICAvLyBUT0RPOiBXcml0ZSB0aGUg
cmVzdCBvZiB0aGUgdGVzdC4KKworICAgICAgICBpdCgnc2hvdWxkIHN1cHBvcnQgZXh0ZW5kZWQg
eWVhcnMnLCBmdW5jdGlvbiAoKSB7CisKKyAgICAgICAgICAgIGV4cGVjdChEYXRlLnBhcnNlKCcw
MDAxLTAxLTAxVDAwOjAwOjAwWicpKS50b0JlKC02MjEzNTU5NjgwMDAwMCk7CisgICAgICAgICAg
ICBleHBlY3QoRGF0ZS5wYXJzZSgnKzI3NTc2MC0wOS0xM1QwMDowMDowMC4wMDBaJykpLnRvQmUo
OC42NGUxNSk7CisgICAgICAgICAgICBleHBlY3QoRGF0ZS5wYXJzZSgnKzAzMzY1OC0wOS0yN1Qw
MTo0Njo0MC4wMDBaJykpLnRvQmUoMWUxNSk7CisgICAgICAgICAgICBleHBlY3QoRGF0ZS5wYXJz
ZSgnLTAwMDAwMS0wMS0wMVQwMDowMDowMFonKSkudG9CZSgtNjIxOTg3NTUyMDAwMDApOworICAg
ICAgICAgICAgZXhwZWN0KERhdGUucGFyc2UoJyswMDIwMDktMTItMTVUMDA6MDA6MDBaJykpLnRv
QmUoMTI2MDgzNTIwMDAwMCk7CisKKyAgICAgICAgfSk7CisKKyAgICB9KTsKKworICAgIGRlc2Ny
aWJlKCJ0b0lTT1N0cmluZyIsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgLy8gVE9ETzogd3JpdGUg
dGhlIHJlc3Qgb2YgdGhlIHRlc3QuCisgICAgICAgCisgICAgICAgIGl0KCdzaG91bGQgc3VwcG9y
dCBleHRlbmRlZCB5ZWFycycsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGV4cGVjdChuZXcg
RGF0ZSgtNjIxOTg3NTUyMDAwMDApLnRvSVNPU3RyaW5nKCkuaW5kZXhPZignLTAwMDAwMS0wMS0w
MScpKS50b0JlKDApOworICAgICAgICAgICAgZXhwZWN0KG5ldyBEYXRlKDguNjRlMTUpLnRvSVNP
U3RyaW5nKCkuaW5kZXhPZignKzI3NTc2MC0wOS0xMycpKS50b0JlKDApOworICAgICAgICB9KTsK
KyAgICB9KTsKKworICAgIGRlc2NyaWJlKCJ0b0pTT04iLCBmdW5jdGlvbiAoKSB7CisgICAgICAg
IGl0KCdzaG91bGQgcmV0dXJuIHRoZSBpc29TdHJpbmcgd2hlbiBzdHJpbmdpZmllZCcsIGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgICAgIHZhciBkYXRlID0gbmV3IERhdGUoKTsKKyAgICAgICAgICAg
IGV4cGVjdChKU09OLnN0cmluZ2lmeShkYXRlLnRvSVNPU3RyaW5nKCkpKS50b0JlKEpTT04uc3Ry
aW5naWZ5KGRhdGUpKTsKKyAgICAgICAgfSkgCisgICAgfSk7CisKK30pOwpcIE5vIG5ld2xpbmUg
YXQgZW5kIG9mIGZpbGUKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxp
Z2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9lczUtc2hpbS90ZXN0cy9zcGVjL3MtZnVuY3Rp
b24uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGln
aHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2VzNS1zaGltL3Rlc3RzL3NwZWMvcy1mdW5jdGlv
bi5qcwkocmV2aXNpb24gMCkKKysrIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxp
Z2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9lczUtc2hpbS90ZXN0cy9zcGVjL3MtZnVuY3Rp
b24uanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzcgQEAKKworZGVzY3JpYmUoJ0Z1bmN0
aW9uJywgZnVuY3Rpb24oKSB7CisgICAgInVzZSBzdHJpY3QiOworICAgIGRlc2NyaWJlKCdiaW5k
JywgZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBhY3R1YWwsIGV4cGVjdGVkLAorICAgICAgICAg
ICAgdGVzdFN1YmplY3Q7CisgICAgICAgIAorICAgICAgICB0ZXN0U3ViamVjdCA9IHsKKyAgICAg
ICAgICAgIHB1c2g6IGZ1bmN0aW9uKG8pIHsKKyAgICAgICAgICAgICAgICB0aGlzLmEucHVzaChv
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICAgICAgCisgICAgICAgIGZ1bmN0aW9u
IGZ1bmMoKSB7CisgICAgICAgICAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKGFyZ3Vt
ZW50cywgZnVuY3Rpb24oYSkgeworICAgICAgICAgICAgICAgIHRoaXMucHVzaChhKTsKKyAgICAg
ICAgICAgIH0sIHRoaXMpOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH07Cisg
ICAgICAgIAorICAgICAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgYWN0
dWFsID0gW107CisgICAgICAgICAgICB0ZXN0U3ViamVjdC5hID0gW107CisgICAgICAgIH0pOwor
ICAgICAgICAKKyAgICAgICAgaXQoJ2JpbmRzIHByb3Blcmx5IHdpdGhvdXQgYSBjb250ZXh0Jywg
ZnVuY3Rpb24oKSB7CisgICAgICAgICAgICB2YXIgY29udGV4dDsKKyAgICAgICAgICAgIHRlc3RT
dWJqZWN0LmZ1bmMgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0ID0gdGhp
czsKKyAgICAgICAgICAgIH0uYmluZCgpOworICAgICAgICAgICAgdGVzdFN1YmplY3QuZnVuYygp
OworICAgICAgICAgICAgZXhwZWN0KGNvbnRleHQpLnRvQmUoZnVuY3Rpb24oKSB7cmV0dXJuIHRo
aXN9LmNhbGwoKSk7CisgICAgICAgIH0pOworICAgICAgICBpdCgnYmluZHMgcHJvcGVybHkgd2l0
aG91dCBhIGNvbnRleHQsIGFuZCBzdGlsbCBzdXBwbGllcyBib3VuZCBhcmd1bWVudHMnLCBmdW5j
dGlvbigpIHsKKyAgICAgICAgICAgIHZhciBhLCBjb250ZXh0OworICAgICAgICAgICAgdGVzdFN1
YmplY3QuZnVuYyA9IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGEgPSBBcnJheS5wcm90
b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpOworICAgICAgICAgICAgICAgIGNvbnRleHQgPSB0
aGlzOworICAgICAgICAgICAgfS5iaW5kKHVuZGVmaW5lZCwgMSwyLDMpOworICAgICAgICAgICAg
dGVzdFN1YmplY3QuZnVuYygxLDIsMyk7CisgICAgICAgICAgICBleHBlY3QoYSkudG9FcXVhbChb
MSwyLDMsMSwyLDNdKTsKKyAgICAgICAgICAgIGV4cGVjdChjb250ZXh0KS50b0JlKGZ1bmN0aW9u
KCkge3JldHVybiB0aGlzfS5jYWxsKCkpOworICAgICAgICB9KTsKKyAgICAgICAgaXQoJ2JpbmRz
IGEgY29udGV4dCBwcm9wZXJseScsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgdGVzdFN1Ympl
Y3QuZnVuYyA9IGZ1bmMuYmluZChhY3R1YWwpOworICAgICAgICAgICAgdGVzdFN1YmplY3QuZnVu
YygxLDIsMyk7CisgICAgICAgICAgICBleHBlY3QoYWN0dWFsKS50b0VxdWFsKFsxLDIsM10pOwor
ICAgICAgICAgICAgZXhwZWN0KHRlc3RTdWJqZWN0LmEpLnRvRXF1YWwoW10pOworICAgICAgICB9
KTsKKyAgICAgICAgaXQoJ2JpbmRzIGEgY29udGV4dCBhbmQgc3VwcGxpZXMgYm91bmQgYXJndW1l
bnRzJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICB0ZXN0U3ViamVjdC5mdW5jID0gZnVuYy5i
aW5kKGFjdHVhbCwgMSwyLDMpOworICAgICAgICAgICAgdGVzdFN1YmplY3QuZnVuYyg0LDUsNik7
CisgICAgICAgICAgICBleHBlY3QoYWN0dWFsKS50b0VxdWFsKFsxLDIsMyw0LDUsNl0pOworICAg
ICAgICAgICAgZXhwZWN0KHRlc3RTdWJqZWN0LmEpLnRvRXF1YWwoW10pOworICAgICAgICB9KTsK
KyAgICAgICAgCisgICAgICAgIGl0KCdyZXR1cm5zIHByb3Blcmx5IHdpdGhvdXQgYmluZGluZyBh
IGNvbnRleHQnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHRlc3RTdWJqZWN0LmZ1bmMgPSBm
dW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgIH0u
YmluZCgpOworICAgICAgICAgICAgdmFyIGNvbnRleHQgPSB0ZXN0U3ViamVjdC5mdW5jKCk7Cisg
ICAgICAgICAgICBleHBlY3QoY29udGV4dCkudG9CZShmdW5jdGlvbigpIHtyZXR1cm4gdGhpc30u
Y2FsbCgpKTsKKyAgICAgICAgfSk7CisgICAgICAgIGl0KCdyZXR1cm5zIHByb3Blcmx5IHdpdGhv
dXQgYmluZGluZyBhIGNvbnRleHQsIGFuZCBzdGlsbCBzdXBwbGllcyBib3VuZCBhcmd1bWVudHMn
LCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHZhciBjb250ZXh0OworICAgICAgICAgICAgdGVz
dFN1YmplY3QuZnVuYyA9IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGNvbnRleHQgPSB0
aGlzOworICAgICAgICAgICAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChh
cmd1bWVudHMpOworICAgICAgICAgICAgfS5iaW5kKHVuZGVmaW5lZCwgMSwyLDMpOworICAgICAg
ICAgICAgYWN0dWFsID0gdGVzdFN1YmplY3QuZnVuYygxLDIsMyk7CisgICAgICAgICAgICBleHBl
Y3QoY29udGV4dCkudG9CZShmdW5jdGlvbigpIHtyZXR1cm4gdGhpc30uY2FsbCgpKTsKKyAgICAg
ICAgICAgIGV4cGVjdChhY3R1YWwpLnRvRXF1YWwoWzEsMiwzLDEsMiwzXSk7CisgICAgICAgIH0p
OworICAgICAgICBpdCgncmV0dXJucyBwcm9wZXJseSB3aGlsZSBiaW5kaW5nIGEgY29udGV4dCBw
cm9wZXJseScsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgdmFyIHJldDsKKyAgICAgICAgICAg
IHRlc3RTdWJqZWN0LmZ1bmMgPSBmdW5jLmJpbmQoYWN0dWFsKTsKKyAgICAgICAgICAgIHJldCA9
IHRlc3RTdWJqZWN0LmZ1bmMoMSwyLDMpOworICAgICAgICAgICAgZXhwZWN0KHJldCkudG9CZShh
Y3R1YWwpOworICAgICAgICAgICAgZXhwZWN0KHJldCkubm90LnRvQmUodGVzdFN1YmplY3QpOwor
ICAgICAgICB9KTsKKyAgICAgICAgaXQoJ3JldHVybnMgcHJvcGVybHkgd2hpbGUgYmluZGluZyBh
IGNvbnRleHQgYW5kIHN1cHBsaWVzIGJvdW5kIGFyZ3VtZW50cycsIGZ1bmN0aW9uKCkgeworICAg
ICAgICAgICAgdmFyIHJldDsKKyAgICAgICAgICAgIHRlc3RTdWJqZWN0LmZ1bmMgPSBmdW5jLmJp
bmQoYWN0dWFsLCAxLDIsMyk7CisgICAgICAgICAgICByZXQgPSB0ZXN0U3ViamVjdC5mdW5jKDQs
NSw2KTsKKyAgICAgICAgICAgIGV4cGVjdChyZXQpLnRvQmUoYWN0dWFsKTsKKyAgICAgICAgICAg
IGV4cGVjdChyZXQpLm5vdC50b0JlKHRlc3RTdWJqZWN0KTsKKyAgICAgICAgfSk7CisgICAgICAg
IGl0KCdwYXNzZXMgdGhlIGNvcnJlY3QgYXJndW1lbnRzIGFzIGEgY29uc3RydWN0b3InLCBmdW5j
dGlvbigpIHsKKyAgICAgICAgICAgIHZhciByZXQsIGV4cGVjdGVkID0geyBuYW1lOiAiQ29ycmVj
dCIgfTsKKyAgICAgICAgICAgIHRlc3RTdWJqZWN0LmZ1bmMgPSBmdW5jdGlvbihhcmcpIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gYXJnOworICAgICAgICAgICAgfS5iaW5kKHsgbmFtZTogIklu
Y29ycmVjdCIgfSk7CisgICAgICAgICAgICByZXQgPSBuZXcgdGVzdFN1YmplY3QuZnVuYyhleHBl
Y3RlZCk7CisgICAgICAgICAgICBleHBlY3QocmV0KS50b0JlKGV4cGVjdGVkKTsKKyAgICAgICAg
fSk7CisgICAgICAgIGl0KCdyZXR1cm5zIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGJvdW5kIGZ1
bmN0aW9uIHdoZW4gY2FsbGVkIGFzIGEgY29uc3RydWN0b3InLCBmdW5jdGlvbiAoKSB7CisgICAg
ICAgICAgICB2YXIgb3JhY2xlID0gWzEsIDIsIDNdOworICAgICAgICAgICAgdmFyIHN1YmplY3Qg
PSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG9yYWNsZTsKKyAgICAgICAg
ICAgIH0uYmluZChudWxsKTsKKyAgICAgICAgICAgIHZhciByZXN1bHQgPSBuZXcgc3ViamVjdDsK
KyAgICAgICAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUob3JhY2xlKTsKKyAgICAgICAgfSk7Cisg
ICAgICAgIGl0KCdyZXR1cm5zIHRoZSBjb3JyZWN0IHZhbHVlIGlmIGNvbnN0cnVjdG9yIHJldHVy
bnMgcHJpbWl0aXZlJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICB2YXIgb3JhY2xlID0gWzEs
IDIsIDNdOworICAgICAgICAgICAgdmFyIHN1YmplY3QgPSBmdW5jdGlvbiAoKSB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIG9yYWNsZTsKKyAgICAgICAgICAgIH0uYmluZChudWxsKTsKKyAgICAg
ICAgICAgIHZhciByZXN1bHQgPSBuZXcgc3ViamVjdDsKKyAgICAgICAgICAgIGV4cGVjdChyZXN1
bHQpLnRvQmUob3JhY2xlKTsKKworICAgICAgICAgICAgb3JhY2xlID0ge307CisgICAgICAgICAg
ICByZXN1bHQgPSBuZXcgc3ViamVjdDsKKyAgICAgICAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUo
b3JhY2xlKTsKKworICAgICAgICAgICAgb3JhY2xlID0gZnVuY3Rpb24oKXt9OworICAgICAgICAg
ICAgcmVzdWx0ID0gbmV3IHN1YmplY3Q7CisgICAgICAgICAgICBleHBlY3QocmVzdWx0KS50b0Jl
KG9yYWNsZSk7CisKKyAgICAgICAgICAgIG9yYWNsZSA9ICJhc2RmIjsKKyAgICAgICAgICAgIHJl
c3VsdCA9IG5ldyBzdWJqZWN0OworICAgICAgICAgICAgZXhwZWN0KHJlc3VsdCkubm90LnRvQmUo
b3JhY2xlKTsKKworICAgICAgICAgICAgb3JhY2xlID0gbnVsbDsKKyAgICAgICAgICAgIHJlc3Vs
dCA9IG5ldyBzdWJqZWN0OworICAgICAgICAgICAgZXhwZWN0KHJlc3VsdCkubm90LnRvQmUob3Jh
Y2xlKTsKKworICAgICAgICAgICAgb3JhY2xlID0gdHJ1ZTsKKyAgICAgICAgICAgIHJlc3VsdCA9
IG5ldyBzdWJqZWN0OworICAgICAgICAgICAgZXhwZWN0KHJlc3VsdCkubm90LnRvQmUob3JhY2xl
KTsKKworICAgICAgICAgICAgb3JhY2xlID0gMTsKKyAgICAgICAgICAgIHJlc3VsdCA9IG5ldyBz
dWJqZWN0OworICAgICAgICAgICAgZXhwZWN0KHJlc3VsdCkubm90LnRvQmUob3JhY2xlKTsKKyAg
ICAgICAgfSk7CisgICAgfSk7Cit9KTsKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVu
QmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9lczUtc2hpbS90ZXN0cy9zcGVj
L3Mtb2JqZWN0LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVu
Y2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9lczUtc2hpbS90ZXN0cy9zcGVjL3Mt
b2JqZWN0LmpzCShyZXZpc2lvbiAwKQorKysgUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5j
aC9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2VzNS1zaGltL3Rlc3RzL3NwZWMvcy1v
YmplY3QuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NCBAQAorZGVzY3JpYmUoJ09iamVj
dCcsIGZ1bmN0aW9uICgpIHsKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICBkZXNjcmliZSgiT2Jq
ZWN0LmtleXMiLCBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBvYmogPSB7CisgICAgICAgICAg
ICAic3RyIjogImJveiIsCisgICAgICAgICAgICAib2JqIjogeyB9LAorICAgICAgICAgICAgImFy
ciI6IFtdLAorICAgICAgICAgICAgImJvb2wiOiB0cnVlLAorICAgICAgICAgICAgIm51bSI6IDQy
LAorICAgICAgICAgICAgIm51bGwiOiBudWxsLAorICAgICAgICAgICAgInVuZGVmaW5lZCI6IHVu
ZGVmaW5lZAorICAgICAgICB9OworCisgICAgICAgIHZhciBsb29wZWRWYWx1ZXMgPSBbXTsKKyAg
ICAgICAgZm9yICh2YXIgayBpbiBvYmopIHsKKyAgICAgICAgICAgIGxvb3BlZFZhbHVlcy5wdXNo
KGspOworICAgICAgICB9CisKKyAgICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmopOwor
ICAgICAgICBpdCgnc2hvdWxkIGhhdmUgY29ycmVjdCBsZW5ndGgnLCBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICBleHBlY3Qoa2V5cy5sZW5ndGgpLnRvQmUoNyk7ICAgIAorICAgICAgICB9KTsK
KworICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBBcnJheScsIGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgICAgIGV4cGVjdChBcnJheS5pc0FycmF5KGtleXMpKS50b0JlKHRydWUpOyAgICAKKyAg
ICAgICAgfSk7CisgICAgICAgIAorICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBuYW1lcyB3aGlj
aCBhcmUgb3duIHByb3BlcnRpZXMnLCBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBrZXlzLmZv
ckVhY2goZnVuY3Rpb24gKG5hbWUpIHsKKyAgICAgICAgICAgICAgICBleHBlY3Qob2JqLmhhc093
blByb3BlcnR5KG5hbWUpKS50b0JlKHRydWUpOworICAgICAgICAgICAgfSk7ICAgIAorICAgICAg
ICB9KTsKKworICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBuYW1lcyB3aGljaCBhcmUgZW51bWVy
YWJsZScsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGtleXMuZm9yRWFjaChmdW5jdGlvbiAo
bmFtZSkgeworICAgICAgICAgICAgICAgIGV4cGVjdChsb29wZWRWYWx1ZXMuaW5kZXhPZihuYW1l
KSkudG9Ob3RCZSgtMSk7CisgICAgICAgICAgICB9KSAKKyAgICAgICAgfSk7CisgICAgICAgIAor
ICAgICAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIGZvciBub24gb2JqZWN0JywgZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgdmFyIGUgPSB7fTsKKyAgICAgICAgICAgIGV4cGVjdChmdW5jdGlv
biAoKSB7CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgT2JqZWN0
LmtleXMoNDIpCisgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7CisgICAgICAgICAgICAg
ICAgICAgIHRocm93IGU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSkudG9UaHJv
dyhlKTsKKyAgICAgICAgfSk7CisgICAgfSk7CisgCisgICAgZGVzY3JpYmUoIk9iamVjdC5pc0V4
dGVuc2libGUiLCBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBvYmogPSB7IH07CisKKyAgICAg
ICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSBpZiBvYmplY3QgaXMgZXh0ZW5zaWJsZScsIGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgICAgIGV4cGVjdChPYmplY3QuaXNFeHRlbnNpYmxlKG9iaikpLnRv
QmUodHJ1ZSk7ICAgIAorICAgICAgICB9KTsKKyAgICAgICAgCisgICAgICAgIGl0KCdzaG91bGQg
cmV0dXJuIGZhbHNlIGlmIG9iamVjdCBpcyBub3QgZXh0ZW5zaWJsZScsIGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgICAgIGV4cGVjdChPYmplY3QuaXNFeHRlbnNpYmxlKE9iamVjdC5wcmV2ZW50RXh0
ZW5zaW9ucyhvYmopKSkudG9CZShmYWxzZSk7ICAgIAorICAgICAgICB9KTsKKyAgICAgICAgCisg
ICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIGlmIG9iamVjdCBpcyBzZWFsJywgZnVuY3Rp
b24gKCkgeworICAgICAgICAgICAgZXhwZWN0KE9iamVjdC5pc0V4dGVuc2libGUoT2JqZWN0LnNl
YWwob2JqKSkpLnRvQmUoZmFsc2UpOyAgICAKKyAgICAgICAgfSk7CisgICAgICAgIAorICAgICAg
ICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSBpZiBvYmplY3QgaXMgZnJlZXplJywgZnVuY3Rpb24g
KCkgeworICAgICAgICAgICAgZXhwZWN0KE9iamVjdC5pc0V4dGVuc2libGUoT2JqZWN0LmZyZWV6
ZShvYmopKSkudG9CZShmYWxzZSk7ICAgIAorICAgICAgICB9KTsKKyAgICAgICAgCisgICAgICAg
IGl0KCdzaG91bGQgdGhyb3cgZXJyb3IgZm9yIG5vbiBvYmplY3QnLCBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICB2YXIgZTEgPSB7fTsKKyAgICAgICAgICAgIGV4cGVjdChmdW5jdGlvbiAoKSB7
CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmlzRXh0
ZW5zaWJsZSg0MikKKyAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHsKKyAgICAgICAgICAg
ICAgICAgICAgdGhyb3cgZTE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSkudG9U
aHJvdyhlMSk7CisgICAgICAgIH0pOworICAgIH0pOworIAorfSk7ClwgTm8gbmV3bGluZSBhdCBl
bmQgb2YgZmlsZQpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRq
cy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2VzNS1zaGltL3Rlc3RzL3NwZWMvcy1zdHJpbmcuanMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1l
eGFtcGxlLWFwcC9jb21wb25lbnRzL2VzNS1zaGltL3Rlc3RzL3NwZWMvcy1zdHJpbmcuanMJKHJl
dmlzaW9uIDApCisrKyBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4
YW1wbGUtYXBwL2NvbXBvbmVudHMvZXM1LXNoaW0vdGVzdHMvc3BlYy9zLXN0cmluZy5qcwkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDExIEBACitkZXNjcmliZSgnU3RyaW5nJywgZnVuY3Rpb24o
KSB7CisgICAgInVzZSBzdHJpY3QiOworICAgIGRlc2NyaWJlKCJ0cmltIiwgZnVuY3Rpb24oKSB7
CisgICAgICAgIHZhciB0ZXN0ID0gIlx4MDlceDBBXHgwQlx4MENceDBEXHgyMFx4QTBcdTE2ODBc
dTE4MEVcdTIwMDBcdTIwMDFcdTIwMDJcdTIwMDNcdTIwMDRcdTIwMDVcdTIwMDZcdTIwMDdcdTIw
MDhcdTIwMDlcdTIwMEFcdTIwMkZcdTIwNUZcdTMwMDBcdTIwMjhcdTIwMjlcdUZFRkZIZWxsbywg
V29ybGQhXHgwOVx4MEFceDBCXHgwQ1x4MERceDIwXHhBMFx1MTY4MFx1MTgwRVx1MjAwMFx1MjAw
MVx1MjAwMlx1MjAwM1x1MjAwNFx1MjAwNVx1MjAwNlx1MjAwN1x1MjAwOFx1MjAwOVx1MjAwQVx1
MjAyRlx1MjA1Rlx1MzAwMFx1MjAyOFx1MjAyOVx1RkVGRiI7CisKKyAgICAgICAgaXQoJ3RyaW1z
IGFsbCBFUzUgd2hpdGVzcGFjZScsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgZXhwZWN0KHRl
c3QudHJpbSgpKS50b0VxdWFsKCJIZWxsbywgV29ybGQhIik7CisgICAgICAgICAgICBleHBlY3Qo
dGVzdC50cmltKCkubGVuZ3RoKS50b0VxdWFsKDEzKTsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9
KTsKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBs
ZS1hcHAvY29tcG9uZW50cy9mbGlnaHQvLnRyYXZpcy55bWwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9y
bWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRz
L2ZsaWdodC8udHJhdmlzLnltbAkocmV2aXNpb24gMCkKKysrIFBlcmZvcm1hbmNlVGVzdHMvRG9Z
b3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9mbGlnaHQvLnRyYXZp
cy55bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3IEBACitsYW5ndWFnZTogbm9kZV9qcwor
bm9kZV9qczoKKyAgLSAwLjgKK2JlZm9yZV9zY3JpcHQ6CisgIC0gImV4cG9ydCBESVNQTEFZPTo5
OS4wIgorICAtICJzaCAtZSAvZXRjL2luaXQuZC94dmZiIHN0YXJ0Igorc2NyaXB0OiAibnBtIGlu
c3RhbGw7IG1ha2Ugc3RhbmRhbG9uZTsgcGhhbnRvbWpzIHRlc3QvcGhhbnRvbS1qYXNtaW5lL3J1
bl9qYXNtaW5lX3Rlc3QuY29mZmVlIHRlc3QvcnVuL2phc21pbmVfdGVzdC5odG1sIgpJbmRleDog
UGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21w
b25lbnRzL2ZsaWdodC9saWIvYWR2aWNlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVz
dHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9mbGlnaHQv
bGliL2FkdmljZS5qcwkocmV2aXNpb24gMCkKKysrIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVu
QmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9mbGlnaHQvbGliL2FkdmljZS5q
cwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY5IEBACisvLyA9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIENvcHlyaWdodCAyMDEzIFR3aXR0ZXIsIEluYwor
Ly8gTGljZW5zZWQgdW5kZXIgVGhlIE1JVCBMaWNlbnNlCisvLyBodHRwOi8vb3BlbnNvdXJjZS5v
cmcvbGljZW5zZXMvTUlUCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KKworInVzZSBzdHJpY3QiOworCitkZWZpbmUoCisKKyAgWworICAgICcuL3V0aWxzJywK
KyAgICAnLi9jb21wb3NlJworICBdLAorCisgIGZ1bmN0aW9uICh1dGlsLCBjb21wb3NlKSB7CisK
KyAgICB2YXIgYWR2aWNlID0geworCisgICAgICBhcm91bmQ6IGZ1bmN0aW9uKGJhc2UsIHdyYXBw
ZWQpIHsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGNvbXBvc2VkQXJvdW5kKCkgeworICAgICAg
ICAgIC8vIHVucGFja2luZyBhcmd1bWVudHMgYnkgaGFuZCBiZW5jaG1hcmtlZCBmYXN0ZXIKKyAg
ICAgICAgICB2YXIgaSA9IDAsIGwgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5
KGwgKyAxKTsKKyAgICAgICAgICBhcmdzWzBdID0gYmFzZS5iaW5kKHRoaXMpOworICAgICAgICAg
IGZvciAoOyBpIDwgbDsgaSsrKSBhcmdzW2kgKyAxXSA9IGFyZ3VtZW50c1tpXTsKKworICAgICAg
ICAgIHJldHVybiB3cmFwcGVkLmFwcGx5KHRoaXMsIGFyZ3MpOworICAgICAgICB9CisgICAgICB9
LAorCisgICAgICBiZWZvcmU6IGZ1bmN0aW9uKGJhc2UsIGJlZm9yZSkgeworICAgICAgICB2YXIg
YmVmb3JlRm4gPSAodHlwZW9mIGJlZm9yZSA9PSAnZnVuY3Rpb24nKSA/IGJlZm9yZSA6IGJlZm9y
ZS5vYmpbYmVmb3JlLmZuTmFtZV07CisgICAgICAgIHJldHVybiBmdW5jdGlvbiBjb21wb3NlZEJl
Zm9yZSgpIHsKKyAgICAgICAgICBiZWZvcmVGbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpOworICAg
ICAgICAgIHJldHVybiBiYXNlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisgICAgICAgIH0KKyAg
ICAgIH0sCisKKyAgICAgIGFmdGVyOiBmdW5jdGlvbihiYXNlLCBhZnRlcikgeworICAgICAgICB2
YXIgYWZ0ZXJGbiA9ICh0eXBlb2YgYWZ0ZXIgPT0gJ2Z1bmN0aW9uJykgPyBhZnRlciA6IGFmdGVy
Lm9ialthZnRlci5mbk5hbWVdOworICAgICAgICByZXR1cm4gZnVuY3Rpb24gY29tcG9zZWRBZnRl
cigpIHsKKyAgICAgICAgICB2YXIgcmVzID0gKGJhc2UudW5ib3VuZCB8fCBiYXNlKS5hcHBseSh0
aGlzLCBhcmd1bWVudHMpOworICAgICAgICAgIGFmdGVyRm4uYXBwbHkodGhpcywgYXJndW1lbnRz
KTsKKyAgICAgICAgICByZXR1cm4gcmVzOworICAgICAgICB9CisgICAgICB9LAorCisgICAgICAv
LyBhIG1peGluIHRoYXQgYWxsb3dzIG90aGVyIG1peGlucyB0byBhdWdtZW50IGV4aXN0aW5nIGZ1
bmN0aW9ucyBieSBhZGRpbmcgYWRkaXRpb25hbAorICAgICAgLy8gY29kZSBiZWZvcmUsIGFmdGVy
IG9yIGFyb3VuZC4KKyAgICAgIHdpdGhBZHZpY2U6IGZ1bmN0aW9uKCkgeworICAgICAgICBbJ2Jl
Zm9yZScsICdhZnRlcicsICdhcm91bmQnXS5mb3JFYWNoKGZ1bmN0aW9uKG0pIHsKKyAgICAgICAg
ICB0aGlzW21dID0gZnVuY3Rpb24obWV0aG9kLCBmbikgeworCisgICAgICAgICAgICBjb21wb3Nl
LnVubG9ja1Byb3BlcnR5KHRoaXMsIG1ldGhvZCwgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAg
IGlmICh0eXBlb2YgdGhpc1ttZXRob2RdID09ICdmdW5jdGlvbicpIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gdGhpc1ttZXRob2RdID0gYWR2aWNlW21dKHRoaXNbbWV0aG9kXSwgZm4pOworICAg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzW21ldGhvZF0g
PSBmbjsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICB9Owor
ICAgICAgICB9LCB0aGlzKTsKKyAgICAgIH0KKyAgICB9OworCisgICAgcmV0dXJuIGFkdmljZTsK
KyAgfQorKTsKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMt
ZXhhbXBsZS1hcHAvY29tcG9uZW50cy9mbGlnaHQvbGliL2NvbXBvbmVudC5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBw
L2NvbXBvbmVudHMvZmxpZ2h0L2xpYi9jb21wb25lbnQuanMJKHJldmlzaW9uIDApCisrKyBQZXJm
b3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVu
dHMvZmxpZ2h0L2xpYi9jb21wb25lbnQuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMDgg
QEAKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gQ29w
eXJpZ2h0IDIwMTMgVHdpdHRlciwgSW5jCisvLyBMaWNlbnNlZCB1bmRlciBUaGUgTUlUIExpY2Vu
c2UKKy8vIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVQKKy8vID09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisidXNlIHN0cmljdCI7CisKK2RlZmlu
ZSgKKworICBbCisgICAgJy4vYWR2aWNlJywKKyAgICAnLi91dGlscycsCisgICAgJy4vY29tcG9z
ZScsCisgICAgJy4vcmVnaXN0cnknCisgIF0sCisKKyAgZnVuY3Rpb24oYWR2aWNlLCB1dGlscywg
Y29tcG9zZSwgcmVnaXN0cnkpIHsKKworICAgIHZhciBmdW5jdGlvbk5hbWVSZWdFeCA9IC9mdW5j
dGlvbiAoLio/KVxzP1woLzsKKyAgICB2YXIgY29tcG9uZW50SWQgPSAwOworCisgICAgZnVuY3Rp
b24gdGVhcmRvd25JbnN0YW5jZShpbnN0YW5jZUluZm8peworICAgICAgaW5zdGFuY2VJbmZvLmV2
ZW50cy5zbGljZSgpLmZvckVhY2goZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgdmFyIGFyZ3Mg
PSBbZXZlbnQudHlwZV07CisKKyAgICAgICAgZXZlbnQuZWxlbWVudCAmJiBhcmdzLnVuc2hpZnQo
ZXZlbnQuZWxlbWVudCk7CisgICAgICAgICh0eXBlb2YgZXZlbnQuY2FsbGJhY2sgPT0gJ2Z1bmN0
aW9uJykgJiYgYXJncy5wdXNoKGV2ZW50LmNhbGxiYWNrKTsKKworICAgICAgICB0aGlzLm9mZi5h
cHBseSh0aGlzLCBhcmdzKTsKKyAgICAgIH0sIGluc3RhbmNlSW5mby5pbnN0YW5jZSk7CisgICAg
fQorCisKKyAgICBmdW5jdGlvbiB0ZWFyZG93bigpIHsKKyAgICAgIHRlYXJkb3duSW5zdGFuY2Uo
cmVnaXN0cnkuZmluZEluc3RhbmNlSW5mbyh0aGlzKSk7CisgICAgfQorCisgICAgLy90ZWFyZG93
biBmb3IgYWxsIGluc3RhbmNlcyBvZiB0aGlzIGNvbnN0cnVjdG9yCisgICAgZnVuY3Rpb24gdGVh
cmRvd25BbGwoKSB7CisgICAgICB2YXIgY29tcG9uZW50SW5mbyA9IHJlZ2lzdHJ5LmZpbmRDb21w
b25lbnRJbmZvKHRoaXMpOworCisgICAgICBjb21wb25lbnRJbmZvICYmIE9iamVjdC5rZXlzKGNv
bXBvbmVudEluZm8uaW5zdGFuY2VzKS5mb3JFYWNoKGZ1bmN0aW9uKGspIHsKKyAgICAgICAgdmFy
IGluZm8gPSBjb21wb25lbnRJbmZvLmluc3RhbmNlc1trXTsKKyAgICAgICAgaW5mby5pbnN0YW5j
ZS50ZWFyZG93bigpOworICAgICAgfSk7CisgICAgfQorCisgICAgZnVuY3Rpb24gY2hlY2tTZXJp
YWxpemFibGUodHlwZSwgZGF0YSkgeworICAgICAgdHJ5IHsKKyAgICAgICAgd2luZG93LnBvc3RN
ZXNzYWdlKGRhdGEsICcqJyk7CisgICAgICB9IGNhdGNoKGUpIHsKKyAgICAgICAgY29uc29sZS5s
b2coJ3Vuc2VyaWFsaXphYmxlIGRhdGEgZm9yIGV2ZW50Jyx0eXBlLCc6JyxkYXRhKTsKKyAgICAg
ICAgdGhyb3cgbmV3IEVycm9yKAorICAgICAgICAgIFsiVGhlIGV2ZW50IiwgdHlwZSwgIm9uIGNv
bXBvbmVudCIsIHRoaXMudG9TdHJpbmcoKSwgIndhcyB0cmlnZ2VyZWQgd2l0aCBub24tc2VyaWFs
aXphYmxlIGRhdGEiXS5qb2luKCIgIikKKyAgICAgICAgKTsKKyAgICAgIH0KKyAgICB9CisKKyAg
ICAvL2NvbW1vbiBtaXhpbiBhbGxvY2F0ZXMgYmFzaWMgZnVuY3Rpb25hbGl0eSAtIHVzZWQgYnkg
YWxsIGNvbXBvbmVudCBwcm90b3R5cGVzCisgICAgLy9jYWxsYmFjayBjb250ZXh0IGlzIGJvdW5k
IHRvIGNvbXBvbmVudAorICAgIGZ1bmN0aW9uIHdpdGhCYXNlQ29tcG9uZW50KCkgeworCisgICAg
ICAvLyBkZWxlZ2F0ZSB0cmlnZ2VyLCBiaW5kIGFuZCB1bmJpbmQgdG8gYW4gZWxlbWVudAorICAg
ICAgLy8gaWYgJGVsZW1lbnQgbm90IHN1cHBsaWVkLCB1c2UgY29tcG9uZW50J3Mgbm9kZQorICAg
ICAgLy8gb3RoZXIgYXJndW1lbnRzIGFyZSBwYXNzZWQgb24KKyAgICAgIC8vIGV2ZW50IGNhbiBi
ZSBlaXRoZXIgYSBzdHJpbmcgc3BlY2lmeWluZyB0aGUgdHlwZQorICAgICAgLy8gb2YgdGhlIGV2
ZW50LCBvciBhIGhhc2ggc3BlY2lmeWluZyBib3RoIHRoZSB0eXBlCisgICAgICAvLyBhbmQgYSBk
ZWZhdWx0IGZ1bmN0aW9uIHRvIGJlIGNhbGxlZC4KKyAgICAgIHRoaXMudHJpZ2dlciA9IGZ1bmN0
aW9uKCkgeworICAgICAgICB2YXIgJGVsZW1lbnQsIHR5cGUsIGRhdGEsIGV2ZW50LCBkZWZhdWx0
Rm47CisgICAgICAgIHZhciBsYXN0SW5kZXggPSBhcmd1bWVudHMubGVuZ3RoIC0gMSwgbGFzdEFy
ZyA9IGFyZ3VtZW50c1tsYXN0SW5kZXhdOworCisgICAgICAgIGlmICh0eXBlb2YgbGFzdEFyZyAh
PSAic3RyaW5nIiAmJiAhKGxhc3RBcmcgJiYgbGFzdEFyZy5kZWZhdWx0QmVoYXZpb3IpKSB7Cisg
ICAgICAgICAgbGFzdEluZGV4LS07CisgICAgICAgICAgZGF0YSA9IGxhc3RBcmc7CisgICAgICAg
IH0KKworICAgICAgICBpZiAobGFzdEluZGV4ID09IDEpIHsKKyAgICAgICAgICAkZWxlbWVudCA9
ICQoYXJndW1lbnRzWzBdKTsKKyAgICAgICAgICBldmVudCA9IGFyZ3VtZW50c1sxXTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAkZWxlbWVudCA9IHRoaXMuJG5vZGU7CisgICAgICAgICAg
ZXZlbnQgPSBhcmd1bWVudHNbMF07CisgICAgICAgIH0KKworICAgICAgICBpZiAoZXZlbnQuZGVm
YXVsdEJlaGF2aW9yKSB7CisgICAgICAgICAgZGVmYXVsdEZuID0gZXZlbnQuZGVmYXVsdEJlaGF2
aW9yOworICAgICAgICAgIGV2ZW50ID0gJC5FdmVudChldmVudC50eXBlKTsKKyAgICAgICAgfQor
CisgICAgICAgIHR5cGUgPSBldmVudC50eXBlIHx8IGV2ZW50OworCisgICAgICAgIGlmICh3aW5k
b3cuREVCVUcgJiYgd2luZG93LkRFQlVHLmVuYWJsZWQgJiYgd2luZG93LnBvc3RNZXNzYWdlKSB7
CisgICAgICAgICAgY2hlY2tTZXJpYWxpemFibGUuY2FsbCh0aGlzLCB0eXBlLCBkYXRhKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmICh0eXBlb2YgdGhpcy5hdHRyLmV2ZW50RGF0YSA9PT0gJ29i
amVjdCcpIHsKKyAgICAgICAgICBkYXRhID0gJC5leHRlbmQodHJ1ZSwge30sIHRoaXMuYXR0ci5l
dmVudERhdGEsIGRhdGEpOworICAgICAgICB9CisKKyAgICAgICAgJGVsZW1lbnQudHJpZ2dlcigo
ZXZlbnQgfHwgdHlwZSksIGRhdGEpOworCisgICAgICAgIGlmIChkZWZhdWx0Rm4gJiYgIWV2ZW50
LmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7CisgICAgICAgICAgKHRoaXNbZGVmYXVsdEZuXSB8fCBk
ZWZhdWx0Rm4pLmNhbGwodGhpcyk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gJGVsZW1l
bnQ7CisgICAgICB9OworCisgICAgICB0aGlzLm9uID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZh
ciAkZWxlbWVudCwgdHlwZSwgY2FsbGJhY2ssIG9yaWdpbmFsQ2I7CisgICAgICAgIHZhciBsYXN0
SW5kZXggPSBhcmd1bWVudHMubGVuZ3RoIC0gMSwgb3JpZ2luID0gYXJndW1lbnRzW2xhc3RJbmRl
eF07CisKKyAgICAgICAgaWYgKHR5cGVvZiBvcmlnaW4gPT0gIm9iamVjdCIpIHsKKyAgICAgICAg
ICAvL2RlbGVnYXRlIGNhbGxiYWNrCisgICAgICAgICAgb3JpZ2luYWxDYiA9IHV0aWxzLmRlbGVn
YXRlKAorICAgICAgICAgICAgdGhpcy5yZXNvbHZlRGVsZWdhdGVSdWxlcyhvcmlnaW4pCisgICAg
ICAgICAgKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBvcmlnaW5hbENiID0gb3JpZ2lu
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKGxhc3RJbmRleCA9PSAyKSB7CisgICAgICAgICAg
JGVsZW1lbnQgPSAkKGFyZ3VtZW50c1swXSk7CisgICAgICAgICAgdHlwZSA9IGFyZ3VtZW50c1sx
XTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAkZWxlbWVudCA9IHRoaXMuJG5vZGU7Cisg
ICAgICAgICAgdHlwZSA9IGFyZ3VtZW50c1swXTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0
eXBlb2Ygb3JpZ2luYWxDYiAhPSAnZnVuY3Rpb24nICYmIHR5cGVvZiBvcmlnaW5hbENiICE9ICdv
YmplY3QnKSB7CisgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJVbmFibGUgdG8gYmluZCB0byAn
IiArIHR5cGUgKyAiJyBiZWNhdXNlIHRoZSBnaXZlbiBjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlv
biBvciBhbiBvYmplY3QiKTsKKyAgICAgICAgfQorCisgICAgICAgIGNhbGxiYWNrID0gb3JpZ2lu
YWxDYi5iaW5kKHRoaXMpOworICAgICAgICBjYWxsYmFjay50YXJnZXQgPSBvcmlnaW5hbENiOwor
CisgICAgICAgIC8vIGlmIHRoZSBvcmlnaW5hbCBjYWxsYmFjayBpcyBhbHJlYWR5IGJyYW5kZWQg
YnkgalF1ZXJ5J3MgZ3VpZCwgY29weSBpdCB0byB0aGUgY29udGV4dC1ib3VuZCB2ZXJzaW9uCisg
ICAgICAgIGlmIChvcmlnaW5hbENiLmd1aWQpIHsKKyAgICAgICAgICBjYWxsYmFjay5ndWlkID0g
b3JpZ2luYWxDYi5ndWlkOworICAgICAgICB9CisKKyAgICAgICAgJGVsZW1lbnQub24odHlwZSwg
Y2FsbGJhY2spOworCisgICAgICAgIC8vIGdldCBqcXVlcnkncyBndWlkIGZyb20gb3VyIGJvdW5k
IGZuLCBzbyB1bmJpbmRpbmcgd2lsbCB3b3JrCisgICAgICAgIG9yaWdpbmFsQ2IuZ3VpZCA9IGNh
bGxiYWNrLmd1aWQ7CisKKyAgICAgICAgcmV0dXJuIGNhbGxiYWNrOworICAgICAgfTsKKworICAg
ICAgdGhpcy5vZmYgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyICRlbGVtZW50LCB0eXBlLCBj
YWxsYmFjazsKKyAgICAgICAgdmFyIGxhc3RJbmRleCA9IGFyZ3VtZW50cy5sZW5ndGggLSAxOwor
CisgICAgICAgIGlmICh0eXBlb2YgYXJndW1lbnRzW2xhc3RJbmRleF0gPT0gImZ1bmN0aW9uIikg
eworICAgICAgICAgIGNhbGxiYWNrID0gYXJndW1lbnRzW2xhc3RJbmRleF07CisgICAgICAgICAg
bGFzdEluZGV4IC09IDE7CisgICAgICAgIH0KKworICAgICAgICBpZiAobGFzdEluZGV4ID09IDEp
IHsKKyAgICAgICAgICAkZWxlbWVudCA9ICQoYXJndW1lbnRzWzBdKTsKKyAgICAgICAgICB0eXBl
ID0gYXJndW1lbnRzWzFdOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICRlbGVtZW50ID0g
dGhpcy4kbm9kZTsKKyAgICAgICAgICB0eXBlID0gYXJndW1lbnRzWzBdOworICAgICAgICB9CisK
KyAgICAgICAgcmV0dXJuICRlbGVtZW50Lm9mZih0eXBlLCBjYWxsYmFjayk7CisgICAgICB9Owor
CisgICAgICB0aGlzLnJlc29sdmVEZWxlZ2F0ZVJ1bGVzID0gZnVuY3Rpb24ocnVsZUluZm8pIHsK
KyAgICAgICAgdmFyIHJ1bGVzID0ge307CisKKyAgICAgICAgT2JqZWN0LmtleXMocnVsZUluZm8p
LmZvckVhY2goZnVuY3Rpb24ocikgeworICAgICAgICAgIGlmICghciBpbiB0aGlzLmF0dHIpIHsK
KyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ29tcG9uZW50ICInICsgdGhpcy50b1N0cmlu
ZygpICsgJyIgd2FudHMgdG8gbGlzdGVuIG9uICInICsgciArICciIGJ1dCBubyBzdWNoIGF0dHJp
YnV0ZSB3YXMgZGVmaW5lZC4nKTsKKyAgICAgICAgICB9CisgICAgICAgICAgcnVsZXNbdGhpcy5h
dHRyW3JdXSA9IHJ1bGVJbmZvW3JdOworICAgICAgICB9LCB0aGlzKTsKKworICAgICAgICByZXR1
cm4gcnVsZXM7CisgICAgICB9OworCisgICAgICB0aGlzLmRlZmF1bHRBdHRycyA9IGZ1bmN0aW9u
KGRlZmF1bHRzKSB7CisgICAgICAgIHV0aWxzLnB1c2godGhpcy5kZWZhdWx0cywgZGVmYXVsdHMs
IHRydWUpIHx8ICh0aGlzLmRlZmF1bHRzID0gZGVmYXVsdHMpOworICAgICAgfTsKKworICAgICAg
dGhpcy5zZWxlY3QgPSBmdW5jdGlvbihhdHRyaWJ1dGVLZXkpIHsKKyAgICAgICAgcmV0dXJuIHRo
aXMuJG5vZGUuZmluZCh0aGlzLmF0dHJbYXR0cmlidXRlS2V5XSk7CisgICAgICB9OworCisgICAg
ICB0aGlzLmluaXRpYWxpemUgPSAkLm5vb3A7CisgICAgICB0aGlzLnRlYXJkb3duID0gdGVhcmRv
d247CisgICAgfQorCisgICAgZnVuY3Rpb24gYXR0YWNoVG8oc2VsZWN0b3IvKiwgb3B0aW9ucyBh
cmdzICovKSB7CisgICAgICAvLyB1bnBhY2tpbmcgYXJndW1lbnRzIGJ5IGhhbmQgYmVuY2htYXJr
ZWQgZmFzdGVyCisgICAgICB2YXIgbCA9IGFyZ3VtZW50cy5sZW5ndGg7CisgICAgICB2YXIgYXJn
cyA9IG5ldyBBcnJheShsIC0gMSk7CisgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGw7IGkrKykg
YXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07CisKKyAgICAgIGlmICghc2VsZWN0b3IpIHsKKyAg
ICAgICAgdGhyb3cgbmV3IEVycm9yKCJDb21wb25lbnQgbmVlZHMgdG8gYmUgYXR0YWNoVG8nZCBh
IGpRdWVyeSBvYmplY3QsIG5hdGl2ZSBub2RlIG9yIHNlbGVjdG9yIHN0cmluZyIpOworICAgICAg
fQorCisgICAgICB2YXIgb3B0aW9ucyA9IHV0aWxzLm1lcmdlLmFwcGx5KHV0aWxzLCBhcmdzKTsK
KworICAgICAgJChzZWxlY3RvcikuZWFjaChmdW5jdGlvbihpLCBub2RlKSB7CisgICAgICAgIHZh
ciByYXdOb2RlID0gbm9kZS5qUXVlcnkgPyBub2RlWzBdIDogbm9kZTsKKyAgICAgICAgdmFyIGNv
bXBvbmVudEluZm8gPSByZWdpc3RyeS5maW5kQ29tcG9uZW50SW5mbyh0aGlzKQorICAgICAgICBp
ZiAoY29tcG9uZW50SW5mbyAmJiBjb21wb25lbnRJbmZvLmlzQXR0YWNoZWRUbyhyYXdOb2RlKSkg
eworICAgICAgICAgIC8vYWxyZWFkeSBhdHRhY2hlZAorICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCisgICAgICAgIG5ldyB0aGlzKG5vZGUsIG9wdGlvbnMpOworICAgICAgfS5iaW5kKHRo
aXMpKTsKKyAgICB9CisKKyAgICAvLyBkZWZpbmUgdGhlIGNvbnN0cnVjdG9yIGZvciBhIGN1c3Rv
bSBjb21wb25lbnQgdHlwZQorICAgIC8vIHRha2VzIGFuIHVubGltaXRlZCBudW1iZXIgb2YgbWl4
aW4gZnVuY3Rpb25zIGFzIGFyZ3VtZW50cworICAgIC8vIHR5cGljYWwgYXBpIGNhbGwgd2l0aCAz
IG1peGluczogZGVmaW5lKHRpbWVsaW5lLCB3aXRoVHdlZXRDYXBhYmlsaXR5LCB3aXRoU2Nyb2xs
Q2FwYWJpbGl0eSk7CisgICAgZnVuY3Rpb24gZGVmaW5lKC8qbWl4aW5zKi8pIHsKKyAgICAgIC8v
IHVucGFja2luZyBhcmd1bWVudHMgYnkgaGFuZCBiZW5jaG1hcmtlZCBmYXN0ZXIKKyAgICAgIHZh
ciBsID0gYXJndW1lbnRzLmxlbmd0aDsKKyAgICAgIHZhciBtaXhpbnMgPSBuZXcgQXJyYXkobCk7
CisgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGw7IGkrKykgbWl4aW5zW2ldID0gYXJndW1lbnRz
W2ldOworCisgICAgICBDb21wb25lbnQudG9TdHJpbmcgPSBmdW5jdGlvbigpIHsKKyAgICAgICAg
dmFyIHByZXR0eVByaW50TWl4aW5zID0gbWl4aW5zLm1hcChmdW5jdGlvbihtaXhpbikgeworICAg
ICAgICAgIGlmIChtaXhpbi5uYW1lID09IG51bGwpIHsKKyAgICAgICAgICAgIC8vZnVuY3Rpb24g
bmFtZSBwcm9wZXJ0eSBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYnJvd3NlciwgdXNlIHJlZ2V4Cisg
ICAgICAgICAgICB2YXIgbSA9IG1peGluLnRvU3RyaW5nKCkubWF0Y2goZnVuY3Rpb25OYW1lUmVn
RXgpOworICAgICAgICAgICAgcmV0dXJuIChtICYmIG1bMV0pID8gbVsxXSA6ICIiOworICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gKG1peGluLm5hbWUgIT0gIndpdGhCYXNl
Q29tcG9uZW50IikgPyBtaXhpbi5uYW1lIDogIiI7CisgICAgICAgICAgfQorICAgICAgICB9KS5m
aWx0ZXIoQm9vbGVhbikuam9pbignLCAnKTsKKyAgICAgICAgcmV0dXJuIHByZXR0eVByaW50TWl4
aW5zOworICAgICAgfTsKKworICAgICAgaWYgKHdpbmRvdy5ERUJVRyAmJiB3aW5kb3cuREVCVUcu
ZW5hYmxlZCkgeworICAgICAgICBDb21wb25lbnQuZGVzY3JpYmUgPSBDb21wb25lbnQudG9TdHJp
bmcoKTsKKyAgICAgIH0KKworICAgICAgLy8nb3B0aW9ucycgaXMgb3B0aW9uYWwgaGFzaCB0byBi
ZSBtZXJnZWQgd2l0aCAnZGVmYXVsdHMnIGluIHRoZSBjb21wb25lbnQgZGVmaW5pdGlvbgorICAg
ICAgZnVuY3Rpb24gQ29tcG9uZW50KG5vZGUsIG9wdGlvbnMpIHsKKyAgICAgICAgb3B0aW9ucyA9
IG9wdGlvbnMgfHwge307CisgICAgICAgIHRoaXMuaWRlbnRpdHkgPSBjb21wb25lbnRJZCsrOwor
CisgICAgICAgIGlmICghbm9kZSkgeworICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQ29tcG9u
ZW50IG5lZWRzIGEgbm9kZSIpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG5vZGUuanF1ZXJ5
KSB7CisgICAgICAgICAgdGhpcy5ub2RlID0gbm9kZVswXTsKKyAgICAgICAgICB0aGlzLiRub2Rl
ID0gbm9kZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICB0aGlzLm5vZGUgPSBub2RlOwor
ICAgICAgICAgIHRoaXMuJG5vZGUgPSAkKG5vZGUpOworICAgICAgICB9CisKKyAgICAgICAgdGhp
cy50b1N0cmluZyA9IENvbXBvbmVudC50b1N0cmluZzsKKyAgICAgICAgaWYgKHdpbmRvdy5ERUJV
RyAmJiB3aW5kb3cuREVCVUcuZW5hYmxlZCkgeworICAgICAgICAgIHRoaXMuZGVzY3JpYmUgPSB0
aGlzLnRvU3RyaW5nKCk7CisgICAgICAgIH0KKworICAgICAgICAvL21lcmdlIGRlZmF1bHRzIHdp
dGggc3VwcGxpZWQgb3B0aW9ucworICAgICAgICAvL3B1dCBvcHRpb25zIGluIGF0dHIuX19wcm90
b19fIHRvIGF2b2lkIG1lcmdlIG92ZXJoZWFkCisgICAgICAgIHZhciBhdHRyID0gT2JqZWN0LmNy
ZWF0ZShvcHRpb25zKTsKKyAgICAgICAgZm9yICh2YXIga2V5IGluIHRoaXMuZGVmYXVsdHMpIHsK
KyAgICAgICAgICBpZiAoIW9wdGlvbnMuaGFzT3duUHJvcGVydHkoa2V5KSkgeworICAgICAgICAg
ICAgYXR0cltrZXldID0gdGhpcy5kZWZhdWx0c1trZXldOworICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICB0aGlzLmF0dHIgPSBhdHRyOworCisgICAgICAgIE9iamVjdC5rZXlzKHRoaXMu
ZGVmYXVsdHMgfHwge30pLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7CisgICAgICAgICAgaWYgKHRo
aXMuZGVmYXVsdHNba2V5XSA9PT0gbnVsbCAmJiB0aGlzLmF0dHJba2V5XSA9PT0gbnVsbCkgewor
ICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBhdHRyaWJ1dGUgIicgKyBrZXkg
KyAnIiBub3Qgc3BlY2lmaWVkIGluIGF0dGFjaFRvIGZvciBjb21wb25lbnQgIicgKyB0aGlzLnRv
U3RyaW5nKCkgKyAnIi4nKTsKKyAgICAgICAgICB9CisgICAgICAgIH0sIHRoaXMpOworCisgICAg
ICAgIHRoaXMuaW5pdGlhbGl6ZS5jYWxsKHRoaXMsIG9wdGlvbnMpOworICAgICAgfQorCisgICAg
ICBDb21wb25lbnQuYXR0YWNoVG8gPSBhdHRhY2hUbzsKKyAgICAgIENvbXBvbmVudC50ZWFyZG93
bkFsbCA9IHRlYXJkb3duQWxsOworCisgICAgICAvLyBwcmVwZW5kIGNvbW1vbiBtaXhpbnMgdG8g
c3VwcGxpZWQgbGlzdCwgdGhlbiBtaXhpbiBhbGwgZmxhdm9ycworICAgICAgbWl4aW5zLnVuc2hp
ZnQod2l0aEJhc2VDb21wb25lbnQsIGFkdmljZS53aXRoQWR2aWNlLCByZWdpc3RyeS53aXRoUmVn
aXN0cmF0aW9uKTsKKworICAgICAgY29tcG9zZS5taXhpbihDb21wb25lbnQucHJvdG90eXBlLCBt
aXhpbnMpOworCisgICAgICByZXR1cm4gQ29tcG9uZW50OworICAgIH0KKworICAgIGRlZmluZS50
ZWFyZG93bkFsbCA9IGZ1bmN0aW9uKCkgeworICAgICAgcmVnaXN0cnkuY29tcG9uZW50cy5zbGlj
ZSgpLmZvckVhY2goZnVuY3Rpb24oYykgeworICAgICAgICBjLmNvbXBvbmVudC50ZWFyZG93bkFs
bCgpOworICAgICAgfSk7CisgICAgICByZWdpc3RyeS5yZXNldCgpOworICAgIH07CisKKyAgICBy
ZXR1cm4gZGVmaW5lOworICB9CispOwpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5C
ZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2ZsaWdodC9saWIvY29tcG9zZS5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpz
LWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvZmxpZ2h0L2xpYi9jb21wb3NlLmpzCShyZXZpc2lvbiAw
KQorKysgUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFw
cC9jb21wb25lbnRzL2ZsaWdodC9saWIvY29tcG9zZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDg2IEBACisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
Ky8vIENvcHlyaWdodCAyMDEzIFR3aXR0ZXIsIEluYworLy8gTGljZW5zZWQgdW5kZXIgVGhlIE1J
VCBMaWNlbnNlCisvLyBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUCisvLyA9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworInVzZSBzdHJpY3QiOwor
CitkZWZpbmUoCisKKyAgWworICAgICcuL3V0aWxzJywKKyAgICAnLi4vdG9vbHMvZGVidWcvZGVi
dWcnCisgIF0sCisKKyAgZnVuY3Rpb24odXRpbCwgZGVidWcpIHsKKworICAgIC8vZW51bWVyYWJs
ZXMgYXJlIHNoaW1zIC0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIHNoaW0gZG9lc24ndCB3b3Jr
CisgICAgdmFyIGNhbldyaXRlUHJvdGVjdCA9IGRlYnVnLmVuYWJsZWQgJiYgIXV0aWwuaXNFbnVt
ZXJhYmxlKE9iamVjdCwgJ2dldE93blByb3BlcnR5RGVzY3JpcHRvcicpOworICAgIC8vd2hpdGVs
aXN0IG9mIHVubG9ja2FibGUgcHJvcGVydHkgbmFtZXMKKyAgICB2YXIgZG9udExvY2sgPSBbJ21p
eGVkSW4nXTsKKworICAgIGlmIChjYW5Xcml0ZVByb3RlY3QpIHsKKyAgICAgIC8vSUU4IGdldE93
blByb3BlcnR5RGVzY3JpcHRvciBpcyBidWlsdC1pbiBidXQgdGhyb3dzIGV4ZXB0aW9uIG9uIG5v
biBET00gb2JqZWN0cworICAgICAgdHJ5IHsKKyAgICAgICAgT2JqZWN0LmdldE93blByb3BlcnR5
RGVzY3JpcHRvcihPYmplY3QsICdrZXlzJyk7CisgICAgICB9IGNhdGNoKGUpIHsKKyAgICAgICAg
Y2FuV3JpdGVQcm90ZWN0ID0gZmFsc2U7CisgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24g
c2V0UHJvcGVydHlXcml0YWJpbGl0eShvYmosIGlzV3JpdGFibGUpIHsKKyAgICAgIGlmICghY2Fu
V3JpdGVQcm90ZWN0KSB7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKworICAgICAgdmFyIHBy
b3BzID0gT2JqZWN0LmNyZWF0ZShudWxsKTsKKworICAgICAgT2JqZWN0LmtleXMob2JqKS5mb3JF
YWNoKAorICAgICAgICBmdW5jdGlvbiAoa2V5KSB7CisgICAgICAgICAgaWYgKGRvbnRMb2NrLmlu
ZGV4T2Yoa2V5KSA8IDApIHsKKyAgICAgICAgICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blBy
b3BlcnR5RGVzY3JpcHRvcihvYmosIGtleSk7CisgICAgICAgICAgICBkZXNjLndyaXRhYmxlID0g
aXNXcml0YWJsZTsKKyAgICAgICAgICAgIHByb3BzW2tleV0gPSBkZXNjOworICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgKTsKKworICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMob2Jq
LCBwcm9wcyk7CisgICAgfQorCisgICAgZnVuY3Rpb24gdW5sb2NrUHJvcGVydHkob2JqLCBwcm9w
LCBvcCkgeworICAgICAgdmFyIHdyaXRhYmxlOworCisgICAgICBpZiAoIWNhbldyaXRlUHJvdGVj
dCB8fCAhb2JqLmhhc093blByb3BlcnR5KHByb3ApKSB7CisgICAgICAgIG9wLmNhbGwob2JqKTsK
KyAgICAgICAgcmV0dXJuOworICAgICAgfQorCisgICAgICB3cml0YWJsZSA9IE9iamVjdC5nZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCBwcm9wKS53cml0YWJsZTsKKyAgICAgIE9iamVjdC5k
ZWZpbmVQcm9wZXJ0eShvYmosIHByb3AsIHsgd3JpdGFibGU6IHRydWUgfSk7CisgICAgICBvcC5j
YWxsKG9iaik7CisgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBwcm9wLCB7IHdyaXRh
YmxlOiB3cml0YWJsZSB9KTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBtaXhpbihiYXNlLCBtaXhp
bnMpIHsKKyAgICAgIGJhc2UubWl4ZWRJbiA9IGJhc2UuaGFzT3duUHJvcGVydHkoJ21peGVkSW4n
KSA/IGJhc2UubWl4ZWRJbiA6IFtdOworCisgICAgICBtaXhpbnMuZm9yRWFjaChmdW5jdGlvbiht
aXhpbikgeworICAgICAgICBpZiAoYmFzZS5taXhlZEluLmluZGV4T2YobWl4aW4pID09IC0xKSB7
CisgICAgICAgICAgc2V0UHJvcGVydHlXcml0YWJpbGl0eShiYXNlLCBmYWxzZSk7CisgICAgICAg
ICAgbWl4aW4uY2FsbChiYXNlKTsKKyAgICAgICAgICBiYXNlLm1peGVkSW4ucHVzaChtaXhpbik7
CisgICAgICAgIH0KKyAgICAgIH0pOworCisgICAgICBzZXRQcm9wZXJ0eVdyaXRhYmlsaXR5KGJh
c2UsIHRydWUpOworICAgIH0KKworICAgIHJldHVybiB7CisgICAgICBtaXhpbjogbWl4aW4sCisg
ICAgICB1bmxvY2tQcm9wZXJ0eTogdW5sb2NrUHJvcGVydHkKKyAgICB9OworCisgIH0KKyk7Cklu
ZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBw
L2NvbXBvbmVudHMvZmxpZ2h0L2xpYi9pbmRleC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5j
ZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvZmxp
Z2h0L2xpYi9pbmRleC5qcwkocmV2aXNpb24gMCkKKysrIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VF
dmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9mbGlnaHQvbGliL2luZGV4
LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzAgQEAKKy8vID09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gQ29weXJpZ2h0IDIwMTMgVHdpdHRlciwgSW5j
CisvLyBMaWNlbnNlZCB1bmRlciBUaGUgTUlUIExpY2Vuc2UKKy8vIGh0dHA6Ly9vcGVuc291cmNl
Lm9yZy9saWNlbnNlcy9NSVQKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQorCitkZWZpbmUoCisKKyAgWworICAgICcuL2FkdmljZScsCisgICAgJy4vY29tcG9u
ZW50JywKKyAgICAnLi9jb21wb3NlJywKKyAgICAnLi9sb2dnZXInLAorICAgICcuL3JlZ2lzdHJ5
JywKKyAgICAnLi91dGlscycKKyAgXSwKKworICBmdW5jdGlvbiAoYWR2aWNlLCBjb21wb25lbnQs
IGNvbXBvc2UsIGxvZ2dlciwgcmVnaXN0cnksIHV0aWxzKSB7CisKKyAgICByZXR1cm4geworICAg
ICAgYWR2aWNlOiBhZHZpY2UsCisgICAgICBjb21wb25lbnQ6IGNvbXBvbmVudCwKKyAgICAgIGNv
bXBvc2U6IGNvbXBvc2UsCisgICAgICBsb2dnZXI6IGxvZ2dlciwKKyAgICAgIHJlZ2lzdHJ5OiBy
ZWdpc3RyeSwKKyAgICAgIHV0aWxzOiB1dGlscworICAgIH07CisKKyAgfQorKTsKSW5kZXg6IFBl
cmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9u
ZW50cy9mbGlnaHQvbGliL2xvZ2dlci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3Rz
L0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvZmxpZ2h0L2xp
Yi9sb2dnZXIuanMJKHJldmlzaW9uIDApCisrKyBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJl
bmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvZmxpZ2h0L2xpYi9sb2dnZXIuanMJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5MyBAQAorLy8gPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09CisvLyBDb3B5cmlnaHQgMjAxMyBUd2l0dGVyLCBJbmMKKy8v
IExpY2Vuc2VkIHVuZGVyIFRoZSBNSVQgTGljZW5zZQorLy8gaHR0cDovL29wZW5zb3VyY2Uub3Jn
L2xpY2Vuc2VzL01JVAorLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09CisKKyJ1c2Ugc3RyaWN0IjsKKworZGVmaW5lKAorCisgIFsKKyAgICAnLi9jb21wb3NlJywK
KyAgICAnLi91dGlscycKKyAgXSwKKworICBmdW5jdGlvbiAoY29tcG9zZSwgdXRpbCkgeworCisg
ICAgdmFyIGFjdGlvblN5bWJvbHMgPSB7CisgICAgICBvbjonPC0nLAorICAgICAgdHJpZ2dlcjog
Jy0+JywKKyAgICAgIG9mZjogJ3ggJworICAgIH07CisKKyAgICBmdW5jdGlvbiBlbGVtVG9TdHJp
bmcoZWxlbSkgeworICAgICAgdmFyIHRhZ1N0ciA9IGVsZW0udGFnTmFtZSA/IGVsZW0udGFnTmFt
ZS50b0xvd2VyQ2FzZSgpIDogZWxlbS50b1N0cmluZygpOworICAgICAgdmFyIGNsYXNzU3RyID0g
ZWxlbS5jbGFzc05hbWUgPyAiLiIgKyAoZWxlbS5jbGFzc05hbWUpIDogIiI7CisgICAgICB2YXIg
cmVzdWx0ID0gdGFnU3RyICsgY2xhc3NTdHI7CisgICAgICByZXR1cm4gZWxlbS50YWdOYW1lID8g
WydcJycsICdcJyddLmpvaW4ocmVzdWx0KSA6IHJlc3VsdDsKKyAgICB9CisKKyAgICBmdW5jdGlv
biBsb2coYWN0aW9uLCBjb21wb25lbnQsIGV2ZW50QXJncykgeworCisgICAgICB2YXIgbmFtZSwg
ZWxlbSwgZm4sIGZuTmFtZSwgbG9nRmlsdGVyLCB0b1JlZ0V4cCwgYWN0aW9uTG9nZ2FibGUsIG5h
bWVMb2dnYWJsZTsKKworICAgICAgaWYgKHR5cGVvZiBldmVudEFyZ3NbZXZlbnRBcmdzLmxlbmd0
aC0xXSA9PSAnZnVuY3Rpb24nKSB7CisgICAgICAgIGZuID0gZXZlbnRBcmdzLnBvcCgpOworICAg
ICAgICBmbiA9IGZuLnVuYm91bmQgfHwgZm47IC8vdXNlIHVuYm91bmQgdmVyc2lvbiBpZiBhbnkg
KGJldHRlciBpbmZvKQorICAgICAgfQorCisgICAgICBpZiAodHlwZW9mIGV2ZW50QXJnc1tldmVu
dEFyZ3MubGVuZ3RoIC0gMV0gPT0gJ29iamVjdCcpIHsKKyAgICAgICAgZXZlbnRBcmdzLnBvcCgp
OyAvL3RyaWdnZXIgZGF0YSBhcmcgLSBub3QgbG9nZ2VkIHJpZ2h0IG5vdworICAgICAgfQorCisg
ICAgICBpZiAoZXZlbnRBcmdzLmxlbmd0aCA9PSAyKSB7CisgICAgICAgIGVsZW0gPSBldmVudEFy
Z3NbMF07CisgICAgICAgIG5hbWUgPSBldmVudEFyZ3NbMV07CisgICAgICB9IGVsc2UgeworICAg
ICAgICBlbGVtID0gY29tcG9uZW50LiRub2RlWzBdOworICAgICAgICBuYW1lID0gZXZlbnRBcmdz
WzBdOworICAgICAgfQorCisgICAgICBpZiAod2luZG93LkRFQlVHICYmIHdpbmRvdy5ERUJVRy5l
bmFibGVkKSB7CisgICAgICAgIGxvZ0ZpbHRlciA9IERFQlVHLmV2ZW50cy5sb2dGaWx0ZXI7CisK
KyAgICAgICAgLy8gbm8gcmVnZXggZm9yIHlvdSwgYWN0aW9ucy4uLgorICAgICAgICBhY3Rpb25M
b2dnYWJsZSA9IGxvZ0ZpbHRlci5hY3Rpb25zPT0iYWxsIiB8fCAobG9nRmlsdGVyLmFjdGlvbnMu
aW5kZXhPZihhY3Rpb24pID4gLTEpOworICAgICAgICAvLyBldmVudCBuYW1lIGZpbHRlciBhbGxv
dyB3aWxkY2FyZHMgb3IgcmVnZXguLi4KKyAgICAgICAgdG9SZWdFeHAgPSBmdW5jdGlvbihleHBy
KSB7CisgICAgICAgICAgcmV0dXJuIGV4cHIudGVzdCA/IGV4cHIgOiBuZXcgUmVnRXhwKCJeIiAr
IGV4cHIucmVwbGFjZSgvXCovZywgIi4qIikgKyAiJCIpOworICAgICAgICB9OworICAgICAgICBu
YW1lTG9nZ2FibGUgPQorICAgICAgICAgIGxvZ0ZpbHRlci5ldmVudE5hbWVzPT0iYWxsIiB8fAor
ICAgICAgICAgIGxvZ0ZpbHRlci5ldmVudE5hbWVzLnNvbWUoZnVuY3Rpb24oZSkge3JldHVybiB0
b1JlZ0V4cChlKS50ZXN0KG5hbWUpfSk7CisKKyAgICAgICAgaWYgKGFjdGlvbkxvZ2dhYmxlICYm
IG5hbWVMb2dnYWJsZSkgeworICAgICAgICAgIGNvbnNvbGUuaW5mbygKKyAgICAgICAgICAgIGFj
dGlvblN5bWJvbHNbYWN0aW9uXSwKKyAgICAgICAgICAgIGFjdGlvbiwKKyAgICAgICAgICAgICdb
JyArIG5hbWUgKyAnXScsCisgICAgICAgICAgICBlbGVtVG9TdHJpbmcoZWxlbSksCisgICAgICAg
ICAgICBjb21wb25lbnQuY29uc3RydWN0b3IudG9TdHJpbmcoKSwKKyAgICAgICAgICAgIGZuICYm
IChmbk5hbWUgPSBmbi5uYW1lIHx8IGZuLmRpc3BsYXlOYW1lKSAmJiAnLT4gICcgKyBmbk5hbWUK
KyAgICAgICAgICApOworICAgICAgICB9CisgICAgICB9CisgICAgfQorCisKKyAgICBmdW5jdGlv
biB3aXRoTG9nZ2luZygpIHsKKyAgICAgIHRoaXMuYmVmb3JlKCd0cmlnZ2VyJywgZnVuY3Rpb24o
KSB7CisgICAgICAgIGxvZygndHJpZ2dlcicsIHRoaXMsIHV0aWwudG9BcnJheShhcmd1bWVudHMp
KTsKKyAgICAgIH0pOworICAgICAgdGhpcy5iZWZvcmUoJ29uJywgZnVuY3Rpb24oKSB7CisgICAg
ICAgIGxvZygnb24nLCB0aGlzLCB1dGlsLnRvQXJyYXkoYXJndW1lbnRzKSk7CisgICAgICB9KTsK
KyAgICAgIHRoaXMuYmVmb3JlKCdvZmYnLCBmdW5jdGlvbihldmVudEFyZ3MpIHsKKyAgICAgICAg
bG9nKCdvZmYnLCB0aGlzLCB1dGlsLnRvQXJyYXkoYXJndW1lbnRzKSk7CisgICAgICB9KTsKKyAg
ICB9CisKKyAgICByZXR1cm4gd2l0aExvZ2dpbmc7CisgIH0KKyk7CkluZGV4OiBQZXJmb3JtYW5j
ZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvZmxp
Z2h0L2xpYi9yZWdpc3RyeS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0RvWW91
RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvZmxpZ2h0L2xpYi9yZWdp
c3RyeS5qcwkocmV2aXNpb24gMCkKKysrIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gv
ZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9mbGlnaHQvbGliL3JlZ2lzdHJ5LmpzCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjIwIEBACisvLyA9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KKy8vIENvcHlyaWdodCAyMDEzIFR3aXR0ZXIsIEluYworLy8g
TGljZW5zZWQgdW5kZXIgVGhlIE1JVCBMaWNlbnNlCisvLyBodHRwOi8vb3BlbnNvdXJjZS5vcmcv
bGljZW5zZXMvTUlUCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KKworInVzZSBzdHJpY3QiOworCitkZWZpbmUoCisKKyAgWworICAgICcuL3V0aWxzJworICBd
LAorCisgIGZ1bmN0aW9uICh1dGlsKSB7CisKKyAgICBmdW5jdGlvbiBwYXJzZUV2ZW50QXJncyhp
bnN0YW5jZSwgYXJncykgeworICAgICAgdmFyIGVsZW1lbnQsIHR5cGUsIGNhbGxiYWNrOworICAg
ICAgdmFyIGVuZCA9IGFyZ3MubGVuZ3RoOworCisgICAgICBpZiAodHlwZW9mIGFyZ3NbZW5kIC0g
MV0gPT09ICdmdW5jdGlvbicpIHsKKyAgICAgICAgZW5kIC09IDE7CisgICAgICAgIGNhbGxiYWNr
ID0gYXJnc1tlbmRdOworICAgICAgfQorCisgICAgICBpZiAodHlwZW9mIGFyZ3NbZW5kIC0gMV0g
PT09ICdvYmplY3QnKSB7CisgICAgICAgIGVuZCAtPSAxOworICAgICAgfQorCisgICAgICBpZiAo
ZW5kID09IDIpIHsKKyAgICAgICAgZWxlbWVudCA9IGFyZ3NbMF07CisgICAgICAgIHR5cGUgPSBh
cmdzWzFdOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgZWxlbWVudCA9IGluc3RhbmNlLm5vZGU7
CisgICAgICAgIHR5cGUgPSBhcmdzWzBdOworICAgICAgfQorCisgICAgICByZXR1cm4geworICAg
ICAgICBlbGVtZW50OiBlbGVtZW50LAorICAgICAgICB0eXBlOiB0eXBlLAorICAgICAgICBjYWxs
YmFjazogY2FsbGJhY2sKKyAgICAgIH07CisgICAgfQorCisgICAgZnVuY3Rpb24gbWF0Y2hFdmVu
dChhLCBiKSB7CisgICAgICByZXR1cm4gKAorICAgICAgICAoYS5lbGVtZW50ID09IGIuZWxlbWVu
dCkgJiYKKyAgICAgICAgKGEudHlwZSA9PSBiLnR5cGUpICYmCisgICAgICAgIChiLmNhbGxiYWNr
ID09IG51bGwgfHwgKGEuY2FsbGJhY2sgPT0gYi5jYWxsYmFjaykpCisgICAgICApOworICAgIH0K
KworICAgIGZ1bmN0aW9uIFJlZ2lzdHJ5KCkgeworCisgICAgICB2YXIgcmVnaXN0cnkgPSB0aGlz
OworCisgICAgICAodGhpcy5yZXNldCA9IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLmNvbXBv
bmVudHMgPSBbXTsKKyAgICAgICAgdGhpcy5hbGxJbnN0YW5jZXMgPSB7fTsKKyAgICAgICAgdGhp
cy5ldmVudHMgPSBbXTsKKyAgICAgIH0pLmNhbGwodGhpcyk7CisKKyAgICAgIGZ1bmN0aW9uIENv
bXBvbmVudEluZm8oY29tcG9uZW50KSB7CisgICAgICAgIHRoaXMuY29tcG9uZW50ID0gY29tcG9u
ZW50OworICAgICAgICB0aGlzLmF0dGFjaGVkVG8gPSBbXTsKKyAgICAgICAgdGhpcy5pbnN0YW5j
ZXMgPSB7fTsKKworICAgICAgICB0aGlzLmFkZEluc3RhbmNlID0gZnVuY3Rpb24oaW5zdGFuY2Up
IHsKKyAgICAgICAgICB2YXIgaW5zdGFuY2VJbmZvID0gbmV3IEluc3RhbmNlSW5mbyhpbnN0YW5j
ZSk7CisgICAgICAgICAgdGhpcy5pbnN0YW5jZXNbaW5zdGFuY2UuaWRlbnRpdHldID0gaW5zdGFu
Y2VJbmZvOworICAgICAgICAgIHRoaXMuYXR0YWNoZWRUby5wdXNoKGluc3RhbmNlLm5vZGUpOwor
CisgICAgICAgICAgcmV0dXJuIGluc3RhbmNlSW5mbzsKKyAgICAgICAgfQorCisgICAgICAgIHRo
aXMucmVtb3ZlSW5zdGFuY2UgPSBmdW5jdGlvbihpbnN0YW5jZSkgeworICAgICAgICAgIGRlbGV0
ZSB0aGlzLmluc3RhbmNlc1tpbnN0YW5jZS5pZGVudGl0eV07CisgICAgICAgICAgdmFyIGluZGV4
T2ZOb2RlID0gdGhpcy5hdHRhY2hlZFRvLmluZGV4T2YoaW5zdGFuY2Uubm9kZSk7CisgICAgICAg
ICAgKGluZGV4T2ZOb2RlID4gLTEpICYmIHRoaXMuYXR0YWNoZWRUby5zcGxpY2UoaW5kZXhPZk5v
ZGUsIDEpOworCisgICAgICAgICAgaWYgKCF0aGlzLmluc3RhbmNlcy5sZW5ndGgpIHsKKyAgICAg
ICAgICAgIC8vaWYgSSBob2xkIG5vIG1vcmUgaW5zdGFuY2VzIHJlbW92ZSBtZSBmcm9tIHJlZ2lz
dHJ5CisgICAgICAgICAgICByZWdpc3RyeS5yZW1vdmVDb21wb25lbnRJbmZvKHRoaXMpOworICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHRoaXMuaXNBdHRhY2hlZFRvID0gZnVuY3Rp
b24obm9kZSkgeworICAgICAgICAgIHJldHVybiB0aGlzLmF0dGFjaGVkVG8uaW5kZXhPZihub2Rl
KSA+IC0xOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGZ1bmN0aW9uIEluc3RhbmNlSW5m
byhpbnN0YW5jZSkgeworICAgICAgICB0aGlzLmluc3RhbmNlID0gaW5zdGFuY2U7CisgICAgICAg
IHRoaXMuZXZlbnRzID0gW107CisKKyAgICAgICAgdGhpcy5hZGRCaW5kID0gZnVuY3Rpb24oZXZl
bnQpIHsKKyAgICAgICAgICB0aGlzLmV2ZW50cy5wdXNoKGV2ZW50KTsKKyAgICAgICAgICByZWdp
c3RyeS5ldmVudHMucHVzaChldmVudCk7CisgICAgICAgIH07CisKKyAgICAgICAgdGhpcy5yZW1v
dmVCaW5kID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgICBmb3IgKHZhciBpID0gMCwgZTsg
ZSA9IHRoaXMuZXZlbnRzW2ldOyBpKyspIHsKKyAgICAgICAgICAgIGlmIChtYXRjaEV2ZW50KGUs
IGV2ZW50KSkgeworICAgICAgICAgICAgICB0aGlzLmV2ZW50cy5zcGxpY2UoaSwgMSk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisKKyAgICAgIHRoaXMu
YWRkSW5zdGFuY2UgPSBmdW5jdGlvbihpbnN0YW5jZSkgeworICAgICAgICB2YXIgY29tcG9uZW50
ID0gdGhpcy5maW5kQ29tcG9uZW50SW5mbyhpbnN0YW5jZSk7CisKKyAgICAgICAgaWYgKCFjb21w
b25lbnQpIHsKKyAgICAgICAgICBjb21wb25lbnQgPSBuZXcgQ29tcG9uZW50SW5mbyhpbnN0YW5j
ZS5jb25zdHJ1Y3Rvcik7CisgICAgICAgICAgdGhpcy5jb21wb25lbnRzLnB1c2goY29tcG9uZW50
KTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBpbnN0ID0gY29tcG9uZW50LmFkZEluc3RhbmNl
KGluc3RhbmNlKTsKKworICAgICAgICB0aGlzLmFsbEluc3RhbmNlc1tpbnN0YW5jZS5pZGVudGl0
eV0gPSBpbnN0OworCisgICAgICAgIHJldHVybiBjb21wb25lbnQ7CisgICAgICB9OworCisgICAg
ICB0aGlzLnJlbW92ZUluc3RhbmNlID0gZnVuY3Rpb24oaW5zdGFuY2UpIHsKKyAgICAgICAgdmFy
IGluZGV4LCBpbnN0SW5mbyA9IHRoaXMuZmluZEluc3RhbmNlSW5mbyhpbnN0YW5jZSk7CisKKyAg
ICAgICAgLy9yZW1vdmUgZnJvbSBjb21wb25lbnQgaW5mbworICAgICAgICB2YXIgY29tcG9uZW50
SW5mbyA9IHRoaXMuZmluZENvbXBvbmVudEluZm8oaW5zdGFuY2UpOworICAgICAgICBjb21wb25l
bnRJbmZvICYmIGNvbXBvbmVudEluZm8ucmVtb3ZlSW5zdGFuY2UoaW5zdGFuY2UpOworCisgICAg
ICAgIC8vcmVtb3ZlIGZyb20gcmVnaXN0cnkKKyAgICAgICAgZGVsZXRlIHRoaXMuYWxsSW5zdGFu
Y2VzW2luc3RhbmNlLmlkZW50aXR5XTsKKyAgICAgIH07CisKKyAgICAgIHRoaXMucmVtb3ZlQ29t
cG9uZW50SW5mbyA9IGZ1bmN0aW9uKGNvbXBvbmVudEluZm8pIHsKKyAgICAgICAgdmFyIGluZGV4
ID0gdGhpcy5jb21wb25lbnRzLmluZGV4T2YoY29tcG9uZW50SW5mbyk7CisgICAgICAgIChpbmRl
eCA+IC0xKSAgJiYgdGhpcy5jb21wb25lbnRzLnNwbGljZShpbmRleCwgMSk7CisgICAgICB9Owor
CisgICAgICB0aGlzLmZpbmRDb21wb25lbnRJbmZvID0gZnVuY3Rpb24od2hpY2gpIHsKKyAgICAg
ICAgdmFyIGNvbXBvbmVudCA9IHdoaWNoLmF0dGFjaFRvID8gd2hpY2ggOiB3aGljaC5jb25zdHJ1
Y3RvcjsKKworICAgICAgICBmb3IgKHZhciBpID0gMCwgYzsgYyA9IHRoaXMuY29tcG9uZW50c1tp
XTsgaSsrKSB7CisgICAgICAgICAgaWYgKGMuY29tcG9uZW50ID09PSBjb21wb25lbnQpIHsKKyAg
ICAgICAgICAgIHJldHVybiBjOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJl
dHVybiBudWxsOworICAgICAgfTsKKworICAgICAgdGhpcy5maW5kSW5zdGFuY2VJbmZvID0gZnVu
Y3Rpb24oaW5zdGFuY2UpIHsKKyAgICAgICAgICByZXR1cm4gdGhpcy5hbGxJbnN0YW5jZXNbaW5z
dGFuY2UuaWRlbnRpdHldIHx8IG51bGw7CisgICAgICB9OworCisgICAgICB0aGlzLmZpbmRJbnN0
YW5jZUluZm9CeU5vZGUgPSBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgdmFyIHJlc3VsdCA9
IFtdOworICAgICAgICAgIE9iamVjdC5rZXlzKHRoaXMuYWxsSW5zdGFuY2VzKS5mb3JFYWNoKGZ1
bmN0aW9uKGspIHsKKyAgICAgICAgICAgIHZhciB0aGlzSW5zdGFuY2VJbmZvID0gdGhpcy5hbGxJ
bnN0YW5jZXNba107CisgICAgICAgICAgICBpZih0aGlzSW5zdGFuY2VJbmZvLmluc3RhbmNlLm5v
ZGUgPT09IG5vZGUpIHsKKyAgICAgICAgICAgICAgcmVzdWx0LnB1c2godGhpc0luc3RhbmNlSW5m
byk7CisgICAgICAgICAgICB9CisgICAgICAgICAgfSwgdGhpcyk7CisgICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICAgIH07CisKKyAgICAgIHRoaXMub24gPSBmdW5jdGlvbihjb21wb25lbnRP
bikgeworICAgICAgICB2YXIgaW5zdGFuY2UgPSByZWdpc3RyeS5maW5kSW5zdGFuY2VJbmZvKHRo
aXMpLCBib3VuZENhbGxiYWNrOworCisgICAgICAgIC8vIHVucGFja2luZyBhcmd1bWVudHMgYnkg
aGFuZCBiZW5jaG1hcmtlZCBmYXN0ZXIKKyAgICAgICAgdmFyIGwgPSBhcmd1bWVudHMubGVuZ3Ro
LCBpID0gMTsKKyAgICAgICAgdmFyIG90aGVyQXJncyA9IG5ldyBBcnJheShsIC0gMSk7CisgICAg
ICAgIGZvciAoOyBpIDwgbDsgaSsrKSBvdGhlckFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldOwor
CisgICAgICAgIGlmIChpbnN0YW5jZSkgeworICAgICAgICAgIGJvdW5kQ2FsbGJhY2sgPSBjb21w
b25lbnRPbi5hcHBseShudWxsLCBvdGhlckFyZ3MpOworICAgICAgICAgIGlmIChib3VuZENhbGxi
YWNrKSB7CisgICAgICAgICAgICBvdGhlckFyZ3Nbb3RoZXJBcmdzLmxlbmd0aC0xXSA9IGJvdW5k
Q2FsbGJhY2s7CisgICAgICAgICAgfQorICAgICAgICAgIHZhciBldmVudCA9IHBhcnNlRXZlbnRB
cmdzKHRoaXMsIG90aGVyQXJncyk7CisgICAgICAgICAgaW5zdGFuY2UuYWRkQmluZChldmVudCk7
CisgICAgICAgIH0KKyAgICAgIH07CisKKyAgICAgIHRoaXMub2ZmID0gZnVuY3Rpb24oZWwsIHR5
cGUsIGNhbGxiYWNrKSB7CisgICAgICAgIHZhciBldmVudCA9IHBhcnNlRXZlbnRBcmdzKHRoaXMs
IGFyZ3VtZW50cyksCisgICAgICAgICAgICBpbnN0YW5jZSA9IHJlZ2lzdHJ5LmZpbmRJbnN0YW5j
ZUluZm8odGhpcyk7CisKKyAgICAgICAgaWYgKGluc3RhbmNlKSB7CisgICAgICAgICAgaW5zdGFu
Y2UucmVtb3ZlQmluZChldmVudCk7CisgICAgICAgIH0KKyAgICAgIH07CisKKyAgICAgIC8vZGVi
dWcgdG9vbHMgbWF5IHdhbnQgdG8gYWRkIGFkdmljZSB0byB0cmlnZ2VyCisgICAgICBpZiAod2lu
ZG93LkRFQlVHICYmIERFQlVHLmVuYWJsZWQpIHsKKyAgICAgICAgcmVnaXN0cnkudHJpZ2dlciA9
IG5ldyBGdW5jdGlvbjsKKyAgICAgIH0KKworICAgICAgdGhpcy50ZWFyZG93biA9IGZ1bmN0aW9u
KCkgeworICAgICAgICByZWdpc3RyeS5yZW1vdmVJbnN0YW5jZSh0aGlzKTsKKyAgICAgIH07CisK
KyAgICAgIHRoaXMud2l0aFJlZ2lzdHJhdGlvbiA9IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlz
LmJlZm9yZSgnaW5pdGlhbGl6ZScsIGZ1bmN0aW9uKCkgeworICAgICAgICAgIHJlZ2lzdHJ5LmFk
ZEluc3RhbmNlKHRoaXMpOworICAgICAgICB9KTsKKworICAgICAgICB0aGlzLmFyb3VuZCgnb24n
LCByZWdpc3RyeS5vbik7CisgICAgICAgIHRoaXMuYWZ0ZXIoJ29mZicsIHJlZ2lzdHJ5Lm9mZik7
CisgICAgICAgIC8vZGVidWcgdG9vbHMgbWF5IHdhbnQgdG8gYWRkIGFkdmljZSB0byB0cmlnZ2Vy
CisgICAgICAgIHdpbmRvdy5ERUJVRyAmJiBERUJVRy5lbmFibGVkICYmIHRoaXMuYWZ0ZXIoJ3Ry
aWdnZXInLCByZWdpc3RyeS50cmlnZ2VyKTsKKyAgICAgICAgdGhpcy5hZnRlcigndGVhcmRvd24n
LCB7b2JqOnJlZ2lzdHJ5LCBmbk5hbWU6J3RlYXJkb3duJ30pOworICAgICAgfTsKKworICAgIH0K
KworICAgIHJldHVybiBuZXcgUmVnaXN0cnk7CisgIH0KKyk7CkluZGV4OiBQZXJmb3JtYW5jZVRl
c3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvZmxpZ2h0
L2xpYi91dGlscy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJl
bmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvZmxpZ2h0L2xpYi91dGlscy5qcwko
cmV2aXNpb24gMCkKKysrIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMt
ZXhhbXBsZS1hcHAvY29tcG9uZW50cy9mbGlnaHQvbGliL3V0aWxzLmpzCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMjM2IEBACisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KKy8vIENvcHlyaWdodCAyMDEzIFR3aXR0ZXIsIEluYworLy8gTGljZW5zZWQgdW5k
ZXIgVGhlIE1JVCBMaWNlbnNlCisvLyBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlU
CisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworInVzZSBz
dHJpY3QiOworCitkZWZpbmUoCisKKyAgW10sCisKKyAgZnVuY3Rpb24gKCkgeworCisgICAgdmFy
IGFycnkgPSBbXTsKKyAgICB2YXIgREVGQVVMVF9JTlRFUlZBTCA9IDEwMDsKKworICAgIHZhciB1
dGlscyA9IHsKKworICAgICAgaXNEb21PYmo6IGZ1bmN0aW9uKG9iaikgeworICAgICAgICByZXR1
cm4gISEob2JqLm5vZGVUeXBlIHx8IChvYmogPT09IHdpbmRvdykpOworICAgICAgfSwKKworICAg
ICAgdG9BcnJheTogZnVuY3Rpb24ob2JqLCBmcm9tKSB7CisgICAgICAgIHJldHVybiBhcnJ5LnNs
aWNlLmNhbGwob2JqLCBmcm9tKTsKKyAgICAgIH0sCisKKyAgICAgIC8vIHJldHVybnMgbmV3IG9i
amVjdCByZXByZXNlbnRpbmcgbXVsdGlwbGUgb2JqZWN0cyBtZXJnZWQgdG9nZXRoZXIKKyAgICAg
IC8vIG9wdGlvbmFsIGZpbmFsIGFyZ3VtZW50IGlzIGJvb2xlYW4gd2hpY2ggc3BlY2lmaWVzIGlm
IG1lcmdlIGlzIHJlY3Vyc2l2ZQorICAgICAgLy8gb3JpZ2luYWwgb2JqZWN0cyBhcmUgdW5tb2Rp
ZmllZAorICAgICAgLy8KKyAgICAgIC8vIHVzYWdlOgorICAgICAgLy8gICB2YXIgYmFzZSA9IHth
OjIsIGI6Nn07CisgICAgICAvLyAgIHZhciBleHRyYSA9IHtiOjMsIGM6NH07CisgICAgICAvLyAg
IG1lcmdlKGJhc2UsIGV4dHJhKTsgLy97YToyLCBiOjMsIGM6NH0KKyAgICAgIC8vICAgYmFzZTsg
Ly97YToyLCBiOjZ9CisgICAgICAvLworICAgICAgLy8gICB2YXIgYmFzZSA9IHthOjIsIGI6Nn07
CisgICAgICAvLyAgIHZhciBleHRyYSA9IHtiOjMsIGM6NH07CisgICAgICAvLyAgIHZhciBleHRy
YUV4dHJhID0ge2E6NCwgZDo5fTsKKyAgICAgIC8vICAgbWVyZ2UoYmFzZSwgZXh0cmEsIGV4dHJh
RXh0cmEpOyAvL3thOjQsIGI6MywgYzo0LiBkOiA5fQorICAgICAgLy8gICBiYXNlOyAvL3thOjIs
IGI6Nn0KKyAgICAgIC8vCisgICAgICAvLyAgIHZhciBiYXNlID0ge2E6MiwgYjp7YmI6NCwgY2M6
NX19OworICAgICAgLy8gICB2YXIgZXh0cmEgPSB7YTo0LCBiOntjYzo3LCBkZDoxfX07CisgICAg
ICAvLyAgIG1lcmdlKGJhc2UsIGV4dHJhLCB0cnVlKTsgLy97YTo0LCBiOntiYjo0LCBjYzo3LCBk
ZDoxfX0KKyAgICAgIC8vICAgYmFzZTsgLy97YToyLCBiOjZ9CisKKyAgICAgIG1lcmdlOiBmdW5j
dGlvbigvKm9iajEsIG9iajIsLi4uLmRlZXBDb3B5Ki8pIHsKKyAgICAgICAgLy8gdW5wYWNraW5n
IGFyZ3VtZW50cyBieSBoYW5kIGJlbmNobWFya2VkIGZhc3RlcgorICAgICAgICB2YXIgbCA9IGFy
Z3VtZW50cy5sZW5ndGgsCisgICAgICAgICAgICBpID0gMCwKKyAgICAgICAgICAgIGFyZ3MgPSBu
ZXcgQXJyYXkobCArIDEpOworICAgICAgICBmb3IgKDsgaSA8IGw7IGkrKykgYXJnc1tpICsgMV0g
PSBhcmd1bWVudHNbaV07CisKKyAgICAgICAgaWYgKGwgPT09IDApIHsKKyAgICAgICAgICByZXR1
cm4ge307CisgICAgICAgIH0KKworICAgICAgICAvL3N0YXJ0IHdpdGggZW1wdHkgb2JqZWN0IHNv
IGEgY29weSBpcyBjcmVhdGVkCisgICAgICAgIGFyZ3NbMF0gPSB7fTsKKworICAgICAgICBpZiAo
YXJnc1thcmdzLmxlbmd0aCAtIDFdID09PSB0cnVlKSB7CisgICAgICAgICAgLy9qcXVlcnkgZXh0
ZW5kIHJlcXVpcmVzIGRlZXAgY29weSBhcyBmaXJzdCBhcmcKKyAgICAgICAgICBhcmdzLnBvcCgp
OworICAgICAgICAgIGFyZ3MudW5zaGlmdCh0cnVlKTsKKyAgICAgICAgfQorCisgICAgICAgIHJl
dHVybiAkLmV4dGVuZC5hcHBseSh1bmRlZmluZWQsIGFyZ3MpOworICAgICAgfSwKKworICAgICAg
Ly8gdXBkYXRlcyBiYXNlIGluIHBsYWNlIGJ5IGNvcHlpbmcgcHJvcGVydGllcyBvZiBleHRyYSB0
byBpdAorICAgICAgLy8gb3B0aW9uYWxseSBjbG9iYmVyIHByb3RlY3RlZAorICAgICAgLy8gdXNh
Z2U6CisgICAgICAvLyAgIHZhciBiYXNlID0ge2E6MiwgYjo2fTsKKyAgICAgIC8vICAgdmFyIGV4
dHJhID0ge2M6NH07CisgICAgICAvLyAgIHB1c2goYmFzZSwgZXh0cmEpOyAvL3thOjIsIGI6Niwg
Yzo0fQorICAgICAgLy8gICBiYXNlOyAvL3thOjIsIGI6NiwgYzo0fQorICAgICAgLy8KKyAgICAg
IC8vICAgdmFyIGJhc2UgPSB7YToyLCBiOjZ9OworICAgICAgLy8gICB2YXIgZXh0cmEgPSB7Yjog
NCBjOjR9OworICAgICAgLy8gICBwdXNoKGJhc2UsIGV4dHJhLCB0cnVlKTsgLy9FcnJvciAoInV0
aWxzLnB1c2ggYXR0ZW1wdGVkIHRvIG92ZXJ3cml0ZSAnYicgd2hpbGUgcnVubmluZyBpbiBwcm90
ZWN0ZWQgbW9kZSIpCisgICAgICAvLyAgIGJhc2U7IC8ve2E6MiwgYjo2fQorICAgICAgLy8KKyAg
ICAgIC8vIG9iamVjdHMgd2l0aCB0aGUgc2FtZSBrZXkgd2lsbCBtZXJnZSByZWN1cnNpdmVseSB3
aGVuIHByb3RlY3QgaXMgZmFsc2UKKyAgICAgIC8vIGVnOgorICAgICAgLy8gdmFyIGJhc2UgPSB7
YToxNiwgYjp7YmI6NCwgY2M6MTB9fTsKKyAgICAgIC8vIHZhciBleHRyYSA9IHtiOntjYzoyNSwg
ZGQ6MTl9LCBjOjV9OworICAgICAgLy8gcHVzaChiYXNlLCBleHRyYSk7IC8ve2E6MTYsIHtiYjo0
LCBjYzoyNSwgZGQ6MTl9LCBjOjV9CisgICAgICAvLworICAgICAgcHVzaDogZnVuY3Rpb24oYmFz
ZSwgZXh0cmEsIHByb3RlY3QpIHsKKyAgICAgICAgaWYgKGJhc2UpIHsKKyAgICAgICAgICBPYmpl
Y3Qua2V5cyhleHRyYSB8fCB7fSkuZm9yRWFjaChmdW5jdGlvbihrZXkpIHsKKyAgICAgICAgICAg
IGlmIChiYXNlW2tleV0gJiYgcHJvdGVjdCkgeworICAgICAgICAgICAgICB0aHJvdyBFcnJvcigi
dXRpbHMucHVzaCBhdHRlbXB0ZWQgdG8gb3ZlcndyaXRlICciICsga2V5ICsgIicgd2hpbGUgcnVu
bmluZyBpbiBwcm90ZWN0ZWQgbW9kZSIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
ZiAodHlwZW9mIGJhc2Vba2V5XSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXh0cmFba2V5XSA9PSAi
b2JqZWN0IikgeworICAgICAgICAgICAgICAvL3JlY3Vyc2UKKyAgICAgICAgICAgICAgdGhpcy5w
dXNoKGJhc2Vba2V5XSwgZXh0cmFba2V5XSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAvL25vIHByb3RlY3QsIHNvIGV4dHJhIHdpbnMKKyAgICAgICAgICAgICAgYmFzZVtr
ZXldID0gZXh0cmFba2V5XTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9LCB0aGlzKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHJldHVybiBiYXNlOworICAgICAgfSwKKworICAgICAgaXNFbnVt
ZXJhYmxlOiBmdW5jdGlvbihvYmosIHByb3BlcnR5KSB7CisgICAgICAgIHJldHVybiBPYmplY3Qu
a2V5cyhvYmopLmluZGV4T2YocHJvcGVydHkpID4gLTE7CisgICAgICB9LAorCisgICAgICAvL2J1
aWxkIGEgZnVuY3Rpb24gZnJvbSBvdGhlciBmdW5jdGlvbihzKQorICAgICAgLy91dGlsLmNvbXBv
c2UoYSxiLGMpIC0+IGEoYihjKCkpKTsKKyAgICAgIC8vaW1wbGVtZW50YXRpb24gbGlmdGVkIGZy
b20gdW5kZXJzY29yZS5qcyAoYykgMjAwOS0yMDEyIEplcmVteSBBc2hrZW5hcworICAgICAgY29t
cG9zZTogZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBmdW5jcyA9IGFyZ3VtZW50czsKKworICAg
ICAgICByZXR1cm4gZnVuY3Rpb24oKSB7CisgICAgICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7
CisKKyAgICAgICAgICBmb3IgKHZhciBpID0gZnVuY3MubGVuZ3RoLTE7IGkgPj0gMDsgaS0tKSB7
CisgICAgICAgICAgICBhcmdzID0gW2Z1bmNzW2ldLmFwcGx5KHRoaXMsIGFyZ3MpXTsKKyAgICAg
ICAgICB9CisKKyAgICAgICAgICByZXR1cm4gYXJnc1swXTsKKyAgICAgICAgfTsKKyAgICAgIH0s
CisKKyAgICAgIC8vIENhbiBvbmx5IHVuaXF1ZSBhcnJheXMgb2YgaG9tb2dlbmVvdXMgcHJpbWl0
aXZlcywgZS5nLiBhbiBhcnJheSBvZiBvbmx5IHN0cmluZ3MsIGFuIGFycmF5IG9mIG9ubHkgYm9v
bGVhbnMsIG9yIGFuIGFycmF5IG9mIG9ubHkgbnVtZXJpY3MKKyAgICAgIHVuaXF1ZUFycmF5OiBm
dW5jdGlvbihhcnJheSkgeworICAgICAgICB2YXIgdSA9IHt9LCBhID0gW107CisKKyAgICAgICAg
Zm9yICh2YXIgaSA9IDAsIGwgPSBhcnJheS5sZW5ndGg7IGkgPCBsOyArK2kpIHsKKyAgICAgICAg
ICBpZiAodS5oYXNPd25Qcm9wZXJ0eShhcnJheVtpXSkpIHsKKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgIH0KKworICAgICAgICAgIGEucHVzaChhcnJheVtpXSk7CisgICAgICAgICAg
dVthcnJheVtpXV0gPSAxOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGE7CisgICAgICB9
LAorCisgICAgICBkZWJvdW5jZTogZnVuY3Rpb24oZnVuYywgd2FpdCwgaW1tZWRpYXRlKSB7Cisg
ICAgICAgIGlmICh0eXBlb2Ygd2FpdCAhPSAnbnVtYmVyJykgeworICAgICAgICAgIHdhaXQgPSBE
RUZBVUxUX0lOVEVSVkFMOworICAgICAgICB9CisKKyAgICAgICAgdmFyIHRpbWVvdXQsIHJlc3Vs
dDsKKworICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7CisgICAgICAgICAgdmFyIGNvbnRleHQg
PSB0aGlzLCBhcmdzID0gYXJndW1lbnRzOworICAgICAgICAgIHZhciBsYXRlciA9IGZ1bmN0aW9u
KCkgeworICAgICAgICAgICAgdGltZW91dCA9IG51bGw7CisgICAgICAgICAgICBpZiAoIWltbWVk
aWF0ZSkgeworICAgICAgICAgICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3Mp
OworICAgICAgICAgICAgfQorICAgICAgICAgIH07CisgICAgICAgICAgdmFyIGNhbGxOb3cgPSBp
bW1lZGlhdGUgJiYgIXRpbWVvdXQ7CisKKyAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7
CisgICAgICAgICAgdGltZW91dCA9IHNldFRpbWVvdXQobGF0ZXIsIHdhaXQpOworCisgICAgICAg
ICAgaWYgKGNhbGxOb3cpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4
dCwgYXJncyk7CisgICAgICAgICAgfQorCisgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAg
ICAgfTsKKyAgICAgIH0sCisKKyAgICAgIHRocm90dGxlOiBmdW5jdGlvbihmdW5jLCB3YWl0KSB7
CisgICAgICAgIGlmICh0eXBlb2Ygd2FpdCAhPSAnbnVtYmVyJykgeworICAgICAgICAgIHdhaXQg
PSBERUZBVUxUX0lOVEVSVkFMOworICAgICAgICB9CisKKyAgICAgICAgdmFyIGNvbnRleHQsIGFy
Z3MsIHRpbWVvdXQsIHRocm90dGxpbmcsIG1vcmUsIHJlc3VsdDsKKyAgICAgICAgdmFyIHdoZW5E
b25lID0gdGhpcy5kZWJvdW5jZShmdW5jdGlvbigpeworICAgICAgICAgIG1vcmUgPSB0aHJvdHRs
aW5nID0gZmFsc2U7CisgICAgICAgIH0sIHdhaXQpOworCisgICAgICAgIHJldHVybiBmdW5jdGlv
bigpIHsKKyAgICAgICAgICBjb250ZXh0ID0gdGhpczsgYXJncyA9IGFyZ3VtZW50czsKKyAgICAg
ICAgICB2YXIgbGF0ZXIgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHRpbWVvdXQgPSBudWxs
OworICAgICAgICAgICAgaWYgKG1vcmUpIHsKKyAgICAgICAgICAgICAgcmVzdWx0ID0gZnVuYy5h
cHBseShjb250ZXh0LCBhcmdzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHdoZW5Eb25l
KCk7CisgICAgICAgICAgfTsKKworICAgICAgICAgIGlmICghdGltZW91dCkgeworICAgICAgICAg
ICAgdGltZW91dCA9IHNldFRpbWVvdXQobGF0ZXIsIHdhaXQpOworICAgICAgICAgIH0KKworICAg
ICAgICAgIGlmICh0aHJvdHRsaW5nKSB7CisgICAgICAgICAgICBtb3JlID0gdHJ1ZTsKKyAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhyb3R0bGluZyA9IHRydWU7CisgICAgICAgICAg
ICByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpOworICAgICAgICAgIH0KKworICAg
ICAgICAgIHdoZW5Eb25lKCk7CisgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfTsK
KyAgICAgIH0sCisKKyAgICAgIGNvdW50VGhlbjogZnVuY3Rpb24obnVtLCBiYXNlKSB7CisgICAg
ICAgIHJldHVybiBmdW5jdGlvbigpIHsKKyAgICAgICAgICBpZiAoIS0tbnVtKSB7IHJldHVybiBi
YXNlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH0KKyAgICAgICAgfTsKKyAgICAgIH0sCisKKyAg
ICAgIGRlbGVnYXRlOiBmdW5jdGlvbihydWxlcykgeworICAgICAgICByZXR1cm4gZnVuY3Rpb24o
ZSwgZGF0YSkgeworICAgICAgICAgIHZhciB0YXJnZXQgPSAkKGUudGFyZ2V0KSwgcGFyZW50Owor
CisgICAgICAgICAgT2JqZWN0LmtleXMocnVsZXMpLmZvckVhY2goZnVuY3Rpb24oc2VsZWN0b3Ip
IHsKKyAgICAgICAgICAgIGlmICgocGFyZW50ID0gdGFyZ2V0LmNsb3Nlc3Qoc2VsZWN0b3IpKS5s
ZW5ndGgpIHsKKyAgICAgICAgICAgICAgZGF0YSA9IGRhdGEgfHwge307CisgICAgICAgICAgICAg
IGRhdGEuZWwgPSBwYXJlbnRbMF07CisgICAgICAgICAgICAgIHJldHVybiBydWxlc1tzZWxlY3Rv
cl0uYXBwbHkodGhpcywgW2UsIGRhdGFdKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9LCB0
aGlzKTsKKyAgICAgICAgfTsKKyAgICAgIH0KKworICAgIH07CisKKyAgICByZXR1cm4gdXRpbHM7
CisgIH0KKyk7CkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpz
LWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvZmxpZ2h0L3Rvb2xzL2RlYnVnL2RlYnVnLmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBs
ZS1hcHAvY29tcG9uZW50cy9mbGlnaHQvdG9vbHMvZGVidWcvZGVidWcuanMJKHJldmlzaW9uIDAp
CisrKyBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBw
L2NvbXBvbmVudHMvZmxpZ2h0L3Rvb2xzL2RlYnVnL2RlYnVnLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTU3IEBACisidXNlIHN0cmljdCI7CisKK2RlZmluZSgKKworICBbCisgICAgJy4u
Ly4uL2xpYi9yZWdpc3RyeScsCisgICAgJy4uLy4uL2xpYi91dGlscycKKyAgXSwKKworICBmdW5j
dGlvbihyZWdpc3RyeSwgdXRpbHMpIHsKKworICAgIHZhciBsb2dGaWx0ZXI7CisKKyAgICAvLyoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgIC8vIFNlYXJjaCBvYmplY3QgbW9k
ZWwKKyAgICAvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisgICAgZnVuY3Rp
b24gdHJhdmVyc2UodXRpbCwgc2VhcmNoVGVybSwgb3B0aW9ucykgeworICAgICAgdmFyIG9wdGlv
bnMgPSBvcHRpb25zIHx8IHt9OworICAgICAgdmFyIG9iaiA9IG9wdGlvbnMub2JqIHx8IHdpbmRv
dzsKKyAgICAgIHZhciBwYXRoID0gb3B0aW9ucy5wYXRoIHx8ICgob2JqPT13aW5kb3cpID8gIndp
bmRvdyIgOiAiIik7CisgICAgICB2YXIgcHJvcHMgPSBPYmplY3Qua2V5cyhvYmopOworICAgICAg
cHJvcHMuZm9yRWFjaChmdW5jdGlvbihwcm9wKSB7CisgICAgICAgIGlmICgodGVzdHNbdXRpbF0g
fHwgdXRpbCkoc2VhcmNoVGVybSwgb2JqLCBwcm9wKSl7CisgICAgICAgICAgY29uc29sZS5sb2co
W3BhdGgsICIuIiwgcHJvcF0uam9pbigiIiksICItPiIsWyIoIiwgdHlwZW9mIG9ialtwcm9wXSwg
IikiXS5qb2luKCIiKSwgb2JqW3Byb3BdKTsKKyAgICAgICAgfQorICAgICAgICBpZihPYmplY3Qu
cHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqW3Byb3BdKT09IltvYmplY3QgT2JqZWN0XSIgJiYg
KG9ialtwcm9wXSAhPSBvYmopICYmIHBhdGguc3BsaXQoIi4iKS5pbmRleE9mKHByb3ApID09IC0x
KSB7CisgICAgICAgICAgdHJhdmVyc2UodXRpbCwgc2VhcmNoVGVybSwge29iajogb2JqW3Byb3Bd
LCBwYXRoOiBbcGF0aCxwcm9wXS5qb2luKCIuIil9KTsKKyAgICAgICAgfQorICAgICAgfSk7Cisg
ICAgfQorCisgICAgZnVuY3Rpb24gc2VhcmNoKHV0aWwsIGV4cGVjdGVkLCBzZWFyY2hUZXJtLCBv
cHRpb25zKSB7CisgICAgICBpZiAoIWV4cGVjdGVkIHx8IHR5cGVvZiBzZWFyY2hUZXJtID09IGV4
cGVjdGVkKSB7CisgICAgICAgIHRyYXZlcnNlKHV0aWwsIHNlYXJjaFRlcm0sIG9wdGlvbnMpOwor
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgY29uc29sZS5lcnJvcihbc2VhcmNoVGVybSwgJ211c3Qg
YmUnLCBleHBlY3RlZF0uam9pbignICcpKQorICAgICAgfQorICAgIH0KKworICAgIHZhciB0ZXN0
cyA9IHsKKyAgICAgICduYW1lJzogZnVuY3Rpb24oc2VhcmNoVGVybSwgb2JqLCBwcm9wKSB7cmV0
dXJuIHNlYXJjaFRlcm0gPT0gcHJvcH0sCisgICAgICAnbmFtZUNvbnRhaW5zJzogZnVuY3Rpb24o
c2VhcmNoVGVybSwgb2JqLCBwcm9wKSB7cmV0dXJuIHByb3AuaW5kZXhPZihzZWFyY2hUZXJtKT4t
MX0sCisgICAgICAndHlwZSc6IGZ1bmN0aW9uKHNlYXJjaFRlcm0sIG9iaiwgcHJvcCkge3JldHVy
biBvYmpbcHJvcF0gaW5zdGFuY2VvZiBzZWFyY2hUZXJtfSwKKyAgICAgICd2YWx1ZSc6IGZ1bmN0
aW9uKHNlYXJjaFRlcm0sIG9iaiwgcHJvcCkge3JldHVybiBvYmpbcHJvcF0gPT09IHNlYXJjaFRl
cm19LAorICAgICAgJ3ZhbHVlQ29lcmNlZCc6IGZ1bmN0aW9uKHNlYXJjaFRlcm0sIG9iaiwgcHJv
cCkge3JldHVybiBvYmpbcHJvcF0gPT0gc2VhcmNoVGVybX0KKyAgICB9CisKKyAgICBmdW5jdGlv
biBieU5hbWUoc2VhcmNoVGVybSwgb3B0aW9ucykge3NlYXJjaCgnbmFtZScsICdzdHJpbmcnLCBz
ZWFyY2hUZXJtLCBvcHRpb25zKTt9OworICAgIGZ1bmN0aW9uIGJ5TmFtZUNvbnRhaW5zKHNlYXJj
aFRlcm0sIG9wdGlvbnMpIHtzZWFyY2goJ25hbWVDb250YWlucycsICdzdHJpbmcnLCBzZWFyY2hU
ZXJtLCBvcHRpb25zKTt9OworICAgIGZ1bmN0aW9uIGJ5VHlwZShzZWFyY2hUZXJtLCBvcHRpb25z
KSB7c2VhcmNoKCd0eXBlJywgJ2Z1bmN0aW9uJywgc2VhcmNoVGVybSwgb3B0aW9ucyk7fTsKKyAg
ICBmdW5jdGlvbiBieVZhbHVlKHNlYXJjaFRlcm0sIG9wdGlvbnMpIHtzZWFyY2goJ3ZhbHVlJywg
bnVsbCwgc2VhcmNoVGVybSwgb3B0aW9ucyk7fTsKKyAgICBmdW5jdGlvbiBieVZhbHVlQ29lcmNl
ZChzZWFyY2hUZXJtLCBvcHRpb25zKSB7c2VhcmNoKCd2YWx1ZUNvZXJjZWQnLCBudWxsLCBzZWFy
Y2hUZXJtLCBvcHRpb25zKTt9OworICAgIGZ1bmN0aW9uIGN1c3RvbShmbiwgb3B0aW9ucykge3Ry
YXZlcnNlKGZuLCBudWxsLCBvcHRpb25zKTt9OworCisgICAgLy8qKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioKKyAgICAvLyBFdmVudCBsb2dnaW5nCisgICAgLy8qKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioKKworICAgIHZhciBBTEwgPSAnYWxsJzsgLy9ubyBmaWx0ZXIK
KworICAgIC8vbm8gbG9nZ2luZyBieSBkZWZhdWx0CisgICAgdmFyIGRlZmF1bHRFdmVudE5hbWVz
RmlsdGVyID0gW107CisgICAgdmFyIGRlZmF1bHRBY3Rpb25zRmlsdGVyID0gW107CisKKyAgICB2
YXIgbG9nRmlsdGVyID0gcmV0cmlldmVMb2dGaWx0ZXIoKTsKKworICAgIGZ1bmN0aW9uIGZpbHRl
ckV2ZW50TG9nc0J5QWN0aW9uKC8qYWN0aW9ucyovKSB7CisgICAgICB2YXIgYWN0aW9ucyA9IFtd
LnNsaWNlLmNhbGwoYXJndW1lbnRzKTsKKworICAgICAgbG9nRmlsdGVyLmV2ZW50TmFtZXMubGVu
Z3RoIHx8IChsb2dGaWx0ZXIuZXZlbnROYW1lcyA9IEFMTCk7CisgICAgICBsb2dGaWx0ZXIuYWN0
aW9ucyA9IGFjdGlvbnMubGVuZ3RoID8gYWN0aW9ucyA6IEFMTDsKKyAgICAgIHNhdmVMb2dGaWx0
ZXIoKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBmaWx0ZXJFdmVudExvZ3NCeU5hbWUoLypldmVu
dE5hbWVzKi8pIHsKKyAgICAgIHZhciBldmVudE5hbWVzID0gW10uc2xpY2UuY2FsbChhcmd1bWVu
dHMpOworCisgICAgICBsb2dGaWx0ZXIuYWN0aW9ucy5sZW5ndGggfHwgKGxvZ0ZpbHRlci5hY3Rp
b25zID0gQUxMKTsKKyAgICAgIGxvZ0ZpbHRlci5ldmVudE5hbWVzID0gZXZlbnROYW1lcy5sZW5n
dGggPyBldmVudE5hbWVzIDogQUxMOworICAgICAgc2F2ZUxvZ0ZpbHRlcigpOworICAgIH0KKwor
ICAgIGZ1bmN0aW9uIGhpZGVBbGxFdmVudExvZ3MoKSB7CisgICAgICBsb2dGaWx0ZXIuYWN0aW9u
cyA9IFtdOworICAgICAgbG9nRmlsdGVyLmV2ZW50TmFtZXMgPSBbXTsKKyAgICAgIHNhdmVMb2dG
aWx0ZXIoKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBzaG93QWxsRXZlbnRMb2dzKCkgeworICAg
ICAgbG9nRmlsdGVyLmFjdGlvbnMgPSBBTEw7CisgICAgICBsb2dGaWx0ZXIuZXZlbnROYW1lcyA9
IEFMTDsKKyAgICAgIHNhdmVMb2dGaWx0ZXIoKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBzYXZl
TG9nRmlsdGVyKCkgeworICAgICAgaWYgKHdpbmRvdy5sb2NhbFN0b3JhZ2UpIHsKKyAgICAgICAg
bG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2xvZ0ZpbHRlcl9ldmVudE5hbWVzJywgbG9nRmlsdGVyLmV2
ZW50TmFtZXMpOworICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnbG9nRmlsdGVyX2FjdGlv
bnMnLCBsb2dGaWx0ZXIuYWN0aW9ucyk7CisgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24g
cmV0cmlldmVMb2dGaWx0ZXIoKSB7CisgICAgICB2YXIgcmVzdWx0ID0geworICAgICAgICBldmVu
dE5hbWVzOiAod2luZG93LmxvY2FsU3RvcmFnZSAmJiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbG9n
RmlsdGVyX2V2ZW50TmFtZXMnKSkgfHwgZGVmYXVsdEV2ZW50TmFtZXNGaWx0ZXIsCisgICAgICAg
IGFjdGlvbnM6ICh3aW5kb3cubG9jYWxTdG9yYWdlICYmIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCds
b2dGaWx0ZXJfYWN0aW9ucycpKSB8fCBkZWZhdWx0QWN0aW9uc0ZpbHRlcgorICAgICAgfTsKKyAg
ICAgIC8vcmVjb25zdGl0dXRlIGFycmF5cworICAgICAgT2JqZWN0LmtleXMocmVzdWx0KS5mb3JF
YWNoKGZ1bmN0aW9uKGspIHsKKyAgICAgICAgdmFyIHRoaXNQcm9wID0gcmVzdWx0W2tdOworICAg
ICAgICBpZiAodHlwZW9mIHRoaXNQcm9wID09ICdzdHJpbmcnICYmIHRoaXNQcm9wICE9PSBBTEwp
IHsKKyAgICAgICAgICByZXN1bHRba10gPSB0aGlzUHJvcC5zcGxpdCgnLCcpOworICAgICAgICB9
CisgICAgICB9KTsKKyAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgcmV0dXJuIHsK
KworICAgICAgZW5hYmxlOiBmdW5jdGlvbihlbmFibGUpIHsKKyAgICAgICAgdGhpcy5lbmFibGVk
ID0gISFlbmFibGU7CisKKyAgICAgICAgaWYgKGVuYWJsZSAmJiB3aW5kb3cuY29uc29sZSkgewor
ICAgICAgICAgIGNvbnNvbGUuaW5mbygnQm9vdGluZyBpbiBERUJVRyBtb2RlJyk7CisgICAgICAg
ICAgY29uc29sZS5pbmZvKCdZb3UgY2FuIGNvbmZpZ3VyZSBldmVudCBsb2dnaW5nIHdpdGggREVC
VUcuZXZlbnRzLmxvZ0FsbCgpL2xvZ05vbmUoKS9sb2dCeU5hbWUoKS9sb2dCeUFjdGlvbigpJyk7
CisgICAgICAgIH0KKworICAgICAgICB3aW5kb3cuREVCVUcgPSB0aGlzOworICAgICAgfSwKKwor
ICAgICAgZmluZDogeworICAgICAgICBieU5hbWU6IGJ5TmFtZSwKKyAgICAgICAgYnlOYW1lQ29u
dGFpbnM6IGJ5TmFtZUNvbnRhaW5zLAorICAgICAgICBieVR5cGU6IGJ5VHlwZSwKKyAgICAgICAg
YnlWYWx1ZTogYnlWYWx1ZSwKKyAgICAgICAgYnlWYWx1ZUNvZXJjZWQ6IGJ5VmFsdWVDb2VyY2Vk
LAorICAgICAgICBjdXN0b206IGN1c3RvbQorICAgICAgfSwKKworICAgICAgZXZlbnRzOiB7Cisg
ICAgICAgIGxvZ0ZpbHRlcjogbG9nRmlsdGVyLAorCisgICAgICAgIC8vIEFjY2VwdHMgYW55IG51
bWJlciBvZiBhY3Rpb24gYXJncworICAgICAgICAvLyBlLmcuIERFQlVHLmV2ZW50cy5sb2dCeUFj
dGlvbigib24iLCAib2ZmIikKKyAgICAgICAgbG9nQnlBY3Rpb246IGZpbHRlckV2ZW50TG9nc0J5
QWN0aW9uLAorCisgICAgICAgIC8vIEFjY2VwdHMgYW55IG51bWJlciBvZiBldmVudCBuYW1lIGFy
Z3MgKGluYy4gcmVnZXggb3Igd2lsZGNhcmRzKQorICAgICAgICAvLyBlLmcuIERFQlVHLmV2ZW50
cy5sb2dCeU5hbWUoL3VpLiovLCAiKlRocmVhZCoiKTsKKyAgICAgICAgbG9nQnlOYW1lOiBmaWx0
ZXJFdmVudExvZ3NCeU5hbWUsCisKKyAgICAgICAgbG9nQWxsOiBzaG93QWxsRXZlbnRMb2dzLAor
ICAgICAgICBsb2dOb25lOiBoaWRlQWxsRXZlbnRMb2dzCisgICAgICB9CisgICAgfTsKKyAgfQor
KTsKKwpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFt
cGxlLWFwcC9jb21wb25lbnRzL2phc21pbmUtZmxpZ2h0L0xJQ0VOU0UubWQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9j
b21wb25lbnRzL2phc21pbmUtZmxpZ2h0L0xJQ0VOU0UubWQJKHJldmlzaW9uIDApCisrKyBQZXJm
b3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVu
dHMvamFzbWluZS1mbGlnaHQvTElDRU5TRS5tZAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE5
IEBACitDb3B5cmlnaHQgKGMpIDIwMTMgVHdpdHRlciwgSW5jIGFuZCBvdGhlcnMKKworUGVybWlz
c2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0
YWluaW5nIGEgY29weQorb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0
aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKK2luIHRoZSBTb2Z0d2FyZSB3aXRo
b3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMK
K3RvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGlj
ZW5zZSwgYW5kL29yIHNlbGwKK2NvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQg
cGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJq
ZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworVGhlIGFib3ZlIGNvcHlyaWdodCBu
b3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KK2Fs
bCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCitUSEUg
U09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lO
RCwgRVhQUkVTUyBPUgorSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKK0FVVEhP
UlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMg
T1IgT1RIRVIKK0xJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRP
UlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCitPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBX
SVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCitUSEUgU09G
VFdBUkUuClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogUGVyZm9ybWFuY2VUZXN0
cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2phc21pbmUt
ZmxpZ2h0L1JFQURNRS5tZAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZl
bkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvamFzbWluZS1mbGlnaHQvUkVB
RE1FLm1kCShyZXZpc2lvbiAwKQorKysgUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9m
bGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2phc21pbmUtZmxpZ2h0L1JFQURNRS5tZAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0NSBAQAorIyBqYXNtaW5lLWZsaWdodCBbIVtCdWls
ZCBTdGF0dXNdKGh0dHBzOi8vdHJhdmlzLWNpLm9yZy9mbGlnaHRqcy9qYXNtaW5lLWZsaWdodC5w
bmc/YnJhbmNoPW1hc3RlcildKGh0dHA6Ly90cmF2aXMtY2kub3JnL2ZsaWdodGpzL2phc21pbmUt
ZmxpZ2h0KQorCitFeHRlbnNpb25zIHRvIHRoZSBKYXNtaW5lIHRlc3QgZnJhbWV3b3JrIGZvciB1
c2Ugd2l0aCBbRmxpZ2h0XShodHRwczovL2dpdGh1Yi5jb20vZmxpZ2h0anMvZmxpZ2h0KQorCisj
IEdldHRpbmcgc3RhcnRlZAorCitJbmNsdWRlIFtqYXNtaW5lLWZsaWdodC5qc10oaHR0cHM6Ly9y
YXcuZ2l0aHViLmNvbS9mbGlnaHRqcy9qYXNtaW5lLWZsaWdodC9tYXN0ZXIvbGliL2phc21pbmUt
ZmxpZ2h0LmpzKQoraW4geW91ciBhcHAgYW5kIGxvYWQgaXQgaW4geW91ciB0ZXN0IHJ1bm5lci4K
KworT3IgaW5zdGFsbCBpdCB3aXRoIFtCb3dlcl0oaHR0cDovL2Jvd2VyLmlvLyk6CisKK2BgYGJh
c2gKK2Jvd2VyIGluc3RhbGwgLS1zYXZlLWRldiBqYXNtaW5lLWZsaWdodAorYGBgCisKKyoqTi5C
LioqIGphc21pbmUtZmxpZ2h0IGRlcGVuZHMgb24KK1tqYXNtaW5lXShodHRwczovL2dpdGh1Yi5j
b20vcGl2b3RhbC9qYXNtaW5lKSBhbmQKK1tqYXNtaW5lLWpxdWVyeV0oaHR0cHM6Ly9naXRodWIu
Y29tL3ZlbGVzaW4vamFzbWluZS1qcXVlcnkpCisKKyMjIENvbXBvbmVudHMKKworYGBgamF2YXNj
cmlwdAorZGVzY3JpYmVDb21wb25lbnQoJ3BhdGgvdG8vY29tcG9uZW50JywgZnVuY3Rpb24gKCkg
eworICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHsKKyAgICBzZXR1cENvbXBvbmVudCgpOworICB9
KTsKKworICBpdCgnc2hvdWxkIGRvIHgnLCBmdW5jdGlvbiAoKSB7CisgICAgLy8gYSBjb21wb25l
bnQgaW5zdGFuY2UgaXMgbm93IGFjY2Vzc2libGUgYXMgdGhpcy5jb21wb25lbnQKKyAgICAvLyB0
aGUgY29tcG9uZW50IHJvb3Qgbm9kZSBpcyBhdHRhY2hlZCB0byB0aGUgRE9NCisgICAgLy8gdGhl
IGNvbXBvbmVudCByb290IG5vZGUgaXMgYWxzbyBhdmFpbGFibGUgYXMgdGhpcy4kbm9kZQorICB9
KTsKK30pOworYGBgCisKKyMjIE1peGlucworCitgYGBqYXZhc2NyaXB0CitkZXNjcmliZU1peGlu
KCdwYXRoL3RvL21peGluJywgZnVuY3Rpb24gKCkgeworICAvLyBpbml0aWFsaXplIHRoZSBjb21w
b25lbnQgYW5kIGF0dGFjaCBpdCB0byB0aGUgRE9NCisgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkg
eworICAgIHNldHVwQ29tcG9uZW50KCk7CisgIH0pOworCisgIGl0KCdzaG91bGQgZG8geCcsIGZ1
bmN0aW9uICgpIHsKKyAgICBleHBlY3QodGhpcy5jb21wb25lbnQuZG9Tb21ldGhpbmcoKSkudG9C
ZShleHBlY3RlZCk7CisgIH0pOworfSk7CitgYGAKKworIyMgRXZlbnQgc3B5CisKK2BgYGphdmFz
Y3JpcHQKK2Rlc2NyaWJlQ29tcG9uZW50KCdkYXRhL3R3aXR0ZXJfcHJvZmlsZScsIGZ1bmN0aW9u
ICgpIHsKKyAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7CisgICAgc2V0dXBDb21wb25lbnQoKTsK
KyAgfSk7CisKKyAgZGVzY3JpYmUoJ2xpc3RlbnMgZm9yIHVpTmVlZHNUd2l0dGVyVXNlcklkJywg
ZnVuY3Rpb24gKCkgeworICAgIC8vIHdhcyB0aGUgZXZlbnQgdHJpZ2dlcmVkPworICAgIGl0KCdh
bmQgdHJpZ2dlcnMgZGF0YVR3aXR0ZXJVc2VySWQnLCBmdW5jdGlvbiAoKSB7CisgICAgICB2YXIg
ZXZlbnRTcHkgPSBzcHlPbkV2ZW50KGRvY3VtZW50LCAnZGF0YVR3aXR0ZXJQcm9maWxlJyk7Cisg
ICAgICAkKGRvY3VtZW50KS50cmlnZ2VyKCd1aU5lZWRzVHdpdHRlclVzZXJJZCcsIHsKKyAgICAg
ICAgc2NyZWVuX25hbWU6ICd0YnJkJworICAgICAgfSk7CisgICAgICBleHBlY3QoZXZlbnRTcHkp
LnRvSGF2ZUJlZW5UcmlnZ2VyZWRPbihkb2N1bWVudCk7CisgICAgfSk7CisKKyAgICAvLyBpcyB0
aGUgdXNlciBpZCBjb3JyZWN0PworICAgIGl0KCdhbmQgaGFzIGNvcnJlY3QgaWQnLCBmdW5jdGlv
biAoKSB7CisgICAgICB2YXIgZXZlbnRTcHkgPSBzcHlPbkV2ZW50KGRvY3VtZW50LCAnZGF0YVR3
aXR0ZXJVc2VySWQnKTsKKyAgICAgICQoZG9jdW1lbnQpLnRyaWdnZXIoJ3VpTmVlZHNUd2l0dGVy
dXNlcklkJywgeworICAgICAgICBzY3JlZW5fbmFtZTogJ3RicmQnCisgICAgICB9KTsKKyAgICAg
IGV4cGVjdChldmVudFNweS5tb3N0UmVjZW50Q2FsbC5kYXRhKS50b0VxdWFsKHsKKyAgICAgICAg
c2NyZWVuX25hbWU6ICd0YnJkJywKKyAgICAgICAgaWQ6IDQxNDk4NjEKKyAgICAgIH0pOworICAg
IH0pOworICB9KTsKK30pOworYGBgCisKKyMjIHNldHVwQ29tcG9uZW50CisKK2BgYGphdmFzY3Jp
cHQKK3NldHVwQ29tcG9uZW50KG9wdGlvbmFsRml4dHVyZSwgb3B0aW9uYWxPcHRpb25zKTsKK2Bg
YAorCitDYWxsaW5nIGBzZXR1cENvbXBvbmVudGAgdHdpY2Ugd2lsbCBjcmVhdGUgYW4gaW5zdGFu
Y2UsIHRlYXIgaXQgZG93biBhbmQgY3JlYXRlIGEgbmV3IG9uZS4KKworIyMjIEhUTUwgRml4dHVy
ZXMKKworYGBgamF2YXNjcmlwdAorZGVzY3JpYmVDb21wb25lbnQoJ3VpL3R3aXR0ZXJfcHJvZmls
ZScsIGZ1bmN0aW9uICgpIHsKKyAgLy8gaXMgdGhlIGNvbXBvbmVudCBhdHRhY2hlZCB0byB0aGUg
Zml4dHVyZT8KKyAgaXQoJ3RoaXMuY29tcG9uZW50LiRub2RlIGhhcyBjbGFzcyAiZm9vIicsIGZ1
bmN0aW9uICgpIHsKKyAgICBzZXR1cENvbXBvbmVudCgnPHNwYW4gY2xhc3M9ImZvbyI+VGVzdDwv
c3Bhbj4nKTsKKyAgICBleHBlY3QodGhpcy5jb21wb25lbnQuJG5vZGUpLnRvSGF2ZUNsYXNzKCdm
b28nKTsKKyAgfSk7Cit9KTsKK2BgYAorCisjIyMgQ29tcG9uZW50IE9wdGlvbnMKKworYGBgamF2
YXNjcmlwdAorZGVzY3JpYmVDb21wb25lbnQoJ2RhdGEvdHdpdHRlcl9wcm9maWxlJywgZnVuY3Rp
b24gKCkgeworICAvLyBpcyB0aGUgb3B0aW9uIHNldCBjb3JyZWN0bHk/CisgIGl0KCd0aGlzLmNv
bXBvbmVudC5hdHRyLmJhc2VVcmwgaXMgc2V0JywgZnVuY3Rpb24gKCkgeworICAgIHNldHVwQ29t
cG9uZW50KHsKKyAgICAgIGJhc2VVcmw6ICdodHRwOi8vdHdpdHRlci5jb20vMS4xLycKKyAgICB9
KTsKKyAgICBleHBlY3QodGhpcy5jb21wb25lbnQuYXR0ci5iYXNlVXJsKS50b0JlKCdodHRwOi8v
dHdpdHRlci5jb20vMS4xLycpOworICB9KTsKK30pOworYGBgCisKKyMgVGVhcmRvd24KKworQ29t
cG9uZW50cyBhcmUgYXV0b21hdGljYWxseSB0b3JuIGRvd24gYWZ0ZXIgZWFjaCB0ZXN0LgorCisj
IyBDb250cmlidXRpbmcgdG8gdGhpcyBwcm9qZWN0CisKK0FueW9uZSBhbmQgZXZlcnlvbmUgaXMg
d2VsY29tZSB0byBjb250cmlidXRlLiBQbGVhc2UgdGFrZSBhIG1vbWVudCB0bworcmV2aWV3IHRo
ZSBbZ3VpZGVsaW5lcyBmb3IgY29udHJpYnV0aW5nXShDT05UUklCVVRJTkcubWQpLgorCisqIFtC
dWcgcmVwb3J0c10oQ09OVFJJQlVUSU5HLm1kI2J1Z3MpCisqIFtGZWF0dXJlIHJlcXVlc3RzXShD
T05UUklCVVRJTkcubWQjZmVhdHVyZXMpCisqIFtQdWxsIHJlcXVlc3RzXShDT05UUklCVVRJTkcu
bWQjcHVsbC1yZXF1ZXN0cykKKworIyMgQXV0aG9ycworCisqIFtAdGJyZF0oaHR0cDovL2dpdGh1
Yi5jb20vdGJyZCkKKworIyMgVGhhbmtzCisKKyogW0Blc2JpZV0oaHR0cDovL2dpdGh1Yi5jb20v
ZXNiaWUpIGFuZAorICBbQHNraWxsZHJpY2tdKGh0dHA6Ly9naXRodWIuY29tL3NraWxsZHJpY2sp
IGZvciBjcmVhdGluZyB0aGUgb3JpZ2luYWwKKyAgYGRlc2NyaWJlQ29tcG9uZW50YCAmIGBkZXNj
cmliZU1peGluYCBtZXRob2RzLgorCisjIyBMaWNlbnNlCisKK0NvcHlyaWdodCAyMDEzIFR3aXR0
ZXIsIEluYyBhbmQgb3RoZXIgY29udHJpYnV0b3JzLgorCitMaWNlbnNlZCB1bmRlciB0aGUgTUlU
IExpY2Vuc2UKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMt
ZXhhbXBsZS1hcHAvY29tcG9uZW50cy9qYXNtaW5lLWZsaWdodC9ib3dlci5qc29uCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1h
cHAvY29tcG9uZW50cy9qYXNtaW5lLWZsaWdodC9ib3dlci5qc29uCShyZXZpc2lvbiAwKQorKysg
UGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21w
b25lbnRzL2phc21pbmUtZmxpZ2h0L2Jvd2VyLmpzb24JKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwzMCBAQAoreworICAibmFtZSI6ICJqYXNtaW5lLWZsaWdodCIsCisgICJ2ZXJzaW9uIjogIjEu
MS4wIiwKKyAgImRlc2NyaXB0aW9uIjogIkV4dGVuc2lvbnMgdG8gdGhlIEphc21pbmUgdGVzdCBm
cmFtZXdvcmsgZm9yIHVzZSB3aXRoIEZsaWdodCIsCisgICJtYWluIjogImxpYi9qYXNtaW5lLWZs
aWdodC5qcyIsCisgICJrZXl3b3JkcyI6IFsKKyAgICAiZmxpZ2h0IiwKKyAgICAiamFzbWluZSIs
CisgICAgInRlc3QiCisgIF0sCisgICJpZ25vcmUiOiBbCisgICAgIi4qIiwKKyAgICAidGVzdCIs
CisgICAgInBhY2thZ2UuanNvbiIsCisgICAgImthcm1hLmNvbmYuanMiLAorICAgICJDT05UUklC
VVRJTkcubWQiLAorICAgICJDSEFOR0VMT0cubWQiCisgIF0sCisgICJkZXZEZXBlbmRlbmNpZXMi
OiB7CisgICAgImZsaWdodCI6ICJ+MS4wLjkiCisgIH0sCisgICJnaXRIZWFkIjogIjUxNzQzMDJi
OWE4N2ViZGRhOTlkZTZhNDM2ZWMyYTY0MjAwZmM1ZmYiLAorICAicmVhZG1lIjogIiMgamFzbWlu
ZS1mbGlnaHQgWyFbQnVpbGQgU3RhdHVzXShodHRwczovL3RyYXZpcy1jaS5vcmcvZmxpZ2h0anMv
amFzbWluZS1mbGlnaHQucG5nP2JyYW5jaD1tYXN0ZXIpXShodHRwOi8vdHJhdmlzLWNpLm9yZy9m
bGlnaHRqcy9qYXNtaW5lLWZsaWdodClcblxuRXh0ZW5zaW9ucyB0byB0aGUgSmFzbWluZSB0ZXN0
IGZyYW1ld29yayBmb3IgdXNlIHdpdGggW0ZsaWdodF0oaHR0cHM6Ly9naXRodWIuY29tL2ZsaWdo
dGpzL2ZsaWdodClcblxuIyBHZXR0aW5nIHN0YXJ0ZWRcblxuSW5jbHVkZSBbamFzbWluZS1mbGln
aHQuanNdKGh0dHBzOi8vcmF3LmdpdGh1Yi5jb20vZmxpZ2h0anMvamFzbWluZS1mbGlnaHQvbWFz
dGVyL2xpYi9qYXNtaW5lLWZsaWdodC5qcylcbmluIHlvdXIgYXBwIGFuZCBsb2FkIGl0IGluIHlv
dXIgdGVzdCBydW5uZXIuXG5cbk9yIGluc3RhbGwgaXQgd2l0aCBbQm93ZXJdKGh0dHA6Ly9ib3dl
ci5pby8pOlxuXG5gYGBiYXNoXG5ib3dlciBpbnN0YWxsIC0tc2F2ZS1kZXYgamFzbWluZS1mbGln
aHRcbmBgYFxuXG4qKk4uQi4qKiBqYXNtaW5lLWZsaWdodCBkZXBlbmRzIG9uXG5bamFzbWluZV0o
aHR0cHM6Ly9naXRodWIuY29tL3Bpdm90YWwvamFzbWluZSkgYW5kXG5bamFzbWluZS1qcXVlcnld
KGh0dHBzOi8vZ2l0aHViLmNvbS92ZWxlc2luL2phc21pbmUtanF1ZXJ5KVxuXG4jIyBDb21wb25l
bnRzXG5cbmBgYGphdmFzY3JpcHRcbmRlc2NyaWJlQ29tcG9uZW50KCdwYXRoL3RvL2NvbXBvbmVu
dCcsIGZ1bmN0aW9uICgpIHtcbiAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgc2V0dXBD
b21wb25lbnQoKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBkbyB4JywgZnVuY3Rpb24gKCkge1xu
ICAgIC8vIGEgY29tcG9uZW50IGluc3RhbmNlIGlzIG5vdyBhY2Nlc3NpYmxlIGFzIHRoaXMuY29t
cG9uZW50XG4gICAgLy8gdGhlIGNvbXBvbmVudCByb290IG5vZGUgaXMgYXR0YWNoZWQgdG8gdGhl
IERPTVxuICAgIC8vIHRoZSBjb21wb25lbnQgcm9vdCBub2RlIGlzIGFsc28gYXZhaWxhYmxlIGFz
IHRoaXMuJG5vZGVcbiAgfSk7XG59KTtcbmBgYFxuXG4jIyBNaXhpbnNcblxuYGBgamF2YXNjcmlw
dFxuZGVzY3JpYmVNaXhpbigncGF0aC90by9taXhpbicsIGZ1bmN0aW9uICgpIHtcbiAgLy8gaW5p
dGlhbGl6ZSB0aGUgY29tcG9uZW50IGFuZCBhdHRhY2ggaXQgdG8gdGhlIERPTVxuICBiZWZvcmVF
YWNoKGZ1bmN0aW9uICgpIHtcbiAgICBzZXR1cENvbXBvbmVudCgpO1xuICB9KTtcblxuICBpdCgn
c2hvdWxkIGRvIHgnLCBmdW5jdGlvbiAoKSB7XG4gICAgZXhwZWN0KHRoaXMuY29tcG9uZW50LmRv
U29tZXRoaW5nKCkpLnRvQmUoZXhwZWN0ZWQpO1xuICB9KTtcbn0pO1xuYGBgXG5cbiMjIEV2ZW50
IHNweVxuXG5gYGBqYXZhc2NyaXB0XG5kZXNjcmliZUNvbXBvbmVudCgnZGF0YS90d2l0dGVyX3By
b2ZpbGUnLCBmdW5jdGlvbiAoKSB7XG4gIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgIHNl
dHVwQ29tcG9uZW50KCk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdsaXN0ZW5zIGZvciB1aU5lZWRz
VHdpdHRlclVzZXJJZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAvLyB3YXMgdGhlIGV2ZW50IHRyaWdn
ZXJlZD9cbiAgICBpdCgnYW5kIHRyaWdnZXJzIGRhdGFUd2l0dGVyVXNlcklkJywgZnVuY3Rpb24g
KCkge1xuICAgICAgdmFyIGV2ZW50U3B5ID0gc3B5T25FdmVudChkb2N1bWVudCwgJ2RhdGFUd2l0
dGVyUHJvZmlsZScpO1xuICAgICAgJChkb2N1bWVudCkudHJpZ2dlcigndWlOZWVkc1R3aXR0ZXJV
c2VySWQnLCB7XG4gICAgICAgIHNjcmVlbl9uYW1lOiAndGJyZCdcbiAgICAgIH0pO1xuICAgICAg
ZXhwZWN0KGV2ZW50U3B5KS50b0hhdmVCZWVuVHJpZ2dlcmVkT24oZG9jdW1lbnQpO1xuICAgIH0p
O1xuXG4gICAgLy8gaXMgdGhlIHVzZXIgaWQgY29ycmVjdD9cbiAgICBpdCgnYW5kIGhhcyBjb3Jy
ZWN0IGlkJywgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGV2ZW50U3B5ID0gc3B5T25FdmVudChk
b2N1bWVudCwgJ2RhdGFUd2l0dGVyVXNlcklkJyk7XG4gICAgICAkKGRvY3VtZW50KS50cmlnZ2Vy
KCd1aU5lZWRzVHdpdHRlcnVzZXJJZCcsIHtcbiAgICAgICAgc2NyZWVuX25hbWU6ICd0YnJkJ1xu
ICAgICAgfSk7XG4gICAgICBleHBlY3QoZXZlbnRTcHkubW9zdFJlY2VudENhbGwuZGF0YSkudG9F
cXVhbCh7XG4gICAgICAgIHNjcmVlbl9uYW1lOiAndGJyZCcsXG4gICAgICAgIGlkOiA0MTQ5ODYx
XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbmBgYFxuXG4jIyBzZXR1cENvbXBvbmVu
dFxuXG5gYGBqYXZhc2NyaXB0XG5zZXR1cENvbXBvbmVudChvcHRpb25hbEZpeHR1cmUsIG9wdGlv
bmFsT3B0aW9ucyk7XG5gYGBcblxuQ2FsbGluZyBgc2V0dXBDb21wb25lbnRgIHR3aWNlIHdpbGwg
Y3JlYXRlIGFuIGluc3RhbmNlLCB0ZWFyIGl0IGRvd24gYW5kIGNyZWF0ZSBhIG5ldyBvbmUuXG5c
biMjIyBIVE1MIEZpeHR1cmVzXG5cbmBgYGphdmFzY3JpcHRcbmRlc2NyaWJlQ29tcG9uZW50KCd1
aS90d2l0dGVyX3Byb2ZpbGUnLCBmdW5jdGlvbiAoKSB7XG4gIC8vIGlzIHRoZSBjb21wb25lbnQg
YXR0YWNoZWQgdG8gdGhlIGZpeHR1cmU/XG4gIGl0KCd0aGlzLmNvbXBvbmVudC4kbm9kZSBoYXMg
Y2xhc3MgXCJmb29cIicsIGZ1bmN0aW9uICgpIHtcbiAgICBzZXR1cENvbXBvbmVudCgnPHNwYW4g
Y2xhc3M9XCJmb29cIj5UZXN0PC9zcGFuPicpO1xuICAgIGV4cGVjdCh0aGlzLmNvbXBvbmVudC4k
bm9kZSkudG9IYXZlQ2xhc3MoJ2ZvbycpO1xuICB9KTtcbn0pO1xuYGBgXG5cbiMjIyBDb21wb25l
bnQgT3B0aW9uc1xuXG5gYGBqYXZhc2NyaXB0XG5kZXNjcmliZUNvbXBvbmVudCgnZGF0YS90d2l0
dGVyX3Byb2ZpbGUnLCBmdW5jdGlvbiAoKSB7XG4gIC8vIGlzIHRoZSBvcHRpb24gc2V0IGNvcnJl
Y3RseT9cbiAgaXQoJ3RoaXMuY29tcG9uZW50LmF0dHIuYmFzZVVybCBpcyBzZXQnLCBmdW5jdGlv
biAoKSB7XG4gICAgc2V0dXBDb21wb25lbnQoe1xuICAgICAgYmFzZVVybDogJ2h0dHA6Ly90d2l0
dGVyLmNvbS8xLjEvJ1xuICAgIH0pO1xuICAgIGV4cGVjdCh0aGlzLmNvbXBvbmVudC5hdHRyLmJh
c2VVcmwpLnRvQmUoJ2h0dHA6Ly90d2l0dGVyLmNvbS8xLjEvJyk7XG4gIH0pO1xufSk7XG5gYGBc
blxuIyBUZWFyZG93blxuXG5Db21wb25lbnRzIGFyZSBhdXRvbWF0aWNhbGx5IHRvcm4gZG93biBh
ZnRlciBlYWNoIHRlc3QuXG5cbiMjIENvbnRyaWJ1dGluZyB0byB0aGlzIHByb2plY3RcblxuQW55
b25lIGFuZCBldmVyeW9uZSBpcyB3ZWxjb21lIHRvIGNvbnRyaWJ1dGUuIFBsZWFzZSB0YWtlIGEg
bW9tZW50IHRvXG5yZXZpZXcgdGhlIFtndWlkZWxpbmVzIGZvciBjb250cmlidXRpbmddKENPTlRS
SUJVVElORy5tZCkuXG5cbiogW0J1ZyByZXBvcnRzXShDT05UUklCVVRJTkcubWQjYnVncylcbiog
W0ZlYXR1cmUgcmVxdWVzdHNdKENPTlRSSUJVVElORy5tZCNmZWF0dXJlcylcbiogW1B1bGwgcmVx
dWVzdHNdKENPTlRSSUJVVElORy5tZCNwdWxsLXJlcXVlc3RzKVxuXG4jIyBBdXRob3JzXG5cbiog
W0B0YnJkXShodHRwOi8vZ2l0aHViLmNvbS90YnJkKVxuXG4jIyBUaGFua3NcblxuKiBbQGVzYmll
XShodHRwOi8vZ2l0aHViLmNvbS9lc2JpZSkgYW5kXG4gIFtAc2tpbGxkcmlja10oaHR0cDovL2dp
dGh1Yi5jb20vc2tpbGxkcmljaykgZm9yIGNyZWF0aW5nIHRoZSBvcmlnaW5hbFxuICBgZGVzY3Jp
YmVDb21wb25lbnRgICYgYGRlc2NyaWJlTWl4aW5gIG1ldGhvZHMuXG5cbiMjIExpY2Vuc2Vcblxu
Q29weXJpZ2h0IDIwMTMgVHdpdHRlciwgSW5jIGFuZCBvdGhlciBjb250cmlidXRvcnMuXG5cbkxp
Y2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZVxuIiwKKyAgInJlYWRtZUZpbGVuYW1lIjogIlJF
QURNRS5tZCIsCisgICJfaWQiOiAiamFzbWluZS1mbGlnaHRAMS4xLjAiLAorICAicmVwb3NpdG9y
eSI6IHsKKyAgICAidHlwZSI6ICJnaXQiLAorICAgICJ1cmwiOiAiZ2l0Oi8vZ2l0aHViLmNvbS9m
bGlnaHRqcy9qYXNtaW5lLWZsaWdodC5naXQiCisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBv
ZiBmaWxlCkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4
YW1wbGUtYXBwL2NvbXBvbmVudHMvamFzbWluZS1mbGlnaHQvbGliL2phc21pbmUtZmxpZ2h0Lmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMt
ZXhhbXBsZS1hcHAvY29tcG9uZW50cy9qYXNtaW5lLWZsaWdodC9saWIvamFzbWluZS1mbGlnaHQu
anMJKHJldmlzaW9uIDApCisrKyBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdo
dGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvamFzbWluZS1mbGlnaHQvbGliL2phc21pbmUtZmxp
Z2h0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQ0IEBACisvKioKKyAqIENvcHlyaWdo
dCAyMDEzLCBUd2l0dGVyIEluYy4gYW5kIG90aGVyIGNvbnRyaWJ1dG9ycworICogTGljZW5zZWQg
dW5kZXIgdGhlIE1JVCBMaWNlbnNlCisgKi8KKworKGZ1bmN0aW9uIChyb290KSB7CisgICd1c2Ug
c3RyaWN0JzsKKworICBqYXNtaW5lLmZsaWdodCA9IHt9OworCisgIC8qKgorICAgKiBXcmFwcGVy
IGZvciBkZXNjcmliZS4gTG9hZCBjb21wb25lbnQgYmVmb3JlIGVhY2ggdGVzdC4KKyAgICoKKyAg
ICogQHBhcmFtIGNvbXBvbmVudFBhdGgKKyAgICogQHBhcmFtIHNwZWNEZWZpbml0aW9ucworICAg
Ki8KKworICByb290LmRlc2NyaWJlQ29tcG9uZW50ID0gZnVuY3Rpb24gKGNvbXBvbmVudFBhdGgs
IHNwZWNEZWZpbml0aW9ucykgeworICAgIGphc21pbmUuZ2V0RW52KCkuZGVzY3JpYmVDb21wb25l
bnQoY29tcG9uZW50UGF0aCwgc3BlY0RlZmluaXRpb25zKTsKKyAgfTsKKworICBqYXNtaW5lLkVu
di5wcm90b3R5cGUuZGVzY3JpYmVDb21wb25lbnQgPSBmdW5jdGlvbiAoY29tcG9uZW50UGF0aCwg
c3BlY0RlZmluaXRpb25zKSB7CisgICAgZGVzY3JpYmUoY29tcG9uZW50UGF0aCwgZnVuY3Rpb24g
KCkgeworICAgICAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMuQ29tcG9u
ZW50ID0gdGhpcy5jb21wb25lbnQgPSB0aGlzLiRub2RlID0gbnVsbDsKKworICAgICAgICB2YXIg
cmVxdWlyZUNhbGxiYWNrID0gZnVuY3Rpb24gKHJlZ2lzdHJ5LCBDb21wb25lbnQpIHsKKyAgICAg
ICAgICByZWdpc3RyeS5yZXNldCgpOworICAgICAgICAgIHRoaXMuQ29tcG9uZW50ID0gQ29tcG9u
ZW50OworICAgICAgICB9LmJpbmQodGhpcyk7CisKKyAgICAgICAgcmVxdWlyZShbJ2ZsaWdodC9s
aWIvcmVnaXN0cnknLCBjb21wb25lbnRQYXRoXSwgcmVxdWlyZUNhbGxiYWNrKTsKKworICAgICAg
ICB3YWl0c0ZvcihmdW5jdGlvbiAoKSB7CisgICAgICAgICAgcmV0dXJuIHRoaXMuQ29tcG9uZW50
ICE9PSBudWxsOworICAgICAgICB9LmJpbmQodGhpcykpOworICAgICAgfSk7CisKKyAgICAgIGFm
dGVyRWFjaChmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICh0aGlzLiRub2RlKSB7CisgICAgICAg
ICAgdGhpcy4kbm9kZS5yZW1vdmUoKTsKKyAgICAgICAgICB0aGlzLiRub2RlID0gbnVsbDsKKyAg
ICAgICAgfQorCisgICAgICAgIHZhciByZXF1aXJlQ2FsbGJhY2sgPSBmdW5jdGlvbiAoZGVmaW5l
Q29tcG9uZW50KSB7CisgICAgICAgICAgaWYgKHRoaXMuY29tcG9uZW50KSB7CisgICAgICAgICAg
ICB0aGlzLmNvbXBvbmVudCA9IG51bGw7CisgICAgICAgICAgfQorCisgICAgICAgICAgdGhpcy5D
b21wb25lbnQgPSBudWxsOworICAgICAgICAgIGRlZmluZUNvbXBvbmVudC50ZWFyZG93bkFsbCgp
OworICAgICAgICB9LmJpbmQodGhpcyk7CisKKyAgICAgICAgcmVxdWlyZShbJ2ZsaWdodC9saWIv
Y29tcG9uZW50J10sIHJlcXVpcmVDYWxsYmFjayk7CisKKyAgICAgICAgd2FpdHNGb3IoZnVuY3Rp
b24gKCkgeworICAgICAgICAgIHJldHVybiB0aGlzLkNvbXBvbmVudCA9PT0gbnVsbDsKKyAgICAg
ICAgfS5iaW5kKHRoaXMpKTsKKyAgICAgIH0pOworCisgICAgICBzcGVjRGVmaW5pdGlvbnMuYXBw
bHkodGhpcyk7CisgICAgfSk7CisgIH07CisKKyAgLyoqCisgICAqIFdyYXBwZXIgZm9yIGRlc2Ny
aWJlLiBMb2FkIG1peGluIGJlZm9yZSBlYWNoIHRlc3QuCisgICAqCisgICAqIEBwYXJhbSBtaXhp
blBhdGgKKyAgICogQHBhcmFtIHNwZWNEZWZpbml0aW9ucworICAgKi8KKworICByb290LmRlc2Ny
aWJlTWl4aW4gPSBmdW5jdGlvbiAobWl4aW5QYXRoLCBzcGVjRGVmaW5pdGlvbnMpIHsKKyAgICBq
YXNtaW5lLmdldEVudigpLmRlc2NyaWJlTWl4aW4obWl4aW5QYXRoLCBzcGVjRGVmaW5pdGlvbnMp
OworICB9OworCisgIGphc21pbmUuRW52LnByb3RvdHlwZS5kZXNjcmliZU1peGluID0gZnVuY3Rp
b24gKG1peGluUGF0aCwgc3BlY0RlZmluaXRpb25zKSB7CisgICAgZGVzY3JpYmUobWl4aW5QYXRo
LCBmdW5jdGlvbiAoKSB7CisgICAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
dGhpcy5Db21wb25lbnQgPSB0aGlzLmNvbXBvbmVudCA9IHRoaXMuJG5vZGUgPSBudWxsOworCisg
ICAgICAgIHZhciByZXF1aXJlQ2FsbGJhY2sgPSBmdW5jdGlvbiAocmVnaXN0cnksIGRlZmluZUNv
bXBvbmVudCwgTWl4aW4pIHsKKyAgICAgICAgICByZWdpc3RyeS5yZXNldCgpOworICAgICAgICAg
IHRoaXMuQ29tcG9uZW50ID0gZGVmaW5lQ29tcG9uZW50KGZ1bmN0aW9uICgpIHt9LCBNaXhpbik7
CisgICAgICAgIH0uYmluZCh0aGlzKTsKKworICAgICAgICByZXF1aXJlKFsnZmxpZ2h0L2xpYi9y
ZWdpc3RyeScsICdmbGlnaHQvbGliL2NvbXBvbmVudCcsIG1peGluUGF0aF0sIHJlcXVpcmVDYWxs
YmFjayk7CisKKyAgICAgICAgd2FpdHNGb3IoZnVuY3Rpb24gKCkgeworICAgICAgICAgIHJldHVy
biB0aGlzLkNvbXBvbmVudCAhPT0gbnVsbDsKKyAgICAgICAgfSk7CisgICAgICB9KTsKKworICAg
ICAgYWZ0ZXJFYWNoKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMuJG5vZGUpIHsKKyAg
ICAgICAgICB0aGlzLiRub2RlLnJlbW92ZSgpOworICAgICAgICAgIHRoaXMuJG5vZGUgPSBudWxs
OworICAgICAgICB9CisKKyAgICAgICAgdmFyIHJlcXVpcmVDYWxsYmFjayA9IGZ1bmN0aW9uIChk
ZWZpbmVDb21wb25lbnQpIHsKKyAgICAgICAgICBpZiAodGhpcy5jb21wb25lbnQpIHsKKyAgICAg
ICAgICAgIHRoaXMuY29tcG9uZW50ID0gbnVsbDsKKyAgICAgICAgICB9CisKKyAgICAgICAgICB0
aGlzLkNvbXBvbmVudCA9IG51bGw7CisgICAgICAgICAgZGVmaW5lQ29tcG9uZW50LnRlYXJkb3du
QWxsKCk7CisgICAgICAgIH0uYmluZCh0aGlzKTsKKworICAgICAgICByZXF1aXJlKFsnZmxpZ2h0
L2xpYi9jb21wb25lbnQnXSwgcmVxdWlyZUNhbGxiYWNrKTsKKworICAgICAgICB3YWl0c0Zvcihm
dW5jdGlvbiAoKSB7CisgICAgICAgICAgcmV0dXJuIHRoaXMuQ29tcG9uZW50ID09PSBudWxsOwor
ICAgICAgICB9LmJpbmQodGhpcykpOworICAgICAgfSk7CisKKyAgICAgIHNwZWNEZWZpbml0aW9u
cy5hcHBseSh0aGlzKTsKKyAgICB9KTsKKyAgfTsKKworICAvKioKKyAgICogV3JhcHBlciBmb3Ig
ZGVzY3JpYmUuIExvYWQgbW9kdWxlIGJlZm9yZSBlYWNoIHRlc3QuCisgICAqCisgICAqIEBwYXJh
bSBtb2R1bGVQYXRoCisgICAqIEBwYXJhbSBzcGVjRGVmaW5pdGlvbnMKKyAgICovCisKKyAgcm9v
dC5kZXNjcmliZU1vZHVsZSA9IGZ1bmN0aW9uIChtb2R1bGVQYXRoLCBzcGVjRGVmaW5pdGlvbnMp
IHsKKyAgICByZXR1cm4gamFzbWluZS5nZXRFbnYoKS5kZXNjcmliZU1vZHVsZShtb2R1bGVQYXRo
LCBzcGVjRGVmaW5pdGlvbnMpOworICB9OworCisgIGphc21pbmUuRW52LnByb3RvdHlwZS5kZXNj
cmliZU1vZHVsZSA9IGZ1bmN0aW9uIChtb2R1bGVQYXRoLCBzcGVjRGVmaW5pdGlvbnMpIHsKKyAg
ICBkZXNjcmliZShtb2R1bGVQYXRoLCBmdW5jdGlvbiAoKSB7CisgICAgICBiZWZvcmVFYWNoKGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgdGhpcy5tb2R1bGUgPSBudWxsOworCisgICAgICAgIHZhciBy
ZXF1aXJlQ2FsbGJhY2sgPSBmdW5jdGlvbiAobW9kdWxlKSB7CisgICAgICAgICAgdGhpcy5tb2R1
bGUgPSBtb2R1bGU7CisgICAgICAgIH0uYmluZCh0aGlzKTsKKworICAgICAgICByZXF1aXJlKFtt
b2R1bGVQYXRoXSwgcmVxdWlyZUNhbGxiYWNrKTsKKworICAgICAgICB3YWl0c0ZvcihmdW5jdGlv
biAoKSB7CisgICAgICAgICAgcmV0dXJuIHRoaXMubW9kdWxlICE9PSBudWxsOworICAgICAgICB9
KTsKKyAgICAgIH0pOworCisgICAgICBzcGVjRGVmaW5pdGlvbnMuYXBwbHkodGhpcyk7CisgICAg
fSk7CisgIH07CisKKyAgLyoqCisgICAqIENyZWF0ZSByb290IG5vZGUgYW5kIGluaXRpYWxpemUg
Y29tcG9uZW50LiBGaXh0dXJlIHNob3VsZCBiZSBodG1sIHN0cmluZworICAgKiBvciBqUXVlcnkg
b2JqZWN0LgorICAgKgorICAgKiBAcGFyYW0gZml4dHVyZSB7U3RyaW5nfSAoT3B0aW9uYWwpCisg
ICAqIEBwYXJhbSBvcHRpb25zIHtPcHRpb25zfSAoT3B0aW9uYWwpCisgICAqLworCisgIHJvb3Qu
c2V0dXBDb21wb25lbnQgPSBmdW5jdGlvbiAoZml4dHVyZSwgb3B0aW9ucykgeworICAgIGphc21p
bmUuZ2V0RW52KCkuY3VycmVudFNwZWMuc2V0dXBDb21wb25lbnQoZml4dHVyZSwgb3B0aW9ucyk7
CisgIH07CisKKyAgamFzbWluZS5TcGVjLnByb3RvdHlwZS5zZXR1cENvbXBvbmVudCA9IGZ1bmN0
aW9uIChmaXh0dXJlLCBvcHRpb25zKSB7CisgICAgaWYgKHRoaXMuY29tcG9uZW50KSB7CisgICAg
ICB0aGlzLmNvbXBvbmVudC50ZWFyZG93bigpOworICAgICAgdGhpcy4kbm9kZS5yZW1vdmUoKTsK
KyAgICB9CisKKyAgICB0aGlzLiRub2RlID0gJCgnPGRpdiBjbGFzcz0iY29tcG9uZW50LXJvb3Qi
IC8+Jyk7CisgICAgJCgnYm9keScpLmFwcGVuZCh0aGlzLiRub2RlKTsKKworICAgIGlmIChmaXh0
dXJlIGluc3RhbmNlb2YgalF1ZXJ5IHx8IHR5cGVvZiBmaXh0dXJlID09PSAnc3RyaW5nJykgewor
ICAgICAgdGhpcy4kbm9kZS5hcHBlbmQoZml4dHVyZSk7CisgICAgfSBlbHNlIHsKKyAgICAgIG9w
dGlvbnMgPSBmaXh0dXJlOworICAgICAgZml4dHVyZSA9IG51bGw7CisgICAgfQorCisgICAgb3B0
aW9ucyA9IG9wdGlvbnMgPT09IHVuZGVmaW5lZCA/IHt9IDogb3B0aW9uczsKKworICAgIHRoaXMu
Y29tcG9uZW50ID0gbmV3IHRoaXMuQ29tcG9uZW50KHRoaXMuJG5vZGUsIG9wdGlvbnMpOworICB9
OworCisKKyAgKGZ1bmN0aW9uIChuYW1lc3BhY2UpIHsKKyAgICB2YXIgZXZlbnRzRGF0YSA9IHsK
KyAgICAgIHNwaWVkRXZlbnRzOiB7fSwKKyAgICAgIGhhbmRsZXJzOiAgICBbXQorICAgIH07CisK
KyAgICBuYW1lc3BhY2UuZm9ybWF0RWxlbWVudCA9IGZ1bmN0aW9uICgkZWxlbWVudCkgeworICAg
ICAgdmFyIGxpbWl0ID0gMjAwOworICAgICAgdmFyIG91dHB1dCA9ICcnOworCisgICAgICBpZiAo
JGVsZW1lbnQgaW5zdGFuY2VvZiBqUXVlcnkpIHsKKyAgICAgICAgb3V0cHV0ID0gamFzbWluZS5K
UXVlcnkuZWxlbWVudFRvU3RyaW5nKCRlbGVtZW50KTsKKyAgICAgICAgaWYgKG91dHB1dC5sZW5n
dGggPiBsaW1pdCkgeworICAgICAgICAgIG91dHB1dCA9IG91dHB1dC5zbGljZSgwLCAyMDApICsg
Jy4uLic7CisgICAgICAgIH0KKyAgICAgIH0gZWxzZSB7CisgICAgICAgIC8vJGVsZW1lbnQgc2hv
dWxkIGFsd2F5cyBiZSBhIGpRdWVyeSBvYmplY3QKKyAgICAgICAgb3V0cHV0ID0gJ2VsZW1lbnQg
aXMgbm90IGEgalF1ZXJ5IG9iamVjdCc7CisgICAgICB9CisKKyAgICAgIHJldHVybiBvdXRwdXQ7
CisgICAgfTsKKworICAgIG5hbWVzcGFjZS5jb21wYXJlQ29sb3JzID0gZnVuY3Rpb24gKGNvbG9y
MSwgY29sb3IyKSB7CisgICAgICBpZiAoY29sb3IxLmNoYXJBdCgwKSA9PT0gY29sb3IyLmNoYXJB
dCgwKSkgeworICAgICAgICByZXR1cm4gY29sb3IxID09PSBjb2xvcjI7CisgICAgICB9IGVsc2Ug
eworICAgICAgICByZXR1cm4gbmFtZXNwYWNlLmhleDJyZ2IoY29sb3IxKSA9PT0gbmFtZXNwYWNl
LmhleDJyZ2IoY29sb3IyKTsKKyAgICAgIH0KKyAgICB9OworCisgICAgbmFtZXNwYWNlLmhleDJy
Z2IgPSBmdW5jdGlvbiAoY29sb3JTdHJpbmcpIHsKKyAgICAgIGlmIChjb2xvclN0cmluZy5jaGFy
QXQoMCkgIT09ICcjJykgcmV0dXJuIGNvbG9yU3RyaW5nOworICAgICAgLy8gbm90ZTogaGV4U3Ry
IHNob3VsZCBiZSAjcnJnZ2JiCisgICAgICB2YXIgaGV4ID0gcGFyc2VJbnQoY29sb3JTdHJpbmcu
c3Vic3RyaW5nKDEpLCAxNik7CisgICAgICB2YXIgciA9IChoZXggJiAweGZmMDAwMCkgPj4gMTY7
CisgICAgICB2YXIgZyA9IChoZXggJiAweDAwZmYwMCkgPj4gODsKKyAgICAgIHZhciBiID0gaGV4
ICYgMHgwMDAwZmY7CisgICAgICByZXR1cm4gJ3JnYignICsgciArICcsICcgKyBnICsgJywgJyAr
IGIgKyAnKSc7CisgICAgfTsKKworICAgIG5hbWVzcGFjZS5ldmVudHMgPSB7CisgICAgICBzcHlP
bjogZnVuY3Rpb24gKHNlbGVjdG9yLCBldmVudE5hbWUpIHsKKyAgICAgICAgZXZlbnRzRGF0YS5z
cGllZEV2ZW50c1tbc2VsZWN0b3IsIGV2ZW50TmFtZV1dID0geworICAgICAgICAgIGNhbGxDb3Vu
dDogMCwKKyAgICAgICAgICBjYWxsczogW10sCisgICAgICAgICAgbW9zdFJlY2VudENhbGw6IHt9
LAorICAgICAgICAgIG5hbWU6IGV2ZW50TmFtZQorICAgICAgICB9OworCisgICAgICAgIHZhciBo
YW5kbGVyID0gZnVuY3Rpb24gKGUsIGRhdGEpIHsKKyAgICAgICAgICB2YXIgY2FsbCA9IHsKKyAg
ICAgICAgICAgIGV2ZW50OiBlLAorICAgICAgICAgICAgYXJnczogamFzbWluZS51dGlsLmFyZ3NU
b0FycmF5KGFyZ3VtZW50cyksCisgICAgICAgICAgICBkYXRhOiBkYXRhCisgICAgICAgICAgfTsK
KyAgICAgICAgICBldmVudHNEYXRhLnNwaWVkRXZlbnRzW1tzZWxlY3RvciwgZXZlbnROYW1lXV0u
Y2FsbENvdW50Kys7CisgICAgICAgICAgZXZlbnRzRGF0YS5zcGllZEV2ZW50c1tbc2VsZWN0b3Is
IGV2ZW50TmFtZV1dLmNhbGxzLnB1c2goY2FsbCk7CisgICAgICAgICAgZXZlbnRzRGF0YS5zcGll
ZEV2ZW50c1tbc2VsZWN0b3IsIGV2ZW50TmFtZV1dLm1vc3RSZWNlbnRDYWxsID0gY2FsbDsKKyAg
ICAgICAgfTsKKworICAgICAgICBqUXVlcnkoc2VsZWN0b3IpLm9uKGV2ZW50TmFtZSwgaGFuZGxl
cik7CisgICAgICAgIGV2ZW50c0RhdGEuaGFuZGxlcnMucHVzaChoYW5kbGVyKTsKKyAgICAgICAg
cmV0dXJuIGV2ZW50c0RhdGEuc3BpZWRFdmVudHNbW3NlbGVjdG9yLCBldmVudE5hbWVdXTsKKyAg
ICAgIH0sCisKKyAgICAgIGV2ZW50QXJnczogZnVuY3Rpb24gKHNlbGVjdG9yLCBldmVudE5hbWUs
IGV4cGVjdGVkQXJnKSB7CisgICAgICAgIHZhciBhY3R1YWxBcmdzID0gZXZlbnRzRGF0YS5zcGll
ZEV2ZW50c1tbc2VsZWN0b3IsIGV2ZW50TmFtZV1dLm1vc3RSZWNlbnRDYWxsLmFyZ3M7CisKKyAg
ICAgICAgaWYgKCFhY3R1YWxBcmdzKSB7CisgICAgICAgICAgdGhyb3cgJ05vIGV2ZW50IHNweSBm
b3VuZCBvbiAnICsgZXZlbnROYW1lICsgJy4gVHJ5IGFkZGluZyBhIGNhbGwgdG8gc3B5T25FdmVu
dCBvciBtYWtlIHN1cmUgdGhhdCB0aGUgc2VsZWN0b3IgdGhlIGV2ZW50IGlzIHRyaWdnZXJlZCBv
biBhbmQgdGhlIHNlbGVjdG9yIGJlaW5nIHNwaWVkIG9uIGFyZSBjb3JyZWN0Lic7CisgICAgICAg
IH0KKworICAgICAgICAvLyByZW1vdmUgZXh0cmEgZXZlbnQgbWV0YWRhdGEgaWYgaXQgaXMgbm90
IHRlc3RlZCBmb3IKKyAgICAgICAgaWYgKChhY3R1YWxBcmdzLmxlbmd0aCA9PT0gMikgJiYgdHlw
ZW9mIGFjdHVhbEFyZ3NbMV0gPT09ICdvYmplY3QnICYmCisgICAgICAgICAgZXhwZWN0ZWRBcmcg
JiYgIWV4cGVjdGVkQXJnLnNjcmliZUNvbnRleHQgJiYgIWV4cGVjdGVkQXJnLnNvdXJjZUV2ZW50
RGF0YSAmJiAhZXhwZWN0ZWRBcmcuc2NyaWJlRGF0YSkgeworICAgICAgICAgIGFjdHVhbEFyZ3Nb
MV0gPSAkLmV4dGVuZCh7fSwgYWN0dWFsQXJnc1sxXSk7CisgICAgICAgICAgZGVsZXRlIGFjdHVh
bEFyZ3NbMV0uc291cmNlRXZlbnREYXRhOworICAgICAgICAgIGRlbGV0ZSBhY3R1YWxBcmdzWzFd
LnNjcmliZUNvbnRleHQ7CisgICAgICAgICAgZGVsZXRlIGFjdHVhbEFyZ3NbMV0uc2NyaWJlRGF0
YTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBhY3R1YWxBcmdzOworICAgICAgfSwKKwor
ICAgICAgd2FzVHJpZ2dlcmVkOiBmdW5jdGlvbiAoc2VsZWN0b3IsIGV2ZW50KSB7CisgICAgICAg
IHZhciBzcGllZEV2ZW50ID0gZXZlbnRzRGF0YS5zcGllZEV2ZW50c1tbc2VsZWN0b3IsIGV2ZW50
XV07CisgICAgICAgIHJldHVybiBzcGllZEV2ZW50ICYmIHNwaWVkRXZlbnQuY2FsbENvdW50ID4g
MDsKKyAgICAgIH0sCisKKyAgICAgIHdhc1RyaWdnZXJlZFdpdGg6IGZ1bmN0aW9uIChzZWxlY3Rv
ciwgZXZlbnROYW1lLCBleHBlY3RlZEFyZywgZW52KSB7CisgICAgICAgIHZhciBhY3R1YWxBcmdz
ID0gamFzbWluZS5mbGlnaHQuZXZlbnRzLmV2ZW50QXJncyhzZWxlY3RvciwgZXZlbnROYW1lLCBl
eHBlY3RlZEFyZyk7CisgICAgICAgIHJldHVybiBhY3R1YWxBcmdzICYmIGVudi5jb250YWluc18o
YWN0dWFsQXJncywgZXhwZWN0ZWRBcmcpOworICAgICAgfSwKKworICAgICAgd2FzVHJpZ2dlcmVk
V2l0aERhdGE6IGZ1bmN0aW9uIChzZWxlY3RvciwgZXZlbnROYW1lLCBleHBlY3RlZEFyZywgZW52
KSB7CisgICAgICAgIHZhciBhY3R1YWxBcmdzID0gamFzbWluZS5mbGlnaHQuZXZlbnRzLmV2ZW50
QXJncyhzZWxlY3RvciwgZXZlbnROYW1lLCBleHBlY3RlZEFyZyk7CisgICAgICAgIHZhciB2YWxp
ZDsKKworICAgICAgICBpZiAoYWN0dWFsQXJncykgeworICAgICAgICAgIHZhbGlkID0gZmFsc2U7
CisgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhY3R1YWxBcmdzLmxlbmd0aDsgaSsrKSB7
CisgICAgICAgICAgICBpZiAoamFzbWluZS5mbGlnaHQudmFsaWRhdGVIYXNoKGV4cGVjdGVkQXJn
LCBhY3R1YWxBcmdzW2ldKSkgeworICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICB9CisgICAgICAgICAgcmV0dXJuIHZhbGlkOworICAgICAgICB9CisK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgfSwKKworICAgICAgY2xlYW5VcDogZnVuY3Rp
b24gKCkgeworICAgICAgICBldmVudHNEYXRhLnNwaWVkRXZlbnRzID0ge307CisgICAgICAgIGV2
ZW50c0RhdGEuaGFuZGxlcnMgICAgPSBbXTsKKyAgICAgIH0KKyAgICB9OworCisgICAgbmFtZXNw
YWNlLnZhbGlkYXRlSGFzaCA9IGZ1bmN0aW9uIChhLCBiLCBpbnRlcnNlY3Rpb24pIHsKKyAgICAg
IHZhciB2YWxpZEhhc2g7CisgICAgICBmb3IgKHZhciBmaWVsZCBpbiBhKSB7CisgICAgICAgIGlm
ICgodHlwZW9mIGFbZmllbGRdID09PSAnb2JqZWN0JykgJiYgKHR5cGVvZiBiW2ZpZWxkXSA9PT0g
J29iamVjdCcpKSB7CisgICAgICAgICAgdmFsaWRIYXNoID0gamFzbWluZS5mbGlnaHQudmFsaWRh
dGVIYXNoKGFbZmllbGRdLCBiW2ZpZWxkXSk7CisgICAgICAgIH0gZWxzZSBpZiAoaW50ZXJzZWN0
aW9uICYmICh0eXBlb2YgYVtmaWVsZF0gPT09ICd1bmRlZmluZWQnIHx8IHR5cGVvZiBiW2ZpZWxk
XSA9PT0gJ3VuZGVmaW5lZCcpKSB7CisgICAgICAgICAgdmFsaWRIYXNoID0gdHJ1ZTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICB2YWxpZEhhc2ggPSAoYVtmaWVsZF0gPT09IGJbZmllbGRd
KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXZhbGlkSGFzaCkgeworICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICB9CisgICAgICByZXR1cm4gdmFsaWRIYXNoOworICAgIH07Cisg
IH0pKGphc21pbmUuZmxpZ2h0KTsKKworICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHsKKyAgICB0
aGlzLmFkZE1hdGNoZXJzKHsKKyAgICAgIHRvSGF2ZUJlZW5UcmlnZ2VyZWRPbjogZnVuY3Rpb24g
KCkgeworICAgICAgICB2YXIgc2VsZWN0b3IgPSBhcmd1bWVudHNbMF07CisgICAgICAgIHZhciBl
dmVudE5hbWUgPSB0eXBlb2YgdGhpcy5hY3R1YWwgPT09ICdzdHJpbmcnID8gdGhpcy5hY3R1YWwg
OiB0aGlzLmFjdHVhbC5uYW1lOworICAgICAgICB2YXIgd2FzVHJpZ2dlcmVkID0gamFzbWluZS5m
bGlnaHQuZXZlbnRzLndhc1RyaWdnZXJlZChzZWxlY3RvciwgZXZlbnROYW1lKTsKKworICAgICAg
ICB0aGlzLm1lc3NhZ2UgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgdmFyICRwcCA9IGZ1bmN0
aW9uIChvYmopIHsKKyAgICAgICAgICAgIHZhciBkZXNjcmlwdGlvbjsKKyAgICAgICAgICAgIHZh
ciBhdHRyOworCisgICAgICAgICAgICBpZiAoIShvYmogaW5zdGFuY2VvZiBqUXVlcnkpKSB7Cisg
ICAgICAgICAgICAgIG9iaiA9ICQob2JqKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ZGVzY3JpcHRpb24gPSBbCisgICAgICAgICAgICAgIG9iai5nZXQoMCkubm9kZU5hbWUKKyAgICAg
ICAgICAgIF07CisKKyAgICAgICAgICAgIGF0dHIgPSBvYmouZ2V0KDApLmF0dHJpYnV0ZXMgfHwg
W107CisKKyAgICAgICAgICAgIGZvciAodmFyIHggPSAwOyB4IDwgYXR0ci5sZW5ndGg7IHgrKykg
eworICAgICAgICAgICAgICBkZXNjcmlwdGlvbi5wdXNoKGF0dHJbeF0ubmFtZSArICc9IicgKyBh
dHRyW3hdLnZhbHVlICsgJyInKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJu
ICc8JyArIGRlc2NyaXB0aW9uLmpvaW4oJyAnKSArICc+JzsKKyAgICAgICAgICB9OworCisgICAg
ICAgICAgaWYgKHdhc1RyaWdnZXJlZCkgeworICAgICAgICAgICAgcmV0dXJuIFsKKyAgICAgICAg
ICAgICAgJzxkaXYgY2xhc3M9InZhbHVlLW1pc21hdGNoIj5FeHBlY3RlZCBldmVudCAnICsgZXZl
bnROYW1lICsgJyB0byBoYXZlIGJlZW4gdHJpZ2dlcmVkIG9uJyArIHNlbGVjdG9yLAorICAgICAg
ICAgICAgICAnPGRpdiBjbGFzcz0idmFsdWUtbWlzbWF0Y2giPkV4cGVjdGVkIGV2ZW50ICcgKyBl
dmVudE5hbWUgKyAnIG5vdCB0byBoYXZlIGJlZW4gdHJpZ2dlcmVkIG9uJyArIHNlbGVjdG9yCisg
ICAgICAgICAgICBdOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gWwor
ICAgICAgICAgICAgICAnRXhwZWN0ZWQgZXZlbnQgJyArIGV2ZW50TmFtZSArICcgdG8gaGF2ZSBi
ZWVuIHRyaWdnZXJlZCBvbiAnICsgJHBwKHNlbGVjdG9yKSwKKyAgICAgICAgICAgICAgJ0V4cGVj
dGVkIGV2ZW50ICcgKyBldmVudE5hbWUgKyAnIG5vdCB0byBoYXZlIGJlZW4gdHJpZ2dlcmVkIG9u
ICcgKyAkcHAoc2VsZWN0b3IpCisgICAgICAgICAgICBdOworICAgICAgICAgIH0KKyAgICAgICAg
fTsKKworICAgICAgICByZXR1cm4gd2FzVHJpZ2dlcmVkOworICAgICAgfSwKKworICAgICAgdG9I
YXZlQmVlblRyaWdnZXJlZE9uQW5kV2l0aDogZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgc2Vs
ZWN0b3IgPSBhcmd1bWVudHNbMF07CisgICAgICAgIHZhciBleHBlY3RlZEFyZyA9IGFyZ3VtZW50
c1sxXTsKKyAgICAgICAgdmFyIGV4YWN0TWF0Y2ggPSAhYXJndW1lbnRzWzJdOworICAgICAgICB2
YXIgd2FzVHJpZ2dlcmVkID0gamFzbWluZS5mbGlnaHQuZXZlbnRzLndhc1RyaWdnZXJlZChzZWxl
Y3RvciwgdGhpcy5hY3R1YWwpOworCisgICAgICAgIHRoaXMubWVzc2FnZSA9IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgICB2YXIgJHBwID0gZnVuY3Rpb24gKG9iaikgeworICAgICAgICAgICAgdmFy
IGRlc2NyaXB0aW9uOworICAgICAgICAgICAgdmFyIGF0dHI7CisKKyAgICAgICAgICAgIGlmICgh
KG9iaiBpbnN0YW5jZW9mIGpRdWVyeSkpIHsKKyAgICAgICAgICAgICAgb2JqID0gJChvYmopOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBkZXNjcmlwdGlvbiA9IFsKKyAgICAgICAgICAg
ICAgb2JqLmdldCgwKS5ub2RlTmFtZQorICAgICAgICAgICAgXTsKKworICAgICAgICAgICAgYXR0
ciA9IG9iai5nZXQoMCkuYXR0cmlidXRlcyB8fCBbXTsKKworICAgICAgICAgICAgZm9yICh2YXIg
eCA9IDA7IHggPCBhdHRyLmxlbmd0aDsgeCsrKSB7CisgICAgICAgICAgICAgIGRlc2NyaXB0aW9u
LnB1c2goYXR0clt4XS5uYW1lICsgJz0iJyArIGF0dHJbeF0udmFsdWUgKyAnIicpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gJzwnICsgZGVzY3JpcHRpb24uam9pbignICcp
ICsgJz4nOworICAgICAgICAgIH07CisKKyAgICAgICAgICBpZiAod2FzVHJpZ2dlcmVkKSB7Cisg
ICAgICAgICAgICB2YXIgYWN0dWFsQXJnID0gamFzbWluZS5mbGlnaHQuZXZlbnRzLmV2ZW50QXJn
cyhzZWxlY3RvciwgdGhpcy5hY3R1YWwsIGV4cGVjdGVkQXJnKVsxXTsKKyAgICAgICAgICAgIHJl
dHVybiBbCisgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJ2YWx1ZS1taXNtYXRjaCI+RXhwZWN0
ZWQgZXZlbnQgJyArIHRoaXMuYWN0dWFsLm5hbWUgKyAnIHRvIGhhdmUgYmVlbiB0cmlnZ2VyZWQg
b24nICsgc2VsZWN0b3IsCisgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJ2YWx1ZS1taXNtYXRj
aCI+RXhwZWN0ZWQgZXZlbnQgJyArIHRoaXMuYWN0dWFsLm5hbWUgKyAnIG5vdCB0byBoYXZlIGJl
ZW4gdHJpZ2dlcmVkIG9uJyArIHNlbGVjdG9yCisgICAgICAgICAgICBdOworICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gWworICAgICAgICAgICAgICAnRXhwZWN0ZWQgZXZl
bnQgJyArIHRoaXMuYWN0dWFsLm5hbWUgKyAnIHRvIGhhdmUgYmVlbiB0cmlnZ2VyZWQgb24gJyAr
ICRwcChzZWxlY3RvciksCisgICAgICAgICAgICAgICdFeHBlY3RlZCBldmVudCAnICsgdGhpcy5h
Y3R1YWwubmFtZSArICcgbm90IHRvIGhhdmUgYmVlbiB0cmlnZ2VyZWQgb24gJyArICRwcChzZWxl
Y3RvcikKKyAgICAgICAgICAgIF07CisgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAg
IGlmICghd2FzVHJpZ2dlcmVkKSB7CisgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKGV4YWN0TWF0Y2gpIHsKKyAgICAgICAgICByZXR1cm4gamFzbWluZS5m
bGlnaHQuZXZlbnRzLndhc1RyaWdnZXJlZFdpdGgoc2VsZWN0b3IsIHRoaXMuYWN0dWFsLCBleHBl
Y3RlZEFyZywgdGhpcy5lbnYpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHJldHVybiBq
YXNtaW5lLmZsaWdodC5ldmVudHMud2FzVHJpZ2dlcmVkV2l0aERhdGEoc2VsZWN0b3IsIHRoaXMu
YWN0dWFsLCBleHBlY3RlZEFyZywgdGhpcy5lbnYpOworICAgICAgICB9CisgICAgICB9LAorCisg
ICAgICB0b0hhdmVDc3M6IGZ1bmN0aW9uIChwcm9wLCB2YWwpIHsKKyAgICAgICAgdmFyIHJlc3Vs
dDsKKyAgICAgICAgaWYgKHZhbCBpbnN0YW5jZW9mIFJlZ0V4cCkgeworICAgICAgICAgIHJlc3Vs
dCA9IHZhbC50ZXN0KHRoaXMuYWN0dWFsLmNzcyhwcm9wKSk7CisgICAgICAgIH0gZWxzZSBpZiAo
cHJvcC5tYXRjaCgvY29sb3IvKSkgeworICAgICAgICAgIC8vSUUgcmV0dXJucyBjb2xvcnMgYXMg
aGV4IHN0cmluZ3M7IG90aGVyIGJyb3dzZXJzIHJldHVybiByZ2IociwgZywgYikgc3RyaW5ncwor
ICAgICAgICAgIHJlc3VsdCA9IGphc21pbmUuZmxpZ2h0LmNvbXBhcmVDb2xvcnModGhpcy5hY3R1
YWwuY3NzKHByb3ApLCB2YWwpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHJlc3VsdCA9
IHRoaXMuYWN0dWFsLmNzcyhwcm9wKSA9PT0gdmFsOworICAgICAgICAgIC8vc29tZXRpbWVzIC5j
c3MoKSByZXR1cm5zIHN0cmluZ3Mgd2hlbiBpdCBzaG91bGQgcmV0dXJuIG51bWJlcnMKKyAgICAg
ICAgICBpZiAoIXJlc3VsdCAmJiB0eXBlb2YgdmFsID09PSAnbnVtYmVyJykgeworICAgICAgICAg
ICAgcmVzdWx0ID0gcGFyc2VGbG9hdCh0aGlzLmFjdHVhbC5jc3MocHJvcCksIDEwKSA9PT0gdmFs
OworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHRoaXMuYWN0dWFsID0gamFzbWlu
ZS5mbGlnaHQuZm9ybWF0RWxlbWVudCh0aGlzLmFjdHVhbCk7CisgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgICB9CisgICAgfSk7CisgIH0pOworCisgIHJvb3Quc3B5T25FdmVudCA9IGZ1bmN0
aW9uIChzZWxlY3RvciwgZXZlbnROYW1lKSB7CisgICAgamFzbWluZS5KUXVlcnkuZXZlbnRzLnNw
eU9uKHNlbGVjdG9yLCBldmVudE5hbWUpOworICAgIHJldHVybiBqYXNtaW5lLmZsaWdodC5ldmVu
dHMuc3B5T24oc2VsZWN0b3IsIGV2ZW50TmFtZSk7CisgIH07CisKK30odGhpcykpOwpJbmRleDog
UGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21w
b25lbnRzL2phc21pbmUtanF1ZXJ5L2xpYi9qYXNtaW5lLWpxdWVyeS5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2Nv
bXBvbmVudHMvamFzbWluZS1qcXVlcnkvbGliL2phc21pbmUtanF1ZXJ5LmpzCShyZXZpc2lvbiAw
KQorKysgUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFw
cC9jb21wb25lbnRzL2phc21pbmUtanF1ZXJ5L2xpYi9qYXNtaW5lLWpxdWVyeS5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDY1OSBAQAorLyohCisgSmFzbWluZS1qUXVlcnk6IGEgc2V0IG9m
IGpRdWVyeSBoZWxwZXJzIGZvciBKYXNtaW5lIHRlc3RzLgorCisgVmVyc2lvbiAxLjUuMgorCisg
aHR0cHM6Ly9naXRodWIuY29tL3ZlbGVzaW4vamFzbWluZS1qcXVlcnkKKworIENvcHlyaWdodCAo
YykgMjAxMC0yMDEzIFdvamNpZWNoIFphd2lzdG93c2tpLCBUcmF2aXMgSmVmZmVyeQorCisgUGVy
bWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24g
b2J0YWluaW5nCisgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1l
bnRhdGlvbiBmaWxlcyAodGhlCisgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJl
IHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUg
cmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyBkaXN0cmlidXRl
LCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8K
KyBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8g
c28sIHN1YmplY3QgdG8KKyB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKyBUaGUgYWJvdmUg
Y29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorIGlu
Y2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3
YXJlLgorCisgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFO
VFkgT0YgQU5ZIEtJTkQsCisgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBM
SU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCisgTElBQkxFIEZPUiBB
TlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElP
TgorIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0Yg
T1IgSU4gQ09OTkVDVElPTgorIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIg
REVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorKi8KK3ZhciByZWFkRml4dHVyZXMgPSBmdW5jdGlv
bigpIHsKKyAgcmV0dXJuIGphc21pbmUuZ2V0Rml4dHVyZXMoKS5wcm94eUNhbGxUb18oJ3JlYWQn
LCBhcmd1bWVudHMpCit9CisKK3ZhciBwcmVsb2FkRml4dHVyZXMgPSBmdW5jdGlvbigpIHsKKyAg
amFzbWluZS5nZXRGaXh0dXJlcygpLnByb3h5Q2FsbFRvXygncHJlbG9hZCcsIGFyZ3VtZW50cykK
K30KKwordmFyIGxvYWRGaXh0dXJlcyA9IGZ1bmN0aW9uKCkgeworICBqYXNtaW5lLmdldEZpeHR1
cmVzKCkucHJveHlDYWxsVG9fKCdsb2FkJywgYXJndW1lbnRzKQorfQorCit2YXIgYXBwZW5kTG9h
ZEZpeHR1cmVzID0gZnVuY3Rpb24oKSB7CisgIGphc21pbmUuZ2V0Rml4dHVyZXMoKS5wcm94eUNh
bGxUb18oJ2FwcGVuZExvYWQnLCBhcmd1bWVudHMpCit9CisKK3ZhciBzZXRGaXh0dXJlcyA9IGZ1
bmN0aW9uKGh0bWwpIHsKKyAgamFzbWluZS5nZXRGaXh0dXJlcygpLnByb3h5Q2FsbFRvXygnc2V0
JywgYXJndW1lbnRzKQorfQorCit2YXIgYXBwZW5kU2V0Rml4dHVyZXMgPSBmdW5jdGlvbigpIHsK
KyAgamFzbWluZS5nZXRGaXh0dXJlcygpLnByb3h5Q2FsbFRvXygnYXBwZW5kU2V0JywgYXJndW1l
bnRzKQorfQorCit2YXIgc2FuZGJveCA9IGZ1bmN0aW9uKGF0dHJpYnV0ZXMpIHsKKyAgcmV0dXJu
IGphc21pbmUuZ2V0Rml4dHVyZXMoKS5zYW5kYm94KGF0dHJpYnV0ZXMpCit9CisKK3ZhciBzcHlP
bkV2ZW50ID0gZnVuY3Rpb24oc2VsZWN0b3IsIGV2ZW50TmFtZSkgeworICByZXR1cm4gamFzbWlu
ZS5KUXVlcnkuZXZlbnRzLnNweU9uKHNlbGVjdG9yLCBldmVudE5hbWUpCit9CisKK3ZhciBwcmVs
b2FkU3R5bGVGaXh0dXJlcyA9IGZ1bmN0aW9uKCkgeworICBqYXNtaW5lLmdldFN0eWxlRml4dHVy
ZXMoKS5wcm94eUNhbGxUb18oJ3ByZWxvYWQnLCBhcmd1bWVudHMpCit9CisKK3ZhciBsb2FkU3R5
bGVGaXh0dXJlcyA9IGZ1bmN0aW9uKCkgeworICBqYXNtaW5lLmdldFN0eWxlRml4dHVyZXMoKS5w
cm94eUNhbGxUb18oJ2xvYWQnLCBhcmd1bWVudHMpCit9CisKK3ZhciBhcHBlbmRMb2FkU3R5bGVG
aXh0dXJlcyA9IGZ1bmN0aW9uKCkgeworICBqYXNtaW5lLmdldFN0eWxlRml4dHVyZXMoKS5wcm94
eUNhbGxUb18oJ2FwcGVuZExvYWQnLCBhcmd1bWVudHMpCit9CisKK3ZhciBzZXRTdHlsZUZpeHR1
cmVzID0gZnVuY3Rpb24oaHRtbCkgeworICBqYXNtaW5lLmdldFN0eWxlRml4dHVyZXMoKS5wcm94
eUNhbGxUb18oJ3NldCcsIGFyZ3VtZW50cykKK30KKwordmFyIGFwcGVuZFNldFN0eWxlRml4dHVy
ZXMgPSBmdW5jdGlvbihodG1sKSB7CisgIGphc21pbmUuZ2V0U3R5bGVGaXh0dXJlcygpLnByb3h5
Q2FsbFRvXygnYXBwZW5kU2V0JywgYXJndW1lbnRzKQorfQorCit2YXIgbG9hZEpTT05GaXh0dXJl
cyA9IGZ1bmN0aW9uKCkgeworICByZXR1cm4gamFzbWluZS5nZXRKU09ORml4dHVyZXMoKS5wcm94
eUNhbGxUb18oJ2xvYWQnLCBhcmd1bWVudHMpCit9CisKK3ZhciBnZXRKU09ORml4dHVyZSA9IGZ1
bmN0aW9uKHVybCkgeworICByZXR1cm4gamFzbWluZS5nZXRKU09ORml4dHVyZXMoKS5wcm94eUNh
bGxUb18oJ3JlYWQnLCBhcmd1bWVudHMpW3VybF0KK30KKworamFzbWluZS5zcGllZEV2ZW50c0tl
eSA9IGZ1bmN0aW9uIChzZWxlY3RvciwgZXZlbnROYW1lKSB7CisgIHJldHVybiBbJChzZWxlY3Rv
cikuc2VsZWN0b3IsIGV2ZW50TmFtZV0udG9TdHJpbmcoKQorfQorCitqYXNtaW5lLmdldEZpeHR1
cmVzID0gZnVuY3Rpb24oKSB7CisgIHJldHVybiBqYXNtaW5lLmN1cnJlbnRGaXh0dXJlc18gPSBq
YXNtaW5lLmN1cnJlbnRGaXh0dXJlc18gfHwgbmV3IGphc21pbmUuRml4dHVyZXMoKQorfQorCitq
YXNtaW5lLmdldFN0eWxlRml4dHVyZXMgPSBmdW5jdGlvbigpIHsKKyAgcmV0dXJuIGphc21pbmUu
Y3VycmVudFN0eWxlRml4dHVyZXNfID0gamFzbWluZS5jdXJyZW50U3R5bGVGaXh0dXJlc18gfHwg
bmV3IGphc21pbmUuU3R5bGVGaXh0dXJlcygpCit9CisKK2phc21pbmUuRml4dHVyZXMgPSBmdW5j
dGlvbigpIHsKKyAgdGhpcy5jb250YWluZXJJZCA9ICdqYXNtaW5lLWZpeHR1cmVzJworICB0aGlz
LmZpeHR1cmVzQ2FjaGVfID0ge30KKyAgdGhpcy5maXh0dXJlc1BhdGggPSAnc3BlYy9qYXZhc2Ny
aXB0cy9maXh0dXJlcycKK30KKworamFzbWluZS5GaXh0dXJlcy5wcm90b3R5cGUuc2V0ID0gZnVu
Y3Rpb24oaHRtbCkgeworICB0aGlzLmNsZWFuVXAoKQorICB0aGlzLmNyZWF0ZUNvbnRhaW5lcl8o
aHRtbCkKK30KKworamFzbWluZS5GaXh0dXJlcy5wcm90b3R5cGUuYXBwZW5kU2V0PSBmdW5jdGlv
bihodG1sKSB7CisgIHRoaXMuYWRkVG9Db250YWluZXJfKGh0bWwpCit9CisKK2phc21pbmUuRml4
dHVyZXMucHJvdG90eXBlLnByZWxvYWQgPSBmdW5jdGlvbigpIHsKKyAgdGhpcy5yZWFkLmFwcGx5
KHRoaXMsIGFyZ3VtZW50cykKK30KKworamFzbWluZS5GaXh0dXJlcy5wcm90b3R5cGUubG9hZCA9
IGZ1bmN0aW9uKCkgeworICB0aGlzLmNsZWFuVXAoKQorICB0aGlzLmNyZWF0ZUNvbnRhaW5lcl8o
dGhpcy5yZWFkLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpCit9CisKK2phc21pbmUuRml4dHVyZXMu
cHJvdG90eXBlLmFwcGVuZExvYWQgPSBmdW5jdGlvbigpIHsKKyAgdGhpcy5hZGRUb0NvbnRhaW5l
cl8odGhpcy5yZWFkLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpCit9CisKK2phc21pbmUuRml4dHVy
ZXMucHJvdG90eXBlLnJlYWQgPSBmdW5jdGlvbigpIHsKKyAgdmFyIGh0bWxDaHVua3MgPSBbXQor
CisgIHZhciBmaXh0dXJlVXJscyA9IGFyZ3VtZW50cworICBmb3IodmFyIHVybENvdW50ID0gZml4
dHVyZVVybHMubGVuZ3RoLCB1cmxJbmRleCA9IDA7IHVybEluZGV4IDwgdXJsQ291bnQ7IHVybElu
ZGV4KyspIHsKKyAgICBodG1sQ2h1bmtzLnB1c2godGhpcy5nZXRGaXh0dXJlSHRtbF8oZml4dHVy
ZVVybHNbdXJsSW5kZXhdKSkKKyAgfQorCisgIHJldHVybiBodG1sQ2h1bmtzLmpvaW4oJycpCit9
CisKK2phc21pbmUuRml4dHVyZXMucHJvdG90eXBlLmNsZWFyQ2FjaGUgPSBmdW5jdGlvbigpIHsK
KyAgdGhpcy5maXh0dXJlc0NhY2hlXyA9IHt9Cit9CisKK2phc21pbmUuRml4dHVyZXMucHJvdG90
eXBlLmNsZWFuVXAgPSBmdW5jdGlvbigpIHsKKyAgJCgnIycgKyB0aGlzLmNvbnRhaW5lcklkKS5y
ZW1vdmUoKQorfQorCitqYXNtaW5lLkZpeHR1cmVzLnByb3RvdHlwZS5zYW5kYm94ID0gZnVuY3Rp
b24oYXR0cmlidXRlcykgeworICB2YXIgYXR0cmlidXRlc1RvU2V0ID0gYXR0cmlidXRlcyB8fCB7
fQorICByZXR1cm4gJCgnPGRpdiBpZD0ic2FuZGJveCIgLz4nKS5hdHRyKGF0dHJpYnV0ZXNUb1Nl
dCkKK30KKworamFzbWluZS5GaXh0dXJlcy5wcm90b3R5cGUuY3JlYXRlQ29udGFpbmVyXyA9IGZ1
bmN0aW9uKGh0bWwpIHsKKyAgdmFyIGNvbnRhaW5lcgorICBpZihodG1sIGluc3RhbmNlb2YgJCkg
eworICAgIGNvbnRhaW5lciA9ICQoJzxkaXYgaWQ9IicgKyB0aGlzLmNvbnRhaW5lcklkICsgJyIg
Lz4nKQorICAgIGNvbnRhaW5lci5odG1sKGh0bWwpCisgIH0gZWxzZSB7CisgICAgY29udGFpbmVy
ID0gJzxkaXYgaWQ9IicgKyB0aGlzLmNvbnRhaW5lcklkICsgJyI+JyArIGh0bWwgKyAnPC9kaXY+
JworICB9CisgICQoZG9jdW1lbnQuYm9keSkuYXBwZW5kKGNvbnRhaW5lcikKK30KKworamFzbWlu
ZS5GaXh0dXJlcy5wcm90b3R5cGUuYWRkVG9Db250YWluZXJfID0gZnVuY3Rpb24oaHRtbCl7Cisg
IHZhciBjb250YWluZXIgPSAkKGRvY3VtZW50LmJvZHkpLmZpbmQoJyMnK3RoaXMuY29udGFpbmVy
SWQpLmFwcGVuZChodG1sKQorICBpZighY29udGFpbmVyLmxlbmd0aCl7CisgICAgdGhpcy5jcmVh
dGVDb250YWluZXJfKGh0bWwpCisgIH0KK30KKworamFzbWluZS5GaXh0dXJlcy5wcm90b3R5cGUu
Z2V0Rml4dHVyZUh0bWxfID0gZnVuY3Rpb24odXJsKSB7CisgIGlmICh0eXBlb2YgdGhpcy5maXh0
dXJlc0NhY2hlX1t1cmxdID09PSAndW5kZWZpbmVkJykgeworICAgIHRoaXMubG9hZEZpeHR1cmVJ
bnRvQ2FjaGVfKHVybCkKKyAgfQorICByZXR1cm4gdGhpcy5maXh0dXJlc0NhY2hlX1t1cmxdCit9
CisKK2phc21pbmUuRml4dHVyZXMucHJvdG90eXBlLmxvYWRGaXh0dXJlSW50b0NhY2hlXyA9IGZ1
bmN0aW9uKHJlbGF0aXZlVXJsKSB7CisgIHZhciB1cmwgPSB0aGlzLm1ha2VGaXh0dXJlVXJsXyhy
ZWxhdGl2ZVVybCkKKyAgdmFyIHJlcXVlc3QgPSAkLmFqYXgoeworICAgIHR5cGU6ICJHRVQiLAor
ICAgIHVybDogdXJsICsgIj8iICsgbmV3IERhdGUoKS5nZXRUaW1lKCksCisgICAgYXN5bmM6IGZh
bHNlCisgIH0pCisgIHRoaXMuZml4dHVyZXNDYWNoZV9bcmVsYXRpdmVVcmxdID0gcmVxdWVzdC5y
ZXNwb25zZVRleHQKK30KKworamFzbWluZS5GaXh0dXJlcy5wcm90b3R5cGUubWFrZUZpeHR1cmVV
cmxfID0gZnVuY3Rpb24ocmVsYXRpdmVVcmwpeworICByZXR1cm4gdGhpcy5maXh0dXJlc1BhdGgu
bWF0Y2goJy8kJykgPyB0aGlzLmZpeHR1cmVzUGF0aCArIHJlbGF0aXZlVXJsIDogdGhpcy5maXh0
dXJlc1BhdGggKyAnLycgKyByZWxhdGl2ZVVybAorfQorCitqYXNtaW5lLkZpeHR1cmVzLnByb3Rv
dHlwZS5wcm94eUNhbGxUb18gPSBmdW5jdGlvbihtZXRob2ROYW1lLCBwYXNzZWRBcmd1bWVudHMp
IHsKKyAgcmV0dXJuIHRoaXNbbWV0aG9kTmFtZV0uYXBwbHkodGhpcywgcGFzc2VkQXJndW1lbnRz
KQorfQorCisKK2phc21pbmUuU3R5bGVGaXh0dXJlcyA9IGZ1bmN0aW9uKCkgeworICB0aGlzLmZp
eHR1cmVzQ2FjaGVfID0ge30KKyAgdGhpcy5maXh0dXJlc05vZGVzXyA9IFtdCisgIHRoaXMuZml4
dHVyZXNQYXRoID0gJ3NwZWMvamF2YXNjcmlwdHMvZml4dHVyZXMnCit9CisKK2phc21pbmUuU3R5
bGVGaXh0dXJlcy5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24oY3NzKSB7CisgIHRoaXMuY2xlYW5V
cCgpCisgIHRoaXMuY3JlYXRlU3R5bGVfKGNzcykKK30KKworamFzbWluZS5TdHlsZUZpeHR1cmVz
LnByb3RvdHlwZS5hcHBlbmRTZXQgPSBmdW5jdGlvbihjc3MpIHsKKyAgdGhpcy5jcmVhdGVTdHls
ZV8oY3NzKQorfQorCitqYXNtaW5lLlN0eWxlRml4dHVyZXMucHJvdG90eXBlLnByZWxvYWQgPSBm
dW5jdGlvbigpIHsKKyAgdGhpcy5yZWFkXy5hcHBseSh0aGlzLCBhcmd1bWVudHMpCit9CisKK2ph
c21pbmUuU3R5bGVGaXh0dXJlcy5wcm90b3R5cGUubG9hZCA9IGZ1bmN0aW9uKCkgeworICB0aGlz
LmNsZWFuVXAoKQorICB0aGlzLmNyZWF0ZVN0eWxlXyh0aGlzLnJlYWRfLmFwcGx5KHRoaXMsIGFy
Z3VtZW50cykpCit9CisKK2phc21pbmUuU3R5bGVGaXh0dXJlcy5wcm90b3R5cGUuYXBwZW5kTG9h
ZCA9IGZ1bmN0aW9uKCkgeworICB0aGlzLmNyZWF0ZVN0eWxlXyh0aGlzLnJlYWRfLmFwcGx5KHRo
aXMsIGFyZ3VtZW50cykpCit9CisKK2phc21pbmUuU3R5bGVGaXh0dXJlcy5wcm90b3R5cGUuY2xl
YW5VcCA9IGZ1bmN0aW9uKCkgeworICB3aGlsZSh0aGlzLmZpeHR1cmVzTm9kZXNfLmxlbmd0aCkg
eworICAgIHRoaXMuZml4dHVyZXNOb2Rlc18ucG9wKCkucmVtb3ZlKCkKKyAgfQorfQorCitqYXNt
aW5lLlN0eWxlRml4dHVyZXMucHJvdG90eXBlLmNyZWF0ZVN0eWxlXyA9IGZ1bmN0aW9uKGh0bWwp
IHsKKyAgdmFyIHN0eWxlVGV4dCA9ICQoJzxkaXY+PC9kaXY+JykuaHRtbChodG1sKS50ZXh0KCks
CisgICAgc3R5bGUgPSAkKCc8c3R5bGU+JyArIHN0eWxlVGV4dCArICc8L3N0eWxlPicpCisKKyAg
dGhpcy5maXh0dXJlc05vZGVzXy5wdXNoKHN0eWxlKQorCisgICQoJ2hlYWQnKS5hcHBlbmQoc3R5
bGUpCit9CisKK2phc21pbmUuU3R5bGVGaXh0dXJlcy5wcm90b3R5cGUuY2xlYXJDYWNoZSA9IGph
c21pbmUuRml4dHVyZXMucHJvdG90eXBlLmNsZWFyQ2FjaGUKKworamFzbWluZS5TdHlsZUZpeHR1
cmVzLnByb3RvdHlwZS5yZWFkXyA9IGphc21pbmUuRml4dHVyZXMucHJvdG90eXBlLnJlYWQKKwor
amFzbWluZS5TdHlsZUZpeHR1cmVzLnByb3RvdHlwZS5nZXRGaXh0dXJlSHRtbF8gPSBqYXNtaW5l
LkZpeHR1cmVzLnByb3RvdHlwZS5nZXRGaXh0dXJlSHRtbF8KKworamFzbWluZS5TdHlsZUZpeHR1
cmVzLnByb3RvdHlwZS5sb2FkRml4dHVyZUludG9DYWNoZV8gPSBqYXNtaW5lLkZpeHR1cmVzLnBy
b3RvdHlwZS5sb2FkRml4dHVyZUludG9DYWNoZV8KKworamFzbWluZS5TdHlsZUZpeHR1cmVzLnBy
b3RvdHlwZS5tYWtlRml4dHVyZVVybF8gPSBqYXNtaW5lLkZpeHR1cmVzLnByb3RvdHlwZS5tYWtl
Rml4dHVyZVVybF8KKworamFzbWluZS5TdHlsZUZpeHR1cmVzLnByb3RvdHlwZS5wcm94eUNhbGxU
b18gPSBqYXNtaW5lLkZpeHR1cmVzLnByb3RvdHlwZS5wcm94eUNhbGxUb18KKworamFzbWluZS5n
ZXRKU09ORml4dHVyZXMgPSBmdW5jdGlvbigpIHsKKyAgcmV0dXJuIGphc21pbmUuY3VycmVudEpT
T05GaXh0dXJlc18gPSBqYXNtaW5lLmN1cnJlbnRKU09ORml4dHVyZXNfIHx8IG5ldyBqYXNtaW5l
LkpTT05GaXh0dXJlcygpCit9CisKK2phc21pbmUuSlNPTkZpeHR1cmVzID0gZnVuY3Rpb24oKSB7
CisgIHRoaXMuZml4dHVyZXNDYWNoZV8gPSB7fQorICB0aGlzLmZpeHR1cmVzUGF0aCA9ICdzcGVj
L2phdmFzY3JpcHRzL2ZpeHR1cmVzL2pzb24nCit9CisKK2phc21pbmUuSlNPTkZpeHR1cmVzLnBy
b3RvdHlwZS5sb2FkID0gZnVuY3Rpb24oKSB7CisgIHRoaXMucmVhZC5hcHBseSh0aGlzLCBhcmd1
bWVudHMpCisgIHJldHVybiB0aGlzLmZpeHR1cmVzQ2FjaGVfCit9CisKK2phc21pbmUuSlNPTkZp
eHR1cmVzLnByb3RvdHlwZS5yZWFkID0gZnVuY3Rpb24oKSB7CisgIHZhciBmaXh0dXJlVXJscyA9
IGFyZ3VtZW50cworICBmb3IodmFyIHVybENvdW50ID0gZml4dHVyZVVybHMubGVuZ3RoLCB1cmxJ
bmRleCA9IDA7IHVybEluZGV4IDwgdXJsQ291bnQ7IHVybEluZGV4KyspIHsKKyAgICB0aGlzLmdl
dEZpeHR1cmVEYXRhXyhmaXh0dXJlVXJsc1t1cmxJbmRleF0pCisgIH0KKyAgcmV0dXJuIHRoaXMu
Zml4dHVyZXNDYWNoZV8KK30KKworamFzbWluZS5KU09ORml4dHVyZXMucHJvdG90eXBlLmNsZWFy
Q2FjaGUgPSBmdW5jdGlvbigpIHsKKyAgdGhpcy5maXh0dXJlc0NhY2hlXyA9IHt9Cit9CisKK2ph
c21pbmUuSlNPTkZpeHR1cmVzLnByb3RvdHlwZS5nZXRGaXh0dXJlRGF0YV8gPSBmdW5jdGlvbih1
cmwpIHsKKyAgdGhpcy5sb2FkRml4dHVyZUludG9DYWNoZV8odXJsKQorICByZXR1cm4gdGhpcy5m
aXh0dXJlc0NhY2hlX1t1cmxdCit9CisKK2phc21pbmUuSlNPTkZpeHR1cmVzLnByb3RvdHlwZS5s
b2FkRml4dHVyZUludG9DYWNoZV8gPSBmdW5jdGlvbihyZWxhdGl2ZVVybCkgeworICB2YXIgc2Vs
ZiA9IHRoaXMKKyAgdmFyIHVybCA9IHRoaXMuZml4dHVyZXNQYXRoLm1hdGNoKCcvJCcpID8gdGhp
cy5maXh0dXJlc1BhdGggKyByZWxhdGl2ZVVybCA6IHRoaXMuZml4dHVyZXNQYXRoICsgJy8nICsg
cmVsYXRpdmVVcmwKKyAgJC5hamF4KHsKKyAgICBhc3luYzogZmFsc2UsIC8vIG11c3QgYmUgc3lu
Y2hyb25vdXMgdG8gZ3VhcmFudGVlIHRoYXQgbm8gdGVzdHMgYXJlIHJ1biBiZWZvcmUgZml4dHVy
ZSBpcyBsb2FkZWQKKyAgICBjYWNoZTogZmFsc2UsCisgICAgZGF0YVR5cGU6ICdqc29uJywKKyAg
ICB1cmw6IHVybCwKKyAgICBzdWNjZXNzOiBmdW5jdGlvbihkYXRhKSB7CisgICAgICBzZWxmLmZp
eHR1cmVzQ2FjaGVfW3JlbGF0aXZlVXJsXSA9IGRhdGEKKyAgICB9LAorICAgIGVycm9yOiBmdW5j
dGlvbihqcVhIUiwgc3RhdHVzLCBlcnJvclRocm93bikgeworICAgICAgICB0aHJvdyBFcnJvcign
SlNPTkZpeHR1cmUgY291bGQgbm90IGJlIGxvYWRlZDogJyArIHVybCArICcgKHN0YXR1czogJyAr
IHN0YXR1cyArICcsIG1lc3NhZ2U6ICcgKyBlcnJvclRocm93bi5tZXNzYWdlICsgJyknKQorICAg
IH0KKyAgfSkKK30KKworamFzbWluZS5KU09ORml4dHVyZXMucHJvdG90eXBlLnByb3h5Q2FsbFRv
XyA9IGZ1bmN0aW9uKG1ldGhvZE5hbWUsIHBhc3NlZEFyZ3VtZW50cykgeworICByZXR1cm4gdGhp
c1ttZXRob2ROYW1lXS5hcHBseSh0aGlzLCBwYXNzZWRBcmd1bWVudHMpCit9CisKK2phc21pbmUu
SlF1ZXJ5ID0gZnVuY3Rpb24oKSB7fQorCitqYXNtaW5lLkpRdWVyeS5icm93c2VyVGFnQ2FzZUlu
ZGVwZW5kZW50SHRtbCA9IGZ1bmN0aW9uKGh0bWwpIHsKKyAgcmV0dXJuICQoJzxkaXYvPicpLmFw
cGVuZChodG1sKS5odG1sKCkKK30KKworamFzbWluZS5KUXVlcnkuZWxlbWVudFRvU3RyaW5nID0g
ZnVuY3Rpb24oZWxlbWVudCkgeworICB2YXIgZG9tRWwgPSAkKGVsZW1lbnQpLmdldCgwKQorICBp
ZiAoZG9tRWwgPT0gdW5kZWZpbmVkIHx8IGRvbUVsLmNsb25lTm9kZSkKKyAgICByZXR1cm4gJCgn
PGRpdiAvPicpLmFwcGVuZCgkKGVsZW1lbnQpLmNsb25lKCkpLmh0bWwoKQorICBlbHNlCisgICAg
cmV0dXJuIGVsZW1lbnQudG9TdHJpbmcoKQorfQorCitqYXNtaW5lLkpRdWVyeS5tYXRjaGVyc0Ns
YXNzID0ge30KKworIWZ1bmN0aW9uKG5hbWVzcGFjZSkgeworICB2YXIgZGF0YSA9IHsKKyAgICBz
cGllZEV2ZW50czoge30sCisgICAgaGFuZGxlcnM6ICAgIFtdCisgIH0KKworICBuYW1lc3BhY2Uu
ZXZlbnRzID0geworICAgIHNweU9uOiBmdW5jdGlvbihzZWxlY3RvciwgZXZlbnROYW1lKSB7Cisg
ICAgICB2YXIgaGFuZGxlciA9IGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgZGF0YS5zcGllZEV2ZW50
c1tqYXNtaW5lLnNwaWVkRXZlbnRzS2V5KHNlbGVjdG9yLCBldmVudE5hbWUpXSA9IGphc21pbmUu
dXRpbC5hcmdzVG9BcnJheShhcmd1bWVudHMpCisgICAgICB9CisgICAgICAkKHNlbGVjdG9yKS5v
bihldmVudE5hbWUsIGhhbmRsZXIpCisgICAgICBkYXRhLmhhbmRsZXJzLnB1c2goaGFuZGxlcikK
KyAgICAgIHJldHVybiB7CisgICAgICAgIHNlbGVjdG9yOiBzZWxlY3RvciwKKyAgICAgICAgZXZl
bnROYW1lOiBldmVudE5hbWUsCisgICAgICAgIGhhbmRsZXI6IGhhbmRsZXIsCisgICAgICAgIHJl
c2V0OiBmdW5jdGlvbigpeworICAgICAgICAgIGRlbGV0ZSBkYXRhLnNwaWVkRXZlbnRzW2phc21p
bmUuc3BpZWRFdmVudHNLZXkoc2VsZWN0b3IsIGV2ZW50TmFtZSldCisgICAgICAgIH0KKyAgICAg
IH0KKyAgICB9LAorCisgICAgYXJnczogZnVuY3Rpb24oc2VsZWN0b3IsIGV2ZW50TmFtZSkgewor
ICAgICAgdmFyIGFjdHVhbEFyZ3MgPSBkYXRhLnNwaWVkRXZlbnRzW2phc21pbmUuc3BpZWRFdmVu
dHNLZXkoc2VsZWN0b3IsIGV2ZW50TmFtZSldOworCisgICAgICBpZiAoIWFjdHVhbEFyZ3MpIHsK
KyAgICAgICAgdGhyb3cgIlRoZXJlIGlzIG5vIHNweSBmb3IgIiArIGV2ZW50TmFtZSArICIgb24g
IiArIHNlbGVjdG9yLnRvU3RyaW5nKCkgKyAiLiBNYWtlIHN1cmUgdG8gY3JlYXRlIGEgc3B5IHVz
aW5nIHNweU9uRXZlbnQuIjsKKyAgICAgIH0KKworICAgICAgcmV0dXJuIGFjdHVhbEFyZ3M7Cisg
ICAgfSwKKworICAgIHdhc1RyaWdnZXJlZDogZnVuY3Rpb24oc2VsZWN0b3IsIGV2ZW50TmFtZSkg
eworICAgICAgcmV0dXJuICEhKGRhdGEuc3BpZWRFdmVudHNbamFzbWluZS5zcGllZEV2ZW50c0tl
eShzZWxlY3RvciwgZXZlbnROYW1lKV0pCisgICAgfSwKKworICAgIHdhc1RyaWdnZXJlZFdpdGg6
IGZ1bmN0aW9uKHNlbGVjdG9yLCBldmVudE5hbWUsIGV4cGVjdGVkQXJncywgZW52KSB7CisgICAg
ICB2YXIgYWN0dWFsQXJncyA9IGphc21pbmUuSlF1ZXJ5LmV2ZW50cy5hcmdzKHNlbGVjdG9yLCBl
dmVudE5hbWUpLnNsaWNlKDEpOworICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcu
Y2FsbChleHBlY3RlZEFyZ3MpICE9PSAnW29iamVjdCBBcnJheV0nKSB7CisgICAgICAgIGFjdHVh
bEFyZ3MgPSBhY3R1YWxBcmdzWzBdOworICAgICAgfQorICAgICAgcmV0dXJuIGVudi5lcXVhbHNf
KGV4cGVjdGVkQXJncywgYWN0dWFsQXJncyk7CisgICAgfSwKKworICAgIHdhc1ByZXZlbnRlZDog
ZnVuY3Rpb24oc2VsZWN0b3IsIGV2ZW50TmFtZSkgeworICAgICAgdmFyIGFyZ3MgPSBkYXRhLnNw
aWVkRXZlbnRzW2phc21pbmUuc3BpZWRFdmVudHNLZXkoc2VsZWN0b3IsIGV2ZW50TmFtZSldLAor
ICAgICAgICAgIGUgPSBhcmdzID8gYXJnc1swXSA6IHVuZGVmaW5lZDsKKyAgICAgIHJldHVybiBl
ICYmIGUuaXNEZWZhdWx0UHJldmVudGVkKCkKKyAgICB9LAorCisgICAgd2FzU3RvcHBlZDogZnVu
Y3Rpb24oc2VsZWN0b3IsIGV2ZW50TmFtZSkgeworICAgICAgdmFyIGFyZ3MgPSBkYXRhLnNwaWVk
RXZlbnRzW2phc21pbmUuc3BpZWRFdmVudHNLZXkoc2VsZWN0b3IsIGV2ZW50TmFtZSldLAorICAg
ICAgICAgIGUgPSBhcmdzID8gYXJnc1swXSA6IHVuZGVmaW5lZDsKKyAgICAgIHJldHVybiBlICYm
IGUuaXNQcm9wYWdhdGlvblN0b3BwZWQoKQorICAgIH0sCisKKyAgICBjbGVhblVwOiBmdW5jdGlv
bigpIHsKKyAgICAgIGRhdGEuc3BpZWRFdmVudHMgPSB7fQorICAgICAgZGF0YS5oYW5kbGVycyAg
ICA9IFtdCisgICAgfQorICB9Cit9KGphc21pbmUuSlF1ZXJ5KQorCishZnVuY3Rpb24oKXsKKyAg
dmFyIGpRdWVyeU1hdGNoZXJzID0geworICAgIHRvSGF2ZUNsYXNzOiBmdW5jdGlvbihjbGFzc05h
bWUpIHsKKyAgICAgIHJldHVybiB0aGlzLmFjdHVhbC5oYXNDbGFzcyhjbGFzc05hbWUpCisgICAg
fSwKKworICAgIHRvSGF2ZUNzczogZnVuY3Rpb24oY3NzKXsKKyAgICAgIGZvciAodmFyIHByb3Ag
aW4gY3NzKXsKKyAgICAgICAgaWYgKHRoaXMuYWN0dWFsLmNzcyhwcm9wKSAhPT0gY3NzW3Byb3Bd
KSByZXR1cm4gZmFsc2UKKyAgICAgIH0KKyAgICAgIHJldHVybiB0cnVlCisgICAgfSwKKworICAg
IHRvQmVWaXNpYmxlOiBmdW5jdGlvbigpIHsKKyAgICAgIHJldHVybiB0aGlzLmFjdHVhbC5pcygn
OnZpc2libGUnKQorICAgIH0sCisKKyAgICB0b0JlSGlkZGVuOiBmdW5jdGlvbigpIHsKKyAgICAg
IHJldHVybiB0aGlzLmFjdHVhbC5pcygnOmhpZGRlbicpCisgICAgfSwKKworICAgIHRvQmVTZWxl
Y3RlZDogZnVuY3Rpb24oKSB7CisgICAgICByZXR1cm4gdGhpcy5hY3R1YWwuaXMoJzpzZWxlY3Rl
ZCcpCisgICAgfSwKKworICAgIHRvQmVDaGVja2VkOiBmdW5jdGlvbigpIHsKKyAgICAgIHJldHVy
biB0aGlzLmFjdHVhbC5pcygnOmNoZWNrZWQnKQorICAgIH0sCisKKyAgICB0b0JlRW1wdHk6IGZ1
bmN0aW9uKCkgeworICAgICAgcmV0dXJuIHRoaXMuYWN0dWFsLmlzKCc6ZW1wdHknKQorICAgIH0s
CisKKyAgICB0b0V4aXN0OiBmdW5jdGlvbigpIHsKKyAgICAgIHJldHVybiAkKGRvY3VtZW50KS5m
aW5kKHRoaXMuYWN0dWFsKS5sZW5ndGgKKyAgICB9LAorCisgICAgdG9IYXZlTGVuZ3RoOiBmdW5j
dGlvbihsZW5ndGgpIHsKKyAgICAgIHJldHVybiB0aGlzLmFjdHVhbC5sZW5ndGggPT09IGxlbmd0
aAorICAgIH0sCisKKyAgICB0b0hhdmVBdHRyOiBmdW5jdGlvbihhdHRyaWJ1dGVOYW1lLCBleHBl
Y3RlZEF0dHJpYnV0ZVZhbHVlKSB7CisgICAgICByZXR1cm4gaGFzUHJvcGVydHkodGhpcy5hY3R1
YWwuYXR0cihhdHRyaWJ1dGVOYW1lKSwgZXhwZWN0ZWRBdHRyaWJ1dGVWYWx1ZSkKKyAgICB9LAor
CisgICAgdG9IYXZlUHJvcDogZnVuY3Rpb24ocHJvcGVydHlOYW1lLCBleHBlY3RlZFByb3BlcnR5
VmFsdWUpIHsKKyAgICAgIHJldHVybiBoYXNQcm9wZXJ0eSh0aGlzLmFjdHVhbC5wcm9wKHByb3Bl
cnR5TmFtZSksIGV4cGVjdGVkUHJvcGVydHlWYWx1ZSkKKyAgICB9LAorCisgICAgdG9IYXZlSWQ6
IGZ1bmN0aW9uKGlkKSB7CisgICAgICByZXR1cm4gdGhpcy5hY3R1YWwuYXR0cignaWQnKSA9PSBp
ZAorICAgIH0sCisKKyAgICB0b0hhdmVIdG1sOiBmdW5jdGlvbihodG1sKSB7CisgICAgICByZXR1
cm4gdGhpcy5hY3R1YWwuaHRtbCgpID09IGphc21pbmUuSlF1ZXJ5LmJyb3dzZXJUYWdDYXNlSW5k
ZXBlbmRlbnRIdG1sKGh0bWwpCisgICAgfSwKKworICAgIHRvQ29udGFpbkh0bWw6IGZ1bmN0aW9u
KGh0bWwpeworICAgICAgdmFyIGFjdHVhbEh0bWwgPSB0aGlzLmFjdHVhbC5odG1sKCkKKyAgICAg
IHZhciBleHBlY3RlZEh0bWwgPSBqYXNtaW5lLkpRdWVyeS5icm93c2VyVGFnQ2FzZUluZGVwZW5k
ZW50SHRtbChodG1sKQorICAgICAgcmV0dXJuIChhY3R1YWxIdG1sLmluZGV4T2YoZXhwZWN0ZWRI
dG1sKSA+PSAwKQorICAgIH0sCisKKyAgICB0b0hhdmVUZXh0OiBmdW5jdGlvbih0ZXh0KSB7Cisg
ICAgICB2YXIgdHJpbW1lZFRleHQgPSAkLnRyaW0odGhpcy5hY3R1YWwudGV4dCgpKQorICAgICAg
aWYgKHRleHQgJiYgJC5pc0Z1bmN0aW9uKHRleHQudGVzdCkpIHsKKyAgICAgICAgcmV0dXJuIHRl
eHQudGVzdCh0cmltbWVkVGV4dCkKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiB0cmlt
bWVkVGV4dCA9PSB0ZXh0CisgICAgICB9CisgICAgfSwKKworICAgIHRvQ29udGFpblRleHQ6IGZ1
bmN0aW9uKHRleHQpIHsKKyAgICAgIHZhciB0cmltbWVkVGV4dCA9ICQudHJpbSh0aGlzLmFjdHVh
bC50ZXh0KCkpCisgICAgICBpZiAodGV4dCAmJiAkLmlzRnVuY3Rpb24odGV4dC50ZXN0KSkgewor
ICAgICAgICByZXR1cm4gdGV4dC50ZXN0KHRyaW1tZWRUZXh0KQorICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgcmV0dXJuIHRyaW1tZWRUZXh0LmluZGV4T2YodGV4dCkgIT0gLTE7CisgICAgICB9Cisg
ICAgfSwKKworICAgIHRvSGF2ZVZhbHVlOiBmdW5jdGlvbih2YWx1ZSkgeworICAgICAgcmV0dXJu
IHRoaXMuYWN0dWFsLnZhbCgpID09PSB2YWx1ZQorICAgIH0sCisKKyAgICB0b0hhdmVEYXRhOiBm
dW5jdGlvbihrZXksIGV4cGVjdGVkVmFsdWUpIHsKKyAgICAgIHJldHVybiBoYXNQcm9wZXJ0eSh0
aGlzLmFjdHVhbC5kYXRhKGtleSksIGV4cGVjdGVkVmFsdWUpCisgICAgfSwKKworICAgIHRvQmU6
IGZ1bmN0aW9uKHNlbGVjdG9yKSB7CisgICAgICByZXR1cm4gdGhpcy5hY3R1YWwuaXMoc2VsZWN0
b3IpCisgICAgfSwKKworICAgIHRvQ29udGFpbjogZnVuY3Rpb24oc2VsZWN0b3IpIHsKKyAgICAg
IHJldHVybiB0aGlzLmFjdHVhbC5maW5kKHNlbGVjdG9yKS5sZW5ndGgKKyAgICB9LAorCisgICAg
dG9CZURpc2FibGVkOiBmdW5jdGlvbihzZWxlY3Rvcil7CisgICAgICByZXR1cm4gdGhpcy5hY3R1
YWwuaXMoJzpkaXNhYmxlZCcpCisgICAgfSwKKworICAgIHRvQmVGb2N1c2VkOiBmdW5jdGlvbihz
ZWxlY3RvcikgeworICAgICAgcmV0dXJuIHRoaXMuYWN0dWFsWzBdID09PSB0aGlzLmFjdHVhbFsw
XS5vd25lckRvY3VtZW50LmFjdGl2ZUVsZW1lbnQKKyAgICB9LAorCisgICAgdG9IYW5kbGU6IGZ1
bmN0aW9uKGV2ZW50KSB7CisKKyAgICAgIHZhciBldmVudHMgPSAkLl9kYXRhKHRoaXMuYWN0dWFs
LmdldCgwKSwgImV2ZW50cyIpCisKKyAgICAgIGlmKCFldmVudHMgfHwgIWV2ZW50IHx8IHR5cGVv
ZiBldmVudCAhPT0gInN0cmluZyIpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlCisgICAgICB9CisK
KyAgICAgIHZhciBuYW1lc3BhY2VzID0gZXZlbnQuc3BsaXQoIi4iKQorICAgICAgdmFyIGV2ZW50
VHlwZSA9IG5hbWVzcGFjZXMuc2hpZnQoKQorICAgICAgdmFyIHNvcnRlZE5hbWVzcGFjZXMgPSBu
YW1lc3BhY2VzLnNsaWNlKDApLnNvcnQoKQorICAgICAgdmFyIG5hbWVzcGFjZVJlZ0V4cCA9IG5l
dyBSZWdFeHAoIihefFxcLikiICsgc29ydGVkTmFtZXNwYWNlcy5qb2luKCJcXC4oPzouKlxcLik/
IikgKyAiKFxcLnwkKSIpCisKKyAgICAgIGlmKGV2ZW50c1tldmVudFR5cGVdICYmIG5hbWVzcGFj
ZXMubGVuZ3RoKSB7CisgICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBldmVudHNbZXZlbnRUeXBl
XS5sZW5ndGg7IGkrKykgeworICAgICAgICAgIHZhciBuYW1lc3BhY2UgPSBldmVudHNbZXZlbnRU
eXBlXVtpXS5uYW1lc3BhY2UKKyAgICAgICAgICBpZihuYW1lc3BhY2VSZWdFeHAudGVzdChuYW1l
c3BhY2UpKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZQorICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIGV2ZW50c1tldmVudFR5cGVdICYmIGV2
ZW50c1tldmVudFR5cGVdLmxlbmd0aCA+IDAKKyAgICAgIH0KKyAgICB9LAorCisgICAgLy8gdGVz
dHMgdGhlIGV4aXN0ZW5jZSBvZiBhIHNwZWNpZmljIGV2ZW50IGJpbmRpbmcgKyBoYW5kbGVyCisg
ICAgdG9IYW5kbGVXaXRoOiBmdW5jdGlvbihldmVudE5hbWUsIGV2ZW50SGFuZGxlcikgeworICAg
ICAgdmFyIHN0YWNrID0gJC5fZGF0YSh0aGlzLmFjdHVhbC5nZXQoMCksICJldmVudHMiKVtldmVu
dE5hbWVdCisgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0YWNrLmxlbmd0aDsgaSsrKSB7Cisg
ICAgICAgIGlmIChzdGFja1tpXS5oYW5kbGVyID09IGV2ZW50SGFuZGxlcikgcmV0dXJuIHRydWUK
KyAgICAgIH0KKyAgICAgIHJldHVybiBmYWxzZQorICAgIH0KKyAgfQorCisgIHZhciBoYXNQcm9w
ZXJ0eSA9IGZ1bmN0aW9uKGFjdHVhbFZhbHVlLCBleHBlY3RlZFZhbHVlKSB7CisgICAgaWYgKGV4
cGVjdGVkVmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGFjdHVhbFZhbHVlICE9PSB1bmRlZmlu
ZWQKKyAgICByZXR1cm4gYWN0dWFsVmFsdWUgPT0gZXhwZWN0ZWRWYWx1ZQorICB9CisKKyAgdmFy
IGJpbmRNYXRjaGVyID0gZnVuY3Rpb24obWV0aG9kTmFtZSkgeworICAgIHZhciBidWlsdEluTWF0
Y2hlciA9IGphc21pbmUuTWF0Y2hlcnMucHJvdG90eXBlW21ldGhvZE5hbWVdCisKKyAgICBqYXNt
aW5lLkpRdWVyeS5tYXRjaGVyc0NsYXNzW21ldGhvZE5hbWVdID0gZnVuY3Rpb24oKSB7CisgICAg
ICBpZiAodGhpcy5hY3R1YWwKKyAgICAgICAgJiYgKHRoaXMuYWN0dWFsIGluc3RhbmNlb2YgJAor
ICAgICAgICAgIHx8IGphc21pbmUuaXNEb21Ob2RlKHRoaXMuYWN0dWFsKSkpIHsKKyAgICAgICAg
ICAgIHRoaXMuYWN0dWFsID0gJCh0aGlzLmFjdHVhbCkKKyAgICAgICAgICAgIHZhciByZXN1bHQg
PSBqUXVlcnlNYXRjaGVyc1ttZXRob2ROYW1lXS5hcHBseSh0aGlzLCBhcmd1bWVudHMpCisgICAg
ICAgICAgICB2YXIgZWxlbWVudAorICAgICAgICAgICAgaWYgKHRoaXMuYWN0dWFsLmdldCAmJiAo
ZWxlbWVudCA9IHRoaXMuYWN0dWFsLmdldCgpWzBdKSAmJiAhJC5pc1dpbmRvdyhlbGVtZW50KSAm
JiBlbGVtZW50LnRhZ05hbWUgIT09ICJIVE1MIikKKyAgICAgICAgICAgICAgdGhpcy5hY3R1YWwg
PSBqYXNtaW5lLkpRdWVyeS5lbGVtZW50VG9TdHJpbmcodGhpcy5hY3R1YWwpCisgICAgICAgICAg
ICByZXR1cm4gcmVzdWx0CisgICAgICAgICAgfQorCisgICAgICAgICAgaWYgKGJ1aWx0SW5NYXRj
aGVyKSB7CisgICAgICAgICAgICByZXR1cm4gYnVpbHRJbk1hdGNoZXIuYXBwbHkodGhpcywgYXJn
dW1lbnRzKQorICAgICAgICAgIH0KKworICAgICAgICAgIHJldHVybiBmYWxzZQorICAgIH0KKyAg
fQorCisgIGZvcih2YXIgbWV0aG9kTmFtZSBpbiBqUXVlcnlNYXRjaGVycykgeworICAgIGJpbmRN
YXRjaGVyKG1ldGhvZE5hbWUpCisgIH0KK30oKQorCitiZWZvcmVFYWNoKGZ1bmN0aW9uKCkgewor
ICB0aGlzLmFkZE1hdGNoZXJzKGphc21pbmUuSlF1ZXJ5Lm1hdGNoZXJzQ2xhc3MpCisgIHRoaXMu
YWRkTWF0Y2hlcnMoeworICAgIHRvSGF2ZUJlZW5UcmlnZ2VyZWRPbjogZnVuY3Rpb24oc2VsZWN0
b3IpIHsKKyAgICAgIHRoaXMubWVzc2FnZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4g
WworICAgICAgICAgICJFeHBlY3RlZCBldmVudCAiICsgdGhpcy5hY3R1YWwgKyAiIHRvIGhhdmUg
YmVlbiB0cmlnZ2VyZWQgb24gIiArIHNlbGVjdG9yLAorICAgICAgICAgICJFeHBlY3RlZCBldmVu
dCAiICsgdGhpcy5hY3R1YWwgKyAiIG5vdCB0byBoYXZlIGJlZW4gdHJpZ2dlcmVkIG9uICIgKyBz
ZWxlY3RvcgorICAgICAgICBdCisgICAgICB9CisgICAgICByZXR1cm4gamFzbWluZS5KUXVlcnku
ZXZlbnRzLndhc1RyaWdnZXJlZChzZWxlY3RvciwgdGhpcy5hY3R1YWwpCisgICAgfQorICB9KQor
ICB0aGlzLmFkZE1hdGNoZXJzKHsKKyAgICB0b0hhdmVCZWVuVHJpZ2dlcmVkOiBmdW5jdGlvbigp
eworICAgICAgdmFyIGV2ZW50TmFtZSA9IHRoaXMuYWN0dWFsLmV2ZW50TmFtZSwKKyAgICAgICAg
ICBzZWxlY3RvciA9IHRoaXMuYWN0dWFsLnNlbGVjdG9yCisgICAgICB0aGlzLm1lc3NhZ2UgPSBm
dW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIFsKKyAgICAgICAgICAiRXhwZWN0ZWQgZXZlbnQg
IiArIGV2ZW50TmFtZSArICIgdG8gaGF2ZSBiZWVuIHRyaWdnZXJlZCBvbiAiICsgc2VsZWN0b3Is
CisgICAgICAgICAgIkV4cGVjdGVkIGV2ZW50ICIgKyBldmVudE5hbWUgKyAiIG5vdCB0byBoYXZl
IGJlZW4gdHJpZ2dlcmVkIG9uICIgKyBzZWxlY3RvcgorICAgICAgICBdCisgICAgICB9CisgICAg
ICByZXR1cm4gamFzbWluZS5KUXVlcnkuZXZlbnRzLndhc1RyaWdnZXJlZChzZWxlY3RvciwgZXZl
bnROYW1lKQorICAgICB9CisgIH0pCisgIHRoaXMuYWRkTWF0Y2hlcnMoeworICAgIHRvSGF2ZUJl
ZW5UcmlnZ2VyZWRPbkFuZFdpdGg6IGZ1bmN0aW9uKCkgeworICAgICAgdmFyIHNlbGVjdG9yID0g
YXJndW1lbnRzWzBdLAorICAgICAgICAgIGV4cGVjdGVkQXJncyA9IGFyZ3VtZW50c1sxXSwKKyAg
ICAgICAgICB3YXNUcmlnZ2VyZWQgPSBqYXNtaW5lLkpRdWVyeS5ldmVudHMud2FzVHJpZ2dlcmVk
KHNlbGVjdG9yLCB0aGlzLmFjdHVhbCk7CisgICAgICB0aGlzLm1lc3NhZ2UgPSBmdW5jdGlvbigp
IHsKKyAgICAgICAgaWYgKHdhc1RyaWdnZXJlZCkgeworICAgICAgICAgIHZhciBhY3R1YWxBcmdz
ID0gamFzbWluZS5KUXVlcnkuZXZlbnRzLmFyZ3Moc2VsZWN0b3IsIHRoaXMuYWN0dWFsLCBleHBl
Y3RlZEFyZ3MpWzFdOworICAgICAgICAgIHJldHVybiBbCisgICAgICAgICAgICAiRXhwZWN0ZWQg
ZXZlbnQgIiArIHRoaXMuYWN0dWFsICsgIiB0byBoYXZlIGJlZW4gdHJpZ2dlcmVkIHdpdGggIiAr
IGphc21pbmUucHAoZXhwZWN0ZWRBcmdzKSArICIgIGJ1dCBpdCB3YXMgdHJpZ2dlcmVkIHdpdGgg
IiArIGphc21pbmUucHAoYWN0dWFsQXJncyksCisgICAgICAgICAgICAiRXhwZWN0ZWQgZXZlbnQg
IiArIHRoaXMuYWN0dWFsICsgIiBub3QgdG8gaGF2ZSBiZWVuIHRyaWdnZXJlZCB3aXRoICIgKyBq
YXNtaW5lLnBwKGV4cGVjdGVkQXJncykgKyAiIGJ1dCBpdCB3YXMgdHJpZ2dlcmVkIHdpdGggIiAr
IGphc21pbmUucHAoYWN0dWFsQXJncykKKyAgICAgICAgICBdCisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgcmV0dXJuIFsKKyAgICAgICAgICAgICJFeHBlY3RlZCBldmVudCAiICsgdGhpcy5h
Y3R1YWwgKyAiIHRvIGhhdmUgYmVlbiB0cmlnZ2VyZWQgb24gIiArIHNlbGVjdG9yLAorICAgICAg
ICAgICAgIkV4cGVjdGVkIGV2ZW50ICIgKyB0aGlzLmFjdHVhbCArICIgbm90IHRvIGhhdmUgYmVl
biB0cmlnZ2VyZWQgb24gIiArIHNlbGVjdG9yCisgICAgICAgICAgXQorICAgICAgICB9CisgICAg
ICB9CisgICAgICByZXR1cm4gd2FzVHJpZ2dlcmVkICYmIGphc21pbmUuSlF1ZXJ5LmV2ZW50cy53
YXNUcmlnZ2VyZWRXaXRoKHNlbGVjdG9yLCB0aGlzLmFjdHVhbCwgZXhwZWN0ZWRBcmdzLCB0aGlz
LmVudik7CisgICAgfQorICB9KQorICB0aGlzLmFkZE1hdGNoZXJzKHsKKyAgICB0b0hhdmVCZWVu
UHJldmVudGVkT246IGZ1bmN0aW9uKHNlbGVjdG9yKSB7CisgICAgICB0aGlzLm1lc3NhZ2UgPSBm
dW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIFsKKyAgICAgICAgICAiRXhwZWN0ZWQgZXZlbnQg
IiArIHRoaXMuYWN0dWFsICsgIiB0byBoYXZlIGJlZW4gcHJldmVudGVkIG9uICIgKyBzZWxlY3Rv
ciwKKyAgICAgICAgICAiRXhwZWN0ZWQgZXZlbnQgIiArIHRoaXMuYWN0dWFsICsgIiBub3QgdG8g
aGF2ZSBiZWVuIHByZXZlbnRlZCBvbiAiICsgc2VsZWN0b3IKKyAgICAgICAgXQorICAgICAgfQor
ICAgICAgcmV0dXJuIGphc21pbmUuSlF1ZXJ5LmV2ZW50cy53YXNQcmV2ZW50ZWQoc2VsZWN0b3Is
IHRoaXMuYWN0dWFsKQorICAgIH0KKyAgfSkKKyAgdGhpcy5hZGRNYXRjaGVycyh7CisgICAgdG9I
YXZlQmVlblByZXZlbnRlZDogZnVuY3Rpb24oKSB7CisgICAgICB2YXIgZXZlbnROYW1lID0gdGhp
cy5hY3R1YWwuZXZlbnROYW1lLAorICAgICAgICAgIHNlbGVjdG9yID0gdGhpcy5hY3R1YWwuc2Vs
ZWN0b3IKKyAgICAgIHRoaXMubWVzc2FnZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4g
WworICAgICAgICAgICJFeHBlY3RlZCBldmVudCAiICsgZXZlbnROYW1lICsgIiB0byBoYXZlIGJl
ZW4gcHJldmVudGVkIG9uICIgKyBzZWxlY3RvciwKKyAgICAgICAgICAiRXhwZWN0ZWQgZXZlbnQg
IiArIGV2ZW50TmFtZSArICIgbm90IHRvIGhhdmUgYmVlbiBwcmV2ZW50ZWQgb24gIiArIHNlbGVj
dG9yCisgICAgICAgIF0KKyAgICAgIH0KKyAgICAgIHJldHVybiBqYXNtaW5lLkpRdWVyeS5ldmVu
dHMud2FzUHJldmVudGVkKHNlbGVjdG9yLCBldmVudE5hbWUpCisgICAgfQorICB9KQorICB0aGlz
LmFkZE1hdGNoZXJzKHsKKyAgICB0b0hhdmVCZWVuU3RvcHBlZE9uOiBmdW5jdGlvbihzZWxlY3Rv
cikgeworICAgICAgdGhpcy5tZXNzYWdlID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBb
CisgICAgICAgICAgIkV4cGVjdGVkIGV2ZW50ICIgKyB0aGlzLmFjdHVhbCArICIgdG8gaGF2ZSBi
ZWVuIHN0b3BwZWQgb24gIiArIHNlbGVjdG9yLAorICAgICAgICAgICJFeHBlY3RlZCBldmVudCAi
ICsgdGhpcy5hY3R1YWwgKyAiIG5vdCB0byBoYXZlIGJlZW4gc3RvcHBlZCBvbiAiICsgc2VsZWN0
b3IKKyAgICAgICAgXQorICAgICAgfQorICAgICAgcmV0dXJuIGphc21pbmUuSlF1ZXJ5LmV2ZW50
cy53YXNTdG9wcGVkKHNlbGVjdG9yLCB0aGlzLmFjdHVhbCkKKyAgICB9CisgIH0pCisgIHRoaXMu
YWRkTWF0Y2hlcnMoeworICAgIHRvSGF2ZUJlZW5TdG9wcGVkOiBmdW5jdGlvbigpIHsKKyAgICAg
IHZhciBldmVudE5hbWUgPSB0aGlzLmFjdHVhbC5ldmVudE5hbWUsCisgICAgICAgICAgc2VsZWN0
b3IgPSB0aGlzLmFjdHVhbC5zZWxlY3RvcgorICAgICAgdGhpcy5tZXNzYWdlID0gZnVuY3Rpb24o
KSB7CisgICAgICAgIHJldHVybiBbCisgICAgICAgICAgIkV4cGVjdGVkIGV2ZW50ICIgKyBldmVu
dE5hbWUgKyAiIHRvIGhhdmUgYmVlbiBzdG9wcGVkIG9uICIgKyBzZWxlY3RvciwKKyAgICAgICAg
ICAiRXhwZWN0ZWQgZXZlbnQgIiArIGV2ZW50TmFtZSArICIgbm90IHRvIGhhdmUgYmVlbiBzdG9w
cGVkIG9uICIgKyBzZWxlY3RvcgorICAgICAgICBdCisgICAgICB9CisgICAgICByZXR1cm4gamFz
bWluZS5KUXVlcnkuZXZlbnRzLndhc1N0b3BwZWQoc2VsZWN0b3IsIGV2ZW50TmFtZSkKKyAgICB9
CisgIH0pCit9KQorCithZnRlckVhY2goZnVuY3Rpb24oKSB7CisgIGphc21pbmUuZ2V0Rml4dHVy
ZXMoKS5jbGVhblVwKCkKKyAgamFzbWluZS5nZXRTdHlsZUZpeHR1cmVzKCkuY2xlYW5VcCgpCisg
IGphc21pbmUuSlF1ZXJ5LmV2ZW50cy5jbGVhblVwKCkKK30pCkluZGV4OiBQZXJmb3JtYW5jZVRl
c3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvanF1ZXJ5
L2NvbXBvbmVudC5qc29uCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVu
QmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9qcXVlcnkvY29tcG9uZW50Lmpz
b24JKHJldmlzaW9uIDApCisrKyBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdo
dGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvanF1ZXJ5L2NvbXBvbmVudC5qc29uCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTMgQEAKK3sKKyAgIm5hbWUiOiAianF1ZXJ5IiwKKyAgInZlcnNp
b24iOiAiMS44LjMiLAorICAibWFpbiI6ICIuL2pxdWVyeS5qcyIsCisgICJkZXBlbmRlbmNpZXMi
OiB7fSwKKyAgIl9pZCI6ICJqcXVlcnlAMS44LjMiLAorICAicmVhZG1lIjogIkVSUk9SOiBObyBS
RUFETUUubWQgZmlsZSBmb3VuZCEiLAorICAiZGVzY3JpcHRpb24iOiAiRVJST1I6IE5vIFJFQURN
RS5tZCBmaWxlIGZvdW5kISIsCisgICJyZXBvc2l0b3J5IjogeworICAgICJ0eXBlIjogImdpdCIs
CisgICAgInVybCI6ICJnaXQ6Ly9naXRodWIuY29tL2NvbXBvbmVudHMvanF1ZXJ5LmdpdCIKKyAg
fQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMv
RG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9qcXVlcnkvY29t
cG9zZXIuanNvbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNo
L2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvanF1ZXJ5L2NvbXBvc2VyLmpzb24JKHJl
dmlzaW9uIDApCisrKyBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4
YW1wbGUtYXBwL2NvbXBvbmVudHMvanF1ZXJ5L2NvbXBvc2VyLmpzb24JKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwyMyBAQAoreworICAgICJuYW1lIjogImNvbXBvbmVudHMvanF1ZXJ5IiwKKyAg
ICAiZGVzY3JpcHRpb24iOiAialF1ZXJ5IEphdmFTY3JpcHQgTGlicmFyeSIsCisgICAgInR5cGUi
OiAiY29tcG9uZW50IiwKKyAgICAiaG9tZXBhZ2UiOiAiaHR0cDovL2pxdWVyeS5jb20iLAorICAg
ICJsaWNlbnNlIjogIk1JVCIsCisgICAgInN1cHBvcnQiOiB7CisgICAgICAgICJpcmMiOiAiaXJj
Oi8vaXJjLmZyZWVub2RlLm9yZy9qcXVlcnkiLAorICAgICAgICAiaXNzdWVzIjogImh0dHA6Ly9i
dWdzLmpxdWVyeS5jb20iLAorICAgICAgICAiZm9ydW0iOiAiaHR0cDovL2ZvcnVtLmpxdWVyeS5j
b20iLAorICAgICAgICAid2lraSI6ICJodHRwOi8vZG9jcy5qcXVlcnkuY29tLyIsCisgICAgICAg
ICJzb3VyY2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL2pxdWVyeS9qcXVlcnkiCisgICAgfSwKKyAg
ICAiYXV0aG9ycyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiSm9obiBSZXNp
ZyIsCisgICAgICAgICAgICAiZW1haWwiOiAiamVyZXNpZ0BnbWFpbC5jb20iCisgICAgICAgIH0K
KyAgICBdLAorICAgICJleHRyYSI6IHsKKyAgICAgICAgImpzIjogImpxdWVyeS5qcyIKKyAgICB9
Cit9CkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1w
bGUtYXBwL2NvbXBvbmVudHMvanF1ZXJ5L2pxdWVyeS5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3Jt
YW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMv
anF1ZXJ5L2pxdWVyeS5qcwkocmV2aXNpb24gMCkKKysrIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VF
dmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9qcXVlcnkvanF1ZXJ5Lmpz
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTQ3MiBAQAorLyohCisgKiBqUXVlcnkgSmF2YVNj
cmlwdCBMaWJyYXJ5IHYxLjguMworICogaHR0cDovL2pxdWVyeS5jb20vCisgKgorICogSW5jbHVk
ZXMgU2l6emxlLmpzCisgKiBodHRwOi8vc2l6emxlanMuY29tLworICoKKyAqIENvcHlyaWdodCAy
MDEyIGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnMKKyAqIFJlbGVhc2Vk
IHVuZGVyIHRoZSBNSVQgbGljZW5zZQorICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZQorICoK
KyAqIERhdGU6IFR1ZSBOb3YgMTMgMjAxMiAwODoyMDozMyBHTVQtMDUwMCAoRWFzdGVybiBTdGFu
ZGFyZCBUaW1lKQorICovCisoZnVuY3Rpb24oIHdpbmRvdywgdW5kZWZpbmVkICkgewordmFyCisg
ICAgLy8gQSBjZW50cmFsIHJlZmVyZW5jZSB0byB0aGUgcm9vdCBqUXVlcnkoZG9jdW1lbnQpCisg
ICAgcm9vdGpRdWVyeSwKKworICAgIC8vIFRoZSBkZWZlcnJlZCB1c2VkIG9uIERPTSByZWFkeQor
ICAgIHJlYWR5TGlzdCwKKworICAgIC8vIFVzZSB0aGUgY29ycmVjdCBkb2N1bWVudCBhY2NvcmRp
bmdseSB3aXRoIHdpbmRvdyBhcmd1bWVudCAoc2FuZGJveCkKKyAgICBkb2N1bWVudCA9IHdpbmRv
dy5kb2N1bWVudCwKKyAgICBsb2NhdGlvbiA9IHdpbmRvdy5sb2NhdGlvbiwKKyAgICBuYXZpZ2F0
b3IgPSB3aW5kb3cubmF2aWdhdG9yLAorCisgICAgLy8gTWFwIG92ZXIgalF1ZXJ5IGluIGNhc2Ug
b2Ygb3ZlcndyaXRlCisgICAgX2pRdWVyeSA9IHdpbmRvdy5qUXVlcnksCisKKyAgICAvLyBNYXAg
b3ZlciB0aGUgJCBpbiBjYXNlIG9mIG92ZXJ3cml0ZQorICAgIF8kID0gd2luZG93LiQsCisKKyAg
ICAvLyBTYXZlIGEgcmVmZXJlbmNlIHRvIHNvbWUgY29yZSBtZXRob2RzCisgICAgY29yZV9wdXNo
ID0gQXJyYXkucHJvdG90eXBlLnB1c2gsCisgICAgY29yZV9zbGljZSA9IEFycmF5LnByb3RvdHlw
ZS5zbGljZSwKKyAgICBjb3JlX2luZGV4T2YgPSBBcnJheS5wcm90b3R5cGUuaW5kZXhPZiwKKyAg
ICBjb3JlX3RvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZywKKyAgICBjb3JlX2hh
c093biA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksCisgICAgY29yZV90cmltID0g
U3RyaW5nLnByb3RvdHlwZS50cmltLAorCisgICAgLy8gRGVmaW5lIGEgbG9jYWwgY29weSBvZiBq
UXVlcnkKKyAgICBqUXVlcnkgPSBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQgKSB7CisgICAg
ICAgIC8vIFRoZSBqUXVlcnkgb2JqZWN0IGlzIGFjdHVhbGx5IGp1c3QgdGhlIGluaXQgY29uc3Ry
dWN0b3IgJ2VuaGFuY2VkJworICAgICAgICByZXR1cm4gbmV3IGpRdWVyeS5mbi5pbml0KCBzZWxl
Y3RvciwgY29udGV4dCwgcm9vdGpRdWVyeSApOworICAgIH0sCisKKyAgICAvLyBVc2VkIGZvciBt
YXRjaGluZyBudW1iZXJzCisgICAgY29yZV9wbnVtID0gL1tcLStdPyg/OlxkKlwufClcZCsoPzpb
ZUVdW1wtK10/XGQrfCkvLnNvdXJjZSwKKworICAgIC8vIFVzZWQgZm9yIGRldGVjdGluZyBhbmQg
dHJpbW1pbmcgd2hpdGVzcGFjZQorICAgIGNvcmVfcm5vdHdoaXRlID0gL1xTLywKKyAgICBjb3Jl
X3JzcGFjZSA9IC9ccysvLAorCisgICAgLy8gTWFrZSBzdXJlIHdlIHRyaW0gQk9NIGFuZCBOQlNQ
IChoZXJlJ3MgbG9va2luZyBhdCB5b3UsIFNhZmFyaSA1LjAgYW5kIElFKQorICAgIHJ0cmltID0g
L15bXHNcdUZFRkZceEEwXSt8W1xzXHVGRUZGXHhBMF0rJC9nLAorCisgICAgLy8gQSBzaW1wbGUg
d2F5IHRvIGNoZWNrIGZvciBIVE1MIHN0cmluZ3MKKyAgICAvLyBQcmlvcml0aXplICNpZCBvdmVy
IDx0YWc+IHRvIGF2b2lkIFhTUyB2aWEgbG9jYXRpb24uaGFzaCAoIzk1MjEpCisgICAgcnF1aWNr
RXhwciA9IC9eKD86W14jPF0qKDxbXHdcV10rPilbXj5dKiR8IyhbXHdcLV0qKSQpLywKKworICAg
IC8vIE1hdGNoIGEgc3RhbmRhbG9uZSB0YWcKKyAgICByc2luZ2xlVGFnID0gL148KFx3Kylccypc
Lz8+KD86PFwvXDE+fCkkLywKKworICAgIC8vIEpTT04gUmVnRXhwCisgICAgcnZhbGlkY2hhcnMg
PSAvXltcXSw6e31cc10qJC8sCisgICAgcnZhbGlkYnJhY2VzID0gLyg/Ol58OnwsKSg/OlxzKlxb
KSsvZywKKyAgICBydmFsaWRlc2NhcGUgPSAvXFwoPzpbIlxcXC9iZm5ydF18dVtcZGEtZkEtRl17
NH0pL2csCisgICAgcnZhbGlkdG9rZW5zID0gLyJbXiJcXFxyXG5dKiJ8dHJ1ZXxmYWxzZXxudWxs
fC0/KD86XGRcZCpcLnwpXGQrKD86W2VFXVtcLStdP1xkK3wpL2csCisKKyAgICAvLyBNYXRjaGVz
IGRhc2hlZCBzdHJpbmcgZm9yIGNhbWVsaXppbmcKKyAgICBybXNQcmVmaXggPSAvXi1tcy0vLAor
ICAgIHJkYXNoQWxwaGEgPSAvLShbXGRhLXpdKS9naSwKKworICAgIC8vIFVzZWQgYnkgalF1ZXJ5
LmNhbWVsQ2FzZSBhcyBjYWxsYmFjayB0byByZXBsYWNlKCkKKyAgICBmY2FtZWxDYXNlID0gZnVu
Y3Rpb24oIGFsbCwgbGV0dGVyICkgeworICAgICAgICByZXR1cm4gKCBsZXR0ZXIgKyAiIiApLnRv
VXBwZXJDYXNlKCk7CisgICAgfSwKKworICAgIC8vIFRoZSByZWFkeSBldmVudCBoYW5kbGVyIGFu
ZCBzZWxmIGNsZWFudXAgbWV0aG9kCisgICAgRE9NQ29udGVudExvYWRlZCA9IGZ1bmN0aW9uKCkg
eworICAgICAgICBpZiAoIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIgKSB7CisgICAgICAgICAg
ICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCAiRE9NQ29udGVudExvYWRlZCIsIERPTUNv
bnRlbnRMb2FkZWQsIGZhbHNlICk7CisgICAgICAgICAgICBqUXVlcnkucmVhZHkoKTsKKyAgICAg
ICAgfSBlbHNlIGlmICggZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gImNvbXBsZXRlIiApIHsKKyAg
ICAgICAgICAgIC8vIHdlJ3JlIGhlcmUgYmVjYXVzZSByZWFkeVN0YXRlID09PSAiY29tcGxldGUi
IGluIG9sZElFCisgICAgICAgICAgICAvLyB3aGljaCBpcyBnb29kIGVub3VnaCBmb3IgdXMgdG8g
Y2FsbCB0aGUgZG9tIHJlYWR5IQorICAgICAgICAgICAgZG9jdW1lbnQuZGV0YWNoRXZlbnQoICJv
bnJlYWR5c3RhdGVjaGFuZ2UiLCBET01Db250ZW50TG9hZGVkICk7CisgICAgICAgICAgICBqUXVl
cnkucmVhZHkoKTsKKyAgICAgICAgfQorICAgIH0sCisKKyAgICAvLyBbW0NsYXNzXV0gLT4gdHlw
ZSBwYWlycworICAgIGNsYXNzMnR5cGUgPSB7fTsKKworalF1ZXJ5LmZuID0galF1ZXJ5LnByb3Rv
dHlwZSA9IHsKKyAgICBjb25zdHJ1Y3RvcjogalF1ZXJ5LAorICAgIGluaXQ6IGZ1bmN0aW9uKCBz
ZWxlY3RvciwgY29udGV4dCwgcm9vdGpRdWVyeSApIHsKKyAgICAgICAgdmFyIG1hdGNoLCBlbGVt
LCByZXQsIGRvYzsKKworICAgICAgICAvLyBIYW5kbGUgJCgiIiksICQobnVsbCksICQodW5kZWZp
bmVkKSwgJChmYWxzZSkKKyAgICAgICAgaWYgKCAhc2VsZWN0b3IgKSB7CisgICAgICAgICAgICBy
ZXR1cm4gdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEhhbmRsZSAkKERPTUVsZW1lbnQp
CisgICAgICAgIGlmICggc2VsZWN0b3Iubm9kZVR5cGUgKSB7CisgICAgICAgICAgICB0aGlzLmNv
bnRleHQgPSB0aGlzWzBdID0gc2VsZWN0b3I7CisgICAgICAgICAgICB0aGlzLmxlbmd0aCA9IDE7
CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEhhbmRs
ZSBIVE1MIHN0cmluZ3MKKyAgICAgICAgaWYgKCB0eXBlb2Ygc2VsZWN0b3IgPT09ICJzdHJpbmci
ICkgeworICAgICAgICAgICAgaWYgKCBzZWxlY3Rvci5jaGFyQXQoMCkgPT09ICI8IiAmJiBzZWxl
Y3Rvci5jaGFyQXQoIHNlbGVjdG9yLmxlbmd0aCAtIDEgKSA9PT0gIj4iICYmIHNlbGVjdG9yLmxl
bmd0aCA+PSAzICkgeworICAgICAgICAgICAgICAgIC8vIEFzc3VtZSB0aGF0IHN0cmluZ3MgdGhh
dCBzdGFydCBhbmQgZW5kIHdpdGggPD4gYXJlIEhUTUwgYW5kIHNraXAgdGhlIHJlZ2V4IGNoZWNr
CisgICAgICAgICAgICAgICAgbWF0Y2ggPSBbIG51bGwsIHNlbGVjdG9yLCBudWxsIF07CisKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbWF0Y2ggPSBycXVpY2tFeHByLmV4
ZWMoIHNlbGVjdG9yICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIE1hdGNoIGh0
bWwgb3IgbWFrZSBzdXJlIG5vIGNvbnRleHQgaXMgc3BlY2lmaWVkIGZvciAjaWQKKyAgICAgICAg
ICAgIGlmICggbWF0Y2ggJiYgKG1hdGNoWzFdIHx8ICFjb250ZXh0KSApIHsKKworICAgICAgICAg
ICAgICAgIC8vIEhBTkRMRTogJChodG1sKSAtPiAkKGFycmF5KQorICAgICAgICAgICAgICAgIGlm
ICggbWF0Y2hbMV0gKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQgPSBjb250ZXh0IGlu
c3RhbmNlb2YgalF1ZXJ5ID8gY29udGV4dFswXSA6IGNvbnRleHQ7CisgICAgICAgICAgICAgICAg
ICAgIGRvYyA9ICggY29udGV4dCAmJiBjb250ZXh0Lm5vZGVUeXBlID8gY29udGV4dC5vd25lckRv
Y3VtZW50IHx8IGNvbnRleHQgOiBkb2N1bWVudCApOworCisgICAgICAgICAgICAgICAgICAgIC8v
IHNjcmlwdHMgaXMgdHJ1ZSBmb3IgYmFjay1jb21wYXQKKyAgICAgICAgICAgICAgICAgICAgc2Vs
ZWN0b3IgPSBqUXVlcnkucGFyc2VIVE1MKCBtYXRjaFsxXSwgZG9jLCB0cnVlICk7CisgICAgICAg
ICAgICAgICAgICAgIGlmICggcnNpbmdsZVRhZy50ZXN0KCBtYXRjaFsxXSApICYmIGpRdWVyeS5p
c1BsYWluT2JqZWN0KCBjb250ZXh0ICkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlz
LmF0dHIuY2FsbCggc2VsZWN0b3IsIGNvbnRleHQsIHRydWUgKTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkubWVyZ2UoIHRoaXMsIHNl
bGVjdG9yICk7CisKKyAgICAgICAgICAgICAgICAvLyBIQU5ETEU6ICQoI2lkKQorICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGVsZW0gPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCggbWF0Y2hbMl0gKTsKKworICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayBw
YXJlbnROb2RlIHRvIGNhdGNoIHdoZW4gQmxhY2tiZXJyeSA0LjYgcmV0dXJucworICAgICAgICAg
ICAgICAgICAgICAvLyBub2RlcyB0aGF0IGFyZSBubyBsb25nZXIgaW4gdGhlIGRvY3VtZW50ICM2
OTYzCisgICAgICAgICAgICAgICAgICAgIGlmICggZWxlbSAmJiBlbGVtLnBhcmVudE5vZGUgKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgSUUgYW5k
IE9wZXJhIHJldHVybiBpdGVtcworICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnkgbmFtZSBp
bnN0ZWFkIG9mIElECisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGVsZW0uaWQgIT09IG1h
dGNoWzJdICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByb290alF1ZXJ5
LmZpbmQoIHNlbGVjdG9yICk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgd2UgaW5qZWN0IHRoZSBlbGVtZW50IGRpcmVj
dGx5IGludG8gdGhlIGpRdWVyeSBvYmplY3QKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMu
bGVuZ3RoID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNbMF0gPSBlbGVtOworICAg
ICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0ID0g
ZG9jdW1lbnQ7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0b3IgPSBzZWxlY3RvcjsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAvLyBIQU5ETEU6ICQoZXhwciwgJCguLi4pKQorICAgICAgICAgICAgfSBlbHNl
IGlmICggIWNvbnRleHQgfHwgY29udGV4dC5qcXVlcnkgKSB7CisgICAgICAgICAgICAgICAgcmV0
dXJuICggY29udGV4dCB8fCByb290alF1ZXJ5ICkuZmluZCggc2VsZWN0b3IgKTsKKworICAgICAg
ICAgICAgLy8gSEFORExFOiAkKGV4cHIsIGNvbnRleHQpCisgICAgICAgICAgICAvLyAod2hpY2gg
aXMganVzdCBlcXVpdmFsZW50IHRvOiAkKGNvbnRleHQpLmZpbmQoZXhwcikKKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IoIGNvbnRl
eHQgKS5maW5kKCBzZWxlY3RvciApOworICAgICAgICAgICAgfQorCisgICAgICAgIC8vIEhBTkRM
RTogJChmdW5jdGlvbikKKyAgICAgICAgLy8gU2hvcnRjdXQgZm9yIGRvY3VtZW50IHJlYWR5Cisg
ICAgICAgIH0gZWxzZSBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBzZWxlY3RvciApICkgeworICAg
ICAgICAgICAgcmV0dXJuIHJvb3RqUXVlcnkucmVhZHkoIHNlbGVjdG9yICk7CisgICAgICAgIH0K
KworICAgICAgICBpZiAoIHNlbGVjdG9yLnNlbGVjdG9yICE9PSB1bmRlZmluZWQgKSB7CisgICAg
ICAgICAgICB0aGlzLnNlbGVjdG9yID0gc2VsZWN0b3Iuc2VsZWN0b3I7CisgICAgICAgICAgICB0
aGlzLmNvbnRleHQgPSBzZWxlY3Rvci5jb250ZXh0OworICAgICAgICB9CisKKyAgICAgICAgcmV0
dXJuIGpRdWVyeS5tYWtlQXJyYXkoIHNlbGVjdG9yLCB0aGlzICk7CisgICAgfSwKKworICAgIC8v
IFN0YXJ0IHdpdGggYW4gZW1wdHkgc2VsZWN0b3IKKyAgICBzZWxlY3RvcjogIiIsCisKKyAgICAv
LyBUaGUgY3VycmVudCB2ZXJzaW9uIG9mIGpRdWVyeSBiZWluZyB1c2VkCisgICAganF1ZXJ5OiAi
MS44LjMiLAorCisgICAgLy8gVGhlIGRlZmF1bHQgbGVuZ3RoIG9mIGEgalF1ZXJ5IG9iamVjdCBp
cyAwCisgICAgbGVuZ3RoOiAwLAorCisgICAgLy8gVGhlIG51bWJlciBvZiBlbGVtZW50cyBjb250
YWluZWQgaW4gdGhlIG1hdGNoZWQgZWxlbWVudCBzZXQKKyAgICBzaXplOiBmdW5jdGlvbigpIHsK
KyAgICAgICAgcmV0dXJuIHRoaXMubGVuZ3RoOworICAgIH0sCisKKyAgICB0b0FycmF5OiBmdW5j
dGlvbigpIHsKKyAgICAgICAgcmV0dXJuIGNvcmVfc2xpY2UuY2FsbCggdGhpcyApOworICAgIH0s
CisKKyAgICAvLyBHZXQgdGhlIE50aCBlbGVtZW50IGluIHRoZSBtYXRjaGVkIGVsZW1lbnQgc2V0
IE9SCisgICAgLy8gR2V0IHRoZSB3aG9sZSBtYXRjaGVkIGVsZW1lbnQgc2V0IGFzIGEgY2xlYW4g
YXJyYXkKKyAgICBnZXQ6IGZ1bmN0aW9uKCBudW0gKSB7CisgICAgICAgIHJldHVybiBudW0gPT0g
bnVsbCA/CisKKyAgICAgICAgICAgIC8vIFJldHVybiBhICdjbGVhbicgYXJyYXkKKyAgICAgICAg
ICAgIHRoaXMudG9BcnJheSgpIDoKKworICAgICAgICAgICAgLy8gUmV0dXJuIGp1c3QgdGhlIG9i
amVjdAorICAgICAgICAgICAgKCBudW0gPCAwID8gdGhpc1sgdGhpcy5sZW5ndGggKyBudW0gXSA6
IHRoaXNbIG51bSBdICk7CisgICAgfSwKKworICAgIC8vIFRha2UgYW4gYXJyYXkgb2YgZWxlbWVu
dHMgYW5kIHB1c2ggaXQgb250byB0aGUgc3RhY2sKKyAgICAvLyAocmV0dXJuaW5nIHRoZSBuZXcg
bWF0Y2hlZCBlbGVtZW50IHNldCkKKyAgICBwdXNoU3RhY2s6IGZ1bmN0aW9uKCBlbGVtcywgbmFt
ZSwgc2VsZWN0b3IgKSB7CisKKyAgICAgICAgLy8gQnVpbGQgYSBuZXcgalF1ZXJ5IG1hdGNoZWQg
ZWxlbWVudCBzZXQKKyAgICAgICAgdmFyIHJldCA9IGpRdWVyeS5tZXJnZSggdGhpcy5jb25zdHJ1
Y3RvcigpLCBlbGVtcyApOworCisgICAgICAgIC8vIEFkZCB0aGUgb2xkIG9iamVjdCBvbnRvIHRo
ZSBzdGFjayAoYXMgYSByZWZlcmVuY2UpCisgICAgICAgIHJldC5wcmV2T2JqZWN0ID0gdGhpczsK
KworICAgICAgICByZXQuY29udGV4dCA9IHRoaXMuY29udGV4dDsKKworICAgICAgICBpZiAoIG5h
bWUgPT09ICJmaW5kIiApIHsKKyAgICAgICAgICAgIHJldC5zZWxlY3RvciA9IHRoaXMuc2VsZWN0
b3IgKyAoIHRoaXMuc2VsZWN0b3IgPyAiICIgOiAiIiApICsgc2VsZWN0b3I7CisgICAgICAgIH0g
ZWxzZSBpZiAoIG5hbWUgKSB7CisgICAgICAgICAgICByZXQuc2VsZWN0b3IgPSB0aGlzLnNlbGVj
dG9yICsgIi4iICsgbmFtZSArICIoIiArIHNlbGVjdG9yICsgIikiOworICAgICAgICB9CisKKyAg
ICAgICAgLy8gUmV0dXJuIHRoZSBuZXdseS1mb3JtZWQgZWxlbWVudCBzZXQKKyAgICAgICAgcmV0
dXJuIHJldDsKKyAgICB9LAorCisgICAgLy8gRXhlY3V0ZSBhIGNhbGxiYWNrIGZvciBldmVyeSBl
bGVtZW50IGluIHRoZSBtYXRjaGVkIHNldC4KKyAgICAvLyAoWW91IGNhbiBzZWVkIHRoZSBhcmd1
bWVudHMgd2l0aCBhbiBhcnJheSBvZiBhcmdzLCBidXQgdGhpcyBpcworICAgIC8vIG9ubHkgdXNl
ZCBpbnRlcm5hbGx5LikKKyAgICBlYWNoOiBmdW5jdGlvbiggY2FsbGJhY2ssIGFyZ3MgKSB7Cisg
ICAgICAgIHJldHVybiBqUXVlcnkuZWFjaCggdGhpcywgY2FsbGJhY2ssIGFyZ3MgKTsKKyAgICB9
LAorCisgICAgcmVhZHk6IGZ1bmN0aW9uKCBmbiApIHsKKyAgICAgICAgLy8gQWRkIHRoZSBjYWxs
YmFjaworICAgICAgICBqUXVlcnkucmVhZHkucHJvbWlzZSgpLmRvbmUoIGZuICk7CisKKyAgICAg
ICAgcmV0dXJuIHRoaXM7CisgICAgfSwKKworICAgIGVxOiBmdW5jdGlvbiggaSApIHsKKyAgICAg
ICAgaSA9ICtpOworICAgICAgICByZXR1cm4gaSA9PT0gLTEgPworICAgICAgICAgICAgdGhpcy5z
bGljZSggaSApIDoKKyAgICAgICAgICAgIHRoaXMuc2xpY2UoIGksIGkgKyAxICk7CisgICAgfSwK
KworICAgIGZpcnN0OiBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuZXEoIDAgKTsK
KyAgICB9LAorCisgICAgbGFzdDogZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiB0aGlzLmVx
KCAtMSApOworICAgIH0sCisKKyAgICBzbGljZTogZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVy
biB0aGlzLnB1c2hTdGFjayggY29yZV9zbGljZS5hcHBseSggdGhpcywgYXJndW1lbnRzICksCisg
ICAgICAgICAgICAic2xpY2UiLCBjb3JlX3NsaWNlLmNhbGwoYXJndW1lbnRzKS5qb2luKCIsIikg
KTsKKyAgICB9LAorCisgICAgbWFwOiBmdW5jdGlvbiggY2FsbGJhY2sgKSB7CisgICAgICAgIHJl
dHVybiB0aGlzLnB1c2hTdGFjayggalF1ZXJ5Lm1hcCh0aGlzLCBmdW5jdGlvbiggZWxlbSwgaSAp
IHsKKyAgICAgICAgICAgIHJldHVybiBjYWxsYmFjay5jYWxsKCBlbGVtLCBpLCBlbGVtICk7Cisg
ICAgICAgIH0pKTsKKyAgICB9LAorCisgICAgZW5kOiBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0
dXJuIHRoaXMucHJldk9iamVjdCB8fCB0aGlzLmNvbnN0cnVjdG9yKG51bGwpOworICAgIH0sCisK
KyAgICAvLyBGb3IgaW50ZXJuYWwgdXNlIG9ubHkuCisgICAgLy8gQmVoYXZlcyBsaWtlIGFuIEFy
cmF5J3MgbWV0aG9kLCBub3QgbGlrZSBhIGpRdWVyeSBtZXRob2QuCisgICAgcHVzaDogY29yZV9w
dXNoLAorICAgIHNvcnQ6IFtdLnNvcnQsCisgICAgc3BsaWNlOiBbXS5zcGxpY2UKK307CisKKy8v
IEdpdmUgdGhlIGluaXQgZnVuY3Rpb24gdGhlIGpRdWVyeSBwcm90b3R5cGUgZm9yIGxhdGVyIGlu
c3RhbnRpYXRpb24KK2pRdWVyeS5mbi5pbml0LnByb3RvdHlwZSA9IGpRdWVyeS5mbjsKKworalF1
ZXJ5LmV4dGVuZCA9IGpRdWVyeS5mbi5leHRlbmQgPSBmdW5jdGlvbigpIHsKKyAgICB2YXIgb3B0
aW9ucywgbmFtZSwgc3JjLCBjb3B5LCBjb3B5SXNBcnJheSwgY2xvbmUsCisgICAgICAgIHRhcmdl
dCA9IGFyZ3VtZW50c1swXSB8fCB7fSwKKyAgICAgICAgaSA9IDEsCisgICAgICAgIGxlbmd0aCA9
IGFyZ3VtZW50cy5sZW5ndGgsCisgICAgICAgIGRlZXAgPSBmYWxzZTsKKworICAgIC8vIEhhbmRs
ZSBhIGRlZXAgY29weSBzaXR1YXRpb24KKyAgICBpZiAoIHR5cGVvZiB0YXJnZXQgPT09ICJib29s
ZWFuIiApIHsKKyAgICAgICAgZGVlcCA9IHRhcmdldDsKKyAgICAgICAgdGFyZ2V0ID0gYXJndW1l
bnRzWzFdIHx8IHt9OworICAgICAgICAvLyBza2lwIHRoZSBib29sZWFuIGFuZCB0aGUgdGFyZ2V0
CisgICAgICAgIGkgPSAyOworICAgIH0KKworICAgIC8vIEhhbmRsZSBjYXNlIHdoZW4gdGFyZ2V0
IGlzIGEgc3RyaW5nIG9yIHNvbWV0aGluZyAocG9zc2libGUgaW4gZGVlcCBjb3B5KQorICAgIGlm
ICggdHlwZW9mIHRhcmdldCAhPT0gIm9iamVjdCIgJiYgIWpRdWVyeS5pc0Z1bmN0aW9uKHRhcmdl
dCkgKSB7CisgICAgICAgIHRhcmdldCA9IHt9OworICAgIH0KKworICAgIC8vIGV4dGVuZCBqUXVl
cnkgaXRzZWxmIGlmIG9ubHkgb25lIGFyZ3VtZW50IGlzIHBhc3NlZAorICAgIGlmICggbGVuZ3Ro
ID09PSBpICkgeworICAgICAgICB0YXJnZXQgPSB0aGlzOworICAgICAgICAtLWk7CisgICAgfQor
CisgICAgZm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7CisgICAgICAgIC8vIE9ubHkgZGVhbCB3
aXRoIG5vbi1udWxsL3VuZGVmaW5lZCB2YWx1ZXMKKyAgICAgICAgaWYgKCAob3B0aW9ucyA9IGFy
Z3VtZW50c1sgaSBdKSAhPSBudWxsICkgeworICAgICAgICAgICAgLy8gRXh0ZW5kIHRoZSBiYXNl
IG9iamVjdAorICAgICAgICAgICAgZm9yICggbmFtZSBpbiBvcHRpb25zICkgeworICAgICAgICAg
ICAgICAgIHNyYyA9IHRhcmdldFsgbmFtZSBdOworICAgICAgICAgICAgICAgIGNvcHkgPSBvcHRp
b25zWyBuYW1lIF07CisKKyAgICAgICAgICAgICAgICAvLyBQcmV2ZW50IG5ldmVyLWVuZGluZyBs
b29wCisgICAgICAgICAgICAgICAgaWYgKCB0YXJnZXQgPT09IGNvcHkgKSB7CisgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
IC8vIFJlY3Vyc2UgaWYgd2UncmUgbWVyZ2luZyBwbGFpbiBvYmplY3RzIG9yIGFycmF5cworICAg
ICAgICAgICAgICAgIGlmICggZGVlcCAmJiBjb3B5ICYmICggalF1ZXJ5LmlzUGxhaW5PYmplY3Qo
Y29weSkgfHwgKGNvcHlJc0FycmF5ID0galF1ZXJ5LmlzQXJyYXkoY29weSkpICkgKSB7CisgICAg
ICAgICAgICAgICAgICAgIGlmICggY29weUlzQXJyYXkgKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBjb3B5SXNBcnJheSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgY2xvbmUg
PSBzcmMgJiYgalF1ZXJ5LmlzQXJyYXkoc3JjKSA/IHNyYyA6IFtdOworCisgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjbG9uZSA9IHNyYyAmJiBq
UXVlcnkuaXNQbGFpbk9iamVjdChzcmMpID8gc3JjIDoge307CisgICAgICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgICAgICAvLyBOZXZlciBtb3ZlIG9yaWdpbmFsIG9iamVjdHMs
IGNsb25lIHRoZW0KKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0WyBuYW1lIF0gPSBqUXVlcnku
ZXh0ZW5kKCBkZWVwLCBjbG9uZSwgY29weSApOworCisgICAgICAgICAgICAgICAgLy8gRG9uJ3Qg
YnJpbmcgaW4gdW5kZWZpbmVkIHZhbHVlcworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIGNv
cHkgIT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0WyBuYW1lIF0g
PSBjb3B5OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KKworICAgIC8vIFJldHVybiB0aGUgbW9kaWZpZWQgb2JqZWN0CisgICAgcmV0dXJuIHRhcmdl
dDsKK307CisKK2pRdWVyeS5leHRlbmQoeworICAgIG5vQ29uZmxpY3Q6IGZ1bmN0aW9uKCBkZWVw
ICkgeworICAgICAgICBpZiAoIHdpbmRvdy4kID09PSBqUXVlcnkgKSB7CisgICAgICAgICAgICB3
aW5kb3cuJCA9IF8kOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCBkZWVwICYmIHdpbmRvdy5q
UXVlcnkgPT09IGpRdWVyeSApIHsKKyAgICAgICAgICAgIHdpbmRvdy5qUXVlcnkgPSBfalF1ZXJ5
OworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGpRdWVyeTsKKyAgICB9LAorCisgICAgLy8g
SXMgdGhlIERPTSByZWFkeSB0byBiZSB1c2VkPyBTZXQgdG8gdHJ1ZSBvbmNlIGl0IG9jY3Vycy4K
KyAgICBpc1JlYWR5OiBmYWxzZSwKKworICAgIC8vIEEgY291bnRlciB0byB0cmFjayBob3cgbWFu
eSBpdGVtcyB0byB3YWl0IGZvciBiZWZvcmUKKyAgICAvLyB0aGUgcmVhZHkgZXZlbnQgZmlyZXMu
IFNlZSAjNjc4MQorICAgIHJlYWR5V2FpdDogMSwKKworICAgIC8vIEhvbGQgKG9yIHJlbGVhc2Up
IHRoZSByZWFkeSBldmVudAorICAgIGhvbGRSZWFkeTogZnVuY3Rpb24oIGhvbGQgKSB7CisgICAg
ICAgIGlmICggaG9sZCApIHsKKyAgICAgICAgICAgIGpRdWVyeS5yZWFkeVdhaXQrKzsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGpRdWVyeS5yZWFkeSggdHJ1ZSApOworICAgICAgICB9
CisgICAgfSwKKworICAgIC8vIEhhbmRsZSB3aGVuIHRoZSBET00gaXMgcmVhZHkKKyAgICByZWFk
eTogZnVuY3Rpb24oIHdhaXQgKSB7CisKKyAgICAgICAgLy8gQWJvcnQgaWYgdGhlcmUgYXJlIHBl
bmRpbmcgaG9sZHMgb3Igd2UncmUgYWxyZWFkeSByZWFkeQorICAgICAgICBpZiAoIHdhaXQgPT09
IHRydWUgPyAtLWpRdWVyeS5yZWFkeVdhaXQgOiBqUXVlcnkuaXNSZWFkeSApIHsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE1ha2Ugc3VyZSBib2R5IGV4aXN0
cywgYXQgbGVhc3QsIGluIGNhc2UgSUUgZ2V0cyBhIGxpdHRsZSBvdmVyemVhbG91cyAodGlja2V0
ICM1NDQzKS4KKyAgICAgICAgaWYgKCAhZG9jdW1lbnQuYm9keSApIHsKKyAgICAgICAgICAgIHJl
dHVybiBzZXRUaW1lb3V0KCBqUXVlcnkucmVhZHksIDEgKTsKKyAgICAgICAgfQorCisgICAgICAg
IC8vIFJlbWVtYmVyIHRoYXQgdGhlIERPTSBpcyByZWFkeQorICAgICAgICBqUXVlcnkuaXNSZWFk
eSA9IHRydWU7CisKKyAgICAgICAgLy8gSWYgYSBub3JtYWwgRE9NIFJlYWR5IGV2ZW50IGZpcmVk
LCBkZWNyZW1lbnQsIGFuZCB3YWl0IGlmIG5lZWQgYmUKKyAgICAgICAgaWYgKCB3YWl0ICE9PSB0
cnVlICYmIC0talF1ZXJ5LnJlYWR5V2FpdCA+IDAgKSB7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKworICAgICAgICAvLyBJZiB0aGVyZSBhcmUgZnVuY3Rpb25zIGJvdW5kLCB0byBl
eGVjdXRlCisgICAgICAgIHJlYWR5TGlzdC5yZXNvbHZlV2l0aCggZG9jdW1lbnQsIFsgalF1ZXJ5
IF0gKTsKKworICAgICAgICAvLyBUcmlnZ2VyIGFueSBib3VuZCByZWFkeSBldmVudHMKKyAgICAg
ICAgaWYgKCBqUXVlcnkuZm4udHJpZ2dlciApIHsKKyAgICAgICAgICAgIGpRdWVyeSggZG9jdW1l
bnQgKS50cmlnZ2VyKCJyZWFkeSIpLm9mZigicmVhZHkiKTsKKyAgICAgICAgfQorICAgIH0sCisK
KyAgICAvLyBTZWUgdGVzdC91bml0L2NvcmUuanMgZm9yIGRldGFpbHMgY29uY2VybmluZyBpc0Z1
bmN0aW9uLgorICAgIC8vIFNpbmNlIHZlcnNpb24gMS4zLCBET00gbWV0aG9kcyBhbmQgZnVuY3Rp
b25zIGxpa2UgYWxlcnQKKyAgICAvLyBhcmVuJ3Qgc3VwcG9ydGVkLiBUaGV5IHJldHVybiBmYWxz
ZSBvbiBJRSAoIzI5NjgpLgorICAgIGlzRnVuY3Rpb246IGZ1bmN0aW9uKCBvYmogKSB7CisgICAg
ICAgIHJldHVybiBqUXVlcnkudHlwZShvYmopID09PSAiZnVuY3Rpb24iOworICAgIH0sCisKKyAg
ICBpc0FycmF5OiBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uKCBvYmogKSB7CisgICAgICAgIHJl
dHVybiBqUXVlcnkudHlwZShvYmopID09PSAiYXJyYXkiOworICAgIH0sCisKKyAgICBpc1dpbmRv
dzogZnVuY3Rpb24oIG9iaiApIHsKKyAgICAgICAgcmV0dXJuIG9iaiAhPSBudWxsICYmIG9iaiA9
PSBvYmoud2luZG93OworICAgIH0sCisKKyAgICBpc051bWVyaWM6IGZ1bmN0aW9uKCBvYmogKSB7
CisgICAgICAgIHJldHVybiAhaXNOYU4oIHBhcnNlRmxvYXQob2JqKSApICYmIGlzRmluaXRlKCBv
YmogKTsKKyAgICB9LAorCisgICAgdHlwZTogZnVuY3Rpb24oIG9iaiApIHsKKyAgICAgICAgcmV0
dXJuIG9iaiA9PSBudWxsID8KKyAgICAgICAgICAgIFN0cmluZyggb2JqICkgOgorICAgICAgICAg
ICAgY2xhc3MydHlwZVsgY29yZV90b1N0cmluZy5jYWxsKG9iaikgXSB8fCAib2JqZWN0IjsKKyAg
ICB9LAorCisgICAgaXNQbGFpbk9iamVjdDogZnVuY3Rpb24oIG9iaiApIHsKKyAgICAgICAgLy8g
TXVzdCBiZSBhbiBPYmplY3QuCisgICAgICAgIC8vIEJlY2F1c2Ugb2YgSUUsIHdlIGFsc28gaGF2
ZSB0byBjaGVjayB0aGUgcHJlc2VuY2Ugb2YgdGhlIGNvbnN0cnVjdG9yIHByb3BlcnR5LgorICAg
ICAgICAvLyBNYWtlIHN1cmUgdGhhdCBET00gbm9kZXMgYW5kIHdpbmRvdyBvYmplY3RzIGRvbid0
IHBhc3MgdGhyb3VnaCwgYXMgd2VsbAorICAgICAgICBpZiAoICFvYmogfHwgalF1ZXJ5LnR5cGUo
b2JqKSAhPT0gIm9iamVjdCIgfHwgb2JqLm5vZGVUeXBlIHx8IGpRdWVyeS5pc1dpbmRvdyggb2Jq
ICkgKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICB0
cnkgeworICAgICAgICAgICAgLy8gTm90IG93biBjb25zdHJ1Y3RvciBwcm9wZXJ0eSBtdXN0IGJl
IE9iamVjdAorICAgICAgICAgICAgaWYgKCBvYmouY29uc3RydWN0b3IgJiYKKyAgICAgICAgICAg
ICAgICAhY29yZV9oYXNPd24uY2FsbChvYmosICJjb25zdHJ1Y3RvciIpICYmCisgICAgICAgICAg
ICAgICAgIWNvcmVfaGFzT3duLmNhbGwob2JqLmNvbnN0cnVjdG9yLnByb3RvdHlwZSwgImlzUHJv
dG90eXBlT2YiKSApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0gY2F0Y2ggKCBlICkgeworICAgICAgICAgICAgLy8gSUU4LDkgV2lsbCB0
aHJvdyBleGNlcHRpb25zIG9uIGNlcnRhaW4gaG9zdCBvYmplY3RzICM5ODk3CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICAvLyBPd24gcHJvcGVydGllcyBh
cmUgZW51bWVyYXRlZCBmaXJzdGx5LCBzbyB0byBzcGVlZCB1cCwKKyAgICAgICAgLy8gaWYgbGFz
dCBvbmUgaXMgb3duLCB0aGVuIGFsbCBwcm9wZXJ0aWVzIGFyZSBvd24uCisKKyAgICAgICAgdmFy
IGtleTsKKyAgICAgICAgZm9yICgga2V5IGluIG9iaiApIHt9CisKKyAgICAgICAgcmV0dXJuIGtl
eSA9PT0gdW5kZWZpbmVkIHx8IGNvcmVfaGFzT3duLmNhbGwoIG9iaiwga2V5ICk7CisgICAgfSwK
KworICAgIGlzRW1wdHlPYmplY3Q6IGZ1bmN0aW9uKCBvYmogKSB7CisgICAgICAgIHZhciBuYW1l
OworICAgICAgICBmb3IgKCBuYW1lIGluIG9iaiApIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9LAorCisgICAgZXJyb3I6
IGZ1bmN0aW9uKCBtc2cgKSB7CisgICAgICAgIHRocm93IG5ldyBFcnJvciggbXNnICk7CisgICAg
fSwKKworICAgIC8vIGRhdGE6IHN0cmluZyBvZiBodG1sCisgICAgLy8gY29udGV4dCAob3B0aW9u
YWwpOiBJZiBzcGVjaWZpZWQsIHRoZSBmcmFnbWVudCB3aWxsIGJlIGNyZWF0ZWQgaW4gdGhpcyBj
b250ZXh0LCBkZWZhdWx0cyB0byBkb2N1bWVudAorICAgIC8vIHNjcmlwdHMgKG9wdGlvbmFsKTog
SWYgdHJ1ZSwgd2lsbCBpbmNsdWRlIHNjcmlwdHMgcGFzc2VkIGluIHRoZSBodG1sIHN0cmluZwor
ICAgIHBhcnNlSFRNTDogZnVuY3Rpb24oIGRhdGEsIGNvbnRleHQsIHNjcmlwdHMgKSB7CisgICAg
ICAgIHZhciBwYXJzZWQ7CisgICAgICAgIGlmICggIWRhdGEgfHwgdHlwZW9mIGRhdGEgIT09ICJz
dHJpbmciICkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKCB0eXBlb2YgY29udGV4dCA9PT0gImJvb2xlYW4iICkgeworICAgICAgICAgICAgc2NyaXB0
cyA9IGNvbnRleHQ7CisgICAgICAgICAgICBjb250ZXh0ID0gMDsKKyAgICAgICAgfQorICAgICAg
ICBjb250ZXh0ID0gY29udGV4dCB8fCBkb2N1bWVudDsKKworICAgICAgICAvLyBTaW5nbGUgdGFn
CisgICAgICAgIGlmICggKHBhcnNlZCA9IHJzaW5nbGVUYWcuZXhlYyggZGF0YSApKSApIHsKKyAg
ICAgICAgICAgIHJldHVybiBbIGNvbnRleHQuY3JlYXRlRWxlbWVudCggcGFyc2VkWzFdICkgXTsK
KyAgICAgICAgfQorCisgICAgICAgIHBhcnNlZCA9IGpRdWVyeS5idWlsZEZyYWdtZW50KCBbIGRh
dGEgXSwgY29udGV4dCwgc2NyaXB0cyA/IG51bGwgOiBbXSApOworICAgICAgICByZXR1cm4galF1
ZXJ5Lm1lcmdlKCBbXSwKKyAgICAgICAgICAgIChwYXJzZWQuY2FjaGVhYmxlID8galF1ZXJ5LmNs
b25lKCBwYXJzZWQuZnJhZ21lbnQgKSA6IHBhcnNlZC5mcmFnbWVudCkuY2hpbGROb2RlcyApOwor
ICAgIH0sCisKKyAgICBwYXJzZUpTT046IGZ1bmN0aW9uKCBkYXRhICkgeworICAgICAgICBpZiAo
ICFkYXRhIHx8IHR5cGVvZiBkYXRhICE9PSAic3RyaW5nIikgeworICAgICAgICAgICAgcmV0dXJu
IG51bGw7CisgICAgICAgIH0KKworICAgICAgICAvLyBNYWtlIHN1cmUgbGVhZGluZy90cmFpbGlu
ZyB3aGl0ZXNwYWNlIGlzIHJlbW92ZWQgKElFIGNhbid0IGhhbmRsZSBpdCkKKyAgICAgICAgZGF0
YSA9IGpRdWVyeS50cmltKCBkYXRhICk7CisKKyAgICAgICAgLy8gQXR0ZW1wdCB0byBwYXJzZSB1
c2luZyB0aGUgbmF0aXZlIEpTT04gcGFyc2VyIGZpcnN0CisgICAgICAgIGlmICggd2luZG93LkpT
T04gJiYgd2luZG93LkpTT04ucGFyc2UgKSB7CisgICAgICAgICAgICByZXR1cm4gd2luZG93LkpT
T04ucGFyc2UoIGRhdGEgKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUg
aW5jb21pbmcgZGF0YSBpcyBhY3R1YWwgSlNPTgorICAgICAgICAvLyBMb2dpYyBib3Jyb3dlZCBm
cm9tIGh0dHA6Ly9qc29uLm9yZy9qc29uMi5qcworICAgICAgICBpZiAoIHJ2YWxpZGNoYXJzLnRl
c3QoIGRhdGEucmVwbGFjZSggcnZhbGlkZXNjYXBlLCAiQCIgKQorICAgICAgICAgICAgLnJlcGxh
Y2UoIHJ2YWxpZHRva2VucywgIl0iICkKKyAgICAgICAgICAgIC5yZXBsYWNlKCBydmFsaWRicmFj
ZXMsICIiKSkgKSB7CisKKyAgICAgICAgICAgIHJldHVybiAoIG5ldyBGdW5jdGlvbiggInJldHVy
biAiICsgZGF0YSApICkoKTsKKworICAgICAgICB9CisgICAgICAgIGpRdWVyeS5lcnJvciggIklu
dmFsaWQgSlNPTjogIiArIGRhdGEgKTsKKyAgICB9LAorCisgICAgLy8gQ3Jvc3MtYnJvd3NlciB4
bWwgcGFyc2luZworICAgIHBhcnNlWE1MOiBmdW5jdGlvbiggZGF0YSApIHsKKyAgICAgICAgdmFy
IHhtbCwgdG1wOworICAgICAgICBpZiAoICFkYXRhIHx8IHR5cGVvZiBkYXRhICE9PSAic3RyaW5n
IiApIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAgICAgIHRyeSB7
CisgICAgICAgICAgICBpZiAoIHdpbmRvdy5ET01QYXJzZXIgKSB7IC8vIFN0YW5kYXJkCisgICAg
ICAgICAgICAgICAgdG1wID0gbmV3IERPTVBhcnNlcigpOworICAgICAgICAgICAgICAgIHhtbCA9
IHRtcC5wYXJzZUZyb21TdHJpbmcoIGRhdGEgLCAidGV4dC94bWwiICk7CisgICAgICAgICAgICB9
IGVsc2UgeyAvLyBJRQorICAgICAgICAgICAgICAgIHhtbCA9IG5ldyBBY3RpdmVYT2JqZWN0KCAi
TWljcm9zb2Z0LlhNTERPTSIgKTsKKyAgICAgICAgICAgICAgICB4bWwuYXN5bmMgPSAiZmFsc2Ui
OworICAgICAgICAgICAgICAgIHhtbC5sb2FkWE1MKCBkYXRhICk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0gY2F0Y2goIGUgKSB7CisgICAgICAgICAgICB4bWwgPSB1bmRlZmluZWQ7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKCAheG1sIHx8ICF4bWwuZG9jdW1lbnRFbGVtZW50IHx8IHhtbC5n
ZXRFbGVtZW50c0J5VGFnTmFtZSggInBhcnNlcmVycm9yIiApLmxlbmd0aCApIHsKKyAgICAgICAg
ICAgIGpRdWVyeS5lcnJvciggIkludmFsaWQgWE1MOiAiICsgZGF0YSApOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiB4bWw7CisgICAgfSwKKworICAgIG5vb3A6IGZ1bmN0aW9uKCkge30sCisK
KyAgICAvLyBFdmFsdWF0ZXMgYSBzY3JpcHQgaW4gYSBnbG9iYWwgY29udGV4dAorICAgIC8vIFdv
cmthcm91bmRzIGJhc2VkIG9uIGZpbmRpbmdzIGJ5IEppbSBEcmlzY29sbAorICAgIC8vIGh0dHA6
Ly93ZWJsb2dzLmphdmEubmV0L2Jsb2cvZHJpc2NvbGwvYXJjaGl2ZS8yMDA5LzA5LzA4L2V2YWwt
amF2YXNjcmlwdC1nbG9iYWwtY29udGV4dAorICAgIGdsb2JhbEV2YWw6IGZ1bmN0aW9uKCBkYXRh
ICkgeworICAgICAgICBpZiAoIGRhdGEgJiYgY29yZV9ybm90d2hpdGUudGVzdCggZGF0YSApICkg
eworICAgICAgICAgICAgLy8gV2UgdXNlIGV4ZWNTY3JpcHQgb24gSW50ZXJuZXQgRXhwbG9yZXIK
KyAgICAgICAgICAgIC8vIFdlIHVzZSBhbiBhbm9ueW1vdXMgZnVuY3Rpb24gc28gdGhhdCBjb250
ZXh0IGlzIHdpbmRvdworICAgICAgICAgICAgLy8gcmF0aGVyIHRoYW4galF1ZXJ5IGluIEZpcmVm
b3gKKyAgICAgICAgICAgICggd2luZG93LmV4ZWNTY3JpcHQgfHwgZnVuY3Rpb24oIGRhdGEgKSB7
CisgICAgICAgICAgICAgICAgd2luZG93WyAiZXZhbCIgXS5jYWxsKCB3aW5kb3csIGRhdGEgKTsK
KyAgICAgICAgICAgIH0gKSggZGF0YSApOworICAgICAgICB9CisgICAgfSwKKworICAgIC8vIENv
bnZlcnQgZGFzaGVkIHRvIGNhbWVsQ2FzZTsgdXNlZCBieSB0aGUgY3NzIGFuZCBkYXRhIG1vZHVs
ZXMKKyAgICAvLyBNaWNyb3NvZnQgZm9yZ290IHRvIGh1bXAgdGhlaXIgdmVuZG9yIHByZWZpeCAo
Izk1NzIpCisgICAgY2FtZWxDYXNlOiBmdW5jdGlvbiggc3RyaW5nICkgeworICAgICAgICByZXR1
cm4gc3RyaW5nLnJlcGxhY2UoIHJtc1ByZWZpeCwgIm1zLSIgKS5yZXBsYWNlKCByZGFzaEFscGhh
LCBmY2FtZWxDYXNlICk7CisgICAgfSwKKworICAgIG5vZGVOYW1lOiBmdW5jdGlvbiggZWxlbSwg
bmFtZSApIHsKKyAgICAgICAgcmV0dXJuIGVsZW0ubm9kZU5hbWUgJiYgZWxlbS5ub2RlTmFtZS50
b0xvd2VyQ2FzZSgpID09PSBuYW1lLnRvTG93ZXJDYXNlKCk7CisgICAgfSwKKworICAgIC8vIGFy
Z3MgaXMgZm9yIGludGVybmFsIHVzYWdlIG9ubHkKKyAgICBlYWNoOiBmdW5jdGlvbiggb2JqLCBj
YWxsYmFjaywgYXJncyApIHsKKyAgICAgICAgdmFyIG5hbWUsCisgICAgICAgICAgICBpID0gMCwK
KyAgICAgICAgICAgIGxlbmd0aCA9IG9iai5sZW5ndGgsCisgICAgICAgICAgICBpc09iaiA9IGxl
bmd0aCA9PT0gdW5kZWZpbmVkIHx8IGpRdWVyeS5pc0Z1bmN0aW9uKCBvYmogKTsKKworICAgICAg
ICBpZiAoIGFyZ3MgKSB7CisgICAgICAgICAgICBpZiAoIGlzT2JqICkgeworICAgICAgICAgICAg
ICAgIGZvciAoIG5hbWUgaW4gb2JqICkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIGNhbGxi
YWNrLmFwcGx5KCBvYmpbIG5hbWUgXSwgYXJncyApID09PSBmYWxzZSApIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBmb3IgKCA7IGkgPCBs
ZW5ndGg7ICkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIGNhbGxiYWNrLmFwcGx5KCBvYmpb
IGkrKyBdLCBhcmdzICkgPT09IGZhbHNlICkgeworICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgLy8gQSBzcGVjaWFsLCBmYXN0LCBjYXNlIGZvciB0aGUgbW9zdCBjb21t
b24gdXNlIG9mIGVhY2gKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICggaXNPYmog
KSB7CisgICAgICAgICAgICAgICAgZm9yICggbmFtZSBpbiBvYmogKSB7CisgICAgICAgICAgICAg
ICAgICAgIGlmICggY2FsbGJhY2suY2FsbCggb2JqWyBuYW1lIF0sIG5hbWUsIG9ialsgbmFtZSBd
ICkgPT09IGZhbHNlICkgeworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgIGZvciAoIDsgaSA8IGxlbmd0aDsgKSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmICggY2FsbGJhY2suY2FsbCggb2JqWyBpIF0sIGksIG9ialsgaSsrIF0gKSA9PT0gZmFs
c2UgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIHJldHVybiBvYmo7CisgICAgfSwKKworICAgIC8vIFVzZSBuYXRpdmUgU3RyaW5nLnRyaW0g
ZnVuY3Rpb24gd2hlcmV2ZXIgcG9zc2libGUKKyAgICB0cmltOiBjb3JlX3RyaW0gJiYgIWNvcmVf
dHJpbS5jYWxsKCJcdUZFRkZceEEwIikgPworICAgICAgICBmdW5jdGlvbiggdGV4dCApIHsKKyAg
ICAgICAgICAgIHJldHVybiB0ZXh0ID09IG51bGwgPworICAgICAgICAgICAgICAgICIiIDoKKyAg
ICAgICAgICAgICAgICBjb3JlX3RyaW0uY2FsbCggdGV4dCApOworICAgICAgICB9IDoKKworICAg
ICAgICAvLyBPdGhlcndpc2UgdXNlIG91ciBvd24gdHJpbW1pbmcgZnVuY3Rpb25hbGl0eQorICAg
ICAgICBmdW5jdGlvbiggdGV4dCApIHsKKyAgICAgICAgICAgIHJldHVybiB0ZXh0ID09IG51bGwg
PworICAgICAgICAgICAgICAgICIiIDoKKyAgICAgICAgICAgICAgICAoIHRleHQgKyAiIiApLnJl
cGxhY2UoIHJ0cmltLCAiIiApOworICAgICAgICB9LAorCisgICAgLy8gcmVzdWx0cyBpcyBmb3Ig
aW50ZXJuYWwgdXNhZ2Ugb25seQorICAgIG1ha2VBcnJheTogZnVuY3Rpb24oIGFyciwgcmVzdWx0
cyApIHsKKyAgICAgICAgdmFyIHR5cGUsCisgICAgICAgICAgICByZXQgPSByZXN1bHRzIHx8IFtd
OworCisgICAgICAgIGlmICggYXJyICE9IG51bGwgKSB7CisgICAgICAgICAgICAvLyBUaGUgd2lu
ZG93LCBzdHJpbmdzIChhbmQgZnVuY3Rpb25zKSBhbHNvIGhhdmUgJ2xlbmd0aCcKKyAgICAgICAg
ICAgIC8vIFR3ZWFrZWQgbG9naWMgc2xpZ2h0bHkgdG8gaGFuZGxlIEJsYWNrYmVycnkgNC43IFJl
Z0V4cCBpc3N1ZXMgIzY5MzAKKyAgICAgICAgICAgIHR5cGUgPSBqUXVlcnkudHlwZSggYXJyICk7
CisKKyAgICAgICAgICAgIGlmICggYXJyLmxlbmd0aCA9PSBudWxsIHx8IHR5cGUgPT09ICJzdHJp
bmciIHx8IHR5cGUgPT09ICJmdW5jdGlvbiIgfHwgdHlwZSA9PT0gInJlZ2V4cCIgfHwgalF1ZXJ5
LmlzV2luZG93KCBhcnIgKSApIHsKKyAgICAgICAgICAgICAgICBjb3JlX3B1c2guY2FsbCggcmV0
LCBhcnIgKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgalF1ZXJ5Lm1l
cmdlKCByZXQsIGFyciApOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0
dXJuIHJldDsKKyAgICB9LAorCisgICAgaW5BcnJheTogZnVuY3Rpb24oIGVsZW0sIGFyciwgaSAp
IHsKKyAgICAgICAgdmFyIGxlbjsKKworICAgICAgICBpZiAoIGFyciApIHsKKyAgICAgICAgICAg
IGlmICggY29yZV9pbmRleE9mICkgeworICAgICAgICAgICAgICAgIHJldHVybiBjb3JlX2luZGV4
T2YuY2FsbCggYXJyLCBlbGVtLCBpICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGxl
biA9IGFyci5sZW5ndGg7CisgICAgICAgICAgICBpID0gaSA/IGkgPCAwID8gTWF0aC5tYXgoIDAs
IGxlbiArIGkgKSA6IGkgOiAwOworCisgICAgICAgICAgICBmb3IgKCA7IGkgPCBsZW47IGkrKyAp
IHsKKyAgICAgICAgICAgICAgICAvLyBTa2lwIGFjY2Vzc2luZyBpbiBzcGFyc2UgYXJyYXlzCisg
ICAgICAgICAgICAgICAgaWYgKCBpIGluIGFyciAmJiBhcnJbIGkgXSA9PT0gZWxlbSApIHsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0sCisKKyAgICBtZXJn
ZTogZnVuY3Rpb24oIGZpcnN0LCBzZWNvbmQgKSB7CisgICAgICAgIHZhciBsID0gc2Vjb25kLmxl
bmd0aCwKKyAgICAgICAgICAgIGkgPSBmaXJzdC5sZW5ndGgsCisgICAgICAgICAgICBqID0gMDsK
KworICAgICAgICBpZiAoIHR5cGVvZiBsID09PSAibnVtYmVyIiApIHsKKyAgICAgICAgICAgIGZv
ciAoIDsgaiA8IGw7IGorKyApIHsKKyAgICAgICAgICAgICAgICBmaXJzdFsgaSsrIF0gPSBzZWNv
bmRbIGogXTsKKyAgICAgICAgICAgIH0KKworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
d2hpbGUgKCBzZWNvbmRbal0gIT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgICAgICBmaXJz
dFsgaSsrIF0gPSBzZWNvbmRbIGorKyBdOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgICAgZmlyc3QubGVuZ3RoID0gaTsKKworICAgICAgICByZXR1cm4gZmlyc3Q7CisgICAgfSwK
KworICAgIGdyZXA6IGZ1bmN0aW9uKCBlbGVtcywgY2FsbGJhY2ssIGludiApIHsKKyAgICAgICAg
dmFyIHJldFZhbCwKKyAgICAgICAgICAgIHJldCA9IFtdLAorICAgICAgICAgICAgaSA9IDAsCisg
ICAgICAgICAgICBsZW5ndGggPSBlbGVtcy5sZW5ndGg7CisgICAgICAgIGludiA9ICEhaW52Owor
CisgICAgICAgIC8vIEdvIHRocm91Z2ggdGhlIGFycmF5LCBvbmx5IHNhdmluZyB0aGUgaXRlbXMK
KyAgICAgICAgLy8gdGhhdCBwYXNzIHRoZSB2YWxpZGF0b3IgZnVuY3Rpb24KKyAgICAgICAgZm9y
ICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7CisgICAgICAgICAgICByZXRWYWwgPSAhIWNhbGxiYWNr
KCBlbGVtc1sgaSBdLCBpICk7CisgICAgICAgICAgICBpZiAoIGludiAhPT0gcmV0VmFsICkgewor
ICAgICAgICAgICAgICAgIHJldC5wdXNoKCBlbGVtc1sgaSBdICk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICByZXR1cm4gcmV0OworICAgIH0sCisKKyAgICAvLyBhcmcgaXMg
Zm9yIGludGVybmFsIHVzYWdlIG9ubHkKKyAgICBtYXA6IGZ1bmN0aW9uKCBlbGVtcywgY2FsbGJh
Y2ssIGFyZyApIHsKKyAgICAgICAgdmFyIHZhbHVlLCBrZXksCisgICAgICAgICAgICByZXQgPSBb
XSwKKyAgICAgICAgICAgIGkgPSAwLAorICAgICAgICAgICAgbGVuZ3RoID0gZWxlbXMubGVuZ3Ro
LAorICAgICAgICAgICAgLy8ganF1ZXJ5IG9iamVjdHMgYXJlIHRyZWF0ZWQgYXMgYXJyYXlzCisg
ICAgICAgICAgICBpc0FycmF5ID0gZWxlbXMgaW5zdGFuY2VvZiBqUXVlcnkgfHwgbGVuZ3RoICE9
PSB1bmRlZmluZWQgJiYgdHlwZW9mIGxlbmd0aCA9PT0gIm51bWJlciIgJiYgKCAoIGxlbmd0aCA+
IDAgJiYgZWxlbXNbIDAgXSAmJiBlbGVtc1sgbGVuZ3RoIC0xIF0gKSB8fCBsZW5ndGggPT09IDAg
fHwgalF1ZXJ5LmlzQXJyYXkoIGVsZW1zICkgKSA7CisKKyAgICAgICAgLy8gR28gdGhyb3VnaCB0
aGUgYXJyYXksIHRyYW5zbGF0aW5nIGVhY2ggb2YgdGhlIGl0ZW1zIHRvIHRoZWlyCisgICAgICAg
IGlmICggaXNBcnJheSApIHsKKyAgICAgICAgICAgIGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkg
eworICAgICAgICAgICAgICAgIHZhbHVlID0gY2FsbGJhY2soIGVsZW1zWyBpIF0sIGksIGFyZyAp
OworCisgICAgICAgICAgICAgICAgaWYgKCB2YWx1ZSAhPSBudWxsICkgeworICAgICAgICAgICAg
ICAgICAgICByZXRbIHJldC5sZW5ndGggXSA9IHZhbHVlOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKworICAgICAgICAvLyBHbyB0aHJvdWdoIGV2ZXJ5IGtleSBvbiB0aGUgb2Jq
ZWN0LAorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZm9yICgga2V5IGluIGVsZW1zICkg
eworICAgICAgICAgICAgICAgIHZhbHVlID0gY2FsbGJhY2soIGVsZW1zWyBrZXkgXSwga2V5LCBh
cmcgKTsKKworICAgICAgICAgICAgICAgIGlmICggdmFsdWUgIT0gbnVsbCApIHsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0WyByZXQubGVuZ3RoIF0gPSB2YWx1ZTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBGbGF0dGVuIGFueSBuZXN0
ZWQgYXJyYXlzCisgICAgICAgIHJldHVybiByZXQuY29uY2F0LmFwcGx5KCBbXSwgcmV0ICk7Cisg
ICAgfSwKKworICAgIC8vIEEgZ2xvYmFsIEdVSUQgY291bnRlciBmb3Igb2JqZWN0cworICAgIGd1
aWQ6IDEsCisKKyAgICAvLyBCaW5kIGEgZnVuY3Rpb24gdG8gYSBjb250ZXh0LCBvcHRpb25hbGx5
IHBhcnRpYWxseSBhcHBseWluZyBhbnkKKyAgICAvLyBhcmd1bWVudHMuCisgICAgcHJveHk6IGZ1
bmN0aW9uKCBmbiwgY29udGV4dCApIHsKKyAgICAgICAgdmFyIHRtcCwgYXJncywgcHJveHk7CisK
KyAgICAgICAgaWYgKCB0eXBlb2YgY29udGV4dCA9PT0gInN0cmluZyIgKSB7CisgICAgICAgICAg
ICB0bXAgPSBmblsgY29udGV4dCBdOworICAgICAgICAgICAgY29udGV4dCA9IGZuOworICAgICAg
ICAgICAgZm4gPSB0bXA7CisgICAgICAgIH0KKworICAgICAgICAvLyBRdWljayBjaGVjayB0byBk
ZXRlcm1pbmUgaWYgdGFyZ2V0IGlzIGNhbGxhYmxlLCBpbiB0aGUgc3BlYworICAgICAgICAvLyB0
aGlzIHRocm93cyBhIFR5cGVFcnJvciwgYnV0IHdlIHdpbGwganVzdCByZXR1cm4gdW5kZWZpbmVk
LgorICAgICAgICBpZiAoICFqUXVlcnkuaXNGdW5jdGlvbiggZm4gKSApIHsKKyAgICAgICAgICAg
IHJldHVybiB1bmRlZmluZWQ7CisgICAgICAgIH0KKworICAgICAgICAvLyBTaW11bGF0ZWQgYmlu
ZAorICAgICAgICBhcmdzID0gY29yZV9zbGljZS5jYWxsKCBhcmd1bWVudHMsIDIgKTsKKyAgICAg
ICAgcHJveHkgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHJldHVybiBmbi5hcHBseSggY29u
dGV4dCwgYXJncy5jb25jYXQoIGNvcmVfc2xpY2UuY2FsbCggYXJndW1lbnRzICkgKSApOworICAg
ICAgICB9OworCisgICAgICAgIC8vIFNldCB0aGUgZ3VpZCBvZiB1bmlxdWUgaGFuZGxlciB0byB0
aGUgc2FtZSBvZiBvcmlnaW5hbCBoYW5kbGVyLCBzbyBpdCBjYW4gYmUgcmVtb3ZlZAorICAgICAg
ICBwcm94eS5ndWlkID0gZm4uZ3VpZCA9IGZuLmd1aWQgfHwgalF1ZXJ5Lmd1aWQrKzsKKworICAg
ICAgICByZXR1cm4gcHJveHk7CisgICAgfSwKKworICAgIC8vIE11bHRpZnVuY3Rpb25hbCBtZXRo
b2QgdG8gZ2V0IGFuZCBzZXQgdmFsdWVzIG9mIGEgY29sbGVjdGlvbgorICAgIC8vIFRoZSB2YWx1
ZS9zIGNhbiBvcHRpb25hbGx5IGJlIGV4ZWN1dGVkIGlmIGl0J3MgYSBmdW5jdGlvbgorICAgIGFj
Y2VzczogZnVuY3Rpb24oIGVsZW1zLCBmbiwga2V5LCB2YWx1ZSwgY2hhaW5hYmxlLCBlbXB0eUdl
dCwgcGFzcyApIHsKKyAgICAgICAgdmFyIGV4ZWMsCisgICAgICAgICAgICBidWxrID0ga2V5ID09
IG51bGwsCisgICAgICAgICAgICBpID0gMCwKKyAgICAgICAgICAgIGxlbmd0aCA9IGVsZW1zLmxl
bmd0aDsKKworICAgICAgICAvLyBTZXRzIG1hbnkgdmFsdWVzCisgICAgICAgIGlmICgga2V5ICYm
IHR5cGVvZiBrZXkgPT09ICJvYmplY3QiICkgeworICAgICAgICAgICAgZm9yICggaSBpbiBrZXkg
KSB7CisgICAgICAgICAgICAgICAgalF1ZXJ5LmFjY2VzcyggZWxlbXMsIGZuLCBpLCBrZXlbaV0s
IDEsIGVtcHR5R2V0LCB2YWx1ZSApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2hhaW5h
YmxlID0gMTsKKworICAgICAgICAvLyBTZXRzIG9uZSB2YWx1ZQorICAgICAgICB9IGVsc2UgaWYg
KCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgLy8gT3B0aW9uYWxseSwgZnVu
Y3Rpb24gdmFsdWVzIGdldCBleGVjdXRlZCBpZiBleGVjIGlzIHRydWUKKyAgICAgICAgICAgIGV4
ZWMgPSBwYXNzID09PSB1bmRlZmluZWQgJiYgalF1ZXJ5LmlzRnVuY3Rpb24oIHZhbHVlICk7CisK
KyAgICAgICAgICAgIGlmICggYnVsayApIHsKKyAgICAgICAgICAgICAgICAvLyBCdWxrIG9wZXJh
dGlvbnMgb25seSBpdGVyYXRlIHdoZW4gZXhlY3V0aW5nIGZ1bmN0aW9uIHZhbHVlcworICAgICAg
ICAgICAgICAgIGlmICggZXhlYyApIHsKKyAgICAgICAgICAgICAgICAgICAgZXhlYyA9IGZuOwor
ICAgICAgICAgICAgICAgICAgICBmbiA9IGZ1bmN0aW9uKCBlbGVtLCBrZXksIHZhbHVlICkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV4ZWMuY2FsbCggalF1ZXJ5KCBlbGVtICks
IHZhbHVlICk7CisgICAgICAgICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgICAgICAvLyBP
dGhlcndpc2UgdGhleSBydW4gYWdhaW5zdCB0aGUgZW50aXJlIHNldAorICAgICAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGZuLmNhbGwoIGVsZW1zLCB2YWx1ZSApOwor
ICAgICAgICAgICAgICAgICAgICBmbiA9IG51bGw7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAoIGZuICkgeworICAgICAgICAgICAgICAgIGZvciAo
OyBpIDwgbGVuZ3RoOyBpKysgKSB7CisgICAgICAgICAgICAgICAgICAgIGZuKCBlbGVtc1tpXSwg
a2V5LCBleGVjID8gdmFsdWUuY2FsbCggZWxlbXNbaV0sIGksIGZuKCBlbGVtc1tpXSwga2V5ICkg
KSA6IHZhbHVlLCBwYXNzICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBjaGFpbmFibGUgPSAxOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGNo
YWluYWJsZSA/CisgICAgICAgICAgICBlbGVtcyA6CisKKyAgICAgICAgICAgIC8vIEdldHMKKyAg
ICAgICAgICAgIGJ1bGsgPworICAgICAgICAgICAgICAgIGZuLmNhbGwoIGVsZW1zICkgOgorICAg
ICAgICAgICAgICAgIGxlbmd0aCA/IGZuKCBlbGVtc1swXSwga2V5ICkgOiBlbXB0eUdldDsKKyAg
ICB9LAorCisgICAgbm93OiBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuICggbmV3IERhdGUo
KSApLmdldFRpbWUoKTsKKyAgICB9Cit9KTsKKworalF1ZXJ5LnJlYWR5LnByb21pc2UgPSBmdW5j
dGlvbiggb2JqICkgeworICAgIGlmICggIXJlYWR5TGlzdCApIHsKKworICAgICAgICByZWFkeUxp
c3QgPSBqUXVlcnkuRGVmZXJyZWQoKTsKKworICAgICAgICAvLyBDYXRjaCBjYXNlcyB3aGVyZSAk
KGRvY3VtZW50KS5yZWFkeSgpIGlzIGNhbGxlZCBhZnRlciB0aGUgYnJvd3NlciBldmVudCBoYXMg
YWxyZWFkeSBvY2N1cnJlZC4KKyAgICAgICAgLy8gd2Ugb25jZSB0cmllZCB0byB1c2UgcmVhZHlT
dGF0ZSAiaW50ZXJhY3RpdmUiIGhlcmUsIGJ1dCBpdCBjYXVzZWQgaXNzdWVzIGxpa2UgdGhlIG9u
ZQorICAgICAgICAvLyBkaXNjb3ZlcmVkIGJ5IENocmlzUyBoZXJlOiBodHRwOi8vYnVncy5qcXVl
cnkuY29tL3RpY2tldC8xMjI4MiNjb21tZW50OjE1CisgICAgICAgIGlmICggZG9jdW1lbnQucmVh
ZHlTdGF0ZSA9PT0gImNvbXBsZXRlIiApIHsKKyAgICAgICAgICAgIC8vIEhhbmRsZSBpdCBhc3lu
Y2hyb25vdXNseSB0byBhbGxvdyBzY3JpcHRzIHRoZSBvcHBvcnR1bml0eSB0byBkZWxheSByZWFk
eQorICAgICAgICAgICAgc2V0VGltZW91dCggalF1ZXJ5LnJlYWR5LCAxICk7CisKKyAgICAgICAg
Ly8gU3RhbmRhcmRzLWJhc2VkIGJyb3dzZXJzIHN1cHBvcnQgRE9NQ29udGVudExvYWRlZAorICAg
ICAgICB9IGVsc2UgaWYgKCBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyICkgeworICAgICAgICAg
ICAgLy8gVXNlIHRoZSBoYW5keSBldmVudCBjYWxsYmFjaworICAgICAgICAgICAgZG9jdW1lbnQu
YWRkRXZlbnRMaXN0ZW5lciggIkRPTUNvbnRlbnRMb2FkZWQiLCBET01Db250ZW50TG9hZGVkLCBm
YWxzZSApOworCisgICAgICAgICAgICAvLyBBIGZhbGxiYWNrIHRvIHdpbmRvdy5vbmxvYWQsIHRo
YXQgd2lsbCBhbHdheXMgd29yaworICAgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIo
ICJsb2FkIiwgalF1ZXJ5LnJlYWR5LCBmYWxzZSApOworCisgICAgICAgIC8vIElmIElFIGV2ZW50
IG1vZGVsIGlzIHVzZWQKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIEVuc3VyZSBm
aXJpbmcgYmVmb3JlIG9ubG9hZCwgbWF5YmUgbGF0ZSBidXQgc2FmZSBhbHNvIGZvciBpZnJhbWVz
CisgICAgICAgICAgICBkb2N1bWVudC5hdHRhY2hFdmVudCggIm9ucmVhZHlzdGF0ZWNoYW5nZSIs
IERPTUNvbnRlbnRMb2FkZWQgKTsKKworICAgICAgICAgICAgLy8gQSBmYWxsYmFjayB0byB3aW5k
b3cub25sb2FkLCB0aGF0IHdpbGwgYWx3YXlzIHdvcmsKKyAgICAgICAgICAgIHdpbmRvdy5hdHRh
Y2hFdmVudCggIm9ubG9hZCIsIGpRdWVyeS5yZWFkeSApOworCisgICAgICAgICAgICAvLyBJZiBJ
RSBhbmQgbm90IGEgZnJhbWUKKyAgICAgICAgICAgIC8vIGNvbnRpbnVhbGx5IGNoZWNrIHRvIHNl
ZSBpZiB0aGUgZG9jdW1lbnQgaXMgcmVhZHkKKyAgICAgICAgICAgIHZhciB0b3AgPSBmYWxzZTsK
KworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICB0b3AgPSB3aW5kb3cuZnJhbWVF
bGVtZW50ID09IG51bGwgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50OworICAgICAgICAgICAg
fSBjYXRjaChlKSB7fQorCisgICAgICAgICAgICBpZiAoIHRvcCAmJiB0b3AuZG9TY3JvbGwgKSB7
CisgICAgICAgICAgICAgICAgKGZ1bmN0aW9uIGRvU2Nyb2xsQ2hlY2soKSB7CisgICAgICAgICAg
ICAgICAgICAgIGlmICggIWpRdWVyeS5pc1JlYWR5ICkgeworCisgICAgICAgICAgICAgICAgICAg
ICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVzZSB0aGUgdHJpY2sg
YnkgRGllZ28gUGVyaW5pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaHR0cDovL2ph
dmFzY3JpcHQubndib3guY29tL0lFQ29udGVudExvYWRlZC8KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0b3AuZG9TY3JvbGwoImxlZnQiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0g
Y2F0Y2goZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZXRUaW1lb3V0
KCBkb1Njcm9sbENoZWNrLCA1MCApOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBhbmQgZXhlY3V0ZSBhbnkgd2FpdGluZyBmdW5jdGlvbnMK
KyAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5yZWFkeSgpOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgfSkoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KKyAgICByZXR1cm4gcmVhZHlMaXN0LnByb21pc2UoIG9iaiApOworfTsKKworLy8gUG9w
dWxhdGUgdGhlIGNsYXNzMnR5cGUgbWFwCitqUXVlcnkuZWFjaCgiQm9vbGVhbiBOdW1iZXIgU3Ry
aW5nIEZ1bmN0aW9uIEFycmF5IERhdGUgUmVnRXhwIE9iamVjdCIuc3BsaXQoIiAiKSwgZnVuY3Rp
b24oaSwgbmFtZSkgeworICAgIGNsYXNzMnR5cGVbICJbb2JqZWN0ICIgKyBuYW1lICsgIl0iIF0g
PSBuYW1lLnRvTG93ZXJDYXNlKCk7Cit9KTsKKworLy8gQWxsIGpRdWVyeSBvYmplY3RzIHNob3Vs
ZCBwb2ludCBiYWNrIHRvIHRoZXNlCityb290alF1ZXJ5ID0galF1ZXJ5KGRvY3VtZW50KTsKKy8v
IFN0cmluZyB0byBPYmplY3Qgb3B0aW9ucyBmb3JtYXQgY2FjaGUKK3ZhciBvcHRpb25zQ2FjaGUg
PSB7fTsKKworLy8gQ29udmVydCBTdHJpbmctZm9ybWF0dGVkIG9wdGlvbnMgaW50byBPYmplY3Qt
Zm9ybWF0dGVkIG9uZXMgYW5kIHN0b3JlIGluIGNhY2hlCitmdW5jdGlvbiBjcmVhdGVPcHRpb25z
KCBvcHRpb25zICkgeworICAgIHZhciBvYmplY3QgPSBvcHRpb25zQ2FjaGVbIG9wdGlvbnMgXSA9
IHt9OworICAgIGpRdWVyeS5lYWNoKCBvcHRpb25zLnNwbGl0KCBjb3JlX3JzcGFjZSApLCBmdW5j
dGlvbiggXywgZmxhZyApIHsKKyAgICAgICAgb2JqZWN0WyBmbGFnIF0gPSB0cnVlOworICAgIH0p
OworICAgIHJldHVybiBvYmplY3Q7Cit9CisKKy8qCisgKiBDcmVhdGUgYSBjYWxsYmFjayBsaXN0
IHVzaW5nIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVyczoKKyAqCisgKiAgICBvcHRpb25zOiBhbiBv
cHRpb25hbCBsaXN0IG9mIHNwYWNlLXNlcGFyYXRlZCBvcHRpb25zIHRoYXQgd2lsbCBjaGFuZ2Ug
aG93CisgKiAgICAgICAgICAgIHRoZSBjYWxsYmFjayBsaXN0IGJlaGF2ZXMgb3IgYSBtb3JlIHRy
YWRpdGlvbmFsIG9wdGlvbiBvYmplY3QKKyAqCisgKiBCeSBkZWZhdWx0IGEgY2FsbGJhY2sgbGlz
dCB3aWxsIGFjdCBsaWtlIGFuIGV2ZW50IGNhbGxiYWNrIGxpc3QgYW5kIGNhbiBiZQorICogImZp
cmVkIiBtdWx0aXBsZSB0aW1lcy4KKyAqCisgKiBQb3NzaWJsZSBvcHRpb25zOgorICoKKyAqICAg
IG9uY2U6ICAgICAgICAgICAgd2lsbCBlbnN1cmUgdGhlIGNhbGxiYWNrIGxpc3QgY2FuIG9ubHkg
YmUgZmlyZWQgb25jZSAobGlrZSBhIERlZmVycmVkKQorICoKKyAqICAgIG1lbW9yeTogICAgICAg
ICAgICB3aWxsIGtlZXAgdHJhY2sgb2YgcHJldmlvdXMgdmFsdWVzIGFuZCB3aWxsIGNhbGwgYW55
IGNhbGxiYWNrIGFkZGVkCisgKiAgICAgICAgICAgICAgICAgICAgYWZ0ZXIgdGhlIGxpc3QgaGFz
IGJlZW4gZmlyZWQgcmlnaHQgYXdheSB3aXRoIHRoZSBsYXRlc3QgIm1lbW9yaXplZCIKKyAqICAg
ICAgICAgICAgICAgICAgICB2YWx1ZXMgKGxpa2UgYSBEZWZlcnJlZCkKKyAqCisgKiAgICB1bmlx
dWU6ICAgICAgICAgICAgd2lsbCBlbnN1cmUgYSBjYWxsYmFjayBjYW4gb25seSBiZSBhZGRlZCBv
bmNlIChubyBkdXBsaWNhdGUgaW4gdGhlIGxpc3QpCisgKgorICogICAgc3RvcE9uRmFsc2U6ICAg
IGludGVycnVwdCBjYWxsaW5ncyB3aGVuIGEgY2FsbGJhY2sgcmV0dXJucyBmYWxzZQorICoKKyAq
LworalF1ZXJ5LkNhbGxiYWNrcyA9IGZ1bmN0aW9uKCBvcHRpb25zICkgeworCisgICAgLy8gQ29u
dmVydCBvcHRpb25zIGZyb20gU3RyaW5nLWZvcm1hdHRlZCB0byBPYmplY3QtZm9ybWF0dGVkIGlm
IG5lZWRlZAorICAgIC8vICh3ZSBjaGVjayBpbiBjYWNoZSBmaXJzdCkKKyAgICBvcHRpb25zID0g
dHlwZW9mIG9wdGlvbnMgPT09ICJzdHJpbmciID8KKyAgICAgICAgKCBvcHRpb25zQ2FjaGVbIG9w
dGlvbnMgXSB8fCBjcmVhdGVPcHRpb25zKCBvcHRpb25zICkgKSA6CisgICAgICAgIGpRdWVyeS5l
eHRlbmQoIHt9LCBvcHRpb25zICk7CisKKyAgICB2YXIgLy8gTGFzdCBmaXJlIHZhbHVlIChmb3Ig
bm9uLWZvcmdldHRhYmxlIGxpc3RzKQorICAgICAgICBtZW1vcnksCisgICAgICAgIC8vIEZsYWcg
dG8ga25vdyBpZiBsaXN0IHdhcyBhbHJlYWR5IGZpcmVkCisgICAgICAgIGZpcmVkLAorICAgICAg
ICAvLyBGbGFnIHRvIGtub3cgaWYgbGlzdCBpcyBjdXJyZW50bHkgZmlyaW5nCisgICAgICAgIGZp
cmluZywKKyAgICAgICAgLy8gRmlyc3QgY2FsbGJhY2sgdG8gZmlyZSAodXNlZCBpbnRlcm5hbGx5
IGJ5IGFkZCBhbmQgZmlyZVdpdGgpCisgICAgICAgIGZpcmluZ1N0YXJ0LAorICAgICAgICAvLyBF
bmQgb2YgdGhlIGxvb3Agd2hlbiBmaXJpbmcKKyAgICAgICAgZmlyaW5nTGVuZ3RoLAorICAgICAg
ICAvLyBJbmRleCBvZiBjdXJyZW50bHkgZmlyaW5nIGNhbGxiYWNrIChtb2RpZmllZCBieSByZW1v
dmUgaWYgbmVlZGVkKQorICAgICAgICBmaXJpbmdJbmRleCwKKyAgICAgICAgLy8gQWN0dWFsIGNh
bGxiYWNrIGxpc3QKKyAgICAgICAgbGlzdCA9IFtdLAorICAgICAgICAvLyBTdGFjayBvZiBmaXJl
IGNhbGxzIGZvciByZXBlYXRhYmxlIGxpc3RzCisgICAgICAgIHN0YWNrID0gIW9wdGlvbnMub25j
ZSAmJiBbXSwKKyAgICAgICAgLy8gRmlyZSBjYWxsYmFja3MKKyAgICAgICAgZmlyZSA9IGZ1bmN0
aW9uKCBkYXRhICkgeworICAgICAgICAgICAgbWVtb3J5ID0gb3B0aW9ucy5tZW1vcnkgJiYgZGF0
YTsKKyAgICAgICAgICAgIGZpcmVkID0gdHJ1ZTsKKyAgICAgICAgICAgIGZpcmluZ0luZGV4ID0g
ZmlyaW5nU3RhcnQgfHwgMDsKKyAgICAgICAgICAgIGZpcmluZ1N0YXJ0ID0gMDsKKyAgICAgICAg
ICAgIGZpcmluZ0xlbmd0aCA9IGxpc3QubGVuZ3RoOworICAgICAgICAgICAgZmlyaW5nID0gdHJ1
ZTsKKyAgICAgICAgICAgIGZvciAoIDsgbGlzdCAmJiBmaXJpbmdJbmRleCA8IGZpcmluZ0xlbmd0
aDsgZmlyaW5nSW5kZXgrKyApIHsKKyAgICAgICAgICAgICAgICBpZiAoIGxpc3RbIGZpcmluZ0lu
ZGV4IF0uYXBwbHkoIGRhdGFbIDAgXSwgZGF0YVsgMSBdICkgPT09IGZhbHNlICYmIG9wdGlvbnMu
c3RvcE9uRmFsc2UgKSB7CisgICAgICAgICAgICAgICAgICAgIG1lbW9yeSA9IGZhbHNlOyAvLyBU
byBwcmV2ZW50IGZ1cnRoZXIgY2FsbHMgdXNpbmcgYWRkCisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZpcmlu
ZyA9IGZhbHNlOworICAgICAgICAgICAgaWYgKCBsaXN0ICkgeworICAgICAgICAgICAgICAgIGlm
ICggc3RhY2sgKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICggc3RhY2subGVuZ3RoICkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgZmlyZSggc3RhY2suc2hpZnQoKSApOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggbWVtb3J5ICkgeworICAg
ICAgICAgICAgICAgICAgICBsaXN0ID0gW107CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgc2VsZi5kaXNhYmxlKCk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICB9LAorICAgICAgICAvLyBBY3R1YWwgQ2FsbGJhY2tzIG9iamVj
dAorICAgICAgICBzZWxmID0geworICAgICAgICAgICAgLy8gQWRkIGEgY2FsbGJhY2sgb3IgYSBj
b2xsZWN0aW9uIG9mIGNhbGxiYWNrcyB0byB0aGUgbGlzdAorICAgICAgICAgICAgYWRkOiBmdW5j
dGlvbigpIHsKKyAgICAgICAgICAgICAgICBpZiAoIGxpc3QgKSB7CisgICAgICAgICAgICAgICAg
ICAgIC8vIEZpcnN0LCB3ZSBzYXZlIHRoZSBjdXJyZW50IGxlbmd0aAorICAgICAgICAgICAgICAg
ICAgICB2YXIgc3RhcnQgPSBsaXN0Lmxlbmd0aDsKKyAgICAgICAgICAgICAgICAgICAgKGZ1bmN0
aW9uIGFkZCggYXJncyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5lYWNoKCBh
cmdzLCBmdW5jdGlvbiggXywgYXJnICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZh
ciB0eXBlID0galF1ZXJ5LnR5cGUoIGFyZyApOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICggdHlwZSA9PT0gImZ1bmN0aW9uIiApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCAhb3B0aW9ucy51bmlxdWUgfHwgIXNlbGYuaGFzKCBhcmcgKSApIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QucHVzaCggYXJnICk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgaWYgKCBhcmcgJiYgYXJnLmxlbmd0aCAmJiB0eXBlICE9PSAic3RyaW5nIiApIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW5zcGVjdCByZWN1cnNpdmVseQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGQoIGFyZyApOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAg
ICAgICAgICB9KSggYXJndW1lbnRzICk7CisgICAgICAgICAgICAgICAgICAgIC8vIERvIHdlIG5l
ZWQgdG8gYWRkIHRoZSBjYWxsYmFja3MgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgIC8vIGN1
cnJlbnQgZmlyaW5nIGJhdGNoPworICAgICAgICAgICAgICAgICAgICBpZiAoIGZpcmluZyApIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGZpcmluZ0xlbmd0aCA9IGxpc3QubGVuZ3RoOworICAg
ICAgICAgICAgICAgICAgICAvLyBXaXRoIG1lbW9yeSwgaWYgd2UncmUgbm90IGZpcmluZyB0aGVu
CisgICAgICAgICAgICAgICAgICAgIC8vIHdlIHNob3VsZCBjYWxsIHJpZ2h0IGF3YXkKKyAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIGlmICggbWVtb3J5ICkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgZmlyaW5nU3RhcnQgPSBzdGFydDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpcmUo
IG1lbW9yeSApOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIC8v
IFJlbW92ZSBhIGNhbGxiYWNrIGZyb20gdGhlIGxpc3QKKyAgICAgICAgICAgIHJlbW92ZTogZnVu
Y3Rpb24oKSB7CisgICAgICAgICAgICAgICAgaWYgKCBsaXN0ICkgeworICAgICAgICAgICAgICAg
ICAgICBqUXVlcnkuZWFjaCggYXJndW1lbnRzLCBmdW5jdGlvbiggXywgYXJnICkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgdmFyIGluZGV4OworICAgICAgICAgICAgICAgICAgICAgICAgd2hp
bGUoICggaW5kZXggPSBqUXVlcnkuaW5BcnJheSggYXJnLCBsaXN0LCBpbmRleCApICkgPiAtMSAp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0LnNwbGljZSggaW5kZXgsIDEgKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBIYW5kbGUgZmlyaW5nIGluZGV4ZXMKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGZpcmluZyApIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCBpbmRleCA8PSBmaXJpbmdMZW5ndGggKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJpbmdMZW5ndGgtLTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIGluZGV4IDw9IGZpcmluZ0luZGV4ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZmlyaW5nSW5kZXgtLTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIC8vIENvbnRy
b2wgaWYgYSBnaXZlbiBjYWxsYmFjayBpcyBpbiB0aGUgbGlzdAorICAgICAgICAgICAgaGFzOiBm
dW5jdGlvbiggZm4gKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5pbkFycmF5KCBm
biwgbGlzdCApID4gLTE7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgLy8gUmVtb3ZlIGFs
bCBjYWxsYmFja3MgZnJvbSB0aGUgbGlzdAorICAgICAgICAgICAgZW1wdHk6IGZ1bmN0aW9uKCkg
eworICAgICAgICAgICAgICAgIGxpc3QgPSBbXTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhp
czsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICAvLyBIYXZlIHRoZSBsaXN0IGRvIG5vdGhp
bmcgYW55bW9yZQorICAgICAgICAgICAgZGlzYWJsZTogZnVuY3Rpb24oKSB7CisgICAgICAgICAg
ICAgICAgbGlzdCA9IHN0YWNrID0gbWVtb3J5ID0gdW5kZWZpbmVkOworICAgICAgICAgICAgICAg
IHJldHVybiB0aGlzOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIC8vIElzIGl0IGRpc2Fi
bGVkPworICAgICAgICAgICAgZGlzYWJsZWQ6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAg
IHJldHVybiAhbGlzdDsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICAvLyBMb2NrIHRoZSBs
aXN0IGluIGl0cyBjdXJyZW50IHN0YXRlCisgICAgICAgICAgICBsb2NrOiBmdW5jdGlvbigpIHsK
KyAgICAgICAgICAgICAgICBzdGFjayA9IHVuZGVmaW5lZDsKKyAgICAgICAgICAgICAgICBpZiAo
ICFtZW1vcnkgKSB7CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZGlzYWJsZSgpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgIH0s
CisgICAgICAgICAgICAvLyBJcyBpdCBsb2NrZWQ/CisgICAgICAgICAgICBsb2NrZWQ6IGZ1bmN0
aW9uKCkgeworICAgICAgICAgICAgICAgIHJldHVybiAhc3RhY2s7CisgICAgICAgICAgICB9LAor
ICAgICAgICAgICAgLy8gQ2FsbCBhbGwgY2FsbGJhY2tzIHdpdGggdGhlIGdpdmVuIGNvbnRleHQg
YW5kIGFyZ3VtZW50cworICAgICAgICAgICAgZmlyZVdpdGg6IGZ1bmN0aW9uKCBjb250ZXh0LCBh
cmdzICkgeworICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzIHx8IFtdOworICAgICAgICAgICAg
ICAgIGFyZ3MgPSBbIGNvbnRleHQsIGFyZ3Muc2xpY2UgPyBhcmdzLnNsaWNlKCkgOiBhcmdzIF07
CisgICAgICAgICAgICAgICAgaWYgKCBsaXN0ICYmICggIWZpcmVkIHx8IHN0YWNrICkgKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGlmICggZmlyaW5nICkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgc3RhY2sucHVzaCggYXJncyApOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICAgICAgZmlyZSggYXJncyApOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAg
ICAgICAgfSwKKyAgICAgICAgICAgIC8vIENhbGwgYWxsIHRoZSBjYWxsYmFja3Mgd2l0aCB0aGUg
Z2l2ZW4gYXJndW1lbnRzCisgICAgICAgICAgICBmaXJlOiBmdW5jdGlvbigpIHsKKyAgICAgICAg
ICAgICAgICBzZWxmLmZpcmVXaXRoKCB0aGlzLCBhcmd1bWVudHMgKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICAvLyBUbyBrbm93IGlm
IHRoZSBjYWxsYmFja3MgaGF2ZSBhbHJlYWR5IGJlZW4gY2FsbGVkIGF0IGxlYXN0IG9uY2UKKyAg
ICAgICAgICAgIGZpcmVkOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gISFm
aXJlZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgIHJldHVybiBzZWxmOworfTsK
K2pRdWVyeS5leHRlbmQoeworCisgICAgRGVmZXJyZWQ6IGZ1bmN0aW9uKCBmdW5jICkgeworICAg
ICAgICB2YXIgdHVwbGVzID0gWworICAgICAgICAgICAgICAgIC8vIGFjdGlvbiwgYWRkIGxpc3Rl
bmVyLCBsaXN0ZW5lciBsaXN0LCBmaW5hbCBzdGF0ZQorICAgICAgICAgICAgICAgIFsgInJlc29s
dmUiLCAiZG9uZSIsIGpRdWVyeS5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IiksICJyZXNvbHZlZCIg
XSwKKyAgICAgICAgICAgICAgICBbICJyZWplY3QiLCAiZmFpbCIsIGpRdWVyeS5DYWxsYmFja3Mo
Im9uY2UgbWVtb3J5IiksICJyZWplY3RlZCIgXSwKKyAgICAgICAgICAgICAgICBbICJub3RpZnki
LCAicHJvZ3Jlc3MiLCBqUXVlcnkuQ2FsbGJhY2tzKCJtZW1vcnkiKSBdCisgICAgICAgICAgICBd
LAorICAgICAgICAgICAgc3RhdGUgPSAicGVuZGluZyIsCisgICAgICAgICAgICBwcm9taXNlID0g
eworICAgICAgICAgICAgICAgIHN0YXRlOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHN0YXRlOworICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgYWx3
YXlzOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQuZG9uZSggYXJn
dW1lbnRzICkuZmFpbCggYXJndW1lbnRzICk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0
aGlzOworICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgdGhlbjogZnVuY3Rpb24o
IC8qIGZuRG9uZSwgZm5GYWlsLCBmblByb2dyZXNzICovICkgeworICAgICAgICAgICAgICAgICAg
ICB2YXIgZm5zID0gYXJndW1lbnRzOworICAgICAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5
LkRlZmVycmVkKGZ1bmN0aW9uKCBuZXdEZWZlciApIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGpRdWVyeS5lYWNoKCB0dXBsZXMsIGZ1bmN0aW9uKCBpLCB0dXBsZSApIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2YXIgYWN0aW9uID0gdHVwbGVbIDAgXSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZm4gPSBmbnNbIGkgXTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBkZWZlcnJlZFsgZG9uZSB8IGZhaWwgfCBwcm9ncmVzcyBdIGZvciBmb3J3YXJkaW5n
IGFjdGlvbnMgdG8gbmV3RGVmZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJl
ZFsgdHVwbGVbMV0gXSggalF1ZXJ5LmlzRnVuY3Rpb24oIGZuICkgPworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZhciByZXR1cm5lZCA9IGZuLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcmV0dXJuZWQgJiYgalF1ZXJ5
LmlzRnVuY3Rpb24oIHJldHVybmVkLnByb21pc2UgKSApIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm5lZC5wcm9taXNlKCkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLmRvbmUoIG5ld0RlZmVyLnJlc29sdmUgKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZmFpbCggbmV3RGVmZXIu
cmVqZWN0ICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnBy
b2dyZXNzKCBuZXdEZWZlci5ub3RpZnkgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bmV3RGVmZXJbIGFjdGlvbiArICJXaXRoIiBdKCB0aGlzID09PSBkZWZlcnJlZCA/IG5ld0RlZmVy
IDogdGhpcywgWyByZXR1cm5lZCBdICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gOgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBuZXdEZWZlclsgYWN0aW9uIF0KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICApOworICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBmbnMgPSBudWxsOworICAgICAgICAgICAgICAgICAgICB9KS5wcm9taXNlKCk7
CisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAvLyBHZXQgYSBwcm9taXNlIGZv
ciB0aGlzIGRlZmVycmVkCisgICAgICAgICAgICAgICAgLy8gSWYgb2JqIGlzIHByb3ZpZGVkLCB0
aGUgcHJvbWlzZSBhc3BlY3QgaXMgYWRkZWQgdG8gdGhlIG9iamVjdAorICAgICAgICAgICAgICAg
IHByb21pc2U6IGZ1bmN0aW9uKCBvYmogKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBv
YmogIT0gbnVsbCA/IGpRdWVyeS5leHRlbmQoIG9iaiwgcHJvbWlzZSApIDogcHJvbWlzZTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgZGVmZXJyZWQgPSB7
fTsKKworICAgICAgICAvLyBLZWVwIHBpcGUgZm9yIGJhY2stY29tcGF0CisgICAgICAgIHByb21p
c2UucGlwZSA9IHByb21pc2UudGhlbjsKKworICAgICAgICAvLyBBZGQgbGlzdC1zcGVjaWZpYyBt
ZXRob2RzCisgICAgICAgIGpRdWVyeS5lYWNoKCB0dXBsZXMsIGZ1bmN0aW9uKCBpLCB0dXBsZSAp
IHsKKyAgICAgICAgICAgIHZhciBsaXN0ID0gdHVwbGVbIDIgXSwKKyAgICAgICAgICAgICAgICBz
dGF0ZVN0cmluZyA9IHR1cGxlWyAzIF07CisKKyAgICAgICAgICAgIC8vIHByb21pc2VbIGRvbmUg
fCBmYWlsIHwgcHJvZ3Jlc3MgXSA9IGxpc3QuYWRkCisgICAgICAgICAgICBwcm9taXNlWyB0dXBs
ZVsxXSBdID0gbGlzdC5hZGQ7CisKKyAgICAgICAgICAgIC8vIEhhbmRsZSBzdGF0ZQorICAgICAg
ICAgICAgaWYgKCBzdGF0ZVN0cmluZyApIHsKKyAgICAgICAgICAgICAgICBsaXN0LmFkZChmdW5j
dGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gc3RhdGUgPSBbIHJlc29sdmVkIHwgcmVq
ZWN0ZWQgXQorICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IHN0YXRlU3RyaW5nOworCisgICAg
ICAgICAgICAgICAgLy8gWyByZWplY3RfbGlzdCB8IHJlc29sdmVfbGlzdCBdLmRpc2FibGU7IHBy
b2dyZXNzX2xpc3QubG9jaworICAgICAgICAgICAgICAgIH0sIHR1cGxlc1sgaSBeIDEgXVsgMiBd
LmRpc2FibGUsIHR1cGxlc1sgMiBdWyAyIF0ubG9jayApOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAvLyBkZWZlcnJlZFsgcmVzb2x2ZSB8IHJlamVjdCB8IG5vdGlmeSBdID0gbGlzdC5m
aXJlCisgICAgICAgICAgICBkZWZlcnJlZFsgdHVwbGVbMF0gXSA9IGxpc3QuZmlyZTsKKyAgICAg
ICAgICAgIGRlZmVycmVkWyB0dXBsZVswXSArICJXaXRoIiBdID0gbGlzdC5maXJlV2l0aDsKKyAg
ICAgICAgfSk7CisKKyAgICAgICAgLy8gTWFrZSB0aGUgZGVmZXJyZWQgYSBwcm9taXNlCisgICAg
ICAgIHByb21pc2UucHJvbWlzZSggZGVmZXJyZWQgKTsKKworICAgICAgICAvLyBDYWxsIGdpdmVu
IGZ1bmMgaWYgYW55CisgICAgICAgIGlmICggZnVuYyApIHsKKyAgICAgICAgICAgIGZ1bmMuY2Fs
bCggZGVmZXJyZWQsIGRlZmVycmVkICk7CisgICAgICAgIH0KKworICAgICAgICAvLyBBbGwgZG9u
ZSEKKyAgICAgICAgcmV0dXJuIGRlZmVycmVkOworICAgIH0sCisKKyAgICAvLyBEZWZlcnJlZCBo
ZWxwZXIKKyAgICB3aGVuOiBmdW5jdGlvbiggc3Vib3JkaW5hdGUgLyogLCAuLi4sIHN1Ym9yZGlu
YXRlTiAqLyApIHsKKyAgICAgICAgdmFyIGkgPSAwLAorICAgICAgICAgICAgcmVzb2x2ZVZhbHVl
cyA9IGNvcmVfc2xpY2UuY2FsbCggYXJndW1lbnRzICksCisgICAgICAgICAgICBsZW5ndGggPSBy
ZXNvbHZlVmFsdWVzLmxlbmd0aCwKKworICAgICAgICAgICAgLy8gdGhlIGNvdW50IG9mIHVuY29t
cGxldGVkIHN1Ym9yZGluYXRlcworICAgICAgICAgICAgcmVtYWluaW5nID0gbGVuZ3RoICE9PSAx
IHx8ICggc3Vib3JkaW5hdGUgJiYgalF1ZXJ5LmlzRnVuY3Rpb24oIHN1Ym9yZGluYXRlLnByb21p
c2UgKSApID8gbGVuZ3RoIDogMCwKKworICAgICAgICAgICAgLy8gdGhlIG1hc3RlciBEZWZlcnJl
ZC4gSWYgcmVzb2x2ZVZhbHVlcyBjb25zaXN0IG9mIG9ubHkgYSBzaW5nbGUgRGVmZXJyZWQsIGp1
c3QgdXNlIHRoYXQuCisgICAgICAgICAgICBkZWZlcnJlZCA9IHJlbWFpbmluZyA9PT0gMSA/IHN1
Ym9yZGluYXRlIDogalF1ZXJ5LkRlZmVycmVkKCksCisKKyAgICAgICAgICAgIC8vIFVwZGF0ZSBm
dW5jdGlvbiBmb3IgYm90aCByZXNvbHZlIGFuZCBwcm9ncmVzcyB2YWx1ZXMKKyAgICAgICAgICAg
IHVwZGF0ZUZ1bmMgPSBmdW5jdGlvbiggaSwgY29udGV4dHMsIHZhbHVlcyApIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZnVuY3Rpb24oIHZhbHVlICkgeworICAgICAgICAgICAgICAgICAgICBj
b250ZXh0c1sgaSBdID0gdGhpczsKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVzWyBpIF0gPSBh
cmd1bWVudHMubGVuZ3RoID4gMSA/IGNvcmVfc2xpY2UuY2FsbCggYXJndW1lbnRzICkgOiB2YWx1
ZTsKKyAgICAgICAgICAgICAgICAgICAgaWYoIHZhbHVlcyA9PT0gcHJvZ3Jlc3NWYWx1ZXMgKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5ub3RpZnlXaXRoKCBjb250ZXh0cywg
dmFsdWVzICk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoICEoIC0tcmVtYWluaW5n
ICkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5yZXNvbHZlV2l0aCggY29u
dGV4dHMsIHZhbHVlcyApOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fTsKKyAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgIHByb2dyZXNzVmFsdWVzLCBwcm9ncmVz
c0NvbnRleHRzLCByZXNvbHZlQ29udGV4dHM7CisKKyAgICAgICAgLy8gYWRkIGxpc3RlbmVycyB0
byBEZWZlcnJlZCBzdWJvcmRpbmF0ZXM7IHRyZWF0IG90aGVycyBhcyByZXNvbHZlZAorICAgICAg
ICBpZiAoIGxlbmd0aCA+IDEgKSB7CisgICAgICAgICAgICBwcm9ncmVzc1ZhbHVlcyA9IG5ldyBB
cnJheSggbGVuZ3RoICk7CisgICAgICAgICAgICBwcm9ncmVzc0NvbnRleHRzID0gbmV3IEFycmF5
KCBsZW5ndGggKTsKKyAgICAgICAgICAgIHJlc29sdmVDb250ZXh0cyA9IG5ldyBBcnJheSggbGVu
Z3RoICk7CisgICAgICAgICAgICBmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHsKKyAgICAgICAg
ICAgICAgICBpZiAoIHJlc29sdmVWYWx1ZXNbIGkgXSAmJiBqUXVlcnkuaXNGdW5jdGlvbiggcmVz
b2x2ZVZhbHVlc1sgaSBdLnByb21pc2UgKSApIHsKKyAgICAgICAgICAgICAgICAgICAgcmVzb2x2
ZVZhbHVlc1sgaSBdLnByb21pc2UoKQorICAgICAgICAgICAgICAgICAgICAgICAgLmRvbmUoIHVw
ZGF0ZUZ1bmMoIGksIHJlc29sdmVDb250ZXh0cywgcmVzb2x2ZVZhbHVlcyApICkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIC5mYWlsKCBkZWZlcnJlZC5yZWplY3QgKQorICAgICAgICAgICAgICAg
ICAgICAgICAgLnByb2dyZXNzKCB1cGRhdGVGdW5jKCBpLCBwcm9ncmVzc0NvbnRleHRzLCBwcm9n
cmVzc1ZhbHVlcyApICk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgLS1yZW1haW5pbmc7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgLy8gaWYgd2UncmUgbm90IHdhaXRpbmcgb24gYW55dGhpbmcsIHJl
c29sdmUgdGhlIG1hc3RlcgorICAgICAgICBpZiAoICFyZW1haW5pbmcgKSB7CisgICAgICAgICAg
ICBkZWZlcnJlZC5yZXNvbHZlV2l0aCggcmVzb2x2ZUNvbnRleHRzLCByZXNvbHZlVmFsdWVzICk7
CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZGVmZXJyZWQucHJvbWlzZSgpOworICAgIH0K
K30pOworalF1ZXJ5LnN1cHBvcnQgPSAoZnVuY3Rpb24oKSB7CisKKyAgICB2YXIgc3VwcG9ydCwK
KyAgICAgICAgYWxsLAorICAgICAgICBhLAorICAgICAgICBzZWxlY3QsCisgICAgICAgIG9wdCwK
KyAgICAgICAgaW5wdXQsCisgICAgICAgIGZyYWdtZW50LAorICAgICAgICBldmVudE5hbWUsCisg
ICAgICAgIGksCisgICAgICAgIGlzU3VwcG9ydGVkLAorICAgICAgICBjbGlja0ZuLAorICAgICAg
ICBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKworICAgIC8vIFNldHVwCisg
ICAgZGl2LnNldEF0dHJpYnV0ZSggImNsYXNzTmFtZSIsICJ0IiApOworICAgIGRpdi5pbm5lckhU
TUwgPSAiICA8bGluay8+PHRhYmxlPjwvdGFibGU+PGEgaHJlZj0nL2EnPmE8L2E+PGlucHV0IHR5
cGU9J2NoZWNrYm94Jy8+IjsKKworICAgIC8vIFN1cHBvcnQgdGVzdHMgd29uJ3QgcnVuIGluIHNv
bWUgbGltaXRlZCBvciBub24tYnJvd3NlciBlbnZpcm9ubWVudHMKKyAgICBhbGwgPSBkaXYuZ2V0
RWxlbWVudHNCeVRhZ05hbWUoIioiKTsKKyAgICBhID0gZGl2LmdldEVsZW1lbnRzQnlUYWdOYW1l
KCJhIilbIDAgXTsKKyAgICBpZiAoICFhbGwgfHwgIWEgfHwgIWFsbC5sZW5ndGggKSB7CisgICAg
ICAgIHJldHVybiB7fTsKKyAgICB9CisKKyAgICAvLyBGaXJzdCBiYXRjaCBvZiB0ZXN0cworICAg
IHNlbGVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpOworICAgIG9wdCA9IHNl
bGVjdC5hcHBlbmRDaGlsZCggZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgib3B0aW9uIikgKTsKKyAg
ICBpbnB1dCA9IGRpdi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKVsgMCBdOworCisgICAg
YS5zdHlsZS5jc3NUZXh0ID0gInRvcDoxcHg7ZmxvYXQ6bGVmdDtvcGFjaXR5Oi41IjsKKyAgICBz
dXBwb3J0ID0geworICAgICAgICAvLyBJRSBzdHJpcHMgbGVhZGluZyB3aGl0ZXNwYWNlIHdoZW4g
LmlubmVySFRNTCBpcyB1c2VkCisgICAgICAgIGxlYWRpbmdXaGl0ZXNwYWNlOiAoIGRpdi5maXJz
dENoaWxkLm5vZGVUeXBlID09PSAzICksCisKKyAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGJv
ZHkgZWxlbWVudHMgYXJlbid0IGF1dG9tYXRpY2FsbHkgaW5zZXJ0ZWQKKyAgICAgICAgLy8gSUUg
d2lsbCBpbnNlcnQgdGhlbSBpbnRvIGVtcHR5IHRhYmxlcworICAgICAgICB0Ym9keTogIWRpdi5n
ZXRFbGVtZW50c0J5VGFnTmFtZSgidGJvZHkiKS5sZW5ndGgsCisKKyAgICAgICAgLy8gTWFrZSBz
dXJlIHRoYXQgbGluayBlbGVtZW50cyBnZXQgc2VyaWFsaXplZCBjb3JyZWN0bHkgYnkgaW5uZXJI
VE1MCisgICAgICAgIC8vIFRoaXMgcmVxdWlyZXMgYSB3cmFwcGVyIGVsZW1lbnQgaW4gSUUKKyAg
ICAgICAgaHRtbFNlcmlhbGl6ZTogISFkaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImxpbmsiKS5s
ZW5ndGgsCisKKyAgICAgICAgLy8gR2V0IHRoZSBzdHlsZSBpbmZvcm1hdGlvbiBmcm9tIGdldEF0
dHJpYnV0ZQorICAgICAgICAvLyAoSUUgdXNlcyAuY3NzVGV4dCBpbnN0ZWFkKQorICAgICAgICBz
dHlsZTogL3RvcC8udGVzdCggYS5nZXRBdHRyaWJ1dGUoInN0eWxlIikgKSwKKworICAgICAgICAv
LyBNYWtlIHN1cmUgdGhhdCBVUkxzIGFyZW4ndCBtYW5pcHVsYXRlZAorICAgICAgICAvLyAoSUUg
bm9ybWFsaXplcyBpdCBieSBkZWZhdWx0KQorICAgICAgICBocmVmTm9ybWFsaXplZDogKCBhLmdl
dEF0dHJpYnV0ZSgiaHJlZiIpID09PSAiL2EiICksCisKKyAgICAgICAgLy8gTWFrZSBzdXJlIHRo
YXQgZWxlbWVudCBvcGFjaXR5IGV4aXN0cworICAgICAgICAvLyAoSUUgdXNlcyBmaWx0ZXIgaW5z
dGVhZCkKKyAgICAgICAgLy8gVXNlIGEgcmVnZXggdG8gd29yayBhcm91bmQgYSBXZWJLaXQgaXNz
dWUuIFNlZSAjNTE0NQorICAgICAgICBvcGFjaXR5OiAvXjAuNS8udGVzdCggYS5zdHlsZS5vcGFj
aXR5ICksCisKKyAgICAgICAgLy8gVmVyaWZ5IHN0eWxlIGZsb2F0IGV4aXN0ZW5jZQorICAgICAg
ICAvLyAoSUUgdXNlcyBzdHlsZUZsb2F0IGluc3RlYWQgb2YgY3NzRmxvYXQpCisgICAgICAgIGNz
c0Zsb2F0OiAhIWEuc3R5bGUuY3NzRmxvYXQsCisKKyAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQg
aWYgbm8gdmFsdWUgaXMgc3BlY2lmaWVkIGZvciBhIGNoZWNrYm94CisgICAgICAgIC8vIHRoYXQg
aXQgZGVmYXVsdHMgdG8gIm9uIi4KKyAgICAgICAgLy8gKFdlYktpdCBkZWZhdWx0cyB0byAiIiBp
bnN0ZWFkKQorICAgICAgICBjaGVja09uOiAoIGlucHV0LnZhbHVlID09PSAib24iICksCisKKyAg
ICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgYSBzZWxlY3RlZC1ieS1kZWZhdWx0IG9wdGlvbiBoYXMg
YSB3b3JraW5nIHNlbGVjdGVkIHByb3BlcnR5LgorICAgICAgICAvLyAoV2ViS2l0IGRlZmF1bHRz
IHRvIGZhbHNlIGluc3RlYWQgb2YgdHJ1ZSwgSUUgdG9vLCBpZiBpdCdzIGluIGFuIG9wdGdyb3Vw
KQorICAgICAgICBvcHRTZWxlY3RlZDogb3B0LnNlbGVjdGVkLAorCisgICAgICAgIC8vIFRlc3Qg
c2V0QXR0cmlidXRlIG9uIGNhbWVsQ2FzZSBjbGFzcy4gSWYgaXQgd29ya3MsIHdlIG5lZWQgYXR0
ckZpeGVzIHdoZW4gZG9pbmcgZ2V0L3NldEF0dHJpYnV0ZSAoaWU2LzcpCisgICAgICAgIGdldFNl
dEF0dHJpYnV0ZTogZGl2LmNsYXNzTmFtZSAhPT0gInQiLAorCisgICAgICAgIC8vIFRlc3RzIGZv
ciBlbmN0eXBlIHN1cHBvcnQgb24gYSBmb3JtICgjNjc0MykKKyAgICAgICAgZW5jdHlwZTogISFk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCJmb3JtIikuZW5jdHlwZSwKKworICAgICAgICAvLyBNYWtl
cyBzdXJlIGNsb25pbmcgYW4gaHRtbDUgZWxlbWVudCBkb2VzIG5vdCBjYXVzZSBwcm9ibGVtcwor
ICAgICAgICAvLyBXaGVyZSBvdXRlckhUTUwgaXMgdW5kZWZpbmVkLCB0aGlzIHN0aWxsIHdvcmtz
CisgICAgICAgIGh0bWw1Q2xvbmU6IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIm5hdiIpLmNsb25l
Tm9kZSggdHJ1ZSApLm91dGVySFRNTCAhPT0gIjw6bmF2PjwvOm5hdj4iLAorCisgICAgICAgIC8v
IGpRdWVyeS5zdXBwb3J0LmJveE1vZGVsIERFUFJFQ0FURUQgaW4gMS44IHNpbmNlIHdlIGRvbid0
IHN1cHBvcnQgUXVpcmtzIE1vZGUKKyAgICAgICAgYm94TW9kZWw6ICggZG9jdW1lbnQuY29tcGF0
TW9kZSA9PT0gIkNTUzFDb21wYXQiICksCisKKyAgICAgICAgLy8gV2lsbCBiZSBkZWZpbmVkIGxh
dGVyCisgICAgICAgIHN1Ym1pdEJ1YmJsZXM6IHRydWUsCisgICAgICAgIGNoYW5nZUJ1YmJsZXM6
IHRydWUsCisgICAgICAgIGZvY3VzaW5CdWJibGVzOiBmYWxzZSwKKyAgICAgICAgZGVsZXRlRXhw
YW5kbzogdHJ1ZSwKKyAgICAgICAgbm9DbG9uZUV2ZW50OiB0cnVlLAorICAgICAgICBpbmxpbmVC
bG9ja05lZWRzTGF5b3V0OiBmYWxzZSwKKyAgICAgICAgc2hyaW5rV3JhcEJsb2NrczogZmFsc2Us
CisgICAgICAgIHJlbGlhYmxlTWFyZ2luUmlnaHQ6IHRydWUsCisgICAgICAgIGJveFNpemluZ1Jl
bGlhYmxlOiB0cnVlLAorICAgICAgICBwaXhlbFBvc2l0aW9uOiBmYWxzZQorICAgIH07CisKKyAg
ICAvLyBNYWtlIHN1cmUgY2hlY2tlZCBzdGF0dXMgaXMgcHJvcGVybHkgY2xvbmVkCisgICAgaW5w
dXQuY2hlY2tlZCA9IHRydWU7CisgICAgc3VwcG9ydC5ub0Nsb25lQ2hlY2tlZCA9IGlucHV0LmNs
b25lTm9kZSggdHJ1ZSApLmNoZWNrZWQ7CisKKyAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgb3B0
aW9ucyBpbnNpZGUgZGlzYWJsZWQgc2VsZWN0cyBhcmVuJ3QgbWFya2VkIGFzIGRpc2FibGVkCisg
ICAgLy8gKFdlYktpdCBtYXJrcyB0aGVtIGFzIGRpc2FibGVkKQorICAgIHNlbGVjdC5kaXNhYmxl
ZCA9IHRydWU7CisgICAgc3VwcG9ydC5vcHREaXNhYmxlZCA9ICFvcHQuZGlzYWJsZWQ7CisKKyAg
ICAvLyBUZXN0IHRvIHNlZSBpZiBpdCdzIHBvc3NpYmxlIHRvIGRlbGV0ZSBhbiBleHBhbmRvIGZy
b20gYW4gZWxlbWVudAorICAgIC8vIEZhaWxzIGluIEludGVybmV0IEV4cGxvcmVyCisgICAgdHJ5
IHsKKyAgICAgICAgZGVsZXRlIGRpdi50ZXN0OworICAgIH0gY2F0Y2goIGUgKSB7CisgICAgICAg
IHN1cHBvcnQuZGVsZXRlRXhwYW5kbyA9IGZhbHNlOworICAgIH0KKworICAgIGlmICggIWRpdi5h
ZGRFdmVudExpc3RlbmVyICYmIGRpdi5hdHRhY2hFdmVudCAmJiBkaXYuZmlyZUV2ZW50ICkgewor
ICAgICAgICBkaXYuYXR0YWNoRXZlbnQoICJvbmNsaWNrIiwgY2xpY2tGbiA9IGZ1bmN0aW9uKCkg
eworICAgICAgICAgICAgLy8gQ2xvbmluZyBhIG5vZGUgc2hvdWxkbid0IGNvcHkgb3ZlciBhbnkK
KyAgICAgICAgICAgIC8vIGJvdW5kIGV2ZW50IGhhbmRsZXJzIChJRSBkb2VzIHRoaXMpCisgICAg
ICAgICAgICBzdXBwb3J0Lm5vQ2xvbmVFdmVudCA9IGZhbHNlOworICAgICAgICB9KTsKKyAgICAg
ICAgZGl2LmNsb25lTm9kZSggdHJ1ZSApLmZpcmVFdmVudCgib25jbGljayIpOworICAgICAgICBk
aXYuZGV0YWNoRXZlbnQoICJvbmNsaWNrIiwgY2xpY2tGbiApOworICAgIH0KKworICAgIC8vIENo
ZWNrIGlmIGEgcmFkaW8gbWFpbnRhaW5zIGl0cyB2YWx1ZQorICAgIC8vIGFmdGVyIGJlaW5nIGFw
cGVuZGVkIHRvIHRoZSBET00KKyAgICBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlu
cHV0Iik7CisgICAgaW5wdXQudmFsdWUgPSAidCI7CisgICAgaW5wdXQuc2V0QXR0cmlidXRlKCAi
dHlwZSIsICJyYWRpbyIgKTsKKyAgICBzdXBwb3J0LnJhZGlvVmFsdWUgPSBpbnB1dC52YWx1ZSA9
PT0gInQiOworCisgICAgaW5wdXQuc2V0QXR0cmlidXRlKCAiY2hlY2tlZCIsICJjaGVja2VkIiAp
OworCisgICAgLy8gIzExMjE3IC0gV2ViS2l0IGxvc2VzIGNoZWNrIHdoZW4gdGhlIG5hbWUgaXMg
YWZ0ZXIgdGhlIGNoZWNrZWQgYXR0cmlidXRlCisgICAgaW5wdXQuc2V0QXR0cmlidXRlKCAibmFt
ZSIsICJ0IiApOworCisgICAgZGl2LmFwcGVuZENoaWxkKCBpbnB1dCApOworICAgIGZyYWdtZW50
ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOworICAgIGZyYWdtZW50LmFwcGVu
ZENoaWxkKCBkaXYubGFzdENoaWxkICk7CisKKyAgICAvLyBXZWJLaXQgZG9lc24ndCBjbG9uZSBj
aGVja2VkIHN0YXRlIGNvcnJlY3RseSBpbiBmcmFnbWVudHMKKyAgICBzdXBwb3J0LmNoZWNrQ2xv
bmUgPSBmcmFnbWVudC5jbG9uZU5vZGUoIHRydWUgKS5jbG9uZU5vZGUoIHRydWUgKS5sYXN0Q2hp
bGQuY2hlY2tlZDsKKworICAgIC8vIENoZWNrIGlmIGEgZGlzY29ubmVjdGVkIGNoZWNrYm94IHdp
bGwgcmV0YWluIGl0cyBjaGVja2VkCisgICAgLy8gdmFsdWUgb2YgdHJ1ZSBhZnRlciBhcHBlbmRl
ZCB0byB0aGUgRE9NIChJRTYvNykKKyAgICBzdXBwb3J0LmFwcGVuZENoZWNrZWQgPSBpbnB1dC5j
aGVja2VkOworCisgICAgZnJhZ21lbnQucmVtb3ZlQ2hpbGQoIGlucHV0ICk7CisgICAgZnJhZ21l
bnQuYXBwZW5kQ2hpbGQoIGRpdiApOworCisgICAgLy8gVGVjaG5pcXVlIGZyb20gSnVyaXkgWmF5
dHNldgorICAgIC8vIGh0dHA6Ly9wZXJmZWN0aW9ua2lsbHMuY29tL2RldGVjdGluZy1ldmVudC1z
dXBwb3J0LXdpdGhvdXQtYnJvd3Nlci1zbmlmZmluZy8KKyAgICAvLyBXZSBvbmx5IGNhcmUgYWJv
dXQgdGhlIGNhc2Ugd2hlcmUgbm9uLXN0YW5kYXJkIGV2ZW50IHN5c3RlbXMKKyAgICAvLyBhcmUg
dXNlZCwgbmFtZWx5IGluIElFLiBTaG9ydC1jaXJjdWl0aW5nIGhlcmUgaGVscHMgdXMgdG8KKyAg
ICAvLyBhdm9pZCBhbiBldmFsIGNhbGwgKGluIHNldEF0dHJpYnV0ZSkgd2hpY2ggY2FuIGNhdXNl
IENTUAorICAgIC8vIHRvIGdvIGhheXdpcmUuIFNlZTogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxs
YS5vcmcvZW4vU2VjdXJpdHkvQ1NQCisgICAgaWYgKCBkaXYuYXR0YWNoRXZlbnQgKSB7CisgICAg
ICAgIGZvciAoIGkgaW4geworICAgICAgICAgICAgc3VibWl0OiB0cnVlLAorICAgICAgICAgICAg
Y2hhbmdlOiB0cnVlLAorICAgICAgICAgICAgZm9jdXNpbjogdHJ1ZQorICAgICAgICB9KSB7Cisg
ICAgICAgICAgICBldmVudE5hbWUgPSAib24iICsgaTsKKyAgICAgICAgICAgIGlzU3VwcG9ydGVk
ID0gKCBldmVudE5hbWUgaW4gZGl2ICk7CisgICAgICAgICAgICBpZiAoICFpc1N1cHBvcnRlZCAp
IHsKKyAgICAgICAgICAgICAgICBkaXYuc2V0QXR0cmlidXRlKCBldmVudE5hbWUsICJyZXR1cm47
IiApOworICAgICAgICAgICAgICAgIGlzU3VwcG9ydGVkID0gKCB0eXBlb2YgZGl2WyBldmVudE5h
bWUgXSA9PT0gImZ1bmN0aW9uIiApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3VwcG9y
dFsgaSArICJCdWJibGVzIiBdID0gaXNTdXBwb3J0ZWQ7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICAvLyBSdW4gdGVzdHMgdGhhdCBuZWVkIGEgYm9keSBhdCBkb2MgcmVhZHkKKyAgICBqUXVlcnko
ZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBjb250YWluZXIsIGRpdiwgdGRzLCBtYXJnaW5EaXYs
CisgICAgICAgICAgICBkaXZSZXNldCA9ICJwYWRkaW5nOjA7bWFyZ2luOjA7Ym9yZGVyOjA7ZGlz
cGxheTpibG9jaztvdmVyZmxvdzpoaWRkZW47IiwKKyAgICAgICAgICAgIGJvZHkgPSBkb2N1bWVu
dC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYm9keSIpWzBdOworCisgICAgICAgIGlmICggIWJvZHkg
KSB7CisgICAgICAgICAgICAvLyBSZXR1cm4gZm9yIGZyYW1lc2V0IGRvY3MgdGhhdCBkb24ndCBo
YXZlIGEgYm9keQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgY29u
dGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgICAgIGNvbnRhaW5l
ci5zdHlsZS5jc3NUZXh0ID0gInZpc2liaWxpdHk6aGlkZGVuO2JvcmRlcjowO3dpZHRoOjA7aGVp
Z2h0OjA7cG9zaXRpb246c3RhdGljO3RvcDowO21hcmdpbi10b3A6MXB4IjsKKyAgICAgICAgYm9k
eS5pbnNlcnRCZWZvcmUoIGNvbnRhaW5lciwgYm9keS5maXJzdENoaWxkICk7CisKKyAgICAgICAg
Ly8gQ29uc3RydWN0IHRoZSB0ZXN0IGVsZW1lbnQKKyAgICAgICAgZGl2ID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgiZGl2Iik7CisgICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZCggZGl2ICk7
CisKKyAgICAgICAgLy8gQ2hlY2sgaWYgdGFibGUgY2VsbHMgc3RpbGwgaGF2ZSBvZmZzZXRXaWR0
aC9IZWlnaHQgd2hlbiB0aGV5IGFyZSBzZXQKKyAgICAgICAgLy8gdG8gZGlzcGxheTpub25lIGFu
ZCB0aGVyZSBhcmUgc3RpbGwgb3RoZXIgdmlzaWJsZSB0YWJsZSBjZWxscyBpbiBhCisgICAgICAg
IC8vIHRhYmxlIHJvdzsgaWYgc28sIG9mZnNldFdpZHRoL0hlaWdodCBhcmUgbm90IHJlbGlhYmxl
IGZvciB1c2Ugd2hlbgorICAgICAgICAvLyBkZXRlcm1pbmluZyBpZiBhbiBlbGVtZW50IGhhcyBi
ZWVuIGhpZGRlbiBkaXJlY3RseSB1c2luZworICAgICAgICAvLyBkaXNwbGF5Om5vbmUgKGl0IGlz
IHN0aWxsIHNhZmUgdG8gdXNlIG9mZnNldHMgaWYgYSBwYXJlbnQgZWxlbWVudCBpcworICAgICAg
ICAvLyBoaWRkZW47IGRvbiBzYWZldHkgZ29nZ2xlcyBhbmQgc2VlIGJ1ZyAjNDUxMiBmb3IgbW9y
ZSBpbmZvcm1hdGlvbikuCisgICAgICAgIC8vIChvbmx5IElFIDggZmFpbHMgdGhpcyB0ZXN0KQor
ICAgICAgICBkaXYuaW5uZXJIVE1MID0gIjx0YWJsZT48dHI+PHRkPjwvdGQ+PHRkPnQ8L3RkPjwv
dHI+PC90YWJsZT4iOworICAgICAgICB0ZHMgPSBkaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRk
Iik7CisgICAgICAgIHRkc1sgMCBdLnN0eWxlLmNzc1RleHQgPSAicGFkZGluZzowO21hcmdpbjow
O2JvcmRlcjowO2Rpc3BsYXk6bm9uZSI7CisgICAgICAgIGlzU3VwcG9ydGVkID0gKCB0ZHNbIDAg
XS5vZmZzZXRIZWlnaHQgPT09IDAgKTsKKworICAgICAgICB0ZHNbIDAgXS5zdHlsZS5kaXNwbGF5
ID0gIiI7CisgICAgICAgIHRkc1sgMSBdLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CisKKyAgICAg
ICAgLy8gQ2hlY2sgaWYgZW1wdHkgdGFibGUgY2VsbHMgc3RpbGwgaGF2ZSBvZmZzZXRXaWR0aC9I
ZWlnaHQKKyAgICAgICAgLy8gKElFIDw9IDggZmFpbCB0aGlzIHRlc3QpCisgICAgICAgIHN1cHBv
cnQucmVsaWFibGVIaWRkZW5PZmZzZXRzID0gaXNTdXBwb3J0ZWQgJiYgKCB0ZHNbIDAgXS5vZmZz
ZXRIZWlnaHQgPT09IDAgKTsKKworICAgICAgICAvLyBDaGVjayBib3gtc2l6aW5nIGFuZCBtYXJn
aW4gYmVoYXZpb3IKKyAgICAgICAgZGl2LmlubmVySFRNTCA9ICIiOworICAgICAgICBkaXYuc3R5
bGUuY3NzVGV4dCA9ICJib3gtc2l6aW5nOmJvcmRlci1ib3g7LW1vei1ib3gtc2l6aW5nOmJvcmRl
ci1ib3g7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZzoxcHg7Ym9yZGVyOjFw
eDtkaXNwbGF5OmJsb2NrO3dpZHRoOjRweDttYXJnaW4tdG9wOjElO3Bvc2l0aW9uOmFic29sdXRl
O3RvcDoxJTsiOworICAgICAgICBzdXBwb3J0LmJveFNpemluZyA9ICggZGl2Lm9mZnNldFdpZHRo
ID09PSA0ICk7CisgICAgICAgIHN1cHBvcnQuZG9lc05vdEluY2x1ZGVNYXJnaW5JbkJvZHlPZmZz
ZXQgPSAoIGJvZHkub2Zmc2V0VG9wICE9PSAxICk7CisKKyAgICAgICAgLy8gTk9URTogVG8gYW55
IGZ1dHVyZSBtYWludGFpbmVyLCB3ZSd2ZSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZQorICAgICAg
ICAvLyBiZWNhdXNlIGpzZG9tIG9uIG5vZGUuanMgd2lsbCBicmVhayB3aXRob3V0IGl0LgorICAg
ICAgICBpZiAoIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlICkgeworICAgICAgICAgICAgc3VwcG9y
dC5waXhlbFBvc2l0aW9uID0gKCB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSggZGl2LCBudWxsICkg
fHwge30gKS50b3AgIT09ICIxJSI7CisgICAgICAgICAgICBzdXBwb3J0LmJveFNpemluZ1JlbGlh
YmxlID0gKCB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSggZGl2LCBudWxsICkgfHwgeyB3aWR0aDog
IjRweCIgfSApLndpZHRoID09PSAiNHB4IjsKKworICAgICAgICAgICAgLy8gQ2hlY2sgaWYgZGl2
IHdpdGggZXhwbGljaXQgd2lkdGggYW5kIG5vIG1hcmdpbi1yaWdodCBpbmNvcnJlY3RseQorICAg
ICAgICAgICAgLy8gZ2V0cyBjb21wdXRlZCBtYXJnaW4tcmlnaHQgYmFzZWQgb24gd2lkdGggb2Yg
Y29udGFpbmVyLiBGb3IgbW9yZQorICAgICAgICAgICAgLy8gaW5mbyBzZWUgYnVnICMzMzMzCisg
ICAgICAgICAgICAvLyBGYWlscyBpbiBXZWJLaXQgYmVmb3JlIEZlYiAyMDExIG5pZ2h0bGllcwor
ICAgICAgICAgICAgLy8gV2ViS2l0IEJ1ZyAxMzM0MyAtIGdldENvbXB1dGVkU3R5bGUgcmV0dXJu
cyB3cm9uZyB2YWx1ZSBmb3IgbWFyZ2luLXJpZ2h0CisgICAgICAgICAgICBtYXJnaW5EaXYgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICAgICAgICAgIG1hcmdpbkRpdi5zdHls
ZS5jc3NUZXh0ID0gZGl2LnN0eWxlLmNzc1RleHQgPSBkaXZSZXNldDsKKyAgICAgICAgICAgIG1h
cmdpbkRpdi5zdHlsZS5tYXJnaW5SaWdodCA9IG1hcmdpbkRpdi5zdHlsZS53aWR0aCA9ICIwIjsK
KyAgICAgICAgICAgIGRpdi5zdHlsZS53aWR0aCA9ICIxcHgiOworICAgICAgICAgICAgZGl2LmFw
cGVuZENoaWxkKCBtYXJnaW5EaXYgKTsKKyAgICAgICAgICAgIHN1cHBvcnQucmVsaWFibGVNYXJn
aW5SaWdodCA9CisgICAgICAgICAgICAgICAgIXBhcnNlRmxvYXQoICggd2luZG93LmdldENvbXB1
dGVkU3R5bGUoIG1hcmdpbkRpdiwgbnVsbCApIHx8IHt9ICkubWFyZ2luUmlnaHQgKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmICggdHlwZW9mIGRpdi5zdHlsZS56b29tICE9PSAidW5kZWZpbmVk
IiApIHsKKyAgICAgICAgICAgIC8vIENoZWNrIGlmIG5hdGl2ZWx5IGJsb2NrLWxldmVsIGVsZW1l
bnRzIGFjdCBsaWtlIGlubGluZS1ibG9jaworICAgICAgICAgICAgLy8gZWxlbWVudHMgd2hlbiBz
ZXR0aW5nIHRoZWlyIGRpc3BsYXkgdG8gJ2lubGluZScgYW5kIGdpdmluZworICAgICAgICAgICAg
Ly8gdGhlbSBsYXlvdXQKKyAgICAgICAgICAgIC8vIChJRSA8IDggZG9lcyB0aGlzKQorICAgICAg
ICAgICAgZGl2LmlubmVySFRNTCA9ICIiOworICAgICAgICAgICAgZGl2LnN0eWxlLmNzc1RleHQg
PSBkaXZSZXNldCArICJ3aWR0aDoxcHg7cGFkZGluZzoxcHg7ZGlzcGxheTppbmxpbmU7em9vbTox
IjsKKyAgICAgICAgICAgIHN1cHBvcnQuaW5saW5lQmxvY2tOZWVkc0xheW91dCA9ICggZGl2Lm9m
ZnNldFdpZHRoID09PSAzICk7CisKKyAgICAgICAgICAgIC8vIENoZWNrIGlmIGVsZW1lbnRzIHdp
dGggbGF5b3V0IHNocmluay13cmFwIHRoZWlyIGNoaWxkcmVuCisgICAgICAgICAgICAvLyAoSUUg
NiBkb2VzIHRoaXMpCisgICAgICAgICAgICBkaXYuc3R5bGUuZGlzcGxheSA9ICJibG9jayI7Cisg
ICAgICAgICAgICBkaXYuc3R5bGUub3ZlcmZsb3cgPSAidmlzaWJsZSI7CisgICAgICAgICAgICBk
aXYuaW5uZXJIVE1MID0gIjxkaXY+PC9kaXY+IjsKKyAgICAgICAgICAgIGRpdi5maXJzdENoaWxk
LnN0eWxlLndpZHRoID0gIjVweCI7CisgICAgICAgICAgICBzdXBwb3J0LnNocmlua1dyYXBCbG9j
a3MgPSAoIGRpdi5vZmZzZXRXaWR0aCAhPT0gMyApOworCisgICAgICAgICAgICBjb250YWluZXIu
c3R5bGUuem9vbSA9IDE7CisgICAgICAgIH0KKworICAgICAgICAvLyBOdWxsIGVsZW1lbnRzIHRv
IGF2b2lkIGxlYWtzIGluIElFCisgICAgICAgIGJvZHkucmVtb3ZlQ2hpbGQoIGNvbnRhaW5lciAp
OworICAgICAgICBjb250YWluZXIgPSBkaXYgPSB0ZHMgPSBtYXJnaW5EaXYgPSBudWxsOworICAg
IH0pOworCisgICAgLy8gTnVsbCBlbGVtZW50cyB0byBhdm9pZCBsZWFrcyBpbiBJRQorICAgIGZy
YWdtZW50LnJlbW92ZUNoaWxkKCBkaXYgKTsKKyAgICBhbGwgPSBhID0gc2VsZWN0ID0gb3B0ID0g
aW5wdXQgPSBmcmFnbWVudCA9IGRpdiA9IG51bGw7CisKKyAgICByZXR1cm4gc3VwcG9ydDsKK30p
KCk7Cit2YXIgcmJyYWNlID0gLyg/Olx7W1xzXFNdKlx9fFxbW1xzXFNdKlxdKSQvLAorICAgIHJt
dWx0aURhc2ggPSAvKFtBLVpdKS9nOworCitqUXVlcnkuZXh0ZW5kKHsKKyAgICBjYWNoZToge30s
CisKKyAgICBkZWxldGVkSWRzOiBbXSwKKworICAgIC8vIFJlbW92ZSBhdCBuZXh0IG1ham9yIHJl
bGVhc2UgKDEuOS8yLjApCisgICAgdXVpZDogMCwKKworICAgIC8vIFVuaXF1ZSBmb3IgZWFjaCBj
b3B5IG9mIGpRdWVyeSBvbiB0aGUgcGFnZQorICAgIC8vIE5vbi1kaWdpdHMgcmVtb3ZlZCB0byBt
YXRjaCByaW5saW5lalF1ZXJ5CisgICAgZXhwYW5kbzogImpRdWVyeSIgKyAoIGpRdWVyeS5mbi5q
cXVlcnkgKyBNYXRoLnJhbmRvbSgpICkucmVwbGFjZSggL1xEL2csICIiICksCisKKyAgICAvLyBU
aGUgZm9sbG93aW5nIGVsZW1lbnRzIHRocm93IHVuY2F0Y2hhYmxlIGV4Y2VwdGlvbnMgaWYgeW91
CisgICAgLy8gYXR0ZW1wdCB0byBhZGQgZXhwYW5kbyBwcm9wZXJ0aWVzIHRvIHRoZW0uCisgICAg
bm9EYXRhOiB7CisgICAgICAgICJlbWJlZCI6IHRydWUsCisgICAgICAgIC8vIEJhbiBhbGwgb2Jq
ZWN0cyBleGNlcHQgZm9yIEZsYXNoICh3aGljaCBoYW5kbGUgZXhwYW5kb3MpCisgICAgICAgICJv
YmplY3QiOiAiY2xzaWQ6RDI3Q0RCNkUtQUU2RC0xMWNmLTk2QjgtNDQ0NTUzNTQwMDAwIiwKKyAg
ICAgICAgImFwcGxldCI6IHRydWUKKyAgICB9LAorCisgICAgaGFzRGF0YTogZnVuY3Rpb24oIGVs
ZW0gKSB7CisgICAgICAgIGVsZW0gPSBlbGVtLm5vZGVUeXBlID8galF1ZXJ5LmNhY2hlWyBlbGVt
W2pRdWVyeS5leHBhbmRvXSBdIDogZWxlbVsgalF1ZXJ5LmV4cGFuZG8gXTsKKyAgICAgICAgcmV0
dXJuICEhZWxlbSAmJiAhaXNFbXB0eURhdGFPYmplY3QoIGVsZW0gKTsKKyAgICB9LAorCisgICAg
ZGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGRhdGEsIHB2dCAvKiBJbnRlcm5hbCBVc2UgT25s
eSAqLyApIHsKKyAgICAgICAgaWYgKCAhalF1ZXJ5LmFjY2VwdERhdGEoIGVsZW0gKSApIHsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHZhciB0aGlzQ2FjaGUsIHJl
dCwKKyAgICAgICAgICAgIGludGVybmFsS2V5ID0galF1ZXJ5LmV4cGFuZG8sCisgICAgICAgICAg
ICBnZXRCeU5hbWUgPSB0eXBlb2YgbmFtZSA9PT0gInN0cmluZyIsCisKKyAgICAgICAgICAgIC8v
IFdlIGhhdmUgdG8gaGFuZGxlIERPTSBub2RlcyBhbmQgSlMgb2JqZWN0cyBkaWZmZXJlbnRseSBi
ZWNhdXNlIElFNi03CisgICAgICAgICAgICAvLyBjYW4ndCBHQyBvYmplY3QgcmVmZXJlbmNlcyBw
cm9wZXJseSBhY3Jvc3MgdGhlIERPTS1KUyBib3VuZGFyeQorICAgICAgICAgICAgaXNOb2RlID0g
ZWxlbS5ub2RlVHlwZSwKKworICAgICAgICAgICAgLy8gT25seSBET00gbm9kZXMgbmVlZCB0aGUg
Z2xvYmFsIGpRdWVyeSBjYWNoZTsgSlMgb2JqZWN0IGRhdGEgaXMKKyAgICAgICAgICAgIC8vIGF0
dGFjaGVkIGRpcmVjdGx5IHRvIHRoZSBvYmplY3Qgc28gR0MgY2FuIG9jY3VyIGF1dG9tYXRpY2Fs
bHkKKyAgICAgICAgICAgIGNhY2hlID0gaXNOb2RlID8galF1ZXJ5LmNhY2hlIDogZWxlbSwKKwor
ICAgICAgICAgICAgLy8gT25seSBkZWZpbmluZyBhbiBJRCBmb3IgSlMgb2JqZWN0cyBpZiBpdHMg
Y2FjaGUgYWxyZWFkeSBleGlzdHMgYWxsb3dzCisgICAgICAgICAgICAvLyB0aGUgY29kZSB0byBz
aG9ydGN1dCBvbiB0aGUgc2FtZSBwYXRoIGFzIGEgRE9NIG5vZGUgd2l0aCBubyBjYWNoZQorICAg
ICAgICAgICAgaWQgPSBpc05vZGUgPyBlbGVtWyBpbnRlcm5hbEtleSBdIDogZWxlbVsgaW50ZXJu
YWxLZXkgXSAmJiBpbnRlcm5hbEtleTsKKworICAgICAgICAvLyBBdm9pZCBkb2luZyBhbnkgbW9y
ZSB3b3JrIHRoYW4gd2UgbmVlZCB0byB3aGVuIHRyeWluZyB0byBnZXQgZGF0YSBvbiBhbgorICAg
ICAgICAvLyBvYmplY3QgdGhhdCBoYXMgbm8gZGF0YSBhdCBhbGwKKyAgICAgICAgaWYgKCAoIWlk
IHx8ICFjYWNoZVtpZF0gfHwgKCFwdnQgJiYgIWNhY2hlW2lkXS5kYXRhKSkgJiYgZ2V0QnlOYW1l
ICYmIGRhdGEgPT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIGlmICggIWlkICkgeworICAgICAgICAgICAgLy8gT25seSBET00gbm9kZXMg
bmVlZCBhIG5ldyB1bmlxdWUgSUQgZm9yIGVhY2ggZWxlbWVudCBzaW5jZSB0aGVpciBkYXRhCisg
ICAgICAgICAgICAvLyBlbmRzIHVwIGluIHRoZSBnbG9iYWwgY2FjaGUKKyAgICAgICAgICAgIGlm
ICggaXNOb2RlICkgeworICAgICAgICAgICAgICAgIGVsZW1bIGludGVybmFsS2V5IF0gPSBpZCA9
IGpRdWVyeS5kZWxldGVkSWRzLnBvcCgpIHx8IGpRdWVyeS5ndWlkKys7CisgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgIGlkID0gaW50ZXJuYWxLZXk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgICAgICBpZiAoICFjYWNoZVsgaWQgXSApIHsKKyAgICAgICAgICAg
IGNhY2hlWyBpZCBdID0ge307CisKKyAgICAgICAgICAgIC8vIEF2b2lkcyBleHBvc2luZyBqUXVl
cnkgbWV0YWRhdGEgb24gcGxhaW4gSlMgb2JqZWN0cyB3aGVuIHRoZSBvYmplY3QKKyAgICAgICAg
ICAgIC8vIGlzIHNlcmlhbGl6ZWQgdXNpbmcgSlNPTi5zdHJpbmdpZnkKKyAgICAgICAgICAgIGlm
ICggIWlzTm9kZSApIHsKKyAgICAgICAgICAgICAgICBjYWNoZVsgaWQgXS50b0pTT04gPSBqUXVl
cnkubm9vcDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIEFuIG9iamVj
dCBjYW4gYmUgcGFzc2VkIHRvIGpRdWVyeS5kYXRhIGluc3RlYWQgb2YgYSBrZXkvdmFsdWUgcGFp
cjsgdGhpcyBnZXRzCisgICAgICAgIC8vIHNoYWxsb3cgY29waWVkIG92ZXIgb250byB0aGUgZXhp
c3RpbmcgY2FjaGUKKyAgICAgICAgaWYgKCB0eXBlb2YgbmFtZSA9PT0gIm9iamVjdCIgfHwgdHlw
ZW9mIG5hbWUgPT09ICJmdW5jdGlvbiIgKSB7CisgICAgICAgICAgICBpZiAoIHB2dCApIHsKKyAg
ICAgICAgICAgICAgICBjYWNoZVsgaWQgXSA9IGpRdWVyeS5leHRlbmQoIGNhY2hlWyBpZCBdLCBu
YW1lICk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGNhY2hlWyBpZCBd
LmRhdGEgPSBqUXVlcnkuZXh0ZW5kKCBjYWNoZVsgaWQgXS5kYXRhLCBuYW1lICk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICB0aGlzQ2FjaGUgPSBjYWNoZVsgaWQgXTsKKwor
ICAgICAgICAvLyBqUXVlcnkgZGF0YSgpIGlzIHN0b3JlZCBpbiBhIHNlcGFyYXRlIG9iamVjdCBp
bnNpZGUgdGhlIG9iamVjdCdzIGludGVybmFsIGRhdGEKKyAgICAgICAgLy8gY2FjaGUgaW4gb3Jk
ZXIgdG8gYXZvaWQga2V5IGNvbGxpc2lvbnMgYmV0d2VlbiBpbnRlcm5hbCBkYXRhIGFuZCB1c2Vy
LWRlZmluZWQKKyAgICAgICAgLy8gZGF0YS4KKyAgICAgICAgaWYgKCAhcHZ0ICkgeworICAgICAg
ICAgICAgaWYgKCAhdGhpc0NhY2hlLmRhdGEgKSB7CisgICAgICAgICAgICAgICAgdGhpc0NhY2hl
LmRhdGEgPSB7fTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdGhpc0NhY2hlID0gdGhp
c0NhY2hlLmRhdGE7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIGRhdGEgIT09IHVuZGVmaW5l
ZCApIHsKKyAgICAgICAgICAgIHRoaXNDYWNoZVsgalF1ZXJ5LmNhbWVsQ2FzZSggbmFtZSApIF0g
PSBkYXRhOworICAgICAgICB9CisKKyAgICAgICAgLy8gQ2hlY2sgZm9yIGJvdGggY29udmVydGVk
LXRvLWNhbWVsIGFuZCBub24tY29udmVydGVkIGRhdGEgcHJvcGVydHkgbmFtZXMKKyAgICAgICAg
Ly8gSWYgYSBkYXRhIHByb3BlcnR5IHdhcyBzcGVjaWZpZWQKKyAgICAgICAgaWYgKCBnZXRCeU5h
bWUgKSB7CisKKyAgICAgICAgICAgIC8vIEZpcnN0IFRyeSB0byBmaW5kIGFzLWlzIHByb3BlcnR5
IGRhdGEKKyAgICAgICAgICAgIHJldCA9IHRoaXNDYWNoZVsgbmFtZSBdOworCisgICAgICAgICAg
ICAvLyBUZXN0IGZvciBudWxsfHVuZGVmaW5lZCBwcm9wZXJ0eSBkYXRhCisgICAgICAgICAgICBp
ZiAoIHJldCA9PSBudWxsICkgeworCisgICAgICAgICAgICAgICAgLy8gVHJ5IHRvIGZpbmQgdGhl
IGNhbWVsQ2FzZWQgcHJvcGVydHkKKyAgICAgICAgICAgICAgICByZXQgPSB0aGlzQ2FjaGVbIGpR
dWVyeS5jYW1lbENhc2UoIG5hbWUgKSBdOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgcmV0ID0gdGhpc0NhY2hlOworICAgICAgICB9CisKKyAgICAgICAgcmV0
dXJuIHJldDsKKyAgICB9LAorCisgICAgcmVtb3ZlRGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUs
IHB2dCAvKiBJbnRlcm5hbCBVc2UgT25seSAqLyApIHsKKyAgICAgICAgaWYgKCAhalF1ZXJ5LmFj
Y2VwdERhdGEoIGVsZW0gKSApIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIHZhciB0aGlzQ2FjaGUsIGksIGwsCisKKyAgICAgICAgICAgIGlzTm9kZSA9IGVsZW0u
bm9kZVR5cGUsCisKKyAgICAgICAgICAgIC8vIFNlZSBqUXVlcnkuZGF0YSBmb3IgbW9yZSBpbmZv
cm1hdGlvbgorICAgICAgICAgICAgY2FjaGUgPSBpc05vZGUgPyBqUXVlcnkuY2FjaGUgOiBlbGVt
LAorICAgICAgICAgICAgaWQgPSBpc05vZGUgPyBlbGVtWyBqUXVlcnkuZXhwYW5kbyBdIDogalF1
ZXJ5LmV4cGFuZG87CisKKyAgICAgICAgLy8gSWYgdGhlcmUgaXMgYWxyZWFkeSBubyBjYWNoZSBl
bnRyeSBmb3IgdGhpcyBvYmplY3QsIHRoZXJlIGlzIG5vCisgICAgICAgIC8vIHB1cnBvc2UgaW4g
Y29udGludWluZworICAgICAgICBpZiAoICFjYWNoZVsgaWQgXSApIHsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggbmFtZSApIHsKKworICAgICAgICAgICAg
dGhpc0NhY2hlID0gcHZ0ID8gY2FjaGVbIGlkIF0gOiBjYWNoZVsgaWQgXS5kYXRhOworCisgICAg
ICAgICAgICBpZiAoIHRoaXNDYWNoZSApIHsKKworICAgICAgICAgICAgICAgIC8vIFN1cHBvcnQg
YXJyYXkgb3Igc3BhY2Ugc2VwYXJhdGVkIHN0cmluZyBuYW1lcyBmb3IgZGF0YSBrZXlzCisgICAg
ICAgICAgICAgICAgaWYgKCAhalF1ZXJ5LmlzQXJyYXkoIG5hbWUgKSApIHsKKworICAgICAgICAg
ICAgICAgICAgICAvLyB0cnkgdGhlIHN0cmluZyBhcyBhIGtleSBiZWZvcmUgYW55IG1hbmlwdWxh
dGlvbgorICAgICAgICAgICAgICAgICAgICBpZiAoIG5hbWUgaW4gdGhpc0NhY2hlICkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IFsgbmFtZSBdOworICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgeworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBzcGxpdCB0aGUgY2FtZWwg
Y2FzZWQgdmVyc2lvbiBieSBzcGFjZXMgdW5sZXNzIGEga2V5IHdpdGggdGhlIHNwYWNlcyBleGlz
dHMKKyAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBqUXVlcnkuY2FtZWxDYXNlKCBuYW1l
ICk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG5hbWUgaW4gdGhpc0NhY2hlICkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBbIG5hbWUgXTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9
IG5hbWUuc3BsaXQoIiAiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGZvciAoIGkg
PSAwLCBsID0gbmFtZS5sZW5ndGg7IGkgPCBsOyBpKysgKSB7CisgICAgICAgICAgICAgICAgICAg
IGRlbGV0ZSB0aGlzQ2FjaGVbIG5hbWVbaV0gXTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBkYXRhIGxlZnQgaW4gdGhlIGNhY2hlLCB3ZSB3
YW50IHRvIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgLy8gYW5kIGxldCB0aGUgY2FjaGUgb2Jq
ZWN0IGl0c2VsZiBnZXQgZGVzdHJveWVkCisgICAgICAgICAgICAgICAgaWYgKCAhKCBwdnQgPyBp
c0VtcHR5RGF0YU9iamVjdCA6IGpRdWVyeS5pc0VtcHR5T2JqZWN0ICkoIHRoaXNDYWNoZSApICkg
eworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gU2VlIGpRdWVyeS5kYXRhIGZvciBtb3Jl
IGluZm9ybWF0aW9uCisgICAgICAgIGlmICggIXB2dCApIHsKKyAgICAgICAgICAgIGRlbGV0ZSBj
YWNoZVsgaWQgXS5kYXRhOworCisgICAgICAgICAgICAvLyBEb24ndCBkZXN0cm95IHRoZSBwYXJl
bnQgY2FjaGUgdW5sZXNzIHRoZSBpbnRlcm5hbCBkYXRhIG9iamVjdAorICAgICAgICAgICAgLy8g
aGFkIGJlZW4gdGhlIG9ubHkgdGhpbmcgbGVmdCBpbiBpdAorICAgICAgICAgICAgaWYgKCAhaXNF
bXB0eURhdGFPYmplY3QoIGNhY2hlWyBpZCBdICkgKSB7CisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gRGVzdHJveSB0aGUgY2Fj
aGUKKyAgICAgICAgaWYgKCBpc05vZGUgKSB7CisgICAgICAgICAgICBqUXVlcnkuY2xlYW5EYXRh
KCBbIGVsZW0gXSwgdHJ1ZSApOworCisgICAgICAgIC8vIFVzZSBkZWxldGUgd2hlbiBzdXBwb3J0
ZWQgZm9yIGV4cGFuZG9zIG9yIGBjYWNoZWAgaXMgbm90IGEgd2luZG93IHBlciBpc1dpbmRvdyAo
IzEwMDgwKQorICAgICAgICB9IGVsc2UgaWYgKCBqUXVlcnkuc3VwcG9ydC5kZWxldGVFeHBhbmRv
IHx8IGNhY2hlICE9IGNhY2hlLndpbmRvdyApIHsKKyAgICAgICAgICAgIGRlbGV0ZSBjYWNoZVsg
aWQgXTsKKworICAgICAgICAvLyBXaGVuIGFsbCBlbHNlIGZhaWxzLCBudWxsCisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBjYWNoZVsgaWQgXSA9IG51bGw7CisgICAgICAgIH0KKyAgICB9
LAorCisgICAgLy8gRm9yIGludGVybmFsIHVzZSBvbmx5LgorICAgIF9kYXRhOiBmdW5jdGlvbigg
ZWxlbSwgbmFtZSwgZGF0YSApIHsKKyAgICAgICAgcmV0dXJuIGpRdWVyeS5kYXRhKCBlbGVtLCBu
YW1lLCBkYXRhLCB0cnVlICk7CisgICAgfSwKKworICAgIC8vIEEgbWV0aG9kIGZvciBkZXRlcm1p
bmluZyBpZiBhIERPTSBub2RlIGNhbiBoYW5kbGUgdGhlIGRhdGEgZXhwYW5kbworICAgIGFjY2Vw
dERhdGE6IGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICB2YXIgbm9EYXRhID0gZWxlbS5ub2Rl
TmFtZSAmJiBqUXVlcnkubm9EYXRhWyBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgXTsKKwor
ICAgICAgICAvLyBub2RlcyBhY2NlcHQgZGF0YSB1bmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZDsg
cmVqZWN0aW9uIGNhbiBiZSBjb25kaXRpb25hbAorICAgICAgICByZXR1cm4gIW5vRGF0YSB8fCBu
b0RhdGEgIT09IHRydWUgJiYgZWxlbS5nZXRBdHRyaWJ1dGUoImNsYXNzaWQiKSA9PT0gbm9EYXRh
OworICAgIH0KK30pOworCitqUXVlcnkuZm4uZXh0ZW5kKHsKKyAgICBkYXRhOiBmdW5jdGlvbigg
a2V5LCB2YWx1ZSApIHsKKyAgICAgICAgdmFyIHBhcnRzLCBwYXJ0LCBhdHRyLCBuYW1lLCBsLAor
ICAgICAgICAgICAgZWxlbSA9IHRoaXNbMF0sCisgICAgICAgICAgICBpID0gMCwKKyAgICAgICAg
ICAgIGRhdGEgPSBudWxsOworCisgICAgICAgIC8vIEdldHMgYWxsIHZhbHVlcworICAgICAgICBp
ZiAoIGtleSA9PT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgaWYgKCB0aGlzLmxlbmd0aCAp
IHsKKyAgICAgICAgICAgICAgICBkYXRhID0galF1ZXJ5LmRhdGEoIGVsZW0gKTsKKworICAgICAg
ICAgICAgICAgIGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSAmJiAhalF1ZXJ5Ll9kYXRhKCBlbGVt
LCAicGFyc2VkQXR0cnMiICkgKSB7CisgICAgICAgICAgICAgICAgICAgIGF0dHIgPSBlbGVtLmF0
dHJpYnV0ZXM7CisgICAgICAgICAgICAgICAgICAgIGZvciAoIGwgPSBhdHRyLmxlbmd0aDsgaSA8
IGw7IGkrKyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBhdHRyW2ldLm5hbWU7
CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIW5hbWUuaW5kZXhPZiggImRhdGEtIiAp
ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBqUXVlcnkuY2FtZWxDYXNl
KCBuYW1lLnN1YnN0cmluZyg1KSApOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0
YUF0dHIoIGVsZW0sIG5hbWUsIGRhdGFbIG5hbWUgXSApOworICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5f
ZGF0YSggZWxlbSwgInBhcnNlZEF0dHJzIiwgdHJ1ZSApOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIGRhdGE7CisgICAgICAgIH0KKworICAg
ICAgICAvLyBTZXRzIG11bHRpcGxlIHZhbHVlcworICAgICAgICBpZiAoIHR5cGVvZiBrZXkgPT09
ICJvYmplY3QiICkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHsK
KyAgICAgICAgICAgICAgICBqUXVlcnkuZGF0YSggdGhpcywga2V5ICk7CisgICAgICAgICAgICB9
KTsKKyAgICAgICAgfQorCisgICAgICAgIHBhcnRzID0ga2V5LnNwbGl0KCAiLiIsIDIgKTsKKyAg
ICAgICAgcGFydHNbMV0gPSBwYXJ0c1sxXSA/ICIuIiArIHBhcnRzWzFdIDogIiI7CisgICAgICAg
IHBhcnQgPSBwYXJ0c1sxXSArICIhIjsKKworICAgICAgICByZXR1cm4galF1ZXJ5LmFjY2Vzcygg
dGhpcywgZnVuY3Rpb24oIHZhbHVlICkgeworCisgICAgICAgICAgICBpZiAoIHZhbHVlID09PSB1
bmRlZmluZWQgKSB7CisgICAgICAgICAgICAgICAgZGF0YSA9IHRoaXMudHJpZ2dlckhhbmRsZXIo
ICJnZXREYXRhIiArIHBhcnQsIFsgcGFydHNbMF0gXSApOworCisgICAgICAgICAgICAgICAgLy8g
VHJ5IHRvIGZldGNoIGFueSBpbnRlcm5hbGx5IHN0b3JlZCBkYXRhIGZpcnN0CisgICAgICAgICAg
ICAgICAgaWYgKCBkYXRhID09PSB1bmRlZmluZWQgJiYgZWxlbSApIHsKKyAgICAgICAgICAgICAg
ICAgICAgZGF0YSA9IGpRdWVyeS5kYXRhKCBlbGVtLCBrZXkgKTsKKyAgICAgICAgICAgICAgICAg
ICAgZGF0YSA9IGRhdGFBdHRyKCBlbGVtLCBrZXksIGRhdGEgKTsKKyAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICByZXR1cm4gZGF0YSA9PT0gdW5kZWZpbmVkICYmIHBhcnRzWzFd
ID8KKyAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhKCBwYXJ0c1swXSApIDoKKyAgICAgICAg
ICAgICAgICAgICAgZGF0YTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcGFydHNbMV0g
PSB2YWx1ZTsKKyAgICAgICAgICAgIHRoaXMuZWFjaChmdW5jdGlvbigpIHsKKyAgICAgICAgICAg
ICAgICB2YXIgc2VsZiA9IGpRdWVyeSggdGhpcyApOworCisgICAgICAgICAgICAgICAgc2VsZi50
cmlnZ2VySGFuZGxlciggInNldERhdGEiICsgcGFydCwgcGFydHMgKTsKKyAgICAgICAgICAgICAg
ICBqUXVlcnkuZGF0YSggdGhpcywga2V5LCB2YWx1ZSApOworICAgICAgICAgICAgICAgIHNlbGYu
dHJpZ2dlckhhbmRsZXIoICJjaGFuZ2VEYXRhIiArIHBhcnQsIHBhcnRzICk7CisgICAgICAgICAg
ICB9KTsKKyAgICAgICAgfSwgbnVsbCwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxLCBudWxs
LCBmYWxzZSApOworICAgIH0sCisKKyAgICByZW1vdmVEYXRhOiBmdW5jdGlvbigga2V5ICkgewor
ICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgalF1ZXJ5
LnJlbW92ZURhdGEoIHRoaXMsIGtleSApOworICAgICAgICB9KTsKKyAgICB9Cit9KTsKKworZnVu
Y3Rpb24gZGF0YUF0dHIoIGVsZW0sIGtleSwgZGF0YSApIHsKKyAgICAvLyBJZiBub3RoaW5nIHdh
cyBmb3VuZCBpbnRlcm5hbGx5LCB0cnkgdG8gZmV0Y2ggYW55CisgICAgLy8gZGF0YSBmcm9tIHRo
ZSBIVE1MNSBkYXRhLSogYXR0cmlidXRlCisgICAgaWYgKCBkYXRhID09PSB1bmRlZmluZWQgJiYg
ZWxlbS5ub2RlVHlwZSA9PT0gMSApIHsKKworICAgICAgICB2YXIgbmFtZSA9ICJkYXRhLSIgKyBr
ZXkucmVwbGFjZSggcm11bHRpRGFzaCwgIi0kMSIgKS50b0xvd2VyQ2FzZSgpOworCisgICAgICAg
IGRhdGEgPSBlbGVtLmdldEF0dHJpYnV0ZSggbmFtZSApOworCisgICAgICAgIGlmICggdHlwZW9m
IGRhdGEgPT09ICJzdHJpbmciICkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAg
ICBkYXRhID0gZGF0YSA9PT0gInRydWUiID8gdHJ1ZSA6CisgICAgICAgICAgICAgICAgZGF0YSA9
PT0gImZhbHNlIiA/IGZhbHNlIDoKKyAgICAgICAgICAgICAgICBkYXRhID09PSAibnVsbCIgPyBu
dWxsIDoKKyAgICAgICAgICAgICAgICAvLyBPbmx5IGNvbnZlcnQgdG8gYSBudW1iZXIgaWYgaXQg
ZG9lc24ndCBjaGFuZ2UgdGhlIHN0cmluZworICAgICAgICAgICAgICAgICtkYXRhICsgIiIgPT09
IGRhdGEgPyArZGF0YSA6CisgICAgICAgICAgICAgICAgcmJyYWNlLnRlc3QoIGRhdGEgKSA/IGpR
dWVyeS5wYXJzZUpTT04oIGRhdGEgKSA6CisgICAgICAgICAgICAgICAgICAgIGRhdGE7CisgICAg
ICAgICAgICB9IGNhdGNoKCBlICkge30KKworICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHdlIHNl
dCB0aGUgZGF0YSBzbyBpdCBpc24ndCBjaGFuZ2VkIGxhdGVyCisgICAgICAgICAgICBqUXVlcnku
ZGF0YSggZWxlbSwga2V5LCBkYXRhICk7CisKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IGRhdGEgPSB1bmRlZmluZWQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZGF0YTsK
K30KKworLy8gY2hlY2tzIGEgY2FjaGUgb2JqZWN0IGZvciBlbXB0aW5lc3MKK2Z1bmN0aW9uIGlz
RW1wdHlEYXRhT2JqZWN0KCBvYmogKSB7CisgICAgdmFyIG5hbWU7CisgICAgZm9yICggbmFtZSBp
biBvYmogKSB7CisKKyAgICAgICAgLy8gaWYgdGhlIHB1YmxpYyBkYXRhIG9iamVjdCBpcyBlbXB0
eSwgdGhlIHByaXZhdGUgaXMgc3RpbGwgZW1wdHkKKyAgICAgICAgaWYgKCBuYW1lID09PSAiZGF0
YSIgJiYgalF1ZXJ5LmlzRW1wdHlPYmplY3QoIG9ialtuYW1lXSApICkgeworICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCBuYW1lICE9PSAidG9KU09OIiApIHsK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVy
biB0cnVlOworfQoralF1ZXJ5LmV4dGVuZCh7CisgICAgcXVldWU6IGZ1bmN0aW9uKCBlbGVtLCB0
eXBlLCBkYXRhICkgeworICAgICAgICB2YXIgcXVldWU7CisKKyAgICAgICAgaWYgKCBlbGVtICkg
eworICAgICAgICAgICAgdHlwZSA9ICggdHlwZSB8fCAiZngiICkgKyAicXVldWUiOworICAgICAg
ICAgICAgcXVldWUgPSBqUXVlcnkuX2RhdGEoIGVsZW0sIHR5cGUgKTsKKworICAgICAgICAgICAg
Ly8gU3BlZWQgdXAgZGVxdWV1ZSBieSBnZXR0aW5nIG91dCBxdWlja2x5IGlmIHRoaXMgaXMganVz
dCBhIGxvb2t1cAorICAgICAgICAgICAgaWYgKCBkYXRhICkgeworICAgICAgICAgICAgICAgIGlm
ICggIXF1ZXVlIHx8IGpRdWVyeS5pc0FycmF5KGRhdGEpICkgeworICAgICAgICAgICAgICAgICAg
ICBxdWV1ZSA9IGpRdWVyeS5fZGF0YSggZWxlbSwgdHlwZSwgalF1ZXJ5Lm1ha2VBcnJheShkYXRh
KSApOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHF1ZXVl
LnB1c2goIGRhdGEgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICByZXR1cm4gcXVldWUgfHwgW107CisgICAgICAgIH0KKyAgICB9LAorCisgICAgZGVxdWV1
ZTogZnVuY3Rpb24oIGVsZW0sIHR5cGUgKSB7CisgICAgICAgIHR5cGUgPSB0eXBlIHx8ICJmeCI7
CisKKyAgICAgICAgdmFyIHF1ZXVlID0galF1ZXJ5LnF1ZXVlKCBlbGVtLCB0eXBlICksCisgICAg
ICAgICAgICBzdGFydExlbmd0aCA9IHF1ZXVlLmxlbmd0aCwKKyAgICAgICAgICAgIGZuID0gcXVl
dWUuc2hpZnQoKSwKKyAgICAgICAgICAgIGhvb2tzID0galF1ZXJ5Ll9xdWV1ZUhvb2tzKCBlbGVt
LCB0eXBlICksCisgICAgICAgICAgICBuZXh0ID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAg
ICAgalF1ZXJ5LmRlcXVldWUoIGVsZW0sIHR5cGUgKTsKKyAgICAgICAgICAgIH07CisKKyAgICAg
ICAgLy8gSWYgdGhlIGZ4IHF1ZXVlIGlzIGRlcXVldWVkLCBhbHdheXMgcmVtb3ZlIHRoZSBwcm9n
cmVzcyBzZW50aW5lbAorICAgICAgICBpZiAoIGZuID09PSAiaW5wcm9ncmVzcyIgKSB7CisgICAg
ICAgICAgICBmbiA9IHF1ZXVlLnNoaWZ0KCk7CisgICAgICAgICAgICBzdGFydExlbmd0aC0tOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKCBmbiApIHsKKworICAgICAgICAgICAgLy8gQWRkIGEg
cHJvZ3Jlc3Mgc2VudGluZWwgdG8gcHJldmVudCB0aGUgZnggcXVldWUgZnJvbSBiZWluZworICAg
ICAgICAgICAgLy8gYXV0b21hdGljYWxseSBkZXF1ZXVlZAorICAgICAgICAgICAgaWYgKCB0eXBl
ID09PSAiZngiICkgeworICAgICAgICAgICAgICAgIHF1ZXVlLnVuc2hpZnQoICJpbnByb2dyZXNz
IiApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBjbGVhciB1cCB0aGUgbGFzdCBx
dWV1ZSBzdG9wIGZ1bmN0aW9uCisgICAgICAgICAgICBkZWxldGUgaG9va3Muc3RvcDsKKyAgICAg
ICAgICAgIGZuLmNhbGwoIGVsZW0sIG5leHQsIGhvb2tzICk7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoICFzdGFydExlbmd0aCAmJiBob29rcyApIHsKKyAgICAgICAgICAgIGhvb2tzLmVtcHR5
LmZpcmUoKTsKKyAgICAgICAgfQorICAgIH0sCisKKyAgICAvLyBub3QgaW50ZW5kZWQgZm9yIHB1
YmxpYyBjb25zdW1wdGlvbiAtIGdlbmVyYXRlcyBhIHF1ZXVlSG9va3Mgb2JqZWN0LCBvciByZXR1
cm5zIHRoZSBjdXJyZW50IG9uZQorICAgIF9xdWV1ZUhvb2tzOiBmdW5jdGlvbiggZWxlbSwgdHlw
ZSApIHsKKyAgICAgICAgdmFyIGtleSA9IHR5cGUgKyAicXVldWVIb29rcyI7CisgICAgICAgIHJl
dHVybiBqUXVlcnkuX2RhdGEoIGVsZW0sIGtleSApIHx8IGpRdWVyeS5fZGF0YSggZWxlbSwga2V5
LCB7CisgICAgICAgICAgICBlbXB0eTogalF1ZXJ5LkNhbGxiYWNrcygib25jZSBtZW1vcnkiKS5h
ZGQoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgalF1ZXJ5LnJlbW92ZURhdGEoIGVsZW0s
IHR5cGUgKyAicXVldWUiLCB0cnVlICk7CisgICAgICAgICAgICAgICAgalF1ZXJ5LnJlbW92ZURh
dGEoIGVsZW0sIGtleSwgdHJ1ZSApOworICAgICAgICAgICAgfSkKKyAgICAgICAgfSk7CisgICAg
fQorfSk7CisKK2pRdWVyeS5mbi5leHRlbmQoeworICAgIHF1ZXVlOiBmdW5jdGlvbiggdHlwZSwg
ZGF0YSApIHsKKyAgICAgICAgdmFyIHNldHRlciA9IDI7CisKKyAgICAgICAgaWYgKCB0eXBlb2Yg
dHlwZSAhPT0gInN0cmluZyIgKSB7CisgICAgICAgICAgICBkYXRhID0gdHlwZTsKKyAgICAgICAg
ICAgIHR5cGUgPSAiZngiOworICAgICAgICAgICAgc2V0dGVyLS07CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoIGFyZ3VtZW50cy5sZW5ndGggPCBzZXR0ZXIgKSB7CisgICAgICAgICAgICByZXR1
cm4galF1ZXJ5LnF1ZXVlKCB0aGlzWzBdLCB0eXBlICk7CisgICAgICAgIH0KKworICAgICAgICBy
ZXR1cm4gZGF0YSA9PT0gdW5kZWZpbmVkID8KKyAgICAgICAgICAgIHRoaXMgOgorICAgICAgICAg
ICAgdGhpcy5lYWNoKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHZhciBxdWV1ZSA9IGpR
dWVyeS5xdWV1ZSggdGhpcywgdHlwZSwgZGF0YSApOworCisgICAgICAgICAgICAgICAgLy8gZW5z
dXJlIGEgaG9va3MgZm9yIHRoaXMgcXVldWUKKyAgICAgICAgICAgICAgICBqUXVlcnkuX3F1ZXVl
SG9va3MoIHRoaXMsIHR5cGUgKTsKKworICAgICAgICAgICAgICAgIGlmICggdHlwZSA9PT0gImZ4
IiAmJiBxdWV1ZVswXSAhPT0gImlucHJvZ3Jlc3MiICkgeworICAgICAgICAgICAgICAgICAgICBq
UXVlcnkuZGVxdWV1ZSggdGhpcywgdHlwZSApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0pOworICAgIH0sCisgICAgZGVxdWV1ZTogZnVuY3Rpb24oIHR5cGUgKSB7CisgICAgICAg
IHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBqUXVlcnkuZGVxdWV1
ZSggdGhpcywgdHlwZSApOworICAgICAgICB9KTsKKyAgICB9LAorICAgIC8vIEJhc2VkIG9mZiBv
ZiB0aGUgcGx1Z2luIGJ5IENsaW50IEhlbGZlcnMsIHdpdGggcGVybWlzc2lvbi4KKyAgICAvLyBo
dHRwOi8vYmxpbmRzaWduYWxzLmNvbS9pbmRleC5waHAvMjAwOS8wNy9qcXVlcnktZGVsYXkvCisg
ICAgZGVsYXk6IGZ1bmN0aW9uKCB0aW1lLCB0eXBlICkgeworICAgICAgICB0aW1lID0galF1ZXJ5
LmZ4ID8galF1ZXJ5LmZ4LnNwZWVkc1sgdGltZSBdIHx8IHRpbWUgOiB0aW1lOworICAgICAgICB0
eXBlID0gdHlwZSB8fCAiZngiOworCisgICAgICAgIHJldHVybiB0aGlzLnF1ZXVlKCB0eXBlLCBm
dW5jdGlvbiggbmV4dCwgaG9va3MgKSB7CisgICAgICAgICAgICB2YXIgdGltZW91dCA9IHNldFRp
bWVvdXQoIG5leHQsIHRpbWUgKTsKKyAgICAgICAgICAgIGhvb2tzLnN0b3AgPSBmdW5jdGlvbigp
IHsKKyAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoIHRpbWVvdXQgKTsKKyAgICAgICAgICAg
IH07CisgICAgICAgIH0pOworICAgIH0sCisgICAgY2xlYXJRdWV1ZTogZnVuY3Rpb24oIHR5cGUg
KSB7CisgICAgICAgIHJldHVybiB0aGlzLnF1ZXVlKCB0eXBlIHx8ICJmeCIsIFtdICk7CisgICAg
fSwKKyAgICAvLyBHZXQgYSBwcm9taXNlIHJlc29sdmVkIHdoZW4gcXVldWVzIG9mIGEgY2VydGFp
biB0eXBlCisgICAgLy8gYXJlIGVtcHRpZWQgKGZ4IGlzIHRoZSB0eXBlIGJ5IGRlZmF1bHQpCisg
ICAgcHJvbWlzZTogZnVuY3Rpb24oIHR5cGUsIG9iaiApIHsKKyAgICAgICAgdmFyIHRtcCwKKyAg
ICAgICAgICAgIGNvdW50ID0gMSwKKyAgICAgICAgICAgIGRlZmVyID0galF1ZXJ5LkRlZmVycmVk
KCksCisgICAgICAgICAgICBlbGVtZW50cyA9IHRoaXMsCisgICAgICAgICAgICBpID0gdGhpcy5s
ZW5ndGgsCisgICAgICAgICAgICByZXNvbHZlID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAg
ICAgaWYgKCAhKCAtLWNvdW50ICkgKSB7CisgICAgICAgICAgICAgICAgICAgIGRlZmVyLnJlc29s
dmVXaXRoKCBlbGVtZW50cywgWyBlbGVtZW50cyBdICk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfTsKKworICAgICAgICBpZiAoIHR5cGVvZiB0eXBlICE9PSAic3RyaW5nIiApIHsK
KyAgICAgICAgICAgIG9iaiA9IHR5cGU7CisgICAgICAgICAgICB0eXBlID0gdW5kZWZpbmVkOwor
ICAgICAgICB9CisgICAgICAgIHR5cGUgPSB0eXBlIHx8ICJmeCI7CisKKyAgICAgICAgd2hpbGUo
IGktLSApIHsKKyAgICAgICAgICAgIHRtcCA9IGpRdWVyeS5fZGF0YSggZWxlbWVudHNbIGkgXSwg
dHlwZSArICJxdWV1ZUhvb2tzIiApOworICAgICAgICAgICAgaWYgKCB0bXAgJiYgdG1wLmVtcHR5
ICkgeworICAgICAgICAgICAgICAgIGNvdW50Kys7CisgICAgICAgICAgICAgICAgdG1wLmVtcHR5
LmFkZCggcmVzb2x2ZSApOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJlc29s
dmUoKTsKKyAgICAgICAgcmV0dXJuIGRlZmVyLnByb21pc2UoIG9iaiApOworICAgIH0KK30pOwor
dmFyIG5vZGVIb29rLCBib29sSG9vaywgZml4U3BlY2lmaWVkLAorICAgIHJjbGFzcyA9IC9bXHRc
clxuXS9nLAorICAgIHJyZXR1cm4gPSAvXHIvZywKKyAgICBydHlwZSA9IC9eKD86YnV0dG9ufGlu
cHV0KSQvaSwKKyAgICByZm9jdXNhYmxlID0gL14oPzpidXR0b258aW5wdXR8b2JqZWN0fHNlbGVj
dHx0ZXh0YXJlYSkkL2ksCisgICAgcmNsaWNrYWJsZSA9IC9eYSg/OnJlYXwpJC9pLAorICAgIHJi
b29sZWFuID0gL14oPzphdXRvZm9jdXN8YXV0b3BsYXl8YXN5bmN8Y2hlY2tlZHxjb250cm9sc3xk
ZWZlcnxkaXNhYmxlZHxoaWRkZW58bG9vcHxtdWx0aXBsZXxvcGVufHJlYWRvbmx5fHJlcXVpcmVk
fHNjb3BlZHxzZWxlY3RlZCkkL2ksCisgICAgZ2V0U2V0QXR0cmlidXRlID0galF1ZXJ5LnN1cHBv
cnQuZ2V0U2V0QXR0cmlidXRlOworCitqUXVlcnkuZm4uZXh0ZW5kKHsKKyAgICBhdHRyOiBmdW5j
dGlvbiggbmFtZSwgdmFsdWUgKSB7CisgICAgICAgIHJldHVybiBqUXVlcnkuYWNjZXNzKCB0aGlz
LCBqUXVlcnkuYXR0ciwgbmFtZSwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxICk7CisgICAg
fSwKKworICAgIHJlbW92ZUF0dHI6IGZ1bmN0aW9uKCBuYW1lICkgeworICAgICAgICByZXR1cm4g
dGhpcy5lYWNoKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgalF1ZXJ5LnJlbW92ZUF0dHIoIHRo
aXMsIG5hbWUgKTsKKyAgICAgICAgfSk7CisgICAgfSwKKworICAgIHByb3A6IGZ1bmN0aW9uKCBu
YW1lLCB2YWx1ZSApIHsKKyAgICAgICAgcmV0dXJuIGpRdWVyeS5hY2Nlc3MoIHRoaXMsIGpRdWVy
eS5wcm9wLCBuYW1lLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgKTsKKyAgICB9LAorCisg
ICAgcmVtb3ZlUHJvcDogZnVuY3Rpb24oIG5hbWUgKSB7CisgICAgICAgIG5hbWUgPSBqUXVlcnku
cHJvcEZpeFsgbmFtZSBdIHx8IG5hbWU7CisgICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rp
b24oKSB7CisgICAgICAgICAgICAvLyB0cnkvY2F0Y2ggaGFuZGxlcyBjYXNlcyB3aGVyZSBJRSBi
YWxrcyAoc3VjaCBhcyByZW1vdmluZyBhIHByb3BlcnR5IG9uIHdpbmRvdykKKyAgICAgICAgICAg
IHRyeSB7CisgICAgICAgICAgICAgICAgdGhpc1sgbmFtZSBdID0gdW5kZWZpbmVkOworICAgICAg
ICAgICAgICAgIGRlbGV0ZSB0aGlzWyBuYW1lIF07CisgICAgICAgICAgICB9IGNhdGNoKCBlICkg
e30KKyAgICAgICAgfSk7CisgICAgfSwKKworICAgIGFkZENsYXNzOiBmdW5jdGlvbiggdmFsdWUg
KSB7CisgICAgICAgIHZhciBjbGFzc05hbWVzLCBpLCBsLCBlbGVtLAorICAgICAgICAgICAgc2V0
Q2xhc3MsIGMsIGNsOworCisgICAgICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHZhbHVlICkg
KSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCBqICkgeworICAgICAg
ICAgICAgICAgIGpRdWVyeSggdGhpcyApLmFkZENsYXNzKCB2YWx1ZS5jYWxsKHRoaXMsIGosIHRo
aXMuY2xhc3NOYW1lKSApOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoIHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gInN0cmluZyIgKSB7CisgICAgICAgICAgICBj
bGFzc05hbWVzID0gdmFsdWUuc3BsaXQoIGNvcmVfcnNwYWNlICk7CisKKyAgICAgICAgICAgIGZv
ciAoIGkgPSAwLCBsID0gdGhpcy5sZW5ndGg7IGkgPCBsOyBpKysgKSB7CisgICAgICAgICAgICAg
ICAgZWxlbSA9IHRoaXNbIGkgXTsKKworICAgICAgICAgICAgICAgIGlmICggZWxlbS5ub2RlVHlw
ZSA9PT0gMSApIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCAhZWxlbS5jbGFzc05hbWUgJiYg
Y2xhc3NOYW1lcy5sZW5ndGggPT09IDEgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBlbGVt
LmNsYXNzTmFtZSA9IHZhbHVlOworCisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBzZXRDbGFzcyA9ICIgIiArIGVsZW0uY2xhc3NOYW1lICsgIiAi
OworCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCBjID0gMCwgY2wgPSBjbGFzc05hbWVz
Lmxlbmd0aDsgYyA8IGNsOyBjKysgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCBzZXRDbGFzcy5pbmRleE9mKCAiICIgKyBjbGFzc05hbWVzWyBjIF0gKyAiICIgKSA8IDAgKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldENsYXNzICs9IGNsYXNzTmFtZXNb
IGMgXSArICIgIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLmNsYXNzTmFtZSA9IGpR
dWVyeS50cmltKCBzZXRDbGFzcyApOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRoaXM7
CisgICAgfSwKKworICAgIHJlbW92ZUNsYXNzOiBmdW5jdGlvbiggdmFsdWUgKSB7CisgICAgICAg
IHZhciByZW1vdmVzLCBjbGFzc05hbWUsIGVsZW0sIGMsIGNsLCBpLCBsOworCisgICAgICAgIGlm
ICggalF1ZXJ5LmlzRnVuY3Rpb24oIHZhbHVlICkgKSB7CisgICAgICAgICAgICByZXR1cm4gdGhp
cy5lYWNoKGZ1bmN0aW9uKCBqICkgeworICAgICAgICAgICAgICAgIGpRdWVyeSggdGhpcyApLnJl
bW92ZUNsYXNzKCB2YWx1ZS5jYWxsKHRoaXMsIGosIHRoaXMuY2xhc3NOYW1lKSApOworICAgICAg
ICAgICAgfSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCAodmFsdWUgJiYgdHlwZW9mIHZhbHVl
ID09PSAic3RyaW5nIikgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgIHJl
bW92ZXMgPSAoIHZhbHVlIHx8ICIiICkuc3BsaXQoIGNvcmVfcnNwYWNlICk7CisKKyAgICAgICAg
ICAgIGZvciAoIGkgPSAwLCBsID0gdGhpcy5sZW5ndGg7IGkgPCBsOyBpKysgKSB7CisgICAgICAg
ICAgICAgICAgZWxlbSA9IHRoaXNbIGkgXTsKKyAgICAgICAgICAgICAgICBpZiAoIGVsZW0ubm9k
ZVR5cGUgPT09IDEgJiYgZWxlbS5jbGFzc05hbWUgKSB7CisKKyAgICAgICAgICAgICAgICAgICAg
Y2xhc3NOYW1lID0gKCIgIiArIGVsZW0uY2xhc3NOYW1lICsgIiAiKS5yZXBsYWNlKCByY2xhc3Ms
ICIgIiApOworCisgICAgICAgICAgICAgICAgICAgIC8vIGxvb3Agb3ZlciBlYWNoIGl0ZW0gaW4g
dGhlIHJlbW92YWwgbGlzdAorICAgICAgICAgICAgICAgICAgICBmb3IgKCBjID0gMCwgY2wgPSBy
ZW1vdmVzLmxlbmd0aDsgYyA8IGNsOyBjKysgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAv
LyBSZW1vdmUgdW50aWwgdGhlcmUgaXMgbm90aGluZyB0byByZW1vdmUsCisgICAgICAgICAgICAg
ICAgICAgICAgICB3aGlsZSAoIGNsYXNzTmFtZS5pbmRleE9mKCIgIiArIHJlbW92ZXNbIGMgXSAr
ICIgIikgPj0gMCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWUgPSBj
bGFzc05hbWUucmVwbGFjZSggIiAiICsgcmVtb3Zlc1sgYyBdICsgIiAiICwgIiAiICk7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgZWxlbS5jbGFzc05hbWUgPSB2YWx1ZSA/IGpRdWVyeS50cmltKCBjbGFzc05hbWUg
KSA6ICIiOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg
ICAgICAgIHJldHVybiB0aGlzOworICAgIH0sCisKKyAgICB0b2dnbGVDbGFzczogZnVuY3Rpb24o
IHZhbHVlLCBzdGF0ZVZhbCApIHsKKyAgICAgICAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWUsCisg
ICAgICAgICAgICBpc0Jvb2wgPSB0eXBlb2Ygc3RhdGVWYWwgPT09ICJib29sZWFuIjsKKworICAg
ICAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCB2YWx1ZSApICkgeworICAgICAgICAgICAgcmV0
dXJuIHRoaXMuZWFjaChmdW5jdGlvbiggaSApIHsKKyAgICAgICAgICAgICAgICBqUXVlcnkoIHRo
aXMgKS50b2dnbGVDbGFzcyggdmFsdWUuY2FsbCh0aGlzLCBpLCB0aGlzLmNsYXNzTmFtZSwgc3Rh
dGVWYWwpLCBzdGF0ZVZhbCApOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKworICAgICAg
ICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgaWYgKCB0eXBlID09
PSAic3RyaW5nIiApIHsKKyAgICAgICAgICAgICAgICAvLyB0b2dnbGUgaW5kaXZpZHVhbCBjbGFz
cyBuYW1lcworICAgICAgICAgICAgICAgIHZhciBjbGFzc05hbWUsCisgICAgICAgICAgICAgICAg
ICAgIGkgPSAwLAorICAgICAgICAgICAgICAgICAgICBzZWxmID0galF1ZXJ5KCB0aGlzICksCisg
ICAgICAgICAgICAgICAgICAgIHN0YXRlID0gc3RhdGVWYWwsCisgICAgICAgICAgICAgICAgICAg
IGNsYXNzTmFtZXMgPSB2YWx1ZS5zcGxpdCggY29yZV9yc3BhY2UgKTsKKworICAgICAgICAgICAg
ICAgIHdoaWxlICggKGNsYXNzTmFtZSA9IGNsYXNzTmFtZXNbIGkrKyBdKSApIHsKKyAgICAgICAg
ICAgICAgICAgICAgLy8gY2hlY2sgZWFjaCBjbGFzc05hbWUgZ2l2ZW4sIHNwYWNlIHNlcGFyYXRl
ZCBsaXN0CisgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gaXNCb29sID8gc3RhdGUgOiAhc2Vs
Zi5oYXNDbGFzcyggY2xhc3NOYW1lICk7CisgICAgICAgICAgICAgICAgICAgIHNlbGZbIHN0YXRl
ID8gImFkZENsYXNzIiA6ICJyZW1vdmVDbGFzcyIgXSggY2xhc3NOYW1lICk7CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICB9IGVsc2UgaWYgKCB0eXBlID09PSAidW5kZWZpbmVkIiB8
fCB0eXBlID09PSAiYm9vbGVhbiIgKSB7CisgICAgICAgICAgICAgICAgaWYgKCB0aGlzLmNsYXNz
TmFtZSApIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gc3RvcmUgY2xhc3NOYW1lIGlmIHNldAor
ICAgICAgICAgICAgICAgICAgICBqUXVlcnkuX2RhdGEoIHRoaXMsICJfX2NsYXNzTmFtZV9fIiwg
dGhpcy5jbGFzc05hbWUgKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAv
LyB0b2dnbGUgd2hvbGUgY2xhc3NOYW1lCisgICAgICAgICAgICAgICAgdGhpcy5jbGFzc05hbWUg
PSB0aGlzLmNsYXNzTmFtZSB8fCB2YWx1ZSA9PT0gZmFsc2UgPyAiIiA6IGpRdWVyeS5fZGF0YSgg
dGhpcywgIl9fY2xhc3NOYW1lX18iICkgfHwgIiI7CisgICAgICAgICAgICB9CisgICAgICAgIH0p
OworICAgIH0sCisKKyAgICBoYXNDbGFzczogZnVuY3Rpb24oIHNlbGVjdG9yICkgeworICAgICAg
ICB2YXIgY2xhc3NOYW1lID0gIiAiICsgc2VsZWN0b3IgKyAiICIsCisgICAgICAgICAgICBpID0g
MCwKKyAgICAgICAgICAgIGwgPSB0aGlzLmxlbmd0aDsKKyAgICAgICAgZm9yICggOyBpIDwgbDsg
aSsrICkgeworICAgICAgICAgICAgaWYgKCB0aGlzW2ldLm5vZGVUeXBlID09PSAxICYmICgiICIg
KyB0aGlzW2ldLmNsYXNzTmFtZSArICIgIikucmVwbGFjZShyY2xhc3MsICIgIikuaW5kZXhPZigg
Y2xhc3NOYW1lICkgPj0gMCApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9LAorCisg
ICAgdmFsOiBmdW5jdGlvbiggdmFsdWUgKSB7CisgICAgICAgIHZhciBob29rcywgcmV0LCBpc0Z1
bmN0aW9uLAorICAgICAgICAgICAgZWxlbSA9IHRoaXNbMF07CisKKyAgICAgICAgaWYgKCAhYXJn
dW1lbnRzLmxlbmd0aCApIHsKKyAgICAgICAgICAgIGlmICggZWxlbSApIHsKKyAgICAgICAgICAg
ICAgICBob29rcyA9IGpRdWVyeS52YWxIb29rc1sgZWxlbS50eXBlIF0gfHwgalF1ZXJ5LnZhbEhv
b2tzWyBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgXTsKKworICAgICAgICAgICAgICAgIGlm
ICggaG9va3MgJiYgImdldCIgaW4gaG9va3MgJiYgKHJldCA9IGhvb2tzLmdldCggZWxlbSwgInZh
bHVlIiApKSAhPT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0
OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHJldCA9IGVsZW0udmFsdWU7
CisKKyAgICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIHJldCA9PT0gInN0cmluZyIgPworICAg
ICAgICAgICAgICAgICAgICAvLyBoYW5kbGUgbW9zdCBjb21tb24gc3RyaW5nIGNhc2VzCisgICAg
ICAgICAgICAgICAgICAgIHJldC5yZXBsYWNlKHJyZXR1cm4sICIiKSA6CisgICAgICAgICAgICAg
ICAgICAgIC8vIGhhbmRsZSBjYXNlcyB3aGVyZSB2YWx1ZSBpcyBudWxsL3VuZGVmIG9yIG51bWJl
cgorICAgICAgICAgICAgICAgICAgICByZXQgPT0gbnVsbCA/ICIiIDogcmV0OworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpc0Z1bmN0
aW9uID0galF1ZXJ5LmlzRnVuY3Rpb24oIHZhbHVlICk7CisKKyAgICAgICAgcmV0dXJuIHRoaXMu
ZWFjaChmdW5jdGlvbiggaSApIHsKKyAgICAgICAgICAgIHZhciB2YWwsCisgICAgICAgICAgICAg
ICAgc2VsZiA9IGpRdWVyeSh0aGlzKTsKKworICAgICAgICAgICAgaWYgKCB0aGlzLm5vZGVUeXBl
ICE9PSAxICkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaWYgKCBpc0Z1bmN0aW9uICkgeworICAgICAgICAgICAgICAgIHZhbCA9IHZhbHVl
LmNhbGwoIHRoaXMsIGksIHNlbGYudmFsKCkgKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgdmFsID0gdmFsdWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8v
IFRyZWF0IG51bGwvdW5kZWZpbmVkIGFzICIiOyBjb252ZXJ0IG51bWJlcnMgdG8gc3RyaW5nCisg
ICAgICAgICAgICBpZiAoIHZhbCA9PSBudWxsICkgeworICAgICAgICAgICAgICAgIHZhbCA9ICIi
OworICAgICAgICAgICAgfSBlbHNlIGlmICggdHlwZW9mIHZhbCA9PT0gIm51bWJlciIgKSB7Cisg
ICAgICAgICAgICAgICAgdmFsICs9ICIiOworICAgICAgICAgICAgfSBlbHNlIGlmICggalF1ZXJ5
LmlzQXJyYXkoIHZhbCApICkgeworICAgICAgICAgICAgICAgIHZhbCA9IGpRdWVyeS5tYXAodmFs
LCBmdW5jdGlvbiAoIHZhbHVlICkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUg
PT0gbnVsbCA/ICIiIDogdmFsdWUgKyAiIjsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgaG9va3MgPSBqUXVlcnkudmFsSG9va3NbIHRoaXMudHlwZSBd
IHx8IGpRdWVyeS52YWxIb29rc1sgdGhpcy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpIF07CisKKyAg
ICAgICAgICAgIC8vIElmIHNldCByZXR1cm5zIHVuZGVmaW5lZCwgZmFsbCBiYWNrIHRvIG5vcm1h
bCBzZXR0aW5nCisgICAgICAgICAgICBpZiAoICFob29rcyB8fCAhKCJzZXQiIGluIGhvb2tzKSB8
fCBob29rcy5zZXQoIHRoaXMsIHZhbCwgInZhbHVlIiApID09PSB1bmRlZmluZWQgKSB7CisgICAg
ICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7
CisgICAgfQorfSk7CisKK2pRdWVyeS5leHRlbmQoeworICAgIHZhbEhvb2tzOiB7CisgICAgICAg
IG9wdGlvbjogeworICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAg
ICAgICAgICAvLyBhdHRyaWJ1dGVzLnZhbHVlIGlzIHVuZGVmaW5lZCBpbiBCbGFja2JlcnJ5IDQu
NyBidXQKKyAgICAgICAgICAgICAgICAvLyB1c2VzIC52YWx1ZS4gU2VlICM2OTMyCisgICAgICAg
ICAgICAgICAgdmFyIHZhbCA9IGVsZW0uYXR0cmlidXRlcy52YWx1ZTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gIXZhbCB8fCB2YWwuc3BlY2lmaWVkID8gZWxlbS52YWx1ZSA6IGVsZW0udGV4dDsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgc2VsZWN0OiB7CisgICAgICAgICAg
ICBnZXQ6IGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAgICAgIHZhciB2YWx1ZSwgb3B0
aW9uLAorICAgICAgICAgICAgICAgICAgICBvcHRpb25zID0gZWxlbS5vcHRpb25zLAorICAgICAg
ICAgICAgICAgICAgICBpbmRleCA9IGVsZW0uc2VsZWN0ZWRJbmRleCwKKyAgICAgICAgICAgICAg
ICAgICAgb25lID0gZWxlbS50eXBlID09PSAic2VsZWN0LW9uZSIgfHwgaW5kZXggPCAwLAorICAg
ICAgICAgICAgICAgICAgICB2YWx1ZXMgPSBvbmUgPyBudWxsIDogW10sCisgICAgICAgICAgICAg
ICAgICAgIG1heCA9IG9uZSA/IGluZGV4ICsgMSA6IG9wdGlvbnMubGVuZ3RoLAorICAgICAgICAg
ICAgICAgICAgICBpID0gaW5kZXggPCAwID8KKyAgICAgICAgICAgICAgICAgICAgICAgIG1heCA6
CisgICAgICAgICAgICAgICAgICAgICAgICBvbmUgPyBpbmRleCA6IDA7CisKKyAgICAgICAgICAg
ICAgICAvLyBMb29wIHRocm91Z2ggYWxsIHRoZSBzZWxlY3RlZCBvcHRpb25zCisgICAgICAgICAg
ICAgICAgZm9yICggOyBpIDwgbWF4OyBpKysgKSB7CisgICAgICAgICAgICAgICAgICAgIG9wdGlv
biA9IG9wdGlvbnNbIGkgXTsKKworICAgICAgICAgICAgICAgICAgICAvLyBvbGRJRSBkb2Vzbid0
IHVwZGF0ZSBzZWxlY3RlZCBhZnRlciBmb3JtIHJlc2V0ICgjMjU1MSkKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKCAoIG9wdGlvbi5zZWxlY3RlZCB8fCBpID09PSBpbmRleCApICYmCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gRG9uJ3QgcmV0dXJuIG9wdGlvbnMgdGhhdCBhcmUgZGlz
YWJsZWQgb3IgaW4gYSBkaXNhYmxlZCBvcHRncm91cAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICggalF1ZXJ5LnN1cHBvcnQub3B0RGlzYWJsZWQgPyAhb3B0aW9uLmRpc2FibGVkIDogb3B0
aW9uLmdldEF0dHJpYnV0ZSgiZGlzYWJsZWQiKSA9PT0gbnVsbCApICYmCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKCAhb3B0aW9uLnBhcmVudE5vZGUuZGlzYWJsZWQgfHwgIWpRdWVyeS5u
b2RlTmFtZSggb3B0aW9uLnBhcmVudE5vZGUsICJvcHRncm91cCIgKSApICkgeworCisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIHNwZWNpZmljIHZhbHVlIGZvciB0aGUgb3B0aW9u
CisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGpRdWVyeSggb3B0aW9uICkudmFsKCk7
CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgYW4gYXJyYXkgZm9y
IG9uZSBzZWxlY3RzCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG9uZSApIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgICAgICAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIE11bHRpLVNlbGVjdHMgcmV0dXJu
IGFuIGFycmF5CisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMucHVzaCggdmFsdWUgKTsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgIHJldHVybiB2YWx1ZXM7CisgICAgICAgICAgICB9LAorCisgICAgICAgICAgICBzZXQ6IGZ1
bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHsKKyAgICAgICAgICAgICAgICB2YXIgdmFsdWVzID0galF1
ZXJ5Lm1ha2VBcnJheSggdmFsdWUgKTsKKworICAgICAgICAgICAgICAgIGpRdWVyeShlbGVtKS5m
aW5kKCJvcHRpb24iKS5lYWNoKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICB0aGlz
LnNlbGVjdGVkID0galF1ZXJ5LmluQXJyYXkoIGpRdWVyeSh0aGlzKS52YWwoKSwgdmFsdWVzICkg
Pj0gMDsKKyAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgICAgIGlmICggIXZhbHVl
cy5sZW5ndGggKSB7CisgICAgICAgICAgICAgICAgICAgIGVsZW0uc2VsZWN0ZWRJbmRleCA9IC0x
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVzOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfSwKKworICAgIC8vIFVudXNlZCBpbiAxLjgsIGxl
ZnQgaW4gc28gYXR0ckZuLXN0YWJiZXJzIHdvbid0IGRpZTsgcmVtb3ZlIGluIDEuOQorICAgIGF0
dHJGbjoge30sCisKKyAgICBhdHRyOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUsIHBhc3Mg
KSB7CisgICAgICAgIHZhciByZXQsIGhvb2tzLCBub3R4bWwsCisgICAgICAgICAgICBuVHlwZSA9
IGVsZW0ubm9kZVR5cGU7CisKKyAgICAgICAgLy8gZG9uJ3QgZ2V0L3NldCBhdHRyaWJ1dGVzIG9u
IHRleHQsIGNvbW1lbnQgYW5kIGF0dHJpYnV0ZSBub2RlcworICAgICAgICBpZiAoICFlbGVtIHx8
IG5UeXBlID09PSAzIHx8IG5UeXBlID09PSA4IHx8IG5UeXBlID09PSAyICkgeworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCBwYXNzICYmIGpRdWVyeS5pc0Z1
bmN0aW9uKCBqUXVlcnkuZm5bIG5hbWUgXSApICkgeworICAgICAgICAgICAgcmV0dXJuIGpRdWVy
eSggZWxlbSApWyBuYW1lIF0oIHZhbHVlICk7CisgICAgICAgIH0KKworICAgICAgICAvLyBGYWxs
YmFjayB0byBwcm9wIHdoZW4gYXR0cmlidXRlcyBhcmUgbm90IHN1cHBvcnRlZAorICAgICAgICBp
ZiAoIHR5cGVvZiBlbGVtLmdldEF0dHJpYnV0ZSA9PT0gInVuZGVmaW5lZCIgKSB7CisgICAgICAg
ICAgICByZXR1cm4galF1ZXJ5LnByb3AoIGVsZW0sIG5hbWUsIHZhbHVlICk7CisgICAgICAgIH0K
KworICAgICAgICBub3R4bWwgPSBuVHlwZSAhPT0gMSB8fCAhalF1ZXJ5LmlzWE1MRG9jKCBlbGVt
ICk7CisKKyAgICAgICAgLy8gQWxsIGF0dHJpYnV0ZXMgYXJlIGxvd2VyY2FzZQorICAgICAgICAv
LyBHcmFiIG5lY2Vzc2FyeSBob29rIGlmIG9uZSBpcyBkZWZpbmVkCisgICAgICAgIGlmICggbm90
eG1sICkgeworICAgICAgICAgICAgbmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTsKKyAgICAgICAg
ICAgIGhvb2tzID0galF1ZXJ5LmF0dHJIb29rc1sgbmFtZSBdIHx8ICggcmJvb2xlYW4udGVzdCgg
bmFtZSApID8gYm9vbEhvb2sgOiBub2RlSG9vayApOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkgeworCisgICAgICAgICAgICBpZiAoIHZhbHVlID09PSBu
dWxsICkgeworICAgICAgICAgICAgICAgIGpRdWVyeS5yZW1vdmVBdHRyKCBlbGVtLCBuYW1lICk7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICB9IGVsc2UgaWYgKCBob29r
cyAmJiAic2V0IiBpbiBob29rcyAmJiBub3R4bWwgJiYgKHJldCA9IGhvb2tzLnNldCggZWxlbSwg
dmFsdWUsIG5hbWUgKSkgIT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
cmV0OworCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGVsZW0uc2V0QXR0
cmlidXRlKCBuYW1lLCB2YWx1ZSArICIiICk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVl
OworICAgICAgICAgICAgfQorCisgICAgICAgIH0gZWxzZSBpZiAoIGhvb2tzICYmICJnZXQiIGlu
IGhvb2tzICYmIG5vdHhtbCAmJiAocmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBuYW1lICkpICE9PSBu
dWxsICkgeworICAgICAgICAgICAgcmV0dXJuIHJldDsKKworICAgICAgICB9IGVsc2UgeworCisg
ICAgICAgICAgICByZXQgPSBlbGVtLmdldEF0dHJpYnV0ZSggbmFtZSApOworCisgICAgICAgICAg
ICAvLyBOb24tZXhpc3RlbnQgYXR0cmlidXRlcyByZXR1cm4gbnVsbCwgd2Ugbm9ybWFsaXplIHRv
IHVuZGVmaW5lZAorICAgICAgICAgICAgcmV0dXJuIHJldCA9PT0gbnVsbCA/CisgICAgICAgICAg
ICAgICAgdW5kZWZpbmVkIDoKKyAgICAgICAgICAgICAgICByZXQ7CisgICAgICAgIH0KKyAgICB9
LAorCisgICAgcmVtb3ZlQXR0cjogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkgeworICAgICAgICB2
YXIgcHJvcE5hbWUsIGF0dHJOYW1lcywgbmFtZSwgaXNCb29sLAorICAgICAgICAgICAgaSA9IDA7
CisKKyAgICAgICAgaWYgKCB2YWx1ZSAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkgeworCisgICAg
ICAgICAgICBhdHRyTmFtZXMgPSB2YWx1ZS5zcGxpdCggY29yZV9yc3BhY2UgKTsKKworICAgICAg
ICAgICAgZm9yICggOyBpIDwgYXR0ck5hbWVzLmxlbmd0aDsgaSsrICkgeworICAgICAgICAgICAg
ICAgIG5hbWUgPSBhdHRyTmFtZXNbIGkgXTsKKworICAgICAgICAgICAgICAgIGlmICggbmFtZSAp
IHsKKyAgICAgICAgICAgICAgICAgICAgcHJvcE5hbWUgPSBqUXVlcnkucHJvcEZpeFsgbmFtZSBd
IHx8IG5hbWU7CisgICAgICAgICAgICAgICAgICAgIGlzQm9vbCA9IHJib29sZWFuLnRlc3QoIG5h
bWUgKTsKKworICAgICAgICAgICAgICAgICAgICAvLyBTZWUgIzk2OTkgZm9yIGV4cGxhbmF0aW9u
IG9mIHRoaXMgYXBwcm9hY2ggKHNldHRpbmcgZmlyc3QsIHRoZW4gcmVtb3ZhbCkKKyAgICAgICAg
ICAgICAgICAgICAgLy8gRG8gbm90IGRvIHRoaXMgZm9yIGJvb2xlYW4gYXR0cmlidXRlcyAoc2Vl
ICMxMDg3MCkKKyAgICAgICAgICAgICAgICAgICAgaWYgKCAhaXNCb29sICkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgalF1ZXJ5LmF0dHIoIGVsZW0sIG5hbWUsICIiICk7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxlbS5yZW1vdmVBdHRyaWJ1dGUoIGdl
dFNldEF0dHJpYnV0ZSA/IG5hbWUgOiBwcm9wTmFtZSApOworCisgICAgICAgICAgICAgICAgICAg
IC8vIFNldCBjb3JyZXNwb25kaW5nIHByb3BlcnR5IHRvIGZhbHNlIGZvciBib29sZWFuIGF0dHJp
YnV0ZXMKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBpc0Jvb2wgJiYgcHJvcE5hbWUgaW4gZWxl
bSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1bIHByb3BOYW1lIF0gPSBmYWxzZTsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0sCisKKyAgICBhdHRySG9va3M6IHsKKyAgICAgICAgdHlwZTogewor
ICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7CisgICAgICAgICAgICAg
ICAgLy8gV2UgY2FuJ3QgYWxsb3cgdGhlIHR5cGUgcHJvcGVydHkgdG8gYmUgY2hhbmdlZCAoc2lu
Y2UgaXQgY2F1c2VzIHByb2JsZW1zIGluIElFKQorICAgICAgICAgICAgICAgIGlmICggcnR5cGUu
dGVzdCggZWxlbS5ub2RlTmFtZSApICYmIGVsZW0ucGFyZW50Tm9kZSApIHsKKyAgICAgICAgICAg
ICAgICAgICAgalF1ZXJ5LmVycm9yKCAidHlwZSBwcm9wZXJ0eSBjYW4ndCBiZSBjaGFuZ2VkIiAp
OworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoICFqUXVlcnkuc3VwcG9ydC5yYWRpb1ZhbHVl
ICYmIHZhbHVlID09PSAicmFkaW8iICYmIGpRdWVyeS5ub2RlTmFtZShlbGVtLCAiaW5wdXQiKSAp
IHsKKyAgICAgICAgICAgICAgICAgICAgLy8gU2V0dGluZyB0aGUgdHlwZSBvbiBhIHJhZGlvIGJ1
dHRvbiBhZnRlciB0aGUgdmFsdWUgcmVzZXRzIHRoZSB2YWx1ZSBpbiBJRTYtOQorICAgICAgICAg
ICAgICAgICAgICAvLyBSZXNldCB2YWx1ZSB0byBpdCdzIGRlZmF1bHQgaW4gY2FzZSB0eXBlIGlz
IHNldCBhZnRlciB2YWx1ZQorICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGZvciBlbGVt
ZW50IGNyZWF0aW9uCisgICAgICAgICAgICAgICAgICAgIHZhciB2YWwgPSBlbGVtLnZhbHVlOwor
ICAgICAgICAgICAgICAgICAgICBlbGVtLnNldEF0dHJpYnV0ZSggInR5cGUiLCB2YWx1ZSApOwor
ICAgICAgICAgICAgICAgICAgICBpZiAoIHZhbCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGVsZW0udmFsdWUgPSB2YWw7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHZhbHVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfSwKKyAgICAgICAgLy8gVXNlIHRoZSB2YWx1ZSBwcm9wZXJ0eSBmb3IgYmFjayBjb21w
YXQKKyAgICAgICAgLy8gVXNlIHRoZSBub2RlSG9vayBmb3IgYnV0dG9uIGVsZW1lbnRzIGluIElF
Ni83ICgjMTk1NCkKKyAgICAgICAgdmFsdWU6IHsKKyAgICAgICAgICAgIGdldDogZnVuY3Rpb24o
IGVsZW0sIG5hbWUgKSB7CisgICAgICAgICAgICAgICAgaWYgKCBub2RlSG9vayAmJiBqUXVlcnku
bm9kZU5hbWUoIGVsZW0sICJidXR0b24iICkgKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBub2RlSG9vay5nZXQoIGVsZW0sIG5hbWUgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgcmV0dXJuIG5hbWUgaW4gZWxlbSA/CisgICAgICAgICAgICAgICAgICAgIGVsZW0u
dmFsdWUgOgorICAgICAgICAgICAgICAgICAgICBudWxsOworICAgICAgICAgICAgfSwKKyAgICAg
ICAgICAgIHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlLCBuYW1lICkgeworICAgICAgICAgICAg
ICAgIGlmICggbm9kZUhvb2sgJiYgalF1ZXJ5Lm5vZGVOYW1lKCBlbGVtLCAiYnV0dG9uIiApICkg
eworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZUhvb2suc2V0KCBlbGVtLCB2YWx1ZSwg
bmFtZSApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBEb2VzIG5vdCBy
ZXR1cm4gc28gdGhhdCBzZXRBdHRyaWJ1dGUgaXMgYWxzbyB1c2VkCisgICAgICAgICAgICAgICAg
ZWxlbS52YWx1ZSA9IHZhbHVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSwKKwor
ICAgIHByb3BGaXg6IHsKKyAgICAgICAgdGFiaW5kZXg6ICJ0YWJJbmRleCIsCisgICAgICAgIHJl
YWRvbmx5OiAicmVhZE9ubHkiLAorICAgICAgICAiZm9yIjogImh0bWxGb3IiLAorICAgICAgICAi
Y2xhc3MiOiAiY2xhc3NOYW1lIiwKKyAgICAgICAgbWF4bGVuZ3RoOiAibWF4TGVuZ3RoIiwKKyAg
ICAgICAgY2VsbHNwYWNpbmc6ICJjZWxsU3BhY2luZyIsCisgICAgICAgIGNlbGxwYWRkaW5nOiAi
Y2VsbFBhZGRpbmciLAorICAgICAgICByb3dzcGFuOiAicm93U3BhbiIsCisgICAgICAgIGNvbHNw
YW46ICJjb2xTcGFuIiwKKyAgICAgICAgdXNlbWFwOiAidXNlTWFwIiwKKyAgICAgICAgZnJhbWVi
b3JkZXI6ICJmcmFtZUJvcmRlciIsCisgICAgICAgIGNvbnRlbnRlZGl0YWJsZTogImNvbnRlbnRF
ZGl0YWJsZSIKKyAgICB9LAorCisgICAgcHJvcDogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVl
ICkgeworICAgICAgICB2YXIgcmV0LCBob29rcywgbm90eG1sLAorICAgICAgICAgICAgblR5cGUg
PSBlbGVtLm5vZGVUeXBlOworCisgICAgICAgIC8vIGRvbid0IGdldC9zZXQgcHJvcGVydGllcyBv
biB0ZXh0LCBjb21tZW50IGFuZCBhdHRyaWJ1dGUgbm9kZXMKKyAgICAgICAgaWYgKCAhZWxlbSB8
fCBuVHlwZSA9PT0gMyB8fCBuVHlwZSA9PT0gOCB8fCBuVHlwZSA9PT0gMiApIHsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIG5vdHhtbCA9IG5UeXBlICE9PSAxIHx8
ICFqUXVlcnkuaXNYTUxEb2MoIGVsZW0gKTsKKworICAgICAgICBpZiAoIG5vdHhtbCApIHsKKyAg
ICAgICAgICAgIC8vIEZpeCBuYW1lIGFuZCBhdHRhY2ggaG9va3MKKyAgICAgICAgICAgIG5hbWUg
PSBqUXVlcnkucHJvcEZpeFsgbmFtZSBdIHx8IG5hbWU7CisgICAgICAgICAgICBob29rcyA9IGpR
dWVyeS5wcm9wSG9va3NbIG5hbWUgXTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggdmFsdWUg
IT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgIGlmICggaG9va3MgJiYgInNldCIgaW4gaG9v
a3MgJiYgKHJldCA9IGhvb2tzLnNldCggZWxlbSwgdmFsdWUsIG5hbWUgKSkgIT09IHVuZGVmaW5l
ZCApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0OworCisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIHJldHVybiAoIGVsZW1bIG5hbWUgXSA9IHZhbHVlICk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICggaG9va3MgJiYg
ImdldCIgaW4gaG9va3MgJiYgKHJldCA9IGhvb2tzLmdldCggZWxlbSwgbmFtZSApKSAhPT0gbnVs
bCApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0OworCisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIHJldHVybiBlbGVtWyBuYW1lIF07CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9LAorCisgICAgcHJvcEhvb2tzOiB7CisgICAgICAgIHRhYkluZGV4OiB7
CisgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAgICAgIC8v
IGVsZW0udGFiSW5kZXggZG9lc24ndCBhbHdheXMgcmV0dXJuIHRoZSBjb3JyZWN0IHZhbHVlIHdo
ZW4gaXQgaGFzbid0IGJlZW4gZXhwbGljaXRseSBzZXQKKyAgICAgICAgICAgICAgICAvLyBodHRw
Oi8vZmx1aWRwcm9qZWN0Lm9yZy9ibG9nLzIwMDgvMDEvMDkvZ2V0dGluZy1zZXR0aW5nLWFuZC1y
ZW1vdmluZy10YWJpbmRleC12YWx1ZXMtd2l0aC1qYXZhc2NyaXB0LworICAgICAgICAgICAgICAg
IHZhciBhdHRyaWJ1dGVOb2RlID0gZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCJ0YWJpbmRleCIpOwor
CisgICAgICAgICAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZU5vZGUgJiYgYXR0cmlidXRlTm9kZS5z
cGVjaWZpZWQgPworICAgICAgICAgICAgICAgICAgICBwYXJzZUludCggYXR0cmlidXRlTm9kZS52
YWx1ZSwgMTAgKSA6CisgICAgICAgICAgICAgICAgICAgIHJmb2N1c2FibGUudGVzdCggZWxlbS5u
b2RlTmFtZSApIHx8IHJjbGlja2FibGUudGVzdCggZWxlbS5ub2RlTmFtZSApICYmIGVsZW0uaHJl
ZiA/CisgICAgICAgICAgICAgICAgICAgICAgICAwIDoKKyAgICAgICAgICAgICAgICAgICAgICAg
IHVuZGVmaW5lZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30pOworCisvLyBI
b29rIGZvciBib29sZWFuIGF0dHJpYnV0ZXMKK2Jvb2xIb29rID0geworICAgIGdldDogZnVuY3Rp
b24oIGVsZW0sIG5hbWUgKSB7CisgICAgICAgIC8vIEFsaWduIGJvb2xlYW4gYXR0cmlidXRlcyB3
aXRoIGNvcnJlc3BvbmRpbmcgcHJvcGVydGllcworICAgICAgICAvLyBGYWxsIGJhY2sgdG8gYXR0
cmlidXRlIHByZXNlbmNlIHdoZXJlIHNvbWUgYm9vbGVhbnMgYXJlIG5vdCBzdXBwb3J0ZWQKKyAg
ICAgICAgdmFyIGF0dHJOb2RlLAorICAgICAgICAgICAgcHJvcGVydHkgPSBqUXVlcnkucHJvcCgg
ZWxlbSwgbmFtZSApOworICAgICAgICByZXR1cm4gcHJvcGVydHkgPT09IHRydWUgfHwgdHlwZW9m
IHByb3BlcnR5ICE9PSAiYm9vbGVhbiIgJiYgKCBhdHRyTm9kZSA9IGVsZW0uZ2V0QXR0cmlidXRl
Tm9kZShuYW1lKSApICYmIGF0dHJOb2RlLm5vZGVWYWx1ZSAhPT0gZmFsc2UgPworICAgICAgICAg
ICAgbmFtZS50b0xvd2VyQ2FzZSgpIDoKKyAgICAgICAgICAgIHVuZGVmaW5lZDsKKyAgICB9LAor
ICAgIHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlLCBuYW1lICkgeworICAgICAgICB2YXIgcHJv
cE5hbWU7CisgICAgICAgIGlmICggdmFsdWUgPT09IGZhbHNlICkgeworICAgICAgICAgICAgLy8g
UmVtb3ZlIGJvb2xlYW4gYXR0cmlidXRlcyB3aGVuIHNldCB0byBmYWxzZQorICAgICAgICAgICAg
alF1ZXJ5LnJlbW92ZUF0dHIoIGVsZW0sIG5hbWUgKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIC8vIHZhbHVlIGlzIHRydWUgc2luY2Ugd2Uga25vdyBhdCB0aGlzIHBvaW50IGl0J3Mg
dHlwZSBib29sZWFuIGFuZCBub3QgZmFsc2UKKyAgICAgICAgICAgIC8vIFNldCBib29sZWFuIGF0
dHJpYnV0ZXMgdG8gdGhlIHNhbWUgbmFtZSBhbmQgc2V0IHRoZSBET00gcHJvcGVydHkKKyAgICAg
ICAgICAgIHByb3BOYW1lID0galF1ZXJ5LnByb3BGaXhbIG5hbWUgXSB8fCBuYW1lOworICAgICAg
ICAgICAgaWYgKCBwcm9wTmFtZSBpbiBlbGVtICkgeworICAgICAgICAgICAgICAgIC8vIE9ubHkg
c2V0IHRoZSBJREwgc3BlY2lmaWNhbGx5IGlmIGl0IGFscmVhZHkgZXhpc3RzIG9uIHRoZSBlbGVt
ZW50CisgICAgICAgICAgICAgICAgZWxlbVsgcHJvcE5hbWUgXSA9IHRydWU7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGVsZW0uc2V0QXR0cmlidXRlKCBuYW1lLCBuYW1lLnRvTG93ZXJD
YXNlKCkgKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbmFtZTsKKyAgICB9Cit9OworCisv
LyBJRTYvNyBkbyBub3Qgc3VwcG9ydCBnZXR0aW5nL3NldHRpbmcgc29tZSBhdHRyaWJ1dGVzIHdp
dGggZ2V0L3NldEF0dHJpYnV0ZQoraWYgKCAhZ2V0U2V0QXR0cmlidXRlICkgeworCisgICAgZml4
U3BlY2lmaWVkID0geworICAgICAgICBuYW1lOiB0cnVlLAorICAgICAgICBpZDogdHJ1ZSwKKyAg
ICAgICAgY29vcmRzOiB0cnVlCisgICAgfTsKKworICAgIC8vIFVzZSB0aGlzIGZvciBhbnkgYXR0
cmlidXRlIGluIElFNi83CisgICAgLy8gVGhpcyBmaXhlcyBhbG1vc3QgZXZlcnkgSUU2LzcgaXNz
dWUKKyAgICBub2RlSG9vayA9IGpRdWVyeS52YWxIb29rcy5idXR0b24gPSB7CisgICAgICAgIGdl
dDogZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7CisgICAgICAgICAgICB2YXIgcmV0OworICAgICAg
ICAgICAgcmV0ID0gZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCBuYW1lICk7CisgICAgICAgICAgICBy
ZXR1cm4gcmV0ICYmICggZml4U3BlY2lmaWVkWyBuYW1lIF0gPyByZXQudmFsdWUgIT09ICIiIDog
cmV0LnNwZWNpZmllZCApID8KKyAgICAgICAgICAgICAgICByZXQudmFsdWUgOgorICAgICAgICAg
ICAgICAgIHVuZGVmaW5lZDsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0OiBmdW5jdGlvbiggZWxl
bSwgdmFsdWUsIG5hbWUgKSB7CisgICAgICAgICAgICAvLyBTZXQgdGhlIGV4aXN0aW5nIG9yIGNy
ZWF0ZSBhIG5ldyBhdHRyaWJ1dGUgbm9kZQorICAgICAgICAgICAgdmFyIHJldCA9IGVsZW0uZ2V0
QXR0cmlidXRlTm9kZSggbmFtZSApOworICAgICAgICAgICAgaWYgKCAhcmV0ICkgeworICAgICAg
ICAgICAgICAgIHJldCA9IGRvY3VtZW50LmNyZWF0ZUF0dHJpYnV0ZSggbmFtZSApOworICAgICAg
ICAgICAgICAgIGVsZW0uc2V0QXR0cmlidXRlTm9kZSggcmV0ICk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICByZXR1cm4gKCByZXQudmFsdWUgPSB2YWx1ZSArICIiICk7CisgICAgICAgIH0K
KyAgICB9OworCisgICAgLy8gU2V0IHdpZHRoIGFuZCBoZWlnaHQgdG8gYXV0byBpbnN0ZWFkIG9m
IDAgb24gZW1wdHkgc3RyaW5nKCBCdWcgIzgxNTAgKQorICAgIC8vIFRoaXMgaXMgZm9yIHJlbW92
YWxzCisgICAgalF1ZXJ5LmVhY2goWyAid2lkdGgiLCAiaGVpZ2h0IiBdLCBmdW5jdGlvbiggaSwg
bmFtZSApIHsKKyAgICAgICAgalF1ZXJ5LmF0dHJIb29rc1sgbmFtZSBdID0galF1ZXJ5LmV4dGVu
ZCggalF1ZXJ5LmF0dHJIb29rc1sgbmFtZSBdLCB7CisgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9u
KCBlbGVtLCB2YWx1ZSApIHsKKyAgICAgICAgICAgICAgICBpZiAoIHZhbHVlID09PSAiIiApIHsK
KyAgICAgICAgICAgICAgICAgICAgZWxlbS5zZXRBdHRyaWJ1dGUoIG5hbWUsICJhdXRvIiApOwor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB9KTsKKworICAgIC8vIFNldCBjb250ZW50ZWRp
dGFibGUgdG8gZmFsc2Ugb24gcmVtb3ZhbHMoIzEwNDI5KQorICAgIC8vIFNldHRpbmcgdG8gZW1w
dHkgc3RyaW5nIHRocm93cyBhbiBlcnJvciBhcyBhbiBpbnZhbGlkIHZhbHVlCisgICAgalF1ZXJ5
LmF0dHJIb29rcy5jb250ZW50ZWRpdGFibGUgPSB7CisgICAgICAgIGdldDogbm9kZUhvb2suZ2V0
LAorICAgICAgICBzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSwgbmFtZSApIHsKKyAgICAgICAg
ICAgIGlmICggdmFsdWUgPT09ICIiICkgeworICAgICAgICAgICAgICAgIHZhbHVlID0gImZhbHNl
IjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG5vZGVIb29rLnNldCggZWxlbSwgdmFsdWUs
IG5hbWUgKTsKKyAgICAgICAgfQorICAgIH07Cit9CisKKworLy8gU29tZSBhdHRyaWJ1dGVzIHJl
cXVpcmUgYSBzcGVjaWFsIGNhbGwgb24gSUUKK2lmICggIWpRdWVyeS5zdXBwb3J0LmhyZWZOb3Jt
YWxpemVkICkgeworICAgIGpRdWVyeS5lYWNoKFsgImhyZWYiLCAic3JjIiwgIndpZHRoIiwgImhl
aWdodCIgXSwgZnVuY3Rpb24oIGksIG5hbWUgKSB7CisgICAgICAgIGpRdWVyeS5hdHRySG9va3Nb
IG5hbWUgXSA9IGpRdWVyeS5leHRlbmQoIGpRdWVyeS5hdHRySG9va3NbIG5hbWUgXSwgeworICAg
ICAgICAgICAgZ2V0OiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgICAgICB2YXIgcmV0
ID0gZWxlbS5nZXRBdHRyaWJ1dGUoIG5hbWUsIDIgKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
cmV0ID09PSBudWxsID8gdW5kZWZpbmVkIDogcmV0OworICAgICAgICAgICAgfQorICAgICAgICB9
KTsKKyAgICB9KTsKK30KKworaWYgKCAhalF1ZXJ5LnN1cHBvcnQuc3R5bGUgKSB7CisgICAgalF1
ZXJ5LmF0dHJIb29rcy5zdHlsZSA9IHsKKyAgICAgICAgZ2V0OiBmdW5jdGlvbiggZWxlbSApIHsK
KyAgICAgICAgICAgIC8vIFJldHVybiB1bmRlZmluZWQgaW4gdGhlIGNhc2Ugb2YgZW1wdHkgc3Ry
aW5nCisgICAgICAgICAgICAvLyBOb3JtYWxpemUgdG8gbG93ZXJjYXNlIHNpbmNlIElFIHVwcGVy
Y2FzZXMgY3NzIHByb3BlcnR5IG5hbWVzCisgICAgICAgICAgICByZXR1cm4gZWxlbS5zdHlsZS5j
c3NUZXh0LnRvTG93ZXJDYXNlKCkgfHwgdW5kZWZpbmVkOworICAgICAgICB9LAorICAgICAgICBz
ZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHsKKyAgICAgICAgICAgIHJldHVybiAoIGVsZW0u
c3R5bGUuY3NzVGV4dCA9IHZhbHVlICsgIiIgKTsKKyAgICAgICAgfQorICAgIH07Cit9CisKKy8v
IFNhZmFyaSBtaXMtcmVwb3J0cyB0aGUgZGVmYXVsdCBzZWxlY3RlZCBwcm9wZXJ0eSBvZiBhbiBv
cHRpb24KKy8vIEFjY2Vzc2luZyB0aGUgcGFyZW50J3Mgc2VsZWN0ZWRJbmRleCBwcm9wZXJ0eSBm
aXhlcyBpdAoraWYgKCAhalF1ZXJ5LnN1cHBvcnQub3B0U2VsZWN0ZWQgKSB7CisgICAgalF1ZXJ5
LnByb3BIb29rcy5zZWxlY3RlZCA9IGpRdWVyeS5leHRlbmQoIGpRdWVyeS5wcm9wSG9va3Muc2Vs
ZWN0ZWQsIHsKKyAgICAgICAgZ2V0OiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgIHZh
ciBwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGU7CisKKyAgICAgICAgICAgIGlmICggcGFyZW50ICkg
eworICAgICAgICAgICAgICAgIHBhcmVudC5zZWxlY3RlZEluZGV4OworCisgICAgICAgICAgICAg
ICAgLy8gTWFrZSBzdXJlIHRoYXQgaXQgYWxzbyB3b3JrcyB3aXRoIG9wdGdyb3Vwcywgc2VlICM1
NzAxCisgICAgICAgICAgICAgICAgaWYgKCBwYXJlbnQucGFyZW50Tm9kZSApIHsKKyAgICAgICAg
ICAgICAgICAgICAgcGFyZW50LnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleDsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAg
fQorICAgIH0pOworfQorCisvLyBJRTYvNyBjYWxsIGVuY3R5cGUgZW5jb2RpbmcKK2lmICggIWpR
dWVyeS5zdXBwb3J0LmVuY3R5cGUgKSB7CisgICAgalF1ZXJ5LnByb3BGaXguZW5jdHlwZSA9ICJl
bmNvZGluZyI7Cit9CisKKy8vIFJhZGlvcyBhbmQgY2hlY2tib3hlcyBnZXR0ZXIvc2V0dGVyCitp
ZiAoICFqUXVlcnkuc3VwcG9ydC5jaGVja09uICkgeworICAgIGpRdWVyeS5lYWNoKFsgInJhZGlv
IiwgImNoZWNrYm94IiBdLCBmdW5jdGlvbigpIHsKKyAgICAgICAgalF1ZXJ5LnZhbEhvb2tzWyB0
aGlzIF0gPSB7CisgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAg
ICAgICAgIC8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSBpbiBXZWJraXQgIiIgaXMgcmV0dXJuZWQg
aW5zdGVhZCBvZiAib24iIGlmIGEgdmFsdWUgaXNuJ3Qgc3BlY2lmaWVkCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpID09PSBudWxsID8gIm9uIiA6IGVs
ZW0udmFsdWU7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfSk7Cit9CitqUXVlcnku
ZWFjaChbICJyYWRpbyIsICJjaGVja2JveCIgXSwgZnVuY3Rpb24oKSB7CisgICAgalF1ZXJ5LnZh
bEhvb2tzWyB0aGlzIF0gPSBqUXVlcnkuZXh0ZW5kKCBqUXVlcnkudmFsSG9va3NbIHRoaXMgXSwg
eworICAgICAgICBzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHsKKyAgICAgICAgICAgIGlm
ICggalF1ZXJ5LmlzQXJyYXkoIHZhbHVlICkgKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuICgg
ZWxlbS5jaGVja2VkID0galF1ZXJ5LmluQXJyYXkoIGpRdWVyeShlbGVtKS52YWwoKSwgdmFsdWUg
KSA+PSAwICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9KTsKK30pOwordmFyIHJm
b3JtRWxlbXMgPSAvXig/OnRleHRhcmVhfGlucHV0fHNlbGVjdCkkL2ksCisgICAgcnR5cGVuYW1l
c3BhY2UgPSAvXihbXlwuXSp8KSg/OlwuKC4rKXwpJC8sCisgICAgcmhvdmVySGFjayA9IC8oPzpe
fFxzKWhvdmVyKFwuXFMrfClcYi8sCisgICAgcmtleUV2ZW50ID0gL15rZXkvLAorICAgIHJtb3Vz
ZUV2ZW50ID0gL14oPzptb3VzZXxjb250ZXh0bWVudSl8Y2xpY2svLAorICAgIHJmb2N1c01vcnBo
ID0gL14oPzpmb2N1c2luZm9jdXN8Zm9jdXNvdXRibHVyKSQvLAorICAgIGhvdmVySGFjayA9IGZ1
bmN0aW9uKCBldmVudHMgKSB7CisgICAgICAgIHJldHVybiBqUXVlcnkuZXZlbnQuc3BlY2lhbC5o
b3ZlciA/IGV2ZW50cyA6IGV2ZW50cy5yZXBsYWNlKCByaG92ZXJIYWNrLCAibW91c2VlbnRlciQx
IG1vdXNlbGVhdmUkMSIgKTsKKyAgICB9OworCisvKgorICogSGVscGVyIGZ1bmN0aW9ucyBmb3Ig
bWFuYWdpbmcgZXZlbnRzIC0tIG5vdCBwYXJ0IG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLgorICog
UHJvcHMgdG8gRGVhbiBFZHdhcmRzJyBhZGRFdmVudCBsaWJyYXJ5IGZvciBtYW55IG9mIHRoZSBp
ZGVhcy4KKyAqLworalF1ZXJ5LmV2ZW50ID0geworCisgICAgYWRkOiBmdW5jdGlvbiggZWxlbSwg
dHlwZXMsIGhhbmRsZXIsIGRhdGEsIHNlbGVjdG9yICkgeworCisgICAgICAgIHZhciBlbGVtRGF0
YSwgZXZlbnRIYW5kbGUsIGV2ZW50cywKKyAgICAgICAgICAgIHQsIHRucywgdHlwZSwgbmFtZXNw
YWNlcywgaGFuZGxlT2JqLAorICAgICAgICAgICAgaGFuZGxlT2JqSW4sIGhhbmRsZXJzLCBzcGVj
aWFsOworCisgICAgICAgIC8vIERvbid0IGF0dGFjaCBldmVudHMgdG8gbm9EYXRhIG9yIHRleHQv
Y29tbWVudCBub2RlcyAoYWxsb3cgcGxhaW4gb2JqZWN0cyB0aG8pCisgICAgICAgIGlmICggZWxl
bS5ub2RlVHlwZSA9PT0gMyB8fCBlbGVtLm5vZGVUeXBlID09PSA4IHx8ICF0eXBlcyB8fCAhaGFu
ZGxlciB8fCAhKGVsZW1EYXRhID0galF1ZXJ5Ll9kYXRhKCBlbGVtICkpICkgeworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gQ2FsbGVyIGNhbiBwYXNzIGluIGFu
IG9iamVjdCBvZiBjdXN0b20gZGF0YSBpbiBsaWV1IG9mIHRoZSBoYW5kbGVyCisgICAgICAgIGlm
ICggaGFuZGxlci5oYW5kbGVyICkgeworICAgICAgICAgICAgaGFuZGxlT2JqSW4gPSBoYW5kbGVy
OworICAgICAgICAgICAgaGFuZGxlciA9IGhhbmRsZU9iakluLmhhbmRsZXI7CisgICAgICAgICAg
ICBzZWxlY3RvciA9IGhhbmRsZU9iakluLnNlbGVjdG9yOworICAgICAgICB9CisKKyAgICAgICAg
Ly8gTWFrZSBzdXJlIHRoYXQgdGhlIGhhbmRsZXIgaGFzIGEgdW5pcXVlIElELCB1c2VkIHRvIGZp
bmQvcmVtb3ZlIGl0IGxhdGVyCisgICAgICAgIGlmICggIWhhbmRsZXIuZ3VpZCApIHsKKyAgICAg
ICAgICAgIGhhbmRsZXIuZ3VpZCA9IGpRdWVyeS5ndWlkKys7CisgICAgICAgIH0KKworICAgICAg
ICAvLyBJbml0IHRoZSBlbGVtZW50J3MgZXZlbnQgc3RydWN0dXJlIGFuZCBtYWluIGhhbmRsZXIs
IGlmIHRoaXMgaXMgdGhlIGZpcnN0CisgICAgICAgIGV2ZW50cyA9IGVsZW1EYXRhLmV2ZW50czsK
KyAgICAgICAgaWYgKCAhZXZlbnRzICkgeworICAgICAgICAgICAgZWxlbURhdGEuZXZlbnRzID0g
ZXZlbnRzID0ge307CisgICAgICAgIH0KKyAgICAgICAgZXZlbnRIYW5kbGUgPSBlbGVtRGF0YS5o
YW5kbGU7CisgICAgICAgIGlmICggIWV2ZW50SGFuZGxlICkgeworICAgICAgICAgICAgZWxlbURh
dGEuaGFuZGxlID0gZXZlbnRIYW5kbGUgPSBmdW5jdGlvbiggZSApIHsKKyAgICAgICAgICAgICAg
ICAvLyBEaXNjYXJkIHRoZSBzZWNvbmQgZXZlbnQgb2YgYSBqUXVlcnkuZXZlbnQudHJpZ2dlcigp
IGFuZAorICAgICAgICAgICAgICAgIC8vIHdoZW4gYW4gZXZlbnQgaXMgY2FsbGVkIGFmdGVyIGEg
cGFnZSBoYXMgdW5sb2FkZWQKKyAgICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIGpRdWVyeSAh
PT0gInVuZGVmaW5lZCIgJiYgKCFlIHx8IGpRdWVyeS5ldmVudC50cmlnZ2VyZWQgIT09IGUudHlw
ZSkgPworICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQuZGlzcGF0Y2guYXBwbHkoIGV2
ZW50SGFuZGxlLmVsZW0sIGFyZ3VtZW50cyApIDoKKyAgICAgICAgICAgICAgICAgICAgdW5kZWZp
bmVkOworICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIC8vIEFkZCBlbGVtIGFzIGEgcHJvcGVy
dHkgb2YgdGhlIGhhbmRsZSBmbiB0byBwcmV2ZW50IGEgbWVtb3J5IGxlYWsgd2l0aCBJRSBub24t
bmF0aXZlIGV2ZW50cworICAgICAgICAgICAgZXZlbnRIYW5kbGUuZWxlbSA9IGVsZW07CisgICAg
ICAgIH0KKworICAgICAgICAvLyBIYW5kbGUgbXVsdGlwbGUgZXZlbnRzIHNlcGFyYXRlZCBieSBh
IHNwYWNlCisgICAgICAgIC8vIGpRdWVyeSguLi4pLmJpbmQoIm1vdXNlb3ZlciBtb3VzZW91dCIs
IGZuKTsKKyAgICAgICAgdHlwZXMgPSBqUXVlcnkudHJpbSggaG92ZXJIYWNrKHR5cGVzKSApLnNw
bGl0KCAiICIgKTsKKyAgICAgICAgZm9yICggdCA9IDA7IHQgPCB0eXBlcy5sZW5ndGg7IHQrKyAp
IHsKKworICAgICAgICAgICAgdG5zID0gcnR5cGVuYW1lc3BhY2UuZXhlYyggdHlwZXNbdF0gKSB8
fCBbXTsKKyAgICAgICAgICAgIHR5cGUgPSB0bnNbMV07CisgICAgICAgICAgICBuYW1lc3BhY2Vz
ID0gKCB0bnNbMl0gfHwgIiIgKS5zcGxpdCggIi4iICkuc29ydCgpOworCisgICAgICAgICAgICAv
LyBJZiBldmVudCBjaGFuZ2VzIGl0cyB0eXBlLCB1c2UgdGhlIHNwZWNpYWwgZXZlbnQgaGFuZGxl
cnMgZm9yIHRoZSBjaGFuZ2VkIHR5cGUKKyAgICAgICAgICAgIHNwZWNpYWwgPSBqUXVlcnkuZXZl
bnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9OworCisgICAgICAgICAgICAvLyBJZiBzZWxlY3RvciBk
ZWZpbmVkLCBkZXRlcm1pbmUgc3BlY2lhbCBldmVudCBhcGkgdHlwZSwgb3RoZXJ3aXNlIGdpdmVu
IHR5cGUKKyAgICAgICAgICAgIHR5cGUgPSAoIHNlbGVjdG9yID8gc3BlY2lhbC5kZWxlZ2F0ZVR5
cGUgOiBzcGVjaWFsLmJpbmRUeXBlICkgfHwgdHlwZTsKKworICAgICAgICAgICAgLy8gVXBkYXRl
IHNwZWNpYWwgYmFzZWQgb24gbmV3bHkgcmVzZXQgdHlwZQorICAgICAgICAgICAgc3BlY2lhbCA9
IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307CisKKyAgICAgICAgICAgIC8vIGhh
bmRsZU9iaiBpcyBwYXNzZWQgdG8gYWxsIGV2ZW50IGhhbmRsZXJzCisgICAgICAgICAgICBoYW5k
bGVPYmogPSBqUXVlcnkuZXh0ZW5kKHsKKyAgICAgICAgICAgICAgICB0eXBlOiB0eXBlLAorICAg
ICAgICAgICAgICAgIG9yaWdUeXBlOiB0bnNbMV0sCisgICAgICAgICAgICAgICAgZGF0YTogZGF0
YSwKKyAgICAgICAgICAgICAgICBoYW5kbGVyOiBoYW5kbGVyLAorICAgICAgICAgICAgICAgIGd1
aWQ6IGhhbmRsZXIuZ3VpZCwKKyAgICAgICAgICAgICAgICBzZWxlY3Rvcjogc2VsZWN0b3IsCisg
ICAgICAgICAgICAgICAgbmVlZHNDb250ZXh0OiBzZWxlY3RvciAmJiBqUXVlcnkuZXhwci5tYXRj
aC5uZWVkc0NvbnRleHQudGVzdCggc2VsZWN0b3IgKSwKKyAgICAgICAgICAgICAgICBuYW1lc3Bh
Y2U6IG5hbWVzcGFjZXMuam9pbigiLiIpCisgICAgICAgICAgICB9LCBoYW5kbGVPYmpJbiApOwor
CisgICAgICAgICAgICAvLyBJbml0IHRoZSBldmVudCBoYW5kbGVyIHF1ZXVlIGlmIHdlJ3JlIHRo
ZSBmaXJzdAorICAgICAgICAgICAgaGFuZGxlcnMgPSBldmVudHNbIHR5cGUgXTsKKyAgICAgICAg
ICAgIGlmICggIWhhbmRsZXJzICkgeworICAgICAgICAgICAgICAgIGhhbmRsZXJzID0gZXZlbnRz
WyB0eXBlIF0gPSBbXTsKKyAgICAgICAgICAgICAgICBoYW5kbGVycy5kZWxlZ2F0ZUNvdW50ID0g
MDsKKworICAgICAgICAgICAgICAgIC8vIE9ubHkgdXNlIGFkZEV2ZW50TGlzdGVuZXIvYXR0YWNo
RXZlbnQgaWYgdGhlIHNwZWNpYWwgZXZlbnRzIGhhbmRsZXIgcmV0dXJucyBmYWxzZQorICAgICAg
ICAgICAgICAgIGlmICggIXNwZWNpYWwuc2V0dXAgfHwgc3BlY2lhbC5zZXR1cC5jYWxsKCBlbGVt
LCBkYXRhLCBuYW1lc3BhY2VzLCBldmVudEhhbmRsZSApID09PSBmYWxzZSApIHsKKyAgICAgICAg
ICAgICAgICAgICAgLy8gQmluZCB0aGUgZ2xvYmFsIGV2ZW50IGhhbmRsZXIgdG8gdGhlIGVsZW1l
bnQKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBlbGVtLmFkZEV2ZW50TGlzdGVuZXIgKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBlbGVtLmFkZEV2ZW50TGlzdGVuZXIoIHR5cGUsIGV2ZW50
SGFuZGxlLCBmYWxzZSApOworCisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIGVsZW0u
YXR0YWNoRXZlbnQgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLmF0dGFjaEV2ZW50
KCAib24iICsgdHlwZSwgZXZlbnRIYW5kbGUgKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCBzcGVjaWFs
LmFkZCApIHsKKyAgICAgICAgICAgICAgICBzcGVjaWFsLmFkZC5jYWxsKCBlbGVtLCBoYW5kbGVP
YmogKTsKKworICAgICAgICAgICAgICAgIGlmICggIWhhbmRsZU9iai5oYW5kbGVyLmd1aWQgKSB7
CisgICAgICAgICAgICAgICAgICAgIGhhbmRsZU9iai5oYW5kbGVyLmd1aWQgPSBoYW5kbGVyLmd1
aWQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBB
ZGQgdG8gdGhlIGVsZW1lbnQncyBoYW5kbGVyIGxpc3QsIGRlbGVnYXRlcyBpbiBmcm9udAorICAg
ICAgICAgICAgaWYgKCBzZWxlY3RvciApIHsKKyAgICAgICAgICAgICAgICBoYW5kbGVycy5zcGxp
Y2UoIGhhbmRsZXJzLmRlbGVnYXRlQ291bnQrKywgMCwgaGFuZGxlT2JqICk7CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGhhbmRsZXJzLnB1c2goIGhhbmRsZU9iaiApOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBLZWVwIHRyYWNrIG9mIHdoaWNoIGV2ZW50
cyBoYXZlIGV2ZXIgYmVlbiB1c2VkLCBmb3IgZXZlbnQgb3B0aW1pemF0aW9uCisgICAgICAgICAg
ICBqUXVlcnkuZXZlbnQuZ2xvYmFsWyB0eXBlIF0gPSB0cnVlOworICAgICAgICB9CisKKyAgICAg
ICAgLy8gTnVsbGlmeSBlbGVtIHRvIHByZXZlbnQgbWVtb3J5IGxlYWtzIGluIElFCisgICAgICAg
IGVsZW0gPSBudWxsOworICAgIH0sCisKKyAgICBnbG9iYWw6IHt9LAorCisgICAgLy8gRGV0YWNo
IGFuIGV2ZW50IG9yIHNldCBvZiBldmVudHMgZnJvbSBhbiBlbGVtZW50CisgICAgcmVtb3ZlOiBm
dW5jdGlvbiggZWxlbSwgdHlwZXMsIGhhbmRsZXIsIHNlbGVjdG9yLCBtYXBwZWRUeXBlcyApIHsK
KworICAgICAgICB2YXIgdCwgdG5zLCB0eXBlLCBvcmlnVHlwZSwgbmFtZXNwYWNlcywgb3JpZ0Nv
dW50LAorICAgICAgICAgICAgaiwgZXZlbnRzLCBzcGVjaWFsLCBldmVudFR5cGUsIGhhbmRsZU9i
aiwKKyAgICAgICAgICAgIGVsZW1EYXRhID0galF1ZXJ5Lmhhc0RhdGEoIGVsZW0gKSAmJiBqUXVl
cnkuX2RhdGEoIGVsZW0gKTsKKworICAgICAgICBpZiAoICFlbGVtRGF0YSB8fCAhKGV2ZW50cyA9
IGVsZW1EYXRhLmV2ZW50cykgKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor
ICAgICAgICAvLyBPbmNlIGZvciBlYWNoIHR5cGUubmFtZXNwYWNlIGluIHR5cGVzOyB0eXBlIG1h
eSBiZSBvbWl0dGVkCisgICAgICAgIHR5cGVzID0galF1ZXJ5LnRyaW0oIGhvdmVySGFjayggdHlw
ZXMgfHwgIiIgKSApLnNwbGl0KCIgIik7CisgICAgICAgIGZvciAoIHQgPSAwOyB0IDwgdHlwZXMu
bGVuZ3RoOyB0KysgKSB7CisgICAgICAgICAgICB0bnMgPSBydHlwZW5hbWVzcGFjZS5leGVjKCB0
eXBlc1t0XSApIHx8IFtdOworICAgICAgICAgICAgdHlwZSA9IG9yaWdUeXBlID0gdG5zWzFdOwor
ICAgICAgICAgICAgbmFtZXNwYWNlcyA9IHRuc1syXTsKKworICAgICAgICAgICAgLy8gVW5iaW5k
IGFsbCBldmVudHMgKG9uIHRoaXMgbmFtZXNwYWNlLCBpZiBwcm92aWRlZCkgZm9yIHRoZSBlbGVt
ZW50CisgICAgICAgICAgICBpZiAoICF0eXBlICkgeworICAgICAgICAgICAgICAgIGZvciAoIHR5
cGUgaW4gZXZlbnRzICkgeworICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQucmVtb3Zl
KCBlbGVtLCB0eXBlICsgdHlwZXNbIHQgXSwgaGFuZGxlciwgc2VsZWN0b3IsIHRydWUgKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8
IHt9OworICAgICAgICAgICAgdHlwZSA9ICggc2VsZWN0b3I/IHNwZWNpYWwuZGVsZWdhdGVUeXBl
IDogc3BlY2lhbC5iaW5kVHlwZSApIHx8IHR5cGU7CisgICAgICAgICAgICBldmVudFR5cGUgPSBl
dmVudHNbIHR5cGUgXSB8fCBbXTsKKyAgICAgICAgICAgIG9yaWdDb3VudCA9IGV2ZW50VHlwZS5s
ZW5ndGg7CisgICAgICAgICAgICBuYW1lc3BhY2VzID0gbmFtZXNwYWNlcyA/IG5ldyBSZWdFeHAo
IihefFxcLikiICsgbmFtZXNwYWNlcy5zcGxpdCgiLiIpLnNvcnQoKS5qb2luKCJcXC4oPzouKlxc
LnwpIikgKyAiKFxcLnwkKSIpIDogbnVsbDsKKworICAgICAgICAgICAgLy8gUmVtb3ZlIG1hdGNo
aW5nIGV2ZW50cworICAgICAgICAgICAgZm9yICggaiA9IDA7IGogPCBldmVudFR5cGUubGVuZ3Ro
OyBqKysgKSB7CisgICAgICAgICAgICAgICAgaGFuZGxlT2JqID0gZXZlbnRUeXBlWyBqIF07CisK
KyAgICAgICAgICAgICAgICBpZiAoICggbWFwcGVkVHlwZXMgfHwgb3JpZ1R5cGUgPT09IGhhbmRs
ZU9iai5vcmlnVHlwZSApICYmCisgICAgICAgICAgICAgICAgICAgICAoICFoYW5kbGVyIHx8IGhh
bmRsZXIuZ3VpZCA9PT0gaGFuZGxlT2JqLmd1aWQgKSAmJgorICAgICAgICAgICAgICAgICAgICAg
KCAhbmFtZXNwYWNlcyB8fCBuYW1lc3BhY2VzLnRlc3QoIGhhbmRsZU9iai5uYW1lc3BhY2UgKSAp
ICYmCisgICAgICAgICAgICAgICAgICAgICAoICFzZWxlY3RvciB8fCBzZWxlY3RvciA9PT0gaGFu
ZGxlT2JqLnNlbGVjdG9yIHx8IHNlbGVjdG9yID09PSAiKioiICYmIGhhbmRsZU9iai5zZWxlY3Rv
ciApICkgeworICAgICAgICAgICAgICAgICAgICBldmVudFR5cGUuc3BsaWNlKCBqLS0sIDEgKTsK
KworICAgICAgICAgICAgICAgICAgICBpZiAoIGhhbmRsZU9iai5zZWxlY3RvciApIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGV2ZW50VHlwZS5kZWxlZ2F0ZUNvdW50LS07CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKCBzcGVjaWFsLnJlbW92ZSApIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpYWwucmVtb3ZlLmNhbGwoIGVsZW0sIGhhbmRs
ZU9iaiApOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAvLyBSZW1vdmUgZ2VuZXJpYyBldmVudCBoYW5kbGVyIGlm
IHdlIHJlbW92ZWQgc29tZXRoaW5nIGFuZCBubyBtb3JlIGhhbmRsZXJzIGV4aXN0CisgICAgICAg
ICAgICAvLyAoYXZvaWRzIHBvdGVudGlhbCBmb3IgZW5kbGVzcyByZWN1cnNpb24gZHVyaW5nIHJl
bW92YWwgb2Ygc3BlY2lhbCBldmVudCBoYW5kbGVycykKKyAgICAgICAgICAgIGlmICggZXZlbnRU
eXBlLmxlbmd0aCA9PT0gMCAmJiBvcmlnQ291bnQgIT09IGV2ZW50VHlwZS5sZW5ndGggKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKCAhc3BlY2lhbC50ZWFyZG93biB8fCBzcGVjaWFsLnRlYXJkb3du
LmNhbGwoIGVsZW0sIG5hbWVzcGFjZXMsIGVsZW1EYXRhLmhhbmRsZSApID09PSBmYWxzZSApIHsK
KyAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LnJlbW92ZUV2ZW50KCBlbGVtLCB0eXBlLCBlbGVt
RGF0YS5oYW5kbGUgKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBkZWxl
dGUgZXZlbnRzWyB0eXBlIF07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAv
LyBSZW1vdmUgdGhlIGV4cGFuZG8gaWYgaXQncyBubyBsb25nZXIgdXNlZAorICAgICAgICBpZiAo
IGpRdWVyeS5pc0VtcHR5T2JqZWN0KCBldmVudHMgKSApIHsKKyAgICAgICAgICAgIGRlbGV0ZSBl
bGVtRGF0YS5oYW5kbGU7CisKKyAgICAgICAgICAgIC8vIHJlbW92ZURhdGEgYWxzbyBjaGVja3Mg
Zm9yIGVtcHRpbmVzcyBhbmQgY2xlYXJzIHRoZSBleHBhbmRvIGlmIGVtcHR5CisgICAgICAgICAg
ICAvLyBzbyB1c2UgaXQgaW5zdGVhZCBvZiBkZWxldGUKKyAgICAgICAgICAgIGpRdWVyeS5yZW1v
dmVEYXRhKCBlbGVtLCAiZXZlbnRzIiwgdHJ1ZSApOworICAgICAgICB9CisgICAgfSwKKworICAg
IC8vIEV2ZW50cyB0aGF0IGFyZSBzYWZlIHRvIHNob3J0LWNpcmN1aXQgaWYgbm8gaGFuZGxlcnMg
YXJlIGF0dGFjaGVkLgorICAgIC8vIE5hdGl2ZSBET00gZXZlbnRzIHNob3VsZCBub3QgYmUgYWRk
ZWQsIHRoZXkgbWF5IGhhdmUgaW5saW5lIGhhbmRsZXJzLgorICAgIGN1c3RvbUV2ZW50OiB7Cisg
ICAgICAgICJnZXREYXRhIjogdHJ1ZSwKKyAgICAgICAgInNldERhdGEiOiB0cnVlLAorICAgICAg
ICAiY2hhbmdlRGF0YSI6IHRydWUKKyAgICB9LAorCisgICAgdHJpZ2dlcjogZnVuY3Rpb24oIGV2
ZW50LCBkYXRhLCBlbGVtLCBvbmx5SGFuZGxlcnMgKSB7CisgICAgICAgIC8vIERvbid0IGRvIGV2
ZW50cyBvbiB0ZXh0IGFuZCBjb21tZW50IG5vZGVzCisgICAgICAgIGlmICggZWxlbSAmJiAoZWxl
bS5ub2RlVHlwZSA9PT0gMyB8fCBlbGVtLm5vZGVUeXBlID09PSA4KSApIHsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEV2ZW50IG9iamVjdCBvciBldmVudCB0
eXBlCisgICAgICAgIHZhciBjYWNoZSwgZXhjbHVzaXZlLCBpLCBjdXIsIG9sZCwgb250eXBlLCBz
cGVjaWFsLCBoYW5kbGUsIGV2ZW50UGF0aCwgYnViYmxlVHlwZSwKKyAgICAgICAgICAgIHR5cGUg
PSBldmVudC50eXBlIHx8IGV2ZW50LAorICAgICAgICAgICAgbmFtZXNwYWNlcyA9IFtdOworCisg
ICAgICAgIC8vIGZvY3VzL2JsdXIgbW9ycGhzIHRvIGZvY3VzaW4vb3V0OyBlbnN1cmUgd2UncmUg
bm90IGZpcmluZyB0aGVtIHJpZ2h0IG5vdworICAgICAgICBpZiAoIHJmb2N1c01vcnBoLnRlc3Qo
IHR5cGUgKyBqUXVlcnkuZXZlbnQudHJpZ2dlcmVkICkgKSB7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKworICAgICAgICBpZiAoIHR5cGUuaW5kZXhPZiggIiEiICkgPj0gMCApIHsK
KyAgICAgICAgICAgIC8vIEV4Y2x1c2l2ZSBldmVudHMgdHJpZ2dlciBvbmx5IGZvciB0aGUgZXhh
Y3QgZXZlbnQgKG5vIG5hbWVzcGFjZXMpCisgICAgICAgICAgICB0eXBlID0gdHlwZS5zbGljZSgw
LCAtMSk7CisgICAgICAgICAgICBleGNsdXNpdmUgPSB0cnVlOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKCB0eXBlLmluZGV4T2YoICIuIiApID49IDAgKSB7CisgICAgICAgICAgICAvLyBOYW1l
c3BhY2VkIHRyaWdnZXI7IGNyZWF0ZSBhIHJlZ2V4cCB0byBtYXRjaCBldmVudCB0eXBlIGluIGhh
bmRsZSgpCisgICAgICAgICAgICBuYW1lc3BhY2VzID0gdHlwZS5zcGxpdCgiLiIpOworICAgICAg
ICAgICAgdHlwZSA9IG5hbWVzcGFjZXMuc2hpZnQoKTsKKyAgICAgICAgICAgIG5hbWVzcGFjZXMu
c29ydCgpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCAoIWVsZW0gfHwgalF1ZXJ5LmV2ZW50
LmN1c3RvbUV2ZW50WyB0eXBlIF0pICYmICFqUXVlcnkuZXZlbnQuZ2xvYmFsWyB0eXBlIF0gKSB7
CisgICAgICAgICAgICAvLyBObyBqUXVlcnkgaGFuZGxlcnMgZm9yIHRoaXMgZXZlbnQgdHlwZSwg
YW5kIGl0IGNhbid0IGhhdmUgaW5saW5lIGhhbmRsZXJzCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKworICAgICAgICAvLyBDYWxsZXIgY2FuIHBhc3MgaW4gYW4gRXZlbnQsIE9iamVj
dCwgb3IganVzdCBhbiBldmVudCB0eXBlIHN0cmluZworICAgICAgICBldmVudCA9IHR5cGVvZiBl
dmVudCA9PT0gIm9iamVjdCIgPworICAgICAgICAgICAgLy8galF1ZXJ5LkV2ZW50IG9iamVjdAor
ICAgICAgICAgICAgZXZlbnRbIGpRdWVyeS5leHBhbmRvIF0gPyBldmVudCA6CisgICAgICAgICAg
ICAvLyBPYmplY3QgbGl0ZXJhbAorICAgICAgICAgICAgbmV3IGpRdWVyeS5FdmVudCggdHlwZSwg
ZXZlbnQgKSA6CisgICAgICAgICAgICAvLyBKdXN0IHRoZSBldmVudCB0eXBlIChzdHJpbmcpCisg
ICAgICAgICAgICBuZXcgalF1ZXJ5LkV2ZW50KCB0eXBlICk7CisKKyAgICAgICAgZXZlbnQudHlw
ZSA9IHR5cGU7CisgICAgICAgIGV2ZW50LmlzVHJpZ2dlciA9IHRydWU7CisgICAgICAgIGV2ZW50
LmV4Y2x1c2l2ZSA9IGV4Y2x1c2l2ZTsKKyAgICAgICAgZXZlbnQubmFtZXNwYWNlID0gbmFtZXNw
YWNlcy5qb2luKCAiLiIgKTsKKyAgICAgICAgZXZlbnQubmFtZXNwYWNlX3JlID0gZXZlbnQubmFt
ZXNwYWNlPyBuZXcgUmVnRXhwKCIoXnxcXC4pIiArIG5hbWVzcGFjZXMuam9pbigiXFwuKD86Lipc
XC58KSIpICsgIihcXC58JCkiKSA6IG51bGw7CisgICAgICAgIG9udHlwZSA9IHR5cGUuaW5kZXhP
ZiggIjoiICkgPCAwID8gIm9uIiArIHR5cGUgOiAiIjsKKworICAgICAgICAvLyBIYW5kbGUgYSBn
bG9iYWwgdHJpZ2dlcgorICAgICAgICBpZiAoICFlbGVtICkgeworCisgICAgICAgICAgICAvLyBU
T0RPOiBTdG9wIHRhdW50aW5nIHRoZSBkYXRhIGNhY2hlOyByZW1vdmUgZ2xvYmFsIGV2ZW50cyBh
bmQgYWx3YXlzIGF0dGFjaCB0byBkb2N1bWVudAorICAgICAgICAgICAgY2FjaGUgPSBqUXVlcnku
Y2FjaGU7CisgICAgICAgICAgICBmb3IgKCBpIGluIGNhY2hlICkgeworICAgICAgICAgICAgICAg
IGlmICggY2FjaGVbIGkgXS5ldmVudHMgJiYgY2FjaGVbIGkgXS5ldmVudHNbIHR5cGUgXSApIHsK
KyAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnRyaWdnZXIoIGV2ZW50LCBkYXRhLCBj
YWNoZVsgaSBdLmhhbmRsZS5lbGVtLCB0cnVlICk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gQ2xl
YW4gdXAgdGhlIGV2ZW50IGluIGNhc2UgaXQgaXMgYmVpbmcgcmV1c2VkCisgICAgICAgIGV2ZW50
LnJlc3VsdCA9IHVuZGVmaW5lZDsKKyAgICAgICAgaWYgKCAhZXZlbnQudGFyZ2V0ICkgeworICAg
ICAgICAgICAgZXZlbnQudGFyZ2V0ID0gZWxlbTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIENs
b25lIGFueSBpbmNvbWluZyBkYXRhIGFuZCBwcmVwZW5kIHRoZSBldmVudCwgY3JlYXRpbmcgdGhl
IGhhbmRsZXIgYXJnIGxpc3QKKyAgICAgICAgZGF0YSA9IGRhdGEgIT0gbnVsbCA/IGpRdWVyeS5t
YWtlQXJyYXkoIGRhdGEgKSA6IFtdOworICAgICAgICBkYXRhLnVuc2hpZnQoIGV2ZW50ICk7CisK
KyAgICAgICAgLy8gQWxsb3cgc3BlY2lhbCBldmVudHMgdG8gZHJhdyBvdXRzaWRlIHRoZSBsaW5l
cworICAgICAgICBzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTsK
KyAgICAgICAgaWYgKCBzcGVjaWFsLnRyaWdnZXIgJiYgc3BlY2lhbC50cmlnZ2VyLmFwcGx5KCBl
bGVtLCBkYXRhICkgPT09IGZhbHNlICkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisKKyAgICAgICAgLy8gRGV0ZXJtaW5lIGV2ZW50IHByb3BhZ2F0aW9uIHBhdGggaW4gYWR2YW5j
ZSwgcGVyIFczQyBldmVudHMgc3BlYyAoIzk5NTEpCisgICAgICAgIC8vIEJ1YmJsZSB1cCB0byBk
b2N1bWVudCwgdGhlbiB0byB3aW5kb3c7IHdhdGNoIGZvciBhIGdsb2JhbCBvd25lckRvY3VtZW50
IHZhciAoIzk3MjQpCisgICAgICAgIGV2ZW50UGF0aCA9IFtbIGVsZW0sIHNwZWNpYWwuYmluZFR5
cGUgfHwgdHlwZSBdXTsKKyAgICAgICAgaWYgKCAhb25seUhhbmRsZXJzICYmICFzcGVjaWFsLm5v
QnViYmxlICYmICFqUXVlcnkuaXNXaW5kb3coIGVsZW0gKSApIHsKKworICAgICAgICAgICAgYnVi
YmxlVHlwZSA9IHNwZWNpYWwuZGVsZWdhdGVUeXBlIHx8IHR5cGU7CisgICAgICAgICAgICBjdXIg
PSByZm9jdXNNb3JwaC50ZXN0KCBidWJibGVUeXBlICsgdHlwZSApID8gZWxlbSA6IGVsZW0ucGFy
ZW50Tm9kZTsKKyAgICAgICAgICAgIGZvciAoIG9sZCA9IGVsZW07IGN1cjsgY3VyID0gY3VyLnBh
cmVudE5vZGUgKSB7CisgICAgICAgICAgICAgICAgZXZlbnRQYXRoLnB1c2goWyBjdXIsIGJ1YmJs
ZVR5cGUgXSk7CisgICAgICAgICAgICAgICAgb2xkID0gY3VyOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAvLyBPbmx5IGFkZCB3aW5kb3cgaWYgd2UgZ290IHRvIGRvY3VtZW50IChlLmcu
LCBub3QgcGxhaW4gb2JqIG9yIGRldGFjaGVkIERPTSkKKyAgICAgICAgICAgIGlmICggb2xkID09
PSAoZWxlbS5vd25lckRvY3VtZW50IHx8IGRvY3VtZW50KSApIHsKKyAgICAgICAgICAgICAgICBl
dmVudFBhdGgucHVzaChbIG9sZC5kZWZhdWx0VmlldyB8fCBvbGQucGFyZW50V2luZG93IHx8IHdp
bmRvdywgYnViYmxlVHlwZSBdKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg
IC8vIEZpcmUgaGFuZGxlcnMgb24gdGhlIGV2ZW50IHBhdGgKKyAgICAgICAgZm9yICggaSA9IDA7
IGkgPCBldmVudFBhdGgubGVuZ3RoICYmICFldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpOyBp
KysgKSB7CisKKyAgICAgICAgICAgIGN1ciA9IGV2ZW50UGF0aFtpXVswXTsKKyAgICAgICAgICAg
IGV2ZW50LnR5cGUgPSBldmVudFBhdGhbaV1bMV07CisKKyAgICAgICAgICAgIGhhbmRsZSA9ICgg
alF1ZXJ5Ll9kYXRhKCBjdXIsICJldmVudHMiICkgfHwge30gKVsgZXZlbnQudHlwZSBdICYmIGpR
dWVyeS5fZGF0YSggY3VyLCAiaGFuZGxlIiApOworICAgICAgICAgICAgaWYgKCBoYW5kbGUgKSB7
CisgICAgICAgICAgICAgICAgaGFuZGxlLmFwcGx5KCBjdXIsIGRhdGEgKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB0aGlzIGlzIGEgYmFyZSBKUyBmdW5jdGlvbiBh
bmQgbm90IGEgalF1ZXJ5IGhhbmRsZXIKKyAgICAgICAgICAgIGhhbmRsZSA9IG9udHlwZSAmJiBj
dXJbIG9udHlwZSBdOworICAgICAgICAgICAgaWYgKCBoYW5kbGUgJiYgalF1ZXJ5LmFjY2VwdERh
dGEoIGN1ciApICYmIGhhbmRsZS5hcHBseSAmJiBoYW5kbGUuYXBwbHkoIGN1ciwgZGF0YSApID09
PSBmYWxzZSApIHsKKyAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGV2ZW50LnR5cGUgPSB0eXBlOworCisgICAg
ICAgIC8vIElmIG5vYm9keSBwcmV2ZW50ZWQgdGhlIGRlZmF1bHQgYWN0aW9uLCBkbyBpdCBub3cK
KyAgICAgICAgaWYgKCAhb25seUhhbmRsZXJzICYmICFldmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQo
KSApIHsKKworICAgICAgICAgICAgaWYgKCAoIXNwZWNpYWwuX2RlZmF1bHQgfHwgc3BlY2lhbC5f
ZGVmYXVsdC5hcHBseSggZWxlbS5vd25lckRvY3VtZW50LCBkYXRhICkgPT09IGZhbHNlKSAmJgor
ICAgICAgICAgICAgICAgICEodHlwZSA9PT0gImNsaWNrIiAmJiBqUXVlcnkubm9kZU5hbWUoIGVs
ZW0sICJhIiApKSAmJiBqUXVlcnkuYWNjZXB0RGF0YSggZWxlbSApICkgeworCisgICAgICAgICAg
ICAgICAgLy8gQ2FsbCBhIG5hdGl2ZSBET00gbWV0aG9kIG9uIHRoZSB0YXJnZXQgd2l0aCB0aGUg
c2FtZSBuYW1lIG5hbWUgYXMgdGhlIGV2ZW50LgorICAgICAgICAgICAgICAgIC8vIENhbid0IHVz
ZSBhbiAuaXNGdW5jdGlvbigpIGNoZWNrIGhlcmUgYmVjYXVzZSBJRTYvNyBmYWlscyB0aGF0IHRl
c3QuCisgICAgICAgICAgICAgICAgLy8gRG9uJ3QgZG8gZGVmYXVsdCBhY3Rpb25zIG9uIHdpbmRv
dywgdGhhdCdzIHdoZXJlIGdsb2JhbCB2YXJpYWJsZXMgYmUgKCM2MTcwKQorICAgICAgICAgICAg
ICAgIC8vIElFPDkgZGllcyBvbiBmb2N1cy9ibHVyIHRvIGhpZGRlbiBlbGVtZW50ICgjMTQ4NikK
KyAgICAgICAgICAgICAgICBpZiAoIG9udHlwZSAmJiBlbGVtWyB0eXBlIF0gJiYgKCh0eXBlICE9
PSAiZm9jdXMiICYmIHR5cGUgIT09ICJibHVyIikgfHwgZXZlbnQudGFyZ2V0Lm9mZnNldFdpZHRo
ICE9PSAwKSAmJiAhalF1ZXJ5LmlzV2luZG93KCBlbGVtICkgKSB7CisKKyAgICAgICAgICAgICAg
ICAgICAgLy8gRG9uJ3QgcmUtdHJpZ2dlciBhbiBvbkZPTyBldmVudCB3aGVuIHdlIGNhbGwgaXRz
IEZPTygpIG1ldGhvZAorICAgICAgICAgICAgICAgICAgICBvbGQgPSBlbGVtWyBvbnR5cGUgXTsK
KworICAgICAgICAgICAgICAgICAgICBpZiAoIG9sZCApIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGVsZW1bIG9udHlwZSBdID0gbnVsbDsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgICAgIC8vIFByZXZlbnQgcmUtdHJpZ2dlcmluZyBvZiB0aGUgc2FtZSBldmVu
dCwgc2luY2Ugd2UgYWxyZWFkeSBidWJibGVkIGl0IGFib3ZlCisgICAgICAgICAgICAgICAgICAg
IGpRdWVyeS5ldmVudC50cmlnZ2VyZWQgPSB0eXBlOworICAgICAgICAgICAgICAgICAgICBlbGVt
WyB0eXBlIF0oKTsKKyAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCA9
IHVuZGVmaW5lZDsKKworICAgICAgICAgICAgICAgICAgICBpZiAoIG9sZCApIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGVsZW1bIG9udHlwZSBdID0gb2xkOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgcmV0dXJuIGV2ZW50LnJlc3VsdDsKKyAgICB9LAorCisgICAgZGlzcGF0Y2g6IGZ1bmN0aW9u
KCBldmVudCApIHsKKworICAgICAgICAvLyBNYWtlIGEgd3JpdGFibGUgalF1ZXJ5LkV2ZW50IGZy
b20gdGhlIG5hdGl2ZSBldmVudCBvYmplY3QKKyAgICAgICAgZXZlbnQgPSBqUXVlcnkuZXZlbnQu
Zml4KCBldmVudCB8fCB3aW5kb3cuZXZlbnQgKTsKKworICAgICAgICB2YXIgaSwgaiwgY3VyLCBy
ZXQsIHNlbE1hdGNoLCBtYXRjaGVkLCBtYXRjaGVzLCBoYW5kbGVPYmosIHNlbCwgcmVsYXRlZCwK
KyAgICAgICAgICAgIGhhbmRsZXJzID0gKCAoalF1ZXJ5Ll9kYXRhKCB0aGlzLCAiZXZlbnRzIiAp
IHx8IHt9IClbIGV2ZW50LnR5cGUgXSB8fCBbXSksCisgICAgICAgICAgICBkZWxlZ2F0ZUNvdW50
ID0gaGFuZGxlcnMuZGVsZWdhdGVDb3VudCwKKyAgICAgICAgICAgIGFyZ3MgPSBjb3JlX3NsaWNl
LmNhbGwoIGFyZ3VtZW50cyApLAorICAgICAgICAgICAgcnVuX2FsbCA9ICFldmVudC5leGNsdXNp
dmUgJiYgIWV2ZW50Lm5hbWVzcGFjZSwKKyAgICAgICAgICAgIHNwZWNpYWwgPSBqUXVlcnkuZXZl
bnQuc3BlY2lhbFsgZXZlbnQudHlwZSBdIHx8IHt9LAorICAgICAgICAgICAgaGFuZGxlclF1ZXVl
ID0gW107CisKKyAgICAgICAgLy8gVXNlIHRoZSBmaXgtZWQgalF1ZXJ5LkV2ZW50IHJhdGhlciB0
aGFuIHRoZSAocmVhZC1vbmx5KSBuYXRpdmUgZXZlbnQKKyAgICAgICAgYXJnc1swXSA9IGV2ZW50
OworICAgICAgICBldmVudC5kZWxlZ2F0ZVRhcmdldCA9IHRoaXM7CisKKyAgICAgICAgLy8gQ2Fs
bCB0aGUgcHJlRGlzcGF0Y2ggaG9vayBmb3IgdGhlIG1hcHBlZCB0eXBlLCBhbmQgbGV0IGl0IGJh
aWwgaWYgZGVzaXJlZAorICAgICAgICBpZiAoIHNwZWNpYWwucHJlRGlzcGF0Y2ggJiYgc3BlY2lh
bC5wcmVEaXNwYXRjaC5jYWxsKCB0aGlzLCBldmVudCApID09PSBmYWxzZSApIHsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIERldGVybWluZSBoYW5kbGVycyB0
aGF0IHNob3VsZCBydW4gaWYgdGhlcmUgYXJlIGRlbGVnYXRlZCBldmVudHMKKyAgICAgICAgLy8g
QXZvaWQgbm9uLWxlZnQtY2xpY2sgYnViYmxpbmcgaW4gRmlyZWZveCAoIzM4NjEpCisgICAgICAg
IGlmICggZGVsZWdhdGVDb3VudCAmJiAhKGV2ZW50LmJ1dHRvbiAmJiBldmVudC50eXBlID09PSAi
Y2xpY2siKSApIHsKKworICAgICAgICAgICAgZm9yICggY3VyID0gZXZlbnQudGFyZ2V0OyBjdXIg
IT0gdGhpczsgY3VyID0gY3VyLnBhcmVudE5vZGUgfHwgdGhpcyApIHsKKworICAgICAgICAgICAg
ICAgIC8vIERvbid0IHByb2Nlc3MgY2xpY2tzIChPTkxZKSBvbiBkaXNhYmxlZCBlbGVtZW50cyAo
IzY5MTEsICM4MTY1LCAjMTEzODIsICMxMTc2NCkKKyAgICAgICAgICAgICAgICBpZiAoIGN1ci5k
aXNhYmxlZCAhPT0gdHJ1ZSB8fCBldmVudC50eXBlICE9PSAiY2xpY2siICkgeworICAgICAgICAg
ICAgICAgICAgICBzZWxNYXRjaCA9IHt9OworICAgICAgICAgICAgICAgICAgICBtYXRjaGVzID0g
W107CisgICAgICAgICAgICAgICAgICAgIGZvciAoIGkgPSAwOyBpIDwgZGVsZWdhdGVDb3VudDsg
aSsrICkgeworICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlT2JqID0gaGFuZGxlcnNbIGkg
XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbCA9IGhhbmRsZU9iai5zZWxlY3RvcjsKKwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBzZWxNYXRjaFsgc2VsIF0gPT09IHVuZGVmaW5l
ZCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxNYXRjaFsgc2VsIF0gPSBoYW5k
bGVPYmoubmVlZHNDb250ZXh0ID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1
ZXJ5KCBzZWwsIHRoaXMgKS5pbmRleCggY3VyICkgPj0gMCA6CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGpRdWVyeS5maW5kKCBzZWwsIHRoaXMsIG51bGwsIFsgY3VyIF0gKS5sZW5n
dGg7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIHNlbE1hdGNoWyBzZWwgXSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRj
aGVzLnB1c2goIGhhbmRsZU9iaiApOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICggbWF0Y2hlcy5sZW5ndGgg
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyUXVldWUucHVzaCh7IGVsZW06IGN1
ciwgbWF0Y2hlczogbWF0Y2hlcyB9KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIEFkZCB0aGUg
cmVtYWluaW5nIChkaXJlY3RseS1ib3VuZCkgaGFuZGxlcnMKKyAgICAgICAgaWYgKCBoYW5kbGVy
cy5sZW5ndGggPiBkZWxlZ2F0ZUNvdW50ICkgeworICAgICAgICAgICAgaGFuZGxlclF1ZXVlLnB1
c2goeyBlbGVtOiB0aGlzLCBtYXRjaGVzOiBoYW5kbGVycy5zbGljZSggZGVsZWdhdGVDb3VudCAp
IH0pOworICAgICAgICB9CisKKyAgICAgICAgLy8gUnVuIGRlbGVnYXRlcyBmaXJzdDsgdGhleSBt
YXkgd2FudCB0byBzdG9wIHByb3BhZ2F0aW9uIGJlbmVhdGggdXMKKyAgICAgICAgZm9yICggaSA9
IDA7IGkgPCBoYW5kbGVyUXVldWUubGVuZ3RoICYmICFldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBl
ZCgpOyBpKysgKSB7CisgICAgICAgICAgICBtYXRjaGVkID0gaGFuZGxlclF1ZXVlWyBpIF07Cisg
ICAgICAgICAgICBldmVudC5jdXJyZW50VGFyZ2V0ID0gbWF0Y2hlZC5lbGVtOworCisgICAgICAg
ICAgICBmb3IgKCBqID0gMDsgaiA8IG1hdGNoZWQubWF0Y2hlcy5sZW5ndGggJiYgIWV2ZW50Lmlz
SW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCk7IGorKyApIHsKKyAgICAgICAgICAgICAgICBo
YW5kbGVPYmogPSBtYXRjaGVkLm1hdGNoZXNbIGogXTsKKworICAgICAgICAgICAgICAgIC8vIFRy
aWdnZXJlZCBldmVudCBtdXN0IGVpdGhlciAxKSBiZSBub24tZXhjbHVzaXZlIGFuZCBoYXZlIG5v
IG5hbWVzcGFjZSwgb3IKKyAgICAgICAgICAgICAgICAvLyAyKSBoYXZlIG5hbWVzcGFjZShzKSBh
IHN1YnNldCBvciBlcXVhbCB0byB0aG9zZSBpbiB0aGUgYm91bmQgZXZlbnQgKGJvdGggY2FuIGhh
dmUgbm8gbmFtZXNwYWNlKS4KKyAgICAgICAgICAgICAgICBpZiAoIHJ1bl9hbGwgfHwgKCFldmVu
dC5uYW1lc3BhY2UgJiYgIWhhbmRsZU9iai5uYW1lc3BhY2UpIHx8IGV2ZW50Lm5hbWVzcGFjZV9y
ZSAmJiBldmVudC5uYW1lc3BhY2VfcmUudGVzdCggaGFuZGxlT2JqLm5hbWVzcGFjZSApICkgewor
CisgICAgICAgICAgICAgICAgICAgIGV2ZW50LmRhdGEgPSBoYW5kbGVPYmouZGF0YTsKKyAgICAg
ICAgICAgICAgICAgICAgZXZlbnQuaGFuZGxlT2JqID0gaGFuZGxlT2JqOworCisgICAgICAgICAg
ICAgICAgICAgIHJldCA9ICggKGpRdWVyeS5ldmVudC5zcGVjaWFsWyBoYW5kbGVPYmoub3JpZ1R5
cGUgXSB8fCB7fSkuaGFuZGxlIHx8IGhhbmRsZU9iai5oYW5kbGVyICkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAuYXBwbHkoIG1hdGNoZWQuZWxlbSwgYXJncyApOworCisgICAgICAgICAg
ICAgICAgICAgIGlmICggcmV0ICE9PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBldmVudC5yZXN1bHQgPSByZXQ7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHJl
dCA9PT0gZmFsc2UgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVu
dERlZmF1bHQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFn
YXRpb24oKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg
IC8vIENhbGwgdGhlIHBvc3REaXNwYXRjaCBob29rIGZvciB0aGUgbWFwcGVkIHR5cGUKKyAgICAg
ICAgaWYgKCBzcGVjaWFsLnBvc3REaXNwYXRjaCApIHsKKyAgICAgICAgICAgIHNwZWNpYWwucG9z
dERpc3BhdGNoLmNhbGwoIHRoaXMsIGV2ZW50ICk7CisgICAgICAgIH0KKworICAgICAgICByZXR1
cm4gZXZlbnQucmVzdWx0OworICAgIH0sCisKKyAgICAvLyBJbmNsdWRlcyBzb21lIGV2ZW50IHBy
b3BzIHNoYXJlZCBieSBLZXlFdmVudCBhbmQgTW91c2VFdmVudAorICAgIC8vICoqKiBhdHRyQ2hh
bmdlIGF0dHJOYW1lIHJlbGF0ZWROb2RlIHNyY0VsZW1lbnQgIGFyZSBub3Qgbm9ybWFsaXplZCwg
bm9uLVczQywgZGVwcmVjYXRlZCwgd2lsbCBiZSByZW1vdmVkIGluIDEuOCAqKioKKyAgICBwcm9w
czogImF0dHJDaGFuZ2UgYXR0ck5hbWUgcmVsYXRlZE5vZGUgc3JjRWxlbWVudCBhbHRLZXkgYnVi
YmxlcyBjYW5jZWxhYmxlIGN0cmxLZXkgY3VycmVudFRhcmdldCBldmVudFBoYXNlIG1ldGFLZXkg
cmVsYXRlZFRhcmdldCBzaGlmdEtleSB0YXJnZXQgdGltZVN0YW1wIHZpZXcgd2hpY2giLnNwbGl0
KCIgIiksCisKKyAgICBmaXhIb29rczoge30sCisKKyAgICBrZXlIb29rczogeworICAgICAgICBw
cm9wczogImNoYXIgY2hhckNvZGUga2V5IGtleUNvZGUiLnNwbGl0KCIgIiksCisgICAgICAgIGZp
bHRlcjogZnVuY3Rpb24oIGV2ZW50LCBvcmlnaW5hbCApIHsKKworICAgICAgICAgICAgLy8gQWRk
IHdoaWNoIGZvciBrZXkgZXZlbnRzCisgICAgICAgICAgICBpZiAoIGV2ZW50LndoaWNoID09IG51
bGwgKSB7CisgICAgICAgICAgICAgICAgZXZlbnQud2hpY2ggPSBvcmlnaW5hbC5jaGFyQ29kZSAh
PSBudWxsID8gb3JpZ2luYWwuY2hhckNvZGUgOiBvcmlnaW5hbC5rZXlDb2RlOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICByZXR1cm4gZXZlbnQ7CisgICAgICAgIH0KKyAgICB9LAorCisg
ICAgbW91c2VIb29rczogeworICAgICAgICBwcm9wczogImJ1dHRvbiBidXR0b25zIGNsaWVudFgg
Y2xpZW50WSBmcm9tRWxlbWVudCBvZmZzZXRYIG9mZnNldFkgcGFnZVggcGFnZVkgc2NyZWVuWCBz
Y3JlZW5ZIHRvRWxlbWVudCIuc3BsaXQoIiAiKSwKKyAgICAgICAgZmlsdGVyOiBmdW5jdGlvbigg
ZXZlbnQsIG9yaWdpbmFsICkgeworICAgICAgICAgICAgdmFyIGV2ZW50RG9jLCBkb2MsIGJvZHks
CisgICAgICAgICAgICAgICAgYnV0dG9uID0gb3JpZ2luYWwuYnV0dG9uLAorICAgICAgICAgICAg
ICAgIGZyb21FbGVtZW50ID0gb3JpZ2luYWwuZnJvbUVsZW1lbnQ7CisKKyAgICAgICAgICAgIC8v
IENhbGN1bGF0ZSBwYWdlWC9ZIGlmIG1pc3NpbmcgYW5kIGNsaWVudFgvWSBhdmFpbGFibGUKKyAg
ICAgICAgICAgIGlmICggZXZlbnQucGFnZVggPT0gbnVsbCAmJiBvcmlnaW5hbC5jbGllbnRYICE9
IG51bGwgKSB7CisgICAgICAgICAgICAgICAgZXZlbnREb2MgPSBldmVudC50YXJnZXQub3duZXJE
b2N1bWVudCB8fCBkb2N1bWVudDsKKyAgICAgICAgICAgICAgICBkb2MgPSBldmVudERvYy5kb2N1
bWVudEVsZW1lbnQ7CisgICAgICAgICAgICAgICAgYm9keSA9IGV2ZW50RG9jLmJvZHk7CisKKyAg
ICAgICAgICAgICAgICBldmVudC5wYWdlWCA9IG9yaWdpbmFsLmNsaWVudFggKyAoIGRvYyAmJiBk
b2Muc2Nyb2xsTGVmdCB8fCBib2R5ICYmIGJvZHkuc2Nyb2xsTGVmdCB8fCAwICkgLSAoIGRvYyAm
JiBkb2MuY2xpZW50TGVmdCB8fCBib2R5ICYmIGJvZHkuY2xpZW50TGVmdCB8fCAwICk7CisgICAg
ICAgICAgICAgICAgZXZlbnQucGFnZVkgPSBvcmlnaW5hbC5jbGllbnRZICsgKCBkb2MgJiYgZG9j
LnNjcm9sbFRvcCAgfHwgYm9keSAmJiBib2R5LnNjcm9sbFRvcCAgfHwgMCApIC0gKCBkb2MgJiYg
ZG9jLmNsaWVudFRvcCAgfHwgYm9keSAmJiBib2R5LmNsaWVudFRvcCAgfHwgMCApOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAvLyBBZGQgcmVsYXRlZFRhcmdldCwgaWYgbmVjZXNzYXJ5
CisgICAgICAgICAgICBpZiAoICFldmVudC5yZWxhdGVkVGFyZ2V0ICYmIGZyb21FbGVtZW50ICkg
eworICAgICAgICAgICAgICAgIGV2ZW50LnJlbGF0ZWRUYXJnZXQgPSBmcm9tRWxlbWVudCA9PT0g
ZXZlbnQudGFyZ2V0ID8gb3JpZ2luYWwudG9FbGVtZW50IDogZnJvbUVsZW1lbnQ7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIC8vIEFkZCB3aGljaCBmb3IgY2xpY2s6IDEgPT09IGxlZnQ7
IDIgPT09IG1pZGRsZTsgMyA9PT0gcmlnaHQKKyAgICAgICAgICAgIC8vIE5vdGU6IGJ1dHRvbiBp
cyBub3Qgbm9ybWFsaXplZCwgc28gZG9uJ3QgdXNlIGl0CisgICAgICAgICAgICBpZiAoICFldmVu
dC53aGljaCAmJiBidXR0b24gIT09IHVuZGVmaW5lZCApIHsKKyAgICAgICAgICAgICAgICBldmVu
dC53aGljaCA9ICggYnV0dG9uICYgMSA/IDEgOiAoIGJ1dHRvbiAmIDIgPyAzIDogKCBidXR0b24g
JiA0ID8gMiA6IDAgKSApICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBl
dmVudDsKKyAgICAgICAgfQorICAgIH0sCisKKyAgICBmaXg6IGZ1bmN0aW9uKCBldmVudCApIHsK
KyAgICAgICAgaWYgKCBldmVudFsgalF1ZXJ5LmV4cGFuZG8gXSApIHsKKyAgICAgICAgICAgIHJl
dHVybiBldmVudDsKKyAgICAgICAgfQorCisgICAgICAgIC8vIENyZWF0ZSBhIHdyaXRhYmxlIGNv
cHkgb2YgdGhlIGV2ZW50IG9iamVjdCBhbmQgbm9ybWFsaXplIHNvbWUgcHJvcGVydGllcworICAg
ICAgICB2YXIgaSwgcHJvcCwKKyAgICAgICAgICAgIG9yaWdpbmFsRXZlbnQgPSBldmVudCwKKyAg
ICAgICAgICAgIGZpeEhvb2sgPSBqUXVlcnkuZXZlbnQuZml4SG9va3NbIGV2ZW50LnR5cGUgXSB8
fCB7fSwKKyAgICAgICAgICAgIGNvcHkgPSBmaXhIb29rLnByb3BzID8gdGhpcy5wcm9wcy5jb25j
YXQoIGZpeEhvb2sucHJvcHMgKSA6IHRoaXMucHJvcHM7CisKKyAgICAgICAgZXZlbnQgPSBqUXVl
cnkuRXZlbnQoIG9yaWdpbmFsRXZlbnQgKTsKKworICAgICAgICBmb3IgKCBpID0gY29weS5sZW5n
dGg7IGk7ICkgeworICAgICAgICAgICAgcHJvcCA9IGNvcHlbIC0taSBdOworICAgICAgICAgICAg
ZXZlbnRbIHByb3AgXSA9IG9yaWdpbmFsRXZlbnRbIHByb3AgXTsKKyAgICAgICAgfQorCisgICAg
ICAgIC8vIEZpeCB0YXJnZXQgcHJvcGVydHksIGlmIG5lY2Vzc2FyeSAoIzE5MjUsIElFIDYvNy84
ICYgU2FmYXJpMikKKyAgICAgICAgaWYgKCAhZXZlbnQudGFyZ2V0ICkgeworICAgICAgICAgICAg
ZXZlbnQudGFyZ2V0ID0gb3JpZ2luYWxFdmVudC5zcmNFbGVtZW50IHx8IGRvY3VtZW50OworICAg
ICAgICB9CisKKyAgICAgICAgLy8gVGFyZ2V0IHNob3VsZCBub3QgYmUgYSB0ZXh0IG5vZGUgKCM1
MDQsIFNhZmFyaSkKKyAgICAgICAgaWYgKCBldmVudC50YXJnZXQubm9kZVR5cGUgPT09IDMgKSB7
CisgICAgICAgICAgICBldmVudC50YXJnZXQgPSBldmVudC50YXJnZXQucGFyZW50Tm9kZTsKKyAg
ICAgICAgfQorCisgICAgICAgIC8vIEZvciBtb3VzZS9rZXkgZXZlbnRzLCBtZXRhS2V5PT1mYWxz
ZSBpZiBpdCdzIHVuZGVmaW5lZCAoIzMzNjgsICMxMTMyODsgSUU2LzcvOCkKKyAgICAgICAgZXZl
bnQubWV0YUtleSA9ICEhZXZlbnQubWV0YUtleTsKKworICAgICAgICByZXR1cm4gZml4SG9vay5m
aWx0ZXI/IGZpeEhvb2suZmlsdGVyKCBldmVudCwgb3JpZ2luYWxFdmVudCApIDogZXZlbnQ7Cisg
ICAgfSwKKworICAgIHNwZWNpYWw6IHsKKyAgICAgICAgbG9hZDogeworICAgICAgICAgICAgLy8g
UHJldmVudCB0cmlnZ2VyZWQgaW1hZ2UubG9hZCBldmVudHMgZnJvbSBidWJibGluZyB0byB3aW5k
b3cubG9hZAorICAgICAgICAgICAgbm9CdWJibGU6IHRydWUKKyAgICAgICAgfSwKKworICAgICAg
ICBmb2N1czogeworICAgICAgICAgICAgZGVsZWdhdGVUeXBlOiAiZm9jdXNpbiIKKyAgICAgICAg
fSwKKyAgICAgICAgYmx1cjogeworICAgICAgICAgICAgZGVsZWdhdGVUeXBlOiAiZm9jdXNvdXQi
CisgICAgICAgIH0sCisKKyAgICAgICAgYmVmb3JldW5sb2FkOiB7CisgICAgICAgICAgICBzZXR1
cDogZnVuY3Rpb24oIGRhdGEsIG5hbWVzcGFjZXMsIGV2ZW50SGFuZGxlICkgeworICAgICAgICAg
ICAgICAgIC8vIFdlIG9ubHkgd2FudCB0byBkbyB0aGlzIHNwZWNpYWwgY2FzZSBvbiB3aW5kb3dz
CisgICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkuaXNXaW5kb3coIHRoaXMgKSApIHsKKyAgICAg
ICAgICAgICAgICAgICAgdGhpcy5vbmJlZm9yZXVubG9hZCA9IGV2ZW50SGFuZGxlOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgIHRlYXJkb3duOiBmdW5j
dGlvbiggbmFtZXNwYWNlcywgZXZlbnRIYW5kbGUgKSB7CisgICAgICAgICAgICAgICAgaWYgKCB0
aGlzLm9uYmVmb3JldW5sb2FkID09PSBldmVudEhhbmRsZSApIHsKKyAgICAgICAgICAgICAgICAg
ICAgdGhpcy5vbmJlZm9yZXVubG9hZCA9IG51bGw7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfSwKKworICAgIHNpbXVsYXRlOiBmdW5jdGlvbiggdHlw
ZSwgZWxlbSwgZXZlbnQsIGJ1YmJsZSApIHsKKyAgICAgICAgLy8gUGlnZ3liYWNrIG9uIGEgZG9u
b3IgZXZlbnQgdG8gc2ltdWxhdGUgYSBkaWZmZXJlbnQgb25lLgorICAgICAgICAvLyBGYWtlIG9y
aWdpbmFsRXZlbnQgdG8gYXZvaWQgZG9ub3IncyBzdG9wUHJvcGFnYXRpb24sIGJ1dCBpZiB0aGUK
KyAgICAgICAgLy8gc2ltdWxhdGVkIGV2ZW50IHByZXZlbnRzIGRlZmF1bHQgdGhlbiB3ZSBkbyB0
aGUgc2FtZSBvbiB0aGUgZG9ub3IuCisgICAgICAgIHZhciBlID0galF1ZXJ5LmV4dGVuZCgKKyAg
ICAgICAgICAgIG5ldyBqUXVlcnkuRXZlbnQoKSwKKyAgICAgICAgICAgIGV2ZW50LAorICAgICAg
ICAgICAgeyB0eXBlOiB0eXBlLAorICAgICAgICAgICAgICAgIGlzU2ltdWxhdGVkOiB0cnVlLAor
ICAgICAgICAgICAgICAgIG9yaWdpbmFsRXZlbnQ6IHt9CisgICAgICAgICAgICB9CisgICAgICAg
ICk7CisgICAgICAgIGlmICggYnViYmxlICkgeworICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnRy
aWdnZXIoIGUsIG51bGwsIGVsZW0gKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGpR
dWVyeS5ldmVudC5kaXNwYXRjaC5jYWxsKCBlbGVtLCBlICk7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKCBlLmlzRGVmYXVsdFByZXZlbnRlZCgpICkgeworICAgICAgICAgICAgZXZlbnQucHJldmVu
dERlZmF1bHQoKTsKKyAgICAgICAgfQorICAgIH0KK307CisKKy8vIFNvbWUgcGx1Z2lucyBhcmUg
dXNpbmcsIGJ1dCBpdCdzIHVuZG9jdW1lbnRlZC9kZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92
ZWQuCisvLyBUaGUgMS43IHNwZWNpYWwgZXZlbnQgaW50ZXJmYWNlIHNob3VsZCBwcm92aWRlIGFs
bCB0aGUgaG9va3MgbmVlZGVkIG5vdy4KK2pRdWVyeS5ldmVudC5oYW5kbGUgPSBqUXVlcnkuZXZl
bnQuZGlzcGF0Y2g7CisKK2pRdWVyeS5yZW1vdmVFdmVudCA9IGRvY3VtZW50LnJlbW92ZUV2ZW50
TGlzdGVuZXIgPworICAgIGZ1bmN0aW9uKCBlbGVtLCB0eXBlLCBoYW5kbGUgKSB7CisgICAgICAg
IGlmICggZWxlbS5yZW1vdmVFdmVudExpc3RlbmVyICkgeworICAgICAgICAgICAgZWxlbS5yZW1v
dmVFdmVudExpc3RlbmVyKCB0eXBlLCBoYW5kbGUsIGZhbHNlICk7CisgICAgICAgIH0KKyAgICB9
IDoKKyAgICBmdW5jdGlvbiggZWxlbSwgdHlwZSwgaGFuZGxlICkgeworICAgICAgICB2YXIgbmFt
ZSA9ICJvbiIgKyB0eXBlOworCisgICAgICAgIGlmICggZWxlbS5kZXRhY2hFdmVudCApIHsKKwor
ICAgICAgICAgICAgLy8gIzg1NDUsICM3MDU0LCBwcmV2ZW50aW5nIG1lbW9yeSBsZWFrcyBmb3Ig
Y3VzdG9tIGV2ZW50cyBpbiBJRTYtOAorICAgICAgICAgICAgLy8gZGV0YWNoRXZlbnQgbmVlZGVk
IHByb3BlcnR5IG9uIGVsZW1lbnQsIGJ5IG5hbWUgb2YgdGhhdCBldmVudCwgdG8gcHJvcGVybHkg
ZXhwb3NlIGl0IHRvIEdDCisgICAgICAgICAgICBpZiAoIHR5cGVvZiBlbGVtWyBuYW1lIF0gPT09
ICJ1bmRlZmluZWQiICkgeworICAgICAgICAgICAgICAgIGVsZW1bIG5hbWUgXSA9IG51bGw7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGVsZW0uZGV0YWNoRXZlbnQoIG5hbWUsIGhhbmRs
ZSApOworICAgICAgICB9CisgICAgfTsKKworalF1ZXJ5LkV2ZW50ID0gZnVuY3Rpb24oIHNyYywg
cHJvcHMgKSB7CisgICAgLy8gQWxsb3cgaW5zdGFudGlhdGlvbiB3aXRob3V0IHRoZSAnbmV3JyBr
ZXl3b3JkCisgICAgaWYgKCAhKHRoaXMgaW5zdGFuY2VvZiBqUXVlcnkuRXZlbnQpICkgeworICAg
ICAgICByZXR1cm4gbmV3IGpRdWVyeS5FdmVudCggc3JjLCBwcm9wcyApOworICAgIH0KKworICAg
IC8vIEV2ZW50IG9iamVjdAorICAgIGlmICggc3JjICYmIHNyYy50eXBlICkgeworICAgICAgICB0
aGlzLm9yaWdpbmFsRXZlbnQgPSBzcmM7CisgICAgICAgIHRoaXMudHlwZSA9IHNyYy50eXBlOwor
CisgICAgICAgIC8vIEV2ZW50cyBidWJibGluZyB1cCB0aGUgZG9jdW1lbnQgbWF5IGhhdmUgYmVl
biBtYXJrZWQgYXMgcHJldmVudGVkCisgICAgICAgIC8vIGJ5IGEgaGFuZGxlciBsb3dlciBkb3du
IHRoZSB0cmVlOyByZWZsZWN0IHRoZSBjb3JyZWN0IHZhbHVlLgorICAgICAgICB0aGlzLmlzRGVm
YXVsdFByZXZlbnRlZCA9ICggc3JjLmRlZmF1bHRQcmV2ZW50ZWQgfHwgc3JjLnJldHVyblZhbHVl
ID09PSBmYWxzZSB8fAorICAgICAgICAgICAgc3JjLmdldFByZXZlbnREZWZhdWx0ICYmIHNyYy5n
ZXRQcmV2ZW50RGVmYXVsdCgpICkgPyByZXR1cm5UcnVlIDogcmV0dXJuRmFsc2U7CisKKyAgICAv
LyBFdmVudCB0eXBlCisgICAgfSBlbHNlIHsKKyAgICAgICAgdGhpcy50eXBlID0gc3JjOworICAg
IH0KKworICAgIC8vIFB1dCBleHBsaWNpdGx5IHByb3ZpZGVkIHByb3BlcnRpZXMgb250byB0aGUg
ZXZlbnQgb2JqZWN0CisgICAgaWYgKCBwcm9wcyApIHsKKyAgICAgICAgalF1ZXJ5LmV4dGVuZCgg
dGhpcywgcHJvcHMgKTsKKyAgICB9CisKKyAgICAvLyBDcmVhdGUgYSB0aW1lc3RhbXAgaWYgaW5j
b21pbmcgZXZlbnQgZG9lc24ndCBoYXZlIG9uZQorICAgIHRoaXMudGltZVN0YW1wID0gc3JjICYm
IHNyYy50aW1lU3RhbXAgfHwgalF1ZXJ5Lm5vdygpOworCisgICAgLy8gTWFyayBpdCBhcyBmaXhl
ZAorICAgIHRoaXNbIGpRdWVyeS5leHBhbmRvIF0gPSB0cnVlOworfTsKKworZnVuY3Rpb24gcmV0
dXJuRmFsc2UoKSB7CisgICAgcmV0dXJuIGZhbHNlOworfQorZnVuY3Rpb24gcmV0dXJuVHJ1ZSgp
IHsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8galF1ZXJ5LkV2ZW50IGlzIGJhc2VkIG9uIERP
TTMgRXZlbnRzIGFzIHNwZWNpZmllZCBieSB0aGUgRUNNQVNjcmlwdCBMYW5ndWFnZSBCaW5kaW5n
CisvLyBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1dELURPTS1MZXZlbC0zLUV2ZW50cy0yMDAz
MDMzMS9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWwKK2pRdWVyeS5FdmVudC5wcm90b3R5cGUgPSB7
CisgICAgcHJldmVudERlZmF1bHQ6IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLmlzRGVmYXVs
dFByZXZlbnRlZCA9IHJldHVyblRydWU7CisKKyAgICAgICAgdmFyIGUgPSB0aGlzLm9yaWdpbmFs
RXZlbnQ7CisgICAgICAgIGlmICggIWUgKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICAvLyBpZiBwcmV2ZW50RGVmYXVsdCBleGlzdHMgcnVuIGl0IG9uIHRoZSBv
cmlnaW5hbCBldmVudAorICAgICAgICBpZiAoIGUucHJldmVudERlZmF1bHQgKSB7CisgICAgICAg
ICAgICBlLnByZXZlbnREZWZhdWx0KCk7CisKKyAgICAgICAgLy8gb3RoZXJ3aXNlIHNldCB0aGUg
cmV0dXJuVmFsdWUgcHJvcGVydHkgb2YgdGhlIG9yaWdpbmFsIGV2ZW50IHRvIGZhbHNlIChJRSkK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGUucmV0dXJuVmFsdWUgPSBmYWxzZTsKKyAg
ICAgICAgfQorICAgIH0sCisgICAgc3RvcFByb3BhZ2F0aW9uOiBmdW5jdGlvbigpIHsKKyAgICAg
ICAgdGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCA9IHJldHVyblRydWU7CisKKyAgICAgICAgdmFy
IGUgPSB0aGlzLm9yaWdpbmFsRXZlbnQ7CisgICAgICAgIGlmICggIWUgKSB7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgLy8gaWYgc3RvcFByb3BhZ2F0aW9uIGV4aXN0
cyBydW4gaXQgb24gdGhlIG9yaWdpbmFsIGV2ZW50CisgICAgICAgIGlmICggZS5zdG9wUHJvcGFn
YXRpb24gKSB7CisgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOworICAgICAgICB9Cisg
ICAgICAgIC8vIG90aGVyd2lzZSBzZXQgdGhlIGNhbmNlbEJ1YmJsZSBwcm9wZXJ0eSBvZiB0aGUg
b3JpZ2luYWwgZXZlbnQgdG8gdHJ1ZSAoSUUpCisgICAgICAgIGUuY2FuY2VsQnViYmxlID0gdHJ1
ZTsKKyAgICB9LAorICAgIHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbjogZnVuY3Rpb24oKSB7Cisg
ICAgICAgIHRoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQgPSByZXR1cm5UcnVlOwor
ICAgICAgICB0aGlzLnN0b3BQcm9wYWdhdGlvbigpOworICAgIH0sCisgICAgaXNEZWZhdWx0UHJl
dmVudGVkOiByZXR1cm5GYWxzZSwKKyAgICBpc1Byb3BhZ2F0aW9uU3RvcHBlZDogcmV0dXJuRmFs
c2UsCisgICAgaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ6IHJldHVybkZhbHNlCit9Owor
CisvLyBDcmVhdGUgbW91c2VlbnRlci9sZWF2ZSBldmVudHMgdXNpbmcgbW91c2VvdmVyL291dCBh
bmQgZXZlbnQtdGltZSBjaGVja3MKK2pRdWVyeS5lYWNoKHsKKyAgICBtb3VzZWVudGVyOiAibW91
c2VvdmVyIiwKKyAgICBtb3VzZWxlYXZlOiAibW91c2VvdXQiCit9LCBmdW5jdGlvbiggb3JpZywg
Zml4ICkgeworICAgIGpRdWVyeS5ldmVudC5zcGVjaWFsWyBvcmlnIF0gPSB7CisgICAgICAgIGRl
bGVnYXRlVHlwZTogZml4LAorICAgICAgICBiaW5kVHlwZTogZml4LAorCisgICAgICAgIGhhbmRs
ZTogZnVuY3Rpb24oIGV2ZW50ICkgeworICAgICAgICAgICAgdmFyIHJldCwKKyAgICAgICAgICAg
ICAgICB0YXJnZXQgPSB0aGlzLAorICAgICAgICAgICAgICAgIHJlbGF0ZWQgPSBldmVudC5yZWxh
dGVkVGFyZ2V0LAorICAgICAgICAgICAgICAgIGhhbmRsZU9iaiA9IGV2ZW50LmhhbmRsZU9iaiwK
KyAgICAgICAgICAgICAgICBzZWxlY3RvciA9IGhhbmRsZU9iai5zZWxlY3RvcjsKKworICAgICAg
ICAgICAgLy8gRm9yIG1vdXNlbnRlci9sZWF2ZSBjYWxsIHRoZSBoYW5kbGVyIGlmIHJlbGF0ZWQg
aXMgb3V0c2lkZSB0aGUgdGFyZ2V0LgorICAgICAgICAgICAgLy8gTkI6IE5vIHJlbGF0ZWRUYXJn
ZXQgaWYgdGhlIG1vdXNlIGxlZnQvZW50ZXJlZCB0aGUgYnJvd3NlciB3aW5kb3cKKyAgICAgICAg
ICAgIGlmICggIXJlbGF0ZWQgfHwgKHJlbGF0ZWQgIT09IHRhcmdldCAmJiAhalF1ZXJ5LmNvbnRh
aW5zKCB0YXJnZXQsIHJlbGF0ZWQgKSkgKSB7CisgICAgICAgICAgICAgICAgZXZlbnQudHlwZSA9
IGhhbmRsZU9iai5vcmlnVHlwZTsKKyAgICAgICAgICAgICAgICByZXQgPSBoYW5kbGVPYmouaGFu
ZGxlci5hcHBseSggdGhpcywgYXJndW1lbnRzICk7CisgICAgICAgICAgICAgICAgZXZlbnQudHlw
ZSA9IGZpeDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAg
IH0KKyAgICB9OworfSk7CisKKy8vIElFIHN1Ym1pdCBkZWxlZ2F0aW9uCitpZiAoICFqUXVlcnku
c3VwcG9ydC5zdWJtaXRCdWJibGVzICkgeworCisgICAgalF1ZXJ5LmV2ZW50LnNwZWNpYWwuc3Vi
bWl0ID0geworICAgICAgICBzZXR1cDogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAvLyBPbmx5
IG5lZWQgdGhpcyBmb3IgZGVsZWdhdGVkIGZvcm0gc3VibWl0IGV2ZW50cworICAgICAgICAgICAg
aWYgKCBqUXVlcnkubm9kZU5hbWUoIHRoaXMsICJmb3JtIiApICkgeworICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gTGF6eS1hZGQg
YSBzdWJtaXQgaGFuZGxlciB3aGVuIGEgZGVzY2VuZGFudCBmb3JtIG1heSBwb3RlbnRpYWxseSBi
ZSBzdWJtaXR0ZWQKKyAgICAgICAgICAgIGpRdWVyeS5ldmVudC5hZGQoIHRoaXMsICJjbGljay5f
c3VibWl0IGtleXByZXNzLl9zdWJtaXQiLCBmdW5jdGlvbiggZSApIHsKKyAgICAgICAgICAgICAg
ICAvLyBOb2RlIG5hbWUgY2hlY2sgYXZvaWRzIGEgVk1MLXJlbGF0ZWQgY3Jhc2ggaW4gSUUgKCM5
ODA3KQorICAgICAgICAgICAgICAgIHZhciBlbGVtID0gZS50YXJnZXQsCisgICAgICAgICAgICAg
ICAgICAgIGZvcm0gPSBqUXVlcnkubm9kZU5hbWUoIGVsZW0sICJpbnB1dCIgKSB8fCBqUXVlcnku
bm9kZU5hbWUoIGVsZW0sICJidXR0b24iICkgPyBlbGVtLmZvcm0gOiB1bmRlZmluZWQ7CisgICAg
ICAgICAgICAgICAgaWYgKCBmb3JtICYmICFqUXVlcnkuX2RhdGEoIGZvcm0sICJfc3VibWl0X2F0
dGFjaGVkIiApICkgeworICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQuYWRkKCBmb3Jt
LCAic3VibWl0Ll9zdWJtaXQiLCBmdW5jdGlvbiggZXZlbnQgKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBldmVudC5fc3VibWl0X2J1YmJsZSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAg
IH0pOworICAgICAgICAgICAgICAgICAgICBqUXVlcnkuX2RhdGEoIGZvcm0sICJfc3VibWl0X2F0
dGFjaGVkIiwgdHJ1ZSApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAg
ICAgICAgICAgLy8gcmV0dXJuIHVuZGVmaW5lZCBzaW5jZSB3ZSBkb24ndCBuZWVkIGFuIGV2ZW50
IGxpc3RlbmVyCisgICAgICAgIH0sCisKKyAgICAgICAgcG9zdERpc3BhdGNoOiBmdW5jdGlvbigg
ZXZlbnQgKSB7CisgICAgICAgICAgICAvLyBJZiBmb3JtIHdhcyBzdWJtaXR0ZWQgYnkgdGhlIHVz
ZXIsIGJ1YmJsZSB0aGUgZXZlbnQgdXAgdGhlIHRyZWUKKyAgICAgICAgICAgIGlmICggZXZlbnQu
X3N1Ym1pdF9idWJibGUgKSB7CisgICAgICAgICAgICAgICAgZGVsZXRlIGV2ZW50Ll9zdWJtaXRf
YnViYmxlOworICAgICAgICAgICAgICAgIGlmICggdGhpcy5wYXJlbnROb2RlICYmICFldmVudC5p
c1RyaWdnZXIgKSB7CisgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5ldmVudC5zaW11bGF0ZSgg
InN1Ym1pdCIsIHRoaXMucGFyZW50Tm9kZSwgZXZlbnQsIHRydWUgKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisKKyAgICAgICAgdGVhcmRvd246IGZ1bmN0
aW9uKCkgeworICAgICAgICAgICAgLy8gT25seSBuZWVkIHRoaXMgZm9yIGRlbGVnYXRlZCBmb3Jt
IHN1Ym1pdCBldmVudHMKKyAgICAgICAgICAgIGlmICggalF1ZXJ5Lm5vZGVOYW1lKCB0aGlzLCAi
Zm9ybSIgKSApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIC8vIFJlbW92ZSBkZWxlZ2F0ZWQgaGFuZGxlcnM7IGNsZWFuRGF0YSBl
dmVudHVhbGx5IHJlYXBzIHN1Ym1pdCBoYW5kbGVycyBhdHRhY2hlZCBhYm92ZQorICAgICAgICAg
ICAgalF1ZXJ5LmV2ZW50LnJlbW92ZSggdGhpcywgIi5fc3VibWl0IiApOworICAgICAgICB9Cisg
ICAgfTsKK30KKworLy8gSUUgY2hhbmdlIGRlbGVnYXRpb24gYW5kIGNoZWNrYm94L3JhZGlvIGZp
eAoraWYgKCAhalF1ZXJ5LnN1cHBvcnQuY2hhbmdlQnViYmxlcyApIHsKKworICAgIGpRdWVyeS5l
dmVudC5zcGVjaWFsLmNoYW5nZSA9IHsKKworICAgICAgICBzZXR1cDogZnVuY3Rpb24oKSB7CisK
KyAgICAgICAgICAgIGlmICggcmZvcm1FbGVtcy50ZXN0KCB0aGlzLm5vZGVOYW1lICkgKSB7Cisg
ICAgICAgICAgICAgICAgLy8gSUUgZG9lc24ndCBmaXJlIGNoYW5nZSBvbiBhIGNoZWNrL3JhZGlv
IHVudGlsIGJsdXI7IHRyaWdnZXIgaXQgb24gY2xpY2sKKyAgICAgICAgICAgICAgICAvLyBhZnRl
ciBhIHByb3BlcnR5Y2hhbmdlLiBFYXQgdGhlIGJsdXItY2hhbmdlIGluIHNwZWNpYWwuY2hhbmdl
LmhhbmRsZS4KKyAgICAgICAgICAgICAgICAvLyBUaGlzIHN0aWxsIGZpcmVzIG9uY2hhbmdlIGEg
c2Vjb25kIHRpbWUgZm9yIGNoZWNrL3JhZGlvIGFmdGVyIGJsdXIuCisgICAgICAgICAgICAgICAg
aWYgKCB0aGlzLnR5cGUgPT09ICJjaGVja2JveCIgfHwgdGhpcy50eXBlID09PSAicmFkaW8iICkg
eworICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQuYWRkKCB0aGlzLCAicHJvcGVydHlj
aGFuZ2UuX2NoYW5nZSIsIGZ1bmN0aW9uKCBldmVudCApIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICggZXZlbnQub3JpZ2luYWxFdmVudC5wcm9wZXJ0eU5hbWUgPT09ICJjaGVja2VkIiAp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9qdXN0X2NoYW5nZWQgPSB0cnVl
OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9KTsKKyAg
ICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LmFkZCggdGhpcywgImNsaWNrLl9jaGFuZ2Ui
LCBmdW5jdGlvbiggZXZlbnQgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHRoaXMu
X2p1c3RfY2hhbmdlZCAmJiAhZXZlbnQuaXNUcmlnZ2VyICkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRoaXMuX2p1c3RfY2hhbmdlZCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWxsb3cgdHJpZ2dlcmVkLCBzaW11
bGF0ZWQgY2hhbmdlIGV2ZW50cyAoIzExNTAwKQorICAgICAgICAgICAgICAgICAgICAgICAgalF1
ZXJ5LmV2ZW50LnNpbXVsYXRlKCAiY2hhbmdlIiwgdGhpcywgZXZlbnQsIHRydWUgKTsKKyAgICAg
ICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIERlbGVnYXRlZCBldmVu
dDsgbGF6eS1hZGQgYSBjaGFuZ2UgaGFuZGxlciBvbiBkZXNjZW5kYW50IGlucHV0cworICAgICAg
ICAgICAgalF1ZXJ5LmV2ZW50LmFkZCggdGhpcywgImJlZm9yZWFjdGl2YXRlLl9jaGFuZ2UiLCBm
dW5jdGlvbiggZSApIHsKKyAgICAgICAgICAgICAgICB2YXIgZWxlbSA9IGUudGFyZ2V0OworCisg
ICAgICAgICAgICAgICAgaWYgKCByZm9ybUVsZW1zLnRlc3QoIGVsZW0ubm9kZU5hbWUgKSAmJiAh
alF1ZXJ5Ll9kYXRhKCBlbGVtLCAiX2NoYW5nZV9hdHRhY2hlZCIgKSApIHsKKyAgICAgICAgICAg
ICAgICAgICAgalF1ZXJ5LmV2ZW50LmFkZCggZWxlbSwgImNoYW5nZS5fY2hhbmdlIiwgZnVuY3Rp
b24oIGV2ZW50ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB0aGlzLnBhcmVudE5v
ZGUgJiYgIWV2ZW50LmlzU2ltdWxhdGVkICYmICFldmVudC5pc1RyaWdnZXIgKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnNpbXVsYXRlKCAiY2hhbmdlIiwgdGhp
cy5wYXJlbnROb2RlLCBldmVudCwgdHJ1ZSApOworICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgalF1ZXJ5Ll9kYXRh
KCBlbGVtLCAiX2NoYW5nZV9hdHRhY2hlZCIsIHRydWUgKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9KTsKKyAgICAgICAgfSwKKworICAgICAgICBoYW5kbGU6IGZ1bmN0aW9uKCBl
dmVudCApIHsKKyAgICAgICAgICAgIHZhciBlbGVtID0gZXZlbnQudGFyZ2V0OworCisgICAgICAg
ICAgICAvLyBTd2FsbG93IG5hdGl2ZSBjaGFuZ2UgZXZlbnRzIGZyb20gY2hlY2tib3gvcmFkaW8s
IHdlIGFscmVhZHkgdHJpZ2dlcmVkIHRoZW0gYWJvdmUKKyAgICAgICAgICAgIGlmICggdGhpcyAh
PT0gZWxlbSB8fCBldmVudC5pc1NpbXVsYXRlZCB8fCBldmVudC5pc1RyaWdnZXIgfHwgKGVsZW0u
dHlwZSAhPT0gInJhZGlvIiAmJiBlbGVtLnR5cGUgIT09ICJjaGVja2JveCIpICkgeworICAgICAg
ICAgICAgICAgIHJldHVybiBldmVudC5oYW5kbGVPYmouaGFuZGxlci5hcHBseSggdGhpcywgYXJn
dW1lbnRzICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisKKyAgICAgICAgdGVhcmRvd246
IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnJlbW92ZSggdGhpcywgIi5f
Y2hhbmdlIiApOworCisgICAgICAgICAgICByZXR1cm4gIXJmb3JtRWxlbXMudGVzdCggdGhpcy5u
b2RlTmFtZSApOworICAgICAgICB9CisgICAgfTsKK30KKworLy8gQ3JlYXRlICJidWJibGluZyIg
Zm9jdXMgYW5kIGJsdXIgZXZlbnRzCitpZiAoICFqUXVlcnkuc3VwcG9ydC5mb2N1c2luQnViYmxl
cyApIHsKKyAgICBqUXVlcnkuZWFjaCh7IGZvY3VzOiAiZm9jdXNpbiIsIGJsdXI6ICJmb2N1c291
dCIgfSwgZnVuY3Rpb24oIG9yaWcsIGZpeCApIHsKKworICAgICAgICAvLyBBdHRhY2ggYSBzaW5n
bGUgY2FwdHVyaW5nIGhhbmRsZXIgd2hpbGUgc29tZW9uZSB3YW50cyBmb2N1c2luL2ZvY3Vzb3V0
CisgICAgICAgIHZhciBhdHRhY2hlcyA9IDAsCisgICAgICAgICAgICBoYW5kbGVyID0gZnVuY3Rp
b24oIGV2ZW50ICkgeworICAgICAgICAgICAgICAgIGpRdWVyeS5ldmVudC5zaW11bGF0ZSggZml4
LCBldmVudC50YXJnZXQsIGpRdWVyeS5ldmVudC5maXgoIGV2ZW50ICksIHRydWUgKTsKKyAgICAg
ICAgICAgIH07CisKKyAgICAgICAgalF1ZXJ5LmV2ZW50LnNwZWNpYWxbIGZpeCBdID0geworICAg
ICAgICAgICAgc2V0dXA6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGlmICggYXR0YWNo
ZXMrKyA9PT0gMCApIHsKKyAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0
ZW5lciggb3JpZywgaGFuZGxlciwgdHJ1ZSApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0sCisgICAgICAgICAgICB0ZWFyZG93bjogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAg
ICAgaWYgKCAtLWF0dGFjaGVzID09PSAwICkgeworICAgICAgICAgICAgICAgICAgICBkb2N1bWVu
dC5yZW1vdmVFdmVudExpc3RlbmVyKCBvcmlnLCBoYW5kbGVyLCB0cnVlICk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0pOworfQorCitqUXVlcnku
Zm4uZXh0ZW5kKHsKKworICAgIG9uOiBmdW5jdGlvbiggdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBm
biwgLypJTlRFUk5BTCovIG9uZSApIHsKKyAgICAgICAgdmFyIG9yaWdGbiwgdHlwZTsKKworICAg
ICAgICAvLyBUeXBlcyBjYW4gYmUgYSBtYXAgb2YgdHlwZXMvaGFuZGxlcnMKKyAgICAgICAgaWYg
KCB0eXBlb2YgdHlwZXMgPT09ICJvYmplY3QiICkgeworICAgICAgICAgICAgLy8gKCB0eXBlcy1P
YmplY3QsIHNlbGVjdG9yLCBkYXRhICkKKyAgICAgICAgICAgIGlmICggdHlwZW9mIHNlbGVjdG9y
ICE9PSAic3RyaW5nIiApIHsgLy8gJiYgc2VsZWN0b3IgIT0gbnVsbAorICAgICAgICAgICAgICAg
IC8vICggdHlwZXMtT2JqZWN0LCBkYXRhICkKKyAgICAgICAgICAgICAgICBkYXRhID0gZGF0YSB8
fCBzZWxlY3RvcjsKKyAgICAgICAgICAgICAgICBzZWxlY3RvciA9IHVuZGVmaW5lZDsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGZvciAoIHR5cGUgaW4gdHlwZXMgKSB7CisgICAgICAgICAg
ICAgICAgdGhpcy5vbiggdHlwZSwgc2VsZWN0b3IsIGRhdGEsIHR5cGVzWyB0eXBlIF0sIG9uZSAp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoIGRhdGEgPT0gbnVsbCAmJiBmbiA9PSBudWxsICkgeworICAgICAgICAgICAg
Ly8gKCB0eXBlcywgZm4gKQorICAgICAgICAgICAgZm4gPSBzZWxlY3RvcjsKKyAgICAgICAgICAg
IGRhdGEgPSBzZWxlY3RvciA9IHVuZGVmaW5lZDsKKyAgICAgICAgfSBlbHNlIGlmICggZm4gPT0g
bnVsbCApIHsKKyAgICAgICAgICAgIGlmICggdHlwZW9mIHNlbGVjdG9yID09PSAic3RyaW5nIiAp
IHsKKyAgICAgICAgICAgICAgICAvLyAoIHR5cGVzLCBzZWxlY3RvciwgZm4gKQorICAgICAgICAg
ICAgICAgIGZuID0gZGF0YTsKKyAgICAgICAgICAgICAgICBkYXRhID0gdW5kZWZpbmVkOworICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyAoIHR5cGVzLCBkYXRhLCBmbiAp
CisgICAgICAgICAgICAgICAgZm4gPSBkYXRhOworICAgICAgICAgICAgICAgIGRhdGEgPSBzZWxl
Y3RvcjsKKyAgICAgICAgICAgICAgICBzZWxlY3RvciA9IHVuZGVmaW5lZDsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICBpZiAoIGZuID09PSBmYWxzZSApIHsKKyAgICAgICAgICAg
IGZuID0gcmV0dXJuRmFsc2U7CisgICAgICAgIH0gZWxzZSBpZiAoICFmbiApIHsKKyAgICAgICAg
ICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCBvbmUgPT09IDEgKSB7
CisgICAgICAgICAgICBvcmlnRm4gPSBmbjsKKyAgICAgICAgICAgIGZuID0gZnVuY3Rpb24oIGV2
ZW50ICkgeworICAgICAgICAgICAgICAgIC8vIENhbiB1c2UgYW4gZW1wdHkgc2V0LCBzaW5jZSBl
dmVudCBjb250YWlucyB0aGUgaW5mbworICAgICAgICAgICAgICAgIGpRdWVyeSgpLm9mZiggZXZl
bnQgKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ0ZuLmFwcGx5KCB0aGlzLCBhcmd1bWVu
dHMgKTsKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICAvLyBVc2Ugc2FtZSBndWlkIHNvIGNh
bGxlciBjYW4gcmVtb3ZlIHVzaW5nIG9yaWdGbgorICAgICAgICAgICAgZm4uZ3VpZCA9IG9yaWdG
bi5ndWlkIHx8ICggb3JpZ0ZuLmd1aWQgPSBqUXVlcnkuZ3VpZCsrICk7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBqUXVlcnku
ZXZlbnQuYWRkKCB0aGlzLCB0eXBlcywgZm4sIGRhdGEsIHNlbGVjdG9yICk7CisgICAgICAgIH0p
OworICAgIH0sCisgICAgb25lOiBmdW5jdGlvbiggdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiAp
IHsKKyAgICAgICAgcmV0dXJuIHRoaXMub24oIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4sIDEg
KTsKKyAgICB9LAorICAgIG9mZjogZnVuY3Rpb24oIHR5cGVzLCBzZWxlY3RvciwgZm4gKSB7Cisg
ICAgICAgIHZhciBoYW5kbGVPYmosIHR5cGU7CisgICAgICAgIGlmICggdHlwZXMgJiYgdHlwZXMu
cHJldmVudERlZmF1bHQgJiYgdHlwZXMuaGFuZGxlT2JqICkgeworICAgICAgICAgICAgLy8gKCBl
dmVudCApICBkaXNwYXRjaGVkIGpRdWVyeS5FdmVudAorICAgICAgICAgICAgaGFuZGxlT2JqID0g
dHlwZXMuaGFuZGxlT2JqOworICAgICAgICAgICAgalF1ZXJ5KCB0eXBlcy5kZWxlZ2F0ZVRhcmdl
dCApLm9mZigKKyAgICAgICAgICAgICAgICBoYW5kbGVPYmoubmFtZXNwYWNlID8gaGFuZGxlT2Jq
Lm9yaWdUeXBlICsgIi4iICsgaGFuZGxlT2JqLm5hbWVzcGFjZSA6IGhhbmRsZU9iai5vcmlnVHlw
ZSwKKyAgICAgICAgICAgICAgICBoYW5kbGVPYmouc2VsZWN0b3IsCisgICAgICAgICAgICAgICAg
aGFuZGxlT2JqLmhhbmRsZXIKKyAgICAgICAgICAgICk7CisgICAgICAgICAgICByZXR1cm4gdGhp
czsKKyAgICAgICAgfQorICAgICAgICBpZiAoIHR5cGVvZiB0eXBlcyA9PT0gIm9iamVjdCIgKSB7
CisgICAgICAgICAgICAvLyAoIHR5cGVzLW9iamVjdCBbLCBzZWxlY3Rvcl0gKQorICAgICAgICAg
ICAgZm9yICggdHlwZSBpbiB0eXBlcyApIHsKKyAgICAgICAgICAgICAgICB0aGlzLm9mZiggdHlw
ZSwgc2VsZWN0b3IsIHR5cGVzWyB0eXBlIF0gKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHJldHVybiB0aGlzOworICAgICAgICB9CisgICAgICAgIGlmICggc2VsZWN0b3IgPT09IGZhbHNl
IHx8IHR5cGVvZiBzZWxlY3RvciA9PT0gImZ1bmN0aW9uIiApIHsKKyAgICAgICAgICAgIC8vICgg
dHlwZXMgWywgZm5dICkKKyAgICAgICAgICAgIGZuID0gc2VsZWN0b3I7CisgICAgICAgICAgICBz
ZWxlY3RvciA9IHVuZGVmaW5lZDsKKyAgICAgICAgfQorICAgICAgICBpZiAoIGZuID09PSBmYWxz
ZSApIHsKKyAgICAgICAgICAgIGZuID0gcmV0dXJuRmFsc2U7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGpRdWVyeS5ldmVudC5y
ZW1vdmUoIHRoaXMsIHR5cGVzLCBmbiwgc2VsZWN0b3IgKTsKKyAgICAgICAgfSk7CisgICAgfSwK
KworICAgIGJpbmQ6IGZ1bmN0aW9uKCB0eXBlcywgZGF0YSwgZm4gKSB7CisgICAgICAgIHJldHVy
biB0aGlzLm9uKCB0eXBlcywgbnVsbCwgZGF0YSwgZm4gKTsKKyAgICB9LAorICAgIHVuYmluZDog
ZnVuY3Rpb24oIHR5cGVzLCBmbiApIHsKKyAgICAgICAgcmV0dXJuIHRoaXMub2ZmKCB0eXBlcywg
bnVsbCwgZm4gKTsKKyAgICB9LAorCisgICAgbGl2ZTogZnVuY3Rpb24oIHR5cGVzLCBkYXRhLCBm
biApIHsKKyAgICAgICAgalF1ZXJ5KCB0aGlzLmNvbnRleHQgKS5vbiggdHlwZXMsIHRoaXMuc2Vs
ZWN0b3IsIGRhdGEsIGZuICk7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH0sCisgICAgZGll
OiBmdW5jdGlvbiggdHlwZXMsIGZuICkgeworICAgICAgICBqUXVlcnkoIHRoaXMuY29udGV4dCAp
Lm9mZiggdHlwZXMsIHRoaXMuc2VsZWN0b3IgfHwgIioqIiwgZm4gKTsKKyAgICAgICAgcmV0dXJu
IHRoaXM7CisgICAgfSwKKworICAgIGRlbGVnYXRlOiBmdW5jdGlvbiggc2VsZWN0b3IsIHR5cGVz
LCBkYXRhLCBmbiApIHsKKyAgICAgICAgcmV0dXJuIHRoaXMub24oIHR5cGVzLCBzZWxlY3Rvciwg
ZGF0YSwgZm4gKTsKKyAgICB9LAorICAgIHVuZGVsZWdhdGU6IGZ1bmN0aW9uKCBzZWxlY3Rvciwg
dHlwZXMsIGZuICkgeworICAgICAgICAvLyAoIG5hbWVzcGFjZSApIG9yICggc2VsZWN0b3IsIHR5
cGVzIFssIGZuXSApCisgICAgICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID09PSAxID8gdGhp
cy5vZmYoIHNlbGVjdG9yLCAiKioiICkgOiB0aGlzLm9mZiggdHlwZXMsIHNlbGVjdG9yIHx8ICIq
KiIsIGZuICk7CisgICAgfSwKKworICAgIHRyaWdnZXI6IGZ1bmN0aW9uKCB0eXBlLCBkYXRhICkg
eworICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgalF1
ZXJ5LmV2ZW50LnRyaWdnZXIoIHR5cGUsIGRhdGEsIHRoaXMgKTsKKyAgICAgICAgfSk7CisgICAg
fSwKKyAgICB0cmlnZ2VySGFuZGxlcjogZnVuY3Rpb24oIHR5cGUsIGRhdGEgKSB7CisgICAgICAg
IGlmICggdGhpc1swXSApIHsKKyAgICAgICAgICAgIHJldHVybiBqUXVlcnkuZXZlbnQudHJpZ2dl
ciggdHlwZSwgZGF0YSwgdGhpc1swXSwgdHJ1ZSApOworICAgICAgICB9CisgICAgfSwKKworICAg
IHRvZ2dsZTogZnVuY3Rpb24oIGZuICkgeworICAgICAgICAvLyBTYXZlIHJlZmVyZW5jZSB0byBh
cmd1bWVudHMgZm9yIGFjY2VzcyBpbiBjbG9zdXJlCisgICAgICAgIHZhciBhcmdzID0gYXJndW1l
bnRzLAorICAgICAgICAgICAgZ3VpZCA9IGZuLmd1aWQgfHwgalF1ZXJ5Lmd1aWQrKywKKyAgICAg
ICAgICAgIGkgPSAwLAorICAgICAgICAgICAgdG9nZ2xlciA9IGZ1bmN0aW9uKCBldmVudCApIHsK
KyAgICAgICAgICAgICAgICAvLyBGaWd1cmUgb3V0IHdoaWNoIGZ1bmN0aW9uIHRvIGV4ZWN1dGUK
KyAgICAgICAgICAgICAgICB2YXIgbGFzdFRvZ2dsZSA9ICggalF1ZXJ5Ll9kYXRhKCB0aGlzLCAi
bGFzdFRvZ2dsZSIgKyBmbi5ndWlkICkgfHwgMCApICUgaTsKKyAgICAgICAgICAgICAgICBqUXVl
cnkuX2RhdGEoIHRoaXMsICJsYXN0VG9nZ2xlIiArIGZuLmd1aWQsIGxhc3RUb2dnbGUgKyAxICk7
CisKKyAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCBjbGlja3Mgc3RvcAorICAgICAg
ICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CisKKyAgICAgICAgICAgICAgICAvLyBh
bmQgZXhlY3V0ZSB0aGUgZnVuY3Rpb24KKyAgICAgICAgICAgICAgICByZXR1cm4gYXJnc1sgbGFz
dFRvZ2dsZSBdLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKSB8fCBmYWxzZTsKKyAgICAgICAgICAg
IH07CisKKyAgICAgICAgLy8gbGluayBhbGwgdGhlIGZ1bmN0aW9ucywgc28gYW55IG9mIHRoZW0g
Y2FuIHVuYmluZCB0aGlzIGNsaWNrIGhhbmRsZXIKKyAgICAgICAgdG9nZ2xlci5ndWlkID0gZ3Vp
ZDsKKyAgICAgICAgd2hpbGUgKCBpIDwgYXJncy5sZW5ndGggKSB7CisgICAgICAgICAgICBhcmdz
WyBpKysgXS5ndWlkID0gZ3VpZDsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0aGlzLmNs
aWNrKCB0b2dnbGVyICk7CisgICAgfSwKKworICAgIGhvdmVyOiBmdW5jdGlvbiggZm5PdmVyLCBm
bk91dCApIHsKKyAgICAgICAgcmV0dXJuIHRoaXMubW91c2VlbnRlciggZm5PdmVyICkubW91c2Vs
ZWF2ZSggZm5PdXQgfHwgZm5PdmVyICk7CisgICAgfQorfSk7CisKK2pRdWVyeS5lYWNoKCAoImJs
dXIgZm9jdXMgZm9jdXNpbiBmb2N1c291dCBsb2FkIHJlc2l6ZSBzY3JvbGwgdW5sb2FkIGNsaWNr
IGRibGNsaWNrICIgKworICAgICJtb3VzZWRvd24gbW91c2V1cCBtb3VzZW1vdmUgbW91c2VvdmVy
IG1vdXNlb3V0IG1vdXNlZW50ZXIgbW91c2VsZWF2ZSAiICsKKyAgICAiY2hhbmdlIHNlbGVjdCBz
dWJtaXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBlcnJvciBjb250ZXh0bWVudSIpLnNwbGl0KCIg
IiksIGZ1bmN0aW9uKCBpLCBuYW1lICkgeworCisgICAgLy8gSGFuZGxlIGV2ZW50IGJpbmRpbmcK
KyAgICBqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBkYXRhLCBmbiApIHsKKyAgICAgICAg
aWYgKCBmbiA9PSBudWxsICkgeworICAgICAgICAgICAgZm4gPSBkYXRhOworICAgICAgICAgICAg
ZGF0YSA9IG51bGw7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0
aCA+IDAgPworICAgICAgICAgICAgdGhpcy5vbiggbmFtZSwgbnVsbCwgZGF0YSwgZm4gKSA6Cisg
ICAgICAgICAgICB0aGlzLnRyaWdnZXIoIG5hbWUgKTsKKyAgICB9OworCisgICAgaWYgKCBya2V5
RXZlbnQudGVzdCggbmFtZSApICkgeworICAgICAgICBqUXVlcnkuZXZlbnQuZml4SG9va3NbIG5h
bWUgXSA9IGpRdWVyeS5ldmVudC5rZXlIb29rczsKKyAgICB9CisKKyAgICBpZiAoIHJtb3VzZUV2
ZW50LnRlc3QoIG5hbWUgKSApIHsKKyAgICAgICAgalF1ZXJ5LmV2ZW50LmZpeEhvb2tzWyBuYW1l
IF0gPSBqUXVlcnkuZXZlbnQubW91c2VIb29rczsKKyAgICB9Cit9KTsKKy8qIQorICogU2l6emxl
IENTUyBTZWxlY3RvciBFbmdpbmUKKyAqIENvcHlyaWdodCAyMDEyIGpRdWVyeSBGb3VuZGF0aW9u
IGFuZCBvdGhlciBjb250cmlidXRvcnMKKyAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5z
ZQorICogaHR0cDovL3NpenpsZWpzLmNvbS8KKyAqLworKGZ1bmN0aW9uKCB3aW5kb3csIHVuZGVm
aW5lZCApIHsKKwordmFyIGNhY2hlZHJ1bnMsCisgICAgYXNzZXJ0R2V0SWROb3ROYW1lLAorICAg
IEV4cHIsCisgICAgZ2V0VGV4dCwKKyAgICBpc1hNTCwKKyAgICBjb250YWlucywKKyAgICBjb21w
aWxlLAorICAgIHNvcnRPcmRlciwKKyAgICBoYXNEdXBsaWNhdGUsCisgICAgb3V0ZXJtb3N0Q29u
dGV4dCwKKworICAgIGJhc2VIYXNEdXBsaWNhdGUgPSB0cnVlLAorICAgIHN0cnVuZGVmaW5lZCA9
ICJ1bmRlZmluZWQiLAorCisgICAgZXhwYW5kbyA9ICggInNpemNhY2hlIiArIE1hdGgucmFuZG9t
KCkgKS5yZXBsYWNlKCAiLiIsICIiICksCisKKyAgICBUb2tlbiA9IFN0cmluZywKKyAgICBkb2N1
bWVudCA9IHdpbmRvdy5kb2N1bWVudCwKKyAgICBkb2NFbGVtID0gZG9jdW1lbnQuZG9jdW1lbnRF
bGVtZW50LAorICAgIGRpcnJ1bnMgPSAwLAorICAgIGRvbmUgPSAwLAorICAgIHBvcCA9IFtdLnBv
cCwKKyAgICBwdXNoID0gW10ucHVzaCwKKyAgICBzbGljZSA9IFtdLnNsaWNlLAorICAgIC8vIFVz
ZSBhIHN0cmlwcGVkLWRvd24gaW5kZXhPZiBpZiBhIG5hdGl2ZSBvbmUgaXMgdW5hdmFpbGFibGUK
KyAgICBpbmRleE9mID0gW10uaW5kZXhPZiB8fCBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAg
dmFyIGkgPSAwLAorICAgICAgICAgICAgbGVuID0gdGhpcy5sZW5ndGg7CisgICAgICAgIGZvciAo
IDsgaSA8IGxlbjsgaSsrICkgeworICAgICAgICAgICAgaWYgKCB0aGlzW2ldID09PSBlbGVtICkg
eworICAgICAgICAgICAgICAgIHJldHVybiBpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIHJldHVybiAtMTsKKyAgICB9LAorCisgICAgLy8gQXVnbWVudCBhIGZ1bmN0aW9uIGZv
ciBzcGVjaWFsIHVzZSBieSBTaXp6bGUKKyAgICBtYXJrRnVuY3Rpb24gPSBmdW5jdGlvbiggZm4s
IHZhbHVlICkgeworICAgICAgICBmblsgZXhwYW5kbyBdID0gdmFsdWUgPT0gbnVsbCB8fCB2YWx1
ZTsKKyAgICAgICAgcmV0dXJuIGZuOworICAgIH0sCisKKyAgICBjcmVhdGVDYWNoZSA9IGZ1bmN0
aW9uKCkgeworICAgICAgICB2YXIgY2FjaGUgPSB7fSwKKyAgICAgICAgICAgIGtleXMgPSBbXTsK
KworICAgICAgICByZXR1cm4gbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBrZXksIHZhbHVlICkgewor
ICAgICAgICAgICAgLy8gT25seSBrZWVwIHRoZSBtb3N0IHJlY2VudCBlbnRyaWVzCisgICAgICAg
ICAgICBpZiAoIGtleXMucHVzaCgga2V5ICkgPiBFeHByLmNhY2hlTGVuZ3RoICkgeworICAgICAg
ICAgICAgICAgIGRlbGV0ZSBjYWNoZVsga2V5cy5zaGlmdCgpIF07CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIC8vIFJldHJpZXZlIHdpdGggKGtleSArICIgIikgdG8gYXZvaWQgY29sbGlz
aW9uIHdpdGggbmF0aXZlIE9iamVjdC5wcm90b3R5cGUgcHJvcGVydGllcyAoc2VlIElzc3VlICMx
NTcpCisgICAgICAgICAgICByZXR1cm4gKGNhY2hlWyBrZXkgKyAiICIgXSA9IHZhbHVlKTsKKyAg
ICAgICAgfSwgY2FjaGUgKTsKKyAgICB9LAorCisgICAgY2xhc3NDYWNoZSA9IGNyZWF0ZUNhY2hl
KCksCisgICAgdG9rZW5DYWNoZSA9IGNyZWF0ZUNhY2hlKCksCisgICAgY29tcGlsZXJDYWNoZSA9
IGNyZWF0ZUNhY2hlKCksCisKKyAgICAvLyBSZWdleAorCisgICAgLy8gV2hpdGVzcGFjZSBjaGFy
YWN0ZXJzIGh0dHA6Ly93d3cudzMub3JnL1RSL2NzczMtc2VsZWN0b3JzLyN3aGl0ZXNwYWNlCisg
ICAgd2hpdGVzcGFjZSA9ICJbXFx4MjBcXHRcXHJcXG5cXGZdIiwKKyAgICAvLyBodHRwOi8vd3d3
LnczLm9yZy9UUi9jc3MzLXN5bnRheC8jY2hhcmFjdGVycworICAgIGNoYXJhY3RlckVuY29kaW5n
ID0gIig/OlxcXFwufFstXFx3XXxbXlxceDAwLVxceGEwXSkrIiwKKworICAgIC8vIExvb3NlbHkg
bW9kZWxlZCBvbiBDU1MgaWRlbnRpZmllciBjaGFyYWN0ZXJzCisgICAgLy8gQW4gdW5xdW90ZWQg
dmFsdWUgc2hvdWxkIGJlIGEgQ1NTIGlkZW50aWZpZXIgKGh0dHA6Ly93d3cudzMub3JnL1RSL2Nz
czMtc2VsZWN0b3JzLyNhdHRyaWJ1dGUtc2VsZWN0b3JzKQorICAgIC8vIFByb3BlciBzeW50YXg6
IGh0dHA6Ly93d3cudzMub3JnL1RSL0NTUzIxL3N5bmRhdGEuaHRtbCN2YWx1ZS1kZWYtaWRlbnRp
ZmllcgorICAgIGlkZW50aWZpZXIgPSBjaGFyYWN0ZXJFbmNvZGluZy5yZXBsYWNlKCAidyIsICJ3
IyIgKSwKKworICAgIC8vIEFjY2VwdGFibGUgb3BlcmF0b3JzIGh0dHA6Ly93d3cudzMub3JnL1RS
L3NlbGVjdG9ycy8jYXR0cmlidXRlLXNlbGVjdG9ycworICAgIG9wZXJhdG9ycyA9ICIoWypeJHwh
fl0/PSkiLAorICAgIGF0dHJpYnV0ZXMgPSAiXFxbIiArIHdoaXRlc3BhY2UgKyAiKigiICsgY2hh
cmFjdGVyRW5jb2RpbmcgKyAiKSIgKyB3aGl0ZXNwYWNlICsKKyAgICAgICAgIiooPzoiICsgb3Bl
cmF0b3JzICsgd2hpdGVzcGFjZSArICIqKD86KFsnXCJdKSgoPzpcXFxcLnxbXlxcXFxdKSo/KVxc
M3woIiArIGlkZW50aWZpZXIgKyAiKXwpfCkiICsgd2hpdGVzcGFjZSArICIqXFxdIiwKKworICAg
IC8vIFByZWZlciBhcmd1bWVudHMgbm90IGluIHBhcmVucy9icmFja2V0cywKKyAgICAvLyAgIHRo
ZW4gYXR0cmlidXRlIHNlbGVjdG9ycyBhbmQgbm9uLXBzZXVkb3MgKGRlbm90ZWQgYnkgOiksCisg
ICAgLy8gICB0aGVuIGFueXRoaW5nIGVsc2UKKyAgICAvLyBUaGVzZSBwcmVmZXJlbmNlcyBhcmUg
aGVyZSB0byByZWR1Y2UgdGhlIG51bWJlciBvZiBzZWxlY3RvcnMKKyAgICAvLyAgIG5lZWRpbmcg
dG9rZW5pemUgaW4gdGhlIFBTRVVETyBwcmVGaWx0ZXIKKyAgICBwc2V1ZG9zID0gIjooIiArIGNo
YXJhY3RlckVuY29kaW5nICsgIikoPzpcXCgoPzooWydcIl0pKCg/OlxcXFwufFteXFxcXF0pKj8p
XFwyfChbXigpW1xcXV0qfCg/Oig/OiIgKyBhdHRyaWJ1dGVzICsgIil8W146XXxcXFxcLikqfC4q
KSlcXCl8KSIsCisKKyAgICAvLyBGb3IgbWF0Y2hFeHByLlBPUyBhbmQgbWF0Y2hFeHByLm5lZWRz
Q29udGV4dAorICAgIHBvcyA9ICI6KGV2ZW58b2RkfGVxfGd0fGx0fG50aHxmaXJzdHxsYXN0KSg/
OlxcKCIgKyB3aGl0ZXNwYWNlICsKKyAgICAgICAgIiooKD86LVxcZCk/XFxkKikiICsgd2hpdGVz
cGFjZSArICIqXFwpfCkoPz1bXi1dfCQpIiwKKworICAgIC8vIExlYWRpbmcgYW5kIG5vbi1lc2Nh
cGVkIHRyYWlsaW5nIHdoaXRlc3BhY2UsIGNhcHR1cmluZyBzb21lIG5vbi13aGl0ZXNwYWNlIGNo
YXJhY3RlcnMgcHJlY2VkaW5nIHRoZSBsYXR0ZXIKKyAgICBydHJpbSA9IG5ldyBSZWdFeHAoICJe
IiArIHdoaXRlc3BhY2UgKyAiK3woKD86XnxbXlxcXFxdKSg/OlxcXFwuKSopIiArIHdoaXRlc3Bh
Y2UgKyAiKyQiLCAiZyIgKSwKKworICAgIHJjb21tYSA9IG5ldyBSZWdFeHAoICJeIiArIHdoaXRl
c3BhY2UgKyAiKiwiICsgd2hpdGVzcGFjZSArICIqIiApLAorICAgIHJjb21iaW5hdG9ycyA9IG5l
dyBSZWdFeHAoICJeIiArIHdoaXRlc3BhY2UgKyAiKihbXFx4MjBcXHRcXHJcXG5cXGY+K35dKSIg
KyB3aGl0ZXNwYWNlICsgIioiICksCisgICAgcnBzZXVkbyA9IG5ldyBSZWdFeHAoIHBzZXVkb3Mg
KSwKKworICAgIC8vIEVhc2lseS1wYXJzZWFibGUvcmV0cmlldmFibGUgSUQgb3IgVEFHIG9yIENM
QVNTIHNlbGVjdG9ycworICAgIHJxdWlja0V4cHIgPSAvXig/OiMoW1x3XC1dKyl8KFx3Kyl8XC4o
W1x3XC1dKykpJC8sCisKKyAgICBybm90ID0gL146bm90LywKKyAgICByc2libGluZyA9IC9bXHgy
MFx0XHJcblxmXSpbK35dLywKKyAgICByZW5kc1dpdGhOb3QgPSAvOm5vdFwoJC8sCisKKyAgICBy
aGVhZGVyID0gL2hcZC9pLAorICAgIHJpbnB1dHMgPSAvaW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1
dHRvbi9pLAorCisgICAgcmJhY2tzbGFzaCA9IC9cXCg/IVxcKS9nLAorCisgICAgbWF0Y2hFeHBy
ID0geworICAgICAgICAiSUQiOiBuZXcgUmVnRXhwKCAiXiMoIiArIGNoYXJhY3RlckVuY29kaW5n
ICsgIikiICksCisgICAgICAgICJDTEFTUyI6IG5ldyBSZWdFeHAoICJeXFwuKCIgKyBjaGFyYWN0
ZXJFbmNvZGluZyArICIpIiApLAorICAgICAgICAiTkFNRSI6IG5ldyBSZWdFeHAoICJeXFxbbmFt
ZT1bJ1wiXT8oIiArIGNoYXJhY3RlckVuY29kaW5nICsgIilbJ1wiXT9cXF0iICksCisgICAgICAg
ICJUQUciOiBuZXcgUmVnRXhwKCAiXigiICsgY2hhcmFjdGVyRW5jb2RpbmcucmVwbGFjZSggInci
LCAidyoiICkgKyAiKSIgKSwKKyAgICAgICAgIkFUVFIiOiBuZXcgUmVnRXhwKCAiXiIgKyBhdHRy
aWJ1dGVzICksCisgICAgICAgICJQU0VVRE8iOiBuZXcgUmVnRXhwKCAiXiIgKyBwc2V1ZG9zICks
CisgICAgICAgICJQT1MiOiBuZXcgUmVnRXhwKCBwb3MsICJpIiApLAorICAgICAgICAiQ0hJTEQi
OiBuZXcgUmVnRXhwKCAiXjoob25seXxudGh8Zmlyc3R8bGFzdCktY2hpbGQoPzpcXCgiICsgd2hp
dGVzcGFjZSArCisgICAgICAgICAgICAiKihldmVufG9kZHwoKFsrLV18KShcXGQqKW58KSIgKyB3
aGl0ZXNwYWNlICsgIiooPzooWystXXwpIiArIHdoaXRlc3BhY2UgKworICAgICAgICAgICAgIioo
XFxkKyl8KSkiICsgd2hpdGVzcGFjZSArICIqXFwpfCkiLCAiaSIgKSwKKyAgICAgICAgLy8gRm9y
IHVzZSBpbiBsaWJyYXJpZXMgaW1wbGVtZW50aW5nIC5pcygpCisgICAgICAgICJuZWVkc0NvbnRl
eHQiOiBuZXcgUmVnRXhwKCAiXiIgKyB3aGl0ZXNwYWNlICsgIipbPit+XXwiICsgcG9zLCAiaSIg
KQorICAgIH0sCisKKyAgICAvLyBTdXBwb3J0CisKKyAgICAvLyBVc2VkIGZvciB0ZXN0aW5nIHNv
bWV0aGluZyBvbiBhbiBlbGVtZW50CisgICAgYXNzZXJ0ID0gZnVuY3Rpb24oIGZuICkgeworICAg
ICAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisKKyAgICAgICAg
dHJ5IHsKKyAgICAgICAgICAgIHJldHVybiBmbiggZGl2ICk7CisgICAgICAgIH0gY2F0Y2ggKGUp
IHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAg
ICAgICAgIC8vIHJlbGVhc2UgbWVtb3J5IGluIElFCisgICAgICAgICAgICBkaXYgPSBudWxsOwor
ICAgICAgICB9CisgICAgfSwKKworICAgIC8vIENoZWNrIGlmIGdldEVsZW1lbnRzQnlUYWdOYW1l
KCIqIikgcmV0dXJucyBvbmx5IGVsZW1lbnRzCisgICAgYXNzZXJ0VGFnTmFtZU5vQ29tbWVudHMg
PSBhc3NlcnQoZnVuY3Rpb24oIGRpdiApIHsKKyAgICAgICAgZGl2LmFwcGVuZENoaWxkKCBkb2N1
bWVudC5jcmVhdGVDb21tZW50KCIiKSApOworICAgICAgICByZXR1cm4gIWRpdi5nZXRFbGVtZW50
c0J5VGFnTmFtZSgiKiIpLmxlbmd0aDsKKyAgICB9KSwKKworICAgIC8vIENoZWNrIGlmIGdldEF0
dHJpYnV0ZSByZXR1cm5zIG5vcm1hbGl6ZWQgaHJlZiBhdHRyaWJ1dGVzCisgICAgYXNzZXJ0SHJl
Zk5vdE5vcm1hbGl6ZWQgPSBhc3NlcnQoZnVuY3Rpb24oIGRpdiApIHsKKyAgICAgICAgZGl2Lmlu
bmVySFRNTCA9ICI8YSBocmVmPScjJz48L2E+IjsKKyAgICAgICAgcmV0dXJuIGRpdi5maXJzdENo
aWxkICYmIHR5cGVvZiBkaXYuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUgIT09IHN0cnVuZGVmaW5l
ZCAmJgorICAgICAgICAgICAgZGl2LmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCJocmVmIikgPT09
ICIjIjsKKyAgICB9KSwKKworICAgIC8vIENoZWNrIGlmIGF0dHJpYnV0ZXMgc2hvdWxkIGJlIHJl
dHJpZXZlZCBieSBhdHRyaWJ1dGUgbm9kZXMKKyAgICBhc3NlcnRBdHRyaWJ1dGVzID0gYXNzZXJ0
KGZ1bmN0aW9uKCBkaXYgKSB7CisgICAgICAgIGRpdi5pbm5lckhUTUwgPSAiPHNlbGVjdD48L3Nl
bGVjdD4iOworICAgICAgICB2YXIgdHlwZSA9IHR5cGVvZiBkaXYubGFzdENoaWxkLmdldEF0dHJp
YnV0ZSgibXVsdGlwbGUiKTsKKyAgICAgICAgLy8gSUU4IHJldHVybnMgYSBzdHJpbmcgZm9yIHNv
bWUgYXR0cmlidXRlcyBldmVuIHdoZW4gbm90IHByZXNlbnQKKyAgICAgICAgcmV0dXJuIHR5cGUg
IT09ICJib29sZWFuIiAmJiB0eXBlICE9PSAic3RyaW5nIjsKKyAgICB9KSwKKworICAgIC8vIENo
ZWNrIGlmIGdldEVsZW1lbnRzQnlDbGFzc05hbWUgY2FuIGJlIHRydXN0ZWQKKyAgICBhc3NlcnRV
c2FibGVDbGFzc05hbWUgPSBhc3NlcnQoZnVuY3Rpb24oIGRpdiApIHsKKyAgICAgICAgLy8gT3Bl
cmEgY2FuJ3QgZmluZCBhIHNlY29uZCBjbGFzc25hbWUgKGluIDkuNikKKyAgICAgICAgZGl2Lmlu
bmVySFRNTCA9ICI8ZGl2IGNsYXNzPSdoaWRkZW4gZSc+PC9kaXY+PGRpdiBjbGFzcz0naGlkZGVu
Jz48L2Rpdj4iOworICAgICAgICBpZiAoICFkaXYuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSB8fCAh
ZGl2LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImUiKS5sZW5ndGggKSB7CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICAvLyBTYWZhcmkgMy4yIGNhY2hlcyBj
bGFzcyBhdHRyaWJ1dGVzIGFuZCBkb2Vzbid0IGNhdGNoIGNoYW5nZXMKKyAgICAgICAgZGl2Lmxh
c3RDaGlsZC5jbGFzc05hbWUgPSAiZSI7CisgICAgICAgIHJldHVybiBkaXYuZ2V0RWxlbWVudHNC
eUNsYXNzTmFtZSgiZSIpLmxlbmd0aCA9PT0gMjsKKyAgICB9KSwKKworICAgIC8vIENoZWNrIGlm
IGdldEVsZW1lbnRCeUlkIHJldHVybnMgZWxlbWVudHMgYnkgbmFtZQorICAgIC8vIENoZWNrIGlm
IGdldEVsZW1lbnRzQnlOYW1lIHByaXZpbGVnZXMgZm9ybSBjb250cm9scyBvciByZXR1cm5zIGVs
ZW1lbnRzIGJ5IElECisgICAgYXNzZXJ0VXNhYmxlTmFtZSA9IGFzc2VydChmdW5jdGlvbiggZGl2
ICkgeworICAgICAgICAvLyBJbmplY3QgY29udGVudAorICAgICAgICBkaXYuaWQgPSBleHBhbmRv
ICsgMDsKKyAgICAgICAgZGl2LmlubmVySFRNTCA9ICI8YSBuYW1lPSciICsgZXhwYW5kbyArICIn
PjwvYT48ZGl2IG5hbWU9JyIgKyBleHBhbmRvICsgIic+PC9kaXY+IjsKKyAgICAgICAgZG9jRWxl
bS5pbnNlcnRCZWZvcmUoIGRpdiwgZG9jRWxlbS5maXJzdENoaWxkICk7CisKKyAgICAgICAgLy8g
VGVzdAorICAgICAgICB2YXIgcGFzcyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lICYmCisg
ICAgICAgICAgICAvLyBidWdneSBicm93c2VycyB3aWxsIHJldHVybiBmZXdlciB0aGFuIHRoZSBj
b3JyZWN0IDIKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKCBleHBhbmRv
ICkubGVuZ3RoID09PSAyICsKKyAgICAgICAgICAgIC8vIGJ1Z2d5IGJyb3dzZXJzIHdpbGwgcmV0
dXJuIG1vcmUgdGhhbiB0aGUgY29ycmVjdCAwCisgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVt
ZW50c0J5TmFtZSggZXhwYW5kbyArIDAgKS5sZW5ndGg7CisgICAgICAgIGFzc2VydEdldElkTm90
TmFtZSA9ICFkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggZXhwYW5kbyApOworCisgICAgICAgIC8v
IENsZWFudXAKKyAgICAgICAgZG9jRWxlbS5yZW1vdmVDaGlsZCggZGl2ICk7CisKKyAgICAgICAg
cmV0dXJuIHBhc3M7CisgICAgfSk7CisKKy8vIElmIHNsaWNlIGlzIG5vdCBhdmFpbGFibGUsIHBy
b3ZpZGUgYSBiYWNrdXAKK3RyeSB7CisgICAgc2xpY2UuY2FsbCggZG9jRWxlbS5jaGlsZE5vZGVz
LCAwIClbMF0ubm9kZVR5cGU7Cit9IGNhdGNoICggZSApIHsKKyAgICBzbGljZSA9IGZ1bmN0aW9u
KCBpICkgeworICAgICAgICB2YXIgZWxlbSwKKyAgICAgICAgICAgIHJlc3VsdHMgPSBbXTsKKyAg
ICAgICAgZm9yICggOyAoZWxlbSA9IHRoaXNbaV0pOyBpKysgKSB7CisgICAgICAgICAgICByZXN1
bHRzLnB1c2goIGVsZW0gKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0czsKKyAg
ICB9OworfQorCitmdW5jdGlvbiBTaXp6bGUoIHNlbGVjdG9yLCBjb250ZXh0LCByZXN1bHRzLCBz
ZWVkICkgeworICAgIHJlc3VsdHMgPSByZXN1bHRzIHx8IFtdOworICAgIGNvbnRleHQgPSBjb250
ZXh0IHx8IGRvY3VtZW50OworICAgIHZhciBtYXRjaCwgZWxlbSwgeG1sLCBtLAorICAgICAgICBu
b2RlVHlwZSA9IGNvbnRleHQubm9kZVR5cGU7CisKKyAgICBpZiAoICFzZWxlY3RvciB8fCB0eXBl
b2Ygc2VsZWN0b3IgIT09ICJzdHJpbmciICkgeworICAgICAgICByZXR1cm4gcmVzdWx0czsKKyAg
ICB9CisKKyAgICBpZiAoIG5vZGVUeXBlICE9PSAxICYmIG5vZGVUeXBlICE9PSA5ICkgeworICAg
ICAgICByZXR1cm4gW107CisgICAgfQorCisgICAgeG1sID0gaXNYTUwoIGNvbnRleHQgKTsKKwor
ICAgIGlmICggIXhtbCAmJiAhc2VlZCApIHsKKyAgICAgICAgaWYgKCAobWF0Y2ggPSBycXVpY2tF
eHByLmV4ZWMoIHNlbGVjdG9yICkpICkgeworICAgICAgICAgICAgLy8gU3BlZWQtdXA6IFNpenps
ZSgiI0lEIikKKyAgICAgICAgICAgIGlmICggKG0gPSBtYXRjaFsxXSkgKSB7CisgICAgICAgICAg
ICAgICAgaWYgKCBub2RlVHlwZSA9PT0gOSApIHsKKyAgICAgICAgICAgICAgICAgICAgZWxlbSA9
IGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQoIG0gKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gQ2hl
Y2sgcGFyZW50Tm9kZSB0byBjYXRjaCB3aGVuIEJsYWNrYmVycnkgNC42IHJldHVybnMKKyAgICAg
ICAgICAgICAgICAgICAgLy8gbm9kZXMgdGhhdCBhcmUgbm8gbG9uZ2VyIGluIHRoZSBkb2N1bWVu
dCAjNjk2MworICAgICAgICAgICAgICAgICAgICBpZiAoIGVsZW0gJiYgZWxlbS5wYXJlbnROb2Rl
ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gSGFuZGxlIHRoZSBjYXNlIHdoZXJlIElF
LCBPcGVyYSwgYW5kIFdlYmtpdCByZXR1cm4gaXRlbXMKKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGJ5IG5hbWUgaW5zdGVhZCBvZiBJRAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBl
bGVtLmlkID09PSBtICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVz
aCggZWxlbSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRzOwor
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAvLyBD
b250ZXh0IGlzIG5vdCBhIGRvY3VtZW50CisgICAgICAgICAgICAgICAgICAgIGlmICggY29udGV4
dC5vd25lckRvY3VtZW50ICYmIChlbGVtID0gY29udGV4dC5vd25lckRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCBtICkpICYmCisgICAgICAgICAgICAgICAgICAgICAgICBjb250YWlucyggY29udGV4
dCwgZWxlbSApICYmIGVsZW0uaWQgPT09IG0gKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXN1bHRzLnB1c2goIGVsZW0gKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1
bHRzOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAvLyBTcGVlZC11cDogU2l6emxlKCJUQUciKQorICAgICAgICAgICAgfSBlbHNlIGlmICgg
bWF0Y2hbMl0gKSB7CisgICAgICAgICAgICAgICAgcHVzaC5hcHBseSggcmVzdWx0cywgc2xpY2Uu
Y2FsbChjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCBzZWxlY3RvciApLCAwKSApOworICAg
ICAgICAgICAgICAgIHJldHVybiByZXN1bHRzOworCisgICAgICAgICAgICAvLyBTcGVlZC11cDog
U2l6emxlKCIuQ0xBU1MiKQorICAgICAgICAgICAgfSBlbHNlIGlmICggKG0gPSBtYXRjaFszXSkg
JiYgYXNzZXJ0VXNhYmxlQ2xhc3NOYW1lICYmIGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFt
ZSApIHsKKyAgICAgICAgICAgICAgICBwdXNoLmFwcGx5KCByZXN1bHRzLCBzbGljZS5jYWxsKGNv
bnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSggbSApLCAwKSApOworICAgICAgICAgICAgICAg
IHJldHVybiByZXN1bHRzOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAg
Ly8gQWxsIG90aGVycworICAgIHJldHVybiBzZWxlY3QoIHNlbGVjdG9yLnJlcGxhY2UoIHJ0cmlt
LCAiJDEiICksIGNvbnRleHQsIHJlc3VsdHMsIHNlZWQsIHhtbCApOworfQorCitTaXp6bGUubWF0
Y2hlcyA9IGZ1bmN0aW9uKCBleHByLCBlbGVtZW50cyApIHsKKyAgICByZXR1cm4gU2l6emxlKCBl
eHByLCBudWxsLCBudWxsLCBlbGVtZW50cyApOworfTsKKworU2l6emxlLm1hdGNoZXNTZWxlY3Rv
ciA9IGZ1bmN0aW9uKCBlbGVtLCBleHByICkgeworICAgIHJldHVybiBTaXp6bGUoIGV4cHIsIG51
bGwsIG51bGwsIFsgZWxlbSBdICkubGVuZ3RoID4gMDsKK307CisKKy8vIFJldHVybnMgYSBmdW5j
dGlvbiB0byB1c2UgaW4gcHNldWRvcyBmb3IgaW5wdXQgdHlwZXMKK2Z1bmN0aW9uIGNyZWF0ZUlu
cHV0UHNldWRvKCB0eXBlICkgeworICAgIHJldHVybiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAg
ICAgdmFyIG5hbWUgPSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7CisgICAgICAgIHJldHVy
biBuYW1lID09PSAiaW5wdXQiICYmIGVsZW0udHlwZSA9PT0gdHlwZTsKKyAgICB9OworfQorCisv
LyBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gdXNlIGluIHBzZXVkb3MgZm9yIGJ1dHRvbnMKK2Z1bmN0
aW9uIGNyZWF0ZUJ1dHRvblBzZXVkbyggdHlwZSApIHsKKyAgICByZXR1cm4gZnVuY3Rpb24oIGVs
ZW0gKSB7CisgICAgICAgIHZhciBuYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpOwor
ICAgICAgICByZXR1cm4gKG5hbWUgPT09ICJpbnB1dCIgfHwgbmFtZSA9PT0gImJ1dHRvbiIpICYm
IGVsZW0udHlwZSA9PT0gdHlwZTsKKyAgICB9OworfQorCisvLyBSZXR1cm5zIGEgZnVuY3Rpb24g
dG8gdXNlIGluIHBzZXVkb3MgZm9yIHBvc2l0aW9uYWxzCitmdW5jdGlvbiBjcmVhdGVQb3NpdGlv
bmFsUHNldWRvKCBmbiApIHsKKyAgICByZXR1cm4gbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBhcmd1
bWVudCApIHsKKyAgICAgICAgYXJndW1lbnQgPSArYXJndW1lbnQ7CisgICAgICAgIHJldHVybiBt
YXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNlZWQsIG1hdGNoZXMgKSB7CisgICAgICAgICAgICB2YXIg
aiwKKyAgICAgICAgICAgICAgICBtYXRjaEluZGV4ZXMgPSBmbiggW10sIHNlZWQubGVuZ3RoLCBh
cmd1bWVudCApLAorICAgICAgICAgICAgICAgIGkgPSBtYXRjaEluZGV4ZXMubGVuZ3RoOworCisg
ICAgICAgICAgICAvLyBNYXRjaCBlbGVtZW50cyBmb3VuZCBhdCB0aGUgc3BlY2lmaWVkIGluZGV4
ZXMKKyAgICAgICAgICAgIHdoaWxlICggaS0tICkgeworICAgICAgICAgICAgICAgIGlmICggc2Vl
ZFsgKGogPSBtYXRjaEluZGV4ZXNbaV0pIF0gKSB7CisgICAgICAgICAgICAgICAgICAgIHNlZWRb
al0gPSAhKG1hdGNoZXNbal0gPSBzZWVkW2pdKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgIH0pOworICAgIH0pOworfQorCisvKioKKyAqIFV0aWxpdHkgZnVuY3Rp
b24gZm9yIHJldHJpZXZpbmcgdGhlIHRleHQgdmFsdWUgb2YgYW4gYXJyYXkgb2YgRE9NIG5vZGVz
CisgKiBAcGFyYW0ge0FycmF5fEVsZW1lbnR9IGVsZW0KKyAqLworZ2V0VGV4dCA9IFNpenpsZS5n
ZXRUZXh0ID0gZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgdmFyIG5vZGUsCisgICAgICAgIHJldCA9
ICIiLAorICAgICAgICBpID0gMCwKKyAgICAgICAgbm9kZVR5cGUgPSBlbGVtLm5vZGVUeXBlOwor
CisgICAgaWYgKCBub2RlVHlwZSApIHsKKyAgICAgICAgaWYgKCBub2RlVHlwZSA9PT0gMSB8fCBu
b2RlVHlwZSA9PT0gOSB8fCBub2RlVHlwZSA9PT0gMTEgKSB7CisgICAgICAgICAgICAvLyBVc2Ug
dGV4dENvbnRlbnQgZm9yIGVsZW1lbnRzCisgICAgICAgICAgICAvLyBpbm5lclRleHQgdXNhZ2Ug
cmVtb3ZlZCBmb3IgY29uc2lzdGVuY3kgb2YgbmV3IGxpbmVzIChzZWUgIzExMTUzKQorICAgICAg
ICAgICAgaWYgKCB0eXBlb2YgZWxlbS50ZXh0Q29udGVudCA9PT0gInN0cmluZyIgKSB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGVsZW0udGV4dENvbnRlbnQ7CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIC8vIFRyYXZlcnNlIGl0cyBjaGlsZHJlbgorICAgICAgICAgICAg
ICAgIGZvciAoIGVsZW0gPSBlbGVtLmZpcnN0Q2hpbGQ7IGVsZW07IGVsZW0gPSBlbGVtLm5leHRT
aWJsaW5nICkgeworICAgICAgICAgICAgICAgICAgICByZXQgKz0gZ2V0VGV4dCggZWxlbSApOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmICggbm9k
ZVR5cGUgPT09IDMgfHwgbm9kZVR5cGUgPT09IDQgKSB7CisgICAgICAgICAgICByZXR1cm4gZWxl
bS5ub2RlVmFsdWU7CisgICAgICAgIH0KKyAgICAgICAgLy8gRG8gbm90IGluY2x1ZGUgY29tbWVu
dCBvciBwcm9jZXNzaW5nIGluc3RydWN0aW9uIG5vZGVzCisgICAgfSBlbHNlIHsKKworICAgICAg
ICAvLyBJZiBubyBub2RlVHlwZSwgdGhpcyBpcyBleHBlY3RlZCB0byBiZSBhbiBhcnJheQorICAg
ICAgICBmb3IgKCA7IChub2RlID0gZWxlbVtpXSk7IGkrKyApIHsKKyAgICAgICAgICAgIC8vIERv
IG5vdCB0cmF2ZXJzZSBjb21tZW50IG5vZGVzCisgICAgICAgICAgICByZXQgKz0gZ2V0VGV4dCgg
bm9kZSApOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiByZXQ7Cit9OworCitpc1hNTCA9
IFNpenpsZS5pc1hNTCA9IGZ1bmN0aW9uKCBlbGVtICkgeworICAgIC8vIGRvY3VtZW50RWxlbWVu
dCBpcyB2ZXJpZmllZCBmb3IgY2FzZXMgd2hlcmUgaXQgZG9lc24ndCB5ZXQgZXhpc3QKKyAgICAv
LyAoc3VjaCBhcyBsb2FkaW5nIGlmcmFtZXMgaW4gSUUgLSAjNDgzMykKKyAgICB2YXIgZG9jdW1l
bnRFbGVtZW50ID0gZWxlbSAmJiAoZWxlbS5vd25lckRvY3VtZW50IHx8IGVsZW0pLmRvY3VtZW50
RWxlbWVudDsKKyAgICByZXR1cm4gZG9jdW1lbnRFbGVtZW50ID8gZG9jdW1lbnRFbGVtZW50Lm5v
ZGVOYW1lICE9PSAiSFRNTCIgOiBmYWxzZTsKK307CisKKy8vIEVsZW1lbnQgY29udGFpbnMgYW5v
dGhlcgorY29udGFpbnMgPSBTaXp6bGUuY29udGFpbnMgPSBkb2NFbGVtLmNvbnRhaW5zID8KKyAg
ICBmdW5jdGlvbiggYSwgYiApIHsKKyAgICAgICAgdmFyIGFkb3duID0gYS5ub2RlVHlwZSA9PT0g
OSA/IGEuZG9jdW1lbnRFbGVtZW50IDogYSwKKyAgICAgICAgICAgIGJ1cCA9IGIgJiYgYi5wYXJl
bnROb2RlOworICAgICAgICByZXR1cm4gYSA9PT0gYnVwIHx8ICEhKCBidXAgJiYgYnVwLm5vZGVU
eXBlID09PSAxICYmIGFkb3duLmNvbnRhaW5zICYmIGFkb3duLmNvbnRhaW5zKGJ1cCkgKTsKKyAg
ICB9IDoKKyAgICBkb2NFbGVtLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uID8KKyAgICBmdW5jdGlv
biggYSwgYiApIHsKKyAgICAgICAgcmV0dXJuIGIgJiYgISEoIGEuY29tcGFyZURvY3VtZW50UG9z
aXRpb24oIGIgKSAmIDE2ICk7CisgICAgfSA6CisgICAgZnVuY3Rpb24oIGEsIGIgKSB7CisgICAg
ICAgIHdoaWxlICggKGIgPSBiLnBhcmVudE5vZGUpICkgeworICAgICAgICAgICAgaWYgKCBiID09
PSBhICkgeworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9OworCitTaXp6bGUuYXR0ciA9IGZ1
bmN0aW9uKCBlbGVtLCBuYW1lICkgeworICAgIHZhciB2YWwsCisgICAgICAgIHhtbCA9IGlzWE1M
KCBlbGVtICk7CisKKyAgICBpZiAoICF4bWwgKSB7CisgICAgICAgIG5hbWUgPSBuYW1lLnRvTG93
ZXJDYXNlKCk7CisgICAgfQorICAgIGlmICggKHZhbCA9IEV4cHIuYXR0ckhhbmRsZVsgbmFtZSBd
KSApIHsKKyAgICAgICAgcmV0dXJuIHZhbCggZWxlbSApOworICAgIH0KKyAgICBpZiAoIHhtbCB8
fCBhc3NlcnRBdHRyaWJ1dGVzICkgeworICAgICAgICByZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUo
IG5hbWUgKTsKKyAgICB9CisgICAgdmFsID0gZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCBuYW1lICk7
CisgICAgcmV0dXJuIHZhbCA/CisgICAgICAgIHR5cGVvZiBlbGVtWyBuYW1lIF0gPT09ICJib29s
ZWFuIiA/CisgICAgICAgICAgICBlbGVtWyBuYW1lIF0gPyBuYW1lIDogbnVsbCA6CisgICAgICAg
ICAgICB2YWwuc3BlY2lmaWVkID8gdmFsLnZhbHVlIDogbnVsbCA6CisgICAgICAgIG51bGw7Cit9
OworCitFeHByID0gU2l6emxlLnNlbGVjdG9ycyA9IHsKKworICAgIC8vIENhbiBiZSBhZGp1c3Rl
ZCBieSB0aGUgdXNlcgorICAgIGNhY2hlTGVuZ3RoOiA1MCwKKworICAgIGNyZWF0ZVBzZXVkbzog
bWFya0Z1bmN0aW9uLAorCisgICAgbWF0Y2g6IG1hdGNoRXhwciwKKworICAgIC8vIElFNi83IHJl
dHVybiBhIG1vZGlmaWVkIGhyZWYKKyAgICBhdHRySGFuZGxlOiBhc3NlcnRIcmVmTm90Tm9ybWFs
aXplZCA/CisgICAgICAgIHt9IDoKKyAgICAgICAgeworICAgICAgICAgICAgImhyZWYiOiBmdW5j
dGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUo
ICJocmVmIiwgMiApOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICJ0eXBlIjogZnVuY3Rp
b24oIGVsZW0gKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKCJ0
eXBlIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisKKyAgICBmaW5kOiB7CisgICAgICAg
ICJJRCI6IGFzc2VydEdldElkTm90TmFtZSA/CisgICAgICAgICAgICBmdW5jdGlvbiggaWQsIGNv
bnRleHQsIHhtbCApIHsKKyAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVs
ZW1lbnRCeUlkICE9PSBzdHJ1bmRlZmluZWQgJiYgIXhtbCApIHsKKyAgICAgICAgICAgICAgICAg
ICAgdmFyIG0gPSBjb250ZXh0LmdldEVsZW1lbnRCeUlkKCBpZCApOworICAgICAgICAgICAgICAg
ICAgICAvLyBDaGVjayBwYXJlbnROb2RlIHRvIGNhdGNoIHdoZW4gQmxhY2tiZXJyeSA0LjYgcmV0
dXJucworICAgICAgICAgICAgICAgICAgICAvLyBub2RlcyB0aGF0IGFyZSBubyBsb25nZXIgaW4g
dGhlIGRvY3VtZW50ICM2OTYzCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBtICYmIG0ucGFy
ZW50Tm9kZSA/IFttXSA6IFtdOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gOgor
ICAgICAgICAgICAgZnVuY3Rpb24oIGlkLCBjb250ZXh0LCB4bWwgKSB7CisgICAgICAgICAgICAg
ICAgaWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50QnlJZCAhPT0gc3RydW5kZWZpbmVkICYm
ICF4bWwgKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBtID0gY29udGV4dC5nZXRFbGVtZW50
QnlJZCggaWQgKTsKKworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbSA/CisgICAgICAgICAg
ICAgICAgICAgICAgICBtLmlkID09PSBpZCB8fCB0eXBlb2YgbS5nZXRBdHRyaWJ1dGVOb2RlICE9
PSBzdHJ1bmRlZmluZWQgJiYgbS5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpLnZhbHVlID09PSBpZCA/
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21dIDoKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1bmRlZmluZWQgOgorICAgICAgICAgICAgICAgICAgICAgICAgW107CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfSwKKworICAgICAgICAiVEFHIjogYXNzZXJ0VGFnTmFt
ZU5vQ29tbWVudHMgPworICAgICAgICAgICAgZnVuY3Rpb24oIHRhZywgY29udGV4dCApIHsKKyAg
ICAgICAgICAgICAgICBpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lICE9
PSBzdHJ1bmRlZmluZWQgKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0Lmdl
dEVsZW1lbnRzQnlUYWdOYW1lKCB0YWcgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9IDoKKyAgICAgICAgICAgIGZ1bmN0aW9uKCB0YWcsIGNvbnRleHQgKSB7CisgICAgICAgICAg
ICAgICAgdmFyIHJlc3VsdHMgPSBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCB0YWcgKTsK
KworICAgICAgICAgICAgICAgIC8vIEZpbHRlciBvdXQgcG9zc2libGUgY29tbWVudHMKKyAgICAg
ICAgICAgICAgICBpZiAoIHRhZyA9PT0gIioiICkgeworICAgICAgICAgICAgICAgICAgICB2YXIg
ZWxlbSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9IFtdLAorICAgICAgICAgICAgICAg
ICAgICAgICAgaSA9IDA7CisKKyAgICAgICAgICAgICAgICAgICAgZm9yICggOyAoZWxlbSA9IHJl
c3VsdHNbaV0pOyBpKysgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGVsZW0ubm9k
ZVR5cGUgPT09IDEgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wLnB1c2goIGVs
ZW0gKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0bXA7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIHJldHVybiByZXN1bHRzOworICAgICAgICAgICAgfSwKKworICAgICAgICAi
TkFNRSI6IGFzc2VydFVzYWJsZU5hbWUgJiYgZnVuY3Rpb24oIHRhZywgY29udGV4dCApIHsKKyAg
ICAgICAgICAgIGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeU5hbWUgIT09IHN0cnVu
ZGVmaW5lZCApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5nZXRFbGVtZW50c0J5
TmFtZSggbmFtZSApOworICAgICAgICAgICAgfQorICAgICAgICB9LAorCisgICAgICAgICJDTEFT
UyI6IGFzc2VydFVzYWJsZUNsYXNzTmFtZSAmJiBmdW5jdGlvbiggY2xhc3NOYW1lLCBjb250ZXh0
LCB4bWwgKSB7CisgICAgICAgICAgICBpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlD
bGFzc05hbWUgIT09IHN0cnVuZGVmaW5lZCAmJiAheG1sICkgeworICAgICAgICAgICAgICAgIHJl
dHVybiBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIGNsYXNzTmFtZSApOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfSwKKworICAgIHJlbGF0aXZlOiB7CisgICAgICAgICI+
IjogeyBkaXI6ICJwYXJlbnROb2RlIiwgZmlyc3Q6IHRydWUgfSwKKyAgICAgICAgIiAiOiB7IGRp
cjogInBhcmVudE5vZGUiIH0sCisgICAgICAgICIrIjogeyBkaXI6ICJwcmV2aW91c1NpYmxpbmci
LCBmaXJzdDogdHJ1ZSB9LAorICAgICAgICAifiI6IHsgZGlyOiAicHJldmlvdXNTaWJsaW5nIiB9
CisgICAgfSwKKworICAgIHByZUZpbHRlcjogeworICAgICAgICAiQVRUUiI6IGZ1bmN0aW9uKCBt
YXRjaCApIHsKKyAgICAgICAgICAgIG1hdGNoWzFdID0gbWF0Y2hbMV0ucmVwbGFjZSggcmJhY2tz
bGFzaCwgIiIgKTsKKworICAgICAgICAgICAgLy8gTW92ZSB0aGUgZ2l2ZW4gdmFsdWUgdG8gbWF0
Y2hbM10gd2hldGhlciBxdW90ZWQgb3IgdW5xdW90ZWQKKyAgICAgICAgICAgIG1hdGNoWzNdID0g
KCBtYXRjaFs0XSB8fCBtYXRjaFs1XSB8fCAiIiApLnJlcGxhY2UoIHJiYWNrc2xhc2gsICIiICk7
CisKKyAgICAgICAgICAgIGlmICggbWF0Y2hbMl0gPT09ICJ+PSIgKSB7CisgICAgICAgICAgICAg
ICAgbWF0Y2hbM10gPSAiICIgKyBtYXRjaFszXSArICIgIjsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgcmV0dXJuIG1hdGNoLnNsaWNlKCAwLCA0ICk7CisgICAgICAgIH0sCisKKyAgICAg
ICAgIkNISUxEIjogZnVuY3Rpb24oIG1hdGNoICkgeworICAgICAgICAgICAgLyogbWF0Y2hlcyBm
cm9tIG1hdGNoRXhwclsiQ0hJTEQiXQorICAgICAgICAgICAgICAgIDEgdHlwZSAob25seXxudGh8
Li4uKQorICAgICAgICAgICAgICAgIDIgYXJndW1lbnQgKGV2ZW58b2RkfFxkKnxcZCpuKFsrLV1c
ZCspP3wuLi4pCisgICAgICAgICAgICAgICAgMyB4bi1jb21wb25lbnQgb2YgeG4reSBhcmd1bWVu
dCAoWystXT9cZCpufCkKKyAgICAgICAgICAgICAgICA0IHNpZ24gb2YgeG4tY29tcG9uZW50Cisg
ICAgICAgICAgICAgICAgNSB4IG9mIHhuLWNvbXBvbmVudAorICAgICAgICAgICAgICAgIDYgc2ln
biBvZiB5LWNvbXBvbmVudAorICAgICAgICAgICAgICAgIDcgeSBvZiB5LWNvbXBvbmVudAorICAg
ICAgICAgICAgKi8KKyAgICAgICAgICAgIG1hdGNoWzFdID0gbWF0Y2hbMV0udG9Mb3dlckNhc2Uo
KTsKKworICAgICAgICAgICAgaWYgKCBtYXRjaFsxXSA9PT0gIm50aCIgKSB7CisgICAgICAgICAg
ICAgICAgLy8gbnRoLWNoaWxkIHJlcXVpcmVzIGFyZ3VtZW50CisgICAgICAgICAgICAgICAgaWYg
KCAhbWF0Y2hbMl0gKSB7CisgICAgICAgICAgICAgICAgICAgIFNpenpsZS5lcnJvciggbWF0Y2hb
MF0gKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBudW1lcmljIHgg
YW5kIHkgcGFyYW1ldGVycyBmb3IgRXhwci5maWx0ZXIuQ0hJTEQKKyAgICAgICAgICAgICAgICAv
LyByZW1lbWJlciB0aGF0IGZhbHNlL3RydWUgY2FzdCByZXNwZWN0aXZlbHkgdG8gMC8xCisgICAg
ICAgICAgICAgICAgbWF0Y2hbM10gPSArKCBtYXRjaFszXSA/IG1hdGNoWzRdICsgKG1hdGNoWzVd
IHx8IDEpIDogMiAqICggbWF0Y2hbMl0gPT09ICJldmVuIiB8fCBtYXRjaFsyXSA9PT0gIm9kZCIg
KSApOworICAgICAgICAgICAgICAgIG1hdGNoWzRdID0gKyggKCBtYXRjaFs2XSArIG1hdGNoWzdd
ICkgfHwgbWF0Y2hbMl0gPT09ICJvZGQiICk7CisKKyAgICAgICAgICAgIC8vIG90aGVyIHR5cGVz
IHByb2hpYml0IGFyZ3VtZW50cworICAgICAgICAgICAgfSBlbHNlIGlmICggbWF0Y2hbMl0gKSB7
CisgICAgICAgICAgICAgICAgU2l6emxlLmVycm9yKCBtYXRjaFswXSApOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICByZXR1cm4gbWF0Y2g7CisgICAgICAgIH0sCisKKyAgICAgICAgIlBT
RVVETyI6IGZ1bmN0aW9uKCBtYXRjaCApIHsKKyAgICAgICAgICAgIHZhciB1bnF1b3RlZCwgZXhj
ZXNzOworICAgICAgICAgICAgaWYgKCBtYXRjaEV4cHJbIkNISUxEIl0udGVzdCggbWF0Y2hbMF0g
KSApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaWYgKCBtYXRjaFszXSApIHsKKyAgICAgICAgICAgICAgICBtYXRjaFsyXSA9IG1h
dGNoWzNdOworICAgICAgICAgICAgfSBlbHNlIGlmICggKHVucXVvdGVkID0gbWF0Y2hbNF0pICkg
eworICAgICAgICAgICAgICAgIC8vIE9ubHkgY2hlY2sgYXJndW1lbnRzIHRoYXQgY29udGFpbiBh
IHBzZXVkbworICAgICAgICAgICAgICAgIGlmICggcnBzZXVkby50ZXN0KHVucXVvdGVkKSAmJgor
ICAgICAgICAgICAgICAgICAgICAvLyBHZXQgZXhjZXNzIGZyb20gdG9rZW5pemUgKHJlY3Vyc2l2
ZWx5KQorICAgICAgICAgICAgICAgICAgICAoZXhjZXNzID0gdG9rZW5pemUoIHVucXVvdGVkLCB0
cnVlICkpICYmCisgICAgICAgICAgICAgICAgICAgIC8vIGFkdmFuY2UgdG8gdGhlIG5leHQgY2xv
c2luZyBwYXJlbnRoZXNpcworICAgICAgICAgICAgICAgICAgICAoZXhjZXNzID0gdW5xdW90ZWQu
aW5kZXhPZiggIikiLCB1bnF1b3RlZC5sZW5ndGggLSBleGNlc3MgKSAtIHVucXVvdGVkLmxlbmd0
aCkgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gZXhjZXNzIGlzIGEgbmVnYXRpdmUgaW5k
ZXgKKyAgICAgICAgICAgICAgICAgICAgdW5xdW90ZWQgPSB1bnF1b3RlZC5zbGljZSggMCwgZXhj
ZXNzICk7CisgICAgICAgICAgICAgICAgICAgIG1hdGNoWzBdID0gbWF0Y2hbMF0uc2xpY2UoIDAs
IGV4Y2VzcyApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtYXRjaFsyXSA9
IHVucXVvdGVkOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBSZXR1cm4gb25seSBj
YXB0dXJlcyBuZWVkZWQgYnkgdGhlIHBzZXVkbyBmaWx0ZXIgbWV0aG9kICh0eXBlIGFuZCBhcmd1
bWVudCkKKyAgICAgICAgICAgIHJldHVybiBtYXRjaC5zbGljZSggMCwgMyApOworICAgICAgICB9
CisgICAgfSwKKworICAgIGZpbHRlcjogeworICAgICAgICAiSUQiOiBhc3NlcnRHZXRJZE5vdE5h
bWUgPworICAgICAgICAgICAgZnVuY3Rpb24oIGlkICkgeworICAgICAgICAgICAgICAgIGlkID0g
aWQucmVwbGFjZSggcmJhY2tzbGFzaCwgIiIgKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZnVu
Y3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLmdldEF0dHJp
YnV0ZSgiaWQiKSA9PT0gaWQ7CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIH0gOgor
ICAgICAgICAgICAgZnVuY3Rpb24oIGlkICkgeworICAgICAgICAgICAgICAgIGlkID0gaWQucmVw
bGFjZSggcmJhY2tzbGFzaCwgIiIgKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24o
IGVsZW0gKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBub2RlID0gdHlwZW9mIGVsZW0uZ2V0
QXR0cmlidXRlTm9kZSAhPT0gc3RydW5kZWZpbmVkICYmIGVsZW0uZ2V0QXR0cmlidXRlTm9kZSgi
aWQiKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUgJiYgbm9kZS52YWx1ZSA9PT0g
aWQ7CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIH0sCisKKyAgICAgICAgIlRBRyI6
IGZ1bmN0aW9uKCBub2RlTmFtZSApIHsKKyAgICAgICAgICAgIGlmICggbm9kZU5hbWUgPT09ICIq
IiApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7IHJldHVybiB0cnVlOyB9
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgbm9kZU5hbWUgPSBub2RlTmFtZS5yZXBsYWNl
KCByYmFja3NsYXNoLCAiIiApLnRvTG93ZXJDYXNlKCk7CisKKyAgICAgICAgICAgIHJldHVybiBm
dW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZWxlbS5ub2RlTmFtZSAm
JiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5vZGVOYW1lOworICAgICAgICAgICAg
fTsKKyAgICAgICAgfSwKKworICAgICAgICAiQ0xBU1MiOiBmdW5jdGlvbiggY2xhc3NOYW1lICkg
eworICAgICAgICAgICAgdmFyIHBhdHRlcm4gPSBjbGFzc0NhY2hlWyBleHBhbmRvIF1bIGNsYXNz
TmFtZSArICIgIiBdOworCisgICAgICAgICAgICByZXR1cm4gcGF0dGVybiB8fAorICAgICAgICAg
ICAgICAgIChwYXR0ZXJuID0gbmV3IFJlZ0V4cCggIihefCIgKyB3aGl0ZXNwYWNlICsgIikiICsg
Y2xhc3NOYW1lICsgIigiICsgd2hpdGVzcGFjZSArICJ8JCkiICkpICYmCisgICAgICAgICAgICAg
ICAgY2xhc3NDYWNoZSggY2xhc3NOYW1lLCBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHBhdHRlcm4udGVzdCggZWxlbS5jbGFzc05hbWUgfHwgKHR5cGVvZiBl
bGVtLmdldEF0dHJpYnV0ZSAhPT0gc3RydW5kZWZpbmVkICYmIGVsZW0uZ2V0QXR0cmlidXRlKCJj
bGFzcyIpKSB8fCAiIiApOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9LAorCisgICAg
ICAgICJBVFRSIjogZnVuY3Rpb24oIG5hbWUsIG9wZXJhdG9yLCBjaGVjayApIHsKKyAgICAgICAg
ICAgIHJldHVybiBmdW5jdGlvbiggZWxlbSwgY29udGV4dCApIHsKKyAgICAgICAgICAgICAgICB2
YXIgcmVzdWx0ID0gU2l6emxlLmF0dHIoIGVsZW0sIG5hbWUgKTsKKworICAgICAgICAgICAgICAg
IGlmICggcmVzdWx0ID09IG51bGwgKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBvcGVy
YXRvciA9PT0gIiE9IjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCAh
b3BlcmF0b3IgKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgIHJlc3VsdCArPSAiIjsKKworICAgICAgICAgICAg
ICAgIHJldHVybiBvcGVyYXRvciA9PT0gIj0iID8gcmVzdWx0ID09PSBjaGVjayA6CisgICAgICAg
ICAgICAgICAgICAgIG9wZXJhdG9yID09PSAiIT0iID8gcmVzdWx0ICE9PSBjaGVjayA6CisgICAg
ICAgICAgICAgICAgICAgIG9wZXJhdG9yID09PSAiXj0iID8gY2hlY2sgJiYgcmVzdWx0LmluZGV4
T2YoIGNoZWNrICkgPT09IDAgOgorICAgICAgICAgICAgICAgICAgICBvcGVyYXRvciA9PT0gIio9
IiA/IGNoZWNrICYmIHJlc3VsdC5pbmRleE9mKCBjaGVjayApID4gLTEgOgorICAgICAgICAgICAg
ICAgICAgICBvcGVyYXRvciA9PT0gIiQ9IiA/IGNoZWNrICYmIHJlc3VsdC5zdWJzdHIoIHJlc3Vs
dC5sZW5ndGggLSBjaGVjay5sZW5ndGggKSA9PT0gY2hlY2sgOgorICAgICAgICAgICAgICAgICAg
ICBvcGVyYXRvciA9PT0gIn49IiA/ICggIiAiICsgcmVzdWx0ICsgIiAiICkuaW5kZXhPZiggY2hl
Y2sgKSA+IC0xIDoKKyAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3IgPT09ICJ8PSIgPyByZXN1
bHQgPT09IGNoZWNrIHx8IHJlc3VsdC5zdWJzdHIoIDAsIGNoZWNrLmxlbmd0aCArIDEgKSA9PT0g
Y2hlY2sgKyAiLSIgOgorICAgICAgICAgICAgICAgICAgICBmYWxzZTsKKyAgICAgICAgICAgIH07
CisgICAgICAgIH0sCisKKyAgICAgICAgIkNISUxEIjogZnVuY3Rpb24oIHR5cGUsIGFyZ3VtZW50
LCBmaXJzdCwgbGFzdCApIHsKKworICAgICAgICAgICAgaWYgKCB0eXBlID09PSAibnRoIiApIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAgICAg
ICAgICAgIHZhciBub2RlLCBkaWZmLAorICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50ID0g
ZWxlbS5wYXJlbnROb2RlOworCisgICAgICAgICAgICAgICAgICAgIGlmICggZmlyc3QgPT09IDEg
JiYgbGFzdCA9PT0gMCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBwYXJlbnQg
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkaWZmID0gMDsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGZvciAoIG5vZGUgPSBwYXJlbnQuZmlyc3RDaGlsZDsgbm9kZTsgbm9kZSA9IG5vZGUu
bmV4dFNpYmxpbmcgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBub2RlLm5v
ZGVUeXBlID09PSAxICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWZmKys7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZWxlbSA9PT0gbm9kZSApIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICAgICAgLy8gSW5jb3Jwb3JhdGUgdGhlIG9mZnNldCAob3IgY2FzdCB0byBOYU4pLCB0
aGVuIGNoZWNrIGFnYWluc3QgY3ljbGUgc2l6ZQorICAgICAgICAgICAgICAgICAgICBkaWZmIC09
IGxhc3Q7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBkaWZmID09PSBmaXJzdCB8fCAoIGRp
ZmYgJSBmaXJzdCA9PT0gMCAmJiBkaWZmIC8gZmlyc3QgPj0gMCApOworICAgICAgICAgICAgICAg
IH07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiggZWxlbSAp
IHsKKyAgICAgICAgICAgICAgICB2YXIgbm9kZSA9IGVsZW07CisKKyAgICAgICAgICAgICAgICBz
d2l0Y2ggKCB0eXBlICkgeworICAgICAgICAgICAgICAgICAgICBjYXNlICJvbmx5IjoKKyAgICAg
ICAgICAgICAgICAgICAgY2FzZSAiZmlyc3QiOgorICAgICAgICAgICAgICAgICAgICAgICAgd2hp
bGUgKCAobm9kZSA9IG5vZGUucHJldmlvdXNTaWJsaW5nKSApIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIG5vZGUubm9kZVR5cGUgPT09IDEgKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmICggdHlwZSA9PT0gImZpcnN0IiApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
ICAgICAgICAgbm9kZSA9IGVsZW07CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZhbGxz
IHRocm91Z2ggKi8KKyAgICAgICAgICAgICAgICAgICAgY2FzZSAibGFzdCI6CisgICAgICAgICAg
ICAgICAgICAgICAgICB3aGlsZSAoIChub2RlID0gbm9kZS5uZXh0U2libGluZykgKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBub2RlLm5vZGVUeXBlID09PSAxICkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9OworICAgICAgICB9LAorCisgICAgICAgICJQU0VVRE8iOiBmdW5jdGlvbiggcHNldWRvLCBh
cmd1bWVudCApIHsKKyAgICAgICAgICAgIC8vIHBzZXVkby1jbGFzcyBuYW1lcyBhcmUgY2FzZS1p
bnNlbnNpdGl2ZQorICAgICAgICAgICAgLy8gaHR0cDovL3d3dy53My5vcmcvVFIvc2VsZWN0b3Jz
LyNwc2V1ZG8tY2xhc3NlcworICAgICAgICAgICAgLy8gUHJpb3JpdGl6ZSBieSBjYXNlIHNlbnNp
dGl2aXR5IGluIGNhc2UgY3VzdG9tIHBzZXVkb3MgYXJlIGFkZGVkIHdpdGggdXBwZXJjYXNlIGxl
dHRlcnMKKyAgICAgICAgICAgIC8vIFJlbWVtYmVyIHRoYXQgc2V0RmlsdGVycyBpbmhlcml0cyBm
cm9tIHBzZXVkb3MKKyAgICAgICAgICAgIHZhciBhcmdzLAorICAgICAgICAgICAgICAgIGZuID0g
RXhwci5wc2V1ZG9zWyBwc2V1ZG8gXSB8fCBFeHByLnNldEZpbHRlcnNbIHBzZXVkby50b0xvd2Vy
Q2FzZSgpIF0gfHwKKyAgICAgICAgICAgICAgICAgICAgU2l6emxlLmVycm9yKCAidW5zdXBwb3J0
ZWQgcHNldWRvOiAiICsgcHNldWRvICk7CisKKyAgICAgICAgICAgIC8vIFRoZSB1c2VyIG1heSB1
c2UgY3JlYXRlUHNldWRvIHRvIGluZGljYXRlIHRoYXQKKyAgICAgICAgICAgIC8vIGFyZ3VtZW50
cyBhcmUgbmVlZGVkIHRvIGNyZWF0ZSB0aGUgZmlsdGVyIGZ1bmN0aW9uCisgICAgICAgICAgICAv
LyBqdXN0IGFzIFNpenpsZSBkb2VzCisgICAgICAgICAgICBpZiAoIGZuWyBleHBhbmRvIF0gKSB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZuKCBhcmd1bWVudCApOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAvLyBCdXQgbWFpbnRhaW4gc3VwcG9ydCBmb3Igb2xkIHNpZ25hdHVyZXMK
KyAgICAgICAgICAgIGlmICggZm4ubGVuZ3RoID4gMSApIHsKKyAgICAgICAgICAgICAgICBhcmdz
ID0gWyBwc2V1ZG8sIHBzZXVkbywgIiIsIGFyZ3VtZW50IF07CisgICAgICAgICAgICAgICAgcmV0
dXJuIEV4cHIuc2V0RmlsdGVycy5oYXNPd25Qcm9wZXJ0eSggcHNldWRvLnRvTG93ZXJDYXNlKCkg
KSA/CisgICAgICAgICAgICAgICAgICAgIG1hcmtGdW5jdGlvbihmdW5jdGlvbiggc2VlZCwgbWF0
Y2hlcyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpZHgsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbWF0Y2hlZCA9IGZuKCBzZWVkLCBhcmd1bWVudCApLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGkgPSBtYXRjaGVkLmxlbmd0aDsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHdoaWxlICggaS0tICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkeCA9
IGluZGV4T2YuY2FsbCggc2VlZCwgbWF0Y2hlZFtpXSApOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNlZWRbIGlkeCBdID0gISggbWF0Y2hlc1sgaWR4IF0gPSBtYXRjaGVkW2ldICk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0pIDoKKyAgICAg
ICAgICAgICAgICAgICAgZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZm4oIGVsZW0sIDAsIGFyZ3MgKTsKKyAgICAgICAgICAgICAgICAgICAgfTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIGZuOworICAgICAgICB9CisgICAgfSwK
KworICAgIHBzZXVkb3M6IHsKKyAgICAgICAgIm5vdCI6IG1hcmtGdW5jdGlvbihmdW5jdGlvbigg
c2VsZWN0b3IgKSB7CisgICAgICAgICAgICAvLyBUcmltIHRoZSBzZWxlY3RvciBwYXNzZWQgdG8g
Y29tcGlsZQorICAgICAgICAgICAgLy8gdG8gYXZvaWQgdHJlYXRpbmcgbGVhZGluZyBhbmQgdHJh
aWxpbmcKKyAgICAgICAgICAgIC8vIHNwYWNlcyBhcyBjb21iaW5hdG9ycworICAgICAgICAgICAg
dmFyIGlucHV0ID0gW10sCisgICAgICAgICAgICAgICAgcmVzdWx0cyA9IFtdLAorICAgICAgICAg
ICAgICAgIG1hdGNoZXIgPSBjb21waWxlKCBzZWxlY3Rvci5yZXBsYWNlKCBydHJpbSwgIiQxIiAp
ICk7CisKKyAgICAgICAgICAgIHJldHVybiBtYXRjaGVyWyBleHBhbmRvIF0gPworICAgICAgICAg
ICAgICAgIG1hcmtGdW5jdGlvbihmdW5jdGlvbiggc2VlZCwgbWF0Y2hlcywgY29udGV4dCwgeG1s
ICkgeworICAgICAgICAgICAgICAgICAgICB2YXIgZWxlbSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHVubWF0Y2hlZCA9IG1hdGNoZXIoIHNlZWQsIG51bGwsIHhtbCwgW10gKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGkgPSBzZWVkLmxlbmd0aDsKKworICAgICAgICAgICAgICAgICAgICAv
LyBNYXRjaCBlbGVtZW50cyB1bm1hdGNoZWQgYnkgYG1hdGNoZXJgCisgICAgICAgICAgICAgICAg
ICAgIHdoaWxlICggaS0tICkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAoZWxlbSA9
IHVubWF0Y2hlZFtpXSkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VlZFtpXSA9
ICEobWF0Y2hlc1tpXSA9IGVsZW0pOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSkgOgorICAgICAgICAgICAgICAgIGZ1
bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7CisgICAgICAgICAgICAgICAgICAgIGlucHV0
WzBdID0gZWxlbTsKKyAgICAgICAgICAgICAgICAgICAgbWF0Y2hlciggaW5wdXQsIG51bGwsIHht
bCwgcmVzdWx0cyApOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gIXJlc3VsdHMucG9wKCk7
CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgfSksCisKKyAgICAgICAgImhhcyI6IG1hcmtG
dW5jdGlvbihmdW5jdGlvbiggc2VsZWN0b3IgKSB7CisgICAgICAgICAgICByZXR1cm4gZnVuY3Rp
b24oIGVsZW0gKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIFNpenpsZSggc2VsZWN0b3IsIGVs
ZW0gKS5sZW5ndGggPiAwOworICAgICAgICAgICAgfTsKKyAgICAgICAgfSksCisKKyAgICAgICAg
ImNvbnRhaW5zIjogbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCB0ZXh0ICkgeworICAgICAgICAgICAg
cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAgICAgIHJldHVybiAoIGVsZW0u
dGV4dENvbnRlbnQgfHwgZWxlbS5pbm5lclRleHQgfHwgZ2V0VGV4dCggZWxlbSApICkuaW5kZXhP
ZiggdGV4dCApID4gLTE7CisgICAgICAgICAgICB9OworICAgICAgICB9KSwKKworICAgICAgICAi
ZW5hYmxlZCI6IGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAgcmV0dXJuIGVsZW0uZGlz
YWJsZWQgPT09IGZhbHNlOworICAgICAgICB9LAorCisgICAgICAgICJkaXNhYmxlZCI6IGZ1bmN0
aW9uKCBlbGVtICkgeworICAgICAgICAgICAgcmV0dXJuIGVsZW0uZGlzYWJsZWQgPT09IHRydWU7
CisgICAgICAgIH0sCisKKyAgICAgICAgImNoZWNrZWQiOiBmdW5jdGlvbiggZWxlbSApIHsKKyAg
ICAgICAgICAgIC8vIEluIENTUzMsIDpjaGVja2VkIHNob3VsZCByZXR1cm4gYm90aCBjaGVja2Vk
IGFuZCBzZWxlY3RlZCBlbGVtZW50cworICAgICAgICAgICAgLy8gaHR0cDovL3d3dy53My5vcmcv
VFIvMjAxMS9SRUMtY3NzMy1zZWxlY3RvcnMtMjAxMTA5MjkvI2NoZWNrZWQKKyAgICAgICAgICAg
IHZhciBub2RlTmFtZSA9IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTsKKyAgICAgICAgICAg
IHJldHVybiAobm9kZU5hbWUgPT09ICJpbnB1dCIgJiYgISFlbGVtLmNoZWNrZWQpIHx8IChub2Rl
TmFtZSA9PT0gIm9wdGlvbiIgJiYgISFlbGVtLnNlbGVjdGVkKTsKKyAgICAgICAgfSwKKworICAg
ICAgICAic2VsZWN0ZWQiOiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgIC8vIEFjY2Vz
c2luZyB0aGlzIHByb3BlcnR5IG1ha2VzIHNlbGVjdGVkLWJ5LWRlZmF1bHQKKyAgICAgICAgICAg
IC8vIG9wdGlvbnMgaW4gU2FmYXJpIHdvcmsgcHJvcGVybHkKKyAgICAgICAgICAgIGlmICggZWxl
bS5wYXJlbnROb2RlICkgeworICAgICAgICAgICAgICAgIGVsZW0ucGFyZW50Tm9kZS5zZWxlY3Rl
ZEluZGV4OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gZWxlbS5zZWxlY3Rl
ZCA9PT0gdHJ1ZTsKKyAgICAgICAgfSwKKworICAgICAgICAicGFyZW50IjogZnVuY3Rpb24oIGVs
ZW0gKSB7CisgICAgICAgICAgICByZXR1cm4gIUV4cHIucHNldWRvc1siZW1wdHkiXSggZWxlbSAp
OworICAgICAgICB9LAorCisgICAgICAgICJlbXB0eSI6IGZ1bmN0aW9uKCBlbGVtICkgeworICAg
ICAgICAgICAgLy8gaHR0cDovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzLyNlbXB0eS1wc2V1ZG8K
KyAgICAgICAgICAgIC8vIDplbXB0eSBpcyBvbmx5IGFmZmVjdGVkIGJ5IGVsZW1lbnQgbm9kZXMg
YW5kIGNvbnRlbnQgbm9kZXMoaW5jbHVkaW5nIHRleHQoMyksIGNkYXRhKDQpKSwKKyAgICAgICAg
ICAgIC8vICAgbm90IGNvbW1lbnQsIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb25zLCBvciBvdGhlcnMK
KyAgICAgICAgICAgIC8vIFRoYW5rcyB0byBEaWVnbyBQZXJpbmkgZm9yIHRoZSBub2RlTmFtZSBz
aG9ydGN1dAorICAgICAgICAgICAgLy8gICBHcmVhdGVyIHRoYW4gIkAiIG1lYW5zIGFscGhhIGNo
YXJhY3RlcnMgKHNwZWNpZmljYWxseSBub3Qgc3RhcnRpbmcgd2l0aCAiIyIgb3IgIj8iKQorICAg
ICAgICAgICAgdmFyIG5vZGVUeXBlOworICAgICAgICAgICAgZWxlbSA9IGVsZW0uZmlyc3RDaGls
ZDsKKyAgICAgICAgICAgIHdoaWxlICggZWxlbSApIHsKKyAgICAgICAgICAgICAgICBpZiAoIGVs
ZW0ubm9kZU5hbWUgPiAiQCIgfHwgKG5vZGVUeXBlID0gZWxlbS5ub2RlVHlwZSkgPT09IDMgfHwg
bm9kZVR5cGUgPT09IDQgKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxlbSA9IGVsZW0ubmV4dFNpYmxpbmc7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSwKKwor
ICAgICAgICAiaGVhZGVyIjogZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAgICByZXR1cm4g
cmhlYWRlci50ZXN0KCBlbGVtLm5vZGVOYW1lICk7CisgICAgICAgIH0sCisKKyAgICAgICAgInRl
eHQiOiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgIHZhciB0eXBlLCBhdHRyOworICAg
ICAgICAgICAgLy8gSUU2IGFuZCA3IHdpbGwgbWFwIGVsZW0udHlwZSB0byAndGV4dCcgZm9yIG5l
dyBIVE1MNSB0eXBlcyAoc2VhcmNoLCBldGMpCisgICAgICAgICAgICAvLyB1c2UgZ2V0QXR0cmli
dXRlIGluc3RlYWQgdG8gdGVzdCB0aGlzIGNhc2UKKyAgICAgICAgICAgIHJldHVybiBlbGVtLm5v
ZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICJpbnB1dCIgJiYKKyAgICAgICAgICAgICAgICAodHlw
ZSA9IGVsZW0udHlwZSkgPT09ICJ0ZXh0IiAmJgorICAgICAgICAgICAgICAgICggKGF0dHIgPSBl
bGVtLmdldEF0dHJpYnV0ZSgidHlwZSIpKSA9PSBudWxsIHx8IGF0dHIudG9Mb3dlckNhc2UoKSA9
PT0gdHlwZSApOworICAgICAgICB9LAorCisgICAgICAgIC8vIElucHV0IHR5cGVzCisgICAgICAg
ICJyYWRpbyI6IGNyZWF0ZUlucHV0UHNldWRvKCJyYWRpbyIpLAorICAgICAgICAiY2hlY2tib3gi
OiBjcmVhdGVJbnB1dFBzZXVkbygiY2hlY2tib3giKSwKKyAgICAgICAgImZpbGUiOiBjcmVhdGVJ
bnB1dFBzZXVkbygiZmlsZSIpLAorICAgICAgICAicGFzc3dvcmQiOiBjcmVhdGVJbnB1dFBzZXVk
bygicGFzc3dvcmQiKSwKKyAgICAgICAgImltYWdlIjogY3JlYXRlSW5wdXRQc2V1ZG8oImltYWdl
IiksCisKKyAgICAgICAgInN1Ym1pdCI6IGNyZWF0ZUJ1dHRvblBzZXVkbygic3VibWl0IiksCisg
ICAgICAgICJyZXNldCI6IGNyZWF0ZUJ1dHRvblBzZXVkbygicmVzZXQiKSwKKworICAgICAgICAi
YnV0dG9uIjogZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAgICB2YXIgbmFtZSA9IGVsZW0u
bm9kZU5hbWUudG9Mb3dlckNhc2UoKTsKKyAgICAgICAgICAgIHJldHVybiBuYW1lID09PSAiaW5w
dXQiICYmIGVsZW0udHlwZSA9PT0gImJ1dHRvbiIgfHwgbmFtZSA9PT0gImJ1dHRvbiI7CisgICAg
ICAgIH0sCisKKyAgICAgICAgImlucHV0IjogZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAg
ICByZXR1cm4gcmlucHV0cy50ZXN0KCBlbGVtLm5vZGVOYW1lICk7CisgICAgICAgIH0sCisKKyAg
ICAgICAgImZvY3VzIjogZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAgICB2YXIgZG9jID0g
ZWxlbS5vd25lckRvY3VtZW50OworICAgICAgICAgICAgcmV0dXJuIGVsZW0gPT09IGRvYy5hY3Rp
dmVFbGVtZW50ICYmICghZG9jLmhhc0ZvY3VzIHx8IGRvYy5oYXNGb2N1cygpKSAmJiAhIShlbGVt
LnR5cGUgfHwgZWxlbS5ocmVmIHx8IH5lbGVtLnRhYkluZGV4KTsKKyAgICAgICAgfSwKKworICAg
ICAgICAiYWN0aXZlIjogZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAgICByZXR1cm4gZWxl
bSA9PT0gZWxlbS5vd25lckRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7CisgICAgICAgIH0sCisKKyAg
ICAgICAgLy8gUG9zaXRpb25hbCB0eXBlcworICAgICAgICAiZmlyc3QiOiBjcmVhdGVQb3NpdGlv
bmFsUHNldWRvKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgcmV0dXJuIFsgMCBdOworICAgICAg
ICB9KSwKKworICAgICAgICAibGFzdCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24o
IG1hdGNoSW5kZXhlcywgbGVuZ3RoICkgeworICAgICAgICAgICAgcmV0dXJuIFsgbGVuZ3RoIC0g
MSBdOworICAgICAgICB9KSwKKworICAgICAgICAiZXEiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRv
KGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCwgYXJndW1lbnQgKSB7CisgICAgICAgICAg
ICByZXR1cm4gWyBhcmd1bWVudCA8IDAgPyBhcmd1bWVudCArIGxlbmd0aCA6IGFyZ3VtZW50IF07
CisgICAgICAgIH0pLAorCisgICAgICAgICJldmVuIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhm
dW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGggKSB7CisgICAgICAgICAgICBmb3IgKCB2YXIg
aSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gMiApIHsKKyAgICAgICAgICAgICAgICBtYXRjaEluZGV4
ZXMucHVzaCggaSApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIG1hdGNoSW5k
ZXhlczsKKyAgICAgICAgfSksCisKKyAgICAgICAgIm9kZCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1
ZG8oZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoICkgeworICAgICAgICAgICAgZm9yICgg
dmFyIGkgPSAxOyBpIDwgbGVuZ3RoOyBpICs9IDIgKSB7CisgICAgICAgICAgICAgICAgbWF0Y2hJ
bmRleGVzLnB1c2goIGkgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBtYXRj
aEluZGV4ZXM7CisgICAgICAgIH0pLAorCisgICAgICAgICJsdCI6IGNyZWF0ZVBvc2l0aW9uYWxQ
c2V1ZG8oZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoLCBhcmd1bWVudCApIHsKKyAgICAg
ICAgICAgIGZvciAoIHZhciBpID0gYXJndW1lbnQgPCAwID8gYXJndW1lbnQgKyBsZW5ndGggOiBh
cmd1bWVudDsgLS1pID49IDA7ICkgeworICAgICAgICAgICAgICAgIG1hdGNoSW5kZXhlcy5wdXNo
KCBpICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbWF0Y2hJbmRleGVzOwor
ICAgICAgICB9KSwKKworICAgICAgICAiZ3QiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0
aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCwgYXJndW1lbnQgKSB7CisgICAgICAgICAgICBmb3Ig
KCB2YXIgaSA9IGFyZ3VtZW50IDwgMCA/IGFyZ3VtZW50ICsgbGVuZ3RoIDogYXJndW1lbnQ7ICsr
aSA8IGxlbmd0aDsgKSB7CisgICAgICAgICAgICAgICAgbWF0Y2hJbmRleGVzLnB1c2goIGkgKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBtYXRjaEluZGV4ZXM7CisgICAgICAg
IH0pCisgICAgfQorfTsKKworZnVuY3Rpb24gc2libGluZ0NoZWNrKCBhLCBiLCByZXQgKSB7Cisg
ICAgaWYgKCBhID09PSBiICkgeworICAgICAgICByZXR1cm4gcmV0OworICAgIH0KKworICAgIHZh
ciBjdXIgPSBhLm5leHRTaWJsaW5nOworCisgICAgd2hpbGUgKCBjdXIgKSB7CisgICAgICAgIGlm
ICggY3VyID09PSBiICkgeworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisKKyAg
ICAgICAgY3VyID0gY3VyLm5leHRTaWJsaW5nOworICAgIH0KKworICAgIHJldHVybiAxOworfQor
Citzb3J0T3JkZXIgPSBkb2NFbGVtLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uID8KKyAgICBmdW5j
dGlvbiggYSwgYiApIHsKKyAgICAgICAgaWYgKCBhID09PSBiICkgeworICAgICAgICAgICAgaGFz
RHVwbGljYXRlID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisKKyAg
ICAgICAgcmV0dXJuICggIWEuY29tcGFyZURvY3VtZW50UG9zaXRpb24gfHwgIWIuY29tcGFyZURv
Y3VtZW50UG9zaXRpb24gPworICAgICAgICAgICAgYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiA6
CisgICAgICAgICAgICBhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGIpICYgNAorICAgICAgICAp
ID8gLTEgOiAxOworICAgIH0gOgorICAgIGZ1bmN0aW9uKCBhLCBiICkgeworICAgICAgICAvLyBU
aGUgbm9kZXMgYXJlIGlkZW50aWNhbCwgd2UgY2FuIGV4aXQgZWFybHkKKyAgICAgICAgaWYgKCBh
ID09PSBiICkgeworICAgICAgICAgICAgaGFzRHVwbGljYXRlID0gdHJ1ZTsKKyAgICAgICAgICAg
IHJldHVybiAwOworCisgICAgICAgIC8vIEZhbGxiYWNrIHRvIHVzaW5nIHNvdXJjZUluZGV4IChp
biBJRSkgaWYgaXQncyBhdmFpbGFibGUgb24gYm90aCBub2RlcworICAgICAgICB9IGVsc2UgaWYg
KCBhLnNvdXJjZUluZGV4ICYmIGIuc291cmNlSW5kZXggKSB7CisgICAgICAgICAgICByZXR1cm4g
YS5zb3VyY2VJbmRleCAtIGIuc291cmNlSW5kZXg7CisgICAgICAgIH0KKworICAgICAgICB2YXIg
YWwsIGJsLAorICAgICAgICAgICAgYXAgPSBbXSwKKyAgICAgICAgICAgIGJwID0gW10sCisgICAg
ICAgICAgICBhdXAgPSBhLnBhcmVudE5vZGUsCisgICAgICAgICAgICBidXAgPSBiLnBhcmVudE5v
ZGUsCisgICAgICAgICAgICBjdXIgPSBhdXA7CisKKyAgICAgICAgLy8gSWYgdGhlIG5vZGVzIGFy
ZSBzaWJsaW5ncyAob3IgaWRlbnRpY2FsKSB3ZSBjYW4gZG8gYSBxdWljayBjaGVjaworICAgICAg
ICBpZiAoIGF1cCA9PT0gYnVwICkgeworICAgICAgICAgICAgcmV0dXJuIHNpYmxpbmdDaGVjaygg
YSwgYiApOworCisgICAgICAgIC8vIElmIG5vIHBhcmVudHMgd2VyZSBmb3VuZCB0aGVuIHRoZSBu
b2RlcyBhcmUgZGlzY29ubmVjdGVkCisgICAgICAgIH0gZWxzZSBpZiAoICFhdXAgKSB7CisgICAg
ICAgICAgICByZXR1cm4gLTE7CisKKyAgICAgICAgfSBlbHNlIGlmICggIWJ1cCApIHsKKyAgICAg
ICAgICAgIHJldHVybiAxOworICAgICAgICB9CisKKyAgICAgICAgLy8gT3RoZXJ3aXNlIHRoZXkn
cmUgc29tZXdoZXJlIGVsc2UgaW4gdGhlIHRyZWUgc28gd2UgbmVlZAorICAgICAgICAvLyB0byBi
dWlsZCB1cCBhIGZ1bGwgbGlzdCBvZiB0aGUgcGFyZW50Tm9kZXMgZm9yIGNvbXBhcmlzb24KKyAg
ICAgICAgd2hpbGUgKCBjdXIgKSB7CisgICAgICAgICAgICBhcC51bnNoaWZ0KCBjdXIgKTsKKyAg
ICAgICAgICAgIGN1ciA9IGN1ci5wYXJlbnROb2RlOworICAgICAgICB9CisKKyAgICAgICAgY3Vy
ID0gYnVwOworCisgICAgICAgIHdoaWxlICggY3VyICkgeworICAgICAgICAgICAgYnAudW5zaGlm
dCggY3VyICk7CisgICAgICAgICAgICBjdXIgPSBjdXIucGFyZW50Tm9kZTsKKyAgICAgICAgfQor
CisgICAgICAgIGFsID0gYXAubGVuZ3RoOworICAgICAgICBibCA9IGJwLmxlbmd0aDsKKworICAg
ICAgICAvLyBTdGFydCB3YWxraW5nIGRvd24gdGhlIHRyZWUgbG9va2luZyBmb3IgYSBkaXNjcmVw
YW5jeQorICAgICAgICBmb3IgKCB2YXIgaSA9IDA7IGkgPCBhbCAmJiBpIDwgYmw7IGkrKyApIHsK
KyAgICAgICAgICAgIGlmICggYXBbaV0gIT09IGJwW2ldICkgeworICAgICAgICAgICAgICAgIHJl
dHVybiBzaWJsaW5nQ2hlY2soIGFwW2ldLCBicFtpXSApOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgLy8gV2UgZW5kZWQgc29tZXBsYWNlIHVwIHRoZSB0cmVlIHNvIGRvIGEg
c2libGluZyBjaGVjaworICAgICAgICByZXR1cm4gaSA9PT0gYWwgPworICAgICAgICAgICAgc2li
bGluZ0NoZWNrKCBhLCBicFtpXSwgLTEgKSA6CisgICAgICAgICAgICBzaWJsaW5nQ2hlY2soIGFw
W2ldLCBiLCAxICk7CisgICAgfTsKKworLy8gQWx3YXlzIGFzc3VtZSB0aGUgcHJlc2VuY2Ugb2Yg
ZHVwbGljYXRlcyBpZiBzb3J0IGRvZXNuJ3QKKy8vIHBhc3MgdGhlbSB0byBvdXIgY29tcGFyaXNv
biBmdW5jdGlvbiAoYXMgaW4gR29vZ2xlIENocm9tZSkuCitbMCwgMF0uc29ydCggc29ydE9yZGVy
ICk7CitiYXNlSGFzRHVwbGljYXRlID0gIWhhc0R1cGxpY2F0ZTsKKworLy8gRG9jdW1lbnQgc29y
dGluZyBhbmQgcmVtb3ZpbmcgZHVwbGljYXRlcworU2l6emxlLnVuaXF1ZVNvcnQgPSBmdW5jdGlv
biggcmVzdWx0cyApIHsKKyAgICB2YXIgZWxlbSwKKyAgICAgICAgZHVwbGljYXRlcyA9IFtdLAor
ICAgICAgICBpID0gMSwKKyAgICAgICAgaiA9IDA7CisKKyAgICBoYXNEdXBsaWNhdGUgPSBiYXNl
SGFzRHVwbGljYXRlOworICAgIHJlc3VsdHMuc29ydCggc29ydE9yZGVyICk7CisKKyAgICBpZiAo
IGhhc0R1cGxpY2F0ZSApIHsKKyAgICAgICAgZm9yICggOyAoZWxlbSA9IHJlc3VsdHNbaV0pOyBp
KysgKSB7CisgICAgICAgICAgICBpZiAoIGVsZW0gPT09IHJlc3VsdHNbIGkgLSAxIF0gKSB7Cisg
ICAgICAgICAgICAgICAgaiA9IGR1cGxpY2F0ZXMucHVzaCggaSApOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIHdoaWxlICggai0tICkgeworICAgICAgICAgICAgcmVzdWx0cy5z
cGxpY2UoIGR1cGxpY2F0ZXNbIGogXSwgMSApOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0
dXJuIHJlc3VsdHM7Cit9OworCitTaXp6bGUuZXJyb3IgPSBmdW5jdGlvbiggbXNnICkgeworICAg
IHRocm93IG5ldyBFcnJvciggIlN5bnRheCBlcnJvciwgdW5yZWNvZ25pemVkIGV4cHJlc3Npb246
ICIgKyBtc2cgKTsKK307CisKK2Z1bmN0aW9uIHRva2VuaXplKCBzZWxlY3RvciwgcGFyc2VPbmx5
ICkgeworICAgIHZhciBtYXRjaGVkLCBtYXRjaCwgdG9rZW5zLCB0eXBlLAorICAgICAgICBzb0Zh
ciwgZ3JvdXBzLCBwcmVGaWx0ZXJzLAorICAgICAgICBjYWNoZWQgPSB0b2tlbkNhY2hlWyBleHBh
bmRvIF1bIHNlbGVjdG9yICsgIiAiIF07CisKKyAgICBpZiAoIGNhY2hlZCApIHsKKyAgICAgICAg
cmV0dXJuIHBhcnNlT25seSA/IDAgOiBjYWNoZWQuc2xpY2UoIDAgKTsKKyAgICB9CisKKyAgICBz
b0ZhciA9IHNlbGVjdG9yOworICAgIGdyb3VwcyA9IFtdOworICAgIHByZUZpbHRlcnMgPSBFeHBy
LnByZUZpbHRlcjsKKworICAgIHdoaWxlICggc29GYXIgKSB7CisKKyAgICAgICAgLy8gQ29tbWEg
YW5kIGZpcnN0IHJ1bgorICAgICAgICBpZiAoICFtYXRjaGVkIHx8IChtYXRjaCA9IHJjb21tYS5l
eGVjKCBzb0ZhciApKSApIHsKKyAgICAgICAgICAgIGlmICggbWF0Y2ggKSB7CisgICAgICAgICAg
ICAgICAgLy8gRG9uJ3QgY29uc3VtZSB0cmFpbGluZyBjb21tYXMgYXMgdmFsaWQKKyAgICAgICAg
ICAgICAgICBzb0ZhciA9IHNvRmFyLnNsaWNlKCBtYXRjaFswXS5sZW5ndGggKSB8fCBzb0ZhcjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGdyb3Vwcy5wdXNoKCB0b2tlbnMgPSBbXSApOwor
ICAgICAgICB9CisKKyAgICAgICAgbWF0Y2hlZCA9IGZhbHNlOworCisgICAgICAgIC8vIENvbWJp
bmF0b3JzCisgICAgICAgIGlmICggKG1hdGNoID0gcmNvbWJpbmF0b3JzLmV4ZWMoIHNvRmFyICkp
ICkgeworICAgICAgICAgICAgdG9rZW5zLnB1c2goIG1hdGNoZWQgPSBuZXcgVG9rZW4oIG1hdGNo
LnNoaWZ0KCkgKSApOworICAgICAgICAgICAgc29GYXIgPSBzb0Zhci5zbGljZSggbWF0Y2hlZC5s
ZW5ndGggKTsKKworICAgICAgICAgICAgLy8gQ2FzdCBkZXNjZW5kYW50IGNvbWJpbmF0b3JzIHRv
IHNwYWNlCisgICAgICAgICAgICBtYXRjaGVkLnR5cGUgPSBtYXRjaFswXS5yZXBsYWNlKCBydHJp
bSwgIiAiICk7CisgICAgICAgIH0KKworICAgICAgICAvLyBGaWx0ZXJzCisgICAgICAgIGZvciAo
IHR5cGUgaW4gRXhwci5maWx0ZXIgKSB7CisgICAgICAgICAgICBpZiAoIChtYXRjaCA9IG1hdGNo
RXhwclsgdHlwZSBdLmV4ZWMoIHNvRmFyICkpICYmICghcHJlRmlsdGVyc1sgdHlwZSBdIHx8Cisg
ICAgICAgICAgICAgICAgKG1hdGNoID0gcHJlRmlsdGVyc1sgdHlwZSBdKCBtYXRjaCApKSkgKSB7
CisKKyAgICAgICAgICAgICAgICB0b2tlbnMucHVzaCggbWF0Y2hlZCA9IG5ldyBUb2tlbiggbWF0
Y2guc2hpZnQoKSApICk7CisgICAgICAgICAgICAgICAgc29GYXIgPSBzb0Zhci5zbGljZSggbWF0
Y2hlZC5sZW5ndGggKTsKKyAgICAgICAgICAgICAgICBtYXRjaGVkLnR5cGUgPSB0eXBlOworICAg
ICAgICAgICAgICAgIG1hdGNoZWQubWF0Y2hlcyA9IG1hdGNoOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgaWYgKCAhbWF0Y2hlZCApIHsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgfQorCisgICAgLy8gUmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIGludmFs
aWQgZXhjZXNzCisgICAgLy8gaWYgd2UncmUganVzdCBwYXJzaW5nCisgICAgLy8gT3RoZXJ3aXNl
LCB0aHJvdyBhbiBlcnJvciBvciByZXR1cm4gdG9rZW5zCisgICAgcmV0dXJuIHBhcnNlT25seSA/
CisgICAgICAgIHNvRmFyLmxlbmd0aCA6CisgICAgICAgIHNvRmFyID8KKyAgICAgICAgICAgIFNp
enpsZS5lcnJvciggc2VsZWN0b3IgKSA6CisgICAgICAgICAgICAvLyBDYWNoZSB0aGUgdG9rZW5z
CisgICAgICAgICAgICB0b2tlbkNhY2hlKCBzZWxlY3RvciwgZ3JvdXBzICkuc2xpY2UoIDAgKTsK
K30KKworZnVuY3Rpb24gYWRkQ29tYmluYXRvciggbWF0Y2hlciwgY29tYmluYXRvciwgYmFzZSAp
IHsKKyAgICB2YXIgZGlyID0gY29tYmluYXRvci5kaXIsCisgICAgICAgIGNoZWNrTm9uRWxlbWVu
dHMgPSBiYXNlICYmIGNvbWJpbmF0b3IuZGlyID09PSAicGFyZW50Tm9kZSIsCisgICAgICAgIGRv
bmVOYW1lID0gZG9uZSsrOworCisgICAgcmV0dXJuIGNvbWJpbmF0b3IuZmlyc3QgPworICAgICAg
ICAvLyBDaGVjayBhZ2FpbnN0IGNsb3Nlc3QgYW5jZXN0b3IvcHJlY2VkaW5nIGVsZW1lbnQKKyAg
ICAgICAgZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHsKKyAgICAgICAgICAgIHdoaWxl
ICggKGVsZW0gPSBlbGVtWyBkaXIgXSkgKSB7CisgICAgICAgICAgICAgICAgaWYgKCBjaGVja05v
bkVsZW1lbnRzIHx8IGVsZW0ubm9kZVR5cGUgPT09IDEgICkgeworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gbWF0Y2hlciggZWxlbSwgY29udGV4dCwgeG1sICk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9IDoKKworICAgICAgICAvLyBDaGVjayBhZ2FpbnN0
IGFsbCBhbmNlc3Rvci9wcmVjZWRpbmcgZWxlbWVudHMKKyAgICAgICAgZnVuY3Rpb24oIGVsZW0s
IGNvbnRleHQsIHhtbCApIHsKKyAgICAgICAgICAgIC8vIFdlIGNhbid0IHNldCBhcmJpdHJhcnkg
ZGF0YSBvbiBYTUwgbm9kZXMsIHNvIHRoZXkgZG9uJ3QgYmVuZWZpdCBmcm9tIGRpciBjYWNoaW5n
CisgICAgICAgICAgICBpZiAoICF4bWwgKSB7CisgICAgICAgICAgICAgICAgdmFyIGNhY2hlLAor
ICAgICAgICAgICAgICAgICAgICBkaXJrZXkgPSBkaXJydW5zICsgIiAiICsgZG9uZU5hbWUgKyAi
ICIsCisgICAgICAgICAgICAgICAgICAgIGNhY2hlZGtleSA9IGRpcmtleSArIGNhY2hlZHJ1bnM7
CisgICAgICAgICAgICAgICAgd2hpbGUgKCAoZWxlbSA9IGVsZW1bIGRpciBdKSApIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCBjaGVja05vbkVsZW1lbnRzIHx8IGVsZW0ubm9kZVR5cGUgPT09
IDEgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIChjYWNoZSA9IGVsZW1bIGV4cGFu
ZG8gXSkgPT09IGNhY2hlZGtleSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZWxlbS5zaXpzZXQ7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCB0eXBl
b2YgY2FjaGUgPT09ICJzdHJpbmciICYmIGNhY2hlLmluZGV4T2YoZGlya2V5KSA9PT0gMCApIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGVsZW0uc2l6c2V0ICkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVsZW1bIGV4cGFuZG8gXSA9IGNhY2hlZGtleTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIG1hdGNoZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLnNpenNldCA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLnNpenNl
dCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICB3aGlsZSAoIChlbGVtID0gZWxlbVsgZGlyIF0pICkgeworICAgICAgICAgICAgICAgICAg
ICBpZiAoIGNoZWNrTm9uRWxlbWVudHMgfHwgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICggbWF0Y2hlciggZWxlbSwgY29udGV4dCwgeG1sICkgKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW07CisgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgIH07Cit9CisKK2Z1bmN0aW9uIGVsZW1lbnRNYXRjaGVyKCBt
YXRjaGVycyApIHsKKyAgICByZXR1cm4gbWF0Y2hlcnMubGVuZ3RoID4gMSA/CisgICAgICAgIGZ1
bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7CisgICAgICAgICAgICB2YXIgaSA9IG1hdGNo
ZXJzLmxlbmd0aDsKKyAgICAgICAgICAgIHdoaWxlICggaS0tICkgeworICAgICAgICAgICAgICAg
IGlmICggIW1hdGNoZXJzW2ldKCBlbGVtLCBjb250ZXh0LCB4bWwgKSApIHsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9IDoKKyAgICAgICAgbWF0Y2hlcnNb
MF07Cit9CisKK2Z1bmN0aW9uIGNvbmRlbnNlKCB1bm1hdGNoZWQsIG1hcCwgZmlsdGVyLCBjb250
ZXh0LCB4bWwgKSB7CisgICAgdmFyIGVsZW0sCisgICAgICAgIG5ld1VubWF0Y2hlZCA9IFtdLAor
ICAgICAgICBpID0gMCwKKyAgICAgICAgbGVuID0gdW5tYXRjaGVkLmxlbmd0aCwKKyAgICAgICAg
bWFwcGVkID0gbWFwICE9IG51bGw7CisKKyAgICBmb3IgKCA7IGkgPCBsZW47IGkrKyApIHsKKyAg
ICAgICAgaWYgKCAoZWxlbSA9IHVubWF0Y2hlZFtpXSkgKSB7CisgICAgICAgICAgICBpZiAoICFm
aWx0ZXIgfHwgZmlsdGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKSApIHsKKyAgICAgICAgICAgICAg
ICBuZXdVbm1hdGNoZWQucHVzaCggZWxlbSApOworICAgICAgICAgICAgICAgIGlmICggbWFwcGVk
ICkgeworICAgICAgICAgICAgICAgICAgICBtYXAucHVzaCggaSApOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBuZXdVbm1h
dGNoZWQ7Cit9CisKK2Z1bmN0aW9uIHNldE1hdGNoZXIoIHByZUZpbHRlciwgc2VsZWN0b3IsIG1h
dGNoZXIsIHBvc3RGaWx0ZXIsIHBvc3RGaW5kZXIsIHBvc3RTZWxlY3RvciApIHsKKyAgICBpZiAo
IHBvc3RGaWx0ZXIgJiYgIXBvc3RGaWx0ZXJbIGV4cGFuZG8gXSApIHsKKyAgICAgICAgcG9zdEZp
bHRlciA9IHNldE1hdGNoZXIoIHBvc3RGaWx0ZXIgKTsKKyAgICB9CisgICAgaWYgKCBwb3N0Rmlu
ZGVyICYmICFwb3N0RmluZGVyWyBleHBhbmRvIF0gKSB7CisgICAgICAgIHBvc3RGaW5kZXIgPSBz
ZXRNYXRjaGVyKCBwb3N0RmluZGVyLCBwb3N0U2VsZWN0b3IgKTsKKyAgICB9CisgICAgcmV0dXJu
IG1hcmtGdW5jdGlvbihmdW5jdGlvbiggc2VlZCwgcmVzdWx0cywgY29udGV4dCwgeG1sICkgewor
ICAgICAgICB2YXIgdGVtcCwgaSwgZWxlbSwKKyAgICAgICAgICAgIHByZU1hcCA9IFtdLAorICAg
ICAgICAgICAgcG9zdE1hcCA9IFtdLAorICAgICAgICAgICAgcHJlZXhpc3RpbmcgPSByZXN1bHRz
Lmxlbmd0aCwKKworICAgICAgICAgICAgLy8gR2V0IGluaXRpYWwgZWxlbWVudHMgZnJvbSBzZWVk
IG9yIGNvbnRleHQKKyAgICAgICAgICAgIGVsZW1zID0gc2VlZCB8fCBtdWx0aXBsZUNvbnRleHRz
KCBzZWxlY3RvciB8fCAiKiIsIGNvbnRleHQubm9kZVR5cGUgPyBbIGNvbnRleHQgXSA6IGNvbnRl
eHQsIFtdICksCisKKyAgICAgICAgICAgIC8vIFByZWZpbHRlciB0byBnZXQgbWF0Y2hlciBpbnB1
dCwgcHJlc2VydmluZyBhIG1hcCBmb3Igc2VlZC1yZXN1bHRzIHN5bmNocm9uaXphdGlvbgorICAg
ICAgICAgICAgbWF0Y2hlckluID0gcHJlRmlsdGVyICYmICggc2VlZCB8fCAhc2VsZWN0b3IgKSA/
CisgICAgICAgICAgICAgICAgY29uZGVuc2UoIGVsZW1zLCBwcmVNYXAsIHByZUZpbHRlciwgY29u
dGV4dCwgeG1sICkgOgorICAgICAgICAgICAgICAgIGVsZW1zLAorCisgICAgICAgICAgICBtYXRj
aGVyT3V0ID0gbWF0Y2hlciA/CisgICAgICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZSBhIHBvc3RG
aW5kZXIsIG9yIGZpbHRlcmVkIHNlZWQsIG9yIG5vbi1zZWVkIHBvc3RGaWx0ZXIgb3IgcHJlZXhp
c3RpbmcgcmVzdWx0cywKKyAgICAgICAgICAgICAgICBwb3N0RmluZGVyIHx8ICggc2VlZCA/IHBy
ZUZpbHRlciA6IHByZWV4aXN0aW5nIHx8IHBvc3RGaWx0ZXIgKSA/CisKKyAgICAgICAgICAgICAg
ICAgICAgLy8gLi4uaW50ZXJtZWRpYXRlIHByb2Nlc3NpbmcgaXMgbmVjZXNzYXJ5CisgICAgICAg
ICAgICAgICAgICAgIFtdIDoKKworICAgICAgICAgICAgICAgICAgICAvLyAuLi5vdGhlcndpc2Ug
dXNlIHJlc3VsdHMgZGlyZWN0bHkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyA6CisgICAg
ICAgICAgICAgICAgbWF0Y2hlckluOworCisgICAgICAgIC8vIEZpbmQgcHJpbWFyeSBtYXRjaGVz
CisgICAgICAgIGlmICggbWF0Y2hlciApIHsKKyAgICAgICAgICAgIG1hdGNoZXIoIG1hdGNoZXJJ
biwgbWF0Y2hlck91dCwgY29udGV4dCwgeG1sICk7CisgICAgICAgIH0KKworICAgICAgICAvLyBB
cHBseSBwb3N0RmlsdGVyCisgICAgICAgIGlmICggcG9zdEZpbHRlciApIHsKKyAgICAgICAgICAg
IHRlbXAgPSBjb25kZW5zZSggbWF0Y2hlck91dCwgcG9zdE1hcCApOworICAgICAgICAgICAgcG9z
dEZpbHRlciggdGVtcCwgW10sIGNvbnRleHQsIHhtbCApOworCisgICAgICAgICAgICAvLyBVbi1t
YXRjaCBmYWlsaW5nIGVsZW1lbnRzIGJ5IG1vdmluZyB0aGVtIGJhY2sgdG8gbWF0Y2hlckluCisg
ICAgICAgICAgICBpID0gdGVtcC5sZW5ndGg7CisgICAgICAgICAgICB3aGlsZSAoIGktLSApIHsK
KyAgICAgICAgICAgICAgICBpZiAoIChlbGVtID0gdGVtcFtpXSkgKSB7CisgICAgICAgICAgICAg
ICAgICAgIG1hdGNoZXJPdXRbIHBvc3RNYXBbaV0gXSA9ICEobWF0Y2hlckluWyBwb3N0TWFwW2ld
IF0gPSBlbGVtKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICBpZiAoIHNlZWQgKSB7CisgICAgICAgICAgICBpZiAoIHBvc3RGaW5kZXIgfHwg
cHJlRmlsdGVyICkgeworICAgICAgICAgICAgICAgIGlmICggcG9zdEZpbmRlciApIHsKKyAgICAg
ICAgICAgICAgICAgICAgLy8gR2V0IHRoZSBmaW5hbCBtYXRjaGVyT3V0IGJ5IGNvbmRlbnNpbmcg
dGhpcyBpbnRlcm1lZGlhdGUgaW50byBwb3N0RmluZGVyIGNvbnRleHRzCisgICAgICAgICAgICAg
ICAgICAgIHRlbXAgPSBbXTsKKyAgICAgICAgICAgICAgICAgICAgaSA9IG1hdGNoZXJPdXQubGVu
Z3RoOworICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIGktLSApIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICggKGVsZW0gPSBtYXRjaGVyT3V0W2ldKSApIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBSZXN0b3JlIG1hdGNoZXJJbiBzaW5jZSBlbGVtIGlzIG5vdCB5ZXQg
YSBmaW5hbCBtYXRjaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAucHVzaCggKG1h
dGNoZXJJbltpXSA9IGVsZW0pICk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcG9zdEZpbmRlciggbnVsbCwgKG1h
dGNoZXJPdXQgPSBbXSksIHRlbXAsIHhtbCApOworICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgIC8vIE1vdmUgbWF0Y2hlZCBlbGVtZW50cyBmcm9tIHNlZWQgdG8gcmVzdWx0cyB0
byBrZWVwIHRoZW0gc3luY2hyb25pemVkCisgICAgICAgICAgICAgICAgaSA9IG1hdGNoZXJPdXQu
bGVuZ3RoOworICAgICAgICAgICAgICAgIHdoaWxlICggaS0tICkgeworICAgICAgICAgICAgICAg
ICAgICBpZiAoIChlbGVtID0gbWF0Y2hlck91dFtpXSkgJiYKKyAgICAgICAgICAgICAgICAgICAg
ICAgICh0ZW1wID0gcG9zdEZpbmRlciA/IGluZGV4T2YuY2FsbCggc2VlZCwgZWxlbSApIDogcHJl
TWFwW2ldKSA+IC0xICkgeworCisgICAgICAgICAgICAgICAgICAgICAgICBzZWVkW3RlbXBdID0g
IShyZXN1bHRzW3RlbXBdID0gZWxlbSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgLy8gQWRkIGVsZW1lbnRzIHRvIHJl
c3VsdHMsIHRocm91Z2ggcG9zdEZpbmRlciBpZiBkZWZpbmVkCisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBtYXRjaGVyT3V0ID0gY29uZGVuc2UoCisgICAgICAgICAgICAgICAgbWF0Y2hl
ck91dCA9PT0gcmVzdWx0cyA/CisgICAgICAgICAgICAgICAgICAgIG1hdGNoZXJPdXQuc3BsaWNl
KCBwcmVleGlzdGluZywgbWF0Y2hlck91dC5sZW5ndGggKSA6CisgICAgICAgICAgICAgICAgICAg
IG1hdGNoZXJPdXQKKyAgICAgICAgICAgICk7CisgICAgICAgICAgICBpZiAoIHBvc3RGaW5kZXIg
KSB7CisgICAgICAgICAgICAgICAgcG9zdEZpbmRlciggbnVsbCwgcmVzdWx0cywgbWF0Y2hlck91
dCwgeG1sICk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHB1c2guYXBw
bHkoIHJlc3VsdHMsIG1hdGNoZXJPdXQgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0pOworfQorCitmdW5jdGlvbiBtYXRjaGVyRnJvbVRva2VucyggdG9rZW5zICkgeworICAgIHZh
ciBjaGVja0NvbnRleHQsIG1hdGNoZXIsIGosCisgICAgICAgIGxlbiA9IHRva2Vucy5sZW5ndGgs
CisgICAgICAgIGxlYWRpbmdSZWxhdGl2ZSA9IEV4cHIucmVsYXRpdmVbIHRva2Vuc1swXS50eXBl
IF0sCisgICAgICAgIGltcGxpY2l0UmVsYXRpdmUgPSBsZWFkaW5nUmVsYXRpdmUgfHwgRXhwci5y
ZWxhdGl2ZVsiICJdLAorICAgICAgICBpID0gbGVhZGluZ1JlbGF0aXZlID8gMSA6IDAsCisKKyAg
ICAgICAgLy8gVGhlIGZvdW5kYXRpb25hbCBtYXRjaGVyIGVuc3VyZXMgdGhhdCBlbGVtZW50cyBh
cmUgcmVhY2hhYmxlIGZyb20gdG9wLWxldmVsIGNvbnRleHQocykKKyAgICAgICAgbWF0Y2hDb250
ZXh0ID0gYWRkQ29tYmluYXRvciggZnVuY3Rpb24oIGVsZW0gKSB7CisgICAgICAgICAgICByZXR1
cm4gZWxlbSA9PT0gY2hlY2tDb250ZXh0OworICAgICAgICB9LCBpbXBsaWNpdFJlbGF0aXZlLCB0
cnVlICksCisgICAgICAgIG1hdGNoQW55Q29udGV4dCA9IGFkZENvbWJpbmF0b3IoIGZ1bmN0aW9u
KCBlbGVtICkgeworICAgICAgICAgICAgcmV0dXJuIGluZGV4T2YuY2FsbCggY2hlY2tDb250ZXh0
LCBlbGVtICkgPiAtMTsKKyAgICAgICAgfSwgaW1wbGljaXRSZWxhdGl2ZSwgdHJ1ZSApLAorICAg
ICAgICBtYXRjaGVycyA9IFsgZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHsKKyAgICAg
ICAgICAgIHJldHVybiAoICFsZWFkaW5nUmVsYXRpdmUgJiYgKCB4bWwgfHwgY29udGV4dCAhPT0g
b3V0ZXJtb3N0Q29udGV4dCApICkgfHwgKAorICAgICAgICAgICAgICAgIChjaGVja0NvbnRleHQg
PSBjb250ZXh0KS5ub2RlVHlwZSA/CisgICAgICAgICAgICAgICAgICAgIG1hdGNoQ29udGV4dCgg
ZWxlbSwgY29udGV4dCwgeG1sICkgOgorICAgICAgICAgICAgICAgICAgICBtYXRjaEFueUNvbnRl
eHQoIGVsZW0sIGNvbnRleHQsIHhtbCApICk7CisgICAgICAgIH0gXTsKKworICAgIGZvciAoIDsg
aSA8IGxlbjsgaSsrICkgeworICAgICAgICBpZiAoIChtYXRjaGVyID0gRXhwci5yZWxhdGl2ZVsg
dG9rZW5zW2ldLnR5cGUgXSkgKSB7CisgICAgICAgICAgICBtYXRjaGVycyA9IFsgYWRkQ29tYmlu
YXRvciggZWxlbWVudE1hdGNoZXIoIG1hdGNoZXJzICksIG1hdGNoZXIgKSBdOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgbWF0Y2hlciA9IEV4cHIuZmlsdGVyWyB0b2tlbnNbaV0udHlw
ZSBdLmFwcGx5KCBudWxsLCB0b2tlbnNbaV0ubWF0Y2hlcyApOworCisgICAgICAgICAgICAvLyBS
ZXR1cm4gc3BlY2lhbCB1cG9uIHNlZWluZyBhIHBvc2l0aW9uYWwgbWF0Y2hlcgorICAgICAgICAg
ICAgaWYgKCBtYXRjaGVyWyBleHBhbmRvIF0gKSB7CisgICAgICAgICAgICAgICAgLy8gRmluZCB0
aGUgbmV4dCByZWxhdGl2ZSBvcGVyYXRvciAoaWYgYW55KSBmb3IgcHJvcGVyIGhhbmRsaW5nCisg
ICAgICAgICAgICAgICAgaiA9ICsraTsKKyAgICAgICAgICAgICAgICBmb3IgKCA7IGogPCBsZW47
IGorKyApIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBFeHByLnJlbGF0aXZlWyB0b2tlbnNb
al0udHlwZSBdICkgeworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHNl
dE1hdGNoZXIoCisgICAgICAgICAgICAgICAgICAgIGkgPiAxICYmIGVsZW1lbnRNYXRjaGVyKCBt
YXRjaGVycyApLAorICAgICAgICAgICAgICAgICAgICBpID4gMSAmJiB0b2tlbnMuc2xpY2UoIDAs
IGkgLSAxICkuam9pbigiIikucmVwbGFjZSggcnRyaW0sICIkMSIgKSwKKyAgICAgICAgICAgICAg
ICAgICAgbWF0Y2hlciwKKyAgICAgICAgICAgICAgICAgICAgaSA8IGogJiYgbWF0Y2hlckZyb21U
b2tlbnMoIHRva2Vucy5zbGljZSggaSwgaiApICksCisgICAgICAgICAgICAgICAgICAgIGogPCBs
ZW4gJiYgbWF0Y2hlckZyb21Ub2tlbnMoICh0b2tlbnMgPSB0b2tlbnMuc2xpY2UoIGogKSkgKSwK
KyAgICAgICAgICAgICAgICAgICAgaiA8IGxlbiAmJiB0b2tlbnMuam9pbigiIikKKyAgICAgICAg
ICAgICAgICApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbWF0Y2hlcnMucHVzaCggbWF0
Y2hlciApOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGVsZW1lbnRNYXRjaGVyKCBt
YXRjaGVycyApOworfQorCitmdW5jdGlvbiBtYXRjaGVyRnJvbUdyb3VwTWF0Y2hlcnMoIGVsZW1l
bnRNYXRjaGVycywgc2V0TWF0Y2hlcnMgKSB7CisgICAgdmFyIGJ5U2V0ID0gc2V0TWF0Y2hlcnMu
bGVuZ3RoID4gMCwKKyAgICAgICAgYnlFbGVtZW50ID0gZWxlbWVudE1hdGNoZXJzLmxlbmd0aCA+
IDAsCisgICAgICAgIHN1cGVyTWF0Y2hlciA9IGZ1bmN0aW9uKCBzZWVkLCBjb250ZXh0LCB4bWws
IHJlc3VsdHMsIGV4cGFuZENvbnRleHQgKSB7CisgICAgICAgICAgICB2YXIgZWxlbSwgaiwgbWF0
Y2hlciwKKyAgICAgICAgICAgICAgICBzZXRNYXRjaGVkID0gW10sCisgICAgICAgICAgICAgICAg
bWF0Y2hlZENvdW50ID0gMCwKKyAgICAgICAgICAgICAgICBpID0gIjAiLAorICAgICAgICAgICAg
ICAgIHVubWF0Y2hlZCA9IHNlZWQgJiYgW10sCisgICAgICAgICAgICAgICAgb3V0ZXJtb3N0ID0g
ZXhwYW5kQ29udGV4dCAhPSBudWxsLAorICAgICAgICAgICAgICAgIGNvbnRleHRCYWNrdXAgPSBv
dXRlcm1vc3RDb250ZXh0LAorICAgICAgICAgICAgICAgIC8vIFdlIG11c3QgYWx3YXlzIGhhdmUg
ZWl0aGVyIHNlZWQgZWxlbWVudHMgb3IgY29udGV4dAorICAgICAgICAgICAgICAgIGVsZW1zID0g
c2VlZCB8fCBieUVsZW1lbnQgJiYgRXhwci5maW5kWyJUQUciXSggIioiLCBleHBhbmRDb250ZXh0
ICYmIGNvbnRleHQucGFyZW50Tm9kZSB8fCBjb250ZXh0ICksCisgICAgICAgICAgICAgICAgLy8g
TmVzdGVkIG1hdGNoZXJzIHNob3VsZCB1c2Ugbm9uLWludGVnZXIgZGlycnVucworICAgICAgICAg
ICAgICAgIGRpcnJ1bnNVbmlxdWUgPSAoZGlycnVucyArPSBjb250ZXh0QmFja3VwID09IG51bGwg
PyAxIDogTWF0aC5FKTsKKworICAgICAgICAgICAgaWYgKCBvdXRlcm1vc3QgKSB7CisgICAgICAg
ICAgICAgICAgb3V0ZXJtb3N0Q29udGV4dCA9IGNvbnRleHQgIT09IGRvY3VtZW50ICYmIGNvbnRl
eHQ7CisgICAgICAgICAgICAgICAgY2FjaGVkcnVucyA9IHN1cGVyTWF0Y2hlci5lbDsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgLy8gQWRkIGVsZW1lbnRzIHBhc3NpbmcgZWxlbWVudE1h
dGNoZXJzIGRpcmVjdGx5IHRvIHJlc3VsdHMKKyAgICAgICAgICAgIGZvciAoIDsgKGVsZW0gPSBl
bGVtc1tpXSkgIT0gbnVsbDsgaSsrICkgeworICAgICAgICAgICAgICAgIGlmICggYnlFbGVtZW50
ICYmIGVsZW0gKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoIGogPSAwOyAobWF0Y2hlciA9
IGVsZW1lbnRNYXRjaGVyc1tqXSk7IGorKyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICggbWF0Y2hlciggZWxlbSwgY29udGV4dCwgeG1sICkgKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0cy5wdXNoKCBlbGVtICk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKCBvdXRlcm1vc3QgKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBkaXJydW5zID0gZGlycnVuc1VuaXF1ZTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNhY2hlZHJ1bnMgPSArK3N1cGVyTWF0Y2hlci5lbDsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIFRyYWNrIHVubWF0Y2hl
ZCBlbGVtZW50cyBmb3Igc2V0IGZpbHRlcnMKKyAgICAgICAgICAgICAgICBpZiAoIGJ5U2V0ICkg
eworICAgICAgICAgICAgICAgICAgICAvLyBUaGV5IHdpbGwgaGF2ZSBnb25lIHRocm91Z2ggYWxs
IHBvc3NpYmxlIG1hdGNoZXJzCisgICAgICAgICAgICAgICAgICAgIGlmICggKGVsZW0gPSAhbWF0
Y2hlciAmJiBlbGVtKSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZWRDb3VudC0t
OworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgLy8gTGVuZ3Ro
ZW4gdGhlIGFycmF5IGZvciBldmVyeSBlbGVtZW50LCBtYXRjaGVkIG9yIG5vdAorICAgICAgICAg
ICAgICAgICAgICBpZiAoIHNlZWQgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB1bm1hdGNo
ZWQucHVzaCggZWxlbSApOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBBcHBseSBzZXQgZmlsdGVycyB0byB1
bm1hdGNoZWQgZWxlbWVudHMKKyAgICAgICAgICAgIG1hdGNoZWRDb3VudCArPSBpOworICAgICAg
ICAgICAgaWYgKCBieVNldCAmJiBpICE9PSBtYXRjaGVkQ291bnQgKSB7CisgICAgICAgICAgICAg
ICAgZm9yICggaiA9IDA7IChtYXRjaGVyID0gc2V0TWF0Y2hlcnNbal0pOyBqKysgKSB7CisgICAg
ICAgICAgICAgICAgICAgIG1hdGNoZXIoIHVubWF0Y2hlZCwgc2V0TWF0Y2hlZCwgY29udGV4dCwg
eG1sICk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKCBzZWVkICkg
eworICAgICAgICAgICAgICAgICAgICAvLyBSZWludGVncmF0ZSBlbGVtZW50IG1hdGNoZXMgdG8g
ZWxpbWluYXRlIHRoZSBuZWVkIGZvciBzb3J0aW5nCisgICAgICAgICAgICAgICAgICAgIGlmICgg
bWF0Y2hlZENvdW50ID4gMCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICggaS0t
ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggISh1bm1hdGNoZWRbaV0gfHwg
c2V0TWF0Y2hlZFtpXSkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldE1h
dGNoZWRbaV0gPSBwb3AuY2FsbCggcmVzdWx0cyApOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgICAgIC8vIERpc2NhcmQgaW5kZXggcGxhY2Vob2xkZXIgdmFsdWVz
IHRvIGdldCBvbmx5IGFjdHVhbCBtYXRjaGVzCisgICAgICAgICAgICAgICAgICAgIHNldE1hdGNo
ZWQgPSBjb25kZW5zZSggc2V0TWF0Y2hlZCApOworICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgIC8vIEFkZCBtYXRjaGVzIHRvIHJlc3VsdHMKKyAgICAgICAgICAgICAgICBwdXNo
LmFwcGx5KCByZXN1bHRzLCBzZXRNYXRjaGVkICk7CisKKyAgICAgICAgICAgICAgICAvLyBTZWVk
bGVzcyBzZXQgbWF0Y2hlcyBzdWNjZWVkaW5nIG11bHRpcGxlIHN1Y2Nlc3NmdWwgbWF0Y2hlcnMg
c3RpcHVsYXRlIHNvcnRpbmcKKyAgICAgICAgICAgICAgICBpZiAoIG91dGVybW9zdCAmJiAhc2Vl
ZCAmJiBzZXRNYXRjaGVkLmxlbmd0aCA+IDAgJiYKKyAgICAgICAgICAgICAgICAgICAgKCBtYXRj
aGVkQ291bnQgKyBzZXRNYXRjaGVycy5sZW5ndGggKSA+IDEgKSB7CisKKyAgICAgICAgICAgICAg
ICAgICAgU2l6emxlLnVuaXF1ZVNvcnQoIHJlc3VsdHMgKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIE92ZXJyaWRlIG1hbmlwdWxhdGlvbiBvZiBn
bG9iYWxzIGJ5IG5lc3RlZCBtYXRjaGVycworICAgICAgICAgICAgaWYgKCBvdXRlcm1vc3QgKSB7
CisgICAgICAgICAgICAgICAgZGlycnVucyA9IGRpcnJ1bnNVbmlxdWU7CisgICAgICAgICAgICAg
ICAgb3V0ZXJtb3N0Q29udGV4dCA9IGNvbnRleHRCYWNrdXA7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIHJldHVybiB1bm1hdGNoZWQ7CisgICAgICAgIH07CisKKyAgICBzdXBlck1hdGNo
ZXIuZWwgPSAwOworICAgIHJldHVybiBieVNldCA/CisgICAgICAgIG1hcmtGdW5jdGlvbiggc3Vw
ZXJNYXRjaGVyICkgOgorICAgICAgICBzdXBlck1hdGNoZXI7Cit9CisKK2NvbXBpbGUgPSBTaXp6
bGUuY29tcGlsZSA9IGZ1bmN0aW9uKCBzZWxlY3RvciwgZ3JvdXAgLyogSW50ZXJuYWwgVXNlIE9u
bHkgKi8gKSB7CisgICAgdmFyIGksCisgICAgICAgIHNldE1hdGNoZXJzID0gW10sCisgICAgICAg
IGVsZW1lbnRNYXRjaGVycyA9IFtdLAorICAgICAgICBjYWNoZWQgPSBjb21waWxlckNhY2hlWyBl
eHBhbmRvIF1bIHNlbGVjdG9yICsgIiAiIF07CisKKyAgICBpZiAoICFjYWNoZWQgKSB7CisgICAg
ICAgIC8vIEdlbmVyYXRlIGEgZnVuY3Rpb24gb2YgcmVjdXJzaXZlIGZ1bmN0aW9ucyB0aGF0IGNh
biBiZSB1c2VkIHRvIGNoZWNrIGVhY2ggZWxlbWVudAorICAgICAgICBpZiAoICFncm91cCApIHsK
KyAgICAgICAgICAgIGdyb3VwID0gdG9rZW5pemUoIHNlbGVjdG9yICk7CisgICAgICAgIH0KKyAg
ICAgICAgaSA9IGdyb3VwLmxlbmd0aDsKKyAgICAgICAgd2hpbGUgKCBpLS0gKSB7CisgICAgICAg
ICAgICBjYWNoZWQgPSBtYXRjaGVyRnJvbVRva2VucyggZ3JvdXBbaV0gKTsKKyAgICAgICAgICAg
IGlmICggY2FjaGVkWyBleHBhbmRvIF0gKSB7CisgICAgICAgICAgICAgICAgc2V0TWF0Y2hlcnMu
cHVzaCggY2FjaGVkICk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGVs
ZW1lbnRNYXRjaGVycy5wdXNoKCBjYWNoZWQgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIC8vIENhY2hlIHRoZSBjb21waWxlZCBmdW5jdGlvbgorICAgICAgICBjYWNoZWQg
PSBjb21waWxlckNhY2hlKCBzZWxlY3RvciwgbWF0Y2hlckZyb21Hcm91cE1hdGNoZXJzKCBlbGVt
ZW50TWF0Y2hlcnMsIHNldE1hdGNoZXJzICkgKTsKKyAgICB9CisgICAgcmV0dXJuIGNhY2hlZDsK
K307CisKK2Z1bmN0aW9uIG11bHRpcGxlQ29udGV4dHMoIHNlbGVjdG9yLCBjb250ZXh0cywgcmVz
dWx0cyApIHsKKyAgICB2YXIgaSA9IDAsCisgICAgICAgIGxlbiA9IGNvbnRleHRzLmxlbmd0aDsK
KyAgICBmb3IgKCA7IGkgPCBsZW47IGkrKyApIHsKKyAgICAgICAgU2l6emxlKCBzZWxlY3Rvciwg
Y29udGV4dHNbaV0sIHJlc3VsdHMgKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdHM7Cit9CisK
K2Z1bmN0aW9uIHNlbGVjdCggc2VsZWN0b3IsIGNvbnRleHQsIHJlc3VsdHMsIHNlZWQsIHhtbCAp
IHsKKyAgICB2YXIgaSwgdG9rZW5zLCB0b2tlbiwgdHlwZSwgZmluZCwKKyAgICAgICAgbWF0Y2gg
PSB0b2tlbml6ZSggc2VsZWN0b3IgKSwKKyAgICAgICAgaiA9IG1hdGNoLmxlbmd0aDsKKworICAg
IGlmICggIXNlZWQgKSB7CisgICAgICAgIC8vIFRyeSB0byBtaW5pbWl6ZSBvcGVyYXRpb25zIGlm
IHRoZXJlIGlzIG9ubHkgb25lIGdyb3VwCisgICAgICAgIGlmICggbWF0Y2gubGVuZ3RoID09PSAx
ICkgeworCisgICAgICAgICAgICAvLyBUYWtlIGEgc2hvcnRjdXQgYW5kIHNldCB0aGUgY29udGV4
dCBpZiB0aGUgcm9vdCBzZWxlY3RvciBpcyBhbiBJRAorICAgICAgICAgICAgdG9rZW5zID0gbWF0
Y2hbMF0gPSBtYXRjaFswXS5zbGljZSggMCApOworICAgICAgICAgICAgaWYgKCB0b2tlbnMubGVu
Z3RoID4gMiAmJiAodG9rZW4gPSB0b2tlbnNbMF0pLnR5cGUgPT09ICJJRCIgJiYKKyAgICAgICAg
ICAgICAgICAgICAgY29udGV4dC5ub2RlVHlwZSA9PT0gOSAmJiAheG1sICYmCisgICAgICAgICAg
ICAgICAgICAgIEV4cHIucmVsYXRpdmVbIHRva2Vuc1sxXS50eXBlIF0gKSB7CisKKyAgICAgICAg
ICAgICAgICBjb250ZXh0ID0gRXhwci5maW5kWyJJRCJdKCB0b2tlbi5tYXRjaGVzWzBdLnJlcGxh
Y2UoIHJiYWNrc2xhc2gsICIiICksIGNvbnRleHQsIHhtbCApWzBdOworICAgICAgICAgICAgICAg
IGlmICggIWNvbnRleHQgKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRzOwor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHNlbGVjdG9yID0gc2VsZWN0b3Iu
c2xpY2UoIHRva2Vucy5zaGlmdCgpLmxlbmd0aCApOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAvLyBGZXRjaCBhIHNlZWQgc2V0IGZvciByaWdodC10by1sZWZ0IG1hdGNoaW5nCisgICAg
ICAgICAgICBmb3IgKCBpID0gbWF0Y2hFeHByWyJQT1MiXS50ZXN0KCBzZWxlY3RvciApID8gLTEg
OiB0b2tlbnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0gKSB7CisgICAgICAgICAgICAgICAgdG9r
ZW4gPSB0b2tlbnNbaV07CisKKyAgICAgICAgICAgICAgICAvLyBBYm9ydCBpZiB3ZSBoaXQgYSBj
b21iaW5hdG9yCisgICAgICAgICAgICAgICAgaWYgKCBFeHByLnJlbGF0aXZlWyAodHlwZSA9IHRv
a2VuLnR5cGUpIF0gKSB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIChmaW5kID0gRXhwci5maW5kWyB0eXBlIF0pICkg
eworICAgICAgICAgICAgICAgICAgICAvLyBTZWFyY2gsIGV4cGFuZGluZyBjb250ZXh0IGZvciBs
ZWFkaW5nIHNpYmxpbmcgY29tYmluYXRvcnMKKyAgICAgICAgICAgICAgICAgICAgaWYgKCAoc2Vl
ZCA9IGZpbmQoCisgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi5tYXRjaGVzWzBdLnJlcGxh
Y2UoIHJiYWNrc2xhc2gsICIiICksCisgICAgICAgICAgICAgICAgICAgICAgICByc2libGluZy50
ZXN0KCB0b2tlbnNbMF0udHlwZSApICYmIGNvbnRleHQucGFyZW50Tm9kZSB8fCBjb250ZXh0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgeG1sCisgICAgICAgICAgICAgICAgICAgICkpICkgewor
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBzZWVkIGlzIGVtcHR5IG9yIG5vIHRva2Vu
cyByZW1haW4sIHdlIGNhbiByZXR1cm4gZWFybHkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRv
a2Vucy5zcGxpY2UoIGksIDEgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdG9yID0g
c2VlZC5sZW5ndGggJiYgdG9rZW5zLmpvaW4oIiIpOworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCAhc2VsZWN0b3IgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaC5hcHBs
eSggcmVzdWx0cywgc2xpY2UuY2FsbCggc2VlZCwgMCApICk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdHM7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8g
Q29tcGlsZSBhbmQgZXhlY3V0ZSBhIGZpbHRlcmluZyBmdW5jdGlvbgorICAgIC8vIFByb3ZpZGUg
YG1hdGNoYCB0byBhdm9pZCByZXRva2VuaXphdGlvbiBpZiB3ZSBtb2RpZmllZCB0aGUgc2VsZWN0
b3IgYWJvdmUKKyAgICBjb21waWxlKCBzZWxlY3RvciwgbWF0Y2ggKSgKKyAgICAgICAgc2VlZCwK
KyAgICAgICAgY29udGV4dCwKKyAgICAgICAgeG1sLAorICAgICAgICByZXN1bHRzLAorICAgICAg
ICByc2libGluZy50ZXN0KCBzZWxlY3RvciApCisgICAgKTsKKyAgICByZXR1cm4gcmVzdWx0czsK
K30KKworaWYgKCBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsICkgeworICAgIChmdW5jdGlvbigp
IHsKKyAgICAgICAgdmFyIGRpc2Nvbm5lY3RlZE1hdGNoLAorICAgICAgICAgICAgb2xkU2VsZWN0
ID0gc2VsZWN0LAorICAgICAgICAgICAgcmVzY2FwZSA9IC8nfFxcL2csCisgICAgICAgICAgICBy
YXR0cmlidXRlUXVvdGVzID0gL1w9W1x4MjBcdFxyXG5cZl0qKFteJyJcXV0qKVtceDIwXHRcclxu
XGZdKlxdL2csCisKKyAgICAgICAgICAgIC8vIHFTYSg6Zm9jdXMpIHJlcG9ydHMgZmFsc2Ugd2hl
biB0cnVlIChDaHJvbWUgMjEpLCBubyBuZWVkIHRvIGFsc28gYWRkIHRvIGJ1Z2d5TWF0Y2hlcyBz
aW5jZSBtYXRjaGVzIGNoZWNrcyBidWdneVFTQQorICAgICAgICAgICAgLy8gQSBzdXBwb3J0IHRl
c3Qgd291bGQgcmVxdWlyZSB0b28gbXVjaCBjb2RlICh3b3VsZCBpbmNsdWRlIGRvY3VtZW50IHJl
YWR5KQorICAgICAgICAgICAgcmJ1Z2d5UVNBID0gWyAiOmZvY3VzIiBdLAorCisgICAgICAgICAg
ICAvLyBtYXRjaGVzU2VsZWN0b3IoOmFjdGl2ZSkgcmVwb3J0cyBmYWxzZSB3aGVuIHRydWUgKElF
OS9PcGVyYSAxMS41KQorICAgICAgICAgICAgLy8gQSBzdXBwb3J0IHRlc3Qgd291bGQgcmVxdWly
ZSB0b28gbXVjaCBjb2RlICh3b3VsZCBpbmNsdWRlIGRvY3VtZW50IHJlYWR5KQorICAgICAgICAg
ICAgLy8ganVzdCBza2lwIG1hdGNoZXNTZWxlY3RvciBmb3IgOmFjdGl2ZQorICAgICAgICAgICAg
cmJ1Z2d5TWF0Y2hlcyA9IFsgIjphY3RpdmUiIF0sCisgICAgICAgICAgICBtYXRjaGVzID0gZG9j
RWxlbS5tYXRjaGVzU2VsZWN0b3IgfHwKKyAgICAgICAgICAgICAgICBkb2NFbGVtLm1vek1hdGNo
ZXNTZWxlY3RvciB8fAorICAgICAgICAgICAgICAgIGRvY0VsZW0ud2Via2l0TWF0Y2hlc1NlbGVj
dG9yIHx8CisgICAgICAgICAgICAgICAgZG9jRWxlbS5vTWF0Y2hlc1NlbGVjdG9yIHx8CisgICAg
ICAgICAgICAgICAgZG9jRWxlbS5tc01hdGNoZXNTZWxlY3RvcjsKKworICAgICAgICAvLyBCdWls
ZCBRU0EgcmVnZXgKKyAgICAgICAgLy8gUmVnZXggc3RyYXRlZ3kgYWRvcHRlZCBmcm9tIERpZWdv
IFBlcmluaQorICAgICAgICBhc3NlcnQoZnVuY3Rpb24oIGRpdiApIHsKKyAgICAgICAgICAgIC8v
IFNlbGVjdCBpcyBzZXQgdG8gZW1wdHkgc3RyaW5nIG9uIHB1cnBvc2UKKyAgICAgICAgICAgIC8v
IFRoaXMgaXMgdG8gdGVzdCBJRSdzIHRyZWF0bWVudCBvZiBub3QgZXhwbGljdGx5CisgICAgICAg
ICAgICAvLyBzZXR0aW5nIGEgYm9vbGVhbiBjb250ZW50IGF0dHJpYnV0ZSwKKyAgICAgICAgICAg
IC8vIHNpbmNlIGl0cyBwcmVzZW5jZSBzaG91bGQgYmUgZW5vdWdoCisgICAgICAgICAgICAvLyBo
dHRwOi8vYnVncy5qcXVlcnkuY29tL3RpY2tldC8xMjM1OQorICAgICAgICAgICAgZGl2LmlubmVy
SFRNTCA9ICI8c2VsZWN0PjxvcHRpb24gc2VsZWN0ZWQ9Jyc+PC9vcHRpb24+PC9zZWxlY3Q+IjsK
KworICAgICAgICAgICAgLy8gSUU4IC0gU29tZSBib29sZWFuIGF0dHJpYnV0ZXMgYXJlIG5vdCB0
cmVhdGVkIGNvcnJlY3RseQorICAgICAgICAgICAgaWYgKCAhZGl2LnF1ZXJ5U2VsZWN0b3JBbGwo
IltzZWxlY3RlZF0iKS5sZW5ndGggKSB7CisgICAgICAgICAgICAgICAgcmJ1Z2d5UVNBLnB1c2go
ICJcXFsiICsgd2hpdGVzcGFjZSArICIqKD86Y2hlY2tlZHxkaXNhYmxlZHxpc21hcHxtdWx0aXBs
ZXxyZWFkb25seXxzZWxlY3RlZHx2YWx1ZSkiICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIC8vIFdlYmtpdC9PcGVyYSAtIDpjaGVja2VkIHNob3VsZCByZXR1cm4gc2VsZWN0ZWQgb3B0
aW9uIGVsZW1lbnRzCisgICAgICAgICAgICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDExL1JF
Qy1jc3MzLXNlbGVjdG9ycy0yMDExMDkyOS8jY2hlY2tlZAorICAgICAgICAgICAgLy8gSUU4IHRo
cm93cyBlcnJvciBoZXJlIChkbyBub3QgcHV0IHRlc3RzIGFmdGVyIHRoaXMgb25lKQorICAgICAg
ICAgICAgaWYgKCAhZGl2LnF1ZXJ5U2VsZWN0b3JBbGwoIjpjaGVja2VkIikubGVuZ3RoICkgewor
ICAgICAgICAgICAgICAgIHJidWdneVFTQS5wdXNoKCI6Y2hlY2tlZCIpOworICAgICAgICAgICAg
fQorICAgICAgICB9KTsKKworICAgICAgICBhc3NlcnQoZnVuY3Rpb24oIGRpdiApIHsKKworICAg
ICAgICAgICAgLy8gT3BlcmEgMTAtMTIvSUU5IC0gXj0gJD0gKj0gYW5kIGVtcHR5IHZhbHVlcwor
ICAgICAgICAgICAgLy8gU2hvdWxkIG5vdCBzZWxlY3QgYW55dGhpbmcKKyAgICAgICAgICAgIGRp
di5pbm5lckhUTUwgPSAiPHAgdGVzdD0nJz48L3A+IjsKKyAgICAgICAgICAgIGlmICggZGl2LnF1
ZXJ5U2VsZWN0b3JBbGwoIlt0ZXN0Xj0nJ10iKS5sZW5ndGggKSB7CisgICAgICAgICAgICAgICAg
cmJ1Z2d5UVNBLnB1c2goICJbKl4kXT0iICsgd2hpdGVzcGFjZSArICIqKD86XCJcInwnJykiICk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEZGIDMuNSAtIDplbmFibGVkLzpkaXNh
YmxlZCBhbmQgaGlkZGVuIGVsZW1lbnRzIChoaWRkZW4gZWxlbWVudHMgYXJlIHN0aWxsIGVuYWJs
ZWQpCisgICAgICAgICAgICAvLyBJRTggdGhyb3dzIGVycm9yIGhlcmUgKGRvIG5vdCBwdXQgdGVz
dHMgYWZ0ZXIgdGhpcyBvbmUpCisgICAgICAgICAgICBkaXYuaW5uZXJIVE1MID0gIjxpbnB1dCB0
eXBlPSdoaWRkZW4nLz4iOworICAgICAgICAgICAgaWYgKCAhZGl2LnF1ZXJ5U2VsZWN0b3JBbGwo
IjplbmFibGVkIikubGVuZ3RoICkgeworICAgICAgICAgICAgICAgIHJidWdneVFTQS5wdXNoKCI6
ZW5hYmxlZCIsICI6ZGlzYWJsZWQiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisKKyAg
ICAgICAgLy8gcmJ1Z2d5UVNBIGFsd2F5cyBjb250YWlucyA6Zm9jdXMsIHNvIG5vIG5lZWQgZm9y
IGEgbGVuZ3RoIGNoZWNrCisgICAgICAgIHJidWdneVFTQSA9IC8qIHJidWdneVFTQS5sZW5ndGgg
JiYgKi8gbmV3IFJlZ0V4cCggcmJ1Z2d5UVNBLmpvaW4oInwiKSApOworCisgICAgICAgIHNlbGVj
dCA9IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCwgcmVzdWx0cywgc2VlZCwgeG1sICkgewor
ICAgICAgICAgICAgLy8gT25seSB1c2UgcXVlcnlTZWxlY3RvckFsbCB3aGVuIG5vdCBmaWx0ZXJp
bmcsCisgICAgICAgICAgICAvLyB3aGVuIHRoaXMgaXMgbm90IHhtbCwKKyAgICAgICAgICAgIC8v
IGFuZCB3aGVuIG5vIFFTQSBidWdzIGFwcGx5CisgICAgICAgICAgICBpZiAoICFzZWVkICYmICF4
bWwgJiYgIXJidWdneVFTQS50ZXN0KCBzZWxlY3RvciApICkgeworICAgICAgICAgICAgICAgIHZh
ciBncm91cHMsIGksCisgICAgICAgICAgICAgICAgICAgIG9sZCA9IHRydWUsCisgICAgICAgICAg
ICAgICAgICAgIG5pZCA9IGV4cGFuZG8sCisgICAgICAgICAgICAgICAgICAgIG5ld0NvbnRleHQg
PSBjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICBuZXdTZWxlY3RvciA9IGNvbnRleHQubm9k
ZVR5cGUgPT09IDkgJiYgc2VsZWN0b3I7CisKKyAgICAgICAgICAgICAgICAvLyBxU0Egd29ya3Mg
c3RyYW5nZWx5IG9uIEVsZW1lbnQtcm9vdGVkIHF1ZXJpZXMKKyAgICAgICAgICAgICAgICAvLyBX
ZSBjYW4gd29yayBhcm91bmQgdGhpcyBieSBzcGVjaWZ5aW5nIGFuIGV4dHJhIElEIG9uIHRoZSBy
b290CisgICAgICAgICAgICAgICAgLy8gYW5kIHdvcmtpbmcgdXAgZnJvbSB0aGVyZSAoVGhhbmtz
IHRvIEFuZHJldyBEdXBvbnQgZm9yIHRoZSB0ZWNobmlxdWUpCisgICAgICAgICAgICAgICAgLy8g
SUUgOCBkb2Vzbid0IHdvcmsgb24gb2JqZWN0IGVsZW1lbnRzCisgICAgICAgICAgICAgICAgaWYg
KCBjb250ZXh0Lm5vZGVUeXBlID09PSAxICYmIGNvbnRleHQubm9kZU5hbWUudG9Mb3dlckNhc2Uo
KSAhPT0gIm9iamVjdCIgKSB7CisgICAgICAgICAgICAgICAgICAgIGdyb3VwcyA9IHRva2VuaXpl
KCBzZWxlY3RvciApOworCisgICAgICAgICAgICAgICAgICAgIGlmICggKG9sZCA9IGNvbnRleHQu
Z2V0QXR0cmlidXRlKCJpZCIpKSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5pZCA9IG9s
ZC5yZXBsYWNlKCByZXNjYXBlLCAiXFwkJiIgKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuc2V0QXR0cmlidXRlKCAiaWQiLCBu
aWQgKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBuaWQgPSAi
W2lkPSciICsgbmlkICsgIiddICI7CisKKyAgICAgICAgICAgICAgICAgICAgaSA9IGdyb3Vwcy5s
ZW5ndGg7CisgICAgICAgICAgICAgICAgICAgIHdoaWxlICggaS0tICkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgZ3JvdXBzW2ldID0gbmlkICsgZ3JvdXBzW2ldLmpvaW4oIiIpOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIG5ld0NvbnRleHQgPSByc2libGlu
Zy50ZXN0KCBzZWxlY3RvciApICYmIGNvbnRleHQucGFyZW50Tm9kZSB8fCBjb250ZXh0OworICAg
ICAgICAgICAgICAgICAgICBuZXdTZWxlY3RvciA9IGdyb3Vwcy5qb2luKCIsIik7CisgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKCBuZXdTZWxlY3RvciApIHsKKyAgICAg
ICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHB1c2guYXBwbHko
IHJlc3VsdHMsIHNsaWNlLmNhbGwoIG5ld0NvbnRleHQucXVlcnlTZWxlY3RvckFsbCgKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBuZXdTZWxlY3RvcgorICAgICAgICAgICAgICAgICAgICAg
ICAgKSwgMCApICk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0czsKKyAg
ICAgICAgICAgICAgICAgICAgfSBjYXRjaChxc2FFcnJvcikgeworICAgICAgICAgICAgICAgICAg
ICB9IGZpbmFsbHkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhb2xkICkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVtb3ZlQXR0cmlidXRlKCJpZCIpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gb2xkU2VsZWN0
KCBzZWxlY3RvciwgY29udGV4dCwgcmVzdWx0cywgc2VlZCwgeG1sICk7CisgICAgICAgIH07CisK
KyAgICAgICAgaWYgKCBtYXRjaGVzICkgeworICAgICAgICAgICAgYXNzZXJ0KGZ1bmN0aW9uKCBk
aXYgKSB7CisgICAgICAgICAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIGl0J3MgcG9zc2libGUg
dG8gZG8gbWF0Y2hlc1NlbGVjdG9yCisgICAgICAgICAgICAgICAgLy8gb24gYSBkaXNjb25uZWN0
ZWQgbm9kZSAoSUUgOSkKKyAgICAgICAgICAgICAgICBkaXNjb25uZWN0ZWRNYXRjaCA9IG1hdGNo
ZXMuY2FsbCggZGl2LCAiZGl2IiApOworCisgICAgICAgICAgICAgICAgLy8gVGhpcyBzaG91bGQg
ZmFpbCB3aXRoIGFuIGV4Y2VwdGlvbgorICAgICAgICAgICAgICAgIC8vIEdlY2tvIGRvZXMgbm90
IGVycm9yLCByZXR1cm5zIGZhbHNlIGluc3RlYWQKKyAgICAgICAgICAgICAgICB0cnkgeworICAg
ICAgICAgICAgICAgICAgICBtYXRjaGVzLmNhbGwoIGRpdiwgIlt0ZXN0IT0nJ106c2l6emxlIiAp
OworICAgICAgICAgICAgICAgICAgICByYnVnZ3lNYXRjaGVzLnB1c2goICIhPSIsIHBzZXVkb3Mg
KTsKKyAgICAgICAgICAgICAgICB9IGNhdGNoICggZSApIHt9CisgICAgICAgICAgICB9KTsKKwor
ICAgICAgICAgICAgLy8gcmJ1Z2d5TWF0Y2hlcyBhbHdheXMgY29udGFpbnMgOmFjdGl2ZSBhbmQg
OmZvY3VzLCBzbyBubyBuZWVkIGZvciBhIGxlbmd0aCBjaGVjaworICAgICAgICAgICAgcmJ1Z2d5
TWF0Y2hlcyA9IC8qIHJidWdneU1hdGNoZXMubGVuZ3RoICYmICovIG5ldyBSZWdFeHAoIHJidWdn
eU1hdGNoZXMuam9pbigifCIpICk7CisKKyAgICAgICAgICAgIFNpenpsZS5tYXRjaGVzU2VsZWN0
b3IgPSBmdW5jdGlvbiggZWxlbSwgZXhwciApIHsKKyAgICAgICAgICAgICAgICAvLyBNYWtlIHN1
cmUgdGhhdCBhdHRyaWJ1dGUgc2VsZWN0b3JzIGFyZSBxdW90ZWQKKyAgICAgICAgICAgICAgICBl
eHByID0gZXhwci5yZXBsYWNlKCByYXR0cmlidXRlUXVvdGVzLCAiPSckMSddIiApOworCisgICAg
ICAgICAgICAgICAgLy8gcmJ1Z2d5TWF0Y2hlcyBhbHdheXMgY29udGFpbnMgOmFjdGl2ZSwgc28g
bm8gbmVlZCBmb3IgYW4gZXhpc3RlbmNlIGNoZWNrCisgICAgICAgICAgICAgICAgaWYgKCAhaXNY
TUwoIGVsZW0gKSAmJiAhcmJ1Z2d5TWF0Y2hlcy50ZXN0KCBleHByICkgJiYgIXJidWdneVFTQS50
ZXN0KCBleHByICkgKSB7CisgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICB2YXIgcmV0ID0gbWF0Y2hlcy5jYWxsKCBlbGVtLCBleHByICk7CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIElFIDkncyBtYXRjaGVzU2VsZWN0b3IgcmV0dXJucyBmYWxz
ZSBvbiBkaXNjb25uZWN0ZWQgbm9kZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcmV0
IHx8IGRpc2Nvbm5lY3RlZE1hdGNoIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIEFzIHdlbGwsIGRpc2Nvbm5lY3RlZCBub2RlcyBhcmUgc2FpZCB0byBiZSBpbiBhIGRvY3Vt
ZW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZyYWdtZW50IGluIElFIDkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5kb2N1bWVudCAmJiBlbGVtLmRv
Y3VtZW50Lm5vZGVUeXBlICE9PSAxMSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gcmV0OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICB9IGNhdGNoKGUpIHt9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgcmV0
dXJuIFNpenpsZSggZXhwciwgbnVsbCwgbnVsbCwgWyBlbGVtIF0gKS5sZW5ndGggPiAwOworICAg
ICAgICAgICAgfTsKKyAgICAgICAgfQorICAgIH0pKCk7Cit9CisKKy8vIERlcHJlY2F0ZWQKK0V4
cHIucHNldWRvc1sibnRoIl0gPSBFeHByLnBzZXVkb3NbImVxIl07CisKKy8vIEJhY2stY29tcGF0
CitmdW5jdGlvbiBzZXRGaWx0ZXJzKCkge30KK0V4cHIuZmlsdGVycyA9IHNldEZpbHRlcnMucHJv
dG90eXBlID0gRXhwci5wc2V1ZG9zOworRXhwci5zZXRGaWx0ZXJzID0gbmV3IHNldEZpbHRlcnMo
KTsKKworLy8gT3ZlcnJpZGUgc2l6emxlIGF0dHJpYnV0ZSByZXRyaWV2YWwKK1NpenpsZS5hdHRy
ID0galF1ZXJ5LmF0dHI7CitqUXVlcnkuZmluZCA9IFNpenpsZTsKK2pRdWVyeS5leHByID0gU2l6
emxlLnNlbGVjdG9yczsKK2pRdWVyeS5leHByWyI6Il0gPSBqUXVlcnkuZXhwci5wc2V1ZG9zOwor
alF1ZXJ5LnVuaXF1ZSA9IFNpenpsZS51bmlxdWVTb3J0OworalF1ZXJ5LnRleHQgPSBTaXp6bGUu
Z2V0VGV4dDsKK2pRdWVyeS5pc1hNTERvYyA9IFNpenpsZS5pc1hNTDsKK2pRdWVyeS5jb250YWlu
cyA9IFNpenpsZS5jb250YWluczsKKworCit9KSggd2luZG93ICk7Cit2YXIgcnVudGlsID0gL1Vu
dGlsJC8sCisgICAgcnBhcmVudHNwcmV2ID0gL14oPzpwYXJlbnRzfHByZXYoPzpVbnRpbHxBbGwp
KS8sCisgICAgaXNTaW1wbGUgPSAvXi5bXjojXFtcLixdKiQvLAorICAgIHJuZWVkc0NvbnRleHQg
PSBqUXVlcnkuZXhwci5tYXRjaC5uZWVkc0NvbnRleHQsCisgICAgLy8gbWV0aG9kcyBndWFyYW50
ZWVkIHRvIHByb2R1Y2UgYSB1bmlxdWUgc2V0IHdoZW4gc3RhcnRpbmcgZnJvbSBhIHVuaXF1ZSBz
ZXQKKyAgICBndWFyYW50ZWVkVW5pcXVlID0geworICAgICAgICBjaGlsZHJlbjogdHJ1ZSwKKyAg
ICAgICAgY29udGVudHM6IHRydWUsCisgICAgICAgIG5leHQ6IHRydWUsCisgICAgICAgIHByZXY6
IHRydWUKKyAgICB9OworCitqUXVlcnkuZm4uZXh0ZW5kKHsKKyAgICBmaW5kOiBmdW5jdGlvbigg
c2VsZWN0b3IgKSB7CisgICAgICAgIHZhciBpLCBsLCBsZW5ndGgsIG4sIHIsIHJldCwKKyAgICAg
ICAgICAgIHNlbGYgPSB0aGlzOworCisgICAgICAgIGlmICggdHlwZW9mIHNlbGVjdG9yICE9PSAi
c3RyaW5nIiApIHsKKyAgICAgICAgICAgIHJldHVybiBqUXVlcnkoIHNlbGVjdG9yICkuZmlsdGVy
KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGZvciAoIGkgPSAwLCBsID0gc2VsZi5sZW5n
dGg7IGkgPCBsOyBpKysgKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5LmNvbnRh
aW5zKCBzZWxmWyBpIF0sIHRoaXMgKSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfSk7CisgICAgICAgIH0KKworICAgICAgICByZXQgPSB0aGlzLnB1c2hTdGFjayggIiIs
ICJmaW5kIiwgc2VsZWN0b3IgKTsKKworICAgICAgICBmb3IgKCBpID0gMCwgbCA9IHRoaXMubGVu
Z3RoOyBpIDwgbDsgaSsrICkgeworICAgICAgICAgICAgbGVuZ3RoID0gcmV0Lmxlbmd0aDsKKyAg
ICAgICAgICAgIGpRdWVyeS5maW5kKCBzZWxlY3RvciwgdGhpc1tpXSwgcmV0ICk7CisKKyAgICAg
ICAgICAgIGlmICggaSA+IDAgKSB7CisgICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQg
dGhlIHJlc3VsdHMgYXJlIHVuaXF1ZQorICAgICAgICAgICAgICAgIGZvciAoIG4gPSBsZW5ndGg7
IG4gPCByZXQubGVuZ3RoOyBuKysgKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoIHIgPSAw
OyByIDwgbGVuZ3RoOyByKysgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHJldFty
XSA9PT0gcmV0W25dICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldC5zcGxpY2Uo
bi0tLCAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZXQ7CisgICAgfSwK
KworICAgIGhhczogZnVuY3Rpb24oIHRhcmdldCApIHsKKyAgICAgICAgdmFyIGksCisgICAgICAg
ICAgICB0YXJnZXRzID0galF1ZXJ5KCB0YXJnZXQsIHRoaXMgKSwKKyAgICAgICAgICAgIGxlbiA9
IHRhcmdldHMubGVuZ3RoOworCisgICAgICAgIHJldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbigp
IHsKKyAgICAgICAgICAgIGZvciAoIGkgPSAwOyBpIDwgbGVuOyBpKysgKSB7CisgICAgICAgICAg
ICAgICAgaWYgKCBqUXVlcnkuY29udGFpbnMoIHRoaXMsIHRhcmdldHNbaV0gKSApIHsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICB9KTsKKyAgICB9LAorCisgICAgbm90OiBmdW5jdGlvbiggc2VsZWN0b3Ig
KSB7CisgICAgICAgIHJldHVybiB0aGlzLnB1c2hTdGFjayggd2lubm93KHRoaXMsIHNlbGVjdG9y
LCBmYWxzZSksICJub3QiLCBzZWxlY3Rvcik7CisgICAgfSwKKworICAgIGZpbHRlcjogZnVuY3Rp
b24oIHNlbGVjdG9yICkgeworICAgICAgICByZXR1cm4gdGhpcy5wdXNoU3RhY2soIHdpbm5vdyh0
aGlzLCBzZWxlY3RvciwgdHJ1ZSksICJmaWx0ZXIiLCBzZWxlY3RvciApOworICAgIH0sCisKKyAg
ICBpczogZnVuY3Rpb24oIHNlbGVjdG9yICkgeworICAgICAgICByZXR1cm4gISFzZWxlY3RvciAm
JiAoCisgICAgICAgICAgICB0eXBlb2Ygc2VsZWN0b3IgPT09ICJzdHJpbmciID8KKyAgICAgICAg
ICAgICAgICAvLyBJZiB0aGlzIGlzIGEgcG9zaXRpb25hbC9yZWxhdGl2ZSBzZWxlY3RvciwgY2hl
Y2sgbWVtYmVyc2hpcCBpbiB0aGUgcmV0dXJuZWQgc2V0CisgICAgICAgICAgICAgICAgLy8gc28g
JCgicDpmaXJzdCIpLmlzKCJwOmxhc3QiKSB3b24ndCByZXR1cm4gdHJ1ZSBmb3IgYSBkb2Mgd2l0
aCB0d28gInAiLgorICAgICAgICAgICAgICAgIHJuZWVkc0NvbnRleHQudGVzdCggc2VsZWN0b3Ig
KSA/CisgICAgICAgICAgICAgICAgICAgIGpRdWVyeSggc2VsZWN0b3IsIHRoaXMuY29udGV4dCAp
LmluZGV4KCB0aGlzWzBdICkgPj0gMCA6CisgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5maWx0
ZXIoIHNlbGVjdG9yLCB0aGlzICkubGVuZ3RoID4gMCA6CisgICAgICAgICAgICAgICAgdGhpcy5m
aWx0ZXIoIHNlbGVjdG9yICkubGVuZ3RoID4gMCApOworICAgIH0sCisKKyAgICBjbG9zZXN0OiBm
dW5jdGlvbiggc2VsZWN0b3JzLCBjb250ZXh0ICkgeworICAgICAgICB2YXIgY3VyLAorICAgICAg
ICAgICAgaSA9IDAsCisgICAgICAgICAgICBsID0gdGhpcy5sZW5ndGgsCisgICAgICAgICAgICBy
ZXQgPSBbXSwKKyAgICAgICAgICAgIHBvcyA9IHJuZWVkc0NvbnRleHQudGVzdCggc2VsZWN0b3Jz
ICkgfHwgdHlwZW9mIHNlbGVjdG9ycyAhPT0gInN0cmluZyIgPworICAgICAgICAgICAgICAgIGpR
dWVyeSggc2VsZWN0b3JzLCBjb250ZXh0IHx8IHRoaXMuY29udGV4dCApIDoKKyAgICAgICAgICAg
ICAgICAwOworCisgICAgICAgIGZvciAoIDsgaSA8IGw7IGkrKyApIHsKKyAgICAgICAgICAgIGN1
ciA9IHRoaXNbaV07CisKKyAgICAgICAgICAgIHdoaWxlICggY3VyICYmIGN1ci5vd25lckRvY3Vt
ZW50ICYmIGN1ciAhPT0gY29udGV4dCAmJiBjdXIubm9kZVR5cGUgIT09IDExICkgeworICAgICAg
ICAgICAgICAgIGlmICggcG9zID8gcG9zLmluZGV4KGN1cikgPiAtMSA6IGpRdWVyeS5maW5kLm1h
dGNoZXNTZWxlY3RvcihjdXIsIHNlbGVjdG9ycykgKSB7CisgICAgICAgICAgICAgICAgICAgIHJl
dC5wdXNoKCBjdXIgKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGN1ciA9IGN1ci5wYXJlbnROb2RlOworICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgcmV0ID0gcmV0Lmxlbmd0aCA+IDEgPyBqUXVlcnkudW5p
cXVlKCByZXQgKSA6IHJldDsKKworICAgICAgICByZXR1cm4gdGhpcy5wdXNoU3RhY2soIHJldCwg
ImNsb3Nlc3QiLCBzZWxlY3RvcnMgKTsKKyAgICB9LAorCisgICAgLy8gRGV0ZXJtaW5lIHRoZSBw
b3NpdGlvbiBvZiBhbiBlbGVtZW50IHdpdGhpbgorICAgIC8vIHRoZSBtYXRjaGVkIHNldCBvZiBl
bGVtZW50cworICAgIGluZGV4OiBmdW5jdGlvbiggZWxlbSApIHsKKworICAgICAgICAvLyBObyBh
cmd1bWVudCwgcmV0dXJuIGluZGV4IGluIHBhcmVudAorICAgICAgICBpZiAoICFlbGVtICkgewor
ICAgICAgICAgICAgcmV0dXJuICggdGhpc1swXSAmJiB0aGlzWzBdLnBhcmVudE5vZGUgKSA/IHRo
aXMucHJldkFsbCgpLmxlbmd0aCA6IC0xOworICAgICAgICB9CisKKyAgICAgICAgLy8gaW5kZXgg
aW4gc2VsZWN0b3IKKyAgICAgICAgaWYgKCB0eXBlb2YgZWxlbSA9PT0gInN0cmluZyIgKSB7Cisg
ICAgICAgICAgICByZXR1cm4galF1ZXJ5LmluQXJyYXkoIHRoaXNbMF0sIGpRdWVyeSggZWxlbSAp
ICk7CisgICAgICAgIH0KKworICAgICAgICAvLyBMb2NhdGUgdGhlIHBvc2l0aW9uIG9mIHRoZSBk
ZXNpcmVkIGVsZW1lbnQKKyAgICAgICAgcmV0dXJuIGpRdWVyeS5pbkFycmF5KAorICAgICAgICAg
ICAgLy8gSWYgaXQgcmVjZWl2ZXMgYSBqUXVlcnkgb2JqZWN0LCB0aGUgZmlyc3QgZWxlbWVudCBp
cyB1c2VkCisgICAgICAgICAgICBlbGVtLmpxdWVyeSA/IGVsZW1bMF0gOiBlbGVtLCB0aGlzICk7
CisgICAgfSwKKworICAgIGFkZDogZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0ICkgeworICAg
ICAgICB2YXIgc2V0ID0gdHlwZW9mIHNlbGVjdG9yID09PSAic3RyaW5nIiA/CisgICAgICAgICAg
ICAgICAgalF1ZXJ5KCBzZWxlY3RvciwgY29udGV4dCApIDoKKyAgICAgICAgICAgICAgICBqUXVl
cnkubWFrZUFycmF5KCBzZWxlY3RvciAmJiBzZWxlY3Rvci5ub2RlVHlwZSA/IFsgc2VsZWN0b3Ig
XSA6IHNlbGVjdG9yICksCisgICAgICAgICAgICBhbGwgPSBqUXVlcnkubWVyZ2UoIHRoaXMuZ2V0
KCksIHNldCApOworCisgICAgICAgIHJldHVybiB0aGlzLnB1c2hTdGFjayggaXNEaXNjb25uZWN0
ZWQoIHNldFswXSApIHx8IGlzRGlzY29ubmVjdGVkKCBhbGxbMF0gKSA/CisgICAgICAgICAgICBh
bGwgOgorICAgICAgICAgICAgalF1ZXJ5LnVuaXF1ZSggYWxsICkgKTsKKyAgICB9LAorCisgICAg
YWRkQmFjazogZnVuY3Rpb24oIHNlbGVjdG9yICkgeworICAgICAgICByZXR1cm4gdGhpcy5hZGQo
IHNlbGVjdG9yID09IG51bGwgPworICAgICAgICAgICAgdGhpcy5wcmV2T2JqZWN0IDogdGhpcy5w
cmV2T2JqZWN0LmZpbHRlcihzZWxlY3RvcikKKyAgICAgICAgKTsKKyAgICB9Cit9KTsKKworalF1
ZXJ5LmZuLmFuZFNlbGYgPSBqUXVlcnkuZm4uYWRkQmFjazsKKworLy8gQSBwYWluZnVsbHkgc2lt
cGxlIGNoZWNrIHRvIHNlZSBpZiBhbiBlbGVtZW50IGlzIGRpc2Nvbm5lY3RlZAorLy8gZnJvbSBh
IGRvY3VtZW50IChzaG91bGQgYmUgaW1wcm92ZWQsIHdoZXJlIGZlYXNpYmxlKS4KK2Z1bmN0aW9u
IGlzRGlzY29ubmVjdGVkKCBub2RlICkgeworICAgIHJldHVybiAhbm9kZSB8fCAhbm9kZS5wYXJl
bnROb2RlIHx8IG5vZGUucGFyZW50Tm9kZS5ub2RlVHlwZSA9PT0gMTE7Cit9CisKK2Z1bmN0aW9u
IHNpYmxpbmcoIGN1ciwgZGlyICkgeworICAgIGRvIHsKKyAgICAgICAgY3VyID0gY3VyWyBkaXIg
XTsKKyAgICB9IHdoaWxlICggY3VyICYmIGN1ci5ub2RlVHlwZSAhPT0gMSApOworCisgICAgcmV0
dXJuIGN1cjsKK30KKworalF1ZXJ5LmVhY2goeworICAgIHBhcmVudDogZnVuY3Rpb24oIGVsZW0g
KSB7CisgICAgICAgIHZhciBwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGU7CisgICAgICAgIHJldHVy
biBwYXJlbnQgJiYgcGFyZW50Lm5vZGVUeXBlICE9PSAxMSA/IHBhcmVudCA6IG51bGw7CisgICAg
fSwKKyAgICBwYXJlbnRzOiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgcmV0dXJuIGpRdWVy
eS5kaXIoIGVsZW0sICJwYXJlbnROb2RlIiApOworICAgIH0sCisgICAgcGFyZW50c1VudGlsOiBm
dW5jdGlvbiggZWxlbSwgaSwgdW50aWwgKSB7CisgICAgICAgIHJldHVybiBqUXVlcnkuZGlyKCBl
bGVtLCAicGFyZW50Tm9kZSIsIHVudGlsICk7CisgICAgfSwKKyAgICBuZXh0OiBmdW5jdGlvbigg
ZWxlbSApIHsKKyAgICAgICAgcmV0dXJuIHNpYmxpbmcoIGVsZW0sICJuZXh0U2libGluZyIgKTsK
KyAgICB9LAorICAgIHByZXY6IGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICByZXR1cm4gc2li
bGluZyggZWxlbSwgInByZXZpb3VzU2libGluZyIgKTsKKyAgICB9LAorICAgIG5leHRBbGw6IGZ1
bmN0aW9uKCBlbGVtICkgeworICAgICAgICByZXR1cm4galF1ZXJ5LmRpciggZWxlbSwgIm5leHRT
aWJsaW5nIiApOworICAgIH0sCisgICAgcHJldkFsbDogZnVuY3Rpb24oIGVsZW0gKSB7CisgICAg
ICAgIHJldHVybiBqUXVlcnkuZGlyKCBlbGVtLCAicHJldmlvdXNTaWJsaW5nIiApOworICAgIH0s
CisgICAgbmV4dFVudGlsOiBmdW5jdGlvbiggZWxlbSwgaSwgdW50aWwgKSB7CisgICAgICAgIHJl
dHVybiBqUXVlcnkuZGlyKCBlbGVtLCAibmV4dFNpYmxpbmciLCB1bnRpbCApOworICAgIH0sCisg
ICAgcHJldlVudGlsOiBmdW5jdGlvbiggZWxlbSwgaSwgdW50aWwgKSB7CisgICAgICAgIHJldHVy
biBqUXVlcnkuZGlyKCBlbGVtLCAicHJldmlvdXNTaWJsaW5nIiwgdW50aWwgKTsKKyAgICB9LAor
ICAgIHNpYmxpbmdzOiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgcmV0dXJuIGpRdWVyeS5z
aWJsaW5nKCAoIGVsZW0ucGFyZW50Tm9kZSB8fCB7fSApLmZpcnN0Q2hpbGQsIGVsZW0gKTsKKyAg
ICB9LAorICAgIGNoaWxkcmVuOiBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgcmV0dXJuIGpR
dWVyeS5zaWJsaW5nKCBlbGVtLmZpcnN0Q2hpbGQgKTsKKyAgICB9LAorICAgIGNvbnRlbnRzOiBm
dW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgcmV0dXJuIGpRdWVyeS5ub2RlTmFtZSggZWxlbSwg
ImlmcmFtZSIgKSA/CisgICAgICAgICAgICBlbGVtLmNvbnRlbnREb2N1bWVudCB8fCBlbGVtLmNv
bnRlbnRXaW5kb3cuZG9jdW1lbnQgOgorICAgICAgICAgICAgalF1ZXJ5Lm1lcmdlKCBbXSwgZWxl
bS5jaGlsZE5vZGVzICk7CisgICAgfQorfSwgZnVuY3Rpb24oIG5hbWUsIGZuICkgeworICAgIGpR
dWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHVudGlsLCBzZWxlY3RvciApIHsKKyAgICAgICAg
dmFyIHJldCA9IGpRdWVyeS5tYXAoIHRoaXMsIGZuLCB1bnRpbCApOworCisgICAgICAgIGlmICgg
IXJ1bnRpbC50ZXN0KCBuYW1lICkgKSB7CisgICAgICAgICAgICBzZWxlY3RvciA9IHVudGlsOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKCBzZWxlY3RvciAmJiB0eXBlb2Ygc2VsZWN0b3IgPT09
ICJzdHJpbmciICkgeworICAgICAgICAgICAgcmV0ID0galF1ZXJ5LmZpbHRlciggc2VsZWN0b3Is
IHJldCApOworICAgICAgICB9CisKKyAgICAgICAgcmV0ID0gdGhpcy5sZW5ndGggPiAxICYmICFn
dWFyYW50ZWVkVW5pcXVlWyBuYW1lIF0gPyBqUXVlcnkudW5pcXVlKCByZXQgKSA6IHJldDsKKwor
ICAgICAgICBpZiAoIHRoaXMubGVuZ3RoID4gMSAmJiBycGFyZW50c3ByZXYudGVzdCggbmFtZSAp
ICkgeworICAgICAgICAgICAgcmV0ID0gcmV0LnJldmVyc2UoKTsKKyAgICAgICAgfQorCisgICAg
ICAgIHJldHVybiB0aGlzLnB1c2hTdGFjayggcmV0LCBuYW1lLCBjb3JlX3NsaWNlLmNhbGwoIGFy
Z3VtZW50cyApLmpvaW4oIiwiKSApOworICAgIH07Cit9KTsKKworalF1ZXJ5LmV4dGVuZCh7Cisg
ICAgZmlsdGVyOiBmdW5jdGlvbiggZXhwciwgZWxlbXMsIG5vdCApIHsKKyAgICAgICAgaWYgKCBu
b3QgKSB7CisgICAgICAgICAgICBleHByID0gIjpub3QoIiArIGV4cHIgKyAiKSI7CisgICAgICAg
IH0KKworICAgICAgICByZXR1cm4gZWxlbXMubGVuZ3RoID09PSAxID8KKyAgICAgICAgICAgIGpR
dWVyeS5maW5kLm1hdGNoZXNTZWxlY3RvcihlbGVtc1swXSwgZXhwcikgPyBbIGVsZW1zWzBdIF0g
OiBbXSA6CisgICAgICAgICAgICBqUXVlcnkuZmluZC5tYXRjaGVzKGV4cHIsIGVsZW1zKTsKKyAg
ICB9LAorCisgICAgZGlyOiBmdW5jdGlvbiggZWxlbSwgZGlyLCB1bnRpbCApIHsKKyAgICAgICAg
dmFyIG1hdGNoZWQgPSBbXSwKKyAgICAgICAgICAgIGN1ciA9IGVsZW1bIGRpciBdOworCisgICAg
ICAgIHdoaWxlICggY3VyICYmIGN1ci5ub2RlVHlwZSAhPT0gOSAmJiAodW50aWwgPT09IHVuZGVm
aW5lZCB8fCBjdXIubm9kZVR5cGUgIT09IDEgfHwgIWpRdWVyeSggY3VyICkuaXMoIHVudGlsICkp
ICkgeworICAgICAgICAgICAgaWYgKCBjdXIubm9kZVR5cGUgPT09IDEgKSB7CisgICAgICAgICAg
ICAgICAgbWF0Y2hlZC5wdXNoKCBjdXIgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGN1
ciA9IGN1cltkaXJdOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtYXRjaGVkOworICAgIH0s
CisKKyAgICBzaWJsaW5nOiBmdW5jdGlvbiggbiwgZWxlbSApIHsKKyAgICAgICAgdmFyIHIgPSBb
XTsKKworICAgICAgICBmb3IgKCA7IG47IG4gPSBuLm5leHRTaWJsaW5nICkgeworICAgICAgICAg
ICAgaWYgKCBuLm5vZGVUeXBlID09PSAxICYmIG4gIT09IGVsZW0gKSB7CisgICAgICAgICAgICAg
ICAgci5wdXNoKCBuICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1
cm4gcjsKKyAgICB9Cit9KTsKKworLy8gSW1wbGVtZW50IHRoZSBpZGVudGljYWwgZnVuY3Rpb25h
bGl0eSBmb3IgZmlsdGVyIGFuZCBub3QKK2Z1bmN0aW9uIHdpbm5vdyggZWxlbWVudHMsIHF1YWxp
Zmllciwga2VlcCApIHsKKworICAgIC8vIENhbid0IHBhc3MgbnVsbCBvciB1bmRlZmluZWQgdG8g
aW5kZXhPZiBpbiBGaXJlZm94IDQKKyAgICAvLyBTZXQgdG8gMCB0byBza2lwIHN0cmluZyBjaGVj
aworICAgIHF1YWxpZmllciA9IHF1YWxpZmllciB8fCAwOworCisgICAgaWYgKCBqUXVlcnkuaXNG
dW5jdGlvbiggcXVhbGlmaWVyICkgKSB7CisgICAgICAgIHJldHVybiBqUXVlcnkuZ3JlcChlbGVt
ZW50cywgZnVuY3Rpb24oIGVsZW0sIGkgKSB7CisgICAgICAgICAgICB2YXIgcmV0VmFsID0gISFx
dWFsaWZpZXIuY2FsbCggZWxlbSwgaSwgZWxlbSApOworICAgICAgICAgICAgcmV0dXJuIHJldFZh
bCA9PT0ga2VlcDsKKyAgICAgICAgfSk7CisKKyAgICB9IGVsc2UgaWYgKCBxdWFsaWZpZXIubm9k
ZVR5cGUgKSB7CisgICAgICAgIHJldHVybiBqUXVlcnkuZ3JlcChlbGVtZW50cywgZnVuY3Rpb24o
IGVsZW0sIGkgKSB7CisgICAgICAgICAgICByZXR1cm4gKCBlbGVtID09PSBxdWFsaWZpZXIgKSA9
PT0ga2VlcDsKKyAgICAgICAgfSk7CisKKyAgICB9IGVsc2UgaWYgKCB0eXBlb2YgcXVhbGlmaWVy
ID09PSAic3RyaW5nIiApIHsKKyAgICAgICAgdmFyIGZpbHRlcmVkID0galF1ZXJ5LmdyZXAoZWxl
bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICAgICAgcmV0dXJuIGVsZW0ubm9kZVR5
cGUgPT09IDE7CisgICAgICAgIH0pOworCisgICAgICAgIGlmICggaXNTaW1wbGUudGVzdCggcXVh
bGlmaWVyICkgKSB7CisgICAgICAgICAgICByZXR1cm4galF1ZXJ5LmZpbHRlcihxdWFsaWZpZXIs
IGZpbHRlcmVkLCAha2VlcCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBxdWFsaWZp
ZXIgPSBqUXVlcnkuZmlsdGVyKCBxdWFsaWZpZXIsIGZpbHRlcmVkICk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICByZXR1cm4galF1ZXJ5LmdyZXAoZWxlbWVudHMsIGZ1bmN0aW9uKCBlbGVtLCBp
ICkgeworICAgICAgICByZXR1cm4gKCBqUXVlcnkuaW5BcnJheSggZWxlbSwgcXVhbGlmaWVyICkg
Pj0gMCApID09PSBrZWVwOworICAgIH0pOworfQorZnVuY3Rpb24gY3JlYXRlU2FmZUZyYWdtZW50
KCBkb2N1bWVudCApIHsKKyAgICB2YXIgbGlzdCA9IG5vZGVOYW1lcy5zcGxpdCggInwiICksCisg
ICAgc2FmZUZyYWcgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7CisKKyAgICBp
ZiAoIHNhZmVGcmFnLmNyZWF0ZUVsZW1lbnQgKSB7CisgICAgICAgIHdoaWxlICggbGlzdC5sZW5n
dGggKSB7CisgICAgICAgICAgICBzYWZlRnJhZy5jcmVhdGVFbGVtZW50KAorICAgICAgICAgICAg
ICAgIGxpc3QucG9wKCkKKyAgICAgICAgICAgICk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0
dXJuIHNhZmVGcmFnOworfQorCit2YXIgbm9kZU5hbWVzID0gImFiYnJ8YXJ0aWNsZXxhc2lkZXxh
dWRpb3xiZGl8Y2FudmFzfGRhdGF8ZGF0YWxpc3R8ZGV0YWlsc3xmaWdjYXB0aW9ufGZpZ3VyZXxm
b290ZXJ8IiArCisgICAgICAgICJoZWFkZXJ8aGdyb3VwfG1hcmt8bWV0ZXJ8bmF2fG91dHB1dHxw
cm9ncmVzc3xzZWN0aW9ufHN1bW1hcnl8dGltZXx2aWRlbyIsCisgICAgcmlubGluZWpRdWVyeSA9
IC8galF1ZXJ5XGQrPSIoPzpudWxsfFxkKykiL2csCisgICAgcmxlYWRpbmdXaGl0ZXNwYWNlID0g
L15ccysvLAorICAgIHJ4aHRtbFRhZyA9IC88KD8hYXJlYXxicnxjb2x8ZW1iZWR8aHJ8aW1nfGlu
cHV0fGxpbmt8bWV0YXxwYXJhbSkoKFtcdzpdKylbXj5dKilcLz4vZ2ksCisgICAgcnRhZ05hbWUg
PSAvPChbXHc6XSspLywKKyAgICBydGJvZHkgPSAvPHRib2R5L2ksCisgICAgcmh0bWwgPSAvPHwm
Iz9cdys7LywKKyAgICBybm9Jbm5lcmh0bWwgPSAvPCg/OnNjcmlwdHxzdHlsZXxsaW5rKS9pLAor
ICAgIHJub2NhY2hlID0gLzwoPzpzY3JpcHR8b2JqZWN0fGVtYmVkfG9wdGlvbnxzdHlsZSkvaSwK
KyAgICBybm9zaGltY2FjaGUgPSBuZXcgUmVnRXhwKCI8KD86IiArIG5vZGVOYW1lcyArICIpW1xc
cy8+XSIsICJpIiksCisgICAgcmNoZWNrYWJsZVR5cGUgPSAvXig/OmNoZWNrYm94fHJhZGlvKSQv
LAorICAgIC8vIGNoZWNrZWQ9ImNoZWNrZWQiIG9yIGNoZWNrZWQKKyAgICByY2hlY2tlZCA9IC9j
aGVja2VkXHMqKD86W149XXw9XHMqLmNoZWNrZWQuKS9pLAorICAgIHJzY3JpcHRUeXBlID0gL1wv
KGphdmF8ZWNtYSlzY3JpcHQvaSwKKyAgICByY2xlYW5TY3JpcHQgPSAvXlxzKjwhKD86XFtDREFU
QVxbfFwtXC0pfFtcXVwtXXsyfT5ccyokL2csCisgICAgd3JhcE1hcCA9IHsKKyAgICAgICAgb3B0
aW9uOiBbIDEsICI8c2VsZWN0IG11bHRpcGxlPSdtdWx0aXBsZSc+IiwgIjwvc2VsZWN0PiIgXSwK
KyAgICAgICAgbGVnZW5kOiBbIDEsICI8ZmllbGRzZXQ+IiwgIjwvZmllbGRzZXQ+IiBdLAorICAg
ICAgICB0aGVhZDogWyAxLCAiPHRhYmxlPiIsICI8L3RhYmxlPiIgXSwKKyAgICAgICAgdHI6IFsg
MiwgIjx0YWJsZT48dGJvZHk+IiwgIjwvdGJvZHk+PC90YWJsZT4iIF0sCisgICAgICAgIHRkOiBb
IDMsICI8dGFibGU+PHRib2R5Pjx0cj4iLCAiPC90cj48L3Rib2R5PjwvdGFibGU+IiBdLAorICAg
ICAgICBjb2w6IFsgMiwgIjx0YWJsZT48dGJvZHk+PC90Ym9keT48Y29sZ3JvdXA+IiwgIjwvY29s
Z3JvdXA+PC90YWJsZT4iIF0sCisgICAgICAgIGFyZWE6IFsgMSwgIjxtYXA+IiwgIjwvbWFwPiIg
XSwKKyAgICAgICAgX2RlZmF1bHQ6IFsgMCwgIiIsICIiIF0KKyAgICB9LAorICAgIHNhZmVGcmFn
bWVudCA9IGNyZWF0ZVNhZmVGcmFnbWVudCggZG9jdW1lbnQgKSwKKyAgICBmcmFnbWVudERpdiA9
IHNhZmVGcmFnbWVudC5hcHBlbmRDaGlsZCggZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iikg
KTsKKword3JhcE1hcC5vcHRncm91cCA9IHdyYXBNYXAub3B0aW9uOword3JhcE1hcC50Ym9keSA9
IHdyYXBNYXAudGZvb3QgPSB3cmFwTWFwLmNvbGdyb3VwID0gd3JhcE1hcC5jYXB0aW9uID0gd3Jh
cE1hcC50aGVhZDsKK3dyYXBNYXAudGggPSB3cmFwTWFwLnRkOworCisvLyBJRTYtOCBjYW4ndCBz
ZXJpYWxpemUgbGluaywgc2NyaXB0LCBzdHlsZSwgb3IgYW55IGh0bWw1IChOb1Njb3BlKSB0YWdz
LAorLy8gdW5sZXNzIHdyYXBwZWQgaW4gYSBkaXYgd2l0aCBub24tYnJlYWtpbmcgY2hhcmFjdGVy
cyBpbiBmcm9udCBvZiBpdC4KK2lmICggIWpRdWVyeS5zdXBwb3J0Lmh0bWxTZXJpYWxpemUgKSB7
CisgICAgd3JhcE1hcC5fZGVmYXVsdCA9IFsgMSwgIlg8ZGl2PiIsICI8L2Rpdj4iIF07Cit9CisK
K2pRdWVyeS5mbi5leHRlbmQoeworICAgIHRleHQ6IGZ1bmN0aW9uKCB2YWx1ZSApIHsKKyAgICAg
ICAgcmV0dXJuIGpRdWVyeS5hY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCB2YWx1ZSApIHsKKyAgICAg
ICAgICAgIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID8KKyAgICAgICAgICAgICAgICBqUXVl
cnkudGV4dCggdGhpcyApIDoKKyAgICAgICAgICAgICAgICB0aGlzLmVtcHR5KCkuYXBwZW5kKCAo
IHRoaXNbMF0gJiYgdGhpc1swXS5vd25lckRvY3VtZW50IHx8IGRvY3VtZW50ICkuY3JlYXRlVGV4
dE5vZGUoIHZhbHVlICkgKTsKKyAgICAgICAgfSwgbnVsbCwgdmFsdWUsIGFyZ3VtZW50cy5sZW5n
dGggKTsKKyAgICB9LAorCisgICAgd3JhcEFsbDogZnVuY3Rpb24oIGh0bWwgKSB7CisgICAgICAg
IGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIGh0bWwgKSApIHsKKyAgICAgICAgICAgIHJldHVybiB0
aGlzLmVhY2goZnVuY3Rpb24oaSkgeworICAgICAgICAgICAgICAgIGpRdWVyeSh0aGlzKS53cmFw
QWxsKCBodG1sLmNhbGwodGhpcywgaSkgKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKCB0aGlzWzBdICkgeworICAgICAgICAgICAgLy8gVGhlIGVsZW1lbnRzIHRv
IHdyYXAgdGhlIHRhcmdldCBhcm91bmQKKyAgICAgICAgICAgIHZhciB3cmFwID0galF1ZXJ5KCBo
dG1sLCB0aGlzWzBdLm93bmVyRG9jdW1lbnQgKS5lcSgwKS5jbG9uZSh0cnVlKTsKKworICAgICAg
ICAgICAgaWYgKCB0aGlzWzBdLnBhcmVudE5vZGUgKSB7CisgICAgICAgICAgICAgICAgd3JhcC5p
bnNlcnRCZWZvcmUoIHRoaXNbMF0gKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgd3Jh
cC5tYXAoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdmFyIGVsZW0gPSB0aGlzOworCisg
ICAgICAgICAgICAgICAgd2hpbGUgKCBlbGVtLmZpcnN0Q2hpbGQgJiYgZWxlbS5maXJzdENoaWxk
Lm5vZGVUeXBlID09PSAxICkgeworICAgICAgICAgICAgICAgICAgICBlbGVtID0gZWxlbS5maXJz
dENoaWxkOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHJldHVybiBlbGVt
OworICAgICAgICAgICAgfSkuYXBwZW5kKCB0aGlzICk7CisgICAgICAgIH0KKworICAgICAgICBy
ZXR1cm4gdGhpczsKKyAgICB9LAorCisgICAgd3JhcElubmVyOiBmdW5jdGlvbiggaHRtbCApIHsK
KyAgICAgICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggaHRtbCApICkgeworICAgICAgICAgICAg
cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihpKSB7CisgICAgICAgICAgICAgICAgalF1ZXJ5KHRo
aXMpLndyYXBJbm5lciggaHRtbC5jYWxsKHRoaXMsIGkpICk7CisgICAgICAgICAgICB9KTsKKyAg
ICAgICAgfQorCisgICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7CisgICAgICAg
ICAgICB2YXIgc2VsZiA9IGpRdWVyeSggdGhpcyApLAorICAgICAgICAgICAgICAgIGNvbnRlbnRz
ID0gc2VsZi5jb250ZW50cygpOworCisgICAgICAgICAgICBpZiAoIGNvbnRlbnRzLmxlbmd0aCAp
IHsKKyAgICAgICAgICAgICAgICBjb250ZW50cy53cmFwQWxsKCBodG1sICk7CisKKyAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2VsZi5hcHBlbmQoIGh0bWwgKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfSwKKworICAgIHdyYXA6IGZ1bmN0aW9uKCBodG1s
ICkgeworICAgICAgICB2YXIgaXNGdW5jdGlvbiA9IGpRdWVyeS5pc0Z1bmN0aW9uKCBodG1sICk7
CisKKyAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihpKSB7CisgICAgICAgICAgICBq
UXVlcnkoIHRoaXMgKS53cmFwQWxsKCBpc0Z1bmN0aW9uID8gaHRtbC5jYWxsKHRoaXMsIGkpIDog
aHRtbCApOworICAgICAgICB9KTsKKyAgICB9LAorCisgICAgdW53cmFwOiBmdW5jdGlvbigpIHsK
KyAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50KCkuZWFjaChmdW5jdGlvbigpIHsKKyAgICAgICAg
ICAgIGlmICggIWpRdWVyeS5ub2RlTmFtZSggdGhpcywgImJvZHkiICkgKSB7CisgICAgICAgICAg
ICAgICAgalF1ZXJ5KCB0aGlzICkucmVwbGFjZVdpdGgoIHRoaXMuY2hpbGROb2RlcyApOworICAg
ICAgICAgICAgfQorICAgICAgICB9KS5lbmQoKTsKKyAgICB9LAorCisgICAgYXBwZW5kOiBmdW5j
dGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLCB0cnVlLCBm
dW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgIGlmICggdGhpcy5ub2RlVHlwZSA9PT0gMSB8
fCB0aGlzLm5vZGVUeXBlID09PSAxMSApIHsKKyAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZENo
aWxkKCBlbGVtICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgIH0sCisKKyAgICBw
cmVwZW5kOiBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1l
bnRzLCB0cnVlLCBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgIGlmICggdGhpcy5ub2Rl
VHlwZSA9PT0gMSB8fCB0aGlzLm5vZGVUeXBlID09PSAxMSApIHsKKyAgICAgICAgICAgICAgICB0
aGlzLmluc2VydEJlZm9yZSggZWxlbSwgdGhpcy5maXJzdENoaWxkICk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0pOworICAgIH0sCisKKyAgICBiZWZvcmU6IGZ1bmN0aW9uKCkgeworICAgICAg
ICBpZiAoICFpc0Rpc2Nvbm5lY3RlZCggdGhpc1swXSApICkgeworICAgICAgICAgICAgcmV0dXJu
IHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLCBmYWxzZSwgZnVuY3Rpb24oIGVsZW0gKSB7CisgICAg
ICAgICAgICAgICAgdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSggZWxlbSwgdGhpcyApOwor
ICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIGFyZ3VtZW50cy5sZW5n
dGggKSB7CisgICAgICAgICAgICB2YXIgc2V0ID0galF1ZXJ5LmNsZWFuKCBhcmd1bWVudHMgKTsK
KyAgICAgICAgICAgIHJldHVybiB0aGlzLnB1c2hTdGFjayggalF1ZXJ5Lm1lcmdlKCBzZXQsIHRo
aXMgKSwgImJlZm9yZSIsIHRoaXMuc2VsZWN0b3IgKTsKKyAgICAgICAgfQorICAgIH0sCisKKyAg
ICBhZnRlcjogZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICggIWlzRGlzY29ubmVjdGVkKCB0aGlz
WzBdICkgKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsIGZh
bHNlLCBmdW5jdGlvbiggZWxlbSApIHsKKyAgICAgICAgICAgICAgICB0aGlzLnBhcmVudE5vZGUu
aW5zZXJ0QmVmb3JlKCBlbGVtLCB0aGlzLm5leHRTaWJsaW5nICk7CisgICAgICAgICAgICB9KTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmICggYXJndW1lbnRzLmxlbmd0aCApIHsKKyAgICAgICAg
ICAgIHZhciBzZXQgPSBqUXVlcnkuY2xlYW4oIGFyZ3VtZW50cyApOworICAgICAgICAgICAgcmV0
dXJuIHRoaXMucHVzaFN0YWNrKCBqUXVlcnkubWVyZ2UoIHRoaXMsIHNldCApLCAiYWZ0ZXIiLCB0
aGlzLnNlbGVjdG9yICk7CisgICAgICAgIH0KKyAgICB9LAorCisgICAgLy8ga2VlcERhdGEgaXMg
Zm9yIGludGVybmFsIHVzZSBvbmx5LS1kbyBub3QgZG9jdW1lbnQKKyAgICByZW1vdmU6IGZ1bmN0
aW9uKCBzZWxlY3Rvciwga2VlcERhdGEgKSB7CisgICAgICAgIHZhciBlbGVtLAorICAgICAgICAg
ICAgaSA9IDA7CisKKyAgICAgICAgZm9yICggOyAoZWxlbSA9IHRoaXNbaV0pICE9IG51bGw7IGkr
KyApIHsKKyAgICAgICAgICAgIGlmICggIXNlbGVjdG9yIHx8IGpRdWVyeS5maWx0ZXIoIHNlbGVj
dG9yLCBbIGVsZW0gXSApLmxlbmd0aCApIHsKKyAgICAgICAgICAgICAgICBpZiAoICFrZWVwRGF0
YSAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkgeworICAgICAgICAgICAgICAgICAgICBqUXVlcnku
Y2xlYW5EYXRhKCBlbGVtLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikgKTsKKyAgICAgICAgICAg
ICAgICAgICAgalF1ZXJ5LmNsZWFuRGF0YSggWyBlbGVtIF0gKTsKKyAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICBpZiAoIGVsZW0ucGFyZW50Tm9kZSApIHsKKyAgICAgICAgICAg
ICAgICAgICAgZWxlbS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBlbGVtICk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRoaXM7
CisgICAgfSwKKworICAgIGVtcHR5OiBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGVsZW0sCisg
ICAgICAgICAgICBpID0gMDsKKworICAgICAgICBmb3IgKCA7IChlbGVtID0gdGhpc1tpXSkgIT0g
bnVsbDsgaSsrICkgeworICAgICAgICAgICAgLy8gUmVtb3ZlIGVsZW1lbnQgbm9kZXMgYW5kIHBy
ZXZlbnQgbWVtb3J5IGxlYWtzCisgICAgICAgICAgICBpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEg
KSB7CisgICAgICAgICAgICAgICAgalF1ZXJ5LmNsZWFuRGF0YSggZWxlbS5nZXRFbGVtZW50c0J5
VGFnTmFtZSgiKiIpICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFJlbW92ZSBh
bnkgcmVtYWluaW5nIG5vZGVzCisgICAgICAgICAgICB3aGlsZSAoIGVsZW0uZmlyc3RDaGlsZCAp
IHsKKyAgICAgICAgICAgICAgICBlbGVtLnJlbW92ZUNoaWxkKCBlbGVtLmZpcnN0Q2hpbGQgKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0aGlzOworICAgIH0s
CisKKyAgICBjbG9uZTogZnVuY3Rpb24oIGRhdGFBbmRFdmVudHMsIGRlZXBEYXRhQW5kRXZlbnRz
ICkgeworICAgICAgICBkYXRhQW5kRXZlbnRzID0gZGF0YUFuZEV2ZW50cyA9PSBudWxsID8gZmFs
c2UgOiBkYXRhQW5kRXZlbnRzOworICAgICAgICBkZWVwRGF0YUFuZEV2ZW50cyA9IGRlZXBEYXRh
QW5kRXZlbnRzID09IG51bGwgPyBkYXRhQW5kRXZlbnRzIDogZGVlcERhdGFBbmRFdmVudHM7CisK
KyAgICAgICAgcmV0dXJuIHRoaXMubWFwKCBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1
cm4galF1ZXJ5LmNsb25lKCB0aGlzLCBkYXRhQW5kRXZlbnRzLCBkZWVwRGF0YUFuZEV2ZW50cyAp
OworICAgICAgICB9KTsKKyAgICB9LAorCisgICAgaHRtbDogZnVuY3Rpb24oIHZhbHVlICkgewor
ICAgICAgICByZXR1cm4galF1ZXJ5LmFjY2VzcyggdGhpcywgZnVuY3Rpb24oIHZhbHVlICkgewor
ICAgICAgICAgICAgdmFyIGVsZW0gPSB0aGlzWzBdIHx8IHt9LAorICAgICAgICAgICAgICAgIGkg
PSAwLAorICAgICAgICAgICAgICAgIGwgPSB0aGlzLmxlbmd0aDsKKworICAgICAgICAgICAgaWYg
KCB2YWx1ZSA9PT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLm5v
ZGVUeXBlID09PSAxID8KKyAgICAgICAgICAgICAgICAgICAgZWxlbS5pbm5lckhUTUwucmVwbGFj
ZSggcmlubGluZWpRdWVyeSwgIiIgKSA6CisgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZDsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gU2VlIGlmIHdlIGNhbiB0YWtlIGEgc2hv
cnRjdXQgYW5kIGp1c3QgdXNlIGlubmVySFRNTAorICAgICAgICAgICAgaWYgKCB0eXBlb2YgdmFs
dWUgPT09ICJzdHJpbmciICYmICFybm9Jbm5lcmh0bWwudGVzdCggdmFsdWUgKSAmJgorICAgICAg
ICAgICAgICAgICggalF1ZXJ5LnN1cHBvcnQuaHRtbFNlcmlhbGl6ZSB8fCAhcm5vc2hpbWNhY2hl
LnRlc3QoIHZhbHVlICkgICkgJiYKKyAgICAgICAgICAgICAgICAoIGpRdWVyeS5zdXBwb3J0Lmxl
YWRpbmdXaGl0ZXNwYWNlIHx8ICFybGVhZGluZ1doaXRlc3BhY2UudGVzdCggdmFsdWUgKSApICYm
CisgICAgICAgICAgICAgICAgIXdyYXBNYXBbICggcnRhZ05hbWUuZXhlYyggdmFsdWUgKSB8fCBb
IiIsICIiXSApWzFdLnRvTG93ZXJDYXNlKCkgXSApIHsKKworICAgICAgICAgICAgICAgIHZhbHVl
ID0gdmFsdWUucmVwbGFjZSggcnhodG1sVGFnLCAiPCQxPjwvJDI+IiApOworCisgICAgICAgICAg
ICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgZm9yICg7IGkgPCBsOyBpKysgKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBSZW1vdmUgZWxlbWVudCBub2RlcyBhbmQgcHJldmVu
dCBtZW1vcnkgbGVha3MKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0gPSB0aGlzW2ldIHx8
IHt9OworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5jbGVhbkRhdGEoIGVsZW0uZ2V0
RWxlbWVudHNCeVRhZ05hbWUoICIqIiApICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZWxlbS5pbm5lckhUTUwgPSB2YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGVsZW0gPSAwOworCisgICAg
ICAgICAgICAgICAgLy8gSWYgdXNpbmcgaW5uZXJIVE1MIHRocm93cyBhbiBleGNlcHRpb24sIHVz
ZSB0aGUgZmFsbGJhY2sgbWV0aG9kCisgICAgICAgICAgICAgICAgfSBjYXRjaChlKSB7fQorICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIGVsZW0gKSB7CisgICAgICAgICAgICAgICAg
dGhpcy5lbXB0eSgpLmFwcGVuZCggdmFsdWUgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwg
bnVsbCwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggKTsKKyAgICB9LAorCisgICAgcmVwbGFjZVdp
dGg6IGZ1bmN0aW9uKCB2YWx1ZSApIHsKKyAgICAgICAgaWYgKCAhaXNEaXNjb25uZWN0ZWQoIHRo
aXNbMF0gKSApIHsKKyAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBlbGVtZW50cyBh
cmUgcmVtb3ZlZCBmcm9tIHRoZSBET00gYmVmb3JlIHRoZXkgYXJlIGluc2VydGVkCisgICAgICAg
ICAgICAvLyB0aGlzIGNhbiBoZWxwIGZpeCByZXBsYWNpbmcgYSBwYXJlbnQgd2l0aCBjaGlsZCBl
bGVtZW50cworICAgICAgICAgICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggdmFsdWUgKSApIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgdmFyIHNlbGYgPSBqUXVlcnkodGhpcyksIG9sZCA9IHNlbGYuaHRtbCgpOwor
ICAgICAgICAgICAgICAgICAgICBzZWxmLnJlcGxhY2VXaXRoKCB2YWx1ZS5jYWxsKCB0aGlzLCBp
LCBvbGQgKSApOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBpZiAoIHR5cGVvZiB2YWx1ZSAhPT0gInN0cmluZyIgKSB7CisgICAgICAgICAgICAgICAg
dmFsdWUgPSBqUXVlcnkoIHZhbHVlICkuZGV0YWNoKCk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdmFy
IG5leHQgPSB0aGlzLm5leHRTaWJsaW5nLAorICAgICAgICAgICAgICAgICAgICBwYXJlbnQgPSB0
aGlzLnBhcmVudE5vZGU7CisKKyAgICAgICAgICAgICAgICBqUXVlcnkoIHRoaXMgKS5yZW1vdmUo
KTsKKworICAgICAgICAgICAgICAgIGlmICggbmV4dCApIHsKKyAgICAgICAgICAgICAgICAgICAg
alF1ZXJ5KG5leHQpLmJlZm9yZSggdmFsdWUgKTsKKyAgICAgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgICAgICBqUXVlcnkocGFyZW50KS5hcHBlbmQoIHZhbHVlICk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1
cm4gdGhpcy5sZW5ndGggPworICAgICAgICAgICAgdGhpcy5wdXNoU3RhY2soIGpRdWVyeShqUXVl
cnkuaXNGdW5jdGlvbih2YWx1ZSkgPyB2YWx1ZSgpIDogdmFsdWUpLCAicmVwbGFjZVdpdGgiLCB2
YWx1ZSApIDoKKyAgICAgICAgICAgIHRoaXM7CisgICAgfSwKKworICAgIGRldGFjaDogZnVuY3Rp
b24oIHNlbGVjdG9yICkgeworICAgICAgICByZXR1cm4gdGhpcy5yZW1vdmUoIHNlbGVjdG9yLCB0
cnVlICk7CisgICAgfSwKKworICAgIGRvbU1hbmlwOiBmdW5jdGlvbiggYXJncywgdGFibGUsIGNh
bGxiYWNrICkgeworCisgICAgICAgIC8vIEZsYXR0ZW4gYW55IG5lc3RlZCBhcnJheXMKKyAgICAg
ICAgYXJncyA9IFtdLmNvbmNhdC5hcHBseSggW10sIGFyZ3MgKTsKKworICAgICAgICB2YXIgcmVz
dWx0cywgZmlyc3QsIGZyYWdtZW50LCBpTm9DbG9uZSwKKyAgICAgICAgICAgIGkgPSAwLAorICAg
ICAgICAgICAgdmFsdWUgPSBhcmdzWzBdLAorICAgICAgICAgICAgc2NyaXB0cyA9IFtdLAorICAg
ICAgICAgICAgbCA9IHRoaXMubGVuZ3RoOworCisgICAgICAgIC8vIFdlIGNhbid0IGNsb25lTm9k
ZSBmcmFnbWVudHMgdGhhdCBjb250YWluIGNoZWNrZWQsIGluIFdlYktpdAorICAgICAgICBpZiAo
ICFqUXVlcnkuc3VwcG9ydC5jaGVja0Nsb25lICYmIGwgPiAxICYmIHR5cGVvZiB2YWx1ZSA9PT0g
InN0cmluZyIgJiYgcmNoZWNrZWQudGVzdCggdmFsdWUgKSApIHsKKyAgICAgICAgICAgIHJldHVy
biB0aGlzLmVhY2goZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgalF1ZXJ5KHRoaXMpLmRv
bU1hbmlwKCBhcmdzLCB0YWJsZSwgY2FsbGJhY2sgKTsKKyAgICAgICAgICAgIH0pOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbih2YWx1ZSkgKSB7CisgICAgICAg
ICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGkpIHsKKyAgICAgICAgICAgICAgICB2YXIg
c2VsZiA9IGpRdWVyeSh0aGlzKTsKKyAgICAgICAgICAgICAgICBhcmdzWzBdID0gdmFsdWUuY2Fs
bCggdGhpcywgaSwgdGFibGUgPyBzZWxmLmh0bWwoKSA6IHVuZGVmaW5lZCApOworICAgICAgICAg
ICAgICAgIHNlbGYuZG9tTWFuaXAoIGFyZ3MsIHRhYmxlLCBjYWxsYmFjayApOworICAgICAgICAg
ICAgfSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIHRoaXNbMF0gKSB7CisgICAgICAgICAg
ICByZXN1bHRzID0galF1ZXJ5LmJ1aWxkRnJhZ21lbnQoIGFyZ3MsIHRoaXMsIHNjcmlwdHMgKTsK
KyAgICAgICAgICAgIGZyYWdtZW50ID0gcmVzdWx0cy5mcmFnbWVudDsKKyAgICAgICAgICAgIGZp
cnN0ID0gZnJhZ21lbnQuZmlyc3RDaGlsZDsKKworICAgICAgICAgICAgaWYgKCBmcmFnbWVudC5j
aGlsZE5vZGVzLmxlbmd0aCA9PT0gMSApIHsKKyAgICAgICAgICAgICAgICBmcmFnbWVudCA9IGZp
cnN0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIGZpcnN0ICkgeworICAgICAg
ICAgICAgICAgIHRhYmxlID0gdGFibGUgJiYgalF1ZXJ5Lm5vZGVOYW1lKCBmaXJzdCwgInRyIiAp
OworCisgICAgICAgICAgICAgICAgLy8gVXNlIHRoZSBvcmlnaW5hbCBmcmFnbWVudCBmb3IgdGhl
IGxhc3QgaXRlbSBpbnN0ZWFkIG9mIHRoZSBmaXJzdCBiZWNhdXNlIGl0IGNhbiBlbmQgdXAKKyAg
ICAgICAgICAgICAgICAvLyBiZWluZyBlbXB0aWVkIGluY29ycmVjdGx5IGluIGNlcnRhaW4gc2l0
dWF0aW9ucyAoIzgwNzApLgorICAgICAgICAgICAgICAgIC8vIEZyYWdtZW50cyBmcm9tIHRoZSBm
cmFnbWVudCBjYWNoZSBtdXN0IGFsd2F5cyBiZSBjbG9uZWQgYW5kIG5ldmVyIHVzZWQgaW4gcGxh
Y2UuCisgICAgICAgICAgICAgICAgZm9yICggaU5vQ2xvbmUgPSByZXN1bHRzLmNhY2hlYWJsZSB8
fCBsIC0gMTsgaSA8IGw7IGkrKyApIHsKKyAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suY2Fs
bCgKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlICYmIGpRdWVyeS5ub2RlTmFtZSggdGhp
c1tpXSwgInRhYmxlIiApID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5kT3JBcHBl
bmQoIHRoaXNbaV0sICJ0Ym9keSIgKSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhp
c1tpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGkgPT09IGlOb0Nsb25lID8KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmcmFnbWVudCA6CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgalF1ZXJ5LmNsb25lKCBmcmFnbWVudCwgdHJ1ZSwgdHJ1ZSApCisgICAgICAgICAgICAgICAg
ICAgICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAv
LyBGaXggIzExODA5OiBBdm9pZCBsZWFraW5nIG1lbW9yeQorICAgICAgICAgICAgZnJhZ21lbnQg
PSBmaXJzdCA9IG51bGw7CisKKyAgICAgICAgICAgIGlmICggc2NyaXB0cy5sZW5ndGggKSB7Cisg
ICAgICAgICAgICAgICAgalF1ZXJ5LmVhY2goIHNjcmlwdHMsIGZ1bmN0aW9uKCBpLCBlbGVtICkg
eworICAgICAgICAgICAgICAgICAgICBpZiAoIGVsZW0uc3JjICkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCBqUXVlcnkuYWpheCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBqUXVlcnkuYWpheCh7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogZWxl
bS5zcmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICJHRVQiLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZTogInNjcmlwdCIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGFzeW5jOiBmYWxzZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ2xvYmFsOiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgInRocm93cyI6IHRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgalF1ZXJ5LmVycm9yKCJubyBhamF4Iik7CisgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBqUXVl
cnkuZ2xvYmFsRXZhbCggKCBlbGVtLnRleHQgfHwgZWxlbS50ZXh0Q29udGVudCB8fCBlbGVtLmlu
bmVySFRNTCB8fCAiIiApLnJlcGxhY2UoIHJjbGVhblNjcmlwdCwgIiIgKSApOworICAgICAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBlbGVtLnBhcmVudE5vZGUg
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQo
IGVsZW0gKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfQorfSk7
CisKK2Z1bmN0aW9uIGZpbmRPckFwcGVuZCggZWxlbSwgdGFnICkgeworICAgIHJldHVybiBlbGVt
LmdldEVsZW1lbnRzQnlUYWdOYW1lKCB0YWcgKVswXSB8fCBlbGVtLmFwcGVuZENoaWxkKCBlbGVt
Lm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCggdGFnICkgKTsKK30KKworZnVuY3Rpb24gY2xv
bmVDb3B5RXZlbnQoIHNyYywgZGVzdCApIHsKKworICAgIGlmICggZGVzdC5ub2RlVHlwZSAhPT0g
MSB8fCAhalF1ZXJ5Lmhhc0RhdGEoIHNyYyApICkgeworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgdmFyIHR5cGUsIGksIGwsCisgICAgICAgIG9sZERhdGEgPSBqUXVlcnkuX2RhdGEoIHNy
YyApLAorICAgICAgICBjdXJEYXRhID0galF1ZXJ5Ll9kYXRhKCBkZXN0LCBvbGREYXRhICksCisg
ICAgICAgIGV2ZW50cyA9IG9sZERhdGEuZXZlbnRzOworCisgICAgaWYgKCBldmVudHMgKSB7Cisg
ICAgICAgIGRlbGV0ZSBjdXJEYXRhLmhhbmRsZTsKKyAgICAgICAgY3VyRGF0YS5ldmVudHMgPSB7
fTsKKworICAgICAgICBmb3IgKCB0eXBlIGluIGV2ZW50cyApIHsKKyAgICAgICAgICAgIGZvciAo
IGkgPSAwLCBsID0gZXZlbnRzWyB0eXBlIF0ubGVuZ3RoOyBpIDwgbDsgaSsrICkgeworICAgICAg
ICAgICAgICAgIGpRdWVyeS5ldmVudC5hZGQoIGRlc3QsIHR5cGUsIGV2ZW50c1sgdHlwZSBdWyBp
IF0gKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIG1ha2UgdGhl
IGNsb25lZCBwdWJsaWMgZGF0YSBvYmplY3QgYSBjb3B5IGZyb20gdGhlIG9yaWdpbmFsCisgICAg
aWYgKCBjdXJEYXRhLmRhdGEgKSB7CisgICAgICAgIGN1ckRhdGEuZGF0YSA9IGpRdWVyeS5leHRl
bmQoIHt9LCBjdXJEYXRhLmRhdGEgKTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIGNsb25lRml4QXR0
cmlidXRlcyggc3JjLCBkZXN0ICkgeworICAgIHZhciBub2RlTmFtZTsKKworICAgIC8vIFdlIGRv
IG5vdCBuZWVkIHRvIGRvIGFueXRoaW5nIGZvciBub24tRWxlbWVudHMKKyAgICBpZiAoIGRlc3Qu
bm9kZVR5cGUgIT09IDEgKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBjbGVh
ckF0dHJpYnV0ZXMgcmVtb3ZlcyB0aGUgYXR0cmlidXRlcywgd2hpY2ggd2UgZG9uJ3Qgd2FudCwK
KyAgICAvLyBidXQgYWxzbyByZW1vdmVzIHRoZSBhdHRhY2hFdmVudCBldmVudHMsIHdoaWNoIHdl
ICpkbyogd2FudAorICAgIGlmICggZGVzdC5jbGVhckF0dHJpYnV0ZXMgKSB7CisgICAgICAgIGRl
c3QuY2xlYXJBdHRyaWJ1dGVzKCk7CisgICAgfQorCisgICAgLy8gbWVyZ2VBdHRyaWJ1dGVzLCBp
biBjb250cmFzdCwgb25seSBtZXJnZXMgYmFjayBvbiB0aGUKKyAgICAvLyBvcmlnaW5hbCBhdHRy
aWJ1dGVzLCBub3QgdGhlIGV2ZW50cworICAgIGlmICggZGVzdC5tZXJnZUF0dHJpYnV0ZXMgKSB7
CisgICAgICAgIGRlc3QubWVyZ2VBdHRyaWJ1dGVzKCBzcmMgKTsKKyAgICB9CisKKyAgICBub2Rl
TmFtZSA9IGRlc3Qubm9kZU5hbWUudG9Mb3dlckNhc2UoKTsKKworICAgIGlmICggbm9kZU5hbWUg
PT09ICJvYmplY3QiICkgeworICAgICAgICAvLyBJRTYtMTAgaW1wcm9wZXJseSBjbG9uZXMgY2hp
bGRyZW4gb2Ygb2JqZWN0IGVsZW1lbnRzIHVzaW5nIGNsYXNzaWQuCisgICAgICAgIC8vIElFMTAg
dGhyb3dzIE5vTW9kaWZpY2F0aW9uQWxsb3dlZEVycm9yIGlmIHBhcmVudCBpcyBudWxsLCAjMTIx
MzIuCisgICAgICAgIGlmICggZGVzdC5wYXJlbnROb2RlICkgeworICAgICAgICAgICAgZGVzdC5v
dXRlckhUTUwgPSBzcmMub3V0ZXJIVE1MOworICAgICAgICB9CisKKyAgICAgICAgLy8gVGhpcyBw
YXRoIGFwcGVhcnMgdW5hdm9pZGFibGUgZm9yIElFOS4gV2hlbiBjbG9uaW5nIGFuIG9iamVjdAor
ICAgICAgICAvLyBlbGVtZW50IGluIElFOSwgdGhlIG91dGVySFRNTCBzdHJhdGVneSBhYm92ZSBp
cyBub3Qgc3VmZmljaWVudC4KKyAgICAgICAgLy8gSWYgdGhlIHNyYyBoYXMgaW5uZXJIVE1MIGFu
ZCB0aGUgZGVzdGluYXRpb24gZG9lcyBub3QsCisgICAgICAgIC8vIGNvcHkgdGhlIHNyYy5pbm5l
ckhUTUwgaW50byB0aGUgZGVzdC5pbm5lckhUTUwuICMxMDMyNAorICAgICAgICBpZiAoIGpRdWVy
eS5zdXBwb3J0Lmh0bWw1Q2xvbmUgJiYgKHNyYy5pbm5lckhUTUwgJiYgIWpRdWVyeS50cmltKGRl
c3QuaW5uZXJIVE1MKSkgKSB7CisgICAgICAgICAgICBkZXN0LmlubmVySFRNTCA9IHNyYy5pbm5l
ckhUTUw7CisgICAgICAgIH0KKworICAgIH0gZWxzZSBpZiAoIG5vZGVOYW1lID09PSAiaW5wdXQi
ICYmIHJjaGVja2FibGVUeXBlLnRlc3QoIHNyYy50eXBlICkgKSB7CisgICAgICAgIC8vIElFNi04
IGZhaWxzIHRvIHBlcnNpc3QgdGhlIGNoZWNrZWQgc3RhdGUgb2YgYSBjbG9uZWQgY2hlY2tib3gK
KyAgICAgICAgLy8gb3IgcmFkaW8gYnV0dG9uLiBXb3JzZSwgSUU2LTcgZmFpbCB0byBnaXZlIHRo
ZSBjbG9uZWQgZWxlbWVudAorICAgICAgICAvLyBhIGNoZWNrZWQgYXBwZWFyYW5jZSBpZiB0aGUg
ZGVmYXVsdENoZWNrZWQgdmFsdWUgaXNuJ3QgYWxzbyBzZXQKKworICAgICAgICBkZXN0LmRlZmF1
bHRDaGVja2VkID0gZGVzdC5jaGVja2VkID0gc3JjLmNoZWNrZWQ7CisKKyAgICAgICAgLy8gSUU2
LTcgZ2V0IGNvbmZ1c2VkIGFuZCBlbmQgdXAgc2V0dGluZyB0aGUgdmFsdWUgb2YgYSBjbG9uZWQK
KyAgICAgICAgLy8gY2hlY2tib3gvcmFkaW8gYnV0dG9uIHRvIGFuIGVtcHR5IHN0cmluZyBpbnN0
ZWFkIG9mICJvbiIKKyAgICAgICAgaWYgKCBkZXN0LnZhbHVlICE9PSBzcmMudmFsdWUgKSB7Cisg
ICAgICAgICAgICBkZXN0LnZhbHVlID0gc3JjLnZhbHVlOworICAgICAgICB9CisKKyAgICAvLyBJ
RTYtOCBmYWlscyB0byByZXR1cm4gdGhlIHNlbGVjdGVkIG9wdGlvbiB0byB0aGUgZGVmYXVsdCBz
ZWxlY3RlZAorICAgIC8vIHN0YXRlIHdoZW4gY2xvbmluZyBvcHRpb25zCisgICAgfSBlbHNlIGlm
ICggbm9kZU5hbWUgPT09ICJvcHRpb24iICkgeworICAgICAgICBkZXN0LnNlbGVjdGVkID0gc3Jj
LmRlZmF1bHRTZWxlY3RlZDsKKworICAgIC8vIElFNi04IGZhaWxzIHRvIHNldCB0aGUgZGVmYXVs
dFZhbHVlIHRvIHRoZSBjb3JyZWN0IHZhbHVlIHdoZW4KKyAgICAvLyBjbG9uaW5nIG90aGVyIHR5
cGVzIG9mIGlucHV0IGZpZWxkcworICAgIH0gZWxzZSBpZiAoIG5vZGVOYW1lID09PSAiaW5wdXQi
IHx8IG5vZGVOYW1lID09PSAidGV4dGFyZWEiICkgeworICAgICAgICBkZXN0LmRlZmF1bHRWYWx1
ZSA9IHNyYy5kZWZhdWx0VmFsdWU7CisKKyAgICAvLyBJRSBibGFua3MgY29udGVudHMgd2hlbiBj
bG9uaW5nIHNjcmlwdHMKKyAgICB9IGVsc2UgaWYgKCBub2RlTmFtZSA9PT0gInNjcmlwdCIgJiYg
ZGVzdC50ZXh0ICE9PSBzcmMudGV4dCApIHsKKyAgICAgICAgZGVzdC50ZXh0ID0gc3JjLnRleHQ7
CisgICAgfQorCisgICAgLy8gRXZlbnQgZGF0YSBnZXRzIHJlZmVyZW5jZWQgaW5zdGVhZCBvZiBj
b3BpZWQgaWYgdGhlIGV4cGFuZG8KKyAgICAvLyBnZXRzIGNvcGllZCB0b28KKyAgICBkZXN0LnJl
bW92ZUF0dHJpYnV0ZSggalF1ZXJ5LmV4cGFuZG8gKTsKK30KKworalF1ZXJ5LmJ1aWxkRnJhZ21l
bnQgPSBmdW5jdGlvbiggYXJncywgY29udGV4dCwgc2NyaXB0cyApIHsKKyAgICB2YXIgZnJhZ21l
bnQsIGNhY2hlYWJsZSwgY2FjaGVoaXQsCisgICAgICAgIGZpcnN0ID0gYXJnc1sgMCBdOworCisg
ICAgLy8gU2V0IGNvbnRleHQgZnJvbSB3aGF0IG1heSBjb21lIGluIGFzIHVuZGVmaW5lZCBvciBh
IGpRdWVyeSBjb2xsZWN0aW9uIG9yIGEgbm9kZQorICAgIC8vIFVwZGF0ZWQgdG8gZml4ICMxMjI2
NiB3aGVyZSBhY2Nlc3NpbmcgY29udGV4dFswXSBjb3VsZCB0aHJvdyBhbiBleGNlcHRpb24gaW4g
SUU5LzEwICYKKyAgICAvLyBhbHNvIGRvdWJsZXMgYXMgZml4IGZvciAjODk1MCB3aGVyZSBwbGFp
biBvYmplY3RzIGNhdXNlZCBjcmVhdGVEb2N1bWVudEZyYWdtZW50IGV4Y2VwdGlvbgorICAgIGNv
bnRleHQgPSBjb250ZXh0IHx8IGRvY3VtZW50OworICAgIGNvbnRleHQgPSAhY29udGV4dC5ub2Rl
VHlwZSAmJiBjb250ZXh0WzBdIHx8IGNvbnRleHQ7CisgICAgY29udGV4dCA9IGNvbnRleHQub3du
ZXJEb2N1bWVudCB8fCBjb250ZXh0OworCisgICAgLy8gT25seSBjYWNoZSAic21hbGwiICgxLzIg
S0IpIEhUTUwgc3RyaW5ncyB0aGF0IGFyZSBhc3NvY2lhdGVkIHdpdGggdGhlIG1haW4gZG9jdW1l
bnQKKyAgICAvLyBDbG9uaW5nIG9wdGlvbnMgbG9zZXMgdGhlIHNlbGVjdGVkIHN0YXRlLCBzbyBk
b24ndCBjYWNoZSB0aGVtCisgICAgLy8gSUUgNiBkb2Vzbid0IGxpa2UgaXQgd2hlbiB5b3UgcHV0
IDxvYmplY3Q+IG9yIDxlbWJlZD4gZWxlbWVudHMgaW4gYSBmcmFnbWVudAorICAgIC8vIEFsc28s
IFdlYktpdCBkb2VzIG5vdCBjbG9uZSAnY2hlY2tlZCcgYXR0cmlidXRlcyBvbiBjbG9uZU5vZGUs
IHNvIGRvbid0IGNhY2hlCisgICAgLy8gTGFzdGx5LCBJRTYsNyw4IHdpbGwgbm90IGNvcnJlY3Rs
eSByZXVzZSBjYWNoZWQgZnJhZ21lbnRzIHRoYXQgd2VyZSBjcmVhdGVkIGZyb20gdW5rbm93biBl
bGVtcyAjMTA1MDEKKyAgICBpZiAoIGFyZ3MubGVuZ3RoID09PSAxICYmIHR5cGVvZiBmaXJzdCA9
PT0gInN0cmluZyIgJiYgZmlyc3QubGVuZ3RoIDwgNTEyICYmIGNvbnRleHQgPT09IGRvY3VtZW50
ICYmCisgICAgICAgIGZpcnN0LmNoYXJBdCgwKSA9PT0gIjwiICYmICFybm9jYWNoZS50ZXN0KCBm
aXJzdCApICYmCisgICAgICAgIChqUXVlcnkuc3VwcG9ydC5jaGVja0Nsb25lIHx8ICFyY2hlY2tl
ZC50ZXN0KCBmaXJzdCApKSAmJgorICAgICAgICAoalF1ZXJ5LnN1cHBvcnQuaHRtbDVDbG9uZSB8
fCAhcm5vc2hpbWNhY2hlLnRlc3QoIGZpcnN0ICkpICkgeworCisgICAgICAgIC8vIE1hcmsgY2Fj
aGVhYmxlIGFuZCBsb29rIGZvciBhIGhpdAorICAgICAgICBjYWNoZWFibGUgPSB0cnVlOworICAg
ICAgICBmcmFnbWVudCA9IGpRdWVyeS5mcmFnbWVudHNbIGZpcnN0IF07CisgICAgICAgIGNhY2hl
aGl0ID0gZnJhZ21lbnQgIT09IHVuZGVmaW5lZDsKKyAgICB9CisKKyAgICBpZiAoICFmcmFnbWVu
dCApIHsKKyAgICAgICAgZnJhZ21lbnQgPSBjb250ZXh0LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQo
KTsKKyAgICAgICAgalF1ZXJ5LmNsZWFuKCBhcmdzLCBjb250ZXh0LCBmcmFnbWVudCwgc2NyaXB0
cyApOworCisgICAgICAgIC8vIFVwZGF0ZSB0aGUgY2FjaGUsIGJ1dCBvbmx5IHN0b3JlIGZhbHNl
CisgICAgICAgIC8vIHVubGVzcyB0aGlzIGlzIGEgc2Vjb25kIHBhcnNpbmcgb2YgdGhlIHNhbWUg
Y29udGVudAorICAgICAgICBpZiAoIGNhY2hlYWJsZSApIHsKKyAgICAgICAgICAgIGpRdWVyeS5m
cmFnbWVudHNbIGZpcnN0IF0gPSBjYWNoZWhpdCAmJiBmcmFnbWVudDsKKyAgICAgICAgfQorICAg
IH0KKworICAgIHJldHVybiB7IGZyYWdtZW50OiBmcmFnbWVudCwgY2FjaGVhYmxlOiBjYWNoZWFi
bGUgfTsKK307CisKK2pRdWVyeS5mcmFnbWVudHMgPSB7fTsKKworalF1ZXJ5LmVhY2goeworICAg
IGFwcGVuZFRvOiAiYXBwZW5kIiwKKyAgICBwcmVwZW5kVG86ICJwcmVwZW5kIiwKKyAgICBpbnNl
cnRCZWZvcmU6ICJiZWZvcmUiLAorICAgIGluc2VydEFmdGVyOiAiYWZ0ZXIiLAorICAgIHJlcGxh
Y2VBbGw6ICJyZXBsYWNlV2l0aCIKK30sIGZ1bmN0aW9uKCBuYW1lLCBvcmlnaW5hbCApIHsKKyAg
ICBqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBzZWxlY3RvciApIHsKKyAgICAgICAgdmFy
IGVsZW1zLAorICAgICAgICAgICAgaSA9IDAsCisgICAgICAgICAgICByZXQgPSBbXSwKKyAgICAg
ICAgICAgIGluc2VydCA9IGpRdWVyeSggc2VsZWN0b3IgKSwKKyAgICAgICAgICAgIGwgPSBpbnNl
cnQubGVuZ3RoLAorICAgICAgICAgICAgcGFyZW50ID0gdGhpcy5sZW5ndGggPT09IDEgJiYgdGhp
c1swXS5wYXJlbnROb2RlOworCisgICAgICAgIGlmICggKHBhcmVudCA9PSBudWxsIHx8IHBhcmVu
dCAmJiBwYXJlbnQubm9kZVR5cGUgPT09IDExICYmIHBhcmVudC5jaGlsZE5vZGVzLmxlbmd0aCA9
PT0gMSkgJiYgbCA9PT0gMSApIHsKKyAgICAgICAgICAgIGluc2VydFsgb3JpZ2luYWwgXSggdGhp
c1swXSApOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBmb3IgKCA7IGkgPCBsOyBpKysgKSB7CisgICAgICAgICAgICAgICAgZWxlbXMgPSAo
IGkgPiAwID8gdGhpcy5jbG9uZSh0cnVlKSA6IHRoaXMgKS5nZXQoKTsKKyAgICAgICAgICAgICAg
ICBqUXVlcnkoIGluc2VydFtpXSApWyBvcmlnaW5hbCBdKCBlbGVtcyApOworICAgICAgICAgICAg
ICAgIHJldCA9IHJldC5jb25jYXQoIGVsZW1zICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIHJldHVybiB0aGlzLnB1c2hTdGFjayggcmV0LCBuYW1lLCBpbnNlcnQuc2VsZWN0b3IgKTsK
KyAgICAgICAgfQorICAgIH07Cit9KTsKKworZnVuY3Rpb24gZ2V0QWxsKCBlbGVtICkgeworICAg
IGlmICggdHlwZW9mIGVsZW0uZ2V0RWxlbWVudHNCeVRhZ05hbWUgIT09ICJ1bmRlZmluZWQiICkg
eworICAgICAgICByZXR1cm4gZWxlbS5nZXRFbGVtZW50c0J5VGFnTmFtZSggIioiICk7CisKKyAg
ICB9IGVsc2UgaWYgKCB0eXBlb2YgZWxlbS5xdWVyeVNlbGVjdG9yQWxsICE9PSAidW5kZWZpbmVk
IiApIHsKKyAgICAgICAgcmV0dXJuIGVsZW0ucXVlcnlTZWxlY3RvckFsbCggIioiICk7CisKKyAg
ICB9IGVsc2UgeworICAgICAgICByZXR1cm4gW107CisgICAgfQorfQorCisvLyBVc2VkIGluIGNs
ZWFuLCBmaXhlcyB0aGUgZGVmYXVsdENoZWNrZWQgcHJvcGVydHkKK2Z1bmN0aW9uIGZpeERlZmF1
bHRDaGVja2VkKCBlbGVtICkgeworICAgIGlmICggcmNoZWNrYWJsZVR5cGUudGVzdCggZWxlbS50
eXBlICkgKSB7CisgICAgICAgIGVsZW0uZGVmYXVsdENoZWNrZWQgPSBlbGVtLmNoZWNrZWQ7Cisg
ICAgfQorfQorCitqUXVlcnkuZXh0ZW5kKHsKKyAgICBjbG9uZTogZnVuY3Rpb24oIGVsZW0sIGRh
dGFBbmRFdmVudHMsIGRlZXBEYXRhQW5kRXZlbnRzICkgeworICAgICAgICB2YXIgc3JjRWxlbWVu
dHMsCisgICAgICAgICAgICBkZXN0RWxlbWVudHMsCisgICAgICAgICAgICBpLAorICAgICAgICAg
ICAgY2xvbmU7CisKKyAgICAgICAgaWYgKCBqUXVlcnkuc3VwcG9ydC5odG1sNUNsb25lIHx8IGpR
dWVyeS5pc1hNTERvYyhlbGVtKSB8fCAhcm5vc2hpbWNhY2hlLnRlc3QoICI8IiArIGVsZW0ubm9k
ZU5hbWUgKyAiPiIgKSApIHsKKyAgICAgICAgICAgIGNsb25lID0gZWxlbS5jbG9uZU5vZGUoIHRy
dWUgKTsKKworICAgICAgICAvLyBJRTw9OCBkb2VzIG5vdCBwcm9wZXJseSBjbG9uZSBkZXRhY2hl
ZCwgdW5rbm93biBlbGVtZW50IG5vZGVzCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBm
cmFnbWVudERpdi5pbm5lckhUTUwgPSBlbGVtLm91dGVySFRNTDsKKyAgICAgICAgICAgIGZyYWdt
ZW50RGl2LnJlbW92ZUNoaWxkKCBjbG9uZSA9IGZyYWdtZW50RGl2LmZpcnN0Q2hpbGQgKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmICggKCFqUXVlcnkuc3VwcG9ydC5ub0Nsb25lRXZlbnQgfHwg
IWpRdWVyeS5zdXBwb3J0Lm5vQ2xvbmVDaGVja2VkKSAmJgorICAgICAgICAgICAgICAgIChlbGVt
Lm5vZGVUeXBlID09PSAxIHx8IGVsZW0ubm9kZVR5cGUgPT09IDExKSAmJiAhalF1ZXJ5LmlzWE1M
RG9jKGVsZW0pICkgeworICAgICAgICAgICAgLy8gSUUgY29waWVzIGV2ZW50cyBib3VuZCB2aWEg
YXR0YWNoRXZlbnQgd2hlbiB1c2luZyBjbG9uZU5vZGUuCisgICAgICAgICAgICAvLyBDYWxsaW5n
IGRldGFjaEV2ZW50IG9uIHRoZSBjbG9uZSB3aWxsIGFsc28gcmVtb3ZlIHRoZSBldmVudHMKKyAg
ICAgICAgICAgIC8vIGZyb20gdGhlIG9yaWdpbmFsLiBJbiBvcmRlciB0byBnZXQgYXJvdW5kIHRo
aXMsIHdlIHVzZSBzb21lCisgICAgICAgICAgICAvLyBwcm9wcmlldGFyeSBtZXRob2RzIHRvIGNs
ZWFyIHRoZSBldmVudHMuIFRoYW5rcyB0byBNb29Ub29scworICAgICAgICAgICAgLy8gZ3V5cyBm
b3IgdGhpcyBob3RuZXNzLgorCisgICAgICAgICAgICBjbG9uZUZpeEF0dHJpYnV0ZXMoIGVsZW0s
IGNsb25lICk7CisKKyAgICAgICAgICAgIC8vIFVzaW5nIFNpenpsZSBoZXJlIGlzIGNyYXp5IHNs
b3csIHNvIHdlIHVzZSBnZXRFbGVtZW50c0J5VGFnTmFtZSBpbnN0ZWFkCisgICAgICAgICAgICBz
cmNFbGVtZW50cyA9IGdldEFsbCggZWxlbSApOworICAgICAgICAgICAgZGVzdEVsZW1lbnRzID0g
Z2V0QWxsKCBjbG9uZSApOworCisgICAgICAgICAgICAvLyBXZWlyZCBpdGVyYXRpb24gYmVjYXVz
ZSBJRSB3aWxsIHJlcGxhY2UgdGhlIGxlbmd0aCBwcm9wZXJ0eQorICAgICAgICAgICAgLy8gd2l0
aCBhbiBlbGVtZW50IGlmIHlvdSBhcmUgY2xvbmluZyB0aGUgYm9keSBhbmQgb25lIG9mIHRoZQor
ICAgICAgICAgICAgLy8gZWxlbWVudHMgb24gdGhlIHBhZ2UgaGFzIGEgbmFtZSBvciBpZCBvZiAi
bGVuZ3RoIgorICAgICAgICAgICAgZm9yICggaSA9IDA7IHNyY0VsZW1lbnRzW2ldOyArK2kgKSB7
CisgICAgICAgICAgICAgICAgLy8gRW5zdXJlIHRoYXQgdGhlIGRlc3RpbmF0aW9uIG5vZGUgaXMg
bm90IG51bGw7IEZpeGVzICM5NTg3CisgICAgICAgICAgICAgICAgaWYgKCBkZXN0RWxlbWVudHNb
aV0gKSB7CisgICAgICAgICAgICAgICAgICAgIGNsb25lRml4QXR0cmlidXRlcyggc3JjRWxlbWVu
dHNbaV0sIGRlc3RFbGVtZW50c1tpXSApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIENvcHkgdGhlIGV2ZW50cyBmcm9tIHRoZSBvcmln
aW5hbCB0byB0aGUgY2xvbmUKKyAgICAgICAgaWYgKCBkYXRhQW5kRXZlbnRzICkgeworICAgICAg
ICAgICAgY2xvbmVDb3B5RXZlbnQoIGVsZW0sIGNsb25lICk7CisKKyAgICAgICAgICAgIGlmICgg
ZGVlcERhdGFBbmRFdmVudHMgKSB7CisgICAgICAgICAgICAgICAgc3JjRWxlbWVudHMgPSBnZXRB
bGwoIGVsZW0gKTsKKyAgICAgICAgICAgICAgICBkZXN0RWxlbWVudHMgPSBnZXRBbGwoIGNsb25l
ICk7CisKKyAgICAgICAgICAgICAgICBmb3IgKCBpID0gMDsgc3JjRWxlbWVudHNbaV07ICsraSAp
IHsKKyAgICAgICAgICAgICAgICAgICAgY2xvbmVDb3B5RXZlbnQoIHNyY0VsZW1lbnRzW2ldLCBk
ZXN0RWxlbWVudHNbaV0gKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICAgICBzcmNFbGVtZW50cyA9IGRlc3RFbGVtZW50cyA9IG51bGw7CisKKyAg
ICAgICAgLy8gUmV0dXJuIHRoZSBjbG9uZWQgc2V0CisgICAgICAgIHJldHVybiBjbG9uZTsKKyAg
ICB9LAorCisgICAgY2xlYW46IGZ1bmN0aW9uKCBlbGVtcywgY29udGV4dCwgZnJhZ21lbnQsIHNj
cmlwdHMgKSB7CisgICAgICAgIHZhciBpLCBqLCBlbGVtLCB0YWcsIHdyYXAsIGRlcHRoLCBkaXYs
IGhhc0JvZHksIHRib2R5LCBsZW4sIGhhbmRsZVNjcmlwdCwganNUYWdzLAorICAgICAgICAgICAg
c2FmZSA9IGNvbnRleHQgPT09IGRvY3VtZW50ICYmIHNhZmVGcmFnbWVudCwKKyAgICAgICAgICAg
IHJldCA9IFtdOworCisgICAgICAgIC8vIEVuc3VyZSB0aGF0IGNvbnRleHQgaXMgYSBkb2N1bWVu
dAorICAgICAgICBpZiAoICFjb250ZXh0IHx8IHR5cGVvZiBjb250ZXh0LmNyZWF0ZURvY3VtZW50
RnJhZ21lbnQgPT09ICJ1bmRlZmluZWQiICkgeworICAgICAgICAgICAgY29udGV4dCA9IGRvY3Vt
ZW50OworICAgICAgICB9CisKKyAgICAgICAgLy8gVXNlIHRoZSBhbHJlYWR5LWNyZWF0ZWQgc2Fm
ZSBmcmFnbWVudCBpZiBjb250ZXh0IHBlcm1pdHMKKyAgICAgICAgZm9yICggaSA9IDA7IChlbGVt
ID0gZWxlbXNbaV0pICE9IG51bGw7IGkrKyApIHsKKyAgICAgICAgICAgIGlmICggdHlwZW9mIGVs
ZW0gPT09ICJudW1iZXIiICkgeworICAgICAgICAgICAgICAgIGVsZW0gKz0gIiI7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGlmICggIWVsZW0gKSB7CisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIENvbnZlcnQgaHRtbCBzdHJp
bmcgaW50byBET00gbm9kZXMKKyAgICAgICAgICAgIGlmICggdHlwZW9mIGVsZW0gPT09ICJzdHJp
bmciICkgeworICAgICAgICAgICAgICAgIGlmICggIXJodG1sLnRlc3QoIGVsZW0gKSApIHsKKyAg
ICAgICAgICAgICAgICAgICAgZWxlbSA9IGNvbnRleHQuY3JlYXRlVGV4dE5vZGUoIGVsZW0gKTsK
KyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAvLyBFbnN1cmUg
YSBzYWZlIGNvbnRhaW5lciBpbiB3aGljaCB0byByZW5kZXIgdGhlIGh0bWwKKyAgICAgICAgICAg
ICAgICAgICAgc2FmZSA9IHNhZmUgfHwgY3JlYXRlU2FmZUZyYWdtZW50KCBjb250ZXh0ICk7Cisg
ICAgICAgICAgICAgICAgICAgIGRpdiA9IGNvbnRleHQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Cisg
ICAgICAgICAgICAgICAgICAgIHNhZmUuYXBwZW5kQ2hpbGQoIGRpdiApOworCisgICAgICAgICAg
ICAgICAgICAgIC8vIEZpeCAiWEhUTUwiLXN0eWxlIHRhZ3MgaW4gYWxsIGJyb3dzZXJzCisgICAg
ICAgICAgICAgICAgICAgIGVsZW0gPSBlbGVtLnJlcGxhY2UocnhodG1sVGFnLCAiPCQxPjwvJDI+
Iik7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gR28gdG8gaHRtbCBhbmQgYmFjaywgdGhlbiBw
ZWVsIG9mZiBleHRyYSB3cmFwcGVycworICAgICAgICAgICAgICAgICAgICB0YWcgPSAoIHJ0YWdO
YW1lLmV4ZWMoIGVsZW0gKSB8fCBbIiIsICIiXSApWzFdLnRvTG93ZXJDYXNlKCk7CisgICAgICAg
ICAgICAgICAgICAgIHdyYXAgPSB3cmFwTWFwWyB0YWcgXSB8fCB3cmFwTWFwLl9kZWZhdWx0Owor
ICAgICAgICAgICAgICAgICAgICBkZXB0aCA9IHdyYXBbMF07CisgICAgICAgICAgICAgICAgICAg
IGRpdi5pbm5lckhUTUwgPSB3cmFwWzFdICsgZWxlbSArIHdyYXBbMl07CisKKyAgICAgICAgICAg
ICAgICAgICAgLy8gTW92ZSB0byB0aGUgcmlnaHQgZGVwdGgKKyAgICAgICAgICAgICAgICAgICAg
d2hpbGUgKCBkZXB0aC0tICkgeworICAgICAgICAgICAgICAgICAgICAgICAgZGl2ID0gZGl2Lmxh
c3RDaGlsZDsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8v
IFJlbW92ZSBJRSdzIGF1dG9pbnNlcnRlZCA8dGJvZHk+IGZyb20gdGFibGUgZnJhZ21lbnRzCisg
ICAgICAgICAgICAgICAgICAgIGlmICggIWpRdWVyeS5zdXBwb3J0LnRib2R5ICkgeworCisgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBTdHJpbmcgd2FzIGEgPHRhYmxlPiwgKm1heSogaGF2ZSBz
cHVyaW91cyA8dGJvZHk+CisgICAgICAgICAgICAgICAgICAgICAgICBoYXNCb2R5ID0gcnRib2R5
LnRlc3QoZWxlbSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGJvZHkgPSB0YWcgPT09
ICJ0YWJsZSIgJiYgIWhhc0JvZHkgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
aXYuZmlyc3RDaGlsZCAmJiBkaXYuZmlyc3RDaGlsZC5jaGlsZE5vZGVzIDoKKworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBTdHJpbmcgd2FzIGEgYmFyZSA8dGhlYWQ+IG9yIDx0
Zm9vdD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JhcFsxXSA9PT0gIjx0YWJs
ZT4iICYmICFoYXNCb2R5ID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRp
di5jaGlsZE5vZGVzIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdOwor
CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCBqID0gdGJvZHkubGVuZ3RoIC0gMTsgaiA+
PSAwIDsgLS1qICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5Lm5v
ZGVOYW1lKCB0Ym9keVsgaiBdLCAidGJvZHkiICkgJiYgIXRib2R5WyBqIF0uY2hpbGROb2Rlcy5s
ZW5ndGggKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRib2R5WyBqIF0ucGFy
ZW50Tm9kZS5yZW1vdmVDaGlsZCggdGJvZHlbIGogXSApOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgICAgIC8vIElFIGNvbXBsZXRlbHkga2lsbHMgbGVhZGluZyB3
aGl0ZXNwYWNlIHdoZW4gaW5uZXJIVE1MIGlzIHVzZWQKKyAgICAgICAgICAgICAgICAgICAgaWYg
KCAhalF1ZXJ5LnN1cHBvcnQubGVhZGluZ1doaXRlc3BhY2UgJiYgcmxlYWRpbmdXaGl0ZXNwYWNl
LnRlc3QoIGVsZW0gKSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpdi5pbnNlcnRCZWZv
cmUoIGNvbnRleHQuY3JlYXRlVGV4dE5vZGUoIHJsZWFkaW5nV2hpdGVzcGFjZS5leGVjKGVsZW0p
WzBdICksIGRpdi5maXJzdENoaWxkICk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgICAgICBlbGVtID0gZGl2LmNoaWxkTm9kZXM7CisKKyAgICAgICAgICAgICAgICAg
ICAgLy8gVGFrZSBvdXQgb2YgZnJhZ21lbnQgY29udGFpbmVyICh3ZSBuZWVkIGEgZnJlc2ggZGl2
IGVhY2ggdGltZSkKKyAgICAgICAgICAgICAgICAgICAgZGl2LnBhcmVudE5vZGUucmVtb3ZlQ2hp
bGQoIGRpdiApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKCBlbGVtLm5vZGVUeXBlICkgeworICAgICAgICAgICAgICAgIHJldC5wdXNoKCBlbGVt
ICk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGpRdWVyeS5tZXJnZSgg
cmV0LCBlbGVtICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBGaXgg
IzExMzU2OiBDbGVhciBlbGVtZW50cyBmcm9tIHNhZmVGcmFnbWVudAorICAgICAgICBpZiAoIGRp
diApIHsKKyAgICAgICAgICAgIGVsZW0gPSBkaXYgPSBzYWZlID0gbnVsbDsKKyAgICAgICAgfQor
CisgICAgICAgIC8vIFJlc2V0IGRlZmF1bHRDaGVja2VkIGZvciBhbnkgcmFkaW9zIGFuZCBjaGVj
a2JveGVzCisgICAgICAgIC8vIGFib3V0IHRvIGJlIGFwcGVuZGVkIHRvIHRoZSBET00gaW4gSUUg
Ni83ICgjODA2MCkKKyAgICAgICAgaWYgKCAhalF1ZXJ5LnN1cHBvcnQuYXBwZW5kQ2hlY2tlZCAp
IHsKKyAgICAgICAgICAgIGZvciAoIGkgPSAwOyAoZWxlbSA9IHJldFtpXSkgIT0gbnVsbDsgaSsr
ICkgeworICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5Lm5vZGVOYW1lKCBlbGVtLCAiaW5wdXQi
ICkgKSB7CisgICAgICAgICAgICAgICAgICAgIGZpeERlZmF1bHRDaGVja2VkKCBlbGVtICk7Cisg
ICAgICAgICAgICAgICAgfSBlbHNlIGlmICggdHlwZW9mIGVsZW0uZ2V0RWxlbWVudHNCeVRhZ05h
bWUgIT09ICJ1bmRlZmluZWQiICkgeworICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZ3JlcCgg
ZWxlbS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKSwgZml4RGVmYXVsdENoZWNrZWQgKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAv
LyBBcHBlbmQgZWxlbWVudHMgdG8gYSBwcm92aWRlZCBkb2N1bWVudCBmcmFnbWVudAorICAgICAg
ICBpZiAoIGZyYWdtZW50ICkgeworICAgICAgICAgICAgLy8gU3BlY2lhbCBoYW5kbGluZyBvZiBl
YWNoIHNjcmlwdCBlbGVtZW50CisgICAgICAgICAgICBoYW5kbGVTY3JpcHQgPSBmdW5jdGlvbigg
ZWxlbSApIHsKKyAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiB3ZSBjb25zaWRlciBpdCBleGVj
dXRhYmxlCisgICAgICAgICAgICAgICAgaWYgKCAhZWxlbS50eXBlIHx8IHJzY3JpcHRUeXBlLnRl
c3QoIGVsZW0udHlwZSApICkgeworICAgICAgICAgICAgICAgICAgICAvLyBEZXRhY2ggdGhlIHNj
cmlwdCBhbmQgc3RvcmUgaXQgaW4gdGhlIHNjcmlwdHMgYXJyYXkgKGlmIHByb3ZpZGVkKSBvciB0
aGUgZnJhZ21lbnQKKyAgICAgICAgICAgICAgICAgICAgLy8gUmV0dXJuIHRydXRoeSB0byBpbmRp
Y2F0ZSB0aGF0IGl0IGhhcyBiZWVuIGhhbmRsZWQKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHNjcmlwdHMgPworICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0cy5wdXNoKCBlbGVtLnBh
cmVudE5vZGUgPyBlbGVtLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIGVsZW0gKSA6IGVsZW0gKSA6
CisgICAgICAgICAgICAgICAgICAgICAgICBmcmFnbWVudC5hcHBlbmRDaGlsZCggZWxlbSApOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIGZvciAoIGkg
PSAwOyAoZWxlbSA9IHJldFtpXSkgIT0gbnVsbDsgaSsrICkgeworICAgICAgICAgICAgICAgIC8v
IENoZWNrIGlmIHdlJ3JlIGRvbmUgYWZ0ZXIgaGFuZGxpbmcgYW4gZXhlY3V0YWJsZSBzY3JpcHQK
KyAgICAgICAgICAgICAgICBpZiAoICEoIGpRdWVyeS5ub2RlTmFtZSggZWxlbSwgInNjcmlwdCIg
KSAmJiBoYW5kbGVTY3JpcHQoIGVsZW0gKSApICkgeworICAgICAgICAgICAgICAgICAgICAvLyBB
cHBlbmQgdG8gZnJhZ21lbnQgYW5kIGhhbmRsZSBlbWJlZGRlZCBzY3JpcHRzCisgICAgICAgICAg
ICAgICAgICAgIGZyYWdtZW50LmFwcGVuZENoaWxkKCBlbGVtICk7CisgICAgICAgICAgICAgICAg
ICAgIGlmICggdHlwZW9mIGVsZW0uZ2V0RWxlbWVudHNCeVRhZ05hbWUgIT09ICJ1bmRlZmluZWQi
ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGFuZGxlU2NyaXB0IGFsdGVycyB0aGUg
RE9NLCBzbyB1c2UgalF1ZXJ5Lm1lcmdlIHRvIGVuc3VyZSBzbmFwc2hvdCBpdGVyYXRpb24KKyAg
ICAgICAgICAgICAgICAgICAgICAgIGpzVGFncyA9IGpRdWVyeS5ncmVwKCBqUXVlcnkubWVyZ2Uo
IFtdLCBlbGVtLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzY3JpcHQiKSApLCBoYW5kbGVTY3JpcHQg
KTsKKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3BsaWNlIHRoZSBzY3JpcHRzIGludG8g
cmV0IGFmdGVyIHRoZWlyIGZvcm1lciBhbmNlc3RvciBhbmQgYWR2YW5jZSBvdXIgaW5kZXggYmV5
b25kIHRoZW0KKyAgICAgICAgICAgICAgICAgICAgICAgIHJldC5zcGxpY2UuYXBwbHkoIHJldCwg
W2kgKyAxLCAwXS5jb25jYXQoIGpzVGFncyApICk7CisgICAgICAgICAgICAgICAgICAgICAgICBp
ICs9IGpzVGFncy5sZW5ndGg7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcmV0OworICAg
IH0sCisKKyAgICBjbGVhbkRhdGE6IGZ1bmN0aW9uKCBlbGVtcywgLyogaW50ZXJuYWwgKi8gYWNj
ZXB0RGF0YSApIHsKKyAgICAgICAgdmFyIGRhdGEsIGlkLCBlbGVtLCB0eXBlLAorICAgICAgICAg
ICAgaSA9IDAsCisgICAgICAgICAgICBpbnRlcm5hbEtleSA9IGpRdWVyeS5leHBhbmRvLAorICAg
ICAgICAgICAgY2FjaGUgPSBqUXVlcnkuY2FjaGUsCisgICAgICAgICAgICBkZWxldGVFeHBhbmRv
ID0galF1ZXJ5LnN1cHBvcnQuZGVsZXRlRXhwYW5kbywKKyAgICAgICAgICAgIHNwZWNpYWwgPSBq
UXVlcnkuZXZlbnQuc3BlY2lhbDsKKworICAgICAgICBmb3IgKCA7IChlbGVtID0gZWxlbXNbaV0p
ICE9IG51bGw7IGkrKyApIHsKKworICAgICAgICAgICAgaWYgKCBhY2NlcHREYXRhIHx8IGpRdWVy
eS5hY2NlcHREYXRhKCBlbGVtICkgKSB7CisKKyAgICAgICAgICAgICAgICBpZCA9IGVsZW1bIGlu
dGVybmFsS2V5IF07CisgICAgICAgICAgICAgICAgZGF0YSA9IGlkICYmIGNhY2hlWyBpZCBdOwor
CisgICAgICAgICAgICAgICAgaWYgKCBkYXRhICkgeworICAgICAgICAgICAgICAgICAgICBpZiAo
IGRhdGEuZXZlbnRzICkgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggdHlwZSBpbiBk
YXRhLmV2ZW50cyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHNwZWNpYWxb
IHR5cGUgXSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50
LnJlbW92ZSggZWxlbSwgdHlwZSApOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
VGhpcyBpcyBhIHNob3J0Y3V0IHRvIGF2b2lkIGpRdWVyeS5ldmVudC5yZW1vdmUncyBvdmVyaGVh
ZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGpRdWVyeS5yZW1vdmVFdmVudCggZWxlbSwgdHlwZSwgZGF0YS5oYW5k
bGUgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAvLyBS
ZW1vdmUgY2FjaGUgb25seSBpZiBpdCB3YXMgbm90IGFscmVhZHkgcmVtb3ZlZCBieSBqUXVlcnku
ZXZlbnQucmVtb3ZlCisgICAgICAgICAgICAgICAgICAgIGlmICggY2FjaGVbIGlkIF0gKSB7CisK
KyAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBjYWNoZVsgaWQgXTsKKworICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gSUUgZG9lcyBub3QgYWxsb3cgdXMgdG8gZGVsZXRlIGV4cGFuZG8g
cHJvcGVydGllcyBmcm9tIG5vZGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gbm9yIGRv
ZXMgaXQgaGF2ZSBhIHJlbW92ZUF0dHJpYnV0ZSBmdW5jdGlvbiBvbiBEb2N1bWVudCBub2RlczsK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdlIG11c3QgaGFuZGxlIGFsbCBvZiB0aGVzZSBj
YXNlcworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBkZWxldGVFeHBhbmRvICkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBlbGVtWyBpbnRlcm5hbEtleSBdOworCisg
ICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBlbGVtLnJlbW92ZUF0dHJpYnV0ZSAp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLnJlbW92ZUF0dHJpYnV0ZSggaW50
ZXJuYWxLZXkgKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlbGVtWyBpbnRlcm5hbEtleSBdID0gbnVsbDsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmRlbGV0
ZWRJZHMucHVzaCggaWQgKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30pOworLy8gTGltaXQgc2NvcGUg
cG9sbHV0aW9uIGZyb20gYW55IGRlcHJlY2F0ZWQgQVBJCisoZnVuY3Rpb24oKSB7CisKK3ZhciBt
YXRjaGVkLCBicm93c2VyOworCisvLyBVc2Ugb2YgalF1ZXJ5LmJyb3dzZXIgaXMgZnJvd25lZCB1
cG9uLgorLy8gTW9yZSBkZXRhaWxzOiBodHRwOi8vYXBpLmpxdWVyeS5jb20valF1ZXJ5LmJyb3dz
ZXIKKy8vIGpRdWVyeS51YU1hdGNoIG1haW50YWluZWQgZm9yIGJhY2stY29tcGF0CitqUXVlcnku
dWFNYXRjaCA9IGZ1bmN0aW9uKCB1YSApIHsKKyAgICB1YSA9IHVhLnRvTG93ZXJDYXNlKCk7CisK
KyAgICB2YXIgbWF0Y2ggPSAvKGNocm9tZSlbIFwvXShbXHcuXSspLy5leGVjKCB1YSApIHx8Cisg
ICAgICAgIC8od2Via2l0KVsgXC9dKFtcdy5dKykvLmV4ZWMoIHVhICkgfHwKKyAgICAgICAgLyhv
cGVyYSkoPzouKnZlcnNpb258KVsgXC9dKFtcdy5dKykvLmV4ZWMoIHVhICkgfHwKKyAgICAgICAg
Lyhtc2llKSAoW1x3Ll0rKS8uZXhlYyggdWEgKSB8fAorICAgICAgICB1YS5pbmRleE9mKCJjb21w
YXRpYmxlIikgPCAwICYmIC8obW96aWxsYSkoPzouKj8gcnY6KFtcdy5dKyl8KS8uZXhlYyggdWEg
KSB8fAorICAgICAgICBbXTsKKworICAgIHJldHVybiB7CisgICAgICAgIGJyb3dzZXI6IG1hdGNo
WyAxIF0gfHwgIiIsCisgICAgICAgIHZlcnNpb246IG1hdGNoWyAyIF0gfHwgIjAiCisgICAgfTsK
K307CisKK21hdGNoZWQgPSBqUXVlcnkudWFNYXRjaCggbmF2aWdhdG9yLnVzZXJBZ2VudCApOwor
YnJvd3NlciA9IHt9OworCitpZiAoIG1hdGNoZWQuYnJvd3NlciApIHsKKyAgICBicm93c2VyWyBt
YXRjaGVkLmJyb3dzZXIgXSA9IHRydWU7CisgICAgYnJvd3Nlci52ZXJzaW9uID0gbWF0Y2hlZC52
ZXJzaW9uOworfQorCisvLyBDaHJvbWUgaXMgV2Via2l0LCBidXQgV2Via2l0IGlzIGFsc28gU2Fm
YXJpLgoraWYgKCBicm93c2VyLmNocm9tZSApIHsKKyAgICBicm93c2VyLndlYmtpdCA9IHRydWU7
Cit9IGVsc2UgaWYgKCBicm93c2VyLndlYmtpdCApIHsKKyAgICBicm93c2VyLnNhZmFyaSA9IHRy
dWU7Cit9CisKK2pRdWVyeS5icm93c2VyID0gYnJvd3NlcjsKKworalF1ZXJ5LnN1YiA9IGZ1bmN0
aW9uKCkgeworICAgIGZ1bmN0aW9uIGpRdWVyeVN1Yiggc2VsZWN0b3IsIGNvbnRleHQgKSB7Cisg
ICAgICAgIHJldHVybiBuZXcgalF1ZXJ5U3ViLmZuLmluaXQoIHNlbGVjdG9yLCBjb250ZXh0ICk7
CisgICAgfQorICAgIGpRdWVyeS5leHRlbmQoIHRydWUsIGpRdWVyeVN1YiwgdGhpcyApOworICAg
IGpRdWVyeVN1Yi5zdXBlcmNsYXNzID0gdGhpczsKKyAgICBqUXVlcnlTdWIuZm4gPSBqUXVlcnlT
dWIucHJvdG90eXBlID0gdGhpcygpOworICAgIGpRdWVyeVN1Yi5mbi5jb25zdHJ1Y3RvciA9IGpR
dWVyeVN1YjsKKyAgICBqUXVlcnlTdWIuc3ViID0gdGhpcy5zdWI7CisgICAgalF1ZXJ5U3ViLmZu
LmluaXQgPSBmdW5jdGlvbiBpbml0KCBzZWxlY3RvciwgY29udGV4dCApIHsKKyAgICAgICAgaWYg
KCBjb250ZXh0ICYmIGNvbnRleHQgaW5zdGFuY2VvZiBqUXVlcnkgJiYgIShjb250ZXh0IGluc3Rh
bmNlb2YgalF1ZXJ5U3ViKSApIHsKKyAgICAgICAgICAgIGNvbnRleHQgPSBqUXVlcnlTdWIoIGNv
bnRleHQgKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBqUXVlcnkuZm4uaW5pdC5jYWxs
KCB0aGlzLCBzZWxlY3RvciwgY29udGV4dCwgcm9vdGpRdWVyeVN1YiApOworICAgIH07CisgICAg
alF1ZXJ5U3ViLmZuLmluaXQucHJvdG90eXBlID0galF1ZXJ5U3ViLmZuOworICAgIHZhciByb290
alF1ZXJ5U3ViID0galF1ZXJ5U3ViKGRvY3VtZW50KTsKKyAgICByZXR1cm4galF1ZXJ5U3ViOwor
fTsKKworfSkoKTsKK3ZhciBjdXJDU1MsIGlmcmFtZSwgaWZyYW1lRG9jLAorICAgIHJhbHBoYSA9
IC9hbHBoYVwoW14pXSpcKS9pLAorICAgIHJvcGFjaXR5ID0gL29wYWNpdHk9KFteKV0qKS8sCisg
ICAgcnBvc2l0aW9uID0gL14odG9wfHJpZ2h0fGJvdHRvbXxsZWZ0KSQvLAorICAgIC8vIHN3YXBw
YWJsZSBpZiBkaXNwbGF5IGlzIG5vbmUgb3Igc3RhcnRzIHdpdGggdGFibGUgZXhjZXB0ICJ0YWJs
ZSIsICJ0YWJsZS1jZWxsIiwgb3IgInRhYmxlLWNhcHRpb24iCisgICAgLy8gc2VlIGhlcmUgZm9y
IGRpc3BsYXkgdmFsdWVzOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2Nz
L0NTUy9kaXNwbGF5CisgICAgcmRpc3BsYXlzd2FwID0gL14obm9uZXx0YWJsZSg/IS1jW2VhXSku
KykvLAorICAgIHJtYXJnaW4gPSAvXm1hcmdpbi8sCisgICAgcm51bXNwbGl0ID0gbmV3IFJlZ0V4
cCggIl4oIiArIGNvcmVfcG51bSArICIpKC4qKSQiLCAiaSIgKSwKKyAgICBybnVtbm9ucHggPSBu
ZXcgUmVnRXhwKCAiXigiICsgY29yZV9wbnVtICsgIikoPyFweClbYS16JV0rJCIsICJpIiApLAor
ICAgIHJyZWxOdW0gPSBuZXcgUmVnRXhwKCAiXihbLStdKT0oIiArIGNvcmVfcG51bSArICIpIiwg
ImkiICksCisgICAgZWxlbWRpc3BsYXkgPSB7IEJPRFk6ICJibG9jayIgfSwKKworICAgIGNzc1No
b3cgPSB7IHBvc2l0aW9uOiAiYWJzb2x1dGUiLCB2aXNpYmlsaXR5OiAiaGlkZGVuIiwgZGlzcGxh
eTogImJsb2NrIiB9LAorICAgIGNzc05vcm1hbFRyYW5zZm9ybSA9IHsKKyAgICAgICAgbGV0dGVy
U3BhY2luZzogMCwKKyAgICAgICAgZm9udFdlaWdodDogNDAwCisgICAgfSwKKworICAgIGNzc0V4
cGFuZCA9IFsgIlRvcCIsICJSaWdodCIsICJCb3R0b20iLCAiTGVmdCIgXSwKKyAgICBjc3NQcmVm
aXhlcyA9IFsgIldlYmtpdCIsICJPIiwgIk1veiIsICJtcyIgXSwKKworICAgIGV2ZW50c1RvZ2ds
ZSA9IGpRdWVyeS5mbi50b2dnbGU7CisKKy8vIHJldHVybiBhIGNzcyBwcm9wZXJ0eSBtYXBwZWQg
dG8gYSBwb3RlbnRpYWxseSB2ZW5kb3IgcHJlZml4ZWQgcHJvcGVydHkKK2Z1bmN0aW9uIHZlbmRv
clByb3BOYW1lKCBzdHlsZSwgbmFtZSApIHsKKworICAgIC8vIHNob3J0Y3V0IGZvciBuYW1lcyB0
aGF0IGFyZSBub3QgdmVuZG9yIHByZWZpeGVkCisgICAgaWYgKCBuYW1lIGluIHN0eWxlICkgewor
ICAgICAgICByZXR1cm4gbmFtZTsKKyAgICB9CisKKyAgICAvLyBjaGVjayBmb3IgdmVuZG9yIHBy
ZWZpeGVkIG5hbWVzCisgICAgdmFyIGNhcE5hbWUgPSBuYW1lLmNoYXJBdCgwKS50b1VwcGVyQ2Fz
ZSgpICsgbmFtZS5zbGljZSgxKSwKKyAgICAgICAgb3JpZ05hbWUgPSBuYW1lLAorICAgICAgICBp
ID0gY3NzUHJlZml4ZXMubGVuZ3RoOworCisgICAgd2hpbGUgKCBpLS0gKSB7CisgICAgICAgIG5h
bWUgPSBjc3NQcmVmaXhlc1sgaSBdICsgY2FwTmFtZTsKKyAgICAgICAgaWYgKCBuYW1lIGluIHN0
eWxlICkgeworICAgICAgICAgICAgcmV0dXJuIG5hbWU7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICByZXR1cm4gb3JpZ05hbWU7Cit9CisKK2Z1bmN0aW9uIGlzSGlkZGVuKCBlbGVtLCBlbCApIHsK
KyAgICBlbGVtID0gZWwgfHwgZWxlbTsKKyAgICByZXR1cm4galF1ZXJ5LmNzcyggZWxlbSwgImRp
c3BsYXkiICkgPT09ICJub25lIiB8fCAhalF1ZXJ5LmNvbnRhaW5zKCBlbGVtLm93bmVyRG9jdW1l
bnQsIGVsZW0gKTsKK30KKworZnVuY3Rpb24gc2hvd0hpZGUoIGVsZW1lbnRzLCBzaG93ICkgewor
ICAgIHZhciBlbGVtLCBkaXNwbGF5LAorICAgICAgICB2YWx1ZXMgPSBbXSwKKyAgICAgICAgaW5k
ZXggPSAwLAorICAgICAgICBsZW5ndGggPSBlbGVtZW50cy5sZW5ndGg7CisKKyAgICBmb3IgKCA7
IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkgeworICAgICAgICBlbGVtID0gZWxlbWVudHNbIGlu
ZGV4IF07CisgICAgICAgIGlmICggIWVsZW0uc3R5bGUgKSB7CisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgfQorICAgICAgICB2YWx1ZXNbIGluZGV4IF0gPSBqUXVlcnkuX2RhdGEoIGVs
ZW0sICJvbGRkaXNwbGF5IiApOworICAgICAgICBpZiAoIHNob3cgKSB7CisgICAgICAgICAgICAv
LyBSZXNldCB0aGUgaW5saW5lIGRpc3BsYXkgb2YgdGhpcyBlbGVtZW50IHRvIGxlYXJuIGlmIGl0
IGlzCisgICAgICAgICAgICAvLyBiZWluZyBoaWRkZW4gYnkgY2FzY2FkZWQgcnVsZXMgb3Igbm90
CisgICAgICAgICAgICBpZiAoICF2YWx1ZXNbIGluZGV4IF0gJiYgZWxlbS5zdHlsZS5kaXNwbGF5
ID09PSAibm9uZSIgKSB7CisgICAgICAgICAgICAgICAgZWxlbS5zdHlsZS5kaXNwbGF5ID0gIiI7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFNldCBlbGVtZW50cyB3aGljaCBoYXZl
IGJlZW4gb3ZlcnJpZGRlbiB3aXRoIGRpc3BsYXk6IG5vbmUKKyAgICAgICAgICAgIC8vIGluIGEg
c3R5bGVzaGVldCB0byB3aGF0ZXZlciB0aGUgZGVmYXVsdCBicm93c2VyIHN0eWxlIGlzCisgICAg
ICAgICAgICAvLyBmb3Igc3VjaCBhbiBlbGVtZW50CisgICAgICAgICAgICBpZiAoIGVsZW0uc3R5
bGUuZGlzcGxheSA9PT0gIiIgJiYgaXNIaWRkZW4oIGVsZW0gKSApIHsKKyAgICAgICAgICAgICAg
ICB2YWx1ZXNbIGluZGV4IF0gPSBqUXVlcnkuX2RhdGEoIGVsZW0sICJvbGRkaXNwbGF5IiwgY3Nz
X2RlZmF1bHREaXNwbGF5KGVsZW0ubm9kZU5hbWUpICk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBkaXNwbGF5ID0gY3VyQ1NTKCBlbGVtLCAiZGlzcGxheSIg
KTsKKworICAgICAgICAgICAgaWYgKCAhdmFsdWVzWyBpbmRleCBdICYmIGRpc3BsYXkgIT09ICJu
b25lIiApIHsKKyAgICAgICAgICAgICAgICBqUXVlcnkuX2RhdGEoIGVsZW0sICJvbGRkaXNwbGF5
IiwgZGlzcGxheSApOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8g
U2V0IHRoZSBkaXNwbGF5IG9mIG1vc3Qgb2YgdGhlIGVsZW1lbnRzIGluIGEgc2Vjb25kIGxvb3AK
KyAgICAvLyB0byBhdm9pZCB0aGUgY29uc3RhbnQgcmVmbG93CisgICAgZm9yICggaW5kZXggPSAw
OyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHsKKyAgICAgICAgZWxlbSA9IGVsZW1lbnRzWyBp
bmRleCBdOworICAgICAgICBpZiAoICFlbGVtLnN0eWxlICkgeworICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCAhc2hvdyB8fCBlbGVtLnN0eWxlLmRpc3BsYXkg
PT09ICJub25lIiB8fCBlbGVtLnN0eWxlLmRpc3BsYXkgPT09ICIiICkgeworICAgICAgICAgICAg
ZWxlbS5zdHlsZS5kaXNwbGF5ID0gc2hvdyA/IHZhbHVlc1sgaW5kZXggXSB8fCAiIiA6ICJub25l
IjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBlbGVtZW50czsKK30KKworalF1ZXJ5
LmZuLmV4dGVuZCh7CisgICAgY3NzOiBmdW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7CisgICAgICAg
IHJldHVybiBqUXVlcnkuYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUg
KSB7CisgICAgICAgICAgICByZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCA/CisgICAgICAgICAg
ICAgICAgalF1ZXJ5LnN0eWxlKCBlbGVtLCBuYW1lLCB2YWx1ZSApIDoKKyAgICAgICAgICAgICAg
ICBqUXVlcnkuY3NzKCBlbGVtLCBuYW1lICk7CisgICAgICAgIH0sIG5hbWUsIHZhbHVlLCBhcmd1
bWVudHMubGVuZ3RoID4gMSApOworICAgIH0sCisgICAgc2hvdzogZnVuY3Rpb24oKSB7CisgICAg
ICAgIHJldHVybiBzaG93SGlkZSggdGhpcywgdHJ1ZSApOworICAgIH0sCisgICAgaGlkZTogZnVu
Y3Rpb24oKSB7CisgICAgICAgIHJldHVybiBzaG93SGlkZSggdGhpcyApOworICAgIH0sCisgICAg
dG9nZ2xlOiBmdW5jdGlvbiggc3RhdGUsIGZuMiApIHsKKyAgICAgICAgdmFyIGJvb2wgPSB0eXBl
b2Ygc3RhdGUgPT09ICJib29sZWFuIjsKKworICAgICAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9u
KCBzdGF0ZSApICYmIGpRdWVyeS5pc0Z1bmN0aW9uKCBmbjIgKSApIHsKKyAgICAgICAgICAgIHJl
dHVybiBldmVudHNUb2dnbGUuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApOworICAgICAgICB9CisK
KyAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGlmICgg
Ym9vbCA/IHN0YXRlIDogaXNIaWRkZW4oIHRoaXMgKSApIHsKKyAgICAgICAgICAgICAgICBqUXVl
cnkoIHRoaXMgKS5zaG93KCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IGpRdWVyeSggdGhpcyApLmhpZGUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAg
fQorfSk7CisKK2pRdWVyeS5leHRlbmQoeworICAgIC8vIEFkZCBpbiBzdHlsZSBwcm9wZXJ0eSBo
b29rcyBmb3Igb3ZlcnJpZGluZyB0aGUgZGVmYXVsdAorICAgIC8vIGJlaGF2aW9yIG9mIGdldHRp
bmcgYW5kIHNldHRpbmcgYSBzdHlsZSBwcm9wZXJ0eQorICAgIGNzc0hvb2tzOiB7CisgICAgICAg
IG9wYWNpdHk6IHsKKyAgICAgICAgICAgIGdldDogZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkICkg
eworICAgICAgICAgICAgICAgIGlmICggY29tcHV0ZWQgKSB7CisgICAgICAgICAgICAgICAgICAg
IC8vIFdlIHNob3VsZCBhbHdheXMgZ2V0IGEgbnVtYmVyIGJhY2sgZnJvbSBvcGFjaXR5CisgICAg
ICAgICAgICAgICAgICAgIHZhciByZXQgPSBjdXJDU1MoIGVsZW0sICJvcGFjaXR5IiApOworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gcmV0ID09PSAiIiA/ICIxIiA6IHJldDsKKworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0sCisKKyAgICAvLyBF
eGNsdWRlIHRoZSBmb2xsb3dpbmcgY3NzIHByb3BlcnRpZXMgdG8gYWRkIHB4CisgICAgY3NzTnVt
YmVyOiB7CisgICAgICAgICJmaWxsT3BhY2l0eSI6IHRydWUsCisgICAgICAgICJmb250V2VpZ2h0
IjogdHJ1ZSwKKyAgICAgICAgImxpbmVIZWlnaHQiOiB0cnVlLAorICAgICAgICAib3BhY2l0eSI6
IHRydWUsCisgICAgICAgICJvcnBoYW5zIjogdHJ1ZSwKKyAgICAgICAgIndpZG93cyI6IHRydWUs
CisgICAgICAgICJ6SW5kZXgiOiB0cnVlLAorICAgICAgICAiem9vbSI6IHRydWUKKyAgICB9LAor
CisgICAgLy8gQWRkIGluIHByb3BlcnRpZXMgd2hvc2UgbmFtZXMgeW91IHdpc2ggdG8gZml4IGJl
Zm9yZQorICAgIC8vIHNldHRpbmcgb3IgZ2V0dGluZyB0aGUgdmFsdWUKKyAgICBjc3NQcm9wczog
eworICAgICAgICAvLyBub3JtYWxpemUgZmxvYXQgY3NzIHByb3BlcnR5CisgICAgICAgICJmbG9h
dCI6IGpRdWVyeS5zdXBwb3J0LmNzc0Zsb2F0ID8gImNzc0Zsb2F0IiA6ICJzdHlsZUZsb2F0Igor
ICAgIH0sCisKKyAgICAvLyBHZXQgYW5kIHNldCB0aGUgc3R5bGUgcHJvcGVydHkgb24gYSBET00g
Tm9kZQorICAgIHN0eWxlOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUsIGV4dHJhICkgewor
ICAgICAgICAvLyBEb24ndCBzZXQgc3R5bGVzIG9uIHRleHQgYW5kIGNvbW1lbnQgbm9kZXMKKyAg
ICAgICAgaWYgKCAhZWxlbSB8fCBlbGVtLm5vZGVUeXBlID09PSAzIHx8IGVsZW0ubm9kZVR5cGUg
PT09IDggfHwgIWVsZW0uc3R5bGUgKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KworICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB3ZSdyZSB3b3JraW5nIHdpdGggdGhlIHJpZ2h0
IG5hbWUKKyAgICAgICAgdmFyIHJldCwgdHlwZSwgaG9va3MsCisgICAgICAgICAgICBvcmlnTmFt
ZSA9IGpRdWVyeS5jYW1lbENhc2UoIG5hbWUgKSwKKyAgICAgICAgICAgIHN0eWxlID0gZWxlbS5z
dHlsZTsKKworICAgICAgICBuYW1lID0galF1ZXJ5LmNzc1Byb3BzWyBvcmlnTmFtZSBdIHx8ICgg
alF1ZXJ5LmNzc1Byb3BzWyBvcmlnTmFtZSBdID0gdmVuZG9yUHJvcE5hbWUoIHN0eWxlLCBvcmln
TmFtZSApICk7CisKKyAgICAgICAgLy8gZ2V0cyBob29rIGZvciB0aGUgcHJlZml4ZWQgdmVyc2lv
bgorICAgICAgICAvLyBmb2xsb3dlZCBieSB0aGUgdW5wcmVmaXhlZCB2ZXJzaW9uCisgICAgICAg
IGhvb2tzID0galF1ZXJ5LmNzc0hvb2tzWyBuYW1lIF0gfHwgalF1ZXJ5LmNzc0hvb2tzWyBvcmln
TmFtZSBdOworCisgICAgICAgIC8vIENoZWNrIGlmIHdlJ3JlIHNldHRpbmcgYSB2YWx1ZQorICAg
ICAgICBpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAgICB0eXBlID0gdHlw
ZW9mIHZhbHVlOworCisgICAgICAgICAgICAvLyBjb252ZXJ0IHJlbGF0aXZlIG51bWJlciBzdHJp
bmdzICgrPSBvciAtPSkgdG8gcmVsYXRpdmUgbnVtYmVycy4gIzczNDUKKyAgICAgICAgICAgIGlm
ICggdHlwZSA9PT0gInN0cmluZyIgJiYgKHJldCA9IHJyZWxOdW0uZXhlYyggdmFsdWUgKSkgKSB7
CisgICAgICAgICAgICAgICAgdmFsdWUgPSAoIHJldFsxXSArIDEgKSAqIHJldFsyXSArIHBhcnNl
RmxvYXQoIGpRdWVyeS5jc3MoIGVsZW0sIG5hbWUgKSApOworICAgICAgICAgICAgICAgIC8vIEZp
eGVzIGJ1ZyAjOTIzNworICAgICAgICAgICAgICAgIHR5cGUgPSAibnVtYmVyIjsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgTmFOIGFuZCBudWxsIHZhbHVl
cyBhcmVuJ3Qgc2V0LiBTZWU6ICM3MTE2CisgICAgICAgICAgICBpZiAoIHZhbHVlID09IG51bGwg
fHwgdHlwZSA9PT0gIm51bWJlciIgJiYgaXNOYU4oIHZhbHVlICkgKSB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBJZiBhIG51bWJlciB3
YXMgcGFzc2VkIGluLCBhZGQgJ3B4JyB0byB0aGUgKGV4Y2VwdCBmb3IgY2VydGFpbiBDU1MgcHJv
cGVydGllcykKKyAgICAgICAgICAgIGlmICggdHlwZSA9PT0gIm51bWJlciIgJiYgIWpRdWVyeS5j
c3NOdW1iZXJbIG9yaWdOYW1lIF0gKSB7CisgICAgICAgICAgICAgICAgdmFsdWUgKz0gInB4IjsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gSWYgYSBob29rIHdhcyBwcm92aWRlZCwg
dXNlIHRoYXQgdmFsdWUsIG90aGVyd2lzZSBqdXN0IHNldCB0aGUgc3BlY2lmaWVkIHZhbHVlCisg
ICAgICAgICAgICBpZiAoICFob29rcyB8fCAhKCJzZXQiIGluIGhvb2tzKSB8fCAodmFsdWUgPSBo
b29rcy5zZXQoIGVsZW0sIHZhbHVlLCBleHRyYSApKSAhPT0gdW5kZWZpbmVkICkgeworICAgICAg
ICAgICAgICAgIC8vIFdyYXBwZWQgdG8gcHJldmVudCBJRSBmcm9tIHRocm93aW5nIGVycm9ycyB3
aGVuICdpbnZhbGlkJyB2YWx1ZXMgYXJlIHByb3ZpZGVkCisgICAgICAgICAgICAgICAgLy8gRml4
ZXMgYnVnICM1NTA5CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAg
c3R5bGVbIG5hbWUgXSA9IHZhbHVlOworICAgICAgICAgICAgICAgIH0gY2F0Y2goZSkge30KKyAg
ICAgICAgICAgIH0KKworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gSWYgYSBob29r
IHdhcyBwcm92aWRlZCBnZXQgdGhlIG5vbi1jb21wdXRlZCB2YWx1ZSBmcm9tIHRoZXJlCisgICAg
ICAgICAgICBpZiAoIGhvb2tzICYmICJnZXQiIGluIGhvb2tzICYmIChyZXQgPSBob29rcy5nZXQo
IGVsZW0sIGZhbHNlLCBleHRyYSApKSAhPT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgICAg
IHJldHVybiByZXQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIE90aGVyd2lzZSBq
dXN0IGdldCB0aGUgdmFsdWUgZnJvbSB0aGUgc3R5bGUgb2JqZWN0CisgICAgICAgICAgICByZXR1
cm4gc3R5bGVbIG5hbWUgXTsKKyAgICAgICAgfQorICAgIH0sCisKKyAgICBjc3M6IGZ1bmN0aW9u
KCBlbGVtLCBuYW1lLCBudW1lcmljLCBleHRyYSApIHsKKyAgICAgICAgdmFyIHZhbCwgbnVtLCBo
b29rcywKKyAgICAgICAgICAgIG9yaWdOYW1lID0galF1ZXJ5LmNhbWVsQ2FzZSggbmFtZSApOwor
CisgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHdlJ3JlIHdvcmtpbmcgd2l0aCB0aGUgcmlnaHQg
bmFtZQorICAgICAgICBuYW1lID0galF1ZXJ5LmNzc1Byb3BzWyBvcmlnTmFtZSBdIHx8ICggalF1
ZXJ5LmNzc1Byb3BzWyBvcmlnTmFtZSBdID0gdmVuZG9yUHJvcE5hbWUoIGVsZW0uc3R5bGUsIG9y
aWdOYW1lICkgKTsKKworICAgICAgICAvLyBnZXRzIGhvb2sgZm9yIHRoZSBwcmVmaXhlZCB2ZXJz
aW9uCisgICAgICAgIC8vIGZvbGxvd2VkIGJ5IHRoZSB1bnByZWZpeGVkIHZlcnNpb24KKyAgICAg
ICAgaG9va3MgPSBqUXVlcnkuY3NzSG9va3NbIG5hbWUgXSB8fCBqUXVlcnkuY3NzSG9va3NbIG9y
aWdOYW1lIF07CisKKyAgICAgICAgLy8gSWYgYSBob29rIHdhcyBwcm92aWRlZCBnZXQgdGhlIGNv
bXB1dGVkIHZhbHVlIGZyb20gdGhlcmUKKyAgICAgICAgaWYgKCBob29rcyAmJiAiZ2V0IiBpbiBo
b29rcyApIHsKKyAgICAgICAgICAgIHZhbCA9IGhvb2tzLmdldCggZWxlbSwgdHJ1ZSwgZXh0cmEg
KTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE90aGVyd2lzZSwgaWYgYSB3YXkgdG8gZ2V0IHRo
ZSBjb21wdXRlZCB2YWx1ZSBleGlzdHMsIHVzZSB0aGF0CisgICAgICAgIGlmICggdmFsID09PSB1
bmRlZmluZWQgKSB7CisgICAgICAgICAgICB2YWwgPSBjdXJDU1MoIGVsZW0sIG5hbWUgKTsKKyAg
ICAgICAgfQorCisgICAgICAgIC8vY29udmVydCAibm9ybWFsIiB0byBjb21wdXRlZCB2YWx1ZQor
ICAgICAgICBpZiAoIHZhbCA9PT0gIm5vcm1hbCIgJiYgbmFtZSBpbiBjc3NOb3JtYWxUcmFuc2Zv
cm0gKSB7CisgICAgICAgICAgICB2YWwgPSBjc3NOb3JtYWxUcmFuc2Zvcm1bIG5hbWUgXTsKKyAg
ICAgICAgfQorCisgICAgICAgIC8vIFJldHVybiwgY29udmVydGluZyB0byBudW1iZXIgaWYgZm9y
Y2VkIG9yIGEgcXVhbGlmaWVyIHdhcyBwcm92aWRlZCBhbmQgdmFsIGxvb2tzIG51bWVyaWMKKyAg
ICAgICAgaWYgKCBudW1lcmljIHx8IGV4dHJhICE9PSB1bmRlZmluZWQgKSB7CisgICAgICAgICAg
ICBudW0gPSBwYXJzZUZsb2F0KCB2YWwgKTsKKyAgICAgICAgICAgIHJldHVybiBudW1lcmljIHx8
IGpRdWVyeS5pc051bWVyaWMoIG51bSApID8gbnVtIHx8IDAgOiB2YWw7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIHZhbDsKKyAgICB9LAorCisgICAgLy8gQSBtZXRob2QgZm9yIHF1aWNrbHkg
c3dhcHBpbmcgaW4vb3V0IENTUyBwcm9wZXJ0aWVzIHRvIGdldCBjb3JyZWN0IGNhbGN1bGF0aW9u
cworICAgIHN3YXA6IGZ1bmN0aW9uKCBlbGVtLCBvcHRpb25zLCBjYWxsYmFjayApIHsKKyAgICAg
ICAgdmFyIHJldCwgbmFtZSwKKyAgICAgICAgICAgIG9sZCA9IHt9OworCisgICAgICAgIC8vIFJl
bWVtYmVyIHRoZSBvbGQgdmFsdWVzLCBhbmQgaW5zZXJ0IHRoZSBuZXcgb25lcworICAgICAgICBm
b3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7CisgICAgICAgICAgICBvbGRbIG5hbWUgXSA9IGVsZW0u
c3R5bGVbIG5hbWUgXTsKKyAgICAgICAgICAgIGVsZW0uc3R5bGVbIG5hbWUgXSA9IG9wdGlvbnNb
IG5hbWUgXTsKKyAgICAgICAgfQorCisgICAgICAgIHJldCA9IGNhbGxiYWNrLmNhbGwoIGVsZW0g
KTsKKworICAgICAgICAvLyBSZXZlcnQgdGhlIG9sZCB2YWx1ZXMKKyAgICAgICAgZm9yICggbmFt
ZSBpbiBvcHRpb25zICkgeworICAgICAgICAgICAgZWxlbS5zdHlsZVsgbmFtZSBdID0gb2xkWyBu
YW1lIF07CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcmV0OworICAgIH0KK30pOworCisv
LyBOT1RFOiBUbyBhbnkgZnV0dXJlIG1haW50YWluZXIsIHdlJ3ZlIHdpbmRvdy5nZXRDb21wdXRl
ZFN0eWxlCisvLyBiZWNhdXNlIGpzZG9tIG9uIG5vZGUuanMgd2lsbCBicmVhayB3aXRob3V0IGl0
LgoraWYgKCB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSApIHsKKyAgICBjdXJDU1MgPSBmdW5jdGlv
biggZWxlbSwgbmFtZSApIHsKKyAgICAgICAgdmFyIHJldCwgd2lkdGgsIG1pbldpZHRoLCBtYXhX
aWR0aCwKKyAgICAgICAgICAgIGNvbXB1dGVkID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoIGVs
ZW0sIG51bGwgKSwKKyAgICAgICAgICAgIHN0eWxlID0gZWxlbS5zdHlsZTsKKworICAgICAgICBp
ZiAoIGNvbXB1dGVkICkgeworCisgICAgICAgICAgICAvLyBnZXRQcm9wZXJ0eVZhbHVlIGlzIG9u
bHkgbmVlZGVkIGZvciAuY3NzKCdmaWx0ZXInKSBpbiBJRTksIHNlZSAjMTI1MzcKKyAgICAgICAg
ICAgIHJldCA9IGNvbXB1dGVkLmdldFByb3BlcnR5VmFsdWUoIG5hbWUgKSB8fCBjb21wdXRlZFsg
bmFtZSBdOworCisgICAgICAgICAgICBpZiAoIHJldCA9PT0gIiIgJiYgIWpRdWVyeS5jb250YWlu
cyggZWxlbS5vd25lckRvY3VtZW50LCBlbGVtICkgKSB7CisgICAgICAgICAgICAgICAgcmV0ID0g
alF1ZXJ5LnN0eWxlKCBlbGVtLCBuYW1lICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IC8vIEEgdHJpYnV0ZSB0byB0aGUgImF3ZXNvbWUgaGFjayBieSBEZWFuIEVkd2FyZHMiCisgICAg
ICAgICAgICAvLyBDaHJvbWUgPCAxNyBhbmQgU2FmYXJpIDUuMCB1c2VzICJjb21wdXRlZCB2YWx1
ZSIgaW5zdGVhZCBvZiAidXNlZCB2YWx1ZSIgZm9yIG1hcmdpbi1yaWdodAorICAgICAgICAgICAg
Ly8gU2FmYXJpIDUuMS43IChhdCBsZWFzdCkgcmV0dXJucyBwZXJjZW50YWdlIGZvciBhIGxhcmdl
ciBzZXQgb2YgdmFsdWVzLCBidXQgd2lkdGggc2VlbXMgdG8gYmUgcmVsaWFibHkgcGl4ZWxzCisg
ICAgICAgICAgICAvLyB0aGlzIGlzIGFnYWluc3QgdGhlIENTU09NIGRyYWZ0IHNwZWM6IGh0dHA6
Ly9kZXYudzMub3JnL2Nzc3dnL2Nzc29tLyNyZXNvbHZlZC12YWx1ZXMKKyAgICAgICAgICAgIGlm
ICggcm51bW5vbnB4LnRlc3QoIHJldCApICYmIHJtYXJnaW4udGVzdCggbmFtZSApICkgeworICAg
ICAgICAgICAgICAgIHdpZHRoID0gc3R5bGUud2lkdGg7CisgICAgICAgICAgICAgICAgbWluV2lk
dGggPSBzdHlsZS5taW5XaWR0aDsKKyAgICAgICAgICAgICAgICBtYXhXaWR0aCA9IHN0eWxlLm1h
eFdpZHRoOworCisgICAgICAgICAgICAgICAgc3R5bGUubWluV2lkdGggPSBzdHlsZS5tYXhXaWR0
aCA9IHN0eWxlLndpZHRoID0gcmV0OworICAgICAgICAgICAgICAgIHJldCA9IGNvbXB1dGVkLndp
ZHRoOworCisgICAgICAgICAgICAgICAgc3R5bGUud2lkdGggPSB3aWR0aDsKKyAgICAgICAgICAg
ICAgICBzdHlsZS5taW5XaWR0aCA9IG1pbldpZHRoOworICAgICAgICAgICAgICAgIHN0eWxlLm1h
eFdpZHRoID0gbWF4V2lkdGg7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBy
ZXR1cm4gcmV0OworICAgIH07Cit9IGVsc2UgaWYgKCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQu
Y3VycmVudFN0eWxlICkgeworICAgIGN1ckNTUyA9IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkgewor
ICAgICAgICB2YXIgbGVmdCwgcnNMZWZ0LAorICAgICAgICAgICAgcmV0ID0gZWxlbS5jdXJyZW50
U3R5bGUgJiYgZWxlbS5jdXJyZW50U3R5bGVbIG5hbWUgXSwKKyAgICAgICAgICAgIHN0eWxlID0g
ZWxlbS5zdHlsZTsKKworICAgICAgICAvLyBBdm9pZCBzZXR0aW5nIHJldCB0byBlbXB0eSBzdHJp
bmcgaGVyZQorICAgICAgICAvLyBzbyB3ZSBkb24ndCBkZWZhdWx0IHRvIGF1dG8KKyAgICAgICAg
aWYgKCByZXQgPT0gbnVsbCAmJiBzdHlsZSAmJiBzdHlsZVsgbmFtZSBdICkgeworICAgICAgICAg
ICAgcmV0ID0gc3R5bGVbIG5hbWUgXTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZyb20gdGhl
IGF3ZXNvbWUgaGFjayBieSBEZWFuIEVkd2FyZHMKKyAgICAgICAgLy8gaHR0cDovL2VyaWsuZWFl
Lm5ldC9hcmNoaXZlcy8yMDA3LzA3LzI3LzE4LjU0LjE1LyNjb21tZW50LTEwMjI5MQorCisgICAg
ICAgIC8vIElmIHdlJ3JlIG5vdCBkZWFsaW5nIHdpdGggYSByZWd1bGFyIHBpeGVsIG51bWJlcgor
ICAgICAgICAvLyBidXQgYSBudW1iZXIgdGhhdCBoYXMgYSB3ZWlyZCBlbmRpbmcsIHdlIG5lZWQg
dG8gY29udmVydCBpdCB0byBwaXhlbHMKKyAgICAgICAgLy8gYnV0IG5vdCBwb3NpdGlvbiBjc3Mg
YXR0cmlidXRlcywgYXMgdGhvc2UgYXJlIHByb3BvcnRpb25hbCB0byB0aGUgcGFyZW50IGVsZW1l
bnQgaW5zdGVhZAorICAgICAgICAvLyBhbmQgd2UgY2FuJ3QgbWVhc3VyZSB0aGUgcGFyZW50IGlu
c3RlYWQgYmVjYXVzZSBpdCBtaWdodCB0cmlnZ2VyIGEgInN0YWNraW5nIGRvbGxzIiBwcm9ibGVt
CisgICAgICAgIGlmICggcm51bW5vbnB4LnRlc3QoIHJldCApICYmICFycG9zaXRpb24udGVzdCgg
bmFtZSApICkgeworCisgICAgICAgICAgICAvLyBSZW1lbWJlciB0aGUgb3JpZ2luYWwgdmFsdWVz
CisgICAgICAgICAgICBsZWZ0ID0gc3R5bGUubGVmdDsKKyAgICAgICAgICAgIHJzTGVmdCA9IGVs
ZW0ucnVudGltZVN0eWxlICYmIGVsZW0ucnVudGltZVN0eWxlLmxlZnQ7CisKKyAgICAgICAgICAg
IC8vIFB1dCBpbiB0aGUgbmV3IHZhbHVlcyB0byBnZXQgYSBjb21wdXRlZCB2YWx1ZSBvdXQKKyAg
ICAgICAgICAgIGlmICggcnNMZWZ0ICkgeworICAgICAgICAgICAgICAgIGVsZW0ucnVudGltZVN0
eWxlLmxlZnQgPSBlbGVtLmN1cnJlbnRTdHlsZS5sZWZ0OworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgc3R5bGUubGVmdCA9IG5hbWUgPT09ICJmb250U2l6ZSIgPyAiMWVtIiA6IHJldDsKKyAg
ICAgICAgICAgIHJldCA9IHN0eWxlLnBpeGVsTGVmdCArICJweCI7CisKKyAgICAgICAgICAgIC8v
IFJldmVydCB0aGUgY2hhbmdlZCB2YWx1ZXMKKyAgICAgICAgICAgIHN0eWxlLmxlZnQgPSBsZWZ0
OworICAgICAgICAgICAgaWYgKCByc0xlZnQgKSB7CisgICAgICAgICAgICAgICAgZWxlbS5ydW50
aW1lU3R5bGUubGVmdCA9IHJzTGVmdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIHJldHVybiByZXQgPT09ICIiID8gImF1dG8iIDogcmV0OworICAgIH07Cit9CisKK2Z1bmN0
aW9uIHNldFBvc2l0aXZlTnVtYmVyKCBlbGVtLCB2YWx1ZSwgc3VidHJhY3QgKSB7CisgICAgdmFy
IG1hdGNoZXMgPSBybnVtc3BsaXQuZXhlYyggdmFsdWUgKTsKKyAgICByZXR1cm4gbWF0Y2hlcyA/
CisgICAgICAgICAgICBNYXRoLm1heCggMCwgbWF0Y2hlc1sgMSBdIC0gKCBzdWJ0cmFjdCB8fCAw
ICkgKSArICggbWF0Y2hlc1sgMiBdIHx8ICJweCIgKSA6CisgICAgICAgICAgICB2YWx1ZTsKK30K
KworZnVuY3Rpb24gYXVnbWVudFdpZHRoT3JIZWlnaHQoIGVsZW0sIG5hbWUsIGV4dHJhLCBpc0Jv
cmRlckJveCApIHsKKyAgICB2YXIgaSA9IGV4dHJhID09PSAoIGlzQm9yZGVyQm94ID8gImJvcmRl
ciIgOiAiY29udGVudCIgKSA/CisgICAgICAgIC8vIElmIHdlIGFscmVhZHkgaGF2ZSB0aGUgcmln
aHQgbWVhc3VyZW1lbnQsIGF2b2lkIGF1Z21lbnRhdGlvbgorICAgICAgICA0IDoKKyAgICAgICAg
Ly8gT3RoZXJ3aXNlIGluaXRpYWxpemUgZm9yIGhvcml6b250YWwgb3IgdmVydGljYWwgcHJvcGVy
dGllcworICAgICAgICBuYW1lID09PSAid2lkdGgiID8gMSA6IDAsCisKKyAgICAgICAgdmFsID0g
MDsKKworICAgIGZvciAoIDsgaSA8IDQ7IGkgKz0gMiApIHsKKyAgICAgICAgLy8gYm90aCBib3gg
bW9kZWxzIGV4Y2x1ZGUgbWFyZ2luLCBzbyBhZGQgaXQgaWYgd2Ugd2FudCBpdAorICAgICAgICBp
ZiAoIGV4dHJhID09PSAibWFyZ2luIiApIHsKKyAgICAgICAgICAgIC8vIHdlIHVzZSBqUXVlcnku
Y3NzIGluc3RlYWQgb2YgY3VyQ1NTIGhlcmUKKyAgICAgICAgICAgIC8vIGJlY2F1c2Ugb2YgdGhl
IHJlbGlhYmxlTWFyZ2luUmlnaHQgQ1NTIGhvb2shCisgICAgICAgICAgICB2YWwgKz0galF1ZXJ5
LmNzcyggZWxlbSwgZXh0cmEgKyBjc3NFeHBhbmRbIGkgXSwgdHJ1ZSApOworICAgICAgICB9CisK
KyAgICAgICAgLy8gRnJvbSB0aGlzIHBvaW50IG9uIHdlIHVzZSBjdXJDU1MgZm9yIG1heGltdW0g
cGVyZm9ybWFuY2UgKHJlbGV2YW50IGluIGFuaW1hdGlvbnMpCisgICAgICAgIGlmICggaXNCb3Jk
ZXJCb3ggKSB7CisgICAgICAgICAgICAvLyBib3JkZXItYm94IGluY2x1ZGVzIHBhZGRpbmcsIHNv
IHJlbW92ZSBpdCBpZiB3ZSB3YW50IGNvbnRlbnQKKyAgICAgICAgICAgIGlmICggZXh0cmEgPT09
ICJjb250ZW50IiApIHsKKyAgICAgICAgICAgICAgICB2YWwgLT0gcGFyc2VGbG9hdCggY3VyQ1NT
KCBlbGVtLCAicGFkZGluZyIgKyBjc3NFeHBhbmRbIGkgXSApICkgfHwgMDsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgLy8gYXQgdGhpcyBwb2ludCwgZXh0cmEgaXNuJ3QgYm9yZGVyIG5v
ciBtYXJnaW4sIHNvIHJlbW92ZSBib3JkZXIKKyAgICAgICAgICAgIGlmICggZXh0cmEgIT09ICJt
YXJnaW4iICkgeworICAgICAgICAgICAgICAgIHZhbCAtPSBwYXJzZUZsb2F0KCBjdXJDU1MoIGVs
ZW0sICJib3JkZXIiICsgY3NzRXhwYW5kWyBpIF0gKyAiV2lkdGgiICkgKSB8fCAwOworICAgICAg
ICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gYXQgdGhpcyBwb2ludCwg
ZXh0cmEgaXNuJ3QgY29udGVudCwgc28gYWRkIHBhZGRpbmcKKyAgICAgICAgICAgIHZhbCArPSBw
YXJzZUZsb2F0KCBjdXJDU1MoIGVsZW0sICJwYWRkaW5nIiArIGNzc0V4cGFuZFsgaSBdICkgKSB8
fCAwOworCisgICAgICAgICAgICAvLyBhdCB0aGlzIHBvaW50LCBleHRyYSBpc24ndCBjb250ZW50
IG5vciBwYWRkaW5nLCBzbyBhZGQgYm9yZGVyCisgICAgICAgICAgICBpZiAoIGV4dHJhICE9PSAi
cGFkZGluZyIgKSB7CisgICAgICAgICAgICAgICAgdmFsICs9IHBhcnNlRmxvYXQoIGN1ckNTUygg
ZWxlbSwgImJvcmRlciIgKyBjc3NFeHBhbmRbIGkgXSArICJXaWR0aCIgKSApIHx8IDA7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdmFsOworfQorCitmdW5j
dGlvbiBnZXRXaWR0aE9ySGVpZ2h0KCBlbGVtLCBuYW1lLCBleHRyYSApIHsKKworICAgIC8vIFN0
YXJ0IHdpdGggb2Zmc2V0IHByb3BlcnR5LCB3aGljaCBpcyBlcXVpdmFsZW50IHRvIHRoZSBib3Jk
ZXItYm94IHZhbHVlCisgICAgdmFyIHZhbCA9IG5hbWUgPT09ICJ3aWR0aCIgPyBlbGVtLm9mZnNl
dFdpZHRoIDogZWxlbS5vZmZzZXRIZWlnaHQsCisgICAgICAgIHZhbHVlSXNCb3JkZXJCb3ggPSB0
cnVlLAorICAgICAgICBpc0JvcmRlckJveCA9IGpRdWVyeS5zdXBwb3J0LmJveFNpemluZyAmJiBq
UXVlcnkuY3NzKCBlbGVtLCAiYm94U2l6aW5nIiApID09PSAiYm9yZGVyLWJveCI7CisKKyAgICAv
LyBzb21lIG5vbi1odG1sIGVsZW1lbnRzIHJldHVybiB1bmRlZmluZWQgZm9yIG9mZnNldFdpZHRo
LCBzbyBjaGVjayBmb3IgbnVsbC91bmRlZmluZWQKKyAgICAvLyBzdmcgLSBodHRwczovL2J1Z3pp
bGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD02NDkyODUKKyAgICAvLyBNYXRoTUwgLSBo
dHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD00OTE2NjgKKyAgICBp
ZiAoIHZhbCA8PSAwIHx8IHZhbCA9PSBudWxsICkgeworICAgICAgICAvLyBGYWxsIGJhY2sgdG8g
Y29tcHV0ZWQgdGhlbiB1bmNvbXB1dGVkIGNzcyBpZiBuZWNlc3NhcnkKKyAgICAgICAgdmFsID0g
Y3VyQ1NTKCBlbGVtLCBuYW1lICk7CisgICAgICAgIGlmICggdmFsIDwgMCB8fCB2YWwgPT0gbnVs
bCApIHsKKyAgICAgICAgICAgIHZhbCA9IGVsZW0uc3R5bGVbIG5hbWUgXTsKKyAgICAgICAgfQor
CisgICAgICAgIC8vIENvbXB1dGVkIHVuaXQgaXMgbm90IHBpeGVscy4gU3RvcCBoZXJlIGFuZCBy
ZXR1cm4uCisgICAgICAgIGlmICggcm51bW5vbnB4LnRlc3QodmFsKSApIHsKKyAgICAgICAgICAg
IHJldHVybiB2YWw7CisgICAgICAgIH0KKworICAgICAgICAvLyB3ZSBuZWVkIHRoZSBjaGVjayBm
b3Igc3R5bGUgaW4gY2FzZSBhIGJyb3dzZXIgd2hpY2ggcmV0dXJucyB1bnJlbGlhYmxlIHZhbHVl
cworICAgICAgICAvLyBmb3IgZ2V0Q29tcHV0ZWRTdHlsZSBzaWxlbnRseSBmYWxscyBiYWNrIHRv
IHRoZSByZWxpYWJsZSBlbGVtLnN0eWxlCisgICAgICAgIHZhbHVlSXNCb3JkZXJCb3ggPSBpc0Jv
cmRlckJveCAmJiAoIGpRdWVyeS5zdXBwb3J0LmJveFNpemluZ1JlbGlhYmxlIHx8IHZhbCA9PT0g
ZWxlbS5zdHlsZVsgbmFtZSBdICk7CisKKyAgICAgICAgLy8gTm9ybWFsaXplICIiLCBhdXRvLCBh
bmQgcHJlcGFyZSBmb3IgZXh0cmEKKyAgICAgICAgdmFsID0gcGFyc2VGbG9hdCggdmFsICkgfHwg
MDsKKyAgICB9CisKKyAgICAvLyB1c2UgdGhlIGFjdGl2ZSBib3gtc2l6aW5nIG1vZGVsIHRvIGFk
ZC9zdWJ0cmFjdCBpcnJlbGV2YW50IHN0eWxlcworICAgIHJldHVybiAoIHZhbCArCisgICAgICAg
IGF1Z21lbnRXaWR0aE9ySGVpZ2h0KAorICAgICAgICAgICAgZWxlbSwKKyAgICAgICAgICAgIG5h
bWUsCisgICAgICAgICAgICBleHRyYSB8fCAoIGlzQm9yZGVyQm94ID8gImJvcmRlciIgOiAiY29u
dGVudCIgKSwKKyAgICAgICAgICAgIHZhbHVlSXNCb3JkZXJCb3gKKyAgICAgICAgKQorICAgICkg
KyAicHgiOworfQorCisKKy8vIFRyeSB0byBkZXRlcm1pbmUgdGhlIGRlZmF1bHQgZGlzcGxheSB2
YWx1ZSBvZiBhbiBlbGVtZW50CitmdW5jdGlvbiBjc3NfZGVmYXVsdERpc3BsYXkoIG5vZGVOYW1l
ICkgeworICAgIGlmICggZWxlbWRpc3BsYXlbIG5vZGVOYW1lIF0gKSB7CisgICAgICAgIHJldHVy
biBlbGVtZGlzcGxheVsgbm9kZU5hbWUgXTsKKyAgICB9CisKKyAgICB2YXIgZWxlbSA9IGpRdWVy
eSggIjwiICsgbm9kZU5hbWUgKyAiPiIgKS5hcHBlbmRUbyggZG9jdW1lbnQuYm9keSApLAorICAg
ICAgICBkaXNwbGF5ID0gZWxlbS5jc3MoImRpc3BsYXkiKTsKKyAgICBlbGVtLnJlbW92ZSgpOwor
CisgICAgLy8gSWYgdGhlIHNpbXBsZSB3YXkgZmFpbHMsCisgICAgLy8gZ2V0IGVsZW1lbnQncyBy
ZWFsIGRlZmF1bHQgZGlzcGxheSBieSBhdHRhY2hpbmcgaXQgdG8gYSB0ZW1wIGlmcmFtZQorICAg
IGlmICggZGlzcGxheSA9PT0gIm5vbmUiIHx8IGRpc3BsYXkgPT09ICIiICkgeworICAgICAgICAv
LyBVc2UgdGhlIGFscmVhZHktY3JlYXRlZCBpZnJhbWUgaWYgcG9zc2libGUKKyAgICAgICAgaWZy
YW1lID0gZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCgKKyAgICAgICAgICAgIGlmcmFtZSB8fCBq
UXVlcnkuZXh0ZW5kKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKSwgeworICAgICAg
ICAgICAgICAgIGZyYW1lQm9yZGVyOiAwLAorICAgICAgICAgICAgICAgIHdpZHRoOiAwLAorICAg
ICAgICAgICAgICAgIGhlaWdodDogMAorICAgICAgICAgICAgfSkKKyAgICAgICAgKTsKKworICAg
ICAgICAvLyBDcmVhdGUgYSBjYWNoZWFibGUgY29weSBvZiB0aGUgaWZyYW1lIGRvY3VtZW50IG9u
IGZpcnN0IGNhbGwuCisgICAgICAgIC8vIElFIGFuZCBPcGVyYSB3aWxsIGFsbG93IHVzIHRvIHJl
dXNlIHRoZSBpZnJhbWVEb2Mgd2l0aG91dCByZS13cml0aW5nIHRoZSBmYWtlIEhUTUwKKyAgICAg
ICAgLy8gZG9jdW1lbnQgdG8gaXQ7IFdlYktpdCAmIEZpcmVmb3ggd29uJ3QgYWxsb3cgcmV1c2lu
ZyB0aGUgaWZyYW1lIGRvY3VtZW50LgorICAgICAgICBpZiAoICFpZnJhbWVEb2MgfHwgIWlmcmFt
ZS5jcmVhdGVFbGVtZW50ICkgeworICAgICAgICAgICAgaWZyYW1lRG9jID0gKCBpZnJhbWUuY29u
dGVudFdpbmRvdyB8fCBpZnJhbWUuY29udGVudERvY3VtZW50ICkuZG9jdW1lbnQ7CisgICAgICAg
ICAgICBpZnJhbWVEb2Mud3JpdGUoIjwhZG9jdHlwZSBodG1sPjxodG1sPjxib2R5PiIpOworICAg
ICAgICAgICAgaWZyYW1lRG9jLmNsb3NlKCk7CisgICAgICAgIH0KKworICAgICAgICBlbGVtID0g
aWZyYW1lRG9jLmJvZHkuYXBwZW5kQ2hpbGQoIGlmcmFtZURvYy5jcmVhdGVFbGVtZW50KG5vZGVO
YW1lKSApOworCisgICAgICAgIGRpc3BsYXkgPSBjdXJDU1MoIGVsZW0sICJkaXNwbGF5IiApOwor
ICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKCBpZnJhbWUgKTsKKyAgICB9CisKKyAg
ICAvLyBTdG9yZSB0aGUgY29ycmVjdCBkZWZhdWx0IGRpc3BsYXkKKyAgICBlbGVtZGlzcGxheVsg
bm9kZU5hbWUgXSA9IGRpc3BsYXk7CisKKyAgICByZXR1cm4gZGlzcGxheTsKK30KKworalF1ZXJ5
LmVhY2goWyAiaGVpZ2h0IiwgIndpZHRoIiBdLCBmdW5jdGlvbiggaSwgbmFtZSApIHsKKyAgICBq
UXVlcnkuY3NzSG9va3NbIG5hbWUgXSA9IHsKKyAgICAgICAgZ2V0OiBmdW5jdGlvbiggZWxlbSwg
Y29tcHV0ZWQsIGV4dHJhICkgeworICAgICAgICAgICAgaWYgKCBjb21wdXRlZCApIHsKKyAgICAg
ICAgICAgICAgICAvLyBjZXJ0YWluIGVsZW1lbnRzIGNhbiBoYXZlIGRpbWVuc2lvbiBpbmZvIGlm
IHdlIGludmlzaWJseSBzaG93IHRoZW0KKyAgICAgICAgICAgICAgICAvLyBob3dldmVyLCBpdCBt
dXN0IGhhdmUgYSBjdXJyZW50IGRpc3BsYXkgc3R5bGUgdGhhdCB3b3VsZCBiZW5lZml0IGZyb20g
dGhpcworICAgICAgICAgICAgICAgIGlmICggZWxlbS5vZmZzZXRXaWR0aCA9PT0gMCAmJiByZGlz
cGxheXN3YXAudGVzdCggY3VyQ1NTKCBlbGVtLCAiZGlzcGxheSIgKSApICkgeworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4galF1ZXJ5LnN3YXAoIGVsZW0sIGNzc1Nob3csIGZ1bmN0aW9uKCkg
eworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldFdpZHRoT3JIZWlnaHQoIGVsZW0s
IG5hbWUsIGV4dHJhICk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXRXaWR0aE9ySGVpZ2h0KCBl
bGVtLCBuYW1lLCBleHRyYSApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfSwKKworICAgICAgICBzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSwgZXh0cmEgKSB7
CisgICAgICAgICAgICByZXR1cm4gc2V0UG9zaXRpdmVOdW1iZXIoIGVsZW0sIHZhbHVlLCBleHRy
YSA/CisgICAgICAgICAgICAgICAgYXVnbWVudFdpZHRoT3JIZWlnaHQoCisgICAgICAgICAgICAg
ICAgICAgIGVsZW0sCisgICAgICAgICAgICAgICAgICAgIG5hbWUsCisgICAgICAgICAgICAgICAg
ICAgIGV4dHJhLAorICAgICAgICAgICAgICAgICAgICBqUXVlcnkuc3VwcG9ydC5ib3hTaXppbmcg
JiYgalF1ZXJ5LmNzcyggZWxlbSwgImJveFNpemluZyIgKSA9PT0gImJvcmRlci1ib3giCisgICAg
ICAgICAgICAgICAgKSA6IDAKKyAgICAgICAgICAgICk7CisgICAgICAgIH0KKyAgICB9OworfSk7
CisKK2lmICggIWpRdWVyeS5zdXBwb3J0Lm9wYWNpdHkgKSB7CisgICAgalF1ZXJ5LmNzc0hvb2tz
Lm9wYWNpdHkgPSB7CisgICAgICAgIGdldDogZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkICkgewor
ICAgICAgICAgICAgLy8gSUUgdXNlcyBmaWx0ZXJzIGZvciBvcGFjaXR5CisgICAgICAgICAgICBy
ZXR1cm4gcm9wYWNpdHkudGVzdCggKGNvbXB1dGVkICYmIGVsZW0uY3VycmVudFN0eWxlID8gZWxl
bS5jdXJyZW50U3R5bGUuZmlsdGVyIDogZWxlbS5zdHlsZS5maWx0ZXIpIHx8ICIiICkgPworICAg
ICAgICAgICAgICAgICggMC4wMSAqIHBhcnNlRmxvYXQoIFJlZ0V4cC4kMSApICkgKyAiIiA6Cisg
ICAgICAgICAgICAgICAgY29tcHV0ZWQgPyAiMSIgOiAiIjsKKyAgICAgICAgfSwKKworICAgICAg
ICBzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHsKKyAgICAgICAgICAgIHZhciBzdHlsZSA9
IGVsZW0uc3R5bGUsCisgICAgICAgICAgICAgICAgY3VycmVudFN0eWxlID0gZWxlbS5jdXJyZW50
U3R5bGUsCisgICAgICAgICAgICAgICAgb3BhY2l0eSA9IGpRdWVyeS5pc051bWVyaWMoIHZhbHVl
ICkgPyAiYWxwaGEob3BhY2l0eT0iICsgdmFsdWUgKiAxMDAgKyAiKSIgOiAiIiwKKyAgICAgICAg
ICAgICAgICBmaWx0ZXIgPSBjdXJyZW50U3R5bGUgJiYgY3VycmVudFN0eWxlLmZpbHRlciB8fCBz
dHlsZS5maWx0ZXIgfHwgIiI7CisKKyAgICAgICAgICAgIC8vIElFIGhhcyB0cm91YmxlIHdpdGgg
b3BhY2l0eSBpZiBpdCBkb2VzIG5vdCBoYXZlIGxheW91dAorICAgICAgICAgICAgLy8gRm9yY2Ug
aXQgYnkgc2V0dGluZyB0aGUgem9vbSBsZXZlbAorICAgICAgICAgICAgc3R5bGUuem9vbSA9IDE7
CisKKyAgICAgICAgICAgIC8vIGlmIHNldHRpbmcgb3BhY2l0eSB0byAxLCBhbmQgbm8gb3RoZXIg
ZmlsdGVycyBleGlzdCAtIGF0dGVtcHQgdG8gcmVtb3ZlIGZpbHRlciBhdHRyaWJ1dGUgIzY2NTIK
KyAgICAgICAgICAgIGlmICggdmFsdWUgPj0gMSAmJiBqUXVlcnkudHJpbSggZmlsdGVyLnJlcGxh
Y2UoIHJhbHBoYSwgIiIgKSApID09PSAiIiAmJgorICAgICAgICAgICAgICAgIHN0eWxlLnJlbW92
ZUF0dHJpYnV0ZSApIHsKKworICAgICAgICAgICAgICAgIC8vIFNldHRpbmcgc3R5bGUuZmlsdGVy
IHRvIG51bGwsICIiICYgIiAiIHN0aWxsIGxlYXZlICJmaWx0ZXI6IiBpbiB0aGUgY3NzVGV4dAor
ICAgICAgICAgICAgICAgIC8vIGlmICJmaWx0ZXI6IiBpcyBwcmVzZW50IGF0IGFsbCwgY2xlYXJU
eXBlIGlzIGRpc2FibGVkLCB3ZSB3YW50IHRvIGF2b2lkIHRoaXMKKyAgICAgICAgICAgICAgICAv
LyBzdHlsZS5yZW1vdmVBdHRyaWJ1dGUgaXMgSUUgT25seSwgYnV0IHNvIGFwcGFyZW50bHkgaXMg
dGhpcyBjb2RlIHBhdGguLi4KKyAgICAgICAgICAgICAgICBzdHlsZS5yZW1vdmVBdHRyaWJ1dGUo
ICJmaWx0ZXIiICk7CisKKyAgICAgICAgICAgICAgICAvLyBpZiB0aGVyZSB0aGVyZSBpcyBubyBm
aWx0ZXIgc3R5bGUgYXBwbGllZCBpbiBhIGNzcyBydWxlLCB3ZSBhcmUgZG9uZQorICAgICAgICAg
ICAgICAgIGlmICggY3VycmVudFN0eWxlICYmICFjdXJyZW50U3R5bGUuZmlsdGVyICkgeworICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAvLyBvdGhlcndpc2UsIHNldCBuZXcgZmlsdGVyIHZhbHVlcworICAg
ICAgICAgICAgc3R5bGUuZmlsdGVyID0gcmFscGhhLnRlc3QoIGZpbHRlciApID8KKyAgICAgICAg
ICAgICAgICBmaWx0ZXIucmVwbGFjZSggcmFscGhhLCBvcGFjaXR5ICkgOgorICAgICAgICAgICAg
ICAgIGZpbHRlciArICIgIiArIG9wYWNpdHk7CisgICAgICAgIH0KKyAgICB9OworfQorCisvLyBU
aGVzZSBob29rcyBjYW5ub3QgYmUgYWRkZWQgdW50aWwgRE9NIHJlYWR5IGJlY2F1c2UgdGhlIHN1
cHBvcnQgdGVzdAorLy8gZm9yIGl0IGlzIG5vdCBydW4gdW50aWwgYWZ0ZXIgRE9NIHJlYWR5Citq
UXVlcnkoZnVuY3Rpb24oKSB7CisgICAgaWYgKCAhalF1ZXJ5LnN1cHBvcnQucmVsaWFibGVNYXJn
aW5SaWdodCApIHsKKyAgICAgICAgalF1ZXJ5LmNzc0hvb2tzLm1hcmdpblJpZ2h0ID0geworICAg
ICAgICAgICAgZ2V0OiBmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7CisgICAgICAgICAgICAg
ICAgLy8gV2ViS2l0IEJ1ZyAxMzM0MyAtIGdldENvbXB1dGVkU3R5bGUgcmV0dXJucyB3cm9uZyB2
YWx1ZSBmb3IgbWFyZ2luLXJpZ2h0CisgICAgICAgICAgICAgICAgLy8gV29yayBhcm91bmQgYnkg
dGVtcG9yYXJpbHkgc2V0dGluZyBlbGVtZW50IGRpc3BsYXkgdG8gaW5saW5lLWJsb2NrCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5zd2FwKCBlbGVtLCB7ICJkaXNwbGF5IjogImlubGlu
ZS1ibG9jayIgfSwgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICggY29tcHV0
ZWQgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VyQ1NTKCBlbGVtLCAibWFy
Z2luUmlnaHQiICk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9KTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9CisKKyAgICAvLyBXZWJraXQgYnVnOiBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjkwODQKKyAgICAvLyBnZXRD
b21wdXRlZFN0eWxlIHJldHVybnMgcGVyY2VudCB3aGVuIHNwZWNpZmllZCBmb3IgdG9wL2xlZnQv
Ym90dG9tL3JpZ2h0CisgICAgLy8gcmF0aGVyIHRoYW4gbWFrZSB0aGUgY3NzIG1vZHVsZSBkZXBl
bmQgb24gdGhlIG9mZnNldCBtb2R1bGUsIHdlIGp1c3QgY2hlY2sgZm9yIGl0IGhlcmUKKyAgICBp
ZiAoICFqUXVlcnkuc3VwcG9ydC5waXhlbFBvc2l0aW9uICYmIGpRdWVyeS5mbi5wb3NpdGlvbiAp
IHsKKyAgICAgICAgalF1ZXJ5LmVhY2goIFsgInRvcCIsICJsZWZ0IiBdLCBmdW5jdGlvbiggaSwg
cHJvcCApIHsKKyAgICAgICAgICAgIGpRdWVyeS5jc3NIb29rc1sgcHJvcCBdID0geworICAgICAg
ICAgICAgICAgIGdldDogZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkICkgeworICAgICAgICAgICAg
ICAgICAgICBpZiAoIGNvbXB1dGVkICkgeworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJl
dCA9IGN1ckNTUyggZWxlbSwgcHJvcCApOworICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYg
Y3VyQ1NTIHJldHVybnMgcGVyY2VudGFnZSwgZmFsbGJhY2sgdG8gb2Zmc2V0CisgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gcm51bW5vbnB4LnRlc3QoIHJldCApID8galF1ZXJ5KCBlbGVt
ICkucG9zaXRpb24oKVsgcHJvcCBdICsgInB4IiA6IHJldDsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CisgICAgICAgIH0pOworICAgIH0K
KworfSk7CisKK2lmICggalF1ZXJ5LmV4cHIgJiYgalF1ZXJ5LmV4cHIuZmlsdGVycyApIHsKKyAg
ICBqUXVlcnkuZXhwci5maWx0ZXJzLmhpZGRlbiA9IGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAg
ICByZXR1cm4gKCBlbGVtLm9mZnNldFdpZHRoID09PSAwICYmIGVsZW0ub2Zmc2V0SGVpZ2h0ID09
PSAwICkgfHwgKCFqUXVlcnkuc3VwcG9ydC5yZWxpYWJsZUhpZGRlbk9mZnNldHMgJiYgKChlbGVt
LnN0eWxlICYmIGVsZW0uc3R5bGUuZGlzcGxheSkgfHwgY3VyQ1NTKCBlbGVtLCAiZGlzcGxheSIg
KSkgPT09ICJub25lIik7CisgICAgfTsKKworICAgIGpRdWVyeS5leHByLmZpbHRlcnMudmlzaWJs
ZSA9IGZ1bmN0aW9uKCBlbGVtICkgeworICAgICAgICByZXR1cm4gIWpRdWVyeS5leHByLmZpbHRl
cnMuaGlkZGVuKCBlbGVtICk7CisgICAgfTsKK30KKworLy8gVGhlc2UgaG9va3MgYXJlIHVzZWQg
YnkgYW5pbWF0ZSB0byBleHBhbmQgcHJvcGVydGllcworalF1ZXJ5LmVhY2goeworICAgIG1hcmdp
bjogIiIsCisgICAgcGFkZGluZzogIiIsCisgICAgYm9yZGVyOiAiV2lkdGgiCit9LCBmdW5jdGlv
biggcHJlZml4LCBzdWZmaXggKSB7CisgICAgalF1ZXJ5LmNzc0hvb2tzWyBwcmVmaXggKyBzdWZm
aXggXSA9IHsKKyAgICAgICAgZXhwYW5kOiBmdW5jdGlvbiggdmFsdWUgKSB7CisgICAgICAgICAg
ICB2YXIgaSwKKworICAgICAgICAgICAgICAgIC8vIGFzc3VtZXMgYSBzaW5nbGUgbnVtYmVyIGlm
IG5vdCBhIHN0cmluZworICAgICAgICAgICAgICAgIHBhcnRzID0gdHlwZW9mIHZhbHVlID09PSAi
c3RyaW5nIiA/IHZhbHVlLnNwbGl0KCIgIikgOiBbIHZhbHVlIF0sCisgICAgICAgICAgICAgICAg
ZXhwYW5kZWQgPSB7fTsKKworICAgICAgICAgICAgZm9yICggaSA9IDA7IGkgPCA0OyBpKysgKSB7
CisgICAgICAgICAgICAgICAgZXhwYW5kZWRbIHByZWZpeCArIGNzc0V4cGFuZFsgaSBdICsgc3Vm
Zml4IF0gPQorICAgICAgICAgICAgICAgICAgICBwYXJ0c1sgaSBdIHx8IHBhcnRzWyBpIC0gMiBd
IHx8IHBhcnRzWyAwIF07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBleHBh
bmRlZDsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBpZiAoICFybWFyZ2luLnRlc3QoIHByZWZp
eCApICkgeworICAgICAgICBqUXVlcnkuY3NzSG9va3NbIHByZWZpeCArIHN1ZmZpeCBdLnNldCA9
IHNldFBvc2l0aXZlTnVtYmVyOworICAgIH0KK30pOwordmFyIHIyMCA9IC8lMjAvZywKKyAgICBy
YnJhY2tldCA9IC9cW1xdJC8sCisgICAgckNSTEYgPSAvXHI/XG4vZywKKyAgICByaW5wdXQgPSAv
Xig/OmNvbG9yfGRhdGV8ZGF0ZXRpbWV8ZGF0ZXRpbWUtbG9jYWx8ZW1haWx8aGlkZGVufG1vbnRo
fG51bWJlcnxwYXNzd29yZHxyYW5nZXxzZWFyY2h8dGVsfHRleHR8dGltZXx1cmx8d2VlaykkL2ks
CisgICAgcnNlbGVjdFRleHRhcmVhID0gL14oPzpzZWxlY3R8dGV4dGFyZWEpL2k7CisKK2pRdWVy
eS5mbi5leHRlbmQoeworICAgIHNlcmlhbGl6ZTogZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVy
biBqUXVlcnkucGFyYW0oIHRoaXMuc2VyaWFsaXplQXJyYXkoKSApOworICAgIH0sCisgICAgc2Vy
aWFsaXplQXJyYXk6IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gdGhpcy5tYXAoZnVuY3Rp
b24oKXsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRzID8galF1ZXJ5Lm1ha2VBcnJh
eSggdGhpcy5lbGVtZW50cyApIDogdGhpczsKKyAgICAgICAgfSkKKyAgICAgICAgLmZpbHRlcihm
dW5jdGlvbigpeworICAgICAgICAgICAgcmV0dXJuIHRoaXMubmFtZSAmJiAhdGhpcy5kaXNhYmxl
ZCAmJgorICAgICAgICAgICAgICAgICggdGhpcy5jaGVja2VkIHx8IHJzZWxlY3RUZXh0YXJlYS50
ZXN0KCB0aGlzLm5vZGVOYW1lICkgfHwKKyAgICAgICAgICAgICAgICAgICAgcmlucHV0LnRlc3Qo
IHRoaXMudHlwZSApICk7CisgICAgICAgIH0pCisgICAgICAgIC5tYXAoZnVuY3Rpb24oIGksIGVs
ZW0gKXsKKyAgICAgICAgICAgIHZhciB2YWwgPSBqUXVlcnkoIHRoaXMgKS52YWwoKTsKKworICAg
ICAgICAgICAgcmV0dXJuIHZhbCA9PSBudWxsID8KKyAgICAgICAgICAgICAgICBudWxsIDoKKyAg
ICAgICAgICAgICAgICBqUXVlcnkuaXNBcnJheSggdmFsICkgPworICAgICAgICAgICAgICAgICAg
ICBqUXVlcnkubWFwKCB2YWwsIGZ1bmN0aW9uKCB2YWwsIGkgKXsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB7IG5hbWU6IGVsZW0ubmFtZSwgdmFsdWU6IHZhbC5yZXBsYWNlKCByQ1JM
RiwgIlxyXG4iICkgfTsKKyAgICAgICAgICAgICAgICAgICAgfSkgOgorICAgICAgICAgICAgICAg
ICAgICB7IG5hbWU6IGVsZW0ubmFtZSwgdmFsdWU6IHZhbC5yZXBsYWNlKCByQ1JMRiwgIlxyXG4i
ICkgfTsKKyAgICAgICAgfSkuZ2V0KCk7CisgICAgfQorfSk7CisKKy8vU2VyaWFsaXplIGFuIGFy
cmF5IG9mIGZvcm0gZWxlbWVudHMgb3IgYSBzZXQgb2YKKy8va2V5L3ZhbHVlcyBpbnRvIGEgcXVl
cnkgc3RyaW5nCitqUXVlcnkucGFyYW0gPSBmdW5jdGlvbiggYSwgdHJhZGl0aW9uYWwgKSB7Cisg
ICAgdmFyIHByZWZpeCwKKyAgICAgICAgcyA9IFtdLAorICAgICAgICBhZGQgPSBmdW5jdGlvbigg
a2V5LCB2YWx1ZSApIHsKKyAgICAgICAgICAgIC8vIElmIHZhbHVlIGlzIGEgZnVuY3Rpb24sIGlu
dm9rZSBpdCBhbmQgcmV0dXJuIGl0cyB2YWx1ZQorICAgICAgICAgICAgdmFsdWUgPSBqUXVlcnku
aXNGdW5jdGlvbiggdmFsdWUgKSA/IHZhbHVlKCkgOiAoIHZhbHVlID09IG51bGwgPyAiIiA6IHZh
bHVlICk7CisgICAgICAgICAgICBzWyBzLmxlbmd0aCBdID0gZW5jb2RlVVJJQ29tcG9uZW50KCBr
ZXkgKSArICI9IiArIGVuY29kZVVSSUNvbXBvbmVudCggdmFsdWUgKTsKKyAgICAgICAgfTsKKwor
ICAgIC8vIFNldCB0cmFkaXRpb25hbCB0byB0cnVlIGZvciBqUXVlcnkgPD0gMS4zLjIgYmVoYXZp
b3IuCisgICAgaWYgKCB0cmFkaXRpb25hbCA9PT0gdW5kZWZpbmVkICkgeworICAgICAgICB0cmFk
aXRpb25hbCA9IGpRdWVyeS5hamF4U2V0dGluZ3MgJiYgalF1ZXJ5LmFqYXhTZXR0aW5ncy50cmFk
aXRpb25hbDsKKyAgICB9CisKKyAgICAvLyBJZiBhbiBhcnJheSB3YXMgcGFzc2VkIGluLCBhc3N1
bWUgdGhhdCBpdCBpcyBhbiBhcnJheSBvZiBmb3JtIGVsZW1lbnRzLgorICAgIGlmICggalF1ZXJ5
LmlzQXJyYXkoIGEgKSB8fCAoIGEuanF1ZXJ5ICYmICFqUXVlcnkuaXNQbGFpbk9iamVjdCggYSAp
ICkgKSB7CisgICAgICAgIC8vIFNlcmlhbGl6ZSB0aGUgZm9ybSBlbGVtZW50cworICAgICAgICBq
UXVlcnkuZWFjaCggYSwgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBhZGQoIHRoaXMubmFtZSwg
dGhpcy52YWx1ZSApOworICAgICAgICB9KTsKKworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIElm
IHRyYWRpdGlvbmFsLCBlbmNvZGUgdGhlICJvbGQiIHdheSAodGhlIHdheSAxLjMuMiBvciBvbGRl
cgorICAgICAgICAvLyBkaWQgaXQpLCBvdGhlcndpc2UgZW5jb2RlIHBhcmFtcyByZWN1cnNpdmVs
eS4KKyAgICAgICAgZm9yICggcHJlZml4IGluIGEgKSB7CisgICAgICAgICAgICBidWlsZFBhcmFt
cyggcHJlZml4LCBhWyBwcmVmaXggXSwgdHJhZGl0aW9uYWwsIGFkZCApOworICAgICAgICB9Cisg
ICAgfQorCisgICAgLy8gUmV0dXJuIHRoZSByZXN1bHRpbmcgc2VyaWFsaXphdGlvbgorICAgIHJl
dHVybiBzLmpvaW4oICImIiApLnJlcGxhY2UoIHIyMCwgIisiICk7Cit9OworCitmdW5jdGlvbiBi
dWlsZFBhcmFtcyggcHJlZml4LCBvYmosIHRyYWRpdGlvbmFsLCBhZGQgKSB7CisgICAgdmFyIG5h
bWU7CisKKyAgICBpZiAoIGpRdWVyeS5pc0FycmF5KCBvYmogKSApIHsKKyAgICAgICAgLy8gU2Vy
aWFsaXplIGFycmF5IGl0ZW0uCisgICAgICAgIGpRdWVyeS5lYWNoKCBvYmosIGZ1bmN0aW9uKCBp
LCB2ICkgeworICAgICAgICAgICAgaWYgKCB0cmFkaXRpb25hbCB8fCByYnJhY2tldC50ZXN0KCBw
cmVmaXggKSApIHsKKyAgICAgICAgICAgICAgICAvLyBUcmVhdCBlYWNoIGFycmF5IGl0ZW0gYXMg
YSBzY2FsYXIuCisgICAgICAgICAgICAgICAgYWRkKCBwcmVmaXgsIHYgKTsKKworICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBJZiBhcnJheSBpdGVtIGlzIG5vbi1zY2Fs
YXIgKGFycmF5IG9yIG9iamVjdCksIGVuY29kZSBpdHMKKyAgICAgICAgICAgICAgICAvLyBudW1l
cmljIGluZGV4IHRvIHJlc29sdmUgZGVzZXJpYWxpemF0aW9uIGFtYmlndWl0eSBpc3N1ZXMuCisg
ICAgICAgICAgICAgICAgLy8gTm90ZSB0aGF0IHJhY2sgKGFzIG9mIDEuMC4wKSBjYW4ndCBjdXJy
ZW50bHkgZGVzZXJpYWxpemUKKyAgICAgICAgICAgICAgICAvLyBuZXN0ZWQgYXJyYXlzIHByb3Bl
cmx5LCBhbmQgYXR0ZW1wdGluZyB0byBkbyBzbyBtYXkgY2F1c2UKKyAgICAgICAgICAgICAgICAv
LyBhIHNlcnZlciBlcnJvci4gUG9zc2libGUgZml4ZXMgYXJlIHRvIG1vZGlmeSByYWNrJ3MKKyAg
ICAgICAgICAgICAgICAvLyBkZXNlcmlhbGl6YXRpb24gYWxnb3JpdGhtIG9yIHRvIHByb3ZpZGUg
YW4gb3B0aW9uIG9yIGZsYWcKKyAgICAgICAgICAgICAgICAvLyB0byBmb3JjZSBhcnJheSBzZXJp
YWxpemF0aW9uIHRvIGJlIHNoYWxsb3cuCisgICAgICAgICAgICAgICAgYnVpbGRQYXJhbXMoIHBy
ZWZpeCArICJbIiArICggdHlwZW9mIHYgPT09ICJvYmplY3QiID8gaSA6ICIiICkgKyAiXSIsIHYs
IHRyYWRpdGlvbmFsLCBhZGQgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisKKyAgICB9
IGVsc2UgaWYgKCAhdHJhZGl0aW9uYWwgJiYgalF1ZXJ5LnR5cGUoIG9iaiApID09PSAib2JqZWN0
IiApIHsKKyAgICAgICAgLy8gU2VyaWFsaXplIG9iamVjdCBpdGVtLgorICAgICAgICBmb3IgKCBu
YW1lIGluIG9iaiApIHsKKyAgICAgICAgICAgIGJ1aWxkUGFyYW1zKCBwcmVmaXggKyAiWyIgKyBu
YW1lICsgIl0iLCBvYmpbIG5hbWUgXSwgdHJhZGl0aW9uYWwsIGFkZCApOworICAgICAgICB9CisK
KyAgICB9IGVsc2UgeworICAgICAgICAvLyBTZXJpYWxpemUgc2NhbGFyIGl0ZW0uCisgICAgICAg
IGFkZCggcHJlZml4LCBvYmogKTsKKyAgICB9Cit9Cit2YXIKKyAgICAvLyBEb2N1bWVudCBsb2Nh
dGlvbgorICAgIGFqYXhMb2NQYXJ0cywKKyAgICBhamF4TG9jYXRpb24sCisKKyAgICByaGFzaCA9
IC8jLiokLywKKyAgICByaGVhZGVycyA9IC9eKC4qPyk6WyBcdF0qKFteXHJcbl0qKVxyPyQvbWcs
IC8vIElFIGxlYXZlcyBhbiBcciBjaGFyYWN0ZXIgYXQgRU9MCisgICAgLy8gIzc2NTMsICM4MTI1
LCAjODE1MjogbG9jYWwgcHJvdG9jb2wgZGV0ZWN0aW9uCisgICAgcmxvY2FsUHJvdG9jb2wgPSAv
Xig/OmFib3V0fGFwcHxhcHBcLXN0b3JhZ2V8LitcLWV4dGVuc2lvbnxmaWxlfHJlc3x3aWRnZXQp
OiQvLAorICAgIHJub0NvbnRlbnQgPSAvXig/OkdFVHxIRUFEKSQvLAorICAgIHJwcm90b2NvbCA9
IC9eXC9cLy8sCisgICAgcnF1ZXJ5ID0gL1w/LywKKyAgICByc2NyaXB0ID0gLzxzY3JpcHRcYlte
PF0qKD86KD8hPFwvc2NyaXB0Pik8W148XSopKjxcL3NjcmlwdD4vZ2ksCisgICAgcnRzID0gLyhb
PyZdKV89W14mXSovLAorICAgIHJ1cmwgPSAvXihbXHdcK1wuXC1dKzopKD86XC9cLyhbXlwvPyM6
XSopKD86OihcZCspfCl8KS8sCisKKyAgICAvLyBLZWVwIGEgY29weSBvZiB0aGUgb2xkIGxvYWQg
bWV0aG9kCisgICAgX2xvYWQgPSBqUXVlcnkuZm4ubG9hZCwKKworICAgIC8qIFByZWZpbHRlcnMK
KyAgICAgKiAxKSBUaGV5IGFyZSB1c2VmdWwgdG8gaW50cm9kdWNlIGN1c3RvbSBkYXRhVHlwZXMg
KHNlZSBhamF4L2pzb25wLmpzIGZvciBhbiBleGFtcGxlKQorICAgICAqIDIpIFRoZXNlIGFyZSBj
YWxsZWQ6CisgICAgICogICAgLSBCRUZPUkUgYXNraW5nIGZvciBhIHRyYW5zcG9ydAorICAgICAq
ICAgIC0gQUZURVIgcGFyYW0gc2VyaWFsaXphdGlvbiAocy5kYXRhIGlzIGEgc3RyaW5nIGlmIHMu
cHJvY2Vzc0RhdGEgaXMgdHJ1ZSkKKyAgICAgKiAzKSBrZXkgaXMgdGhlIGRhdGFUeXBlCisgICAg
ICogNCkgdGhlIGNhdGNoYWxsIHN5bWJvbCAiKiIgY2FuIGJlIHVzZWQKKyAgICAgKiA1KSBleGVj
dXRpb24gd2lsbCBzdGFydCB3aXRoIHRyYW5zcG9ydCBkYXRhVHlwZSBhbmQgVEhFTiBjb250aW51
ZSBkb3duIHRvICIqIiBpZiBuZWVkZWQKKyAgICAgKi8KKyAgICBwcmVmaWx0ZXJzID0ge30sCisK
KyAgICAvKiBUcmFuc3BvcnRzIGJpbmRpbmdzCisgICAgICogMSkga2V5IGlzIHRoZSBkYXRhVHlw
ZQorICAgICAqIDIpIHRoZSBjYXRjaGFsbCBzeW1ib2wgIioiIGNhbiBiZSB1c2VkCisgICAgICog
Mykgc2VsZWN0aW9uIHdpbGwgc3RhcnQgd2l0aCB0cmFuc3BvcnQgZGF0YVR5cGUgYW5kIFRIRU4g
Z28gdG8gIioiIGlmIG5lZWRlZAorICAgICAqLworICAgIHRyYW5zcG9ydHMgPSB7fSwKKworICAg
IC8vIEF2b2lkIGNvbW1lbnQtcHJvbG9nIGNoYXIgc2VxdWVuY2UgKCMxMDA5OCk7IG11c3QgYXBw
ZWFzZSBsaW50IGFuZCBldmFkZSBjb21wcmVzc2lvbgorICAgIGFsbFR5cGVzID0gWyIqLyJdICsg
WyIqIl07CisKKy8vICM4MTM4LCBJRSBtYXkgdGhyb3cgYW4gZXhjZXB0aW9uIHdoZW4gYWNjZXNz
aW5nCisvLyBhIGZpZWxkIGZyb20gd2luZG93LmxvY2F0aW9uIGlmIGRvY3VtZW50LmRvbWFpbiBo
YXMgYmVlbiBzZXQKK3RyeSB7CisgICAgYWpheExvY2F0aW9uID0gbG9jYXRpb24uaHJlZjsKK30g
Y2F0Y2goIGUgKSB7CisgICAgLy8gVXNlIHRoZSBocmVmIGF0dHJpYnV0ZSBvZiBhbiBBIGVsZW1l
bnQKKyAgICAvLyBzaW5jZSBJRSB3aWxsIG1vZGlmeSBpdCBnaXZlbiBkb2N1bWVudC5sb2NhdGlv
bgorICAgIGFqYXhMb2NhdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICJhIiApOworICAg
IGFqYXhMb2NhdGlvbi5ocmVmID0gIiI7CisgICAgYWpheExvY2F0aW9uID0gYWpheExvY2F0aW9u
LmhyZWY7Cit9CisKKy8vIFNlZ21lbnQgbG9jYXRpb24gaW50byBwYXJ0cworYWpheExvY1BhcnRz
ID0gcnVybC5leGVjKCBhamF4TG9jYXRpb24udG9Mb3dlckNhc2UoKSApIHx8IFtdOworCisvLyBC
YXNlICJjb25zdHJ1Y3RvciIgZm9yIGpRdWVyeS5hamF4UHJlZmlsdGVyIGFuZCBqUXVlcnkuYWph
eFRyYW5zcG9ydAorZnVuY3Rpb24gYWRkVG9QcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCBzdHJ1Y3R1
cmUgKSB7CisKKyAgICAvLyBkYXRhVHlwZUV4cHJlc3Npb24gaXMgb3B0aW9uYWwgYW5kIGRlZmF1
bHRzIHRvICIqIgorICAgIHJldHVybiBmdW5jdGlvbiggZGF0YVR5cGVFeHByZXNzaW9uLCBmdW5j
ICkgeworCisgICAgICAgIGlmICggdHlwZW9mIGRhdGFUeXBlRXhwcmVzc2lvbiAhPT0gInN0cmlu
ZyIgKSB7CisgICAgICAgICAgICBmdW5jID0gZGF0YVR5cGVFeHByZXNzaW9uOworICAgICAgICAg
ICAgZGF0YVR5cGVFeHByZXNzaW9uID0gIioiOworICAgICAgICB9CisKKyAgICAgICAgdmFyIGRh
dGFUeXBlLCBsaXN0LCBwbGFjZUJlZm9yZSwKKyAgICAgICAgICAgIGRhdGFUeXBlcyA9IGRhdGFU
eXBlRXhwcmVzc2lvbi50b0xvd2VyQ2FzZSgpLnNwbGl0KCBjb3JlX3JzcGFjZSApLAorICAgICAg
ICAgICAgaSA9IDAsCisgICAgICAgICAgICBsZW5ndGggPSBkYXRhVHlwZXMubGVuZ3RoOworCisg
ICAgICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIGZ1bmMgKSApIHsKKyAgICAgICAgICAgIC8v
IEZvciBlYWNoIGRhdGFUeXBlIGluIHRoZSBkYXRhVHlwZUV4cHJlc3Npb24KKyAgICAgICAgICAg
IGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkgeworICAgICAgICAgICAgICAgIGRhdGFUeXBlID0g
ZGF0YVR5cGVzWyBpIF07CisgICAgICAgICAgICAgICAgLy8gV2UgY29udHJvbCBpZiB3ZSdyZSBh
c2tlZCB0byBhZGQgYmVmb3JlCisgICAgICAgICAgICAgICAgLy8gYW55IGV4aXN0aW5nIGVsZW1l
bnQKKyAgICAgICAgICAgICAgICBwbGFjZUJlZm9yZSA9IC9eXCsvLnRlc3QoIGRhdGFUeXBlICk7
CisgICAgICAgICAgICAgICAgaWYgKCBwbGFjZUJlZm9yZSApIHsKKyAgICAgICAgICAgICAgICAg
ICAgZGF0YVR5cGUgPSBkYXRhVHlwZS5zdWJzdHIoIDEgKSB8fCAiKiI7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGxpc3QgPSBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gPSBzdHJ1
Y3R1cmVbIGRhdGFUeXBlIF0gfHwgW107CisgICAgICAgICAgICAgICAgLy8gdGhlbiB3ZSBhZGQg
dG8gdGhlIHN0cnVjdHVyZSBhY2NvcmRpbmdseQorICAgICAgICAgICAgICAgIGxpc3RbIHBsYWNl
QmVmb3JlID8gInVuc2hpZnQiIDogInB1c2giIF0oIGZ1bmMgKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH07Cit9CisKKy8vIEJhc2UgaW5zcGVjdGlvbiBmdW5jdGlvbiBmb3IgcHJl
ZmlsdGVycyBhbmQgdHJhbnNwb3J0cworZnVuY3Rpb24gaW5zcGVjdFByZWZpbHRlcnNPclRyYW5z
cG9ydHMoIHN0cnVjdHVyZSwgb3B0aW9ucywgb3JpZ2luYWxPcHRpb25zLCBqcVhIUiwKKyAgICAg
ICAgZGF0YVR5cGUgLyogaW50ZXJuYWwgKi8sIGluc3BlY3RlZCAvKiBpbnRlcm5hbCAqLyApIHsK
KworICAgIGRhdGFUeXBlID0gZGF0YVR5cGUgfHwgb3B0aW9ucy5kYXRhVHlwZXNbIDAgXTsKKyAg
ICBpbnNwZWN0ZWQgPSBpbnNwZWN0ZWQgfHwge307CisKKyAgICBpbnNwZWN0ZWRbIGRhdGFUeXBl
IF0gPSB0cnVlOworCisgICAgdmFyIHNlbGVjdGlvbiwKKyAgICAgICAgbGlzdCA9IHN0cnVjdHVy
ZVsgZGF0YVR5cGUgXSwKKyAgICAgICAgaSA9IDAsCisgICAgICAgIGxlbmd0aCA9IGxpc3QgPyBs
aXN0Lmxlbmd0aCA6IDAsCisgICAgICAgIGV4ZWN1dGVPbmx5ID0gKCBzdHJ1Y3R1cmUgPT09IHBy
ZWZpbHRlcnMgKTsKKworICAgIGZvciAoIDsgaSA8IGxlbmd0aCAmJiAoIGV4ZWN1dGVPbmx5IHx8
ICFzZWxlY3Rpb24gKTsgaSsrICkgeworICAgICAgICBzZWxlY3Rpb24gPSBsaXN0WyBpIF0oIG9w
dGlvbnMsIG9yaWdpbmFsT3B0aW9ucywganFYSFIgKTsKKyAgICAgICAgLy8gSWYgd2UgZ290IHJl
ZGlyZWN0ZWQgdG8gYW5vdGhlciBkYXRhVHlwZQorICAgICAgICAvLyB3ZSB0cnkgdGhlcmUgaWYg
ZXhlY3V0aW5nIG9ubHkgYW5kIG5vdCBkb25lIGFscmVhZHkKKyAgICAgICAgaWYgKCB0eXBlb2Yg
c2VsZWN0aW9uID09PSAic3RyaW5nIiApIHsKKyAgICAgICAgICAgIGlmICggIWV4ZWN1dGVPbmx5
IHx8IGluc3BlY3RlZFsgc2VsZWN0aW9uIF0gKSB7CisgICAgICAgICAgICAgICAgc2VsZWN0aW9u
ID0gdW5kZWZpbmVkOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBvcHRp
b25zLmRhdGFUeXBlcy51bnNoaWZ0KCBzZWxlY3Rpb24gKTsKKyAgICAgICAgICAgICAgICBzZWxl
Y3Rpb24gPSBpbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNwb3J0cygKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHN0cnVjdHVyZSwgb3B0aW9ucywgb3JpZ2luYWxPcHRpb25zLCBqcVhIUiwgc2VsZWN0
aW9uLCBpbnNwZWN0ZWQgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAv
LyBJZiB3ZSdyZSBvbmx5IGV4ZWN1dGluZyBvciBub3RoaW5nIHdhcyBzZWxlY3RlZAorICAgIC8v
IHdlIHRyeSB0aGUgY2F0Y2hhbGwgZGF0YVR5cGUgaWYgbm90IGRvbmUgYWxyZWFkeQorICAgIGlm
ICggKCBleGVjdXRlT25seSB8fCAhc2VsZWN0aW9uICkgJiYgIWluc3BlY3RlZFsgIioiIF0gKSB7
CisgICAgICAgIHNlbGVjdGlvbiA9IGluc3BlY3RQcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKAorICAg
ICAgICAgICAgICAgIHN0cnVjdHVyZSwgb3B0aW9ucywgb3JpZ2luYWxPcHRpb25zLCBqcVhIUiwg
IioiLCBpbnNwZWN0ZWQgKTsKKyAgICB9CisgICAgLy8gdW5uZWNlc3Nhcnkgd2hlbiBvbmx5IGV4
ZWN1dGluZyAocHJlZmlsdGVycykKKyAgICAvLyBidXQgaXQnbGwgYmUgaWdub3JlZCBieSB0aGUg
Y2FsbGVyIGluIHRoYXQgY2FzZQorICAgIHJldHVybiBzZWxlY3Rpb247Cit9CisKKy8vIEEgc3Bl
Y2lhbCBleHRlbmQgZm9yIGFqYXggb3B0aW9ucworLy8gdGhhdCB0YWtlcyAiZmxhdCIgb3B0aW9u
cyAobm90IHRvIGJlIGRlZXAgZXh0ZW5kZWQpCisvLyBGaXhlcyAjOTg4NworZnVuY3Rpb24gYWph
eEV4dGVuZCggdGFyZ2V0LCBzcmMgKSB7CisgICAgdmFyIGtleSwgZGVlcCwKKyAgICAgICAgZmxh
dE9wdGlvbnMgPSBqUXVlcnkuYWpheFNldHRpbmdzLmZsYXRPcHRpb25zIHx8IHt9OworICAgIGZv
ciAoIGtleSBpbiBzcmMgKSB7CisgICAgICAgIGlmICggc3JjWyBrZXkgXSAhPT0gdW5kZWZpbmVk
ICkgeworICAgICAgICAgICAgKCBmbGF0T3B0aW9uc1sga2V5IF0gPyB0YXJnZXQgOiAoIGRlZXAg
fHwgKCBkZWVwID0ge30gKSApIClbIGtleSBdID0gc3JjWyBrZXkgXTsKKyAgICAgICAgfQorICAg
IH0KKyAgICBpZiAoIGRlZXAgKSB7CisgICAgICAgIGpRdWVyeS5leHRlbmQoIHRydWUsIHRhcmdl
dCwgZGVlcCApOworICAgIH0KK30KKworalF1ZXJ5LmZuLmxvYWQgPSBmdW5jdGlvbiggdXJsLCBw
YXJhbXMsIGNhbGxiYWNrICkgeworICAgIGlmICggdHlwZW9mIHVybCAhPT0gInN0cmluZyIgJiYg
X2xvYWQgKSB7CisgICAgICAgIHJldHVybiBfbG9hZC5hcHBseSggdGhpcywgYXJndW1lbnRzICk7
CisgICAgfQorCisgICAgLy8gRG9uJ3QgZG8gYSByZXF1ZXN0IGlmIG5vIGVsZW1lbnRzIGFyZSBi
ZWluZyByZXF1ZXN0ZWQKKyAgICBpZiAoICF0aGlzLmxlbmd0aCApIHsKKyAgICAgICAgcmV0dXJu
IHRoaXM7CisgICAgfQorCisgICAgdmFyIHNlbGVjdG9yLCB0eXBlLCByZXNwb25zZSwKKyAgICAg
ICAgc2VsZiA9IHRoaXMsCisgICAgICAgIG9mZiA9IHVybC5pbmRleE9mKCIgIik7CisKKyAgICBp
ZiAoIG9mZiA+PSAwICkgeworICAgICAgICBzZWxlY3RvciA9IHVybC5zbGljZSggb2ZmLCB1cmwu
bGVuZ3RoICk7CisgICAgICAgIHVybCA9IHVybC5zbGljZSggMCwgb2ZmICk7CisgICAgfQorCisg
ICAgLy8gSWYgaXQncyBhIGZ1bmN0aW9uCisgICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggcGFy
YW1zICkgKSB7CisKKyAgICAgICAgLy8gV2UgYXNzdW1lIHRoYXQgaXQncyB0aGUgY2FsbGJhY2sK
KyAgICAgICAgY2FsbGJhY2sgPSBwYXJhbXM7CisgICAgICAgIHBhcmFtcyA9IHVuZGVmaW5lZDsK
KworICAgIC8vIE90aGVyd2lzZSwgYnVpbGQgYSBwYXJhbSBzdHJpbmcKKyAgICB9IGVsc2UgaWYg
KCBwYXJhbXMgJiYgdHlwZW9mIHBhcmFtcyA9PT0gIm9iamVjdCIgKSB7CisgICAgICAgIHR5cGUg
PSAiUE9TVCI7CisgICAgfQorCisgICAgLy8gUmVxdWVzdCB0aGUgcmVtb3RlIGRvY3VtZW50Cisg
ICAgalF1ZXJ5LmFqYXgoeworICAgICAgICB1cmw6IHVybCwKKworICAgICAgICAvLyBpZiAidHlw
ZSIgdmFyaWFibGUgaXMgdW5kZWZpbmVkLCB0aGVuICJHRVQiIG1ldGhvZCB3aWxsIGJlIHVzZWQK
KyAgICAgICAgdHlwZTogdHlwZSwKKyAgICAgICAgZGF0YVR5cGU6ICJodG1sIiwKKyAgICAgICAg
ZGF0YTogcGFyYW1zLAorICAgICAgICBjb21wbGV0ZTogZnVuY3Rpb24oIGpxWEhSLCBzdGF0dXMg
KSB7CisgICAgICAgICAgICBpZiAoIGNhbGxiYWNrICkgeworICAgICAgICAgICAgICAgIHNlbGYu
ZWFjaCggY2FsbGJhY2ssIHJlc3BvbnNlIHx8IFsganFYSFIucmVzcG9uc2VUZXh0LCBzdGF0dXMs
IGpxWEhSIF0gKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0pLmRvbmUoZnVuY3Rp
b24oIHJlc3BvbnNlVGV4dCApIHsKKworICAgICAgICAvLyBTYXZlIHJlc3BvbnNlIGZvciB1c2Ug
aW4gY29tcGxldGUgY2FsbGJhY2sKKyAgICAgICAgcmVzcG9uc2UgPSBhcmd1bWVudHM7CisKKyAg
ICAgICAgLy8gU2VlIGlmIGEgc2VsZWN0b3Igd2FzIHNwZWNpZmllZAorICAgICAgICBzZWxmLmh0
bWwoIHNlbGVjdG9yID8KKworICAgICAgICAgICAgLy8gQ3JlYXRlIGEgZHVtbXkgZGl2IHRvIGhv
bGQgdGhlIHJlc3VsdHMKKyAgICAgICAgICAgIGpRdWVyeSgiPGRpdj4iKQorCisgICAgICAgICAg
ICAgICAgLy8gaW5qZWN0IHRoZSBjb250ZW50cyBvZiB0aGUgZG9jdW1lbnQgaW4sIHJlbW92aW5n
IHRoZSBzY3JpcHRzCisgICAgICAgICAgICAgICAgLy8gdG8gYXZvaWQgYW55ICdQZXJtaXNzaW9u
IERlbmllZCcgZXJyb3JzIGluIElFCisgICAgICAgICAgICAgICAgLmFwcGVuZCggcmVzcG9uc2VU
ZXh0LnJlcGxhY2UoIHJzY3JpcHQsICIiICkgKQorCisgICAgICAgICAgICAgICAgLy8gTG9jYXRl
IHRoZSBzcGVjaWZpZWQgZWxlbWVudHMKKyAgICAgICAgICAgICAgICAuZmluZCggc2VsZWN0b3Ig
KSA6CisKKyAgICAgICAgICAgIC8vIElmIG5vdCwganVzdCBpbmplY3QgdGhlIGZ1bGwgcmVzdWx0
CisgICAgICAgICAgICByZXNwb25zZVRleHQgKTsKKworICAgIH0pOworCisgICAgcmV0dXJuIHRo
aXM7Cit9OworCisvLyBBdHRhY2ggYSBidW5jaCBvZiBmdW5jdGlvbnMgZm9yIGhhbmRsaW5nIGNv
bW1vbiBBSkFYIGV2ZW50cworalF1ZXJ5LmVhY2goICJhamF4U3RhcnQgYWpheFN0b3AgYWpheENv
bXBsZXRlIGFqYXhFcnJvciBhamF4U3VjY2VzcyBhamF4U2VuZCIuc3BsaXQoICIgIiApLCBmdW5j
dGlvbiggaSwgbyApeworICAgIGpRdWVyeS5mblsgbyBdID0gZnVuY3Rpb24oIGYgKXsKKyAgICAg
ICAgcmV0dXJuIHRoaXMub24oIG8sIGYgKTsKKyAgICB9OworfSk7CisKK2pRdWVyeS5lYWNoKCBb
ICJnZXQiLCAicG9zdCIgXSwgZnVuY3Rpb24oIGksIG1ldGhvZCApIHsKKyAgICBqUXVlcnlbIG1l
dGhvZCBdID0gZnVuY3Rpb24oIHVybCwgZGF0YSwgY2FsbGJhY2ssIHR5cGUgKSB7CisgICAgICAg
IC8vIHNoaWZ0IGFyZ3VtZW50cyBpZiBkYXRhIGFyZ3VtZW50IHdhcyBvbWl0dGVkCisgICAgICAg
IGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIGRhdGEgKSApIHsKKyAgICAgICAgICAgIHR5cGUgPSB0
eXBlIHx8IGNhbGxiYWNrOworICAgICAgICAgICAgY2FsbGJhY2sgPSBkYXRhOworICAgICAgICAg
ICAgZGF0YSA9IHVuZGVmaW5lZDsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBqUXVlcnku
YWpheCh7CisgICAgICAgICAgICB0eXBlOiBtZXRob2QsCisgICAgICAgICAgICB1cmw6IHVybCwK
KyAgICAgICAgICAgIGRhdGE6IGRhdGEsCisgICAgICAgICAgICBzdWNjZXNzOiBjYWxsYmFjaywK
KyAgICAgICAgICAgIGRhdGFUeXBlOiB0eXBlCisgICAgICAgIH0pOworICAgIH07Cit9KTsKKwor
alF1ZXJ5LmV4dGVuZCh7CisKKyAgICBnZXRTY3JpcHQ6IGZ1bmN0aW9uKCB1cmwsIGNhbGxiYWNr
ICkgeworICAgICAgICByZXR1cm4galF1ZXJ5LmdldCggdXJsLCB1bmRlZmluZWQsIGNhbGxiYWNr
LCAic2NyaXB0IiApOworICAgIH0sCisKKyAgICBnZXRKU09OOiBmdW5jdGlvbiggdXJsLCBkYXRh
LCBjYWxsYmFjayApIHsKKyAgICAgICAgcmV0dXJuIGpRdWVyeS5nZXQoIHVybCwgZGF0YSwgY2Fs
bGJhY2ssICJqc29uIiApOworICAgIH0sCisKKyAgICAvLyBDcmVhdGVzIGEgZnVsbCBmbGVkZ2Vk
IHNldHRpbmdzIG9iamVjdCBpbnRvIHRhcmdldAorICAgIC8vIHdpdGggYm90aCBhamF4U2V0dGlu
Z3MgYW5kIHNldHRpbmdzIGZpZWxkcy4KKyAgICAvLyBJZiB0YXJnZXQgaXMgb21pdHRlZCwgd3Jp
dGVzIGludG8gYWpheFNldHRpbmdzLgorICAgIGFqYXhTZXR1cDogZnVuY3Rpb24oIHRhcmdldCwg
c2V0dGluZ3MgKSB7CisgICAgICAgIGlmICggc2V0dGluZ3MgKSB7CisgICAgICAgICAgICAvLyBC
dWlsZGluZyBhIHNldHRpbmdzIG9iamVjdAorICAgICAgICAgICAgYWpheEV4dGVuZCggdGFyZ2V0
LCBqUXVlcnkuYWpheFNldHRpbmdzICk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAv
LyBFeHRlbmRpbmcgYWpheFNldHRpbmdzCisgICAgICAgICAgICBzZXR0aW5ncyA9IHRhcmdldDsK
KyAgICAgICAgICAgIHRhcmdldCA9IGpRdWVyeS5hamF4U2V0dGluZ3M7CisgICAgICAgIH0KKyAg
ICAgICAgYWpheEV4dGVuZCggdGFyZ2V0LCBzZXR0aW5ncyApOworICAgICAgICByZXR1cm4gdGFy
Z2V0OworICAgIH0sCisKKyAgICBhamF4U2V0dGluZ3M6IHsKKyAgICAgICAgdXJsOiBhamF4TG9j
YXRpb24sCisgICAgICAgIGlzTG9jYWw6IHJsb2NhbFByb3RvY29sLnRlc3QoIGFqYXhMb2NQYXJ0
c1sgMSBdICksCisgICAgICAgIGdsb2JhbDogdHJ1ZSwKKyAgICAgICAgdHlwZTogIkdFVCIsCisg
ICAgICAgIGNvbnRlbnRUeXBlOiAiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBj
aGFyc2V0PVVURi04IiwKKyAgICAgICAgcHJvY2Vzc0RhdGE6IHRydWUsCisgICAgICAgIGFzeW5j
OiB0cnVlLAorICAgICAgICAvKgorICAgICAgICB0aW1lb3V0OiAwLAorICAgICAgICBkYXRhOiBu
dWxsLAorICAgICAgICBkYXRhVHlwZTogbnVsbCwKKyAgICAgICAgdXNlcm5hbWU6IG51bGwsCisg
ICAgICAgIHBhc3N3b3JkOiBudWxsLAorICAgICAgICBjYWNoZTogbnVsbCwKKyAgICAgICAgdGhy
b3dzOiBmYWxzZSwKKyAgICAgICAgdHJhZGl0aW9uYWw6IGZhbHNlLAorICAgICAgICBoZWFkZXJz
OiB7fSwKKyAgICAgICAgKi8KKworICAgICAgICBhY2NlcHRzOiB7CisgICAgICAgICAgICB4bWw6
ICJhcHBsaWNhdGlvbi94bWwsIHRleHQveG1sIiwKKyAgICAgICAgICAgIGh0bWw6ICJ0ZXh0L2h0
bWwiLAorICAgICAgICAgICAgdGV4dDogInRleHQvcGxhaW4iLAorICAgICAgICAgICAganNvbjog
ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvamF2YXNjcmlwdCIsCisgICAgICAgICAgICAiKiI6IGFs
bFR5cGVzCisgICAgICAgIH0sCisKKyAgICAgICAgY29udGVudHM6IHsKKyAgICAgICAgICAgIHht
bDogL3htbC8sCisgICAgICAgICAgICBodG1sOiAvaHRtbC8sCisgICAgICAgICAgICBqc29uOiAv
anNvbi8KKyAgICAgICAgfSwKKworICAgICAgICByZXNwb25zZUZpZWxkczogeworICAgICAgICAg
ICAgeG1sOiAicmVzcG9uc2VYTUwiLAorICAgICAgICAgICAgdGV4dDogInJlc3BvbnNlVGV4dCIK
KyAgICAgICAgfSwKKworICAgICAgICAvLyBMaXN0IG9mIGRhdGEgY29udmVydGVycworICAgICAg
ICAvLyAxKSBrZXkgZm9ybWF0IGlzICJzb3VyY2VfdHlwZSBkZXN0aW5hdGlvbl90eXBlIiAoYSBz
aW5nbGUgc3BhY2UgaW4tYmV0d2VlbikKKyAgICAgICAgLy8gMikgdGhlIGNhdGNoYWxsIHN5bWJv
bCAiKiIgY2FuIGJlIHVzZWQgZm9yIHNvdXJjZV90eXBlCisgICAgICAgIGNvbnZlcnRlcnM6IHsK
KworICAgICAgICAgICAgLy8gQ29udmVydCBhbnl0aGluZyB0byB0ZXh0CisgICAgICAgICAgICAi
KiB0ZXh0Ijogd2luZG93LlN0cmluZywKKworICAgICAgICAgICAgLy8gVGV4dCB0byBodG1sICh0
cnVlID0gbm8gdHJhbnNmb3JtYXRpb24pCisgICAgICAgICAgICAidGV4dCBodG1sIjogdHJ1ZSwK
KworICAgICAgICAgICAgLy8gRXZhbHVhdGUgdGV4dCBhcyBhIGpzb24gZXhwcmVzc2lvbgorICAg
ICAgICAgICAgInRleHQganNvbiI6IGpRdWVyeS5wYXJzZUpTT04sCisKKyAgICAgICAgICAgIC8v
IFBhcnNlIHRleHQgYXMgeG1sCisgICAgICAgICAgICAidGV4dCB4bWwiOiBqUXVlcnkucGFyc2VY
TUwKKyAgICAgICAgfSwKKworICAgICAgICAvLyBGb3Igb3B0aW9ucyB0aGF0IHNob3VsZG4ndCBi
ZSBkZWVwIGV4dGVuZGVkOgorICAgICAgICAvLyB5b3UgY2FuIGFkZCB5b3VyIG93biBjdXN0b20g
b3B0aW9ucyBoZXJlIGlmCisgICAgICAgIC8vIGFuZCB3aGVuIHlvdSBjcmVhdGUgb25lIHRoYXQg
c2hvdWxkbid0IGJlCisgICAgICAgIC8vIGRlZXAgZXh0ZW5kZWQgKHNlZSBhamF4RXh0ZW5kKQor
ICAgICAgICBmbGF0T3B0aW9uczogeworICAgICAgICAgICAgY29udGV4dDogdHJ1ZSwKKyAgICAg
ICAgICAgIHVybDogdHJ1ZQorICAgICAgICB9CisgICAgfSwKKworICAgIGFqYXhQcmVmaWx0ZXI6
IGFkZFRvUHJlZmlsdGVyc09yVHJhbnNwb3J0cyggcHJlZmlsdGVycyApLAorICAgIGFqYXhUcmFu
c3BvcnQ6IGFkZFRvUHJlZmlsdGVyc09yVHJhbnNwb3J0cyggdHJhbnNwb3J0cyApLAorCisgICAg
Ly8gTWFpbiBtZXRob2QKKyAgICBhamF4OiBmdW5jdGlvbiggdXJsLCBvcHRpb25zICkgeworCisg
ICAgICAgIC8vIElmIHVybCBpcyBhbiBvYmplY3QsIHNpbXVsYXRlIHByZS0xLjUgc2lnbmF0dXJl
CisgICAgICAgIGlmICggdHlwZW9mIHVybCA9PT0gIm9iamVjdCIgKSB7CisgICAgICAgICAgICBv
cHRpb25zID0gdXJsOworICAgICAgICAgICAgdXJsID0gdW5kZWZpbmVkOworICAgICAgICB9CisK
KyAgICAgICAgLy8gRm9yY2Ugb3B0aW9ucyB0byBiZSBhbiBvYmplY3QKKyAgICAgICAgb3B0aW9u
cyA9IG9wdGlvbnMgfHwge307CisKKyAgICAgICAgdmFyIC8vIGlmTW9kaWZpZWQga2V5CisgICAg
ICAgICAgICBpZk1vZGlmaWVkS2V5LAorICAgICAgICAgICAgLy8gUmVzcG9uc2UgaGVhZGVycwor
ICAgICAgICAgICAgcmVzcG9uc2VIZWFkZXJzU3RyaW5nLAorICAgICAgICAgICAgcmVzcG9uc2VI
ZWFkZXJzLAorICAgICAgICAgICAgLy8gdHJhbnNwb3J0CisgICAgICAgICAgICB0cmFuc3BvcnQs
CisgICAgICAgICAgICAvLyB0aW1lb3V0IGhhbmRsZQorICAgICAgICAgICAgdGltZW91dFRpbWVy
LAorICAgICAgICAgICAgLy8gQ3Jvc3MtZG9tYWluIGRldGVjdGlvbiB2YXJzCisgICAgICAgICAg
ICBwYXJ0cywKKyAgICAgICAgICAgIC8vIFRvIGtub3cgaWYgZ2xvYmFsIGV2ZW50cyBhcmUgdG8g
YmUgZGlzcGF0Y2hlZAorICAgICAgICAgICAgZmlyZUdsb2JhbHMsCisgICAgICAgICAgICAvLyBM
b29wIHZhcmlhYmxlCisgICAgICAgICAgICBpLAorICAgICAgICAgICAgLy8gQ3JlYXRlIHRoZSBm
aW5hbCBvcHRpb25zIG9iamVjdAorICAgICAgICAgICAgcyA9IGpRdWVyeS5hamF4U2V0dXAoIHt9
LCBvcHRpb25zICksCisgICAgICAgICAgICAvLyBDYWxsYmFja3MgY29udGV4dAorICAgICAgICAg
ICAgY2FsbGJhY2tDb250ZXh0ID0gcy5jb250ZXh0IHx8IHMsCisgICAgICAgICAgICAvLyBDb250
ZXh0IGZvciBnbG9iYWwgZXZlbnRzCisgICAgICAgICAgICAvLyBJdCdzIHRoZSBjYWxsYmFja0Nv
bnRleHQgaWYgb25lIHdhcyBwcm92aWRlZCBpbiB0aGUgb3B0aW9ucworICAgICAgICAgICAgLy8g
YW5kIGlmIGl0J3MgYSBET00gbm9kZSBvciBhIGpRdWVyeSBjb2xsZWN0aW9uCisgICAgICAgICAg
ICBnbG9iYWxFdmVudENvbnRleHQgPSBjYWxsYmFja0NvbnRleHQgIT09IHMgJiYKKyAgICAgICAg
ICAgICAgICAoIGNhbGxiYWNrQ29udGV4dC5ub2RlVHlwZSB8fCBjYWxsYmFja0NvbnRleHQgaW5z
dGFuY2VvZiBqUXVlcnkgKSA/CisgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkoIGNhbGxi
YWNrQ29udGV4dCApIDogalF1ZXJ5LmV2ZW50LAorICAgICAgICAgICAgLy8gRGVmZXJyZWRzCisg
ICAgICAgICAgICBkZWZlcnJlZCA9IGpRdWVyeS5EZWZlcnJlZCgpLAorICAgICAgICAgICAgY29t
cGxldGVEZWZlcnJlZCA9IGpRdWVyeS5DYWxsYmFja3MoICJvbmNlIG1lbW9yeSIgKSwKKyAgICAg
ICAgICAgIC8vIFN0YXR1cy1kZXBlbmRlbnQgY2FsbGJhY2tzCisgICAgICAgICAgICBzdGF0dXND
b2RlID0gcy5zdGF0dXNDb2RlIHx8IHt9LAorICAgICAgICAgICAgLy8gSGVhZGVycyAodGhleSBh
cmUgc2VudCBhbGwgYXQgb25jZSkKKyAgICAgICAgICAgIHJlcXVlc3RIZWFkZXJzID0ge30sCisg
ICAgICAgICAgICByZXF1ZXN0SGVhZGVyc05hbWVzID0ge30sCisgICAgICAgICAgICAvLyBUaGUg
anFYSFIgc3RhdGUKKyAgICAgICAgICAgIHN0YXRlID0gMCwKKyAgICAgICAgICAgIC8vIERlZmF1
bHQgYWJvcnQgbWVzc2FnZQorICAgICAgICAgICAgc3RyQWJvcnQgPSAiY2FuY2VsZWQiLAorICAg
ICAgICAgICAgLy8gRmFrZSB4aHIKKyAgICAgICAgICAgIGpxWEhSID0geworCisgICAgICAgICAg
ICAgICAgcmVhZHlTdGF0ZTogMCwKKworICAgICAgICAgICAgICAgIC8vIENhY2hlcyB0aGUgaGVh
ZGVyCisgICAgICAgICAgICAgICAgc2V0UmVxdWVzdEhlYWRlcjogZnVuY3Rpb24oIG5hbWUsIHZh
bHVlICkgeworICAgICAgICAgICAgICAgICAgICBpZiAoICFzdGF0ZSApIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHZhciBsbmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG5hbWUgPSByZXF1ZXN0SGVhZGVyc05hbWVzWyBsbmFtZSBdID0gcmVxdWVz
dEhlYWRlcnNOYW1lc1sgbG5hbWUgXSB8fCBuYW1lOworICAgICAgICAgICAgICAgICAgICAgICAg
cmVxdWVzdEhlYWRlcnNbIG5hbWUgXSA9IHZhbHVlOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgICAgIH0sCisKKyAg
ICAgICAgICAgICAgICAvLyBSYXcgc3RyaW5nCisgICAgICAgICAgICAgICAgZ2V0QWxsUmVzcG9u
c2VIZWFkZXJzOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRl
ID09PSAyID8gcmVzcG9uc2VIZWFkZXJzU3RyaW5nIDogbnVsbDsKKyAgICAgICAgICAgICAgICB9
LAorCisgICAgICAgICAgICAgICAgLy8gQnVpbGRzIGhlYWRlcnMgaGFzaHRhYmxlIGlmIG5lZWRl
ZAorICAgICAgICAgICAgICAgIGdldFJlc3BvbnNlSGVhZGVyOiBmdW5jdGlvbigga2V5ICkgewor
ICAgICAgICAgICAgICAgICAgICB2YXIgbWF0Y2g7CisgICAgICAgICAgICAgICAgICAgIGlmICgg
c3RhdGUgPT09IDIgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFyZXNwb25zZUhl
YWRlcnMgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VIZWFkZXJzID0g
e307CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUoICggbWF0Y2ggPSByaGVhZGVy
cy5leGVjKCByZXNwb25zZUhlYWRlcnNTdHJpbmcgKSApICkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXNwb25zZUhlYWRlcnNbIG1hdGNoWzFdLnRvTG93ZXJDYXNlKCkgXSA9
IG1hdGNoWyAyIF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2ggPSByZXNwb25zZUhl
YWRlcnNbIGtleS50b0xvd2VyQ2FzZSgpIF07CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoID09PSB1bmRlZmluZWQgPyBudWxsIDogbWF0Y2g7
CisgICAgICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgICAgIC8vIE92ZXJyaWRlcyByZXNw
b25zZSBjb250ZW50LXR5cGUgaGVhZGVyCisgICAgICAgICAgICAgICAgb3ZlcnJpZGVNaW1lVHlw
ZTogZnVuY3Rpb24oIHR5cGUgKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICggIXN0YXRlICkg
eworICAgICAgICAgICAgICAgICAgICAgICAgcy5taW1lVHlwZSA9IHR5cGU7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAg
ICAgICAgfSwKKworICAgICAgICAgICAgICAgIC8vIENhbmNlbCB0aGUgcmVxdWVzdAorICAgICAg
ICAgICAgICAgIGFib3J0OiBmdW5jdGlvbiggc3RhdHVzVGV4dCApIHsKKyAgICAgICAgICAgICAg
ICAgICAgc3RhdHVzVGV4dCA9IHN0YXR1c1RleHQgfHwgc3RyQWJvcnQ7CisgICAgICAgICAgICAg
ICAgICAgIGlmICggdHJhbnNwb3J0ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNw
b3J0LmFib3J0KCBzdGF0dXNUZXh0ICk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgZG9uZSggMCwgc3RhdHVzVGV4dCApOworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdGhpczsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9OworCisgICAgICAg
IC8vIENhbGxiYWNrIGZvciB3aGVuIGV2ZXJ5dGhpbmcgaXMgZG9uZQorICAgICAgICAvLyBJdCBp
cyBkZWZpbmVkIGhlcmUgYmVjYXVzZSBqc2xpbnQgY29tcGxhaW5zIGlmIGl0IGlzIGRlY2xhcmVk
CisgICAgICAgIC8vIGF0IHRoZSBlbmQgb2YgdGhlIGZ1bmN0aW9uICh3aGljaCB3b3VsZCBiZSBt
b3JlIGxvZ2ljYWwgYW5kIHJlYWRhYmxlKQorICAgICAgICBmdW5jdGlvbiBkb25lKCBzdGF0dXMs
IG5hdGl2ZVN0YXR1c1RleHQsIHJlc3BvbnNlcywgaGVhZGVycyApIHsKKyAgICAgICAgICAgIHZh
ciBpc1N1Y2Nlc3MsIHN1Y2Nlc3MsIGVycm9yLCByZXNwb25zZSwgbW9kaWZpZWQsCisgICAgICAg
ICAgICAgICAgc3RhdHVzVGV4dCA9IG5hdGl2ZVN0YXR1c1RleHQ7CisKKyAgICAgICAgICAgIC8v
IENhbGxlZCBvbmNlCisgICAgICAgICAgICBpZiAoIHN0YXRlID09PSAyICkgeworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gU3RhdGUgaXMg
ImRvbmUiIG5vdworICAgICAgICAgICAgc3RhdGUgPSAyOworCisgICAgICAgICAgICAvLyBDbGVh
ciB0aW1lb3V0IGlmIGl0IGV4aXN0cworICAgICAgICAgICAgaWYgKCB0aW1lb3V0VGltZXIgKSB7
CisgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KCB0aW1lb3V0VGltZXIgKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgLy8gRGVyZWZlcmVuY2UgdHJhbnNwb3J0IGZvciBlYXJseSBn
YXJiYWdlIGNvbGxlY3Rpb24KKyAgICAgICAgICAgIC8vIChubyBtYXR0ZXIgaG93IGxvbmcgdGhl
IGpxWEhSIG9iamVjdCB3aWxsIGJlIHVzZWQpCisgICAgICAgICAgICB0cmFuc3BvcnQgPSB1bmRl
ZmluZWQ7CisKKyAgICAgICAgICAgIC8vIENhY2hlIHJlc3BvbnNlIGhlYWRlcnMKKyAgICAgICAg
ICAgIHJlc3BvbnNlSGVhZGVyc1N0cmluZyA9IGhlYWRlcnMgfHwgIiI7CisKKyAgICAgICAgICAg
IC8vIFNldCByZWFkeVN0YXRlCisgICAgICAgICAgICBqcVhIUi5yZWFkeVN0YXRlID0gc3RhdHVz
ID4gMCA/IDQgOiAwOworCisgICAgICAgICAgICAvLyBHZXQgcmVzcG9uc2UgZGF0YQorICAgICAg
ICAgICAgaWYgKCByZXNwb25zZXMgKSB7CisgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBhamF4
SGFuZGxlUmVzcG9uc2VzKCBzLCBqcVhIUiwgcmVzcG9uc2VzICk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIC8vIElmIHN1Y2Nlc3NmdWwsIGhhbmRsZSB0eXBlIGNoYWluaW5nCisgICAg
ICAgICAgICBpZiAoIHN0YXR1cyA+PSAyMDAgJiYgc3RhdHVzIDwgMzAwIHx8IHN0YXR1cyA9PT0g
MzA0ICkgeworCisgICAgICAgICAgICAgICAgLy8gU2V0IHRoZSBJZi1Nb2RpZmllZC1TaW5jZSBh
bmQvb3IgSWYtTm9uZS1NYXRjaCBoZWFkZXIsIGlmIGluIGlmTW9kaWZpZWQgbW9kZS4KKyAgICAg
ICAgICAgICAgICBpZiAoIHMuaWZNb2RpZmllZCApIHsKKworICAgICAgICAgICAgICAgICAgICBt
b2RpZmllZCA9IGpxWEhSLmdldFJlc3BvbnNlSGVhZGVyKCJMYXN0LU1vZGlmaWVkIik7CisgICAg
ICAgICAgICAgICAgICAgIGlmICggbW9kaWZpZWQgKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBqUXVlcnkubGFzdE1vZGlmaWVkWyBpZk1vZGlmaWVkS2V5IF0gPSBtb2RpZmllZDsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBtb2RpZmllZCA9IGpxWEhSLmdl
dFJlc3BvbnNlSGVhZGVyKCJFdGFnIik7CisgICAgICAgICAgICAgICAgICAgIGlmICggbW9kaWZp
ZWQgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXRhZ1sgaWZNb2RpZmllZEtl
eSBdID0gbW9kaWZpZWQ7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICAvLyBJZiBub3QgbW9kaWZpZWQKKyAgICAgICAgICAgICAgICBp
ZiAoIHN0YXR1cyA9PT0gMzA0ICkgeworCisgICAgICAgICAgICAgICAgICAgIHN0YXR1c1RleHQg
PSAibm90bW9kaWZpZWQiOworICAgICAgICAgICAgICAgICAgICBpc1N1Y2Nlc3MgPSB0cnVlOwor
CisgICAgICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZSBkYXRhCisgICAgICAgICAgICAgICAgfSBl
bHNlIHsKKworICAgICAgICAgICAgICAgICAgICBpc1N1Y2Nlc3MgPSBhamF4Q29udmVydCggcywg
cmVzcG9uc2UgKTsKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzVGV4dCA9IGlzU3VjY2Vzcy5z
dGF0ZTsKKyAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IGlzU3VjY2Vzcy5kYXRhOworICAg
ICAgICAgICAgICAgICAgICBlcnJvciA9IGlzU3VjY2Vzcy5lcnJvcjsKKyAgICAgICAgICAgICAg
ICAgICAgaXNTdWNjZXNzID0gIWVycm9yOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gV2UgZXh0cmFjdCBlcnJvciBmcm9tIHN0YXR1
c1RleHQKKyAgICAgICAgICAgICAgICAvLyB0aGVuIG5vcm1hbGl6ZSBzdGF0dXNUZXh0IGFuZCBz
dGF0dXMgZm9yIG5vbi1hYm9ydHMKKyAgICAgICAgICAgICAgICBlcnJvciA9IHN0YXR1c1RleHQ7
CisgICAgICAgICAgICAgICAgaWYgKCAhc3RhdHVzVGV4dCB8fCBzdGF0dXMgKSB7CisgICAgICAg
ICAgICAgICAgICAgIHN0YXR1c1RleHQgPSAiZXJyb3IiOworICAgICAgICAgICAgICAgICAgICBp
ZiAoIHN0YXR1cyA8IDAgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSAwOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAvLyBTZXQgZGF0YSBmb3IgdGhlIGZha2UgeGhyIG9iamVjdAorICAgICAg
ICAgICAganFYSFIuc3RhdHVzID0gc3RhdHVzOworICAgICAgICAgICAganFYSFIuc3RhdHVzVGV4
dCA9ICggbmF0aXZlU3RhdHVzVGV4dCB8fCBzdGF0dXNUZXh0ICkgKyAiIjsKKworICAgICAgICAg
ICAgLy8gU3VjY2Vzcy9FcnJvcgorICAgICAgICAgICAgaWYgKCBpc1N1Y2Nlc3MgKSB7CisgICAg
ICAgICAgICAgICAgZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGNhbGxiYWNrQ29udGV4dCwgWyBzdWNj
ZXNzLCBzdGF0dXNUZXh0LCBqcVhIUiBdICk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIGRlZmVycmVkLnJlamVjdFdpdGgoIGNhbGxiYWNrQ29udGV4dCwgWyBqcVhIUiwg
c3RhdHVzVGV4dCwgZXJyb3IgXSApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBT
dGF0dXMtZGVwZW5kZW50IGNhbGxiYWNrcworICAgICAgICAgICAganFYSFIuc3RhdHVzQ29kZSgg
c3RhdHVzQ29kZSApOworICAgICAgICAgICAgc3RhdHVzQ29kZSA9IHVuZGVmaW5lZDsKKworICAg
ICAgICAgICAgaWYgKCBmaXJlR2xvYmFscyApIHsKKyAgICAgICAgICAgICAgICBnbG9iYWxFdmVu
dENvbnRleHQudHJpZ2dlciggImFqYXgiICsgKCBpc1N1Y2Nlc3MgPyAiU3VjY2VzcyIgOiAiRXJy
b3IiICksCisgICAgICAgICAgICAgICAgICAgICAgICBbIGpxWEhSLCBzLCBpc1N1Y2Nlc3MgPyBz
dWNjZXNzIDogZXJyb3IgXSApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBDb21w
bGV0ZQorICAgICAgICAgICAgY29tcGxldGVEZWZlcnJlZC5maXJlV2l0aCggY2FsbGJhY2tDb250
ZXh0LCBbIGpxWEhSLCBzdGF0dXNUZXh0IF0gKTsKKworICAgICAgICAgICAgaWYgKCBmaXJlR2xv
YmFscyApIHsKKyAgICAgICAgICAgICAgICBnbG9iYWxFdmVudENvbnRleHQudHJpZ2dlciggImFq
YXhDb21wbGV0ZSIsIFsganFYSFIsIHMgXSApOworICAgICAgICAgICAgICAgIC8vIEhhbmRsZSB0
aGUgZ2xvYmFsIEFKQVggY291bnRlcgorICAgICAgICAgICAgICAgIGlmICggISggLS1qUXVlcnku
YWN0aXZlICkgKSB7CisgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5ldmVudC50cmlnZ2VyKCAi
YWpheFN0b3AiICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgLy8gQXR0YWNoIGRlZmVycmVkcworICAgICAgICBkZWZlcnJlZC5wcm9taXNl
KCBqcVhIUiApOworICAgICAgICBqcVhIUi5zdWNjZXNzID0ganFYSFIuZG9uZTsKKyAgICAgICAg
anFYSFIuZXJyb3IgPSBqcVhIUi5mYWlsOworICAgICAgICBqcVhIUi5jb21wbGV0ZSA9IGNvbXBs
ZXRlRGVmZXJyZWQuYWRkOworCisgICAgICAgIC8vIFN0YXR1cy1kZXBlbmRlbnQgY2FsbGJhY2tz
CisgICAgICAgIGpxWEhSLnN0YXR1c0NvZGUgPSBmdW5jdGlvbiggbWFwICkgeworICAgICAgICAg
ICAgaWYgKCBtYXAgKSB7CisgICAgICAgICAgICAgICAgdmFyIHRtcDsKKyAgICAgICAgICAgICAg
ICBpZiAoIHN0YXRlIDwgMiApIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yICggdG1wIGluIG1h
cCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c0NvZGVbIHRtcCBdID0gWyBzdGF0
dXNDb2RlW3RtcF0sIG1hcFt0bXBdIF07CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICB0bXAgPSBtYXBbIGpxWEhSLnN0
YXR1cyBdOworICAgICAgICAgICAgICAgICAgICBqcVhIUi5hbHdheXMoIHRtcCApOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAg
ICAgICB9OworCisgICAgICAgIC8vIFJlbW92ZSBoYXNoIGNoYXJhY3RlciAoIzc1MzE6IGFuZCBz
dHJpbmcgcHJvbW90aW9uKQorICAgICAgICAvLyBBZGQgcHJvdG9jb2wgaWYgbm90IHByb3ZpZGVk
ICgjNTg2NjogSUU3IGlzc3VlIHdpdGggcHJvdG9jb2wtbGVzcyB1cmxzKQorICAgICAgICAvLyBX
ZSBhbHNvIHVzZSB0aGUgdXJsIHBhcmFtZXRlciBpZiBhdmFpbGFibGUKKyAgICAgICAgcy51cmwg
PSAoICggdXJsIHx8IHMudXJsICkgKyAiIiApLnJlcGxhY2UoIHJoYXNoLCAiIiApLnJlcGxhY2Uo
IHJwcm90b2NvbCwgYWpheExvY1BhcnRzWyAxIF0gKyAiLy8iICk7CisKKyAgICAgICAgLy8gRXh0
cmFjdCBkYXRhVHlwZXMgbGlzdAorICAgICAgICBzLmRhdGFUeXBlcyA9IGpRdWVyeS50cmltKCBz
LmRhdGFUeXBlIHx8ICIqIiApLnRvTG93ZXJDYXNlKCkuc3BsaXQoIGNvcmVfcnNwYWNlICk7CisK
KyAgICAgICAgLy8gQSBjcm9zcy1kb21haW4gcmVxdWVzdCBpcyBpbiBvcmRlciB3aGVuIHdlIGhh
dmUgYSBwcm90b2NvbDpob3N0OnBvcnQgbWlzbWF0Y2gKKyAgICAgICAgaWYgKCBzLmNyb3NzRG9t
YWluID09IG51bGwgKSB7CisgICAgICAgICAgICBwYXJ0cyA9IHJ1cmwuZXhlYyggcy51cmwudG9M
b3dlckNhc2UoKSApOworICAgICAgICAgICAgcy5jcm9zc0RvbWFpbiA9ICEhKCBwYXJ0cyAmJgor
ICAgICAgICAgICAgICAgICggcGFydHNbIDEgXSAhPT0gYWpheExvY1BhcnRzWyAxIF0gfHwgcGFy
dHNbIDIgXSAhPT0gYWpheExvY1BhcnRzWyAyIF0gfHwKKyAgICAgICAgICAgICAgICAgICAgKCBw
YXJ0c1sgMyBdIHx8ICggcGFydHNbIDEgXSA9PT0gImh0dHA6IiA/IDgwIDogNDQzICkgKSAhPQor
ICAgICAgICAgICAgICAgICAgICAgICAgKCBhamF4TG9jUGFydHNbIDMgXSB8fCAoIGFqYXhMb2NQ
YXJ0c1sgMSBdID09PSAiaHR0cDoiID8gODAgOiA0NDMgKSApICkKKyAgICAgICAgICAgICk7Cisg
ICAgICAgIH0KKworICAgICAgICAvLyBDb252ZXJ0IGRhdGEgaWYgbm90IGFscmVhZHkgYSBzdHJp
bmcKKyAgICAgICAgaWYgKCBzLmRhdGEgJiYgcy5wcm9jZXNzRGF0YSAmJiB0eXBlb2Ygcy5kYXRh
ICE9PSAic3RyaW5nIiApIHsKKyAgICAgICAgICAgIHMuZGF0YSA9IGpRdWVyeS5wYXJhbSggcy5k
YXRhLCBzLnRyYWRpdGlvbmFsICk7CisgICAgICAgIH0KKworICAgICAgICAvLyBBcHBseSBwcmVm
aWx0ZXJzCisgICAgICAgIGluc3BlY3RQcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCBwcmVmaWx0ZXJz
LCBzLCBvcHRpb25zLCBqcVhIUiApOworCisgICAgICAgIC8vIElmIHJlcXVlc3Qgd2FzIGFib3J0
ZWQgaW5zaWRlIGEgcHJlZmlsdGVyLCBzdG9wIHRoZXJlCisgICAgICAgIGlmICggc3RhdGUgPT09
IDIgKSB7CisgICAgICAgICAgICByZXR1cm4ganFYSFI7CisgICAgICAgIH0KKworICAgICAgICAv
LyBXZSBjYW4gZmlyZSBnbG9iYWwgZXZlbnRzIGFzIG9mIG5vdyBpZiBhc2tlZCB0bworICAgICAg
ICBmaXJlR2xvYmFscyA9IHMuZ2xvYmFsOworCisgICAgICAgIC8vIFVwcGVyY2FzZSB0aGUgdHlw
ZQorICAgICAgICBzLnR5cGUgPSBzLnR5cGUudG9VcHBlckNhc2UoKTsKKworICAgICAgICAvLyBE
ZXRlcm1pbmUgaWYgcmVxdWVzdCBoYXMgY29udGVudAorICAgICAgICBzLmhhc0NvbnRlbnQgPSAh
cm5vQ29udGVudC50ZXN0KCBzLnR5cGUgKTsKKworICAgICAgICAvLyBXYXRjaCBmb3IgYSBuZXcg
c2V0IG9mIHJlcXVlc3RzCisgICAgICAgIGlmICggZmlyZUdsb2JhbHMgJiYgalF1ZXJ5LmFjdGl2
ZSsrID09PSAwICkgeworICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnRyaWdnZXIoICJhamF4U3Rh
cnQiICk7CisgICAgICAgIH0KKworICAgICAgICAvLyBNb3JlIG9wdGlvbnMgaGFuZGxpbmcgZm9y
IHJlcXVlc3RzIHdpdGggbm8gY29udGVudAorICAgICAgICBpZiAoICFzLmhhc0NvbnRlbnQgKSB7
CisKKyAgICAgICAgICAgIC8vIElmIGRhdGEgaXMgYXZhaWxhYmxlLCBhcHBlbmQgZGF0YSB0byB1
cmwKKyAgICAgICAgICAgIGlmICggcy5kYXRhICkgeworICAgICAgICAgICAgICAgIHMudXJsICs9
ICggcnF1ZXJ5LnRlc3QoIHMudXJsICkgPyAiJiIgOiAiPyIgKSArIHMuZGF0YTsKKyAgICAgICAg
ICAgICAgICAvLyAjOTY4MjogcmVtb3ZlIGRhdGEgc28gdGhhdCBpdCdzIG5vdCB1c2VkIGluIGFu
IGV2ZW50dWFsIHJldHJ5CisgICAgICAgICAgICAgICAgZGVsZXRlIHMuZGF0YTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgLy8gR2V0IGlmTW9kaWZpZWRLZXkgYmVmb3JlIGFkZGluZyB0
aGUgYW50aS1jYWNoZSBwYXJhbWV0ZXIKKyAgICAgICAgICAgIGlmTW9kaWZpZWRLZXkgPSBzLnVy
bDsKKworICAgICAgICAgICAgLy8gQWRkIGFudGktY2FjaGUgaW4gdXJsIGlmIG5lZWRlZAorICAg
ICAgICAgICAgaWYgKCBzLmNhY2hlID09PSBmYWxzZSApIHsKKworICAgICAgICAgICAgICAgIHZh
ciB0cyA9IGpRdWVyeS5ub3coKSwKKyAgICAgICAgICAgICAgICAgICAgLy8gdHJ5IHJlcGxhY2lu
ZyBfPSBpZiBpdCBpcyB0aGVyZQorICAgICAgICAgICAgICAgICAgICByZXQgPSBzLnVybC5yZXBs
YWNlKCBydHMsICIkMV89IiArIHRzICk7CisKKyAgICAgICAgICAgICAgICAvLyBpZiBub3RoaW5n
IHdhcyByZXBsYWNlZCwgYWRkIHRpbWVzdGFtcCB0byB0aGUgZW5kCisgICAgICAgICAgICAgICAg
cy51cmwgPSByZXQgKyAoICggcmV0ID09PSBzLnVybCApID8gKCBycXVlcnkudGVzdCggcy51cmwg
KSA/ICImIiA6ICI/IiApICsgIl89IiArIHRzIDogIiIgKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIC8vIFNldCB0aGUgY29ycmVjdCBoZWFkZXIsIGlmIGRhdGEgaXMgYmVp
bmcgc2VudAorICAgICAgICBpZiAoIHMuZGF0YSAmJiBzLmhhc0NvbnRlbnQgJiYgcy5jb250ZW50
VHlwZSAhPT0gZmFsc2UgfHwgb3B0aW9ucy5jb250ZW50VHlwZSApIHsKKyAgICAgICAgICAgIGpx
WEhSLnNldFJlcXVlc3RIZWFkZXIoICJDb250ZW50LVR5cGUiLCBzLmNvbnRlbnRUeXBlICk7Cisg
ICAgICAgIH0KKworICAgICAgICAvLyBTZXQgdGhlIElmLU1vZGlmaWVkLVNpbmNlIGFuZC9vciBJ
Zi1Ob25lLU1hdGNoIGhlYWRlciwgaWYgaW4gaWZNb2RpZmllZCBtb2RlLgorICAgICAgICBpZiAo
IHMuaWZNb2RpZmllZCApIHsKKyAgICAgICAgICAgIGlmTW9kaWZpZWRLZXkgPSBpZk1vZGlmaWVk
S2V5IHx8IHMudXJsOworICAgICAgICAgICAgaWYgKCBqUXVlcnkubGFzdE1vZGlmaWVkWyBpZk1v
ZGlmaWVkS2V5IF0gKSB7CisgICAgICAgICAgICAgICAganFYSFIuc2V0UmVxdWVzdEhlYWRlcigg
IklmLU1vZGlmaWVkLVNpbmNlIiwgalF1ZXJ5Lmxhc3RNb2RpZmllZFsgaWZNb2RpZmllZEtleSBd
ICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIGpRdWVyeS5ldGFnWyBpZk1vZGlm
aWVkS2V5IF0gKSB7CisgICAgICAgICAgICAgICAganFYSFIuc2V0UmVxdWVzdEhlYWRlciggIklm
LU5vbmUtTWF0Y2giLCBqUXVlcnkuZXRhZ1sgaWZNb2RpZmllZEtleSBdICk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBTZXQgdGhlIEFjY2VwdHMgaGVhZGVyIGZvciB0
aGUgc2VydmVyLCBkZXBlbmRpbmcgb24gdGhlIGRhdGFUeXBlCisgICAgICAgIGpxWEhSLnNldFJl
cXVlc3RIZWFkZXIoCisgICAgICAgICAgICAiQWNjZXB0IiwKKyAgICAgICAgICAgIHMuZGF0YVR5
cGVzWyAwIF0gJiYgcy5hY2NlcHRzWyBzLmRhdGFUeXBlc1swXSBdID8KKyAgICAgICAgICAgICAg
ICBzLmFjY2VwdHNbIHMuZGF0YVR5cGVzWzBdIF0gKyAoIHMuZGF0YVR5cGVzWyAwIF0gIT09ICIq
IiA/ICIsICIgKyBhbGxUeXBlcyArICI7IHE9MC4wMSIgOiAiIiApIDoKKyAgICAgICAgICAgICAg
ICBzLmFjY2VwdHNbICIqIiBdCisgICAgICAgICk7CisKKyAgICAgICAgLy8gQ2hlY2sgZm9yIGhl
YWRlcnMgb3B0aW9uCisgICAgICAgIGZvciAoIGkgaW4gcy5oZWFkZXJzICkgeworICAgICAgICAg
ICAganFYSFIuc2V0UmVxdWVzdEhlYWRlciggaSwgcy5oZWFkZXJzWyBpIF0gKTsKKyAgICAgICAg
fQorCisgICAgICAgIC8vIEFsbG93IGN1c3RvbSBoZWFkZXJzL21pbWV0eXBlcyBhbmQgZWFybHkg
YWJvcnQKKyAgICAgICAgaWYgKCBzLmJlZm9yZVNlbmQgJiYgKCBzLmJlZm9yZVNlbmQuY2FsbCgg
Y2FsbGJhY2tDb250ZXh0LCBqcVhIUiwgcyApID09PSBmYWxzZSB8fCBzdGF0ZSA9PT0gMiApICkg
eworICAgICAgICAgICAgICAgIC8vIEFib3J0IGlmIG5vdCBkb25lIGFscmVhZHkgYW5kIHJldHVy
bgorICAgICAgICAgICAgICAgIHJldHVybiBqcVhIUi5hYm9ydCgpOworCisgICAgICAgIH0KKwor
ICAgICAgICAvLyBhYm9ydGluZyBpcyBubyBsb25nZXIgYSBjYW5jZWxsYXRpb24KKyAgICAgICAg
c3RyQWJvcnQgPSAiYWJvcnQiOworCisgICAgICAgIC8vIEluc3RhbGwgY2FsbGJhY2tzIG9uIGRl
ZmVycmVkcworICAgICAgICBmb3IgKCBpIGluIHsgc3VjY2VzczogMSwgZXJyb3I6IDEsIGNvbXBs
ZXRlOiAxIH0gKSB7CisgICAgICAgICAgICBqcVhIUlsgaSBdKCBzWyBpIF0gKTsKKyAgICAgICAg
fQorCisgICAgICAgIC8vIEdldCB0cmFuc3BvcnQKKyAgICAgICAgdHJhbnNwb3J0ID0gaW5zcGVj
dFByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHRyYW5zcG9ydHMsIHMsIG9wdGlvbnMsIGpxWEhSICk7
CisKKyAgICAgICAgLy8gSWYgbm8gdHJhbnNwb3J0LCB3ZSBhdXRvLWFib3J0CisgICAgICAgIGlm
ICggIXRyYW5zcG9ydCApIHsKKyAgICAgICAgICAgIGRvbmUoIC0xLCAiTm8gVHJhbnNwb3J0IiAp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAganFYSFIucmVhZHlTdGF0ZSA9IDE7Cisg
ICAgICAgICAgICAvLyBTZW5kIGdsb2JhbCBldmVudAorICAgICAgICAgICAgaWYgKCBmaXJlR2xv
YmFscyApIHsKKyAgICAgICAgICAgICAgICBnbG9iYWxFdmVudENvbnRleHQudHJpZ2dlciggImFq
YXhTZW5kIiwgWyBqcVhIUiwgcyBdICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBU
aW1lb3V0CisgICAgICAgICAgICBpZiAoIHMuYXN5bmMgJiYgcy50aW1lb3V0ID4gMCApIHsKKyAg
ICAgICAgICAgICAgICB0aW1lb3V0VGltZXIgPSBzZXRUaW1lb3V0KCBmdW5jdGlvbigpeworICAg
ICAgICAgICAgICAgICAgICBqcVhIUi5hYm9ydCggInRpbWVvdXQiICk7CisgICAgICAgICAgICAg
ICAgfSwgcy50aW1lb3V0ICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHRyeSB7Cisg
ICAgICAgICAgICAgICAgc3RhdGUgPSAxOworICAgICAgICAgICAgICAgIHRyYW5zcG9ydC5zZW5k
KCByZXF1ZXN0SGVhZGVycywgZG9uZSApOworICAgICAgICAgICAgfSBjYXRjaCAoZSkgeworICAg
ICAgICAgICAgICAgIC8vIFByb3BhZ2F0ZSBleGNlcHRpb24gYXMgZXJyb3IgaWYgbm90IGRvbmUK
KyAgICAgICAgICAgICAgICBpZiAoIHN0YXRlIDwgMiApIHsKKyAgICAgICAgICAgICAgICAgICAg
ZG9uZSggLTEsIGUgKTsKKyAgICAgICAgICAgICAgICAvLyBTaW1wbHkgcmV0aHJvdyBvdGhlcndp
c2UKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICB0aHJvdyBl
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg
IHJldHVybiBqcVhIUjsKKyAgICB9LAorCisgICAgLy8gQ291bnRlciBmb3IgaG9sZGluZyB0aGUg
bnVtYmVyIG9mIGFjdGl2ZSBxdWVyaWVzCisgICAgYWN0aXZlOiAwLAorCisgICAgLy8gTGFzdC1N
b2RpZmllZCBoZWFkZXIgY2FjaGUgZm9yIG5leHQgcmVxdWVzdAorICAgIGxhc3RNb2RpZmllZDog
e30sCisgICAgZXRhZzoge30KKworfSk7CisKKy8qIEhhbmRsZXMgcmVzcG9uc2VzIHRvIGFuIGFq
YXggcmVxdWVzdDoKKyAqIC0gc2V0cyBhbGwgcmVzcG9uc2VYWFggZmllbGRzIGFjY29yZGluZ2x5
CisgKiAtIGZpbmRzIHRoZSByaWdodCBkYXRhVHlwZSAobWVkaWF0ZXMgYmV0d2VlbiBjb250ZW50
LXR5cGUgYW5kIGV4cGVjdGVkIGRhdGFUeXBlKQorICogLSByZXR1cm5zIHRoZSBjb3JyZXNwb25k
aW5nIHJlc3BvbnNlCisgKi8KK2Z1bmN0aW9uIGFqYXhIYW5kbGVSZXNwb25zZXMoIHMsIGpxWEhS
LCByZXNwb25zZXMgKSB7CisKKyAgICB2YXIgY3QsIHR5cGUsIGZpbmFsRGF0YVR5cGUsIGZpcnN0
RGF0YVR5cGUsCisgICAgICAgIGNvbnRlbnRzID0gcy5jb250ZW50cywKKyAgICAgICAgZGF0YVR5
cGVzID0gcy5kYXRhVHlwZXMsCisgICAgICAgIHJlc3BvbnNlRmllbGRzID0gcy5yZXNwb25zZUZp
ZWxkczsKKworICAgIC8vIEZpbGwgcmVzcG9uc2VYWFggZmllbGRzCisgICAgZm9yICggdHlwZSBp
biByZXNwb25zZUZpZWxkcyApIHsKKyAgICAgICAgaWYgKCB0eXBlIGluIHJlc3BvbnNlcyApIHsK
KyAgICAgICAgICAgIGpxWEhSWyByZXNwb25zZUZpZWxkc1t0eXBlXSBdID0gcmVzcG9uc2VzWyB0
eXBlIF07CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBSZW1vdmUgYXV0byBkYXRhVHlwZSBh
bmQgZ2V0IGNvbnRlbnQtdHlwZSBpbiB0aGUgcHJvY2VzcworICAgIHdoaWxlKCBkYXRhVHlwZXNb
IDAgXSA9PT0gIioiICkgeworICAgICAgICBkYXRhVHlwZXMuc2hpZnQoKTsKKyAgICAgICAgaWYg
KCBjdCA9PT0gdW5kZWZpbmVkICkgeworICAgICAgICAgICAgY3QgPSBzLm1pbWVUeXBlIHx8IGpx
WEhSLmdldFJlc3BvbnNlSGVhZGVyKCAiY29udGVudC10eXBlIiApOworICAgICAgICB9CisgICAg
fQorCisgICAgLy8gQ2hlY2sgaWYgd2UncmUgZGVhbGluZyB3aXRoIGEga25vd24gY29udGVudC10
eXBlCisgICAgaWYgKCBjdCApIHsKKyAgICAgICAgZm9yICggdHlwZSBpbiBjb250ZW50cyApIHsK
KyAgICAgICAgICAgIGlmICggY29udGVudHNbIHR5cGUgXSAmJiBjb250ZW50c1sgdHlwZSBdLnRl
c3QoIGN0ICkgKSB7CisgICAgICAgICAgICAgICAgZGF0YVR5cGVzLnVuc2hpZnQoIHR5cGUgKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KworICAgIC8vIENoZWNrIHRvIHNlZSBpZiB3ZSBoYXZlIGEgcmVzcG9uc2UgZm9yIHRoZSBleHBl
Y3RlZCBkYXRhVHlwZQorICAgIGlmICggZGF0YVR5cGVzWyAwIF0gaW4gcmVzcG9uc2VzICkgewor
ICAgICAgICBmaW5hbERhdGFUeXBlID0gZGF0YVR5cGVzWyAwIF07CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgLy8gVHJ5IGNvbnZlcnRpYmxlIGRhdGFUeXBlcworICAgICAgICBmb3IgKCB0eXBlIGlu
IHJlc3BvbnNlcyApIHsKKyAgICAgICAgICAgIGlmICggIWRhdGFUeXBlc1sgMCBdIHx8IHMuY29u
dmVydGVyc1sgdHlwZSArICIgIiArIGRhdGFUeXBlc1swXSBdICkgeworICAgICAgICAgICAgICAg
IGZpbmFsRGF0YVR5cGUgPSB0eXBlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaWYgKCAhZmlyc3REYXRhVHlwZSApIHsKKyAgICAgICAgICAgICAg
ICBmaXJzdERhdGFUeXBlID0gdHlwZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICAvLyBPciBqdXN0IHVzZSBmaXJzdCBvbmUKKyAgICAgICAgZmluYWxEYXRhVHlwZSA9IGZpbmFs
RGF0YVR5cGUgfHwgZmlyc3REYXRhVHlwZTsKKyAgICB9CisKKyAgICAvLyBJZiB3ZSBmb3VuZCBh
IGRhdGFUeXBlCisgICAgLy8gV2UgYWRkIHRoZSBkYXRhVHlwZSB0byB0aGUgbGlzdCBpZiBuZWVk
ZWQKKyAgICAvLyBhbmQgcmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nIHJlc3BvbnNlCisgICAgaWYg
KCBmaW5hbERhdGFUeXBlICkgeworICAgICAgICBpZiAoIGZpbmFsRGF0YVR5cGUgIT09IGRhdGFU
eXBlc1sgMCBdICkgeworICAgICAgICAgICAgZGF0YVR5cGVzLnVuc2hpZnQoIGZpbmFsRGF0YVR5
cGUgKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzcG9uc2VzWyBmaW5hbERhdGFUeXBl
IF07CisgICAgfQorfQorCisvLyBDaGFpbiBjb252ZXJzaW9ucyBnaXZlbiB0aGUgcmVxdWVzdCBh
bmQgdGhlIG9yaWdpbmFsIHJlc3BvbnNlCitmdW5jdGlvbiBhamF4Q29udmVydCggcywgcmVzcG9u
c2UgKSB7CisKKyAgICB2YXIgY29udiwgY29udjIsIGN1cnJlbnQsIHRtcCwKKyAgICAgICAgLy8g
V29yayB3aXRoIGEgY29weSBvZiBkYXRhVHlwZXMgaW4gY2FzZSB3ZSBuZWVkIHRvIG1vZGlmeSBp
dCBmb3IgY29udmVyc2lvbgorICAgICAgICBkYXRhVHlwZXMgPSBzLmRhdGFUeXBlcy5zbGljZSgp
LAorICAgICAgICBwcmV2ID0gZGF0YVR5cGVzWyAwIF0sCisgICAgICAgIGNvbnZlcnRlcnMgPSB7
fSwKKyAgICAgICAgaSA9IDA7CisKKyAgICAvLyBBcHBseSB0aGUgZGF0YUZpbHRlciBpZiBwcm92
aWRlZAorICAgIGlmICggcy5kYXRhRmlsdGVyICkgeworICAgICAgICByZXNwb25zZSA9IHMuZGF0
YUZpbHRlciggcmVzcG9uc2UsIHMuZGF0YVR5cGUgKTsKKyAgICB9CisKKyAgICAvLyBDcmVhdGUg
Y29udmVydGVycyBtYXAgd2l0aCBsb3dlcmNhc2VkIGtleXMKKyAgICBpZiAoIGRhdGFUeXBlc1sg
MSBdICkgeworICAgICAgICBmb3IgKCBjb252IGluIHMuY29udmVydGVycyApIHsKKyAgICAgICAg
ICAgIGNvbnZlcnRlcnNbIGNvbnYudG9Mb3dlckNhc2UoKSBdID0gcy5jb252ZXJ0ZXJzWyBjb252
IF07CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBDb252ZXJ0IHRvIGVhY2ggc2VxdWVudGlh
bCBkYXRhVHlwZSwgdG9sZXJhdGluZyBsaXN0IG1vZGlmaWNhdGlvbgorICAgIGZvciAoIDsgKGN1
cnJlbnQgPSBkYXRhVHlwZXNbKytpXSk7ICkgeworCisgICAgICAgIC8vIFRoZXJlJ3Mgb25seSB3
b3JrIHRvIGRvIGlmIGN1cnJlbnQgZGF0YVR5cGUgaXMgbm9uLWF1dG8KKyAgICAgICAgaWYgKCBj
dXJyZW50ICE9PSAiKiIgKSB7CisKKyAgICAgICAgICAgIC8vIENvbnZlcnQgcmVzcG9uc2UgaWYg
cHJldiBkYXRhVHlwZSBpcyBub24tYXV0byBhbmQgZGlmZmVycyBmcm9tIGN1cnJlbnQKKyAgICAg
ICAgICAgIGlmICggcHJldiAhPT0gIioiICYmIHByZXYgIT09IGN1cnJlbnQgKSB7CisKKyAgICAg
ICAgICAgICAgICAvLyBTZWVrIGEgZGlyZWN0IGNvbnZlcnRlcgorICAgICAgICAgICAgICAgIGNv
bnYgPSBjb252ZXJ0ZXJzWyBwcmV2ICsgIiAiICsgY3VycmVudCBdIHx8IGNvbnZlcnRlcnNbICIq
ICIgKyBjdXJyZW50IF07CisKKyAgICAgICAgICAgICAgICAvLyBJZiBub25lIGZvdW5kLCBzZWVr
IGEgcGFpcgorICAgICAgICAgICAgICAgIGlmICggIWNvbnYgKSB7CisgICAgICAgICAgICAgICAg
ICAgIGZvciAoIGNvbnYyIGluIGNvbnZlcnRlcnMgKSB7CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIElmIGNvbnYyIG91dHB1dHMgY3VycmVudAorICAgICAgICAgICAgICAgICAgICAgICAg
dG1wID0gY29udjIuc3BsaXQoIiAiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdG1w
WyAxIF0gPT09IGN1cnJlbnQgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJ
ZiBwcmV2IGNhbiBiZSBjb252ZXJ0ZWQgdG8gYWNjZXB0ZWQgaW5wdXQKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb252ID0gY29udmVydGVyc1sgcHJldiArICIgIiArIHRtcFsgMCBdIF0g
fHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udmVydGVyc1sgIiogIiArIHRt
cFsgMCBdIF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBjb252ICkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDb25kZW5zZSBlcXVpdmFsZW5jZSBjb252
ZXJ0ZXJzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY29udiA9PT0gdHJ1
ZSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnYgPSBjb252ZXJ0
ZXJzWyBjb252MiBdOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE90aGVy
d2lzZSwgaW5zZXJ0IHRoZSBpbnRlcm1lZGlhdGUgZGF0YVR5cGUKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIGlmICggY29udmVydGVyc1sgY29udjIgXSAhPT0gdHJ1ZSAp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgPSB0bXBbIDAg
XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlcy5zcGxpY2Uo
IGktLSwgMCwgY3VycmVudCApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gQXBwbHkgY29u
dmVydGVyIChpZiBub3QgYW4gZXF1aXZhbGVuY2UpCisgICAgICAgICAgICAgICAgaWYgKCBjb252
ICE9PSB0cnVlICkgeworCisgICAgICAgICAgICAgICAgICAgIC8vIFVubGVzcyBlcnJvcnMgYXJl
IGFsbG93ZWQgdG8gYnViYmxlLCBjYXRjaCBhbmQgcmV0dXJuIHRoZW0KKyAgICAgICAgICAgICAg
ICAgICAgaWYgKCBjb252ICYmIHNbInRocm93cyJdICkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgcmVzcG9uc2UgPSBjb252KCByZXNwb25zZSApOworICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXNwb25zZSA9IGNvbnYoIHJlc3BvbnNlICk7CisgICAgICAgICAgICAgICAgICAg
ICAgICB9IGNhdGNoICggZSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
eyBzdGF0ZTogInBhcnNlcmVycm9yIiwgZXJyb3I6IGNvbnYgPyBlIDogIk5vIGNvbnZlcnNpb24g
ZnJvbSAiICsgcHJldiArICIgdG8gIiArIGN1cnJlbnQgfTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgLy8gVXBkYXRlIHByZXYgZm9yIG5leHQgaXRlcmF0aW9uCisg
ICAgICAgICAgICBwcmV2ID0gY3VycmVudDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVy
biB7IHN0YXRlOiAic3VjY2VzcyIsIGRhdGE6IHJlc3BvbnNlIH07Cit9Cit2YXIgb2xkQ2FsbGJh
Y2tzID0gW10sCisgICAgcnF1ZXN0aW9uID0gL1w/LywKKyAgICByanNvbnAgPSAvKD0pXD8oPz0m
fCQpfFw/XD8vLAorICAgIG5vbmNlID0galF1ZXJ5Lm5vdygpOworCisvLyBEZWZhdWx0IGpzb25w
IHNldHRpbmdzCitqUXVlcnkuYWpheFNldHVwKHsKKyAgICBqc29ucDogImNhbGxiYWNrIiwKKyAg
ICBqc29ucENhbGxiYWNrOiBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGNhbGxiYWNrID0gb2xk
Q2FsbGJhY2tzLnBvcCgpIHx8ICggalF1ZXJ5LmV4cGFuZG8gKyAiXyIgKyAoIG5vbmNlKysgKSAp
OworICAgICAgICB0aGlzWyBjYWxsYmFjayBdID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGNhbGxi
YWNrOworICAgIH0KK30pOworCisvLyBEZXRlY3QsIG5vcm1hbGl6ZSBvcHRpb25zIGFuZCBpbnN0
YWxsIGNhbGxiYWNrcyBmb3IganNvbnAgcmVxdWVzdHMKK2pRdWVyeS5hamF4UHJlZmlsdGVyKCAi
anNvbiBqc29ucCIsIGZ1bmN0aW9uKCBzLCBvcmlnaW5hbFNldHRpbmdzLCBqcVhIUiApIHsKKwor
ICAgIHZhciBjYWxsYmFja05hbWUsIG92ZXJ3cml0dGVuLCByZXNwb25zZUNvbnRhaW5lciwKKyAg
ICAgICAgZGF0YSA9IHMuZGF0YSwKKyAgICAgICAgdXJsID0gcy51cmwsCisgICAgICAgIGhhc0Nh
bGxiYWNrID0gcy5qc29ucCAhPT0gZmFsc2UsCisgICAgICAgIHJlcGxhY2VJblVybCA9IGhhc0Nh
bGxiYWNrICYmIHJqc29ucC50ZXN0KCB1cmwgKSwKKyAgICAgICAgcmVwbGFjZUluRGF0YSA9IGhh
c0NhbGxiYWNrICYmICFyZXBsYWNlSW5VcmwgJiYgdHlwZW9mIGRhdGEgPT09ICJzdHJpbmciICYm
CisgICAgICAgICAgICAhKCBzLmNvbnRlbnRUeXBlIHx8ICIiICkuaW5kZXhPZigiYXBwbGljYXRp
b24veC13d3ctZm9ybS11cmxlbmNvZGVkIikgJiYKKyAgICAgICAgICAgIHJqc29ucC50ZXN0KCBk
YXRhICk7CisKKyAgICAvLyBIYW5kbGUgaWZmIHRoZSBleHBlY3RlZCBkYXRhIHR5cGUgaXMgImpz
b25wIiBvciB3ZSBoYXZlIGEgcGFyYW1ldGVyIHRvIHNldAorICAgIGlmICggcy5kYXRhVHlwZXNb
IDAgXSA9PT0gImpzb25wIiB8fCByZXBsYWNlSW5VcmwgfHwgcmVwbGFjZUluRGF0YSApIHsKKwor
ICAgICAgICAvLyBHZXQgY2FsbGJhY2sgbmFtZSwgcmVtZW1iZXJpbmcgcHJlZXhpc3RpbmcgdmFs
dWUgYXNzb2NpYXRlZCB3aXRoIGl0CisgICAgICAgIGNhbGxiYWNrTmFtZSA9IHMuanNvbnBDYWxs
YmFjayA9IGpRdWVyeS5pc0Z1bmN0aW9uKCBzLmpzb25wQ2FsbGJhY2sgKSA/CisgICAgICAgICAg
ICBzLmpzb25wQ2FsbGJhY2soKSA6CisgICAgICAgICAgICBzLmpzb25wQ2FsbGJhY2s7CisgICAg
ICAgIG92ZXJ3cml0dGVuID0gd2luZG93WyBjYWxsYmFja05hbWUgXTsKKworICAgICAgICAvLyBJ
bnNlcnQgY2FsbGJhY2sgaW50byB1cmwgb3IgZm9ybSBkYXRhCisgICAgICAgIGlmICggcmVwbGFj
ZUluVXJsICkgeworICAgICAgICAgICAgcy51cmwgPSB1cmwucmVwbGFjZSggcmpzb25wLCAiJDEi
ICsgY2FsbGJhY2tOYW1lICk7CisgICAgICAgIH0gZWxzZSBpZiAoIHJlcGxhY2VJbkRhdGEgKSB7
CisgICAgICAgICAgICBzLmRhdGEgPSBkYXRhLnJlcGxhY2UoIHJqc29ucCwgIiQxIiArIGNhbGxi
YWNrTmFtZSApOworICAgICAgICB9IGVsc2UgaWYgKCBoYXNDYWxsYmFjayApIHsKKyAgICAgICAg
ICAgIHMudXJsICs9ICggcnF1ZXN0aW9uLnRlc3QoIHVybCApID8gIiYiIDogIj8iICkgKyBzLmpz
b25wICsgIj0iICsgY2FsbGJhY2tOYW1lOworICAgICAgICB9CisKKyAgICAgICAgLy8gVXNlIGRh
dGEgY29udmVydGVyIHRvIHJldHJpZXZlIGpzb24gYWZ0ZXIgc2NyaXB0IGV4ZWN1dGlvbgorICAg
ICAgICBzLmNvbnZlcnRlcnNbInNjcmlwdCBqc29uIl0gPSBmdW5jdGlvbigpIHsKKyAgICAgICAg
ICAgIGlmICggIXJlc3BvbnNlQ29udGFpbmVyICkgeworICAgICAgICAgICAgICAgIGpRdWVyeS5l
cnJvciggY2FsbGJhY2tOYW1lICsgIiB3YXMgbm90IGNhbGxlZCIgKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHJldHVybiByZXNwb25zZUNvbnRhaW5lclsgMCBdOworICAgICAgICB9Owor
CisgICAgICAgIC8vIGZvcmNlIGpzb24gZGF0YVR5cGUKKyAgICAgICAgcy5kYXRhVHlwZXNbIDAg
XSA9ICJqc29uIjsKKworICAgICAgICAvLyBJbnN0YWxsIGNhbGxiYWNrCisgICAgICAgIHdpbmRv
d1sgY2FsbGJhY2tOYW1lIF0gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHJlc3BvbnNlQ29u
dGFpbmVyID0gYXJndW1lbnRzOworICAgICAgICB9OworCisgICAgICAgIC8vIENsZWFuLXVwIGZ1
bmN0aW9uIChmaXJlcyBhZnRlciBjb252ZXJ0ZXJzKQorICAgICAgICBqcVhIUi5hbHdheXMoZnVu
Y3Rpb24oKSB7CisgICAgICAgICAgICAvLyBSZXN0b3JlIHByZWV4aXN0aW5nIHZhbHVlCisgICAg
ICAgICAgICB3aW5kb3dbIGNhbGxiYWNrTmFtZSBdID0gb3ZlcndyaXR0ZW47CisKKyAgICAgICAg
ICAgIC8vIFNhdmUgYmFjayBhcyBmcmVlCisgICAgICAgICAgICBpZiAoIHNbIGNhbGxiYWNrTmFt
ZSBdICkgeworICAgICAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB0aGF0IHJlLXVzaW5nIHRoZSBv
cHRpb25zIGRvZXNuJ3Qgc2NyZXcgdGhpbmdzIGFyb3VuZAorICAgICAgICAgICAgICAgIHMuanNv
bnBDYWxsYmFjayA9IG9yaWdpbmFsU2V0dGluZ3MuanNvbnBDYWxsYmFjazsKKworICAgICAgICAg
ICAgICAgIC8vIHNhdmUgdGhlIGNhbGxiYWNrIG5hbWUgZm9yIGZ1dHVyZSB1c2UKKyAgICAgICAg
ICAgICAgICBvbGRDYWxsYmFja3MucHVzaCggY2FsbGJhY2tOYW1lICk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIC8vIENhbGwgaWYgaXQgd2FzIGEgZnVuY3Rpb24gYW5kIHdlIGhhdmUg
YSByZXNwb25zZQorICAgICAgICAgICAgaWYgKCByZXNwb25zZUNvbnRhaW5lciAmJiBqUXVlcnku
aXNGdW5jdGlvbiggb3ZlcndyaXR0ZW4gKSApIHsKKyAgICAgICAgICAgICAgICBvdmVyd3JpdHRl
biggcmVzcG9uc2VDb250YWluZXJbIDAgXSApOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICByZXNwb25zZUNvbnRhaW5lciA9IG92ZXJ3cml0dGVuID0gdW5kZWZpbmVkOworICAgICAgICB9
KTsKKworICAgICAgICAvLyBEZWxlZ2F0ZSB0byBzY3JpcHQKKyAgICAgICAgcmV0dXJuICJzY3Jp
cHQiOworICAgIH0KK30pOworLy8gSW5zdGFsbCBzY3JpcHQgZGF0YVR5cGUKK2pRdWVyeS5hamF4
U2V0dXAoeworICAgIGFjY2VwdHM6IHsKKyAgICAgICAgc2NyaXB0OiAidGV4dC9qYXZhc2NyaXB0
LCBhcHBsaWNhdGlvbi9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9lY21hc2NyaXB0LCBhcHBsaWNh
dGlvbi94LWVjbWFzY3JpcHQiCisgICAgfSwKKyAgICBjb250ZW50czogeworICAgICAgICBzY3Jp
cHQ6IC9qYXZhc2NyaXB0fGVjbWFzY3JpcHQvCisgICAgfSwKKyAgICBjb252ZXJ0ZXJzOiB7Cisg
ICAgICAgICJ0ZXh0IHNjcmlwdCI6IGZ1bmN0aW9uKCB0ZXh0ICkgeworICAgICAgICAgICAgalF1
ZXJ5Lmdsb2JhbEV2YWwoIHRleHQgKTsKKyAgICAgICAgICAgIHJldHVybiB0ZXh0OworICAgICAg
ICB9CisgICAgfQorfSk7CisKKy8vIEhhbmRsZSBjYWNoZSdzIHNwZWNpYWwgY2FzZSBhbmQgZ2xv
YmFsCitqUXVlcnkuYWpheFByZWZpbHRlciggInNjcmlwdCIsIGZ1bmN0aW9uKCBzICkgeworICAg
IGlmICggcy5jYWNoZSA9PT0gdW5kZWZpbmVkICkgeworICAgICAgICBzLmNhY2hlID0gZmFsc2U7
CisgICAgfQorICAgIGlmICggcy5jcm9zc0RvbWFpbiApIHsKKyAgICAgICAgcy50eXBlID0gIkdF
VCI7CisgICAgICAgIHMuZ2xvYmFsID0gZmFsc2U7CisgICAgfQorfSk7CisKKy8vIEJpbmQgc2Ny
aXB0IHRhZyBoYWNrIHRyYW5zcG9ydAoralF1ZXJ5LmFqYXhUcmFuc3BvcnQoICJzY3JpcHQiLCBm
dW5jdGlvbihzKSB7CisKKyAgICAvLyBUaGlzIHRyYW5zcG9ydCBvbmx5IGRlYWxzIHdpdGggY3Jv
c3MgZG9tYWluIHJlcXVlc3RzCisgICAgaWYgKCBzLmNyb3NzRG9tYWluICkgeworCisgICAgICAg
IHZhciBzY3JpcHQsCisgICAgICAgICAgICBoZWFkID0gZG9jdW1lbnQuaGVhZCB8fCBkb2N1bWVu
dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggImhlYWQiIClbMF0gfHwgZG9jdW1lbnQuZG9jdW1lbnRF
bGVtZW50OworCisgICAgICAgIHJldHVybiB7CisKKyAgICAgICAgICAgIHNlbmQ6IGZ1bmN0aW9u
KCBfLCBjYWxsYmFjayApIHsKKworICAgICAgICAgICAgICAgIHNjcmlwdCA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoICJzY3JpcHQiICk7CisKKyAgICAgICAgICAgICAgICBzY3JpcHQuYXN5bmMg
PSAiYXN5bmMiOworCisgICAgICAgICAgICAgICAgaWYgKCBzLnNjcmlwdENoYXJzZXQgKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHNjcmlwdC5jaGFyc2V0ID0gcy5zY3JpcHRDaGFyc2V0OworICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHNjcmlwdC5zcmMgPSBzLnVybDsKKwor
ICAgICAgICAgICAgICAgIC8vIEF0dGFjaCBoYW5kbGVycyBmb3IgYWxsIGJyb3dzZXJzCisgICAg
ICAgICAgICAgICAgc2NyaXB0Lm9ubG9hZCA9IHNjcmlwdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBm
dW5jdGlvbiggXywgaXNBYm9ydCApIHsKKworICAgICAgICAgICAgICAgICAgICBpZiAoIGlzQWJv
cnQgfHwgIXNjcmlwdC5yZWFkeVN0YXRlIHx8IC9sb2FkZWR8Y29tcGxldGUvLnRlc3QoIHNjcmlw
dC5yZWFkeVN0YXRlICkgKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhhbmRsZSBt
ZW1vcnkgbGVhayBpbiBJRQorICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0Lm9ubG9hZCA9
IHNjcmlwdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBudWxsOworCisgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBSZW1vdmUgdGhlIHNjcmlwdAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBo
ZWFkICYmIHNjcmlwdC5wYXJlbnROb2RlICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGhlYWQucmVtb3ZlQ2hpbGQoIHNjcmlwdCApOworICAgICAgICAgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZXJlZmVyZW5jZSB0aGUgc2NyaXB0CisgICAg
ICAgICAgICAgICAgICAgICAgICBzY3JpcHQgPSB1bmRlZmluZWQ7CisKKyAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIENhbGxiYWNrIGlmIG5vdCBhYm9ydAorICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCAhaXNBYm9ydCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFj
ayggMjAwLCAic3VjY2VzcyIgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgLy8gVXNl
IGluc2VydEJlZm9yZSBpbnN0ZWFkIG9mIGFwcGVuZENoaWxkICB0byBjaXJjdW12ZW50IGFuIElF
NiBidWcuCisgICAgICAgICAgICAgICAgLy8gVGhpcyBhcmlzZXMgd2hlbiBhIGJhc2Ugbm9kZSBp
cyB1c2VkICgjMjcwOSBhbmQgIzQzNzgpLgorICAgICAgICAgICAgICAgIGhlYWQuaW5zZXJ0QmVm
b3JlKCBzY3JpcHQsIGhlYWQuZmlyc3RDaGlsZCApOworICAgICAgICAgICAgfSwKKworICAgICAg
ICAgICAgYWJvcnQ6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGlmICggc2NyaXB0ICkg
eworICAgICAgICAgICAgICAgICAgICBzY3JpcHQub25sb2FkKCAwLCAxICk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KK30pOwordmFyIHhockNh
bGxiYWNrcywKKyAgICAvLyAjNTI4MDogSW50ZXJuZXQgRXhwbG9yZXIgd2lsbCBrZWVwIGNvbm5l
Y3Rpb25zIGFsaXZlIGlmIHdlIGRvbid0IGFib3J0IG9uIHVubG9hZAorICAgIHhock9uVW5sb2Fk
QWJvcnQgPSB3aW5kb3cuQWN0aXZlWE9iamVjdCA/IGZ1bmN0aW9uKCkgeworICAgICAgICAvLyBB
Ym9ydCBhbGwgcGVuZGluZyByZXF1ZXN0cworICAgICAgICBmb3IgKCB2YXIga2V5IGluIHhockNh
bGxiYWNrcyApIHsKKyAgICAgICAgICAgIHhockNhbGxiYWNrc1sga2V5IF0oIDAsIDEgKTsKKyAg
ICAgICAgfQorICAgIH0gOiBmYWxzZSwKKyAgICB4aHJJZCA9IDA7CisKKy8vIEZ1bmN0aW9ucyB0
byBjcmVhdGUgeGhycworZnVuY3Rpb24gY3JlYXRlU3RhbmRhcmRYSFIoKSB7CisgICAgdHJ5IHsK
KyAgICAgICAgcmV0dXJuIG5ldyB3aW5kb3cuWE1MSHR0cFJlcXVlc3QoKTsKKyAgICB9IGNhdGNo
KCBlICkge30KK30KKworZnVuY3Rpb24gY3JlYXRlQWN0aXZlWEhSKCkgeworICAgIHRyeSB7Cisg
ICAgICAgIHJldHVybiBuZXcgd2luZG93LkFjdGl2ZVhPYmplY3QoICJNaWNyb3NvZnQuWE1MSFRU
UCIgKTsKKyAgICB9IGNhdGNoKCBlICkge30KK30KKworLy8gQ3JlYXRlIHRoZSByZXF1ZXN0IG9i
amVjdAorLy8gKFRoaXMgaXMgc3RpbGwgYXR0YWNoZWQgdG8gYWpheFNldHRpbmdzIGZvciBiYWNr
d2FyZCBjb21wYXRpYmlsaXR5KQoralF1ZXJ5LmFqYXhTZXR0aW5ncy54aHIgPSB3aW5kb3cuQWN0
aXZlWE9iamVjdCA/CisgICAgLyogTWljcm9zb2Z0IGZhaWxlZCB0byBwcm9wZXJseQorICAgICAq
IGltcGxlbWVudCB0aGUgWE1MSHR0cFJlcXVlc3QgaW4gSUU3IChjYW4ndCByZXF1ZXN0IGxvY2Fs
IGZpbGVzKSwKKyAgICAgKiBzbyB3ZSB1c2UgdGhlIEFjdGl2ZVhPYmplY3Qgd2hlbiBpdCBpcyBh
dmFpbGFibGUKKyAgICAgKiBBZGRpdGlvbmFsbHkgWE1MSHR0cFJlcXVlc3QgY2FuIGJlIGRpc2Fi
bGVkIGluIElFNy9JRTggc28KKyAgICAgKiB3ZSBuZWVkIGEgZmFsbGJhY2suCisgICAgICovCisg
ICAgZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiAhdGhpcy5pc0xvY2FsICYmIGNyZWF0ZVN0
YW5kYXJkWEhSKCkgfHwgY3JlYXRlQWN0aXZlWEhSKCk7CisgICAgfSA6CisgICAgLy8gRm9yIGFs
bCBvdGhlciBicm93c2VycywgdXNlIHRoZSBzdGFuZGFyZCBYTUxIdHRwUmVxdWVzdCBvYmplY3QK
KyAgICBjcmVhdGVTdGFuZGFyZFhIUjsKKworLy8gRGV0ZXJtaW5lIHN1cHBvcnQgcHJvcGVydGll
cworKGZ1bmN0aW9uKCB4aHIgKSB7CisgICAgalF1ZXJ5LmV4dGVuZCggalF1ZXJ5LnN1cHBvcnQs
IHsKKyAgICAgICAgYWpheDogISF4aHIsCisgICAgICAgIGNvcnM6ICEheGhyICYmICggIndpdGhD
cmVkZW50aWFscyIgaW4geGhyICkKKyAgICB9KTsKK30pKCBqUXVlcnkuYWpheFNldHRpbmdzLnho
cigpICk7CisKKy8vIENyZWF0ZSB0cmFuc3BvcnQgaWYgdGhlIGJyb3dzZXIgY2FuIHByb3ZpZGUg
YW4geGhyCitpZiAoIGpRdWVyeS5zdXBwb3J0LmFqYXggKSB7CisKKyAgICBqUXVlcnkuYWpheFRy
YW5zcG9ydChmdW5jdGlvbiggcyApIHsKKyAgICAgICAgLy8gQ3Jvc3MgZG9tYWluIG9ubHkgYWxs
b3dlZCBpZiBzdXBwb3J0ZWQgdGhyb3VnaCBYTUxIdHRwUmVxdWVzdAorICAgICAgICBpZiAoICFz
LmNyb3NzRG9tYWluIHx8IGpRdWVyeS5zdXBwb3J0LmNvcnMgKSB7CisKKyAgICAgICAgICAgIHZh
ciBjYWxsYmFjazsKKworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICBzZW5k
OiBmdW5jdGlvbiggaGVhZGVycywgY29tcGxldGUgKSB7CisKKyAgICAgICAgICAgICAgICAgICAg
Ly8gR2V0IGEgbmV3IHhocgorICAgICAgICAgICAgICAgICAgICB2YXIgaGFuZGxlLCBpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgeGhyID0gcy54aHIoKTsKKworICAgICAgICAgICAgICAgICAg
ICAvLyBPcGVuIHRoZSBzb2NrZXQKKyAgICAgICAgICAgICAgICAgICAgLy8gUGFzc2luZyBudWxs
IHVzZXJuYW1lLCBnZW5lcmF0ZXMgYSBsb2dpbiBwb3B1cCBvbiBPcGVyYSAoIzI4NjUpCisgICAg
ICAgICAgICAgICAgICAgIGlmICggcy51c2VybmFtZSApIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHhoci5vcGVuKCBzLnR5cGUsIHMudXJsLCBzLmFzeW5jLCBzLnVzZXJuYW1lLCBzLnBhc3N3
b3JkICk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICB4aHIub3Blbiggcy50eXBlLCBzLnVybCwgcy5hc3luYyApOworICAgICAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgLy8gQXBwbHkgY3VzdG9tIGZpZWxkcyBpZiBw
cm92aWRlZAorICAgICAgICAgICAgICAgICAgICBpZiAoIHMueGhyRmllbGRzICkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yICggaSBpbiBzLnhockZpZWxkcyApIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB4aHJbIGkgXSA9IHMueGhyRmllbGRzWyBpIF07CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
ICAgICAvLyBPdmVycmlkZSBtaW1lIHR5cGUgaWYgbmVlZGVkCisgICAgICAgICAgICAgICAgICAg
IGlmICggcy5taW1lVHlwZSAmJiB4aHIub3ZlcnJpZGVNaW1lVHlwZSApIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHhoci5vdmVycmlkZU1pbWVUeXBlKCBzLm1pbWVUeXBlICk7CisgICAgICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAvLyBYLVJlcXVlc3RlZC1XaXRo
IGhlYWRlcgorICAgICAgICAgICAgICAgICAgICAvLyBGb3IgY3Jvc3MtZG9tYWluIHJlcXVlc3Rz
LCBzZWVpbmcgYXMgY29uZGl0aW9ucyBmb3IgYSBwcmVmbGlnaHQgYXJlCisgICAgICAgICAgICAg
ICAgICAgIC8vIGFraW4gdG8gYSBqaWdzYXcgcHV6emxlLCB3ZSBzaW1wbHkgbmV2ZXIgc2V0IGl0
IHRvIGJlIHN1cmUuCisgICAgICAgICAgICAgICAgICAgIC8vIChpdCBjYW4gYWx3YXlzIGJlIHNl
dCBvbiBhIHBlci1yZXF1ZXN0IGJhc2lzIG9yIGV2ZW4gdXNpbmcgYWpheFNldHVwKQorICAgICAg
ICAgICAgICAgICAgICAvLyBGb3Igc2FtZS1kb21haW4gcmVxdWVzdHMsIHdvbid0IGNoYW5nZSBo
ZWFkZXIgaWYgYWxyZWFkeSBwcm92aWRlZC4KKyAgICAgICAgICAgICAgICAgICAgaWYgKCAhcy5j
cm9zc0RvbWFpbiAmJiAhaGVhZGVyc1siWC1SZXF1ZXN0ZWQtV2l0aCJdICkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgaGVhZGVyc1sgIlgtUmVxdWVzdGVkLVdpdGgiIF0gPSAiWE1MSHR0cFJl
cXVlc3QiOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgLy8g
TmVlZCBhbiBleHRyYSB0cnkvY2F0Y2ggZm9yIGNyb3NzIGRvbWFpbiByZXF1ZXN0cyBpbiBGaXJl
Zm94IDMKKyAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGZvciAoIGkgaW4gaGVhZGVycyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB4aHIu
c2V0UmVxdWVzdEhlYWRlciggaSwgaGVhZGVyc1sgaSBdICk7CisgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2goIF8gKSB7fQorCisgICAgICAgICAg
ICAgICAgICAgIC8vIERvIHNlbmQgdGhlIHJlcXVlc3QKKyAgICAgICAgICAgICAgICAgICAgLy8g
VGhpcyBtYXkgcmFpc2UgYW4gZXhjZXB0aW9uIHdoaWNoIGlzIGFjdHVhbGx5CisgICAgICAgICAg
ICAgICAgICAgIC8vIGhhbmRsZWQgaW4galF1ZXJ5LmFqYXggKHNvIG5vIHRyeS9jYXRjaCBoZXJl
KQorICAgICAgICAgICAgICAgICAgICB4aHIuc2VuZCggKCBzLmhhc0NvbnRlbnQgJiYgcy5kYXRh
ICkgfHwgbnVsbCApOworCisgICAgICAgICAgICAgICAgICAgIC8vIExpc3RlbmVyCisgICAgICAg
ICAgICAgICAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24oIF8sIGlzQWJvcnQgKSB7CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHZhciBzdGF0dXMsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RhdHVzVGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZUhlYWRl
cnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VzLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHhtbDsKKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmlyZWZv
eCB0aHJvd3MgZXhjZXB0aW9ucyB3aGVuIGFjY2Vzc2luZyBwcm9wZXJ0aWVzCisgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBvZiBhbiB4aHIgd2hlbiBhIG5ldHdvcmsgZXJyb3Igb2NjdXJyZWQK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGh0dHA6Ly9oZWxwZnVsLmtub2JzLWRpYWxzLmNv
bS9pbmRleC5waHAvQ29tcG9uZW50X3JldHVybmVkX2ZhaWx1cmVfY29kZTpfMHg4MDA0MDExMV8o
TlNfRVJST1JfTk9UX0FWQUlMQUJMRSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7CisK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXYXMgbmV2ZXIgY2FsbGVkIGFuZCBpcyBh
Ym9ydGVkIG9yIGNvbXBsZXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBjYWxs
YmFjayAmJiAoIGlzQWJvcnQgfHwgeGhyLnJlYWR5U3RhdGUgPT09IDQgKSApIHsKKworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBPbmx5IGNhbGxlZCBvbmNlCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gdW5kZWZpbmVkOworCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIERvIG5vdCBrZWVwIGFzIGFjdGl2ZSBhbnltb3JlCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaGFuZGxlICkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGpRdWVy
eS5ub29wOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB4aHJPblVu
bG9hZEFib3J0ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRl
bGV0ZSB4aHJDYWxsYmFja3NbIGhhbmRsZSBdOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgaXQncyBhbiBhYm9ydAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIGlzQWJvcnQgKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBBYm9ydCBpdCBtYW51YWxseSBpZiBuZWVkZWQKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggeGhyLnJlYWR5U3RhdGUgIT09IDQgKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGhyLmFib3J0KCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdGF0dXMgPSB4aHIuc3RhdHVzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmVzcG9uc2VIZWFkZXJzID0geGhyLmdldEFsbFJlc3BvbnNlSGVhZGVycygpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VzID0ge307CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB4bWwgPSB4aHIucmVzcG9uc2VYTUw7CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbnN0cnVjdCByZXNwb25zZSBsaXN0
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHhtbCAmJiB4bWwuZG9j
dW1lbnRFbGVtZW50IC8qICM0OTU4ICovICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJlc3BvbnNlcy54bWwgPSB4bWw7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IFdoZW4gcmVxdWVzdGluZyBiaW5hcnkgZGF0YSwgSUU2LTkgd2lsbCB0aHJvdyBhbiBleGNlcHRp
b24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9uIGFueSBhdHRlbXB0
IHRvIGFjY2VzcyByZXNwb25zZVRleHQgKCMxMTQyNikKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmVzcG9uc2VzLnRleHQgPSB4aHIucmVzcG9uc2VUZXh0OworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfSBjYXRjaCggZSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
RmlyZWZveCB0aHJvd3MgYW4gZXhjZXB0aW9uIHdoZW4gYWNjZXNzaW5nCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBzdGF0dXNUZXh0IGZvciBmYXVsdHkgY3Jvc3MtZG9t
YWluIHJlcXVlc3RzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c1RleHQgPSB4aHIu
c3RhdHVzVGV4dDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2go
IGUgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2Ugbm9y
bWFsaXplIHdpdGggV2Via2l0IGdpdmluZyBhbiBlbXB0eSBzdGF0dXNUZXh0CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzVGV4dCA9ICIiOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBGaWx0ZXIgc3RhdHVzIGZvciBub24gc3RhbmRhcmQgYmVoYXZpb3JzCisK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSByZXF1ZXN0IGlz
IGxvY2FsIGFuZCB3ZSBoYXZlIGRhdGE6IGFzc3VtZSBhIHN1Y2Nlc3MKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIChzdWNjZXNzIHdpdGggbm8gZGF0YSB3b24ndCBnZXQg
bm90aWZpZWQsIHRoYXQncyB0aGUgYmVzdCB3ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gY2FuIGRvIGdpdmVuIGN1cnJlbnQgaW1wbGVtZW50YXRpb25zKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhc3RhdHVzICYmIHMuaXNMb2NhbCAm
JiAhcy5jcm9zc0RvbWFpbiApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdGF0dXMgPSByZXNwb25zZXMudGV4dCA/IDIwMCA6IDQwNDsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIElFIC0gIzE0NTA6IHNvbWV0aW1lcyByZXR1cm5zIDEy
MjMgd2hlbiBpdCBzaG91bGQgYmUgMjA0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgaWYgKCBzdGF0dXMgPT09IDEyMjMgKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gMjA0OworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRj
aCggZmlyZWZveEFjY2Vzc0V4Y2VwdGlvbiApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoICFpc0Fib3J0ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21w
bGV0ZSggLTEsIGZpcmVmb3hBY2Nlc3NFeGNlcHRpb24gKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIENhbGwgY29tcGxldGUgaWYgbmVlZGVkCisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIHJlc3BvbnNlcyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0
ZSggc3RhdHVzLCBzdGF0dXNUZXh0LCByZXNwb25zZXMsIHJlc3BvbnNlSGVhZGVycyApOworICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9OworCisgICAgICAg
ICAgICAgICAgICAgIGlmICggIXMuYXN5bmMgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAv
LyBpZiB3ZSdyZSBpbiBzeW5jIG1vZGUgd2UgZmlyZSB0aGUgY2FsbGJhY2sKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNhbGxiYWNrKCk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAo
IHhoci5yZWFkeVN0YXRlID09PSA0ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gKElF
NiAmIElFNykgaWYgaXQncyBpbiBjYWNoZSBhbmQgaGFzIGJlZW4KKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIHJldHJpZXZlZCBkaXJlY3RseSB3ZSBuZWVkIHRvIGZpcmUgdGhlIGNhbGxiYWNr
CisgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCBjYWxsYmFjaywgMCApOworICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxl
ID0gKyt4aHJJZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggeGhyT25VbmxvYWRBYm9y
dCApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDcmVhdGUgdGhlIGFjdGl2ZSB4
aHJzIGNhbGxiYWNrcyBsaXN0IGlmIG5lZWRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGFuZCBhdHRhY2ggdGhlIHVubG9hZCBoYW5kbGVyCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCAheGhyQ2FsbGJhY2tzICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB4aHJDYWxsYmFja3MgPSB7fTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
alF1ZXJ5KCB3aW5kb3cgKS51bmxvYWQoIHhock9uVW5sb2FkQWJvcnQgKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWRkIHRv
IGxpc3Qgb2YgYWN0aXZlIHhocnMgY2FsbGJhY2tzCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgeGhyQ2FsbGJhY2tzWyBoYW5kbGUgXSA9IGNhbGxiYWNrOworICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9
IGNhbGxiYWNrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSwKKwor
ICAgICAgICAgICAgICAgIGFib3J0OiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKCBjYWxsYmFjayApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKDAsMSk7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
OworICAgICAgICB9CisgICAgfSk7Cit9Cit2YXIgZnhOb3csIHRpbWVySWQsCisgICAgcmZ4dHlw
ZXMgPSAvXig/OnRvZ2dsZXxzaG93fGhpZGUpJC8sCisgICAgcmZ4bnVtID0gbmV3IFJlZ0V4cCgg
Il4oPzooWy0rXSk9fCkoIiArIGNvcmVfcG51bSArICIpKFthLXolXSopJCIsICJpIiApLAorICAg
IHJydW4gPSAvcXVldWVIb29rcyQvLAorICAgIGFuaW1hdGlvblByZWZpbHRlcnMgPSBbIGRlZmF1
bHRQcmVmaWx0ZXIgXSwKKyAgICB0d2VlbmVycyA9IHsKKyAgICAgICAgIioiOiBbZnVuY3Rpb24o
IHByb3AsIHZhbHVlICkgeworICAgICAgICAgICAgdmFyIGVuZCwgdW5pdCwKKyAgICAgICAgICAg
ICAgICB0d2VlbiA9IHRoaXMuY3JlYXRlVHdlZW4oIHByb3AsIHZhbHVlICksCisgICAgICAgICAg
ICAgICAgcGFydHMgPSByZnhudW0uZXhlYyggdmFsdWUgKSwKKyAgICAgICAgICAgICAgICB0YXJn
ZXQgPSB0d2Vlbi5jdXIoKSwKKyAgICAgICAgICAgICAgICBzdGFydCA9ICt0YXJnZXQgfHwgMCwK
KyAgICAgICAgICAgICAgICBzY2FsZSA9IDEsCisgICAgICAgICAgICAgICAgbWF4SXRlcmF0aW9u
cyA9IDIwOworCisgICAgICAgICAgICBpZiAoIHBhcnRzICkgeworICAgICAgICAgICAgICAgIGVu
ZCA9ICtwYXJ0c1syXTsKKyAgICAgICAgICAgICAgICB1bml0ID0gcGFydHNbM10gfHwgKCBqUXVl
cnkuY3NzTnVtYmVyWyBwcm9wIF0gPyAiIiA6ICJweCIgKTsKKworICAgICAgICAgICAgICAgIC8v
IFdlIG5lZWQgdG8gY29tcHV0ZSBzdGFydGluZyB2YWx1ZQorICAgICAgICAgICAgICAgIGlmICgg
dW5pdCAhPT0gInB4IiAmJiBzdGFydCApIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gSXRlcmF0
aXZlbHkgYXBwcm94aW1hdGUgZnJvbSBhIG5vbnplcm8gc3RhcnRpbmcgcG9pbnQKKyAgICAgICAg
ICAgICAgICAgICAgLy8gUHJlZmVyIHRoZSBjdXJyZW50IHByb3BlcnR5LCBiZWNhdXNlIHRoaXMg
cHJvY2VzcyB3aWxsIGJlIHRyaXZpYWwgaWYgaXQgdXNlcyB0aGUgc2FtZSB1bml0cworICAgICAg
ICAgICAgICAgICAgICAvLyBGYWxsYmFjayB0byBlbmQgb3IgYSBzaW1wbGUgY29uc3RhbnQKKyAg
ICAgICAgICAgICAgICAgICAgc3RhcnQgPSBqUXVlcnkuY3NzKCB0d2Vlbi5lbGVtLCBwcm9wLCB0
cnVlICkgfHwgZW5kIHx8IDE7CisKKyAgICAgICAgICAgICAgICAgICAgZG8geworICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gSWYgcHJldmlvdXMgaXRlcmF0aW9uIHplcm9lZCBvdXQsIGRvdWJs
ZSB1bnRpbCB3ZSBnZXQgKnNvbWV0aGluZyoKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVz
ZSBhIHN0cmluZyBmb3IgZG91YmxpbmcgZmFjdG9yIHNvIHdlIGRvbid0IGFjY2lkZW50YWxseSBz
ZWUgc2NhbGUgYXMgdW5jaGFuZ2VkIGJlbG93CisgICAgICAgICAgICAgICAgICAgICAgICBzY2Fs
ZSA9IHNjYWxlIHx8ICIuNSI7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFkanVzdCBh
bmQgYXBwbHkKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gc3RhcnQgLyBzY2FsZTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5zdHlsZSggdHdlZW4uZWxlbSwgcHJvcCwg
c3RhcnQgKyB1bml0ICk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gVXBkYXRlIHNjYWxlLCB0
b2xlcmF0aW5nIHplcm8gb3IgTmFOIGZyb20gdHdlZW4uY3VyKCkKKyAgICAgICAgICAgICAgICAg
ICAgLy8gQW5kIGJyZWFraW5nIHRoZSBsb29wIGlmIHNjYWxlIGlzIHVuY2hhbmdlZCBvciBwZXJm
ZWN0LCBvciBpZiB3ZSd2ZSBqdXN0IGhhZCBlbm91Z2gKKyAgICAgICAgICAgICAgICAgICAgfSB3
aGlsZSAoIHNjYWxlICE9PSAoc2NhbGUgPSB0d2Vlbi5jdXIoKSAvIHRhcmdldCkgJiYgc2NhbGUg
IT09IDEgJiYgLS1tYXhJdGVyYXRpb25zICk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgdHdlZW4udW5pdCA9IHVuaXQ7CisgICAgICAgICAgICAgICAgdHdlZW4uc3RhcnQg
PSBzdGFydDsKKyAgICAgICAgICAgICAgICAvLyBJZiBhICs9Ly09IHRva2VuIHdhcyBwcm92aWRl
ZCwgd2UncmUgZG9pbmcgYSByZWxhdGl2ZSBhbmltYXRpb24KKyAgICAgICAgICAgICAgICB0d2Vl
bi5lbmQgPSBwYXJ0c1sxXSA/IHN0YXJ0ICsgKCBwYXJ0c1sxXSArIDEgKSAqIGVuZCA6IGVuZDsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0d2VlbjsKKyAgICAgICAgfV0KKyAg
ICB9OworCisvLyBBbmltYXRpb25zIGNyZWF0ZWQgc3luY2hyb25vdXNseSB3aWxsIHJ1biBzeW5j
aHJvbm91c2x5CitmdW5jdGlvbiBjcmVhdGVGeE5vdygpIHsKKyAgICBzZXRUaW1lb3V0KGZ1bmN0
aW9uKCkgeworICAgICAgICBmeE5vdyA9IHVuZGVmaW5lZDsKKyAgICB9LCAwICk7CisgICAgcmV0
dXJuICggZnhOb3cgPSBqUXVlcnkubm93KCkgKTsKK30KKworZnVuY3Rpb24gY3JlYXRlVHdlZW5z
KCBhbmltYXRpb24sIHByb3BzICkgeworICAgIGpRdWVyeS5lYWNoKCBwcm9wcywgZnVuY3Rpb24o
IHByb3AsIHZhbHVlICkgeworICAgICAgICB2YXIgY29sbGVjdGlvbiA9ICggdHdlZW5lcnNbIHBy
b3AgXSB8fCBbXSApLmNvbmNhdCggdHdlZW5lcnNbICIqIiBdICksCisgICAgICAgICAgICBpbmRl
eCA9IDAsCisgICAgICAgICAgICBsZW5ndGggPSBjb2xsZWN0aW9uLmxlbmd0aDsKKyAgICAgICAg
Zm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHsKKyAgICAgICAgICAgIGlmICggY29s
bGVjdGlvblsgaW5kZXggXS5jYWxsKCBhbmltYXRpb24sIHByb3AsIHZhbHVlICkgKSB7CisKKyAg
ICAgICAgICAgICAgICAvLyB3ZSdyZSBkb25lIHdpdGggdGhpcyBwcm9wZXJ0eQorICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0pOworfQorCitm
dW5jdGlvbiBBbmltYXRpb24oIGVsZW0sIHByb3BlcnRpZXMsIG9wdGlvbnMgKSB7CisgICAgdmFy
IHJlc3VsdCwKKyAgICAgICAgaW5kZXggPSAwLAorICAgICAgICB0d2VlbmVySW5kZXggPSAwLAor
ICAgICAgICBsZW5ndGggPSBhbmltYXRpb25QcmVmaWx0ZXJzLmxlbmd0aCwKKyAgICAgICAgZGVm
ZXJyZWQgPSBqUXVlcnkuRGVmZXJyZWQoKS5hbHdheXMoIGZ1bmN0aW9uKCkgeworICAgICAgICAg
ICAgLy8gZG9uJ3QgbWF0Y2ggZWxlbSBpbiB0aGUgOmFuaW1hdGVkIHNlbGVjdG9yCisgICAgICAg
ICAgICBkZWxldGUgdGljay5lbGVtOworICAgICAgICB9KSwKKyAgICAgICAgdGljayA9IGZ1bmN0
aW9uKCkgeworICAgICAgICAgICAgdmFyIGN1cnJlbnRUaW1lID0gZnhOb3cgfHwgY3JlYXRlRnhO
b3coKSwKKyAgICAgICAgICAgICAgICByZW1haW5pbmcgPSBNYXRoLm1heCggMCwgYW5pbWF0aW9u
LnN0YXJ0VGltZSArIGFuaW1hdGlvbi5kdXJhdGlvbiAtIGN1cnJlbnRUaW1lICksCisgICAgICAg
ICAgICAgICAgLy8gYXJjaGFpYyBjcmFzaCBidWcgd29uJ3QgYWxsb3cgdXMgdG8gdXNlIDEgLSAo
IDAuNSB8fCAwICkgKCMxMjQ5NykKKyAgICAgICAgICAgICAgICB0ZW1wID0gcmVtYWluaW5nIC8g
YW5pbWF0aW9uLmR1cmF0aW9uIHx8IDAsCisgICAgICAgICAgICAgICAgcGVyY2VudCA9IDEgLSB0
ZW1wLAorICAgICAgICAgICAgICAgIGluZGV4ID0gMCwKKyAgICAgICAgICAgICAgICBsZW5ndGgg
PSBhbmltYXRpb24udHdlZW5zLmxlbmd0aDsKKworICAgICAgICAgICAgZm9yICggOyBpbmRleCA8
IGxlbmd0aCA7IGluZGV4KysgKSB7CisgICAgICAgICAgICAgICAgYW5pbWF0aW9uLnR3ZWVuc1sg
aW5kZXggXS5ydW4oIHBlcmNlbnQgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZGVm
ZXJyZWQubm90aWZ5V2l0aCggZWxlbSwgWyBhbmltYXRpb24sIHBlcmNlbnQsIHJlbWFpbmluZyBd
KTsKKworICAgICAgICAgICAgaWYgKCBwZXJjZW50IDwgMSAmJiBsZW5ndGggKSB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHJlbWFpbmluZzsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uIF0gKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisg
ICAgICAgIGFuaW1hdGlvbiA9IGRlZmVycmVkLnByb21pc2UoeworICAgICAgICAgICAgZWxlbTog
ZWxlbSwKKyAgICAgICAgICAgIHByb3BzOiBqUXVlcnkuZXh0ZW5kKCB7fSwgcHJvcGVydGllcyAp
LAorICAgICAgICAgICAgb3B0czogalF1ZXJ5LmV4dGVuZCggdHJ1ZSwgeyBzcGVjaWFsRWFzaW5n
OiB7fSB9LCBvcHRpb25zICksCisgICAgICAgICAgICBvcmlnaW5hbFByb3BlcnRpZXM6IHByb3Bl
cnRpZXMsCisgICAgICAgICAgICBvcmlnaW5hbE9wdGlvbnM6IG9wdGlvbnMsCisgICAgICAgICAg
ICBzdGFydFRpbWU6IGZ4Tm93IHx8IGNyZWF0ZUZ4Tm93KCksCisgICAgICAgICAgICBkdXJhdGlv
bjogb3B0aW9ucy5kdXJhdGlvbiwKKyAgICAgICAgICAgIHR3ZWVuczogW10sCisgICAgICAgICAg
ICBjcmVhdGVUd2VlbjogZnVuY3Rpb24oIHByb3AsIGVuZCwgZWFzaW5nICkgeworICAgICAgICAg
ICAgICAgIHZhciB0d2VlbiA9IGpRdWVyeS5Ud2VlbiggZWxlbSwgYW5pbWF0aW9uLm9wdHMsIHBy
b3AsIGVuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbi5vcHRzLnNwZWNpYWxF
YXNpbmdbIHByb3AgXSB8fCBhbmltYXRpb24ub3B0cy5lYXNpbmcgKTsKKyAgICAgICAgICAgICAg
ICBhbmltYXRpb24udHdlZW5zLnB1c2goIHR3ZWVuICk7CisgICAgICAgICAgICAgICAgcmV0dXJu
IHR3ZWVuOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHN0b3A6IGZ1bmN0aW9uKCBnb3Rv
RW5kICkgeworICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IDAsCisgICAgICAgICAgICAgICAg
ICAgIC8vIGlmIHdlIGFyZSBnb2luZyB0byB0aGUgZW5kLCB3ZSB3YW50IHRvIHJ1biBhbGwgdGhl
IHR3ZWVucworICAgICAgICAgICAgICAgICAgICAvLyBvdGhlcndpc2Ugd2Ugc2tpcCB0aGlzIHBh
cnQKKyAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID0gZ290b0VuZCA/IGFuaW1hdGlvbi50d2Vl
bnMubGVuZ3RoIDogMDsKKworICAgICAgICAgICAgICAgIGZvciAoIDsgaW5kZXggPCBsZW5ndGgg
OyBpbmRleCsrICkgeworICAgICAgICAgICAgICAgICAgICBhbmltYXRpb24udHdlZW5zWyBpbmRl
eCBdLnJ1biggMSApOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIHJl
c29sdmUgd2hlbiB3ZSBwbGF5ZWQgdGhlIGxhc3QgZnJhbWUKKyAgICAgICAgICAgICAgICAvLyBv
dGhlcndpc2UsIHJlamVjdAorICAgICAgICAgICAgICAgIGlmICggZ290b0VuZCApIHsKKyAgICAg
ICAgICAgICAgICAgICAgZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCBn
b3RvRW5kIF0gKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICBkZWZlcnJlZC5yZWplY3RXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiwgZ290b0VuZCBdICk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAg
ICAgfQorICAgICAgICB9KSwKKyAgICAgICAgcHJvcHMgPSBhbmltYXRpb24ucHJvcHM7CisKKyAg
ICBwcm9wRmlsdGVyKCBwcm9wcywgYW5pbWF0aW9uLm9wdHMuc3BlY2lhbEVhc2luZyApOworCisg
ICAgZm9yICggOyBpbmRleCA8IGxlbmd0aCA7IGluZGV4KysgKSB7CisgICAgICAgIHJlc3VsdCA9
IGFuaW1hdGlvblByZWZpbHRlcnNbIGluZGV4IF0uY2FsbCggYW5pbWF0aW9uLCBlbGVtLCBwcm9w
cywgYW5pbWF0aW9uLm9wdHMgKTsKKyAgICAgICAgaWYgKCByZXN1bHQgKSB7CisgICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgfQorCisgICAgY3JlYXRlVHdlZW5zKCBh
bmltYXRpb24sIHByb3BzICk7CisKKyAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBhbmltYXRp
b24ub3B0cy5zdGFydCApICkgeworICAgICAgICBhbmltYXRpb24ub3B0cy5zdGFydC5jYWxsKCBl
bGVtLCBhbmltYXRpb24gKTsKKyAgICB9CisKKyAgICBqUXVlcnkuZngudGltZXIoCisgICAgICAg
IGpRdWVyeS5leHRlbmQoIHRpY2ssIHsKKyAgICAgICAgICAgIGFuaW06IGFuaW1hdGlvbiwKKyAg
ICAgICAgICAgIHF1ZXVlOiBhbmltYXRpb24ub3B0cy5xdWV1ZSwKKyAgICAgICAgICAgIGVsZW06
IGVsZW0KKyAgICAgICAgfSkKKyAgICApOworCisgICAgLy8gYXR0YWNoIGNhbGxiYWNrcyBmcm9t
IG9wdGlvbnMKKyAgICByZXR1cm4gYW5pbWF0aW9uLnByb2dyZXNzKCBhbmltYXRpb24ub3B0cy5w
cm9ncmVzcyApCisgICAgICAgIC5kb25lKCBhbmltYXRpb24ub3B0cy5kb25lLCBhbmltYXRpb24u
b3B0cy5jb21wbGV0ZSApCisgICAgICAgIC5mYWlsKCBhbmltYXRpb24ub3B0cy5mYWlsICkKKyAg
ICAgICAgLmFsd2F5cyggYW5pbWF0aW9uLm9wdHMuYWx3YXlzICk7Cit9CisKK2Z1bmN0aW9uIHBy
b3BGaWx0ZXIoIHByb3BzLCBzcGVjaWFsRWFzaW5nICkgeworICAgIHZhciBpbmRleCwgbmFtZSwg
ZWFzaW5nLCB2YWx1ZSwgaG9va3M7CisKKyAgICAvLyBjYW1lbENhc2UsIHNwZWNpYWxFYXNpbmcg
YW5kIGV4cGFuZCBjc3NIb29rIHBhc3MKKyAgICBmb3IgKCBpbmRleCBpbiBwcm9wcyApIHsKKyAg
ICAgICAgbmFtZSA9IGpRdWVyeS5jYW1lbENhc2UoIGluZGV4ICk7CisgICAgICAgIGVhc2luZyA9
IHNwZWNpYWxFYXNpbmdbIG5hbWUgXTsKKyAgICAgICAgdmFsdWUgPSBwcm9wc1sgaW5kZXggXTsK
KyAgICAgICAgaWYgKCBqUXVlcnkuaXNBcnJheSggdmFsdWUgKSApIHsKKyAgICAgICAgICAgIGVh
c2luZyA9IHZhbHVlWyAxIF07CisgICAgICAgICAgICB2YWx1ZSA9IHByb3BzWyBpbmRleCBdID0g
dmFsdWVbIDAgXTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggaW5kZXggIT09IG5hbWUgKSB7
CisgICAgICAgICAgICBwcm9wc1sgbmFtZSBdID0gdmFsdWU7CisgICAgICAgICAgICBkZWxldGUg
cHJvcHNbIGluZGV4IF07CisgICAgICAgIH0KKworICAgICAgICBob29rcyA9IGpRdWVyeS5jc3NI
b29rc1sgbmFtZSBdOworICAgICAgICBpZiAoIGhvb2tzICYmICJleHBhbmQiIGluIGhvb2tzICkg
eworICAgICAgICAgICAgdmFsdWUgPSBob29rcy5leHBhbmQoIHZhbHVlICk7CisgICAgICAgICAg
ICBkZWxldGUgcHJvcHNbIG5hbWUgXTsKKworICAgICAgICAgICAgLy8gbm90IHF1aXRlICQuZXh0
ZW5kLCB0aGlzIHdvbnQgb3ZlcndyaXRlIGtleXMgYWxyZWFkeSBwcmVzZW50LgorICAgICAgICAg
ICAgLy8gYWxzbyAtIHJldXNpbmcgJ2luZGV4JyBmcm9tIGFib3ZlIGJlY2F1c2Ugd2UgaGF2ZSB0
aGUgY29ycmVjdCAibmFtZSIKKyAgICAgICAgICAgIGZvciAoIGluZGV4IGluIHZhbHVlICkgewor
ICAgICAgICAgICAgICAgIGlmICggISggaW5kZXggaW4gcHJvcHMgKSApIHsKKyAgICAgICAgICAg
ICAgICAgICAgcHJvcHNbIGluZGV4IF0gPSB2YWx1ZVsgaW5kZXggXTsKKyAgICAgICAgICAgICAg
ICAgICAgc3BlY2lhbEVhc2luZ1sgaW5kZXggXSA9IGVhc2luZzsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzcGVjaWFsRWFz
aW5nWyBuYW1lIF0gPSBlYXNpbmc7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2pRdWVyeS5Bbmlt
YXRpb24gPSBqUXVlcnkuZXh0ZW5kKCBBbmltYXRpb24sIHsKKworICAgIHR3ZWVuZXI6IGZ1bmN0
aW9uKCBwcm9wcywgY2FsbGJhY2sgKSB7CisgICAgICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24o
IHByb3BzICkgKSB7CisgICAgICAgICAgICBjYWxsYmFjayA9IHByb3BzOworICAgICAgICAgICAg
cHJvcHMgPSBbICIqIiBdOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcHJvcHMgPSBw
cm9wcy5zcGxpdCgiICIpOworICAgICAgICB9CisKKyAgICAgICAgdmFyIHByb3AsCisgICAgICAg
ICAgICBpbmRleCA9IDAsCisgICAgICAgICAgICBsZW5ndGggPSBwcm9wcy5sZW5ndGg7CisKKyAg
ICAgICAgZm9yICggOyBpbmRleCA8IGxlbmd0aCA7IGluZGV4KysgKSB7CisgICAgICAgICAgICBw
cm9wID0gcHJvcHNbIGluZGV4IF07CisgICAgICAgICAgICB0d2VlbmVyc1sgcHJvcCBdID0gdHdl
ZW5lcnNbIHByb3AgXSB8fCBbXTsKKyAgICAgICAgICAgIHR3ZWVuZXJzWyBwcm9wIF0udW5zaGlm
dCggY2FsbGJhY2sgKTsKKyAgICAgICAgfQorICAgIH0sCisKKyAgICBwcmVmaWx0ZXI6IGZ1bmN0
aW9uKCBjYWxsYmFjaywgcHJlcGVuZCApIHsKKyAgICAgICAgaWYgKCBwcmVwZW5kICkgeworICAg
ICAgICAgICAgYW5pbWF0aW9uUHJlZmlsdGVycy51bnNoaWZ0KCBjYWxsYmFjayApOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgYW5pbWF0aW9uUHJlZmlsdGVycy5wdXNoKCBjYWxsYmFj
ayApOworICAgICAgICB9CisgICAgfQorfSk7CisKK2Z1bmN0aW9uIGRlZmF1bHRQcmVmaWx0ZXIo
IGVsZW0sIHByb3BzLCBvcHRzICkgeworICAgIHZhciBpbmRleCwgcHJvcCwgdmFsdWUsIGxlbmd0
aCwgZGF0YVNob3csIHRvZ2dsZSwgdHdlZW4sIGhvb2tzLCBvbGRmaXJlLAorICAgICAgICBhbmlt
ID0gdGhpcywKKyAgICAgICAgc3R5bGUgPSBlbGVtLnN0eWxlLAorICAgICAgICBvcmlnID0ge30s
CisgICAgICAgIGhhbmRsZWQgPSBbXSwKKyAgICAgICAgaGlkZGVuID0gZWxlbS5ub2RlVHlwZSAm
JiBpc0hpZGRlbiggZWxlbSApOworCisgICAgLy8gaGFuZGxlIHF1ZXVlOiBmYWxzZSBwcm9taXNl
cworICAgIGlmICggIW9wdHMucXVldWUgKSB7CisgICAgICAgIGhvb2tzID0galF1ZXJ5Ll9xdWV1
ZUhvb2tzKCBlbGVtLCAiZngiICk7CisgICAgICAgIGlmICggaG9va3MudW5xdWV1ZWQgPT0gbnVs
bCApIHsKKyAgICAgICAgICAgIGhvb2tzLnVucXVldWVkID0gMDsKKyAgICAgICAgICAgIG9sZGZp
cmUgPSBob29rcy5lbXB0eS5maXJlOworICAgICAgICAgICAgaG9va3MuZW1wdHkuZmlyZSA9IGZ1
bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGlmICggIWhvb2tzLnVucXVldWVkICkgeworICAg
ICAgICAgICAgICAgICAgICBvbGRmaXJlKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfTsKKyAgICAgICAgfQorICAgICAgICBob29rcy51bnF1ZXVlZCsrOworCisgICAgICAgIGFu
aW0uYWx3YXlzKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgLy8gZG9pbmcgdGhpcyBtYWtlcyBz
dXJlIHRoYXQgdGhlIGNvbXBsZXRlIGhhbmRsZXIgd2lsbCBiZSBjYWxsZWQKKyAgICAgICAgICAg
IC8vIGJlZm9yZSB0aGlzIGNvbXBsZXRlcworICAgICAgICAgICAgYW5pbS5hbHdheXMoZnVuY3Rp
b24oKSB7CisgICAgICAgICAgICAgICAgaG9va3MudW5xdWV1ZWQtLTsKKyAgICAgICAgICAgICAg
ICBpZiAoICFqUXVlcnkucXVldWUoIGVsZW0sICJmeCIgKS5sZW5ndGggKSB7CisgICAgICAgICAg
ICAgICAgICAgIGhvb2tzLmVtcHR5LmZpcmUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgLy8gaGVpZ2h0L3dpZHRoIG92ZXJm
bG93IHBhc3MKKyAgICBpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgJiYgKCAiaGVpZ2h0IiBpbiBw
cm9wcyB8fCAid2lkdGgiIGluIHByb3BzICkgKSB7CisgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0
IG5vdGhpbmcgc25lYWtzIG91dAorICAgICAgICAvLyBSZWNvcmQgYWxsIDMgb3ZlcmZsb3cgYXR0
cmlidXRlcyBiZWNhdXNlIElFIGRvZXMgbm90CisgICAgICAgIC8vIGNoYW5nZSB0aGUgb3ZlcmZs
b3cgYXR0cmlidXRlIHdoZW4gb3ZlcmZsb3dYIGFuZAorICAgICAgICAvLyBvdmVyZmxvd1kgYXJl
IHNldCB0byB0aGUgc2FtZSB2YWx1ZQorICAgICAgICBvcHRzLm92ZXJmbG93ID0gWyBzdHlsZS5v
dmVyZmxvdywgc3R5bGUub3ZlcmZsb3dYLCBzdHlsZS5vdmVyZmxvd1kgXTsKKworICAgICAgICAv
LyBTZXQgZGlzcGxheSBwcm9wZXJ0eSB0byBpbmxpbmUtYmxvY2sgZm9yIGhlaWdodC93aWR0aAor
ICAgICAgICAvLyBhbmltYXRpb25zIG9uIGlubGluZSBlbGVtZW50cyB0aGF0IGFyZSBoYXZpbmcg
d2lkdGgvaGVpZ2h0IGFuaW1hdGVkCisgICAgICAgIGlmICggalF1ZXJ5LmNzcyggZWxlbSwgImRp
c3BsYXkiICkgPT09ICJpbmxpbmUiICYmCisgICAgICAgICAgICAgICAgalF1ZXJ5LmNzcyggZWxl
bSwgImZsb2F0IiApID09PSAibm9uZSIgKSB7CisKKyAgICAgICAgICAgIC8vIGlubGluZS1sZXZl
bCBlbGVtZW50cyBhY2NlcHQgaW5saW5lLWJsb2NrOworICAgICAgICAgICAgLy8gYmxvY2stbGV2
ZWwgZWxlbWVudHMgbmVlZCB0byBiZSBpbmxpbmUgd2l0aCBsYXlvdXQKKyAgICAgICAgICAgIGlm
ICggIWpRdWVyeS5zdXBwb3J0LmlubGluZUJsb2NrTmVlZHNMYXlvdXQgfHwgY3NzX2RlZmF1bHRE
aXNwbGF5KCBlbGVtLm5vZGVOYW1lICkgPT09ICJpbmxpbmUiICkgeworICAgICAgICAgICAgICAg
IHN0eWxlLmRpc3BsYXkgPSAiaW5saW5lLWJsb2NrIjsKKworICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICBzdHlsZS56b29tID0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKworICAgIGlmICggb3B0cy5vdmVyZmxvdyApIHsKKyAgICAgICAgc3R5bGUub3Zl
cmZsb3cgPSAiaGlkZGVuIjsKKyAgICAgICAgaWYgKCAhalF1ZXJ5LnN1cHBvcnQuc2hyaW5rV3Jh
cEJsb2NrcyApIHsKKyAgICAgICAgICAgIGFuaW0uZG9uZShmdW5jdGlvbigpIHsKKyAgICAgICAg
ICAgICAgICBzdHlsZS5vdmVyZmxvdyA9IG9wdHMub3ZlcmZsb3dbIDAgXTsKKyAgICAgICAgICAg
ICAgICBzdHlsZS5vdmVyZmxvd1ggPSBvcHRzLm92ZXJmbG93WyAxIF07CisgICAgICAgICAgICAg
ICAgc3R5bGUub3ZlcmZsb3dZID0gb3B0cy5vdmVyZmxvd1sgMiBdOworICAgICAgICAgICAgfSk7
CisgICAgICAgIH0KKyAgICB9CisKKworICAgIC8vIHNob3cvaGlkZSBwYXNzCisgICAgZm9yICgg
aW5kZXggaW4gcHJvcHMgKSB7CisgICAgICAgIHZhbHVlID0gcHJvcHNbIGluZGV4IF07CisgICAg
ICAgIGlmICggcmZ4dHlwZXMuZXhlYyggdmFsdWUgKSApIHsKKyAgICAgICAgICAgIGRlbGV0ZSBw
cm9wc1sgaW5kZXggXTsKKyAgICAgICAgICAgIHRvZ2dsZSA9IHRvZ2dsZSB8fCB2YWx1ZSA9PT0g
InRvZ2dsZSI7CisgICAgICAgICAgICBpZiAoIHZhbHVlID09PSAoIGhpZGRlbiA/ICJoaWRlIiA6
ICJzaG93IiApICkgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgaGFuZGxlZC5wdXNoKCBpbmRleCApOworICAgICAgICB9CisgICAgfQorCisg
ICAgbGVuZ3RoID0gaGFuZGxlZC5sZW5ndGg7CisgICAgaWYgKCBsZW5ndGggKSB7CisgICAgICAg
IGRhdGFTaG93ID0galF1ZXJ5Ll9kYXRhKCBlbGVtLCAiZnhzaG93IiApIHx8IGpRdWVyeS5fZGF0
YSggZWxlbSwgImZ4c2hvdyIsIHt9ICk7CisgICAgICAgIGlmICggImhpZGRlbiIgaW4gZGF0YVNo
b3cgKSB7CisgICAgICAgICAgICBoaWRkZW4gPSBkYXRhU2hvdy5oaWRkZW47CisgICAgICAgIH0K
KworICAgICAgICAvLyBzdG9yZSBzdGF0ZSBpZiBpdHMgdG9nZ2xlIC0gZW5hYmxlcyAuc3RvcCgp
LnRvZ2dsZSgpIHRvICJyZXZlcnNlIgorICAgICAgICBpZiAoIHRvZ2dsZSApIHsKKyAgICAgICAg
ICAgIGRhdGFTaG93LmhpZGRlbiA9ICFoaWRkZW47CisgICAgICAgIH0KKyAgICAgICAgaWYgKCBo
aWRkZW4gKSB7CisgICAgICAgICAgICBqUXVlcnkoIGVsZW0gKS5zaG93KCk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBhbmltLmRvbmUoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAg
ICAgalF1ZXJ5KCBlbGVtICkuaGlkZSgpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAg
ICAgICAgYW5pbS5kb25lKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgdmFyIHByb3A7CisgICAg
ICAgICAgICBqUXVlcnkucmVtb3ZlRGF0YSggZWxlbSwgImZ4c2hvdyIsIHRydWUgKTsKKyAgICAg
ICAgICAgIGZvciAoIHByb3AgaW4gb3JpZyApIHsKKyAgICAgICAgICAgICAgICBqUXVlcnkuc3R5
bGUoIGVsZW0sIHByb3AsIG9yaWdbIHByb3AgXSApOworICAgICAgICAgICAgfQorICAgICAgICB9
KTsKKyAgICAgICAgZm9yICggaW5kZXggPSAwIDsgaW5kZXggPCBsZW5ndGggOyBpbmRleCsrICkg
eworICAgICAgICAgICAgcHJvcCA9IGhhbmRsZWRbIGluZGV4IF07CisgICAgICAgICAgICB0d2Vl
biA9IGFuaW0uY3JlYXRlVHdlZW4oIHByb3AsIGhpZGRlbiA/IGRhdGFTaG93WyBwcm9wIF0gOiAw
ICk7CisgICAgICAgICAgICBvcmlnWyBwcm9wIF0gPSBkYXRhU2hvd1sgcHJvcCBdIHx8IGpRdWVy
eS5zdHlsZSggZWxlbSwgcHJvcCApOworCisgICAgICAgICAgICBpZiAoICEoIHByb3AgaW4gZGF0
YVNob3cgKSApIHsKKyAgICAgICAgICAgICAgICBkYXRhU2hvd1sgcHJvcCBdID0gdHdlZW4uc3Rh
cnQ7CisgICAgICAgICAgICAgICAgaWYgKCBoaWRkZW4gKSB7CisgICAgICAgICAgICAgICAgICAg
IHR3ZWVuLmVuZCA9IHR3ZWVuLnN0YXJ0OworICAgICAgICAgICAgICAgICAgICB0d2Vlbi5zdGFy
dCA9IHByb3AgPT09ICJ3aWR0aCIgfHwgcHJvcCA9PT0gImhlaWdodCIgPyAxIDogMDsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Z1bmN0
aW9uIFR3ZWVuKCBlbGVtLCBvcHRpb25zLCBwcm9wLCBlbmQsIGVhc2luZyApIHsKKyAgICByZXR1
cm4gbmV3IFR3ZWVuLnByb3RvdHlwZS5pbml0KCBlbGVtLCBvcHRpb25zLCBwcm9wLCBlbmQsIGVh
c2luZyApOworfQoralF1ZXJ5LlR3ZWVuID0gVHdlZW47CisKK1R3ZWVuLnByb3RvdHlwZSA9IHsK
KyAgICBjb25zdHJ1Y3RvcjogVHdlZW4sCisgICAgaW5pdDogZnVuY3Rpb24oIGVsZW0sIG9wdGlv
bnMsIHByb3AsIGVuZCwgZWFzaW5nLCB1bml0ICkgeworICAgICAgICB0aGlzLmVsZW0gPSBlbGVt
OworICAgICAgICB0aGlzLnByb3AgPSBwcm9wOworICAgICAgICB0aGlzLmVhc2luZyA9IGVhc2lu
ZyB8fCAic3dpbmciOworICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zOworICAgICAgICB0
aGlzLnN0YXJ0ID0gdGhpcy5ub3cgPSB0aGlzLmN1cigpOworICAgICAgICB0aGlzLmVuZCA9IGVu
ZDsKKyAgICAgICAgdGhpcy51bml0ID0gdW5pdCB8fCAoIGpRdWVyeS5jc3NOdW1iZXJbIHByb3Ag
XSA/ICIiIDogInB4IiApOworICAgIH0sCisgICAgY3VyOiBmdW5jdGlvbigpIHsKKyAgICAgICAg
dmFyIGhvb2tzID0gVHdlZW4ucHJvcEhvb2tzWyB0aGlzLnByb3AgXTsKKworICAgICAgICByZXR1
cm4gaG9va3MgJiYgaG9va3MuZ2V0ID8KKyAgICAgICAgICAgIGhvb2tzLmdldCggdGhpcyApIDoK
KyAgICAgICAgICAgIFR3ZWVuLnByb3BIb29rcy5fZGVmYXVsdC5nZXQoIHRoaXMgKTsKKyAgICB9
LAorICAgIHJ1bjogZnVuY3Rpb24oIHBlcmNlbnQgKSB7CisgICAgICAgIHZhciBlYXNlZCwKKyAg
ICAgICAgICAgIGhvb2tzID0gVHdlZW4ucHJvcEhvb2tzWyB0aGlzLnByb3AgXTsKKworICAgICAg
ICBpZiAoIHRoaXMub3B0aW9ucy5kdXJhdGlvbiApIHsKKyAgICAgICAgICAgIHRoaXMucG9zID0g
ZWFzZWQgPSBqUXVlcnkuZWFzaW5nWyB0aGlzLmVhc2luZyBdKAorICAgICAgICAgICAgICAgIHBl
cmNlbnQsIHRoaXMub3B0aW9ucy5kdXJhdGlvbiAqIHBlcmNlbnQsIDAsIDEsIHRoaXMub3B0aW9u
cy5kdXJhdGlvbgorICAgICAgICAgICAgKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IHRoaXMucG9zID0gZWFzZWQgPSBwZXJjZW50OworICAgICAgICB9CisgICAgICAgIHRoaXMubm93
ID0gKCB0aGlzLmVuZCAtIHRoaXMuc3RhcnQgKSAqIGVhc2VkICsgdGhpcy5zdGFydDsKKworICAg
ICAgICBpZiAoIHRoaXMub3B0aW9ucy5zdGVwICkgeworICAgICAgICAgICAgdGhpcy5vcHRpb25z
LnN0ZXAuY2FsbCggdGhpcy5lbGVtLCB0aGlzLm5vdywgdGhpcyApOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKCBob29rcyAmJiBob29rcy5zZXQgKSB7CisgICAgICAgICAgICBob29rcy5zZXQo
IHRoaXMgKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFR3ZWVuLnByb3BIb29rcy5f
ZGVmYXVsdC5zZXQoIHRoaXMgKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpczsKKyAg
ICB9Cit9OworCitUd2Vlbi5wcm90b3R5cGUuaW5pdC5wcm90b3R5cGUgPSBUd2Vlbi5wcm90b3R5
cGU7CisKK1R3ZWVuLnByb3BIb29rcyA9IHsKKyAgICBfZGVmYXVsdDogeworICAgICAgICBnZXQ6
IGZ1bmN0aW9uKCB0d2VlbiApIHsKKyAgICAgICAgICAgIHZhciByZXN1bHQ7CisKKyAgICAgICAg
ICAgIGlmICggdHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdICE9IG51bGwgJiYKKyAgICAgICAgICAg
ICAgICAoIXR3ZWVuLmVsZW0uc3R5bGUgfHwgdHdlZW4uZWxlbS5zdHlsZVsgdHdlZW4ucHJvcCBd
ID09IG51bGwpICkgeworICAgICAgICAgICAgICAgIHJldHVybiB0d2Vlbi5lbGVtWyB0d2Vlbi5w
cm9wIF07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIHBhc3NpbmcgYW55IHZhbHVl
IGFzIGEgNHRoIHBhcmFtZXRlciB0byAuY3NzIHdpbGwgYXV0b21hdGljYWxseQorICAgICAgICAg
ICAgLy8gYXR0ZW1wdCBhIHBhcnNlRmxvYXQgYW5kIGZhbGxiYWNrIHRvIGEgc3RyaW5nIGlmIHRo
ZSBwYXJzZSBmYWlscworICAgICAgICAgICAgLy8gc28sIHNpbXBsZSB2YWx1ZXMgc3VjaCBhcyAi
MTBweCIgYXJlIHBhcnNlZCB0byBGbG9hdC4KKyAgICAgICAgICAgIC8vIGNvbXBsZXggdmFsdWVz
IHN1Y2ggYXMgInJvdGF0ZSgxcmFkKSIgYXJlIHJldHVybmVkIGFzIGlzLgorICAgICAgICAgICAg
cmVzdWx0ID0galF1ZXJ5LmNzcyggdHdlZW4uZWxlbSwgdHdlZW4ucHJvcCwgZmFsc2UsICIiICk7
CisgICAgICAgICAgICAvLyBFbXB0eSBzdHJpbmdzLCBudWxsLCB1bmRlZmluZWQgYW5kICJhdXRv
IiBhcmUgY29udmVydGVkIHRvIDAuCisgICAgICAgICAgICByZXR1cm4gIXJlc3VsdCB8fCByZXN1
bHQgPT09ICJhdXRvIiA/IDAgOiByZXN1bHQ7CisgICAgICAgIH0sCisgICAgICAgIHNldDogZnVu
Y3Rpb24oIHR3ZWVuICkgeworICAgICAgICAgICAgLy8gdXNlIHN0ZXAgaG9vayBmb3IgYmFjayBj
b21wYXQgLSB1c2UgY3NzSG9vayBpZiBpdHMgdGhlcmUgLSB1c2UgLnN0eWxlIGlmIGl0cworICAg
ICAgICAgICAgLy8gYXZhaWxhYmxlIGFuZCB1c2UgcGxhaW4gcHJvcGVydGllcyB3aGVyZSBhdmFp
bGFibGUKKyAgICAgICAgICAgIGlmICggalF1ZXJ5LmZ4LnN0ZXBbIHR3ZWVuLnByb3AgXSApIHsK
KyAgICAgICAgICAgICAgICBqUXVlcnkuZnguc3RlcFsgdHdlZW4ucHJvcCBdKCB0d2VlbiApOwor
ICAgICAgICAgICAgfSBlbHNlIGlmICggdHdlZW4uZWxlbS5zdHlsZSAmJiAoIHR3ZWVuLmVsZW0u
c3R5bGVbIGpRdWVyeS5jc3NQcm9wc1sgdHdlZW4ucHJvcCBdIF0gIT0gbnVsbCB8fCBqUXVlcnku
Y3NzSG9va3NbIHR3ZWVuLnByb3AgXSApICkgeworICAgICAgICAgICAgICAgIGpRdWVyeS5zdHls
ZSggdHdlZW4uZWxlbSwgdHdlZW4ucHJvcCwgdHdlZW4ubm93ICsgdHdlZW4udW5pdCApOworICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB0d2Vlbi5lbGVtWyB0d2Vlbi5wcm9w
IF0gPSB0d2Vlbi5ub3c7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9OworCisv
LyBSZW1vdmUgaW4gMi4wIC0gdGhpcyBzdXBwb3J0cyBJRTgncyBwYW5pYyBiYXNlZCBhcHByb2Fj
aAorLy8gdG8gc2V0dGluZyB0aGluZ3Mgb24gZGlzY29ubmVjdGVkIG5vZGVzCisKK1R3ZWVuLnBy
b3BIb29rcy5zY3JvbGxUb3AgPSBUd2Vlbi5wcm9wSG9va3Muc2Nyb2xsTGVmdCA9IHsKKyAgICBz
ZXQ6IGZ1bmN0aW9uKCB0d2VlbiApIHsKKyAgICAgICAgaWYgKCB0d2Vlbi5lbGVtLm5vZGVUeXBl
ICYmIHR3ZWVuLmVsZW0ucGFyZW50Tm9kZSApIHsKKyAgICAgICAgICAgIHR3ZWVuLmVsZW1bIHR3
ZWVuLnByb3AgXSA9IHR3ZWVuLm5vdzsKKyAgICAgICAgfQorICAgIH0KK307CisKK2pRdWVyeS5l
YWNoKFsgInRvZ2dsZSIsICJzaG93IiwgImhpZGUiIF0sIGZ1bmN0aW9uKCBpLCBuYW1lICkgewor
ICAgIHZhciBjc3NGbiA9IGpRdWVyeS5mblsgbmFtZSBdOworICAgIGpRdWVyeS5mblsgbmFtZSBd
ID0gZnVuY3Rpb24oIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICkgeworICAgICAgICByZXR1cm4g
c3BlZWQgPT0gbnVsbCB8fCB0eXBlb2Ygc3BlZWQgPT09ICJib29sZWFuIiB8fAorICAgICAgICAg
ICAgLy8gc3BlY2lhbCBjaGVjayBmb3IgLnRvZ2dsZSggaGFuZGxlciwgaGFuZGxlciwgLi4uICkK
KyAgICAgICAgICAgICggIWkgJiYgalF1ZXJ5LmlzRnVuY3Rpb24oIHNwZWVkICkgJiYgalF1ZXJ5
LmlzRnVuY3Rpb24oIGVhc2luZyApICkgPworICAgICAgICAgICAgY3NzRm4uYXBwbHkoIHRoaXMs
IGFyZ3VtZW50cyApIDoKKyAgICAgICAgICAgIHRoaXMuYW5pbWF0ZSggZ2VuRngoIG5hbWUsIHRy
dWUgKSwgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKTsKKyAgICB9OworfSk7CisKK2pRdWVyeS5m
bi5leHRlbmQoeworICAgIGZhZGVUbzogZnVuY3Rpb24oIHNwZWVkLCB0bywgZWFzaW5nLCBjYWxs
YmFjayApIHsKKworICAgICAgICAvLyBzaG93IGFueSBoaWRkZW4gZWxlbWVudHMgYWZ0ZXIgc2V0
dGluZyBvcGFjaXR5IHRvIDAKKyAgICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyKCBpc0hpZGRlbiAp
LmNzcyggIm9wYWNpdHkiLCAwICkuc2hvdygpCisKKyAgICAgICAgICAgIC8vIGFuaW1hdGUgdG8g
dGhlIHZhbHVlIHNwZWNpZmllZAorICAgICAgICAgICAgLmVuZCgpLmFuaW1hdGUoeyBvcGFjaXR5
OiB0byB9LCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApOworICAgIH0sCisgICAgYW5pbWF0ZTog
ZnVuY3Rpb24oIHByb3AsIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICkgeworICAgICAgICB2YXIg
ZW1wdHkgPSBqUXVlcnkuaXNFbXB0eU9iamVjdCggcHJvcCApLAorICAgICAgICAgICAgb3B0YWxs
ID0galF1ZXJ5LnNwZWVkKCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApLAorICAgICAgICAgICAg
ZG9BbmltYXRpb24gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAvLyBPcGVyYXRlIG9u
IGEgY29weSBvZiBwcm9wIHNvIHBlci1wcm9wZXJ0eSBlYXNpbmcgd29uJ3QgYmUgbG9zdAorICAg
ICAgICAgICAgICAgIHZhciBhbmltID0gQW5pbWF0aW9uKCB0aGlzLCBqUXVlcnkuZXh0ZW5kKCB7
fSwgcHJvcCApLCBvcHRhbGwgKTsKKworICAgICAgICAgICAgICAgIC8vIEVtcHR5IGFuaW1hdGlv
bnMgcmVzb2x2ZSBpbW1lZGlhdGVseQorICAgICAgICAgICAgICAgIGlmICggZW1wdHkgKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGFuaW0uc3RvcCggdHJ1ZSApOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH07CisKKyAgICAgICAgcmV0dXJuIGVtcHR5IHx8IG9wdGFsbC5xdWV1ZSA9
PT0gZmFsc2UgPworICAgICAgICAgICAgdGhpcy5lYWNoKCBkb0FuaW1hdGlvbiApIDoKKyAgICAg
ICAgICAgIHRoaXMucXVldWUoIG9wdGFsbC5xdWV1ZSwgZG9BbmltYXRpb24gKTsKKyAgICB9LAor
ICAgIHN0b3A6IGZ1bmN0aW9uKCB0eXBlLCBjbGVhclF1ZXVlLCBnb3RvRW5kICkgeworICAgICAg
ICB2YXIgc3RvcFF1ZXVlID0gZnVuY3Rpb24oIGhvb2tzICkgeworICAgICAgICAgICAgdmFyIHN0
b3AgPSBob29rcy5zdG9wOworICAgICAgICAgICAgZGVsZXRlIGhvb2tzLnN0b3A7CisgICAgICAg
ICAgICBzdG9wKCBnb3RvRW5kICk7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKCB0eXBlb2Yg
dHlwZSAhPT0gInN0cmluZyIgKSB7CisgICAgICAgICAgICBnb3RvRW5kID0gY2xlYXJRdWV1ZTsK
KyAgICAgICAgICAgIGNsZWFyUXVldWUgPSB0eXBlOworICAgICAgICAgICAgdHlwZSA9IHVuZGVm
aW5lZDsKKyAgICAgICAgfQorICAgICAgICBpZiAoIGNsZWFyUXVldWUgJiYgdHlwZSAhPT0gZmFs
c2UgKSB7CisgICAgICAgICAgICB0aGlzLnF1ZXVlKCB0eXBlIHx8ICJmeCIsIFtdICk7CisgICAg
ICAgIH0KKworICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkgeworICAgICAgICAg
ICAgdmFyIGRlcXVldWUgPSB0cnVlLAorICAgICAgICAgICAgICAgIGluZGV4ID0gdHlwZSAhPSBu
dWxsICYmIHR5cGUgKyAicXVldWVIb29rcyIsCisgICAgICAgICAgICAgICAgdGltZXJzID0galF1
ZXJ5LnRpbWVycywKKyAgICAgICAgICAgICAgICBkYXRhID0galF1ZXJ5Ll9kYXRhKCB0aGlzICk7
CisKKyAgICAgICAgICAgIGlmICggaW5kZXggKSB7CisgICAgICAgICAgICAgICAgaWYgKCBkYXRh
WyBpbmRleCBdICYmIGRhdGFbIGluZGV4IF0uc3RvcCApIHsKKyAgICAgICAgICAgICAgICAgICAg
c3RvcFF1ZXVlKCBkYXRhWyBpbmRleCBdICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBmb3IgKCBpbmRleCBpbiBkYXRhICkgeworICAg
ICAgICAgICAgICAgICAgICBpZiAoIGRhdGFbIGluZGV4IF0gJiYgZGF0YVsgaW5kZXggXS5zdG9w
ICYmIHJydW4udGVzdCggaW5kZXggKSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0b3BR
dWV1ZSggZGF0YVsgaW5kZXggXSApOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKCBpbmRleCA9IHRpbWVy
cy5sZW5ndGg7IGluZGV4LS07ICkgeworICAgICAgICAgICAgICAgIGlmICggdGltZXJzWyBpbmRl
eCBdLmVsZW0gPT09IHRoaXMgJiYgKHR5cGUgPT0gbnVsbCB8fCB0aW1lcnNbIGluZGV4IF0ucXVl
dWUgPT09IHR5cGUpICkgeworICAgICAgICAgICAgICAgICAgICB0aW1lcnNbIGluZGV4IF0uYW5p
bS5zdG9wKCBnb3RvRW5kICk7CisgICAgICAgICAgICAgICAgICAgIGRlcXVldWUgPSBmYWxzZTsK
KyAgICAgICAgICAgICAgICAgICAgdGltZXJzLnNwbGljZSggaW5kZXgsIDEgKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIHN0YXJ0IHRoZSBuZXh0
IGluIHRoZSBxdWV1ZSBpZiB0aGUgbGFzdCBzdGVwIHdhc24ndCBmb3JjZWQKKyAgICAgICAgICAg
IC8vIHRpbWVycyBjdXJyZW50bHkgd2lsbCBjYWxsIHRoZWlyIGNvbXBsZXRlIGNhbGxiYWNrcywg
d2hpY2ggd2lsbCBkZXF1ZXVlCisgICAgICAgICAgICAvLyBidXQgb25seSBpZiB0aGV5IHdlcmUg
Z290b0VuZAorICAgICAgICAgICAgaWYgKCBkZXF1ZXVlIHx8ICFnb3RvRW5kICkgeworICAgICAg
ICAgICAgICAgIGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCB0eXBlICk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0pOworICAgIH0KK30pOworCisvLyBHZW5lcmF0ZSBwYXJhbWV0ZXJzIHRvIGNyZWF0
ZSBhIHN0YW5kYXJkIGFuaW1hdGlvbgorZnVuY3Rpb24gZ2VuRngoIHR5cGUsIGluY2x1ZGVXaWR0
aCApIHsKKyAgICB2YXIgd2hpY2gsCisgICAgICAgIGF0dHJzID0geyBoZWlnaHQ6IHR5cGUgfSwK
KyAgICAgICAgaSA9IDA7CisKKyAgICAvLyBpZiB3ZSBpbmNsdWRlIHdpZHRoLCBzdGVwIHZhbHVl
IGlzIDEgdG8gZG8gYWxsIGNzc0V4cGFuZCB2YWx1ZXMsCisgICAgLy8gaWYgd2UgZG9uJ3QgaW5j
bHVkZSB3aWR0aCwgc3RlcCB2YWx1ZSBpcyAyIHRvIHNraXAgb3ZlciBMZWZ0IGFuZCBSaWdodAor
ICAgIGluY2x1ZGVXaWR0aCA9IGluY2x1ZGVXaWR0aD8gMSA6IDA7CisgICAgZm9yKCA7IGkgPCA0
IDsgaSArPSAyIC0gaW5jbHVkZVdpZHRoICkgeworICAgICAgICB3aGljaCA9IGNzc0V4cGFuZFsg
aSBdOworICAgICAgICBhdHRyc1sgIm1hcmdpbiIgKyB3aGljaCBdID0gYXR0cnNbICJwYWRkaW5n
IiArIHdoaWNoIF0gPSB0eXBlOworICAgIH0KKworICAgIGlmICggaW5jbHVkZVdpZHRoICkgewor
ICAgICAgICBhdHRycy5vcGFjaXR5ID0gYXR0cnMud2lkdGggPSB0eXBlOworICAgIH0KKworICAg
IHJldHVybiBhdHRyczsKK30KKworLy8gR2VuZXJhdGUgc2hvcnRjdXRzIGZvciBjdXN0b20gYW5p
bWF0aW9ucworalF1ZXJ5LmVhY2goeworICAgIHNsaWRlRG93bjogZ2VuRngoInNob3ciKSwKKyAg
ICBzbGlkZVVwOiBnZW5GeCgiaGlkZSIpLAorICAgIHNsaWRlVG9nZ2xlOiBnZW5GeCgidG9nZ2xl
IiksCisgICAgZmFkZUluOiB7IG9wYWNpdHk6ICJzaG93IiB9LAorICAgIGZhZGVPdXQ6IHsgb3Bh
Y2l0eTogImhpZGUiIH0sCisgICAgZmFkZVRvZ2dsZTogeyBvcGFjaXR5OiAidG9nZ2xlIiB9Cit9
LCBmdW5jdGlvbiggbmFtZSwgcHJvcHMgKSB7CisgICAgalF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5j
dGlvbiggc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSB7CisgICAgICAgIHJldHVybiB0aGlzLmFu
aW1hdGUoIHByb3BzLCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApOworICAgIH07Cit9KTsKKwor
alF1ZXJ5LnNwZWVkID0gZnVuY3Rpb24oIHNwZWVkLCBlYXNpbmcsIGZuICkgeworICAgIHZhciBv
cHQgPSBzcGVlZCAmJiB0eXBlb2Ygc3BlZWQgPT09ICJvYmplY3QiID8galF1ZXJ5LmV4dGVuZCgg
e30sIHNwZWVkICkgOiB7CisgICAgICAgIGNvbXBsZXRlOiBmbiB8fCAhZm4gJiYgZWFzaW5nIHx8
CisgICAgICAgICAgICBqUXVlcnkuaXNGdW5jdGlvbiggc3BlZWQgKSAmJiBzcGVlZCwKKyAgICAg
ICAgZHVyYXRpb246IHNwZWVkLAorICAgICAgICBlYXNpbmc6IGZuICYmIGVhc2luZyB8fCBlYXNp
bmcgJiYgIWpRdWVyeS5pc0Z1bmN0aW9uKCBlYXNpbmcgKSAmJiBlYXNpbmcKKyAgICB9OworCisg
ICAgb3B0LmR1cmF0aW9uID0galF1ZXJ5LmZ4Lm9mZiA/IDAgOiB0eXBlb2Ygb3B0LmR1cmF0aW9u
ID09PSAibnVtYmVyIiA/IG9wdC5kdXJhdGlvbiA6CisgICAgICAgIG9wdC5kdXJhdGlvbiBpbiBq
UXVlcnkuZnguc3BlZWRzID8galF1ZXJ5LmZ4LnNwZWVkc1sgb3B0LmR1cmF0aW9uIF0gOiBqUXVl
cnkuZnguc3BlZWRzLl9kZWZhdWx0OworCisgICAgLy8gbm9ybWFsaXplIG9wdC5xdWV1ZSAtIHRy
dWUvdW5kZWZpbmVkL251bGwgLT4gImZ4IgorICAgIGlmICggb3B0LnF1ZXVlID09IG51bGwgfHwg
b3B0LnF1ZXVlID09PSB0cnVlICkgeworICAgICAgICBvcHQucXVldWUgPSAiZngiOworICAgIH0K
KworICAgIC8vIFF1ZXVlaW5nCisgICAgb3B0Lm9sZCA9IG9wdC5jb21wbGV0ZTsKKworICAgIG9w
dC5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9u
KCBvcHQub2xkICkgKSB7CisgICAgICAgICAgICBvcHQub2xkLmNhbGwoIHRoaXMgKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmICggb3B0LnF1ZXVlICkgeworICAgICAgICAgICAgalF1ZXJ5LmRl
cXVldWUoIHRoaXMsIG9wdC5xdWV1ZSApOworICAgICAgICB9CisgICAgfTsKKworICAgIHJldHVy
biBvcHQ7Cit9OworCitqUXVlcnkuZWFzaW5nID0geworICAgIGxpbmVhcjogZnVuY3Rpb24oIHAg
KSB7CisgICAgICAgIHJldHVybiBwOworICAgIH0sCisgICAgc3dpbmc6IGZ1bmN0aW9uKCBwICkg
eworICAgICAgICByZXR1cm4gMC41IC0gTWF0aC5jb3MoIHAqTWF0aC5QSSApIC8gMjsKKyAgICB9
Cit9OworCitqUXVlcnkudGltZXJzID0gW107CitqUXVlcnkuZnggPSBUd2Vlbi5wcm90b3R5cGUu
aW5pdDsKK2pRdWVyeS5meC50aWNrID0gZnVuY3Rpb24oKSB7CisgICAgdmFyIHRpbWVyLAorICAg
ICAgICB0aW1lcnMgPSBqUXVlcnkudGltZXJzLAorICAgICAgICBpID0gMDsKKworICAgIGZ4Tm93
ID0galF1ZXJ5Lm5vdygpOworCisgICAgZm9yICggOyBpIDwgdGltZXJzLmxlbmd0aDsgaSsrICkg
eworICAgICAgICB0aW1lciA9IHRpbWVyc1sgaSBdOworICAgICAgICAvLyBDaGVja3MgdGhlIHRp
bWVyIGhhcyBub3QgYWxyZWFkeSBiZWVuIHJlbW92ZWQKKyAgICAgICAgaWYgKCAhdGltZXIoKSAm
JiB0aW1lcnNbIGkgXSA9PT0gdGltZXIgKSB7CisgICAgICAgICAgICB0aW1lcnMuc3BsaWNlKCBp
LS0sIDEgKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICggIXRpbWVycy5sZW5ndGggKSB7
CisgICAgICAgIGpRdWVyeS5meC5zdG9wKCk7CisgICAgfQorICAgIGZ4Tm93ID0gdW5kZWZpbmVk
OworfTsKKworalF1ZXJ5LmZ4LnRpbWVyID0gZnVuY3Rpb24oIHRpbWVyICkgeworICAgIGlmICgg
dGltZXIoKSAmJiBqUXVlcnkudGltZXJzLnB1c2goIHRpbWVyICkgJiYgIXRpbWVySWQgKSB7Cisg
ICAgICAgIHRpbWVySWQgPSBzZXRJbnRlcnZhbCggalF1ZXJ5LmZ4LnRpY2ssIGpRdWVyeS5meC5p
bnRlcnZhbCApOworICAgIH0KK307CisKK2pRdWVyeS5meC5pbnRlcnZhbCA9IDEzOworCitqUXVl
cnkuZnguc3RvcCA9IGZ1bmN0aW9uKCkgeworICAgIGNsZWFySW50ZXJ2YWwoIHRpbWVySWQgKTsK
KyAgICB0aW1lcklkID0gbnVsbDsKK307CisKK2pRdWVyeS5meC5zcGVlZHMgPSB7CisgICAgc2xv
dzogNjAwLAorICAgIGZhc3Q6IDIwMCwKKyAgICAvLyBEZWZhdWx0IHNwZWVkCisgICAgX2RlZmF1
bHQ6IDQwMAorfTsKKworLy8gQmFjayBDb21wYXQgPDEuOCBleHRlbnNpb24gcG9pbnQKK2pRdWVy
eS5meC5zdGVwID0ge307CisKK2lmICggalF1ZXJ5LmV4cHIgJiYgalF1ZXJ5LmV4cHIuZmlsdGVy
cyApIHsKKyAgICBqUXVlcnkuZXhwci5maWx0ZXJzLmFuaW1hdGVkID0gZnVuY3Rpb24oIGVsZW0g
KSB7CisgICAgICAgIHJldHVybiBqUXVlcnkuZ3JlcChqUXVlcnkudGltZXJzLCBmdW5jdGlvbigg
Zm4gKSB7CisgICAgICAgICAgICByZXR1cm4gZWxlbSA9PT0gZm4uZWxlbTsKKyAgICAgICAgfSku
bGVuZ3RoOworICAgIH07Cit9Cit2YXIgcnJvb3QgPSAvXig/OmJvZHl8aHRtbCkkL2k7CisKK2pR
dWVyeS5mbi5vZmZzZXQgPSBmdW5jdGlvbiggb3B0aW9ucyApIHsKKyAgICBpZiAoIGFyZ3VtZW50
cy5sZW5ndGggKSB7CisgICAgICAgIHJldHVybiBvcHRpb25zID09PSB1bmRlZmluZWQgPworICAg
ICAgICAgICAgdGhpcyA6CisgICAgICAgICAgICB0aGlzLmVhY2goZnVuY3Rpb24oIGkgKSB7Cisg
ICAgICAgICAgICAgICAgalF1ZXJ5Lm9mZnNldC5zZXRPZmZzZXQoIHRoaXMsIG9wdGlvbnMsIGkg
KTsKKyAgICAgICAgICAgIH0pOworICAgIH0KKworICAgIHZhciBkb2NFbGVtLCBib2R5LCB3aW4s
IGNsaWVudFRvcCwgY2xpZW50TGVmdCwgc2Nyb2xsVG9wLCBzY3JvbGxMZWZ0LAorICAgICAgICBi
b3ggPSB7IHRvcDogMCwgbGVmdDogMCB9LAorICAgICAgICBlbGVtID0gdGhpc1sgMCBdLAorICAg
ICAgICBkb2MgPSBlbGVtICYmIGVsZW0ub3duZXJEb2N1bWVudDsKKworICAgIGlmICggIWRvYyAp
IHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICggKGJvZHkgPSBkb2MuYm9keSkg
PT09IGVsZW0gKSB7CisgICAgICAgIHJldHVybiBqUXVlcnkub2Zmc2V0LmJvZHlPZmZzZXQoIGVs
ZW0gKTsKKyAgICB9CisKKyAgICBkb2NFbGVtID0gZG9jLmRvY3VtZW50RWxlbWVudDsKKworICAg
IC8vIE1ha2Ugc3VyZSBpdCdzIG5vdCBhIGRpc2Nvbm5lY3RlZCBET00gbm9kZQorICAgIGlmICgg
IWpRdWVyeS5jb250YWlucyggZG9jRWxlbSwgZWxlbSApICkgeworICAgICAgICByZXR1cm4gYm94
OworICAgIH0KKworICAgIC8vIElmIHdlIGRvbid0IGhhdmUgZ0JDUiwganVzdCB1c2UgMCwwIHJh
dGhlciB0aGFuIGVycm9yCisgICAgLy8gQmxhY2tCZXJyeSA1LCBpT1MgMyAob3JpZ2luYWwgaVBo
b25lKQorICAgIGlmICggdHlwZW9mIGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0ICE9PSAidW5k
ZWZpbmVkIiApIHsKKyAgICAgICAgYm94ID0gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsK
KyAgICB9CisgICAgd2luID0gZ2V0V2luZG93KCBkb2MgKTsKKyAgICBjbGllbnRUb3AgID0gZG9j
RWxlbS5jbGllbnRUb3AgIHx8IGJvZHkuY2xpZW50VG9wICB8fCAwOworICAgIGNsaWVudExlZnQg
PSBkb2NFbGVtLmNsaWVudExlZnQgfHwgYm9keS5jbGllbnRMZWZ0IHx8IDA7CisgICAgc2Nyb2xs
VG9wICA9IHdpbi5wYWdlWU9mZnNldCB8fCBkb2NFbGVtLnNjcm9sbFRvcDsKKyAgICBzY3JvbGxM
ZWZ0ID0gd2luLnBhZ2VYT2Zmc2V0IHx8IGRvY0VsZW0uc2Nyb2xsTGVmdDsKKyAgICByZXR1cm4g
eworICAgICAgICB0b3A6IGJveC50b3AgICsgc2Nyb2xsVG9wICAtIGNsaWVudFRvcCwKKyAgICAg
ICAgbGVmdDogYm94LmxlZnQgKyBzY3JvbGxMZWZ0IC0gY2xpZW50TGVmdAorICAgIH07Cit9Owor
CitqUXVlcnkub2Zmc2V0ID0geworCisgICAgYm9keU9mZnNldDogZnVuY3Rpb24oIGJvZHkgKSB7
CisgICAgICAgIHZhciB0b3AgPSBib2R5Lm9mZnNldFRvcCwKKyAgICAgICAgICAgIGxlZnQgPSBi
b2R5Lm9mZnNldExlZnQ7CisKKyAgICAgICAgaWYgKCBqUXVlcnkuc3VwcG9ydC5kb2VzTm90SW5j
bHVkZU1hcmdpbkluQm9keU9mZnNldCApIHsKKyAgICAgICAgICAgIHRvcCAgKz0gcGFyc2VGbG9h
dCggalF1ZXJ5LmNzcyhib2R5LCAibWFyZ2luVG9wIikgKSB8fCAwOworICAgICAgICAgICAgbGVm
dCArPSBwYXJzZUZsb2F0KCBqUXVlcnkuY3NzKGJvZHksICJtYXJnaW5MZWZ0IikgKSB8fCAwOwor
ICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHsgdG9wOiB0b3AsIGxlZnQ6IGxlZnQgfTsKKyAg
ICB9LAorCisgICAgc2V0T2Zmc2V0OiBmdW5jdGlvbiggZWxlbSwgb3B0aW9ucywgaSApIHsKKyAg
ICAgICAgdmFyIHBvc2l0aW9uID0galF1ZXJ5LmNzcyggZWxlbSwgInBvc2l0aW9uIiApOworCisg
ICAgICAgIC8vIHNldCBwb3NpdGlvbiBmaXJzdCwgaW4tY2FzZSB0b3AvbGVmdCBhcmUgc2V0IGV2
ZW4gb24gc3RhdGljIGVsZW0KKyAgICAgICAgaWYgKCBwb3NpdGlvbiA9PT0gInN0YXRpYyIgKSB7
CisgICAgICAgICAgICBlbGVtLnN0eWxlLnBvc2l0aW9uID0gInJlbGF0aXZlIjsKKyAgICAgICAg
fQorCisgICAgICAgIHZhciBjdXJFbGVtID0galF1ZXJ5KCBlbGVtICksCisgICAgICAgICAgICBj
dXJPZmZzZXQgPSBjdXJFbGVtLm9mZnNldCgpLAorICAgICAgICAgICAgY3VyQ1NTVG9wID0galF1
ZXJ5LmNzcyggZWxlbSwgInRvcCIgKSwKKyAgICAgICAgICAgIGN1ckNTU0xlZnQgPSBqUXVlcnku
Y3NzKCBlbGVtLCAibGVmdCIgKSwKKyAgICAgICAgICAgIGNhbGN1bGF0ZVBvc2l0aW9uID0gKCBw
b3NpdGlvbiA9PT0gImFic29sdXRlIiB8fCBwb3NpdGlvbiA9PT0gImZpeGVkIiApICYmIGpRdWVy
eS5pbkFycmF5KCJhdXRvIiwgW2N1ckNTU1RvcCwgY3VyQ1NTTGVmdF0pID4gLTEsCisgICAgICAg
ICAgICBwcm9wcyA9IHt9LCBjdXJQb3NpdGlvbiA9IHt9LCBjdXJUb3AsIGN1ckxlZnQ7CisKKyAg
ICAgICAgLy8gbmVlZCB0byBiZSBhYmxlIHRvIGNhbGN1bGF0ZSBwb3NpdGlvbiBpZiBlaXRoZXIg
dG9wIG9yIGxlZnQgaXMgYXV0byBhbmQgcG9zaXRpb24gaXMgZWl0aGVyIGFic29sdXRlIG9yIGZp
eGVkCisgICAgICAgIGlmICggY2FsY3VsYXRlUG9zaXRpb24gKSB7CisgICAgICAgICAgICBjdXJQ
b3NpdGlvbiA9IGN1ckVsZW0ucG9zaXRpb24oKTsKKyAgICAgICAgICAgIGN1clRvcCA9IGN1clBv
c2l0aW9uLnRvcDsKKyAgICAgICAgICAgIGN1ckxlZnQgPSBjdXJQb3NpdGlvbi5sZWZ0OworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgY3VyVG9wID0gcGFyc2VGbG9hdCggY3VyQ1NTVG9w
ICkgfHwgMDsKKyAgICAgICAgICAgIGN1ckxlZnQgPSBwYXJzZUZsb2F0KCBjdXJDU1NMZWZ0ICkg
fHwgMDsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIG9wdGlv
bnMgKSApIHsKKyAgICAgICAgICAgIG9wdGlvbnMgPSBvcHRpb25zLmNhbGwoIGVsZW0sIGksIGN1
ck9mZnNldCApOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCBvcHRpb25zLnRvcCAhPSBudWxs
ICkgeworICAgICAgICAgICAgcHJvcHMudG9wID0gKCBvcHRpb25zLnRvcCAtIGN1ck9mZnNldC50
b3AgKSArIGN1clRvcDsKKyAgICAgICAgfQorICAgICAgICBpZiAoIG9wdGlvbnMubGVmdCAhPSBu
dWxsICkgeworICAgICAgICAgICAgcHJvcHMubGVmdCA9ICggb3B0aW9ucy5sZWZ0IC0gY3VyT2Zm
c2V0LmxlZnQgKSArIGN1ckxlZnQ7CisgICAgICAgIH0KKworICAgICAgICBpZiAoICJ1c2luZyIg
aW4gb3B0aW9ucyApIHsKKyAgICAgICAgICAgIG9wdGlvbnMudXNpbmcuY2FsbCggZWxlbSwgcHJv
cHMgKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGN1ckVsZW0uY3NzKCBwcm9wcyAp
OworICAgICAgICB9CisgICAgfQorfTsKKworCitqUXVlcnkuZm4uZXh0ZW5kKHsKKworICAgIHBv
c2l0aW9uOiBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKCAhdGhpc1swXSApIHsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBlbGVtID0gdGhpc1swXSwKKwor
ICAgICAgICAvLyBHZXQgKnJlYWwqIG9mZnNldFBhcmVudAorICAgICAgICBvZmZzZXRQYXJlbnQg
PSB0aGlzLm9mZnNldFBhcmVudCgpLAorCisgICAgICAgIC8vIEdldCBjb3JyZWN0IG9mZnNldHMK
KyAgICAgICAgb2Zmc2V0ICAgICAgID0gdGhpcy5vZmZzZXQoKSwKKyAgICAgICAgcGFyZW50T2Zm
c2V0ID0gcnJvb3QudGVzdChvZmZzZXRQYXJlbnRbMF0ubm9kZU5hbWUpID8geyB0b3A6IDAsIGxl
ZnQ6IDAgfSA6IG9mZnNldFBhcmVudC5vZmZzZXQoKTsKKworICAgICAgICAvLyBTdWJ0cmFjdCBl
bGVtZW50IG1hcmdpbnMKKyAgICAgICAgLy8gbm90ZTogd2hlbiBhbiBlbGVtZW50IGhhcyBtYXJn
aW46IGF1dG8gdGhlIG9mZnNldExlZnQgYW5kIG1hcmdpbkxlZnQKKyAgICAgICAgLy8gYXJlIHRo
ZSBzYW1lIGluIFNhZmFyaSBjYXVzaW5nIG9mZnNldC5sZWZ0IHRvIGluY29ycmVjdGx5IGJlIDAK
KyAgICAgICAgb2Zmc2V0LnRvcCAgLT0gcGFyc2VGbG9hdCggalF1ZXJ5LmNzcyhlbGVtLCAibWFy
Z2luVG9wIikgKSB8fCAwOworICAgICAgICBvZmZzZXQubGVmdCAtPSBwYXJzZUZsb2F0KCBqUXVl
cnkuY3NzKGVsZW0sICJtYXJnaW5MZWZ0IikgKSB8fCAwOworCisgICAgICAgIC8vIEFkZCBvZmZz
ZXRQYXJlbnQgYm9yZGVycworICAgICAgICBwYXJlbnRPZmZzZXQudG9wICArPSBwYXJzZUZsb2F0
KCBqUXVlcnkuY3NzKG9mZnNldFBhcmVudFswXSwgImJvcmRlclRvcFdpZHRoIikgKSB8fCAwOwor
ICAgICAgICBwYXJlbnRPZmZzZXQubGVmdCArPSBwYXJzZUZsb2F0KCBqUXVlcnkuY3NzKG9mZnNl
dFBhcmVudFswXSwgImJvcmRlckxlZnRXaWR0aCIpICkgfHwgMDsKKworICAgICAgICAvLyBTdWJ0
cmFjdCB0aGUgdHdvIG9mZnNldHMKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgIHRvcDog
IG9mZnNldC50b3AgIC0gcGFyZW50T2Zmc2V0LnRvcCwKKyAgICAgICAgICAgIGxlZnQ6IG9mZnNl
dC5sZWZ0IC0gcGFyZW50T2Zmc2V0LmxlZnQKKyAgICAgICAgfTsKKyAgICB9LAorCisgICAgb2Zm
c2V0UGFyZW50OiBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9u
KCkgeworICAgICAgICAgICAgdmFyIG9mZnNldFBhcmVudCA9IHRoaXMub2Zmc2V0UGFyZW50IHx8
IGRvY3VtZW50LmJvZHk7CisgICAgICAgICAgICB3aGlsZSAoIG9mZnNldFBhcmVudCAmJiAoIXJy
b290LnRlc3Qob2Zmc2V0UGFyZW50Lm5vZGVOYW1lKSAmJiBqUXVlcnkuY3NzKG9mZnNldFBhcmVu
dCwgInBvc2l0aW9uIikgPT09ICJzdGF0aWMiKSApIHsKKyAgICAgICAgICAgICAgICBvZmZzZXRQ
YXJlbnQgPSBvZmZzZXRQYXJlbnQub2Zmc2V0UGFyZW50OworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgcmV0dXJuIG9mZnNldFBhcmVudCB8fCBkb2N1bWVudC5ib2R5OworICAgICAgICB9KTsK
KyAgICB9Cit9KTsKKworCisvLyBDcmVhdGUgc2Nyb2xsTGVmdCBhbmQgc2Nyb2xsVG9wIG1ldGhv
ZHMKK2pRdWVyeS5lYWNoKCB7c2Nyb2xsTGVmdDogInBhZ2VYT2Zmc2V0Iiwgc2Nyb2xsVG9wOiAi
cGFnZVlPZmZzZXQifSwgZnVuY3Rpb24oIG1ldGhvZCwgcHJvcCApIHsKKyAgICB2YXIgdG9wID0g
L1kvLnRlc3QoIHByb3AgKTsKKworICAgIGpRdWVyeS5mblsgbWV0aG9kIF0gPSBmdW5jdGlvbigg
dmFsICkgeworICAgICAgICByZXR1cm4galF1ZXJ5LmFjY2VzcyggdGhpcywgZnVuY3Rpb24oIGVs
ZW0sIG1ldGhvZCwgdmFsICkgeworICAgICAgICAgICAgdmFyIHdpbiA9IGdldFdpbmRvdyggZWxl
bSApOworCisgICAgICAgICAgICBpZiAoIHZhbCA9PT0gdW5kZWZpbmVkICkgeworICAgICAgICAg
ICAgICAgIHJldHVybiB3aW4gPyAocHJvcCBpbiB3aW4pID8gd2luWyBwcm9wIF0gOgorICAgICAg
ICAgICAgICAgICAgICB3aW4uZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50WyBtZXRob2QgXSA6Cisg
ICAgICAgICAgICAgICAgICAgIGVsZW1bIG1ldGhvZCBdOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpZiAoIHdpbiApIHsKKyAgICAgICAgICAgICAgICB3aW4uc2Nyb2xsVG8oCisgICAg
ICAgICAgICAgICAgICAgICF0b3AgPyB2YWwgOiBqUXVlcnkoIHdpbiApLnNjcm9sbExlZnQoKSwK
KyAgICAgICAgICAgICAgICAgICAgIHRvcCA/IHZhbCA6IGpRdWVyeSggd2luICkuc2Nyb2xsVG9w
KCkKKyAgICAgICAgICAgICAgICApOworCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgIGVsZW1bIG1ldGhvZCBdID0gdmFsOworICAgICAgICAgICAgfQorICAgICAgICB9LCBt
ZXRob2QsIHZhbCwgYXJndW1lbnRzLmxlbmd0aCwgbnVsbCApOworICAgIH07Cit9KTsKKworZnVu
Y3Rpb24gZ2V0V2luZG93KCBlbGVtICkgeworICAgIHJldHVybiBqUXVlcnkuaXNXaW5kb3coIGVs
ZW0gKSA/CisgICAgICAgIGVsZW0gOgorICAgICAgICBlbGVtLm5vZGVUeXBlID09PSA5ID8KKyAg
ICAgICAgICAgIGVsZW0uZGVmYXVsdFZpZXcgfHwgZWxlbS5wYXJlbnRXaW5kb3cgOgorICAgICAg
ICAgICAgZmFsc2U7Cit9CisvLyBDcmVhdGUgaW5uZXJIZWlnaHQsIGlubmVyV2lkdGgsIGhlaWdo
dCwgd2lkdGgsIG91dGVySGVpZ2h0IGFuZCBvdXRlcldpZHRoIG1ldGhvZHMKK2pRdWVyeS5lYWNo
KCB7IEhlaWdodDogImhlaWdodCIsIFdpZHRoOiAid2lkdGgiIH0sIGZ1bmN0aW9uKCBuYW1lLCB0
eXBlICkgeworICAgIGpRdWVyeS5lYWNoKCB7IHBhZGRpbmc6ICJpbm5lciIgKyBuYW1lLCBjb250
ZW50OiB0eXBlLCAiIjogIm91dGVyIiArIG5hbWUgfSwgZnVuY3Rpb24oIGRlZmF1bHRFeHRyYSwg
ZnVuY05hbWUgKSB7CisgICAgICAgIC8vIG1hcmdpbiBpcyBvbmx5IGZvciBvdXRlckhlaWdodCwg
b3V0ZXJXaWR0aAorICAgICAgICBqUXVlcnkuZm5bIGZ1bmNOYW1lIF0gPSBmdW5jdGlvbiggbWFy
Z2luLCB2YWx1ZSApIHsKKyAgICAgICAgICAgIHZhciBjaGFpbmFibGUgPSBhcmd1bWVudHMubGVu
Z3RoICYmICggZGVmYXVsdEV4dHJhIHx8IHR5cGVvZiBtYXJnaW4gIT09ICJib29sZWFuIiApLAor
ICAgICAgICAgICAgICAgIGV4dHJhID0gZGVmYXVsdEV4dHJhIHx8ICggbWFyZ2luID09PSB0cnVl
IHx8IHZhbHVlID09PSB0cnVlID8gIm1hcmdpbiIgOiAiYm9yZGVyIiApOworCisgICAgICAgICAg
ICByZXR1cm4galF1ZXJ5LmFjY2VzcyggdGhpcywgZnVuY3Rpb24oIGVsZW0sIHR5cGUsIHZhbHVl
ICkgeworICAgICAgICAgICAgICAgIHZhciBkb2M7CisKKyAgICAgICAgICAgICAgICBpZiAoIGpR
dWVyeS5pc1dpbmRvdyggZWxlbSApICkgeworICAgICAgICAgICAgICAgICAgICAvLyBBcyBvZiA1
LzgvMjAxMiB0aGlzIHdpbGwgeWllbGQgaW5jb3JyZWN0IHJlc3VsdHMgZm9yIE1vYmlsZSBTYWZh
cmksIGJ1dCB0aGVyZQorICAgICAgICAgICAgICAgICAgICAvLyBpc24ndCBhIHdob2xlIGxvdCB3
ZSBjYW4gZG8uIFNlZSBwdWxsIHJlcXVlc3QgYXQgdGhpcyBVUkwgZm9yIGRpc2N1c3Npb246Cisg
ICAgICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9qcXVlcnkvanF1ZXJ5L3B1
bGwvNzY0CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLmRvY3VtZW50LmRvY3VtZW50
RWxlbWVudFsgImNsaWVudCIgKyBuYW1lIF07CisgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgLy8gR2V0IGRvY3VtZW50IHdpZHRoIG9yIGhlaWdodAorICAgICAgICAgICAgICAg
IGlmICggZWxlbS5ub2RlVHlwZSA9PT0gOSApIHsKKyAgICAgICAgICAgICAgICAgICAgZG9jID0g
ZWxlbS5kb2N1bWVudEVsZW1lbnQ7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gRWl0aGVyIHNj
cm9sbFtXaWR0aC9IZWlnaHRdIG9yIG9mZnNldFtXaWR0aC9IZWlnaHRdIG9yIGNsaWVudFtXaWR0
aC9IZWlnaHRdLCB3aGljaGV2ZXIgaXMgZ3JlYXRlc3QKKyAgICAgICAgICAgICAgICAgICAgLy8g
dW5mb3J0dW5hdGVseSwgdGhpcyBjYXVzZXMgYnVnICMzODM4IGluIElFNi84IG9ubHksIGJ1dCB0
aGVyZSBpcyBjdXJyZW50bHkgbm8gZ29vZCwgc21hbGwgd2F5IHRvIGZpeCBpdC4KKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIE1hdGgubWF4KAorICAgICAgICAgICAgICAgICAgICAgICAgZWxl
bS5ib2R5WyAic2Nyb2xsIiArIG5hbWUgXSwgZG9jWyAic2Nyb2xsIiArIG5hbWUgXSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGVsZW0uYm9keVsgIm9mZnNldCIgKyBuYW1lIF0sIGRvY1sgIm9m
ZnNldCIgKyBuYW1lIF0sCisgICAgICAgICAgICAgICAgICAgICAgICBkb2NbICJjbGllbnQiICsg
bmFtZSBdCisgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgPworICAgICAgICAgICAgICAg
ICAgICAvLyBHZXQgd2lkdGggb3IgaGVpZ2h0IG9uIHRoZSBlbGVtZW50LCByZXF1ZXN0aW5nIGJ1
dCBub3QgZm9yY2luZyBwYXJzZUZsb2F0CisgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5jc3Mo
IGVsZW0sIHR5cGUsIHZhbHVlLCBleHRyYSApIDoKKworICAgICAgICAgICAgICAgICAgICAvLyBT
ZXQgd2lkdGggb3IgaGVpZ2h0IG9uIHRoZSBlbGVtZW50CisgICAgICAgICAgICAgICAgICAgIGpR
dWVyeS5zdHlsZSggZWxlbSwgdHlwZSwgdmFsdWUsIGV4dHJhICk7CisgICAgICAgICAgICB9LCB0
eXBlLCBjaGFpbmFibGUgPyBtYXJnaW4gOiB1bmRlZmluZWQsIGNoYWluYWJsZSwgbnVsbCApOwor
ICAgICAgICB9OworICAgIH0pOworfSk7CisvLyBFeHBvc2UgalF1ZXJ5IHRvIHRoZSBnbG9iYWwg
b2JqZWN0Cit3aW5kb3cualF1ZXJ5ID0gd2luZG93LiQgPSBqUXVlcnk7CisKKy8vIEV4cG9zZSBq
UXVlcnkgYXMgYW4gQU1EIG1vZHVsZSwgYnV0IG9ubHkgZm9yIEFNRCBsb2FkZXJzIHRoYXQKKy8v
IHVuZGVyc3RhbmQgdGhlIGlzc3VlcyB3aXRoIGxvYWRpbmcgbXVsdGlwbGUgdmVyc2lvbnMgb2Yg
alF1ZXJ5CisvLyBpbiBhIHBhZ2UgdGhhdCBhbGwgbWlnaHQgY2FsbCBkZWZpbmUoKS4gVGhlIGxv
YWRlciB3aWxsIGluZGljYXRlCisvLyB0aGV5IGhhdmUgc3BlY2lhbCBhbGxvd2FuY2VzIGZvciBt
dWx0aXBsZSBqUXVlcnkgdmVyc2lvbnMgYnkKKy8vIHNwZWNpZnlpbmcgZGVmaW5lLmFtZC5qUXVl
cnkgPSB0cnVlLiBSZWdpc3RlciBhcyBhIG5hbWVkIG1vZHVsZSwKKy8vIHNpbmNlIGpRdWVyeSBj
YW4gYmUgY29uY2F0ZW5hdGVkIHdpdGggb3RoZXIgZmlsZXMgdGhhdCBtYXkgdXNlIGRlZmluZSwK
Ky8vIGJ1dCBub3QgdXNlIGEgcHJvcGVyIGNvbmNhdGVuYXRpb24gc2NyaXB0IHRoYXQgdW5kZXJz
dGFuZHMgYW5vbnltb3VzCisvLyBBTUQgbW9kdWxlcy4gQSBuYW1lZCBBTUQgaXMgc2FmZXN0IGFu
ZCBtb3N0IHJvYnVzdCB3YXkgdG8gcmVnaXN0ZXIuCisvLyBMb3dlcmNhc2UganF1ZXJ5IGlzIHVz
ZWQgYmVjYXVzZSBBTUQgbW9kdWxlIG5hbWVzIGFyZSBkZXJpdmVkIGZyb20KKy8vIGZpbGUgbmFt
ZXMsIGFuZCBqUXVlcnkgaXMgbm9ybWFsbHkgZGVsaXZlcmVkIGluIGEgbG93ZXJjYXNlIGZpbGUg
bmFtZS4KKy8vIERvIHRoaXMgYWZ0ZXIgY3JlYXRpbmcgdGhlIGdsb2JhbCBzbyB0aGF0IGlmIGFu
IEFNRCBtb2R1bGUgd2FudHMgdG8gY2FsbAorLy8gbm9Db25mbGljdCB0byBoaWRlIHRoaXMgdmVy
c2lvbiBvZiBqUXVlcnksIGl0IHdpbGwgd29yay4KK2lmICggdHlwZW9mIGRlZmluZSA9PT0gImZ1
bmN0aW9uIiAmJiBkZWZpbmUuYW1kICYmIGRlZmluZS5hbWQualF1ZXJ5ICkgeworICAgIGRlZmlu
ZSggImpxdWVyeSIsIFtdLCBmdW5jdGlvbiAoKSB7IHJldHVybiBqUXVlcnk7IH0gKTsKK30KKwor
fSkoIHdpbmRvdyApOwpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGln
aHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2pxdWVyeS9qcXVlcnkubWluLmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1h
cHAvY29tcG9uZW50cy9qcXVlcnkvanF1ZXJ5Lm1pbi5qcwkocmV2aXNpb24gMCkKKysrIFBlcmZv
cm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50
cy9qcXVlcnkvanF1ZXJ5Lm1pbi5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIgQEAKKy8q
ISBqUXVlcnkgdjEuOC4zIGpxdWVyeS5jb20gfCBqcXVlcnkub3JnL2xpY2Vuc2UgKi8KKyhmdW5j
dGlvbihlLHQpe2Z1bmN0aW9uIF8oZSl7dmFyIHQ9TVtlXT17fTtyZXR1cm4gdi5lYWNoKGUuc3Bs
aXQoeSksZnVuY3Rpb24oZSxuKXt0W25dPSEwfSksdH1mdW5jdGlvbiBIKGUsbixyKXtpZihyPT09
dCYmZS5ub2RlVHlwZT09PTEpe3ZhciBpPSJkYXRhLSIrbi5yZXBsYWNlKFAsIi0kMSIpLnRvTG93
ZXJDYXNlKCk7cj1lLmdldEF0dHJpYnV0ZShpKTtpZih0eXBlb2Ygcj09InN0cmluZyIpe3RyeXty
PXI9PT0idHJ1ZSI/ITA6cj09PSJmYWxzZSI/ITE6cj09PSJudWxsIj9udWxsOityKyIiPT09cj8r
cjpELnRlc3Qocik/di5wYXJzZUpTT04ocik6cn1jYXRjaChzKXt9di5kYXRhKGUsbixyKX1lbHNl
IHI9dH1yZXR1cm4gcn1mdW5jdGlvbiBCKGUpe3ZhciB0O2Zvcih0IGluIGUpe2lmKHQ9PT0iZGF0
YSImJnYuaXNFbXB0eU9iamVjdChlW3RdKSljb250aW51ZTtpZih0IT09InRvSlNPTiIpcmV0dXJu
ITF9cmV0dXJuITB9ZnVuY3Rpb24gZXQoKXtyZXR1cm4hMX1mdW5jdGlvbiB0dCgpe3JldHVybiEw
fWZ1bmN0aW9uIHV0KGUpe3JldHVybiFlfHwhZS5wYXJlbnROb2RlfHxlLnBhcmVudE5vZGUubm9k
ZVR5cGU9PT0xMX1mdW5jdGlvbiBhdChlLHQpe2RvIGU9ZVt0XTt3aGlsZShlJiZlLm5vZGVUeXBl
IT09MSk7cmV0dXJuIGV9ZnVuY3Rpb24gZnQoZSx0LG4pe3Q9dHx8MDtpZih2LmlzRnVuY3Rpb24o
dCkpcmV0dXJuIHYuZ3JlcChlLGZ1bmN0aW9uKGUscil7dmFyIGk9ISF0LmNhbGwoZSxyLGUpO3Jl
dHVybiBpPT09bn0pO2lmKHQubm9kZVR5cGUpcmV0dXJuIHYuZ3JlcChlLGZ1bmN0aW9uKGUscil7
cmV0dXJuIGU9PT10PT09bn0pO2lmKHR5cGVvZiB0PT0ic3RyaW5nIil7dmFyIHI9di5ncmVwKGUs
ZnVuY3Rpb24oZSl7cmV0dXJuIGUubm9kZVR5cGU9PT0xfSk7aWYoaXQudGVzdCh0KSlyZXR1cm4g
di5maWx0ZXIodCxyLCFuKTt0PXYuZmlsdGVyKHQscil9cmV0dXJuIHYuZ3JlcChlLGZ1bmN0aW9u
KGUscil7cmV0dXJuIHYuaW5BcnJheShlLHQpPj0wPT09bn0pfWZ1bmN0aW9uIGx0KGUpe3ZhciB0
PWN0LnNwbGl0KCJ8Iiksbj1lLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtpZihuLmNyZWF0ZUVs
ZW1lbnQpd2hpbGUodC5sZW5ndGgpbi5jcmVhdGVFbGVtZW50KHQucG9wKCkpO3JldHVybiBufWZ1
bmN0aW9uIEx0KGUsdCl7cmV0dXJuIGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUodClbMF18fGUuYXBw
ZW5kQ2hpbGQoZS5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodCkpfWZ1bmN0aW9uIEF0KGUs
dCl7aWYodC5ub2RlVHlwZSE9PTF8fCF2Lmhhc0RhdGEoZSkpcmV0dXJuO3ZhciBuLHIsaSxzPXYu
X2RhdGEoZSksbz12Ll9kYXRhKHQscyksdT1zLmV2ZW50cztpZih1KXtkZWxldGUgby5oYW5kbGUs
by5ldmVudHM9e307Zm9yKG4gaW4gdSlmb3Iocj0wLGk9dVtuXS5sZW5ndGg7cjxpO3IrKyl2LmV2
ZW50LmFkZCh0LG4sdVtuXVtyXSl9by5kYXRhJiYoby5kYXRhPXYuZXh0ZW5kKHt9LG8uZGF0YSkp
fWZ1bmN0aW9uIE90KGUsdCl7dmFyIG47aWYodC5ub2RlVHlwZSE9PTEpcmV0dXJuO3QuY2xlYXJB
dHRyaWJ1dGVzJiZ0LmNsZWFyQXR0cmlidXRlcygpLHQubWVyZ2VBdHRyaWJ1dGVzJiZ0Lm1lcmdl
QXR0cmlidXRlcyhlKSxuPXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxuPT09Im9iamVjdCI/KHQu
cGFyZW50Tm9kZSYmKHQub3V0ZXJIVE1MPWUub3V0ZXJIVE1MKSx2LnN1cHBvcnQuaHRtbDVDbG9u
ZSYmZS5pbm5lckhUTUwmJiF2LnRyaW0odC5pbm5lckhUTUwpJiYodC5pbm5lckhUTUw9ZS5pbm5l
ckhUTUwpKTpuPT09ImlucHV0IiYmRXQudGVzdChlLnR5cGUpPyh0LmRlZmF1bHRDaGVja2VkPXQu
Y2hlY2tlZD1lLmNoZWNrZWQsdC52YWx1ZSE9PWUudmFsdWUmJih0LnZhbHVlPWUudmFsdWUpKTpu
PT09Im9wdGlvbiI/dC5zZWxlY3RlZD1lLmRlZmF1bHRTZWxlY3RlZDpuPT09ImlucHV0Inx8bj09
PSJ0ZXh0YXJlYSI/dC5kZWZhdWx0VmFsdWU9ZS5kZWZhdWx0VmFsdWU6bj09PSJzY3JpcHQiJiZ0
LnRleHQhPT1lLnRleHQmJih0LnRleHQ9ZS50ZXh0KSx0LnJlbW92ZUF0dHJpYnV0ZSh2LmV4cGFu
ZG8pfWZ1bmN0aW9uIE10KGUpe3JldHVybiB0eXBlb2YgZS5nZXRFbGVtZW50c0J5VGFnTmFtZSE9
InVuZGVmaW5lZCI/ZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpOnR5cGVvZiBlLnF1ZXJ5U2Vs
ZWN0b3JBbGwhPSJ1bmRlZmluZWQiP2UucXVlcnlTZWxlY3RvckFsbCgiKiIpOltdfWZ1bmN0aW9u
IF90KGUpe0V0LnRlc3QoZS50eXBlKSYmKGUuZGVmYXVsdENoZWNrZWQ9ZS5jaGVja2VkKX1mdW5j
dGlvbiBRdChlLHQpe2lmKHQgaW4gZSlyZXR1cm4gdDt2YXIgbj10LmNoYXJBdCgwKS50b1VwcGVy
Q2FzZSgpK3Quc2xpY2UoMSkscj10LGk9SnQubGVuZ3RoO3doaWxlKGktLSl7dD1KdFtpXStuO2lm
KHQgaW4gZSlyZXR1cm4gdH1yZXR1cm4gcn1mdW5jdGlvbiBHdChlLHQpe3JldHVybiBlPXR8fGUs
di5jc3MoZSwiZGlzcGxheSIpPT09Im5vbmUifHwhdi5jb250YWlucyhlLm93bmVyRG9jdW1lbnQs
ZSl9ZnVuY3Rpb24gWXQoZSx0KXt2YXIgbixyLGk9W10scz0wLG89ZS5sZW5ndGg7Zm9yKDtzPG87
cysrKXtuPWVbc107aWYoIW4uc3R5bGUpY29udGludWU7aVtzXT12Ll9kYXRhKG4sIm9sZGRpc3Bs
YXkiKSx0PyghaVtzXSYmbi5zdHlsZS5kaXNwbGF5PT09Im5vbmUiJiYobi5zdHlsZS5kaXNwbGF5
PSIiKSxuLnN0eWxlLmRpc3BsYXk9PT0iIiYmR3QobikmJihpW3NdPXYuX2RhdGEobiwib2xkZGlz
cGxheSIsbm4obi5ub2RlTmFtZSkpKSk6KHI9RHQobiwiZGlzcGxheSIpLCFpW3NdJiZyIT09Im5v
bmUiJiZ2Ll9kYXRhKG4sIm9sZGRpc3BsYXkiLHIpKX1mb3Iocz0wO3M8bztzKyspe249ZVtzXTtp
Zighbi5zdHlsZSljb250aW51ZTtpZighdHx8bi5zdHlsZS5kaXNwbGF5PT09Im5vbmUifHxuLnN0
eWxlLmRpc3BsYXk9PT0iIiluLnN0eWxlLmRpc3BsYXk9dD9pW3NdfHwiIjoibm9uZSJ9cmV0dXJu
IGV9ZnVuY3Rpb24gWnQoZSx0LG4pe3ZhciByPVJ0LmV4ZWModCk7cmV0dXJuIHI/TWF0aC5tYXgo
MCxyWzFdLShufHwwKSkrKHJbMl18fCJweCIpOnR9ZnVuY3Rpb24gZW4oZSx0LG4scil7dmFyIGk9
bj09PShyPyJib3JkZXIiOiJjb250ZW50Iik/NDp0PT09IndpZHRoIj8xOjAscz0wO2Zvcig7aTw0
O2krPTIpbj09PSJtYXJnaW4iJiYocys9di5jc3MoZSxuKyR0W2ldLCEwKSkscj8obj09PSJjb250
ZW50IiYmKHMtPXBhcnNlRmxvYXQoRHQoZSwicGFkZGluZyIrJHRbaV0pKXx8MCksbiE9PSJtYXJn
aW4iJiYocy09cGFyc2VGbG9hdChEdChlLCJib3JkZXIiKyR0W2ldKyJXaWR0aCIpKXx8MCkpOihz
Kz1wYXJzZUZsb2F0KER0KGUsInBhZGRpbmciKyR0W2ldKSl8fDAsbiE9PSJwYWRkaW5nIiYmKHMr
PXBhcnNlRmxvYXQoRHQoZSwiYm9yZGVyIiskdFtpXSsiV2lkdGgiKSl8fDApKTtyZXR1cm4gc31m
dW5jdGlvbiB0bihlLHQsbil7dmFyIHI9dD09PSJ3aWR0aCI/ZS5vZmZzZXRXaWR0aDplLm9mZnNl
dEhlaWdodCxpPSEwLHM9di5zdXBwb3J0LmJveFNpemluZyYmdi5jc3MoZSwiYm94U2l6aW5nIik9
PT0iYm9yZGVyLWJveCI7aWYocjw9MHx8cj09bnVsbCl7cj1EdChlLHQpO2lmKHI8MHx8cj09bnVs
bClyPWUuc3R5bGVbdF07aWYoVXQudGVzdChyKSlyZXR1cm4gcjtpPXMmJih2LnN1cHBvcnQuYm94
U2l6aW5nUmVsaWFibGV8fHI9PT1lLnN0eWxlW3RdKSxyPXBhcnNlRmxvYXQocil8fDB9cmV0dXJu
IHIrZW4oZSx0LG58fChzPyJib3JkZXIiOiJjb250ZW50IiksaSkrInB4In1mdW5jdGlvbiBubihl
KXtpZihXdFtlXSlyZXR1cm4gV3RbZV07dmFyIHQ9digiPCIrZSsiPiIpLmFwcGVuZFRvKGkuYm9k
eSksbj10LmNzcygiZGlzcGxheSIpO3QucmVtb3ZlKCk7aWYobj09PSJub25lInx8bj09PSIiKXtQ
dD1pLmJvZHkuYXBwZW5kQ2hpbGQoUHR8fHYuZXh0ZW5kKGkuY3JlYXRlRWxlbWVudCgiaWZyYW1l
Iikse2ZyYW1lQm9yZGVyOjAsd2lkdGg6MCxoZWlnaHQ6MH0pKTtpZighSHR8fCFQdC5jcmVhdGVF
bGVtZW50KUh0PShQdC5jb250ZW50V2luZG93fHxQdC5jb250ZW50RG9jdW1lbnQpLmRvY3VtZW50
LEh0LndyaXRlKCI8IWRvY3R5cGUgaHRtbD48aHRtbD48Ym9keT4iKSxIdC5jbG9zZSgpO3Q9SHQu
Ym9keS5hcHBlbmRDaGlsZChIdC5jcmVhdGVFbGVtZW50KGUpKSxuPUR0KHQsImRpc3BsYXkiKSxp
LmJvZHkucmVtb3ZlQ2hpbGQoUHQpfXJldHVybiBXdFtlXT1uLG59ZnVuY3Rpb24gZm4oZSx0LG4s
cil7dmFyIGk7aWYodi5pc0FycmF5KHQpKXYuZWFjaCh0LGZ1bmN0aW9uKHQsaSl7bnx8c24udGVz
dChlKT9yKGUsaSk6Zm4oZSsiWyIrKHR5cGVvZiBpPT0ib2JqZWN0Ij90OiIiKSsiXSIsaSxuLHIp
fSk7ZWxzZSBpZighbiYmdi50eXBlKHQpPT09Im9iamVjdCIpZm9yKGkgaW4gdClmbihlKyJbIitp
KyJdIix0W2ldLG4scik7ZWxzZSByKGUsdCl9ZnVuY3Rpb24gQ24oZSl7cmV0dXJuIGZ1bmN0aW9u
KHQsbil7dHlwZW9mIHQhPSJzdHJpbmciJiYobj10LHQ9IioiKTt2YXIgcixpLHMsbz10LnRvTG93
ZXJDYXNlKCkuc3BsaXQoeSksdT0wLGE9by5sZW5ndGg7aWYodi5pc0Z1bmN0aW9uKG4pKWZvcig7
dTxhO3UrKylyPW9bdV0scz0vXlwrLy50ZXN0KHIpLHMmJihyPXIuc3Vic3RyKDEpfHwiKiIpLGk9
ZVtyXT1lW3JdfHxbXSxpW3M/InVuc2hpZnQiOiJwdXNoIl0obil9fWZ1bmN0aW9uIGtuKGUsbixy
LGkscyxvKXtzPXN8fG4uZGF0YVR5cGVzWzBdLG89b3x8e30sb1tzXT0hMDt2YXIgdSxhPWVbc10s
Zj0wLGw9YT9hLmxlbmd0aDowLGM9ZT09PVNuO2Zvcig7ZjxsJiYoY3x8IXUpO2YrKyl1PWFbZl0o
bixyLGkpLHR5cGVvZiB1PT0ic3RyaW5nIiYmKCFjfHxvW3VdP3U9dDoobi5kYXRhVHlwZXMudW5z
aGlmdCh1KSx1PWtuKGUsbixyLGksdSxvKSkpO3JldHVybihjfHwhdSkmJiFvWyIqIl0mJih1PWtu
KGUsbixyLGksIioiLG8pKSx1fWZ1bmN0aW9uIExuKGUsbil7dmFyIHIsaSxzPXYuYWpheFNldHRp
bmdzLmZsYXRPcHRpb25zfHx7fTtmb3IociBpbiBuKW5bcl0hPT10JiYoKHNbcl0/ZTppfHwoaT17
fSkpW3JdPW5bcl0pO2kmJnYuZXh0ZW5kKCEwLGUsaSl9ZnVuY3Rpb24gQW4oZSxuLHIpe3ZhciBp
LHMsbyx1LGE9ZS5jb250ZW50cyxmPWUuZGF0YVR5cGVzLGw9ZS5yZXNwb25zZUZpZWxkcztmb3Io
cyBpbiBsKXMgaW4gciYmKG5bbFtzXV09cltzXSk7d2hpbGUoZlswXT09PSIqIilmLnNoaWZ0KCks
aT09PXQmJihpPWUubWltZVR5cGV8fG4uZ2V0UmVzcG9uc2VIZWFkZXIoImNvbnRlbnQtdHlwZSIp
KTtpZihpKWZvcihzIGluIGEpaWYoYVtzXSYmYVtzXS50ZXN0KGkpKXtmLnVuc2hpZnQocyk7YnJl
YWt9aWYoZlswXWluIHIpbz1mWzBdO2Vsc2V7Zm9yKHMgaW4gcil7aWYoIWZbMF18fGUuY29udmVy
dGVyc1tzKyIgIitmWzBdXSl7bz1zO2JyZWFrfXV8fCh1PXMpfW89b3x8dX1pZihvKXJldHVybiBv
IT09ZlswXSYmZi51bnNoaWZ0KG8pLHJbb119ZnVuY3Rpb24gT24oZSx0KXt2YXIgbixyLGkscyxv
PWUuZGF0YVR5cGVzLnNsaWNlKCksdT1vWzBdLGE9e30sZj0wO2UuZGF0YUZpbHRlciYmKHQ9ZS5k
YXRhRmlsdGVyKHQsZS5kYXRhVHlwZSkpO2lmKG9bMV0pZm9yKG4gaW4gZS5jb252ZXJ0ZXJzKWFb
bi50b0xvd2VyQ2FzZSgpXT1lLmNvbnZlcnRlcnNbbl07Zm9yKDtpPW9bKytmXTspaWYoaSE9PSIq
Iil7aWYodSE9PSIqIiYmdSE9PWkpe249YVt1KyIgIitpXXx8YVsiKiAiK2ldO2lmKCFuKWZvcihy
IGluIGEpe3M9ci5zcGxpdCgiICIpO2lmKHNbMV09PT1pKXtuPWFbdSsiICIrc1swXV18fGFbIiog
IitzWzBdXTtpZihuKXtuPT09ITA/bj1hW3JdOmFbcl0hPT0hMCYmKGk9c1swXSxvLnNwbGljZShm
LS0sMCxpKSk7YnJlYWt9fX1pZihuIT09ITApaWYobiYmZVsidGhyb3dzIl0pdD1uKHQpO2Vsc2Ug
dHJ5e3Q9bih0KX1jYXRjaChsKXtyZXR1cm57c3RhdGU6InBhcnNlcmVycm9yIixlcnJvcjpuP2w6
Ik5vIGNvbnZlcnNpb24gZnJvbSAiK3UrIiB0byAiK2l9fX11PWl9cmV0dXJue3N0YXRlOiJzdWNj
ZXNzIixkYXRhOnR9fWZ1bmN0aW9uIEZuKCl7dHJ5e3JldHVybiBuZXcgZS5YTUxIdHRwUmVxdWVz
dH1jYXRjaCh0KXt9fWZ1bmN0aW9uIEluKCl7dHJ5e3JldHVybiBuZXcgZS5BY3RpdmVYT2JqZWN0
KCJNaWNyb3NvZnQuWE1MSFRUUCIpfWNhdGNoKHQpe319ZnVuY3Rpb24gJG4oKXtyZXR1cm4gc2V0
VGltZW91dChmdW5jdGlvbigpe3FuPXR9LDApLHFuPXYubm93KCl9ZnVuY3Rpb24gSm4oZSx0KXt2
LmVhY2godCxmdW5jdGlvbih0LG4pe3ZhciByPShWblt0XXx8W10pLmNvbmNhdChWblsiKiJdKSxp
PTAscz1yLmxlbmd0aDtmb3IoO2k8cztpKyspaWYocltpXS5jYWxsKGUsdCxuKSlyZXR1cm59KX1m
dW5jdGlvbiBLbihlLHQsbil7dmFyIHIsaT0wLHM9MCxvPVhuLmxlbmd0aCx1PXYuRGVmZXJyZWQo
KS5hbHdheXMoZnVuY3Rpb24oKXtkZWxldGUgYS5lbGVtfSksYT1mdW5jdGlvbigpe3ZhciB0PXFu
fHwkbigpLG49TWF0aC5tYXgoMCxmLnN0YXJ0VGltZStmLmR1cmF0aW9uLXQpLHI9bi9mLmR1cmF0
aW9ufHwwLGk9MS1yLHM9MCxvPWYudHdlZW5zLmxlbmd0aDtmb3IoO3M8bztzKyspZi50d2VlbnNb
c10ucnVuKGkpO3JldHVybiB1Lm5vdGlmeVdpdGgoZSxbZixpLG5dKSxpPDEmJm8/bjoodS5yZXNv
bHZlV2l0aChlLFtmXSksITEpfSxmPXUucHJvbWlzZSh7ZWxlbTplLHByb3BzOnYuZXh0ZW5kKHt9
LHQpLG9wdHM6di5leHRlbmQoITAse3NwZWNpYWxFYXNpbmc6e319LG4pLG9yaWdpbmFsUHJvcGVy
dGllczp0LG9yaWdpbmFsT3B0aW9uczpuLHN0YXJ0VGltZTpxbnx8JG4oKSxkdXJhdGlvbjpuLmR1
cmF0aW9uLHR3ZWVuczpbXSxjcmVhdGVUd2VlbjpmdW5jdGlvbih0LG4scil7dmFyIGk9di5Ud2Vl
bihlLGYub3B0cyx0LG4sZi5vcHRzLnNwZWNpYWxFYXNpbmdbdF18fGYub3B0cy5lYXNpbmcpO3Jl
dHVybiBmLnR3ZWVucy5wdXNoKGkpLGl9LHN0b3A6ZnVuY3Rpb24odCl7dmFyIG49MCxyPXQ/Zi50
d2VlbnMubGVuZ3RoOjA7Zm9yKDtuPHI7bisrKWYudHdlZW5zW25dLnJ1bigxKTtyZXR1cm4gdD91
LnJlc29sdmVXaXRoKGUsW2YsdF0pOnUucmVqZWN0V2l0aChlLFtmLHRdKSx0aGlzfX0pLGw9Zi5w
cm9wcztRbihsLGYub3B0cy5zcGVjaWFsRWFzaW5nKTtmb3IoO2k8bztpKyspe3I9WG5baV0uY2Fs
bChmLGUsbCxmLm9wdHMpO2lmKHIpcmV0dXJuIHJ9cmV0dXJuIEpuKGYsbCksdi5pc0Z1bmN0aW9u
KGYub3B0cy5zdGFydCkmJmYub3B0cy5zdGFydC5jYWxsKGUsZiksdi5meC50aW1lcih2LmV4dGVu
ZChhLHthbmltOmYscXVldWU6Zi5vcHRzLnF1ZXVlLGVsZW06ZX0pKSxmLnByb2dyZXNzKGYub3B0
cy5wcm9ncmVzcykuZG9uZShmLm9wdHMuZG9uZSxmLm9wdHMuY29tcGxldGUpLmZhaWwoZi5vcHRz
LmZhaWwpLmFsd2F5cyhmLm9wdHMuYWx3YXlzKX1mdW5jdGlvbiBRbihlLHQpe3ZhciBuLHIsaSxz
LG87Zm9yKG4gaW4gZSl7cj12LmNhbWVsQ2FzZShuKSxpPXRbcl0scz1lW25dLHYuaXNBcnJheShz
KSYmKGk9c1sxXSxzPWVbbl09c1swXSksbiE9PXImJihlW3JdPXMsZGVsZXRlIGVbbl0pLG89di5j
c3NIb29rc1tyXTtpZihvJiYiZXhwYW5kImluIG8pe3M9by5leHBhbmQocyksZGVsZXRlIGVbcl07
Zm9yKG4gaW4gcyluIGluIGV8fChlW25dPXNbbl0sdFtuXT1pKX1lbHNlIHRbcl09aX19ZnVuY3Rp
b24gR24oZSx0LG4pe3ZhciByLGkscyxvLHUsYSxmLGwsYyxoPXRoaXMscD1lLnN0eWxlLGQ9e30s
bT1bXSxnPWUubm9kZVR5cGUmJkd0KGUpO24ucXVldWV8fChsPXYuX3F1ZXVlSG9va3MoZSwiZngi
KSxsLnVucXVldWVkPT1udWxsJiYobC51bnF1ZXVlZD0wLGM9bC5lbXB0eS5maXJlLGwuZW1wdHku
ZmlyZT1mdW5jdGlvbigpe2wudW5xdWV1ZWR8fGMoKX0pLGwudW5xdWV1ZWQrKyxoLmFsd2F5cyhm
dW5jdGlvbigpe2guYWx3YXlzKGZ1bmN0aW9uKCl7bC51bnF1ZXVlZC0tLHYucXVldWUoZSwiZngi
KS5sZW5ndGh8fGwuZW1wdHkuZmlyZSgpfSl9KSksZS5ub2RlVHlwZT09PTEmJigiaGVpZ2h0Imlu
IHR8fCJ3aWR0aCJpbiB0KSYmKG4ub3ZlcmZsb3c9W3Aub3ZlcmZsb3cscC5vdmVyZmxvd1gscC5v
dmVyZmxvd1ldLHYuY3NzKGUsImRpc3BsYXkiKT09PSJpbmxpbmUiJiZ2LmNzcyhlLCJmbG9hdCIp
PT09Im5vbmUiJiYoIXYuc3VwcG9ydC5pbmxpbmVCbG9ja05lZWRzTGF5b3V0fHxubihlLm5vZGVO
YW1lKT09PSJpbmxpbmUiP3AuZGlzcGxheT0iaW5saW5lLWJsb2NrIjpwLnpvb209MSkpLG4ub3Zl
cmZsb3cmJihwLm92ZXJmbG93PSJoaWRkZW4iLHYuc3VwcG9ydC5zaHJpbmtXcmFwQmxvY2tzfHxo
LmRvbmUoZnVuY3Rpb24oKXtwLm92ZXJmbG93PW4ub3ZlcmZsb3dbMF0scC5vdmVyZmxvd1g9bi5v
dmVyZmxvd1sxXSxwLm92ZXJmbG93WT1uLm92ZXJmbG93WzJdfSkpO2ZvcihyIGluIHQpe3M9dFty
XTtpZihVbi5leGVjKHMpKXtkZWxldGUgdFtyXSxhPWF8fHM9PT0idG9nZ2xlIjtpZihzPT09KGc/
ImhpZGUiOiJzaG93IikpY29udGludWU7bS5wdXNoKHIpfX1vPW0ubGVuZ3RoO2lmKG8pe3U9di5f
ZGF0YShlLCJmeHNob3ciKXx8di5fZGF0YShlLCJmeHNob3ciLHt9KSwiaGlkZGVuImluIHUmJihn
PXUuaGlkZGVuKSxhJiYodS5oaWRkZW49IWcpLGc/dihlKS5zaG93KCk6aC5kb25lKGZ1bmN0aW9u
KCl7dihlKS5oaWRlKCl9KSxoLmRvbmUoZnVuY3Rpb24oKXt2YXIgdDt2LnJlbW92ZURhdGEoZSwi
ZnhzaG93IiwhMCk7Zm9yKHQgaW4gZCl2LnN0eWxlKGUsdCxkW3RdKX0pO2ZvcihyPTA7cjxvO3Ir
KylpPW1bcl0sZj1oLmNyZWF0ZVR3ZWVuKGksZz91W2ldOjApLGRbaV09dVtpXXx8di5zdHlsZShl
LGkpLGkgaW4gdXx8KHVbaV09Zi5zdGFydCxnJiYoZi5lbmQ9Zi5zdGFydCxmLnN0YXJ0PWk9PT0i
d2lkdGgifHxpPT09ImhlaWdodCI/MTowKSl9fWZ1bmN0aW9uIFluKGUsdCxuLHIsaSl7cmV0dXJu
IG5ldyBZbi5wcm90b3R5cGUuaW5pdChlLHQsbixyLGkpfWZ1bmN0aW9uIFpuKGUsdCl7dmFyIG4s
cj17aGVpZ2h0OmV9LGk9MDt0PXQ/MTowO2Zvcig7aTw0O2krPTItdCluPSR0W2ldLHJbIm1hcmdp
biIrbl09clsicGFkZGluZyIrbl09ZTtyZXR1cm4gdCYmKHIub3BhY2l0eT1yLndpZHRoPWUpLHJ9
ZnVuY3Rpb24gdHIoZSl7cmV0dXJuIHYuaXNXaW5kb3coZSk/ZTplLm5vZGVUeXBlPT09OT9lLmRl
ZmF1bHRWaWV3fHxlLnBhcmVudFdpbmRvdzohMX12YXIgbixyLGk9ZS5kb2N1bWVudCxzPWUubG9j
YXRpb24sbz1lLm5hdmlnYXRvcix1PWUualF1ZXJ5LGE9ZS4kLGY9QXJyYXkucHJvdG90eXBlLnB1
c2gsbD1BcnJheS5wcm90b3R5cGUuc2xpY2UsYz1BcnJheS5wcm90b3R5cGUuaW5kZXhPZixoPU9i
amVjdC5wcm90b3R5cGUudG9TdHJpbmcscD1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5
LGQ9U3RyaW5nLnByb3RvdHlwZS50cmltLHY9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbmV3IHYuZm4u
aW5pdChlLHQsbil9LG09L1tcLStdPyg/OlxkKlwufClcZCsoPzpbZUVdW1wtK10/XGQrfCkvLnNv
dXJjZSxnPS9cUy8seT0vXHMrLyxiPS9eW1xzXHVGRUZGXHhBMF0rfFtcc1x1RkVGRlx4QTBdKyQv
Zyx3PS9eKD86W14jPF0qKDxbXHdcV10rPilbXj5dKiR8IyhbXHdcLV0qKSQpLyxFPS9ePChcdysp
XHMqXC8/Pig/OjxcL1wxPnwpJC8sUz0vXltcXSw6e31cc10qJC8seD0vKD86Xnw6fCwpKD86XHMq
XFspKy9nLFQ9L1xcKD86WyJcXFwvYmZucnRdfHVbXGRhLWZBLUZdezR9KS9nLE49LyJbXiJcXFxy
XG5dKiJ8dHJ1ZXxmYWxzZXxudWxsfC0/KD86XGRcZCpcLnwpXGQrKD86W2VFXVtcLStdP1xkK3wp
L2csQz0vXi1tcy0vLGs9Ly0oW1xkYS16XSkvZ2ksTD1mdW5jdGlvbihlLHQpe3JldHVybih0KyIi
KS50b1VwcGVyQ2FzZSgpfSxBPWZ1bmN0aW9uKCl7aS5hZGRFdmVudExpc3RlbmVyPyhpLnJlbW92
ZUV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLEEsITEpLHYucmVhZHkoKSk6aS5yZWFk
eVN0YXRlPT09ImNvbXBsZXRlIiYmKGkuZGV0YWNoRXZlbnQoIm9ucmVhZHlzdGF0ZWNoYW5nZSIs
QSksdi5yZWFkeSgpKX0sTz17fTt2LmZuPXYucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp2LGluaXQ6
ZnVuY3Rpb24oZSxuLHIpe3ZhciBzLG8sdSxhO2lmKCFlKXJldHVybiB0aGlzO2lmKGUubm9kZVR5
cGUpcmV0dXJuIHRoaXMuY29udGV4dD10aGlzWzBdPWUsdGhpcy5sZW5ndGg9MSx0aGlzO2lmKHR5
cGVvZiBlPT0ic3RyaW5nIil7ZS5jaGFyQXQoMCk9PT0iPCImJmUuY2hhckF0KGUubGVuZ3RoLTEp
PT09Ij4iJiZlLmxlbmd0aD49Mz9zPVtudWxsLGUsbnVsbF06cz13LmV4ZWMoZSk7aWYocyYmKHNb
MV18fCFuKSl7aWYoc1sxXSlyZXR1cm4gbj1uIGluc3RhbmNlb2Ygdj9uWzBdOm4sYT1uJiZuLm5v
ZGVUeXBlP24ub3duZXJEb2N1bWVudHx8bjppLGU9di5wYXJzZUhUTUwoc1sxXSxhLCEwKSxFLnRl
c3Qoc1sxXSkmJnYuaXNQbGFpbk9iamVjdChuKSYmdGhpcy5hdHRyLmNhbGwoZSxuLCEwKSx2Lm1l
cmdlKHRoaXMsZSk7bz1pLmdldEVsZW1lbnRCeUlkKHNbMl0pO2lmKG8mJm8ucGFyZW50Tm9kZSl7
aWYoby5pZCE9PXNbMl0pcmV0dXJuIHIuZmluZChlKTt0aGlzLmxlbmd0aD0xLHRoaXNbMF09b31y
ZXR1cm4gdGhpcy5jb250ZXh0PWksdGhpcy5zZWxlY3Rvcj1lLHRoaXN9cmV0dXJuIW58fG4uanF1
ZXJ5PyhufHxyKS5maW5kKGUpOnRoaXMuY29uc3RydWN0b3IobikuZmluZChlKX1yZXR1cm4gdi5p
c0Z1bmN0aW9uKGUpP3IucmVhZHkoZSk6KGUuc2VsZWN0b3IhPT10JiYodGhpcy5zZWxlY3Rvcj1l
LnNlbGVjdG9yLHRoaXMuY29udGV4dD1lLmNvbnRleHQpLHYubWFrZUFycmF5KGUsdGhpcykpfSxz
ZWxlY3RvcjoiIixqcXVlcnk6IjEuOC4zIixsZW5ndGg6MCxzaXplOmZ1bmN0aW9uKCl7cmV0dXJu
IHRoaXMubGVuZ3RofSx0b0FycmF5OmZ1bmN0aW9uKCl7cmV0dXJuIGwuY2FsbCh0aGlzKX0sZ2V0
OmZ1bmN0aW9uKGUpe3JldHVybiBlPT1udWxsP3RoaXMudG9BcnJheSgpOmU8MD90aGlzW3RoaXMu
bGVuZ3RoK2VdOnRoaXNbZV19LHB1c2hTdGFjazpmdW5jdGlvbihlLHQsbil7dmFyIHI9di5tZXJn
ZSh0aGlzLmNvbnN0cnVjdG9yKCksZSk7cmV0dXJuIHIucHJldk9iamVjdD10aGlzLHIuY29udGV4
dD10aGlzLmNvbnRleHQsdD09PSJmaW5kIj9yLnNlbGVjdG9yPXRoaXMuc2VsZWN0b3IrKHRoaXMu
c2VsZWN0b3I/IiAiOiIiKStuOnQmJihyLnNlbGVjdG9yPXRoaXMuc2VsZWN0b3IrIi4iK3QrIigi
K24rIikiKSxyfSxlYWNoOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHYuZWFjaCh0aGlzLGUsdCl9LHJl
YWR5OmZ1bmN0aW9uKGUpe3JldHVybiB2LnJlYWR5LnByb21pc2UoKS5kb25lKGUpLHRoaXN9LGVx
OmZ1bmN0aW9uKGUpe3JldHVybiBlPStlLGU9PT0tMT90aGlzLnNsaWNlKGUpOnRoaXMuc2xpY2Uo
ZSxlKzEpfSxmaXJzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVxKDApfSxsYXN0OmZ1bmN0aW9u
KCl7cmV0dXJuIHRoaXMuZXEoLTEpfSxzbGljZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnB1c2hT
dGFjayhsLmFwcGx5KHRoaXMsYXJndW1lbnRzKSwic2xpY2UiLGwuY2FsbChhcmd1bWVudHMpLmpv
aW4oIiwiKSl9LG1hcDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2sodi5tYXAodGhp
cyxmdW5jdGlvbih0LG4pe3JldHVybiBlLmNhbGwodCxuLHQpfSkpfSxlbmQ6ZnVuY3Rpb24oKXty
ZXR1cm4gdGhpcy5wcmV2T2JqZWN0fHx0aGlzLmNvbnN0cnVjdG9yKG51bGwpfSxwdXNoOmYsc29y
dDpbXS5zb3J0LHNwbGljZTpbXS5zcGxpY2V9LHYuZm4uaW5pdC5wcm90b3R5cGU9di5mbix2LmV4
dGVuZD12LmZuLmV4dGVuZD1mdW5jdGlvbigpe3ZhciBlLG4scixpLHMsbyx1PWFyZ3VtZW50c1sw
XXx8e30sYT0xLGY9YXJndW1lbnRzLmxlbmd0aCxsPSExO3R5cGVvZiB1PT0iYm9vbGVhbiImJihs
PXUsdT1hcmd1bWVudHNbMV18fHt9LGE9MiksdHlwZW9mIHUhPSJvYmplY3QiJiYhdi5pc0Z1bmN0
aW9uKHUpJiYodT17fSksZj09PWEmJih1PXRoaXMsLS1hKTtmb3IoO2E8ZjthKyspaWYoKGU9YXJn
dW1lbnRzW2FdKSE9bnVsbClmb3IobiBpbiBlKXtyPXVbbl0saT1lW25dO2lmKHU9PT1pKWNvbnRp
bnVlO2wmJmkmJih2LmlzUGxhaW5PYmplY3QoaSl8fChzPXYuaXNBcnJheShpKSkpPyhzPyhzPSEx
LG89ciYmdi5pc0FycmF5KHIpP3I6W10pOm89ciYmdi5pc1BsYWluT2JqZWN0KHIpP3I6e30sdVtu
XT12LmV4dGVuZChsLG8saSkpOmkhPT10JiYodVtuXT1pKX1yZXR1cm4gdX0sdi5leHRlbmQoe25v
Q29uZmxpY3Q6ZnVuY3Rpb24odCl7cmV0dXJuIGUuJD09PXYmJihlLiQ9YSksdCYmZS5qUXVlcnk9
PT12JiYoZS5qUXVlcnk9dSksdn0saXNSZWFkeTohMSxyZWFkeVdhaXQ6MSxob2xkUmVhZHk6ZnVu
Y3Rpb24oZSl7ZT92LnJlYWR5V2FpdCsrOnYucmVhZHkoITApfSxyZWFkeTpmdW5jdGlvbihlKXtp
ZihlPT09ITA/LS12LnJlYWR5V2FpdDp2LmlzUmVhZHkpcmV0dXJuO2lmKCFpLmJvZHkpcmV0dXJu
IHNldFRpbWVvdXQodi5yZWFkeSwxKTt2LmlzUmVhZHk9ITA7aWYoZSE9PSEwJiYtLXYucmVhZHlX
YWl0PjApcmV0dXJuO3IucmVzb2x2ZVdpdGgoaSxbdl0pLHYuZm4udHJpZ2dlciYmdihpKS50cmln
Z2VyKCJyZWFkeSIpLm9mZigicmVhZHkiKX0saXNGdW5jdGlvbjpmdW5jdGlvbihlKXtyZXR1cm4g
di50eXBlKGUpPT09ImZ1bmN0aW9uIn0saXNBcnJheTpBcnJheS5pc0FycmF5fHxmdW5jdGlvbihl
KXtyZXR1cm4gdi50eXBlKGUpPT09ImFycmF5In0saXNXaW5kb3c6ZnVuY3Rpb24oZSl7cmV0dXJu
IGUhPW51bGwmJmU9PWUud2luZG93fSxpc051bWVyaWM6ZnVuY3Rpb24oZSl7cmV0dXJuIWlzTmFO
KHBhcnNlRmxvYXQoZSkpJiZpc0Zpbml0ZShlKX0sdHlwZTpmdW5jdGlvbihlKXtyZXR1cm4gZT09
bnVsbD9TdHJpbmcoZSk6T1toLmNhbGwoZSldfHwib2JqZWN0In0saXNQbGFpbk9iamVjdDpmdW5j
dGlvbihlKXtpZighZXx8di50eXBlKGUpIT09Im9iamVjdCJ8fGUubm9kZVR5cGV8fHYuaXNXaW5k
b3coZSkpcmV0dXJuITE7dHJ5e2lmKGUuY29uc3RydWN0b3ImJiFwLmNhbGwoZSwiY29uc3RydWN0
b3IiKSYmIXAuY2FsbChlLmNvbnN0cnVjdG9yLnByb3RvdHlwZSwiaXNQcm90b3R5cGVPZiIpKXJl
dHVybiExfWNhdGNoKG4pe3JldHVybiExfXZhciByO2ZvcihyIGluIGUpO3JldHVybiByPT09dHx8
cC5jYWxsKGUscil9LGlzRW1wdHlPYmplY3Q6ZnVuY3Rpb24oZSl7dmFyIHQ7Zm9yKHQgaW4gZSly
ZXR1cm4hMTtyZXR1cm4hMH0sZXJyb3I6ZnVuY3Rpb24oZSl7dGhyb3cgbmV3IEVycm9yKGUpfSxw
YXJzZUhUTUw6ZnVuY3Rpb24oZSx0LG4pe3ZhciByO3JldHVybiFlfHx0eXBlb2YgZSE9InN0cmlu
ZyI/bnVsbDoodHlwZW9mIHQ9PSJib29sZWFuIiYmKG49dCx0PTApLHQ9dHx8aSwocj1FLmV4ZWMo
ZSkpP1t0LmNyZWF0ZUVsZW1lbnQoclsxXSldOihyPXYuYnVpbGRGcmFnbWVudChbZV0sdCxuP251
bGw6W10pLHYubWVyZ2UoW10sKHIuY2FjaGVhYmxlP3YuY2xvbmUoci5mcmFnbWVudCk6ci5mcmFn
bWVudCkuY2hpbGROb2RlcykpKX0scGFyc2VKU09OOmZ1bmN0aW9uKHQpe2lmKCF0fHx0eXBlb2Yg
dCE9InN0cmluZyIpcmV0dXJuIG51bGw7dD12LnRyaW0odCk7aWYoZS5KU09OJiZlLkpTT04ucGFy
c2UpcmV0dXJuIGUuSlNPTi5wYXJzZSh0KTtpZihTLnRlc3QodC5yZXBsYWNlKFQsIkAiKS5yZXBs
YWNlKE4sIl0iKS5yZXBsYWNlKHgsIiIpKSlyZXR1cm4obmV3IEZ1bmN0aW9uKCJyZXR1cm4gIit0
KSkoKTt2LmVycm9yKCJJbnZhbGlkIEpTT046ICIrdCl9LHBhcnNlWE1MOmZ1bmN0aW9uKG4pe3Zh
ciByLGk7aWYoIW58fHR5cGVvZiBuIT0ic3RyaW5nIilyZXR1cm4gbnVsbDt0cnl7ZS5ET01QYXJz
ZXI/KGk9bmV3IERPTVBhcnNlcixyPWkucGFyc2VGcm9tU3RyaW5nKG4sInRleHQveG1sIikpOihy
PW5ldyBBY3RpdmVYT2JqZWN0KCJNaWNyb3NvZnQuWE1MRE9NIiksci5hc3luYz0iZmFsc2UiLHIu
bG9hZFhNTChuKSl9Y2F0Y2gocyl7cj10fXJldHVybighcnx8IXIuZG9jdW1lbnRFbGVtZW50fHxy
LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJwYXJzZXJlcnJvciIpLmxlbmd0aCkmJnYuZXJyb3IoIklu
dmFsaWQgWE1MOiAiK24pLHJ9LG5vb3A6ZnVuY3Rpb24oKXt9LGdsb2JhbEV2YWw6ZnVuY3Rpb24o
dCl7dCYmZy50ZXN0KHQpJiYoZS5leGVjU2NyaXB0fHxmdW5jdGlvbih0KXtlLmV2YWwuY2FsbChl
LHQpfSkodCl9LGNhbWVsQ2FzZTpmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKEMsIm1zLSIp
LnJlcGxhY2UoayxMKX0sbm9kZU5hbWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5ub2RlTmFtZSYm
ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09dC50b0xvd2VyQ2FzZSgpfSxlYWNoOmZ1bmN0aW9u
KGUsbixyKXt2YXIgaSxzPTAsbz1lLmxlbmd0aCx1PW89PT10fHx2LmlzRnVuY3Rpb24oZSk7aWYo
cil7aWYodSl7Zm9yKGkgaW4gZSlpZihuLmFwcGx5KGVbaV0scik9PT0hMSlicmVha31lbHNlIGZv
cig7czxvOylpZihuLmFwcGx5KGVbcysrXSxyKT09PSExKWJyZWFrfWVsc2UgaWYodSl7Zm9yKGkg
aW4gZSlpZihuLmNhbGwoZVtpXSxpLGVbaV0pPT09ITEpYnJlYWt9ZWxzZSBmb3IoO3M8bzspaWYo
bi5jYWxsKGVbc10scyxlW3MrK10pPT09ITEpYnJlYWs7cmV0dXJuIGV9LHRyaW06ZCYmIWQuY2Fs
bCgiXHVmZWZmXHUwMGEwIik/ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PW51bGw/IiI6ZC5jYWxsKGUp
fTpmdW5jdGlvbihlKXtyZXR1cm4gZT09bnVsbD8iIjooZSsiIikucmVwbGFjZShiLCIiKX0sbWFr
ZUFycmF5OmZ1bmN0aW9uKGUsdCl7dmFyIG4scj10fHxbXTtyZXR1cm4gZSE9bnVsbCYmKG49di50
eXBlKGUpLGUubGVuZ3RoPT1udWxsfHxuPT09InN0cmluZyJ8fG49PT0iZnVuY3Rpb24ifHxuPT09
InJlZ2V4cCJ8fHYuaXNXaW5kb3coZSk/Zi5jYWxsKHIsZSk6di5tZXJnZShyLGUpKSxyfSxpbkFy
cmF5OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcjtpZih0KXtpZihjKXJldHVybiBjLmNhbGwodCxlLG4p
O3I9dC5sZW5ndGgsbj1uP248MD9NYXRoLm1heCgwLHIrbik6bjowO2Zvcig7bjxyO24rKylpZihu
IGluIHQmJnRbbl09PT1lKXJldHVybiBufXJldHVybi0xfSxtZXJnZTpmdW5jdGlvbihlLG4pe3Zh
ciByPW4ubGVuZ3RoLGk9ZS5sZW5ndGgscz0wO2lmKHR5cGVvZiByPT0ibnVtYmVyIilmb3IoO3M8
cjtzKyspZVtpKytdPW5bc107ZWxzZSB3aGlsZShuW3NdIT09dCllW2krK109bltzKytdO3JldHVy
biBlLmxlbmd0aD1pLGV9LGdyZXA6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGk9W10scz0wLG89ZS5s
ZW5ndGg7bj0hIW47Zm9yKDtzPG87cysrKXI9ISF0KGVbc10scyksbiE9PXImJmkucHVzaChlW3Nd
KTtyZXR1cm4gaX0sbWFwOmZ1bmN0aW9uKGUsbixyKXt2YXIgaSxzLG89W10sdT0wLGE9ZS5sZW5n
dGgsZj1lIGluc3RhbmNlb2Ygdnx8YSE9PXQmJnR5cGVvZiBhPT0ibnVtYmVyIiYmKGE+MCYmZVsw
XSYmZVthLTFdfHxhPT09MHx8di5pc0FycmF5KGUpKTtpZihmKWZvcig7dTxhO3UrKylpPW4oZVt1
XSx1LHIpLGkhPW51bGwmJihvW28ubGVuZ3RoXT1pKTtlbHNlIGZvcihzIGluIGUpaT1uKGVbc10s
cyxyKSxpIT1udWxsJiYob1tvLmxlbmd0aF09aSk7cmV0dXJuIG8uY29uY2F0LmFwcGx5KFtdLG8p
fSxndWlkOjEscHJveHk6ZnVuY3Rpb24oZSxuKXt2YXIgcixpLHM7cmV0dXJuIHR5cGVvZiBuPT0i
c3RyaW5nIiYmKHI9ZVtuXSxuPWUsZT1yKSx2LmlzRnVuY3Rpb24oZSk/KGk9bC5jYWxsKGFyZ3Vt
ZW50cywyKSxzPWZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkobixpLmNvbmNhdChsLmNhbGwoYXJn
dW1lbnRzKSkpfSxzLmd1aWQ9ZS5ndWlkPWUuZ3VpZHx8di5ndWlkKysscyk6dH0sYWNjZXNzOmZ1
bmN0aW9uKGUsbixyLGkscyxvLHUpe3ZhciBhLGY9cj09bnVsbCxsPTAsYz1lLmxlbmd0aDtpZihy
JiZ0eXBlb2Ygcj09Im9iamVjdCIpe2ZvcihsIGluIHIpdi5hY2Nlc3MoZSxuLGwscltsXSwxLG8s
aSk7cz0xfWVsc2UgaWYoaSE9PXQpe2E9dT09PXQmJnYuaXNGdW5jdGlvbihpKSxmJiYoYT8oYT1u
LG49ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBhLmNhbGwodihlKSxuKX0pOihuLmNhbGwoZSxpKSxu
PW51bGwpKTtpZihuKWZvcig7bDxjO2wrKyluKGVbbF0scixhP2kuY2FsbChlW2xdLGwsbihlW2xd
LHIpKTppLHUpO3M9MX1yZXR1cm4gcz9lOmY/bi5jYWxsKGUpOmM/bihlWzBdLHIpOm99LG5vdzpm
dW5jdGlvbigpe3JldHVybihuZXcgRGF0ZSkuZ2V0VGltZSgpfX0pLHYucmVhZHkucHJvbWlzZT1m
dW5jdGlvbih0KXtpZighcil7cj12LkRlZmVycmVkKCk7aWYoaS5yZWFkeVN0YXRlPT09ImNvbXBs
ZXRlIilzZXRUaW1lb3V0KHYucmVhZHksMSk7ZWxzZSBpZihpLmFkZEV2ZW50TGlzdGVuZXIpaS5h
ZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIixBLCExKSxlLmFkZEV2ZW50TGlzdGVu
ZXIoImxvYWQiLHYucmVhZHksITEpO2Vsc2V7aS5hdHRhY2hFdmVudCgib25yZWFkeXN0YXRlY2hh
bmdlIixBKSxlLmF0dGFjaEV2ZW50KCJvbmxvYWQiLHYucmVhZHkpO3ZhciBuPSExO3RyeXtuPWUu
ZnJhbWVFbGVtZW50PT1udWxsJiZpLmRvY3VtZW50RWxlbWVudH1jYXRjaChzKXt9biYmbi5kb1Nj
cm9sbCYmZnVuY3Rpb24gbygpe2lmKCF2LmlzUmVhZHkpe3RyeXtuLmRvU2Nyb2xsKCJsZWZ0Iil9
Y2F0Y2goZSl7cmV0dXJuIHNldFRpbWVvdXQobyw1MCl9di5yZWFkeSgpfX0oKX19cmV0dXJuIHIu
cHJvbWlzZSh0KX0sdi5lYWNoKCJCb29sZWFuIE51bWJlciBTdHJpbmcgRnVuY3Rpb24gQXJyYXkg
RGF0ZSBSZWdFeHAgT2JqZWN0Ii5zcGxpdCgiICIpLGZ1bmN0aW9uKGUsdCl7T1siW29iamVjdCAi
K3QrIl0iXT10LnRvTG93ZXJDYXNlKCl9KSxuPXYoaSk7dmFyIE09e307di5DYWxsYmFja3M9ZnVu
Y3Rpb24oZSl7ZT10eXBlb2YgZT09InN0cmluZyI/TVtlXXx8XyhlKTp2LmV4dGVuZCh7fSxlKTt2
YXIgbixyLGkscyxvLHUsYT1bXSxmPSFlLm9uY2UmJltdLGw9ZnVuY3Rpb24odCl7bj1lLm1lbW9y
eSYmdCxyPSEwLHU9c3x8MCxzPTAsbz1hLmxlbmd0aCxpPSEwO2Zvcig7YSYmdTxvO3UrKylpZihh
W3VdLmFwcGx5KHRbMF0sdFsxXSk9PT0hMSYmZS5zdG9wT25GYWxzZSl7bj0hMTticmVha31pPSEx
LGEmJihmP2YubGVuZ3RoJiZsKGYuc2hpZnQoKSk6bj9hPVtdOmMuZGlzYWJsZSgpKX0sYz17YWRk
OmZ1bmN0aW9uKCl7aWYoYSl7dmFyIHQ9YS5sZW5ndGg7KGZ1bmN0aW9uIHIodCl7di5lYWNoKHQs
ZnVuY3Rpb24odCxuKXt2YXIgaT12LnR5cGUobik7aT09PSJmdW5jdGlvbiI/KCFlLnVuaXF1ZXx8
IWMuaGFzKG4pKSYmYS5wdXNoKG4pOm4mJm4ubGVuZ3RoJiZpIT09InN0cmluZyImJnIobil9KX0p
KGFyZ3VtZW50cyksaT9vPWEubGVuZ3RoOm4mJihzPXQsbChuKSl9cmV0dXJuIHRoaXN9LHJlbW92
ZTpmdW5jdGlvbigpe3JldHVybiBhJiZ2LmVhY2goYXJndW1lbnRzLGZ1bmN0aW9uKGUsdCl7dmFy
IG47d2hpbGUoKG49di5pbkFycmF5KHQsYSxuKSk+LTEpYS5zcGxpY2UobiwxKSxpJiYobjw9byYm
by0tLG48PXUmJnUtLSl9KSx0aGlzfSxoYXM6ZnVuY3Rpb24oZSl7cmV0dXJuIHYuaW5BcnJheShl
LGEpPi0xfSxlbXB0eTpmdW5jdGlvbigpe3JldHVybiBhPVtdLHRoaXN9LGRpc2FibGU6ZnVuY3Rp
b24oKXtyZXR1cm4gYT1mPW49dCx0aGlzfSxkaXNhYmxlZDpmdW5jdGlvbigpe3JldHVybiFhfSxs
b2NrOmZ1bmN0aW9uKCl7cmV0dXJuIGY9dCxufHxjLmRpc2FibGUoKSx0aGlzfSxsb2NrZWQ6ZnVu
Y3Rpb24oKXtyZXR1cm4hZn0sZmlyZVdpdGg6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD10fHxbXSx0
PVtlLHQuc2xpY2U/dC5zbGljZSgpOnRdLGEmJighcnx8ZikmJihpP2YucHVzaCh0KTpsKHQpKSx0
aGlzfSxmaXJlOmZ1bmN0aW9uKCl7cmV0dXJuIGMuZmlyZVdpdGgodGhpcyxhcmd1bWVudHMpLHRo
aXN9LGZpcmVkOmZ1bmN0aW9uKCl7cmV0dXJuISFyfX07cmV0dXJuIGN9LHYuZXh0ZW5kKHtEZWZl
cnJlZDpmdW5jdGlvbihlKXt2YXIgdD1bWyJyZXNvbHZlIiwiZG9uZSIsdi5DYWxsYmFja3MoIm9u
Y2UgbWVtb3J5IiksInJlc29sdmVkIl0sWyJyZWplY3QiLCJmYWlsIix2LkNhbGxiYWNrcygib25j
ZSBtZW1vcnkiKSwicmVqZWN0ZWQiXSxbIm5vdGlmeSIsInByb2dyZXNzIix2LkNhbGxiYWNrcygi
bWVtb3J5IildXSxuPSJwZW5kaW5nIixyPXtzdGF0ZTpmdW5jdGlvbigpe3JldHVybiBufSxhbHdh
eXM6ZnVuY3Rpb24oKXtyZXR1cm4gaS5kb25lKGFyZ3VtZW50cykuZmFpbChhcmd1bWVudHMpLHRo
aXN9LHRoZW46ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHM7cmV0dXJuIHYuRGVmZXJyZWQoZnVu
Y3Rpb24obil7di5lYWNoKHQsZnVuY3Rpb24odCxyKXt2YXIgcz1yWzBdLG89ZVt0XTtpW3JbMV1d
KHYuaXNGdW5jdGlvbihvKT9mdW5jdGlvbigpe3ZhciBlPW8uYXBwbHkodGhpcyxhcmd1bWVudHMp
O2UmJnYuaXNGdW5jdGlvbihlLnByb21pc2UpP2UucHJvbWlzZSgpLmRvbmUobi5yZXNvbHZlKS5m
YWlsKG4ucmVqZWN0KS5wcm9ncmVzcyhuLm5vdGlmeSk6bltzKyJXaXRoIl0odGhpcz09PWk/bjp0
aGlzLFtlXSl9Om5bc10pfSksZT1udWxsfSkucHJvbWlzZSgpfSxwcm9taXNlOmZ1bmN0aW9uKGUp
e3JldHVybiBlIT1udWxsP3YuZXh0ZW5kKGUscik6cn19LGk9e307cmV0dXJuIHIucGlwZT1yLnRo
ZW4sdi5lYWNoKHQsZnVuY3Rpb24oZSxzKXt2YXIgbz1zWzJdLHU9c1szXTtyW3NbMV1dPW8uYWRk
LHUmJm8uYWRkKGZ1bmN0aW9uKCl7bj11fSx0W2VeMV1bMl0uZGlzYWJsZSx0WzJdWzJdLmxvY2sp
LGlbc1swXV09by5maXJlLGlbc1swXSsiV2l0aCJdPW8uZmlyZVdpdGh9KSxyLnByb21pc2UoaSks
ZSYmZS5jYWxsKGksaSksaX0sd2hlbjpmdW5jdGlvbihlKXt2YXIgdD0wLG49bC5jYWxsKGFyZ3Vt
ZW50cykscj1uLmxlbmd0aCxpPXIhPT0xfHxlJiZ2LmlzRnVuY3Rpb24oZS5wcm9taXNlKT9yOjAs
cz1pPT09MT9lOnYuRGVmZXJyZWQoKSxvPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZnVuY3Rpb24o
cil7dFtlXT10aGlzLG5bZV09YXJndW1lbnRzLmxlbmd0aD4xP2wuY2FsbChhcmd1bWVudHMpOnIs
bj09PXU/cy5ub3RpZnlXaXRoKHQsbik6LS1pfHxzLnJlc29sdmVXaXRoKHQsbil9fSx1LGEsZjtp
ZihyPjEpe3U9bmV3IEFycmF5KHIpLGE9bmV3IEFycmF5KHIpLGY9bmV3IEFycmF5KHIpO2Zvcig7
dDxyO3QrKyluW3RdJiZ2LmlzRnVuY3Rpb24oblt0XS5wcm9taXNlKT9uW3RdLnByb21pc2UoKS5k
b25lKG8odCxmLG4pKS5mYWlsKHMucmVqZWN0KS5wcm9ncmVzcyhvKHQsYSx1KSk6LS1pfXJldHVy
biBpfHxzLnJlc29sdmVXaXRoKGYsbikscy5wcm9taXNlKCl9fSksdi5zdXBwb3J0PWZ1bmN0aW9u
KCl7dmFyIHQsbixyLHMsbyx1LGEsZixsLGMsaCxwPWkuY3JlYXRlRWxlbWVudCgiZGl2Iik7cC5z
ZXRBdHRyaWJ1dGUoImNsYXNzTmFtZSIsInQiKSxwLmlubmVySFRNTD0iICA8bGluay8+PHRhYmxl
PjwvdGFibGU+PGEgaHJlZj0nL2EnPmE8L2E+PGlucHV0IHR5cGU9J2NoZWNrYm94Jy8+IixuPXAu
Z2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKSxyPXAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImEiKVsw
XTtpZighbnx8IXJ8fCFuLmxlbmd0aClyZXR1cm57fTtzPWkuY3JlYXRlRWxlbWVudCgic2VsZWN0
Iiksbz1zLmFwcGVuZENoaWxkKGkuY3JlYXRlRWxlbWVudCgib3B0aW9uIikpLHU9cC5nZXRFbGVt
ZW50c0J5VGFnTmFtZSgiaW5wdXQiKVswXSxyLnN0eWxlLmNzc1RleHQ9InRvcDoxcHg7ZmxvYXQ6
bGVmdDtvcGFjaXR5Oi41Iix0PXtsZWFkaW5nV2hpdGVzcGFjZTpwLmZpcnN0Q2hpbGQubm9kZVR5
cGU9PT0zLHRib2R5OiFwLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0Ym9keSIpLmxlbmd0aCxodG1s
U2VyaWFsaXplOiEhcC5nZXRFbGVtZW50c0J5VGFnTmFtZSgibGluayIpLmxlbmd0aCxzdHlsZTov
dG9wLy50ZXN0KHIuZ2V0QXR0cmlidXRlKCJzdHlsZSIpKSxocmVmTm9ybWFsaXplZDpyLmdldEF0
dHJpYnV0ZSgiaHJlZiIpPT09Ii9hIixvcGFjaXR5Oi9eMC41Ly50ZXN0KHIuc3R5bGUub3BhY2l0
eSksY3NzRmxvYXQ6ISFyLnN0eWxlLmNzc0Zsb2F0LGNoZWNrT246dS52YWx1ZT09PSJvbiIsb3B0
U2VsZWN0ZWQ6by5zZWxlY3RlZCxnZXRTZXRBdHRyaWJ1dGU6cC5jbGFzc05hbWUhPT0idCIsZW5j
dHlwZTohIWkuY3JlYXRlRWxlbWVudCgiZm9ybSIpLmVuY3R5cGUsaHRtbDVDbG9uZTppLmNyZWF0
ZUVsZW1lbnQoIm5hdiIpLmNsb25lTm9kZSghMCkub3V0ZXJIVE1MIT09Ijw6bmF2PjwvOm5hdj4i
LGJveE1vZGVsOmkuY29tcGF0TW9kZT09PSJDU1MxQ29tcGF0IixzdWJtaXRCdWJibGVzOiEwLGNo
YW5nZUJ1YmJsZXM6ITAsZm9jdXNpbkJ1YmJsZXM6ITEsZGVsZXRlRXhwYW5kbzohMCxub0Nsb25l
RXZlbnQ6ITAsaW5saW5lQmxvY2tOZWVkc0xheW91dDohMSxzaHJpbmtXcmFwQmxvY2tzOiExLHJl
bGlhYmxlTWFyZ2luUmlnaHQ6ITAsYm94U2l6aW5nUmVsaWFibGU6ITAscGl4ZWxQb3NpdGlvbjoh
MX0sdS5jaGVja2VkPSEwLHQubm9DbG9uZUNoZWNrZWQ9dS5jbG9uZU5vZGUoITApLmNoZWNrZWQs
cy5kaXNhYmxlZD0hMCx0Lm9wdERpc2FibGVkPSFvLmRpc2FibGVkO3RyeXtkZWxldGUgcC50ZXN0
fWNhdGNoKGQpe3QuZGVsZXRlRXhwYW5kbz0hMX0hcC5hZGRFdmVudExpc3RlbmVyJiZwLmF0dGFj
aEV2ZW50JiZwLmZpcmVFdmVudCYmKHAuYXR0YWNoRXZlbnQoIm9uY2xpY2siLGg9ZnVuY3Rpb24o
KXt0Lm5vQ2xvbmVFdmVudD0hMX0pLHAuY2xvbmVOb2RlKCEwKS5maXJlRXZlbnQoIm9uY2xpY2si
KSxwLmRldGFjaEV2ZW50KCJvbmNsaWNrIixoKSksdT1pLmNyZWF0ZUVsZW1lbnQoImlucHV0Iiks
dS52YWx1ZT0idCIsdS5zZXRBdHRyaWJ1dGUoInR5cGUiLCJyYWRpbyIpLHQucmFkaW9WYWx1ZT11
LnZhbHVlPT09InQiLHUuc2V0QXR0cmlidXRlKCJjaGVja2VkIiwiY2hlY2tlZCIpLHUuc2V0QXR0
cmlidXRlKCJuYW1lIiwidCIpLHAuYXBwZW5kQ2hpbGQodSksYT1pLmNyZWF0ZURvY3VtZW50RnJh
Z21lbnQoKSxhLmFwcGVuZENoaWxkKHAubGFzdENoaWxkKSx0LmNoZWNrQ2xvbmU9YS5jbG9uZU5v
ZGUoITApLmNsb25lTm9kZSghMCkubGFzdENoaWxkLmNoZWNrZWQsdC5hcHBlbmRDaGVja2VkPXUu
Y2hlY2tlZCxhLnJlbW92ZUNoaWxkKHUpLGEuYXBwZW5kQ2hpbGQocCk7aWYocC5hdHRhY2hFdmVu
dClmb3IobCBpbntzdWJtaXQ6ITAsY2hhbmdlOiEwLGZvY3VzaW46ITB9KWY9Im9uIitsLGM9ZiBp
biBwLGN8fChwLnNldEF0dHJpYnV0ZShmLCJyZXR1cm47IiksYz10eXBlb2YgcFtmXT09ImZ1bmN0
aW9uIiksdFtsKyJCdWJibGVzIl09YztyZXR1cm4gdihmdW5jdGlvbigpe3ZhciBuLHIscyxvLHU9
InBhZGRpbmc6MDttYXJnaW46MDtib3JkZXI6MDtkaXNwbGF5OmJsb2NrO292ZXJmbG93OmhpZGRl
bjsiLGE9aS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYm9keSIpWzBdO2lmKCFhKXJldHVybjtuPWku
Y3JlYXRlRWxlbWVudCgiZGl2Iiksbi5zdHlsZS5jc3NUZXh0PSJ2aXNpYmlsaXR5OmhpZGRlbjti
b3JkZXI6MDt3aWR0aDowO2hlaWdodDowO3Bvc2l0aW9uOnN0YXRpYzt0b3A6MDttYXJnaW4tdG9w
OjFweCIsYS5pbnNlcnRCZWZvcmUobixhLmZpcnN0Q2hpbGQpLHI9aS5jcmVhdGVFbGVtZW50KCJk
aXYiKSxuLmFwcGVuZENoaWxkKHIpLHIuaW5uZXJIVE1MPSI8dGFibGU+PHRyPjx0ZD48L3RkPjx0
ZD50PC90ZD48L3RyPjwvdGFibGU+IixzPXIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRkIiksc1sw
XS5zdHlsZS5jc3NUZXh0PSJwYWRkaW5nOjA7bWFyZ2luOjA7Ym9yZGVyOjA7ZGlzcGxheTpub25l
IixjPXNbMF0ub2Zmc2V0SGVpZ2h0PT09MCxzWzBdLnN0eWxlLmRpc3BsYXk9IiIsc1sxXS5zdHls
ZS5kaXNwbGF5PSJub25lIix0LnJlbGlhYmxlSGlkZGVuT2Zmc2V0cz1jJiZzWzBdLm9mZnNldEhl
aWdodD09PTAsci5pbm5lckhUTUw9IiIsci5zdHlsZS5jc3NUZXh0PSJib3gtc2l6aW5nOmJvcmRl
ci1ib3g7LW1vei1ib3gtc2l6aW5nOmJvcmRlci1ib3g7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRl
ci1ib3g7cGFkZGluZzoxcHg7Ym9yZGVyOjFweDtkaXNwbGF5OmJsb2NrO3dpZHRoOjRweDttYXJn
aW4tdG9wOjElO3Bvc2l0aW9uOmFic29sdXRlO3RvcDoxJTsiLHQuYm94U2l6aW5nPXIub2Zmc2V0
V2lkdGg9PT00LHQuZG9lc05vdEluY2x1ZGVNYXJnaW5JbkJvZHlPZmZzZXQ9YS5vZmZzZXRUb3Ah
PT0xLGUuZ2V0Q29tcHV0ZWRTdHlsZSYmKHQucGl4ZWxQb3NpdGlvbj0oZS5nZXRDb21wdXRlZFN0
eWxlKHIsbnVsbCl8fHt9KS50b3AhPT0iMSUiLHQuYm94U2l6aW5nUmVsaWFibGU9KGUuZ2V0Q29t
cHV0ZWRTdHlsZShyLG51bGwpfHx7d2lkdGg6IjRweCJ9KS53aWR0aD09PSI0cHgiLG89aS5jcmVh
dGVFbGVtZW50KCJkaXYiKSxvLnN0eWxlLmNzc1RleHQ9ci5zdHlsZS5jc3NUZXh0PXUsby5zdHls
ZS5tYXJnaW5SaWdodD1vLnN0eWxlLndpZHRoPSIwIixyLnN0eWxlLndpZHRoPSIxcHgiLHIuYXBw
ZW5kQ2hpbGQobyksdC5yZWxpYWJsZU1hcmdpblJpZ2h0PSFwYXJzZUZsb2F0KChlLmdldENvbXB1
dGVkU3R5bGUobyxudWxsKXx8e30pLm1hcmdpblJpZ2h0KSksdHlwZW9mIHIuc3R5bGUuem9vbSE9
InVuZGVmaW5lZCImJihyLmlubmVySFRNTD0iIixyLnN0eWxlLmNzc1RleHQ9dSsid2lkdGg6MXB4
O3BhZGRpbmc6MXB4O2Rpc3BsYXk6aW5saW5lO3pvb206MSIsdC5pbmxpbmVCbG9ja05lZWRzTGF5
b3V0PXIub2Zmc2V0V2lkdGg9PT0zLHIuc3R5bGUuZGlzcGxheT0iYmxvY2siLHIuc3R5bGUub3Zl
cmZsb3c9InZpc2libGUiLHIuaW5uZXJIVE1MPSI8ZGl2PjwvZGl2PiIsci5maXJzdENoaWxkLnN0
eWxlLndpZHRoPSI1cHgiLHQuc2hyaW5rV3JhcEJsb2Nrcz1yLm9mZnNldFdpZHRoIT09MyxuLnN0
eWxlLnpvb209MSksYS5yZW1vdmVDaGlsZChuKSxuPXI9cz1vPW51bGx9KSxhLnJlbW92ZUNoaWxk
KHApLG49cj1zPW89dT1hPXA9bnVsbCx0fSgpO3ZhciBEPS8oPzpce1tcc1xTXSpcfXxcW1tcc1xT
XSpcXSkkLyxQPS8oW0EtWl0pL2c7di5leHRlbmQoe2NhY2hlOnt9LGRlbGV0ZWRJZHM6W10sdXVp
ZDowLGV4cGFuZG86ImpRdWVyeSIrKHYuZm4uanF1ZXJ5K01hdGgucmFuZG9tKCkpLnJlcGxhY2Uo
L1xEL2csIiIpLG5vRGF0YTp7ZW1iZWQ6ITAsb2JqZWN0OiJjbHNpZDpEMjdDREI2RS1BRTZELTEx
Y2YtOTZCOC00NDQ1NTM1NDAwMDAiLGFwcGxldDohMH0saGFzRGF0YTpmdW5jdGlvbihlKXtyZXR1
cm4gZT1lLm5vZGVUeXBlP3YuY2FjaGVbZVt2LmV4cGFuZG9dXTplW3YuZXhwYW5kb10sISFlJiYh
QihlKX0sZGF0YTpmdW5jdGlvbihlLG4scixpKXtpZighdi5hY2NlcHREYXRhKGUpKXJldHVybjt2
YXIgcyxvLHU9di5leHBhbmRvLGE9dHlwZW9mIG49PSJzdHJpbmciLGY9ZS5ub2RlVHlwZSxsPWY/
di5jYWNoZTplLGM9Zj9lW3VdOmVbdV0mJnU7aWYoKCFjfHwhbFtjXXx8IWkmJiFsW2NdLmRhdGEp
JiZhJiZyPT09dClyZXR1cm47Y3x8KGY/ZVt1XT1jPXYuZGVsZXRlZElkcy5wb3AoKXx8di5ndWlk
Kys6Yz11KSxsW2NdfHwobFtjXT17fSxmfHwobFtjXS50b0pTT049di5ub29wKSk7aWYodHlwZW9m
IG49PSJvYmplY3QifHx0eXBlb2Ygbj09ImZ1bmN0aW9uIilpP2xbY109di5leHRlbmQobFtjXSxu
KTpsW2NdLmRhdGE9di5leHRlbmQobFtjXS5kYXRhLG4pO3JldHVybiBzPWxbY10saXx8KHMuZGF0
YXx8KHMuZGF0YT17fSkscz1zLmRhdGEpLHIhPT10JiYoc1t2LmNhbWVsQ2FzZShuKV09ciksYT8o
bz1zW25dLG89PW51bGwmJihvPXNbdi5jYW1lbENhc2UobildKSk6bz1zLG99LHJlbW92ZURhdGE6
ZnVuY3Rpb24oZSx0LG4pe2lmKCF2LmFjY2VwdERhdGEoZSkpcmV0dXJuO3ZhciByLGkscyxvPWUu
bm9kZVR5cGUsdT1vP3YuY2FjaGU6ZSxhPW8/ZVt2LmV4cGFuZG9dOnYuZXhwYW5kbztpZighdVth
XSlyZXR1cm47aWYodCl7cj1uP3VbYV06dVthXS5kYXRhO2lmKHIpe3YuaXNBcnJheSh0KXx8KHQg
aW4gcj90PVt0XToodD12LmNhbWVsQ2FzZSh0KSx0IGluIHI/dD1bdF06dD10LnNwbGl0KCIgIikp
KTtmb3IoaT0wLHM9dC5sZW5ndGg7aTxzO2krKylkZWxldGUgclt0W2ldXTtpZighKG4/Qjp2Lmlz
RW1wdHlPYmplY3QpKHIpKXJldHVybn19aWYoIW4pe2RlbGV0ZSB1W2FdLmRhdGE7aWYoIUIodVth
XSkpcmV0dXJufW8/di5jbGVhbkRhdGEoW2VdLCEwKTp2LnN1cHBvcnQuZGVsZXRlRXhwYW5kb3x8
dSE9dS53aW5kb3c/ZGVsZXRlIHVbYV06dVthXT1udWxsfSxfZGF0YTpmdW5jdGlvbihlLHQsbil7
cmV0dXJuIHYuZGF0YShlLHQsbiwhMCl9LGFjY2VwdERhdGE6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5u
b2RlTmFtZSYmdi5ub0RhdGFbZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXTtyZXR1cm4hdHx8dCE9
PSEwJiZlLmdldEF0dHJpYnV0ZSgiY2xhc3NpZCIpPT09dH19KSx2LmZuLmV4dGVuZCh7ZGF0YTpm
dW5jdGlvbihlLG4pe3ZhciByLGkscyxvLHUsYT10aGlzWzBdLGY9MCxsPW51bGw7aWYoZT09PXQp
e2lmKHRoaXMubGVuZ3RoKXtsPXYuZGF0YShhKTtpZihhLm5vZGVUeXBlPT09MSYmIXYuX2RhdGEo
YSwicGFyc2VkQXR0cnMiKSl7cz1hLmF0dHJpYnV0ZXM7Zm9yKHU9cy5sZW5ndGg7Zjx1O2YrKylv
PXNbZl0ubmFtZSxvLmluZGV4T2YoImRhdGEtIil8fChvPXYuY2FtZWxDYXNlKG8uc3Vic3RyaW5n
KDUpKSxIKGEsbyxsW29dKSk7di5fZGF0YShhLCJwYXJzZWRBdHRycyIsITApfX1yZXR1cm4gbH1y
ZXR1cm4gdHlwZW9mIGU9PSJvYmplY3QiP3RoaXMuZWFjaChmdW5jdGlvbigpe3YuZGF0YSh0aGlz
LGUpfSk6KHI9ZS5zcGxpdCgiLiIsMiksclsxXT1yWzFdPyIuIityWzFdOiIiLGk9clsxXSsiISIs
di5hY2Nlc3ModGhpcyxmdW5jdGlvbihuKXtpZihuPT09dClyZXR1cm4gbD10aGlzLnRyaWdnZXJI
YW5kbGVyKCJnZXREYXRhIitpLFtyWzBdXSksbD09PXQmJmEmJihsPXYuZGF0YShhLGUpLGw9SChh
LGUsbCkpLGw9PT10JiZyWzFdP3RoaXMuZGF0YShyWzBdKTpsO3JbMV09bix0aGlzLmVhY2goZnVu
Y3Rpb24oKXt2YXIgdD12KHRoaXMpO3QudHJpZ2dlckhhbmRsZXIoInNldERhdGEiK2ksciksdi5k
YXRhKHRoaXMsZSxuKSx0LnRyaWdnZXJIYW5kbGVyKCJjaGFuZ2VEYXRhIitpLHIpfSl9LG51bGws
bixhcmd1bWVudHMubGVuZ3RoPjEsbnVsbCwhMSkpfSxyZW1vdmVEYXRhOmZ1bmN0aW9uKGUpe3Jl
dHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2LnJlbW92ZURhdGEodGhpcyxlKX0pfX0pLHYuZXh0
ZW5kKHtxdWV1ZTpmdW5jdGlvbihlLHQsbil7dmFyIHI7aWYoZSlyZXR1cm4gdD0odHx8ImZ4Iikr
InF1ZXVlIixyPXYuX2RhdGEoZSx0KSxuJiYoIXJ8fHYuaXNBcnJheShuKT9yPXYuX2RhdGEoZSx0
LHYubWFrZUFycmF5KG4pKTpyLnB1c2gobikpLHJ8fFtdfSxkZXF1ZXVlOmZ1bmN0aW9uKGUsdCl7
dD10fHwiZngiO3ZhciBuPXYucXVldWUoZSx0KSxyPW4ubGVuZ3RoLGk9bi5zaGlmdCgpLHM9di5f
cXVldWVIb29rcyhlLHQpLG89ZnVuY3Rpb24oKXt2LmRlcXVldWUoZSx0KX07aT09PSJpbnByb2dy
ZXNzIiYmKGk9bi5zaGlmdCgpLHItLSksaSYmKHQ9PT0iZngiJiZuLnVuc2hpZnQoImlucHJvZ3Jl
c3MiKSxkZWxldGUgcy5zdG9wLGkuY2FsbChlLG8scykpLCFyJiZzJiZzLmVtcHR5LmZpcmUoKX0s
X3F1ZXVlSG9va3M6ZnVuY3Rpb24oZSx0KXt2YXIgbj10KyJxdWV1ZUhvb2tzIjtyZXR1cm4gdi5f
ZGF0YShlLG4pfHx2Ll9kYXRhKGUsbix7ZW1wdHk6di5DYWxsYmFja3MoIm9uY2UgbWVtb3J5Iiku
YWRkKGZ1bmN0aW9uKCl7di5yZW1vdmVEYXRhKGUsdCsicXVldWUiLCEwKSx2LnJlbW92ZURhdGEo
ZSxuLCEwKX0pfSl9fSksdi5mbi5leHRlbmQoe3F1ZXVlOmZ1bmN0aW9uKGUsbil7dmFyIHI9Mjty
ZXR1cm4gdHlwZW9mIGUhPSJzdHJpbmciJiYobj1lLGU9ImZ4IixyLS0pLGFyZ3VtZW50cy5sZW5n
dGg8cj92LnF1ZXVlKHRoaXNbMF0sZSk6bj09PXQ/dGhpczp0aGlzLmVhY2goZnVuY3Rpb24oKXt2
YXIgdD12LnF1ZXVlKHRoaXMsZSxuKTt2Ll9xdWV1ZUhvb2tzKHRoaXMsZSksZT09PSJmeCImJnRb
MF0hPT0iaW5wcm9ncmVzcyImJnYuZGVxdWV1ZSh0aGlzLGUpfSl9LGRlcXVldWU6ZnVuY3Rpb24o
ZSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3YuZGVxdWV1ZSh0aGlzLGUpfSl9LGRlbGF5
OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9di5meD92LmZ4LnNwZWVkc1tlXXx8ZTplLHQ9dHx8ImZ4
Iix0aGlzLnF1ZXVlKHQsZnVuY3Rpb24odCxuKXt2YXIgcj1zZXRUaW1lb3V0KHQsZSk7bi5zdG9w
PWZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KHIpfX0pfSxjbGVhclF1ZXVlOmZ1bmN0aW9uKGUpe3Jl
dHVybiB0aGlzLnF1ZXVlKGV8fCJmeCIsW10pfSxwcm9taXNlOmZ1bmN0aW9uKGUsbil7dmFyIHIs
aT0xLHM9di5EZWZlcnJlZCgpLG89dGhpcyx1PXRoaXMubGVuZ3RoLGE9ZnVuY3Rpb24oKXstLWl8
fHMucmVzb2x2ZVdpdGgobyxbb10pfTt0eXBlb2YgZSE9InN0cmluZyImJihuPWUsZT10KSxlPWV8
fCJmeCI7d2hpbGUodS0tKXI9di5fZGF0YShvW3VdLGUrInF1ZXVlSG9va3MiKSxyJiZyLmVtcHR5
JiYoaSsrLHIuZW1wdHkuYWRkKGEpKTtyZXR1cm4gYSgpLHMucHJvbWlzZShuKX19KTt2YXIgaixG
LEkscT0vW1x0XHJcbl0vZyxSPS9cci9nLFU9L14oPzpidXR0b258aW5wdXQpJC9pLHo9L14oPzpi
dXR0b258aW5wdXR8b2JqZWN0fHNlbGVjdHx0ZXh0YXJlYSkkL2ksVz0vXmEoPzpyZWF8KSQvaSxY
PS9eKD86YXV0b2ZvY3VzfGF1dG9wbGF5fGFzeW5jfGNoZWNrZWR8Y29udHJvbHN8ZGVmZXJ8ZGlz
YWJsZWR8aGlkZGVufGxvb3B8bXVsdGlwbGV8b3BlbnxyZWFkb25seXxyZXF1aXJlZHxzY29wZWR8
c2VsZWN0ZWQpJC9pLFY9di5zdXBwb3J0LmdldFNldEF0dHJpYnV0ZTt2LmZuLmV4dGVuZCh7YXR0
cjpmdW5jdGlvbihlLHQpe3JldHVybiB2LmFjY2Vzcyh0aGlzLHYuYXR0cixlLHQsYXJndW1lbnRz
Lmxlbmd0aD4xKX0scmVtb3ZlQXR0cjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0
aW9uKCl7di5yZW1vdmVBdHRyKHRoaXMsZSl9KX0scHJvcDpmdW5jdGlvbihlLHQpe3JldHVybiB2
LmFjY2Vzcyh0aGlzLHYucHJvcCxlLHQsYXJndW1lbnRzLmxlbmd0aD4xKX0scmVtb3ZlUHJvcDpm
dW5jdGlvbihlKXtyZXR1cm4gZT12LnByb3BGaXhbZV18fGUsdGhpcy5lYWNoKGZ1bmN0aW9uKCl7
dHJ5e3RoaXNbZV09dCxkZWxldGUgdGhpc1tlXX1jYXRjaChuKXt9fSl9LGFkZENsYXNzOmZ1bmN0
aW9uKGUpe3ZhciB0LG4scixpLHMsbyx1O2lmKHYuaXNGdW5jdGlvbihlKSlyZXR1cm4gdGhpcy5l
YWNoKGZ1bmN0aW9uKHQpe3YodGhpcykuYWRkQ2xhc3MoZS5jYWxsKHRoaXMsdCx0aGlzLmNsYXNz
TmFtZSkpfSk7aWYoZSYmdHlwZW9mIGU9PSJzdHJpbmciKXt0PWUuc3BsaXQoeSk7Zm9yKG49MCxy
PXRoaXMubGVuZ3RoO248cjtuKyspe2k9dGhpc1tuXTtpZihpLm5vZGVUeXBlPT09MSlpZighaS5j
bGFzc05hbWUmJnQubGVuZ3RoPT09MSlpLmNsYXNzTmFtZT1lO2Vsc2V7cz0iICIraS5jbGFzc05h
bWUrIiAiO2ZvcihvPTAsdT10Lmxlbmd0aDtvPHU7bysrKXMuaW5kZXhPZigiICIrdFtvXSsiICIp
PDAmJihzKz10W29dKyIgIik7aS5jbGFzc05hbWU9di50cmltKHMpfX19cmV0dXJuIHRoaXN9LHJl
bW92ZUNsYXNzOmZ1bmN0aW9uKGUpe3ZhciBuLHIsaSxzLG8sdSxhO2lmKHYuaXNGdW5jdGlvbihl
KSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKHQpe3YodGhpcykucmVtb3ZlQ2xhc3MoZS5jYWxs
KHRoaXMsdCx0aGlzLmNsYXNzTmFtZSkpfSk7aWYoZSYmdHlwZW9mIGU9PSJzdHJpbmcifHxlPT09
dCl7bj0oZXx8IiIpLnNwbGl0KHkpO2Zvcih1PTAsYT10aGlzLmxlbmd0aDt1PGE7dSsrKXtpPXRo
aXNbdV07aWYoaS5ub2RlVHlwZT09PTEmJmkuY2xhc3NOYW1lKXtyPSgiICIraS5jbGFzc05hbWUr
IiAiKS5yZXBsYWNlKHEsIiAiKTtmb3Iocz0wLG89bi5sZW5ndGg7czxvO3MrKyl3aGlsZShyLmlu
ZGV4T2YoIiAiK25bc10rIiAiKT49MClyPXIucmVwbGFjZSgiICIrbltzXSsiICIsIiAiKTtpLmNs
YXNzTmFtZT1lP3YudHJpbShyKToiIn19fXJldHVybiB0aGlzfSx0b2dnbGVDbGFzczpmdW5jdGlv
bihlLHQpe3ZhciBuPXR5cGVvZiBlLHI9dHlwZW9mIHQ9PSJib29sZWFuIjtyZXR1cm4gdi5pc0Z1
bmN0aW9uKGUpP3RoaXMuZWFjaChmdW5jdGlvbihuKXt2KHRoaXMpLnRvZ2dsZUNsYXNzKGUuY2Fs
bCh0aGlzLG4sdGhpcy5jbGFzc05hbWUsdCksdCl9KTp0aGlzLmVhY2goZnVuY3Rpb24oKXtpZihu
PT09InN0cmluZyIpe3ZhciBpLHM9MCxvPXYodGhpcyksdT10LGE9ZS5zcGxpdCh5KTt3aGlsZShp
PWFbcysrXSl1PXI/dTohby5oYXNDbGFzcyhpKSxvW3U/ImFkZENsYXNzIjoicmVtb3ZlQ2xhc3Mi
XShpKX1lbHNlIGlmKG49PT0idW5kZWZpbmVkInx8bj09PSJib29sZWFuIil0aGlzLmNsYXNzTmFt
ZSYmdi5fZGF0YSh0aGlzLCJfX2NsYXNzTmFtZV9fIix0aGlzLmNsYXNzTmFtZSksdGhpcy5jbGFz
c05hbWU9dGhpcy5jbGFzc05hbWV8fGU9PT0hMT8iIjp2Ll9kYXRhKHRoaXMsIl9fY2xhc3NOYW1l
X18iKXx8IiJ9KX0saGFzQ2xhc3M6ZnVuY3Rpb24oZSl7dmFyIHQ9IiAiK2UrIiAiLG49MCxyPXRo
aXMubGVuZ3RoO2Zvcig7bjxyO24rKylpZih0aGlzW25dLm5vZGVUeXBlPT09MSYmKCIgIit0aGlz
W25dLmNsYXNzTmFtZSsiICIpLnJlcGxhY2UocSwiICIpLmluZGV4T2YodCk+PTApcmV0dXJuITA7
cmV0dXJuITF9LHZhbDpmdW5jdGlvbihlKXt2YXIgbixyLGkscz10aGlzWzBdO2lmKCFhcmd1bWVu
dHMubGVuZ3RoKXtpZihzKXJldHVybiBuPXYudmFsSG9va3Nbcy50eXBlXXx8di52YWxIb29rc1tz
Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldLG4mJiJnZXQiaW4gbiYmKHI9bi5nZXQocywidmFsdWUi
KSkhPT10P3I6KHI9cy52YWx1ZSx0eXBlb2Ygcj09InN0cmluZyI/ci5yZXBsYWNlKFIsIiIpOnI9
PW51bGw/IiI6cik7cmV0dXJufXJldHVybiBpPXYuaXNGdW5jdGlvbihlKSx0aGlzLmVhY2goZnVu
Y3Rpb24ocil7dmFyIHMsbz12KHRoaXMpO2lmKHRoaXMubm9kZVR5cGUhPT0xKXJldHVybjtpP3M9
ZS5jYWxsKHRoaXMscixvLnZhbCgpKTpzPWUscz09bnVsbD9zPSIiOnR5cGVvZiBzPT0ibnVtYmVy
Ij9zKz0iIjp2LmlzQXJyYXkocykmJihzPXYubWFwKHMsZnVuY3Rpb24oZSl7cmV0dXJuIGU9PW51
bGw/IiI6ZSsiIn0pKSxuPXYudmFsSG9va3NbdGhpcy50eXBlXXx8di52YWxIb29rc1t0aGlzLm5v
ZGVOYW1lLnRvTG93ZXJDYXNlKCldO2lmKCFufHwhKCJzZXQiaW4gbil8fG4uc2V0KHRoaXMscywi
dmFsdWUiKT09PXQpdGhpcy52YWx1ZT1zfSl9fSksdi5leHRlbmQoe3ZhbEhvb2tzOntvcHRpb246
e2dldDpmdW5jdGlvbihlKXt2YXIgdD1lLmF0dHJpYnV0ZXMudmFsdWU7cmV0dXJuIXR8fHQuc3Bl
Y2lmaWVkP2UudmFsdWU6ZS50ZXh0fX0sc2VsZWN0OntnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQsbixy
PWUub3B0aW9ucyxpPWUuc2VsZWN0ZWRJbmRleCxzPWUudHlwZT09PSJzZWxlY3Qtb25lInx8aTww
LG89cz9udWxsOltdLHU9cz9pKzE6ci5sZW5ndGgsYT1pPDA/dTpzP2k6MDtmb3IoO2E8dTthKysp
e249clthXTtpZigobi5zZWxlY3RlZHx8YT09PWkpJiYodi5zdXBwb3J0Lm9wdERpc2FibGVkPyFu
LmRpc2FibGVkOm4uZ2V0QXR0cmlidXRlKCJkaXNhYmxlZCIpPT09bnVsbCkmJighbi5wYXJlbnRO
b2RlLmRpc2FibGVkfHwhdi5ub2RlTmFtZShuLnBhcmVudE5vZGUsIm9wdGdyb3VwIikpKXt0PXYo
bikudmFsKCk7aWYocylyZXR1cm4gdDtvLnB1c2godCl9fXJldHVybiBvfSxzZXQ6ZnVuY3Rpb24o
ZSx0KXt2YXIgbj12Lm1ha2VBcnJheSh0KTtyZXR1cm4gdihlKS5maW5kKCJvcHRpb24iKS5lYWNo
KGZ1bmN0aW9uKCl7dGhpcy5zZWxlY3RlZD12LmluQXJyYXkodih0aGlzKS52YWwoKSxuKT49MH0p
LG4ubGVuZ3RofHwoZS5zZWxlY3RlZEluZGV4PS0xKSxufX19LGF0dHJGbjp7fSxhdHRyOmZ1bmN0
aW9uKGUsbixyLGkpe3ZhciBzLG8sdSxhPWUubm9kZVR5cGU7aWYoIWV8fGE9PT0zfHxhPT09OHx8
YT09PTIpcmV0dXJuO2lmKGkmJnYuaXNGdW5jdGlvbih2LmZuW25dKSlyZXR1cm4gdihlKVtuXShy
KTtpZih0eXBlb2YgZS5nZXRBdHRyaWJ1dGU9PSJ1bmRlZmluZWQiKXJldHVybiB2LnByb3AoZSxu
LHIpO3U9YSE9PTF8fCF2LmlzWE1MRG9jKGUpLHUmJihuPW4udG9Mb3dlckNhc2UoKSxvPXYuYXR0
ckhvb2tzW25dfHwoWC50ZXN0KG4pP0Y6aikpO2lmKHIhPT10KXtpZihyPT09bnVsbCl7di5yZW1v
dmVBdHRyKGUsbik7cmV0dXJufXJldHVybiBvJiYic2V0ImluIG8mJnUmJihzPW8uc2V0KGUscixu
KSkhPT10P3M6KGUuc2V0QXR0cmlidXRlKG4scisiIikscil9cmV0dXJuIG8mJiJnZXQiaW4gbyYm
dSYmKHM9by5nZXQoZSxuKSkhPT1udWxsP3M6KHM9ZS5nZXRBdHRyaWJ1dGUobikscz09PW51bGw/
dDpzKX0scmVtb3ZlQXR0cjpmdW5jdGlvbihlLHQpe3ZhciBuLHIsaSxzLG89MDtpZih0JiZlLm5v
ZGVUeXBlPT09MSl7cj10LnNwbGl0KHkpO2Zvcig7bzxyLmxlbmd0aDtvKyspaT1yW29dLGkmJihu
PXYucHJvcEZpeFtpXXx8aSxzPVgudGVzdChpKSxzfHx2LmF0dHIoZSxpLCIiKSxlLnJlbW92ZUF0
dHJpYnV0ZShWP2k6bikscyYmbiBpbiBlJiYoZVtuXT0hMSkpfX0sYXR0ckhvb2tzOnt0eXBlOntz
ZXQ6ZnVuY3Rpb24oZSx0KXtpZihVLnRlc3QoZS5ub2RlTmFtZSkmJmUucGFyZW50Tm9kZSl2LmVy
cm9yKCJ0eXBlIHByb3BlcnR5IGNhbid0IGJlIGNoYW5nZWQiKTtlbHNlIGlmKCF2LnN1cHBvcnQu
cmFkaW9WYWx1ZSYmdD09PSJyYWRpbyImJnYubm9kZU5hbWUoZSwiaW5wdXQiKSl7dmFyIG49ZS52
YWx1ZTtyZXR1cm4gZS5zZXRBdHRyaWJ1dGUoInR5cGUiLHQpLG4mJihlLnZhbHVlPW4pLHR9fX0s
dmFsdWU6e2dldDpmdW5jdGlvbihlLHQpe3JldHVybiBqJiZ2Lm5vZGVOYW1lKGUsImJ1dHRvbiIp
P2ouZ2V0KGUsdCk6dCBpbiBlP2UudmFsdWU6bnVsbH0sc2V0OmZ1bmN0aW9uKGUsdCxuKXtpZihq
JiZ2Lm5vZGVOYW1lKGUsImJ1dHRvbiIpKXJldHVybiBqLnNldChlLHQsbik7ZS52YWx1ZT10fX19
LHByb3BGaXg6e3RhYmluZGV4OiJ0YWJJbmRleCIscmVhZG9ubHk6InJlYWRPbmx5IiwiZm9yIjoi
aHRtbEZvciIsImNsYXNzIjoiY2xhc3NOYW1lIixtYXhsZW5ndGg6Im1heExlbmd0aCIsY2VsbHNw
YWNpbmc6ImNlbGxTcGFjaW5nIixjZWxscGFkZGluZzoiY2VsbFBhZGRpbmciLHJvd3NwYW46InJv
d1NwYW4iLGNvbHNwYW46ImNvbFNwYW4iLHVzZW1hcDoidXNlTWFwIixmcmFtZWJvcmRlcjoiZnJh
bWVCb3JkZXIiLGNvbnRlbnRlZGl0YWJsZToiY29udGVudEVkaXRhYmxlIn0scHJvcDpmdW5jdGlv
bihlLG4scil7dmFyIGkscyxvLHU9ZS5ub2RlVHlwZTtpZighZXx8dT09PTN8fHU9PT04fHx1PT09
MilyZXR1cm47cmV0dXJuIG89dSE9PTF8fCF2LmlzWE1MRG9jKGUpLG8mJihuPXYucHJvcEZpeFtu
XXx8bixzPXYucHJvcEhvb2tzW25dKSxyIT09dD9zJiYic2V0ImluIHMmJihpPXMuc2V0KGUscixu
KSkhPT10P2k6ZVtuXT1yOnMmJiJnZXQiaW4gcyYmKGk9cy5nZXQoZSxuKSkhPT1udWxsP2k6ZVtu
XX0scHJvcEhvb2tzOnt0YWJJbmRleDp7Z2V0OmZ1bmN0aW9uKGUpe3ZhciBuPWUuZ2V0QXR0cmli
dXRlTm9kZSgidGFiaW5kZXgiKTtyZXR1cm4gbiYmbi5zcGVjaWZpZWQ/cGFyc2VJbnQobi52YWx1
ZSwxMCk6ei50ZXN0KGUubm9kZU5hbWUpfHxXLnRlc3QoZS5ub2RlTmFtZSkmJmUuaHJlZj8wOnR9
fX19KSxGPXtnZXQ6ZnVuY3Rpb24oZSxuKXt2YXIgcixpPXYucHJvcChlLG4pO3JldHVybiBpPT09
ITB8fHR5cGVvZiBpIT0iYm9vbGVhbiImJihyPWUuZ2V0QXR0cmlidXRlTm9kZShuKSkmJnIubm9k
ZVZhbHVlIT09ITE/bi50b0xvd2VyQ2FzZSgpOnR9LHNldDpmdW5jdGlvbihlLHQsbil7dmFyIHI7
cmV0dXJuIHQ9PT0hMT92LnJlbW92ZUF0dHIoZSxuKToocj12LnByb3BGaXhbbl18fG4sciBpbiBl
JiYoZVtyXT0hMCksZS5zZXRBdHRyaWJ1dGUobixuLnRvTG93ZXJDYXNlKCkpKSxufX0sVnx8KEk9
e25hbWU6ITAsaWQ6ITAsY29vcmRzOiEwfSxqPXYudmFsSG9va3MuYnV0dG9uPXtnZXQ6ZnVuY3Rp
b24oZSxuKXt2YXIgcjtyZXR1cm4gcj1lLmdldEF0dHJpYnV0ZU5vZGUobiksciYmKElbbl0/ci52
YWx1ZSE9PSIiOnIuc3BlY2lmaWVkKT9yLnZhbHVlOnR9LHNldDpmdW5jdGlvbihlLHQsbil7dmFy
IHI9ZS5nZXRBdHRyaWJ1dGVOb2RlKG4pO3JldHVybiByfHwocj1pLmNyZWF0ZUF0dHJpYnV0ZShu
KSxlLnNldEF0dHJpYnV0ZU5vZGUocikpLHIudmFsdWU9dCsiIn19LHYuZWFjaChbIndpZHRoIiwi
aGVpZ2h0Il0sZnVuY3Rpb24oZSx0KXt2LmF0dHJIb29rc1t0XT12LmV4dGVuZCh2LmF0dHJIb29r
c1t0XSx7c2V0OmZ1bmN0aW9uKGUsbil7aWYobj09PSIiKXJldHVybiBlLnNldEF0dHJpYnV0ZSh0
LCJhdXRvIiksbn19KX0pLHYuYXR0ckhvb2tzLmNvbnRlbnRlZGl0YWJsZT17Z2V0OmouZ2V0LHNl
dDpmdW5jdGlvbihlLHQsbil7dD09PSIiJiYodD0iZmFsc2UiKSxqLnNldChlLHQsbil9fSksdi5z
dXBwb3J0LmhyZWZOb3JtYWxpemVkfHx2LmVhY2goWyJocmVmIiwic3JjIiwid2lkdGgiLCJoZWln
aHQiXSxmdW5jdGlvbihlLG4pe3YuYXR0ckhvb2tzW25dPXYuZXh0ZW5kKHYuYXR0ckhvb2tzW25d
LHtnZXQ6ZnVuY3Rpb24oZSl7dmFyIHI9ZS5nZXRBdHRyaWJ1dGUobiwyKTtyZXR1cm4gcj09PW51
bGw/dDpyfX0pfSksdi5zdXBwb3J0LnN0eWxlfHwodi5hdHRySG9va3Muc3R5bGU9e2dldDpmdW5j
dGlvbihlKXtyZXR1cm4gZS5zdHlsZS5jc3NUZXh0LnRvTG93ZXJDYXNlKCl8fHR9LHNldDpmdW5j
dGlvbihlLHQpe3JldHVybiBlLnN0eWxlLmNzc1RleHQ9dCsiIn19KSx2LnN1cHBvcnQub3B0U2Vs
ZWN0ZWR8fCh2LnByb3BIb29rcy5zZWxlY3RlZD12LmV4dGVuZCh2LnByb3BIb29rcy5zZWxlY3Rl
ZCx7Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0PWUucGFyZW50Tm9kZTtyZXR1cm4gdCYmKHQuc2VsZWN0
ZWRJbmRleCx0LnBhcmVudE5vZGUmJnQucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4KSxudWxsfX0p
KSx2LnN1cHBvcnQuZW5jdHlwZXx8KHYucHJvcEZpeC5lbmN0eXBlPSJlbmNvZGluZyIpLHYuc3Vw
cG9ydC5jaGVja09ufHx2LmVhY2goWyJyYWRpbyIsImNoZWNrYm94Il0sZnVuY3Rpb24oKXt2LnZh
bEhvb2tzW3RoaXNdPXtnZXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0QXR0cmlidXRlKCJ2YWx1
ZSIpPT09bnVsbD8ib24iOmUudmFsdWV9fX0pLHYuZWFjaChbInJhZGlvIiwiY2hlY2tib3giXSxm
dW5jdGlvbigpe3YudmFsSG9va3NbdGhpc109di5leHRlbmQodi52YWxIb29rc1t0aGlzXSx7c2V0
OmZ1bmN0aW9uKGUsdCl7aWYodi5pc0FycmF5KHQpKXJldHVybiBlLmNoZWNrZWQ9di5pbkFycmF5
KHYoZSkudmFsKCksdCk+PTB9fSl9KTt2YXIgJD0vXig/OnRleHRhcmVhfGlucHV0fHNlbGVjdCkk
L2ksSj0vXihbXlwuXSp8KSg/OlwuKC4rKXwpJC8sSz0vKD86Xnxccylob3ZlcihcLlxTK3wpXGIv
LFE9L15rZXkvLEc9L14oPzptb3VzZXxjb250ZXh0bWVudSl8Y2xpY2svLFk9L14oPzpmb2N1c2lu
Zm9jdXN8Zm9jdXNvdXRibHVyKSQvLFo9ZnVuY3Rpb24oZSl7cmV0dXJuIHYuZXZlbnQuc3BlY2lh
bC5ob3Zlcj9lOmUucmVwbGFjZShLLCJtb3VzZWVudGVyJDEgbW91c2VsZWF2ZSQxIil9O3YuZXZl
bnQ9e2FkZDpmdW5jdGlvbihlLG4scixpLHMpe3ZhciBvLHUsYSxmLGwsYyxoLHAsZCxtLGc7aWYo
ZS5ub2RlVHlwZT09PTN8fGUubm9kZVR5cGU9PT04fHwhbnx8IXJ8fCEobz12Ll9kYXRhKGUpKSly
ZXR1cm47ci5oYW5kbGVyJiYoZD1yLHI9ZC5oYW5kbGVyLHM9ZC5zZWxlY3Rvciksci5ndWlkfHwo
ci5ndWlkPXYuZ3VpZCsrKSxhPW8uZXZlbnRzLGF8fChvLmV2ZW50cz1hPXt9KSx1PW8uaGFuZGxl
LHV8fChvLmhhbmRsZT11PWZ1bmN0aW9uKGUpe3JldHVybiB0eXBlb2Ygdj09InVuZGVmaW5lZCJ8
fCEhZSYmdi5ldmVudC50cmlnZ2VyZWQ9PT1lLnR5cGU/dDp2LmV2ZW50LmRpc3BhdGNoLmFwcGx5
KHUuZWxlbSxhcmd1bWVudHMpfSx1LmVsZW09ZSksbj12LnRyaW0oWihuKSkuc3BsaXQoIiAiKTtm
b3IoZj0wO2Y8bi5sZW5ndGg7ZisrKXtsPUouZXhlYyhuW2ZdKXx8W10sYz1sWzFdLGg9KGxbMl18
fCIiKS5zcGxpdCgiLiIpLnNvcnQoKSxnPXYuZXZlbnQuc3BlY2lhbFtjXXx8e30sYz0ocz9nLmRl
bGVnYXRlVHlwZTpnLmJpbmRUeXBlKXx8YyxnPXYuZXZlbnQuc3BlY2lhbFtjXXx8e30scD12LmV4
dGVuZCh7dHlwZTpjLG9yaWdUeXBlOmxbMV0sZGF0YTppLGhhbmRsZXI6cixndWlkOnIuZ3VpZCxz
ZWxlY3RvcjpzLG5lZWRzQ29udGV4dDpzJiZ2LmV4cHIubWF0Y2gubmVlZHNDb250ZXh0LnRlc3Qo
cyksbmFtZXNwYWNlOmguam9pbigiLiIpfSxkKSxtPWFbY107aWYoIW0pe209YVtjXT1bXSxtLmRl
bGVnYXRlQ291bnQ9MDtpZighZy5zZXR1cHx8Zy5zZXR1cC5jYWxsKGUsaSxoLHUpPT09ITEpZS5h
ZGRFdmVudExpc3RlbmVyP2UuYWRkRXZlbnRMaXN0ZW5lcihjLHUsITEpOmUuYXR0YWNoRXZlbnQm
JmUuYXR0YWNoRXZlbnQoIm9uIitjLHUpfWcuYWRkJiYoZy5hZGQuY2FsbChlLHApLHAuaGFuZGxl
ci5ndWlkfHwocC5oYW5kbGVyLmd1aWQ9ci5ndWlkKSkscz9tLnNwbGljZShtLmRlbGVnYXRlQ291
bnQrKywwLHApOm0ucHVzaChwKSx2LmV2ZW50Lmdsb2JhbFtjXT0hMH1lPW51bGx9LGdsb2JhbDp7
fSxyZW1vdmU6ZnVuY3Rpb24oZSx0LG4scixpKXt2YXIgcyxvLHUsYSxmLGwsYyxoLHAsZCxtLGc9
di5oYXNEYXRhKGUpJiZ2Ll9kYXRhKGUpO2lmKCFnfHwhKGg9Zy5ldmVudHMpKXJldHVybjt0PXYu
dHJpbShaKHR8fCIiKSkuc3BsaXQoIiAiKTtmb3Iocz0wO3M8dC5sZW5ndGg7cysrKXtvPUouZXhl
Yyh0W3NdKXx8W10sdT1hPW9bMV0sZj1vWzJdO2lmKCF1KXtmb3IodSBpbiBoKXYuZXZlbnQucmVt
b3ZlKGUsdSt0W3NdLG4sciwhMCk7Y29udGludWV9cD12LmV2ZW50LnNwZWNpYWxbdV18fHt9LHU9
KHI/cC5kZWxlZ2F0ZVR5cGU6cC5iaW5kVHlwZSl8fHUsZD1oW3VdfHxbXSxsPWQubGVuZ3RoLGY9
Zj9uZXcgUmVnRXhwKCIoXnxcXC4pIitmLnNwbGl0KCIuIikuc29ydCgpLmpvaW4oIlxcLig/Oi4q
XFwufCkiKSsiKFxcLnwkKSIpOm51bGw7Zm9yKGM9MDtjPGQubGVuZ3RoO2MrKyltPWRbY10sKGl8
fGE9PT1tLm9yaWdUeXBlKSYmKCFufHxuLmd1aWQ9PT1tLmd1aWQpJiYoIWZ8fGYudGVzdChtLm5h
bWVzcGFjZSkpJiYoIXJ8fHI9PT1tLnNlbGVjdG9yfHxyPT09IioqIiYmbS5zZWxlY3RvcikmJihk
LnNwbGljZShjLS0sMSksbS5zZWxlY3RvciYmZC5kZWxlZ2F0ZUNvdW50LS0scC5yZW1vdmUmJnAu
cmVtb3ZlLmNhbGwoZSxtKSk7ZC5sZW5ndGg9PT0wJiZsIT09ZC5sZW5ndGgmJigoIXAudGVhcmRv
d258fHAudGVhcmRvd24uY2FsbChlLGYsZy5oYW5kbGUpPT09ITEpJiZ2LnJlbW92ZUV2ZW50KGUs
dSxnLmhhbmRsZSksZGVsZXRlIGhbdV0pfXYuaXNFbXB0eU9iamVjdChoKSYmKGRlbGV0ZSBnLmhh
bmRsZSx2LnJlbW92ZURhdGEoZSwiZXZlbnRzIiwhMCkpfSxjdXN0b21FdmVudDp7Z2V0RGF0YToh
MCxzZXREYXRhOiEwLGNoYW5nZURhdGE6ITB9LHRyaWdnZXI6ZnVuY3Rpb24obixyLHMsbyl7aWYo
IXN8fHMubm9kZVR5cGUhPT0zJiZzLm5vZGVUeXBlIT09OCl7dmFyIHUsYSxmLGwsYyxoLHAsZCxt
LGcseT1uLnR5cGV8fG4sYj1bXTtpZihZLnRlc3QoeSt2LmV2ZW50LnRyaWdnZXJlZCkpcmV0dXJu
O3kuaW5kZXhPZigiISIpPj0wJiYoeT15LnNsaWNlKDAsLTEpLGE9ITApLHkuaW5kZXhPZigiLiIp
Pj0wJiYoYj15LnNwbGl0KCIuIikseT1iLnNoaWZ0KCksYi5zb3J0KCkpO2lmKCghc3x8di5ldmVu
dC5jdXN0b21FdmVudFt5XSkmJiF2LmV2ZW50Lmdsb2JhbFt5XSlyZXR1cm47bj10eXBlb2Ygbj09
Im9iamVjdCI/blt2LmV4cGFuZG9dP246bmV3IHYuRXZlbnQoeSxuKTpuZXcgdi5FdmVudCh5KSxu
LnR5cGU9eSxuLmlzVHJpZ2dlcj0hMCxuLmV4Y2x1c2l2ZT1hLG4ubmFtZXNwYWNlPWIuam9pbigi
LiIpLG4ubmFtZXNwYWNlX3JlPW4ubmFtZXNwYWNlP25ldyBSZWdFeHAoIihefFxcLikiK2Iuam9p
bigiXFwuKD86LipcXC58KSIpKyIoXFwufCQpIik6bnVsbCxoPXkuaW5kZXhPZigiOiIpPDA/Im9u
Iit5OiIiO2lmKCFzKXt1PXYuY2FjaGU7Zm9yKGYgaW4gdSl1W2ZdLmV2ZW50cyYmdVtmXS5ldmVu
dHNbeV0mJnYuZXZlbnQudHJpZ2dlcihuLHIsdVtmXS5oYW5kbGUuZWxlbSwhMCk7cmV0dXJufW4u
cmVzdWx0PXQsbi50YXJnZXR8fChuLnRhcmdldD1zKSxyPXIhPW51bGw/di5tYWtlQXJyYXkocik6
W10sci51bnNoaWZ0KG4pLHA9di5ldmVudC5zcGVjaWFsW3ldfHx7fTtpZihwLnRyaWdnZXImJnAu
dHJpZ2dlci5hcHBseShzLHIpPT09ITEpcmV0dXJuO209W1tzLHAuYmluZFR5cGV8fHldXTtpZigh
byYmIXAubm9CdWJibGUmJiF2LmlzV2luZG93KHMpKXtnPXAuZGVsZWdhdGVUeXBlfHx5LGw9WS50
ZXN0KGcreSk/czpzLnBhcmVudE5vZGU7Zm9yKGM9cztsO2w9bC5wYXJlbnROb2RlKW0ucHVzaChb
bCxnXSksYz1sO2M9PT0ocy5vd25lckRvY3VtZW50fHxpKSYmbS5wdXNoKFtjLmRlZmF1bHRWaWV3
fHxjLnBhcmVudFdpbmRvd3x8ZSxnXSl9Zm9yKGY9MDtmPG0ubGVuZ3RoJiYhbi5pc1Byb3BhZ2F0
aW9uU3RvcHBlZCgpO2YrKylsPW1bZl1bMF0sbi50eXBlPW1bZl1bMV0sZD0odi5fZGF0YShsLCJl
dmVudHMiKXx8e30pW24udHlwZV0mJnYuX2RhdGEobCwiaGFuZGxlIiksZCYmZC5hcHBseShsLHIp
LGQ9aCYmbFtoXSxkJiZ2LmFjY2VwdERhdGEobCkmJmQuYXBwbHkmJmQuYXBwbHkobCxyKT09PSEx
JiZuLnByZXZlbnREZWZhdWx0KCk7cmV0dXJuIG4udHlwZT15LCFvJiYhbi5pc0RlZmF1bHRQcmV2
ZW50ZWQoKSYmKCFwLl9kZWZhdWx0fHxwLl9kZWZhdWx0LmFwcGx5KHMub3duZXJEb2N1bWVudCxy
KT09PSExKSYmKHkhPT0iY2xpY2sifHwhdi5ub2RlTmFtZShzLCJhIikpJiZ2LmFjY2VwdERhdGEo
cykmJmgmJnNbeV0mJih5IT09ImZvY3VzIiYmeSE9PSJibHVyInx8bi50YXJnZXQub2Zmc2V0V2lk
dGghPT0wKSYmIXYuaXNXaW5kb3cocykmJihjPXNbaF0sYyYmKHNbaF09bnVsbCksdi5ldmVudC50
cmlnZ2VyZWQ9eSxzW3ldKCksdi5ldmVudC50cmlnZ2VyZWQ9dCxjJiYoc1toXT1jKSksbi5yZXN1
bHR9cmV0dXJufSxkaXNwYXRjaDpmdW5jdGlvbihuKXtuPXYuZXZlbnQuZml4KG58fGUuZXZlbnQp
O3ZhciByLGkscyxvLHUsYSxmLGMsaCxwLGQ9KHYuX2RhdGEodGhpcywiZXZlbnRzIil8fHt9KVtu
LnR5cGVdfHxbXSxtPWQuZGVsZWdhdGVDb3VudCxnPWwuY2FsbChhcmd1bWVudHMpLHk9IW4uZXhj
bHVzaXZlJiYhbi5uYW1lc3BhY2UsYj12LmV2ZW50LnNwZWNpYWxbbi50eXBlXXx8e30sdz1bXTtn
WzBdPW4sbi5kZWxlZ2F0ZVRhcmdldD10aGlzO2lmKGIucHJlRGlzcGF0Y2gmJmIucHJlRGlzcGF0
Y2guY2FsbCh0aGlzLG4pPT09ITEpcmV0dXJuO2lmKG0mJighbi5idXR0b258fG4udHlwZSE9PSJj
bGljayIpKWZvcihzPW4udGFyZ2V0O3MhPXRoaXM7cz1zLnBhcmVudE5vZGV8fHRoaXMpaWYocy5k
aXNhYmxlZCE9PSEwfHxuLnR5cGUhPT0iY2xpY2siKXt1PXt9LGY9W107Zm9yKHI9MDtyPG07cisr
KWM9ZFtyXSxoPWMuc2VsZWN0b3IsdVtoXT09PXQmJih1W2hdPWMubmVlZHNDb250ZXh0P3YoaCx0
aGlzKS5pbmRleChzKT49MDp2LmZpbmQoaCx0aGlzLG51bGwsW3NdKS5sZW5ndGgpLHVbaF0mJmYu
cHVzaChjKTtmLmxlbmd0aCYmdy5wdXNoKHtlbGVtOnMsbWF0Y2hlczpmfSl9ZC5sZW5ndGg+bSYm
dy5wdXNoKHtlbGVtOnRoaXMsbWF0Y2hlczpkLnNsaWNlKG0pfSk7Zm9yKHI9MDtyPHcubGVuZ3Ro
JiYhbi5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpO3IrKyl7YT13W3JdLG4uY3VycmVudFRhcmdldD1h
LmVsZW07Zm9yKGk9MDtpPGEubWF0Y2hlcy5sZW5ndGgmJiFuLmlzSW1tZWRpYXRlUHJvcGFnYXRp
b25TdG9wcGVkKCk7aSsrKXtjPWEubWF0Y2hlc1tpXTtpZih5fHwhbi5uYW1lc3BhY2UmJiFjLm5h
bWVzcGFjZXx8bi5uYW1lc3BhY2VfcmUmJm4ubmFtZXNwYWNlX3JlLnRlc3QoYy5uYW1lc3BhY2Up
KW4uZGF0YT1jLmRhdGEsbi5oYW5kbGVPYmo9YyxvPSgodi5ldmVudC5zcGVjaWFsW2Mub3JpZ1R5
cGVdfHx7fSkuaGFuZGxlfHxjLmhhbmRsZXIpLmFwcGx5KGEuZWxlbSxnKSxvIT09dCYmKG4ucmVz
dWx0PW8sbz09PSExJiYobi5wcmV2ZW50RGVmYXVsdCgpLG4uc3RvcFByb3BhZ2F0aW9uKCkpKX19
cmV0dXJuIGIucG9zdERpc3BhdGNoJiZiLnBvc3REaXNwYXRjaC5jYWxsKHRoaXMsbiksbi5yZXN1
bHR9LHByb3BzOiJhdHRyQ2hhbmdlIGF0dHJOYW1lIHJlbGF0ZWROb2RlIHNyY0VsZW1lbnQgYWx0
S2V5IGJ1YmJsZXMgY2FuY2VsYWJsZSBjdHJsS2V5IGN1cnJlbnRUYXJnZXQgZXZlbnRQaGFzZSBt
ZXRhS2V5IHJlbGF0ZWRUYXJnZXQgc2hpZnRLZXkgdGFyZ2V0IHRpbWVTdGFtcCB2aWV3IHdoaWNo
Ii5zcGxpdCgiICIpLGZpeEhvb2tzOnt9LGtleUhvb2tzOntwcm9wczoiY2hhciBjaGFyQ29kZSBr
ZXkga2V5Q29kZSIuc3BsaXQoIiAiKSxmaWx0ZXI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS53aGlj
aD09bnVsbCYmKGUud2hpY2g9dC5jaGFyQ29kZSE9bnVsbD90LmNoYXJDb2RlOnQua2V5Q29kZSks
ZX19LG1vdXNlSG9va3M6e3Byb3BzOiJidXR0b24gYnV0dG9ucyBjbGllbnRYIGNsaWVudFkgZnJv
bUVsZW1lbnQgb2Zmc2V0WCBvZmZzZXRZIHBhZ2VYIHBhZ2VZIHNjcmVlblggc2NyZWVuWSB0b0Vs
ZW1lbnQiLnNwbGl0KCIgIiksZmlsdGVyOmZ1bmN0aW9uKGUsbil7dmFyIHIscyxvLHU9bi5idXR0
b24sYT1uLmZyb21FbGVtZW50O3JldHVybiBlLnBhZ2VYPT1udWxsJiZuLmNsaWVudFghPW51bGwm
JihyPWUudGFyZ2V0Lm93bmVyRG9jdW1lbnR8fGkscz1yLmRvY3VtZW50RWxlbWVudCxvPXIuYm9k
eSxlLnBhZ2VYPW4uY2xpZW50WCsocyYmcy5zY3JvbGxMZWZ0fHxvJiZvLnNjcm9sbExlZnR8fDAp
LShzJiZzLmNsaWVudExlZnR8fG8mJm8uY2xpZW50TGVmdHx8MCksZS5wYWdlWT1uLmNsaWVudFkr
KHMmJnMuc2Nyb2xsVG9wfHxvJiZvLnNjcm9sbFRvcHx8MCktKHMmJnMuY2xpZW50VG9wfHxvJiZv
LmNsaWVudFRvcHx8MCkpLCFlLnJlbGF0ZWRUYXJnZXQmJmEmJihlLnJlbGF0ZWRUYXJnZXQ9YT09
PWUudGFyZ2V0P24udG9FbGVtZW50OmEpLCFlLndoaWNoJiZ1IT09dCYmKGUud2hpY2g9dSYxPzE6
dSYyPzM6dSY0PzI6MCksZX19LGZpeDpmdW5jdGlvbihlKXtpZihlW3YuZXhwYW5kb10pcmV0dXJu
IGU7dmFyIHQsbixyPWUscz12LmV2ZW50LmZpeEhvb2tzW2UudHlwZV18fHt9LG89cy5wcm9wcz90
aGlzLnByb3BzLmNvbmNhdChzLnByb3BzKTp0aGlzLnByb3BzO2U9di5FdmVudChyKTtmb3IodD1v
Lmxlbmd0aDt0OyluPW9bLS10XSxlW25dPXJbbl07cmV0dXJuIGUudGFyZ2V0fHwoZS50YXJnZXQ9
ci5zcmNFbGVtZW50fHxpKSxlLnRhcmdldC5ub2RlVHlwZT09PTMmJihlLnRhcmdldD1lLnRhcmdl
dC5wYXJlbnROb2RlKSxlLm1ldGFLZXk9ISFlLm1ldGFLZXkscy5maWx0ZXI/cy5maWx0ZXIoZSxy
KTplfSxzcGVjaWFsOntsb2FkOntub0J1YmJsZTohMH0sZm9jdXM6e2RlbGVnYXRlVHlwZToiZm9j
dXNpbiJ9LGJsdXI6e2RlbGVnYXRlVHlwZToiZm9jdXNvdXQifSxiZWZvcmV1bmxvYWQ6e3NldHVw
OmZ1bmN0aW9uKGUsdCxuKXt2LmlzV2luZG93KHRoaXMpJiYodGhpcy5vbmJlZm9yZXVubG9hZD1u
KX0sdGVhcmRvd246ZnVuY3Rpb24oZSx0KXt0aGlzLm9uYmVmb3JldW5sb2FkPT09dCYmKHRoaXMu
b25iZWZvcmV1bmxvYWQ9bnVsbCl9fX0sc2ltdWxhdGU6ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9
di5leHRlbmQobmV3IHYuRXZlbnQsbix7dHlwZTplLGlzU2ltdWxhdGVkOiEwLG9yaWdpbmFsRXZl
bnQ6e319KTtyP3YuZXZlbnQudHJpZ2dlcihpLG51bGwsdCk6di5ldmVudC5kaXNwYXRjaC5jYWxs
KHQsaSksaS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSYmbi5wcmV2ZW50RGVmYXVsdCgpfX0sdi5ldmVu
dC5oYW5kbGU9di5ldmVudC5kaXNwYXRjaCx2LnJlbW92ZUV2ZW50PWkucmVtb3ZlRXZlbnRMaXN0
ZW5lcj9mdW5jdGlvbihlLHQsbil7ZS5yZW1vdmVFdmVudExpc3RlbmVyJiZlLnJlbW92ZUV2ZW50
TGlzdGVuZXIodCxuLCExKX06ZnVuY3Rpb24oZSx0LG4pe3ZhciByPSJvbiIrdDtlLmRldGFjaEV2
ZW50JiYodHlwZW9mIGVbcl09PSJ1bmRlZmluZWQiJiYoZVtyXT1udWxsKSxlLmRldGFjaEV2ZW50
KHIsbikpfSx2LkV2ZW50PWZ1bmN0aW9uKGUsdCl7aWYoISh0aGlzIGluc3RhbmNlb2Ygdi5FdmVu
dCkpcmV0dXJuIG5ldyB2LkV2ZW50KGUsdCk7ZSYmZS50eXBlPyh0aGlzLm9yaWdpbmFsRXZlbnQ9
ZSx0aGlzLnR5cGU9ZS50eXBlLHRoaXMuaXNEZWZhdWx0UHJldmVudGVkPWUuZGVmYXVsdFByZXZl
bnRlZHx8ZS5yZXR1cm5WYWx1ZT09PSExfHxlLmdldFByZXZlbnREZWZhdWx0JiZlLmdldFByZXZl
bnREZWZhdWx0KCk/dHQ6ZXQpOnRoaXMudHlwZT1lLHQmJnYuZXh0ZW5kKHRoaXMsdCksdGhpcy50
aW1lU3RhbXA9ZSYmZS50aW1lU3RhbXB8fHYubm93KCksdGhpc1t2LmV4cGFuZG9dPSEwfSx2LkV2
ZW50LnByb3RvdHlwZT17cHJldmVudERlZmF1bHQ6ZnVuY3Rpb24oKXt0aGlzLmlzRGVmYXVsdFBy
ZXZlbnRlZD10dDt2YXIgZT10aGlzLm9yaWdpbmFsRXZlbnQ7aWYoIWUpcmV0dXJuO2UucHJldmVu
dERlZmF1bHQ/ZS5wcmV2ZW50RGVmYXVsdCgpOmUucmV0dXJuVmFsdWU9ITF9LHN0b3BQcm9wYWdh
dGlvbjpmdW5jdGlvbigpe3RoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQ9dHQ7dmFyIGU9dGhpcy5v
cmlnaW5hbEV2ZW50O2lmKCFlKXJldHVybjtlLnN0b3BQcm9wYWdhdGlvbiYmZS5zdG9wUHJvcGFn
YXRpb24oKSxlLmNhbmNlbEJ1YmJsZT0hMH0sc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOmZ1bmN0
aW9uKCl7dGhpcy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZD10dCx0aGlzLnN0b3BQcm9w
YWdhdGlvbigpfSxpc0RlZmF1bHRQcmV2ZW50ZWQ6ZXQsaXNQcm9wYWdhdGlvblN0b3BwZWQ6ZXQs
aXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ6ZXR9LHYuZWFjaCh7bW91c2VlbnRlcjoibW91
c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCJ9LGZ1bmN0aW9uKGUsdCl7di5ldmVudC5zcGVj
aWFsW2VdPXtkZWxlZ2F0ZVR5cGU6dCxiaW5kVHlwZTp0LGhhbmRsZTpmdW5jdGlvbihlKXt2YXIg
bixyPXRoaXMsaT1lLnJlbGF0ZWRUYXJnZXQscz1lLmhhbmRsZU9iaixvPXMuc2VsZWN0b3I7aWYo
IWl8fGkhPT1yJiYhdi5jb250YWlucyhyLGkpKWUudHlwZT1zLm9yaWdUeXBlLG49cy5oYW5kbGVy
LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxlLnR5cGU9dDtyZXR1cm4gbn19fSksdi5zdXBwb3J0LnN1
Ym1pdEJ1YmJsZXN8fCh2LmV2ZW50LnNwZWNpYWwuc3VibWl0PXtzZXR1cDpmdW5jdGlvbigpe2lm
KHYubm9kZU5hbWUodGhpcywiZm9ybSIpKXJldHVybiExO3YuZXZlbnQuYWRkKHRoaXMsImNsaWNr
Ll9zdWJtaXQga2V5cHJlc3MuX3N1Ym1pdCIsZnVuY3Rpb24oZSl7dmFyIG49ZS50YXJnZXQscj12
Lm5vZGVOYW1lKG4sImlucHV0Iil8fHYubm9kZU5hbWUobiwiYnV0dG9uIik/bi5mb3JtOnQ7ciYm
IXYuX2RhdGEociwiX3N1Ym1pdF9hdHRhY2hlZCIpJiYodi5ldmVudC5hZGQociwic3VibWl0Ll9z
dWJtaXQiLGZ1bmN0aW9uKGUpe2UuX3N1Ym1pdF9idWJibGU9ITB9KSx2Ll9kYXRhKHIsIl9zdWJt
aXRfYXR0YWNoZWQiLCEwKSl9KX0scG9zdERpc3BhdGNoOmZ1bmN0aW9uKGUpe2UuX3N1Ym1pdF9i
dWJibGUmJihkZWxldGUgZS5fc3VibWl0X2J1YmJsZSx0aGlzLnBhcmVudE5vZGUmJiFlLmlzVHJp
Z2dlciYmdi5ldmVudC5zaW11bGF0ZSgic3VibWl0Iix0aGlzLnBhcmVudE5vZGUsZSwhMCkpfSx0
ZWFyZG93bjpmdW5jdGlvbigpe2lmKHYubm9kZU5hbWUodGhpcywiZm9ybSIpKXJldHVybiExO3Yu
ZXZlbnQucmVtb3ZlKHRoaXMsIi5fc3VibWl0Iil9fSksdi5zdXBwb3J0LmNoYW5nZUJ1YmJsZXN8
fCh2LmV2ZW50LnNwZWNpYWwuY2hhbmdlPXtzZXR1cDpmdW5jdGlvbigpe2lmKCQudGVzdCh0aGlz
Lm5vZGVOYW1lKSl7aWYodGhpcy50eXBlPT09ImNoZWNrYm94Inx8dGhpcy50eXBlPT09InJhZGlv
Iil2LmV2ZW50LmFkZCh0aGlzLCJwcm9wZXJ0eWNoYW5nZS5fY2hhbmdlIixmdW5jdGlvbihlKXtl
Lm9yaWdpbmFsRXZlbnQucHJvcGVydHlOYW1lPT09ImNoZWNrZWQiJiYodGhpcy5fanVzdF9jaGFu
Z2VkPSEwKX0pLHYuZXZlbnQuYWRkKHRoaXMsImNsaWNrLl9jaGFuZ2UiLGZ1bmN0aW9uKGUpe3Ro
aXMuX2p1c3RfY2hhbmdlZCYmIWUuaXNUcmlnZ2VyJiYodGhpcy5fanVzdF9jaGFuZ2VkPSExKSx2
LmV2ZW50LnNpbXVsYXRlKCJjaGFuZ2UiLHRoaXMsZSwhMCl9KTtyZXR1cm4hMX12LmV2ZW50LmFk
ZCh0aGlzLCJiZWZvcmVhY3RpdmF0ZS5fY2hhbmdlIixmdW5jdGlvbihlKXt2YXIgdD1lLnRhcmdl
dDskLnRlc3QodC5ub2RlTmFtZSkmJiF2Ll9kYXRhKHQsIl9jaGFuZ2VfYXR0YWNoZWQiKSYmKHYu
ZXZlbnQuYWRkKHQsImNoYW5nZS5fY2hhbmdlIixmdW5jdGlvbihlKXt0aGlzLnBhcmVudE5vZGUm
JiFlLmlzU2ltdWxhdGVkJiYhZS5pc1RyaWdnZXImJnYuZXZlbnQuc2ltdWxhdGUoImNoYW5nZSIs
dGhpcy5wYXJlbnROb2RlLGUsITApfSksdi5fZGF0YSh0LCJfY2hhbmdlX2F0dGFjaGVkIiwhMCkp
fSl9LGhhbmRsZTpmdW5jdGlvbihlKXt2YXIgdD1lLnRhcmdldDtpZih0aGlzIT09dHx8ZS5pc1Np
bXVsYXRlZHx8ZS5pc1RyaWdnZXJ8fHQudHlwZSE9PSJyYWRpbyImJnQudHlwZSE9PSJjaGVja2Jv
eCIpcmV0dXJuIGUuaGFuZGxlT2JqLmhhbmRsZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSx0ZWFy
ZG93bjpmdW5jdGlvbigpe3JldHVybiB2LmV2ZW50LnJlbW92ZSh0aGlzLCIuX2NoYW5nZSIpLCEk
LnRlc3QodGhpcy5ub2RlTmFtZSl9fSksdi5zdXBwb3J0LmZvY3VzaW5CdWJibGVzfHx2LmVhY2go
e2ZvY3VzOiJmb2N1c2luIixibHVyOiJmb2N1c291dCJ9LGZ1bmN0aW9uKGUsdCl7dmFyIG49MCxy
PWZ1bmN0aW9uKGUpe3YuZXZlbnQuc2ltdWxhdGUodCxlLnRhcmdldCx2LmV2ZW50LmZpeChlKSwh
MCl9O3YuZXZlbnQuc3BlY2lhbFt0XT17c2V0dXA6ZnVuY3Rpb24oKXtuKys9PT0wJiZpLmFkZEV2
ZW50TGlzdGVuZXIoZSxyLCEwKX0sdGVhcmRvd246ZnVuY3Rpb24oKXstLW49PT0wJiZpLnJlbW92
ZUV2ZW50TGlzdGVuZXIoZSxyLCEwKX19fSksdi5mbi5leHRlbmQoe29uOmZ1bmN0aW9uKGUsbixy
LGkscyl7dmFyIG8sdTtpZih0eXBlb2YgZT09Im9iamVjdCIpe3R5cGVvZiBuIT0ic3RyaW5nIiYm
KHI9cnx8bixuPXQpO2Zvcih1IGluIGUpdGhpcy5vbih1LG4scixlW3VdLHMpO3JldHVybiB0aGlz
fXI9PW51bGwmJmk9PW51bGw/KGk9bixyPW49dCk6aT09bnVsbCYmKHR5cGVvZiBuPT0ic3RyaW5n
Ij8oaT1yLHI9dCk6KGk9cixyPW4sbj10KSk7aWYoaT09PSExKWk9ZXQ7ZWxzZSBpZighaSlyZXR1
cm4gdGhpcztyZXR1cm4gcz09PTEmJihvPWksaT1mdW5jdGlvbihlKXtyZXR1cm4gdigpLm9mZihl
KSxvLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0saS5ndWlkPW8uZ3VpZHx8KG8uZ3VpZD12Lmd1aWQr
KykpLHRoaXMuZWFjaChmdW5jdGlvbigpe3YuZXZlbnQuYWRkKHRoaXMsZSxpLHIsbil9KX0sb25l
OmZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiB0aGlzLm9uKGUsdCxuLHIsMSl9LG9mZjpmdW5jdGlv
bihlLG4scil7dmFyIGkscztpZihlJiZlLnByZXZlbnREZWZhdWx0JiZlLmhhbmRsZU9iailyZXR1
cm4gaT1lLmhhbmRsZU9iaix2KGUuZGVsZWdhdGVUYXJnZXQpLm9mZihpLm5hbWVzcGFjZT9pLm9y
aWdUeXBlKyIuIitpLm5hbWVzcGFjZTppLm9yaWdUeXBlLGkuc2VsZWN0b3IsaS5oYW5kbGVyKSx0
aGlzO2lmKHR5cGVvZiBlPT0ib2JqZWN0Iil7Zm9yKHMgaW4gZSl0aGlzLm9mZihzLG4sZVtzXSk7
cmV0dXJuIHRoaXN9aWYobj09PSExfHx0eXBlb2Ygbj09ImZ1bmN0aW9uIilyPW4sbj10O3JldHVy
biByPT09ITEmJihyPWV0KSx0aGlzLmVhY2goZnVuY3Rpb24oKXt2LmV2ZW50LnJlbW92ZSh0aGlz
LGUscixuKX0pfSxiaW5kOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdGhpcy5vbihlLG51bGwsdCxu
KX0sdW5iaW5kOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMub2ZmKGUsbnVsbCx0KX0sbGl2ZTpm
dW5jdGlvbihlLHQsbil7cmV0dXJuIHYodGhpcy5jb250ZXh0KS5vbihlLHRoaXMuc2VsZWN0b3Is
dCxuKSx0aGlzfSxkaWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdih0aGlzLmNvbnRleHQpLm9mZihl
LHRoaXMuc2VsZWN0b3J8fCIqKiIsdCksdGhpc30sZGVsZWdhdGU6ZnVuY3Rpb24oZSx0LG4scil7
cmV0dXJuIHRoaXMub24odCxlLG4scil9LHVuZGVsZWdhdGU6ZnVuY3Rpb24oZSx0LG4pe3JldHVy
biBhcmd1bWVudHMubGVuZ3RoPT09MT90aGlzLm9mZihlLCIqKiIpOnRoaXMub2ZmKHQsZXx8Iioq
IixuKX0sdHJpZ2dlcjpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2
LmV2ZW50LnRyaWdnZXIoZSx0LHRoaXMpfSl9LHRyaWdnZXJIYW5kbGVyOmZ1bmN0aW9uKGUsdCl7
aWYodGhpc1swXSlyZXR1cm4gdi5ldmVudC50cmlnZ2VyKGUsdCx0aGlzWzBdLCEwKX0sdG9nZ2xl
OmZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cyxuPWUuZ3VpZHx8di5ndWlkKysscj0wLGk9ZnVu
Y3Rpb24obil7dmFyIGk9KHYuX2RhdGEodGhpcywibGFzdFRvZ2dsZSIrZS5ndWlkKXx8MCklcjty
ZXR1cm4gdi5fZGF0YSh0aGlzLCJsYXN0VG9nZ2xlIitlLmd1aWQsaSsxKSxuLnByZXZlbnREZWZh
dWx0KCksdFtpXS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fCExfTtpLmd1aWQ9bjt3aGlsZShyPHQu
bGVuZ3RoKXRbcisrXS5ndWlkPW47cmV0dXJuIHRoaXMuY2xpY2soaSl9LGhvdmVyOmZ1bmN0aW9u
KGUsdCl7cmV0dXJuIHRoaXMubW91c2VlbnRlcihlKS5tb3VzZWxlYXZlKHR8fGUpfX0pLHYuZWFj
aCgiYmx1ciBmb2N1cyBmb2N1c2luIGZvY3Vzb3V0IGxvYWQgcmVzaXplIHNjcm9sbCB1bmxvYWQg
Y2xpY2sgZGJsY2xpY2sgbW91c2Vkb3duIG1vdXNldXAgbW91c2Vtb3ZlIG1vdXNlb3ZlciBtb3Vz
ZW91dCBtb3VzZWVudGVyIG1vdXNlbGVhdmUgY2hhbmdlIHNlbGVjdCBzdWJtaXQga2V5ZG93biBr
ZXlwcmVzcyBrZXl1cCBlcnJvciBjb250ZXh0bWVudSIuc3BsaXQoIiAiKSxmdW5jdGlvbihlLHQp
e3YuZm5bdF09ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbj09bnVsbCYmKG49ZSxlPW51bGwpLGFyZ3Vt
ZW50cy5sZW5ndGg+MD90aGlzLm9uKHQsbnVsbCxlLG4pOnRoaXMudHJpZ2dlcih0KX0sUS50ZXN0
KHQpJiYodi5ldmVudC5maXhIb29rc1t0XT12LmV2ZW50LmtleUhvb2tzKSxHLnRlc3QodCkmJih2
LmV2ZW50LmZpeEhvb2tzW3RdPXYuZXZlbnQubW91c2VIb29rcyl9KSxmdW5jdGlvbihlLHQpe2Z1
bmN0aW9uIG50KGUsdCxuLHIpe249bnx8W10sdD10fHxnO3ZhciBpLHMsYSxmLGw9dC5ub2RlVHlw
ZTtpZighZXx8dHlwZW9mIGUhPSJzdHJpbmciKXJldHVybiBuO2lmKGwhPT0xJiZsIT09OSlyZXR1
cm5bXTthPW8odCk7aWYoIWEmJiFyKWlmKGk9Ui5leGVjKGUpKWlmKGY9aVsxXSl7aWYobD09PTkp
e3M9dC5nZXRFbGVtZW50QnlJZChmKTtpZighc3x8IXMucGFyZW50Tm9kZSlyZXR1cm4gbjtpZihz
LmlkPT09ZilyZXR1cm4gbi5wdXNoKHMpLG59ZWxzZSBpZih0Lm93bmVyRG9jdW1lbnQmJihzPXQu
b3duZXJEb2N1bWVudC5nZXRFbGVtZW50QnlJZChmKSkmJnUodCxzKSYmcy5pZD09PWYpcmV0dXJu
IG4ucHVzaChzKSxufWVsc2V7aWYoaVsyXSlyZXR1cm4gUy5hcHBseShuLHguY2FsbCh0LmdldEVs
ZW1lbnRzQnlUYWdOYW1lKGUpLDApKSxuO2lmKChmPWlbM10pJiZaJiZ0LmdldEVsZW1lbnRzQnlD
bGFzc05hbWUpcmV0dXJuIFMuYXBwbHkobix4LmNhbGwodC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1l
KGYpLDApKSxufXJldHVybiB2dChlLnJlcGxhY2UoaiwiJDEiKSx0LG4scixhKX1mdW5jdGlvbiBy
dChlKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIG49dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3Jl
dHVybiBuPT09ImlucHV0IiYmdC50eXBlPT09ZX19ZnVuY3Rpb24gaXQoZSl7cmV0dXJuIGZ1bmN0
aW9uKHQpe3ZhciBuPXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4obj09PSJpbnB1dCJ8
fG49PT0iYnV0dG9uIikmJnQudHlwZT09PWV9fWZ1bmN0aW9uIHN0KGUpe3JldHVybiBOKGZ1bmN0
aW9uKHQpe3JldHVybiB0PSt0LE4oZnVuY3Rpb24obixyKXt2YXIgaSxzPWUoW10sbi5sZW5ndGgs
dCksbz1zLmxlbmd0aDt3aGlsZShvLS0pbltpPXNbb11dJiYobltpXT0hKHJbaV09bltpXSkpfSl9
KX1mdW5jdGlvbiBvdChlLHQsbil7aWYoZT09PXQpcmV0dXJuIG47dmFyIHI9ZS5uZXh0U2libGlu
Zzt3aGlsZShyKXtpZihyPT09dClyZXR1cm4tMTtyPXIubmV4dFNpYmxpbmd9cmV0dXJuIDF9ZnVu
Y3Rpb24gdXQoZSx0KXt2YXIgbixyLHMsbyx1LGEsZixsPUxbZF1bZSsiICJdO2lmKGwpcmV0dXJu
IHQ/MDpsLnNsaWNlKDApO3U9ZSxhPVtdLGY9aS5wcmVGaWx0ZXI7d2hpbGUodSl7aWYoIW58fChy
PUYuZXhlYyh1KSkpciYmKHU9dS5zbGljZShyWzBdLmxlbmd0aCl8fHUpLGEucHVzaChzPVtdKTtu
PSExO2lmKHI9SS5leGVjKHUpKXMucHVzaChuPW5ldyBtKHIuc2hpZnQoKSkpLHU9dS5zbGljZShu
Lmxlbmd0aCksbi50eXBlPXJbMF0ucmVwbGFjZShqLCIgIik7Zm9yKG8gaW4gaS5maWx0ZXIpKHI9
SltvXS5leGVjKHUpKSYmKCFmW29dfHwocj1mW29dKHIpKSkmJihzLnB1c2gobj1uZXcgbShyLnNo
aWZ0KCkpKSx1PXUuc2xpY2Uobi5sZW5ndGgpLG4udHlwZT1vLG4ubWF0Y2hlcz1yKTtpZighbili
cmVha31yZXR1cm4gdD91Lmxlbmd0aDp1P250LmVycm9yKGUpOkwoZSxhKS5zbGljZSgwKX1mdW5j
dGlvbiBhdChlLHQscil7dmFyIGk9dC5kaXIscz1yJiZ0LmRpcj09PSJwYXJlbnROb2RlIixvPXcr
KztyZXR1cm4gdC5maXJzdD9mdW5jdGlvbih0LG4scil7d2hpbGUodD10W2ldKWlmKHN8fHQubm9k
ZVR5cGU9PT0xKXJldHVybiBlKHQsbixyKX06ZnVuY3Rpb24odCxyLHUpe2lmKCF1KXt2YXIgYSxm
PWIrIiAiK28rIiAiLGw9ZituO3doaWxlKHQ9dFtpXSlpZihzfHx0Lm5vZGVUeXBlPT09MSl7aWYo
KGE9dFtkXSk9PT1sKXJldHVybiB0LnNpenNldDtpZih0eXBlb2YgYT09InN0cmluZyImJmEuaW5k
ZXhPZihmKT09PTApe2lmKHQuc2l6c2V0KXJldHVybiB0fWVsc2V7dFtkXT1sO2lmKGUodCxyLHUp
KXJldHVybiB0LnNpenNldD0hMCx0O3Quc2l6c2V0PSExfX19ZWxzZSB3aGlsZSh0PXRbaV0paWYo
c3x8dC5ub2RlVHlwZT09PTEpaWYoZSh0LHIsdSkpcmV0dXJuIHR9fWZ1bmN0aW9uIGZ0KGUpe3Jl
dHVybiBlLmxlbmd0aD4xP2Z1bmN0aW9uKHQsbixyKXt2YXIgaT1lLmxlbmd0aDt3aGlsZShpLS0p
aWYoIWVbaV0odCxuLHIpKXJldHVybiExO3JldHVybiEwfTplWzBdfWZ1bmN0aW9uIGx0KGUsdCxu
LHIsaSl7dmFyIHMsbz1bXSx1PTAsYT1lLmxlbmd0aCxmPXQhPW51bGw7Zm9yKDt1PGE7dSsrKWlm
KHM9ZVt1XSlpZighbnx8bihzLHIsaSkpby5wdXNoKHMpLGYmJnQucHVzaCh1KTtyZXR1cm4gb31m
dW5jdGlvbiBjdChlLHQsbixyLGkscyl7cmV0dXJuIHImJiFyW2RdJiYocj1jdChyKSksaSYmIWlb
ZF0mJihpPWN0KGkscykpLE4oZnVuY3Rpb24ocyxvLHUsYSl7dmFyIGYsbCxjLGg9W10scD1bXSxk
PW8ubGVuZ3RoLHY9c3x8ZHQodHx8IioiLHUubm9kZVR5cGU/W3VdOnUsW10pLG09ZSYmKHN8fCF0
KT9sdCh2LGgsZSx1LGEpOnYsZz1uP2l8fChzP2U6ZHx8cik/W106bzptO24mJm4obSxnLHUsYSk7
aWYocil7Zj1sdChnLHApLHIoZixbXSx1LGEpLGw9Zi5sZW5ndGg7d2hpbGUobC0tKWlmKGM9Zlts
XSlnW3BbbF1dPSEobVtwW2xdXT1jKX1pZihzKXtpZihpfHxlKXtpZihpKXtmPVtdLGw9Zy5sZW5n
dGg7d2hpbGUobC0tKShjPWdbbF0pJiZmLnB1c2gobVtsXT1jKTtpKG51bGwsZz1bXSxmLGEpfWw9
Zy5sZW5ndGg7d2hpbGUobC0tKShjPWdbbF0pJiYoZj1pP1QuY2FsbChzLGMpOmhbbF0pPi0xJiYo
c1tmXT0hKG9bZl09YykpfX1lbHNlIGc9bHQoZz09PW8/Zy5zcGxpY2UoZCxnLmxlbmd0aCk6Zyks
aT9pKG51bGwsbyxnLGEpOlMuYXBwbHkobyxnKX0pfWZ1bmN0aW9uIGh0KGUpe3ZhciB0LG4scixz
PWUubGVuZ3RoLG89aS5yZWxhdGl2ZVtlWzBdLnR5cGVdLHU9b3x8aS5yZWxhdGl2ZVsiICJdLGE9
bz8xOjAsZj1hdChmdW5jdGlvbihlKXtyZXR1cm4gZT09PXR9LHUsITApLGw9YXQoZnVuY3Rpb24o
ZSl7cmV0dXJuIFQuY2FsbCh0LGUpPi0xfSx1LCEwKSxoPVtmdW5jdGlvbihlLG4scil7cmV0dXJu
IW8mJihyfHxuIT09Yyl8fCgodD1uKS5ub2RlVHlwZT9mKGUsbixyKTpsKGUsbixyKSl9XTtmb3Io
O2E8czthKyspaWYobj1pLnJlbGF0aXZlW2VbYV0udHlwZV0paD1bYXQoZnQoaCksbildO2Vsc2V7
bj1pLmZpbHRlcltlW2FdLnR5cGVdLmFwcGx5KG51bGwsZVthXS5tYXRjaGVzKTtpZihuW2RdKXty
PSsrYTtmb3IoO3I8cztyKyspaWYoaS5yZWxhdGl2ZVtlW3JdLnR5cGVdKWJyZWFrO3JldHVybiBj
dChhPjEmJmZ0KGgpLGE+MSYmZS5zbGljZSgwLGEtMSkuam9pbigiIikucmVwbGFjZShqLCIkMSIp
LG4sYTxyJiZodChlLnNsaWNlKGEscikpLHI8cyYmaHQoZT1lLnNsaWNlKHIpKSxyPHMmJmUuam9p
bigiIikpfWgucHVzaChuKX1yZXR1cm4gZnQoaCl9ZnVuY3Rpb24gcHQoZSx0KXt2YXIgcj10Lmxl
bmd0aD4wLHM9ZS5sZW5ndGg+MCxvPWZ1bmN0aW9uKHUsYSxmLGwsaCl7dmFyIHAsZCx2LG09W10s
eT0wLHc9IjAiLHg9dSYmW10sVD1oIT1udWxsLE49YyxDPXV8fHMmJmkuZmluZC5UQUcoIioiLGgm
JmEucGFyZW50Tm9kZXx8YSksaz1iKz1OPT1udWxsPzE6TWF0aC5FO1QmJihjPWEhPT1nJiZhLG49
by5lbCk7Zm9yKDsocD1DW3ddKSE9bnVsbDt3Kyspe2lmKHMmJnApe2ZvcihkPTA7dj1lW2RdO2Qr
KylpZih2KHAsYSxmKSl7bC5wdXNoKHApO2JyZWFrfVQmJihiPWssbj0rK28uZWwpfXImJigocD0h
diYmcCkmJnktLSx1JiZ4LnB1c2gocCkpfXkrPXc7aWYociYmdyE9PXkpe2ZvcihkPTA7dj10W2Rd
O2QrKyl2KHgsbSxhLGYpO2lmKHUpe2lmKHk+MCl3aGlsZSh3LS0pIXhbd10mJiFtW3ddJiYobVt3
XT1FLmNhbGwobCkpO209bHQobSl9Uy5hcHBseShsLG0pLFQmJiF1JiZtLmxlbmd0aD4wJiZ5K3Qu
bGVuZ3RoPjEmJm50LnVuaXF1ZVNvcnQobCl9cmV0dXJuIFQmJihiPWssYz1OKSx4fTtyZXR1cm4g
by5lbD0wLHI/TihvKTpvfWZ1bmN0aW9uIGR0KGUsdCxuKXt2YXIgcj0wLGk9dC5sZW5ndGg7Zm9y
KDtyPGk7cisrKW50KGUsdFtyXSxuKTtyZXR1cm4gbn1mdW5jdGlvbiB2dChlLHQsbixyLHMpe3Zh
ciBvLHUsZixsLGMsaD11dChlKSxwPWgubGVuZ3RoO2lmKCFyJiZoLmxlbmd0aD09PTEpe3U9aFsw
XT1oWzBdLnNsaWNlKDApO2lmKHUubGVuZ3RoPjImJihmPXVbMF0pLnR5cGU9PT0iSUQiJiZ0Lm5v
ZGVUeXBlPT09OSYmIXMmJmkucmVsYXRpdmVbdVsxXS50eXBlXSl7dD1pLmZpbmQuSUQoZi5tYXRj
aGVzWzBdLnJlcGxhY2UoJCwiIiksdCxzKVswXTtpZighdClyZXR1cm4gbjtlPWUuc2xpY2UodS5z
aGlmdCgpLmxlbmd0aCl9Zm9yKG89Si5QT1MudGVzdChlKT8tMTp1Lmxlbmd0aC0xO28+PTA7by0t
KXtmPXVbb107aWYoaS5yZWxhdGl2ZVtsPWYudHlwZV0pYnJlYWs7aWYoYz1pLmZpbmRbbF0paWYo
cj1jKGYubWF0Y2hlc1swXS5yZXBsYWNlKCQsIiIpLHoudGVzdCh1WzBdLnR5cGUpJiZ0LnBhcmVu
dE5vZGV8fHQscykpe3Uuc3BsaWNlKG8sMSksZT1yLmxlbmd0aCYmdS5qb2luKCIiKTtpZighZSly
ZXR1cm4gUy5hcHBseShuLHguY2FsbChyLDApKSxuO2JyZWFrfX19cmV0dXJuIGEoZSxoKShyLHQs
cyxuLHoudGVzdChlKSksbn1mdW5jdGlvbiBtdCgpe312YXIgbixyLGkscyxvLHUsYSxmLGwsYyxo
PSEwLHA9InVuZGVmaW5lZCIsZD0oInNpemNhY2hlIitNYXRoLnJhbmRvbSgpKS5yZXBsYWNlKCIu
IiwiIiksbT1TdHJpbmcsZz1lLmRvY3VtZW50LHk9Zy5kb2N1bWVudEVsZW1lbnQsYj0wLHc9MCxF
PVtdLnBvcCxTPVtdLnB1c2gseD1bXS5zbGljZSxUPVtdLmluZGV4T2Z8fGZ1bmN0aW9uKGUpe3Zh
ciB0PTAsbj10aGlzLmxlbmd0aDtmb3IoO3Q8bjt0KyspaWYodGhpc1t0XT09PWUpcmV0dXJuIHQ7
cmV0dXJuLTF9LE49ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZVtkXT10PT1udWxsfHx0LGV9LEM9ZnVu
Y3Rpb24oKXt2YXIgZT17fSx0PVtdO3JldHVybiBOKGZ1bmN0aW9uKG4scil7cmV0dXJuIHQucHVz
aChuKT5pLmNhY2hlTGVuZ3RoJiZkZWxldGUgZVt0LnNoaWZ0KCldLGVbbisiICJdPXJ9LGUpfSxr
PUMoKSxMPUMoKSxBPUMoKSxPPSJbXFx4MjBcXHRcXHJcXG5cXGZdIixNPSIoPzpcXFxcLnxbLVxc
d118W15cXHgwMC1cXHhhMF0pKyIsXz1NLnJlcGxhY2UoInciLCJ3IyIpLEQ9IihbKl4kfCF+XT89
KSIsUD0iXFxbIitPKyIqKCIrTSsiKSIrTysiKig/OiIrRCtPKyIqKD86KFsnXCJdKSgoPzpcXFxc
LnxbXlxcXFxdKSo/KVxcM3woIitfKyIpfCl8KSIrTysiKlxcXSIsSD0iOigiK00rIikoPzpcXCgo
PzooWydcIl0pKCg/OlxcXFwufFteXFxcXF0pKj8pXFwyfChbXigpW1xcXV0qfCg/Oig/OiIrUCsi
KXxbXjpdfFxcXFwuKSp8LiopKVxcKXwpIixCPSI6KGV2ZW58b2RkfGVxfGd0fGx0fG50aHxmaXJz
dHxsYXN0KSg/OlxcKCIrTysiKigoPzotXFxkKT9cXGQqKSIrTysiKlxcKXwpKD89W14tXXwkKSIs
aj1uZXcgUmVnRXhwKCJeIitPKyIrfCgoPzpefFteXFxcXF0pKD86XFxcXC4pKikiK08rIiskIiwi
ZyIpLEY9bmV3IFJlZ0V4cCgiXiIrTysiKiwiK08rIioiKSxJPW5ldyBSZWdFeHAoIl4iK08rIioo
W1xceDIwXFx0XFxyXFxuXFxmPit+XSkiK08rIioiKSxxPW5ldyBSZWdFeHAoSCksUj0vXig/OiMo
W1x3XC1dKyl8KFx3Kyl8XC4oW1x3XC1dKykpJC8sVT0vXjpub3QvLHo9L1tceDIwXHRcclxuXGZd
Klsrfl0vLFc9Lzpub3RcKCQvLFg9L2hcZC9pLFY9L2lucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0
b24vaSwkPS9cXCg/IVxcKS9nLEo9e0lEOm5ldyBSZWdFeHAoIl4jKCIrTSsiKSIpLENMQVNTOm5l
dyBSZWdFeHAoIl5cXC4oIitNKyIpIiksTkFNRTpuZXcgUmVnRXhwKCJeXFxbbmFtZT1bJ1wiXT8o
IitNKyIpWydcIl0/XFxdIiksVEFHOm5ldyBSZWdFeHAoIl4oIitNLnJlcGxhY2UoInciLCJ3KiIp
KyIpIiksQVRUUjpuZXcgUmVnRXhwKCJeIitQKSxQU0VVRE86bmV3IFJlZ0V4cCgiXiIrSCksUE9T
Om5ldyBSZWdFeHAoQiwiaSIpLENISUxEOm5ldyBSZWdFeHAoIl46KG9ubHl8bnRofGZpcnN0fGxh
c3QpLWNoaWxkKD86XFwoIitPKyIqKGV2ZW58b2RkfCgoWystXXwpKFxcZCopbnwpIitPKyIqKD86
KFsrLV18KSIrTysiKihcXGQrKXwpKSIrTysiKlxcKXwpIiwiaSIpLG5lZWRzQ29udGV4dDpuZXcg
UmVnRXhwKCJeIitPKyIqWz4rfl18IitCLCJpIil9LEs9ZnVuY3Rpb24oZSl7dmFyIHQ9Zy5jcmVh
dGVFbGVtZW50KCJkaXYiKTt0cnl7cmV0dXJuIGUodCl9Y2F0Y2gobil7cmV0dXJuITF9ZmluYWxs
eXt0PW51bGx9fSxRPUsoZnVuY3Rpb24oZSl7cmV0dXJuIGUuYXBwZW5kQ2hpbGQoZy5jcmVhdGVD
b21tZW50KCIiKSksIWUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKS5sZW5ndGh9KSxHPUsoZnVu
Y3Rpb24oZSl7cmV0dXJuIGUuaW5uZXJIVE1MPSI8YSBocmVmPScjJz48L2E+IixlLmZpcnN0Q2hp
bGQmJnR5cGVvZiBlLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlIT09cCYmZS5maXJzdENoaWxkLmdl
dEF0dHJpYnV0ZSgiaHJlZiIpPT09IiMifSksWT1LKGZ1bmN0aW9uKGUpe2UuaW5uZXJIVE1MPSI8
c2VsZWN0Pjwvc2VsZWN0PiI7dmFyIHQ9dHlwZW9mIGUubGFzdENoaWxkLmdldEF0dHJpYnV0ZSgi
bXVsdGlwbGUiKTtyZXR1cm4gdCE9PSJib29sZWFuIiYmdCE9PSJzdHJpbmcifSksWj1LKGZ1bmN0
aW9uKGUpe3JldHVybiBlLmlubmVySFRNTD0iPGRpdiBjbGFzcz0naGlkZGVuIGUnPjwvZGl2Pjxk
aXYgY2xhc3M9J2hpZGRlbic+PC9kaXY+IiwhZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lfHwhZS5n
ZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJlIikubGVuZ3RoPyExOihlLmxhc3RDaGlsZC5jbGFzc05h
bWU9ImUiLGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiZSIpLmxlbmd0aD09PTIpfSksZXQ9Syhm
dW5jdGlvbihlKXtlLmlkPWQrMCxlLmlubmVySFRNTD0iPGEgbmFtZT0nIitkKyInPjwvYT48ZGl2
IG5hbWU9JyIrZCsiJz48L2Rpdj4iLHkuaW5zZXJ0QmVmb3JlKGUseS5maXJzdENoaWxkKTt2YXIg
dD1nLmdldEVsZW1lbnRzQnlOYW1lJiZnLmdldEVsZW1lbnRzQnlOYW1lKGQpLmxlbmd0aD09PTIr
Zy5nZXRFbGVtZW50c0J5TmFtZShkKzApLmxlbmd0aDtyZXR1cm4gcj0hZy5nZXRFbGVtZW50QnlJ
ZChkKSx5LnJlbW92ZUNoaWxkKGUpLHR9KTt0cnl7eC5jYWxsKHkuY2hpbGROb2RlcywwKVswXS5u
b2RlVHlwZX1jYXRjaCh0dCl7eD1mdW5jdGlvbihlKXt2YXIgdCxuPVtdO2Zvcig7dD10aGlzW2Vd
O2UrKyluLnB1c2godCk7cmV0dXJuIG59fW50Lm1hdGNoZXM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4g
bnQoZSxudWxsLG51bGwsdCl9LG50Lm1hdGNoZXNTZWxlY3Rvcj1mdW5jdGlvbihlLHQpe3JldHVy
biBudCh0LG51bGwsbnVsbCxbZV0pLmxlbmd0aD4wfSxzPW50LmdldFRleHQ9ZnVuY3Rpb24oZSl7
dmFyIHQsbj0iIixyPTAsaT1lLm5vZGVUeXBlO2lmKGkpe2lmKGk9PT0xfHxpPT09OXx8aT09PTEx
KXtpZih0eXBlb2YgZS50ZXh0Q29udGVudD09InN0cmluZyIpcmV0dXJuIGUudGV4dENvbnRlbnQ7
Zm9yKGU9ZS5maXJzdENoaWxkO2U7ZT1lLm5leHRTaWJsaW5nKW4rPXMoZSl9ZWxzZSBpZihpPT09
M3x8aT09PTQpcmV0dXJuIGUubm9kZVZhbHVlfWVsc2UgZm9yKDt0PWVbcl07cisrKW4rPXModCk7
cmV0dXJuIG59LG89bnQuaXNYTUw9ZnVuY3Rpb24oZSl7dmFyIHQ9ZSYmKGUub3duZXJEb2N1bWVu
dHx8ZSkuZG9jdW1lbnRFbGVtZW50O3JldHVybiB0P3Qubm9kZU5hbWUhPT0iSFRNTCI6ITF9LHU9
bnQuY29udGFpbnM9eS5jb250YWlucz9mdW5jdGlvbihlLHQpe3ZhciBuPWUubm9kZVR5cGU9PT05
P2UuZG9jdW1lbnRFbGVtZW50OmUscj10JiZ0LnBhcmVudE5vZGU7cmV0dXJuIGU9PT1yfHwhIShy
JiZyLm5vZGVUeXBlPT09MSYmbi5jb250YWlucyYmbi5jb250YWlucyhyKSl9OnkuY29tcGFyZURv
Y3VtZW50UG9zaXRpb24/ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdCYmISEoZS5jb21wYXJlRG9jdW1l
bnRQb3NpdGlvbih0KSYxNil9OmZ1bmN0aW9uKGUsdCl7d2hpbGUodD10LnBhcmVudE5vZGUpaWYo
dD09PWUpcmV0dXJuITA7cmV0dXJuITF9LG50LmF0dHI9ZnVuY3Rpb24oZSx0KXt2YXIgbixyPW8o
ZSk7cmV0dXJuIHJ8fCh0PXQudG9Mb3dlckNhc2UoKSksKG49aS5hdHRySGFuZGxlW3RdKT9uKGUp
OnJ8fFk/ZS5nZXRBdHRyaWJ1dGUodCk6KG49ZS5nZXRBdHRyaWJ1dGVOb2RlKHQpLG4/dHlwZW9m
IGVbdF09PSJib29sZWFuIj9lW3RdP3Q6bnVsbDpuLnNwZWNpZmllZD9uLnZhbHVlOm51bGw6bnVs
bCl9LGk9bnQuc2VsZWN0b3JzPXtjYWNoZUxlbmd0aDo1MCxjcmVhdGVQc2V1ZG86TixtYXRjaDpK
LGF0dHJIYW5kbGU6Rz97fTp7aHJlZjpmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRBdHRyaWJ1dGUo
ImhyZWYiLDIpfSx0eXBlOmZ1bmN0aW9uKGUpe3JldHVybiBlLmdldEF0dHJpYnV0ZSgidHlwZSIp
fX0sZmluZDp7SUQ6cj9mdW5jdGlvbihlLHQsbil7aWYodHlwZW9mIHQuZ2V0RWxlbWVudEJ5SWQh
PT1wJiYhbil7dmFyIHI9dC5nZXRFbGVtZW50QnlJZChlKTtyZXR1cm4gciYmci5wYXJlbnROb2Rl
P1tyXTpbXX19OmZ1bmN0aW9uKGUsbixyKXtpZih0eXBlb2Ygbi5nZXRFbGVtZW50QnlJZCE9PXAm
JiFyKXt2YXIgaT1uLmdldEVsZW1lbnRCeUlkKGUpO3JldHVybiBpP2kuaWQ9PT1lfHx0eXBlb2Yg
aS5nZXRBdHRyaWJ1dGVOb2RlIT09cCYmaS5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpLnZhbHVlPT09
ZT9baV06dDpbXX19LFRBRzpRP2Z1bmN0aW9uKGUsdCl7aWYodHlwZW9mIHQuZ2V0RWxlbWVudHNC
eVRhZ05hbWUhPT1wKXJldHVybiB0LmdldEVsZW1lbnRzQnlUYWdOYW1lKGUpfTpmdW5jdGlvbihl
LHQpe3ZhciBuPXQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoZSk7aWYoZT09PSIqIil7dmFyIHIsaT1b
XSxzPTA7Zm9yKDtyPW5bc107cysrKXIubm9kZVR5cGU9PT0xJiZpLnB1c2gocik7cmV0dXJuIGl9
cmV0dXJuIG59LE5BTUU6ZXQmJmZ1bmN0aW9uKGUsdCl7aWYodHlwZW9mIHQuZ2V0RWxlbWVudHNC
eU5hbWUhPT1wKXJldHVybiB0LmdldEVsZW1lbnRzQnlOYW1lKG5hbWUpfSxDTEFTUzpaJiZmdW5j
dGlvbihlLHQsbil7aWYodHlwZW9mIHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSE9PXAmJiFuKXJl
dHVybiB0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoZSl9fSxyZWxhdGl2ZTp7Ij4iOntkaXI6InBh
cmVudE5vZGUiLGZpcnN0OiEwfSwiICI6e2RpcjoicGFyZW50Tm9kZSJ9LCIrIjp7ZGlyOiJwcmV2
aW91c1NpYmxpbmciLGZpcnN0OiEwfSwifiI6e2RpcjoicHJldmlvdXNTaWJsaW5nIn19LHByZUZp
bHRlcjp7QVRUUjpmdW5jdGlvbihlKXtyZXR1cm4gZVsxXT1lWzFdLnJlcGxhY2UoJCwiIiksZVsz
XT0oZVs0XXx8ZVs1XXx8IiIpLnJlcGxhY2UoJCwiIiksZVsyXT09PSJ+PSImJihlWzNdPSIgIitl
WzNdKyIgIiksZS5zbGljZSgwLDQpfSxDSElMRDpmdW5jdGlvbihlKXtyZXR1cm4gZVsxXT1lWzFd
LnRvTG93ZXJDYXNlKCksZVsxXT09PSJudGgiPyhlWzJdfHxudC5lcnJvcihlWzBdKSxlWzNdPSso
ZVszXT9lWzRdKyhlWzVdfHwxKToyKihlWzJdPT09ImV2ZW4ifHxlWzJdPT09Im9kZCIpKSxlWzRd
PSsoZVs2XStlWzddfHxlWzJdPT09Im9kZCIpKTplWzJdJiZudC5lcnJvcihlWzBdKSxlfSxQU0VV
RE86ZnVuY3Rpb24oZSl7dmFyIHQsbjtpZihKLkNISUxELnRlc3QoZVswXSkpcmV0dXJuIG51bGw7
aWYoZVszXSllWzJdPWVbM107ZWxzZSBpZih0PWVbNF0pcS50ZXN0KHQpJiYobj11dCh0LCEwKSkm
JihuPXQuaW5kZXhPZigiKSIsdC5sZW5ndGgtbiktdC5sZW5ndGgpJiYodD10LnNsaWNlKDAsbiks
ZVswXT1lWzBdLnNsaWNlKDAsbikpLGVbMl09dDtyZXR1cm4gZS5zbGljZSgwLDMpfX0sZmlsdGVy
OntJRDpyP2Z1bmN0aW9uKGUpe3JldHVybiBlPWUucmVwbGFjZSgkLCIiKSxmdW5jdGlvbih0KXty
ZXR1cm4gdC5nZXRBdHRyaWJ1dGUoImlkIik9PT1lfX06ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZS5y
ZXBsYWNlKCQsIiIpLGZ1bmN0aW9uKHQpe3ZhciBuPXR5cGVvZiB0LmdldEF0dHJpYnV0ZU5vZGUh
PT1wJiZ0LmdldEF0dHJpYnV0ZU5vZGUoImlkIik7cmV0dXJuIG4mJm4udmFsdWU9PT1lfX0sVEFH
OmZ1bmN0aW9uKGUpe3JldHVybiBlPT09IioiP2Z1bmN0aW9uKCl7cmV0dXJuITB9OihlPWUucmVw
bGFjZSgkLCIiKS50b0xvd2VyQ2FzZSgpLGZ1bmN0aW9uKHQpe3JldHVybiB0Lm5vZGVOYW1lJiZ0
Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1lfSl9LENMQVNTOmZ1bmN0aW9uKGUpe3ZhciB0PWtb
ZF1bZSsiICJdO3JldHVybiB0fHwodD1uZXcgUmVnRXhwKCIoXnwiK08rIikiK2UrIigiK08rInwk
KSIpKSYmayhlLGZ1bmN0aW9uKGUpe3JldHVybiB0LnRlc3QoZS5jbGFzc05hbWV8fHR5cGVvZiBl
LmdldEF0dHJpYnV0ZSE9PXAmJmUuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIil9KX0sQVRUUjpm
dW5jdGlvbihlLHQsbil7cmV0dXJuIGZ1bmN0aW9uKHIsaSl7dmFyIHM9bnQuYXR0cihyLGUpO3Jl
dHVybiBzPT1udWxsP3Q9PT0iIT0iOnQ/KHMrPSIiLHQ9PT0iPSI/cz09PW46dD09PSIhPSI/cyE9
PW46dD09PSJePSI/biYmcy5pbmRleE9mKG4pPT09MDp0PT09Iio9Ij9uJiZzLmluZGV4T2Yobik+
LTE6dD09PSIkPSI/biYmcy5zdWJzdHIocy5sZW5ndGgtbi5sZW5ndGgpPT09bjp0PT09In49Ij8o
IiAiK3MrIiAiKS5pbmRleE9mKG4pPi0xOnQ9PT0ifD0iP3M9PT1ufHxzLnN1YnN0cigwLG4ubGVu
Z3RoKzEpPT09bisiLSI6ITEpOiEwfX0sQ0hJTEQ6ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIGU9
PT0ibnRoIj9mdW5jdGlvbihlKXt2YXIgdCxpLHM9ZS5wYXJlbnROb2RlO2lmKG49PT0xJiZyPT09
MClyZXR1cm4hMDtpZihzKXtpPTA7Zm9yKHQ9cy5maXJzdENoaWxkO3Q7dD10Lm5leHRTaWJsaW5n
KWlmKHQubm9kZVR5cGU9PT0xKXtpKys7aWYoZT09PXQpYnJlYWt9fXJldHVybiBpLT1yLGk9PT1u
fHxpJW49PT0wJiZpL24+PTB9OmZ1bmN0aW9uKHQpe3ZhciBuPXQ7c3dpdGNoKGUpe2Nhc2Uib25s
eSI6Y2FzZSJmaXJzdCI6d2hpbGUobj1uLnByZXZpb3VzU2libGluZylpZihuLm5vZGVUeXBlPT09
MSlyZXR1cm4hMTtpZihlPT09ImZpcnN0IilyZXR1cm4hMDtuPXQ7Y2FzZSJsYXN0Ijp3aGlsZShu
PW4ubmV4dFNpYmxpbmcpaWYobi5ub2RlVHlwZT09PTEpcmV0dXJuITE7cmV0dXJuITB9fX0sUFNF
VURPOmZ1bmN0aW9uKGUsdCl7dmFyIG4scj1pLnBzZXVkb3NbZV18fGkuc2V0RmlsdGVyc1tlLnRv
TG93ZXJDYXNlKCldfHxudC5lcnJvcigidW5zdXBwb3J0ZWQgcHNldWRvOiAiK2UpO3JldHVybiBy
W2RdP3IodCk6ci5sZW5ndGg+MT8obj1bZSxlLCIiLHRdLGkuc2V0RmlsdGVycy5oYXNPd25Qcm9w
ZXJ0eShlLnRvTG93ZXJDYXNlKCkpP04oZnVuY3Rpb24oZSxuKXt2YXIgaSxzPXIoZSx0KSxvPXMu
bGVuZ3RoO3doaWxlKG8tLSlpPVQuY2FsbChlLHNbb10pLGVbaV09IShuW2ldPXNbb10pfSk6ZnVu
Y3Rpb24oZSl7cmV0dXJuIHIoZSwwLG4pfSk6cn19LHBzZXVkb3M6e25vdDpOKGZ1bmN0aW9uKGUp
e3ZhciB0PVtdLG49W10scj1hKGUucmVwbGFjZShqLCIkMSIpKTtyZXR1cm4gcltkXT9OKGZ1bmN0
aW9uKGUsdCxuLGkpe3ZhciBzLG89cihlLG51bGwsaSxbXSksdT1lLmxlbmd0aDt3aGlsZSh1LS0p
aWYocz1vW3VdKWVbdV09ISh0W3VdPXMpfSk6ZnVuY3Rpb24oZSxpLHMpe3JldHVybiB0WzBdPWUs
cih0LG51bGwscyxuKSwhbi5wb3AoKX19KSxoYXM6TihmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rp
b24odCl7cmV0dXJuIG50KGUsdCkubGVuZ3RoPjB9fSksY29udGFpbnM6TihmdW5jdGlvbihlKXty
ZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuKHQudGV4dENvbnRlbnR8fHQuaW5uZXJUZXh0fHxzKHQp
KS5pbmRleE9mKGUpPi0xfX0pLGVuYWJsZWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZGlzYWJsZWQ9
PT0hMX0sZGlzYWJsZWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZGlzYWJsZWQ9PT0hMH0sY2hlY2tl
ZDpmdW5jdGlvbihlKXt2YXIgdD1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuIHQ9PT0i
aW5wdXQiJiYhIWUuY2hlY2tlZHx8dD09PSJvcHRpb24iJiYhIWUuc2VsZWN0ZWR9LHNlbGVjdGVk
OmZ1bmN0aW9uKGUpe3JldHVybiBlLnBhcmVudE5vZGUmJmUucGFyZW50Tm9kZS5zZWxlY3RlZElu
ZGV4LGUuc2VsZWN0ZWQ9PT0hMH0scGFyZW50OmZ1bmN0aW9uKGUpe3JldHVybiFpLnBzZXVkb3Mu
ZW1wdHkoZSl9LGVtcHR5OmZ1bmN0aW9uKGUpe3ZhciB0O2U9ZS5maXJzdENoaWxkO3doaWxlKGUp
e2lmKGUubm9kZU5hbWU+IkAifHwodD1lLm5vZGVUeXBlKT09PTN8fHQ9PT00KXJldHVybiExO2U9
ZS5uZXh0U2libGluZ31yZXR1cm4hMH0saGVhZGVyOmZ1bmN0aW9uKGUpe3JldHVybiBYLnRlc3Qo
ZS5ub2RlTmFtZSl9LHRleHQ6ZnVuY3Rpb24oZSl7dmFyIHQsbjtyZXR1cm4gZS5ub2RlTmFtZS50
b0xvd2VyQ2FzZSgpPT09ImlucHV0IiYmKHQ9ZS50eXBlKT09PSJ0ZXh0IiYmKChuPWUuZ2V0QXR0
cmlidXRlKCJ0eXBlIikpPT1udWxsfHxuLnRvTG93ZXJDYXNlKCk9PT10KX0scmFkaW86cnQoInJh
ZGlvIiksY2hlY2tib3g6cnQoImNoZWNrYm94IiksZmlsZTpydCgiZmlsZSIpLHBhc3N3b3JkOnJ0
KCJwYXNzd29yZCIpLGltYWdlOnJ0KCJpbWFnZSIpLHN1Ym1pdDppdCgic3VibWl0IikscmVzZXQ6
aXQoInJlc2V0IiksYnV0dG9uOmZ1bmN0aW9uKGUpe3ZhciB0PWUubm9kZU5hbWUudG9Mb3dlckNh
c2UoKTtyZXR1cm4gdD09PSJpbnB1dCImJmUudHlwZT09PSJidXR0b24ifHx0PT09ImJ1dHRvbiJ9
LGlucHV0OmZ1bmN0aW9uKGUpe3JldHVybiBWLnRlc3QoZS5ub2RlTmFtZSl9LGZvY3VzOmZ1bmN0
aW9uKGUpe3ZhciB0PWUub3duZXJEb2N1bWVudDtyZXR1cm4gZT09PXQuYWN0aXZlRWxlbWVudCYm
KCF0Lmhhc0ZvY3VzfHx0Lmhhc0ZvY3VzKCkpJiYhIShlLnR5cGV8fGUuaHJlZnx8fmUudGFiSW5k
ZXgpfSxhY3RpdmU6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1lLm93bmVyRG9jdW1lbnQuYWN0aXZl
RWxlbWVudH0sZmlyc3Q6c3QoZnVuY3Rpb24oKXtyZXR1cm5bMF19KSxsYXN0OnN0KGZ1bmN0aW9u
KGUsdCl7cmV0dXJuW3QtMV19KSxlcTpzdChmdW5jdGlvbihlLHQsbil7cmV0dXJuW248MD9uK3Q6
bl19KSxldmVuOnN0KGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPTA7bjx0O24rPTIpZS5wdXNoKG4p
O3JldHVybiBlfSksb2RkOnN0KGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPTE7bjx0O24rPTIpZS5w
dXNoKG4pO3JldHVybiBlfSksbHQ6c3QoZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgcj1uPDA/bit0
Om47LS1yPj0wOyllLnB1c2gocik7cmV0dXJuIGV9KSxndDpzdChmdW5jdGlvbihlLHQsbil7Zm9y
KHZhciByPW48MD9uK3Q6bjsrK3I8dDspZS5wdXNoKHIpO3JldHVybiBlfSl9fSxmPXkuY29tcGFy
ZURvY3VtZW50UG9zaXRpb24/ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT09PXQ/KGw9ITAsMCk6KCFl
LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9ufHwhdC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbj9lLmNv
bXBhcmVEb2N1bWVudFBvc2l0aW9uOmUuY29tcGFyZURvY3VtZW50UG9zaXRpb24odCkmNCk/LTE6
MX06ZnVuY3Rpb24oZSx0KXtpZihlPT09dClyZXR1cm4gbD0hMCwwO2lmKGUuc291cmNlSW5kZXgm
JnQuc291cmNlSW5kZXgpcmV0dXJuIGUuc291cmNlSW5kZXgtdC5zb3VyY2VJbmRleDt2YXIgbixy
LGk9W10scz1bXSxvPWUucGFyZW50Tm9kZSx1PXQucGFyZW50Tm9kZSxhPW87aWYobz09PXUpcmV0
dXJuIG90KGUsdCk7aWYoIW8pcmV0dXJuLTE7aWYoIXUpcmV0dXJuIDE7d2hpbGUoYSlpLnVuc2hp
ZnQoYSksYT1hLnBhcmVudE5vZGU7YT11O3doaWxlKGEpcy51bnNoaWZ0KGEpLGE9YS5wYXJlbnRO
b2RlO249aS5sZW5ndGgscj1zLmxlbmd0aDtmb3IodmFyIGY9MDtmPG4mJmY8cjtmKyspaWYoaVtm
XSE9PXNbZl0pcmV0dXJuIG90KGlbZl0sc1tmXSk7cmV0dXJuIGY9PT1uP290KGUsc1tmXSwtMSk6
b3QoaVtmXSx0LDEpfSxbMCwwXS5zb3J0KGYpLGg9IWwsbnQudW5pcXVlU29ydD1mdW5jdGlvbihl
KXt2YXIgdCxuPVtdLHI9MSxpPTA7bD1oLGUuc29ydChmKTtpZihsKXtmb3IoO3Q9ZVtyXTtyKysp
dD09PWVbci0xXSYmKGk9bi5wdXNoKHIpKTt3aGlsZShpLS0pZS5zcGxpY2UobltpXSwxKX1yZXR1
cm4gZX0sbnQuZXJyb3I9ZnVuY3Rpb24oZSl7dGhyb3cgbmV3IEVycm9yKCJTeW50YXggZXJyb3Is
IHVucmVjb2duaXplZCBleHByZXNzaW9uOiAiK2UpfSxhPW50LmNvbXBpbGU9ZnVuY3Rpb24oZSx0
KXt2YXIgbixyPVtdLGk9W10scz1BW2RdW2UrIiAiXTtpZighcyl7dHx8KHQ9dXQoZSkpLG49dC5s
ZW5ndGg7d2hpbGUobi0tKXM9aHQodFtuXSksc1tkXT9yLnB1c2gocyk6aS5wdXNoKHMpO3M9QShl
LHB0KGkscikpfXJldHVybiBzfSxnLnF1ZXJ5U2VsZWN0b3JBbGwmJmZ1bmN0aW9uKCl7dmFyIGUs
dD12dCxuPS8nfFxcL2cscj0vXD1bXHgyMFx0XHJcblxmXSooW14nIlxdXSopW1x4MjBcdFxyXG5c
Zl0qXF0vZyxpPVsiOmZvY3VzIl0scz1bIjphY3RpdmUiXSx1PXkubWF0Y2hlc1NlbGVjdG9yfHx5
Lm1vek1hdGNoZXNTZWxlY3Rvcnx8eS53ZWJraXRNYXRjaGVzU2VsZWN0b3J8fHkub01hdGNoZXNT
ZWxlY3Rvcnx8eS5tc01hdGNoZXNTZWxlY3RvcjtLKGZ1bmN0aW9uKGUpe2UuaW5uZXJIVE1MPSI8
c2VsZWN0PjxvcHRpb24gc2VsZWN0ZWQ9Jyc+PC9vcHRpb24+PC9zZWxlY3Q+IixlLnF1ZXJ5U2Vs
ZWN0b3JBbGwoIltzZWxlY3RlZF0iKS5sZW5ndGh8fGkucHVzaCgiXFxbIitPKyIqKD86Y2hlY2tl
ZHxkaXNhYmxlZHxpc21hcHxtdWx0aXBsZXxyZWFkb25seXxzZWxlY3RlZHx2YWx1ZSkiKSxlLnF1
ZXJ5U2VsZWN0b3JBbGwoIjpjaGVja2VkIikubGVuZ3RofHxpLnB1c2goIjpjaGVja2VkIil9KSxL
KGZ1bmN0aW9uKGUpe2UuaW5uZXJIVE1MPSI8cCB0ZXN0PScnPjwvcD4iLGUucXVlcnlTZWxlY3Rv
ckFsbCgiW3Rlc3RePScnXSIpLmxlbmd0aCYmaS5wdXNoKCJbKl4kXT0iK08rIiooPzpcIlwifCcn
KSIpLGUuaW5uZXJIVE1MPSI8aW5wdXQgdHlwZT0naGlkZGVuJy8+IixlLnF1ZXJ5U2VsZWN0b3JB
bGwoIjplbmFibGVkIikubGVuZ3RofHxpLnB1c2goIjplbmFibGVkIiwiOmRpc2FibGVkIil9KSxp
PW5ldyBSZWdFeHAoaS5qb2luKCJ8IikpLHZ0PWZ1bmN0aW9uKGUscixzLG8sdSl7aWYoIW8mJiF1
JiYhaS50ZXN0KGUpKXt2YXIgYSxmLGw9ITAsYz1kLGg9cixwPXIubm9kZVR5cGU9PT05JiZlO2lm
KHIubm9kZVR5cGU9PT0xJiZyLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkhPT0ib2JqZWN0Iil7YT11
dChlKSwobD1yLmdldEF0dHJpYnV0ZSgiaWQiKSk/Yz1sLnJlcGxhY2UobiwiXFwkJiIpOnIuc2V0
QXR0cmlidXRlKCJpZCIsYyksYz0iW2lkPSciK2MrIiddICIsZj1hLmxlbmd0aDt3aGlsZShmLS0p
YVtmXT1jK2FbZl0uam9pbigiIik7aD16LnRlc3QoZSkmJnIucGFyZW50Tm9kZXx8cixwPWEuam9p
bigiLCIpfWlmKHApdHJ5e3JldHVybiBTLmFwcGx5KHMseC5jYWxsKGgucXVlcnlTZWxlY3RvckFs
bChwKSwwKSksc31jYXRjaCh2KXt9ZmluYWxseXtsfHxyLnJlbW92ZUF0dHJpYnV0ZSgiaWQiKX19
cmV0dXJuIHQoZSxyLHMsbyx1KX0sdSYmKEsoZnVuY3Rpb24odCl7ZT11LmNhbGwodCwiZGl2Iik7
dHJ5e3UuY2FsbCh0LCJbdGVzdCE9JyddOnNpenpsZSIpLHMucHVzaCgiIT0iLEgpfWNhdGNoKG4p
e319KSxzPW5ldyBSZWdFeHAocy5qb2luKCJ8IikpLG50Lm1hdGNoZXNTZWxlY3Rvcj1mdW5jdGlv
bih0LG4pe249bi5yZXBsYWNlKHIsIj0nJDEnXSIpO2lmKCFvKHQpJiYhcy50ZXN0KG4pJiYhaS50
ZXN0KG4pKXRyeXt2YXIgYT11LmNhbGwodCxuKTtpZihhfHxlfHx0LmRvY3VtZW50JiZ0LmRvY3Vt
ZW50Lm5vZGVUeXBlIT09MTEpcmV0dXJuIGF9Y2F0Y2goZil7fXJldHVybiBudChuLG51bGwsbnVs
bCxbdF0pLmxlbmd0aD4wfSl9KCksaS5wc2V1ZG9zLm50aD1pLnBzZXVkb3MuZXEsaS5maWx0ZXJz
PW10LnByb3RvdHlwZT1pLnBzZXVkb3MsaS5zZXRGaWx0ZXJzPW5ldyBtdCxudC5hdHRyPXYuYXR0
cix2LmZpbmQ9bnQsdi5leHByPW50LnNlbGVjdG9ycyx2LmV4cHJbIjoiXT12LmV4cHIucHNldWRv
cyx2LnVuaXF1ZT1udC51bmlxdWVTb3J0LHYudGV4dD1udC5nZXRUZXh0LHYuaXNYTUxEb2M9bnQu
aXNYTUwsdi5jb250YWlucz1udC5jb250YWluc30oZSk7dmFyIG50PS9VbnRpbCQvLHJ0PS9eKD86
cGFyZW50c3xwcmV2KD86VW50aWx8QWxsKSkvLGl0PS9eLlteOiNcW1wuLF0qJC8sc3Q9di5leHBy
Lm1hdGNoLm5lZWRzQ29udGV4dCxvdD17Y2hpbGRyZW46ITAsY29udGVudHM6ITAsbmV4dDohMCxw
cmV2OiEwfTt2LmZuLmV4dGVuZCh7ZmluZDpmdW5jdGlvbihlKXt2YXIgdCxuLHIsaSxzLG8sdT10
aGlzO2lmKHR5cGVvZiBlIT0ic3RyaW5nIilyZXR1cm4gdihlKS5maWx0ZXIoZnVuY3Rpb24oKXtm
b3IodD0wLG49dS5sZW5ndGg7dDxuO3QrKylpZih2LmNvbnRhaW5zKHVbdF0sdGhpcykpcmV0dXJu
ITB9KTtvPXRoaXMucHVzaFN0YWNrKCIiLCJmaW5kIixlKTtmb3IodD0wLG49dGhpcy5sZW5ndGg7
dDxuO3QrKyl7cj1vLmxlbmd0aCx2LmZpbmQoZSx0aGlzW3RdLG8pO2lmKHQ+MClmb3IoaT1yO2k8
by5sZW5ndGg7aSsrKWZvcihzPTA7czxyO3MrKylpZihvW3NdPT09b1tpXSl7by5zcGxpY2UoaS0t
LDEpO2JyZWFrfX1yZXR1cm4gb30saGFzOmZ1bmN0aW9uKGUpe3ZhciB0LG49dihlLHRoaXMpLHI9
bi5sZW5ndGg7cmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9uKCl7Zm9yKHQ9MDt0PHI7dCsrKWlm
KHYuY29udGFpbnModGhpcyxuW3RdKSlyZXR1cm4hMH0pfSxub3Q6ZnVuY3Rpb24oZSl7cmV0dXJu
IHRoaXMucHVzaFN0YWNrKGZ0KHRoaXMsZSwhMSksIm5vdCIsZSl9LGZpbHRlcjpmdW5jdGlvbihl
KXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soZnQodGhpcyxlLCEwKSwiZmlsdGVyIixlKX0saXM6ZnVu
Y3Rpb24oZSl7cmV0dXJuISFlJiYodHlwZW9mIGU9PSJzdHJpbmciP3N0LnRlc3QoZSk/dihlLHRo
aXMuY29udGV4dCkuaW5kZXgodGhpc1swXSk+PTA6di5maWx0ZXIoZSx0aGlzKS5sZW5ndGg+MDp0
aGlzLmZpbHRlcihlKS5sZW5ndGg+MCl9LGNsb3Nlc3Q6ZnVuY3Rpb24oZSx0KXt2YXIgbixyPTAs
aT10aGlzLmxlbmd0aCxzPVtdLG89c3QudGVzdChlKXx8dHlwZW9mIGUhPSJzdHJpbmciP3YoZSx0
fHx0aGlzLmNvbnRleHQpOjA7Zm9yKDtyPGk7cisrKXtuPXRoaXNbcl07d2hpbGUobiYmbi5vd25l
ckRvY3VtZW50JiZuIT09dCYmbi5ub2RlVHlwZSE9PTExKXtpZihvP28uaW5kZXgobik+LTE6di5m
aW5kLm1hdGNoZXNTZWxlY3RvcihuLGUpKXtzLnB1c2gobik7YnJlYWt9bj1uLnBhcmVudE5vZGV9
fXJldHVybiBzPXMubGVuZ3RoPjE/di51bmlxdWUocyk6cyx0aGlzLnB1c2hTdGFjayhzLCJjbG9z
ZXN0IixlKX0saW5kZXg6ZnVuY3Rpb24oZSl7cmV0dXJuIGU/dHlwZW9mIGU9PSJzdHJpbmciP3Yu
aW5BcnJheSh0aGlzWzBdLHYoZSkpOnYuaW5BcnJheShlLmpxdWVyeT9lWzBdOmUsdGhpcyk6dGhp
c1swXSYmdGhpc1swXS5wYXJlbnROb2RlP3RoaXMucHJldkFsbCgpLmxlbmd0aDotMX0sYWRkOmZ1
bmN0aW9uKGUsdCl7dmFyIG49dHlwZW9mIGU9PSJzdHJpbmciP3YoZSx0KTp2Lm1ha2VBcnJheShl
JiZlLm5vZGVUeXBlP1tlXTplKSxyPXYubWVyZ2UodGhpcy5nZXQoKSxuKTtyZXR1cm4gdGhpcy5w
dXNoU3RhY2sodXQoblswXSl8fHV0KHJbMF0pP3I6di51bmlxdWUocikpfSxhZGRCYWNrOmZ1bmN0
aW9uKGUpe3JldHVybiB0aGlzLmFkZChlPT1udWxsP3RoaXMucHJldk9iamVjdDp0aGlzLnByZXZP
YmplY3QuZmlsdGVyKGUpKX19KSx2LmZuLmFuZFNlbGY9di5mbi5hZGRCYWNrLHYuZWFjaCh7cGFy
ZW50OmZ1bmN0aW9uKGUpe3ZhciB0PWUucGFyZW50Tm9kZTtyZXR1cm4gdCYmdC5ub2RlVHlwZSE9
PTExP3Q6bnVsbH0scGFyZW50czpmdW5jdGlvbihlKXtyZXR1cm4gdi5kaXIoZSwicGFyZW50Tm9k
ZSIpfSxwYXJlbnRzVW50aWw6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB2LmRpcihlLCJwYXJlbnRO
b2RlIixuKX0sbmV4dDpmdW5jdGlvbihlKXtyZXR1cm4gYXQoZSwibmV4dFNpYmxpbmciKX0scHJl
djpmdW5jdGlvbihlKXtyZXR1cm4gYXQoZSwicHJldmlvdXNTaWJsaW5nIil9LG5leHRBbGw6ZnVu
Y3Rpb24oZSl7cmV0dXJuIHYuZGlyKGUsIm5leHRTaWJsaW5nIil9LHByZXZBbGw6ZnVuY3Rpb24o
ZSl7cmV0dXJuIHYuZGlyKGUsInByZXZpb3VzU2libGluZyIpfSxuZXh0VW50aWw6ZnVuY3Rpb24o
ZSx0LG4pe3JldHVybiB2LmRpcihlLCJuZXh0U2libGluZyIsbil9LHByZXZVbnRpbDpmdW5jdGlv
bihlLHQsbil7cmV0dXJuIHYuZGlyKGUsInByZXZpb3VzU2libGluZyIsbil9LHNpYmxpbmdzOmZ1
bmN0aW9uKGUpe3JldHVybiB2LnNpYmxpbmcoKGUucGFyZW50Tm9kZXx8e30pLmZpcnN0Q2hpbGQs
ZSl9LGNoaWxkcmVuOmZ1bmN0aW9uKGUpe3JldHVybiB2LnNpYmxpbmcoZS5maXJzdENoaWxkKX0s
Y29udGVudHM6ZnVuY3Rpb24oZSl7cmV0dXJuIHYubm9kZU5hbWUoZSwiaWZyYW1lIik/ZS5jb250
ZW50RG9jdW1lbnR8fGUuY29udGVudFdpbmRvdy5kb2N1bWVudDp2Lm1lcmdlKFtdLGUuY2hpbGRO
b2Rlcyl9fSxmdW5jdGlvbihlLHQpe3YuZm5bZV09ZnVuY3Rpb24obixyKXt2YXIgaT12Lm1hcCh0
aGlzLHQsbik7cmV0dXJuIG50LnRlc3QoZSl8fChyPW4pLHImJnR5cGVvZiByPT0ic3RyaW5nIiYm
KGk9di5maWx0ZXIocixpKSksaT10aGlzLmxlbmd0aD4xJiYhb3RbZV0/di51bmlxdWUoaSk6aSx0
aGlzLmxlbmd0aD4xJiZydC50ZXN0KGUpJiYoaT1pLnJldmVyc2UoKSksdGhpcy5wdXNoU3RhY2so
aSxlLGwuY2FsbChhcmd1bWVudHMpLmpvaW4oIiwiKSl9fSksdi5leHRlbmQoe2ZpbHRlcjpmdW5j
dGlvbihlLHQsbil7cmV0dXJuIG4mJihlPSI6bm90KCIrZSsiKSIpLHQubGVuZ3RoPT09MT92LmZp
bmQubWF0Y2hlc1NlbGVjdG9yKHRbMF0sZSk/W3RbMF1dOltdOnYuZmluZC5tYXRjaGVzKGUsdCl9
LGRpcjpmdW5jdGlvbihlLG4scil7dmFyIGk9W10scz1lW25dO3doaWxlKHMmJnMubm9kZVR5cGUh
PT05JiYocj09PXR8fHMubm9kZVR5cGUhPT0xfHwhdihzKS5pcyhyKSkpcy5ub2RlVHlwZT09PTEm
JmkucHVzaChzKSxzPXNbbl07cmV0dXJuIGl9LHNpYmxpbmc6ZnVuY3Rpb24oZSx0KXt2YXIgbj1b
XTtmb3IoO2U7ZT1lLm5leHRTaWJsaW5nKWUubm9kZVR5cGU9PT0xJiZlIT09dCYmbi5wdXNoKGUp
O3JldHVybiBufX0pO3ZhciBjdD0iYWJicnxhcnRpY2xlfGFzaWRlfGF1ZGlvfGJkaXxjYW52YXN8
ZGF0YXxkYXRhbGlzdHxkZXRhaWxzfGZpZ2NhcHRpb258ZmlndXJlfGZvb3RlcnxoZWFkZXJ8aGdy
b3VwfG1hcmt8bWV0ZXJ8bmF2fG91dHB1dHxwcm9ncmVzc3xzZWN0aW9ufHN1bW1hcnl8dGltZXx2
aWRlbyIsaHQ9LyBqUXVlcnlcZCs9Iig/Om51bGx8XGQrKSIvZyxwdD0vXlxzKy8sZHQ9LzwoPyFh
cmVhfGJyfGNvbHxlbWJlZHxocnxpbWd8aW5wdXR8bGlua3xtZXRhfHBhcmFtKSgoW1x3Ol0rKVte
Pl0qKVwvPi9naSx2dD0vPChbXHc6XSspLyxtdD0vPHRib2R5L2ksZ3Q9Lzx8JiM/XHcrOy8seXQ9
LzwoPzpzY3JpcHR8c3R5bGV8bGluaykvaSxidD0vPCg/OnNjcmlwdHxvYmplY3R8ZW1iZWR8b3B0
aW9ufHN0eWxlKS9pLHd0PW5ldyBSZWdFeHAoIjwoPzoiK2N0KyIpW1xccy8+XSIsImkiKSxFdD0v
Xig/OmNoZWNrYm94fHJhZGlvKSQvLFN0PS9jaGVja2VkXHMqKD86W149XXw9XHMqLmNoZWNrZWQu
KS9pLHh0PS9cLyhqYXZhfGVjbWEpc2NyaXB0L2ksVHQ9L15ccyo8ISg/OlxbQ0RBVEFcW3xcLVwt
KXxbXF1cLV17Mn0+XHMqJC9nLE50PXtvcHRpb246WzEsIjxzZWxlY3QgbXVsdGlwbGU9J211bHRp
cGxlJz4iLCI8L3NlbGVjdD4iXSxsZWdlbmQ6WzEsIjxmaWVsZHNldD4iLCI8L2ZpZWxkc2V0PiJd
LHRoZWFkOlsxLCI8dGFibGU+IiwiPC90YWJsZT4iXSx0cjpbMiwiPHRhYmxlPjx0Ym9keT4iLCI8
L3Rib2R5PjwvdGFibGU+Il0sdGQ6WzMsIjx0YWJsZT48dGJvZHk+PHRyPiIsIjwvdHI+PC90Ym9k
eT48L3RhYmxlPiJdLGNvbDpbMiwiPHRhYmxlPjx0Ym9keT48L3Rib2R5Pjxjb2xncm91cD4iLCI8
L2NvbGdyb3VwPjwvdGFibGU+Il0sYXJlYTpbMSwiPG1hcD4iLCI8L21hcD4iXSxfZGVmYXVsdDpb
MCwiIiwiIl19LEN0PWx0KGkpLGt0PUN0LmFwcGVuZENoaWxkKGkuY3JlYXRlRWxlbWVudCgiZGl2
IikpO050Lm9wdGdyb3VwPU50Lm9wdGlvbixOdC50Ym9keT1OdC50Zm9vdD1OdC5jb2xncm91cD1O
dC5jYXB0aW9uPU50LnRoZWFkLE50LnRoPU50LnRkLHYuc3VwcG9ydC5odG1sU2VyaWFsaXplfHwo
TnQuX2RlZmF1bHQ9WzEsIlg8ZGl2PiIsIjwvZGl2PiJdKSx2LmZuLmV4dGVuZCh7dGV4dDpmdW5j
dGlvbihlKXtyZXR1cm4gdi5hY2Nlc3ModGhpcyxmdW5jdGlvbihlKXtyZXR1cm4gZT09PXQ/di50
ZXh0KHRoaXMpOnRoaXMuZW1wdHkoKS5hcHBlbmQoKHRoaXNbMF0mJnRoaXNbMF0ub3duZXJEb2N1
bWVudHx8aSkuY3JlYXRlVGV4dE5vZGUoZSkpfSxudWxsLGUsYXJndW1lbnRzLmxlbmd0aCl9LHdy
YXBBbGw6ZnVuY3Rpb24oZSl7aWYodi5pc0Z1bmN0aW9uKGUpKXJldHVybiB0aGlzLmVhY2goZnVu
Y3Rpb24odCl7dih0aGlzKS53cmFwQWxsKGUuY2FsbCh0aGlzLHQpKX0pO2lmKHRoaXNbMF0pe3Zh
ciB0PXYoZSx0aGlzWzBdLm93bmVyRG9jdW1lbnQpLmVxKDApLmNsb25lKCEwKTt0aGlzWzBdLnBh
cmVudE5vZGUmJnQuaW5zZXJ0QmVmb3JlKHRoaXNbMF0pLHQubWFwKGZ1bmN0aW9uKCl7dmFyIGU9
dGhpczt3aGlsZShlLmZpcnN0Q2hpbGQmJmUuZmlyc3RDaGlsZC5ub2RlVHlwZT09PTEpZT1lLmZp
cnN0Q2hpbGQ7cmV0dXJuIGV9KS5hcHBlbmQodGhpcyl9cmV0dXJuIHRoaXN9LHdyYXBJbm5lcjpm
dW5jdGlvbihlKXtyZXR1cm4gdi5pc0Z1bmN0aW9uKGUpP3RoaXMuZWFjaChmdW5jdGlvbih0KXt2
KHRoaXMpLndyYXBJbm5lcihlLmNhbGwodGhpcyx0KSl9KTp0aGlzLmVhY2goZnVuY3Rpb24oKXt2
YXIgdD12KHRoaXMpLG49dC5jb250ZW50cygpO24ubGVuZ3RoP24ud3JhcEFsbChlKTp0LmFwcGVu
ZChlKX0pfSx3cmFwOmZ1bmN0aW9uKGUpe3ZhciB0PXYuaXNGdW5jdGlvbihlKTtyZXR1cm4gdGhp
cy5lYWNoKGZ1bmN0aW9uKG4pe3YodGhpcykud3JhcEFsbCh0P2UuY2FsbCh0aGlzLG4pOmUpfSl9
LHVud3JhcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcmVudCgpLmVhY2goZnVuY3Rpb24oKXt2
Lm5vZGVOYW1lKHRoaXMsImJvZHkiKXx8dih0aGlzKS5yZXBsYWNlV2l0aCh0aGlzLmNoaWxkTm9k
ZXMpfSkuZW5kKCl9LGFwcGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3Vt
ZW50cywhMCxmdW5jdGlvbihlKXsodGhpcy5ub2RlVHlwZT09PTF8fHRoaXMubm9kZVR5cGU9PT0x
MSkmJnRoaXMuYXBwZW5kQ2hpbGQoZSl9KX0scHJlcGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlz
LmRvbU1hbmlwKGFyZ3VtZW50cywhMCxmdW5jdGlvbihlKXsodGhpcy5ub2RlVHlwZT09PTF8fHRo
aXMubm9kZVR5cGU9PT0xMSkmJnRoaXMuaW5zZXJ0QmVmb3JlKGUsdGhpcy5maXJzdENoaWxkKX0p
fSxiZWZvcmU6ZnVuY3Rpb24oKXtpZighdXQodGhpc1swXSkpcmV0dXJuIHRoaXMuZG9tTWFuaXAo
YXJndW1lbnRzLCExLGZ1bmN0aW9uKGUpe3RoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZSx0
aGlzKX0pO2lmKGFyZ3VtZW50cy5sZW5ndGgpe3ZhciBlPXYuY2xlYW4oYXJndW1lbnRzKTtyZXR1
cm4gdGhpcy5wdXNoU3RhY2sodi5tZXJnZShlLHRoaXMpLCJiZWZvcmUiLHRoaXMuc2VsZWN0b3Ip
fX0sYWZ0ZXI6ZnVuY3Rpb24oKXtpZighdXQodGhpc1swXSkpcmV0dXJuIHRoaXMuZG9tTWFuaXAo
YXJndW1lbnRzLCExLGZ1bmN0aW9uKGUpe3RoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZSx0
aGlzLm5leHRTaWJsaW5nKX0pO2lmKGFyZ3VtZW50cy5sZW5ndGgpe3ZhciBlPXYuY2xlYW4oYXJn
dW1lbnRzKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2sodi5tZXJnZSh0aGlzLGUpLCJhZnRlciIsdGhp
cy5zZWxlY3Rvcil9fSxyZW1vdmU6ZnVuY3Rpb24oZSx0KXt2YXIgbixyPTA7Zm9yKDsobj10aGlz
W3JdKSE9bnVsbDtyKyspaWYoIWV8fHYuZmlsdGVyKGUsW25dKS5sZW5ndGgpIXQmJm4ubm9kZVR5
cGU9PT0xJiYodi5jbGVhbkRhdGEobi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpKSx2LmNsZWFu
RGF0YShbbl0pKSxuLnBhcmVudE5vZGUmJm4ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChuKTtyZXR1
cm4gdGhpc30sZW1wdHk6ZnVuY3Rpb24oKXt2YXIgZSx0PTA7Zm9yKDsoZT10aGlzW3RdKSE9bnVs
bDt0Kyspe2Uubm9kZVR5cGU9PT0xJiZ2LmNsZWFuRGF0YShlLmdldEVsZW1lbnRzQnlUYWdOYW1l
KCIqIikpO3doaWxlKGUuZmlyc3RDaGlsZCllLnJlbW92ZUNoaWxkKGUuZmlyc3RDaGlsZCl9cmV0
dXJuIHRoaXN9LGNsb25lOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9ZT09bnVsbD8hMTplLHQ9dD09
bnVsbD9lOnQsdGhpcy5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gdi5jbG9uZSh0aGlzLGUsdCl9KX0s
aHRtbDpmdW5jdGlvbihlKXtyZXR1cm4gdi5hY2Nlc3ModGhpcyxmdW5jdGlvbihlKXt2YXIgbj10
aGlzWzBdfHx7fSxyPTAsaT10aGlzLmxlbmd0aDtpZihlPT09dClyZXR1cm4gbi5ub2RlVHlwZT09
PTE/bi5pbm5lckhUTUwucmVwbGFjZShodCwiIik6dDtpZih0eXBlb2YgZT09InN0cmluZyImJiF5
dC50ZXN0KGUpJiYodi5zdXBwb3J0Lmh0bWxTZXJpYWxpemV8fCF3dC50ZXN0KGUpKSYmKHYuc3Vw
cG9ydC5sZWFkaW5nV2hpdGVzcGFjZXx8IXB0LnRlc3QoZSkpJiYhTnRbKHZ0LmV4ZWMoZSl8fFsi
IiwiIl0pWzFdLnRvTG93ZXJDYXNlKCldKXtlPWUucmVwbGFjZShkdCwiPCQxPjwvJDI+Iik7dHJ5
e2Zvcig7cjxpO3IrKyluPXRoaXNbcl18fHt9LG4ubm9kZVR5cGU9PT0xJiYodi5jbGVhbkRhdGEo
bi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpKSxuLmlubmVySFRNTD1lKTtuPTB9Y2F0Y2gocyl7
fX1uJiZ0aGlzLmVtcHR5KCkuYXBwZW5kKGUpfSxudWxsLGUsYXJndW1lbnRzLmxlbmd0aCl9LHJl
cGxhY2VXaXRoOmZ1bmN0aW9uKGUpe3JldHVybiB1dCh0aGlzWzBdKT90aGlzLmxlbmd0aD90aGlz
LnB1c2hTdGFjayh2KHYuaXNGdW5jdGlvbihlKT9lKCk6ZSksInJlcGxhY2VXaXRoIixlKTp0aGlz
OnYuaXNGdW5jdGlvbihlKT90aGlzLmVhY2goZnVuY3Rpb24odCl7dmFyIG49dih0aGlzKSxyPW4u
aHRtbCgpO24ucmVwbGFjZVdpdGgoZS5jYWxsKHRoaXMsdCxyKSl9KToodHlwZW9mIGUhPSJzdHJp
bmciJiYoZT12KGUpLmRldGFjaCgpKSx0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgdD10aGlzLm5l
eHRTaWJsaW5nLG49dGhpcy5wYXJlbnROb2RlO3YodGhpcykucmVtb3ZlKCksdD92KHQpLmJlZm9y
ZShlKTp2KG4pLmFwcGVuZChlKX0pKX0sZGV0YWNoOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnJl
bW92ZShlLCEwKX0sZG9tTWFuaXA6ZnVuY3Rpb24oZSxuLHIpe2U9W10uY29uY2F0LmFwcGx5KFtd
LGUpO3ZhciBpLHMsbyx1LGE9MCxmPWVbMF0sbD1bXSxjPXRoaXMubGVuZ3RoO2lmKCF2LnN1cHBv
cnQuY2hlY2tDbG9uZSYmYz4xJiZ0eXBlb2YgZj09InN0cmluZyImJlN0LnRlc3QoZikpcmV0dXJu
IHRoaXMuZWFjaChmdW5jdGlvbigpe3YodGhpcykuZG9tTWFuaXAoZSxuLHIpfSk7aWYodi5pc0Z1
bmN0aW9uKGYpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oaSl7dmFyIHM9dih0aGlzKTtlWzBd
PWYuY2FsbCh0aGlzLGksbj9zLmh0bWwoKTp0KSxzLmRvbU1hbmlwKGUsbixyKX0pO2lmKHRoaXNb
MF0pe2k9di5idWlsZEZyYWdtZW50KGUsdGhpcyxsKSxvPWkuZnJhZ21lbnQscz1vLmZpcnN0Q2hp
bGQsby5jaGlsZE5vZGVzLmxlbmd0aD09PTEmJihvPXMpO2lmKHMpe249biYmdi5ub2RlTmFtZShz
LCJ0ciIpO2Zvcih1PWkuY2FjaGVhYmxlfHxjLTE7YTxjO2ErKylyLmNhbGwobiYmdi5ub2RlTmFt
ZSh0aGlzW2FdLCJ0YWJsZSIpP0x0KHRoaXNbYV0sInRib2R5Iik6dGhpc1thXSxhPT09dT9vOnYu
Y2xvbmUobywhMCwhMCkpfW89cz1udWxsLGwubGVuZ3RoJiZ2LmVhY2gobCxmdW5jdGlvbihlLHQp
e3Quc3JjP3YuYWpheD92LmFqYXgoe3VybDp0LnNyYyx0eXBlOiJHRVQiLGRhdGFUeXBlOiJzY3Jp
cHQiLGFzeW5jOiExLGdsb2JhbDohMSwidGhyb3dzIjohMH0pOnYuZXJyb3IoIm5vIGFqYXgiKTp2
Lmdsb2JhbEV2YWwoKHQudGV4dHx8dC50ZXh0Q29udGVudHx8dC5pbm5lckhUTUx8fCIiKS5yZXBs
YWNlKFR0LCIiKSksdC5wYXJlbnROb2RlJiZ0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodCl9KX1y
ZXR1cm4gdGhpc319KSx2LmJ1aWxkRnJhZ21lbnQ9ZnVuY3Rpb24oZSxuLHIpe3ZhciBzLG8sdSxh
PWVbMF07cmV0dXJuIG49bnx8aSxuPSFuLm5vZGVUeXBlJiZuWzBdfHxuLG49bi5vd25lckRvY3Vt
ZW50fHxuLGUubGVuZ3RoPT09MSYmdHlwZW9mIGE9PSJzdHJpbmciJiZhLmxlbmd0aDw1MTImJm49
PT1pJiZhLmNoYXJBdCgwKT09PSI8IiYmIWJ0LnRlc3QoYSkmJih2LnN1cHBvcnQuY2hlY2tDbG9u
ZXx8IVN0LnRlc3QoYSkpJiYodi5zdXBwb3J0Lmh0bWw1Q2xvbmV8fCF3dC50ZXN0KGEpKSYmKG89
ITAscz12LmZyYWdtZW50c1thXSx1PXMhPT10KSxzfHwocz1uLmNyZWF0ZURvY3VtZW50RnJhZ21l
bnQoKSx2LmNsZWFuKGUsbixzLHIpLG8mJih2LmZyYWdtZW50c1thXT11JiZzKSkse2ZyYWdtZW50
OnMsY2FjaGVhYmxlOm99fSx2LmZyYWdtZW50cz17fSx2LmVhY2goe2FwcGVuZFRvOiJhcHBlbmQi
LHByZXBlbmRUbzoicHJlcGVuZCIsaW5zZXJ0QmVmb3JlOiJiZWZvcmUiLGluc2VydEFmdGVyOiJh
ZnRlciIscmVwbGFjZUFsbDoicmVwbGFjZVdpdGgifSxmdW5jdGlvbihlLHQpe3YuZm5bZV09ZnVu
Y3Rpb24obil7dmFyIHIsaT0wLHM9W10sbz12KG4pLHU9by5sZW5ndGgsYT10aGlzLmxlbmd0aD09
PTEmJnRoaXNbMF0ucGFyZW50Tm9kZTtpZigoYT09bnVsbHx8YSYmYS5ub2RlVHlwZT09PTExJiZh
LmNoaWxkTm9kZXMubGVuZ3RoPT09MSkmJnU9PT0xKXJldHVybiBvW3RdKHRoaXNbMF0pLHRoaXM7
Zm9yKDtpPHU7aSsrKXI9KGk+MD90aGlzLmNsb25lKCEwKTp0aGlzKS5nZXQoKSx2KG9baV0pW3Rd
KHIpLHM9cy5jb25jYXQocik7cmV0dXJuIHRoaXMucHVzaFN0YWNrKHMsZSxvLnNlbGVjdG9yKX19
KSx2LmV4dGVuZCh7Y2xvbmU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGkscyxvO3Yuc3VwcG9ydC5o
dG1sNUNsb25lfHx2LmlzWE1MRG9jKGUpfHwhd3QudGVzdCgiPCIrZS5ub2RlTmFtZSsiPiIpP289
ZS5jbG9uZU5vZGUoITApOihrdC5pbm5lckhUTUw9ZS5vdXRlckhUTUwsa3QucmVtb3ZlQ2hpbGQo
bz1rdC5maXJzdENoaWxkKSk7aWYoKCF2LnN1cHBvcnQubm9DbG9uZUV2ZW50fHwhdi5zdXBwb3J0
Lm5vQ2xvbmVDaGVja2VkKSYmKGUubm9kZVR5cGU9PT0xfHxlLm5vZGVUeXBlPT09MTEpJiYhdi5p
c1hNTERvYyhlKSl7T3QoZSxvKSxyPU10KGUpLGk9TXQobyk7Zm9yKHM9MDtyW3NdOysrcylpW3Nd
JiZPdChyW3NdLGlbc10pfWlmKHQpe0F0KGUsbyk7aWYobil7cj1NdChlKSxpPU10KG8pO2Zvcihz
PTA7cltzXTsrK3MpQXQocltzXSxpW3NdKX19cmV0dXJuIHI9aT1udWxsLG99LGNsZWFuOmZ1bmN0
aW9uKGUsdCxuLHIpe3ZhciBzLG8sdSxhLGYsbCxjLGgscCxkLG0sZyx5PXQ9PT1pJiZDdCxiPVtd
O2lmKCF0fHx0eXBlb2YgdC5jcmVhdGVEb2N1bWVudEZyYWdtZW50PT0idW5kZWZpbmVkIil0PWk7
Zm9yKHM9MDsodT1lW3NdKSE9bnVsbDtzKyspe3R5cGVvZiB1PT0ibnVtYmVyIiYmKHUrPSIiKTtp
ZighdSljb250aW51ZTtpZih0eXBlb2YgdT09InN0cmluZyIpaWYoIWd0LnRlc3QodSkpdT10LmNy
ZWF0ZVRleHROb2RlKHUpO2Vsc2V7eT15fHxsdCh0KSxjPXQuY3JlYXRlRWxlbWVudCgiZGl2Iiks
eS5hcHBlbmRDaGlsZChjKSx1PXUucmVwbGFjZShkdCwiPCQxPjwvJDI+IiksYT0odnQuZXhlYyh1
KXx8WyIiLCIiXSlbMV0udG9Mb3dlckNhc2UoKSxmPU50W2FdfHxOdC5fZGVmYXVsdCxsPWZbMF0s
Yy5pbm5lckhUTUw9ZlsxXSt1K2ZbMl07d2hpbGUobC0tKWM9Yy5sYXN0Q2hpbGQ7aWYoIXYuc3Vw
cG9ydC50Ym9keSl7aD1tdC50ZXN0KHUpLHA9YT09PSJ0YWJsZSImJiFoP2MuZmlyc3RDaGlsZCYm
Yy5maXJzdENoaWxkLmNoaWxkTm9kZXM6ZlsxXT09PSI8dGFibGU+IiYmIWg/Yy5jaGlsZE5vZGVz
OltdO2ZvcihvPXAubGVuZ3RoLTE7bz49MDstLW8pdi5ub2RlTmFtZShwW29dLCJ0Ym9keSIpJiYh
cFtvXS5jaGlsZE5vZGVzLmxlbmd0aCYmcFtvXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHBbb10p
fSF2LnN1cHBvcnQubGVhZGluZ1doaXRlc3BhY2UmJnB0LnRlc3QodSkmJmMuaW5zZXJ0QmVmb3Jl
KHQuY3JlYXRlVGV4dE5vZGUocHQuZXhlYyh1KVswXSksYy5maXJzdENoaWxkKSx1PWMuY2hpbGRO
b2RlcyxjLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYyl9dS5ub2RlVHlwZT9iLnB1c2godSk6di5t
ZXJnZShiLHUpfWMmJih1PWM9eT1udWxsKTtpZighdi5zdXBwb3J0LmFwcGVuZENoZWNrZWQpZm9y
KHM9MDsodT1iW3NdKSE9bnVsbDtzKyspdi5ub2RlTmFtZSh1LCJpbnB1dCIpP190KHUpOnR5cGVv
ZiB1LmdldEVsZW1lbnRzQnlUYWdOYW1lIT0idW5kZWZpbmVkIiYmdi5ncmVwKHUuZ2V0RWxlbWVu
dHNCeVRhZ05hbWUoImlucHV0IiksX3QpO2lmKG4pe209ZnVuY3Rpb24oZSl7aWYoIWUudHlwZXx8
eHQudGVzdChlLnR5cGUpKXJldHVybiByP3IucHVzaChlLnBhcmVudE5vZGU/ZS5wYXJlbnROb2Rl
LnJlbW92ZUNoaWxkKGUpOmUpOm4uYXBwZW5kQ2hpbGQoZSl9O2ZvcihzPTA7KHU9YltzXSkhPW51
bGw7cysrKWlmKCF2Lm5vZGVOYW1lKHUsInNjcmlwdCIpfHwhbSh1KSluLmFwcGVuZENoaWxkKHUp
LHR5cGVvZiB1LmdldEVsZW1lbnRzQnlUYWdOYW1lIT0idW5kZWZpbmVkIiYmKGc9di5ncmVwKHYu
bWVyZ2UoW10sdS5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2NyaXB0IikpLG0pLGIuc3BsaWNlLmFw
cGx5KGIsW3MrMSwwXS5jb25jYXQoZykpLHMrPWcubGVuZ3RoKX1yZXR1cm4gYn0sY2xlYW5EYXRh
OmZ1bmN0aW9uKGUsdCl7dmFyIG4scixpLHMsbz0wLHU9di5leHBhbmRvLGE9di5jYWNoZSxmPXYu
c3VwcG9ydC5kZWxldGVFeHBhbmRvLGw9di5ldmVudC5zcGVjaWFsO2Zvcig7KGk9ZVtvXSkhPW51
bGw7bysrKWlmKHR8fHYuYWNjZXB0RGF0YShpKSl7cj1pW3VdLG49ciYmYVtyXTtpZihuKXtpZihu
LmV2ZW50cylmb3IocyBpbiBuLmV2ZW50cylsW3NdP3YuZXZlbnQucmVtb3ZlKGkscyk6di5yZW1v
dmVFdmVudChpLHMsbi5oYW5kbGUpO2Fbcl0mJihkZWxldGUgYVtyXSxmP2RlbGV0ZSBpW3VdOmku
cmVtb3ZlQXR0cmlidXRlP2kucmVtb3ZlQXR0cmlidXRlKHUpOmlbdV09bnVsbCx2LmRlbGV0ZWRJ
ZHMucHVzaChyKSl9fX19KSxmdW5jdGlvbigpe3ZhciBlLHQ7di51YU1hdGNoPWZ1bmN0aW9uKGUp
e2U9ZS50b0xvd2VyQ2FzZSgpO3ZhciB0PS8oY2hyb21lKVsgXC9dKFtcdy5dKykvLmV4ZWMoZSl8
fC8od2Via2l0KVsgXC9dKFtcdy5dKykvLmV4ZWMoZSl8fC8ob3BlcmEpKD86Lip2ZXJzaW9ufClb
IFwvXShbXHcuXSspLy5leGVjKGUpfHwvKG1zaWUpIChbXHcuXSspLy5leGVjKGUpfHxlLmluZGV4
T2YoImNvbXBhdGlibGUiKTwwJiYvKG1vemlsbGEpKD86Lio/IHJ2OihbXHcuXSspfCkvLmV4ZWMo
ZSl8fFtdO3JldHVybnticm93c2VyOnRbMV18fCIiLHZlcnNpb246dFsyXXx8IjAifX0sZT12LnVh
TWF0Y2goby51c2VyQWdlbnQpLHQ9e30sZS5icm93c2VyJiYodFtlLmJyb3dzZXJdPSEwLHQudmVy
c2lvbj1lLnZlcnNpb24pLHQuY2hyb21lP3Qud2Via2l0PSEwOnQud2Via2l0JiYodC5zYWZhcmk9
ITApLHYuYnJvd3Nlcj10LHYuc3ViPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LG4pe3JldHVybiBu
ZXcgZS5mbi5pbml0KHQsbil9di5leHRlbmQoITAsZSx0aGlzKSxlLnN1cGVyY2xhc3M9dGhpcyxl
LmZuPWUucHJvdG90eXBlPXRoaXMoKSxlLmZuLmNvbnN0cnVjdG9yPWUsZS5zdWI9dGhpcy5zdWIs
ZS5mbi5pbml0PWZ1bmN0aW9uKHIsaSl7cmV0dXJuIGkmJmkgaW5zdGFuY2VvZiB2JiYhKGkgaW5z
dGFuY2VvZiBlKSYmKGk9ZShpKSksdi5mbi5pbml0LmNhbGwodGhpcyxyLGksdCl9LGUuZm4uaW5p
dC5wcm90b3R5cGU9ZS5mbjt2YXIgdD1lKGkpO3JldHVybiBlfX0oKTt2YXIgRHQsUHQsSHQsQnQ9
L2FscGhhXChbXildKlwpL2ksanQ9L29wYWNpdHk9KFteKV0qKS8sRnQ9L14odG9wfHJpZ2h0fGJv
dHRvbXxsZWZ0KSQvLEl0PS9eKG5vbmV8dGFibGUoPyEtY1tlYV0pLispLyxxdD0vXm1hcmdpbi8s
UnQ9bmV3IFJlZ0V4cCgiXigiK20rIikoLiopJCIsImkiKSxVdD1uZXcgUmVnRXhwKCJeKCIrbSsi
KSg/IXB4KVthLXolXSskIiwiaSIpLHp0PW5ldyBSZWdFeHAoIl4oWy0rXSk9KCIrbSsiKSIsImki
KSxXdD17Qk9EWToiYmxvY2sifSxYdD17cG9zaXRpb246ImFic29sdXRlIix2aXNpYmlsaXR5OiJo
aWRkZW4iLGRpc3BsYXk6ImJsb2NrIn0sVnQ9e2xldHRlclNwYWNpbmc6MCxmb250V2VpZ2h0OjQw
MH0sJHQ9WyJUb3AiLCJSaWdodCIsIkJvdHRvbSIsIkxlZnQiXSxKdD1bIldlYmtpdCIsIk8iLCJN
b3oiLCJtcyJdLEt0PXYuZm4udG9nZ2xlO3YuZm4uZXh0ZW5kKHtjc3M6ZnVuY3Rpb24oZSxuKXty
ZXR1cm4gdi5hY2Nlc3ModGhpcyxmdW5jdGlvbihlLG4scil7cmV0dXJuIHIhPT10P3Yuc3R5bGUo
ZSxuLHIpOnYuY3NzKGUsbil9LGUsbixhcmd1bWVudHMubGVuZ3RoPjEpfSxzaG93OmZ1bmN0aW9u
KCl7cmV0dXJuIFl0KHRoaXMsITApfSxoaWRlOmZ1bmN0aW9uKCl7cmV0dXJuIFl0KHRoaXMpfSx0
b2dnbGU6ZnVuY3Rpb24oZSx0KXt2YXIgbj10eXBlb2YgZT09ImJvb2xlYW4iO3JldHVybiB2Lmlz
RnVuY3Rpb24oZSkmJnYuaXNGdW5jdGlvbih0KT9LdC5hcHBseSh0aGlzLGFyZ3VtZW50cyk6dGhp
cy5lYWNoKGZ1bmN0aW9uKCl7KG4/ZTpHdCh0aGlzKSk/dih0aGlzKS5zaG93KCk6dih0aGlzKS5o
aWRlKCl9KX19KSx2LmV4dGVuZCh7Y3NzSG9va3M6e29wYWNpdHk6e2dldDpmdW5jdGlvbihlLHQp
e2lmKHQpe3ZhciBuPUR0KGUsIm9wYWNpdHkiKTtyZXR1cm4gbj09PSIiPyIxIjpufX19fSxjc3NO
dW1iZXI6e2ZpbGxPcGFjaXR5OiEwLGZvbnRXZWlnaHQ6ITAsbGluZUhlaWdodDohMCxvcGFjaXR5
OiEwLG9ycGhhbnM6ITAsd2lkb3dzOiEwLHpJbmRleDohMCx6b29tOiEwfSxjc3NQcm9wczp7ImZs
b2F0Ijp2LnN1cHBvcnQuY3NzRmxvYXQ/ImNzc0Zsb2F0Ijoic3R5bGVGbG9hdCJ9LHN0eWxlOmZ1
bmN0aW9uKGUsbixyLGkpe2lmKCFlfHxlLm5vZGVUeXBlPT09M3x8ZS5ub2RlVHlwZT09PTh8fCFl
LnN0eWxlKXJldHVybjt2YXIgcyxvLHUsYT12LmNhbWVsQ2FzZShuKSxmPWUuc3R5bGU7bj12LmNz
c1Byb3BzW2FdfHwodi5jc3NQcm9wc1thXT1RdChmLGEpKSx1PXYuY3NzSG9va3Nbbl18fHYuY3Nz
SG9va3NbYV07aWYocj09PXQpcmV0dXJuIHUmJiJnZXQiaW4gdSYmKHM9dS5nZXQoZSwhMSxpKSkh
PT10P3M6ZltuXTtvPXR5cGVvZiByLG89PT0ic3RyaW5nIiYmKHM9enQuZXhlYyhyKSkmJihyPShz
WzFdKzEpKnNbMl0rcGFyc2VGbG9hdCh2LmNzcyhlLG4pKSxvPSJudW1iZXIiKTtpZihyPT1udWxs
fHxvPT09Im51bWJlciImJmlzTmFOKHIpKXJldHVybjtvPT09Im51bWJlciImJiF2LmNzc051bWJl
clthXSYmKHIrPSJweCIpO2lmKCF1fHwhKCJzZXQiaW4gdSl8fChyPXUuc2V0KGUscixpKSkhPT10
KXRyeXtmW25dPXJ9Y2F0Y2gobCl7fX0sY3NzOmZ1bmN0aW9uKGUsbixyLGkpe3ZhciBzLG8sdSxh
PXYuY2FtZWxDYXNlKG4pO3JldHVybiBuPXYuY3NzUHJvcHNbYV18fCh2LmNzc1Byb3BzW2FdPVF0
KGUuc3R5bGUsYSkpLHU9di5jc3NIb29rc1tuXXx8di5jc3NIb29rc1thXSx1JiYiZ2V0ImluIHUm
JihzPXUuZ2V0KGUsITAsaSkpLHM9PT10JiYocz1EdChlLG4pKSxzPT09Im5vcm1hbCImJm4gaW4g
VnQmJihzPVZ0W25dKSxyfHxpIT09dD8obz1wYXJzZUZsb2F0KHMpLHJ8fHYuaXNOdW1lcmljKG8p
P298fDA6cyk6c30sc3dhcDpmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxzPXt9O2ZvcihpIGluIHQp
c1tpXT1lLnN0eWxlW2ldLGUuc3R5bGVbaV09dFtpXTtyPW4uY2FsbChlKTtmb3IoaSBpbiB0KWUu
c3R5bGVbaV09c1tpXTtyZXR1cm4gcn19KSxlLmdldENvbXB1dGVkU3R5bGU/RHQ9ZnVuY3Rpb24o
dCxuKXt2YXIgcixpLHMsbyx1PWUuZ2V0Q29tcHV0ZWRTdHlsZSh0LG51bGwpLGE9dC5zdHlsZTty
ZXR1cm4gdSYmKHI9dS5nZXRQcm9wZXJ0eVZhbHVlKG4pfHx1W25dLHI9PT0iIiYmIXYuY29udGFp
bnModC5vd25lckRvY3VtZW50LHQpJiYocj12LnN0eWxlKHQsbikpLFV0LnRlc3QocikmJnF0LnRl
c3QobikmJihpPWEud2lkdGgscz1hLm1pbldpZHRoLG89YS5tYXhXaWR0aCxhLm1pbldpZHRoPWEu
bWF4V2lkdGg9YS53aWR0aD1yLHI9dS53aWR0aCxhLndpZHRoPWksYS5taW5XaWR0aD1zLGEubWF4
V2lkdGg9bykpLHJ9OmkuZG9jdW1lbnRFbGVtZW50LmN1cnJlbnRTdHlsZSYmKER0PWZ1bmN0aW9u
KGUsdCl7dmFyIG4scixpPWUuY3VycmVudFN0eWxlJiZlLmN1cnJlbnRTdHlsZVt0XSxzPWUuc3R5
bGU7cmV0dXJuIGk9PW51bGwmJnMmJnNbdF0mJihpPXNbdF0pLFV0LnRlc3QoaSkmJiFGdC50ZXN0
KHQpJiYobj1zLmxlZnQscj1lLnJ1bnRpbWVTdHlsZSYmZS5ydW50aW1lU3R5bGUubGVmdCxyJiYo
ZS5ydW50aW1lU3R5bGUubGVmdD1lLmN1cnJlbnRTdHlsZS5sZWZ0KSxzLmxlZnQ9dD09PSJmb250
U2l6ZSI/IjFlbSI6aSxpPXMucGl4ZWxMZWZ0KyJweCIscy5sZWZ0PW4sciYmKGUucnVudGltZVN0
eWxlLmxlZnQ9cikpLGk9PT0iIj8iYXV0byI6aX0pLHYuZWFjaChbImhlaWdodCIsIndpZHRoIl0s
ZnVuY3Rpb24oZSx0KXt2LmNzc0hvb2tzW3RdPXtnZXQ6ZnVuY3Rpb24oZSxuLHIpe2lmKG4pcmV0
dXJuIGUub2Zmc2V0V2lkdGg9PT0wJiZJdC50ZXN0KER0KGUsImRpc3BsYXkiKSk/di5zd2FwKGUs
WHQsZnVuY3Rpb24oKXtyZXR1cm4gdG4oZSx0LHIpfSk6dG4oZSx0LHIpfSxzZXQ6ZnVuY3Rpb24o
ZSxuLHIpe3JldHVybiBadChlLG4scj9lbihlLHQscix2LnN1cHBvcnQuYm94U2l6aW5nJiZ2LmNz
cyhlLCJib3hTaXppbmciKT09PSJib3JkZXItYm94Iik6MCl9fX0pLHYuc3VwcG9ydC5vcGFjaXR5
fHwodi5jc3NIb29rcy5vcGFjaXR5PXtnZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4ganQudGVzdCgo
dCYmZS5jdXJyZW50U3R5bGU/ZS5jdXJyZW50U3R5bGUuZmlsdGVyOmUuc3R5bGUuZmlsdGVyKXx8
IiIpPy4wMSpwYXJzZUZsb2F0KFJlZ0V4cC4kMSkrIiI6dD8iMSI6IiJ9LHNldDpmdW5jdGlvbihl
LHQpe3ZhciBuPWUuc3R5bGUscj1lLmN1cnJlbnRTdHlsZSxpPXYuaXNOdW1lcmljKHQpPyJhbHBo
YShvcGFjaXR5PSIrdCoxMDArIikiOiIiLHM9ciYmci5maWx0ZXJ8fG4uZmlsdGVyfHwiIjtuLnpv
b209MTtpZih0Pj0xJiZ2LnRyaW0ocy5yZXBsYWNlKEJ0LCIiKSk9PT0iIiYmbi5yZW1vdmVBdHRy
aWJ1dGUpe24ucmVtb3ZlQXR0cmlidXRlKCJmaWx0ZXIiKTtpZihyJiYhci5maWx0ZXIpcmV0dXJu
fW4uZmlsdGVyPUJ0LnRlc3Qocyk/cy5yZXBsYWNlKEJ0LGkpOnMrIiAiK2l9fSksdihmdW5jdGlv
bigpe3Yuc3VwcG9ydC5yZWxpYWJsZU1hcmdpblJpZ2h0fHwodi5jc3NIb29rcy5tYXJnaW5SaWdo
dD17Z2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHYuc3dhcChlLHtkaXNwbGF5OiJpbmxpbmUtYmxv
Y2sifSxmdW5jdGlvbigpe2lmKHQpcmV0dXJuIER0KGUsIm1hcmdpblJpZ2h0Iil9KX19KSwhdi5z
dXBwb3J0LnBpeGVsUG9zaXRpb24mJnYuZm4ucG9zaXRpb24mJnYuZWFjaChbInRvcCIsImxlZnQi
XSxmdW5jdGlvbihlLHQpe3YuY3NzSG9va3NbdF09e2dldDpmdW5jdGlvbihlLG4pe2lmKG4pe3Zh
ciByPUR0KGUsdCk7cmV0dXJuIFV0LnRlc3Qocik/dihlKS5wb3NpdGlvbigpW3RdKyJweCI6cn19
fX0pfSksdi5leHByJiZ2LmV4cHIuZmlsdGVycyYmKHYuZXhwci5maWx0ZXJzLmhpZGRlbj1mdW5j
dGlvbihlKXtyZXR1cm4gZS5vZmZzZXRXaWR0aD09PTAmJmUub2Zmc2V0SGVpZ2h0PT09MHx8IXYu
c3VwcG9ydC5yZWxpYWJsZUhpZGRlbk9mZnNldHMmJihlLnN0eWxlJiZlLnN0eWxlLmRpc3BsYXl8
fER0KGUsImRpc3BsYXkiKSk9PT0ibm9uZSJ9LHYuZXhwci5maWx0ZXJzLnZpc2libGU9ZnVuY3Rp
b24oZSl7cmV0dXJuIXYuZXhwci5maWx0ZXJzLmhpZGRlbihlKX0pLHYuZWFjaCh7bWFyZ2luOiIi
LHBhZGRpbmc6IiIsYm9yZGVyOiJXaWR0aCJ9LGZ1bmN0aW9uKGUsdCl7di5jc3NIb29rc1tlK3Rd
PXtleHBhbmQ6ZnVuY3Rpb24obil7dmFyIHIsaT10eXBlb2Ygbj09InN0cmluZyI/bi5zcGxpdCgi
ICIpOltuXSxzPXt9O2ZvcihyPTA7cjw0O3IrKylzW2UrJHRbcl0rdF09aVtyXXx8aVtyLTJdfHxp
WzBdO3JldHVybiBzfX0scXQudGVzdChlKXx8KHYuY3NzSG9va3NbZSt0XS5zZXQ9WnQpfSk7dmFy
IHJuPS8lMjAvZyxzbj0vXFtcXSQvLG9uPS9ccj9cbi9nLHVuPS9eKD86Y29sb3J8ZGF0ZXxkYXRl
dGltZXxkYXRldGltZS1sb2NhbHxlbWFpbHxoaWRkZW58bW9udGh8bnVtYmVyfHBhc3N3b3JkfHJh
bmdlfHNlYXJjaHx0ZWx8dGV4dHx0aW1lfHVybHx3ZWVrKSQvaSxhbj0vXig/OnNlbGVjdHx0ZXh0
YXJlYSkvaTt2LmZuLmV4dGVuZCh7c2VyaWFsaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHYucGFyYW0o
dGhpcy5zZXJpYWxpemVBcnJheSgpKX0sc2VyaWFsaXplQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4g
dGhpcy5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbGVtZW50cz92Lm1ha2VBcnJheSh0aGlz
LmVsZW1lbnRzKTp0aGlzfSkuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmFtZSYmIXRo
aXMuZGlzYWJsZWQmJih0aGlzLmNoZWNrZWR8fGFuLnRlc3QodGhpcy5ub2RlTmFtZSl8fHVuLnRl
c3QodGhpcy50eXBlKSl9KS5tYXAoZnVuY3Rpb24oZSx0KXt2YXIgbj12KHRoaXMpLnZhbCgpO3Jl
dHVybiBuPT1udWxsP251bGw6di5pc0FycmF5KG4pP3YubWFwKG4sZnVuY3Rpb24oZSxuKXtyZXR1
cm57bmFtZTp0Lm5hbWUsdmFsdWU6ZS5yZXBsYWNlKG9uLCJcclxuIil9fSk6e25hbWU6dC5uYW1l
LHZhbHVlOm4ucmVwbGFjZShvbiwiXHJcbiIpfX0pLmdldCgpfX0pLHYucGFyYW09ZnVuY3Rpb24o
ZSxuKXt2YXIgcixpPVtdLHM9ZnVuY3Rpb24oZSx0KXt0PXYuaXNGdW5jdGlvbih0KT90KCk6dD09
bnVsbD8iIjp0LGlbaS5sZW5ndGhdPWVuY29kZVVSSUNvbXBvbmVudChlKSsiPSIrZW5jb2RlVVJJ
Q29tcG9uZW50KHQpfTtuPT09dCYmKG49di5hamF4U2V0dGluZ3MmJnYuYWpheFNldHRpbmdzLnRy
YWRpdGlvbmFsKTtpZih2LmlzQXJyYXkoZSl8fGUuanF1ZXJ5JiYhdi5pc1BsYWluT2JqZWN0KGUp
KXYuZWFjaChlLGZ1bmN0aW9uKCl7cyh0aGlzLm5hbWUsdGhpcy52YWx1ZSl9KTtlbHNlIGZvcihy
IGluIGUpZm4ocixlW3JdLG4scyk7cmV0dXJuIGkuam9pbigiJiIpLnJlcGxhY2Uocm4sIisiKX07
dmFyIGxuLGNuLGhuPS8jLiokLyxwbj0vXiguKj8pOlsgXHRdKihbXlxyXG5dKilccj8kL21nLGRu
PS9eKD86YWJvdXR8YXBwfGFwcFwtc3RvcmFnZXwuK1wtZXh0ZW5zaW9ufGZpbGV8cmVzfHdpZGdl
dCk6JC8sdm49L14oPzpHRVR8SEVBRCkkLyxtbj0vXlwvXC8vLGduPS9cPy8seW49LzxzY3JpcHRc
YltePF0qKD86KD8hPFwvc2NyaXB0Pik8W148XSopKjxcL3NjcmlwdD4vZ2ksYm49LyhbPyZdKV89
W14mXSovLHduPS9eKFtcd1wrXC5cLV0rOikoPzpcL1wvKFteXC8/IzpdKikoPzo6KFxkKyl8KXwp
LyxFbj12LmZuLmxvYWQsU249e30seG49e30sVG49WyIqLyJdK1siKiJdO3RyeXtjbj1zLmhyZWZ9
Y2F0Y2goTm4pe2NuPWkuY3JlYXRlRWxlbWVudCgiYSIpLGNuLmhyZWY9IiIsY249Y24uaHJlZn1s
bj13bi5leGVjKGNuLnRvTG93ZXJDYXNlKCkpfHxbXSx2LmZuLmxvYWQ9ZnVuY3Rpb24oZSxuLHIp
e2lmKHR5cGVvZiBlIT0ic3RyaW5nIiYmRW4pcmV0dXJuIEVuLmFwcGx5KHRoaXMsYXJndW1lbnRz
KTtpZighdGhpcy5sZW5ndGgpcmV0dXJuIHRoaXM7dmFyIGkscyxvLHU9dGhpcyxhPWUuaW5kZXhP
ZigiICIpO3JldHVybiBhPj0wJiYoaT1lLnNsaWNlKGEsZS5sZW5ndGgpLGU9ZS5zbGljZSgwLGEp
KSx2LmlzRnVuY3Rpb24obik/KHI9bixuPXQpOm4mJnR5cGVvZiBuPT0ib2JqZWN0IiYmKHM9IlBP
U1QiKSx2LmFqYXgoe3VybDplLHR5cGU6cyxkYXRhVHlwZToiaHRtbCIsZGF0YTpuLGNvbXBsZXRl
OmZ1bmN0aW9uKGUsdCl7ciYmdS5lYWNoKHIsb3x8W2UucmVzcG9uc2VUZXh0LHQsZV0pfX0pLmRv
bmUoZnVuY3Rpb24oZSl7bz1hcmd1bWVudHMsdS5odG1sKGk/digiPGRpdj4iKS5hcHBlbmQoZS5y
ZXBsYWNlKHluLCIiKSkuZmluZChpKTplKX0pLHRoaXN9LHYuZWFjaCgiYWpheFN0YXJ0IGFqYXhT
dG9wIGFqYXhDb21wbGV0ZSBhamF4RXJyb3IgYWpheFN1Y2Nlc3MgYWpheFNlbmQiLnNwbGl0KCIg
IiksZnVuY3Rpb24oZSx0KXt2LmZuW3RdPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm9uKHQsZSl9
fSksdi5lYWNoKFsiZ2V0IiwicG9zdCJdLGZ1bmN0aW9uKGUsbil7dltuXT1mdW5jdGlvbihlLHIs
aSxzKXtyZXR1cm4gdi5pc0Z1bmN0aW9uKHIpJiYocz1zfHxpLGk9cixyPXQpLHYuYWpheCh7dHlw
ZTpuLHVybDplLGRhdGE6cixzdWNjZXNzOmksZGF0YVR5cGU6c30pfX0pLHYuZXh0ZW5kKHtnZXRT
Y3JpcHQ6ZnVuY3Rpb24oZSxuKXtyZXR1cm4gdi5nZXQoZSx0LG4sInNjcmlwdCIpfSxnZXRKU09O
OmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdi5nZXQoZSx0LG4sImpzb24iKX0sYWpheFNldHVwOmZ1
bmN0aW9uKGUsdCl7cmV0dXJuIHQ/TG4oZSx2LmFqYXhTZXR0aW5ncyk6KHQ9ZSxlPXYuYWpheFNl
dHRpbmdzKSxMbihlLHQpLGV9LGFqYXhTZXR0aW5nczp7dXJsOmNuLGlzTG9jYWw6ZG4udGVzdChs
blsxXSksZ2xvYmFsOiEwLHR5cGU6IkdFVCIsY29udGVudFR5cGU6ImFwcGxpY2F0aW9uL3gtd3d3
LWZvcm0tdXJsZW5jb2RlZDsgY2hhcnNldD1VVEYtOCIscHJvY2Vzc0RhdGE6ITAsYXN5bmM6ITAs
YWNjZXB0czp7eG1sOiJhcHBsaWNhdGlvbi94bWwsIHRleHQveG1sIixodG1sOiJ0ZXh0L2h0bWwi
LHRleHQ6InRleHQvcGxhaW4iLGpzb246ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvamF2YXNjcmlw
dCIsIioiOlRufSxjb250ZW50czp7eG1sOi94bWwvLGh0bWw6L2h0bWwvLGpzb246L2pzb24vfSxy
ZXNwb25zZUZpZWxkczp7eG1sOiJyZXNwb25zZVhNTCIsdGV4dDoicmVzcG9uc2VUZXh0In0sY29u
dmVydGVyczp7IiogdGV4dCI6ZS5TdHJpbmcsInRleHQgaHRtbCI6ITAsInRleHQganNvbiI6di5w
YXJzZUpTT04sInRleHQgeG1sIjp2LnBhcnNlWE1MfSxmbGF0T3B0aW9uczp7Y29udGV4dDohMCx1
cmw6ITB9fSxhamF4UHJlZmlsdGVyOkNuKFNuKSxhamF4VHJhbnNwb3J0OkNuKHhuKSxhamF4OmZ1
bmN0aW9uKGUsbil7ZnVuY3Rpb24gVChlLG4scyxhKXt2YXIgbCx5LGIsdyxTLFQ9bjtpZihFPT09
MilyZXR1cm47RT0yLHUmJmNsZWFyVGltZW91dCh1KSxvPXQsaT1hfHwiIix4LnJlYWR5U3RhdGU9
ZT4wPzQ6MCxzJiYodz1BbihjLHgscykpO2lmKGU+PTIwMCYmZTwzMDB8fGU9PT0zMDQpYy5pZk1v
ZGlmaWVkJiYoUz14LmdldFJlc3BvbnNlSGVhZGVyKCJMYXN0LU1vZGlmaWVkIiksUyYmKHYubGFz
dE1vZGlmaWVkW3JdPVMpLFM9eC5nZXRSZXNwb25zZUhlYWRlcigiRXRhZyIpLFMmJih2LmV0YWdb
cl09UykpLGU9PT0zMDQ/KFQ9Im5vdG1vZGlmaWVkIixsPSEwKToobD1PbihjLHcpLFQ9bC5zdGF0
ZSx5PWwuZGF0YSxiPWwuZXJyb3IsbD0hYik7ZWxzZXtiPVQ7aWYoIVR8fGUpVD0iZXJyb3IiLGU8
MCYmKGU9MCl9eC5zdGF0dXM9ZSx4LnN0YXR1c1RleHQ9KG58fFQpKyIiLGw/ZC5yZXNvbHZlV2l0
aChoLFt5LFQseF0pOmQucmVqZWN0V2l0aChoLFt4LFQsYl0pLHguc3RhdHVzQ29kZShnKSxnPXQs
ZiYmcC50cmlnZ2VyKCJhamF4IisobD8iU3VjY2VzcyI6IkVycm9yIiksW3gsYyxsP3k6Yl0pLG0u
ZmlyZVdpdGgoaCxbeCxUXSksZiYmKHAudHJpZ2dlcigiYWpheENvbXBsZXRlIixbeCxjXSksLS12
LmFjdGl2ZXx8di5ldmVudC50cmlnZ2VyKCJhamF4U3RvcCIpKX10eXBlb2YgZT09Im9iamVjdCIm
JihuPWUsZT10KSxuPW58fHt9O3ZhciByLGkscyxvLHUsYSxmLGwsYz12LmFqYXhTZXR1cCh7fSxu
KSxoPWMuY29udGV4dHx8YyxwPWghPT1jJiYoaC5ub2RlVHlwZXx8aCBpbnN0YW5jZW9mIHYpP3Yo
aCk6di5ldmVudCxkPXYuRGVmZXJyZWQoKSxtPXYuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLGc9
Yy5zdGF0dXNDb2RlfHx7fSxiPXt9LHc9e30sRT0wLFM9ImNhbmNlbGVkIix4PXtyZWFkeVN0YXRl
OjAsc2V0UmVxdWVzdEhlYWRlcjpmdW5jdGlvbihlLHQpe2lmKCFFKXt2YXIgbj1lLnRvTG93ZXJD
YXNlKCk7ZT13W25dPXdbbl18fGUsYltlXT10fXJldHVybiB0aGlzfSxnZXRBbGxSZXNwb25zZUhl
YWRlcnM6ZnVuY3Rpb24oKXtyZXR1cm4gRT09PTI/aTpudWxsfSxnZXRSZXNwb25zZUhlYWRlcjpm
dW5jdGlvbihlKXt2YXIgbjtpZihFPT09Mil7aWYoIXMpe3M9e307d2hpbGUobj1wbi5leGVjKGkp
KXNbblsxXS50b0xvd2VyQ2FzZSgpXT1uWzJdfW49c1tlLnRvTG93ZXJDYXNlKCldfXJldHVybiBu
PT09dD9udWxsOm59LG92ZXJyaWRlTWltZVR5cGU6ZnVuY3Rpb24oZSl7cmV0dXJuIEV8fChjLm1p
bWVUeXBlPWUpLHRoaXN9LGFib3J0OmZ1bmN0aW9uKGUpe3JldHVybiBlPWV8fFMsbyYmby5hYm9y
dChlKSxUKDAsZSksdGhpc319O2QucHJvbWlzZSh4KSx4LnN1Y2Nlc3M9eC5kb25lLHguZXJyb3I9
eC5mYWlsLHguY29tcGxldGU9bS5hZGQseC5zdGF0dXNDb2RlPWZ1bmN0aW9uKGUpe2lmKGUpe3Zh
ciB0O2lmKEU8Milmb3IodCBpbiBlKWdbdF09W2dbdF0sZVt0XV07ZWxzZSB0PWVbeC5zdGF0dXNd
LHguYWx3YXlzKHQpfXJldHVybiB0aGlzfSxjLnVybD0oKGV8fGMudXJsKSsiIikucmVwbGFjZSho
biwiIikucmVwbGFjZShtbixsblsxXSsiLy8iKSxjLmRhdGFUeXBlcz12LnRyaW0oYy5kYXRhVHlw
ZXx8IioiKS50b0xvd2VyQ2FzZSgpLnNwbGl0KHkpLGMuY3Jvc3NEb21haW49PW51bGwmJihhPXdu
LmV4ZWMoYy51cmwudG9Mb3dlckNhc2UoKSksYy5jcm9zc0RvbWFpbj0hKCFhfHxhWzFdPT09bG5b
MV0mJmFbMl09PT1sblsyXSYmKGFbM118fChhWzFdPT09Imh0dHA6Ij84MDo0NDMpKT09KGxuWzNd
fHwobG5bMV09PT0iaHR0cDoiPzgwOjQ0MykpKSksYy5kYXRhJiZjLnByb2Nlc3NEYXRhJiZ0eXBl
b2YgYy5kYXRhIT0ic3RyaW5nIiYmKGMuZGF0YT12LnBhcmFtKGMuZGF0YSxjLnRyYWRpdGlvbmFs
KSksa24oU24sYyxuLHgpO2lmKEU9PT0yKXJldHVybiB4O2Y9Yy5nbG9iYWwsYy50eXBlPWMudHlw
ZS50b1VwcGVyQ2FzZSgpLGMuaGFzQ29udGVudD0hdm4udGVzdChjLnR5cGUpLGYmJnYuYWN0aXZl
Kys9PT0wJiZ2LmV2ZW50LnRyaWdnZXIoImFqYXhTdGFydCIpO2lmKCFjLmhhc0NvbnRlbnQpe2Mu
ZGF0YSYmKGMudXJsKz0oZ24udGVzdChjLnVybCk/IiYiOiI/IikrYy5kYXRhLGRlbGV0ZSBjLmRh
dGEpLHI9Yy51cmw7aWYoYy5jYWNoZT09PSExKXt2YXIgTj12Lm5vdygpLEM9Yy51cmwucmVwbGFj
ZShibiwiJDFfPSIrTik7Yy51cmw9QysoQz09PWMudXJsPyhnbi50ZXN0KGMudXJsKT8iJiI6Ij8i
KSsiXz0iK046IiIpfX0oYy5kYXRhJiZjLmhhc0NvbnRlbnQmJmMuY29udGVudFR5cGUhPT0hMXx8
bi5jb250ZW50VHlwZSkmJnguc2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC1UeXBlIixjLmNvbnRl
bnRUeXBlKSxjLmlmTW9kaWZpZWQmJihyPXJ8fGMudXJsLHYubGFzdE1vZGlmaWVkW3JdJiZ4LnNl
dFJlcXVlc3RIZWFkZXIoIklmLU1vZGlmaWVkLVNpbmNlIix2Lmxhc3RNb2RpZmllZFtyXSksdi5l
dGFnW3JdJiZ4LnNldFJlcXVlc3RIZWFkZXIoIklmLU5vbmUtTWF0Y2giLHYuZXRhZ1tyXSkpLHgu
c2V0UmVxdWVzdEhlYWRlcigiQWNjZXB0IixjLmRhdGFUeXBlc1swXSYmYy5hY2NlcHRzW2MuZGF0
YVR5cGVzWzBdXT9jLmFjY2VwdHNbYy5kYXRhVHlwZXNbMF1dKyhjLmRhdGFUeXBlc1swXSE9PSIq
Ij8iLCAiK1RuKyI7IHE9MC4wMSI6IiIpOmMuYWNjZXB0c1siKiJdKTtmb3IobCBpbiBjLmhlYWRl
cnMpeC5zZXRSZXF1ZXN0SGVhZGVyKGwsYy5oZWFkZXJzW2xdKTtpZighYy5iZWZvcmVTZW5kfHxj
LmJlZm9yZVNlbmQuY2FsbChoLHgsYykhPT0hMSYmRSE9PTIpe1M9ImFib3J0Ijtmb3IobCBpbntz
dWNjZXNzOjEsZXJyb3I6MSxjb21wbGV0ZToxfSl4W2xdKGNbbF0pO289a24oeG4sYyxuLHgpO2lm
KCFvKVQoLTEsIk5vIFRyYW5zcG9ydCIpO2Vsc2V7eC5yZWFkeVN0YXRlPTEsZiYmcC50cmlnZ2Vy
KCJhamF4U2VuZCIsW3gsY10pLGMuYXN5bmMmJmMudGltZW91dD4wJiYodT1zZXRUaW1lb3V0KGZ1
bmN0aW9uKCl7eC5hYm9ydCgidGltZW91dCIpfSxjLnRpbWVvdXQpKTt0cnl7RT0xLG8uc2VuZChi
LFQpfWNhdGNoKGspe2lmKCEoRTwyKSl0aHJvdyBrO1QoLTEsayl9fXJldHVybiB4fXJldHVybiB4
LmFib3J0KCl9LGFjdGl2ZTowLGxhc3RNb2RpZmllZDp7fSxldGFnOnt9fSk7dmFyIE1uPVtdLF9u
PS9cPy8sRG49Lyg9KVw/KD89JnwkKXxcP1w/LyxQbj12Lm5vdygpO3YuYWpheFNldHVwKHtqc29u
cDoiY2FsbGJhY2siLGpzb25wQ2FsbGJhY2s6ZnVuY3Rpb24oKXt2YXIgZT1Nbi5wb3AoKXx8di5l
eHBhbmRvKyJfIitQbisrO3JldHVybiB0aGlzW2VdPSEwLGV9fSksdi5hamF4UHJlZmlsdGVyKCJq
c29uIGpzb25wIixmdW5jdGlvbihuLHIsaSl7dmFyIHMsbyx1LGE9bi5kYXRhLGY9bi51cmwsbD1u
Lmpzb25wIT09ITEsYz1sJiZEbi50ZXN0KGYpLGg9bCYmIWMmJnR5cGVvZiBhPT0ic3RyaW5nIiYm
IShuLmNvbnRlbnRUeXBlfHwiIikuaW5kZXhPZigiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxl
bmNvZGVkIikmJkRuLnRlc3QoYSk7aWYobi5kYXRhVHlwZXNbMF09PT0ianNvbnAifHxjfHxoKXJl
dHVybiBzPW4uanNvbnBDYWxsYmFjaz12LmlzRnVuY3Rpb24obi5qc29ucENhbGxiYWNrKT9uLmpz
b25wQ2FsbGJhY2soKTpuLmpzb25wQ2FsbGJhY2ssbz1lW3NdLGM/bi51cmw9Zi5yZXBsYWNlKERu
LCIkMSIrcyk6aD9uLmRhdGE9YS5yZXBsYWNlKERuLCIkMSIrcyk6bCYmKG4udXJsKz0oX24udGVz
dChmKT8iJiI6Ij8iKStuLmpzb25wKyI9IitzKSxuLmNvbnZlcnRlcnNbInNjcmlwdCBqc29uIl09
ZnVuY3Rpb24oKXtyZXR1cm4gdXx8di5lcnJvcihzKyIgd2FzIG5vdCBjYWxsZWQiKSx1WzBdfSxu
LmRhdGFUeXBlc1swXT0ianNvbiIsZVtzXT1mdW5jdGlvbigpe3U9YXJndW1lbnRzfSxpLmFsd2F5
cyhmdW5jdGlvbigpe2Vbc109byxuW3NdJiYobi5qc29ucENhbGxiYWNrPXIuanNvbnBDYWxsYmFj
ayxNbi5wdXNoKHMpKSx1JiZ2LmlzRnVuY3Rpb24obykmJm8odVswXSksdT1vPXR9KSwic2NyaXB0
In0pLHYuYWpheFNldHVwKHthY2NlcHRzOntzY3JpcHQ6InRleHQvamF2YXNjcmlwdCwgYXBwbGlj
YXRpb24vamF2YXNjcmlwdCwgYXBwbGljYXRpb24vZWNtYXNjcmlwdCwgYXBwbGljYXRpb24veC1l
Y21hc2NyaXB0In0sY29udGVudHM6e3NjcmlwdDovamF2YXNjcmlwdHxlY21hc2NyaXB0L30sY29u
dmVydGVyczp7InRleHQgc2NyaXB0IjpmdW5jdGlvbihlKXtyZXR1cm4gdi5nbG9iYWxFdmFsKGUp
LGV9fX0pLHYuYWpheFByZWZpbHRlcigic2NyaXB0IixmdW5jdGlvbihlKXtlLmNhY2hlPT09dCYm
KGUuY2FjaGU9ITEpLGUuY3Jvc3NEb21haW4mJihlLnR5cGU9IkdFVCIsZS5nbG9iYWw9ITEpfSks
di5hamF4VHJhbnNwb3J0KCJzY3JpcHQiLGZ1bmN0aW9uKGUpe2lmKGUuY3Jvc3NEb21haW4pe3Zh
ciBuLHI9aS5oZWFkfHxpLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF18fGkuZG9jdW1l
bnRFbGVtZW50O3JldHVybntzZW5kOmZ1bmN0aW9uKHMsbyl7bj1pLmNyZWF0ZUVsZW1lbnQoInNj
cmlwdCIpLG4uYXN5bmM9ImFzeW5jIixlLnNjcmlwdENoYXJzZXQmJihuLmNoYXJzZXQ9ZS5zY3Jp
cHRDaGFyc2V0KSxuLnNyYz1lLnVybCxuLm9ubG9hZD1uLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5j
dGlvbihlLGkpe2lmKGl8fCFuLnJlYWR5U3RhdGV8fC9sb2FkZWR8Y29tcGxldGUvLnRlc3Qobi5y
ZWFkeVN0YXRlKSluLm9ubG9hZD1uLm9ucmVhZHlzdGF0ZWNoYW5nZT1udWxsLHImJm4ucGFyZW50
Tm9kZSYmci5yZW1vdmVDaGlsZChuKSxuPXQsaXx8bygyMDAsInN1Y2Nlc3MiKX0sci5pbnNlcnRC
ZWZvcmUobixyLmZpcnN0Q2hpbGQpfSxhYm9ydDpmdW5jdGlvbigpe24mJm4ub25sb2FkKDAsMSl9
fX19KTt2YXIgSG4sQm49ZS5BY3RpdmVYT2JqZWN0P2Z1bmN0aW9uKCl7Zm9yKHZhciBlIGluIEhu
KUhuW2VdKDAsMSl9OiExLGpuPTA7di5hamF4U2V0dGluZ3MueGhyPWUuQWN0aXZlWE9iamVjdD9m
dW5jdGlvbigpe3JldHVybiF0aGlzLmlzTG9jYWwmJkZuKCl8fEluKCl9OkZuLGZ1bmN0aW9uKGUp
e3YuZXh0ZW5kKHYuc3VwcG9ydCx7YWpheDohIWUsY29yczohIWUmJiJ3aXRoQ3JlZGVudGlhbHMi
aW4gZX0pfSh2LmFqYXhTZXR0aW5ncy54aHIoKSksdi5zdXBwb3J0LmFqYXgmJnYuYWpheFRyYW5z
cG9ydChmdW5jdGlvbihuKXtpZighbi5jcm9zc0RvbWFpbnx8di5zdXBwb3J0LmNvcnMpe3ZhciBy
O3JldHVybntzZW5kOmZ1bmN0aW9uKGkscyl7dmFyIG8sdSxhPW4ueGhyKCk7bi51c2VybmFtZT9h
Lm9wZW4obi50eXBlLG4udXJsLG4uYXN5bmMsbi51c2VybmFtZSxuLnBhc3N3b3JkKTphLm9wZW4o
bi50eXBlLG4udXJsLG4uYXN5bmMpO2lmKG4ueGhyRmllbGRzKWZvcih1IGluIG4ueGhyRmllbGRz
KWFbdV09bi54aHJGaWVsZHNbdV07bi5taW1lVHlwZSYmYS5vdmVycmlkZU1pbWVUeXBlJiZhLm92
ZXJyaWRlTWltZVR5cGUobi5taW1lVHlwZSksIW4uY3Jvc3NEb21haW4mJiFpWyJYLVJlcXVlc3Rl
ZC1XaXRoIl0mJihpWyJYLVJlcXVlc3RlZC1XaXRoIl09IlhNTEh0dHBSZXF1ZXN0Iik7dHJ5e2Zv
cih1IGluIGkpYS5zZXRSZXF1ZXN0SGVhZGVyKHUsaVt1XSl9Y2F0Y2goZil7fWEuc2VuZChuLmhh
c0NvbnRlbnQmJm4uZGF0YXx8bnVsbCkscj1mdW5jdGlvbihlLGkpe3ZhciB1LGYsbCxjLGg7dHJ5
e2lmKHImJihpfHxhLnJlYWR5U3RhdGU9PT00KSl7cj10LG8mJihhLm9ucmVhZHlzdGF0ZWNoYW5n
ZT12Lm5vb3AsQm4mJmRlbGV0ZSBIbltvXSk7aWYoaSlhLnJlYWR5U3RhdGUhPT00JiZhLmFib3J0
KCk7ZWxzZXt1PWEuc3RhdHVzLGw9YS5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSxjPXt9LGg9YS5y
ZXNwb25zZVhNTCxoJiZoLmRvY3VtZW50RWxlbWVudCYmKGMueG1sPWgpO3RyeXtjLnRleHQ9YS5y
ZXNwb25zZVRleHR9Y2F0Y2gocCl7fXRyeXtmPWEuc3RhdHVzVGV4dH1jYXRjaChwKXtmPSIifSF1
JiZuLmlzTG9jYWwmJiFuLmNyb3NzRG9tYWluP3U9Yy50ZXh0PzIwMDo0MDQ6dT09PTEyMjMmJih1
PTIwNCl9fX1jYXRjaChkKXtpfHxzKC0xLGQpfWMmJnModSxmLGMsbCl9LG4uYXN5bmM/YS5yZWFk
eVN0YXRlPT09ND9zZXRUaW1lb3V0KHIsMCk6KG89KytqbixCbiYmKEhufHwoSG49e30sdihlKS51
bmxvYWQoQm4pKSxIbltvXT1yKSxhLm9ucmVhZHlzdGF0ZWNoYW5nZT1yKTpyKCl9LGFib3J0OmZ1
bmN0aW9uKCl7ciYmcigwLDEpfX19fSk7dmFyIHFuLFJuLFVuPS9eKD86dG9nZ2xlfHNob3d8aGlk
ZSkkLyx6bj1uZXcgUmVnRXhwKCJeKD86KFstK10pPXwpKCIrbSsiKShbYS16JV0qKSQiLCJpIiks
V249L3F1ZXVlSG9va3MkLyxYbj1bR25dLFZuPXsiKiI6W2Z1bmN0aW9uKGUsdCl7dmFyIG4scixp
PXRoaXMuY3JlYXRlVHdlZW4oZSx0KSxzPXpuLmV4ZWModCksbz1pLmN1cigpLHU9K298fDAsYT0x
LGY9MjA7aWYocyl7bj0rc1syXSxyPXNbM118fCh2LmNzc051bWJlcltlXT8iIjoicHgiKTtpZihy
IT09InB4IiYmdSl7dT12LmNzcyhpLmVsZW0sZSwhMCl8fG58fDE7ZG8gYT1hfHwiLjUiLHUvPWEs
di5zdHlsZShpLmVsZW0sZSx1K3IpO3doaWxlKGEhPT0oYT1pLmN1cigpL28pJiZhIT09MSYmLS1m
KX1pLnVuaXQ9cixpLnN0YXJ0PXUsaS5lbmQ9c1sxXT91KyhzWzFdKzEpKm46bn1yZXR1cm4gaX1d
fTt2LkFuaW1hdGlvbj12LmV4dGVuZChLbix7dHdlZW5lcjpmdW5jdGlvbihlLHQpe3YuaXNGdW5j
dGlvbihlKT8odD1lLGU9WyIqIl0pOmU9ZS5zcGxpdCgiICIpO3ZhciBuLHI9MCxpPWUubGVuZ3Ro
O2Zvcig7cjxpO3IrKyluPWVbcl0sVm5bbl09Vm5bbl18fFtdLFZuW25dLnVuc2hpZnQodCl9LHBy
ZWZpbHRlcjpmdW5jdGlvbihlLHQpe3Q/WG4udW5zaGlmdChlKTpYbi5wdXNoKGUpfX0pLHYuVHdl
ZW49WW4sWW4ucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpZbixpbml0OmZ1bmN0aW9uKGUsdCxuLHIs
aSxzKXt0aGlzLmVsZW09ZSx0aGlzLnByb3A9bix0aGlzLmVhc2luZz1pfHwic3dpbmciLHRoaXMu
b3B0aW9ucz10LHRoaXMuc3RhcnQ9dGhpcy5ub3c9dGhpcy5jdXIoKSx0aGlzLmVuZD1yLHRoaXMu
dW5pdD1zfHwodi5jc3NOdW1iZXJbbl0/IiI6InB4Iil9LGN1cjpmdW5jdGlvbigpe3ZhciBlPVlu
LnByb3BIb29rc1t0aGlzLnByb3BdO3JldHVybiBlJiZlLmdldD9lLmdldCh0aGlzKTpZbi5wcm9w
SG9va3MuX2RlZmF1bHQuZ2V0KHRoaXMpfSxydW46ZnVuY3Rpb24oZSl7dmFyIHQsbj1Zbi5wcm9w
SG9va3NbdGhpcy5wcm9wXTtyZXR1cm4gdGhpcy5vcHRpb25zLmR1cmF0aW9uP3RoaXMucG9zPXQ9
di5lYXNpbmdbdGhpcy5lYXNpbmddKGUsdGhpcy5vcHRpb25zLmR1cmF0aW9uKmUsMCwxLHRoaXMu
b3B0aW9ucy5kdXJhdGlvbik6dGhpcy5wb3M9dD1lLHRoaXMubm93PSh0aGlzLmVuZC10aGlzLnN0
YXJ0KSp0K3RoaXMuc3RhcnQsdGhpcy5vcHRpb25zLnN0ZXAmJnRoaXMub3B0aW9ucy5zdGVwLmNh
bGwodGhpcy5lbGVtLHRoaXMubm93LHRoaXMpLG4mJm4uc2V0P24uc2V0KHRoaXMpOlluLnByb3BI
b29rcy5fZGVmYXVsdC5zZXQodGhpcyksdGhpc319LFluLnByb3RvdHlwZS5pbml0LnByb3RvdHlw
ZT1Zbi5wcm90b3R5cGUsWW4ucHJvcEhvb2tzPXtfZGVmYXVsdDp7Z2V0OmZ1bmN0aW9uKGUpe3Zh
ciB0O3JldHVybiBlLmVsZW1bZS5wcm9wXT09bnVsbHx8ISFlLmVsZW0uc3R5bGUmJmUuZWxlbS5z
dHlsZVtlLnByb3BdIT1udWxsPyh0PXYuY3NzKGUuZWxlbSxlLnByb3AsITEsIiIpLCF0fHx0PT09
ImF1dG8iPzA6dCk6ZS5lbGVtW2UucHJvcF19LHNldDpmdW5jdGlvbihlKXt2LmZ4LnN0ZXBbZS5w
cm9wXT92LmZ4LnN0ZXBbZS5wcm9wXShlKTplLmVsZW0uc3R5bGUmJihlLmVsZW0uc3R5bGVbdi5j
c3NQcm9wc1tlLnByb3BdXSE9bnVsbHx8di5jc3NIb29rc1tlLnByb3BdKT92LnN0eWxlKGUuZWxl
bSxlLnByb3AsZS5ub3crZS51bml0KTplLmVsZW1bZS5wcm9wXT1lLm5vd319fSxZbi5wcm9wSG9v
a3Muc2Nyb2xsVG9wPVluLnByb3BIb29rcy5zY3JvbGxMZWZ0PXtzZXQ6ZnVuY3Rpb24oZSl7ZS5l
bGVtLm5vZGVUeXBlJiZlLmVsZW0ucGFyZW50Tm9kZSYmKGUuZWxlbVtlLnByb3BdPWUubm93KX19
LHYuZWFjaChbInRvZ2dsZSIsInNob3ciLCJoaWRlIl0sZnVuY3Rpb24oZSx0KXt2YXIgbj12LmZu
W3RdO3YuZm5bdF09ZnVuY3Rpb24ocixpLHMpe3JldHVybiByPT1udWxsfHx0eXBlb2Ygcj09ImJv
b2xlYW4ifHwhZSYmdi5pc0Z1bmN0aW9uKHIpJiZ2LmlzRnVuY3Rpb24oaSk/bi5hcHBseSh0aGlz
LGFyZ3VtZW50cyk6dGhpcy5hbmltYXRlKFpuKHQsITApLHIsaSxzKX19KSx2LmZuLmV4dGVuZCh7
ZmFkZVRvOmZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiB0aGlzLmZpbHRlcihHdCkuY3NzKCJvcGFj
aXR5IiwwKS5zaG93KCkuZW5kKCkuYW5pbWF0ZSh7b3BhY2l0eTp0fSxlLG4scil9LGFuaW1hdGU6
ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9di5pc0VtcHR5T2JqZWN0KGUpLHM9di5zcGVlZCh0LG4s
ciksbz1mdW5jdGlvbigpe3ZhciB0PUtuKHRoaXMsdi5leHRlbmQoe30sZSkscyk7aSYmdC5zdG9w
KCEwKX07cmV0dXJuIGl8fHMucXVldWU9PT0hMT90aGlzLmVhY2gobyk6dGhpcy5xdWV1ZShzLnF1
ZXVlLG8pfSxzdG9wOmZ1bmN0aW9uKGUsbixyKXt2YXIgaT1mdW5jdGlvbihlKXt2YXIgdD1lLnN0
b3A7ZGVsZXRlIGUuc3RvcCx0KHIpfTtyZXR1cm4gdHlwZW9mIGUhPSJzdHJpbmciJiYocj1uLG49
ZSxlPXQpLG4mJmUhPT0hMSYmdGhpcy5xdWV1ZShlfHwiZngiLFtdKSx0aGlzLmVhY2goZnVuY3Rp
b24oKXt2YXIgdD0hMCxuPWUhPW51bGwmJmUrInF1ZXVlSG9va3MiLHM9di50aW1lcnMsbz12Ll9k
YXRhKHRoaXMpO2lmKG4pb1tuXSYmb1tuXS5zdG9wJiZpKG9bbl0pO2Vsc2UgZm9yKG4gaW4gbylv
W25dJiZvW25dLnN0b3AmJlduLnRlc3QobikmJmkob1tuXSk7Zm9yKG49cy5sZW5ndGg7bi0tOylz
W25dLmVsZW09PT10aGlzJiYoZT09bnVsbHx8c1tuXS5xdWV1ZT09PWUpJiYoc1tuXS5hbmltLnN0
b3AociksdD0hMSxzLnNwbGljZShuLDEpKTsodHx8IXIpJiZ2LmRlcXVldWUodGhpcyxlKX0pfX0p
LHYuZWFjaCh7c2xpZGVEb3duOlpuKCJzaG93Iiksc2xpZGVVcDpabigiaGlkZSIpLHNsaWRlVG9n
Z2xlOlpuKCJ0b2dnbGUiKSxmYWRlSW46e29wYWNpdHk6InNob3cifSxmYWRlT3V0OntvcGFjaXR5
OiJoaWRlIn0sZmFkZVRvZ2dsZTp7b3BhY2l0eToidG9nZ2xlIn19LGZ1bmN0aW9uKGUsdCl7di5m
bltlXT1mdW5jdGlvbihlLG4scil7cmV0dXJuIHRoaXMuYW5pbWF0ZSh0LGUsbixyKX19KSx2LnNw
ZWVkPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1lJiZ0eXBlb2YgZT09Im9iamVjdCI/di5leHRlbmQo
e30sZSk6e2NvbXBsZXRlOm58fCFuJiZ0fHx2LmlzRnVuY3Rpb24oZSkmJmUsZHVyYXRpb246ZSxl
YXNpbmc6biYmdHx8dCYmIXYuaXNGdW5jdGlvbih0KSYmdH07ci5kdXJhdGlvbj12LmZ4Lm9mZj8w
OnR5cGVvZiByLmR1cmF0aW9uPT0ibnVtYmVyIj9yLmR1cmF0aW9uOnIuZHVyYXRpb24gaW4gdi5m
eC5zcGVlZHM/di5meC5zcGVlZHNbci5kdXJhdGlvbl06di5meC5zcGVlZHMuX2RlZmF1bHQ7aWYo
ci5xdWV1ZT09bnVsbHx8ci5xdWV1ZT09PSEwKXIucXVldWU9ImZ4IjtyZXR1cm4gci5vbGQ9ci5j
b21wbGV0ZSxyLmNvbXBsZXRlPWZ1bmN0aW9uKCl7di5pc0Z1bmN0aW9uKHIub2xkKSYmci5vbGQu
Y2FsbCh0aGlzKSxyLnF1ZXVlJiZ2LmRlcXVldWUodGhpcyxyLnF1ZXVlKX0scn0sdi5lYXNpbmc9
e2xpbmVhcjpmdW5jdGlvbihlKXtyZXR1cm4gZX0sc3dpbmc6ZnVuY3Rpb24oZSl7cmV0dXJuLjUt
TWF0aC5jb3MoZSpNYXRoLlBJKS8yfX0sdi50aW1lcnM9W10sdi5meD1Zbi5wcm90b3R5cGUuaW5p
dCx2LmZ4LnRpY2s9ZnVuY3Rpb24oKXt2YXIgZSxuPXYudGltZXJzLHI9MDtxbj12Lm5vdygpO2Zv
cig7cjxuLmxlbmd0aDtyKyspZT1uW3JdLCFlKCkmJm5bcl09PT1lJiZuLnNwbGljZShyLS0sMSk7
bi5sZW5ndGh8fHYuZnguc3RvcCgpLHFuPXR9LHYuZngudGltZXI9ZnVuY3Rpb24oZSl7ZSgpJiZ2
LnRpbWVycy5wdXNoKGUpJiYhUm4mJihSbj1zZXRJbnRlcnZhbCh2LmZ4LnRpY2ssdi5meC5pbnRl
cnZhbCkpfSx2LmZ4LmludGVydmFsPTEzLHYuZnguc3RvcD1mdW5jdGlvbigpe2NsZWFySW50ZXJ2
YWwoUm4pLFJuPW51bGx9LHYuZnguc3BlZWRzPXtzbG93OjYwMCxmYXN0OjIwMCxfZGVmYXVsdDo0
MDB9LHYuZnguc3RlcD17fSx2LmV4cHImJnYuZXhwci5maWx0ZXJzJiYodi5leHByLmZpbHRlcnMu
YW5pbWF0ZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHYuZ3JlcCh2LnRpbWVycyxmdW5jdGlvbih0KXty
ZXR1cm4gZT09PXQuZWxlbX0pLmxlbmd0aH0pO3ZhciBlcj0vXig/OmJvZHl8aHRtbCkkL2k7di5m
bi5vZmZzZXQ9ZnVuY3Rpb24oZSl7aWYoYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gZT09PXQ/dGhp
czp0aGlzLmVhY2goZnVuY3Rpb24odCl7di5vZmZzZXQuc2V0T2Zmc2V0KHRoaXMsZSx0KX0pO3Zh
ciBuLHIsaSxzLG8sdSxhLGY9e3RvcDowLGxlZnQ6MH0sbD10aGlzWzBdLGM9bCYmbC5vd25lckRv
Y3VtZW50O2lmKCFjKXJldHVybjtyZXR1cm4ocj1jLmJvZHkpPT09bD92Lm9mZnNldC5ib2R5T2Zm
c2V0KGwpOihuPWMuZG9jdW1lbnRFbGVtZW50LHYuY29udGFpbnMobixsKT8odHlwZW9mIGwuZ2V0
Qm91bmRpbmdDbGllbnRSZWN0IT0idW5kZWZpbmVkIiYmKGY9bC5nZXRCb3VuZGluZ0NsaWVudFJl
Y3QoKSksaT10cihjKSxzPW4uY2xpZW50VG9wfHxyLmNsaWVudFRvcHx8MCxvPW4uY2xpZW50TGVm
dHx8ci5jbGllbnRMZWZ0fHwwLHU9aS5wYWdlWU9mZnNldHx8bi5zY3JvbGxUb3AsYT1pLnBhZ2VY
T2Zmc2V0fHxuLnNjcm9sbExlZnQse3RvcDpmLnRvcCt1LXMsbGVmdDpmLmxlZnQrYS1vfSk6Zil9
LHYub2Zmc2V0PXtib2R5T2Zmc2V0OmZ1bmN0aW9uKGUpe3ZhciB0PWUub2Zmc2V0VG9wLG49ZS5v
ZmZzZXRMZWZ0O3JldHVybiB2LnN1cHBvcnQuZG9lc05vdEluY2x1ZGVNYXJnaW5JbkJvZHlPZmZz
ZXQmJih0Kz1wYXJzZUZsb2F0KHYuY3NzKGUsIm1hcmdpblRvcCIpKXx8MCxuKz1wYXJzZUZsb2F0
KHYuY3NzKGUsIm1hcmdpbkxlZnQiKSl8fDApLHt0b3A6dCxsZWZ0Om59fSxzZXRPZmZzZXQ6ZnVu
Y3Rpb24oZSx0LG4pe3ZhciByPXYuY3NzKGUsInBvc2l0aW9uIik7cj09PSJzdGF0aWMiJiYoZS5z
dHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiKTt2YXIgaT12KGUpLHM9aS5vZmZzZXQoKSxvPXYuY3Nz
KGUsInRvcCIpLHU9di5jc3MoZSwibGVmdCIpLGE9KHI9PT0iYWJzb2x1dGUifHxyPT09ImZpeGVk
IikmJnYuaW5BcnJheSgiYXV0byIsW28sdV0pPi0xLGY9e30sbD17fSxjLGg7YT8obD1pLnBvc2l0
aW9uKCksYz1sLnRvcCxoPWwubGVmdCk6KGM9cGFyc2VGbG9hdChvKXx8MCxoPXBhcnNlRmxvYXQo
dSl8fDApLHYuaXNGdW5jdGlvbih0KSYmKHQ9dC5jYWxsKGUsbixzKSksdC50b3AhPW51bGwmJihm
LnRvcD10LnRvcC1zLnRvcCtjKSx0LmxlZnQhPW51bGwmJihmLmxlZnQ9dC5sZWZ0LXMubGVmdCto
KSwidXNpbmciaW4gdD90LnVzaW5nLmNhbGwoZSxmKTppLmNzcyhmKX19LHYuZm4uZXh0ZW5kKHtw
b3NpdGlvbjpmdW5jdGlvbigpe2lmKCF0aGlzWzBdKXJldHVybjt2YXIgZT10aGlzWzBdLHQ9dGhp
cy5vZmZzZXRQYXJlbnQoKSxuPXRoaXMub2Zmc2V0KCkscj1lci50ZXN0KHRbMF0ubm9kZU5hbWUp
P3t0b3A6MCxsZWZ0OjB9OnQub2Zmc2V0KCk7cmV0dXJuIG4udG9wLT1wYXJzZUZsb2F0KHYuY3Nz
KGUsIm1hcmdpblRvcCIpKXx8MCxuLmxlZnQtPXBhcnNlRmxvYXQodi5jc3MoZSwibWFyZ2luTGVm
dCIpKXx8MCxyLnRvcCs9cGFyc2VGbG9hdCh2LmNzcyh0WzBdLCJib3JkZXJUb3BXaWR0aCIpKXx8
MCxyLmxlZnQrPXBhcnNlRmxvYXQodi5jc3ModFswXSwiYm9yZGVyTGVmdFdpZHRoIikpfHwwLHt0
b3A6bi50b3Atci50b3AsbGVmdDpuLmxlZnQtci5sZWZ0fX0sb2Zmc2V0UGFyZW50OmZ1bmN0aW9u
KCl7cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vZmZzZXRQYXJlbnR8fGku
Ym9keTt3aGlsZShlJiYhZXIudGVzdChlLm5vZGVOYW1lKSYmdi5jc3MoZSwicG9zaXRpb24iKT09
PSJzdGF0aWMiKWU9ZS5vZmZzZXRQYXJlbnQ7cmV0dXJuIGV8fGkuYm9keX0pfX0pLHYuZWFjaCh7
c2Nyb2xsTGVmdDoicGFnZVhPZmZzZXQiLHNjcm9sbFRvcDoicGFnZVlPZmZzZXQifSxmdW5jdGlv
bihlLG4pe3ZhciByPS9ZLy50ZXN0KG4pO3YuZm5bZV09ZnVuY3Rpb24oaSl7cmV0dXJuIHYuYWNj
ZXNzKHRoaXMsZnVuY3Rpb24oZSxpLHMpe3ZhciBvPXRyKGUpO2lmKHM9PT10KXJldHVybiBvP24g
aW4gbz9vW25dOm8uZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50W2ldOmVbaV07bz9vLnNjcm9sbFRv
KHI/dihvKS5zY3JvbGxMZWZ0KCk6cyxyP3M6dihvKS5zY3JvbGxUb3AoKSk6ZVtpXT1zfSxlLGks
YXJndW1lbnRzLmxlbmd0aCxudWxsKX19KSx2LmVhY2goe0hlaWdodDoiaGVpZ2h0IixXaWR0aDoi
d2lkdGgifSxmdW5jdGlvbihlLG4pe3YuZWFjaCh7cGFkZGluZzoiaW5uZXIiK2UsY29udGVudDpu
LCIiOiJvdXRlciIrZX0sZnVuY3Rpb24ocixpKXt2LmZuW2ldPWZ1bmN0aW9uKGkscyl7dmFyIG89
YXJndW1lbnRzLmxlbmd0aCYmKHJ8fHR5cGVvZiBpIT0iYm9vbGVhbiIpLHU9cnx8KGk9PT0hMHx8
cz09PSEwPyJtYXJnaW4iOiJib3JkZXIiKTtyZXR1cm4gdi5hY2Nlc3ModGhpcyxmdW5jdGlvbihu
LHIsaSl7dmFyIHM7cmV0dXJuIHYuaXNXaW5kb3cobik/bi5kb2N1bWVudC5kb2N1bWVudEVsZW1l
bnRbImNsaWVudCIrZV06bi5ub2RlVHlwZT09PTk/KHM9bi5kb2N1bWVudEVsZW1lbnQsTWF0aC5t
YXgobi5ib2R5WyJzY3JvbGwiK2VdLHNbInNjcm9sbCIrZV0sbi5ib2R5WyJvZmZzZXQiK2VdLHNb
Im9mZnNldCIrZV0sc1siY2xpZW50IitlXSkpOmk9PT10P3YuY3NzKG4scixpLHUpOnYuc3R5bGUo
bixyLGksdSl9LG4sbz9pOnQsbyxudWxsKX19KX0pLGUualF1ZXJ5PWUuJD12LHR5cGVvZiBkZWZp
bmU9PSJmdW5jdGlvbiImJmRlZmluZS5hbWQmJmRlZmluZS5hbWQualF1ZXJ5JiZkZWZpbmUoImpx
dWVyeSIsW10sZnVuY3Rpb24oKXtyZXR1cm4gdn0pfSkod2luZG93KTsKXCBObyBuZXdsaW5lIGF0
IGVuZCBvZiBmaWxlCkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdo
dGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvbXVzdGFjaGUvbXVzdGFjaGUuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFw
cC9jb21wb25lbnRzL211c3RhY2hlL211c3RhY2hlLmpzCShyZXZpc2lvbiAwKQorKysgUGVyZm9y
bWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRz
L211c3RhY2hlL211c3RhY2hlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjM1IEBACisv
KiEKKyAqIG11c3RhY2hlLmpzIC0gTG9naWMtbGVzcyB7e211c3RhY2hlfX0gdGVtcGxhdGVzIHdp
dGggSmF2YVNjcmlwdAorICogaHR0cDovL2dpdGh1Yi5jb20vamFubC9tdXN0YWNoZS5qcworICov
CisKKy8qZ2xvYmFsIGRlZmluZTogZmFsc2UqLworCit2YXIgTXVzdGFjaGU7CisKKy8qIQorICog
bXVzdGFjaGUuanMgLSBMb2dpYy1sZXNzIHt7bXVzdGFjaGV9fSB0ZW1wbGF0ZXMgd2l0aCBKYXZh
U2NyaXB0CisgKiBodHRwOi8vZ2l0aHViLmNvbS9qYW5sL211c3RhY2hlLmpzCisgKi8KKworLypn
bG9iYWwgZGVmaW5lOiBmYWxzZSovCisKK3ZhciBNdXN0YWNoZTsKKworKGZ1bmN0aW9uIChleHBv
cnRzKSB7CisgIGlmICh0eXBlb2YgbW9kdWxlICE9PSAidW5kZWZpbmVkIiAmJiBtb2R1bGUuZXhw
b3J0cykgeworICAgIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0czsgLy8gQ29tbW9uSlMKKyAgfSBl
bHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSAiZnVuY3Rpb24iKSB7CisgICAgZGVmaW5lKGV4cG9y
dHMpOyAvLyBBTUQKKyAgfSBlbHNlIHsKKyAgICBNdXN0YWNoZSA9IGV4cG9ydHM7IC8vIDxzY3Jp
cHQ+CisgIH0KK30oKGZ1bmN0aW9uICgpIHsKKworICB2YXIgZXhwb3J0cyA9IHt9OworCisgIGV4
cG9ydHMubmFtZSA9ICJtdXN0YWNoZS5qcyI7CisgIGV4cG9ydHMudmVyc2lvbiA9ICIwLjcuMSI7
CisgIGV4cG9ydHMudGFncyA9IFsie3siLCAifX0iXTsKKworICBleHBvcnRzLlNjYW5uZXIgPSBT
Y2FubmVyOworICBleHBvcnRzLkNvbnRleHQgPSBDb250ZXh0OworICBleHBvcnRzLldyaXRlciA9
IFdyaXRlcjsKKworICB2YXIgd2hpdGVSZSA9IC9ccyovOworICB2YXIgc3BhY2VSZSA9IC9ccysv
OworICB2YXIgbm9uU3BhY2VSZSA9IC9cUy87CisgIHZhciBlcVJlID0gL1xzKj0vOworICB2YXIg
Y3VybHlSZSA9IC9ccypcfS87CisgIHZhciB0YWdSZSA9IC8jfFxefFwvfD58XHt8Jnw9fCEvOwor
CisgIC8vIFdvcmthcm91bmQgZm9yIGh0dHBzOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93
c2UvQ09VQ0hEQi01NzcKKyAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qYW5sL211c3RhY2hl
LmpzL2lzc3Vlcy8xODkKKyAgZnVuY3Rpb24gdGVzdFJlKHJlLCBzdHJpbmcpIHsKKyAgICByZXR1
cm4gUmVnRXhwLnByb3RvdHlwZS50ZXN0LmNhbGwocmUsIHN0cmluZyk7CisgIH0KKworICBmdW5j
dGlvbiBpc1doaXRlc3BhY2Uoc3RyaW5nKSB7CisgICAgcmV0dXJuICF0ZXN0UmUobm9uU3BhY2VS
ZSwgc3RyaW5nKTsKKyAgfQorCisgIHZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5j
dGlvbiAob2JqKSB7CisgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChv
YmopID09PSAiW29iamVjdCBBcnJheV0iOworICB9OworCisgIGZ1bmN0aW9uIGVzY2FwZVJlKHN0
cmluZykgeworICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvW1wtXFtcXXt9KCkqKz8uLFxcXF4k
fCNcc10vZywgIlxcJCYiKTsKKyAgfQorCisgIHZhciBlbnRpdHlNYXAgPSB7CisgICAgIiYiOiAi
JmFtcDsiLAorICAgICI8IjogIiZsdDsiLAorICAgICI+IjogIiZndDsiLAorICAgICciJzogJyZx
dW90OycsCisgICAgIiciOiAnJiMzOTsnLAorICAgICIvIjogJyYjeDJGOycKKyAgfTsKKworICBm
dW5jdGlvbiBlc2NhcGVIdG1sKHN0cmluZykgeworICAgIHJldHVybiBTdHJpbmcoc3RyaW5nKS5y
ZXBsYWNlKC9bJjw+IidcL10vZywgZnVuY3Rpb24gKHMpIHsKKyAgICAgIHJldHVybiBlbnRpdHlN
YXBbc107CisgICAgfSk7CisgIH0KKworICAvLyBFeHBvcnQgdGhlIGVzY2FwaW5nIGZ1bmN0aW9u
IHNvIHRoYXQgdGhlIHVzZXIgbWF5IG92ZXJyaWRlIGl0LgorICAvLyBTZWUgaHR0cHM6Ly9naXRo
dWIuY29tL2phbmwvbXVzdGFjaGUuanMvaXNzdWVzLzI0NAorICBleHBvcnRzLmVzY2FwZSA9IGVz
Y2FwZUh0bWw7CisKKyAgZnVuY3Rpb24gU2Nhbm5lcihzdHJpbmcpIHsKKyAgICB0aGlzLnN0cmlu
ZyA9IHN0cmluZzsKKyAgICB0aGlzLnRhaWwgPSBzdHJpbmc7CisgICAgdGhpcy5wb3MgPSAwOwor
ICB9CisKKyAgLyoqCisgICAqIFJldHVybnMgYHRydWVgIGlmIHRoZSB0YWlsIGlzIGVtcHR5IChl
bmQgb2Ygc3RyaW5nKS4KKyAgICovCisgIFNjYW5uZXIucHJvdG90eXBlLmVvcyA9IGZ1bmN0aW9u
ICgpIHsKKyAgICByZXR1cm4gdGhpcy50YWlsID09PSAiIjsKKyAgfTsKKworICAvKioKKyAgICog
VHJpZXMgdG8gbWF0Y2ggdGhlIGdpdmVuIHJlZ3VsYXIgZXhwcmVzc2lvbiBhdCB0aGUgY3VycmVu
dCBwb3NpdGlvbi4KKyAgICogUmV0dXJucyB0aGUgbWF0Y2hlZCB0ZXh0IGlmIGl0IGNhbiBtYXRj
aCwgdGhlIGVtcHR5IHN0cmluZyBvdGhlcndpc2UuCisgICAqLworICBTY2FubmVyLnByb3RvdHlw
ZS5zY2FuID0gZnVuY3Rpb24gKHJlKSB7CisgICAgdmFyIG1hdGNoID0gdGhpcy50YWlsLm1hdGNo
KHJlKTsKKworICAgIGlmIChtYXRjaCAmJiBtYXRjaC5pbmRleCA9PT0gMCkgeworICAgICAgdGhp
cy50YWlsID0gdGhpcy50YWlsLnN1YnN0cmluZyhtYXRjaFswXS5sZW5ndGgpOworICAgICAgdGhp
cy5wb3MgKz0gbWF0Y2hbMF0ubGVuZ3RoOworICAgICAgcmV0dXJuIG1hdGNoWzBdOworICAgIH0K
KworICAgIHJldHVybiAiIjsKKyAgfTsKKworICAvKioKKyAgICogU2tpcHMgYWxsIHRleHQgdW50
aWwgdGhlIGdpdmVuIHJlZ3VsYXIgZXhwcmVzc2lvbiBjYW4gYmUgbWF0Y2hlZC4gUmV0dXJucwor
ICAgKiB0aGUgc2tpcHBlZCBzdHJpbmcsIHdoaWNoIGlzIHRoZSBlbnRpcmUgdGFpbCBpZiBubyBt
YXRjaCBjYW4gYmUgbWFkZS4KKyAgICovCisgIFNjYW5uZXIucHJvdG90eXBlLnNjYW5VbnRpbCA9
IGZ1bmN0aW9uIChyZSkgeworICAgIHZhciBtYXRjaCwgcG9zID0gdGhpcy50YWlsLnNlYXJjaChy
ZSk7CisKKyAgICBzd2l0Y2ggKHBvcykgeworICAgIGNhc2UgLTE6CisgICAgICBtYXRjaCA9IHRo
aXMudGFpbDsKKyAgICAgIHRoaXMucG9zICs9IHRoaXMudGFpbC5sZW5ndGg7CisgICAgICB0aGlz
LnRhaWwgPSAiIjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgMDoKKyAgICAgIG1hdGNoID0gIiI7
CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgbWF0Y2ggPSB0aGlzLnRhaWwuc3Vi
c3RyaW5nKDAsIHBvcyk7CisgICAgICB0aGlzLnRhaWwgPSB0aGlzLnRhaWwuc3Vic3RyaW5nKHBv
cyk7CisgICAgICB0aGlzLnBvcyArPSBwb3M7CisgICAgfQorCisgICAgcmV0dXJuIG1hdGNoOwor
ICB9OworCisgIGZ1bmN0aW9uIENvbnRleHQodmlldywgcGFyZW50KSB7CisgICAgdGhpcy52aWV3
ID0gdmlldzsKKyAgICB0aGlzLnBhcmVudCA9IHBhcmVudDsKKyAgICB0aGlzLmNsZWFyQ2FjaGUo
KTsKKyAgfQorCisgIENvbnRleHQubWFrZSA9IGZ1bmN0aW9uICh2aWV3KSB7CisgICAgcmV0dXJu
ICh2aWV3IGluc3RhbmNlb2YgQ29udGV4dCkgPyB2aWV3IDogbmV3IENvbnRleHQodmlldyk7Cisg
IH07CisKKyAgQ29udGV4dC5wcm90b3R5cGUuY2xlYXJDYWNoZSA9IGZ1bmN0aW9uICgpIHsKKyAg
ICB0aGlzLl9jYWNoZSA9IHt9OworICB9OworCisgIENvbnRleHQucHJvdG90eXBlLnB1c2ggPSBm
dW5jdGlvbiAodmlldykgeworICAgIHJldHVybiBuZXcgQ29udGV4dCh2aWV3LCB0aGlzKTsKKyAg
fTsKKworICBDb250ZXh0LnByb3RvdHlwZS5sb29rdXAgPSBmdW5jdGlvbiAobmFtZSkgeworICAg
IHZhciB2YWx1ZSA9IHRoaXMuX2NhY2hlW25hbWVdOworCisgICAgaWYgKCF2YWx1ZSkgeworICAg
ICAgaWYgKG5hbWUgPT09ICIuIikgeworICAgICAgICB2YWx1ZSA9IHRoaXMudmlldzsKKyAgICAg
IH0gZWxzZSB7CisgICAgICAgIHZhciBjb250ZXh0ID0gdGhpczsKKworICAgICAgICB3aGlsZSAo
Y29udGV4dCkgeworICAgICAgICAgIGlmIChuYW1lLmluZGV4T2YoIi4iKSA+IDApIHsKKyAgICAg
ICAgICAgIHZhciBuYW1lcyA9IG5hbWUuc3BsaXQoIi4iKSwgaSA9IDA7CisKKyAgICAgICAgICAg
IHZhbHVlID0gY29udGV4dC52aWV3OworCisgICAgICAgICAgICB3aGlsZSAodmFsdWUgJiYgaSA8
IG5hbWVzLmxlbmd0aCkgeworICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlW25hbWVzW2krK11d
OworICAgICAgICAgICAgfQorICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2YWx1ZSA9
IGNvbnRleHQudmlld1tuYW1lXTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBpZiAodmFsdWUg
IT0gbnVsbCkgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorCisgICAgICAgICAg
Y29udGV4dCA9IGNvbnRleHQucGFyZW50OworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIHRo
aXMuX2NhY2hlW25hbWVdID0gdmFsdWU7CisgICAgfQorCisgICAgaWYgKHR5cGVvZiB2YWx1ZSA9
PT0gImZ1bmN0aW9uIikgeworICAgICAgdmFsdWUgPSB2YWx1ZS5jYWxsKHRoaXMudmlldyk7Cisg
ICAgfQorCisgICAgcmV0dXJuIHZhbHVlOworICB9OworCisgIGZ1bmN0aW9uIFdyaXRlcigpIHsK
KyAgICB0aGlzLmNsZWFyQ2FjaGUoKTsKKyAgfQorCisgIFdyaXRlci5wcm90b3R5cGUuY2xlYXJD
YWNoZSA9IGZ1bmN0aW9uICgpIHsKKyAgICB0aGlzLl9jYWNoZSA9IHt9OworICAgIHRoaXMuX3Bh
cnRpYWxDYWNoZSA9IHt9OworICB9OworCisgIFdyaXRlci5wcm90b3R5cGUuY29tcGlsZSA9IGZ1
bmN0aW9uICh0ZW1wbGF0ZSwgdGFncykgeworICAgIHZhciBmbiA9IHRoaXMuX2NhY2hlW3RlbXBs
YXRlXTsKKworICAgIGlmICghZm4pIHsKKyAgICAgIHZhciB0b2tlbnMgPSBleHBvcnRzLnBhcnNl
KHRlbXBsYXRlLCB0YWdzKTsKKyAgICAgIGZuID0gdGhpcy5fY2FjaGVbdGVtcGxhdGVdID0gdGhp
cy5jb21waWxlVG9rZW5zKHRva2VucywgdGVtcGxhdGUpOworICAgIH0KKworICAgIHJldHVybiBm
bjsKKyAgfTsKKworICBXcml0ZXIucHJvdG90eXBlLmNvbXBpbGVQYXJ0aWFsID0gZnVuY3Rpb24g
KG5hbWUsIHRlbXBsYXRlLCB0YWdzKSB7CisgICAgdmFyIGZuID0gdGhpcy5jb21waWxlKHRlbXBs
YXRlLCB0YWdzKTsKKyAgICB0aGlzLl9wYXJ0aWFsQ2FjaGVbbmFtZV0gPSBmbjsKKyAgICByZXR1
cm4gZm47CisgIH07CisKKyAgV3JpdGVyLnByb3RvdHlwZS5jb21waWxlVG9rZW5zID0gZnVuY3Rp
b24gKHRva2VucywgdGVtcGxhdGUpIHsKKyAgICB2YXIgZm4gPSBjb21waWxlVG9rZW5zKHRva2Vu
cyk7CisgICAgdmFyIHNlbGYgPSB0aGlzOworCisgICAgcmV0dXJuIGZ1bmN0aW9uICh2aWV3LCBw
YXJ0aWFscykgeworICAgICAgaWYgKHBhcnRpYWxzKSB7CisgICAgICAgIGlmICh0eXBlb2YgcGFy
dGlhbHMgPT09ICJmdW5jdGlvbiIpIHsKKyAgICAgICAgICBzZWxmLl9sb2FkUGFydGlhbCA9IHBh
cnRpYWxzOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGZvciAodmFyIG5hbWUgaW4gcGFy
dGlhbHMpIHsKKyAgICAgICAgICAgIHNlbGYuY29tcGlsZVBhcnRpYWwobmFtZSwgcGFydGlhbHNb
bmFtZV0pOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorCisgICAgICByZXR1cm4g
Zm4oc2VsZiwgQ29udGV4dC5tYWtlKHZpZXcpLCB0ZW1wbGF0ZSk7CisgICAgfTsKKyAgfTsKKwor
ICBXcml0ZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uICh0ZW1wbGF0ZSwgdmlldywgcGFy
dGlhbHMpIHsKKyAgICByZXR1cm4gdGhpcy5jb21waWxlKHRlbXBsYXRlKSh2aWV3LCBwYXJ0aWFs
cyk7CisgIH07CisKKyAgV3JpdGVyLnByb3RvdHlwZS5fc2VjdGlvbiA9IGZ1bmN0aW9uIChuYW1l
LCBjb250ZXh0LCB0ZXh0LCBjYWxsYmFjaykgeworICAgIHZhciB2YWx1ZSA9IGNvbnRleHQubG9v
a3VwKG5hbWUpOworCisgICAgc3dpdGNoICh0eXBlb2YgdmFsdWUpIHsKKyAgICBjYXNlICJvYmpl
Y3QiOgorICAgICAgaWYgKGlzQXJyYXkodmFsdWUpKSB7CisgICAgICAgIHZhciBidWZmZXIgPSAi
IjsKKworICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gdmFsdWUubGVuZ3RoOyBpIDwgbGVu
OyArK2kpIHsKKyAgICAgICAgICBidWZmZXIgKz0gY2FsbGJhY2sodGhpcywgY29udGV4dC5wdXNo
KHZhbHVlW2ldKSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gYnVmZmVyOworICAgICAg
fQorCisgICAgICByZXR1cm4gdmFsdWUgPyBjYWxsYmFjayh0aGlzLCBjb250ZXh0LnB1c2godmFs
dWUpKSA6ICIiOworICAgIGNhc2UgImZ1bmN0aW9uIjoKKyAgICAgIHZhciBzZWxmID0gdGhpczsK
KyAgICAgIHZhciBzY29wZWRSZW5kZXIgPSBmdW5jdGlvbiAodGVtcGxhdGUpIHsKKyAgICAgICAg
cmV0dXJuIHNlbGYucmVuZGVyKHRlbXBsYXRlLCBjb250ZXh0KTsKKyAgICAgIH07CisKKyAgICAg
IHZhciByZXN1bHQgPSB2YWx1ZS5jYWxsKGNvbnRleHQudmlldywgdGV4dCwgc2NvcGVkUmVuZGVy
KTsKKyAgICAgIHJldHVybiByZXN1bHQgIT0gbnVsbCA/IHJlc3VsdCA6ICIiOworICAgIGRlZmF1
bHQ6CisgICAgICBpZiAodmFsdWUpIHsKKyAgICAgICAgcmV0dXJuIGNhbGxiYWNrKHRoaXMsIGNv
bnRleHQpOworICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAiIjsKKyAgfTsKKworICBXcml0
ZXIucHJvdG90eXBlLl9pbnZlcnRlZCA9IGZ1bmN0aW9uIChuYW1lLCBjb250ZXh0LCBjYWxsYmFj
aykgeworICAgIHZhciB2YWx1ZSA9IGNvbnRleHQubG9va3VwKG5hbWUpOworCisgICAgLy8gVXNl
IEphdmFTY3JpcHQncyBkZWZpbml0aW9uIG9mIGZhbHN5LiBJbmNsdWRlIGVtcHR5IGFycmF5cy4K
KyAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2phbmwvbXVzdGFjaGUuanMvaXNzdWVzLzE4
NgorICAgIGlmICghdmFsdWUgfHwgKGlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA9PT0g
MCkpIHsKKyAgICAgIHJldHVybiBjYWxsYmFjayh0aGlzLCBjb250ZXh0KTsKKyAgICB9CisKKyAg
ICByZXR1cm4gIiI7CisgIH07CisKKyAgV3JpdGVyLnByb3RvdHlwZS5fcGFydGlhbCA9IGZ1bmN0
aW9uIChuYW1lLCBjb250ZXh0KSB7CisgICAgaWYgKCEobmFtZSBpbiB0aGlzLl9wYXJ0aWFsQ2Fj
aGUpICYmIHRoaXMuX2xvYWRQYXJ0aWFsKSB7CisgICAgICB0aGlzLmNvbXBpbGVQYXJ0aWFsKG5h
bWUsIHRoaXMuX2xvYWRQYXJ0aWFsKG5hbWUpKTsKKyAgICB9CisKKyAgICB2YXIgZm4gPSB0aGlz
Ll9wYXJ0aWFsQ2FjaGVbbmFtZV07CisKKyAgICByZXR1cm4gZm4gPyBmbihjb250ZXh0KSA6ICIi
OworICB9OworCisgIFdyaXRlci5wcm90b3R5cGUuX25hbWUgPSBmdW5jdGlvbiAobmFtZSwgY29u
dGV4dCkgeworICAgIHZhciB2YWx1ZSA9IGNvbnRleHQubG9va3VwKG5hbWUpOworCisgICAgaWYg
KHR5cGVvZiB2YWx1ZSA9PT0gImZ1bmN0aW9uIikgeworICAgICAgdmFsdWUgPSB2YWx1ZS5jYWxs
KGNvbnRleHQudmlldyk7CisgICAgfQorCisgICAgcmV0dXJuICh2YWx1ZSA9PSBudWxsKSA/ICIi
IDogU3RyaW5nKHZhbHVlKTsKKyAgfTsKKworICBXcml0ZXIucHJvdG90eXBlLl9lc2NhcGVkID0g
ZnVuY3Rpb24gKG5hbWUsIGNvbnRleHQpIHsKKyAgICByZXR1cm4gZXhwb3J0cy5lc2NhcGUodGhp
cy5fbmFtZShuYW1lLCBjb250ZXh0KSk7CisgIH07CisKKyAgLyoqCisgICAqIENhbGN1bGF0ZXMg
dGhlIGJvdW5kcyBvZiB0aGUgc2VjdGlvbiByZXByZXNlbnRlZCBieSB0aGUgZ2l2ZW4gYHRva2Vu
YCBpbgorICAgKiB0aGUgb3JpZ2luYWwgdGVtcGxhdGUgYnkgZHJpbGxpbmcgZG93biBpbnRvIG5l
c3RlZCBzZWN0aW9ucyB0byBmaW5kIHRoZQorICAgKiBsYXN0IHRva2VuIHRoYXQgaXMgcGFydCBv
ZiB0aGF0IHNlY3Rpb24uIFJldHVybnMgYW4gYXJyYXkgb2YgW3N0YXJ0LCBlbmRdLgorICAgKi8K
KyAgZnVuY3Rpb24gc2VjdGlvbkJvdW5kcyh0b2tlbikgeworICAgIHZhciBzdGFydCA9IHRva2Vu
WzNdOworICAgIHZhciBlbmQgPSBzdGFydDsKKworICAgIHZhciB0b2tlbnM7CisgICAgd2hpbGUg
KCh0b2tlbnMgPSB0b2tlbls0XSkgJiYgdG9rZW5zLmxlbmd0aCkgeworICAgICAgdG9rZW4gPSB0
b2tlbnNbdG9rZW5zLmxlbmd0aCAtIDFdOworICAgICAgZW5kID0gdG9rZW5bM107CisgICAgfQor
CisgICAgcmV0dXJuIFtzdGFydCwgZW5kXTsKKyAgfQorCisgIC8qKgorICAgKiBMb3ctbGV2ZWwg
ZnVuY3Rpb24gdGhhdCBjb21waWxlcyB0aGUgZ2l2ZW4gYHRva2Vuc2AgaW50byBhIGZ1bmN0aW9u
CisgICAqIHRoYXQgYWNjZXB0cyB0aHJlZSBhcmd1bWVudHM6IGEgV3JpdGVyLCBhIENvbnRleHQs
IGFuZCB0aGUgdGVtcGxhdGUuCisgICAqLworICBmdW5jdGlvbiBjb21waWxlVG9rZW5zKHRva2Vu
cykgeworICAgIHZhciBzdWJSZW5kZXJzID0ge307CisKKyAgICBmdW5jdGlvbiBzdWJSZW5kZXIo
aSwgdG9rZW5zLCB0ZW1wbGF0ZSkgeworICAgICAgaWYgKCFzdWJSZW5kZXJzW2ldKSB7CisgICAg
ICAgIHZhciBmbiA9IGNvbXBpbGVUb2tlbnModG9rZW5zKTsKKyAgICAgICAgc3ViUmVuZGVyc1tp
XSA9IGZ1bmN0aW9uICh3cml0ZXIsIGNvbnRleHQpIHsKKyAgICAgICAgICByZXR1cm4gZm4od3Jp
dGVyLCBjb250ZXh0LCB0ZW1wbGF0ZSk7CisgICAgICAgIH07CisgICAgICB9CisKKyAgICAgIHJl
dHVybiBzdWJSZW5kZXJzW2ldOworICAgIH0KKworICAgIHJldHVybiBmdW5jdGlvbiAod3JpdGVy
LCBjb250ZXh0LCB0ZW1wbGF0ZSkgeworICAgICAgdmFyIGJ1ZmZlciA9ICIiOworICAgICAgdmFy
IHRva2VuLCBzZWN0aW9uVGV4dDsKKworICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHRva2Vu
cy5sZW5ndGg7IGkgPCBsZW47ICsraSkgeworICAgICAgICB0b2tlbiA9IHRva2Vuc1tpXTsKKwor
ICAgICAgICBzd2l0Y2ggKHRva2VuWzBdKSB7CisgICAgICAgIGNhc2UgIiMiOgorICAgICAgICAg
IHNlY3Rpb25UZXh0ID0gdGVtcGxhdGUuc2xpY2UuYXBwbHkodGVtcGxhdGUsIHNlY3Rpb25Cb3Vu
ZHModG9rZW4pKTsKKyAgICAgICAgICBidWZmZXIgKz0gd3JpdGVyLl9zZWN0aW9uKHRva2VuWzFd
LCBjb250ZXh0LCBzZWN0aW9uVGV4dCwgc3ViUmVuZGVyKGksIHRva2VuWzRdLCB0ZW1wbGF0ZSkp
OworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICJeIjoKKyAgICAgICAgICBidWZmZXIg
Kz0gd3JpdGVyLl9pbnZlcnRlZCh0b2tlblsxXSwgY29udGV4dCwgc3ViUmVuZGVyKGksIHRva2Vu
WzRdLCB0ZW1wbGF0ZSkpOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICI+IjoKKyAg
ICAgICAgICBidWZmZXIgKz0gd3JpdGVyLl9wYXJ0aWFsKHRva2VuWzFdLCBjb250ZXh0KTsKKyAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAiJiI6CisgICAgICAgICAgYnVmZmVyICs9IHdy
aXRlci5fbmFtZSh0b2tlblsxXSwgY29udGV4dCk7CisgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgIm5hbWUiOgorICAgICAgICAgIGJ1ZmZlciArPSB3cml0ZXIuX2VzY2FwZWQodG9rZW5b
MV0sIGNvbnRleHQpOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICJ0ZXh0IjoKKyAg
ICAgICAgICBidWZmZXIgKz0gdG9rZW5bMV07CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgIH0KKworICAgICAgcmV0dXJuIGJ1ZmZlcjsKKyAgICB9OworICB9CisKKyAgLyoqCisg
ICAqIEZvcm1zIHRoZSBnaXZlbiBhcnJheSBvZiBgdG9rZW5zYCBpbnRvIGEgbmVzdGVkIHRyZWUg
c3RydWN0dXJlIHdoZXJlCisgICAqIHRva2VucyB0aGF0IHJlcHJlc2VudCBhIHNlY3Rpb24gaGF2
ZSBhIGZpZnRoIGl0ZW06IGFuIGFycmF5IHRoYXQgY29udGFpbnMKKyAgICogYWxsIHRva2VucyBp
biB0aGF0IHNlY3Rpb24uCisgICAqLworICBmdW5jdGlvbiBuZXN0VG9rZW5zKHRva2Vucykgewor
ICAgIHZhciB0cmVlID0gW107CisgICAgdmFyIGNvbGxlY3RvciA9IHRyZWU7CisgICAgdmFyIHNl
Y3Rpb25zID0gW107CisgICAgdmFyIHRva2VuLCBzZWN0aW9uOworCisgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyArK2kpIHsKKyAgICAgIHRva2VuID0gdG9rZW5zW2ldOwor
CisgICAgICBzd2l0Y2ggKHRva2VuWzBdKSB7CisgICAgICBjYXNlICIjIjoKKyAgICAgIGNhc2Ug
Il4iOgorICAgICAgICB0b2tlbls0XSA9IFtdOworICAgICAgICBzZWN0aW9ucy5wdXNoKHRva2Vu
KTsKKyAgICAgICAgY29sbGVjdG9yLnB1c2godG9rZW4pOworICAgICAgICBjb2xsZWN0b3IgPSB0
b2tlbls0XTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlICIvIjoKKyAgICAgICAgaWYgKHNl
Y3Rpb25zLmxlbmd0aCA9PT0gMCkgeworICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiVW5vcGVu
ZWQgc2VjdGlvbjogIiArIHRva2VuWzFdKTsKKyAgICAgICAgfQorCisgICAgICAgIHNlY3Rpb24g
PSBzZWN0aW9ucy5wb3AoKTsKKworICAgICAgICBpZiAoc2VjdGlvblsxXSAhPT0gdG9rZW5bMV0p
IHsKKyAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlVuY2xvc2VkIHNlY3Rpb246ICIgKyBzZWN0
aW9uWzFdKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzZWN0aW9ucy5sZW5ndGggPiAwKSB7
CisgICAgICAgICAgY29sbGVjdG9yID0gc2VjdGlvbnNbc2VjdGlvbnMubGVuZ3RoIC0gMV1bNF07
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgY29sbGVjdG9yID0gdHJlZTsKKyAgICAgICAg
fQorICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGNvbGxlY3Rvci5wdXNo
KHRva2VuKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICAvLyBNYWtlIHN1cmUgdGhlcmUgd2VyZSBu
byBvcGVuIHNlY3Rpb25zIHdoZW4gd2UncmUgZG9uZS4KKyAgICBzZWN0aW9uID0gc2VjdGlvbnMu
cG9wKCk7CisKKyAgICBpZiAoc2VjdGlvbikgeworICAgICAgdGhyb3cgbmV3IEVycm9yKCJVbmNs
b3NlZCBzZWN0aW9uOiAiICsgc2VjdGlvblsxXSk7CisgICAgfQorCisgICAgcmV0dXJuIHRyZWU7
CisgIH0KKworICAvKioKKyAgICogQ29tYmluZXMgdGhlIHZhbHVlcyBvZiBjb25zZWN1dGl2ZSB0
ZXh0IHRva2VucyBpbiB0aGUgZ2l2ZW4gYHRva2Vuc2AgYXJyYXkKKyAgICogdG8gYSBzaW5nbGUg
dG9rZW4uCisgICAqLworICBmdW5jdGlvbiBzcXVhc2hUb2tlbnModG9rZW5zKSB7CisgICAgdmFy
IHRva2VuLCBsYXN0VG9rZW4sIHNxdWFzaGVkVG9rZW5zID0gW107CisKKyAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IHRva2Vucy5sZW5ndGg7ICsraSkgeworICAgICAgdG9rZW4gPSB0b2tlbnNbaV07
CisKKyAgICAgIGlmIChsYXN0VG9rZW4gJiYgbGFzdFRva2VuWzBdID09PSAidGV4dCIgJiYgdG9r
ZW5bMF0gPT09ICJ0ZXh0IikgeworICAgICAgICBsYXN0VG9rZW5bMV0gKz0gdG9rZW5bMV07Cisg
ICAgICAgIGxhc3RUb2tlblszXSA9IHRva2VuWzNdOworICAgICAgfSBlbHNlIHsKKyAgICAgICAg
bGFzdFRva2VuID0gdG9rZW47CisgICAgICAgIHNxdWFzaGVkVG9rZW5zLnB1c2godG9rZW4pOwor
ICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBzcXVhc2hlZFRva2VuczsKKyAgfQorCisgIGZ1
bmN0aW9uIGVzY2FwZVRhZ3ModGFncykgeworICAgIGlmICh0YWdzLmxlbmd0aCAhPT0gMikgewor
ICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHRhZ3M6ICIgKyB0YWdzLmpvaW4oIiAiKSk7
CisgICAgfQorCisgICAgcmV0dXJuIFsKKyAgICAgIG5ldyBSZWdFeHAoZXNjYXBlUmUodGFnc1sw
XSkgKyAiXFxzKiIpLAorICAgICAgbmV3IFJlZ0V4cCgiXFxzKiIgKyBlc2NhcGVSZSh0YWdzWzFd
KSkKKyAgICBdOworICB9CisKKyAgLyoqCisgICAqIEJyZWFrcyB1cCB0aGUgZ2l2ZW4gYHRlbXBs
YXRlYCBzdHJpbmcgaW50byBhIHRyZWUgb2YgdG9rZW4gb2JqZWN0cy4gSWYKKyAgICogYHRhZ3Ng
IGlzIGdpdmVuIGhlcmUgaXQgbXVzdCBiZSBhbiBhcnJheSB3aXRoIHR3byBzdHJpbmcgdmFsdWVz
OiB0aGUKKyAgICogb3BlbmluZyBhbmQgY2xvc2luZyB0YWdzIHVzZWQgaW4gdGhlIHRlbXBsYXRl
IChlLmcuIFsiPCUiLCAiJT4iXSkuIE9mCisgICAqIGNvdXJzZSwgdGhlIGRlZmF1bHQgaXMgdG8g
dXNlIG11c3RhY2hlcyAoaS5lLiBNdXN0YWNoZS50YWdzKS4KKyAgICovCisgIGV4cG9ydHMucGFy
c2UgPSBmdW5jdGlvbiAodGVtcGxhdGUsIHRhZ3MpIHsKKyAgICB0ZW1wbGF0ZSA9IHRlbXBsYXRl
IHx8ICcnOworICAgIHRhZ3MgPSB0YWdzIHx8IGV4cG9ydHMudGFnczsKKworICAgIHZhciB0YWdS
ZXMgPSBlc2NhcGVUYWdzKHRhZ3MpOworICAgIHZhciBzY2FubmVyID0gbmV3IFNjYW5uZXIodGVt
cGxhdGUpOworCisgICAgdmFyIHRva2VucyA9IFtdLCAgICAgIC8vIEJ1ZmZlciB0byBob2xkIHRo
ZSB0b2tlbnMKKyAgICAgICAgc3BhY2VzID0gW10sICAgICAgLy8gSW5kaWNlcyBvZiB3aGl0ZXNw
YWNlIHRva2VucyBvbiB0aGUgY3VycmVudCBsaW5lCisgICAgICAgIGhhc1RhZyA9IGZhbHNlLCAg
IC8vIElzIHRoZXJlIGEge3t0YWd9fSBvbiB0aGUgY3VycmVudCBsaW5lPworICAgICAgICBub25T
cGFjZSA9IGZhbHNlOyAvLyBJcyB0aGVyZSBhIG5vbi1zcGFjZSBjaGFyIG9uIHRoZSBjdXJyZW50
IGxpbmU/CisKKyAgICAvLyBTdHJpcHMgYWxsIHdoaXRlc3BhY2UgdG9rZW5zIGFycmF5IGZvciB0
aGUgY3VycmVudCBsaW5lCisgICAgLy8gaWYgdGhlcmUgd2FzIGEge3sjdGFnfX0gb24gaXQgYW5k
IG90aGVyd2lzZSBvbmx5IHNwYWNlLgorICAgIGZ1bmN0aW9uIHN0cmlwU3BhY2UoKSB7CisgICAg
ICBpZiAoaGFzVGFnICYmICFub25TcGFjZSkgeworICAgICAgICB3aGlsZSAoc3BhY2VzLmxlbmd0
aCkgeworICAgICAgICAgIHRva2Vucy5zcGxpY2Uoc3BhY2VzLnBvcCgpLCAxKTsKKyAgICAgICAg
fQorICAgICAgfSBlbHNlIHsKKyAgICAgICAgc3BhY2VzID0gW107CisgICAgICB9CisKKyAgICAg
IGhhc1RhZyA9IGZhbHNlOworICAgICAgbm9uU3BhY2UgPSBmYWxzZTsKKyAgICB9CisKKyAgICB2
YXIgc3RhcnQsIHR5cGUsIHZhbHVlLCBjaHI7CisKKyAgICB3aGlsZSAoIXNjYW5uZXIuZW9zKCkp
IHsKKyAgICAgIHN0YXJ0ID0gc2Nhbm5lci5wb3M7CisgICAgICB2YWx1ZSA9IHNjYW5uZXIuc2Nh
blVudGlsKHRhZ1Jlc1swXSk7CisKKyAgICAgIGlmICh2YWx1ZSkgeworICAgICAgICBmb3IgKHZh
ciBpID0gMCwgbGVuID0gdmFsdWUubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHsKKyAgICAgICAgICBj
aHIgPSB2YWx1ZS5jaGFyQXQoaSk7CisKKyAgICAgICAgICBpZiAoaXNXaGl0ZXNwYWNlKGNocikp
IHsKKyAgICAgICAgICAgIHNwYWNlcy5wdXNoKHRva2Vucy5sZW5ndGgpOworICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBub25TcGFjZSA9IHRydWU7CisgICAgICAgICAgfQorCisgICAg
ICAgICAgdG9rZW5zLnB1c2goWyJ0ZXh0IiwgY2hyLCBzdGFydCwgc3RhcnQgKyAxXSk7CisgICAg
ICAgICAgc3RhcnQgKz0gMTsKKworICAgICAgICAgIGlmIChjaHIgPT09ICJcbiIpIHsKKyAgICAg
ICAgICAgIHN0cmlwU3BhY2UoKTsgLy8gQ2hlY2sgZm9yIHdoaXRlc3BhY2Ugb24gdGhlIGN1cnJl
bnQgbGluZS4KKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgc3RhcnQg
PSBzY2FubmVyLnBvczsKKworICAgICAgLy8gTWF0Y2ggdGhlIG9wZW5pbmcgdGFnLgorICAgICAg
aWYgKCFzY2FubmVyLnNjYW4odGFnUmVzWzBdKSkgeworICAgICAgICBicmVhazsKKyAgICAgIH0K
KworICAgICAgaGFzVGFnID0gdHJ1ZTsKKyAgICAgIHR5cGUgPSBzY2FubmVyLnNjYW4odGFnUmUp
IHx8ICJuYW1lIjsKKworICAgICAgLy8gU2tpcCBhbnkgd2hpdGVzcGFjZSBiZXR3ZWVuIHRhZyBh
bmQgdmFsdWUuCisgICAgICBzY2FubmVyLnNjYW4od2hpdGVSZSk7CisKKyAgICAgIC8vIEV4dHJh
Y3QgdGhlIHRhZyB2YWx1ZS4KKyAgICAgIGlmICh0eXBlID09PSAiPSIpIHsKKyAgICAgICAgdmFs
dWUgPSBzY2FubmVyLnNjYW5VbnRpbChlcVJlKTsKKyAgICAgICAgc2Nhbm5lci5zY2FuKGVxUmUp
OworICAgICAgICBzY2FubmVyLnNjYW5VbnRpbCh0YWdSZXNbMV0pOworICAgICAgfSBlbHNlIGlm
ICh0eXBlID09PSAieyIpIHsKKyAgICAgICAgdmFyIGNsb3NlUmUgPSBuZXcgUmVnRXhwKCJcXHMq
IiArIGVzY2FwZVJlKCJ9IiArIHRhZ3NbMV0pKTsKKyAgICAgICAgdmFsdWUgPSBzY2FubmVyLnNj
YW5VbnRpbChjbG9zZVJlKTsKKyAgICAgICAgc2Nhbm5lci5zY2FuKGN1cmx5UmUpOworICAgICAg
ICBzY2FubmVyLnNjYW5VbnRpbCh0YWdSZXNbMV0pOworICAgICAgICB0eXBlID0gIiYiOworICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgdmFsdWUgPSBzY2FubmVyLnNjYW5VbnRpbCh0YWdSZXNbMV0p
OworICAgICAgfQorCisgICAgICAvLyBNYXRjaCB0aGUgY2xvc2luZyB0YWcuCisgICAgICBpZiAo
IXNjYW5uZXIuc2Nhbih0YWdSZXNbMV0pKSB7CisgICAgICAgIHRocm93IG5ldyBFcnJvcigiVW5j
bG9zZWQgdGFnIGF0ICIgKyBzY2FubmVyLnBvcyk7CisgICAgICB9CisKKyAgICAgIHRva2Vucy5w
dXNoKFt0eXBlLCB2YWx1ZSwgc3RhcnQsIHNjYW5uZXIucG9zXSk7CisKKyAgICAgIGlmICh0eXBl
ID09PSAibmFtZSIgfHwgdHlwZSA9PT0gInsiIHx8IHR5cGUgPT09ICImIikgeworICAgICAgICBu
b25TcGFjZSA9IHRydWU7CisgICAgICB9CisKKyAgICAgIC8vIFNldCB0aGUgdGFncyBmb3IgdGhl
IG5leHQgdGltZSBhcm91bmQuCisgICAgICBpZiAodHlwZSA9PT0gIj0iKSB7CisgICAgICAgIHRh
Z3MgPSB2YWx1ZS5zcGxpdChzcGFjZVJlKTsKKyAgICAgICAgdGFnUmVzID0gZXNjYXBlVGFncyh0
YWdzKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICB0b2tlbnMgPSBzcXVhc2hUb2tlbnModG9rZW5z
KTsKKworICAgIHJldHVybiBuZXN0VG9rZW5zKHRva2Vucyk7CisgIH07CisKKyAgLy8gVGhlIGhp
Z2gtbGV2ZWwgY2xlYXJDYWNoZSwgY29tcGlsZSwgY29tcGlsZVBhcnRpYWwsIGFuZCByZW5kZXIg
ZnVuY3Rpb25zCisgIC8vIHVzZSB0aGlzIGRlZmF1bHQgd3JpdGVyLgorICB2YXIgX3dyaXRlciA9
IG5ldyBXcml0ZXIoKTsKKworICAvKioKKyAgICogQ2xlYXJzIGFsbCBjYWNoZWQgdGVtcGxhdGVz
IGFuZCBwYXJ0aWFscyBpbiB0aGUgZGVmYXVsdCB3cml0ZXIuCisgICAqLworICBleHBvcnRzLmNs
ZWFyQ2FjaGUgPSBmdW5jdGlvbiAoKSB7CisgICAgcmV0dXJuIF93cml0ZXIuY2xlYXJDYWNoZSgp
OworICB9OworCisgIC8qKgorICAgKiBDb21waWxlcyB0aGUgZ2l2ZW4gYHRlbXBsYXRlYCB0byBh
IHJldXNhYmxlIGZ1bmN0aW9uIHVzaW5nIHRoZSBkZWZhdWx0CisgICAqIHdyaXRlci4KKyAgICov
CisgIGV4cG9ydHMuY29tcGlsZSA9IGZ1bmN0aW9uICh0ZW1wbGF0ZSwgdGFncykgeworICAgIHJl
dHVybiBfd3JpdGVyLmNvbXBpbGUodGVtcGxhdGUsIHRhZ3MpOworICB9OworCisgIC8qKgorICAg
KiBDb21waWxlcyB0aGUgcGFydGlhbCB3aXRoIHRoZSBnaXZlbiBgbmFtZWAgYW5kIGB0ZW1wbGF0
ZWAgdG8gYSByZXVzYWJsZQorICAgKiBmdW5jdGlvbiB1c2luZyB0aGUgZGVmYXVsdCB3cml0ZXIu
CisgICAqLworICBleHBvcnRzLmNvbXBpbGVQYXJ0aWFsID0gZnVuY3Rpb24gKG5hbWUsIHRlbXBs
YXRlLCB0YWdzKSB7CisgICAgcmV0dXJuIF93cml0ZXIuY29tcGlsZVBhcnRpYWwobmFtZSwgdGVt
cGxhdGUsIHRhZ3MpOworICB9OworCisgIC8qKgorICAgKiBDb21waWxlcyB0aGUgZ2l2ZW4gYXJy
YXkgb2YgdG9rZW5zICh0aGUgb3V0cHV0IG9mIGEgcGFyc2UpIHRvIGEgcmV1c2FibGUKKyAgICog
ZnVuY3Rpb24gdXNpbmcgdGhlIGRlZmF1bHQgd3JpdGVyLgorICAgKi8KKyAgZXhwb3J0cy5jb21w
aWxlVG9rZW5zID0gZnVuY3Rpb24gKHRva2VucywgdGVtcGxhdGUpIHsKKyAgICByZXR1cm4gX3dy
aXRlci5jb21waWxlVG9rZW5zKHRva2VucywgdGVtcGxhdGUpOworICB9OworCisgIC8qKgorICAg
KiBSZW5kZXJzIHRoZSBgdGVtcGxhdGVgIHdpdGggdGhlIGdpdmVuIGB2aWV3YCBhbmQgYHBhcnRp
YWxzYCB1c2luZyB0aGUKKyAgICogZGVmYXVsdCB3cml0ZXIuCisgICAqLworICBleHBvcnRzLnJl
bmRlciA9IGZ1bmN0aW9uICh0ZW1wbGF0ZSwgdmlldywgcGFydGlhbHMpIHsKKyAgICByZXR1cm4g
X3dyaXRlci5yZW5kZXIodGVtcGxhdGUsIHZpZXcsIHBhcnRpYWxzKTsKKyAgfTsKKworICAvLyBU
aGlzIGlzIGhlcmUgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggMC40LnguCisgIGV4
cG9ydHMudG9faHRtbCA9IGZ1bmN0aW9uICh0ZW1wbGF0ZSwgdmlldywgcGFydGlhbHMsIHNlbmQp
IHsKKyAgICB2YXIgcmVzdWx0ID0gZXhwb3J0cy5yZW5kZXIodGVtcGxhdGUsIHZpZXcsIHBhcnRp
YWxzKTsKKworICAgIGlmICh0eXBlb2Ygc2VuZCA9PT0gImZ1bmN0aW9uIikgeworICAgICAgc2Vu
ZChyZXN1bHQpOworICAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAg
fTsKKworICByZXR1cm4gZXhwb3J0czsKKworfSgpKSkpOwpJbmRleDogUGVyZm9ybWFuY2VUZXN0
cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL3JlcXVpcmVq
cy9yZXF1aXJlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVu
Y2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9yZXF1aXJlanMvcmVxdWlyZS5qcwko
cmV2aXNpb24gMCkKKysrIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMt
ZXhhbXBsZS1hcHAvY29tcG9uZW50cy9yZXF1aXJlanMvcmVxdWlyZS5qcwkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDE5OTMgQEAKKy8qKiB2aW06IGV0OnRzPTQ6c3c9NDpzdHM9NAorICogQGxp
Y2Vuc2UgUmVxdWlyZUpTIDIuMS4yIENvcHlyaWdodCAoYykgMjAxMC0yMDEyLCBUaGUgRG9qbyBG
b3VuZGF0aW9uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBBdmFpbGFibGUgdmlhIHRoZSBNSVQg
b3IgbmV3IEJTRCBsaWNlbnNlLgorICogc2VlOiBodHRwOi8vZ2l0aHViLmNvbS9qcmJ1cmtlL3Jl
cXVpcmVqcyBmb3IgZGV0YWlscworICovCisvL05vdCB1c2luZyBzdHJpY3Q6IHVuZXZlbiBzdHJp
Y3Qgc3VwcG9ydCBpbiBicm93c2VycywgIzM5MiwgYW5kIGNhdXNlcworLy9wcm9ibGVtcyB3aXRo
IHJlcXVpcmVqcy5leGVjKCkvdHJhbnNwaWxlciBwbHVnaW5zIHRoYXQgbWF5IG5vdCBiZSBzdHJp
Y3QuCisvKmpzbGludCByZWdleHA6IHRydWUsIG5vbWVuOiB0cnVlLCBzbG9wcHk6IHRydWUgKi8K
Ky8qZ2xvYmFsIHdpbmRvdywgbmF2aWdhdG9yLCBkb2N1bWVudCwgaW1wb3J0U2NyaXB0cywgalF1
ZXJ5LCBzZXRUaW1lb3V0LCBvcGVyYSAqLworCit2YXIgcmVxdWlyZWpzLCByZXF1aXJlLCBkZWZp
bmU7CisoZnVuY3Rpb24gKGdsb2JhbCkgeworICAgIHZhciByZXEsIHMsIGhlYWQsIGJhc2VFbGVt
ZW50LCBkYXRhTWFpbiwgc3JjLAorICAgICAgICBpbnRlcmFjdGl2ZVNjcmlwdCwgY3VycmVudGx5
QWRkaW5nU2NyaXB0LCBtYWluU2NyaXB0LCBzdWJQYXRoLAorICAgICAgICB2ZXJzaW9uID0gJzIu
MS4yJywKKyAgICAgICAgY29tbWVudFJlZ0V4cCA9IC8oXC9cKihbXHNcU10qPylcKlwvfChbXjpd
fF4pXC9cLyguKikkKS9tZywKKyAgICAgICAgY2pzUmVxdWlyZVJlZ0V4cCA9IC9bXi5dXHMqcmVx
dWlyZVxzKlwoXHMqWyInXShbXiciXHNdKylbIiddXHMqXCkvZywKKyAgICAgICAganNTdWZmaXhS
ZWdFeHAgPSAvXC5qcyQvLAorICAgICAgICBjdXJyRGlyUmVnRXhwID0gL15cLlwvLywKKyAgICAg
ICAgb3AgPSBPYmplY3QucHJvdG90eXBlLAorICAgICAgICBvc3RyaW5nID0gb3AudG9TdHJpbmcs
CisgICAgICAgIGhhc093biA9IG9wLmhhc093blByb3BlcnR5LAorICAgICAgICBhcCA9IEFycmF5
LnByb3RvdHlwZSwKKyAgICAgICAgYXBzID0gYXAuc2xpY2UsCisgICAgICAgIGFwc3AgPSBhcC5z
cGxpY2UsCisgICAgICAgIGlzQnJvd3NlciA9ICEhKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmlu
ZWQnICYmIG5hdmlnYXRvciAmJiBkb2N1bWVudCksCisgICAgICAgIGlzV2ViV29ya2VyID0gIWlz
QnJvd3NlciAmJiB0eXBlb2YgaW1wb3J0U2NyaXB0cyAhPT0gJ3VuZGVmaW5lZCcsCisgICAgICAg
IC8vUFMzIGluZGljYXRlcyBsb2FkZWQgYW5kIGNvbXBsZXRlLCBidXQgbmVlZCB0byB3YWl0IGZv
ciBjb21wbGV0ZQorICAgICAgICAvL3NwZWNpZmljYWxseS4gU2VxdWVuY2UgaXMgJ2xvYWRpbmcn
LCAnbG9hZGVkJywgZXhlY3V0aW9uLAorICAgICAgICAvLyB0aGVuICdjb21wbGV0ZScuIFRoZSBV
QSBjaGVjayBpcyB1bmZvcnR1bmF0ZSwgYnV0IG5vdCBzdXJlIGhvdworICAgICAgICAvL3RvIGZl
YXR1cmUgdGVzdCB3L28gY2F1c2luZyBwZXJmIGlzc3Vlcy4KKyAgICAgICAgcmVhZHlSZWdFeHAg
PSBpc0Jyb3dzZXIgJiYgbmF2aWdhdG9yLnBsYXRmb3JtID09PSAnUExBWVNUQVRJT04gMycgPwor
ICAgICAgICAgICAgICAgICAgICAgIC9eY29tcGxldGUkLyA6IC9eKGNvbXBsZXRlfGxvYWRlZCkk
LywKKyAgICAgICAgZGVmQ29udGV4dE5hbWUgPSAnXycsCisgICAgICAgIC8vT2ggdGhlIHRyYWdl
ZHksIGRldGVjdGluZyBvcGVyYS4gU2VlIHRoZSB1c2FnZSBvZiBpc09wZXJhIGZvciByZWFzb24u
CisgICAgICAgIGlzT3BlcmEgPSB0eXBlb2Ygb3BlcmEgIT09ICd1bmRlZmluZWQnICYmIG9wZXJh
LnRvU3RyaW5nKCkgPT09ICdbb2JqZWN0IE9wZXJhXScsCisgICAgICAgIGNvbnRleHRzID0ge30s
CisgICAgICAgIGNmZyA9IHt9LAorICAgICAgICBnbG9iYWxEZWZRdWV1ZSA9IFtdLAorICAgICAg
ICB1c2VJbnRlcmFjdGl2ZSA9IGZhbHNlOworCisgICAgZnVuY3Rpb24gaXNGdW5jdGlvbihpdCkg
eworICAgICAgICByZXR1cm4gb3N0cmluZy5jYWxsKGl0KSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25d
JzsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBpc0FycmF5KGl0KSB7CisgICAgICAgIHJldHVybiBv
c3RyaW5nLmNhbGwoaXQpID09PSAnW29iamVjdCBBcnJheV0nOworICAgIH0KKworICAgIC8qKgor
ICAgICAqIEhlbHBlciBmdW5jdGlvbiBmb3IgaXRlcmF0aW5nIG92ZXIgYW4gYXJyYXkuIElmIHRo
ZSBmdW5jIHJldHVybnMKKyAgICAgKiBhIHRydWUgdmFsdWUsIGl0IHdpbGwgYnJlYWsgb3V0IG9m
IHRoZSBsb29wLgorICAgICAqLworICAgIGZ1bmN0aW9uIGVhY2goYXJ5LCBmdW5jKSB7CisgICAg
ICAgIGlmIChhcnkpIHsKKyAgICAgICAgICAgIHZhciBpOworICAgICAgICAgICAgZm9yIChpID0g
MDsgaSA8IGFyeS5sZW5ndGg7IGkgKz0gMSkgeworICAgICAgICAgICAgICAgIGlmIChhcnlbaV0g
JiYgZnVuYyhhcnlbaV0sIGksIGFyeSkpIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAg
LyoqCisgICAgICogSGVscGVyIGZ1bmN0aW9uIGZvciBpdGVyYXRpbmcgb3ZlciBhbiBhcnJheSBi
YWNrd2FyZHMuIElmIHRoZSBmdW5jCisgICAgICogcmV0dXJucyBhIHRydWUgdmFsdWUsIGl0IHdp
bGwgYnJlYWsgb3V0IG9mIHRoZSBsb29wLgorICAgICAqLworICAgIGZ1bmN0aW9uIGVhY2hSZXZl
cnNlKGFyeSwgZnVuYykgeworICAgICAgICBpZiAoYXJ5KSB7CisgICAgICAgICAgICB2YXIgaTsK
KyAgICAgICAgICAgIGZvciAoaSA9IGFyeS5sZW5ndGggLSAxOyBpID4gLTE7IGkgLT0gMSkgewor
ICAgICAgICAgICAgICAgIGlmIChhcnlbaV0gJiYgZnVuYyhhcnlbaV0sIGksIGFyeSkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gaGFzUHJvcChvYmosIHByb3ApIHsK
KyAgICAgICAgcmV0dXJuIGhhc093bi5jYWxsKG9iaiwgcHJvcCk7CisgICAgfQorCisgICAgZnVu
Y3Rpb24gZ2V0T3duKG9iaiwgcHJvcCkgeworICAgICAgICByZXR1cm4gaGFzUHJvcChvYmosIHBy
b3ApICYmIG9ialtwcm9wXTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDeWNsZXMgb3ZlciBw
cm9wZXJ0aWVzIGluIGFuIG9iamVjdCBhbmQgY2FsbHMgYSBmdW5jdGlvbiBmb3IgZWFjaAorICAg
ICAqIHByb3BlcnR5IHZhbHVlLiBJZiB0aGUgZnVuY3Rpb24gcmV0dXJucyBhIHRydXRoeSB2YWx1
ZSwgdGhlbiB0aGUKKyAgICAgKiBpdGVyYXRpb24gaXMgc3RvcHBlZC4KKyAgICAgKi8KKyAgICBm
dW5jdGlvbiBlYWNoUHJvcChvYmosIGZ1bmMpIHsKKyAgICAgICAgdmFyIHByb3A7CisgICAgICAg
IGZvciAocHJvcCBpbiBvYmopIHsKKyAgICAgICAgICAgIGlmIChoYXNQcm9wKG9iaiwgcHJvcCkp
IHsKKyAgICAgICAgICAgICAgICBpZiAoZnVuYyhvYmpbcHJvcF0sIHByb3ApKSB7CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFNpbXBsZSBmdW5jdGlvbiB0byBtaXgg
aW4gcHJvcGVydGllcyBmcm9tIHNvdXJjZSBpbnRvIHRhcmdldCwKKyAgICAgKiBidXQgb25seSBp
ZiB0YXJnZXQgZG9lcyBub3QgYWxyZWFkeSBoYXZlIGEgcHJvcGVydHkgb2YgdGhlIHNhbWUgbmFt
ZS4KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBtaXhpbih0YXJnZXQsIHNvdXJjZSwgZm9yY2UsIGRl
ZXBTdHJpbmdNaXhpbikgeworICAgICAgICBpZiAoc291cmNlKSB7CisgICAgICAgICAgICBlYWNo
UHJvcChzb3VyY2UsIGZ1bmN0aW9uICh2YWx1ZSwgcHJvcCkgeworICAgICAgICAgICAgICAgIGlm
IChmb3JjZSB8fCAhaGFzUHJvcCh0YXJnZXQsIHByb3ApKSB7CisgICAgICAgICAgICAgICAgICAg
IGlmIChkZWVwU3RyaW5nTWl4aW4gJiYgdHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykgeworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCF0YXJnZXRbcHJvcF0pIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0YXJnZXRbcHJvcF0gPSB7fTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIG1peGluKHRhcmdldFtwcm9wXSwgdmFsdWUsIGZv
cmNlLCBkZWVwU3RyaW5nTWl4aW4pOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0W3Byb3BdID0gdmFsdWU7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gdGFyZ2V0OworICAgIH0KKworICAgIC8vU2ltaWxhciB0byBGdW5jdGlv
bi5wcm90b3R5cGUuYmluZCwgYnV0IHRoZSAndGhpcycgb2JqZWN0IGlzIHNwZWNpZmllZAorICAg
IC8vZmlyc3QsIHNpbmNlIGl0IGlzIGVhc2llciB0byByZWFkL2ZpZ3VyZSBvdXQgd2hhdCAndGhp
cycgd2lsbCBiZS4KKyAgICBmdW5jdGlvbiBiaW5kKG9iaiwgZm4pIHsKKyAgICAgICAgcmV0dXJu
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiBmbi5hcHBseShvYmosIGFyZ3VtZW50
cyk7CisgICAgICAgIH07CisgICAgfQorCisgICAgZnVuY3Rpb24gc2NyaXB0cygpIHsKKyAgICAg
ICAgcmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzY3JpcHQnKTsKKyAgICB9
CisKKyAgICAvL0FsbG93IGdldHRpbmcgYSBnbG9iYWwgdGhhdCBleHByZXNzZWQgaW4KKyAgICAv
L2RvdCBub3RhdGlvbiwgbGlrZSAnYS5iLmMnLgorICAgIGZ1bmN0aW9uIGdldEdsb2JhbCh2YWx1
ZSkgeworICAgICAgICBpZiAoIXZhbHVlKSB7CisgICAgICAgICAgICByZXR1cm4gdmFsdWU7Cisg
ICAgICAgIH0KKyAgICAgICAgdmFyIGcgPSBnbG9iYWw7CisgICAgICAgIGVhY2godmFsdWUuc3Bs
aXQoJy4nKSwgZnVuY3Rpb24gKHBhcnQpIHsKKyAgICAgICAgICAgIGcgPSBnW3BhcnRdOworICAg
ICAgICB9KTsKKyAgICAgICAgcmV0dXJuIGc7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29u
c3RydWN0cyBhbiBlcnJvciB3aXRoIGEgcG9pbnRlciB0byBhbiBVUkwgd2l0aCBtb3JlIGluZm9y
bWF0aW9uLgorICAgICAqIEBwYXJhbSB7U3RyaW5nfSBpZCB0aGUgZXJyb3IgSUQgdGhhdCBtYXBz
IHRvIGFuIElEIG9uIGEgd2ViIHBhZ2UuCisgICAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2Ug
aHVtYW4gcmVhZGFibGUgZXJyb3IuCisgICAgICogQHBhcmFtIHtFcnJvcn0gW2Vycl0gdGhlIG9y
aWdpbmFsIGVycm9yLCBpZiB0aGVyZSBpcyBvbmUuCisgICAgICoKKyAgICAgKiBAcmV0dXJucyB7
RXJyb3J9CisgICAgICovCisgICAgZnVuY3Rpb24gbWFrZUVycm9yKGlkLCBtc2csIGVyciwgcmVx
dWlyZU1vZHVsZXMpIHsKKyAgICAgICAgdmFyIGUgPSBuZXcgRXJyb3IobXNnICsgJ1xuaHR0cDov
L3JlcXVpcmVqcy5vcmcvZG9jcy9lcnJvcnMuaHRtbCMnICsgaWQpOworICAgICAgICBlLnJlcXVp
cmVUeXBlID0gaWQ7CisgICAgICAgIGUucmVxdWlyZU1vZHVsZXMgPSByZXF1aXJlTW9kdWxlczsK
KyAgICAgICAgaWYgKGVycikgeworICAgICAgICAgICAgZS5vcmlnaW5hbEVycm9yID0gZXJyOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiBlOworICAgIH0KKworICAgIGlmICh0eXBlb2YgZGVm
aW5lICE9PSAndW5kZWZpbmVkJykgeworICAgICAgICAvL0lmIGEgZGVmaW5lIGlzIGFscmVhZHkg
aW4gcGxheSB2aWEgYW5vdGhlciBBTUQgbG9hZGVyLAorICAgICAgICAvL2RvIG5vdCBvdmVyd3Jp
dGUuCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAodHlwZW9mIHJlcXVpcmVqcyAh
PT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgaWYgKGlzRnVuY3Rpb24ocmVxdWlyZWpzKSkgewor
ICAgICAgICAgICAgLy9EbyBub3Qgb3ZlcndyaXRlIGFuZCBleGlzdGluZyByZXF1aXJlanMgaW5z
dGFuY2UuCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgY2ZnID0gcmVx
dWlyZWpzOworICAgICAgICByZXF1aXJlanMgPSB1bmRlZmluZWQ7CisgICAgfQorCisgICAgLy9B
bGxvdyBmb3IgYSByZXF1aXJlIGNvbmZpZyBvYmplY3QKKyAgICBpZiAodHlwZW9mIHJlcXVpcmUg
IT09ICd1bmRlZmluZWQnICYmICFpc0Z1bmN0aW9uKHJlcXVpcmUpKSB7CisgICAgICAgIC8vYXNz
dW1lIGl0IGlzIGEgY29uZmlnIG9iamVjdC4KKyAgICAgICAgY2ZnID0gcmVxdWlyZTsKKyAgICAg
ICAgcmVxdWlyZSA9IHVuZGVmaW5lZDsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBuZXdDb250ZXh0
KGNvbnRleHROYW1lKSB7CisgICAgICAgIHZhciBpbkNoZWNrTG9hZGVkLCBNb2R1bGUsIGNvbnRl
eHQsIGhhbmRsZXJzLAorICAgICAgICAgICAgY2hlY2tMb2FkZWRUaW1lb3V0SWQsCisgICAgICAg
ICAgICBjb25maWcgPSB7CisgICAgICAgICAgICAgICAgd2FpdFNlY29uZHM6IDcsCisgICAgICAg
ICAgICAgICAgYmFzZVVybDogJy4vJywKKyAgICAgICAgICAgICAgICBwYXRoczoge30sCisgICAg
ICAgICAgICAgICAgcGtnczoge30sCisgICAgICAgICAgICAgICAgc2hpbToge30sCisgICAgICAg
ICAgICAgICAgbWFwOiB7fSwKKyAgICAgICAgICAgICAgICBjb25maWc6IHt9CisgICAgICAgICAg
ICB9LAorICAgICAgICAgICAgcmVnaXN0cnkgPSB7fSwKKyAgICAgICAgICAgIHVuZGVmRXZlbnRz
ID0ge30sCisgICAgICAgICAgICBkZWZRdWV1ZSA9IFtdLAorICAgICAgICAgICAgZGVmaW5lZCA9
IHt9LAorICAgICAgICAgICAgdXJsRmV0Y2hlZCA9IHt9LAorICAgICAgICAgICAgcmVxdWlyZUNv
dW50ZXIgPSAxLAorICAgICAgICAgICAgdW5ub3JtYWxpemVkQ291bnRlciA9IDE7CisKKyAgICAg
ICAgLyoqCisgICAgICAgICAqIFRyaW1zIHRoZSAuIGFuZCAuLiBmcm9tIGFuIGFycmF5IG9mIHBh
dGggc2VnbWVudHMuCisgICAgICAgICAqIEl0IHdpbGwga2VlcCBhIGxlYWRpbmcgcGF0aCBzZWdt
ZW50IGlmIGEgLi4gd2lsbCBiZWNvbWUKKyAgICAgICAgICogdGhlIGZpcnN0IHBhdGggc2VnbWVu
dCwgdG8gaGVscCB3aXRoIG1vZHVsZSBuYW1lIGxvb2t1cHMsCisgICAgICAgICAqIHdoaWNoIGFj
dCBsaWtlIHBhdGhzLCBidXQgY2FuIGJlIHJlbWFwcGVkLiBCdXQgdGhlIGVuZCByZXN1bHQsCisg
ICAgICAgICAqIGFsbCBwYXRocyB0aGF0IHVzZSB0aGlzIGZ1bmN0aW9uIHNob3VsZCBsb29rIG5v
cm1hbGl6ZWQuCisgICAgICAgICAqIE5PVEU6IHRoaXMgbWV0aG9kIE1PRElGSUVTIHRoZSBpbnB1
dCBhcnJheS4KKyAgICAgICAgICogQHBhcmFtIHtBcnJheX0gYXJ5IHRoZSBhcnJheSBvZiBwYXRo
IHNlZ21lbnRzLgorICAgICAgICAgKi8KKyAgICAgICAgZnVuY3Rpb24gdHJpbURvdHMoYXJ5KSB7
CisgICAgICAgICAgICB2YXIgaSwgcGFydDsKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGFyeVtp
XTsgaSArPSAxKSB7CisgICAgICAgICAgICAgICAgcGFydCA9IGFyeVtpXTsKKyAgICAgICAgICAg
ICAgICBpZiAocGFydCA9PT0gJy4nKSB7CisgICAgICAgICAgICAgICAgICAgIGFyeS5zcGxpY2Uo
aSwgMSk7CisgICAgICAgICAgICAgICAgICAgIGkgLT0gMTsKKyAgICAgICAgICAgICAgICB9IGVs
c2UgaWYgKHBhcnQgPT09ICcuLicpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT09IDEg
JiYgKGFyeVsyXSA9PT0gJy4uJyB8fCBhcnlbMF0gPT09ICcuLicpKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAvL0VuZCBvZiB0aGUgbGluZS4gS2VlcCBhdCBsZWFzdCBvbmUgbm9uLWRvdAor
ICAgICAgICAgICAgICAgICAgICAgICAgLy9wYXRoIHNlZ21lbnQgYXQgdGhlIGZyb250IHNvIGl0
IGNhbiBiZSBtYXBwZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vY29ycmVjdGx5IHRvIGRp
c2suIE90aGVyd2lzZSwgdGhlcmUgaXMgbGlrZWx5CisgICAgICAgICAgICAgICAgICAgICAgICAv
L25vIHBhdGggbWFwcGluZyBmb3IgYSBwYXRoIHN0YXJ0aW5nIHdpdGggJy4uJy4KKyAgICAgICAg
ICAgICAgICAgICAgICAgIC8vVGhpcyBjYW4gc3RpbGwgZmFpbCwgYnV0IGNhdGNoZXMgdGhlIG1v
c3QgcmVhc29uYWJsZQorICAgICAgICAgICAgICAgICAgICAgICAgLy91c2VzIG9mIC4uCisgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlm
IChpID4gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgYXJ5LnNwbGljZShpIC0gMSwgMik7
CisgICAgICAgICAgICAgICAgICAgICAgICBpIC09IDI7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAv
KioKKyAgICAgICAgICogR2l2ZW4gYSByZWxhdGl2ZSBtb2R1bGUgbmFtZSwgbGlrZSAuL3NvbWV0
aGluZywgbm9ybWFsaXplIGl0IHRvCisgICAgICAgICAqIGEgcmVhbCBuYW1lIHRoYXQgY2FuIGJl
IG1hcHBlZCB0byBhIHBhdGguCisgICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIHRoZSBy
ZWxhdGl2ZSBuYW1lCisgICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBiYXNlTmFtZSBhIHJlYWwg
bmFtZSB0aGF0IHRoZSBuYW1lIGFyZyBpcyByZWxhdGl2ZQorICAgICAgICAgKiB0by4KKyAgICAg
ICAgICogQHBhcmFtIHtCb29sZWFufSBhcHBseU1hcCBhcHBseSB0aGUgbWFwIGNvbmZpZyB0byB0
aGUgdmFsdWUuIFNob3VsZAorICAgICAgICAgKiBvbmx5IGJlIGRvbmUgaWYgdGhpcyBub3JtYWxp
emF0aW9uIGlzIGZvciBhIGRlcGVuZGVuY3kgSUQuCisgICAgICAgICAqIEByZXR1cm5zIHtTdHJp
bmd9IG5vcm1hbGl6ZWQgbmFtZQorICAgICAgICAgKi8KKyAgICAgICAgZnVuY3Rpb24gbm9ybWFs
aXplKG5hbWUsIGJhc2VOYW1lLCBhcHBseU1hcCkgeworICAgICAgICAgICAgdmFyIHBrZ05hbWUs
IHBrZ0NvbmZpZywgbWFwVmFsdWUsIG5hbWVQYXJ0cywgaSwgaiwgbmFtZVNlZ21lbnQsCisgICAg
ICAgICAgICAgICAgZm91bmRNYXAsIGZvdW5kSSwgZm91bmRTdGFyTWFwLCBzdGFySSwKKyAgICAg
ICAgICAgICAgICBiYXNlUGFydHMgPSBiYXNlTmFtZSAmJiBiYXNlTmFtZS5zcGxpdCgnLycpLAor
ICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRCYXNlUGFydHMgPSBiYXNlUGFydHMsCisgICAgICAg
ICAgICAgICAgbWFwID0gY29uZmlnLm1hcCwKKyAgICAgICAgICAgICAgICBzdGFyTWFwID0gbWFw
ICYmIG1hcFsnKiddOworCisgICAgICAgICAgICAvL0FkanVzdCBhbnkgcmVsYXRpdmUgcGF0aHMu
CisgICAgICAgICAgICBpZiAobmFtZSAmJiBuYW1lLmNoYXJBdCgwKSA9PT0gJy4nKSB7CisgICAg
ICAgICAgICAgICAgLy9JZiBoYXZlIGEgYmFzZSBuYW1lLCB0cnkgdG8gbm9ybWFsaXplIGFnYWlu
c3QgaXQsCisgICAgICAgICAgICAgICAgLy9vdGhlcndpc2UsIGFzc3VtZSBpdCBpcyBhIHRvcC1s
ZXZlbCByZXF1aXJlIHRoYXQgd2lsbAorICAgICAgICAgICAgICAgIC8vYmUgcmVsYXRpdmUgdG8g
YmFzZVVybCBpbiB0aGUgZW5kLgorICAgICAgICAgICAgICAgIGlmIChiYXNlTmFtZSkgeworICAg
ICAgICAgICAgICAgICAgICBpZiAoZ2V0T3duKGNvbmZpZy5wa2dzLCBiYXNlTmFtZSkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vSWYgdGhlIGJhc2VOYW1lIGlzIGEgcGFja2FnZSBuYW1l
LCB0aGVuIGp1c3QgdHJlYXQgaXQgYXMgb25lCisgICAgICAgICAgICAgICAgICAgICAgICAvL25h
bWUgdG8gY29uY2F0IHRoZSBuYW1lIHdpdGguCisgICAgICAgICAgICAgICAgICAgICAgICBub3Jt
YWxpemVkQmFzZVBhcnRzID0gYmFzZVBhcnRzID0gW2Jhc2VOYW1lXTsKKyAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vQ29udmVydCBiYXNlTmFt
ZSB0byBhcnJheSwgYW5kIGxvcCBvZmYgdGhlIGxhc3QgcGFydCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vc28gdGhhdCAuIG1hdGNoZXMgdGhhdCAnZGlyZWN0b3J5JyBhbmQgbm90IG5hbWUg
b2YgdGhlIGJhc2VOYW1lJ3MKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vbW9kdWxlLiBGb3Ig
aW5zdGFuY2UsIGJhc2VOYW1lIG9mICdvbmUvdHdvL3RocmVlJywgbWFwcyB0bworICAgICAgICAg
ICAgICAgICAgICAgICAgLy8nb25lL3R3by90aHJlZS5qcycsIGJ1dCB3ZSB3YW50IHRoZSBkaXJl
Y3RvcnksICdvbmUvdHdvJyBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vdGhpcyBub3Jt
YWxpemF0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZEJhc2VQYXJ0cyA9
IGJhc2VQYXJ0cy5zbGljZSgwLCBiYXNlUGFydHMubGVuZ3RoIC0gMSk7CisgICAgICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBuYW1lID0gbm9ybWFsaXplZEJhc2VQYXJ0
cy5jb25jYXQobmFtZS5zcGxpdCgnLycpKTsKKyAgICAgICAgICAgICAgICAgICAgdHJpbURvdHMo
bmFtZSk7CisKKyAgICAgICAgICAgICAgICAgICAgLy9Tb21lIHVzZSBvZiBwYWNrYWdlcyBtYXkg
dXNlIGEgLiBwYXRoIHRvIHJlZmVyZW5jZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgLy8nbWFp
bicgbW9kdWxlIG5hbWUsIHNvIG5vcm1hbGl6ZSBmb3IgdGhhdC4KKyAgICAgICAgICAgICAgICAg
ICAgcGtnQ29uZmlnID0gZ2V0T3duKGNvbmZpZy5wa2dzLCAocGtnTmFtZSA9IG5hbWVbMF0pKTsK
KyAgICAgICAgICAgICAgICAgICAgbmFtZSA9IG5hbWUuam9pbignLycpOworICAgICAgICAgICAg
ICAgICAgICBpZiAocGtnQ29uZmlnICYmIG5hbWUgPT09IHBrZ05hbWUgKyAnLycgKyBwa2dDb25m
aWcubWFpbikgeworICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IHBrZ05hbWU7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUuaW5kZXhP
ZignLi8nKSA9PT0gMCkgeworICAgICAgICAgICAgICAgICAgICAvLyBObyBiYXNlTmFtZSwgc28g
dGhpcyBpcyBJRCBpcyByZXNvbHZlZCByZWxhdGl2ZQorICAgICAgICAgICAgICAgICAgICAvLyB0
byBiYXNlVXJsLCBwdWxsIG9mZiB0aGUgbGVhZGluZyBkb3QuCisgICAgICAgICAgICAgICAgICAg
IG5hbWUgPSBuYW1lLnN1YnN0cmluZygyKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIC8vQXBwbHkgbWFwIGNvbmZpZyBpZiBhdmFpbGFibGUuCisgICAg
ICAgICAgICBpZiAoYXBwbHlNYXAgJiYgKGJhc2VQYXJ0cyB8fCBzdGFyTWFwKSAmJiBtYXApIHsK
KyAgICAgICAgICAgICAgICBuYW1lUGFydHMgPSBuYW1lLnNwbGl0KCcvJyk7CisKKyAgICAgICAg
ICAgICAgICBmb3IgKGkgPSBuYW1lUGFydHMubGVuZ3RoOyBpID4gMDsgaSAtPSAxKSB7CisgICAg
ICAgICAgICAgICAgICAgIG5hbWVTZWdtZW50ID0gbmFtZVBhcnRzLnNsaWNlKDAsIGkpLmpvaW4o
Jy8nKTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoYmFzZVBhcnRzKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAvL0ZpbmQgdGhlIGxvbmdlc3QgYmFzZU5hbWUgc2VnbWVudCBtYXRjaCBp
biB0aGUgY29uZmlnLgorICAgICAgICAgICAgICAgICAgICAgICAgLy9TbywgZG8gam9pbnMgb24g
dGhlIGJpZ2dlc3QgdG8gc21hbGxlc3QgbGVuZ3RocyBvZiBiYXNlUGFydHMuCisgICAgICAgICAg
ICAgICAgICAgICAgICBmb3IgKGogPSBiYXNlUGFydHMubGVuZ3RoOyBqID4gMDsgaiAtPSAxKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwVmFsdWUgPSBnZXRPd24obWFwLCBiYXNl
UGFydHMuc2xpY2UoMCwgaikuam9pbignLycpKTsKKworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vYmFzZU5hbWUgc2VnbWVudCBoYXMgY29uZmlnLCBmaW5kIGlmIGl0IGhhcyBvbmUgZm9y
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy90aGlzIG5hbWUuCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKG1hcFZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1hcFZhbHVlID0gZ2V0T3duKG1hcFZhbHVlLCBuYW1lU2VnbWVudCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXBWYWx1ZSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy9NYXRjaCwgdXBkYXRlIG5hbWUgdG8gdGhlIG5ldyB2YWx1
ZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kTWFwID0gbWFwVmFs
dWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZEkgPSBpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgICAgICBpZiAoZm91bmRNYXApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgLy9DaGVjayBmb3Ig
YSBzdGFyIG1hcCBtYXRjaCwgYnV0IGp1c3QgaG9sZCBvbiB0byBpdCwKKyAgICAgICAgICAgICAg
ICAgICAgLy9pZiB0aGVyZSBpcyBhIHNob3J0ZXIgc2VnbWVudCBtYXRjaCBsYXRlciBpbiBhIG1h
dGNoaW5nCisgICAgICAgICAgICAgICAgICAgIC8vY29uZmlnLCB0aGVuIGZhdm9yIG92ZXIgdGhp
cyBzdGFyIG1hcC4KKyAgICAgICAgICAgICAgICAgICAgaWYgKCFmb3VuZFN0YXJNYXAgJiYgc3Rh
ck1hcCAmJiBnZXRPd24oc3Rhck1hcCwgbmFtZVNlZ21lbnQpKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBmb3VuZFN0YXJNYXAgPSBnZXRPd24oc3Rhck1hcCwgbmFtZVNlZ21lbnQpOworICAg
ICAgICAgICAgICAgICAgICAgICAgc3RhckkgPSBpOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKCFmb3VuZE1hcCAmJiBmb3Vu
ZFN0YXJNYXApIHsKKyAgICAgICAgICAgICAgICAgICAgZm91bmRNYXAgPSBmb3VuZFN0YXJNYXA7
CisgICAgICAgICAgICAgICAgICAgIGZvdW5kSSA9IHN0YXJJOworICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIGlmIChmb3VuZE1hcCkgeworICAgICAgICAgICAgICAgICAgICBu
YW1lUGFydHMuc3BsaWNlKDAsIGZvdW5kSSwgZm91bmRNYXApOworICAgICAgICAgICAgICAgICAg
ICBuYW1lID0gbmFtZVBhcnRzLmpvaW4oJy8nKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBuYW1lOworICAgICAgICB9CisKKyAgICAgICAg
ZnVuY3Rpb24gcmVtb3ZlU2NyaXB0KG5hbWUpIHsKKyAgICAgICAgICAgIGlmIChpc0Jyb3dzZXIp
IHsKKyAgICAgICAgICAgICAgICBlYWNoKHNjcmlwdHMoKSwgZnVuY3Rpb24gKHNjcmlwdE5vZGUp
IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNjcmlwdE5vZGUuZ2V0QXR0cmlidXRlKCdkYXRh
LXJlcXVpcmVtb2R1bGUnKSA9PT0gbmFtZSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNjcmlwdE5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLXJlcXVpcmVjb250ZXh0JykgPT09IGNvbnRl
eHQuY29udGV4dE5hbWUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdE5vZGUucGFy
ZW50Tm9kZS5yZW1vdmVDaGlsZChzY3JpcHROb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBoYXNQYXRoRmFs
bGJhY2soaWQpIHsKKyAgICAgICAgICAgIHZhciBwYXRoQ29uZmlnID0gZ2V0T3duKGNvbmZpZy5w
YXRocywgaWQpOworICAgICAgICAgICAgaWYgKHBhdGhDb25maWcgJiYgaXNBcnJheShwYXRoQ29u
ZmlnKSAmJiBwYXRoQ29uZmlnLmxlbmd0aCA+IDEpIHsKKyAgICAgICAgICAgICAgICByZW1vdmVT
Y3JpcHQoaWQpOworICAgICAgICAgICAgICAgIC8vUG9wIG9mZiB0aGUgZmlyc3QgYXJyYXkgdmFs
dWUsIHNpbmNlIGl0IGZhaWxlZCwgYW5kCisgICAgICAgICAgICAgICAgLy9yZXRyeQorICAgICAg
ICAgICAgICAgIHBhdGhDb25maWcuc2hpZnQoKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LnJl
cXVpcmUudW5kZWYoaWQpOworICAgICAgICAgICAgICAgIGNvbnRleHQucmVxdWlyZShbaWRdKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIC8vVHVybnMgYSBwbHVnaW4hcmVzb3VyY2UgdG8gW3BsdWdpbiwgcmVzb3VyY2Vd
CisgICAgICAgIC8vd2l0aCB0aGUgcGx1Z2luIGJlaW5nIHVuZGVmaW5lZCBpZiB0aGUgbmFtZQor
ICAgICAgICAvL2RpZCBub3QgaGF2ZSBhIHBsdWdpbiBwcmVmaXguCisgICAgICAgIGZ1bmN0aW9u
IHNwbGl0UHJlZml4KG5hbWUpIHsKKyAgICAgICAgICAgIHZhciBwcmVmaXgsCisgICAgICAgICAg
ICAgICAgaW5kZXggPSBuYW1lID8gbmFtZS5pbmRleE9mKCchJykgOiAtMTsKKyAgICAgICAgICAg
IGlmIChpbmRleCA+IC0xKSB7CisgICAgICAgICAgICAgICAgcHJlZml4ID0gbmFtZS5zdWJzdHJp
bmcoMCwgaW5kZXgpOworICAgICAgICAgICAgICAgIG5hbWUgPSBuYW1lLnN1YnN0cmluZyhpbmRl
eCArIDEsIG5hbWUubGVuZ3RoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBb
cHJlZml4LCBuYW1lXTsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBDcmVh
dGVzIGEgbW9kdWxlIG1hcHBpbmcgdGhhdCBpbmNsdWRlcyBwbHVnaW4gcHJlZml4LCBtb2R1bGUK
KyAgICAgICAgICogbmFtZSwgYW5kIHBhdGguIElmIHBhcmVudE1vZHVsZU1hcCBpcyBwcm92aWRl
ZCBpdCB3aWxsCisgICAgICAgICAqIGFsc28gbm9ybWFsaXplIHRoZSBuYW1lIHZpYSByZXF1aXJl
Lm5vcm1hbGl6ZSgpCisgICAgICAgICAqCisgICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1l
IHRoZSBtb2R1bGUgbmFtZQorICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gW3BhcmVudE1vZHVs
ZU1hcF0gcGFyZW50IG1vZHVsZSBtYXAKKyAgICAgICAgICogZm9yIHRoZSBtb2R1bGUgbmFtZSwg
dXNlZCB0byByZXNvbHZlIHJlbGF0aXZlIG5hbWVzLgorICAgICAgICAgKiBAcGFyYW0ge0Jvb2xl
YW59IGlzTm9ybWFsaXplZDogaXMgdGhlIElEIGFscmVhZHkgbm9ybWFsaXplZC4KKyAgICAgICAg
ICogVGhpcyBpcyB0cnVlIGlmIHRoaXMgY2FsbCBpcyBkb25lIGZvciBhIGRlZmluZSgpIG1vZHVs
ZSBJRC4KKyAgICAgICAgICogQHBhcmFtIHtCb29sZWFufSBhcHBseU1hcDogYXBwbHkgdGhlIG1h
cCBjb25maWcgdG8gdGhlIElELgorICAgICAgICAgKiBTaG91bGQgb25seSBiZSB0cnVlIGlmIHRo
aXMgbWFwIGlzIGZvciBhIGRlcGVuZGVuY3kuCisgICAgICAgICAqCisgICAgICAgICAqIEByZXR1
cm5zIHtPYmplY3R9CisgICAgICAgICAqLworICAgICAgICBmdW5jdGlvbiBtYWtlTW9kdWxlTWFw
KG5hbWUsIHBhcmVudE1vZHVsZU1hcCwgaXNOb3JtYWxpemVkLCBhcHBseU1hcCkgeworICAgICAg
ICAgICAgdmFyIHVybCwgcGx1Z2luTW9kdWxlLCBzdWZmaXgsIG5hbWVQYXJ0cywKKyAgICAgICAg
ICAgICAgICBwcmVmaXggPSBudWxsLAorICAgICAgICAgICAgICAgIHBhcmVudE5hbWUgPSBwYXJl
bnRNb2R1bGVNYXAgPyBwYXJlbnRNb2R1bGVNYXAubmFtZSA6IG51bGwsCisgICAgICAgICAgICAg
ICAgb3JpZ2luYWxOYW1lID0gbmFtZSwKKyAgICAgICAgICAgICAgICBpc0RlZmluZSA9IHRydWUs
CisgICAgICAgICAgICAgICAgbm9ybWFsaXplZE5hbWUgPSAnJzsKKworICAgICAgICAgICAgLy9J
ZiBubyBuYW1lLCB0aGVuIGl0IG1lYW5zIGl0IGlzIGEgcmVxdWlyZSBjYWxsLCBnZW5lcmF0ZSBh
bgorICAgICAgICAgICAgLy9pbnRlcm5hbCBuYW1lLgorICAgICAgICAgICAgaWYgKCFuYW1lKSB7
CisgICAgICAgICAgICAgICAgaXNEZWZpbmUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBuYW1l
ID0gJ19AcicgKyAocmVxdWlyZUNvdW50ZXIgKz0gMSk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIG5hbWVQYXJ0cyA9IHNwbGl0UHJlZml4KG5hbWUpOworICAgICAgICAgICAgcHJlZml4
ID0gbmFtZVBhcnRzWzBdOworICAgICAgICAgICAgbmFtZSA9IG5hbWVQYXJ0c1sxXTsKKworICAg
ICAgICAgICAgaWYgKHByZWZpeCkgeworICAgICAgICAgICAgICAgIHByZWZpeCA9IG5vcm1hbGl6
ZShwcmVmaXgsIHBhcmVudE5hbWUsIGFwcGx5TWFwKTsKKyAgICAgICAgICAgICAgICBwbHVnaW5N
b2R1bGUgPSBnZXRPd24oZGVmaW5lZCwgcHJlZml4KTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgLy9BY2NvdW50IGZvciByZWxhdGl2ZSBwYXRocyBpZiB0aGVyZSBpcyBhIGJhc2UgbmFt
ZS4KKyAgICAgICAgICAgIGlmIChuYW1lKSB7CisgICAgICAgICAgICAgICAgaWYgKHByZWZpeCkg
eworICAgICAgICAgICAgICAgICAgICBpZiAocGx1Z2luTW9kdWxlICYmIHBsdWdpbk1vZHVsZS5u
b3JtYWxpemUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vUGx1Z2luIGlzIGxvYWRlZCwg
dXNlIGl0cyBub3JtYWxpemUgbWV0aG9kLgorICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFs
aXplZE5hbWUgPSBwbHVnaW5Nb2R1bGUubm9ybWFsaXplKG5hbWUsIGZ1bmN0aW9uIChuYW1lKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZShuYW1lLCBwYXJl
bnROYW1lLCBhcHBseU1hcCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRO
YW1lID0gbm9ybWFsaXplKG5hbWUsIHBhcmVudE5hbWUsIGFwcGx5TWFwKTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
IC8vQSByZWd1bGFyIG1vZHVsZS4KKyAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZE5hbWUg
PSBub3JtYWxpemUobmFtZSwgcGFyZW50TmFtZSwgYXBwbHlNYXApOworCisgICAgICAgICAgICAg
ICAgICAgIC8vTm9ybWFsaXplZCBuYW1lIG1heSBiZSBhIHBsdWdpbiBJRCBkdWUgdG8gbWFwIGNv
bmZpZworICAgICAgICAgICAgICAgICAgICAvL2FwcGxpY2F0aW9uIGluIG5vcm1hbGl6ZS4gVGhl
IG1hcCBjb25maWcgdmFsdWVzIG11c3QKKyAgICAgICAgICAgICAgICAgICAgLy9hbHJlYWR5IGJl
IG5vcm1hbGl6ZWQsIHNvIGRvIG5vdCBuZWVkIHRvIHJlZG8gdGhhdCBwYXJ0LgorICAgICAgICAg
ICAgICAgICAgICBuYW1lUGFydHMgPSBzcGxpdFByZWZpeChub3JtYWxpemVkTmFtZSk7CisgICAg
ICAgICAgICAgICAgICAgIHByZWZpeCA9IG5hbWVQYXJ0c1swXTsKKyAgICAgICAgICAgICAgICAg
ICAgbm9ybWFsaXplZE5hbWUgPSBuYW1lUGFydHNbMV07CisgICAgICAgICAgICAgICAgICAgIGlz
Tm9ybWFsaXplZCA9IHRydWU7CisKKyAgICAgICAgICAgICAgICAgICAgdXJsID0gY29udGV4dC5u
YW1lVG9Vcmwobm9ybWFsaXplZE5hbWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgLy9JZiB0aGUgaWQgaXMgYSBwbHVnaW4gaWQgdGhhdCBjYW5ub3Qg
YmUgZGV0ZXJtaW5lZCBpZiBpdCBuZWVkcworICAgICAgICAgICAgLy9ub3JtYWxpemF0aW9uLCBz
dGFtcCBpdCB3aXRoIGEgdW5pcXVlIElEIHNvIHR3byBtYXRjaGluZyByZWxhdGl2ZQorICAgICAg
ICAgICAgLy9pZHMgdGhhdCBtYXkgY29uZmxpY3QgY2FuIGJlIHNlcGFyYXRlLgorICAgICAgICAg
ICAgc3VmZml4ID0gcHJlZml4ICYmICFwbHVnaW5Nb2R1bGUgJiYgIWlzTm9ybWFsaXplZCA/Cisg
ICAgICAgICAgICAgICAgICAgICAnX3Vubm9ybWFsaXplZCcgKyAodW5ub3JtYWxpemVkQ291bnRl
ciArPSAxKSA6CisgICAgICAgICAgICAgICAgICAgICAnJzsKKworICAgICAgICAgICAgcmV0dXJu
IHsKKyAgICAgICAgICAgICAgICBwcmVmaXg6IHByZWZpeCwKKyAgICAgICAgICAgICAgICBuYW1l
OiBub3JtYWxpemVkTmFtZSwKKyAgICAgICAgICAgICAgICBwYXJlbnRNYXA6IHBhcmVudE1vZHVs
ZU1hcCwKKyAgICAgICAgICAgICAgICB1bm5vcm1hbGl6ZWQ6ICEhc3VmZml4LAorICAgICAgICAg
ICAgICAgIHVybDogdXJsLAorICAgICAgICAgICAgICAgIG9yaWdpbmFsTmFtZTogb3JpZ2luYWxO
YW1lLAorICAgICAgICAgICAgICAgIGlzRGVmaW5lOiBpc0RlZmluZSwKKyAgICAgICAgICAgICAg
ICBpZDogKHByZWZpeCA/CisgICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXggKyAnIScgKyBu
b3JtYWxpemVkTmFtZSA6CisgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkTmFtZSkg
KyBzdWZmaXgKKyAgICAgICAgICAgIH07CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBn
ZXRNb2R1bGUoZGVwTWFwKSB7CisgICAgICAgICAgICB2YXIgaWQgPSBkZXBNYXAuaWQsCisgICAg
ICAgICAgICAgICAgbW9kID0gZ2V0T3duKHJlZ2lzdHJ5LCBpZCk7CisKKyAgICAgICAgICAgIGlm
ICghbW9kKSB7CisgICAgICAgICAgICAgICAgbW9kID0gcmVnaXN0cnlbaWRdID0gbmV3IGNvbnRl
eHQuTW9kdWxlKGRlcE1hcCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBt
b2Q7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBvbihkZXBNYXAsIG5hbWUsIGZuKSB7
CisgICAgICAgICAgICB2YXIgaWQgPSBkZXBNYXAuaWQsCisgICAgICAgICAgICAgICAgbW9kID0g
Z2V0T3duKHJlZ2lzdHJ5LCBpZCk7CisKKyAgICAgICAgICAgIGlmIChoYXNQcm9wKGRlZmluZWQs
IGlkKSAmJgorICAgICAgICAgICAgICAgICAgICAoIW1vZCB8fCBtb2QuZGVmaW5lRW1pdENvbXBs
ZXRlKSkgeworICAgICAgICAgICAgICAgIGlmIChuYW1lID09PSAnZGVmaW5lZCcpIHsKKyAgICAg
ICAgICAgICAgICAgICAgZm4oZGVmaW5lZFtpZF0pOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZ2V0TW9kdWxlKGRlcE1hcCkub24obmFt
ZSwgZm4pOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gb25F
cnJvcihlcnIsIGVycmJhY2spIHsKKyAgICAgICAgICAgIHZhciBpZHMgPSBlcnIucmVxdWlyZU1v
ZHVsZXMsCisgICAgICAgICAgICAgICAgbm90aWZpZWQgPSBmYWxzZTsKKworICAgICAgICAgICAg
aWYgKGVycmJhY2spIHsKKyAgICAgICAgICAgICAgICBlcnJiYWNrKGVycik7CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGVhY2goaWRzLCBmdW5jdGlvbiAoaWQpIHsKKyAg
ICAgICAgICAgICAgICAgICAgdmFyIG1vZCA9IGdldE93bihyZWdpc3RyeSwgaWQpOworICAgICAg
ICAgICAgICAgICAgICBpZiAobW9kKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvL1NldCBl
cnJvciBvbiBtb2R1bGUsIHNvIGl0IHNraXBzIHRpbWVvdXQgY2hlY2tzLgorICAgICAgICAgICAg
ICAgICAgICAgICAgbW9kLmVycm9yID0gZXJyOworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KG1vZC5ldmVudHMuZXJyb3IpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RpZmll
ZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kLmVtaXQoJ2Vycm9yJywg
ZXJyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAgICAgaWYgKCFub3RpZmllZCkgewor
ICAgICAgICAgICAgICAgICAgICByZXEub25FcnJvcihlcnIpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBJbnRl
cm5hbCBtZXRob2QgdG8gdHJhbnNmZXIgZ2xvYmFsUXVldWUgaXRlbXMgdG8gdGhpcyBjb250ZXh0
J3MKKyAgICAgICAgICogZGVmUXVldWUuCisgICAgICAgICAqLworICAgICAgICBmdW5jdGlvbiB0
YWtlR2xvYmFsUXVldWUoKSB7CisgICAgICAgICAgICAvL1B1c2ggYWxsIHRoZSBnbG9iYWxEZWZR
dWV1ZSBpdGVtcyBpbnRvIHRoZSBjb250ZXh0J3MgZGVmUXVldWUKKyAgICAgICAgICAgIGlmIChn
bG9iYWxEZWZRdWV1ZS5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAvL0FycmF5IHNwbGljZSBp
biB0aGUgdmFsdWVzIHNpbmNlIHRoZSBjb250ZXh0IGNvZGUgaGFzIGEKKyAgICAgICAgICAgICAg
ICAvL2xvY2FsIHZhciByZWYgdG8gZGVmUXVldWUsIHNvIGNhbm5vdCBqdXN0IHJlYXNzaWduIHRo
ZSBvbmUKKyAgICAgICAgICAgICAgICAvL29uIGNvbnRleHQuCisgICAgICAgICAgICAgICAgYXBz
cC5hcHBseShkZWZRdWV1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkZWZRdWV1ZS5s
ZW5ndGggLSAxLCAwXS5jb25jYXQoZ2xvYmFsRGVmUXVldWUpKTsKKyAgICAgICAgICAgICAgICBn
bG9iYWxEZWZRdWV1ZSA9IFtdOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAg
aGFuZGxlcnMgPSB7CisgICAgICAgICAgICAncmVxdWlyZSc6IGZ1bmN0aW9uIChtb2QpIHsKKyAg
ICAgICAgICAgICAgICBpZiAobW9kLnJlcXVpcmUpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIG1vZC5yZXF1aXJlOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiAobW9kLnJlcXVpcmUgPSBjb250ZXh0Lm1ha2VSZXF1aXJlKG1vZC5tYXAp
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgJ2V4cG9y
dHMnOiBmdW5jdGlvbiAobW9kKSB7CisgICAgICAgICAgICAgICAgbW9kLnVzaW5nRXhwb3J0cyA9
IHRydWU7CisgICAgICAgICAgICAgICAgaWYgKG1vZC5tYXAuaXNEZWZpbmUpIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKG1vZC5leHBvcnRzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gbW9kLmV4cG9ydHM7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gKG1vZC5leHBvcnRzID0gZGVmaW5lZFttb2QubWFwLmlk
XSA9IHt9KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0sCisgICAgICAgICAgICAnbW9kdWxlJzogZnVuY3Rpb24gKG1vZCkgeworICAgICAg
ICAgICAgICAgIGlmIChtb2QubW9kdWxlKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBt
b2QubW9kdWxlOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiAobW9kLm1vZHVsZSA9IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBtb2Qu
bWFwLmlkLAorICAgICAgICAgICAgICAgICAgICAgICAgdXJpOiBtb2QubWFwLnVybCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbmZpZzogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiAoY29uZmlnLmNvbmZpZyAmJiBnZXRPd24oY29uZmlnLmNvbmZp
ZywgbW9kLm1hcC5pZCkpIHx8IHt9OworICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGV4cG9ydHM6IGRlZmluZWRbbW9kLm1hcC5pZF0KKyAgICAgICAg
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9OworCisgICAgICAgIGZ1bmN0aW9uIGNsZWFuUmVnaXN0cnkoaWQpIHsKKyAgICAgICAgICAg
IC8vQ2xlYW4gdXAgbWFjaGluZXJ5IHVzZWQgZm9yIHdhaXRpbmcgbW9kdWxlcy4KKyAgICAgICAg
ICAgIGRlbGV0ZSByZWdpc3RyeVtpZF07CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBi
cmVha0N5Y2xlKG1vZCwgdHJhY2VkLCBwcm9jZXNzZWQpIHsKKyAgICAgICAgICAgIHZhciBpZCA9
IG1vZC5tYXAuaWQ7CisKKyAgICAgICAgICAgIGlmIChtb2QuZXJyb3IpIHsKKyAgICAgICAgICAg
ICAgICBtb2QuZW1pdCgnZXJyb3InLCBtb2QuZXJyb3IpOworICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICB0cmFjZWRbaWRdID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBlYWNo
KG1vZC5kZXBNYXBzLCBmdW5jdGlvbiAoZGVwTWFwLCBpKSB7CisgICAgICAgICAgICAgICAgICAg
IHZhciBkZXBJZCA9IGRlcE1hcC5pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlcCA9IGdl
dE93bihyZWdpc3RyeSwgZGVwSWQpOworCisgICAgICAgICAgICAgICAgICAgIC8vT25seSBmb3Jj
ZSB0aGluZ3MgdGhhdCBoYXZlIG5vdCBjb21wbGV0ZWQKKyAgICAgICAgICAgICAgICAgICAgLy9i
ZWluZyBkZWZpbmVkLCBzbyBzdGlsbCBpbiB0aGUgcmVnaXN0cnksCisgICAgICAgICAgICAgICAg
ICAgIC8vYW5kIG9ubHkgaWYgaXQgaGFzIG5vdCBiZWVuIG1hdGNoZWQgdXAKKyAgICAgICAgICAg
ICAgICAgICAgLy9pbiB0aGUgbW9kdWxlIGFscmVhZHkuCisgICAgICAgICAgICAgICAgICAgIGlm
IChkZXAgJiYgIW1vZC5kZXBNYXRjaGVkW2ldICYmICFwcm9jZXNzZWRbZGVwSWRdKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoZ2V0T3duKHRyYWNlZCwgZGVwSWQpKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbW9kLmRlZmluZURlcChpLCBkZWZpbmVkW2RlcElkXSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kLmNoZWNrKCk7IC8vcGFzcyBmYWxzZT8KKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWtDeWNsZShkZXAsIHRyYWNlZCwgcHJvY2Vzc2VkKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pOworICAg
ICAgICAgICAgICAgIHByb2Nlc3NlZFtpZF0gPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgZnVuY3Rpb24gY2hlY2tMb2FkZWQoKSB7CisgICAgICAgICAgICB2YXIg
bWFwLCBtb2RJZCwgZXJyLCB1c2luZ1BhdGhGYWxsYmFjaywKKyAgICAgICAgICAgICAgICB3YWl0
SW50ZXJ2YWwgPSBjb25maWcud2FpdFNlY29uZHMgKiAxMDAwLAorICAgICAgICAgICAgICAgIC8v
SXQgaXMgcG9zc2libGUgdG8gZGlzYWJsZSB0aGUgd2FpdCBpbnRlcnZhbCBieSB1c2luZyB3YWl0
U2Vjb25kcyBvZiAwLgorICAgICAgICAgICAgICAgIGV4cGlyZWQgPSB3YWl0SW50ZXJ2YWwgJiYg
KGNvbnRleHQuc3RhcnRUaW1lICsgd2FpdEludGVydmFsKSA8IG5ldyBEYXRlKCkuZ2V0VGltZSgp
LAorICAgICAgICAgICAgICAgIG5vTG9hZHMgPSBbXSwKKyAgICAgICAgICAgICAgICByZXFDYWxs
cyA9IFtdLAorICAgICAgICAgICAgICAgIHN0aWxsTG9hZGluZyA9IGZhbHNlLAorICAgICAgICAg
ICAgICAgIG5lZWRDeWNsZUNoZWNrID0gdHJ1ZTsKKworICAgICAgICAgICAgLy9EbyBub3QgYm90
aGVyIGlmIHRoaXMgY2FsbCB3YXMgYSByZXN1bHQgb2YgYSBjeWNsZSBicmVhay4KKyAgICAgICAg
ICAgIGlmIChpbkNoZWNrTG9hZGVkKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpbkNoZWNrTG9hZGVkID0gdHJ1ZTsKKworICAgICAgICAg
ICAgLy9GaWd1cmUgb3V0IHRoZSBzdGF0ZSBvZiBhbGwgdGhlIG1vZHVsZXMuCisgICAgICAgICAg
ICBlYWNoUHJvcChyZWdpc3RyeSwgZnVuY3Rpb24gKG1vZCkgeworICAgICAgICAgICAgICAgIG1h
cCA9IG1vZC5tYXA7CisgICAgICAgICAgICAgICAgbW9kSWQgPSBtYXAuaWQ7CisKKyAgICAgICAg
ICAgICAgICAvL1NraXAgdGhpbmdzIHRoYXQgYXJlIG5vdCBlbmFibGVkIG9yIGluIGVycm9yIHN0
YXRlLgorICAgICAgICAgICAgICAgIGlmICghbW9kLmVuYWJsZWQpIHsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICgh
bWFwLmlzRGVmaW5lKSB7CisgICAgICAgICAgICAgICAgICAgIHJlcUNhbGxzLnB1c2gobW9kKTsK
KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoIW1vZC5lcnJvcikgewor
ICAgICAgICAgICAgICAgICAgICAvL0lmIHRoZSBtb2R1bGUgc2hvdWxkIGJlIGV4ZWN1dGVkLCBh
bmQgaXQgaGFzIG5vdAorICAgICAgICAgICAgICAgICAgICAvL2JlZW4gaW5pdGVkIGFuZCB0aW1l
IGlzIHVwLCByZW1lbWJlciBpdC4KKyAgICAgICAgICAgICAgICAgICAgaWYgKCFtb2QuaW5pdGVk
ICYmIGV4cGlyZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNQYXRoRmFsbGJh
Y2sobW9kSWQpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNpbmdQYXRoRmFsbGJh
Y2sgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0aWxsTG9hZGluZyA9IHRy
dWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5vTG9hZHMucHVzaChtb2RJZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmVtb3ZlU2NyaXB0KG1vZElkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIGlmICghbW9kLmluaXRlZCAmJiBtb2QuZmV0Y2hlZCAmJiBt
YXAuaXNEZWZpbmUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0aWxsTG9hZGluZyA9IHRy
dWU7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1hcC5wcmVmaXgpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvL05vIHJlYXNvbiB0byBrZWVwIGxvb2tpbmcgZm9yIHVuZmlu
aXNoZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2xvYWRpbmcuIElmIHRoZSBvbmx5
IHN0aWxsTG9hZGluZyBpcyBhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9wbHVnaW4g
cmVzb3VyY2UgdGhvdWdoLCBrZWVwIGdvaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vYmVjYXVzZSBpdCBtYXkgYmUgdGhhdCBhIHBsdWdpbiByZXNvdXJjZQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vaXMgd2FpdGluZyBvbiBhIG5vbi1wbHVnaW4gY3ljbGUuCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChuZWVkQ3ljbGVDaGVjayA9IGZhbHNlKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICBpZiAoZXhwaXJlZCAm
JiBub0xvYWRzLmxlbmd0aCkgeworICAgICAgICAgICAgICAgIC8vSWYgd2FpdCB0aW1lIGV4cGly
ZWQsIHRocm93IGVycm9yIG9mIHVubG9hZGVkIG1vZHVsZXMuCisgICAgICAgICAgICAgICAgZXJy
ID0gbWFrZUVycm9yKCd0aW1lb3V0JywgJ0xvYWQgdGltZW91dCBmb3IgbW9kdWxlczogJyArIG5v
TG9hZHMsIG51bGwsIG5vTG9hZHMpOworICAgICAgICAgICAgICAgIGVyci5jb250ZXh0TmFtZSA9
IGNvbnRleHQuY29udGV4dE5hbWU7CisgICAgICAgICAgICAgICAgcmV0dXJuIG9uRXJyb3IoZXJy
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy9Ob3QgZXhwaXJlZCwgY2hlY2sgZm9y
IGEgY3ljbGUuCisgICAgICAgICAgICBpZiAobmVlZEN5Y2xlQ2hlY2spIHsKKyAgICAgICAgICAg
ICAgICBlYWNoKHJlcUNhbGxzLCBmdW5jdGlvbiAobW9kKSB7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrQ3ljbGUobW9kLCB7fSwge30pOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAvL0lmIHN0aWxsIHdhaXRpbmcgb24gbG9hZHMsIGFuZCB0aGUg
d2FpdGluZyBsb2FkIGlzIHNvbWV0aGluZworICAgICAgICAgICAgLy9vdGhlciB0aGFuIGEgcGx1
Z2luIHJlc291cmNlLCBvciB0aGVyZSBhcmUgc3RpbGwgb3V0c3RhbmRpbmcKKyAgICAgICAgICAg
IC8vc2NyaXB0cywgdGhlbiBqdXN0IHRyeSBiYWNrIGxhdGVyLgorICAgICAgICAgICAgaWYgKCgh
ZXhwaXJlZCB8fCB1c2luZ1BhdGhGYWxsYmFjaykgJiYgc3RpbGxMb2FkaW5nKSB7CisgICAgICAg
ICAgICAgICAgLy9Tb21ldGhpbmcgaXMgc3RpbGwgd2FpdGluZyB0byBsb2FkLiBXYWl0IGZvciBp
dCwgYnV0IG9ubHkKKyAgICAgICAgICAgICAgICAvL2lmIGEgdGltZW91dCBpcyBub3QgYWxyZWFk
eSBpbiBlZmZlY3QuCisgICAgICAgICAgICAgICAgaWYgKChpc0Jyb3dzZXIgfHwgaXNXZWJXb3Jr
ZXIpICYmICFjaGVja0xvYWRlZFRpbWVvdXRJZCkgeworICAgICAgICAgICAgICAgICAgICBjaGVj
a0xvYWRlZFRpbWVvdXRJZCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgY2hlY2tMb2FkZWRUaW1lb3V0SWQgPSAwOworICAgICAgICAgICAgICAgICAg
ICAgICAgY2hlY2tMb2FkZWQoKTsKKyAgICAgICAgICAgICAgICAgICAgfSwgNTApOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaW5DaGVja0xvYWRlZCA9
IGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgTW9kdWxlID0gZnVuY3Rpb24gKG1hcCkgewor
ICAgICAgICAgICAgdGhpcy5ldmVudHMgPSBnZXRPd24odW5kZWZFdmVudHMsIG1hcC5pZCkgfHwg
e307CisgICAgICAgICAgICB0aGlzLm1hcCA9IG1hcDsKKyAgICAgICAgICAgIHRoaXMuc2hpbSA9
IGdldE93bihjb25maWcuc2hpbSwgbWFwLmlkKTsKKyAgICAgICAgICAgIHRoaXMuZGVwRXhwb3J0
cyA9IFtdOworICAgICAgICAgICAgdGhpcy5kZXBNYXBzID0gW107CisgICAgICAgICAgICB0aGlz
LmRlcE1hdGNoZWQgPSBbXTsKKyAgICAgICAgICAgIHRoaXMucGx1Z2luTWFwcyA9IHt9OworICAg
ICAgICAgICAgdGhpcy5kZXBDb3VudCA9IDA7CisKKyAgICAgICAgICAgIC8qIHRoaXMuZXhwb3J0
cyB0aGlzLmZhY3RvcnkKKyAgICAgICAgICAgICAgIHRoaXMuZGVwTWFwcyA9IFtdLAorICAgICAg
ICAgICAgICAgdGhpcy5lbmFibGVkLCB0aGlzLmZldGNoZWQKKyAgICAgICAgICAgICovCisgICAg
ICAgIH07CisKKyAgICAgICAgTW9kdWxlLnByb3RvdHlwZSA9IHsKKyAgICAgICAgICAgIGluaXQ6
IGZ1bmN0aW9uIChkZXBNYXBzLCBmYWN0b3J5LCBlcnJiYWNrLCBvcHRpb25zKSB7CisgICAgICAg
ICAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307CisKKyAgICAgICAgICAgICAgICAvL0Rv
IG5vdCBkbyBtb3JlIGluaXRzIGlmIGFscmVhZHkgZG9uZS4gQ2FuIGhhcHBlbiBpZiB0aGVyZQor
ICAgICAgICAgICAgICAgIC8vYXJlIG11bHRpcGxlIGRlZmluZSBjYWxscyBmb3IgdGhlIHNhbWUg
bW9kdWxlLiBUaGF0IGlzIG5vdAorICAgICAgICAgICAgICAgIC8vYSBub3JtYWwsIGNvbW1vbiBj
YXNlLCBidXQgaXQgaXMgYWxzbyBub3QgdW5leHBlY3RlZC4KKyAgICAgICAgICAgICAgICBpZiAo
dGhpcy5pbml0ZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgIHRoaXMuZmFjdG9yeSA9IGZhY3Rvcnk7CisKKyAgICAg
ICAgICAgICAgICBpZiAoZXJyYmFjaykgeworICAgICAgICAgICAgICAgICAgICAvL1JlZ2lzdGVy
IGZvciBlcnJvcnMgb24gdGhpcyBtb2R1bGUuCisgICAgICAgICAgICAgICAgICAgIHRoaXMub24o
J2Vycm9yJywgZXJyYmFjayk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmV2ZW50
cy5lcnJvcikgeworICAgICAgICAgICAgICAgICAgICAvL0lmIG5vIGVycmJhY2sgYWxyZWFkeSwg
YnV0IHRoZXJlIGFyZSBlcnJvciBsaXN0ZW5lcnMKKyAgICAgICAgICAgICAgICAgICAgLy9vbiB0
aGlzIG1vZHVsZSwgc2V0IHVwIGFuIGVycmJhY2sgdG8gcGFzcyB0byB0aGUgZGVwcy4KKyAgICAg
ICAgICAgICAgICAgICAgZXJyYmFjayA9IGJpbmQodGhpcywgZnVuY3Rpb24gKGVycikgeworICAg
ICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIGVycik7CisgICAgICAgICAg
ICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vRG8g
YSBjb3B5IG9mIHRoZSBkZXBlbmRlbmN5IGFycmF5LCBzbyB0aGF0CisgICAgICAgICAgICAgICAg
Ly9zb3VyY2UgaW5wdXRzIGFyZSBub3QgbW9kaWZpZWQuIEZvciBleGFtcGxlCisgICAgICAgICAg
ICAgICAgLy8ic2hpbSIgZGVwcyBhcmUgcGFzc2VkIGluIGhlcmUgZGlyZWN0bHksIGFuZAorICAg
ICAgICAgICAgICAgIC8vZG9pbmcgYSBkaXJlY3QgbW9kaWZpY2F0aW9uIG9mIHRoZSBkZXBNYXBz
IGFycmF5CisgICAgICAgICAgICAgICAgLy93b3VsZCBhZmZlY3QgdGhhdCBjb25maWcuCisgICAg
ICAgICAgICAgICAgdGhpcy5kZXBNYXBzID0gZGVwTWFwcyAmJiBkZXBNYXBzLnNsaWNlKDApOwor
CisgICAgICAgICAgICAgICAgdGhpcy5lcnJiYWNrID0gZXJyYmFjazsKKworICAgICAgICAgICAg
ICAgIC8vSW5kaWNhdGUgdGhpcyBtb2R1bGUgaGFzIGJlIGluaXRpYWxpemVkCisgICAgICAgICAg
ICAgICAgdGhpcy5pbml0ZWQgPSB0cnVlOworCisgICAgICAgICAgICAgICAgdGhpcy5pZ25vcmUg
PSBvcHRpb25zLmlnbm9yZTsKKworICAgICAgICAgICAgICAgIC8vQ291bGQgaGF2ZSBvcHRpb24g
dG8gaW5pdCB0aGlzIG1vZHVsZSBpbiBlbmFibGVkIG1vZGUsCisgICAgICAgICAgICAgICAgLy9v
ciBjb3VsZCBoYXZlIGJlZW4gcHJldmlvdXNseSBtYXJrZWQgYXMgZW5hYmxlZC4gSG93ZXZlciwK
KyAgICAgICAgICAgICAgICAvL3RoZSBkZXBlbmRlbmNpZXMgYXJlIG5vdCBrbm93biB1bnRpbCBp
bml0IGlzIGNhbGxlZC4gU28KKyAgICAgICAgICAgICAgICAvL2lmIGVuYWJsZWQgcHJldmlvdXNs
eSwgbm93IHRyaWdnZXIgZGVwZW5kZW5jaWVzIGFzIGVuYWJsZWQuCisgICAgICAgICAgICAgICAg
aWYgKG9wdGlvbnMuZW5hYmxlZCB8fCB0aGlzLmVuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICAg
ICAgLy9FbmFibGUgdGhpcyBtb2R1bGUgYW5kIGRlcGVuZGVuY2llcy4KKyAgICAgICAgICAgICAg
ICAgICAgLy9XaWxsIGNhbGwgdGhpcy5jaGVjaygpCisgICAgICAgICAgICAgICAgICAgIHRoaXMu
ZW5hYmxlKCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
dGhpcy5jaGVjaygpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sCisKKyAgICAg
ICAgICAgIGRlZmluZURlcDogZnVuY3Rpb24gKGksIGRlcEV4cG9ydHMpIHsKKyAgICAgICAgICAg
ICAgICAvL0JlY2F1c2Ugb2YgY3ljbGVzLCBkZWZpbmVkIGNhbGxiYWNrIGZvciBhIGdpdmVuCisg
ICAgICAgICAgICAgICAgLy9leHBvcnQgY2FuIGJlIGNhbGxlZCBtb3JlIHRoYW4gb25jZS4KKyAg
ICAgICAgICAgICAgICBpZiAoIXRoaXMuZGVwTWF0Y2hlZFtpXSkgeworICAgICAgICAgICAgICAg
ICAgICB0aGlzLmRlcE1hdGNoZWRbaV0gPSB0cnVlOworICAgICAgICAgICAgICAgICAgICB0aGlz
LmRlcENvdW50IC09IDE7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVwRXhwb3J0c1tpXSA9
IGRlcEV4cG9ydHM7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwKKworICAgICAg
ICAgICAgZmV0Y2g6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5mZXRj
aGVkKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgdGhpcy5mZXRjaGVkID0gdHJ1ZTsKKworICAgICAgICAgICAgICAgIGNv
bnRleHQuc3RhcnRUaW1lID0gKG5ldyBEYXRlKCkpLmdldFRpbWUoKTsKKworICAgICAgICAgICAg
ICAgIHZhciBtYXAgPSB0aGlzLm1hcDsKKworICAgICAgICAgICAgICAgIC8vSWYgdGhlIG1hbmFn
ZXIgaXMgZm9yIGEgcGx1Z2luIG1hbmFnZWQgcmVzb3VyY2UsCisgICAgICAgICAgICAgICAgLy9h
c2sgdGhlIHBsdWdpbiB0byBsb2FkIGl0IG5vdy4KKyAgICAgICAgICAgICAgICBpZiAodGhpcy5z
aGltKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQubWFrZVJlcXVpcmUodGhpcy5tYXAs
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZUJ1aWxkQ2FsbGJhY2s6IHRydWUKKyAg
ICAgICAgICAgICAgICAgICAgfSkodGhpcy5zaGltLmRlcHMgfHwgW10sIGJpbmQodGhpcywgZnVu
Y3Rpb24gKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hcC5wcmVmaXggPyB0
aGlzLmNhbGxQbHVnaW4oKSA6IHRoaXMubG9hZCgpOworICAgICAgICAgICAgICAgICAgICB9KSk7
CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy9SZWd1bGFy
IGRlcGVuZGVuY3kuCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXAucHJlZml4ID8gdGhp
cy5jYWxsUGx1Z2luKCkgOiB0aGlzLmxvYWQoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9LAorCisgICAgICAgICAgICBsb2FkOiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAg
ICAgdmFyIHVybCA9IHRoaXMubWFwLnVybDsKKworICAgICAgICAgICAgICAgIC8vUmVndWxhciBk
ZXBlbmRlbmN5LgorICAgICAgICAgICAgICAgIGlmICghdXJsRmV0Y2hlZFt1cmxdKSB7CisgICAg
ICAgICAgICAgICAgICAgIHVybEZldGNoZWRbdXJsXSA9IHRydWU7CisgICAgICAgICAgICAgICAg
ICAgIGNvbnRleHQubG9hZCh0aGlzLm1hcC5pZCwgdXJsKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9LAorCisgICAgICAgICAgICAvKioKKyAgICAgICAgICAgICAqIENoZWNrcyBp
cyB0aGUgbW9kdWxlIGlzIHJlYWR5IHRvIGRlZmluZSBpdHNlbGYsIGFuZCBpZiBzbywKKyAgICAg
ICAgICAgICAqIGRlZmluZSBpdC4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgY2hlY2s6
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZW5hYmxlZCB8fCB0aGlz
LmVuYWJsaW5nKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICB2YXIgZXJyLCBjanNNb2R1bGUsCisgICAgICAgICAgICAg
ICAgICAgIGlkID0gdGhpcy5tYXAuaWQsCisgICAgICAgICAgICAgICAgICAgIGRlcEV4cG9ydHMg
PSB0aGlzLmRlcEV4cG9ydHMsCisgICAgICAgICAgICAgICAgICAgIGV4cG9ydHMgPSB0aGlzLmV4
cG9ydHMsCisgICAgICAgICAgICAgICAgICAgIGZhY3RvcnkgPSB0aGlzLmZhY3Rvcnk7CisKKyAg
ICAgICAgICAgICAgICBpZiAoIXRoaXMuaW5pdGVkKSB7CisgICAgICAgICAgICAgICAgICAgIHRo
aXMuZmV0Y2goKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZXJyb3IpIHsKKyAg
ICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIHRoaXMuZXJyb3IpOworICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuZGVmaW5pbmcpIHsKKyAgICAgICAgICAgICAgICAg
ICAgLy9UaGUgZmFjdG9yeSBjb3VsZCB0cmlnZ2VyIGFub3RoZXIgcmVxdWlyZSBjYWxsCisgICAg
ICAgICAgICAgICAgICAgIC8vdGhhdCB3b3VsZCByZXN1bHQgaW4gY2hlY2tpbmcgdGhpcyBtb2R1
bGUgdG8KKyAgICAgICAgICAgICAgICAgICAgLy9kZWZpbmUgaXRzZWxmIGFnYWluLiBJZiBhbHJl
YWR5IGluIHRoZSBwcm9jZXNzCisgICAgICAgICAgICAgICAgICAgIC8vb2YgZG9pbmcgdGhhdCwg
c2tpcCB0aGlzIHdvcmsuCisgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVmaW5pbmcgPSB0cnVl
OworCisgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmRlcENvdW50IDwgMSAmJiAhdGhpcy5k
ZWZpbmVkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNGdW5jdGlvbihmYWN0b3J5
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vSWYgdGhlcmUgaXMgYW4gZXJyb3Ig
bGlzdGVuZXIsIGZhdm9yIHBhc3NpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3Rv
IHRoYXQgaW5zdGVhZCBvZiB0aHJvd2luZyBhbiBlcnJvci4KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAodGhpcy5ldmVudHMuZXJyb3IpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9y
dHMgPSBjb250ZXh0LmV4ZWNDYihpZCwgZmFjdG9yeSwgZGVwRXhwb3J0cywgZXhwb3J0cyk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGVyciA9IGU7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBleHBvcnRzID0gY29udGV4dC5leGVjQ2IoaWQsIGZh
Y3RvcnksIGRlcEV4cG9ydHMsIGV4cG9ydHMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hcC5pc0RlZmluZSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0lmIHNldHRpbmcgZXhwb3J0cyB2
aWEgJ21vZHVsZScgaXMgaW4gcGxheSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly9mYXZvciB0aGF0IG92ZXIgcmV0dXJuIHZhbHVlIGFuZCBleHBvcnRzLiBBZnRlciB0aGF0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2Zhdm9yIGEgbm9uLXVuZGVmaW5lZCBy
ZXR1cm4gdmFsdWUgb3ZlciBleHBvcnRzIHVzZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2pzTW9kdWxlID0gdGhpcy5tb2R1bGU7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChjanNNb2R1bGUgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjanNNb2R1bGUuZXhwb3J0cyAhPT0gdW5kZWZpbmVkICYmCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9NYWtlIHN1cmUgaXQgaXMgbm90IGFscmVhZHkg
dGhlIGV4cG9ydHMgdmFsdWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjanNNb2R1bGUuZXhwb3J0cyAhPT0gdGhpcy5leHBvcnRzKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBleHBvcnRzID0gY2pzTW9kdWxlLmV4cG9ydHM7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZXhwb3J0cyA9PT0gdW5kZWZpbmVk
ICYmIHRoaXMudXNpbmdFeHBvcnRzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvL2V4cG9ydHMgYWxyZWFkeSBzZXQgdGhlIGRlZmluZWQgdmFsdWUuCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBleHBvcnRzID0gdGhpcy5leHBvcnRzOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycikgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlcnIucmVxdWlyZU1hcCA9IHRoaXMubWFwOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlcnIucmVxdWlyZU1vZHVsZXMgPSBbdGhpcy5tYXAuaWRd
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIucmVxdWlyZVR5cGUgPSAnZGVm
aW5lJzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9uRXJyb3IoKHRo
aXMuZXJyb3IgPSBlcnIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly9KdXN0IGEgbGl0ZXJhbCB2YWx1ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9y
dHMgPSBmYWN0b3J5OworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgICAgICAgICB0aGlzLmV4cG9ydHMgPSBleHBvcnRzOworCisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAodGhpcy5tYXAuaXNEZWZpbmUgJiYgIXRoaXMuaWdub3JlKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZGVmaW5lZFtpZF0gPSBleHBvcnRzOworCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHJlcS5vblJlc291cmNlTG9hZCkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXEub25SZXNvdXJjZUxvYWQoY29udGV4dCwgdGhpcy5tYXAsIHRo
aXMuZGVwTWFwcyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAvL0NsZWFuIHVwCisgICAg
ICAgICAgICAgICAgICAgICAgICBkZWxldGUgcmVnaXN0cnlbaWRdOworCisgICAgICAgICAgICAg
ICAgICAgICAgICB0aGlzLmRlZmluZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICAgICAgLy9GaW5pc2hlZCB0aGUgZGVmaW5lIHN0YWdlLiBBbGxvdyBj
YWxsaW5nIGNoZWNrIGFnYWluCisgICAgICAgICAgICAgICAgICAgIC8vdG8gYWxsb3cgZGVmaW5l
IG5vdGlmaWNhdGlvbnMgYmVsb3cgaW4gdGhlIGNhc2Ugb2YgYQorICAgICAgICAgICAgICAgICAg
ICAvL2N5Y2xlLgorICAgICAgICAgICAgICAgICAgICB0aGlzLmRlZmluaW5nID0gZmFsc2U7CisK
KyAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZGVmaW5lZCAmJiAhdGhpcy5kZWZpbmVFbWl0
dGVkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlZmluZUVtaXR0ZWQgPSB0cnVl
OworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdkZWZpbmVkJywgdGhpcy5leHBv
cnRzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVmaW5lRW1pdENvbXBsZXRlID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfSwKKworICAgICAgICAgICAgY2FsbFBsdWdpbjogZnVuY3Rpb24gKCkgeworICAgICAg
ICAgICAgICAgIHZhciBtYXAgPSB0aGlzLm1hcCwKKyAgICAgICAgICAgICAgICAgICAgaWQgPSBt
YXAuaWQsCisgICAgICAgICAgICAgICAgICAgIC8vTWFwIGFscmVhZHkgbm9ybWFsaXplZCB0aGUg
cHJlZml4LgorICAgICAgICAgICAgICAgICAgICBwbHVnaW5NYXAgPSBtYWtlTW9kdWxlTWFwKG1h
cC5wcmVmaXgpOworCisgICAgICAgICAgICAgICAgLy9NYXJrIHRoaXMgYXMgYSBkZXBlbmRlbmN5
IGZvciB0aGlzIHBsdWdpbiwgc28gaXQKKyAgICAgICAgICAgICAgICAvL2NhbiBiZSB0cmFjZWQg
Zm9yIGN5Y2xlcy4KKyAgICAgICAgICAgICAgICB0aGlzLmRlcE1hcHMucHVzaChwbHVnaW5NYXAp
OworCisgICAgICAgICAgICAgICAgb24ocGx1Z2luTWFwLCAnZGVmaW5lZCcsIGJpbmQodGhpcywg
ZnVuY3Rpb24gKHBsdWdpbikgeworICAgICAgICAgICAgICAgICAgICB2YXIgbG9hZCwgbm9ybWFs
aXplZE1hcCwgbm9ybWFsaXplZE1vZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSB0
aGlzLm1hcC5uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50TmFtZSA9IHRoaXMu
bWFwLnBhcmVudE1hcCA/IHRoaXMubWFwLnBhcmVudE1hcC5uYW1lIDogbnVsbCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGxvY2FsUmVxdWlyZSA9IGNvbnRleHQubWFrZVJlcXVpcmUobWFwLnBh
cmVudE1hcCwgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZUJ1aWxkQ2FsbGJh
Y2s6IHRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2tpcE1hcDogdHJ1ZQorICAg
ICAgICAgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAgICAgICAgLy9JZiBjdXJy
ZW50IG1hcCBpcyBub3Qgbm9ybWFsaXplZCwgd2FpdCBmb3IgdGhhdAorICAgICAgICAgICAgICAg
ICAgICAvL25vcm1hbGl6ZWQgbmFtZSB0byBsb2FkIGluc3RlYWQgb2YgY29udGludWluZy4KKyAg
ICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubWFwLnVubm9ybWFsaXplZCkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgLy9Ob3JtYWxpemUgdGhlIElEIGlmIHRoZSBwbHVnaW4gYWxsb3dzIGl0
LgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBsdWdpbi5ub3JtYWxpemUpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gcGx1Z2luLm5vcm1hbGl6ZShuYW1lLCBmdW5j
dGlvbiAobmFtZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9y
bWFsaXplKG5hbWUsIHBhcmVudE5hbWUsIHRydWUpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0pIHx8ICcnOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgICAgICAgICAvL3ByZWZpeCBhbmQgbmFtZSBzaG91bGQgYWxyZWFkeSBiZSBub3JtYWxpemVk
LCBubyBuZWVkCisgICAgICAgICAgICAgICAgICAgICAgICAvL2ZvciBhcHBseWluZyBtYXAgY29u
ZmlnIGFnYWluIGVpdGhlci4KKyAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRNYXAg
PSBtYWtlTW9kdWxlTWFwKG1hcC5wcmVmaXggKyAnIScgKyBuYW1lLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXAucGFyZW50TWFw
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9uKG5vcm1hbGl6ZWRNYXAsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJ2RlZmluZWQnLCBiaW5kKHRoaXMsIGZ1bmN0aW9uICh2YWx1ZSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluaXQoW10sIGZ1bmN0aW9u
ICgpIHsgcmV0dXJuIHZhbHVlOyB9LCBudWxsLCB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBlbmFibGVkOiB0cnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWdub3JlOiB0cnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKTsKKworICAgICAgICAgICAgICAgICAgICAg
ICAgbm9ybWFsaXplZE1vZCA9IGdldE93bihyZWdpc3RyeSwgbm9ybWFsaXplZE1hcC5pZCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9ybWFsaXplZE1vZCkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vTWFyayB0aGlzIGFzIGEgZGVwZW5kZW5jeSBmb3IgdGhpcyBwbHVn
aW4sIHNvIGl0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9jYW4gYmUgdHJhY2VkIGZv
ciBjeWNsZXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXBNYXBzLnB1c2go
bm9ybWFsaXplZE1hcCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5l
dmVudHMuZXJyb3IpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXpl
ZE1vZC5vbignZXJyb3InLCBiaW5kKHRoaXMsIGZ1bmN0aW9uIChlcnIpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCBlcnIpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRNb2QuZW5hYmxlKCk7
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGxvYWQg
PSBiaW5kKHRoaXMsIGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
dGhpcy5pbml0KFtdLCBmdW5jdGlvbiAoKSB7IHJldHVybiB2YWx1ZTsgfSwgbnVsbCwgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZWQ6IHRydWUKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgICAgICAg
ICBsb2FkLmVycm9yID0gYmluZCh0aGlzLCBmdW5jdGlvbiAoZXJyKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICB0aGlzLmluaXRlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICB0
aGlzLmVycm9yID0gZXJyOworICAgICAgICAgICAgICAgICAgICAgICAgZXJyLnJlcXVpcmVNb2R1
bGVzID0gW2lkXTsKKworICAgICAgICAgICAgICAgICAgICAgICAgLy9SZW1vdmUgdGVtcCB1bm5v
cm1hbGl6ZWQgbW9kdWxlcyBmb3IgdGhpcyBtb2R1bGUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAvL3NpbmNlIHRoZXkgd2lsbCBuZXZlciBiZSByZXNvbHZlZCBvdGhlcndpc2Ugbm93LgorICAg
ICAgICAgICAgICAgICAgICAgICAgZWFjaFByb3AocmVnaXN0cnksIGZ1bmN0aW9uIChtb2QpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobW9kLm1hcC5pZC5pbmRleE9mKGlkICsg
J191bm5vcm1hbGl6ZWQnKSA9PT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjbGVhblJlZ2lzdHJ5KG1vZC5tYXAuaWQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAgICAgICAgICAg
ICBvbkVycm9yKGVycik7CisgICAgICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAg
ICAgICAgIC8vQWxsb3cgcGx1Z2lucyB0byBsb2FkIG90aGVyIGNvZGUgd2l0aG91dCBoYXZpbmcg
dG8ga25vdyB0aGUKKyAgICAgICAgICAgICAgICAgICAgLy9jb250ZXh0IG9yIGhvdyB0byAnY29t
cGxldGUnIHRoZSBsb2FkLgorICAgICAgICAgICAgICAgICAgICBsb2FkLmZyb21UZXh0ID0gYmlu
ZCh0aGlzLCBmdW5jdGlvbiAodGV4dCwgdGV4dEFsdCkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgLypqc2xpbnQgZXZpbDogdHJ1ZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1v
ZHVsZU5hbWUgPSBtYXAubmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVN
YXAgPSBtYWtlTW9kdWxlTWFwKG1vZHVsZU5hbWUpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGhhc0ludGVyYWN0aXZlID0gdXNlSW50ZXJhY3RpdmU7CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vQXMgb2YgMi4xLjAsIHN1cHBvcnQganVzdCBwYXNzaW5nIHRoZSB0ZXh0LCB0byBy
ZWluZm9yY2UKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vZnJvbVRleHQgb25seSBiZWluZyBj
YWxsZWQgb25jZSBwZXIgcmVzb3VyY2UuIFN0aWxsCisgICAgICAgICAgICAgICAgICAgICAgICAv
L3N1cHBvcnQgb2xkIHN0eWxlIG9mIHBhc3NpbmcgbW9kdWxlTmFtZSBidXQgZGlzY2FyZAorICAg
ICAgICAgICAgICAgICAgICAgICAgLy90aGF0IG1vZHVsZU5hbWUgaW4gZmF2b3Igb2YgdGhlIGlu
dGVybmFsIHJlZi4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0QWx0KSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCA9IHRleHRBbHQ7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vVHVybiBvZmYgaW50ZXJhY3Rp
dmUgc2NyaXB0IG1hdGNoaW5nIGZvciBJRSBmb3IgYW55IGRlZmluZQorICAgICAgICAgICAgICAg
ICAgICAgICAgLy9jYWxscyBpbiB0aGUgdGV4dCwgdGhlbiB0dXJuIGl0IGJhY2sgb24gYXQgdGhl
IGVuZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNJbnRlcmFjdGl2ZSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVzZUludGVyYWN0aXZlID0gZmFsc2U7CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vUHJpbWUgdGhl
IHN5c3RlbSBieSBjcmVhdGluZyBhIG1vZHVsZSBpbnN0YW5jZSBmb3IKKyAgICAgICAgICAgICAg
ICAgICAgICAgIC8vaXQuCisgICAgICAgICAgICAgICAgICAgICAgICBnZXRNb2R1bGUobW9kdWxl
TWFwKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgLy9UcmFuc2ZlciBhbnkgY29uZmlnIHRv
IHRoaXMgb3RoZXIgbW9kdWxlLgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1Byb3Ao
Y29uZmlnLmNvbmZpZywgaWQpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmln
LmNvbmZpZ1ttb2R1bGVOYW1lXSA9IGNvbmZpZy5jb25maWdbaWRdOworICAgICAgICAgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlcS5leGVjKHRleHQpOworICAgICAgICAgICAgICAgICAgICAgICAg
fSBjYXRjaCAoZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJv
cignZnJvbVRleHQgZXZhbCBmb3IgJyArIG1vZHVsZU5hbWUgKworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAnIGZhaWxlZDogJyArIGUpOworICAgICAgICAgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzSW50ZXJhY3Rp
dmUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VJbnRlcmFjdGl2ZSA9IHRydWU7
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8v
TWFyayB0aGlzIGFzIGEgZGVwZW5kZW5jeSBmb3IgdGhlIHBsdWdpbgorICAgICAgICAgICAgICAg
ICAgICAgICAgLy9yZXNvdXJjZQorICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXBNYXBz
LnB1c2gobW9kdWxlTWFwKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgLy9TdXBwb3J0IGFu
b255bW91cyBtb2R1bGVzLgorICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5jb21wbGV0
ZUxvYWQobW9kdWxlTmFtZSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vQmluZCB0aGUg
dmFsdWUgb2YgdGhhdCBtb2R1bGUgdG8gdGhlIHZhbHVlIGZvciB0aGlzCisgICAgICAgICAgICAg
ICAgICAgICAgICAvL3Jlc291cmNlIElELgorICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxS
ZXF1aXJlKFttb2R1bGVOYW1lXSwgbG9hZCk7CisgICAgICAgICAgICAgICAgICAgIH0pOworCisg
ICAgICAgICAgICAgICAgICAgIC8vVXNlIHBhcmVudE5hbWUgaGVyZSBzaW5jZSB0aGUgcGx1Z2lu
J3MgbmFtZSBpcyBub3QgcmVsaWFibGUsCisgICAgICAgICAgICAgICAgICAgIC8vY291bGQgYmUg
c29tZSB3ZWlyZCBzdHJpbmcgd2l0aCBubyBwYXRoIHRoYXQgYWN0dWFsbHkgd2FudHMgdG8KKyAg
ICAgICAgICAgICAgICAgICAgLy9yZWZlcmVuY2UgdGhlIHBhcmVudE5hbWUncyBwYXRoLgorICAg
ICAgICAgICAgICAgICAgICBwbHVnaW4ubG9hZChtYXAubmFtZSwgbG9jYWxSZXF1aXJlLCBsb2Fk
LCBjb25maWcpOworICAgICAgICAgICAgICAgIH0pKTsKKworICAgICAgICAgICAgICAgIGNvbnRl
eHQuZW5hYmxlKHBsdWdpbk1hcCwgdGhpcyk7CisgICAgICAgICAgICAgICAgdGhpcy5wbHVnaW5N
YXBzW3BsdWdpbk1hcC5pZF0gPSBwbHVnaW5NYXA7CisgICAgICAgICAgICB9LAorCisgICAgICAg
ICAgICBlbmFibGU6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICB0aGlzLmVuYWJsZWQg
PSB0cnVlOworCisgICAgICAgICAgICAgICAgLy9TZXQgZmxhZyBtZW50aW9uaW5nIHRoYXQgdGhl
IG1vZHVsZSBpcyBlbmFibGluZywKKyAgICAgICAgICAgICAgICAvL3NvIHRoYXQgaW1tZWRpYXRl
IGNhbGxzIHRvIHRoZSBkZWZpbmVkIGNhbGxiYWNrcworICAgICAgICAgICAgICAgIC8vZm9yIGRl
cGVuZGVuY2llcyBkbyBub3QgdHJpZ2dlciBpbmFkdmVydGVudCBsb2FkCisgICAgICAgICAgICAg
ICAgLy93aXRoIHRoZSBkZXBDb3VudCBzdGlsbCBiZWluZyB6ZXJvLgorICAgICAgICAgICAgICAg
IHRoaXMuZW5hYmxpbmcgPSB0cnVlOworCisgICAgICAgICAgICAgICAgLy9FbmFibGUgZWFjaCBk
ZXBlbmRlbmN5CisgICAgICAgICAgICAgICAgZWFjaCh0aGlzLmRlcE1hcHMsIGJpbmQodGhpcywg
ZnVuY3Rpb24gKGRlcE1hcCwgaSkgeworICAgICAgICAgICAgICAgICAgICB2YXIgaWQsIG1vZCwg
aGFuZGxlcjsKKworICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGRlcE1hcCA9PT0gJ3N0
cmluZycpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vRGVwZW5kZW5jeSBuZWVkcyB0byBi
ZSBjb252ZXJ0ZWQgdG8gYSBkZXBNYXAKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vYW5kIHdp
cmVkIHVwIHRvIHRoaXMgbW9kdWxlLgorICAgICAgICAgICAgICAgICAgICAgICAgZGVwTWFwID0g
bWFrZU1vZHVsZU1hcChkZXBNYXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICh0aGlzLm1hcC5pc0RlZmluZSA/IHRoaXMubWFwIDogdGhpcy5tYXAucGFy
ZW50TWFwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICF0
aGlzLnNraXBNYXApOworICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXBNYXBzW2ldID0g
ZGVwTWFwOworCisgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyID0gZ2V0T3duKGhhbmRs
ZXJzLCBkZXBNYXAuaWQpOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFuZGxlcikg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVwRXhwb3J0c1tpXSA9IGhhbmRs
ZXIodGhpcyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlcENvdW50
ICs9IDE7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIG9uKGRlcE1hcCwgJ2RlZmluZWQnLCBi
aW5kKHRoaXMsIGZ1bmN0aW9uIChkZXBFeHBvcnRzKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGhpcy5kZWZpbmVEZXAoaSwgZGVwRXhwb3J0cyk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGhpcy5jaGVjaygpOworICAgICAgICAgICAgICAgICAgICAgICAgfSkpOworCisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5lcnJiYWNrKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgb24oZGVwTWFwLCAnZXJyb3InLCB0aGlzLmVycmJhY2spOworICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICAgICAgaWQgPSBkZXBNYXAuaWQ7CisgICAgICAgICAgICAgICAgICAgIG1vZCA9IHJlZ2lz
dHJ5W2lkXTsKKworICAgICAgICAgICAgICAgICAgICAvL1NraXAgc3BlY2lhbCBtb2R1bGVzIGxp
a2UgJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnCisgICAgICAgICAgICAgICAgICAgIC8v
QWxzbywgZG9uJ3QgY2FsbCBlbmFibGUgaWYgaXQgaXMgYWxyZWFkeSBlbmFibGVkLAorICAgICAg
ICAgICAgICAgICAgICAvL2ltcG9ydGFudCBpbiBjaXJjdWxhciBkZXBlbmRlbmN5IGNhc2VzLgor
ICAgICAgICAgICAgICAgICAgICBpZiAoIWhhc1Byb3AoaGFuZGxlcnMsIGlkKSAmJiBtb2QgJiYg
IW1vZC5lbmFibGVkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmVuYWJsZShk
ZXBNYXAsIHRoaXMpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSkp
OworCisgICAgICAgICAgICAgICAgLy9FbmFibGUgZWFjaCBwbHVnaW4gdGhhdCBpcyB1c2VkIGlu
CisgICAgICAgICAgICAgICAgLy9hIGRlcGVuZGVuY3kKKyAgICAgICAgICAgICAgICBlYWNoUHJv
cCh0aGlzLnBsdWdpbk1hcHMsIGJpbmQodGhpcywgZnVuY3Rpb24gKHBsdWdpbk1hcCkgeworICAg
ICAgICAgICAgICAgICAgICB2YXIgbW9kID0gZ2V0T3duKHJlZ2lzdHJ5LCBwbHVnaW5NYXAuaWQp
OworICAgICAgICAgICAgICAgICAgICBpZiAobW9kICYmICFtb2QuZW5hYmxlZCkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgY29udGV4dC5lbmFibGUocGx1Z2luTWFwLCB0aGlzKTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pKTsKKworICAgICAgICAgICAgICAg
IHRoaXMuZW5hYmxpbmcgPSBmYWxzZTsKKworICAgICAgICAgICAgICAgIHRoaXMuY2hlY2soKTsK
KyAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgIG9uOiBmdW5jdGlvbiAobmFtZSwgY2IpIHsK
KyAgICAgICAgICAgICAgICB2YXIgY2JzID0gdGhpcy5ldmVudHNbbmFtZV07CisgICAgICAgICAg
ICAgICAgaWYgKCFjYnMpIHsKKyAgICAgICAgICAgICAgICAgICAgY2JzID0gdGhpcy5ldmVudHNb
bmFtZV0gPSBbXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY2JzLnB1c2go
Y2IpOworICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgZW1pdDogZnVuY3Rpb24gKG5hbWUs
IGV2dCkgeworICAgICAgICAgICAgICAgIGVhY2godGhpcy5ldmVudHNbbmFtZV0sIGZ1bmN0aW9u
IChjYikgeworICAgICAgICAgICAgICAgICAgICBjYihldnQpOworICAgICAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgICAgIGlmIChuYW1lID09PSAnZXJyb3InKSB7CisgICAgICAgICAgICAg
ICAgICAgIC8vTm93IHRoYXQgdGhlIGVycm9yIGhhbmRsZXIgd2FzIHRyaWdnZXJlZCwgcmVtb3Zl
CisgICAgICAgICAgICAgICAgICAgIC8vdGhlIGxpc3RlbmVycywgc2luY2UgdGhpcyBicm9rZW4g
TW9kdWxlIGluc3RhbmNlCisgICAgICAgICAgICAgICAgICAgIC8vY2FuIHN0YXkgYXJvdW5kIGZv
ciBhIHdoaWxlIGluIHRoZSByZWdpc3RyeS4KKyAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRo
aXMuZXZlbnRzW25hbWVdOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfTsKKworICAgICAgICBmdW5jdGlvbiBjYWxsR2V0TW9kdWxlKGFyZ3MpIHsKKyAgICAgICAg
ICAgIC8vU2tpcCBtb2R1bGVzIGFscmVhZHkgZGVmaW5lZC4KKyAgICAgICAgICAgIGlmICghaGFz
UHJvcChkZWZpbmVkLCBhcmdzWzBdKSkgeworICAgICAgICAgICAgICAgIGdldE1vZHVsZShtYWtl
TW9kdWxlTWFwKGFyZ3NbMF0sIG51bGwsIHRydWUpKS5pbml0KGFyZ3NbMV0sIGFyZ3NbMl0pOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gcmVtb3ZlTGlzdGVu
ZXIobm9kZSwgZnVuYywgbmFtZSwgaWVOYW1lKSB7CisgICAgICAgICAgICAvL0Zhdm9yIGRldGFj
aEV2ZW50IGJlY2F1c2Ugb2YgSUU5CisgICAgICAgICAgICAvL2lzc3VlLCBzZWUgYXR0YWNoRXZl
bnQvYWRkRXZlbnRMaXN0ZW5lciBjb21tZW50IGVsc2V3aGVyZQorICAgICAgICAgICAgLy9pbiB0
aGlzIGZpbGUuCisgICAgICAgICAgICBpZiAobm9kZS5kZXRhY2hFdmVudCAmJiAhaXNPcGVyYSkg
eworICAgICAgICAgICAgICAgIC8vUHJvYmFibHkgSUUuIElmIG5vdCBpdCB3aWxsIHRocm93IGFu
IGVycm9yLCB3aGljaCB3aWxsIGJlCisgICAgICAgICAgICAgICAgLy91c2VmdWwgdG8ga25vdy4K
KyAgICAgICAgICAgICAgICBpZiAoaWVOYW1lKSB7CisgICAgICAgICAgICAgICAgICAgIG5vZGUu
ZGV0YWNoRXZlbnQoaWVOYW1lLCBmdW5jKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG5vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihuYW1l
LCBmdW5jLCBmYWxzZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvKioK
KyAgICAgICAgICogR2l2ZW4gYW4gZXZlbnQgZnJvbSBhIHNjcmlwdCBub2RlLCBnZXQgdGhlIHJl
cXVpcmVqcyBpbmZvIGZyb20gaXQsCisgICAgICAgICAqIGFuZCB0aGVuIHJlbW92ZXMgdGhlIGV2
ZW50IGxpc3RlbmVycyBvbiB0aGUgbm9kZS4KKyAgICAgICAgICogQHBhcmFtIHtFdmVudH0gZXZ0
CisgICAgICAgICAqIEByZXR1cm5zIHtPYmplY3R9CisgICAgICAgICAqLworICAgICAgICBmdW5j
dGlvbiBnZXRTY3JpcHREYXRhKGV2dCkgeworICAgICAgICAgICAgLy9Vc2luZyBjdXJyZW50VGFy
Z2V0IGluc3RlYWQgb2YgdGFyZ2V0IGZvciBGaXJlZm94IDIuMCdzIHNha2UuIE5vdAorICAgICAg
ICAgICAgLy9hbGwgb2xkIGJyb3dzZXJzIHdpbGwgYmUgc3VwcG9ydGVkLCBidXQgdGhpcyBvbmUg
d2FzIGVhc3kgZW5vdWdoCisgICAgICAgICAgICAvL3RvIHN1cHBvcnQgYW5kIHN0aWxsIG1ha2Vz
IHNlbnNlLgorICAgICAgICAgICAgdmFyIG5vZGUgPSBldnQuY3VycmVudFRhcmdldCB8fCBldnQu
c3JjRWxlbWVudDsKKworICAgICAgICAgICAgLy9SZW1vdmUgdGhlIGxpc3RlbmVycyBvbmNlIGhl
cmUuCisgICAgICAgICAgICByZW1vdmVMaXN0ZW5lcihub2RlLCBjb250ZXh0Lm9uU2NyaXB0TG9h
ZCwgJ2xvYWQnLCAnb25yZWFkeXN0YXRlY2hhbmdlJyk7CisgICAgICAgICAgICByZW1vdmVMaXN0
ZW5lcihub2RlLCBjb250ZXh0Lm9uU2NyaXB0RXJyb3IsICdlcnJvcicpOworCisgICAgICAgICAg
ICByZXR1cm4geworICAgICAgICAgICAgICAgIG5vZGU6IG5vZGUsCisgICAgICAgICAgICAgICAg
aWQ6IG5vZGUgJiYgbm9kZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtcmVxdWlyZW1vZHVsZScpCisgICAg
ICAgICAgICB9OworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gaW50YWtlRGVmaW5lcygp
IHsKKyAgICAgICAgICAgIHZhciBhcmdzOworCisgICAgICAgICAgICAvL0FueSBkZWZpbmVkIG1v
ZHVsZXMgaW4gdGhlIGdsb2JhbCBxdWV1ZSwgaW50YWtlIHRoZW0gbm93LgorICAgICAgICAgICAg
dGFrZUdsb2JhbFF1ZXVlKCk7CisKKyAgICAgICAgICAgIC8vTWFrZSBzdXJlIGFueSByZW1haW5p
bmcgZGVmUXVldWUgaXRlbXMgZ2V0IHByb3Blcmx5IHByb2Nlc3NlZC4KKyAgICAgICAgICAgIHdo
aWxlIChkZWZRdWV1ZS5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICBhcmdzID0gZGVmUXVldWUu
c2hpZnQoKTsKKyAgICAgICAgICAgICAgICBpZiAoYXJnc1swXSA9PT0gbnVsbCkgeworICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gb25FcnJvcihtYWtlRXJyb3IoJ21pc21hdGNoJywgJ01pc21h
dGNoZWQgYW5vbnltb3VzIGRlZmluZSgpIG1vZHVsZTogJyArIGFyZ3NbYXJncy5sZW5ndGggLSAx
XSkpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8vYXJn
cyBhcmUgaWQsIGRlcHMsIGZhY3RvcnkuIFNob3VsZCBiZSBub3JtYWxpemVkIGJ5IHRoZQorICAg
ICAgICAgICAgICAgICAgICAvL2RlZmluZSgpIGZ1bmN0aW9uLgorICAgICAgICAgICAgICAgICAg
ICBjYWxsR2V0TW9kdWxlKGFyZ3MpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIGNvbnRleHQgPSB7CisgICAgICAgICAgICBjb25maWc6IGNv
bmZpZywKKyAgICAgICAgICAgIGNvbnRleHROYW1lOiBjb250ZXh0TmFtZSwKKyAgICAgICAgICAg
IHJlZ2lzdHJ5OiByZWdpc3RyeSwKKyAgICAgICAgICAgIGRlZmluZWQ6IGRlZmluZWQsCisgICAg
ICAgICAgICB1cmxGZXRjaGVkOiB1cmxGZXRjaGVkLAorICAgICAgICAgICAgZGVmUXVldWU6IGRl
ZlF1ZXVlLAorICAgICAgICAgICAgTW9kdWxlOiBNb2R1bGUsCisgICAgICAgICAgICBtYWtlTW9k
dWxlTWFwOiBtYWtlTW9kdWxlTWFwLAorICAgICAgICAgICAgbmV4dFRpY2s6IHJlcS5uZXh0VGlj
aywKKworICAgICAgICAgICAgLyoqCisgICAgICAgICAgICAgKiBTZXQgYSBjb25maWd1cmF0aW9u
IGZvciB0aGUgY29udGV4dC4KKyAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjZmcgY29u
ZmlnIG9iamVjdCB0byBpbnRlZ3JhdGUuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGNv
bmZpZ3VyZTogZnVuY3Rpb24gKGNmZykgeworICAgICAgICAgICAgICAgIC8vTWFrZSBzdXJlIHRo
ZSBiYXNlVXJsIGVuZHMgaW4gYSBzbGFzaC4KKyAgICAgICAgICAgICAgICBpZiAoY2ZnLmJhc2VV
cmwpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNmZy5iYXNlVXJsLmNoYXJBdChjZmcuYmFz
ZVVybC5sZW5ndGggLSAxKSAhPT0gJy8nKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjZmcu
YmFzZVVybCArPSAnLyc7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICAvL1NhdmUgb2ZmIHRoZSBwYXRocyBhbmQgcGFja2FnZXMgc2lu
Y2UgdGhleSByZXF1aXJlIHNwZWNpYWwgcHJvY2Vzc2luZywKKyAgICAgICAgICAgICAgICAvL3Ro
ZXkgYXJlIGFkZGl0aXZlLgorICAgICAgICAgICAgICAgIHZhciBwa2dzID0gY29uZmlnLnBrZ3Ms
CisgICAgICAgICAgICAgICAgICAgIHNoaW0gPSBjb25maWcuc2hpbSwKKyAgICAgICAgICAgICAg
ICAgICAgb2JqcyA9IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhzOiB0cnVlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgY29uZmlnOiB0cnVlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgbWFwOiB0cnVlCisgICAgICAgICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgICAgICBl
YWNoUHJvcChjZmcsIGZ1bmN0aW9uICh2YWx1ZSwgcHJvcCkgeworICAgICAgICAgICAgICAgICAg
ICBpZiAob2Jqc1twcm9wXSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3AgPT09
ICdtYXAnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWl4aW4oY29uZmlnW3Byb3Bd
LCB2YWx1ZSwgdHJ1ZSwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1peGluKGNvbmZpZ1twcm9wXSwgdmFsdWUsIHRy
dWUpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnW3Byb3BdID0gdmFsdWU7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgICAg
IC8vTWVyZ2Ugc2hpbQorICAgICAgICAgICAgICAgIGlmIChjZmcuc2hpbSkgeworICAgICAgICAg
ICAgICAgICAgICBlYWNoUHJvcChjZmcuc2hpbSwgZnVuY3Rpb24gKHZhbHVlLCBpZCkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgLy9Ob3JtYWxpemUgdGhlIHN0cnVjdHVyZQorICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGlzQXJyYXkodmFsdWUpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmFsdWUgPSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcHM6
IHZhbHVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgodmFsdWUuZXhwb3J0cyB8fCB2
YWx1ZS5pbml0KSAmJiAhdmFsdWUuZXhwb3J0c0ZuKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmFsdWUuZXhwb3J0c0ZuID0gY29udGV4dC5tYWtlU2hpbUV4cG9ydHModmFsdWUpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgc2hpbVtp
ZF0gPSB2YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAg
IGNvbmZpZy5zaGltID0gc2hpbTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICAvL0FkanVzdCBwYWNrYWdlcyBpZiBuZWNlc3NhcnkuCisgICAgICAgICAgICAgICAgaWYgKGNm
Zy5wYWNrYWdlcykgeworICAgICAgICAgICAgICAgICAgICBlYWNoKGNmZy5wYWNrYWdlcywgZnVu
Y3Rpb24gKHBrZ09iaikgeworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxvY2F0aW9uOwor
CisgICAgICAgICAgICAgICAgICAgICAgICBwa2dPYmogPSB0eXBlb2YgcGtnT2JqID09PSAnc3Ry
aW5nJyA/IHsgbmFtZTogcGtnT2JqIH0gOiBwa2dPYmo7CisgICAgICAgICAgICAgICAgICAgICAg
ICBsb2NhdGlvbiA9IHBrZ09iai5sb2NhdGlvbjsKKworICAgICAgICAgICAgICAgICAgICAgICAg
Ly9DcmVhdGUgYSBicmFuZCBuZXcgb2JqZWN0IG9uIHBrZ3MsIHNpbmNlIGN1cnJlbnRQYWNrYWdl
cyBjYW4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vYmUgcGFzc2VkIGluIGFnYWluLCBhbmQg
Y29uZmlnLnBrZ3MgaXMgdGhlIGludGVybmFsIHRyYW5zZm9ybWVkCisgICAgICAgICAgICAgICAg
ICAgICAgICAvL3N0YXRlIGZvciBhbGwgcGFja2FnZSBjb25maWdzLgorICAgICAgICAgICAgICAg
ICAgICAgICAgcGtnc1twa2dPYmoubmFtZV0gPSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbmFtZTogcGtnT2JqLm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRp
b246IGxvY2F0aW9uIHx8IHBrZ09iai5uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vUmVtb3ZlIGxlYWRpbmcgZG90IGluIG1haW4sIHNvIG1haW4gcGF0aHMgYXJlIG5vcm1hbGl6
ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9hbmQgcmVtb3ZlIGFueSB0cmFpbGlu
ZyAuanMsIHNpbmNlIGRpZmZlcmVudCBwYWNrYWdlCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy9lbnZzIGhhdmUgZGlmZmVyZW50IGNvbnZlbnRpb25zOiBzb21lIHVzZSBhIG1vZHVsZSBu
YW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vc29tZSB1c2UgYSBmaWxlIG5hbWUu
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbjogKHBrZ09iai5tYWluIHx8ICdtYWlu
JykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZShjdXJyRGlyUmVn
RXhwLCAnJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZShqc1N1
ZmZpeFJlZ0V4cCwgJycpCisgICAgICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAg
ICAgICAgICB9KTsKKworICAgICAgICAgICAgICAgICAgICAvL0RvbmUgd2l0aCBtb2RpZmljYXRp
b25zLCBhc3NpbmcgcGFja2FnZXMgYmFjayB0byBjb250ZXh0IGNvbmZpZworICAgICAgICAgICAg
ICAgICAgICBjb25maWcucGtncyA9IHBrZ3M7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgLy9JZiB0aGVyZSBhcmUgYW55ICJ3YWl0aW5nIHRvIGV4ZWN1dGUiIG1vZHVsZXMg
aW4gdGhlIHJlZ2lzdHJ5LAorICAgICAgICAgICAgICAgIC8vdXBkYXRlIHRoZSBtYXBzIGZvciB0
aGVtLCBzaW5jZSB0aGVpciBpbmZvLCBsaWtlIFVSTHMgdG8gbG9hZCwKKyAgICAgICAgICAgICAg
ICAvL21heSBoYXZlIGNoYW5nZWQuCisgICAgICAgICAgICAgICAgZWFjaFByb3AocmVnaXN0cnks
IGZ1bmN0aW9uIChtb2QsIGlkKSB7CisgICAgICAgICAgICAgICAgICAgIC8vSWYgbW9kdWxlIGFs
cmVhZHkgaGFzIGluaXQgY2FsbGVkLCBzaW5jZSBpdCBpcyB0b28KKyAgICAgICAgICAgICAgICAg
ICAgLy9sYXRlIHRvIG1vZGlmeSB0aGVtLCBhbmQgaWdub3JlIHVubm9ybWFsaXplZCBvbmVzCisg
ICAgICAgICAgICAgICAgICAgIC8vc2luY2UgdGhleSBhcmUgdHJhbnNpZW50LgorICAgICAgICAg
ICAgICAgICAgICBpZiAoIW1vZC5pbml0ZWQgJiYgIW1vZC5tYXAudW5ub3JtYWxpemVkKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBtb2QubWFwID0gbWFrZU1vZHVsZU1hcChpZCk7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgICAg
IC8vSWYgYSBkZXBzIGFycmF5IG9yIGEgY29uZmlnIGNhbGxiYWNrIGlzIHNwZWNpZmllZCwgdGhl
biBjYWxsCisgICAgICAgICAgICAgICAgLy9yZXF1aXJlIHdpdGggdGhvc2UgYXJncy4gVGhpcyBp
cyB1c2VmdWwgd2hlbiByZXF1aXJlIGlzIGRlZmluZWQgYXMgYQorICAgICAgICAgICAgICAgIC8v
Y29uZmlnIG9iamVjdCBiZWZvcmUgcmVxdWlyZS5qcyBpcyBsb2FkZWQuCisgICAgICAgICAgICAg
ICAgaWYgKGNmZy5kZXBzIHx8IGNmZy5jYWxsYmFjaykgeworICAgICAgICAgICAgICAgICAgICBj
b250ZXh0LnJlcXVpcmUoY2ZnLmRlcHMgfHwgW10sIGNmZy5jYWxsYmFjayk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgbWFrZVNoaW1FeHBvcnRzOiBm
dW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgICAgICAgICBmdW5jdGlvbiBmbigpIHsKKyAgICAg
ICAgICAgICAgICAgICAgdmFyIHJldDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLmlu
aXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IHZhbHVlLmluaXQuYXBwbHkoZ2xv
YmFsLCBhcmd1bWVudHMpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiByZXQgfHwgKHZhbHVlLmV4cG9ydHMgJiYgZ2V0R2xvYmFsKHZhbHVlLmV4cG9y
dHMpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIGZuOworICAg
ICAgICAgICAgfSwKKworICAgICAgICAgICAgbWFrZVJlcXVpcmU6IGZ1bmN0aW9uIChyZWxNYXAs
IG9wdGlvbnMpIHsKKyAgICAgICAgICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKKwor
ICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGxvY2FsUmVxdWlyZShkZXBzLCBjYWxsYmFjaywgZXJy
YmFjaykgeworICAgICAgICAgICAgICAgICAgICB2YXIgaWQsIG1hcCwgcmVxdWlyZU1vZDsKKwor
ICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5lbmFibGVCdWlsZENhbGxiYWNrICYmIGNh
bGxiYWNrICYmIGlzRnVuY3Rpb24oY2FsbGJhY2spKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBjYWxsYmFjay5fX3JlcXVpcmVKc0J1aWxkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZGVwcyA9PT0gJ3N0cmluZycpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKGNhbGxiYWNrKSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vSW52YWxpZCBjYWxsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIG9uRXJyb3IobWFrZUVycm9yKCdyZXF1aXJlYXJncycsICdJbnZh
bGlkIHJlcXVpcmUgY2FsbCcpLCBlcnJiYWNrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgICAgICAgICAgLy9JZiByZXF1aXJlfGV4cG9ydHN8bW9kdWxlIGFy
ZSByZXF1ZXN0ZWQsIGdldCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vdmFsdWUgZm9y
IHRoZW0gZnJvbSB0aGUgc3BlY2lhbCBoYW5kbGVycy4gQ2F2ZWF0OgorICAgICAgICAgICAgICAg
ICAgICAgICAgLy90aGlzIG9ubHkgd29ya3Mgd2hpbGUgbW9kdWxlIGlzIGJlaW5nIGRlZmluZWQu
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVsTWFwICYmIGhhc1Byb3AoaGFuZGxlcnMs
IGRlcHMpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZXJzW2Rl
cHNdKHJlZ2lzdHJ5W3JlbE1hcC5pZF0pOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgICAgICAgICAvL1N5bmNocm9ub3VzIGFjY2VzcyB0byBvbmUgbW9kdWxl
LiBJZiByZXF1aXJlLmdldCBpcworICAgICAgICAgICAgICAgICAgICAgICAgLy9hdmFpbGFibGUg
KGFzIGluIHRoZSBOb2RlIGFkYXB0ZXIpLCBwcmVmZXIgdGhhdC4KKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChyZXEuZ2V0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHJlcS5nZXQoY29udGV4dCwgZGVwcywgcmVsTWFwKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgICAgICAgICAgLy9Ob3JtYWxpemUgbW9kdWxlIG5hbWUsIGlm
IGl0IGNvbnRhaW5zIC4gb3IgLi4KKyAgICAgICAgICAgICAgICAgICAgICAgIG1hcCA9IG1ha2VN
b2R1bGVNYXAoZGVwcywgcmVsTWFwLCBmYWxzZSwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZCA9IG1hcC5pZDsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNQcm9w
KGRlZmluZWQsIGlkKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvbkVy
cm9yKG1ha2VFcnJvcignbm90bG9hZGVkJywgJ01vZHVsZSBuYW1lICInICsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZCArCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJyIgaGFzIG5vdCBiZWVuIGxvYWRlZCB5ZXQgZm9yIGNvbnRleHQ6
ICcgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHROYW1l
ICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmVsTWFwID8gJycg
OiAnLiBVc2UgcmVxdWlyZShbXSknKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRlZmluZWRbaWRdOworICAgICAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgLy9HcmFiIGRlZmluZXMgd2FpdGluZyBpbiB0
aGUgZ2xvYmFsIHF1ZXVlLgorICAgICAgICAgICAgICAgICAgICBpbnRha2VEZWZpbmVzKCk7CisK
KyAgICAgICAgICAgICAgICAgICAgLy9NYXJrIGFsbCB0aGUgZGVwZW5kZW5jaWVzIGFzIG5lZWRp
bmcgdG8gYmUgbG9hZGVkLgorICAgICAgICAgICAgICAgICAgICBjb250ZXh0Lm5leHRUaWNrKGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vU29tZSBkZWZpbmVzIGNvdWxk
IGhhdmUgYmVlbiBhZGRlZCBzaW5jZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vcmVx
dWlyZSBjYWxsLCBjb2xsZWN0IHRoZW0uCisgICAgICAgICAgICAgICAgICAgICAgICBpbnRha2VE
ZWZpbmVzKCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVNb2QgPSBnZXRNb2R1
bGUobWFrZU1vZHVsZU1hcChudWxsLCByZWxNYXApKTsKKworICAgICAgICAgICAgICAgICAgICAg
ICAgLy9TdG9yZSBpZiBtYXAgY29uZmlnIHNob3VsZCBiZSBhcHBsaWVkIHRvIHRoaXMgcmVxdWly
ZQorICAgICAgICAgICAgICAgICAgICAgICAgLy9jYWxsIGZvciBkZXBlbmRlbmNpZXMuCisgICAg
ICAgICAgICAgICAgICAgICAgICByZXF1aXJlTW9kLnNraXBNYXAgPSBvcHRpb25zLnNraXBNYXA7
CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVNb2QuaW5pdChkZXBzLCBjYWxsYmFj
aywgZXJyYmFjaywgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZWQ6IHRydWUK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAgICAgICAgICAgICBj
aGVja0xvYWRlZCgpOworICAgICAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gbG9jYWxSZXF1aXJlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgIG1peGluKGxvY2FsUmVxdWlyZSwgeworICAgICAgICAgICAgICAgICAgICBpc0Jyb3dz
ZXI6IGlzQnJvd3NlciwKKworICAgICAgICAgICAgICAgICAgICAvKioKKyAgICAgICAgICAgICAg
ICAgICAgICogQ29udmVydHMgYSBtb2R1bGUgbmFtZSArIC5leHRlbnNpb24gaW50byBhbiBVUkwg
cGF0aC4KKyAgICAgICAgICAgICAgICAgICAgICogKlJlcXVpcmVzKiB0aGUgdXNlIG9mIGEgbW9k
dWxlIG5hbWUuIEl0IGRvZXMgbm90IHN1cHBvcnQgdXNpbmcKKyAgICAgICAgICAgICAgICAgICAg
ICogcGxhaW4gVVJMcyBsaWtlIG5hbWVUb1VybC4KKyAgICAgICAgICAgICAgICAgICAgICovCisg
ICAgICAgICAgICAgICAgICAgIHRvVXJsOiBmdW5jdGlvbiAobW9kdWxlTmFtZVBsdXNFeHQpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IG1vZHVsZU5hbWVQbHVzRXh0Lmxh
c3RJbmRleE9mKCcuJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0ID0gbnVsbDsK
KworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGV4dCA9IG1vZHVsZU5hbWVQbHVzRXh0LnN1YnN0cmluZyhpbmRl
eCwgbW9kdWxlTmFtZVBsdXNFeHQubGVuZ3RoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtb2R1bGVOYW1lUGx1c0V4dCA9IG1vZHVsZU5hbWVQbHVzRXh0LnN1YnN0cmluZygwLCBpbmRl
eCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBjb250ZXh0Lm5hbWVUb1VybChub3JtYWxpemUobW9kdWxlTmFtZVBsdXNFeHQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxNYXAgJiYg
cmVsTWFwLmlkLCB0cnVlKSwgZXh0KTsKKyAgICAgICAgICAgICAgICAgICAgfSwKKworICAgICAg
ICAgICAgICAgICAgICBkZWZpbmVkOiBmdW5jdGlvbiAoaWQpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBoYXNQcm9wKGRlZmluZWQsIG1ha2VNb2R1bGVNYXAoaWQsIHJlbE1hcCwg
ZmFsc2UsIHRydWUpLmlkKTsKKyAgICAgICAgICAgICAgICAgICAgfSwKKworICAgICAgICAgICAg
ICAgICAgICBzcGVjaWZpZWQ6IGZ1bmN0aW9uIChpZCkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgaWQgPSBtYWtlTW9kdWxlTWFwKGlkLCByZWxNYXAsIGZhbHNlLCB0cnVlKS5pZDsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBoYXNQcm9wKGRlZmluZWQsIGlkKSB8fCBoYXNQcm9w
KHJlZ2lzdHJ5LCBpZCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
KTsKKworICAgICAgICAgICAgICAgIC8vT25seSBhbGxvdyB1bmRlZiBvbiB0b3AgbGV2ZWwgcmVx
dWlyZSBjYWxscworICAgICAgICAgICAgICAgIGlmICghcmVsTWFwKSB7CisgICAgICAgICAgICAg
ICAgICAgIGxvY2FsUmVxdWlyZS51bmRlZiA9IGZ1bmN0aW9uIChpZCkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgLy9CaW5kIGFueSB3YWl0aW5nIGRlZmluZSgpIGNhbGxzIHRvIHRoaXMgY29u
dGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vZml4IGZvciAjNDA4CisgICAgICAgICAg
ICAgICAgICAgICAgICB0YWtlR2xvYmFsUXVldWUoKTsKKworICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyIG1hcCA9IG1ha2VNb2R1bGVNYXAoaWQsIHJlbE1hcCwgdHJ1ZSksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbW9kID0gZ2V0T3duKHJlZ2lzdHJ5LCBpZCk7CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGRlbGV0ZSBkZWZpbmVkW2lkXTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGRlbGV0ZSB1cmxGZXRjaGVkW21hcC51cmxdOworICAgICAgICAgICAgICAgICAgICAgICAg
ZGVsZXRlIHVuZGVmRXZlbnRzW2lkXTsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1v
ZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vSG9sZCBvbiB0byBsaXN0ZW5lcnMg
aW4gY2FzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL21vZHVsZSB3aWxsIGJl
IGF0dGVtcHRlZCB0byBiZSByZWxvYWRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
dXNpbmcgYSBkaWZmZXJlbnQgY29uZmlnLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChtb2QuZXZlbnRzLmRlZmluZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dW5kZWZFdmVudHNbaWRdID0gbW9kLmV2ZW50czsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhblJlZ2lzdHJ5KGlkKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByZXR1cm4gbG9jYWxSZXF1aXJlOworICAgICAg
ICAgICAgfSwKKworICAgICAgICAgICAgLyoqCisgICAgICAgICAgICAgKiBDYWxsZWQgdG8gZW5h
YmxlIGEgbW9kdWxlIGlmIGl0IGlzIHN0aWxsIGluIHRoZSByZWdpc3RyeQorICAgICAgICAgICAg
ICogYXdhaXRpbmcgZW5hYmxlbWVudC4gcGFyZW50IG1vZHVsZSBpcyBwYXNzZWQgaW4gZm9yIGNv
bnRleHQsCisgICAgICAgICAgICAgKiB1c2VkIGJ5IHRoZSBvcHRpbWl6ZXIuCisgICAgICAgICAg
ICAgKi8KKyAgICAgICAgICAgIGVuYWJsZTogZnVuY3Rpb24gKGRlcE1hcCwgcGFyZW50KSB7Cisg
ICAgICAgICAgICAgICAgdmFyIG1vZCA9IGdldE93bihyZWdpc3RyeSwgZGVwTWFwLmlkKTsKKyAg
ICAgICAgICAgICAgICBpZiAobW9kKSB7CisgICAgICAgICAgICAgICAgICAgIGdldE1vZHVsZShk
ZXBNYXApLmVuYWJsZSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sCisKKyAg
ICAgICAgICAgIC8qKgorICAgICAgICAgICAgICogSW50ZXJuYWwgbWV0aG9kIHVzZWQgYnkgZW52
aXJvbm1lbnQgYWRhcHRlcnMgdG8gY29tcGxldGUgYSBsb2FkIGV2ZW50LgorICAgICAgICAgICAg
ICogQSBsb2FkIGV2ZW50IGNvdWxkIGJlIGEgc2NyaXB0IGxvYWQgb3IganVzdCBhIGxvYWQgcGFz
cyBmcm9tIGEgc3luY2hyb25vdXMKKyAgICAgICAgICAgICAqIGxvYWQgY2FsbC4KKyAgICAgICAg
ICAgICAqIEBwYXJhbSB7U3RyaW5nfSBtb2R1bGVOYW1lIHRoZSBuYW1lIG9mIHRoZSBtb2R1bGUg
dG8gcG90ZW50aWFsbHkgY29tcGxldGUuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGNv
bXBsZXRlTG9hZDogZnVuY3Rpb24gKG1vZHVsZU5hbWUpIHsKKyAgICAgICAgICAgICAgICB2YXIg
Zm91bmQsIGFyZ3MsIG1vZCwKKyAgICAgICAgICAgICAgICAgICAgc2hpbSA9IGdldE93bihjb25m
aWcuc2hpbSwgbW9kdWxlTmFtZSkgfHwge30sCisgICAgICAgICAgICAgICAgICAgIHNoRXhwb3J0
cyA9IHNoaW0uZXhwb3J0czsKKworICAgICAgICAgICAgICAgIHRha2VHbG9iYWxRdWV1ZSgpOwor
CisgICAgICAgICAgICAgICAgd2hpbGUgKGRlZlF1ZXVlLmxlbmd0aCkgeworICAgICAgICAgICAg
ICAgICAgICBhcmdzID0gZGVmUXVldWUuc2hpZnQoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGFyZ3NbMF0gPT09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NbMF0gPSBt
b2R1bGVOYW1lOworICAgICAgICAgICAgICAgICAgICAgICAgLy9JZiBhbHJlYWR5IGZvdW5kIGFu
IGFub255bW91cyBtb2R1bGUgYW5kIGJvdW5kIGl0CisgICAgICAgICAgICAgICAgICAgICAgICAv
L3RvIHRoaXMgbmFtZSwgdGhlbiB0aGlzIGlzIHNvbWUgb3RoZXIgYW5vbiBtb2R1bGUKKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vd2FpdGluZyBmb3IgaXRzIGNvbXBsZXRlTG9hZCB0byBmaXJl
LgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvdW5kKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAoYXJnc1swXSA9PT0gbW9kdWxlTmFtZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy9G
b3VuZCBtYXRjaGluZyBkZWZpbmUgY2FsbCBmb3IgdGhpcyBzY3JpcHQhCisgICAgICAgICAgICAg
ICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgICAgICBjYWxsR2V0TW9kdWxlKGFyZ3MpOworICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgIC8vRG8gdGhpcyBhZnRlciB0aGUgY3ljbGUgb2YgY2FsbEdldE1vZHVs
ZSBpbiBjYXNlIHRoZSByZXN1bHQKKyAgICAgICAgICAgICAgICAvL29mIHRob3NlIGNhbGxzL2lu
aXQgY2FsbHMgY2hhbmdlcyB0aGUgcmVnaXN0cnkuCisgICAgICAgICAgICAgICAgbW9kID0gZ2V0
T3duKHJlZ2lzdHJ5LCBtb2R1bGVOYW1lKTsKKworICAgICAgICAgICAgICAgIGlmICghZm91bmQg
JiYgIWhhc1Byb3AoZGVmaW5lZCwgbW9kdWxlTmFtZSkgJiYgbW9kICYmICFtb2QuaW5pdGVkKSB7
CisgICAgICAgICAgICAgICAgICAgIGlmIChjb25maWcuZW5mb3JjZURlZmluZSAmJiAoIXNoRXhw
b3J0cyB8fCAhZ2V0R2xvYmFsKHNoRXhwb3J0cykpKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoaGFzUGF0aEZhbGxiYWNrKG1vZHVsZU5hbWUpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb25FcnJvcihtYWtlRXJyb3IoJ25vZGVmaW5l
JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdObyBkZWZp
bmUgY2FsbCBmb3IgJyArIG1vZHVsZU5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBudWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgW21vZHVsZU5hbWVdKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvL0Eg
c2NyaXB0IHRoYXQgZG9lcyBub3QgY2FsbCBkZWZpbmUoKSwgc28ganVzdCBzaW11bGF0ZQorICAg
ICAgICAgICAgICAgICAgICAgICAgLy90aGUgY2FsbCBmb3IgaXQuCisgICAgICAgICAgICAgICAg
ICAgICAgICBjYWxsR2V0TW9kdWxlKFttb2R1bGVOYW1lLCAoc2hpbS5kZXBzIHx8IFtdKSwgc2hp
bS5leHBvcnRzRm5dKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIGNoZWNrTG9hZGVkKCk7CisgICAgICAgICAgICB9LAorCisgICAg
ICAgICAgICAvKioKKyAgICAgICAgICAgICAqIENvbnZlcnRzIGEgbW9kdWxlIG5hbWUgdG8gYSBm
aWxlIHBhdGguIFN1cHBvcnRzIGNhc2VzIHdoZXJlCisgICAgICAgICAgICAgKiBtb2R1bGVOYW1l
IG1heSBhY3R1YWxseSBiZSBqdXN0IGFuIFVSTC4KKyAgICAgICAgICAgICAqIE5vdGUgdGhhdCBp
dCAqKmRvZXMgbm90KiogY2FsbCBub3JtYWxpemUgb24gdGhlIG1vZHVsZU5hbWUsCisgICAgICAg
ICAgICAgKiBpdCBpcyBhc3N1bWVkIHRvIGhhdmUgYWxyZWFkeSBiZWVuIG5vcm1hbGl6ZWQuIFRo
aXMgaXMgYW4KKyAgICAgICAgICAgICAqIGludGVybmFsIEFQSSwgbm90IGEgcHVibGljIG9uZS4g
VXNlIHRvVXJsIGZvciB0aGUgcHVibGljIEFQSS4KKyAgICAgICAgICAgICAqLworICAgICAgICAg
ICAgbmFtZVRvVXJsOiBmdW5jdGlvbiAobW9kdWxlTmFtZSwgZXh0KSB7CisgICAgICAgICAgICAg
ICAgdmFyIHBhdGhzLCBwa2dzLCBwa2csIHBrZ1BhdGgsIHN5bXMsIGksIHBhcmVudE1vZHVsZSwg
dXJsLAorICAgICAgICAgICAgICAgICAgICBwYXJlbnRQYXRoOworCisgICAgICAgICAgICAgICAg
Ly9JZiBhIGNvbG9uIGlzIGluIHRoZSBVUkwsIGl0IGluZGljYXRlcyBhIHByb3RvY29sIGlzIHVz
ZWQgYW5kIGl0IGlzIGp1c3QKKyAgICAgICAgICAgICAgICAvL2FuIFVSTCB0byBhIGZpbGUsIG9y
IGlmIGl0IHN0YXJ0cyB3aXRoIGEgc2xhc2gsIGNvbnRhaW5zIGEgcXVlcnkgYXJnIChpLmUuID8p
CisgICAgICAgICAgICAgICAgLy9vciBlbmRzIHdpdGggLmpzLCB0aGVuIGFzc3VtZSB0aGUgdXNl
ciBtZWFudCB0byB1c2UgYW4gdXJsIGFuZCBub3QgYSBtb2R1bGUgaWQuCisgICAgICAgICAgICAg
ICAgLy9UaGUgc2xhc2ggaXMgaW1wb3J0YW50IGZvciBwcm90b2NvbC1sZXNzIFVSTHMgYXMgd2Vs
bCBhcyBmdWxsIHBhdGhzLgorICAgICAgICAgICAgICAgIGlmIChyZXEuanNFeHRSZWdFeHAudGVz
dChtb2R1bGVOYW1lKSkgeworICAgICAgICAgICAgICAgICAgICAvL0p1c3QgYSBwbGFpbiBwYXRo
LCBub3QgbW9kdWxlIG5hbWUgbG9va3VwLCBzbyBqdXN0IHJldHVybiBpdC4KKyAgICAgICAgICAg
ICAgICAgICAgLy9BZGQgZXh0ZW5zaW9uIGlmIGl0IGlzIGluY2x1ZGVkLiBUaGlzIGlzIGEgYml0
IHdvbmt5LCBvbmx5IG5vbi0uanMgdGhpbmdzIHBhc3MKKyAgICAgICAgICAgICAgICAgICAgLy9h
biBleHRlbnNpb24sIHRoaXMgbWV0aG9kIHByb2JhYmx5IG5lZWRzIHRvIGJlIHJld29ya2VkLgor
ICAgICAgICAgICAgICAgICAgICB1cmwgPSBtb2R1bGVOYW1lICsgKGV4dCB8fCAnJyk7CisgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy9BIG1vZHVsZSB0aGF0
IG5lZWRzIHRvIGJlIGNvbnZlcnRlZCB0byBhIHBhdGguCisgICAgICAgICAgICAgICAgICAgIHBh
dGhzID0gY29uZmlnLnBhdGhzOworICAgICAgICAgICAgICAgICAgICBwa2dzID0gY29uZmlnLnBr
Z3M7CisKKyAgICAgICAgICAgICAgICAgICAgc3ltcyA9IG1vZHVsZU5hbWUuc3BsaXQoJy8nKTsK
KyAgICAgICAgICAgICAgICAgICAgLy9Gb3IgZWFjaCBtb2R1bGUgbmFtZSBzZWdtZW50LCBzZWUg
aWYgdGhlcmUgaXMgYSBwYXRoCisgICAgICAgICAgICAgICAgICAgIC8vcmVnaXN0ZXJlZCBmb3Ig
aXQuIFN0YXJ0IHdpdGggbW9zdCBzcGVjaWZpYyBuYW1lCisgICAgICAgICAgICAgICAgICAgIC8v
YW5kIHdvcmsgdXAgZnJvbSBpdC4KKyAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gc3ltcy5s
ZW5ndGg7IGkgPiAwOyBpIC09IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudE1v
ZHVsZSA9IHN5bXMuc2xpY2UoMCwgaSkuam9pbignLycpOworICAgICAgICAgICAgICAgICAgICAg
ICAgcGtnID0gZ2V0T3duKHBrZ3MsIHBhcmVudE1vZHVsZSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBwYXJlbnRQYXRoID0gZ2V0T3duKHBhdGhzLCBwYXJlbnRNb2R1bGUpOworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHBhcmVudFBhdGgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvL0lmIGFuIGFycmF5LCBpdCBtZWFucyB0aGVyZSBhcmUgYSBmZXcgY2hvaWNlcywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvL0Nob29zZSB0aGUgb25lIHRoYXQgaXMgZGVzaXJl
ZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0FycmF5KHBhcmVudFBhdGgpKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFBhdGggPSBwYXJlbnRQYXRo
WzBdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzeW1zLnNwbGljZSgwLCBpLCBwYXJlbnRQYXRoKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGtn
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9JZiBtb2R1bGUgbmFtZSBpcyBqdXN0
IHRoZSBwYWNrYWdlIG5hbWUsIHRoZW4gbG9va2luZworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vZm9yIHRoZSBtYWluIG1vZHVsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAobW9kdWxlTmFtZSA9PT0gcGtnLm5hbWUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcGtnUGF0aCA9IHBrZy5sb2NhdGlvbiArICcvJyArIHBrZy5tYWluOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHBrZ1BhdGggPSBwa2cubG9jYXRpb247CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bXMuc3BsaWNlKDAsIGksIHBrZ1BhdGgp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgLy9K
b2luIHRoZSBwYXRoIHBhcnRzIHRvZ2V0aGVyLCB0aGVuIGZpZ3VyZSBvdXQgaWYgYmFzZVVybCBp
cyBuZWVkZWQuCisgICAgICAgICAgICAgICAgICAgIHVybCA9IHN5bXMuam9pbignLycpOworICAg
ICAgICAgICAgICAgICAgICB1cmwgKz0gKGV4dCB8fCAoL1w/Ly50ZXN0KHVybCkgPyAnJyA6ICcu
anMnKSk7CisgICAgICAgICAgICAgICAgICAgIHVybCA9ICh1cmwuY2hhckF0KDApID09PSAnLycg
fHwgdXJsLm1hdGNoKC9eW1x3XCtcLlwtXSs6LykgPyAnJyA6IGNvbmZpZy5iYXNlVXJsKSArIHVy
bDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByZXR1cm4gY29uZmlnLnVy
bEFyZ3MgPyB1cmwgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgo
dXJsLmluZGV4T2YoJz8nKSA9PT0gLTEgPyAnPycgOiAnJicpICsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLnVybEFyZ3MpIDogdXJsOworICAgICAgICAg
ICAgfSwKKworICAgICAgICAgICAgLy9EZWxlZ2F0ZXMgdG8gcmVxLmxvYWQuIEJyb2tlbiBvdXQg
YXMgYSBzZXBhcmF0ZSBmdW5jdGlvbiB0bworICAgICAgICAgICAgLy9hbGxvdyBvdmVycmlkaW5n
IGluIHRoZSBvcHRpbWl6ZXIuCisgICAgICAgICAgICBsb2FkOiBmdW5jdGlvbiAoaWQsIHVybCkg
eworICAgICAgICAgICAgICAgIHJlcS5sb2FkKGNvbnRleHQsIGlkLCB1cmwpOworICAgICAgICAg
ICAgfSwKKworICAgICAgICAgICAgLyoqCisgICAgICAgICAgICAgKiBFeGVjdXRlcyBhIG1vZHVs
ZSBjYWxsYWNrIGZ1bmN0aW9uLiBCcm9rZW4gb3V0IGFzIGEgc2VwYXJhdGUgZnVuY3Rpb24KKyAg
ICAgICAgICAgICAqIHNvbGVseSB0byBhbGxvdyB0aGUgYnVpbGQgc3lzdGVtIHRvIHNlcXVlbmNl
IHRoZSBmaWxlcyBpbiB0aGUgYnVpbHQKKyAgICAgICAgICAgICAqIGxheWVyIGluIHRoZSByaWdo
dCBzZXF1ZW5jZS4KKyAgICAgICAgICAgICAqCisgICAgICAgICAgICAgKiBAcHJpdmF0ZQorICAg
ICAgICAgICAgICovCisgICAgICAgICAgICBleGVjQ2I6IGZ1bmN0aW9uIChuYW1lLCBjYWxsYmFj
aywgYXJncywgZXhwb3J0cykgeworICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjay5hcHBs
eShleHBvcnRzLCBhcmdzKTsKKyAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgIC8qKgorICAg
ICAgICAgICAgICogY2FsbGJhY2sgZm9yIHNjcmlwdCBsb2FkcywgdXNlZCB0byBjaGVjayBzdGF0
dXMgb2YgbG9hZGluZy4KKyAgICAgICAgICAgICAqCisgICAgICAgICAgICAgKiBAcGFyYW0ge0V2
ZW50fSBldnQgdGhlIGV2ZW50IGZyb20gdGhlIGJyb3dzZXIgZm9yIHRoZSBzY3JpcHQKKyAgICAg
ICAgICAgICAqIHRoYXQgd2FzIGxvYWRlZC4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAg
b25TY3JpcHRMb2FkOiBmdW5jdGlvbiAoZXZ0KSB7CisgICAgICAgICAgICAgICAgLy9Vc2luZyBj
dXJyZW50VGFyZ2V0IGluc3RlYWQgb2YgdGFyZ2V0IGZvciBGaXJlZm94IDIuMCdzIHNha2UuIE5v
dAorICAgICAgICAgICAgICAgIC8vYWxsIG9sZCBicm93c2VycyB3aWxsIGJlIHN1cHBvcnRlZCwg
YnV0IHRoaXMgb25lIHdhcyBlYXN5IGVub3VnaAorICAgICAgICAgICAgICAgIC8vdG8gc3VwcG9y
dCBhbmQgc3RpbGwgbWFrZXMgc2Vuc2UuCisgICAgICAgICAgICAgICAgaWYgKGV2dC50eXBlID09
PSAnbG9hZCcgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgIChyZWFkeVJlZ0V4cC50ZXN0KChl
dnQuY3VycmVudFRhcmdldCB8fCBldnQuc3JjRWxlbWVudCkucmVhZHlTdGF0ZSkpKSB7CisgICAg
ICAgICAgICAgICAgICAgIC8vUmVzZXQgaW50ZXJhY3RpdmUgc2NyaXB0IHNvIGEgc2NyaXB0IG5v
ZGUgaXMgbm90IGhlbGQgb250byBmb3IKKyAgICAgICAgICAgICAgICAgICAgLy90byBsb25nLgor
ICAgICAgICAgICAgICAgICAgICBpbnRlcmFjdGl2ZVNjcmlwdCA9IG51bGw7CisKKyAgICAgICAg
ICAgICAgICAgICAgLy9QdWxsIG91dCB0aGUgbmFtZSBvZiB0aGUgbW9kdWxlIGFuZCB0aGUgY29u
dGV4dC4KKyAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBnZXRTY3JpcHREYXRhKGV2dCk7
CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuY29tcGxldGVMb2FkKGRhdGEuaWQpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgIC8qKgorICAgICAg
ICAgICAgICogQ2FsbGJhY2sgZm9yIHNjcmlwdCBlcnJvcnMuCisgICAgICAgICAgICAgKi8KKyAg
ICAgICAgICAgIG9uU2NyaXB0RXJyb3I6IGZ1bmN0aW9uIChldnQpIHsKKyAgICAgICAgICAgICAg
ICB2YXIgZGF0YSA9IGdldFNjcmlwdERhdGEoZXZ0KTsKKyAgICAgICAgICAgICAgICBpZiAoIWhh
c1BhdGhGYWxsYmFjayhkYXRhLmlkKSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gb25F
cnJvcihtYWtlRXJyb3IoJ3NjcmlwdGVycm9yJywgJ1NjcmlwdCBlcnJvcicsIGV2dCwgW2RhdGEu
aWRdKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9OworCisg
ICAgICAgIGNvbnRleHQucmVxdWlyZSA9IGNvbnRleHQubWFrZVJlcXVpcmUoKTsKKyAgICAgICAg
cmV0dXJuIGNvbnRleHQ7CisgICAgfQorCisgICAgLyoqCisgICAgICogTWFpbiBlbnRyeSBwb2lu
dC4KKyAgICAgKgorICAgICAqIElmIHRoZSBvbmx5IGFyZ3VtZW50IHRvIHJlcXVpcmUgaXMgYSBz
dHJpbmcsIHRoZW4gdGhlIG1vZHVsZSB0aGF0CisgICAgICogaXMgcmVwcmVzZW50ZWQgYnkgdGhh
dCBzdHJpbmcgaXMgZmV0Y2hlZCBmb3IgdGhlIGFwcHJvcHJpYXRlIGNvbnRleHQuCisgICAgICoK
KyAgICAgKiBJZiB0aGUgZmlyc3QgYXJndW1lbnQgaXMgYW4gYXJyYXksIHRoZW4gaXQgd2lsbCBi
ZSB0cmVhdGVkIGFzIGFuIGFycmF5CisgICAgICogb2YgZGVwZW5kZW5jeSBzdHJpbmcgbmFtZXMg
dG8gZmV0Y2guIEFuIG9wdGlvbmFsIGZ1bmN0aW9uIGNhbGxiYWNrIGNhbgorICAgICAqIGJlIHNw
ZWNpZmllZCB0byBleGVjdXRlIHdoZW4gYWxsIG9mIHRob3NlIGRlcGVuZGVuY2llcyBhcmUgYXZh
aWxhYmxlLgorICAgICAqCisgICAgICogTWFrZSBhIGxvY2FsIHJlcSB2YXJpYWJsZSB0byBoZWxw
IENhamEgY29tcGxpYW5jZSAoaXQgYXNzdW1lcyB0aGluZ3MKKyAgICAgKiBvbiBhIHJlcXVpcmUg
dGhhdCBhcmUgbm90IHN0YW5kYXJkaXplZCksIGFuZCB0byBnaXZlIGEgc2hvcnQKKyAgICAgKiBu
YW1lIGZvciBtaW5pZmljYXRpb24vbG9jYWwgc2NvcGUgdXNlLgorICAgICAqLworICAgIHJlcSA9
IHJlcXVpcmVqcyA9IGZ1bmN0aW9uIChkZXBzLCBjYWxsYmFjaywgZXJyYmFjaywgb3B0aW9uYWwp
IHsKKworICAgICAgICAvL0ZpbmQgdGhlIHJpZ2h0IGNvbnRleHQsIHVzZSBkZWZhdWx0CisgICAg
ICAgIHZhciBjb250ZXh0LCBjb25maWcsCisgICAgICAgICAgICBjb250ZXh0TmFtZSA9IGRlZkNv
bnRleHROYW1lOworCisgICAgICAgIC8vIERldGVybWluZSBpZiBoYXZlIGNvbmZpZyBvYmplY3Qg
aW4gdGhlIGNhbGwuCisgICAgICAgIGlmICghaXNBcnJheShkZXBzKSAmJiB0eXBlb2YgZGVwcyAh
PT0gJ3N0cmluZycpIHsKKyAgICAgICAgICAgIC8vIGRlcHMgaXMgYSBjb25maWcgb2JqZWN0Cisg
ICAgICAgICAgICBjb25maWcgPSBkZXBzOworICAgICAgICAgICAgaWYgKGlzQXJyYXkoY2FsbGJh
Y2spKSB7CisgICAgICAgICAgICAgICAgLy8gQWRqdXN0IGFyZ3MgaWYgdGhlcmUgYXJlIGRlcGVu
ZGVuY2llcworICAgICAgICAgICAgICAgIGRlcHMgPSBjYWxsYmFjazsKKyAgICAgICAgICAgICAg
ICBjYWxsYmFjayA9IGVycmJhY2s7CisgICAgICAgICAgICAgICAgZXJyYmFjayA9IG9wdGlvbmFs
OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBkZXBzID0gW107CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoY29uZmlnICYmIGNvbmZpZy5jb250
ZXh0KSB7CisgICAgICAgICAgICBjb250ZXh0TmFtZSA9IGNvbmZpZy5jb250ZXh0OworICAgICAg
ICB9CisKKyAgICAgICAgY29udGV4dCA9IGdldE93bihjb250ZXh0cywgY29udGV4dE5hbWUpOwor
ICAgICAgICBpZiAoIWNvbnRleHQpIHsKKyAgICAgICAgICAgIGNvbnRleHQgPSBjb250ZXh0c1tj
b250ZXh0TmFtZV0gPSByZXEucy5uZXdDb250ZXh0KGNvbnRleHROYW1lKTsKKyAgICAgICAgfQor
CisgICAgICAgIGlmIChjb25maWcpIHsKKyAgICAgICAgICAgIGNvbnRleHQuY29uZmlndXJlKGNv
bmZpZyk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gY29udGV4dC5yZXF1aXJlKGRlcHMs
IGNhbGxiYWNrLCBlcnJiYWNrKTsKKyAgICB9OworCisgICAgLyoqCisgICAgICogU3VwcG9ydCBy
ZXF1aXJlLmNvbmZpZygpIHRvIG1ha2UgaXQgZWFzaWVyIHRvIGNvb3BlcmF0ZSB3aXRoIG90aGVy
CisgICAgICogQU1EIGxvYWRlcnMgb24gZ2xvYmFsbHkgYWdyZWVkIG5hbWVzLgorICAgICAqLwor
ICAgIHJlcS5jb25maWcgPSBmdW5jdGlvbiAoY29uZmlnKSB7CisgICAgICAgIHJldHVybiByZXEo
Y29uZmlnKTsKKyAgICB9OworCisgICAgLyoqCisgICAgICogRXhlY3V0ZSBzb21ldGhpbmcgYWZ0
ZXIgdGhlIGN1cnJlbnQgdGljaworICAgICAqIG9mIHRoZSBldmVudCBsb29wLiBPdmVycmlkZSBm
b3Igb3RoZXIgZW52cworICAgICAqIHRoYXQgaGF2ZSBhIGJldHRlciBzb2x1dGlvbiB0aGFuIHNl
dFRpbWVvdXQuCisgICAgICogQHBhcmFtICB7RnVuY3Rpb259IGZuIGZ1bmN0aW9uIHRvIGV4ZWN1
dGUgbGF0ZXIuCisgICAgICovCisgICAgcmVxLm5leHRUaWNrID0gdHlwZW9mIHNldFRpbWVvdXQg
IT09ICd1bmRlZmluZWQnID8gZnVuY3Rpb24gKGZuKSB7CisgICAgICAgIHNldFRpbWVvdXQoZm4s
IDQpOworICAgIH0gOiBmdW5jdGlvbiAoZm4pIHsgZm4oKTsgfTsKKworICAgIC8qKgorICAgICAq
IEV4cG9ydCByZXF1aXJlIGFzIGEgZ2xvYmFsLCBidXQgb25seSBpZiBpdCBkb2VzIG5vdCBhbHJl
YWR5IGV4aXN0LgorICAgICAqLworICAgIGlmICghcmVxdWlyZSkgeworICAgICAgICByZXF1aXJl
ID0gcmVxOworICAgIH0KKworICAgIHJlcS52ZXJzaW9uID0gdmVyc2lvbjsKKworICAgIC8vVXNl
ZCB0byBmaWx0ZXIgb3V0IGRlcGVuZGVuY2llcyB0aGF0IGFyZSBhbHJlYWR5IHBhdGhzLgorICAg
IHJlcS5qc0V4dFJlZ0V4cCA9IC9eXC98OnxcP3xcLmpzJC87CisgICAgcmVxLmlzQnJvd3NlciA9
IGlzQnJvd3NlcjsKKyAgICBzID0gcmVxLnMgPSB7CisgICAgICAgIGNvbnRleHRzOiBjb250ZXh0
cywKKyAgICAgICAgbmV3Q29udGV4dDogbmV3Q29udGV4dAorICAgIH07CisKKyAgICAvL0NyZWF0
ZSBkZWZhdWx0IGNvbnRleHQuCisgICAgcmVxKHt9KTsKKworICAgIC8vRXhwb3J0cyBzb21lIGNv
bnRleHQtc2Vuc2l0aXZlIG1ldGhvZHMgb24gZ2xvYmFsIHJlcXVpcmUuCisgICAgZWFjaChbCisg
ICAgICAgICd0b1VybCcsCisgICAgICAgICd1bmRlZicsCisgICAgICAgICdkZWZpbmVkJywKKyAg
ICAgICAgJ3NwZWNpZmllZCcKKyAgICBdLCBmdW5jdGlvbiAocHJvcCkgeworICAgICAgICAvL1Jl
ZmVyZW5jZSBmcm9tIGNvbnRleHRzIGluc3RlYWQgb2YgZWFybHkgYmluZGluZyB0byBkZWZhdWx0
IGNvbnRleHQsCisgICAgICAgIC8vc28gdGhhdCBkdXJpbmcgYnVpbGRzLCB0aGUgbGF0ZXN0IGlu
c3RhbmNlIG9mIHRoZSBkZWZhdWx0IGNvbnRleHQKKyAgICAgICAgLy93aXRoIGl0cyBjb25maWcg
Z2V0cyB1c2VkLgorICAgICAgICByZXFbcHJvcF0gPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAg
ICB2YXIgY3R4ID0gY29udGV4dHNbZGVmQ29udGV4dE5hbWVdOworICAgICAgICAgICAgcmV0dXJu
IGN0eC5yZXF1aXJlW3Byb3BdLmFwcGx5KGN0eCwgYXJndW1lbnRzKTsKKyAgICAgICAgfTsKKyAg
ICB9KTsKKworICAgIGlmIChpc0Jyb3dzZXIpIHsKKyAgICAgICAgaGVhZCA9IHMuaGVhZCA9IGRv
Y3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF07CisgICAgICAgIC8vSWYgQkFT
RSB0YWcgaXMgaW4gcGxheSwgdXNpbmcgYXBwZW5kQ2hpbGQgaXMgYSBwcm9ibGVtIGZvciBJRTYu
CisgICAgICAgIC8vV2hlbiB0aGF0IGJyb3dzZXIgZGllcywgdGhpcyBjYW4gYmUgcmVtb3ZlZC4g
RGV0YWlscyBpbiB0aGlzIGpRdWVyeSBidWc6CisgICAgICAgIC8vaHR0cDovL2Rldi5qcXVlcnku
Y29tL3RpY2tldC8yNzA5CisgICAgICAgIGJhc2VFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dHNCeVRhZ05hbWUoJ2Jhc2UnKVswXTsKKyAgICAgICAgaWYgKGJhc2VFbGVtZW50KSB7CisgICAg
ICAgICAgICBoZWFkID0gcy5oZWFkID0gYmFzZUVsZW1lbnQucGFyZW50Tm9kZTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIC8qKgorICAgICAqIEFueSBlcnJvcnMgdGhhdCByZXF1aXJlIGV4cGxp
Y2l0bHkgZ2VuZXJhdGVzIHdpbGwgYmUgcGFzc2VkIHRvIHRoaXMKKyAgICAgKiBmdW5jdGlvbi4g
SW50ZXJjZXB0L292ZXJyaWRlIGl0IGlmIHlvdSB3YW50IGN1c3RvbSBlcnJvciBoYW5kbGluZy4K
KyAgICAgKiBAcGFyYW0ge0Vycm9yfSBlcnIgdGhlIGVycm9yIG9iamVjdC4KKyAgICAgKi8KKyAg
ICByZXEub25FcnJvciA9IGZ1bmN0aW9uIChlcnIpIHsKKyAgICAgICAgdGhyb3cgZXJyOworICAg
IH07CisKKyAgICAvKioKKyAgICAgKiBEb2VzIHRoZSByZXF1ZXN0IHRvIGxvYWQgYSBtb2R1bGUg
Zm9yIHRoZSBicm93c2VyIGNhc2UuCisgICAgICogTWFrZSB0aGlzIGEgc2VwYXJhdGUgZnVuY3Rp
b24gdG8gYWxsb3cgb3RoZXIgZW52aXJvbm1lbnRzCisgICAgICogdG8gb3ZlcnJpZGUgaXQuCisg
ICAgICoKKyAgICAgKiBAcGFyYW0ge09iamVjdH0gY29udGV4dCB0aGUgcmVxdWlyZSBjb250ZXh0
IHRvIGZpbmQgc3RhdGUuCisgICAgICogQHBhcmFtIHtTdHJpbmd9IG1vZHVsZU5hbWUgdGhlIG5h
bWUgb2YgdGhlIG1vZHVsZS4KKyAgICAgKiBAcGFyYW0ge09iamVjdH0gdXJsIHRoZSBVUkwgdG8g
dGhlIG1vZHVsZS4KKyAgICAgKi8KKyAgICByZXEubG9hZCA9IGZ1bmN0aW9uIChjb250ZXh0LCBt
b2R1bGVOYW1lLCB1cmwpIHsKKyAgICAgICAgdmFyIGNvbmZpZyA9IChjb250ZXh0ICYmIGNvbnRl
eHQuY29uZmlnKSB8fCB7fSwKKyAgICAgICAgICAgIG5vZGU7CisgICAgICAgIGlmIChpc0Jyb3dz
ZXIpIHsKKyAgICAgICAgICAgIC8vSW4gdGhlIGJyb3dzZXIgc28gdXNlIGEgc2NyaXB0IHRhZwor
ICAgICAgICAgICAgbm9kZSA9IGNvbmZpZy54aHRtbCA/CisgICAgICAgICAgICAgICAgICAgIGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCcsICdo
dG1sOnNjcmlwdCcpIDoKKyAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgnc2NyaXB0Jyk7CisgICAgICAgICAgICBub2RlLnR5cGUgPSBjb25maWcuc2NyaXB0VHlwZSB8
fCAndGV4dC9qYXZhc2NyaXB0JzsKKyAgICAgICAgICAgIG5vZGUuY2hhcnNldCA9ICd1dGYtOCc7
CisgICAgICAgICAgICBub2RlLmFzeW5jID0gdHJ1ZTsKKworICAgICAgICAgICAgbm9kZS5zZXRB
dHRyaWJ1dGUoJ2RhdGEtcmVxdWlyZWNvbnRleHQnLCBjb250ZXh0LmNvbnRleHROYW1lKTsKKyAg
ICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCdkYXRhLXJlcXVpcmVtb2R1bGUnLCBtb2R1bGVO
YW1lKTsKKworICAgICAgICAgICAgLy9TZXQgdXAgbG9hZCBsaXN0ZW5lci4gVGVzdCBhdHRhY2hF
dmVudCBmaXJzdCBiZWNhdXNlIElFOSBoYXMKKyAgICAgICAgICAgIC8vYSBzdWJ0bGUgaXNzdWUg
aW4gaXRzIGFkZEV2ZW50TGlzdGVuZXIgYW5kIHNjcmlwdCBvbmxvYWQgZmlyaW5ncworICAgICAg
ICAgICAgLy90aGF0IGRvIG5vdCBtYXRjaCB0aGUgYmVoYXZpb3Igb2YgYWxsIG90aGVyIGJyb3dz
ZXJzIHdpdGgKKyAgICAgICAgICAgIC8vYWRkRXZlbnRMaXN0ZW5lciBzdXBwb3J0LCB3aGljaCBm
aXJlIHRoZSBvbmxvYWQgZXZlbnQgZm9yIGEKKyAgICAgICAgICAgIC8vc2NyaXB0IHJpZ2h0IGFm
dGVyIHRoZSBzY3JpcHQgZXhlY3V0aW9uLiBTZWU6CisgICAgICAgICAgICAvL2h0dHBzOi8vY29u
bmVjdC5taWNyb3NvZnQuY29tL0lFL2ZlZWRiYWNrL2RldGFpbHMvNjQ4MDU3L3NjcmlwdC1vbmxv
YWQtZXZlbnQtaXMtbm90LWZpcmVkLWltbWVkaWF0ZWx5LWFmdGVyLXNjcmlwdC1leGVjdXRpb24K
KyAgICAgICAgICAgIC8vVU5GT1JUVU5BVEVMWSBPcGVyYSBpbXBsZW1lbnRzIGF0dGFjaEV2ZW50
IGJ1dCBkb2VzIG5vdCBmb2xsb3cgdGhlIHNjcmlwdAorICAgICAgICAgICAgLy9zY3JpcHQgZXhl
Y3V0aW9uIG1vZGUuCisgICAgICAgICAgICBpZiAobm9kZS5hdHRhY2hFdmVudCAmJgorICAgICAg
ICAgICAgICAgICAgICAvL0NoZWNrIGlmIG5vZGUuYXR0YWNoRXZlbnQgaXMgYXJ0aWZpY2lhbGx5
IGFkZGVkIGJ5IGN1c3RvbSBzY3JpcHQgb3IKKyAgICAgICAgICAgICAgICAgICAgLy9uYXRpdmVs
eSBzdXBwb3J0ZWQgYnkgYnJvd3NlcgorICAgICAgICAgICAgICAgICAgICAvL3JlYWQgaHR0cHM6
Ly9naXRodWIuY29tL2pyYnVya2UvcmVxdWlyZWpzL2lzc3Vlcy8xODcKKyAgICAgICAgICAgICAg
ICAgICAgLy9pZiB3ZSBjYW4gTk9UIGZpbmQgW25hdGl2ZSBjb2RlXSB0aGVuIGl0IG11c3QgTk9U
IG5hdGl2ZWx5IHN1cHBvcnRlZC4KKyAgICAgICAgICAgICAgICAgICAgLy9pbiBJRTgsIG5vZGUu
YXR0YWNoRXZlbnQgZG9lcyBub3QgaGF2ZSB0b1N0cmluZygpCisgICAgICAgICAgICAgICAgICAg
IC8vTm90ZSB0aGUgdGVzdCBmb3IgIltuYXRpdmUgY29kZSIgd2l0aCBubyBjbG9zaW5nIGJyYWNl
LCBzZWU6CisgICAgICAgICAgICAgICAgICAgIC8vaHR0cHM6Ly9naXRodWIuY29tL2pyYnVya2Uv
cmVxdWlyZWpzL2lzc3Vlcy8yNzMKKyAgICAgICAgICAgICAgICAgICAgIShub2RlLmF0dGFjaEV2
ZW50LnRvU3RyaW5nICYmIG5vZGUuYXR0YWNoRXZlbnQudG9TdHJpbmcoKS5pbmRleE9mKCdbbmF0
aXZlIGNvZGUnKSA8IDApICYmCisgICAgICAgICAgICAgICAgICAgICFpc09wZXJhKSB7CisgICAg
ICAgICAgICAgICAgLy9Qcm9iYWJseSBJRS4gSUUgKGF0IGxlYXN0IDYtOCkgZG8gbm90IGZpcmUK
KyAgICAgICAgICAgICAgICAvL3NjcmlwdCBvbmxvYWQgcmlnaHQgYWZ0ZXIgZXhlY3V0aW5nIHRo
ZSBzY3JpcHQsIHNvCisgICAgICAgICAgICAgICAgLy93ZSBjYW5ub3QgdGllIHRoZSBhbm9ueW1v
dXMgZGVmaW5lIGNhbGwgdG8gYSBuYW1lLgorICAgICAgICAgICAgICAgIC8vSG93ZXZlciwgSUUg
cmVwb3J0cyB0aGUgc2NyaXB0IGFzIGJlaW5nIGluICdpbnRlcmFjdGl2ZScKKyAgICAgICAgICAg
ICAgICAvL3JlYWR5U3RhdGUgYXQgdGhlIHRpbWUgb2YgdGhlIGRlZmluZSBjYWxsLgorICAgICAg
ICAgICAgICAgIHVzZUludGVyYWN0aXZlID0gdHJ1ZTsKKworICAgICAgICAgICAgICAgIG5vZGUu
YXR0YWNoRXZlbnQoJ29ucmVhZHlzdGF0ZWNoYW5nZScsIGNvbnRleHQub25TY3JpcHRMb2FkKTsK
KyAgICAgICAgICAgICAgICAvL0l0IHdvdWxkIGJlIGdyZWF0IHRvIGFkZCBhbiBlcnJvciBoYW5k
bGVyIGhlcmUgdG8gY2F0Y2gKKyAgICAgICAgICAgICAgICAvLzQwNHMgaW4gSUU5Ky4gSG93ZXZl
ciwgb25yZWFkeXN0YXRlY2hhbmdlIHdpbGwgZmlyZSBiZWZvcmUKKyAgICAgICAgICAgICAgICAv
L3RoZSBlcnJvciBoYW5kbGVyLCBzbyB0aGF0IGRvZXMgbm90IGhlbHAuIElmIGFkZEV2ZW5MaXN0
ZW5lcgorICAgICAgICAgICAgICAgIC8vaXMgdXNlZCwgdGhlbiBJRSB3aWxsIGZpcmUgZXJyb3Ig
YmVmb3JlIGxvYWQsIGJ1dCB3ZSBjYW5ub3QKKyAgICAgICAgICAgICAgICAvL3VzZSB0aGF0IHBh
dGh3YXkgZ2l2ZW4gdGhlIGNvbm5lY3QubWljcm9zb2Z0LmNvbSBpc3N1ZQorICAgICAgICAgICAg
ICAgIC8vbWVudGlvbmVkIGFib3ZlIGFib3V0IG5vdCBkb2luZyB0aGUgJ3NjcmlwdCBleGVjdXRl
LAorICAgICAgICAgICAgICAgIC8vdGhlbiBmaXJlIHRoZSBzY3JpcHQgbG9hZCBldmVudCBsaXN0
ZW5lciBiZWZvcmUgZXhlY3V0ZQorICAgICAgICAgICAgICAgIC8vbmV4dCBzY3JpcHQnIHRoYXQg
b3RoZXIgYnJvd3NlcnMgZG8uCisgICAgICAgICAgICAgICAgLy9CZXN0IGhvcGU6IElFMTAgZml4
ZXMgdGhlIGlzc3VlcywKKyAgICAgICAgICAgICAgICAvL2FuZCB0aGVuIGRlc3Ryb3lzIGFsbCBp
bnN0YWxscyBvZiBJRSA2LTkuCisgICAgICAgICAgICAgICAgLy9ub2RlLmF0dGFjaEV2ZW50KCdv
bmVycm9yJywgY29udGV4dC5vblNjcmlwdEVycm9yKTsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgbm9kZS5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgY29udGV4dC5vblNj
cmlwdExvYWQsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICBub2RlLmFkZEV2ZW50TGlzdGVuZXIo
J2Vycm9yJywgY29udGV4dC5vblNjcmlwdEVycm9yLCBmYWxzZSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBub2RlLnNyYyA9IHVybDsKKworICAgICAgICAgICAgLy9Gb3Igc29tZSBjYWNo
ZSBjYXNlcyBpbiBJRSA2LTgsIHRoZSBzY3JpcHQgZXhlY3V0ZXMgYmVmb3JlIHRoZSBlbmQKKyAg
ICAgICAgICAgIC8vb2YgdGhlIGFwcGVuZENoaWxkIGV4ZWN1dGlvbiwgc28gdG8gdGllIGFuIGFu
b255bW91cyBkZWZpbmUKKyAgICAgICAgICAgIC8vY2FsbCB0byB0aGUgbW9kdWxlIG5hbWUgKHdo
aWNoIGlzIHN0b3JlZCBvbiB0aGUgbm9kZSksIGhvbGQgb24KKyAgICAgICAgICAgIC8vdG8gYSBy
ZWZlcmVuY2UgdG8gdGhpcyBub2RlLCBidXQgY2xlYXIgYWZ0ZXIgdGhlIERPTSBpbnNlcnRpb24u
CisgICAgICAgICAgICBjdXJyZW50bHlBZGRpbmdTY3JpcHQgPSBub2RlOworICAgICAgICAgICAg
aWYgKGJhc2VFbGVtZW50KSB7CisgICAgICAgICAgICAgICAgaGVhZC5pbnNlcnRCZWZvcmUobm9k
ZSwgYmFzZUVsZW1lbnQpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBo
ZWFkLmFwcGVuZENoaWxkKG5vZGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY3VycmVu
dGx5QWRkaW5nU2NyaXB0ID0gbnVsbDsKKworICAgICAgICAgICAgcmV0dXJuIG5vZGU7CisgICAg
ICAgIH0gZWxzZSBpZiAoaXNXZWJXb3JrZXIpIHsKKyAgICAgICAgICAgIC8vSW4gYSB3ZWIgd29y
a2VyLCB1c2UgaW1wb3J0U2NyaXB0cy4gVGhpcyBpcyBub3QgYSB2ZXJ5CisgICAgICAgICAgICAv
L2VmZmljaWVudCB1c2Ugb2YgaW1wb3J0U2NyaXB0cywgaW1wb3J0U2NyaXB0cyB3aWxsIGJsb2Nr
IHVudGlsCisgICAgICAgICAgICAvL2l0cyBzY3JpcHQgaXMgZG93bmxvYWRlZCBhbmQgZXZhbHVh
dGVkLiBIb3dldmVyLCBpZiB3ZWIgd29ya2VycworICAgICAgICAgICAgLy9hcmUgaW4gcGxheSwg
dGhlIGV4cGVjdGF0aW9uIHRoYXQgYSBidWlsZCBoYXMgYmVlbiBkb25lIHNvIHRoYXQKKyAgICAg
ICAgICAgIC8vb25seSBvbmUgc2NyaXB0IG5lZWRzIHRvIGJlIGxvYWRlZCBhbnl3YXkuIFRoaXMg
bWF5IG5lZWQgdG8gYmUKKyAgICAgICAgICAgIC8vcmVldmFsdWF0ZWQgaWYgb3RoZXIgdXNlIGNh
c2VzIGJlY29tZSBjb21tb24uCisgICAgICAgICAgICBpbXBvcnRTY3JpcHRzKHVybCk7CisKKyAg
ICAgICAgICAgIC8vQWNjb3VudCBmb3IgYW5vbnltb3VzIG1vZHVsZXMKKyAgICAgICAgICAgIGNv
bnRleHQuY29tcGxldGVMb2FkKG1vZHVsZU5hbWUpOworICAgICAgICB9CisgICAgfTsKKworICAg
IGZ1bmN0aW9uIGdldEludGVyYWN0aXZlU2NyaXB0KCkgeworICAgICAgICBpZiAoaW50ZXJhY3Rp
dmVTY3JpcHQgJiYgaW50ZXJhY3RpdmVTY3JpcHQucmVhZHlTdGF0ZSA9PT0gJ2ludGVyYWN0aXZl
JykgeworICAgICAgICAgICAgcmV0dXJuIGludGVyYWN0aXZlU2NyaXB0OworICAgICAgICB9CisK
KyAgICAgICAgZWFjaFJldmVyc2Uoc2NyaXB0cygpLCBmdW5jdGlvbiAoc2NyaXB0KSB7CisgICAg
ICAgICAgICBpZiAoc2NyaXB0LnJlYWR5U3RhdGUgPT09ICdpbnRlcmFjdGl2ZScpIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gKGludGVyYWN0aXZlU2NyaXB0ID0gc2NyaXB0KTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybiBpbnRlcmFjdGl2ZVNjcmlwdDsKKyAg
ICB9CisKKyAgICAvL0xvb2sgZm9yIGEgZGF0YS1tYWluIHNjcmlwdCBhdHRyaWJ1dGUsIHdoaWNo
IGNvdWxkIGFsc28gYWRqdXN0IHRoZSBiYXNlVXJsLgorICAgIGlmIChpc0Jyb3dzZXIpIHsKKyAg
ICAgICAgLy9GaWd1cmUgb3V0IGJhc2VVcmwuIEdldCBpdCBmcm9tIHRoZSBzY3JpcHQgdGFnIHdp
dGggcmVxdWlyZS5qcyBpbiBpdC4KKyAgICAgICAgZWFjaFJldmVyc2Uoc2NyaXB0cygpLCBmdW5j
dGlvbiAoc2NyaXB0KSB7CisgICAgICAgICAgICAvL1NldCB0aGUgJ2hlYWQnIHdoZXJlIHdlIGNh
biBhcHBlbmQgY2hpbGRyZW4gYnkKKyAgICAgICAgICAgIC8vdXNpbmcgdGhlIHNjcmlwdCdzIHBh
cmVudC4KKyAgICAgICAgICAgIGlmICghaGVhZCkgeworICAgICAgICAgICAgICAgIGhlYWQgPSBz
Y3JpcHQucGFyZW50Tm9kZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy9Mb29rIGZv
ciBhIGRhdGEtbWFpbiBhdHRyaWJ1dGUgdG8gc2V0IG1haW4gc2NyaXB0IGZvciB0aGUgcGFnZQor
ICAgICAgICAgICAgLy90byBsb2FkLiBJZiBpdCBpcyB0aGVyZSwgdGhlIHBhdGggdG8gZGF0YSBt
YWluIGJlY29tZXMgdGhlCisgICAgICAgICAgICAvL2Jhc2VVcmwsIGlmIGl0IGlzIG5vdCBhbHJl
YWR5IHNldC4KKyAgICAgICAgICAgIGRhdGFNYWluID0gc2NyaXB0LmdldEF0dHJpYnV0ZSgnZGF0
YS1tYWluJyk7CisgICAgICAgICAgICBpZiAoZGF0YU1haW4pIHsKKyAgICAgICAgICAgICAgICAv
L1NldCBmaW5hbCBiYXNlVXJsIGlmIHRoZXJlIGlzIG5vdCBhbHJlYWR5IGFuIGV4cGxpY2l0IG9u
ZS4KKyAgICAgICAgICAgICAgICBpZiAoIWNmZy5iYXNlVXJsKSB7CisgICAgICAgICAgICAgICAg
ICAgIC8vUHVsbCBvZmYgdGhlIGRpcmVjdG9yeSBvZiBkYXRhLW1haW4gZm9yIHVzZSBhcyB0aGUK
KyAgICAgICAgICAgICAgICAgICAgLy9iYXNlVXJsLgorICAgICAgICAgICAgICAgICAgICBzcmMg
PSBkYXRhTWFpbi5zcGxpdCgnLycpOworICAgICAgICAgICAgICAgICAgICBtYWluU2NyaXB0ID0g
c3JjLnBvcCgpOworICAgICAgICAgICAgICAgICAgICBzdWJQYXRoID0gc3JjLmxlbmd0aCA/IHNy
Yy5qb2luKCcvJykgICsgJy8nIDogJy4vJzsKKworICAgICAgICAgICAgICAgICAgICBjZmcuYmFz
ZVVybCA9IHN1YlBhdGg7CisgICAgICAgICAgICAgICAgICAgIGRhdGFNYWluID0gbWFpblNjcmlw
dDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvL1N0cmlwIG9mZiBhbnkg
dHJhaWxpbmcgLmpzIHNpbmNlIGRhdGFNYWluIGlzIG5vdworICAgICAgICAgICAgICAgIC8vbGlr
ZSBhIG1vZHVsZSBuYW1lLgorICAgICAgICAgICAgICAgIGRhdGFNYWluID0gZGF0YU1haW4ucmVw
bGFjZShqc1N1ZmZpeFJlZ0V4cCwgJycpOworCisgICAgICAgICAgICAgICAgLy9QdXQgdGhlIGRh
dGEtbWFpbiBzY3JpcHQgaW4gdGhlIGZpbGVzIHRvIGxvYWQuCisgICAgICAgICAgICAgICAgY2Zn
LmRlcHMgPSBjZmcuZGVwcyA/IGNmZy5kZXBzLmNvbmNhdChkYXRhTWFpbikgOiBbZGF0YU1haW5d
OworCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAg
IH0pOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoZSBmdW5jdGlvbiB0aGF0IGhhbmRsZXMg
ZGVmaW5pdGlvbnMgb2YgbW9kdWxlcy4gRGlmZmVycyBmcm9tCisgICAgICogcmVxdWlyZSgpIGlu
IHRoYXQgYSBzdHJpbmcgZm9yIHRoZSBtb2R1bGUgc2hvdWxkIGJlIHRoZSBmaXJzdCBhcmd1bWVu
dCwKKyAgICAgKiBhbmQgdGhlIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgYWZ0ZXIgZGVwZW5kZW5jaWVz
IGFyZSBsb2FkZWQgc2hvdWxkCisgICAgICogcmV0dXJuIGEgdmFsdWUgdG8gZGVmaW5lIHRoZSBt
b2R1bGUgY29ycmVzcG9uZGluZyB0byB0aGUgZmlyc3QgYXJndW1lbnQncworICAgICAqIG5hbWUu
CisgICAgICovCisgICAgZGVmaW5lID0gZnVuY3Rpb24gKG5hbWUsIGRlcHMsIGNhbGxiYWNrKSB7
CisgICAgICAgIHZhciBub2RlLCBjb250ZXh0OworCisgICAgICAgIC8vQWxsb3cgZm9yIGFub255
bW91cyBtb2R1bGVzCisgICAgICAgIGlmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHsKKyAg
ICAgICAgICAgIC8vQWRqdXN0IGFyZ3MgYXBwcm9wcmlhdGVseQorICAgICAgICAgICAgY2FsbGJh
Y2sgPSBkZXBzOworICAgICAgICAgICAgZGVwcyA9IG5hbWU7CisgICAgICAgICAgICBuYW1lID0g
bnVsbDsKKyAgICAgICAgfQorCisgICAgICAgIC8vVGhpcyBtb2R1bGUgbWF5IG5vdCBoYXZlIGRl
cGVuZGVuY2llcworICAgICAgICBpZiAoIWlzQXJyYXkoZGVwcykpIHsKKyAgICAgICAgICAgIGNh
bGxiYWNrID0gZGVwczsKKyAgICAgICAgICAgIGRlcHMgPSBbXTsKKyAgICAgICAgfQorCisgICAg
ICAgIC8vSWYgbm8gbmFtZSwgYW5kIGNhbGxiYWNrIGlzIGEgZnVuY3Rpb24sIHRoZW4gZmlndXJl
IG91dCBpZiBpdCBhCisgICAgICAgIC8vQ29tbW9uSlMgdGhpbmcgd2l0aCBkZXBlbmRlbmNpZXMu
CisgICAgICAgIGlmICghZGVwcy5sZW5ndGggJiYgaXNGdW5jdGlvbihjYWxsYmFjaykpIHsKKyAg
ICAgICAgICAgIC8vUmVtb3ZlIGNvbW1lbnRzIGZyb20gdGhlIGNhbGxiYWNrIHN0cmluZywKKyAg
ICAgICAgICAgIC8vbG9vayBmb3IgcmVxdWlyZSBjYWxscywgYW5kIHB1bGwgdGhlbSBpbnRvIHRo
ZSBkZXBlbmRlbmNpZXMsCisgICAgICAgICAgICAvL2J1dCBvbmx5IGlmIHRoZXJlIGFyZSBmdW5j
dGlvbiBhcmdzLgorICAgICAgICAgICAgaWYgKGNhbGxiYWNrLmxlbmd0aCkgeworICAgICAgICAg
ICAgICAgIGNhbGxiYWNrCisgICAgICAgICAgICAgICAgICAgIC50b1N0cmluZygpCisgICAgICAg
ICAgICAgICAgICAgIC5yZXBsYWNlKGNvbW1lbnRSZWdFeHAsICcnKQorICAgICAgICAgICAgICAg
ICAgICAucmVwbGFjZShjanNSZXF1aXJlUmVnRXhwLCBmdW5jdGlvbiAobWF0Y2gsIGRlcCkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgZGVwcy5wdXNoKGRlcCk7CisgICAgICAgICAgICAgICAg
ICAgIH0pOworCisgICAgICAgICAgICAgICAgLy9NYXkgYmUgYSBDb21tb25KUyB0aGluZyBldmVu
IHdpdGhvdXQgcmVxdWlyZSBjYWxscywgYnV0IHN0aWxsCisgICAgICAgICAgICAgICAgLy9jb3Vs
ZCB1c2UgZXhwb3J0cywgYW5kIG1vZHVsZS4gQXZvaWQgZG9pbmcgZXhwb3J0cyBhbmQgbW9kdWxl
CisgICAgICAgICAgICAgICAgLy93b3JrIHRob3VnaCBpZiBpdCBqdXN0IG5lZWRzIHJlcXVpcmUu
CisgICAgICAgICAgICAgICAgLy9SRVFVSVJFUyB0aGUgZnVuY3Rpb24gdG8gZXhwZWN0IHRoZSBD
b21tb25KUyB2YXJpYWJsZXMgaW4gdGhlCisgICAgICAgICAgICAgICAgLy9vcmRlciBsaXN0ZWQg
YmVsb3cuCisgICAgICAgICAgICAgICAgZGVwcyA9IChjYWxsYmFjay5sZW5ndGggPT09IDEgPyBb
J3JlcXVpcmUnXSA6IFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZSddKS5jb25jYXQoZGVw
cyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvL0lmIGluIElFIDYtOCBh
bmQgaGl0IGFuIGFub255bW91cyBkZWZpbmUoKSBjYWxsLCBkbyB0aGUgaW50ZXJhY3RpdmUKKyAg
ICAgICAgLy93b3JrLgorICAgICAgICBpZiAodXNlSW50ZXJhY3RpdmUpIHsKKyAgICAgICAgICAg
IG5vZGUgPSBjdXJyZW50bHlBZGRpbmdTY3JpcHQgfHwgZ2V0SW50ZXJhY3RpdmVTY3JpcHQoKTsK
KyAgICAgICAgICAgIGlmIChub2RlKSB7CisgICAgICAgICAgICAgICAgaWYgKCFuYW1lKSB7Cisg
ICAgICAgICAgICAgICAgICAgIG5hbWUgPSBub2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1yZXF1aXJl
bW9kdWxlJyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNvbnRleHQgPSBj
b250ZXh0c1tub2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1yZXF1aXJlY29udGV4dCcpXTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vQWx3YXlzIHNhdmUgb2ZmIGV2YWx1YXRp
bmcgdGhlIGRlZiBjYWxsIHVudGlsIHRoZSBzY3JpcHQgb25sb2FkIGhhbmRsZXIuCisgICAgICAg
IC8vVGhpcyBhbGxvd3MgbXVsdGlwbGUgbW9kdWxlcyB0byBiZSBpbiBhIGZpbGUgd2l0aG91dCBw
cmVtYXR1cmVseQorICAgICAgICAvL3RyYWNpbmcgZGVwZW5kZW5jaWVzLCBhbmQgYWxsb3dzIGZv
ciBhbm9ueW1vdXMgbW9kdWxlIHN1cHBvcnQsCisgICAgICAgIC8vd2hlcmUgdGhlIG1vZHVsZSBu
YW1lIGlzIG5vdCBrbm93biB1bnRpbCB0aGUgc2NyaXB0IG9ubG9hZCBldmVudAorICAgICAgICAv
L29jY3Vycy4gSWYgbm8gY29udGV4dCwgdXNlIHRoZSBnbG9iYWwgcXVldWUsIGFuZCBnZXQgaXQg
cHJvY2Vzc2VkCisgICAgICAgIC8vaW4gdGhlIG9uc2NyaXB0IGxvYWQgY2FsbGJhY2suCisgICAg
ICAgIChjb250ZXh0ID8gY29udGV4dC5kZWZRdWV1ZSA6IGdsb2JhbERlZlF1ZXVlKS5wdXNoKFtu
YW1lLCBkZXBzLCBjYWxsYmFja10pOworICAgIH07CisKKyAgICBkZWZpbmUuYW1kID0geworICAg
ICAgICBqUXVlcnk6IHRydWUKKyAgICB9OworCisKKyAgICAvKioKKyAgICAgKiBFeGVjdXRlcyB0
aGUgdGV4dC4gTm9ybWFsbHkganVzdCB1c2VzIGV2YWwsIGJ1dCBjYW4gYmUgbW9kaWZpZWQKKyAg
ICAgKiB0byB1c2UgYSBiZXR0ZXIsIGVudmlyb25tZW50LXNwZWNpZmljIGNhbGwuIE9ubHkgdXNl
ZCBmb3IgdHJhbnNwaWxpbmcKKyAgICAgKiBsb2FkZXIgcGx1Z2lucywgbm90IGZvciBwbGFpbiBK
UyBtb2R1bGVzLgorICAgICAqIEBwYXJhbSB7U3RyaW5nfSB0ZXh0IHRoZSB0ZXh0IHRvIGV4ZWN1
dGUvZXZhbHVhdGUuCisgICAgICovCisgICAgcmVxLmV4ZWMgPSBmdW5jdGlvbiAodGV4dCkgewor
ICAgICAgICAvKmpzbGludCBldmlsOiB0cnVlICovCisgICAgICAgIHJldHVybiBldmFsKHRleHQp
OworICAgIH07CisKKyAgICAvL1NldCB1cCB3aXRoIGNvbmZpZyBpbmZvLgorICAgIHJlcShjZmcp
OworfSh0aGlzKSk7CkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdo
dGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvYm9vdHN0cmFwL2ltZy9nbHlwaGljb25zLWhhbGZs
aW5ncy13aGl0ZS5wbmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpDYW5ub3QgZGlzcGxheTogZmlsZSBtYXJrZWQgYXMg
YSBiaW5hcnkgdHlwZS4Kc3ZuOm1pbWUtdHlwZSA9IGltYWdlL3BuZwpJbmRleDogUGVyZm9ybWFu
Y2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2Jv
b3RzdHJhcC9pbWcvZ2x5cGhpY29ucy1oYWxmbGluZ3Mtd2hpdGUucG5nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29t
cG9uZW50cy9ib290c3RyYXAvaW1nL2dseXBoaWNvbnMtaGFsZmxpbmdzLXdoaXRlLnBuZwkocmV2
aXNpb24gMCkKKysrIFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhh
bXBsZS1hcHAvY29tcG9uZW50cy9ib290c3RyYXAvaW1nL2dseXBoaWNvbnMtaGFsZmxpbmdzLXdo
aXRlLnBuZwkod29ya2luZyBjb3B5KQoKUHJvcGVydHkgY2hhbmdlcyBvbjogUGVyZm9ybWFuY2VU
ZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2Jvb3Rz
dHJhcC9pbWcvZ2x5cGhpY29ucy1oYWxmbGluZ3Mtd2hpdGUucG5nCl9fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6
IHN2bjptaW1lLXR5cGUKIyMgLTAsMCArMSAjIworaW1hZ2UvcG5nClwgTm8gbmV3bGluZSBhdCBl
bmQgb2YgcHJvcGVydHkKCmlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFkVUFBQUNmQ0FNQUFBQ1kw
N043QUFBQzJWQk1WRVgvLy84QUFBQUFBQUQ1K2ZuLy8vOEEKQUFELy8vLzkvZjF0YlcwQUFBRC8v
Ly8vLy8vLy8vOEFBQUFBQUFELy8vL3c4UEQrL3Y3Mjl2WUFBQUQ4L1B3QUFBQUFBQUQvLy8vLwov
Ly9hMnRvQUFBREN3c0wwOVBULy8vLy8vLy8wOVBUMzkvZi8vLzhBQUFBQUFBQ3pzN1A5L2YwQUFB
RGk0dUt3c0xELy8vLy8vLy83Cisvdm41K2YrL3Y3Ly8vOEFBQUR0N2UwQUFBRFB6ODhBQUFEOS9m
MzI5dmJ0N2UzNysvdm41K2Y2K3ZyaDRlR1NrcEwrL3Y3Ky92N0IKd2NHWW1KaDBkSFRoNGVIUTBO
QUFBQUR6OC9PN3U3dWhvYUdBZ0lEOS9mM1UxTlJpWW1MLy8vL1YxZFg0K1BqYzNOejYrdnI3Ky92
cAo2ZW43Ky92OS9mMzkvZjNSMGRIeTh2TDgvUHo0K1BqcjYrdjgvUHkydHJiR3hzYmw1ZVh1N3U3
MTlmWDkvZjFsWldWbloyZnc4UEMyCnRyYmc0T0QzOS9mNit2cnA2ZW5sNWVYNit2cjQrUGpMeTh2
Ly8vK0VoSVR4OGZGNGVIajM5L2ZkM2QzNStmbkl5TWpTMHRMczdPejYKK3ZyZTN0N2k0dUxtNXVi
ejgvT2JtNXVvcUtpbHBhWGMzTnp1N3U3Ly8vL3g4ZkhKeWNudzhQRC8vLy8vLy8vZTN0N0d4c2E4
dkx6cgo2K3ZXMXRiUTBORGk0dUw1K2ZuMDlQVGk0dUxzN096MTlmVzB0TFQvLy8vOS9mMzcrL3Y4
L1B6Nit2cm01dVlBQUFEazVPVDgvUHozCjkvZXdzTENabVpuOS9mM3M3T3o4L1B6QndjSHA2ZW4v
Ly8vYTJ0cnc4UER3OFBEMTlmWHg4ZkgrL3Y3NCtQaisvdjZPam83aTR1TDcKKy92NStmbmMzTnov
Ly8veTh2TDYrdnFmbjUvdDdlMzM5L2YyOXZibzZPano4L1A2K3ZyMTlmWDE5ZldtcHFiTHk4djYr
dnI0K1BqVAowOVByNit2Nit2cnI2K3VxcXFyejgvUHQ3ZTJpb3FMUHo4L2EydHJXMXRhaW9xTHI2
K3ZpNHVMNStmbFZWVlhOemMzLy8vL1cxdGJqCjQrUGg0ZUhxNnVyOC9Qei8vLy8yOXZiNysvdno4
L1AwOVBUTXpNei8vLy8vLy8vNStmbjE5ZlgvLy8veTh2TDkvZjBBQUFEWjJkbjgKL1B6Nysvdjgv
UHpwNmVtL3Y3LzcrL3ZxNnVycDZlbisvdjcvLy8vNGNrL21BQUFBOG5SU1RsTUFHZ0RVendJUDhT
TVE3NTlmQ2dVdgpxZkRHRmVJWUE3OGZieE5UdDk4L2hzVi9CaGRENFExclJJK3Z3bzNBVHhKVEQx
OElvS1dhc296VEVUYlE0RDQwSVg1aEM2ZEFNUjdSClh5ZHZFc1J1b3RLTGtaQ0FUWWFoa3pPeFFs
RnFtYlp3SmlVaEZXeTF3eUpZY1hJN2dCMlhJRUZiZ2p4Z2lXRnRmVFNGTXk4d1NZZ0UKcUZCRFRT
RTJLQ3BuU3laWlVhWkhSRkFzRHVXQllKSjdBVlpRcEMwWjZuakJLV2pkTjRkbE1WMzBpTjhiVjcr
ekpKZUhNUmlEWXNSNgpVOXlWWXhkUDJjMWRqOENLRlpaVkZqdGFhVHhPSTljTUtRazRObkJXNFBL
VU9taU5JL2t3V29RWVVkUU9TazZHdmtVVVJGU00zbjcxCmgxNEFBQjR0U1VSQlZIaGU3SjJIZnlQ
SG1hYS9ZaWNDRFRRQ1FSQWtRV2dBQnBNY0RTa093M0NHTTVvOEdrMlFSamxaT1ZqQnNpemIKY3M1
cG5kYjIycjdkMjN5YmM3emJkRG5ubkhQTytkNi80RmpkSUd1NnZtcDI4MEN0YkYrL2trbi9uaXAr
YVBTRERxQStGT203SjNuYwpJb0RpME5BUWtZM2QySWFKU3dzMk5OWlpuQ291ZHVoQXNyZ2Y3bzRC
WXk1OU80ZnZuM1JPSlFLb1JFa0JHS3FZeXRBSkNDRVFXaDIyCjBJODFUUEZJb3pMYU5pQ01INFBK
cjQ3V0lvb0wxQzFpc1VVc0ZTd3BrTXFQQU1BUkRVSUZqTGNZcGo1dEdibXF3K1A2Ymh6NDlqWncK
Ylo5UzlrOEtkMjBRUUxEZHpGYmRJei9KSjBPRnlKRmFJNm1PY1o2SEdPekFHeGRpMHROOEpMMDYz
Q21Kd2k5RnZpWDM0bTRGVXJseApsMFBnYUJnSWJyWEpKZlZwMDh5VHJicTJ0dDk5YklOdENqOXAv
MlRpWk1NaWdDellHYTBXeHdCZ3JFanhDQlVpY2k1Nm9ieUxqc0YrCi9lejhLR0x3VWR4Vkp1cTlI
WmNwbGpYMTZsZ2psYWVnOGhUcG1VVk5xdWJjVWp6TktuQmJHSUJiSlM2cFQ4bk1vNWlsQW1zM2t4
c0EKYkVsdnNQMERxUDJUdHQ5S3NFWUlvQkVMcFd4V0R5SE1vY1NEZFVpQ1lNWUR2Sm1BbDVzVUUr
Y0RnaWFpTE1kNkZyVEpVbXNrRmFUeQpFYWg4SlBac2lydThXR0w4b3VMcHgycmZxc2hrVlFpeCt6
L09veVJJdGU2NEdhbFhzYjUvSkZYN0o0VWZ4c1ZJM0VVY015clZyYnFBCnRiVlZCMXg5NnEzOWY0
WW8wZ29ZcEJKNkVtaFdhMzFueDNXclVtc2tGYVR5SmFoOGlWU29mTnJxWTJ1bUhPZU5zeUlRNDU3
a3NVVG4KbFAwZHE0TmZWeXVMcnBUS0xsSHkwc1VwMVVBU3EvMlR4cjJBU0FpaXdKdk5ZclZ6Qkxq
VWJKNEJqbFMwcWJkRS8vU3RVZ0FFeEFNeQpXRzJqSTJFRkRkM3F1ak5zV2NQT2VzeHF1WTZkMU9P
U21pTWJJZDRZQ1RUK0JFcTB4RGpSS0FDTThtTzFId0YybVltK0RuUmRyUlJoCnQ1aFVtUlBIQWVE
NENkTDNqd0JFQlEzT2hlQzg0VkUvWGkyTDFROWZCMTRrT2dGYy8remVWZ21nSkt1VlRuenNQU2gy
aUZvbmNZODIKdVZydzE0YUgxL3hDTlZic3pPNGhlWWEwdkRQazMwdWMvK094djJMZ0JBQUdkalNN
OFI1NDhPdnFveEhpVWwwYllXeVg3UjhoMVA1SgoyMitIVUlsQXhYU2w1RllEZVpTNjdoSGdUTy8v
MmFvUGJXeTEycjlKcUZWaWZGc3FzTFlHYkd0bEp5cStWMlR1QlJyQTNXVGdzL0FZCjcwUzMwNTE5
WEZlYmcxOVgzNTIwK2Jha2N0Qk8yaitaK050MjNxc2R3ZHV5V0NXbmpqQjFoL1p2ZFdrcWhQeEtW
aGkzZ01hbWgySWwKaG4zMDR4ZUlhVFZKcFZsc1RwOUZMUnQzRjlEUGd2dG1YMWN6YmY0RlNlWGdo
Y1Q5azRXWExZeHRnOG9ZckxKUktaTlRDN1hXYTdSLwpxMVJEQ0RmcTdSbHRwRHdpeFBUY2pJZGlp
MVI4N01ZbnB0VWt0ZEtZbjZQejg5WlNKajZsNms4TmNBK2M5YnFhdnZtRjZqYmRIcXdXCjB2WVA1
L3E5ZExHbzdxVlRyWTVPWEtuWHIweU03bTNWK0Z6SUFzNFMwY3JFY2tDbUJET2VkWTFVQ21JMyt0
TjBMalV1Y2FuMHlET3kKY2pEOFBaazRWSkRDQjMrL3FtbXRTcWxjNjhnMmRVWUtsTEovVXJnek1s
NzNHdTN4RVNmRnFvcnp3TzBPc1hpSTRrbXJDZS9TUm9RNApUM3NsT0syZWEwcWEwMDFUZ2NpMEUy
VGlRa1ZrNXRIb29POVhuWUpEV2NQM1R6b3ZUNHhPTDVkSml4RHFYejI5Z0hoR1JaVFJJUm9nCnpU
Mmw1bWs2YjhGK0c1S2h0eUI1L2orMm1pZTNtaWUzbWx2Tmsxdk5rMXZOazF2Tmsxdk5yWmJvdXk2
NVZSOCtzU1QzVUpiR3BvcGoKSllaZG9Oc0ZYR09wdERycGZBbjlMR1d2VTV4YUxKRnZtcjlZY3Uz
a3pzdFl1aUhyVXVhVUZzZkdGZy95UU9GYStIYUNJQWVITU5UbgpQZ0Evd1NybnJnM1VQUEQrMVI4
QUhud1ErSUVVcTd4T052NHcrcms3ZXgydkJoUmhuZzlrcytveUdBWFU2WFlyUk9UelhuVGc0UHJS
ClczRUFJUVFJOHR1ZVZuM0krR2Fybk51b3o0K096dGRaLytwbDRLV1hnTXNwVm5tZGJId1dJZ3ht
OTFYSEE3SnhpSjFBNjRqSHZKZzAKV1MwQ21CcXpXZjNOTFNHMk5tR1Rub3BDT204bDhSWktwTnNE
U2JHMGwxVWZVWHlqVmNaTHFFOEVvR0NpcmoxY0MvMjBFcTN5T2dqcgpNTDZ3d0hnTEZvV3hVR0h6
aWN4MWlCNENRSnk3SWVlN1M0YmlBdzRRVU05azFYaG9kekUrMXlScXpvMnprM1lYa1BaYVpPRG9F
Smw0CjhhdlZVNXBWUVFqRkpsdFZVZ0hmWkpYOU4vRER1SjNDZXJkci9hc3ZBNWljQlBCeW9sVmVC
NnlPNUIyZ28vT1hkenBKTHVBVlZzZXUKR092MC8yTStjZTZFbk8wdUlSTzNlbFBiY2lhcnM5VXlo
U2xYWi9rSnZvVlNDUzNPYWVOUkNUaS81OWo3VUdGYzBKN1hWU1dWYWQyaApwdjVWRU85ZlBRWGd3
eDhHY01yNENSeWJUSFdnNmlqdW5nSk91Um8vaHArZ01EK0J3NFk2WGIzT3JPU0cxQlRQZEt4Q0pa
TlZmSm42CitiS2hUbk1jR0c5eVR2KzVacmI2Q1FUNExMdFFFQWtCSVJLdEZnUjJJZ3BackRhOGFF
enZYNjBBUUJBQVFJVmk2YmR6RWE5akE3YXMKbzNGbkdwaDJOQTU4bmNKOEhUQnN6NS9RNjlRa0Qx
T005VG1OanU3eVlzcXhtdEZxSTQ2Zm8zNmVnOEhTendNL2I3TDNmUjZSa1lQdwpmVGR6UVZCdE9r
bFd1VDF1bGZldkNpSDAvdFY3c1p0N3pkMW92TTVGNEtLcW96Z0JwSE1BNkJCMUFJRE5iMHl1R092
SVZQQWs4WVQxCkJ6dFczZnE1clhNYjlmWmpjZXhFRXdFSHBqUHcrTGp4RFB3SDJ4SGd2SUlQTXk1
RUJxdENpQlNyNmYycnN3QWFRalFBekNic0ZWWW4KMk53TVZCM0ZDV0QxQWVDOVJPOEZBRGIvbVo2
YXo3ZnpjZjE1K1dyN0J6aFduWW5WNWlycjFnUHRXQ1g5c3dTYlFIT3JYTjVxY2s2MQpCeVRnZlBZ
OUR6VUMvczZHSUNmc2JWWENGS3RwL2F0TC9ZOXBIUUtBSlVPWnlVbndPbk56WVIzR2hXQWNLbUR6
SGJVOUdmcHN2ZmNwClBzaDExWmhOWlhWVEc1cWJ0NmhKOGwvT1QvZUlUUHlqWDZsOWtHOG1xZTBj
d0dwNi8rcmRBSENkNkxyK2V3S29wTmJoM0d4MWtEb0UKVC9IQnJxdkd6Q21yYzZRbEdGRkE0ODBr
M2p4ZFpwc0pFb0NnZUU4bGhmZFFRMkpvY2pLajFmVCsxUm9Bdkovby9RQlFTN2ZLNjNDZQpaalc5
VHNPck0xNGRIVytyK2FuNnZGM3FaYkpLeXVyQnBHblFRcGljTkRZMEU0YUFYblFDNzMrTmgzWFpz
djVWMW93NlJ6UW52NC95Ck1qSlo2bkRPNjRqTWRhWkhKeGd2VUhuWk5EK2gvdWd1SGRYbVUwS0VV
RjhQUHBFUzBlc1pHNXBKREFreGREUE9rL2RDNU1tdDVzbXQKNXNtdDVzbXQ1bGJ6NUZiejVGYno1
RmJ6NUZaenErWUd3MTN1c3lIWE5qY0hLS3JIWnd1dnBLV0xpbm1Ec0VDR2xBd2RORDVSMnZJZwoz
OVZXcTBhdGZWNVkxNGZzMnJ5SWt0VnFqYlVlcG1VVzl6STJDVXllczlBbG52Slp0RWZpYUFFTCs3
T2FiQnFKUTYxOXJTblQ0andLCmlDSGFSYUQwOE1kRnZWRG5XaFZYV3BtOWpGWXJFZjVBd29ZUXox
SU5OUVo3UUc5MUdKZkprSCtHQnpTeWdoV3lKb1VBaEppMFNJWFIKQWF3MjkyVzFlU0JXRTR1STNZ
QUlHQU9ZVnNXbDFzR3N2aExoWTNGYWhONlNxWExzMHhaS3h1ZDVRdXJtZVFlZTB4R0lSbnJSRC9W
RwpGRTZpSktJUWowZ2RZc2pJMVJDektoRXJuV3JWajNIeTBZM093Q0RhcXgyWWE5Mi9WZUJZaEs4
RGJMcGxBYmNDN01UMnZoL0VNWlBWCnlocmFaQWpnTUdSZTlTMlJRaVdKZzUxOUQrb01uUGk0ZTFu
MW9SZVpKWExIS3RKcU5VRnJOYVoxRUt1eklzd3N0enArNmRLNDRWbSsKM0FoK0NtaVo5L3NEeEZO
Qm5YNi9yVFlWSHV3TXZKQm1kY0ZzMVlkbXRZcDd5TFZSZEVGVVNOQmFpR3Nkd0txS3hxMHZBRit3
dU5WVApuKzY4YnVIN3VRcXhkUlluWFdMNVhYeHRZS3RDaGZIRWdjSFB3S0VlU2l4UEpPM0JaSFZk
dDFvUWM2NE53RVpNM3pxcHhQbjYrcHRoCjlmaUx3SXZIbWRVT3dzd2FWRFRQYitCK1lua1lQM2R3
eDJybXU2WFdRWnlCaGRnb2dIajVYWVRDaGhDbStvV3FadFh0dG40RVlXN1cKcHkrZXFiaS9Yc2hr
MWRxeTltTVZIOWphK2dDWTFZY3NJY1FXMERHcCtHa2NKcFliZUdsZlZrdEFhWENyellNNUE2L1Ez
bFpwSldFNwpDOVVZcjB3QlA0a3dTaCtUS3JtU21zV3FOZHdjdHJoVjBRKzNpcE1ud2F5NmVGN3Vz
alllNGxaYnBScGVJQmJnZS9abFZabkkwbnlYCk9qRDRQVENIdThoazI2dHZoNmdRNXlwS0g1TWFj
U1dWVzYzRzlWbkRUcmlZTG5OUmhFeUxkV1NhV3pMWDhBVTUva245OHpwWHdXNlgKMU1qLzBOa0NG
aEtPeW0wZW1WZ1liS1hhZzc0SE50Y2hHR3lQVG15SDJWYloxYWRMVmJ5a3BHcFc0MXhLSmFsVjM0
cWQzMEt3amt4agpTMllYNFdMWEZmWStGbUVha3ozU1lwdCtIN2xTWFdGSEpWdWQrdmZYYW5OQXF6
eHBqMXZRcFNwZUxtUTdWVW1wVWl2clR3OUVtREpsCnl0eTI1U0Q2b1ZIRDQwNHpxVFFpTWFPRjNS
L1MrSWJvWjZNdzRQckRCM1VHRnBSY2h4VGtTWDNjd2VQUWQwWlcyUDhaTkhrdlJKN2MKYXA3Y2Fw
N2NhbTQxVDI0MVQyNDFUMjQxVDI0MXQrcTJhT0FzMHJkVmNxdXVYYXdZRnJwZFRGNi9sNmVESlVx
T3UwU0R4dmRwSDhtdAp1czhlUjlIVW5RM2Z0SzR2QU5zbFBTZHhpc09sS2NqWjh1YzZqSTlSeXp5
L1dLRXVxK1VuOUtPSFc1VkErVkFTbityUUFjUjJ3eS9KCnZBV3dvWWp5dUQ0dkZEbndUZGkzM1po
VjF6NTV5YkpZeDBCOXN3MlVET3ZyUnFLMGRBSGNaMTZDMnhwMlQxeXdudE80ZDNhQ2NKWFAKSDY5
Nk00RVBtMHMxYVFXa0lTUlFQcFRFZ2NVV0dRS0FrTGtuQnRJUmxGYkdtNnlVb2t5ZUhESnlHTFQ2
UUtSVlRjUEpTOFA2V3EvMQppYm5sTmc0YjF0Y0Z3SFIzak91bm44S21FR0xraEczZk1lSm9mUFI4
eVFjV1hYMSt1VEFhK01BRlRXcEJBS0xBdEFMU0VCSW9IMHJpCkFJcmR3YTFLRVZBMk9BZk1ReVo1
Y3NqTTE0bGxIWDJ0YWhxT1gyUExTcjAvNmtrd3JLOXI2dHMrRmNLYXExZVppeDdoK0FuRys0dVoK
citsOG9VSyszcDNoTGlKVVJWaGtqeUFOZ1F6VU9KVEVJV04zQnJVcVJTZ2JCczVLS2NybHlTSE9F
MXRYSXExcUdsOFYxTVBoMEtKbApXRi9YMEFWWVFqdWs5eHV2YjdDR1R6QitQNnc2VUwxRDR3c29M
ckx0dHJFYlc3Y1JqcEdSOGlGWGNhTWwzeDNVS214bHc4QlpLVVdaClBGNklTK1ZhdVZTVk5qRFdI
UU11OFBXQkk2dTErRUZjL2FUQk5RRTdVbTNHZjNSclpNSWJMemdhZjZjSEtUVitncitnckY0dzJp
QWoKNVVOckdtZVdwZ2EyR21YTnpIa3BqYktYc2MyMnY1SFV1dElBc0RiRXBhbzhnQ2cveHRjSEpz
bjE5WFYvN2tHRTRWYWZrdlZ0TUY1bwpFcDB1bDNRZXpIaFNLdlRYWWZTcEovWTZCU3lsU0tkODZB
N0ZqWmFxend4c05YcUVPeEk0SzJXbUkySW5JM3o3ZlRMR0R4OTNLSHhMClk1Wkt2UTNJYkRZTjZ3
TURnTGErcm5mNWkxNkMxWStNYjljSEdKZHArcHdITXhzRkFralRHZzNxVWdrWWxvN01sQTg1aWhz
c1daTUYKWjFDcjFyQTZUZ3ljV3pWVEZjUDIrNGxTaDUwaG9xZmtXeG9wbGVkZEZvRDZuR2w5WUFE
NitycHRyQjJTdUU2eE5OQ2x1YkxqZHRGZwpmRHRtSHF3b3JyUkc3MngwcVFTRW9relVPSlRFdzdk
YUk3MUI3NWFrVHlYVndGa3BUcmxWcmpWWjZoRFJaWnk4WkpaS3prVVBqVE5rCldoL1lzSkwreHp6
SWVMZkg4WjNZeVowRDhlUzJaU0FVbFVENVVCSUgycWZQRC83T1J2cFVVZzJjbFRKVG9jSzMzL3pP
cGk5MWlGcXcKZnZDYVErWUVNNDNIMUZqS2Vyek4wMVVQcUo0TzRuajFYQU15alhPckEvSGt0bVVn
RkpWRStaQkVMdWVOeWVWbVFrOG1aVzdkSjJuSQo1VklsandhWlAwWjV1Rlp6VTM0a2RZaXViWTJj
ZHlncHdiUnlsTG9lYjdNd0trU0I3WmpWYVNFenZUb1lUMjViRmtLMUlYUEtoMExrCmNEN2Rvd05J
Vk5reDh1Z0xPL1k0VGRkcWJzcVBwQTZSMDZUdnZPUnhFbkRlQ3pGbzhsNklQTG5WUExuVlBMblYz
R3FlM0dxZTNHcWUKM0dxZTNHcHUxZHpmKzVaeDFTaHhjUFVIVDJ1cWt0Ujl1Ti80U1Q5VVdUaElx
NjV0YUk5NVM3Z2FBc3lkZFRXUHpjL0NCODVKbkhUMwpaZFZ1VVVMZWwyQzFVc1RDWUs4YXQwWEFV
TXNOcmRxbTlwaTl1UWQ0KzVrUHE1NjlQcmsrZ09JU2thRVBlWFMrRG5zL2ZKelhKMm9wCmxNbkdB
b0MxZlZsVjI4L2tHVlg1Mjl4NzUwQlc1WWN2Z0VveDdFWXJBWUFRckw4MzVJQ0pXMDlYcTA5YjV2
a05HUGk1a1lsNWpiUEgKVlZtcmpRTWZxcFdJOVNFL1F2VElSQjBsblFkRWdabFhhcncrTFJWQmFU
WjRvM29wdTlYT1ZRQUxDVks5K2FxeGtqY1RER1QxMlJxSwpRQkcxWjRlSURnTUFFZXZ2bFZ5R2My
L1lLUlNjWWM4MDMzcG1ISXhicTFjcmdaV3hQcm00cXd5Yy8xQ045RDdrQ253ZmxkdHhUT1BSClJ4
YzRqM2JpdU9McXlLT0VtR3kwYXBDcHRUSmE3UllSeG5UYzN5dmxGWXhXcGRSQnJEWm5QSVF2anVZ
UVVRMFFna2dJcmVkVGNobk8KbzVQUkd1ZldaSDNZK1ZtUGNlRFVaMTJBYzFsZDV6dC9CRjFHNjBN
T3FrQTFDTHhaamRQVmxvMDF6a09wTStVNGI5a3BhNW94R3lmNwovR1EycXo1VUN5ckx5b2FTcDFW
NktLVnRLZnZpcmtORURXQ0gxa2hsTDc0dThUcm5sM29UVHFYSU9YQm5idzBtVGdTZFE2YlhnNHpl
Cmg3d2VQclpYMC9qVnNGK1M4VWhxb1BFcHBGaGxOa2FFQUtBM2NKSnR2aTNvWUNmV1k0YTczQlV1
MVErcmk4SkJXajBVamJQK1hzbGwKT1BmQ1J0YzdQSjNMKzhSS01Yc2Q4K09LS3pnbmdNbXFKNFRX
aDF4QnRTcS9IdEw0ajF1eUM0dnhVaVJWNDQ5WktWYTVEZk5CZWNtRApqSGNwamg5Rll5TTgxVlNI
ZzVTN1hIWlhQSkJWTWU5SjJKZ1hRMFJ2aThaWmYyL0lBUk8zWGQ5M2JjNWhkNHJtT2tJWXVTQVNP
aWVuCldpc0JmN0oyRitsOXlNRjhvVEFmSE5IckhIR0dxOE1PTVk1UXFzNkQ0U3FBcEhVRGxZMVVx
ODAzSVBOR000NnhPYjNTNjBGOUpJSGQKNVdhN0srNXZqY2o4QitkYnhlaTlTYkUxRlBiM3lyRCsz
cjE0RVNnbXpSK1VFOTN4YVFDMXU4cThEMW5lQTQveE9tTy9VSEFxQm82NwpBbUtjbk1LNEIwcUlz
cEZxbFZZM0FHeXNhblJ6VGdKcnBweDJsOHZ2aWdlN1c3cG1lVFBBakdkZEcrcjM5NEwxOTc1MW5K
ekNGZURwCnNyRVB1Y2ptWitkSytJeEZoakFiS1ZacHhZSzFvc081Nk1HRGxMdGNkbGM4c0ZWbitI
UUFCS2RsNzM1Q2YrOWJ3dFVRd09CQjFnK0cKaVlmWlNMVktGeHVYeUJ3bjVTNlgzUlVQYnBXY0pn
a3gxSlM5K3duOXZXOGxaODJ4QjErZmlVNFpFT1lOQ3FhYmxEWHFMbGZYR3V6MQpNM2t2Uko3dlpL
dDVjcXU1MVR5NTFUeTUxVHk1MVR5NTFUeTUxZHhxbnR5cWU1VytyWlAzQTNkaGQ0ZzZOcnBrU3Fj
N0JpYlYvZ2p0Ck00dHdEWFJzakl5eFlYTUk5ZFVjbjdMazFWZGZWZC9leEZTQUExOG5PWHMvOEdH
cmhvVUYxS3pEeE95VmJBQXZNS3YzNFJOa1NHZHgKYkd5eFkrYi8rczg0eEZLQ2Vmbm9Gb0NVbmdF
ZWJUM0xvcHBmak0yNjVaWmIxTGMzTWE5NElnYmNJdHNVeGxQV1NXWldrL3R5OGZ5TQpCWGd6enpO
NWxTa0FhSCtORGRUd3gyak0xYUM3aURDTHJwRS8wWExaODZrQk5aZDRtdnV3aXY1Zi9Bd3Qyc2I1
eUdyVjlkM2tBOGIzCkdmVU45WXVzMFlkdlR6cm42eVNiclpZQVdFSllBRXFzNnRHamtERzhpQnJq
ajhNajFvaDFONzFnOHhaNmRUTGcvSHZ2azF3NzVPdDEKM0pleE9VQ29NTnZGVmlRVkZ6SlluWnVi
VTkvNDRzdm1BeWI2cHROQ0ZXSE0vVnZ2VDlwK2tkRnF0RTR5MzZESXFpK3RIbzZhL0dwNgpYNjRB
Z050dUF3QkJzYXdCM3RucGY2ZS82SWgrRThEQ0M5cDErQWphYUFCQUZVZE0vRS85WmNtMUM4L0hQ
dzVVaU1VRjRHWThWb1dZCjk2elhaZnVJUUxXUXdTb0E5UzE5OFdYM0JxUkFIOEFON1RCYWRBdjhM
MzYvaHAyOGxPMVliVERiS3VhTzFjZ3EvS0ZJSjF5WHJ3R3IKckxMenJIWDY2MVBzUmJmVWJRS3NU
QmZXdS9IUk5vQWZzOURsL0k4N0t4WjdIV3dDbThvMTI3MFpyNnZCNlQ4ZGRSa3FxWm10bWhkZgo1
cXNKVG1rdE9vVkpRQ3c3aGwzLzA5akpWN0paL1dBSktzVVVxL3JmZ0c0QXdGTlA4ZlYrajI3bnR0
dmtWLzFRc2k0ZWdjd1hZL3p5Cmp4S3NzRnFMVkI3RWRhZSs5Z0JRYjE3SGd6Zno0OXY4ZC9BWGlV
S3VVa0xqVjRGZmJhQmthc1lEaXBVWWhkajloN1Q4UWhIZTIvODIKMFRydHp5cVgya2pTeWhZWDdR
SG1YZit6NktmUnpHUzFVVDRGbFh0U3JhNnJ5ZXZKL2JwMDIyNG9sczk2enhjaFU5YzNid3JYN3dT
QQoxMGxscm83dW1YY0E5VE5kMU9kaTNKZjhFK1RIT0xrMWZNWnB0NTNQb09icVV0c0Eya3ByeXJG
YWtWSlBGaXZxSGppalZTYTFPbDJWCldvbHBaVktKa3F3R0hxSThTWm1zZnJBREZYelJaSld2bnl5
RGFvSDE2NmFmZ1h1SEVNWTd3emZ2aFZVQTZOMk16MWk0ZjBLSWlhZGcKbmRINGtZOWI2SFUxZmgv
YVBYcjhjZXExdGNXd2k5NjVaUURMNTd4aWxtTTErc3pKYjliMDIzc1BPOUh1OXVxQTM2bjRRRHVt
N2dMawpiaXBVZ1F2RXRUS3BCQ1RjcUk2S01ONG5zMWt0UHdxVmFwTmI1VnFqNjJxMXdQcUIwNjI2
ZHYvbTUybUhMZWlPQnlweVJIdnFiVXd0CkxFeWhQZXpFZVJYQW4yMmhHdU1kZUIrTHR2cGpIanF4
K3FkWFpmWEs2dWwyMHJISysyL0RqeFRGaEl3S3dMb2laRWJKMk5iK09Gdm4KVkgzVHRVWWJ6eTM1
U2N2ZVZ2Q0piRlpiVU1HWHM3eXpLVVJXQzBPc0h6amRxbjE4YTFyTXp3dldEUDJ4QnNaN0Q3R1Z5
Y2xabm56eQpIZTk0Y25MWjBYaGg4dmZ3UjEvVTFzNCtpU2o4ODByTFRZcmVsemVYc3h5cjBscEFG
SXl5TmQxaFh1UzZYRWVZZXBtdmM2cSs2YytCClZZTFNLcVZ5VGM5bHMzb2ZWS3hleWpySnJCZUM5
YzJtV0QwKzNDUUtBbUpwUHJOVkpsaXNEbEZ2ZVdKaXVVZkUrR3Y0QjgwNHJ5Q1cKQ3NYU21CZnpq
ZjMvYmlrdTFZMms4cHpaOEFCdjR3d05GQkdsd0Y0SFRZRnREdUZrczFxRHl2TnA2eVJ6cTZwdmxt
L2U2aXA3dXpUcwo3TkZsVEdLa1RObXpJZ0tOQkNJV2JYZzZvR0E2YmNscm5nSmJHOWdZWjJWVWlO
RVZoOTZzQ0NtZHdZUW5NQ3BVbUp0QzRZQjdJUno2CjdrbmVDNUVudDVvbnQ1b250NW9udDVwYnpa
TmJ6Wk5ielpOYnpaTmJYWmhhaUlQY2FndFJpaTVsalFzWUp5KzRybm4zZGxHa056SDQKS0ZvbUhJ
YnowbGlSOVQ4ZktGK2NtbHFVbk1jZEE3cVVLWHQweE5xQWJaZ2VXdTMvd0ZmUno0K1FLYTJyTFVP
VEFZb1YwL0swdGcxcQpjZUZ1N1N6TWk1OGk0VWwyaTZhOVZVellJV2lpbWRucW03L3U4YW12M1hQ
bmE1THpIRUZqY2s2QzlQN2t2WnJSaElDQmhWWkZOUFl3CitubVlXTnpTR0g3bEdqUjZ5cmhXNDdP
d0piZnhMT201My9zcFpoWDR3OEFGY1hURGNKaDFwbjdqRFJBTDN2aU5xWTdSS3YyVHFRVmUKNXRZ
d091WDl6K25jc3ZZei96T0Z3dy9QU3M3aUFrLzBLS1lidC9ham0xcENQMHVaWGdVZ3dIWmRHeGlT
ZFc2Z254dHM1L3IvOUZmKwp3QitDQTdacE1MUndOcTJJVyt5d3FlQkRYelZZL1NNUUJmcGJ2L1oz
V0RQaFl2SE81YnVyeEZLOWUvbk80cUpPUy9CQmYrN1Avd1dNCjZXVWdVNnZvMDJXcWZOM2pDQnU1
ZC9HaXgzaml1c3JlYy9UeGJ6N1dVRnpsaEpUVWxUYlNPMjVXMnhGdHIyYnJTU1RnK0lrVHgvdFcK
elpOS0xRRGJTaVhXakx5T01LL3pWWGY3V2RDT3lWUDE4dy96MXhadWtYWC8wbTMvNkpldXh2bXJl
SHExRkJYU3k1ZFduOGFyMmttMQpkbTRkOUZmLzJsLy9HM0ZNblZyWXgvTHBJaEZmbDFpdWVvZkRH
dmZHQ3dBNHgxMUJjSmVKZzRqTlA0YTJRODBYaXdDT2taNDF5RFNJCnR6UHhqaHQ2ZHlqY2V6ZGxz
aXJJc21EYnNLd2hRZFJSa3pyeFMxVVVidldWQ0wvQy93aDZGT3RkK2pGNWhsYUUrSnRIWWJENlEv
L3EKZjIwdzdsQlpDdG1hVlhnMlZGUW1CN2RvVnU4NVZoaW5Id3IrN3QvVHJKNTZ3NUdnSURGYjkx
aXVlb2Rhbk12VjdvUVEwRG1xWmFKeQptM0h6U3JpenVFNUUzeS81ckxsbnQvNVlwdXNxT1crWDhP
MU9OcXRFdzhNV1lBMFB5M3ZnOTZwSjd5VVZ5MDIwZWpuQ2wrTlVIdnRSCmpwL2dsb2orL2pjZVp2
WmNJbXIrdzE4ejJmN1c1MzRHZUVMaEo0Q2YrZHkzaUloWm5adGRLa3ZRak9QdWs2c2xJdnJVNXpX
ckhpTHcKeUhGNGNYNzhFWktCeHBVOW5iY0ZrYWhxdkFHMHVsUGhQbW9ZcEZibnR5WUNmbDBWTXFC
NGVodkFSbys0MWUyZk1WaVZwMTk1RXQ3NQpSQWJBemp3alRwTFY3Zzd2VWtMMzFIMEdTL1RQLzhV
dm5ZM3pmMmtkaVlwNWh2bS85Y3NOSVZZVVhoR2k4Y3UvWmJKS240a2FoMzB2ClJtdnY4VUhmK2pl
Zis3Y2c0dXNWVTZuSTF5c3VsaWhsSFdPTmw0aEtPbjhTbUhyd2c2cnpWNU5hQ0pxS3NPdXFsbmNC
NzlMWlVaa2YKL3VId0c4VVNubjVoMjlMcWhOak5oUFp3NXpZc1pUWHRyeXlzQ0N1aWxwVEJMUDM3
Ly9BZnJmUHhHL2YvZExGMjlTVlBYay80L0U5OQo0OWVmSUMxUC9QbzNQbVd5Mm10RHBqWVRvM2Ro
SGZSZi91dC9RNTBNRGFLTGZMM2lDSnM1a1pIWEtwV2F6aCtISE5nVVY4Ynh1RUdxCkFpblhWYlpL
WitvWk9EejlXb0MwbW5oZVA0VC92akt5ZGJhdFdmM3RzL1hvS2w0Lys5dmFoMHREclJaYXBGdUMv
Nm4vK1RBdWtwYmcKUTdXdlFBSnR2dWZUNTM4UjN5UXQzOFF2ZnA1OGoxbWw1VnRsL25jUWcyVlJB
UDJmMmRlMkpoUmo2eElQeWsrZU5ITjhpWnhqa3FkSwo1ZnVmZDNQdit4NVl6Ukk0R2kveG1yek9O
czh2QzlxOEdUdm5KMGF2VEU1ZUdaMDRIMzhkWGRzYWdXVmhaT3RhREFzeEo2N2NBTEFaCmtKNGY5
MTZHQk5yOG1Scjd2SWRNc3g0ZWtYTkNaUHdsRWdqVEswMml0MkRkNDFOTDlvMDQxNlN5OTZ2c3Vp
cURxZ0lwWjJ5UUVDT08KTXlMRUVKSm4wWXFZVXdzWngrTVVpNDZwY1hSamVIaURtbnhJUHBhc3h2
Zzk4QmlNT3JQRkJPY1QvYzV0eW1yVjVhemYvK3pWVmQveQp3Zk4ybzNIc2VZMlBjNm5ja3A1TVoy
eitHME0ySzF0R3pWTlhIR2VGOXBNNTlaaURkMVl6dkRHMVFRbnJESTlPbE45RXZqek4rNnZMCndp
UTFaZjhYS0hPRStvMmhvUDliRGh6UUFBQUFJQWpicUdJQytwZXpoNTVoUmk0VmxLaGRzVXVoN3Nj
QUFBQUFTVVZPUks1Q1lJST0KCkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNo
L2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvYm9vdHN0cmFwL2ltZy9nbHlwaGljb25z
LWhhbGZsaW5ncy5wbmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpDYW5ub3QgZGlzcGxheTogZmlsZSBtYXJrZWQgYXMg
YSBiaW5hcnkgdHlwZS4Kc3ZuOm1pbWUtdHlwZSA9IGltYWdlL3BuZwpJbmRleDogUGVyZm9ybWFu
Y2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2Jv
b3RzdHJhcC9pbWcvZ2x5cGhpY29ucy1oYWxmbGluZ3MucG5nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZv
cm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50
cy9ib290c3RyYXAvaW1nL2dseXBoaWNvbnMtaGFsZmxpbmdzLnBuZwkocmV2aXNpb24gMCkKKysr
IFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxpZ2h0anMtZXhhbXBsZS1hcHAvY29t
cG9uZW50cy9ib290c3RyYXAvaW1nL2dseXBoaWNvbnMtaGFsZmxpbmdzLnBuZwkod29ya2luZyBj
b3B5KQoKUHJvcGVydHkgY2hhbmdlcyBvbjogUGVyZm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5j
aC9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2Jvb3RzdHJhcC9pbWcvZ2x5cGhpY29u
cy1oYWxmbGluZ3MucG5nCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjptaW1lLXR5cGUKIyMgLTAsMCAr
MSAjIworaW1hZ2UvcG5nClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKCmlWQk9SdzBL
R2dvQUFBQU5TVWhFVWdBQUFkVUFBQUNmQ0FRQUFBQUZCSXZDQUFBQUdYUkZXSFJUYjJaMGQyRnla
UUJCWkc5aVpTQkoKYldGblpWSmxZV1I1Y2NsbFBBQUFNYUZKUkVGVWVOcnRmVzFzWEVXNnBsZXl0
RjdKdXJaRUpIeHVISGNuL3FBN2RuL1Jqc2M0alcwdworWmhyUEdiWk9ObUFzdzRUUE10b015U0lE
Q0FTQ0F4aUxHMXU1S0RNRGFNZzBwTVJGN2pYRXI2ck1QSGVIMHdnV1dBMmN5Y2RQZ1lVCnJGRUNB
YnkvcmgyMzdwLzlVL3UrcDdyNm5HNmZVL1ZXcHpzeFM3MUhpZHYyYytyVXFmTStWVys5eC9WVVZa
VXhZOGFXblZsMTFyekYKN0dQZStXRW05NlBDSTBNc2NOaWF4QklVdUQ1cjJyb01GNSsyK3BaVmcw
eFhDZzh0YzhadXh6TlduWEc4NjM1T212Nmo3Mi9XR1B4ago2TWY0U2J0K1RNVUFHeFdqZS8vZ0xR
bkcrdkZJT0NWZjZPK2RUYkxDbzNmMlFyL2lzalpGVjdMVkxNU2ljSWE4R1lLc25jVlpBdjRQCk1p
dXRLRm16NjdBQzhFQ2c3N0VtNGZOQnV5K2F0Z0trQm82MU0ydFk0NEZvNEJ2ZmpkZ3RHV0dONzZv
ZnM5ZEJ3QWZVNkR3K1VQaVYKakNkY3dhT2JTc3M3S1BoOWhpTUFtMUY2aEpiL2xJQ0hPalREL1NW
dFAyNW1vbTUwU3lvWXdLK3k1bXpMT1VySjJOb3JvVVRlN2ttbgovVmwxTVZtUnFLeGFYcHlnS0I1
ZFdWbEZyYjVtUU95ZHdCN2kwSjZ1YkZqaDducGRoMVhYZEtVZEVBbW9qM1c1RGI0bTRRRTFMVkNh
CnBPMVhnSDJEL2tCMDhKRjgzU05NOVpoWmY1STkrN1J6OEovSTNJSWZyTWI1TEhjakJ5dStVdkdV
S3hRL2tjYUxZZFo0MGY4SldPa3cKK0E0aUVCdGxZU21kZFAxSEZ3L2RLdFNoZDFZUXJuY1c2MVpl
cXNJQWNtWWxlRUlFS0FoeDFyeThORDZhRmgvOFY5Vkh0aVBkQlBHTwpiRmNSVlR6UWdjejQwUk83
V0VwVzBiYTNrMnozaTZ6QnZsTDl4TzRrYS8xRVZuTFRTYSt1bytta056cndXRHlQY3o0bFdPQXhB
cDIrClRyS09SWG9QR3ZtNmQ1YUtwenQ1MHU0NTczckFPZmhQMUNVWGZwYmpsMzZsNFhXcHlzbVhC
Q3I2UGJHcXFzVG5TUnZSZUpGajRYbDkKcnZZZkhGa28vcVByYjlZWUVwVjFDc0t4VGlTclhoaXNh
cC8rQys2dXUvOENaVnoxaVdsWTdmR2RuS3hkMmVNN1dTMmxjb2YyQU5magpyQkhSc29vbXZvRSt1
aUYvcFhwc0NGbkpZVlpJVms3VXNNODVQWWVMWFlvZlBZZjlINDJZc01kdFVxL01UZDc5SG80YmYy
UzdHcTlQClZSeERDNmxLRzFWcFZCVjljdkZYR3I2b1Z5Y1NGWi9hdVhXcXVDbktvb1RwRnZjZnkw
WWlXVlgrSS9EOFVPUFh2cCtFNStvbTNKSHQKMElYUDZNeFM1VS9BcW92WWQzbDYyK2x0QXhra3E2
cTdUN0xSM3hUK2N6OGdJQ3Rla0VaVTI4SHEzZDlKa0VYaGNmY2x1Zk1tbVp1cwpncWgrNXd3Kzdr
M1Z3Y2Q5WGJIaDFKYmlFTHQzRnU2N1FZYnZtUnMvQ2c1YnkvcjNUblJsWlhodTdpamw1bzZxbFor
clFycGtHcDNQClRWVFpGS3B3eXFXYWJuSC9jZTVUNlQrYStOaGlWNWI3dk9pUVdHMVhOdkdOem5n
cWV3SldYK083K1B1cElWYkRhczZuOEhQanUxWk0KWG1ydmtjSi9oUTFZYTg5UmFxbFY5UCt1MERh
Y0JkZnJjeDVybFBYTXFXNSsvVnY4Y2ZMSHVQNHQvNlpnRGRoUEZSOERHUm1Sb01rNgpSNlljOU1n
VTY1VGROK0tIMzJ5MWd5SnJ1Sm45eDMrUTQrMXpVdmtaWllveXFxNTJIZkpSMVQzT1VjYThTczlW
clZoZ29SMW5uZ0VhClVYbCtFd25Fais1TGc3ZklzTngvc0VXd1hkVCtJL0Q4VU9PNzV6cVhkS2Fk
MldTMlhGUzlMM1hISC9IM205cjRuZVBuTy83WXMvazYKcUVyTFl5MGxKNmFnWmVlTi93d2NjWUdU
MVFvRVB3SnF2Q0l2ZVdpR2hhdzBqcXc0b2xwcEZocWE4Yi9DK2RUU01mSjhTbFgvcCs5MQo4QTgr
b3I1ZnhQL05UdXZNM1R0b2VIZS9UaGxWQzlOS3NsRlZOd05jNmJscTg2bUVIY3l1WWxTaU9xT3Zt
TFBLQWtMaFB6YnhDUDZqCjYyKzlmMHF3d2pIT2lpV0k4MGtLVlZrdEgwbUQ3OWxwTkh1RVBaOXl4
NlEzaUtwQUtVaUlTK2RLSzRabUVwZzB6MWdaL2poRDEyVEQKUHlkcTJBNkRNZlRGL0NDU2xSWk8w
ZkxYUEpzTE05bzUvSitTMVVVOGpIZmZySWFBVm8ySDkzcVhSWDNnL1Y1ZlplYXF0QXh3cGVlcQpI
M1RydHI0eitvbzVxeXpqcXVzL3V2aXhaNUpzelZuM1Q5YkF1RHoyak01NHFuZ0MxWHlHdXBKaEZ0
aU8rYXBWWlplRnF2Qkc5YkxUCjY0Y0o4ekVXMmp1Qmszc01SVWJUTUE5Z2dRWC94dU5FeFZLUnB2
d3JrbFhXRkE1WmFVVGwyZC9STk9zZVA0cFpZQjE4UW9HSHZuTXkKeU54NWFYQ2JTZjl4NDdzK1Y5
VnYvUTJuQkZhY3VlRlUrZnhIMjk4YWVtY2orQW9sbG9zUnowUXdJOXlnTTU2cW1CTmJkS1pwQTVu
WQpvcm9iS0F0VjF5ekVYYzR4TWpXUTJYenUrRTdGekswQlpuZllOM2V6SU9hYTdjWUwrTDkxS3c2
K3dvb1gyY0pkcUVTMVlsM2Z3a3VtCklKelplR0pYNmd2Vm16Y2RmT09WMEpMNmgxampsWnVWQWE3
OGUxWGQxc2NZaVdQNW1SaEhsYzkvOVBGWWh3aHJ3cXorZkJPTEtQOEEKYUNsSlZjeGhLUmIvYkhB
Z001RDViQkQ2N3RSMVVGWDhYVVNTOEpjcHFTOFFOMzQwVjRrV3VIUUhOUm5sdkJoS2ZiSDdWcjhI
NmZrSwpXUFV3cTZlR2V1WWd5MVpOcWNQR096NitSOVNaMVY3b2Y2Q3ZmUGk0WjBZNnp1U2phbUZh
NmJ2MlhoVXBOelJESTJydUdYZHlMTkMxClUvVnM5ZnhISDQ5MTJEc3hrT25NZHM5dFBnZC9QTkVw
dnc5OXF2S3JQTDNyOEZaYUMzVmwyNkJFNTU4cmF0VjVoNWJycnhxclNqWlcKZTJvTC9iR1NTNjJC
UHJTR1dnUDMxZUZSMVpZUDcvMjNKdjV0V2pxZWxnRytNZTlWb1UxQzVYNmk1ZklmQ2g3R1lSanR3
SU02NUMvaApuSmM2Uy85WG5sZFBIZEtnSm9XdG42cTZXUWEwcXE0eVp1d0crWS94TjJQR2pCa3pa
c3lZTVdQR2pCa3pac3lZTVdQR2pCa3pac3lZCk1XUEdqQmt6WnN5WXNlVm5wY2dxR2pObTdFWVRO
ZDFNRUdLMGthVUlUbzdCTWlOVVpqMUQ2UkJnSVJtV2Z4QU8vRnBIcjFWbDZxT0gKaDJXQ3hUSld3
eFdwenp5Y01XMXJVNlRKNVFNZXhUUnB6NWNxTHBwN1R2dzRXSmxoQkdwK0JvN3A3OXFBNG01Qm1u
Z3MvNWZYSldaRgpPc044NlZtWVJGYjNhZ3NLbnV1c3dxTGFiR2Myd2lnNnEydCtqS1gzVGZaTjR0
YzFQNlkwQ1YxWFQ3Yyt1dmpvcjR0WHBjZ1hvNWRhCkg1UVZhVWY4ZkpoUnkwZjhTaFpsdE9kTFcx
bGoxYlc1Y0cxcVJWeG1MNzdIampnbXZFOVIvelBOSUJtTDRwejIvUzR6R1hTNTZuUXkKSjcwdFZ1
QTQzL25oaFhDRFdMVlRzSExIV1NOS0lhdjc4Vkh3dU9wL0lJTWlwQ3gxWXRkQVJxMnpHdm9VUzk4
NnZuWGNYdTM1YVhtcApxbHNmWFR3dVEzZXZpd0NkZzY4clZ4OWNqU20vNzJLOHFwMEthNjl5TGFF
WEJPV0Q3aTVOb2daMHBCZmFnTlJOcUpGeHhzcUVGZldQCndMTCswOXV3SHFlM2phWWpKSjFlV0NT
ZTBTS2NqYWVKdmJ2eFZtQ1ZWSW8wbVJzWmJlSFNmdmQzSlZDMWNERzNtbnlGS3laVmVOUloKQllt
S09LdkZLc0p5c2pnNm8rem1yQUFYOU9Cck4xSFFnOUtBVktxNjZ3UGlrOHI2dVBDVDFpUUJINGpi
QXRDTzljN0dtYjhLZ1ZNKwpmcWRUSC95dTliV0Vhc3h6NGEwNk5kNXhMbmV3Smw5YUxnVDBXRDJW
cW9uOE90NklZbmNHNjJDVXdSclNJRi9nQ0d0a2duc25vc293CjJ6cllaTWNPM0hQVS9pUHdxeGh4
cTQwY3Zta2hNakkwMC9hVi9HNXhpVnlTT1lRdGthcExWUmRVNUhOVFZiM3NHM1ZXRDI4VmxVQTcK
dkZXdXMzcmJQbDc2b1QyOGwwNnkyL2FWajZydStuQzh2RDRDYi9XRlVNRy9UNFhIMmhjS2tLQkFT
ZnNUNnZwQTRCdWoxeWRIazVCcQpOYWtiYjY4cVZhNCtGZTdrWHFzcWtXV2JkNHNTNUQ3TnE4cW5o
OWZocTZBU1ViQ0dsRFVNellTdnl1ZUdQQ1RuSTU0MXRrclMyYnZ4CnFHclM5alpsN2ludzIxOE4v
ZTc1KzJSZHNkTXlnckNXUWpyQWg2cGU4aWdxc2pvNFNzckIwVmtWMVZQcHJJYXU4dEx2UzkyWGsr
Z00KWFZVMFg4WnlhcVFJZTl6MTRUV1MxNGZqWWNlUkwrMTU4NWRXblFML1A1UHNSNzkwLytSSHZ3
UVJyQS9VOVlsaVFIaFFWWi9rTndKUApNNmQ4cXVtTnFna1AvMG13OGxFMXpoN2RVZnl6UjNmRUNT
b1pLRHV6ZDZJWlpyY3dLdGRROEZWVmp6d1FXYVRHbElqLzhiWjJocks4Ci9tS2h6blRDOWpWN01p
SHJMSDJwaXIzczBxYVdqNVE2S1FlM3ptb3lUMnVaenFvVkU1SW5FQXpXaWpCSkxuRmNLTVFsYjJw
Ukg4c1cKcHVMRWx0V0g0MkU4NnJicjFJMkxsR1Y0M0VGbmRJdjdKNk5iWkR2WHVOc0hIdm1ycXZw
Z2NzaGpaTHZzRzU2bWxtb0lvSXBRdVVaVgozU1NVRjFWbFNyMUpOdGxVL0xQSkpscDlxcXJ1ZWhT
LzN2VW9sWHIzREhabWRhaDZ6eUMvbTNzR2ZkdS8zNTNSNWQyZWJIaVR6bFgxCkdsb1g3K2lzaXNj
dTExbmxzcDlpek03bkZYOGx1NGFPRUplb0QyNTN3TGRBa05mSHFiKzRVem5lMW56RnVuTWwyajdM
RmwvMWJ5T24KL0o0NTJGeWtSVlYrL3dVdjNkcUI5M1FTS0hLZFc3MVJ0UlNxV25VRG1RUDdUMjg3
c0ovTDZCM2JJVTF5VmJ0ZDI4NHdWTlBxWXdWdwpSTVdSMVQ4QUxxejEybU1ienVwUWRlMnh6ZWVz
R0VhQXNvQ1orN0k3RDV5OEhxcUtURis1cWFxcnM0cjVVOTdUWW4yNFVpK01TbC9MCjV3NHJHZC9V
YUtVeUpCZjFZYldqYVpBTHJWWFZ4Nm0vdUZNNVByK04wSVI5TnhPcU5uTEtCNm0xZW5YNTN1MzU0
SDdsbTcwMHJmMXYKeEtnS01VcWNyWUFVMFFxMWpGNnh6Smpqd0g2akdCNmphUjRBUTk2NGdUWEEv
elVVUEZEdjJyNmRjdTh2eEVlK0h2OVo2MnZncTdXVQpseldpYlVzS2dJc1RNdVducXA3T3FqVXN3
dC9lUC9FeEp4OENEOU5xdzVOUmxQckFjQmRVNjc2NjhQYkdDaXE4ODM3UlNUOUkxZGVkCjhxc3BP
clQ2dXJWY3FmbjUrK2o0U28rcU9qUG4wYlFYVlVjVmJ5bFk4TVF1ek1PTHZMSHFLZ0ovYW90Yzk3
NFlQMzNmNDRtT3hVZCsKUVh0Wkk4WlhFUkl2TTZycTZheTJ2eUhLdk9PUCtEM2Y3MFAyWndURmRR
a3ExUDcxZFYvMThONnVLNnRSWmV1RE5jSjNyenI0eXM5Vgo2WWJxeTB1cGlqOVZuRmVMR3pGcVhN
ZkdVelV2SFR5ckFYbzNVRjdXOFBlcVBCTXNVNlFVdnhWcWlGVlZPUHpjRUtycTZLeDJMSW95Cmgx
L0c3NGRmRnQvN2FkcnJ1NHF1N3FzZVhwK3FwZFlIRTFJREdUVWVYbmFrOWs1c1BrZlh1VjM2WjRY
KzlYZjJ2SE1PK1c0TGVsUjEKVHoyS1B5OFBrOVBiL1hyR3NtTSsydjRHenA4WVlyWWpOOWE3WTJl
UzVtdS8vdDZiVkoxVmx3SnFrUGVwS2kxVVBSVmQzZnJvNDNWMQpmYStqUHQybzJrN1FyUTNaK0E0
ZG5Wc05YZUtVQnpvbEwxK2JESzdyVS9kNlhUWkVMdFJ0cm9lRHJNVHNSRGRWeG93Wk0yYk1tREZq
Cnhvd1pNMmJNbURGanhvd1pNMmJNbURGanhvd1pNMmJNbURGanhvd1pNMmJNbURGakJlYjZvK3kw
UHQ1S0V6Um82MUJRaGE0cnE2ZEIKbXpzbm5VZGZybGhMb2RwdFRLdUZtRFZKTG4wc2QwWkdkYWZl
YlNSVGxpMmxSWTB0TzhPVkNrTXpTUzBWWUFmUFF1dmZVcDNWZURHKwppTktUVkxGSzNaVTdhTTZL
bkRpakMwVHFXZmlxU28yQ0d4ZHZPN1Rud1A3ZTJSQlp3cG8xakI5TnNzM241RXUzck1td1RYK2R0
VHVhCnFyNGxVTHFVamdCa09VdnVhSlQ0Z0c3bnRFUVlXM3F2eFdkV2FPZ3NybjhTcFNkREF4bTZD
bkFoWGszV0tMTlhTektxV0tVK1ZWR0MKeENYaTlyQmVneENiY0RnSnk3M1dYaU9RenBiWWhCVVVL
eTVBbDlUeForcEQ2bm9seVpRYUJDMVFjZ3NLbG9LNFM3OVkvNGdLdklXQwpwbTdUd1JhM1ByMjcx
ejJMMVpUZTBhand4V1ZURm5aU2w5Y1ZvNUpNbDNxcThyM1dOU1U1VlZGVElLS2hBbHlNVjVIVnE5
bktTOVgyCko5eG9tWEFwRjhPMENrcTNsSEtZYUtIZkRaN3VuVTB3eWtZTW9zNG9aaDFmcEZJMThR
Y3Z5Uzh2cHdKSDcrUXJHUE9xaS9YK283RU8KdG5nSkhERWk2TC8rczZobFUvRDZDeldGa0FxdDFq
cFU5ZlptZjc3d1BTdUtOeFRKVVJYSnA2Y0NYSXlYazdXeVZFV2lvYUNuYy96Zwp2S3p2Y3NiZjNs
bXVjemo2RzVVY0pvWnI3ZXo1KzdiL3Jhb2pjRlBWaWpXZEJFM2dzMVNxWXF1cVJOeUtXMDVub1RW
UjBseHp4eHJ0CkFEVlFRa0JiOFFBNHlhaVJWakdxRktxaXBLK3NKdmFtTkZkemVSNWJtc2UrQ3A5
MzBsV0F2ZkV5c2xhV3FyYnU3RGNGd2NJM2xJQnEKNzhUVTBOVFEzb2xrWG41WlpyZnRRNm1yWDRM
QWFEdGhMc3pINmlhR1RhNEthWjBnSHFjV0ZNSlZscXE2R2hhNkFhcFhjSHB6QTJBKwo5eS9XSXFU
VUowL3lTWjMyNGRyYnN1ZUxIQnQ1QlltS200QUVGcXc2Rzg5Q2VtVDF3L3VUdGZKVWpSZjBuM0hD
bysrZFBkQzVpcTFpCkJ6cUZnckFpL0wyNitXMnJMNzRCMFMwdlVOd2Q5MWZCUkZIeng3VE5rT0wv
TmNudS9oODNuNnE2R2hiNnFoZjZBVzNsQW1EMEYwajkKcFIwbFFaM2E4MWExMGlISlNMelVtOWUv
cFJJWHRmZEFDQ0pSbzdZQWV1UEZITjZMZk92ZmtsVFdCNy8rTGUrektrOVYvVjY2KzlLbQpOdnk2
cWEzN0VpSEk3b3REZDRRQ2E5RjhhS0ltQlVoa05ZNU1SVm5nZVJLUmppZlp4cU0zbjZvbHZTclRQ
RU1uUUsxc0FJeUVHNWxpCklYY0FUTHRYVnhvb0JDWDQwdHRERU4vbWp6UVVyNE1YZzRIbSs2TzVN
MXk3K2hTVEQ0U3pwUHZRZU9HdDlQcTN2TThxamFxOXM2ZTMKVVVhODBxZ2FoVHp4NlcybnQ0VWZq
aEs2ZzlEZmd4eG5QOStKekI3RCs2aWt1QjhTWHJFUEtVU0tmWVo3MzFXT3F0YVlIWHlOVVFpdApt
OC9WUFVNblFLMThBSXdaZFhjQVRMdlhnbEd3UmE4OWtULytlQ3ZXZUtVTklyN2IvcGRuL2Qza1V4
SFZDKzlQMU5Lb2F1dmsxNGdOCkx0VEJabkZxVy8zb20xbmdvOEJIemFUOVE4UHM0ZWVFazIwK0Iz
dm8vRDBwclJTd3hscXZKZG1kdjZkUUNidU1CL29xUjlYbTNGM3IKQjhDVnlBQXZsd0M0T0FOTUZ3
SFV6UUIzZ2Jva1B6aC8vUEZOdVNsY3hLK3JFZVNqRUxVWUx5T3FOMVdIWm1RM0p6YTBFQnRjRUdn
eAo3d3AyQWttU0dHYVVSVWx5bUpqSFBaQi92VEg0ZC9iY1hQSlhTOVllbmxaYUJjUklFQk5ML0p4
bi9scUpnODJoblNRR2JhVGtlTGVMCnlkSWdKUVdjeXcxLzNSbGdhbjNVVkhWVUhJR0I5bEZLV3Ev
b0trZytLbEhkZUd0TVJsUy9FTUFmNzk1NWhwTlYxUlRGZndLaExZWXAKa2NPMERtSytybWxCcU5u
emZIRmd3YjlHclFVYko4R2ZIOVFyQ1pqaDV6UmVVYlo1QzdSNGk4NUlLWkllN2lQRWRGNnRsVDlB
WFY0WgpZRUhWVXVwVGlxcHhHYWhxWjU1Q09zVnlQR2pNaHNvWlVoVnVFWVVDMWNwNjFCYVUzMURP
cHNzcEVhZnlXeFVybFc0TDZ0Sk4yVmdCCi9rZ2hoNmEwdVg4dzVvM25TUS8zZ1ltVWNnYWN5dzJ2
NzNOTHo2SFZweFJWNDFJeThNdFVDVmo5WndER3ROcXpSZjBUWThhTUdUTm0KekpneFk4YU1HVE5t
ekpneFk4YU1HVE5tekpneFk4YU1HVE5tekpneFk4WnVqc0ZxdWNDeXFNZTBlUmJHakVtSTJuaFIv
SEc2RkRkbQpUWVB1eXpSRkZzeEduN0V1dy9xWE16UThMdWNHYVpUaGtqdWI0V1hRa21tYXNySXhZ
eVU1K2JybTdrc0o2Y29SN29iTm9ESVVnWC9OClNvMURsT3h1eHRWMzJRVDhEL2dNUmNLaytXT1FS
dm1LZ3JTR29STmdqdUExZGphckpjdS9YZmd6dUtwVXEveDU3TVJnalg2ZG1xaGgKb3JLeVcxc1cy
MG9mcXo1TER3LzMyN2RzUERMdkxUUy9XWXJuUytKb1oxR3dydlpNMDhSNG5GYW5kOTVRdHV4KzBj
a0RIMDBOOWM2bQp2cENQa2Jnd2JDQXptc2FGMW1IRmlrbFVpQm5JZ0doM1Nxd1RiYnlvck9qQnFL
MlpGSGhKVGFUVnVhVzRmSjJyVlRkNHk0WlR2Yk4rCk1wMEMzNVVkUDRwckIxY3hhdytsL0wwVFF6
TmQyZU03V2EyVmJsUGVBWmU2MHBGQkYrMGZaYnBZeWxsNitEZ3NKNEo0aVR3TkVtczMKU3hWNGta
MkQzc0pkMXZra3M2VjR2aVNPZGhZRjY3Um5tRlFqZC91VE8yL3dIOG45OHNKQUN3akllcUZmVnRE
YTkyM2hibnlpSFVqVwp0ZS9MYUIzbDJGcG5MVjVVUVc2cnJ5MkhEQ21ENEphdlFCNDBuVnNxMURs
NFMrUEZ4b3ZuMXNHeXNtb0ZQc1VhSVN3SEFheFdkTXM2ClpmbXcxQStYd25FU2JqZ2xiMmdVc3Ny
cFU0UW9NdWhjVVlmTFh1bGhhV2ZwNGZFYTdiaEdsN2d6Z0xOMnMxUlZSQmxXdUd5U1VjanEKaGFl
c1Y2VmozZTBaSlpKVjRPV3FaWTV4cVRTZjBwM0N1aS90dmxXK0VBMmxKSVpmNXA5UkZTSEM1TFEr
dkxYNEVjblZkTmQ4NlNEWApMTWliQWtjOEZuVGZRL2Vsd1Z2VWVGUlliV1o4N0FPM1BLbkVUOXFo
cjAxVTJRSjhLSGM2ek56algxamFGUWlrMC81cU4zZXd0TE4wCjhiemxFeUM3Q2tGWTM4Mm1xbkRa
SklrYVhuaGFxMUt4N3Zha2tkWEI2MnFzZUpUdUZPYldZUEF6RkQwUjRsNnhEL0VjZjJ4c3NTdkwK
bDJXN0gxSGlHOWs0SEdjNFZndUhrU3YrT1UzTDd3SHJMNk9xd0FlZWp3Q1diK2d4TkhOdW5XSVVt
d3loSHV0MFdObmNqUmZiYzRyOQp5ZnpYZGtYQWJDdEFYSXlTWmJnY0xPVXN0MlBScnVJOHB5aUd3
bW4xU0ZaWnFuS1hwVkhEQzA4Vk42TmgzZTFKcVpFK1VTVmsxU05xClZkV0dzM3c3REVpdjJGdGl5
TUxCN3JuT3JNY2p5c3JHNGFFWkhLdnpBaXhYNlhNM1RsUVpNUVIrM2RUcGJSQW14N3V5ZXljZ1hL
MlcKNDUrK3R3dVNZdTFDUzBvU3ZtODQ1U1czSVErWWhZQWtsYXBSbDV1b3oybzZxWWN2cGxKWUtT
UlRlYW9XM3JOL0RPU05wK3NRVXJDRgpSRlZuWDBUN2craTdwc1pLejF6Ui9lb1N0YXBxMzA2dXFO
YVdVMVU3ZnJjL3R2ZFBpYnhvbUhOei9SZGs0ZlhHbzMyVERqYk9LRlFOClBCYk4xVitlTk1udjNC
SmlOZmoxMUJiV0lLTmVUZ3VxOXZoT2pDVTRVV1ZxUnJ3M2RHL25wTzVOZWR2VHFlcGdLV2VkVzZl
SEw2YlMKME16SDk5eDhxcnJ2d1Q4RzhzYlRxVXJCNXVWMTNFZW51djNqVE8vbG5aV09GOTR2Znoy
alExVGNvR2hreW1sbVNMclUrR1BIbm9INQo1dG5pUnpUMmpDeTg3dmp6NGZXT3NtQ1NSTldldzNz
bmVQMmp5a2RmY0M4MStPS0pRRzBnSzlja2FsYlVTS2k4aWpQVllROGloWkFxCnhha2NMT1Vzb2Z0
SXYwclN0YThQeUxpRlZGNVJlYXFpYnlaSnc0a1hua3BWR2xaM1Z4K24vY05NNTJWTnVQaCtBNC94
MXpOMG9xSzkKa3hDUEhMSzdRYW5qTnZUTzJzRnl6TjEzeWFUS05weU5zdFcvN2I4ZzBQS2RYREJJ
d0V3bFRLb2FXRFhxa21Pb29jYm5rMENnU0VqRApnd1JhaTdwOFRsYmN5eXMzVjAycnd4NTcvSzJt
cUI0WFkybG42ZUtGNENxOHp1cWt5TGhWbXFyY04ybkRpUmVlR3F2UXNYcUtpUHBrCjlTQXF6QXcv
RmE5bmRPVEhXUFdSN1RqdTljeWRUNm13V00wSTdyQTY3L1JkTXZ6SmpWM1pjRjZ3dUNzcjhzYyt3
ZmdUdUVHVTZOdFcKMnB0RjdYdmk1dUVMa3dLMFJFSXV5Q2FvSGkvRjBzN1N3K00xTnArRHFVSGpj
bmhaSTl5VkZ2ZDU0U24wbzJOTFVSUjB5S3J6c3FiZwpmcTBBenZDMi82M3E5WXpIeFNFZzdKazd0
a045SHNxRDdwMFl5SFJtZStZMm40TWtUcWY4SEZaemFndit1UUYzZFhDWVdpbDZ4WUg5CmZQb3Rs
SGNQN0djcmJoN2VUVlpxeGk4ZlpDdFZqNzJ3bExNRXluN05yOFRiNnNVZHNtbU5sL002WDJsNG1x
TUxkN1hxYUhHZmczSSsKcWVtbmd5M05lS3Zydkt3cHV0L2R0OXA1ME1aU0JEMGhJT3lXMDhnZEJz
T3NPZ1g0RG9wS0wyek1GTXBKYTRmVURzTldRTGx1NWQwVgpOeGZ2TkRjMTQrYzRxMXIxMkF0TDBV
cm1LUDZjVlhpYWV2R05NWGVkS1Y3cW9GeWYxS09lQnZaNnlLcnpzcWFvWTRJR3FLa3lac3pZCmpl
aDJxaXVITm1iTW1ERmp4b3daTTJiTW1ERmp4b3daTTJiTW1ERmp4b3daTTJiTW1ERmp4b3daTTJi
TW1MRXltNjVPNy9jTmI1OUQKbHAxY252V3Z1QThGb0VZeG5kYTAyQTJvVlZyM1NsYk1tbHl1Tk0z
cDlNWVpUYWYzKzRZWFozRVpNWHA3SnJPZFdaMzZWQXAvb3l6dwpFVWhZZmtTdEMzWEJYTUdkWi9U
M2ZYaitQcjByV2JIQUF1aGtUdDdNcm9idmI1RVRiQTI0V3JSWUswYWwwMXNhbmk5cXcvOHJVMzR5
CkwycFc3dks1T1BOS0c3dHlYcTNiNytnZXM5U0pYUU1aU24xS3hlK2RvT2txMjQ4OG8rMHlHdFN3
SnFOSzNhUHJwV29VQlUrMTlrMUEKNHRHdkJDTXc0QlBncFUvZlc0bjZVNG5LOTdld2g0WlkwMEpl
QmcxMWV2bGxoUjZRWEtmWHdidWRYWVh2bmYxa0U2N2YvR1FUTHJDbApseStFb05SNFdFVUtvbVlu
ZHRIclQ3dGZ0S2FUSFl0SWlpUjc2Q1VRTzVWckdPZDBqemZlZ2Q5dHZJUEZrWHp5K2dpZFpIdGhv
UWJlCmlyVmVvOVFmaGNlYkZxTGFqa1duaGpVY3lvdW0wVUp5WFZlMytxdzlxRis1bXRIRFUwRzhF
N3VHWmlqNE1BZ2dJQjZGMlc4ZVZkYzEKeHhkeGZ3c3NIK3NmWDF6WGJQOENkWHFkeTZwMWVoMjgr
NURqdTdLNDlnN1hiK0thUFJ4WmFlWDN6bjU4RDZlSUNnOFNNQ3VzUFZhTQoxZksxOXBUeWhRQ29T
cGZZcWd1ejNTK3lCcHZlalErOTFIcE4xdEJjOXhoNlF4VGxUTVAvc2NOYlZmVVJPaGQ4YXdVcVhq
Z2l0cEJjClY5bWFYQTB1cU85WVZHcFlnVFVMemxOcnZVWVppM1ZjSFpReDU0TWdyWjZYY1NlTzlt
Mi9Fc1NqTC9FSFViK2RsRlhZbGFNcXEwSEoKdlVST1d0ZXVQMStvR2xzVUk0d055NDAwL2pxOURs
NGNhbnpDRlJZMW5Vd1F5a2Y1cllFTUVueDhBS210d3NPNHdrSlhlelpiZFZGRwpxYis0QTdVdU1Z
cTBKSEZHeUE3dE9iVEhBb2RKU0djcFhQZVkxUTdONEo0MXNPb2ZQa1BEZnlQSHczWDJXQUhjV3FI
cEpCR2ZJeW84CnlBWVpIZ1Bma0t0elVzbDJ1VEZVYWdRK1NyaTZiUmdSUGlxbnErUEdJNG1pS0s3
cENzbnBXMGFtYU1SejE2bjFOZlVjMVNwcVVjcTgKbGlhYWh1Z20xLzBtVU9xSTQ3dm5pcHRNcnRO
Ykd0NVJsT0dxTVNyODFCQ3JoeUN2bWp1a0dwKzBGWTlZZmROSmxjNnd3RnNGVVlRLwozbkVRcUZH
OVdnMUk2Qjd6KytUMzNabVYxUWZ4MXA1V3RvcEZjMEtTQkx4RDFGbzV2dWxLVkV1Mnl3dXJvZ2FY
MjNSMWdaMktHWENoCnE4dTN1dW9MTDZsUDcreXhIYlFzTG11aEVGVmtpWE9EVDBoTlp4MFJORDB0
S2U4cjJML28vWk5vTXNGL3VVNnZnM2YzTDNKOFY5WlIKYmoyM0RrZEpWZmtCTzVPWUo2b1Nqd2VF
YWl5czFCbDI4TzVtOGNlei9zOEc3Wmx3djJXUHJLajZKQlAxNExySFZneEhWQnhaOFhOQwpXaC9F
VDRjeGNPZHFPZ1Q4bUp1b2N2eXhIWTRpYnFsVVZWTkRaNXljR25JTHgzWmxwNGFrUWV6Ym1MRVlt
Y0tZUnVnU1F5dlZsaU9MClcwcVd1UEpVWmYwbmRqa3QxRE1IQ1VUdWJhalR1OVIxL1hWNkhiejdr
T01UdHBnL3p0MHd1NVVnbEcvTC8vY0pvdExxNHc1bzFYZ1IKOEt0MWlWbjEwQXdta3hDMzdxY2Rp
N3RmbERVMDF6MW10ZERBTURlSC8ydlhuRlhWQi9Bd2g3ZGRFRVE2MVBqbWd1U0hITTlxc1dSMwow
QzhYSGl1ZTJsQ29vVWRWVnZQa1U0N25QUG1VWERLb0hYV211MkYwdEdNYTFWNEllbG5jVXJMRWhX
MUQxQ3ZVMGplMEFyeit2Q09MCjR3WXNmUHFCT3IzRmFSYVpUcStEZC9lNktud1VYblBnM0czbGZK
UllQdTZXa3RDcWoxNzkzVEdCWEpjWUk0SEIwODI1bEFrbW1LU1AKSmFkN0xETEF1RldJcWo2SUQ5
Mk9MZ2hqTUFHUE5ZRjYyQ09xQ20vclo0WDJUdUNqMTA4cnFhbFJ5dXlUclJDUzd5Q0NyaENWQTZJ
Rwo4eEhGTE03TXk1ZkZMU1ZMWFBtMDB1NWJVMTlnL1htS3F5dWIrbUwzcmJsZk9ZcnJOSjNlMHZB
aW8xV3A4aXVINTg2T1lYQ1NmYkpKCnJiam82QjViODAwc1FxcVBMdDVPZEJIeG5PREhkNm9GU0pj
RTJ3UnFsT2E4cklVSC9LeEZpUXk2NzV6NkVvV2VUTkxORXQrQUREQkUKV0NpcGE0L2F0YWUydUpR
TGhVNXZGMVduOTN1R0YyZHhkWG9LVXVnZWQydlZwMUo0SnhEV2RScGE0RnVhOHg3WjNqTW5uNlY2
M1hsNQpzcmpYa3lXdVBGV0ZqbWhPVzdtbTZLNzFkSHEvZjNneDR5QmpsMlA5cS9WZFJndmRyOVZD
cUNKZEFXRmJTaGEzbUt6NlJOVzlXMlBHCmpCa3pac3lZTVdQR2pCa3pac3lZTVdQR2pCa3pac3lZ
TVdQR2pCa3pac3lZTVdQR2pCa3pWZ2FEWlhON1RDc1lNMVpJQ3cxZFdWQzYKUVFtUFB2dHpuNzJt
LzZER2xmcmcvRE5xV1VaYzJkcHp1T0wzUFcweHFod20xUHFNVnRrWmxjSkJIc204UDJ0Y0sxM0dO
bmtPRCsvdgp2cE8rSGJzeGlzUHFaM1RkVDBsWEZ6ZjJZZTlzZkRFSXEreXR5U0RvcWZYT3hqNGtY
V1VNblRmSTJ0aWR2MWV2U1FpOEZHVS8zcWJSCkFVd2psZUQvUGgxOHgvKzk4d3J0ajlLdHNRaTBE
bDNhMGdwd3NVMDFUYTBDVlkxa1NmcXlvRFl4N2YzVW9QdGxIc2U4ZjFtOVIvRHcKL3U2N2FPMVBv
RzZIMURQbjFhMVNPbDRRRmRkclh5ZFpkWFZ4SSt6aDUzRDFJd29RNGtxL2g1K0xxQjB5MW5pbG1m
SHJiRDdYLzA5cQpxcTRGMmN6MUQ5aGpXWjJ5NmFhRHJKMGhsZHFoSy9CeldpLzg3ZXplMXd0RWtY
M1A0VEtlb0FaQkhJTlpEVzJabEs0QWlIQVNybU1QCkk4WThKM2k3ejFOTGVKYWZZT1dtS2xkYkxH
VjhrWTgyNHJkQy8wZ3A0N2FrYTJxVnlObHdtYnRFdmxVb01uRjZlSWVvT2VuVjBza3EKZEhGaG1T
OHM2aEVLREJJZFdsdS9yd2t3eno3OTdOT29wOWFjRnhYemY0eUJoWGhPS1didnhJUDd3MEJ4MWFp
SHpkSCtSbFhWbmIrWApkeHdZS0xjWHVHRTd5NHNjRS9BUFB0SjhWSVlYWTN3QzFIY0hNcURHOXhL
MVpXbFVYU3JtSVY5Y2xWY0ZCQmtQUjNzS2p3Mm42RjJCCnJGN1Eyd1dkQmQyRjM4bGFOY3pVN2Jo
MGZKR1BOczV2V1VqSXpzanIzMzloNmIwT3Y2emIvdjVQUUw4OTdhdUV1TVFMYlhsZVlXdmsKdnhP
NnVQRkYvQzYrcU5MRmRmU0w3bnJncmdjY1hTUFpwYm1nYUZkMi9DanI3anJVTEpVZDR6WWV5ZlZC
ayt2ZmlVcm53bzN2Um1HYwpGdUxlWEFzSTRvSjNxZmhYMS9TbVpYZytkcUU4NStzL2ZQMkh0dFFt
YVY4V3ZuR0dldXNNei9DVXlWMExaYkpTWDhRM0NLa1JmQ1lnCll4b3FqMnNWMW9BMFp0VHh5Q3hL
SUt0VmwvamNHVi9FYUpQNFhERVdRYVNFN3U3b0d2bVZ2L20xcGZlNmRWeTMvUzJKVEZ6UG5GN24K
Nm40UzFGQzVhSExEeVNwMGNXRXdyNE5tVk9yaU9nL2ZUVlg1eFRzV2NkUSt0V1YwaTNXNVRkblBX
Y1BXUVJFK2hoaU9nT0dyL2lrdQpGQ3o1b0R2SnB1OURBdHBpSFhmYmFrVUhLZmpVVjdEaXZzVWZ6
dzJGeGtiVHEwRCtjelNOb21VVW9qWmU1TFZST1c5SmZUVEllRHo3Cms5VXUxVUkvb3BaQzFjTGZx
K3NqaUpva2tSWGxTSGpzQmk1NE9TeVZ6R0VocmxJSVZPaHdaeFJrTmJyL2lhWDMrbmhDdC8xbGlv
NlAKL0FLeUxrdzNBMENsS3UrZUNoVkJjMlIxZEhRRGp3VWVVK3ZpVmxWaDRJc0hVbFY4bG85SkNY
Z1lSN1lIMzRNa1ZLNzh3K3Y5OGEyZgpySnZDRyt1ZEZTTmZuUGxKUnZkTndvejJYMWoxUUdiMWIv
Zlp3bEd3U1VUTituOUpzcjVKUDN6M0pZNi85NlVrMjNJY2YrcVBGd21sCm5ya1plNXlmaWZUTVJk
VGJUc1M0M0J0MzNwWHpzbkVZSFhIcFA5VUQ3ZW5pUkozWXZYMnRmUWR2bFM5ZzA2T3FRMVN4YVFt
ZHJQRTgKVWYxU2UxeDVXY2ZweHdlSzd4Ukd3WnJ5VVJWS2Eyajd5dnVjN2E5ZVAxVnpPdGxGaC8x
OEhWM2MxdnhXQS9JQUZTbGFmRWpkYW5OWAo5dUhuQWd1UmZPbElKMzk4MU81dmtZTDc4ajFrZklQ
ZnZHb2dneVBpK1ZUbi93N2FKWjlQNGNnSlZ3ajY0U0dnVGlNZXgzZk1NVnRwCmY3eElLTDN3VTFh
OStkem1jNno2aFovYVd6M1V5WWlLZ2FrWTR6ZWZzK2VWTWY4SHlMTytoZjlVWFVFZ1I5VG1qNXZz
c3YwendKV2wKcWtOVUdOZTcrV3hTdmQyVlExWTVVZjBjWEZZajNKdWc4RTRIM3RPUGF2ekxoekcx
TCs1emptd0FvbEtWejhrTEpWNXpNWk91am01VgoxV3JHRDZTbytDeTllSDMvaFdhWHRIOVg5bnhL
ZFV2WUdIZitucTF3bE8zOTBPZFR2Yk50TFBBOG5JSTNGZzg4MWdhUDMvOEtpSWNFCnlMdXYveENk
aGRWYkI4TlNQQ2FVZ0tKdy9RZjNQN2dmN3diSko5dnZMTERRbVFXSjc0NWN6VHNPN08vTUJoYktO
YXBpU0NUa004Y2oKdUJGUmt6UURYT3k0NGhuNFg0SHZwd2NaMXo3SUw2ZDVkK05QdWcybmNrUU5P
YWtmN3dTWEYxbFZSRjNxNEpnSnpvbkQrcVNpUUhQSwo1ZWhkMmNHL0t5ZFZZVXg5Mi9zTWFJT2Fj
c3hWc1JYZDMrY25ON282dXJwelZYeHJHeWxJK29CQXAvVGhpUEZvMzA2K2NSMmVJMy9vCm04KzF3
VGlNNzNtdHk2M2dXTExIejhXeEkvYTJFM2Y5MlFxME1TR1Y3WjJKeGhkU0p6Zmk1MmJJZGVQWGt4
dTdzakNLK2I2LzNYQVcKcENGWGlMckRsbGNyVG0zWmNMWmNvNnFnbWkySGFXOUVKTThBbytQeVov
clpvTXVGSlowbDc3ekRrUGh0eXUxV2dGMlV6TEdjbVhMaApkeXF5eWxyZWZiLzVlWnNyRTB5N0Nr
Nis1Ry9uZGFscUJkcDl6bmgwaC9TVms2S0RLV3hUbis5MGRYSDFxTnA0c2Z2UzZXMmdUZ2Q1ClM4
eFZxZ1dnVDI1RVlvTm9abjNyYTd3K3pqWWEzZytkZGNCbVZPOGwvcEQ0dzhCN2gvWVVwaUE4OFpD
dXVBZVMrdHNPYldvRHZLUkcKelI5andtMVZ2aHZEcjZ2c0NLSDVZOS95TzdCM0ZZcnRPSjZDUUdS
SHVVWlZRYlg4Sm8rcGdpREo1eHJxMGNzOWJ2QngxVFZkYVZDOAppQWo1ZmFkNkR1bzZ1V3Zpdkxh
UjNTMjh4TXFUdXduT21td3FKMVdiajNyallYaXJWNFcxMUE1RzFtUmF1cmg2Vk8yK0JFNVNrM01y
CmtvZ2pxL240SGlCM0E4N0FlbWRwT3Jld1RVSUhoTUJ4K0wrZWRJMzZUZEFOL0d3amtLaGUxaWRI
bWQrampDcGUyblRiZTQyYzJOVTkKcDNKRi9ibnFVcE82YnAwT1Vma2tZV1JLYk1Rd01pV2ZybFRh
aWw2S2hOVGRBVHpUZm1lblA5WlA4MllxVmRkZTg4WS8vSnc2ckwxTwpvb3FlbEs0cm0yKzJXK0JR
dmxYU2M1Sjg1MUdUdTFJblhlZFc4eG90VENsSURaMUx2K1NRbmcxdFdjdlZiclZjc2I4MGZWbXA2
MWJUClJMMEx6bWpKemZoUzhLbTY2anRub2dYVkxhbjdKeENGTTJIWG9lWk5xQXhFcldpamZRY2Z0
REZqeG93Wk0yYk1tREZqeG93Wk0yYk0KbURGanhvd1pNMmJNbURGanhvd1pNMmJNbURGanhvejkv
MnU0S3NpYU5PMWdUT1lrZ1dMWkNhcnluTlpWNnV5eTZ6UmNGd1JrZEp6WAoxaWVlLzY0K2hSQkl5
SVI4MVM2VzNDdFpLeStIUjUzbmVack84ekxGVDBOWGRobitIOVB5dVROMkd4MHNxeWRyYVdIbHo4
cll5QXl0CjlLVlhzNytKakJRTFR6YmZyMFgwUFVoMkJRb2tUTEJzdVhoSnZvRUQ2THFORnhzdmhw
aDlCWW9PWGwzbzJ2alJCTk40akpsY014elUKNkF6bXlhNDFyK2Nnc0Fha0J2OVIwVlFkSmtmbk9V
SFVlVjZPK0xhdit2OXA1SlY5VDl6eld6WGVzY1ozY2FVMExITU1Ta3JYMWtrdQpiWGxGMUY3ckV5
V0l6UmFXSjFZSThVSit2V1NCMTYrSnpnNTk0eW9XL21yM3JTcUhDWDZaeUhVRHdZOVU1YTVyaHZX
aEdWeG1oa3ZRCnJNd3F0cTVaWFp2QTg1M1pYM1luU1JMWjFzdW81cnJoRk90Lzl1bVJxVGJTV0Fh
YUNKZHYvK2NubjJvbWRRYk43TW1uYnY5bkdBWDYKNkZRRlhaMXY3UVh5aE5xTS9zWTVsQTZycWZO
Y0tyNTNWa2pUbHI5OEVNd0p4VDZNL2pyeU5VVVFSdmduU2dRTnY0bkxIUDNKbldEdQp0c1FEcVNI
cjhrR21yNWpZdytxdUlNa0t4Tm5uWlg3QXgxODdxc3p3RVRYbjE3SFBpcWthKzR6Z3VPbVZpMjFm
SnY1UDk3L0dHYXRXCmFkckYzZXM4RlgwaXErbWRqYnJ3c0doWE9kWllzVGIyMEVzWUgxREdvdzFI
aFNMcnhxMmpQN256TDhIM2xPVlByMTdZOXdUcmFIOUQKcGtqaDJOQk0reHVzWTk4VHF4ZXNhY0lJ
ekZBWXBhcHEzK1AvS1gzNys5QlJuVkhWcG8ySkkzUk5IcWNJbldlK3NEbi9ETWJVZUVkMwpsNEx2
eWg3WmZtUTdYK1ZLSzk4UkNGTGh1N0s0UFB6MUh4N3JPN1lEWlFlaWpCTGJETjdDTlM5UkFYT2xM
elc2c2s1YjhnUEpJUk8wCllTdUVUb2xRejJJci9ORzZrdWxKeG4yMCs5TGdMWU8zZEYvaWNaTVlW
VDJXVFV2Y3lwN1pCbG5IM0EvK05XNXZudUVxeXNmYTduYVgKM25hM1lvN0tpbnRkdU9La2ZKUU1m
Z2xhQlkwWUg2aDdMZWovajRqNnZoSzQ2NEdIWG9qOW0vOUdWblpwejdVemtKbFpZWTNaQXRMOApt
UFNyUFI0MmJveXQrR1JUTzV3dG44MjBYanV3SDNYcXFxcGVEZjU4OEw4OSt2TmZ5SGNyc1BvaWk0
NzR5dUJwZjkwbU5LSHpiSk1qCnRIZUNrMm50KzNKOFZ4YVc5SWVjTTFYNEpOdjlJa29IN0g2Uml1
ZFBRRjErQjNRWUc4N2lVa3BXczZsTlNMOTNFRHJNcHBPODdOVkEKUC84Ri9qN3JUNlhMNlQvb2Rt
Unl1cklmZEZPbktpVHRKZ2grTVQ2SjJoUEFxQjJyNU5iZFduMWVCZmtGYnMxTUtQVEdYY0ptS3Fv
bQpuaXJvVVo2U1lkOUpGTXJIOE5EcW5ZUjhsSXd6MUNxd2w0djNUNDJpNmorTnFxejY1NUhCLzNM
L1A3WXE4YmF6TkloSGVYcGI1R3N2CmRPUnJsNEpSQTViUHo1YTF6L1pYUTc5REV0bEx1bXN2M2Zw
NHA3dzExM3o1NUZQT0ttQVdrcy9QdWM2em1GR3hCdHpDQk9LbVJSbSsKZHhhVW14cWNlWklLYnd1
UjJFdXJXUU1mY1ZUNFlxcjY0eFBmSk5rUHp2UFBMUzlRZEtwekhWcE83cHRMemh6YlViNjVLajZu
aWQyaQo3SW5kNVZXWlFMdlFqeUpLVVR1aXhNL0N1U2E4Q29wTWVCZlNPeXRVNHdzdks3LzAyay9k
NkxXZnlzTVdQdWk3RHd3R0tGU3ltLzQvCnhMZEVYazRxcVNmQ2NQYnZ0L2FOL2lSSnBMYjFWOWFR
OVJmVVZ4cCswd3M5L09aS2ZOQi9BZFJmaWZOVlZHWEJ4RGZXc0ZBUllQOE8KTzBOWmFtdmdQUnpm
Yzk5Vlc2dmxiZCtaTGJ6NnhqdXdmVHV6TW56M3BZMTNGTGFBSEcrckhqRWVnM0NSTUJVZWdzWitQ
b2J3TU5zZgozL1Z0RXJmMUNrQks3M0xIbi9OajJiYzBvZzdObk5nRjRqOXhmOFVPOTF6VkdWVlY2
VWxXUHpLRjVZOU1xUVNDSEMvR0s5Q282b1MrClBBd1d2ZHlIWGxUMTI5c05wVDkwcVdvZFhCTFFT
bktqdUFQYzBvRGNmNmVZUWlyQm1MUCtqajFyLzIzOHFBeS8vbGp2TEc1OVliL2UKQWFtczFaSzVT
V0g1b1dUc2NOZTM5dU5zOFd3ZmUxenYraloyT0pTa1VyV3E2b1dmdXJldHN0S3ltUkxrdVg5bXBU
RzVCZDFHZk5XUAp3anZrWmZNOVhFVEMzeG9MTEVTbE9zK0lqNkp5OFpoNFVaQlU0cGVPa2lwOGUy
NjJpVk1LT1g3Z1BmeDkwNVcreVVkK0VTVnErenBFCmhhbHFyVHpUNFo2ck9xT3FhazhsalA3d0N1
OGtWRGdoYXYvczA5dDJiZHZsZkNkUHBJblFsNGZCd3JuaW5yRjZYSFp6U1haZy84aVUKRTZqS3FH
cU50UzJoWHBza0xZRE9YcXlnNkVjTWoxR3ZvWHZiYlorbHZtQ04wbFQ3bWlQYlk0dlducTNqdUoy
ZmZHN2lMdCtxVG80awozdmNlVHd2SDFzVDd5UkdybWtwVlZyL2g3TXE4bTNRc0h0L3BqOTM5NG1y
R1o3WXQ5NFgrKzIzdnJZSHdUbGEyby9NTWhKMFdlc3orCk9zOGNuOENYS05QT21TcDhNVlhWZUpB
OWoxbXgxbXNxL0lQNytYU3JEYzRZVGJQK3p3YjNUc2psVHQxRVZjOW9TNW1yOGlEWW5sZ28KNVlp
RVVuYnhJWCt4STBKZkhnYVhIS3RqdjNqdmo0QlNuYWUzalIvRnVZbU1xbSsyalI5Rk5VUm5HajZR
R1QvNlpwdWtxUU5ZVVllbwpVZW5MbEh4QWl5TFQxYUZOa1plajdNaDJaVVBYUHZUU2JkY2VUeVJJ
R2VQZUkxMVpsTFVNcmtrOTNNR09LVi9BSE92cllLbUhnMnY0CkNLbW1LZ3FTT21IWWZ6NGhFMWl6
NThzaG02cFgxbDdkOUJxR2Q5S1NHNXkyYkNmb1BEdjRkbmRuU2NEVGRLUUZIbC9iQlQ5S2FKU2YK
WUlPUEkwVTZabVI0UGFLV05sZDFQSU9HMHRJWjlzd0EyOU9MNG1ReXBoRmthUm0rMXhhZnk0S01Z
eU5vSE1Lc1l6VHQzL3NBQnRRUQpQeHM4dE9mUUhraTZwT0M3UmxsdnRQdFdjTDlPOFo0T080VGR0
MHBjRWZ2QUlQYTJpYy8vR2o2RVlBc29pb2pwZExnemU5cys0cWFLCndlTTdPeFp4aHJwR3NZbUhl
TjAwa0ZsanF3ZmpDSW0xVTc4a2Q3OHVvTDJGaFpkazNkQmhLbXVqcS9OOG8vQlJGdFVzdiswcmVQ
R1MKdWYxekdWNlBxRXZmcTlMbXF2d1pVRjdjNmU1dWdFL1dyZ05NTlcydFNkdDNiRDh0THNxeTA5
dlM5MG80SHdzV3AwYlVBY1BxaGRVTApGUDFDTGkwNk1vVUJ3TWlVM1NIUXp1ck1CUzlCeWlOaTFk
dGZiU1hNU2NRb25BK1U0aVI4dkZCYVc2LzNwYUF4dlVlc2UxN25HU01hCnRhN3k4c1J2UHRjejEv
VnQ2SGNQUHlmSFkzaXNvN2RiL0Y2Vk9sZVZheStYSG1BblBmK3cwSDdXcGNicStnWlgwaWdWOVdk
Umo3YXEKWW1hUGRqZFZqbnJKNkUzK003V1JxY1lyMkkyUlMrYzZ6eGpSTkh4SDhSMFFReEIwcXZr
RVFjc3JTL1QveXFqNkZudEFxY3JReHBZTApzVnN3K0RYdDhQMngvd2RGbTN3QmVXNDBUUUFBQUFC
SlJVNUVya0pnZ2c9PQoKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvRG9Zb3VFdmVuQmVuY2gvZmxp
Z2h0anMtZXhhbXBsZS1hcHAvY29tcG9uZW50cy9lczUtc2hpbS90ZXN0cy9saWIvamFzbWluZV9m
YXZpY29uLnBuZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09CkNhbm5vdCBkaXNwbGF5OiBmaWxlIG1hcmtlZCBhcyBhIGJp
bmFyeSB0eXBlLgpzdm46bWltZS10eXBlID0gaW1hZ2UvcG5nCkluZGV4OiBQZXJmb3JtYW5jZVRl
c3RzL0RvWW91RXZlbkJlbmNoL2ZsaWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvZXM1LXNo
aW0vdGVzdHMvbGliL2phc21pbmVfZmF2aWNvbi5wbmcKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFu
Y2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25lbnRzL2Vz
NS1zaGltL3Rlc3RzL2xpYi9qYXNtaW5lX2Zhdmljb24ucG5nCShyZXZpc2lvbiAwKQorKysgUGVy
Zm9ybWFuY2VUZXN0cy9Eb1lvdUV2ZW5CZW5jaC9mbGlnaHRqcy1leGFtcGxlLWFwcC9jb21wb25l
bnRzL2VzNS1zaGltL3Rlc3RzL2xpYi9qYXNtaW5lX2Zhdmljb24ucG5nCSh3b3JraW5nIGNvcHkp
CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBQZXJmb3JtYW5jZVRlc3RzL0RvWW91RXZlbkJlbmNoL2Zs
aWdodGpzLWV4YW1wbGUtYXBwL2NvbXBvbmVudHMvZXM1LXNoaW0vdGVzdHMvbGliL2phc21pbmVf
ZmF2aWNvbi5wbmcKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOm1pbWUtdHlwZQojIyAtMCwwICsxICMj
CitpbWFnZS9wbmcKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQoKaVZCT1J3MEtHZ29B
QUFBTlNVaEVVZ0FBQUJBQUFBQVFDQVlBQUFBZjgvOWhBQUFBQkdkQlRVRUFBTEdQQy94aEJRQUFB
QUZ6VWtkQwpBSzdPSE9rQUFBQWdZMGhTVFFBQWVpWUFBSUNFQUFENkFBQUFnT2dBQUhVd0FBRHFZ
QUFBT3BnQUFCZHduTHBSUEFBQUFBWmlTMGRFCkFQOEEvd0Qvb0wybmt3QUFBQWx3U0ZsekFBQUxF
d0FBQ3hNQkFKcWNHQUFBQXVCSlJFRlVPTXVsa2t0SVZHRVlodC8vblArY0dVOXoKOHpnWFM2SlV0
TWp4a3BlTU1vc2kwbG9FUVMyRTdnUkYwS1pOaXhiUnBoc1ZCUVV0b2lLaUMwVlIwVDBObzlJYUxa
a3lSOGR5eGpLZApHdE1aeitqb25QOXZVUk5TdUlpZTFmdkI5NzE4TjRKZlRFNjNUMSsvcVdaM2Ux
dUg1LzY5dW90YWJHUVFBQXl5bERLL29tekZ0S3pNCkFnS3U2NG14K05VcnQwOXFzZUVJeHBQdnpx
MTg3V3ZVMmo2OWpSMDdzZTlHYnM2MElvbUswdFp0Ni9aNlB6UkZnZ05kL05OZ2dGKy8KYzlGcnM1
cWN5VHFhRklYRkJmUFNuRTRqbFNSaHpZWjFLNmRuWjJYZnVucjk5cmFkTzdiYlhlbG14aGhFVVlU
ZjE5RVdqV3I5ZnhtTQp4a2MxemhuaEFEaGpLS3VZNzg2WW11RTJXeXpnbklNUWd0aFFOUEgweWJN
SE91T0paSjJRRkxXUDY2L1YzcmxmTHhBQ1FnZ0FRREdaCndjRUJBSnd6TkRlKzdIalY0S2tiUDdx
WUZMSFlTTFQ5M2Z1M3M0dnpsOWxVMWNZd2h2ZVJKL2dZYllKRmRpSVcxa0FwTlJTVkZKYW0KV2sy
dVlLRGJQendTMTM0Yk9CM3ExSW9GNWN1TFNvcm15WkprWVZSSEpOR0xsdEJEV0kwT1pMb0tvVG9j
aHR5OFdabVZTeFl1SFkxcApjc01MenlOcU1pbHFWZlhpbXJXYjEyNHBMQ3ZKTnhoVENHTU1CQVFa
SkE4NXFUMllZcHJ4Y3d3QWVpSUIyV0RFa3VxbFZlZlBYam9xCnppa3JXTDVyejY2RHhYUExzNGhJ
Q2VjY2dpQ0E2VG9FWFVLMnZSUXlVOUQvTmNSbGcwd29wUkFFQW1XU1l2VTJOYmVLZlgzZkFtODgK
elI2SFhjMXl1WnpwbkRFUzZ1MGQrT0R6Uld5cHFzbVFvb0JTaW1CblorajQvaU1IR3A4M05MVzJl
TisxdG5oYi9PMmRiU1M1Z3pUVgo2c3B6enl4WGxCU2w2Mk93MDEwd3EvTHdxV09IcUNRVFFSRFE1
ZmVIVmxXdHJ2enlKZVFiZjRYZmZ4RHVIK3lycjIrOG1Zek5Gck5OCkd4cUsyOVEwSXdpQnJ1dWNB
QVIvSUdBQ2dvSHU5cytCN2g2UlV1aUpNZFRlZlhBdkhQNGUrRE9QVG1Ud0xUelE0Mmw0OVZLMXA5
a3UKbkQ1MzV2elp5MGZpbzJQRCtCZEtTL0lYVjFjdjJrakl4SjMrTno4QVo5c3BKdlkyUEtFQUFB
QUFTVVZPUks1Q1lJST0KCg==
</data>
<flag name="review"
          id="234873"
          type_id="1"
          status="+"
          setter="koivisto"
    />
          </attachment>
      

    </bug>

</bugzilla>