<?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>84160</bug_id>
          
          <creation_ts>2012-04-17 10:08:48 -0700</creation_ts>
          <short_desc>Web Inspector: move heap snapshot data grids into their own file</short_desc>
          <delta_ts>2012-04-17 10:18:19 -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="Yury Semikhatsky">yurys</reporter>
          <assigned_to name="Yury Semikhatsky">yurys</assigned_to>
          <cc>apavlov</cc>
    
    <cc>bweinstein</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>604105</commentid>
    <comment_count>0</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-04-17 10:08:48 -0700</bug_when>
    <thetext>Move heap snapshot data grids into their own file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>604112</commentid>
    <comment_count>1</comment_count>
      <attachid>137555</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-04-17 10:14:16 -0700</bug_when>
    <thetext>Created attachment 137555
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>604115</commentid>
    <comment_count>2</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-04-17 10:18:19 -0700</bug_when>
    <thetext>Committed r114392: &lt;http://trac.webkit.org/changeset/114392&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>137555</attachid>
            <date>2012-04-17 10:14:16 -0700</date>
            <delta_ts>2012-04-17 10:16:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-84160-20120417211414.patch</filename>
            <type>text/plain</type>
            <size>45131</size>
            <attacher name="Yury Semikhatsky">yurys</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE0MzYwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzZlMzk2ZmFiYTQ0ODc4
ZTE0NDdmYWVjNTMxMGRiOWZiMGM1ZGJmNy4uOTc2ODgzZTU2ODNmMjUzZGExNzMyYjlhZWU5ZTMw
YjVkYTA2ZmQ4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU2IEBACisyMDEyLTA0LTE3ICBZdXJ5
IFNlbWlraGF0c2t5ICA8eXVyeXNAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYiBJbnNwZWN0
b3I6IG1vdmUgaGVhcCBzbmFwc2hvdCBkYXRhIGdyaWRzIGludG8gdGhlaXIgb3duIGZpbGUKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg0MTYwCisKKyAg
ICAgICAgTW92ZWQgaGVhcCBzbmFwc2hvdCBkYXRhIGdyaWRzIGludG8gYSBzZXBhcmF0ZSBmaWxl
LgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2Vi
Q29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAg
ICAgICAqIGluc3BlY3Rvci9jb21waWxlLWZyb250LWVuZC5weToKKyAgICAgICAgKiBpbnNwZWN0
b3IvZnJvbnQtZW5kL0RhdGFHcmlkLmpzOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQv
SGVhcFNuYXBzaG90RGF0YUdyaWRzLmpzOiBBZGRlZC4KKyAgICAgICAgKFdlYkluc3BlY3Rvci5I
ZWFwU25hcHNob3RTb3J0YWJsZURhdGFHcmlkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFw
U25hcHNob3RTb3J0YWJsZURhdGFHcmlkLnByb3RvdHlwZS5kaXNwb3NlKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5IZWFwU25hcHNob3RTb3J0YWJsZURhdGFHcmlkLnByb3RvdHlwZS5yZXNldFNv
cnRpbmdDYWNoZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90U29ydGFibGVE
YXRhR3JpZC5wcm90b3R5cGUuc29ydGluZ0NoYW5nZWQuU29ydEJ5VHdvRmllbGRzKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RTb3J0YWJsZURhdGFHcmlkLnByb3RvdHlwZS5z
b3J0aW5nQ2hhbmdlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90U29ydGFi
bGVEYXRhR3JpZC5wcm90b3R5cGUudXBkYXRlVmlzaWJsZU5vZGVzKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5IZWFwU25hcHNob3RTb3J0YWJsZURhdGFHcmlkLnByb3RvdHlwZS5vblJlc2l6ZSk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90U29ydGFibGVEYXRhR3JpZC5wcm90
b3R5cGUuX29uU2Nyb2xsKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RTb3J0
YWJsZURhdGFHcmlkLnByb3RvdHlwZS5fcGVyZm9ybVNvcnRpbmcpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLkhlYXBTbmFwc2hvdFNvcnRhYmxlRGF0YUdyaWQucHJvdG90eXBlLnJlY3Vyc2l2ZVNv
cnRpbmdFbnRlcik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90U29ydGFibGVE
YXRhR3JpZC5wcm90b3R5cGUucmVjdXJzaXZlU29ydGluZ0xlYXZlKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5IZWFwU25hcHNob3RDb250YWlubWVudERhdGFHcmlkKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5IZWFwU25hcHNob3RDb250YWlubWVudERhdGFHcmlkLnByb3RvdHlwZS5fZGVmYXVs
dFBvcHVsYXRlQ291bnQuMTAwLmV4cGFuZFJvdXRlLm5leHRTdGVwLmVsc2UuYWZ0ZXJFeHBhbmQp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdENvbnRhaW5tZW50RGF0YUdyaWQu
cHJvdG90eXBlLl9kZWZhdWx0UG9wdWxhdGVDb3VudC4xMDAuZXhwYW5kUm91dGUpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdENvbnRhaW5tZW50RGF0YUdyaWQucHJvdG90eXBl
LnNldERhdGFTb3VyY2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdENvbnRh
aW5tZW50RGF0YUdyaWQucHJvdG90eXBlLnNvcnRpbmdDaGFuZ2VkKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5IZWFwU25hcHNob3RSZXRhaW5tZW50RGF0YUdyaWQpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLkhlYXBTbmFwc2hvdFJldGFpbm1lbnREYXRhR3JpZC5wcm90b3R5cGUuX3NvcnRGaWVs
ZHMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFJldGFpbm1lbnREYXRhR3Jp
ZC5wcm90b3R5cGUucmVzZXQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdENv
bnN0cnVjdG9yc0RhdGFHcmlkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RD
b25zdHJ1Y3RvcnNEYXRhR3JpZC5wcm90b3R5cGUuX2RlZmF1bHRQb3B1bGF0ZUNvdW50LjEwMC5f
c29ydEZpZWxkcyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Q29uc3RydWN0
b3JzRGF0YUdyaWQucHJvdG90eXBlLnNldERhdGFTb3VyY2UpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLkhlYXBTbmFwc2hvdENvbnN0cnVjdG9yc0RhdGFHcmlkLnByb3RvdHlwZS5wb3B1bGF0ZUNo
aWxkcmVuKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RDb25zdHJ1Y3RvcnNE
YXRhR3JpZC5wcm90b3R5cGUuX2ZpbHRlclNlbGVjdEluZGV4Q2hhbmdlZCk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RGlmZkRhdGFHcmlkKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5IZWFwU25hcHNob3REaWZmRGF0YUdyaWQucHJvdG90eXBlLl9kZWZhdWx0UG9wdWxhdGVD
b3VudC41MC5fc29ydEZpZWxkcyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90
RGlmZkRhdGFHcmlkLnByb3RvdHlwZS5zZXREYXRhU291cmNlKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5IZWFwU25hcHNob3REaWZmRGF0YUdyaWQucHJvdG90eXBlLl9iYXNlUHJvZmlsZUluZGV4
Q2hhbmdlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RGlmZkRhdGFHcmlk
LnByb3RvdHlwZS5zZXRCYXNlRGF0YVNvdXJjZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVh
cFNuYXBzaG90RGlmZkRhdGFHcmlkLnByb3RvdHlwZS5wb3B1bGF0ZUNoaWxkcmVuLmJhc2VBZ2dy
ZWdhdGVzUmVjZWl2ZWQuYWdncmVnYXRlc1JlY2VpdmVkLmFkZE5vZGVJZk5vblplcm9EaWZmKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3REaWZmRGF0YUdyaWQucHJvdG90eXBl
LnBvcHVsYXRlQ2hpbGRyZW4uYmFzZUFnZ3JlZ2F0ZXNSZWNlaXZlZC5hZ2dyZWdhdGVzUmVjZWl2
ZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdERpZmZEYXRhR3JpZC5wcm90
b3R5cGUucG9wdWxhdGVDaGlsZHJlbik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBz
aG90RG9taW5hdG9yc0RhdGFHcmlkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNo
b3REb21pbmF0b3JzRGF0YUdyaWQucHJvdG90eXBlLl9kZWZhdWx0UG9wdWxhdGVDb3VudC4yNS5z
ZXREYXRhU291cmNlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3REb21pbmF0
b3JzRGF0YUdyaWQucHJvdG90eXBlLnNvcnRpbmdDaGFuZ2VkKToKKyAgICAgICAgKiBpbnNwZWN0
b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hvdFZpZXcuanM6CisgICAgICAgICogaW5zcGVjdG9yL2Zy
b250LWVuZC9XZWJLaXQucXJjOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVj
dG9yLmh0bWw6CisKIDIwMTItMDQtMTcgIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIEludHJvZHVjZSBhbiBpbnRlcm5hbCBmZWF0dXJlIGZvciBhIGZpeGVkIHBs
YWNlaG9sZGVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggZDA3OGIyYzk1NzZkMDdjYjY4ZWEzMDRiZWRi
ZDFlMmNhMzNjNGI2Yy4uNGU3MmY0Y2YzMzNmMzJiMzA5MTcwYzIxOTE1MTQ2NzQ3M2ZhMmVjZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQpAQCAtNjMzNSw2ICs2MzM1LDcgQEAKICAgICAgICAgICAgICdpbnNw
ZWN0b3IvZnJvbnQtZW5kL0hBUkVudHJ5LmpzJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJv
bnQtZW5kL0hhbmRsZXJSZWdpc3RyeS5qcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250
LWVuZC9IZWFwU25hcHNob3QuanMnLAorICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQv
SGVhcFNuYXBzaG90RGF0YUdyaWRzLmpzJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQt
ZW5kL0hlYXBTbmFwc2hvdEdyaWROb2Rlcy5qcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zy
b250LWVuZC9IZWFwU25hcHNob3RQcm94eS5qcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zy
b250LWVuZC9IZWFwU25hcHNob3RWaWV3LmpzJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52
Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXggYjkyYjE5ZTM4NTZkZGQzNjlhNjkzYzc3OTdiNDhl
ZTlhM2VkYzUyZS4uYWZiMTk4NGMyNmQyZDczMThkNjM4YTRiOTJmZTRiZTEwMWJiMDNmZSAxMDA3
NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKKysr
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKQEAgLTc0MDQx
LDYgKzc0MDQxLDEwIEBACiAJCQkJCT4KIAkJCQk8L0ZpbGU+CiAJCQkJPEZpbGUKKwkJCQkJUmVs
YXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXEhlYXBTbmFwc2hvdERhdGFHcmlkcy5q
cyIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XGluc3BlY3Rvclxmcm9udC1lbmRcSGVhcFNuYXBzaG90R3JpZE5vZGVzLmpzIgogCQkJCQk+CiAJ
CQkJPC9GaWxlPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2NvbXBpbGUt
ZnJvbnQtZW5kLnB5IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2NvbXBpbGUtZnJvbnQtZW5k
LnB5CmluZGV4IGNlMzE1MWEwZWU4NjQ4ZmVhMTMxZWEyZjU0YWJhMTIzNWUyNTcwZTQuLjRhMTZj
OTg0YzQ2YWVmZTZkZWFkODNhMmYyMzIxMmYyZWNiYjM2N2YgMTAwNzU1Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9jb21waWxlLWZyb250LWVuZC5weQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvY29tcGlsZS1mcm9udC1lbmQucHkKQEAgLTI3OSw2ICsyNzksNyBAQCBtb2R1
bGVzID0gWwogICAgICAgICAgICAgIkJvdHRvbVVwUHJvZmlsZURhdGFHcmlkVHJlZS5qcyIsCiAg
ICAgICAgICAgICAiQ1NTU2VsZWN0b3JQcm9maWxlVmlldy5qcyIsCiAgICAgICAgICAgICAiSGVh
cFNuYXBzaG90LmpzIiwKKyAgICAgICAgICAgICJIZWFwU25hcHNob3REYXRhR3JpZHMuanMiLAog
ICAgICAgICAgICAgIkhlYXBTbmFwc2hvdEdyaWROb2Rlcy5qcyIsCiAgICAgICAgICAgICAiSGVh
cFNuYXBzaG90UHJveHkuanMiLAogICAgICAgICAgICAgIkhlYXBTbmFwc2hvdFZpZXcuanMiLApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9EYXRhR3JpZC5q
cyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRGF0YUdyaWQuanMKaW5kZXgg
MjM3NmRlNDMwZTQ0YjkzM2E4NDg4M2NlYTFhNjMxZGQwNzkxNjIxNC4uOTA1MmVkNTg4MTg1M2U5
MzdjODhmZTNmNTcyYThiYzUzNDQ3OTZjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9EYXRhR3JpZC5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL0RhdGFHcmlkLmpzCkBAIC0zNzEsNiArMzcxLDkgQEAgV2ViSW5zcGVjdG9y
LkRhdGFHcmlkLnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5fZWRpdGluZ05vZGUgPSBudWxs
OwogICAgIH0sCiAKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIHs/c3RyaW5nfQorICAgICAqLwog
ICAgIGdldCBzb3J0Q29sdW1uSWRlbnRpZmllcigpCiAgICAgewogICAgICAgICBpZiAoIXRoaXMu
X3NvcnRDb2x1bW5DZWxsKQpAQCAtMzc4LDYgKzM4MSw5IEBAIFdlYkluc3BlY3Rvci5EYXRhR3Jp
ZC5wcm90b3R5cGUgPSB7CiAgICAgICAgIHJldHVybiB0aGlzLl9zb3J0Q29sdW1uQ2VsbC5jb2x1
bW5JZGVudGlmaWVyOwogICAgIH0sCiAKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIHs/c3RyaW5n
fQorICAgICAqLwogICAgIGdldCBzb3J0T3JkZXIoKQogICAgIHsKICAgICAgICAgaWYgKCF0aGlz
Ll9zb3J0Q29sdW1uQ2VsbCB8fCB0aGlzLl9zb3J0Q29sdW1uQ2VsbC5oYXNTdHlsZUNsYXNzKCJz
b3J0LWFzY2VuZGluZyIpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9IZWFwU25hcHNob3REYXRhR3JpZHMuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hvdERhdGFHcmlkcy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jNmE0NDc1
Y2M1ZjVmOTU4ZmFjOTg2MmY5MzgyNTU0NDkyYmFjMWRkCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3REYXRhR3JpZHMuanMK
QEAgLTAsMCArMSw0OTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
KyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvKioKKyAqIEBjb25zdHJ1Y3RvcgorICogQGV4dGVuZHMge1dlYklu
c3BlY3Rvci5EYXRhR3JpZH0KKyAqIEBwYXJhbSB7Ym9vbGVhbj19IGRlZmVyTm9kZUNvbnRlbnRD
cmVhdGlvbgorICovCitXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90U29ydGFibGVEYXRhR3JpZCA9
IGZ1bmN0aW9uKGNvbHVtbnMsIGRlZmVyTm9kZUNvbnRlbnRDcmVhdGlvbikKK3sKKyAgICBXZWJJ
bnNwZWN0b3IuRGF0YUdyaWQuY2FsbCh0aGlzLCBjb2x1bW5zKTsKKyAgICB0aGlzLmFkZEV2ZW50
TGlzdGVuZXIoInNvcnRpbmcgY2hhbmdlZCIsIHRoaXMuc29ydGluZ0NoYW5nZWQsIHRoaXMpOwor
CisgICAgdGhpcy5fZGVmZXJOb2RlQ29udGVudENyZWF0aW9uID0gZGVmZXJOb2RlQ29udGVudENy
ZWF0aW9uOworICAgIGlmIChkZWZlck5vZGVDb250ZW50Q3JlYXRpb24pCisgICAgICAgIHRoaXMu
c2Nyb2xsQ29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoInNjcm9sbCIsIHRoaXMuX29uU2Nyb2xs
LmJpbmQodGhpcyksIHRydWUpOworfQorCitXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90U29ydGFi
bGVEYXRhR3JpZC5wcm90b3R5cGUgPSB7CisgICAgZGlzcG9zZTogZnVuY3Rpb24oKQorICAgIHsK
KyAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGw7
ICsraSkKKyAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5baV0uZGlzcG9zZSgpOworICAgIH0sCisK
KyAgICByZXNldFNvcnRpbmdDYWNoZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgZGVsZXRl
IHRoaXMuX2xhc3RTb3J0Q29sdW1uSWRlbnRpZmllcjsKKyAgICAgICAgZGVsZXRlIHRoaXMuX2xh
c3RTb3J0QXNjZW5kaW5nOworICAgIH0sCisKKyAgICBjaGFuZ2VOYW1lRmlsdGVyOiBmdW5jdGlv
bihmaWx0ZXIpCisgICAgeworICAgICAgICB2YXIgZmlsdGVyID0gZmlsdGVyLnRvTG93ZXJDYXNl
KCk7CisgICAgICAgIHZhciBjaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW47CisgICAgICAgIGZvciAo
dmFyIGkgPSAwLCBsID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbDsgKytpKSB7CisgICAgICAgICAg
ICB2YXIgbm9kZSA9IGNoaWxkcmVuW2ldOworICAgICAgICAgICAgaWYgKG5vZGUuZGVwdGggPT09
IDApCisgICAgICAgICAgICAgICAgbm9kZS5yZXZlYWxlZCA9IG5vZGUuX25hbWUudG9Mb3dlckNh
c2UoKS5pbmRleE9mKGZpbHRlcikgIT09IC0xOworICAgICAgICB9CisgICAgICAgIHRoaXMudXBk
YXRlVmlzaWJsZU5vZGVzKCk7CisgICAgfSwKKworICAgIHNvcnRpbmdDaGFuZ2VkOiBmdW5jdGlv
bigpCisgICAgeworICAgICAgICB2YXIgc29ydEFzY2VuZGluZyA9IHRoaXMuc29ydE9yZGVyID09
PSAiYXNjZW5kaW5nIjsKKyAgICAgICAgdmFyIHNvcnRDb2x1bW5JZGVudGlmaWVyID0gdGhpcy5z
b3J0Q29sdW1uSWRlbnRpZmllcjsKKyAgICAgICAgaWYgKHRoaXMuX2xhc3RTb3J0Q29sdW1uSWRl
bnRpZmllciA9PT0gc29ydENvbHVtbklkZW50aWZpZXIgJiYgdGhpcy5fbGFzdFNvcnRBc2NlbmRp
bmcgPT09IHNvcnRBc2NlbmRpbmcpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHRoaXMu
X2xhc3RTb3J0Q29sdW1uSWRlbnRpZmllciA9IHNvcnRDb2x1bW5JZGVudGlmaWVyOworICAgICAg
ICB0aGlzLl9sYXN0U29ydEFzY2VuZGluZyA9IHNvcnRBc2NlbmRpbmc7CisgICAgICAgIHZhciBz
b3J0RmllbGRzID0gdGhpcy5fc29ydEZpZWxkcyhzb3J0Q29sdW1uSWRlbnRpZmllciwgc29ydEFz
Y2VuZGluZyk7CisKKyAgICAgICAgZnVuY3Rpb24gU29ydEJ5VHdvRmllbGRzKG5vZGVBLCBub2Rl
QikKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIGZpZWxkMSA9IG5vZGVBW3NvcnRGaWVsZHNb
MF1dOworICAgICAgICAgICAgdmFyIGZpZWxkMiA9IG5vZGVCW3NvcnRGaWVsZHNbMF1dOworICAg
ICAgICAgICAgdmFyIHJlc3VsdCA9IGZpZWxkMSA8IGZpZWxkMiA/IC0xIDogKGZpZWxkMSA+IGZp
ZWxkMiA/IDEgOiAwKTsKKyAgICAgICAgICAgIGlmICghc29ydEZpZWxkc1sxXSkKKyAgICAgICAg
ICAgICAgICByZXN1bHQgPSAtcmVzdWx0OworICAgICAgICAgICAgaWYgKHJlc3VsdCAhPT0gMCkK
KyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgZmllbGQxID0gbm9k
ZUFbc29ydEZpZWxkc1syXV07CisgICAgICAgICAgICBmaWVsZDIgPSBub2RlQltzb3J0RmllbGRz
WzJdXTsKKyAgICAgICAgICAgIHJlc3VsdCA9IGZpZWxkMSA8IGZpZWxkMiA/IC0xIDogKGZpZWxk
MSA+IGZpZWxkMiA/IDEgOiAwKTsKKyAgICAgICAgICAgIGlmICghc29ydEZpZWxkc1szXSkKKyAg
ICAgICAgICAgICAgICByZXN1bHQgPSAtcmVzdWx0OworICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9wZXJmb3JtU29ydGluZyhTb3J0QnlUd29GaWVs
ZHMpOworICAgIH0sCisKKyAgICB1cGRhdGVWaXNpYmxlTm9kZXM6IGZ1bmN0aW9uKCkKKyAgICB7
CisgICAgICAgIGlmICghdGhpcy5fZGVmZXJOb2RlQ29udGVudENyZWF0aW9uKQorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB2YXIgc2Nyb2xsVG9wID0gdGhpcy5zY3JvbGxDb250YWluZXIu
c2Nyb2xsVG9wOworICAgICAgICB2YXIgcm93SGVpZ2h0ID0gMTY7CisKKyAgICAgICAgdmFyIGhl
aWdodCA9IHRoaXMuc2Nyb2xsQ29udGFpbmVyLm9mZnNldEhlaWdodDsKKyAgICAgICAgdmFyIHZp
c2libGVSb3dzQ291bnQgPSBNYXRoLnJvdW5kKGhlaWdodCAvIHJvd0hlaWdodCkgKyAxOworCisg
ICAgICAgIHZhciBjaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW47CisKKyAgICAgICAgdmFyIGkgPSAw
OworICAgICAgICB3aGlsZSAoaSA8IGNoaWxkcmVuLmxlbmd0aCkgeworICAgICAgICAgICAgaWYg
KGNoaWxkcmVuW2ldLnJldmVhbGVkKSB7CisgICAgICAgICAgICAgICAgdmFyIHRvcCA9IGNoaWxk
cmVuW2ldLmVsZW1lbnQub2Zmc2V0VG9wOworICAgICAgICAgICAgICAgIGlmICh0b3AgPj0gc2Ny
b2xsVG9wKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICsraTsKKyAgICAgICAgfQorCisgICAgICAgIHdoaWxlIChpIDwgY2hpbGRyZW4ubGVu
Z3RoICYmIHZpc2libGVSb3dzQ291bnQpIHsKKyAgICAgICAgICAgIGlmIChjaGlsZHJlbltpXS5y
ZXZlYWxlZCkgeworICAgICAgICAgICAgICAgIGNoaWxkcmVuW2ldLmVuc3VyZUNvbnRlbnRDcmVh
dGVkKCk7CisgICAgICAgICAgICAgICAgLS12aXNpYmxlUm93c0NvdW50OworICAgICAgICAgICAg
fQorICAgICAgICAgICAgKytpOworICAgICAgICB9CisgICAgfSwKKworICAgIG9uUmVzaXplOiBm
dW5jdGlvbigpCisgICAgeworICAgICAgICB0aGlzLnVwZGF0ZVZpc2libGVOb2RlcygpOworICAg
IH0sCisKKyAgICBfb25TY3JvbGw6IGZ1bmN0aW9uKGV2ZW50KQorICAgIHsKKyAgICAgICAgdGhp
cy51cGRhdGVWaXNpYmxlTm9kZXMoKTsKKyAgICB9LAorCisgICAgX3BlcmZvcm1Tb3J0aW5nOiBm
dW5jdGlvbihzb3J0RnVuY3Rpb24pCisgICAgeworICAgICAgICB0aGlzLnJlY3Vyc2l2ZVNvcnRp
bmdFbnRlcigpOworICAgICAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuOworICAgICAg
ICB0aGlzLnJlbW92ZUNoaWxkcmVuKCk7CisgICAgICAgIGNoaWxkcmVuLnNvcnQoc29ydEZ1bmN0
aW9uKTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBs
OyArK2kpIHsKKyAgICAgICAgICAgIHZhciBjaGlsZCA9IGNoaWxkcmVuW2ldOworICAgICAgICAg
ICAgdmFyIHJldmVhbGVkID0gY2hpbGQucmV2ZWFsZWQ7CisgICAgICAgICAgICB0aGlzLmFwcGVu
ZENoaWxkKGNoaWxkKTsKKyAgICAgICAgICAgIGNoaWxkLnJldmVhbGVkID0gcmV2ZWFsZWQ7Cisg
ICAgICAgICAgICBpZiAoY2hpbGQuZXhwYW5kZWQpCisgICAgICAgICAgICAgICAgY2hpbGQuc29y
dCgpOworICAgICAgICB9CisgICAgICAgIHRoaXMucmVjdXJzaXZlU29ydGluZ0xlYXZlKCk7Cisg
ICAgICAgIHRoaXMudXBkYXRlVmlzaWJsZU5vZGVzKCk7CisgICAgfSwKKworICAgIHJlY3Vyc2l2
ZVNvcnRpbmdFbnRlcjogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgaWYgKCEoIl9yZWN1cnNp
dmVTb3J0aW5nRGVwdGgiIGluIHRoaXMpKQorICAgICAgICAgICAgdGhpcy5fcmVjdXJzaXZlU29y
dGluZ0RlcHRoID0gMTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgKyt0aGlzLl9yZWN1cnNp
dmVTb3J0aW5nRGVwdGg7CisgICAgfSwKKworICAgIHJlY3Vyc2l2ZVNvcnRpbmdMZWF2ZTogZnVu
Y3Rpb24oKQorICAgIHsKKyAgICAgICAgaWYgKCEoIl9yZWN1cnNpdmVTb3J0aW5nRGVwdGgiIGlu
IHRoaXMpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAoIS0tdGhpcy5fcmVjdXJz
aXZlU29ydGluZ0RlcHRoKSB7CisgICAgICAgICAgICBkZWxldGUgdGhpcy5fcmVjdXJzaXZlU29y
dGluZ0RlcHRoOworICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoInNv
cnRpbmcgY29tcGxldGUiKTsKKyAgICAgICAgfQorICAgIH0KK307CisKK1dlYkluc3BlY3Rvci5I
ZWFwU25hcHNob3RTb3J0YWJsZURhdGFHcmlkLnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNw
ZWN0b3IuRGF0YUdyaWQucHJvdG90eXBlOworCisvKioKKyAqIEBjb25zdHJ1Y3RvcgorICogQGV4
dGVuZHMge1dlYkluc3BlY3Rvci5IZWFwU25hcHNob3RTb3J0YWJsZURhdGFHcmlkfQorICogQHBh
cmFtIHtPYmplY3Q9fSBjb2x1bW5zCisgKi8KK1dlYkluc3BlY3Rvci5IZWFwU25hcHNob3RDb250
YWlubWVudERhdGFHcmlkID0gZnVuY3Rpb24oY29sdW1ucykKK3sKKyAgICBjb2x1bW5zID0gY29s
dW1ucyB8fCB7CisgICAgICAgIG9iamVjdDogeyB0aXRsZTogV2ViSW5zcGVjdG9yLlVJU3RyaW5n
KCJPYmplY3QiKSwgZGlzY2xvc3VyZTogdHJ1ZSwgc29ydGFibGU6IHRydWUgfSwKKyAgICAgICAg
c2hhbGxvd1NpemU6IHsgdGl0bGU6IFdlYkluc3BlY3Rvci5VSVN0cmluZygiU2hhbGxvdyBTaXpl
IiksIHdpZHRoOiAiMTIwcHgiLCBzb3J0YWJsZTogdHJ1ZSB9LAorICAgICAgICByZXRhaW5lZFNp
emU6IHsgdGl0bGU6IFdlYkluc3BlY3Rvci5VSVN0cmluZygiUmV0YWluZWQgU2l6ZSIpLCB3aWR0
aDogIjEyMHB4Iiwgc29ydGFibGU6IHRydWUsIHNvcnQ6ICJkZXNjZW5kaW5nIiB9CisgICAgfTsK
KyAgICBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90U29ydGFibGVEYXRhR3JpZC5jYWxsKHRoaXMs
IGNvbHVtbnMpOworfQorCitXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Q29udGFpbm1lbnREYXRh
R3JpZC5wcm90b3R5cGUgPSB7CisgICAgX2RlZmF1bHRQb3B1bGF0ZUNvdW50OiAxMDAsCisKKyAg
ICBleHBhbmRSb3V0ZTogZnVuY3Rpb24ocm91dGUpCisgICAgeworICAgICAgICBmdW5jdGlvbiBu
ZXh0U3RlcChwYXJlbnQsIGhvcEluZGV4KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoaG9w
SW5kZXggPj0gcm91dGUubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgcGFyZW50LmVsZW1lbnQu
c2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCh0cnVlKTsKKyAgICAgICAgICAgICAgICBwYXJlbnQuc2Vs
ZWN0KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgdmFyIG5vZGVJbmRleCA9IHJvdXRlW2hvcEluZGV4XTsKKyAgICAgICAgICAgIGZvciAodmFy
IGkgPSAwLCBsID0gcGFyZW50LmNoaWxkcmVuLmxlbmd0aDsgaSA8IGw7ICsraSkgeworICAgICAg
ICAgICAgICAgIHZhciBjaGlsZCA9IHBhcmVudC5jaGlsZHJlbltpXTsKKyAgICAgICAgICAgICAg
ICBpZiAoY2hpbGQuc25hcHNob3ROb2RlSW5kZXggPT09IG5vZGVJbmRleCkgeworICAgICAgICAg
ICAgICAgICAgICBpZiAoY2hpbGQuZXhwYW5kZWQpCisgICAgICAgICAgICAgICAgICAgICAgICBu
ZXh0U3RlcChjaGlsZCwgaG9wSW5kZXggKyAxKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBhZnRlckV4cGFuZCgpCisgICAgICAg
ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQucmVt
b3ZlRXZlbnRMaXN0ZW5lcigicG9wdWxhdGUgY29tcGxldGUiLCBhZnRlckV4cGFuZCwgbnVsbCk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxhc3RDaGlsZCA9IGNoaWxkLmNoaWxk
cmVuW2NoaWxkLmNoaWxkcmVuLmxlbmd0aCAtIDFdOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICghbGFzdENoaWxkLnNob3dBbGwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5leHRTdGVwKGNoaWxkLCBob3BJbmRleCArIDEpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZC5hZGRF
dmVudExpc3RlbmVyKCJwb3B1bGF0ZSBjb21wbGV0ZSIsIGFmdGVyRXhwYW5kLCBudWxsKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdENoaWxkLnNob3dBbGwuY2xpY2soKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZC5hZGRFdmVudExpc3RlbmVyKCJwb3B1bGF0
ZSBjb21wbGV0ZSIsIGFmdGVyRXhwYW5kLCBudWxsKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNoaWxkLmV4cGFuZCgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICBuZXh0U3RlcCh0aGlzLCAwKTsKKyAgICB9LAorCisgICAgc2V0RGF0YVNvdXJjZTog
ZnVuY3Rpb24oc25hcHNob3RWaWV3LCBzbmFwc2hvdCwgbm9kZUluZGV4KQorICAgIHsKKyAgICAg
ICAgdGhpcy5zbmFwc2hvdFZpZXcgPSBzbmFwc2hvdFZpZXc7CisgICAgICAgIHRoaXMuc25hcHNo
b3QgPSBzbmFwc2hvdDsKKyAgICAgICAgdGhpcy5zbmFwc2hvdE5vZGVJbmRleCA9IG5vZGVJbmRl
eCB8fCB0aGlzLnNuYXBzaG90LnJvb3ROb2RlSW5kZXg7CisgICAgICAgIHRoaXMuX3Byb3ZpZGVy
ID0gdGhpcy5fY3JlYXRlUHJvdmlkZXIoc25hcHNob3QsIHRoaXMuc25hcHNob3ROb2RlSW5kZXgs
IHRoaXMpOworICAgICAgICB0aGlzLnNvcnQoKTsKKyAgICB9LAorCisgICAgc29ydGluZ0NoYW5n
ZWQ6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMuc29ydCgpOworICAgIH0KK307CisK
K01peEluU25hcHNob3ROb2RlRnVuY3Rpb25zKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RPYmpl
Y3ROb2RlLnByb3RvdHlwZSwgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdENvbnRhaW5tZW50RGF0
YUdyaWQucHJvdG90eXBlKTsKK1dlYkluc3BlY3Rvci5IZWFwU25hcHNob3RDb250YWlubWVudERh
dGFHcmlkLnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90U29y
dGFibGVEYXRhR3JpZC5wcm90b3R5cGU7CisKKy8qKgorICogQGNvbnN0cnVjdG9yCisgKiBAZXh0
ZW5kcyB7V2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdENvbnRhaW5tZW50RGF0YUdyaWR9CisgKi8K
K1dlYkluc3BlY3Rvci5IZWFwU25hcHNob3RSZXRhaW5tZW50RGF0YUdyaWQgPSBmdW5jdGlvbigp
Cit7CisgICAgdGhpcy5zaG93UmV0YWluaW5nRWRnZXMgPSB0cnVlOworICAgIHZhciBjb2x1bW5z
ID0geworICAgICAgICBvYmplY3Q6IHsgdGl0bGU6IFdlYkluc3BlY3Rvci5VSVN0cmluZygiT2Jq
ZWN0IiksIGRpc2Nsb3N1cmU6IHRydWUsIHNvcnRhYmxlOiB0cnVlIH0sCisgICAgICAgIHNoYWxs
b3dTaXplOiB7IHRpdGxlOiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlNoYWxsb3cgU2l6ZSIpLCB3
aWR0aDogIjEyMHB4Iiwgc29ydGFibGU6IHRydWUgfSwKKyAgICAgICAgcmV0YWluZWRTaXplOiB7
IHRpdGxlOiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlJldGFpbmVkIFNpemUiKSwgd2lkdGg6ICIx
MjBweCIsIHNvcnRhYmxlOiB0cnVlIH0sCisgICAgICAgIGRpc3RhbmNlVG9XaW5kb3c6IHsgdGl0
bGU6IFdlYkluc3BlY3Rvci5VSVN0cmluZygiRGlzdGFuY2UiKSwgd2lkdGg6ICI4MHB4Iiwgc29y
dGFibGU6IHRydWUsIHNvcnQ6ICJhc2NlbmRpbmciIH0KKyAgICB9OworICAgIFdlYkluc3BlY3Rv
ci5IZWFwU25hcHNob3RDb250YWlubWVudERhdGFHcmlkLmNhbGwodGhpcywgY29sdW1ucyk7Cit9
CisKK1dlYkluc3BlY3Rvci5IZWFwU25hcHNob3RSZXRhaW5tZW50RGF0YUdyaWQucHJvdG90eXBl
ID0geworICAgIF9zb3J0RmllbGRzOiBmdW5jdGlvbihzb3J0Q29sdW1uLCBzb3J0QXNjZW5kaW5n
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgIG9iamVjdDogWyJfbmFtZSIs
IHNvcnRBc2NlbmRpbmcsICJfY291bnQiLCBmYWxzZV0sCisgICAgICAgICAgICBjb3VudDogWyJf
Y291bnQiLCBzb3J0QXNjZW5kaW5nLCAiX25hbWUiLCB0cnVlXSwKKyAgICAgICAgICAgIHNoYWxs
b3dTaXplOiBbIl9zaGFsbG93U2l6ZSIsIHNvcnRBc2NlbmRpbmcsICJfbmFtZSIsIHRydWVdLAor
ICAgICAgICAgICAgcmV0YWluZWRTaXplOiBbIl9yZXRhaW5lZFNpemUiLCBzb3J0QXNjZW5kaW5n
LCAiX25hbWUiLCB0cnVlXSwKKyAgICAgICAgICAgIGRpc3RhbmNlVG9XaW5kb3c6IFsiX2Rpc3Rh
bmNlVG9XaW5kb3ciLCBzb3J0QXNjZW5kaW5nLCAiX25hbWUiLCB0cnVlXQorICAgICAgICB9W3Nv
cnRDb2x1bW5dOworICAgIH0sCisKKyAgICByZXNldDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAg
ICAgdGhpcy5yZW1vdmVDaGlsZHJlbigpOworICAgICAgICB0aGlzLnJlc2V0U29ydGluZ0NhY2hl
KCk7CisgICAgfSwKK30KKworV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFJldGFpbm1lbnREYXRh
R3JpZC5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdENvbnRh
aW5tZW50RGF0YUdyaWQucHJvdG90eXBlOworCisvKioKKyAqIEBjb25zdHJ1Y3RvcgorICogQGV4
dGVuZHMge1dlYkluc3BlY3Rvci5IZWFwU25hcHNob3RTb3J0YWJsZURhdGFHcmlkfQorICovCitX
ZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Q29uc3RydWN0b3JzRGF0YUdyaWQgPSBmdW5jdGlvbigp
Cit7CisgICAgdmFyIGNvbHVtbnMgPSB7CisgICAgICAgIG9iamVjdDogeyB0aXRsZTogV2ViSW5z
cGVjdG9yLlVJU3RyaW5nKCJDb25zdHJ1Y3RvciIpLCBkaXNjbG9zdXJlOiB0cnVlLCBzb3J0YWJs
ZTogdHJ1ZSB9LAorICAgICAgICBkaXN0YW5jZVRvV2luZG93OiB7IHRpdGxlOiBXZWJJbnNwZWN0
b3IuVUlTdHJpbmcoIkRpc3RhbmNlIiksIHdpZHRoOiAiOTBweCIsIHNvcnRhYmxlOiB0cnVlIH0s
CisgICAgICAgIGNvdW50OiB7IHRpdGxlOiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIk9iamVjdHMg
Q291bnQiKSwgd2lkdGg6ICI5MHB4Iiwgc29ydGFibGU6IHRydWUgfSwKKyAgICAgICAgc2hhbGxv
d1NpemU6IHsgdGl0bGU6IFdlYkluc3BlY3Rvci5VSVN0cmluZygiU2hhbGxvdyBTaXplIiksIHdp
ZHRoOiAiMTIwcHgiLCBzb3J0YWJsZTogdHJ1ZSB9LAorICAgICAgICByZXRhaW5lZFNpemU6IHsg
dGl0bGU6IFdlYkluc3BlY3Rvci5VSVN0cmluZygiUmV0YWluZWQgU2l6ZSIpLCB3aWR0aDogIjEy
MHB4Iiwgc29ydDogImRlc2NlbmRpbmciLCBzb3J0YWJsZTogdHJ1ZSB9CisgICAgfTsKKyAgICBX
ZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90U29ydGFibGVEYXRhR3JpZC5jYWxsKHRoaXMsIGNvbHVt
bnMsIHRydWUpOworICAgIHRoaXMuX3Byb2ZpbGVJbmRleCA9IC0xOworfQorCitXZWJJbnNwZWN0
b3IuSGVhcFNuYXBzaG90Q29uc3RydWN0b3JzRGF0YUdyaWQucHJvdG90eXBlID0geworICAgIF9k
ZWZhdWx0UG9wdWxhdGVDb3VudDogMTAwLAorCisgICAgX3NvcnRGaWVsZHM6IGZ1bmN0aW9uKHNv
cnRDb2x1bW4sIHNvcnRBc2NlbmRpbmcpCisgICAgeworICAgICAgICByZXR1cm4geworICAgICAg
ICAgICAgb2JqZWN0OiBbIl9uYW1lIiwgc29ydEFzY2VuZGluZywgIl9jb3VudCIsIGZhbHNlXSwK
KyAgICAgICAgICAgIGRpc3RhbmNlVG9XaW5kb3c6IFsiX2Rpc3RhbmNlVG9XaW5kb3ciLCBzb3J0
QXNjZW5kaW5nLCAiX3JldGFpbmVkU2l6ZSIsIHRydWVdLAorICAgICAgICAgICAgY291bnQ6IFsi
X2NvdW50Iiwgc29ydEFzY2VuZGluZywgIl9uYW1lIiwgdHJ1ZV0sCisgICAgICAgICAgICBzaGFs
bG93U2l6ZTogWyJfc2hhbGxvd1NpemUiLCBzb3J0QXNjZW5kaW5nLCAiX25hbWUiLCB0cnVlXSwK
KyAgICAgICAgICAgIHJldGFpbmVkU2l6ZTogWyJfcmV0YWluZWRTaXplIiwgc29ydEFzY2VuZGlu
ZywgIl9uYW1lIiwgdHJ1ZV0KKyAgICAgICAgfVtzb3J0Q29sdW1uXTsKKyAgICB9LAorCisgICAg
c2V0RGF0YVNvdXJjZTogZnVuY3Rpb24oc25hcHNob3RWaWV3LCBzbmFwc2hvdCkKKyAgICB7Cisg
ICAgICAgIHRoaXMuc25hcHNob3RWaWV3ID0gc25hcHNob3RWaWV3OworICAgICAgICB0aGlzLnNu
YXBzaG90ID0gc25hcHNob3Q7CisgICAgICAgIGlmICh0aGlzLl9wcm9maWxlSW5kZXggPT09IC0x
KQorICAgICAgICAgICAgdGhpcy5wb3B1bGF0ZUNoaWxkcmVuKCk7CisgICAgfSwKKworICAgIHBv
cHVsYXRlQ2hpbGRyZW46IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGZ1bmN0aW9uIGFnZ3Jl
Z2F0ZXNSZWNlaXZlZChrZXksIGFnZ3JlZ2F0ZXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZv
ciAodmFyIGNvbnN0cnVjdG9yIGluIGFnZ3JlZ2F0ZXMpCisgICAgICAgICAgICAgICAgdGhpcy5h
cHBlbmRDaGlsZChuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdENvbnN0cnVjdG9yTm9kZSh0
aGlzLCBjb25zdHJ1Y3RvciwgYWdncmVnYXRlc1tjb25zdHJ1Y3Rvcl0sIGtleSkpOworICAgICAg
ICAgICAgdGhpcy5zb3J0aW5nQ2hhbmdlZCgpOworICAgICAgICB9CisKKyAgICAgICAgdGhpcy5k
aXNwb3NlKCk7CisgICAgICAgIHRoaXMucmVtb3ZlQ2hpbGRyZW4oKTsKKyAgICAgICAgdGhpcy5y
ZXNldFNvcnRpbmdDYWNoZSgpOworCisgICAgICAgIHZhciBrZXkgPSB0aGlzLl9wcm9maWxlSW5k
ZXggPT09IC0xID8gImFsbE9iamVjdHMiIDogdGhpcy5fbWluTm9kZUlkICsgIi4uIiArIHRoaXMu
X21heE5vZGVJZDsKKyAgICAgICAgdmFyIGZpbHRlciA9IHRoaXMuX3Byb2ZpbGVJbmRleCA9PT0g
LTEgPyBudWxsIDogImZ1bmN0aW9uKG5vZGUpIHsgdmFyIGlkID0gbm9kZS5pZDsgcmV0dXJuIGlk
ID4gIiArIHRoaXMuX21pbk5vZGVJZCArICIgJiYgaWQgPD0gIiArIHRoaXMuX21heE5vZGVJZCAr
ICI7IH0iOworCisgICAgICAgIHRoaXMuc25hcHNob3QuYWdncmVnYXRlcyhmYWxzZSwga2V5LCBm
aWx0ZXIsIGFnZ3JlZ2F0ZXNSZWNlaXZlZC5iaW5kKHRoaXMsIGtleSkpOworICAgIH0sCisKKyAg
ICBfZmlsdGVyU2VsZWN0SW5kZXhDaGFuZ2VkOiBmdW5jdGlvbihwcm9maWxlcywgcHJvZmlsZUlu
ZGV4KQorICAgIHsKKyAgICAgICAgdGhpcy5fcHJvZmlsZUluZGV4ID0gcHJvZmlsZUluZGV4Owor
CisgICAgICAgIGRlbGV0ZSB0aGlzLl9tYXhOb2RlSWQ7CisgICAgICAgIGRlbGV0ZSB0aGlzLl9t
aW5Ob2RlSWQ7CisKKyAgICAgICAgaWYgKHRoaXMuX3Byb2ZpbGVJbmRleCAhPT0gLTEpIHsKKyAg
ICAgICAgICAgIHRoaXMuX21pbk5vZGVJZCA9IHByb2ZpbGVJbmRleCA+IDAgPyBwcm9maWxlc1tw
cm9maWxlSW5kZXggLSAxXS5tYXhKU09iamVjdElkIDogMDsKKyAgICAgICAgICAgIHRoaXMuX21h
eE5vZGVJZCA9IHByb2ZpbGVzW3Byb2ZpbGVJbmRleF0ubWF4SlNPYmplY3RJZDsKKyAgICAgICAg
fQorCisgICAgICAgIHRoaXMucG9wdWxhdGVDaGlsZHJlbigpOworICAgIH0sCisKK307CisKK1dl
Ykluc3BlY3Rvci5IZWFwU25hcHNob3RDb25zdHJ1Y3RvcnNEYXRhR3JpZC5wcm90b3R5cGUuX19w
cm90b19fID0gV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFNvcnRhYmxlRGF0YUdyaWQucHJvdG90
eXBlOworCisvKioKKyAqIEBjb25zdHJ1Y3RvcgorICogQGV4dGVuZHMge1dlYkluc3BlY3Rvci5I
ZWFwU25hcHNob3RTb3J0YWJsZURhdGFHcmlkfQorICovCitXZWJJbnNwZWN0b3IuSGVhcFNuYXBz
aG90RGlmZkRhdGFHcmlkID0gZnVuY3Rpb24oKQoreworICAgIHZhciBjb2x1bW5zID0geworICAg
ICAgICBvYmplY3Q6IHsgdGl0bGU6IFdlYkluc3BlY3Rvci5VSVN0cmluZygiQ29uc3RydWN0b3Ii
KSwgZGlzY2xvc3VyZTogdHJ1ZSwgc29ydGFibGU6IHRydWUgfSwKKyAgICAgICAgYWRkZWRDb3Vu
dDogeyB0aXRsZTogV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCIjIE5ldyIpLCB3aWR0aDogIjcycHgi
LCBzb3J0YWJsZTogdHJ1ZSB9LAorICAgICAgICByZW1vdmVkQ291bnQ6IHsgdGl0bGU6IFdlYklu
c3BlY3Rvci5VSVN0cmluZygiIyBEZWxldGVkIiksIHdpZHRoOiAiNzJweCIsIHNvcnRhYmxlOiB0
cnVlIH0sCisgICAgICAgIGNvdW50RGVsdGE6IHsgdGl0bGU6ICIjIERlbHRhIiwgd2lkdGg6ICI2
NHB4Iiwgc29ydGFibGU6IHRydWUgfSwKKyAgICAgICAgYWRkZWRTaXplOiB7IHRpdGxlOiBXZWJJ
bnNwZWN0b3IuVUlTdHJpbmcoIkFsbG9jLiBTaXplIiksIHdpZHRoOiAiNzJweCIsIHNvcnRhYmxl
OiB0cnVlLCBzb3J0OiAiZGVzY2VuZGluZyIgfSwKKyAgICAgICAgcmVtb3ZlZFNpemU6IHsgdGl0
bGU6IFdlYkluc3BlY3Rvci5VSVN0cmluZygiRnJlZWQgU2l6ZSIpLCB3aWR0aDogIjcycHgiLCBz
b3J0YWJsZTogdHJ1ZSB9LAorICAgICAgICBzaXplRGVsdGE6IHsgdGl0bGU6ICJTaXplIERlbHRh
Iiwgd2lkdGg6ICI3MnB4Iiwgc29ydGFibGU6IHRydWUgfQorICAgIH07CisgICAgV2ViSW5zcGVj
dG9yLkhlYXBTbmFwc2hvdFNvcnRhYmxlRGF0YUdyaWQuY2FsbCh0aGlzLCBjb2x1bW5zLCB0cnVl
KTsKK30KKworV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdERpZmZEYXRhR3JpZC5wcm90b3R5cGUg
PSB7CisgICAgX2RlZmF1bHRQb3B1bGF0ZUNvdW50OiA1MCwKKworICAgIF9zb3J0RmllbGRzOiBm
dW5jdGlvbihzb3J0Q29sdW1uLCBzb3J0QXNjZW5kaW5nKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHsKKyAgICAgICAgICAgIG9iamVjdDogWyJfbmFtZSIsIHNvcnRBc2NlbmRpbmcsICJfY291bnQi
LCBmYWxzZV0sCisgICAgICAgICAgICBhZGRlZENvdW50OiBbIl9hZGRlZENvdW50Iiwgc29ydEFz
Y2VuZGluZywgIl9uYW1lIiwgdHJ1ZV0sCisgICAgICAgICAgICByZW1vdmVkQ291bnQ6IFsiX3Jl
bW92ZWRDb3VudCIsIHNvcnRBc2NlbmRpbmcsICJfbmFtZSIsIHRydWVdLAorICAgICAgICAgICAg
Y291bnREZWx0YTogWyJfY291bnREZWx0YSIsIHNvcnRBc2NlbmRpbmcsICJfbmFtZSIsIHRydWVd
LAorICAgICAgICAgICAgYWRkZWRTaXplOiBbIl9hZGRlZFNpemUiLCBzb3J0QXNjZW5kaW5nLCAi
X25hbWUiLCB0cnVlXSwKKyAgICAgICAgICAgIHJlbW92ZWRTaXplOiBbIl9yZW1vdmVkU2l6ZSIs
IHNvcnRBc2NlbmRpbmcsICJfbmFtZSIsIHRydWVdLAorICAgICAgICAgICAgc2l6ZURlbHRhOiBb
Il9zaXplRGVsdGEiLCBzb3J0QXNjZW5kaW5nLCAiX25hbWUiLCB0cnVlXQorICAgICAgICB9W3Nv
cnRDb2x1bW5dOworICAgIH0sCisKKyAgICBzZXREYXRhU291cmNlOiBmdW5jdGlvbihzbmFwc2hv
dFZpZXcsIHNuYXBzaG90KQorICAgIHsKKyAgICAgICAgdGhpcy5zbmFwc2hvdFZpZXcgPSBzbmFw
c2hvdFZpZXc7CisgICAgICAgIHRoaXMuc25hcHNob3QgPSBzbmFwc2hvdDsKKyAgICB9LAorCisg
ICAgX2Jhc2VQcm9maWxlSW5kZXhDaGFuZ2VkOiBmdW5jdGlvbihsb2FkZXIsIHByb2ZpbGVJbmRl
eCkKKyAgICB7CisgICAgICAgIGxvYWRlcihwcm9maWxlSW5kZXgsIHRoaXMuc2V0QmFzZURhdGFT
b3VyY2UuYmluZCh0aGlzKSk7CisgICAgfSwKKworICAgIHNldEJhc2VEYXRhU291cmNlOiBmdW5j
dGlvbihiYXNlU25hcHNob3QpCisgICAgeworICAgICAgICB0aGlzLmJhc2VTbmFwc2hvdCA9IGJh
c2VTbmFwc2hvdDsKKyAgICAgICAgdGhpcy5kaXNwb3NlKCk7CisgICAgICAgIHRoaXMucmVtb3Zl
Q2hpbGRyZW4oKTsKKyAgICAgICAgdGhpcy5yZXNldFNvcnRpbmdDYWNoZSgpOworICAgICAgICBp
ZiAodGhpcy5iYXNlU25hcHNob3QgPT09IHRoaXMuc25hcHNob3QpIHsKKyAgICAgICAgICAgIHRo
aXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKCJzb3J0aW5nIGNvbXBsZXRlIik7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5wb3B1bGF0ZUNoaWxkcmVuKCk7
CisgICAgfSwKKworICAgIHBvcHVsYXRlQ2hpbGRyZW46IGZ1bmN0aW9uKCkKKyAgICB7CisgICAg
ICAgIGZ1bmN0aW9uIGJhc2VBZ2dyZWdhdGVzUmVjZWl2ZWQoYmFzZUNsYXNzZXMpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGZ1bmN0aW9uIGFnZ3JlZ2F0ZXNSZWNlaXZlZChjbGFzc2VzKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHZhciBub2RlQ291bnQgPSAwOworICAgICAgICAg
ICAgICAgIHZhciBub2RlcyA9IFtdOworICAgICAgICAgICAgICAgIGZvciAodmFyIGNsc3MgaW4g
YmFzZUNsYXNzZXMpCisgICAgICAgICAgICAgICAgICAgIG5vZGVzLnB1c2gobmV3IFdlYkluc3Bl
Y3Rvci5IZWFwU25hcHNob3REaWZmTm9kZSh0aGlzLCBjbHNzLCBiYXNlQ2xhc3Nlc1tjbHNzXSwg
Y2xhc3Nlc1tjbHNzXSkpOworICAgICAgICAgICAgICAgIGZvciAoY2xzcyBpbiBjbGFzc2VzKSB7
CisgICAgICAgICAgICAgICAgICAgIGlmICghKGNsc3MgaW4gYmFzZUNsYXNzZXMpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgbm9kZXMucHVzaChuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hv
dERpZmZOb2RlKHRoaXMsIGNsc3MsIG51bGwsIGNsYXNzZXNbY2xzc10pKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgbm9kZUNvdW50ID0gbm9kZXMubGVuZ3RoOworICAgICAg
ICAgICAgICAgIGZ1bmN0aW9uIGFkZE5vZGVJZk5vblplcm9EaWZmKGJvdW5kTm9kZSwgemVyb0Rp
ZmYpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAoIXplcm9EaWZm
KQorICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHBlbmRDaGlsZChib3VuZE5vZGUpOwor
ICAgICAgICAgICAgICAgICAgICBpZiAoIS0tbm9kZUNvdW50KQorICAgICAgICAgICAgICAgICAg
ICAgICAgdGhpcy5zb3J0aW5nQ2hhbmdlZCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IG5vZGVzLmxlbmd0aDsgaSA8IGw7ICsraSkgewor
ICAgICAgICAgICAgICAgICAgICB2YXIgbm9kZSA9IG5vZGVzW2ldOworICAgICAgICAgICAgICAg
ICAgICBub2RlLmNhbGN1bGF0ZURpZmYodGhpcywgYWRkTm9kZUlmTm9uWmVyb0RpZmYuYmluZCh0
aGlzLCBub2RlKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAg
ICAgdGhpcy5zbmFwc2hvdC5hZ2dyZWdhdGVzKHRydWUsICJhbGxPYmplY3RzIiwgbnVsbCwgYWdn
cmVnYXRlc1JlY2VpdmVkLmJpbmQodGhpcykpOworICAgICAgICB9CisgICAgICAgIHRoaXMuYmFz
ZVNuYXBzaG90LmFnZ3JlZ2F0ZXModHJ1ZSwgImFsbE9iamVjdHMiLCBudWxsLCBiYXNlQWdncmVn
YXRlc1JlY2VpdmVkLmJpbmQodGhpcykpOworICAgIH0KK307CisKK1dlYkluc3BlY3Rvci5IZWFw
U25hcHNob3REaWZmRGF0YUdyaWQucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5I
ZWFwU25hcHNob3RTb3J0YWJsZURhdGFHcmlkLnByb3RvdHlwZTsKKworLyoqCisgKiBAY29uc3Ry
dWN0b3IKKyAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90U29ydGFibGVEYXRh
R3JpZH0KKyAqLworV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdERvbWluYXRvcnNEYXRhR3JpZCA9
IGZ1bmN0aW9uKCkKK3sKKyAgICB2YXIgY29sdW1ucyA9IHsKKyAgICAgICAgb2JqZWN0OiB7IHRp
dGxlOiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIk9iamVjdCIpLCBkaXNjbG9zdXJlOiB0cnVlLCBz
b3J0YWJsZTogdHJ1ZSB9LAorICAgICAgICBzaGFsbG93U2l6ZTogeyB0aXRsZTogV2ViSW5zcGVj
dG9yLlVJU3RyaW5nKCJTaGFsbG93IFNpemUiKSwgd2lkdGg6ICIxMjBweCIsIHNvcnRhYmxlOiB0
cnVlIH0sCisgICAgICAgIHJldGFpbmVkU2l6ZTogeyB0aXRsZTogV2ViSW5zcGVjdG9yLlVJU3Ry
aW5nKCJSZXRhaW5lZCBTaXplIiksIHdpZHRoOiAiMTIwcHgiLCBzb3J0OiAiZGVzY2VuZGluZyIs
IHNvcnRhYmxlOiB0cnVlIH0KKyAgICB9OworICAgIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RT
b3J0YWJsZURhdGFHcmlkLmNhbGwodGhpcywgY29sdW1ucyk7Cit9CisKK1dlYkluc3BlY3Rvci5I
ZWFwU25hcHNob3REb21pbmF0b3JzRGF0YUdyaWQucHJvdG90eXBlID0geworICAgIF9kZWZhdWx0
UG9wdWxhdGVDb3VudDogMjUsCisKKyAgICBzZXREYXRhU291cmNlOiBmdW5jdGlvbihzbmFwc2hv
dFZpZXcsIHNuYXBzaG90KQorICAgIHsKKyAgICAgICAgdGhpcy5zbmFwc2hvdFZpZXcgPSBzbmFw
c2hvdFZpZXc7CisgICAgICAgIHRoaXMuc25hcHNob3QgPSBzbmFwc2hvdDsKKyAgICAgICAgdGhp
cy5zbmFwc2hvdE5vZGVJbmRleCA9IHRoaXMuc25hcHNob3Qucm9vdE5vZGVJbmRleDsKKyAgICAg
ICAgdGhpcy5fcHJvdmlkZXIgPSB0aGlzLl9jcmVhdGVQcm92aWRlcihzbmFwc2hvdCwgdGhpcy5z
bmFwc2hvdE5vZGVJbmRleCk7CisgICAgICAgIHRoaXMuc29ydCgpOworICAgIH0sCisKKyAgICBz
b3J0aW5nQ2hhbmdlZDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy5zb3J0KCk7Cisg
ICAgfQorfTsKKworTWl4SW5TbmFwc2hvdE5vZGVGdW5jdGlvbnMoV2ViSW5zcGVjdG9yLkhlYXBT
bmFwc2hvdERvbWluYXRvck9iamVjdE5vZGUucHJvdG90eXBlLCBXZWJJbnNwZWN0b3IuSGVhcFNu
YXBzaG90RG9taW5hdG9yc0RhdGFHcmlkLnByb3RvdHlwZSk7CitXZWJJbnNwZWN0b3IuSGVhcFNu
YXBzaG90RG9taW5hdG9yc0RhdGFHcmlkLnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0
b3IuSGVhcFNuYXBzaG90U29ydGFibGVEYXRhR3JpZC5wcm90b3R5cGU7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hvdFZpZXcuanMgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hvdFZpZXcuanMKaW5k
ZXggMTc1OWI5YTM2YmIxN2QxZmMyNTg0MGNhZjEyNDJhMTlmMTk3YWQ2YS4uOGI5M2JjZmRiZDc5
ZDYzMzYzYmNhZDczYmNmZGIyNzJjYzU4YWNmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3RWaWV3LmpzCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90Vmlldy5qcwpAQCAtMzAsNDU4ICsz
MCw2IEBACiAKIC8qKgogICogQGNvbnN0cnVjdG9yCi0gKiBAZXh0ZW5kcyB7V2ViSW5zcGVjdG9y
LkRhdGFHcmlkfQotICogQHBhcmFtIHtib29sZWFuPX0gZGVmZXJOb2RlQ29udGVudENyZWF0aW9u
Ci0gKi8KLVdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RTb3J0YWJsZURhdGFHcmlkID0gZnVuY3Rp
b24oY29sdW1ucywgZGVmZXJOb2RlQ29udGVudENyZWF0aW9uKQotewotICAgIFdlYkluc3BlY3Rv
ci5EYXRhR3JpZC5jYWxsKHRoaXMsIGNvbHVtbnMpOwotICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5l
cigic29ydGluZyBjaGFuZ2VkIiwgdGhpcy5zb3J0aW5nQ2hhbmdlZCwgdGhpcyk7Ci0KLSAgICB0
aGlzLl9kZWZlck5vZGVDb250ZW50Q3JlYXRpb24gPSBkZWZlck5vZGVDb250ZW50Q3JlYXRpb247
Ci0gICAgaWYgKGRlZmVyTm9kZUNvbnRlbnRDcmVhdGlvbikKLSAgICAgICAgdGhpcy5zY3JvbGxD
b250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigic2Nyb2xsIiwgdGhpcy5fb25TY3JvbGwuYmluZCh0
aGlzKSwgdHJ1ZSk7Ci19Ci0KLVdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RTb3J0YWJsZURhdGFH
cmlkLnByb3RvdHlwZSA9IHsKLSAgICBkaXNwb3NlOiBmdW5jdGlvbigpCi0gICAgewotICAgICAg
ICBmb3IgKHZhciBpID0gMCwgbCA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbDsgKytpKQot
ICAgICAgICAgICAgdGhpcy5jaGlsZHJlbltpXS5kaXNwb3NlKCk7Ci0gICAgfSwKLQotICAgIHJl
c2V0U29ydGluZ0NhY2hlOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBkZWxldGUgdGhpcy5f
bGFzdFNvcnRDb2x1bW5JZGVudGlmaWVyOwotICAgICAgICBkZWxldGUgdGhpcy5fbGFzdFNvcnRB
c2NlbmRpbmc7Ci0gICAgfSwKLQotICAgIHNvcnRpbmdDaGFuZ2VkOiBmdW5jdGlvbigpCi0gICAg
ewotICAgICAgICB2YXIgc29ydEFzY2VuZGluZyA9IHRoaXMuc29ydE9yZGVyID09PSAiYXNjZW5k
aW5nIjsKLSAgICAgICAgdmFyIHNvcnRDb2x1bW5JZGVudGlmaWVyID0gdGhpcy5zb3J0Q29sdW1u
SWRlbnRpZmllcjsKLSAgICAgICAgaWYgKHRoaXMuX2xhc3RTb3J0Q29sdW1uSWRlbnRpZmllciA9
PT0gc29ydENvbHVtbklkZW50aWZpZXIgJiYgdGhpcy5fbGFzdFNvcnRBc2NlbmRpbmcgPT09IHNv
cnRBc2NlbmRpbmcpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHRoaXMuX2xhc3RTb3J0
Q29sdW1uSWRlbnRpZmllciA9IHNvcnRDb2x1bW5JZGVudGlmaWVyOwotICAgICAgICB0aGlzLl9s
YXN0U29ydEFzY2VuZGluZyA9IHNvcnRBc2NlbmRpbmc7Ci0gICAgICAgIHZhciBzb3J0RmllbGRz
ID0gdGhpcy5fc29ydEZpZWxkcyhzb3J0Q29sdW1uSWRlbnRpZmllciwgc29ydEFzY2VuZGluZyk7
Ci0KLSAgICAgICAgZnVuY3Rpb24gU29ydEJ5VHdvRmllbGRzKG5vZGVBLCBub2RlQikKLSAgICAg
ICAgewotICAgICAgICAgICAgdmFyIGZpZWxkMSA9IG5vZGVBW3NvcnRGaWVsZHNbMF1dOwotICAg
ICAgICAgICAgdmFyIGZpZWxkMiA9IG5vZGVCW3NvcnRGaWVsZHNbMF1dOwotICAgICAgICAgICAg
dmFyIHJlc3VsdCA9IGZpZWxkMSA8IGZpZWxkMiA/IC0xIDogKGZpZWxkMSA+IGZpZWxkMiA/IDEg
OiAwKTsKLSAgICAgICAgICAgIGlmICghc29ydEZpZWxkc1sxXSkKLSAgICAgICAgICAgICAgICBy
ZXN1bHQgPSAtcmVzdWx0OwotICAgICAgICAgICAgaWYgKHJlc3VsdCAhPT0gMCkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICAgICAgZmllbGQxID0gbm9kZUFbc29ydEZp
ZWxkc1syXV07Ci0gICAgICAgICAgICBmaWVsZDIgPSBub2RlQltzb3J0RmllbGRzWzJdXTsKLSAg
ICAgICAgICAgIHJlc3VsdCA9IGZpZWxkMSA8IGZpZWxkMiA/IC0xIDogKGZpZWxkMSA+IGZpZWxk
MiA/IDEgOiAwKTsKLSAgICAgICAgICAgIGlmICghc29ydEZpZWxkc1szXSkKLSAgICAgICAgICAg
ICAgICByZXN1bHQgPSAtcmVzdWx0OwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAg
ICAgfQotICAgICAgICB0aGlzLl9wZXJmb3JtU29ydGluZyhTb3J0QnlUd29GaWVsZHMpOwotICAg
IH0sCi0KLSAgICB1cGRhdGVWaXNpYmxlTm9kZXM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAg
IGlmICghdGhpcy5fZGVmZXJOb2RlQ29udGVudENyZWF0aW9uKQotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB2YXIgc2Nyb2xsVG9wID0gdGhpcy5zY3JvbGxDb250YWluZXIuc2Nyb2xsVG9w
OwotICAgICAgICB2YXIgcm93SGVpZ2h0ID0gMTY7Ci0KLSAgICAgICAgdmFyIGhlaWdodCA9IHRo
aXMuc2Nyb2xsQ29udGFpbmVyLm9mZnNldEhlaWdodDsKLSAgICAgICAgdmFyIHZpc2libGVSb3dz
Q291bnQgPSBNYXRoLnJvdW5kKGhlaWdodCAvIHJvd0hlaWdodCkgKyAxOwotCi0gICAgICAgIHZh
ciBjaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW47Ci0KLSAgICAgICAgdmFyIGkgPSAwOwotICAgICAg
ICB3aGlsZSAoaSA8IGNoaWxkcmVuLmxlbmd0aCkgewotICAgICAgICAgICAgaWYgKGNoaWxkcmVu
W2ldLnJldmVhbGVkKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHRvcCA9IGNoaWxkcmVuW2ldLmVs
ZW1lbnQub2Zmc2V0VG9wOwotICAgICAgICAgICAgICAgIGlmICh0b3AgPj0gc2Nyb2xsVG9wKQot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICsr
aTsKLSAgICAgICAgfQotCi0gICAgICAgIHdoaWxlIChpIDwgY2hpbGRyZW4ubGVuZ3RoICYmIHZp
c2libGVSb3dzQ291bnQpIHsKLSAgICAgICAgICAgIGlmIChjaGlsZHJlbltpXS5yZXZlYWxlZCkg
ewotICAgICAgICAgICAgICAgIGNoaWxkcmVuW2ldLmVuc3VyZUNvbnRlbnRDcmVhdGVkKCk7Ci0g
ICAgICAgICAgICAgICAgLS12aXNpYmxlUm93c0NvdW50OwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgKytpOwotICAgICAgICB9Ci0gICAgfSwKLQotICAgIG9uUmVzaXplOiBmdW5jdGlvbigp
Ci0gICAgewotICAgICAgICB0aGlzLnVwZGF0ZVZpc2libGVOb2RlcygpOwotICAgIH0sCi0KLSAg
ICBfb25TY3JvbGw6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgdGhpcy51cGRhdGVW
aXNpYmxlTm9kZXMoKTsKLSAgICB9LAotCi0gICAgX3BlcmZvcm1Tb3J0aW5nOiBmdW5jdGlvbihz
b3J0RnVuY3Rpb24pCi0gICAgewotICAgICAgICB0aGlzLnJlY3Vyc2l2ZVNvcnRpbmdFbnRlcigp
OwotICAgICAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuOwotICAgICAgICB0aGlzLnJl
bW92ZUNoaWxkcmVuKCk7Ci0gICAgICAgIGNoaWxkcmVuLnNvcnQoc29ydEZ1bmN0aW9uKTsKLSAg
ICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBsOyArK2kpIHsK
LSAgICAgICAgICAgIHZhciBjaGlsZCA9IGNoaWxkcmVuW2ldOwotICAgICAgICAgICAgdmFyIHJl
dmVhbGVkID0gY2hpbGQucmV2ZWFsZWQ7Ci0gICAgICAgICAgICB0aGlzLmFwcGVuZENoaWxkKGNo
aWxkKTsKLSAgICAgICAgICAgIGNoaWxkLnJldmVhbGVkID0gcmV2ZWFsZWQ7Ci0gICAgICAgICAg
ICBpZiAoY2hpbGQuZXhwYW5kZWQpCi0gICAgICAgICAgICAgICAgY2hpbGQuc29ydCgpOwotICAg
ICAgICB9Ci0gICAgICAgIHRoaXMucmVjdXJzaXZlU29ydGluZ0xlYXZlKCk7Ci0gICAgICAgIHRo
aXMudXBkYXRlVmlzaWJsZU5vZGVzKCk7Ci0gICAgfSwKLQotICAgIHJlY3Vyc2l2ZVNvcnRpbmdF
bnRlcjogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgaWYgKCEoIl9yZWN1cnNpdmVTb3J0aW5n
RGVwdGgiIGluIHRoaXMpKQotICAgICAgICAgICAgdGhpcy5fcmVjdXJzaXZlU29ydGluZ0RlcHRo
ID0gMTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgKyt0aGlzLl9yZWN1cnNpdmVTb3J0aW5n
RGVwdGg7Ci0gICAgfSwKLQotICAgIHJlY3Vyc2l2ZVNvcnRpbmdMZWF2ZTogZnVuY3Rpb24oKQot
ICAgIHsKLSAgICAgICAgaWYgKCEoIl9yZWN1cnNpdmVTb3J0aW5nRGVwdGgiIGluIHRoaXMpKQot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoIS0tdGhpcy5fcmVjdXJzaXZlU29ydGlu
Z0RlcHRoKSB7Ci0gICAgICAgICAgICBkZWxldGUgdGhpcy5fcmVjdXJzaXZlU29ydGluZ0RlcHRo
OwotICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoInNvcnRpbmcgY29t
cGxldGUiKTsKLSAgICAgICAgfQotICAgIH0KLX07Ci0KLVdlYkluc3BlY3Rvci5IZWFwU25hcHNo
b3RTb3J0YWJsZURhdGFHcmlkLnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuRGF0
YUdyaWQucHJvdG90eXBlOwotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQGV4dGVuZHMge1dl
Ykluc3BlY3Rvci5IZWFwU25hcHNob3RTb3J0YWJsZURhdGFHcmlkfQotICogQHBhcmFtIHtPYmpl
Y3Q9fSBjb2x1bW5zCi0gKi8KLVdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RDb250YWlubWVudERh
dGFHcmlkID0gZnVuY3Rpb24oY29sdW1ucykKLXsKLSAgICBjb2x1bW5zID0gY29sdW1ucyB8fCB7
Ci0gICAgICAgIG9iamVjdDogeyB0aXRsZTogV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJPYmplY3Qi
KSwgZGlzY2xvc3VyZTogdHJ1ZSwgc29ydGFibGU6IHRydWUgfSwKLSAgICAgICAgc2hhbGxvd1Np
emU6IHsgdGl0bGU6IFdlYkluc3BlY3Rvci5VSVN0cmluZygiU2hhbGxvdyBTaXplIiksIHdpZHRo
OiAiMTIwcHgiLCBzb3J0YWJsZTogdHJ1ZSB9LAotICAgICAgICByZXRhaW5lZFNpemU6IHsgdGl0
bGU6IFdlYkluc3BlY3Rvci5VSVN0cmluZygiUmV0YWluZWQgU2l6ZSIpLCB3aWR0aDogIjEyMHB4
Iiwgc29ydGFibGU6IHRydWUsIHNvcnQ6ICJkZXNjZW5kaW5nIiB9Ci0gICAgfTsKLSAgICBXZWJJ
bnNwZWN0b3IuSGVhcFNuYXBzaG90U29ydGFibGVEYXRhR3JpZC5jYWxsKHRoaXMsIGNvbHVtbnMp
OwotfQotCi1XZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Q29udGFpbm1lbnREYXRhR3JpZC5wcm90
b3R5cGUgPSB7Ci0gICAgX2RlZmF1bHRQb3B1bGF0ZUNvdW50OiAxMDAsCi0KLSAgICBleHBhbmRS
b3V0ZTogZnVuY3Rpb24ocm91dGUpCi0gICAgewotICAgICAgICBmdW5jdGlvbiBuZXh0U3RlcChw
YXJlbnQsIGhvcEluZGV4KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoaG9wSW5kZXggPj0g
cm91dGUubGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgcGFyZW50LmVsZW1lbnQuc2Nyb2xsSW50
b1ZpZXdJZk5lZWRlZCh0cnVlKTsKLSAgICAgICAgICAgICAgICBwYXJlbnQuc2VsZWN0KCk7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdmFyIG5v
ZGVJbmRleCA9IHJvdXRlW2hvcEluZGV4XTsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBs
ID0gcGFyZW50LmNoaWxkcmVuLmxlbmd0aDsgaSA8IGw7ICsraSkgewotICAgICAgICAgICAgICAg
IHZhciBjaGlsZCA9IHBhcmVudC5jaGlsZHJlbltpXTsKLSAgICAgICAgICAgICAgICBpZiAoY2hp
bGQuc25hcHNob3ROb2RlSW5kZXggPT09IG5vZGVJbmRleCkgewotICAgICAgICAgICAgICAgICAg
ICBpZiAoY2hpbGQuZXhwYW5kZWQpCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXh0U3RlcChj
aGlsZCwgaG9wSW5kZXggKyAxKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBmdW5jdGlvbiBhZnRlckV4cGFuZCgpCi0gICAgICAgICAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQucmVtb3ZlRXZlbnRM
aXN0ZW5lcigicG9wdWxhdGUgY29tcGxldGUiLCBhZnRlckV4cGFuZCwgbnVsbCk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyIGxhc3RDaGlsZCA9IGNoaWxkLmNoaWxkcmVuW2NoaWxk
LmNoaWxkcmVuLmxlbmd0aCAtIDFdOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgh
bGFzdENoaWxkLnNob3dBbGwpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRT
dGVwKGNoaWxkLCBob3BJbmRleCArIDEpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVs
c2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZC5hZGRFdmVudExpc3Rl
bmVyKCJwb3B1bGF0ZSBjb21wbGV0ZSIsIGFmdGVyRXhwYW5kLCBudWxsKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbGFzdENoaWxkLnNob3dBbGwuY2xpY2soKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBjaGlsZC5hZGRFdmVudExpc3RlbmVyKCJwb3B1bGF0ZSBjb21wbGV0
ZSIsIGFmdGVyRXhwYW5kLCBudWxsKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkLmV4
cGFuZCgpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBu
ZXh0U3RlcCh0aGlzLCAwKTsKLSAgICB9LAotCi0gICAgc2V0RGF0YVNvdXJjZTogZnVuY3Rpb24o
c25hcHNob3RWaWV3LCBzbmFwc2hvdCwgbm9kZUluZGV4KQotICAgIHsKLSAgICAgICAgdGhpcy5z
bmFwc2hvdFZpZXcgPSBzbmFwc2hvdFZpZXc7Ci0gICAgICAgIHRoaXMuc25hcHNob3QgPSBzbmFw
c2hvdDsKLSAgICAgICAgdGhpcy5zbmFwc2hvdE5vZGVJbmRleCA9IG5vZGVJbmRleCB8fCB0aGlz
LnNuYXBzaG90LnJvb3ROb2RlSW5kZXg7Ci0gICAgICAgIHRoaXMuX3Byb3ZpZGVyID0gdGhpcy5f
Y3JlYXRlUHJvdmlkZXIoc25hcHNob3QsIHRoaXMuc25hcHNob3ROb2RlSW5kZXgsIHRoaXMpOwot
ICAgICAgICB0aGlzLnNvcnQoKTsKLSAgICB9LAotCi0gICAgc29ydGluZ0NoYW5nZWQ6IGZ1bmN0
aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuc29ydCgpOwotICAgIH0KLX07Ci0KLU1peEluU25h
cHNob3ROb2RlRnVuY3Rpb25zKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RPYmplY3ROb2RlLnBy
b3RvdHlwZSwgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdENvbnRhaW5tZW50RGF0YUdyaWQucHJv
dG90eXBlKTsKLVdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RDb250YWlubWVudERhdGFHcmlkLnBy
b3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90U29ydGFibGVEYXRh
R3JpZC5wcm90b3R5cGU7Ci0KLS8qKgotICogQGNvbnN0cnVjdG9yCi0gKiBAZXh0ZW5kcyB7V2Vi
SW5zcGVjdG9yLkhlYXBTbmFwc2hvdENvbnRhaW5tZW50RGF0YUdyaWR9Ci0gKi8KLVdlYkluc3Bl
Y3Rvci5IZWFwU25hcHNob3RSZXRhaW5tZW50RGF0YUdyaWQgPSBmdW5jdGlvbigpCi17Ci0gICAg
dGhpcy5zaG93UmV0YWluaW5nRWRnZXMgPSB0cnVlOwotICAgIHZhciBjb2x1bW5zID0gewotICAg
ICAgICBvYmplY3Q6IHsgdGl0bGU6IFdlYkluc3BlY3Rvci5VSVN0cmluZygiT2JqZWN0IiksIGRp
c2Nsb3N1cmU6IHRydWUsIHNvcnRhYmxlOiB0cnVlIH0sCi0gICAgICAgIHNoYWxsb3dTaXplOiB7
IHRpdGxlOiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlNoYWxsb3cgU2l6ZSIpLCB3aWR0aDogIjEy
MHB4Iiwgc29ydGFibGU6IHRydWUgfSwKLSAgICAgICAgcmV0YWluZWRTaXplOiB7IHRpdGxlOiBX
ZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlJldGFpbmVkIFNpemUiKSwgd2lkdGg6ICIxMjBweCIsIHNv
cnRhYmxlOiB0cnVlIH0sCi0gICAgICAgIGRpc3RhbmNlVG9XaW5kb3c6IHsgdGl0bGU6IFdlYklu
c3BlY3Rvci5VSVN0cmluZygiRGlzdGFuY2UiKSwgd2lkdGg6ICI4MHB4Iiwgc29ydGFibGU6IHRy
dWUsIHNvcnQ6ICJhc2NlbmRpbmciIH0KLSAgICB9OwotICAgIFdlYkluc3BlY3Rvci5IZWFwU25h
cHNob3RDb250YWlubWVudERhdGFHcmlkLmNhbGwodGhpcywgY29sdW1ucyk7Ci19Ci0KLVdlYklu
c3BlY3Rvci5IZWFwU25hcHNob3RSZXRhaW5tZW50RGF0YUdyaWQucHJvdG90eXBlID0gewotICAg
IF9zb3J0RmllbGRzOiBmdW5jdGlvbihzb3J0Q29sdW1uLCBzb3J0QXNjZW5kaW5nKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgIG9iamVjdDogWyJfbmFtZSIsIHNvcnRBc2Nl
bmRpbmcsICJfY291bnQiLCBmYWxzZV0sCi0gICAgICAgICAgICBjb3VudDogWyJfY291bnQiLCBz
b3J0QXNjZW5kaW5nLCAiX25hbWUiLCB0cnVlXSwKLSAgICAgICAgICAgIHNoYWxsb3dTaXplOiBb
Il9zaGFsbG93U2l6ZSIsIHNvcnRBc2NlbmRpbmcsICJfbmFtZSIsIHRydWVdLAotICAgICAgICAg
ICAgcmV0YWluZWRTaXplOiBbIl9yZXRhaW5lZFNpemUiLCBzb3J0QXNjZW5kaW5nLCAiX25hbWUi
LCB0cnVlXSwKLSAgICAgICAgICAgIGRpc3RhbmNlVG9XaW5kb3c6IFsiX2Rpc3RhbmNlVG9XaW5k
b3ciLCBzb3J0QXNjZW5kaW5nLCAiX25hbWUiLCB0cnVlXQotICAgICAgICB9W3NvcnRDb2x1bW5d
OwotICAgIH0sCi0KLSAgICByZXNldDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5y
ZW1vdmVDaGlsZHJlbigpOwotICAgICAgICB0aGlzLnJlc2V0U29ydGluZ0NhY2hlKCk7Ci0gICAg
fSwKLX0KLQotV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFJldGFpbm1lbnREYXRhR3JpZC5wcm90
b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdENvbnRhaW5tZW50RGF0
YUdyaWQucHJvdG90eXBlOwotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQGV4dGVuZHMge1dl
Ykluc3BlY3Rvci5IZWFwU25hcHNob3RTb3J0YWJsZURhdGFHcmlkfQotICovCi1XZWJJbnNwZWN0
b3IuSGVhcFNuYXBzaG90Q29uc3RydWN0b3JzRGF0YUdyaWQgPSBmdW5jdGlvbigpCi17Ci0gICAg
dmFyIGNvbHVtbnMgPSB7Ci0gICAgICAgIG9iamVjdDogeyB0aXRsZTogV2ViSW5zcGVjdG9yLlVJ
U3RyaW5nKCJDb25zdHJ1Y3RvciIpLCBkaXNjbG9zdXJlOiB0cnVlLCBzb3J0YWJsZTogdHJ1ZSB9
LAotICAgICAgICBkaXN0YW5jZVRvV2luZG93OiB7IHRpdGxlOiBXZWJJbnNwZWN0b3IuVUlTdHJp
bmcoIkRpc3RhbmNlIiksIHdpZHRoOiAiOTBweCIsIHNvcnRhYmxlOiB0cnVlIH0sCi0gICAgICAg
IGNvdW50OiB7IHRpdGxlOiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIk9iamVjdHMgQ291bnQiKSwg
d2lkdGg6ICI5MHB4Iiwgc29ydGFibGU6IHRydWUgfSwKLSAgICAgICAgc2hhbGxvd1NpemU6IHsg
dGl0bGU6IFdlYkluc3BlY3Rvci5VSVN0cmluZygiU2hhbGxvdyBTaXplIiksIHdpZHRoOiAiMTIw
cHgiLCBzb3J0YWJsZTogdHJ1ZSB9LAotICAgICAgICByZXRhaW5lZFNpemU6IHsgdGl0bGU6IFdl
Ykluc3BlY3Rvci5VSVN0cmluZygiUmV0YWluZWQgU2l6ZSIpLCB3aWR0aDogIjEyMHB4Iiwgc29y
dDogImRlc2NlbmRpbmciLCBzb3J0YWJsZTogdHJ1ZSB9Ci0gICAgfTsKLSAgICBXZWJJbnNwZWN0
b3IuSGVhcFNuYXBzaG90U29ydGFibGVEYXRhR3JpZC5jYWxsKHRoaXMsIGNvbHVtbnMsIHRydWUp
OwotICAgIHRoaXMuX3Byb2ZpbGVJbmRleCA9IC0xOwotfQotCi1XZWJJbnNwZWN0b3IuSGVhcFNu
YXBzaG90Q29uc3RydWN0b3JzRGF0YUdyaWQucHJvdG90eXBlID0gewotICAgIF9kZWZhdWx0UG9w
dWxhdGVDb3VudDogMTAwLAotCi0gICAgX3NvcnRGaWVsZHM6IGZ1bmN0aW9uKHNvcnRDb2x1bW4s
IHNvcnRBc2NlbmRpbmcpCi0gICAgewotICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgb2Jq
ZWN0OiBbIl9uYW1lIiwgc29ydEFzY2VuZGluZywgIl9jb3VudCIsIGZhbHNlXSwKLSAgICAgICAg
ICAgIGRpc3RhbmNlVG9XaW5kb3c6IFsiX2Rpc3RhbmNlVG9XaW5kb3ciLCBzb3J0QXNjZW5kaW5n
LCAiX3JldGFpbmVkU2l6ZSIsIHRydWVdLAotICAgICAgICAgICAgY291bnQ6IFsiX2NvdW50Iiwg
c29ydEFzY2VuZGluZywgIl9uYW1lIiwgdHJ1ZV0sCi0gICAgICAgICAgICBzaGFsbG93U2l6ZTog
WyJfc2hhbGxvd1NpemUiLCBzb3J0QXNjZW5kaW5nLCAiX25hbWUiLCB0cnVlXSwKLSAgICAgICAg
ICAgIHJldGFpbmVkU2l6ZTogWyJfcmV0YWluZWRTaXplIiwgc29ydEFzY2VuZGluZywgIl9uYW1l
IiwgdHJ1ZV0KLSAgICAgICAgfVtzb3J0Q29sdW1uXTsKLSAgICB9LAotCi0gICAgc2V0RGF0YVNv
dXJjZTogZnVuY3Rpb24oc25hcHNob3RWaWV3LCBzbmFwc2hvdCkKLSAgICB7Ci0gICAgICAgIHRo
aXMuc25hcHNob3RWaWV3ID0gc25hcHNob3RWaWV3OwotICAgICAgICB0aGlzLnNuYXBzaG90ID0g
c25hcHNob3Q7Ci0gICAgICAgIGlmICh0aGlzLl9wcm9maWxlSW5kZXggPT09IC0xKQotICAgICAg
ICAgICAgdGhpcy5wb3B1bGF0ZUNoaWxkcmVuKCk7Ci0gICAgfSwKLQotICAgIHBvcHVsYXRlQ2hp
bGRyZW46IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGZ1bmN0aW9uIGFnZ3JlZ2F0ZXNSZWNl
aXZlZChrZXksIGFnZ3JlZ2F0ZXMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAodmFyIGNv
bnN0cnVjdG9yIGluIGFnZ3JlZ2F0ZXMpCi0gICAgICAgICAgICAgICAgdGhpcy5hcHBlbmRDaGls
ZChuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdENvbnN0cnVjdG9yTm9kZSh0aGlzLCBjb25z
dHJ1Y3RvciwgYWdncmVnYXRlc1tjb25zdHJ1Y3Rvcl0sIGtleSkpOwotICAgICAgICAgICAgdGhp
cy5zb3J0aW5nQ2hhbmdlZCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgdGhpcy5kaXNwb3NlKCk7
Ci0gICAgICAgIHRoaXMucmVtb3ZlQ2hpbGRyZW4oKTsKLSAgICAgICAgdGhpcy5yZXNldFNvcnRp
bmdDYWNoZSgpOwotCi0gICAgICAgIHZhciBrZXkgPSB0aGlzLl9wcm9maWxlSW5kZXggPT09IC0x
ID8gImFsbE9iamVjdHMiIDogdGhpcy5fbWluTm9kZUlkICsgIi4uIiArIHRoaXMuX21heE5vZGVJ
ZDsKLSAgICAgICAgdmFyIGZpbHRlciA9IHRoaXMuX3Byb2ZpbGVJbmRleCA9PT0gLTEgPyBudWxs
IDogImZ1bmN0aW9uKG5vZGUpIHsgdmFyIGlkID0gbm9kZS5pZDsgcmV0dXJuIGlkID4gIiArIHRo
aXMuX21pbk5vZGVJZCArICIgJiYgaWQgPD0gIiArIHRoaXMuX21heE5vZGVJZCArICI7IH0iOwot
Ci0gICAgICAgIHRoaXMuc25hcHNob3QuYWdncmVnYXRlcyhmYWxzZSwga2V5LCBmaWx0ZXIsIGFn
Z3JlZ2F0ZXNSZWNlaXZlZC5iaW5kKHRoaXMsIGtleSkpOwotICAgIH0sCi0KLSAgICBfZmlsdGVy
U2VsZWN0SW5kZXhDaGFuZ2VkOiBmdW5jdGlvbihwcm9maWxlcywgcHJvZmlsZUluZGV4KQotICAg
IHsKLSAgICAgICAgdGhpcy5fcHJvZmlsZUluZGV4ID0gcHJvZmlsZUluZGV4OwotCi0gICAgICAg
IGRlbGV0ZSB0aGlzLl9tYXhOb2RlSWQ7Ci0gICAgICAgIGRlbGV0ZSB0aGlzLl9taW5Ob2RlSWQ7
Ci0KLSAgICAgICAgaWYgKHRoaXMuX3Byb2ZpbGVJbmRleCAhPT0gLTEpIHsKLSAgICAgICAgICAg
IHRoaXMuX21pbk5vZGVJZCA9IHByb2ZpbGVJbmRleCA+IDAgPyBwcm9maWxlc1twcm9maWxlSW5k
ZXggLSAxXS5tYXhKU09iamVjdElkIDogMDsKLSAgICAgICAgICAgIHRoaXMuX21heE5vZGVJZCA9
IHByb2ZpbGVzW3Byb2ZpbGVJbmRleF0ubWF4SlNPYmplY3RJZDsKLSAgICAgICAgfQotCi0gICAg
ICAgIHRoaXMucG9wdWxhdGVDaGlsZHJlbigpOwotICAgIH0sCi0KLX07Ci0KLVdlYkluc3BlY3Rv
ci5IZWFwU25hcHNob3RDb25zdHJ1Y3RvcnNEYXRhR3JpZC5wcm90b3R5cGUuX19wcm90b19fID0g
V2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFNvcnRhYmxlRGF0YUdyaWQucHJvdG90eXBlOwotCi0v
KioKLSAqIEBjb25zdHJ1Y3RvcgotICogQGV4dGVuZHMge1dlYkluc3BlY3Rvci5IZWFwU25hcHNo
b3RTb3J0YWJsZURhdGFHcmlkfQotICovCi1XZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RGlmZkRh
dGFHcmlkID0gZnVuY3Rpb24oKQotewotICAgIHZhciBjb2x1bW5zID0gewotICAgICAgICBvYmpl
Y3Q6IHsgdGl0bGU6IFdlYkluc3BlY3Rvci5VSVN0cmluZygiQ29uc3RydWN0b3IiKSwgZGlzY2xv
c3VyZTogdHJ1ZSwgc29ydGFibGU6IHRydWUgfSwKLSAgICAgICAgYWRkZWRDb3VudDogeyB0aXRs
ZTogV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCIjIE5ldyIpLCB3aWR0aDogIjcycHgiLCBzb3J0YWJs
ZTogdHJ1ZSB9LAotICAgICAgICByZW1vdmVkQ291bnQ6IHsgdGl0bGU6IFdlYkluc3BlY3Rvci5V
SVN0cmluZygiIyBEZWxldGVkIiksIHdpZHRoOiAiNzJweCIsIHNvcnRhYmxlOiB0cnVlIH0sCi0g
ICAgICAgIGNvdW50RGVsdGE6IHsgdGl0bGU6ICIjIERlbHRhIiwgd2lkdGg6ICI2NHB4Iiwgc29y
dGFibGU6IHRydWUgfSwKLSAgICAgICAgYWRkZWRTaXplOiB7IHRpdGxlOiBXZWJJbnNwZWN0b3Iu
VUlTdHJpbmcoIkFsbG9jLiBTaXplIiksIHdpZHRoOiAiNzJweCIsIHNvcnRhYmxlOiB0cnVlLCBz
b3J0OiAiZGVzY2VuZGluZyIgfSwKLSAgICAgICAgcmVtb3ZlZFNpemU6IHsgdGl0bGU6IFdlYklu
c3BlY3Rvci5VSVN0cmluZygiRnJlZWQgU2l6ZSIpLCB3aWR0aDogIjcycHgiLCBzb3J0YWJsZTog
dHJ1ZSB9LAotICAgICAgICBzaXplRGVsdGE6IHsgdGl0bGU6ICJTaXplIERlbHRhIiwgd2lkdGg6
ICI3MnB4Iiwgc29ydGFibGU6IHRydWUgfQotICAgIH07Ci0gICAgV2ViSW5zcGVjdG9yLkhlYXBT
bmFwc2hvdFNvcnRhYmxlRGF0YUdyaWQuY2FsbCh0aGlzLCBjb2x1bW5zLCB0cnVlKTsKLX0KLQot
V2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdERpZmZEYXRhR3JpZC5wcm90b3R5cGUgPSB7Ci0gICAg
X2RlZmF1bHRQb3B1bGF0ZUNvdW50OiA1MCwKLQotICAgIF9zb3J0RmllbGRzOiBmdW5jdGlvbihz
b3J0Q29sdW1uLCBzb3J0QXNjZW5kaW5nKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHsKLSAgICAg
ICAgICAgIG9iamVjdDogWyJfbmFtZSIsIHNvcnRBc2NlbmRpbmcsICJfY291bnQiLCBmYWxzZV0s
Ci0gICAgICAgICAgICBhZGRlZENvdW50OiBbIl9hZGRlZENvdW50Iiwgc29ydEFzY2VuZGluZywg
Il9uYW1lIiwgdHJ1ZV0sCi0gICAgICAgICAgICByZW1vdmVkQ291bnQ6IFsiX3JlbW92ZWRDb3Vu
dCIsIHNvcnRBc2NlbmRpbmcsICJfbmFtZSIsIHRydWVdLAotICAgICAgICAgICAgY291bnREZWx0
YTogWyJfY291bnREZWx0YSIsIHNvcnRBc2NlbmRpbmcsICJfbmFtZSIsIHRydWVdLAotICAgICAg
ICAgICAgYWRkZWRTaXplOiBbIl9hZGRlZFNpemUiLCBzb3J0QXNjZW5kaW5nLCAiX25hbWUiLCB0
cnVlXSwKLSAgICAgICAgICAgIHJlbW92ZWRTaXplOiBbIl9yZW1vdmVkU2l6ZSIsIHNvcnRBc2Nl
bmRpbmcsICJfbmFtZSIsIHRydWVdLAotICAgICAgICAgICAgc2l6ZURlbHRhOiBbIl9zaXplRGVs
dGEiLCBzb3J0QXNjZW5kaW5nLCAiX25hbWUiLCB0cnVlXQotICAgICAgICB9W3NvcnRDb2x1bW5d
OwotICAgIH0sCi0KLSAgICBzZXREYXRhU291cmNlOiBmdW5jdGlvbihzbmFwc2hvdFZpZXcsIHNu
YXBzaG90KQotICAgIHsKLSAgICAgICAgdGhpcy5zbmFwc2hvdFZpZXcgPSBzbmFwc2hvdFZpZXc7
Ci0gICAgICAgIHRoaXMuc25hcHNob3QgPSBzbmFwc2hvdDsKLSAgICB9LAotCi0gICAgX2Jhc2VQ
cm9maWxlSW5kZXhDaGFuZ2VkOiBmdW5jdGlvbihsb2FkZXIsIHByb2ZpbGVJbmRleCkKLSAgICB7
Ci0gICAgICAgIGxvYWRlcihwcm9maWxlSW5kZXgsIHRoaXMuc2V0QmFzZURhdGFTb3VyY2UuYmlu
ZCh0aGlzKSk7Ci0gICAgfSwKLQotICAgIHNldEJhc2VEYXRhU291cmNlOiBmdW5jdGlvbihiYXNl
U25hcHNob3QpCi0gICAgewotICAgICAgICB0aGlzLmJhc2VTbmFwc2hvdCA9IGJhc2VTbmFwc2hv
dDsKLSAgICAgICAgdGhpcy5kaXNwb3NlKCk7Ci0gICAgICAgIHRoaXMucmVtb3ZlQ2hpbGRyZW4o
KTsKLSAgICAgICAgdGhpcy5yZXNldFNvcnRpbmdDYWNoZSgpOwotICAgICAgICBpZiAodGhpcy5i
YXNlU25hcHNob3QgPT09IHRoaXMuc25hcHNob3QpIHsKLSAgICAgICAgICAgIHRoaXMuZGlzcGF0
Y2hFdmVudFRvTGlzdGVuZXJzKCJzb3J0aW5nIGNvbXBsZXRlIik7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy5wb3B1bGF0ZUNoaWxkcmVuKCk7Ci0gICAgfSwK
LQotICAgIHBvcHVsYXRlQ2hpbGRyZW46IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGZ1bmN0
aW9uIGJhc2VBZ2dyZWdhdGVzUmVjZWl2ZWQoYmFzZUNsYXNzZXMpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGZ1bmN0aW9uIGFnZ3JlZ2F0ZXNSZWNlaXZlZChjbGFzc2VzKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIHZhciBub2RlQ291bnQgPSAwOwotICAgICAgICAgICAgICAgIHZh
ciBub2RlcyA9IFtdOwotICAgICAgICAgICAgICAgIGZvciAodmFyIGNsc3MgaW4gYmFzZUNsYXNz
ZXMpCi0gICAgICAgICAgICAgICAgICAgIG5vZGVzLnB1c2gobmV3IFdlYkluc3BlY3Rvci5IZWFw
U25hcHNob3REaWZmTm9kZSh0aGlzLCBjbHNzLCBiYXNlQ2xhc3Nlc1tjbHNzXSwgY2xhc3Nlc1tj
bHNzXSkpOwotICAgICAgICAgICAgICAgIGZvciAoY2xzcyBpbiBjbGFzc2VzKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmICghKGNsc3MgaW4gYmFzZUNsYXNzZXMpKQotICAgICAgICAgICAgICAg
ICAgICAgICAgbm9kZXMucHVzaChuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdERpZmZOb2Rl
KHRoaXMsIGNsc3MsIG51bGwsIGNsYXNzZXNbY2xzc10pKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgbm9kZUNvdW50ID0gbm9kZXMubGVuZ3RoOwotICAgICAgICAgICAgICAg
IGZ1bmN0aW9uIGFkZE5vZGVJZk5vblplcm9EaWZmKGJvdW5kTm9kZSwgemVyb0RpZmYpCi0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAoIXplcm9EaWZmKQotICAgICAg
ICAgICAgICAgICAgICAgICAgdGhpcy5hcHBlbmRDaGlsZChib3VuZE5vZGUpOwotICAgICAgICAg
ICAgICAgICAgICBpZiAoIS0tbm9kZUNvdW50KQotICAgICAgICAgICAgICAgICAgICAgICAgdGhp
cy5zb3J0aW5nQ2hhbmdlZCgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBm
b3IgKHZhciBpID0gMCwgbCA9IG5vZGVzLmxlbmd0aDsgaSA8IGw7ICsraSkgewotICAgICAgICAg
ICAgICAgICAgICB2YXIgbm9kZSA9IG5vZGVzW2ldOwotICAgICAgICAgICAgICAgICAgICBub2Rl
LmNhbGN1bGF0ZURpZmYodGhpcywgYWRkTm9kZUlmTm9uWmVyb0RpZmYuYmluZCh0aGlzLCBub2Rl
KSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgdGhpcy5z
bmFwc2hvdC5hZ2dyZWdhdGVzKHRydWUsICJhbGxPYmplY3RzIiwgbnVsbCwgYWdncmVnYXRlc1Jl
Y2VpdmVkLmJpbmQodGhpcykpOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMuYmFzZVNuYXBzaG90
LmFnZ3JlZ2F0ZXModHJ1ZSwgImFsbE9iamVjdHMiLCBudWxsLCBiYXNlQWdncmVnYXRlc1JlY2Vp
dmVkLmJpbmQodGhpcykpOwotICAgIH0KLX07Ci0KLVdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RE
aWZmRGF0YUdyaWQucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5IZWFwU25hcHNo
b3RTb3J0YWJsZURhdGFHcmlkLnByb3RvdHlwZTsKLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAq
IEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90U29ydGFibGVEYXRhR3JpZH0KLSAq
LwotV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdERvbWluYXRvcnNEYXRhR3JpZCA9IGZ1bmN0aW9u
KCkKLXsKLSAgICB2YXIgY29sdW1ucyA9IHsKLSAgICAgICAgb2JqZWN0OiB7IHRpdGxlOiBXZWJJ
bnNwZWN0b3IuVUlTdHJpbmcoIk9iamVjdCIpLCBkaXNjbG9zdXJlOiB0cnVlLCBzb3J0YWJsZTog
dHJ1ZSB9LAotICAgICAgICBzaGFsbG93U2l6ZTogeyB0aXRsZTogV2ViSW5zcGVjdG9yLlVJU3Ry
aW5nKCJTaGFsbG93IFNpemUiKSwgd2lkdGg6ICIxMjBweCIsIHNvcnRhYmxlOiB0cnVlIH0sCi0g
ICAgICAgIHJldGFpbmVkU2l6ZTogeyB0aXRsZTogV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJSZXRh
aW5lZCBTaXplIiksIHdpZHRoOiAiMTIwcHgiLCBzb3J0OiAiZGVzY2VuZGluZyIsIHNvcnRhYmxl
OiB0cnVlIH0KLSAgICB9OwotICAgIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RTb3J0YWJsZURh
dGFHcmlkLmNhbGwodGhpcywgY29sdW1ucyk7Ci19Ci0KLVdlYkluc3BlY3Rvci5IZWFwU25hcHNo
b3REb21pbmF0b3JzRGF0YUdyaWQucHJvdG90eXBlID0gewotICAgIF9kZWZhdWx0UG9wdWxhdGVD
b3VudDogMjUsCi0KLSAgICBzZXREYXRhU291cmNlOiBmdW5jdGlvbihzbmFwc2hvdFZpZXcsIHNu
YXBzaG90KQotICAgIHsKLSAgICAgICAgdGhpcy5zbmFwc2hvdFZpZXcgPSBzbmFwc2hvdFZpZXc7
Ci0gICAgICAgIHRoaXMuc25hcHNob3QgPSBzbmFwc2hvdDsKLSAgICAgICAgdGhpcy5zbmFwc2hv
dE5vZGVJbmRleCA9IHRoaXMuc25hcHNob3Qucm9vdE5vZGVJbmRleDsKLSAgICAgICAgdGhpcy5f
cHJvdmlkZXIgPSB0aGlzLl9jcmVhdGVQcm92aWRlcihzbmFwc2hvdCwgdGhpcy5zbmFwc2hvdE5v
ZGVJbmRleCk7Ci0gICAgICAgIHRoaXMuc29ydCgpOwotICAgIH0sCi0KLSAgICBzb3J0aW5nQ2hh
bmdlZDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5zb3J0KCk7Ci0gICAgfQotfTsK
LQotTWl4SW5TbmFwc2hvdE5vZGVGdW5jdGlvbnMoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdERv
bWluYXRvck9iamVjdE5vZGUucHJvdG90eXBlLCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RG9t
aW5hdG9yc0RhdGFHcmlkLnByb3RvdHlwZSk7Ci1XZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RG9t
aW5hdG9yc0RhdGFHcmlkLnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuSGVhcFNu
YXBzaG90U29ydGFibGVEYXRhR3JpZC5wcm90b3R5cGU7Ci0KLS8qKgotICogQGNvbnN0cnVjdG9y
CiAgKiBAZXh0ZW5kcyB7V2ViSW5zcGVjdG9yLlZpZXd9CiAgKi8KIFdlYkluc3BlY3Rvci5IZWFw
U25hcHNob3RWaWV3ID0gZnVuY3Rpb24ocGFyZW50LCBwcm9maWxlKQpAQCAtODYzLDE0ICs0MTEs
OCBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Vmlldy5wcm90b3R5cGUgPSB7CiAKICAgICBf
Y2hhbmdlTmFtZUZpbHRlcjogZnVuY3Rpb24oY2xhc3NOYW1lSW5wdXRFbGVtZW50KQogICAgIHsK
LSAgICAgICAgdmFyIGZpbHRlciA9IGNsYXNzTmFtZUlucHV0RWxlbWVudC52YWx1ZS50b0xvd2Vy
Q2FzZSgpOwotICAgICAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLmRhdGFHcmlkLmNoaWxkcmVuOwot
ICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGNoaWxkcmVuLmxlbmd0aDsgaSA8IGw7ICsraSkg
ewotICAgICAgICAgICAgdmFyIG5vZGUgPSBjaGlsZHJlbltpXTsKLSAgICAgICAgICAgIGlmIChu
b2RlLmRlcHRoID09PSAwKQotICAgICAgICAgICAgICAgIG5vZGUucmV2ZWFsZWQgPSBub2RlLl9u
YW1lLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihmaWx0ZXIpICE9PSAtMTsKLSAgICAgICAgfQotICAg
ICAgICB0aGlzLmRhdGFHcmlkLnVwZGF0ZVZpc2libGVOb2RlcygpOworICAgICAgICB2YXIgZmls
dGVyID0gY2xhc3NOYW1lSW5wdXRFbGVtZW50LnZhbHVlOworICAgICAgICB0aGlzLmRhdGFHcmlk
LmNoYW5nZU5hbWVGaWx0ZXIoZmlsdGVyKTsKICAgICB9LAogCiAgICAgX3Byb2ZpbGVzOiBmdW5j
dGlvbigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1dl
YktpdC5xcmMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1dlYktpdC5xcmMK
aW5kZXggYTU2MmM4ODQxMzYwMTM1MzAyNWI2ZjVlMWFkOGNjNjY5NTcyODI5Mi4uNmNlYjgxNTU4
ZjQ4OWJlNzU5NGQ1YmQwZDIyNDZlNmQxNzExMTk2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9XZWJLaXQucXJjCisrKyBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvV2ViS2l0LnFyYwpAQCAtNjEsNiArNjEsNyBAQAogICAgIDxmaWxl
PkhBUkVudHJ5LmpzPC9maWxlPgogICAgIDxmaWxlPkhhbmRsZXJSZWdpc3RyeS5qczwvZmlsZT4K
ICAgICA8ZmlsZT5IZWFwU25hcHNob3QuanM8L2ZpbGU+CisgICAgPGZpbGU+SGVhcFNuYXBzaG90
RGF0YUdyaWRzLmpzPC9maWxlPgogICAgIDxmaWxlPkhlYXBTbmFwc2hvdEdyaWROb2Rlcy5qczwv
ZmlsZT4KICAgICA8ZmlsZT5IZWFwU25hcHNob3RQcm94eS5qczwvZmlsZT4KICAgICA8ZmlsZT5I
ZWFwU25hcHNob3RWaWV3LmpzPC9maWxlPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuaHRtbCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWwKaW5kZXggYzkwZjkyMGY0MGRlMTc2MzJjNGRkN2E1
YWE4YWI1MjVjMGFiODk0MC4uZjllM2M3OGFiZGMxNTFjZWIxZTljNTQ1ZmJjNjljYjAxZTU1ODNm
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0
b3IuaHRtbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rv
ci5odG1sCkBAIC0xNjksNiArMTY5LDcgQEAgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAgICA8c2NyaXB0IHR5cGU9InRl
eHQvamF2YXNjcmlwdCIgc3JjPSJIZWFwU25hcHNob3RQcm94eS5qcyI+PC9zY3JpcHQ+CiAgICAg
PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iSGVhcFNuYXBzaG90V29ya2VyRGlz
cGF0Y2hlci5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQi
IHNyYz0iSGVhcFNuYXBzaG90R3JpZE5vZGVzLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHR5
cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJIZWFwU25hcHNob3REYXRhR3JpZHMuanMiPjwvc2Ny
aXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IkhlYXBTbmFwc2hv
dFZpZXcuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBz
cmM9IkRlYnVnZ2VyTW9kZWwuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9q
YXZhc2NyaXB0IiBzcmM9IlNjcmlwdE1hcHBpbmcuanMiPjwvc2NyaXB0Pgo=
</data>
<flag name="review"
          id="142641"
          type_id="1"
          status="+"
          setter="pfeldman"
    />
          </attachment>
      

    </bug>

</bugzilla>