<?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>54670</bug_id>
          
          <creation_ts>2011-02-17 09:47:19 -0800</creation_ts>
          <short_desc>Web Inspector: merge ConsoleView into ConsolePanel.</short_desc>
          <delta_ts>2011-05-17 07:33:32 -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>
          <dependson>60958</dependson>
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Pavel Podivilov">podivilov</reporter>
          <assigned_to name="Pavel Podivilov">podivilov</assigned_to>
          <cc>apavlov</cc>
    
    <cc>atwilson</cc>
    
    <cc>bweinstein</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>352985</commentid>
    <comment_count>0</comment_count>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2011-02-17 09:47:19 -0800</bug_when>
    <thetext>Web Inspector: merge ConsoleView into ConsolePanel.

ConsolePanel is ConsoleView shown in a fully opened drawer. We can easily merge this classes together so ConsoleView can reuse Panel functionality.
This is needed to implement snippet editor as sidebar pane in console panel.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352987</commentid>
    <comment_count>1</comment_count>
      <attachid>82824</attachid>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2011-02-17 09:49:23 -0800</bug_when>
    <thetext>Created attachment 82824
Patch.

- Add ConsoleView functions to ConsolePanel
- ConsoleView class
- Rename ConsoleView.js to ConsoleMessage.js</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352989</commentid>
    <comment_count>2</comment_count>
      <attachid>82825</attachid>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2011-02-17 09:50:59 -0800</bug_when>
    <thetext>Created attachment 82825
Diff between old ConsoleView and new ConsolePanel</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352990</commentid>
    <comment_count>3</comment_count>
      <attachid>82824</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-02-17 09:52:45 -0800</bug_when>
    <thetext>Comment on attachment 82824
Patch.

Please provide diff with 
git config
[diff]
        renames = copies</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>395217</commentid>
    <comment_count>4</comment_count>
      <attachid>91666</attachid>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2011-04-29 05:09:40 -0700</bug_when>
    <thetext>Created attachment 91666
Patch.

No moves/renames, just make ConsoleView a panel.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>397819</commentid>
    <comment_count>5</comment_count>
      <attachid>91666</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2011-05-04 04:57:08 -0700</bug_when>
    <thetext>Comment on attachment 91666
Patch.

View in context: https://bugs.webkit.org/attachment.cgi?id=91666&amp;action=review

&gt; Source/WebCore/ChangeLog:7
&gt; +

Please give a brief description of the changes made. It&apos;s not clear in particular how conversion of ConsoleView into a panel helps us to add implement snippet editor.

&gt; Source/WebCore/inspector/front-end/ConsoleView.js:32
&gt; +WebInspector.ConsolePanel = function(drawer)

Containing file should be renamed as well.

&gt; Source/WebCore/inspector/front-end/ConsoleView.js:248
&gt; +        this._previousConsoleState = WebInspector.drawer.state;

This code should be removed from ConsolePanel.js, shouldn&apos;t it?

&gt; Source/WebCore/inspector/front-end/inspector.js:192
&gt; +            this.panels.console = this.console;

This method is supposed to create panels.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>397910</commentid>
    <comment_count>6</comment_count>
      <attachid>92238</attachid>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2011-05-04 07:25:58 -0700</bug_when>
    <thetext>Created attachment 92238
Patch.

Console view in drawer looks exactly the same as console panel. Merging ConsoleView and ConsolePanel together
will allow us to reuse panel&apos;s functionality (e.g. resizable sidebar) even when console is docked.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>397911</commentid>
    <comment_count>7</comment_count>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2011-05-04 07:27:04 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 91666 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=91666&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:7
&gt; &gt; +
&gt; 
&gt; Please give a brief description of the changes made. It&apos;s not clear in particular how conversion of ConsoleView into a panel helps us to add implement snippet editor.

Done.

&gt; 
&gt; &gt; Source/WebCore/inspector/front-end/ConsoleView.js:32
&gt; &gt; +WebInspector.ConsolePanel = function(drawer)
&gt; 
&gt; Containing file should be renamed as well.
&gt; 
&gt; &gt; Source/WebCore/inspector/front-end/ConsoleView.js:248
&gt; &gt; +        this._previousConsoleState = WebInspector.drawer.state;
&gt; 
&gt; This code should be removed from ConsolePanel.js, shouldn&apos;t it?

Let me do it in a follow up patch.

&gt; 
&gt; &gt; Source/WebCore/inspector/front-end/inspector.js:192
&gt; &gt; +            this.panels.console = this.console;
&gt; 
&gt; This method is supposed to create panels.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>404596</commentid>
    <comment_count>8</comment_count>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2011-05-16 10:54:55 -0700</bug_when>
    <thetext>Committed r86589: &lt;http://trac.webkit.org/changeset/86589&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>404642</commentid>
    <comment_count>9</comment_count>
    <who name="Andrew Wilson">atwilson</who>
    <bug_when>2011-05-16 11:53:09 -0700</bug_when>
    <thetext>This seems to be breaking the chromium canary bots:

http://test-results.appspot.com/dashboards/flakiness_dashboard.html#showExpectations=true&amp;group=%40ToT%20-%20chromium.org&amp;tests=http%2Ftests%2Finspector%2Fchange-iframe-src.html%2Chttp%2Ftests%2Finspector%2Fconsole-resource-errors.html%2Chttp%2Ftests%2Finspector%2Fresource-tree%2Fresource-tree-frame-add.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>404646</commentid>
    <comment_count>10</comment_count>
    <who name="Andrew Wilson">atwilson</who>
    <bug_when>2011-05-16 11:59:07 -0700</bug_when>
    <thetext>Reverted r86589 for reason:

Broke

Committed r86595: &lt;http://trac.webkit.org/changeset/86595&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>404982</commentid>
    <comment_count>11</comment_count>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2011-05-17 02:01:19 -0700</bug_when>
    <thetext>Committed r86660: &lt;http://trac.webkit.org/changeset/86660&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>82824</attachid>
            <date>2011-02-17 09:49:23 -0800</date>
            <delta_ts>2011-04-29 05:09:40 -0700</delta_ts>
            <desc>Patch.</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>102470</size>
            <attacher name="Pavel Podivilov">podivilov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBkZTdiOWUwLi4wZDU1MTVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzMg
QEAKKzIwMTEtMDItMTcgIFBhdmVsIFBvZGl2aWxvdiAgPHBvZGl2aWxvdkBjaHJvbWl1bS5vcmc+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIElu
c3BlY3RvcjogbWVyZ2UgQ29uc29sZVZpZXcgaW50byBDb25zb2xlUGFuZWwuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NDY3MAorCisgICAgICAgIC0g
QWRkIENvbnNvbGVWaWV3IGZ1bmN0aW9ucyB0byBDb25zb2xlUGFuZWwKKyAgICAgICAgLSBDb25z
b2xlVmlldyBjbGFzcworICAgICAgICAtIFJlbmFtZSBDb25zb2xlVmlldy5qcyB0byBDb25zb2xl
TWVzc2FnZS5qcworCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUu
dmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvQ29u
c29sZU1lc3NhZ2UuanM6IEFkZGVkLiBNb3ZlZCBjb2RlIGZyb20gQ29uc29sZVZpZXcuanMuCisg
ICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9Db25zb2xlUGFuZWwuanM6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuQ29uc29sZVBhbmVsLmNyZWF0ZURpdmlkZXJFbGVtZW50KToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5Db25zb2xlUGFuZWwuY3JlYXRlRmlsdGVyRWxlbWVudCk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuQ29uc29sZVBhbmVsKTogQWRkZWQgZnVuY3Rpb25zIGZyb20gQ29uc29s
ZVZpZXcuCisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9Db25zb2xlVmlldy5qczogUmVt
b3ZlZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0RyYXdlci5qczoKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5EcmF3ZXIucHJvdG90eXBlLnNldCB2aXNpYmxlVmlldyk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuRHJhd2VyLnByb3RvdHlwZS5zaG93LmFuaW1hdGlvbkZpbmlzaGVkKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5EcmF3ZXIucHJvdG90eXBlLnNob3cpOgorICAgICAgICAq
IGluc3BlY3Rvci9mcm9udC1lbmQvUGFuZWwuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUGFu
ZWwpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvV2ViS2l0LnFyYzoKKyAgICAgICAg
KiBpbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5odG1sOgorICAgICAgICAqIGluc3BlY3Rv
ci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLl9jcmVhdGVQ
YW5lbHMpOgorCiAyMDExLTAyLTE3ICBIdWkgSHVhbmcgIDxodWkuMi5odWFuZ0Bub2tpYS5jb20+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTGFzemxvIEdvbWJvcy4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRl
eCBhOTlmN2I5Li5kZTEwOWQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5
cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC00NjY4LDcgKzQ2NjgsNyBA
QAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvQ2hlY2tib3guanMnLAogICAgICAg
ICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvQ29sb3IuanMnLAogICAgICAgICAgICAgJ2luc3Bl
Y3Rvci9mcm9udC1lbmQvQ29uc29sZVBhbmVsLmpzJywKLSAgICAgICAgICAgICdpbnNwZWN0b3Iv
ZnJvbnQtZW5kL0NvbnNvbGVWaWV3LmpzJywKKyAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQt
ZW5kL0NvbnNvbGVNZXNzYWdlLmpzJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5k
L0NvbnRleHRNZW51LmpzJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0Nvb2tp
ZUl0ZW1zVmlldy5qcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9Db29raWVQ
YXJzZXIuanMnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2Vi
Q29yZS52Y3Byb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJv
agppbmRleCAyN2MzYzVjLi5kOTY1Y2JlIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZj
cHJvai9XZWJDb3JlLnZjcHJvagpAQCAtNjU2NzcsNyArNjU2NzcsNyBAQAogCQkJCQk+CiAJCQkJ
PC9GaWxlPgogCQkJCTxGaWxlCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXGZyb250
LWVuZFxDb25zb2xlVmlldy5qcyIKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcZnJv
bnQtZW5kXENvbnNvbGVNZXNzYWdlLmpzIgogCQkJCQk+CiAJCQkJPC9GaWxlPgogCQkJCTxGaWxl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NvbnNvbGVN
ZXNzYWdlLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Db25zb2xlTWVz
c2FnZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDdjMjgzCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Db25zb2xl
TWVzc2FnZS5qcwpAQCAtMCwwICsxLDUyMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNywg
MjAwOCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA5IEpvc2VwaCBQZWNvcmFybworICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhl
IG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YK
KyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisg
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKK1dlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZSA9IGZ1bmN0aW9u
KHNvdXJjZSwgdHlwZSwgbGV2ZWwsIGxpbmUsIHVybCwgcmVwZWF0Q291bnQsIG1lc3NhZ2UsIHBh
cmFtZXRlcnMsIHN0YWNrVHJhY2UsIHJlcXVlc3RJZCkKK3sKKyAgICB0aGlzLnNvdXJjZSA9IHNv
dXJjZTsKKyAgICB0aGlzLnR5cGUgPSB0eXBlOworICAgIHRoaXMubGV2ZWwgPSBsZXZlbDsKKyAg
ICB0aGlzLmxpbmUgPSBsaW5lOworICAgIHRoaXMudXJsID0gdXJsOworICAgIHRoaXMucmVwZWF0
Q291bnQgPSByZXBlYXRDb3VudDsKKyAgICB0aGlzLnJlcGVhdERlbHRhID0gcmVwZWF0Q291bnQ7
CisgICAgdGhpcy50b3RhbFJlcGVhdENvdW50ID0gcmVwZWF0Q291bnQ7CisgICAgdGhpcy5fbWVz
c2FnZVRleHQgPSBtZXNzYWdlOworICAgIHRoaXMuX3BhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzOwor
ICAgIHRoaXMuX3N0YWNrVHJhY2UgPSBzdGFja1RyYWNlOworICAgIHRoaXMuX3JlcXVlc3RJZCA9
IHJlcXVlc3RJZDsKKworICAgIGlmIChzdGFja1RyYWNlICYmIHN0YWNrVHJhY2UubGVuZ3RoKSB7
CisgICAgICAgIHZhciB0b3BDYWxsRnJhbWUgPSBzdGFja1RyYWNlWzBdOworICAgICAgICBpZiAo
IXRoaXMudXJsKQorICAgICAgICAgICAgdGhpcy51cmwgPSB0b3BDYWxsRnJhbWUuc2NyaXB0TmFt
ZTsKKyAgICAgICAgaWYgKCF0aGlzLmxpbmUpCisgICAgICAgICAgICB0aGlzLmxpbmUgPSB0b3BD
YWxsRnJhbWUubGluZU51bWJlcjsKKyAgICB9CisKKyAgICB0aGlzLl9mb3JtYXRNZXNzYWdlKCk7
Cit9CisKK1dlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5jcmVhdGVUZXh0TWVzc2FnZSA9IGZ1
bmN0aW9uKHRleHQsIGxldmVsKQoreworICAgIGxldmVsID0gbGV2ZWwgfHwgV2ViSW5zcGVjdG9y
LkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VMZXZlbC5Mb2c7CisgICAgcmV0dXJuIG5ldyBXZWJJbnNw
ZWN0b3IuQ29uc29sZU1lc3NhZ2UoV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VT
b3VyY2UuSlMsIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5Mb2csIGxl
dmVsLCAwLCBudWxsLCAxLCBudWxsLCBbdGV4dF0sIG51bGwpOworfQorCitXZWJJbnNwZWN0b3Iu
Q29uc29sZU1lc3NhZ2UucHJvdG90eXBlID0geworICAgIF9mb3JtYXRNZXNzYWdlOiBmdW5jdGlv
bigpCisgICAgeworICAgICAgICB2YXIgc3RhY2tUcmFjZSA9IHRoaXMuX3N0YWNrVHJhY2U7Cisg
ICAgICAgIHZhciBtZXNzYWdlVGV4dDsKKyAgICAgICAgc3dpdGNoICh0aGlzLnR5cGUpIHsKKyAg
ICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBlLlRy
YWNlOgorICAgICAgICAgICAgICAgIG1lc3NhZ2VUZXh0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5v
ZGUoImNvbnNvbGUudHJhY2UoKSIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgY2FzZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuVW5jYXVnaHRF
eGNlcHRpb246CisgICAgICAgICAgICAgICAgbWVzc2FnZVRleHQgPSBkb2N1bWVudC5jcmVhdGVU
ZXh0Tm9kZSh0aGlzLl9tZXNzYWdlVGV4dCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5OZXR3
b3JrRXJyb3I6CisgICAgICAgICAgICAgICAgdmFyIHJlc291cmNlID0gdGhpcy5fcmVxdWVzdElk
ICYmIFdlYkluc3BlY3Rvci5uZXR3b3JrUmVzb3VyY2VCeUlkKHRoaXMuX3JlcXVlc3RJZCk7Cisg
ICAgICAgICAgICAgICAgaWYgKHJlc291cmNlKSB7CisgICAgICAgICAgICAgICAgICAgIHN0YWNr
VHJhY2UgPSByZXNvdXJjZS5zdGFja1RyYWNlOworCisgICAgICAgICAgICAgICAgICAgIG1lc3Nh
Z2VUZXh0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOworICAgICAgICAgICAgICAg
ICAgICBtZXNzYWdlVGV4dC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShyZXNv
dXJjZS5yZXF1ZXN0TWV0aG9kICsgIiAiKSk7CisgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VU
ZXh0LmFwcGVuZENoaWxkKFdlYkluc3BlY3Rvci5saW5raWZ5VVJMQXNOb2RlKHJlc291cmNlLnVy
bCkpOworICAgICAgICAgICAgICAgICAgICBpZiAocmVzb3VyY2UuZmFpbGVkKQorICAgICAgICAg
ICAgICAgICAgICAgICAgbWVzc2FnZVRleHQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4
dE5vZGUoIiAiICsgcmVzb3VyY2UubG9jYWxpemVkRmFpbERlc2NyaXB0aW9uKSk7CisgICAgICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VUZXh0LmFw
cGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIgIiArIHJlc291cmNlLnN0YXR1c0Nv
ZGUgKyAiICgiICsgcmVzb3VyY2Uuc3RhdHVzVGV4dCArICIpIikpOworICAgICAgICAgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBtZXNzYWdlVGV4dCA9IHRoaXMuX2Zvcm1hdChb
dGhpcy5fbWVzc2FnZVRleHRdKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGNhc2UgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBlLkFzc2VydDoKKyAg
ICAgICAgICAgICAgICB2YXIgYXJncyA9IFtXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkFzc2VydGlv
biBmYWlsZWQ6IildOworICAgICAgICAgICAgICAgIGlmICh0aGlzLl9wYXJhbWV0ZXJzKQorICAg
ICAgICAgICAgICAgICAgICBhcmdzID0gYXJncy5jb25jYXQodGhpcy5fcGFyYW1ldGVycyk7Cisg
ICAgICAgICAgICAgICAgbWVzc2FnZVRleHQgPSB0aGlzLl9mb3JtYXQoYXJncyk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db25zb2xlTWVz
c2FnZS5NZXNzYWdlVHlwZS5PYmplY3Q6CisgICAgICAgICAgICAgICAgdmFyIG9iaiA9IHRoaXMu
X3BhcmFtZXRlcnMgPyB0aGlzLl9wYXJhbWV0ZXJzWzBdIDogdW5kZWZpbmVkOworICAgICAgICAg
ICAgICAgIHZhciBhcmdzID0gWyIlTyIsIG9ial07CisgICAgICAgICAgICAgICAgbWVzc2FnZVRl
eHQgPSB0aGlzLl9mb3JtYXQoYXJncyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHZhciBhcmdzID0gdGhpcy5fcGFyYW1ldGVy
cyB8fCBbdGhpcy5fbWVzc2FnZVRleHRdOworICAgICAgICAgICAgICAgIG1lc3NhZ2VUZXh0ID0g
dGhpcy5fZm9ybWF0KGFyZ3MpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICAgICAgdGhpcy5fZm9ybWF0dGVkTWVzc2FnZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
InNwYW4iKTsKKyAgICAgICAgdGhpcy5fZm9ybWF0dGVkTWVzc2FnZS5jbGFzc05hbWUgPSAiY29u
c29sZS1tZXNzYWdlLXRleHQgc291cmNlLWNvZGUiOworCisgICAgICAgIGlmICh0aGlzLnVybCAm
JiB0aGlzLnVybCAhPT0gInVuZGVmaW5lZCIpIHsKKyAgICAgICAgICAgIHZhciB1cmxFbGVtZW50
ID0gV2ViSW5zcGVjdG9yLmxpbmtpZnlSZXNvdXJjZUFzTm9kZSh0aGlzLnVybCwgInNjcmlwdHMi
LCB0aGlzLmxpbmUsICJjb25zb2xlLW1lc3NhZ2UtdXJsIik7CisgICAgICAgICAgICB0aGlzLl9m
b3JtYXR0ZWRNZXNzYWdlLmFwcGVuZENoaWxkKHVybEVsZW1lbnQpOworICAgICAgICB9CisKKyAg
ICAgICAgdGhpcy5fZm9ybWF0dGVkTWVzc2FnZS5hcHBlbmRDaGlsZChtZXNzYWdlVGV4dCk7CisK
KyAgICAgICAgaWYgKHRoaXMuX3N0YWNrVHJhY2UpIHsKKyAgICAgICAgICAgIHN3aXRjaCAodGhp
cy50eXBlKSB7CisgICAgICAgICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3Nh
Z2UuTWVzc2FnZVR5cGUuVHJhY2U6CisgICAgICAgICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3Iu
Q29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuVW5jYXVnaHRFeGNlcHRpb246CisgICAgICAgICAg
ICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuTmV0d29y
a0Vycm9yOgorICAgICAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdl
Lk1lc3NhZ2VUeXBlLkFzc2VydDogeworICAgICAgICAgICAgICAgICAgICB2YXIgb2wgPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCJvbCIpOworICAgICAgICAgICAgICAgICAgICBvbC5jbGFzc05h
bWUgPSAib3V0bGluZS1kaXNjbG9zdXJlIjsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHRyZWVP
dXRsaW5lID0gbmV3IFRyZWVPdXRsaW5lKG9sKTsKKworICAgICAgICAgICAgICAgICAgICB2YXIg
Y29udGVudCA9IHRoaXMuX2Zvcm1hdHRlZE1lc3NhZ2U7CisgICAgICAgICAgICAgICAgICAgIHZh
ciByb290ID0gbmV3IFRyZWVFbGVtZW50KGNvbnRlbnQsIG51bGwsIHRydWUpOworICAgICAgICAg
ICAgICAgICAgICBjb250ZW50LnRyZWVFbGVtZW50Rm9yVGVzdCA9IHJvb3Q7CisgICAgICAgICAg
ICAgICAgICAgIHRyZWVPdXRsaW5lLmFwcGVuZENoaWxkKHJvb3QpOworICAgICAgICAgICAgICAg
ICAgICBpZiAodGhpcy50eXBlID09PSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2Fn
ZVR5cGUuVHJhY2UpCisgICAgICAgICAgICAgICAgICAgICAgICByb290LmV4cGFuZCgpOworCisg
ICAgICAgICAgICAgICAgICAgIHRoaXMuX3BvcHVsYXRlU3RhY2tUcmFjZVRyZWVFbGVtZW50KHJv
b3QpOworICAgICAgICAgICAgICAgICAgICB0aGlzLl9mb3JtYXR0ZWRNZXNzYWdlID0gb2w7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8g
VGhpcyBpcyB1c2VkIGZvciBpbmxpbmUgbWVzc2FnZSBidWJibGVzIGluIFNvdXJjZUZyYW1lcywg
b3Igb3RoZXIgcGxhaW4tdGV4dCByZXByZXNlbnRhdGlvbnMuCisgICAgICAgIHRoaXMubWVzc2Fn
ZSA9IHRoaXMuX2Zvcm1hdHRlZE1lc3NhZ2UudGV4dENvbnRlbnQ7CisgICAgfSwKKworICAgIGlz
RXJyb3JPcldhcm5pbmc6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVybiAodGhpcy5s
ZXZlbCA9PT0gV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VMZXZlbC5XYXJuaW5n
IHx8IHRoaXMubGV2ZWwgPT09IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlTGV2
ZWwuRXJyb3IpOworICAgIH0sCisKKyAgICBfZm9ybWF0OiBmdW5jdGlvbihwYXJhbWV0ZXJzKQor
ICAgIHsKKyAgICAgICAgLy8gVGhpcyBub2RlIGlzIHVzZWQgbGlrZSBhIEJ1aWxkZXIuIFZhbHVl
cyBhcmUgY29udGludWFsbHkgYXBwZW5kZWQgb250byBpdC4KKyAgICAgICAgdmFyIGZvcm1hdHRl
ZFJlc3VsdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKKyAgICAgICAgaWYgKCFw
YXJhbWV0ZXJzLmxlbmd0aCkKKyAgICAgICAgICAgIHJldHVybiBmb3JtYXR0ZWRSZXN1bHQ7CisK
KyAgICAgICAgLy8gRm9ybWF0dGluZyBjb2RlIGJlbG93IGFzc3VtZXMgdGhhdCBwYXJhbWV0ZXJz
IGFyZSBhbGwgd3JhcHBlcnMgd2hlcmVhcyBmcm9udGVuZCBjb25zb2xlCisgICAgICAgIC8vIEFQ
SSBhbGxvd3MgcGFzc2luZyBhcmJpdHJhcnkgdmFsdWVzIGFzIG1lc3NhZ2VzIChzdHJpbmdzLCBu
dW1iZXJzLCBldGMuKS4gV3JhcCB0aGVtIGhlcmUuCisgICAgICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgcGFyYW1ldGVycy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgaWYgKHR5cGVvZiBwYXJh
bWV0ZXJzW2ldID09PSAib2JqZWN0IikKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzW2ldID0g
V2ViSW5zcGVjdG9yLlJlbW90ZU9iamVjdC5mcm9tUGF5bG9hZChwYXJhbWV0ZXJzW2ldKTsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzW2ldID0gV2ViSW5zcGVj
dG9yLlJlbW90ZU9iamVjdC5mcm9tUHJpbWl0aXZlVmFsdWUocGFyYW1ldGVyc1tpXSk7CisgICAg
ICAgIH0KKworICAgICAgICAvLyBUaGVyZSBjYW4gYmUgc3RyaW5nIGxvZyBhbmQgc3RyaW5nIGV2
YWwgcmVzdWx0LiBXZSBkaXN0aW5ndWlzaCBiZXR3ZWVuIHRoZW0gYmFzZWQgb24gbWVzc2FnZSB0
eXBlLgorICAgICAgICB2YXIgc2hvdWxkRm9ybWF0TWVzc2FnZSA9IFdlYkluc3BlY3Rvci5SZW1v
dGVPYmplY3QudHlwZShwYXJhbWV0ZXJzWzBdKSA9PT0gInN0cmluZyIgJiYgdGhpcy50eXBlICE9
PSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuUmVzdWx0OworCisgICAg
ICAgIC8vIE11bHRpcGxlIHBhcmFtZXRlcnMgd2l0aCB0aGUgZmlyc3QgYmVpbmcgYSBmb3JtYXQg
c3RyaW5nLiBTYXZlIHVudXNlZCBzdWJzdGl0dXRpb25zLgorICAgICAgICBpZiAoc2hvdWxkRm9y
bWF0TWVzc2FnZSkgeworICAgICAgICAgICAgLy8gTXVsdGlwbGUgcGFyYW1ldGVycyB3aXRoIHRo
ZSBmaXJzdCBiZWluZyBhIGZvcm1hdCBzdHJpbmcuIFNhdmUgdW51c2VkIHN1YnN0aXR1dGlvbnMu
CisgICAgICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5fZm9ybWF0V2l0aFN1YnN0aXR1dGlvblN0
cmluZyhwYXJhbWV0ZXJzLCBmb3JtYXR0ZWRSZXN1bHQpOworICAgICAgICAgICAgcGFyYW1ldGVy
cyA9IHJlc3VsdC51bnVzZWRTdWJzdGl0dXRpb25zOworICAgICAgICAgICAgaWYgKHBhcmFtZXRl
cnMubGVuZ3RoKQorICAgICAgICAgICAgICAgIGZvcm1hdHRlZFJlc3VsdC5hcHBlbmRDaGlsZChk
b2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiICIpKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFNp
bmdsZSBwYXJhbWV0ZXIsIG9yIHVudXNlZCBzdWJzdGl0dXRpb25zIGZyb20gYWJvdmUuCisgICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFyYW1ldGVycy5sZW5ndGg7ICsraSkgeworICAgICAg
ICAgICAgLy8gSW5saW5lIHN0cmluZ3Mgd2hlbiBmb3JtYXR0aW5nLgorICAgICAgICAgICAgaWYg
KHNob3VsZEZvcm1hdE1lc3NhZ2UgJiYgcGFyYW1ldGVyc1tpXS50eXBlID09PSAic3RyaW5nIikK
KyAgICAgICAgICAgICAgICBmb3JtYXR0ZWRSZXN1bHQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3Jl
YXRlVGV4dE5vZGUocGFyYW1ldGVyc1tpXS5kZXNjcmlwdGlvbikpOworICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIGZvcm1hdHRlZFJlc3VsdC5hcHBlbmRDaGlsZChXZWJJbnNwZWN0
b3IuY29uc29sZS5fZm9ybWF0KHBhcmFtZXRlcnNbaV0pKTsKKyAgICAgICAgICAgIGlmIChpIDwg
cGFyYW1ldGVycy5sZW5ndGggLSAxKQorICAgICAgICAgICAgICAgIGZvcm1hdHRlZFJlc3VsdC5h
cHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiICIpKTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gZm9ybWF0dGVkUmVzdWx0OworICAgIH0sCisKKyAgICBfZm9ybWF0V2l0aFN1
YnN0aXR1dGlvblN0cmluZzogZnVuY3Rpb24ocGFyYW1ldGVycywgZm9ybWF0dGVkUmVzdWx0KQor
ICAgIHsKKyAgICAgICAgdmFyIGZvcm1hdHRlcnMgPSB7fQorICAgICAgICBmb3IgKHZhciBpIGlu
IFN0cmluZy5zdGFuZGFyZEZvcm1hdHRlcnMpCisgICAgICAgICAgICBmb3JtYXR0ZXJzW2ldID0g
U3RyaW5nLnN0YW5kYXJkRm9ybWF0dGVyc1tpXTsKKworICAgICAgICBmdW5jdGlvbiBjb25zb2xl
Rm9ybWF0V3JhcHBlcihmb3JjZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZ1bmN0
aW9uKG9iaikgeworICAgICAgICAgICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IuY29uc29sZS5f
Zm9ybWF0KG9iaiwgZm9yY2UpOworICAgICAgICAgICAgfTsKKyAgICAgICAgfQorCisgICAgICAg
IC8vIEZpcmVidWcgdXNlcyAlbyBmb3IgZm9ybWF0dGluZyBvYmplY3RzLgorICAgICAgICBmb3Jt
YXR0ZXJzLm8gPSBjb25zb2xlRm9ybWF0V3JhcHBlcigpOworICAgICAgICAvLyBGaXJlYnVnIGFs
bG93cyBib3RoICVpIGFuZCAlZCBmb3IgZm9ybWF0dGluZyBpbnRlZ2Vycy4KKyAgICAgICAgZm9y
bWF0dGVycy5pID0gZm9ybWF0dGVycy5kOworICAgICAgICAvLyBTdXBwb3J0ICVPIHRvIGZvcmNl
IG9iamVjdCBmb3JtYXR0aW5nLCBpbnN0ZWFkIG9mIHRoZSB0eXBlLWJhc2VkICVvIGZvcm1hdHRp
bmcuCisgICAgICAgIGZvcm1hdHRlcnMuTyA9IGNvbnNvbGVGb3JtYXRXcmFwcGVyKHRydWUpOwor
CisgICAgICAgIGZ1bmN0aW9uIGFwcGVuZChhLCBiKQorICAgICAgICB7CisgICAgICAgICAgICBp
ZiAoIShiIGluc3RhbmNlb2YgTm9kZSkpCisgICAgICAgICAgICAgICAgYS5hcHBlbmRDaGlsZChX
ZWJJbnNwZWN0b3IubGlua2lmeVN0cmluZ0FzRnJhZ21lbnQoYi50b1N0cmluZygpKSk7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYS5hcHBlbmRDaGlsZChiKTsKKyAgICAgICAg
ICAgIHJldHVybiBhOworICAgICAgICB9CisKKyAgICAgICAgLy8gU3RyaW5nLmZvcm1hdCBkb2Vz
IHRyZWF0IGZvcm1hdHRlZFJlc3VsdCBsaWtlIGEgQnVpbGRlciwgcmVzdWx0IGlzIGFuIG9iamVj
dC4KKyAgICAgICAgcmV0dXJuIFN0cmluZy5mb3JtYXQocGFyYW1ldGVyc1swXS5kZXNjcmlwdGlv
biwgcGFyYW1ldGVycy5zbGljZSgxKSwgZm9ybWF0dGVycywgZm9ybWF0dGVkUmVzdWx0LCBhcHBl
bmQpOworICAgIH0sCisKKyAgICB0b01lc3NhZ2VFbGVtZW50OiBmdW5jdGlvbigpCisgICAgewor
ICAgICAgICBpZiAodGhpcy5fZWxlbWVudCkKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9lbGVt
ZW50OworCisgICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2
Iik7CisgICAgICAgIGVsZW1lbnQubWVzc2FnZSA9IHRoaXM7CisgICAgICAgIGVsZW1lbnQuY2xh
c3NOYW1lID0gImNvbnNvbGUtbWVzc2FnZSI7CisKKyAgICAgICAgdGhpcy5fZWxlbWVudCA9IGVs
ZW1lbnQ7CisKKyAgICAgICAgc3dpdGNoICh0aGlzLmxldmVsKSB7CisgICAgICAgICAgICBjYXNl
IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlTGV2ZWwuVGlwOgorICAgICAgICAg
ICAgICAgIGVsZW1lbnQuYWRkU3R5bGVDbGFzcygiY29uc29sZS10aXAtbGV2ZWwiKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNvbnNvbGVN
ZXNzYWdlLk1lc3NhZ2VMZXZlbC5Mb2c6CisgICAgICAgICAgICAgICAgZWxlbWVudC5hZGRTdHls
ZUNsYXNzKCJjb25zb2xlLWxvZy1sZXZlbCIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZUxldmVsLkRl
YnVnOgorICAgICAgICAgICAgICAgIGVsZW1lbnQuYWRkU3R5bGVDbGFzcygiY29uc29sZS1kZWJ1
Zy1sZXZlbCIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBXZWJJ
bnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZUxldmVsLldhcm5pbmc6CisgICAgICAgICAg
ICAgICAgZWxlbWVudC5hZGRTdHlsZUNsYXNzKCJjb25zb2xlLXdhcm5pbmctbGV2ZWwiKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNvbnNv
bGVNZXNzYWdlLk1lc3NhZ2VMZXZlbC5FcnJvcjoKKyAgICAgICAgICAgICAgICBlbGVtZW50LmFk
ZFN0eWxlQ2xhc3MoImNvbnNvbGUtZXJyb3ItbGV2ZWwiKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0aGlzLnR5cGUgPT09IFdlYkluc3BlY3Rvci5D
b25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5TdGFydEdyb3VwIHx8IHRoaXMudHlwZSA9PT0gV2Vi
SW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBlLlN0YXJ0R3JvdXBDb2xsYXBzZWQp
CisgICAgICAgICAgICBlbGVtZW50LmFkZFN0eWxlQ2xhc3MoImNvbnNvbGUtZ3JvdXAtdGl0bGUi
KTsKKworICAgICAgICBpZiAodGhpcy5lbGVtZW50c1RyZWVPdXRsaW5lKSB7CisgICAgICAgICAg
ICBlbGVtZW50LmFkZFN0eWxlQ2xhc3MoIm91dGxpbmUtZGlzY2xvc3VyZSIpOworICAgICAgICAg
ICAgZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmVsZW1lbnRzVHJlZU91dGxpbmUuZWxlbWVudCk7
CisgICAgICAgICAgICByZXR1cm4gZWxlbWVudDsKKyAgICAgICAgfQorCisgICAgICAgIGVsZW1l
bnQuYXBwZW5kQ2hpbGQodGhpcy5fZm9ybWF0dGVkTWVzc2FnZSk7CisKKyAgICAgICAgaWYgKHRo
aXMucmVwZWF0Q291bnQgPiAxKQorICAgICAgICAgICAgdGhpcy5fdXBkYXRlUmVwZWF0Q291bnQo
KTsKKworICAgICAgICByZXR1cm4gZWxlbWVudDsKKyAgICB9LAorCisgICAgX3BvcHVsYXRlU3Rh
Y2tUcmFjZVRyZWVFbGVtZW50OiBmdW5jdGlvbihwYXJlbnRUcmVlRWxlbWVudCkKKyAgICB7Cisg
ICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fc3RhY2tUcmFjZS5sZW5ndGg7IGkrKykg
eworICAgICAgICAgICAgdmFyIGZyYW1lID0gdGhpcy5fc3RhY2tUcmFjZVtpXTsKKworICAgICAg
ICAgICAgdmFyIGNvbnRlbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICAg
ICAgICAgIHZhciBtZXNzYWdlVGV4dEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJz
cGFuIik7CisgICAgICAgICAgICBtZXNzYWdlVGV4dEVsZW1lbnQuY2xhc3NOYW1lID0gImNvbnNv
bGUtbWVzc2FnZS10ZXh0IHNvdXJjZS1jb2RlIjsKKyAgICAgICAgICAgIHZhciBmdW5jdGlvbk5h
bWUgPSBmcmFtZS5mdW5jdGlvbk5hbWUgfHwgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCIoYW5vbnlt
b3VzIGZ1bmN0aW9uKSIpOworICAgICAgICAgICAgbWVzc2FnZVRleHRFbGVtZW50LmFwcGVuZENo
aWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGZ1bmN0aW9uTmFtZSkpOworICAgICAgICAgICAg
Y29udGVudC5hcHBlbmRDaGlsZChtZXNzYWdlVGV4dEVsZW1lbnQpOworCisgICAgICAgICAgICB2
YXIgdXJsRWxlbWVudCA9IFdlYkluc3BlY3Rvci5saW5raWZ5UmVzb3VyY2VBc05vZGUoZnJhbWUu
c2NyaXB0TmFtZSwgInNjcmlwdHMiLCBmcmFtZS5saW5lTnVtYmVyLCAiY29uc29sZS1tZXNzYWdl
LXVybCIpOworICAgICAgICAgICAgY29udGVudC5hcHBlbmRDaGlsZCh1cmxFbGVtZW50KTsKKwor
ICAgICAgICAgICAgdmFyIHRyZWVFbGVtZW50ID0gbmV3IFRyZWVFbGVtZW50KGNvbnRlbnQpOwor
ICAgICAgICAgICAgcGFyZW50VHJlZUVsZW1lbnQuYXBwZW5kQ2hpbGQodHJlZUVsZW1lbnQpOwor
ICAgICAgICB9CisgICAgfSwKKworICAgIF91cGRhdGVSZXBlYXRDb3VudDogZnVuY3Rpb24oKSB7
CisgICAgICAgIGlmICghdGhpcy5yZXBlYXRDb3VudEVsZW1lbnQpIHsKKyAgICAgICAgICAgIHRo
aXMucmVwZWF0Q291bnRFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwor
ICAgICAgICAgICAgdGhpcy5yZXBlYXRDb3VudEVsZW1lbnQuY2xhc3NOYW1lID0gImJ1YmJsZSI7
CisKKyAgICAgICAgICAgIHRoaXMuX2VsZW1lbnQuaW5zZXJ0QmVmb3JlKHRoaXMucmVwZWF0Q291
bnRFbGVtZW50LCB0aGlzLl9lbGVtZW50LmZpcnN0Q2hpbGQpOworICAgICAgICAgICAgdGhpcy5f
ZWxlbWVudC5hZGRTdHlsZUNsYXNzKCJyZXBlYXRlZC1tZXNzYWdlIik7CisgICAgICAgIH0KKyAg
ICAgICAgdGhpcy5yZXBlYXRDb3VudEVsZW1lbnQudGV4dENvbnRlbnQgPSB0aGlzLnJlcGVhdENv
dW50OworICAgIH0sCisKKyAgICB0b1N0cmluZzogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAg
dmFyIHNvdXJjZVN0cmluZzsKKyAgICAgICAgc3dpdGNoICh0aGlzLnNvdXJjZSkgeworICAgICAg
ICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVNvdXJjZS5IVE1M
OgorICAgICAgICAgICAgICAgIHNvdXJjZVN0cmluZyA9ICJIVE1MIjsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1l
c3NhZ2VTb3VyY2UuV01MOgorICAgICAgICAgICAgICAgIHNvdXJjZVN0cmluZyA9ICJXTUwiOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuQ29u
c29sZU1lc3NhZ2UuTWVzc2FnZVNvdXJjZS5YTUw6CisgICAgICAgICAgICAgICAgc291cmNlU3Ry
aW5nID0gIlhNTCI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFdl
Ykluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlU291cmNlLkpTOgorICAgICAgICAgICAg
ICAgIHNvdXJjZVN0cmluZyA9ICJKUyI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlU291cmNlLkNTUzoK
KyAgICAgICAgICAgICAgICBzb3VyY2VTdHJpbmcgPSAiQ1NTIjsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3Nh
Z2VTb3VyY2UuT3RoZXI6CisgICAgICAgICAgICAgICAgc291cmNlU3RyaW5nID0gIk90aGVyIjsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHZhciB0eXBlU3Ry
aW5nOworICAgICAgICBzd2l0Y2ggKHRoaXMudHlwZSkgeworICAgICAgICAgICAgY2FzZSBXZWJJ
bnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuTG9nOgorICAgICAgICAgICAgY2Fz
ZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuVW5jYXVnaHRFeGNlcHRp
b246CisgICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdl
VHlwZS5OZXR3b3JrRXJyb3I6CisgICAgICAgICAgICAgICAgdHlwZVN0cmluZyA9ICJMb2ciOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuQ29u
c29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuT2JqZWN0OgorICAgICAgICAgICAgICAgIHR5cGVTdHJp
bmcgPSAiT2JqZWN0IjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug
V2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBlLlRyYWNlOgorICAgICAgICAg
ICAgICAgIHR5cGVTdHJpbmcgPSAiVHJhY2UiOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuU3Rh
cnRHcm91cENvbGxhcHNlZDoKKyAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNvbnNvbGVN
ZXNzYWdlLk1lc3NhZ2VUeXBlLlN0YXJ0R3JvdXA6CisgICAgICAgICAgICAgICAgdHlwZVN0cmlu
ZyA9ICJTdGFydCBHcm91cCI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBj
YXNlIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5FbmRHcm91cDoKKyAg
ICAgICAgICAgICAgICB0eXBlU3RyaW5nID0gIkVuZCBHcm91cCI7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNz
YWdlVHlwZS5Bc3NlcnQ6CisgICAgICAgICAgICAgICAgdHlwZVN0cmluZyA9ICJBc3NlcnQiOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuQ29u
c29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuUmVzdWx0OgorICAgICAgICAgICAgICAgIHR5cGVTdHJp
bmcgPSAiUmVzdWx0IjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAg
ICAgIHZhciBsZXZlbFN0cmluZzsKKyAgICAgICAgc3dpdGNoICh0aGlzLmxldmVsKSB7CisgICAg
ICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlTGV2ZWwuVGlw
OgorICAgICAgICAgICAgICAgIGxldmVsU3RyaW5nID0gIlRpcCI7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNz
YWdlTGV2ZWwuTG9nOgorICAgICAgICAgICAgICAgIGxldmVsU3RyaW5nID0gIkxvZyI7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db25zb2xl
TWVzc2FnZS5NZXNzYWdlTGV2ZWwuV2FybmluZzoKKyAgICAgICAgICAgICAgICBsZXZlbFN0cmlu
ZyA9ICJXYXJuaW5nIjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug
V2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VMZXZlbC5EZWJ1ZzoKKyAgICAgICAg
ICAgICAgICBsZXZlbFN0cmluZyA9ICJEZWJ1ZyI7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlTGV2ZWwu
RXJyb3I6CisgICAgICAgICAgICAgICAgbGV2ZWxTdHJpbmcgPSAiRXJyb3IiOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHNvdXJjZVN0cmluZyAr
ICIgIiArIHR5cGVTdHJpbmcgKyAiICIgKyBsZXZlbFN0cmluZyArICI6ICIgKyB0aGlzLl9mb3Jt
YXR0ZWRNZXNzYWdlLnRleHRDb250ZW50ICsgIlxuIiArIHRoaXMudXJsICsgIiBsaW5lICIgKyB0
aGlzLmxpbmU7CisgICAgfSwKKworICAgIGlzRXF1YWw6IGZ1bmN0aW9uKG1zZykKKyAgICB7Cisg
ICAgICAgIGlmICghbXNnKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlm
ICh0aGlzLl9zdGFja1RyYWNlKSB7CisgICAgICAgICAgICBpZiAoIW1zZy5fc3RhY2tUcmFjZSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB2YXIgbCA9IHRoaXMu
X3N0YWNrVHJhY2U7CisgICAgICAgICAgICB2YXIgciA9IG1zZy5fc3RhY2tUcmFjZTsKKyAgICAg
ICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbC5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAg
ICAgIGlmIChsW2ldLnNjcmlwdE5hbWUgIT09IHJbaV0uc2NyaXB0TmFtZSB8fAorICAgICAgICAg
ICAgICAgICAgICBsW2ldLmZ1bmN0aW9uTmFtZSAhPT0gcltpXS5mdW5jdGlvbk5hbWUgfHwKKyAg
ICAgICAgICAgICAgICAgICAgbFtpXS5saW5lTnVtYmVyICE9PSByW2ldLmxpbmVOdW1iZXIgfHwK
KyAgICAgICAgICAgICAgICAgICAgbFtpXS5jb2x1bW4gIT09IHJbaV0uY29sdW1uKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwor
ICAgICAgICByZXR1cm4gKHRoaXMuc291cmNlID09PSBtc2cuc291cmNlKQorICAgICAgICAgICAg
JiYgKHRoaXMudHlwZSA9PT0gbXNnLnR5cGUpCisgICAgICAgICAgICAmJiAodGhpcy5sZXZlbCA9
PT0gbXNnLmxldmVsKQorICAgICAgICAgICAgJiYgKHRoaXMubGluZSA9PT0gbXNnLmxpbmUpCisg
ICAgICAgICAgICAmJiAodGhpcy51cmwgPT09IG1zZy51cmwpCisgICAgICAgICAgICAmJiAodGhp
cy5tZXNzYWdlID09PSBtc2cubWVzc2FnZSkKKyAgICAgICAgICAgICYmICh0aGlzLl9yZXF1ZXN0
SWQgPT09IG1zZy5fcmVxdWVzdElkKTsKKyAgICB9Cit9CisKKy8vIE5vdGU6IEtlZXAgdGhlc2Ug
Y29uc3RhbnRzIGluIHN5bmMgd2l0aCB0aGUgb25lcyBpbiBDb25zb2xlLmgKK1dlYkluc3BlY3Rv
ci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlU291cmNlID0geworICAgIEhUTUw6IDAsCisgICAgV01M
OiAxLAorICAgIFhNTDogMiwKKyAgICBKUzogMywKKyAgICBDU1M6IDQsCisgICAgT3RoZXI6IDUK
K30KKworV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBlID0geworICAgIExv
ZzogMCwKKyAgICBPYmplY3Q6IDEsCisgICAgVHJhY2U6IDIsCisgICAgU3RhcnRHcm91cDogMywK
KyAgICBTdGFydEdyb3VwQ29sbGFwc2VkOiA0LAorICAgIEVuZEdyb3VwOiA1LAorICAgIEFzc2Vy
dDogNiwKKyAgICBVbmNhdWdodEV4Y2VwdGlvbjogNywKKyAgICBOZXR3b3JrRXJyb3I6OCwKKyAg
ICBSZXN1bHQ6IDkKK30KKworV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VMZXZl
bCA9IHsKKyAgICBUaXA6IDAsCisgICAgTG9nOiAxLAorICAgIFdhcm5pbmc6IDIsCisgICAgRXJy
b3I6IDMsCisgICAgRGVidWc6IDQKK30KKworV2ViSW5zcGVjdG9yLkNvbnNvbGVDb21tYW5kID0g
ZnVuY3Rpb24oY29tbWFuZCkKK3sKKyAgICB0aGlzLmNvbW1hbmQgPSBjb21tYW5kOworfQorCitX
ZWJJbnNwZWN0b3IuQ29uc29sZUNvbW1hbmQucHJvdG90eXBlID0geworICAgIHRvTWVzc2FnZUVs
ZW1lbnQ6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgICAgIGVsZW1lbnQuY29tbWFuZCA9IHRoaXM7Cisg
ICAgICAgIGVsZW1lbnQuY2xhc3NOYW1lID0gImNvbnNvbGUtdXNlci1jb21tYW5kIjsKKworICAg
ICAgICB2YXIgY29tbWFuZFRleHRFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3Bh
biIpOworICAgICAgICBjb21tYW5kVGV4dEVsZW1lbnQuY2xhc3NOYW1lID0gImNvbnNvbGUtbWVz
c2FnZS10ZXh0IHNvdXJjZS1jb2RlIjsKKyAgICAgICAgY29tbWFuZFRleHRFbGVtZW50LnRleHRD
b250ZW50ID0gdGhpcy5jb21tYW5kOworICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxkKGNvbW1h
bmRUZXh0RWxlbWVudCk7CisKKyAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CisgICAgfQorfQorCitX
ZWJJbnNwZWN0b3IuQ29uc29sZUNvbW1hbmRSZXN1bHQgPSBmdW5jdGlvbihyZXN1bHQsIG9yaWdp
bmF0aW5nQ29tbWFuZCkKK3sKKyAgICB2YXIgbGV2ZWwgPSAocmVzdWx0LmlzRXJyb3IoKSA/IFdl
Ykluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlTGV2ZWwuRXJyb3IgOiBXZWJJbnNwZWN0
b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZUxldmVsLkxvZyk7CisgICAgdGhpcy5vcmlnaW5hdGlu
Z0NvbW1hbmQgPSBvcmlnaW5hdGluZ0NvbW1hbmQ7CisgICAgV2ViSW5zcGVjdG9yLkNvbnNvbGVN
ZXNzYWdlLmNhbGwodGhpcywgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VTb3Vy
Y2UuSlMsIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5SZXN1bHQsIGxl
dmVsLCAtMSwgbnVsbCwgMSwgbnVsbCwgW3Jlc3VsdF0pOworfQorCitXZWJJbnNwZWN0b3IuQ29u
c29sZUNvbW1hbmRSZXN1bHQucHJvdG90eXBlID0geworICAgIHRvTWVzc2FnZUVsZW1lbnQ6IGZ1
bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHZhciBlbGVtZW50ID0gV2ViSW5zcGVjdG9yLkNvbnNv
bGVNZXNzYWdlLnByb3RvdHlwZS50b01lc3NhZ2VFbGVtZW50LmNhbGwodGhpcyk7CisgICAgICAg
IGVsZW1lbnQuYWRkU3R5bGVDbGFzcygiY29uc29sZS11c2VyLWNvbW1hbmQtcmVzdWx0Iik7Cisg
ICAgICAgIHJldHVybiBlbGVtZW50OworICAgIH0KK30KKworV2ViSW5zcGVjdG9yLkNvbnNvbGVD
b21tYW5kUmVzdWx0LnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuQ29uc29sZU1l
c3NhZ2UucHJvdG90eXBlOworCitXZWJJbnNwZWN0b3IuQ29uc29sZUdyb3VwID0gZnVuY3Rpb24o
cGFyZW50R3JvdXApCit7CisgICAgdGhpcy5wYXJlbnRHcm91cCA9IHBhcmVudEdyb3VwOworCisg
ICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICBlbGVt
ZW50LmNsYXNzTmFtZSA9ICJjb25zb2xlLWdyb3VwIjsKKyAgICBlbGVtZW50Lmdyb3VwID0gdGhp
czsKKyAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50OworCisgICAgdmFyIG1lc3NhZ2VzRWxlbWVu
dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAgIG1lc3NhZ2VzRWxlbWVudC5j
bGFzc05hbWUgPSAiY29uc29sZS1ncm91cC1tZXNzYWdlcyI7CisgICAgZWxlbWVudC5hcHBlbmRD
aGlsZChtZXNzYWdlc0VsZW1lbnQpOworICAgIHRoaXMubWVzc2FnZXNFbGVtZW50ID0gbWVzc2Fn
ZXNFbGVtZW50OworfQorCitXZWJJbnNwZWN0b3IuQ29uc29sZUdyb3VwLnByb3RvdHlwZSA9IHsK
KyAgICBhZGRNZXNzYWdlOiBmdW5jdGlvbihtc2cpCisgICAgeworICAgICAgICB2YXIgZWxlbWVu
dCA9IG1zZy50b01lc3NhZ2VFbGVtZW50KCk7CisKKyAgICAgICAgaWYgKG1zZy50eXBlID09PSBX
ZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuU3RhcnRHcm91cCB8fCBtc2cu
dHlwZSA9PT0gV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBlLlN0YXJ0R3Jv
dXBDb2xsYXBzZWQpIHsKKyAgICAgICAgICAgIHRoaXMubWVzc2FnZXNFbGVtZW50LnBhcmVudE5v
ZGUuaW5zZXJ0QmVmb3JlKGVsZW1lbnQsIHRoaXMubWVzc2FnZXNFbGVtZW50KTsKKyAgICAgICAg
ICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCB0aGlzLl90aXRsZUNsaWNrZWQu
YmluZCh0aGlzKSwgZmFsc2UpOworICAgICAgICAgICAgdmFyIGdyb3VwRWxlbWVudCA9IGVsZW1l
bnQuZW5jbG9zaW5nTm9kZU9yU2VsZldpdGhDbGFzcygiY29uc29sZS1ncm91cCIpOworICAgICAg
ICAgICAgaWYgKGdyb3VwRWxlbWVudCAmJiBtc2cudHlwZSA9PT0gV2ViSW5zcGVjdG9yLkNvbnNv
bGVNZXNzYWdlLk1lc3NhZ2VUeXBlLlN0YXJ0R3JvdXBDb2xsYXBzZWQpCisgICAgICAgICAgICAg
ICAgZ3JvdXBFbGVtZW50LmFkZFN0eWxlQ2xhc3MoImNvbGxhcHNlZCIpOworICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgIHRoaXMubWVzc2FnZXNFbGVtZW50LmFwcGVuZENoaWxkKGVsZW1lbnQp
OworCisgICAgICAgIGlmIChlbGVtZW50LnByZXZpb3VzU2libGluZyAmJiBtc2cub3JpZ2luYXRp
bmdDb21tYW5kICYmIGVsZW1lbnQucHJldmlvdXNTaWJsaW5nLmNvbW1hbmQgPT09IG1zZy5vcmln
aW5hdGluZ0NvbW1hbmQpCisgICAgICAgICAgICBlbGVtZW50LnByZXZpb3VzU2libGluZy5hZGRT
dHlsZUNsYXNzKCJjb25zb2xlLWFkamFjZW50LXVzZXItY29tbWFuZC1yZXN1bHQiKTsKKyAgICB9
LAorCisgICAgX3RpdGxlQ2xpY2tlZDogZnVuY3Rpb24oZXZlbnQpCisgICAgeworICAgICAgICB2
YXIgZ3JvdXBUaXRsZUVsZW1lbnQgPSBldmVudC50YXJnZXQuZW5jbG9zaW5nTm9kZU9yU2VsZldp
dGhDbGFzcygiY29uc29sZS1ncm91cC10aXRsZSIpOworICAgICAgICBpZiAoZ3JvdXBUaXRsZUVs
ZW1lbnQpIHsKKyAgICAgICAgICAgIHZhciBncm91cEVsZW1lbnQgPSBncm91cFRpdGxlRWxlbWVu
dC5lbmNsb3NpbmdOb2RlT3JTZWxmV2l0aENsYXNzKCJjb25zb2xlLWdyb3VwIik7CisgICAgICAg
ICAgICBpZiAoZ3JvdXBFbGVtZW50KQorICAgICAgICAgICAgICAgIGlmIChncm91cEVsZW1lbnQu
aGFzU3R5bGVDbGFzcygiY29sbGFwc2VkIikpCisgICAgICAgICAgICAgICAgICAgIGdyb3VwRWxl
bWVudC5yZW1vdmVTdHlsZUNsYXNzKCJjb2xsYXBzZWQiKTsKKyAgICAgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgICAgIGdyb3VwRWxlbWVudC5hZGRTdHlsZUNsYXNzKCJjb2xsYXBz
ZWQiKTsKKyAgICAgICAgICAgIGdyb3VwVGl0bGVFbGVtZW50LnNjcm9sbEludG9WaWV3SWZOZWVk
ZWQodHJ1ZSk7CisgICAgICAgIH0KKworICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsK
KyAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NvbnNvbGVQYW5lbC5qcyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ29uc29sZVBhbmVsLmpzCmluZGV4IDVhMGMy
ZTcuLmIwNmE3ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvQ29uc29sZVBhbmVsLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvQ29uc29sZVBhbmVsLmpzCkBAIC0yNiwxMiArMjYsMjEzIEBACiAgKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICov
CiAKLVdlYkluc3BlY3Rvci5Db25zb2xlUGFuZWwgPSBmdW5jdGlvbigpCitjb25zdCBFeHByZXNz
aW9uU3RvcENoYXJhY3RlcnMgPSAiID06Wyh7OywhKy0qLyZ8Xjw+IjsKKworV2ViSW5zcGVjdG9y
LkNvbnNvbGVQYW5lbCA9IGZ1bmN0aW9uKGRyYXdlcikKIHsKLSAgICBXZWJJbnNwZWN0b3IuUGFu
ZWwuY2FsbCh0aGlzLCAiY29uc29sZSIpOworICAgIFdlYkluc3BlY3Rvci5QYW5lbC5jYWxsKHRo
aXMsICJjb25zb2xlIiwgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnNvbGUtdmlldyIpKTsK
KworICAgIHRoaXMubWVzc2FnZXMgPSBbXTsKKyAgICB0aGlzLmRyYXdlciA9IGRyYXdlcjsKKwor
ICAgIHRoaXMuY2xlYXJCdXR0b24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2xlYXItY29u
c29sZS1zdGF0dXMtYmFyLWl0ZW0iKTsKKyAgICB0aGlzLmNsZWFyQnV0dG9uLnRpdGxlID0gV2Vi
SW5zcGVjdG9yLlVJU3RyaW5nKCJDbGVhciBjb25zb2xlIGxvZy4iKTsKKyAgICB0aGlzLmNsZWFy
QnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgdGhpcy5fY2xlYXJCdXR0b25DbGlja2Vk
LmJpbmQodGhpcyksIGZhbHNlKTsKKworICAgIHRoaXMubWVzc2FnZXNFbGVtZW50ID0gZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoImNvbnNvbGUtbWVzc2FnZXMiKTsKKyAgICB0aGlzLm1lc3NhZ2Vz
RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJzZWxlY3RzdGFydCIsIHRoaXMuX21lc3NhZ2VzU2Vs
ZWN0U3RhcnQuYmluZCh0aGlzKSwgZmFsc2UpOworICAgIHRoaXMubWVzc2FnZXNFbGVtZW50LmFk
ZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgdGhpcy5fbWVzc2FnZXNDbGlja2VkLmJpbmQodGhpcyks
IHRydWUpOworCisgICAgdGhpcy5wcm9tcHRFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoImNvbnNvbGUtcHJvbXB0Iik7CisgICAgdGhpcy5wcm9tcHRFbGVtZW50LmNsYXNzTmFtZSA9
ICJzb3VyY2UtY29kZSI7CisgICAgdGhpcy5wcm9tcHRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIo
ImtleWRvd24iLCB0aGlzLl9wcm9tcHRLZXlEb3duLmJpbmQodGhpcyksIHRydWUpOworICAgIHRo
aXMucHJvbXB0ID0gbmV3IFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0KHRoaXMucHJvbXB0RWxlbWVu
dCwgdGhpcy5jb21wbGV0aW9ucy5iaW5kKHRoaXMpLCBFeHByZXNzaW9uU3RvcENoYXJhY3RlcnMg
KyAiLiIpOworICAgIHRoaXMucHJvbXB0Lmhpc3RvcnkgPSBXZWJJbnNwZWN0b3Iuc2V0dGluZ3Mu
Y29uc29sZUhpc3Rvcnk7CisKKyAgICB0aGlzLnRvcEdyb3VwID0gbmV3IFdlYkluc3BlY3Rvci5D
b25zb2xlR3JvdXAobnVsbCk7CisgICAgdGhpcy5tZXNzYWdlc0VsZW1lbnQuaW5zZXJ0QmVmb3Jl
KHRoaXMudG9wR3JvdXAuZWxlbWVudCwgdGhpcy5wcm9tcHRFbGVtZW50KTsKKyAgICB0aGlzLmN1
cnJlbnRHcm91cCA9IHRoaXMudG9wR3JvdXA7CisKKyAgICB0aGlzLnRvZ2dsZUNvbnNvbGVCdXR0
b24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29uc29sZS1zdGF0dXMtYmFyLWl0ZW0iKTsK
KyAgICB0aGlzLnRvZ2dsZUNvbnNvbGVCdXR0b24udGl0bGUgPSBXZWJJbnNwZWN0b3IuVUlTdHJp
bmcoIlNob3cgY29uc29sZS4iKTsKKyAgICB0aGlzLnRvZ2dsZUNvbnNvbGVCdXR0b24uYWRkRXZl
bnRMaXN0ZW5lcigiY2xpY2siLCB0aGlzLl90b2dnbGVDb25zb2xlQnV0dG9uQ2xpY2tlZC5iaW5k
KHRoaXMpLCBmYWxzZSk7CisKKyAgICAvLyBXaWxsIGhvbGQgdGhlIGxpc3Qgb2YgZmlsdGVyIGVs
ZW1lbnRzCisgICAgdGhpcy5maWx0ZXJCYXJFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoImNvbnNvbGUtZmlsdGVyIik7CisKKyAgICBmdW5jdGlvbiBjcmVhdGVEaXZpZGVyRWxlbWVu
dCgpIHsKKyAgICAgICAgdmFyIGRpdmlkZXJFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgiZGl2Iik7CisgICAgICAgIGRpdmlkZXJFbGVtZW50LmFkZFN0eWxlQ2xhc3MoInNjb3BlLWJh
ci1kaXZpZGVyIik7CisgICAgICAgIHRoaXMuZmlsdGVyQmFyRWxlbWVudC5hcHBlbmRDaGlsZChk
aXZpZGVyRWxlbWVudCk7CisgICAgfQorCisgICAgdmFyIHVwZGF0ZUZpbHRlckhhbmRsZXIgPSB0
aGlzLl91cGRhdGVGaWx0ZXIuYmluZCh0aGlzKTsKKyAgICBmdW5jdGlvbiBjcmVhdGVGaWx0ZXJF
bGVtZW50KGNhdGVnb3J5LCBsYWJlbCkgeworICAgICAgICB2YXIgY2F0ZWdvcnlFbGVtZW50ID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGkiKTsKKyAgICAgICAgY2F0ZWdvcnlFbGVtZW50LmNh
dGVnb3J5ID0gY2F0ZWdvcnk7CisgICAgICAgIGNhdGVnb3J5RWxlbWVudC5jbGFzc05hbWUgPSBj
YXRlZ29yeTsKKyAgICAgICAgY2F0ZWdvcnlFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNr
IiwgdXBkYXRlRmlsdGVySGFuZGxlciwgZmFsc2UpOworICAgICAgICBjYXRlZ29yeUVsZW1lbnQu
dGV4dENvbnRlbnQgPSBsYWJlbDsKKworICAgICAgICB0aGlzLmZpbHRlckJhckVsZW1lbnQuYXBw
ZW5kQ2hpbGQoY2F0ZWdvcnlFbGVtZW50KTsKKworICAgICAgICByZXR1cm4gY2F0ZWdvcnlFbGVt
ZW50OworICAgIH0KKworICAgIHRoaXMuYWxsRWxlbWVudCA9IGNyZWF0ZUZpbHRlckVsZW1lbnQu
Y2FsbCh0aGlzLCAiYWxsIiwgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJBbGwiKSk7CisgICAgY3Jl
YXRlRGl2aWRlckVsZW1lbnQuY2FsbCh0aGlzKTsKKyAgICB0aGlzLmVycm9yRWxlbWVudCA9IGNy
ZWF0ZUZpbHRlckVsZW1lbnQuY2FsbCh0aGlzLCAiZXJyb3JzIiwgV2ViSW5zcGVjdG9yLlVJU3Ry
aW5nKCJFcnJvcnMiKSk7CisgICAgdGhpcy53YXJuaW5nRWxlbWVudCA9IGNyZWF0ZUZpbHRlckVs
ZW1lbnQuY2FsbCh0aGlzLCAid2FybmluZ3MiLCBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIldhcm5p
bmdzIikpOworICAgIHRoaXMubG9nRWxlbWVudCA9IGNyZWF0ZUZpbHRlckVsZW1lbnQuY2FsbCh0
aGlzLCAibG9ncyIsIFdlYkluc3BlY3Rvci5VSVN0cmluZygiTG9ncyIpKTsKKworICAgIHRoaXMu
ZmlsdGVyKHRoaXMuYWxsRWxlbWVudCwgZmFsc2UpOworICAgIHRoaXMuX3JlZ2lzdGVyU2hvcnRj
dXRzKCk7CisKKyAgICB0aGlzLm1lc3NhZ2VzRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJjb250
ZXh0bWVudSIsIHRoaXMuX2hhbmRsZUNvbnRleHRNZW51RXZlbnQuYmluZCh0aGlzKSwgZmFsc2Up
OworCisgICAgdGhpcy5fY3VzdG9tRm9ybWF0dGVycyA9IHsKKyAgICAgICAgIm9iamVjdCI6IHRo
aXMuX2Zvcm1hdG9iamVjdCwKKyAgICAgICAgImFycmF5IjogIHRoaXMuX2Zvcm1hdGFycmF5LAor
ICAgICAgICAibm9kZSI6ICAgdGhpcy5fZm9ybWF0bm9kZSwKKyAgICAgICAgInN0cmluZyI6IHRo
aXMuX2Zvcm1hdHN0cmluZworICAgIH07CisKKyAgICB0aGlzLl9yZWdpc3RlckNvbnNvbGVEb21h
aW5EaXNwYXRjaGVyKCk7CiB9CiAKIFdlYkluc3BlY3Rvci5Db25zb2xlUGFuZWwucHJvdG90eXBl
ID0geworICAgIF9yZWdpc3RlckNvbnNvbGVEb21haW5EaXNwYXRjaGVyOiBmdW5jdGlvbigpIHsK
KyAgICAgICAgdmFyIGNvbnNvbGUgPSB0aGlzOworICAgICAgICB2YXIgZGlzcGF0Y2hlciA9IHsK
KyAgICAgICAgICAgIGFkZENvbnNvbGVNZXNzYWdlOiBmdW5jdGlvbihwYXlsb2FkKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHZhciBjb25zb2xlTWVzc2FnZSA9IG5ldyBXZWJJbnNw
ZWN0b3IuQ29uc29sZU1lc3NhZ2UoCisgICAgICAgICAgICAgICAgICAgIHBheWxvYWQuc291cmNl
LAorICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLnR5cGUsCisgICAgICAgICAgICAgICAgICAg
IHBheWxvYWQubGV2ZWwsCisgICAgICAgICAgICAgICAgICAgIHBheWxvYWQubGluZSwKKyAgICAg
ICAgICAgICAgICAgICAgcGF5bG9hZC51cmwsCisgICAgICAgICAgICAgICAgICAgIHBheWxvYWQu
cmVwZWF0Q291bnQsCisgICAgICAgICAgICAgICAgICAgIHBheWxvYWQubWVzc2FnZSwKKyAgICAg
ICAgICAgICAgICAgICAgcGF5bG9hZC5wYXJhbWV0ZXJzLAorICAgICAgICAgICAgICAgICAgICBw
YXlsb2FkLnN0YWNrVHJhY2UsCisgICAgICAgICAgICAgICAgICAgIHBheWxvYWQucmVxdWVzdElk
KTsKKyAgICAgICAgICAgICAgICBjb25zb2xlLmFkZE1lc3NhZ2UoY29uc29sZU1lc3NhZ2UpOwor
ICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgdXBkYXRlQ29uc29sZU1lc3NhZ2VFeHBpcmVk
Q291bnQ6IGZ1bmN0aW9uKGNvdW50KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHZh
ciBtZXNzYWdlID0gU3RyaW5nLnNwcmludGYoV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCIlZCBjb25z
b2xlIG1lc3NhZ2VzIGFyZSBub3Qgc2hvd24uIiksIGNvdW50KTsKKyAgICAgICAgICAgICAgICBj
b25zb2xlLmFkZE1lc3NhZ2UoV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLmNyZWF0ZVRleHRN
ZXNzYWdlKG1lc3NhZ2UsIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlTGV2ZWwu
V2FybmluZykpOworICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgdXBkYXRlQ29uc29sZU1l
c3NhZ2VSZXBlYXRDb3VudDogZnVuY3Rpb24oY291bnQpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgdmFyIG1zZyA9IGNvbnNvbGUucHJldmlvdXNNZXNzYWdlOworICAgICAgICAgICAg
ICAgIHZhciBwcmV2UmVwZWF0Q291bnQgPSBtc2cudG90YWxSZXBlYXRDb3VudDsKKworICAgICAg
ICAgICAgICAgIGlmICghY29uc29sZS5jb21tYW5kU2luY2VQcmV2aW91c01lc3NhZ2UpIHsKKyAg
ICAgICAgICAgICAgICAgICAgbXNnLnJlcGVhdERlbHRhID0gY291bnQgLSBwcmV2UmVwZWF0Q291
bnQ7CisgICAgICAgICAgICAgICAgICAgIG1zZy5yZXBlYXRDb3VudCA9IG1zZy5yZXBlYXRDb3Vu
dCArIG1zZy5yZXBlYXREZWx0YTsKKyAgICAgICAgICAgICAgICAgICAgbXNnLnRvdGFsUmVwZWF0
Q291bnQgPSBjb3VudDsKKyAgICAgICAgICAgICAgICAgICAgbXNnLl91cGRhdGVSZXBlYXRDb3Vu
dCgpOworICAgICAgICAgICAgICAgICAgICBjb25zb2xlLl9pbmNyZW1lbnRFcnJvcldhcm5pbmdD
b3VudChtc2cpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
IHZhciBtc2dDb3B5ID0gbmV3IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZShtc2cuc291cmNl
LCBtc2cudHlwZSwgbXNnLmxldmVsLCBtc2cubGluZSwgbXNnLnVybCwgY291bnQgLSBwcmV2UmVw
ZWF0Q291bnQsIG1zZy5fbWVzc2FnZVRleHQsIG1zZy5fcGFyYW1ldGVycywgbXNnLl9zdGFja1Ry
YWNlLCBtc2cuX3JlcXVlc3RJZCk7CisgICAgICAgICAgICAgICAgICAgIG1zZ0NvcHkudG90YWxS
ZXBlYXRDb3VudCA9IGNvdW50OworICAgICAgICAgICAgICAgICAgICBtc2dDb3B5Ll9mb3JtYXRN
ZXNzYWdlKCk7CisgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuYWRkTWVzc2FnZShtc2dDb3B5
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LAorCisgICAgICAgICAgICBjb25z
b2xlTWVzc2FnZXNDbGVhcmVkOiBmdW5jdGlvbigpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgY29uc29sZS5jbGVhck1lc3NhZ2VzKCk7CisgICAgICAgICAgICB9LAorICAgICAgICB9
CisgICAgICAgIEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW5EaXNwYXRjaGVyKCJDb25z
b2xlIiwgZGlzcGF0Y2hlcik7CisgICAgfSwKKworICAgIF91cGRhdGVGaWx0ZXI6IGZ1bmN0aW9u
KGUpCisgICAgeworICAgICAgICB2YXIgaXNNYWMgPSBXZWJJbnNwZWN0b3IuaXNNYWMoKTsKKyAg
ICAgICAgdmFyIHNlbGVjdE11bHRpcGxlID0gZmFsc2U7CisgICAgICAgIGlmIChpc01hYyAmJiBl
Lm1ldGFLZXkgJiYgIWUuY3RybEtleSAmJiAhZS5hbHRLZXkgJiYgIWUuc2hpZnRLZXkpCisgICAg
ICAgICAgICBzZWxlY3RNdWx0aXBsZSA9IHRydWU7CisgICAgICAgIGlmICghaXNNYWMgJiYgZS5j
dHJsS2V5ICYmICFlLm1ldGFLZXkgJiYgIWUuYWx0S2V5ICYmICFlLnNoaWZ0S2V5KQorICAgICAg
ICAgICAgc2VsZWN0TXVsdGlwbGUgPSB0cnVlOworCisgICAgICAgIHRoaXMuZmlsdGVyKGUudGFy
Z2V0LCBzZWxlY3RNdWx0aXBsZSk7CisgICAgfSwKKworICAgIGZpbHRlcjogZnVuY3Rpb24odGFy
Z2V0LCBzZWxlY3RNdWx0aXBsZSkKKyAgICB7CisgICAgICAgIGZ1bmN0aW9uIHVuc2VsZWN0QWxs
KCkKKyAgICAgICAgeworICAgICAgICAgICAgdGhpcy5hbGxFbGVtZW50LnJlbW92ZVN0eWxlQ2xh
c3MoInNlbGVjdGVkIik7CisgICAgICAgICAgICB0aGlzLmVycm9yRWxlbWVudC5yZW1vdmVTdHls
ZUNsYXNzKCJzZWxlY3RlZCIpOworICAgICAgICAgICAgdGhpcy53YXJuaW5nRWxlbWVudC5yZW1v
dmVTdHlsZUNsYXNzKCJzZWxlY3RlZCIpOworICAgICAgICAgICAgdGhpcy5sb2dFbGVtZW50LnJl
bW92ZVN0eWxlQ2xhc3MoInNlbGVjdGVkIik7CisKKyAgICAgICAgICAgIHRoaXMubWVzc2FnZXNF
bGVtZW50LnJlbW92ZVN0eWxlQ2xhc3MoImZpbHRlci1hbGwiKTsKKyAgICAgICAgICAgIHRoaXMu
bWVzc2FnZXNFbGVtZW50LnJlbW92ZVN0eWxlQ2xhc3MoImZpbHRlci1lcnJvcnMiKTsKKyAgICAg
ICAgICAgIHRoaXMubWVzc2FnZXNFbGVtZW50LnJlbW92ZVN0eWxlQ2xhc3MoImZpbHRlci13YXJu
aW5ncyIpOworICAgICAgICAgICAgdGhpcy5tZXNzYWdlc0VsZW1lbnQucmVtb3ZlU3R5bGVDbGFz
cygiZmlsdGVyLWxvZ3MiKTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciB0YXJnZXRGaWx0ZXJD
bGFzcyA9ICJmaWx0ZXItIiArIHRhcmdldC5jYXRlZ29yeTsKKworICAgICAgICBpZiAodGFyZ2V0
LmNhdGVnb3J5ID09PSAiYWxsIikgeworICAgICAgICAgICAgaWYgKHRhcmdldC5oYXNTdHlsZUNs
YXNzKCJzZWxlY3RlZCIpKSB7CisgICAgICAgICAgICAgICAgLy8gV2UgY2FuJ3QgdW5zZWxlY3Qg
YWxsLCBzbyB3ZSBicmVhayBlYXJseSBoZXJlCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICB1bnNlbGVjdEFsbC5jYWxsKHRoaXMpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgLy8gU29tZXRoaW5nIG90aGVyIHRoYW4gYWxsIGlzIGJl
aW5nIHNlbGVjdGVkLCBzbyB3ZSB3YW50IHRvIHVuc2VsZWN0IGFsbAorICAgICAgICAgICAgaWYg
KHRoaXMuYWxsRWxlbWVudC5oYXNTdHlsZUNsYXNzKCJzZWxlY3RlZCIpKSB7CisgICAgICAgICAg
ICAgICAgdGhpcy5hbGxFbGVtZW50LnJlbW92ZVN0eWxlQ2xhc3MoInNlbGVjdGVkIik7CisgICAg
ICAgICAgICAgICAgdGhpcy5tZXNzYWdlc0VsZW1lbnQucmVtb3ZlU3R5bGVDbGFzcygiZmlsdGVy
LWFsbCIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCFzZWxlY3RN
dWx0aXBsZSkgeworICAgICAgICAgICAgLy8gSWYgbXVsdGlwbGUgc2VsZWN0aW9uIGlzIG9mZiwg
d2Ugd2FudCB0byB1bnNlbGVjdCBldmVyeXRoaW5nIGVsc2UKKyAgICAgICAgICAgIC8vIGFuZCBq
dXN0IHNlbGVjdCBvdXJzZWx2ZXMuCisgICAgICAgICAgICB1bnNlbGVjdEFsbC5jYWxsKHRoaXMp
OworCisgICAgICAgICAgICB0YXJnZXQuYWRkU3R5bGVDbGFzcygic2VsZWN0ZWQiKTsKKyAgICAg
ICAgICAgIHRoaXMubWVzc2FnZXNFbGVtZW50LmFkZFN0eWxlQ2xhc3ModGFyZ2V0RmlsdGVyQ2xh
c3MpOworCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAodGFy
Z2V0Lmhhc1N0eWxlQ2xhc3MoInNlbGVjdGVkIikpIHsKKyAgICAgICAgICAgIC8vIElmIHNlbGVj
dE11bHRpcGxlIGlzIHR1cm5lZCBvbiwgYW5kIHdlIHdlcmUgc2VsZWN0ZWQsIHdlIGp1c3QKKyAg
ICAgICAgICAgIC8vIHdhbnQgdG8gdW5zZWxlY3Qgb3Vyc2VsdmVzLgorICAgICAgICAgICAgdGFy
Z2V0LnJlbW92ZVN0eWxlQ2xhc3MoInNlbGVjdGVkIik7CisgICAgICAgICAgICB0aGlzLm1lc3Nh
Z2VzRWxlbWVudC5yZW1vdmVTdHlsZUNsYXNzKHRhcmdldEZpbHRlckNsYXNzKTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIC8vIElmIHNlbGVjdE11bHRpcGxlIGlzIHR1cm5lZCBvbiwg
YW5kIHdlIHdlcmVuJ3Qgc2VsZWN0ZWQsIHdlIGp1c3QKKyAgICAgICAgICAgIC8vIHdhbnQgdG8g
c2VsZWN0IG91cnNlbHZlcy4KKyAgICAgICAgICAgIHRhcmdldC5hZGRTdHlsZUNsYXNzKCJzZWxl
Y3RlZCIpOworICAgICAgICAgICAgdGhpcy5tZXNzYWdlc0VsZW1lbnQuYWRkU3R5bGVDbGFzcyh0
YXJnZXRGaWx0ZXJDbGFzcyk7CisgICAgICAgIH0KKyAgICB9LAorCisgICAgX3RvZ2dsZUNvbnNv
bGVCdXR0b25DbGlja2VkOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB0aGlzLmRyYXdlci52
aXNpYmxlVmlldyA9IHRoaXM7CisgICAgfSwKKworICAgIGF0dGFjaDogZnVuY3Rpb24obWFpbkVs
ZW1lbnQsIHN0YXR1c0JhckVsZW1lbnQpCisgICAgeworICAgICAgICBtYWluRWxlbWVudC5hcHBl
bmRDaGlsZCh0aGlzLmVsZW1lbnQpOworICAgICAgICBzdGF0dXNCYXJFbGVtZW50LmFwcGVuZENo
aWxkKHRoaXMuY2xlYXJCdXR0b24pOworICAgICAgICBzdGF0dXNCYXJFbGVtZW50LmFwcGVuZENo
aWxkKHRoaXMuZmlsdGVyQmFyRWxlbWVudCk7CisgICAgfSwKKwogICAgIGdldCB0b29sYmFySXRl
bUxhYmVsKCkKICAgICB7CiAgICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkNv
bnNvbGUiKTsKQEAgLTQ0LDE0ICsyNDUsMTQgQEAgV2ViSW5zcGVjdG9yLkNvbnNvbGVQYW5lbC5w
cm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuX3ByZXZpb3VzQ29uc29sZVN0YXRlID0gV2ViSW5z
cGVjdG9yLmRyYXdlci5zdGF0ZTsKICAgICAgICAgV2ViSW5zcGVjdG9yLmRyYXdlci5lbnRlclBh
bmVsTW9kZSgpOwogICAgICAgICBXZWJJbnNwZWN0b3Iuc2hvd0NvbnNvbGUoKTsKLSAgICAgICAg
CisKICAgICAgICAgLy8gTW92ZSB0aGUgc2NvcGUgYmFyIHRvIHRoZSB0b3Agb2YgdGhlIG1lc3Nh
Z2VzLCBsaWtlIHRoZSByZXNvdXJjZXMgZmlsdGVyLgogICAgICAgICB2YXIgc2NvcGVCYXIgPSBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29uc29sZS1maWx0ZXIiKTsKICAgICAgICAgdmFyIGNv
bnNvbGVNZXNzYWdlcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb25zb2xlLW1lc3NhZ2Vz
Iik7CiAKICAgICAgICAgc2NvcGVCYXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzY29wZUJhcik7
CiAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb25zb2xlLXZpZXciKS5pbnNlcnRC
ZWZvcmUoc2NvcGVCYXIsIGNvbnNvbGVNZXNzYWdlcyk7Ci0gICAgICAgIAorCiAgICAgICAgIC8v
IFVwZGF0ZSBzdHlsZXMsIGFuZCBnaXZlIGNvbnNvbGUtbWVzc2FnZXMgYSB0b3AgbWFyZ2luIHNv
IGl0IGRvZXNuJ3Qgb3ZlcndyaXRlIHRoZSBzY29wZSBiYXIuCiAgICAgICAgIHNjb3BlQmFyLmFk
ZFN0eWxlQ2xhc3MoImNvbnNvbGUtZmlsdGVyLXRvcCIpOwogICAgICAgICBzY29wZUJhci5yZW1v
dmVTdHlsZUNsYXNzKCJzdGF0dXMtYmFyLWl0ZW0iKTsKQEAgLTYxLDI1ICsyNjIsNDUxIEBAIFdl
Ykluc3BlY3Rvci5Db25zb2xlUGFuZWwucHJvdG90eXBlID0gewogCiAgICAgaGlkZTogZnVuY3Rp
b24oKQogICAgIHsKLSAgICAgICAgV2ViSW5zcGVjdG9yLlBhbmVsLnByb3RvdHlwZS5oaWRlLmNh
bGwodGhpcyk7Ci0KLSAgICAgICAgaWYgKHRoaXMuX3ByZXZpb3VzQ29uc29sZVN0YXRlID09PSBX
ZWJJbnNwZWN0b3IuRHJhd2VyLlN0YXRlLkhpZGRlbikKKyAgICAgICAgaWYgKHRoaXMuX3ByZXZp
b3VzQ29uc29sZVN0YXRlID09PSBXZWJJbnNwZWN0b3IuRHJhd2VyLlN0YXRlLkhpZGRlbikgewor
ICAgICAgICAgICAgV2ViSW5zcGVjdG9yLlBhbmVsLnByb3RvdHlwZS5oaWRlLmNhbGwodGhpcyk7
CiAgICAgICAgICAgICBXZWJJbnNwZWN0b3IuZHJhd2VyLmltbWVkaWF0ZWx5RXhpdFBhbmVsTW9k
ZSgpOwotICAgICAgICBlbHNlCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoIl90
b29sYmFySXRlbSIgaW4gdGhpcykKKyAgICAgICAgICAgICAgICB0aGlzLl90b29sYmFySXRlbS5y
ZW1vdmVTdHlsZUNsYXNzKCJ0b2dnbGVkLW9uIik7CiAgICAgICAgICAgICBXZWJJbnNwZWN0b3Iu
ZHJhd2VyLmV4aXRQYW5lbE1vZGUoKTsKKyAgICAgICAgfQogICAgICAgICBkZWxldGUgdGhpcy5f
cHJldmlvdXNDb25zb2xlU3RhdGU7Ci0gICAgICAgIAorCiAgICAgICAgIC8vIE1vdmUgdGhlIHNj
b3BlIGJhciBiYWNrIHRvIHRoZSBib3R0b20gYmFyLCBuZXh0IHRvIENsZWFyIENvbnNvbGUuCiAg
ICAgICAgIHZhciBzY29wZUJhciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb25zb2xlLWZp
bHRlciIpOwogCiAgICAgICAgIHNjb3BlQmFyLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc2NvcGVC
YXIpOwogICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgib3RoZXItZHJhd2VyLXN0YXR1
cy1iYXItaXRlbXMiKS5hcHBlbmRDaGlsZChzY29wZUJhcik7Ci0gICAgICAgIAorCiAgICAgICAg
IC8vIFVwZGF0ZSBzdHlsZXMsIGFuZCByZW1vdmUgdGhlIHRvcCBtYXJnaW4gb24gY29uc29sZS1t
ZXNzYWdlcy4KICAgICAgICAgc2NvcGVCYXIucmVtb3ZlU3R5bGVDbGFzcygiY29uc29sZS1maWx0
ZXItdG9wIik7CiAgICAgICAgIHNjb3BlQmFyLmFkZFN0eWxlQ2xhc3MoInN0YXR1cy1iYXItaXRl
bSIpOwogCiAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb25zb2xlLW1lc3NhZ2Vz
IikucmVtb3ZlU3R5bGVDbGFzcygiY29uc29sZS1maWx0ZXItdG9wIik7CisgICAgfSwKKworICAg
IHNob3dJbkRyYXdlcjogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgV2ViSW5zcGVjdG9yLlZp
ZXcucHJvdG90eXBlLnNob3cuY2FsbCh0aGlzKTsKKyAgICAgICAgdGhpcy50b2dnbGVDb25zb2xl
QnV0dG9uLmFkZFN0eWxlQ2xhc3MoInRvZ2dsZWQtb24iKTsKKyAgICAgICAgdGhpcy50b2dnbGVD
b25zb2xlQnV0dG9uLnRpdGxlID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJIaWRlIGNvbnNvbGUu
Iik7CisgICAgICAgIGlmICghdGhpcy5wcm9tcHQuaXNDYXJldEluc2lkZVByb21wdCgpKQorICAg
ICAgICAgICAgdGhpcy5wcm9tcHQubW92ZUNhcmV0VG9FbmRPZlByb21wdCgpOworICAgIH0sCisK
KyAgICBhZnRlclNob3dJbkRyYXdlcjogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgV2ViSW5z
cGVjdG9yLmN1cnJlbnRGb2N1c0VsZW1lbnQgPSB0aGlzLnByb21wdEVsZW1lbnQ7CisgICAgfSwK
KworICAgIGhpZGVJbkRyYXdlcjogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy50b2dn
bGVDb25zb2xlQnV0dG9uLnJlbW92ZVN0eWxlQ2xhc3MoInRvZ2dsZWQtb24iKTsKKyAgICAgICAg
dGhpcy50b2dnbGVDb25zb2xlQnV0dG9uLnRpdGxlID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJT
aG93IGNvbnNvbGUuIik7CisgICAgfSwKKworICAgIF9zY2hlZHVsZVNjcm9sbEludG9WaWV3OiBm
dW5jdGlvbigpCisgICAgeworICAgICAgICBpZiAodGhpcy5fc2Nyb2xsSW50b1ZpZXdUaW1lcikK
KyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBmdW5jdGlvbiBzY3JvbGxJbnRvVmlldygp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHRoaXMucHJvbXB0RWxlbWVudC5zY3JvbGxJbnRvVmll
dyh0cnVlKTsKKyAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9zY3JvbGxJbnRvVmlld1RpbWVyOwor
ICAgICAgICB9CisgICAgICAgIHRoaXMuX3Njcm9sbEludG9WaWV3VGltZXIgPSBzZXRUaW1lb3V0
KHNjcm9sbEludG9WaWV3LmJpbmQodGhpcyksIDIwKTsKKyAgICB9LAorCisgICAgYWRkTWVzc2Fn
ZTogZnVuY3Rpb24obXNnKQorICAgIHsKKyAgICAgICAgdmFyIHNob3VsZFNjcm9sbFRvTGFzdE1l
c3NhZ2UgPSB0aGlzLm1lc3NhZ2VzRWxlbWVudC5pc1Njcm9sbGVkVG9Cb3R0b20oKTsKKworICAg
ICAgICBpZiAobXNnIGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlICYmICEo
bXNnIGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLkNvbnNvbGVDb21tYW5kUmVzdWx0KSkgeworICAg
ICAgICAgICAgdGhpcy5faW5jcmVtZW50RXJyb3JXYXJuaW5nQ291bnQobXNnKTsKKyAgICAgICAg
ICAgIFdlYkluc3BlY3Rvci5yZXNvdXJjZVRyZWVNb2RlbC5hZGRDb25zb2xlTWVzc2FnZShtc2cp
OworICAgICAgICAgICAgV2ViSW5zcGVjdG9yLnBhbmVscy5zY3JpcHRzLmFkZENvbnNvbGVNZXNz
YWdlKG1zZyk7CisgICAgICAgICAgICB0aGlzLmNvbW1hbmRTaW5jZVByZXZpb3VzTWVzc2FnZSA9
IGZhbHNlOworICAgICAgICAgICAgdGhpcy5wcmV2aW91c01lc3NhZ2UgPSBtc2c7CisgICAgICAg
IH0gZWxzZSBpZiAobXNnIGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLkNvbnNvbGVDb21tYW5kKSB7
CisgICAgICAgICAgICBpZiAodGhpcy5wcmV2aW91c01lc3NhZ2UpIHsKKyAgICAgICAgICAgICAg
ICB0aGlzLmNvbW1hbmRTaW5jZVByZXZpb3VzTWVzc2FnZSA9IHRydWU7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgICAgICB0aGlzLm1lc3NhZ2VzLnB1c2gobXNnKTsKKworICAgICAg
ICBpZiAobXNnLnR5cGUgPT09IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlVHlw
ZS5FbmRHcm91cCkgeworICAgICAgICAgICAgdmFyIHBhcmVudEdyb3VwID0gdGhpcy5jdXJyZW50
R3JvdXAucGFyZW50R3JvdXAKKyAgICAgICAgICAgIGlmIChwYXJlbnRHcm91cCkKKyAgICAgICAg
ICAgICAgICB0aGlzLmN1cnJlbnRHcm91cCA9IHBhcmVudEdyb3VwOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgaWYgKG1zZy50eXBlID09PSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3Nh
Z2UuTWVzc2FnZVR5cGUuU3RhcnRHcm91cCB8fCBtc2cudHlwZSA9PT0gV2ViSW5zcGVjdG9yLkNv
bnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBlLlN0YXJ0R3JvdXBDb2xsYXBzZWQpIHsKKyAgICAgICAg
ICAgICAgICB2YXIgZ3JvdXAgPSBuZXcgV2ViSW5zcGVjdG9yLkNvbnNvbGVHcm91cCh0aGlzLmN1
cnJlbnRHcm91cCk7CisgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50R3JvdXAubWVzc2FnZXNF
bGVtZW50LmFwcGVuZENoaWxkKGdyb3VwLmVsZW1lbnQpOworICAgICAgICAgICAgICAgIHRoaXMu
Y3VycmVudEdyb3VwID0gZ3JvdXA7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHRoaXMu
Y3VycmVudEdyb3VwLmFkZE1lc3NhZ2UobXNnKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChz
aG91bGRTY3JvbGxUb0xhc3RNZXNzYWdlKQorICAgICAgICAgICAgdGhpcy5fc2NoZWR1bGVTY3Jv
bGxJbnRvVmlldygpOworICAgIH0sCisKKyAgICBfaW5jcmVtZW50RXJyb3JXYXJuaW5nQ291bnQ6
IGZ1bmN0aW9uKG1zZykKKyAgICB7CisgICAgICAgIHN3aXRjaCAobXNnLmxldmVsKSB7CisgICAg
ICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlTGV2ZWwuV2Fy
bmluZzoKKyAgICAgICAgICAgICAgICBXZWJJbnNwZWN0b3Iud2FybmluZ3MgKz0gbXNnLnJlcGVh
dERlbHRhOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBXZWJJbnNw
ZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZUxldmVsLkVycm9yOgorICAgICAgICAgICAgICAg
IFdlYkluc3BlY3Rvci5lcnJvcnMgKz0gbXNnLnJlcGVhdERlbHRhOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgfSwKKworICAgIHJlcXVlc3RDbGVhck1lc3NhZ2VzOiBm
dW5jdGlvbigpCisgICAgeworICAgICAgICBDb25zb2xlQWdlbnQuY2xlYXJDb25zb2xlTWVzc2Fn
ZXMoKTsKKyAgICB9LAorCisgICAgY2xlYXJNZXNzYWdlczogZnVuY3Rpb24oKQorICAgIHsKKyAg
ICAgICAgV2ViSW5zcGVjdG9yLnJlc291cmNlVHJlZU1vZGVsLmNsZWFyQ29uc29sZU1lc3NhZ2Vz
KCk7CisgICAgICAgIFdlYkluc3BlY3Rvci5wYW5lbHMuc2NyaXB0cy5jbGVhckNvbnNvbGVNZXNz
YWdlcygpOworCisgICAgICAgIHRoaXMubWVzc2FnZXMgPSBbXTsKKworICAgICAgICB0aGlzLmN1
cnJlbnRHcm91cCA9IHRoaXMudG9wR3JvdXA7CisgICAgICAgIHRoaXMudG9wR3JvdXAubWVzc2Fn
ZXNFbGVtZW50LnJlbW92ZUNoaWxkcmVuKCk7CisKKyAgICAgICAgV2ViSW5zcGVjdG9yLmVycm9y
cyA9IDA7CisgICAgICAgIFdlYkluc3BlY3Rvci53YXJuaW5ncyA9IDA7CisKKyAgICAgICAgZGVs
ZXRlIHRoaXMuY29tbWFuZFNpbmNlUHJldmlvdXNNZXNzYWdlOworICAgICAgICBkZWxldGUgdGhp
cy5wcmV2aW91c01lc3NhZ2U7CisgICAgfSwKKworICAgIGNvbXBsZXRpb25zOiBmdW5jdGlvbih3
b3JkUmFuZ2UsIGJlc3RNYXRjaE9ubHksIGNvbXBsZXRpb25zUmVhZHlDYWxsYmFjaykKKyAgICB7
CisgICAgICAgIC8vIFBhc3MgbGVzcyBzdG9wIGNoYXJhY3RlcnMgdG8gcmFuZ2VPZldvcmQgc28g
dGhlIHJhbmdlIHdpbGwgYmUgYSBtb3JlIGNvbXBsZXRlIGV4cHJlc3Npb24uCisgICAgICAgIHZh
ciBleHByZXNzaW9uUmFuZ2UgPSB3b3JkUmFuZ2Uuc3RhcnRDb250YWluZXIucmFuZ2VPZldvcmQo
d29yZFJhbmdlLnN0YXJ0T2Zmc2V0LCBFeHByZXNzaW9uU3RvcENoYXJhY3RlcnMsIHRoaXMucHJv
bXB0RWxlbWVudCwgImJhY2t3YXJkIik7CisgICAgICAgIHZhciBleHByZXNzaW9uU3RyaW5nID0g
ZXhwcmVzc2lvblJhbmdlLnRvU3RyaW5nKCk7CisgICAgICAgIHZhciBsYXN0SW5kZXggPSBleHBy
ZXNzaW9uU3RyaW5nLmxlbmd0aCAtIDE7CisKKyAgICAgICAgdmFyIGRvdE5vdGF0aW9uID0gKGV4
cHJlc3Npb25TdHJpbmdbbGFzdEluZGV4XSA9PT0gIi4iKTsKKyAgICAgICAgdmFyIGJyYWNrZXRO
b3RhdGlvbiA9IChleHByZXNzaW9uU3RyaW5nW2xhc3RJbmRleF0gPT09ICJbIik7CisKKyAgICAg
ICAgaWYgKGRvdE5vdGF0aW9uIHx8IGJyYWNrZXROb3RhdGlvbikKKyAgICAgICAgICAgIGV4cHJl
c3Npb25TdHJpbmcgPSBleHByZXNzaW9uU3RyaW5nLnN1YnN0cigwLCBsYXN0SW5kZXgpOworCisg
ICAgICAgIHZhciBwcmVmaXggPSB3b3JkUmFuZ2UudG9TdHJpbmcoKTsKKyAgICAgICAgaWYgKCFl
eHByZXNzaW9uU3RyaW5nICYmICFwcmVmaXgpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAg
ICAgdmFyIHJlcG9ydENvbXBsZXRpb25zID0gdGhpcy5fcmVwb3J0Q29tcGxldGlvbnMuYmluZCh0
aGlzLCBiZXN0TWF0Y2hPbmx5LCBjb21wbGV0aW9uc1JlYWR5Q2FsbGJhY2ssIGRvdE5vdGF0aW9u
LCBicmFja2V0Tm90YXRpb24sIHByZWZpeCk7CisgICAgICAgIC8vIENvbGxlY3QgY29tbWEgc2Vw
YXJhdGVkIG9iamVjdCBwcm9wZXJ0aWVzIGZvciB0aGUgY29tcGxldGlvbi4KKworICAgICAgICB2
YXIgaW5jbHVkZUNvbW1hbmRMaW5lQVBJID0gKCFkb3ROb3RhdGlvbiAmJiAhYnJhY2tldE5vdGF0
aW9uKTsKKyAgICAgICAgdmFyIGluamVjdGVkU2NyaXB0QWNjZXNzOworICAgICAgICBpZiAoV2Vi
SW5zcGVjdG9yLnBhbmVscy5zY3JpcHRzICYmIFdlYkluc3BlY3Rvci5wYW5lbHMuc2NyaXB0cy5w
YXVzZWQpCisgICAgICAgICAgICBEZWJ1Z2dlckFnZW50LmdldENvbXBsZXRpb25zT25DYWxsRnJh
bWUoV2ViSW5zcGVjdG9yLnBhbmVscy5zY3JpcHRzLnNlbGVjdGVkQ2FsbEZyYW1lSWQoKSwgZXhw
cmVzc2lvblN0cmluZywgaW5jbHVkZUNvbW1hbmRMaW5lQVBJLCByZXBvcnRDb21wbGV0aW9ucyk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFJ1bnRpbWVBZ2VudC5nZXRDb21wbGV0aW9ucyhl
eHByZXNzaW9uU3RyaW5nLCBpbmNsdWRlQ29tbWFuZExpbmVBUEksIHJlcG9ydENvbXBsZXRpb25z
KTsKKyAgICB9LAorCisgICAgX3JlcG9ydENvbXBsZXRpb25zOiBmdW5jdGlvbihiZXN0TWF0Y2hP
bmx5LCBjb21wbGV0aW9uc1JlYWR5Q2FsbGJhY2ssIGRvdE5vdGF0aW9uLCBicmFja2V0Tm90YXRp
b24sIHByZWZpeCwgcmVzdWx0LCBpc0V4Y2VwdGlvbikgeworICAgICAgICBpZiAoaXNFeGNlcHRp
b24pCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKGJyYWNrZXROb3RhdGlvbikg
eworICAgICAgICAgICAgaWYgKHByZWZpeC5sZW5ndGggJiYgcHJlZml4WzBdID09PSAiJyIpCisg
ICAgICAgICAgICAgICAgdmFyIHF1b3RlVXNlZCA9ICInIjsKKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICB2YXIgcXVvdGVVc2VkID0gIlwiIjsKKyAgICAgICAgfQorCisgICAgICAg
IHZhciByZXN1bHRzID0gW107CisgICAgICAgIHZhciBwcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMo
cmVzdWx0KS5zb3J0KCk7CisKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0aWVz
Lmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICB2YXIgcHJvcGVydHkgPSBwcm9wZXJ0aWVzW2ld
OworCisgICAgICAgICAgICBpZiAoZG90Tm90YXRpb24gJiYgIS9eW2EtekEtWl8kXVthLXpBLVow
LTlfJF0qJC8udGVzdChwcm9wZXJ0eSkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAg
ICAgICAgICAgIGlmIChicmFja2V0Tm90YXRpb24pIHsKKyAgICAgICAgICAgICAgICBpZiAoIS9e
WzAtOV0rJC8udGVzdChwcm9wZXJ0eSkpCisgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5ID0g
cXVvdGVVc2VkICsgcHJvcGVydHkuZXNjYXBlQ2hhcmFjdGVycyhxdW90ZVVzZWQgKyAiXFwiKSAr
IHF1b3RlVXNlZDsKKyAgICAgICAgICAgICAgICBwcm9wZXJ0eSArPSAiXSI7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGlmIChwcm9wZXJ0eS5sZW5ndGggPCBwcmVmaXgubGVuZ3RoKQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKHByb3BlcnR5LmluZGV4
T2YocHJlZml4KSAhPT0gMCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAg
ICAgcmVzdWx0cy5wdXNoKHByb3BlcnR5KTsKKyAgICAgICAgICAgIGlmIChiZXN0TWF0Y2hPbmx5
KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNvbXBsZXRpb25z
UmVhZHlDYWxsYmFjayhyZXN1bHRzKTsKKyAgICB9LAorCisgICAgX2NsZWFyQnV0dG9uQ2xpY2tl
ZDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy5yZXF1ZXN0Q2xlYXJNZXNzYWdlcygp
OworICAgIH0sCisKKyAgICBfaGFuZGxlQ29udGV4dE1lbnVFdmVudDogZnVuY3Rpb24oZXZlbnQp
CisgICAgeworICAgICAgICBpZiAoIXdpbmRvdy5nZXRTZWxlY3Rpb24oKS5pc0NvbGxhcHNlZCkg
eworICAgICAgICAgICAgLy8gSWYgdGhlcmUgaXMgYSBzZWxlY3Rpb24sIHdlIHdhbnQgdG8gc2hv
dyBvdXIgbm9ybWFsIGNvbnRleHQgbWVudQorICAgICAgICAgICAgLy8gKHdpdGggQ29weSwgZXRj
LiksIGFuZCBub3QgQ2xlYXIgQ29uc29sZS4KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIHZhciBpdGVtQWN0aW9uID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAg
V2ViSW5zcGVjdG9yLnNldHRpbmdzLm1vbml0b3JpbmdYSFJFbmFibGVkID0gIVdlYkluc3BlY3Rv
ci5zZXR0aW5ncy5tb25pdG9yaW5nWEhSRW5hYmxlZDsKKyAgICAgICAgICAgIENvbnNvbGVBZ2Vu
dC5zZXRNb25pdG9yaW5nWEhSRW5hYmxlZChXZWJJbnNwZWN0b3Iuc2V0dGluZ3MubW9uaXRvcmlu
Z1hIUkVuYWJsZWQpOworICAgICAgICB9LmJpbmQodGhpcyk7CisgICAgICAgIHZhciBjb250ZXh0
TWVudSA9IG5ldyBXZWJJbnNwZWN0b3IuQ29udGV4dE1lbnUoKTsKKyAgICAgICAgY29udGV4dE1l
bnUuYXBwZW5kQ2hlY2tib3hJdGVtKFdlYkluc3BlY3Rvci5VSVN0cmluZygiWE1MSHR0cFJlcXVl
c3QgbG9nZ2luZyIpLCBpdGVtQWN0aW9uLCBXZWJJbnNwZWN0b3Iuc2V0dGluZ3MubW9uaXRvcmlu
Z1hIUkVuYWJsZWQpCisgICAgICAgIGNvbnRleHRNZW51LmFwcGVuZEl0ZW0oV2ViSW5zcGVjdG9y
LlVJU3RyaW5nKCJDbGVhciBDb25zb2xlIiksIHRoaXMucmVxdWVzdENsZWFyTWVzc2FnZXMuYmlu
ZCh0aGlzKSk7CisgICAgICAgIGNvbnRleHRNZW51LnNob3coZXZlbnQpOworICAgIH0sCisKKyAg
ICBfbWVzc2FnZXNTZWxlY3RTdGFydDogZnVuY3Rpb24oZXZlbnQpCisgICAgeworICAgICAgICBp
ZiAodGhpcy5fc2VsZWN0aW9uVGltZW91dCkKKyAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlz
Ll9zZWxlY3Rpb25UaW1lb3V0KTsKKworICAgICAgICB0aGlzLnByb21wdC5jbGVhckF1dG9Db21w
bGV0ZSgpOworCisgICAgICAgIGZ1bmN0aW9uIG1vdmVCYWNrSWZPdXRzaWRlKCkKKyAgICAgICAg
eworICAgICAgICAgICAgZGVsZXRlIHRoaXMuX3NlbGVjdGlvblRpbWVvdXQ7CisgICAgICAgICAg
ICBpZiAoIXRoaXMucHJvbXB0LmlzQ2FyZXRJbnNpZGVQcm9tcHQoKSAmJiB3aW5kb3cuZ2V0U2Vs
ZWN0aW9uKCkuaXNDb2xsYXBzZWQpCisgICAgICAgICAgICAgICAgdGhpcy5wcm9tcHQubW92ZUNh
cmV0VG9FbmRPZlByb21wdCgpOworICAgICAgICAgICAgdGhpcy5wcm9tcHQuYXV0b0NvbXBsZXRl
U29vbigpOworICAgICAgICB9CisKKyAgICAgICAgdGhpcy5fc2VsZWN0aW9uVGltZW91dCA9IHNl
dFRpbWVvdXQobW92ZUJhY2tJZk91dHNpZGUuYmluZCh0aGlzKSwgMTAwKTsKKyAgICB9LAorCisg
ICAgX21lc3NhZ2VzQ2xpY2tlZDogZnVuY3Rpb24oZXZlbnQpCisgICAgeworICAgICAgICB2YXIg
bGluayA9IGV2ZW50LnRhcmdldC5lbmNsb3NpbmdOb2RlT3JTZWxmV2l0aE5vZGVOYW1lKCJhIik7
CisgICAgICAgIGlmICghbGluayB8fCAhbGluay5yZXByZXNlbnRlZE5vZGUpCisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgV2ViSW5zcGVjdG9yLnVwZGF0ZUZvY3VzZWROb2RlKGxpbmsu
cmVwcmVzZW50ZWROb2RlLmlkKTsKKyAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7Cisg
ICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CisgICAgfSwKKworICAgIF9yZWdpc3RlclNo
b3J0Y3V0czogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy5fc2hvcnRjdXRzID0ge307
CisKKyAgICAgICAgdmFyIHNob3J0Y3V0ID0gV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQ7
CisgICAgICAgIHZhciBzaG9ydGN1dEsgPSBzaG9ydGN1dC5tYWtlRGVzY3JpcHRvcigiayIsIFdl
Ykluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0Lk1vZGlmaWVycy5NZXRhKTsKKyAgICAgICAgLy8g
VGhpcyBjYXNlIHJlcXVpcmVzIGEgc2VwYXJhdGUgYm91bmQgZnVuY3Rpb24gYXMgaXRzIGlzTWFj
T25seSBwcm9wZXJ0eSBzaG91bGQgbm90IGJlIHNoYXJlZCBhbW9uZyBkaWZmZXJlbnQgc2hvcnRj
dXQgaGFuZGxlcnMuCisgICAgICAgIHRoaXMuX3Nob3J0Y3V0c1tzaG9ydGN1dEsua2V5XSA9IHRo
aXMucmVxdWVzdENsZWFyTWVzc2FnZXMuYmluZCh0aGlzKTsKKyAgICAgICAgdGhpcy5fc2hvcnRj
dXRzW3Nob3J0Y3V0Sy5rZXldLmlzTWFjT25seSA9IHRydWU7CisKKyAgICAgICAgdmFyIGNsZWFy
Q29uc29sZUhhbmRsZXIgPSB0aGlzLnJlcXVlc3RDbGVhck1lc3NhZ2VzLmJpbmQodGhpcyk7Cisg
ICAgICAgIHZhciBzaG9ydGN1dEwgPSBzaG9ydGN1dC5tYWtlRGVzY3JpcHRvcigibCIsIFdlYklu
c3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0Lk1vZGlmaWVycy5DdHJsKTsKKyAgICAgICAgdGhpcy5f
c2hvcnRjdXRzW3Nob3J0Y3V0TC5rZXldID0gY2xlYXJDb25zb2xlSGFuZGxlcjsKKworICAgICAg
ICB2YXIgc2VjdGlvbiA9IFdlYkluc3BlY3Rvci5zaG9ydGN1dHNIZWxwLnNlY3Rpb24oV2ViSW5z
cGVjdG9yLlVJU3RyaW5nKCJDb25zb2xlIikpOworICAgICAgICB2YXIga2V5cyA9IFdlYkluc3Bl
Y3Rvci5pc01hYygpID8gWyBzaG9ydGN1dEsubmFtZSwgc2hvcnRjdXRMLm5hbWUgXSA6IFsgc2hv
cnRjdXRMLm5hbWUgXTsKKyAgICAgICAgc2VjdGlvbi5hZGRBbHRlcm5hdGVLZXlzKGtleXMsIFdl
Ykluc3BlY3Rvci5VSVN0cmluZygiQ2xlYXIgQ29uc29sZSIpKTsKKworICAgICAgICBrZXlzID0g
WworICAgICAgICAgICAgc2hvcnRjdXQuc2hvcnRjdXRUb1N0cmluZyhzaG9ydGN1dC5LZXlzLlRh
YiksCisgICAgICAgICAgICBzaG9ydGN1dC5zaG9ydGN1dFRvU3RyaW5nKHNob3J0Y3V0LktleXMu
VGFiLCBzaG9ydGN1dC5Nb2RpZmllcnMuU2hpZnQpCisgICAgICAgIF07CisgICAgICAgIHNlY3Rp
b24uYWRkUmVsYXRlZEtleXMoa2V5cywgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJOZXh0L3ByZXZp
b3VzIHN1Z2dlc3Rpb24iKSk7CisgICAgICAgIHNlY3Rpb24uYWRkS2V5KHNob3J0Y3V0LnNob3J0
Y3V0VG9TdHJpbmcoc2hvcnRjdXQuS2V5cy5SaWdodCksIFdlYkluc3BlY3Rvci5VSVN0cmluZygi
QWNjZXB0IHN1Z2dlc3Rpb24iKSk7CisgICAgICAgIGtleXMgPSBbCisgICAgICAgICAgICBzaG9y
dGN1dC5zaG9ydGN1dFRvU3RyaW5nKHNob3J0Y3V0LktleXMuRG93biksCisgICAgICAgICAgICBz
aG9ydGN1dC5zaG9ydGN1dFRvU3RyaW5nKHNob3J0Y3V0LktleXMuVXApCisgICAgICAgIF07Cisg
ICAgICAgIHNlY3Rpb24uYWRkUmVsYXRlZEtleXMoa2V5cywgV2ViSW5zcGVjdG9yLlVJU3RyaW5n
KCJOZXh0L3ByZXZpb3VzIGxpbmUiKSk7CisgICAgICAgIGtleXMgPSBbCisgICAgICAgICAgICBz
aG9ydGN1dC5zaG9ydGN1dFRvU3RyaW5nKCJOIiwgc2hvcnRjdXQuTW9kaWZpZXJzLkFsdCksCisg
ICAgICAgICAgICBzaG9ydGN1dC5zaG9ydGN1dFRvU3RyaW5nKCJQIiwgc2hvcnRjdXQuTW9kaWZp
ZXJzLkFsdCkKKyAgICAgICAgXTsKKyAgICAgICAgaWYgKFdlYkluc3BlY3Rvci5pc01hYygpKQor
ICAgICAgICAgICAgc2VjdGlvbi5hZGRSZWxhdGVkS2V5cyhrZXlzLCBXZWJJbnNwZWN0b3IuVUlT
dHJpbmcoIk5leHQvcHJldmlvdXMgY29tbWFuZCIpKTsKKyAgICAgICAgc2VjdGlvbi5hZGRLZXko
c2hvcnRjdXQuc2hvcnRjdXRUb1N0cmluZyhzaG9ydGN1dC5LZXlzLkVudGVyKSwgV2ViSW5zcGVj
dG9yLlVJU3RyaW5nKCJFeGVjdXRlIGNvbW1hbmQiKSk7CisgICAgfSwKKworICAgIF9wcm9tcHRL
ZXlEb3duOiBmdW5jdGlvbihldmVudCkKKyAgICB7CisgICAgICAgIGlmIChpc0VudGVyS2V5KGV2
ZW50KSkgeworICAgICAgICAgICAgdGhpcy5fZW50ZXJLZXlQcmVzc2VkKGV2ZW50KTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBzaG9ydGN1dCA9IFdlYklu
c3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0Lm1ha2VLZXlGcm9tRXZlbnQoZXZlbnQpOworICAgICAg
ICB2YXIgaGFuZGxlciA9IHRoaXMuX3Nob3J0Y3V0c1tzaG9ydGN1dF07CisgICAgICAgIGlmICho
YW5kbGVyKSB7CisgICAgICAgICAgICBpZiAoIXRoaXMuX3Nob3J0Y3V0c1tzaG9ydGN1dF0uaXNN
YWNPbmx5IHx8IFdlYkluc3BlY3Rvci5pc01hYygpKSB7CisgICAgICAgICAgICAgICAgaGFuZGxl
cigpOworICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSwKKworICAgIGV2
YWxJbkluc3BlY3RlZFdpbmRvdzogZnVuY3Rpb24oZXhwcmVzc2lvbiwgb2JqZWN0R3JvdXAsIGlu
Y2x1ZGVDb21tYW5kTGluZUFQSSwgY2FsbGJhY2spCisgICAgeworICAgICAgICBpZiAoV2ViSW5z
cGVjdG9yLnBhbmVscy5zY3JpcHRzICYmIFdlYkluc3BlY3Rvci5wYW5lbHMuc2NyaXB0cy5wYXVz
ZWQpIHsKKyAgICAgICAgICAgIFdlYkluc3BlY3Rvci5wYW5lbHMuc2NyaXB0cy5ldmFsdWF0ZUlu
U2VsZWN0ZWRDYWxsRnJhbWUoZXhwcmVzc2lvbiwgZmFsc2UsIG9iamVjdEdyb3VwLCBpbmNsdWRl
Q29tbWFuZExpbmVBUEksIGNhbGxiYWNrKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIGlmICghZXhwcmVzc2lvbikgeworICAgICAgICAgICAgLy8gVGhlcmUgaXMg
bm8gZXhwcmVzc2lvbiwgc28gdGhlIGNvbXBsZXRpb24gc2hvdWxkIGhhcHBlbiBhZ2FpbnN0IGds
b2JhbCBwcm9wZXJ0aWVzLgorICAgICAgICAgICAgZXhwcmVzc2lvbiA9ICJ0aGlzIjsKKyAgICAg
ICAgfQorCisgICAgICAgIGZ1bmN0aW9uIGV2YWxDYWxsYmFjayhyZXN1bHQpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGNhbGxiYWNrKFdlYkluc3BlY3Rvci5SZW1vdGVPYmplY3QuZnJvbVBheWxv
YWQocmVzdWx0KSk7CisgICAgICAgIH0KKyAgICAgICAgUnVudGltZUFnZW50LmV2YWx1YXRlKGV4
cHJlc3Npb24sIG9iamVjdEdyb3VwLCBpbmNsdWRlQ29tbWFuZExpbmVBUEksIGV2YWxDYWxsYmFj
ayk7CisgICAgfSwKKworICAgIF9lbnRlcktleVByZXNzZWQ6IGZ1bmN0aW9uKGV2ZW50KQorICAg
IHsKKyAgICAgICAgaWYgKGV2ZW50LmFsdEtleSB8fCBldmVudC5jdHJsS2V5IHx8IGV2ZW50LnNo
aWZ0S2V5KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGV2ZW50LnByZXZlbnREZWZh
dWx0KCk7CisgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOworCisgICAgICAgIHRoaXMu
cHJvbXB0LmNsZWFyQXV0b0NvbXBsZXRlKHRydWUpOworCisgICAgICAgIHZhciBzdHIgPSB0aGlz
LnByb21wdC50ZXh0OworICAgICAgICBpZiAoIXN0ci5sZW5ndGgpCisgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgdmFyIGNvbW1hbmRNZXNzYWdlID0gbmV3IFdlYkluc3BlY3Rvci5Db25z
b2xlQ29tbWFuZChzdHIpOworICAgICAgICB0aGlzLmFkZE1lc3NhZ2UoY29tbWFuZE1lc3NhZ2Up
OworCisgICAgICAgIHZhciBzZWxmID0gdGhpczsKKyAgICAgICAgZnVuY3Rpb24gcHJpbnRSZXN1
bHQocmVzdWx0KQorICAgICAgICB7CisgICAgICAgICAgICBzZWxmLnByb21wdC5oaXN0b3J5LnB1
c2goc3RyKTsKKyAgICAgICAgICAgIHNlbGYucHJvbXB0Lmhpc3RvcnlPZmZzZXQgPSAwOworICAg
ICAgICAgICAgc2VsZi5wcm9tcHQudGV4dCA9ICIiOworCisgICAgICAgICAgICBXZWJJbnNwZWN0
b3Iuc2V0dGluZ3MuY29uc29sZUhpc3RvcnkgPSBzZWxmLnByb21wdC5oaXN0b3J5LnNsaWNlKC0z
MCk7CisKKyAgICAgICAgICAgIHNlbGYuYWRkTWVzc2FnZShuZXcgV2ViSW5zcGVjdG9yLkNvbnNv
bGVDb21tYW5kUmVzdWx0KHJlc3VsdCwgY29tbWFuZE1lc3NhZ2UpKTsKKyAgICAgICAgfQorICAg
ICAgICB0aGlzLmV2YWxJbkluc3BlY3RlZFdpbmRvdyhzdHIsICJjb25zb2xlIiwgdHJ1ZSwgcHJp
bnRSZXN1bHQpOworICAgIH0sCisKKyAgICBfZm9ybWF0OiBmdW5jdGlvbihvdXRwdXQsIGZvcmNl
T2JqZWN0Rm9ybWF0KQorICAgIHsKKyAgICAgICAgdmFyIGlzUHJveHkgPSAob3V0cHV0ICE9IG51
bGwgJiYgdHlwZW9mIG91dHB1dCA9PT0gIm9iamVjdCIpOworICAgICAgICB2YXIgdHlwZSA9IChm
b3JjZU9iamVjdEZvcm1hdCA/ICJvYmplY3QiIDogV2ViSW5zcGVjdG9yLlJlbW90ZU9iamVjdC50
eXBlKG91dHB1dCkpOworCisgICAgICAgIHZhciBmb3JtYXR0ZXIgPSB0aGlzLl9jdXN0b21Gb3Jt
YXR0ZXJzW3R5cGVdOworICAgICAgICBpZiAoIWZvcm1hdHRlciB8fCAhaXNQcm94eSkgeworICAg
ICAgICAgICAgZm9ybWF0dGVyID0gdGhpcy5fZm9ybWF0dmFsdWU7CisgICAgICAgICAgICBvdXRw
dXQgPSBvdXRwdXQuZGVzY3JpcHRpb247CisgICAgICAgIH0KKworICAgICAgICB2YXIgc3BhbiA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKKyAgICAgICAgc3Bhbi5jbGFzc05hbWUg
PSAiY29uc29sZS1mb3JtYXR0ZWQtIiArIHR5cGUgKyAiIHNvdXJjZS1jb2RlIjsKKyAgICAgICAg
Zm9ybWF0dGVyLmNhbGwodGhpcywgb3V0cHV0LCBzcGFuKTsKKyAgICAgICAgcmV0dXJuIHNwYW47
CisgICAgfSwKKworICAgIF9mb3JtYXR2YWx1ZTogZnVuY3Rpb24odmFsLCBlbGVtKQorICAgIHsK
KyAgICAgICAgZWxlbS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh2YWwpKTsK
KyAgICB9LAorCisgICAgX2Zvcm1hdG9iamVjdDogZnVuY3Rpb24ob2JqLCBlbGVtKQorICAgIHsK
KyAgICAgICAgZWxlbS5hcHBlbmRDaGlsZChuZXcgV2ViSW5zcGVjdG9yLk9iamVjdFByb3BlcnRp
ZXNTZWN0aW9uKG9iaiwgb2JqLmRlc2NyaXB0aW9uLCBudWxsLCB0cnVlKS5lbGVtZW50KTsKKyAg
ICB9LAorCisgICAgX2Zvcm1hdG5vZGU6IGZ1bmN0aW9uKG9iamVjdCwgZWxlbSkKKyAgICB7Cisg
ICAgICAgIGZ1bmN0aW9uIHByaW50Tm9kZShub2RlSWQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGlmICghbm9kZUlkKSB7CisgICAgICAgICAgICAgICAgLy8gU29tZXRpbWVzIERPTSBpcyBsb2Fk
ZWQgYWZ0ZXIgdGhlIHN5bmMgbWVzc2FnZSBpcyBiZWluZyBmb3JtYXR0ZWQsIHNvIHdlIGdldCBu
bworICAgICAgICAgICAgICAgIC8vIG5vZGVJZCBoZXJlLiBTbyB3ZSBmYWxsIGJhY2sgdG8gb2Jq
ZWN0IGZvcm1hdHRpbmcgaGVyZS4KKyAgICAgICAgICAgICAgICB0aGlzLl9mb3JtYXRvYmplY3Qo
b2JqZWN0LCBlbGVtKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB2YXIgdHJlZU91dGxpbmUgPSBuZXcgV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJl
ZU91dGxpbmUoKTsKKyAgICAgICAgICAgIHRyZWVPdXRsaW5lLnNob3dJbkVsZW1lbnRzUGFuZWxF
bmFibGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHRyZWVPdXRsaW5lLnJvb3RET01Ob2RlID0gV2Vi
SW5zcGVjdG9yLmRvbUFnZW50Lm5vZGVGb3JJZChub2RlSWQpOworICAgICAgICAgICAgdHJlZU91
dGxpbmUuZWxlbWVudC5hZGRTdHlsZUNsYXNzKCJvdXRsaW5lLWRpc2Nsb3N1cmUiKTsKKyAgICAg
ICAgICAgIGlmICghdHJlZU91dGxpbmUuY2hpbGRyZW5bMF0uaGFzQ2hpbGRyZW4pCisgICAgICAg
ICAgICAgICAgdHJlZU91dGxpbmUuZWxlbWVudC5hZGRTdHlsZUNsYXNzKCJzaW5nbGUtbm9kZSIp
OworICAgICAgICAgICAgZWxlbS5hcHBlbmRDaGlsZCh0cmVlT3V0bGluZS5lbGVtZW50KTsKKyAg
ICAgICAgfQorICAgICAgICBvYmplY3QucHVzaE5vZGVUb0Zyb250ZW5kKHByaW50Tm9kZS5iaW5k
KHRoaXMpKTsKKyAgICB9LAorCisgICAgX2Zvcm1hdGFycmF5OiBmdW5jdGlvbihhcnIsIGVsZW0p
CisgICAgeworICAgICAgICBhcnIuZ2V0T3duUHJvcGVydGllcyhmYWxzZSwgdGhpcy5fcHJpbnRB
cnJheS5iaW5kKHRoaXMsIGVsZW0pKTsKKyAgICB9LAorCisgICAgX2Zvcm1hdHN0cmluZzogZnVu
Y3Rpb24ob3V0cHV0LCBlbGVtKQorICAgIHsKKyAgICAgICAgdmFyIHNwYW4gPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCJzcGFuIik7CisgICAgICAgIHNwYW4uY2xhc3NOYW1lID0gImNvbnNvbGUt
Zm9ybWF0dGVkLXN0cmluZyBzb3VyY2UtY29kZSI7CisgICAgICAgIHNwYW4uYXBwZW5kQ2hpbGQo
V2ViSW5zcGVjdG9yLmxpbmtpZnlTdHJpbmdBc0ZyYWdtZW50KG91dHB1dC5kZXNjcmlwdGlvbikp
OworCisgICAgICAgIC8vIE1ha2UgYmxhY2sgcXVvdGVzLgorICAgICAgICBlbGVtLnJlbW92ZVN0
eWxlQ2xhc3MoImNvbnNvbGUtZm9ybWF0dGVkLXN0cmluZyIpOworICAgICAgICBlbGVtLmFwcGVu
ZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJcIiIpKTsKKyAgICAgICAgZWxlbS5hcHBl
bmRDaGlsZChzcGFuKTsKKyAgICAgICAgZWxlbS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVU
ZXh0Tm9kZSgiXCIiKSk7CisgICAgfSwKKworICAgIF9wcmludEFycmF5OiBmdW5jdGlvbihlbGVt
LCBwcm9wZXJ0aWVzKQorICAgIHsKKyAgICAgICAgaWYgKCFwcm9wZXJ0aWVzKQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIHZhciBlbGVtZW50cyA9IFtdOworICAgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIHZhciBu
YW1lID0gcHJvcGVydGllc1tpXS5uYW1lOworICAgICAgICAgICAgaWYgKG5hbWUgPT0gcGFyc2VJ
bnQobmFtZSkpCisgICAgICAgICAgICAgICAgZWxlbWVudHNbbmFtZV0gPSB0aGlzLl9mb3JtYXRB
c0FycmF5RW50cnkocHJvcGVydGllc1tpXS52YWx1ZSk7CisgICAgICAgIH0KKworICAgICAgICBl
bGVtLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJbIikpOworICAgICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICB2
YXIgZWxlbWVudCA9IGVsZW1lbnRzW2ldOworICAgICAgICAgICAgaWYgKGVsZW1lbnQpCisgICAg
ICAgICAgICAgICAgZWxlbS5hcHBlbmRDaGlsZChlbGVtZW50KTsKKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICBlbGVtLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2Rl
KCJ1bmRlZmluZWQiKSkKKyAgICAgICAgICAgIGlmIChpIDwgZWxlbWVudHMubGVuZ3RoIC0gMSkK
KyAgICAgICAgICAgICAgICBlbGVtLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2Rl
KCIsICIpKTsKKyAgICAgICAgfQorICAgICAgICBlbGVtLmFwcGVuZENoaWxkKGRvY3VtZW50LmNy
ZWF0ZVRleHROb2RlKCJdIikpOworICAgIH0sCisKKyAgICBfZm9ybWF0QXNBcnJheUVudHJ5OiBm
dW5jdGlvbihvdXRwdXQpCisgICAgeworICAgICAgICAvLyBQcmV2ZW50IGluZmluaXRlIGV4cGFu
c2lvbiBvZiBjcm9zcy1yZWZlcmVuY2luZyBhcnJheXMuCisgICAgICAgIHJldHVybiB0aGlzLl9m
b3JtYXQob3V0cHV0LCBXZWJJbnNwZWN0b3IuUmVtb3RlT2JqZWN0LnR5cGUob3V0cHV0KSA9PT0g
ImFycmF5Iik7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL0NvbnNvbGVWaWV3LmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9Db25zb2xlVmlldy5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDYz
MjllYi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0Nv
bnNvbGVWaWV3LmpzCisrKyAvZGV2L251bGwKQEAgLTEsMTE1NSArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDkgSm9zZXBoIFBlY29yYXJvCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikg
bm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotY29uc3QgRXhwcmVzc2lvblN0b3BD
aGFyYWN0ZXJzID0gIiA9OlsoezssISstKi8mfF48PiI7Ci0KLVdlYkluc3BlY3Rvci5Db25zb2xl
VmlldyA9IGZ1bmN0aW9uKGRyYXdlcikKLXsKLSAgICBXZWJJbnNwZWN0b3IuVmlldy5jYWxsKHRo
aXMsIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb25zb2xlLXZpZXciKSk7Ci0KLSAgICB0aGlz
Lm1lc3NhZ2VzID0gW107Ci0gICAgdGhpcy5kcmF3ZXIgPSBkcmF3ZXI7Ci0KLSAgICB0aGlzLmNs
ZWFyQnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNsZWFyLWNvbnNvbGUtc3RhdHVz
LWJhci1pdGVtIik7Ci0gICAgdGhpcy5jbGVhckJ1dHRvbi50aXRsZSA9IFdlYkluc3BlY3Rvci5V
SVN0cmluZygiQ2xlYXIgY29uc29sZSBsb2cuIik7Ci0gICAgdGhpcy5jbGVhckJ1dHRvbi5hZGRF
dmVudExpc3RlbmVyKCJjbGljayIsIHRoaXMuX2NsZWFyQnV0dG9uQ2xpY2tlZC5iaW5kKHRoaXMp
LCBmYWxzZSk7Ci0KLSAgICB0aGlzLm1lc3NhZ2VzRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCJjb25zb2xlLW1lc3NhZ2VzIik7Ci0gICAgdGhpcy5tZXNzYWdlc0VsZW1lbnQuYWRk
RXZlbnRMaXN0ZW5lcigic2VsZWN0c3RhcnQiLCB0aGlzLl9tZXNzYWdlc1NlbGVjdFN0YXJ0LmJp
bmQodGhpcyksIGZhbHNlKTsKLSAgICB0aGlzLm1lc3NhZ2VzRWxlbWVudC5hZGRFdmVudExpc3Rl
bmVyKCJjbGljayIsIHRoaXMuX21lc3NhZ2VzQ2xpY2tlZC5iaW5kKHRoaXMpLCB0cnVlKTsKLQot
ICAgIHRoaXMucHJvbXB0RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb25zb2xl
LXByb21wdCIpOwotICAgIHRoaXMucHJvbXB0RWxlbWVudC5jbGFzc05hbWUgPSAic291cmNlLWNv
ZGUiOwotICAgIHRoaXMucHJvbXB0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIiwg
dGhpcy5fcHJvbXB0S2V5RG93bi5iaW5kKHRoaXMpLCB0cnVlKTsKLSAgICB0aGlzLnByb21wdCA9
IG5ldyBXZWJJbnNwZWN0b3IuVGV4dFByb21wdCh0aGlzLnByb21wdEVsZW1lbnQsIHRoaXMuY29t
cGxldGlvbnMuYmluZCh0aGlzKSwgRXhwcmVzc2lvblN0b3BDaGFyYWN0ZXJzICsgIi4iKTsKLSAg
ICB0aGlzLnByb21wdC5oaXN0b3J5ID0gV2ViSW5zcGVjdG9yLnNldHRpbmdzLmNvbnNvbGVIaXN0
b3J5OwotCi0gICAgdGhpcy50b3BHcm91cCA9IG5ldyBXZWJJbnNwZWN0b3IuQ29uc29sZUdyb3Vw
KG51bGwpOwotICAgIHRoaXMubWVzc2FnZXNFbGVtZW50Lmluc2VydEJlZm9yZSh0aGlzLnRvcEdy
b3VwLmVsZW1lbnQsIHRoaXMucHJvbXB0RWxlbWVudCk7Ci0gICAgdGhpcy5jdXJyZW50R3JvdXAg
PSB0aGlzLnRvcEdyb3VwOwotCi0gICAgdGhpcy50b2dnbGVDb25zb2xlQnV0dG9uID0gZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoImNvbnNvbGUtc3RhdHVzLWJhci1pdGVtIik7Ci0gICAgdGhpcy50
b2dnbGVDb25zb2xlQnV0dG9uLnRpdGxlID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJTaG93IGNv
bnNvbGUuIik7Ci0gICAgdGhpcy50b2dnbGVDb25zb2xlQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIo
ImNsaWNrIiwgdGhpcy5fdG9nZ2xlQ29uc29sZUJ1dHRvbkNsaWNrZWQuYmluZCh0aGlzKSwgZmFs
c2UpOwotCi0gICAgLy8gV2lsbCBob2xkIHRoZSBsaXN0IG9mIGZpbHRlciBlbGVtZW50cwotICAg
IHRoaXMuZmlsdGVyQmFyRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb25zb2xl
LWZpbHRlciIpOwotCi0gICAgZnVuY3Rpb24gY3JlYXRlRGl2aWRlckVsZW1lbnQoKSB7Ci0gICAg
ICAgIHZhciBkaXZpZGVyRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwot
ICAgICAgICBkaXZpZGVyRWxlbWVudC5hZGRTdHlsZUNsYXNzKCJzY29wZS1iYXItZGl2aWRlciIp
OwotICAgICAgICB0aGlzLmZpbHRlckJhckVsZW1lbnQuYXBwZW5kQ2hpbGQoZGl2aWRlckVsZW1l
bnQpOwotICAgIH0KLQotICAgIHZhciB1cGRhdGVGaWx0ZXJIYW5kbGVyID0gdGhpcy5fdXBkYXRl
RmlsdGVyLmJpbmQodGhpcyk7Ci0gICAgZnVuY3Rpb24gY3JlYXRlRmlsdGVyRWxlbWVudChjYXRl
Z29yeSwgbGFiZWwpIHsKLSAgICAgICAgdmFyIGNhdGVnb3J5RWxlbWVudCA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoImxpIik7Ci0gICAgICAgIGNhdGVnb3J5RWxlbWVudC5jYXRlZ29yeSA9IGNh
dGVnb3J5OwotICAgICAgICBjYXRlZ29yeUVsZW1lbnQuY2xhc3NOYW1lID0gY2F0ZWdvcnk7Ci0g
ICAgICAgIGNhdGVnb3J5RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIHVwZGF0ZUZp
bHRlckhhbmRsZXIsIGZhbHNlKTsKLSAgICAgICAgY2F0ZWdvcnlFbGVtZW50LnRleHRDb250ZW50
ID0gbGFiZWw7Ci0KLSAgICAgICAgdGhpcy5maWx0ZXJCYXJFbGVtZW50LmFwcGVuZENoaWxkKGNh
dGVnb3J5RWxlbWVudCk7Ci0KLSAgICAgICAgcmV0dXJuIGNhdGVnb3J5RWxlbWVudDsKLSAgICB9
Ci0KLSAgICB0aGlzLmFsbEVsZW1lbnQgPSBjcmVhdGVGaWx0ZXJFbGVtZW50LmNhbGwodGhpcywg
ImFsbCIsIFdlYkluc3BlY3Rvci5VSVN0cmluZygiQWxsIikpOwotICAgIGNyZWF0ZURpdmlkZXJF
bGVtZW50LmNhbGwodGhpcyk7Ci0gICAgdGhpcy5lcnJvckVsZW1lbnQgPSBjcmVhdGVGaWx0ZXJF
bGVtZW50LmNhbGwodGhpcywgImVycm9ycyIsIFdlYkluc3BlY3Rvci5VSVN0cmluZygiRXJyb3Jz
IikpOwotICAgIHRoaXMud2FybmluZ0VsZW1lbnQgPSBjcmVhdGVGaWx0ZXJFbGVtZW50LmNhbGwo
dGhpcywgIndhcm5pbmdzIiwgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJXYXJuaW5ncyIpKTsKLSAg
ICB0aGlzLmxvZ0VsZW1lbnQgPSBjcmVhdGVGaWx0ZXJFbGVtZW50LmNhbGwodGhpcywgImxvZ3Mi
LCBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkxvZ3MiKSk7Ci0KLSAgICB0aGlzLmZpbHRlcih0aGlz
LmFsbEVsZW1lbnQsIGZhbHNlKTsKLSAgICB0aGlzLl9yZWdpc3RlclNob3J0Y3V0cygpOwotCi0g
ICAgdGhpcy5tZXNzYWdlc0VsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUiLCB0
aGlzLl9oYW5kbGVDb250ZXh0TWVudUV2ZW50LmJpbmQodGhpcyksIGZhbHNlKTsKLQotICAgIHRo
aXMuX2N1c3RvbUZvcm1hdHRlcnMgPSB7Ci0gICAgICAgICJvYmplY3QiOiB0aGlzLl9mb3JtYXRv
YmplY3QsCi0gICAgICAgICJhcnJheSI6ICB0aGlzLl9mb3JtYXRhcnJheSwKLSAgICAgICAgIm5v
ZGUiOiAgIHRoaXMuX2Zvcm1hdG5vZGUsCi0gICAgICAgICJzdHJpbmciOiB0aGlzLl9mb3JtYXRz
dHJpbmcKLSAgICB9OwotCi0gICAgdGhpcy5fcmVnaXN0ZXJDb25zb2xlRG9tYWluRGlzcGF0Y2hl
cigpOwotfQotCi1XZWJJbnNwZWN0b3IuQ29uc29sZVZpZXcucHJvdG90eXBlID0gewotICAgIF9y
ZWdpc3RlckNvbnNvbGVEb21haW5EaXNwYXRjaGVyOiBmdW5jdGlvbigpIHsKLSAgICAgICAgdmFy
IGNvbnNvbGUgPSB0aGlzOwotICAgICAgICB2YXIgZGlzcGF0Y2hlciA9IHsKLSAgICAgICAgICAg
IGFkZENvbnNvbGVNZXNzYWdlOiBmdW5jdGlvbihwYXlsb2FkKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIHZhciBjb25zb2xlTWVzc2FnZSA9IG5ldyBXZWJJbnNwZWN0b3IuQ29uc29s
ZU1lc3NhZ2UoCi0gICAgICAgICAgICAgICAgICAgIHBheWxvYWQuc291cmNlLAotICAgICAgICAg
ICAgICAgICAgICBwYXlsb2FkLnR5cGUsCi0gICAgICAgICAgICAgICAgICAgIHBheWxvYWQubGV2
ZWwsCi0gICAgICAgICAgICAgICAgICAgIHBheWxvYWQubGluZSwKLSAgICAgICAgICAgICAgICAg
ICAgcGF5bG9hZC51cmwsCi0gICAgICAgICAgICAgICAgICAgIHBheWxvYWQucmVwZWF0Q291bnQs
Ci0gICAgICAgICAgICAgICAgICAgIHBheWxvYWQubWVzc2FnZSwKLSAgICAgICAgICAgICAgICAg
ICAgcGF5bG9hZC5wYXJhbWV0ZXJzLAotICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLnN0YWNr
VHJhY2UsCi0gICAgICAgICAgICAgICAgICAgIHBheWxvYWQucmVxdWVzdElkKTsKLSAgICAgICAg
ICAgICAgICBjb25zb2xlLmFkZE1lc3NhZ2UoY29uc29sZU1lc3NhZ2UpOwotICAgICAgICAgICAg
fSwKLQotICAgICAgICAgICAgdXBkYXRlQ29uc29sZU1lc3NhZ2VFeHBpcmVkQ291bnQ6IGZ1bmN0
aW9uKGNvdW50KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlID0g
U3RyaW5nLnNwcmludGYoV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCIlZCBjb25zb2xlIG1lc3NhZ2Vz
IGFyZSBub3Qgc2hvd24uIiksIGNvdW50KTsKLSAgICAgICAgICAgICAgICBjb25zb2xlLmFkZE1l
c3NhZ2UoV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLmNyZWF0ZVRleHRNZXNzYWdlKG1lc3Nh
Z2UsIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlTGV2ZWwuV2FybmluZykpOwot
ICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgdXBkYXRlQ29uc29sZU1lc3NhZ2VSZXBlYXRD
b3VudDogZnVuY3Rpb24oY291bnQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdmFy
IG1zZyA9IGNvbnNvbGUucHJldmlvdXNNZXNzYWdlOwotICAgICAgICAgICAgICAgIHZhciBwcmV2
UmVwZWF0Q291bnQgPSBtc2cudG90YWxSZXBlYXRDb3VudDsKLQotICAgICAgICAgICAgICAgIGlm
ICghY29uc29sZS5jb21tYW5kU2luY2VQcmV2aW91c01lc3NhZ2UpIHsKLSAgICAgICAgICAgICAg
ICAgICAgbXNnLnJlcGVhdERlbHRhID0gY291bnQgLSBwcmV2UmVwZWF0Q291bnQ7Ci0gICAgICAg
ICAgICAgICAgICAgIG1zZy5yZXBlYXRDb3VudCA9IG1zZy5yZXBlYXRDb3VudCArIG1zZy5yZXBl
YXREZWx0YTsKLSAgICAgICAgICAgICAgICAgICAgbXNnLnRvdGFsUmVwZWF0Q291bnQgPSBjb3Vu
dDsKLSAgICAgICAgICAgICAgICAgICAgbXNnLl91cGRhdGVSZXBlYXRDb3VudCgpOwotICAgICAg
ICAgICAgICAgICAgICBjb25zb2xlLl9pbmNyZW1lbnRFcnJvcldhcm5pbmdDb3VudChtc2cpOwot
ICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBtc2dDb3B5
ID0gbmV3IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZShtc2cuc291cmNlLCBtc2cudHlwZSwg
bXNnLmxldmVsLCBtc2cubGluZSwgbXNnLnVybCwgY291bnQgLSBwcmV2UmVwZWF0Q291bnQsIG1z
Zy5fbWVzc2FnZVRleHQsIG1zZy5fcGFyYW1ldGVycywgbXNnLl9zdGFja1RyYWNlLCBtc2cuX3Jl
cXVlc3RJZCk7Ci0gICAgICAgICAgICAgICAgICAgIG1zZ0NvcHkudG90YWxSZXBlYXRDb3VudCA9
IGNvdW50OwotICAgICAgICAgICAgICAgICAgICBtc2dDb3B5Ll9mb3JtYXRNZXNzYWdlKCk7Ci0g
ICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuYWRkTWVzc2FnZShtc2dDb3B5KTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9LAotCi0gICAgICAgICAgICBjb25zb2xlTWVzc2FnZXND
bGVhcmVkOiBmdW5jdGlvbigpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29uc29s
ZS5jbGVhck1lc3NhZ2VzKCk7Ci0gICAgICAgICAgICB9LAotICAgICAgICB9Ci0gICAgICAgIElu
c3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW5EaXNwYXRjaGVyKCJDb25zb2xlIiwgZGlzcGF0
Y2hlcik7Ci0gICAgfSwKLQotICAgIF91cGRhdGVGaWx0ZXI6IGZ1bmN0aW9uKGUpCi0gICAgewot
ICAgICAgICB2YXIgaXNNYWMgPSBXZWJJbnNwZWN0b3IuaXNNYWMoKTsKLSAgICAgICAgdmFyIHNl
bGVjdE11bHRpcGxlID0gZmFsc2U7Ci0gICAgICAgIGlmIChpc01hYyAmJiBlLm1ldGFLZXkgJiYg
IWUuY3RybEtleSAmJiAhZS5hbHRLZXkgJiYgIWUuc2hpZnRLZXkpCi0gICAgICAgICAgICBzZWxl
Y3RNdWx0aXBsZSA9IHRydWU7Ci0gICAgICAgIGlmICghaXNNYWMgJiYgZS5jdHJsS2V5ICYmICFl
Lm1ldGFLZXkgJiYgIWUuYWx0S2V5ICYmICFlLnNoaWZ0S2V5KQotICAgICAgICAgICAgc2VsZWN0
TXVsdGlwbGUgPSB0cnVlOwotCi0gICAgICAgIHRoaXMuZmlsdGVyKGUudGFyZ2V0LCBzZWxlY3RN
dWx0aXBsZSk7Ci0gICAgfSwKLQotICAgIGZpbHRlcjogZnVuY3Rpb24odGFyZ2V0LCBzZWxlY3RN
dWx0aXBsZSkKLSAgICB7Ci0gICAgICAgIGZ1bmN0aW9uIHVuc2VsZWN0QWxsKCkKLSAgICAgICAg
ewotICAgICAgICAgICAgdGhpcy5hbGxFbGVtZW50LnJlbW92ZVN0eWxlQ2xhc3MoInNlbGVjdGVk
Iik7Ci0gICAgICAgICAgICB0aGlzLmVycm9yRWxlbWVudC5yZW1vdmVTdHlsZUNsYXNzKCJzZWxl
Y3RlZCIpOwotICAgICAgICAgICAgdGhpcy53YXJuaW5nRWxlbWVudC5yZW1vdmVTdHlsZUNsYXNz
KCJzZWxlY3RlZCIpOwotICAgICAgICAgICAgdGhpcy5sb2dFbGVtZW50LnJlbW92ZVN0eWxlQ2xh
c3MoInNlbGVjdGVkIik7Ci0KLSAgICAgICAgICAgIHRoaXMubWVzc2FnZXNFbGVtZW50LnJlbW92
ZVN0eWxlQ2xhc3MoImZpbHRlci1hbGwiKTsKLSAgICAgICAgICAgIHRoaXMubWVzc2FnZXNFbGVt
ZW50LnJlbW92ZVN0eWxlQ2xhc3MoImZpbHRlci1lcnJvcnMiKTsKLSAgICAgICAgICAgIHRoaXMu
bWVzc2FnZXNFbGVtZW50LnJlbW92ZVN0eWxlQ2xhc3MoImZpbHRlci13YXJuaW5ncyIpOwotICAg
ICAgICAgICAgdGhpcy5tZXNzYWdlc0VsZW1lbnQucmVtb3ZlU3R5bGVDbGFzcygiZmlsdGVyLWxv
Z3MiKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZhciB0YXJnZXRGaWx0ZXJDbGFzcyA9ICJmaWx0
ZXItIiArIHRhcmdldC5jYXRlZ29yeTsKLQotICAgICAgICBpZiAodGFyZ2V0LmNhdGVnb3J5ID09
PSAiYWxsIikgewotICAgICAgICAgICAgaWYgKHRhcmdldC5oYXNTdHlsZUNsYXNzKCJzZWxlY3Rl
ZCIpKSB7Ci0gICAgICAgICAgICAgICAgLy8gV2UgY2FuJ3QgdW5zZWxlY3QgYWxsLCBzbyB3ZSBi
cmVhayBlYXJseSBoZXJlCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICB1bnNlbGVjdEFsbC5jYWxsKHRoaXMpOwotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgLy8gU29tZXRoaW5nIG90aGVyIHRoYW4gYWxsIGlzIGJlaW5nIHNlbGVjdGVk
LCBzbyB3ZSB3YW50IHRvIHVuc2VsZWN0IGFsbAotICAgICAgICAgICAgaWYgKHRoaXMuYWxsRWxl
bWVudC5oYXNTdHlsZUNsYXNzKCJzZWxlY3RlZCIpKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5h
bGxFbGVtZW50LnJlbW92ZVN0eWxlQ2xhc3MoInNlbGVjdGVkIik7Ci0gICAgICAgICAgICAgICAg
dGhpcy5tZXNzYWdlc0VsZW1lbnQucmVtb3ZlU3R5bGVDbGFzcygiZmlsdGVyLWFsbCIpOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFzZWxlY3RNdWx0aXBsZSkgewot
ICAgICAgICAgICAgLy8gSWYgbXVsdGlwbGUgc2VsZWN0aW9uIGlzIG9mZiwgd2Ugd2FudCB0byB1
bnNlbGVjdCBldmVyeXRoaW5nIGVsc2UKLSAgICAgICAgICAgIC8vIGFuZCBqdXN0IHNlbGVjdCBv
dXJzZWx2ZXMuCi0gICAgICAgICAgICB1bnNlbGVjdEFsbC5jYWxsKHRoaXMpOwotCi0gICAgICAg
ICAgICB0YXJnZXQuYWRkU3R5bGVDbGFzcygic2VsZWN0ZWQiKTsKLSAgICAgICAgICAgIHRoaXMu
bWVzc2FnZXNFbGVtZW50LmFkZFN0eWxlQ2xhc3ModGFyZ2V0RmlsdGVyQ2xhc3MpOwotCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodGFyZ2V0Lmhhc1N0eWxl
Q2xhc3MoInNlbGVjdGVkIikpIHsKLSAgICAgICAgICAgIC8vIElmIHNlbGVjdE11bHRpcGxlIGlz
IHR1cm5lZCBvbiwgYW5kIHdlIHdlcmUgc2VsZWN0ZWQsIHdlIGp1c3QKLSAgICAgICAgICAgIC8v
IHdhbnQgdG8gdW5zZWxlY3Qgb3Vyc2VsdmVzLgotICAgICAgICAgICAgdGFyZ2V0LnJlbW92ZVN0
eWxlQ2xhc3MoInNlbGVjdGVkIik7Ci0gICAgICAgICAgICB0aGlzLm1lc3NhZ2VzRWxlbWVudC5y
ZW1vdmVTdHlsZUNsYXNzKHRhcmdldEZpbHRlckNsYXNzKTsKLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIC8vIElmIHNlbGVjdE11bHRpcGxlIGlzIHR1cm5lZCBvbiwgYW5kIHdlIHdlcmVu
J3Qgc2VsZWN0ZWQsIHdlIGp1c3QKLSAgICAgICAgICAgIC8vIHdhbnQgdG8gc2VsZWN0IG91cnNl
bHZlcy4KLSAgICAgICAgICAgIHRhcmdldC5hZGRTdHlsZUNsYXNzKCJzZWxlY3RlZCIpOwotICAg
ICAgICAgICAgdGhpcy5tZXNzYWdlc0VsZW1lbnQuYWRkU3R5bGVDbGFzcyh0YXJnZXRGaWx0ZXJD
bGFzcyk7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgX3RvZ2dsZUNvbnNvbGVCdXR0b25DbGlj
a2VkOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLmRyYXdlci52aXNpYmxlVmlldyA9
IHRoaXM7Ci0gICAgfSwKLQotICAgIGF0dGFjaDogZnVuY3Rpb24obWFpbkVsZW1lbnQsIHN0YXR1
c0JhckVsZW1lbnQpCi0gICAgewotICAgICAgICBtYWluRWxlbWVudC5hcHBlbmRDaGlsZCh0aGlz
LmVsZW1lbnQpOwotICAgICAgICBzdGF0dXNCYXJFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuY2xl
YXJCdXR0b24pOwotICAgICAgICBzdGF0dXNCYXJFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuZmls
dGVyQmFyRWxlbWVudCk7Ci0gICAgfSwKLQotICAgIHNob3c6IGZ1bmN0aW9uKCkKLSAgICB7Ci0g
ICAgICAgIHRoaXMudG9nZ2xlQ29uc29sZUJ1dHRvbi5hZGRTdHlsZUNsYXNzKCJ0b2dnbGVkLW9u
Iik7Ci0gICAgICAgIHRoaXMudG9nZ2xlQ29uc29sZUJ1dHRvbi50aXRsZSA9IFdlYkluc3BlY3Rv
ci5VSVN0cmluZygiSGlkZSBjb25zb2xlLiIpOwotICAgICAgICBpZiAoIXRoaXMucHJvbXB0Lmlz
Q2FyZXRJbnNpZGVQcm9tcHQoKSkKLSAgICAgICAgICAgIHRoaXMucHJvbXB0Lm1vdmVDYXJldFRv
RW5kT2ZQcm9tcHQoKTsKLSAgICB9LAotCi0gICAgYWZ0ZXJTaG93OiBmdW5jdGlvbigpCi0gICAg
ewotICAgICAgICBXZWJJbnNwZWN0b3IuY3VycmVudEZvY3VzRWxlbWVudCA9IHRoaXMucHJvbXB0
RWxlbWVudDsKLSAgICB9LAotCi0gICAgaGlkZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAg
dGhpcy50b2dnbGVDb25zb2xlQnV0dG9uLnJlbW92ZVN0eWxlQ2xhc3MoInRvZ2dsZWQtb24iKTsK
LSAgICAgICAgdGhpcy50b2dnbGVDb25zb2xlQnV0dG9uLnRpdGxlID0gV2ViSW5zcGVjdG9yLlVJ
U3RyaW5nKCJTaG93IGNvbnNvbGUuIik7Ci0gICAgfSwKLQotICAgIF9zY2hlZHVsZVNjcm9sbElu
dG9WaWV3OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fc2Nyb2xsSW50b1Zp
ZXdUaW1lcikKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBmdW5jdGlvbiBzY3JvbGxJ
bnRvVmlldygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRoaXMucHJvbXB0RWxlbWVudC5zY3Jv
bGxJbnRvVmlldyh0cnVlKTsKLSAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9zY3JvbGxJbnRvVmll
d1RpbWVyOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMuX3Njcm9sbEludG9WaWV3VGltZXIgPSBz
ZXRUaW1lb3V0KHNjcm9sbEludG9WaWV3LmJpbmQodGhpcyksIDIwKTsKLSAgICB9LAotCi0gICAg
YWRkTWVzc2FnZTogZnVuY3Rpb24obXNnKQotICAgIHsKLSAgICAgICAgdmFyIHNob3VsZFNjcm9s
bFRvTGFzdE1lc3NhZ2UgPSB0aGlzLm1lc3NhZ2VzRWxlbWVudC5pc1Njcm9sbGVkVG9Cb3R0b20o
KTsKLQotICAgICAgICBpZiAobXNnIGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNz
YWdlICYmICEobXNnIGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLkNvbnNvbGVDb21tYW5kUmVzdWx0
KSkgewotICAgICAgICAgICAgdGhpcy5faW5jcmVtZW50RXJyb3JXYXJuaW5nQ291bnQobXNnKTsK
LSAgICAgICAgICAgIFdlYkluc3BlY3Rvci5yZXNvdXJjZVRyZWVNb2RlbC5hZGRDb25zb2xlTWVz
c2FnZShtc2cpOwotICAgICAgICAgICAgV2ViSW5zcGVjdG9yLnBhbmVscy5zY3JpcHRzLmFkZENv
bnNvbGVNZXNzYWdlKG1zZyk7Ci0gICAgICAgICAgICB0aGlzLmNvbW1hbmRTaW5jZVByZXZpb3Vz
TWVzc2FnZSA9IGZhbHNlOwotICAgICAgICAgICAgdGhpcy5wcmV2aW91c01lc3NhZ2UgPSBtc2c7
Ci0gICAgICAgIH0gZWxzZSBpZiAobXNnIGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLkNvbnNvbGVD
b21tYW5kKSB7Ci0gICAgICAgICAgICBpZiAodGhpcy5wcmV2aW91c01lc3NhZ2UpIHsKLSAgICAg
ICAgICAgICAgICB0aGlzLmNvbW1hbmRTaW5jZVByZXZpb3VzTWVzc2FnZSA9IHRydWU7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICB0aGlzLm1lc3NhZ2VzLnB1c2gobXNnKTsK
LQotICAgICAgICBpZiAobXNnLnR5cGUgPT09IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5N
ZXNzYWdlVHlwZS5FbmRHcm91cCkgewotICAgICAgICAgICAgdmFyIHBhcmVudEdyb3VwID0gdGhp
cy5jdXJyZW50R3JvdXAucGFyZW50R3JvdXAKLSAgICAgICAgICAgIGlmIChwYXJlbnRHcm91cCkK
LSAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRHcm91cCA9IHBhcmVudEdyb3VwOwotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKG1zZy50eXBlID09PSBXZWJJbnNwZWN0b3IuQ29u
c29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuU3RhcnRHcm91cCB8fCBtc2cudHlwZSA9PT0gV2ViSW5z
cGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBlLlN0YXJ0R3JvdXBDb2xsYXBzZWQpIHsK
LSAgICAgICAgICAgICAgICB2YXIgZ3JvdXAgPSBuZXcgV2ViSW5zcGVjdG9yLkNvbnNvbGVHcm91
cCh0aGlzLmN1cnJlbnRHcm91cCk7Ci0gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50R3JvdXAu
bWVzc2FnZXNFbGVtZW50LmFwcGVuZENoaWxkKGdyb3VwLmVsZW1lbnQpOwotICAgICAgICAgICAg
ICAgIHRoaXMuY3VycmVudEdyb3VwID0gZ3JvdXA7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIHRoaXMuY3VycmVudEdyb3VwLmFkZE1lc3NhZ2UobXNnKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGlmIChzaG91bGRTY3JvbGxUb0xhc3RNZXNzYWdlKQotICAgICAgICAgICAgdGhpcy5fc2No
ZWR1bGVTY3JvbGxJbnRvVmlldygpOwotICAgIH0sCi0KLSAgICBfaW5jcmVtZW50RXJyb3JXYXJu
aW5nQ291bnQ6IGZ1bmN0aW9uKG1zZykKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAobXNnLmxldmVs
KSB7Ci0gICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdl
TGV2ZWwuV2FybmluZzoKLSAgICAgICAgICAgICAgICBXZWJJbnNwZWN0b3Iud2FybmluZ3MgKz0g
bXNnLnJlcGVhdERlbHRhOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2Fz
ZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZUxldmVsLkVycm9yOgotICAgICAg
ICAgICAgICAgIFdlYkluc3BlY3Rvci5lcnJvcnMgKz0gbXNnLnJlcGVhdERlbHRhOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfSwKLQotICAgIHJlcXVlc3RDbGVhck1l
c3NhZ2VzOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBDb25zb2xlQWdlbnQuY2xlYXJDb25z
b2xlTWVzc2FnZXMoKTsKLSAgICB9LAotCi0gICAgY2xlYXJNZXNzYWdlczogZnVuY3Rpb24oKQot
ICAgIHsKLSAgICAgICAgV2ViSW5zcGVjdG9yLnJlc291cmNlVHJlZU1vZGVsLmNsZWFyQ29uc29s
ZU1lc3NhZ2VzKCk7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5wYW5lbHMuc2NyaXB0cy5jbGVhckNv
bnNvbGVNZXNzYWdlcygpOwotCi0gICAgICAgIHRoaXMubWVzc2FnZXMgPSBbXTsKLQotICAgICAg
ICB0aGlzLmN1cnJlbnRHcm91cCA9IHRoaXMudG9wR3JvdXA7Ci0gICAgICAgIHRoaXMudG9wR3Jv
dXAubWVzc2FnZXNFbGVtZW50LnJlbW92ZUNoaWxkcmVuKCk7Ci0KLSAgICAgICAgV2ViSW5zcGVj
dG9yLmVycm9ycyA9IDA7Ci0gICAgICAgIFdlYkluc3BlY3Rvci53YXJuaW5ncyA9IDA7Ci0KLSAg
ICAgICAgZGVsZXRlIHRoaXMuY29tbWFuZFNpbmNlUHJldmlvdXNNZXNzYWdlOwotICAgICAgICBk
ZWxldGUgdGhpcy5wcmV2aW91c01lc3NhZ2U7Ci0gICAgfSwKLQotICAgIGNvbXBsZXRpb25zOiBm
dW5jdGlvbih3b3JkUmFuZ2UsIGJlc3RNYXRjaE9ubHksIGNvbXBsZXRpb25zUmVhZHlDYWxsYmFj
aykKLSAgICB7Ci0gICAgICAgIC8vIFBhc3MgbGVzcyBzdG9wIGNoYXJhY3RlcnMgdG8gcmFuZ2VP
ZldvcmQgc28gdGhlIHJhbmdlIHdpbGwgYmUgYSBtb3JlIGNvbXBsZXRlIGV4cHJlc3Npb24uCi0g
ICAgICAgIHZhciBleHByZXNzaW9uUmFuZ2UgPSB3b3JkUmFuZ2Uuc3RhcnRDb250YWluZXIucmFu
Z2VPZldvcmQod29yZFJhbmdlLnN0YXJ0T2Zmc2V0LCBFeHByZXNzaW9uU3RvcENoYXJhY3RlcnMs
IHRoaXMucHJvbXB0RWxlbWVudCwgImJhY2t3YXJkIik7Ci0gICAgICAgIHZhciBleHByZXNzaW9u
U3RyaW5nID0gZXhwcmVzc2lvblJhbmdlLnRvU3RyaW5nKCk7Ci0gICAgICAgIHZhciBsYXN0SW5k
ZXggPSBleHByZXNzaW9uU3RyaW5nLmxlbmd0aCAtIDE7Ci0KLSAgICAgICAgdmFyIGRvdE5vdGF0
aW9uID0gKGV4cHJlc3Npb25TdHJpbmdbbGFzdEluZGV4XSA9PT0gIi4iKTsKLSAgICAgICAgdmFy
IGJyYWNrZXROb3RhdGlvbiA9IChleHByZXNzaW9uU3RyaW5nW2xhc3RJbmRleF0gPT09ICJbIik7
Ci0KLSAgICAgICAgaWYgKGRvdE5vdGF0aW9uIHx8IGJyYWNrZXROb3RhdGlvbikKLSAgICAgICAg
ICAgIGV4cHJlc3Npb25TdHJpbmcgPSBleHByZXNzaW9uU3RyaW5nLnN1YnN0cigwLCBsYXN0SW5k
ZXgpOwotCi0gICAgICAgIHZhciBwcmVmaXggPSB3b3JkUmFuZ2UudG9TdHJpbmcoKTsKLSAgICAg
ICAgaWYgKCFleHByZXNzaW9uU3RyaW5nICYmICFwcmVmaXgpCi0gICAgICAgICAgICByZXR1cm47
Ci0KLSAgICAgICAgdmFyIHJlcG9ydENvbXBsZXRpb25zID0gdGhpcy5fcmVwb3J0Q29tcGxldGlv
bnMuYmluZCh0aGlzLCBiZXN0TWF0Y2hPbmx5LCBjb21wbGV0aW9uc1JlYWR5Q2FsbGJhY2ssIGRv
dE5vdGF0aW9uLCBicmFja2V0Tm90YXRpb24sIHByZWZpeCk7Ci0gICAgICAgIC8vIENvbGxlY3Qg
Y29tbWEgc2VwYXJhdGVkIG9iamVjdCBwcm9wZXJ0aWVzIGZvciB0aGUgY29tcGxldGlvbi4KLQot
ICAgICAgICB2YXIgaW5jbHVkZUNvbW1hbmRMaW5lQVBJID0gKCFkb3ROb3RhdGlvbiAmJiAhYnJh
Y2tldE5vdGF0aW9uKTsKLSAgICAgICAgdmFyIGluamVjdGVkU2NyaXB0QWNjZXNzOwotICAgICAg
ICBpZiAoV2ViSW5zcGVjdG9yLnBhbmVscy5zY3JpcHRzICYmIFdlYkluc3BlY3Rvci5wYW5lbHMu
c2NyaXB0cy5wYXVzZWQpCi0gICAgICAgICAgICBEZWJ1Z2dlckFnZW50LmdldENvbXBsZXRpb25z
T25DYWxsRnJhbWUoV2ViSW5zcGVjdG9yLnBhbmVscy5zY3JpcHRzLnNlbGVjdGVkQ2FsbEZyYW1l
SWQoKSwgZXhwcmVzc2lvblN0cmluZywgaW5jbHVkZUNvbW1hbmRMaW5lQVBJLCByZXBvcnRDb21w
bGV0aW9ucyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIFJ1bnRpbWVBZ2VudC5nZXRDb21w
bGV0aW9ucyhleHByZXNzaW9uU3RyaW5nLCBpbmNsdWRlQ29tbWFuZExpbmVBUEksIHJlcG9ydENv
bXBsZXRpb25zKTsKLSAgICB9LAotCi0gICAgX3JlcG9ydENvbXBsZXRpb25zOiBmdW5jdGlvbihi
ZXN0TWF0Y2hPbmx5LCBjb21wbGV0aW9uc1JlYWR5Q2FsbGJhY2ssIGRvdE5vdGF0aW9uLCBicmFj
a2V0Tm90YXRpb24sIHByZWZpeCwgcmVzdWx0LCBpc0V4Y2VwdGlvbikgewotICAgICAgICBpZiAo
aXNFeGNlcHRpb24pCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKGJyYWNrZXRO
b3RhdGlvbikgewotICAgICAgICAgICAgaWYgKHByZWZpeC5sZW5ndGggJiYgcHJlZml4WzBdID09
PSAiJyIpCi0gICAgICAgICAgICAgICAgdmFyIHF1b3RlVXNlZCA9ICInIjsKLSAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICB2YXIgcXVvdGVVc2VkID0gIlwiIjsKLSAgICAgICAgfQot
Ci0gICAgICAgIHZhciByZXN1bHRzID0gW107Ci0gICAgICAgIHZhciBwcm9wZXJ0aWVzID0gT2Jq
ZWN0LmtleXMocmVzdWx0KS5zb3J0KCk7Ci0KLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBw
cm9wZXJ0aWVzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICB2YXIgcHJvcGVydHkgPSBwcm9w
ZXJ0aWVzW2ldOwotCi0gICAgICAgICAgICBpZiAoZG90Tm90YXRpb24gJiYgIS9eW2EtekEtWl8k
XVthLXpBLVowLTlfJF0qJC8udGVzdChwcm9wZXJ0eSkpCi0gICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0KLSAgICAgICAgICAgIGlmIChicmFja2V0Tm90YXRpb24pIHsKLSAgICAgICAgICAgICAg
ICBpZiAoIS9eWzAtOV0rJC8udGVzdChwcm9wZXJ0eSkpCi0gICAgICAgICAgICAgICAgICAgIHBy
b3BlcnR5ID0gcXVvdGVVc2VkICsgcHJvcGVydHkuZXNjYXBlQ2hhcmFjdGVycyhxdW90ZVVzZWQg
KyAiXFwiKSArIHF1b3RlVXNlZDsKLSAgICAgICAgICAgICAgICBwcm9wZXJ0eSArPSAiXSI7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChwcm9wZXJ0eS5sZW5ndGggPCBwcmVmaXgu
bGVuZ3RoKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKHByb3Bl
cnR5LmluZGV4T2YocHJlZml4KSAhPT0gMCkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQot
ICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHByb3BlcnR5KTsKLSAgICAgICAgICAgIGlmIChiZXN0
TWF0Y2hPbmx5KQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNv
bXBsZXRpb25zUmVhZHlDYWxsYmFjayhyZXN1bHRzKTsKLSAgICB9LAotCi0gICAgX2NsZWFyQnV0
dG9uQ2xpY2tlZDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5yZXF1ZXN0Q2xlYXJN
ZXNzYWdlcygpOwotICAgIH0sCi0KLSAgICBfaGFuZGxlQ29udGV4dE1lbnVFdmVudDogZnVuY3Rp
b24oZXZlbnQpCi0gICAgewotICAgICAgICBpZiAoIXdpbmRvdy5nZXRTZWxlY3Rpb24oKS5pc0Nv
bGxhcHNlZCkgewotICAgICAgICAgICAgLy8gSWYgdGhlcmUgaXMgYSBzZWxlY3Rpb24sIHdlIHdh
bnQgdG8gc2hvdyBvdXIgbm9ybWFsIGNvbnRleHQgbWVudQotICAgICAgICAgICAgLy8gKHdpdGgg
Q29weSwgZXRjLiksIGFuZCBub3QgQ2xlYXIgQ29uc29sZS4KLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotCi0gICAgICAgIHZhciBpdGVtQWN0aW9uID0gZnVuY3Rpb24gKCkgewotICAg
ICAgICAgICAgV2ViSW5zcGVjdG9yLnNldHRpbmdzLm1vbml0b3JpbmdYSFJFbmFibGVkID0gIVdl
Ykluc3BlY3Rvci5zZXR0aW5ncy5tb25pdG9yaW5nWEhSRW5hYmxlZDsKLSAgICAgICAgICAgIENv
bnNvbGVBZ2VudC5zZXRNb25pdG9yaW5nWEhSRW5hYmxlZChXZWJJbnNwZWN0b3Iuc2V0dGluZ3Mu
bW9uaXRvcmluZ1hIUkVuYWJsZWQpOwotICAgICAgICB9LmJpbmQodGhpcyk7Ci0gICAgICAgIHZh
ciBjb250ZXh0TWVudSA9IG5ldyBXZWJJbnNwZWN0b3IuQ29udGV4dE1lbnUoKTsKLSAgICAgICAg
Y29udGV4dE1lbnUuYXBwZW5kQ2hlY2tib3hJdGVtKFdlYkluc3BlY3Rvci5VSVN0cmluZygiWE1M
SHR0cFJlcXVlc3QgbG9nZ2luZyIpLCBpdGVtQWN0aW9uLCBXZWJJbnNwZWN0b3Iuc2V0dGluZ3Mu
bW9uaXRvcmluZ1hIUkVuYWJsZWQpCi0gICAgICAgIGNvbnRleHRNZW51LmFwcGVuZEl0ZW0oV2Vi
SW5zcGVjdG9yLlVJU3RyaW5nKCJDbGVhciBDb25zb2xlIiksIHRoaXMucmVxdWVzdENsZWFyTWVz
c2FnZXMuYmluZCh0aGlzKSk7Ci0gICAgICAgIGNvbnRleHRNZW51LnNob3coZXZlbnQpOwotICAg
IH0sCi0KLSAgICBfbWVzc2FnZXNTZWxlY3RTdGFydDogZnVuY3Rpb24oZXZlbnQpCi0gICAgewot
ICAgICAgICBpZiAodGhpcy5fc2VsZWN0aW9uVGltZW91dCkKLSAgICAgICAgICAgIGNsZWFyVGlt
ZW91dCh0aGlzLl9zZWxlY3Rpb25UaW1lb3V0KTsKLQotICAgICAgICB0aGlzLnByb21wdC5jbGVh
ckF1dG9Db21wbGV0ZSgpOwotCi0gICAgICAgIGZ1bmN0aW9uIG1vdmVCYWNrSWZPdXRzaWRlKCkK
LSAgICAgICAgewotICAgICAgICAgICAgZGVsZXRlIHRoaXMuX3NlbGVjdGlvblRpbWVvdXQ7Ci0g
ICAgICAgICAgICBpZiAoIXRoaXMucHJvbXB0LmlzQ2FyZXRJbnNpZGVQcm9tcHQoKSAmJiB3aW5k
b3cuZ2V0U2VsZWN0aW9uKCkuaXNDb2xsYXBzZWQpCi0gICAgICAgICAgICAgICAgdGhpcy5wcm9t
cHQubW92ZUNhcmV0VG9FbmRPZlByb21wdCgpOwotICAgICAgICAgICAgdGhpcy5wcm9tcHQuYXV0
b0NvbXBsZXRlU29vbigpOwotICAgICAgICB9Ci0KLSAgICAgICAgdGhpcy5fc2VsZWN0aW9uVGlt
ZW91dCA9IHNldFRpbWVvdXQobW92ZUJhY2tJZk91dHNpZGUuYmluZCh0aGlzKSwgMTAwKTsKLSAg
ICB9LAotCi0gICAgX21lc3NhZ2VzQ2xpY2tlZDogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAg
ICAgICB2YXIgbGluayA9IGV2ZW50LnRhcmdldC5lbmNsb3NpbmdOb2RlT3JTZWxmV2l0aE5vZGVO
YW1lKCJhIik7Ci0gICAgICAgIGlmICghbGluayB8fCAhbGluay5yZXByZXNlbnRlZE5vZGUpCi0g
ICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgV2ViSW5zcGVjdG9yLnVwZGF0ZUZvY3VzZWRO
b2RlKGxpbmsucmVwcmVzZW50ZWROb2RlLmlkKTsKLSAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0
aW9uKCk7Ci0gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7Ci0gICAgfSwKLQotICAgIF9y
ZWdpc3RlclNob3J0Y3V0czogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fc2hvcnRj
dXRzID0ge307Ci0KLSAgICAgICAgdmFyIHNob3J0Y3V0ID0gV2ViSW5zcGVjdG9yLktleWJvYXJk
U2hvcnRjdXQ7Ci0gICAgICAgIHZhciBzaG9ydGN1dEsgPSBzaG9ydGN1dC5tYWtlRGVzY3JpcHRv
cigiayIsIFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0Lk1vZGlmaWVycy5NZXRhKTsKLSAg
ICAgICAgLy8gVGhpcyBjYXNlIHJlcXVpcmVzIGEgc2VwYXJhdGUgYm91bmQgZnVuY3Rpb24gYXMg
aXRzIGlzTWFjT25seSBwcm9wZXJ0eSBzaG91bGQgbm90IGJlIHNoYXJlZCBhbW9uZyBkaWZmZXJl
bnQgc2hvcnRjdXQgaGFuZGxlcnMuCi0gICAgICAgIHRoaXMuX3Nob3J0Y3V0c1tzaG9ydGN1dEsu
a2V5XSA9IHRoaXMucmVxdWVzdENsZWFyTWVzc2FnZXMuYmluZCh0aGlzKTsKLSAgICAgICAgdGhp
cy5fc2hvcnRjdXRzW3Nob3J0Y3V0Sy5rZXldLmlzTWFjT25seSA9IHRydWU7Ci0KLSAgICAgICAg
dmFyIGNsZWFyQ29uc29sZUhhbmRsZXIgPSB0aGlzLnJlcXVlc3RDbGVhck1lc3NhZ2VzLmJpbmQo
dGhpcyk7Ci0gICAgICAgIHZhciBzaG9ydGN1dEwgPSBzaG9ydGN1dC5tYWtlRGVzY3JpcHRvcigi
bCIsIFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0Lk1vZGlmaWVycy5DdHJsKTsKLSAgICAg
ICAgdGhpcy5fc2hvcnRjdXRzW3Nob3J0Y3V0TC5rZXldID0gY2xlYXJDb25zb2xlSGFuZGxlcjsK
LQotICAgICAgICB2YXIgc2VjdGlvbiA9IFdlYkluc3BlY3Rvci5zaG9ydGN1dHNIZWxwLnNlY3Rp
b24oV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJDb25zb2xlIikpOwotICAgICAgICB2YXIga2V5cyA9
IFdlYkluc3BlY3Rvci5pc01hYygpID8gWyBzaG9ydGN1dEsubmFtZSwgc2hvcnRjdXRMLm5hbWUg
XSA6IFsgc2hvcnRjdXRMLm5hbWUgXTsKLSAgICAgICAgc2VjdGlvbi5hZGRBbHRlcm5hdGVLZXlz
KGtleXMsIFdlYkluc3BlY3Rvci5VSVN0cmluZygiQ2xlYXIgQ29uc29sZSIpKTsKLQotICAgICAg
ICBrZXlzID0gWwotICAgICAgICAgICAgc2hvcnRjdXQuc2hvcnRjdXRUb1N0cmluZyhzaG9ydGN1
dC5LZXlzLlRhYiksCi0gICAgICAgICAgICBzaG9ydGN1dC5zaG9ydGN1dFRvU3RyaW5nKHNob3J0
Y3V0LktleXMuVGFiLCBzaG9ydGN1dC5Nb2RpZmllcnMuU2hpZnQpCi0gICAgICAgIF07Ci0gICAg
ICAgIHNlY3Rpb24uYWRkUmVsYXRlZEtleXMoa2V5cywgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJO
ZXh0L3ByZXZpb3VzIHN1Z2dlc3Rpb24iKSk7Ci0gICAgICAgIHNlY3Rpb24uYWRkS2V5KHNob3J0
Y3V0LnNob3J0Y3V0VG9TdHJpbmcoc2hvcnRjdXQuS2V5cy5SaWdodCksIFdlYkluc3BlY3Rvci5V
SVN0cmluZygiQWNjZXB0IHN1Z2dlc3Rpb24iKSk7Ci0gICAgICAgIGtleXMgPSBbCi0gICAgICAg
ICAgICBzaG9ydGN1dC5zaG9ydGN1dFRvU3RyaW5nKHNob3J0Y3V0LktleXMuRG93biksCi0gICAg
ICAgICAgICBzaG9ydGN1dC5zaG9ydGN1dFRvU3RyaW5nKHNob3J0Y3V0LktleXMuVXApCi0gICAg
ICAgIF07Ci0gICAgICAgIHNlY3Rpb24uYWRkUmVsYXRlZEtleXMoa2V5cywgV2ViSW5zcGVjdG9y
LlVJU3RyaW5nKCJOZXh0L3ByZXZpb3VzIGxpbmUiKSk7Ci0gICAgICAgIGtleXMgPSBbCi0gICAg
ICAgICAgICBzaG9ydGN1dC5zaG9ydGN1dFRvU3RyaW5nKCJOIiwgc2hvcnRjdXQuTW9kaWZpZXJz
LkFsdCksCi0gICAgICAgICAgICBzaG9ydGN1dC5zaG9ydGN1dFRvU3RyaW5nKCJQIiwgc2hvcnRj
dXQuTW9kaWZpZXJzLkFsdCkKLSAgICAgICAgXTsKLSAgICAgICAgaWYgKFdlYkluc3BlY3Rvci5p
c01hYygpKQotICAgICAgICAgICAgc2VjdGlvbi5hZGRSZWxhdGVkS2V5cyhrZXlzLCBXZWJJbnNw
ZWN0b3IuVUlTdHJpbmcoIk5leHQvcHJldmlvdXMgY29tbWFuZCIpKTsKLSAgICAgICAgc2VjdGlv
bi5hZGRLZXkoc2hvcnRjdXQuc2hvcnRjdXRUb1N0cmluZyhzaG9ydGN1dC5LZXlzLkVudGVyKSwg
V2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJFeGVjdXRlIGNvbW1hbmQiKSk7Ci0gICAgfSwKLQotICAg
IF9wcm9tcHRLZXlEb3duOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIGlmIChpc0Vu
dGVyS2V5KGV2ZW50KSkgewotICAgICAgICAgICAgdGhpcy5fZW50ZXJLZXlQcmVzc2VkKGV2ZW50
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHZhciBzaG9ydGN1
dCA9IFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0Lm1ha2VLZXlGcm9tRXZlbnQoZXZlbnQp
OwotICAgICAgICB2YXIgaGFuZGxlciA9IHRoaXMuX3Nob3J0Y3V0c1tzaG9ydGN1dF07Ci0gICAg
ICAgIGlmIChoYW5kbGVyKSB7Ci0gICAgICAgICAgICBpZiAoIXRoaXMuX3Nob3J0Y3V0c1tzaG9y
dGN1dF0uaXNNYWNPbmx5IHx8IFdlYkluc3BlY3Rvci5pc01hYygpKSB7Ci0gICAgICAgICAgICAg
ICAgaGFuZGxlcigpOwotICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfSwK
LQotICAgIGV2YWxJbkluc3BlY3RlZFdpbmRvdzogZnVuY3Rpb24oZXhwcmVzc2lvbiwgb2JqZWN0
R3JvdXAsIGluY2x1ZGVDb21tYW5kTGluZUFQSSwgY2FsbGJhY2spCi0gICAgewotICAgICAgICBp
ZiAoV2ViSW5zcGVjdG9yLnBhbmVscy5zY3JpcHRzICYmIFdlYkluc3BlY3Rvci5wYW5lbHMuc2Ny
aXB0cy5wYXVzZWQpIHsKLSAgICAgICAgICAgIFdlYkluc3BlY3Rvci5wYW5lbHMuc2NyaXB0cy5l
dmFsdWF0ZUluU2VsZWN0ZWRDYWxsRnJhbWUoZXhwcmVzc2lvbiwgZmFsc2UsIG9iamVjdEdyb3Vw
LCBpbmNsdWRlQ29tbWFuZExpbmVBUEksIGNhbGxiYWNrKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotCi0gICAgICAgIGlmICghZXhwcmVzc2lvbikgewotICAgICAgICAgICAgLy8g
VGhlcmUgaXMgbm8gZXhwcmVzc2lvbiwgc28gdGhlIGNvbXBsZXRpb24gc2hvdWxkIGhhcHBlbiBh
Z2FpbnN0IGdsb2JhbCBwcm9wZXJ0aWVzLgotICAgICAgICAgICAgZXhwcmVzc2lvbiA9ICJ0aGlz
IjsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIGV2YWxDYWxsYmFjayhyZXN1bHQpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGNhbGxiYWNrKFdlYkluc3BlY3Rvci5SZW1vdGVPYmplY3Qu
ZnJvbVBheWxvYWQocmVzdWx0KSk7Ci0gICAgICAgIH0KLSAgICAgICAgUnVudGltZUFnZW50LmV2
YWx1YXRlKGV4cHJlc3Npb24sIG9iamVjdEdyb3VwLCBpbmNsdWRlQ29tbWFuZExpbmVBUEksIGV2
YWxDYWxsYmFjayk7Ci0gICAgfSwKLQotICAgIF9lbnRlcktleVByZXNzZWQ6IGZ1bmN0aW9uKGV2
ZW50KQotICAgIHsKLSAgICAgICAgaWYgKGV2ZW50LmFsdEtleSB8fCBldmVudC5jdHJsS2V5IHx8
IGV2ZW50LnNoaWZ0S2V5KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGV2ZW50LnBy
ZXZlbnREZWZhdWx0KCk7Ci0gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOwotCi0gICAg
ICAgIHRoaXMucHJvbXB0LmNsZWFyQXV0b0NvbXBsZXRlKHRydWUpOwotCi0gICAgICAgIHZhciBz
dHIgPSB0aGlzLnByb21wdC50ZXh0OwotICAgICAgICBpZiAoIXN0ci5sZW5ndGgpCi0gICAgICAg
ICAgICByZXR1cm47Ci0KLSAgICAgICAgdmFyIGNvbW1hbmRNZXNzYWdlID0gbmV3IFdlYkluc3Bl
Y3Rvci5Db25zb2xlQ29tbWFuZChzdHIpOwotICAgICAgICB0aGlzLmFkZE1lc3NhZ2UoY29tbWFu
ZE1lc3NhZ2UpOwotCi0gICAgICAgIHZhciBzZWxmID0gdGhpczsKLSAgICAgICAgZnVuY3Rpb24g
cHJpbnRSZXN1bHQocmVzdWx0KQotICAgICAgICB7Ci0gICAgICAgICAgICBzZWxmLnByb21wdC5o
aXN0b3J5LnB1c2goc3RyKTsKLSAgICAgICAgICAgIHNlbGYucHJvbXB0Lmhpc3RvcnlPZmZzZXQg
PSAwOwotICAgICAgICAgICAgc2VsZi5wcm9tcHQudGV4dCA9ICIiOwotCi0gICAgICAgICAgICBX
ZWJJbnNwZWN0b3Iuc2V0dGluZ3MuY29uc29sZUhpc3RvcnkgPSBzZWxmLnByb21wdC5oaXN0b3J5
LnNsaWNlKC0zMCk7Ci0KLSAgICAgICAgICAgIHNlbGYuYWRkTWVzc2FnZShuZXcgV2ViSW5zcGVj
dG9yLkNvbnNvbGVDb21tYW5kUmVzdWx0KHJlc3VsdCwgY29tbWFuZE1lc3NhZ2UpKTsKLSAgICAg
ICAgfQotICAgICAgICB0aGlzLmV2YWxJbkluc3BlY3RlZFdpbmRvdyhzdHIsICJjb25zb2xlIiwg
dHJ1ZSwgcHJpbnRSZXN1bHQpOwotICAgIH0sCi0KLSAgICBfZm9ybWF0OiBmdW5jdGlvbihvdXRw
dXQsIGZvcmNlT2JqZWN0Rm9ybWF0KQotICAgIHsKLSAgICAgICAgdmFyIGlzUHJveHkgPSAob3V0
cHV0ICE9IG51bGwgJiYgdHlwZW9mIG91dHB1dCA9PT0gIm9iamVjdCIpOwotICAgICAgICB2YXIg
dHlwZSA9IChmb3JjZU9iamVjdEZvcm1hdCA/ICJvYmplY3QiIDogV2ViSW5zcGVjdG9yLlJlbW90
ZU9iamVjdC50eXBlKG91dHB1dCkpOwotCi0gICAgICAgIHZhciBmb3JtYXR0ZXIgPSB0aGlzLl9j
dXN0b21Gb3JtYXR0ZXJzW3R5cGVdOwotICAgICAgICBpZiAoIWZvcm1hdHRlciB8fCAhaXNQcm94
eSkgewotICAgICAgICAgICAgZm9ybWF0dGVyID0gdGhpcy5fZm9ybWF0dmFsdWU7Ci0gICAgICAg
ICAgICBvdXRwdXQgPSBvdXRwdXQuZGVzY3JpcHRpb247Ci0gICAgICAgIH0KLQotICAgICAgICB2
YXIgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKLSAgICAgICAgc3Bhbi5j
bGFzc05hbWUgPSAiY29uc29sZS1mb3JtYXR0ZWQtIiArIHR5cGUgKyAiIHNvdXJjZS1jb2RlIjsK
LSAgICAgICAgZm9ybWF0dGVyLmNhbGwodGhpcywgb3V0cHV0LCBzcGFuKTsKLSAgICAgICAgcmV0
dXJuIHNwYW47Ci0gICAgfSwKLQotICAgIF9mb3JtYXR2YWx1ZTogZnVuY3Rpb24odmFsLCBlbGVt
KQotICAgIHsKLSAgICAgICAgZWxlbS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9k
ZSh2YWwpKTsKLSAgICB9LAotCi0gICAgX2Zvcm1hdG9iamVjdDogZnVuY3Rpb24ob2JqLCBlbGVt
KQotICAgIHsKLSAgICAgICAgZWxlbS5hcHBlbmRDaGlsZChuZXcgV2ViSW5zcGVjdG9yLk9iamVj
dFByb3BlcnRpZXNTZWN0aW9uKG9iaiwgb2JqLmRlc2NyaXB0aW9uLCBudWxsLCB0cnVlKS5lbGVt
ZW50KTsKLSAgICB9LAotCi0gICAgX2Zvcm1hdG5vZGU6IGZ1bmN0aW9uKG9iamVjdCwgZWxlbSkK
LSAgICB7Ci0gICAgICAgIGZ1bmN0aW9uIHByaW50Tm9kZShub2RlSWQpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGlmICghbm9kZUlkKSB7Ci0gICAgICAgICAgICAgICAgLy8gU29tZXRpbWVzIERP
TSBpcyBsb2FkZWQgYWZ0ZXIgdGhlIHN5bmMgbWVzc2FnZSBpcyBiZWluZyBmb3JtYXR0ZWQsIHNv
IHdlIGdldCBubwotICAgICAgICAgICAgICAgIC8vIG5vZGVJZCBoZXJlLiBTbyB3ZSBmYWxsIGJh
Y2sgdG8gb2JqZWN0IGZvcm1hdHRpbmcgaGVyZS4KLSAgICAgICAgICAgICAgICB0aGlzLl9mb3Jt
YXRvYmplY3Qob2JqZWN0LCBlbGVtKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB2YXIgdHJlZU91dGxpbmUgPSBuZXcgV2ViSW5zcGVjdG9yLkVs
ZW1lbnRzVHJlZU91dGxpbmUoKTsKLSAgICAgICAgICAgIHRyZWVPdXRsaW5lLnNob3dJbkVsZW1l
bnRzUGFuZWxFbmFibGVkID0gdHJ1ZTsKLSAgICAgICAgICAgIHRyZWVPdXRsaW5lLnJvb3RET01O
b2RlID0gV2ViSW5zcGVjdG9yLmRvbUFnZW50Lm5vZGVGb3JJZChub2RlSWQpOwotICAgICAgICAg
ICAgdHJlZU91dGxpbmUuZWxlbWVudC5hZGRTdHlsZUNsYXNzKCJvdXRsaW5lLWRpc2Nsb3N1cmUi
KTsKLSAgICAgICAgICAgIGlmICghdHJlZU91dGxpbmUuY2hpbGRyZW5bMF0uaGFzQ2hpbGRyZW4p
Ci0gICAgICAgICAgICAgICAgdHJlZU91dGxpbmUuZWxlbWVudC5hZGRTdHlsZUNsYXNzKCJzaW5n
bGUtbm9kZSIpOwotICAgICAgICAgICAgZWxlbS5hcHBlbmRDaGlsZCh0cmVlT3V0bGluZS5lbGVt
ZW50KTsKLSAgICAgICAgfQotICAgICAgICBvYmplY3QucHVzaE5vZGVUb0Zyb250ZW5kKHByaW50
Tm9kZS5iaW5kKHRoaXMpKTsKLSAgICB9LAotCi0gICAgX2Zvcm1hdGFycmF5OiBmdW5jdGlvbihh
cnIsIGVsZW0pCi0gICAgewotICAgICAgICBhcnIuZ2V0T3duUHJvcGVydGllcyhmYWxzZSwgdGhp
cy5fcHJpbnRBcnJheS5iaW5kKHRoaXMsIGVsZW0pKTsKLSAgICB9LAotCi0gICAgX2Zvcm1hdHN0
cmluZzogZnVuY3Rpb24ob3V0cHV0LCBlbGVtKQotICAgIHsKLSAgICAgICAgdmFyIHNwYW4gPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7Ci0gICAgICAgIHNwYW4uY2xhc3NOYW1lID0g
ImNvbnNvbGUtZm9ybWF0dGVkLXN0cmluZyBzb3VyY2UtY29kZSI7Ci0gICAgICAgIHNwYW4uYXBw
ZW5kQ2hpbGQoV2ViSW5zcGVjdG9yLmxpbmtpZnlTdHJpbmdBc0ZyYWdtZW50KG91dHB1dC5kZXNj
cmlwdGlvbikpOwotCi0gICAgICAgIC8vIE1ha2UgYmxhY2sgcXVvdGVzLgotICAgICAgICBlbGVt
LnJlbW92ZVN0eWxlQ2xhc3MoImNvbnNvbGUtZm9ybWF0dGVkLXN0cmluZyIpOwotICAgICAgICBl
bGVtLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJcIiIpKTsKLSAgICAgICAg
ZWxlbS5hcHBlbmRDaGlsZChzcGFuKTsKLSAgICAgICAgZWxlbS5hcHBlbmRDaGlsZChkb2N1bWVu
dC5jcmVhdGVUZXh0Tm9kZSgiXCIiKSk7Ci0gICAgfSwKLQotICAgIF9wcmludEFycmF5OiBmdW5j
dGlvbihlbGVtLCBwcm9wZXJ0aWVzKQotICAgIHsKLSAgICAgICAgaWYgKCFwcm9wZXJ0aWVzKQot
ICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHZhciBlbGVtZW50cyA9IFtdOwotICAgICAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAg
ICAgIHZhciBuYW1lID0gcHJvcGVydGllc1tpXS5uYW1lOwotICAgICAgICAgICAgaWYgKG5hbWUg
PT0gcGFyc2VJbnQobmFtZSkpCi0gICAgICAgICAgICAgICAgZWxlbWVudHNbbmFtZV0gPSB0aGlz
Ll9mb3JtYXRBc0FycmF5RW50cnkocHJvcGVydGllc1tpXS52YWx1ZSk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBlbGVtLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJbIikpOwot
ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgKytpKSB7Ci0gICAg
ICAgICAgICB2YXIgZWxlbWVudCA9IGVsZW1lbnRzW2ldOwotICAgICAgICAgICAgaWYgKGVsZW1l
bnQpCi0gICAgICAgICAgICAgICAgZWxlbS5hcHBlbmRDaGlsZChlbGVtZW50KTsKLSAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICBlbGVtLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0
ZVRleHROb2RlKCJ1bmRlZmluZWQiKSkKLSAgICAgICAgICAgIGlmIChpIDwgZWxlbWVudHMubGVu
Z3RoIC0gMSkKLSAgICAgICAgICAgICAgICBlbGVtLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0
ZVRleHROb2RlKCIsICIpKTsKLSAgICAgICAgfQotICAgICAgICBlbGVtLmFwcGVuZENoaWxkKGRv
Y3VtZW50LmNyZWF0ZVRleHROb2RlKCJdIikpOwotICAgIH0sCi0KLSAgICBfZm9ybWF0QXNBcnJh
eUVudHJ5OiBmdW5jdGlvbihvdXRwdXQpCi0gICAgewotICAgICAgICAvLyBQcmV2ZW50IGluZmlu
aXRlIGV4cGFuc2lvbiBvZiBjcm9zcy1yZWZlcmVuY2luZyBhcnJheXMuCi0gICAgICAgIHJldHVy
biB0aGlzLl9mb3JtYXQob3V0cHV0LCBXZWJJbnNwZWN0b3IuUmVtb3RlT2JqZWN0LnR5cGUob3V0
cHV0KSA9PT0gImFycmF5Iik7Ci0gICAgfQotfQotCi1XZWJJbnNwZWN0b3IuQ29uc29sZVZpZXcu
cHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5WaWV3LnByb3RvdHlwZTsKLQotV2Vi
SW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlID0gZnVuY3Rpb24oc291cmNlLCB0eXBlLCBsZXZlbCwg
bGluZSwgdXJsLCByZXBlYXRDb3VudCwgbWVzc2FnZSwgcGFyYW1ldGVycywgc3RhY2tUcmFjZSwg
cmVxdWVzdElkKQotewotICAgIHRoaXMuc291cmNlID0gc291cmNlOwotICAgIHRoaXMudHlwZSA9
IHR5cGU7Ci0gICAgdGhpcy5sZXZlbCA9IGxldmVsOwotICAgIHRoaXMubGluZSA9IGxpbmU7Ci0g
ICAgdGhpcy51cmwgPSB1cmw7Ci0gICAgdGhpcy5yZXBlYXRDb3VudCA9IHJlcGVhdENvdW50Owot
ICAgIHRoaXMucmVwZWF0RGVsdGEgPSByZXBlYXRDb3VudDsKLSAgICB0aGlzLnRvdGFsUmVwZWF0
Q291bnQgPSByZXBlYXRDb3VudDsKLSAgICB0aGlzLl9tZXNzYWdlVGV4dCA9IG1lc3NhZ2U7Ci0g
ICAgdGhpcy5fcGFyYW1ldGVycyA9IHBhcmFtZXRlcnM7Ci0gICAgdGhpcy5fc3RhY2tUcmFjZSA9
IHN0YWNrVHJhY2U7Ci0gICAgdGhpcy5fcmVxdWVzdElkID0gcmVxdWVzdElkOwotCi0gICAgaWYg
KHN0YWNrVHJhY2UgJiYgc3RhY2tUcmFjZS5sZW5ndGgpIHsKLSAgICAgICAgdmFyIHRvcENhbGxG
cmFtZSA9IHN0YWNrVHJhY2VbMF07Ci0gICAgICAgIGlmICghdGhpcy51cmwpCi0gICAgICAgICAg
ICB0aGlzLnVybCA9IHRvcENhbGxGcmFtZS5zY3JpcHROYW1lOwotICAgICAgICBpZiAoIXRoaXMu
bGluZSkKLSAgICAgICAgICAgIHRoaXMubGluZSA9IHRvcENhbGxGcmFtZS5saW5lTnVtYmVyOwot
ICAgIH0KLQotICAgIHRoaXMuX2Zvcm1hdE1lc3NhZ2UoKTsKLX0KLQotV2ViSW5zcGVjdG9yLkNv
bnNvbGVNZXNzYWdlLmNyZWF0ZVRleHRNZXNzYWdlID0gZnVuY3Rpb24odGV4dCwgbGV2ZWwpCi17
Ci0gICAgbGV2ZWwgPSBsZXZlbCB8fCBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2Fn
ZUxldmVsLkxvZzsKLSAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZShX
ZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVNvdXJjZS5KUywgV2ViSW5zcGVjdG9y
LkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBlLkxvZywgbGV2ZWwsIDAsIG51bGwsIDEsIG51bGws
IFt0ZXh0XSwgbnVsbCk7Ci19Ci0KLVdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5wcm90b3R5
cGUgPSB7Ci0gICAgX2Zvcm1hdE1lc3NhZ2U6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHZh
ciBzdGFja1RyYWNlID0gdGhpcy5fc3RhY2tUcmFjZTsKLSAgICAgICAgdmFyIG1lc3NhZ2VUZXh0
OwotICAgICAgICBzd2l0Y2ggKHRoaXMudHlwZSkgewotICAgICAgICAgICAgY2FzZSBXZWJJbnNw
ZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuVHJhY2U6Ci0gICAgICAgICAgICAgICAg
bWVzc2FnZVRleHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiY29uc29sZS50cmFjZSgpIik7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5D
b25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5VbmNhdWdodEV4Y2VwdGlvbjoKLSAgICAgICAgICAg
ICAgICBtZXNzYWdlVGV4dCA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRoaXMuX21lc3NhZ2VU
ZXh0KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVj
dG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBlLk5ldHdvcmtFcnJvcjoKLSAgICAgICAgICAg
ICAgICB2YXIgcmVzb3VyY2UgPSB0aGlzLl9yZXF1ZXN0SWQgJiYgV2ViSW5zcGVjdG9yLm5ldHdv
cmtSZXNvdXJjZUJ5SWQodGhpcy5fcmVxdWVzdElkKTsKLSAgICAgICAgICAgICAgICBpZiAocmVz
b3VyY2UpIHsKLSAgICAgICAgICAgICAgICAgICAgc3RhY2tUcmFjZSA9IHJlc291cmNlLnN0YWNr
VHJhY2U7Ci0KLSAgICAgICAgICAgICAgICAgICAgbWVzc2FnZVRleHQgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCJzcGFuIik7Ci0gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VUZXh0LmFwcGVu
ZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHJlc291cmNlLnJlcXVlc3RNZXRob2QgKyAi
ICIpKTsKLSAgICAgICAgICAgICAgICAgICAgbWVzc2FnZVRleHQuYXBwZW5kQ2hpbGQoV2ViSW5z
cGVjdG9yLmxpbmtpZnlVUkxBc05vZGUocmVzb3VyY2UudXJsKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChyZXNvdXJjZS5mYWlsZWQpCi0gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdl
VGV4dC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiICIgKyByZXNvdXJjZS5s
b2NhbGl6ZWRGYWlsRGVzY3JpcHRpb24pKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZVRleHQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3Jl
YXRlVGV4dE5vZGUoIiAiICsgcmVzb3VyY2Uuc3RhdHVzQ29kZSArICIgKCIgKyByZXNvdXJjZS5z
dGF0dXNUZXh0ICsgIikiKSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAg
ICAgICAgIG1lc3NhZ2VUZXh0ID0gdGhpcy5fZm9ybWF0KFt0aGlzLl9tZXNzYWdlVGV4dF0pOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuQ29u
c29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuQXNzZXJ0OgotICAgICAgICAgICAgICAgIHZhciBhcmdz
ID0gW1dlYkluc3BlY3Rvci5VSVN0cmluZygiQXNzZXJ0aW9uIGZhaWxlZDoiKV07Ci0gICAgICAg
ICAgICAgICAgaWYgKHRoaXMuX3BhcmFtZXRlcnMpCi0gICAgICAgICAgICAgICAgICAgIGFyZ3Mg
PSBhcmdzLmNvbmNhdCh0aGlzLl9wYXJhbWV0ZXJzKTsKLSAgICAgICAgICAgICAgICBtZXNzYWdl
VGV4dCA9IHRoaXMuX2Zvcm1hdChhcmdzKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBlLk9iamVj
dDoKLSAgICAgICAgICAgICAgICB2YXIgb2JqID0gdGhpcy5fcGFyYW1ldGVycyA/IHRoaXMuX3Bh
cmFtZXRlcnNbMF0gOiB1bmRlZmluZWQ7Ci0gICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBbIiVP
Iiwgb2JqXTsKLSAgICAgICAgICAgICAgICBtZXNzYWdlVGV4dCA9IHRoaXMuX2Zvcm1hdChhcmdz
KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICAgICAgdmFyIGFyZ3MgPSB0aGlzLl9wYXJhbWV0ZXJzIHx8IFt0aGlzLl9tZXNzYWdlVGV4
dF07Ci0gICAgICAgICAgICAgICAgbWVzc2FnZVRleHQgPSB0aGlzLl9mb3JtYXQoYXJncyk7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICB0aGlzLl9mb3JtYXR0
ZWRNZXNzYWdlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwotICAgICAgICB0aGlz
Ll9mb3JtYXR0ZWRNZXNzYWdlLmNsYXNzTmFtZSA9ICJjb25zb2xlLW1lc3NhZ2UtdGV4dCBzb3Vy
Y2UtY29kZSI7Ci0KLSAgICAgICAgaWYgKHRoaXMudXJsICYmIHRoaXMudXJsICE9PSAidW5kZWZp
bmVkIikgewotICAgICAgICAgICAgdmFyIHVybEVsZW1lbnQgPSBXZWJJbnNwZWN0b3IubGlua2lm
eVJlc291cmNlQXNOb2RlKHRoaXMudXJsLCAic2NyaXB0cyIsIHRoaXMubGluZSwgImNvbnNvbGUt
bWVzc2FnZS11cmwiKTsKLSAgICAgICAgICAgIHRoaXMuX2Zvcm1hdHRlZE1lc3NhZ2UuYXBwZW5k
Q2hpbGQodXJsRWxlbWVudCk7Ci0gICAgICAgIH0KLQotICAgICAgICB0aGlzLl9mb3JtYXR0ZWRN
ZXNzYWdlLmFwcGVuZENoaWxkKG1lc3NhZ2VUZXh0KTsKLQotICAgICAgICBpZiAodGhpcy5fc3Rh
Y2tUcmFjZSkgewotICAgICAgICAgICAgc3dpdGNoICh0aGlzLnR5cGUpIHsKLSAgICAgICAgICAg
ICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5UcmFjZToK
LSAgICAgICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdl
VHlwZS5VbmNhdWdodEV4Y2VwdGlvbjoKLSAgICAgICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rv
ci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5OZXR3b3JrRXJyb3I6Ci0gICAgICAgICAgICAg
ICAgY2FzZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuQXNzZXJ0OiB7
Ci0gICAgICAgICAgICAgICAgICAgIHZhciBvbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIm9s
Iik7Ci0gICAgICAgICAgICAgICAgICAgIG9sLmNsYXNzTmFtZSA9ICJvdXRsaW5lLWRpc2Nsb3N1
cmUiOwotICAgICAgICAgICAgICAgICAgICB2YXIgdHJlZU91dGxpbmUgPSBuZXcgVHJlZU91dGxp
bmUob2wpOwotCi0gICAgICAgICAgICAgICAgICAgIHZhciBjb250ZW50ID0gdGhpcy5fZm9ybWF0
dGVkTWVzc2FnZTsKLSAgICAgICAgICAgICAgICAgICAgdmFyIHJvb3QgPSBuZXcgVHJlZUVsZW1l
bnQoY29udGVudCwgbnVsbCwgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQudHJl
ZUVsZW1lbnRGb3JUZXN0ID0gcm9vdDsKLSAgICAgICAgICAgICAgICAgICAgdHJlZU91dGxpbmUu
YXBwZW5kQ2hpbGQocm9vdCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnR5cGUgPT09
IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5UcmFjZSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJvb3QuZXhwYW5kKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgdGhp
cy5fcG9wdWxhdGVTdGFja1RyYWNlVHJlZUVsZW1lbnQocm9vdCk7Ci0gICAgICAgICAgICAgICAg
ICAgIHRoaXMuX2Zvcm1hdHRlZE1lc3NhZ2UgPSBvbDsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBUaGlzIGlzIHVzZWQgZm9yIGlubGlu
ZSBtZXNzYWdlIGJ1YmJsZXMgaW4gU291cmNlRnJhbWVzLCBvciBvdGhlciBwbGFpbi10ZXh0IHJl
cHJlc2VudGF0aW9ucy4KLSAgICAgICAgdGhpcy5tZXNzYWdlID0gdGhpcy5fZm9ybWF0dGVkTWVz
c2FnZS50ZXh0Q29udGVudDsKLSAgICB9LAotCi0gICAgaXNFcnJvck9yV2FybmluZzogZnVuY3Rp
b24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuICh0aGlzLmxldmVsID09PSBXZWJJbnNwZWN0b3Iu
Q29uc29sZU1lc3NhZ2UuTWVzc2FnZUxldmVsLldhcm5pbmcgfHwgdGhpcy5sZXZlbCA9PT0gV2Vi
SW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VMZXZlbC5FcnJvcik7Ci0gICAgfSwKLQot
ICAgIF9mb3JtYXQ6IGZ1bmN0aW9uKHBhcmFtZXRlcnMpCi0gICAgewotICAgICAgICAvLyBUaGlz
IG5vZGUgaXMgdXNlZCBsaWtlIGEgQnVpbGRlci4gVmFsdWVzIGFyZSBjb250aW51YWxseSBhcHBl
bmRlZCBvbnRvIGl0LgotICAgICAgICB2YXIgZm9ybWF0dGVkUmVzdWx0ID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgic3BhbiIpOwotICAgICAgICBpZiAoIXBhcmFtZXRlcnMubGVuZ3RoKQotICAg
ICAgICAgICAgcmV0dXJuIGZvcm1hdHRlZFJlc3VsdDsKLQotICAgICAgICAvLyBGb3JtYXR0aW5n
IGNvZGUgYmVsb3cgYXNzdW1lcyB0aGF0IHBhcmFtZXRlcnMgYXJlIGFsbCB3cmFwcGVycyB3aGVy
ZWFzIGZyb250ZW5kIGNvbnNvbGUKLSAgICAgICAgLy8gQVBJIGFsbG93cyBwYXNzaW5nIGFyYml0
cmFyeSB2YWx1ZXMgYXMgbWVzc2FnZXMgKHN0cmluZ3MsIG51bWJlcnMsIGV0Yy4pLiBXcmFwIHRo
ZW0gaGVyZS4KLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJhbWV0ZXJzLmxlbmd0aDsg
KytpKSB7Ci0gICAgICAgICAgICBpZiAodHlwZW9mIHBhcmFtZXRlcnNbaV0gPT09ICJvYmplY3Qi
KQotICAgICAgICAgICAgICAgIHBhcmFtZXRlcnNbaV0gPSBXZWJJbnNwZWN0b3IuUmVtb3RlT2Jq
ZWN0LmZyb21QYXlsb2FkKHBhcmFtZXRlcnNbaV0pOwotICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIHBhcmFtZXRlcnNbaV0gPSBXZWJJbnNwZWN0b3IuUmVtb3RlT2JqZWN0LmZyb21Q
cmltaXRpdmVWYWx1ZShwYXJhbWV0ZXJzW2ldKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFRo
ZXJlIGNhbiBiZSBzdHJpbmcgbG9nIGFuZCBzdHJpbmcgZXZhbCByZXN1bHQuIFdlIGRpc3Rpbmd1
aXNoIGJldHdlZW4gdGhlbSBiYXNlZCBvbiBtZXNzYWdlIHR5cGUuCi0gICAgICAgIHZhciBzaG91
bGRGb3JtYXRNZXNzYWdlID0gV2ViSW5zcGVjdG9yLlJlbW90ZU9iamVjdC50eXBlKHBhcmFtZXRl
cnNbMF0pID09PSAic3RyaW5nIiAmJiB0aGlzLnR5cGUgIT09IFdlYkluc3BlY3Rvci5Db25zb2xl
TWVzc2FnZS5NZXNzYWdlVHlwZS5SZXN1bHQ7Ci0KLSAgICAgICAgLy8gTXVsdGlwbGUgcGFyYW1l
dGVycyB3aXRoIHRoZSBmaXJzdCBiZWluZyBhIGZvcm1hdCBzdHJpbmcuIFNhdmUgdW51c2VkIHN1
YnN0aXR1dGlvbnMuCi0gICAgICAgIGlmIChzaG91bGRGb3JtYXRNZXNzYWdlKSB7Ci0gICAgICAg
ICAgICAvLyBNdWx0aXBsZSBwYXJhbWV0ZXJzIHdpdGggdGhlIGZpcnN0IGJlaW5nIGEgZm9ybWF0
IHN0cmluZy4gU2F2ZSB1bnVzZWQgc3Vic3RpdHV0aW9ucy4KLSAgICAgICAgICAgIHZhciByZXN1
bHQgPSB0aGlzLl9mb3JtYXRXaXRoU3Vic3RpdHV0aW9uU3RyaW5nKHBhcmFtZXRlcnMsIGZvcm1h
dHRlZFJlc3VsdCk7Ci0gICAgICAgICAgICBwYXJhbWV0ZXJzID0gcmVzdWx0LnVudXNlZFN1YnN0
aXR1dGlvbnM7Ci0gICAgICAgICAgICBpZiAocGFyYW1ldGVycy5sZW5ndGgpCi0gICAgICAgICAg
ICAgICAgZm9ybWF0dGVkUmVzdWx0LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2Rl
KCIgIikpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gU2luZ2xlIHBhcmFtZXRlciwgb3IgdW51
c2VkIHN1YnN0aXR1dGlvbnMgZnJvbSBhYm92ZS4KLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBwYXJhbWV0ZXJzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAvLyBJbmxpbmUgc3RyaW5n
cyB3aGVuIGZvcm1hdHRpbmcuCi0gICAgICAgICAgICBpZiAoc2hvdWxkRm9ybWF0TWVzc2FnZSAm
JiBwYXJhbWV0ZXJzW2ldLnR5cGUgPT09ICJzdHJpbmciKQotICAgICAgICAgICAgICAgIGZvcm1h
dHRlZFJlc3VsdC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShwYXJhbWV0ZXJz
W2ldLmRlc2NyaXB0aW9uKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZm9y
bWF0dGVkUmVzdWx0LmFwcGVuZENoaWxkKFdlYkluc3BlY3Rvci5jb25zb2xlLl9mb3JtYXQocGFy
YW1ldGVyc1tpXSkpOwotICAgICAgICAgICAgaWYgKGkgPCBwYXJhbWV0ZXJzLmxlbmd0aCAtIDEp
Ci0gICAgICAgICAgICAgICAgZm9ybWF0dGVkUmVzdWx0LmFwcGVuZENoaWxkKGRvY3VtZW50LmNy
ZWF0ZVRleHROb2RlKCIgIikpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmb3JtYXR0ZWRS
ZXN1bHQ7Ci0gICAgfSwKLQotICAgIF9mb3JtYXRXaXRoU3Vic3RpdHV0aW9uU3RyaW5nOiBmdW5j
dGlvbihwYXJhbWV0ZXJzLCBmb3JtYXR0ZWRSZXN1bHQpCi0gICAgewotICAgICAgICB2YXIgZm9y
bWF0dGVycyA9IHt9Ci0gICAgICAgIGZvciAodmFyIGkgaW4gU3RyaW5nLnN0YW5kYXJkRm9ybWF0
dGVycykKLSAgICAgICAgICAgIGZvcm1hdHRlcnNbaV0gPSBTdHJpbmcuc3RhbmRhcmRGb3JtYXR0
ZXJzW2ldOwotCi0gICAgICAgIGZ1bmN0aW9uIGNvbnNvbGVGb3JtYXRXcmFwcGVyKGZvcmNlKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24ob2JqKSB7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5jb25zb2xlLl9mb3JtYXQob2JqLCBmb3JjZSk7Ci0g
ICAgICAgICAgICB9OwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gRmlyZWJ1ZyB1c2VzICVvIGZv
ciBmb3JtYXR0aW5nIG9iamVjdHMuCi0gICAgICAgIGZvcm1hdHRlcnMubyA9IGNvbnNvbGVGb3Jt
YXRXcmFwcGVyKCk7Ci0gICAgICAgIC8vIEZpcmVidWcgYWxsb3dzIGJvdGggJWkgYW5kICVkIGZv
ciBmb3JtYXR0aW5nIGludGVnZXJzLgotICAgICAgICBmb3JtYXR0ZXJzLmkgPSBmb3JtYXR0ZXJz
LmQ7Ci0gICAgICAgIC8vIFN1cHBvcnQgJU8gdG8gZm9yY2Ugb2JqZWN0IGZvcm1hdHRpbmcsIGlu
c3RlYWQgb2YgdGhlIHR5cGUtYmFzZWQgJW8gZm9ybWF0dGluZy4KLSAgICAgICAgZm9ybWF0dGVy
cy5PID0gY29uc29sZUZvcm1hdFdyYXBwZXIodHJ1ZSk7Ci0KLSAgICAgICAgZnVuY3Rpb24gYXBw
ZW5kKGEsIGIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICghKGIgaW5zdGFuY2VvZiBOb2Rl
KSkKLSAgICAgICAgICAgICAgICBhLmFwcGVuZENoaWxkKFdlYkluc3BlY3Rvci5saW5raWZ5U3Ry
aW5nQXNGcmFnbWVudChiLnRvU3RyaW5nKCkpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICBhLmFwcGVuZENoaWxkKGIpOwotICAgICAgICAgICAgcmV0dXJuIGE7Ci0gICAgICAg
IH0KLQotICAgICAgICAvLyBTdHJpbmcuZm9ybWF0IGRvZXMgdHJlYXQgZm9ybWF0dGVkUmVzdWx0
IGxpa2UgYSBCdWlsZGVyLCByZXN1bHQgaXMgYW4gb2JqZWN0LgotICAgICAgICByZXR1cm4gU3Ry
aW5nLmZvcm1hdChwYXJhbWV0ZXJzWzBdLmRlc2NyaXB0aW9uLCBwYXJhbWV0ZXJzLnNsaWNlKDEp
LCBmb3JtYXR0ZXJzLCBmb3JtYXR0ZWRSZXN1bHQsIGFwcGVuZCk7Ci0gICAgfSwKLQotICAgIHRv
TWVzc2FnZUVsZW1lbnQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9lbGVt
ZW50KQotICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2VsZW1lbnQ7Ci0KLSAgICAgICAgdmFyIGVs
ZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICAgICAgZWxlbWVudC5t
ZXNzYWdlID0gdGhpczsKLSAgICAgICAgZWxlbWVudC5jbGFzc05hbWUgPSAiY29uc29sZS1tZXNz
YWdlIjsKLQotICAgICAgICB0aGlzLl9lbGVtZW50ID0gZWxlbWVudDsKLQotICAgICAgICBzd2l0
Y2ggKHRoaXMubGV2ZWwpIHsKLSAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNvbnNvbGVN
ZXNzYWdlLk1lc3NhZ2VMZXZlbC5UaXA6Ci0gICAgICAgICAgICAgICAgZWxlbWVudC5hZGRTdHls
ZUNsYXNzKCJjb25zb2xlLXRpcC1sZXZlbCIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZUxldmVsLkxv
ZzoKLSAgICAgICAgICAgICAgICBlbGVtZW50LmFkZFN0eWxlQ2xhc3MoImNvbnNvbGUtbG9nLWxl
dmVsIik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFdlYkluc3Bl
Y3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlTGV2ZWwuRGVidWc6Ci0gICAgICAgICAgICAgICAg
ZWxlbWVudC5hZGRTdHlsZUNsYXNzKCJjb25zb2xlLWRlYnVnLWxldmVsIik7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2Fn
ZS5NZXNzYWdlTGV2ZWwuV2FybmluZzoKLSAgICAgICAgICAgICAgICBlbGVtZW50LmFkZFN0eWxl
Q2xhc3MoImNvbnNvbGUtd2FybmluZy1sZXZlbCIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZUxldmVs
LkVycm9yOgotICAgICAgICAgICAgICAgIGVsZW1lbnQuYWRkU3R5bGVDbGFzcygiY29uc29sZS1l
cnJvci1sZXZlbCIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKHRoaXMudHlwZSA9PT0gV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VU
eXBlLlN0YXJ0R3JvdXAgfHwgdGhpcy50eXBlID09PSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3Nh
Z2UuTWVzc2FnZVR5cGUuU3RhcnRHcm91cENvbGxhcHNlZCkKLSAgICAgICAgICAgIGVsZW1lbnQu
YWRkU3R5bGVDbGFzcygiY29uc29sZS1ncm91cC10aXRsZSIpOwotCi0gICAgICAgIGlmICh0aGlz
LmVsZW1lbnRzVHJlZU91dGxpbmUpIHsKLSAgICAgICAgICAgIGVsZW1lbnQuYWRkU3R5bGVDbGFz
cygib3V0bGluZS1kaXNjbG9zdXJlIik7Ci0gICAgICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxk
KHRoaXMuZWxlbWVudHNUcmVlT3V0bGluZS5lbGVtZW50KTsKLSAgICAgICAgICAgIHJldHVybiBl
bGVtZW50OwotICAgICAgICB9Ci0KLSAgICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9m
b3JtYXR0ZWRNZXNzYWdlKTsKLQotICAgICAgICBpZiAodGhpcy5yZXBlYXRDb3VudCA+IDEpCi0g
ICAgICAgICAgICB0aGlzLl91cGRhdGVSZXBlYXRDb3VudCgpOwotCi0gICAgICAgIHJldHVybiBl
bGVtZW50OwotICAgIH0sCi0KLSAgICBfcG9wdWxhdGVTdGFja1RyYWNlVHJlZUVsZW1lbnQ6IGZ1
bmN0aW9uKHBhcmVudFRyZWVFbGVtZW50KQotICAgIHsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCB0aGlzLl9zdGFja1RyYWNlLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICB2YXIgZnJh
bWUgPSB0aGlzLl9zdGFja1RyYWNlW2ldOwotCi0gICAgICAgICAgICB2YXIgY29udGVudCA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotICAgICAgICAgICAgdmFyIG1lc3NhZ2VUZXh0
RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKLSAgICAgICAgICAgIG1l
c3NhZ2VUZXh0RWxlbWVudC5jbGFzc05hbWUgPSAiY29uc29sZS1tZXNzYWdlLXRleHQgc291cmNl
LWNvZGUiOwotICAgICAgICAgICAgdmFyIGZ1bmN0aW9uTmFtZSA9IGZyYW1lLmZ1bmN0aW9uTmFt
ZSB8fCBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIihhbm9ueW1vdXMgZnVuY3Rpb24pIik7Ci0gICAg
ICAgICAgICBtZXNzYWdlVGV4dEVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4
dE5vZGUoZnVuY3Rpb25OYW1lKSk7Ci0gICAgICAgICAgICBjb250ZW50LmFwcGVuZENoaWxkKG1l
c3NhZ2VUZXh0RWxlbWVudCk7Ci0KLSAgICAgICAgICAgIHZhciB1cmxFbGVtZW50ID0gV2ViSW5z
cGVjdG9yLmxpbmtpZnlSZXNvdXJjZUFzTm9kZShmcmFtZS5zY3JpcHROYW1lLCAic2NyaXB0cyIs
IGZyYW1lLmxpbmVOdW1iZXIsICJjb25zb2xlLW1lc3NhZ2UtdXJsIik7Ci0gICAgICAgICAgICBj
b250ZW50LmFwcGVuZENoaWxkKHVybEVsZW1lbnQpOwotCi0gICAgICAgICAgICB2YXIgdHJlZUVs
ZW1lbnQgPSBuZXcgVHJlZUVsZW1lbnQoY29udGVudCk7Ci0gICAgICAgICAgICBwYXJlbnRUcmVl
RWxlbWVudC5hcHBlbmRDaGlsZCh0cmVlRWxlbWVudCk7Ci0gICAgICAgIH0KLSAgICB9LAotCi0g
ICAgX3VwZGF0ZVJlcGVhdENvdW50OiBmdW5jdGlvbigpIHsKLSAgICAgICAgaWYgKCF0aGlzLnJl
cGVhdENvdW50RWxlbWVudCkgewotICAgICAgICAgICAgdGhpcy5yZXBlYXRDb3VudEVsZW1lbnQg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7Ci0gICAgICAgICAgICB0aGlzLnJlcGVh
dENvdW50RWxlbWVudC5jbGFzc05hbWUgPSAiYnViYmxlIjsKLQotICAgICAgICAgICAgdGhpcy5f
ZWxlbWVudC5pbnNlcnRCZWZvcmUodGhpcy5yZXBlYXRDb3VudEVsZW1lbnQsIHRoaXMuX2VsZW1l
bnQuZmlyc3RDaGlsZCk7Ci0gICAgICAgICAgICB0aGlzLl9lbGVtZW50LmFkZFN0eWxlQ2xhc3Mo
InJlcGVhdGVkLW1lc3NhZ2UiKTsKLSAgICAgICAgfQotICAgICAgICB0aGlzLnJlcGVhdENvdW50
RWxlbWVudC50ZXh0Q29udGVudCA9IHRoaXMucmVwZWF0Q291bnQ7Ci0gICAgfSwKLQotICAgIHRv
U3RyaW5nOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIgc291cmNlU3RyaW5nOwotICAg
ICAgICBzd2l0Y2ggKHRoaXMuc291cmNlKSB7Ci0gICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rv
ci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlU291cmNlLkhUTUw6Ci0gICAgICAgICAgICAgICAgc291
cmNlU3RyaW5nID0gIkhUTUwiOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
Y2FzZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVNvdXJjZS5XTUw6Ci0gICAg
ICAgICAgICAgICAgc291cmNlU3RyaW5nID0gIldNTCI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlU291
cmNlLlhNTDoKLSAgICAgICAgICAgICAgICBzb3VyY2VTdHJpbmcgPSAiWE1MIjsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNz
YWdlLk1lc3NhZ2VTb3VyY2UuSlM6Ci0gICAgICAgICAgICAgICAgc291cmNlU3RyaW5nID0gIkpT
IjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9y
LkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VTb3VyY2UuQ1NTOgotICAgICAgICAgICAgICAgIHNvdXJj
ZVN0cmluZyA9ICJDU1MiOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2Fz
ZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVNvdXJjZS5PdGhlcjoKLSAgICAg
ICAgICAgICAgICBzb3VyY2VTdHJpbmcgPSAiT3RoZXIiOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIHR5cGVTdHJpbmc7Ci0gICAgICAgIHN3aXRjaCAo
dGhpcy50eXBlKSB7Ci0gICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2Fn
ZS5NZXNzYWdlVHlwZS5Mb2c6Ci0gICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db25zb2xl
TWVzc2FnZS5NZXNzYWdlVHlwZS5VbmNhdWdodEV4Y2VwdGlvbjoKLSAgICAgICAgICAgIGNhc2Ug
V2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBlLk5ldHdvcmtFcnJvcjoKLSAg
ICAgICAgICAgICAgICB0eXBlU3RyaW5nID0gIkxvZyI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlVHlw
ZS5PYmplY3Q6Ci0gICAgICAgICAgICAgICAgdHlwZVN0cmluZyA9ICJPYmplY3QiOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1l
c3NhZ2UuTWVzc2FnZVR5cGUuVHJhY2U6Ci0gICAgICAgICAgICAgICAgdHlwZVN0cmluZyA9ICJU
cmFjZSI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFdlYkluc3Bl
Y3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5TdGFydEdyb3VwQ29sbGFwc2VkOgotICAg
ICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuU3Rh
cnRHcm91cDoKLSAgICAgICAgICAgICAgICB0eXBlU3RyaW5nID0gIlN0YXJ0IEdyb3VwIjsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNvbnNv
bGVNZXNzYWdlLk1lc3NhZ2VUeXBlLkVuZEdyb3VwOgotICAgICAgICAgICAgICAgIHR5cGVTdHJp
bmcgPSAiRW5kIEdyb3VwIjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNh
c2UgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBlLkFzc2VydDoKLSAgICAg
ICAgICAgICAgICB0eXBlU3RyaW5nID0gIkFzc2VydCI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlVHlw
ZS5SZXN1bHQ6Ci0gICAgICAgICAgICAgICAgdHlwZVN0cmluZyA9ICJSZXN1bHQiOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIGxldmVsU3RyaW5nOwot
ICAgICAgICBzd2l0Y2ggKHRoaXMubGV2ZWwpIHsKLSAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVj
dG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VMZXZlbC5UaXA6Ci0gICAgICAgICAgICAgICAgbGV2
ZWxTdHJpbmcgPSAiVGlwIjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNh
c2UgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VMZXZlbC5Mb2c6Ci0gICAgICAg
ICAgICAgICAgbGV2ZWxTdHJpbmcgPSAiTG9nIjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VMZXZlbC5X
YXJuaW5nOgotICAgICAgICAgICAgICAgIGxldmVsU3RyaW5nID0gIldhcm5pbmciOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1l
c3NhZ2UuTWVzc2FnZUxldmVsLkRlYnVnOgotICAgICAgICAgICAgICAgIGxldmVsU3RyaW5nID0g
IkRlYnVnIjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgV2ViSW5z
cGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VMZXZlbC5FcnJvcjoKLSAgICAgICAgICAgICAg
ICBsZXZlbFN0cmluZyA9ICJFcnJvciI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLQotICAgICAgICByZXR1cm4gc291cmNlU3RyaW5nICsgIiAiICsgdHlwZVN0cmluZyArICIg
IiArIGxldmVsU3RyaW5nICsgIjogIiArIHRoaXMuX2Zvcm1hdHRlZE1lc3NhZ2UudGV4dENvbnRl
bnQgKyAiXG4iICsgdGhpcy51cmwgKyAiIGxpbmUgIiArIHRoaXMubGluZTsKLSAgICB9LAotCi0g
ICAgaXNFcXVhbDogZnVuY3Rpb24obXNnKQotICAgIHsKLSAgICAgICAgaWYgKCFtc2cpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgaWYgKHRoaXMuX3N0YWNrVHJhY2UpIHsK
LSAgICAgICAgICAgIGlmICghbXNnLl9zdGFja1RyYWNlKQotICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgICAgIHZhciBsID0gdGhpcy5fc3RhY2tUcmFjZTsKLSAgICAgICAg
ICAgIHZhciByID0gbXNnLl9zdGFja1RyYWNlOwotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBsLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGxbaV0uc2NyaXB0TmFt
ZSAhPT0gcltpXS5zY3JpcHROYW1lIHx8Ci0gICAgICAgICAgICAgICAgICAgIGxbaV0uZnVuY3Rp
b25OYW1lICE9PSByW2ldLmZ1bmN0aW9uTmFtZSB8fAotICAgICAgICAgICAgICAgICAgICBsW2ld
LmxpbmVOdW1iZXIgIT09IHJbaV0ubGluZU51bWJlciB8fAotICAgICAgICAgICAgICAgICAgICBs
W2ldLmNvbHVtbiAhPT0gcltpXS5jb2x1bW4pCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiAodGhpcy5z
b3VyY2UgPT09IG1zZy5zb3VyY2UpCi0gICAgICAgICAgICAmJiAodGhpcy50eXBlID09PSBtc2cu
dHlwZSkKLSAgICAgICAgICAgICYmICh0aGlzLmxldmVsID09PSBtc2cubGV2ZWwpCi0gICAgICAg
ICAgICAmJiAodGhpcy5saW5lID09PSBtc2cubGluZSkKLSAgICAgICAgICAgICYmICh0aGlzLnVy
bCA9PT0gbXNnLnVybCkKLSAgICAgICAgICAgICYmICh0aGlzLm1lc3NhZ2UgPT09IG1zZy5tZXNz
YWdlKQotICAgICAgICAgICAgJiYgKHRoaXMuX3JlcXVlc3RJZCA9PT0gbXNnLl9yZXF1ZXN0SWQp
OwotICAgIH0KLX0KLQotLy8gTm90ZTogS2VlcCB0aGVzZSBjb25zdGFudHMgaW4gc3luYyB3aXRo
IHRoZSBvbmVzIGluIENvbnNvbGUuaAotV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3Nh
Z2VTb3VyY2UgPSB7Ci0gICAgSFRNTDogMCwKLSAgICBXTUw6IDEsCi0gICAgWE1MOiAyLAotICAg
IEpTOiAzLAotICAgIENTUzogNCwKLSAgICBPdGhlcjogNQotfQotCi1XZWJJbnNwZWN0b3IuQ29u
c29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUgPSB7Ci0gICAgTG9nOiAwLAotICAgIE9iamVjdDogMSwK
LSAgICBUcmFjZTogMiwKLSAgICBTdGFydEdyb3VwOiAzLAotICAgIFN0YXJ0R3JvdXBDb2xsYXBz
ZWQ6IDQsCi0gICAgRW5kR3JvdXA6IDUsCi0gICAgQXNzZXJ0OiA2LAotICAgIFVuY2F1Z2h0RXhj
ZXB0aW9uOiA3LAotICAgIE5ldHdvcmtFcnJvcjo4LAotICAgIFJlc3VsdDogOQotfQotCi1XZWJJ
bnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZUxldmVsID0gewotICAgIFRpcDogMCwKLSAg
ICBMb2c6IDEsCi0gICAgV2FybmluZzogMiwKLSAgICBFcnJvcjogMywKLSAgICBEZWJ1ZzogNAot
fQotCi1XZWJJbnNwZWN0b3IuQ29uc29sZUNvbW1hbmQgPSBmdW5jdGlvbihjb21tYW5kKQotewot
ICAgIHRoaXMuY29tbWFuZCA9IGNvbW1hbmQ7Ci19Ci0KLVdlYkluc3BlY3Rvci5Db25zb2xlQ29t
bWFuZC5wcm90b3R5cGUgPSB7Ci0gICAgdG9NZXNzYWdlRWxlbWVudDogZnVuY3Rpb24oKQotICAg
IHsKLSAgICAgICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsK
LSAgICAgICAgZWxlbWVudC5jb21tYW5kID0gdGhpczsKLSAgICAgICAgZWxlbWVudC5jbGFzc05h
bWUgPSAiY29uc29sZS11c2VyLWNvbW1hbmQiOwotCi0gICAgICAgIHZhciBjb21tYW5kVGV4dEVs
ZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7Ci0gICAgICAgIGNvbW1hbmRU
ZXh0RWxlbWVudC5jbGFzc05hbWUgPSAiY29uc29sZS1tZXNzYWdlLXRleHQgc291cmNlLWNvZGUi
OwotICAgICAgICBjb21tYW5kVGV4dEVsZW1lbnQudGV4dENvbnRlbnQgPSB0aGlzLmNvbW1hbmQ7
Ci0gICAgICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQoY29tbWFuZFRleHRFbGVtZW50KTsKLQotICAg
ICAgICByZXR1cm4gZWxlbWVudDsKLSAgICB9Ci19Ci0KLVdlYkluc3BlY3Rvci5Db25zb2xlQ29t
bWFuZFJlc3VsdCA9IGZ1bmN0aW9uKHJlc3VsdCwgb3JpZ2luYXRpbmdDb21tYW5kKQotewotICAg
IHZhciBsZXZlbCA9IChyZXN1bHQuaXNFcnJvcigpID8gV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNz
YWdlLk1lc3NhZ2VMZXZlbC5FcnJvciA6IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNz
YWdlTGV2ZWwuTG9nKTsKLSAgICB0aGlzLm9yaWdpbmF0aW5nQ29tbWFuZCA9IG9yaWdpbmF0aW5n
Q29tbWFuZDsKLSAgICBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuY2FsbCh0aGlzLCBXZWJJ
bnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVNvdXJjZS5KUywgV2ViSW5zcGVjdG9yLkNv
bnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBlLlJlc3VsdCwgbGV2ZWwsIC0xLCBudWxsLCAxLCBudWxs
LCBbcmVzdWx0XSk7Ci19Ci0KLVdlYkluc3BlY3Rvci5Db25zb2xlQ29tbWFuZFJlc3VsdC5wcm90
b3R5cGUgPSB7Ci0gICAgdG9NZXNzYWdlRWxlbWVudDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAg
ICAgdmFyIGVsZW1lbnQgPSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UucHJvdG90eXBlLnRv
TWVzc2FnZUVsZW1lbnQuY2FsbCh0aGlzKTsKLSAgICAgICAgZWxlbWVudC5hZGRTdHlsZUNsYXNz
KCJjb25zb2xlLXVzZXItY29tbWFuZC1yZXN1bHQiKTsKLSAgICAgICAgcmV0dXJuIGVsZW1lbnQ7
Ci0gICAgfQotfQotCi1XZWJJbnNwZWN0b3IuQ29uc29sZUNvbW1hbmRSZXN1bHQucHJvdG90eXBl
Ll9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5wcm90b3R5cGU7Ci0KLVdl
Ykluc3BlY3Rvci5Db25zb2xlR3JvdXAgPSBmdW5jdGlvbihwYXJlbnRHcm91cCkKLXsKLSAgICB0
aGlzLnBhcmVudEdyb3VwID0gcGFyZW50R3JvdXA7Ci0KLSAgICB2YXIgZWxlbWVudCA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotICAgIGVsZW1lbnQuY2xhc3NOYW1lID0gImNvbnNv
bGUtZ3JvdXAiOwotICAgIGVsZW1lbnQuZ3JvdXAgPSB0aGlzOwotICAgIHRoaXMuZWxlbWVudCA9
IGVsZW1lbnQ7Ci0KLSAgICB2YXIgbWVzc2FnZXNFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgiZGl2Iik7Ci0gICAgbWVzc2FnZXNFbGVtZW50LmNsYXNzTmFtZSA9ICJjb25zb2xlLWdy
b3VwLW1lc3NhZ2VzIjsKLSAgICBlbGVtZW50LmFwcGVuZENoaWxkKG1lc3NhZ2VzRWxlbWVudCk7
Ci0gICAgdGhpcy5tZXNzYWdlc0VsZW1lbnQgPSBtZXNzYWdlc0VsZW1lbnQ7Ci19Ci0KLVdlYklu
c3BlY3Rvci5Db25zb2xlR3JvdXAucHJvdG90eXBlID0gewotICAgIGFkZE1lc3NhZ2U6IGZ1bmN0
aW9uKG1zZykKLSAgICB7Ci0gICAgICAgIHZhciBlbGVtZW50ID0gbXNnLnRvTWVzc2FnZUVsZW1l
bnQoKTsKLQotICAgICAgICBpZiAobXNnLnR5cGUgPT09IFdlYkluc3BlY3Rvci5Db25zb2xlTWVz
c2FnZS5NZXNzYWdlVHlwZS5TdGFydEdyb3VwIHx8IG1zZy50eXBlID09PSBXZWJJbnNwZWN0b3Iu
Q29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuU3RhcnRHcm91cENvbGxhcHNlZCkgewotICAgICAg
ICAgICAgdGhpcy5tZXNzYWdlc0VsZW1lbnQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZWxlbWVu
dCwgdGhpcy5tZXNzYWdlc0VsZW1lbnQpOwotICAgICAgICAgICAgZWxlbWVudC5hZGRFdmVudExp
c3RlbmVyKCJjbGljayIsIHRoaXMuX3RpdGxlQ2xpY2tlZC5iaW5kKHRoaXMpLCBmYWxzZSk7Ci0g
ICAgICAgICAgICB2YXIgZ3JvdXBFbGVtZW50ID0gZWxlbWVudC5lbmNsb3NpbmdOb2RlT3JTZWxm
V2l0aENsYXNzKCJjb25zb2xlLWdyb3VwIik7Ci0gICAgICAgICAgICBpZiAoZ3JvdXBFbGVtZW50
ICYmIG1zZy50eXBlID09PSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUu
U3RhcnRHcm91cENvbGxhcHNlZCkKLSAgICAgICAgICAgICAgICBncm91cEVsZW1lbnQuYWRkU3R5
bGVDbGFzcygiY29sbGFwc2VkIik7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgdGhpcy5t
ZXNzYWdlc0VsZW1lbnQuYXBwZW5kQ2hpbGQoZWxlbWVudCk7Ci0KLSAgICAgICAgaWYgKGVsZW1l
bnQucHJldmlvdXNTaWJsaW5nICYmIG1zZy5vcmlnaW5hdGluZ0NvbW1hbmQgJiYgZWxlbWVudC5w
cmV2aW91c1NpYmxpbmcuY29tbWFuZCA9PT0gbXNnLm9yaWdpbmF0aW5nQ29tbWFuZCkKLSAgICAg
ICAgICAgIGVsZW1lbnQucHJldmlvdXNTaWJsaW5nLmFkZFN0eWxlQ2xhc3MoImNvbnNvbGUtYWRq
YWNlbnQtdXNlci1jb21tYW5kLXJlc3VsdCIpOwotICAgIH0sCi0KLSAgICBfdGl0bGVDbGlja2Vk
OiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIHZhciBncm91cFRpdGxlRWxlbWVudCA9
IGV2ZW50LnRhcmdldC5lbmNsb3NpbmdOb2RlT3JTZWxmV2l0aENsYXNzKCJjb25zb2xlLWdyb3Vw
LXRpdGxlIik7Ci0gICAgICAgIGlmIChncm91cFRpdGxlRWxlbWVudCkgewotICAgICAgICAgICAg
dmFyIGdyb3VwRWxlbWVudCA9IGdyb3VwVGl0bGVFbGVtZW50LmVuY2xvc2luZ05vZGVPclNlbGZX
aXRoQ2xhc3MoImNvbnNvbGUtZ3JvdXAiKTsKLSAgICAgICAgICAgIGlmIChncm91cEVsZW1lbnQp
Ci0gICAgICAgICAgICAgICAgaWYgKGdyb3VwRWxlbWVudC5oYXNTdHlsZUNsYXNzKCJjb2xsYXBz
ZWQiKSkKLSAgICAgICAgICAgICAgICAgICAgZ3JvdXBFbGVtZW50LnJlbW92ZVN0eWxlQ2xhc3Mo
ImNvbGxhcHNlZCIpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAg
Z3JvdXBFbGVtZW50LmFkZFN0eWxlQ2xhc3MoImNvbGxhcHNlZCIpOwotICAgICAgICAgICAgZ3Jv
dXBUaXRsZUVsZW1lbnQuc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCh0cnVlKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOwotICAgICAgICBldmVudC5wcmV2ZW50
RGVmYXVsdCgpOwotICAgIH0KLX0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9EcmF3ZXIuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL0RyYXdlci5qcwppbmRleCA0ODYxYzkwLi5lNWJlZDJmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RyYXdlci5qcworKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RyYXdlci5qcwpAQCAtNjEsNyArNjEsNyBAQCBXZWJJbnNw
ZWN0b3IuRHJhd2VyLnByb3RvdHlwZSA9IHsKIAogICAgICAgICB2YXIgZmlyc3RUaW1lID0gIXRo
aXMuX3Zpc2libGVWaWV3OwogICAgICAgICBpZiAodGhpcy5fdmlzaWJsZVZpZXcpCi0gICAgICAg
ICAgICB0aGlzLl92aXNpYmxlVmlldy5oaWRlKCk7CisgICAgICAgICAgICB0aGlzLl92aXNpYmxl
Vmlldy5oaWRlSW5EcmF3ZXIoKTsKIAogICAgICAgICB0aGlzLl92aXNpYmxlVmlldyA9IHg7CiAK
QEAgLTY5LDcgKzY5LDcgQEAgV2ViSW5zcGVjdG9yLkRyYXdlci5wcm90b3R5cGUgPSB7CiAgICAg
ICAgICAgICB0aGlzLl9zYWZlbHlSZW1vdmVDaGlsZHJlbigpOwogICAgICAgICAgICAgdGhpcy5f
dmlld1N0YXR1c0Jhci5yZW1vdmVDaGlsZHJlbigpOyAvLyBvcHRpbWl6ZSB0aGlzPyBjYWxsIG9s
ZC5kZXRhY2goKQogICAgICAgICAgICAgeC5hdHRhY2godGhpcy5lbGVtZW50LCB0aGlzLl92aWV3
U3RhdHVzQmFyKTsKLSAgICAgICAgICAgIHguc2hvdygpOworICAgICAgICAgICAgeC5zaG93SW5E
cmF3ZXIoKTsKICAgICAgICAgICAgIHRoaXMudmlzaWJsZSA9IHRydWU7CiAgICAgICAgIH0KICAg
ICB9LApAQCAtOTIsNyArOTIsNyBAQCBXZWJJbnNwZWN0b3IuRHJhd2VyLnByb3RvdHlwZSA9IHsK
ICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBpZiAodGhpcy52aXNpYmxlVmlldykKLSAg
ICAgICAgICAgIHRoaXMudmlzaWJsZVZpZXcuc2hvdygpOworICAgICAgICAgICAgdGhpcy52aXNp
YmxlVmlldy5zaG93SW5EcmF3ZXIoKTsKIAogICAgICAgICBXZWJJbnNwZWN0b3IuVmlldy5wcm90
b3R5cGUuc2hvdy5jYWxsKHRoaXMpOwogCkBAIC0xMjQsOCArMTI0LDggQEAgV2ViSW5zcGVjdG9y
LkRyYXdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICgidXBkYXRl
U3RhdHVzQmFySXRlbXMiIGluIFdlYkluc3BlY3Rvci5jdXJyZW50UGFuZWwpCiAgICAgICAgICAg
ICAgICAgV2ViSW5zcGVjdG9yLmN1cnJlbnRQYW5lbC51cGRhdGVTdGF0dXNCYXJJdGVtcygpOwot
ICAgICAgICAgICAgaWYgKHRoaXMudmlzaWJsZVZpZXcuYWZ0ZXJTaG93KQotICAgICAgICAgICAg
ICAgIHRoaXMudmlzaWJsZVZpZXcuYWZ0ZXJTaG93KCk7CisgICAgICAgICAgICBpZiAodGhpcy52
aXNpYmxlVmlldy5hZnRlclNob3dJbkRyYXdlcikKKyAgICAgICAgICAgICAgICB0aGlzLnZpc2li
bGVWaWV3LmFmdGVyU2hvd0luRHJhd2VyKCk7CiAgICAgICAgICAgICBkZWxldGUgdGhpcy5fYW5p
bWF0aW5nOwogICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2N1cnJlbnRBbmltYXRpb247CiAgICAg
ICAgICAgICB0aGlzLnN0YXRlID0gKHRoaXMuZnVsbFBhbmVsID8gV2ViSW5zcGVjdG9yLkRyYXdl
ci5TdGF0ZS5GdWxsIDogV2ViSW5zcGVjdG9yLkRyYXdlci5TdGF0ZS5WYXJpYWJsZSk7CkBAIC0x
NDQsNyArMTQ0LDcgQEAgV2ViSW5zcGVjdG9yLkRyYXdlci5wcm90b3R5cGUgPSB7CiAgICAgICAg
IFdlYkluc3BlY3Rvci5WaWV3LnByb3RvdHlwZS5oaWRlLmNhbGwodGhpcyk7CiAKICAgICAgICAg
aWYgKHRoaXMudmlzaWJsZVZpZXcpCi0gICAgICAgICAgICB0aGlzLnZpc2libGVWaWV3LmhpZGUo
KTsKKyAgICAgICAgICAgIHRoaXMudmlzaWJsZVZpZXcuaGlkZUluRHJhd2VyKCk7CiAKICAgICAg
ICAgdGhpcy5fYW5pbWF0aW5nID0gdHJ1ZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9QYW5lbC5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvUGFuZWwuanMKaW5kZXggNGM0MmE2MC4uNDJkN2RkOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9QYW5lbC5qcworKysgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1BhbmVsLmpzCkBAIC0yNiw5ICsyNiw5IEBACiAgKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgogICovCiAKLVdlYkluc3BlY3Rvci5QYW5lbCA9IGZ1bmN0aW9uKG5hbWUpCitXZWJJ
bnNwZWN0b3IuUGFuZWwgPSBmdW5jdGlvbihuYW1lLCBlbGVtZW50KQogewotICAgIFdlYkluc3Bl
Y3Rvci5WaWV3LmNhbGwodGhpcyk7CisgICAgV2ViSW5zcGVjdG9yLlZpZXcuY2FsbCh0aGlzLCBl
bGVtZW50KTsKIAogICAgIHRoaXMuZWxlbWVudC5hZGRTdHlsZUNsYXNzKCJwYW5lbCIpOwogICAg
IHRoaXMuZWxlbWVudC5hZGRTdHlsZUNsYXNzKG5hbWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9XZWJLaXQucXJjIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9XZWJLaXQucXJjCmluZGV4IGJiZGZmOWMuLjkyZmRjNTEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvV2ViS2l0LnFyYworKysg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1dlYktpdC5xcmMKQEAgLTE2LDcg
KzE2LDcgQEAKICAgICA8ZmlsZT5DaGVja2JveC5qczwvZmlsZT4KICAgICA8ZmlsZT5Db2xvci5q
czwvZmlsZT4KICAgICA8ZmlsZT5Db25zb2xlUGFuZWwuanM8L2ZpbGU+Ci0gICAgPGZpbGU+Q29u
c29sZVZpZXcuanM8L2ZpbGU+CisgICAgPGZpbGU+Q29uc29sZU1lc3NhZ2UuanM8L2ZpbGU+CiAg
ICAgPGZpbGU+Q29udGV4dE1lbnUuanM8L2ZpbGU+CiAgICAgPGZpbGU+Q29va2llSXRlbXNWaWV3
LmpzPC9maWxlPgogICAgIDxmaWxlPkNvb2tpZVBhcnNlci5qczwvZmlsZT4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWwgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5odG1sCmluZGV4IDU1YjMy
ZmQuLmE1MDc0OTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvaW5zcGVjdG9yLmh0bWwKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9pbnNwZWN0b3IuaHRtbApAQCAtNTcsNyArNTcsNyBAQCBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICAgIDxzY3JpcHQg
dHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IlBsZWFzZVdhaXRNZXNzYWdlLmpzIj48L3Njcmlw
dD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJWaWV3LmpzIj48L3Nj
cmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJEcmF3ZXIuanMi
Pjwvc2NyaXB0PgotICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IkNvbnNv
bGVWaWV3LmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIg
c3JjPSJDb25zb2xlTWVzc2FnZS5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0
L2phdmFzY3JpcHQiIHNyYz0iUGFuZWwuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0i
dGV4dC9qYXZhc2NyaXB0IiBzcmM9IlRpbWVsaW5lR3JpZC5qcyI+PC9zY3JpcHQ+ICAgIAogICAg
IDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IlJlc291cmNlLmpzIj48L3Njcmlw
dD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVj
dG9yLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMK
aW5kZXggNjI4NjhlOS4uMjVjOWM3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9pbnNwZWN0b3IuanMKQEAgLTIzMyw3ICsyMzMsNyBAQCB2YXIgV2ViSW5zcGVj
dG9yID0gewogICAgICAgICBpZiAoaGlkZGVuUGFuZWxzLmluZGV4T2YoImF1ZGl0cyIpID09PSAt
MSkKICAgICAgICAgICAgIHRoaXMucGFuZWxzLmF1ZGl0cyA9IG5ldyBXZWJJbnNwZWN0b3IuQXVk
aXRzUGFuZWwoKTsKICAgICAgICAgaWYgKGhpZGRlblBhbmVscy5pbmRleE9mKCJjb25zb2xlIikg
PT09IC0xKQotICAgICAgICAgICAgdGhpcy5wYW5lbHMuY29uc29sZSA9IG5ldyBXZWJJbnNwZWN0
b3IuQ29uc29sZVBhbmVsKCk7CisgICAgICAgICAgICB0aGlzLnBhbmVscy5jb25zb2xlID0gdGhp
cy5jb25zb2xlOwogICAgIH0sCiAKICAgICBnZXQgYXR0YWNoZWQoKQpAQCAtNDY5LDcgKzQ2OSw3
IEBAIFdlYkluc3BlY3Rvci5kb0xvYWRlZERvbmUgPSBmdW5jdGlvbigpCiAgICAgV2ViSW5zcGVj
dG9yLnNob3J0Y3V0c0hlbHAuc2VjdGlvbihXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkVsZW1lbnRz
IFBhbmVsIikpOwogCiAgICAgdGhpcy5kcmF3ZXIgPSBuZXcgV2ViSW5zcGVjdG9yLkRyYXdlcigp
OwotICAgIHRoaXMuY29uc29sZSA9IG5ldyBXZWJJbnNwZWN0b3IuQ29uc29sZVZpZXcodGhpcy5k
cmF3ZXIpOworICAgIHRoaXMuY29uc29sZSA9IG5ldyBXZWJJbnNwZWN0b3IuQ29uc29sZVBhbmVs
KHRoaXMuZHJhd2VyKTsKICAgICB0aGlzLmRyYXdlci52aXNpYmxlVmlldyA9IHRoaXMuY29uc29s
ZTsKICAgICB0aGlzLnJlc291cmNlVHJlZU1vZGVsID0gbmV3IFdlYkluc3BlY3Rvci5SZXNvdXJj
ZVRyZWVNb2RlbCgpOwogICAgIHRoaXMubmV0d29ya01hbmFnZXIgPSBuZXcgV2ViSW5zcGVjdG9y
Lk5ldHdvcmtNYW5hZ2VyKHRoaXMucmVzb3VyY2VUcmVlTW9kZWwpOwo=
</data>
<flag name="review"
          id="74525"
          type_id="1"
          status="-"
          setter="pfeldman"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>82825</attachid>
            <date>2011-02-17 09:50:59 -0800</date>
            <delta_ts>2011-04-29 05:09:40 -0700</delta_ts>
            <desc>Diff between old ConsoleView and new ConsolePanel</desc>
            <filename>patch2</filename>
            <type>text/plain</type>
            <size>4322</size>
            <attacher name="Pavel Podivilov">podivilov</attacher>
            
              <data encoding="base64">Y29tbWl0IGEyMzc0YmQ1YWFjYmVhNDYxOGY4ZDRhNzRmMmYyMDFiMTZiOGM2NzAKQXV0aG9yOiBQ
YXZlbCBQb2Rpdmlsb3YgPHBvZGl2aWxvdkBjaHJvbWl1bS5vcmc+CkRhdGU6ICAgRnJpIEZlYiA0
IDE1OjM3OjI5IDIwMTEgKzAzMDAKCiAgICAuCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9Db25zb2xlVmlldy5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvQ29uc29sZVZpZXcuanMKaW5kZXggNDYzMjllYi4uNDFkYWYwZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Db25zb2xlVmlldy5q
cworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NvbnNvbGVWaWV3Lmpz
CkBAIC0yOSw5ICsyOSw5IEBACiAKIGNvbnN0IEV4cHJlc3Npb25TdG9wQ2hhcmFjdGVycyA9ICIg
PTpbKHs7LCErLSovJnxePD4iOwogCi1XZWJJbnNwZWN0b3IuQ29uc29sZVZpZXcgPSBmdW5jdGlv
bihkcmF3ZXIpCitXZWJJbnNwZWN0b3IuQ29uc29sZVBhbmVsID0gZnVuY3Rpb24oZHJhd2VyKQog
ewotICAgIFdlYkluc3BlY3Rvci5WaWV3LmNhbGwodGhpcywgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoImNvbnNvbGUtdmlldyIpKTsKKyAgICBXZWJJbnNwZWN0b3IuUGFuZWwuY2FsbCh0aGlzLCAi
Y29uc29sZSIsIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb25zb2xlLXZpZXciKSk7CiAKICAg
ICB0aGlzLm1lc3NhZ2VzID0gW107CiAgICAgdGhpcy5kcmF3ZXIgPSBkcmF3ZXI7CkBAIC0xMDEs
NyArMTAxLDcgQEAgV2ViSW5zcGVjdG9yLkNvbnNvbGVWaWV3ID0gZnVuY3Rpb24oZHJhd2VyKQog
ICAgIHRoaXMuX3JlZ2lzdGVyQ29uc29sZURvbWFpbkRpc3BhdGNoZXIoKTsKIH0KIAotV2ViSW5z
cGVjdG9yLkNvbnNvbGVWaWV3LnByb3RvdHlwZSA9IHsKK1dlYkluc3BlY3Rvci5Db25zb2xlUGFu
ZWwucHJvdG90eXBlID0gewogICAgIF9yZWdpc3RlckNvbnNvbGVEb21haW5EaXNwYXRjaGVyOiBm
dW5jdGlvbigpIHsKICAgICAgICAgdmFyIGNvbnNvbGUgPSB0aGlzOwogICAgICAgICB2YXIgZGlz
cGF0Y2hlciA9IHsKQEAgLTIzNCwyMCArMjM0LDczIEBAIFdlYkluc3BlY3Rvci5Db25zb2xlVmll
dy5wcm90b3R5cGUgPSB7CiAgICAgICAgIHN0YXR1c0JhckVsZW1lbnQuYXBwZW5kQ2hpbGQodGhp
cy5maWx0ZXJCYXJFbGVtZW50KTsKICAgICB9LAogCisgICAgZ2V0IHRvb2xiYXJJdGVtTGFiZWwo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5VSVN0cmluZygiQ29uc29sZSIp
OworICAgIH0sCisKICAgICBzaG93OiBmdW5jdGlvbigpCiAgICAgeworICAgICAgICBXZWJJbnNw
ZWN0b3IuUGFuZWwucHJvdG90eXBlLnNob3cuY2FsbCh0aGlzKTsKKworICAgICAgICB0aGlzLl9w
cmV2aW91c0NvbnNvbGVTdGF0ZSA9IFdlYkluc3BlY3Rvci5kcmF3ZXIuc3RhdGU7CisgICAgICAg
IFdlYkluc3BlY3Rvci5kcmF3ZXIuZW50ZXJQYW5lbE1vZGUoKTsKKyAgICAgICAgV2ViSW5zcGVj
dG9yLnNob3dDb25zb2xlKCk7CisKKyAgICAgICAgLy8gTW92ZSB0aGUgc2NvcGUgYmFyIHRvIHRo
ZSB0b3Agb2YgdGhlIG1lc3NhZ2VzLCBsaWtlIHRoZSByZXNvdXJjZXMgZmlsdGVyLgorICAgICAg
ICB2YXIgc2NvcGVCYXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29uc29sZS1maWx0ZXIi
KTsKKyAgICAgICAgdmFyIGNvbnNvbGVNZXNzYWdlcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJjb25zb2xlLW1lc3NhZ2VzIik7CisKKyAgICAgICAgc2NvcGVCYXIucGFyZW50Tm9kZS5yZW1v
dmVDaGlsZChzY29wZUJhcik7CisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb25z
b2xlLXZpZXciKS5pbnNlcnRCZWZvcmUoc2NvcGVCYXIsIGNvbnNvbGVNZXNzYWdlcyk7CisKKyAg
ICAgICAgLy8gVXBkYXRlIHN0eWxlcywgYW5kIGdpdmUgY29uc29sZS1tZXNzYWdlcyBhIHRvcCBt
YXJnaW4gc28gaXQgZG9lc24ndCBvdmVyd3JpdGUgdGhlIHNjb3BlIGJhci4KKyAgICAgICAgc2Nv
cGVCYXIuYWRkU3R5bGVDbGFzcygiY29uc29sZS1maWx0ZXItdG9wIik7CisgICAgICAgIHNjb3Bl
QmFyLnJlbW92ZVN0eWxlQ2xhc3MoInN0YXR1cy1iYXItaXRlbSIpOworCisgICAgICAgIGNvbnNv
bGVNZXNzYWdlcy5hZGRTdHlsZUNsYXNzKCJjb25zb2xlLWZpbHRlci10b3AiKTsKKyAgICB9LAor
CisgICAgaGlkZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuX3ByZXZpb3Vz
Q29uc29sZVN0YXRlID09PSBXZWJJbnNwZWN0b3IuRHJhd2VyLlN0YXRlLkhpZGRlbikgeworICAg
ICAgICAgICAgV2ViSW5zcGVjdG9yLlBhbmVsLnByb3RvdHlwZS5oaWRlLmNhbGwodGhpcyk7Cisg
ICAgICAgICAgICBXZWJJbnNwZWN0b3IuZHJhd2VyLmltbWVkaWF0ZWx5RXhpdFBhbmVsTW9kZSgp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKCJfdG9vbGJhckl0ZW0iIGluIHRo
aXMpCisgICAgICAgICAgICAgICAgdGhpcy5fdG9vbGJhckl0ZW0ucmVtb3ZlU3R5bGVDbGFzcygi
dG9nZ2xlZC1vbiIpOworICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmRyYXdlci5leGl0UGFuZWxN
b2RlKCk7CisgICAgICAgIH0KKyAgICAgICAgZGVsZXRlIHRoaXMuX3ByZXZpb3VzQ29uc29sZVN0
YXRlOworCisgICAgICAgIC8vIE1vdmUgdGhlIHNjb3BlIGJhciBiYWNrIHRvIHRoZSBib3R0b20g
YmFyLCBuZXh0IHRvIENsZWFyIENvbnNvbGUuCisgICAgICAgIHZhciBzY29wZUJhciA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJjb25zb2xlLWZpbHRlciIpOworCisgICAgICAgIHNjb3BlQmFy
LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc2NvcGVCYXIpOworICAgICAgICBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgib3RoZXItZHJhd2VyLXN0YXR1cy1iYXItaXRlbXMiKS5hcHBlbmRDaGlsZChz
Y29wZUJhcik7CisKKyAgICAgICAgLy8gVXBkYXRlIHN0eWxlcywgYW5kIHJlbW92ZSB0aGUgdG9w
IG1hcmdpbiBvbiBjb25zb2xlLW1lc3NhZ2VzLgorICAgICAgICBzY29wZUJhci5yZW1vdmVTdHls
ZUNsYXNzKCJjb25zb2xlLWZpbHRlci10b3AiKTsKKyAgICAgICAgc2NvcGVCYXIuYWRkU3R5bGVD
bGFzcygic3RhdHVzLWJhci1pdGVtIik7CisKKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoImNvbnNvbGUtbWVzc2FnZXMiKS5yZW1vdmVTdHlsZUNsYXNzKCJjb25zb2xlLWZpbHRlci10
b3AiKTsKKyAgICB9LAorCisgICAgc2hvd0luRHJhd2VyOiBmdW5jdGlvbigpCisgICAgeworICAg
ICAgICBXZWJJbnNwZWN0b3IuVmlldy5wcm90b3R5cGUuc2hvdy5jYWxsKHRoaXMpOwogICAgICAg
ICB0aGlzLnRvZ2dsZUNvbnNvbGVCdXR0b24uYWRkU3R5bGVDbGFzcygidG9nZ2xlZC1vbiIpOwog
ICAgICAgICB0aGlzLnRvZ2dsZUNvbnNvbGVCdXR0b24udGl0bGUgPSBXZWJJbnNwZWN0b3IuVUlT
dHJpbmcoIkhpZGUgY29uc29sZS4iKTsKICAgICAgICAgaWYgKCF0aGlzLnByb21wdC5pc0NhcmV0
SW5zaWRlUHJvbXB0KCkpCiAgICAgICAgICAgICB0aGlzLnByb21wdC5tb3ZlQ2FyZXRUb0VuZE9m
UHJvbXB0KCk7CiAgICAgfSwKIAotICAgIGFmdGVyU2hvdzogZnVuY3Rpb24oKQorICAgIGFmdGVy
U2hvd0luRHJhd2VyOiBmdW5jdGlvbigpCiAgICAgewogICAgICAgICBXZWJJbnNwZWN0b3IuY3Vy
cmVudEZvY3VzRWxlbWVudCA9IHRoaXMucHJvbXB0RWxlbWVudDsKICAgICB9LAogCi0gICAgaGlk
ZTogZnVuY3Rpb24oKQorICAgIGhpZGVJbkRyYXdlcjogZnVuY3Rpb24oKQogICAgIHsKICAgICAg
ICAgdGhpcy50b2dnbGVDb25zb2xlQnV0dG9uLnJlbW92ZVN0eWxlQ2xhc3MoInRvZ2dsZWQtb24i
KTsKICAgICAgICAgdGhpcy50b2dnbGVDb25zb2xlQnV0dG9uLnRpdGxlID0gV2ViSW5zcGVjdG9y
LlVJU3RyaW5nKCJTaG93IGNvbnNvbGUuIik7CkBAIC02NTgsNyArNzExLDcgQEAgV2ViSW5zcGVj
dG9yLkNvbnNvbGVWaWV3LnByb3RvdHlwZSA9IHsKICAgICB9CiB9CiAKLVdlYkluc3BlY3Rvci5D
b25zb2xlVmlldy5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLlZpZXcucHJvdG90
eXBlOworV2ViSW5zcGVjdG9yLkNvbnNvbGVQYW5lbC5wcm90b3R5cGUuX19wcm90b19fID0gV2Vi
SW5zcGVjdG9yLlBhbmVsLnByb3RvdHlwZTsKIAogV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdl
ID0gZnVuY3Rpb24oc291cmNlLCB0eXBlLCBsZXZlbCwgbGluZSwgdXJsLCByZXBlYXRDb3VudCwg
bWVzc2FnZSwgcGFyYW1ldGVycywgc3RhY2tUcmFjZSwgcmVxdWVzdElkKQogewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>91666</attachid>
            <date>2011-04-29 05:09:40 -0700</date>
            <delta_ts>2011-05-04 07:25:58 -0700</delta_ts>
            <desc>Patch.</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>10502</size>
            <attacher name="Pavel Podivilov">podivilov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBjYTFjMWI5Li5iOGI4MzlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjYg
QEAKKzIwMTEtMDQtMjkgIFBhdmVsIFBvZGl2aWxvdiAgPHBvZGl2aWxvdkBjaHJvbWl1bS5vcmc+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIElu
c3BlY3RvcjogbWVyZ2UgQ29uc29sZVZpZXcgaW50byBDb25zb2xlUGFuZWwuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NDY3MAorCisgICAgICAgICog
aW5zcGVjdG9yL2Zyb250LWVuZC9Db25zb2xlVmlldy5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5Db25zb2xlUGFuZWwucHJvdG90eXBlLmdldCB0b29sYmFySXRlbUxhYmVsKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5Db25zb2xlUGFuZWwucHJvdG90eXBlLnNob3cpOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLkNvbnNvbGVQYW5lbC5wcm90b3R5cGUuaGlkZSk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuQ29uc29sZVBhbmVsLnByb3RvdHlwZS5zaG93SW5EcmF3ZXIpOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLkNvbnNvbGVQYW5lbC5wcm90b3R5cGUuYWZ0ZXJTaG93SW5EcmF3ZXIpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLkNvbnNvbGVQYW5lbC5wcm90b3R5cGUuaGlkZUluRHJhd2VyKToK
KyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0RyYXdlci5qczoKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5EcmF3ZXIucHJvdG90eXBlLnNldCB2aXNpYmxlVmlldyk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuRHJhd2VyLnByb3RvdHlwZS5zaG93LmFuaW1hdGlvbkZpbmlzaGVkKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5EcmF3ZXIucHJvdG90eXBlLnNob3cpOgorICAgICAgICAqIGluc3Bl
Y3Rvci9mcm9udC1lbmQvUGFuZWwuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUGFuZWwpOgor
ICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLl9jcmVhdGVQYW5lbHMpOgorCiAyMDExLTA0LTI5ICBQYXZlbCBGZWxkbWFuICA8
cGZlbGRtYW5AZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBZdXJ5IFNlbWlraGF0
c2t5LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Db25z
b2xlVmlldy5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ29uc29sZVZp
ZXcuanMKaW5kZXggMDU4ZDk1Zi4uZDVjYzQyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9Db25zb2xlVmlldy5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL0NvbnNvbGVWaWV3LmpzCkBAIC0yOSw5ICsyOSw5IEBACiAKIGNv
bnN0IEV4cHJlc3Npb25TdG9wQ2hhcmFjdGVycyA9ICIgPTpbKHs7LCErLSovJnxePD4iOwogCi1X
ZWJJbnNwZWN0b3IuQ29uc29sZVZpZXcgPSBmdW5jdGlvbihkcmF3ZXIpCitXZWJJbnNwZWN0b3Iu
Q29uc29sZVBhbmVsID0gZnVuY3Rpb24oZHJhd2VyKQogewotICAgIFdlYkluc3BlY3Rvci5WaWV3
LmNhbGwodGhpcywgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnNvbGUtdmlldyIpKTsKKyAg
ICBXZWJJbnNwZWN0b3IuUGFuZWwuY2FsbCh0aGlzLCAiY29uc29sZSIsIGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCJjb25zb2xlLXZpZXciKSk7CiAKICAgICB0aGlzLm1lc3NhZ2VzID0gW107CiAg
ICAgdGhpcy5kcmF3ZXIgPSBkcmF3ZXI7CkBAIC0xMDEsNyArMTAxLDcgQEAgV2ViSW5zcGVjdG9y
LkNvbnNvbGVWaWV3ID0gZnVuY3Rpb24oZHJhd2VyKQogICAgIHRoaXMuX3JlZ2lzdGVyQ29uc29s
ZURvbWFpbkRpc3BhdGNoZXIoKTsKIH0KIAotV2ViSW5zcGVjdG9yLkNvbnNvbGVWaWV3LnByb3Rv
dHlwZSA9IHsKK1dlYkluc3BlY3Rvci5Db25zb2xlUGFuZWwucHJvdG90eXBlID0gewogICAgIF9y
ZWdpc3RlckNvbnNvbGVEb21haW5EaXNwYXRjaGVyOiBmdW5jdGlvbigpIHsKICAgICAgICAgdmFy
IGNvbnNvbGUgPSB0aGlzOwogICAgICAgICB2YXIgZGlzcGF0Y2hlciA9IHsKQEAgLTIzNiwyMCAr
MjM2LDczIEBAIFdlYkluc3BlY3Rvci5Db25zb2xlVmlldy5wcm90b3R5cGUgPSB7CiAgICAgICAg
IHN0YXR1c0JhckVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5maWx0ZXJCYXJFbGVtZW50KTsKICAg
ICB9LAogCisgICAgZ2V0IHRvb2xiYXJJdGVtTGFiZWwoKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IFdlYkluc3BlY3Rvci5VSVN0cmluZygiQ29uc29sZSIpOworICAgIH0sCisKICAgICBzaG93OiBm
dW5jdGlvbigpCiAgICAgeworICAgICAgICBXZWJJbnNwZWN0b3IuUGFuZWwucHJvdG90eXBlLnNo
b3cuY2FsbCh0aGlzKTsKKworICAgICAgICB0aGlzLl9wcmV2aW91c0NvbnNvbGVTdGF0ZSA9IFdl
Ykluc3BlY3Rvci5kcmF3ZXIuc3RhdGU7CisgICAgICAgIFdlYkluc3BlY3Rvci5kcmF3ZXIuZW50
ZXJQYW5lbE1vZGUoKTsKKyAgICAgICAgV2ViSW5zcGVjdG9yLnNob3dDb25zb2xlKCk7CisKKyAg
ICAgICAgLy8gTW92ZSB0aGUgc2NvcGUgYmFyIHRvIHRoZSB0b3Agb2YgdGhlIG1lc3NhZ2VzLCBs
aWtlIHRoZSByZXNvdXJjZXMgZmlsdGVyLgorICAgICAgICB2YXIgc2NvcGVCYXIgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgiY29uc29sZS1maWx0ZXIiKTsKKyAgICAgICAgdmFyIGNvbnNvbGVN
ZXNzYWdlcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb25zb2xlLW1lc3NhZ2VzIik7CisK
KyAgICAgICAgc2NvcGVCYXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzY29wZUJhcik7CisgICAg
ICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb25zb2xlLXZpZXciKS5pbnNlcnRCZWZvcmUo
c2NvcGVCYXIsIGNvbnNvbGVNZXNzYWdlcyk7CisKKyAgICAgICAgLy8gVXBkYXRlIHN0eWxlcywg
YW5kIGdpdmUgY29uc29sZS1tZXNzYWdlcyBhIHRvcCBtYXJnaW4gc28gaXQgZG9lc24ndCBvdmVy
d3JpdGUgdGhlIHNjb3BlIGJhci4KKyAgICAgICAgc2NvcGVCYXIuYWRkU3R5bGVDbGFzcygiY29u
c29sZS1maWx0ZXItdG9wIik7CisgICAgICAgIHNjb3BlQmFyLnJlbW92ZVN0eWxlQ2xhc3MoInN0
YXR1cy1iYXItaXRlbSIpOworCisgICAgICAgIGNvbnNvbGVNZXNzYWdlcy5hZGRTdHlsZUNsYXNz
KCJjb25zb2xlLWZpbHRlci10b3AiKTsKKyAgICB9LAorCisgICAgaGlkZTogZnVuY3Rpb24oKQor
ICAgIHsKKyAgICAgICAgaWYgKHRoaXMuX3ByZXZpb3VzQ29uc29sZVN0YXRlID09PSBXZWJJbnNw
ZWN0b3IuRHJhd2VyLlN0YXRlLkhpZGRlbikgeworICAgICAgICAgICAgV2ViSW5zcGVjdG9yLlBh
bmVsLnByb3RvdHlwZS5oaWRlLmNhbGwodGhpcyk7CisgICAgICAgICAgICBXZWJJbnNwZWN0b3Iu
ZHJhd2VyLmltbWVkaWF0ZWx5RXhpdFBhbmVsTW9kZSgpOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgaWYgKCJfdG9vbGJhckl0ZW0iIGluIHRoaXMpCisgICAgICAgICAgICAgICAgdGhp
cy5fdG9vbGJhckl0ZW0ucmVtb3ZlU3R5bGVDbGFzcygidG9nZ2xlZC1vbiIpOworICAgICAgICAg
ICAgV2ViSW5zcGVjdG9yLmRyYXdlci5leGl0UGFuZWxNb2RlKCk7CisgICAgICAgIH0KKyAgICAg
ICAgZGVsZXRlIHRoaXMuX3ByZXZpb3VzQ29uc29sZVN0YXRlOworCisgICAgICAgIC8vIE1vdmUg
dGhlIHNjb3BlIGJhciBiYWNrIHRvIHRoZSBib3R0b20gYmFyLCBuZXh0IHRvIENsZWFyIENvbnNv
bGUuCisgICAgICAgIHZhciBzY29wZUJhciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb25z
b2xlLWZpbHRlciIpOworCisgICAgICAgIHNjb3BlQmFyLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQo
c2NvcGVCYXIpOworICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgib3RoZXItZHJhd2Vy
LXN0YXR1cy1iYXItaXRlbXMiKS5hcHBlbmRDaGlsZChzY29wZUJhcik7CisKKyAgICAgICAgLy8g
VXBkYXRlIHN0eWxlcywgYW5kIHJlbW92ZSB0aGUgdG9wIG1hcmdpbiBvbiBjb25zb2xlLW1lc3Nh
Z2VzLgorICAgICAgICBzY29wZUJhci5yZW1vdmVTdHlsZUNsYXNzKCJjb25zb2xlLWZpbHRlci10
b3AiKTsKKyAgICAgICAgc2NvcGVCYXIuYWRkU3R5bGVDbGFzcygic3RhdHVzLWJhci1pdGVtIik7
CisKKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnNvbGUtbWVzc2FnZXMiKS5y
ZW1vdmVTdHlsZUNsYXNzKCJjb25zb2xlLWZpbHRlci10b3AiKTsKKyAgICB9LAorCisgICAgc2hv
d0luRHJhd2VyOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBXZWJJbnNwZWN0b3IuVmlldy5w
cm90b3R5cGUuc2hvdy5jYWxsKHRoaXMpOwogICAgICAgICB0aGlzLnRvZ2dsZUNvbnNvbGVCdXR0
b24uYWRkU3R5bGVDbGFzcygidG9nZ2xlZC1vbiIpOwogICAgICAgICB0aGlzLnRvZ2dsZUNvbnNv
bGVCdXR0b24udGl0bGUgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkhpZGUgY29uc29sZS4iKTsK
ICAgICAgICAgaWYgKCF0aGlzLnByb21wdC5pc0NhcmV0SW5zaWRlUHJvbXB0KCkpCiAgICAgICAg
ICAgICB0aGlzLnByb21wdC5tb3ZlQ2FyZXRUb0VuZE9mUHJvbXB0KCk7CiAgICAgfSwKIAotICAg
IGFmdGVyU2hvdzogZnVuY3Rpb24oKQorICAgIGFmdGVyU2hvd0luRHJhd2VyOiBmdW5jdGlvbigp
CiAgICAgewogICAgICAgICBXZWJJbnNwZWN0b3IuY3VycmVudEZvY3VzRWxlbWVudCA9IHRoaXMu
cHJvbXB0RWxlbWVudDsKICAgICB9LAogCi0gICAgaGlkZTogZnVuY3Rpb24oKQorICAgIGhpZGVJ
bkRyYXdlcjogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgdGhpcy50b2dnbGVDb25zb2xlQnV0
dG9uLnJlbW92ZVN0eWxlQ2xhc3MoInRvZ2dsZWQtb24iKTsKICAgICAgICAgdGhpcy50b2dnbGVD
b25zb2xlQnV0dG9uLnRpdGxlID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJTaG93IGNvbnNvbGUu
Iik7CkBAIC02NzEsNyArNzI0LDcgQEAgV2ViSW5zcGVjdG9yLkNvbnNvbGVWaWV3LnByb3RvdHlw
ZSA9IHsKICAgICB9CiB9CiAKLVdlYkluc3BlY3Rvci5Db25zb2xlVmlldy5wcm90b3R5cGUuX19w
cm90b19fID0gV2ViSW5zcGVjdG9yLlZpZXcucHJvdG90eXBlOworV2ViSW5zcGVjdG9yLkNvbnNv
bGVQYW5lbC5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLlBhbmVsLnByb3RvdHlw
ZTsKIAogV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlID0gZnVuY3Rpb24oc291cmNlLCB0eXBl
LCBsZXZlbCwgbGluZSwgdXJsLCByZXBlYXRDb3VudCwgbWVzc2FnZSwgcGFyYW1ldGVycywgc3Rh
Y2tUcmFjZSwgcmVxdWVzdElkKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9EcmF3ZXIuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL0RyYXdlci5qcwppbmRleCA0ODYxYzkwLi5lNWJlZDJmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RyYXdlci5qcworKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RyYXdlci5qcwpAQCAtNjEsNyArNjEsNyBAQCBXZWJJbnNw
ZWN0b3IuRHJhd2VyLnByb3RvdHlwZSA9IHsKIAogICAgICAgICB2YXIgZmlyc3RUaW1lID0gIXRo
aXMuX3Zpc2libGVWaWV3OwogICAgICAgICBpZiAodGhpcy5fdmlzaWJsZVZpZXcpCi0gICAgICAg
ICAgICB0aGlzLl92aXNpYmxlVmlldy5oaWRlKCk7CisgICAgICAgICAgICB0aGlzLl92aXNpYmxl
Vmlldy5oaWRlSW5EcmF3ZXIoKTsKIAogICAgICAgICB0aGlzLl92aXNpYmxlVmlldyA9IHg7CiAK
QEAgLTY5LDcgKzY5LDcgQEAgV2ViSW5zcGVjdG9yLkRyYXdlci5wcm90b3R5cGUgPSB7CiAgICAg
ICAgICAgICB0aGlzLl9zYWZlbHlSZW1vdmVDaGlsZHJlbigpOwogICAgICAgICAgICAgdGhpcy5f
dmlld1N0YXR1c0Jhci5yZW1vdmVDaGlsZHJlbigpOyAvLyBvcHRpbWl6ZSB0aGlzPyBjYWxsIG9s
ZC5kZXRhY2goKQogICAgICAgICAgICAgeC5hdHRhY2godGhpcy5lbGVtZW50LCB0aGlzLl92aWV3
U3RhdHVzQmFyKTsKLSAgICAgICAgICAgIHguc2hvdygpOworICAgICAgICAgICAgeC5zaG93SW5E
cmF3ZXIoKTsKICAgICAgICAgICAgIHRoaXMudmlzaWJsZSA9IHRydWU7CiAgICAgICAgIH0KICAg
ICB9LApAQCAtOTIsNyArOTIsNyBAQCBXZWJJbnNwZWN0b3IuRHJhd2VyLnByb3RvdHlwZSA9IHsK
ICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBpZiAodGhpcy52aXNpYmxlVmlldykKLSAg
ICAgICAgICAgIHRoaXMudmlzaWJsZVZpZXcuc2hvdygpOworICAgICAgICAgICAgdGhpcy52aXNp
YmxlVmlldy5zaG93SW5EcmF3ZXIoKTsKIAogICAgICAgICBXZWJJbnNwZWN0b3IuVmlldy5wcm90
b3R5cGUuc2hvdy5jYWxsKHRoaXMpOwogCkBAIC0xMjQsOCArMTI0LDggQEAgV2ViSW5zcGVjdG9y
LkRyYXdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICgidXBkYXRl
U3RhdHVzQmFySXRlbXMiIGluIFdlYkluc3BlY3Rvci5jdXJyZW50UGFuZWwpCiAgICAgICAgICAg
ICAgICAgV2ViSW5zcGVjdG9yLmN1cnJlbnRQYW5lbC51cGRhdGVTdGF0dXNCYXJJdGVtcygpOwot
ICAgICAgICAgICAgaWYgKHRoaXMudmlzaWJsZVZpZXcuYWZ0ZXJTaG93KQotICAgICAgICAgICAg
ICAgIHRoaXMudmlzaWJsZVZpZXcuYWZ0ZXJTaG93KCk7CisgICAgICAgICAgICBpZiAodGhpcy52
aXNpYmxlVmlldy5hZnRlclNob3dJbkRyYXdlcikKKyAgICAgICAgICAgICAgICB0aGlzLnZpc2li
bGVWaWV3LmFmdGVyU2hvd0luRHJhd2VyKCk7CiAgICAgICAgICAgICBkZWxldGUgdGhpcy5fYW5p
bWF0aW5nOwogICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2N1cnJlbnRBbmltYXRpb247CiAgICAg
ICAgICAgICB0aGlzLnN0YXRlID0gKHRoaXMuZnVsbFBhbmVsID8gV2ViSW5zcGVjdG9yLkRyYXdl
ci5TdGF0ZS5GdWxsIDogV2ViSW5zcGVjdG9yLkRyYXdlci5TdGF0ZS5WYXJpYWJsZSk7CkBAIC0x
NDQsNyArMTQ0LDcgQEAgV2ViSW5zcGVjdG9yLkRyYXdlci5wcm90b3R5cGUgPSB7CiAgICAgICAg
IFdlYkluc3BlY3Rvci5WaWV3LnByb3RvdHlwZS5oaWRlLmNhbGwodGhpcyk7CiAKICAgICAgICAg
aWYgKHRoaXMudmlzaWJsZVZpZXcpCi0gICAgICAgICAgICB0aGlzLnZpc2libGVWaWV3LmhpZGUo
KTsKKyAgICAgICAgICAgIHRoaXMudmlzaWJsZVZpZXcuaGlkZUluRHJhd2VyKCk7CiAKICAgICAg
ICAgdGhpcy5fYW5pbWF0aW5nID0gdHJ1ZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9QYW5lbC5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvUGFuZWwuanMKaW5kZXggYTFjM2Q5NS4uODYxMzdiYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9QYW5lbC5qcworKysgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1BhbmVsLmpzCkBAIC0yNiw5ICsyNiw5IEBACiAgKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgogICovCiAKLVdlYkluc3BlY3Rvci5QYW5lbCA9IGZ1bmN0aW9uKG5hbWUpCitXZWJJ
bnNwZWN0b3IuUGFuZWwgPSBmdW5jdGlvbihuYW1lLCBlbGVtZW50KQogewotICAgIFdlYkluc3Bl
Y3Rvci5WaWV3LmNhbGwodGhpcyk7CisgICAgV2ViSW5zcGVjdG9yLlZpZXcuY2FsbCh0aGlzLCBl
bGVtZW50KTsKIAogICAgIHRoaXMuZWxlbWVudC5hZGRTdHlsZUNsYXNzKCJwYW5lbCIpOwogICAg
IHRoaXMuZWxlbWVudC5hZGRTdHlsZUNsYXNzKG5hbWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuaHRtbCBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWwKaW5kZXggMjYzYmMyMC4uNmQ2Yzlj
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0
b3IuaHRtbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rv
ci5odG1sCkBAIC01Nyw3ICs1Nyw2IEBAIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0
L2phdmFzY3JpcHQiIHNyYz0iUGxlYXNlV2FpdE1lc3NhZ2UuanMiPjwvc2NyaXB0PgogICAgIDxz
Y3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IlZpZXcuanMiPjwvc2NyaXB0PgogICAg
IDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IkRyYXdlci5qcyI+PC9zY3JpcHQ+
Ci0gICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iQ29uc29sZVZpZXcuanMi
Pjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IlBhbmVs
LmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJU
aW1lbGluZUdyaWQuanMiPjwvc2NyaXB0PiAgICAKICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2
YXNjcmlwdCIgc3JjPSJSZXNvdXJjZS5qcyI+PC9zY3JpcHQ+CkBAIC0xMDcsNyArMTA2LDcgQEAg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJTY3JpcHRz
UGFuZWwuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBz
cmM9IlJlc291cmNlc1BhbmVsLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQv
amF2YXNjcmlwdCIgc3JjPSJQcm9maWxlc1BhbmVsLmpzIj48L3NjcmlwdD4KLSAgICA8c2NyaXB0
IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJDb25zb2xlUGFuZWwuanMiPjwvc2NyaXB0Pgor
ICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IkNvbnNvbGVWaWV3LmpzIj48
L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJFeHRlbnNp
b25BUEkuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBz
cmM9IkV4dGVuc2lvbkF1ZGl0Q2F0ZWdvcnkuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlw
ZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IkV4dGVuc2lvbkNvbW1vbi5qcyI+PC9zY3JpcHQ+CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5q
cyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzCmluZGV4
IGMzN2MyOGIuLjA5OWZmNDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvaW5zcGVjdG9yLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvaW5zcGVjdG9yLmpzCkBAIC0xODksNyArMTg5LDcgQEAgdmFyIFdlYkluc3BlY3RvciA9
IHsKICAgICAgICAgaWYgKGhpZGRlblBhbmVscy5pbmRleE9mKCJhdWRpdHMiKSA9PT0gLTEpCiAg
ICAgICAgICAgICB0aGlzLnBhbmVscy5hdWRpdHMgPSBuZXcgV2ViSW5zcGVjdG9yLkF1ZGl0c1Bh
bmVsKCk7CiAgICAgICAgIGlmIChoaWRkZW5QYW5lbHMuaW5kZXhPZigiY29uc29sZSIpID09PSAt
MSkKLSAgICAgICAgICAgIHRoaXMucGFuZWxzLmNvbnNvbGUgPSBuZXcgV2ViSW5zcGVjdG9yLkNv
bnNvbGVQYW5lbCgpOworICAgICAgICAgICAgdGhpcy5wYW5lbHMuY29uc29sZSA9IHRoaXMuY29u
c29sZTsKICAgICB9LAogCiAgICAgZ2V0IGF0dGFjaGVkKCkKQEAgLTQyOSw3ICs0MjksNyBAQCBX
ZWJJbnNwZWN0b3IuZG9Mb2FkZWREb25lID0gZnVuY3Rpb24oKQogICAgIFdlYkluc3BlY3Rvci5z
aG9ydGN1dHNIZWxwLnNlY3Rpb24oV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJFbGVtZW50cyBQYW5l
bCIpKTsKIAogICAgIHRoaXMuZHJhd2VyID0gbmV3IFdlYkluc3BlY3Rvci5EcmF3ZXIoKTsKLSAg
ICB0aGlzLmNvbnNvbGUgPSBuZXcgV2ViSW5zcGVjdG9yLkNvbnNvbGVWaWV3KHRoaXMuZHJhd2Vy
KTsKKyAgICB0aGlzLmNvbnNvbGUgPSBuZXcgV2ViSW5zcGVjdG9yLkNvbnNvbGVQYW5lbCh0aGlz
LmRyYXdlcik7CiAgICAgdGhpcy5kcmF3ZXIudmlzaWJsZVZpZXcgPSB0aGlzLmNvbnNvbGU7CiAg
ICAgdGhpcy5uZXR3b3JrTWFuYWdlciA9IG5ldyBXZWJJbnNwZWN0b3IuTmV0d29ya01hbmFnZXIo
KTsKICAgICB0aGlzLnJlc291cmNlVHJlZU1vZGVsID0gbmV3IFdlYkluc3BlY3Rvci5SZXNvdXJj
ZVRyZWVNb2RlbCgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>92238</attachid>
            <date>2011-05-04 07:25:58 -0700</date>
            <delta_ts>2011-05-04 07:30:43 -0700</delta_ts>
            <desc>Patch.</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>11851</size>
            <attacher name="Pavel Podivilov">podivilov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA5OGU3YmY2Li4yM2E4ZjdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzAg
QEAKKzIwMTEtMDUtMDQgIFBhdmVsIFBvZGl2aWxvdiAgPHBvZGl2aWxvdkBjaHJvbWl1bS5vcmc+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIElu
c3BlY3RvcjogbWVyZ2UgQ29uc29sZVZpZXcgaW50byBDb25zb2xlUGFuZWwuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NDY3MAorCisgICAgICAgIENv
bnNvbGUgdmlldyBpbiBkcmF3ZXIgbG9va3MgZXhhY3RseSB0aGUgc2FtZSBhcyBjb25zb2xlIHBh
bmVsLiBNZXJnaW5nIENvbnNvbGVWaWV3IGFuZCBDb25zb2xlUGFuZWwgdG9nZXRoZXIKKyAgICAg
ICAgd2lsbCBhbGxvdyB1cyB0byByZXVzZSBwYW5lbCdzIGZ1bmN0aW9uYWxpdHkgKGUuZy4gcmVz
aXphYmxlIHNpZGViYXIpIGV2ZW4gd2hlbiBjb25zb2xlIGlzIGRvY2tlZC4KKworICAgICAgICAq
IGluc3BlY3Rvci9mcm9udC1lbmQvQ29uc29sZVZpZXcuanM6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuQ29uc29sZVBhbmVsLnByb3RvdHlwZS5nZXQgdG9vbGJhckl0ZW1MYWJlbCk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuQ29uc29sZVBhbmVsLnByb3RvdHlwZS5zaG93KToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5Db25zb2xlUGFuZWwucHJvdG90eXBlLmhpZGUpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLkNvbnNvbGVQYW5lbC5wcm90b3R5cGUuc2hvd0luRHJhd2VyKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5Db25zb2xlUGFuZWwucHJvdG90eXBlLmFmdGVyU2hvd0luRHJhd2VyKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xlUGFuZWwucHJvdG90eXBlLmhpZGVJbkRyYXdlcik6
CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9EcmF3ZXIuanM6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuRHJhd2VyLnByb3RvdHlwZS5zZXQgdmlzaWJsZVZpZXcpOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLkRyYXdlci5wcm90b3R5cGUuc2hvdy5hbmltYXRpb25GaW5pc2hlZCk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuRHJhd2VyLnByb3RvdHlwZS5zaG93KToKKyAgICAgICAgKiBpbnNw
ZWN0b3IvZnJvbnQtZW5kL1BhbmVsLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlBhbmVsKToK
KyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5odG1sOgorICAgICAgICAq
IGluc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9y
Ll9jcmVhdGVQYW5lbHMpOgorCiAyMDExLTA1LTAzICBMdWtlIE1hY3BoZXJzb24gICA8bWFjcGhl
cnNvbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGltaXRyaSBHbGF6a292
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Db25zb2xl
Vmlldy5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ29uc29sZVZpZXcu
anMKaW5kZXggZTA4YTdhNC4uNWUxYmZhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9Db25zb2xlVmlldy5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL0NvbnNvbGVWaWV3LmpzCkBAIC0yOSw5ICsyOSw5IEBACiAKIGNvbnN0
IEV4cHJlc3Npb25TdG9wQ2hhcmFjdGVycyA9ICIgPTpbKHs7LCErLSovJnxePD4iOwogCi1XZWJJ
bnNwZWN0b3IuQ29uc29sZVZpZXcgPSBmdW5jdGlvbihkcmF3ZXIpCitXZWJJbnNwZWN0b3IuQ29u
c29sZVBhbmVsID0gZnVuY3Rpb24oZHJhd2VyKQogewotICAgIFdlYkluc3BlY3Rvci5WaWV3LmNh
bGwodGhpcywgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnNvbGUtdmlldyIpKTsKKyAgICBX
ZWJJbnNwZWN0b3IuUGFuZWwuY2FsbCh0aGlzLCAiY29uc29sZSIsIGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCJjb25zb2xlLXZpZXciKSk7CiAKICAgICB0aGlzLm1lc3NhZ2VzID0gW107CiAgICAg
dGhpcy5kcmF3ZXIgPSBkcmF3ZXI7CkBAIC0xMDEsNyArMTAxLDcgQEAgV2ViSW5zcGVjdG9yLkNv
bnNvbGVWaWV3ID0gZnVuY3Rpb24oZHJhd2VyKQogICAgIHRoaXMuX3JlZ2lzdGVyQ29uc29sZURv
bWFpbkRpc3BhdGNoZXIoKTsKIH0KIAotV2ViSW5zcGVjdG9yLkNvbnNvbGVWaWV3LnByb3RvdHlw
ZSA9IHsKK1dlYkluc3BlY3Rvci5Db25zb2xlUGFuZWwucHJvdG90eXBlID0gewogICAgIF9yZWdp
c3RlckNvbnNvbGVEb21haW5EaXNwYXRjaGVyOiBmdW5jdGlvbigpIHsKICAgICAgICAgdmFyIGNv
bnNvbGUgPSB0aGlzOwogICAgICAgICB2YXIgZGlzcGF0Y2hlciA9IHsKQEAgLTIzNiwyMCArMjM2
LDczIEBAIFdlYkluc3BlY3Rvci5Db25zb2xlVmlldy5wcm90b3R5cGUgPSB7CiAgICAgICAgIHN0
YXR1c0JhckVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5maWx0ZXJCYXJFbGVtZW50KTsKICAgICB9
LAogCisgICAgZ2V0IHRvb2xiYXJJdGVtTGFiZWwoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFdl
Ykluc3BlY3Rvci5VSVN0cmluZygiQ29uc29sZSIpOworICAgIH0sCisKICAgICBzaG93OiBmdW5j
dGlvbigpCiAgICAgeworICAgICAgICBXZWJJbnNwZWN0b3IuUGFuZWwucHJvdG90eXBlLnNob3cu
Y2FsbCh0aGlzKTsKKworICAgICAgICB0aGlzLl9wcmV2aW91c0NvbnNvbGVTdGF0ZSA9IFdlYklu
c3BlY3Rvci5kcmF3ZXIuc3RhdGU7CisgICAgICAgIFdlYkluc3BlY3Rvci5kcmF3ZXIuZW50ZXJQ
YW5lbE1vZGUoKTsKKyAgICAgICAgV2ViSW5zcGVjdG9yLnNob3dDb25zb2xlKCk7CisKKyAgICAg
ICAgLy8gTW92ZSB0aGUgc2NvcGUgYmFyIHRvIHRoZSB0b3Agb2YgdGhlIG1lc3NhZ2VzLCBsaWtl
IHRoZSByZXNvdXJjZXMgZmlsdGVyLgorICAgICAgICB2YXIgc2NvcGVCYXIgPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgiY29uc29sZS1maWx0ZXIiKTsKKyAgICAgICAgdmFyIGNvbnNvbGVNZXNz
YWdlcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb25zb2xlLW1lc3NhZ2VzIik7CisKKyAg
ICAgICAgc2NvcGVCYXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzY29wZUJhcik7CisgICAgICAg
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb25zb2xlLXZpZXciKS5pbnNlcnRCZWZvcmUoc2Nv
cGVCYXIsIGNvbnNvbGVNZXNzYWdlcyk7CisKKyAgICAgICAgLy8gVXBkYXRlIHN0eWxlcywgYW5k
IGdpdmUgY29uc29sZS1tZXNzYWdlcyBhIHRvcCBtYXJnaW4gc28gaXQgZG9lc24ndCBvdmVyd3Jp
dGUgdGhlIHNjb3BlIGJhci4KKyAgICAgICAgc2NvcGVCYXIuYWRkU3R5bGVDbGFzcygiY29uc29s
ZS1maWx0ZXItdG9wIik7CisgICAgICAgIHNjb3BlQmFyLnJlbW92ZVN0eWxlQ2xhc3MoInN0YXR1
cy1iYXItaXRlbSIpOworCisgICAgICAgIGNvbnNvbGVNZXNzYWdlcy5hZGRTdHlsZUNsYXNzKCJj
b25zb2xlLWZpbHRlci10b3AiKTsKKyAgICB9LAorCisgICAgaGlkZTogZnVuY3Rpb24oKQorICAg
IHsKKyAgICAgICAgaWYgKHRoaXMuX3ByZXZpb3VzQ29uc29sZVN0YXRlID09PSBXZWJJbnNwZWN0
b3IuRHJhd2VyLlN0YXRlLkhpZGRlbikgeworICAgICAgICAgICAgV2ViSW5zcGVjdG9yLlBhbmVs
LnByb3RvdHlwZS5oaWRlLmNhbGwodGhpcyk7CisgICAgICAgICAgICBXZWJJbnNwZWN0b3IuZHJh
d2VyLmltbWVkaWF0ZWx5RXhpdFBhbmVsTW9kZSgpOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgaWYgKCJfdG9vbGJhckl0ZW0iIGluIHRoaXMpCisgICAgICAgICAgICAgICAgdGhpcy5f
dG9vbGJhckl0ZW0ucmVtb3ZlU3R5bGVDbGFzcygidG9nZ2xlZC1vbiIpOworICAgICAgICAgICAg
V2ViSW5zcGVjdG9yLmRyYXdlci5leGl0UGFuZWxNb2RlKCk7CisgICAgICAgIH0KKyAgICAgICAg
ZGVsZXRlIHRoaXMuX3ByZXZpb3VzQ29uc29sZVN0YXRlOworCisgICAgICAgIC8vIE1vdmUgdGhl
IHNjb3BlIGJhciBiYWNrIHRvIHRoZSBib3R0b20gYmFyLCBuZXh0IHRvIENsZWFyIENvbnNvbGUu
CisgICAgICAgIHZhciBzY29wZUJhciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb25zb2xl
LWZpbHRlciIpOworCisgICAgICAgIHNjb3BlQmFyLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc2Nv
cGVCYXIpOworICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgib3RoZXItZHJhd2VyLXN0
YXR1cy1iYXItaXRlbXMiKS5hcHBlbmRDaGlsZChzY29wZUJhcik7CisKKyAgICAgICAgLy8gVXBk
YXRlIHN0eWxlcywgYW5kIHJlbW92ZSB0aGUgdG9wIG1hcmdpbiBvbiBjb25zb2xlLW1lc3NhZ2Vz
LgorICAgICAgICBzY29wZUJhci5yZW1vdmVTdHlsZUNsYXNzKCJjb25zb2xlLWZpbHRlci10b3Ai
KTsKKyAgICAgICAgc2NvcGVCYXIuYWRkU3R5bGVDbGFzcygic3RhdHVzLWJhci1pdGVtIik7CisK
KyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnNvbGUtbWVzc2FnZXMiKS5yZW1v
dmVTdHlsZUNsYXNzKCJjb25zb2xlLWZpbHRlci10b3AiKTsKKyAgICB9LAorCisgICAgc2hvd0lu
RHJhd2VyOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBXZWJJbnNwZWN0b3IuVmlldy5wcm90
b3R5cGUuc2hvdy5jYWxsKHRoaXMpOwogICAgICAgICB0aGlzLnRvZ2dsZUNvbnNvbGVCdXR0b24u
YWRkU3R5bGVDbGFzcygidG9nZ2xlZC1vbiIpOwogICAgICAgICB0aGlzLnRvZ2dsZUNvbnNvbGVC
dXR0b24udGl0bGUgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkhpZGUgY29uc29sZS4iKTsKICAg
ICAgICAgaWYgKCF0aGlzLnByb21wdC5pc0NhcmV0SW5zaWRlUHJvbXB0KCkpCiAgICAgICAgICAg
ICB0aGlzLnByb21wdC5tb3ZlQ2FyZXRUb0VuZE9mUHJvbXB0KCk7CiAgICAgfSwKIAotICAgIGFm
dGVyU2hvdzogZnVuY3Rpb24oKQorICAgIGFmdGVyU2hvd0luRHJhd2VyOiBmdW5jdGlvbigpCiAg
ICAgewogICAgICAgICBXZWJJbnNwZWN0b3IuY3VycmVudEZvY3VzRWxlbWVudCA9IHRoaXMucHJv
bXB0RWxlbWVudDsKICAgICB9LAogCi0gICAgaGlkZTogZnVuY3Rpb24oKQorICAgIGhpZGVJbkRy
YXdlcjogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgdGhpcy50b2dnbGVDb25zb2xlQnV0dG9u
LnJlbW92ZVN0eWxlQ2xhc3MoInRvZ2dsZWQtb24iKTsKICAgICAgICAgdGhpcy50b2dnbGVDb25z
b2xlQnV0dG9uLnRpdGxlID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJTaG93IGNvbnNvbGUuIik7
CkBAIC02NzEsNyArNzI0LDcgQEAgV2ViSW5zcGVjdG9yLkNvbnNvbGVWaWV3LnByb3RvdHlwZSA9
IHsKICAgICB9CiB9CiAKLVdlYkluc3BlY3Rvci5Db25zb2xlVmlldy5wcm90b3R5cGUuX19wcm90
b19fID0gV2ViSW5zcGVjdG9yLlZpZXcucHJvdG90eXBlOworV2ViSW5zcGVjdG9yLkNvbnNvbGVQ
YW5lbC5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLlBhbmVsLnByb3RvdHlwZTsK
IAogV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlID0gZnVuY3Rpb24oc291cmNlLCB0eXBlLCBs
ZXZlbCwgbGluZSwgdXJsLCByZXBlYXRDb3VudCwgbWVzc2FnZSwgcGFyYW1ldGVycywgc3RhY2tU
cmFjZSwgcmVxdWVzdElkKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9EcmF3ZXIuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L0RyYXdlci5qcwppbmRleCA0ODYxYzkwLi5lNWJlZDJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RyYXdlci5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL0RyYXdlci5qcwpAQCAtNjEsNyArNjEsNyBAQCBXZWJJbnNwZWN0
b3IuRHJhd2VyLnByb3RvdHlwZSA9IHsKIAogICAgICAgICB2YXIgZmlyc3RUaW1lID0gIXRoaXMu
X3Zpc2libGVWaWV3OwogICAgICAgICBpZiAodGhpcy5fdmlzaWJsZVZpZXcpCi0gICAgICAgICAg
ICB0aGlzLl92aXNpYmxlVmlldy5oaWRlKCk7CisgICAgICAgICAgICB0aGlzLl92aXNpYmxlVmll
dy5oaWRlSW5EcmF3ZXIoKTsKIAogICAgICAgICB0aGlzLl92aXNpYmxlVmlldyA9IHg7CiAKQEAg
LTY5LDcgKzY5LDcgQEAgV2ViSW5zcGVjdG9yLkRyYXdlci5wcm90b3R5cGUgPSB7CiAgICAgICAg
ICAgICB0aGlzLl9zYWZlbHlSZW1vdmVDaGlsZHJlbigpOwogICAgICAgICAgICAgdGhpcy5fdmll
d1N0YXR1c0Jhci5yZW1vdmVDaGlsZHJlbigpOyAvLyBvcHRpbWl6ZSB0aGlzPyBjYWxsIG9sZC5k
ZXRhY2goKQogICAgICAgICAgICAgeC5hdHRhY2godGhpcy5lbGVtZW50LCB0aGlzLl92aWV3U3Rh
dHVzQmFyKTsKLSAgICAgICAgICAgIHguc2hvdygpOworICAgICAgICAgICAgeC5zaG93SW5EcmF3
ZXIoKTsKICAgICAgICAgICAgIHRoaXMudmlzaWJsZSA9IHRydWU7CiAgICAgICAgIH0KICAgICB9
LApAQCAtOTIsNyArOTIsNyBAQCBXZWJJbnNwZWN0b3IuRHJhd2VyLnByb3RvdHlwZSA9IHsKICAg
ICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBpZiAodGhpcy52aXNpYmxlVmlldykKLSAgICAg
ICAgICAgIHRoaXMudmlzaWJsZVZpZXcuc2hvdygpOworICAgICAgICAgICAgdGhpcy52aXNpYmxl
Vmlldy5zaG93SW5EcmF3ZXIoKTsKIAogICAgICAgICBXZWJJbnNwZWN0b3IuVmlldy5wcm90b3R5
cGUuc2hvdy5jYWxsKHRoaXMpOwogCkBAIC0xMjQsOCArMTI0LDggQEAgV2ViSW5zcGVjdG9yLkRy
YXdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICgidXBkYXRlU3Rh
dHVzQmFySXRlbXMiIGluIFdlYkluc3BlY3Rvci5jdXJyZW50UGFuZWwpCiAgICAgICAgICAgICAg
ICAgV2ViSW5zcGVjdG9yLmN1cnJlbnRQYW5lbC51cGRhdGVTdGF0dXNCYXJJdGVtcygpOwotICAg
ICAgICAgICAgaWYgKHRoaXMudmlzaWJsZVZpZXcuYWZ0ZXJTaG93KQotICAgICAgICAgICAgICAg
IHRoaXMudmlzaWJsZVZpZXcuYWZ0ZXJTaG93KCk7CisgICAgICAgICAgICBpZiAodGhpcy52aXNp
YmxlVmlldy5hZnRlclNob3dJbkRyYXdlcikKKyAgICAgICAgICAgICAgICB0aGlzLnZpc2libGVW
aWV3LmFmdGVyU2hvd0luRHJhd2VyKCk7CiAgICAgICAgICAgICBkZWxldGUgdGhpcy5fYW5pbWF0
aW5nOwogICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2N1cnJlbnRBbmltYXRpb247CiAgICAgICAg
ICAgICB0aGlzLnN0YXRlID0gKHRoaXMuZnVsbFBhbmVsID8gV2ViSW5zcGVjdG9yLkRyYXdlci5T
dGF0ZS5GdWxsIDogV2ViSW5zcGVjdG9yLkRyYXdlci5TdGF0ZS5WYXJpYWJsZSk7CkBAIC0xNDQs
NyArMTQ0LDcgQEAgV2ViSW5zcGVjdG9yLkRyYXdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIFdl
Ykluc3BlY3Rvci5WaWV3LnByb3RvdHlwZS5oaWRlLmNhbGwodGhpcyk7CiAKICAgICAgICAgaWYg
KHRoaXMudmlzaWJsZVZpZXcpCi0gICAgICAgICAgICB0aGlzLnZpc2libGVWaWV3LmhpZGUoKTsK
KyAgICAgICAgICAgIHRoaXMudmlzaWJsZVZpZXcuaGlkZUluRHJhd2VyKCk7CiAKICAgICAgICAg
dGhpcy5fYW5pbWF0aW5nID0gdHJ1ZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9QYW5lbC5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvUGFuZWwuanMKaW5kZXggYTFjM2Q5NS4uODYxMzdiYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9QYW5lbC5qcworKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1BhbmVsLmpzCkBAIC0yNiw5ICsyNiw5IEBACiAgKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgogICovCiAKLVdlYkluc3BlY3Rvci5QYW5lbCA9IGZ1bmN0aW9uKG5hbWUpCitXZWJJbnNw
ZWN0b3IuUGFuZWwgPSBmdW5jdGlvbihuYW1lLCBlbGVtZW50KQogewotICAgIFdlYkluc3BlY3Rv
ci5WaWV3LmNhbGwodGhpcyk7CisgICAgV2ViSW5zcGVjdG9yLlZpZXcuY2FsbCh0aGlzLCBlbGVt
ZW50KTsKIAogICAgIHRoaXMuZWxlbWVudC5hZGRTdHlsZUNsYXNzKCJwYW5lbCIpOwogICAgIHRo
aXMuZWxlbWVudC5hZGRTdHlsZUNsYXNzKG5hbWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuaHRtbCBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWwKaW5kZXggMjYzYmMyMC4uNmQ2YzljMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3Iu
aHRtbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5o
dG1sCkBAIC01Nyw3ICs1Nyw2IEBAIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2ph
dmFzY3JpcHQiIHNyYz0iUGxlYXNlV2FpdE1lc3NhZ2UuanMiPjwvc2NyaXB0PgogICAgIDxzY3Jp
cHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IlZpZXcuanMiPjwvc2NyaXB0PgogICAgIDxz
Y3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IkRyYXdlci5qcyI+PC9zY3JpcHQ+Ci0g
ICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iQ29uc29sZVZpZXcuanMiPjwv
c2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IlBhbmVsLmpz
Ij48L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJUaW1l
bGluZUdyaWQuanMiPjwvc2NyaXB0PiAgICAKICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNj
cmlwdCIgc3JjPSJSZXNvdXJjZS5qcyI+PC9zY3JpcHQ+CkBAIC0xMDcsNyArMTA2LDcgQEAgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJTY3JpcHRzUGFu
ZWwuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9
IlJlc291cmNlc1BhbmVsLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2
YXNjcmlwdCIgc3JjPSJQcm9maWxlc1BhbmVsLmpzIj48L3NjcmlwdD4KLSAgICA8c2NyaXB0IHR5
cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJDb25zb2xlUGFuZWwuanMiPjwvc2NyaXB0PgorICAg
IDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IkNvbnNvbGVWaWV3LmpzIj48L3Nj
cmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJFeHRlbnNpb25B
UEkuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9
IkV4dGVuc2lvbkF1ZGl0Q2F0ZWdvcnkuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0i
dGV4dC9qYXZhc2NyaXB0IiBzcmM9IkV4dGVuc2lvbkNvbW1vbi5qcyI+PC9zY3JpcHQ+CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzCmluZGV4IDg4
NTBhY2UuLjQ3YTU2NDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvaW5zcGVjdG9yLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvaW5zcGVjdG9yLmpzCkBAIC0xNTEsOSArMTUxLDggQEAgdmFyIFdlYkluc3BlY3RvciA9IHsK
ICAgICAgICAgfQogICAgIH0sCiAKLSAgICBfY3JlYXRlUGFuZWxzOiBmdW5jdGlvbigpCisgICAg
X2NyZWF0ZVBhbmVsczogZnVuY3Rpb24oaGlkZGVuUGFuZWxzKQogICAgIHsKLSAgICAgICAgdmFy
IGhpZGRlblBhbmVscyA9IChJbnNwZWN0b3JGcm9udGVuZEhvc3QuaGlkZGVuUGFuZWxzKCkgfHwg
IiIpLnNwbGl0KCcsJyk7CiAgICAgICAgIGlmIChoaWRkZW5QYW5lbHMuaW5kZXhPZigiZWxlbWVu
dHMiKSA9PT0gLTEpCiAgICAgICAgICAgICB0aGlzLnBhbmVscy5lbGVtZW50cyA9IG5ldyBXZWJJ
bnNwZWN0b3IuRWxlbWVudHNQYW5lbCgpOwogICAgICAgICBpZiAoaGlkZGVuUGFuZWxzLmluZGV4
T2YoInJlc291cmNlcyIpID09PSAtMSkKQEAgLTE2OCw4ICsxNjcsNyBAQCB2YXIgV2ViSW5zcGVj
dG9yID0gewogICAgICAgICAgICAgdGhpcy5wYW5lbHMucHJvZmlsZXMgPSBuZXcgV2ViSW5zcGVj
dG9yLlByb2ZpbGVzUGFuZWwoKTsKICAgICAgICAgaWYgKGhpZGRlblBhbmVscy5pbmRleE9mKCJh
dWRpdHMiKSA9PT0gLTEpCiAgICAgICAgICAgICB0aGlzLnBhbmVscy5hdWRpdHMgPSBuZXcgV2Vi
SW5zcGVjdG9yLkF1ZGl0c1BhbmVsKCk7Ci0gICAgICAgIGlmIChoaWRkZW5QYW5lbHMuaW5kZXhP
ZigiY29uc29sZSIpID09PSAtMSkKLSAgICAgICAgICAgIHRoaXMucGFuZWxzLmNvbnNvbGUgPSBu
ZXcgV2ViSW5zcGVjdG9yLkNvbnNvbGVQYW5lbCgpOworCiAgICAgfSwKIAogICAgIGdldCBhdHRh
Y2hlZCgpCkBAIC00MTIsNyArNDEwLDcgQEAgV2ViSW5zcGVjdG9yLmRvTG9hZGVkRG9uZSA9IGZ1
bmN0aW9uKCkKICAgICBXZWJJbnNwZWN0b3Iuc2hvcnRjdXRzSGVscC5zZWN0aW9uKFdlYkluc3Bl
Y3Rvci5VSVN0cmluZygiRWxlbWVudHMgUGFuZWwiKSk7CiAKICAgICB0aGlzLmRyYXdlciA9IG5l
dyBXZWJJbnNwZWN0b3IuRHJhd2VyKCk7Ci0gICAgdGhpcy5jb25zb2xlID0gbmV3IFdlYkluc3Bl
Y3Rvci5Db25zb2xlVmlldyh0aGlzLmRyYXdlcik7CisgICAgdGhpcy5jb25zb2xlID0gbmV3IFdl
Ykluc3BlY3Rvci5Db25zb2xlUGFuZWwodGhpcy5kcmF3ZXIpOwogICAgIHRoaXMuZHJhd2VyLnZp
c2libGVWaWV3ID0gdGhpcy5jb25zb2xlOwogICAgIHRoaXMubmV0d29ya01hbmFnZXIgPSBuZXcg
V2ViSW5zcGVjdG9yLk5ldHdvcmtNYW5hZ2VyKCk7CiAgICAgdGhpcy5yZXNvdXJjZVRyZWVNb2Rl
bCA9IG5ldyBXZWJJbnNwZWN0b3IuUmVzb3VyY2VUcmVlTW9kZWwoKTsKQEAgLTQzNyw4ICs0MzUs
MTIgQEAgV2ViSW5zcGVjdG9yLmRvTG9hZGVkRG9uZSA9IGZ1bmN0aW9uKCkKICAgICB0aGlzLnNl
YXJjaENvbnRyb2xsZXIgPSBuZXcgV2ViSW5zcGVjdG9yLlNlYXJjaENvbnRyb2xsZXIoKTsKICAg
ICB0aGlzLmRvbUJyZWFrcG9pbnRzU2lkZWJhclBhbmUgPSBuZXcgV2ViSW5zcGVjdG9yLkRPTUJy
ZWFrcG9pbnRzU2lkZWJhclBhbmUoKTsKIAorICAgIHZhciBoaWRkZW5QYW5lbHMgPSAoSW5zcGVj
dG9yRnJvbnRlbmRIb3N0LmhpZGRlblBhbmVscygpIHx8ICIiKS5zcGxpdCgnLCcpOwogICAgIHRo
aXMucGFuZWxzID0ge307Ci0gICAgdGhpcy5fY3JlYXRlUGFuZWxzKCk7CisgICAgdGhpcy5fY3Jl
YXRlUGFuZWxzKGhpZGRlblBhbmVscyk7CisgICAgaWYgKGhpZGRlblBhbmVscy5pbmRleE9mKCJj
b25zb2xlIikgPT09IC0xKQorICAgICAgICB0aGlzLnBhbmVscy5jb25zb2xlID0gdGhpcy5jb25z
b2xlOworCiAgICAgdGhpcy5fcGFuZWxIaXN0b3J5ID0gbmV3IFdlYkluc3BlY3Rvci5QYW5lbEhp
c3RvcnkoKTsKICAgICB0aGlzLnRvb2xiYXIgPSBuZXcgV2ViSW5zcGVjdG9yLlRvb2xiYXIoKTsK
ICAgICB0aGlzLnRvb2xiYXIuYXR0YWNoZWQgPSBXZWJJbnNwZWN0b3IuYXR0YWNoZWQ7Cg==
</data>
<flag name="review"
          id="85185"
          type_id="1"
          status="+"
          setter="yurys"
    />
          </attachment>
      

    </bug>

</bugzilla>