<?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>52706</bug_id>
          
          <creation_ts>2011-01-19 02:12:00 -0800</creation_ts>
          <short_desc>Web Inspector: implement beautification of scripts inlined in html documents</short_desc>
          <delta_ts>2011-02-07 07:16:08 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Pavel Podivilov">podivilov</reporter>
          <assigned_to name="Pavel Podivilov">podivilov</assigned_to>
          <cc>apavlov</cc>
    
    <cc>bweinstein</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>peter</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>336407</commentid>
    <comment_count>0</comment_count>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2011-01-19 02:12:00 -0800</bug_when>
    <thetext>Web Inspector: implement beautification of scripts inlined in html documents</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336408</commentid>
    <comment_count>1</comment_count>
      <attachid>79404</attachid>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2011-01-19 02:12:41 -0800</bug_when>
    <thetext>Created attachment 79404
Patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>340873</commentid>
    <comment_count>2</comment_count>
      <attachid>79404</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2011-01-27 08:17:55 -0800</bug_when>
    <thetext>Comment on attachment 79404
Patch.

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

&gt; Source/WebCore/ChangeLog:5
&gt; +        Web Inspector: implement beautification of scripts inlined in html documents.

Could you elaborate on what kind of beautification this change provides?

&gt; Source/WebCore/inspector/front-end/SourceFrame.js:308
&gt; +        var textViewerLineNumber = this._model.originalLocationToFormattedLineNumber(this._executionLine - 1, 0);

What is this -1 for? Can you wrap this decrement in a method with a descriptive name?

&gt; Source/WebCore/inspector/front-end/SourceFrameModel.js:31
&gt; +WebInspector.SourceFrameModel = function(content, scripts)

I&apos;d rather rename this class since it has nothing specific to SourceFrame. I&apos;d rather call it SourcePositionMap or something that would better reflect it&apos;s intent.

&gt; Source/WebCore/inspector/front-end/SourceFrameModel.js:38
&gt; +    format: function(callback)

This method(and other ones related to script formatting) should be a part of ScriptFormatter and the SourceFrameModel should become an immutable object created by the formatter. This way we could use original script and identity mapping for not formatted scripts and replace them in case we apply some formatting rules.

&gt; Source/WebCore/inspector/front-end/SourceFrameModel.js:121
&gt; +        if (this.__scriptLocations)

Is there a reason for making this getter lazy?

&gt; Source/WebCore/inspector/front-end/SourceFrameModel.js:122
&gt; +            return this.__scriptLocations;

We don&apos;t use double underscore prefix in inspector front-end.

&gt; Source/WebCore/inspector/front-end/SourceFrameModel.js:127
&gt; +            this.__scriptLocations.push({ offset: offset, length: script.length });

__scriptLocations stores ranges not locations, we need to rename it

&gt; Source/WebCore/inspector/front-end/SourceFrameModel.js:135
&gt; +        if (!this._formatted)

Let&apos;s break this and the following methods with the same check into two classes: one will represent identity mapping and will be used for not formatted scripts and another one will be created by ScriptFormatter and will do all the position translation.

&gt; Source/WebCore/inspector/front-end/SourceFrameModel.js:178
&gt; +        if (this.__lineEndings)

Please don&apos;t use __ in inspector code, you could give the variable a more specific name instead if you want to avoid name conflicts.

&gt; Source/WebCore/inspector/front-end/SourceFrameModel.js:187
&gt; +        if (this.__formattedLineEndings)

I don&apos;t see why we need this getter to be lazy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>342550</commentid>
    <comment_count>3</comment_count>
      <attachid>80637</attachid>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2011-01-31 06:35:45 -0800</bug_when>
    <thetext>Created attachment 80637
Patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>342552</commentid>
    <comment_count>4</comment_count>
      <attachid>80637</attachid>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2011-01-31 06:36:35 -0800</bug_when>
    <thetext>Comment on attachment 80637
Patch.

All comments addressed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343958</commentid>
    <comment_count>5</comment_count>
      <attachid>80637</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2011-02-02 06:33:32 -0800</bug_when>
    <thetext>Comment on attachment 80637
Patch.

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

&gt; Source/WebCore/inspector/front-end/ScriptFormatter.js:96
&gt; +        var text = &quot;&quot;;

It might be more efficient to put the text chunks into an array first and call .join at the end.

&gt; Source/WebCore/inspector/front-end/ScriptFormatter.js:125
&gt; +        worker.onmessage = messageHandler.bind(this);

You can call callback.bind instead.

&gt; Source/WebCore/inspector/front-end/SourceFrame.js:903
&gt; +        if (!this._formattedContent)

Why the SourceFrame discriminate between formatted and not formatted content? all specific can be easily hidden behind the content interface and you wouldn&apos;t have these two methods at all.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343962</commentid>
    <comment_count>6</comment_count>
      <attachid>80637</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2011-02-02 06:46:53 -0800</bug_when>
    <thetext>Comment on attachment 80637
Patch.

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

&gt; Source/WebCore/inspector/front-end/SourceFrameContent.js:34
&gt; +        text = text.replace(/\r\n/g, &quot;\n&quot;);

This will make positions in the text differ from those in the original text.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>344623</commentid>
    <comment_count>7</comment_count>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2011-02-03 03:50:49 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 80637 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=80637&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/inspector/front-end/ScriptFormatter.js:96
&gt; &gt; +        var text = &quot;&quot;;
&gt; 
&gt; It might be more efficient to put the text chunks into an array first and call .join at the end.
&gt; 

I think we should use &quot;+&quot; operator here, since it is more efficient and readable way to concatenate strings comparing to the .join method (at least for v8).

&gt; &gt; Source/WebCore/inspector/front-end/ScriptFormatter.js:125
&gt; &gt; +        worker.onmessage = messageHandler.bind(this);
&gt; 
&gt; You can call callback.bind instead.

messageHandler gets properties from event.data, this can&apos;t be done with callback.bind.

&gt; 
&gt; &gt; Source/WebCore/inspector/front-end/SourceFrame.js:903
&gt; &gt; +        if (!this._formattedContent)
&gt; 
&gt; Why the SourceFrame discriminate between formatted and not formatted content? all specific can be easily hidden behind the content interface and you wouldn&apos;t have these two methods at all.

I think that a method named &quot;originalLocationToTextViewerLineNumber&quot; or &quot;scriptLocationForFormattedLineNumber&quot; would look strange as a part of SourceFrameContent interface with not formatted implementation and formatted implementation. Also creating new hierarchy just to hide contents of two tiny methods doesn&apos;t seem justified.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>344624</commentid>
    <comment_count>8</comment_count>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2011-02-03 03:55:29 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 80637 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=80637&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/inspector/front-end/SourceFrameContent.js:34
&gt; &gt; +        text = text.replace(/\r\n/g, &quot;\n&quot;);
&gt; 
&gt; This will make positions in the text differ from those in the original text.

WebKit lexer normalizes line endings (see http://trac.webkit.org/changeset/60790). Scripts are passed to VM with normalized line endings. However, requestContent returns content as is, with original line endings. That&apos;s why we have to normalize content here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>344631</commentid>
    <comment_count>9</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2011-02-03 04:41:40 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #6)
&gt; &gt; (From update of attachment 80637 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=80637&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/inspector/front-end/SourceFrameContent.js:34
&gt; &gt; &gt; +        text = text.replace(/\r\n/g, &quot;\n&quot;);
&gt; &gt; 
&gt; &gt; This will make positions in the text differ from those in the original text.
&gt; 
&gt; WebKit lexer normalizes line endings (see http://trac.webkit.org/changeset/60790). Scripts are passed to VM with normalized line endings. However, requestContent returns content as is, with original line endings. That&apos;s why we have to normalize content here.

It deserves e a detailed comment in the code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>345409</commentid>
    <comment_count>10</comment_count>
      <attachid>81200</attachid>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2011-02-04 02:19:39 -0800</bug_when>
    <thetext>Created attachment 81200
Rebase.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>345410</commentid>
    <comment_count>11</comment_count>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2011-02-04 02:19:52 -0800</bug_when>
    <thetext>&gt; &gt; WebKit lexer normalizes line endings (see http://trac.webkit.org/changeset/60790). Scripts are passed to VM with normalized line endings. However, requestContent returns content as is, with original line endings. That&apos;s why we have to normalize content here.
&gt; 
&gt; It deserves e a detailed comment in the code.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>346561</commentid>
    <comment_count>12</comment_count>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2011-02-07 07:16:08 -0800</bug_when>
    <thetext>Committed r77810: &lt;http://trac.webkit.org/changeset/77810&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>79404</attachid>
            <date>2011-01-19 02:12:41 -0800</date>
            <delta_ts>2011-01-31 06:35:45 -0800</delta_ts>
            <desc>Patch.</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>24305</size>
            <attacher name="Pavel Podivilov">podivilov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBhM2U1ZGM4Li4zNTNlMmY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDQg
QEAKKzIwMTEtMDEtMTkgIFBhdmVsIFBvZGl2aWxvdiAgPHBvZGl2aWxvdkBjaHJvbWl1bS5vcmc+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIElu
c3BlY3RvcjogaW1wbGVtZW50IGJlYXV0aWZpY2F0aW9uIG9mIHNjcmlwdHMgaW5saW5lZCBpbiBo
dG1sIGRvY3VtZW50cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTUyNzA2CisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29y
ZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9T
Y3JpcHRGb3JtYXR0ZXIuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0Rm9ybWF0dGVy
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRGb3JtYXR0ZXIucHJvdG90eXBlLmZvcm1h
dCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VGcmFtZS5qczoKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUuX2NyZWF0ZVRleHRWaWV3ZXIp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZS5zZXRFeGVjdXRp
b25MaW5lKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUuY2xl
YXJFeGVjdXRpb25MaW5lKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90
b3R5cGUuX2FkZEJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1l
LnByb3RvdHlwZS5fYnJlYWtwb2ludFJlbW92ZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNv
dXJjZUZyYW1lLnByb3RvdHlwZS5fbW91c2VEb3duKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5T
b3VyY2VGcmFtZS5wcm90b3R5cGUuZm9ybWF0U291cmNlLmRpZEZvcm1hdCk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLmZvcm1hdFNvdXJjZSk6CisgICAgICAg
ICogaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VGcmFtZU1vZGVsLmpzOiBBZGRlZC4gRW5jYXBz
dWxhdGVzIHNjcmlwdHMgbGF5b3V0IGluIHJlc291cmNlIGNvbnRlbnQuCisgICAgICAgIChXZWJJ
bnNwZWN0b3IuU291cmNlRnJhbWVNb2RlbCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNl
RnJhbWVNb2RlbC5wcm90b3R5cGUuZm9ybWF0LmRpZEZvcm1hdENodW5rcyk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuU291cmNlRnJhbWVNb2RlbC5wcm90b3R5cGUuZm9ybWF0KToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZU1vZGVsLnByb3RvdHlwZS5fc3BsaXRDb250ZW50SW50
b0NodW5rcyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWVNb2RlbC5wcm90b3R5
cGUuX2Zvcm1hdENodW5rcy5kaWRGb3JtYXQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJj
ZUZyYW1lTW9kZWwucHJvdG90eXBlLl9mb3JtYXRDaHVua3MpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLlNvdXJjZUZyYW1lTW9kZWwucHJvdG90eXBlLl9idWlsZENvbnRlbnRGcm9tQ2h1bmtzKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZU1vZGVsLnByb3RvdHlwZS5vcmlnaW5h
bExvY2F0aW9uVG9Gb3JtYXR0ZWRMaW5lTnVtYmVyKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5T
b3VyY2VGcmFtZU1vZGVsLnByb3RvdHlwZS5mb3JtYXR0ZWRMaW5lTnVtYmVyVG9PcmlnaW5hbExv
Y2F0aW9uKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZU1vZGVsLnByb3RvdHlw
ZS5fY29udmVydFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZU1v
ZGVsLnByb3RvdHlwZS5fbG9jYXRpb25Ub1Bvc2l0aW9uKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5Tb3VyY2VGcmFtZU1vZGVsLnByb3RvdHlwZS5fcG9zaXRpb25Ub0xvY2F0aW9uKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZU1vZGVsLnByb3RvdHlwZS5nZXQgX2xpbmVFbmRp
bmdzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZU1vZGVsLnByb3RvdHlwZS5n
ZXQgX2Zvcm1hdHRlZExpbmVFbmRpbmdzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5k
L1dlYktpdC5xcmM6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuaHRt
bDoKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL3V0aWxpdGllcy5qczoKKyAgICAgICAg
KCk6CisKIDIwMTEtMDEtMTggTU9SSVRBIEhhamltZSAgPG1vcnJpdGFAZ29vZ2xlLmNvbT4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBSeW9zdWtlIE5pd2EuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggMDYy
ODhmYy4uOTVkZDBhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisr
KyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtNDY4OCw2ICs0Njg4LDcgQEAKICAg
ICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL1NpZGViYXJUcmVlRWxlbWVudC5qcycsCiAg
ICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VDU1NUb2tlbml6ZXIuanMnLAog
ICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNlRnJhbWUuanMnLAorICAgICAg
ICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNlRnJhbWVNb2RlbC5qcycsCiAgICAgICAg
ICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VIVE1MVG9rZW5pemVyLmpzJywKICAgICAg
ICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZUphdmFTY3JpcHRUb2tlbml6ZXIuanMn
LAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNlVG9rZW5pemVyLmpzJywK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9q
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXggNTI2
YmIwNi4uOTQzNWJjYiAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ov
V2ViQ29yZS52Y3Byb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29y
ZS52Y3Byb2oKQEAgLTY1NjQxLDYgKzY1NjQxLDEwIEBACiAJCQkJCT4KIAkJCQk8L0ZpbGU+CiAJ
CQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFNvdXJj
ZUZyYW1lTW9kZWwuanMiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKIAkJCQkJUmVs
YXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFNvdXJjZUhUTUxUb2tlbml6ZXIuanMi
CiAJCQkJCT4KIAkJCQk8L0ZpbGU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL1NjcmlwdEZvcm1hdHRlci5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvU2NyaXB0Rm9ybWF0dGVyLmpzCmluZGV4IGJiMjFiYTMuLjJkZGZhZWMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0Rm9ybWF0
dGVyLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0Rm9y
bWF0dGVyLmpzCkBAIC0yOCwxMTMgKzI4LDMwIEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLVdl
Ykluc3BlY3Rvci5TY3JpcHRGb3JtYXR0ZXIgPSBmdW5jdGlvbihzb3VyY2UpCitXZWJJbnNwZWN0
b3IuU2NyaXB0Rm9ybWF0dGVyID0gZnVuY3Rpb24oKQogewotICAgIHRoaXMuX29yaWdpbmFsU291
cmNlID0gc291cmNlOwotICAgIHRoaXMuX29yaWdpbmFsTGluZUVuZGluZ3MgPSBzb3VyY2UuZmlu
ZEFsbCgiXG4iKTsKLSAgICB0aGlzLl9vcmlnaW5hbExpbmVFbmRpbmdzLnB1c2goc291cmNlLmxl
bmd0aCk7Ci19Ci0KLVdlYkluc3BlY3Rvci5TY3JpcHRGb3JtYXR0ZXIubG9jYXRpb25Ub1Bvc2l0
aW9uID0gZnVuY3Rpb24obGluZUVuZGluZ3MsIGxvY2F0aW9uKQotewotICAgIHZhciBwb3NpdGlv
biA9IGxvY2F0aW9uLmxpbmUgPyBsaW5lRW5kaW5nc1tsb2NhdGlvbi5saW5lIC0gMV0gKyAxIDog
MDsKLSAgICByZXR1cm4gcG9zaXRpb24gKyBsb2NhdGlvbi5jb2x1bW47Ci19Ci0KLVdlYkluc3Bl
Y3Rvci5TY3JpcHRGb3JtYXR0ZXIucG9zaXRpb25Ub0xvY2F0aW9uID0gZnVuY3Rpb24obGluZUVu
ZGluZ3MsIHBvc2l0aW9uKQotewotICAgIHZhciBsb2NhdGlvbiA9IHt9OwotICAgIGxvY2F0aW9u
LmxpbmUgPSBXZWJJbnNwZWN0b3IuU2NyaXB0Rm9ybWF0dGVyLnVwcGVyQm91bmQobGluZUVuZGlu
Z3MsIHBvc2l0aW9uIC0gMSk7Ci0gICAgaWYgKCFsb2NhdGlvbi5saW5lKQotICAgICAgICBsb2Nh
dGlvbi5jb2x1bW4gPSBwb3NpdGlvbjsKLSAgICBlbHNlCi0gICAgICAgIGxvY2F0aW9uLmNvbHVt
biA9IHBvc2l0aW9uIC0gbGluZUVuZGluZ3NbbG9jYXRpb24ubGluZSAtIDFdIC0gMTsKLSAgICBy
ZXR1cm4gbG9jYXRpb247Ci19Ci0KLVdlYkluc3BlY3Rvci5TY3JpcHRGb3JtYXR0ZXIudXBwZXJC
b3VuZCA9IGZ1bmN0aW9uKGFycmF5LCBudW1iZXIpCi17Ci0gICAgdmFyIGZpcnN0ID0gMDsKLSAg
ICB2YXIgY291bnQgPSBhcnJheS5sZW5ndGg7Ci0gICAgd2hpbGUgKGNvdW50ID4gMCkgewotICAg
ICAgdmFyIHN0ZXAgPSBjb3VudCA+PiAxOwotICAgICAgdmFyIG1pZGRsZSA9IGZpcnN0ICsgc3Rl
cDsKLSAgICAgIGlmIChudW1iZXIgPj0gYXJyYXlbbWlkZGxlXSkgewotICAgICAgICAgIGZpcnN0
ID0gbWlkZGxlICsgMTsKLSAgICAgICAgICBjb3VudCAtPSBzdGVwICsgMTsKLSAgICAgIH0gZWxz
ZQotICAgICAgICAgIGNvdW50ID0gc3RlcDsKLSAgICB9Ci0gICAgcmV0dXJuIGZpcnN0OwogfQog
CiBXZWJJbnNwZWN0b3IuU2NyaXB0Rm9ybWF0dGVyLnByb3RvdHlwZSA9IHsKLSAgICBmb3JtYXQ6
IGZ1bmN0aW9uKCkKKyAgICBmb3JtYXQ6IGZ1bmN0aW9uKHNvdXJjZSwgY2FsbGJhY2spCiAgICAg
ewotICAgICAgICB0aGlzLl9mb3JtYXR0ZWQgPSB0cnVlOwotICAgICAgICB0aGlzLl9mb3JtYXR0
ZWRTb3VyY2UgPSB0aGlzLl9vcmlnaW5hbFNvdXJjZS5yZXBsYWNlKC87L2csICI7XG4iKTsKLSAg
ICAgICAgdGhpcy5fZm9ybWF0dGVkTGluZUVuZGluZ3MgPSB0aGlzLl9mb3JtYXR0ZWRTb3VyY2Uu
ZmluZEFsbCgiXG4iKTsKLSAgICAgICAgdGhpcy5fZm9ybWF0dGVkTGluZUVuZGluZ3MucHVzaCh0
aGlzLl9mb3JtYXR0ZWRTb3VyY2UubGVuZ3RoKTsKLQotICAgICAgICB0aGlzLl9vcmlnaW5hbFN5
bWJvbFBvc2l0aW9ucyA9IFtdOwotICAgICAgICB0aGlzLl9mb3JtYXR0ZWRTeW1ib2xQb3NpdGlv
bnMgPSBbXTsKKyAgICAgICAgdmFyIGZvcm1hdHRlZFNvdXJjZSA9IHNvdXJjZS5yZXBsYWNlKC87
L2csICI7XG4iKTsKKyAgICAgICAgdmFyIG1hcHBpbmcgPSB7IG9yaWdpbmFsOiBbXSwgZm9ybWF0
dGVkOiBbXSB9OwogICAgICAgICB2YXIgbGFzdENvZGVQb3NpdGlvbiA9IDA7CiAgICAgICAgIHZh
ciByZWdleHAgPSAvW1wkXC5cd10rfHt8fXw7L2c7CiAgICAgICAgIHdoaWxlICh0cnVlKSB7Ci0g
ICAgICAgICAgICB2YXIgbWF0Y2ggPSByZWdleHAuZXhlYyh0aGlzLl9mb3JtYXR0ZWRTb3VyY2Up
OworICAgICAgICAgICAgdmFyIG1hdGNoID0gcmVnZXhwLmV4ZWMoZm9ybWF0dGVkU291cmNlKTsK
ICAgICAgICAgICAgIGlmICghbWF0Y2gpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICB2YXIgcG9zaXRpb24gPSB0aGlzLl9vcmlnaW5hbFNvdXJjZS5pbmRleE9mKG1hdGNoWzBd
LCBsYXN0Q29kZVBvc2l0aW9uKTsKKyAgICAgICAgICAgIHZhciBwb3NpdGlvbiA9IHNvdXJjZS5p
bmRleE9mKG1hdGNoWzBdLCBsYXN0Q29kZVBvc2l0aW9uKTsKICAgICAgICAgICAgIGlmIChwb3Np
dGlvbiA9PT0gLTEpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB0aGlz
Ll9vcmlnaW5hbFN5bWJvbFBvc2l0aW9ucy5wdXNoKHBvc2l0aW9uKTsKLSAgICAgICAgICAgIHRo
aXMuX2Zvcm1hdHRlZFN5bWJvbFBvc2l0aW9ucy5wdXNoKG1hdGNoLmluZGV4KTsKKyAgICAgICAg
ICAgIG1hcHBpbmcub3JpZ2luYWwucHVzaChwb3NpdGlvbik7CisgICAgICAgICAgICBtYXBwaW5n
LmZvcm1hdHRlZC5wdXNoKG1hdGNoLmluZGV4KTsKICAgICAgICAgICAgIGxhc3RDb2RlUG9zaXRp
b24gPSBwb3NpdGlvbiArIG1hdGNoWzBdLmxlbmd0aDsKICAgICAgICAgfQotICAgICAgICB0aGlz
Ll9vcmlnaW5hbFN5bWJvbFBvc2l0aW9ucy5wdXNoKHRoaXMuX29yaWdpbmFsU291cmNlLmxlbmd0
aCk7Ci0gICAgICAgIHRoaXMuX2Zvcm1hdHRlZFN5bWJvbFBvc2l0aW9ucy5wdXNoKHRoaXMuX2Zv
cm1hdHRlZFNvdXJjZS5sZW5ndGgpOwotCi0gICAgICAgIHJldHVybiB0aGlzLl9mb3JtYXR0ZWRT
b3VyY2U7Ci0gICAgfSwKLQotICAgIG9yaWdpbmFsTGluZU51bWJlclRvRm9ybWF0dGVkTGluZU51
bWJlcjogZnVuY3Rpb24ob3JpZ2luYWxMaW5lTnVtYmVyKQotICAgIHsKLSAgICAgICAgaWYgKCF0
aGlzLl9mb3JtYXR0ZWQpCi0gICAgICAgICAgICByZXR1cm4gb3JpZ2luYWxMaW5lTnVtYmVyOwot
ICAgICAgICB2YXIgb3JpZ2luYWxQb3NpdGlvbiA9IFdlYkluc3BlY3Rvci5TY3JpcHRGb3JtYXR0
ZXIubG9jYXRpb25Ub1Bvc2l0aW9uKHRoaXMuX29yaWdpbmFsTGluZUVuZGluZ3MsIHsgbGluZTog
b3JpZ2luYWxMaW5lTnVtYmVyLCBjb2x1bW46IDAgfSk7Ci0gICAgICAgIHJldHVybiB0aGlzLm9y
aWdpbmFsUG9zaXRpb25Ub0Zvcm1hdHRlZExpbmVOdW1iZXIob3JpZ2luYWxQb3NpdGlvbik7Ci0g
ICAgfSwKLQotICAgIGZvcm1hdHRlZExpbmVOdW1iZXJUb09yaWdpbmFsTGluZU51bWJlcjogZnVu
Y3Rpb24oZm9ybWF0dGVkTGluZU51bWJlcikKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5fZm9y
bWF0dGVkKQotICAgICAgICAgICAgcmV0dXJuIGZvcm1hdHRlZExpbmVOdW1iZXI7Ci0gICAgICAg
IHZhciBvcmlnaW5hbFBvc2l0aW9uID0gdGhpcy5mb3JtYXR0ZWRMaW5lTnVtYmVyVG9PcmlnaW5h
bFBvc2l0aW9uKGZvcm1hdHRlZExpbmVOdW1iZXIpOwotICAgICAgICByZXR1cm4gV2ViSW5zcGVj
dG9yLlNjcmlwdEZvcm1hdHRlci5wb3NpdGlvblRvTG9jYXRpb24odGhpcy5fb3JpZ2luYWxMaW5l
RW5kaW5ncywgb3JpZ2luYWxQb3NpdGlvbikubGluZTsKLSAgICB9LAotCi0gICAgb3JpZ2luYWxQ
b3NpdGlvblRvRm9ybWF0dGVkTGluZU51bWJlcjogZnVuY3Rpb24ob3JpZ2luYWxQb3NpdGlvbikK
LSAgICB7Ci0gICAgICAgIHZhciBsaW5lRW5kaW5ncyA9IHRoaXMuX2Zvcm1hdHRlZCA/IHRoaXMu
X2Zvcm1hdHRlZExpbmVFbmRpbmdzIDogdGhpcy5fb3JpZ2luYWxMaW5lRW5kaW5nczsKLSAgICAg
ICAgaWYgKHRoaXMuX2Zvcm1hdHRlZCkKLSAgICAgICAgICAgIGZvcm1hdHRlZFBvc2l0aW9uID0g
dGhpcy5fY29udmVydFBvc2l0aW9uKHRoaXMuX29yaWdpbmFsU3ltYm9sUG9zaXRpb25zLCB0aGlz
Ll9mb3JtYXR0ZWRTeW1ib2xQb3NpdGlvbnMsIG9yaWdpbmFsUG9zaXRpb24pOwotICAgICAgICBy
ZXR1cm4gV2ViSW5zcGVjdG9yLlNjcmlwdEZvcm1hdHRlci5wb3NpdGlvblRvTG9jYXRpb24obGlu
ZUVuZGluZ3MsIGZvcm1hdHRlZFBvc2l0aW9uKS5saW5lOwotICAgIH0sCi0KLSAgICBmb3JtYXR0
ZWRMaW5lTnVtYmVyVG9PcmlnaW5hbFBvc2l0aW9uOiBmdW5jdGlvbihmb3JtYXR0ZWRMaW5lTnVt
YmVyKQotICAgIHsKLSAgICAgICAgdmFyIGxpbmVFbmRpbmdzID0gdGhpcy5fZm9ybWF0dGVkID8g
dGhpcy5fZm9ybWF0dGVkTGluZUVuZGluZ3MgOiB0aGlzLl9vcmlnaW5hbExpbmVFbmRpbmdzOwot
ICAgICAgICB2YXIgZm9ybWF0dGVkUG9zaXRpb24gPSBXZWJJbnNwZWN0b3IuU2NyaXB0Rm9ybWF0
dGVyLmxvY2F0aW9uVG9Qb3NpdGlvbihsaW5lRW5kaW5ncywgeyBsaW5lOiBmb3JtYXR0ZWRMaW5l
TnVtYmVyLCBjb2x1bW46IDAgfSk7Ci0gICAgICAgIGlmICghdGhpcy5fZm9ybWF0dGVkKQotICAg
ICAgICAgICAgcmV0dXJuIGZvcm1hdHRlZFBvc2l0aW9uOwotICAgICAgICByZXR1cm4gdGhpcy5f
Y29udmVydFBvc2l0aW9uKHRoaXMuX2Zvcm1hdHRlZFN5bWJvbFBvc2l0aW9ucywgdGhpcy5fb3Jp
Z2luYWxTeW1ib2xQb3NpdGlvbnMsIGZvcm1hdHRlZFBvc2l0aW9uKTsKLSAgICB9LAotCi0gICAg
X2NvbnZlcnRQb3NpdGlvbjogZnVuY3Rpb24oc3ltYm9sUG9zaXRpb25zMSwgc3ltYm9sUG9zaXRp
b25zMiwgcG9zaXRpb24pCi0gICAgewotICAgICAgICB2YXIgaW5kZXggPSBXZWJJbnNwZWN0b3Iu
U2NyaXB0Rm9ybWF0dGVyLnVwcGVyQm91bmQoc3ltYm9sUG9zaXRpb25zMSwgcG9zaXRpb24pOwot
ICAgICAgICBpZiAoaW5kZXggPT09IHN5bWJvbFBvc2l0aW9uczIubGVuZ3RoIC0gMSkKLSAgICAg
ICAgICAgIHJldHVybiBzeW1ib2xQb3NpdGlvbnMyW2luZGV4XSAtIDE7Ci0gICAgICAgIHJldHVy
biBzeW1ib2xQb3NpdGlvbnMyW2luZGV4XTsKKyAgICAgICAgbWFwcGluZy5vcmlnaW5hbC5wdXNo
KHNvdXJjZS5sZW5ndGgpOworICAgICAgICBtYXBwaW5nLmZvcm1hdHRlZC5wdXNoKGZvcm1hdHRl
ZFNvdXJjZS5sZW5ndGgpOworICAgICAgICBjYWxsYmFjayhmb3JtYXR0ZWRTb3VyY2UsIG1hcHBp
bmcpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvU291cmNlRnJhbWUuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L1NvdXJjZUZyYW1lLmpzCmluZGV4IGRhOWY0ZjIuLjU1ZjI0NmEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNlRnJhbWUuanMKKysrIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VGcmFtZS5qcwpAQCAtMTU1LDcgKzE1
NSw3IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7CiAgICAgewogICAg
ICAgICB0aGlzLl9jb250ZW50ID0gY29udGVudDsKICAgICAgICAgdGhpcy5fdGV4dE1vZGVsLnNl
dFRleHQobnVsbCwgY29udGVudCk7Ci0gICAgICAgIHRoaXMuX2Zvcm1hdHRlciA9IG5ldyBXZWJJ
bnNwZWN0b3IuU2NyaXB0Rm9ybWF0dGVyKGNvbnRlbnQpOworICAgICAgICB0aGlzLl9tb2RlbCA9
IG5ldyBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWVNb2RlbChjb250ZW50LCB0aGlzLl9jb250ZW50
UHJvdmlkZXIuc2NyaXB0cygpKTsKIAogICAgICAgICB0aGlzLl90ZXh0Vmlld2VyID0gbmV3IFdl
Ykluc3BlY3Rvci5UZXh0Vmlld2VyKHRoaXMuX3RleHRNb2RlbCwgV2ViSW5zcGVjdG9yLnBsYXRm
b3JtLCB0aGlzLl91cmwpOwogICAgICAgICB2YXIgZWxlbWVudCA9IHRoaXMuX3RleHRWaWV3ZXIu
ZWxlbWVudDsKQEAgLTMwNSw3ICszMDUsNyBAQCBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJv
dG90eXBlID0gewogICAgICAgICB0aGlzLl9leGVjdXRpb25MaW5lID0gbGluZU51bWJlcjsKICAg
ICAgICAgaWYgKCF0aGlzLl90ZXh0Vmlld2VyKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB2YXIgdGV4dFZpZXdlckxpbmVOdW1iZXIgPSB0aGlzLl9mb3JtYXR0ZXIub3JpZ2luYWxMaW5l
TnVtYmVyVG9Gb3JtYXR0ZWRMaW5lTnVtYmVyKHRoaXMuX2V4ZWN1dGlvbkxpbmUgLSAxKTsKKyAg
ICAgICAgdmFyIHRleHRWaWV3ZXJMaW5lTnVtYmVyID0gdGhpcy5fbW9kZWwub3JpZ2luYWxMb2Nh
dGlvblRvRm9ybWF0dGVkTGluZU51bWJlcih0aGlzLl9leGVjdXRpb25MaW5lIC0gMSwgMCk7CiAg
ICAgICAgIHRoaXMuX3RleHRWaWV3ZXIuYWRkRGVjb3JhdGlvbih0ZXh0Vmlld2VyTGluZU51bWJl
ciwgIndlYmtpdC1leGVjdXRpb24tbGluZSIpOwogICAgIH0sCiAKQEAgLTMxMyw3ICszMTMsNyBA
QCBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlID0gewogICAgIHsKICAgICAgICAg
aWYgKCF0aGlzLl90ZXh0Vmlld2VyKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB2YXIg
dGV4dFZpZXdlckxpbmVOdW1iZXIgPSB0aGlzLl9mb3JtYXR0ZXIub3JpZ2luYWxMaW5lTnVtYmVy
VG9Gb3JtYXR0ZWRMaW5lTnVtYmVyKHRoaXMuX2V4ZWN1dGlvbkxpbmUgLSAxKTsKKyAgICAgICAg
dmFyIHRleHRWaWV3ZXJMaW5lTnVtYmVyID0gdGhpcy5fbW9kZWwub3JpZ2luYWxMb2NhdGlvblRv
Rm9ybWF0dGVkTGluZU51bWJlcih0aGlzLl9leGVjdXRpb25MaW5lIC0gMSwgMCk7CiAgICAgICAg
IHRoaXMuX3RleHRWaWV3ZXIucmVtb3ZlRGVjb3JhdGlvbih0ZXh0Vmlld2VyTGluZU51bWJlciwg
IndlYmtpdC1leGVjdXRpb24tbGluZSIpOwogICAgICAgICBkZWxldGUgdGhpcy5fZXhlY3V0aW9u
TGluZTsKICAgICB9LApAQCAtNDE2LDE0ICs0MTYsMTEgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUZy
YW1lLnByb3RvdHlwZSA9IHsKIAogICAgIF9hZGRCcmVha3BvaW50OiBmdW5jdGlvbihicmVha3Bv
aW50KQogICAgIHsKLSAgICAgICAgdmFyIHRleHRWaWV3ZXJMaW5lTnVtYmVyID0gdGhpcy5fZm9y
bWF0dGVyLm9yaWdpbmFsTGluZU51bWJlclRvRm9ybWF0dGVkTGluZU51bWJlcihicmVha3BvaW50
LmxpbmUgLSAxKTsKKyAgICAgICAgdmFyIHRleHRWaWV3ZXJMaW5lTnVtYmVyID0gdGhpcy5fbW9k
ZWwub3JpZ2luYWxMb2NhdGlvblRvRm9ybWF0dGVkTGluZU51bWJlcihicmVha3BvaW50LmxpbmUg
LSAxLCAwKTsKICAgICAgICAgaWYgKHRleHRWaWV3ZXJMaW5lTnVtYmVyID49IHRoaXMuX3RleHRN
b2RlbC5saW5lc0NvdW50KQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGJyZWFrcG9p
bnQuYWRkRXZlbnRMaXN0ZW5lcigiZW5hYmxlLWNoYW5nZWQiLCB0aGlzLl9icmVha3BvaW50Q2hh
bmdlZCwgdGhpcyk7Ci0gICAgICAgIGJyZWFrcG9pbnQuYWRkRXZlbnRMaXN0ZW5lcigiY29uZGl0
aW9uLWNoYW5nZWQiLCB0aGlzLl9icmVha3BvaW50Q2hhbmdlZCwgdGhpcyk7CiAgICAgICAgIGJy
ZWFrcG9pbnQuYWRkRXZlbnRMaXN0ZW5lcigicmVtb3ZlZCIsIHRoaXMuX2JyZWFrcG9pbnRSZW1v
dmVkLCB0aGlzKTsKLQogICAgICAgICB0aGlzLl9zZXRCcmVha3BvaW50RGVjb3JhdGlvbih0ZXh0
Vmlld2VyTGluZU51bWJlciwgYnJlYWtwb2ludC5lbmFibGVkLCAhIWJyZWFrcG9pbnQuY29uZGl0
aW9uKTsKICAgICB9LAogCkBAIC00MzEsMjEgKzQyOCwxMSBAQCBXZWJJbnNwZWN0b3IuU291cmNl
RnJhbWUucHJvdG90eXBlID0gewogICAgIHsKICAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBldmVu
dC50YXJnZXQ7CiAKLSAgICAgICAgYnJlYWtwb2ludC5yZW1vdmVFdmVudExpc3RlbmVyKCJlbmFi
bGUtY2hhbmdlZCIsIG51bGwsIHRoaXMpOwotICAgICAgICBicmVha3BvaW50LnJlbW92ZUV2ZW50
TGlzdGVuZXIoImNvbmRpdGlvbi1jaGFuZ2VkIiwgbnVsbCwgdGhpcyk7CiAgICAgICAgIGJyZWFr
cG9pbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVtb3ZlZCIsIG51bGwsIHRoaXMpOwotCi0gICAg
ICAgIHZhciB0ZXh0Vmlld2VyTGluZU51bWJlciA9IHRoaXMuX2Zvcm1hdHRlci5vcmlnaW5hbExp
bmVOdW1iZXJUb0Zvcm1hdHRlZExpbmVOdW1iZXIoYnJlYWtwb2ludC5saW5lIC0gMSk7CisgICAg
ICAgIHZhciB0ZXh0Vmlld2VyTGluZU51bWJlciA9IHRoaXMuX21vZGVsLm9yaWdpbmFsTG9jYXRp
b25Ub0Zvcm1hdHRlZExpbmVOdW1iZXIoYnJlYWtwb2ludC5saW5lIC0gMSwgMCk7CiAgICAgICAg
IHRoaXMuX3JlbW92ZUJyZWFrcG9pbnREZWNvcmF0aW9uKHRleHRWaWV3ZXJMaW5lTnVtYmVyKTsK
ICAgICB9LAogCi0gICAgX2JyZWFrcG9pbnRDaGFuZ2VkOiBmdW5jdGlvbihldmVudCkKLSAgICB7
Ci0gICAgICAgIHZhciBicmVha3BvaW50ID0gZXZlbnQudGFyZ2V0OwotICAgICAgICB2YXIgdGV4
dFZpZXdlckxpbmVOdW1iZXIgPSB0aGlzLl9mb3JtYXR0ZXIub3JpZ2luYWxMaW5lTnVtYmVyVG9G
b3JtYXR0ZWRMaW5lTnVtYmVyKGJyZWFrcG9pbnQubGluZSAtIDEpOwotICAgICAgICB0aGlzLl9z
ZXRCcmVha3BvaW50RGVjb3JhdGlvbih0ZXh0Vmlld2VyTGluZU51bWJlciwgYnJlYWtwb2ludC5l
bmFibGVkLCAhIWJyZWFrcG9pbnQuY29uZGl0aW9uKTsKLSAgICB9LAotCiAgICAgX3NldEJyZWFr
cG9pbnREZWNvcmF0aW9uOiBmdW5jdGlvbihsaW5lTnVtYmVyLCBlbmFibGVkLCBoYXNDb25kaXRp
b24pCiAgICAgewogICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLmJlZ2luVXBkYXRlcygpOwpAQCAt
NDc5LDcgKzQ2Niw3IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7CiAg
ICAgICAgIGlmICghdGFyZ2V0KQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB2YXIgdGV4
dFZpZXdlckxpbmVOdW1iZXIgPSB0YXJnZXQucGFyZW50RWxlbWVudC5saW5lTnVtYmVyOwotICAg
ICAgICB2YXIgb3JpZ2luYWxMaW5lTnVtYmVyID0gdGhpcy5fZm9ybWF0dGVyLmZvcm1hdHRlZExp
bmVOdW1iZXJUb09yaWdpbmFsTGluZU51bWJlcih0ZXh0Vmlld2VyTGluZU51bWJlcik7CisgICAg
ICAgIHZhciBvcmlnaW5hbExpbmVOdW1iZXIgPSB0aGlzLl9tb2RlbC5mb3JtYXR0ZWRMaW5lTnVt
YmVyVG9PcmlnaW5hbExvY2F0aW9uKHRleHRWaWV3ZXJMaW5lTnVtYmVyKS5saW5lOwogCiAgICAg
ICAgIHZhciBjb250ZXh0TWVudSA9IG5ldyBXZWJJbnNwZWN0b3IuQ29udGV4dE1lbnUoKTsKIApA
QCAtNTQ0LDcgKzUzMSw3IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7
CiAgICAgICAgIHZhciB0YXJnZXQgPSBldmVudC50YXJnZXQuZW5jbG9zaW5nTm9kZU9yU2VsZldp
dGhDbGFzcygid2Via2l0LWxpbmUtbnVtYmVyIik7CiAgICAgICAgIGlmICghdGFyZ2V0KQogICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB2YXIgb3JpZ2luYWxMaW5lTnVtYmVyID0gdGhpcy5f
Zm9ybWF0dGVyLmZvcm1hdHRlZExpbmVOdW1iZXJUb09yaWdpbmFsTGluZU51bWJlcih0YXJnZXQu
cGFyZW50RWxlbWVudC5saW5lTnVtYmVyKTsKKyAgICAgICAgdmFyIG9yaWdpbmFsTGluZU51bWJl
ciA9IHRoaXMuX21vZGVsLmZvcm1hdHRlZExpbmVOdW1iZXJUb09yaWdpbmFsTG9jYXRpb24odGFy
Z2V0LnBhcmVudEVsZW1lbnQubGluZU51bWJlcikubGluZTsKIAogICAgICAgICB2YXIgYnJlYWtw
b2ludCA9IHRoaXMuX2ZpbmRCcmVha3BvaW50KG9yaWdpbmFsTGluZU51bWJlcik7CiAgICAgICAg
IGlmIChicmVha3BvaW50KSB7CkBAIC03ODMsMTEgKzc3MCwxNSBAQCBXZWJJbnNwZWN0b3IuU291
cmNlRnJhbWUucHJvdG90eXBlID0gewogCiAgICAgZm9ybWF0U291cmNlOiBmdW5jdGlvbigpCiAg
ICAgewotICAgICAgICBpZiAoIXRoaXMuX2Zvcm1hdHRlcikKKyAgICAgICAgaWYgKCF0aGlzLl9t
b2RlbCkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICB0aGlzLl90ZXh0TW9kZWwuc2V0
VGV4dChudWxsLCB0aGlzLl9mb3JtYXR0ZXIuZm9ybWF0KCkpOwotICAgICAgICB0aGlzLl9zZXRU
ZXh0Vmlld2VyRGVjb3JhdGlvbnMoKTsKKyAgICAgICAgZnVuY3Rpb24gZGlkRm9ybWF0KGZvcm1h
dHRlZENvbnRlbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRoaXMuX3RleHRNb2RlbC5zZXRU
ZXh0KG51bGwsIGZvcm1hdHRlZENvbnRlbnQpOworICAgICAgICAgICAgdGhpcy5fc2V0VGV4dFZp
ZXdlckRlY29yYXRpb25zKCk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fbW9kZWwuZm9ybWF0
KGRpZEZvcm1hdC5iaW5kKHRoaXMpKQogICAgIH0sCiAKICAgICBfY29udGludWVUb0xpbmU6IGZ1
bmN0aW9uKGxpbmVOdW1iZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL1NvdXJjZUZyYW1lTW9kZWwuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL1NvdXJjZUZyYW1lTW9kZWwuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uNDRlNGU3YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvU291cmNlRnJhbWVNb2RlbC5qcwpAQCAtMCwwICsxLDE5NSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBk
aXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK1dlYklu
c3BlY3Rvci5Tb3VyY2VGcmFtZU1vZGVsID0gZnVuY3Rpb24oY29udGVudCwgc2NyaXB0cykKK3sK
KyAgICB0aGlzLl9jb250ZW50ID0gY29udGVudDsKKyAgICB0aGlzLl9zY3JpcHRzID0gc2NyaXB0
czsKK30KKworV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lTW9kZWwucHJvdG90eXBlID0geworICAg
IGZvcm1hdDogZnVuY3Rpb24oY2FsbGJhY2spCisgICAgeworICAgICAgICB2YXIgY2h1bmtzID0g
dGhpcy5fc3BsaXRDb250ZW50SW50b0NodW5rcyh0aGlzLl9jb250ZW50LCB0aGlzLl9zY3JpcHRM
b2NhdGlvbnMpOworCisgICAgICAgIGZ1bmN0aW9uIGRpZEZvcm1hdENodW5rcygpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHZhciByZXN1bHQgPSB0aGlzLl9idWlsZENvbnRlbnRGcm9tQ2h1bmtz
KGNodW5rcyk7CisgICAgICAgICAgICB0aGlzLl9mb3JtYXR0ZWRDb250ZW50ID0gcmVzdWx0LmNv
bnRlbnQ7CisgICAgICAgICAgICB0aGlzLl9tYXBwaW5nID0gcmVzdWx0Lm1hcHBpbmc7CisgICAg
ICAgICAgICB0aGlzLl9mb3JtYXR0ZWQgPSB0cnVlOworICAgICAgICAgICAgY2FsbGJhY2sodGhp
cy5fZm9ybWF0dGVkQ29udGVudCk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fZm9ybWF0Q2h1
bmtzKGNodW5rcywgMCwgbmV3IFdlYkluc3BlY3Rvci5TY3JpcHRGb3JtYXR0ZXIoKSwgZGlkRm9y
bWF0Q2h1bmtzLmJpbmQodGhpcykpOworICAgIH0sCisKKyAgICBfc3BsaXRDb250ZW50SW50b0No
dW5rczogZnVuY3Rpb24oY29udGVudCwgc2NyaXB0TG9jYXRpb25zKQorICAgIHsKKyAgICAgICAg
dmFyIGNodW5rcyA9IFtdOworICAgICAgICB2YXIgY3VycmVudFBvc2l0aW9uID0gMDsKKyAgICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzY3JpcHRMb2NhdGlvbnMubGVuZ3RoOyArK2kpIHsKKyAg
ICAgICAgICAgIHZhciBzY3JpcHRMb2NhdGlvbiA9IHNjcmlwdExvY2F0aW9uc1tpXTsKKyAgICAg
ICAgICAgIGlmIChjdXJyZW50UG9zaXRpb24gPCBzY3JpcHRMb2NhdGlvbi5vZmZzZXQpIHsKKyAg
ICAgICAgICAgICAgICB2YXIgY2h1bmsgPSB7fTsKKyAgICAgICAgICAgICAgICBjaHVuay5jb250
ZW50ID0gY29udGVudC5zdWJzdHJpbmcoY3VycmVudFBvc2l0aW9uLCBzY3JpcHRMb2NhdGlvbi5v
ZmZzZXQpOworICAgICAgICAgICAgICAgIGNodW5rLmlzU2NyaXB0ID0gZmFsc2U7CisgICAgICAg
ICAgICAgICAgY2h1bmtzLnB1c2goY2h1bmspOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
dmFyIGNodW5rID0ge307CisgICAgICAgICAgICBjaHVuay5jb250ZW50ID0gY29udGVudC5zdWJz
dHIoc2NyaXB0TG9jYXRpb24ub2Zmc2V0LCBzY3JpcHRMb2NhdGlvbi5sZW5ndGgpOworICAgICAg
ICAgICAgY2h1bmsub2Zmc2V0ID0gc2NyaXB0TG9jYXRpb24ub2Zmc2V0OworICAgICAgICAgICAg
Y2h1bmsuaXNTY3JpcHQgPSB0cnVlOworICAgICAgICAgICAgY2h1bmtzLnB1c2goY2h1bmspOwor
ICAgICAgICAgICAgY3VycmVudFBvc2l0aW9uID0gc2NyaXB0TG9jYXRpb24ub2Zmc2V0ICsgc2Ny
aXB0TG9jYXRpb24ubGVuZ3RoOworICAgICAgICB9CisgICAgICAgIGlmIChjdXJyZW50UG9zaXRp
b24gPCB0aGlzLl9jb250ZW50Lmxlbmd0aCkgeworICAgICAgICAgICAgdmFyIGNodW5rID0ge307
CisgICAgICAgICAgICBjaHVuay5jb250ZW50ID0gdGhpcy5fY29udGVudC5zdWJzdHIoY3VycmVu
dFBvc2l0aW9uKTsKKyAgICAgICAgICAgIGNodW5rLmlzU2NyaXB0ID0gZmFsc2U7CisgICAgICAg
ICAgICBjaHVua3MucHVzaChjaHVuayk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGNodW5r
czsKKyAgICB9LAorCisgICAgX2Zvcm1hdENodW5rczogZnVuY3Rpb24oY2h1bmtzLCBpbmRleCwg
Zm9ybWF0dGVyLCBjYWxsYmFjaykKKyAgICB7CisgICAgICAgIHdoaWxlKHRydWUpIHsKKyAgICAg
ICAgICAgIGlmIChpbmRleCA9PT0gY2h1bmtzLmxlbmd0aCkgeworICAgICAgICAgICAgICAgIGNh
bGxiYWNrKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgdmFyIGNodW5rID0gY2h1bmtzW2luZGV4KytdOworICAgICAgICAgICAgaWYgKGNodW5r
LmlzU2NyaXB0KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAg
ZnVuY3Rpb24gZGlkRm9ybWF0KGZvcm1hdHRlZFNjcmlwdFNvdXJjZSwgbWFwcGluZykKKyAgICAg
ICAgeworICAgICAgICAgICAgY2h1bmsuY29udGVudCA9IGZvcm1hdHRlZFNjcmlwdFNvdXJjZTsK
KyAgICAgICAgICAgIGNodW5rLm1hcHBpbmcgPSBtYXBwaW5nOworICAgICAgICAgICAgdGhpcy5f
Zm9ybWF0Q2h1bmtzKGNodW5rcywgaW5kZXgsIGZvcm1hdHRlciwgY2FsbGJhY2spOworICAgICAg
ICB9CisgICAgICAgIGZvcm1hdHRlci5mb3JtYXQoY2h1bmsuY29udGVudCwgZGlkRm9ybWF0LmJp
bmQodGhpcykpOworICAgIH0sCisKKyAgICBfYnVpbGRDb250ZW50RnJvbUNodW5rczogZnVuY3Rp
b24oY2h1bmtzKQorICAgIHsKKyAgICAgICAgdmFyIGNvbnRlbnQgPSAiIjsKKyAgICAgICAgdmFy
IG1hcHBpbmcgPSB7IG9yaWdpbmFsOiBbXSwgZm9ybWF0dGVkOiBbXSB9OworICAgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IGNodW5rcy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgdmFyIGNo
dW5rID0gY2h1bmtzW2ldOworICAgICAgICAgICAgaWYgKGNodW5rLmlzU2NyaXB0KSB7CisgICAg
ICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBjaHVuay5tYXBwaW5nLm9yaWdpbmFsLmxl
bmd0aDsgKytqKSB7CisgICAgICAgICAgICAgICAgICAgIG1hcHBpbmcub3JpZ2luYWwucHVzaChj
aHVuay5tYXBwaW5nLm9yaWdpbmFsW2pdICsgY2h1bmsub2Zmc2V0KTsKKyAgICAgICAgICAgICAg
ICAgICAgbWFwcGluZy5mb3JtYXR0ZWQucHVzaChjaHVuay5tYXBwaW5nLmZvcm1hdHRlZFtqXSAr
IGNvbnRlbnQubGVuZ3RoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBjb250ZW50ICs9IGNodW5rLmNvbnRlbnQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIHsgY29udGVudDogY29udGVudCwgbWFwcGluZzogbWFwcGluZyB9OworICAgIH0sCisKKyAg
ICBnZXQgX3NjcmlwdExvY2F0aW9ucygpCisgICAgeworICAgICAgICBpZiAodGhpcy5fX3Njcmlw
dExvY2F0aW9ucykKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9fc2NyaXB0TG9jYXRpb25zOwor
ICAgICAgICB0aGlzLl9fc2NyaXB0TG9jYXRpb25zID0gW107CisgICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgdGhpcy5fc2NyaXB0cy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgdmFyIHNj
cmlwdCA9IHRoaXMuX3NjcmlwdHNbaV07CisgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gdGhpcy5f
bG9jYXRpb25Ub1Bvc2l0aW9uKHRoaXMuX2xpbmVFbmRpbmdzLCBzY3JpcHQubGluZU9mZnNldCwg
c2NyaXB0LmNvbHVtbk9mZnNldCk7CisgICAgICAgICAgICB0aGlzLl9fc2NyaXB0TG9jYXRpb25z
LnB1c2goeyBvZmZzZXQ6IG9mZnNldCwgbGVuZ3RoOiBzY3JpcHQubGVuZ3RoIH0pOworICAgICAg
ICB9CisgICAgICAgIHRoaXMuX19zY3JpcHRMb2NhdGlvbnMuc29ydChmdW5jdGlvbih4LCB5KSB7
IHJldHVybiB4Lm9mZnNldCAtIHkub2Zmc2V0OyB9KTsKKyAgICAgICAgcmV0dXJuIHRoaXMuX19z
Y3JpcHRMb2NhdGlvbnM7CisgICAgfSwKKworICAgIG9yaWdpbmFsTG9jYXRpb25Ub0Zvcm1hdHRl
ZExpbmVOdW1iZXI6IGZ1bmN0aW9uKGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcikKKyAgICB7Cisg
ICAgICAgIGlmICghdGhpcy5fZm9ybWF0dGVkKQorICAgICAgICAgICAgcmV0dXJuIGxpbmVOdW1i
ZXI7CisgICAgICAgIHZhciBwb3NpdGlvbiA9IHRoaXMuX2xvY2F0aW9uVG9Qb3NpdGlvbih0aGlz
Ll9saW5lRW5kaW5ncywgbGluZU51bWJlciwgY29sdW1uTnVtYmVyKTsKKyAgICAgICAgdmFyIGZv
cm1hdHRlZFBvc2l0aW9uID0gdGhpcy5fY29udmVydFBvc2l0aW9uKHRoaXMuX21hcHBpbmcub3Jp
Z2luYWwsIHRoaXMuX21hcHBpbmcuZm9ybWF0dGVkLCBwb3NpdGlvbik7CisgICAgICAgIHJldHVy
biB0aGlzLl9wb3NpdGlvblRvTG9jYXRpb24odGhpcy5fZm9ybWF0dGVkTGluZUVuZGluZ3MsIGZv
cm1hdHRlZFBvc2l0aW9uKS5saW5lOworICAgIH0sCisKKyAgICBmb3JtYXR0ZWRMaW5lTnVtYmVy
VG9PcmlnaW5hbExvY2F0aW9uOiBmdW5jdGlvbihsaW5lTnVtYmVyKQorICAgIHsKKyAgICAgICAg
aWYgKCF0aGlzLl9mb3JtYXR0ZWQpCisgICAgICAgICAgICByZXR1cm4geyBsaW5lOiBsaW5lTnVt
YmVyLCBjb2x1bW46IDAgfTsKKyAgICAgICAgdmFyIGZvcm1hdHRlZFBvc2l0aW9uID0gdGhpcy5f
bG9jYXRpb25Ub1Bvc2l0aW9uKHRoaXMuX2Zvcm1hdHRlZExpbmVFbmRpbmdzLCBsaW5lTnVtYmVy
LCAwKTsKKyAgICAgICAgdmFyIHBvc2l0aW9uID0gdGhpcy5fY29udmVydFBvc2l0aW9uKHRoaXMu
X21hcHBpbmcuZm9ybWF0dGVkLCB0aGlzLl9tYXBwaW5nLm9yaWdpbmFsLCBmb3JtYXR0ZWRQb3Np
dGlvbik7CisgICAgICAgIHJldHVybiB0aGlzLl9wb3NpdGlvblRvTG9jYXRpb24odGhpcy5fbGlu
ZUVuZGluZ3MsIHBvc2l0aW9uKTsKKyAgICB9LAorCisgICAgX2NvbnZlcnRQb3NpdGlvbjogZnVu
Y3Rpb24ocG9zaXRpb25zMSwgcG9zaXRpb25zMiwgcG9zaXRpb24pCisgICAgeworICAgICAgICB2
YXIgaW5kZXggPSBwb3NpdGlvbnMxLnVwcGVyQm91bmQocG9zaXRpb24pOworICAgICAgICBpZiAo
aW5kZXggPT09IHBvc2l0aW9uczIubGVuZ3RoIC0gMSkKKyAgICAgICAgICAgIHJldHVybiBwb3Np
dGlvbnMyW2luZGV4XSAtIDE7CisgICAgICAgIHJldHVybiBwb3NpdGlvbnMyW2luZGV4XTsKKyAg
ICB9LAorCisgICAgX2xvY2F0aW9uVG9Qb3NpdGlvbjogZnVuY3Rpb24obGluZUVuZGluZ3MsIGxp
bmVOdW1iZXIsIGNvbHVtbk51bWJlcikKKyAgICB7CisgICAgICAgIHZhciBwb3NpdGlvbiA9IGxp
bmVOdW1iZXIgPyBsaW5lRW5kaW5nc1tsaW5lTnVtYmVyIC0gMV0gKyAxIDogMDsKKyAgICAgICAg
cmV0dXJuIHBvc2l0aW9uICsgY29sdW1uTnVtYmVyOworICAgIH0sCisKKyAgICBfcG9zaXRpb25U
b0xvY2F0aW9uOiBmdW5jdGlvbihsaW5lRW5kaW5ncywgcG9zaXRpb24pCisgICAgeworICAgICAg
ICB2YXIgbG9jYXRpb24gPSB7fTsKKyAgICAgICAgbG9jYXRpb24ubGluZSA9IGxpbmVFbmRpbmdz
LnVwcGVyQm91bmQocG9zaXRpb24gLSAxKTsKKyAgICAgICAgaWYgKCFsb2NhdGlvbi5saW5lKQor
ICAgICAgICAgICAgbG9jYXRpb24uY29sdW1uID0gcG9zaXRpb247CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIGxvY2F0aW9uLmNvbHVtbiA9IHBvc2l0aW9uIC0gbGluZUVuZGluZ3NbbG9jYXRp
b24ubGluZSAtIDFdIC0gMTsKKyAgICAgICAgcmV0dXJuIGxvY2F0aW9uOworICAgIH0sCisKKyAg
ICBnZXQgX2xpbmVFbmRpbmdzKCkKKyAgICB7CisgICAgICAgIGlmICh0aGlzLl9fbGluZUVuZGlu
Z3MpCisgICAgICAgICAgICByZXR1cm4gdGhpcy5fX2xpbmVFbmRpbmdzOworICAgICAgICB0aGlz
Ll9fbGluZUVuZGluZ3MgPSB0aGlzLl9jb250ZW50LmZpbmRBbGwoIlxuIik7CisgICAgICAgIHRo
aXMuX19saW5lRW5kaW5ncy5wdXNoKHRoaXMuX2NvbnRlbnQubGVuZ3RoKTsKKyAgICAgICAgcmV0
dXJuIHRoaXMuX19saW5lRW5kaW5nczsKKyAgICB9LAorCisgICAgZ2V0IF9mb3JtYXR0ZWRMaW5l
RW5kaW5ncygpCisgICAgeworICAgICAgICBpZiAodGhpcy5fX2Zvcm1hdHRlZExpbmVFbmRpbmdz
KQorICAgICAgICAgICAgcmV0dXJuIHRoaXMuX19mb3JtYXR0ZWRMaW5lRW5kaW5nczsKKyAgICAg
ICAgdGhpcy5fX2Zvcm1hdHRlZExpbmVFbmRpbmdzID0gdGhpcy5fZm9ybWF0dGVkQ29udGVudC5m
aW5kQWxsKCJcbiIpOworICAgICAgICB0aGlzLl9fZm9ybWF0dGVkTGluZUVuZGluZ3MucHVzaCh0
aGlzLl9mb3JtYXR0ZWRDb250ZW50Lmxlbmd0aCk7CisgICAgICAgIHJldHVybiB0aGlzLl9fZm9y
bWF0dGVkTGluZUVuZGluZ3M7CisgICAgfQorfQorCitXZWJJbnNwZWN0b3IuU291cmNlRnJhbWVN
b2RlbC5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLk9iamVjdC5wcm90b3R5cGU7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1dlYktpdC5x
cmMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1dlYktpdC5xcmMKaW5kZXgg
ZGI5MmZmMy4uNzEwZDQzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9XZWJLaXQucXJjCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvV2ViS2l0LnFyYwpAQCAtOTEsNiArOTEsNyBAQAogICAgIDxmaWxlPlNpZGViYXJUcmVlRWxl
bWVudC5qczwvZmlsZT4KICAgICA8ZmlsZT5Tb3VyY2VDU1NUb2tlbml6ZXIuanM8L2ZpbGU+CiAg
ICAgPGZpbGU+U291cmNlRnJhbWUuanM8L2ZpbGU+CisgICAgPGZpbGU+U291cmNlRnJhbWVNb2Rl
bC5qczwvZmlsZT4KICAgICA8ZmlsZT5Tb3VyY2VIVE1MVG9rZW5pemVyLmpzPC9maWxlPgogICAg
IDxmaWxlPlNvdXJjZUphdmFTY3JpcHRUb2tlbml6ZXIuanM8L2ZpbGU+CiAgICAgPGZpbGU+U291
cmNlVG9rZW5pemVyLmpzPC9maWxlPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuaHRtbCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvaW5zcGVjdG9yLmh0bWwKaW5kZXggNzA1NTA5Mi4uMjFkZTBhNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuaHRtbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5odG1sCkBAIC0x
MjEsNiArMTIxLDcgQEAgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlw
dCIgc3JjPSJOZXR3b3JrSXRlbVZpZXcuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0i
dGV4dC9qYXZhc2NyaXB0IiBzcmM9IlJlc291cmNlVmlldy5qcyI+PC9zY3JpcHQ+CiAgICAgPHNj
cmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iU291cmNlRnJhbWUuanMiPjwvc2NyaXB0
PgorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IlNvdXJjZUZyYW1lTW9k
ZWwuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9
IlNjcmlwdEZvcm1hdHRlci5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2ph
dmFzY3JpcHQiIHNyYz0iRE9NU3ludGF4SGlnaGxpZ2h0ZXIuanMiPjwvc2NyaXB0PgogICAgIDxz
Y3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IlRleHRFZGl0b3JNb2RlbC5qcyI+PC9z
Y3JpcHQ+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3V0
aWxpdGllcy5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvdXRpbGl0aWVz
LmpzCmluZGV4IDQzMjBiYTguLjVlZDlhOGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvdXRpbGl0aWVzLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvdXRpbGl0aWVzLmpzCkBAIC03NDUsNiArNzQ1LDIyIEBAIE9iamVjdC5k
ZWZpbmVQcm9wZXJ0eShBcnJheS5wcm90b3R5cGUsICJrZXlTZXQiLCB7IHZhbHVlOiBmdW5jdGlv
bigpCiAgICAgcmV0dXJuIGtleXM7CiB9fSk7CiAKK09iamVjdC5kZWZpbmVQcm9wZXJ0eShBcnJh
eS5wcm90b3R5cGUsICJ1cHBlckJvdW5kIiwgeyB2YWx1ZTogZnVuY3Rpb24odmFsdWUpCit7Cisg
ICAgdmFyIGZpcnN0ID0gMDsKKyAgICB2YXIgY291bnQgPSB0aGlzLmxlbmd0aDsKKyAgICB3aGls
ZSAoY291bnQgPiAwKSB7CisgICAgICB2YXIgc3RlcCA9IGNvdW50ID4+IDE7CisgICAgICB2YXIg
bWlkZGxlID0gZmlyc3QgKyBzdGVwOworICAgICAgaWYgKHZhbHVlID49IHRoaXNbbWlkZGxlXSkg
eworICAgICAgICAgIGZpcnN0ID0gbWlkZGxlICsgMTsKKyAgICAgICAgICBjb3VudCAtPSBzdGVw
ICsgMTsKKyAgICAgIH0gZWxzZQorICAgICAgICAgIGNvdW50ID0gc3RlcDsKKyAgICB9CisgICAg
cmV0dXJuIGZpcnN0OworfX0pOworCiBBcnJheS5kaWZmID0gZnVuY3Rpb24obGVmdCwgcmlnaHQp
CiB7CiAgICAgdmFyIG8gPSBsZWZ0Owo=
</data>
<flag name="review"
          id="70819"
          type_id="1"
          status="-"
          setter="yurys"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80637</attachid>
            <date>2011-01-31 06:35:45 -0800</date>
            <delta_ts>2011-02-04 02:19:39 -0800</delta_ts>
            <desc>Patch.</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>33500</size>
            <attacher name="Pavel Podivilov">podivilov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA3OWY1ODIwLi5jNDIyYzUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDgg
QEAKKzIwMTEtMDEtMzEgIFBhdmVsIFBvZGl2aWxvdiAgPHBvZGl2aWxvdkBjaHJvbWl1bS5vcmc+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIElu
c3BlY3RvcjogaW1wbGVtZW50IGJlYXV0aWZpY2F0aW9uIG9mIHNjcmlwdHMgaW5saW5lZCBpbiBo
dG1sIGRvY3VtZW50cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTUyNzA2CisKKyAgICAgICAgVG8gYmVhdXRpZnkgc2NyaXB0cyBpbmxpbmVkIGluIGh0
bWwsIHdlIG5lZWQgdG8gY3V0IGluZGl2aWR1YWwgc2NyaXB0cywgYmVhdXRpZnkgdGhlbSB1c2lu
ZyBVZ2xpZnlKUyBsaWJyYXJ5LCBhbmQKKyAgICAgICAgZmluYWxseSBwYXN0ZSB0aGVtIGJhY2sg
dG8gaHRtbC4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnZj
cHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1Njcmlw
dEZvcm1hdHRlci5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRGb3JtYXR0ZXIpOiBJ
bXBsZW1lbnQgZm9ybWF0dGluZyBvZiBzY3JpcHRzIGlubGluZWQgaW4gaHRtbC4KKyAgICAgICAg
KFdlYkluc3BlY3Rvci5TY3JpcHRGb3JtYXR0ZXIucHJvdG90eXBlLmZvcm1hdENvbnRlbnQuZGlk
Rm9ybWF0Q2h1bmtzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRGb3JtYXR0ZXIucHJv
dG90eXBlLmZvcm1hdENvbnRlbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdEZvcm1h
dHRlci5wcm90b3R5cGUuX3NwbGl0Q29udGVudEludG9DaHVua3MpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlNjcmlwdEZvcm1hdHRlci5wcm90b3R5cGUuX2Zvcm1hdENodW5rcy5kaWRGb3JtYXQp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdEZvcm1hdHRlci5wcm90b3R5cGUuX2Zvcm1h
dENodW5rcyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0Rm9ybWF0dGVyLnByb3RvdHlw
ZS5fYnVpbGRDb250ZW50RnJvbUNodW5rcyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0
Rm9ybWF0dGVyLnByb3RvdHlwZS5fZm9ybWF0U2NyaXB0Lm1lc3NhZ2VIYW5kbGVyKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5TY3JpcHRGb3JtYXR0ZXIucHJvdG90eXBlLl9mb3JtYXRTY3JpcHQp
OgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0Rm9ybWF0dGVyV29ya2VyLmpz
OgorICAgICAgICAob25tZXNzYWdlKToKKyAgICAgICAgKGJ1aWxkTWFwcGluZyk6CisgICAgICAg
ICogaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VGcmFtZS5qczoKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5Tb3VyY2VGcmFtZUNvbnRlbnQpOiBVc2UgU291cmNlRnJhbWVDb250ZW50IGFuZCBGb3Jt
YXR0ZWRTb3VyY2VGcmFtZUNvbnRlbnQgdG8gcGVyZm9ybSBvcGVyYXRpb25zIHdpdGggbGluZSBu
dW1iZXJzLgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvU291cmNlRnJhbWVDb250ZW50
LmpzOiBBZGRlZC4KKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZUNvbnRlbnQpOiBI
ZWxwZXIgY2xhc3MsIGhvbGRzIHJlc291cmNlIHRleHQgYW5kIHNjcmlwdHMgbGF5b3V0CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWVDb250ZW50LnByb3RvdHlwZS5nZXQgc2NyaXB0
UmFuZ2VzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZUNvbnRlbnQucHJvdG90
eXBlLmxvY2F0aW9uVG9Qb3NpdGlvbik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJh
bWVDb250ZW50LnByb3RvdHlwZS5wb3NpdGlvblRvTG9jYXRpb24pOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlNvdXJjZUZyYW1lQ29udGVudC5wcm90b3R5cGUuc2NyaXB0TG9jYXRpb25Gb3JMaW5l
TnVtYmVyKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZUNvbnRlbnQucHJvdG90
eXBlLnNjcmlwdExvY2F0aW9uRm9yUmFuZ2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJj
ZUZyYW1lQ29udGVudC5wcm90b3R5cGUubGluZU51bWJlclRvUmFuZ2UpOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLlNvdXJjZUZyYW1lQ29udGVudC5wcm90b3R5cGUuX2ludGVyc2VjdGluZ1Njcmlw
dFJhbmdlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvcik6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
Rm9ybWF0dGVkU291cmNlRnJhbWVDb250ZW50KTogSGVscGVyIGNsYXNzLCBob2xkcyBvcmlnaW5h
bCBhbmQgZm9ybWF0dGVkIHZlcnNpb25zIG9mIHJlc291cmNlIGFuZCBtYXBwaW5nIGJldHdlZW4g
dGhlbS4KKyAgICAgICAgKFdlYkluc3BlY3Rvci5Gb3JtYXR0ZWRTb3VyY2VGcmFtZUNvbnRlbnQu
cHJvdG90eXBlLmdldCB0ZXh0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Gb3JtYXR0ZWRTb3Vy
Y2VGcmFtZUNvbnRlbnQucHJvdG90eXBlLm9yaWdpbmFsTG9jYXRpb25Ub0Zvcm1hdHRlZExvY2F0
aW9uKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Gb3JtYXR0ZWRTb3VyY2VGcmFtZUNvbnRlbnQu
cHJvdG90eXBlLnNjcmlwdExvY2F0aW9uRm9yRm9ybWF0dGVkTGluZU51bWJlcik6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuRm9ybWF0dGVkU291cmNlRnJhbWVDb250ZW50LnByb3RvdHlwZS5fY29u
dmVydFBvc2l0aW9uKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1dlYktpdC5xcmM6
CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuaHRtbDoKKwogMjAxMS0w
MS0yNyAgTU9SSVRBIEhhamltZSAgPG1vcnJpdGFAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBEaW1pdHJpIEdsYXprb3YuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggYWI3MmJjZS4uMTM0
NzliYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtNDczMSw2ICs0NzMxLDcgQEAKICAgICAgICAgICAg
ICdpbnNwZWN0b3IvZnJvbnQtZW5kL1NpZGViYXJUcmVlRWxlbWVudC5qcycsCiAgICAgICAgICAg
ICAnaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VDU1NUb2tlbml6ZXIuanMnLAogICAgICAgICAg
ICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNlRnJhbWUuanMnLAorICAgICAgICAgICAgJ2lu
c3BlY3Rvci9mcm9udC1lbmQvU291cmNlRnJhbWVDb250ZW50LmpzJywKICAgICAgICAgICAgICdp
bnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZUhUTUxUb2tlbml6ZXIuanMnLAogICAgICAgICAgICAg
J2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNlSmF2YVNjcmlwdFRva2VuaXplci5qcycsCiAgICAg
ICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VUb2tlbml6ZXIuanMnLApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2ogYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRleCAxMGQwYmM2Li5j
ZmUwOWJiIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3Jl
LnZjcHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJv
agpAQCAtNjU3ODEsNiArNjU3ODEsMTAgQEAKIAkJCQkJPgogCQkJCTwvRmlsZT4KIAkJCQk8Rmls
ZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcU291cmNlRnJhbWVD
b250ZW50LmpzIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCiAJCQkJCVJlbGF0aXZl
UGF0aD0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxTb3VyY2VIVE1MVG9rZW5pemVyLmpzIgogCQkJ
CQk+CiAJCQkJPC9GaWxlPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9TY3JpcHRGb3JtYXR0ZXIuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL1NjcmlwdEZvcm1hdHRlci5qcwppbmRleCA2OWZmYjc0Li40MDgzYzAwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdEZvcm1hdHRlci5q
cworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdEZvcm1hdHRl
ci5qcwpAQCAtMjgsMTA3ICsyOCwxMDEgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotV2ViSW5z
cGVjdG9yLlNjcmlwdEZvcm1hdHRlciA9IGZ1bmN0aW9uKHNvdXJjZSkKK1dlYkluc3BlY3Rvci5T
Y3JpcHRGb3JtYXR0ZXIgPSBmdW5jdGlvbigpCiB7Ci0gICAgdGhpcy5fb3JpZ2luYWxTb3VyY2Ug
PSBzb3VyY2U7Ci0gICAgdGhpcy5fb3JpZ2luYWxMaW5lRW5kaW5ncyA9IHNvdXJjZS5maW5kQWxs
KCJcbiIpOwotICAgIHRoaXMuX29yaWdpbmFsTGluZUVuZGluZ3MucHVzaChzb3VyY2UubGVuZ3Ro
KTsKLX0KLQotV2ViSW5zcGVjdG9yLlNjcmlwdEZvcm1hdHRlci5sb2NhdGlvblRvUG9zaXRpb24g
PSBmdW5jdGlvbihsaW5lRW5kaW5ncywgbG9jYXRpb24pCi17Ci0gICAgdmFyIHBvc2l0aW9uID0g
bG9jYXRpb24ubGluZSA/IGxpbmVFbmRpbmdzW2xvY2F0aW9uLmxpbmUgLSAxXSArIDEgOiAwOwot
ICAgIHJldHVybiBwb3NpdGlvbiArIGxvY2F0aW9uLmNvbHVtbjsKLX0KLQotV2ViSW5zcGVjdG9y
LlNjcmlwdEZvcm1hdHRlci5wb3NpdGlvblRvTG9jYXRpb24gPSBmdW5jdGlvbihsaW5lRW5kaW5n
cywgcG9zaXRpb24pCi17Ci0gICAgdmFyIGxvY2F0aW9uID0ge307Ci0gICAgbG9jYXRpb24ubGlu
ZSA9IGxpbmVFbmRpbmdzLnVwcGVyQm91bmQocG9zaXRpb24gLSAxKTsKLSAgICBpZiAoIWxvY2F0
aW9uLmxpbmUpCi0gICAgICAgIGxvY2F0aW9uLmNvbHVtbiA9IHBvc2l0aW9uOwotICAgIGVsc2UK
LSAgICAgICAgbG9jYXRpb24uY29sdW1uID0gcG9zaXRpb24gLSBsaW5lRW5kaW5nc1tsb2NhdGlv
bi5saW5lIC0gMV0gLSAxOwotICAgIHJldHVybiBsb2NhdGlvbjsKIH0KIAogV2ViSW5zcGVjdG9y
LlNjcmlwdEZvcm1hdHRlci5wcm90b3R5cGUgPSB7Ci0gICAgZm9ybWF0OiBmdW5jdGlvbihjYWxs
YmFjaykKKyAgICBmb3JtYXRDb250ZW50OiBmdW5jdGlvbihjb250ZW50LCBjYWxsYmFjaykKICAg
ICB7Ci0gICAgICAgIHZhciB3b3JrZXIgPSBuZXcgV29ya2VyKCJzY3JpcHRGb3JtYXR0ZXJXb3Jr
ZXIuanMiKTsKLSAgICAgICAgZnVuY3Rpb24gbWVzc2FnZUhhbmRsZXIoZXZlbnQpCisgICAgICAg
IHZhciBjaHVua3MgPSB0aGlzLl9zcGxpdENvbnRlbnRJbnRvQ2h1bmtzKGNvbnRlbnQudGV4dCwg
Y29udGVudC5zY3JpcHRSYW5nZXMpOworCisgICAgICAgIGZ1bmN0aW9uIGRpZEZvcm1hdENodW5r
cygpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHZhciBmb3JtYXR0ZWRTb3VyY2UgPSBldmVudC5k
YXRhOwotICAgICAgICAgICAgdGhpcy5fZm9ybWF0dGVkID0gdHJ1ZTsKLSAgICAgICAgICAgIHRo
aXMuX2Zvcm1hdHRlZFNvdXJjZSA9IGZvcm1hdHRlZFNvdXJjZTsKLSAgICAgICAgICAgIHRoaXMu
X2Zvcm1hdHRlZExpbmVFbmRpbmdzID0gZm9ybWF0dGVkU291cmNlLmZpbmRBbGwoIlxuIik7Ci0g
ICAgICAgICAgICB0aGlzLl9mb3JtYXR0ZWRMaW5lRW5kaW5ncy5wdXNoKGZvcm1hdHRlZFNvdXJj
ZS5sZW5ndGgpOwotICAgICAgICAgICAgdGhpcy5fYnVpbGRNYXBwaW5nKCk7Ci0gICAgICAgICAg
ICBjYWxsYmFjayhmb3JtYXR0ZWRTb3VyY2UpOworICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHRo
aXMuX2J1aWxkQ29udGVudEZyb21DaHVua3MoY2h1bmtzKTsKKyAgICAgICAgICAgIGNhbGxiYWNr
KG5ldyBXZWJJbnNwZWN0b3IuRm9ybWF0dGVkU291cmNlRnJhbWVDb250ZW50KGNvbnRlbnQsIHJl
c3VsdC50ZXh0LCByZXN1bHQubWFwcGluZykpOwogICAgICAgICB9Ci0gICAgICAgIHdvcmtlci5v
bm1lc3NhZ2UgPSBtZXNzYWdlSGFuZGxlci5iaW5kKHRoaXMpOwotICAgICAgICB3b3JrZXIucG9z
dE1lc3NhZ2UodGhpcy5fb3JpZ2luYWxTb3VyY2UpOworICAgICAgICB0aGlzLl9mb3JtYXRDaHVu
a3MoY2h1bmtzLCAwLCBkaWRGb3JtYXRDaHVua3MuYmluZCh0aGlzKSk7CiAgICAgfSwKIAotICAg
IF9idWlsZE1hcHBpbmc6IGZ1bmN0aW9uKCkKKyAgICBfc3BsaXRDb250ZW50SW50b0NodW5rczog
ZnVuY3Rpb24odGV4dCwgc2NyaXB0UmFuZ2VzKQogICAgIHsKLSAgICAgICAgdGhpcy5fb3JpZ2lu
YWxTeW1ib2xQb3NpdGlvbnMgPSBbXTsKLSAgICAgICAgdGhpcy5fZm9ybWF0dGVkU3ltYm9sUG9z
aXRpb25zID0gW107Ci0gICAgICAgIHZhciBsYXN0Q29kZVBvc2l0aW9uID0gMDsKLSAgICAgICAg
dmFyIHJlZ2V4cCA9IC9bXCRcLlx3XSt8e3x9fDsvZzsKLSAgICAgICAgd2hpbGUgKHRydWUpIHsK
LSAgICAgICAgICAgIHZhciBtYXRjaCA9IHJlZ2V4cC5leGVjKHRoaXMuX2Zvcm1hdHRlZFNvdXJj
ZSk7Ci0gICAgICAgICAgICBpZiAoIW1hdGNoKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgdmFyIHBvc2l0aW9uID0gdGhpcy5fb3JpZ2luYWxTb3VyY2UuaW5kZXhPZihtYXRj
aFswXSwgbGFzdENvZGVQb3NpdGlvbik7Ci0gICAgICAgICAgICBpZiAocG9zaXRpb24gPT09IC0x
KQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxT
eW1ib2xQb3NpdGlvbnMucHVzaChwb3NpdGlvbik7Ci0gICAgICAgICAgICB0aGlzLl9mb3JtYXR0
ZWRTeW1ib2xQb3NpdGlvbnMucHVzaChtYXRjaC5pbmRleCk7Ci0gICAgICAgICAgICBsYXN0Q29k
ZVBvc2l0aW9uID0gcG9zaXRpb24gKyBtYXRjaFswXS5sZW5ndGg7CisgICAgICAgIHZhciBjaHVu
a3MgPSBbXTsKKyAgICAgICAgZnVuY3Rpb24gYWRkQ2h1bmsoc3RhcnQsIGVuZCwgaXNTY3JpcHQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBjaHVuayA9IHt9OworICAgICAgICAgICAgY2h1
bmsuc3RhcnQgPSBzdGFydDsKKyAgICAgICAgICAgIGNodW5rLmVuZCA9IGVuZDsKKyAgICAgICAg
ICAgIGNodW5rLmlzU2NyaXB0ID0gaXNTY3JpcHQ7CisgICAgICAgICAgICBjaHVuay50ZXh0ID0g
dGV4dC5zdWJzdHJpbmcoc3RhcnQsIGVuZCk7CisgICAgICAgICAgICBjaHVua3MucHVzaChjaHVu
ayk7CiAgICAgICAgIH0KLSAgICAgICAgdGhpcy5fb3JpZ2luYWxTeW1ib2xQb3NpdGlvbnMucHVz
aCh0aGlzLl9vcmlnaW5hbFNvdXJjZS5sZW5ndGgpOwotICAgICAgICB0aGlzLl9mb3JtYXR0ZWRT
eW1ib2xQb3NpdGlvbnMucHVzaCh0aGlzLl9mb3JtYXR0ZWRTb3VyY2UubGVuZ3RoKTsKLSAgICB9
LAotCi0gICAgb3JpZ2luYWxMaW5lTnVtYmVyVG9Gb3JtYXR0ZWRMaW5lTnVtYmVyOiBmdW5jdGlv
bihvcmlnaW5hbExpbmVOdW1iZXIpCi0gICAgewotICAgICAgICBpZiAoIXRoaXMuX2Zvcm1hdHRl
ZCkKLSAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbExpbmVOdW1iZXI7Ci0gICAgICAgIHZhciBv
cmlnaW5hbFBvc2l0aW9uID0gV2ViSW5zcGVjdG9yLlNjcmlwdEZvcm1hdHRlci5sb2NhdGlvblRv
UG9zaXRpb24odGhpcy5fb3JpZ2luYWxMaW5lRW5kaW5ncywgeyBsaW5lOiBvcmlnaW5hbExpbmVO
dW1iZXIsIGNvbHVtbjogMCB9KTsKLSAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxQb3NpdGlv
blRvRm9ybWF0dGVkTGluZU51bWJlcihvcmlnaW5hbFBvc2l0aW9uKTsKKyAgICAgICAgdmFyIGN1
cnJlbnRQb3NpdGlvbiA9IDA7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2NyaXB0UmFu
Z2VzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICB2YXIgc2NyaXB0UmFuZ2UgPSBzY3JpcHRS
YW5nZXNbaV07CisgICAgICAgICAgICBpZiAoY3VycmVudFBvc2l0aW9uIDwgc2NyaXB0UmFuZ2Uu
c3RhcnQpCisgICAgICAgICAgICAgICAgYWRkQ2h1bmsoY3VycmVudFBvc2l0aW9uLCBzY3JpcHRS
YW5nZS5zdGFydCwgZmFsc2UpOworICAgICAgICAgICAgYWRkQ2h1bmsoc2NyaXB0UmFuZ2Uuc3Rh
cnQsIHNjcmlwdFJhbmdlLmVuZCwgdHJ1ZSk7CisgICAgICAgICAgICBjdXJyZW50UG9zaXRpb24g
PSBzY3JpcHRSYW5nZS5lbmQ7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGN1cnJlbnRQb3NpdGlv
biA8IHRleHQubGVuZ3RoKQorICAgICAgICAgICAgYWRkQ2h1bmsoY3VycmVudFBvc2l0aW9uLCB0
ZXh0Lmxlbmd0aCwgZmFsc2UpOworICAgICAgICByZXR1cm4gY2h1bmtzOwogICAgIH0sCiAKLSAg
ICBmb3JtYXR0ZWRMaW5lTnVtYmVyVG9PcmlnaW5hbExpbmVOdW1iZXI6IGZ1bmN0aW9uKGZvcm1h
dHRlZExpbmVOdW1iZXIpCisgICAgX2Zvcm1hdENodW5rczogZnVuY3Rpb24oY2h1bmtzLCBpbmRl
eCwgY2FsbGJhY2spCiAgICAgewotICAgICAgICBpZiAoIXRoaXMuX2Zvcm1hdHRlZCkKLSAgICAg
ICAgICAgIHJldHVybiBmb3JtYXR0ZWRMaW5lTnVtYmVyOwotICAgICAgICB2YXIgb3JpZ2luYWxQ
b3NpdGlvbiA9IHRoaXMuZm9ybWF0dGVkTGluZU51bWJlclRvT3JpZ2luYWxQb3NpdGlvbihmb3Jt
YXR0ZWRMaW5lTnVtYmVyKTsKLSAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5TY3JpcHRGb3Jt
YXR0ZXIucG9zaXRpb25Ub0xvY2F0aW9uKHRoaXMuX29yaWdpbmFsTGluZUVuZGluZ3MsIG9yaWdp
bmFsUG9zaXRpb24pLmxpbmU7Ci0gICAgfSwKKyAgICAgICAgd2hpbGUodHJ1ZSkgeworICAgICAg
ICAgICAgaWYgKGluZGV4ID09PSBjaHVua3MubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgY2Fs
bGJhY2soKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICB2YXIgY2h1bmsgPSBjaHVua3NbaW5kZXgrK107CisgICAgICAgICAgICBpZiAoY2h1bmsu
aXNTY3JpcHQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KIAotICAgIG9yaWdp
bmFsUG9zaXRpb25Ub0Zvcm1hdHRlZExpbmVOdW1iZXI6IGZ1bmN0aW9uKG9yaWdpbmFsUG9zaXRp
b24pCi0gICAgewotICAgICAgICB2YXIgbGluZUVuZGluZ3MgPSB0aGlzLl9mb3JtYXR0ZWQgPyB0
aGlzLl9mb3JtYXR0ZWRMaW5lRW5kaW5ncyA6IHRoaXMuX29yaWdpbmFsTGluZUVuZGluZ3M7Ci0g
ICAgICAgIGlmICh0aGlzLl9mb3JtYXR0ZWQpCi0gICAgICAgICAgICBmb3JtYXR0ZWRQb3NpdGlv
biA9IHRoaXMuX2NvbnZlcnRQb3NpdGlvbih0aGlzLl9vcmlnaW5hbFN5bWJvbFBvc2l0aW9ucywg
dGhpcy5fZm9ybWF0dGVkU3ltYm9sUG9zaXRpb25zLCBvcmlnaW5hbFBvc2l0aW9uKTsKLSAgICAg
ICAgcmV0dXJuIFdlYkluc3BlY3Rvci5TY3JpcHRGb3JtYXR0ZXIucG9zaXRpb25Ub0xvY2F0aW9u
KGxpbmVFbmRpbmdzLCBmb3JtYXR0ZWRQb3NpdGlvbikubGluZTsKKyAgICAgICAgZnVuY3Rpb24g
ZGlkRm9ybWF0KGZvcm1hdHRlZFNvdXJjZSwgbWFwcGluZykKKyAgICAgICAgeworICAgICAgICAg
ICAgY2h1bmsudGV4dCA9IGZvcm1hdHRlZFNvdXJjZTsKKyAgICAgICAgICAgIGNodW5rLm1hcHBp
bmcgPSBtYXBwaW5nOworICAgICAgICAgICAgdGhpcy5fZm9ybWF0Q2h1bmtzKGNodW5rcywgaW5k
ZXgsIGNhbGxiYWNrKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9mb3JtYXRTY3JpcHQoY2h1
bmsudGV4dCwgZGlkRm9ybWF0LmJpbmQodGhpcykpOwogICAgIH0sCiAKLSAgICBmb3JtYXR0ZWRM
aW5lTnVtYmVyVG9PcmlnaW5hbFBvc2l0aW9uOiBmdW5jdGlvbihmb3JtYXR0ZWRMaW5lTnVtYmVy
KQorICAgIF9idWlsZENvbnRlbnRGcm9tQ2h1bmtzOiBmdW5jdGlvbihjaHVua3MpCiAgICAgewot
ICAgICAgICB2YXIgbGluZUVuZGluZ3MgPSB0aGlzLl9mb3JtYXR0ZWQgPyB0aGlzLl9mb3JtYXR0
ZWRMaW5lRW5kaW5ncyA6IHRoaXMuX29yaWdpbmFsTGluZUVuZGluZ3M7Ci0gICAgICAgIHZhciBm
b3JtYXR0ZWRQb3NpdGlvbiA9IFdlYkluc3BlY3Rvci5TY3JpcHRGb3JtYXR0ZXIubG9jYXRpb25U
b1Bvc2l0aW9uKGxpbmVFbmRpbmdzLCB7IGxpbmU6IGZvcm1hdHRlZExpbmVOdW1iZXIsIGNvbHVt
bjogMCB9KTsKLSAgICAgICAgaWYgKCF0aGlzLl9mb3JtYXR0ZWQpCi0gICAgICAgICAgICByZXR1
cm4gZm9ybWF0dGVkUG9zaXRpb247Ci0gICAgICAgIHJldHVybiB0aGlzLl9jb252ZXJ0UG9zaXRp
b24odGhpcy5fZm9ybWF0dGVkU3ltYm9sUG9zaXRpb25zLCB0aGlzLl9vcmlnaW5hbFN5bWJvbFBv
c2l0aW9ucywgZm9ybWF0dGVkUG9zaXRpb24pOworICAgICAgICB2YXIgdGV4dCA9ICIiOworICAg
ICAgICB2YXIgbWFwcGluZyA9IHsgb3JpZ2luYWw6IFtdLCBmb3JtYXR0ZWQ6IFtdIH07CisgICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2h1bmtzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAg
ICB2YXIgY2h1bmsgPSBjaHVua3NbaV07CisgICAgICAgICAgICBtYXBwaW5nLm9yaWdpbmFsLnB1
c2goY2h1bmsuc3RhcnQpOworICAgICAgICAgICAgbWFwcGluZy5mb3JtYXR0ZWQucHVzaCh0ZXh0
Lmxlbmd0aCk7CisgICAgICAgICAgICBpZiAoY2h1bmsuaXNTY3JpcHQpIHsKKyAgICAgICAgICAg
ICAgICB0ZXh0ICs9ICJcbiI7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBj
aHVuay5tYXBwaW5nLm9yaWdpbmFsLmxlbmd0aDsgKytqKSB7CisgICAgICAgICAgICAgICAgICAg
IG1hcHBpbmcub3JpZ2luYWwucHVzaChjaHVuay5tYXBwaW5nLm9yaWdpbmFsW2pdICsgY2h1bmsu
c3RhcnQpOworICAgICAgICAgICAgICAgICAgICBtYXBwaW5nLmZvcm1hdHRlZC5wdXNoKGNodW5r
Lm1hcHBpbmcuZm9ybWF0dGVkW2pdICsgdGV4dC5sZW5ndGgpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB0ZXh0ICs9IGNodW5rLnRleHQ7CisgICAgICAgICAgICAgICAgdGV4
dCArPSAiXG4iOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgdGV4dCArPSBj
aHVuay50ZXh0OworICAgICAgICAgICAgbWFwcGluZy5vcmlnaW5hbC5wdXNoKGNodW5rLmVuZCk7
CisgICAgICAgICAgICBtYXBwaW5nLmZvcm1hdHRlZC5wdXNoKHRleHQubGVuZ3RoKTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4geyB0ZXh0OiB0ZXh0LCBtYXBwaW5nOiBtYXBwaW5nIH07CiAg
ICAgfSwKIAotICAgIF9jb252ZXJ0UG9zaXRpb246IGZ1bmN0aW9uKHN5bWJvbFBvc2l0aW9uczEs
IHN5bWJvbFBvc2l0aW9uczIsIHBvc2l0aW9uKQorICAgIF9mb3JtYXRTY3JpcHQ6IGZ1bmN0aW9u
KHNvdXJjZSwgY2FsbGJhY2spCiAgICAgewotICAgICAgICB2YXIgaW5kZXggPSBzeW1ib2xQb3Np
dGlvbnMxLnVwcGVyQm91bmQocG9zaXRpb24pOwotICAgICAgICBpZiAoaW5kZXggPT09IHN5bWJv
bFBvc2l0aW9uczIubGVuZ3RoIC0gMSkKLSAgICAgICAgICAgIHJldHVybiBzeW1ib2xQb3NpdGlv
bnMyW2luZGV4XSAtIDE7Ci0gICAgICAgIHJldHVybiBzeW1ib2xQb3NpdGlvbnMyW2luZGV4XTsK
KyAgICAgICAgdmFyIHdvcmtlciA9IG5ldyBXb3JrZXIoIlNjcmlwdEZvcm1hdHRlcldvcmtlci5q
cyIpOworICAgICAgICBmdW5jdGlvbiBtZXNzYWdlSGFuZGxlcihldmVudCkKKyAgICAgICAgewor
ICAgICAgICAgICAgY2FsbGJhY2soZXZlbnQuZGF0YS5mb3JtYXR0ZWRTb3VyY2UsIGV2ZW50LmRh
dGEubWFwcGluZyk7CisgICAgICAgIH0KKyAgICAgICAgd29ya2VyLm9ubWVzc2FnZSA9IG1lc3Nh
Z2VIYW5kbGVyLmJpbmQodGhpcyk7CisgICAgICAgIHdvcmtlci5wb3N0TWVzc2FnZShzb3VyY2Up
OwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvU2NyaXB0Rm9ybWF0dGVyV29ya2VyLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9TY3JpcHRGb3JtYXR0ZXJXb3JrZXIuanMKaW5kZXggZTkwMDMxNy4uMWE0YzI4ZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRGb3Jt
YXR0ZXJXb3JrZXIuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9T
Y3JpcHRGb3JtYXR0ZXJXb3JrZXIuanMKQEAgLTMyLDcgKzMyLDEwIEBAIHZhciBwYXJzZSA9IGxv
YWRNb2R1bGUoInBhcnNlLWpzLmpzIik7CiB2YXIgcHJvY2VzcyA9IGxvYWRNb2R1bGUoInByb2Nl
c3MuanMiKTsKIAogb25tZXNzYWdlID0gZnVuY3Rpb24oZXZlbnQpIHsKLSAgICBwb3N0TWVzc2Fn
ZShiZWF1dGlmeShldmVudC5kYXRhKSk7CisgICAgdmFyIHNvdXJjZSA9IGV2ZW50LmRhdGE7Cisg
ICAgdmFyIGZvcm1hdHRlZFNvdXJjZSA9IGJlYXV0aWZ5KHNvdXJjZSk7CisgICAgdmFyIG1hcHBp
bmcgPSBidWlsZE1hcHBpbmcoc291cmNlLCBmb3JtYXR0ZWRTb3VyY2UpOworICAgIHBvc3RNZXNz
YWdlKHsgZm9ybWF0dGVkU291cmNlOiBmb3JtYXR0ZWRTb3VyY2UsIG1hcHBpbmc6IG1hcHBpbmcg
fSk7CiB9OwogCiBmdW5jdGlvbiBiZWF1dGlmeShzb3VyY2UpCkBAIC00Nyw2ICs1MCwyNSBAQCBm
dW5jdGlvbiBiZWF1dGlmeShzb3VyY2UpCiAgICAgcmV0dXJuIHByb2Nlc3MuZ2VuX2NvZGUoYXN0
LCBiZWF1dGlmeU9wdGlvbnMpOwogfQogCitmdW5jdGlvbiBidWlsZE1hcHBpbmcoc291cmNlLCBm
b3JtYXR0ZWRTb3VyY2UpCit7CisgICAgdmFyIG1hcHBpbmcgPSB7IG9yaWdpbmFsOiBbXSwgZm9y
bWF0dGVkOiBbXSB9OworICAgIHZhciBsYXN0Q29kZVBvc2l0aW9uID0gMDsKKyAgICB2YXIgcmVn
ZXhwID0gL1tcJFwuXHddK3x7fH0vZzsKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICB2YXIg
bWF0Y2ggPSByZWdleHAuZXhlYyhmb3JtYXR0ZWRTb3VyY2UpOworICAgICAgICBpZiAoIW1hdGNo
KQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHZhciBwb3NpdGlvbiA9IHNvdXJjZS5pbmRl
eE9mKG1hdGNoWzBdLCBsYXN0Q29kZVBvc2l0aW9uKTsKKyAgICAgICAgaWYgKHBvc2l0aW9uID09
PSAtMSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBtYXBwaW5nLm9yaWdpbmFsLnB1
c2gocG9zaXRpb24pOworICAgICAgICBtYXBwaW5nLmZvcm1hdHRlZC5wdXNoKG1hdGNoLmluZGV4
KTsKKyAgICAgICAgbGFzdENvZGVQb3NpdGlvbiA9IHBvc2l0aW9uICsgbWF0Y2hbMF0ubGVuZ3Ro
OworICAgIH0KKyAgICByZXR1cm4gbWFwcGluZzsKK30KKwogZnVuY3Rpb24gbG9hZE1vZHVsZShz
cmMpCiB7CiAgICAgdmFyIHJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNlRnJhbWUuanMgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZUZyYW1lLmpzCmluZGV4IDgy
MTA3NGEuLmQ5ZWI1M2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvU291cmNlRnJhbWUuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9Tb3VyY2VGcmFtZS5qcwpAQCAtMTcwLDExICsxNzAsMTAgQEAgV2ViSW5zcGVjdG9yLlNv
dXJjZUZyYW1lLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9saW5lVG9I
aWdobGlnaHQ7CiAgICAgfSwKIAotICAgIF9jcmVhdGVUZXh0Vmlld2VyOiBmdW5jdGlvbihtaW1l
VHlwZSwgY29udGVudCkKKyAgICBfY3JlYXRlVGV4dFZpZXdlcjogZnVuY3Rpb24obWltZVR5cGUs
IHRleHQpCiAgICAgewotICAgICAgICB0aGlzLl9jb250ZW50ID0gY29udGVudDsKLSAgICAgICAg
dGhpcy5fdGV4dE1vZGVsLnNldFRleHQobnVsbCwgY29udGVudCk7Ci0gICAgICAgIHRoaXMuX2Zv
cm1hdHRlciA9IG5ldyBXZWJJbnNwZWN0b3IuU2NyaXB0Rm9ybWF0dGVyKGNvbnRlbnQpOworICAg
ICAgICB0aGlzLl9jb250ZW50ID0gbmV3IFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZUNvbnRlbnQo
dGV4dCwgdGhpcy5fY29udGVudFByb3ZpZGVyLnNjcmlwdHMoKSk7CisgICAgICAgIHRoaXMuX3Rl
eHRNb2RlbC5zZXRUZXh0KG51bGwsIHRleHQpOwogCiAgICAgICAgIHRoaXMuX3RleHRWaWV3ZXIg
PSBuZXcgV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIodGhpcy5fdGV4dE1vZGVsLCBXZWJJbnNwZWN0
b3IucGxhdGZvcm0sIHRoaXMuX3VybCk7CiAgICAgICAgIHZhciBlbGVtZW50ID0gdGhpcy5fdGV4
dFZpZXdlci5lbGVtZW50OwpAQCAtMzUzLDcgKzM1Miw3IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VG
cmFtZS5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuX2V4ZWN1dGlvbkxpbmUgPSBsaW5lTnVt
YmVyOwogICAgICAgICBpZiAoIXRoaXMuX3RleHRWaWV3ZXIpCiAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIHZhciB0ZXh0Vmlld2VyTGluZU51bWJlciA9IHRoaXMuX2Zvcm1hdHRlci5vcmln
aW5hbExpbmVOdW1iZXJUb0Zvcm1hdHRlZExpbmVOdW1iZXIodGhpcy5fZXhlY3V0aW9uTGluZSAt
IDEpOworICAgICAgICB2YXIgdGV4dFZpZXdlckxpbmVOdW1iZXIgPSB0aGlzLl9vcmlnaW5hbExv
Y2F0aW9uVG9UZXh0Vmlld2VyTGluZU51bWJlcih0aGlzLl9leGVjdXRpb25MaW5lLCAxKTsKICAg
ICAgICAgdGhpcy5fdGV4dFZpZXdlci5hZGREZWNvcmF0aW9uKHRleHRWaWV3ZXJMaW5lTnVtYmVy
LCAid2Via2l0LWV4ZWN1dGlvbi1saW5lIik7CiAgICAgfSwKIApAQCAtMzYxLDcgKzM2MCw3IEBA
IFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7CiAgICAgewogICAgICAgICBp
ZiAoIXRoaXMuX3RleHRWaWV3ZXIpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHZhciB0
ZXh0Vmlld2VyTGluZU51bWJlciA9IHRoaXMuX2Zvcm1hdHRlci5vcmlnaW5hbExpbmVOdW1iZXJU
b0Zvcm1hdHRlZExpbmVOdW1iZXIodGhpcy5fZXhlY3V0aW9uTGluZSAtIDEpOworICAgICAgICB2
YXIgdGV4dFZpZXdlckxpbmVOdW1iZXIgPSB0aGlzLl9vcmlnaW5hbExvY2F0aW9uVG9UZXh0Vmll
d2VyTGluZU51bWJlcih0aGlzLl9leGVjdXRpb25MaW5lLCAxKTsKICAgICAgICAgdGhpcy5fdGV4
dFZpZXdlci5yZW1vdmVEZWNvcmF0aW9uKHRleHRWaWV3ZXJMaW5lTnVtYmVyLCAid2Via2l0LWV4
ZWN1dGlvbi1saW5lIik7CiAgICAgICAgIGRlbGV0ZSB0aGlzLl9leGVjdXRpb25MaW5lOwogICAg
IH0sCkBAIC00NjQsMTQgKzQ2MywxMSBAQCBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90
eXBlID0gewogCiAgICAgX2FkZEJyZWFrcG9pbnQ6IGZ1bmN0aW9uKGJyZWFrcG9pbnQpCiAgICAg
ewotICAgICAgICB2YXIgdGV4dFZpZXdlckxpbmVOdW1iZXIgPSB0aGlzLl9mb3JtYXR0ZXIub3Jp
Z2luYWxMaW5lTnVtYmVyVG9Gb3JtYXR0ZWRMaW5lTnVtYmVyKGJyZWFrcG9pbnQubGluZSAtIDEp
OworICAgICAgICB2YXIgdGV4dFZpZXdlckxpbmVOdW1iZXIgPSB0aGlzLl9vcmlnaW5hbExvY2F0
aW9uVG9UZXh0Vmlld2VyTGluZU51bWJlcihicmVha3BvaW50LmxpbmUsIGJyZWFrcG9pbnQuY29s
dW1uKTsKICAgICAgICAgaWYgKHRleHRWaWV3ZXJMaW5lTnVtYmVyID49IHRoaXMuX3RleHRNb2Rl
bC5saW5lc0NvdW50KQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGJyZWFrcG9pbnQu
YWRkRXZlbnRMaXN0ZW5lcigiZW5hYmxlLWNoYW5nZWQiLCB0aGlzLl9icmVha3BvaW50Q2hhbmdl
ZCwgdGhpcyk7Ci0gICAgICAgIGJyZWFrcG9pbnQuYWRkRXZlbnRMaXN0ZW5lcigiY29uZGl0aW9u
LWNoYW5nZWQiLCB0aGlzLl9icmVha3BvaW50Q2hhbmdlZCwgdGhpcyk7CiAgICAgICAgIGJyZWFr
cG9pbnQuYWRkRXZlbnRMaXN0ZW5lcigicmVtb3ZlZCIsIHRoaXMuX2JyZWFrcG9pbnRSZW1vdmVk
LCB0aGlzKTsKLQogICAgICAgICB0aGlzLl9zZXRCcmVha3BvaW50RGVjb3JhdGlvbih0ZXh0Vmll
d2VyTGluZU51bWJlciwgYnJlYWtwb2ludC5lbmFibGVkLCAhIWJyZWFrcG9pbnQuY29uZGl0aW9u
KTsKICAgICB9LAogCkBAIC00NzksMjEgKzQ3NSwxMSBAQCBXZWJJbnNwZWN0b3IuU291cmNlRnJh
bWUucHJvdG90eXBlID0gewogICAgIHsKICAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBldmVudC50
YXJnZXQ7CiAKLSAgICAgICAgYnJlYWtwb2ludC5yZW1vdmVFdmVudExpc3RlbmVyKCJlbmFibGUt
Y2hhbmdlZCIsIG51bGwsIHRoaXMpOwotICAgICAgICBicmVha3BvaW50LnJlbW92ZUV2ZW50TGlz
dGVuZXIoImNvbmRpdGlvbi1jaGFuZ2VkIiwgbnVsbCwgdGhpcyk7CiAgICAgICAgIGJyZWFrcG9p
bnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVtb3ZlZCIsIG51bGwsIHRoaXMpOwotCi0gICAgICAg
IHZhciB0ZXh0Vmlld2VyTGluZU51bWJlciA9IHRoaXMuX2Zvcm1hdHRlci5vcmlnaW5hbExpbmVO
dW1iZXJUb0Zvcm1hdHRlZExpbmVOdW1iZXIoYnJlYWtwb2ludC5saW5lIC0gMSk7CisgICAgICAg
IHZhciB0ZXh0Vmlld2VyTGluZU51bWJlciA9IHRoaXMuX29yaWdpbmFsTG9jYXRpb25Ub1RleHRW
aWV3ZXJMaW5lTnVtYmVyKGJyZWFrcG9pbnQubGluZSwgYnJlYWtwb2ludC5jb2x1bW4pOwogICAg
ICAgICB0aGlzLl9yZW1vdmVCcmVha3BvaW50RGVjb3JhdGlvbih0ZXh0Vmlld2VyTGluZU51bWJl
cik7CiAgICAgfSwKIAotICAgIF9icmVha3BvaW50Q2hhbmdlZDogZnVuY3Rpb24oZXZlbnQpCi0g
ICAgewotICAgICAgICB2YXIgYnJlYWtwb2ludCA9IGV2ZW50LnRhcmdldDsKLSAgICAgICAgdmFy
IHRleHRWaWV3ZXJMaW5lTnVtYmVyID0gdGhpcy5fZm9ybWF0dGVyLm9yaWdpbmFsTGluZU51bWJl
clRvRm9ybWF0dGVkTGluZU51bWJlcihicmVha3BvaW50LmxpbmUgLSAxKTsKLSAgICAgICAgdGhp
cy5fc2V0QnJlYWtwb2ludERlY29yYXRpb24odGV4dFZpZXdlckxpbmVOdW1iZXIsIGJyZWFrcG9p
bnQuZW5hYmxlZCwgISFicmVha3BvaW50LmNvbmRpdGlvbik7Ci0gICAgfSwKLQogICAgIF9zZXRC
cmVha3BvaW50RGVjb3JhdGlvbjogZnVuY3Rpb24obGluZU51bWJlciwgZW5hYmxlZCwgaGFzQ29u
ZGl0aW9uKQogICAgIHsKICAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5iZWdpblVwZGF0ZXMoKTsK
QEAgLTUyNiwxNyArNTEyLDE2IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUg
PSB7CiAgICAgICAgIHZhciB0YXJnZXQgPSBldmVudC50YXJnZXQuZW5jbG9zaW5nTm9kZU9yU2Vs
ZldpdGhDbGFzcygid2Via2l0LWxpbmUtbnVtYmVyIik7CiAgICAgICAgIGlmICghdGFyZ2V0KQog
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB2YXIgdGV4dFZpZXdlckxpbmVOdW1iZXIgPSB0
YXJnZXQucGFyZW50RWxlbWVudC5saW5lTnVtYmVyOwotICAgICAgICB2YXIgb3JpZ2luYWxMaW5l
TnVtYmVyID0gdGhpcy5fZm9ybWF0dGVyLmZvcm1hdHRlZExpbmVOdW1iZXJUb09yaWdpbmFsTGlu
ZU51bWJlcih0ZXh0Vmlld2VyTGluZU51bWJlcik7CisgICAgICAgIHZhciBsaW5lTnVtYmVyID0g
dGFyZ2V0LnBhcmVudEVsZW1lbnQubGluZU51bWJlcjsKIAogICAgICAgICB2YXIgY29udGV4dE1l
bnUgPSBuZXcgV2ViSW5zcGVjdG9yLkNvbnRleHRNZW51KCk7CiAKLSAgICAgICAgY29udGV4dE1l
bnUuYXBwZW5kSXRlbShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkNvbnRpbnVlIHRvIEhlcmUiKSwg
dGhpcy5fY29udGludWVUb0xpbmUuYmluZCh0aGlzLCBvcmlnaW5hbExpbmVOdW1iZXIpKTsKKyAg
ICAgICAgY29udGV4dE1lbnUuYXBwZW5kSXRlbShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkNvbnRp
bnVlIHRvIEhlcmUiKSwgdGhpcy5fY29udGludWVUb0xpbmUuYmluZCh0aGlzLCBsaW5lTnVtYmVy
KSk7CiAKLSAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSB0aGlzLl9maW5kQnJlYWtwb2ludChvcmln
aW5hbExpbmVOdW1iZXIpOworICAgICAgICB2YXIgYnJlYWtwb2ludCA9IHRoaXMuX2ZpbmRCcmVh
a3BvaW50KGxpbmVOdW1iZXIpOwogICAgICAgICBpZiAoIWJyZWFrcG9pbnQpIHsKICAgICAgICAg
ICAgIC8vIFRoaXMgcm93IGRvZXNuJ3QgaGF2ZSBhIGJyZWFrcG9pbnQ6IFdlIHdhbnQgdG8gc2hv
dyBBZGQgQnJlYWtwb2ludCBhbmQgQWRkIGFuZCBFZGl0IEJyZWFrcG9pbnQuCi0gICAgICAgICAg
ICBjb250ZXh0TWVudS5hcHBlbmRJdGVtKFdlYkluc3BlY3Rvci5VSVN0cmluZygiQWRkIEJyZWFr
cG9pbnQiKSwgdGhpcy5fc2V0QnJlYWtwb2ludC5iaW5kKHRoaXMsIG9yaWdpbmFsTGluZU51bWJl
ciwgIiIsIHRydWUpKTsKKyAgICAgICAgICAgIGNvbnRleHRNZW51LmFwcGVuZEl0ZW0oV2ViSW5z
cGVjdG9yLlVJU3RyaW5nKCJBZGQgQnJlYWtwb2ludCIpLCB0aGlzLl9zZXRCcmVha3BvaW50LmJp
bmQodGhpcywgbGluZU51bWJlciwgIiIsIHRydWUpKTsKIAogICAgICAgICAgICAgZnVuY3Rpb24g
YWRkQ29uZGl0aW9uYWxCcmVha3BvaW50KCkKICAgICAgICAgICAgIHsKQEAgLTU0NSw3ICs1MzAs
NyBAQCBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlID0gewogICAgICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVtb3ZlQnJlYWtwb2ludERlY29yYXRp
b24odGV4dFZpZXdlckxpbmVOdW1iZXIpOwogICAgICAgICAgICAgICAgICAgICBpZiAoY29tbWl0
dGVkKQotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2V0QnJlYWtwb2ludChvcmlnaW5h
bExpbmVOdW1iZXIsIHRydWUsIGNvbmRpdGlvbik7CisgICAgICAgICAgICAgICAgICAgICAgICB0
aGlzLl9zZXRCcmVha3BvaW50KGxpbmVOdW1iZXIsIHRydWUsIGNvbmRpdGlvbik7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIHRoaXMuX2VkaXRCcmVha3BvaW50Q29uZGl0aW9u
KHRleHRWaWV3ZXJMaW5lTnVtYmVyLCAiIiwgZGlkRWRpdEJyZWFrcG9pbnRDb25kaXRpb24uYmlu
ZCh0aGlzKSk7CiAgICAgICAgICAgICB9CkBAIC01NTksNyArNTQ0LDcgQEAgV2ViSW5zcGVjdG9y
LlNvdXJjZUZyYW1lLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgICAgIGlmIChjb21taXR0ZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
cG9pbnQucmVtb3ZlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZXRCcmVha3Bv
aW50KG9yaWdpbmFsTGluZU51bWJlciwgYnJlYWtwb2ludC5lbmFibGVkLCBjb25kaXRpb24pOwor
ICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2V0QnJlYWtwb2ludChsaW5lTnVtYmVyLCBi
cmVha3BvaW50LmVuYWJsZWQsIGNvbmRpdGlvbik7CiAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgdGhpcy5fZWRpdEJyZWFrcG9pbnRDb25k
aXRpb24odGV4dFZpZXdlckxpbmVOdW1iZXIsIGJyZWFrcG9pbnQuY29uZGl0aW9uLCBkaWRFZGl0
QnJlYWtwb2ludENvbmRpdGlvbi5iaW5kKHRoaXMpKTsKQEAgLTU2OCw3ICs1NTMsNyBAQCBXZWJJ
bnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlID0gewogICAgICAgICAgICAgZnVuY3Rpb24g
c2V0QnJlYWtwb2ludEVuYWJsZWQoZW5hYmxlZCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICBicmVha3BvaW50LnJlbW92ZSgpOwotICAgICAgICAgICAgICAgIHRoaXMuX3NldEJyZWFr
cG9pbnQob3JpZ2luYWxMaW5lTnVtYmVyLCBlbmFibGVkLCBicmVha3BvaW50LmNvbmRpdGlvbik7
CisgICAgICAgICAgICAgICAgdGhpcy5fc2V0QnJlYWtwb2ludChsaW5lTnVtYmVyLCBlbmFibGVk
LCBicmVha3BvaW50LmNvbmRpdGlvbik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAo
YnJlYWtwb2ludC5lbmFibGVkKQogICAgICAgICAgICAgICAgIGNvbnRleHRNZW51LmFwcGVuZEl0
ZW0oV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJEaXNhYmxlIEJyZWFrcG9pbnQiKSwgc2V0QnJlYWtw
b2ludEVuYWJsZWQuYmluZCh0aGlzLCBmYWxzZSkpOwpAQCAtNTkyLDE1ICs1NzcsMTUgQEAgV2Vi
SW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZSA9IHsKICAgICAgICAgdmFyIHRhcmdldCA9
IGV2ZW50LnRhcmdldC5lbmNsb3NpbmdOb2RlT3JTZWxmV2l0aENsYXNzKCJ3ZWJraXQtbGluZS1u
dW1iZXIiKTsKICAgICAgICAgaWYgKCF0YXJnZXQpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIHZhciBvcmlnaW5hbExpbmVOdW1iZXIgPSB0aGlzLl9mb3JtYXR0ZXIuZm9ybWF0dGVkTGlu
ZU51bWJlclRvT3JpZ2luYWxMaW5lTnVtYmVyKHRhcmdldC5wYXJlbnRFbGVtZW50LmxpbmVOdW1i
ZXIpOworICAgICAgICB2YXIgbGluZU51bWJlciA9IHRhcmdldC5wYXJlbnRFbGVtZW50LmxpbmVO
dW1iZXI7CiAKLSAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSB0aGlzLl9maW5kQnJlYWtwb2ludChv
cmlnaW5hbExpbmVOdW1iZXIpOworICAgICAgICB2YXIgYnJlYWtwb2ludCA9IHRoaXMuX2ZpbmRC
cmVha3BvaW50KGxpbmVOdW1iZXIpOwogICAgICAgICBpZiAoYnJlYWtwb2ludCkgewogICAgICAg
ICAgICAgYnJlYWtwb2ludC5yZW1vdmUoKTsKICAgICAgICAgICAgIGlmIChldmVudC5zaGlmdEtl
eSkKLSAgICAgICAgICAgICAgICB0aGlzLl9zZXRCcmVha3BvaW50KG9yaWdpbmFsTGluZU51bWJl
ciwgIWJyZWFrcG9pbnQuZW5hYmxlZCwgYnJlYWtwb2ludC5jb25kaXRpb24pOworICAgICAgICAg
ICAgICAgIHRoaXMuX3NldEJyZWFrcG9pbnQobGluZU51bWJlciwgIWJyZWFrcG9pbnQuZW5hYmxl
ZCwgYnJlYWtwb2ludC5jb25kaXRpb24pOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHRo
aXMuX3NldEJyZWFrcG9pbnQob3JpZ2luYWxMaW5lTnVtYmVyLCB0cnVlLCAiIik7CisgICAgICAg
ICAgICB0aGlzLl9zZXRCcmVha3BvaW50KGxpbmVOdW1iZXIsIHRydWUsICIiKTsKICAgICAgICAg
ZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICB9LAogCkBAIC04MzEsMjMgKzgxNiwyNCBAQCBX
ZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlID0gewogCiAgICAgZm9ybWF0U291cmNl
OiBmdW5jdGlvbigpCiAgICAgewotICAgICAgICBpZiAoIXRoaXMuX2Zvcm1hdHRlcikKKyAgICAg
ICAgaWYgKCF0aGlzLl9jb250ZW50KQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGZ1
bmN0aW9uIGRpZEZvcm1hdChzb3VyY2UpCisgICAgICAgIGZ1bmN0aW9uIGRpZEZvcm1hdChmb3Jt
YXR0ZWRDb250ZW50KQogICAgICAgICB7Ci0gICAgICAgICAgICB0aGlzLl90ZXh0TW9kZWwuc2V0
VGV4dChudWxsLCBzb3VyY2UpOworICAgICAgICAgICAgdGhpcy5fZm9ybWF0dGVkQ29udGVudCA9
IGZvcm1hdHRlZENvbnRlbnQ7CisgICAgICAgICAgICB0aGlzLl90ZXh0TW9kZWwuc2V0VGV4dChu
dWxsLCBmb3JtYXR0ZWRDb250ZW50LnRleHQpOwogICAgICAgICAgICAgdGhpcy5fc2V0VGV4dFZp
ZXdlckRlY29yYXRpb25zKCk7CiAgICAgICAgIH0KLSAgICAgICAgdGhpcy5fZm9ybWF0dGVyLmZv
cm1hdChkaWRGb3JtYXQuYmluZCh0aGlzKSk7CisgICAgICAgIHZhciBmb3JtYXR0ZXIgPSBuZXcg
V2ViSW5zcGVjdG9yLlNjcmlwdEZvcm1hdHRlcigpOworICAgICAgICBmb3JtYXR0ZXIuZm9ybWF0
Q29udGVudCh0aGlzLl9jb250ZW50LCBkaWRGb3JtYXQuYmluZCh0aGlzKSkKICAgICB9LAogCiAg
ICAgX2NvbnRpbnVlVG9MaW5lOiBmdW5jdGlvbihsaW5lTnVtYmVyKQogICAgIHsKLSAgICAgICAg
dmFyIHNvdXJjZUlEID0gdGhpcy5fc291cmNlSURGb3JMaW5lKGxpbmVOdW1iZXIpOwotICAgICAg
ICBpZiAoIXNvdXJjZUlEKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBXZWJJbnNwZWN0
b3IuZGVidWdnZXJNb2RlbC5jb250aW51ZVRvTGluZShzb3VyY2VJRCwgbGluZU51bWJlciArIDEp
OworICAgICAgICB2YXIgbG9jYXRpb24gPSB0aGlzLl90ZXh0Vmlld2VyTGluZU51bWJlclRvU2Ny
aXB0TG9jYXRpb24obGluZU51bWJlcik7CisgICAgICAgIGlmIChsb2NhdGlvbikKKyAgICAgICAg
ICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1vZGVsLmNvbnRpbnVlVG9MaW5lKGxvY2F0aW9uLnNv
dXJjZUlELCBsb2NhdGlvbi5saW5lTnVtYmVyKTsKICAgICB9LAogCiAgICAgX2RvdWJsZUNsaWNr
OiBmdW5jdGlvbihldmVudCkKQEAgLTg2MSwzMSArODQ3LDMxIEBAIFdlYkluc3BlY3Rvci5Tb3Vy
Y2VGcmFtZS5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgdmFyIGxpbmVSb3cgPSB0YXJnZXQucGFy
ZW50RWxlbWVudDsKICAgICAgICAgdmFyIGxpbmVOdW1iZXIgPSBsaW5lUm93LmxpbmVOdW1iZXI7
Ci0gICAgICAgIHZhciBzb3VyY2VJRCA9IHRoaXMuX3NvdXJjZUlERm9yTGluZShsaW5lTnVtYmVy
KTsKLSAgICAgICAgaWYgKCFzb3VyY2VJRCkKKyAgICAgICAgdmFyIHNjcmlwdExvY2F0aW9uID0g
dGhpcy5fdGV4dFZpZXdlckxpbmVOdW1iZXJUb1NjcmlwdExvY2F0aW9uKGxpbmVOdW1iZXIpOwor
ICAgICAgICBpZiAoIXNjcmlwdExvY2F0aW9uKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAg
ICAgIGZ1bmN0aW9uIGRpZEVkaXRMaW5lKG5ld0NvbnRlbnQpCiAgICAgICAgIHsKICAgICAgICAg
ICAgIHZhciBsaW5lcyA9IFtdOwotICAgICAgICAgICAgdmFyIG9sZExpbmVzID0gdGhpcy5fY29u
dGVudC5zcGxpdCgnXG4nKTsKKyAgICAgICAgICAgIHZhciBvbGRMaW5lcyA9IHRoaXMuX2NvbnRl
bnQudGV4dC5zcGxpdCgnXG4nKTsKICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2xk
TGluZXMubGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgICAgICBpZiAoaSA9PT0gbGluZU51bWJl
cikKICAgICAgICAgICAgICAgICAgICAgbGluZXMucHVzaChuZXdDb250ZW50KTsKICAgICAgICAg
ICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGxpbmVzLnB1c2gob2xkTGluZXNbaV0p
OwogICAgICAgICAgICAgfQotICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwu
ZWRpdFNjcmlwdFNvdXJjZShzb3VyY2VJRCwgbGluZXMuam9pbigiXG4iKSk7CisgICAgICAgICAg
ICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNb2RlbC5lZGl0U2NyaXB0U291cmNlKHNjcmlwdExvY2F0
aW9uLnNvdXJjZUlELCBsaW5lcy5qb2luKCJcbiIpKTsKICAgICAgICAgfQogICAgICAgICB0aGlz
Ll90ZXh0Vmlld2VyLmVkaXRMaW5lKGxpbmVSb3csIGRpZEVkaXRMaW5lLmJpbmQodGhpcykpOwog
ICAgIH0sCiAKICAgICBfc2V0QnJlYWtwb2ludDogZnVuY3Rpb24obGluZU51bWJlciwgZW5hYmxl
ZCwgY29uZGl0aW9uKQogICAgIHsKLSAgICAgICAgdmFyIHNvdXJjZUlEID0gdGhpcy5fc291cmNl
SURGb3JMaW5lKGxpbmVOdW1iZXIpOwotICAgICAgICBpZiAoIXNvdXJjZUlEKQorICAgICAgICB2
YXIgbG9jYXRpb24gPSB0aGlzLl90ZXh0Vmlld2VyTGluZU51bWJlclRvU2NyaXB0TG9jYXRpb24o
bGluZU51bWJlcik7CisgICAgICAgIGlmICghbG9jYXRpb24pCiAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1vZGVsLnNldEJyZWFrcG9pbnQoc291cmNl
SUQsIGxpbmVOdW1iZXIgKyAxLCBlbmFibGVkLCBjb25kaXRpb24pOworICAgICAgICBXZWJJbnNw
ZWN0b3IuZGVidWdnZXJNb2RlbC5zZXRCcmVha3BvaW50KGxvY2F0aW9uLnNvdXJjZUlELCBsb2Nh
dGlvbi5saW5lTnVtYmVyLCBlbmFibGVkLCBjb25kaXRpb24pOwogICAgICAgICBpZiAoIVdlYklu
c3BlY3Rvci5wYW5lbHMuc2NyaXB0cy5icmVha3BvaW50c0FjdGl2YXRlZCkKICAgICAgICAgICAg
IFdlYkluc3BlY3Rvci5wYW5lbHMuc2NyaXB0cy50b2dnbGVCcmVha3BvaW50c0NsaWNrZWQoKTsK
ICAgICB9LApAQCAtODk4LDIzICs4ODQsOSBAQCBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJv
dG90eXBlID0gewogCiAgICAgX2ZpbmRCcmVha3BvaW50OiBmdW5jdGlvbihsaW5lTnVtYmVyKQog
ICAgIHsKLSAgICAgICAgdmFyIHNvdXJjZUlEID0gdGhpcy5fc291cmNlSURGb3JMaW5lKGxpbmVO
dW1iZXIpOwotICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwuZmluZEJy
ZWFrcG9pbnQoc291cmNlSUQsIGxpbmVOdW1iZXIgKyAxKTsKLSAgICB9LAotCi0gICAgX3NvdXJj
ZUlERm9yTGluZTogZnVuY3Rpb24obGluZU51bWJlcikKLSAgICB7Ci0gICAgICAgIHZhciBzb3Vy
Y2VJREZvckxpbmUgPSBudWxsOwotICAgICAgICB2YXIgY2xvc2VzdFN0YXJ0aW5nTGluZSA9IDA7
Ci0gICAgICAgIHZhciBzY3JpcHRzID0gdGhpcy5fY29udGVudFByb3ZpZGVyLnNjcmlwdHMoKTsK
LSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzY3JpcHRzLmxlbmd0aDsgKytpKSB7Ci0gICAg
ICAgICAgICB2YXIgbGluZU9mZnNldCA9IHNjcmlwdHNbaV0ubGluZU9mZnNldDsKLSAgICAgICAg
ICAgIGlmIChsaW5lT2Zmc2V0IDw9IGxpbmVOdW1iZXIgJiYgbGluZU9mZnNldCA+PSBjbG9zZXN0
U3RhcnRpbmdMaW5lKSB7Ci0gICAgICAgICAgICAgICAgY2xvc2VzdFN0YXJ0aW5nTGluZSA9IGxp
bmVPZmZzZXQ7Ci0gICAgICAgICAgICAgICAgc291cmNlSURGb3JMaW5lID0gc2NyaXB0c1tpXS5z
b3VyY2VJRDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gc291cmNl
SURGb3JMaW5lOworICAgICAgICB2YXIgbG9jYXRpb24gPSB0aGlzLl90ZXh0Vmlld2VyTGluZU51
bWJlclRvU2NyaXB0TG9jYXRpb24obGluZU51bWJlcik7CisgICAgICAgIGlmIChsb2NhdGlvbikK
KyAgICAgICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IuZGVidWdnZXJNb2RlbC5maW5kQnJlYWtw
b2ludChsb2NhdGlvbi5zb3VyY2VJRCwgbG9jYXRpb24ubGluZU51bWJlcik7CiAgICAgfSwKIAog
ICAgIF9zb3VyY2VJRFNldDogZnVuY3Rpb24oKQpAQCAtOTI0LDYgKzg5NiwyNyBAQCBXZWJJbnNw
ZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlID0gewogICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IHNjcmlwdHMubGVuZ3RoOyArK2kpCiAgICAgICAgICAgICBzb3VyY2VJRFNldFtzY3JpcHRz
W2ldLnNvdXJjZUlEXSA9IHRydWU7CiAgICAgICAgIHJldHVybiBzb3VyY2VJRFNldDsKKyAgICB9
LAorCisgICAgX29yaWdpbmFsTG9jYXRpb25Ub1RleHRWaWV3ZXJMaW5lTnVtYmVyOiBmdW5jdGlv
bihsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpCisgICAgeworICAgICAgICBpZiAoIXRoaXMuX2Zv
cm1hdHRlZENvbnRlbnQpCisgICAgICAgICAgICByZXR1cm4gbGluZU51bWJlciAtIDE7CisgICAg
ICAgIHJldHVybiB0aGlzLl9mb3JtYXR0ZWRDb250ZW50Lm9yaWdpbmFsTG9jYXRpb25Ub0Zvcm1h
dHRlZExvY2F0aW9uKGxpbmVOdW1iZXIgLSAxLCBjb2x1bW5OdW1iZXIgLSAxKS5saW5lTnVtYmVy
OworICAgIH0sCisKKyAgICBfdGV4dFZpZXdlckxpbmVOdW1iZXJUb1NjcmlwdExvY2F0aW9uOiBm
dW5jdGlvbihsaW5lTnVtYmVyKQorICAgIHsKKyAgICAgICAgdmFyIHNjcmlwdExvY2F0aW9uOwor
ICAgICAgICBpZiAoIXRoaXMuX2Zvcm1hdHRlZENvbnRlbnQpCisgICAgICAgICAgICBzY3JpcHRM
b2NhdGlvbiA9IHRoaXMuX2NvbnRlbnQuc2NyaXB0TG9jYXRpb25Gb3JMaW5lTnVtYmVyKGxpbmVO
dW1iZXIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzY3JpcHRMb2NhdGlvbiA9IHRoaXMu
X2Zvcm1hdHRlZENvbnRlbnQuc2NyaXB0TG9jYXRpb25Gb3JGb3JtYXR0ZWRMaW5lTnVtYmVyKGxp
bmVOdW1iZXIpOworICAgICAgICBpZiAoIXNjcmlwdExvY2F0aW9uKQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICBzY3JpcHRMb2NhdGlvbi5saW5lTnVtYmVyICs9IDE7CisgICAgICAgIHNj
cmlwdExvY2F0aW9uLmNvbHVtbk51bWJlciArPSAxOworICAgICAgICByZXR1cm4gc2NyaXB0TG9j
YXRpb247CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL1NvdXJjZUZyYW1lQ29udGVudC5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvU291cmNlRnJhbWVDb250ZW50LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjI5MjdlODQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZUZyYW1lQ29udGVudC5qcwpAQCAtMCwwICsxLDE0OSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
K1dlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZUNvbnRlbnQgPSBmdW5jdGlvbih0ZXh0LCBzY3JpcHRz
KQoreworICAgIGlmIChzY3JpcHRzLmxlbmd0aCAmJiBzY3JpcHRzWzBdLmxlbmd0aCA8IHRleHQu
bGVuZ3RoKQorICAgICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC9cclxuL2csICJcbiIpOworICAg
IHRoaXMuX3RleHQgPSB0ZXh0OworICAgIHRoaXMuX2xpbmVFbmRpbmdzID0gdGV4dC5maW5kQWxs
KCJcbiIpOworICAgIHRoaXMuX2xpbmVFbmRpbmdzLnB1c2godGV4dC5sZW5ndGgpOworCisgICAg
dGhpcy5fc2NyaXB0UmFuZ2VzID0gW107CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzY3JpcHRz
Lmxlbmd0aDsgKytpKSB7CisgICAgICAgIHZhciBzY3JpcHQgPSBzY3JpcHRzW2ldOworICAgICAg
ICB2YXIgb2Zmc2V0ID0gdGhpcy5sb2NhdGlvblRvUG9zaXRpb24oc2NyaXB0LmxpbmVPZmZzZXQs
IHNjcmlwdC5jb2x1bW5PZmZzZXQpOworICAgICAgICB0aGlzLl9zY3JpcHRSYW5nZXMucHVzaCh7
IHN0YXJ0OiBvZmZzZXQsIGVuZDogb2Zmc2V0ICsgc2NyaXB0Lmxlbmd0aCwgc2NyaXB0OiBzY3Jp
cHQgfSk7CisgICAgfQorICAgIHRoaXMuX3NjcmlwdFJhbmdlcy5zb3J0KGZ1bmN0aW9uKHgsIHkp
IHsgcmV0dXJuIHguc3RhcnQgLSB5LnN0YXJ0OyB9KTsKK30KKworV2ViSW5zcGVjdG9yLlNvdXJj
ZUZyYW1lQ29udGVudC5wcm90b3R5cGUgPSB7CisgICAgZ2V0IHRleHQoKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHRoaXMuX3RleHQ7CisgICAgfSwKKworICAgIGdldCBzY3JpcHRSYW5nZXMoKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3NjcmlwdFJhbmdlczsKKyAgICB9LAorCisgICAg
bG9jYXRpb25Ub1Bvc2l0aW9uOiBmdW5jdGlvbihsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpCisg
ICAgeworICAgICAgICB2YXIgcG9zaXRpb24gPSBsaW5lTnVtYmVyID8gdGhpcy5fbGluZUVuZGlu
Z3NbbGluZU51bWJlciAtIDFdICsgMSA6IDA7CisgICAgICAgIHJldHVybiBwb3NpdGlvbiArIGNv
bHVtbk51bWJlcjsKKyAgICB9LAorCisgICAgcG9zaXRpb25Ub0xvY2F0aW9uOiBmdW5jdGlvbihw
b3NpdGlvbikKKyAgICB7CisgICAgICAgIHZhciBsb2NhdGlvbiA9IHt9OworICAgICAgICBsb2Nh
dGlvbi5saW5lTnVtYmVyID0gdGhpcy5fbGluZUVuZGluZ3MudXBwZXJCb3VuZChwb3NpdGlvbiAt
IDEpOworICAgICAgICBpZiAoIWxvY2F0aW9uLmxpbmVOdW1iZXIpCisgICAgICAgICAgICBsb2Nh
dGlvbi5jb2x1bW5OdW1iZXIgPSBwb3NpdGlvbjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
bG9jYXRpb24uY29sdW1uTnVtYmVyID0gcG9zaXRpb24gLSB0aGlzLl9saW5lRW5kaW5nc1tsb2Nh
dGlvbi5saW5lTnVtYmVyIC0gMV0gLSAxOworICAgICAgICByZXR1cm4gbG9jYXRpb247CisgICAg
fSwKKworICAgIHNjcmlwdExvY2F0aW9uRm9yTGluZU51bWJlcjogZnVuY3Rpb24obGluZU51bWJl
cikKKyAgICB7CisgICAgICAgIHZhciByYW5nZSA9IHRoaXMubGluZU51bWJlclRvUmFuZ2UobGlu
ZU51bWJlcik7CisgICAgICAgIHJldHVybiB0aGlzLnNjcmlwdExvY2F0aW9uRm9yUmFuZ2UocmFu
Z2Uuc3RhcnQsIHJhbmdlLmVuZCk7CisgICAgfSwKKworICAgIHNjcmlwdExvY2F0aW9uRm9yUmFu
Z2U6IGZ1bmN0aW9uKHN0YXJ0LCBlbmQpCisgICAgeworICAgICAgICB2YXIgc2NyaXB0UmFuZ2Ug
PSB0aGlzLl9pbnRlcnNlY3RpbmdTY3JpcHRSYW5nZShzdGFydCwgZW5kKTsKKyAgICAgICAgaWYg
KCFzY3JpcHRSYW5nZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdmFyIHBvc2l0aW9u
ID0gTWF0aC5tYXgoc3RhcnQsIHNjcmlwdFJhbmdlLnN0YXJ0KTsKKyAgICAgICAgdmFyIHNjcmlw
dExvY2F0aW9uID0gdGhpcy5wb3NpdGlvblRvTG9jYXRpb24ocG9zaXRpb24pOworICAgICAgICBz
Y3JpcHRMb2NhdGlvbi5zb3VyY2VJRCA9IHNjcmlwdFJhbmdlLnNjcmlwdC5zb3VyY2VJRDsKKyAg
ICAgICAgcmV0dXJuIHNjcmlwdExvY2F0aW9uOworICAgIH0sCisKKyAgICBsaW5lTnVtYmVyVG9S
YW5nZTogZnVuY3Rpb24obGluZU51bWJlcikKKyAgICB7CisgICAgICAgIHZhciBwcmV2aW91c0xp
bmVFbmQgPSB0aGlzLl9saW5lRW5kaW5nc1tsaW5lTnVtYmVyIC0gMV0gfHwgMDsKKyAgICAgICAg
dmFyIGxpbmVFbmQgPSB0aGlzLl9saW5lRW5kaW5nc1tsaW5lTnVtYmVyXTsKKyAgICAgICAgcmV0
dXJuIHsgc3RhcnQ6IHByZXZpb3VzTGluZUVuZCArIDEsIGVuZDogbGluZUVuZCB9OworICAgIH0s
CisKKyAgICBfaW50ZXJzZWN0aW5nU2NyaXB0UmFuZ2U6IGZ1bmN0aW9uKHN0YXJ0LCBlbmQpCisg
ICAgeworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3NjcmlwdFJhbmdlcy5sZW5n
dGg7ICsraSkgeworICAgICAgICAgICAgdmFyIHNjcmlwdFJhbmdlID0gdGhpcy5fc2NyaXB0UmFu
Z2VzW2ldOworICAgICAgICAgICAgaWYgKHN0YXJ0IDwgc2NyaXB0UmFuZ2UuZW5kICYmIGVuZCA+
IHNjcmlwdFJhbmdlLnN0YXJ0KQorICAgICAgICAgICAgICAgIHJldHVybiBzY3JpcHRSYW5nZTsK
KyAgICAgICAgfQorICAgIH0KK30KKworCitXZWJJbnNwZWN0b3IuRm9ybWF0dGVkU291cmNlRnJh
bWVDb250ZW50ID0gZnVuY3Rpb24ob3JpZ2luYWxDb250ZW50LCB0ZXh0LCBtYXBwaW5nKQorewor
ICAgIHRoaXMuX29yaWdpbmFsQ29udGVudCA9IG9yaWdpbmFsQ29udGVudDsKKyAgICB0aGlzLl9m
b3JtYXR0ZWRDb250ZW50ID0gbmV3IFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZUNvbnRlbnQodGV4
dCwgW10pOworICAgIHRoaXMuX21hcHBpbmcgPSBtYXBwaW5nOworfQorCitXZWJJbnNwZWN0b3Iu
Rm9ybWF0dGVkU291cmNlRnJhbWVDb250ZW50LnByb3RvdHlwZSA9IHsKKyAgICBnZXQgdGV4dCgp
CisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fZm9ybWF0dGVkQ29udGVudC50ZXh0OworICAg
IH0sCisKKyAgICBvcmlnaW5hbExvY2F0aW9uVG9Gb3JtYXR0ZWRMb2NhdGlvbjogZnVuY3Rpb24o
bGluZU51bWJlciwgY29sdW1uTnVtYmVyKQorICAgIHsKKyAgICAgICAgdmFyIG9yaWdpbmFsUG9z
aXRpb24gPSB0aGlzLl9vcmlnaW5hbENvbnRlbnQubG9jYXRpb25Ub1Bvc2l0aW9uKGxpbmVOdW1i
ZXIsIGNvbHVtbk51bWJlcik7CisgICAgICAgIHZhciBmb3JtYXR0ZWRQb3NpdGlvbiA9IHRoaXMu
X2NvbnZlcnRQb3NpdGlvbih0aGlzLl9tYXBwaW5nLm9yaWdpbmFsLCB0aGlzLl9tYXBwaW5nLmZv
cm1hdHRlZCwgb3JpZ2luYWxQb3NpdGlvbik7CisgICAgICAgIHJldHVybiB0aGlzLl9mb3JtYXR0
ZWRDb250ZW50LnBvc2l0aW9uVG9Mb2NhdGlvbihmb3JtYXR0ZWRQb3NpdGlvbik7CisgICAgfSwK
KworICAgIHNjcmlwdExvY2F0aW9uRm9yRm9ybWF0dGVkTGluZU51bWJlcjogZnVuY3Rpb24obGlu
ZU51bWJlcikKKyAgICB7CisgICAgICAgIHZhciByYW5nZSA9IHRoaXMuX2Zvcm1hdHRlZENvbnRl
bnQubGluZU51bWJlclRvUmFuZ2UobGluZU51bWJlcik7CisgICAgICAgIHZhciBzdGFydCA9IHRo
aXMuX2NvbnZlcnRQb3NpdGlvbih0aGlzLl9tYXBwaW5nLmZvcm1hdHRlZCwgdGhpcy5fbWFwcGlu
Zy5vcmlnaW5hbCwgcmFuZ2Uuc3RhcnQpOworICAgICAgICB2YXIgZW5kID0gdGhpcy5fY29udmVy
dFBvc2l0aW9uKHRoaXMuX21hcHBpbmcuZm9ybWF0dGVkLCB0aGlzLl9tYXBwaW5nLm9yaWdpbmFs
LCByYW5nZS5lbmQpOworICAgICAgICByZXR1cm4gdGhpcy5fb3JpZ2luYWxDb250ZW50LnNjcmlw
dExvY2F0aW9uRm9yUmFuZ2Uoc3RhcnQsIGVuZCk7CisgICAgfSwKKworICAgIF9jb252ZXJ0UG9z
aXRpb246IGZ1bmN0aW9uKHBvc2l0aW9uczEsIHBvc2l0aW9uczIsIHBvc2l0aW9uKQorICAgIHsK
KyAgICAgICAgdmFyIGluZGV4ID0gcG9zaXRpb25zMS51cHBlckJvdW5kKHBvc2l0aW9uKTsKKyAg
ICAgICAgdmFyIHJhbmdlMSA9IHBvc2l0aW9uczFbaW5kZXhdIC0gcG9zaXRpb25zMVtpbmRleCAt
IDFdOworICAgICAgICB2YXIgcmFuZ2UyID0gcG9zaXRpb25zMltpbmRleF0gLSBwb3NpdGlvbnMy
W2luZGV4IC0gMV07CisgICAgICAgIHZhciBwb3NpdGlvbjIgPSBwb3NpdGlvbnMyW2luZGV4IC0g
MV07CisgICAgICAgIGlmIChyYW5nZTEpCisgICAgICAgICAgICBwb3NpdGlvbjIgKz0gTWF0aC5y
b3VuZCgocG9zaXRpb24gLSBwb3NpdGlvbnMxW2luZGV4IC0gMV0pICogcmFuZ2UyIC8gcmFuZ2Ux
KTsKKyAgICAgICAgcmV0dXJuIHBvc2l0aW9uMjsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1dlYktpdC5xcmMgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1dlYktpdC5xcmMKaW5kZXggNThlNjg2OS4uNTU3MTFmOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9XZWJLaXQucXJj
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvV2ViS2l0LnFyYwpAQCAt
OTMsNiArOTMsNyBAQAogICAgIDxmaWxlPlNpZGViYXJUcmVlRWxlbWVudC5qczwvZmlsZT4KICAg
ICA8ZmlsZT5Tb3VyY2VDU1NUb2tlbml6ZXIuanM8L2ZpbGU+CiAgICAgPGZpbGU+U291cmNlRnJh
bWUuanM8L2ZpbGU+CisgICAgPGZpbGU+U291cmNlRnJhbWVDb250ZW50LmpzPC9maWxlPgogICAg
IDxmaWxlPlNvdXJjZUhUTUxUb2tlbml6ZXIuanM8L2ZpbGU+CiAgICAgPGZpbGU+U291cmNlSmF2
YVNjcmlwdFRva2VuaXplci5qczwvZmlsZT4KICAgICA8ZmlsZT5Tb3VyY2VUb2tlbml6ZXIuanM8
L2ZpbGU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2lu
c3BlY3Rvci5odG1sIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0
b3IuaHRtbAppbmRleCAxOTNkZWViLi44MWM0NzdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5odG1sCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWwKQEAgLTEwMiw2ICsxMDIsNyBAQCBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ik5ldHdvcmtQ
YW5lbC5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNy
Yz0iSW5qZWN0ZWRGYWtlV29ya2VyLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRl
eHQvamF2YXNjcmlwdCIgc3JjPSJTb3VyY2VGcmFtZS5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlw
dCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iU291cmNlRnJhbWVDb250ZW50LmpzIj48L3Nj
cmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJSZXNvdXJjZVZp
ZXcuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9
IlNjcmlwdHNQYW5lbC5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFz
Y3JpcHQiIHNyYz0iUmVzb3VyY2VzUGFuZWwuanMiPjwvc2NyaXB0Pgo=
</data>
<flag name="review"
          id="72141"
          type_id="1"
          status="-"
          setter="yurys"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>81200</attachid>
            <date>2011-02-04 02:19:39 -0800</date>
            <delta_ts>2011-02-06 23:08:39 -0800</delta_ts>
            <desc>Rebase.</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>30840</size>
            <attacher name="Pavel Podivilov">podivilov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAzYjU0YjkyLi42ZTkwZWYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDgg
QEAKKzIwMTEtMDEtMzEgIFBhdmVsIFBvZGl2aWxvdiAgPHBvZGl2aWxvdkBjaHJvbWl1bS5vcmc+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIElu
c3BlY3RvcjogaW1wbGVtZW50IGJlYXV0aWZpY2F0aW9uIG9mIHNjcmlwdHMgaW5saW5lZCBpbiBo
dG1sIGRvY3VtZW50cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTUyNzA2CisKKyAgICAgICAgVG8gYmVhdXRpZnkgc2NyaXB0cyBpbmxpbmVkIGluIGh0
bWwsIHdlIG5lZWQgdG8gY3V0IGluZGl2aWR1YWwgc2NyaXB0cywgYmVhdXRpZnkgdGhlbSB1c2lu
ZyBVZ2xpZnlKUyBsaWJyYXJ5LCBhbmQKKyAgICAgICAgZmluYWxseSBwYXN0ZSB0aGVtIGJhY2sg
dG8gaHRtbC4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnZj
cHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1Njcmlw
dEZvcm1hdHRlci5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRGb3JtYXR0ZXIpOiBJ
bXBsZW1lbnQgZm9ybWF0dGluZyBvZiBzY3JpcHRzIGlubGluZWQgaW4gaHRtbC4KKyAgICAgICAg
KFdlYkluc3BlY3Rvci5TY3JpcHRGb3JtYXR0ZXIucHJvdG90eXBlLmZvcm1hdENvbnRlbnQuZGlk
Rm9ybWF0Q2h1bmtzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRGb3JtYXR0ZXIucHJv
dG90eXBlLmZvcm1hdENvbnRlbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdEZvcm1h
dHRlci5wcm90b3R5cGUuX3NwbGl0Q29udGVudEludG9DaHVua3MpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlNjcmlwdEZvcm1hdHRlci5wcm90b3R5cGUuX2Zvcm1hdENodW5rcy5kaWRGb3JtYXQp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdEZvcm1hdHRlci5wcm90b3R5cGUuX2Zvcm1h
dENodW5rcyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0Rm9ybWF0dGVyLnByb3RvdHlw
ZS5fYnVpbGRDb250ZW50RnJvbUNodW5rcyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0
Rm9ybWF0dGVyLnByb3RvdHlwZS5fZm9ybWF0U2NyaXB0Lm1lc3NhZ2VIYW5kbGVyKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5TY3JpcHRGb3JtYXR0ZXIucHJvdG90eXBlLl9mb3JtYXRTY3JpcHQp
OgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0Rm9ybWF0dGVyV29ya2VyLmpz
OgorICAgICAgICAob25tZXNzYWdlKToKKyAgICAgICAgKGJ1aWxkTWFwcGluZyk6CisgICAgICAg
ICogaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VGcmFtZS5qczoKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5Tb3VyY2VGcmFtZUNvbnRlbnQpOiBVc2UgU291cmNlRnJhbWVDb250ZW50IGFuZCBGb3Jt
YXR0ZWRTb3VyY2VGcmFtZUNvbnRlbnQgdG8gcGVyZm9ybSBvcGVyYXRpb25zIHdpdGggbGluZSBu
dW1iZXJzLgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvU291cmNlRnJhbWVDb250ZW50
LmpzOiBBZGRlZC4KKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZUNvbnRlbnQpOiBI
ZWxwZXIgY2xhc3MsIGhvbGRzIHJlc291cmNlIHRleHQgYW5kIHNjcmlwdHMgbGF5b3V0CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWVDb250ZW50LnByb3RvdHlwZS5nZXQgc2NyaXB0
UmFuZ2VzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZUNvbnRlbnQucHJvdG90
eXBlLmxvY2F0aW9uVG9Qb3NpdGlvbik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJh
bWVDb250ZW50LnByb3RvdHlwZS5wb3NpdGlvblRvTG9jYXRpb24pOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlNvdXJjZUZyYW1lQ29udGVudC5wcm90b3R5cGUuc2NyaXB0TG9jYXRpb25Gb3JMaW5l
TnVtYmVyKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZUNvbnRlbnQucHJvdG90
eXBlLnNjcmlwdExvY2F0aW9uRm9yUmFuZ2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJj
ZUZyYW1lQ29udGVudC5wcm90b3R5cGUubGluZU51bWJlclRvUmFuZ2UpOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLlNvdXJjZUZyYW1lQ29udGVudC5wcm90b3R5cGUuX2ludGVyc2VjdGluZ1Njcmlw
dFJhbmdlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvcik6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
Rm9ybWF0dGVkU291cmNlRnJhbWVDb250ZW50KTogSGVscGVyIGNsYXNzLCBob2xkcyBvcmlnaW5h
bCBhbmQgZm9ybWF0dGVkIHZlcnNpb25zIG9mIHJlc291cmNlIGFuZCBtYXBwaW5nIGJldHdlZW4g
dGhlbS4KKyAgICAgICAgKFdlYkluc3BlY3Rvci5Gb3JtYXR0ZWRTb3VyY2VGcmFtZUNvbnRlbnQu
cHJvdG90eXBlLmdldCB0ZXh0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Gb3JtYXR0ZWRTb3Vy
Y2VGcmFtZUNvbnRlbnQucHJvdG90eXBlLm9yaWdpbmFsTG9jYXRpb25Ub0Zvcm1hdHRlZExvY2F0
aW9uKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Gb3JtYXR0ZWRTb3VyY2VGcmFtZUNvbnRlbnQu
cHJvdG90eXBlLnNjcmlwdExvY2F0aW9uRm9yRm9ybWF0dGVkTGluZU51bWJlcik6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuRm9ybWF0dGVkU291cmNlRnJhbWVDb250ZW50LnByb3RvdHlwZS5fY29u
dmVydFBvc2l0aW9uKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1dlYktpdC5xcmM6
CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuaHRtbDoKKwogMjAxMS0w
Mi0wMyAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIEF0dGVtcHQg
dG8gZml4IENocm9taXVtIGJ1aWxkLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDIxM2ViYTM0Li4wOTdm
OWQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC00NzQwLDYgKzQ3NDAsNyBAQAogICAgICAgICAgICAg
J2luc3BlY3Rvci9mcm9udC1lbmQvU2lkZWJhclRyZWVFbGVtZW50LmpzJywKICAgICAgICAgICAg
ICdpbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZUNTU1Rva2VuaXplci5qcycsCiAgICAgICAgICAg
ICAnaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VGcmFtZS5qcycsCisgICAgICAgICAgICAnaW5z
cGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VGcmFtZUNvbnRlbnQuanMnLAogICAgICAgICAgICAgJ2lu
c3BlY3Rvci9mcm9udC1lbmQvU291cmNlSFRNTFRva2VuaXplci5qcycsCiAgICAgICAgICAgICAn
aW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VKYXZhU2NyaXB0VG9rZW5pemVyLmpzJywKICAgICAg
ICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZVRva2VuaXplci5qcycsCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCmluZGV4IDZiNzI3MzMuLmE2
MTMyM2UgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUu
dmNwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9q
CkBAIC02NTk3Nyw2ICs2NTk3NywxMCBAQAogCQkJCQk+CiAJCQkJPC9GaWxlPgogCQkJCTxGaWxl
CisJCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxTb3VyY2VGcmFtZUNv
bnRlbnQuanMiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKIAkJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFNvdXJjZUhUTUxUb2tlbml6ZXIuanMiCiAJCQkJ
CT4KIAkJCQk8L0ZpbGU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL1NjcmlwdEZvcm1hdHRlci5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvU2NyaXB0Rm9ybWF0dGVyLmpzCmluZGV4IDY5ZmZiNzQuLjcyZmZlMzcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0Rm9ybWF0dGVyLmpz
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0Rm9ybWF0dGVy
LmpzCkBAIC0yOCwxMDcgKzI4LDEwNCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi1XZWJJbnNw
ZWN0b3IuU2NyaXB0Rm9ybWF0dGVyID0gZnVuY3Rpb24oc291cmNlKQorV2ViSW5zcGVjdG9yLlNj
cmlwdEZvcm1hdHRlciA9IGZ1bmN0aW9uKCkKIHsKLSAgICB0aGlzLl9vcmlnaW5hbFNvdXJjZSA9
IHNvdXJjZTsKLSAgICB0aGlzLl9vcmlnaW5hbExpbmVFbmRpbmdzID0gc291cmNlLmZpbmRBbGwo
IlxuIik7Ci0gICAgdGhpcy5fb3JpZ2luYWxMaW5lRW5kaW5ncy5wdXNoKHNvdXJjZS5sZW5ndGgp
OwotfQotCi1XZWJJbnNwZWN0b3IuU2NyaXB0Rm9ybWF0dGVyLmxvY2F0aW9uVG9Qb3NpdGlvbiA9
IGZ1bmN0aW9uKGxpbmVFbmRpbmdzLCBsb2NhdGlvbikKLXsKLSAgICB2YXIgcG9zaXRpb24gPSBs
b2NhdGlvbi5saW5lID8gbGluZUVuZGluZ3NbbG9jYXRpb24ubGluZSAtIDFdICsgMSA6IDA7Ci0g
ICAgcmV0dXJuIHBvc2l0aW9uICsgbG9jYXRpb24uY29sdW1uOwotfQotCi1XZWJJbnNwZWN0b3Iu
U2NyaXB0Rm9ybWF0dGVyLnBvc2l0aW9uVG9Mb2NhdGlvbiA9IGZ1bmN0aW9uKGxpbmVFbmRpbmdz
LCBwb3NpdGlvbikKLXsKLSAgICB2YXIgbG9jYXRpb24gPSB7fTsKLSAgICBsb2NhdGlvbi5saW5l
ID0gbGluZUVuZGluZ3MudXBwZXJCb3VuZChwb3NpdGlvbiAtIDEpOwotICAgIGlmICghbG9jYXRp
b24ubGluZSkKLSAgICAgICAgbG9jYXRpb24uY29sdW1uID0gcG9zaXRpb247Ci0gICAgZWxzZQot
ICAgICAgICBsb2NhdGlvbi5jb2x1bW4gPSBwb3NpdGlvbiAtIGxpbmVFbmRpbmdzW2xvY2F0aW9u
LmxpbmUgLSAxXSAtIDE7Ci0gICAgcmV0dXJuIGxvY2F0aW9uOwogfQogCiBXZWJJbnNwZWN0b3Iu
U2NyaXB0Rm9ybWF0dGVyLnByb3RvdHlwZSA9IHsKLSAgICBmb3JtYXQ6IGZ1bmN0aW9uKGNhbGxi
YWNrKQorICAgIGZvcm1hdENvbnRlbnQ6IGZ1bmN0aW9uKGNvbnRlbnQsIGNhbGxiYWNrKQogICAg
IHsKLSAgICAgICAgdmFyIHdvcmtlciA9IG5ldyBXb3JrZXIoInNjcmlwdEZvcm1hdHRlcldvcmtl
ci5qcyIpOwotICAgICAgICBmdW5jdGlvbiBtZXNzYWdlSGFuZGxlcihldmVudCkKKyAgICAgICAg
dmFyIGNodW5rcyA9IHRoaXMuX3NwbGl0Q29udGVudEludG9DaHVua3MoY29udGVudC50ZXh0LCBj
b250ZW50LnNjcmlwdFJhbmdlcyk7CisKKyAgICAgICAgZnVuY3Rpb24gZGlkRm9ybWF0Q2h1bmtz
KCkKICAgICAgICAgewotICAgICAgICAgICAgdmFyIGZvcm1hdHRlZFNvdXJjZSA9IGV2ZW50LmRh
dGE7Ci0gICAgICAgICAgICB0aGlzLl9mb3JtYXR0ZWQgPSB0cnVlOwotICAgICAgICAgICAgdGhp
cy5fZm9ybWF0dGVkU291cmNlID0gZm9ybWF0dGVkU291cmNlOwotICAgICAgICAgICAgdGhpcy5f
Zm9ybWF0dGVkTGluZUVuZGluZ3MgPSBmb3JtYXR0ZWRTb3VyY2UuZmluZEFsbCgiXG4iKTsKLSAg
ICAgICAgICAgIHRoaXMuX2Zvcm1hdHRlZExpbmVFbmRpbmdzLnB1c2goZm9ybWF0dGVkU291cmNl
Lmxlbmd0aCk7Ci0gICAgICAgICAgICB0aGlzLl9idWlsZE1hcHBpbmcoKTsKLSAgICAgICAgICAg
IGNhbGxiYWNrKGZvcm1hdHRlZFNvdXJjZSk7CisgICAgICAgICAgICB2YXIgcmVzdWx0ID0gdGhp
cy5fYnVpbGRDb250ZW50RnJvbUNodW5rcyhjaHVua3MpOworICAgICAgICAgICAgY2FsbGJhY2so
bmV3IFdlYkluc3BlY3Rvci5Gb3JtYXR0ZWRTb3VyY2VGcmFtZUNvbnRlbnQoY29udGVudCwgcmVz
dWx0LnRleHQsIHJlc3VsdC5tYXBwaW5nKSk7CiAgICAgICAgIH0KLSAgICAgICAgd29ya2VyLm9u
bWVzc2FnZSA9IG1lc3NhZ2VIYW5kbGVyLmJpbmQodGhpcyk7Ci0gICAgICAgIHdvcmtlci5wb3N0
TWVzc2FnZSh0aGlzLl9vcmlnaW5hbFNvdXJjZSk7CisgICAgICAgIHRoaXMuX2Zvcm1hdENodW5r
cyhjaHVua3MsIDAsIGRpZEZvcm1hdENodW5rcy5iaW5kKHRoaXMpKTsKICAgICB9LAogCi0gICAg
X2J1aWxkTWFwcGluZzogZnVuY3Rpb24oKQorICAgIF9zcGxpdENvbnRlbnRJbnRvQ2h1bmtzOiBm
dW5jdGlvbih0ZXh0LCBzY3JpcHRSYW5nZXMpCiAgICAgewotICAgICAgICB0aGlzLl9vcmlnaW5h
bFN5bWJvbFBvc2l0aW9ucyA9IFtdOwotICAgICAgICB0aGlzLl9mb3JtYXR0ZWRTeW1ib2xQb3Np
dGlvbnMgPSBbXTsKLSAgICAgICAgdmFyIGxhc3RDb2RlUG9zaXRpb24gPSAwOwotICAgICAgICB2
YXIgcmVnZXhwID0gL1tcJFwuXHddK3x7fH18Oy9nOwotICAgICAgICB3aGlsZSAodHJ1ZSkgewot
ICAgICAgICAgICAgdmFyIG1hdGNoID0gcmVnZXhwLmV4ZWModGhpcy5fZm9ybWF0dGVkU291cmNl
KTsKLSAgICAgICAgICAgIGlmICghbWF0Y2gpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICB2YXIgcG9zaXRpb24gPSB0aGlzLl9vcmlnaW5hbFNvdXJjZS5pbmRleE9mKG1hdGNo
WzBdLCBsYXN0Q29kZVBvc2l0aW9uKTsKLSAgICAgICAgICAgIGlmIChwb3NpdGlvbiA9PT0gLTEp
Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB0aGlzLl9vcmlnaW5hbFN5
bWJvbFBvc2l0aW9ucy5wdXNoKHBvc2l0aW9uKTsKLSAgICAgICAgICAgIHRoaXMuX2Zvcm1hdHRl
ZFN5bWJvbFBvc2l0aW9ucy5wdXNoKG1hdGNoLmluZGV4KTsKLSAgICAgICAgICAgIGxhc3RDb2Rl
UG9zaXRpb24gPSBwb3NpdGlvbiArIG1hdGNoWzBdLmxlbmd0aDsKKyAgICAgICAgdmFyIGNodW5r
cyA9IFtdOworICAgICAgICBmdW5jdGlvbiBhZGRDaHVuayhzdGFydCwgZW5kLCBpc1NjcmlwdCkK
KyAgICAgICAgeworICAgICAgICAgICAgdmFyIGNodW5rID0ge307CisgICAgICAgICAgICBjaHVu
ay5zdGFydCA9IHN0YXJ0OworICAgICAgICAgICAgY2h1bmsuZW5kID0gZW5kOworICAgICAgICAg
ICAgY2h1bmsuaXNTY3JpcHQgPSBpc1NjcmlwdDsKKyAgICAgICAgICAgIGNodW5rLnRleHQgPSB0
ZXh0LnN1YnN0cmluZyhzdGFydCwgZW5kKTsKKyAgICAgICAgICAgIGNodW5rcy5wdXNoKGNodW5r
KTsKICAgICAgICAgfQotICAgICAgICB0aGlzLl9vcmlnaW5hbFN5bWJvbFBvc2l0aW9ucy5wdXNo
KHRoaXMuX29yaWdpbmFsU291cmNlLmxlbmd0aCk7Ci0gICAgICAgIHRoaXMuX2Zvcm1hdHRlZFN5
bWJvbFBvc2l0aW9ucy5wdXNoKHRoaXMuX2Zvcm1hdHRlZFNvdXJjZS5sZW5ndGgpOwotICAgIH0s
Ci0KLSAgICBvcmlnaW5hbExpbmVOdW1iZXJUb0Zvcm1hdHRlZExpbmVOdW1iZXI6IGZ1bmN0aW9u
KG9yaWdpbmFsTGluZU51bWJlcikKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5fZm9ybWF0dGVk
KQotICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsTGluZU51bWJlcjsKLSAgICAgICAgdmFyIG9y
aWdpbmFsUG9zaXRpb24gPSBXZWJJbnNwZWN0b3IuU2NyaXB0Rm9ybWF0dGVyLmxvY2F0aW9uVG9Q
b3NpdGlvbih0aGlzLl9vcmlnaW5hbExpbmVFbmRpbmdzLCB7IGxpbmU6IG9yaWdpbmFsTGluZU51
bWJlciwgY29sdW1uOiAwIH0pOwotICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFBvc2l0aW9u
VG9Gb3JtYXR0ZWRMaW5lTnVtYmVyKG9yaWdpbmFsUG9zaXRpb24pOworICAgICAgICB2YXIgY3Vy
cmVudFBvc2l0aW9uID0gMDsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzY3JpcHRSYW5n
ZXMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIHZhciBzY3JpcHRSYW5nZSA9IHNjcmlwdFJh
bmdlc1tpXTsKKyAgICAgICAgICAgIGlmIChjdXJyZW50UG9zaXRpb24gPCBzY3JpcHRSYW5nZS5z
dGFydCkKKyAgICAgICAgICAgICAgICBhZGRDaHVuayhjdXJyZW50UG9zaXRpb24sIHNjcmlwdFJh
bmdlLnN0YXJ0LCBmYWxzZSk7CisgICAgICAgICAgICBhZGRDaHVuayhzY3JpcHRSYW5nZS5zdGFy
dCwgc2NyaXB0UmFuZ2UuZW5kLCB0cnVlKTsKKyAgICAgICAgICAgIGN1cnJlbnRQb3NpdGlvbiA9
IHNjcmlwdFJhbmdlLmVuZDsKKyAgICAgICAgfQorICAgICAgICBpZiAoY3VycmVudFBvc2l0aW9u
IDwgdGV4dC5sZW5ndGgpCisgICAgICAgICAgICBhZGRDaHVuayhjdXJyZW50UG9zaXRpb24sIHRl
eHQubGVuZ3RoLCBmYWxzZSk7CisgICAgICAgIHJldHVybiBjaHVua3M7CiAgICAgfSwKIAotICAg
IGZvcm1hdHRlZExpbmVOdW1iZXJUb09yaWdpbmFsTGluZU51bWJlcjogZnVuY3Rpb24oZm9ybWF0
dGVkTGluZU51bWJlcikKKyAgICBfZm9ybWF0Q2h1bmtzOiBmdW5jdGlvbihjaHVua3MsIGluZGV4
LCBjYWxsYmFjaykKICAgICB7Ci0gICAgICAgIGlmICghdGhpcy5fZm9ybWF0dGVkKQotICAgICAg
ICAgICAgcmV0dXJuIGZvcm1hdHRlZExpbmVOdW1iZXI7Ci0gICAgICAgIHZhciBvcmlnaW5hbFBv
c2l0aW9uID0gdGhpcy5mb3JtYXR0ZWRMaW5lTnVtYmVyVG9PcmlnaW5hbFBvc2l0aW9uKGZvcm1h
dHRlZExpbmVOdW1iZXIpOwotICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLlNjcmlwdEZvcm1h
dHRlci5wb3NpdGlvblRvTG9jYXRpb24odGhpcy5fb3JpZ2luYWxMaW5lRW5kaW5ncywgb3JpZ2lu
YWxQb3NpdGlvbikubGluZTsKLSAgICB9LAorICAgICAgICB3aGlsZSh0cnVlKSB7CisgICAgICAg
ICAgICBpZiAoaW5kZXggPT09IGNodW5rcy5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICBjYWxs
YmFjaygpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHZhciBjaHVuayA9IGNodW5rc1tpbmRleCsrXTsKKyAgICAgICAgICAgIGlmIChjaHVuay5p
c1NjcmlwdCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogCi0gICAgb3JpZ2lu
YWxQb3NpdGlvblRvRm9ybWF0dGVkTGluZU51bWJlcjogZnVuY3Rpb24ob3JpZ2luYWxQb3NpdGlv
bikKLSAgICB7Ci0gICAgICAgIHZhciBsaW5lRW5kaW5ncyA9IHRoaXMuX2Zvcm1hdHRlZCA/IHRo
aXMuX2Zvcm1hdHRlZExpbmVFbmRpbmdzIDogdGhpcy5fb3JpZ2luYWxMaW5lRW5kaW5nczsKLSAg
ICAgICAgaWYgKHRoaXMuX2Zvcm1hdHRlZCkKLSAgICAgICAgICAgIGZvcm1hdHRlZFBvc2l0aW9u
ID0gdGhpcy5fY29udmVydFBvc2l0aW9uKHRoaXMuX29yaWdpbmFsU3ltYm9sUG9zaXRpb25zLCB0
aGlzLl9mb3JtYXR0ZWRTeW1ib2xQb3NpdGlvbnMsIG9yaWdpbmFsUG9zaXRpb24pOwotICAgICAg
ICByZXR1cm4gV2ViSW5zcGVjdG9yLlNjcmlwdEZvcm1hdHRlci5wb3NpdGlvblRvTG9jYXRpb24o
bGluZUVuZGluZ3MsIGZvcm1hdHRlZFBvc2l0aW9uKS5saW5lOworICAgICAgICBmdW5jdGlvbiBk
aWRGb3JtYXQoZm9ybWF0dGVkU291cmNlLCBtYXBwaW5nKQorICAgICAgICB7CisgICAgICAgICAg
ICBjaHVuay50ZXh0ID0gZm9ybWF0dGVkU291cmNlOworICAgICAgICAgICAgY2h1bmsubWFwcGlu
ZyA9IG1hcHBpbmc7CisgICAgICAgICAgICB0aGlzLl9mb3JtYXRDaHVua3MoY2h1bmtzLCBpbmRl
eCwgY2FsbGJhY2spOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2Zvcm1hdFNjcmlwdChjaHVu
ay50ZXh0LCBkaWRGb3JtYXQuYmluZCh0aGlzKSk7CiAgICAgfSwKIAotICAgIGZvcm1hdHRlZExp
bmVOdW1iZXJUb09yaWdpbmFsUG9zaXRpb246IGZ1bmN0aW9uKGZvcm1hdHRlZExpbmVOdW1iZXIp
CisgICAgX2J1aWxkQ29udGVudEZyb21DaHVua3M6IGZ1bmN0aW9uKGNodW5rcykKICAgICB7Ci0g
ICAgICAgIHZhciBsaW5lRW5kaW5ncyA9IHRoaXMuX2Zvcm1hdHRlZCA/IHRoaXMuX2Zvcm1hdHRl
ZExpbmVFbmRpbmdzIDogdGhpcy5fb3JpZ2luYWxMaW5lRW5kaW5nczsKLSAgICAgICAgdmFyIGZv
cm1hdHRlZFBvc2l0aW9uID0gV2ViSW5zcGVjdG9yLlNjcmlwdEZvcm1hdHRlci5sb2NhdGlvblRv
UG9zaXRpb24obGluZUVuZGluZ3MsIHsgbGluZTogZm9ybWF0dGVkTGluZU51bWJlciwgY29sdW1u
OiAwIH0pOwotICAgICAgICBpZiAoIXRoaXMuX2Zvcm1hdHRlZCkKLSAgICAgICAgICAgIHJldHVy
biBmb3JtYXR0ZWRQb3NpdGlvbjsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnZlcnRQb3NpdGlv
bih0aGlzLl9mb3JtYXR0ZWRTeW1ib2xQb3NpdGlvbnMsIHRoaXMuX29yaWdpbmFsU3ltYm9sUG9z
aXRpb25zLCBmb3JtYXR0ZWRQb3NpdGlvbik7CisgICAgICAgIHZhciB0ZXh0ID0gIiI7CisgICAg
ICAgIHZhciBtYXBwaW5nID0geyBvcmlnaW5hbDogW10sIGZvcm1hdHRlZDogW10gfTsKKyAgICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaHVua3MubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAg
IHZhciBjaHVuayA9IGNodW5rc1tpXTsKKyAgICAgICAgICAgIG1hcHBpbmcub3JpZ2luYWwucHVz
aChjaHVuay5zdGFydCk7CisgICAgICAgICAgICBtYXBwaW5nLmZvcm1hdHRlZC5wdXNoKHRleHQu
bGVuZ3RoKTsKKyAgICAgICAgICAgIGlmIChjaHVuay5pc1NjcmlwdCkgeworICAgICAgICAgICAg
ICAgIGlmICh0ZXh0KQorICAgICAgICAgICAgICAgICAgICB0ZXh0ICs9ICJcbiI7CisgICAgICAg
ICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBjaHVuay5tYXBwaW5nLm9yaWdpbmFsLmxlbmd0
aDsgKytqKSB7CisgICAgICAgICAgICAgICAgICAgIG1hcHBpbmcub3JpZ2luYWwucHVzaChjaHVu
ay5tYXBwaW5nLm9yaWdpbmFsW2pdICsgY2h1bmsuc3RhcnQpOworICAgICAgICAgICAgICAgICAg
ICBtYXBwaW5nLmZvcm1hdHRlZC5wdXNoKGNodW5rLm1hcHBpbmcuZm9ybWF0dGVkW2pdICsgdGV4
dC5sZW5ndGgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0ZXh0ICs9IGNo
dW5rLnRleHQ7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmICh0ZXh0
KQorICAgICAgICAgICAgICAgICAgICB0ZXh0ICs9ICJcbiI7CisgICAgICAgICAgICAgICAgdGV4
dCArPSBjaHVuay50ZXh0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgbWFwcGluZy5vcmln
aW5hbC5wdXNoKGNodW5rLmVuZCk7CisgICAgICAgICAgICBtYXBwaW5nLmZvcm1hdHRlZC5wdXNo
KHRleHQubGVuZ3RoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4geyB0ZXh0OiB0ZXh0LCBt
YXBwaW5nOiBtYXBwaW5nIH07CiAgICAgfSwKIAotICAgIF9jb252ZXJ0UG9zaXRpb246IGZ1bmN0
aW9uKHN5bWJvbFBvc2l0aW9uczEsIHN5bWJvbFBvc2l0aW9uczIsIHBvc2l0aW9uKQorICAgIF9m
b3JtYXRTY3JpcHQ6IGZ1bmN0aW9uKHNvdXJjZSwgY2FsbGJhY2spCiAgICAgewotICAgICAgICB2
YXIgaW5kZXggPSBzeW1ib2xQb3NpdGlvbnMxLnVwcGVyQm91bmQocG9zaXRpb24pOwotICAgICAg
ICBpZiAoaW5kZXggPT09IHN5bWJvbFBvc2l0aW9uczIubGVuZ3RoIC0gMSkKLSAgICAgICAgICAg
IHJldHVybiBzeW1ib2xQb3NpdGlvbnMyW2luZGV4XSAtIDE7Ci0gICAgICAgIHJldHVybiBzeW1i
b2xQb3NpdGlvbnMyW2luZGV4XTsKKyAgICAgICAgdmFyIHdvcmtlciA9IG5ldyBXb3JrZXIoIlNj
cmlwdEZvcm1hdHRlcldvcmtlci5qcyIpOworICAgICAgICBmdW5jdGlvbiBtZXNzYWdlSGFuZGxl
cihldmVudCkKKyAgICAgICAgeworICAgICAgICAgICAgY2FsbGJhY2soZXZlbnQuZGF0YS5mb3Jt
YXR0ZWRTb3VyY2UsIGV2ZW50LmRhdGEubWFwcGluZyk7CisgICAgICAgIH0KKyAgICAgICAgd29y
a2VyLm9ubWVzc2FnZSA9IG1lc3NhZ2VIYW5kbGVyLmJpbmQodGhpcyk7CisgICAgICAgIHdvcmtl
ci5wb3N0TWVzc2FnZShzb3VyY2UpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0Rm9ybWF0dGVyV29ya2VyLmpzIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRGb3JtYXR0ZXJXb3JrZXIuanMKaW5k
ZXggZTkwMDMxNy4uMWE0YzI4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9TY3JpcHRGb3JtYXR0ZXJXb3JrZXIuanMKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRGb3JtYXR0ZXJXb3JrZXIuanMKQEAgLTMyLDcgKzMy
LDEwIEBAIHZhciBwYXJzZSA9IGxvYWRNb2R1bGUoInBhcnNlLWpzLmpzIik7CiB2YXIgcHJvY2Vz
cyA9IGxvYWRNb2R1bGUoInByb2Nlc3MuanMiKTsKIAogb25tZXNzYWdlID0gZnVuY3Rpb24oZXZl
bnQpIHsKLSAgICBwb3N0TWVzc2FnZShiZWF1dGlmeShldmVudC5kYXRhKSk7CisgICAgdmFyIHNv
dXJjZSA9IGV2ZW50LmRhdGE7CisgICAgdmFyIGZvcm1hdHRlZFNvdXJjZSA9IGJlYXV0aWZ5KHNv
dXJjZSk7CisgICAgdmFyIG1hcHBpbmcgPSBidWlsZE1hcHBpbmcoc291cmNlLCBmb3JtYXR0ZWRT
b3VyY2UpOworICAgIHBvc3RNZXNzYWdlKHsgZm9ybWF0dGVkU291cmNlOiBmb3JtYXR0ZWRTb3Vy
Y2UsIG1hcHBpbmc6IG1hcHBpbmcgfSk7CiB9OwogCiBmdW5jdGlvbiBiZWF1dGlmeShzb3VyY2Up
CkBAIC00Nyw2ICs1MCwyNSBAQCBmdW5jdGlvbiBiZWF1dGlmeShzb3VyY2UpCiAgICAgcmV0dXJu
IHByb2Nlc3MuZ2VuX2NvZGUoYXN0LCBiZWF1dGlmeU9wdGlvbnMpOwogfQogCitmdW5jdGlvbiBi
dWlsZE1hcHBpbmcoc291cmNlLCBmb3JtYXR0ZWRTb3VyY2UpCit7CisgICAgdmFyIG1hcHBpbmcg
PSB7IG9yaWdpbmFsOiBbXSwgZm9ybWF0dGVkOiBbXSB9OworICAgIHZhciBsYXN0Q29kZVBvc2l0
aW9uID0gMDsKKyAgICB2YXIgcmVnZXhwID0gL1tcJFwuXHddK3x7fH0vZzsKKyAgICB3aGlsZSAo
dHJ1ZSkgeworICAgICAgICB2YXIgbWF0Y2ggPSByZWdleHAuZXhlYyhmb3JtYXR0ZWRTb3VyY2Up
OworICAgICAgICBpZiAoIW1hdGNoKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHZhciBw
b3NpdGlvbiA9IHNvdXJjZS5pbmRleE9mKG1hdGNoWzBdLCBsYXN0Q29kZVBvc2l0aW9uKTsKKyAg
ICAgICAgaWYgKHBvc2l0aW9uID09PSAtMSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICBtYXBwaW5nLm9yaWdpbmFsLnB1c2gocG9zaXRpb24pOworICAgICAgICBtYXBwaW5nLmZvcm1h
dHRlZC5wdXNoKG1hdGNoLmluZGV4KTsKKyAgICAgICAgbGFzdENvZGVQb3NpdGlvbiA9IHBvc2l0
aW9uICsgbWF0Y2hbMF0ubGVuZ3RoOworICAgIH0KKyAgICByZXR1cm4gbWFwcGluZzsKK30KKwog
ZnVuY3Rpb24gbG9hZE1vZHVsZShzcmMpCiB7CiAgICAgdmFyIHJlcXVlc3QgPSBuZXcgWE1MSHR0
cFJlcXVlc3QoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvU291cmNlRnJhbWUuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Nv
dXJjZUZyYW1lLmpzCmluZGV4IGQ5YzVhYzYuLjBkN2QzYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNlRnJhbWUuanMKKysrIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VGcmFtZS5qcwpAQCAtMTcwLDExICsxNzAs
MTAgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAg
IGRlbGV0ZSB0aGlzLl9saW5lVG9IaWdobGlnaHQ7CiAgICAgfSwKIAotICAgIF9jcmVhdGVUZXh0
Vmlld2VyOiBmdW5jdGlvbihtaW1lVHlwZSwgY29udGVudCkKKyAgICBfY3JlYXRlVGV4dFZpZXdl
cjogZnVuY3Rpb24obWltZVR5cGUsIHRleHQpCiAgICAgewotICAgICAgICB0aGlzLl9jb250ZW50
ID0gY29udGVudDsKLSAgICAgICAgdGhpcy5fdGV4dE1vZGVsLnNldFRleHQobnVsbCwgY29udGVu
dCk7Ci0gICAgICAgIHRoaXMuX2Zvcm1hdHRlciA9IG5ldyBXZWJJbnNwZWN0b3IuU2NyaXB0Rm9y
bWF0dGVyKGNvbnRlbnQpOworICAgICAgICB0aGlzLl9jb250ZW50ID0gbmV3IFdlYkluc3BlY3Rv
ci5Tb3VyY2VGcmFtZUNvbnRlbnQodGV4dCwgdGhpcy5fY29udGVudFByb3ZpZGVyLnNjcmlwdHMo
KSk7CisgICAgICAgIHRoaXMuX3RleHRNb2RlbC5zZXRUZXh0KG51bGwsIHRleHQpOwogCiAgICAg
ICAgIHRoaXMuX3RleHRWaWV3ZXIgPSBuZXcgV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIodGhpcy5f
dGV4dE1vZGVsLCBXZWJJbnNwZWN0b3IucGxhdGZvcm0sIHRoaXMuX3VybCk7CiAgICAgICAgIHZh
ciBlbGVtZW50ID0gdGhpcy5fdGV4dFZpZXdlci5lbGVtZW50OwpAQCAtMzY2LDcgKzM2NSw3IEBA
IFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuX2V4
ZWN1dGlvbkxpbmUgPSBsaW5lTnVtYmVyOwogICAgICAgICBpZiAoIXRoaXMuX3RleHRWaWV3ZXIp
CiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHZhciB0ZXh0Vmlld2VyTGluZU51bWJlciA9
IHRoaXMuX2Zvcm1hdHRlci5vcmlnaW5hbExpbmVOdW1iZXJUb0Zvcm1hdHRlZExpbmVOdW1iZXIo
dGhpcy5fZXhlY3V0aW9uTGluZSAtIDEpOworICAgICAgICB2YXIgdGV4dFZpZXdlckxpbmVOdW1i
ZXIgPSB0aGlzLl9vcmlnaW5hbExvY2F0aW9uVG9UZXh0Vmlld2VyTGluZU51bWJlcih0aGlzLl9l
eGVjdXRpb25MaW5lIC0gMSwgMCk7CiAgICAgICAgIHRoaXMuX3RleHRWaWV3ZXIuYWRkRGVjb3Jh
dGlvbih0ZXh0Vmlld2VyTGluZU51bWJlciwgIndlYmtpdC1leGVjdXRpb24tbGluZSIpOwogICAg
IH0sCiAKQEAgLTM3NCw3ICszNzMsNyBAQCBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90
eXBlID0gewogICAgIHsKICAgICAgICAgaWYgKCF0aGlzLl90ZXh0Vmlld2VyKQogICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB2YXIgdGV4dFZpZXdlckxpbmVOdW1iZXIgPSB0aGlzLl9mb3Jt
YXR0ZXIub3JpZ2luYWxMaW5lTnVtYmVyVG9Gb3JtYXR0ZWRMaW5lTnVtYmVyKHRoaXMuX2V4ZWN1
dGlvbkxpbmUgLSAxKTsKKyAgICAgICAgdmFyIHRleHRWaWV3ZXJMaW5lTnVtYmVyID0gdGhpcy5f
b3JpZ2luYWxMb2NhdGlvblRvVGV4dFZpZXdlckxpbmVOdW1iZXIodGhpcy5fZXhlY3V0aW9uTGlu
ZSAtIDEsIDApOwogICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLnJlbW92ZURlY29yYXRpb24odGV4
dFZpZXdlckxpbmVOdW1iZXIsICJ3ZWJraXQtZXhlY3V0aW9uLWxpbmUiKTsKICAgICAgICAgZGVs
ZXRlIHRoaXMuX2V4ZWN1dGlvbkxpbmU7CiAgICAgfSwKQEAgLTQ3NSwxMSArNDc0LDkgQEAgV2Vi
SW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHJldHVybjsK
IAogICAgICAgICB2YXIgcmVzb2x2ZWQgPSBicmVha3BvaW50LmxvY2F0aW9ucy5sZW5ndGg7Ci0g
ICAgICAgIHZhciBicmVha3BvaW50TGluZU51bWJlciA9IGJyZWFrcG9pbnQubGluZU51bWJlcjsK
LSAgICAgICAgaWYgKHJlc29sdmVkKQotICAgICAgICAgICAgYnJlYWtwb2ludExpbmVOdW1iZXIg
PSBicmVha3BvaW50LmxvY2F0aW9uc1swXS5saW5lTnVtYmVyOworICAgICAgICB2YXIgbG9jYXRp
b24gPSByZXNvbHZlZCA/IGJyZWFrcG9pbnQubG9jYXRpb25zWzBdIDogYnJlYWtwb2ludDsKIAot
ICAgICAgICB2YXIgdGV4dFZpZXdlckxpbmVOdW1iZXIgPSB0aGlzLl9mb3JtYXR0ZXIub3JpZ2lu
YWxMaW5lTnVtYmVyVG9Gb3JtYXR0ZWRMaW5lTnVtYmVyKGJyZWFrcG9pbnRMaW5lTnVtYmVyKTsK
KyAgICAgICAgdmFyIHRleHRWaWV3ZXJMaW5lTnVtYmVyID0gdGhpcy5fb3JpZ2luYWxMb2NhdGlv
blRvVGV4dFZpZXdlckxpbmVOdW1iZXIobG9jYXRpb24ubGluZU51bWJlciwgbG9jYXRpb24uY29s
dW1uTnVtYmVyKTsKICAgICAgICAgaWYgKHRleHRWaWV3ZXJMaW5lTnVtYmVyID49IHRoaXMuX3Rl
eHRNb2RlbC5saW5lc0NvdW50KQogICAgICAgICAgICAgcmV0dXJuOwogCkBAIC01NDMsMTYgKzU0
MCwxNSBAQCBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlID0gewogICAgICAgICBp
ZiAoIXRhcmdldCkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgdmFyIHRleHRWaWV3ZXJM
aW5lTnVtYmVyID0gdGFyZ2V0LmxpbmVOdW1iZXI7Ci0gICAgICAgIHZhciBvcmlnaW5hbExpbmVO
dW1iZXIgPSB0aGlzLl9mb3JtYXR0ZXIuZm9ybWF0dGVkTGluZU51bWJlclRvT3JpZ2luYWxMaW5l
TnVtYmVyKHRleHRWaWV3ZXJMaW5lTnVtYmVyKTsKIAogICAgICAgICB2YXIgY29udGV4dE1lbnUg
PSBuZXcgV2ViSW5zcGVjdG9yLkNvbnRleHRNZW51KCk7CiAKLSAgICAgICAgY29udGV4dE1lbnUu
YXBwZW5kSXRlbShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkNvbnRpbnVlIHRvIEhlcmUiKSwgdGhp
cy5fY29udGludWVUb0xpbmUuYmluZCh0aGlzLCBvcmlnaW5hbExpbmVOdW1iZXIpKTsKKyAgICAg
ICAgY29udGV4dE1lbnUuYXBwZW5kSXRlbShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkNvbnRpbnVl
IHRvIEhlcmUiKSwgdGhpcy5fY29udGludWVUb0xpbmUuYmluZCh0aGlzLCB0ZXh0Vmlld2VyTGlu
ZU51bWJlcikpOwogCiAgICAgICAgIHZhciBicmVha3BvaW50ID0gdGhpcy5fZmluZEJyZWFrcG9p
bnQodGV4dFZpZXdlckxpbmVOdW1iZXIpOwogICAgICAgICBpZiAoIWJyZWFrcG9pbnQpIHsKICAg
ICAgICAgICAgIC8vIFRoaXMgcm93IGRvZXNuJ3QgaGF2ZSBhIGJyZWFrcG9pbnQ6IFdlIHdhbnQg
dG8gc2hvdyBBZGQgQnJlYWtwb2ludCBhbmQgQWRkIGFuZCBFZGl0IEJyZWFrcG9pbnQuCi0gICAg
ICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRJdGVtKFdlYkluc3BlY3Rvci5VSVN0cmluZygiQWRk
IEJyZWFrcG9pbnQiKSwgdGhpcy5fc2V0QnJlYWtwb2ludC5iaW5kKHRoaXMsIG9yaWdpbmFsTGlu
ZU51bWJlciwgIiIsIHRydWUpKTsKKyAgICAgICAgICAgIGNvbnRleHRNZW51LmFwcGVuZEl0ZW0o
V2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJBZGQgQnJlYWtwb2ludCIpLCB0aGlzLl9zZXRCcmVha3Bv
aW50LmJpbmQodGhpcywgdGV4dFZpZXdlckxpbmVOdW1iZXIsICIiLCB0cnVlKSk7CiAKICAgICAg
ICAgICAgIGZ1bmN0aW9uIGFkZENvbmRpdGlvbmFsQnJlYWtwb2ludCgpCiAgICAgICAgICAgICB7
CkBAIC01NjEsNyArNTU3LDcgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZSA9
IHsKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlbW92ZUJy
ZWFrcG9pbnREZWNvcmF0aW9uKHRleHRWaWV3ZXJMaW5lTnVtYmVyKTsKICAgICAgICAgICAgICAg
ICAgICAgaWYgKGNvbW1pdHRlZCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NldEJy
ZWFrcG9pbnQob3JpZ2luYWxMaW5lTnVtYmVyLCB0cnVlLCBjb25kaXRpb24pOworICAgICAgICAg
ICAgICAgICAgICAgICAgdGhpcy5fc2V0QnJlYWtwb2ludCh0ZXh0Vmlld2VyTGluZU51bWJlciwg
Y29uZGl0aW9uLCB0cnVlKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgdGhp
cy5fZWRpdEJyZWFrcG9pbnRDb25kaXRpb24odGV4dFZpZXdlckxpbmVOdW1iZXIsICIiLCBkaWRF
ZGl0QnJlYWtwb2ludENvbmRpdGlvbi5iaW5kKHRoaXMpKTsKICAgICAgICAgICAgIH0KQEAgLTYx
MCw3ICs2MDYsNiBAQCBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlID0gewogICAg
ICAgICBpZiAoIXRhcmdldCkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgdmFyIHRleHRW
aWV3ZXJMaW5lTnVtYmVyID0gdGFyZ2V0LmxpbmVOdW1iZXI7Ci0gICAgICAgIHZhciBvcmlnaW5h
bExpbmVOdW1iZXIgPSB0aGlzLl9mb3JtYXR0ZXIuZm9ybWF0dGVkTGluZU51bWJlclRvT3JpZ2lu
YWxMaW5lTnVtYmVyKHRleHRWaWV3ZXJMaW5lTnVtYmVyKTsKIAogICAgICAgICB2YXIgYnJlYWtw
b2ludCA9IHRoaXMuX2ZpbmRCcmVha3BvaW50KHRleHRWaWV3ZXJMaW5lTnVtYmVyKTsKICAgICAg
ICAgaWYgKGJyZWFrcG9pbnQpIHsKQEAgLTYxOSw3ICs2MTQsNyBAQCBXZWJJbnNwZWN0b3IuU291
cmNlRnJhbWUucHJvdG90eXBlID0gewogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAg
IFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1vZGVsLnJlbW92ZUJyZWFrcG9pbnQoYnJlYWtwb2ludC5p
ZCk7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgdGhpcy5fc2V0QnJlYWtwb2ludChvcmln
aW5hbExpbmVOdW1iZXIsIHRydWUsICIiKTsKKyAgICAgICAgICAgIHRoaXMuX3NldEJyZWFrcG9p
bnQodGV4dFZpZXdlckxpbmVOdW1iZXIsICIiLCB0cnVlKTsKICAgICAgICAgZXZlbnQucHJldmVu
dERlZmF1bHQoKTsKICAgICB9LAogCkBAIC04NTAsMjMgKzg0NSwyNCBAQCBXZWJJbnNwZWN0b3Iu
U291cmNlRnJhbWUucHJvdG90eXBlID0gewogCiAgICAgZm9ybWF0U291cmNlOiBmdW5jdGlvbigp
CiAgICAgewotICAgICAgICBpZiAoIXRoaXMuX2Zvcm1hdHRlcikKKyAgICAgICAgaWYgKCF0aGlz
Ll9jb250ZW50KQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGZ1bmN0aW9uIGRpZEZv
cm1hdChzb3VyY2UpCisgICAgICAgIGZ1bmN0aW9uIGRpZEZvcm1hdChmb3JtYXR0ZWRDb250ZW50
KQogICAgICAgICB7Ci0gICAgICAgICAgICB0aGlzLl90ZXh0TW9kZWwuc2V0VGV4dChudWxsLCBz
b3VyY2UpOworICAgICAgICAgICAgdGhpcy5fZm9ybWF0dGVkQ29udGVudCA9IGZvcm1hdHRlZENv
bnRlbnQ7CisgICAgICAgICAgICB0aGlzLl90ZXh0TW9kZWwuc2V0VGV4dChudWxsLCBmb3JtYXR0
ZWRDb250ZW50LnRleHQpOwogICAgICAgICAgICAgdGhpcy5fc2V0VGV4dFZpZXdlckRlY29yYXRp
b25zKCk7CiAgICAgICAgIH0KLSAgICAgICAgdGhpcy5fZm9ybWF0dGVyLmZvcm1hdChkaWRGb3Jt
YXQuYmluZCh0aGlzKSk7CisgICAgICAgIHZhciBmb3JtYXR0ZXIgPSBuZXcgV2ViSW5zcGVjdG9y
LlNjcmlwdEZvcm1hdHRlcigpOworICAgICAgICBmb3JtYXR0ZXIuZm9ybWF0Q29udGVudCh0aGlz
Ll9jb250ZW50LCBkaWRGb3JtYXQuYmluZCh0aGlzKSkKICAgICB9LAogCiAgICAgX2NvbnRpbnVl
VG9MaW5lOiBmdW5jdGlvbihsaW5lTnVtYmVyKQogICAgIHsKLSAgICAgICAgdmFyIHNvdXJjZUlE
ID0gdGhpcy5fc291cmNlSURGb3JMaW5lKGxpbmVOdW1iZXIpOwotICAgICAgICBpZiAoIXNvdXJj
ZUlEKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJN
b2RlbC5jb250aW51ZVRvTGluZShzb3VyY2VJRCwgbGluZU51bWJlcik7CisgICAgICAgIHZhciBs
b2NhdGlvbiA9IHRoaXMuX3RleHRWaWV3ZXJMaW5lTnVtYmVyVG9TY3JpcHRMb2NhdGlvbihsaW5l
TnVtYmVyKTsKKyAgICAgICAgaWYgKGxvY2F0aW9uLnNvdXJjZUlEKQorICAgICAgICAgICAgV2Vi
SW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwuY29udGludWVUb0xpbmUobG9jYXRpb24uc291cmNlSUQs
IGxvY2F0aW9uLmxpbmVOdW1iZXIpOwogICAgIH0sCiAKICAgICBfZG91YmxlQ2xpY2s6IGZ1bmN0
aW9uKGV2ZW50KQpAQCAtODc5LDM1ICs4NzUsMzUgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1l
LnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHJldHVybjsgIC8vIERvIG5vdCB0cmlnZ2VyIGVk
aXRpbmcgZnJvbSBsaW5lIG51bWJlcnMuCiAKICAgICAgICAgdmFyIGxpbmVOdW1iZXIgPSBsaW5l
Um93LmxpbmVOdW1iZXI7Ci0gICAgICAgIHZhciBzb3VyY2VJRCA9IHRoaXMuX3NvdXJjZUlERm9y
TGluZShsaW5lTnVtYmVyKTsKLSAgICAgICAgaWYgKCFzb3VyY2VJRCkKKyAgICAgICAgdmFyIGxv
Y2F0aW9uID0gdGhpcy5fdGV4dFZpZXdlckxpbmVOdW1iZXJUb1NjcmlwdExvY2F0aW9uKGxpbmVO
dW1iZXIpOworICAgICAgICBpZiAoIWxvY2F0aW9uLnNvdXJjZUlEKQogICAgICAgICAgICAgcmV0
dXJuOwogCiAgICAgICAgIGZ1bmN0aW9uIGRpZEVkaXRMaW5lKG5ld0NvbnRlbnQpCiAgICAgICAg
IHsKICAgICAgICAgICAgIHZhciBsaW5lcyA9IFtdOwotICAgICAgICAgICAgdmFyIG9sZExpbmVz
ID0gdGhpcy5fY29udGVudC5zcGxpdCgnXG4nKTsKKyAgICAgICAgICAgIHZhciBvbGRMaW5lcyA9
IHRoaXMuX2NvbnRlbnQudGV4dC5zcGxpdCgnXG4nKTsKICAgICAgICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgb2xkTGluZXMubGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgICAgICBpZiAoaSA9
PT0gbGluZU51bWJlcikKICAgICAgICAgICAgICAgICAgICAgbGluZXMucHVzaChuZXdDb250ZW50
KTsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGxpbmVzLnB1c2go
b2xkTGluZXNbaV0pOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmRl
YnVnZ2VyTW9kZWwuZWRpdFNjcmlwdFNvdXJjZShzb3VyY2VJRCwgbGluZXMuam9pbigiXG4iKSk7
CisgICAgICAgICAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNb2RlbC5lZGl0U2NyaXB0U291cmNl
KGxvY2F0aW9uLnNvdXJjZUlELCBsaW5lcy5qb2luKCJcbiIpKTsKICAgICAgICAgfQogICAgICAg
ICB0aGlzLl90ZXh0Vmlld2VyLmVkaXRMaW5lKGxpbmVSb3csIGRpZEVkaXRMaW5lLmJpbmQodGhp
cykpOwogICAgIH0sCiAKLSAgICBfc2V0QnJlYWtwb2ludDogZnVuY3Rpb24obGluZU51bWJlciwg
ZW5hYmxlZCwgY29uZGl0aW9uKQorICAgIF9zZXRCcmVha3BvaW50OiBmdW5jdGlvbihsaW5lTnVt
YmVyLCBjb25kaXRpb24sIGVuYWJsZWQpCiAgICAgeworICAgICAgICB2YXIgbG9jYXRpb24gPSB0
aGlzLl90ZXh0Vmlld2VyTGluZU51bWJlclRvU2NyaXB0TG9jYXRpb24obGluZU51bWJlcik7CiAg
ICAgICAgIGlmICh0aGlzLl91cmwpCi0gICAgICAgICAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJN
b2RlbC5zZXRCcmVha3BvaW50KHRoaXMuX3VybCwgbGluZU51bWJlciwgMCwgY29uZGl0aW9uLCBl
bmFibGVkKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICB2YXIgc291cmNlSUQgPSB0aGlz
Ll9zb3VyY2VJREZvckxpbmUobGluZU51bWJlcik7Ci0gICAgICAgICAgICBpZiAoIXNvdXJjZUlE
KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIFdlYkluc3BlY3Rvci5kZWJ1
Z2dlck1vZGVsLnNldEJyZWFrcG9pbnRCeVNvdXJjZUlkKHNvdXJjZUlELCBsaW5lTnVtYmVyLCAw
LCBjb25kaXRpb24sIGVuYWJsZWQpOwotICAgICAgICB9CisgICAgICAgICAgICBXZWJJbnNwZWN0
b3IuZGVidWdnZXJNb2RlbC5zZXRCcmVha3BvaW50KHRoaXMuX3VybCwgbG9jYXRpb24ubGluZU51
bWJlciwgbG9jYXRpb24uY29sdW1uTnVtYmVyLCBjb25kaXRpb24sIGVuYWJsZWQpOworICAgICAg
ICBlbHNlIGlmIChsb2NhdGlvbi5zb3VyY2VJRCkKKyAgICAgICAgICAgIFdlYkluc3BlY3Rvci5k
ZWJ1Z2dlck1vZGVsLnNldEJyZWFrcG9pbnRCeVNvdXJjZUlkKGxvY2F0aW9uLnNvdXJjZUlELCBs
b2NhdGlvbi5saW5lTnVtYmVyLCBsb2NhdGlvbi5jb2x1bW5OdW1iZXIsIGNvbmRpdGlvbiwgZW5h
YmxlZCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybjsKKwogICAgICAgICBpZiAo
IVdlYkluc3BlY3Rvci5wYW5lbHMuc2NyaXB0cy5icmVha3BvaW50c0FjdGl2YXRlZCkKICAgICAg
ICAgICAgIFdlYkluc3BlY3Rvci5wYW5lbHMuc2NyaXB0cy50b2dnbGVCcmVha3BvaW50c0NsaWNr
ZWQoKTsKICAgICB9LApAQCAtOTE4LDE5ICs5MTQsMTggQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUZy
YW1lLnByb3RvdHlwZSA9IHsKICAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1v
ZGVsLmJyZWFrcG9pbnRGb3JJZChicmVha3BvaW50SWQpOwogICAgIH0sCiAKLSAgICBfc291cmNl
SURGb3JMaW5lOiBmdW5jdGlvbihsaW5lTnVtYmVyKQorICAgIF9vcmlnaW5hbExvY2F0aW9uVG9U
ZXh0Vmlld2VyTGluZU51bWJlcjogZnVuY3Rpb24obGluZU51bWJlciwgY29sdW1uTnVtYmVyKQog
ICAgIHsKLSAgICAgICAgdmFyIHNvdXJjZUlERm9yTGluZSA9IG51bGw7Ci0gICAgICAgIHZhciBj
bG9zZXN0U3RhcnRpbmdMaW5lID0gMDsKLSAgICAgICAgdmFyIHNjcmlwdHMgPSB0aGlzLl9jb250
ZW50UHJvdmlkZXIuc2NyaXB0cygpOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNjcmlw
dHMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIHZhciBsaW5lT2Zmc2V0ID0gc2NyaXB0c1tp
XS5saW5lT2Zmc2V0OwotICAgICAgICAgICAgaWYgKGxpbmVPZmZzZXQgPD0gbGluZU51bWJlciAm
JiBsaW5lT2Zmc2V0ID49IGNsb3Nlc3RTdGFydGluZ0xpbmUpIHsKLSAgICAgICAgICAgICAgICBj
bG9zZXN0U3RhcnRpbmdMaW5lID0gbGluZU9mZnNldDsKLSAgICAgICAgICAgICAgICBzb3VyY2VJ
REZvckxpbmUgPSBzY3JpcHRzW2ldLnNvdXJjZUlEOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgICAgIHJldHVybiBzb3VyY2VJREZvckxpbmU7CisgICAgICAgIGlmICghdGhpcy5fZm9y
bWF0dGVkQ29udGVudCkKKyAgICAgICAgICAgIHJldHVybiBsaW5lTnVtYmVyOworICAgICAgICBy
ZXR1cm4gdGhpcy5fZm9ybWF0dGVkQ29udGVudC5vcmlnaW5hbExvY2F0aW9uVG9Gb3JtYXR0ZWRM
b2NhdGlvbihsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpLmxpbmVOdW1iZXI7CisgICAgfSwKKwor
ICAgIF90ZXh0Vmlld2VyTGluZU51bWJlclRvU2NyaXB0TG9jYXRpb246IGZ1bmN0aW9uKGxpbmVO
dW1iZXIpCisgICAgeworICAgICAgICBpZiAoIXRoaXMuX2Zvcm1hdHRlZENvbnRlbnQpCisgICAg
ICAgICAgICByZXR1cm4gdGhpcy5fY29udGVudC5zY3JpcHRMb2NhdGlvbkZvckxpbmVOdW1iZXIo
bGluZU51bWJlcik7CisgICAgICAgIHJldHVybiB0aGlzLl9mb3JtYXR0ZWRDb250ZW50LnNjcmlw
dExvY2F0aW9uRm9yRm9ybWF0dGVkTGluZU51bWJlcihsaW5lTnVtYmVyKTsKICAgICB9CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNlRnJh
bWVDb250ZW50LmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VG
cmFtZUNvbnRlbnQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRhNzRl
YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
U291cmNlRnJhbWVDb250ZW50LmpzCkBAIC0wLDAgKzEsMTUzIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworV2ViSW5zcGVjdG9yLlNvdXJj
ZUZyYW1lQ29udGVudCA9IGZ1bmN0aW9uKHRleHQsIHNjcmlwdHMpCit7CisgICAgaWYgKHNjcmlw
dHMubGVuZ3RoICYmIHNjcmlwdHNbMF0ubGVuZ3RoIDwgdGV4dC5sZW5ndGgpIHsKKyAgICAgICAg
Ly8gV2ViS2l0IGh0bWwgbGV4ZXIgbm9ybWFsaXplcyBsaW5lIGVuZGluZ3MgYW5kIHNjcmlwdHMg
YXJlIHBhc3NlZCB0byBWTSB3aXRoICJcbiIgbGluZSBlbmRpbmdzLgorICAgICAgICAvLyBIb3dl
dmVyLCByZXNvdXJjZSBjb250ZW50IGhhcyBvcmlnaW5hbCBsaW5lIGVuZGluZ3MsIHNvIHdlIGhh
dmUgdG8gbm9ybWFsaXplIGxpbmUgZW5kaW5ncyBoZXJlLgorICAgICAgICB0ZXh0ID0gdGV4dC5y
ZXBsYWNlKC9cclxuL2csICJcbiIpOworICAgIH0KKyAgICB0aGlzLl90ZXh0ID0gdGV4dDsKKyAg
ICB0aGlzLl9saW5lRW5kaW5ncyA9IHRleHQuZmluZEFsbCgiXG4iKTsKKyAgICB0aGlzLl9saW5l
RW5kaW5ncy5wdXNoKHRleHQubGVuZ3RoKTsKKworICAgIHRoaXMuX3NjcmlwdFJhbmdlcyA9IFtd
OworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2NyaXB0cy5sZW5ndGg7ICsraSkgeworICAgICAg
ICB2YXIgc2NyaXB0ID0gc2NyaXB0c1tpXTsKKyAgICAgICAgdmFyIG9mZnNldCA9IHRoaXMubG9j
YXRpb25Ub1Bvc2l0aW9uKHNjcmlwdC5saW5lT2Zmc2V0LCBzY3JpcHQuY29sdW1uT2Zmc2V0KTsK
KyAgICAgICAgdGhpcy5fc2NyaXB0UmFuZ2VzLnB1c2goeyBzdGFydDogb2Zmc2V0LCBlbmQ6IG9m
ZnNldCArIHNjcmlwdC5sZW5ndGgsIHNjcmlwdDogc2NyaXB0IH0pOworICAgIH0KKyAgICB0aGlz
Ll9zY3JpcHRSYW5nZXMuc29ydChmdW5jdGlvbih4LCB5KSB7IHJldHVybiB4LnN0YXJ0IC0geS5z
dGFydDsgfSk7Cit9CisKK1dlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZUNvbnRlbnQucHJvdG90eXBl
ID0geworICAgIGdldCB0ZXh0KCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl90ZXh0Owor
ICAgIH0sCisKKyAgICBnZXQgc2NyaXB0UmFuZ2VzKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0
aGlzLl9zY3JpcHRSYW5nZXM7CisgICAgfSwKKworICAgIGxvY2F0aW9uVG9Qb3NpdGlvbjogZnVu
Y3Rpb24obGluZU51bWJlciwgY29sdW1uTnVtYmVyKQorICAgIHsKKyAgICAgICAgdmFyIHBvc2l0
aW9uID0gbGluZU51bWJlciA/IHRoaXMuX2xpbmVFbmRpbmdzW2xpbmVOdW1iZXIgLSAxXSArIDEg
OiAwOworICAgICAgICByZXR1cm4gcG9zaXRpb24gKyBjb2x1bW5OdW1iZXI7CisgICAgfSwKKwor
ICAgIHBvc2l0aW9uVG9Mb2NhdGlvbjogZnVuY3Rpb24ocG9zaXRpb24pCisgICAgeworICAgICAg
ICB2YXIgbG9jYXRpb24gPSB7fTsKKyAgICAgICAgbG9jYXRpb24ubGluZU51bWJlciA9IHRoaXMu
X2xpbmVFbmRpbmdzLnVwcGVyQm91bmQocG9zaXRpb24gLSAxKTsKKyAgICAgICAgaWYgKCFsb2Nh
dGlvbi5saW5lTnVtYmVyKQorICAgICAgICAgICAgbG9jYXRpb24uY29sdW1uTnVtYmVyID0gcG9z
aXRpb247CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGxvY2F0aW9uLmNvbHVtbk51bWJlciA9
IHBvc2l0aW9uIC0gdGhpcy5fbGluZUVuZGluZ3NbbG9jYXRpb24ubGluZU51bWJlciAtIDFdIC0g
MTsKKyAgICAgICAgcmV0dXJuIGxvY2F0aW9uOworICAgIH0sCisKKyAgICBzY3JpcHRMb2NhdGlv
bkZvckxpbmVOdW1iZXI6IGZ1bmN0aW9uKGxpbmVOdW1iZXIpCisgICAgeworICAgICAgICB2YXIg
cmFuZ2UgPSB0aGlzLmxpbmVOdW1iZXJUb1JhbmdlKGxpbmVOdW1iZXIpOworICAgICAgICByZXR1
cm4gdGhpcy5zY3JpcHRMb2NhdGlvbkZvclJhbmdlKHJhbmdlLnN0YXJ0LCByYW5nZS5lbmQpOwor
ICAgIH0sCisKKyAgICBzY3JpcHRMb2NhdGlvbkZvclJhbmdlOiBmdW5jdGlvbihzdGFydCwgZW5k
KQorICAgIHsKKyAgICAgICAgdmFyIHBvc2l0aW9uID0gc3RhcnQ7CisgICAgICAgIHZhciBzY3Jp
cHRSYW5nZSA9IHRoaXMuX2ludGVyc2VjdGluZ1NjcmlwdFJhbmdlKHN0YXJ0LCBlbmQpOworICAg
ICAgICBpZiAoc2NyaXB0UmFuZ2UpCisgICAgICAgICAgICBwb3NpdGlvbiA9IE1hdGgubWF4KHBv
c2l0aW9uLCBzY3JpcHRSYW5nZS5zdGFydCk7CisgICAgICAgIHZhciBzY3JpcHRMb2NhdGlvbiA9
IHRoaXMucG9zaXRpb25Ub0xvY2F0aW9uKHBvc2l0aW9uKTsKKyAgICAgICAgaWYgKHNjcmlwdFJh
bmdlKQorICAgICAgICAgICAgc2NyaXB0TG9jYXRpb24uc291cmNlSUQgPSBzY3JpcHRSYW5nZS5z
Y3JpcHQuc291cmNlSUQ7CisgICAgICAgIHJldHVybiBzY3JpcHRMb2NhdGlvbjsKKyAgICB9LAor
CisgICAgbGluZU51bWJlclRvUmFuZ2U6IGZ1bmN0aW9uKGxpbmVOdW1iZXIpCisgICAgeworICAg
ICAgICB2YXIgcHJldmlvdXNMaW5lRW5kID0gdGhpcy5fbGluZUVuZGluZ3NbbGluZU51bWJlciAt
IDFdIHx8IDA7CisgICAgICAgIHZhciBsaW5lRW5kID0gdGhpcy5fbGluZUVuZGluZ3NbbGluZU51
bWJlcl07CisgICAgICAgIHJldHVybiB7IHN0YXJ0OiBwcmV2aW91c0xpbmVFbmQgKyAxLCBlbmQ6
IGxpbmVFbmQgfTsKKyAgICB9LAorCisgICAgX2ludGVyc2VjdGluZ1NjcmlwdFJhbmdlOiBmdW5j
dGlvbihzdGFydCwgZW5kKQorICAgIHsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlz
Ll9zY3JpcHRSYW5nZXMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIHZhciBzY3JpcHRSYW5n
ZSA9IHRoaXMuX3NjcmlwdFJhbmdlc1tpXTsKKyAgICAgICAgICAgIGlmIChzdGFydCA8IHNjcmlw
dFJhbmdlLmVuZCAmJiBlbmQgPiBzY3JpcHRSYW5nZS5zdGFydCkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gc2NyaXB0UmFuZ2U7CisgICAgICAgIH0KKyAgICB9Cit9CisKKworV2ViSW5zcGVjdG9y
LkZvcm1hdHRlZFNvdXJjZUZyYW1lQ29udGVudCA9IGZ1bmN0aW9uKG9yaWdpbmFsQ29udGVudCwg
dGV4dCwgbWFwcGluZykKK3sKKyAgICB0aGlzLl9vcmlnaW5hbENvbnRlbnQgPSBvcmlnaW5hbENv
bnRlbnQ7CisgICAgdGhpcy5fZm9ybWF0dGVkQ29udGVudCA9IG5ldyBXZWJJbnNwZWN0b3IuU291
cmNlRnJhbWVDb250ZW50KHRleHQsIFtdKTsKKyAgICB0aGlzLl9tYXBwaW5nID0gbWFwcGluZzsK
K30KKworV2ViSW5zcGVjdG9yLkZvcm1hdHRlZFNvdXJjZUZyYW1lQ29udGVudC5wcm90b3R5cGUg
PSB7CisgICAgZ2V0IHRleHQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2Zvcm1hdHRl
ZENvbnRlbnQudGV4dDsKKyAgICB9LAorCisgICAgb3JpZ2luYWxMb2NhdGlvblRvRm9ybWF0dGVk
TG9jYXRpb246IGZ1bmN0aW9uKGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcikKKyAgICB7CisgICAg
ICAgIHZhciBvcmlnaW5hbFBvc2l0aW9uID0gdGhpcy5fb3JpZ2luYWxDb250ZW50LmxvY2F0aW9u
VG9Qb3NpdGlvbihsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpOworICAgICAgICB2YXIgZm9ybWF0
dGVkUG9zaXRpb24gPSB0aGlzLl9jb252ZXJ0UG9zaXRpb24odGhpcy5fbWFwcGluZy5vcmlnaW5h
bCwgdGhpcy5fbWFwcGluZy5mb3JtYXR0ZWQsIG9yaWdpbmFsUG9zaXRpb24pOworICAgICAgICBy
ZXR1cm4gdGhpcy5fZm9ybWF0dGVkQ29udGVudC5wb3NpdGlvblRvTG9jYXRpb24oZm9ybWF0dGVk
UG9zaXRpb24pOworICAgIH0sCisKKyAgICBzY3JpcHRMb2NhdGlvbkZvckZvcm1hdHRlZExpbmVO
dW1iZXI6IGZ1bmN0aW9uKGxpbmVOdW1iZXIpCisgICAgeworICAgICAgICB2YXIgcmFuZ2UgPSB0
aGlzLl9mb3JtYXR0ZWRDb250ZW50LmxpbmVOdW1iZXJUb1JhbmdlKGxpbmVOdW1iZXIpOworICAg
ICAgICB2YXIgc3RhcnQgPSB0aGlzLl9jb252ZXJ0UG9zaXRpb24odGhpcy5fbWFwcGluZy5mb3Jt
YXR0ZWQsIHRoaXMuX21hcHBpbmcub3JpZ2luYWwsIHJhbmdlLnN0YXJ0KTsKKyAgICAgICAgdmFy
IGVuZCA9IHRoaXMuX2NvbnZlcnRQb3NpdGlvbih0aGlzLl9tYXBwaW5nLmZvcm1hdHRlZCwgdGhp
cy5fbWFwcGluZy5vcmlnaW5hbCwgcmFuZ2UuZW5kKTsKKyAgICAgICAgcmV0dXJuIHRoaXMuX29y
aWdpbmFsQ29udGVudC5zY3JpcHRMb2NhdGlvbkZvclJhbmdlKHN0YXJ0LCBlbmQpOworICAgIH0s
CisKKyAgICBfY29udmVydFBvc2l0aW9uOiBmdW5jdGlvbihwb3NpdGlvbnMxLCBwb3NpdGlvbnMy
LCBwb3NpdGlvbikKKyAgICB7CisgICAgICAgIHZhciBpbmRleCA9IHBvc2l0aW9uczEudXBwZXJC
b3VuZChwb3NpdGlvbik7CisgICAgICAgIHZhciByYW5nZTEgPSBwb3NpdGlvbnMxW2luZGV4XSAt
IHBvc2l0aW9uczFbaW5kZXggLSAxXTsKKyAgICAgICAgdmFyIHJhbmdlMiA9IHBvc2l0aW9uczJb
aW5kZXhdIC0gcG9zaXRpb25zMltpbmRleCAtIDFdOworICAgICAgICB2YXIgcG9zaXRpb24yID0g
cG9zaXRpb25zMltpbmRleCAtIDFdOworICAgICAgICBpZiAocmFuZ2UxKQorICAgICAgICAgICAg
cG9zaXRpb24yICs9IE1hdGgucm91bmQoKHBvc2l0aW9uIC0gcG9zaXRpb25zMVtpbmRleCAtIDFd
KSAqIHJhbmdlMiAvIHJhbmdlMSk7CisgICAgICAgIHJldHVybiBwb3NpdGlvbjI7CisgICAgfQor
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9XZWJLaXQu
cXJjIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9XZWJLaXQucXJjCmluZGV4
IDU0N2M5ZmYuLmE4MWJjYzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvV2ViS2l0LnFyYworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL1dlYktpdC5xcmMKQEAgLTkyLDYgKzkyLDcgQEAKICAgICA8ZmlsZT5TaWRlYmFyVHJlZUVs
ZW1lbnQuanM8L2ZpbGU+CiAgICAgPGZpbGU+U291cmNlQ1NTVG9rZW5pemVyLmpzPC9maWxlPgog
ICAgIDxmaWxlPlNvdXJjZUZyYW1lLmpzPC9maWxlPgorICAgIDxmaWxlPlNvdXJjZUZyYW1lQ29u
dGVudC5qczwvZmlsZT4KICAgICA8ZmlsZT5Tb3VyY2VIVE1MVG9rZW5pemVyLmpzPC9maWxlPgog
ICAgIDxmaWxlPlNvdXJjZUphdmFTY3JpcHRUb2tlbml6ZXIuanM8L2ZpbGU+CiAgICAgPGZpbGU+
U291cmNlVG9rZW5pemVyLmpzPC9maWxlPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuaHRtbCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWwKaW5kZXggNjdlZTQxMS4uZjMyNzBkZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuaHRtbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5odG1sCkBA
IC0xMDEsNiArMTAxLDcgQEAgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNj
cmlwdCIgc3JjPSJOZXR3b3JrUGFuZWwuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0i
dGV4dC9qYXZhc2NyaXB0IiBzcmM9IkluamVjdGVkRmFrZVdvcmtlci5qcyI+PC9zY3JpcHQ+CiAg
ICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iU291cmNlRnJhbWUuanMiPjwv
c2NyaXB0PgorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IlNvdXJjZUZy
YW1lQ29udGVudC5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3Jp
cHQiIHNyYz0iUmVzb3VyY2VWaWV3LmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRl
eHQvamF2YXNjcmlwdCIgc3JjPSJTY3JpcHRzUGFuZWwuanMiPjwvc2NyaXB0PgogICAgIDxzY3Jp
cHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IlJlc291cmNlc1BhbmVsLmpzIj48L3Njcmlw
dD4K
</data>
<flag name="review"
          id="72756"
          type_id="1"
          status="+"
          setter="yurys"
    />
          </attachment>
      

    </bug>

</bugzilla>