<?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>40069</bug_id>
          
          <creation_ts>2010-06-02 10:45:03 -0700</creation_ts>
          <short_desc>Web Inspector: Eliminate direct dependency of StylesSidebarPane on InspectorBackend</short_desc>
          <delta_ts>2010-06-04 08:14:13 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Alexander Pavlov (apavlov)">apavlov</reporter>
          <assigned_to name="Alexander Pavlov (apavlov)">apavlov</assigned_to>
          <cc>bweinstein</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>233327</commentid>
    <comment_count>0</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-06-02 10:45:03 -0700</bug_when>
    <thetext>As soon as a CSS differ is introduced, the styles handling will become much more complex, to accommodate CSS source patching in the Resources panel.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>233787</commentid>
    <comment_count>1</comment_count>
      <attachid>57778</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-06-03 09:29:48 -0700</bug_when>
    <thetext>Created attachment 57778
[PATCH] Suggested solution</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>234119</commentid>
    <comment_count>2</comment_count>
      <attachid>57778</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-06-04 02:10:37 -0700</bug_when>
    <thetext>Comment on attachment 57778
[PATCH] Suggested solution


WebCore/inspector/front-end/ElementsPanel.js:35
 +      this.model = new WebInspector.CSSStyleModel();
should be this.styleMode or cssStyleModel

WebCore/inspector/front-end/ElementsPanel.js:180
 +          this.model = new WebInspector.CSSStyleModel();
I&apos;d rather change the model into a singleton as it doesn&apos;t depend on the ElementsPanel.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>234153</commentid>
    <comment_count>3</comment_count>
      <attachid>57863</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-06-04 03:56:20 -0700</bug_when>
    <thetext>Created attachment 57863
[PATCH] Comments addressed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>234162</commentid>
    <comment_count>4</comment_count>
      <attachid>57863</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-06-04 04:54:38 -0700</bug_when>
    <thetext>Comment on attachment 57863
[PATCH] Comments addressed

WebCore/inspector/front-end/StylesSidebarPane.js:951
 +          WebInspector.styleModel.addRule(this.pane.node.id, newContent, callback, this.editingSelectorCancelled.bind(this));
callback -&gt; successCallback ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>234184</commentid>
    <comment_count>5</comment_count>
      <attachid>57863</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-06-04 06:12:20 -0700</bug_when>
    <thetext>Comment on attachment 57863
[PATCH] Comments addressed

Overall great first step. Few nits below:

WebCore/inspector/front-end/CSSStyleModel.js:36
 +      styles: function(nodeId, authOnly, userCallback)
getStylesAsync

WebCore/inspector/front-end/CSSStyleModel.js:48
 +      computedStyle: function(nodeId, userCallback)
getComputedStyleAsync

WebCore/inspector/front-end/CSSStyleModel.js:39
 +          function callback(styles)
why wrapping it?

WebCore/inspector/front-end/CSSStyleModel.js:50
 +          function callback(style)
ditto

WebCore/inspector/front-end/CSSStyleModel.js:95
 +      toggleStyleEnablement: function(styleId, propertyName, disabled, userCallback)
toggleStyleEnabled

WebCore/inspector/front-end/CSSStyleModel.js:117
 +          function callback(success)
no need to wrap

WebCore/inspector/front-end/CSSStyleModel.js:115
 +      setStyleText: function(styleId, cssText, userCallback)
setCSSText

WebCore/inspector/front-end/CSSStyleModel.js:140
 +          InspectorBackend.applyStyleText(WebInspector.Callback.wrap(callback), styleId, styleText, propertyName);
callback.bind(this)

WebCore/inspector/front-end/CSSStyleModel.js:127
 +          var self = this;
no &apos;this&apos; here

WebCore/inspector/front-end/StylesSidebarPane.js:1567
 +          WebInspector.styleModel.applyStyleText(this.style.id, styleText, this.name, successCallback, failureCallback);
cssModel</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>234198</commentid>
    <comment_count>6</comment_count>
      <attachid>57870</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-06-04 07:02:14 -0700</bug_when>
    <thetext>Created attachment 57870
[PATCH] pfeldman&apos;s comments addressed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>234220</commentid>
    <comment_count>7</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-06-04 08:14:13 -0700</bug_when>
    <thetext>Committing to http://svn.webkit.org/repository/webkit/trunk ...
        M       WebCore/ChangeLog
        A       WebCore/inspector/front-end/CSSStyleModel.js
        M       WebCore/inspector/front-end/StylesSidebarPane.js
        M       WebCore/inspector/front-end/inspector.html
        M       WebCore/inspector/front-end/inspector.js
Committed r60680</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57778</attachid>
            <date>2010-06-03 09:29:48 -0700</date>
            <delta_ts>2010-06-04 03:56:20 -0700</delta_ts>
            <desc>[PATCH] Suggested solution</desc>
            <filename>cssmodel.patch</filename>
            <type>text/plain</type>
            <size>23518</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NWUwNWVlYy4uMDIyOGUxYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MyBAQAorMjAxMC0wNi0wMyAgQWxleGFuZGVyIFBh
dmxvdiAgPGFwYXZsb3ZAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IEVsaW1pbmF0ZSBkaXJlY3QgZGVw
ZW5kZW5jeSBvZiBTdHlsZXNTaWRlYmFyUGFuZSBvbiBJbnNwZWN0b3JCYWNrZW5kCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDA2OQorCisgICAgICAg
IE5vIG5ldyB0ZXN0cyBhcmUgbmVlZGVkLCBhcyB0aGlzIGlzIGEgcmVmYWN0b3JpbmcuCisKKyAg
ICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0NTU1N0eWxlTW9kZWwuanM6IEFkZGVkLgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlTW9kZWwpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LkNTU1N0eWxlTW9kZWwucHJvdG90eXBlLmdldFN0eWxlcy5jYWxsYmFjayk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuQ1NTU3R5bGVNb2RlbC5wcm90b3R5cGUuZ2V0U3R5bGVzKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5DU1NTdHlsZU1vZGVsLnByb3RvdHlwZS5nZXRDb21wdXRlZFN0eWxlKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZU1vZGVsLnByb3RvdHlwZS5zZXRSdWxlU2Vs
ZWN0b3IpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlTW9kZWwucHJvdG90eXBlLmFk
ZFJ1bGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlTW9kZWwucHJvdG90eXBlLnRv
Z2dsZVN0eWxlRW5hYmxlbWVudC5jYWxsYmFjayk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ1NT
U3R5bGVNb2RlbC5wcm90b3R5cGUudG9nZ2xlU3R5bGVFbmFibGVtZW50KToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5DU1NTdHlsZU1vZGVsLnByb3RvdHlwZS5zZXRTdHlsZVRleHQpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlTW9kZWwucHJvdG90eXBlLmFwcGx5U3R5bGVUZXh0LmNh
bGxiYWNrKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZU1vZGVsLnByb3RvdHlwZS5h
cHBseVN0eWxlVGV4dCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9FbGVtZW50c1Bh
bmVsLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkVsZW1lbnRzUGFuZWwpOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLkVsZW1lbnRzUGFuZWwucHJvdG90eXBlLnJlc2V0KToKKyAgICAgICAgKiBp
bnNwZWN0b3IvZnJvbnQtZW5kL1N0eWxlc1NpZGViYXJQYW5lLmpzOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlN0eWxlc1NpZGViYXJQYW5lLnByb3RvdHlwZS51cGRhdGUpOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLlN0eWxlc1NpZGViYXJQYW5lLnByb3RvdHlwZS5fcmVidWlsZFNlY3Rpb25zRm9y
U3R5bGVSdWxlcyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU3R5bGVzU2lkZWJhclBhbmUucHJv
dG90eXBlLl9hcnJheUNvbnRhaW5zSW5oZXJpdGVkUHJvcGVydHkpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlN0eWxlUHJvcGVydGllc1NlY3Rpb24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlN0
eWxlUHJvcGVydGllc1NlY3Rpb24ucHJvdG90eXBlLm9ucG9wdWxhdGUpOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLlN0eWxlUHJvcGVydGllc1NlY3Rpb24ucHJvdG90eXBlLmFkZE5ld0JsYW5rUHJv
cGVydHkpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydGllc1NlY3Rpb24ucHJv
dG90eXBlLmVkaXRpbmdTZWxlY3RvckNvbW1pdHRlZC5zdWNjZXNzQ2FsbGJhY2spOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydGllc1NlY3Rpb24ucHJvdG90eXBlLmVkaXRpbmdT
ZWxlY3RvckNvbW1pdHRlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQmxhbmtTdHlsZVByb3Bl
cnRpZXNTZWN0aW9uLnByb3RvdHlwZS5lZGl0aW5nU2VsZWN0b3JDb21taXR0ZWQuc3VjY2Vzc0Nh
bGxiYWNrKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5CbGFua1N0eWxlUHJvcGVydGllc1NlY3Rp
b24ucHJvdG90eXBlLmVkaXRpbmdTZWxlY3RvckNvbW1pdHRlZCk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuU3R5bGVQcm9wZXJ0eVRyZWVFbGVtZW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5T
dHlsZVByb3BlcnR5VHJlZUVsZW1lbnQucHJvdG90eXBlLik6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuU3R5bGVQcm9wZXJ0eVRyZWVFbGVtZW50LnByb3RvdHlwZSk6CisgICAgICAgICogaW5zcGVj
dG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuaHRtbDoKKwogMjAxMC0wNi0wMyAgVG9yIEFybmUgVmVz
dGLDuCAgPHRvci5hcm5lLnZlc3Rib0Bub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
U2ltb24gSGF1c21hbm4uCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
Q1NTU3R5bGVNb2RlbC5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9DU1NTdHlsZU1v
ZGVsLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0YjYzMjAKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ1NTU3R5bGVNb2RlbC5q
cwpAQCAtMCwwICsxLDE0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisg
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKK1dlYkluc3BlY3Rvci5DU1NTdHlsZU1vZGVsID0gZnVuY3Rpb24o
KQoreworfQorCitXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNb2RlbC5wcm90b3R5cGUgPSB7CisgICAg
Z2V0U3R5bGVzOiBmdW5jdGlvbihub2RlSWQsIGF1dGhPbmx5LCB1c2VyQ2FsbGJhY2spCisgICAg
eworICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CisgICAgICAgIGZ1bmN0aW9uIGNhbGxiYWNrKHN0
eWxlcykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHVzZXJDYWxsYmFjaykKKyAgICAgICAg
ICAgICAgICB1c2VyQ2FsbGJhY2soc3R5bGVzKTsKKyAgICAgICAgfQorCisgICAgICAgIEluc3Bl
Y3RvckJhY2tlbmQuZ2V0U3R5bGVzKFdlYkluc3BlY3Rvci5DYWxsYmFjay53cmFwKGNhbGxiYWNr
KSwgbm9kZUlkLCBhdXRoT25seSk7CisgICAgfSwKKworICAgIGdldENvbXB1dGVkU3R5bGU6IGZ1
bmN0aW9uKG5vZGVJZCwgdXNlckNhbGxiYWNrKQorICAgIHsKKyAgICAgICAgZnVuY3Rpb24gY2Fs
bGJhY2soc3R5bGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh1c2VyQ2FsbGJhY2spCisg
ICAgICAgICAgICAgICAgdXNlckNhbGxiYWNrKHN0eWxlKTsKKyAgICAgICAgfQorCisgICAgICAg
IEluc3BlY3RvckJhY2tlbmQuZ2V0Q29tcHV0ZWRTdHlsZShXZWJJbnNwZWN0b3IuQ2FsbGJhY2su
d3JhcChjYWxsYmFjayksIG5vZGVJZCk7CisgICAgfSwKKworICAgIHNldFJ1bGVTZWxlY3Rvcjog
ZnVuY3Rpb24ocnVsZUlkLCBuZXdDb250ZW50LCBub2RlSWQsIHN1Y2Nlc3NDYWxsYmFjaywgZmFp
bHVyZUNhbGxiYWNrKQorICAgIHsKKyAgICAgICAgZnVuY3Rpb24gY2FsbGJhY2sobmV3UnVsZVBh
eWxvYWQsIGRvZXNBZmZlY3RTZWxlY3RlZE5vZGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlm
ICghbmV3UnVsZVBheWxvYWQpIHsKKyAgICAgICAgICAgICAgICBpZiAoZmFpbHVyZUNhbGxiYWNr
KQorICAgICAgICAgICAgICAgICAgICBmYWlsdXJlQ2FsbGJhY2soKTsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKHN1Y2Nlc3NDYWxsYmFjaykKKyAgICAgICAgICAg
ICAgICAgICAgc3VjY2Vzc0NhbGxiYWNrKFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9u
LnBhcnNlUnVsZShuZXdSdWxlUGF5bG9hZCksIGRvZXNBZmZlY3RTZWxlY3RlZE5vZGUpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5zZXRSdWxl
U2VsZWN0b3IoV2ViSW5zcGVjdG9yLkNhbGxiYWNrLndyYXAoY2FsbGJhY2spLCBydWxlSWQsIG5l
d0NvbnRlbnQsIG5vZGVJZCk7CisgICAgfSwKKworICAgIGFkZFJ1bGU6IGZ1bmN0aW9uKG5vZGVJ
ZCwgbmV3Q29udGVudCwgc3VjY2Vzc0NhbGxiYWNrLCBmYWlsdXJlQ2FsbGJhY2spCisgICAgewor
ICAgICAgICBmdW5jdGlvbiBjYWxsYmFjayhydWxlLCBkb2VzQWZmZWN0U2VsZWN0ZWROb2RlKQor
ICAgICAgICB7CisgICAgICAgICAgICBpZiAoIXJ1bGUpIHsKKyAgICAgICAgICAgICAgICAvLyBJ
bnZhbGlkIHN5bnRheCBmb3IgYSBzZWxlY3RvcgorICAgICAgICAgICAgICAgIGlmIChmYWlsdXJl
Q2FsbGJhY2spCisgICAgICAgICAgICAgICAgICAgIGZhaWx1cmVDYWxsYmFjaygpOworICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoc3VjY2Vzc0NhbGxiYWNrKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHZhciBzdHlsZVJ1bGUgPSBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVE
ZWNsYXJhdGlvbi5wYXJzZVJ1bGUocnVsZSk7CisgICAgICAgICAgICAgICAgICAgIHN0eWxlUnVs
ZS5ydWxlID0gcnVsZTsKKyAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc0NhbGxiYWNrKHN0eWxl
UnVsZSwgZG9lc0FmZmVjdFNlbGVjdGVkTm9kZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5hZGRSdWxlKFdl
Ykluc3BlY3Rvci5DYWxsYmFjay53cmFwKGNhbGxiYWNrKSwgbmV3Q29udGVudCwgbm9kZUlkKTsK
KyAgICB9LAorCisgICAgdG9nZ2xlU3R5bGVFbmFibGVtZW50OiBmdW5jdGlvbihzdHlsZUlkLCBw
cm9wZXJ0eU5hbWUsIGRpc2FibGVkLCB1c2VyQ2FsbGJhY2spCisgICAgeworICAgICAgICB2YXIg
c2VsZiA9IHRoaXM7CisgICAgICAgIGZ1bmN0aW9uIGNhbGxiYWNrKG5ld1BheWxvYWQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmICghbmV3UGF5bG9hZCkgeworICAgICAgICAgICAgICAgIGlm
ICh1c2VyQ2FsbGJhY2spCisgICAgICAgICAgICAgICAgICAgIHVzZXJDYWxsYmFjayhudWxsKTsK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlm
ICh1c2VyQ2FsbGJhY2spIHsKKyAgICAgICAgICAgICAgICB2YXIgbmV3U3R5bGUgPSBXZWJJbnNw
ZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvbi5wYXJzZVN0eWxlKG5ld1BheWxvYWQpOworICAgICAg
ICAgICAgICAgIHVzZXJDYWxsYmFjayhuZXdTdHlsZSk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLnRvZ2dsZVN0eWxlRW5hYmxlZChXZWJJbnNw
ZWN0b3IuQ2FsbGJhY2sud3JhcChjYWxsYmFjayksIHN0eWxlSWQsIHByb3BlcnR5TmFtZSwgZGlz
YWJsZWQpOworICAgIH0sCisKKyAgICBzZXRTdHlsZVRleHQ6IGZ1bmN0aW9uKHN0eWxlSWQsIGNz
c1RleHQsIHVzZXJDYWxsYmFjaykKKyAgICB7CisgICAgICAgIGZ1bmN0aW9uIGNhbGxiYWNrKHN1
Y2Nlc3MpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh1c2VyQ2FsbGJhY2spCisgICAgICAg
ICAgICAgICAgdXNlckNhbGxiYWNrKHN1Y2Nlc3MpOworICAgICAgICB9CisgICAgICAgIEluc3Bl
Y3RvckJhY2tlbmQuc2V0U3R5bGVUZXh0KFdlYkluc3BlY3Rvci5DYWxsYmFjay53cmFwKGNhbGxi
YWNrKSwgc3R5bGVJZCwgY3NzVGV4dCk7CisgICAgfSwKKworICAgIGFwcGx5U3R5bGVUZXh0OiBm
dW5jdGlvbihzdHlsZUlkLCBzdHlsZVRleHQsIHByb3BlcnR5TmFtZSwgc3VjY2Vzc0NhbGxiYWNr
LCBmYWlsdXJlQ2FsbGJhY2spCisgICAgeworICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CisgICAg
ICAgIGZ1bmN0aW9uIGNhbGxiYWNrKHN1Y2Nlc3MsIG5ld1BheWxvYWQsIGNoYW5nZWRQcm9wZXJ0
aWVzKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIXN1Y2Nlc3MpCisgICAgICAgICAgICAg
ICAgZmFpbHVyZUNhbGxiYWNrKCk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAg
ICBpZiAoc3VjY2Vzc0NhbGxiYWNrKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBuZXdTdHls
ZSA9IG5ld1BheWxvYWQgPyBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvbi5wYXJzZVN0
eWxlKG5ld1BheWxvYWQpIDogbnVsbDsKKyAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc0NhbGxi
YWNrKG5ld1N0eWxlLCBjaGFuZ2VkUHJvcGVydGllcyk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5hcHBseVN0
eWxlVGV4dChXZWJJbnNwZWN0b3IuQ2FsbGJhY2sud3JhcChjYWxsYmFjayksIHN0eWxlSWQsIHN0
eWxlVGV4dCwgcHJvcGVydHlOYW1lKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvRWxlbWVudHNQYW5lbC5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9FbGVtZW50c1BhbmVsLmpzCmluZGV4IGM4NTM0NDAuLjA3YjE1MmMgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9FbGVtZW50c1BhbmVsLmpzCisrKyBiL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9FbGVtZW50c1BhbmVsLmpzCkBAIC0zMiw2ICszMiw4
IEBAIFdlYkluc3BlY3Rvci5FbGVtZW50c1BhbmVsID0gZnVuY3Rpb24oKQogewogICAgIFdlYklu
c3BlY3Rvci5QYW5lbC5jYWxsKHRoaXMpOwogCisgICAgdGhpcy5tb2RlbCA9IG5ldyBXZWJJbnNw
ZWN0b3IuQ1NTU3R5bGVNb2RlbCgpOworCiAgICAgdGhpcy5lbGVtZW50LmFkZFN0eWxlQ2xhc3Mo
ImVsZW1lbnRzIik7CiAKICAgICB0aGlzLmNvbnRlbnRFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgiZGl2Iik7CkBAIC03MSw3ICs3Myw3IEBAIFdlYkluc3BlY3Rvci5FbGVtZW50c1Bh
bmVsID0gZnVuY3Rpb24oKQogCiAgICAgdGhpcy5zaWRlYmFyUGFuZXMgPSB7fTsKICAgICB0aGlz
LnNpZGViYXJQYW5lcy5jb21wdXRlZFN0eWxlID0gbmV3IFdlYkluc3BlY3Rvci5Db21wdXRlZFN0
eWxlU2lkZWJhclBhbmUoKTsKLSAgICB0aGlzLnNpZGViYXJQYW5lcy5zdHlsZXMgPSBuZXcgV2Vi
SW5zcGVjdG9yLlN0eWxlc1NpZGViYXJQYW5lKHRoaXMuc2lkZWJhclBhbmVzLmNvbXB1dGVkU3R5
bGUpOworICAgIHRoaXMuc2lkZWJhclBhbmVzLnN0eWxlcyA9IG5ldyBXZWJJbnNwZWN0b3IuU3R5
bGVzU2lkZWJhclBhbmUodGhpcy5zaWRlYmFyUGFuZXMuY29tcHV0ZWRTdHlsZSwgdGhpcyk7CiAg
ICAgdGhpcy5zaWRlYmFyUGFuZXMubWV0cmljcyA9IG5ldyBXZWJJbnNwZWN0b3IuTWV0cmljc1Np
ZGViYXJQYW5lKCk7CiAgICAgdGhpcy5zaWRlYmFyUGFuZXMucHJvcGVydGllcyA9IG5ldyBXZWJJ
bnNwZWN0b3IuUHJvcGVydGllc1NpZGViYXJQYW5lKCk7CiAgICAgdGhpcy5zaWRlYmFyUGFuZXMu
ZXZlbnRMaXN0ZW5lcnMgPSBuZXcgV2ViSW5zcGVjdG9yLkV2ZW50TGlzdGVuZXJzU2lkZWJhclBh
bmUoKTsKQEAgLTE3NSw2ICsxNzcsNyBAQCBXZWJJbnNwZWN0b3IuRWxlbWVudHNQYW5lbC5wcm90
b3R5cGUgPSB7CiAKICAgICAgICAgdGhpcy5yb290RE9NTm9kZSA9IG51bGw7CiAgICAgICAgIHRo
aXMuZm9jdXNlZERPTU5vZGUgPSBudWxsOworICAgICAgICB0aGlzLm1vZGVsID0gbmV3IFdlYklu
c3BlY3Rvci5DU1NTdHlsZU1vZGVsKCk7CiAKICAgICAgICAgV2ViSW5zcGVjdG9yLmhvdmVyZWRE
T01Ob2RlID0gbnVsbDsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L1N0eWxlc1NpZGViYXJQYW5lLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1N0eWxl
c1NpZGViYXJQYW5lLmpzCmluZGV4IDM1ZDI1ZDQuLjExZmNkYTIgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TdHlsZXNTaWRlYmFyUGFuZS5qcworKysgYi9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvU3R5bGVzU2lkZWJhclBhbmUuanMKQEAgLTI3LDEwICsyNywx
MSBAQAogICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi1XZWJJbnNwZWN0b3IuU3R5bGVzU2lkZWJhclBhbmUg
PSBmdW5jdGlvbihjb21wdXRlZFN0eWxlUGFuZSkKK1dlYkluc3BlY3Rvci5TdHlsZXNTaWRlYmFy
UGFuZSA9IGZ1bmN0aW9uKGNvbXB1dGVkU3R5bGVQYW5lLCBwYW5lbCkKIHsKICAgICBXZWJJbnNw
ZWN0b3IuU2lkZWJhclBhbmUuY2FsbCh0aGlzLCBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlN0eWxl
cyIpKTsKIAorICAgIHRoaXMuX3BhbmVsID0gcGFuZWw7CiAgICAgdGhpcy5zZXR0aW5nc1NlbGVj
dEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzZWxlY3QiKTsKIAogICAgIHZhciBv
cHRpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJvcHRpb24iKTsKQEAgLTE0Niw5ICsxNDcs
OSBAQCBXZWJJbnNwZWN0b3IuU3R5bGVzU2lkZWJhclBhbmUucHJvdG90eXBlID0gewogICAgICAg
ICB9OwogCiAgICAgICAgIGlmIChyZWZyZXNoKQotICAgICAgICAgICAgSW5zcGVjdG9yQmFja2Vu
ZC5nZXRDb21wdXRlZFN0eWxlKFdlYkluc3BlY3Rvci5DYWxsYmFjay53cmFwKGdldENvbXB1dGVk
U3R5bGVDYWxsYmFjay5iaW5kKHRoaXMpKSwgbm9kZS5pZCk7CisgICAgICAgICAgICB0aGlzLl9w
YW5lbC5tb2RlbC5nZXRDb21wdXRlZFN0eWxlKG5vZGUuaWQsIGdldENvbXB1dGVkU3R5bGVDYWxs
YmFjay5iaW5kKHRoaXMpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgSW5zcGVjdG9yQmFj
a2VuZC5nZXRTdHlsZXMoV2ViSW5zcGVjdG9yLkNhbGxiYWNrLndyYXAoZ2V0U3R5bGVzQ2FsbGJh
Y2suYmluZCh0aGlzKSksIG5vZGUuaWQsICFXZWJJbnNwZWN0b3Iuc2V0dGluZ3Muc2hvd1VzZXJB
Z2VudFN0eWxlcyk7CisgICAgICAgICAgICB0aGlzLl9wYW5lbC5tb2RlbC5nZXRTdHlsZXMobm9k
ZS5pZCwgIVdlYkluc3BlY3Rvci5zZXR0aW5ncy5zaG93VXNlckFnZW50U3R5bGVzLCBnZXRTdHls
ZXNDYWxsYmFjay5iaW5kKHRoaXMpKTsKICAgICB9LAogCiAgICAgX3JlZnJlc2hVcGRhdGU6IGZ1
bmN0aW9uKG5vZGUsIGNvbXB1dGVkU3R5bGUsIGVkaXRlZFNlY3Rpb24pCkBAIC00MzUsNyArNDM2
LDcgQEAgV2ViSW5zcGVjdG9yLlN0eWxlc1NpZGViYXJQYW5lLnByb3RvdHlwZSA9IHsKICAgICAg
ICAgICAgIGlmICh0eXBlb2YgZWRpdGFibGUgPT09ICJ1bmRlZmluZWQiKQogICAgICAgICAgICAg
ICAgIGVkaXRhYmxlID0gdHJ1ZTsKIAotICAgICAgICAgICAgdmFyIHNlY3Rpb24gPSBuZXcgV2Vi
SW5zcGVjdG9yLlN0eWxlUHJvcGVydGllc1NlY3Rpb24oc3R5bGVSdWxlLCBzdHlsZVJ1bGUuc3Vi
dGl0bGUsIHN0eWxlUnVsZS5jb21wdXRlZFN0eWxlLCAoc3R5bGVSdWxlLnVzZWRQcm9wZXJ0aWVz
IHx8IHVzZWRQcm9wZXJ0aWVzKSwgZWRpdGFibGUsIHN0eWxlUnVsZS5pc0luaGVyaXRlZCwgbGFz
dFdhc1NlcGFyYXRvcik7CisgICAgICAgICAgICB2YXIgc2VjdGlvbiA9IG5ldyBXZWJJbnNwZWN0
b3IuU3R5bGVQcm9wZXJ0aWVzU2VjdGlvbih0aGlzLl9wYW5lbCwgc3R5bGVSdWxlLCBzdHlsZVJ1
bGUuc3VidGl0bGUsIHN0eWxlUnVsZS5jb21wdXRlZFN0eWxlLCAoc3R5bGVSdWxlLnVzZWRQcm9w
ZXJ0aWVzIHx8IHVzZWRQcm9wZXJ0aWVzKSwgZWRpdGFibGUsIHN0eWxlUnVsZS5pc0luaGVyaXRl
ZCwgbGFzdFdhc1NlcGFyYXRvcik7CiAgICAgICAgICAgICBpZiAoY29tcHV0ZWRTdHlsZSkKICAg
ICAgICAgICAgICAgICBzZWN0aW9uLmRpc2FibGVkQ29tcHV0ZWRQcm9wZXJ0aWVzID0gZGlzYWJs
ZWRDb21wdXRlZFByb3BlcnRpZXM7CiAgICAgICAgICAgICBzZWN0aW9uLnBhbmUgPSB0aGlzOwpA
QCAtNDY2LDcgKzQ2Nyw3IEBAIFdlYkluc3BlY3Rvci5TdHlsZXNTaWRlYmFyUGFuZS5wcm90b3R5
cGUgPSB7CiAgICAgewogICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVu
Z3RoOyArK2kpIHsKICAgICAgICAgICAgIHZhciBwcm9wZXJ0eSA9IHByb3BlcnRpZXNbaV07Ci0g
ICAgICAgICAgICAvLyBEb2VzIHRoaXMgc3R5bGUgY29udGFpbiBub24tb3ZlcnJpZGVuIGluaGVy
aXRlZCBwcm9wZXJ0eT8KKyAgICAgICAgICAgIC8vIERvZXMgdGhpcyBzdHlsZSBjb250YWluIG5v
bi1vdmVycmlkZGVuIGluaGVyaXRlZCBwcm9wZXJ0eT8KICAgICAgICAgICAgIGlmIChwcm9wZXJ0
eS5uYW1lIGluIFdlYkluc3BlY3Rvci5TdHlsZXNTaWRlYmFyUGFuZS5Jbmhlcml0ZWRQcm9wZXJ0
aWVzKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CkBAIC02MDAsMTAg
KzYwMSwxMCBAQCBXZWJJbnNwZWN0b3IuQ29tcHV0ZWRTdHlsZVNpZGViYXJQYW5lID0gZnVuY3Rp
b24oKQogCiAgICAgc2hvd0luaGVyaXRlZENoZWNrYm94LmFkZEV2ZW50TGlzdGVuZXIoc2hvd0lu
aGVyaXRlZFRvZ2dsZUZ1bmN0aW9uLmJpbmQodGhpcykpOwogfQotIAorCiBXZWJJbnNwZWN0b3Iu
Q29tcHV0ZWRTdHlsZVNpZGViYXJQYW5lLnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0
b3IuU2lkZWJhclBhbmUucHJvdG90eXBlOwogCi1XZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0aWVz
U2VjdGlvbiA9IGZ1bmN0aW9uKHN0eWxlUnVsZSwgc3VidGl0bGUsIGNvbXB1dGVkU3R5bGUsIHVz
ZWRQcm9wZXJ0aWVzLCBlZGl0YWJsZSwgaXNJbmhlcml0ZWQsIGlzRmlyc3RTZWN0aW9uKQorV2Vi
SW5zcGVjdG9yLlN0eWxlUHJvcGVydGllc1NlY3Rpb24gPSBmdW5jdGlvbihwYW5lbCwgc3R5bGVS
dWxlLCBzdWJ0aXRsZSwgY29tcHV0ZWRTdHlsZSwgdXNlZFByb3BlcnRpZXMsIGVkaXRhYmxlLCBp
c0luaGVyaXRlZCwgaXNGaXJzdFNlY3Rpb24pCiB7CiAgICAgV2ViSW5zcGVjdG9yLlByb3BlcnRp
ZXNTZWN0aW9uLmNhbGwodGhpcywgIiIpOwogICAgIHRoaXMuZWxlbWVudC5jbGFzc05hbWUgPSAi
c3R5bGVzLXNlY3Rpb24gbW9ub3NwYWNlIiArIChpc0ZpcnN0U2VjdGlvbiA/ICIgZmlyc3Qtc3R5
bGVzLXNlY3Rpb24iIDogIiIpOwpAQCAtNjI1LDYgKzYyNiw3IEBAIFdlYkluc3BlY3Rvci5TdHls
ZVByb3BlcnRpZXNTZWN0aW9uID0gZnVuY3Rpb24oc3R5bGVSdWxlLCBzdWJ0aXRsZSwgY29tcHV0
ZWRTdHlsCiAgICAgdGhpcy5fc2VsZWN0b3JFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImRibGNs
aWNrIiwgdGhpcy5faGFuZGxlU2VsZWN0b3JEb3VibGVDbGljay5iaW5kKHRoaXMpLCBmYWxzZSk7
CiAgICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImRibGNsaWNrIiwgdGhpcy5faGFu
ZGxlRW1wdHlTcGFjZURvdWJsZUNsaWNrLmJpbmQodGhpcyksIGZhbHNlKTsKIAorICAgIHRoaXMu
X3BhbmVsID0gcGFuZWw7CiAgICAgdGhpcy5zdHlsZVJ1bGUgPSBzdHlsZVJ1bGU7CiAgICAgdGhp
cy5ydWxlID0gdGhpcy5zdHlsZVJ1bGUucnVsZTsKICAgICB0aGlzLmNvbXB1dGVkU3R5bGUgPSBj
b21wdXRlZFN0eWxlOwpAQCAtNzkwLDcgKzc5Miw3IEBAIFdlYkluc3BlY3Rvci5TdHlsZVByb3Bl
cnRpZXNTZWN0aW9uLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHZhciBpbmhlcml0ZWQgPSB0
aGlzLmlzUHJvcGVydHlJbmhlcml0ZWQobmFtZSk7CiAgICAgICAgICAgICB2YXIgb3ZlcmxvYWRl
ZCA9IHRoaXMuaXNQcm9wZXJ0eU92ZXJsb2FkZWQobmFtZSwgaXNTaG9ydGhhbmQpOwogCi0gICAg
ICAgICAgICB2YXIgaXRlbSA9IG5ldyBXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0eVRyZWVFbGVt
ZW50KHRoaXMuc3R5bGVSdWxlLCBzdHlsZSwgbmFtZSwgaXNTaG9ydGhhbmQsIGluaGVyaXRlZCwg
b3ZlcmxvYWRlZCwgZGlzYWJsZWQpOworICAgICAgICAgICAgdmFyIGl0ZW0gPSBuZXcgV2ViSW5z
cGVjdG9yLlN0eWxlUHJvcGVydHlUcmVlRWxlbWVudCh0aGlzLl9wYW5lbCwgdGhpcy5zdHlsZVJ1
bGUsIHN0eWxlLCBuYW1lLCBpc1Nob3J0aGFuZCwgaW5oZXJpdGVkLCBvdmVybG9hZGVkLCBkaXNh
YmxlZCk7CiAgICAgICAgICAgICB0aGlzLnByb3BlcnRpZXNUcmVlT3V0bGluZS5hcHBlbmRDaGls
ZChpdGVtKTsKICAgICAgICAgfQogICAgIH0sCkBAIC04MDgsNyArODEwLDcgQEAgV2ViSW5zcGVj
dG9yLlN0eWxlUHJvcGVydGllc1NlY3Rpb24ucHJvdG90eXBlID0gewogCiAgICAgYWRkTmV3Qmxh
bmtQcm9wZXJ0eTogZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgdmFyIGl0ZW0gPSBuZXcgV2Vi
SW5zcGVjdG9yLlN0eWxlUHJvcGVydHlUcmVlRWxlbWVudCh0aGlzLnN0eWxlUnVsZSwgdGhpcy5z
dHlsZVJ1bGUuc3R5bGUsICIiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7CisgICAgICAg
IHZhciBpdGVtID0gbmV3IFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnR5VHJlZUVsZW1lbnQodGhp
cy5fcGFuZWwsIHRoaXMuc3R5bGVSdWxlLCB0aGlzLnN0eWxlUnVsZS5zdHlsZSwgIiIsIGZhbHNl
LCBmYWxzZSwgZmFsc2UsIGZhbHNlKTsKICAgICAgICAgdGhpcy5wcm9wZXJ0aWVzVHJlZU91dGxp
bmUuYXBwZW5kQ2hpbGQoaXRlbSk7CiAgICAgICAgIGl0ZW0ubGlzdEl0ZW1FbGVtZW50LnRleHRD
b250ZW50ID0gIiI7CiAgICAgICAgIGl0ZW0uX25ld1Byb3BlcnR5ID0gdHJ1ZTsKQEAgLTg4Miwx
NCArODg0LDkgQEAgV2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydGllc1NlY3Rpb24ucHJvdG90eXBl
ID0gewogICAgICAgICAgICAgcmV0dXJuIG1vdmVUb05leHRJZk5lZWRlZC5jYWxsKHRoaXMpOwog
CiAgICAgICAgIHZhciBzZWxmID0gdGhpczsKLSAgICAgICAgZnVuY3Rpb24gY2FsbGJhY2sobmV3
UnVsZVBheWxvYWQsIGRvZXNBZmZlY3RTZWxlY3RlZE5vZGUpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGlmICghbmV3UnVsZVBheWxvYWQpIHsKLSAgICAgICAgICAgICAgICAvLyBJbnZhbGlkIFN5
bnRheCBmb3IgYSBTZWxlY3RvcgotICAgICAgICAgICAgICAgIG1vdmVUb05leHRJZk5lZWRlZC5j
YWxsKHNlbGYpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KIAorICAg
ICAgICBmdW5jdGlvbiBzdWNjZXNzQ2FsbGJhY2sobmV3UnVsZSwgZG9lc0FmZmVjdFNlbGVjdGVk
Tm9kZSkKKyAgICAgICAgewogICAgICAgICAgICAgaWYgKCFkb2VzQWZmZWN0U2VsZWN0ZWROb2Rl
KSB7CiAgICAgICAgICAgICAgICAgc2VsZi5ub0FmZmVjdCA9IHRydWU7CiAgICAgICAgICAgICAg
ICAgc2VsZi5lbGVtZW50LmFkZFN0eWxlQ2xhc3MoIm5vLWFmZmVjdCIpOwpAQCAtODk4LDcgKzg5
NSw2IEBAIFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnRpZXNTZWN0aW9uLnByb3RvdHlwZSA9IHsK
ICAgICAgICAgICAgICAgICBzZWxmLmVsZW1lbnQucmVtb3ZlU3R5bGVDbGFzcygibm8tYWZmZWN0
Iik7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHZhciBuZXdSdWxlID0gV2ViSW5zcGVj
dG9yLkNTU1N0eWxlRGVjbGFyYXRpb24ucGFyc2VSdWxlKG5ld1J1bGVQYXlsb2FkKTsKICAgICAg
ICAgICAgIHNlbGYucnVsZSA9IG5ld1J1bGU7CiAgICAgICAgICAgICBzZWxmLnN0eWxlUnVsZSA9
IHsgc2VjdGlvbjogc2VsZiwgc3R5bGU6IG5ld1J1bGUuc3R5bGUsIHNlbGVjdG9yVGV4dDogbmV3
UnVsZS5zZWxlY3RvclRleHQsIHBhcmVudFN0eWxlU2hlZXQ6IG5ld1J1bGUucGFyZW50U3R5bGVT
aGVldCwgcnVsZTogbmV3UnVsZSB9OwogCkBAIC05MTIsNyArOTA4LDcgQEAgV2ViSW5zcGVjdG9y
LlN0eWxlUHJvcGVydGllc1NlY3Rpb24ucHJvdG90eXBlID0gewogICAgICAgICAgICAgbW92ZVRv
TmV4dElmTmVlZGVkLmNhbGwoc2VsZik7CiAgICAgICAgIH0KIAotICAgICAgICBJbnNwZWN0b3JC
YWNrZW5kLnNldFJ1bGVTZWxlY3RvcihXZWJJbnNwZWN0b3IuQ2FsbGJhY2sud3JhcChjYWxsYmFj
ayksIHRoaXMucnVsZS5pZCwgbmV3Q29udGVudCwgdGhpcy5wYW5lLm5vZGUuaWQpOworICAgICAg
ICB0aGlzLl9wYW5lbC5tb2RlbC5zZXRSdWxlU2VsZWN0b3IodGhpcy5ydWxlLmlkLCBuZXdDb250
ZW50LCB0aGlzLnBhbmUubm9kZS5pZCwgc3VjY2Vzc0NhbGxiYWNrLCBtb3ZlVG9OZXh0SWZOZWVk
ZWQuYmluZCh0aGlzKSk7CiAgICAgfSwKIAogICAgIGVkaXRpbmdTZWxlY3RvckNhbmNlbGxlZDog
ZnVuY3Rpb24oKQpAQCAtOTM5LDE3ICs5MzUsOCBAQCBXZWJJbnNwZWN0b3IuQmxhbmtTdHlsZVBy
b3BlcnRpZXNTZWN0aW9uLnByb3RvdHlwZSA9IHsKICAgICBlZGl0aW5nU2VsZWN0b3JDb21taXR0
ZWQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5ld0NvbnRlbnQsIG9sZENvbnRlbnQsIGNvbnRleHQpCiAg
ICAgewogICAgICAgICB2YXIgc2VsZiA9IHRoaXM7Ci0gICAgICAgIGZ1bmN0aW9uIGNhbGxiYWNr
KHJ1bGUsIGRvZXNTZWxlY3RvckFmZmVjdFNlbGVjdGVkTm9kZSkKKyAgICAgICAgZnVuY3Rpb24g
c3VjY2Vzc0NhbGxiYWNrKHN0eWxlUnVsZSwgZG9lc1NlbGVjdG9yQWZmZWN0U2VsZWN0ZWROb2Rl
KQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIXJ1bGUpIHsKLSAgICAgICAgICAgICAgICAv
LyBJbnZhbGlkIFN5bnRheCBmb3IgYSBTZWxlY3RvcgotICAgICAgICAgICAgICAgIHNlbGYuZWRp
dGluZ1NlbGVjdG9yQ2FuY2VsbGVkKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICB2YXIgc3R5bGVSdWxlID0gV2ViSW5zcGVjdG9yLkNTU1N0
eWxlRGVjbGFyYXRpb24ucGFyc2VSdWxlKHJ1bGUpOwotICAgICAgICAgICAgc3R5bGVSdWxlLnJ1
bGUgPSBydWxlOwotCiAgICAgICAgICAgICBzZWxmLm1ha2VOb3JtYWwoc3R5bGVSdWxlKTsKIAog
ICAgICAgICAgICAgaWYgKCFkb2VzU2VsZWN0b3JBZmZlY3RTZWxlY3RlZE5vZGUpIHsKQEAgLTk2
Myw3ICs5NTAsNyBAQCBXZWJJbnNwZWN0b3IuQmxhbmtTdHlsZVByb3BlcnRpZXNTZWN0aW9uLnBy
b3RvdHlwZSA9IHsKICAgICAgICAgICAgIHNlbGYuYWRkTmV3QmxhbmtQcm9wZXJ0eSgpLnN0YXJ0
RWRpdGluZygpOwogICAgICAgICB9CiAKLSAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5hZGRSdWxl
KFdlYkluc3BlY3Rvci5DYWxsYmFjay53cmFwKGNhbGxiYWNrKSwgbmV3Q29udGVudCwgdGhpcy5w
YW5lLm5vZGUuaWQpOworICAgICAgICB0aGlzLl9wYW5lbC5tb2RlbC5hZGRSdWxlKHRoaXMucGFu
ZS5ub2RlLmlkLCBuZXdDb250ZW50LCBjYWxsYmFjaywgdGhpcy5lZGl0aW5nU2VsZWN0b3JDYW5j
ZWxsZWQuYmluZCh0aGlzKSk7CiAgICAgfSwKIAogICAgIGVkaXRpbmdTZWxlY3RvckNhbmNlbGxl
ZDogZnVuY3Rpb24oKQpAQCAtOTg3LDggKzk3NCw5IEBAIFdlYkluc3BlY3Rvci5CbGFua1N0eWxl
UHJvcGVydGllc1NlY3Rpb24ucHJvdG90eXBlID0gewogCiBXZWJJbnNwZWN0b3IuQmxhbmtTdHls
ZVByb3BlcnRpZXNTZWN0aW9uLnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuU3R5
bGVQcm9wZXJ0aWVzU2VjdGlvbi5wcm90b3R5cGU7CiAKLVdlYkluc3BlY3Rvci5TdHlsZVByb3Bl
cnR5VHJlZUVsZW1lbnQgPSBmdW5jdGlvbihzdHlsZVJ1bGUsIHN0eWxlLCBuYW1lLCBzaG9ydGhh
bmQsIGluaGVyaXRlZCwgb3ZlcmxvYWRlZCwgZGlzYWJsZWQpCitXZWJJbnNwZWN0b3IuU3R5bGVQ
cm9wZXJ0eVRyZWVFbGVtZW50ID0gZnVuY3Rpb24ocGFuZWwsIHN0eWxlUnVsZSwgc3R5bGUsIG5h
bWUsIHNob3J0aGFuZCwgaW5oZXJpdGVkLCBvdmVybG9hZGVkLCBkaXNhYmxlZCkKIHsKKyAgICB0
aGlzLl9wYW5lbCA9IHBhbmVsOwogICAgIHRoaXMuX3N0eWxlUnVsZSA9IHN0eWxlUnVsZTsKICAg
ICB0aGlzLnN0eWxlID0gc3R5bGU7CiAgICAgdGhpcy5uYW1lID0gbmFtZTsKQEAgLTEyMjAsNiAr
MTIwOCw5IEBAIFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnR5VHJlZUVsZW1lbnQucHJvdG90eXBl
ID0gewogCiAgICAgICAgIHRoaXMubGlzdEl0ZW1FbGVtZW50LnJlbW92ZUNoaWxkcmVuKCk7CiAK
KyAgICAgICAgaWYgKCF0aGlzLnRyZWVPdXRsaW5lKQorICAgICAgICAgICAgcmV0dXJuOworCiAg
ICAgICAgIC8vIEFwcGVuZCB0aGUgY2hlY2tib3ggZm9yIHJvb3QgZWxlbWVudHMgb2YgYW4gZWRp
dGFibGUgc2VjdGlvbi4KICAgICAgICAgaWYgKHRoaXMudHJlZU91dGxpbmUuc2VjdGlvbiAmJiB0
aGlzLnRyZWVPdXRsaW5lLnNlY3Rpb24uZWRpdGFibGUgJiYgdGhpcy5wYXJlbnQucm9vdCkKICAg
ICAgICAgICAgIHRoaXMubGlzdEl0ZW1FbGVtZW50LmFwcGVuZENoaWxkKGVuYWJsZWRDaGVja2Jv
eEVsZW1lbnQpOwpAQCAtMTI1NCwxMiArMTI0NSwxMiBAQCBXZWJJbnNwZWN0b3IuU3R5bGVQcm9w
ZXJ0eVRyZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKICAgICAgICAgdmFyIGRpc2FibGVkID0gIWV2
ZW50LnRhcmdldC5jaGVja2VkOwogCiAgICAgICAgIHZhciBzZWxmID0gdGhpczsKLSAgICAgICAg
ZnVuY3Rpb24gY2FsbGJhY2sobmV3UGF5bG9hZCkKKyAgICAgICAgZnVuY3Rpb24gY2FsbGJhY2so
bmV3U3R5bGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmICghbmV3UGF5bG9hZCkKKyAgICAg
ICAgICAgIGlmICghbmV3U3R5bGUpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAg
ICAgICBzZWxmLnN0eWxlID0gV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24ucGFyc2VT
dHlsZShuZXdQYXlsb2FkKTsKKyAgICAgICAgICAgIHNlbGYuc3R5bGUgPSBuZXdTdHlsZTsKICAg
ICAgICAgICAgIHNlbGYuX3N0eWxlUnVsZS5zdHlsZSA9IHNlbGYuc3R5bGU7CiAKICAgICAgICAg
ICAgIC8vIFNldCB0aGUgZGlzYWJsZWQgcHJvcGVydHkgaGVyZSwgc2luY2UgdGhlIGNvZGUgYWJv
dmUgcmVwbGllcyBvbiBpdCBub3QgY2hhbmdpbmcKQEAgLTEyNzIsNyArMTI2Myw3IEBAIFdlYklu
c3BlY3Rvci5TdHlsZVByb3BlcnR5VHJlZUVsZW1lbnQucHJvdG90eXBlID0gewogICAgICAgICAg
ICAgc2VsZi51cGRhdGVBbGwodHJ1ZSk7CiAgICAgICAgIH0KIAotICAgICAgICBJbnNwZWN0b3JC
YWNrZW5kLnRvZ2dsZVN0eWxlRW5hYmxlZChXZWJJbnNwZWN0b3IuQ2FsbGJhY2sud3JhcChjYWxs
YmFjayksIHRoaXMuc3R5bGUuaWQsIHRoaXMubmFtZSwgZGlzYWJsZWQpOworICAgICAgICB0aGlz
Ll9wYW5lbC5tb2RlbC50b2dnbGVTdHlsZUVuYWJsZW1lbnQodGhpcy5zdHlsZS5pZCwgdGhpcy5u
YW1lLCBkaXNhYmxlZCwgY2FsbGJhY2spOwogICAgIH0sCiAKICAgICB1cGRhdGVTdGF0ZTogZnVu
Y3Rpb24oKQpAQCAtMTMxNiw3ICsxMzA3LDcgQEAgV2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydHlU
cmVlRWxlbWVudC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICAgICAgdmFyIG92ZXJsb2FkZWQg
PSB0aGlzLnRyZWVPdXRsaW5lLnNlY3Rpb24uaXNQcm9wZXJ0eU92ZXJsb2FkZWQobmFtZSk7CiAg
ICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHZhciBpdGVtID0gbmV3IFdlYkluc3BlY3Rvci5T
dHlsZVByb3BlcnR5VHJlZUVsZW1lbnQodGhpcy5fc3R5bGVSdWxlLCB0aGlzLnN0eWxlLCBuYW1l
LCBmYWxzZSwgaW5oZXJpdGVkLCBvdmVybG9hZGVkKTsKKyAgICAgICAgICAgIHZhciBpdGVtID0g
bmV3IFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnR5VHJlZUVsZW1lbnQodGhpcy5fcGFuZWwsIHRo
aXMuX3N0eWxlUnVsZSwgdGhpcy5zdHlsZSwgbmFtZSwgZmFsc2UsIGluaGVyaXRlZCwgb3Zlcmxv
YWRlZCk7CiAgICAgICAgICAgICB0aGlzLmFwcGVuZENoaWxkKGl0ZW0pOwogICAgICAgICB9CiAg
ICAgfSwKQEAgLTE0MzQsNyArMTQyNSw3IEBAIFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnR5VHJl
ZUVsZW1lbnQucHJvdG90eXBlID0gewogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8g
UmVzdG9yZSB0aGUgb3JpZ2luYWwgQ1NTIHRleHQgYmVmb3JlIGFwcGx5aW5nIHVzZXIgY2hhbmdl
cy4gVGhpcyBpcyBuZWVkZWQgdG8gcHJldmVudAogICAgICAgICAgICAgLy8gbmV3IHByb3BlcnRp
ZXMgZnJvbSBzdGlja2luZyBhcm91bmQgaWYgdGhlIHVzZXIgYWRkcyBvbmUsIHRoZW4gcmVtb3Zl
cyBpdC4KLSAgICAgICAgICAgIEluc3BlY3RvckJhY2tlbmQuc2V0U3R5bGVUZXh0KFdlYkluc3Bl
Y3Rvci5DYWxsYmFjay53cmFwKG51bGwpLCB0aGlzLnN0eWxlLmlkLCB0aGlzLm9yaWdpbmFsQ1NT
VGV4dCk7CisgICAgICAgICAgICB0aGlzLl9wYW5lbC5tb2RlbC5zZXRTdHlsZVRleHQodGhpcy5z
dHlsZS5pZCwgdGhpcy5vcmlnaW5hbENTU1RleHQpOwogICAgICAgICB9CiAKICAgICAgICAgdGhp
cy5hcHBseVN0eWxlVGV4dCh0aGlzLmxpc3RJdGVtRWxlbWVudC50ZXh0Q29udGVudCk7CkBAIC0x
NDU0LDcgKzE0NDUsNyBAQCBXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0eVRyZWVFbGVtZW50LnBy
b3RvdHlwZSA9IHsKICAgICAgICAgaWYgKHRoaXMuX25ld1Byb3BlcnR5KQogICAgICAgICAgICAg
dGhpcy50cmVlT3V0bGluZS5yZW1vdmVDaGlsZCh0aGlzKTsKICAgICAgICAgZWxzZSBpZiAodGhp
cy5vcmlnaW5hbENTU1RleHQpIHsKLSAgICAgICAgICAgIEluc3BlY3RvckJhY2tlbmQuc2V0U3R5
bGVUZXh0KFdlYkluc3BlY3Rvci5DYWxsYmFjay53cmFwKG51bGwpLCB0aGlzLnN0eWxlLmlkLCB0
aGlzLm9yaWdpbmFsQ1NTVGV4dCk7CisgICAgICAgICAgICB0aGlzLl9wYW5lbC5tb2RlbC5zZXRT
dHlsZVRleHQodGhpcy5zdHlsZS5pZCwgdGhpcy5vcmlnaW5hbENTU1RleHQpOwogCiAgICAgICAg
ICAgICBpZiAodGhpcy50cmVlT3V0bGluZS5zZWN0aW9uICYmIHRoaXMudHJlZU91dGxpbmUuc2Vj
dGlvbi5wYW5lKQogICAgICAgICAgICAgICAgIHRoaXMudHJlZU91dGxpbmUuc2VjdGlvbi5wYW5l
LmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycygic3R5bGUgZWRpdGVkIik7CkBAIC0xNTQxLDI4ICsx
NTMyLDI5IEBAIFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnR5VHJlZUVsZW1lbnQucHJvdG90eXBl
ID0gewogICAgICAgICB9CiAKICAgICAgICAgdmFyIHNlbGYgPSB0aGlzOwotICAgICAgICBmdW5j
dGlvbiBjYWxsYmFjayhzdWNjZXNzLCBuZXdQYXlsb2FkLCBjaGFuZ2VkUHJvcGVydGllcykKKwor
ICAgICAgICBmdW5jdGlvbiBmYWlsdXJlQ2FsbGJhY2soKQogICAgICAgICB7Ci0gICAgICAgICAg
ICBpZiAoIXN1Y2Nlc3MpIHsKLSAgICAgICAgICAgICAgICAvLyBUaGUgdXNlciB0eXBlZCBzb21l
dGhpbmcsIGJ1dCBpdCBkaWRuJ3QgcGFyc2UuIEp1c3QgYWJvcnQgYW5kIHJlc3RvcmUKLSAgICAg
ICAgICAgICAgICAvLyB0aGUgb3JpZ2luYWwgdGl0bGUgZm9yIHRoaXMgcHJvcGVydHkuICBJZiB0
aGlzIHdhcyBhIG5ldyBhdHRyaWJ1dGUgYW5kCi0gICAgICAgICAgICAgICAgLy8gd2UgY291bGRu
J3QgcGFyc2UsIHRoZW4ganVzdCByZW1vdmUgaXQuCi0gICAgICAgICAgICAgICAgaWYgKHNlbGYu
X25ld1Byb3BlcnR5KSB7Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYucGFyZW50LnJlbW92ZUNo
aWxkKHNlbGYpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGlmICh1cGRhdGVJbnRlcmZhY2UpCi0gICAgICAgICAgICAgICAg
ICAgIHNlbGYudXBkYXRlVGl0bGUoKTsKKyAgICAgICAgICAgIC8vIFRoZSB1c2VyIHR5cGVkIHNv
bWV0aGluZywgYnV0IGl0IGRpZG4ndCBwYXJzZS4gSnVzdCBhYm9ydCBhbmQgcmVzdG9yZQorICAg
ICAgICAgICAgLy8gdGhlIG9yaWdpbmFsIHRpdGxlIGZvciB0aGlzIHByb3BlcnR5LiAgSWYgdGhp
cyB3YXMgYSBuZXcgYXR0cmlidXRlIGFuZAorICAgICAgICAgICAgLy8gd2UgY291bGRuJ3QgcGFy
c2UsIHRoZW4ganVzdCByZW1vdmUgaXQuCisgICAgICAgICAgICBpZiAoc2VsZi5fbmV3UHJvcGVy
dHkpIHsKKyAgICAgICAgICAgICAgICBzZWxmLnBhcmVudC5yZW1vdmVDaGlsZChzZWxmKTsKICAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodXBk
YXRlSW50ZXJmYWNlKQorICAgICAgICAgICAgICAgIHNlbGYudXBkYXRlVGl0bGUoKTsKKyAgICAg
ICAgfQogCisgICAgICAgIGZ1bmN0aW9uIHN1Y2Nlc3NDYWxsYmFjayhuZXdTdHlsZSwgY2hhbmdl
ZFByb3BlcnRpZXMpCisgICAgICAgIHsKICAgICAgICAgICAgIGVsZW1lbnRzUGFuZWwucmVtb3Zl
U3R5bGVDaGFuZ2Uoc2VjdGlvbi5pZGVudGlmaWVyLCBzZWxmLnN0eWxlLCBzZWxmLm5hbWUpOwog
CiAgICAgICAgICAgICBpZiAoIXN0eWxlVGV4dExlbmd0aCkgewogICAgICAgICAgICAgICAgIC8v
IERvIHJlbW92ZSBvdXJzZWx2ZXMgZnJvbSBVSSB3aGVuIHRoZSBwcm9wZXJ0eSByZW1vdmFsIGlz
IGNvbmZpcm1lZC4KICAgICAgICAgICAgICAgICBzZWxmLnBhcmVudC5yZW1vdmVDaGlsZChzZWxm
KTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgc2VsZi5zdHlsZSA9IFdl
Ykluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uLnBhcnNlU3R5bGUobmV3UGF5bG9hZCk7Cisg
ICAgICAgICAgICAgICAgc2VsZi5zdHlsZSA9IG5ld1N0eWxlOwogICAgICAgICAgICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgY2hhbmdlZFByb3BlcnRpZXMubGVuZ3RoOyArK2kpCiAgICAgICAg
ICAgICAgICAgICAgIGVsZW1lbnRzUGFuZWwuYWRkU3R5bGVDaGFuZ2Uoc2VjdGlvbi5pZGVudGlm
aWVyLCBzZWxmLnN0eWxlLCBjaGFuZ2VkUHJvcGVydGllc1tpXSk7CiAgICAgICAgICAgICAgICAg
c2VsZi5fc3R5bGVSdWxlLnN0eWxlID0gc2VsZi5zdHlsZTsKQEAgLTE1NzQsNyArMTU2Niw4IEBA
IFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnR5VHJlZUVsZW1lbnQucHJvdG90eXBlID0gewogICAg
ICAgICAgICAgaWYgKHVwZGF0ZUludGVyZmFjZSkKICAgICAgICAgICAgICAgICBzZWxmLnVwZGF0
ZUFsbCh0cnVlKTsKICAgICAgICAgfQotICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLmFwcGx5U3R5
bGVUZXh0KFdlYkluc3BlY3Rvci5DYWxsYmFjay53cmFwKGNhbGxiYWNrKSwgdGhpcy5zdHlsZS5p
ZCwgc3R5bGVUZXh0LCB0aGlzLm5hbWUpOworCisgICAgICAgIHRoaXMuX3BhbmVsLm1vZGVsLmFw
cGx5U3R5bGVUZXh0KHRoaXMuc3R5bGUuaWQsIHN0eWxlVGV4dCwgdGhpcy5uYW1lLCBzdWNjZXNz
Q2FsbGJhY2ssIGZhaWx1cmVDYWxsYmFjayk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWwgYi9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWwKaW5kZXggODJhNGFkOS4uNGM1MTYzNCAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5odG1sCisrKyBiL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuaHRtbApAQCAtNDEsNiArNDEsNyBA
QCBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ikluc3Bl
Y3RvckZyb250ZW5kSG9zdFN0dWIuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4
dC9qYXZhc2NyaXB0IiBzcmM9Ik9iamVjdC5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCB0eXBl
PSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iU2V0dGluZ3MuanMiPjwvc2NyaXB0PgorICAgIDxzY3Jp
cHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IkNTU1N0eWxlTW9kZWwuanMiPjwvc2NyaXB0
PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IkNoZWNrYm94LmpzIj48
L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJDb250ZXh0
TWVudS5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNy
Yz0iS2V5Ym9hcmRTaG9ydGN1dC5qcyI+PC9zY3JpcHQ+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57863</attachid>
            <date>2010-06-04 03:56:20 -0700</date>
            <delta_ts>2010-06-04 07:02:14 -0700</delta_ts>
            <desc>[PATCH] Comments addressed</desc>
            <filename>cssmodel.patch</filename>
            <type>text/plain</type>
            <size>18731</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZjE2ZjI2NC4uODFhOTJjOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzOSBAQAorMjAxMC0wNi0wNCAgQWxleGFuZGVyIFBh
dmxvdiAgPGFwYXZsb3ZAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IEVsaW1pbmF0ZSBkaXJlY3QgZGVw
ZW5kZW5jeSBvZiBTdHlsZXNTaWRlYmFyUGFuZSBvbiBJbnNwZWN0b3JCYWNrZW5kCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDA2OQorCisgICAgICAg
IE5vIG5ldyB0ZXN0cyBhcmUgbmVlZGVkLCBhcyB0aGlzIGlzIGEgcmVmYWN0b3JpbmcuCisKKyAg
ICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0NTU1N0eWxlTW9kZWwuanM6IEFkZGVkLgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlTW9kZWwpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LkNTU1N0eWxlTW9kZWwucHJvdG90eXBlLnN0eWxlcy5jYWxsYmFjayk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuQ1NTU3R5bGVNb2RlbC5wcm90b3R5cGUuc3R5bGVzKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5DU1NTdHlsZU1vZGVsLnByb3RvdHlwZS5jb21wdXRlZFN0eWxlKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5DU1NTdHlsZU1vZGVsLnByb3RvdHlwZS5zZXRSdWxlU2VsZWN0b3IpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlTW9kZWwucHJvdG90eXBlLmFkZFJ1bGUpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlTW9kZWwucHJvdG90eXBlLnRvZ2dsZVN0eWxl
RW5hYmxlbWVudC5jYWxsYmFjayk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNb2Rl
bC5wcm90b3R5cGUudG9nZ2xlU3R5bGVFbmFibGVtZW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5DU1NTdHlsZU1vZGVsLnByb3RvdHlwZS5zZXRTdHlsZVRleHQpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLkNTU1N0eWxlTW9kZWwucHJvdG90eXBlLmFwcGx5U3R5bGVUZXh0LmNhbGxiYWNrKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZU1vZGVsLnByb3RvdHlwZS5hcHBseVN0eWxl
VGV4dCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9TdHlsZXNTaWRlYmFyUGFuZS5q
czoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TdHlsZXNTaWRlYmFyUGFuZS5wcm90b3R5cGUudXBk
YXRlLnN0eWxlc0NhbGxiYWNrKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TdHlsZXNTaWRlYmFy
UGFuZS5wcm90b3R5cGUudXBkYXRlLmNvbXB1dGVkU3R5bGVDYWxsYmFjayk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuU3R5bGVzU2lkZWJhclBhbmUucHJvdG90eXBlLnVwZGF0ZSk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuU3R5bGVzU2lkZWJhclBhbmUucHJvdG90eXBlLl9hcnJheUNvbnRhaW5z
SW5oZXJpdGVkUHJvcGVydHkpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydGll
c1NlY3Rpb24ucHJvdG90eXBlLmVkaXRpbmdTZWxlY3RvckNvbW1pdHRlZC5zdWNjZXNzQ2FsbGJh
Y2spOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydGllc1NlY3Rpb24ucHJvdG90
eXBlLmVkaXRpbmdTZWxlY3RvckNvbW1pdHRlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQmxh
bmtTdHlsZVByb3BlcnRpZXNTZWN0aW9uLnByb3RvdHlwZS5lZGl0aW5nU2VsZWN0b3JDb21taXR0
ZWQuc3VjY2Vzc0NhbGxiYWNrKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5CbGFua1N0eWxlUHJv
cGVydGllc1NlY3Rpb24ucHJvdG90eXBlLmVkaXRpbmdTZWxlY3RvckNvbW1pdHRlZCk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0eVRyZWVFbGVtZW50LnByb3RvdHlwZS4pOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydHlUcmVlRWxlbWVudC5wcm90b3R5cGUp
OgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWw6CisgICAgICAg
ICogaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanM6CisgICAgICAgIChXZWJJbnNwZWN0
b3IubG9hZGVkKToKKwogMjAxMC0wNi0wNCAgTm8nYW0gUm9zZW50aGFsICA8bm9hbS5yb3NlbnRo
YWxAbm9raWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEtlbm5ldGggUm9oZGUgQ2hyaXN0
aWFuc2VuLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NTU1N0eWxl
TW9kZWwuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ1NTU3R5bGVNb2RlbC5qcwpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzFhZDJmCi0tLSAvZGV2L251bGwK
KysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NTU1N0eWxlTW9kZWwuanMKQEAgLTAs
MCArMSwxNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1l
dDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCitXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNb2RlbCA9IGZ1bmN0aW9uKCkKK3sKK30K
KworV2ViSW5zcGVjdG9yLkNTU1N0eWxlTW9kZWwucHJvdG90eXBlID0geworICAgIHN0eWxlczog
ZnVuY3Rpb24obm9kZUlkLCBhdXRoT25seSwgdXNlckNhbGxiYWNrKQorICAgIHsKKyAgICAgICAg
dmFyIHNlbGYgPSB0aGlzOworICAgICAgICBmdW5jdGlvbiBjYWxsYmFjayhzdHlsZXMpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmICh1c2VyQ2FsbGJhY2spCisgICAgICAgICAgICAgICAgdXNl
ckNhbGxiYWNrKHN0eWxlcyk7CisgICAgICAgIH0KKworICAgICAgICBJbnNwZWN0b3JCYWNrZW5k
LmdldFN0eWxlcyhXZWJJbnNwZWN0b3IuQ2FsbGJhY2sud3JhcChjYWxsYmFjayksIG5vZGVJZCwg
YXV0aE9ubHkpOworICAgIH0sCisKKyAgICBjb21wdXRlZFN0eWxlOiBmdW5jdGlvbihub2RlSWQs
IHVzZXJDYWxsYmFjaykKKyAgICB7CisgICAgICAgIGZ1bmN0aW9uIGNhbGxiYWNrKHN0eWxlKQor
ICAgICAgICB7CisgICAgICAgICAgICBpZiAodXNlckNhbGxiYWNrKQorICAgICAgICAgICAgICAg
IHVzZXJDYWxsYmFjayhzdHlsZSk7CisgICAgICAgIH0KKworICAgICAgICBJbnNwZWN0b3JCYWNr
ZW5kLmdldENvbXB1dGVkU3R5bGUoV2ViSW5zcGVjdG9yLkNhbGxiYWNrLndyYXAoY2FsbGJhY2sp
LCBub2RlSWQpOworICAgIH0sCisKKyAgICBzZXRSdWxlU2VsZWN0b3I6IGZ1bmN0aW9uKHJ1bGVJ
ZCwgbmV3Q29udGVudCwgbm9kZUlkLCBzdWNjZXNzQ2FsbGJhY2ssIGZhaWx1cmVDYWxsYmFjaykK
KyAgICB7CisgICAgICAgIGZ1bmN0aW9uIGNhbGxiYWNrKG5ld1J1bGVQYXlsb2FkLCBkb2VzQWZm
ZWN0U2VsZWN0ZWROb2RlKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIW5ld1J1bGVQYXls
b2FkKSB7CisgICAgICAgICAgICAgICAgaWYgKGZhaWx1cmVDYWxsYmFjaykKKyAgICAgICAgICAg
ICAgICAgICAgZmFpbHVyZUNhbGxiYWNrKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIGlmIChzdWNjZXNzQ2FsbGJhY2spCisgICAgICAgICAgICAgICAgICAgIHN1Y2Nl
c3NDYWxsYmFjayhXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvbi5wYXJzZVJ1bGUobmV3
UnVsZVBheWxvYWQpLCBkb2VzQWZmZWN0U2VsZWN0ZWROb2RlKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIEluc3BlY3RvckJhY2tlbmQuc2V0UnVsZVNlbGVjdG9yKFdlYklu
c3BlY3Rvci5DYWxsYmFjay53cmFwKGNhbGxiYWNrKSwgcnVsZUlkLCBuZXdDb250ZW50LCBub2Rl
SWQpOworICAgIH0sCisKKyAgICBhZGRSdWxlOiBmdW5jdGlvbihub2RlSWQsIG5ld0NvbnRlbnQs
IHN1Y2Nlc3NDYWxsYmFjaywgZmFpbHVyZUNhbGxiYWNrKQorICAgIHsKKyAgICAgICAgZnVuY3Rp
b24gY2FsbGJhY2socnVsZSwgZG9lc0FmZmVjdFNlbGVjdGVkTm9kZSkKKyAgICAgICAgeworICAg
ICAgICAgICAgaWYgKCFydWxlKSB7CisgICAgICAgICAgICAgICAgLy8gSW52YWxpZCBzeW50YXgg
Zm9yIGEgc2VsZWN0b3IKKyAgICAgICAgICAgICAgICBpZiAoZmFpbHVyZUNhbGxiYWNrKQorICAg
ICAgICAgICAgICAgICAgICBmYWlsdXJlQ2FsbGJhY2soKTsKKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgaWYgKHN1Y2Nlc3NDYWxsYmFjaykgeworICAgICAgICAgICAgICAg
ICAgICB2YXIgc3R5bGVSdWxlID0gV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24ucGFy
c2VSdWxlKHJ1bGUpOworICAgICAgICAgICAgICAgICAgICBzdHlsZVJ1bGUucnVsZSA9IHJ1bGU7
CisgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3NDYWxsYmFjayhzdHlsZVJ1bGUsIGRvZXNBZmZl
Y3RTZWxlY3RlZE5vZGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIEluc3BlY3RvckJhY2tlbmQuYWRkUnVsZShXZWJJbnNwZWN0b3IuQ2Fs
bGJhY2sud3JhcChjYWxsYmFjayksIG5ld0NvbnRlbnQsIG5vZGVJZCk7CisgICAgfSwKKworICAg
IHRvZ2dsZVN0eWxlRW5hYmxlbWVudDogZnVuY3Rpb24oc3R5bGVJZCwgcHJvcGVydHlOYW1lLCBk
aXNhYmxlZCwgdXNlckNhbGxiYWNrKQorICAgIHsKKyAgICAgICAgdmFyIHNlbGYgPSB0aGlzOwor
ICAgICAgICBmdW5jdGlvbiBjYWxsYmFjayhuZXdQYXlsb2FkKQorICAgICAgICB7CisgICAgICAg
ICAgICBpZiAoIW5ld1BheWxvYWQpIHsKKyAgICAgICAgICAgICAgICBpZiAodXNlckNhbGxiYWNr
KQorICAgICAgICAgICAgICAgICAgICB1c2VyQ2FsbGJhY2sobnVsbCk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodXNlckNhbGxiYWNr
KSB7CisgICAgICAgICAgICAgICAgdmFyIG5ld1N0eWxlID0gV2ViSW5zcGVjdG9yLkNTU1N0eWxl
RGVjbGFyYXRpb24ucGFyc2VTdHlsZShuZXdQYXlsb2FkKTsKKyAgICAgICAgICAgICAgICB1c2Vy
Q2FsbGJhY2sobmV3U3R5bGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAg
SW5zcGVjdG9yQmFja2VuZC50b2dnbGVTdHlsZUVuYWJsZWQoV2ViSW5zcGVjdG9yLkNhbGxiYWNr
LndyYXAoY2FsbGJhY2spLCBzdHlsZUlkLCBwcm9wZXJ0eU5hbWUsIGRpc2FibGVkKTsKKyAgICB9
LAorCisgICAgc2V0U3R5bGVUZXh0OiBmdW5jdGlvbihzdHlsZUlkLCBjc3NUZXh0LCB1c2VyQ2Fs
bGJhY2spCisgICAgeworICAgICAgICBmdW5jdGlvbiBjYWxsYmFjayhzdWNjZXNzKQorICAgICAg
ICB7CisgICAgICAgICAgICBpZiAodXNlckNhbGxiYWNrKQorICAgICAgICAgICAgICAgIHVzZXJD
YWxsYmFjayhzdWNjZXNzKTsKKyAgICAgICAgfQorICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLnNl
dFN0eWxlVGV4dChXZWJJbnNwZWN0b3IuQ2FsbGJhY2sud3JhcChjYWxsYmFjayksIHN0eWxlSWQs
IGNzc1RleHQpOworICAgIH0sCisKKyAgICBhcHBseVN0eWxlVGV4dDogZnVuY3Rpb24oc3R5bGVJ
ZCwgc3R5bGVUZXh0LCBwcm9wZXJ0eU5hbWUsIHN1Y2Nlc3NDYWxsYmFjaywgZmFpbHVyZUNhbGxi
YWNrKQorICAgIHsKKyAgICAgICAgdmFyIHNlbGYgPSB0aGlzOworICAgICAgICBmdW5jdGlvbiBj
YWxsYmFjayhzdWNjZXNzLCBuZXdQYXlsb2FkLCBjaGFuZ2VkUHJvcGVydGllcykKKyAgICAgICAg
eworICAgICAgICAgICAgaWYgKCFzdWNjZXNzKQorICAgICAgICAgICAgICAgIGZhaWx1cmVDYWxs
YmFjaygpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKHN1Y2Nlc3ND
YWxsYmFjaykgeworICAgICAgICAgICAgICAgICAgICB2YXIgbmV3U3R5bGUgPSBuZXdQYXlsb2Fk
ID8gV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24ucGFyc2VTdHlsZShuZXdQYXlsb2Fk
KSA6IG51bGw7CisgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3NDYWxsYmFjayhuZXdTdHlsZSwg
Y2hhbmdlZFByb3BlcnRpZXMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIEluc3BlY3RvckJhY2tlbmQuYXBwbHlTdHlsZVRleHQoV2ViSW5z
cGVjdG9yLkNhbGxiYWNrLndyYXAoY2FsbGJhY2spLCBzdHlsZUlkLCBzdHlsZVRleHQsIHByb3Bl
cnR5TmFtZSk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL1N0eWxlc1NpZGViYXJQYW5lLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1N0
eWxlc1NpZGViYXJQYW5lLmpzCmluZGV4IDM1ZDI1ZDQuLjc0NjVkODAgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TdHlsZXNTaWRlYmFyUGFuZS5qcworKysgYi9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU3R5bGVzU2lkZWJhclBhbmUuanMKQEAgLTEzMywyMiAr
MTMzLDIyIEBAIFdlYkluc3BlY3Rvci5TdHlsZXNTaWRlYmFyUGFuZS5wcm90b3R5cGUgPSB7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBmdW5jdGlvbiBnZXRTdHls
ZXNDYWxsYmFjayhzdHlsZXMpCisgICAgICAgIGZ1bmN0aW9uIHN0eWxlc0NhbGxiYWNrKHN0eWxl
cykKICAgICAgICAgewogICAgICAgICAgICAgaWYgKHN0eWxlcykKICAgICAgICAgICAgICAgICB0
aGlzLl9yZWJ1aWxkVXBkYXRlKG5vZGUsIHN0eWxlcyk7CiAgICAgICAgIH0KIAotICAgICAgICBm
dW5jdGlvbiBnZXRDb21wdXRlZFN0eWxlQ2FsbGJhY2soY29tcHV0ZWRTdHlsZSkKKyAgICAgICAg
ZnVuY3Rpb24gY29tcHV0ZWRTdHlsZUNhbGxiYWNrKGNvbXB1dGVkU3R5bGUpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIGlmIChjb21wdXRlZFN0eWxlKQogICAgICAgICAgICAgICAgIHRoaXMuX3Jl
ZnJlc2hVcGRhdGUobm9kZSwgY29tcHV0ZWRTdHlsZSwgZWRpdGVkU2VjdGlvbik7CiAgICAgICAg
IH07CiAKICAgICAgICAgaWYgKHJlZnJlc2gpCi0gICAgICAgICAgICBJbnNwZWN0b3JCYWNrZW5k
LmdldENvbXB1dGVkU3R5bGUoV2ViSW5zcGVjdG9yLkNhbGxiYWNrLndyYXAoZ2V0Q29tcHV0ZWRT
dHlsZUNhbGxiYWNrLmJpbmQodGhpcykpLCBub2RlLmlkKTsKKyAgICAgICAgICAgIFdlYkluc3Bl
Y3Rvci5zdHlsZU1vZGVsLmNvbXB1dGVkU3R5bGUobm9kZS5pZCwgY29tcHV0ZWRTdHlsZUNhbGxi
YWNrLmJpbmQodGhpcykpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBJbnNwZWN0b3JCYWNr
ZW5kLmdldFN0eWxlcyhXZWJJbnNwZWN0b3IuQ2FsbGJhY2sud3JhcChnZXRTdHlsZXNDYWxsYmFj
ay5iaW5kKHRoaXMpKSwgbm9kZS5pZCwgIVdlYkluc3BlY3Rvci5zZXR0aW5ncy5zaG93VXNlckFn
ZW50U3R5bGVzKTsKKyAgICAgICAgICAgIFdlYkluc3BlY3Rvci5zdHlsZU1vZGVsLnN0eWxlcyhu
b2RlLmlkLCAhV2ViSW5zcGVjdG9yLnNldHRpbmdzLnNob3dVc2VyQWdlbnRTdHlsZXMsIHN0eWxl
c0NhbGxiYWNrLmJpbmQodGhpcykpOwogICAgIH0sCiAKICAgICBfcmVmcmVzaFVwZGF0ZTogZnVu
Y3Rpb24obm9kZSwgY29tcHV0ZWRTdHlsZSwgZWRpdGVkU2VjdGlvbikKQEAgLTQ2Niw3ICs0NjYs
NyBAQCBXZWJJbnNwZWN0b3IuU3R5bGVzU2lkZWJhclBhbmUucHJvdG90eXBlID0gewogICAgIHsK
ICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgKytpKSB7CiAg
ICAgICAgICAgICB2YXIgcHJvcGVydHkgPSBwcm9wZXJ0aWVzW2ldOwotICAgICAgICAgICAgLy8g
RG9lcyB0aGlzIHN0eWxlIGNvbnRhaW4gbm9uLW92ZXJyaWRlbiBpbmhlcml0ZWQgcHJvcGVydHk/
CisgICAgICAgICAgICAvLyBEb2VzIHRoaXMgc3R5bGUgY29udGFpbiBub24tb3ZlcnJpZGRlbiBp
bmhlcml0ZWQgcHJvcGVydHk/CiAgICAgICAgICAgICBpZiAocHJvcGVydHkubmFtZSBpbiBXZWJJ
bnNwZWN0b3IuU3R5bGVzU2lkZWJhclBhbmUuSW5oZXJpdGVkUHJvcGVydGllcykKICAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAtNjAwLDcgKzYwMCw3IEBAIFdlYklu
c3BlY3Rvci5Db21wdXRlZFN0eWxlU2lkZWJhclBhbmUgPSBmdW5jdGlvbigpCiAKICAgICBzaG93
SW5oZXJpdGVkQ2hlY2tib3guYWRkRXZlbnRMaXN0ZW5lcihzaG93SW5oZXJpdGVkVG9nZ2xlRnVu
Y3Rpb24uYmluZCh0aGlzKSk7CiB9Ci0gCisKIFdlYkluc3BlY3Rvci5Db21wdXRlZFN0eWxlU2lk
ZWJhclBhbmUucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5TaWRlYmFyUGFuZS5w
cm90b3R5cGU7CiAKIFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnRpZXNTZWN0aW9uID0gZnVuY3Rp
b24oc3R5bGVSdWxlLCBzdWJ0aXRsZSwgY29tcHV0ZWRTdHlsZSwgdXNlZFByb3BlcnRpZXMsIGVk
aXRhYmxlLCBpc0luaGVyaXRlZCwgaXNGaXJzdFNlY3Rpb24pCkBAIC04ODIsMTQgKzg4Miw5IEBA
IFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnRpZXNTZWN0aW9uLnByb3RvdHlwZSA9IHsKICAgICAg
ICAgICAgIHJldHVybiBtb3ZlVG9OZXh0SWZOZWVkZWQuY2FsbCh0aGlzKTsKIAogICAgICAgICB2
YXIgc2VsZiA9IHRoaXM7Ci0gICAgICAgIGZ1bmN0aW9uIGNhbGxiYWNrKG5ld1J1bGVQYXlsb2Fk
LCBkb2VzQWZmZWN0U2VsZWN0ZWROb2RlKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIW5l
d1J1bGVQYXlsb2FkKSB7Ci0gICAgICAgICAgICAgICAgLy8gSW52YWxpZCBTeW50YXggZm9yIGEg
U2VsZWN0b3IKLSAgICAgICAgICAgICAgICBtb3ZlVG9OZXh0SWZOZWVkZWQuY2FsbChzZWxmKTsK
LSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9CiAKKyAgICAgICAgZnVuY3Rp
b24gc3VjY2Vzc0NhbGxiYWNrKG5ld1J1bGUsIGRvZXNBZmZlY3RTZWxlY3RlZE5vZGUpCisgICAg
ICAgIHsKICAgICAgICAgICAgIGlmICghZG9lc0FmZmVjdFNlbGVjdGVkTm9kZSkgewogICAgICAg
ICAgICAgICAgIHNlbGYubm9BZmZlY3QgPSB0cnVlOwogICAgICAgICAgICAgICAgIHNlbGYuZWxl
bWVudC5hZGRTdHlsZUNsYXNzKCJuby1hZmZlY3QiKTsKQEAgLTg5OCw3ICs4OTMsNiBAQCBXZWJJ
bnNwZWN0b3IuU3R5bGVQcm9wZXJ0aWVzU2VjdGlvbi5wcm90b3R5cGUgPSB7CiAgICAgICAgICAg
ICAgICAgc2VsZi5lbGVtZW50LnJlbW92ZVN0eWxlQ2xhc3MoIm5vLWFmZmVjdCIpOwogICAgICAg
ICAgICAgfQogCi0gICAgICAgICAgICB2YXIgbmV3UnVsZSA9IFdlYkluc3BlY3Rvci5DU1NTdHls
ZURlY2xhcmF0aW9uLnBhcnNlUnVsZShuZXdSdWxlUGF5bG9hZCk7CiAgICAgICAgICAgICBzZWxm
LnJ1bGUgPSBuZXdSdWxlOwogICAgICAgICAgICAgc2VsZi5zdHlsZVJ1bGUgPSB7IHNlY3Rpb246
IHNlbGYsIHN0eWxlOiBuZXdSdWxlLnN0eWxlLCBzZWxlY3RvclRleHQ6IG5ld1J1bGUuc2VsZWN0
b3JUZXh0LCBwYXJlbnRTdHlsZVNoZWV0OiBuZXdSdWxlLnBhcmVudFN0eWxlU2hlZXQsIHJ1bGU6
IG5ld1J1bGUgfTsKIApAQCAtOTEyLDcgKzkwNiw3IEBAIFdlYkluc3BlY3Rvci5TdHlsZVByb3Bl
cnRpZXNTZWN0aW9uLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIG1vdmVUb05leHRJZk5lZWRl
ZC5jYWxsKHNlbGYpOwogICAgICAgICB9CiAKLSAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5zZXRS
dWxlU2VsZWN0b3IoV2ViSW5zcGVjdG9yLkNhbGxiYWNrLndyYXAoY2FsbGJhY2spLCB0aGlzLnJ1
bGUuaWQsIG5ld0NvbnRlbnQsIHRoaXMucGFuZS5ub2RlLmlkKTsKKyAgICAgICAgV2ViSW5zcGVj
dG9yLnN0eWxlTW9kZWwuc2V0UnVsZVNlbGVjdG9yKHRoaXMucnVsZS5pZCwgbmV3Q29udGVudCwg
dGhpcy5wYW5lLm5vZGUuaWQsIHN1Y2Nlc3NDYWxsYmFjaywgbW92ZVRvTmV4dElmTmVlZGVkLmJp
bmQodGhpcykpOwogICAgIH0sCiAKICAgICBlZGl0aW5nU2VsZWN0b3JDYW5jZWxsZWQ6IGZ1bmN0
aW9uKCkKQEAgLTkzOSwxNyArOTMzLDggQEAgV2ViSW5zcGVjdG9yLkJsYW5rU3R5bGVQcm9wZXJ0
aWVzU2VjdGlvbi5wcm90b3R5cGUgPSB7CiAgICAgZWRpdGluZ1NlbGVjdG9yQ29tbWl0dGVkOiBm
dW5jdGlvbihlbGVtZW50LCBuZXdDb250ZW50LCBvbGRDb250ZW50LCBjb250ZXh0KQogICAgIHsK
ICAgICAgICAgdmFyIHNlbGYgPSB0aGlzOwotICAgICAgICBmdW5jdGlvbiBjYWxsYmFjayhydWxl
LCBkb2VzU2VsZWN0b3JBZmZlY3RTZWxlY3RlZE5vZGUpCisgICAgICAgIGZ1bmN0aW9uIHN1Y2Nl
c3NDYWxsYmFjayhzdHlsZVJ1bGUsIGRvZXNTZWxlY3RvckFmZmVjdFNlbGVjdGVkTm9kZSkKICAg
ICAgICAgewotICAgICAgICAgICAgaWYgKCFydWxlKSB7Ci0gICAgICAgICAgICAgICAgLy8gSW52
YWxpZCBTeW50YXggZm9yIGEgU2VsZWN0b3IKLSAgICAgICAgICAgICAgICBzZWxmLmVkaXRpbmdT
ZWxlY3RvckNhbmNlbGxlZCgpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgdmFyIHN0eWxlUnVsZSA9IFdlYkluc3BlY3Rvci5DU1NTdHlsZURl
Y2xhcmF0aW9uLnBhcnNlUnVsZShydWxlKTsKLSAgICAgICAgICAgIHN0eWxlUnVsZS5ydWxlID0g
cnVsZTsKLQogICAgICAgICAgICAgc2VsZi5tYWtlTm9ybWFsKHN0eWxlUnVsZSk7CiAKICAgICAg
ICAgICAgIGlmICghZG9lc1NlbGVjdG9yQWZmZWN0U2VsZWN0ZWROb2RlKSB7CkBAIC05NjMsNyAr
OTQ4LDcgQEAgV2ViSW5zcGVjdG9yLkJsYW5rU3R5bGVQcm9wZXJ0aWVzU2VjdGlvbi5wcm90b3R5
cGUgPSB7CiAgICAgICAgICAgICBzZWxmLmFkZE5ld0JsYW5rUHJvcGVydHkoKS5zdGFydEVkaXRp
bmcoKTsKICAgICAgICAgfQogCi0gICAgICAgIEluc3BlY3RvckJhY2tlbmQuYWRkUnVsZShXZWJJ
bnNwZWN0b3IuQ2FsbGJhY2sud3JhcChjYWxsYmFjayksIG5ld0NvbnRlbnQsIHRoaXMucGFuZS5u
b2RlLmlkKTsKKyAgICAgICAgV2ViSW5zcGVjdG9yLnN0eWxlTW9kZWwuYWRkUnVsZSh0aGlzLnBh
bmUubm9kZS5pZCwgbmV3Q29udGVudCwgY2FsbGJhY2ssIHRoaXMuZWRpdGluZ1NlbGVjdG9yQ2Fu
Y2VsbGVkLmJpbmQodGhpcykpOwogICAgIH0sCiAKICAgICBlZGl0aW5nU2VsZWN0b3JDYW5jZWxs
ZWQ6IGZ1bmN0aW9uKCkKQEAgLTEyMjAsNiArMTIwNSw5IEBAIFdlYkluc3BlY3Rvci5TdHlsZVBy
b3BlcnR5VHJlZUVsZW1lbnQucHJvdG90eXBlID0gewogCiAgICAgICAgIHRoaXMubGlzdEl0ZW1F
bGVtZW50LnJlbW92ZUNoaWxkcmVuKCk7CiAKKyAgICAgICAgaWYgKCF0aGlzLnRyZWVPdXRsaW5l
KQorICAgICAgICAgICAgcmV0dXJuOworCiAgICAgICAgIC8vIEFwcGVuZCB0aGUgY2hlY2tib3gg
Zm9yIHJvb3QgZWxlbWVudHMgb2YgYW4gZWRpdGFibGUgc2VjdGlvbi4KICAgICAgICAgaWYgKHRo
aXMudHJlZU91dGxpbmUuc2VjdGlvbiAmJiB0aGlzLnRyZWVPdXRsaW5lLnNlY3Rpb24uZWRpdGFi
bGUgJiYgdGhpcy5wYXJlbnQucm9vdCkKICAgICAgICAgICAgIHRoaXMubGlzdEl0ZW1FbGVtZW50
LmFwcGVuZENoaWxkKGVuYWJsZWRDaGVja2JveEVsZW1lbnQpOwpAQCAtMTI1NCwxMiArMTI0Miwx
MiBAQCBXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0eVRyZWVFbGVtZW50LnByb3RvdHlwZSA9IHsK
ICAgICAgICAgdmFyIGRpc2FibGVkID0gIWV2ZW50LnRhcmdldC5jaGVja2VkOwogCiAgICAgICAg
IHZhciBzZWxmID0gdGhpczsKLSAgICAgICAgZnVuY3Rpb24gY2FsbGJhY2sobmV3UGF5bG9hZCkK
KyAgICAgICAgZnVuY3Rpb24gY2FsbGJhY2sobmV3U3R5bGUpCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIGlmICghbmV3UGF5bG9hZCkKKyAgICAgICAgICAgIGlmICghbmV3U3R5bGUpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgICAgICBzZWxmLnN0eWxlID0gV2ViSW5zcGVjdG9y
LkNTU1N0eWxlRGVjbGFyYXRpb24ucGFyc2VTdHlsZShuZXdQYXlsb2FkKTsKKyAgICAgICAgICAg
IHNlbGYuc3R5bGUgPSBuZXdTdHlsZTsKICAgICAgICAgICAgIHNlbGYuX3N0eWxlUnVsZS5zdHls
ZSA9IHNlbGYuc3R5bGU7CiAKICAgICAgICAgICAgIC8vIFNldCB0aGUgZGlzYWJsZWQgcHJvcGVy
dHkgaGVyZSwgc2luY2UgdGhlIGNvZGUgYWJvdmUgcmVwbGllcyBvbiBpdCBub3QgY2hhbmdpbmcK
QEAgLTEyNzIsNyArMTI2MCw3IEBAIFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnR5VHJlZUVsZW1l
bnQucHJvdG90eXBlID0gewogICAgICAgICAgICAgc2VsZi51cGRhdGVBbGwodHJ1ZSk7CiAgICAg
ICAgIH0KIAotICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLnRvZ2dsZVN0eWxlRW5hYmxlZChXZWJJ
bnNwZWN0b3IuQ2FsbGJhY2sud3JhcChjYWxsYmFjayksIHRoaXMuc3R5bGUuaWQsIHRoaXMubmFt
ZSwgZGlzYWJsZWQpOworICAgICAgICBXZWJJbnNwZWN0b3Iuc3R5bGVNb2RlbC50b2dnbGVTdHls
ZUVuYWJsZW1lbnQodGhpcy5zdHlsZS5pZCwgdGhpcy5uYW1lLCBkaXNhYmxlZCwgY2FsbGJhY2sp
OwogICAgIH0sCiAKICAgICB1cGRhdGVTdGF0ZTogZnVuY3Rpb24oKQpAQCAtMTQzNCw3ICsxNDIy
LDcgQEAgV2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydHlUcmVlRWxlbWVudC5wcm90b3R5cGUgPSB7
CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBSZXN0b3JlIHRoZSBvcmlnaW5hbCBD
U1MgdGV4dCBiZWZvcmUgYXBwbHlpbmcgdXNlciBjaGFuZ2VzLiBUaGlzIGlzIG5lZWRlZCB0byBw
cmV2ZW50CiAgICAgICAgICAgICAvLyBuZXcgcHJvcGVydGllcyBmcm9tIHN0aWNraW5nIGFyb3Vu
ZCBpZiB0aGUgdXNlciBhZGRzIG9uZSwgdGhlbiByZW1vdmVzIGl0LgotICAgICAgICAgICAgSW5z
cGVjdG9yQmFja2VuZC5zZXRTdHlsZVRleHQoV2ViSW5zcGVjdG9yLkNhbGxiYWNrLndyYXAobnVs
bCksIHRoaXMuc3R5bGUuaWQsIHRoaXMub3JpZ2luYWxDU1NUZXh0KTsKKyAgICAgICAgICAgIFdl
Ykluc3BlY3Rvci5zdHlsZU1vZGVsLnNldFN0eWxlVGV4dCh0aGlzLnN0eWxlLmlkLCB0aGlzLm9y
aWdpbmFsQ1NTVGV4dCk7CiAgICAgICAgIH0KIAogICAgICAgICB0aGlzLmFwcGx5U3R5bGVUZXh0
KHRoaXMubGlzdEl0ZW1FbGVtZW50LnRleHRDb250ZW50KTsKQEAgLTE0NTQsNyArMTQ0Miw3IEBA
IFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnR5VHJlZUVsZW1lbnQucHJvdG90eXBlID0gewogICAg
ICAgICBpZiAodGhpcy5fbmV3UHJvcGVydHkpCiAgICAgICAgICAgICB0aGlzLnRyZWVPdXRsaW5l
LnJlbW92ZUNoaWxkKHRoaXMpOwogICAgICAgICBlbHNlIGlmICh0aGlzLm9yaWdpbmFsQ1NTVGV4
dCkgewotICAgICAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5zZXRTdHlsZVRleHQoV2ViSW5zcGVj
dG9yLkNhbGxiYWNrLndyYXAobnVsbCksIHRoaXMuc3R5bGUuaWQsIHRoaXMub3JpZ2luYWxDU1NU
ZXh0KTsKKyAgICAgICAgICAgIFdlYkluc3BlY3Rvci5zdHlsZU1vZGVsLnNldFN0eWxlVGV4dCh0
aGlzLnN0eWxlLmlkLCB0aGlzLm9yaWdpbmFsQ1NTVGV4dCk7CiAKICAgICAgICAgICAgIGlmICh0
aGlzLnRyZWVPdXRsaW5lLnNlY3Rpb24gJiYgdGhpcy50cmVlT3V0bGluZS5zZWN0aW9uLnBhbmUp
CiAgICAgICAgICAgICAgICAgdGhpcy50cmVlT3V0bGluZS5zZWN0aW9uLnBhbmUuZGlzcGF0Y2hF
dmVudFRvTGlzdGVuZXJzKCJzdHlsZSBlZGl0ZWQiKTsKQEAgLTE1NDEsMjggKzE1MjksMjkgQEAg
V2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydHlUcmVlRWxlbWVudC5wcm90b3R5cGUgPSB7CiAgICAg
ICAgIH0KIAogICAgICAgICB2YXIgc2VsZiA9IHRoaXM7Ci0gICAgICAgIGZ1bmN0aW9uIGNhbGxi
YWNrKHN1Y2Nlc3MsIG5ld1BheWxvYWQsIGNoYW5nZWRQcm9wZXJ0aWVzKQorCisgICAgICAgIGZ1
bmN0aW9uIGZhaWx1cmVDYWxsYmFjaygpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmICghc3Vj
Y2VzcykgewotICAgICAgICAgICAgICAgIC8vIFRoZSB1c2VyIHR5cGVkIHNvbWV0aGluZywgYnV0
IGl0IGRpZG4ndCBwYXJzZS4gSnVzdCBhYm9ydCBhbmQgcmVzdG9yZQotICAgICAgICAgICAgICAg
IC8vIHRoZSBvcmlnaW5hbCB0aXRsZSBmb3IgdGhpcyBwcm9wZXJ0eS4gIElmIHRoaXMgd2FzIGEg
bmV3IGF0dHJpYnV0ZSBhbmQKLSAgICAgICAgICAgICAgICAvLyB3ZSBjb3VsZG4ndCBwYXJzZSwg
dGhlbiBqdXN0IHJlbW92ZSBpdC4KLSAgICAgICAgICAgICAgICBpZiAoc2VsZi5fbmV3UHJvcGVy
dHkpIHsKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5wYXJlbnQucmVtb3ZlQ2hpbGQoc2VsZik7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgaWYgKHVwZGF0ZUludGVyZmFjZSkKLSAgICAgICAgICAgICAgICAgICAgc2VsZi51
cGRhdGVUaXRsZSgpOworICAgICAgICAgICAgLy8gVGhlIHVzZXIgdHlwZWQgc29tZXRoaW5nLCBi
dXQgaXQgZGlkbid0IHBhcnNlLiBKdXN0IGFib3J0IGFuZCByZXN0b3JlCisgICAgICAgICAgICAv
LyB0aGUgb3JpZ2luYWwgdGl0bGUgZm9yIHRoaXMgcHJvcGVydHkuICBJZiB0aGlzIHdhcyBhIG5l
dyBhdHRyaWJ1dGUgYW5kCisgICAgICAgICAgICAvLyB3ZSBjb3VsZG4ndCBwYXJzZSwgdGhlbiBq
dXN0IHJlbW92ZSBpdC4KKyAgICAgICAgICAgIGlmIChzZWxmLl9uZXdQcm9wZXJ0eSkgeworICAg
ICAgICAgICAgICAgIHNlbGYucGFyZW50LnJlbW92ZUNoaWxkKHNlbGYpOwogICAgICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh1cGRhdGVJbnRlcmZh
Y2UpCisgICAgICAgICAgICAgICAgc2VsZi51cGRhdGVUaXRsZSgpOworICAgICAgICB9CiAKKyAg
ICAgICAgZnVuY3Rpb24gc3VjY2Vzc0NhbGxiYWNrKG5ld1N0eWxlLCBjaGFuZ2VkUHJvcGVydGll
cykKKyAgICAgICAgewogICAgICAgICAgICAgZWxlbWVudHNQYW5lbC5yZW1vdmVTdHlsZUNoYW5n
ZShzZWN0aW9uLmlkZW50aWZpZXIsIHNlbGYuc3R5bGUsIHNlbGYubmFtZSk7CiAKICAgICAgICAg
ICAgIGlmICghc3R5bGVUZXh0TGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgLy8gRG8gcmVtb3Zl
IG91cnNlbHZlcyBmcm9tIFVJIHdoZW4gdGhlIHByb3BlcnR5IHJlbW92YWwgaXMgY29uZmlybWVk
LgogICAgICAgICAgICAgICAgIHNlbGYucGFyZW50LnJlbW92ZUNoaWxkKHNlbGYpOwogICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBzZWxmLnN0eWxlID0gV2ViSW5zcGVjdG9y
LkNTU1N0eWxlRGVjbGFyYXRpb24ucGFyc2VTdHlsZShuZXdQYXlsb2FkKTsKKyAgICAgICAgICAg
ICAgICBzZWxmLnN0eWxlID0gbmV3U3R5bGU7CiAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBjaGFuZ2VkUHJvcGVydGllcy5sZW5ndGg7ICsraSkKICAgICAgICAgICAgICAgICAg
ICAgZWxlbWVudHNQYW5lbC5hZGRTdHlsZUNoYW5nZShzZWN0aW9uLmlkZW50aWZpZXIsIHNlbGYu
c3R5bGUsIGNoYW5nZWRQcm9wZXJ0aWVzW2ldKTsKICAgICAgICAgICAgICAgICBzZWxmLl9zdHls
ZVJ1bGUuc3R5bGUgPSBzZWxmLnN0eWxlOwpAQCAtMTU3NCw3ICsxNTYzLDggQEAgV2ViSW5zcGVj
dG9yLlN0eWxlUHJvcGVydHlUcmVlRWxlbWVudC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICBp
ZiAodXBkYXRlSW50ZXJmYWNlKQogICAgICAgICAgICAgICAgIHNlbGYudXBkYXRlQWxsKHRydWUp
OwogICAgICAgICB9Ci0gICAgICAgIEluc3BlY3RvckJhY2tlbmQuYXBwbHlTdHlsZVRleHQoV2Vi
SW5zcGVjdG9yLkNhbGxiYWNrLndyYXAoY2FsbGJhY2spLCB0aGlzLnN0eWxlLmlkLCBzdHlsZVRl
eHQsIHRoaXMubmFtZSk7CisKKyAgICAgICAgV2ViSW5zcGVjdG9yLnN0eWxlTW9kZWwuYXBwbHlT
dHlsZVRleHQodGhpcy5zdHlsZS5pZCwgc3R5bGVUZXh0LCB0aGlzLm5hbWUsIHN1Y2Nlc3NDYWxs
YmFjaywgZmFpbHVyZUNhbGxiYWNrKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuaHRtbCBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9pbnNwZWN0b3IuaHRtbAppbmRleCA4MmE0YWQ5Li40YzUxNjM0IDEwMDY0NAotLS0g
YS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWwKKysrIGIvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5odG1sCkBAIC00MSw2ICs0MSw3IEBAIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iSW5zcGVjdG9y
RnJvbnRlbmRIb3N0U3R1Yi5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2ph
dmFzY3JpcHQiIHNyYz0iT2JqZWN0LmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRl
eHQvamF2YXNjcmlwdCIgc3JjPSJTZXR0aW5ncy5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCB0
eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iQ1NTU3R5bGVNb2RlbC5qcyI+PC9zY3JpcHQ+CiAg
ICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iQ2hlY2tib3guanMiPjwvc2Ny
aXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IkNvbnRleHRNZW51
LmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJL
ZXlib2FyZFNob3J0Y3V0LmpzIj48L3NjcmlwdD4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
aW5zcGVjdG9yLmpzCmluZGV4IDZiNWRiZDEuLjg3ZTQwMzYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL2luc3BlY3Rvci5qcwpAQCAtNDY2LDYgKzQ2Niw3IEBAIFdlYkluc3BlY3Rvci5s
b2FkZWQgPSBmdW5jdGlvbigpCiAgICAgfTsKIAogICAgIHRoaXMuYnJlYWtwb2ludE1hbmFnZXIg
PSBuZXcgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyKCk7CisgICAgdGhpcy5zdHlsZU1v
ZGVsID0gbmV3IFdlYkluc3BlY3Rvci5DU1NTdHlsZU1vZGVsKCk7CiAKICAgICB0aGlzLnBhbmVs
cyA9IHt9OwogICAgIHRoaXMuX2NyZWF0ZVBhbmVscygpOwo=
</data>
<flag name="review"
          id="42548"
          type_id="1"
          status="-"
          setter="pfeldman"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57870</attachid>
            <date>2010-06-04 07:02:14 -0700</date>
            <delta_ts>2010-06-04 08:13:56 -0700</delta_ts>
            <desc>[PATCH] pfeldman&apos;s comments addressed</desc>
            <filename>cssmodel.patch</filename>
            <type>text/plain</type>
            <size>17680</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZjE2ZjI2NC4uN2Y5NTQxNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNiBAQAorMjAxMC0wNi0wNCAgQWxleGFuZGVyIFBh
dmxvdiAgPGFwYXZsb3ZAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IEVsaW1pbmF0ZSBkaXJlY3QgZGVw
ZW5kZW5jeSBvZiBTdHlsZXNTaWRlYmFyUGFuZSBvbiBJbnNwZWN0b3JCYWNrZW5kCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDA2OQorCisgICAgICAg
IE5vIG5ldyB0ZXN0cyBhcmUgbmVlZGVkLCBhcyB0aGlzIGlzIGEgcmVmYWN0b3JpbmcuCisKKyAg
ICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0NTU1N0eWxlTW9kZWwuanM6IEFkZGVkLgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlTW9kZWwpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LkNTU1N0eWxlTW9kZWwucHJvdG90eXBlLmdldFN0eWxlc0FzeW5jKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5DU1NTdHlsZU1vZGVsLnByb3RvdHlwZS5nZXRDb21wdXRlZFN0eWxlQXN5bmMpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlTW9kZWwucHJvdG90eXBlLnNldFJ1bGVTZWxl
Y3Rvcik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNb2RlbC5wcm90b3R5cGUuYWRk
UnVsZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNb2RlbC5wcm90b3R5cGUudG9n
Z2xlU3R5bGVFbmFibGVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZU1vZGVsLnBy
b3RvdHlwZS5zZXRDU1NUZXh0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZU1vZGVs
LnByb3RvdHlwZS5hcHBseVN0eWxlVGV4dCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVu
ZC9TdHlsZXNTaWRlYmFyUGFuZS5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TdHlsZXNTaWRl
YmFyUGFuZS5wcm90b3R5cGUudXBkYXRlLnN0eWxlc0NhbGxiYWNrKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5TdHlsZXNTaWRlYmFyUGFuZS5wcm90b3R5cGUudXBkYXRlLmNvbXB1dGVkU3R5bGVD
YWxsYmFjayk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU3R5bGVzU2lkZWJhclBhbmUucHJvdG90
eXBlLnVwZGF0ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU3R5bGVzU2lkZWJhclBhbmUucHJv
dG90eXBlLl9hcnJheUNvbnRhaW5zSW5oZXJpdGVkUHJvcGVydHkpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlN0eWxlUHJvcGVydGllc1NlY3Rpb24ucHJvdG90eXBlLmVkaXRpbmdTZWxlY3RvckNv
bW1pdHRlZC5zdWNjZXNzQ2FsbGJhY2spOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlN0eWxlUHJv
cGVydGllc1NlY3Rpb24ucHJvdG90eXBlLmVkaXRpbmdTZWxlY3RvckNvbW1pdHRlZCk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuQmxhbmtTdHlsZVByb3BlcnRpZXNTZWN0aW9uLnByb3RvdHlwZS5l
ZGl0aW5nU2VsZWN0b3JDb21taXR0ZWQuc3VjY2Vzc0NhbGxiYWNrKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5CbGFua1N0eWxlUHJvcGVydGllc1NlY3Rpb24ucHJvdG90eXBlLmVkaXRpbmdTZWxl
Y3RvckNvbW1pdHRlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0eVRyZWVF
bGVtZW50LnByb3RvdHlwZS4pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydHlU
cmVlRWxlbWVudC5wcm90b3R5cGUpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvaW5z
cGVjdG9yLmh0bWw6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanM6
CisgICAgICAgIChXZWJJbnNwZWN0b3IubG9hZGVkKToKKwogMjAxMC0wNi0wNCAgTm8nYW0gUm9z
ZW50aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL0NTU1N0eWxlTW9kZWwuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvQ1NTU3R5bGVNb2RlbC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42
NmEyMGNlCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NT
U1N0eWxlTW9kZWwuanMKQEAgLTAsMCArMSwxMTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwor
ICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNb2Rl
bCA9IGZ1bmN0aW9uKCkKK3sKK30KKworV2ViSW5zcGVjdG9yLkNTU1N0eWxlTW9kZWwucHJvdG90
eXBlID0geworICAgIGdldFN0eWxlc0FzeW5jOiBmdW5jdGlvbihub2RlSWQsIGF1dGhPbmx5LCB1
c2VyQ2FsbGJhY2spCisgICAgeworICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLmdldFN0eWxlcyhX
ZWJJbnNwZWN0b3IuQ2FsbGJhY2sud3JhcCh1c2VyQ2FsbGJhY2spLCBub2RlSWQsIGF1dGhPbmx5
KTsKKyAgICB9LAorCisgICAgZ2V0Q29tcHV0ZWRTdHlsZUFzeW5jOiBmdW5jdGlvbihub2RlSWQs
IHVzZXJDYWxsYmFjaykKKyAgICB7CisgICAgICAgIEluc3BlY3RvckJhY2tlbmQuZ2V0Q29tcHV0
ZWRTdHlsZShXZWJJbnNwZWN0b3IuQ2FsbGJhY2sud3JhcCh1c2VyQ2FsbGJhY2spLCBub2RlSWQp
OworICAgIH0sCisKKyAgICBzZXRSdWxlU2VsZWN0b3I6IGZ1bmN0aW9uKHJ1bGVJZCwgbmV3Q29u
dGVudCwgbm9kZUlkLCBzdWNjZXNzQ2FsbGJhY2ssIGZhaWx1cmVDYWxsYmFjaykKKyAgICB7Cisg
ICAgICAgIGZ1bmN0aW9uIGNhbGxiYWNrKG5ld1J1bGVQYXlsb2FkLCBkb2VzQWZmZWN0U2VsZWN0
ZWROb2RlKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIW5ld1J1bGVQYXlsb2FkKQorICAg
ICAgICAgICAgICAgIGZhaWx1cmVDYWxsYmFjaygpOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIHN1Y2Nlc3NDYWxsYmFjayhXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlv
bi5wYXJzZVJ1bGUobmV3UnVsZVBheWxvYWQpLCBkb2VzQWZmZWN0U2VsZWN0ZWROb2RlKTsKKyAg
ICAgICAgfQorCisgICAgICAgIEluc3BlY3RvckJhY2tlbmQuc2V0UnVsZVNlbGVjdG9yKFdlYklu
c3BlY3Rvci5DYWxsYmFjay53cmFwKGNhbGxiYWNrKSwgcnVsZUlkLCBuZXdDb250ZW50LCBub2Rl
SWQpOworICAgIH0sCisKKyAgICBhZGRSdWxlOiBmdW5jdGlvbihub2RlSWQsIG5ld0NvbnRlbnQs
IHN1Y2Nlc3NDYWxsYmFjaywgZmFpbHVyZUNhbGxiYWNrKQorICAgIHsKKyAgICAgICAgZnVuY3Rp
b24gY2FsbGJhY2socnVsZSwgZG9lc0FmZmVjdFNlbGVjdGVkTm9kZSkKKyAgICAgICAgeworICAg
ICAgICAgICAgaWYgKCFydWxlKSB7CisgICAgICAgICAgICAgICAgLy8gSW52YWxpZCBzeW50YXgg
Zm9yIGEgc2VsZWN0b3IKKyAgICAgICAgICAgICAgICBmYWlsdXJlQ2FsbGJhY2soKTsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdmFyIHN0eWxlUnVsZSA9IFdlYkluc3Bl
Y3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uLnBhcnNlUnVsZShydWxlKTsKKyAgICAgICAgICAgICAg
ICBzdHlsZVJ1bGUucnVsZSA9IHJ1bGU7CisgICAgICAgICAgICAgICAgc3VjY2Vzc0NhbGxiYWNr
KHN0eWxlUnVsZSwgZG9lc0FmZmVjdFNlbGVjdGVkTm9kZSk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLmFkZFJ1bGUoV2ViSW5zcGVjdG9yLkNh
bGxiYWNrLndyYXAoY2FsbGJhY2spLCBuZXdDb250ZW50LCBub2RlSWQpOworICAgIH0sCisKKyAg
ICB0b2dnbGVTdHlsZUVuYWJsZWQ6IGZ1bmN0aW9uKHN0eWxlSWQsIHByb3BlcnR5TmFtZSwgZGlz
YWJsZWQsIHVzZXJDYWxsYmFjaykKKyAgICB7CisgICAgICAgIGZ1bmN0aW9uIGNhbGxiYWNrKG5l
d1BheWxvYWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghbmV3UGF5bG9hZCkgeworICAg
ICAgICAgICAgICAgIHVzZXJDYWxsYmFjayhudWxsKTsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZhciBuZXdTdHlsZSA9IFdlYkluc3BlY3Rv
ci5DU1NTdHlsZURlY2xhcmF0aW9uLnBhcnNlU3R5bGUobmV3UGF5bG9hZCk7CisgICAgICAgICAg
ICB1c2VyQ2FsbGJhY2sobmV3U3R5bGUpOworICAgICAgICB9CisKKyAgICAgICAgSW5zcGVjdG9y
QmFja2VuZC50b2dnbGVTdHlsZUVuYWJsZWQoV2ViSW5zcGVjdG9yLkNhbGxiYWNrLndyYXAoY2Fs
bGJhY2spLCBzdHlsZUlkLCBwcm9wZXJ0eU5hbWUsIGRpc2FibGVkKTsKKyAgICB9LAorCisgICAg
c2V0Q1NTVGV4dDogZnVuY3Rpb24oc3R5bGVJZCwgY3NzVGV4dCkKKyAgICB7CisgICAgICAgIElu
c3BlY3RvckJhY2tlbmQuc2V0U3R5bGVUZXh0KFdlYkluc3BlY3Rvci5DYWxsYmFjay53cmFwKG51
bGwpLCBzdHlsZUlkLCBjc3NUZXh0KTsKKyAgICB9LAorCisgICAgYXBwbHlTdHlsZVRleHQ6IGZ1
bmN0aW9uKHN0eWxlSWQsIHN0eWxlVGV4dCwgcHJvcGVydHlOYW1lLCBzdWNjZXNzQ2FsbGJhY2ss
IGZhaWx1cmVDYWxsYmFjaykKKyAgICB7CisgICAgICAgIGZ1bmN0aW9uIGNhbGxiYWNrKHN1Y2Nl
c3MsIG5ld1BheWxvYWQsIGNoYW5nZWRQcm9wZXJ0aWVzKQorICAgICAgICB7CisgICAgICAgICAg
ICBpZiAoIXN1Y2Nlc3MpCisgICAgICAgICAgICAgICAgZmFpbHVyZUNhbGxiYWNrKCk7CisgICAg
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB2YXIgbmV3U3R5bGUgPSBuZXdQYXlsb2Fk
ID8gV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24ucGFyc2VTdHlsZShuZXdQYXlsb2Fk
KSA6IG51bGw7CisgICAgICAgICAgICAgICAgc3VjY2Vzc0NhbGxiYWNrKG5ld1N0eWxlLCBjaGFu
Z2VkUHJvcGVydGllcyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBJbnNw
ZWN0b3JCYWNrZW5kLmFwcGx5U3R5bGVUZXh0KFdlYkluc3BlY3Rvci5DYWxsYmFjay53cmFwKGNh
bGxiYWNrKSwgc3R5bGVJZCwgc3R5bGVUZXh0LCBwcm9wZXJ0eU5hbWUpOworICAgIH0KK30KZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TdHlsZXNTaWRlYmFyUGFuZS5q
cyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TdHlsZXNTaWRlYmFyUGFuZS5qcwppbmRl
eCAzNWQyNWQ0Li4wMTE2MjNmIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvU3R5bGVzU2lkZWJhclBhbmUuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L1N0eWxlc1NpZGViYXJQYW5lLmpzCkBAIC0xMzMsMjIgKzEzMywyMiBAQCBXZWJJbnNwZWN0b3Iu
U3R5bGVzU2lkZWJhclBhbmUucHJvdG90eXBlID0gewogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CiAKLSAgICAgICAgZnVuY3Rpb24gZ2V0U3R5bGVzQ2FsbGJhY2soc3R5bGVzKQorICAg
ICAgICBmdW5jdGlvbiBzdHlsZXNDYWxsYmFjayhzdHlsZXMpCiAgICAgICAgIHsKICAgICAgICAg
ICAgIGlmIChzdHlsZXMpCiAgICAgICAgICAgICAgICAgdGhpcy5fcmVidWlsZFVwZGF0ZShub2Rl
LCBzdHlsZXMpOwogICAgICAgICB9CiAKLSAgICAgICAgZnVuY3Rpb24gZ2V0Q29tcHV0ZWRTdHls
ZUNhbGxiYWNrKGNvbXB1dGVkU3R5bGUpCisgICAgICAgIGZ1bmN0aW9uIGNvbXB1dGVkU3R5bGVD
YWxsYmFjayhjb21wdXRlZFN0eWxlKQogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoY29tcHV0
ZWRTdHlsZSkKICAgICAgICAgICAgICAgICB0aGlzLl9yZWZyZXNoVXBkYXRlKG5vZGUsIGNvbXB1
dGVkU3R5bGUsIGVkaXRlZFNlY3Rpb24pOwogICAgICAgICB9OwogCiAgICAgICAgIGlmIChyZWZy
ZXNoKQotICAgICAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5nZXRDb21wdXRlZFN0eWxlKFdlYklu
c3BlY3Rvci5DYWxsYmFjay53cmFwKGdldENvbXB1dGVkU3R5bGVDYWxsYmFjay5iaW5kKHRoaXMp
KSwgbm9kZS5pZCk7CisgICAgICAgICAgICBXZWJJbnNwZWN0b3IuY3NzTW9kZWwuZ2V0Q29tcHV0
ZWRTdHlsZUFzeW5jKG5vZGUuaWQsIGNvbXB1dGVkU3R5bGVDYWxsYmFjay5iaW5kKHRoaXMpKTsK
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5nZXRTdHlsZXMoV2Vi
SW5zcGVjdG9yLkNhbGxiYWNrLndyYXAoZ2V0U3R5bGVzQ2FsbGJhY2suYmluZCh0aGlzKSksIG5v
ZGUuaWQsICFXZWJJbnNwZWN0b3Iuc2V0dGluZ3Muc2hvd1VzZXJBZ2VudFN0eWxlcyk7CisgICAg
ICAgICAgICBXZWJJbnNwZWN0b3IuY3NzTW9kZWwuZ2V0U3R5bGVzQXN5bmMobm9kZS5pZCwgIVdl
Ykluc3BlY3Rvci5zZXR0aW5ncy5zaG93VXNlckFnZW50U3R5bGVzLCBzdHlsZXNDYWxsYmFjay5i
aW5kKHRoaXMpKTsKICAgICB9LAogCiAgICAgX3JlZnJlc2hVcGRhdGU6IGZ1bmN0aW9uKG5vZGUs
IGNvbXB1dGVkU3R5bGUsIGVkaXRlZFNlY3Rpb24pCkBAIC00NjYsNyArNDY2LDcgQEAgV2ViSW5z
cGVjdG9yLlN0eWxlc1NpZGViYXJQYW5lLnByb3RvdHlwZSA9IHsKICAgICB7CiAgICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7ICsraSkgewogICAgICAgICAgICAg
dmFyIHByb3BlcnR5ID0gcHJvcGVydGllc1tpXTsKLSAgICAgICAgICAgIC8vIERvZXMgdGhpcyBz
dHlsZSBjb250YWluIG5vbi1vdmVycmlkZW4gaW5oZXJpdGVkIHByb3BlcnR5PworICAgICAgICAg
ICAgLy8gRG9lcyB0aGlzIHN0eWxlIGNvbnRhaW4gbm9uLW92ZXJyaWRkZW4gaW5oZXJpdGVkIHBy
b3BlcnR5PwogICAgICAgICAgICAgaWYgKHByb3BlcnR5Lm5hbWUgaW4gV2ViSW5zcGVjdG9yLlN0
eWxlc1NpZGViYXJQYW5lLkluaGVyaXRlZFByb3BlcnRpZXMpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTYwMCw3ICs2MDAsNyBAQCBXZWJJbnNwZWN0b3IuQ29t
cHV0ZWRTdHlsZVNpZGViYXJQYW5lID0gZnVuY3Rpb24oKQogCiAgICAgc2hvd0luaGVyaXRlZENo
ZWNrYm94LmFkZEV2ZW50TGlzdGVuZXIoc2hvd0luaGVyaXRlZFRvZ2dsZUZ1bmN0aW9uLmJpbmQo
dGhpcykpOwogfQotIAorCiBXZWJJbnNwZWN0b3IuQ29tcHV0ZWRTdHlsZVNpZGViYXJQYW5lLnBy
b3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuU2lkZWJhclBhbmUucHJvdG90eXBlOwog
CiBXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0aWVzU2VjdGlvbiA9IGZ1bmN0aW9uKHN0eWxlUnVs
ZSwgc3VidGl0bGUsIGNvbXB1dGVkU3R5bGUsIHVzZWRQcm9wZXJ0aWVzLCBlZGl0YWJsZSwgaXNJ
bmhlcml0ZWQsIGlzRmlyc3RTZWN0aW9uKQpAQCAtODgyLDE0ICs4ODIsOSBAQCBXZWJJbnNwZWN0
b3IuU3R5bGVQcm9wZXJ0aWVzU2VjdGlvbi5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICByZXR1
cm4gbW92ZVRvTmV4dElmTmVlZGVkLmNhbGwodGhpcyk7CiAKICAgICAgICAgdmFyIHNlbGYgPSB0
aGlzOwotICAgICAgICBmdW5jdGlvbiBjYWxsYmFjayhuZXdSdWxlUGF5bG9hZCwgZG9lc0FmZmVj
dFNlbGVjdGVkTm9kZSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCFuZXdSdWxlUGF5bG9h
ZCkgewotICAgICAgICAgICAgICAgIC8vIEludmFsaWQgU3ludGF4IGZvciBhIFNlbGVjdG9yCi0g
ICAgICAgICAgICAgICAgbW92ZVRvTmV4dElmTmVlZGVkLmNhbGwoc2VsZik7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQogCisgICAgICAgIGZ1bmN0aW9uIHN1Y2Nlc3ND
YWxsYmFjayhuZXdSdWxlLCBkb2VzQWZmZWN0U2VsZWN0ZWROb2RlKQorICAgICAgICB7CiAgICAg
ICAgICAgICBpZiAoIWRvZXNBZmZlY3RTZWxlY3RlZE5vZGUpIHsKICAgICAgICAgICAgICAgICBz
ZWxmLm5vQWZmZWN0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBzZWxmLmVsZW1lbnQuYWRkU3R5
bGVDbGFzcygibm8tYWZmZWN0Iik7CkBAIC04OTgsNyArODkzLDYgQEAgV2ViSW5zcGVjdG9yLlN0
eWxlUHJvcGVydGllc1NlY3Rpb24ucHJvdG90eXBlID0gewogICAgICAgICAgICAgICAgIHNlbGYu
ZWxlbWVudC5yZW1vdmVTdHlsZUNsYXNzKCJuby1hZmZlY3QiKTsKICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgdmFyIG5ld1J1bGUgPSBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlv
bi5wYXJzZVJ1bGUobmV3UnVsZVBheWxvYWQpOwogICAgICAgICAgICAgc2VsZi5ydWxlID0gbmV3
UnVsZTsKICAgICAgICAgICAgIHNlbGYuc3R5bGVSdWxlID0geyBzZWN0aW9uOiBzZWxmLCBzdHls
ZTogbmV3UnVsZS5zdHlsZSwgc2VsZWN0b3JUZXh0OiBuZXdSdWxlLnNlbGVjdG9yVGV4dCwgcGFy
ZW50U3R5bGVTaGVldDogbmV3UnVsZS5wYXJlbnRTdHlsZVNoZWV0LCBydWxlOiBuZXdSdWxlIH07
CiAKQEAgLTkxMiw3ICs5MDYsNyBAQCBXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0aWVzU2VjdGlv
bi5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICBtb3ZlVG9OZXh0SWZOZWVkZWQuY2FsbChzZWxm
KTsKICAgICAgICAgfQogCi0gICAgICAgIEluc3BlY3RvckJhY2tlbmQuc2V0UnVsZVNlbGVjdG9y
KFdlYkluc3BlY3Rvci5DYWxsYmFjay53cmFwKGNhbGxiYWNrKSwgdGhpcy5ydWxlLmlkLCBuZXdD
b250ZW50LCB0aGlzLnBhbmUubm9kZS5pZCk7CisgICAgICAgIFdlYkluc3BlY3Rvci5jc3NNb2Rl
bC5zZXRSdWxlU2VsZWN0b3IodGhpcy5ydWxlLmlkLCBuZXdDb250ZW50LCB0aGlzLnBhbmUubm9k
ZS5pZCwgc3VjY2Vzc0NhbGxiYWNrLCBtb3ZlVG9OZXh0SWZOZWVkZWQuYmluZCh0aGlzKSk7CiAg
ICAgfSwKIAogICAgIGVkaXRpbmdTZWxlY3RvckNhbmNlbGxlZDogZnVuY3Rpb24oKQpAQCAtOTM5
LDE3ICs5MzMsOCBAQCBXZWJJbnNwZWN0b3IuQmxhbmtTdHlsZVByb3BlcnRpZXNTZWN0aW9uLnBy
b3RvdHlwZSA9IHsKICAgICBlZGl0aW5nU2VsZWN0b3JDb21taXR0ZWQ6IGZ1bmN0aW9uKGVsZW1l
bnQsIG5ld0NvbnRlbnQsIG9sZENvbnRlbnQsIGNvbnRleHQpCiAgICAgewogICAgICAgICB2YXIg
c2VsZiA9IHRoaXM7Ci0gICAgICAgIGZ1bmN0aW9uIGNhbGxiYWNrKHJ1bGUsIGRvZXNTZWxlY3Rv
ckFmZmVjdFNlbGVjdGVkTm9kZSkKKyAgICAgICAgZnVuY3Rpb24gc3VjY2Vzc0NhbGxiYWNrKHN0
eWxlUnVsZSwgZG9lc1NlbGVjdG9yQWZmZWN0U2VsZWN0ZWROb2RlKQogICAgICAgICB7Ci0gICAg
ICAgICAgICBpZiAoIXJ1bGUpIHsKLSAgICAgICAgICAgICAgICAvLyBJbnZhbGlkIFN5bnRheCBm
b3IgYSBTZWxlY3RvcgotICAgICAgICAgICAgICAgIHNlbGYuZWRpdGluZ1NlbGVjdG9yQ2FuY2Vs
bGVkKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICB2YXIgc3R5bGVSdWxlID0gV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24ucGFy
c2VSdWxlKHJ1bGUpOwotICAgICAgICAgICAgc3R5bGVSdWxlLnJ1bGUgPSBydWxlOwotCiAgICAg
ICAgICAgICBzZWxmLm1ha2VOb3JtYWwoc3R5bGVSdWxlKTsKIAogICAgICAgICAgICAgaWYgKCFk
b2VzU2VsZWN0b3JBZmZlY3RTZWxlY3RlZE5vZGUpIHsKQEAgLTk2Myw3ICs5NDgsNyBAQCBXZWJJ
bnNwZWN0b3IuQmxhbmtTdHlsZVByb3BlcnRpZXNTZWN0aW9uLnByb3RvdHlwZSA9IHsKICAgICAg
ICAgICAgIHNlbGYuYWRkTmV3QmxhbmtQcm9wZXJ0eSgpLnN0YXJ0RWRpdGluZygpOwogICAgICAg
ICB9CiAKLSAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5hZGRSdWxlKFdlYkluc3BlY3Rvci5DYWxs
YmFjay53cmFwKGNhbGxiYWNrKSwgbmV3Q29udGVudCwgdGhpcy5wYW5lLm5vZGUuaWQpOworICAg
ICAgICBXZWJJbnNwZWN0b3IuY3NzTW9kZWwuYWRkUnVsZSh0aGlzLnBhbmUubm9kZS5pZCwgbmV3
Q29udGVudCwgc3VjY2Vzc0NhbGxiYWNrLCB0aGlzLmVkaXRpbmdTZWxlY3RvckNhbmNlbGxlZC5i
aW5kKHRoaXMpKTsKICAgICB9LAogCiAgICAgZWRpdGluZ1NlbGVjdG9yQ2FuY2VsbGVkOiBmdW5j
dGlvbigpCkBAIC0xMjIwLDYgKzEyMDUsOSBAQCBXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0eVRy
ZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKIAogICAgICAgICB0aGlzLmxpc3RJdGVtRWxlbWVudC5y
ZW1vdmVDaGlsZHJlbigpOwogCisgICAgICAgIGlmICghdGhpcy50cmVlT3V0bGluZSkKKyAgICAg
ICAgICAgIHJldHVybjsKKwogICAgICAgICAvLyBBcHBlbmQgdGhlIGNoZWNrYm94IGZvciByb290
IGVsZW1lbnRzIG9mIGFuIGVkaXRhYmxlIHNlY3Rpb24uCiAgICAgICAgIGlmICh0aGlzLnRyZWVP
dXRsaW5lLnNlY3Rpb24gJiYgdGhpcy50cmVlT3V0bGluZS5zZWN0aW9uLmVkaXRhYmxlICYmIHRo
aXMucGFyZW50LnJvb3QpCiAgICAgICAgICAgICB0aGlzLmxpc3RJdGVtRWxlbWVudC5hcHBlbmRD
aGlsZChlbmFibGVkQ2hlY2tib3hFbGVtZW50KTsKQEAgLTEyNTQsMTIgKzEyNDIsMTIgQEAgV2Vi
SW5zcGVjdG9yLlN0eWxlUHJvcGVydHlUcmVlRWxlbWVudC5wcm90b3R5cGUgPSB7CiAgICAgICAg
IHZhciBkaXNhYmxlZCA9ICFldmVudC50YXJnZXQuY2hlY2tlZDsKIAogICAgICAgICB2YXIgc2Vs
ZiA9IHRoaXM7Ci0gICAgICAgIGZ1bmN0aW9uIGNhbGxiYWNrKG5ld1BheWxvYWQpCisgICAgICAg
IGZ1bmN0aW9uIGNhbGxiYWNrKG5ld1N0eWxlKQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAo
IW5ld1BheWxvYWQpCisgICAgICAgICAgICBpZiAoIW5ld1N0eWxlKQogICAgICAgICAgICAgICAg
IHJldHVybjsKIAotICAgICAgICAgICAgc2VsZi5zdHlsZSA9IFdlYkluc3BlY3Rvci5DU1NTdHls
ZURlY2xhcmF0aW9uLnBhcnNlU3R5bGUobmV3UGF5bG9hZCk7CisgICAgICAgICAgICBzZWxmLnN0
eWxlID0gbmV3U3R5bGU7CiAgICAgICAgICAgICBzZWxmLl9zdHlsZVJ1bGUuc3R5bGUgPSBzZWxm
LnN0eWxlOwogCiAgICAgICAgICAgICAvLyBTZXQgdGhlIGRpc2FibGVkIHByb3BlcnR5IGhlcmUs
IHNpbmNlIHRoZSBjb2RlIGFib3ZlIHJlcGxpZXMgb24gaXQgbm90IGNoYW5naW5nCkBAIC0xMjcy
LDcgKzEyNjAsNyBAQCBXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0eVRyZWVFbGVtZW50LnByb3Rv
dHlwZSA9IHsKICAgICAgICAgICAgIHNlbGYudXBkYXRlQWxsKHRydWUpOwogICAgICAgICB9CiAK
LSAgICAgICAgSW5zcGVjdG9yQmFja2VuZC50b2dnbGVTdHlsZUVuYWJsZWQoV2ViSW5zcGVjdG9y
LkNhbGxiYWNrLndyYXAoY2FsbGJhY2spLCB0aGlzLnN0eWxlLmlkLCB0aGlzLm5hbWUsIGRpc2Fi
bGVkKTsKKyAgICAgICAgV2ViSW5zcGVjdG9yLmNzc01vZGVsLnRvZ2dsZVN0eWxlRW5hYmxlZCh0
aGlzLnN0eWxlLmlkLCB0aGlzLm5hbWUsIGRpc2FibGVkLCBjYWxsYmFjayk7CiAgICAgfSwKIAog
ICAgIHVwZGF0ZVN0YXRlOiBmdW5jdGlvbigpCkBAIC0xNDM0LDcgKzE0MjIsNyBAQCBXZWJJbnNw
ZWN0b3IuU3R5bGVQcm9wZXJ0eVRyZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgIC8vIFJlc3RvcmUgdGhlIG9yaWdpbmFsIENTUyB0ZXh0IGJlZm9y
ZSBhcHBseWluZyB1c2VyIGNoYW5nZXMuIFRoaXMgaXMgbmVlZGVkIHRvIHByZXZlbnQKICAgICAg
ICAgICAgIC8vIG5ldyBwcm9wZXJ0aWVzIGZyb20gc3RpY2tpbmcgYXJvdW5kIGlmIHRoZSB1c2Vy
IGFkZHMgb25lLCB0aGVuIHJlbW92ZXMgaXQuCi0gICAgICAgICAgICBJbnNwZWN0b3JCYWNrZW5k
LnNldFN0eWxlVGV4dChXZWJJbnNwZWN0b3IuQ2FsbGJhY2sud3JhcChudWxsKSwgdGhpcy5zdHls
ZS5pZCwgdGhpcy5vcmlnaW5hbENTU1RleHQpOworICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmNz
c01vZGVsLnNldENTU1RleHQodGhpcy5zdHlsZS5pZCwgdGhpcy5vcmlnaW5hbENTU1RleHQpOwog
ICAgICAgICB9CiAKICAgICAgICAgdGhpcy5hcHBseVN0eWxlVGV4dCh0aGlzLmxpc3RJdGVtRWxl
bWVudC50ZXh0Q29udGVudCk7CkBAIC0xNDU0LDcgKzE0NDIsNyBAQCBXZWJJbnNwZWN0b3IuU3R5
bGVQcm9wZXJ0eVRyZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKICAgICAgICAgaWYgKHRoaXMuX25l
d1Byb3BlcnR5KQogICAgICAgICAgICAgdGhpcy50cmVlT3V0bGluZS5yZW1vdmVDaGlsZCh0aGlz
KTsKICAgICAgICAgZWxzZSBpZiAodGhpcy5vcmlnaW5hbENTU1RleHQpIHsKLSAgICAgICAgICAg
IEluc3BlY3RvckJhY2tlbmQuc2V0U3R5bGVUZXh0KFdlYkluc3BlY3Rvci5DYWxsYmFjay53cmFw
KG51bGwpLCB0aGlzLnN0eWxlLmlkLCB0aGlzLm9yaWdpbmFsQ1NTVGV4dCk7CisgICAgICAgICAg
ICBXZWJJbnNwZWN0b3IuY3NzTW9kZWwuc2V0Q1NTVGV4dCh0aGlzLnN0eWxlLmlkLCB0aGlzLm9y
aWdpbmFsQ1NTVGV4dCk7CiAKICAgICAgICAgICAgIGlmICh0aGlzLnRyZWVPdXRsaW5lLnNlY3Rp
b24gJiYgdGhpcy50cmVlT3V0bGluZS5zZWN0aW9uLnBhbmUpCiAgICAgICAgICAgICAgICAgdGhp
cy50cmVlT3V0bGluZS5zZWN0aW9uLnBhbmUuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKCJzdHls
ZSBlZGl0ZWQiKTsKQEAgLTE1NDEsMjggKzE1MjksMjkgQEAgV2ViSW5zcGVjdG9yLlN0eWxlUHJv
cGVydHlUcmVlRWxlbWVudC5wcm90b3R5cGUgPSB7CiAgICAgICAgIH0KIAogICAgICAgICB2YXIg
c2VsZiA9IHRoaXM7Ci0gICAgICAgIGZ1bmN0aW9uIGNhbGxiYWNrKHN1Y2Nlc3MsIG5ld1BheWxv
YWQsIGNoYW5nZWRQcm9wZXJ0aWVzKQorCisgICAgICAgIGZ1bmN0aW9uIGZhaWx1cmVDYWxsYmFj
aygpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmICghc3VjY2VzcykgewotICAgICAgICAgICAg
ICAgIC8vIFRoZSB1c2VyIHR5cGVkIHNvbWV0aGluZywgYnV0IGl0IGRpZG4ndCBwYXJzZS4gSnVz
dCBhYm9ydCBhbmQgcmVzdG9yZQotICAgICAgICAgICAgICAgIC8vIHRoZSBvcmlnaW5hbCB0aXRs
ZSBmb3IgdGhpcyBwcm9wZXJ0eS4gIElmIHRoaXMgd2FzIGEgbmV3IGF0dHJpYnV0ZSBhbmQKLSAg
ICAgICAgICAgICAgICAvLyB3ZSBjb3VsZG4ndCBwYXJzZSwgdGhlbiBqdXN0IHJlbW92ZSBpdC4K
LSAgICAgICAgICAgICAgICBpZiAoc2VsZi5fbmV3UHJvcGVydHkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgc2VsZi5wYXJlbnQucmVtb3ZlQ2hpbGQoc2VsZik7Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHVwZGF0ZUlu
dGVyZmFjZSkKLSAgICAgICAgICAgICAgICAgICAgc2VsZi51cGRhdGVUaXRsZSgpOworICAgICAg
ICAgICAgLy8gVGhlIHVzZXIgdHlwZWQgc29tZXRoaW5nLCBidXQgaXQgZGlkbid0IHBhcnNlLiBK
dXN0IGFib3J0IGFuZCByZXN0b3JlCisgICAgICAgICAgICAvLyB0aGUgb3JpZ2luYWwgdGl0bGUg
Zm9yIHRoaXMgcHJvcGVydHkuICBJZiB0aGlzIHdhcyBhIG5ldyBhdHRyaWJ1dGUgYW5kCisgICAg
ICAgICAgICAvLyB3ZSBjb3VsZG4ndCBwYXJzZSwgdGhlbiBqdXN0IHJlbW92ZSBpdC4KKyAgICAg
ICAgICAgIGlmIChzZWxmLl9uZXdQcm9wZXJ0eSkgeworICAgICAgICAgICAgICAgIHNlbGYucGFy
ZW50LnJlbW92ZUNoaWxkKHNlbGYpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmICh1cGRhdGVJbnRlcmZhY2UpCisgICAgICAgICAgICAgICAg
c2VsZi51cGRhdGVUaXRsZSgpOworICAgICAgICB9CiAKKyAgICAgICAgZnVuY3Rpb24gc3VjY2Vz
c0NhbGxiYWNrKG5ld1N0eWxlLCBjaGFuZ2VkUHJvcGVydGllcykKKyAgICAgICAgewogICAgICAg
ICAgICAgZWxlbWVudHNQYW5lbC5yZW1vdmVTdHlsZUNoYW5nZShzZWN0aW9uLmlkZW50aWZpZXIs
IHNlbGYuc3R5bGUsIHNlbGYubmFtZSk7CiAKICAgICAgICAgICAgIGlmICghc3R5bGVUZXh0TGVu
Z3RoKSB7CiAgICAgICAgICAgICAgICAgLy8gRG8gcmVtb3ZlIG91cnNlbHZlcyBmcm9tIFVJIHdo
ZW4gdGhlIHByb3BlcnR5IHJlbW92YWwgaXMgY29uZmlybWVkLgogICAgICAgICAgICAgICAgIHNl
bGYucGFyZW50LnJlbW92ZUNoaWxkKHNlbGYpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICBzZWxmLnN0eWxlID0gV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24u
cGFyc2VTdHlsZShuZXdQYXlsb2FkKTsKKyAgICAgICAgICAgICAgICBzZWxmLnN0eWxlID0gbmV3
U3R5bGU7CiAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGFuZ2VkUHJvcGVy
dGllcy5sZW5ndGg7ICsraSkKICAgICAgICAgICAgICAgICAgICAgZWxlbWVudHNQYW5lbC5hZGRT
dHlsZUNoYW5nZShzZWN0aW9uLmlkZW50aWZpZXIsIHNlbGYuc3R5bGUsIGNoYW5nZWRQcm9wZXJ0
aWVzW2ldKTsKICAgICAgICAgICAgICAgICBzZWxmLl9zdHlsZVJ1bGUuc3R5bGUgPSBzZWxmLnN0
eWxlOwpAQCAtMTU3NCw3ICsxNTYzLDggQEAgV2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydHlUcmVl
RWxlbWVudC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICBpZiAodXBkYXRlSW50ZXJmYWNlKQog
ICAgICAgICAgICAgICAgIHNlbGYudXBkYXRlQWxsKHRydWUpOwogICAgICAgICB9Ci0gICAgICAg
IEluc3BlY3RvckJhY2tlbmQuYXBwbHlTdHlsZVRleHQoV2ViSW5zcGVjdG9yLkNhbGxiYWNrLndy
YXAoY2FsbGJhY2spLCB0aGlzLnN0eWxlLmlkLCBzdHlsZVRleHQsIHRoaXMubmFtZSk7CisKKyAg
ICAgICAgV2ViSW5zcGVjdG9yLmNzc01vZGVsLmFwcGx5U3R5bGVUZXh0KHRoaXMuc3R5bGUuaWQs
IHN0eWxlVGV4dCwgdGhpcy5uYW1lLCBzdWNjZXNzQ2FsbGJhY2ssIGZhaWx1cmVDYWxsYmFjayk7
CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5z
cGVjdG9yLmh0bWwgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWwK
aW5kZXggODJhNGFkOS4uNGM1MTYzNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL2luc3BlY3Rvci5odG1sCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9p
bnNwZWN0b3IuaHRtbApAQCAtNDEsNiArNDEsNyBAQCBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICAgIDxzY3JpcHQgdHlw
ZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ikluc3BlY3RvckZyb250ZW5kSG9zdFN0dWIuanMiPjwv
c2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ik9iamVjdC5q
cyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iU2V0
dGluZ3MuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBz
cmM9IkNTU1N0eWxlTW9kZWwuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9q
YXZhc2NyaXB0IiBzcmM9IkNoZWNrYm94LmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9
InRleHQvamF2YXNjcmlwdCIgc3JjPSJDb250ZXh0TWVudS5qcyI+PC9zY3JpcHQ+CiAgICAgPHNj
cmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iS2V5Ym9hcmRTaG9ydGN1dC5qcyI+PC9z
Y3JpcHQ+CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9y
LmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcwppbmRleCA2YjVk
YmQxLi45M2IwNWMwIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5z
cGVjdG9yLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMK
QEAgLTQ2Niw2ICs0NjYsNyBAQCBXZWJJbnNwZWN0b3IubG9hZGVkID0gZnVuY3Rpb24oKQogICAg
IH07CiAKICAgICB0aGlzLmJyZWFrcG9pbnRNYW5hZ2VyID0gbmV3IFdlYkluc3BlY3Rvci5CcmVh
a3BvaW50TWFuYWdlcigpOworICAgIHRoaXMuY3NzTW9kZWwgPSBuZXcgV2ViSW5zcGVjdG9yLkNT
U1N0eWxlTW9kZWwoKTsKIAogICAgIHRoaXMucGFuZWxzID0ge307CiAgICAgdGhpcy5fY3JlYXRl
UGFuZWxzKCk7Cg==
</data>
<flag name="review"
          id="42561"
          type_id="1"
          status="+"
          setter="pfeldman"
    />
          </attachment>
      

    </bug>

</bugzilla>