<?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>139426</bug_id>
          
          <creation_ts>2014-12-08 20:41:34 -0800</creation_ts>
          <short_desc>Web Inspector: Abstract common functions from TypeTokenAnnotator into a parent class and introduce an AnnotatorManager</short_desc>
          <delta_ts>2015-01-09 17:56:05 -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</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>graouts</cc>
    
    <cc>joepeck</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1053630</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-12-08 20:41:34 -0800</bug_when>
    <thetext>These changes are in preparation for the soon to be finished Basic Block Annotator.

- This patch will create a parent class that will be shared by both TypeTokenAnnaotor and BasicBlockAnnotator.
- This patch will also create an AnnotatorManager that is responsible for keeping track of a group annotators.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1053631</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2014-12-08 20:41:45 -0800</bug_when>
    <thetext>&lt;rdar://problem/19186398&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1053887</commentid>
    <comment_count>2</comment_count>
      <attachid>242948</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-12-09 11:34:07 -0800</bug_when>
    <thetext>Created attachment 242948
path</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1053964</commentid>
    <comment_count>3</comment_count>
      <attachid>242969</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-12-09 15:08:00 -0800</bug_when>
    <thetext>Created attachment 242969
patch

Fix whitespace alteration in previous patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1054281</commentid>
    <comment_count>4</comment_count>
      <attachid>242969</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2014-12-10 12:53:27 -0800</bug_when>
    <thetext>Comment on attachment 242969
patch

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

I think this is good, but I want to see another patch with the changes mentioned here, and then I&apos;ll look more closely at the other details!

&gt; Source/WebInspectorUI/ChangeLog:15
&gt; +        This patch also introduces JavaScriptAnnotatorManager which controls a
&gt; +        set of JavaScriptAnnotators and provides a single interface for
&gt; +        controlling them.

From the description it sounds like these objects have little that is JavaScript specific. The Annotators hold &quot;SourceCode&quot;TextEditors, it would be great to abstract this to be SourceCodes if we ever wanted to use something similar for CSS.

&gt; Source/WebInspectorUI/UserInterface/Controllers/JavaScriptAnnotator.js:31
&gt; +    console.assert(sourceCodeTextEditor &amp;&amp; sourceCodeTextEditor instanceof WebInspector.SourceCodeTextEditor, sourceCodeTextEditor);

Nit: The &quot;sourceCodeTextEditor &amp;&amp;&quot; part is implied by the second condition so it can be removed.

&gt; Source/WebInspectorUI/UserInterface/Controllers/JavaScriptAnnotator.js:32
&gt; +    console.assert(script, script);

Nit: The second arguments to this asserts seems unnecessary, since it would almost certainly just be &quot;null&quot;.

That said, the Annotator doesn&apos;t need to hold the script/sourceCode object. The sourceCodeTextEditor already has it. No need for the argument / instance variable.

&gt; Source/WebInspectorUI/UserInterface/Controllers/JavaScriptAnnotatorManager.js:31
&gt; +    this._annotators = {};

Lets make this a &quot;Map&quot;. &lt;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map&gt;

    this._annotators = new Map;
    this._annotators.set(key, annotator);
    return this._annotators.get(key) || null;

&gt; Source/WebInspectorUI/UserInterface/Controllers/JavaScriptAnnotatorManager.js:62
&gt; +        for (var annotator of this._getAnnotators())

If &quot;this._annotators&quot; is an array, then you can iterate it directly:

    // Key and value
    for (var [key, annotator] of this._annotators) { ... }

    // Just values (order or insertion I believe)
    for (var annotator of this._annotators.values()) { ... }

Or, you can do the normal forEach.

    this._annotators.forEach(function(key, value) { ... });

&gt; Source/WebInspectorUI/UserInterface/Controllers/TypeTokenAnnotator.js:63
&gt;              this._script.requestScriptSyntaxTree(function(syntaxTree) {

Now that this is a subclass we wouldn&apos;t want to access &quot;this._script&quot; directly.

You could create:

- Assert it is a script in the constructor:

    console.assert(this.sourceCodeTextEditor.sourceCode instanceof WebInspector.Script);

- Add a convenience getter

    get script()
    {
        return this.sourceCodeTextEditor.sourceCode;
    }

- And use &quot;this.script&quot; instead</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1057141</commentid>
    <comment_count>5</comment_count>
      <attachid>243566</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-12-19 12:48:22 -0800</bug_when>
    <thetext>Created attachment 243566
patch

Made recommended changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1057144</commentid>
    <comment_count>6</comment_count>
      <attachid>243568</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-12-19 12:56:18 -0800</bug_when>
    <thetext>Created attachment 243568
patch

Move TextEditor argument back to SourceCodeTextEditor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1059147</commentid>
    <comment_count>7</comment_count>
      <attachid>243568</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2015-01-06 13:46:00 -0800</bug_when>
    <thetext>Comment on attachment 243568
patch

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

&gt; Source/WebInspectorUI/UserInterface/Controllers/AnnotatorManager.js:103
&gt; +    _getAnnotators: function()
&gt; +    {
&gt; +        return this._annotators.values();
&gt; +    }

Not sure this adds any thing. this._getAnnotators() isn&apos;t much better than this._annotators.values().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1059348</commentid>
    <comment_count>8</comment_count>
      <attachid>244145</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-01-07 00:40:36 -0800</bug_when>
    <thetext>Created attachment 244145
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1059360</commentid>
    <comment_count>9</comment_count>
      <attachid>244145</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-01-07 02:34:49 -0800</bug_when>
    <thetext>Comment on attachment 244145
patch

Clearing flags on attachment: 244145

Committed r178030: &lt;http://trac.webkit.org/changeset/178030&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1059361</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-01-07 02:34:53 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1060362</commentid>
    <comment_count>11</comment_count>
      <attachid>244145</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2015-01-09 17:56:05 -0800</bug_when>
    <thetext>Comment on attachment 244145
patch

Nit: 2015</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>242948</attachid>
            <date>2014-12-09 11:34:07 -0800</date>
            <delta_ts>2014-12-09 15:08:00 -0800</delta_ts>
            <desc>path</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>25226</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwkocmV2aXNpb24gMTc3MDI3KQorKysgU291cmNl
L1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDczIEBA
CisyMDE0LTEyLTA5ICBTYWFtIEJhcmF0aSAgPHNhYW1iYXJhdGkxQGdtYWlsLmNvbT4KKworICAg
ICAgICBXZWIgSW5zcGVjdG9yOiBBYnN0cmFjdCBjb21tb24gZnVuY3Rpb25zIGZyb20gVHlwZVRv
a2VuQW5ub3RhdG9yIGludG8gYSBwYXJlbnQgY2xhc3MgYW5kIGludHJvZHVjZSBhbiBBbm5vdGF0
b3JNYW5hZ2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMzk0MjYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBUaGlzIHBhdGNoIGNyZWF0ZXMgYSBwYXJlbnQgY2xhc3MsIEphdmFTY3JpcHRBbm5vdGF0b3Is
IHRoYXQgVHlwZVRva2VuQW5ub3RhdG9yCisgICAgICAgIGluaGVyaXRzIGZyb20uIEphdmFTY3Jp
cHRBbm5vdGF0b3IgZGVmaW5lcyBhIGNvbW1vbiBzZXQgb2YgZnVuY3Rpb25hbGl0eQorICAgICAg
ICB0aGF0IGEgc291cmNlIGNvZGUgYW5ub3RhdG9yIGNhbiB1c2UgdG8gbWFyayB1cCB0aGUgdGV4
dCBlZGl0b3IuIFRoaXMgCisgICAgICAgIGlzIGluIHByZXBhcmF0aW9uIG90aGVyIGNsYXNzZXMg
dGhhdCB3aWxsIGluaGVyaXQgZnJvbSBKYXZhU2NyaXB0QW5ub3RhdG9yLgorICAgICAgICAKKyAg
ICAgICAgVGhpcyBwYXRjaCBhbHNvIGludHJvZHVjZXMgSmF2YVNjcmlwdEFubm90YXRvck1hbmFn
ZXIgd2hpY2ggY29udHJvbHMgYQorICAgICAgICBzZXQgb2YgSmF2YVNjcmlwdEFubm90YXRvcnMg
YW5kIHByb3ZpZGVzIGEgc2luZ2xlIGludGVyZmFjZSBmb3IKKyAgICAgICAgY29udHJvbGxpbmcg
dGhlbS4KKworICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvSmF2YVNjcmlwdEFu
bm90YXRvci5qczogQWRkZWQuCisgICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdEFubm90
YXRvcik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdEFubm90YXRvci5wcm90b3R5
cGUuZ2V0IHNvdXJjZUNvZGVUZXh0RWRpdG9yKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZh
U2NyaXB0QW5ub3RhdG9yLnByb3RvdHlwZS5nZXQgaXNBY3RpdmUpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLkphdmFTY3JpcHRBbm5vdGF0b3IucHJvdG90eXBlLnBhdXNlKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5KYXZhU2NyaXB0QW5ub3RhdG9yLnByb3RvdHlwZS5yZXN1bWUpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRBbm5vdGF0b3IucHJvdG90eXBlLnJlZnJlc2gpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRBbm5vdGF0b3IucHJvdG90eXBlLnJlc2V0
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0QW5ub3RhdG9yLnByb3RvdHlwZS5j
bGVhcik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdEFubm90YXRvci5wcm90b3R5
cGUuaW5zZXJ0QW5ub3RhdGlvbnMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRB
bm5vdGF0b3IucHJvdG90eXBlLmNsZWFyQW5ub3RhdGlvbnMpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLkphdmFTY3JpcHRBbm5vdGF0b3IucHJvdG90eXBlLl9jbGVhclRpbWVvdXRJZk5lZWRlZCk6
CisgICAgICAgICogVXNlckludGVyZmFjZS9Db250cm9sbGVycy9KYXZhU2NyaXB0QW5ub3RhdG9y
TWFuYWdlci5qczogQWRkZWQuCisgICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdEFubm90
YXRvck1hbmFnZXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRBbm5vdGF0b3JN
YW5hZ2VyLnByb3RvdHlwZS5hZGRBbm5vdGF0b3IpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkph
dmFTY3JpcHRBbm5vdGF0b3JNYW5hZ2VyLnByb3RvdHlwZS5nZXRBbm5vdGF0b3IpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRBbm5vdGF0b3JNYW5hZ2VyLnByb3RvdHlwZS5pc0Fu
bm90YXRvckFjdGl2ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdEFubm90YXRv
ck1hbmFnZXIucHJvdG90eXBlLnBhdXNlQWxsKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZh
U2NyaXB0QW5ub3RhdG9yTWFuYWdlci5wcm90b3R5cGUucmVzdW1lQWxsKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5KYXZhU2NyaXB0QW5ub3RhdG9yTWFuYWdlci5wcm90b3R5cGUucmVmcmVzaEFs
bElmQWN0aXZlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0QW5ub3RhdG9yTWFu
YWdlci5wcm90b3R5cGUucmVzZXRBbGxJZkFjdGl2ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
SmF2YVNjcmlwdEFubm90YXRvck1hbmFnZXIucHJvdG90eXBlLmNsZWFyQWxsKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0QW5ub3RhdG9yTWFuYWdlci5wcm90b3R5cGUucmVtb3Zl
QWxsQW5ub3RhdG9ycyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdEFubm90YXRv
ck1hbmFnZXIucHJvdG90eXBlLl9nZXRBbm5vdGF0b3JzKToKKyAgICAgICAgKiBVc2VySW50ZXJm
YWNlL0NvbnRyb2xsZXJzL1R5cGVUb2tlbkFubm90YXRvci5qczoKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5UeXBlVG9rZW5Bbm5vdGF0b3IpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlR5cGVUb2tl
bkFubm90YXRvci5wcm90b3R5cGUuaW5zZXJ0QW5ub3RhdGlvbnMuKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5UeXBlVG9rZW5Bbm5vdGF0b3IucHJvdG90eXBlLmNsZWFyQW5ub3RhdGlvbnMpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLlR5cGVUb2tlbkFubm90YXRvci5wcm90b3R5cGUuZ2V0IGlz
QWN0aXZlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkluc3BlY3Rvci5UeXBlVG9rZW5Bbm5vdGF0
b3IucHJvdG90eXBlLmdldCBzb3VyY2VDb2RlVGV4dEVkaXRvcik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJJbnNwZWN0b3IuVHlwZVRva2VuQW5ub3RhdG9yLnByb3RvdHlwZS5wYXVzZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJJbnNwZWN0b3IuVHlwZVRva2VuQW5ub3RhdG9yLnByb3RvdHlwZS5y
ZXN1bWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViSW5zcGVjdG9yLlR5cGVUb2tlbkFubm90YXRv
ci5wcm90b3R5cGUucmVmcmVzaCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJJbnNwZWN0b3IuVHlw
ZVRva2VuQW5ub3RhdG9yLnByb3RvdHlwZS5yZXNldCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJJ
bnNwZWN0b3IuVHlwZVRva2VuQW5ub3RhdG9yLnByb3RvdHlwZS5faW5zZXJ0QW5ub3RhdGlvbnMu
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkluc3BlY3Rvci5UeXBlVG9rZW5Bbm5vdGF0b3IucHJv
dG90eXBlLl9jbGVhclRpbWVvdXRJZk5lZWRlZCk6IERlbGV0ZWQuCisgICAgICAgICogVXNlcklu
dGVyZmFjZS9NYWluLmh0bWw6CisgICAgICAgICogVXNlckludGVyZmFjZS9WaWV3cy9Tb3VyY2VD
b2RlVGV4dEVkaXRvci5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVk
aXRvcik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90
eXBlLnNob3duKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5w
cm90b3R5cGUuaGlkZGVuKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVk
aXRvci5wcm90b3R5cGUuY2FuU2hvd1R5cGVBbm5vdGF0aW9ucyk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLmNvbnRlbnREaWRDaGFuZ2UpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS50b2dn
bGVUeXBlQW5ub3RhdGlvbnMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0
RWRpdG9yLnByb3RvdHlwZS5wcmV0dHlQcmludCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291
cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLl9kZWJ1Z2dlckRpZFBhdXNlKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUuX2RlYnVnZ2VyRGlk
UmVzdW1lKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90
b3R5cGUuX3VwZGF0ZVRva2VuVHJhY2tpbmdDb250cm9sbGVyU3RhdGUpOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS5lZGl0aW5nQ29udHJvbGxl
ckRpZFN0YXJ0RWRpdGluZyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRF
ZGl0b3IucHJvdG90eXBlLl9nZXRBc3NvY2lhdGVkU2NyaXB0KToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUuX21ha2VUeXBlVG9rZW5Bbm5vdGF0
b3IpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlw
ZS5fbWFrZVR5cGVUb2tlblNjcm9sbEV2ZW50SGFuZGxlci5zY3JvbGxIYW5kbGVyKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUuX21ha2VUeXBl
VG9rZW5TY3JvbGxFdmVudEhhbmRsZXIpOgorCiAyMDE0LTEyLTA1ICBKb3NlcGggUGVjb3Jhcm8g
IDxwZWNvcmFyb0BhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogVW5jYXVnaHQg
RXhjZXB0aW9ucyB3aGVuIGF0dGVtcHRpbmcgdG8gc2hvdyBDb250ZW50IEZsb3cKSW5kZXg6IFNv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01haW4uaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9NYWluLmh0bWwJKHJldmlzaW9u
IDE3Njk2NCkKKysrIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01haW4uaHRt
bAkod29ya2luZyBjb3B5KQpAQCAtNDYwLDYgKzQ2MCw3IEBACiAgICAgPHNjcmlwdCBzcmM9IlZp
ZXdzL1R5cGVUb2tlblZpZXcuanMiPjwvc2NyaXB0PgogCiAgICAgPHNjcmlwdCBzcmM9IkNvbnRy
b2xsZXJzL0NvZGVNaXJyb3JFZGl0aW5nQ29udHJvbGxlci5qcyI+PC9zY3JpcHQ+CisgICAgPHNj
cmlwdCBzcmM9IkNvbnRyb2xsZXJzL0phdmFTY3JpcHRBbm5vdGF0b3IuanMiPjwvc2NyaXB0Pgog
CiAgICAgPHNjcmlwdCBzcmM9IkNvbnRyb2xsZXJzL0FuYWx5emVyTWFuYWdlci5qcyI+PC9zY3Jp
cHQ+CiAgICAgPHNjcmlwdCBzcmM9IkNvbnRyb2xsZXJzL0FwcGxpY2F0aW9uQ2FjaGVNYW5hZ2Vy
LmpzIj48L3NjcmlwdD4KQEAgLTQ3OSw2ICs0ODAsNyBAQAogICAgIDxzY3JpcHQgc3JjPSJDb250
cm9sbGVycy9Gb3JtYXR0ZXJTb3VyY2VNYXAuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3Jj
PSJDb250cm9sbGVycy9GcmFtZVJlc291cmNlTWFuYWdlci5qcyI+PC9zY3JpcHQ+CiAgICAgPHNj
cmlwdCBzcmM9IkNvbnRyb2xsZXJzL0lzc3VlTWFuYWdlci5qcyI+PC9zY3JpcHQ+CisgICAgPHNj
cmlwdCBzcmM9IkNvbnRyb2xsZXJzL0phdmFTY3JpcHRBbm5vdGF0b3JNYW5hZ2VyLmpzIj48L3Nj
cmlwdD4KICAgICA8c2NyaXB0IHNyYz0iQ29udHJvbGxlcnMvSmF2YVNjcmlwdExvZ1ZpZXdDb250
cm9sbGVyLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iQ29udHJvbGxlcnMvSmF2YVNj
cmlwdFJ1bnRpbWVDb21wbGV0aW9uUHJvdmlkZXIuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQg
c3JjPSJDb250cm9sbGVycy9MYXllclRyZWVNYW5hZ2VyLmpzIj48L3NjcmlwdD4KSW5kZXg6IFNv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0phdmFTY3JpcHRB
bm5vdGF0b3IuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvQ29udHJvbGxlcnMvSmF2YVNjcmlwdEFubm90YXRvci5qcwkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0phdmFTY3Jp
cHRBbm5vdGF0b3IuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFNhYW0gQmFyYXRpIDxzYWFtYmFyYXRpMUBnbWFpbC5jb20+CisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKK1dlYkluc3BlY3Rvci5KYXZhU2NyaXB0QW5ub3RhdG9yID0gZnVuY3Rpb24oc291cmNl
Q29kZVRleHRFZGl0b3IsIHNjcmlwdCkKK3sKKyAgICBXZWJJbnNwZWN0b3IuT2JqZWN0LmNhbGwo
dGhpcyk7CisKKyAgICBjb25zb2xlLmFzc2VydChzb3VyY2VDb2RlVGV4dEVkaXRvciAmJiBzb3Vy
Y2VDb2RlVGV4dEVkaXRvciBpbnN0YW5jZW9mIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVk
aXRvciwgc291cmNlQ29kZVRleHRFZGl0b3IpOworICAgIGNvbnNvbGUuYXNzZXJ0KHNjcmlwdCwg
c2NyaXB0KTsKKworICAgIHRoaXMuX3NjcmlwdCA9IHNjcmlwdDsKKyAgICB0aGlzLl9zb3VyY2VD
b2RlVGV4dEVkaXRvciA9IHNvdXJjZUNvZGVUZXh0RWRpdG9yOworICAgIHRoaXMuX3RpbWVvdXRJ
ZGVudGlmaWVyID0gbnVsbDsKKyAgICB0aGlzLl9pc0FjdGl2ZSA9IGZhbHNlOworfTsKKworV2Vi
SW5zcGVjdG9yLkphdmFTY3JpcHRBbm5vdGF0b3IucHJvdG90eXBlID0geworICAgIGNvbnN0cnVj
dG9yOiBXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdEFubm90YXRvciwKKyAgICBfX3Byb3RvX186IFdl
Ykluc3BlY3Rvci5PYmplY3QucHJvdG90eXBlLAorCisgICAgLy8gUHVibGljCisKKyAgICBnZXQg
c291cmNlQ29kZVRleHRFZGl0b3IoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3NvdXJj
ZUNvZGVUZXh0RWRpdG9yOworICAgIH0sCisKKyAgICBnZXQgaXNBY3RpdmUoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHRoaXMuX2lzQWN0aXZlOworICAgIH0sCisKKyAgICBwYXVzZTogZnVuY3Rp
b24oKQorICAgIHsKKyAgICAgICAgdGhpcy5fY2xlYXJUaW1lb3V0SWZOZWVkZWQoKTsKKyAgICAg
ICAgdGhpcy5faXNBY3RpdmUgPSBmYWxzZTsKKyAgICB9LAorCisgICAgcmVzdW1lOiBmdW5jdGlv
bigpCisgICAgeworICAgICAgICB0aGlzLl9jbGVhclRpbWVvdXRJZk5lZWRlZCgpOworICAgICAg
ICB0aGlzLl9pc0FjdGl2ZSA9IHRydWU7CisgICAgICAgIHRoaXMuaW5zZXJ0QW5ub3RhdGlvbnMo
KTsKKyAgICB9LAorCisgICAgcmVmcmVzaDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgY29u
c29sZS5hc3NlcnQodGhpcy5faXNBY3RpdmUpOworICAgICAgICBpZiAoIXRoaXMuX2lzQWN0aXZl
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHRoaXMuX2NsZWFyVGltZW91dElmTmVl
ZGVkKCk7CisgICAgICAgIHRoaXMuaW5zZXJ0QW5ub3RhdGlvbnMoKTsKKyAgICB9LAorCisgICAg
cmVzZXQ6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMuX2NsZWFyVGltZW91dElmTmVl
ZGVkKCk7CisgICAgICAgIHRoaXMuX2lzQWN0aXZlID0gdHJ1ZTsKKyAgICAgICAgdGhpcy5jbGVh
ckFubm90YXRpb25zKCk7CisgICAgICAgIHRoaXMuaW5zZXJ0QW5ub3RhdGlvbnMoKTsKKyAgICB9
LAorCisgICAgY2xlYXI6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMucGF1c2UoKTsK
KyAgICAgICAgdGhpcy5jbGVhckFubm90YXRpb25zKCk7CisgICAgfSwKKworICAgIC8vIFByb3Rl
Y3RlZAorCisgICAgaW5zZXJ0QW5ub3RhdGlvbnM6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAg
IC8vIEltcGxlbWVudGVkIGJ5IHN1YmNsYXNzZXMuCisgICAgfSwKKworICAgIGNsZWFyQW5ub3Rh
dGlvbnM6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIC8vIEltcGxlbWVudGVkIGJ5IHN1YmNs
YXNzZXMuCisgICAgfSwKKworICAgIC8vIFByaXZhdGUKKworICAgIF9jbGVhclRpbWVvdXRJZk5l
ZWRlZDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuX3RpbWVvdXRJZGVudGlm
aWVyKSB7CisgICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZW91dElkZW50aWZpZXIp
OworICAgICAgICAgICAgdGhpcy5fdGltZW91dElkZW50aWZpZXIgPSBudWxsOworICAgICAgICB9
CisgICAgfQorfTsKSW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0Nv
bnRyb2xsZXJzL0phdmFTY3JpcHRBbm5vdGF0b3JNYW5hZ2VyLmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0phdmFTY3JpcHRB
bm5vdGF0b3JNYW5hZ2VyLmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkluc3BlY3RvclVJ
L1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvSmF2YVNjcmlwdEFubm90YXRvck1hbmFnZXIuanMJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
IFNhYW0gQmFyYXRpIDxzYWFtYmFyYXRpMUBnbWFpbC5jb20+CisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK1dlYkluc3Bl
Y3Rvci5KYXZhU2NyaXB0QW5ub3RhdG9yTWFuYWdlciA9IGZ1bmN0aW9uKCkKK3sKKyAgICBXZWJJ
bnNwZWN0b3IuT2JqZWN0LmNhbGwodGhpcyk7CisKKyAgICB0aGlzLl9hbm5vdGF0b3JzID0ge307
Cit9OworCitXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdEFubm90YXRvck1hbmFnZXIucHJvdG90eXBl
ID0geworICAgIGNvbnN0cnVjdG9yOiBXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdEFubm90YXRvck1h
bmFnZXIsCisgICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuT2JqZWN0LnByb3RvdHlwZSwKKwor
ICAgIC8vIFB1YmxpYworCisgICAgYWRkQW5ub3RhdG9yOiBmdW5jdGlvbihrZXksIGFubm90YXRv
cikKKyAgICB7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KGFubm90YXRvciBpbnN0YW5jZW9mIFdl
Ykluc3BlY3Rvci5KYXZhU2NyaXB0QW5ub3RhdG9yKTsKKyAgICAgICAgdGhpcy5fYW5ub3RhdG9y
c1trZXldID0gYW5ub3RhdG9yOworICAgIH0sCisKKyAgICBnZXRBbm5vdGF0b3I6IGZ1bmN0aW9u
KGtleSkKKyAgICB7CisgICAgICAgIHZhciBhbm5vdGF0b3IgPSB0aGlzLl9hbm5vdGF0b3JzW2tl
eV07CisgICAgICAgIHJldHVybiBhbm5vdGF0b3IgPyBhbm5vdGF0b3IgOiBudWxsOworICAgIH0s
CisKKyAgICBpc0Fubm90YXRvckFjdGl2ZTogZnVuY3Rpb24oa2V5KQorICAgIHsKKyAgICAgICAg
dmFyIGFubm90YXRvciA9IHRoaXMuZ2V0QW5ub3RhdG9yKGtleSk7CisgICAgICAgIGlmICghYW5u
b3RhdG9yKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gYW5ub3Rh
dG9yLmlzQWN0aXZlOworICAgIH0sCisKKyAgICBwYXVzZUFsbDogZnVuY3Rpb24oKQorICAgIHsK
KyAgICAgICAgZm9yICh2YXIgYW5ub3RhdG9yIG9mIHRoaXMuX2dldEFubm90YXRvcnMoKSkKKyAg
ICAgICAgICAgIGFubm90YXRvci5wYXVzZSgpOworICAgIH0sCisKKyAgICByZXN1bWVBbGw6IGZ1
bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGZvciAodmFyIGFubm90YXRvciBvZiB0aGlzLl9nZXRB
bm5vdGF0b3JzKCkpCisgICAgICAgICAgICBhbm5vdGF0b3IucmVzdW1lKCk7CisgICAgfSwKKwor
ICAgIHJlZnJlc2hBbGxJZkFjdGl2ZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgZm9yICh2
YXIgYW5ub3RhdG9yIG9mIHRoaXMuX2dldEFubm90YXRvcnMoKSkgeworICAgICAgICAgICAgaWYg
KGFubm90YXRvci5pc0FjdGl2ZSkKKyAgICAgICAgICAgICAgICBhbm5vdGF0b3IucmVmcmVzaCgp
OworICAgICAgICB9CisgICAgfSwKKworICAgIHJlc2V0QWxsSWZBY3RpdmU6IGZ1bmN0aW9uKCkK
KyAgICB7CisgICAgICAgIGZvciAodmFyIGFubm90YXRvciBvZiB0aGlzLl9nZXRBbm5vdGF0b3Jz
KCkpIHsKKyAgICAgICAgICAgIGlmIChhbm5vdGF0b3IuaXNBY3RpdmUpCisgICAgICAgICAgICAg
ICAgYW5ub3RhdG9yLnJlc2V0KCk7CisgICAgICAgIH0KKyAgICB9LAorCisgICAgY2xlYXJBbGw6
IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGZvciAodmFyIGFubm90YXRvciBvZiB0aGlzLl9n
ZXRBbm5vdGF0b3JzKCkpCisgICAgICAgICAgICBhbm5vdGF0b3IuY2xlYXIoKTsKKyAgICB9LAor
CisgICAgcmVtb3ZlQWxsQW5ub3RhdG9yczogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhp
cy5fYW5ub3RhdG9ycyA9IHt9OworICAgIH0sCisKKyAgICAvLyBQcml2YXRlCisKKyAgICBfZ2V0
QW5ub3RhdG9yczogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlz
KHRoaXMuX2Fubm90YXRvcnMpLm1hcChmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHRoaXMuX2Fubm90
YXRvcnNba2V5XTsgfSwgdGhpcyk7CisgICAgfQorfTsKSW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL1R5cGVUb2tlbkFubm90YXRvci5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVy
cy9UeXBlVG9rZW5Bbm5vdGF0b3IuanMJKHJldmlzaW9uIDE3Njk2NCkKKysrIFNvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL1R5cGVUb2tlbkFubm90YXRvci5q
cwkod29ya2luZyBjb3B5KQpAQCAtMjUsNjYgKzI1LDE4IEBACiAKIFdlYkluc3BlY3Rvci5UeXBl
VG9rZW5Bbm5vdGF0b3IgPSBmdW5jdGlvbihzb3VyY2VDb2RlVGV4dEVkaXRvciwgc2NyaXB0KQog
ewotICAgIFdlYkluc3BlY3Rvci5PYmplY3QuY2FsbCh0aGlzKTsKKyAgICBXZWJJbnNwZWN0b3Iu
SmF2YVNjcmlwdEFubm90YXRvci5jYWxsKHRoaXMsIHNvdXJjZUNvZGVUZXh0RWRpdG9yLCBzY3Jp
cHQpOwogCi0gICAgY29uc29sZS5hc3NlcnQoc291cmNlQ29kZVRleHRFZGl0b3IgJiYgc291cmNl
Q29kZVRleHRFZGl0b3IgaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0
b3IsIHNvdXJjZUNvZGVUZXh0RWRpdG9yKTsKLSAgICBjb25zb2xlLmFzc2VydChzY3JpcHQsIHNj
cmlwdCk7Ci0KLSAgICB0aGlzLl9zY3JpcHQgPSBzY3JpcHQ7Ci0gICAgdGhpcy5fc291cmNlQ29k
ZVRleHRFZGl0b3IgPSBzb3VyY2VDb2RlVGV4dEVkaXRvcjsKICAgICB0aGlzLl90eXBlVG9rZW5O
b2RlcyA9IFtdOwogICAgIHRoaXMuX3R5cGVUb2tlbkJvb2ttYXJrcyA9IFtdOwotICAgIHRoaXMu
X3RpbWVvdXRJZGVudGlmaWVyID0gbnVsbDsKLSAgICB0aGlzLl9pc0FjdGl2ZSA9IGZhbHNlOwog
fTsKIAogV2ViSW5zcGVjdG9yLlR5cGVUb2tlbkFubm90YXRvci5wcm90b3R5cGUgPSB7CiAgICAg
Y29uc3RydWN0b3I6IFdlYkluc3BlY3Rvci5UeXBlVG9rZW5Bbm5vdGF0b3IsCi0gICAgX19wcm90
b19fOiBXZWJJbnNwZWN0b3IuT2JqZWN0LnByb3RvdHlwZSwKKyAgICBfX3Byb3RvX186IFdlYklu
c3BlY3Rvci5KYXZhU2NyaXB0QW5ub3RhdG9yLnByb3RvdHlwZSwKIAogICAgIC8vIFB1YmxpYwog
Ci0gICAgZ2V0IGlzQWN0aXZlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9pc0FjdGl2
ZTsKLSAgICB9LAotCi0gICAgZ2V0IHNvdXJjZUNvZGVUZXh0RWRpdG9yKCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiB0aGlzLl9zb3VyY2VDb2RlVGV4dEVkaXRvcjsKLSAgICB9LAotCi0gICAgcGF1
c2U6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2NsZWFyVGltZW91dElmTmVlZGVk
KCk7Ci0gICAgICAgIHRoaXMuX2lzQWN0aXZlID0gZmFsc2U7Ci0gICAgfSwKLQotICAgIHJlc3Vt
ZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fY2xlYXJUaW1lb3V0SWZOZWVkZWQo
KTsKLSAgICAgICAgdGhpcy5faXNBY3RpdmUgPSB0cnVlOwotICAgICAgICB0aGlzLl9pbnNlcnRB
bm5vdGF0aW9ucygpOwotICAgIH0sCi0KLSAgICByZWZyZXNoOiBmdW5jdGlvbigpCi0gICAgewot
ICAgICAgICBjb25zb2xlLmFzc2VydCh0aGlzLl9pc0FjdGl2ZSk7Ci0gICAgICAgIGlmICghdGhp
cy5faXNBY3RpdmUpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdGhpcy5fY2xlYXJU
aW1lb3V0SWZOZWVkZWQoKTsKLSAgICAgICAgdGhpcy5faW5zZXJ0QW5ub3RhdGlvbnMoKTsKLSAg
ICB9LAotCi0gICAgcmVzZXQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2NsZWFy
VGltZW91dElmTmVlZGVkKCk7Ci0gICAgICAgIHRoaXMuX2lzQWN0aXZlID0gdHJ1ZTsKLSAgICAg
ICAgdGhpcy5fY2xlYXJUeXBlVG9rZW5zKCk7Ci0gICAgICAgIHRoaXMuX2luc2VydEFubm90YXRp
b25zKCk7Ci0gICAgfSwKLQogICAgIHRvZ2dsZVR5cGVBbm5vdGF0aW9uczogZnVuY3Rpb24oKQog
ICAgIHsKICAgICAgICAgaWYgKHRoaXMuX2lzQWN0aXZlKSB7CkBAIC05OCw5ICs1MCw5IEBAIFdl
Ykluc3BlY3Rvci5UeXBlVG9rZW5Bbm5vdGF0b3IucHJvdG90eXAKICAgICAgICAgcmV0dXJuIHRo
aXMuX2lzQWN0aXZlOwogICAgIH0sCiAKLSAgICAvLyBQcml2YXRlCisgICAgLy8gUHJvdGVjdGVk
CiAKLSAgICBfaW5zZXJ0QW5ub3RhdGlvbnM6IGZ1bmN0aW9uKCkKKyAgICBpbnNlcnRBbm5vdGF0
aW9uczogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgaWYgKCF0aGlzLl9pc0FjdGl2ZSkKICAg
ICAgICAgICAgIHJldHVybjsKQEAgLTExMSw3ICs2Myw3IEBAIFdlYkluc3BlY3Rvci5UeXBlVG9r
ZW5Bbm5vdGF0b3IucHJvdG90eXAKICAgICAgICAgICAgIHRoaXMuX3NjcmlwdC5yZXF1ZXN0U2Ny
aXB0U3ludGF4VHJlZShmdW5jdGlvbihzeW50YXhUcmVlKSB7CiAgICAgICAgICAgICAgICAgLy8g
QWZ0ZXIgcmVxdWVzdGluZyB0aGUgdHJlZSwgd2Ugc3RpbGwgbWlnaHQgZ2V0IGEgbnVsbCB0cmVl
IGZyb20gYSBwYXJzZSBlcnJvci4KICAgICAgICAgICAgICAgICBpZiAoc3ludGF4VHJlZSkKLSAg
ICAgICAgICAgICAgICAgICAgdGhpcy5faW5zZXJ0QW5ub3RhdGlvbnMoKTsKKyAgICAgICAgICAg
ICAgICAgICAgdGhpcy5pbnNlcnRBbm5vdGF0aW9ucygpOwogICAgICAgICAgICAgfS5iaW5kKHRo
aXMpKTsKIAogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTM3LDExICs4OSwxOCBAQCBXZWJJbnNw
ZWN0b3IuVHlwZVRva2VuQW5ub3RhdG9yLnByb3RvdHlwCiAKICAgICAgICAgICAgIHRoaXMuX3Rp
bWVvdXRJZGVudGlmaWVyID0gc2V0VGltZW91dChmdW5jdGlvbiB0aW1lb3V0VXBkYXRlKCkgewog
ICAgICAgICAgICAgICAgIHRoaXMuX3RpbWVvdXRJZGVudGlmaWVyID0gbnVsbDsKLSAgICAgICAg
ICAgICAgICB0aGlzLl9pbnNlcnRBbm5vdGF0aW9ucygpOworICAgICAgICAgICAgICAgIHRoaXMu
aW5zZXJ0QW5ub3RhdGlvbnMoKTsKICAgICAgICAgICAgIH0uYmluZCh0aGlzKSwgdGltZW91dFRp
bWUpOwogICAgICAgICB9LmJpbmQodGhpcykpOwogICAgIH0sCiAKKyAgICBjbGVhckFubm90YXRp
b25zOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB0aGlzLl9jbGVhclR5cGVUb2tlbnMoKTsK
KyAgICB9LAorCisgICAgLy8gUHJpdmF0ZQorCiAgICAgX2luc2VydFR5cGVUb2tlbnNGb3JFYWNo
Tm9kZTogZnVuY3Rpb24obm9kZSkKICAgICB7CiAgICAgICAgIHZhciBzY3JpcHRTeW50YXhUcmVl
ID0gdGhpcy5fc2NyaXB0Ll9zY3JpcHRTeW50YXhUcmVlOwpAQCAtMjcxLDEzICsyMzAsNSBAQCBX
ZWJJbnNwZWN0b3IuVHlwZVRva2VuQW5ub3RhdG9yLnByb3RvdHlwCiAKICAgICAgICAgdGhpcy5f
dHlwZVRva2VuTm9kZXMgPSBbXTsKICAgICAgICAgdGhpcy5fdHlwZVRva2VuQm9va21hcmtzID0g
W107Ci0gICAgfSwKLQotICAgIF9jbGVhclRpbWVvdXRJZk5lZWRlZDogZnVuY3Rpb24oKQotICAg
IHsKLSAgICAgICAgaWYgKHRoaXMuX3RpbWVvdXRJZGVudGlmaWVyKSB7Ci0gICAgICAgICAgICBj
bGVhclRpbWVvdXQodGhpcy5fdGltZW91dElkZW50aWZpZXIpOwotICAgICAgICAgICAgdGhpcy5f
dGltZW91dElkZW50aWZpZXIgPSBudWxsOwotICAgICAgICB9CiAgICAgfQogfTsKSW5kZXg6IFNv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1NvdXJjZUNvZGVUZXh0RWRp
dG9yLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNl
L1ZpZXdzL1NvdXJjZUNvZGVUZXh0RWRpdG9yLmpzCShyZXZpc2lvbiAxNzY5NjQpCisrKyBTb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9Tb3VyY2VDb2RlVGV4dEVkaXRv
ci5qcwkod29ya2luZyBjb3B5KQpAQCAtMzYsOCArMzYsOCBAQCBXZWJJbnNwZWN0b3IuU291cmNl
Q29kZVRleHRFZGl0b3IgPSBmdW5jCiAKICAgICBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5jYWxs
KHRoaXMsIG51bGwsIG51bGwsIHRoaXMpOwogCi0gICAgdGhpcy5fdHlwZVRva2VuQW5ub3RhdG9y
ID0gbnVsbDsKICAgICB0aGlzLl90eXBlVG9rZW5TY3JvbGxIYW5kbGVyID0gbnVsbDsKKyAgICB0
aGlzLl9hbm5vdGF0b3JNYW5hZ2VyID0gbmV3IFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0QW5ub3Rh
dG9yTWFuYWdlcjsKIAogICAgIC8vIEZJWE1FOiBDdXJyZW50bHkgdGhpcyBqdXN0IGp1bXBzIGJl
dHdlZW4gcmVzb3VyY2VzIGFuZCByZWxhdGVkIHNvdXJjZSBtYXAgcmVzb3VyY2VzLiBJdCBkb2Vz
bid0ICJqdW1wIHRvIHN5bWJvbCIgeWV0LgogICAgIHRoaXMuX3VwZGF0ZVRva2VuVHJhY2tpbmdD
b250cm9sbGVyU3RhdGUoKTsKQEAgLTkwLDYgKzkwLDggQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNv
ZGVUZXh0RWRpdG9yLkR1cmF0aQogCiBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3Iu
QXV0b0Zvcm1hdE1pbmltdW1MaW5lTGVuZ3RoID0gNTAwOwogCitXZWJJbnNwZWN0b3IuU291cmNl
Q29kZVRleHRFZGl0b3IuVHlwZVRva2VuQW5ub3RhdG9yS2V5ID0gIlR5cGVUb2tlbkFubm90YXRv
cktleSI7CisKIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5FdmVudCA9IHsKICAg
ICBDb250ZW50V2lsbFBvcHVsYXRlOiAic291cmNlLWNvZGUtdGV4dC1lZGl0b3ItY29udGVudC13
aWxsLXBvcHVsYXRlIiwKICAgICBDb250ZW50RGlkUG9wdWxhdGU6ICJzb3VyY2UtY29kZS10ZXh0
LWVkaXRvci1jb250ZW50LWRpZC1wb3B1bGF0ZSIKQEAgLTEwOSw4ICsxMTEsNyBAQCBXZWJJbnNw
ZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90CiAgICAgewogICAgICAgICBXZWJJbnNw
ZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuc2hvd24uY2FsbCh0aGlzKTsKIAotICAgICAgICBp
ZiAodGhpcy5fdHlwZVRva2VuQW5ub3RhdG9yKQotICAgICAgICAgICAgdGhpcy5fdHlwZVRva2Vu
QW5ub3RhdG9yLnJlc3VtZSgpOworICAgICAgICB0aGlzLl9hbm5vdGF0b3JNYW5hZ2VyLnJlc3Vt
ZUFsbCgpOwogICAgIH0sCiAKICAgICBoaWRkZW46IGZ1bmN0aW9uKCkKQEAgLTEyMyw4ICsxMjQs
NyBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90CiAgICAgICAgIAog
ICAgICAgICB0aGlzLl9kaXNtaXNzRWRpdGluZ0NvbnRyb2xsZXIodHJ1ZSk7CiAKLSAgICAgICAg
aWYgKHRoaXMuX3R5cGVUb2tlbkFubm90YXRvcikKLSAgICAgICAgICAgIHRoaXMuX3R5cGVUb2tl
bkFubm90YXRvci5wYXVzZSgpOworICAgICAgICB0aGlzLl9hbm5vdGF0b3JNYW5hZ2VyLnBhdXNl
QWxsKCk7CiAgICAgfSwKIAogICAgIGNsb3NlOiBmdW5jdGlvbigpCkBAIC0xNjYsNyArMTY2LDcg
QEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdAogCiAgICAgY2FuU2hv
d1R5cGVBbm5vdGF0aW9uczogZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgcmV0dXJuICEhdGhp
cy5fdHlwZVRva2VuQW5ub3RhdG9yOworICAgICAgICByZXR1cm4gISF0aGlzLl9hbm5vdGF0b3JN
YW5hZ2VyLmdldEFubm90YXRvcihXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IuVHlw
ZVRva2VuQW5ub3RhdG9yS2V5KTsKICAgICB9LAogCiAgICAgY3VzdG9tUGVyZm9ybVNlYXJjaDog
ZnVuY3Rpb24ocXVlcnkpCkBAIC0yNTUsMTQgKzI1NSwyMCBAQCBXZWJJbnNwZWN0b3IuU291cmNl
Q29kZVRleHRFZGl0b3IucHJvdG90CiAKICAgICAgICAgZm9yICh2YXIgcmFuZ2Ugb2YgbmV3UmFu
Z2VzKQogICAgICAgICAgICAgdGhpcy5fdXBkYXRlRWRpdGFibGVNYXJrZXJzKHJhbmdlKTsKKwor
ICAgICAgICB0aGlzLl9hbm5vdGF0b3JNYW5hZ2VyLmNsZWFyQWxsKCk7CisgICAgICAgIHRoaXMu
X2Fubm90YXRvck1hbmFnZXIucmVtb3ZlQWxsQW5ub3RhdG9ycygpOworICAgICAgICBpZiAodGhp
cy5fdHlwZVRva2VuU2Nyb2xsSGFuZGxlcikKKyAgICAgICAgICAgIHRoaXMuX2Rpc2FibGVTY3Jv
bGxFdmVudHNGb3JUeXBlVG9rZW5Bbm5vdGF0b3IoKTsKICAgICB9LAogCiAgICAgdG9nZ2xlVHlw
ZUFubm90YXRpb25zOiBmdW5jdGlvbigpCiAgICAgewotICAgICAgICBpZiAoIXRoaXMuX3R5cGVU
b2tlbkFubm90YXRvcikKKyAgICAgICAgdmFyIHR5cGVUb2tlbkFubm90YXRvciA9IHRoaXMuX2Fu
bm90YXRvck1hbmFnZXIuZ2V0QW5ub3RhdG9yKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVk
aXRvci5UeXBlVG9rZW5Bbm5vdGF0b3JLZXkpOworICAgICAgICBpZiAoIXR5cGVUb2tlbkFubm90
YXRvcikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICB2YXIgaXNBY3RpdmF0
ZWQgPSB0aGlzLl90eXBlVG9rZW5Bbm5vdGF0b3IudG9nZ2xlVHlwZUFubm90YXRpb25zKCk7Cisg
ICAgICAgIHZhciBpc0FjdGl2YXRlZCA9IHR5cGVUb2tlbkFubm90YXRvci50b2dnbGVUeXBlQW5u
b3RhdGlvbnMoKTsKICAgICAgICAgaWYgKGlzQWN0aXZhdGVkKSB7CiAgICAgICAgICAgICBSdW50
aW1lQWdlbnQuZW5hYmxlVHlwZVByb2ZpbGVyKCk7CiAgICAgICAgICAgICB0aGlzLl9lbmFibGVT
Y3JvbGxFdmVudHNGb3JUeXBlVG9rZW5Bbm5vdGF0b3IoKTsKQEAgLTMwMiw4ICszMDgsNyBAQCBX
ZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90CiAgICAgewogICAgICAgICBX
ZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUucHJldHR5UHJpbnQuY2FsbCh0aGlzLCBw
cmV0dHkpOwogCi0gICAgICAgIGlmICh0aGlzLl90eXBlVG9rZW5Bbm5vdGF0b3IgJiYgdGhpcy5f
dHlwZVRva2VuQW5ub3RhdG9yLmlzQWN0aXZlKQotICAgICAgICAgICAgdGhpcy5fdHlwZVRva2Vu
QW5ub3RhdG9yLnJlc2V0KCk7CisgICAgICAgIHRoaXMuX2Fubm90YXRvck1hbmFnZXIucmVzZXRB
bGxJZkFjdGl2ZSgpOwogICAgIH0sCiAKICAgICAvLyBQcml2YXRlCkBAIC0xMDQyLDE2ICsxMDQ3
LDE0IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3QKICAgICBfZGVi
dWdnZXJEaWRQYXVzZTogZnVuY3Rpb24oZXZlbnQpCiAgICAgewogICAgICAgICB0aGlzLl91cGRh
dGVUb2tlblRyYWNraW5nQ29udHJvbGxlclN0YXRlKCk7Ci0gICAgICAgIGlmICh0aGlzLl90eXBl
VG9rZW5Bbm5vdGF0b3IgJiYgdGhpcy5fdHlwZVRva2VuQW5ub3RhdG9yLmlzQWN0aXZlKQotICAg
ICAgICAgICAgdGhpcy5fdHlwZVRva2VuQW5ub3RhdG9yLnJlZnJlc2goKTsKKyAgICAgICAgdGhp
cy5fYW5ub3RhdG9yTWFuYWdlci5yZWZyZXNoQWxsSWZBY3RpdmUoKTsKICAgICB9LAogCiAgICAg
X2RlYnVnZ2VyRGlkUmVzdW1lOiBmdW5jdGlvbihldmVudCkKICAgICB7CiAgICAgICAgIHRoaXMu
X3VwZGF0ZVRva2VuVHJhY2tpbmdDb250cm9sbGVyU3RhdGUoKTsKICAgICAgICAgdGhpcy5fZGlz
bWlzc1BvcG92ZXIoKTsKLSAgICAgICAgaWYgKHRoaXMuX3R5cGVUb2tlbkFubm90YXRvciAmJiB0
aGlzLl90eXBlVG9rZW5Bbm5vdGF0b3IuaXNBY3RpdmUpCi0gICAgICAgICAgICB0aGlzLl90eXBl
VG9rZW5Bbm5vdGF0b3IucmVmcmVzaCgpOworICAgICAgICB0aGlzLl9hbm5vdGF0b3JNYW5hZ2Vy
LnJlZnJlc2hBbGxJZkFjdGl2ZSgpOwogICAgIH0sCiAKICAgICBfc291cmNlQ29kZVNvdXJjZU1h
cEFkZGVkOiBmdW5jdGlvbihldmVudCkKQEAgLTEwNjcsNyArMTA3MCw3IEBAIFdlYkluc3BlY3Rv
ci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3QKICAgICAgICAgdmFyIG1vZGUgPSBXZWJJbnNw
ZWN0b3IuQ29kZU1pcnJvclRva2VuVHJhY2tpbmdDb250cm9sbGVyLk1vZGUuTm9uZTsKICAgICAg
ICAgaWYgKFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1hbmFnZXIucGF1c2VkKQogICAgICAgICAgICAg
bW9kZSA9IFdlYkluc3BlY3Rvci5Db2RlTWlycm9yVG9rZW5UcmFja2luZ0NvbnRyb2xsZXIuTW9k
ZS5KYXZhU2NyaXB0RXhwcmVzc2lvbjsKLSAgICAgICAgZWxzZSBpZiAodGhpcy5fdHlwZVRva2Vu
QW5ub3RhdG9yICYmIHRoaXMuX3R5cGVUb2tlbkFubm90YXRvci5pc0FjdGl2ZSkKKyAgICAgICAg
ZWxzZSBpZiAodGhpcy5fYW5ub3RhdG9yTWFuYWdlci5pc0Fubm90YXRvckFjdGl2ZShXZWJJbnNw
ZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IuVHlwZVRva2VuQW5ub3RhdG9yS2V5KSkKICAgICAg
ICAgICAgIG1vZGUgPSBXZWJJbnNwZWN0b3IuQ29kZU1pcnJvclRva2VuVHJhY2tpbmdDb250cm9s
bGVyLk1vZGUuSmF2YVNjcmlwdFR5cGVJbmZvcm1hdGlvbjsKICAgICAgICAgZWxzZSBpZiAodGhp
cy5faGFzQ29sb3JNYXJrZXJzKCkpCiAgICAgICAgICAgICBtb2RlID0gV2ViSW5zcGVjdG9yLkNv
ZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udHJvbGxlci5Nb2RlLk1hcmtlZFRva2VuczsKQEAgLTE1
MDcsOSArMTUxMCwxMCBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90
CiAKICAgICAgICAgLy8gV2UgY2xlYXIgdGhlIG1hcmtlciBzaW5jZSB3ZSdsbCByZXNldCBpdCBh
ZnRlciBlZGl0aW5nLgogICAgICAgICBlZGl0aW5nQ29udHJvbGxlci5tYXJrZXIuY2xlYXIoKTsK
LSAgICAgICAgCisKICAgICAgICAgLy8gV2UgaWdub3JlIGNvbnRlbnQgY2hhbmdlcyBtYWRlIGFz
IGEgcmVzdWx0IG9mIGNvbG9yIGVkaXRpbmcuCiAgICAgICAgIHRoaXMuX2lnbm9yZUNvbnRlbnRE
aWRDaGFuZ2UrKzsKKwogICAgIH0sCiAgICAgCiAgICAgZWRpdGluZ0NvbnRyb2xsZXJEaWRGaW5p
c2hFZGl0aW5nOiBmdW5jdGlvbihlZGl0aW5nQ29udHJvbGxlcikKQEAgLTE1MjEsMjQgKzE1MjUs
MzEgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdAogICAgICAgICBk
ZWxldGUgdGhpcy5fZWRpdGluZ0NvbnRyb2xsZXI7CiAgICAgfSwKIAotICAgIF9tYWtlVHlwZVRv
a2VuQW5ub3RhdG9yOiBmdW5jdGlvbigpCisgICAgX2dldEFzc29jaWF0ZWRTY3JpcHQ6IGZ1bmN0
aW9uKCkKICAgICB7Ci0gICAgICAgIGlmICghUnVudGltZUFnZW50LmdldFJ1bnRpbWVUeXBlc0Zv
clZhcmlhYmxlc0F0T2Zmc2V0cykKLSAgICAgICAgICAgIHJldHVybjsKLQogICAgICAgICB2YXIg
c2NyaXB0ID0gbnVsbDsKICAgICAgICAgLy8gRklYTUU6IFRoaXMgbmVlZHMgdG8gbWUgbW9kaWZp
ZWQgdG8gd29yayB3aXRoIEhUTUwgZmlsZXMgd2l0aCBpbmxpbmUgc2NyaXB0IHRhZ3MuCiAgICAg
ICAgIGlmICh0aGlzLl9zb3VyY2VDb2RlIGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLlNjcmlwdCkK
ICAgICAgICAgICAgIHNjcmlwdCA9IHRoaXMuX3NvdXJjZUNvZGU7CiAgICAgICAgIGVsc2UgaWYg
KHRoaXMuX3NvdXJjZUNvZGUgaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuUmVzb3VyY2UgJiYgdGhp
cy5fc291cmNlQ29kZS50eXBlID09PSBXZWJJbnNwZWN0b3IuUmVzb3VyY2UuVHlwZS5TY3JpcHQg
JiYgdGhpcy5fc291cmNlQ29kZS5zY3JpcHRzLmxlbmd0aCkKICAgICAgICAgICAgIHNjcmlwdCA9
IHRoaXMuX3NvdXJjZUNvZGUuc2NyaXB0c1swXTsKKyAgICAgICAgcmV0dXJuIHNjcmlwdDsKKyAg
ICB9LAorCisgICAgX21ha2VUeXBlVG9rZW5Bbm5vdGF0b3I6IGZ1bmN0aW9uKCkKKyAgICB7Cisg
ICAgICAgIGlmICghUnVudGltZUFnZW50LmdldFJ1bnRpbWVUeXBlc0ZvclZhcmlhYmxlc0F0T2Zm
c2V0cykKKyAgICAgICAgICAgIHJldHVybjsKIAorICAgICAgICB2YXIgc2NyaXB0ID0gdGhpcy5f
Z2V0QXNzb2NpYXRlZFNjcmlwdCgpOwogICAgICAgICBpZiAoIXNjcmlwdCkKICAgICAgICAgICAg
IHJldHVybjsKIAotICAgICAgICB0aGlzLl90eXBlVG9rZW5Bbm5vdGF0b3IgPSBuZXcgV2ViSW5z
cGVjdG9yLlR5cGVUb2tlbkFubm90YXRvcih0aGlzLCBzY3JpcHQpOworICAgICAgICB2YXIgdHlw
ZVRva2VuQW5ub3RhdG9yID0gbmV3IFdlYkluc3BlY3Rvci5UeXBlVG9rZW5Bbm5vdGF0b3IodGhp
cywgc2NyaXB0KTsKKyAgICAgICAgdGhpcy5fYW5ub3RhdG9yTWFuYWdlci5hZGRBbm5vdGF0b3Io
V2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLlR5cGVUb2tlbkFubm90YXRvcktleSwg
dHlwZVRva2VuQW5ub3RhdG9yKTsKKwogICAgICAgICBpZiAoV2ViSW5zcGVjdG9yLnNob3dKYXZh
U2NyaXB0VHlwZUluZm9ybWF0aW9uU2V0dGluZy52YWx1ZSkgewotICAgICAgICAgICAgdGhpcy5f
dHlwZVRva2VuQW5ub3RhdG9yLnJlc2V0KCk7CisgICAgICAgICAgICB0eXBlVG9rZW5Bbm5vdGF0
b3IucmVzZXQoKTsKICAgICAgICAgICAgIHRoaXMuX2VuYWJsZVNjcm9sbEV2ZW50c0ZvclR5cGVU
b2tlbkFubm90YXRvcigpOwogICAgICAgICB9CiAgICAgfSwKQEAgLTE1NjAsOCArMTU3MSw4IEBA
IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3QKIAogICAgIF9tYWtlVHlw
ZVRva2VuU2Nyb2xsRXZlbnRIYW5kbGVyOiBmdW5jdGlvbigpCiAgICAgewotICAgICAgICB2YXIg
dHlwZVRva2VuQW5ub3RhdG9yID0gdGhpcy5fdHlwZVRva2VuQW5ub3RhdG9yOwogICAgICAgICB2
YXIgdGltZW91dElkZW50aWZpZXIgPSBudWxsOworICAgICAgICB2YXIgdHlwZVRva2VuQW5ub3Rh
dG9yID0gdGhpcy5fYW5ub3RhdG9yTWFuYWdlci5nZXRBbm5vdGF0b3IoV2ViSW5zcGVjdG9yLlNv
dXJjZUNvZGVUZXh0RWRpdG9yLlR5cGVUb2tlbkFubm90YXRvcktleSk7CiAgICAgICAgIGZ1bmN0
aW9uIHNjcm9sbEhhbmRsZXIoKQogICAgICAgICB7CiAgICAgICAgICAgICBpZiAodGltZW91dElk
ZW50aWZpZXIpCkBAIC0xNTcxLDExICsxNTgyLDE2IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2Rl
VGV4dEVkaXRvci5wcm90b3QKIAogICAgICAgICAgICAgdGltZW91dElkZW50aWZpZXIgPSBzZXRU
aW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgIHRpbWVvdXRJZGVudGlmaWVyID0g
bnVsbDsKLSAgICAgICAgICAgICAgICB0eXBlVG9rZW5Bbm5vdGF0b3IucmVzdW1lKCk7Ci0gICAg
ICAgICAgICB9LCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IuRHVyYXRpb25Ub1Vw
ZGF0ZVR5cGVUb2tlbnNBZnRlclNjcm9sbGluZyk7CisgICAgICAgICAgICAgICAgdmFyIHR5cGVU
b2tlbkFubm90YXRvciA9IHRoaXMuX2Fubm90YXRvck1hbmFnZXIuZ2V0QW5ub3RhdG9yKFdlYklu
c3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5UeXBlVG9rZW5Bbm5vdGF0b3JLZXkpOworICAg
ICAgICAgICAgICAgIC8vIFRoZXJlIGlzIGEgc21hbGwgY2hhbmNlIHRoYXQgd2UgZGlzYWJsZWQg
dGhlIHR5cGUgdG9rZW4gYW5ub3RhdG9yIGFuZCB0aGUgc2Nyb2xsIGhhbmRsZXIgCisgICAgICAg
ICAgICAgICAgLy8gZHVyaW5nIHRoZSBEdXJhdGlvblRvVXBkYXRlVHlwZVRva2Vuc0FmdGVyU2Ny
b2xsaW5nIHRpbWUgZGVsYXksIHNvIHdlIG11c3QgZW5zdXJlIHRoYXQgdGhpcworICAgICAgICAg
ICAgICAgIC8vIGlzIG5vdCBudWxsLgorICAgICAgICAgICAgICAgIGlmICh0eXBlVG9rZW5Bbm5v
dGF0b3IpCisgICAgICAgICAgICAgICAgICAgIHR5cGVUb2tlbkFubm90YXRvci5yZXN1bWUoKTsK
KyAgICAgICAgICAgIH0uYmluZCh0aGlzKSwgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRp
dG9yLkR1cmF0aW9uVG9VcGRhdGVUeXBlVG9rZW5zQWZ0ZXJTY3JvbGxpbmcpOwogICAgICAgICB9
CiAKLSAgICAgICAgcmV0dXJuIHNjcm9sbEhhbmRsZXI7CisgICAgICAgIHJldHVybiBzY3JvbGxI
YW5kbGVyLmJpbmQodGhpcyk7CiAgICAgfQogfTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>242969</attachid>
            <date>2014-12-09 15:08:00 -0800</date>
            <delta_ts>2014-12-19 12:48:22 -0800</delta_ts>
            <desc>patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>24839</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwkocmV2aXNpb24gMTc3MDI3KQorKysgU291cmNl
L1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDczIEBA
CisyMDE0LTEyLTA5ICBTYWFtIEJhcmF0aSAgPHNhYW1iYXJhdGkxQGdtYWlsLmNvbT4KKworICAg
ICAgICBXZWIgSW5zcGVjdG9yOiBBYnN0cmFjdCBjb21tb24gZnVuY3Rpb25zIGZyb20gVHlwZVRv
a2VuQW5ub3RhdG9yIGludG8gYSBwYXJlbnQgY2xhc3MgYW5kIGludHJvZHVjZSBhbiBBbm5vdGF0
b3JNYW5hZ2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMzk0MjYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBUaGlzIHBhdGNoIGNyZWF0ZXMgYSBwYXJlbnQgY2xhc3MsIEphdmFTY3JpcHRBbm5vdGF0b3Is
IHRoYXQgVHlwZVRva2VuQW5ub3RhdG9yCisgICAgICAgIGluaGVyaXRzIGZyb20uIEphdmFTY3Jp
cHRBbm5vdGF0b3IgZGVmaW5lcyBhIGNvbW1vbiBzZXQgb2YgZnVuY3Rpb25hbGl0eQorICAgICAg
ICB0aGF0IGEgc291cmNlIGNvZGUgYW5ub3RhdG9yIGNhbiB1c2UgdG8gbWFyayB1cCB0aGUgdGV4
dCBlZGl0b3IuIFRoaXMgCisgICAgICAgIGlzIGluIHByZXBhcmF0aW9uIG90aGVyIGNsYXNzZXMg
dGhhdCB3aWxsIGluaGVyaXQgZnJvbSBKYXZhU2NyaXB0QW5ub3RhdG9yLgorICAgICAgICAKKyAg
ICAgICAgVGhpcyBwYXRjaCBhbHNvIGludHJvZHVjZXMgSmF2YVNjcmlwdEFubm90YXRvck1hbmFn
ZXIgd2hpY2ggY29udHJvbHMgYQorICAgICAgICBzZXQgb2YgSmF2YVNjcmlwdEFubm90YXRvcnMg
YW5kIHByb3ZpZGVzIGEgc2luZ2xlIGludGVyZmFjZSBmb3IKKyAgICAgICAgY29udHJvbGxpbmcg
dGhlbS4KKworICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvSmF2YVNjcmlwdEFu
bm90YXRvci5qczogQWRkZWQuCisgICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdEFubm90
YXRvcik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdEFubm90YXRvci5wcm90b3R5
cGUuZ2V0IHNvdXJjZUNvZGVUZXh0RWRpdG9yKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZh
U2NyaXB0QW5ub3RhdG9yLnByb3RvdHlwZS5nZXQgaXNBY3RpdmUpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLkphdmFTY3JpcHRBbm5vdGF0b3IucHJvdG90eXBlLnBhdXNlKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5KYXZhU2NyaXB0QW5ub3RhdG9yLnByb3RvdHlwZS5yZXN1bWUpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRBbm5vdGF0b3IucHJvdG90eXBlLnJlZnJlc2gpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRBbm5vdGF0b3IucHJvdG90eXBlLnJlc2V0
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0QW5ub3RhdG9yLnByb3RvdHlwZS5j
bGVhcik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdEFubm90YXRvci5wcm90b3R5
cGUuaW5zZXJ0QW5ub3RhdGlvbnMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRB
bm5vdGF0b3IucHJvdG90eXBlLmNsZWFyQW5ub3RhdGlvbnMpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLkphdmFTY3JpcHRBbm5vdGF0b3IucHJvdG90eXBlLl9jbGVhclRpbWVvdXRJZk5lZWRlZCk6
CisgICAgICAgICogVXNlckludGVyZmFjZS9Db250cm9sbGVycy9KYXZhU2NyaXB0QW5ub3RhdG9y
TWFuYWdlci5qczogQWRkZWQuCisgICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdEFubm90
YXRvck1hbmFnZXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRBbm5vdGF0b3JN
YW5hZ2VyLnByb3RvdHlwZS5hZGRBbm5vdGF0b3IpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkph
dmFTY3JpcHRBbm5vdGF0b3JNYW5hZ2VyLnByb3RvdHlwZS5nZXRBbm5vdGF0b3IpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRBbm5vdGF0b3JNYW5hZ2VyLnByb3RvdHlwZS5pc0Fu
bm90YXRvckFjdGl2ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdEFubm90YXRv
ck1hbmFnZXIucHJvdG90eXBlLnBhdXNlQWxsKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZh
U2NyaXB0QW5ub3RhdG9yTWFuYWdlci5wcm90b3R5cGUucmVzdW1lQWxsKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5KYXZhU2NyaXB0QW5ub3RhdG9yTWFuYWdlci5wcm90b3R5cGUucmVmcmVzaEFs
bElmQWN0aXZlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0QW5ub3RhdG9yTWFu
YWdlci5wcm90b3R5cGUucmVzZXRBbGxJZkFjdGl2ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
SmF2YVNjcmlwdEFubm90YXRvck1hbmFnZXIucHJvdG90eXBlLmNsZWFyQWxsKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0QW5ub3RhdG9yTWFuYWdlci5wcm90b3R5cGUucmVtb3Zl
QWxsQW5ub3RhdG9ycyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdEFubm90YXRv
ck1hbmFnZXIucHJvdG90eXBlLl9nZXRBbm5vdGF0b3JzKToKKyAgICAgICAgKiBVc2VySW50ZXJm
YWNlL0NvbnRyb2xsZXJzL1R5cGVUb2tlbkFubm90YXRvci5qczoKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5UeXBlVG9rZW5Bbm5vdGF0b3IpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlR5cGVUb2tl
bkFubm90YXRvci5wcm90b3R5cGUuaW5zZXJ0QW5ub3RhdGlvbnMuKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5UeXBlVG9rZW5Bbm5vdGF0b3IucHJvdG90eXBlLmNsZWFyQW5ub3RhdGlvbnMpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLlR5cGVUb2tlbkFubm90YXRvci5wcm90b3R5cGUuZ2V0IGlz
QWN0aXZlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkluc3BlY3Rvci5UeXBlVG9rZW5Bbm5vdGF0
b3IucHJvdG90eXBlLmdldCBzb3VyY2VDb2RlVGV4dEVkaXRvcik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJJbnNwZWN0b3IuVHlwZVRva2VuQW5ub3RhdG9yLnByb3RvdHlwZS5wYXVzZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJJbnNwZWN0b3IuVHlwZVRva2VuQW5ub3RhdG9yLnByb3RvdHlwZS5y
ZXN1bWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViSW5zcGVjdG9yLlR5cGVUb2tlbkFubm90YXRv
ci5wcm90b3R5cGUucmVmcmVzaCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJJbnNwZWN0b3IuVHlw
ZVRva2VuQW5ub3RhdG9yLnByb3RvdHlwZS5yZXNldCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJJ
bnNwZWN0b3IuVHlwZVRva2VuQW5ub3RhdG9yLnByb3RvdHlwZS5faW5zZXJ0QW5ub3RhdGlvbnMu
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkluc3BlY3Rvci5UeXBlVG9rZW5Bbm5vdGF0b3IucHJv
dG90eXBlLl9jbGVhclRpbWVvdXRJZk5lZWRlZCk6IERlbGV0ZWQuCisgICAgICAgICogVXNlcklu
dGVyZmFjZS9NYWluLmh0bWw6CisgICAgICAgICogVXNlckludGVyZmFjZS9WaWV3cy9Tb3VyY2VD
b2RlVGV4dEVkaXRvci5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVk
aXRvcik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90
eXBlLnNob3duKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5w
cm90b3R5cGUuaGlkZGVuKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVk
aXRvci5wcm90b3R5cGUuY2FuU2hvd1R5cGVBbm5vdGF0aW9ucyk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLmNvbnRlbnREaWRDaGFuZ2UpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS50b2dn
bGVUeXBlQW5ub3RhdGlvbnMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0
RWRpdG9yLnByb3RvdHlwZS5wcmV0dHlQcmludCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291
cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLl9kZWJ1Z2dlckRpZFBhdXNlKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUuX2RlYnVnZ2VyRGlk
UmVzdW1lKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90
b3R5cGUuX3VwZGF0ZVRva2VuVHJhY2tpbmdDb250cm9sbGVyU3RhdGUpOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS5lZGl0aW5nQ29udHJvbGxl
ckRpZFN0YXJ0RWRpdGluZyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRF
ZGl0b3IucHJvdG90eXBlLl9nZXRBc3NvY2lhdGVkU2NyaXB0KToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUuX21ha2VUeXBlVG9rZW5Bbm5vdGF0
b3IpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlw
ZS5fbWFrZVR5cGVUb2tlblNjcm9sbEV2ZW50SGFuZGxlci5zY3JvbGxIYW5kbGVyKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUuX21ha2VUeXBl
VG9rZW5TY3JvbGxFdmVudEhhbmRsZXIpOgorCiAyMDE0LTEyLTA1ICBKb3NlcGggUGVjb3Jhcm8g
IDxwZWNvcmFyb0BhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogVW5jYXVnaHQg
RXhjZXB0aW9ucyB3aGVuIGF0dGVtcHRpbmcgdG8gc2hvdyBDb250ZW50IEZsb3cKSW5kZXg6IFNv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01haW4uaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9NYWluLmh0bWwJKHJldmlzaW9u
IDE3Njk2NCkKKysrIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01haW4uaHRt
bAkod29ya2luZyBjb3B5KQpAQCAtNDYwLDYgKzQ2MCw3IEBACiAgICAgPHNjcmlwdCBzcmM9IlZp
ZXdzL1R5cGVUb2tlblZpZXcuanMiPjwvc2NyaXB0PgogCiAgICAgPHNjcmlwdCBzcmM9IkNvbnRy
b2xsZXJzL0NvZGVNaXJyb3JFZGl0aW5nQ29udHJvbGxlci5qcyI+PC9zY3JpcHQ+CisgICAgPHNj
cmlwdCBzcmM9IkNvbnRyb2xsZXJzL0phdmFTY3JpcHRBbm5vdGF0b3IuanMiPjwvc2NyaXB0Pgog
CiAgICAgPHNjcmlwdCBzcmM9IkNvbnRyb2xsZXJzL0FuYWx5emVyTWFuYWdlci5qcyI+PC9zY3Jp
cHQ+CiAgICAgPHNjcmlwdCBzcmM9IkNvbnRyb2xsZXJzL0FwcGxpY2F0aW9uQ2FjaGVNYW5hZ2Vy
LmpzIj48L3NjcmlwdD4KQEAgLTQ3OSw2ICs0ODAsNyBAQAogICAgIDxzY3JpcHQgc3JjPSJDb250
cm9sbGVycy9Gb3JtYXR0ZXJTb3VyY2VNYXAuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3Jj
PSJDb250cm9sbGVycy9GcmFtZVJlc291cmNlTWFuYWdlci5qcyI+PC9zY3JpcHQ+CiAgICAgPHNj
cmlwdCBzcmM9IkNvbnRyb2xsZXJzL0lzc3VlTWFuYWdlci5qcyI+PC9zY3JpcHQ+CisgICAgPHNj
cmlwdCBzcmM9IkNvbnRyb2xsZXJzL0phdmFTY3JpcHRBbm5vdGF0b3JNYW5hZ2VyLmpzIj48L3Nj
cmlwdD4KICAgICA8c2NyaXB0IHNyYz0iQ29udHJvbGxlcnMvSmF2YVNjcmlwdExvZ1ZpZXdDb250
cm9sbGVyLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iQ29udHJvbGxlcnMvSmF2YVNj
cmlwdFJ1bnRpbWVDb21wbGV0aW9uUHJvdmlkZXIuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQg
c3JjPSJDb250cm9sbGVycy9MYXllclRyZWVNYW5hZ2VyLmpzIj48L3NjcmlwdD4KSW5kZXg6IFNv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0phdmFTY3JpcHRB
bm5vdGF0b3IuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvQ29udHJvbGxlcnMvSmF2YVNjcmlwdEFubm90YXRvci5qcwkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0phdmFTY3Jp
cHRBbm5vdGF0b3IuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFNhYW0gQmFyYXRpIDxzYWFtYmFyYXRpMUBnbWFpbC5jb20+CisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKK1dlYkluc3BlY3Rvci5KYXZhU2NyaXB0QW5ub3RhdG9yID0gZnVuY3Rpb24oc291cmNl
Q29kZVRleHRFZGl0b3IsIHNjcmlwdCkKK3sKKyAgICBXZWJJbnNwZWN0b3IuT2JqZWN0LmNhbGwo
dGhpcyk7CisKKyAgICBjb25zb2xlLmFzc2VydChzb3VyY2VDb2RlVGV4dEVkaXRvciAmJiBzb3Vy
Y2VDb2RlVGV4dEVkaXRvciBpbnN0YW5jZW9mIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVk
aXRvciwgc291cmNlQ29kZVRleHRFZGl0b3IpOworICAgIGNvbnNvbGUuYXNzZXJ0KHNjcmlwdCwg
c2NyaXB0KTsKKworICAgIHRoaXMuX3NjcmlwdCA9IHNjcmlwdDsKKyAgICB0aGlzLl9zb3VyY2VD
b2RlVGV4dEVkaXRvciA9IHNvdXJjZUNvZGVUZXh0RWRpdG9yOworICAgIHRoaXMuX3RpbWVvdXRJ
ZGVudGlmaWVyID0gbnVsbDsKKyAgICB0aGlzLl9pc0FjdGl2ZSA9IGZhbHNlOworfTsKKworV2Vi
SW5zcGVjdG9yLkphdmFTY3JpcHRBbm5vdGF0b3IucHJvdG90eXBlID0geworICAgIGNvbnN0cnVj
dG9yOiBXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdEFubm90YXRvciwKKyAgICBfX3Byb3RvX186IFdl
Ykluc3BlY3Rvci5PYmplY3QucHJvdG90eXBlLAorCisgICAgLy8gUHVibGljCisKKyAgICBnZXQg
c291cmNlQ29kZVRleHRFZGl0b3IoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3NvdXJj
ZUNvZGVUZXh0RWRpdG9yOworICAgIH0sCisKKyAgICBnZXQgaXNBY3RpdmUoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHRoaXMuX2lzQWN0aXZlOworICAgIH0sCisKKyAgICBwYXVzZTogZnVuY3Rp
b24oKQorICAgIHsKKyAgICAgICAgdGhpcy5fY2xlYXJUaW1lb3V0SWZOZWVkZWQoKTsKKyAgICAg
ICAgdGhpcy5faXNBY3RpdmUgPSBmYWxzZTsKKyAgICB9LAorCisgICAgcmVzdW1lOiBmdW5jdGlv
bigpCisgICAgeworICAgICAgICB0aGlzLl9jbGVhclRpbWVvdXRJZk5lZWRlZCgpOworICAgICAg
ICB0aGlzLl9pc0FjdGl2ZSA9IHRydWU7CisgICAgICAgIHRoaXMuaW5zZXJ0QW5ub3RhdGlvbnMo
KTsKKyAgICB9LAorCisgICAgcmVmcmVzaDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgY29u
c29sZS5hc3NlcnQodGhpcy5faXNBY3RpdmUpOworICAgICAgICBpZiAoIXRoaXMuX2lzQWN0aXZl
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHRoaXMuX2NsZWFyVGltZW91dElmTmVl
ZGVkKCk7CisgICAgICAgIHRoaXMuaW5zZXJ0QW5ub3RhdGlvbnMoKTsKKyAgICB9LAorCisgICAg
cmVzZXQ6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMuX2NsZWFyVGltZW91dElmTmVl
ZGVkKCk7CisgICAgICAgIHRoaXMuX2lzQWN0aXZlID0gdHJ1ZTsKKyAgICAgICAgdGhpcy5jbGVh
ckFubm90YXRpb25zKCk7CisgICAgICAgIHRoaXMuaW5zZXJ0QW5ub3RhdGlvbnMoKTsKKyAgICB9
LAorCisgICAgY2xlYXI6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMucGF1c2UoKTsK
KyAgICAgICAgdGhpcy5jbGVhckFubm90YXRpb25zKCk7CisgICAgfSwKKworICAgIC8vIFByb3Rl
Y3RlZAorCisgICAgaW5zZXJ0QW5ub3RhdGlvbnM6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAg
IC8vIEltcGxlbWVudGVkIGJ5IHN1YmNsYXNzZXMuCisgICAgfSwKKworICAgIGNsZWFyQW5ub3Rh
dGlvbnM6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIC8vIEltcGxlbWVudGVkIGJ5IHN1YmNs
YXNzZXMuCisgICAgfSwKKworICAgIC8vIFByaXZhdGUKKworICAgIF9jbGVhclRpbWVvdXRJZk5l
ZWRlZDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuX3RpbWVvdXRJZGVudGlm
aWVyKSB7CisgICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZW91dElkZW50aWZpZXIp
OworICAgICAgICAgICAgdGhpcy5fdGltZW91dElkZW50aWZpZXIgPSBudWxsOworICAgICAgICB9
CisgICAgfQorfTsKSW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0Nv
bnRyb2xsZXJzL0phdmFTY3JpcHRBbm5vdGF0b3JNYW5hZ2VyLmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0phdmFTY3JpcHRB
bm5vdGF0b3JNYW5hZ2VyLmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkluc3BlY3RvclVJ
L1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvSmF2YVNjcmlwdEFubm90YXRvck1hbmFnZXIuanMJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
IFNhYW0gQmFyYXRpIDxzYWFtYmFyYXRpMUBnbWFpbC5jb20+CisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK1dlYkluc3Bl
Y3Rvci5KYXZhU2NyaXB0QW5ub3RhdG9yTWFuYWdlciA9IGZ1bmN0aW9uKCkKK3sKKyAgICBXZWJJ
bnNwZWN0b3IuT2JqZWN0LmNhbGwodGhpcyk7CisKKyAgICB0aGlzLl9hbm5vdGF0b3JzID0ge307
Cit9OworCitXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdEFubm90YXRvck1hbmFnZXIucHJvdG90eXBl
ID0geworICAgIGNvbnN0cnVjdG9yOiBXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdEFubm90YXRvck1h
bmFnZXIsCisgICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuT2JqZWN0LnByb3RvdHlwZSwKKwor
ICAgIC8vIFB1YmxpYworCisgICAgYWRkQW5ub3RhdG9yOiBmdW5jdGlvbihrZXksIGFubm90YXRv
cikKKyAgICB7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KGFubm90YXRvciBpbnN0YW5jZW9mIFdl
Ykluc3BlY3Rvci5KYXZhU2NyaXB0QW5ub3RhdG9yKTsKKyAgICAgICAgdGhpcy5fYW5ub3RhdG9y
c1trZXldID0gYW5ub3RhdG9yOworICAgIH0sCisKKyAgICBnZXRBbm5vdGF0b3I6IGZ1bmN0aW9u
KGtleSkKKyAgICB7CisgICAgICAgIHZhciBhbm5vdGF0b3IgPSB0aGlzLl9hbm5vdGF0b3JzW2tl
eV07CisgICAgICAgIHJldHVybiBhbm5vdGF0b3IgPyBhbm5vdGF0b3IgOiBudWxsOworICAgIH0s
CisKKyAgICBpc0Fubm90YXRvckFjdGl2ZTogZnVuY3Rpb24oa2V5KQorICAgIHsKKyAgICAgICAg
dmFyIGFubm90YXRvciA9IHRoaXMuZ2V0QW5ub3RhdG9yKGtleSk7CisgICAgICAgIGlmICghYW5u
b3RhdG9yKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gYW5ub3Rh
dG9yLmlzQWN0aXZlOworICAgIH0sCisKKyAgICBwYXVzZUFsbDogZnVuY3Rpb24oKQorICAgIHsK
KyAgICAgICAgZm9yICh2YXIgYW5ub3RhdG9yIG9mIHRoaXMuX2dldEFubm90YXRvcnMoKSkKKyAg
ICAgICAgICAgIGFubm90YXRvci5wYXVzZSgpOworICAgIH0sCisKKyAgICByZXN1bWVBbGw6IGZ1
bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGZvciAodmFyIGFubm90YXRvciBvZiB0aGlzLl9nZXRB
bm5vdGF0b3JzKCkpCisgICAgICAgICAgICBhbm5vdGF0b3IucmVzdW1lKCk7CisgICAgfSwKKwor
ICAgIHJlZnJlc2hBbGxJZkFjdGl2ZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgZm9yICh2
YXIgYW5ub3RhdG9yIG9mIHRoaXMuX2dldEFubm90YXRvcnMoKSkgeworICAgICAgICAgICAgaWYg
KGFubm90YXRvci5pc0FjdGl2ZSkKKyAgICAgICAgICAgICAgICBhbm5vdGF0b3IucmVmcmVzaCgp
OworICAgICAgICB9CisgICAgfSwKKworICAgIHJlc2V0QWxsSWZBY3RpdmU6IGZ1bmN0aW9uKCkK
KyAgICB7CisgICAgICAgIGZvciAodmFyIGFubm90YXRvciBvZiB0aGlzLl9nZXRBbm5vdGF0b3Jz
KCkpIHsKKyAgICAgICAgICAgIGlmIChhbm5vdGF0b3IuaXNBY3RpdmUpCisgICAgICAgICAgICAg
ICAgYW5ub3RhdG9yLnJlc2V0KCk7CisgICAgICAgIH0KKyAgICB9LAorCisgICAgY2xlYXJBbGw6
IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGZvciAodmFyIGFubm90YXRvciBvZiB0aGlzLl9n
ZXRBbm5vdGF0b3JzKCkpCisgICAgICAgICAgICBhbm5vdGF0b3IuY2xlYXIoKTsKKyAgICB9LAor
CisgICAgcmVtb3ZlQWxsQW5ub3RhdG9yczogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhp
cy5fYW5ub3RhdG9ycyA9IHt9OworICAgIH0sCisKKyAgICAvLyBQcml2YXRlCisKKyAgICBfZ2V0
QW5ub3RhdG9yczogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlz
KHRoaXMuX2Fubm90YXRvcnMpLm1hcChmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHRoaXMuX2Fubm90
YXRvcnNba2V5XTsgfSwgdGhpcyk7CisgICAgfQorfTsKSW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL1R5cGVUb2tlbkFubm90YXRvci5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVy
cy9UeXBlVG9rZW5Bbm5vdGF0b3IuanMJKHJldmlzaW9uIDE3Njk2NCkKKysrIFNvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL1R5cGVUb2tlbkFubm90YXRvci5q
cwkod29ya2luZyBjb3B5KQpAQCAtMjUsNjYgKzI1LDE4IEBACiAKIFdlYkluc3BlY3Rvci5UeXBl
VG9rZW5Bbm5vdGF0b3IgPSBmdW5jdGlvbihzb3VyY2VDb2RlVGV4dEVkaXRvciwgc2NyaXB0KQog
ewotICAgIFdlYkluc3BlY3Rvci5PYmplY3QuY2FsbCh0aGlzKTsKKyAgICBXZWJJbnNwZWN0b3Iu
SmF2YVNjcmlwdEFubm90YXRvci5jYWxsKHRoaXMsIHNvdXJjZUNvZGVUZXh0RWRpdG9yLCBzY3Jp
cHQpOwogCi0gICAgY29uc29sZS5hc3NlcnQoc291cmNlQ29kZVRleHRFZGl0b3IgJiYgc291cmNl
Q29kZVRleHRFZGl0b3IgaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0
b3IsIHNvdXJjZUNvZGVUZXh0RWRpdG9yKTsKLSAgICBjb25zb2xlLmFzc2VydChzY3JpcHQsIHNj
cmlwdCk7Ci0KLSAgICB0aGlzLl9zY3JpcHQgPSBzY3JpcHQ7Ci0gICAgdGhpcy5fc291cmNlQ29k
ZVRleHRFZGl0b3IgPSBzb3VyY2VDb2RlVGV4dEVkaXRvcjsKICAgICB0aGlzLl90eXBlVG9rZW5O
b2RlcyA9IFtdOwogICAgIHRoaXMuX3R5cGVUb2tlbkJvb2ttYXJrcyA9IFtdOwotICAgIHRoaXMu
X3RpbWVvdXRJZGVudGlmaWVyID0gbnVsbDsKLSAgICB0aGlzLl9pc0FjdGl2ZSA9IGZhbHNlOwog
fTsKIAogV2ViSW5zcGVjdG9yLlR5cGVUb2tlbkFubm90YXRvci5wcm90b3R5cGUgPSB7CiAgICAg
Y29uc3RydWN0b3I6IFdlYkluc3BlY3Rvci5UeXBlVG9rZW5Bbm5vdGF0b3IsCi0gICAgX19wcm90
b19fOiBXZWJJbnNwZWN0b3IuT2JqZWN0LnByb3RvdHlwZSwKKyAgICBfX3Byb3RvX186IFdlYklu
c3BlY3Rvci5KYXZhU2NyaXB0QW5ub3RhdG9yLnByb3RvdHlwZSwKIAogICAgIC8vIFB1YmxpYwog
Ci0gICAgZ2V0IGlzQWN0aXZlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9pc0FjdGl2
ZTsKLSAgICB9LAotCi0gICAgZ2V0IHNvdXJjZUNvZGVUZXh0RWRpdG9yKCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiB0aGlzLl9zb3VyY2VDb2RlVGV4dEVkaXRvcjsKLSAgICB9LAotCi0gICAgcGF1
c2U6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2NsZWFyVGltZW91dElmTmVlZGVk
KCk7Ci0gICAgICAgIHRoaXMuX2lzQWN0aXZlID0gZmFsc2U7Ci0gICAgfSwKLQotICAgIHJlc3Vt
ZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fY2xlYXJUaW1lb3V0SWZOZWVkZWQo
KTsKLSAgICAgICAgdGhpcy5faXNBY3RpdmUgPSB0cnVlOwotICAgICAgICB0aGlzLl9pbnNlcnRB
bm5vdGF0aW9ucygpOwotICAgIH0sCi0KLSAgICByZWZyZXNoOiBmdW5jdGlvbigpCi0gICAgewot
ICAgICAgICBjb25zb2xlLmFzc2VydCh0aGlzLl9pc0FjdGl2ZSk7Ci0gICAgICAgIGlmICghdGhp
cy5faXNBY3RpdmUpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdGhpcy5fY2xlYXJU
aW1lb3V0SWZOZWVkZWQoKTsKLSAgICAgICAgdGhpcy5faW5zZXJ0QW5ub3RhdGlvbnMoKTsKLSAg
ICB9LAotCi0gICAgcmVzZXQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2NsZWFy
VGltZW91dElmTmVlZGVkKCk7Ci0gICAgICAgIHRoaXMuX2lzQWN0aXZlID0gdHJ1ZTsKLSAgICAg
ICAgdGhpcy5fY2xlYXJUeXBlVG9rZW5zKCk7Ci0gICAgICAgIHRoaXMuX2luc2VydEFubm90YXRp
b25zKCk7Ci0gICAgfSwKLQogICAgIHRvZ2dsZVR5cGVBbm5vdGF0aW9uczogZnVuY3Rpb24oKQog
ICAgIHsKICAgICAgICAgaWYgKHRoaXMuX2lzQWN0aXZlKSB7CkBAIC05OCw5ICs1MCw5IEBAIFdl
Ykluc3BlY3Rvci5UeXBlVG9rZW5Bbm5vdGF0b3IucHJvdG90eXAKICAgICAgICAgcmV0dXJuIHRo
aXMuX2lzQWN0aXZlOwogICAgIH0sCiAKLSAgICAvLyBQcml2YXRlCisgICAgLy8gUHJvdGVjdGVk
CiAKLSAgICBfaW5zZXJ0QW5ub3RhdGlvbnM6IGZ1bmN0aW9uKCkKKyAgICBpbnNlcnRBbm5vdGF0
aW9uczogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgaWYgKCF0aGlzLl9pc0FjdGl2ZSkKICAg
ICAgICAgICAgIHJldHVybjsKQEAgLTExMSw3ICs2Myw3IEBAIFdlYkluc3BlY3Rvci5UeXBlVG9r
ZW5Bbm5vdGF0b3IucHJvdG90eXAKICAgICAgICAgICAgIHRoaXMuX3NjcmlwdC5yZXF1ZXN0U2Ny
aXB0U3ludGF4VHJlZShmdW5jdGlvbihzeW50YXhUcmVlKSB7CiAgICAgICAgICAgICAgICAgLy8g
QWZ0ZXIgcmVxdWVzdGluZyB0aGUgdHJlZSwgd2Ugc3RpbGwgbWlnaHQgZ2V0IGEgbnVsbCB0cmVl
IGZyb20gYSBwYXJzZSBlcnJvci4KICAgICAgICAgICAgICAgICBpZiAoc3ludGF4VHJlZSkKLSAg
ICAgICAgICAgICAgICAgICAgdGhpcy5faW5zZXJ0QW5ub3RhdGlvbnMoKTsKKyAgICAgICAgICAg
ICAgICAgICAgdGhpcy5pbnNlcnRBbm5vdGF0aW9ucygpOwogICAgICAgICAgICAgfS5iaW5kKHRo
aXMpKTsKIAogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTM3LDExICs4OSwxOCBAQCBXZWJJbnNw
ZWN0b3IuVHlwZVRva2VuQW5ub3RhdG9yLnByb3RvdHlwCiAKICAgICAgICAgICAgIHRoaXMuX3Rp
bWVvdXRJZGVudGlmaWVyID0gc2V0VGltZW91dChmdW5jdGlvbiB0aW1lb3V0VXBkYXRlKCkgewog
ICAgICAgICAgICAgICAgIHRoaXMuX3RpbWVvdXRJZGVudGlmaWVyID0gbnVsbDsKLSAgICAgICAg
ICAgICAgICB0aGlzLl9pbnNlcnRBbm5vdGF0aW9ucygpOworICAgICAgICAgICAgICAgIHRoaXMu
aW5zZXJ0QW5ub3RhdGlvbnMoKTsKICAgICAgICAgICAgIH0uYmluZCh0aGlzKSwgdGltZW91dFRp
bWUpOwogICAgICAgICB9LmJpbmQodGhpcykpOwogICAgIH0sCiAKKyAgICBjbGVhckFubm90YXRp
b25zOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB0aGlzLl9jbGVhclR5cGVUb2tlbnMoKTsK
KyAgICB9LAorCisgICAgLy8gUHJpdmF0ZQorCiAgICAgX2luc2VydFR5cGVUb2tlbnNGb3JFYWNo
Tm9kZTogZnVuY3Rpb24obm9kZSkKICAgICB7CiAgICAgICAgIHZhciBzY3JpcHRTeW50YXhUcmVl
ID0gdGhpcy5fc2NyaXB0Ll9zY3JpcHRTeW50YXhUcmVlOwpAQCAtMjcxLDEzICsyMzAsNSBAQCBX
ZWJJbnNwZWN0b3IuVHlwZVRva2VuQW5ub3RhdG9yLnByb3RvdHlwCiAKICAgICAgICAgdGhpcy5f
dHlwZVRva2VuTm9kZXMgPSBbXTsKICAgICAgICAgdGhpcy5fdHlwZVRva2VuQm9va21hcmtzID0g
W107Ci0gICAgfSwKLQotICAgIF9jbGVhclRpbWVvdXRJZk5lZWRlZDogZnVuY3Rpb24oKQotICAg
IHsKLSAgICAgICAgaWYgKHRoaXMuX3RpbWVvdXRJZGVudGlmaWVyKSB7Ci0gICAgICAgICAgICBj
bGVhclRpbWVvdXQodGhpcy5fdGltZW91dElkZW50aWZpZXIpOwotICAgICAgICAgICAgdGhpcy5f
dGltZW91dElkZW50aWZpZXIgPSBudWxsOwotICAgICAgICB9CiAgICAgfQogfTsKSW5kZXg6IFNv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1NvdXJjZUNvZGVUZXh0RWRp
dG9yLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNl
L1ZpZXdzL1NvdXJjZUNvZGVUZXh0RWRpdG9yLmpzCShyZXZpc2lvbiAxNzY5NjQpCisrKyBTb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9Tb3VyY2VDb2RlVGV4dEVkaXRv
ci5qcwkod29ya2luZyBjb3B5KQpAQCAtMzYsOCArMzYsOCBAQCBXZWJJbnNwZWN0b3IuU291cmNl
Q29kZVRleHRFZGl0b3IgPSBmdW5jCiAKICAgICBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5jYWxs
KHRoaXMsIG51bGwsIG51bGwsIHRoaXMpOwogCi0gICAgdGhpcy5fdHlwZVRva2VuQW5ub3RhdG9y
ID0gbnVsbDsKICAgICB0aGlzLl90eXBlVG9rZW5TY3JvbGxIYW5kbGVyID0gbnVsbDsKKyAgICB0
aGlzLl9hbm5vdGF0b3JNYW5hZ2VyID0gbmV3IFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0QW5ub3Rh
dG9yTWFuYWdlcjsKIAogICAgIC8vIEZJWE1FOiBDdXJyZW50bHkgdGhpcyBqdXN0IGp1bXBzIGJl
dHdlZW4gcmVzb3VyY2VzIGFuZCByZWxhdGVkIHNvdXJjZSBtYXAgcmVzb3VyY2VzLiBJdCBkb2Vz
bid0ICJqdW1wIHRvIHN5bWJvbCIgeWV0LgogICAgIHRoaXMuX3VwZGF0ZVRva2VuVHJhY2tpbmdD
b250cm9sbGVyU3RhdGUoKTsKQEAgLTkwLDYgKzkwLDggQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNv
ZGVUZXh0RWRpdG9yLkR1cmF0aQogCiBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3Iu
QXV0b0Zvcm1hdE1pbmltdW1MaW5lTGVuZ3RoID0gNTAwOwogCitXZWJJbnNwZWN0b3IuU291cmNl
Q29kZVRleHRFZGl0b3IuVHlwZVRva2VuQW5ub3RhdG9yS2V5ID0gIlR5cGVUb2tlbkFubm90YXRv
cktleSI7CisKIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5FdmVudCA9IHsKICAg
ICBDb250ZW50V2lsbFBvcHVsYXRlOiAic291cmNlLWNvZGUtdGV4dC1lZGl0b3ItY29udGVudC13
aWxsLXBvcHVsYXRlIiwKICAgICBDb250ZW50RGlkUG9wdWxhdGU6ICJzb3VyY2UtY29kZS10ZXh0
LWVkaXRvci1jb250ZW50LWRpZC1wb3B1bGF0ZSIKQEAgLTEwOSw4ICsxMTEsNyBAQCBXZWJJbnNw
ZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90CiAgICAgewogICAgICAgICBXZWJJbnNw
ZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuc2hvd24uY2FsbCh0aGlzKTsKIAotICAgICAgICBp
ZiAodGhpcy5fdHlwZVRva2VuQW5ub3RhdG9yKQotICAgICAgICAgICAgdGhpcy5fdHlwZVRva2Vu
QW5ub3RhdG9yLnJlc3VtZSgpOworICAgICAgICB0aGlzLl9hbm5vdGF0b3JNYW5hZ2VyLnJlc3Vt
ZUFsbCgpOwogICAgIH0sCiAKICAgICBoaWRkZW46IGZ1bmN0aW9uKCkKQEAgLTEyMyw4ICsxMjQs
NyBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90CiAgICAgICAgIAog
ICAgICAgICB0aGlzLl9kaXNtaXNzRWRpdGluZ0NvbnRyb2xsZXIodHJ1ZSk7CiAKLSAgICAgICAg
aWYgKHRoaXMuX3R5cGVUb2tlbkFubm90YXRvcikKLSAgICAgICAgICAgIHRoaXMuX3R5cGVUb2tl
bkFubm90YXRvci5wYXVzZSgpOworICAgICAgICB0aGlzLl9hbm5vdGF0b3JNYW5hZ2VyLnBhdXNl
QWxsKCk7CiAgICAgfSwKIAogICAgIGNsb3NlOiBmdW5jdGlvbigpCkBAIC0xNjYsNyArMTY2LDcg
QEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdAogCiAgICAgY2FuU2hv
d1R5cGVBbm5vdGF0aW9uczogZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgcmV0dXJuICEhdGhp
cy5fdHlwZVRva2VuQW5ub3RhdG9yOworICAgICAgICByZXR1cm4gISF0aGlzLl9hbm5vdGF0b3JN
YW5hZ2VyLmdldEFubm90YXRvcihXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IuVHlw
ZVRva2VuQW5ub3RhdG9yS2V5KTsKICAgICB9LAogCiAgICAgY3VzdG9tUGVyZm9ybVNlYXJjaDog
ZnVuY3Rpb24ocXVlcnkpCkBAIC0yNTUsMTQgKzI1NSwyMCBAQCBXZWJJbnNwZWN0b3IuU291cmNl
Q29kZVRleHRFZGl0b3IucHJvdG90CiAKICAgICAgICAgZm9yICh2YXIgcmFuZ2Ugb2YgbmV3UmFu
Z2VzKQogICAgICAgICAgICAgdGhpcy5fdXBkYXRlRWRpdGFibGVNYXJrZXJzKHJhbmdlKTsKKwor
ICAgICAgICB0aGlzLl9hbm5vdGF0b3JNYW5hZ2VyLmNsZWFyQWxsKCk7CisgICAgICAgIHRoaXMu
X2Fubm90YXRvck1hbmFnZXIucmVtb3ZlQWxsQW5ub3RhdG9ycygpOworICAgICAgICBpZiAodGhp
cy5fdHlwZVRva2VuU2Nyb2xsSGFuZGxlcikKKyAgICAgICAgICAgIHRoaXMuX2Rpc2FibGVTY3Jv
bGxFdmVudHNGb3JUeXBlVG9rZW5Bbm5vdGF0b3IoKTsKICAgICB9LAogCiAgICAgdG9nZ2xlVHlw
ZUFubm90YXRpb25zOiBmdW5jdGlvbigpCiAgICAgewotICAgICAgICBpZiAoIXRoaXMuX3R5cGVU
b2tlbkFubm90YXRvcikKKyAgICAgICAgdmFyIHR5cGVUb2tlbkFubm90YXRvciA9IHRoaXMuX2Fu
bm90YXRvck1hbmFnZXIuZ2V0QW5ub3RhdG9yKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVk
aXRvci5UeXBlVG9rZW5Bbm5vdGF0b3JLZXkpOworICAgICAgICBpZiAoIXR5cGVUb2tlbkFubm90
YXRvcikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICB2YXIgaXNBY3RpdmF0
ZWQgPSB0aGlzLl90eXBlVG9rZW5Bbm5vdGF0b3IudG9nZ2xlVHlwZUFubm90YXRpb25zKCk7Cisg
ICAgICAgIHZhciBpc0FjdGl2YXRlZCA9IHR5cGVUb2tlbkFubm90YXRvci50b2dnbGVUeXBlQW5u
b3RhdGlvbnMoKTsKICAgICAgICAgaWYgKGlzQWN0aXZhdGVkKSB7CiAgICAgICAgICAgICBSdW50
aW1lQWdlbnQuZW5hYmxlVHlwZVByb2ZpbGVyKCk7CiAgICAgICAgICAgICB0aGlzLl9lbmFibGVT
Y3JvbGxFdmVudHNGb3JUeXBlVG9rZW5Bbm5vdGF0b3IoKTsKQEAgLTMwMiw4ICszMDgsNyBAQCBX
ZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90CiAgICAgewogICAgICAgICBX
ZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUucHJldHR5UHJpbnQuY2FsbCh0aGlzLCBw
cmV0dHkpOwogCi0gICAgICAgIGlmICh0aGlzLl90eXBlVG9rZW5Bbm5vdGF0b3IgJiYgdGhpcy5f
dHlwZVRva2VuQW5ub3RhdG9yLmlzQWN0aXZlKQotICAgICAgICAgICAgdGhpcy5fdHlwZVRva2Vu
QW5ub3RhdG9yLnJlc2V0KCk7CisgICAgICAgIHRoaXMuX2Fubm90YXRvck1hbmFnZXIucmVzZXRB
bGxJZkFjdGl2ZSgpOwogICAgIH0sCiAKICAgICAvLyBQcml2YXRlCkBAIC0xMDQyLDE2ICsxMDQ3
LDE0IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3QKICAgICBfZGVi
dWdnZXJEaWRQYXVzZTogZnVuY3Rpb24oZXZlbnQpCiAgICAgewogICAgICAgICB0aGlzLl91cGRh
dGVUb2tlblRyYWNraW5nQ29udHJvbGxlclN0YXRlKCk7Ci0gICAgICAgIGlmICh0aGlzLl90eXBl
VG9rZW5Bbm5vdGF0b3IgJiYgdGhpcy5fdHlwZVRva2VuQW5ub3RhdG9yLmlzQWN0aXZlKQotICAg
ICAgICAgICAgdGhpcy5fdHlwZVRva2VuQW5ub3RhdG9yLnJlZnJlc2goKTsKKyAgICAgICAgdGhp
cy5fYW5ub3RhdG9yTWFuYWdlci5yZWZyZXNoQWxsSWZBY3RpdmUoKTsKICAgICB9LAogCiAgICAg
X2RlYnVnZ2VyRGlkUmVzdW1lOiBmdW5jdGlvbihldmVudCkKICAgICB7CiAgICAgICAgIHRoaXMu
X3VwZGF0ZVRva2VuVHJhY2tpbmdDb250cm9sbGVyU3RhdGUoKTsKICAgICAgICAgdGhpcy5fZGlz
bWlzc1BvcG92ZXIoKTsKLSAgICAgICAgaWYgKHRoaXMuX3R5cGVUb2tlbkFubm90YXRvciAmJiB0
aGlzLl90eXBlVG9rZW5Bbm5vdGF0b3IuaXNBY3RpdmUpCi0gICAgICAgICAgICB0aGlzLl90eXBl
VG9rZW5Bbm5vdGF0b3IucmVmcmVzaCgpOworICAgICAgICB0aGlzLl9hbm5vdGF0b3JNYW5hZ2Vy
LnJlZnJlc2hBbGxJZkFjdGl2ZSgpOwogICAgIH0sCiAKICAgICBfc291cmNlQ29kZVNvdXJjZU1h
cEFkZGVkOiBmdW5jdGlvbihldmVudCkKQEAgLTEwNjcsNyArMTA3MCw3IEBAIFdlYkluc3BlY3Rv
ci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3QKICAgICAgICAgdmFyIG1vZGUgPSBXZWJJbnNw
ZWN0b3IuQ29kZU1pcnJvclRva2VuVHJhY2tpbmdDb250cm9sbGVyLk1vZGUuTm9uZTsKICAgICAg
ICAgaWYgKFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1hbmFnZXIucGF1c2VkKQogICAgICAgICAgICAg
bW9kZSA9IFdlYkluc3BlY3Rvci5Db2RlTWlycm9yVG9rZW5UcmFja2luZ0NvbnRyb2xsZXIuTW9k
ZS5KYXZhU2NyaXB0RXhwcmVzc2lvbjsKLSAgICAgICAgZWxzZSBpZiAodGhpcy5fdHlwZVRva2Vu
QW5ub3RhdG9yICYmIHRoaXMuX3R5cGVUb2tlbkFubm90YXRvci5pc0FjdGl2ZSkKKyAgICAgICAg
ZWxzZSBpZiAodGhpcy5fYW5ub3RhdG9yTWFuYWdlci5pc0Fubm90YXRvckFjdGl2ZShXZWJJbnNw
ZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IuVHlwZVRva2VuQW5ub3RhdG9yS2V5KSkKICAgICAg
ICAgICAgIG1vZGUgPSBXZWJJbnNwZWN0b3IuQ29kZU1pcnJvclRva2VuVHJhY2tpbmdDb250cm9s
bGVyLk1vZGUuSmF2YVNjcmlwdFR5cGVJbmZvcm1hdGlvbjsKICAgICAgICAgZWxzZSBpZiAodGhp
cy5faGFzQ29sb3JNYXJrZXJzKCkpCiAgICAgICAgICAgICBtb2RlID0gV2ViSW5zcGVjdG9yLkNv
ZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udHJvbGxlci5Nb2RlLk1hcmtlZFRva2VuczsKQEAgLTE1
MjEsMjQgKzE1MjQsMzEgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3Rv
dAogICAgICAgICBkZWxldGUgdGhpcy5fZWRpdGluZ0NvbnRyb2xsZXI7CiAgICAgfSwKIAotICAg
IF9tYWtlVHlwZVRva2VuQW5ub3RhdG9yOiBmdW5jdGlvbigpCisgICAgX2dldEFzc29jaWF0ZWRT
Y3JpcHQ6IGZ1bmN0aW9uKCkKICAgICB7Ci0gICAgICAgIGlmICghUnVudGltZUFnZW50LmdldFJ1
bnRpbWVUeXBlc0ZvclZhcmlhYmxlc0F0T2Zmc2V0cykKLSAgICAgICAgICAgIHJldHVybjsKLQog
ICAgICAgICB2YXIgc2NyaXB0ID0gbnVsbDsKICAgICAgICAgLy8gRklYTUU6IFRoaXMgbmVlZHMg
dG8gbWUgbW9kaWZpZWQgdG8gd29yayB3aXRoIEhUTUwgZmlsZXMgd2l0aCBpbmxpbmUgc2NyaXB0
IHRhZ3MuCiAgICAgICAgIGlmICh0aGlzLl9zb3VyY2VDb2RlIGluc3RhbmNlb2YgV2ViSW5zcGVj
dG9yLlNjcmlwdCkKICAgICAgICAgICAgIHNjcmlwdCA9IHRoaXMuX3NvdXJjZUNvZGU7CiAgICAg
ICAgIGVsc2UgaWYgKHRoaXMuX3NvdXJjZUNvZGUgaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuUmVz
b3VyY2UgJiYgdGhpcy5fc291cmNlQ29kZS50eXBlID09PSBXZWJJbnNwZWN0b3IuUmVzb3VyY2Uu
VHlwZS5TY3JpcHQgJiYgdGhpcy5fc291cmNlQ29kZS5zY3JpcHRzLmxlbmd0aCkKICAgICAgICAg
ICAgIHNjcmlwdCA9IHRoaXMuX3NvdXJjZUNvZGUuc2NyaXB0c1swXTsKKyAgICAgICAgcmV0dXJu
IHNjcmlwdDsKKyAgICB9LAogCisgICAgX21ha2VUeXBlVG9rZW5Bbm5vdGF0b3I6IGZ1bmN0aW9u
KCkKKyAgICB7CisgICAgICAgIGlmICghUnVudGltZUFnZW50LmdldFJ1bnRpbWVUeXBlc0ZvclZh
cmlhYmxlc0F0T2Zmc2V0cykKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB2YXIgc2Ny
aXB0ID0gdGhpcy5fZ2V0QXNzb2NpYXRlZFNjcmlwdCgpOwogICAgICAgICBpZiAoIXNjcmlwdCkK
ICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICB0aGlzLl90eXBlVG9rZW5Bbm5vdGF0b3Ig
PSBuZXcgV2ViSW5zcGVjdG9yLlR5cGVUb2tlbkFubm90YXRvcih0aGlzLCBzY3JpcHQpOworICAg
ICAgICB2YXIgdHlwZVRva2VuQW5ub3RhdG9yID0gbmV3IFdlYkluc3BlY3Rvci5UeXBlVG9rZW5B
bm5vdGF0b3IodGhpcywgc2NyaXB0KTsKKyAgICAgICAgdGhpcy5fYW5ub3RhdG9yTWFuYWdlci5h
ZGRBbm5vdGF0b3IoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLlR5cGVUb2tlbkFu
bm90YXRvcktleSwgdHlwZVRva2VuQW5ub3RhdG9yKTsKKwogICAgICAgICBpZiAoV2ViSW5zcGVj
dG9yLnNob3dKYXZhU2NyaXB0VHlwZUluZm9ybWF0aW9uU2V0dGluZy52YWx1ZSkgewotICAgICAg
ICAgICAgdGhpcy5fdHlwZVRva2VuQW5ub3RhdG9yLnJlc2V0KCk7CisgICAgICAgICAgICB0eXBl
VG9rZW5Bbm5vdGF0b3IucmVzZXQoKTsKICAgICAgICAgICAgIHRoaXMuX2VuYWJsZVNjcm9sbEV2
ZW50c0ZvclR5cGVUb2tlbkFubm90YXRvcigpOwogICAgICAgICB9CiAgICAgfSwKQEAgLTE1NjAs
OCArMTU3MCw4IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3QKIAog
ICAgIF9tYWtlVHlwZVRva2VuU2Nyb2xsRXZlbnRIYW5kbGVyOiBmdW5jdGlvbigpCiAgICAgewot
ICAgICAgICB2YXIgdHlwZVRva2VuQW5ub3RhdG9yID0gdGhpcy5fdHlwZVRva2VuQW5ub3RhdG9y
OwogICAgICAgICB2YXIgdGltZW91dElkZW50aWZpZXIgPSBudWxsOworICAgICAgICB2YXIgdHlw
ZVRva2VuQW5ub3RhdG9yID0gdGhpcy5fYW5ub3RhdG9yTWFuYWdlci5nZXRBbm5vdGF0b3IoV2Vi
SW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLlR5cGVUb2tlbkFubm90YXRvcktleSk7CiAg
ICAgICAgIGZ1bmN0aW9uIHNjcm9sbEhhbmRsZXIoKQogICAgICAgICB7CiAgICAgICAgICAgICBp
ZiAodGltZW91dElkZW50aWZpZXIpCkBAIC0xNTcxLDExICsxNTgxLDE2IEBAIFdlYkluc3BlY3Rv
ci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3QKIAogICAgICAgICAgICAgdGltZW91dElkZW50
aWZpZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgIHRpbWVvdXRJ
ZGVudGlmaWVyID0gbnVsbDsKLSAgICAgICAgICAgICAgICB0eXBlVG9rZW5Bbm5vdGF0b3IucmVz
dW1lKCk7Ci0gICAgICAgICAgICB9LCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3Iu
RHVyYXRpb25Ub1VwZGF0ZVR5cGVUb2tlbnNBZnRlclNjcm9sbGluZyk7CisgICAgICAgICAgICAg
ICAgdmFyIHR5cGVUb2tlbkFubm90YXRvciA9IHRoaXMuX2Fubm90YXRvck1hbmFnZXIuZ2V0QW5u
b3RhdG9yKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5UeXBlVG9rZW5Bbm5vdGF0
b3JLZXkpOworICAgICAgICAgICAgICAgIC8vIFRoZXJlIGlzIGEgc21hbGwgY2hhbmNlIHRoYXQg
d2UgZGlzYWJsZWQgdGhlIHR5cGUgdG9rZW4gYW5ub3RhdG9yIGFuZCB0aGUgc2Nyb2xsIGhhbmRs
ZXIgCisgICAgICAgICAgICAgICAgLy8gZHVyaW5nIHRoZSBEdXJhdGlvblRvVXBkYXRlVHlwZVRv
a2Vuc0FmdGVyU2Nyb2xsaW5nIHRpbWUgZGVsYXksIHNvIHdlIG11c3QgZW5zdXJlIHRoYXQgdGhp
cworICAgICAgICAgICAgICAgIC8vIGlzIG5vdCBudWxsLgorICAgICAgICAgICAgICAgIGlmICh0
eXBlVG9rZW5Bbm5vdGF0b3IpCisgICAgICAgICAgICAgICAgICAgIHR5cGVUb2tlbkFubm90YXRv
ci5yZXN1bWUoKTsKKyAgICAgICAgICAgIH0uYmluZCh0aGlzKSwgV2ViSW5zcGVjdG9yLlNvdXJj
ZUNvZGVUZXh0RWRpdG9yLkR1cmF0aW9uVG9VcGRhdGVUeXBlVG9rZW5zQWZ0ZXJTY3JvbGxpbmcp
OwogICAgICAgICB9CiAKLSAgICAgICAgcmV0dXJuIHNjcm9sbEhhbmRsZXI7CisgICAgICAgIHJl
dHVybiBzY3JvbGxIYW5kbGVyLmJpbmQodGhpcyk7CiAgICAgfQogfTsKIAo=
</data>
<flag name="review"
          id="267825"
          type_id="1"
          status="-"
          setter="joepeck"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>243566</attachid>
            <date>2014-12-19 12:48:22 -0800</date>
            <delta_ts>2014-12-19 12:56:18 -0800</delta_ts>
            <desc>patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>27224</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwkocmV2aXNpb24gMTc3NTg5KQorKysgU291cmNl
L1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc0IEBA
CisyMDE0LTEyLTE5ICBTYWFtIEJhcmF0aSAgPHNhYW1iYXJhdGkxQGdtYWlsLmNvbT4KKworICAg
ICAgICBXZWIgSW5zcGVjdG9yOiBBYnN0cmFjdCBjb21tb24gZnVuY3Rpb25zIGZyb20gVHlwZVRv
a2VuQW5ub3RhdG9yIGludG8gYSBwYXJlbnQgY2xhc3MgYW5kIGludHJvZHVjZSBhbiBBbm5vdGF0
b3JNYW5hZ2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMzk0MjYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBUaGlzIHBhdGNoIGNyZWF0ZXMgYSBwYXJlbnQgY2xhc3MsIEFubm90YXRvciwgdGhhdCBUeXBl
VG9rZW5Bbm5vdGF0b3IKKyAgICAgICAgaW5oZXJpdHMgZnJvbS4gQW5ub3RhdG9yIGRlZmluZXMg
YSBjb21tb24gc2V0IG9mIGZ1bmN0aW9uYWxpdHkKKyAgICAgICAgdGhhdCBhIHRleHQgZWRpdG9y
IGFubm90YXRvciBjYW4gdXNlIHRvIG1hcmsgdXAgVUkuIFRoaXMgCisgICAgICAgIGlzIGluIHBy
ZXBhcmF0aW9uIG90aGVyIGNsYXNzZXMgdGhhdCB3aWxsIGluaGVyaXQgZnJvbSBBbm5vdGF0b3Iu
CisgICAgICAgIAorICAgICAgICBUaGlzIHBhdGNoIGFsc28gaW50cm9kdWNlcyBBbm5vdGF0b3JN
YW5hZ2VyIHdoaWNoIGNvbnRyb2xzIGEKKyAgICAgICAgc2V0IG9mIEFubm90YXRvcnMgYW5kIHBy
b3ZpZGVzIGEgc2luZ2xlIGludGVyZmFjZSBmb3IKKyAgICAgICAgY29udHJvbGxpbmcgdGhlbS4K
KworICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvQW5ub3RhdG9yLmpzOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkluc3BlY3Rvci5Bbm5vdGF0b3IpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLkFubm90YXRvci5wcm90b3R5cGUuZ2V0IHRleHRFZGl0b3IpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLkFubm90YXRvci5wcm90b3R5cGUuZ2V0IGlzQWN0aXZlKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5Bbm5vdGF0b3IucHJvdG90eXBlLnBhdXNlKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5Bbm5vdGF0b3IucHJvdG90eXBlLnJlc3VtZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQW5u
b3RhdG9yLnByb3RvdHlwZS5yZWZyZXNoKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Bbm5vdGF0
b3IucHJvdG90eXBlLnJlc2V0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Bbm5vdGF0b3IucHJv
dG90eXBlLmNsZWFyKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Bbm5vdGF0b3IucHJvdG90eXBl
Lmluc2VydEFubm90YXRpb25zKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Bbm5vdGF0b3IucHJv
dG90eXBlLmNsZWFyQW5ub3RhdGlvbnMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkFubm90YXRv
ci5wcm90b3R5cGUuX2NsZWFyVGltZW91dElmTmVlZGVkKToKKyAgICAgICAgKiBVc2VySW50ZXJm
YWNlL0NvbnRyb2xsZXJzL0Fubm90YXRvck1hbmFnZXIuanM6IEFkZGVkLgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLkFubm90YXRvck1hbmFnZXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkFubm90
YXRvck1hbmFnZXIucHJvdG90eXBlLmFkZEFubm90YXRvcik6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuQW5ub3RhdG9yTWFuYWdlci5wcm90b3R5cGUuaXNBbm5vdGF0b3JBY3RpdmUpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLkFubm90YXRvck1hbmFnZXIucHJvdG90eXBlLnBhdXNlQWxsKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5Bbm5vdGF0b3JNYW5hZ2VyLnByb3RvdHlwZS5yZXN1bWVBbGwp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLkFubm90YXRvck1hbmFnZXIucHJvdG90eXBlLnJlZnJl
c2hBbGxJZkFjdGl2ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQW5ub3RhdG9yTWFuYWdlci5w
cm90b3R5cGUucmVzZXRBbGxJZkFjdGl2ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQW5ub3Rh
dG9yTWFuYWdlci5wcm90b3R5cGUuY2xlYXJBbGwpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkFu
bm90YXRvck1hbmFnZXIucHJvdG90eXBlLnJlbW92ZUFsbEFubm90YXRvcnMpOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLkFubm90YXRvck1hbmFnZXIucHJvdG90eXBlLl9nZXRBbm5vdGF0b3JzKToK
KyAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL1R5cGVUb2tlbkFubm90YXRvci5q
czoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UeXBlVG9rZW5Bbm5vdGF0b3IpOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLlR5cGVUb2tlbkFubm90YXRvci5wcm90b3R5cGUuaW5zZXJ0QW5ub3RhdGlv
bnMuKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UeXBlVG9rZW5Bbm5vdGF0b3IucHJvdG90eXBl
LmNsZWFyQW5ub3RhdGlvbnMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlR5cGVUb2tlbkFubm90
YXRvci5wcm90b3R5cGUuX2luc2VydFRva2VuKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UeXBl
VG9rZW5Bbm5vdGF0b3IucHJvdG90eXBlLmdldCBpc0FjdGl2ZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJJbnNwZWN0b3IuVHlwZVRva2VuQW5ub3RhdG9yLnByb3RvdHlwZS5nZXQgc291cmNlQ29k
ZVRleHRFZGl0b3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViSW5zcGVjdG9yLlR5cGVUb2tlbkFu
bm90YXRvci5wcm90b3R5cGUucGF1c2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViSW5zcGVjdG9y
LlR5cGVUb2tlbkFubm90YXRvci5wcm90b3R5cGUucmVzdW1lKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkluc3BlY3Rvci5UeXBlVG9rZW5Bbm5vdGF0b3IucHJvdG90eXBlLnJlZnJlc2gpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViSW5zcGVjdG9yLlR5cGVUb2tlbkFubm90YXRvci5wcm90b3R5cGUu
cmVzZXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViSW5zcGVjdG9yLlR5cGVUb2tlbkFubm90YXRv
ci5wcm90b3R5cGUuX2luc2VydEFubm90YXRpb25zLik6IERlbGV0ZWQuCisgICAgICAgIChXZWJJ
bnNwZWN0b3IuVHlwZVRva2VuQW5ub3RhdG9yLnByb3RvdHlwZS5fY2xlYXJUaW1lb3V0SWZOZWVk
ZWQpOiBEZWxldGVkLgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTWFpbi5odG1sOgorICAgICAg
ICAqIFVzZXJJbnRlcmZhY2UvVmlld3MvU291cmNlQ29kZVRleHRFZGl0b3IuanM6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS5zaG93bik6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLmhpZGRlbik6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLmNhblNob3dUeXBl
QW5ub3RhdGlvbnMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9y
LnByb3RvdHlwZS5jb250ZW50RGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3Vy
Y2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUudG9nZ2xlVHlwZUFubm90YXRpb25zKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUucHJldHR5UHJp
bnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlw
ZS5fZGVidWdnZXJEaWRQYXVzZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRl
eHRFZGl0b3IucHJvdG90eXBlLl9kZWJ1Z2dlckRpZFJlc3VtZSk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLl91cGRhdGVUb2tlblRyYWNraW5n
Q29udHJvbGxlclN0YXRlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVk
aXRvci5wcm90b3R5cGUuX2dldEFzc29jaWF0ZWRTY3JpcHQpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS5fbWFrZVR5cGVUb2tlbkFubm90YXRv
cik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBl
Ll9tYWtlVHlwZVRva2VuU2Nyb2xsRXZlbnRIYW5kbGVyLnNjcm9sbEhhbmRsZXIpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS5fbWFrZVR5cGVU
b2tlblNjcm9sbEV2ZW50SGFuZGxlcik6CisgICAgICAgICogVXNlckludGVyZmFjZS9WaWV3cy9U
eXBlVG9rZW5WaWV3LmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlR5cGVUb2tlblZpZXcucHJv
dG90eXBlLl9zZXRVcE1vdXNlb3ZlckhhbmRsZXJzKToKKwogMjAxNC0xMi0xOSAgQ29tbWl0IFF1
ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9s
bGluZyBvdXQgcjE3NzU3NC4KSW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJm
YWNlL01haW4uaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlcklu
dGVyZmFjZS9NYWluLmh0bWwJKHJldmlzaW9uIDE3Njk2NCkKKysrIFNvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Vc2VySW50ZXJmYWNlL01haW4uaHRtbAkod29ya2luZyBjb3B5KQpAQCAtNDU5LDkgKzQ1
OSwxMSBAQAogICAgIDxzY3JpcHQgc3JjPSJWaWV3cy9UeXBlUHJvcGVydGllc1NlY3Rpb24uanMi
Pjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJWaWV3cy9UeXBlVG9rZW5WaWV3LmpzIj48L3Nj
cmlwdD4KIAorICAgIDxzY3JpcHQgc3JjPSJDb250cm9sbGVycy9Bbm5vdGF0b3IuanMiPjwvc2Ny
aXB0PgogICAgIDxzY3JpcHQgc3JjPSJDb250cm9sbGVycy9Db2RlTWlycm9yRWRpdGluZ0NvbnRy
b2xsZXIuanMiPjwvc2NyaXB0PgogCiAgICAgPHNjcmlwdCBzcmM9IkNvbnRyb2xsZXJzL0FuYWx5
emVyTWFuYWdlci5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkNvbnRyb2xsZXJzL0Fu
bm90YXRvck1hbmFnZXIuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJDb250cm9sbGVy
cy9BcHBsaWNhdGlvbkNhY2hlTWFuYWdlci5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9
IkNvbnRyb2xsZXJzL0JyYW5jaE1hbmFnZXIuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3Jj
PSJDb250cm9sbGVycy9DU1NTdHlsZU1hbmFnZXIuanMiPjwvc2NyaXB0PgpJbmRleDogU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvQW5ub3RhdG9yLmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xs
ZXJzL0Fubm90YXRvci5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0Fubm90YXRvci5qcwkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDExMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgU2FhbSBCYXJhdGkgPHNhYW1i
YXJhdGkxQGdtYWlsLmNvbT4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworV2ViSW5zcGVjdG9yLkFubm90YXRvciA9IGZ1
bmN0aW9uKHRleHRFZGl0b3IpCit7CisgICAgV2ViSW5zcGVjdG9yLk9iamVjdC5jYWxsKHRoaXMp
OworCisgICAgY29uc29sZS5hc3NlcnQodGV4dEVkaXRvciBpbnN0YW5jZW9mIFdlYkluc3BlY3Rv
ci5UZXh0RWRpdG9yLCB0ZXh0RWRpdG9yKTsKKworICAgIHRoaXMuX3RleHRFZGl0b3IgPSB0ZXh0
RWRpdG9yOworICAgIHRoaXMuX3RpbWVvdXRJZGVudGlmaWVyID0gbnVsbDsKKyAgICB0aGlzLl9p
c0FjdGl2ZSA9IGZhbHNlOworfTsKKworV2ViSW5zcGVjdG9yLkFubm90YXRvci5wcm90b3R5cGUg
PSB7CisgICAgY29uc3RydWN0b3I6IFdlYkluc3BlY3Rvci5Bbm5vdGF0b3IsCisgICAgX19wcm90
b19fOiBXZWJJbnNwZWN0b3IuT2JqZWN0LnByb3RvdHlwZSwKKworICAgIC8vIFB1YmxpYworCisg
ICAgZ2V0IHRleHRFZGl0b3IoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3RleHRFZGl0
b3I7CisgICAgfSwKKworICAgIGdldCBpc0FjdGl2ZSgpCisgICAgeworICAgICAgICByZXR1cm4g
dGhpcy5faXNBY3RpdmU7CisgICAgfSwKKworICAgIHBhdXNlOiBmdW5jdGlvbigpCisgICAgewor
ICAgICAgICB0aGlzLl9jbGVhclRpbWVvdXRJZk5lZWRlZCgpOworICAgICAgICB0aGlzLl9pc0Fj
dGl2ZSA9IGZhbHNlOworICAgIH0sCisKKyAgICByZXN1bWU6IGZ1bmN0aW9uKCkKKyAgICB7Cisg
ICAgICAgIHRoaXMuX2NsZWFyVGltZW91dElmTmVlZGVkKCk7CisgICAgICAgIHRoaXMuX2lzQWN0
aXZlID0gdHJ1ZTsKKyAgICAgICAgdGhpcy5pbnNlcnRBbm5vdGF0aW9ucygpOworICAgIH0sCisK
KyAgICByZWZyZXNoOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBjb25zb2xlLmFzc2VydCh0
aGlzLl9pc0FjdGl2ZSk7CisgICAgICAgIGlmICghdGhpcy5faXNBY3RpdmUpCisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgdGhpcy5fY2xlYXJUaW1lb3V0SWZOZWVkZWQoKTsKKyAgICAg
ICAgdGhpcy5pbnNlcnRBbm5vdGF0aW9ucygpOworICAgIH0sCisKKyAgICByZXNldDogZnVuY3Rp
b24oKQorICAgIHsKKyAgICAgICAgdGhpcy5fY2xlYXJUaW1lb3V0SWZOZWVkZWQoKTsKKyAgICAg
ICAgdGhpcy5faXNBY3RpdmUgPSB0cnVlOworICAgICAgICB0aGlzLmNsZWFyQW5ub3RhdGlvbnMo
KTsKKyAgICAgICAgdGhpcy5pbnNlcnRBbm5vdGF0aW9ucygpOworICAgIH0sCisKKyAgICBjbGVh
cjogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy5wYXVzZSgpOworICAgICAgICB0aGlz
LmNsZWFyQW5ub3RhdGlvbnMoKTsKKyAgICB9LAorCisgICAgLy8gUHJvdGVjdGVkCisKKyAgICBp
bnNlcnRBbm5vdGF0aW9uczogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgLy8gSW1wbGVtZW50
ZWQgYnkgc3ViY2xhc3Nlcy4KKyAgICB9LAorCisgICAgY2xlYXJBbm5vdGF0aW9uczogZnVuY3Rp
b24oKQorICAgIHsKKyAgICAgICAgLy8gSW1wbGVtZW50ZWQgYnkgc3ViY2xhc3Nlcy4KKyAgICB9
LAorCisgICAgLy8gUHJpdmF0ZQorCisgICAgX2NsZWFyVGltZW91dElmTmVlZGVkOiBmdW5jdGlv
bigpCisgICAgeworICAgICAgICBpZiAodGhpcy5fdGltZW91dElkZW50aWZpZXIpIHsKKyAgICAg
ICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0SWRlbnRpZmllcik7CisgICAgICAgICAg
ICB0aGlzLl90aW1lb3V0SWRlbnRpZmllciA9IG51bGw7CisgICAgICAgIH0KKyAgICB9Cit9OwpJ
bmRleDogU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvQW5u
b3RhdG9yTWFuYWdlci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9Db250cm9sbGVycy9Bbm5vdGF0b3JNYW5hZ2VyLmpzCShyZXZpc2lvbiAwKQor
KysgU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvQW5ub3Rh
dG9yTWFuYWdlci5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwNCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgU2FhbSBCYXJhdGkgPHNhYW1iYXJhdGkxQGdtYWlsLmNvbT4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworV2ViSW5zcGVjdG9yLkFubm90YXRvck1hbmFnZXIgPSBmdW5jdGlvbigpCit7CisgICAg
V2ViSW5zcGVjdG9yLk9iamVjdC5jYWxsKHRoaXMpOworCisgICAgdGhpcy5fYW5ub3RhdG9ycyA9
IG5ldyBNYXA7Cit9OworCitXZWJJbnNwZWN0b3IuQW5ub3RhdG9yTWFuYWdlci5wcm90b3R5cGUg
PSB7CisgICAgY29uc3RydWN0b3I6IFdlYkluc3BlY3Rvci5Bbm5vdGF0b3JNYW5hZ2VyLAorICAg
IF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLk9iamVjdC5wcm90b3R5cGUsCisKKyAgICAvLyBQdWJs
aWMKKworICAgIGFkZEFubm90YXRvcjogZnVuY3Rpb24oa2V5LCBhbm5vdGF0b3IpCisgICAgewor
ICAgICAgICBjb25zb2xlLmFzc2VydChhbm5vdGF0b3IgaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3Iu
QW5ub3RhdG9yKTsKKyAgICAgICAgdGhpcy5fYW5ub3RhdG9ycy5zZXQoa2V5LCBhbm5vdGF0b3Ip
OworICAgIH0sCisKKyAgICBnZXRBbm5vdGF0b3I6IGZ1bmN0aW9uKGtleSkKKyAgICB7CisgICAg
ICAgIHJldHVybiB0aGlzLl9hbm5vdGF0b3JzLmdldChrZXkpIHx8IG51bGw7CisgICAgfSwKKwor
ICAgIGlzQW5ub3RhdG9yQWN0aXZlOiBmdW5jdGlvbihrZXkpCisgICAgeworICAgICAgICB2YXIg
YW5ub3RhdG9yID0gdGhpcy5nZXRBbm5vdGF0b3Ioa2V5KTsKKyAgICAgICAgaWYgKCFhbm5vdGF0
b3IpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBhbm5vdGF0b3Iu
aXNBY3RpdmU7CisgICAgfSwKKworICAgIHBhdXNlQWxsOiBmdW5jdGlvbigpCisgICAgeworICAg
ICAgICBmb3IgKHZhciBhbm5vdGF0b3Igb2YgdGhpcy5fZ2V0QW5ub3RhdG9ycygpKQorICAgICAg
ICAgICAgYW5ub3RhdG9yLnBhdXNlKCk7CisgICAgfSwKKworICAgIHJlc3VtZUFsbDogZnVuY3Rp
b24oKQorICAgIHsKKyAgICAgICAgZm9yICh2YXIgYW5ub3RhdG9yIG9mIHRoaXMuX2dldEFubm90
YXRvcnMoKSkKKyAgICAgICAgICAgIGFubm90YXRvci5yZXN1bWUoKTsKKyAgICB9LAorCisgICAg
cmVmcmVzaEFsbElmQWN0aXZlOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBmb3IgKHZhciBh
bm5vdGF0b3Igb2YgdGhpcy5fZ2V0QW5ub3RhdG9ycygpKSB7CisgICAgICAgICAgICBpZiAoYW5u
b3RhdG9yLmlzQWN0aXZlKQorICAgICAgICAgICAgICAgIGFubm90YXRvci5yZWZyZXNoKCk7Cisg
ICAgICAgIH0KKyAgICB9LAorCisgICAgcmVzZXRBbGxJZkFjdGl2ZTogZnVuY3Rpb24oKQorICAg
IHsKKyAgICAgICAgZm9yICh2YXIgYW5ub3RhdG9yIG9mIHRoaXMuX2dldEFubm90YXRvcnMoKSkg
eworICAgICAgICAgICAgaWYgKGFubm90YXRvci5pc0FjdGl2ZSkKKyAgICAgICAgICAgICAgICBh
bm5vdGF0b3IucmVzZXQoKTsKKyAgICAgICAgfQorICAgIH0sCisKKyAgICBjbGVhckFsbDogZnVu
Y3Rpb24oKQorICAgIHsKKyAgICAgICAgZm9yICh2YXIgYW5ub3RhdG9yIG9mIHRoaXMuX2dldEFu
bm90YXRvcnMoKSkKKyAgICAgICAgICAgIGFubm90YXRvci5jbGVhcigpOworICAgIH0sCisKKyAg
ICByZW1vdmVBbGxBbm5vdGF0b3JzOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB0aGlzLl9h
bm5vdGF0b3JzLmNsZWFyKCk7CisgICAgfSwKKworICAgIC8vIFByaXZhdGUKKworICAgIF9nZXRB
bm5vdGF0b3JzOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fYW5ub3Rh
dG9ycy52YWx1ZXMoKTsKKyAgICB9Cit9OwpJbmRleDogU291cmNlL1dlYkluc3BlY3RvclVJL1Vz
ZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvVHlwZVRva2VuQW5ub3RhdG9yLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL1R5cGVU
b2tlbkFubm90YXRvci5qcwkocmV2aXNpb24gMTc2OTY0KQorKysgU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvVHlwZVRva2VuQW5ub3RhdG9yLmpzCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNSw2NiArMjUsMTkgQEAKIAogV2ViSW5zcGVjdG9yLlR5cGVUb2tlbkFu
bm90YXRvciA9IGZ1bmN0aW9uKHNvdXJjZUNvZGVUZXh0RWRpdG9yLCBzY3JpcHQpCiB7Ci0gICAg
V2ViSW5zcGVjdG9yLk9iamVjdC5jYWxsKHRoaXMpOwotCi0gICAgY29uc29sZS5hc3NlcnQoc291
cmNlQ29kZVRleHRFZGl0b3IgJiYgc291cmNlQ29kZVRleHRFZGl0b3IgaW5zdGFuY2VvZiBXZWJJ
bnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IsIHNvdXJjZUNvZGVUZXh0RWRpdG9yKTsKLSAg
ICBjb25zb2xlLmFzc2VydChzY3JpcHQsIHNjcmlwdCk7CisgICAgV2ViSW5zcGVjdG9yLkFubm90
YXRvci5jYWxsKHRoaXMsIHNvdXJjZUNvZGVUZXh0RWRpdG9yKTsKIAogICAgIHRoaXMuX3Njcmlw
dCA9IHNjcmlwdDsKLSAgICB0aGlzLl9zb3VyY2VDb2RlVGV4dEVkaXRvciA9IHNvdXJjZUNvZGVU
ZXh0RWRpdG9yOwogICAgIHRoaXMuX3R5cGVUb2tlbk5vZGVzID0gW107CiAgICAgdGhpcy5fdHlw
ZVRva2VuQm9va21hcmtzID0gW107Ci0gICAgdGhpcy5fdGltZW91dElkZW50aWZpZXIgPSBudWxs
OwotICAgIHRoaXMuX2lzQWN0aXZlID0gZmFsc2U7CiB9OwogCiBXZWJJbnNwZWN0b3IuVHlwZVRv
a2VuQW5ub3RhdG9yLnByb3RvdHlwZSA9IHsKICAgICBjb25zdHJ1Y3RvcjogV2ViSW5zcGVjdG9y
LlR5cGVUb2tlbkFubm90YXRvciwKLSAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5PYmplY3Qu
cHJvdG90eXBlLAorICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLkFubm90YXRvci5wcm90b3R5
cGUsCiAKICAgICAvLyBQdWJsaWMKIAotICAgIGdldCBpc0FjdGl2ZSgpCi0gICAgewotICAgICAg
ICByZXR1cm4gdGhpcy5faXNBY3RpdmU7Ci0gICAgfSwKLQotICAgIGdldCBzb3VyY2VDb2RlVGV4
dEVkaXRvcigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fc291cmNlQ29kZVRleHRFZGl0
b3I7Ci0gICAgfSwKLQotICAgIHBhdXNlOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlz
Ll9jbGVhclRpbWVvdXRJZk5lZWRlZCgpOwotICAgICAgICB0aGlzLl9pc0FjdGl2ZSA9IGZhbHNl
OwotICAgIH0sCi0KLSAgICByZXN1bWU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMu
X2NsZWFyVGltZW91dElmTmVlZGVkKCk7Ci0gICAgICAgIHRoaXMuX2lzQWN0aXZlID0gdHJ1ZTsK
LSAgICAgICAgdGhpcy5faW5zZXJ0QW5ub3RhdGlvbnMoKTsKLSAgICB9LAotCi0gICAgcmVmcmVz
aDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgY29uc29sZS5hc3NlcnQodGhpcy5faXNBY3Rp
dmUpOwotICAgICAgICBpZiAoIXRoaXMuX2lzQWN0aXZlKQotICAgICAgICAgICAgcmV0dXJuOwot
Ci0gICAgICAgIHRoaXMuX2NsZWFyVGltZW91dElmTmVlZGVkKCk7Ci0gICAgICAgIHRoaXMuX2lu
c2VydEFubm90YXRpb25zKCk7Ci0gICAgfSwKLQotICAgIHJlc2V0OiBmdW5jdGlvbigpCi0gICAg
ewotICAgICAgICB0aGlzLl9jbGVhclRpbWVvdXRJZk5lZWRlZCgpOwotICAgICAgICB0aGlzLl9p
c0FjdGl2ZSA9IHRydWU7Ci0gICAgICAgIHRoaXMuX2NsZWFyVHlwZVRva2VucygpOwotICAgICAg
ICB0aGlzLl9pbnNlcnRBbm5vdGF0aW9ucygpOwotICAgIH0sCi0KICAgICB0b2dnbGVUeXBlQW5u
b3RhdGlvbnM6IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgICAgIGlmICh0aGlzLl9pc0FjdGl2ZSkg
ewpAQCAtOTgsOSArNTEsOSBAQCBXZWJJbnNwZWN0b3IuVHlwZVRva2VuQW5ub3RhdG9yLnByb3Rv
dHlwCiAgICAgICAgIHJldHVybiB0aGlzLl9pc0FjdGl2ZTsKICAgICB9LAogCi0gICAgLy8gUHJp
dmF0ZQorICAgIC8vIFByb3RlY3RlZAogCi0gICAgX2luc2VydEFubm90YXRpb25zOiBmdW5jdGlv
bigpCisgICAgaW5zZXJ0QW5ub3RhdGlvbnM6IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgICAgIGlm
ICghdGhpcy5faXNBY3RpdmUpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0xMTEsNyArNjQsNyBA
QCBXZWJJbnNwZWN0b3IuVHlwZVRva2VuQW5ub3RhdG9yLnByb3RvdHlwCiAgICAgICAgICAgICB0
aGlzLl9zY3JpcHQucmVxdWVzdFNjcmlwdFN5bnRheFRyZWUoZnVuY3Rpb24oc3ludGF4VHJlZSkg
ewogICAgICAgICAgICAgICAgIC8vIEFmdGVyIHJlcXVlc3RpbmcgdGhlIHRyZWUsIHdlIHN0aWxs
IG1pZ2h0IGdldCBhIG51bGwgdHJlZSBmcm9tIGEgcGFyc2UgZXJyb3IuCiAgICAgICAgICAgICAg
ICAgaWYgKHN5bnRheFRyZWUpCi0gICAgICAgICAgICAgICAgICAgIHRoaXMuX2luc2VydEFubm90
YXRpb25zKCk7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5zZXJ0QW5ub3RhdGlvbnMoKTsK
ICAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7CiAKICAgICAgICAgICAgIHJldHVybjsKQEAgLTEy
MCw3ICs3Myw3IEBAIFdlYkluc3BlY3Rvci5UeXBlVG9rZW5Bbm5vdGF0b3IucHJvdG90eXAKICAg
ICAgICAgaWYgKCFzY3JpcHRTeW50YXhUcmVlLnBhcnNlZFN1Y2Nlc3NmdWxseSkKICAgICAgICAg
ICAgIHJldHVybjsKIAotICAgICAgICB2YXIge3N0YXJ0T2Zmc2V0LCBlbmRPZmZzZXR9ID0gdGhp
cy5fc291cmNlQ29kZVRleHRFZGl0b3IudmlzaWJsZVJhbmdlT2Zmc2V0cygpOworICAgICAgICB2
YXIge3N0YXJ0T2Zmc2V0LCBlbmRPZmZzZXR9ID0gdGhpcy50ZXh0RWRpdG9yLnZpc2libGVSYW5n
ZU9mZnNldHMoKTsKIAogICAgICAgICB2YXIgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTsKICAgICAg
ICAgdmFyIGFsbE5vZGVzSW5SYW5nZSA9IHNjcmlwdFN5bnRheFRyZWUuZmlsdGVyQnlSYW5nZShz
dGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKQEAgLTEzNywxMSArOTAsMTggQEAgV2ViSW5zcGVjdG9y
LlR5cGVUb2tlbkFubm90YXRvci5wcm90b3R5cAogCiAgICAgICAgICAgICB0aGlzLl90aW1lb3V0
SWRlbnRpZmllciA9IHNldFRpbWVvdXQoZnVuY3Rpb24gdGltZW91dFVwZGF0ZSgpIHsKICAgICAg
ICAgICAgICAgICB0aGlzLl90aW1lb3V0SWRlbnRpZmllciA9IG51bGw7Ci0gICAgICAgICAgICAg
ICAgdGhpcy5faW5zZXJ0QW5ub3RhdGlvbnMoKTsKKyAgICAgICAgICAgICAgICB0aGlzLmluc2Vy
dEFubm90YXRpb25zKCk7CiAgICAgICAgICAgICB9LmJpbmQodGhpcyksIHRpbWVvdXRUaW1lKTsK
ICAgICAgICAgfS5iaW5kKHRoaXMpKTsKICAgICB9LAogCisgICAgY2xlYXJBbm5vdGF0aW9uczog
ZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy5fY2xlYXJUeXBlVG9rZW5zKCk7CisgICAg
fSwKKworICAgIC8vIFByaXZhdGUKKwogICAgIF9pbnNlcnRUeXBlVG9rZW5zRm9yRWFjaE5vZGU6
IGZ1bmN0aW9uKG5vZGUpCiAgICAgewogICAgICAgICB2YXIgc2NyaXB0U3ludGF4VHJlZSA9IHRo
aXMuX3NjcmlwdC5fc2NyaXB0U3ludGF4VHJlZTsKQEAgLTE3NSwxNSArMTM1LDE1IEBAIFdlYklu
c3BlY3Rvci5UeXBlVG9rZW5Bbm5vdGF0b3IucHJvdG90eXAKIAogICAgIF9pbnNlcnRUb2tlbjog
ZnVuY3Rpb24ob3JpZ2luYWxPZmZzZXQsIG5vZGUsIHNob3VsZFRyYW5zbGF0ZU9mZnNldFRvQWZ0
ZXJQYXJhbWV0ZXJMaXN0LCB0eXBlVG9rZW5UaXRsZVR5cGUsIGZ1bmN0aW9uT3JWYXJpYWJsZU5h
bWUpCiAgICAgewotICAgICAgICB2YXIgdG9rZW5Qb3NpdGlvbiA9IHRoaXMuX3NvdXJjZUNvZGVU
ZXh0RWRpdG9yLm9yaWdpbmFsT2Zmc2V0VG9DdXJyZW50UG9zaXRpb24ob3JpZ2luYWxPZmZzZXQp
OwotICAgICAgICB2YXIgY3VycmVudE9mZnNldCA9IHRoaXMuX3NvdXJjZUNvZGVUZXh0RWRpdG9y
LmN1cnJlbnRQb3NpdGlvblRvQ3VycmVudE9mZnNldCh0b2tlblBvc2l0aW9uKTsKLSAgICAgICAg
dmFyIHNvdXJjZVN0cmluZyA9IHRoaXMuX3NvdXJjZUNvZGVUZXh0RWRpdG9yLnN0cmluZzsKKyAg
ICAgICAgdmFyIHRva2VuUG9zaXRpb24gPSB0aGlzLnRleHRFZGl0b3Iub3JpZ2luYWxPZmZzZXRU
b0N1cnJlbnRQb3NpdGlvbihvcmlnaW5hbE9mZnNldCk7CisgICAgICAgIHZhciBjdXJyZW50T2Zm
c2V0ID0gdGhpcy50ZXh0RWRpdG9yLmN1cnJlbnRQb3NpdGlvblRvQ3VycmVudE9mZnNldCh0b2tl
blBvc2l0aW9uKTsKKyAgICAgICAgdmFyIHNvdXJjZVN0cmluZyA9IHRoaXMudGV4dEVkaXRvci5z
dHJpbmc7CiAKICAgICAgICAgaWYgKHNob3VsZFRyYW5zbGF0ZU9mZnNldFRvQWZ0ZXJQYXJhbWV0
ZXJMaXN0KSB7CiAgICAgICAgICAgICAvLyBUcmFuc2xhdGUgdGhlIHBvc2l0aW9uIHRvIHRoZSBj
bG9zaW5nIHBhcmVudGhlc2lzIG9mIHRoZSBmdW5jdGlvbiBhcmd1bWVudHM6CiAgICAgICAgICAg
ICAvLyB0cmFuc2xhdGUgZnJvbTogW3R5cGUtdG9rZW5dIGZ1bmN0aW9uIGZvbygpIHt9ID0+IHRv
OiBmdW5jdGlvbiBmb28oKSBbdHlwZS10b2tlbl0ge30KICAgICAgICAgICAgIGN1cnJlbnRPZmZz
ZXQgPSB0aGlzLl90cmFuc2xhdGVUb09mZnNldEFmdGVyRnVuY3Rpb25QYXJhbWV0ZXJMaXN0KG5v
ZGUsIGN1cnJlbnRPZmZzZXQsIHNvdXJjZVN0cmluZyk7Ci0gICAgICAgICAgICB0b2tlblBvc2l0
aW9uID0gdGhpcy5fc291cmNlQ29kZVRleHRFZGl0b3IuY3VycmVudE9mZnNldFRvQ3VycmVudFBv
c2l0aW9uKGN1cnJlbnRPZmZzZXQpOworICAgICAgICAgICAgdG9rZW5Qb3NpdGlvbiA9IHRoaXMu
dGV4dEVkaXRvci5jdXJyZW50T2Zmc2V0VG9DdXJyZW50UG9zaXRpb24oY3VycmVudE9mZnNldCk7
CiAgICAgICAgIH0KIAogICAgICAgICAvLyBOb3RlOiBib29rbWFya3MgcmVuZGVyIHRvIHRoZSBs
ZWZ0IG9mIHRoZSBjaGFyYWN0ZXIgdGhleSdyZSBiZWluZyBkaXNwbGF5ZWQgbmV4dCB0by4KQEAg
LTE5Miw3ICsxNTIsNyBAQCBXZWJJbnNwZWN0b3IuVHlwZVRva2VuQW5ub3RhdG9yLnByb3RvdHlw
CiAgICAgICAgIHZhciBzaG91bGRIYXZlTGVmdE1hcmdpbiA9IGN1cnJlbnRPZmZzZXQgIT09IDAg
JiYgIWlzU3BhY2VSZWdleHAudGVzdChzb3VyY2VTdHJpbmdbY3VycmVudE9mZnNldCAtIDFdKTsK
ICAgICAgICAgdmFyIHNob3VsZEhhdmVSaWdodE1hcmdpbiA9ICFpc1NwYWNlUmVnZXhwLnRlc3Qo
c291cmNlU3RyaW5nW2N1cnJlbnRPZmZzZXRdKTsKICAgICAgICAgdmFyIHR5cGVUb2tlbiA9IG5l
dyBXZWJJbnNwZWN0b3IuVHlwZVRva2VuVmlldyh0aGlzLCBzaG91bGRIYXZlUmlnaHRNYXJnaW4s
IHNob3VsZEhhdmVMZWZ0TWFyZ2luLCB0eXBlVG9rZW5UaXRsZVR5cGUsIGZ1bmN0aW9uT3JWYXJp
YWJsZU5hbWUpOwotICAgICAgICB2YXIgYm9va21hcmsgPSB0aGlzLl9zb3VyY2VDb2RlVGV4dEVk
aXRvci5zZXRJbmxpbmVXaWRnZXQodG9rZW5Qb3NpdGlvbiwgdHlwZVRva2VuLmVsZW1lbnQpOwor
ICAgICAgICB2YXIgYm9va21hcmsgPSB0aGlzLnRleHRFZGl0b3Iuc2V0SW5saW5lV2lkZ2V0KHRv
a2VuUG9zaXRpb24sIHR5cGVUb2tlbi5lbGVtZW50KTsKICAgICAgICAgbm9kZS5hdHRhY2htZW50
cy5fX3R5cGVUb2tlbiA9IHR5cGVUb2tlbjsKICAgICAgICAgdGhpcy5fdHlwZVRva2VuTm9kZXMu
cHVzaChub2RlKTsKICAgICAgICAgdGhpcy5fdHlwZVRva2VuQm9va21hcmtzLnB1c2goYm9va21h
cmspOwpAQCAtMjcxLDEzICsyMzEsNSBAQCBXZWJJbnNwZWN0b3IuVHlwZVRva2VuQW5ub3RhdG9y
LnByb3RvdHlwCiAKICAgICAgICAgdGhpcy5fdHlwZVRva2VuTm9kZXMgPSBbXTsKICAgICAgICAg
dGhpcy5fdHlwZVRva2VuQm9va21hcmtzID0gW107Ci0gICAgfSwKLQotICAgIF9jbGVhclRpbWVv
dXRJZk5lZWRlZDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX3RpbWVvdXRJ
ZGVudGlmaWVyKSB7Ci0gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZW91dElkZW50
aWZpZXIpOwotICAgICAgICAgICAgdGhpcy5fdGltZW91dElkZW50aWZpZXIgPSBudWxsOwotICAg
ICAgICB9CiAgICAgfQogfTsKSW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJm
YWNlL1ZpZXdzL1NvdXJjZUNvZGVUZXh0RWRpdG9yLmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1NvdXJjZUNvZGVUZXh0RWRpdG9yLmpz
CShyZXZpc2lvbiAxNzY5NjQpCisrKyBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFj
ZS9WaWV3cy9Tb3VyY2VDb2RlVGV4dEVkaXRvci5qcwkod29ya2luZyBjb3B5KQpAQCAtMzYsOCAr
MzYsOCBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IgPSBmdW5jCiAKICAgICBX
ZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5jYWxsKHRoaXMsIG51bGwsIG51bGwsIHRoaXMpOwogCi0g
ICAgdGhpcy5fdHlwZVRva2VuQW5ub3RhdG9yID0gbnVsbDsKICAgICB0aGlzLl90eXBlVG9rZW5T
Y3JvbGxIYW5kbGVyID0gbnVsbDsKKyAgICB0aGlzLl9hbm5vdGF0b3JNYW5hZ2VyID0gbmV3IFdl
Ykluc3BlY3Rvci5Bbm5vdGF0b3JNYW5hZ2VyOwogCiAgICAgLy8gRklYTUU6IEN1cnJlbnRseSB0
aGlzIGp1c3QganVtcHMgYmV0d2VlbiByZXNvdXJjZXMgYW5kIHJlbGF0ZWQgc291cmNlIG1hcCBy
ZXNvdXJjZXMuIEl0IGRvZXNuJ3QgImp1bXAgdG8gc3ltYm9sIiB5ZXQuCiAgICAgdGhpcy5fdXBk
YXRlVG9rZW5UcmFja2luZ0NvbnRyb2xsZXJTdGF0ZSgpOwpAQCAtOTAsNiArOTAsOCBAQCBXZWJJ
bnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IuRHVyYXRpCiAKIFdlYkluc3BlY3Rvci5Tb3Vy
Y2VDb2RlVGV4dEVkaXRvci5BdXRvRm9ybWF0TWluaW11bUxpbmVMZW5ndGggPSA1MDA7CiAKK1dl
Ykluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5UeXBlVG9rZW5Bbm5vdGF0b3JLZXkgPSAi
VHlwZVRva2VuQW5ub3RhdG9yS2V5IjsKKwogV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRp
dG9yLkV2ZW50ID0gewogICAgIENvbnRlbnRXaWxsUG9wdWxhdGU6ICJzb3VyY2UtY29kZS10ZXh0
LWVkaXRvci1jb250ZW50LXdpbGwtcG9wdWxhdGUiLAogICAgIENvbnRlbnREaWRQb3B1bGF0ZTog
InNvdXJjZS1jb2RlLXRleHQtZWRpdG9yLWNvbnRlbnQtZGlkLXBvcHVsYXRlIgpAQCAtMTA5LDgg
KzExMSw3IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3QKICAgICB7
CiAgICAgICAgIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5zaG93bi5jYWxsKHRo
aXMpOwogCi0gICAgICAgIGlmICh0aGlzLl90eXBlVG9rZW5Bbm5vdGF0b3IpCi0gICAgICAgICAg
ICB0aGlzLl90eXBlVG9rZW5Bbm5vdGF0b3IucmVzdW1lKCk7CisgICAgICAgIHRoaXMuX2Fubm90
YXRvck1hbmFnZXIucmVzdW1lQWxsKCk7CiAgICAgfSwKIAogICAgIGhpZGRlbjogZnVuY3Rpb24o
KQpAQCAtMTIzLDggKzEyNCw3IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5w
cm90b3QKICAgICAgICAgCiAgICAgICAgIHRoaXMuX2Rpc21pc3NFZGl0aW5nQ29udHJvbGxlcih0
cnVlKTsKIAotICAgICAgICBpZiAodGhpcy5fdHlwZVRva2VuQW5ub3RhdG9yKQotICAgICAgICAg
ICAgdGhpcy5fdHlwZVRva2VuQW5ub3RhdG9yLnBhdXNlKCk7CisgICAgICAgIHRoaXMuX2Fubm90
YXRvck1hbmFnZXIucGF1c2VBbGwoKTsKICAgICB9LAogCiAgICAgY2xvc2U6IGZ1bmN0aW9uKCkK
QEAgLTE2Niw3ICsxNjYsNyBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJv
dG90CiAKICAgICBjYW5TaG93VHlwZUFubm90YXRpb25zOiBmdW5jdGlvbigpCiAgICAgewotICAg
ICAgICByZXR1cm4gISF0aGlzLl90eXBlVG9rZW5Bbm5vdGF0b3I7CisgICAgICAgIHJldHVybiAh
IXRoaXMuX2Fubm90YXRvck1hbmFnZXIuZ2V0QW5ub3RhdG9yKFdlYkluc3BlY3Rvci5Tb3VyY2VD
b2RlVGV4dEVkaXRvci5UeXBlVG9rZW5Bbm5vdGF0b3JLZXkpOwogICAgIH0sCiAKICAgICBjdXN0
b21QZXJmb3JtU2VhcmNoOiBmdW5jdGlvbihxdWVyeSkKQEAgLTI1NSwxNCArMjU1LDIwIEBAIFdl
Ykluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3QKIAogICAgICAgICBmb3IgKHZh
ciByYW5nZSBvZiBuZXdSYW5nZXMpCiAgICAgICAgICAgICB0aGlzLl91cGRhdGVFZGl0YWJsZU1h
cmtlcnMocmFuZ2UpOworCisgICAgICAgIHRoaXMuX2Fubm90YXRvck1hbmFnZXIuY2xlYXJBbGwo
KTsKKyAgICAgICAgdGhpcy5fYW5ub3RhdG9yTWFuYWdlci5yZW1vdmVBbGxBbm5vdGF0b3JzKCk7
CisgICAgICAgIGlmICh0aGlzLl90eXBlVG9rZW5TY3JvbGxIYW5kbGVyKQorICAgICAgICAgICAg
dGhpcy5fZGlzYWJsZVNjcm9sbEV2ZW50c0ZvclR5cGVUb2tlbkFubm90YXRvcigpOwogICAgIH0s
CiAKICAgICB0b2dnbGVUeXBlQW5ub3RhdGlvbnM6IGZ1bmN0aW9uKCkKICAgICB7Ci0gICAgICAg
IGlmICghdGhpcy5fdHlwZVRva2VuQW5ub3RhdG9yKQorICAgICAgICB2YXIgdHlwZVRva2VuQW5u
b3RhdG9yID0gdGhpcy5fYW5ub3RhdG9yTWFuYWdlci5nZXRBbm5vdGF0b3IoV2ViSW5zcGVjdG9y
LlNvdXJjZUNvZGVUZXh0RWRpdG9yLlR5cGVUb2tlbkFubm90YXRvcktleSk7CisgICAgICAgIGlm
ICghdHlwZVRva2VuQW5ub3RhdG9yKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
ICAgIHZhciBpc0FjdGl2YXRlZCA9IHRoaXMuX3R5cGVUb2tlbkFubm90YXRvci50b2dnbGVUeXBl
QW5ub3RhdGlvbnMoKTsKKyAgICAgICAgdmFyIGlzQWN0aXZhdGVkID0gdHlwZVRva2VuQW5ub3Rh
dG9yLnRvZ2dsZVR5cGVBbm5vdGF0aW9ucygpOwogICAgICAgICBpZiAoaXNBY3RpdmF0ZWQpIHsK
ICAgICAgICAgICAgIFJ1bnRpbWVBZ2VudC5lbmFibGVUeXBlUHJvZmlsZXIoKTsKICAgICAgICAg
ICAgIHRoaXMuX2VuYWJsZVNjcm9sbEV2ZW50c0ZvclR5cGVUb2tlbkFubm90YXRvcigpOwpAQCAt
MzAyLDggKzMwOCw3IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3QK
ICAgICB7CiAgICAgICAgIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5wcmV0dHlQ
cmludC5jYWxsKHRoaXMsIHByZXR0eSk7CiAKLSAgICAgICAgaWYgKHRoaXMuX3R5cGVUb2tlbkFu
bm90YXRvciAmJiB0aGlzLl90eXBlVG9rZW5Bbm5vdGF0b3IuaXNBY3RpdmUpCi0gICAgICAgICAg
ICB0aGlzLl90eXBlVG9rZW5Bbm5vdGF0b3IucmVzZXQoKTsKKyAgICAgICAgdGhpcy5fYW5ub3Rh
dG9yTWFuYWdlci5yZXNldEFsbElmQWN0aXZlKCk7CiAgICAgfSwKIAogICAgIC8vIFByaXZhdGUK
QEAgLTEwNDIsMTYgKzEwNDcsMTQgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9y
LnByb3RvdAogICAgIF9kZWJ1Z2dlckRpZFBhdXNlOiBmdW5jdGlvbihldmVudCkKICAgICB7CiAg
ICAgICAgIHRoaXMuX3VwZGF0ZVRva2VuVHJhY2tpbmdDb250cm9sbGVyU3RhdGUoKTsKLSAgICAg
ICAgaWYgKHRoaXMuX3R5cGVUb2tlbkFubm90YXRvciAmJiB0aGlzLl90eXBlVG9rZW5Bbm5vdGF0
b3IuaXNBY3RpdmUpCi0gICAgICAgICAgICB0aGlzLl90eXBlVG9rZW5Bbm5vdGF0b3IucmVmcmVz
aCgpOworICAgICAgICB0aGlzLl9hbm5vdGF0b3JNYW5hZ2VyLnJlZnJlc2hBbGxJZkFjdGl2ZSgp
OwogICAgIH0sCiAKICAgICBfZGVidWdnZXJEaWRSZXN1bWU6IGZ1bmN0aW9uKGV2ZW50KQogICAg
IHsKICAgICAgICAgdGhpcy5fdXBkYXRlVG9rZW5UcmFja2luZ0NvbnRyb2xsZXJTdGF0ZSgpOwog
ICAgICAgICB0aGlzLl9kaXNtaXNzUG9wb3ZlcigpOwotICAgICAgICBpZiAodGhpcy5fdHlwZVRv
a2VuQW5ub3RhdG9yICYmIHRoaXMuX3R5cGVUb2tlbkFubm90YXRvci5pc0FjdGl2ZSkKLSAgICAg
ICAgICAgIHRoaXMuX3R5cGVUb2tlbkFubm90YXRvci5yZWZyZXNoKCk7CisgICAgICAgIHRoaXMu
X2Fubm90YXRvck1hbmFnZXIucmVmcmVzaEFsbElmQWN0aXZlKCk7CiAgICAgfSwKIAogICAgIF9z
b3VyY2VDb2RlU291cmNlTWFwQWRkZWQ6IGZ1bmN0aW9uKGV2ZW50KQpAQCAtMTA2Nyw3ICsxMDcw
LDcgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdAogICAgICAgICB2
YXIgbW9kZSA9IFdlYkluc3BlY3Rvci5Db2RlTWlycm9yVG9rZW5UcmFja2luZ0NvbnRyb2xsZXIu
TW9kZS5Ob25lOwogICAgICAgICBpZiAoV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTWFuYWdlci5wYXVz
ZWQpCiAgICAgICAgICAgICBtb2RlID0gV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JUb2tlblRyYWNr
aW5nQ29udHJvbGxlci5Nb2RlLkphdmFTY3JpcHRFeHByZXNzaW9uOwotICAgICAgICBlbHNlIGlm
ICh0aGlzLl90eXBlVG9rZW5Bbm5vdGF0b3IgJiYgdGhpcy5fdHlwZVRva2VuQW5ub3RhdG9yLmlz
QWN0aXZlKQorICAgICAgICBlbHNlIGlmICh0aGlzLl9hbm5vdGF0b3JNYW5hZ2VyLmlzQW5ub3Rh
dG9yQWN0aXZlKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5UeXBlVG9rZW5Bbm5v
dGF0b3JLZXkpKQogICAgICAgICAgICAgbW9kZSA9IFdlYkluc3BlY3Rvci5Db2RlTWlycm9yVG9r
ZW5UcmFja2luZ0NvbnRyb2xsZXIuTW9kZS5KYXZhU2NyaXB0VHlwZUluZm9ybWF0aW9uOwogICAg
ICAgICBlbHNlIGlmICh0aGlzLl9oYXNDb2xvck1hcmtlcnMoKSkKICAgICAgICAgICAgIG1vZGUg
PSBXZWJJbnNwZWN0b3IuQ29kZU1pcnJvclRva2VuVHJhY2tpbmdDb250cm9sbGVyLk1vZGUuTWFy
a2VkVG9rZW5zOwpAQCAtMTUyMSwyNCArMTUyNCwzMSBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29k
ZVRleHRFZGl0b3IucHJvdG90CiAgICAgICAgIGRlbGV0ZSB0aGlzLl9lZGl0aW5nQ29udHJvbGxl
cjsKICAgICB9LAogCi0gICAgX21ha2VUeXBlVG9rZW5Bbm5vdGF0b3I6IGZ1bmN0aW9uKCkKKyAg
ICBfZ2V0QXNzb2NpYXRlZFNjcmlwdDogZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgaWYgKCFS
dW50aW1lQWdlbnQuZ2V0UnVudGltZVR5cGVzRm9yVmFyaWFibGVzQXRPZmZzZXRzKQotICAgICAg
ICAgICAgcmV0dXJuOwotCiAgICAgICAgIHZhciBzY3JpcHQgPSBudWxsOwogICAgICAgICAvLyBG
SVhNRTogVGhpcyBuZWVkcyB0byBtZSBtb2RpZmllZCB0byB3b3JrIHdpdGggSFRNTCBmaWxlcyB3
aXRoIGlubGluZSBzY3JpcHQgdGFncy4KICAgICAgICAgaWYgKHRoaXMuX3NvdXJjZUNvZGUgaW5z
dGFuY2VvZiBXZWJJbnNwZWN0b3IuU2NyaXB0KQogICAgICAgICAgICAgc2NyaXB0ID0gdGhpcy5f
c291cmNlQ29kZTsKICAgICAgICAgZWxzZSBpZiAodGhpcy5fc291cmNlQ29kZSBpbnN0YW5jZW9m
IFdlYkluc3BlY3Rvci5SZXNvdXJjZSAmJiB0aGlzLl9zb3VyY2VDb2RlLnR5cGUgPT09IFdlYklu
c3BlY3Rvci5SZXNvdXJjZS5UeXBlLlNjcmlwdCAmJiB0aGlzLl9zb3VyY2VDb2RlLnNjcmlwdHMu
bGVuZ3RoKQogICAgICAgICAgICAgc2NyaXB0ID0gdGhpcy5fc291cmNlQ29kZS5zY3JpcHRzWzBd
OworICAgICAgICByZXR1cm4gc2NyaXB0OworICAgIH0sCiAKKyAgICBfbWFrZVR5cGVUb2tlbkFu
bm90YXRvcjogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgaWYgKCFSdW50aW1lQWdlbnQuZ2V0
UnVudGltZVR5cGVzRm9yVmFyaWFibGVzQXRPZmZzZXRzKQorICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgIHZhciBzY3JpcHQgPSB0aGlzLl9nZXRBc3NvY2lhdGVkU2NyaXB0KCk7CiAgICAg
ICAgIGlmICghc2NyaXB0KQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIHRoaXMuX3R5
cGVUb2tlbkFubm90YXRvciA9IG5ldyBXZWJJbnNwZWN0b3IuVHlwZVRva2VuQW5ub3RhdG9yKHRo
aXMsIHNjcmlwdCk7CisgICAgICAgIHZhciB0eXBlVG9rZW5Bbm5vdGF0b3IgPSBuZXcgV2ViSW5z
cGVjdG9yLlR5cGVUb2tlbkFubm90YXRvcih0aGlzLCBzY3JpcHQpOworICAgICAgICB0aGlzLl9h
bm5vdGF0b3JNYW5hZ2VyLmFkZEFubm90YXRvcihXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRF
ZGl0b3IuVHlwZVRva2VuQW5ub3RhdG9yS2V5LCB0eXBlVG9rZW5Bbm5vdGF0b3IpOworCiAgICAg
ICAgIGlmIChXZWJJbnNwZWN0b3Iuc2hvd0phdmFTY3JpcHRUeXBlSW5mb3JtYXRpb25TZXR0aW5n
LnZhbHVlKSB7Ci0gICAgICAgICAgICB0aGlzLl90eXBlVG9rZW5Bbm5vdGF0b3IucmVzZXQoKTsK
KyAgICAgICAgICAgIHR5cGVUb2tlbkFubm90YXRvci5yZXNldCgpOwogICAgICAgICAgICAgdGhp
cy5fZW5hYmxlU2Nyb2xsRXZlbnRzRm9yVHlwZVRva2VuQW5ub3RhdG9yKCk7CiAgICAgICAgIH0K
ICAgICB9LApAQCAtMTU2MCw4ICsxNTcwLDggQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0
RWRpdG9yLnByb3RvdAogCiAgICAgX21ha2VUeXBlVG9rZW5TY3JvbGxFdmVudEhhbmRsZXI6IGZ1
bmN0aW9uKCkKICAgICB7Ci0gICAgICAgIHZhciB0eXBlVG9rZW5Bbm5vdGF0b3IgPSB0aGlzLl90
eXBlVG9rZW5Bbm5vdGF0b3I7CiAgICAgICAgIHZhciB0aW1lb3V0SWRlbnRpZmllciA9IG51bGw7
CisgICAgICAgIHZhciB0eXBlVG9rZW5Bbm5vdGF0b3IgPSB0aGlzLl9hbm5vdGF0b3JNYW5hZ2Vy
LmdldEFubm90YXRvcihXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IuVHlwZVRva2Vu
QW5ub3RhdG9yS2V5KTsKICAgICAgICAgZnVuY3Rpb24gc2Nyb2xsSGFuZGxlcigpCiAgICAgICAg
IHsKICAgICAgICAgICAgIGlmICh0aW1lb3V0SWRlbnRpZmllcikKQEAgLTE1NzEsMTEgKzE1ODEs
MTYgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdAogCiAgICAgICAg
ICAgICB0aW1lb3V0SWRlbnRpZmllciA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgICAg
ICAgICAgICAgdGltZW91dElkZW50aWZpZXIgPSBudWxsOwotICAgICAgICAgICAgICAgIHR5cGVU
b2tlbkFubm90YXRvci5yZXN1bWUoKTsKLSAgICAgICAgICAgIH0sIFdlYkluc3BlY3Rvci5Tb3Vy
Y2VDb2RlVGV4dEVkaXRvci5EdXJhdGlvblRvVXBkYXRlVHlwZVRva2Vuc0FmdGVyU2Nyb2xsaW5n
KTsKKyAgICAgICAgICAgICAgICB2YXIgdHlwZVRva2VuQW5ub3RhdG9yID0gdGhpcy5fYW5ub3Rh
dG9yTWFuYWdlci5nZXRBbm5vdGF0b3IoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9y
LlR5cGVUb2tlbkFubm90YXRvcktleSk7CisgICAgICAgICAgICAgICAgLy8gVGhlcmUgaXMgYSBz
bWFsbCBjaGFuY2UgdGhhdCB3ZSBkaXNhYmxlZCB0aGUgdHlwZSB0b2tlbiBhbm5vdGF0b3IgYW5k
IHRoZSBzY3JvbGwgaGFuZGxlciAKKyAgICAgICAgICAgICAgICAvLyBkdXJpbmcgdGhlIER1cmF0
aW9uVG9VcGRhdGVUeXBlVG9rZW5zQWZ0ZXJTY3JvbGxpbmcgdGltZSBkZWxheSwgc28gd2UgbXVz
dCBlbnN1cmUgdGhhdCB0aGlzCisgICAgICAgICAgICAgICAgLy8gaXMgbm90IG51bGwuCisgICAg
ICAgICAgICAgICAgaWYgKHR5cGVUb2tlbkFubm90YXRvcikKKyAgICAgICAgICAgICAgICAgICAg
dHlwZVRva2VuQW5ub3RhdG9yLnJlc3VtZSgpOworICAgICAgICAgICAgfS5iaW5kKHRoaXMpLCBX
ZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IuRHVyYXRpb25Ub1VwZGF0ZVR5cGVUb2tl
bnNBZnRlclNjcm9sbGluZyk7CiAgICAgICAgIH0KIAotICAgICAgICByZXR1cm4gc2Nyb2xsSGFu
ZGxlcjsKKyAgICAgICAgcmV0dXJuIHNjcm9sbEhhbmRsZXIuYmluZCh0aGlzKTsKICAgICB9CiB9
OwogCkluZGV4OiBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9UeXBl
VG9rZW5WaWV3LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL1ZpZXdzL1R5cGVUb2tlblZpZXcuanMJKHJldmlzaW9uIDE3Njk2NCkKKysrIFNvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1R5cGVUb2tlblZpZXcuanMJKHdv
cmtpbmcgY29weSkKQEAgLTExNiw3ICsxMTYsNyBAQCBXZWJJbnNwZWN0b3IuVHlwZVRva2VuVmll
dy5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgICAgICAgICB2YXIgZG9tUmVjdCA9IHRoaXMuZWxl
bWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgICAgICAgICAgICB2YXIgYm91bmRz
ID0gbmV3IFdlYkluc3BlY3Rvci5SZWN0KGRvbVJlY3QubGVmdCwgZG9tUmVjdC50b3AsIGRvbVJl
Y3Qud2lkdGgsIGRvbVJlY3QuaGVpZ2h0KTsKLSAgICAgICAgICAgICAgICB0aGlzLl90b2tlbkFu
bm90YXRvci5zb3VyY2VDb2RlVGV4dEVkaXRvci5zaG93UG9wb3ZlckZvclR5cGVzKHRoaXMuX3R5
cGVzLCBib3VuZHMsIHRoaXMuX3BvcG92ZXJUaXRsZSk7CisgICAgICAgICAgICAgICAgdGhpcy5f
dG9rZW5Bbm5vdGF0b3IudGV4dEVkaXRvci5zaG93UG9wb3ZlckZvclR5cGVzKHRoaXMuX3R5cGVz
LCBib3VuZHMsIHRoaXMuX3BvcG92ZXJUaXRsZSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAg
ICAgIGlmICh0aGlzLl9zaG91bGRTaG93UG9wb3ZlcigpKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>243568</attachid>
            <date>2014-12-19 12:56:18 -0800</date>
            <delta_ts>2015-01-07 00:40:36 -0800</delta_ts>
            <desc>patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>26423</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwkocmV2aXNpb24gMTc3NTkwKQorKysgU291cmNl
L1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcyIEBA
CisyMDE0LTEyLTE5ICBTYWFtIEJhcmF0aSAgPHNhYW1iYXJhdGkxQGdtYWlsLmNvbT4KKworICAg
ICAgICBXZWIgSW5zcGVjdG9yOiBBYnN0cmFjdCBjb21tb24gZnVuY3Rpb25zIGZyb20gVHlwZVRv
a2VuQW5ub3RhdG9yIGludG8gYSBwYXJlbnQgY2xhc3MgYW5kIGludHJvZHVjZSBhbiBBbm5vdGF0
b3JNYW5hZ2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMzk0MjYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBUaGlzIHBhdGNoIGNyZWF0ZXMgYSBwYXJlbnQgY2xhc3MsIEFubm90YXRvciwgdGhhdCBUeXBl
VG9rZW5Bbm5vdGF0b3IKKyAgICAgICAgaW5oZXJpdHMgZnJvbS4gQW5ub3RhdG9yIGRlZmluZXMg
YSBjb21tb24gc2V0IG9mIGZ1bmN0aW9uYWxpdHkKKyAgICAgICAgdGhhdCBhIHRleHQgZWRpdG9y
IGFubm90YXRvciBjYW4gdXNlIHRvIG1hcmsgdXAgVUkuIFRoaXMgCisgICAgICAgIGlzIGluIHBy
ZXBhcmF0aW9uIG90aGVyIGNsYXNzZXMgdGhhdCB3aWxsIGluaGVyaXQgZnJvbSBBbm5vdGF0b3Iu
CisgICAgICAgIAorICAgICAgICBUaGlzIHBhdGNoIGFsc28gaW50cm9kdWNlcyBBbm5vdGF0b3JN
YW5hZ2VyIHdoaWNoIGNvbnRyb2xzIGEKKyAgICAgICAgc2V0IG9mIEFubm90YXRvcnMgYW5kIHBy
b3ZpZGVzIGEgc2luZ2xlIGludGVyZmFjZSBmb3IKKyAgICAgICAgY29udHJvbGxpbmcgdGhlbS4K
KworICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvQW5ub3RhdG9yLmpzOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkluc3BlY3Rvci5Bbm5vdGF0b3IpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLkFubm90YXRvci5wcm90b3R5cGUuZ2V0IHNvdXJjZUNvZGVUZXh0RWRpdG9yKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5Bbm5vdGF0b3IucHJvdG90eXBlLmdldCBpc0FjdGl2ZSk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuQW5ub3RhdG9yLnByb3RvdHlwZS5wYXVzZSk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuQW5ub3RhdG9yLnByb3RvdHlwZS5yZXN1bWUpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLkFubm90YXRvci5wcm90b3R5cGUucmVmcmVzaCk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuQW5ub3RhdG9yLnByb3RvdHlwZS5yZXNldCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQW5u
b3RhdG9yLnByb3RvdHlwZS5jbGVhcik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQW5ub3RhdG9y
LnByb3RvdHlwZS5pbnNlcnRBbm5vdGF0aW9ucyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQW5u
b3RhdG9yLnByb3RvdHlwZS5jbGVhckFubm90YXRpb25zKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5Bbm5vdGF0b3IucHJvdG90eXBlLl9jbGVhclRpbWVvdXRJZk5lZWRlZCk6CisgICAgICAgICog
VXNlckludGVyZmFjZS9Db250cm9sbGVycy9Bbm5vdGF0b3JNYW5hZ2VyLmpzOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5Bbm5vdGF0b3JNYW5hZ2VyKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5Bbm5vdGF0b3JNYW5hZ2VyLnByb3RvdHlwZS5hZGRBbm5vdGF0b3IpOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLkFubm90YXRvck1hbmFnZXIucHJvdG90eXBlLmlzQW5ub3RhdG9yQWN0aXZl
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Bbm5vdGF0b3JNYW5hZ2VyLnByb3RvdHlwZS5wYXVz
ZUFsbCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQW5ub3RhdG9yTWFuYWdlci5wcm90b3R5cGUu
cmVzdW1lQWxsKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Bbm5vdGF0b3JNYW5hZ2VyLnByb3Rv
dHlwZS5yZWZyZXNoQWxsSWZBY3RpdmUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkFubm90YXRv
ck1hbmFnZXIucHJvdG90eXBlLnJlc2V0QWxsSWZBY3RpdmUpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLkFubm90YXRvck1hbmFnZXIucHJvdG90eXBlLmNsZWFyQWxsKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5Bbm5vdGF0b3JNYW5hZ2VyLnByb3RvdHlwZS5yZW1vdmVBbGxBbm5vdGF0b3JzKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5Bbm5vdGF0b3JNYW5hZ2VyLnByb3RvdHlwZS5fZ2V0QW5u
b3RhdG9ycyk6CisgICAgICAgICogVXNlckludGVyZmFjZS9Db250cm9sbGVycy9UeXBlVG9rZW5B
bm5vdGF0b3IuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVHlwZVRva2VuQW5ub3RhdG9yKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5UeXBlVG9rZW5Bbm5vdGF0b3IucHJvdG90eXBlLmluc2Vy
dEFubm90YXRpb25zLik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVHlwZVRva2VuQW5ub3RhdG9y
LnByb3RvdHlwZS5jbGVhckFubm90YXRpb25zKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UeXBl
VG9rZW5Bbm5vdGF0b3IucHJvdG90eXBlLl9pbnNlcnRUb2tlbik6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuVHlwZVRva2VuQW5ub3RhdG9yLnByb3RvdHlwZS5nZXQgaXNBY3RpdmUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViSW5zcGVjdG9yLlR5cGVUb2tlbkFubm90YXRvci5wcm90b3R5cGUuZ2V0
IHNvdXJjZUNvZGVUZXh0RWRpdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkluc3BlY3Rvci5U
eXBlVG9rZW5Bbm5vdGF0b3IucHJvdG90eXBlLnBhdXNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5UeXBlVG9rZW5Bbm5vdGF0b3IucHJvdG90eXBlLnJlc3VtZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJJbnNwZWN0b3IuVHlwZVRva2VuQW5ub3RhdG9yLnByb3RvdHlwZS5yZWZy
ZXNoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkluc3BlY3Rvci5UeXBlVG9rZW5Bbm5vdGF0b3Iu
cHJvdG90eXBlLnJlc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkluc3BlY3Rvci5UeXBlVG9r
ZW5Bbm5vdGF0b3IucHJvdG90eXBlLl9pbnNlcnRBbm5vdGF0aW9ucy4pOiBEZWxldGVkLgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLlR5cGVUb2tlbkFubm90YXRvci5wcm90b3R5cGUuX2NsZWFyVGlt
ZW91dElmTmVlZGVkKTogRGVsZXRlZC4KKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRt
bDoKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL1ZpZXdzL1NvdXJjZUNvZGVUZXh0RWRpdG9yLmpz
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUuc2hvd24pOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS5oaWRkZW4p
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS5j
YW5TaG93VHlwZUFubm90YXRpb25zKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2Rl
VGV4dEVkaXRvci5wcm90b3R5cGUuY29udGVudERpZENoYW5nZSk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLnRvZ2dsZVR5cGVBbm5vdGF0aW9u
cyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBl
LnByZXR0eVByaW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRv
ci5wcm90b3R5cGUuX2RlYnVnZ2VyRGlkUGF1c2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNv
dXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS5fZGVidWdnZXJEaWRSZXN1bWUpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS5fdXBkYXRlVG9r
ZW5UcmFja2luZ0NvbnRyb2xsZXJTdGF0ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNl
Q29kZVRleHRFZGl0b3IucHJvdG90eXBlLl9nZXRBc3NvY2lhdGVkU2NyaXB0KToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUuX21ha2VUeXBlVG9r
ZW5Bbm5vdGF0b3IpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9y
LnByb3RvdHlwZS5fbWFrZVR5cGVUb2tlblNjcm9sbEV2ZW50SGFuZGxlci5zY3JvbGxIYW5kbGVy
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUu
X21ha2VUeXBlVG9rZW5TY3JvbGxFdmVudEhhbmRsZXIpOgorCiAyMDE0LTEyLTE5ICBDb21taXQg
UXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCBy
b2xsaW5nIG91dCByMTc3NTc0LgpJbmRleDogU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvTWFpbi5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2Vy
SW50ZXJmYWNlL01haW4uaHRtbAkocmV2aXNpb24gMTc3NTg5KQorKysgU291cmNlL1dlYkluc3Bl
Y3RvclVJL1VzZXJJbnRlcmZhY2UvTWFpbi5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC00NTksOSAr
NDU5LDExIEBACiAgICAgPHNjcmlwdCBzcmM9IlZpZXdzL1R5cGVQcm9wZXJ0aWVzU2VjdGlvbi5q
cyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IlZpZXdzL1R5cGVUb2tlblZpZXcuanMiPjwv
c2NyaXB0PgogCisgICAgPHNjcmlwdCBzcmM9IkNvbnRyb2xsZXJzL0Fubm90YXRvci5qcyI+PC9z
Y3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IkNvbnRyb2xsZXJzL0NvZGVNaXJyb3JFZGl0aW5nQ29u
dHJvbGxlci5qcyI+PC9zY3JpcHQ+CiAKICAgICA8c2NyaXB0IHNyYz0iQ29udHJvbGxlcnMvQW5h
bHl6ZXJNYW5hZ2VyLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iQ29udHJvbGxlcnMv
QW5ub3RhdG9yTWFuYWdlci5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IkNvbnRyb2xs
ZXJzL0FwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNy
Yz0iQ29udHJvbGxlcnMvQnJhbmNoTWFuYWdlci5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBz
cmM9IkNvbnRyb2xsZXJzL0NTU1N0eWxlTWFuYWdlci5qcyI+PC9zY3JpcHQ+CkluZGV4OiBTb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9Bbm5vdGF0b3IuanMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJv
bGxlcnMvQW5ub3RhdG9yLmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkluc3BlY3RvclVJ
L1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvQW5ub3RhdG9yLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTEyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBTYWFtIEJhcmF0aSA8c2Fh
bWJhcmF0aTFAZ21haWwuY29tPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitXZWJJbnNwZWN0b3IuQW5ub3RhdG9yID0g
ZnVuY3Rpb24oc291cmNlQ29kZVRleHRFZGl0b3IpCit7CisgICAgV2ViSW5zcGVjdG9yLk9iamVj
dC5jYWxsKHRoaXMpOworCisgICAgY29uc29sZS5hc3NlcnQoc291cmNlQ29kZVRleHRFZGl0b3Ig
aW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IsIHNvdXJjZUNvZGVU
ZXh0RWRpdG9yKTsKKworICAgIHRoaXMuX3NvdXJjZUNvZGVUZXh0RWRpdG9yID0gc291cmNlQ29k
ZVRleHRFZGl0b3I7CisgICAgdGhpcy5fdGltZW91dElkZW50aWZpZXIgPSBudWxsOworICAgIHRo
aXMuX2lzQWN0aXZlID0gZmFsc2U7Cit9OworCitXZWJJbnNwZWN0b3IuQW5ub3RhdG9yLnByb3Rv
dHlwZSA9IHsKKyAgICBjb25zdHJ1Y3RvcjogV2ViSW5zcGVjdG9yLkFubm90YXRvciwKKyAgICBf
X3Byb3RvX186IFdlYkluc3BlY3Rvci5PYmplY3QucHJvdG90eXBlLAorCisgICAgLy8gUHVibGlj
CisKKyAgICBnZXQgc291cmNlQ29kZVRleHRFZGl0b3IoKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHRoaXMuX3NvdXJjZUNvZGVUZXh0RWRpdG9yOworICAgIH0sCisKKyAgICBnZXQgaXNBY3RpdmUo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2lzQWN0aXZlOworICAgIH0sCisKKyAgICBw
YXVzZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy5fY2xlYXJUaW1lb3V0SWZOZWVk
ZWQoKTsKKyAgICAgICAgdGhpcy5faXNBY3RpdmUgPSBmYWxzZTsKKyAgICB9LAorCisgICAgcmVz
dW1lOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB0aGlzLl9jbGVhclRpbWVvdXRJZk5lZWRl
ZCgpOworICAgICAgICB0aGlzLl9pc0FjdGl2ZSA9IHRydWU7CisgICAgICAgIHRoaXMuaW5zZXJ0
QW5ub3RhdGlvbnMoKTsKKyAgICB9LAorCisgICAgcmVmcmVzaDogZnVuY3Rpb24oKQorICAgIHsK
KyAgICAgICAgY29uc29sZS5hc3NlcnQodGhpcy5faXNBY3RpdmUpOworICAgICAgICBpZiAoIXRo
aXMuX2lzQWN0aXZlKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHRoaXMuX2NsZWFy
VGltZW91dElmTmVlZGVkKCk7CisgICAgICAgIHRoaXMuaW5zZXJ0QW5ub3RhdGlvbnMoKTsKKyAg
ICB9LAorCisgICAgcmVzZXQ6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMuX2NsZWFy
VGltZW91dElmTmVlZGVkKCk7CisgICAgICAgIHRoaXMuX2lzQWN0aXZlID0gdHJ1ZTsKKyAgICAg
ICAgdGhpcy5jbGVhckFubm90YXRpb25zKCk7CisgICAgICAgIHRoaXMuaW5zZXJ0QW5ub3RhdGlv
bnMoKTsKKyAgICB9LAorCisgICAgY2xlYXI6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRo
aXMucGF1c2UoKTsKKyAgICAgICAgdGhpcy5jbGVhckFubm90YXRpb25zKCk7CisgICAgfSwKKwor
ICAgIC8vIFByb3RlY3RlZAorCisgICAgaW5zZXJ0QW5ub3RhdGlvbnM6IGZ1bmN0aW9uKCkKKyAg
ICB7CisgICAgICAgIC8vIEltcGxlbWVudGVkIGJ5IHN1YmNsYXNzZXMuCisgICAgfSwKKworICAg
IGNsZWFyQW5ub3RhdGlvbnM6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIC8vIEltcGxlbWVu
dGVkIGJ5IHN1YmNsYXNzZXMuCisgICAgfSwKKworICAgIC8vIFByaXZhdGUKKworICAgIF9jbGVh
clRpbWVvdXRJZk5lZWRlZDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuX3Rp
bWVvdXRJZGVudGlmaWVyKSB7CisgICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZW91
dElkZW50aWZpZXIpOworICAgICAgICAgICAgdGhpcy5fdGltZW91dElkZW50aWZpZXIgPSBudWxs
OworICAgICAgICB9CisgICAgfQorfTsKSW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2Vy
SW50ZXJmYWNlL0NvbnRyb2xsZXJzL0Fubm90YXRvck1hbmFnZXIuanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvQW5ub3RhdG9y
TWFuYWdlci5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL0NvbnRyb2xsZXJzL0Fubm90YXRvck1hbmFnZXIuanMJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxMDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFNhYW0gQmFyYXRpIDxzYWFt
YmFyYXRpMUBnbWFpbC5jb20+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK1dlYkluc3BlY3Rvci5Bbm5vdGF0b3JNYW5h
Z2VyID0gZnVuY3Rpb24oKQoreworICAgIFdlYkluc3BlY3Rvci5PYmplY3QuY2FsbCh0aGlzKTsK
KworICAgIHRoaXMuX2Fubm90YXRvcnMgPSBuZXcgTWFwOworfTsKKworV2ViSW5zcGVjdG9yLkFu
bm90YXRvck1hbmFnZXIucHJvdG90eXBlID0geworICAgIGNvbnN0cnVjdG9yOiBXZWJJbnNwZWN0
b3IuQW5ub3RhdG9yTWFuYWdlciwKKyAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5PYmplY3Qu
cHJvdG90eXBlLAorCisgICAgLy8gUHVibGljCisKKyAgICBhZGRBbm5vdGF0b3I6IGZ1bmN0aW9u
KGtleSwgYW5ub3RhdG9yKQorICAgIHsKKyAgICAgICAgY29uc29sZS5hc3NlcnQoYW5ub3RhdG9y
IGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLkFubm90YXRvcik7CisgICAgICAgIHRoaXMuX2Fubm90
YXRvcnMuc2V0KGtleSwgYW5ub3RhdG9yKTsKKyAgICB9LAorCisgICAgZ2V0QW5ub3RhdG9yOiBm
dW5jdGlvbihrZXkpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fYW5ub3RhdG9ycy5nZXQo
a2V5KSB8fCBudWxsOworICAgIH0sCisKKyAgICBpc0Fubm90YXRvckFjdGl2ZTogZnVuY3Rpb24o
a2V5KQorICAgIHsKKyAgICAgICAgdmFyIGFubm90YXRvciA9IHRoaXMuZ2V0QW5ub3RhdG9yKGtl
eSk7CisgICAgICAgIGlmICghYW5ub3RhdG9yKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICByZXR1cm4gYW5ub3RhdG9yLmlzQWN0aXZlOworICAgIH0sCisKKyAgICBwYXVzZUFs
bDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgZm9yICh2YXIgYW5ub3RhdG9yIG9mIHRoaXMu
X2dldEFubm90YXRvcnMoKSkKKyAgICAgICAgICAgIGFubm90YXRvci5wYXVzZSgpOworICAgIH0s
CisKKyAgICByZXN1bWVBbGw6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGZvciAodmFyIGFu
bm90YXRvciBvZiB0aGlzLl9nZXRBbm5vdGF0b3JzKCkpCisgICAgICAgICAgICBhbm5vdGF0b3Iu
cmVzdW1lKCk7CisgICAgfSwKKworICAgIHJlZnJlc2hBbGxJZkFjdGl2ZTogZnVuY3Rpb24oKQor
ICAgIHsKKyAgICAgICAgZm9yICh2YXIgYW5ub3RhdG9yIG9mIHRoaXMuX2dldEFubm90YXRvcnMo
KSkgeworICAgICAgICAgICAgaWYgKGFubm90YXRvci5pc0FjdGl2ZSkKKyAgICAgICAgICAgICAg
ICBhbm5vdGF0b3IucmVmcmVzaCgpOworICAgICAgICB9CisgICAgfSwKKworICAgIHJlc2V0QWxs
SWZBY3RpdmU6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGZvciAodmFyIGFubm90YXRvciBv
ZiB0aGlzLl9nZXRBbm5vdGF0b3JzKCkpIHsKKyAgICAgICAgICAgIGlmIChhbm5vdGF0b3IuaXNB
Y3RpdmUpCisgICAgICAgICAgICAgICAgYW5ub3RhdG9yLnJlc2V0KCk7CisgICAgICAgIH0KKyAg
ICB9LAorCisgICAgY2xlYXJBbGw6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGZvciAodmFy
IGFubm90YXRvciBvZiB0aGlzLl9nZXRBbm5vdGF0b3JzKCkpCisgICAgICAgICAgICBhbm5vdGF0
b3IuY2xlYXIoKTsKKyAgICB9LAorCisgICAgcmVtb3ZlQWxsQW5ub3RhdG9yczogZnVuY3Rpb24o
KQorICAgIHsKKyAgICAgICAgdGhpcy5fYW5ub3RhdG9ycy5jbGVhcigpOworICAgIH0sCisKKyAg
ICAvLyBQcml2YXRlCisKKyAgICBfZ2V0QW5ub3RhdG9yczogZnVuY3Rpb24oKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHRoaXMuX2Fubm90YXRvcnMudmFsdWVzKCk7CisgICAgfQorfTsKSW5kZXg6
IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL1R5cGVUb2tl
bkFubm90YXRvci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlcklu
dGVyZmFjZS9Db250cm9sbGVycy9UeXBlVG9rZW5Bbm5vdGF0b3IuanMJKHJldmlzaW9uIDE3NzU4
OSkKKysrIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL1R5
cGVUb2tlbkFubm90YXRvci5qcwkod29ya2luZyBjb3B5KQpAQCAtMjUsNjYgKzI1LDE5IEBACiAK
IFdlYkluc3BlY3Rvci5UeXBlVG9rZW5Bbm5vdGF0b3IgPSBmdW5jdGlvbihzb3VyY2VDb2RlVGV4
dEVkaXRvciwgc2NyaXB0KQogewotICAgIFdlYkluc3BlY3Rvci5PYmplY3QuY2FsbCh0aGlzKTsK
LQotICAgIGNvbnNvbGUuYXNzZXJ0KHNvdXJjZUNvZGVUZXh0RWRpdG9yICYmIHNvdXJjZUNvZGVU
ZXh0RWRpdG9yIGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLCBz
b3VyY2VDb2RlVGV4dEVkaXRvcik7Ci0gICAgY29uc29sZS5hc3NlcnQoc2NyaXB0LCBzY3JpcHQp
OworICAgIFdlYkluc3BlY3Rvci5Bbm5vdGF0b3IuY2FsbCh0aGlzLCBzb3VyY2VDb2RlVGV4dEVk
aXRvcik7CiAKICAgICB0aGlzLl9zY3JpcHQgPSBzY3JpcHQ7Ci0gICAgdGhpcy5fc291cmNlQ29k
ZVRleHRFZGl0b3IgPSBzb3VyY2VDb2RlVGV4dEVkaXRvcjsKICAgICB0aGlzLl90eXBlVG9rZW5O
b2RlcyA9IFtdOwogICAgIHRoaXMuX3R5cGVUb2tlbkJvb2ttYXJrcyA9IFtdOwotICAgIHRoaXMu
X3RpbWVvdXRJZGVudGlmaWVyID0gbnVsbDsKLSAgICB0aGlzLl9pc0FjdGl2ZSA9IGZhbHNlOwog
fTsKIAogV2ViSW5zcGVjdG9yLlR5cGVUb2tlbkFubm90YXRvci5wcm90b3R5cGUgPSB7CiAgICAg
Y29uc3RydWN0b3I6IFdlYkluc3BlY3Rvci5UeXBlVG9rZW5Bbm5vdGF0b3IsCi0gICAgX19wcm90
b19fOiBXZWJJbnNwZWN0b3IuT2JqZWN0LnByb3RvdHlwZSwKKyAgICBfX3Byb3RvX186IFdlYklu
c3BlY3Rvci5Bbm5vdGF0b3IucHJvdG90eXBlLAogCiAgICAgLy8gUHVibGljCiAKLSAgICBnZXQg
aXNBY3RpdmUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2lzQWN0aXZlOwotICAgIH0s
Ci0KLSAgICBnZXQgc291cmNlQ29kZVRleHRFZGl0b3IoKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IHRoaXMuX3NvdXJjZUNvZGVUZXh0RWRpdG9yOwotICAgIH0sCi0KLSAgICBwYXVzZTogZnVuY3Rp
b24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fY2xlYXJUaW1lb3V0SWZOZWVkZWQoKTsKLSAgICAg
ICAgdGhpcy5faXNBY3RpdmUgPSBmYWxzZTsKLSAgICB9LAotCi0gICAgcmVzdW1lOiBmdW5jdGlv
bigpCi0gICAgewotICAgICAgICB0aGlzLl9jbGVhclRpbWVvdXRJZk5lZWRlZCgpOwotICAgICAg
ICB0aGlzLl9pc0FjdGl2ZSA9IHRydWU7Ci0gICAgICAgIHRoaXMuX2luc2VydEFubm90YXRpb25z
KCk7Ci0gICAgfSwKLQotICAgIHJlZnJlc2g6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGNv
bnNvbGUuYXNzZXJ0KHRoaXMuX2lzQWN0aXZlKTsKLSAgICAgICAgaWYgKCF0aGlzLl9pc0FjdGl2
ZSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB0aGlzLl9jbGVhclRpbWVvdXRJZk5l
ZWRlZCgpOwotICAgICAgICB0aGlzLl9pbnNlcnRBbm5vdGF0aW9ucygpOwotICAgIH0sCi0KLSAg
ICByZXNldDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdGhpcy5fY2xlYXJUaW1lb3V0SWZO
ZWVkZWQoKTsKLSAgICAgICAgdGhpcy5faXNBY3RpdmUgPSB0cnVlOwotICAgICAgICB0aGlzLl9j
bGVhclR5cGVUb2tlbnMoKTsKLSAgICAgICAgdGhpcy5faW5zZXJ0QW5ub3RhdGlvbnMoKTsKLSAg
ICB9LAotCiAgICAgdG9nZ2xlVHlwZUFubm90YXRpb25zOiBmdW5jdGlvbigpCiAgICAgewogICAg
ICAgICBpZiAodGhpcy5faXNBY3RpdmUpIHsKQEAgLTk4LDkgKzUxLDkgQEAgV2ViSW5zcGVjdG9y
LlR5cGVUb2tlbkFubm90YXRvci5wcm90b3R5cAogICAgICAgICByZXR1cm4gdGhpcy5faXNBY3Rp
dmU7CiAgICAgfSwKIAotICAgIC8vIFByaXZhdGUKKyAgICAvLyBQcm90ZWN0ZWQKIAotICAgIF9p
bnNlcnRBbm5vdGF0aW9uczogZnVuY3Rpb24oKQorICAgIGluc2VydEFubm90YXRpb25zOiBmdW5j
dGlvbigpCiAgICAgewogICAgICAgICBpZiAoIXRoaXMuX2lzQWN0aXZlKQogICAgICAgICAgICAg
cmV0dXJuOwpAQCAtMTExLDcgKzY0LDcgQEAgV2ViSW5zcGVjdG9yLlR5cGVUb2tlbkFubm90YXRv
ci5wcm90b3R5cAogICAgICAgICAgICAgdGhpcy5fc2NyaXB0LnJlcXVlc3RTY3JpcHRTeW50YXhU
cmVlKGZ1bmN0aW9uKHN5bnRheFRyZWUpIHsKICAgICAgICAgICAgICAgICAvLyBBZnRlciByZXF1
ZXN0aW5nIHRoZSB0cmVlLCB3ZSBzdGlsbCBtaWdodCBnZXQgYSBudWxsIHRyZWUgZnJvbSBhIHBh
cnNlIGVycm9yLgogICAgICAgICAgICAgICAgIGlmIChzeW50YXhUcmVlKQotICAgICAgICAgICAg
ICAgICAgICB0aGlzLl9pbnNlcnRBbm5vdGF0aW9ucygpOworICAgICAgICAgICAgICAgICAgICB0
aGlzLmluc2VydEFubm90YXRpb25zKCk7CiAgICAgICAgICAgICB9LmJpbmQodGhpcykpOwogCiAg
ICAgICAgICAgICByZXR1cm47CkBAIC0xMjAsNyArNzMsNyBAQCBXZWJJbnNwZWN0b3IuVHlwZVRv
a2VuQW5ub3RhdG9yLnByb3RvdHlwCiAgICAgICAgIGlmICghc2NyaXB0U3ludGF4VHJlZS5wYXJz
ZWRTdWNjZXNzZnVsbHkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgdmFyIHtzdGFy
dE9mZnNldCwgZW5kT2Zmc2V0fSA9IHRoaXMuX3NvdXJjZUNvZGVUZXh0RWRpdG9yLnZpc2libGVS
YW5nZU9mZnNldHMoKTsKKyAgICAgICAgdmFyIHtzdGFydE9mZnNldCwgZW5kT2Zmc2V0fSA9IHRo
aXMuc291cmNlQ29kZVRleHRFZGl0b3IudmlzaWJsZVJhbmdlT2Zmc2V0cygpOwogCiAgICAgICAg
IHZhciBzdGFydFRpbWUgPSBEYXRlLm5vdygpOwogICAgICAgICB2YXIgYWxsTm9kZXNJblJhbmdl
ID0gc2NyaXB0U3ludGF4VHJlZS5maWx0ZXJCeVJhbmdlKHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQp
OwpAQCAtMTM3LDExICs5MCwxOCBAQCBXZWJJbnNwZWN0b3IuVHlwZVRva2VuQW5ub3RhdG9yLnBy
b3RvdHlwCiAKICAgICAgICAgICAgIHRoaXMuX3RpbWVvdXRJZGVudGlmaWVyID0gc2V0VGltZW91
dChmdW5jdGlvbiB0aW1lb3V0VXBkYXRlKCkgewogICAgICAgICAgICAgICAgIHRoaXMuX3RpbWVv
dXRJZGVudGlmaWVyID0gbnVsbDsKLSAgICAgICAgICAgICAgICB0aGlzLl9pbnNlcnRBbm5vdGF0
aW9ucygpOworICAgICAgICAgICAgICAgIHRoaXMuaW5zZXJ0QW5ub3RhdGlvbnMoKTsKICAgICAg
ICAgICAgIH0uYmluZCh0aGlzKSwgdGltZW91dFRpbWUpOwogICAgICAgICB9LmJpbmQodGhpcykp
OwogICAgIH0sCiAKKyAgICBjbGVhckFubm90YXRpb25zOiBmdW5jdGlvbigpCisgICAgeworICAg
ICAgICB0aGlzLl9jbGVhclR5cGVUb2tlbnMoKTsKKyAgICB9LAorCisgICAgLy8gUHJpdmF0ZQor
CiAgICAgX2luc2VydFR5cGVUb2tlbnNGb3JFYWNoTm9kZTogZnVuY3Rpb24obm9kZSkKICAgICB7
CiAgICAgICAgIHZhciBzY3JpcHRTeW50YXhUcmVlID0gdGhpcy5fc2NyaXB0Ll9zY3JpcHRTeW50
YXhUcmVlOwpAQCAtMTc1LDE1ICsxMzUsMTUgQEAgV2ViSW5zcGVjdG9yLlR5cGVUb2tlbkFubm90
YXRvci5wcm90b3R5cAogCiAgICAgX2luc2VydFRva2VuOiBmdW5jdGlvbihvcmlnaW5hbE9mZnNl
dCwgbm9kZSwgc2hvdWxkVHJhbnNsYXRlT2Zmc2V0VG9BZnRlclBhcmFtZXRlckxpc3QsIHR5cGVU
b2tlblRpdGxlVHlwZSwgZnVuY3Rpb25PclZhcmlhYmxlTmFtZSkKICAgICB7Ci0gICAgICAgIHZh
ciB0b2tlblBvc2l0aW9uID0gdGhpcy5fc291cmNlQ29kZVRleHRFZGl0b3Iub3JpZ2luYWxPZmZz
ZXRUb0N1cnJlbnRQb3NpdGlvbihvcmlnaW5hbE9mZnNldCk7Ci0gICAgICAgIHZhciBjdXJyZW50
T2Zmc2V0ID0gdGhpcy5fc291cmNlQ29kZVRleHRFZGl0b3IuY3VycmVudFBvc2l0aW9uVG9DdXJy
ZW50T2Zmc2V0KHRva2VuUG9zaXRpb24pOwotICAgICAgICB2YXIgc291cmNlU3RyaW5nID0gdGhp
cy5fc291cmNlQ29kZVRleHRFZGl0b3Iuc3RyaW5nOworICAgICAgICB2YXIgdG9rZW5Qb3NpdGlv
biA9IHRoaXMuc291cmNlQ29kZVRleHRFZGl0b3Iub3JpZ2luYWxPZmZzZXRUb0N1cnJlbnRQb3Np
dGlvbihvcmlnaW5hbE9mZnNldCk7CisgICAgICAgIHZhciBjdXJyZW50T2Zmc2V0ID0gdGhpcy5z
b3VyY2VDb2RlVGV4dEVkaXRvci5jdXJyZW50UG9zaXRpb25Ub0N1cnJlbnRPZmZzZXQodG9rZW5Q
b3NpdGlvbik7CisgICAgICAgIHZhciBzb3VyY2VTdHJpbmcgPSB0aGlzLnNvdXJjZUNvZGVUZXh0
RWRpdG9yLnN0cmluZzsKIAogICAgICAgICBpZiAoc2hvdWxkVHJhbnNsYXRlT2Zmc2V0VG9BZnRl
clBhcmFtZXRlckxpc3QpIHsKICAgICAgICAgICAgIC8vIFRyYW5zbGF0ZSB0aGUgcG9zaXRpb24g
dG8gdGhlIGNsb3NpbmcgcGFyZW50aGVzaXMgb2YgdGhlIGZ1bmN0aW9uIGFyZ3VtZW50czoKICAg
ICAgICAgICAgIC8vIHRyYW5zbGF0ZSBmcm9tOiBbdHlwZS10b2tlbl0gZnVuY3Rpb24gZm9vKCkg
e30gPT4gdG86IGZ1bmN0aW9uIGZvbygpIFt0eXBlLXRva2VuXSB7fQogICAgICAgICAgICAgY3Vy
cmVudE9mZnNldCA9IHRoaXMuX3RyYW5zbGF0ZVRvT2Zmc2V0QWZ0ZXJGdW5jdGlvblBhcmFtZXRl
ckxpc3Qobm9kZSwgY3VycmVudE9mZnNldCwgc291cmNlU3RyaW5nKTsKLSAgICAgICAgICAgIHRv
a2VuUG9zaXRpb24gPSB0aGlzLl9zb3VyY2VDb2RlVGV4dEVkaXRvci5jdXJyZW50T2Zmc2V0VG9D
dXJyZW50UG9zaXRpb24oY3VycmVudE9mZnNldCk7CisgICAgICAgICAgICB0b2tlblBvc2l0aW9u
ID0gdGhpcy5zb3VyY2VDb2RlVGV4dEVkaXRvci5jdXJyZW50T2Zmc2V0VG9DdXJyZW50UG9zaXRp
b24oY3VycmVudE9mZnNldCk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBOb3RlOiBib29rbWFy
a3MgcmVuZGVyIHRvIHRoZSBsZWZ0IG9mIHRoZSBjaGFyYWN0ZXIgdGhleSdyZSBiZWluZyBkaXNw
bGF5ZWQgbmV4dCB0by4KQEAgLTE5Miw3ICsxNTIsNyBAQCBXZWJJbnNwZWN0b3IuVHlwZVRva2Vu
QW5ub3RhdG9yLnByb3RvdHlwCiAgICAgICAgIHZhciBzaG91bGRIYXZlTGVmdE1hcmdpbiA9IGN1
cnJlbnRPZmZzZXQgIT09IDAgJiYgIWlzU3BhY2VSZWdleHAudGVzdChzb3VyY2VTdHJpbmdbY3Vy
cmVudE9mZnNldCAtIDFdKTsKICAgICAgICAgdmFyIHNob3VsZEhhdmVSaWdodE1hcmdpbiA9ICFp
c1NwYWNlUmVnZXhwLnRlc3Qoc291cmNlU3RyaW5nW2N1cnJlbnRPZmZzZXRdKTsKICAgICAgICAg
dmFyIHR5cGVUb2tlbiA9IG5ldyBXZWJJbnNwZWN0b3IuVHlwZVRva2VuVmlldyh0aGlzLCBzaG91
bGRIYXZlUmlnaHRNYXJnaW4sIHNob3VsZEhhdmVMZWZ0TWFyZ2luLCB0eXBlVG9rZW5UaXRsZVR5
cGUsIGZ1bmN0aW9uT3JWYXJpYWJsZU5hbWUpOwotICAgICAgICB2YXIgYm9va21hcmsgPSB0aGlz
Ll9zb3VyY2VDb2RlVGV4dEVkaXRvci5zZXRJbmxpbmVXaWRnZXQodG9rZW5Qb3NpdGlvbiwgdHlw
ZVRva2VuLmVsZW1lbnQpOworICAgICAgICB2YXIgYm9va21hcmsgPSB0aGlzLnNvdXJjZUNvZGVU
ZXh0RWRpdG9yLnNldElubGluZVdpZGdldCh0b2tlblBvc2l0aW9uLCB0eXBlVG9rZW4uZWxlbWVu
dCk7CiAgICAgICAgIG5vZGUuYXR0YWNobWVudHMuX190eXBlVG9rZW4gPSB0eXBlVG9rZW47CiAg
ICAgICAgIHRoaXMuX3R5cGVUb2tlbk5vZGVzLnB1c2gobm9kZSk7CiAgICAgICAgIHRoaXMuX3R5
cGVUb2tlbkJvb2ttYXJrcy5wdXNoKGJvb2ttYXJrKTsKQEAgLTI3MSwxMyArMjMxLDUgQEAgV2Vi
SW5zcGVjdG9yLlR5cGVUb2tlbkFubm90YXRvci5wcm90b3R5cAogCiAgICAgICAgIHRoaXMuX3R5
cGVUb2tlbk5vZGVzID0gW107CiAgICAgICAgIHRoaXMuX3R5cGVUb2tlbkJvb2ttYXJrcyA9IFtd
OwotICAgIH0sCi0KLSAgICBfY2xlYXJUaW1lb3V0SWZOZWVkZWQ6IGZ1bmN0aW9uKCkKLSAgICB7
Ci0gICAgICAgIGlmICh0aGlzLl90aW1lb3V0SWRlbnRpZmllcikgewotICAgICAgICAgICAgY2xl
YXJUaW1lb3V0KHRoaXMuX3RpbWVvdXRJZGVudGlmaWVyKTsKLSAgICAgICAgICAgIHRoaXMuX3Rp
bWVvdXRJZGVudGlmaWVyID0gbnVsbDsKLSAgICAgICAgfQogICAgIH0KIH07CkluZGV4OiBTb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9Tb3VyY2VDb2RlVGV4dEVkaXRv
ci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9W
aWV3cy9Tb3VyY2VDb2RlVGV4dEVkaXRvci5qcwkocmV2aXNpb24gMTc3NTg5KQorKysgU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvU291cmNlQ29kZVRleHRFZGl0b3Iu
anMJKHdvcmtpbmcgY29weSkKQEAgLTM2LDggKzM2LDggQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNv
ZGVUZXh0RWRpdG9yID0gZnVuYwogCiAgICAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IuY2FsbCh0
aGlzLCBudWxsLCBudWxsLCB0aGlzKTsKIAotICAgIHRoaXMuX3R5cGVUb2tlbkFubm90YXRvciA9
IG51bGw7CiAgICAgdGhpcy5fdHlwZVRva2VuU2Nyb2xsSGFuZGxlciA9IG51bGw7CisgICAgdGhp
cy5fYW5ub3RhdG9yTWFuYWdlciA9IG5ldyBXZWJJbnNwZWN0b3IuQW5ub3RhdG9yTWFuYWdlcjsK
IAogICAgIC8vIEZJWE1FOiBDdXJyZW50bHkgdGhpcyBqdXN0IGp1bXBzIGJldHdlZW4gcmVzb3Vy
Y2VzIGFuZCByZWxhdGVkIHNvdXJjZSBtYXAgcmVzb3VyY2VzLiBJdCBkb2Vzbid0ICJqdW1wIHRv
IHN5bWJvbCIgeWV0LgogICAgIHRoaXMuX3VwZGF0ZVRva2VuVHJhY2tpbmdDb250cm9sbGVyU3Rh
dGUoKTsKQEAgLTkwLDYgKzkwLDggQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9y
LkR1cmF0aQogCiBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IuQXV0b0Zvcm1hdE1p
bmltdW1MaW5lTGVuZ3RoID0gNTAwOwogCitXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0
b3IuVHlwZVRva2VuQW5ub3RhdG9yS2V5ID0gIlR5cGVUb2tlbkFubm90YXRvcktleSI7CisKIFdl
Ykluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5FdmVudCA9IHsKICAgICBDb250ZW50V2ls
bFBvcHVsYXRlOiAic291cmNlLWNvZGUtdGV4dC1lZGl0b3ItY29udGVudC13aWxsLXBvcHVsYXRl
IiwKICAgICBDb250ZW50RGlkUG9wdWxhdGU6ICJzb3VyY2UtY29kZS10ZXh0LWVkaXRvci1jb250
ZW50LWRpZC1wb3B1bGF0ZSIKQEAgLTEwOSw4ICsxMTEsNyBAQCBXZWJJbnNwZWN0b3IuU291cmNl
Q29kZVRleHRFZGl0b3IucHJvdG90CiAgICAgewogICAgICAgICBXZWJJbnNwZWN0b3IuVGV4dEVk
aXRvci5wcm90b3R5cGUuc2hvd24uY2FsbCh0aGlzKTsKIAotICAgICAgICBpZiAodGhpcy5fdHlw
ZVRva2VuQW5ub3RhdG9yKQotICAgICAgICAgICAgdGhpcy5fdHlwZVRva2VuQW5ub3RhdG9yLnJl
c3VtZSgpOworICAgICAgICB0aGlzLl9hbm5vdGF0b3JNYW5hZ2VyLnJlc3VtZUFsbCgpOwogICAg
IH0sCiAKICAgICBoaWRkZW46IGZ1bmN0aW9uKCkKQEAgLTEyMyw4ICsxMjQsNyBAQCBXZWJJbnNw
ZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90CiAgICAgICAgIAogICAgICAgICB0aGlz
Ll9kaXNtaXNzRWRpdGluZ0NvbnRyb2xsZXIodHJ1ZSk7CiAKLSAgICAgICAgaWYgKHRoaXMuX3R5
cGVUb2tlbkFubm90YXRvcikKLSAgICAgICAgICAgIHRoaXMuX3R5cGVUb2tlbkFubm90YXRvci5w
YXVzZSgpOworICAgICAgICB0aGlzLl9hbm5vdGF0b3JNYW5hZ2VyLnBhdXNlQWxsKCk7CiAgICAg
fSwKIAogICAgIGNsb3NlOiBmdW5jdGlvbigpCkBAIC0xNjYsNyArMTY2LDcgQEAgV2ViSW5zcGVj
dG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdAogCiAgICAgY2FuU2hvd1R5cGVBbm5vdGF0
aW9uczogZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgcmV0dXJuICEhdGhpcy5fdHlwZVRva2Vu
QW5ub3RhdG9yOworICAgICAgICByZXR1cm4gISF0aGlzLl9hbm5vdGF0b3JNYW5hZ2VyLmdldEFu
bm90YXRvcihXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IuVHlwZVRva2VuQW5ub3Rh
dG9yS2V5KTsKICAgICB9LAogCiAgICAgY3VzdG9tUGVyZm9ybVNlYXJjaDogZnVuY3Rpb24ocXVl
cnkpCkBAIC0yNTUsMTQgKzI1NSwyMCBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0
b3IucHJvdG90CiAKICAgICAgICAgZm9yICh2YXIgcmFuZ2Ugb2YgbmV3UmFuZ2VzKQogICAgICAg
ICAgICAgdGhpcy5fdXBkYXRlRWRpdGFibGVNYXJrZXJzKHJhbmdlKTsKKworICAgICAgICB0aGlz
Ll9hbm5vdGF0b3JNYW5hZ2VyLmNsZWFyQWxsKCk7CisgICAgICAgIHRoaXMuX2Fubm90YXRvck1h
bmFnZXIucmVtb3ZlQWxsQW5ub3RhdG9ycygpOworICAgICAgICBpZiAodGhpcy5fdHlwZVRva2Vu
U2Nyb2xsSGFuZGxlcikKKyAgICAgICAgICAgIHRoaXMuX2Rpc2FibGVTY3JvbGxFdmVudHNGb3JU
eXBlVG9rZW5Bbm5vdGF0b3IoKTsKICAgICB9LAogCiAgICAgdG9nZ2xlVHlwZUFubm90YXRpb25z
OiBmdW5jdGlvbigpCiAgICAgewotICAgICAgICBpZiAoIXRoaXMuX3R5cGVUb2tlbkFubm90YXRv
cikKKyAgICAgICAgdmFyIHR5cGVUb2tlbkFubm90YXRvciA9IHRoaXMuX2Fubm90YXRvck1hbmFn
ZXIuZ2V0QW5ub3RhdG9yKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5UeXBlVG9r
ZW5Bbm5vdGF0b3JLZXkpOworICAgICAgICBpZiAoIXR5cGVUb2tlbkFubm90YXRvcikKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICB2YXIgaXNBY3RpdmF0ZWQgPSB0aGlzLl90
eXBlVG9rZW5Bbm5vdGF0b3IudG9nZ2xlVHlwZUFubm90YXRpb25zKCk7CisgICAgICAgIHZhciBp
c0FjdGl2YXRlZCA9IHR5cGVUb2tlbkFubm90YXRvci50b2dnbGVUeXBlQW5ub3RhdGlvbnMoKTsK
ICAgICAgICAgaWYgKGlzQWN0aXZhdGVkKSB7CiAgICAgICAgICAgICBSdW50aW1lQWdlbnQuZW5h
YmxlVHlwZVByb2ZpbGVyKCk7CiAgICAgICAgICAgICB0aGlzLl9lbmFibGVTY3JvbGxFdmVudHNG
b3JUeXBlVG9rZW5Bbm5vdGF0b3IoKTsKQEAgLTMwMiw4ICszMDgsNyBAQCBXZWJJbnNwZWN0b3Iu
U291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90CiAgICAgewogICAgICAgICBXZWJJbnNwZWN0b3Iu
VGV4dEVkaXRvci5wcm90b3R5cGUucHJldHR5UHJpbnQuY2FsbCh0aGlzLCBwcmV0dHkpOwogCi0g
ICAgICAgIGlmICh0aGlzLl90eXBlVG9rZW5Bbm5vdGF0b3IgJiYgdGhpcy5fdHlwZVRva2VuQW5u
b3RhdG9yLmlzQWN0aXZlKQotICAgICAgICAgICAgdGhpcy5fdHlwZVRva2VuQW5ub3RhdG9yLnJl
c2V0KCk7CisgICAgICAgIHRoaXMuX2Fubm90YXRvck1hbmFnZXIucmVzZXRBbGxJZkFjdGl2ZSgp
OwogICAgIH0sCiAKICAgICAvLyBQcml2YXRlCkBAIC0xMDQyLDE2ICsxMDQ3LDE0IEBAIFdlYklu
c3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3QKICAgICBfZGVidWdnZXJEaWRQYXVz
ZTogZnVuY3Rpb24oZXZlbnQpCiAgICAgewogICAgICAgICB0aGlzLl91cGRhdGVUb2tlblRyYWNr
aW5nQ29udHJvbGxlclN0YXRlKCk7Ci0gICAgICAgIGlmICh0aGlzLl90eXBlVG9rZW5Bbm5vdGF0
b3IgJiYgdGhpcy5fdHlwZVRva2VuQW5ub3RhdG9yLmlzQWN0aXZlKQotICAgICAgICAgICAgdGhp
cy5fdHlwZVRva2VuQW5ub3RhdG9yLnJlZnJlc2goKTsKKyAgICAgICAgdGhpcy5fYW5ub3RhdG9y
TWFuYWdlci5yZWZyZXNoQWxsSWZBY3RpdmUoKTsKICAgICB9LAogCiAgICAgX2RlYnVnZ2VyRGlk
UmVzdW1lOiBmdW5jdGlvbihldmVudCkKICAgICB7CiAgICAgICAgIHRoaXMuX3VwZGF0ZVRva2Vu
VHJhY2tpbmdDb250cm9sbGVyU3RhdGUoKTsKICAgICAgICAgdGhpcy5fZGlzbWlzc1BvcG92ZXIo
KTsKLSAgICAgICAgaWYgKHRoaXMuX3R5cGVUb2tlbkFubm90YXRvciAmJiB0aGlzLl90eXBlVG9r
ZW5Bbm5vdGF0b3IuaXNBY3RpdmUpCi0gICAgICAgICAgICB0aGlzLl90eXBlVG9rZW5Bbm5vdGF0
b3IucmVmcmVzaCgpOworICAgICAgICB0aGlzLl9hbm5vdGF0b3JNYW5hZ2VyLnJlZnJlc2hBbGxJ
ZkFjdGl2ZSgpOwogICAgIH0sCiAKICAgICBfc291cmNlQ29kZVNvdXJjZU1hcEFkZGVkOiBmdW5j
dGlvbihldmVudCkKQEAgLTEwNjcsNyArMTA3MCw3IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2Rl
VGV4dEVkaXRvci5wcm90b3QKICAgICAgICAgdmFyIG1vZGUgPSBXZWJJbnNwZWN0b3IuQ29kZU1p
cnJvclRva2VuVHJhY2tpbmdDb250cm9sbGVyLk1vZGUuTm9uZTsKICAgICAgICAgaWYgKFdlYklu
c3BlY3Rvci5kZWJ1Z2dlck1hbmFnZXIucGF1c2VkKQogICAgICAgICAgICAgbW9kZSA9IFdlYklu
c3BlY3Rvci5Db2RlTWlycm9yVG9rZW5UcmFja2luZ0NvbnRyb2xsZXIuTW9kZS5KYXZhU2NyaXB0
RXhwcmVzc2lvbjsKLSAgICAgICAgZWxzZSBpZiAodGhpcy5fdHlwZVRva2VuQW5ub3RhdG9yICYm
IHRoaXMuX3R5cGVUb2tlbkFubm90YXRvci5pc0FjdGl2ZSkKKyAgICAgICAgZWxzZSBpZiAodGhp
cy5fYW5ub3RhdG9yTWFuYWdlci5pc0Fubm90YXRvckFjdGl2ZShXZWJJbnNwZWN0b3IuU291cmNl
Q29kZVRleHRFZGl0b3IuVHlwZVRva2VuQW5ub3RhdG9yS2V5KSkKICAgICAgICAgICAgIG1vZGUg
PSBXZWJJbnNwZWN0b3IuQ29kZU1pcnJvclRva2VuVHJhY2tpbmdDb250cm9sbGVyLk1vZGUuSmF2
YVNjcmlwdFR5cGVJbmZvcm1hdGlvbjsKICAgICAgICAgZWxzZSBpZiAodGhpcy5faGFzQ29sb3JN
YXJrZXJzKCkpCiAgICAgICAgICAgICBtb2RlID0gV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JUb2tl
blRyYWNraW5nQ29udHJvbGxlci5Nb2RlLk1hcmtlZFRva2VuczsKQEAgLTE1MjEsMjQgKzE1MjQs
MzEgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdAogICAgICAgICBk
ZWxldGUgdGhpcy5fZWRpdGluZ0NvbnRyb2xsZXI7CiAgICAgfSwKIAotICAgIF9tYWtlVHlwZVRv
a2VuQW5ub3RhdG9yOiBmdW5jdGlvbigpCisgICAgX2dldEFzc29jaWF0ZWRTY3JpcHQ6IGZ1bmN0
aW9uKCkKICAgICB7Ci0gICAgICAgIGlmICghUnVudGltZUFnZW50LmdldFJ1bnRpbWVUeXBlc0Zv
clZhcmlhYmxlc0F0T2Zmc2V0cykKLSAgICAgICAgICAgIHJldHVybjsKLQogICAgICAgICB2YXIg
c2NyaXB0ID0gbnVsbDsKICAgICAgICAgLy8gRklYTUU6IFRoaXMgbmVlZHMgdG8gbWUgbW9kaWZp
ZWQgdG8gd29yayB3aXRoIEhUTUwgZmlsZXMgd2l0aCBpbmxpbmUgc2NyaXB0IHRhZ3MuCiAgICAg
ICAgIGlmICh0aGlzLl9zb3VyY2VDb2RlIGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLlNjcmlwdCkK
ICAgICAgICAgICAgIHNjcmlwdCA9IHRoaXMuX3NvdXJjZUNvZGU7CiAgICAgICAgIGVsc2UgaWYg
KHRoaXMuX3NvdXJjZUNvZGUgaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuUmVzb3VyY2UgJiYgdGhp
cy5fc291cmNlQ29kZS50eXBlID09PSBXZWJJbnNwZWN0b3IuUmVzb3VyY2UuVHlwZS5TY3JpcHQg
JiYgdGhpcy5fc291cmNlQ29kZS5zY3JpcHRzLmxlbmd0aCkKICAgICAgICAgICAgIHNjcmlwdCA9
IHRoaXMuX3NvdXJjZUNvZGUuc2NyaXB0c1swXTsKKyAgICAgICAgcmV0dXJuIHNjcmlwdDsKKyAg
ICB9LAogCisgICAgX21ha2VUeXBlVG9rZW5Bbm5vdGF0b3I6IGZ1bmN0aW9uKCkKKyAgICB7Cisg
ICAgICAgIGlmICghUnVudGltZUFnZW50LmdldFJ1bnRpbWVUeXBlc0ZvclZhcmlhYmxlc0F0T2Zm
c2V0cykKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB2YXIgc2NyaXB0ID0gdGhpcy5f
Z2V0QXNzb2NpYXRlZFNjcmlwdCgpOwogICAgICAgICBpZiAoIXNjcmlwdCkKICAgICAgICAgICAg
IHJldHVybjsKIAotICAgICAgICB0aGlzLl90eXBlVG9rZW5Bbm5vdGF0b3IgPSBuZXcgV2ViSW5z
cGVjdG9yLlR5cGVUb2tlbkFubm90YXRvcih0aGlzLCBzY3JpcHQpOworICAgICAgICB2YXIgdHlw
ZVRva2VuQW5ub3RhdG9yID0gbmV3IFdlYkluc3BlY3Rvci5UeXBlVG9rZW5Bbm5vdGF0b3IodGhp
cywgc2NyaXB0KTsKKyAgICAgICAgdGhpcy5fYW5ub3RhdG9yTWFuYWdlci5hZGRBbm5vdGF0b3Io
V2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLlR5cGVUb2tlbkFubm90YXRvcktleSwg
dHlwZVRva2VuQW5ub3RhdG9yKTsKKwogICAgICAgICBpZiAoV2ViSW5zcGVjdG9yLnNob3dKYXZh
U2NyaXB0VHlwZUluZm9ybWF0aW9uU2V0dGluZy52YWx1ZSkgewotICAgICAgICAgICAgdGhpcy5f
dHlwZVRva2VuQW5ub3RhdG9yLnJlc2V0KCk7CisgICAgICAgICAgICB0eXBlVG9rZW5Bbm5vdGF0
b3IucmVzZXQoKTsKICAgICAgICAgICAgIHRoaXMuX2VuYWJsZVNjcm9sbEV2ZW50c0ZvclR5cGVU
b2tlbkFubm90YXRvcigpOwogICAgICAgICB9CiAgICAgfSwKQEAgLTE1NjAsOCArMTU3MCw4IEBA
IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3QKIAogICAgIF9tYWtlVHlw
ZVRva2VuU2Nyb2xsRXZlbnRIYW5kbGVyOiBmdW5jdGlvbigpCiAgICAgewotICAgICAgICB2YXIg
dHlwZVRva2VuQW5ub3RhdG9yID0gdGhpcy5fdHlwZVRva2VuQW5ub3RhdG9yOwogICAgICAgICB2
YXIgdGltZW91dElkZW50aWZpZXIgPSBudWxsOworICAgICAgICB2YXIgdHlwZVRva2VuQW5ub3Rh
dG9yID0gdGhpcy5fYW5ub3RhdG9yTWFuYWdlci5nZXRBbm5vdGF0b3IoV2ViSW5zcGVjdG9yLlNv
dXJjZUNvZGVUZXh0RWRpdG9yLlR5cGVUb2tlbkFubm90YXRvcktleSk7CiAgICAgICAgIGZ1bmN0
aW9uIHNjcm9sbEhhbmRsZXIoKQogICAgICAgICB7CiAgICAgICAgICAgICBpZiAodGltZW91dElk
ZW50aWZpZXIpCkBAIC0xNTcxLDExICsxNTgxLDE2IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2Rl
VGV4dEVkaXRvci5wcm90b3QKIAogICAgICAgICAgICAgdGltZW91dElkZW50aWZpZXIgPSBzZXRU
aW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgIHRpbWVvdXRJZGVudGlmaWVyID0g
bnVsbDsKLSAgICAgICAgICAgICAgICB0eXBlVG9rZW5Bbm5vdGF0b3IucmVzdW1lKCk7Ci0gICAg
ICAgICAgICB9LCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IuRHVyYXRpb25Ub1Vw
ZGF0ZVR5cGVUb2tlbnNBZnRlclNjcm9sbGluZyk7CisgICAgICAgICAgICAgICAgdmFyIHR5cGVU
b2tlbkFubm90YXRvciA9IHRoaXMuX2Fubm90YXRvck1hbmFnZXIuZ2V0QW5ub3RhdG9yKFdlYklu
c3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5UeXBlVG9rZW5Bbm5vdGF0b3JLZXkpOworICAg
ICAgICAgICAgICAgIC8vIFRoZXJlIGlzIGEgc21hbGwgY2hhbmNlIHRoYXQgd2UgZGlzYWJsZWQg
dGhlIHR5cGUgdG9rZW4gYW5ub3RhdG9yIGFuZCB0aGUgc2Nyb2xsIGhhbmRsZXIgCisgICAgICAg
ICAgICAgICAgLy8gZHVyaW5nIHRoZSBEdXJhdGlvblRvVXBkYXRlVHlwZVRva2Vuc0FmdGVyU2Ny
b2xsaW5nIHRpbWUgZGVsYXksIHNvIHdlIG11c3QgZW5zdXJlIHRoYXQgdGhpcworICAgICAgICAg
ICAgICAgIC8vIGlzIG5vdCBudWxsLgorICAgICAgICAgICAgICAgIGlmICh0eXBlVG9rZW5Bbm5v
dGF0b3IpCisgICAgICAgICAgICAgICAgICAgIHR5cGVUb2tlbkFubm90YXRvci5yZXN1bWUoKTsK
KyAgICAgICAgICAgIH0uYmluZCh0aGlzKSwgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRp
dG9yLkR1cmF0aW9uVG9VcGRhdGVUeXBlVG9rZW5zQWZ0ZXJTY3JvbGxpbmcpOwogICAgICAgICB9
CiAKLSAgICAgICAgcmV0dXJuIHNjcm9sbEhhbmRsZXI7CisgICAgICAgIHJldHVybiBzY3JvbGxI
YW5kbGVyLmJpbmQodGhpcyk7CiAgICAgfQogfTsKIAo=
</data>
<flag name="review"
          id="268468"
          type_id="1"
          status="+"
          setter="timothy"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>244145</attachid>
            <date>2015-01-07 00:40:36 -0800</date>
            <delta_ts>2015-01-07 02:34:49 -0800</delta_ts>
            <desc>patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>26335</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwkocmV2aXNpb24gMTc4MDE3KQorKysgU291cmNl
L1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcyIEBA
CisyMDE1LTAxLTA2ICBTYWFtIEJhcmF0aSAgPHNhYW1iYXJhdGkxQGdtYWlsLmNvbT4KKworICAg
ICAgICBXZWIgSW5zcGVjdG9yOiBBYnN0cmFjdCBjb21tb24gZnVuY3Rpb25zIGZyb20gVHlwZVRv
a2VuQW5ub3RhdG9yIGludG8gYSBwYXJlbnQgY2xhc3MgYW5kIGludHJvZHVjZSBhbiBBbm5vdGF0
b3JNYW5hZ2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMzk0MjYKKworICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCisKKyAgICAg
ICAgVGhpcyBwYXRjaCBjcmVhdGVzIGEgcGFyZW50IGNsYXNzLCBBbm5vdGF0b3IsIHRoYXQgVHlw
ZVRva2VuQW5ub3RhdG9yCisgICAgICAgIGluaGVyaXRzIGZyb20uIEFubm90YXRvciBkZWZpbmVz
IGEgY29tbW9uIHNldCBvZiBmdW5jdGlvbmFsaXR5CisgICAgICAgIHRoYXQgYSB0ZXh0IGVkaXRv
ciBhbm5vdGF0b3IgY2FuIHVzZSB0byBtYXJrIHVwIFVJLiBUaGlzIAorICAgICAgICBpcyBpbiBw
cmVwYXJhdGlvbiBvdGhlciBjbGFzc2VzIHRoYXQgd2lsbCBpbmhlcml0IGZyb20gQW5ub3RhdG9y
LgorICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRjaCBhbHNvIGludHJvZHVjZXMgQW5ub3RhdG9y
TWFuYWdlciB3aGljaCBjb250cm9scyBhCisgICAgICAgIHNldCBvZiBBbm5vdGF0b3JzIGFuZCBw
cm92aWRlcyBhIHNpbmdsZSBpbnRlcmZhY2UgZm9yCisgICAgICAgIGNvbnRyb2xsaW5nIHRoZW0u
CisKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0Fubm90YXRvci5qczogQWRk
ZWQuCisgICAgICAgIChXZWJJbnNwZWN0b3IuQW5ub3RhdG9yKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5Bbm5vdGF0b3IucHJvdG90eXBlLmdldCBzb3VyY2VDb2RlVGV4dEVkaXRvcik6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuQW5ub3RhdG9yLnByb3RvdHlwZS5nZXQgaXNBY3RpdmUpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLkFubm90YXRvci5wcm90b3R5cGUucGF1c2UpOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLkFubm90YXRvci5wcm90b3R5cGUucmVzdW1lKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5Bbm5vdGF0b3IucHJvdG90eXBlLnJlZnJlc2gpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLkFubm90YXRvci5wcm90b3R5cGUucmVzZXQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkFu
bm90YXRvci5wcm90b3R5cGUuY2xlYXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkFubm90YXRv
ci5wcm90b3R5cGUuaW5zZXJ0QW5ub3RhdGlvbnMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkFu
bm90YXRvci5wcm90b3R5cGUuY2xlYXJBbm5vdGF0aW9ucyk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuQW5ub3RhdG9yLnByb3RvdHlwZS5fY2xlYXJUaW1lb3V0SWZOZWVkZWQpOgorICAgICAgICAq
IFVzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvQW5ub3RhdG9yTWFuYWdlci5qczogQWRkZWQuCisg
ICAgICAgIChXZWJJbnNwZWN0b3IuQW5ub3RhdG9yTWFuYWdlcik6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuQW5ub3RhdG9yTWFuYWdlci5wcm90b3R5cGUuYWRkQW5ub3RhdG9yKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5Bbm5vdGF0b3JNYW5hZ2VyLnByb3RvdHlwZS5pc0Fubm90YXRvckFjdGl2
ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQW5ub3RhdG9yTWFuYWdlci5wcm90b3R5cGUucGF1
c2VBbGwpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkFubm90YXRvck1hbmFnZXIucHJvdG90eXBl
LnJlc3VtZUFsbCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQW5ub3RhdG9yTWFuYWdlci5wcm90
b3R5cGUucmVmcmVzaEFsbElmQWN0aXZlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Bbm5vdGF0
b3JNYW5hZ2VyLnByb3RvdHlwZS5yZXNldEFsbElmQWN0aXZlKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5Bbm5vdGF0b3JNYW5hZ2VyLnByb3RvdHlwZS5jbGVhckFsbCk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuQW5ub3RhdG9yTWFuYWdlci5wcm90b3R5cGUucmVtb3ZlQWxsQW5ub3RhdG9ycyk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuQW5ub3RhdG9yTWFuYWdlci5wcm90b3R5cGUuX2dldEFu
bm90YXRvcnMpOgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvVHlwZVRva2Vu
QW5ub3RhdG9yLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlR5cGVUb2tlbkFubm90YXRvcik6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuVHlwZVRva2VuQW5ub3RhdG9yLnByb3RvdHlwZS5pbnNl
cnRBbm5vdGF0aW9ucy4pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlR5cGVUb2tlbkFubm90YXRv
ci5wcm90b3R5cGUuY2xlYXJBbm5vdGF0aW9ucyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVHlw
ZVRva2VuQW5ub3RhdG9yLnByb3RvdHlwZS5faW5zZXJ0VG9rZW4pOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlR5cGVUb2tlbkFubm90YXRvci5wcm90b3R5cGUuZ2V0IGlzQWN0aXZlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkluc3BlY3Rvci5UeXBlVG9rZW5Bbm5vdGF0b3IucHJvdG90eXBlLmdl
dCBzb3VyY2VDb2RlVGV4dEVkaXRvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJJbnNwZWN0b3Iu
VHlwZVRva2VuQW5ub3RhdG9yLnByb3RvdHlwZS5wYXVzZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJJbnNwZWN0b3IuVHlwZVRva2VuQW5ub3RhdG9yLnByb3RvdHlwZS5yZXN1bWUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViSW5zcGVjdG9yLlR5cGVUb2tlbkFubm90YXRvci5wcm90b3R5cGUucmVm
cmVzaCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJJbnNwZWN0b3IuVHlwZVRva2VuQW5ub3RhdG9y
LnByb3RvdHlwZS5yZXNldCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJJbnNwZWN0b3IuVHlwZVRv
a2VuQW5ub3RhdG9yLnByb3RvdHlwZS5faW5zZXJ0QW5ub3RhdGlvbnMuKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5UeXBlVG9rZW5Bbm5vdGF0b3IucHJvdG90eXBlLl9jbGVhclRp
bWVvdXRJZk5lZWRlZCk6IERlbGV0ZWQuCisgICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmh0
bWw6CisgICAgICAgICogVXNlckludGVyZmFjZS9WaWV3cy9Tb3VyY2VDb2RlVGV4dEVkaXRvci5q
czoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvcik6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLnNob3duKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUuaGlkZGVu
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUu
Y2FuU2hvd1R5cGVBbm5vdGF0aW9ucyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29k
ZVRleHRFZGl0b3IucHJvdG90eXBlLmNvbnRlbnREaWRDaGFuZ2UpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS50b2dnbGVUeXBlQW5ub3RhdGlv
bnMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlw
ZS5wcmV0dHlQcmludCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0
b3IucHJvdG90eXBlLl9kZWJ1Z2dlckRpZFBhdXNlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5T
b3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUuX2RlYnVnZ2VyRGlkUmVzdW1lKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUuX3VwZGF0ZVRv
a2VuVHJhY2tpbmdDb250cm9sbGVyU3RhdGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJj
ZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS5fZ2V0QXNzb2NpYXRlZFNjcmlwdCk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLl9tYWtlVHlwZVRv
a2VuQW5ub3RhdG9yKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRv
ci5wcm90b3R5cGUuX21ha2VUeXBlVG9rZW5TY3JvbGxFdmVudEhhbmRsZXIuc2Nyb2xsSGFuZGxl
cik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBl
Ll9tYWtlVHlwZVRva2VuU2Nyb2xsRXZlbnRIYW5kbGVyKToKKwogMjAxNS0wMS0wMSAgRGFyaW4g
QWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgV2Ugb2Z0ZW4gbWlzc3BlbGwgaWRl
bnRpZmllciBhcyAiaWRlbnRpZmVyIgpJbmRleDogU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvTWFpbi5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL01haW4uaHRtbAkocmV2aXNpb24gMTc4MDE3KQorKysgU291cmNlL1dlYklu
c3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTWFpbi5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC00NTks
OSArNDU5LDExIEBACiAgICAgPHNjcmlwdCBzcmM9IlZpZXdzL1R5cGVQcm9wZXJ0aWVzU2VjdGlv
bi5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IlZpZXdzL1R5cGVUb2tlblZpZXcuanMi
Pjwvc2NyaXB0PgogCisgICAgPHNjcmlwdCBzcmM9IkNvbnRyb2xsZXJzL0Fubm90YXRvci5qcyI+
PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IkNvbnRyb2xsZXJzL0NvZGVNaXJyb3JFZGl0aW5n
Q29udHJvbGxlci5qcyI+PC9zY3JpcHQ+CiAKICAgICA8c2NyaXB0IHNyYz0iQ29udHJvbGxlcnMv
QW5hbHl6ZXJNYW5hZ2VyLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iQ29udHJvbGxl
cnMvQW5ub3RhdG9yTWFuYWdlci5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IkNvbnRy
b2xsZXJzL0FwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0
IHNyYz0iQ29udHJvbGxlcnMvQnJhbmNoTWFuYWdlci5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlw
dCBzcmM9IkNvbnRyb2xsZXJzL0NTU1N0eWxlTWFuYWdlci5qcyI+PC9zY3JpcHQ+CkluZGV4OiBT
b3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9Bbm5vdGF0b3Iu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29u
dHJvbGxlcnMvQW5ub3RhdG9yLmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvQW5ub3RhdG9yLmpzCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTEyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBTYWFtIEJhcmF0aSA8
c2FhbWJhcmF0aTFAZ21haWwuY29tPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitXZWJJbnNwZWN0b3IuQW5ub3RhdG9y
ID0gZnVuY3Rpb24oc291cmNlQ29kZVRleHRFZGl0b3IpCit7CisgICAgV2ViSW5zcGVjdG9yLk9i
amVjdC5jYWxsKHRoaXMpOworCisgICAgY29uc29sZS5hc3NlcnQoc291cmNlQ29kZVRleHRFZGl0
b3IgaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IsIHNvdXJjZUNv
ZGVUZXh0RWRpdG9yKTsKKworICAgIHRoaXMuX3NvdXJjZUNvZGVUZXh0RWRpdG9yID0gc291cmNl
Q29kZVRleHRFZGl0b3I7CisgICAgdGhpcy5fdGltZW91dElkZW50aWZpZXIgPSBudWxsOworICAg
IHRoaXMuX2lzQWN0aXZlID0gZmFsc2U7Cit9OworCitXZWJJbnNwZWN0b3IuQW5ub3RhdG9yLnBy
b3RvdHlwZSA9IHsKKyAgICBjb25zdHJ1Y3RvcjogV2ViSW5zcGVjdG9yLkFubm90YXRvciwKKyAg
ICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5PYmplY3QucHJvdG90eXBlLAorCisgICAgLy8gUHVi
bGljCisKKyAgICBnZXQgc291cmNlQ29kZVRleHRFZGl0b3IoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHRoaXMuX3NvdXJjZUNvZGVUZXh0RWRpdG9yOworICAgIH0sCisKKyAgICBnZXQgaXNBY3Rp
dmUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2lzQWN0aXZlOworICAgIH0sCisKKyAg
ICBwYXVzZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy5fY2xlYXJUaW1lb3V0SWZO
ZWVkZWQoKTsKKyAgICAgICAgdGhpcy5faXNBY3RpdmUgPSBmYWxzZTsKKyAgICB9LAorCisgICAg
cmVzdW1lOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB0aGlzLl9jbGVhclRpbWVvdXRJZk5l
ZWRlZCgpOworICAgICAgICB0aGlzLl9pc0FjdGl2ZSA9IHRydWU7CisgICAgICAgIHRoaXMuaW5z
ZXJ0QW5ub3RhdGlvbnMoKTsKKyAgICB9LAorCisgICAgcmVmcmVzaDogZnVuY3Rpb24oKQorICAg
IHsKKyAgICAgICAgY29uc29sZS5hc3NlcnQodGhpcy5faXNBY3RpdmUpOworICAgICAgICBpZiAo
IXRoaXMuX2lzQWN0aXZlKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHRoaXMuX2Ns
ZWFyVGltZW91dElmTmVlZGVkKCk7CisgICAgICAgIHRoaXMuaW5zZXJ0QW5ub3RhdGlvbnMoKTsK
KyAgICB9LAorCisgICAgcmVzZXQ6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMuX2Ns
ZWFyVGltZW91dElmTmVlZGVkKCk7CisgICAgICAgIHRoaXMuX2lzQWN0aXZlID0gdHJ1ZTsKKyAg
ICAgICAgdGhpcy5jbGVhckFubm90YXRpb25zKCk7CisgICAgICAgIHRoaXMuaW5zZXJ0QW5ub3Rh
dGlvbnMoKTsKKyAgICB9LAorCisgICAgY2xlYXI6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAg
IHRoaXMucGF1c2UoKTsKKyAgICAgICAgdGhpcy5jbGVhckFubm90YXRpb25zKCk7CisgICAgfSwK
KworICAgIC8vIFByb3RlY3RlZAorCisgICAgaW5zZXJ0QW5ub3RhdGlvbnM6IGZ1bmN0aW9uKCkK
KyAgICB7CisgICAgICAgIC8vIEltcGxlbWVudGVkIGJ5IHN1YmNsYXNzZXMuCisgICAgfSwKKwor
ICAgIGNsZWFyQW5ub3RhdGlvbnM6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIC8vIEltcGxl
bWVudGVkIGJ5IHN1YmNsYXNzZXMuCisgICAgfSwKKworICAgIC8vIFByaXZhdGUKKworICAgIF9j
bGVhclRpbWVvdXRJZk5lZWRlZDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMu
X3RpbWVvdXRJZGVudGlmaWVyKSB7CisgICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fdGlt
ZW91dElkZW50aWZpZXIpOworICAgICAgICAgICAgdGhpcy5fdGltZW91dElkZW50aWZpZXIgPSBu
dWxsOworICAgICAgICB9CisgICAgfQorfTsKSW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0Fubm90YXRvck1hbmFnZXIuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvQW5ub3Rh
dG9yTWFuYWdlci5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2Vy
SW50ZXJmYWNlL0NvbnRyb2xsZXJzL0Fubm90YXRvck1hbmFnZXIuanMJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw5NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgU2FhbSBCYXJhdGkgPHNh
YW1iYXJhdGkxQGdtYWlsLmNvbT4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworV2ViSW5zcGVjdG9yLkFubm90YXRvck1h
bmFnZXIgPSBmdW5jdGlvbigpCit7CisgICAgV2ViSW5zcGVjdG9yLk9iamVjdC5jYWxsKHRoaXMp
OworCisgICAgdGhpcy5fYW5ub3RhdG9ycyA9IG5ldyBNYXA7Cit9OworCitXZWJJbnNwZWN0b3Iu
QW5ub3RhdG9yTWFuYWdlci5wcm90b3R5cGUgPSB7CisgICAgY29uc3RydWN0b3I6IFdlYkluc3Bl
Y3Rvci5Bbm5vdGF0b3JNYW5hZ2VyLAorICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLk9iamVj
dC5wcm90b3R5cGUsCisKKyAgICAvLyBQdWJsaWMKKworICAgIGFkZEFubm90YXRvcjogZnVuY3Rp
b24oa2V5LCBhbm5vdGF0b3IpCisgICAgeworICAgICAgICBjb25zb2xlLmFzc2VydChhbm5vdGF0
b3IgaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuQW5ub3RhdG9yKTsKKyAgICAgICAgdGhpcy5fYW5u
b3RhdG9ycy5zZXQoa2V5LCBhbm5vdGF0b3IpOworICAgIH0sCisKKyAgICBnZXRBbm5vdGF0b3I6
IGZ1bmN0aW9uKGtleSkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9hbm5vdGF0b3JzLmdl
dChrZXkpIHx8IG51bGw7CisgICAgfSwKKworICAgIGlzQW5ub3RhdG9yQWN0aXZlOiBmdW5jdGlv
bihrZXkpCisgICAgeworICAgICAgICB2YXIgYW5ub3RhdG9yID0gdGhpcy5nZXRBbm5vdGF0b3Io
a2V5KTsKKyAgICAgICAgaWYgKCFhbm5vdGF0b3IpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIHJldHVybiBhbm5vdGF0b3IuaXNBY3RpdmU7CisgICAgfSwKKworICAgIHBhdXNl
QWxsOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBmb3IgKHZhciBhbm5vdGF0b3Igb2YgdGhp
cy5fYW5ub3RhdG9ycy52YWx1ZXMoKSkKKyAgICAgICAgICAgIGFubm90YXRvci5wYXVzZSgpOwor
ICAgIH0sCisKKyAgICByZXN1bWVBbGw6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGZvciAo
dmFyIGFubm90YXRvciBvZiB0aGlzLl9hbm5vdGF0b3JzLnZhbHVlcygpKQorICAgICAgICAgICAg
YW5ub3RhdG9yLnJlc3VtZSgpOworICAgIH0sCisKKyAgICByZWZyZXNoQWxsSWZBY3RpdmU6IGZ1
bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGZvciAodmFyIGFubm90YXRvciBvZiB0aGlzLl9hbm5v
dGF0b3JzLnZhbHVlcygpKSB7CisgICAgICAgICAgICBpZiAoYW5ub3RhdG9yLmlzQWN0aXZlKQor
ICAgICAgICAgICAgICAgIGFubm90YXRvci5yZWZyZXNoKCk7CisgICAgICAgIH0KKyAgICB9LAor
CisgICAgcmVzZXRBbGxJZkFjdGl2ZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgZm9yICh2
YXIgYW5ub3RhdG9yIG9mIHRoaXMuX2Fubm90YXRvcnMudmFsdWVzKCkpIHsKKyAgICAgICAgICAg
IGlmIChhbm5vdGF0b3IuaXNBY3RpdmUpCisgICAgICAgICAgICAgICAgYW5ub3RhdG9yLnJlc2V0
KCk7CisgICAgICAgIH0KKyAgICB9LAorCisgICAgY2xlYXJBbGw6IGZ1bmN0aW9uKCkKKyAgICB7
CisgICAgICAgIGZvciAodmFyIGFubm90YXRvciBvZiB0aGlzLl9hbm5vdGF0b3JzLnZhbHVlcygp
KQorICAgICAgICAgICAgYW5ub3RhdG9yLmNsZWFyKCk7CisgICAgfSwKKworICAgIHJlbW92ZUFs
bEFubm90YXRvcnM6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMuX2Fubm90YXRvcnMu
Y2xlYXIoKTsKKyAgICB9Cit9OwpJbmRleDogU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvQ29udHJvbGxlcnMvVHlwZVRva2VuQW5ub3RhdG9yLmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL1R5cGVUb2tlbkFu
bm90YXRvci5qcwkocmV2aXNpb24gMTc4MDE3KQorKysgU291cmNlL1dlYkluc3BlY3RvclVJL1Vz
ZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvVHlwZVRva2VuQW5ub3RhdG9yLmpzCSh3b3JraW5nIGNv
cHkpCkBAIC0yNSw2NiArMjUsMTkgQEAKIAogV2ViSW5zcGVjdG9yLlR5cGVUb2tlbkFubm90YXRv
ciA9IGZ1bmN0aW9uKHNvdXJjZUNvZGVUZXh0RWRpdG9yLCBzY3JpcHQpCiB7Ci0gICAgV2ViSW5z
cGVjdG9yLk9iamVjdC5jYWxsKHRoaXMpOwotCi0gICAgY29uc29sZS5hc3NlcnQoc291cmNlQ29k
ZVRleHRFZGl0b3IgJiYgc291cmNlQ29kZVRleHRFZGl0b3IgaW5zdGFuY2VvZiBXZWJJbnNwZWN0
b3IuU291cmNlQ29kZVRleHRFZGl0b3IsIHNvdXJjZUNvZGVUZXh0RWRpdG9yKTsKLSAgICBjb25z
b2xlLmFzc2VydChzY3JpcHQsIHNjcmlwdCk7CisgICAgV2ViSW5zcGVjdG9yLkFubm90YXRvci5j
YWxsKHRoaXMsIHNvdXJjZUNvZGVUZXh0RWRpdG9yKTsKIAogICAgIHRoaXMuX3NjcmlwdCA9IHNj
cmlwdDsKLSAgICB0aGlzLl9zb3VyY2VDb2RlVGV4dEVkaXRvciA9IHNvdXJjZUNvZGVUZXh0RWRp
dG9yOwogICAgIHRoaXMuX3R5cGVUb2tlbk5vZGVzID0gW107CiAgICAgdGhpcy5fdHlwZVRva2Vu
Qm9va21hcmtzID0gW107Ci0gICAgdGhpcy5fdGltZW91dElkZW50aWZpZXIgPSBudWxsOwotICAg
IHRoaXMuX2lzQWN0aXZlID0gZmFsc2U7CiB9OwogCiBXZWJJbnNwZWN0b3IuVHlwZVRva2VuQW5u
b3RhdG9yLnByb3RvdHlwZSA9IHsKICAgICBjb25zdHJ1Y3RvcjogV2ViSW5zcGVjdG9yLlR5cGVU
b2tlbkFubm90YXRvciwKLSAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5PYmplY3QucHJvdG90
eXBlLAorICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLkFubm90YXRvci5wcm90b3R5cGUsCiAK
ICAgICAvLyBQdWJsaWMKIAotICAgIGdldCBpc0FjdGl2ZSgpCi0gICAgewotICAgICAgICByZXR1
cm4gdGhpcy5faXNBY3RpdmU7Ci0gICAgfSwKLQotICAgIGdldCBzb3VyY2VDb2RlVGV4dEVkaXRv
cigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fc291cmNlQ29kZVRleHRFZGl0b3I7Ci0g
ICAgfSwKLQotICAgIHBhdXNlOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLl9jbGVh
clRpbWVvdXRJZk5lZWRlZCgpOwotICAgICAgICB0aGlzLl9pc0FjdGl2ZSA9IGZhbHNlOwotICAg
IH0sCi0KLSAgICByZXN1bWU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2NsZWFy
VGltZW91dElmTmVlZGVkKCk7Ci0gICAgICAgIHRoaXMuX2lzQWN0aXZlID0gdHJ1ZTsKLSAgICAg
ICAgdGhpcy5faW5zZXJ0QW5ub3RhdGlvbnMoKTsKLSAgICB9LAotCi0gICAgcmVmcmVzaDogZnVu
Y3Rpb24oKQotICAgIHsKLSAgICAgICAgY29uc29sZS5hc3NlcnQodGhpcy5faXNBY3RpdmUpOwot
ICAgICAgICBpZiAoIXRoaXMuX2lzQWN0aXZlKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAg
ICAgIHRoaXMuX2NsZWFyVGltZW91dElmTmVlZGVkKCk7Ci0gICAgICAgIHRoaXMuX2luc2VydEFu
bm90YXRpb25zKCk7Ci0gICAgfSwKLQotICAgIHJlc2V0OiBmdW5jdGlvbigpCi0gICAgewotICAg
ICAgICB0aGlzLl9jbGVhclRpbWVvdXRJZk5lZWRlZCgpOwotICAgICAgICB0aGlzLl9pc0FjdGl2
ZSA9IHRydWU7Ci0gICAgICAgIHRoaXMuX2NsZWFyVHlwZVRva2VucygpOwotICAgICAgICB0aGlz
Ll9pbnNlcnRBbm5vdGF0aW9ucygpOwotICAgIH0sCi0KICAgICB0b2dnbGVUeXBlQW5ub3RhdGlv
bnM6IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgICAgIGlmICh0aGlzLl9pc0FjdGl2ZSkgewpAQCAt
OTgsOSArNTEsOSBAQCBXZWJJbnNwZWN0b3IuVHlwZVRva2VuQW5ub3RhdG9yLnByb3RvdHlwCiAg
ICAgICAgIHJldHVybiB0aGlzLl9pc0FjdGl2ZTsKICAgICB9LAogCi0gICAgLy8gUHJpdmF0ZQor
ICAgIC8vIFByb3RlY3RlZAogCi0gICAgX2luc2VydEFubm90YXRpb25zOiBmdW5jdGlvbigpCisg
ICAgaW5zZXJ0QW5ub3RhdGlvbnM6IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgICAgIGlmICghdGhp
cy5faXNBY3RpdmUpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0xMTEsNyArNjQsNyBAQCBXZWJJ
bnNwZWN0b3IuVHlwZVRva2VuQW5ub3RhdG9yLnByb3RvdHlwCiAgICAgICAgICAgICB0aGlzLl9z
Y3JpcHQucmVxdWVzdFNjcmlwdFN5bnRheFRyZWUoZnVuY3Rpb24oc3ludGF4VHJlZSkgewogICAg
ICAgICAgICAgICAgIC8vIEFmdGVyIHJlcXVlc3RpbmcgdGhlIHRyZWUsIHdlIHN0aWxsIG1pZ2h0
IGdldCBhIG51bGwgdHJlZSBmcm9tIGEgcGFyc2UgZXJyb3IuCiAgICAgICAgICAgICAgICAgaWYg
KHN5bnRheFRyZWUpCi0gICAgICAgICAgICAgICAgICAgIHRoaXMuX2luc2VydEFubm90YXRpb25z
KCk7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5zZXJ0QW5ub3RhdGlvbnMoKTsKICAgICAg
ICAgICAgIH0uYmluZCh0aGlzKSk7CiAKICAgICAgICAgICAgIHJldHVybjsKQEAgLTEyMCw3ICs3
Myw3IEBAIFdlYkluc3BlY3Rvci5UeXBlVG9rZW5Bbm5vdGF0b3IucHJvdG90eXAKICAgICAgICAg
aWYgKCFzY3JpcHRTeW50YXhUcmVlLnBhcnNlZFN1Y2Nlc3NmdWxseSkKICAgICAgICAgICAgIHJl
dHVybjsKIAotICAgICAgICB2YXIge3N0YXJ0T2Zmc2V0LCBlbmRPZmZzZXR9ID0gdGhpcy5fc291
cmNlQ29kZVRleHRFZGl0b3IudmlzaWJsZVJhbmdlT2Zmc2V0cygpOworICAgICAgICB2YXIge3N0
YXJ0T2Zmc2V0LCBlbmRPZmZzZXR9ID0gdGhpcy5zb3VyY2VDb2RlVGV4dEVkaXRvci52aXNpYmxl
UmFuZ2VPZmZzZXRzKCk7CiAKICAgICAgICAgdmFyIHN0YXJ0VGltZSA9IERhdGUubm93KCk7CiAg
ICAgICAgIHZhciBhbGxOb2Rlc0luUmFuZ2UgPSBzY3JpcHRTeW50YXhUcmVlLmZpbHRlckJ5UmFu
Z2Uoc3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7CkBAIC0xMzcsMTEgKzkwLDE4IEBAIFdlYkluc3Bl
Y3Rvci5UeXBlVG9rZW5Bbm5vdGF0b3IucHJvdG90eXAKIAogICAgICAgICAgICAgdGhpcy5fdGlt
ZW91dElkZW50aWZpZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uIHRpbWVvdXRVcGRhdGUoKSB7CiAg
ICAgICAgICAgICAgICAgdGhpcy5fdGltZW91dElkZW50aWZpZXIgPSBudWxsOwotICAgICAgICAg
ICAgICAgIHRoaXMuX2luc2VydEFubm90YXRpb25zKCk7CisgICAgICAgICAgICAgICAgdGhpcy5p
bnNlcnRBbm5vdGF0aW9ucygpOwogICAgICAgICAgICAgfS5iaW5kKHRoaXMpLCB0aW1lb3V0VGlt
ZSk7CiAgICAgICAgIH0uYmluZCh0aGlzKSk7CiAgICAgfSwKIAorICAgIGNsZWFyQW5ub3RhdGlv
bnM6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMuX2NsZWFyVHlwZVRva2VucygpOwor
ICAgIH0sCisKKyAgICAvLyBQcml2YXRlCisKICAgICBfaW5zZXJ0VHlwZVRva2Vuc0ZvckVhY2hO
b2RlOiBmdW5jdGlvbihub2RlKQogICAgIHsKICAgICAgICAgdmFyIHNjcmlwdFN5bnRheFRyZWUg
PSB0aGlzLl9zY3JpcHQuX3NjcmlwdFN5bnRheFRyZWU7CkBAIC0xNzUsMTUgKzEzNSwxNSBAQCBX
ZWJJbnNwZWN0b3IuVHlwZVRva2VuQW5ub3RhdG9yLnByb3RvdHlwCiAKICAgICBfaW5zZXJ0VG9r
ZW46IGZ1bmN0aW9uKG9yaWdpbmFsT2Zmc2V0LCBub2RlLCBzaG91bGRUcmFuc2xhdGVPZmZzZXRU
b0FmdGVyUGFyYW1ldGVyTGlzdCwgdHlwZVRva2VuVGl0bGVUeXBlLCBmdW5jdGlvbk9yVmFyaWFi
bGVOYW1lKQogICAgIHsKLSAgICAgICAgdmFyIHRva2VuUG9zaXRpb24gPSB0aGlzLl9zb3VyY2VD
b2RlVGV4dEVkaXRvci5vcmlnaW5hbE9mZnNldFRvQ3VycmVudFBvc2l0aW9uKG9yaWdpbmFsT2Zm
c2V0KTsKLSAgICAgICAgdmFyIGN1cnJlbnRPZmZzZXQgPSB0aGlzLl9zb3VyY2VDb2RlVGV4dEVk
aXRvci5jdXJyZW50UG9zaXRpb25Ub0N1cnJlbnRPZmZzZXQodG9rZW5Qb3NpdGlvbik7Ci0gICAg
ICAgIHZhciBzb3VyY2VTdHJpbmcgPSB0aGlzLl9zb3VyY2VDb2RlVGV4dEVkaXRvci5zdHJpbmc7
CisgICAgICAgIHZhciB0b2tlblBvc2l0aW9uID0gdGhpcy5zb3VyY2VDb2RlVGV4dEVkaXRvci5v
cmlnaW5hbE9mZnNldFRvQ3VycmVudFBvc2l0aW9uKG9yaWdpbmFsT2Zmc2V0KTsKKyAgICAgICAg
dmFyIGN1cnJlbnRPZmZzZXQgPSB0aGlzLnNvdXJjZUNvZGVUZXh0RWRpdG9yLmN1cnJlbnRQb3Np
dGlvblRvQ3VycmVudE9mZnNldCh0b2tlblBvc2l0aW9uKTsKKyAgICAgICAgdmFyIHNvdXJjZVN0
cmluZyA9IHRoaXMuc291cmNlQ29kZVRleHRFZGl0b3Iuc3RyaW5nOwogCiAgICAgICAgIGlmIChz
aG91bGRUcmFuc2xhdGVPZmZzZXRUb0FmdGVyUGFyYW1ldGVyTGlzdCkgewogICAgICAgICAgICAg
Ly8gVHJhbnNsYXRlIHRoZSBwb3NpdGlvbiB0byB0aGUgY2xvc2luZyBwYXJlbnRoZXNpcyBvZiB0
aGUgZnVuY3Rpb24gYXJndW1lbnRzOgogICAgICAgICAgICAgLy8gdHJhbnNsYXRlIGZyb206IFt0
eXBlLXRva2VuXSBmdW5jdGlvbiBmb28oKSB7fSA9PiB0bzogZnVuY3Rpb24gZm9vKCkgW3R5cGUt
dG9rZW5dIHt9CiAgICAgICAgICAgICBjdXJyZW50T2Zmc2V0ID0gdGhpcy5fdHJhbnNsYXRlVG9P
ZmZzZXRBZnRlckZ1bmN0aW9uUGFyYW1ldGVyTGlzdChub2RlLCBjdXJyZW50T2Zmc2V0LCBzb3Vy
Y2VTdHJpbmcpOwotICAgICAgICAgICAgdG9rZW5Qb3NpdGlvbiA9IHRoaXMuX3NvdXJjZUNvZGVU
ZXh0RWRpdG9yLmN1cnJlbnRPZmZzZXRUb0N1cnJlbnRQb3NpdGlvbihjdXJyZW50T2Zmc2V0KTsK
KyAgICAgICAgICAgIHRva2VuUG9zaXRpb24gPSB0aGlzLnNvdXJjZUNvZGVUZXh0RWRpdG9yLmN1
cnJlbnRPZmZzZXRUb0N1cnJlbnRQb3NpdGlvbihjdXJyZW50T2Zmc2V0KTsKICAgICAgICAgfQog
CiAgICAgICAgIC8vIE5vdGU6IGJvb2ttYXJrcyByZW5kZXIgdG8gdGhlIGxlZnQgb2YgdGhlIGNo
YXJhY3RlciB0aGV5J3JlIGJlaW5nIGRpc3BsYXllZCBuZXh0IHRvLgpAQCAtMTkyLDcgKzE1Miw3
IEBAIFdlYkluc3BlY3Rvci5UeXBlVG9rZW5Bbm5vdGF0b3IucHJvdG90eXAKICAgICAgICAgdmFy
IHNob3VsZEhhdmVMZWZ0TWFyZ2luID0gY3VycmVudE9mZnNldCAhPT0gMCAmJiAhaXNTcGFjZVJl
Z2V4cC50ZXN0KHNvdXJjZVN0cmluZ1tjdXJyZW50T2Zmc2V0IC0gMV0pOwogICAgICAgICB2YXIg
c2hvdWxkSGF2ZVJpZ2h0TWFyZ2luID0gIWlzU3BhY2VSZWdleHAudGVzdChzb3VyY2VTdHJpbmdb
Y3VycmVudE9mZnNldF0pOwogICAgICAgICB2YXIgdHlwZVRva2VuID0gbmV3IFdlYkluc3BlY3Rv
ci5UeXBlVG9rZW5WaWV3KHRoaXMsIHNob3VsZEhhdmVSaWdodE1hcmdpbiwgc2hvdWxkSGF2ZUxl
ZnRNYXJnaW4sIHR5cGVUb2tlblRpdGxlVHlwZSwgZnVuY3Rpb25PclZhcmlhYmxlTmFtZSk7Ci0g
ICAgICAgIHZhciBib29rbWFyayA9IHRoaXMuX3NvdXJjZUNvZGVUZXh0RWRpdG9yLnNldElubGlu
ZVdpZGdldCh0b2tlblBvc2l0aW9uLCB0eXBlVG9rZW4uZWxlbWVudCk7CisgICAgICAgIHZhciBi
b29rbWFyayA9IHRoaXMuc291cmNlQ29kZVRleHRFZGl0b3Iuc2V0SW5saW5lV2lkZ2V0KHRva2Vu
UG9zaXRpb24sIHR5cGVUb2tlbi5lbGVtZW50KTsKICAgICAgICAgbm9kZS5hdHRhY2htZW50cy5f
X3R5cGVUb2tlbiA9IHR5cGVUb2tlbjsKICAgICAgICAgdGhpcy5fdHlwZVRva2VuTm9kZXMucHVz
aChub2RlKTsKICAgICAgICAgdGhpcy5fdHlwZVRva2VuQm9va21hcmtzLnB1c2goYm9va21hcmsp
OwpAQCAtMjcxLDEzICsyMzEsNSBAQCBXZWJJbnNwZWN0b3IuVHlwZVRva2VuQW5ub3RhdG9yLnBy
b3RvdHlwCiAKICAgICAgICAgdGhpcy5fdHlwZVRva2VuTm9kZXMgPSBbXTsKICAgICAgICAgdGhp
cy5fdHlwZVRva2VuQm9va21hcmtzID0gW107Ci0gICAgfSwKLQotICAgIF9jbGVhclRpbWVvdXRJ
Zk5lZWRlZDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX3RpbWVvdXRJZGVu
dGlmaWVyKSB7Ci0gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZW91dElkZW50aWZp
ZXIpOwotICAgICAgICAgICAgdGhpcy5fdGltZW91dElkZW50aWZpZXIgPSBudWxsOwotICAgICAg
ICB9CiAgICAgfQogfTsKSW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNl
L1ZpZXdzL1NvdXJjZUNvZGVUZXh0RWRpdG9yLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1NvdXJjZUNvZGVUZXh0RWRpdG9yLmpzCShy
ZXZpc2lvbiAxNzgwMTcpCisrKyBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9W
aWV3cy9Tb3VyY2VDb2RlVGV4dEVkaXRvci5qcwkod29ya2luZyBjb3B5KQpAQCAtMzYsOCArMzYs
OCBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IgPSBmdW5jCiAKICAgICBXZWJJ
bnNwZWN0b3IuVGV4dEVkaXRvci5jYWxsKHRoaXMsIG51bGwsIG51bGwsIHRoaXMpOwogCi0gICAg
dGhpcy5fdHlwZVRva2VuQW5ub3RhdG9yID0gbnVsbDsKICAgICB0aGlzLl90eXBlVG9rZW5TY3Jv
bGxIYW5kbGVyID0gbnVsbDsKKyAgICB0aGlzLl9hbm5vdGF0b3JNYW5hZ2VyID0gbmV3IFdlYklu
c3BlY3Rvci5Bbm5vdGF0b3JNYW5hZ2VyOwogCiAgICAgLy8gRklYTUU6IEN1cnJlbnRseSB0aGlz
IGp1c3QganVtcHMgYmV0d2VlbiByZXNvdXJjZXMgYW5kIHJlbGF0ZWQgc291cmNlIG1hcCByZXNv
dXJjZXMuIEl0IGRvZXNuJ3QgImp1bXAgdG8gc3ltYm9sIiB5ZXQuCiAgICAgdGhpcy5fdXBkYXRl
VG9rZW5UcmFja2luZ0NvbnRyb2xsZXJTdGF0ZSgpOwpAQCAtOTAsNiArOTAsOCBAQCBXZWJJbnNw
ZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IuRHVyYXRpCiAKIFdlYkluc3BlY3Rvci5Tb3VyY2VD
b2RlVGV4dEVkaXRvci5BdXRvRm9ybWF0TWluaW11bUxpbmVMZW5ndGggPSA1MDA7CiAKK1dlYklu
c3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5UeXBlVG9rZW5Bbm5vdGF0b3JLZXkgPSAiVHlw
ZVRva2VuQW5ub3RhdG9yS2V5IjsKKwogV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9y
LkV2ZW50ID0gewogICAgIENvbnRlbnRXaWxsUG9wdWxhdGU6ICJzb3VyY2UtY29kZS10ZXh0LWVk
aXRvci1jb250ZW50LXdpbGwtcG9wdWxhdGUiLAogICAgIENvbnRlbnREaWRQb3B1bGF0ZTogInNv
dXJjZS1jb2RlLXRleHQtZWRpdG9yLWNvbnRlbnQtZGlkLXBvcHVsYXRlIgpAQCAtMTA5LDggKzEx
MSw3IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3QKICAgICB7CiAg
ICAgICAgIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5zaG93bi5jYWxsKHRoaXMp
OwogCi0gICAgICAgIGlmICh0aGlzLl90eXBlVG9rZW5Bbm5vdGF0b3IpCi0gICAgICAgICAgICB0
aGlzLl90eXBlVG9rZW5Bbm5vdGF0b3IucmVzdW1lKCk7CisgICAgICAgIHRoaXMuX2Fubm90YXRv
ck1hbmFnZXIucmVzdW1lQWxsKCk7CiAgICAgfSwKIAogICAgIGhpZGRlbjogZnVuY3Rpb24oKQpA
QCAtMTIzLDggKzEyNCw3IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90
b3QKICAgICAgICAgCiAgICAgICAgIHRoaXMuX2Rpc21pc3NFZGl0aW5nQ29udHJvbGxlcih0cnVl
KTsKIAotICAgICAgICBpZiAodGhpcy5fdHlwZVRva2VuQW5ub3RhdG9yKQotICAgICAgICAgICAg
dGhpcy5fdHlwZVRva2VuQW5ub3RhdG9yLnBhdXNlKCk7CisgICAgICAgIHRoaXMuX2Fubm90YXRv
ck1hbmFnZXIucGF1c2VBbGwoKTsKICAgICB9LAogCiAgICAgY2xvc2U6IGZ1bmN0aW9uKCkKQEAg
LTE2Niw3ICsxNjYsNyBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90
CiAKICAgICBjYW5TaG93VHlwZUFubm90YXRpb25zOiBmdW5jdGlvbigpCiAgICAgewotICAgICAg
ICByZXR1cm4gISF0aGlzLl90eXBlVG9rZW5Bbm5vdGF0b3I7CisgICAgICAgIHJldHVybiAhIXRo
aXMuX2Fubm90YXRvck1hbmFnZXIuZ2V0QW5ub3RhdG9yKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2Rl
VGV4dEVkaXRvci5UeXBlVG9rZW5Bbm5vdGF0b3JLZXkpOwogICAgIH0sCiAKICAgICBjdXN0b21Q
ZXJmb3JtU2VhcmNoOiBmdW5jdGlvbihxdWVyeSkKQEAgLTI1NSwxNCArMjU1LDIwIEBAIFdlYklu
c3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3QKIAogICAgICAgICBmb3IgKHZhciBy
YW5nZSBvZiBuZXdSYW5nZXMpCiAgICAgICAgICAgICB0aGlzLl91cGRhdGVFZGl0YWJsZU1hcmtl
cnMocmFuZ2UpOworCisgICAgICAgIHRoaXMuX2Fubm90YXRvck1hbmFnZXIuY2xlYXJBbGwoKTsK
KyAgICAgICAgdGhpcy5fYW5ub3RhdG9yTWFuYWdlci5yZW1vdmVBbGxBbm5vdGF0b3JzKCk7Cisg
ICAgICAgIGlmICh0aGlzLl90eXBlVG9rZW5TY3JvbGxIYW5kbGVyKQorICAgICAgICAgICAgdGhp
cy5fZGlzYWJsZVNjcm9sbEV2ZW50c0ZvclR5cGVUb2tlbkFubm90YXRvcigpOwogICAgIH0sCiAK
ICAgICB0b2dnbGVUeXBlQW5ub3RhdGlvbnM6IGZ1bmN0aW9uKCkKICAgICB7Ci0gICAgICAgIGlm
ICghdGhpcy5fdHlwZVRva2VuQW5ub3RhdG9yKQorICAgICAgICB2YXIgdHlwZVRva2VuQW5ub3Rh
dG9yID0gdGhpcy5fYW5ub3RhdG9yTWFuYWdlci5nZXRBbm5vdGF0b3IoV2ViSW5zcGVjdG9yLlNv
dXJjZUNvZGVUZXh0RWRpdG9yLlR5cGVUb2tlbkFubm90YXRvcktleSk7CisgICAgICAgIGlmICgh
dHlwZVRva2VuQW5ub3RhdG9yKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAg
IHZhciBpc0FjdGl2YXRlZCA9IHRoaXMuX3R5cGVUb2tlbkFubm90YXRvci50b2dnbGVUeXBlQW5u
b3RhdGlvbnMoKTsKKyAgICAgICAgdmFyIGlzQWN0aXZhdGVkID0gdHlwZVRva2VuQW5ub3RhdG9y
LnRvZ2dsZVR5cGVBbm5vdGF0aW9ucygpOwogICAgICAgICBpZiAoaXNBY3RpdmF0ZWQpIHsKICAg
ICAgICAgICAgIFJ1bnRpbWVBZ2VudC5lbmFibGVUeXBlUHJvZmlsZXIoKTsKICAgICAgICAgICAg
IHRoaXMuX2VuYWJsZVNjcm9sbEV2ZW50c0ZvclR5cGVUb2tlbkFubm90YXRvcigpOwpAQCAtMzAy
LDggKzMwOCw3IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3QKICAg
ICB7CiAgICAgICAgIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5wcmV0dHlQcmlu
dC5jYWxsKHRoaXMsIHByZXR0eSk7CiAKLSAgICAgICAgaWYgKHRoaXMuX3R5cGVUb2tlbkFubm90
YXRvciAmJiB0aGlzLl90eXBlVG9rZW5Bbm5vdGF0b3IuaXNBY3RpdmUpCi0gICAgICAgICAgICB0
aGlzLl90eXBlVG9rZW5Bbm5vdGF0b3IucmVzZXQoKTsKKyAgICAgICAgdGhpcy5fYW5ub3RhdG9y
TWFuYWdlci5yZXNldEFsbElmQWN0aXZlKCk7CiAgICAgfSwKIAogICAgIC8vIFByaXZhdGUKQEAg
LTEwNDcsMTYgKzEwNTIsMTQgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnBy
b3RvdAogICAgIF9kZWJ1Z2dlckRpZFBhdXNlOiBmdW5jdGlvbihldmVudCkKICAgICB7CiAgICAg
ICAgIHRoaXMuX3VwZGF0ZVRva2VuVHJhY2tpbmdDb250cm9sbGVyU3RhdGUoKTsKLSAgICAgICAg
aWYgKHRoaXMuX3R5cGVUb2tlbkFubm90YXRvciAmJiB0aGlzLl90eXBlVG9rZW5Bbm5vdGF0b3Iu
aXNBY3RpdmUpCi0gICAgICAgICAgICB0aGlzLl90eXBlVG9rZW5Bbm5vdGF0b3IucmVmcmVzaCgp
OworICAgICAgICB0aGlzLl9hbm5vdGF0b3JNYW5hZ2VyLnJlZnJlc2hBbGxJZkFjdGl2ZSgpOwog
ICAgIH0sCiAKICAgICBfZGVidWdnZXJEaWRSZXN1bWU6IGZ1bmN0aW9uKGV2ZW50KQogICAgIHsK
ICAgICAgICAgdGhpcy5fdXBkYXRlVG9rZW5UcmFja2luZ0NvbnRyb2xsZXJTdGF0ZSgpOwogICAg
ICAgICB0aGlzLl9kaXNtaXNzUG9wb3ZlcigpOwotICAgICAgICBpZiAodGhpcy5fdHlwZVRva2Vu
QW5ub3RhdG9yICYmIHRoaXMuX3R5cGVUb2tlbkFubm90YXRvci5pc0FjdGl2ZSkKLSAgICAgICAg
ICAgIHRoaXMuX3R5cGVUb2tlbkFubm90YXRvci5yZWZyZXNoKCk7CisgICAgICAgIHRoaXMuX2Fu
bm90YXRvck1hbmFnZXIucmVmcmVzaEFsbElmQWN0aXZlKCk7CiAgICAgfSwKIAogICAgIF9zb3Vy
Y2VDb2RlU291cmNlTWFwQWRkZWQ6IGZ1bmN0aW9uKGV2ZW50KQpAQCAtMTA3Miw3ICsxMDc1LDcg
QEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdAogICAgICAgICB2YXIg
bW9kZSA9IFdlYkluc3BlY3Rvci5Db2RlTWlycm9yVG9rZW5UcmFja2luZ0NvbnRyb2xsZXIuTW9k
ZS5Ob25lOwogICAgICAgICBpZiAoV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTWFuYWdlci5wYXVzZWQp
CiAgICAgICAgICAgICBtb2RlID0gV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JUb2tlblRyYWNraW5n
Q29udHJvbGxlci5Nb2RlLkphdmFTY3JpcHRFeHByZXNzaW9uOwotICAgICAgICBlbHNlIGlmICh0
aGlzLl90eXBlVG9rZW5Bbm5vdGF0b3IgJiYgdGhpcy5fdHlwZVRva2VuQW5ub3RhdG9yLmlzQWN0
aXZlKQorICAgICAgICBlbHNlIGlmICh0aGlzLl9hbm5vdGF0b3JNYW5hZ2VyLmlzQW5ub3RhdG9y
QWN0aXZlKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5UeXBlVG9rZW5Bbm5vdGF0
b3JLZXkpKQogICAgICAgICAgICAgbW9kZSA9IFdlYkluc3BlY3Rvci5Db2RlTWlycm9yVG9rZW5U
cmFja2luZ0NvbnRyb2xsZXIuTW9kZS5KYXZhU2NyaXB0VHlwZUluZm9ybWF0aW9uOwogICAgICAg
ICBlbHNlIGlmICh0aGlzLl9oYXNDb2xvck1hcmtlcnMoKSkKICAgICAgICAgICAgIG1vZGUgPSBX
ZWJJbnNwZWN0b3IuQ29kZU1pcnJvclRva2VuVHJhY2tpbmdDb250cm9sbGVyLk1vZGUuTWFya2Vk
VG9rZW5zOwpAQCAtMTUyNiwyNCArMTUyOSwzMSBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRl
eHRFZGl0b3IucHJvdG90CiAgICAgICAgIGRlbGV0ZSB0aGlzLl9lZGl0aW5nQ29udHJvbGxlcjsK
ICAgICB9LAogCi0gICAgX21ha2VUeXBlVG9rZW5Bbm5vdGF0b3I6IGZ1bmN0aW9uKCkKKyAgICBf
Z2V0QXNzb2NpYXRlZFNjcmlwdDogZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgaWYgKCFSdW50
aW1lQWdlbnQuZ2V0UnVudGltZVR5cGVzRm9yVmFyaWFibGVzQXRPZmZzZXRzKQotICAgICAgICAg
ICAgcmV0dXJuOwotCiAgICAgICAgIHZhciBzY3JpcHQgPSBudWxsOwogICAgICAgICAvLyBGSVhN
RTogVGhpcyBuZWVkcyB0byBtZSBtb2RpZmllZCB0byB3b3JrIHdpdGggSFRNTCBmaWxlcyB3aXRo
IGlubGluZSBzY3JpcHQgdGFncy4KICAgICAgICAgaWYgKHRoaXMuX3NvdXJjZUNvZGUgaW5zdGFu
Y2VvZiBXZWJJbnNwZWN0b3IuU2NyaXB0KQogICAgICAgICAgICAgc2NyaXB0ID0gdGhpcy5fc291
cmNlQ29kZTsKICAgICAgICAgZWxzZSBpZiAodGhpcy5fc291cmNlQ29kZSBpbnN0YW5jZW9mIFdl
Ykluc3BlY3Rvci5SZXNvdXJjZSAmJiB0aGlzLl9zb3VyY2VDb2RlLnR5cGUgPT09IFdlYkluc3Bl
Y3Rvci5SZXNvdXJjZS5UeXBlLlNjcmlwdCAmJiB0aGlzLl9zb3VyY2VDb2RlLnNjcmlwdHMubGVu
Z3RoKQogICAgICAgICAgICAgc2NyaXB0ID0gdGhpcy5fc291cmNlQ29kZS5zY3JpcHRzWzBdOwor
ICAgICAgICByZXR1cm4gc2NyaXB0OworICAgIH0sCiAKKyAgICBfbWFrZVR5cGVUb2tlbkFubm90
YXRvcjogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgaWYgKCFSdW50aW1lQWdlbnQuZ2V0UnVu
dGltZVR5cGVzRm9yVmFyaWFibGVzQXRPZmZzZXRzKQorICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgIHZhciBzY3JpcHQgPSB0aGlzLl9nZXRBc3NvY2lhdGVkU2NyaXB0KCk7CiAgICAgICAg
IGlmICghc2NyaXB0KQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIHRoaXMuX3R5cGVU
b2tlbkFubm90YXRvciA9IG5ldyBXZWJJbnNwZWN0b3IuVHlwZVRva2VuQW5ub3RhdG9yKHRoaXMs
IHNjcmlwdCk7CisgICAgICAgIHZhciB0eXBlVG9rZW5Bbm5vdGF0b3IgPSBuZXcgV2ViSW5zcGVj
dG9yLlR5cGVUb2tlbkFubm90YXRvcih0aGlzLCBzY3JpcHQpOworICAgICAgICB0aGlzLl9hbm5v
dGF0b3JNYW5hZ2VyLmFkZEFubm90YXRvcihXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0
b3IuVHlwZVRva2VuQW5ub3RhdG9yS2V5LCB0eXBlVG9rZW5Bbm5vdGF0b3IpOworCiAgICAgICAg
IGlmIChXZWJJbnNwZWN0b3Iuc2hvd0phdmFTY3JpcHRUeXBlSW5mb3JtYXRpb25TZXR0aW5nLnZh
bHVlKSB7Ci0gICAgICAgICAgICB0aGlzLl90eXBlVG9rZW5Bbm5vdGF0b3IucmVzZXQoKTsKKyAg
ICAgICAgICAgIHR5cGVUb2tlbkFubm90YXRvci5yZXNldCgpOwogICAgICAgICAgICAgdGhpcy5f
ZW5hYmxlU2Nyb2xsRXZlbnRzRm9yVHlwZVRva2VuQW5ub3RhdG9yKCk7CiAgICAgICAgIH0KICAg
ICB9LApAQCAtMTU2NSw4ICsxNTc1LDggQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRp
dG9yLnByb3RvdAogCiAgICAgX21ha2VUeXBlVG9rZW5TY3JvbGxFdmVudEhhbmRsZXI6IGZ1bmN0
aW9uKCkKICAgICB7Ci0gICAgICAgIHZhciB0eXBlVG9rZW5Bbm5vdGF0b3IgPSB0aGlzLl90eXBl
VG9rZW5Bbm5vdGF0b3I7CiAgICAgICAgIHZhciB0aW1lb3V0SWRlbnRpZmllciA9IG51bGw7Cisg
ICAgICAgIHZhciB0eXBlVG9rZW5Bbm5vdGF0b3IgPSB0aGlzLl9hbm5vdGF0b3JNYW5hZ2VyLmdl
dEFubm90YXRvcihXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IuVHlwZVRva2VuQW5u
b3RhdG9yS2V5KTsKICAgICAgICAgZnVuY3Rpb24gc2Nyb2xsSGFuZGxlcigpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIGlmICh0aW1lb3V0SWRlbnRpZmllcikKQEAgLTE1NzYsMTEgKzE1ODYsMTYg
QEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdAogCiAgICAgICAgICAg
ICB0aW1lb3V0SWRlbnRpZmllciA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgICAgICAg
ICAgICAgdGltZW91dElkZW50aWZpZXIgPSBudWxsOwotICAgICAgICAgICAgICAgIHR5cGVUb2tl
bkFubm90YXRvci5yZXN1bWUoKTsKLSAgICAgICAgICAgIH0sIFdlYkluc3BlY3Rvci5Tb3VyY2VD
b2RlVGV4dEVkaXRvci5EdXJhdGlvblRvVXBkYXRlVHlwZVRva2Vuc0FmdGVyU2Nyb2xsaW5nKTsK
KyAgICAgICAgICAgICAgICB2YXIgdHlwZVRva2VuQW5ub3RhdG9yID0gdGhpcy5fYW5ub3RhdG9y
TWFuYWdlci5nZXRBbm5vdGF0b3IoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLlR5
cGVUb2tlbkFubm90YXRvcktleSk7CisgICAgICAgICAgICAgICAgLy8gVGhlcmUgaXMgYSBzbWFs
bCBjaGFuY2UgdGhhdCB3ZSBkaXNhYmxlZCB0aGUgdHlwZSB0b2tlbiBhbm5vdGF0b3IgYW5kIHRo
ZSBzY3JvbGwgaGFuZGxlciAKKyAgICAgICAgICAgICAgICAvLyBkdXJpbmcgdGhlIER1cmF0aW9u
VG9VcGRhdGVUeXBlVG9rZW5zQWZ0ZXJTY3JvbGxpbmcgdGltZSBkZWxheSwgc28gd2UgbXVzdCBl
bnN1cmUgdGhhdCB0aGlzCisgICAgICAgICAgICAgICAgLy8gaXMgbm90IG51bGwuCisgICAgICAg
ICAgICAgICAgaWYgKHR5cGVUb2tlbkFubm90YXRvcikKKyAgICAgICAgICAgICAgICAgICAgdHlw
ZVRva2VuQW5ub3RhdG9yLnJlc3VtZSgpOworICAgICAgICAgICAgfS5iaW5kKHRoaXMpLCBXZWJJ
bnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IuRHVyYXRpb25Ub1VwZGF0ZVR5cGVUb2tlbnNB
ZnRlclNjcm9sbGluZyk7CiAgICAgICAgIH0KIAotICAgICAgICByZXR1cm4gc2Nyb2xsSGFuZGxl
cjsKKyAgICAgICAgcmV0dXJuIHNjcm9sbEhhbmRsZXIuYmluZCh0aGlzKTsKICAgICB9CiB9Owog
Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>