<?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>27928</bug_id>
          
          <creation_ts>2009-08-01 23:29:02 -0700</creation_ts>
          <short_desc>Inspector: Make Bottom &quot;Drawer&quot; More Extensible To Support Other Views</short_desc>
          <delta_ts>2009-08-04 00:16:52 -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>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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>0</everconfirmed>
          <reporter name="Joseph Pecoraro">joepeck</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>aroben</cc>
    
    <cc>kmccullough</cc>
    
    <cc>pfeldman</cc>
    
    <cc>timothy</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>136511</commentid>
    <comment_count>0</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2009-08-01 23:29:02 -0700</bug_when>
    <thetext>This would make it possible for the Sliding Drawer that currently holds the Console to support multiple views:
http://screencast.com/t/4Cuo618Zbn

This hints at a new &quot;Changes&quot; view, that will likely be opened in a different bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136516</commentid>
    <comment_count>1</comment_count>
      <attachid>33945</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2009-08-02 00:27:46 -0700</bug_when>
    <thetext>Created attachment 33945
Drawer Support For Multiple Views

The ChangeLog covers some of the details.  But I&apos;ll still throw some notes here.

BEFORE COMMIT:

- Console.js should be renamed to ConsoleView.js in order to preserve the history (good point from Tim).

NOTES:

- Drawer.js handles the Sliding View opening/closing.  It may contain multiple views with their own status bar icons.
- ConsoleView.js one such view.  (Basically the old Console.js)
- ChangesView.js a new view that may be similar to &quot;FireDiff&quot; for Firebug, to show Changes made via the inspector.
- The ChangesView is off in the patch, there are a number of &quot;TODO&quot; items that explicitly mention what needs to be done to enable it.
- Images for the ChangesView are not yet implemented.  There are a number of &quot;TODO&quot; items that explicitly mention which images are needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136781</commentid>
    <comment_count>2</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2009-08-03 14:28:51 -0700</bug_when>
    <thetext>Landed in r46732.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136916</commentid>
    <comment_count>3</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2009-08-04 00:16:52 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Landed in r46732.

Note that there is a special case in InspectorController&apos;s showPanel functionality that is treating Console differently than other views (due to its being a drawer). I don&apos;t think any action is required wrt this change, just fyi.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33945</attachid>
            <date>2009-08-02 00:27:46 -0700</date>
            <delta_ts>2009-08-03 08:33:17 -0700</delta_ts>
            <desc>Drawer Support For Multiple Views</desc>
            <filename>DrawerSupport.patch</filename>
            <type>text/plain</type>
            <size>114416</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZTAyZjViMi4uYTI1ODJlMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw4MSBAQAorMjAwOS0wOC0wMiAgSm9zZXBoIFBlY29y
YXJvICA8am9lcGVjazAyQGdtYWlsLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBJbnNwZWN0b3I6IE1ha2UgQm90dG9tICJEcmF3ZXIiIE1vcmUg
RXh0ZW5zaWJsZSBUbyBTdXBwb3J0IE90aGVyIFZpZXdzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNzkyOAorCisgICAgICAgICogRW5nbGlzaC5scHJv
ai9sb2NhbGl6ZWRTdHJpbmdzLmpzOgorCisgICAgICAgICAgIlNob3cgY2hhbmdlcyB2aWV3Iiwg
IkhpZGUgY2hhbmdlcyB2aWV3IiwgIkNsZWFyIGNoYW5nZXMgbG9nIiwgIiVkIHN0eWxlIGNoYW5n
ZSIsICIlZCBzdHlsZSBjaGFuZ2VzIgorCisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9D
aGFuZ2VzVmlldy5qczogQWRkZWQuCisgICAgICAgIChXZWJJbnNwZWN0b3IuQ2hhbmdlc1ZpZXcp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNoYW5nZXNWaWV3LnByb3RvdHlwZS5fY2xlYXJCdXR0
b25DbGlja2VkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5DaGFuZ2VzVmlldy5wcm90b3R5cGUu
X3RvZ2dsZUNoYW5nZXNCdXR0b25DbGlja2VkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5DaGFu
Z2VzVmlldy5wcm90b3R5cGUuYXR0YWNoKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5DaGFuZ2Vz
Vmlldy5wcm90b3R5cGUuc2hvdyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ2hhbmdlc1ZpZXcu
cHJvdG90eXBlLmhpZGUpOgorICAgICAgICAKKyAgICAgICAgICBUbyBiZSBhIG5ldyB2aWV3IHRv
IHNob3cgQ2hhbmdlcyBtYWRlIHZpYSB0aGUgaW5zcGVjdG9yLiAgRE9NLCBDU1MsIG9yIG90aGVy
d2lzZS4KKyAgICAgICAgCisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9Db25zb2xlLmpz
OiBSZW1vdmVkLgorCisgICAgICAgICAgU2xpZGluZyBWaWV3IGFzcGVjdCBtb3ZlZCB0byBEcmF3
ZXIuanMuICBUaGUgImNvbnNvbGUiIGl0c2VsZiBoYXMgbW92ZWQgdG8gQ29uc29sZVZpZXcuanMK
KworICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvQ29uc29sZVZpZXcuanM6IEFkZGVkLgor
ICAgICAgICAKKyAgICAgICAgICBMaXR0bGUgaGFzIGNoYW5nZWQgZnJvbSBpdHMgbW92ZSBmcm9t
IENvbnNvbGUuanMgb3RoZXIgdGhlbiBzdXBwb3J0IGZvciB3b3JraW5nIHdpdGggdGhlIERyYXdl
ci4KKyAgICAgICAgCisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9EcmF3ZXIuanM6IEFk
ZGVkLgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRyYXdlcik6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuRHJhd2VyLnByb3RvdHlwZS5nZXQgdmlzaWJsZVZpZXcpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLkRyYXdlci5wcm90b3R5cGUuc2V0IHZpc2libGVWaWV3KToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5EcmF3ZXIucHJvdG90eXBlLnNob3cuYW5pbWF0aW9uRmluaXNoZWQpOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLkRyYXdlci5wcm90b3R5cGUuc2hvdyk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuRHJhd2VyLnByb3RvdHlwZS5oaWRlLmFuaW1hdGlvbkZpbmlzaGVkKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5EcmF3ZXIucHJvdG90eXBlLmhpZGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LkRyYXdlci5wcm90b3R5cGUuX3NhZmVseVJlbW92ZUNoaWxkcmVuKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5EcmF3ZXIucHJvdG90eXBlLl9zdGFydFN0YXR1c0JhckRyYWdnaW5nKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5EcmF3ZXIucHJvdG90eXBlLl9zdGF0dXNCYXJEcmFnZ2luZyk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuRHJhd2VyLnByb3RvdHlwZS5fZW5kU3RhdHVzQmFyRHJhZ2dp
bmcpOgorICAgICAgICAKKyAgICAgICAgICBBbGxvdyBmb3IgbXVsdGlwbGUgdmlld3MgaW5zaWRl
IHRoZSBTbGlkaW5nIERyYXdlci4KKyAgICAgICAgCisgICAgICAgICogaW5zcGVjdG9yL2Zyb250
LWVuZC9FbGVtZW50c1BhbmVsLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkVsZW1lbnRzUGFu
ZWwpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkVsZW1lbnRzUGFuZWwucHJvdG90eXBlLnJlbmFt
ZVNlbGVjdG9yKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1BhbmVsLnByb3RvdHlw
ZS5hZGRTdHlsZUNoYW5nZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRWxlbWVudHNQYW5lbC5w
cm90b3R5cGUucmVtb3ZlU3R5bGVDaGFuZ2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkVsZW1l
bnRzUGFuZWwucHJvdG90eXBlLmdlbmVyYXRlU3R5bGVzaGVldCk6CisKKyAgICAgICAgICBTdGFy
dGluZyB3b3JrIG9uIHRoZSAiQ2hhbmdlcyIgUGFuZWwuIFRoZSBhYmlsaXR5IHRvIGdlbmVyYXRl
IGEgU3R5bGVzaGVldCBmcm9tIFN0eWxlcyBhZGRlZCB2aWEgdGhlIEluc3BlY3Rvci4KKworICAg
ICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvSW1hZ2VzL3N0eWxlSWNvbi5wbmc6IEFkZGVkLgor
CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9TdHlsZXNTaWRlYmFyUGFuZS5qczoKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnRpZXNTZWN0aW9uLnByb3RvdHlwZS5pc0lu
c3BlY3RvclN0eWxlc2hlZXQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydGll
c1NlY3Rpb24ucHJvdG90eXBlLmVkaXRpbmdTZWxlY3RvckNvbW1pdHRlZCk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuQmxhbmtTdHlsZVByb3BlcnRpZXNTZWN0aW9uLnByb3RvdHlwZS5tYWtlTm9y
bWFsKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnR5VHJlZUVsZW1lbnQucHJv
dG90eXBlKToKKworICAgICAgICAgIEludGVyZmFjZSB3aXRoIEVsZW1lbnRzUGFuZWwgZm9yIGdl
bmVyYXRpbmcgYSBTdHlsZXNoZWV0IG9mIENoYW5nZXMuCisKKyAgICAgICAgKiBpbnNwZWN0b3Iv
ZnJvbnQtZW5kL1dlYktpdC5xcmM6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNw
ZWN0b3IuY3NzOiBSZWZhY3RvcmVkIHRvIGFsbG93IGZvciBtdWx0aXBsZSB2aWV3cyBpbiB0aGUg
ZHJhd2VyLgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWw6IFJl
ZmFjdG9yZWQgdG8gYWxsb3cgZm9yIG11bHRpcGxlIHZpZXdzIGluIHRoZSBkcmF3ZXIuCisKKyAg
ICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qczoKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5nZXQgc3R5bGVDaGFuZ2VzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5zZXQgc3R5
bGVDaGFuZ2VzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5fdXBkYXRlQ2hhbmdlc0NvdW50KToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5sb2FkZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLmRv
Y3VtZW50S2V5RG93bik6CisgICAgICAgIChXZWJJbnNwZWN0b3Iuc2hvd0NvbnNvbGUpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLnNob3dDaGFuZ2VzKToKKworICAgICAgICAgIFN1cHBvcnQgZm9y
IHRoZSBkcmF3ZXIgYW5kICJzdHlsZXMgY2hhbmdlZCBpY29uIiBzaW1pbGFyIHRvIHRoZSAiZXJy
b3JzIGFuZCB3YXJuaW5ncyIgaWNvbnMuCisKIDIwMDktMDgtMDEgIFBhdmVsIEZlbGRtYW4gIDxw
ZmVsZG1hbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRj
aGVyLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9FbmdsaXNoLmxwcm9qL2xvY2FsaXplZFN0cmluZ3Mu
anMgYi9XZWJDb3JlL0VuZ2xpc2gubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qcwppbmRleCBiYjdm
ZjZkYTk0ODcwNTY1N2QyZDkxMzk1NTZjNWVlNjljNjdmYTJkLi4wNTM2NjA0MzliZjYzZTQ1NmIy
NWFiY2QxZWRjMjgwYmUxM2RhYmJmIDEwMDY0NApHSVQgYmluYXJ5IHBhdGNoCmRlbHRhIDI3OQp6
Y21hRjJuRE4zMiN0b2E7I2Z1cUE3JUNaWjcqWkomNz9LJD43IW4hczd9NlAxQ252SEMzdUJSKz85
Wj0xKl5pd34KejZwSWB+YHM3JTRhVTMjXlQzfiZYMXZ2T05BN0g9NiE0MD5IcD9MQl8wYVg8S01G
R3BySnB3TDVxRFlFPj9raSkrCm8xaUdfKUBAKncpVkp0Rn0meGBBQ0tCQ2trajYrK3JuS1RaV01s
PHV4ZXI1fSMwYTNVX2VnRlVmCgpkZWx0YSAzNwp2Y21WKz0wTlZmMXJ+JlN5MGtFPE12emlGeDIo
JGJWSXVldUdCb01SMkJ5YmF4KmY8Y2chWj9sX09QQ09mCgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL0NoYW5nZXNWaWV3LmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL0NoYW5nZXNWaWV3LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjgwMmZkYmEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
Q2hhbmdlc1ZpZXcuanMKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
NywgMjAwOCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA5IEpvc2VwaCBQZWNvcmFybworICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhl
ciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1l
cyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKK1dlYkluc3BlY3Rvci5DaGFuZ2VzVmlldyA9IGZ1bmN0
aW9uKGRyYXdlcikKK3sKKyAgICBXZWJJbnNwZWN0b3IuVmlldy5jYWxsKHRoaXMpOworICAgIHRo
aXMuZWxlbWVudC5pbm5lckhUTUwgPSAiPGRpdiBzdHlsZT1cImJvdHRvbToyNSU7Y29sb3I6cmdi
KDE5MiwxOTIsMTkyKTtmb250LXNpemU6MTJweDtoZWlnaHQ6NjVweDtsZWZ0OjBweDttYXJnaW46
YXV0bztwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowcHg7dGV4dC1hbGlnbjpjZW50ZXI7dG9wOjBw
eDtcIj48aDE+Tm90IEltcGxlbWVudGVkIFlldDwvaDE+PC9kaXY+IjsKKworICAgIHRoaXMuZHJh
d2VyID0gZHJhd2VyOworCisgICAgdGhpcy5jbGVhckJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoImJ1dHRvbiIpOworICAgIHRoaXMuY2xlYXJCdXR0b24uaWQgPSAiY2xlYXItY2hhbmdl
cy1zdGF0dXMtYmFyLWl0ZW0iOworICAgIHRoaXMuY2xlYXJCdXR0b24udGl0bGUgPSBXZWJJbnNw
ZWN0b3IuVUlTdHJpbmcoIkNsZWFyIGNoYW5nZXMgbG9nLiIpOworICAgIHRoaXMuY2xlYXJCdXR0
b24uY2xhc3NOYW1lID0gInN0YXR1cy1iYXItaXRlbSI7CisgICAgdGhpcy5jbGVhckJ1dHRvbi5h
ZGRFdmVudExpc3RlbmVyKCJjbGljayIsIHRoaXMuX2NsZWFyQnV0dG9uQ2xpY2tlZC5iaW5kKHRo
aXMpLCBmYWxzZSk7CisKKyAgICB0aGlzLnRvZ2dsZUNoYW5nZXNCdXR0b24gPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgiY2hhbmdlcy1zdGF0dXMtYmFyLWl0ZW0iKTsKKyAgICB0aGlzLnRvZ2ds
ZUNoYW5nZXNCdXR0b24udGl0bGUgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlNob3cgY2hhbmdl
cyB2aWV3LiIpOworICAgIHRoaXMudG9nZ2xlQ2hhbmdlc0J1dHRvbi5hZGRFdmVudExpc3RlbmVy
KCJjbGljayIsIHRoaXMuX3RvZ2dsZUNoYW5nZXNCdXR0b25DbGlja2VkLmJpbmQodGhpcyksIGZh
bHNlKTsKKyAgICB2YXIgYW5jaG9yZWRTdGF0dXNCYXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgiYW5jaG9yZWQtc3RhdHVzLWJhci1pdGVtcyIpOworICAgIGFuY2hvcmVkU3RhdHVzQmFyLmFw
cGVuZENoaWxkKHRoaXMudG9nZ2xlQ2hhbmdlc0J1dHRvbik7Cit9CisKK1dlYkluc3BlY3Rvci5D
aGFuZ2VzVmlldy5wcm90b3R5cGUgPSB7CisgICAgX2NsZWFyQnV0dG9uQ2xpY2tlZDogZnVuY3Rp
b24oKQorICAgIHsKKyAgICAgICAgLy8gTm90IEltcGxlbWVudGVkIFlldAorICAgIH0sCisKKyAg
ICBfdG9nZ2xlQ2hhbmdlc0J1dHRvbkNsaWNrZWQ6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAg
IHRoaXMuZHJhd2VyLnZpc2libGVWaWV3ID0gdGhpczsKKyAgICB9LAorCisgICAgYXR0YWNoOiBm
dW5jdGlvbihtYWluRWxlbWVudCwgc3RhdHVzQmFyRWxlbWVudCkKKyAgICB7CisgICAgICAgIG1h
aW5FbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuZWxlbWVudCk7CisgICAgICAgIHN0YXR1c0JhckVs
ZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5jbGVhckJ1dHRvbik7CisgICAgfSwKKworICAgIHNob3c6
IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMudG9nZ2xlQ2hhbmdlc0J1dHRvbi5hZGRT
dHlsZUNsYXNzKCJ0b2dnbGVkLW9uIik7CisgICAgICAgIHRoaXMudG9nZ2xlQ2hhbmdlc0J1dHRv
bi50aXRsZSA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiSGlkZSBjaGFuZ2VzIHZpZXcuIik7Cisg
ICAgfSwKKworICAgIGhpZGU6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMudG9nZ2xl
Q2hhbmdlc0J1dHRvbi5yZW1vdmVTdHlsZUNsYXNzKCJ0b2dnbGVkLW9uIik7CisgICAgICAgIHRo
aXMudG9nZ2xlQ2hhbmdlc0J1dHRvbi50aXRsZSA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiU2hv
dyBjaGFuZ2VzIHZpZXcuIik7CisgICAgfQorfQorCitXZWJJbnNwZWN0b3IuQ2hhbmdlc1ZpZXcu
cHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5WaWV3LnByb3RvdHlwZTsKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Db25zb2xlLmpzIGIvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL0NvbnNvbGUuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDVhOTNiOGQuLjAwMDAwMDAKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0Nv
bnNvbGUuanMKKysrIC9kZXYvbnVsbApAQCAtMSwxMDE0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDcsIDIwMDggQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuIAotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uIAotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIs
IEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAg
ICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLiAKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJ
VFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
LSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi1XZWJJ
bnNwZWN0b3IuQ29uc29sZSA9IGZ1bmN0aW9uKCkKLXsKLSAgICB0aGlzLm1lc3NhZ2VzID0gW107
Ci0KLSAgICBXZWJJbnNwZWN0b3IuVmlldy5jYWxsKHRoaXMsIGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJjb25zb2xlIikpOwotCi0gICAgdGhpcy5tZXNzYWdlc0VsZW1lbnQgPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgiY29uc29sZS1tZXNzYWdlcyIpOwotICAgIHRoaXMubWVzc2FnZXNFbGVt
ZW50LmFkZEV2ZW50TGlzdGVuZXIoInNlbGVjdHN0YXJ0IiwgdGhpcy5fbWVzc2FnZXNTZWxlY3RT
dGFydC5iaW5kKHRoaXMpLCBmYWxzZSk7Ci0gICAgdGhpcy5tZXNzYWdlc0VsZW1lbnQuYWRkRXZl
bnRMaXN0ZW5lcigiY2xpY2siLCB0aGlzLl9tZXNzYWdlc0NsaWNrZWQuYmluZCh0aGlzKSwgdHJ1
ZSk7Ci0KLSAgICB0aGlzLnByb21wdEVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
Y29uc29sZS1wcm9tcHQiKTsKLSAgICB0aGlzLnByb21wdEVsZW1lbnQuaGFuZGxlS2V5RXZlbnQg
PSB0aGlzLl9wcm9tcHRLZXlEb3duLmJpbmQodGhpcyk7Ci0gICAgdGhpcy5wcm9tcHQgPSBuZXcg
V2ViSW5zcGVjdG9yLlRleHRQcm9tcHQodGhpcy5wcm9tcHRFbGVtZW50LCB0aGlzLmNvbXBsZXRp
b25zLmJpbmQodGhpcyksICIgLj06Wyh7OyIpOwotCi0gICAgdGhpcy50b2dnbGVCdXR0b24gPSBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29uc29sZS1zdGF0dXMtYmFyLWl0ZW0iKTsKLSAgICB0
aGlzLnRvZ2dsZUJ1dHRvbi50aXRsZSA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiU2hvdyBjb25z
b2xlLiIpOwotICAgIHRoaXMudG9nZ2xlQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwg
dGhpcy5fdG9nZ2xlQnV0dG9uQ2xpY2tlZC5iaW5kKHRoaXMpLCBmYWxzZSk7Ci0KLSAgICB0aGlz
LmNsZWFyQnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNsZWFyLWNvbnNvbGUtc3Rh
dHVzLWJhci1pdGVtIik7Ci0gICAgdGhpcy5jbGVhckJ1dHRvbi50aXRsZSA9IFdlYkluc3BlY3Rv
ci5VSVN0cmluZygiQ2xlYXIgY29uc29sZSBsb2cuIik7Ci0gICAgdGhpcy5jbGVhckJ1dHRvbi5h
ZGRFdmVudExpc3RlbmVyKCJjbGljayIsIHRoaXMuX2NsZWFyQnV0dG9uQ2xpY2tlZC5iaW5kKHRo
aXMpLCBmYWxzZSk7Ci0KLSAgICB0aGlzLnRvcEdyb3VwID0gbmV3IFdlYkluc3BlY3Rvci5Db25z
b2xlR3JvdXAobnVsbCwgMCk7Ci0gICAgdGhpcy5tZXNzYWdlc0VsZW1lbnQuaW5zZXJ0QmVmb3Jl
KHRoaXMudG9wR3JvdXAuZWxlbWVudCwgdGhpcy5wcm9tcHRFbGVtZW50KTsKLSAgICB0aGlzLmdy
b3VwTGV2ZWwgPSAwOwotICAgIHRoaXMuY3VycmVudEdyb3VwID0gdGhpcy50b3BHcm91cDsKLQot
ICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtYWluLXN0YXR1cy1iYXIiKS5hZGRFdmVudExp
c3RlbmVyKCJtb3VzZWRvd24iLCB0aGlzLl9zdGFydFN0YXR1c0JhckRyYWdnaW5nLmJpbmQodGhp
cyksIHRydWUpOwotfQotCi1XZWJJbnNwZWN0b3IuQ29uc29sZS5wcm90b3R5cGUgPSB7Ci0gICAg
c2hvdzogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX2FuaW1hdGluZyB8fCB0
aGlzLnZpc2libGUpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgV2ViSW5zcGVjdG9y
LlZpZXcucHJvdG90eXBlLnNob3cuY2FsbCh0aGlzKTsKLQotICAgICAgICB0aGlzLl9hbmltYXRp
bmcgPSB0cnVlOwotCi0gICAgICAgIHRoaXMudG9nZ2xlQnV0dG9uLmFkZFN0eWxlQ2xhc3MoInRv
Z2dsZWQtb24iKTsKLSAgICAgICAgdGhpcy50b2dnbGVCdXR0b24udGl0bGUgPSBXZWJJbnNwZWN0
b3IuVUlTdHJpbmcoIkhpZGUgY29uc29sZS4iKTsKLQotICAgICAgICBkb2N1bWVudC5ib2R5LmFk
ZFN0eWxlQ2xhc3MoImNvbnNvbGUtdmlzaWJsZSIpOwotCi0gICAgICAgIHZhciBhbmNob3JlZEl0
ZW1zID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFuY2hvcmVkLXN0YXR1cy1iYXItaXRlbXMi
KTsKLQotICAgICAgICB2YXIgYW5pbWF0aW9ucyA9IFsKLSAgICAgICAgICAgIHtlbGVtZW50OiBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgibWFpbiIpLCBlbmQ6IHtib3R0b206IHRoaXMuZWxlbWVu
dC5vZmZzZXRIZWlnaHR9fSwKLSAgICAgICAgICAgIHtlbGVtZW50OiBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgibWFpbi1zdGF0dXMtYmFyIiksIHN0YXJ0OiB7InBhZGRpbmctbGVmdCI6IGFuY2hv
cmVkSXRlbXMub2Zmc2V0V2lkdGggLSAxfSwgZW5kOiB7InBhZGRpbmctbGVmdCI6IDB9fSwKLSAg
ICAgICAgICAgIHtlbGVtZW50OiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgib3RoZXItY29uc29s
ZS1zdGF0dXMtYmFyLWl0ZW1zIiksIHN0YXJ0OiB7b3BhY2l0eTogMH0sIGVuZDoge29wYWNpdHk6
IDF9fQotICAgICAgICBdOwotCi0gICAgICAgIHZhciBjb25zb2xlU3RhdHVzQmFyID0gZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoImNvbnNvbGUtc3RhdHVzLWJhciIpOwotICAgICAgICBjb25zb2xl
U3RhdHVzQmFyLmluc2VydEJlZm9yZShhbmNob3JlZEl0ZW1zLCBjb25zb2xlU3RhdHVzQmFyLmZp
cnN0Q2hpbGQpOwotCi0gICAgICAgIGZ1bmN0aW9uIGFuaW1hdGlvbkZpbmlzaGVkKCkKLSAgICAg
ICAgewotICAgICAgICAgICAgaWYgKCJ1cGRhdGVTdGF0dXNCYXJJdGVtcyIgaW4gV2ViSW5zcGVj
dG9yLmN1cnJlbnRQYW5lbCkKLSAgICAgICAgICAgICAgICBXZWJJbnNwZWN0b3IuY3VycmVudFBh
bmVsLnVwZGF0ZVN0YXR1c0Jhckl0ZW1zKCk7Ci0gICAgICAgICAgICBXZWJJbnNwZWN0b3IuY3Vy
cmVudEZvY3VzRWxlbWVudCA9IHRoaXMucHJvbXB0RWxlbWVudDsKLSAgICAgICAgICAgIGRlbGV0
ZSB0aGlzLl9hbmltYXRpbmc7Ci0gICAgICAgIH0KLQotICAgICAgICBXZWJJbnNwZWN0b3IuYW5p
bWF0ZVN0eWxlKGFuaW1hdGlvbnMsIHdpbmRvdy5ldmVudCAmJiB3aW5kb3cuZXZlbnQuc2hpZnRL
ZXkgPyAyMDAwIDogMjUwLCBhbmltYXRpb25GaW5pc2hlZC5iaW5kKHRoaXMpKTsKLQotICAgICAg
ICBpZiAoIXRoaXMucHJvbXB0LmlzQ2FyZXRJbnNpZGVQcm9tcHQoKSkKLSAgICAgICAgICAgIHRo
aXMucHJvbXB0Lm1vdmVDYXJldFRvRW5kT2ZQcm9tcHQoKTsKLSAgICB9LAotCi0gICAgaGlkZTog
ZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX2FuaW1hdGluZyB8fCAhdGhpcy52
aXNpYmxlKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIFdlYkluc3BlY3Rvci5WaWV3
LnByb3RvdHlwZS5oaWRlLmNhbGwodGhpcyk7Ci0KLSAgICAgICAgdGhpcy5fYW5pbWF0aW5nID0g
dHJ1ZTsKLQotICAgICAgICB0aGlzLnRvZ2dsZUJ1dHRvbi5yZW1vdmVTdHlsZUNsYXNzKCJ0b2dn
bGVkLW9uIik7Ci0gICAgICAgIHRoaXMudG9nZ2xlQnV0dG9uLnRpdGxlID0gV2ViSW5zcGVjdG9y
LlVJU3RyaW5nKCJTaG93IGNvbnNvbGUuIik7Ci0KLSAgICAgICAgaWYgKHRoaXMuZWxlbWVudCA9
PT0gV2ViSW5zcGVjdG9yLmN1cnJlbnRGb2N1c0VsZW1lbnQgfHwgdGhpcy5lbGVtZW50LmlzQW5j
ZXN0b3IoV2ViSW5zcGVjdG9yLmN1cnJlbnRGb2N1c0VsZW1lbnQpKQotICAgICAgICAgICAgV2Vi
SW5zcGVjdG9yLmN1cnJlbnRGb2N1c0VsZW1lbnQgPSBXZWJJbnNwZWN0b3IucHJldmlvdXNGb2N1
c0VsZW1lbnQ7Ci0KLSAgICAgICAgdmFyIGFuY2hvcmVkSXRlbXMgPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgiYW5jaG9yZWQtc3RhdHVzLWJhci1pdGVtcyIpOwotCi0gICAgICAgIC8vIFRlbXBv
cmFsbHkgc2V0IHByb3BlcnRpZXMgYW5kIGNsYXNzZXMgdG8gbWltaWMgdGhlIHBvc3QtYW5pbWF0
aW9uIHZhbHVlcyBzbyBwYW5lbHMKLSAgICAgICAgLy8gbGlrZSBFbGVtZW50cyBpbiB0aGVpciB1
cGRhdGVTdGF0dXNCYXJJdGVtcyBjYWxsIHdpbGwgc2l6ZSB0aGluZ3MgdG8gZml0IHRoZSBmaW5h
bCBsb2NhdGlvbi4KLSAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1haW4tc3RhdHVz
LWJhciIpLnN0eWxlLnNldFByb3BlcnR5KCJwYWRkaW5nLWxlZnQiLCAoYW5jaG9yZWRJdGVtcy5v
ZmZzZXRXaWR0aCAtIDEpICsgInB4Iik7Ci0gICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlU3R5
bGVDbGFzcygiY29uc29sZS12aXNpYmxlIik7Ci0gICAgICAgIGlmICgidXBkYXRlU3RhdHVzQmFy
SXRlbXMiIGluIFdlYkluc3BlY3Rvci5jdXJyZW50UGFuZWwpCi0gICAgICAgICAgICBXZWJJbnNw
ZWN0b3IuY3VycmVudFBhbmVsLnVwZGF0ZVN0YXR1c0Jhckl0ZW1zKCk7Ci0gICAgICAgIGRvY3Vt
ZW50LmJvZHkuYWRkU3R5bGVDbGFzcygiY29uc29sZS12aXNpYmxlIik7Ci0KLSAgICAgICAgdmFy
IGFuaW1hdGlvbnMgPSBbCi0gICAgICAgICAgICB7ZWxlbWVudDogZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoIm1haW4iKSwgZW5kOiB7Ym90dG9tOiAwfX0sCi0gICAgICAgICAgICB7ZWxlbWVudDog
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1haW4tc3RhdHVzLWJhciIpLCBzdGFydDogeyJwYWRk
aW5nLWxlZnQiOiAwfSwgZW5kOiB7InBhZGRpbmctbGVmdCI6IGFuY2hvcmVkSXRlbXMub2Zmc2V0
V2lkdGggLSAxfX0sCi0gICAgICAgICAgICB7ZWxlbWVudDogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoIm90aGVyLWNvbnNvbGUtc3RhdHVzLWJhci1pdGVtcyIpLCBzdGFydDoge29wYWNpdHk6IDF9
LCBlbmQ6IHtvcGFjaXR5OiAwfX0KLSAgICAgICAgXTsKLQotICAgICAgICBmdW5jdGlvbiBhbmlt
YXRpb25GaW5pc2hlZCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBtYWluU3RhdHVzQmFy
ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1haW4tc3RhdHVzLWJhciIpOwotICAgICAgICAg
ICAgbWFpblN0YXR1c0Jhci5pbnNlcnRCZWZvcmUoYW5jaG9yZWRJdGVtcywgbWFpblN0YXR1c0Jh
ci5maXJzdENoaWxkKTsKLSAgICAgICAgICAgIG1haW5TdGF0dXNCYXIuc3R5bGUucmVtb3ZlUHJv
cGVydHkoInBhZGRpbmctbGVmdCIpOwotICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVT
dHlsZUNsYXNzKCJjb25zb2xlLXZpc2libGUiKTsKLSAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9h
bmltYXRpbmc7Ci0gICAgICAgIH0KLQotICAgICAgICBXZWJJbnNwZWN0b3IuYW5pbWF0ZVN0eWxl
KGFuaW1hdGlvbnMsIHdpbmRvdy5ldmVudCAmJiB3aW5kb3cuZXZlbnQuc2hpZnRLZXkgPyAyMDAw
IDogMjUwLCBhbmltYXRpb25GaW5pc2hlZC5iaW5kKHRoaXMpKTsKLSAgICB9LAotCi0gICAgYWRk
TWVzc2FnZTogZnVuY3Rpb24obXNnKQotICAgIHsKLSAgICAgICAgaWYgKG1zZyBpbnN0YW5jZW9m
IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZSAmJiAhKG1zZyBpbnN0YW5jZW9mIFdlYkluc3Bl
Y3Rvci5Db25zb2xlQ29tbWFuZFJlc3VsdCkpIHsKLSAgICAgICAgICAgIG1zZy50b3RhbFJlcGVh
dENvdW50ID0gbXNnLnJlcGVhdENvdW50OwotICAgICAgICAgICAgbXNnLnJlcGVhdERlbHRhID0g
bXNnLnJlcGVhdENvdW50OwotCi0gICAgICAgICAgICB2YXIgbWVzc2FnZVJlcGVhdGVkID0gZmFs
c2U7Ci0KLSAgICAgICAgICAgIGlmIChtc2cuaXNFcXVhbCAmJiBtc2cuaXNFcXVhbCh0aGlzLnBy
ZXZpb3VzTWVzc2FnZSkpIHsKLSAgICAgICAgICAgICAgICAvLyBCZWNhdXNlIHNvbWV0aW1lcyB3
ZSBnZXQgYSBsYXJnZSBudW1iZXIgb2YgcmVwZWF0ZWQgbWVzc2FnZXMgYW5kIHNvbWV0aW1lcwot
ICAgICAgICAgICAgICAgIC8vIHdlIGdldCB0aGVtIG9uZSBhdCBhIHRpbWUsIHdlIG5lZWQgdG8g
a25vdyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGhvdyBtYW55Ci0gICAgICAgICAgICAgICAgLy8g
cmVwZWF0cyB3ZSB1c2VkIHRvIGhhdmUgYW5kIGhvdyBtYW55IHdlIGhhdmUgbm93LgotICAgICAg
ICAgICAgICAgIG1zZy5yZXBlYXREZWx0YSAtPSB0aGlzLnByZXZpb3VzTWVzc2FnZS50b3RhbFJl
cGVhdENvdW50OwotCi0gICAgICAgICAgICAgICAgaWYgKCFpc05hTih0aGlzLnJlcGVhdENvdW50
QmVmb3JlQ29tbWFuZCkpCi0gICAgICAgICAgICAgICAgICAgIG1zZy5yZXBlYXRDb3VudCAtPSB0
aGlzLnJlcGVhdENvdW50QmVmb3JlQ29tbWFuZDsKLQotICAgICAgICAgICAgICAgIGlmICghdGhp
cy5jb21tYW5kU2luY2VQcmV2aW91c01lc3NhZ2UpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8g
UmVjcmVhdGUgdGhlIHByZXZpb3VzIG1lc3NhZ2UgZWxlbWVudCB0byByZXNldCB0aGUgcmVwZWF0
IGNvdW50LgotICAgICAgICAgICAgICAgICAgICB2YXIgbWVzc2FnZXNFbGVtZW50ID0gdGhpcy5j
dXJyZW50R3JvdXAubWVzc2FnZXNFbGVtZW50OwotICAgICAgICAgICAgICAgICAgICBtZXNzYWdl
c0VsZW1lbnQucmVtb3ZlQ2hpbGQobWVzc2FnZXNFbGVtZW50Lmxhc3RDaGlsZCk7Ci0gICAgICAg
ICAgICAgICAgICAgIG1lc3NhZ2VzRWxlbWVudC5hcHBlbmRDaGlsZChtc2cudG9NZXNzYWdlRWxl
bWVudCgpKTsKLQotICAgICAgICAgICAgICAgICAgICBtZXNzYWdlUmVwZWF0ZWQgPSB0cnVlOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIGRl
bGV0ZSB0aGlzLnJlcGVhdENvdW50QmVmb3JlQ29tbWFuZDsKLQotICAgICAgICAgICAgLy8gSW5j
cmVtZW50IHRoZSBlcnJvciBvciB3YXJuaW5nIGNvdW50Ci0gICAgICAgICAgICBzd2l0Y2ggKG1z
Zy5sZXZlbCkgewotICAgICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2Uu
TWVzc2FnZUxldmVsLldhcm5pbmc6Ci0gICAgICAgICAgICAgICAgV2ViSW5zcGVjdG9yLndhcm5p
bmdzICs9IG1zZy5yZXBlYXREZWx0YTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VMZXZlbC5FcnJvcjoK
LSAgICAgICAgICAgICAgICBXZWJJbnNwZWN0b3IuZXJyb3JzICs9IG1zZy5yZXBlYXREZWx0YTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8g
QWRkIG1lc3NhZ2UgdG8gdGhlIHJlc291cmNlIHBhbmVsCi0gICAgICAgICAgICBpZiAobXNnLnVy
bCBpbiBXZWJJbnNwZWN0b3IucmVzb3VyY2VVUkxNYXApIHsKLSAgICAgICAgICAgICAgICBtc2cu
cmVzb3VyY2UgPSBXZWJJbnNwZWN0b3IucmVzb3VyY2VVUkxNYXBbbXNnLnVybF07Ci0gICAgICAg
ICAgICAgICAgaWYgKFdlYkluc3BlY3Rvci5wYW5lbHMucmVzb3VyY2VzKQotICAgICAgICAgICAg
ICAgICAgICBXZWJJbnNwZWN0b3IucGFuZWxzLnJlc291cmNlcy5hZGRNZXNzYWdlVG9SZXNvdXJj
ZShtc2cucmVzb3VyY2UsIG1zZyk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHRoaXMu
Y29tbWFuZFNpbmNlUHJldmlvdXNNZXNzYWdlID0gZmFsc2U7Ci0gICAgICAgICAgICB0aGlzLnBy
ZXZpb3VzTWVzc2FnZSA9IG1zZzsKLQotICAgICAgICAgICAgaWYgKG1lc3NhZ2VSZXBlYXRlZCkK
LSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0gZWxzZSBpZiAobXNnIGluc3RhbmNl
b2YgV2ViSW5zcGVjdG9yLkNvbnNvbGVDb21tYW5kKSB7Ci0gICAgICAgICAgICBpZiAodGhpcy5w
cmV2aW91c01lc3NhZ2UpIHsKLSAgICAgICAgICAgICAgICB0aGlzLmNvbW1hbmRTaW5jZVByZXZp
b3VzTWVzc2FnZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgdGhpcy5yZXBlYXRDb3VudEJlZm9y
ZUNvbW1hbmQgPSB0aGlzLnByZXZpb3VzTWVzc2FnZS50b3RhbFJlcGVhdENvdW50OwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgdGhpcy5tZXNzYWdlcy5wdXNoKG1zZyk7Ci0K
LSAgICAgICAgaWYgKG1zZy50eXBlID09PSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVz
c2FnZVR5cGUuRW5kR3JvdXApIHsKLSAgICAgICAgICAgIGlmICh0aGlzLmdyb3VwTGV2ZWwgPCAx
KQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgdGhpcy5ncm91cExldmVs
LS07Ci0KLSAgICAgICAgICAgIHRoaXMuY3VycmVudEdyb3VwID0gdGhpcy5jdXJyZW50R3JvdXAu
cGFyZW50R3JvdXA7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAobXNnLnR5cGUg
PT09IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5TdGFydEdyb3VwKSB7
Ci0gICAgICAgICAgICAgICAgdGhpcy5ncm91cExldmVsKys7Ci0KLSAgICAgICAgICAgICAgICB2
YXIgZ3JvdXAgPSBuZXcgV2ViSW5zcGVjdG9yLkNvbnNvbGVHcm91cCh0aGlzLmN1cnJlbnRHcm91
cCwgdGhpcy5ncm91cExldmVsKTsKLSAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRHcm91cC5t
ZXNzYWdlc0VsZW1lbnQuYXBwZW5kQ2hpbGQoZ3JvdXAuZWxlbWVudCk7Ci0gICAgICAgICAgICAg
ICAgdGhpcy5jdXJyZW50R3JvdXAgPSBncm91cDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgdGhpcy5jdXJyZW50R3JvdXAuYWRkTWVzc2FnZShtc2cpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgdGhpcy5wcm9tcHRFbGVtZW50LnNjcm9sbEludG9WaWV3KGZhbHNlKTsKLSAgICB9LAotCi0g
ICAgY2xlYXJNZXNzYWdlczogZnVuY3Rpb24oY2xlYXJJbnNwZWN0b3JDb250cm9sbGVyKQotICAg
IHsKLSAgICAgICAgaWYgKGNsZWFySW5zcGVjdG9yQ29udHJvbGxlcikKLSAgICAgICAgICAgIElu
c3BlY3RvckNvbnRyb2xsZXIuY2xlYXJNZXNzYWdlcygpOwotICAgICAgICBpZiAoV2ViSW5zcGVj
dG9yLnBhbmVscy5yZXNvdXJjZXMpCi0gICAgICAgICAgICBXZWJJbnNwZWN0b3IucGFuZWxzLnJl
c291cmNlcy5jbGVhck1lc3NhZ2VzKCk7Ci0KLSAgICAgICAgdGhpcy5tZXNzYWdlcyA9IFtdOwot
Ci0gICAgICAgIHRoaXMuZ3JvdXBMZXZlbCA9IDA7Ci0gICAgICAgIHRoaXMuY3VycmVudEdyb3Vw
ID0gdGhpcy50b3BHcm91cDsKLSAgICAgICAgdGhpcy50b3BHcm91cC5tZXNzYWdlc0VsZW1lbnQu
cmVtb3ZlQ2hpbGRyZW4oKTsKLQotICAgICAgICBXZWJJbnNwZWN0b3IuZXJyb3JzID0gMDsKLSAg
ICAgICAgV2ViSW5zcGVjdG9yLndhcm5pbmdzID0gMDsKLQotICAgICAgICBkZWxldGUgdGhpcy5j
b21tYW5kU2luY2VQcmV2aW91c01lc3NhZ2U7Ci0gICAgICAgIGRlbGV0ZSB0aGlzLnJlcGVhdENv
dW50QmVmb3JlQ29tbWFuZDsKLSAgICAgICAgZGVsZXRlIHRoaXMucHJldmlvdXNNZXNzYWdlOwot
ICAgIH0sCi0KLSAgICBjb21wbGV0aW9uczogZnVuY3Rpb24od29yZFJhbmdlLCBiZXN0TWF0Y2hP
bmx5LCBjb21wbGV0aW9uc1JlYWR5Q2FsbGJhY2spCi0gICAgewotICAgICAgICAvLyBQYXNzIGxl
c3Mgc3RvcCBjaGFyYWN0ZXJzIHRvIHJhbmdlT2ZXb3JkIHNvIHRoZSByYW5nZSB3aWxsIGJlIGEg
bW9yZSBjb21wbGV0ZSBleHByZXNzaW9uLgotICAgICAgICBjb25zdCBleHByZXNzaW9uU3RvcENo
YXJhY3RlcnMgPSAiID06ezsiOwotICAgICAgICB2YXIgZXhwcmVzc2lvblJhbmdlID0gd29yZFJh
bmdlLnN0YXJ0Q29udGFpbmVyLnJhbmdlT2ZXb3JkKHdvcmRSYW5nZS5zdGFydE9mZnNldCwgZXhw
cmVzc2lvblN0b3BDaGFyYWN0ZXJzLCB0aGlzLnByb21wdEVsZW1lbnQsICJiYWNrd2FyZCIpOwot
ICAgICAgICB2YXIgZXhwcmVzc2lvblN0cmluZyA9IGV4cHJlc3Npb25SYW5nZS50b1N0cmluZygp
OwotICAgICAgICB2YXIgbGFzdEluZGV4ID0gZXhwcmVzc2lvblN0cmluZy5sZW5ndGggLSAxOwot
Ci0gICAgICAgIHZhciBkb3ROb3RhdGlvbiA9IChleHByZXNzaW9uU3RyaW5nW2xhc3RJbmRleF0g
PT09ICIuIik7Ci0gICAgICAgIHZhciBicmFja2V0Tm90YXRpb24gPSAoZXhwcmVzc2lvblN0cmlu
Z1tsYXN0SW5kZXhdID09PSAiWyIpOwotCi0gICAgICAgIGlmIChkb3ROb3RhdGlvbiB8fCBicmFj
a2V0Tm90YXRpb24pCi0gICAgICAgICAgICBleHByZXNzaW9uU3RyaW5nID0gZXhwcmVzc2lvblN0
cmluZy5zdWJzdHIoMCwgbGFzdEluZGV4KTsKLQotICAgICAgICB2YXIgcHJlZml4ID0gd29yZFJh
bmdlLnRvU3RyaW5nKCk7Ci0gICAgICAgIGlmICghZXhwcmVzc2lvblN0cmluZyAmJiAhcHJlZml4
KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHZhciByZXBvcnRDb21wbGV0aW9ucyA9
IHRoaXMuX3JlcG9ydENvbXBsZXRpb25zLmJpbmQodGhpcywgYmVzdE1hdGNoT25seSwgY29tcGxl
dGlvbnNSZWFkeUNhbGxiYWNrLCBkb3ROb3RhdGlvbiwgYnJhY2tldE5vdGF0aW9uLCBwcmVmaXgp
OwotICAgICAgICB0aGlzLl9ldmFsSW5JbnNwZWN0ZWRXaW5kb3coZXhwcmVzc2lvblN0cmluZywg
cmVwb3J0Q29tcGxldGlvbnMpOwotICAgIH0sCi0gICAgCi0gICAgX3JlcG9ydENvbXBsZXRpb25z
OiBmdW5jdGlvbihiZXN0TWF0Y2hPbmx5LCBjb21wbGV0aW9uc1JlYWR5Q2FsbGJhY2ssIGRvdE5v
dGF0aW9uLCBicmFja2V0Tm90YXRpb24sIHByZWZpeCwgcmVzdWx0KSB7Ci0gICAgICAgIGlmIChi
cmFja2V0Tm90YXRpb24pIHsKLSAgICAgICAgICAgIGlmIChwcmVmaXgubGVuZ3RoICYmIHByZWZp
eFswXSA9PT0gIiciKQotICAgICAgICAgICAgICAgIHZhciBxdW90ZVVzZWQgPSAiJyI7Ci0gICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgdmFyIHF1b3RlVXNlZCA9ICJcIiI7Ci0gICAg
ICAgIH0KLQotICAgICAgICB2YXIgcmVzdWx0cyA9IFtdOwotICAgICAgICB2YXIgcHJvcGVydGll
cyA9IE9iamVjdC5wcm9wZXJ0aWVzKHJlc3VsdCk7Ci0gICAgICAgIGlmICghZG90Tm90YXRpb24g
JiYgIWJyYWNrZXROb3RhdGlvbiAmJiByZXN1bHQuX2luc3BlY3RvckNvbW1hbmRMaW5lQVBJKSB7
Ci0gICAgICAgICAgICB2YXIgY29tbWFuZExpbmVBUEkgPSBPYmplY3QucHJvcGVydGllcyhyZXN1
bHQuX2luc3BlY3RvckNvbW1hbmRMaW5lQVBJKTsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgY29tbWFuZExpbmVBUEkubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgICAgICB2YXIg
cHJvcGVydHkgPSBjb21tYW5kTGluZUFQSVtpXTsKLSAgICAgICAgICAgICAgICBpZiAocHJvcGVy
dHkuY2hhckF0KDApICE9PSAiXyIpCi0gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMucHVz
aChwcm9wZXJ0eSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcHJvcGVydGll
cy5zb3J0KCk7Ci0KLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0
aDsgKytpKSB7Ci0gICAgICAgICAgICB2YXIgcHJvcGVydHkgPSBwcm9wZXJ0aWVzW2ldOwotCi0g
ICAgICAgICAgICBpZiAoZG90Tm90YXRpb24gJiYgIS9eW2EtekEtWl8kXVthLXpBLVowLTlfJF0q
JC8udGVzdChwcm9wZXJ0eSkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAg
ICAgIGlmIChicmFja2V0Tm90YXRpb24pIHsKLSAgICAgICAgICAgICAgICBpZiAoIS9eWzAtOV0r
JC8udGVzdChwcm9wZXJ0eSkpCi0gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5ID0gcXVvdGVV
c2VkICsgcHJvcGVydHkuZXNjYXBlQ2hhcmFjdGVycyhxdW90ZVVzZWQgKyAiXFwiKSArIHF1b3Rl
VXNlZDsKLSAgICAgICAgICAgICAgICBwcm9wZXJ0eSArPSAiXSI7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIGlmIChwcm9wZXJ0eS5sZW5ndGggPCBwcmVmaXgubGVuZ3RoKQotICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKHByb3BlcnR5LmluZGV4T2YocHJl
Zml4KSAhPT0gMCkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgcmVz
dWx0cy5wdXNoKHByb3BlcnR5KTsKLSAgICAgICAgICAgIGlmIChiZXN0TWF0Y2hPbmx5KQotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIHNldFRpbWVvdXQoY29tcGxl
dGlvbnNSZWFkeUNhbGxiYWNrLCAwLCByZXN1bHRzKTsKLSAgICB9LAotCi0gICAgX3RvZ2dsZUJ1
dHRvbkNsaWNrZWQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMudmlzaWJsZSA9ICF0
aGlzLnZpc2libGU7Ci0gICAgfSwKLQotICAgIF9jbGVhckJ1dHRvbkNsaWNrZWQ6IGZ1bmN0aW9u
KCkKLSAgICB7Ci0gICAgICAgIHRoaXMuY2xlYXJNZXNzYWdlcyh0cnVlKTsKLSAgICB9LAotCi0g
ICAgX21lc3NhZ2VzU2VsZWN0U3RhcnQ6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAg
aWYgKHRoaXMuX3NlbGVjdGlvblRpbWVvdXQpCi0gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhp
cy5fc2VsZWN0aW9uVGltZW91dCk7Ci0KLSAgICAgICAgdGhpcy5wcm9tcHQuY2xlYXJBdXRvQ29t
cGxldGUoKTsKLQotICAgICAgICBmdW5jdGlvbiBtb3ZlQmFja0lmT3V0c2lkZSgpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9zZWxlY3Rpb25UaW1lb3V0OwotICAgICAgICAg
ICAgaWYgKCF0aGlzLnByb21wdC5pc0NhcmV0SW5zaWRlUHJvbXB0KCkgJiYgd2luZG93LmdldFNl
bGVjdGlvbigpLmlzQ29sbGFwc2VkKQotICAgICAgICAgICAgICAgIHRoaXMucHJvbXB0Lm1vdmVD
YXJldFRvRW5kT2ZQcm9tcHQoKTsKLSAgICAgICAgICAgIHRoaXMucHJvbXB0LmF1dG9Db21wbGV0
ZVNvb24oKTsKLSAgICAgICAgfQotCi0gICAgICAgIHRoaXMuX3NlbGVjdGlvblRpbWVvdXQgPSBz
ZXRUaW1lb3V0KG1vdmVCYWNrSWZPdXRzaWRlLmJpbmQodGhpcyksIDEwMCk7Ci0gICAgfSwKLQot
ICAgIF9tZXNzYWdlc0NsaWNrZWQ6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgdmFy
IGxpbmsgPSBldmVudC50YXJnZXQuZW5jbG9zaW5nTm9kZU9yU2VsZldpdGhOb2RlTmFtZSgiYSIp
OwotICAgICAgICBpZiAoIWxpbmsgfHwgIWxpbmsucmVwcmVzZW50ZWROb2RlKQotICAgICAgICAg
ICAgcmV0dXJuOwotCi0gICAgICAgIFdlYkluc3BlY3Rvci51cGRhdGVGb2N1c2VkTm9kZShsaW5r
LnJlcHJlc2VudGVkTm9kZSk7Ci0gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOwotICAg
ICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwotICAgIH0sCi0KLSAgICBfcHJvbXB0S2V5RG93
bjogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICBzd2l0Y2ggKGV2ZW50LmtleUlkZW50
aWZpZXIpIHsKLSAgICAgICAgICAgIGNhc2UgIkVudGVyIjoKLSAgICAgICAgICAgICAgICB0aGlz
Ll9lbnRlcktleVByZXNzZWQoZXZlbnQpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotCi0gICAgICAgIHRoaXMucHJvbXB0LmhhbmRsZUtleUV2ZW50KGV2ZW50KTsKLSAgICB9
LAotCi0gICAgX3N0YXJ0U3RhdHVzQmFyRHJhZ2dpbmc6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsK
LSAgICAgICAgaWYgKCF0aGlzLnZpc2libGUgfHwgZXZlbnQudGFyZ2V0ICE9PSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgibWFpbi1zdGF0dXMtYmFyIikpCi0gICAgICAgICAgICByZXR1cm47Ci0K
LSAgICAgICAgV2ViSW5zcGVjdG9yLmVsZW1lbnREcmFnU3RhcnQoZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoIm1haW4tc3RhdHVzLWJhciIpLCB0aGlzLl9zdGF0dXNCYXJEcmFnZ2luZy5iaW5kKHRo
aXMpLCB0aGlzLl9lbmRTdGF0dXNCYXJEcmFnZ2luZy5iaW5kKHRoaXMpLCBldmVudCwgInJvdy1y
ZXNpemUiKTsKLQotICAgICAgICB0aGlzLl9zdGF0dXNCYXJEcmFnT2Zmc2V0ID0gZXZlbnQucGFn
ZVkgLSB0aGlzLmVsZW1lbnQudG90YWxPZmZzZXRUb3A7Ci0KLSAgICAgICAgZXZlbnQuc3RvcFBy
b3BhZ2F0aW9uKCk7Ci0gICAgfSwKLQotICAgIF9zdGF0dXNCYXJEcmFnZ2luZzogZnVuY3Rpb24o
ZXZlbnQpCi0gICAgewotICAgICAgICB2YXIgbWFpbkVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgibWFpbiIpOwotCi0gICAgICAgIHZhciBoZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWln
aHQgLSBldmVudC5wYWdlWSArIHRoaXMuX3N0YXR1c0JhckRyYWdPZmZzZXQ7Ci0gICAgICAgIGhl
aWdodCA9IE51bWJlci5jb25zdHJhaW4oaGVpZ2h0LCBQcmVmZXJlbmNlcy5taW5Db25zb2xlSGVp
Z2h0LCB3aW5kb3cuaW5uZXJIZWlnaHQgLSBtYWluRWxlbWVudC50b3RhbE9mZnNldFRvcCAtIFBy
ZWZlcmVuY2VzLm1pbkNvbnNvbGVIZWlnaHQpOwotCi0gICAgICAgIG1haW5FbGVtZW50LnN0eWxl
LmJvdHRvbSA9IGhlaWdodCArICJweCI7Ci0gICAgICAgIHRoaXMuZWxlbWVudC5zdHlsZS5oZWln
aHQgPSBoZWlnaHQgKyAicHgiOwotCi0gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7Ci0g
ICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOwotICAgIH0sCi0KLSAgICBfZW5kU3RhdHVz
QmFyRHJhZ2dpbmc6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgV2ViSW5zcGVjdG9y
LmVsZW1lbnREcmFnRW5kKGV2ZW50KTsKLQotICAgICAgICBkZWxldGUgdGhpcy5fc3RhdHVzQmFy
RHJhZ09mZnNldDsKLQotICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKLSAgICB9LAot
Ci0gICAgX2V2YWxJbkluc3BlY3RlZFdpbmRvdzogZnVuY3Rpb24oZXhwcmVzc2lvbiwgY2FsbGJh
Y2spCi0gICAgewotICAgICAgICBpZiAoV2ViSW5zcGVjdG9yLnBhbmVscy5zY3JpcHRzICYmIFdl
Ykluc3BlY3Rvci5wYW5lbHMuc2NyaXB0cy5wYXVzZWQpIHsKLSAgICAgICAgICAgIFdlYkluc3Bl
Y3Rvci5wYW5lbHMuc2NyaXB0cy5ldmFsdWF0ZUluU2VsZWN0ZWRDYWxsRnJhbWUoZXhwcmVzc2lv
biwgZmFsc2UsIGNhbGxiYWNrKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAg
ICAgICB0aGlzLmRvRXZhbEluV2luZG93KGV4cHJlc3Npb24sIGNhbGxiYWNrKTsKLSAgICB9LAot
ICAgIAotICAgIF9lbnN1cmVDb21tYW5kTGluZUFQSUluc3RhbGxlZDogZnVuY3Rpb24oaW5zcGVj
dGVkV2luZG93KQotICAgIHsKLSAgICAgICAgaWYgKCFpbnNwZWN0ZWRXaW5kb3cuX2luc3BlY3Rv
ckNvbW1hbmRMaW5lQVBJKSB7Ci0gICAgICAgICAgICBpbnNwZWN0ZWRXaW5kb3cuZXZhbCgid2lu
ZG93Ll9pbnNwZWN0b3JDb21tYW5kTGluZUFQSSA9IHsgXAotICAgICAgICAgICAgICAgICQ6IGZ1
bmN0aW9uKCkgeyByZXR1cm4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQuYXBwbHkoZG9jdW1lbnQs
IGFyZ3VtZW50cykgfSwgXAotICAgICAgICAgICAgICAgICQkOiBmdW5jdGlvbigpIHsgcmV0dXJu
IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwuYXBwbHkoZG9jdW1lbnQsIGFyZ3VtZW50cykgfSwg
XAotICAgICAgICAgICAgICAgICR4OiBmdW5jdGlvbih4cGF0aCwgY29udGV4dCkgeyBcCi0gICAg
ICAgICAgICAgICAgICAgIHZhciBub2RlcyA9IFtdOyBcCi0gICAgICAgICAgICAgICAgICAgIHRy
eSB7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkb2MgPSBjb250ZXh0IHx8IGRvY3Vt
ZW50OyBcCi0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0cyA9IGRvYy5ldmFsdWF0
ZSh4cGF0aCwgZG9jLCBudWxsLCBYUGF0aFJlc3VsdC5BTllfVFlQRSwgbnVsbCk7IFwKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHZhciBub2RlOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICB3
aGlsZSAobm9kZSA9IHJlc3VsdHMuaXRlcmF0ZU5leHQoKSkgbm9kZXMucHVzaChub2RlKTsgXAot
ICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7fSBcCi0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBub2RlczsgXAotICAgICAgICAgICAgICAgIH0sIFwKLSAgICAgICAgICAgICAgICBk
aXI6IGZ1bmN0aW9uKCkgeyByZXR1cm4gY29uc29sZS5kaXIuYXBwbHkoY29uc29sZSwgYXJndW1l
bnRzKSB9LCBcCi0gICAgICAgICAgICAgICAgZGlyeG1sOiBmdW5jdGlvbigpIHsgcmV0dXJuIGNv
bnNvbGUuZGlyeG1sLmFwcGx5KGNvbnNvbGUsIGFyZ3VtZW50cykgfSwgXAotICAgICAgICAgICAg
ICAgIGtleXM6IGZ1bmN0aW9uKG8pIHsgdmFyIGEgPSBbXTsgZm9yICh2YXIgayBpbiBvKSBhLnB1
c2goayk7IHJldHVybiBhOyB9LCBcCi0gICAgICAgICAgICAgICAgdmFsdWVzOiBmdW5jdGlvbihv
KSB7IHZhciBhID0gW107IGZvciAodmFyIGsgaW4gbykgYS5wdXNoKG9ba10pOyByZXR1cm4gYTsg
fSwgXAotICAgICAgICAgICAgICAgIHByb2ZpbGU6IGZ1bmN0aW9uKCkgeyByZXR1cm4gY29uc29s
ZS5wcm9maWxlLmFwcGx5KGNvbnNvbGUsIGFyZ3VtZW50cykgfSwgXAotICAgICAgICAgICAgICAg
IHByb2ZpbGVFbmQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gY29uc29sZS5wcm9maWxlRW5kLmFwcGx5
KGNvbnNvbGUsIGFyZ3VtZW50cykgfSwgXAotICAgICAgICAgICAgICAgIF9pbnNwZWN0ZWROb2Rl
czogW10sIFwKLSAgICAgICAgICAgICAgICBnZXQgJDAoKSB7IHJldHVybiBfaW5zcGVjdG9yQ29t
bWFuZExpbmVBUEkuX2luc3BlY3RlZE5vZGVzWzBdIH0sIFwKLSAgICAgICAgICAgICAgICBnZXQg
JDEoKSB7IHJldHVybiBfaW5zcGVjdG9yQ29tbWFuZExpbmVBUEkuX2luc3BlY3RlZE5vZGVzWzFd
IH0sIFwKLSAgICAgICAgICAgICAgICBnZXQgJDIoKSB7IHJldHVybiBfaW5zcGVjdG9yQ29tbWFu
ZExpbmVBUEkuX2luc3BlY3RlZE5vZGVzWzJdIH0sIFwKLSAgICAgICAgICAgICAgICBnZXQgJDMo
KSB7IHJldHVybiBfaW5zcGVjdG9yQ29tbWFuZExpbmVBUEkuX2luc3BlY3RlZE5vZGVzWzNdIH0s
IFwKLSAgICAgICAgICAgICAgICBnZXQgJDQoKSB7IHJldHVybiBfaW5zcGVjdG9yQ29tbWFuZExp
bmVBUEkuX2luc3BlY3RlZE5vZGVzWzRdIH0gXAotICAgICAgICAgICAgfTsiKTsKLQotICAgICAg
ICAgICAgaW5zcGVjdGVkV2luZG93Ll9pbnNwZWN0b3JDb21tYW5kTGluZUFQSS5jbGVhciA9IElu
c3BlY3RvckNvbnRyb2xsZXIud3JhcENhbGxiYWNrKHRoaXMuY2xlYXJNZXNzYWdlcy5iaW5kKHRo
aXMpKTsKLSAgICAgICAgICAgIGluc3BlY3RlZFdpbmRvdy5faW5zcGVjdG9yQ29tbWFuZExpbmVB
UEkuaW5zcGVjdCA9IEluc3BlY3RvckNvbnRyb2xsZXIud3JhcENhbGxiYWNrKGluc3BlY3RPYmpl
Y3QuYmluZCh0aGlzKSk7Ci0KLSAgICAgICAgICAgIGZ1bmN0aW9uIGluc3BlY3RPYmplY3QobykK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0g
MCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICAgICAgSW5zcGVj
dG9yQ29udHJvbGxlci5pbnNwZWN0ZWRXaW5kb3coKS5jb25zb2xlLmxvZyhvKTsKLSAgICAgICAg
ICAgICAgICBpZiAoT2JqZWN0LnR5cGUobywgSW5zcGVjdG9yQ29udHJvbGxlci5pbnNwZWN0ZWRX
aW5kb3coKSkgPT09ICJub2RlIikgewotICAgICAgICAgICAgICAgICAgICBXZWJJbnNwZWN0b3Iu
c2hvd0VsZW1lbnRzUGFuZWwoKTsKLSAgICAgICAgICAgICAgICAgICAgV2ViSW5zcGVjdG9yLnBh
bmVscy5lbGVtZW50cy50cmVlT3V0bGluZS5yZXZlYWxBbmRTZWxlY3ROb2RlKG8pOwotICAgICAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoT2JqZWN0LmRl
c2NyaWJlKG8pKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICJEYXRhYmFzZSI6Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViSW5zcGVjdG9yLnNob3dEYXRhYmFzZXNQYW5l
bCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYkluc3BlY3Rvci5wYW5lbHMuZGF0
YWJhc2VzLnNlbGVjdERhdGFiYXNlKG8pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiU3RvcmFnZSI6Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgV2ViSW5zcGVjdG9yLnNob3dEYXRhYmFzZXNQYW5lbCgpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFdlYkluc3BlY3Rvci5wYW5lbHMuZGF0YWJhc2VzLnNl
bGVjdERPTVN0b3JhZ2Uobyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICB9LAotCi0gICAgYWRkSW5zcGVjdGVkTm9kZTogZnVuY3Rpb24obm9kZSkK
LSAgICB7Ci0gICAgICAgIHZhciBpbnNwZWN0ZWRXaW5kb3cgPSBJbnNwZWN0b3JDb250cm9sbGVy
Lmluc3BlY3RlZFdpbmRvdygpOwotICAgICAgICB0aGlzLl9lbnN1cmVDb21tYW5kTGluZUFQSUlu
c3RhbGxlZChpbnNwZWN0ZWRXaW5kb3cpOwotICAgICAgICB2YXIgaW5zcGVjdGVkTm9kZXMgPSBp
bnNwZWN0ZWRXaW5kb3cuX2luc3BlY3RvckNvbW1hbmRMaW5lQVBJLl9pbnNwZWN0ZWROb2RlczsK
LSAgICAgICAgaW5zcGVjdGVkTm9kZXMudW5zaGlmdChub2RlKTsKLSAgICAgICAgaWYgKGluc3Bl
Y3RlZE5vZGVzLmxlbmd0aCA+PSA1KQotICAgICAgICAgICAgaW5zcGVjdGVkTm9kZXMucG9wKCk7
Ci0gICAgfSwKLQotICAgIGRvRXZhbEluV2luZG93OiBmdW5jdGlvbihleHByZXNzaW9uLCBjYWxs
YmFjaykKLSAgICB7Ci0gICAgICAgIGlmICghZXhwcmVzc2lvbikgewotICAgICAgICAgICAgLy8g
VGhlcmUgaXMgbm8gZXhwcmVzc2lvbiwgc28gdGhlIGNvbXBsZXRpb24gc2hvdWxkIGhhcHBlbiBh
Z2FpbnN0IGdsb2JhbCBwcm9wZXJ0aWVzLgotICAgICAgICAgICAgZXhwcmVzc2lvbiA9ICJ0aGlz
IjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFN1cnJvdW5kIHRoZSBleHByZXNzaW9uIGluIHdp
dGggc3RhdGVtZW50cyB0byBpbmplY3Qgb3VyIGNvbW1hbmQgbGluZSBBUEkgc28gdGhhdAotICAg
ICAgICAvLyB0aGUgd2luZG93IG9iamVjdCBwcm9wZXJ0aWVzIHN0aWxsIHRha2UgbW9yZSBwcmVj
ZWRlbnQgdGhhbiBvdXIgQVBJIGZ1bmN0aW9ucy4KLSAgICAgICAgZXhwcmVzc2lvbiA9ICJ3aXRo
ICh3aW5kb3cuX2luc3BlY3RvckNvbW1hbmRMaW5lQVBJKSB7IHdpdGggKHdpbmRvdykgeyAiICsg
ZXhwcmVzc2lvbiArICIgfSB9IjsKLQotICAgICAgICB2YXIgc2VsZiA9IHRoaXM7Ci0gICAgICAg
IGZ1bmN0aW9uIGRlbGF5ZWRFdmFsdWF0aW9uKCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFy
IGluc3BlY3RlZFdpbmRvdyA9IEluc3BlY3RvckNvbnRyb2xsZXIuaW5zcGVjdGVkV2luZG93KCk7
Ci0gICAgICAgICAgICBzZWxmLl9lbnN1cmVDb21tYW5kTGluZUFQSUluc3RhbGxlZChpbnNwZWN0
ZWRXaW5kb3cpOwotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBjYWxsYmFjayhp
bnNwZWN0ZWRXaW5kb3cuZXZhbChleHByZXNzaW9uKSk7Ci0gICAgICAgICAgICB9IGNhdGNoIChl
KSB7Ci0gICAgICAgICAgICAgICAgY2FsbGJhY2soZSwgdHJ1ZSk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICAgICAgc2V0VGltZW91dChkZWxheWVkRXZhbHVhdGlvbiwgMCk7Ci0gICAg
fSwKLQotICAgIF9lbnRlcktleVByZXNzZWQ6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAg
ICAgaWYgKGV2ZW50LmFsdEtleSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBldmVu
dC5wcmV2ZW50RGVmYXVsdCgpOwotICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKLQot
ICAgICAgICB0aGlzLnByb21wdC5jbGVhckF1dG9Db21wbGV0ZSh0cnVlKTsKLQotICAgICAgICB2
YXIgc3RyID0gdGhpcy5wcm9tcHQudGV4dDsKLSAgICAgICAgaWYgKCFzdHIubGVuZ3RoKQotICAg
ICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHZhciBjb21tYW5kTWVzc2FnZSA9IG5ldyBXZWJJ
bnNwZWN0b3IuQ29uc29sZUNvbW1hbmQoc3RyKTsKLSAgICAgICAgdGhpcy5hZGRNZXNzYWdlKGNv
bW1hbmRNZXNzYWdlKTsKLQotICAgICAgICB2YXIgc2VsZiA9IHRoaXM7Ci0gICAgICAgIGZ1bmN0
aW9uIHByaW50UmVzdWx0KHJlc3VsdCwgZXhjZXB0aW9uKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBzZWxmLnByb21wdC5oaXN0b3J5LnB1c2goc3RyKTsKLSAgICAgICAgICAgIHNlbGYucHJvbXB0
Lmhpc3RvcnlPZmZzZXQgPSAwOwotICAgICAgICAgICAgc2VsZi5wcm9tcHQudGV4dCA9ICIiOwot
ICAgICAgICAgICAgc2VsZi5hZGRNZXNzYWdlKG5ldyBXZWJJbnNwZWN0b3IuQ29uc29sZUNvbW1h
bmRSZXN1bHQocmVzdWx0LCBleGNlcHRpb24sIGNvbW1hbmRNZXNzYWdlKSk7Ci0gICAgICAgIH0K
LSAgICAgICAgdGhpcy5fZXZhbEluSW5zcGVjdGVkV2luZG93KHN0ciwgcHJpbnRSZXN1bHQpOwot
ICAgIH0sCi0KLSAgICBfZm9ybWF0OiBmdW5jdGlvbihvdXRwdXQsIGZvcmNlT2JqZWN0Rm9ybWF0
KQotICAgIHsKLSAgICAgICAgdmFyIHR5cGUgPSAoZm9yY2VPYmplY3RGb3JtYXQgPyAib2JqZWN0
IiA6IE9iamVjdC50eXBlKG91dHB1dCwgSW5zcGVjdG9yQ29udHJvbGxlci5pbnNwZWN0ZWRXaW5k
b3coKSkpOwotCi0gICAgICAgIC8vIFdlIGRvbid0IHBlcmZvcm0gYW55IHNwZWNpYWwgZm9ybWF0
dGluZyBvbiB0aGVzZSB0eXBlcywgc28gd2UganVzdAotICAgICAgICAvLyBwYXNzIHRoZW0gdGhy
b3VnaCB0aGUgc2ltcGxlIF9mb3JtYXR2YWx1ZSBmdW5jdGlvbi4KLSAgICAgICAgdmFyIHVuZGVj
b3JhdGVkVHlwZXMgPSB7Ci0gICAgICAgICAgICAidW5kZWZpbmVkIjogMSwKLSAgICAgICAgICAg
ICJudWxsIjogMSwKLSAgICAgICAgICAgICJib29sZWFuIjogMSwKLSAgICAgICAgICAgICJudW1i
ZXIiOiAxLAotICAgICAgICAgICAgImRhdGUiOiAxLAotICAgICAgICAgICAgImZ1bmN0aW9uIjog
MSwKLSAgICAgICAgfTsKLQotICAgICAgICB2YXIgZm9ybWF0dGVyOwotICAgICAgICBpZiAoZm9y
Y2VPYmplY3RGb3JtYXQpCi0gICAgICAgICAgICBmb3JtYXR0ZXIgPSAiX2Zvcm1hdG9iamVjdCI7
Ci0gICAgICAgIGVsc2UgaWYgKHR5cGUgaW4gdW5kZWNvcmF0ZWRUeXBlcykKLSAgICAgICAgICAg
IGZvcm1hdHRlciA9ICJfZm9ybWF0dmFsdWUiOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
IGZvcm1hdHRlciA9ICJfZm9ybWF0IiArIHR5cGU7Ci0gICAgICAgICAgICBpZiAoIShmb3JtYXR0
ZXIgaW4gdGhpcykpIHsKLSAgICAgICAgICAgICAgICBmb3JtYXR0ZXIgPSAiX2Zvcm1hdG9iamVj
dCI7Ci0gICAgICAgICAgICAgICAgdHlwZSA9ICJvYmplY3QiOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0KLSAgICAgICAgdmFyIHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFu
Iik7Ci0gICAgICAgIHNwYW4uYWRkU3R5bGVDbGFzcygiY29uc29sZS1mb3JtYXR0ZWQtIiArIHR5
cGUpOwotICAgICAgICB0aGlzW2Zvcm1hdHRlcl0ob3V0cHV0LCBzcGFuKTsKLSAgICAgICAgcmV0
dXJuIHNwYW47Ci0gICAgfSwKLQotICAgIF9mb3JtYXR2YWx1ZTogZnVuY3Rpb24odmFsLCBlbGVt
KQotICAgIHsKLSAgICAgICAgZWxlbS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9k
ZSh2YWwpKTsKLSAgICB9LAotCi0gICAgX2Zvcm1hdHN0cmluZzogZnVuY3Rpb24oc3RyLCBlbGVt
KQotICAgIHsKLSAgICAgICAgZWxlbS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9k
ZSgiXCIiICsgc3RyICsgIlwiIikpOwotICAgIH0sCi0KLSAgICBfZm9ybWF0cmVnZXhwOiBmdW5j
dGlvbihyZSwgZWxlbSkKLSAgICB7Ci0gICAgICAgIHZhciBmb3JtYXR0ZWQgPSBTdHJpbmcocmUp
LnJlcGxhY2UoLyhbXFxcL10pL2csICJcXCQxIikucmVwbGFjZSgvXFwoXC9bZ2ltXSopJC8sICIk
MSIpLnN1YnN0cmluZygxKTsKLSAgICAgICAgZWxlbS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVh
dGVUZXh0Tm9kZShmb3JtYXR0ZWQpKTsKLSAgICB9LAotCi0gICAgX2Zvcm1hdGFycmF5OiBmdW5j
dGlvbihhcnIsIGVsZW0pCi0gICAgewotICAgICAgICBlbGVtLmFwcGVuZENoaWxkKGRvY3VtZW50
LmNyZWF0ZVRleHROb2RlKCJbIikpOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5s
ZW5ndGg7ICsraSkgewotICAgICAgICAgICAgZWxlbS5hcHBlbmRDaGlsZCh0aGlzLl9mb3JtYXQo
YXJyW2ldKSk7Ci0gICAgICAgICAgICBpZiAoaSA8IGFyci5sZW5ndGggLSAxKQotICAgICAgICAg
ICAgICAgIGVsZW0uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiwgIikpOwot
ICAgICAgICB9Ci0gICAgICAgIGVsZW0uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5v
ZGUoIl0iKSk7Ci0gICAgfSwKLQotICAgIF9mb3JtYXRub2RlOiBmdW5jdGlvbihub2RlLCBlbGVt
KQotICAgIHsKLSAgICAgICAgdmFyIHRyZWVPdXRsaW5lID0gbmV3IFdlYkluc3BlY3Rvci5FbGVt
ZW50c1RyZWVPdXRsaW5lKCk7Ci0gICAgICAgIHRyZWVPdXRsaW5lLnJvb3RET01Ob2RlID0gbm9k
ZTsKLSAgICAgICAgdHJlZU91dGxpbmUuZWxlbWVudC5hZGRTdHlsZUNsYXNzKCJvdXRsaW5lLWRp
c2Nsb3N1cmUiKTsKLSAgICAgICAgaWYgKCF0cmVlT3V0bGluZS5jaGlsZHJlblswXS5oYXNDaGls
ZHJlbikKLSAgICAgICAgICAgIHRyZWVPdXRsaW5lLmVsZW1lbnQuYWRkU3R5bGVDbGFzcygic2lu
Z2xlLW5vZGUiKTsKLSAgICAgICAgZWxlbS5hcHBlbmRDaGlsZCh0cmVlT3V0bGluZS5lbGVtZW50
KTsKLSAgICB9LAotCi0gICAgX2Zvcm1hdG9iamVjdDogZnVuY3Rpb24ob2JqLCBlbGVtKQotICAg
IHsKLSAgICAgICAgZWxlbS5hcHBlbmRDaGlsZChuZXcgV2ViSW5zcGVjdG9yLk9iamVjdFByb3Bl
cnRpZXNTZWN0aW9uKG9iaiwgbnVsbCwgbnVsbCwgbnVsbCwgdHJ1ZSkuZWxlbWVudCk7Ci0gICAg
fSwKLQotICAgIF9mb3JtYXRlcnJvcjogZnVuY3Rpb24ob2JqLCBlbGVtKQotICAgIHsKLSAgICAg
ICAgdmFyIG1lc3NhZ2VFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwot
ICAgICAgICBtZXNzYWdlRWxlbWVudC5jbGFzc05hbWUgPSAiZXJyb3ItbWVzc2FnZSI7Ci0gICAg
ICAgIG1lc3NhZ2VFbGVtZW50LnRleHRDb250ZW50ID0gb2JqLm5hbWUgKyAiOiAiICsgb2JqLm1l
c3NhZ2U7Ci0gICAgICAgIGVsZW0uYXBwZW5kQ2hpbGQobWVzc2FnZUVsZW1lbnQpOwotCi0gICAg
ICAgIGlmIChvYmouc291cmNlVVJMKSB7Ci0gICAgICAgICAgICB2YXIgdXJsRWxlbWVudCA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKLSAgICAgICAgICAgIHVybEVsZW1lbnQuY2xhc3NO
YW1lID0gIndlYmtpdC1odG1sLXJlc291cmNlLWxpbmsiOwotICAgICAgICAgICAgdXJsRWxlbWVu
dC5ocmVmID0gb2JqLnNvdXJjZVVSTDsKLSAgICAgICAgICAgIHVybEVsZW1lbnQubGluZU51bWJl
ciA9IG9iai5saW5lOwotICAgICAgICAgICAgdXJsRWxlbWVudC5wcmVmZXJyZWRQYW5lbCA9ICJz
Y3JpcHRzIjsKLQotICAgICAgICAgICAgaWYgKG9iai5saW5lID4gMCkKLSAgICAgICAgICAgICAg
ICB1cmxFbGVtZW50LnRleHRDb250ZW50ID0gV2ViSW5zcGVjdG9yLmRpc3BsYXlOYW1lRm9yVVJM
KG9iai5zb3VyY2VVUkwpICsgIjoiICsgb2JqLmxpbmU7Ci0gICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgdXJsRWxlbWVudC50ZXh0Q29udGVudCA9IFdlYkluc3BlY3Rvci5kaXNwbGF5
TmFtZUZvclVSTChvYmouc291cmNlVVJMKTsKLQotICAgICAgICAgICAgZWxlbS5hcHBlbmRDaGls
ZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiICgiKSk7Ci0gICAgICAgICAgICBlbGVtLmFwcGVu
ZENoaWxkKHVybEVsZW1lbnQpOwotICAgICAgICAgICAgZWxlbS5hcHBlbmRDaGlsZChkb2N1bWVu
dC5jcmVhdGVUZXh0Tm9kZSgiKSIpKTsKLSAgICAgICAgfQotICAgIH0sCi19Ci0KLVdlYkluc3Bl
Y3Rvci5Db25zb2xlLnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuVmlldy5wcm90
b3R5cGU7Ci0KLVdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZSA9IGZ1bmN0aW9uKHNvdXJjZSwg
dHlwZSwgbGV2ZWwsIGxpbmUsIHVybCwgZ3JvdXBMZXZlbCwgcmVwZWF0Q291bnQpCi17Ci0gICAg
dGhpcy5zb3VyY2UgPSBzb3VyY2U7Ci0gICAgdGhpcy50eXBlID0gdHlwZTsKLSAgICB0aGlzLmxl
dmVsID0gbGV2ZWw7Ci0gICAgdGhpcy5saW5lID0gbGluZTsKLSAgICB0aGlzLnVybCA9IHVybDsK
LSAgICB0aGlzLmdyb3VwTGV2ZWwgPSBncm91cExldmVsOwotICAgIHRoaXMucmVwZWF0Q291bnQg
PSByZXBlYXRDb3VudDsKLSAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDcpCi0gICAgICAgIHRo
aXMuc2V0TWVzc2FnZUJvZHkoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCA3
KSk7Ci19Ci0KLVdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5wcm90b3R5cGUgPSB7Ci0gICAg
c2V0TWVzc2FnZUJvZHk6IGZ1bmN0aW9uKGFyZ3MpCi0gICAgewotICAgICAgICBzd2l0Y2ggKHRo
aXMudHlwZSkgewotICAgICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2Uu
TWVzc2FnZVR5cGUuVHJhY2U6Ci0gICAgICAgICAgICAgICAgdmFyIHNwYW4gPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCJzcGFuIik7Ci0gICAgICAgICAgICAgICAgc3Bhbi5hZGRTdHlsZUNsYXNz
KCJjb25zb2xlLWZvcm1hdHRlZC10cmFjZSIpOwotICAgICAgICAgICAgICAgIHZhciBzdGFjayA9
IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3MpOwotICAgICAgICAgICAgICAgIHZhciBm
dW5jTmFtZXMgPSBzdGFjay5tYXAoZnVuY3Rpb24oZikgewotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZiB8fCBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIihhbm9ueW1vdXMgZnVuY3Rpb24pIik7
Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgc3Bhbi5hcHBlbmRDaGlsZChk
b2N1bWVudC5jcmVhdGVUZXh0Tm9kZShmdW5jTmFtZXMuam9pbigiXG4iKSkpOwotICAgICAgICAg
ICAgICAgIHRoaXMuZm9ybWF0dGVkTWVzc2FnZSA9IHNwYW47Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdl
VHlwZS5PYmplY3Q6Ci0gICAgICAgICAgICAgICAgdGhpcy5mb3JtYXR0ZWRNZXNzYWdlID0gdGhp
cy5fZm9ybWF0KFsiJU8iLCBhcmdzWzBdXSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHRoaXMuZm9ybWF0dGVkTWVzc2FnZSA9
IHRoaXMuX2Zvcm1hdChhcmdzKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
Ci0gICAgICAgIC8vIFRoaXMgaXMgdXNlZCBmb3IgaW5saW5lIG1lc3NhZ2UgYnViYmxlcyBpbiBT
b3VyY2VGcmFtZXMsIG9yIG90aGVyIHBsYWluLXRleHQgcmVwcmVzZW50YXRpb25zLgotICAgICAg
ICB0aGlzLm1lc3NhZ2UgPSB0aGlzLmZvcm1hdHRlZE1lc3NhZ2UudGV4dENvbnRlbnQ7Ci0gICAg
fSwKLQotICAgIGlzRXJyb3JPcldhcm5pbmc6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiAodGhpcy5sZXZlbCA9PT0gV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VM
ZXZlbC5XYXJuaW5nIHx8IHRoaXMubGV2ZWwgPT09IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2Fn
ZS5NZXNzYWdlTGV2ZWwuRXJyb3IpOwotICAgIH0sCi0KLSAgICBfZm9ybWF0OiBmdW5jdGlvbihw
YXJhbWV0ZXJzKQotICAgIHsKLSAgICAgICAgdmFyIGZvcm1hdHRlZFJlc3VsdCA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKLQotICAgICAgICBpZiAoIXBhcmFtZXRlcnMubGVuZ3Ro
KQotICAgICAgICAgICAgcmV0dXJuIGZvcm1hdHRlZFJlc3VsdDsKLQotICAgICAgICBmdW5jdGlv
biBmb3JtYXRGb3JDb25zb2xlKG9iaikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIFdl
Ykluc3BlY3Rvci5jb25zb2xlLl9mb3JtYXQob2JqKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1
bmN0aW9uIGZvcm1hdEFzT2JqZWN0Rm9yQ29uc29sZShvYmopCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBXZWJJbnNwZWN0b3IuY29uc29sZS5fZm9ybWF0KG9iaiwgdHJ1ZSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAoT2JqZWN0LnR5cGUocGFyYW1ldGVyc1swXSwgSW5zcGVjdG9y
Q29udHJvbGxlci5pbnNwZWN0ZWRXaW5kb3coKSkgPT09ICJzdHJpbmciKSB7Ci0gICAgICAgICAg
ICB2YXIgZm9ybWF0dGVycyA9IHt9Ci0gICAgICAgICAgICBmb3IgKHZhciBpIGluIFN0cmluZy5z
dGFuZGFyZEZvcm1hdHRlcnMpCi0gICAgICAgICAgICAgICAgZm9ybWF0dGVyc1tpXSA9IFN0cmlu
Zy5zdGFuZGFyZEZvcm1hdHRlcnNbaV07Ci0KLSAgICAgICAgICAgIC8vIEZpcmVidWcgdXNlcyAl
byBmb3IgZm9ybWF0dGluZyBvYmplY3RzLgotICAgICAgICAgICAgZm9ybWF0dGVycy5vID0gZm9y
bWF0Rm9yQ29uc29sZTsKLSAgICAgICAgICAgIC8vIEZpcmVidWcgYWxsb3dzIGJvdGggJWkgYW5k
ICVkIGZvciBmb3JtYXR0aW5nIGludGVnZXJzLgotICAgICAgICAgICAgZm9ybWF0dGVycy5pID0g
Zm9ybWF0dGVycy5kOwotICAgICAgICAgICAgLy8gU3VwcG9ydCAlTyB0byBmb3JjZSBvYmplY3Qg
Zm9ybWF0aW5nLCBpbnN0ZWFkIG9mIHRoZSB0eXBlLWJhc2VkICVvIGZvcm1hdHRpbmcuCi0gICAg
ICAgICAgICBmb3JtYXR0ZXJzLk8gPSBmb3JtYXRBc09iamVjdEZvckNvbnNvbGU7Ci0KLSAgICAg
ICAgICAgIGZ1bmN0aW9uIGFwcGVuZChhLCBiKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIGlmICghKGIgaW5zdGFuY2VvZiBOb2RlKSkKLSAgICAgICAgICAgICAgICAgICAgYS5hcHBl
bmRDaGlsZChXZWJJbnNwZWN0b3IubGlua2lmeVN0cmluZ0FzRnJhZ21lbnQoYi50b1N0cmluZygp
KSk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBhLmFwcGVuZENo
aWxkKGIpOwotICAgICAgICAgICAgICAgIHJldHVybiBhOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICB2YXIgcmVzdWx0ID0gU3RyaW5nLmZvcm1hdChwYXJhbWV0ZXJzWzBdLCBwYXJhbWV0
ZXJzLnNsaWNlKDEpLCBmb3JtYXR0ZXJzLCBmb3JtYXR0ZWRSZXN1bHQsIGFwcGVuZCk7Ci0gICAg
ICAgICAgICBmb3JtYXR0ZWRSZXN1bHQgPSByZXN1bHQuZm9ybWF0dGVkUmVzdWx0OwotICAgICAg
ICAgICAgcGFyYW1ldGVycyA9IHJlc3VsdC51bnVzZWRTdWJzdGl0dXRpb25zOwotICAgICAgICAg
ICAgaWYgKHBhcmFtZXRlcnMubGVuZ3RoKQotICAgICAgICAgICAgICAgIGZvcm1hdHRlZFJlc3Vs
dC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiICIpKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFyYW1ldGVycy5sZW5ndGg7ICsraSkgewot
ICAgICAgICAgICAgaWYgKHR5cGVvZiBwYXJhbWV0ZXJzW2ldID09PSAic3RyaW5nIikKLSAgICAg
ICAgICAgICAgICBmb3JtYXR0ZWRSZXN1bHQuYXBwZW5kQ2hpbGQoV2ViSW5zcGVjdG9yLmxpbmtp
ZnlTdHJpbmdBc0ZyYWdtZW50KHBhcmFtZXRlcnNbaV0pKTsKLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICBmb3JtYXR0ZWRSZXN1bHQuYXBwZW5kQ2hpbGQoZm9ybWF0Rm9yQ29uc29s
ZShwYXJhbWV0ZXJzW2ldKSk7Ci0KLSAgICAgICAgICAgIGlmIChpIDwgcGFyYW1ldGVycy5sZW5n
dGggLSAxKQotICAgICAgICAgICAgICAgIGZvcm1hdHRlZFJlc3VsdC5hcHBlbmRDaGlsZChkb2N1
bWVudC5jcmVhdGVUZXh0Tm9kZSgiICIpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBm
b3JtYXR0ZWRSZXN1bHQ7Ci0gICAgfSwKLQotICAgIHRvTWVzc2FnZUVsZW1lbnQ6IGZ1bmN0aW9u
KCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLnByb3BlcnRpZXNTZWN0aW9uKQotICAgICAgICAg
ICAgcmV0dXJuIHRoaXMucHJvcGVydGllc1NlY3Rpb24uZWxlbWVudDsKLQotICAgICAgICB2YXIg
ZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotICAgICAgICBlbGVtZW50
Lm1lc3NhZ2UgPSB0aGlzOwotICAgICAgICBlbGVtZW50LmNsYXNzTmFtZSA9ICJjb25zb2xlLW1l
c3NhZ2UiOwotCi0gICAgICAgIHN3aXRjaCAodGhpcy5zb3VyY2UpIHsKLSAgICAgICAgICAgIGNh
c2UgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VTb3VyY2UuSFRNTDoKLSAgICAg
ICAgICAgICAgICBlbGVtZW50LmFkZFN0eWxlQ2xhc3MoImNvbnNvbGUtaHRtbC1zb3VyY2UiKTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNv
bnNvbGVNZXNzYWdlLk1lc3NhZ2VTb3VyY2UuV01MOgotICAgICAgICAgICAgICAgIGVsZW1lbnQu
YWRkU3R5bGVDbGFzcygiY29uc29sZS13bWwtc291cmNlIik7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdl
U291cmNlLlhNTDoKLSAgICAgICAgICAgICAgICBlbGVtZW50LmFkZFN0eWxlQ2xhc3MoImNvbnNv
bGUteG1sLXNvdXJjZSIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2Fz
ZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVNvdXJjZS5KUzoKLSAgICAgICAg
ICAgICAgICBlbGVtZW50LmFkZFN0eWxlQ2xhc3MoImNvbnNvbGUtanMtc291cmNlIik7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db25zb2xl
TWVzc2FnZS5NZXNzYWdlU291cmNlLkNTUzoKLSAgICAgICAgICAgICAgICBlbGVtZW50LmFkZFN0
eWxlQ2xhc3MoImNvbnNvbGUtY3NzLXNvdXJjZSIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVNvdXJj
ZS5PdGhlcjoKLSAgICAgICAgICAgICAgICBlbGVtZW50LmFkZFN0eWxlQ2xhc3MoImNvbnNvbGUt
b3RoZXItc291cmNlIik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAg
ICAgICBzd2l0Y2ggKHRoaXMubGV2ZWwpIHsKLSAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9y
LkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VMZXZlbC5UaXA6Ci0gICAgICAgICAgICAgICAgZWxlbWVu
dC5hZGRTdHlsZUNsYXNzKCJjb25zb2xlLXRpcC1sZXZlbCIpOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2Fn
ZUxldmVsLkxvZzoKLSAgICAgICAgICAgICAgICBlbGVtZW50LmFkZFN0eWxlQ2xhc3MoImNvbnNv
bGUtbG9nLWxldmVsIik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNl
IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlTGV2ZWwuV2FybmluZzoKLSAgICAg
ICAgICAgICAgICBlbGVtZW50LmFkZFN0eWxlQ2xhc3MoImNvbnNvbGUtd2FybmluZy1sZXZlbCIp
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3Iu
Q29uc29sZU1lc3NhZ2UuTWVzc2FnZUxldmVsLkVycm9yOgotICAgICAgICAgICAgICAgIGVsZW1l
bnQuYWRkU3R5bGVDbGFzcygiY29uc29sZS1lcnJvci1sZXZlbCIpOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAodGhpcy50eXBlID09PSBX
ZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuU3RhcnRHcm91cCkgewotICAg
ICAgICAgICAgZWxlbWVudC5hZGRTdHlsZUNsYXNzKCJjb25zb2xlLWdyb3VwLXRpdGxlIik7Ci0g
ICAgICAgIH0KLQotICAgICAgICBpZiAodGhpcy5lbGVtZW50c1RyZWVPdXRsaW5lKSB7Ci0gICAg
ICAgICAgICBlbGVtZW50LmFkZFN0eWxlQ2xhc3MoIm91dGxpbmUtZGlzY2xvc3VyZSIpOwotICAg
ICAgICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmVsZW1lbnRzVHJlZU91dGxpbmUuZWxl
bWVudCk7Ci0gICAgICAgICAgICByZXR1cm4gZWxlbWVudDsKLSAgICAgICAgfQotCi0gICAgICAg
IGlmICh0aGlzLnJlcGVhdENvdW50ID4gMSkgewotICAgICAgICAgICAgdmFyIG1lc3NhZ2VSZXBl
YXRDb3VudEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7Ci0gICAgICAg
ICAgICBtZXNzYWdlUmVwZWF0Q291bnRFbGVtZW50LmNsYXNzTmFtZSA9ICJidWJibGUiOwotICAg
ICAgICAgICAgbWVzc2FnZVJlcGVhdENvdW50RWxlbWVudC50ZXh0Q29udGVudCA9IHRoaXMucmVw
ZWF0Q291bnQ7Ci0KLSAgICAgICAgICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQobWVzc2FnZVJlcGVh
dENvdW50RWxlbWVudCk7Ci0gICAgICAgICAgICBlbGVtZW50LmFkZFN0eWxlQ2xhc3MoInJlcGVh
dGVkLW1lc3NhZ2UiKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh0aGlzLnVybCAmJiB0aGlz
LnVybCAhPT0gInVuZGVmaW5lZCIpIHsKLSAgICAgICAgICAgIHZhciB1cmxFbGVtZW50ID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOwotICAgICAgICAgICAgdXJsRWxlbWVudC5jbGFzc05h
bWUgPSAiY29uc29sZS1tZXNzYWdlLXVybCB3ZWJraXQtaHRtbC1yZXNvdXJjZS1saW5rIjsKLSAg
ICAgICAgICAgIHVybEVsZW1lbnQuaHJlZiA9IHRoaXMudXJsOwotICAgICAgICAgICAgdXJsRWxl
bWVudC5saW5lTnVtYmVyID0gdGhpcy5saW5lOwotCi0gICAgICAgICAgICBpZiAodGhpcy5zb3Vy
Y2UgPT09IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlU291cmNlLkpTKQotICAg
ICAgICAgICAgICAgIHVybEVsZW1lbnQucHJlZmVycmVkUGFuZWwgPSAic2NyaXB0cyI7Ci0KLSAg
ICAgICAgICAgIGlmICh0aGlzLmxpbmUgPiAwKQotICAgICAgICAgICAgICAgIHVybEVsZW1lbnQu
dGV4dENvbnRlbnQgPSBXZWJJbnNwZWN0b3IuZGlzcGxheU5hbWVGb3JVUkwodGhpcy51cmwpICsg
IjoiICsgdGhpcy5saW5lOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHVybEVs
ZW1lbnQudGV4dENvbnRlbnQgPSBXZWJJbnNwZWN0b3IuZGlzcGxheU5hbWVGb3JVUkwodGhpcy51
cmwpOwotCi0gICAgICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxkKHVybEVsZW1lbnQpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgdmFyIG1lc3NhZ2VUZXh0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoInNwYW4iKTsKLSAgICAgICAgbWVzc2FnZVRleHRFbGVtZW50LmNsYXNzTmFtZSA9
ICJjb25zb2xlLW1lc3NhZ2UtdGV4dCI7Ci0gICAgICAgIG1lc3NhZ2VUZXh0RWxlbWVudC5hcHBl
bmRDaGlsZCh0aGlzLmZvcm1hdHRlZE1lc3NhZ2UpOwotICAgICAgICBlbGVtZW50LmFwcGVuZENo
aWxkKG1lc3NhZ2VUZXh0RWxlbWVudCk7Ci0KLSAgICAgICAgcmV0dXJuIGVsZW1lbnQ7Ci0gICAg
fSwKLQotICAgIHRvU3RyaW5nOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIgc291cmNl
U3RyaW5nOwotICAgICAgICBzd2l0Y2ggKHRoaXMuc291cmNlKSB7Ci0gICAgICAgICAgICBjYXNl
IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlU291cmNlLkhUTUw6Ci0gICAgICAg
ICAgICAgICAgc291cmNlU3RyaW5nID0gIkhUTUwiOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVNvdXJj
ZS5XTUw6Ci0gICAgICAgICAgICAgICAgc291cmNlU3RyaW5nID0gIldNTCI7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2Fn
ZS5NZXNzYWdlU291cmNlLlhNTDoKLSAgICAgICAgICAgICAgICBzb3VyY2VTdHJpbmcgPSAiWE1M
IjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9y
LkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VTb3VyY2UuSlM6Ci0gICAgICAgICAgICAgICAgc291cmNl
U3RyaW5nID0gIkpTIjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2Ug
V2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VTb3VyY2UuQ1NTOgotICAgICAgICAg
ICAgICAgIHNvdXJjZVN0cmluZyA9ICJDU1MiOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVNvdXJjZS5P
dGhlcjoKLSAgICAgICAgICAgICAgICBzb3VyY2VTdHJpbmcgPSAiT3RoZXIiOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIHR5cGVTdHJpbmc7Ci0gICAg
ICAgIHN3aXRjaCAodGhpcy50eXBlKSB7Ci0gICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5D
b25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5Mb2c6Ci0gICAgICAgICAgICAgICAgdHlwZVN0cmlu
ZyA9ICJMb2ciOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBXZWJJ
bnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuT2JqZWN0OgotICAgICAgICAgICAg
ICAgIHR5cGVTdHJpbmcgPSAiT2JqZWN0IjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBlLlRyYWNl
OgotICAgICAgICAgICAgICAgIHR5cGVTdHJpbmcgPSAiVHJhY2UiOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVz
c2FnZVR5cGUuU3RhcnRHcm91cDoKLSAgICAgICAgICAgICAgICB0eXBlU3RyaW5nID0gIlN0YXJ0
IEdyb3VwIjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgV2ViSW5z
cGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBlLkVuZEdyb3VwOgotICAgICAgICAgICAg
ICAgIHR5cGVTdHJpbmcgPSAiRW5kIEdyb3VwIjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgdmFyIGxldmVsU3RyaW5nOwotICAgICAgICBzd2l0
Y2ggKHRoaXMubGV2ZWwpIHsKLSAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNvbnNvbGVN
ZXNzYWdlLk1lc3NhZ2VMZXZlbC5UaXA6Ci0gICAgICAgICAgICAgICAgbGV2ZWxTdHJpbmcgPSAi
VGlwIjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVj
dG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VMZXZlbC5Mb2c6Ci0gICAgICAgICAgICAgICAgbGV2
ZWxTdHJpbmcgPSAiTG9nIjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNh
c2UgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VMZXZlbC5XYXJuaW5nOgotICAg
ICAgICAgICAgICAgIGxldmVsU3RyaW5nID0gIldhcm5pbmciOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2Fn
ZUxldmVsLkVycm9yOgotICAgICAgICAgICAgICAgIGxldmVsU3RyaW5nID0gIkVycm9yIjsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBzb3VyY2VT
dHJpbmcgKyAiICIgKyB0eXBlU3RyaW5nICsgIiAiICsgbGV2ZWxTdHJpbmcgKyAiOiAiICsgdGhp
cy5mb3JtYXR0ZWRNZXNzYWdlLnRleHRDb250ZW50ICsgIlxuIiArIHRoaXMudXJsICsgIiBsaW5l
ICIgKyB0aGlzLmxpbmU7Ci0gICAgfSwKLQotICAgIGlzRXF1YWw6IGZ1bmN0aW9uKG1zZywgZGlz
cmVndWFyZEdyb3VwKQotICAgIHsKLSAgICAgICAgaWYgKCFtc2cpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICAgICAgdmFyIHJldCA9ICh0aGlzLnNvdXJjZSA9PSBtc2cuc291cmNl
KQotICAgICAgICAgICAgJiYgKHRoaXMudHlwZSA9PSBtc2cudHlwZSkKLSAgICAgICAgICAgICYm
ICh0aGlzLmxldmVsID09IG1zZy5sZXZlbCkKLSAgICAgICAgICAgICYmICh0aGlzLmxpbmUgPT0g
bXNnLmxpbmUpCi0gICAgICAgICAgICAmJiAodGhpcy51cmwgPT0gbXNnLnVybCkKLSAgICAgICAg
ICAgICYmICh0aGlzLm1lc3NhZ2UgPT0gbXNnLm1lc3NhZ2UpOwotCi0gICAgICAgIHJldHVybiAo
ZGlzcmVndWFyZEdyb3VwID8gcmV0IDogKHJldCAmJiAodGhpcy5ncm91cExldmVsID09IG1zZy5n
cm91cExldmVsKSkpOwotICAgIH0KLX0KLQotLy8gTm90ZTogS2VlcCB0aGVzZSBjb25zdGFudHMg
aW4gc3luYyB3aXRoIHRoZSBvbmVzIGluIENvbnNvbGUuaAotV2ViSW5zcGVjdG9yLkNvbnNvbGVN
ZXNzYWdlLk1lc3NhZ2VTb3VyY2UgPSB7Ci0gICAgSFRNTDogMCwKLSAgICBXTUw6IDEsCi0gICAg
WE1MOiAyLAotICAgIEpTOiAzLAotICAgIENTUzogNCwKLSAgICBPdGhlcjogNQotfQotCi1XZWJJ
bnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUgPSB7Ci0gICAgTG9nOiAwLAotICAg
IE9iamVjdDogMSwKLSAgICBUcmFjZTogMiwKLSAgICBTdGFydEdyb3VwOiAzLAotICAgIEVuZEdy
b3VwOiA0Ci19Ci0KLVdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlTGV2ZWwgPSB7
Ci0gICAgVGlwOiAwLAotICAgIExvZzogMSwKLSAgICBXYXJuaW5nOiAyLAotICAgIEVycm9yOiAz
Ci19Ci0KLVdlYkluc3BlY3Rvci5Db25zb2xlQ29tbWFuZCA9IGZ1bmN0aW9uKGNvbW1hbmQpCi17
Ci0gICAgdGhpcy5jb21tYW5kID0gY29tbWFuZDsKLX0KLQotV2ViSW5zcGVjdG9yLkNvbnNvbGVD
b21tYW5kLnByb3RvdHlwZSA9IHsKLSAgICB0b01lc3NhZ2VFbGVtZW50OiBmdW5jdGlvbigpCi0g
ICAgewotICAgICAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIp
OwotICAgICAgICBlbGVtZW50LmNvbW1hbmQgPSB0aGlzOwotICAgICAgICBlbGVtZW50LmNsYXNz
TmFtZSA9ICJjb25zb2xlLXVzZXItY29tbWFuZCI7Ci0KLSAgICAgICAgdmFyIGNvbW1hbmRUZXh0
RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKLSAgICAgICAgY29tbWFu
ZFRleHRFbGVtZW50LmNsYXNzTmFtZSA9ICJjb25zb2xlLW1lc3NhZ2UtdGV4dCI7Ci0gICAgICAg
IGNvbW1hbmRUZXh0RWxlbWVudC50ZXh0Q29udGVudCA9IHRoaXMuY29tbWFuZDsKLSAgICAgICAg
ZWxlbWVudC5hcHBlbmRDaGlsZChjb21tYW5kVGV4dEVsZW1lbnQpOwotCi0gICAgICAgIHJldHVy
biBlbGVtZW50OwotICAgIH0KLX0KLQotV2ViSW5zcGVjdG9yLkNvbnNvbGVDb21tYW5kUmVzdWx0
ID0gZnVuY3Rpb24ocmVzdWx0LCBleGNlcHRpb24sIG9yaWdpbmF0aW5nQ29tbWFuZCkKLXsKLSAg
ICB2YXIgbGV2ZWwgPSAoZXhjZXB0aW9uID8gV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1l
c3NhZ2VMZXZlbC5FcnJvciA6IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlTGV2
ZWwuTG9nKTsKLSAgICB2YXIgbWVzc2FnZSA9IChleGNlcHRpb24gPyBTdHJpbmcocmVzdWx0KSA6
IHJlc3VsdCk7Ci0gICAgdmFyIGxpbmUgPSAoZXhjZXB0aW9uID8gcmVzdWx0LmxpbmUgOiAtMSk7
Ci0gICAgdmFyIHVybCA9IChleGNlcHRpb24gPyByZXN1bHQuc291cmNlVVJMIDogbnVsbCk7Ci0K
LSAgICBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuY2FsbCh0aGlzLCBXZWJJbnNwZWN0b3Iu
Q29uc29sZU1lc3NhZ2UuTWVzc2FnZVNvdXJjZS5KUywgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNz
YWdlLk1lc3NhZ2VUeXBlLkxvZywgbGV2ZWwsIGxpbmUsIHVybCwgbnVsbCwgMSwgbWVzc2FnZSk7
Ci0KLSAgICB0aGlzLm9yaWdpbmF0aW5nQ29tbWFuZCA9IG9yaWdpbmF0aW5nQ29tbWFuZDsKLX0K
LQotV2ViSW5zcGVjdG9yLkNvbnNvbGVDb21tYW5kUmVzdWx0LnByb3RvdHlwZSA9IHsKLSAgICB0
b01lc3NhZ2VFbGVtZW50OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIgZWxlbWVudCA9
IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5wcm90b3R5cGUudG9NZXNzYWdlRWxlbWVudC5j
YWxsKHRoaXMpOwotICAgICAgICBlbGVtZW50LmFkZFN0eWxlQ2xhc3MoImNvbnNvbGUtdXNlci1j
b21tYW5kLXJlc3VsdCIpOwotICAgICAgICByZXR1cm4gZWxlbWVudDsKLSAgICB9Ci19Ci0KLVdl
Ykluc3BlY3Rvci5Db25zb2xlQ29tbWFuZFJlc3VsdC5wcm90b3R5cGUuX19wcm90b19fID0gV2Vi
SW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLnByb3RvdHlwZTsKLQotV2ViSW5zcGVjdG9yLkNvbnNv
bGVHcm91cCA9IGZ1bmN0aW9uKHBhcmVudEdyb3VwLCBsZXZlbCkKLXsKLSAgICB0aGlzLnBhcmVu
dEdyb3VwID0gcGFyZW50R3JvdXA7Ci0gICAgdGhpcy5sZXZlbCA9IGxldmVsOwotCi0gICAgdmFy
IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICBlbGVtZW50LmNs
YXNzTmFtZSA9ICJjb25zb2xlLWdyb3VwIjsKLSAgICBlbGVtZW50Lmdyb3VwID0gdGhpczsKLSAg
ICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50OwotCi0gICAgdmFyIG1lc3NhZ2VzRWxlbWVudCA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotICAgIG1lc3NhZ2VzRWxlbWVudC5jbGFzc05h
bWUgPSAiY29uc29sZS1ncm91cC1tZXNzYWdlcyI7Ci0gICAgZWxlbWVudC5hcHBlbmRDaGlsZCht
ZXNzYWdlc0VsZW1lbnQpOwotICAgIHRoaXMubWVzc2FnZXNFbGVtZW50ID0gbWVzc2FnZXNFbGVt
ZW50OwotfQotCi1XZWJJbnNwZWN0b3IuQ29uc29sZUdyb3VwLnByb3RvdHlwZSA9IHsKLSAgICBh
ZGRNZXNzYWdlOiBmdW5jdGlvbihtc2cpCi0gICAgewotICAgICAgICB2YXIgZWxlbWVudCA9IG1z
Zy50b01lc3NhZ2VFbGVtZW50KCk7Ci0gICAgICAgIAotICAgICAgICBpZiAobXNnLnR5cGUgPT09
IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5TdGFydEdyb3VwKSB7Ci0g
ICAgICAgICAgICB0aGlzLm1lc3NhZ2VzRWxlbWVudC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShl
bGVtZW50LCB0aGlzLm1lc3NhZ2VzRWxlbWVudCk7Ci0gICAgICAgICAgICBlbGVtZW50LmFkZEV2
ZW50TGlzdGVuZXIoImNsaWNrIiwgdGhpcy5fdGl0bGVDbGlja2VkLmJpbmQodGhpcyksIHRydWUp
OwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHRoaXMubWVzc2FnZXNFbGVtZW50LmFwcGVu
ZENoaWxkKGVsZW1lbnQpOwotCi0gICAgICAgIGlmIChlbGVtZW50LnByZXZpb3VzU2libGluZyAm
JiBtc2cub3JpZ2luYXRpbmdDb21tYW5kICYmIGVsZW1lbnQucHJldmlvdXNTaWJsaW5nLmNvbW1h
bmQgPT09IG1zZy5vcmlnaW5hdGluZ0NvbW1hbmQpCi0gICAgICAgICAgICBlbGVtZW50LnByZXZp
b3VzU2libGluZy5hZGRTdHlsZUNsYXNzKCJjb25zb2xlLWFkamFjZW50LXVzZXItY29tbWFuZC1y
ZXN1bHQiKTsKLSAgICB9LAotCi0gICAgX3RpdGxlQ2xpY2tlZDogZnVuY3Rpb24oZXZlbnQpCi0g
ICAgewotICAgICAgICB2YXIgZ3JvdXBUaXRsZUVsZW1lbnQgPSBldmVudC50YXJnZXQuZW5jbG9z
aW5nTm9kZU9yU2VsZldpdGhDbGFzcygiY29uc29sZS1ncm91cC10aXRsZSIpOwotICAgICAgICBp
ZiAoZ3JvdXBUaXRsZUVsZW1lbnQpIHsKLSAgICAgICAgICAgIHZhciBncm91cEVsZW1lbnQgPSBn
cm91cFRpdGxlRWxlbWVudC5lbmNsb3NpbmdOb2RlT3JTZWxmV2l0aENsYXNzKCJjb25zb2xlLWdy
b3VwIik7Ci0gICAgICAgICAgICBpZiAoZ3JvdXBFbGVtZW50KQotICAgICAgICAgICAgICAgIGlm
IChncm91cEVsZW1lbnQuaGFzU3R5bGVDbGFzcygiY29sbGFwc2VkIikpCi0gICAgICAgICAgICAg
ICAgICAgIGdyb3VwRWxlbWVudC5yZW1vdmVTdHlsZUNsYXNzKCJjb2xsYXBzZWQiKTsKLSAgICAg
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGdyb3VwRWxlbWVudC5hZGRTdHls
ZUNsYXNzKCJjb2xsYXBzZWQiKTsKLSAgICAgICAgICAgIGdyb3VwVGl0bGVFbGVtZW50LnNjcm9s
bEludG9WaWV3SWZOZWVkZWQodHJ1ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBldmVudC5zdG9w
UHJvcGFnYXRpb24oKTsKLSAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKLSAgICB9Ci19
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ29uc29sZVZpZXcuanMg
Yi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ29uc29sZVZpZXcuanMKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JlNTQyOAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Db25zb2xlVmlldy5qcwpAQCAtMCwwICsxLDkyNiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IEpvc2VwaCBQZWNvcmFybworICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5j
LiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBm
cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK1dlYkluc3Bl
Y3Rvci5Db25zb2xlVmlldyA9IGZ1bmN0aW9uKGRyYXdlcikKK3sKKyAgICBXZWJJbnNwZWN0b3Iu
Vmlldy5jYWxsKHRoaXMsIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb25zb2xlLXZpZXciKSk7
CisKKyAgICB0aGlzLm1lc3NhZ2VzID0gW107CisgICAgdGhpcy5kcmF3ZXIgPSBkcmF3ZXI7CisK
KyAgICB0aGlzLmNsZWFyQnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNsZWFyLWNv
bnNvbGUtc3RhdHVzLWJhci1pdGVtIik7CisgICAgdGhpcy5jbGVhckJ1dHRvbi50aXRsZSA9IFdl
Ykluc3BlY3Rvci5VSVN0cmluZygiQ2xlYXIgY29uc29sZSBsb2cuIik7CisgICAgdGhpcy5jbGVh
ckJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIHRoaXMuX2NsZWFyQnV0dG9uQ2xpY2tl
ZC5iaW5kKHRoaXMpLCBmYWxzZSk7CisKKyAgICB0aGlzLm1lc3NhZ2VzRWxlbWVudCA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJjb25zb2xlLW1lc3NhZ2VzIik7CisgICAgdGhpcy5tZXNzYWdl
c0VsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigic2VsZWN0c3RhcnQiLCB0aGlzLl9tZXNzYWdlc1Nl
bGVjdFN0YXJ0LmJpbmQodGhpcyksIGZhbHNlKTsKKyAgICB0aGlzLm1lc3NhZ2VzRWxlbWVudC5h
ZGRFdmVudExpc3RlbmVyKCJjbGljayIsIHRoaXMuX21lc3NhZ2VzQ2xpY2tlZC5iaW5kKHRoaXMp
LCB0cnVlKTsKKworICAgIHRoaXMucHJvbXB0RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJjb25zb2xlLXByb21wdCIpOworICAgIHRoaXMucHJvbXB0RWxlbWVudC5oYW5kbGVLZXlF
dmVudCA9IHRoaXMuX3Byb21wdEtleURvd24uYmluZCh0aGlzKTsKKyAgICB0aGlzLnByb21wdCA9
IG5ldyBXZWJJbnNwZWN0b3IuVGV4dFByb21wdCh0aGlzLnByb21wdEVsZW1lbnQsIHRoaXMuY29t
cGxldGlvbnMuYmluZCh0aGlzKSwgIiAuPTpbKHs7Iik7CisKKyAgICB0aGlzLnRvcEdyb3VwID0g
bmV3IFdlYkluc3BlY3Rvci5Db25zb2xlR3JvdXAobnVsbCwgMCk7CisgICAgdGhpcy5tZXNzYWdl
c0VsZW1lbnQuaW5zZXJ0QmVmb3JlKHRoaXMudG9wR3JvdXAuZWxlbWVudCwgdGhpcy5wcm9tcHRF
bGVtZW50KTsKKyAgICB0aGlzLmdyb3VwTGV2ZWwgPSAwOworICAgIHRoaXMuY3VycmVudEdyb3Vw
ID0gdGhpcy50b3BHcm91cDsKKworICAgIHRoaXMudG9nZ2xlQ29uc29sZUJ1dHRvbiA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJjb25zb2xlLXN0YXR1cy1iYXItaXRlbSIpOworICAgIHRoaXMu
dG9nZ2xlQ29uc29sZUJ1dHRvbi50aXRsZSA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiU2hvdyBj
b25zb2xlLiIpOworICAgIHRoaXMudG9nZ2xlQ29uc29sZUJ1dHRvbi5hZGRFdmVudExpc3RlbmVy
KCJjbGljayIsIHRoaXMuX3RvZ2dsZUNvbnNvbGVCdXR0b25DbGlja2VkLmJpbmQodGhpcyksIGZh
bHNlKTsKKworICAgIHZhciBhbmNob3JlZFN0YXR1c0JhciA9IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJhbmNob3JlZC1zdGF0dXMtYmFyLWl0ZW1zIik7CisgICAgYW5jaG9yZWRTdGF0dXNCYXIu
YXBwZW5kQ2hpbGQodGhpcy50b2dnbGVDb25zb2xlQnV0dG9uKTsKKworfQorCitXZWJJbnNwZWN0
b3IuQ29uc29sZVZpZXcucHJvdG90eXBlID0geworICAgIF90b2dnbGVDb25zb2xlQnV0dG9uQ2xp
Y2tlZDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy5kcmF3ZXIudmlzaWJsZVZpZXcg
PSB0aGlzOworICAgIH0sCisKKyAgICBhdHRhY2g6IGZ1bmN0aW9uKG1haW5FbGVtZW50LCBzdGF0
dXNCYXJFbGVtZW50KQorICAgIHsKKyAgICAgICAgbWFpbkVsZW1lbnQuYXBwZW5kQ2hpbGQodGhp
cy5lbGVtZW50KTsKKyAgICAgICAgc3RhdHVzQmFyRWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmNs
ZWFyQnV0dG9uKTsKKyAgICB9LAorCisgICAgc2hvdzogZnVuY3Rpb24oKQorICAgIHsKKyAgICAg
ICAgdGhpcy50b2dnbGVDb25zb2xlQnV0dG9uLmFkZFN0eWxlQ2xhc3MoInRvZ2dsZWQtb24iKTsK
KyAgICAgICAgdGhpcy50b2dnbGVDb25zb2xlQnV0dG9uLnRpdGxlID0gV2ViSW5zcGVjdG9yLlVJ
U3RyaW5nKCJIaWRlIGNvbnNvbGUuIik7CisgICAgICAgIGlmICghdGhpcy5wcm9tcHQuaXNDYXJl
dEluc2lkZVByb21wdCgpKQorICAgICAgICAgICAgdGhpcy5wcm9tcHQubW92ZUNhcmV0VG9FbmRP
ZlByb21wdCgpOworICAgIH0sCisKKyAgICBhZnRlclNob3c6IGZ1bmN0aW9uKCkKKyAgICB7Cisg
ICAgICAgIFdlYkluc3BlY3Rvci5jdXJyZW50Rm9jdXNFbGVtZW50ID0gdGhpcy5wcm9tcHRFbGVt
ZW50OyAgCisgICAgfSwKKworICAgIGhpZGU6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRo
aXMudG9nZ2xlQ29uc29sZUJ1dHRvbi5yZW1vdmVTdHlsZUNsYXNzKCJ0b2dnbGVkLW9uIik7Cisg
ICAgICAgIHRoaXMudG9nZ2xlQ29uc29sZUJ1dHRvbi50aXRsZSA9IFdlYkluc3BlY3Rvci5VSVN0
cmluZygiU2hvdyBjb25zb2xlLiIpOworICAgIH0sCisKKyAgICBhZGRNZXNzYWdlOiBmdW5jdGlv
bihtc2cpCisgICAgeworICAgICAgICBpZiAobXNnIGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLkNv
bnNvbGVNZXNzYWdlICYmICEobXNnIGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLkNvbnNvbGVDb21t
YW5kUmVzdWx0KSkgeworICAgICAgICAgICAgbXNnLnRvdGFsUmVwZWF0Q291bnQgPSBtc2cucmVw
ZWF0Q291bnQ7CisgICAgICAgICAgICBtc2cucmVwZWF0RGVsdGEgPSBtc2cucmVwZWF0Q291bnQ7
CisKKyAgICAgICAgICAgIHZhciBtZXNzYWdlUmVwZWF0ZWQgPSBmYWxzZTsKKworICAgICAgICAg
ICAgaWYgKG1zZy5pc0VxdWFsICYmIG1zZy5pc0VxdWFsKHRoaXMucHJldmlvdXNNZXNzYWdlKSkg
eworICAgICAgICAgICAgICAgIC8vIEJlY2F1c2Ugc29tZXRpbWVzIHdlIGdldCBhIGxhcmdlIG51
bWJlciBvZiByZXBlYXRlZCBtZXNzYWdlcyBhbmQgc29tZXRpbWVzCisgICAgICAgICAgICAgICAg
Ly8gd2UgZ2V0IHRoZW0gb25lIGF0IGEgdGltZSwgd2UgbmVlZCB0byBrbm93IHRoZSBkaWZmZXJl
bmNlIGJldHdlZW4gaG93IG1hbnkKKyAgICAgICAgICAgICAgICAvLyByZXBlYXRzIHdlIHVzZWQg
dG8gaGF2ZSBhbmQgaG93IG1hbnkgd2UgaGF2ZSBub3cuCisgICAgICAgICAgICAgICAgbXNnLnJl
cGVhdERlbHRhIC09IHRoaXMucHJldmlvdXNNZXNzYWdlLnRvdGFsUmVwZWF0Q291bnQ7CisKKyAg
ICAgICAgICAgICAgICBpZiAoIWlzTmFOKHRoaXMucmVwZWF0Q291bnRCZWZvcmVDb21tYW5kKSkK
KyAgICAgICAgICAgICAgICAgICAgbXNnLnJlcGVhdENvdW50IC09IHRoaXMucmVwZWF0Q291bnRC
ZWZvcmVDb21tYW5kOworCisgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNvbW1hbmRTaW5jZVBy
ZXZpb3VzTWVzc2FnZSkgeworICAgICAgICAgICAgICAgICAgICAvLyBSZWNyZWF0ZSB0aGUgcHJl
dmlvdXMgbWVzc2FnZSBlbGVtZW50IHRvIHJlc2V0IHRoZSByZXBlYXQgY291bnQuCisgICAgICAg
ICAgICAgICAgICAgIHZhciBtZXNzYWdlc0VsZW1lbnQgPSB0aGlzLmN1cnJlbnRHcm91cC5tZXNz
YWdlc0VsZW1lbnQ7CisgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VzRWxlbWVudC5yZW1vdmVD
aGlsZChtZXNzYWdlc0VsZW1lbnQubGFzdENoaWxkKTsKKyAgICAgICAgICAgICAgICAgICAgbWVz
c2FnZXNFbGVtZW50LmFwcGVuZENoaWxkKG1zZy50b01lc3NhZ2VFbGVtZW50KCkpOworCisgICAg
ICAgICAgICAgICAgICAgIG1lc3NhZ2VSZXBlYXRlZCA9IHRydWU7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMucmVwZWF0
Q291bnRCZWZvcmVDb21tYW5kOworCisgICAgICAgICAgICAvLyBJbmNyZW1lbnQgdGhlIGVycm9y
IG9yIHdhcm5pbmcgY291bnQKKyAgICAgICAgICAgIHN3aXRjaCAobXNnLmxldmVsKSB7CisgICAg
ICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlTGV2ZWwuV2Fy
bmluZzoKKyAgICAgICAgICAgICAgICBXZWJJbnNwZWN0b3Iud2FybmluZ3MgKz0gbXNnLnJlcGVh
dERlbHRhOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBXZWJJbnNw
ZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZUxldmVsLkVycm9yOgorICAgICAgICAgICAgICAg
IFdlYkluc3BlY3Rvci5lcnJvcnMgKz0gbXNnLnJlcGVhdERlbHRhOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBBZGQgbWVzc2FnZSB0byB0
aGUgcmVzb3VyY2UgcGFuZWwKKyAgICAgICAgICAgIGlmIChtc2cudXJsIGluIFdlYkluc3BlY3Rv
ci5yZXNvdXJjZVVSTE1hcCkgeworICAgICAgICAgICAgICAgIG1zZy5yZXNvdXJjZSA9IFdlYklu
c3BlY3Rvci5yZXNvdXJjZVVSTE1hcFttc2cudXJsXTsKKyAgICAgICAgICAgICAgICBpZiAoV2Vi
SW5zcGVjdG9yLnBhbmVscy5yZXNvdXJjZXMpCisgICAgICAgICAgICAgICAgICAgIFdlYkluc3Bl
Y3Rvci5wYW5lbHMucmVzb3VyY2VzLmFkZE1lc3NhZ2VUb1Jlc291cmNlKG1zZy5yZXNvdXJjZSwg
bXNnKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdGhpcy5jb21tYW5kU2luY2VQcmV2
aW91c01lc3NhZ2UgPSBmYWxzZTsKKyAgICAgICAgICAgIHRoaXMucHJldmlvdXNNZXNzYWdlID0g
bXNnOworCisgICAgICAgICAgICBpZiAobWVzc2FnZVJlcGVhdGVkKQorICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfSBlbHNlIGlmIChtc2cgaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3Iu
Q29uc29sZUNvbW1hbmQpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLnByZXZpb3VzTWVzc2FnZSkg
eworICAgICAgICAgICAgICAgIHRoaXMuY29tbWFuZFNpbmNlUHJldmlvdXNNZXNzYWdlID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICB0aGlzLnJlcGVhdENvdW50QmVmb3JlQ29tbWFuZCA9IHRoaXMu
cHJldmlvdXNNZXNzYWdlLnRvdGFsUmVwZWF0Q291bnQ7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICB0aGlzLm1lc3NhZ2VzLnB1c2gobXNnKTsKKworICAgICAgICBpZiAobXNn
LnR5cGUgPT09IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5FbmRHcm91
cCkgeworICAgICAgICAgICAgaWYgKHRoaXMuZ3JvdXBMZXZlbCA8IDEpCisgICAgICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgICAgICB0aGlzLmdyb3VwTGV2ZWwtLTsKKworICAgICAgICAg
ICAgdGhpcy5jdXJyZW50R3JvdXAgPSB0aGlzLmN1cnJlbnRHcm91cC5wYXJlbnRHcm91cDsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChtc2cudHlwZSA9PT0gV2ViSW5zcGVjdG9y
LkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBlLlN0YXJ0R3JvdXApIHsKKyAgICAgICAgICAgICAg
ICB0aGlzLmdyb3VwTGV2ZWwrKzsKKworICAgICAgICAgICAgICAgIHZhciBncm91cCA9IG5ldyBX
ZWJJbnNwZWN0b3IuQ29uc29sZUdyb3VwKHRoaXMuY3VycmVudEdyb3VwLCB0aGlzLmdyb3VwTGV2
ZWwpOworICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEdyb3VwLm1lc3NhZ2VzRWxlbWVudC5h
cHBlbmRDaGlsZChncm91cC5lbGVtZW50KTsKKyAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRH
cm91cCA9IGdyb3VwOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB0aGlzLmN1cnJlbnRH
cm91cC5hZGRNZXNzYWdlKG1zZyk7CisgICAgICAgIH0KKworICAgICAgICB0aGlzLnByb21wdEVs
ZW1lbnQuc2Nyb2xsSW50b1ZpZXcoZmFsc2UpOworICAgIH0sCisKKyAgICBjbGVhck1lc3NhZ2Vz
OiBmdW5jdGlvbihjbGVhckluc3BlY3RvckNvbnRyb2xsZXIpCisgICAgeworICAgICAgICBpZiAo
Y2xlYXJJbnNwZWN0b3JDb250cm9sbGVyKQorICAgICAgICAgICAgSW5zcGVjdG9yQ29udHJvbGxl
ci5jbGVhck1lc3NhZ2VzKCk7CisgICAgICAgIGlmIChXZWJJbnNwZWN0b3IucGFuZWxzLnJlc291
cmNlcykKKyAgICAgICAgICAgIFdlYkluc3BlY3Rvci5wYW5lbHMucmVzb3VyY2VzLmNsZWFyTWVz
c2FnZXMoKTsKKworICAgICAgICB0aGlzLm1lc3NhZ2VzID0gW107CisKKyAgICAgICAgdGhpcy5n
cm91cExldmVsID0gMDsKKyAgICAgICAgdGhpcy5jdXJyZW50R3JvdXAgPSB0aGlzLnRvcEdyb3Vw
OworICAgICAgICB0aGlzLnRvcEdyb3VwLm1lc3NhZ2VzRWxlbWVudC5yZW1vdmVDaGlsZHJlbigp
OworCisgICAgICAgIFdlYkluc3BlY3Rvci5lcnJvcnMgPSAwOworICAgICAgICBXZWJJbnNwZWN0
b3Iud2FybmluZ3MgPSAwOworCisgICAgICAgIGRlbGV0ZSB0aGlzLmNvbW1hbmRTaW5jZVByZXZp
b3VzTWVzc2FnZTsKKyAgICAgICAgZGVsZXRlIHRoaXMucmVwZWF0Q291bnRCZWZvcmVDb21tYW5k
OworICAgICAgICBkZWxldGUgdGhpcy5wcmV2aW91c01lc3NhZ2U7CisgICAgfSwKKworICAgIGNv
bXBsZXRpb25zOiBmdW5jdGlvbih3b3JkUmFuZ2UsIGJlc3RNYXRjaE9ubHksIGNvbXBsZXRpb25z
UmVhZHlDYWxsYmFjaykKKyAgICB7CisgICAgICAgIC8vIFBhc3MgbGVzcyBzdG9wIGNoYXJhY3Rl
cnMgdG8gcmFuZ2VPZldvcmQgc28gdGhlIHJhbmdlIHdpbGwgYmUgYSBtb3JlIGNvbXBsZXRlIGV4
cHJlc3Npb24uCisgICAgICAgIGNvbnN0IGV4cHJlc3Npb25TdG9wQ2hhcmFjdGVycyA9ICIgPTp7
OyI7CisgICAgICAgIHZhciBleHByZXNzaW9uUmFuZ2UgPSB3b3JkUmFuZ2Uuc3RhcnRDb250YWlu
ZXIucmFuZ2VPZldvcmQod29yZFJhbmdlLnN0YXJ0T2Zmc2V0LCBleHByZXNzaW9uU3RvcENoYXJh
Y3RlcnMsIHRoaXMucHJvbXB0RWxlbWVudCwgImJhY2t3YXJkIik7CisgICAgICAgIHZhciBleHBy
ZXNzaW9uU3RyaW5nID0gZXhwcmVzc2lvblJhbmdlLnRvU3RyaW5nKCk7CisgICAgICAgIHZhciBs
YXN0SW5kZXggPSBleHByZXNzaW9uU3RyaW5nLmxlbmd0aCAtIDE7CisKKyAgICAgICAgdmFyIGRv
dE5vdGF0aW9uID0gKGV4cHJlc3Npb25TdHJpbmdbbGFzdEluZGV4XSA9PT0gIi4iKTsKKyAgICAg
ICAgdmFyIGJyYWNrZXROb3RhdGlvbiA9IChleHByZXNzaW9uU3RyaW5nW2xhc3RJbmRleF0gPT09
ICJbIik7CisKKyAgICAgICAgaWYgKGRvdE5vdGF0aW9uIHx8IGJyYWNrZXROb3RhdGlvbikKKyAg
ICAgICAgICAgIGV4cHJlc3Npb25TdHJpbmcgPSBleHByZXNzaW9uU3RyaW5nLnN1YnN0cigwLCBs
YXN0SW5kZXgpOworCisgICAgICAgIHZhciBwcmVmaXggPSB3b3JkUmFuZ2UudG9TdHJpbmcoKTsK
KyAgICAgICAgaWYgKCFleHByZXNzaW9uU3RyaW5nICYmICFwcmVmaXgpCisgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgdmFyIHJlcG9ydENvbXBsZXRpb25zID0gdGhpcy5fcmVwb3J0Q29t
cGxldGlvbnMuYmluZCh0aGlzLCBiZXN0TWF0Y2hPbmx5LCBjb21wbGV0aW9uc1JlYWR5Q2FsbGJh
Y2ssIGRvdE5vdGF0aW9uLCBicmFja2V0Tm90YXRpb24sIHByZWZpeCk7CisgICAgICAgIHRoaXMu
X2V2YWxJbkluc3BlY3RlZFdpbmRvdyhleHByZXNzaW9uU3RyaW5nLCByZXBvcnRDb21wbGV0aW9u
cyk7CisgICAgfSwKKworICAgIF9yZXBvcnRDb21wbGV0aW9uczogZnVuY3Rpb24oYmVzdE1hdGNo
T25seSwgY29tcGxldGlvbnNSZWFkeUNhbGxiYWNrLCBkb3ROb3RhdGlvbiwgYnJhY2tldE5vdGF0
aW9uLCBwcmVmaXgsIHJlc3VsdCkgeworICAgICAgICBpZiAoYnJhY2tldE5vdGF0aW9uKSB7Cisg
ICAgICAgICAgICBpZiAocHJlZml4Lmxlbmd0aCAmJiBwcmVmaXhbMF0gPT09ICInIikKKyAgICAg
ICAgICAgICAgICB2YXIgcXVvdGVVc2VkID0gIiciOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIHZhciBxdW90ZVVzZWQgPSAiXCIiOworICAgICAgICB9CisKKyAgICAgICAgdmFy
IHJlc3VsdHMgPSBbXTsKKyAgICAgICAgdmFyIHByb3BlcnRpZXMgPSBPYmplY3QucHJvcGVydGll
cyhyZXN1bHQpOworICAgICAgICBpZiAoIWRvdE5vdGF0aW9uICYmICFicmFja2V0Tm90YXRpb24g
JiYgcmVzdWx0Ll9pbnNwZWN0b3JDb21tYW5kTGluZUFQSSkgeworICAgICAgICAgICAgdmFyIGNv
bW1hbmRMaW5lQVBJID0gT2JqZWN0LnByb3BlcnRpZXMocmVzdWx0Ll9pbnNwZWN0b3JDb21tYW5k
TGluZUFQSSk7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbW1hbmRMaW5lQVBJ
Lmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAgICAgdmFyIHByb3BlcnR5ID0gY29tbWFuZExp
bmVBUElbaV07CisgICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5LmNoYXJBdCgwKSAhPT0gIl8i
KQorICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLnB1c2gocHJvcGVydHkpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIHByb3BlcnRpZXMuc29ydCgpOworCisgICAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7ICsraSkgeworICAgICAgICAg
ICAgdmFyIHByb3BlcnR5ID0gcHJvcGVydGllc1tpXTsKKworICAgICAgICAgICAgaWYgKGRvdE5v
dGF0aW9uICYmICEvXlthLXpBLVpfJF1bYS16QS1aMC05XyRdKiQvLnRlc3QocHJvcGVydHkpKQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBpZiAoYnJhY2tldE5vdGF0
aW9uKSB7CisgICAgICAgICAgICAgICAgaWYgKCEvXlswLTldKyQvLnRlc3QocHJvcGVydHkpKQor
ICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eSA9IHF1b3RlVXNlZCArIHByb3BlcnR5LmVzY2Fw
ZUNoYXJhY3RlcnMocXVvdGVVc2VkICsgIlxcIikgKyBxdW90ZVVzZWQ7CisgICAgICAgICAgICAg
ICAgcHJvcGVydHkgKz0gIl0iOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAocHJv
cGVydHkubGVuZ3RoIDwgcHJlZml4Lmxlbmd0aCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgIGlmIChwcm9wZXJ0eS5pbmRleE9mKHByZWZpeCkgIT09IDApCisgICAgICAg
ICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIHJlc3VsdHMucHVzaChwcm9wZXJ0eSk7
CisgICAgICAgICAgICBpZiAoYmVzdE1hdGNoT25seSkKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBzZXRUaW1lb3V0KGNvbXBsZXRpb25zUmVhZHlDYWxsYmFjaywg
MCwgcmVzdWx0cyk7CisgICAgfSwKKworICAgIF9jbGVhckJ1dHRvbkNsaWNrZWQ6IGZ1bmN0aW9u
KCkKKyAgICB7CisgICAgICAgIHRoaXMuY2xlYXJNZXNzYWdlcyh0cnVlKTsKKyAgICB9LAorCisg
ICAgX21lc3NhZ2VzU2VsZWN0U3RhcnQ6IGZ1bmN0aW9uKGV2ZW50KQorICAgIHsKKyAgICAgICAg
aWYgKHRoaXMuX3NlbGVjdGlvblRpbWVvdXQpCisgICAgICAgICAgICBjbGVhclRpbWVvdXQodGhp
cy5fc2VsZWN0aW9uVGltZW91dCk7CisKKyAgICAgICAgdGhpcy5wcm9tcHQuY2xlYXJBdXRvQ29t
cGxldGUoKTsKKworICAgICAgICBmdW5jdGlvbiBtb3ZlQmFja0lmT3V0c2lkZSgpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9zZWxlY3Rpb25UaW1lb3V0OworICAgICAgICAg
ICAgaWYgKCF0aGlzLnByb21wdC5pc0NhcmV0SW5zaWRlUHJvbXB0KCkgJiYgd2luZG93LmdldFNl
bGVjdGlvbigpLmlzQ29sbGFwc2VkKQorICAgICAgICAgICAgICAgIHRoaXMucHJvbXB0Lm1vdmVD
YXJldFRvRW5kT2ZQcm9tcHQoKTsKKyAgICAgICAgICAgIHRoaXMucHJvbXB0LmF1dG9Db21wbGV0
ZVNvb24oKTsKKyAgICAgICAgfQorCisgICAgICAgIHRoaXMuX3NlbGVjdGlvblRpbWVvdXQgPSBz
ZXRUaW1lb3V0KG1vdmVCYWNrSWZPdXRzaWRlLmJpbmQodGhpcyksIDEwMCk7CisgICAgfSwKKwor
ICAgIF9tZXNzYWdlc0NsaWNrZWQ6IGZ1bmN0aW9uKGV2ZW50KQorICAgIHsKKyAgICAgICAgdmFy
IGxpbmsgPSBldmVudC50YXJnZXQuZW5jbG9zaW5nTm9kZU9yU2VsZldpdGhOb2RlTmFtZSgiYSIp
OworICAgICAgICBpZiAoIWxpbmsgfHwgIWxpbmsucmVwcmVzZW50ZWROb2RlKQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIFdlYkluc3BlY3Rvci51cGRhdGVGb2N1c2VkTm9kZShsaW5r
LnJlcHJlc2VudGVkTm9kZSk7CisgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOworICAg
ICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOworICAgIH0sCisKKyAgICBfcHJvbXB0S2V5RG93
bjogZnVuY3Rpb24oZXZlbnQpCisgICAgeworICAgICAgICBzd2l0Y2ggKGV2ZW50LmtleUlkZW50
aWZpZXIpIHsKKyAgICAgICAgICAgIGNhc2UgIkVudGVyIjoKKyAgICAgICAgICAgICAgICB0aGlz
Ll9lbnRlcktleVByZXNzZWQoZXZlbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCisgICAgICAgIHRoaXMucHJvbXB0LmhhbmRsZUtleUV2ZW50KGV2ZW50KTsKKyAgICB9
LAorCisgICAgX2V2YWxJbkluc3BlY3RlZFdpbmRvdzogZnVuY3Rpb24oZXhwcmVzc2lvbiwgY2Fs
bGJhY2spCisgICAgeworICAgICAgICBpZiAoV2ViSW5zcGVjdG9yLnBhbmVscy5zY3JpcHRzICYm
IFdlYkluc3BlY3Rvci5wYW5lbHMuc2NyaXB0cy5wYXVzZWQpIHsKKyAgICAgICAgICAgIFdlYklu
c3BlY3Rvci5wYW5lbHMuc2NyaXB0cy5ldmFsdWF0ZUluU2VsZWN0ZWRDYWxsRnJhbWUoZXhwcmVz
c2lvbiwgZmFsc2UsIGNhbGxiYWNrKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgICAgICB0aGlzLmRvRXZhbEluV2luZG93KGV4cHJlc3Npb24sIGNhbGxiYWNrKTsKKyAgICB9
LAorCisgICAgX2Vuc3VyZUNvbW1hbmRMaW5lQVBJSW5zdGFsbGVkOiBmdW5jdGlvbihpbnNwZWN0
ZWRXaW5kb3cpCisgICAgeworICAgICAgICBpZiAoIWluc3BlY3RlZFdpbmRvdy5faW5zcGVjdG9y
Q29tbWFuZExpbmVBUEkpIHsKKyAgICAgICAgICAgIGluc3BlY3RlZFdpbmRvdy5ldmFsKCJ3aW5k
b3cuX2luc3BlY3RvckNvbW1hbmRMaW5lQVBJID0geyBcCisgICAgICAgICAgICAgICAgJDogZnVu
Y3Rpb24oKSB7IHJldHVybiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZC5hcHBseShkb2N1bWVudCwg
YXJndW1lbnRzKSB9LCBcCisgICAgICAgICAgICAgICAgJCQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4g
ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbC5hcHBseShkb2N1bWVudCwgYXJndW1lbnRzKSB9LCBc
CisgICAgICAgICAgICAgICAgJHg6IGZ1bmN0aW9uKHhwYXRoLCBjb250ZXh0KSB7IFwKKyAgICAg
ICAgICAgICAgICAgICAgdmFyIG5vZGVzID0gW107IFwKKyAgICAgICAgICAgICAgICAgICAgdHJ5
IHsgXAorICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRvYyA9IGNvbnRleHQgfHwgZG9jdW1l
bnQ7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHRzID0gZG9jLmV2YWx1YXRl
KHhwYXRoLCBkb2MsIG51bGwsIFhQYXRoUmVzdWx0LkFOWV9UWVBFLCBudWxsKTsgXAorICAgICAg
ICAgICAgICAgICAgICAgICAgdmFyIG5vZGU7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgIHdo
aWxlIChub2RlID0gcmVzdWx0cy5pdGVyYXRlTmV4dCgpKSBub2Rlcy5wdXNoKG5vZGUpOyBcCisg
ICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9IFwKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIG5vZGVzOyBcCisgICAgICAgICAgICAgICAgfSwgXAorICAgICAgICAgICAgICAgIGRp
cjogZnVuY3Rpb24oKSB7IHJldHVybiBjb25zb2xlLmRpci5hcHBseShjb25zb2xlLCBhcmd1bWVu
dHMpIH0sIFwKKyAgICAgICAgICAgICAgICBkaXJ4bWw6IGZ1bmN0aW9uKCkgeyByZXR1cm4gY29u
c29sZS5kaXJ4bWwuYXBwbHkoY29uc29sZSwgYXJndW1lbnRzKSB9LCBcCisgICAgICAgICAgICAg
ICAga2V5czogZnVuY3Rpb24obykgeyB2YXIgYSA9IFtdOyBmb3IgKHZhciBrIGluIG8pIGEucHVz
aChrKTsgcmV0dXJuIGE7IH0sIFwKKyAgICAgICAgICAgICAgICB2YWx1ZXM6IGZ1bmN0aW9uKG8p
IHsgdmFyIGEgPSBbXTsgZm9yICh2YXIgayBpbiBvKSBhLnB1c2gob1trXSk7IHJldHVybiBhOyB9
LCBcCisgICAgICAgICAgICAgICAgcHJvZmlsZTogZnVuY3Rpb24oKSB7IHJldHVybiBjb25zb2xl
LnByb2ZpbGUuYXBwbHkoY29uc29sZSwgYXJndW1lbnRzKSB9LCBcCisgICAgICAgICAgICAgICAg
cHJvZmlsZUVuZDogZnVuY3Rpb24oKSB7IHJldHVybiBjb25zb2xlLnByb2ZpbGVFbmQuYXBwbHko
Y29uc29sZSwgYXJndW1lbnRzKSB9LCBcCisgICAgICAgICAgICAgICAgX2luc3BlY3RlZE5vZGVz
OiBbXSwgXAorICAgICAgICAgICAgICAgIGdldCAkMCgpIHsgcmV0dXJuIF9pbnNwZWN0b3JDb21t
YW5kTGluZUFQSS5faW5zcGVjdGVkTm9kZXNbMF0gfSwgXAorICAgICAgICAgICAgICAgIGdldCAk
MSgpIHsgcmV0dXJuIF9pbnNwZWN0b3JDb21tYW5kTGluZUFQSS5faW5zcGVjdGVkTm9kZXNbMV0g
fSwgXAorICAgICAgICAgICAgICAgIGdldCAkMigpIHsgcmV0dXJuIF9pbnNwZWN0b3JDb21tYW5k
TGluZUFQSS5faW5zcGVjdGVkTm9kZXNbMl0gfSwgXAorICAgICAgICAgICAgICAgIGdldCAkMygp
IHsgcmV0dXJuIF9pbnNwZWN0b3JDb21tYW5kTGluZUFQSS5faW5zcGVjdGVkTm9kZXNbM10gfSwg
XAorICAgICAgICAgICAgICAgIGdldCAkNCgpIHsgcmV0dXJuIF9pbnNwZWN0b3JDb21tYW5kTGlu
ZUFQSS5faW5zcGVjdGVkTm9kZXNbNF0gfSBcCisgICAgICAgICAgICB9OyIpOworCisgICAgICAg
ICAgICBpbnNwZWN0ZWRXaW5kb3cuX2luc3BlY3RvckNvbW1hbmRMaW5lQVBJLmNsZWFyID0gSW5z
cGVjdG9yQ29udHJvbGxlci53cmFwQ2FsbGJhY2sodGhpcy5jbGVhck1lc3NhZ2VzLmJpbmQodGhp
cykpOworICAgICAgICAgICAgaW5zcGVjdGVkV2luZG93Ll9pbnNwZWN0b3JDb21tYW5kTGluZUFQ
SS5pbnNwZWN0ID0gSW5zcGVjdG9yQ29udHJvbGxlci53cmFwQ2FsbGJhY2soaW5zcGVjdE9iamVj
dC5iaW5kKHRoaXMpKTsKKworICAgICAgICAgICAgZnVuY3Rpb24gaW5zcGVjdE9iamVjdChvKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAw
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgICAgICBJbnNwZWN0
b3JDb250cm9sbGVyLmluc3BlY3RlZFdpbmRvdygpLmNvbnNvbGUubG9nKG8pOworICAgICAgICAg
ICAgICAgIGlmIChPYmplY3QudHlwZShvLCBJbnNwZWN0b3JDb250cm9sbGVyLmluc3BlY3RlZFdp
bmRvdygpKSA9PT0gIm5vZGUiKSB7CisgICAgICAgICAgICAgICAgICAgIFdlYkluc3BlY3Rvci5z
aG93RWxlbWVudHNQYW5lbCgpOworICAgICAgICAgICAgICAgICAgICBXZWJJbnNwZWN0b3IucGFu
ZWxzLmVsZW1lbnRzLnRyZWVPdXRsaW5lLnJldmVhbEFuZFNlbGVjdE5vZGUobyk7CisgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChPYmplY3QuZGVz
Y3JpYmUobykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIkRhdGFiYXNlIjoKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJJbnNwZWN0b3Iuc2hvd0RhdGFiYXNlc1BhbmVs
KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViSW5zcGVjdG9yLnBhbmVscy5kYXRh
YmFzZXMuc2VsZWN0RGF0YWJhc2Uobyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICJTdG9yYWdlIjoKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBXZWJJbnNwZWN0b3Iuc2hvd0RhdGFiYXNlc1BhbmVsKCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgV2ViSW5zcGVjdG9yLnBhbmVscy5kYXRhYmFzZXMuc2Vs
ZWN0RE9NU3RvcmFnZShvKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0sCisKKyAgICBhZGRJbnNwZWN0ZWROb2RlOiBmdW5jdGlvbihub2RlKQor
ICAgIHsKKyAgICAgICAgdmFyIGluc3BlY3RlZFdpbmRvdyA9IEluc3BlY3RvckNvbnRyb2xsZXIu
aW5zcGVjdGVkV2luZG93KCk7CisgICAgICAgIHRoaXMuX2Vuc3VyZUNvbW1hbmRMaW5lQVBJSW5z
dGFsbGVkKGluc3BlY3RlZFdpbmRvdyk7CisgICAgICAgIHZhciBpbnNwZWN0ZWROb2RlcyA9IGlu
c3BlY3RlZFdpbmRvdy5faW5zcGVjdG9yQ29tbWFuZExpbmVBUEkuX2luc3BlY3RlZE5vZGVzOwor
ICAgICAgICBpbnNwZWN0ZWROb2Rlcy51bnNoaWZ0KG5vZGUpOworICAgICAgICBpZiAoaW5zcGVj
dGVkTm9kZXMubGVuZ3RoID49IDUpCisgICAgICAgICAgICBpbnNwZWN0ZWROb2Rlcy5wb3AoKTsK
KyAgICB9LAorCisgICAgZG9FdmFsSW5XaW5kb3c6IGZ1bmN0aW9uKGV4cHJlc3Npb24sIGNhbGxi
YWNrKQorICAgIHsKKyAgICAgICAgaWYgKCFleHByZXNzaW9uKSB7CisgICAgICAgICAgICAvLyBU
aGVyZSBpcyBubyBleHByZXNzaW9uLCBzbyB0aGUgY29tcGxldGlvbiBzaG91bGQgaGFwcGVuIGFn
YWluc3QgZ2xvYmFsIHByb3BlcnRpZXMuCisgICAgICAgICAgICBleHByZXNzaW9uID0gInRoaXMi
OworICAgICAgICB9CisKKyAgICAgICAgLy8gU3Vycm91bmQgdGhlIGV4cHJlc3Npb24gaW4gd2l0
aCBzdGF0ZW1lbnRzIHRvIGluamVjdCBvdXIgY29tbWFuZCBsaW5lIEFQSSBzbyB0aGF0CisgICAg
ICAgIC8vIHRoZSB3aW5kb3cgb2JqZWN0IHByb3BlcnRpZXMgc3RpbGwgdGFrZSBtb3JlIHByZWNl
ZGVudCB0aGFuIG91ciBBUEkgZnVuY3Rpb25zLgorICAgICAgICBleHByZXNzaW9uID0gIndpdGgg
KHdpbmRvdy5faW5zcGVjdG9yQ29tbWFuZExpbmVBUEkpIHsgd2l0aCAod2luZG93KSB7ICIgKyBl
eHByZXNzaW9uICsgIiB9IH0iOworCisgICAgICAgIHZhciBzZWxmID0gdGhpczsKKyAgICAgICAg
ZnVuY3Rpb24gZGVsYXllZEV2YWx1YXRpb24oKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIg
aW5zcGVjdGVkV2luZG93ID0gSW5zcGVjdG9yQ29udHJvbGxlci5pbnNwZWN0ZWRXaW5kb3coKTsK
KyAgICAgICAgICAgIHNlbGYuX2Vuc3VyZUNvbW1hbmRMaW5lQVBJSW5zdGFsbGVkKGluc3BlY3Rl
ZFdpbmRvdyk7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGNhbGxiYWNrKGlu
c3BlY3RlZFdpbmRvdy5ldmFsKGV4cHJlc3Npb24pKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKGUp
IHsKKyAgICAgICAgICAgICAgICBjYWxsYmFjayhlLCB0cnVlKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICBzZXRUaW1lb3V0KGRlbGF5ZWRFdmFsdWF0aW9uLCAwKTsKKyAgICB9
LAorCisgICAgX2VudGVyS2V5UHJlc3NlZDogZnVuY3Rpb24oZXZlbnQpCisgICAgeworICAgICAg
ICBpZiAoZXZlbnQuYWx0S2V5KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGV2ZW50
LnByZXZlbnREZWZhdWx0KCk7CisgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOworCisg
ICAgICAgIHRoaXMucHJvbXB0LmNsZWFyQXV0b0NvbXBsZXRlKHRydWUpOworCisgICAgICAgIHZh
ciBzdHIgPSB0aGlzLnByb21wdC50ZXh0OworICAgICAgICBpZiAoIXN0ci5sZW5ndGgpCisgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgdmFyIGNvbW1hbmRNZXNzYWdlID0gbmV3IFdlYklu
c3BlY3Rvci5Db25zb2xlQ29tbWFuZChzdHIpOworICAgICAgICB0aGlzLmFkZE1lc3NhZ2UoY29t
bWFuZE1lc3NhZ2UpOworCisgICAgICAgIHZhciBzZWxmID0gdGhpczsKKyAgICAgICAgZnVuY3Rp
b24gcHJpbnRSZXN1bHQocmVzdWx0LCBleGNlcHRpb24pCisgICAgICAgIHsKKyAgICAgICAgICAg
IHNlbGYucHJvbXB0Lmhpc3RvcnkucHVzaChzdHIpOworICAgICAgICAgICAgc2VsZi5wcm9tcHQu
aGlzdG9yeU9mZnNldCA9IDA7CisgICAgICAgICAgICBzZWxmLnByb21wdC50ZXh0ID0gIiI7Cisg
ICAgICAgICAgICBzZWxmLmFkZE1lc3NhZ2UobmV3IFdlYkluc3BlY3Rvci5Db25zb2xlQ29tbWFu
ZFJlc3VsdChyZXN1bHQsIGV4Y2VwdGlvbiwgY29tbWFuZE1lc3NhZ2UpKTsKKyAgICAgICAgfQor
ICAgICAgICB0aGlzLl9ldmFsSW5JbnNwZWN0ZWRXaW5kb3coc3RyLCBwcmludFJlc3VsdCk7Cisg
ICAgfSwKKworICAgIF9mb3JtYXQ6IGZ1bmN0aW9uKG91dHB1dCwgZm9yY2VPYmplY3RGb3JtYXQp
CisgICAgeworICAgICAgICB2YXIgdHlwZSA9IChmb3JjZU9iamVjdEZvcm1hdCA/ICJvYmplY3Qi
IDogT2JqZWN0LnR5cGUob3V0cHV0LCBJbnNwZWN0b3JDb250cm9sbGVyLmluc3BlY3RlZFdpbmRv
dygpKSk7CisKKyAgICAgICAgLy8gV2UgZG9uJ3QgcGVyZm9ybSBhbnkgc3BlY2lhbCBmb3JtYXR0
aW5nIG9uIHRoZXNlIHR5cGVzLCBzbyB3ZSBqdXN0CisgICAgICAgIC8vIHBhc3MgdGhlbSB0aHJv
dWdoIHRoZSBzaW1wbGUgX2Zvcm1hdHZhbHVlIGZ1bmN0aW9uLgorICAgICAgICB2YXIgdW5kZWNv
cmF0ZWRUeXBlcyA9IHsKKyAgICAgICAgICAgICJ1bmRlZmluZWQiOiAxLAorICAgICAgICAgICAg
Im51bGwiOiAxLAorICAgICAgICAgICAgImJvb2xlYW4iOiAxLAorICAgICAgICAgICAgIm51bWJl
ciI6IDEsCisgICAgICAgICAgICAiZGF0ZSI6IDEsCisgICAgICAgICAgICAiZnVuY3Rpb24iOiAx
LAorICAgICAgICB9OworCisgICAgICAgIHZhciBmb3JtYXR0ZXI7CisgICAgICAgIGlmIChmb3Jj
ZU9iamVjdEZvcm1hdCkKKyAgICAgICAgICAgIGZvcm1hdHRlciA9ICJfZm9ybWF0b2JqZWN0IjsK
KyAgICAgICAgZWxzZSBpZiAodHlwZSBpbiB1bmRlY29yYXRlZFR5cGVzKQorICAgICAgICAgICAg
Zm9ybWF0dGVyID0gIl9mb3JtYXR2YWx1ZSI7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
Zm9ybWF0dGVyID0gIl9mb3JtYXQiICsgdHlwZTsKKyAgICAgICAgICAgIGlmICghKGZvcm1hdHRl
ciBpbiB0aGlzKSkgeworICAgICAgICAgICAgICAgIGZvcm1hdHRlciA9ICJfZm9ybWF0b2JqZWN0
IjsKKyAgICAgICAgICAgICAgICB0eXBlID0gIm9iamVjdCI7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICAgICB2YXIgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4i
KTsKKyAgICAgICAgc3Bhbi5hZGRTdHlsZUNsYXNzKCJjb25zb2xlLWZvcm1hdHRlZC0iICsgdHlw
ZSk7CisgICAgICAgIHRoaXNbZm9ybWF0dGVyXShvdXRwdXQsIHNwYW4pOworICAgICAgICByZXR1
cm4gc3BhbjsKKyAgICB9LAorCisgICAgX2Zvcm1hdHZhbHVlOiBmdW5jdGlvbih2YWwsIGVsZW0p
CisgICAgeworICAgICAgICBlbGVtLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2Rl
KHZhbCkpOworICAgIH0sCisKKyAgICBfZm9ybWF0c3RyaW5nOiBmdW5jdGlvbihzdHIsIGVsZW0p
CisgICAgeworICAgICAgICBlbGVtLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2Rl
KCJcIiIgKyBzdHIgKyAiXCIiKSk7CisgICAgfSwKKworICAgIF9mb3JtYXRyZWdleHA6IGZ1bmN0
aW9uKHJlLCBlbGVtKQorICAgIHsKKyAgICAgICAgdmFyIGZvcm1hdHRlZCA9IFN0cmluZyhyZSku
cmVwbGFjZSgvKFtcXFwvXSkvZywgIlxcJDEiKS5yZXBsYWNlKC9cXChcL1tnaW1dKikkLywgIiQx
Iikuc3Vic3RyaW5nKDEpOworICAgICAgICBlbGVtLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0
ZVRleHROb2RlKGZvcm1hdHRlZCkpOworICAgIH0sCisKKyAgICBfZm9ybWF0YXJyYXk6IGZ1bmN0
aW9uKGFyciwgZWxlbSkKKyAgICB7CisgICAgICAgIGVsZW0uYXBwZW5kQ2hpbGQoZG9jdW1lbnQu
Y3JlYXRlVGV4dE5vZGUoIlsiKSk7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxl
bmd0aDsgKytpKSB7CisgICAgICAgICAgICBlbGVtLmFwcGVuZENoaWxkKHRoaXMuX2Zvcm1hdChh
cnJbaV0pKTsKKyAgICAgICAgICAgIGlmIChpIDwgYXJyLmxlbmd0aCAtIDEpCisgICAgICAgICAg
ICAgICAgZWxlbS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiLCAiKSk7Cisg
ICAgICAgIH0KKyAgICAgICAgZWxlbS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9k
ZSgiXSIpKTsKKyAgICB9LAorCisgICAgX2Zvcm1hdG5vZGU6IGZ1bmN0aW9uKG5vZGUsIGVsZW0p
CisgICAgeworICAgICAgICB2YXIgdHJlZU91dGxpbmUgPSBuZXcgV2ViSW5zcGVjdG9yLkVsZW1l
bnRzVHJlZU91dGxpbmUoKTsKKyAgICAgICAgdHJlZU91dGxpbmUucm9vdERPTU5vZGUgPSBub2Rl
OworICAgICAgICB0cmVlT3V0bGluZS5lbGVtZW50LmFkZFN0eWxlQ2xhc3MoIm91dGxpbmUtZGlz
Y2xvc3VyZSIpOworICAgICAgICBpZiAoIXRyZWVPdXRsaW5lLmNoaWxkcmVuWzBdLmhhc0NoaWxk
cmVuKQorICAgICAgICAgICAgdHJlZU91dGxpbmUuZWxlbWVudC5hZGRTdHlsZUNsYXNzKCJzaW5n
bGUtbm9kZSIpOworICAgICAgICBlbGVtLmFwcGVuZENoaWxkKHRyZWVPdXRsaW5lLmVsZW1lbnQp
OworICAgIH0sCisKKyAgICBfZm9ybWF0b2JqZWN0OiBmdW5jdGlvbihvYmosIGVsZW0pCisgICAg
eworICAgICAgICBlbGVtLmFwcGVuZENoaWxkKG5ldyBXZWJJbnNwZWN0b3IuT2JqZWN0UHJvcGVy
dGllc1NlY3Rpb24ob2JqLCBudWxsLCBudWxsLCBudWxsLCB0cnVlKS5lbGVtZW50KTsKKyAgICB9
LAorCisgICAgX2Zvcm1hdGVycm9yOiBmdW5jdGlvbihvYmosIGVsZW0pCisgICAgeworICAgICAg
ICB2YXIgbWVzc2FnZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7Cisg
ICAgICAgIG1lc3NhZ2VFbGVtZW50LmNsYXNzTmFtZSA9ICJlcnJvci1tZXNzYWdlIjsKKyAgICAg
ICAgbWVzc2FnZUVsZW1lbnQudGV4dENvbnRlbnQgPSBvYmoubmFtZSArICI6ICIgKyBvYmoubWVz
c2FnZTsKKyAgICAgICAgZWxlbS5hcHBlbmRDaGlsZChtZXNzYWdlRWxlbWVudCk7CisKKyAgICAg
ICAgaWYgKG9iai5zb3VyY2VVUkwpIHsKKyAgICAgICAgICAgIHZhciB1cmxFbGVtZW50ID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOworICAgICAgICAgICAgdXJsRWxlbWVudC5jbGFzc05h
bWUgPSAid2Via2l0LWh0bWwtcmVzb3VyY2UtbGluayI7CisgICAgICAgICAgICB1cmxFbGVtZW50
LmhyZWYgPSBvYmouc291cmNlVVJMOworICAgICAgICAgICAgdXJsRWxlbWVudC5saW5lTnVtYmVy
ID0gb2JqLmxpbmU7CisgICAgICAgICAgICB1cmxFbGVtZW50LnByZWZlcnJlZFBhbmVsID0gInNj
cmlwdHMiOworCisgICAgICAgICAgICBpZiAob2JqLmxpbmUgPiAwKQorICAgICAgICAgICAgICAg
IHVybEVsZW1lbnQudGV4dENvbnRlbnQgPSBXZWJJbnNwZWN0b3IuZGlzcGxheU5hbWVGb3JVUkwo
b2JqLnNvdXJjZVVSTCkgKyAiOiIgKyBvYmoubGluZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICB1cmxFbGVtZW50LnRleHRDb250ZW50ID0gV2ViSW5zcGVjdG9yLmRpc3BsYXlO
YW1lRm9yVVJMKG9iai5zb3VyY2VVUkwpOworCisgICAgICAgICAgICBlbGVtLmFwcGVuZENoaWxk
KGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIgKCIpKTsKKyAgICAgICAgICAgIGVsZW0uYXBwZW5k
Q2hpbGQodXJsRWxlbWVudCk7CisgICAgICAgICAgICBlbGVtLmFwcGVuZENoaWxkKGRvY3VtZW50
LmNyZWF0ZVRleHROb2RlKCIpIikpOworICAgICAgICB9CisgICAgfQorfQorCitXZWJJbnNwZWN0
b3IuQ29uc29sZVZpZXcucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5WaWV3LnBy
b3RvdHlwZTsKKworV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlID0gZnVuY3Rpb24oc291cmNl
LCB0eXBlLCBsZXZlbCwgbGluZSwgdXJsLCBncm91cExldmVsLCByZXBlYXRDb3VudCkKK3sKKyAg
ICB0aGlzLnNvdXJjZSA9IHNvdXJjZTsKKyAgICB0aGlzLnR5cGUgPSB0eXBlOworICAgIHRoaXMu
bGV2ZWwgPSBsZXZlbDsKKyAgICB0aGlzLmxpbmUgPSBsaW5lOworICAgIHRoaXMudXJsID0gdXJs
OworICAgIHRoaXMuZ3JvdXBMZXZlbCA9IGdyb3VwTGV2ZWw7CisgICAgdGhpcy5yZXBlYXRDb3Vu
dCA9IHJlcGVhdENvdW50OworICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gNykKKyAgICAgICAg
dGhpcy5zZXRNZXNzYWdlQm9keShBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMs
IDcpKTsKK30KKworV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLnByb3RvdHlwZSA9IHsKKyAg
ICBzZXRNZXNzYWdlQm9keTogZnVuY3Rpb24oYXJncykKKyAgICB7CisgICAgICAgIHN3aXRjaCAo
dGhpcy50eXBlKSB7CisgICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2Fn
ZS5NZXNzYWdlVHlwZS5UcmFjZToKKyAgICAgICAgICAgICAgICB2YXIgc3BhbiA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKKyAgICAgICAgICAgICAgICBzcGFuLmFkZFN0eWxlQ2xh
c3MoImNvbnNvbGUtZm9ybWF0dGVkLXRyYWNlIik7CisgICAgICAgICAgICAgICAgdmFyIHN0YWNr
ID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJncyk7CisgICAgICAgICAgICAgICAgdmFy
IGZ1bmNOYW1lcyA9IHN0YWNrLm1hcChmdW5jdGlvbihmKSB7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBmIHx8IFdlYkluc3BlY3Rvci5VSVN0cmluZygiKGFub255bW91cyBmdW5jdGlvbiki
KTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICBzcGFuLmFwcGVuZENoaWxk
KGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGZ1bmNOYW1lcy5qb2luKCJcbiIpKSk7CisgICAgICAg
ICAgICAgICAgdGhpcy5mb3JtYXR0ZWRNZXNzYWdlID0gc3BhbjsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3Nh
Z2VUeXBlLk9iamVjdDoKKyAgICAgICAgICAgICAgICB0aGlzLmZvcm1hdHRlZE1lc3NhZ2UgPSB0
aGlzLl9mb3JtYXQoWyIlTyIsIGFyZ3NbMF1dKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgdGhpcy5mb3JtYXR0ZWRNZXNzYWdl
ID0gdGhpcy5fZm9ybWF0KGFyZ3MpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisKKyAgICAgICAgLy8gVGhpcyBpcyB1c2VkIGZvciBpbmxpbmUgbWVzc2FnZSBidWJibGVzIGlu
IFNvdXJjZUZyYW1lcywgb3Igb3RoZXIgcGxhaW4tdGV4dCByZXByZXNlbnRhdGlvbnMuCisgICAg
ICAgIHRoaXMubWVzc2FnZSA9IHRoaXMuZm9ybWF0dGVkTWVzc2FnZS50ZXh0Q29udGVudDsKKyAg
ICB9LAorCisgICAgaXNFcnJvck9yV2FybmluZzogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAg
cmV0dXJuICh0aGlzLmxldmVsID09PSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2Fn
ZUxldmVsLldhcm5pbmcgfHwgdGhpcy5sZXZlbCA9PT0gV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNz
YWdlLk1lc3NhZ2VMZXZlbC5FcnJvcik7CisgICAgfSwKKworICAgIF9mb3JtYXQ6IGZ1bmN0aW9u
KHBhcmFtZXRlcnMpCisgICAgeworICAgICAgICB2YXIgZm9ybWF0dGVkUmVzdWx0ID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOworCisgICAgICAgIGlmICghcGFyYW1ldGVycy5sZW5n
dGgpCisgICAgICAgICAgICByZXR1cm4gZm9ybWF0dGVkUmVzdWx0OworCisgICAgICAgIGZ1bmN0
aW9uIGZvcm1hdEZvckNvbnNvbGUob2JqKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
V2ViSW5zcGVjdG9yLmNvbnNvbGUuX2Zvcm1hdChvYmopOworICAgICAgICB9CisKKyAgICAgICAg
ZnVuY3Rpb24gZm9ybWF0QXNPYmplY3RGb3JDb25zb2xlKG9iaikKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5jb25zb2xlLl9mb3JtYXQob2JqLCB0cnVlKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChPYmplY3QudHlwZShwYXJhbWV0ZXJzWzBdLCBJbnNwZWN0
b3JDb250cm9sbGVyLmluc3BlY3RlZFdpbmRvdygpKSA9PT0gInN0cmluZyIpIHsKKyAgICAgICAg
ICAgIHZhciBmb3JtYXR0ZXJzID0ge30KKyAgICAgICAgICAgIGZvciAodmFyIGkgaW4gU3RyaW5n
LnN0YW5kYXJkRm9ybWF0dGVycykKKyAgICAgICAgICAgICAgICBmb3JtYXR0ZXJzW2ldID0gU3Ry
aW5nLnN0YW5kYXJkRm9ybWF0dGVyc1tpXTsKKworICAgICAgICAgICAgLy8gRmlyZWJ1ZyB1c2Vz
ICVvIGZvciBmb3JtYXR0aW5nIG9iamVjdHMuCisgICAgICAgICAgICBmb3JtYXR0ZXJzLm8gPSBm
b3JtYXRGb3JDb25zb2xlOworICAgICAgICAgICAgLy8gRmlyZWJ1ZyBhbGxvd3MgYm90aCAlaSBh
bmQgJWQgZm9yIGZvcm1hdHRpbmcgaW50ZWdlcnMuCisgICAgICAgICAgICBmb3JtYXR0ZXJzLmkg
PSBmb3JtYXR0ZXJzLmQ7CisgICAgICAgICAgICAvLyBTdXBwb3J0ICVPIHRvIGZvcmNlIG9iamVj
dCBmb3JtYXRpbmcsIGluc3RlYWQgb2YgdGhlIHR5cGUtYmFzZWQgJW8gZm9ybWF0dGluZy4KKyAg
ICAgICAgICAgIGZvcm1hdHRlcnMuTyA9IGZvcm1hdEFzT2JqZWN0Rm9yQ29uc29sZTsKKworICAg
ICAgICAgICAgZnVuY3Rpb24gYXBwZW5kKGEsIGIpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgaWYgKCEoYiBpbnN0YW5jZW9mIE5vZGUpKQorICAgICAgICAgICAgICAgICAgICBhLmFw
cGVuZENoaWxkKFdlYkluc3BlY3Rvci5saW5raWZ5U3RyaW5nQXNGcmFnbWVudChiLnRvU3RyaW5n
KCkpKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGEuYXBwZW5k
Q2hpbGQoYik7CisgICAgICAgICAgICAgICAgcmV0dXJuIGE7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIHZhciByZXN1bHQgPSBTdHJpbmcuZm9ybWF0KHBhcmFtZXRlcnNbMF0sIHBhcmFt
ZXRlcnMuc2xpY2UoMSksIGZvcm1hdHRlcnMsIGZvcm1hdHRlZFJlc3VsdCwgYXBwZW5kKTsKKyAg
ICAgICAgICAgIGZvcm1hdHRlZFJlc3VsdCA9IHJlc3VsdC5mb3JtYXR0ZWRSZXN1bHQ7CisgICAg
ICAgICAgICBwYXJhbWV0ZXJzID0gcmVzdWx0LnVudXNlZFN1YnN0aXR1dGlvbnM7CisgICAgICAg
ICAgICBpZiAocGFyYW1ldGVycy5sZW5ndGgpCisgICAgICAgICAgICAgICAgZm9ybWF0dGVkUmVz
dWx0LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIgIikpOworICAgICAgICB9
CisKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJhbWV0ZXJzLmxlbmd0aDsgKytpKSB7
CisgICAgICAgICAgICBpZiAodHlwZW9mIHBhcmFtZXRlcnNbaV0gPT09ICJzdHJpbmciKQorICAg
ICAgICAgICAgICAgIGZvcm1hdHRlZFJlc3VsdC5hcHBlbmRDaGlsZChXZWJJbnNwZWN0b3IubGlu
a2lmeVN0cmluZ0FzRnJhZ21lbnQocGFyYW1ldGVyc1tpXSkpOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIGZvcm1hdHRlZFJlc3VsdC5hcHBlbmRDaGlsZChmb3JtYXRGb3JDb25z
b2xlKHBhcmFtZXRlcnNbaV0pKTsKKworICAgICAgICAgICAgaWYgKGkgPCBwYXJhbWV0ZXJzLmxl
bmd0aCAtIDEpCisgICAgICAgICAgICAgICAgZm9ybWF0dGVkUmVzdWx0LmFwcGVuZENoaWxkKGRv
Y3VtZW50LmNyZWF0ZVRleHROb2RlKCIgIikpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJu
IGZvcm1hdHRlZFJlc3VsdDsKKyAgICB9LAorCisgICAgdG9NZXNzYWdlRWxlbWVudDogZnVuY3Rp
b24oKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMucHJvcGVydGllc1NlY3Rpb24pCisgICAgICAg
ICAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzU2VjdGlvbi5lbGVtZW50OworCisgICAgICAgIHZh
ciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgICAgIGVsZW1l
bnQubWVzc2FnZSA9IHRoaXM7CisgICAgICAgIGVsZW1lbnQuY2xhc3NOYW1lID0gImNvbnNvbGUt
bWVzc2FnZSI7CisKKyAgICAgICAgc3dpdGNoICh0aGlzLnNvdXJjZSkgeworICAgICAgICAgICAg
Y2FzZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVNvdXJjZS5IVE1MOgorICAg
ICAgICAgICAgICAgIGVsZW1lbnQuYWRkU3R5bGVDbGFzcygiY29uc29sZS1odG1sLXNvdXJjZSIp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3Iu
Q29uc29sZU1lc3NhZ2UuTWVzc2FnZVNvdXJjZS5XTUw6CisgICAgICAgICAgICAgICAgZWxlbWVu
dC5hZGRTdHlsZUNsYXNzKCJjb25zb2xlLXdtbC1zb3VyY2UiKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3Nh
Z2VTb3VyY2UuWE1MOgorICAgICAgICAgICAgICAgIGVsZW1lbnQuYWRkU3R5bGVDbGFzcygiY29u
c29sZS14bWwtc291cmNlIik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBj
YXNlIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlU291cmNlLkpTOgorICAgICAg
ICAgICAgICAgIGVsZW1lbnQuYWRkU3R5bGVDbGFzcygiY29uc29sZS1qcy1zb3VyY2UiKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNvbnNv
bGVNZXNzYWdlLk1lc3NhZ2VTb3VyY2UuQ1NTOgorICAgICAgICAgICAgICAgIGVsZW1lbnQuYWRk
U3R5bGVDbGFzcygiY29uc29sZS1jc3Mtc291cmNlIik7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlU291
cmNlLk90aGVyOgorICAgICAgICAgICAgICAgIGVsZW1lbnQuYWRkU3R5bGVDbGFzcygiY29uc29s
ZS1vdGhlci1zb3VyY2UiKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisg
ICAgICAgIHN3aXRjaCAodGhpcy5sZXZlbCkgeworICAgICAgICAgICAgY2FzZSBXZWJJbnNwZWN0
b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZUxldmVsLlRpcDoKKyAgICAgICAgICAgICAgICBlbGVt
ZW50LmFkZFN0eWxlQ2xhc3MoImNvbnNvbGUtdGlwLWxldmVsIik7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNz
YWdlTGV2ZWwuTG9nOgorICAgICAgICAgICAgICAgIGVsZW1lbnQuYWRkU3R5bGVDbGFzcygiY29u
c29sZS1sb2ctbGV2ZWwiKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNh
c2UgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VMZXZlbC5XYXJuaW5nOgorICAg
ICAgICAgICAgICAgIGVsZW1lbnQuYWRkU3R5bGVDbGFzcygiY29uc29sZS13YXJuaW5nLWxldmVs
Iik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rv
ci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlTGV2ZWwuRXJyb3I6CisgICAgICAgICAgICAgICAgZWxl
bWVudC5hZGRTdHlsZUNsYXNzKCJjb25zb2xlLWVycm9yLWxldmVsIik7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICh0aGlzLnR5cGUgPT09
IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5TdGFydEdyb3VwKSB7Cisg
ICAgICAgICAgICBlbGVtZW50LmFkZFN0eWxlQ2xhc3MoImNvbnNvbGUtZ3JvdXAtdGl0bGUiKTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmICh0aGlzLmVsZW1lbnRzVHJlZU91dGxpbmUpIHsKKyAg
ICAgICAgICAgIGVsZW1lbnQuYWRkU3R5bGVDbGFzcygib3V0bGluZS1kaXNjbG9zdXJlIik7Cisg
ICAgICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuZWxlbWVudHNUcmVlT3V0bGluZS5l
bGVtZW50KTsKKyAgICAgICAgICAgIHJldHVybiBlbGVtZW50OworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKHRoaXMucmVwZWF0Q291bnQgPiAxKSB7CisgICAgICAgICAgICB2YXIgbWVzc2FnZVJl
cGVhdENvdW50RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKKyAgICAg
ICAgICAgIG1lc3NhZ2VSZXBlYXRDb3VudEVsZW1lbnQuY2xhc3NOYW1lID0gImJ1YmJsZSI7Cisg
ICAgICAgICAgICBtZXNzYWdlUmVwZWF0Q291bnRFbGVtZW50LnRleHRDb250ZW50ID0gdGhpcy5y
ZXBlYXRDb3VudDsKKworICAgICAgICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZChtZXNzYWdlUmVw
ZWF0Q291bnRFbGVtZW50KTsKKyAgICAgICAgICAgIGVsZW1lbnQuYWRkU3R5bGVDbGFzcygicmVw
ZWF0ZWQtbWVzc2FnZSIpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHRoaXMudXJsICYmIHRo
aXMudXJsICE9PSAidW5kZWZpbmVkIikgeworICAgICAgICAgICAgdmFyIHVybEVsZW1lbnQgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7CisgICAgICAgICAgICB1cmxFbGVtZW50LmNsYXNz
TmFtZSA9ICJjb25zb2xlLW1lc3NhZ2UtdXJsIHdlYmtpdC1odG1sLXJlc291cmNlLWxpbmsiOwor
ICAgICAgICAgICAgdXJsRWxlbWVudC5ocmVmID0gdGhpcy51cmw7CisgICAgICAgICAgICB1cmxF
bGVtZW50LmxpbmVOdW1iZXIgPSB0aGlzLmxpbmU7CisKKyAgICAgICAgICAgIGlmICh0aGlzLnNv
dXJjZSA9PT0gV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VTb3VyY2UuSlMpCisg
ICAgICAgICAgICAgICAgdXJsRWxlbWVudC5wcmVmZXJyZWRQYW5lbCA9ICJzY3JpcHRzIjsKKwor
ICAgICAgICAgICAgaWYgKHRoaXMubGluZSA+IDApCisgICAgICAgICAgICAgICAgdXJsRWxlbWVu
dC50ZXh0Q29udGVudCA9IFdlYkluc3BlY3Rvci5kaXNwbGF5TmFtZUZvclVSTCh0aGlzLnVybCkg
KyAiOiIgKyB0aGlzLmxpbmU7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgdXJs
RWxlbWVudC50ZXh0Q29udGVudCA9IFdlYkluc3BlY3Rvci5kaXNwbGF5TmFtZUZvclVSTCh0aGlz
LnVybCk7CisKKyAgICAgICAgICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQodXJsRWxlbWVudCk7Cisg
ICAgICAgIH0KKworICAgICAgICB2YXIgbWVzc2FnZVRleHRFbGVtZW50ID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgic3BhbiIpOworICAgICAgICBtZXNzYWdlVGV4dEVsZW1lbnQuY2xhc3NOYW1l
ID0gImNvbnNvbGUtbWVzc2FnZS10ZXh0IjsKKyAgICAgICAgbWVzc2FnZVRleHRFbGVtZW50LmFw
cGVuZENoaWxkKHRoaXMuZm9ybWF0dGVkTWVzc2FnZSk7CisgICAgICAgIGVsZW1lbnQuYXBwZW5k
Q2hpbGQobWVzc2FnZVRleHRFbGVtZW50KTsKKworICAgICAgICByZXR1cm4gZWxlbWVudDsKKyAg
ICB9LAorCisgICAgdG9TdHJpbmc6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHZhciBzb3Vy
Y2VTdHJpbmc7CisgICAgICAgIHN3aXRjaCAodGhpcy5zb3VyY2UpIHsKKyAgICAgICAgICAgIGNh
c2UgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VTb3VyY2UuSFRNTDoKKyAgICAg
ICAgICAgICAgICBzb3VyY2VTdHJpbmcgPSAiSFRNTCI7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlU291
cmNlLldNTDoKKyAgICAgICAgICAgICAgICBzb3VyY2VTdHJpbmcgPSAiV01MIjsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNz
YWdlLk1lc3NhZ2VTb3VyY2UuWE1MOgorICAgICAgICAgICAgICAgIHNvdXJjZVN0cmluZyA9ICJY
TUwiOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBXZWJJbnNwZWN0
b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVNvdXJjZS5KUzoKKyAgICAgICAgICAgICAgICBzb3Vy
Y2VTdHJpbmcgPSAiSlMiOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVNvdXJjZS5DU1M6CisgICAgICAg
ICAgICAgICAgc291cmNlU3RyaW5nID0gIkNTUyI7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlU291cmNl
Lk90aGVyOgorICAgICAgICAgICAgICAgIHNvdXJjZVN0cmluZyA9ICJPdGhlciI7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICB2YXIgdHlwZVN0cmluZzsKKyAg
ICAgICAgc3dpdGNoICh0aGlzLnR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9y
LkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBlLkxvZzoKKyAgICAgICAgICAgICAgICB0eXBlU3Ry
aW5nID0gIkxvZyI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFdl
Ykluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5PYmplY3Q6CisgICAgICAgICAg
ICAgICAgdHlwZVN0cmluZyA9ICJPYmplY3QiOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuVHJh
Y2U6CisgICAgICAgICAgICAgICAgdHlwZVN0cmluZyA9ICJUcmFjZSI7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5N
ZXNzYWdlVHlwZS5TdGFydEdyb3VwOgorICAgICAgICAgICAgICAgIHR5cGVTdHJpbmcgPSAiU3Rh
cnQgR3JvdXAiOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBXZWJJ
bnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuRW5kR3JvdXA6CisgICAgICAgICAg
ICAgICAgdHlwZVN0cmluZyA9ICJFbmQgR3JvdXAiOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2YXIgbGV2ZWxTdHJpbmc7CisgICAgICAgIHN3
aXRjaCAodGhpcy5sZXZlbCkgeworICAgICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuQ29uc29s
ZU1lc3NhZ2UuTWVzc2FnZUxldmVsLlRpcDoKKyAgICAgICAgICAgICAgICBsZXZlbFN0cmluZyA9
ICJUaXAiOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBXZWJJbnNw
ZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZUxldmVsLkxvZzoKKyAgICAgICAgICAgICAgICBs
ZXZlbFN0cmluZyA9ICJMb2ciOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
Y2FzZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZUxldmVsLldhcm5pbmc6Cisg
ICAgICAgICAgICAgICAgbGV2ZWxTdHJpbmcgPSAiV2FybmluZyI7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNz
YWdlTGV2ZWwuRXJyb3I6CisgICAgICAgICAgICAgICAgbGV2ZWxTdHJpbmcgPSAiRXJyb3IiOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHNvdXJj
ZVN0cmluZyArICIgIiArIHR5cGVTdHJpbmcgKyAiICIgKyBsZXZlbFN0cmluZyArICI6ICIgKyB0
aGlzLmZvcm1hdHRlZE1lc3NhZ2UudGV4dENvbnRlbnQgKyAiXG4iICsgdGhpcy51cmwgKyAiIGxp
bmUgIiArIHRoaXMubGluZTsKKyAgICB9LAorCisgICAgaXNFcXVhbDogZnVuY3Rpb24obXNnLCBk
aXNyZWd1YXJkR3JvdXApCisgICAgeworICAgICAgICBpZiAoIW1zZykKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgICAgICB2YXIgcmV0ID0gKHRoaXMuc291cmNlID09IG1zZy5zb3Vy
Y2UpCisgICAgICAgICAgICAmJiAodGhpcy50eXBlID09IG1zZy50eXBlKQorICAgICAgICAgICAg
JiYgKHRoaXMubGV2ZWwgPT0gbXNnLmxldmVsKQorICAgICAgICAgICAgJiYgKHRoaXMubGluZSA9
PSBtc2cubGluZSkKKyAgICAgICAgICAgICYmICh0aGlzLnVybCA9PSBtc2cudXJsKQorICAgICAg
ICAgICAgJiYgKHRoaXMubWVzc2FnZSA9PSBtc2cubWVzc2FnZSk7CisKKyAgICAgICAgcmV0dXJu
IChkaXNyZWd1YXJkR3JvdXAgPyByZXQgOiAocmV0ICYmICh0aGlzLmdyb3VwTGV2ZWwgPT0gbXNn
Lmdyb3VwTGV2ZWwpKSk7CisgICAgfQorfQorCisvLyBOb3RlOiBLZWVwIHRoZXNlIGNvbnN0YW50
cyBpbiBzeW5jIHdpdGggdGhlIG9uZXMgaW4gQ29uc29sZS5oCitXZWJJbnNwZWN0b3IuQ29uc29s
ZU1lc3NhZ2UuTWVzc2FnZVNvdXJjZSA9IHsKKyAgICBIVE1MOiAwLAorICAgIFdNTDogMSwKKyAg
ICBYTUw6IDIsCisgICAgSlM6IDMsCisgICAgQ1NTOiA0LAorICAgIE90aGVyOiA1Cit9CisKK1dl
Ykluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZSA9IHsKKyAgICBMb2c6IDAsCisg
ICAgT2JqZWN0OiAxLAorICAgIFRyYWNlOiAyLAorICAgIFN0YXJ0R3JvdXA6IDMsCisgICAgRW5k
R3JvdXA6IDQKK30KKworV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VMZXZlbCA9
IHsKKyAgICBUaXA6IDAsCisgICAgTG9nOiAxLAorICAgIFdhcm5pbmc6IDIsCisgICAgRXJyb3I6
IDMKK30KKworV2ViSW5zcGVjdG9yLkNvbnNvbGVDb21tYW5kID0gZnVuY3Rpb24oY29tbWFuZCkK
K3sKKyAgICB0aGlzLmNvbW1hbmQgPSBjb21tYW5kOworfQorCitXZWJJbnNwZWN0b3IuQ29uc29s
ZUNvbW1hbmQucHJvdG90eXBlID0geworICAgIHRvTWVzc2FnZUVsZW1lbnQ6IGZ1bmN0aW9uKCkK
KyAgICB7CisgICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2
Iik7CisgICAgICAgIGVsZW1lbnQuY29tbWFuZCA9IHRoaXM7CisgICAgICAgIGVsZW1lbnQuY2xh
c3NOYW1lID0gImNvbnNvbGUtdXNlci1jb21tYW5kIjsKKworICAgICAgICB2YXIgY29tbWFuZFRl
eHRFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOworICAgICAgICBjb21t
YW5kVGV4dEVsZW1lbnQuY2xhc3NOYW1lID0gImNvbnNvbGUtbWVzc2FnZS10ZXh0IjsKKyAgICAg
ICAgY29tbWFuZFRleHRFbGVtZW50LnRleHRDb250ZW50ID0gdGhpcy5jb21tYW5kOworICAgICAg
ICBlbGVtZW50LmFwcGVuZENoaWxkKGNvbW1hbmRUZXh0RWxlbWVudCk7CisKKyAgICAgICAgcmV0
dXJuIGVsZW1lbnQ7CisgICAgfQorfQorCitXZWJJbnNwZWN0b3IuQ29uc29sZUNvbW1hbmRSZXN1
bHQgPSBmdW5jdGlvbihyZXN1bHQsIGV4Y2VwdGlvbiwgb3JpZ2luYXRpbmdDb21tYW5kKQorewor
ICAgIHZhciBsZXZlbCA9IChleGNlcHRpb24gPyBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2Uu
TWVzc2FnZUxldmVsLkVycm9yIDogV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VM
ZXZlbC5Mb2cpOworICAgIHZhciBtZXNzYWdlID0gKGV4Y2VwdGlvbiA/IFN0cmluZyhyZXN1bHQp
IDogcmVzdWx0KTsKKyAgICB2YXIgbGluZSA9IChleGNlcHRpb24gPyByZXN1bHQubGluZSA6IC0x
KTsKKyAgICB2YXIgdXJsID0gKGV4Y2VwdGlvbiA/IHJlc3VsdC5zb3VyY2VVUkwgOiBudWxsKTsK
KworICAgIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5jYWxsKHRoaXMsIFdlYkluc3BlY3Rv
ci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlU291cmNlLkpTLCBXZWJJbnNwZWN0b3IuQ29uc29sZU1l
c3NhZ2UuTWVzc2FnZVR5cGUuTG9nLCBsZXZlbCwgbGluZSwgdXJsLCBudWxsLCAxLCBtZXNzYWdl
KTsKKworICAgIHRoaXMub3JpZ2luYXRpbmdDb21tYW5kID0gb3JpZ2luYXRpbmdDb21tYW5kOwor
fQorCitXZWJJbnNwZWN0b3IuQ29uc29sZUNvbW1hbmRSZXN1bHQucHJvdG90eXBlID0geworICAg
IHRvTWVzc2FnZUVsZW1lbnQ6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHZhciBlbGVtZW50
ID0gV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLnByb3RvdHlwZS50b01lc3NhZ2VFbGVtZW50
LmNhbGwodGhpcyk7CisgICAgICAgIGVsZW1lbnQuYWRkU3R5bGVDbGFzcygiY29uc29sZS11c2Vy
LWNvbW1hbmQtcmVzdWx0Iik7CisgICAgICAgIHJldHVybiBlbGVtZW50OworICAgIH0KK30KKwor
V2ViSW5zcGVjdG9yLkNvbnNvbGVDb21tYW5kUmVzdWx0LnByb3RvdHlwZS5fX3Byb3RvX18gPSBX
ZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UucHJvdG90eXBlOworCitXZWJJbnNwZWN0b3IuQ29u
c29sZUdyb3VwID0gZnVuY3Rpb24ocGFyZW50R3JvdXAsIGxldmVsKQoreworICAgIHRoaXMucGFy
ZW50R3JvdXAgPSBwYXJlbnRHcm91cDsKKyAgICB0aGlzLmxldmVsID0gbGV2ZWw7CisKKyAgICB2
YXIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAgIGVsZW1lbnQu
Y2xhc3NOYW1lID0gImNvbnNvbGUtZ3JvdXAiOworICAgIGVsZW1lbnQuZ3JvdXAgPSB0aGlzOwor
ICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7CisKKyAgICB2YXIgbWVzc2FnZXNFbGVtZW50ID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgbWVzc2FnZXNFbGVtZW50LmNsYXNz
TmFtZSA9ICJjb25zb2xlLWdyb3VwLW1lc3NhZ2VzIjsKKyAgICBlbGVtZW50LmFwcGVuZENoaWxk
KG1lc3NhZ2VzRWxlbWVudCk7CisgICAgdGhpcy5tZXNzYWdlc0VsZW1lbnQgPSBtZXNzYWdlc0Vs
ZW1lbnQ7Cit9CisKK1dlYkluc3BlY3Rvci5Db25zb2xlR3JvdXAucHJvdG90eXBlID0geworICAg
IGFkZE1lc3NhZ2U6IGZ1bmN0aW9uKG1zZykKKyAgICB7CisgICAgICAgIHZhciBlbGVtZW50ID0g
bXNnLnRvTWVzc2FnZUVsZW1lbnQoKTsKKyAgICAgICAgCisgICAgICAgIGlmIChtc2cudHlwZSA9
PT0gV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBlLlN0YXJ0R3JvdXApIHsK
KyAgICAgICAgICAgIHRoaXMubWVzc2FnZXNFbGVtZW50LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3Jl
KGVsZW1lbnQsIHRoaXMubWVzc2FnZXNFbGVtZW50KTsKKyAgICAgICAgICAgIGVsZW1lbnQuYWRk
RXZlbnRMaXN0ZW5lcigiY2xpY2siLCB0aGlzLl90aXRsZUNsaWNrZWQuYmluZCh0aGlzKSwgdHJ1
ZSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgdGhpcy5tZXNzYWdlc0VsZW1lbnQuYXBw
ZW5kQ2hpbGQoZWxlbWVudCk7CisKKyAgICAgICAgaWYgKGVsZW1lbnQucHJldmlvdXNTaWJsaW5n
ICYmIG1zZy5vcmlnaW5hdGluZ0NvbW1hbmQgJiYgZWxlbWVudC5wcmV2aW91c1NpYmxpbmcuY29t
bWFuZCA9PT0gbXNnLm9yaWdpbmF0aW5nQ29tbWFuZCkKKyAgICAgICAgICAgIGVsZW1lbnQucHJl
dmlvdXNTaWJsaW5nLmFkZFN0eWxlQ2xhc3MoImNvbnNvbGUtYWRqYWNlbnQtdXNlci1jb21tYW5k
LXJlc3VsdCIpOworICAgIH0sCisKKyAgICBfdGl0bGVDbGlja2VkOiBmdW5jdGlvbihldmVudCkK
KyAgICB7CisgICAgICAgIHZhciBncm91cFRpdGxlRWxlbWVudCA9IGV2ZW50LnRhcmdldC5lbmNs
b3NpbmdOb2RlT3JTZWxmV2l0aENsYXNzKCJjb25zb2xlLWdyb3VwLXRpdGxlIik7CisgICAgICAg
IGlmIChncm91cFRpdGxlRWxlbWVudCkgeworICAgICAgICAgICAgdmFyIGdyb3VwRWxlbWVudCA9
IGdyb3VwVGl0bGVFbGVtZW50LmVuY2xvc2luZ05vZGVPclNlbGZXaXRoQ2xhc3MoImNvbnNvbGUt
Z3JvdXAiKTsKKyAgICAgICAgICAgIGlmIChncm91cEVsZW1lbnQpCisgICAgICAgICAgICAgICAg
aWYgKGdyb3VwRWxlbWVudC5oYXNTdHlsZUNsYXNzKCJjb2xsYXBzZWQiKSkKKyAgICAgICAgICAg
ICAgICAgICAgZ3JvdXBFbGVtZW50LnJlbW92ZVN0eWxlQ2xhc3MoImNvbGxhcHNlZCIpOworICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgZ3JvdXBFbGVtZW50LmFkZFN0
eWxlQ2xhc3MoImNvbGxhcHNlZCIpOworICAgICAgICAgICAgZ3JvdXBUaXRsZUVsZW1lbnQuc2Ny
b2xsSW50b1ZpZXdJZk5lZWRlZCh0cnVlKTsKKyAgICAgICAgfQorCisgICAgICAgIGV2ZW50LnN0
b3BQcm9wYWdhdGlvbigpOworICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOworICAgIH0K
K30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9EcmF3ZXIuanMgYi9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRHJhd2VyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmE5MDFjZjcKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvRHJhd2VyLmpzCkBAIC0wLDAgKzEsMTk3IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDkgSm9zZXBoIFBlY29yYXJvCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAq
IDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBu
b3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworV2ViSW5zcGVjdG9yLkRyYXdlciA9
IGZ1bmN0aW9uKCkKK3sKKyAgICBXZWJJbnNwZWN0b3IuVmlldy5jYWxsKHRoaXMsIGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJkcmF3ZXIiKSk7CisKKyAgICB0aGlzLm1haW5TdGF0dXNCYXIgPSBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgibWFpbi1zdGF0dXMtYmFyIik7CisgICAgdGhpcy5tYWlu
U3RhdHVzQmFyLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsIHRoaXMuX3N0YXJ0U3RhdHVz
QmFyRHJhZ2dpbmcuYmluZCh0aGlzKSwgdHJ1ZSk7CisgICAgdGhpcy52aWV3U3RhdHVzQmFyID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm90aGVyLWRyYXdlci1zdGF0dXMtYmFyLWl0ZW1zIik7
Cit9CisKK1dlYkluc3BlY3Rvci5EcmF3ZXIucHJvdG90eXBlID0geworICAgIGdldCB2aXNpYmxl
VmlldygpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fdmlzaWJsZVZpZXc7CisgICAgfSwK
KworICAgIHNldCB2aXNpYmxlVmlldyh4KQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuX3Zpc2li
bGVWaWV3ID09PSB4KSB7CisgICAgICAgICAgICB0aGlzLnZpc2libGUgPSAhdGhpcy52aXNpYmxl
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgdmFyIGZpcnN0VGlt
ZSA9ICF0aGlzLl92aXNpYmxlVmlldzsKKyAgICAgICAgaWYgKHRoaXMuX3Zpc2libGVWaWV3KQor
ICAgICAgICAgICAgdGhpcy5fdmlzaWJsZVZpZXcuaGlkZSgpOworCisgICAgICAgIHRoaXMuX3Zp
c2libGVWaWV3ID0geDsKKworICAgICAgICBpZiAoeCkgeworICAgICAgICAgICAgdGhpcy5fc2Fm
ZWx5UmVtb3ZlQ2hpbGRyZW4oKTsKKyAgICAgICAgICAgIHRoaXMudmlld1N0YXR1c0Jhci5yZW1v
dmVDaGlsZHJlbigpOyAvLyBvcHRpbWl6ZSB0aGlzPyBjYWxsIG9sZC5kZXRhY2goKQorICAgICAg
ICAgICAgeC5hdHRhY2godGhpcy5lbGVtZW50LCB0aGlzLnZpZXdTdGF0dXNCYXIpOworICAgICAg
ICAgICAgeC5zaG93KCk7CisgICAgICAgICAgICBpZiAoIWZpcnN0VGltZSAmJiAhdGhpcy52aXNp
YmxlKQorICAgICAgICAgICAgICAgIHRoaXMudmlzaWJsZSA9IHRydWU7CisgICAgICAgIH0KKyAg
ICB9LAorCisgICAgc2hvdzogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuX2Fu
aW1hdGluZyB8fCB0aGlzLnZpc2libGUpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
aWYgKHRoaXMudmlzaWJsZVZpZXcpCisgICAgICAgICAgICB0aGlzLnZpc2libGVWaWV3LnNob3co
KTsKKworICAgICAgICBXZWJJbnNwZWN0b3IuVmlldy5wcm90b3R5cGUuc2hvdy5jYWxsKHRoaXMp
OworCisgICAgICAgIHRoaXMuX2FuaW1hdGluZyA9IHRydWU7CisKKyAgICAgICAgZG9jdW1lbnQu
Ym9keS5hZGRTdHlsZUNsYXNzKCJkcmF3ZXItdmlzaWJsZSIpOworCisgICAgICAgIHZhciBhbmNo
b3JlZEl0ZW1zID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFuY2hvcmVkLXN0YXR1cy1iYXIt
aXRlbXMiKTsKKworICAgICAgICB2YXIgYW5pbWF0aW9ucyA9IFsKKyAgICAgICAgICAgIHtlbGVt
ZW50OiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibWFpbiIpLCBlbmQ6IHtib3R0b206IHRoaXMu
ZWxlbWVudC5vZmZzZXRIZWlnaHR9fSwKKyAgICAgICAgICAgIHtlbGVtZW50OiBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgibWFpbi1zdGF0dXMtYmFyIiksIHN0YXJ0OiB7InBhZGRpbmctbGVmdCI6
IGFuY2hvcmVkSXRlbXMub2Zmc2V0V2lkdGggLSAxfSwgZW5kOiB7InBhZGRpbmctbGVmdCI6IDB9
fSwKKyAgICAgICAgICAgIHtlbGVtZW50OiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgib3RoZXIt
ZHJhd2VyLXN0YXR1cy1iYXItaXRlbXMiKSwgc3RhcnQ6IHtvcGFjaXR5OiAwfSwgZW5kOiB7b3Bh
Y2l0eTogMX19CisgICAgICAgIF07CisKKyAgICAgICAgdmFyIGNvbnNvbGVTdGF0dXNCYXIgPSBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZHJhd2VyLXN0YXR1cy1iYXIiKTsKKyAgICAgICAgY29u
c29sZVN0YXR1c0Jhci5pbnNlcnRCZWZvcmUoYW5jaG9yZWRJdGVtcywgY29uc29sZVN0YXR1c0Jh
ci5maXJzdENoaWxkKTsKKworICAgICAgICBmdW5jdGlvbiBhbmltYXRpb25GaW5pc2hlZCgpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGlmICgidXBkYXRlU3RhdHVzQmFySXRlbXMiIGluIFdlYklu
c3BlY3Rvci5jdXJyZW50UGFuZWwpCisgICAgICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmN1cnJl
bnRQYW5lbC51cGRhdGVTdGF0dXNCYXJJdGVtcygpOworICAgICAgICAgICAgaWYgKHRoaXMudmlz
aWJsZVZpZXcuYWZ0ZXJTaG93KQorICAgICAgICAgICAgICAgIHRoaXMudmlzaWJsZVZpZXcuYWZ0
ZXJTaG93KCk7CisgICAgICAgICAgICBkZWxldGUgdGhpcy5fYW5pbWF0aW5nOworICAgICAgICB9
CisKKyAgICAgICAgV2ViSW5zcGVjdG9yLmFuaW1hdGVTdHlsZShhbmltYXRpb25zLCB3aW5kb3cu
ZXZlbnQgJiYgd2luZG93LmV2ZW50LnNoaWZ0S2V5ID8gMjAwMCA6IDI1MCwgYW5pbWF0aW9uRmlu
aXNoZWQuYmluZCh0aGlzKSk7CisgICAgfSwKKworICAgIGhpZGU6IGZ1bmN0aW9uKCkKKyAgICB7
CisgICAgICAgIGlmICh0aGlzLl9hbmltYXRpbmcgfHwgIXRoaXMudmlzaWJsZSkKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICBXZWJJbnNwZWN0b3IuVmlldy5wcm90b3R5cGUuaGlkZS5j
YWxsKHRoaXMpOworICAgICAgICAKKyAgICAgICAgaWYgKHRoaXMudmlzaWJsZVZpZXcpCisgICAg
ICAgICAgICB0aGlzLnZpc2libGVWaWV3LmhpZGUoKTsKKworICAgICAgICB0aGlzLl9hbmltYXRp
bmcgPSB0cnVlOworCisgICAgICAgIGlmICh0aGlzLmVsZW1lbnQgPT09IFdlYkluc3BlY3Rvci5j
dXJyZW50Rm9jdXNFbGVtZW50IHx8IHRoaXMuZWxlbWVudC5pc0FuY2VzdG9yKFdlYkluc3BlY3Rv
ci5jdXJyZW50Rm9jdXNFbGVtZW50KSkKKyAgICAgICAgICAgIFdlYkluc3BlY3Rvci5jdXJyZW50
Rm9jdXNFbGVtZW50ID0gV2ViSW5zcGVjdG9yLnByZXZpb3VzRm9jdXNFbGVtZW50OworCisgICAg
ICAgIHZhciBhbmNob3JlZEl0ZW1zID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFuY2hvcmVk
LXN0YXR1cy1iYXItaXRlbXMiKTsKKworICAgICAgICAvLyBUZW1wb3JhbGx5IHNldCBwcm9wZXJ0
aWVzIGFuZCBjbGFzc2VzIHRvIG1pbWljIHRoZSBwb3N0LWFuaW1hdGlvbiB2YWx1ZXMgc28gcGFu
ZWxzCisgICAgICAgIC8vIGxpa2UgRWxlbWVudHMgaW4gdGhlaXIgdXBkYXRlU3RhdHVzQmFySXRl
bXMgY2FsbCB3aWxsIHNpemUgdGhpbmdzIHRvIGZpdCB0aGUgZmluYWwgbG9jYXRpb24uCisgICAg
ICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtYWluLXN0YXR1cy1iYXIiKS5zdHlsZS5zZXRQ
cm9wZXJ0eSgicGFkZGluZy1sZWZ0IiwgKGFuY2hvcmVkSXRlbXMub2Zmc2V0V2lkdGggLSAxKSAr
ICJweCIpOworICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZVN0eWxlQ2xhc3MoImRyYXdlci12
aXNpYmxlIik7CisgICAgICAgIGlmICgidXBkYXRlU3RhdHVzQmFySXRlbXMiIGluIFdlYkluc3Bl
Y3Rvci5jdXJyZW50UGFuZWwpCisgICAgICAgICAgICBXZWJJbnNwZWN0b3IuY3VycmVudFBhbmVs
LnVwZGF0ZVN0YXR1c0Jhckl0ZW1zKCk7CisgICAgICAgIGRvY3VtZW50LmJvZHkuYWRkU3R5bGVD
bGFzcygiZHJhd2VyLXZpc2libGUiKTsKKworICAgICAgICB2YXIgYW5pbWF0aW9ucyA9IFsKKyAg
ICAgICAgICAgIHtlbGVtZW50OiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibWFpbiIpLCBlbmQ6
IHtib3R0b206IDB9fSwKKyAgICAgICAgICAgIHtlbGVtZW50OiBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgibWFpbi1zdGF0dXMtYmFyIiksIHN0YXJ0OiB7InBhZGRpbmctbGVmdCI6IDB9LCBlbmQ6
IHsicGFkZGluZy1sZWZ0IjogYW5jaG9yZWRJdGVtcy5vZmZzZXRXaWR0aCAtIDF9fSwKKyAgICAg
ICAgICAgIHtlbGVtZW50OiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgib3RoZXItZHJhd2VyLXN0
YXR1cy1iYXItaXRlbXMiKSwgc3RhcnQ6IHtvcGFjaXR5OiAxfSwgZW5kOiB7b3BhY2l0eTogMH19
CisgICAgICAgIF07CisKKyAgICAgICAgZnVuY3Rpb24gYW5pbWF0aW9uRmluaXNoZWQoKQorICAg
ICAgICB7CisgICAgICAgICAgICB2YXIgbWFpblN0YXR1c0JhciA9IGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCJtYWluLXN0YXR1cy1iYXIiKTsKKyAgICAgICAgICAgIG1haW5TdGF0dXNCYXIuaW5z
ZXJ0QmVmb3JlKGFuY2hvcmVkSXRlbXMsIG1haW5TdGF0dXNCYXIuZmlyc3RDaGlsZCk7CisgICAg
ICAgICAgICBtYWluU3RhdHVzQmFyLnN0eWxlLnJlbW92ZVByb3BlcnR5KCJwYWRkaW5nLWxlZnQi
KTsKKyAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlU3R5bGVDbGFzcygiZHJhd2VyLXZp
c2libGUiKTsKKyAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9hbmltYXRpbmc7CisgICAgICAgIH0K
KworICAgICAgICBXZWJJbnNwZWN0b3IuYW5pbWF0ZVN0eWxlKGFuaW1hdGlvbnMsIHdpbmRvdy5l
dmVudCAmJiB3aW5kb3cuZXZlbnQuc2hpZnRLZXkgPyAyMDAwIDogMjUwLCBhbmltYXRpb25GaW5p
c2hlZC5iaW5kKHRoaXMpKTsKKyAgICB9LAorCisgICAgX3NhZmVseVJlbW92ZUNoaWxkcmVuOiBm
dW5jdGlvbigpCisgICAgeworICAgICAgICB2YXIgY2hpbGQgPSB0aGlzLmVsZW1lbnQuZmlyc3RD
aGlsZDsKKyAgICAgICAgd2hpbGUgKGNoaWxkKSB7CisgICAgICAgICAgICBpZiAoY2hpbGQuaWQg
IT09ICJkcmF3ZXItc3RhdHVzLWJhciIpIHsKKyAgICAgICAgICAgICAgICB2YXIgbW92ZVRvID0g
Y2hpbGQubmV4dFNpYmxpbmc7CisgICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50LnJlbW92ZUNo
aWxkKGNoaWxkKTsKKyAgICAgICAgICAgICAgICBjaGlsZCA9IG1vdmVUbzsKKyAgICAgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgICAgIGNoaWxkID0gY2hpbGQubmV4dFNpYmxpbmc7CisgICAg
ICAgIH0KKyAgICB9LAorCisgICAgX3N0YXJ0U3RhdHVzQmFyRHJhZ2dpbmc6IGZ1bmN0aW9uKGV2
ZW50KQorICAgIHsKKyAgICAgICAgaWYgKCF0aGlzLnZpc2libGUgfHwgZXZlbnQudGFyZ2V0ICE9
PSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibWFpbi1zdGF0dXMtYmFyIikpCisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgV2ViSW5zcGVjdG9yLmVsZW1lbnREcmFnU3RhcnQoZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoIm1haW4tc3RhdHVzLWJhciIpLCB0aGlzLl9zdGF0dXNCYXJEcmFn
Z2luZy5iaW5kKHRoaXMpLCB0aGlzLl9lbmRTdGF0dXNCYXJEcmFnZ2luZy5iaW5kKHRoaXMpLCBl
dmVudCwgInJvdy1yZXNpemUiKTsKKworICAgICAgICB0aGlzLl9zdGF0dXNCYXJEcmFnT2Zmc2V0
ID0gZXZlbnQucGFnZVkgLSB0aGlzLmVsZW1lbnQudG90YWxPZmZzZXRUb3A7CisKKyAgICAgICAg
ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7CisgICAgfSwKKworICAgIF9zdGF0dXNCYXJEcmFnZ2lu
ZzogZnVuY3Rpb24oZXZlbnQpCisgICAgeworICAgICAgICB2YXIgbWFpbkVsZW1lbnQgPSBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgibWFpbiIpOworCisgICAgICAgIHZhciBoZWlnaHQgPSB3aW5k
b3cuaW5uZXJIZWlnaHQgLSBldmVudC5wYWdlWSArIHRoaXMuX3N0YXR1c0JhckRyYWdPZmZzZXQ7
CisgICAgICAgIGhlaWdodCA9IE51bWJlci5jb25zdHJhaW4oaGVpZ2h0LCBQcmVmZXJlbmNlcy5t
aW5Db25zb2xlSGVpZ2h0LCB3aW5kb3cuaW5uZXJIZWlnaHQgLSBtYWluRWxlbWVudC50b3RhbE9m
ZnNldFRvcCAtIFByZWZlcmVuY2VzLm1pbkNvbnNvbGVIZWlnaHQpOworCisgICAgICAgIG1haW5F
bGVtZW50LnN0eWxlLmJvdHRvbSA9IGhlaWdodCArICJweCI7CisgICAgICAgIHRoaXMuZWxlbWVu
dC5zdHlsZS5oZWlnaHQgPSBoZWlnaHQgKyAicHgiOworCisgICAgICAgIGV2ZW50LnByZXZlbnRE
ZWZhdWx0KCk7CisgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOworICAgIH0sCisKKyAg
ICBfZW5kU3RhdHVzQmFyRHJhZ2dpbmc6IGZ1bmN0aW9uKGV2ZW50KQorICAgIHsKKyAgICAgICAg
V2ViSW5zcGVjdG9yLmVsZW1lbnREcmFnRW5kKGV2ZW50KTsKKworICAgICAgICBkZWxldGUgdGhp
cy5fc3RhdHVzQmFyRHJhZ09mZnNldDsKKworICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24o
KTsKKyAgICB9Cit9CisKK1dlYkluc3BlY3Rvci5EcmF3ZXIucHJvdG90eXBlLl9fcHJvdG9fXyA9
IFdlYkluc3BlY3Rvci5WaWV3LnByb3RvdHlwZTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9FbGVtZW50c1BhbmVsLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL0VsZW1lbnRzUGFuZWwuanMKaW5kZXggMTcyNDU2NC4uYWRiYzJhZSAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0VsZW1lbnRzUGFuZWwuanMKKysrIGIvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0VsZW1lbnRzUGFuZWwuanMKQEAgLTEsNiArMSw3IEBACiAv
KgogICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggTWF0dCBMaWxlayA8d2Via2l0QG1hdHRsaWxl
ay5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSm9zZXBoIFBlY29yYXJvCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExNCw2ICsxMTUsNyBAQCBXZWJJbnNwZWN0b3IuRWxl
bWVudHNQYW5lbCA9IGZ1bmN0aW9uKCkKICAgICB0aGlzLl9jb250ZW50TG9hZGVkRXZlbnRMaXN0
ZW5lciA9IEluc3BlY3RvckNvbnRyb2xsZXIud3JhcENhbGxiYWNrKHRoaXMuX2NvbnRlbnRMb2Fk
ZWQuYmluZCh0aGlzKSk7CiAKICAgICB0aGlzLnN0eWxlc2hlZXQgPSBudWxsOworICAgIHRoaXMu
c3R5bGVzID0ge307CiAKICAgICB0aGlzLnJlc2V0KCk7CiB9CkBAIC01MTksNiArNTIxLDEyMSBA
QCBXZWJJbnNwZWN0b3IuRWxlbWVudHNQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICB0
aGlzLnVwZGF0ZU11dGF0aW9uRXZlbnRMaXN0ZW5lcnMod2luZG93KTsKICAgICB9LAogCisgICAg
cmVuYW1lU2VsZWN0b3I6IGZ1bmN0aW9uKG9sZElkZW50aWZpZXIsIG5ld0lkZW50aWZpZXIsIG9s
ZFNlbGVjdG9yLCBuZXdTZWxlY3RvcikKKyAgICB7CisgICAgICAgIC8vIFRPRE86IEltcGxlbWVu
dCBTaGlmdGluZyB0aGUgb2xkU2VsZWN0b3IsIGFuZCBpdHMgY29udGVudHMgdG8gYSBuZXdTZWxl
Y3RvcgorICAgIH0sCisKKyAgICBhZGRTdHlsZUNoYW5nZTogZnVuY3Rpb24oaWRlbnRpZmllciwg
c3R5bGUsIHByb3BlcnR5KQorICAgIHsKKyAgICAgICAgaWYgKCFzdHlsZS5wYXJlbnRSdWxlKQor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHZhciBzZWxlY3RvciA9IHN0eWxlLnBhcmVu
dFJ1bGUuc2VsZWN0b3JUZXh0OworICAgICAgICBpZiAoIXRoaXMuc3R5bGVzW2lkZW50aWZpZXJd
KQorICAgICAgICAgICAgdGhpcy5zdHlsZXNbaWRlbnRpZmllcl0gPSB7fTsKKworICAgICAgICBp
ZiAoIXRoaXMuc3R5bGVzW2lkZW50aWZpZXJdW3NlbGVjdG9yXSkKKyAgICAgICAgICAgIHRoaXMu
c3R5bGVzW2lkZW50aWZpZXJdW3NlbGVjdG9yXSA9IHt9OworCisgICAgICAgIGlmICghdGhpcy5z
dHlsZXNbaWRlbnRpZmllcl1bc2VsZWN0b3JdW3Byb3BlcnR5XSkKKyAgICAgICAgICAgIFdlYklu
c3BlY3Rvci5zdHlsZUNoYW5nZXMgKz0gMTsKKworICAgICAgICB0aGlzLnN0eWxlc1tpZGVudGlm
aWVyXVtzZWxlY3Rvcl1bcHJvcGVydHldID0gc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShwcm9wZXJ0
eSk7CisgICAgfSwKKworICAgIHJlbW92ZVN0eWxlQ2hhbmdlOiBmdW5jdGlvbihpZGVudGlmaWVy
LCBzdHlsZSwgcHJvcGVydHkpCisgICAgeworICAgICAgICBpZiAoIXN0eWxlLnBhcmVudFJ1bGUp
CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdmFyIHNlbGVjdG9yID0gc3R5bGUucGFy
ZW50UnVsZS5zZWxlY3RvclRleHQ7CisgICAgICAgIGlmICghdGhpcy5zdHlsZXNbaWRlbnRpZmll
cl0gfHwgIXRoaXMuc3R5bGVzW2lkZW50aWZpZXJdW3NlbGVjdG9yXSkKKyAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICBpZiAodGhpcy5zdHlsZXNbaWRlbnRpZmllcl1bc2VsZWN0b3JdW3By
b3BlcnR5XSkgeworICAgICAgICAgICAgZGVsZXRlIHRoaXMuc3R5bGVzW2lkZW50aWZpZXJdW3Nl
bGVjdG9yXVtwcm9wZXJ0eV07CisgICAgICAgICAgICBXZWJJbnNwZWN0b3Iuc3R5bGVDaGFuZ2Vz
IC09IDE7CisgICAgICAgIH0KKyAgICB9LAorCisgICAgZ2VuZXJhdGVTdHlsZXNoZWV0OiBmdW5j
dGlvbigpCisgICAgeworICAgICAgICBpZiAoIVdlYkluc3BlY3Rvci5zdHlsZUNoYW5nZXMpCisg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgLy8gTWVyZ2UgRG93biB0byBKdXN0IFNlbGVj
dG9ycworICAgICAgICB2YXIgbWVyZ2VkU2VsZWN0b3JzID0ge307CisgICAgICAgIGZvciAodmFy
IGlkZW50aWZpZXIgaW4gdGhpcy5zdHlsZXMpIHsKKyAgICAgICAgICAgIGZvciAodmFyIHNlbGVj
dG9yIGluIHRoaXMuc3R5bGVzW2lkZW50aWZpZXJdKSB7CisgICAgICAgICAgICAgICAgaWYgKCFt
ZXJnZWRTZWxlY3RvcnNbc2VsZWN0b3JdKQorICAgICAgICAgICAgICAgICAgICBtZXJnZWRTZWxl
Y3RvcnNbc2VsZWN0b3JdID0gdGhpcy5zdHlsZXNbaWRlbnRpZmllcl1bc2VsZWN0b3JdOworICAg
ICAgICAgICAgICAgIGVsc2UgeyAvLyBtZXJnZSBvbiBzZWxlY3RvcgorICAgICAgICAgICAgICAg
ICAgICB2YXIgbWVyZ2UgPSB7fTsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVy
dHkgaW4gbWVyZ2VkU2VsZWN0b3JzW3NlbGVjdG9yXSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IG1lcmdlW3Byb3BlcnR5XSA9IG1lcmdlZFNlbGVjdG9yc1tzZWxlY3Rvcl1bcHJvcGVydHldOwor
ICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiB0aGlzLnN0eWxlc1tpZGVu
dGlmaWVyXVtzZWxlY3Rvcl0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbWVyZ2Vb
cHJvcGVydHldKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lcmdlW3Byb3BlcnR5XSA9
IHRoaXMuc3R5bGVzW2lkZW50aWZpZXJdW3NlbGVjdG9yXVtwcm9wZXJ0eV07CisgICAgICAgICAg
ICAgICAgICAgICAgICBlbHNlIHsgLy8gbWVyZ2Ugb24gcHJvcGVydHkgd2l0aGluIGEgc2VsZWN0
b3IsIGluY2x1ZGUgY29tbWVudCB0byBub3RpZnkgdXNlcgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZhciB2YWx1ZTEgPSBtZXJnZVtwcm9wZXJ0eV07CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyIHZhbHVlMiA9IHRoaXMuc3R5bGVzW2lkZW50aWZpZXJdW3NlbGVjdG9yXVtw
cm9wZXJ0eV07CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUxID09PSB2
YWx1ZTIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lcmdlW3Byb3BlcnR5XSA9
IFt2YWx1ZTFdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKE9iamVjdC50
eXBlKHZhbHVlMSkgPT09ICJhcnJheSIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1lcmdlW3Byb3BlcnR5XS5wdXNoKHZhbHVlMik7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXJnZVtwcm9wZXJ0eV0g
PSBbdmFsdWUxLCB2YWx1ZTJdOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIG1lcmdlZFNlbGVjdG9yc1tzZWxlY3Rv
cl0gPSBtZXJnZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICB2YXIgYnVpbGRlciA9IFtdOworICAgICAgICBidWlsZGVyLnB1c2goIi8qKiIp
OworICAgICAgICBidWlsZGVyLnB1c2goIiAqIEluc3BlY3RvciBHZW5lcmF0ZWQgU3R5bGVzaGVl
dCIpOyAvLyBVSVN0cmluZz8KKyAgICAgICAgYnVpbGRlci5wdXNoKCIgKi9cbiIpOworCisgICAg
ICAgIHZhciBpbmRlbnQgPSAiICAiOworICAgICAgICBmdW5jdGlvbiBkaXNwbGF5UHJvcGVydHko
cHJvcGVydHksIHZhbHVlLCBjb21tZW50KSB7CisgICAgICAgICAgICBpZiAoY29tbWVudCkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gaW5kZW50ICsgIi8qICIgKyBwcm9wZXJ0eSArICI6ICIgKyB2
YWx1ZSArICI7ICovIjsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4g
aW5kZW50ICsgcHJvcGVydHkgKyAiOiAiICsgdmFsdWUgKyAiOyI7CisgICAgICAgIH0KKworICAg
ICAgICBmb3IgKHZhciBzZWxlY3RvciBpbiBtZXJnZWRTZWxlY3RvcnMpIHsKKyAgICAgICAgICAg
IHZhciBwc3VlZG9TdHlsZSA9IG1lcmdlZFNlbGVjdG9yc1tzZWxlY3Rvcl07CisgICAgICAgICAg
ICB2YXIgcHJvcGVydGllcyA9IE9iamVjdC5wcm9wZXJ0aWVzKHBzdWVkb1N0eWxlKTsKKyAgICAg
ICAgICAgIGlmIChwcm9wZXJ0aWVzLmxlbmd0aCkgeworICAgICAgICAgICAgICAgIGJ1aWxkZXIu
cHVzaChzZWxlY3RvciArICIgeyIpOworICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgcHJvcGVydGllcy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAgICAgICB2YXIgcHJv
cGVydHkgPSBwcm9wZXJ0aWVzW2ldOworICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBw
c3VlZG9TdHlsZVtwcm9wZXJ0eV07CisgICAgICAgICAgICAgICAgICAgIGlmIChPYmplY3QudHlw
ZSh2YWx1ZSkgIT09ICJhcnJheSIpCisgICAgICAgICAgICAgICAgICAgICAgICBidWlsZGVyLnB1
c2goZGlzcGxheVByb3BlcnR5KHByb3BlcnR5LCB2YWx1ZSkpOworICAgICAgICAgICAgICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDEp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRlci5wdXNoKGRpc3BsYXlQcm9wZXJ0
eShwcm9wZXJ0eSwgdmFsdWUpICsgIiAvKiBtZXJnZWQgZnJvbSBlcXVpdmFsZW50IGVkaXRzICov
Iik7IC8vIFVJU3RyaW5nPworICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7ICAgICAgICAg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRlci5wdXNo
KGluZGVudCArICIvKiBUaGVyZSB3YXMgYSBDb25mbGljdC4uLiBUaGVyZSB3ZXJlIE11bHRpcGxl
IEVkaXRzIGZvciAnIiArIHByb3BlcnR5ICsgIicgKi8iKTsgLy8gVUlTdHJpbmc/CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB2YWx1ZS5sZW5ndGg7ICsr
aikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRlci5wdXNoKGRpc3BsYXlQ
cm9wZXJ0eShwcm9wZXJ0eSwgdmFsdWUsIHRydWUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBidWlsZGVyLnB1c2goIn1cbiIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgICAgV2ViSW5zcGVjdG9yLnNob3dDb25zb2xlKCk7CisgICAgICAgIHZhciByZXN1bHQgPSBi
dWlsZGVyLmpvaW4oIlxuIik7CisgICAgICAgIEluc3BlY3RvckNvbnRyb2xsZXIuaW5zcGVjdGVk
V2luZG93KCkuY29uc29sZS5sb2cocmVzdWx0KTsKKyAgICB9LAorCiAgICAgX2FkZE11dGF0aW9u
RXZlbnRMaXN0ZW5lcnM6IGZ1bmN0aW9uKG1vbml0b3JlZFdpbmRvdykKICAgICB7CiAgICAgICAg
IG1vbml0b3JlZFdpbmRvdy5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJET01Ob2RlSW5zZXJ0
ZWQiLCB0aGlzLl9ub2RlSW5zZXJ0ZWRFdmVudExpc3RlbmVyLCB0cnVlKTsKQEAgLTkxNiw3ICsx
MDMzLDcgQEAgV2ViSW5zcGVjdG9yLkVsZW1lbnRzUGFuZWwucHJvdG90eXBlID0gewogICAgICAg
ICB7CiAgICAgICAgICAgICB2YXIgcmlnaHRQYWRkaW5nID0gMjA7CiAgICAgICAgICAgICB2YXIg
ZXJyb3JXYXJuaW5nRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJlcnJvci13YXJu
aW5nLWNvdW50Iik7Ci0gICAgICAgICAgICBpZiAoIVdlYkluc3BlY3Rvci5jb25zb2xlLnZpc2li
bGUgJiYgZXJyb3JXYXJuaW5nRWxlbWVudCkKKyAgICAgICAgICAgIGlmICghV2ViSW5zcGVjdG9y
LmRyYXdlci52aXNpYmxlICYmIGVycm9yV2FybmluZ0VsZW1lbnQpCiAgICAgICAgICAgICAgICAg
cmlnaHRQYWRkaW5nICs9IGVycm9yV2FybmluZ0VsZW1lbnQub2Zmc2V0V2lkdGg7CiAgICAgICAg
ICAgICByZXR1cm4gKChjcnVtYnMudG90YWxPZmZzZXRMZWZ0ICsgY3J1bWJzLm9mZnNldFdpZHRo
ICsgcmlnaHRQYWRkaW5nKSA8IHdpbmRvdy5pbm5lcldpZHRoKTsKICAgICAgICAgfQpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9zdHlsZUljb24ucG5nIGIv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0ltYWdlcy9zdHlsZUljb24ucG5nCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjk4M2U2ZGVmM2YxODZjYjE3OTc4NGNiZjNjZTE2Yjg3YTZjZjM0ODQKR0lUIGJpbmFyeSBw
YXRjaApsaXRlcmFsIDEyMDcKemNtVjtvMVc1YWRQKTxoOzNLfExrMDAwZTFOSkxUcTAwMFVBMDAw
VUkxXkBzNmpXVy1AMDAwOSFYK3VMJE5rYzsqCnpQO3pmKFg+NFR4MEMpan5sdUt5VFAheHYkajQ2
ViZmfmQ2P2w7QT4odj9WXiFpY3M1V3dicWV3ODJpdjckVFZ8agp6OGNqMVhuSGU5NU5JfjVCVDhi
TVZoPkklWExiXzBKcjM7Wmw+dVhVMmFpdD1OTE5gKnp8MGVCQkRwb0hmYEV0JkcKeiYrQ1EmUlMj
MitWP3tKeip2YEFqdUJka0NAUE17PjAjJkYlSE1tbFM9ZD5waGArY1RYS0lnQ0x3QHs+SXZQczVA
CnpeJk9iX3Z+QmhNT09JbWo+ej8tZHA4NUtEWiM2Q3gwKlhmS2lmcTdKQkBZST9TTXRmY2xjKG0w
V01lM21DT2hPdAp6dzxwO196Q203XjRlPy16KTUwQD1zeTFxSmhUfTMkV0NnalVYaz14flFMPThR
T2BBTD0/UDw+I3JpVDRTZSNsd1MKeiMrOG8mdCFzY3FGRHRlSTQ7Wn0qdFhmfk9IUGl0c2ArPjE3
NzJENkdLT2QhYit7PGopPzF4alRxcGF5ZXNxfUxfCnp1PXBBPGJHMjBaYipvZ0d4eT5BYDxDJGQ/
K0BofiNWYWg4WXM1alduX3tsazFoPVpQZFJTUiZGYkw/TE4jNFo1Vwp6S0xRJmIwTHZjKGk1ajQx
Mk97VSRaZ0F6ckRiNUF4JFRfRTdHZHE7bUh0WUkhdChgfEp2fkpzSVpxIW5pclRII1QKemJBPjB8
cURWSm0qZVk8Jnsjd1Ird1hrfiteMno9cD1ZK1I9bVgob29zKnwlc0d1ISUtN007N3ZqcFRiN2I1
QSQ5CnpmITk+Vi1QMFNldmVDP1VfWEhnMnYjbUpLTVFTMi1fRigofm5laTNYJHclY3BCIyhILWdF
RlJYS2JHMjtBbEs4TAp6SmY0ZTVPKWRBZm9mKyFrOEEoPkdHZWFIbVMkXiNua31+ZilZVko2ZXxJ
TT91JGE1VHExcHlOXz8+MDBmKFM8MFEKejtKYCU9OEcxfUFPakBPMSZ9emNOQHhMbDlCKzkhaUQh
VEJRZHBgU25QTjJadUdKWVNUYWZ+I1VCV1VfTntoUihxCnp6cDNCUnpoMD4/Ryptbno/b3JiaXp4
PHRYV29CODhqMnFNXzxJOT9ZX3koKE9yYEpOMyk/cj5qUGhNSHk2c3w1fgp6VSNUeTlHP196T2o4
QktVNnJvSF83LVQlendkfXF+dylpSWVkfj98cm5qVzw7Jk9XS0Q8YShveTlodDB0YVctNUgKell5
WSNXVkE4VXlAWl5uPEU8OV9ZdTJuYXctRC09djFEZCleWkJ0di1QUUw5X19tXzl7YSNraXp2VG0y
dnJgVXN5CnopQVV3T3gtd2U/e316NVJ7NGFHMFRlem03JCR4MFYmMUZuV18+U1FBQTlxT2tGWj5N
d2cldTVhT0ZLSU4wMDBTYQp6TkxoMEwwNF5mezA0XmZ8YyU/c2YwMDAzWk5rbDxaNyNTXiklfU42
PzZoPT5lQ2V2N2p4QGc2ZmRzbHJYLSYwKDsKel4jSyRGTUZwWD9ySloofiReMGJWU196aX5hJkZI
M3E3SFpXSWo8JiEjIzNwPClARDlAOyZVe3hFOzV4KFJJPS1NCnpgJTFvRVFrSWRERURJVykyX359
X1hlLWJgbnIlSVFwKiM8YHRTUD17MHk/PSZ0bGc8PGYjTU98JiRoKGs5V084Rgp6Q3lpWlBAZ3Yl
V0FPMEV8Zm0kKXgpdWhMcz9lUDgkQDVLOCFXX185MWo2Xk5YejJhe2lUUlROOHAmUGZ2PUAtbFMK
ejFKJn5sWUlBe1czcnRldnRndXlTWHE2JnAqb31ITkNjdCF1bE9HXkJgcCVMJWdLZithR1ZHUDU5
eFI+YzNKRiZWCnpmS0tTdkdSV0UxKSh8aT5nUH1gP3RZbVFDUXA4OVNySUh9V3ZPI08yMDlfS3J8
MiRnJFBadHU+YipDZn09TkM1PQpWbWxmUmkrTlNeajAwMm92UERITGtWMW05eUl9aVc+CgpsaXRl
cmFsIDAKSGNtVj9kMDAwMDEKCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvU3R5bGVzU2lkZWJhclBhbmUuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU3R5
bGVzU2lkZWJhclBhbmUuanMKaW5kZXggNGYwMmNhNC4uNTRkN2I3MiAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1N0eWxlc1NpZGViYXJQYW5lLmpzCisrKyBiL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TdHlsZXNTaWRlYmFyUGFuZS5qcwpAQCAtNDI5LDYgKzQy
OSwxMSBAQCBXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0aWVzU2VjdGlvbi5wcm90b3R5cGUgPSB7
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0sCiAKKyAgICBpc0luc3BlY3RvclN0eWxlc2hl
ZXQ6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVybiAodGhpcy5zdHlsZVJ1bGUucGFy
ZW50U3R5bGVTaGVldCA9PT0gV2ViSW5zcGVjdG9yLnBhbmVscy5lbGVtZW50cy5zdHlsZXNoZWV0
KTsKKyAgICB9LAorCiAgICAgdXBkYXRlOiBmdW5jdGlvbihmdWxsKQogICAgIHsKICAgICAgICAg
aWYgKGZ1bGwgfHwgdGhpcy5jb21wdXRlZFN0eWxlKSB7CkBAIC01ODgsNyArNTkzLDEwIEBAIFdl
Ykluc3BlY3Rvci5TdHlsZVByb3BlcnRpZXNTZWN0aW9uLnByb3RvdHlwZSA9IHsKIAogICAgICAg
ICB0aGlzLnJ1bGUgPSBuZXdSdWxlOwogICAgICAgICB0aGlzLnN0eWxlUnVsZSA9IHsgc2VjdGlv
bjogdGhpcywgc3R5bGU6IG5ld1J1bGUuc3R5bGUsIHNlbGVjdG9yVGV4dDogbmV3UnVsZS5zZWxl
Y3RvclRleHQsIHBhcmVudFN0eWxlU2hlZXQ6IG5ld1J1bGUucGFyZW50U3R5bGVTaGVldCwgcnVs
ZTogbmV3UnVsZSB9OworICAgICAgICB2YXIgb2xkSWRlbnRpZmllciA9IHRoaXMuaWRlbnRpZmll
cjsKKyAgICAgICAgdGhpcy5pZGVudGlmaWVyID0gbmV3UnVsZS5zZWxlY3RvclRleHQgKyAiOiIg
KyB0aGlzLnN1YnRpdGxlRWxlbWVudC50ZXh0Q29udGVudDsgICAgICAgIAogICAgICAgICB0aGlz
LnBhbmUudXBkYXRlKG51bGwsIHRydWUpOworICAgICAgICBXZWJJbnNwZWN0b3IucGFuZWxzLmVs
ZW1lbnRzLnJlbmFtZVNlbGVjdG9yKG9sZElkZW50aWZpZXIsIHRoaXMuaWRlbnRpZmllciwgb2xk
Q29udGVudCwgbmV3Q29udGVudCk7CiAgICAgICAgIG1vdmVUb05leHRJZk5lZWRlZC5jYWxsKHRo
aXMpOwogICAgIH0sCiAKQEAgLTcwMiw2ICs3MTAsNyBAQCBXZWJJbnNwZWN0b3IuQmxhbmtTdHls
ZVByb3BlcnRpZXNTZWN0aW9uLnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5ydWxlID0gc3R5
bGVSdWxlLnJ1bGU7CiAgICAgICAgIHRoaXMuY29tcHV0ZWRTdHlsZSA9IGZhbHNlOwogICAgICAg
ICB0aGlzLmVkaXRhYmxlID0gdHJ1ZTsKKyAgICAgICAgdGhpcy5pZGVudGlmaWVyID0gc3R5bGVS
dWxlLnNlbGVjdG9yVGV4dCArICI6aW5zcGVjdG9yIjsKICAgICAgICAgLy8gbGVmdG92ZXJzIGFy
ZTogdGhpcy5ub0FmZmVjdCBpZiBhcHBsaWNhYmxlCiAgICAgfQogfQpAQCAtMTE4NSw2ICsxMTk0
LDggQEAgV2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydHlUcmVlRWxlbWVudC5wcm90b3R5cGUgPSB7
CiAKICAgICBhcHBseVN0eWxlVGV4dDogZnVuY3Rpb24oc3R5bGVUZXh0LCB1cGRhdGVJbnRlcmZh
Y2UpCiAgICAgeworICAgICAgICB2YXIgc2VjdGlvbiA9IHRoaXMudHJlZU91dGxpbmUuc2VjdGlv
bjsKKyAgICAgICAgdmFyIGVsZW1lbnRzUGFuZWwgPSBXZWJJbnNwZWN0b3IucGFuZWxzLmVsZW1l
bnRzOwogICAgICAgICB2YXIgc3R5bGVUZXh0TGVuZ3RoID0gc3R5bGVUZXh0LnRyaW1XaGl0ZXNw
YWNlKCkubGVuZ3RoOwogCiAgICAgICAgIC8vIENyZWF0ZSBhIG5ldyBlbGVtZW50IHRvIHBhcnNl
IHRoZSB1c2VyIGlucHV0IENTUy4KQEAgLTEyMDIsMTYgKzEyMTMsMTggQEAgV2ViSW5zcGVjdG9y
LlN0eWxlUHJvcGVydHlUcmVlRWxlbWVudC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICAgICAg
ICAgIHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkobG9uZ2hhbmRQcm9wZXJ0aWVzW2ldKTsKICAg
ICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVy
dHkodGhpcy5uYW1lKTsKKyAgICAgICAgICAgIGVsZW1lbnRzUGFuZWwucmVtb3ZlU3R5bGVDaGFu
Z2Uoc2VjdGlvbi5pZGVudGlmaWVyLCB0aGlzLnN0eWxlLCB0aGlzLm5hbWUpOwogICAgICAgICB9
CiAKICAgICAgICAgaWYgKCFzdHlsZVRleHRMZW5ndGgpIHsKICAgICAgICAgICAgIGlmICh1cGRh
dGVJbnRlcmZhY2UpIHsKICAgICAgICAgICAgICAgICAvLyBUaGUgdXNlciBkZWxldGVkIGV2ZXJ5
dGhpbmcsIHNvIHJlbW92ZSB0aGUgdHJlZSBlbGVtZW50IGFuZCB1cGRhdGUuCiAgICAgICAgICAg
ICAgICAgaWYgKCF0aGlzLl9uZXdQcm9wZXJ0eSkKLSAgICAgICAgICAgICAgICAgICAgZGVsZXRl
IHRoaXMudHJlZU91dGxpbmUuc2VjdGlvbi5fYWZ0ZXJVcGRhdGU7Ci0gICAgICAgICAgICAgICAg
aWYgKHRoaXMudHJlZU91dGxpbmUuc2VjdGlvbiAmJiB0aGlzLnRyZWVPdXRsaW5lLnNlY3Rpb24u
cGFuZSkKLSAgICAgICAgICAgICAgICAgICAgdGhpcy50cmVlT3V0bGluZS5zZWN0aW9uLnBhbmUu
dXBkYXRlKCk7CisgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBzZWN0aW9uLl9hZnRlclVwZGF0
ZTsKKyAgICAgICAgICAgICAgICBpZiAoc2VjdGlvbiAmJiBzZWN0aW9uLnBhbmUpCisgICAgICAg
ICAgICAgICAgICAgIHNlY3Rpb24ucGFuZS51cGRhdGUoKTsKICAgICAgICAgICAgICAgICB0aGlz
LnBhcmVudC5yZW1vdmVDaGlsZCh0aGlzKTsKKyAgICAgICAgICAgICAgICBlbGVtZW50c1BhbmVs
LnJlbW92ZVN0eWxlQ2hhbmdlKHNlY3Rpb24uaWRlbnRpZmllciwgdGhpcy5zdHlsZSwgdGhpcy5u
YW1lKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAt
MTI1MSwxMCArMTI2NCwxMSBAQCBXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0eVRyZWVFbGVtZW50
LnByb3RvdHlwZSA9IHsKIAogICAgICAgICAgICAgLy8gU2V0IHRoZSBwcm9wZXJ0eSBvbiB0aGUg
cmVhbCBzdHlsZSBkZWNsYXJhdGlvbi4KICAgICAgICAgICAgIHRoaXMuc3R5bGUuc2V0UHJvcGVy
dHkoKHNob3J0aGFuZCB8fCBuYW1lKSwgdmFsdWUsIHByaW9yaXR5KTsKKyAgICAgICAgICAgIGVs
ZW1lbnRzUGFuZWwuYWRkU3R5bGVDaGFuZ2Uoc2VjdGlvbi5pZGVudGlmaWVyLCB0aGlzLnN0eWxl
LCAoc2hvcnRoYW5kIHx8IG5hbWUpKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmICh0aGlzLnRy
ZWVPdXRsaW5lLnNlY3Rpb24gJiYgdGhpcy50cmVlT3V0bGluZS5zZWN0aW9uLnBhbmUpCi0gICAg
ICAgICAgICB0aGlzLnRyZWVPdXRsaW5lLnNlY3Rpb24ucGFuZS5kaXNwYXRjaEV2ZW50VG9MaXN0
ZW5lcnMoInN0eWxlIGVkaXRlZCIpOworICAgICAgICBpZiAoc2VjdGlvbiAmJiBzZWN0aW9uLnBh
bmUpCisgICAgICAgICAgICBzZWN0aW9uLnBhbmUuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKCJz
dHlsZSBlZGl0ZWQiKTsKIAogICAgICAgICBpZiAodXBkYXRlSW50ZXJmYWNlKQogICAgICAgICAg
ICAgdGhpcy51cGRhdGVBbGwodHJ1ZSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvV2ViS2l0LnFyYyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9XZWJLaXQu
cXJjCmluZGV4IDUxMWExYmMuLmNmNTg4NzAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9XZWJLaXQucXJjCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9X
ZWJLaXQucXJjCkBAIC02LDcgKzYsOCBAQAogICAgIDxmaWxlPkJyZWFrcG9pbnRzU2lkZWJhclBh
bmUuanM8L2ZpbGU+CiAgICAgPGZpbGU+Q2FsbGJhY2suanM8L2ZpbGU+CiAgICAgPGZpbGU+Q2Fs
bFN0YWNrU2lkZWJhclBhbmUuanM8L2ZpbGU+Ci0gICAgPGZpbGU+Q29uc29sZS5qczwvZmlsZT4K
KyAgICA8ZmlsZT5DaGFuZ2VzVmlldy5qczwvZmlsZT4KKyAgICA8ZmlsZT5Db25zb2xlVmlldy5q
czwvZmlsZT4KICAgICA8ZmlsZT5EYXRhYmFzZS5qczwvZmlsZT4KICAgICA8ZmlsZT5EYXRhYmFz
ZVF1ZXJ5Vmlldy5qczwvZmlsZT4KICAgICA8ZmlsZT5EYXRhYmFzZXNQYW5lbC5qczwvZmlsZT4K
QEAgLTE2LDYgKzE3LDcgQEAKICAgICA8ZmlsZT5ET01TdG9yYWdlLmpzPC9maWxlPgogICAgIDxm
aWxlPkRPTVN0b3JhZ2VEYXRhR3JpZC5qczwvZmlsZT4KICAgICA8ZmlsZT5ET01TdG9yYWdlSXRl
bXNWaWV3LmpzPC9maWxlPgorICAgIDxmaWxlPkRyYXdlci5qczwvZmlsZT4KICAgICA8ZmlsZT5F
bGVtZW50c1BhbmVsLmpzPC9maWxlPgogICAgIDxmaWxlPkVsZW1lbnRzVHJlZU91dGxpbmUuanM8
L2ZpbGU+CiAgICAgPGZpbGU+Rm9udFZpZXcuanM8L2ZpbGU+CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmNzcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9pbnNwZWN0b3IuY3NzCmluZGV4IDA3MDI5MzYuLjNkYzE4YjUgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuY3NzCisrKyBiL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuY3NzCkBAIC0yNTksNyArMjU5LDcgQEAgYm9k
eS5hdHRhY2hlZCAjbWFpbiB7CiAgICAgcmlnaHQ6IDA7CiB9CiAKLWJvZHkuY29uc29sZS12aXNp
YmxlICNtYWluLXN0YXR1cy1iYXIgeworYm9keS5kcmF3ZXItdmlzaWJsZSAjbWFpbi1zdGF0dXMt
YmFyIHsKICAgICBoZWlnaHQ6IDI0cHg7CiAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKEltYWdl
cy9zdGF0dXNiYXJSZXNpemVyVmVydGljYWwucG5nKSwgdXJsKEltYWdlcy9zdGF0dXNiYXJCYWNr
Z3JvdW5kLnBuZyk7CiAgICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdCwgcmVwZWF0LXg7
CkBAIC0yNjcsMTEgKzI2NywxMSBAQCBib2R5LmNvbnNvbGUtdmlzaWJsZSAjbWFpbi1zdGF0dXMt
YmFyIHsKICAgICBjdXJzb3I6IHJvdy1yZXNpemU7CiB9CiAKLWJvZHkuY29uc29sZS12aXNpYmxl
ICNtYWluLXN0YXR1cy1iYXIgKiB7Citib2R5LmRyYXdlci12aXNpYmxlICNtYWluLXN0YXR1cy1i
YXIgKiB7CiAgICAgY3Vyc29yOiBkZWZhdWx0OwogfQogCi1ib2R5LmNvbnNvbGUtdmlzaWJsZSAj
bWFpbi1wYW5lbHMgeworYm9keS5kcmF3ZXItdmlzaWJsZSAjbWFpbi1wYW5lbHMgewogICAgIGJv
dHRvbTogMjRweDsKIH0KIApAQCAtMzc4LDcgKzM3OCwzMSBAQCBib2R5LmRldGFjaGVkICNkb2Nr
LXN0YXR1cy1iYXItaXRlbS50b2dnbGVkLW9uOmFjdGl2ZSB7CiAgICAgYmFja2dyb3VuZC1wb3Np
dGlvbjogMzJweCAwOwogfQogCi0jZXJyb3Itd2FybmluZy1jb3VudCB7CisjY2hhbmdlcy1zdGF0
dXMtYmFyLWl0ZW0geworICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChJbWFnZXMvY29uc29sZUJ1
dHRvbnMucG5nKTsgLyogVE9ETzogTmVlZHMgSW1hZ2UgZm9yIENoYW5nZXMgVG9nZ2xlIEJ1dHRv
biAqLworfQorCisjY2hhbmdlcy1zdGF0dXMtYmFyLWl0ZW06YWN0aXZlIHsKKyAgICBiYWNrZ3Jv
dW5kLXBvc2l0aW9uOiAzMnB4IDA7Cit9CisKKyNjaGFuZ2VzLXN0YXR1cy1iYXItaXRlbS50b2dn
bGVkLW9uIHsKKyAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIDI0cHg7Cit9CisKKyNjaGFuZ2Vz
LXN0YXR1cy1iYXItaXRlbS50b2dnbGVkLW9uOmFjdGl2ZSB7CisgICAgYmFja2dyb3VuZC1wb3Np
dGlvbjogMzJweCAyNHB4OworfQorCisjY2xlYXItY2hhbmdlcy1zdGF0dXMtYmFyLWl0ZW0gewor
ICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChJbWFnZXMvY2xlYXJDb25zb2xlQnV0dG9ucy5wbmcp
OworfQorCisjY2xlYXItY2hhbmdlcy1zdGF0dXMtYmFyLWl0ZW06YWN0aXZlIHsKKyAgICBiYWNr
Z3JvdW5kLXBvc2l0aW9uOiAzMnB4IDA7Cit9CisKKyNjb3VudC1pdGVtcyB7CiAgICAgcG9zaXRp
b246IGFic29sdXRlOwogICAgIHJpZ2h0OiAxNnB4OwogICAgIHRvcDogMDsKQEAgLTM4OCwxMCAr
NDEyLDIyIEBAIGJvZHkuZGV0YWNoZWQgI2RvY2stc3RhdHVzLWJhci1pdGVtLnRvZ2dsZWQtb246
YWN0aXZlIHsKICAgICBoZWlnaHQ6IDE5cHg7CiB9CiAKLSNlcnJvci13YXJuaW5nLWNvdW50Omhv
dmVyIHsKKyNjaGFuZ2VzLWNvdW50LCAjZXJyb3Itd2FybmluZy1jb3VudCB7CisgICAgZGlzcGxh
eTogaW5saW5lOworfQorCisjZXJyb3Itd2FybmluZy1jb3VudDpob3ZlciwgI2NoYW5nZXMtY291
bnQ6aG92ZXIgewogICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCByZ2IoOTYsIDk2LCA5Nik7
CiB9CiAKKyNzdHlsZS1jaGFuZ2VzLWNvdW50OjpiZWZvcmUgeworICAgIGNvbnRlbnQ6IHVybChJ
bWFnZXMvc3R5bGVJY29uLnBuZyk7IC8qIFRPRE86IE5lZWRzIEltYWdlIGZvciBTdHlsZSBDaGFu
Z2VzIEljb24gKi8KKyAgICB3aWR0aDogMTBweDsKKyAgICBoZWlnaHQ6IDEwcHg7CisgICAgdmVy
dGljYWwtYWxpZ246IC0xcHg7CisgICAgbWFyZ2luLXJpZ2h0OiAycHg7Cit9CisKICNlcnJvci1j
b3VudDo6YmVmb3JlIHsKICAgICBjb250ZW50OiB1cmwoSW1hZ2VzL2Vycm9ySWNvbi5wbmcpOwog
ICAgIHdpZHRoOiAxMHB4OwpAQCAtMzk5LDggKzQzNSw4IEBAIGJvZHkuZGV0YWNoZWQgI2RvY2st
c3RhdHVzLWJhci1pdGVtLnRvZ2dsZWQtb246YWN0aXZlIHsKICAgICB2ZXJ0aWNhbC1hbGlnbjog
LTFweDsKICAgICBtYXJnaW4tcmlnaHQ6IDJweDsKIH0KLQotI2Vycm9yLWNvdW50ICsgI3dhcm5p
bmctY291bnQgeworICAgIAorI2NoYW5nZXMtY291bnQgKyAjZXJyb3Itd2FybmluZy1jb3VudCwg
I2Vycm9yLWNvdW50ICsgI3dhcm5pbmctY291bnQgewogICAgIG1hcmdpbi1sZWZ0OiA2cHg7CiB9
CiAKQEAgLTQxMiw3ICs0NDgsNyBAQCBib2R5LmRldGFjaGVkICNkb2NrLXN0YXR1cy1iYXItaXRl
bS50b2dnbGVkLW9uOmFjdGl2ZSB7CiAgICAgbWFyZ2luLXJpZ2h0OiAycHg7CiB9CiAKLSNjb25z
b2xlIHsKKyNkcmF3ZXIgewogICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgcG9zaXRpb246IGFic29s
dXRlOwogICAgIGJvdHRvbTogMDsKQEAgLTQyNSwxMSArNDYxLDExIEBAIGJvZHkuZGV0YWNoZWQg
I2RvY2stc3RhdHVzLWJhci1pdGVtLnRvZ2dsZWQtb246YWN0aXZlIHsKICAgICBiYWNrZ3JvdW5k
LXBvc2l0aW9uOiBib3R0b207CiB9CiAKLWJvZHkuY29uc29sZS12aXNpYmxlICNjb25zb2xlIHsK
K2JvZHkuZHJhd2VyLXZpc2libGUgI2RyYXdlciB7CiAgICAgZGlzcGxheTogYmxvY2s7CiB9CiAK
LSNjb25zb2xlLXN0YXR1cy1iYXIgeworI2RyYXdlci1zdGF0dXMtYmFyIHsKICAgICBwb3NpdGlv
bjogYWJzb2x1dGU7CiAgICAgYm90dG9tOiAwOwogICAgIGxlZnQ6IDA7CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWwgYi9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWwKaW5kZXggZGM3NmM0OC4uMGNkODZiNSAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5odG1sCisrKyBi
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuaHRtbApAQCAtMzgsOCArMzgs
MTAgQEAgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJU
ZXh0UHJvbXB0LmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlw
dCIgc3JjPSJQbGFjYXJkLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2
YXNjcmlwdCIgc3JjPSJWaWV3LmpzIj48L3NjcmlwdD4KLSAgICA8c2NyaXB0IHR5cGU9InRleHQv
amF2YXNjcmlwdCIgc3JjPSJDb25zb2xlLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9
InRleHQvamF2YXNjcmlwdCIgc3JjPSJDYWxsYmFjay5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlw
dCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iRHJhd2VyLmpzIj48L3NjcmlwdD4KKyAgICA8
c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJDaGFuZ2VzVmlldy5qcyI+PC9zY3Jp
cHQ+CisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iQ29uc29sZVZpZXcu
anMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IlJl
c291cmNlLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIg
c3JjPSJSZXNvdXJjZUNhdGVnb3J5LmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRl
eHQvamF2YXNjcmlwdCIgc3JjPSJEYXRhYmFzZS5qcyI+PC9zY3JpcHQ+CkBAIC05MCwxMSArOTIs
MTEgQEAgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KICAgICA8L2Rpdj4KICAgICA8ZGl2IGlkPSJtYWluIj4KICAgICAgICAg
PGRpdiBpZD0ibWFpbi1wYW5lbHMiIHRhYmluZGV4PSIwIiBzcGVsbGNoZWNrPSJmYWxzZSI+PC9k
aXY+Ci0gICAgICAgIDxkaXYgaWQ9Im1haW4tc3RhdHVzLWJhciIgY2xhc3M9InN0YXR1cy1iYXIi
PjxkaXYgaWQ9ImFuY2hvcmVkLXN0YXR1cy1iYXItaXRlbXMiPjxidXR0b24gaWQ9ImRvY2stc3Rh
dHVzLWJhci1pdGVtIiBjbGFzcz0ic3RhdHVzLWJhci1pdGVtIHRvZ2dsZWQiPjwvYnV0dG9uPjxi
dXR0b24gaWQ9ImNvbnNvbGUtc3RhdHVzLWJhci1pdGVtIiBjbGFzcz0ic3RhdHVzLWJhci1pdGVt
Ij48L2J1dHRvbj48ZGl2IGlkPSJlcnJvci13YXJuaW5nLWNvdW50IiBjbGFzcz0iaGlkZGVuIj48
L2Rpdj48L2Rpdj48L2Rpdj4KKyAgICAgICAgPGRpdiBpZD0ibWFpbi1zdGF0dXMtYmFyIiBjbGFz
cz0ic3RhdHVzLWJhciI+PGRpdiBpZD0iYW5jaG9yZWQtc3RhdHVzLWJhci1pdGVtcyI+PGJ1dHRv
biBpZD0iZG9jay1zdGF0dXMtYmFyLWl0ZW0iIGNsYXNzPSJzdGF0dXMtYmFyLWl0ZW0gdG9nZ2xl
ZCI+PC9idXR0b24+PGJ1dHRvbiBpZD0iY29uc29sZS1zdGF0dXMtYmFyLWl0ZW0iIGNsYXNzPSJz
dGF0dXMtYmFyLWl0ZW0iPjwvYnV0dG9uPjxidXR0b24gaWQ9ImNoYW5nZXMtc3RhdHVzLWJhci1p
dGVtIiBjbGFzcz0ic3RhdHVzLWJhci1pdGVtIGhpZGRlbiI+PC9idXR0b24+PGRpdiBpZD0iY291
bnQtaXRlbXMiPjxkaXYgaWQ9ImNoYW5nZXMtY291bnQiIGNsYXNzPSJoaWRkZW4iPjwvZGl2Pjxk
aXYgaWQ9ImVycm9yLXdhcm5pbmctY291bnQiIGNsYXNzPSJoaWRkZW4iPjwvZGl2PjwvZGl2Pjwv
ZGl2PjwvZGl2PgogICAgIDwvZGl2PgotICAgIDxkaXYgaWQ9ImNvbnNvbGUiPgotICAgICAgICA8
ZGl2IGlkPSJjb25zb2xlLW1lc3NhZ2VzIj48ZGl2IGlkPSJjb25zb2xlLXByb21wdCIgc3BlbGxj
aGVjaz0iZmFsc2UiPjxicj48L2Rpdj48L2Rpdj4KLSAgICAgICAgPGRpdiBpZD0iY29uc29sZS1z
dGF0dXMtYmFyIiBjbGFzcz0ic3RhdHVzLWJhciI+PGRpdiBpZD0ib3RoZXItY29uc29sZS1zdGF0
dXMtYmFyLWl0ZW1zIj48YnV0dG9uIGlkPSJjbGVhci1jb25zb2xlLXN0YXR1cy1iYXItaXRlbSIg
Y2xhc3M9InN0YXR1cy1iYXItaXRlbSI+PC9idXR0b24+PC9kaXY+PC9kaXY+CisgICAgPGRpdiBp
ZD0iZHJhd2VyIj4KKyAgICAgICAgPGRpdiBpZD0iY29uc29sZS12aWV3Ij48ZGl2IGlkPSJjb25z
b2xlLW1lc3NhZ2VzIj48ZGl2IGlkPSJjb25zb2xlLXByb21wdCIgc3BlbGxjaGVjaz0iZmFsc2Ui
Pjxicj48L2Rpdj48L2Rpdj48L2Rpdj4KKyAgICAgICAgPGRpdiBpZD0iZHJhd2VyLXN0YXR1cy1i
YXIiIGNsYXNzPSJzdGF0dXMtYmFyIj48ZGl2IGlkPSJvdGhlci1kcmF3ZXItc3RhdHVzLWJhci1p
dGVtcyI+PGJ1dHRvbiBpZD0iY2xlYXItY29uc29sZS1zdGF0dXMtYmFyLWl0ZW0iIGNsYXNzPSJz
dGF0dXMtYmFyLWl0ZW0iPjwvYnV0dG9uPjwvZGl2PjwvZGl2PgogICAgIDwvZGl2PgogPC9ib2R5
PgogPC9odG1sPgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3Bl
Y3Rvci5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMKaW5kZXgg
ZGI1YjZkMC4uYmY4MjQzOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L2luc3BlY3Rvci5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9y
LmpzCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAw
OCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA3
IE1hdHQgTGlsZWsgKHBld3Rlcm1vb3NlQGdtYWlsLmNvbSkuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDkgSm9zZXBoIFBlY29yYXJvCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI1
Miw2ICsyNTMsNTMgQEAgdmFyIFdlYkluc3BlY3RvciA9IHsKICAgICAgICAgICAgIGVycm9yV2Fy
bmluZ0VsZW1lbnQudGl0bGUgPSBudWxsOwogICAgIH0sCiAKKyAgICBnZXQgc3R5bGVDaGFuZ2Vz
KCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9zdHlsZUNoYW5nZXM7CisgICAgfSwKKwor
ICAgIHNldCBzdHlsZUNoYW5nZXMoeCkKKyAgICB7CisgICAgICAgIHggPSBNYXRoLm1heCh4LCAw
KTsKKworICAgICAgICBpZiAodGhpcy5fc3R5bGVDaGFuZ2VzID09PSB4KQorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB0aGlzLl9zdHlsZUNoYW5nZXMgPSB4OworICAgICAgICB0aGlzLl91
cGRhdGVDaGFuZ2VzQ291bnQoKTsKKyAgICB9LAorCisgICAgX3VwZGF0ZUNoYW5nZXNDb3VudDog
ZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgLy8gVE9ETzogUmVtb3ZlIGltbWVkaWF0ZSByZXR1
cm4gd2hlbiBlbmFibGluZyB0aGUgQ2hhbmdlcyBQYW5lbAorICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgdmFyIGNoYW5nZXNFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNoYW5n
ZXMtY291bnQiKTsKKyAgICAgICAgaWYgKCFjaGFuZ2VzRWxlbWVudCkKKyAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICBpZiAoIXRoaXMuc3R5bGVDaGFuZ2VzKSB7CisgICAgICAgICAgICBj
aGFuZ2VzRWxlbWVudC5hZGRTdHlsZUNsYXNzKCJoaWRkZW4iKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisgICAgICAgIGNoYW5nZXNFbGVtZW50LnJlbW92ZVN0eWxlQ2xhc3Mo
ImhpZGRlbiIpOworICAgICAgICBjaGFuZ2VzRWxlbWVudC5yZW1vdmVDaGlsZHJlbigpOworCisg
ICAgICAgIGlmICh0aGlzLnN0eWxlQ2hhbmdlcykgeworICAgICAgICAgICAgdmFyIHN0eWxlQ2hh
bmdlc0VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7CisgICAgICAgICAg
ICBzdHlsZUNoYW5nZXNFbGVtZW50LmlkID0gInN0eWxlLWNoYW5nZXMtY291bnQiOworICAgICAg
ICAgICAgc3R5bGVDaGFuZ2VzRWxlbWVudC50ZXh0Q29udGVudCA9IHRoaXMuc3R5bGVDaGFuZ2Vz
OworICAgICAgICAgICAgY2hhbmdlc0VsZW1lbnQuYXBwZW5kQ2hpbGQoc3R5bGVDaGFuZ2VzRWxl
bWVudCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAodGhpcy5zdHlsZUNoYW5nZXMpIHsKKyAg
ICAgICAgICAgIGlmICh0aGlzLnN0eWxlQ2hhbmdlcyA9PT0gMSkKKyAgICAgICAgICAgICAgICBj
aGFuZ2VzRWxlbWVudC50aXRsZSA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiJWQgc3R5bGUgY2hh
bmdlIiwgdGhpcy5zdHlsZUNoYW5nZXMpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgIGNoYW5nZXNFbGVtZW50LnRpdGxlID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCIlZCBzdHls
ZSBjaGFuZ2VzIiwgdGhpcy5zdHlsZUNoYW5nZXMpOworICAgICAgICB9CisgICAgfSwKKwogICAg
IGdldCBob3ZlcmVkRE9NTm9kZSgpCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5faG92ZXJl
ZERPTU5vZGU7CkBAIC0yOTksNyArMzQ3LDEzIEBAIFdlYkluc3BlY3Rvci5sb2FkZWQgPSBmdW5j
dGlvbigpCiAgICAgdmFyIHBsYXRmb3JtID0gSW5zcGVjdG9yQ29udHJvbGxlci5wbGF0Zm9ybSgp
OwogICAgIGRvY3VtZW50LmJvZHkuYWRkU3R5bGVDbGFzcygicGxhdGZvcm0tIiArIHBsYXRmb3Jt
KTsKIAotICAgIHRoaXMuY29uc29sZSA9IG5ldyBXZWJJbnNwZWN0b3IuQ29uc29sZSgpOworICAg
IHRoaXMuZHJhd2VyID0gbmV3IFdlYkluc3BlY3Rvci5EcmF3ZXIoKTsKKyAgICB0aGlzLmNvbnNv
bGUgPSBuZXcgV2ViSW5zcGVjdG9yLkNvbnNvbGVWaWV3KHRoaXMuZHJhd2VyKTsKKyAgICAvLyBU
T0RPOiBVbmNvbW1lbnQgd2hlbiBlbmFibGluZyB0aGUgQ2hhbmdlcyBQYW5lbAorICAgIC8vIHRo
aXMuY2hhbmdlcyA9IG5ldyBXZWJJbnNwZWN0b3IuQ2hhbmdlc1ZpZXcodGhpcy5kcmF3ZXIpOwor
ICAgIC8vIFRPRE86IFJlbW92ZSBjbGFzcz0iaGlkZGVuIiBmcm9tIGluc3BlY3Rvci5odG1sIG9u
IGJ1dHRvbiNjaGFuZ2VzLXN0YXR1cy1iYXItaXRlbQorICAgIHRoaXMuZHJhd2VyLnZpc2libGVW
aWV3ID0gdGhpcy5jb25zb2xlOworCiAgICAgaWYgKFByZWZlcmVuY2VzLnVzZURPTUFnZW50KQog
ICAgICAgICB0aGlzLmRvbUFnZW50ID0gbmV3IFdlYkluc3BlY3Rvci5ET01BZ2VudCgpOwogCkBA
IC0zNzAsOSArNDI0LDE1IEBAIFdlYkluc3BlY3Rvci5sb2FkZWQgPSBmdW5jdGlvbigpCiAgICAg
ICAgIGRvY2tUb2dnbGVCdXR0b24udGl0bGUgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkRvY2sg
dG8gbWFpbiB3aW5kb3cuIik7CiAKICAgICB2YXIgZXJyb3JXYXJuaW5nQ291bnQgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgiZXJyb3Itd2FybmluZy1jb3VudCIpOwotICAgIGVycm9yV2Fybmlu
Z0NvdW50LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgdGhpcy5jb25zb2xlLnNob3cuYmluZCh0
aGlzLmNvbnNvbGUpLCBmYWxzZSk7CisgICAgZXJyb3JXYXJuaW5nQ291bnQuYWRkRXZlbnRMaXN0
ZW5lcigiY2xpY2siLCB0aGlzLnNob3dDb25zb2xlLmJpbmQodGhpcyksIGZhbHNlKTsKICAgICB0
aGlzLl91cGRhdGVFcnJvckFuZFdhcm5pbmdDb3VudHMoKTsKIAorICAgIHRoaXMuc3R5bGVDaGFu
Z2VzID0gMDsKKyAgICAvLyBUT0RPOiBVbmNvbW1lbnQgd2hlbiBlbmFibGluZyB0aGUgQ2hhbmdl
cyBQYW5lbAorICAgIC8vIHZhciBjaGFuZ2VzRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJjaGFuZ2VzLWNvdW50Iik7CisgICAgLy8gY2hhbmdlc0VsZW1lbnQuYWRkRXZlbnRMaXN0
ZW5lcigiY2xpY2siLCB0aGlzLnNob3dDaGFuZ2VzLmJpbmQodGhpcyksIGZhbHNlKTsKKyAgICAv
LyB0aGlzLl91cGRhdGVFcnJvckFuZFdhcm5pbmdDb3VudHMoKTsKKwogICAgIHZhciBzZWFyY2hG
aWVsZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzZWFyY2giKTsKICAgICBzZWFyY2hGaWVs
ZC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIiwgdGhpcy5zZWFyY2hLZXlEb3duLmJpbmQodGhp
cyksIGZhbHNlKTsKICAgICBzZWFyY2hGaWVsZC5hZGRFdmVudExpc3RlbmVyKCJrZXl1cCIsIHRo
aXMuc2VhcmNoS2V5VXAuYmluZCh0aGlzKSwgZmFsc2UpOwpAQCAtNTAxLDcgKzU2MSw3IEBAIFdl
Ykluc3BlY3Rvci5kb2N1bWVudEtleURvd24gPSBmdW5jdGlvbihldmVudCkKIAogICAgICAgICBz
d2l0Y2ggKGV2ZW50LmtleUlkZW50aWZpZXIpIHsKICAgICAgICAgICAgIGNhc2UgIlUrMDAxQiI6
IC8vIEVzY2FwZSBrZXkKLSAgICAgICAgICAgICAgICB0aGlzLmNvbnNvbGUudmlzaWJsZSA9ICF0
aGlzLmNvbnNvbGUudmlzaWJsZTsKKyAgICAgICAgICAgICAgICB0aGlzLmRyYXdlci52aXNpYmxl
ID0gIXRoaXMuZHJhd2VyLnZpc2libGU7CiAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERl
ZmF1bHQoKTsKICAgICAgICAgICAgICAgICBicmVhazsKIApAQCAtNzkzLDcgKzg1MywxMiBAQCBX
ZWJJbnNwZWN0b3IuZWxlbWVudERyYWdFbmQgPSBmdW5jdGlvbihldmVudCkKIAogV2ViSW5zcGVj
dG9yLnNob3dDb25zb2xlID0gZnVuY3Rpb24oKQogewotICAgIHRoaXMuY29uc29sZS5zaG93KCk7
CisgICAgdGhpcy5kcmF3ZXIudmlzaWJsZVZpZXcgPSB0aGlzLmNvbnNvbGU7Cit9CisKK1dlYklu
c3BlY3Rvci5zaG93Q2hhbmdlcyA9IGZ1bmN0aW9uKCkKK3sKKyAgICB0aGlzLmRyYXdlci52aXNp
YmxlVmlldyA9IHRoaXMuY2hhbmdlczsKIH0KIAogV2ViSW5zcGVjdG9yLnNob3dFbGVtZW50c1Bh
bmVsID0gZnVuY3Rpb24oKQo=
</data>
<flag name="review"
          id="18121"
          type_id="1"
          status="+"
          setter="timothy"
    />
          </attachment>
      

    </bug>

</bugzilla>