<?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>211151</bug_id>
          
          <creation_ts>2020-04-28 15:48:12 -0700</creation_ts>
          <short_desc>[Text manipulation] Add a userInfo dictionary to _WKTextManipulationToken</short_desc>
          <delta_ts>2020-04-29 11:49:22 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>HTML Editing</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</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="Wenson Hsieh">wenson_hsieh</reporter>
          <assigned_to name="Wenson Hsieh">wenson_hsieh</assigned_to>
          <cc>bdakin</cc>
    
    <cc>darin</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>llivonbemel</cc>
    
    <cc>megan_gardner</cc>
    
    <cc>mifenton</cc>
    
    <cc>sihui_liu</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1646710</commentid>
    <comment_count>0</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2020-04-28 15:48:12 -0700</bug_when>
    <thetext>&lt;rdar://problem/62329534&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1646720</commentid>
    <comment_count>1</comment_count>
      <attachid>397895</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2020-04-28 15:56:35 -0700</bug_when>
    <thetext>Created attachment 397895
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1646751</commentid>
    <comment_count>2</comment_count>
      <attachid>397903</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2020-04-28 16:39:10 -0700</bug_when>
    <thetext>Created attachment 397903
Build fix for non-internal SDKs</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1646758</commentid>
    <comment_count>3</comment_count>
      <attachid>397907</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2020-04-28 16:58:33 -0700</bug_when>
    <thetext>Created attachment 397907
Build fix for non-internal SDKs (2)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1646795</commentid>
    <comment_count>4</comment_count>
      <attachid>397907</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-28 19:08:12 -0700</bug_when>
    <thetext>Comment on attachment 397907
Build fix for non-internal SDKs (2)

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

&gt; Source/WebCore/editing/TextManipulationController.cpp:261
&gt; +static Optional&lt;TextManipulationController::ManipulationTokenInfo&gt; tokenInfo(RefPtr&lt;Node&gt;&amp;&amp; node)

Seems a little strange for this to take RefPtr&lt;Node&gt;&amp;&amp; instead of Node*.

&gt; Source/WebCore/editing/TextManipulationController.cpp:268
&gt; +    if (auto element = makeRefPtr(is&lt;Element&gt;(node.get()) ? downcast&lt;Element&gt;(node.get()) : node-&gt;parentElement())) {

Since we null-checked node, this should be *node rather than node.get(), and then need to add a &amp;.

But also, seems like we need this helper function that returns node if element or parent element. Because it comes up a lot.

&gt; Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm:1617
&gt; +    if (!!info-&gt;tagName)

!x.isNull() is a better idiom than !!x I think. Geoff Garen was talking about this recently.

&gt; Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm:1662
&gt; +                [wkToken setUserInfo:createUserInfo(token.info).autorelease()];

This can be get(). Don’t need autorelease to pass as an argument; need it to return as a result.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1646831</commentid>
    <comment_count>5</comment_count>
      <attachid>397922</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2020-04-28 21:53:42 -0700</bug_when>
    <thetext>Created attachment 397922
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1646832</commentid>
    <comment_count>6</comment_count>
      <attachid>397907</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2020-04-28 21:53:48 -0700</bug_when>
    <thetext>Comment on attachment 397907
Build fix for non-internal SDKs (2)

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

&gt;&gt; Source/WebCore/editing/TextManipulationController.cpp:261
&gt;&gt; +static Optional&lt;TextManipulationController::ManipulationTokenInfo&gt; tokenInfo(RefPtr&lt;Node&gt;&amp;&amp; node)
&gt; 
&gt; Seems a little strange for this to take RefPtr&lt;Node&gt;&amp;&amp; instead of Node*.

Yeah, I think Node* is sensible, since nothing in here does (or should) trigger layout. Changed to Node*.

&gt;&gt; Source/WebCore/editing/TextManipulationController.cpp:268
&gt;&gt; +    if (auto element = makeRefPtr(is&lt;Element&gt;(node.get()) ? downcast&lt;Element&gt;(node.get()) : node-&gt;parentElement())) {
&gt; 
&gt; Since we null-checked node, this should be *node rather than node.get(), and then need to add a &amp;.
&gt; 
&gt; But also, seems like we need this helper function that returns node if element or parent element. Because it comes up a lot.

Ok! Changed this to use downcast&lt;Element&gt;(*node).

A quick grep shows at least 9 places (including this one) in WebKit that use this pattern, so I agree that a helper would be beneficial. Perhaps something along the lines of `elementOrParentElement(Node&amp;)`? I’ll refactor this as a followup.

&gt;&gt; Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm:1617
&gt;&gt; +    if (!!info-&gt;tagName)
&gt; 
&gt; !x.isNull() is a better idiom than !!x I think. Geoff Garen was talking about this recently.

Sounds good, changed to !isNull() here, and in the other if statement below.

&gt;&gt; Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm:1662
&gt;&gt; +                [wkToken setUserInfo:createUserInfo(token.info).autorelease()];
&gt; 
&gt; This can be get(). Don’t need autorelease to pass as an argument; need it to return as a result.

Changed to .get()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1646837</commentid>
    <comment_count>7</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-04-28 22:16:27 -0700</bug_when>
    <thetext>Committed r260865: &lt;https://trac.webkit.org/changeset/260865&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 397922.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1647087</commentid>
    <comment_count>8</comment_count>
      <attachid>397907</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-29 11:49:22 -0700</bug_when>
    <thetext>Comment on attachment 397907
Build fix for non-internal SDKs (2)

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

&gt;&gt;&gt; Source/WebCore/editing/TextManipulationController.cpp:268
&gt;&gt;&gt; +    if (auto element = makeRefPtr(is&lt;Element&gt;(node.get()) ? downcast&lt;Element&gt;(node.get()) : node-&gt;parentElement())) {
&gt;&gt; 
&gt;&gt; Since we null-checked node, this should be *node rather than node.get(), and then need to add a &amp;.
&gt;&gt; 
&gt;&gt; But also, seems like we need this helper function that returns node if element or parent element. Because it comes up a lot.
&gt; 
&gt; Ok! Changed this to use downcast&lt;Element&gt;(*node).
&gt; 
&gt; A quick grep shows at least 9 places (including this one) in WebKit that use this pattern, so I agree that a helper would be beneficial. Perhaps something along the lines of `elementOrParentElement(Node&amp;)`? I’ll refactor this as a followup.

Your name seems good. The trick is:

1) coming up with a truly beautiful name for the function, maybe even better than what we currently have
2) deciding whether it should be a Node member function or not
3) if non-member, deciding whether to take a Node* or a Node&amp;
4) staying strong and returning a RefPtr&lt;Element&gt; instead of an Element*

The &quot;or parent&quot; is ugly; not a fan of our existing parentOr functions. The DOM specification uses the term &quot;inclusive ancestor&quot; to mean &quot;self or ancestor&quot;, similarly &quot;inclusive descendant&quot; and &quot;inclusive sibling&quot;.

I think that one that takes a Node* would quite useful for many call sites.

Clearly a beautiful name would be &quot;&lt;adjective&gt; element&quot;, but what is that adjective? Words like &quot;owning&quot; or &quot;nearest&quot; might do the trick, but be confusingly innovative terminology.

The phrase &quot;inclusiveParentElement&quot; would be the name that takes the DOM terminology most literally. Very much analogous to the term &quot;inclusive sibling&quot;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>397895</attachid>
            <date>2020-04-28 15:56:35 -0700</date>
            <delta_ts>2020-04-28 16:39:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-211151-20200428155634.patch</filename>
            <type>text/plain</type>
            <size>19369</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwODQzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjViM2MxYjE0OGE5MmM2
Yzg2ZDQ5NmRiNWUwNmJjNWMxNjAxNGRhMC4uMzJjOWY2OGQ1OGM5N2JlODQwODBlOThlMDhlNGZm
MTEwZjQwNzY1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDIwLTA0LTI4ICBXZW5z
b24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIFtUZXh0IG1hbmlw
dWxhdGlvbl0gQWRkIGEgdXNlckluZm8gZGljdGlvbmFyeSB0byBfV0tUZXh0TWFuaXB1bGF0aW9u
VG9rZW4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIx
MTE1MQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNjIzMjk1MzQ+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGFuIGV4dGVuc2libGUgbWVjaGFu
aXNtIGZvciB0aGUgdGV4dCBtYW5pcHVsYXRpb24gY29udHJvbGxlciB0byBzZW5kIGFkZGl0aW9u
YWwKKyAgICAgICAgbWV0YWRhdGEgZm9yIGVhY2ggdGV4dCBtYW5pcHVsYXRpb24gdG9rZW4gdGhy
b3VnaCB0byB0aGUgV2ViS2l0IGNsaWVudCwgZm9yIGRlYnVnZ2luZworICAgICAgICBwdXJwb3Nl
cy4KKworICAgICAgICBUZXN0OiBUZXh0TWFuaXB1bGF0aW9uLlN0YXJ0VGV4dE1hbmlwdWxhdGlv
bkV4dHJhY3RzVXNlckluZm8KKworICAgICAgICAqIGVkaXRpbmcvVGV4dE1hbmlwdWxhdGlvbkNv
bnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9rZW5JbmZvKToKKyAgICAgICAgKFdl
YkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpvYnNlcnZlUGFyYWdyYXBocyk6Cisg
ICAgICAgICogZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5oOgorCisgICAgICAg
IEFkZCBUZXh0TWFuaXB1bGF0aW9uVG9rZW5JbmZvLCBhbmQgYWRkIGFuIG9wdGlvbmFsIFRleHRN
YW5pcHVsYXRpb25Ub2tlbkluZm8gbWVtYmVyIHRvCisgICAgICAgIFRleHRNYW5pcHVsYXRpb25U
b2tlbi4gRm9yIG5vdywganVzdCBzZW5kIG92ZXIgdGhlIGRvY3VtZW50IFVSTCwgZWxlbWVudCB0
YWcgbmFtZSwgYW5kCisgICAgICAgIHRoZSB2YWx1ZSBvZiB0aGUgcm9sZSBhdHRyaWJ1dGUuCisK
KyAgICAgICAgKFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpNYW5pcHVsYXRp
b25Ub2tlbkluZm86OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0TWFuaXB1
bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9uVG9rZW5JbmZvOjpkZWNvZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Ok1hbmlwdWxhdGlvblRva2Vu
OjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRy
b2xsZXI6Ok1hbmlwdWxhdGlvblRva2VuOjpkZWNvZGUpOgorCiAyMDIwLTA0LTI4ICBSb2IgQnVp
cyAgPHJidWlzQGlnYWxpYS5jb20+CiAKICAgICAgICAgUmVtb3ZlIGRvd25sb2FkQXR0cmlidXRl
IGZyb20gRG9jdW1lbnRMb2FkZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9n
IGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggMjAwY2M3OGE5YWI2N2YwZGFkNDc5N2E2
ZmE3N2Y0ZjFjYzllZjZlMS4uYjAyNmExNGY2OTRiMzA2OGEyZGU5NDgwMmJlNGM0YmMyMmI3ZDEx
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNSBAQAorMjAyMC0wNC0yOCAgV2Vuc29uIEhzaWVoICA8
d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KKworICAgICAgICBbVGV4dCBtYW5pcHVsYXRpb25dIEFk
ZCBhIHVzZXJJbmZvIGRpY3Rpb25hcnkgdG8gX1dLVGV4dE1hbmlwdWxhdGlvblRva2VuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTExNTEKKyAgICAg
ICAgPHJkYXI6Ly9wcm9ibGVtLzYyMzI5NTM0PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW06
CisgICAgICAgIChjcmVhdGVVc2VySW5mbyk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc3RhcnRU
ZXh0TWFuaXB1bGF0aW9uc1dpdGhDb25maWd1cmF0aW9uOmNvbXBsZXRpb246XSk6CisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4uaDoKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL19XS1RleHRNYW5pcHVsYXRpb25Ub2tlbi5tbToKKyAg
ICAgICAgKC1bX1dLVGV4dE1hbmlwdWxhdGlvblRva2VuIHNldFVzZXJJbmZvOl0pOgorICAgICAg
ICAoLVtfV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4gdXNlckluZm9dKToKKworICAgICAgICBBZGQg
YSBuZXcgYHVzZXJJbmZvYCBkaWN0aW9uYXJ5IHRvIGBfV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW5g
LCB3aGljaCBjb250YWlucyBzZXZlcmFsIG5hbWVkCisgICAgICAgIGBOU1N0cmluZ2Aga2V5cy4K
KworICAgICAgICAoLVtfV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4gaXNFcXVhbFRvVGV4dE1hbmlw
dWxhdGlvblRva2VuOmluY2x1ZGluZ0NvbnRlbnRFcXVhbGl0eTpdKToKKyAgICAgICAgKC1bX1dL
VGV4dE1hbmlwdWxhdGlvblRva2VuIF9kZXNjcmlwdGlvblByZXNlcnZpbmdQcml2YWN5Ol0pOgor
CiAyMDIwLTA0LTI4ICBEYXZpZCBLaWx6ZXIgIDxkZGtpbHplckBhcHBsZS5jb20+CiAKICAgICAg
ICAgW01hY0NhdGFseXN0XSBBZGQgbWlzc2luZyBzeW1saW5rcyB0byBXZWJLaXQuZnJhbWV3b3Jr
cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9uQ29u
dHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRNYW5pcHVsYXRpb25Db250
cm9sbGVyLmNwcAppbmRleCA1MGZhZjI4MTMwNDhmN2FjMTZjNGRlNmZjMGZlYWRlYjkxYjI4M2Jh
Li5jYTVlNGIwOGY0Y2IzYjE2NmEyNjA0OTViMTY5ZDU0YTlmM2RhN2EyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmNwcApA
QCAtMjU4LDYgKzI1OCwyMSBAQCBzdGF0aWMgYm9vbCBjb250YWluc09ubHlIVE1MU3BhY2VzKFN0
cmluZ1ZpZXcgdGV4dCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorc3RhdGljIE9wdGlvbmFsPFRl
eHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpNYW5pcHVsYXRpb25Ub2tlbkluZm8+IHRva2VuSW5m
byhSZWZQdHI8Tm9kZT4mJiBub2RlKQoreworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKKworICAgIFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpNYW5pcHVs
YXRpb25Ub2tlbkluZm8gcmVzdWx0OworICAgIHJlc3VsdC5kb2N1bWVudFVSTCA9IG5vZGUtPmRv
Y3VtZW50KCkudXJsKCk7CisgICAgaWYgKGF1dG8gZWxlbWVudCA9IG1ha2VSZWZQdHIoaXM8RWxl
bWVudD4obm9kZS5nZXQoKSkgPyBkb3duY2FzdDxFbGVtZW50Pihub2RlLmdldCgpKSA6IG5vZGUt
PnBhcmVudEVsZW1lbnQoKSkpIHsKKyAgICAgICAgcmVzdWx0LnRhZ05hbWUgPSBlbGVtZW50LT50
YWdOYW1lKCk7CisgICAgICAgIGlmIChlbGVtZW50LT5oYXNBdHRyaWJ1dGVXaXRob3V0U3luY2hy
b25pemF0aW9uKEhUTUxOYW1lczo6cm9sZUF0dHIpKQorICAgICAgICAgICAgcmVzdWx0LnJvbGVB
dHRyaWJ1dGUgPSBlbGVtZW50LT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKEhUTUxO
YW1lczo6cm9sZUF0dHIpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCiB2b2lkIFRl
eHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpvYnNlcnZlUGFyYWdyYXBocyhjb25zdCBQb3NpdGlv
biYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQpCiB7CiAgICAgaWYgKHN0YXJ0LmlzTnVsbCgp
IHx8IGVuZC5pc051bGwoKSkKQEAgLTMyMSwxMyArMzM2LDEzIEBAIHZvaWQgVGV4dE1hbmlwdWxh
dGlvbkNvbnRyb2xsZXI6Om9ic2VydmVQYXJhZ3JhcGhzKGNvbnN0IFBvc2l0aW9uJiBzdGFydCwg
Y29uc3QKICAgICAgICAgICAgICAgICBhdXRvJiBjdXJyZW50RWxlbWVudCA9IGRvd25jYXN0PEVs
ZW1lbnQ+KCpjb250ZW50Lm5vZGUpOwogICAgICAgICAgICAgICAgIGlmICghY29udGVudC5pc1Rl
eHRDb250ZW50ICYmIGNhblBlcmZvcm1UZXh0TWFuaXB1bGF0aW9uQnlSZXBsYWNpbmdFbnRpcmVU
ZXh0Q29udGVudChjdXJyZW50RWxlbWVudCkpIHsKICAgICAgICAgICAgICAgICAgICAgYWRkSXRl
bShNYW5pcHVsYXRpb25JdGVtRGF0YSB7IFBvc2l0aW9uKCksIFBvc2l0aW9uKCksIG1ha2VXZWFr
UHRyKGN1cnJlbnRFbGVtZW50KSwgbnVsbFFOYW1lKCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICB7IE1hbmlwdWxhdGlvblRva2VuIHsgbV90b2tlbklkZW50aWZpZXIuZ2VuZXJhdGUoKSwgY3Vy
cmVudEVsZW1lbnQudGV4dENvbnRlbnQoKSB9IH0gfSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICB7IE1hbmlwdWxhdGlvblRva2VuIHsgbV90b2tlbklkZW50aWZpZXIuZ2VuZXJhdGUoKSwgY3Vy
cmVudEVsZW1lbnQudGV4dENvbnRlbnQoKSwgdG9rZW5JbmZvKCZjdXJyZW50RWxlbWVudCkgfSB9
IH0pOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAoY3VycmVudEVsZW1l
bnQuaGFzQXR0cmlidXRlcygpKSB7CiAgICAgICAgICAgICAgICAgICAgIGZvciAoYXV0byYgYXR0
cmlidXRlIDogY3VycmVudEVsZW1lbnQuYXR0cmlidXRlc0l0ZXJhdG9yKCkpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChpc0F0dHJpYnV0ZUZvclRleHRNYW5pcHVsYXRpb24oYXR0cmli
dXRlLm5hbWUoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRJdGVtKE1hbmlw
dWxhdGlvbkl0ZW1EYXRhIHsgUG9zaXRpb24oKSwgUG9zaXRpb24oKSwgbWFrZVdlYWtQdHIoY3Vy
cmVudEVsZW1lbnQpLCBhdHRyaWJ1dGUubmFtZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB7IE1hbmlwdWxhdGlvblRva2VuIHsgbV90b2tlbklkZW50aWZpZXIuZ2VuZXJhdGUo
KSwgYXR0cmlidXRlLnZhbHVlKCkgfSB9IH0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB7IE1hbmlwdWxhdGlvblRva2VuIHsgbV90b2tlbklkZW50aWZpZXIuZ2VuZXJhdGUoKSwg
YXR0cmlidXRlLnZhbHVlKCksIHRva2VuSW5mbygmY3VycmVudEVsZW1lbnQpIH0gfSB9KTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIH0KQEAgLTM0Niw3ICszNjEsNyBAQCB2b2lkIFRleHRNYW5pcHVsYXRpb25Db250cm9s
bGVyOjpvYnNlcnZlUGFyYWdyYXBocyhjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0CiAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgICAgIGVuZE9mQ3VycmVudFBhcmFncmFw
aCA9IGN1cnJlbnRFbmRPZkN1cnJlbnRQYXJhZ3JhcGg7Ci0gICAgICAgICAgICB0b2tlbnNJbkN1
cnJlbnRQYXJhZ3JhcGguYXBwZW5kKE1hbmlwdWxhdGlvblRva2VuIHsgbV90b2tlbklkZW50aWZp
ZXIuZ2VuZXJhdGUoKSwgIltdIiwgdHJ1ZSB9KTsKKyAgICAgICAgICAgIHRva2Vuc0luQ3VycmVu
dFBhcmFncmFwaC5hcHBlbmQoTWFuaXB1bGF0aW9uVG9rZW4geyBtX3Rva2VuSWRlbnRpZmllci5n
ZW5lcmF0ZSgpLCAiW10iLCB0b2tlbkluZm8oY29udGVudC5ub2RlLmdldCgpKSwgdHJ1ZSB9KTsK
IAogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KQEAgLTM2NSw3ICszODAsNyBAQCB2
b2lkIFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpvYnNlcnZlUGFyYWdyYXBocyhjb25zdCBQ
b3NpdGlvbiYgc3RhcnQsIGNvbnN0CiAgICAgICAgICAgICAgICAgaWYgKHRva2Vuc0luQ3VycmVu
dFBhcmFncmFwaC5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgICAgIHN0YXJ0T2ZDdXJyZW50
UGFyYWdyYXBoID0gUG9zaXRpb24oJnRleHROb2RlLCBzdGFydE9mQ3VycmVudExpbmUpOwogCi0g
ICAgICAgICAgICAgICAgdG9rZW5zSW5DdXJyZW50UGFyYWdyYXBoLmFwcGVuZChNYW5pcHVsYXRp
b25Ub2tlbiB7IG1fdG9rZW5JZGVudGlmaWVyLmdlbmVyYXRlKCksIHN0cmluZ1VudGlsRW5kT2ZM
aW5lLCBleGNsdXNpb25SdWxlTWF0Y2hlci5pc0V4Y2x1ZGVkKGNvbnRlbnQubm9kZS5nZXQoKSkg
fSk7CisgICAgICAgICAgICAgICAgdG9rZW5zSW5DdXJyZW50UGFyYWdyYXBoLmFwcGVuZChNYW5p
cHVsYXRpb25Ub2tlbiB7IG1fdG9rZW5JZGVudGlmaWVyLmdlbmVyYXRlKCksIHN0cmluZ1VudGls
RW5kT2ZMaW5lLCB0b2tlbkluZm8oJnRleHROb2RlKSwgZXhjbHVzaW9uUnVsZU1hdGNoZXIuaXNF
eGNsdWRlZChjb250ZW50Lm5vZGUuZ2V0KCkpIH0pOwogICAgICAgICAgICAgfQogCiAgICAgICAg
ICAgICBpZiAoIXRva2Vuc0luQ3VycmVudFBhcmFncmFwaC5pc0VtcHR5KCkpIHsKQEAgLTM4NSw3
ICs0MDAsNyBAQCB2b2lkIFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpvYnNlcnZlUGFyYWdy
YXBocyhjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0CiAgICAgICAgICAgICAgICAgICAgIHN0
YXJ0T2ZDdXJyZW50UGFyYWdyYXBoID0gaXRlcmF0b3Iuc3RhcnRQb3NpdGlvbigpOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgZW5kT2ZDdXJyZW50UGFyYWdyYXBoID0gaXRlcmF0b3IuZW5k
UG9zaXRpb24oKTsKLSAgICAgICAgICAgIHRva2Vuc0luQ3VycmVudFBhcmFncmFwaC5hcHBlbmQo
TWFuaXB1bGF0aW9uVG9rZW4geyBtX3Rva2VuSWRlbnRpZmllci5nZW5lcmF0ZSgpLCByZW1haW5p
bmdUZXh0LnRvU3RyaW5nKCksIGV4Y2x1c2lvblJ1bGVNYXRjaGVyLmlzRXhjbHVkZWQoY29udGVu
dC5ub2RlLmdldCgpKSB9KTsKKyAgICAgICAgICAgIHRva2Vuc0luQ3VycmVudFBhcmFncmFwaC5h
cHBlbmQoTWFuaXB1bGF0aW9uVG9rZW4geyBtX3Rva2VuSWRlbnRpZmllci5nZW5lcmF0ZSgpLCBy
ZW1haW5pbmdUZXh0LnRvU3RyaW5nKCksIHRva2VuSW5mbyhjb250ZW50Lm5vZGUuZ2V0KCkpLCBl
eGNsdXNpb25SdWxlTWF0Y2hlci5pc0V4Y2x1ZGVkKGNvbnRlbnQubm9kZS5nZXQoKSkgfSk7CiAg
ICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4
dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dE1h
bmlwdWxhdGlvbkNvbnRyb2xsZXIuaAppbmRleCBjN2NkODY0OTU3NzFjNjgzOTM4Zjk1NzQxZTM1
Njg4YTg0ZTkyZWVmLi5iNWQzYTY5ZDBmZjkxZGY3MmUwZTU5YTA2NWM1N2QwYzVhNzYyNjkyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRNYW5pcHVsYXRpb25Db250cm9s
bGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9uQ29udHJv
bGxlci5oCkBAIC00OCw5ICs0OCwxOSBAQCBwdWJsaWM6CiAgICAgZW51bSBUb2tlbklkZW50aWZp
ZXJUeXBlIHsgfTsKICAgICB1c2luZyBUb2tlbklkZW50aWZpZXIgPSBPYmplY3RJZGVudGlmaWVy
PFRva2VuSWRlbnRpZmllclR5cGU+OwogCisgICAgc3RydWN0IE1hbmlwdWxhdGlvblRva2VuSW5m
byB7CisgICAgICAgIFN0cmluZyB0YWdOYW1lOworICAgICAgICBTdHJpbmcgcm9sZUF0dHJpYnV0
ZTsKKyAgICAgICAgVVJMIGRvY3VtZW50VVJMOworCisgICAgICAgIHRlbXBsYXRlPGNsYXNzIEVu
Y29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICAgICAgdGVtcGxhdGU8Y2xh
c3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPE1hbmlwdWxhdGlvblRva2VuSW5mbz4gZGVjb2Rl
KERlY29kZXImKTsKKyAgICB9OworCiAgICAgc3RydWN0IE1hbmlwdWxhdGlvblRva2VuIHsKICAg
ICAgICAgVG9rZW5JZGVudGlmaWVyIGlkZW50aWZpZXI7CiAgICAgICAgIFN0cmluZyBjb250ZW50
OworICAgICAgICBPcHRpb25hbDxNYW5pcHVsYXRpb25Ub2tlbkluZm8+IGluZm87CiAgICAgICAg
IGJvb2wgaXNFeGNsdWRlZCB7IGZhbHNlIH07CiAKICAgICAgICAgdGVtcGxhdGU8Y2xhc3MgRW5j
b2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwpAQCAtMTU3LDEwICsxNjcsMzQgQEAg
cHJpdmF0ZToKICAgICBUb2tlbklkZW50aWZpZXIgbV90b2tlbklkZW50aWZpZXI7CiB9OwogCit0
ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgordm9pZCBUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6
TWFuaXB1bGF0aW9uVG9rZW5JbmZvOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sK
KyAgICBlbmNvZGVyIDw8IHRhZ05hbWU7CisgICAgZW5jb2RlciA8PCByb2xlQXR0cmlidXRlOwor
ICAgIGVuY29kZXIgPDwgZG9jdW1lbnRVUkw7Cit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+
CitPcHRpb25hbDxUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9uVG9rZW5J
bmZvPiBUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9uVG9rZW5JbmZvOjpk
ZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBNYW5pcHVsYXRpb25Ub2tlbkluZm8gcmVz
dWx0OworICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnRhZ05hbWUpKQorICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQucm9s
ZUF0dHJpYnV0ZSkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKHJlc3VsdC5kb2N1bWVudFVSTCkpCisgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVy
Pgogdm9pZCBUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9uVG9rZW46OmVu
Y29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogewotICAgIGVuY29kZXIgPDwgaWRlbnRpZmll
ciA8PCBjb250ZW50IDw8IGlzRXhjbHVkZWQ7CisgICAgZW5jb2RlciA8PCBpZGVudGlmaWVyIDw8
IGNvbnRlbnQgPDwgaW5mbyA8PCBpc0V4Y2x1ZGVkOwogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNv
ZGVyPgpAQCAtMTcxLDYgKzIwNSw4IEBAIE9wdGlvbmFsPFRleHRNYW5pcHVsYXRpb25Db250cm9s
bGVyOjpNYW5pcHVsYXRpb25Ub2tlbj4gVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsCiAgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuY29u
dGVudCkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgaWYgKCFkZWNvZGVyLmRl
Y29kZShyZXN1bHQuaW5mbykpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgaWYg
KCFkZWNvZGVyLmRlY29kZShyZXN1bHQuaXNFeGNsdWRlZCkpCiAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CiAgICAgcmV0dXJuIHJlc3VsdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCmluZGV4IDg4Yzk1ZGRlY2ZkNDY4ZWNjMzU4ZjZlYmM1
ODlkZWQ2YTA5ZDU1MzguLjZkYjJhYWJmZTkyNDMwMTAzMzRiYThhZGQ5N2EyMzQwNmUzZjk1ZDcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcu
bW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQpA
QCAtMTYwNiw2ICsxNjA2LDIyIEBAIC0gKHZvaWQpX3NldFRleHRNYW5pcHVsYXRpb25EZWxlZ2F0
ZTooaWQgPF9XS1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZT4pZGVsZWdhdGUKICAgICBfdGV4dE1h
bmlwdWxhdGlvbkRlbGVnYXRlID0gZGVsZWdhdGU7CiB9CiAKK3N0YXRpYyBSZXRhaW5QdHI8TlNE
aWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPj4gY3JlYXRlVXNlckluZm8oY29uc3QgT3B0aW9uYWw8
V2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Ok1hbmlwdWxhdGlvblRva2VuSW5m
bz4mIGluZm8pCit7CisgICAgaWYgKCFpbmZvKQorICAgICAgICByZXR1cm4geyB9OworCisgICAg
YXV0byByZXN1bHQgPSBhZG9wdE5TKFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdFdp
dGhDYXBhY2l0eTozXSk7CisgICAgaWYgKCFpbmZvLT5kb2N1bWVudFVSTC5pc051bGwoKSkKKyAg
ICAgICAgW3Jlc3VsdCBzZXRPYmplY3Q6KE5TVVJMICopaW5mby0+ZG9jdW1lbnRVUkwgZm9yS2V5
Ol9XS1RleHRNYW5pcHVsYXRpb25Ub2tlblVzZXJJbmZvRG9jdW1lbnRVUkxLZXldOworICAgIGlm
ICghIWluZm8tPnRhZ05hbWUpCisgICAgICAgIFtyZXN1bHQgc2V0T2JqZWN0OihOU1N0cmluZyAq
KWluZm8tPnRhZ05hbWUgZm9yS2V5Ol9XS1RleHRNYW5pcHVsYXRpb25Ub2tlblVzZXJJbmZvVGFn
TmFtZUtleV07CisgICAgaWYgKCEhaW5mby0+cm9sZUF0dHJpYnV0ZSkKKyAgICAgICAgW3Jlc3Vs
dCBzZXRPYmplY3Q6KE5TU3RyaW5nICopaW5mby0+cm9sZUF0dHJpYnV0ZSBmb3JLZXk6X1dLVGV4
dE1hbmlwdWxhdGlvblRva2VuVXNlckluZm9Sb2xlQXR0cmlidXRlS2V5XTsKKworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKIC0gKHZvaWQpX3N0YXJ0VGV4dE1hbmlwdWxhdGlvbnNXaXRoQ29uZmln
dXJhdGlvbjooX1dLVGV4dE1hbmlwdWxhdGlvbkNvbmZpZ3VyYXRpb24gKiljb25maWd1cmF0aW9u
IGNvbXBsZXRpb246KHZvaWQoXikoKSljb21wbGV0aW9uSGFuZGxlcgogewogICAgIHVzaW5nIEV4
Y2x1c2lvblJ1bGUgPSBXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6RXhjbHVz
aW9uUnVsZTsKQEAgLTE2NDMsNiArMTY1OSw3IEBAIC0gKHZvaWQpX3N0YXJ0VGV4dE1hbmlwdWxh
dGlvbnNXaXRoQ29uZmlndXJhdGlvbjooX1dLVGV4dE1hbmlwdWxhdGlvbkNvbmZpZ3VyYXRpCiAg
ICAgICAgICAgICAgICAgW3drVG9rZW4gc2V0SWRlbnRpZmllcjpTdHJpbmc6Om51bWJlcih0b2tl
bi5pZGVudGlmaWVyLnRvVUludDY0KCkpXTsKICAgICAgICAgICAgICAgICBbd2tUb2tlbiBzZXRD
b250ZW50OnRva2VuLmNvbnRlbnRdOwogICAgICAgICAgICAgICAgIFt3a1Rva2VuIHNldEV4Y2x1
ZGVkOnRva2VuLmlzRXhjbHVkZWRdOworICAgICAgICAgICAgICAgIFt3a1Rva2VuIHNldFVzZXJJ
bmZvOmNyZWF0ZVVzZXJJbmZvKHRva2VuLmluZm8pLmF1dG9yZWxlYXNlKCldOwogICAgICAgICAg
ICAgICAgIHJldHVybiB3a1Rva2VuOwogICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICByZXR1
cm4gYWRvcHROUyhbW19XS1RleHRNYW5pcHVsYXRpb25JdGVtIGFsbG9jXSBpbml0V2l0aElkZW50
aWZpZXI6U3RyaW5nOjpudW1iZXIoaXRlbS5pZGVudGlmaWVyLnRvVUludDY0KCkpIHRva2Vuczp0
b2tlbnMuZ2V0KCldKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
b2NvYS9fV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4uaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9Db2NvYS9fV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4uaAppbmRleCAxZjJlODZmMmI2ODY4
OGMyMzFjNDAyNTY5Yjg3MjM4YTczNjE2YWQ2Li41ZjkyNTY2OTg5YWZhYmFhMDgzNmJmMmRiM2Y1
ZDQ3OGRlNWI0MDBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29j
b2EvX1dLVGV4dE1hbmlwdWxhdGlvblRva2VuLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0NvY29hL19XS1RleHRNYW5pcHVsYXRpb25Ub2tlbi5oCkBAIC0yOCw2ICsyOCwxMCBA
QAogCiBOU19BU1NVTUVfTk9OTlVMTF9CRUdJTgogCitXS19FWFRFUk4gTlNTdHJpbmcgKiBjb25z
dCBfV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW5Vc2VySW5mb0RvY3VtZW50VVJMS2V5IFdLX0FQSV9B
VkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CitXS19FWFRFUk4g
TlNTdHJpbmcgKiBjb25zdCBfV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW5Vc2VySW5mb1RhZ05hbWVL
ZXkgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsK
K1dLX0VYVEVSTiBOU1N0cmluZyAqIGNvbnN0IF9XS1RleHRNYW5pcHVsYXRpb25Ub2tlblVzZXJJ
bmZvUm9sZUF0dHJpYnV0ZUtleSBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBp
b3MoV0tfSU9TX1RCQSkpOworCiBXS19DTEFTU19BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSks
IGlvcyhXS19JT1NfVEJBKSkKIEBpbnRlcmZhY2UgX1dLVGV4dE1hbmlwdWxhdGlvblRva2VuIDog
TlNPYmplY3QKIApAQCAtMzgsNiArNDIsOCBAQCBXS19DTEFTU19BVkFJTEFCTEUobWFjb3MoV0tf
TUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSkKIC0gKEJPT0wpaXNFcXVhbFRvVGV4dE1hbmlwdWxh
dGlvblRva2VuOihudWxsYWJsZSBfV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4gKilvdGhlclRva2Vu
IGluY2x1ZGluZ0NvbnRlbnRFcXVhbGl0eTooQk9PTClpbmNsdWRpbmdDb250ZW50RXF1YWxpdHk7
CiBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSwgcmVhZG9ubHkpIE5TU3RyaW5nICpkZWJ1Z0Rl
c2NyaXB0aW9uOwogCitAcHJvcGVydHkgKG5vbmF0b21pYywgbnVsbGFibGUsIGNvcHkpIE5TRGlj
dGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKnVzZXJJbmZvOworCiBAZW5kCiAKIE5TX0FTU1VNRV9O
T05OVUxMX0VORApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29h
L19XS1RleHRNYW5pcHVsYXRpb25Ub2tlbi5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9Db2NvYS9fV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4ubW0KaW5kZXggMTkyMzAwNDkzODgxODZm
OWVhMWRmNDljMTlmZjJiNTQwZWJmNmM2YS4uODFiZTJmMjYwNjA3YWI3NWUxZjNhMjY1OGE5ZmMw
YWYxMjc3ZDM5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29h
L19XS1RleHRNYW5pcHVsYXRpb25Ub2tlbi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQ29jb2EvX1dLVGV4dE1hbmlwdWxhdGlvblRva2VuLm1tCkBAIC0yNiw3ICsyNiwxNSBA
QAogI2ltcG9ydCAiY29uZmlnLmgiCiAjaW1wb3J0ICJfV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4u
aCIKIAotQGltcGxlbWVudGF0aW9uIF9XS1RleHRNYW5pcHVsYXRpb25Ub2tlbgorI2ltcG9ydCA8
d3RmL1JldGFpblB0ci5oPgorCitOU1N0cmluZyAqIGNvbnN0IF9XS1RleHRNYW5pcHVsYXRpb25U
b2tlblVzZXJJbmZvRG9jdW1lbnRVUkxLZXkgPSBAIl9XS1RleHRNYW5pcHVsYXRpb25Ub2tlblVz
ZXJJbmZvRG9jdW1lbnRVUkxLZXkiOworTlNTdHJpbmcgKiBjb25zdCBfV0tUZXh0TWFuaXB1bGF0
aW9uVG9rZW5Vc2VySW5mb1RhZ05hbWVLZXkgPSBAIl9XS1RleHRNYW5pcHVsYXRpb25Ub2tlblVz
ZXJJbmZvVGFnTmFtZUtleSI7CitOU1N0cmluZyAqIGNvbnN0IF9XS1RleHRNYW5pcHVsYXRpb25U
b2tlblVzZXJJbmZvUm9sZUF0dHJpYnV0ZUtleSA9IEAiX1dLVGV4dE1hbmlwdWxhdGlvblRva2Vu
VXNlckluZm9Sb2xlQXR0cmlidXRlS2V5IjsKKworQGltcGxlbWVudGF0aW9uIF9XS1RleHRNYW5p
cHVsYXRpb25Ub2tlbiB7CisgICAgUmV0YWluUHRyPE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBp
ZD4+IF91c2VySW5mbzsKK30KIAogLSAodm9pZClkZWFsbG9jCiB7CkBAIC0zOCw2ICs0NiwxOSBA
QCAtICh2b2lkKWRlYWxsb2MKICAgICBbc3VwZXIgZGVhbGxvY107CiB9CiAKKy0gKHZvaWQpc2V0
VXNlckluZm86KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKil1c2VySW5mbworeworICAg
IGlmICh1c2VySW5mbyA9PSBfdXNlckluZm8gfHwgW191c2VySW5mbyBpc0VxdWFsOnVzZXJJbmZv
XSkKKyAgICAgICAgcmV0dXJuOworCisgICAgX3VzZXJJbmZvID0gYWRvcHROUyh1c2VySW5mby5j
b3B5KTsKK30KKworLSAoTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPiAqKXVzZXJJbmZvCit7
CisgICAgcmV0dXJuIF91c2VySW5mby5nZXQoKTsKK30KKwogc3RhdGljIEJPT0wgaXNFcXVhbE9y
Qm90aE5pbChpZCBhLCBpZCBiKQogewogICAgIGlmIChhID09IGIpCkBAIC02NSw4ICs4Niw5IEBA
IC0gKEJPT0wpaXNFcXVhbFRvVGV4dE1hbmlwdWxhdGlvblRva2VuOihfV0tUZXh0TWFuaXB1bGF0
aW9uVG9rZW4gKilvdGhlclRva2VuIGluCiAgICAgQk9PTCBlcXVhbElkZW50aWZpZXJzID0gaXNF
cXVhbE9yQm90aE5pbChzZWxmLmlkZW50aWZpZXIsIG90aGVyVG9rZW4uaWRlbnRpZmllcik7CiAg
ICAgQk9PTCBlcXVhbEV4Y2x1c2lvbiA9IHNlbGYuaXNFeGNsdWRlZCA9PSBvdGhlclRva2VuLmlz
RXhjbHVkZWQ7CiAgICAgQk9PTCBlcXVhbENvbnRlbnQgPSAhaW5jbHVkaW5nQ29udGVudEVxdWFs
aXR5IHx8IGlzRXF1YWxPckJvdGhOaWwoc2VsZi5jb250ZW50LCBvdGhlclRva2VuLmNvbnRlbnQp
OworICAgIEJPT0wgZXF1YWxVc2VySW5mbyA9IGlzRXF1YWxPckJvdGhOaWwoc2VsZi51c2VySW5m
bywgb3RoZXJUb2tlbi51c2VySW5mbyk7CiAKLSAgICByZXR1cm4gZXF1YWxJZGVudGlmaWVycyAm
JiBlcXVhbEV4Y2x1c2lvbiAmJiBlcXVhbENvbnRlbnQ7CisgICAgcmV0dXJuIGVxdWFsSWRlbnRp
ZmllcnMgJiYgZXF1YWxFeGNsdXNpb24gJiYgZXF1YWxDb250ZW50ICYmIGVxdWFsVXNlckluZm87
CiB9CiAKIC0gKE5TU3RyaW5nICopZGVzY3JpcHRpb24KQEAgLTg1LDcgKzEwNyw3IEBAIC0gKE5T
U3RyaW5nICopX2Rlc2NyaXB0aW9uUHJlc2VydmluZ1ByaXZhY3k6KEJPT0wpcHJlc2VydmVQcml2
YWN5CiAgICAgaWYgKHByZXNlcnZlUHJpdmFjeSkKICAgICAgICAgW2Rlc2NyaXB0aW9uIGFwcGVu
ZEZvcm1hdDpAIjsgY29udGVudCBsZW5ndGggPSAlbHUiLCAodW5zaWduZWQgbG9uZylzZWxmLmNv
bnRlbnQubGVuZ3RoXTsKICAgICBlbHNlCi0gICAgICAgIFtkZXNjcmlwdGlvbiBhcHBlbmRGb3Jt
YXQ6QCI7IGNvbnRlbnQgPSAlQCIsIHNlbGYuY29udGVudF07CisgICAgICAgIFtkZXNjcmlwdGlv
biBhcHBlbmRGb3JtYXQ6QCI7IGNvbnRlbnQgPSAlQDsgdXNlciBpbmZvID0gJUAiLCBzZWxmLmNv
bnRlbnQsIHNlbGYudXNlckluZm9dOwogCiAgICAgW2Rlc2NyaXB0aW9uIGFwcGVuZFN0cmluZzpA
Ij4iXTsKIApkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmlu
ZGV4IGQ2MTViMmFmNWI3MjFhM2EzYmI4NzBjYjY1MGYwYmI3YzE0N2UzZGQuLmRkYjQzNjM0NDJh
ZGU5OTc4MDI4OTViOTlkYjMwYjMwMmIzZjkzYzQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxv
ZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAyMC0wNC0yOCAgV2Vu
c29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KKworICAgICAgICBbVGV4dCBtYW5p
cHVsYXRpb25dIEFkZCBhIHVzZXJJbmZvIGRpY3Rpb25hcnkgdG8gX1dLVGV4dE1hbmlwdWxhdGlv
blRva2VuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MTExNTEKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzYyMzI5NTM0PgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBhIG5ldyBBUEkgdGVzdCB0byBj
aGVjayB0aGUgdXNlckluZm8gZGljdGlvbmFyeSBvbiB0ZXh0IG1hbmlwdWxhdGlvbiB0b2tlbnMu
CisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1RleHRNYW5pcHVs
YXRpb24ubW06CisKIDIwMjAtMDQtMjggIEthdGUgQ2hlbmV5ICA8a2F0aGVyaW5lX2NoZW5leUBh
cHBsZS5jb20+CiAKICAgICAgICAgQ3JlYXRlIGEgbWVjaGFuaXNtIHRvIGFkZCBtaXNzaW5nIElU
UCBEYXRhYmFzZSB0YWJsZXMgd2hlbiB0aGUgc2NoZW1hIGlzIHVwZGF0ZWQKZGlmZiAtLWdpdCBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVGV4dE1hbmlwdWxhdGlvbi5t
bSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVGV4dE1hbmlwdWxhdGlv
bi5tbQppbmRleCAzNGNkZjlhZGRkYWQzYzgzZmQyYTcxMzE1MzJmNDhmNmNkMzIxMmQyLi4zMWNm
MWNhZmEwZjU1ZDU0ODI2NzViYjdiZGRiYjJkYTQ2MjdkZGE4IDEwMDY0NAotLS0gYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1RleHRNYW5pcHVsYXRpb24ubW0KKysrIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9UZXh0TWFuaXB1bGF0aW9uLm1t
CkBAIC03MDQsNiArNzA0LDU5IEBAIFRFU1QoVGV4dE1hbmlwdWxhdGlvbiwgU3RhcnRUZXh0TWFu
aXB1bGF0aW9uVHJlYXRzTGlua3NJbk5hdmlnYXRpb25FbGVtZW50c0FzUGFyCiAgICAgRVhQRUNU
X1dLX1NUUkVRKCJHYXJwbHkiLCBpdGVtc1szXS50b2tlbnNbMF0uY29udGVudCk7CiB9CiAKK1RF
U1QoVGV4dE1hbmlwdWxhdGlvbiwgU3RhcnRUZXh0TWFuaXB1bGF0aW9uRXh0cmFjdHNVc2VySW5m
bykKK3sKKyAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW1RleHRNYW5pcHVsYXRpb25EZWxl
Z2F0ZSBhbGxvY10gaW5pdF0pOworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tX
ZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgNDAwLCA0MDApXSk7
CisgICAgW3dlYlZpZXcgX3NldFRleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZTpkZWxlZ2F0ZS5nZXQo
KV07CisKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZEhUTUxTdHJpbmc6QCI8IURPQ1RZ
UEUgaHRtbD4iCisgICAgICAgICI8Ym9keT4iCisgICAgICAgICIgICAgPHRpdGxlPlRoaXMgaXMg
YSB0ZXN0PC90aXRsZT4iCisgICAgICAgICIgICAgPHA+Rmlyc3Q8L3A+IgorICAgICAgICAiICAg
IDxkaXYgcm9sZT0nYnV0dG9uJz5TZWNvbmQ8L2Rpdj4iCisgICAgICAgICIgICAgPHNwYW4+VGhp
cmQ8L3NwYW4+IgorICAgICAgICAiPC9ib2R5PiJdOworCisgICAgZG9uZSA9IGZhbHNlOworICAg
IFt3ZWJWaWV3IF9zdGFydFRleHRNYW5pcHVsYXRpb25zV2l0aENvbmZpZ3VyYXRpb246bmlsIGNv
bXBsZXRpb246XnsKKyAgICAgICAgZG9uZSA9IHRydWU7CisgICAgfV07CisgICAgVGVzdFdlYktp
dEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKKworICAgIGF1dG8gaXRlbXMgPSBbZGVsZWdhdGUgaXRl
bXNdOworICAgIEVYUEVDVF9FUShpdGVtcy5jb3VudCwgNFVMKTsKKyAgICBFWFBFQ1RfRVEoaXRl
bXNbMF0udG9rZW5zLmNvdW50LCAxVUwpOworICAgIEVYUEVDVF9FUShpdGVtc1sxXS50b2tlbnMu
Y291bnQsIDFVTCk7CisgICAgRVhQRUNUX0VRKGl0ZW1zWzJdLnRva2Vucy5jb3VudCwgMVVMKTsK
KyAgICBFWFBFQ1RfRVEoaXRlbXNbM10udG9rZW5zLmNvdW50LCAxVUwpOworICAgIEVYUEVDVF9X
S19TVFJFUSgiVGhpcyBpcyBhIHRlc3QiLCBpdGVtc1swXS50b2tlbnNbMF0uY29udGVudCk7Cisg
ICAgRVhQRUNUX1dLX1NUUkVRKCJGaXJzdCIsIGl0ZW1zWzFdLnRva2Vuc1swXS5jb250ZW50KTsK
KyAgICBFWFBFQ1RfV0tfU1RSRVEoIlNlY29uZCIsIGl0ZW1zWzJdLnRva2Vuc1swXS5jb250ZW50
KTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoIlRoaXJkIiwgaXRlbXNbM10udG9rZW5zWzBdLmNvbnRl
bnQpOworICAgIHsKKyAgICAgICAgYXV0byB1c2VySW5mbyA9IGl0ZW1zWzBdLnRva2Vuc1swXS51
c2VySW5mbzsKKyAgICAgICAgRVhQRUNUX1dLX1NUUkVRKCJUZXN0V2ViS2l0QVBJLnJlc291cmNl
cyIsIFsoTlNVUkwgKil1c2VySW5mb1tfV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW5Vc2VySW5mb0Rv
Y3VtZW50VVJMS2V5XSBsYXN0UGF0aENvbXBvbmVudF0pOworICAgICAgICBFWFBFQ1RfV0tfU1RS
RVEoIlRJVExFIiwgKE5TU3RyaW5nICopdXNlckluZm9bX1dLVGV4dE1hbmlwdWxhdGlvblRva2Vu
VXNlckluZm9UYWdOYW1lS2V5XSk7CisgICAgfQorICAgIHsKKyAgICAgICAgYXV0byB1c2VySW5m
byA9IGl0ZW1zWzFdLnRva2Vuc1swXS51c2VySW5mbzsKKyAgICAgICAgRVhQRUNUX1dLX1NUUkVR
KCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyIsIFsoTlNVUkwgKil1c2VySW5mb1tfV0tUZXh0TWFu
aXB1bGF0aW9uVG9rZW5Vc2VySW5mb0RvY3VtZW50VVJMS2V5XSBsYXN0UGF0aENvbXBvbmVudF0p
OworICAgICAgICBFWFBFQ1RfV0tfU1RSRVEoIlAiLCAoTlNTdHJpbmcgKil1c2VySW5mb1tfV0tU
ZXh0TWFuaXB1bGF0aW9uVG9rZW5Vc2VySW5mb1RhZ05hbWVLZXldKTsKKyAgICB9CisgICAgewor
ICAgICAgICBhdXRvIHVzZXJJbmZvID0gaXRlbXNbMl0udG9rZW5zWzBdLnVzZXJJbmZvOworICAg
ICAgICBFWFBFQ1RfV0tfU1RSRVEoIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIiwgWyhOU1VSTCAq
KXVzZXJJbmZvW19XS1RleHRNYW5pcHVsYXRpb25Ub2tlblVzZXJJbmZvRG9jdW1lbnRVUkxLZXld
IGxhc3RQYXRoQ29tcG9uZW50XSk7CisgICAgICAgIEVYUEVDVF9XS19TVFJFUSgiRElWIiwgKE5T
U3RyaW5nICopdXNlckluZm9bX1dLVGV4dE1hbmlwdWxhdGlvblRva2VuVXNlckluZm9UYWdOYW1l
S2V5XSk7CisgICAgICAgIEVYUEVDVF9XS19TVFJFUSgiYnV0dG9uIiwgKE5TU3RyaW5nICopdXNl
ckluZm9bX1dLVGV4dE1hbmlwdWxhdGlvblRva2VuVXNlckluZm9Sb2xlQXR0cmlidXRlS2V5XSk7
CisgICAgfQorICAgIHsKKyAgICAgICAgYXV0byB1c2VySW5mbyA9IGl0ZW1zWzNdLnRva2Vuc1sw
XS51c2VySW5mbzsKKyAgICAgICAgRVhQRUNUX1dLX1NUUkVRKCJUZXN0V2ViS2l0QVBJLnJlc291
cmNlcyIsIFsoTlNVUkwgKil1c2VySW5mb1tfV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW5Vc2VySW5m
b0RvY3VtZW50VVJMS2V5XSBsYXN0UGF0aENvbXBvbmVudF0pOworICAgICAgICBFWFBFQ1RfV0tf
U1RSRVEoIlNQQU4iLCAoTlNTdHJpbmcgKil1c2VySW5mb1tfV0tUZXh0TWFuaXB1bGF0aW9uVG9r
ZW5Vc2VySW5mb1RhZ05hbWVLZXldKTsKKyAgICB9Cit9CisKIHN0cnVjdCBUb2tlbiB7CiAgICAg
TlNTdHJpbmcgKmlkZW50aWZpZXI7CiAgICAgTlNTdHJpbmcgKmNvbnRlbnQ7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>397903</attachid>
            <date>2020-04-28 16:39:10 -0700</date>
            <delta_ts>2020-04-28 16:58:32 -0700</delta_ts>
            <desc>Build fix for non-internal SDKs</desc>
            <filename>bug-211151-20200428163909.patch</filename>
            <type>text/plain</type>
            <size>20143</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwODQzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjViM2MxYjE0OGE5MmM2
Yzg2ZDQ5NmRiNWUwNmJjNWMxNjAxNGRhMC4uMzJjOWY2OGQ1OGM5N2JlODQwODBlOThlMDhlNGZm
MTEwZjQwNzY1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDIwLTA0LTI4ICBXZW5z
b24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIFtUZXh0IG1hbmlw
dWxhdGlvbl0gQWRkIGEgdXNlckluZm8gZGljdGlvbmFyeSB0byBfV0tUZXh0TWFuaXB1bGF0aW9u
VG9rZW4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIx
MTE1MQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNjIzMjk1MzQ+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGFuIGV4dGVuc2libGUgbWVjaGFu
aXNtIGZvciB0aGUgdGV4dCBtYW5pcHVsYXRpb24gY29udHJvbGxlciB0byBzZW5kIGFkZGl0aW9u
YWwKKyAgICAgICAgbWV0YWRhdGEgZm9yIGVhY2ggdGV4dCBtYW5pcHVsYXRpb24gdG9rZW4gdGhy
b3VnaCB0byB0aGUgV2ViS2l0IGNsaWVudCwgZm9yIGRlYnVnZ2luZworICAgICAgICBwdXJwb3Nl
cy4KKworICAgICAgICBUZXN0OiBUZXh0TWFuaXB1bGF0aW9uLlN0YXJ0VGV4dE1hbmlwdWxhdGlv
bkV4dHJhY3RzVXNlckluZm8KKworICAgICAgICAqIGVkaXRpbmcvVGV4dE1hbmlwdWxhdGlvbkNv
bnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9rZW5JbmZvKToKKyAgICAgICAgKFdl
YkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpvYnNlcnZlUGFyYWdyYXBocyk6Cisg
ICAgICAgICogZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5oOgorCisgICAgICAg
IEFkZCBUZXh0TWFuaXB1bGF0aW9uVG9rZW5JbmZvLCBhbmQgYWRkIGFuIG9wdGlvbmFsIFRleHRN
YW5pcHVsYXRpb25Ub2tlbkluZm8gbWVtYmVyIHRvCisgICAgICAgIFRleHRNYW5pcHVsYXRpb25U
b2tlbi4gRm9yIG5vdywganVzdCBzZW5kIG92ZXIgdGhlIGRvY3VtZW50IFVSTCwgZWxlbWVudCB0
YWcgbmFtZSwgYW5kCisgICAgICAgIHRoZSB2YWx1ZSBvZiB0aGUgcm9sZSBhdHRyaWJ1dGUuCisK
KyAgICAgICAgKFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpNYW5pcHVsYXRp
b25Ub2tlbkluZm86OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0TWFuaXB1
bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9uVG9rZW5JbmZvOjpkZWNvZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Ok1hbmlwdWxhdGlvblRva2Vu
OjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRy
b2xsZXI6Ok1hbmlwdWxhdGlvblRva2VuOjpkZWNvZGUpOgorCiAyMDIwLTA0LTI4ICBSb2IgQnVp
cyAgPHJidWlzQGlnYWxpYS5jb20+CiAKICAgICAgICAgUmVtb3ZlIGRvd25sb2FkQXR0cmlidXRl
IGZyb20gRG9jdW1lbnRMb2FkZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9n
IGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggMjAwY2M3OGE5YWI2N2YwZGFkNDc5N2E2
ZmE3N2Y0ZjFjYzllZjZlMS4uZjVmODg0NDI2OGUyNzBlZTBmNzg2YjM4Y2MxNGMyODRiY2Q0NjVl
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNiBAQAorMjAyMC0wNC0yOCAgV2Vuc29uIEhzaWVoICA8
d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KKworICAgICAgICBbVGV4dCBtYW5pcHVsYXRpb25dIEFk
ZCBhIHVzZXJJbmZvIGRpY3Rpb25hcnkgdG8gX1dLVGV4dE1hbmlwdWxhdGlvblRva2VuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTExNTEKKyAgICAg
ICAgPHJkYXI6Ly9wcm9ibGVtLzYyMzI5NTM0PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW06
CisgICAgICAgIChjcmVhdGVVc2VySW5mbyk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc3RhcnRU
ZXh0TWFuaXB1bGF0aW9uc1dpdGhDb25maWd1cmF0aW9uOmNvbXBsZXRpb246XSk6CisgICAgICAg
ICgtW1dLV2ViVmlldyBfY29tcGxldGVUZXh0TWFuaXB1bGF0aW9uOmNvbXBsZXRpb246XSk6Cisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4uaDoK
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL19XS1RleHRNYW5pcHVsYXRpb25Ub2tlbi5t
bToKKyAgICAgICAgKC1bX1dLVGV4dE1hbmlwdWxhdGlvblRva2VuIHNldFVzZXJJbmZvOl0pOgor
ICAgICAgICAoLVtfV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4gdXNlckluZm9dKToKKworICAgICAg
ICBBZGQgYSBuZXcgYHVzZXJJbmZvYCBkaWN0aW9uYXJ5IHRvIGBfV0tUZXh0TWFuaXB1bGF0aW9u
VG9rZW5gLCB3aGljaCBjb250YWlucyBzZXZlcmFsIG5hbWVkCisgICAgICAgIGBOU1N0cmluZ2Ag
a2V5cy4KKworICAgICAgICAoLVtfV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4gaXNFcXVhbFRvVGV4
dE1hbmlwdWxhdGlvblRva2VuOmluY2x1ZGluZ0NvbnRlbnRFcXVhbGl0eTpdKToKKyAgICAgICAg
KC1bX1dLVGV4dE1hbmlwdWxhdGlvblRva2VuIF9kZXNjcmlwdGlvblByZXNlcnZpbmdQcml2YWN5
Ol0pOgorCiAyMDIwLTA0LTI4ICBEYXZpZCBLaWx6ZXIgIDxkZGtpbHplckBhcHBsZS5jb20+CiAK
ICAgICAgICAgW01hY0NhdGFseXN0XSBBZGQgbWlzc2luZyBzeW1saW5rcyB0byBXZWJLaXQuZnJh
bWV3b3JrcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0TWFuaXB1bGF0
aW9uQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRNYW5pcHVsYXRp
b25Db250cm9sbGVyLmNwcAppbmRleCA1MGZhZjI4MTMwNDhmN2FjMTZjNGRlNmZjMGZlYWRlYjkx
YjI4M2JhLi5jYTVlNGIwOGY0Y2IzYjE2NmEyNjA0OTViMTY5ZDU0YTlmM2RhN2EyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRNYW5pcHVsYXRpb25Db250cm9sbGVy
LmNwcApAQCAtMjU4LDYgKzI1OCwyMSBAQCBzdGF0aWMgYm9vbCBjb250YWluc09ubHlIVE1MU3Bh
Y2VzKFN0cmluZ1ZpZXcgdGV4dCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorc3RhdGljIE9wdGlv
bmFsPFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpNYW5pcHVsYXRpb25Ub2tlbkluZm8+IHRv
a2VuSW5mbyhSZWZQdHI8Tm9kZT4mJiBub2RlKQoreworICAgIGlmICghbm9kZSkKKyAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpN
YW5pcHVsYXRpb25Ub2tlbkluZm8gcmVzdWx0OworICAgIHJlc3VsdC5kb2N1bWVudFVSTCA9IG5v
ZGUtPmRvY3VtZW50KCkudXJsKCk7CisgICAgaWYgKGF1dG8gZWxlbWVudCA9IG1ha2VSZWZQdHIo
aXM8RWxlbWVudD4obm9kZS5nZXQoKSkgPyBkb3duY2FzdDxFbGVtZW50Pihub2RlLmdldCgpKSA6
IG5vZGUtPnBhcmVudEVsZW1lbnQoKSkpIHsKKyAgICAgICAgcmVzdWx0LnRhZ05hbWUgPSBlbGVt
ZW50LT50YWdOYW1lKCk7CisgICAgICAgIGlmIChlbGVtZW50LT5oYXNBdHRyaWJ1dGVXaXRob3V0
U3luY2hyb25pemF0aW9uKEhUTUxOYW1lczo6cm9sZUF0dHIpKQorICAgICAgICAgICAgcmVzdWx0
LnJvbGVBdHRyaWJ1dGUgPSBlbGVtZW50LT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9u
KEhUTUxOYW1lczo6cm9sZUF0dHIpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCiB2
b2lkIFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpvYnNlcnZlUGFyYWdyYXBocyhjb25zdCBQ
b3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQpCiB7CiAgICAgaWYgKHN0YXJ0Lmlz
TnVsbCgpIHx8IGVuZC5pc051bGwoKSkKQEAgLTMyMSwxMyArMzM2LDEzIEBAIHZvaWQgVGV4dE1h
bmlwdWxhdGlvbkNvbnRyb2xsZXI6Om9ic2VydmVQYXJhZ3JhcGhzKGNvbnN0IFBvc2l0aW9uJiBz
dGFydCwgY29uc3QKICAgICAgICAgICAgICAgICBhdXRvJiBjdXJyZW50RWxlbWVudCA9IGRvd25j
YXN0PEVsZW1lbnQ+KCpjb250ZW50Lm5vZGUpOwogICAgICAgICAgICAgICAgIGlmICghY29udGVu
dC5pc1RleHRDb250ZW50ICYmIGNhblBlcmZvcm1UZXh0TWFuaXB1bGF0aW9uQnlSZXBsYWNpbmdF
bnRpcmVUZXh0Q29udGVudChjdXJyZW50RWxlbWVudCkpIHsKICAgICAgICAgICAgICAgICAgICAg
YWRkSXRlbShNYW5pcHVsYXRpb25JdGVtRGF0YSB7IFBvc2l0aW9uKCksIFBvc2l0aW9uKCksIG1h
a2VXZWFrUHRyKGN1cnJlbnRFbGVtZW50KSwgbnVsbFFOYW1lKCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICB7IE1hbmlwdWxhdGlvblRva2VuIHsgbV90b2tlbklkZW50aWZpZXIuZ2VuZXJhdGUo
KSwgY3VycmVudEVsZW1lbnQudGV4dENvbnRlbnQoKSB9IH0gfSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICB7IE1hbmlwdWxhdGlvblRva2VuIHsgbV90b2tlbklkZW50aWZpZXIuZ2VuZXJhdGUo
KSwgY3VycmVudEVsZW1lbnQudGV4dENvbnRlbnQoKSwgdG9rZW5JbmZvKCZjdXJyZW50RWxlbWVu
dCkgfSB9IH0pOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAoY3VycmVu
dEVsZW1lbnQuaGFzQXR0cmlidXRlcygpKSB7CiAgICAgICAgICAgICAgICAgICAgIGZvciAoYXV0
byYgYXR0cmlidXRlIDogY3VycmVudEVsZW1lbnQuYXR0cmlidXRlc0l0ZXJhdG9yKCkpIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0F0dHJpYnV0ZUZvclRleHRNYW5pcHVsYXRpb24o
YXR0cmlidXRlLm5hbWUoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRJdGVt
KE1hbmlwdWxhdGlvbkl0ZW1EYXRhIHsgUG9zaXRpb24oKSwgUG9zaXRpb24oKSwgbWFrZVdlYWtQ
dHIoY3VycmVudEVsZW1lbnQpLCBhdHRyaWJ1dGUubmFtZSgpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB7IE1hbmlwdWxhdGlvblRva2VuIHsgbV90b2tlbklkZW50aWZpZXIuZ2Vu
ZXJhdGUoKSwgYXR0cmlidXRlLnZhbHVlKCkgfSB9IH0pOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB7IE1hbmlwdWxhdGlvblRva2VuIHsgbV90b2tlbklkZW50aWZpZXIuZ2VuZXJh
dGUoKSwgYXR0cmlidXRlLnZhbHVlKCksIHRva2VuSW5mbygmY3VycmVudEVsZW1lbnQpIH0gfSB9
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIH0KQEAgLTM0Niw3ICszNjEsNyBAQCB2b2lkIFRleHRNYW5pcHVsYXRpb25D
b250cm9sbGVyOjpvYnNlcnZlUGFyYWdyYXBocyhjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0
CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgICAgIGVuZE9mQ3VycmVudFBh
cmFncmFwaCA9IGN1cnJlbnRFbmRPZkN1cnJlbnRQYXJhZ3JhcGg7Ci0gICAgICAgICAgICB0b2tl
bnNJbkN1cnJlbnRQYXJhZ3JhcGguYXBwZW5kKE1hbmlwdWxhdGlvblRva2VuIHsgbV90b2tlbklk
ZW50aWZpZXIuZ2VuZXJhdGUoKSwgIltdIiwgdHJ1ZSB9KTsKKyAgICAgICAgICAgIHRva2Vuc0lu
Q3VycmVudFBhcmFncmFwaC5hcHBlbmQoTWFuaXB1bGF0aW9uVG9rZW4geyBtX3Rva2VuSWRlbnRp
Zmllci5nZW5lcmF0ZSgpLCAiW10iLCB0b2tlbkluZm8oY29udGVudC5ub2RlLmdldCgpKSwgdHJ1
ZSB9KTsKIAogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KQEAgLTM2NSw3ICszODAs
NyBAQCB2b2lkIFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpvYnNlcnZlUGFyYWdyYXBocyhj
b25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0CiAgICAgICAgICAgICAgICAgaWYgKHRva2Vuc0lu
Q3VycmVudFBhcmFncmFwaC5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgICAgIHN0YXJ0T2ZD
dXJyZW50UGFyYWdyYXBoID0gUG9zaXRpb24oJnRleHROb2RlLCBzdGFydE9mQ3VycmVudExpbmUp
OwogCi0gICAgICAgICAgICAgICAgdG9rZW5zSW5DdXJyZW50UGFyYWdyYXBoLmFwcGVuZChNYW5p
cHVsYXRpb25Ub2tlbiB7IG1fdG9rZW5JZGVudGlmaWVyLmdlbmVyYXRlKCksIHN0cmluZ1VudGls
RW5kT2ZMaW5lLCBleGNsdXNpb25SdWxlTWF0Y2hlci5pc0V4Y2x1ZGVkKGNvbnRlbnQubm9kZS5n
ZXQoKSkgfSk7CisgICAgICAgICAgICAgICAgdG9rZW5zSW5DdXJyZW50UGFyYWdyYXBoLmFwcGVu
ZChNYW5pcHVsYXRpb25Ub2tlbiB7IG1fdG9rZW5JZGVudGlmaWVyLmdlbmVyYXRlKCksIHN0cmlu
Z1VudGlsRW5kT2ZMaW5lLCB0b2tlbkluZm8oJnRleHROb2RlKSwgZXhjbHVzaW9uUnVsZU1hdGNo
ZXIuaXNFeGNsdWRlZChjb250ZW50Lm5vZGUuZ2V0KCkpIH0pOwogICAgICAgICAgICAgfQogCiAg
ICAgICAgICAgICBpZiAoIXRva2Vuc0luQ3VycmVudFBhcmFncmFwaC5pc0VtcHR5KCkpIHsKQEAg
LTM4NSw3ICs0MDAsNyBAQCB2b2lkIFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpvYnNlcnZl
UGFyYWdyYXBocyhjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0CiAgICAgICAgICAgICAgICAg
ICAgIHN0YXJ0T2ZDdXJyZW50UGFyYWdyYXBoID0gaXRlcmF0b3Iuc3RhcnRQb3NpdGlvbigpOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgZW5kT2ZDdXJyZW50UGFyYWdyYXBoID0gaXRlcmF0
b3IuZW5kUG9zaXRpb24oKTsKLSAgICAgICAgICAgIHRva2Vuc0luQ3VycmVudFBhcmFncmFwaC5h
cHBlbmQoTWFuaXB1bGF0aW9uVG9rZW4geyBtX3Rva2VuSWRlbnRpZmllci5nZW5lcmF0ZSgpLCBy
ZW1haW5pbmdUZXh0LnRvU3RyaW5nKCksIGV4Y2x1c2lvblJ1bGVNYXRjaGVyLmlzRXhjbHVkZWQo
Y29udGVudC5ub2RlLmdldCgpKSB9KTsKKyAgICAgICAgICAgIHRva2Vuc0luQ3VycmVudFBhcmFn
cmFwaC5hcHBlbmQoTWFuaXB1bGF0aW9uVG9rZW4geyBtX3Rva2VuSWRlbnRpZmllci5nZW5lcmF0
ZSgpLCByZW1haW5pbmdUZXh0LnRvU3RyaW5nKCksIHRva2VuSW5mbyhjb250ZW50Lm5vZGUuZ2V0
KCkpLCBleGNsdXNpb25SdWxlTWF0Y2hlci5pc0V4Y2x1ZGVkKGNvbnRlbnQubm9kZS5nZXQoKSkg
fSk7CiAgICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuaAppbmRleCBjN2NkODY0OTU3NzFjNjgzOTM4Zjk1
NzQxZTM1Njg4YTg0ZTkyZWVmLi5iNWQzYTY5ZDBmZjkxZGY3MmUwZTU5YTA2NWM1N2QwYzVhNzYy
NjkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRNYW5pcHVsYXRpb25D
b250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9u
Q29udHJvbGxlci5oCkBAIC00OCw5ICs0OCwxOSBAQCBwdWJsaWM6CiAgICAgZW51bSBUb2tlbklk
ZW50aWZpZXJUeXBlIHsgfTsKICAgICB1c2luZyBUb2tlbklkZW50aWZpZXIgPSBPYmplY3RJZGVu
dGlmaWVyPFRva2VuSWRlbnRpZmllclR5cGU+OwogCisgICAgc3RydWN0IE1hbmlwdWxhdGlvblRv
a2VuSW5mbyB7CisgICAgICAgIFN0cmluZyB0YWdOYW1lOworICAgICAgICBTdHJpbmcgcm9sZUF0
dHJpYnV0ZTsKKyAgICAgICAgVVJMIGRvY3VtZW50VVJMOworCisgICAgICAgIHRlbXBsYXRlPGNs
YXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICAgICAgdGVtcGxh
dGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPE1hbmlwdWxhdGlvblRva2VuSW5mbz4g
ZGVjb2RlKERlY29kZXImKTsKKyAgICB9OworCiAgICAgc3RydWN0IE1hbmlwdWxhdGlvblRva2Vu
IHsKICAgICAgICAgVG9rZW5JZGVudGlmaWVyIGlkZW50aWZpZXI7CiAgICAgICAgIFN0cmluZyBj
b250ZW50OworICAgICAgICBPcHRpb25hbDxNYW5pcHVsYXRpb25Ub2tlbkluZm8+IGluZm87CiAg
ICAgICAgIGJvb2wgaXNFeGNsdWRlZCB7IGZhbHNlIH07CiAKICAgICAgICAgdGVtcGxhdGU8Y2xh
c3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwpAQCAtMTU3LDEwICsxNjcs
MzQgQEAgcHJpdmF0ZToKICAgICBUb2tlbklkZW50aWZpZXIgbV90b2tlbklkZW50aWZpZXI7CiB9
OwogCit0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgordm9pZCBUZXh0TWFuaXB1bGF0aW9uQ29udHJv
bGxlcjo6TWFuaXB1bGF0aW9uVG9rZW5JbmZvOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29u
c3QKK3sKKyAgICBlbmNvZGVyIDw8IHRhZ05hbWU7CisgICAgZW5jb2RlciA8PCByb2xlQXR0cmli
dXRlOworICAgIGVuY29kZXIgPDwgZG9jdW1lbnRVUkw7Cit9CisKK3RlbXBsYXRlPGNsYXNzIERl
Y29kZXI+CitPcHRpb25hbDxUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9u
VG9rZW5JbmZvPiBUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9uVG9rZW5J
bmZvOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBNYW5pcHVsYXRpb25Ub2tlbklu
Zm8gcmVzdWx0OworICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnRhZ05hbWUpKQorICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1
bHQucm9sZUF0dHJpYnV0ZSkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5kb2N1bWVudFVSTCkpCisgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiB0ZW1wbGF0ZTxjbGFzcyBF
bmNvZGVyPgogdm9pZCBUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9uVG9r
ZW46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogewotICAgIGVuY29kZXIgPDwgaWRl
bnRpZmllciA8PCBjb250ZW50IDw8IGlzRXhjbHVkZWQ7CisgICAgZW5jb2RlciA8PCBpZGVudGlm
aWVyIDw8IGNvbnRlbnQgPDwgaW5mbyA8PCBpc0V4Y2x1ZGVkOwogfQogCiB0ZW1wbGF0ZTxjbGFz
cyBEZWNvZGVyPgpAQCAtMTcxLDYgKzIwNSw4IEBAIE9wdGlvbmFsPFRleHRNYW5pcHVsYXRpb25D
b250cm9sbGVyOjpNYW5pcHVsYXRpb25Ub2tlbj4gVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsCiAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1
bHQuY29udGVudCkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZShyZXN1bHQuaW5mbykpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAg
ICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuaXNFeGNsdWRlZCkpCiAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAgICAgcmV0dXJuIHJlc3VsdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCmluZGV4IDg4Yzk1ZGRlY2ZkNDY4ZWNjMzU4
ZjZlYmM1ODlkZWQ2YTA5ZDU1MzguLjBlNmM3MzI2OGI4ZGQ2YmMwYjFjY2E4NDZiNmZlMGZhZjA0
OTQwZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dl
YlZpZXcubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmll
dy5tbQpAQCAtMTYwNiw2ICsxNjA2LDIyIEBAIC0gKHZvaWQpX3NldFRleHRNYW5pcHVsYXRpb25E
ZWxlZ2F0ZTooaWQgPF9XS1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZT4pZGVsZWdhdGUKICAgICBf
dGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlID0gZGVsZWdhdGU7CiB9CiAKK3N0YXRpYyBSZXRhaW5Q
dHI8TlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPj4gY3JlYXRlVXNlckluZm8oY29uc3QgT3B0
aW9uYWw8V2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Ok1hbmlwdWxhdGlvblRv
a2VuSW5mbz4mIGluZm8pCit7CisgICAgaWYgKCFpbmZvKQorICAgICAgICByZXR1cm4geyB9Owor
CisgICAgYXV0byByZXN1bHQgPSBhZG9wdE5TKFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10g
aW5pdFdpdGhDYXBhY2l0eTozXSk7CisgICAgaWYgKCFpbmZvLT5kb2N1bWVudFVSTC5pc051bGwo
KSkKKyAgICAgICAgW3Jlc3VsdCBzZXRPYmplY3Q6KE5TVVJMICopaW5mby0+ZG9jdW1lbnRVUkwg
Zm9yS2V5Ol9XS1RleHRNYW5pcHVsYXRpb25Ub2tlblVzZXJJbmZvRG9jdW1lbnRVUkxLZXldOwor
ICAgIGlmICghIWluZm8tPnRhZ05hbWUpCisgICAgICAgIFtyZXN1bHQgc2V0T2JqZWN0OihOU1N0
cmluZyAqKWluZm8tPnRhZ05hbWUgZm9yS2V5Ol9XS1RleHRNYW5pcHVsYXRpb25Ub2tlblVzZXJJ
bmZvVGFnTmFtZUtleV07CisgICAgaWYgKCEhaW5mby0+cm9sZUF0dHJpYnV0ZSkKKyAgICAgICAg
W3Jlc3VsdCBzZXRPYmplY3Q6KE5TU3RyaW5nICopaW5mby0+cm9sZUF0dHJpYnV0ZSBmb3JLZXk6
X1dLVGV4dE1hbmlwdWxhdGlvblRva2VuVXNlckluZm9Sb2xlQXR0cmlidXRlS2V5XTsKKworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKIC0gKHZvaWQpX3N0YXJ0VGV4dE1hbmlwdWxhdGlvbnNXaXRo
Q29uZmlndXJhdGlvbjooX1dLVGV4dE1hbmlwdWxhdGlvbkNvbmZpZ3VyYXRpb24gKiljb25maWd1
cmF0aW9uIGNvbXBsZXRpb246KHZvaWQoXikoKSljb21wbGV0aW9uSGFuZGxlcgogewogICAgIHVz
aW5nIEV4Y2x1c2lvblJ1bGUgPSBXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6
RXhjbHVzaW9uUnVsZTsKQEAgLTE2NDMsNiArMTY1OSw3IEBAIC0gKHZvaWQpX3N0YXJ0VGV4dE1h
bmlwdWxhdGlvbnNXaXRoQ29uZmlndXJhdGlvbjooX1dLVGV4dE1hbmlwdWxhdGlvbkNvbmZpZ3Vy
YXRpCiAgICAgICAgICAgICAgICAgW3drVG9rZW4gc2V0SWRlbnRpZmllcjpTdHJpbmc6Om51bWJl
cih0b2tlbi5pZGVudGlmaWVyLnRvVUludDY0KCkpXTsKICAgICAgICAgICAgICAgICBbd2tUb2tl
biBzZXRDb250ZW50OnRva2VuLmNvbnRlbnRdOwogICAgICAgICAgICAgICAgIFt3a1Rva2VuIHNl
dEV4Y2x1ZGVkOnRva2VuLmlzRXhjbHVkZWRdOworICAgICAgICAgICAgICAgIFt3a1Rva2VuIHNl
dFVzZXJJbmZvOmNyZWF0ZVVzZXJJbmZvKHRva2VuLmluZm8pLmF1dG9yZWxlYXNlKCldOwogICAg
ICAgICAgICAgICAgIHJldHVybiB3a1Rva2VuOwogICAgICAgICAgICAgfSk7CiAgICAgICAgICAg
ICByZXR1cm4gYWRvcHROUyhbW19XS1RleHRNYW5pcHVsYXRpb25JdGVtIGFsbG9jXSBpbml0V2l0
aElkZW50aWZpZXI6U3RyaW5nOjpudW1iZXIoaXRlbS5pZGVudGlmaWVyLnRvVUludDY0KCkpIHRv
a2Vuczp0b2tlbnMuZ2V0KCldKTsKQEAgLTE2ODAsNyArMTY5Nyw3IEBAIC0gKHZvaWQpX2NvbXBs
ZXRlVGV4dE1hbmlwdWxhdGlvbjooX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0gKilpdGVtIGNvbXBs
ZXRpb246KHZvCiAKICAgICBWZWN0b3I8V2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xs
ZXI6Ok1hbmlwdWxhdGlvblRva2VuPiB0b2tlbnM7CiAgICAgZm9yIChfV0tUZXh0TWFuaXB1bGF0
aW9uVG9rZW4gKndrVG9rZW4gaW4gaXRlbS50b2tlbnMpCi0gICAgICAgIHRva2Vucy5hcHBlbmQo
V2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Ok1hbmlwdWxhdGlvblRva2VuIHsg
Y29yZVRleHRNYW5pcHVsYXRpb25Ub2tlbklkZW50aWZpZXJGcm9tU3RyaW5nKHdrVG9rZW4uaWRl
bnRpZmllciksIHdrVG9rZW4uY29udGVudCB9KTsKKyAgICAgICAgdG9rZW5zLmFwcGVuZChXZWJD
b3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9uVG9rZW4geyBjb3Jl
VGV4dE1hbmlwdWxhdGlvblRva2VuSWRlbnRpZmllckZyb21TdHJpbmcod2tUb2tlbi5pZGVudGlm
aWVyKSwgd2tUb2tlbi5jb250ZW50LCBXVEY6Om51bGxvcHQgfSk7CiAKICAgICBWZWN0b3I8V2Vi
Q29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Ok1hbmlwdWxhdGlvbkl0ZW0+IGNvcmVJ
dGVtczsKICAgICBjb3JlSXRlbXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSgxKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tUZXh0TWFuaXB1bGF0aW9u
VG9rZW4uaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tUZXh0TWFuaXB1
bGF0aW9uVG9rZW4uaAppbmRleCAxZjJlODZmMmI2ODY4OGMyMzFjNDAyNTY5Yjg3MjM4YTczNjE2
YWQ2Li41ZjkyNTY2OTg5YWZhYmFhMDgzNmJmMmRiM2Y1ZDQ3OGRlNWI0MDBlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVGV4dE1hbmlwdWxhdGlvblRv
a2VuLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1RleHRNYW5p
cHVsYXRpb25Ub2tlbi5oCkBAIC0yOCw2ICsyOCwxMCBAQAogCiBOU19BU1NVTUVfTk9OTlVMTF9C
RUdJTgogCitXS19FWFRFUk4gTlNTdHJpbmcgKiBjb25zdCBfV0tUZXh0TWFuaXB1bGF0aW9uVG9r
ZW5Vc2VySW5mb0RvY3VtZW50VVJMS2V5IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RC
QSksIGlvcyhXS19JT1NfVEJBKSk7CitXS19FWFRFUk4gTlNTdHJpbmcgKiBjb25zdCBfV0tUZXh0
TWFuaXB1bGF0aW9uVG9rZW5Vc2VySW5mb1RhZ05hbWVLZXkgV0tfQVBJX0FWQUlMQUJMRShtYWNv
cyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKK1dLX0VYVEVSTiBOU1N0cmluZyAqIGNv
bnN0IF9XS1RleHRNYW5pcHVsYXRpb25Ub2tlblVzZXJJbmZvUm9sZUF0dHJpYnV0ZUtleSBXS19B
UElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOworCiBXS19D
TEFTU19BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSkKIEBpbnRl
cmZhY2UgX1dLVGV4dE1hbmlwdWxhdGlvblRva2VuIDogTlNPYmplY3QKIApAQCAtMzgsNiArNDIs
OCBAQCBXS19DTEFTU19BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJB
KSkKIC0gKEJPT0wpaXNFcXVhbFRvVGV4dE1hbmlwdWxhdGlvblRva2VuOihudWxsYWJsZSBfV0tU
ZXh0TWFuaXB1bGF0aW9uVG9rZW4gKilvdGhlclRva2VuIGluY2x1ZGluZ0NvbnRlbnRFcXVhbGl0
eTooQk9PTClpbmNsdWRpbmdDb250ZW50RXF1YWxpdHk7CiBAcHJvcGVydHkgKG5vbmF0b21pYywg
Y29weSwgcmVhZG9ubHkpIE5TU3RyaW5nICpkZWJ1Z0Rlc2NyaXB0aW9uOwogCitAcHJvcGVydHkg
KG5vbmF0b21pYywgbnVsbGFibGUsIGNvcHkpIE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4g
KnVzZXJJbmZvOworCiBAZW5kCiAKIE5TX0FTU1VNRV9OT05OVUxMX0VORApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1RleHRNYW5pcHVsYXRpb25Ub2tl
bi5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tUZXh0TWFuaXB1bGF0
aW9uVG9rZW4ubW0KaW5kZXggMTkyMzAwNDkzODgxODZmOWVhMWRmNDljMTlmZjJiNTQwZWJmNmM2
YS4uODFiZTJmMjYwNjA3YWI3NWUxZjNhMjY1OGE5ZmMwYWYxMjc3ZDM5MSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1RleHRNYW5pcHVsYXRpb25Ub2tl
bi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVGV4dE1hbmlw
dWxhdGlvblRva2VuLm1tCkBAIC0yNiw3ICsyNiwxNSBAQAogI2ltcG9ydCAiY29uZmlnLmgiCiAj
aW1wb3J0ICJfV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4uaCIKIAotQGltcGxlbWVudGF0aW9uIF9X
S1RleHRNYW5pcHVsYXRpb25Ub2tlbgorI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgorCitOU1N0
cmluZyAqIGNvbnN0IF9XS1RleHRNYW5pcHVsYXRpb25Ub2tlblVzZXJJbmZvRG9jdW1lbnRVUkxL
ZXkgPSBAIl9XS1RleHRNYW5pcHVsYXRpb25Ub2tlblVzZXJJbmZvRG9jdW1lbnRVUkxLZXkiOwor
TlNTdHJpbmcgKiBjb25zdCBfV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW5Vc2VySW5mb1RhZ05hbWVL
ZXkgPSBAIl9XS1RleHRNYW5pcHVsYXRpb25Ub2tlblVzZXJJbmZvVGFnTmFtZUtleSI7CitOU1N0
cmluZyAqIGNvbnN0IF9XS1RleHRNYW5pcHVsYXRpb25Ub2tlblVzZXJJbmZvUm9sZUF0dHJpYnV0
ZUtleSA9IEAiX1dLVGV4dE1hbmlwdWxhdGlvblRva2VuVXNlckluZm9Sb2xlQXR0cmlidXRlS2V5
IjsKKworQGltcGxlbWVudGF0aW9uIF9XS1RleHRNYW5pcHVsYXRpb25Ub2tlbiB7CisgICAgUmV0
YWluUHRyPE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4+IF91c2VySW5mbzsKK30KIAogLSAo
dm9pZClkZWFsbG9jCiB7CkBAIC0zOCw2ICs0NiwxOSBAQCAtICh2b2lkKWRlYWxsb2MKICAgICBb
c3VwZXIgZGVhbGxvY107CiB9CiAKKy0gKHZvaWQpc2V0VXNlckluZm86KE5TRGljdGlvbmFyeTxO
U1N0cmluZyAqLCBpZD4gKil1c2VySW5mbworeworICAgIGlmICh1c2VySW5mbyA9PSBfdXNlcklu
Zm8gfHwgW191c2VySW5mbyBpc0VxdWFsOnVzZXJJbmZvXSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgX3VzZXJJbmZvID0gYWRvcHROUyh1c2VySW5mby5jb3B5KTsKK30KKworLSAoTlNEaWN0aW9u
YXJ5PE5TU3RyaW5nICosIGlkPiAqKXVzZXJJbmZvCit7CisgICAgcmV0dXJuIF91c2VySW5mby5n
ZXQoKTsKK30KKwogc3RhdGljIEJPT0wgaXNFcXVhbE9yQm90aE5pbChpZCBhLCBpZCBiKQogewog
ICAgIGlmIChhID09IGIpCkBAIC02NSw4ICs4Niw5IEBAIC0gKEJPT0wpaXNFcXVhbFRvVGV4dE1h
bmlwdWxhdGlvblRva2VuOihfV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4gKilvdGhlclRva2VuIGlu
CiAgICAgQk9PTCBlcXVhbElkZW50aWZpZXJzID0gaXNFcXVhbE9yQm90aE5pbChzZWxmLmlkZW50
aWZpZXIsIG90aGVyVG9rZW4uaWRlbnRpZmllcik7CiAgICAgQk9PTCBlcXVhbEV4Y2x1c2lvbiA9
IHNlbGYuaXNFeGNsdWRlZCA9PSBvdGhlclRva2VuLmlzRXhjbHVkZWQ7CiAgICAgQk9PTCBlcXVh
bENvbnRlbnQgPSAhaW5jbHVkaW5nQ29udGVudEVxdWFsaXR5IHx8IGlzRXF1YWxPckJvdGhOaWwo
c2VsZi5jb250ZW50LCBvdGhlclRva2VuLmNvbnRlbnQpOworICAgIEJPT0wgZXF1YWxVc2VySW5m
byA9IGlzRXF1YWxPckJvdGhOaWwoc2VsZi51c2VySW5mbywgb3RoZXJUb2tlbi51c2VySW5mbyk7
CiAKLSAgICByZXR1cm4gZXF1YWxJZGVudGlmaWVycyAmJiBlcXVhbEV4Y2x1c2lvbiAmJiBlcXVh
bENvbnRlbnQ7CisgICAgcmV0dXJuIGVxdWFsSWRlbnRpZmllcnMgJiYgZXF1YWxFeGNsdXNpb24g
JiYgZXF1YWxDb250ZW50ICYmIGVxdWFsVXNlckluZm87CiB9CiAKIC0gKE5TU3RyaW5nICopZGVz
Y3JpcHRpb24KQEAgLTg1LDcgKzEwNyw3IEBAIC0gKE5TU3RyaW5nICopX2Rlc2NyaXB0aW9uUHJl
c2VydmluZ1ByaXZhY3k6KEJPT0wpcHJlc2VydmVQcml2YWN5CiAgICAgaWYgKHByZXNlcnZlUHJp
dmFjeSkKICAgICAgICAgW2Rlc2NyaXB0aW9uIGFwcGVuZEZvcm1hdDpAIjsgY29udGVudCBsZW5n
dGggPSAlbHUiLCAodW5zaWduZWQgbG9uZylzZWxmLmNvbnRlbnQubGVuZ3RoXTsKICAgICBlbHNl
Ci0gICAgICAgIFtkZXNjcmlwdGlvbiBhcHBlbmRGb3JtYXQ6QCI7IGNvbnRlbnQgPSAlQCIsIHNl
bGYuY29udGVudF07CisgICAgICAgIFtkZXNjcmlwdGlvbiBhcHBlbmRGb3JtYXQ6QCI7IGNvbnRl
bnQgPSAlQDsgdXNlciBpbmZvID0gJUAiLCBzZWxmLmNvbnRlbnQsIHNlbGYudXNlckluZm9dOwog
CiAgICAgW2Rlc2NyaXB0aW9uIGFwcGVuZFN0cmluZzpAIj4iXTsKIApkaWZmIC0tZ2l0IGEvVG9v
bHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGQ2MTViMmFmNWI3MjFhM2EzYmI4
NzBjYjY1MGYwYmI3YzE0N2UzZGQuLmRkYjQzNjM0NDJhZGU5OTc4MDI4OTViOTlkYjMwYjMwMmIz
ZjkzYzQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxNSBAQAorMjAyMC0wNC0yOCAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVo
QGFwcGxlLmNvbT4KKworICAgICAgICBbVGV4dCBtYW5pcHVsYXRpb25dIEFkZCBhIHVzZXJJbmZv
IGRpY3Rpb25hcnkgdG8gX1dLVGV4dE1hbmlwdWxhdGlvblRva2VuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTExNTEKKyAgICAgICAgPHJkYXI6Ly9w
cm9ibGVtLzYyMzI5NTM0PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEFkZCBhIG5ldyBBUEkgdGVzdCB0byBjaGVjayB0aGUgdXNlckluZm8gZGljdGlv
bmFyeSBvbiB0ZXh0IG1hbmlwdWxhdGlvbiB0b2tlbnMuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL1RleHRNYW5pcHVsYXRpb24ubW06CisKIDIwMjAtMDQtMjgg
IEthdGUgQ2hlbmV5ICA8a2F0aGVyaW5lX2NoZW5leUBhcHBsZS5jb20+CiAKICAgICAgICAgQ3Jl
YXRlIGEgbWVjaGFuaXNtIHRvIGFkZCBtaXNzaW5nIElUUCBEYXRhYmFzZSB0YWJsZXMgd2hlbiB0
aGUgc2NoZW1hIGlzIHVwZGF0ZWQKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvVGV4dE1hbmlwdWxhdGlvbi5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvVGV4dE1hbmlwdWxhdGlvbi5tbQppbmRleCAzNGNkZjlhZGRkYWQz
YzgzZmQyYTcxMzE1MzJmNDhmNmNkMzIxMmQyLi4zMWNmMWNhZmEwZjU1ZDU0ODI2NzViYjdiZGRi
YjJkYTQ2MjdkZGE4IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL1RleHRNYW5pcHVsYXRpb24ubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9UZXh0TWFuaXB1bGF0aW9uLm1tCkBAIC03MDQsNiArNzA0LDU5IEBAIFRF
U1QoVGV4dE1hbmlwdWxhdGlvbiwgU3RhcnRUZXh0TWFuaXB1bGF0aW9uVHJlYXRzTGlua3NJbk5h
dmlnYXRpb25FbGVtZW50c0FzUGFyCiAgICAgRVhQRUNUX1dLX1NUUkVRKCJHYXJwbHkiLCBpdGVt
c1szXS50b2tlbnNbMF0uY29udGVudCk7CiB9CiAKK1RFU1QoVGV4dE1hbmlwdWxhdGlvbiwgU3Rh
cnRUZXh0TWFuaXB1bGF0aW9uRXh0cmFjdHNVc2VySW5mbykKK3sKKyAgICBhdXRvIGRlbGVnYXRl
ID0gYWRvcHROUyhbW1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOworICAg
IGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZy
YW1lOk5TTWFrZVJlY3QoMCwgMCwgNDAwLCA0MDApXSk7CisgICAgW3dlYlZpZXcgX3NldFRleHRN
YW5pcHVsYXRpb25EZWxlZ2F0ZTpkZWxlZ2F0ZS5nZXQoKV07CisKKyAgICBbd2ViVmlldyBzeW5j
aHJvbm91c2x5TG9hZEhUTUxTdHJpbmc6QCI8IURPQ1RZUEUgaHRtbD4iCisgICAgICAgICI8Ym9k
eT4iCisgICAgICAgICIgICAgPHRpdGxlPlRoaXMgaXMgYSB0ZXN0PC90aXRsZT4iCisgICAgICAg
ICIgICAgPHA+Rmlyc3Q8L3A+IgorICAgICAgICAiICAgIDxkaXYgcm9sZT0nYnV0dG9uJz5TZWNv
bmQ8L2Rpdj4iCisgICAgICAgICIgICAgPHNwYW4+VGhpcmQ8L3NwYW4+IgorICAgICAgICAiPC9i
b2R5PiJdOworCisgICAgZG9uZSA9IGZhbHNlOworICAgIFt3ZWJWaWV3IF9zdGFydFRleHRNYW5p
cHVsYXRpb25zV2l0aENvbmZpZ3VyYXRpb246bmlsIGNvbXBsZXRpb246XnsKKyAgICAgICAgZG9u
ZSA9IHRydWU7CisgICAgfV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsK
KworICAgIGF1dG8gaXRlbXMgPSBbZGVsZWdhdGUgaXRlbXNdOworICAgIEVYUEVDVF9FUShpdGVt
cy5jb3VudCwgNFVMKTsKKyAgICBFWFBFQ1RfRVEoaXRlbXNbMF0udG9rZW5zLmNvdW50LCAxVUwp
OworICAgIEVYUEVDVF9FUShpdGVtc1sxXS50b2tlbnMuY291bnQsIDFVTCk7CisgICAgRVhQRUNU
X0VRKGl0ZW1zWzJdLnRva2Vucy5jb3VudCwgMVVMKTsKKyAgICBFWFBFQ1RfRVEoaXRlbXNbM10u
dG9rZW5zLmNvdW50LCAxVUwpOworICAgIEVYUEVDVF9XS19TVFJFUSgiVGhpcyBpcyBhIHRlc3Qi
LCBpdGVtc1swXS50b2tlbnNbMF0uY29udGVudCk7CisgICAgRVhQRUNUX1dLX1NUUkVRKCJGaXJz
dCIsIGl0ZW1zWzFdLnRva2Vuc1swXS5jb250ZW50KTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoIlNl
Y29uZCIsIGl0ZW1zWzJdLnRva2Vuc1swXS5jb250ZW50KTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEo
IlRoaXJkIiwgaXRlbXNbM10udG9rZW5zWzBdLmNvbnRlbnQpOworICAgIHsKKyAgICAgICAgYXV0
byB1c2VySW5mbyA9IGl0ZW1zWzBdLnRva2Vuc1swXS51c2VySW5mbzsKKyAgICAgICAgRVhQRUNU
X1dLX1NUUkVRKCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyIsIFsoTlNVUkwgKil1c2VySW5mb1tf
V0tUZXh0TWFuaXB1bGF0aW9uVG9rZW5Vc2VySW5mb0RvY3VtZW50VVJMS2V5XSBsYXN0UGF0aENv
bXBvbmVudF0pOworICAgICAgICBFWFBFQ1RfV0tfU1RSRVEoIlRJVExFIiwgKE5TU3RyaW5nICop
dXNlckluZm9bX1dLVGV4dE1hbmlwdWxhdGlvblRva2VuVXNlckluZm9UYWdOYW1lS2V5XSk7Cisg
ICAgfQorICAgIHsKKyAgICAgICAgYXV0byB1c2VySW5mbyA9IGl0ZW1zWzFdLnRva2Vuc1swXS51
c2VySW5mbzsKKyAgICAgICAgRVhQRUNUX1dLX1NUUkVRKCJUZXN0V2ViS2l0QVBJLnJlc291cmNl
cyIsIFsoTlNVUkwgKil1c2VySW5mb1tfV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW5Vc2VySW5mb0Rv
Y3VtZW50VVJMS2V5XSBsYXN0UGF0aENvbXBvbmVudF0pOworICAgICAgICBFWFBFQ1RfV0tfU1RS
RVEoIlAiLCAoTlNTdHJpbmcgKil1c2VySW5mb1tfV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW5Vc2Vy
SW5mb1RhZ05hbWVLZXldKTsKKyAgICB9CisgICAgeworICAgICAgICBhdXRvIHVzZXJJbmZvID0g
aXRlbXNbMl0udG9rZW5zWzBdLnVzZXJJbmZvOworICAgICAgICBFWFBFQ1RfV0tfU1RSRVEoIlRl
c3RXZWJLaXRBUEkucmVzb3VyY2VzIiwgWyhOU1VSTCAqKXVzZXJJbmZvW19XS1RleHRNYW5pcHVs
YXRpb25Ub2tlblVzZXJJbmZvRG9jdW1lbnRVUkxLZXldIGxhc3RQYXRoQ29tcG9uZW50XSk7Cisg
ICAgICAgIEVYUEVDVF9XS19TVFJFUSgiRElWIiwgKE5TU3RyaW5nICopdXNlckluZm9bX1dLVGV4
dE1hbmlwdWxhdGlvblRva2VuVXNlckluZm9UYWdOYW1lS2V5XSk7CisgICAgICAgIEVYUEVDVF9X
S19TVFJFUSgiYnV0dG9uIiwgKE5TU3RyaW5nICopdXNlckluZm9bX1dLVGV4dE1hbmlwdWxhdGlv
blRva2VuVXNlckluZm9Sb2xlQXR0cmlidXRlS2V5XSk7CisgICAgfQorICAgIHsKKyAgICAgICAg
YXV0byB1c2VySW5mbyA9IGl0ZW1zWzNdLnRva2Vuc1swXS51c2VySW5mbzsKKyAgICAgICAgRVhQ
RUNUX1dLX1NUUkVRKCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyIsIFsoTlNVUkwgKil1c2VySW5m
b1tfV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW5Vc2VySW5mb0RvY3VtZW50VVJMS2V5XSBsYXN0UGF0
aENvbXBvbmVudF0pOworICAgICAgICBFWFBFQ1RfV0tfU1RSRVEoIlNQQU4iLCAoTlNTdHJpbmcg
Kil1c2VySW5mb1tfV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW5Vc2VySW5mb1RhZ05hbWVLZXldKTsK
KyAgICB9Cit9CisKIHN0cnVjdCBUb2tlbiB7CiAgICAgTlNTdHJpbmcgKmlkZW50aWZpZXI7CiAg
ICAgTlNTdHJpbmcgKmNvbnRlbnQ7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>397907</attachid>
            <date>2020-04-28 16:58:33 -0700</date>
            <delta_ts>2020-04-28 19:08:12 -0700</delta_ts>
            <desc>Build fix for non-internal SDKs (2)</desc>
            <filename>bug-211151-20200428165832.patch</filename>
            <type>text/plain</type>
            <size>21103</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwODQzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjViM2MxYjE0OGE5MmM2
Yzg2ZDQ5NmRiNWUwNmJjNWMxNjAxNGRhMC4uMzJjOWY2OGQ1OGM5N2JlODQwODBlOThlMDhlNGZm
MTEwZjQwNzY1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDIwLTA0LTI4ICBXZW5z
b24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIFtUZXh0IG1hbmlw
dWxhdGlvbl0gQWRkIGEgdXNlckluZm8gZGljdGlvbmFyeSB0byBfV0tUZXh0TWFuaXB1bGF0aW9u
VG9rZW4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIx
MTE1MQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNjIzMjk1MzQ+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGFuIGV4dGVuc2libGUgbWVjaGFu
aXNtIGZvciB0aGUgdGV4dCBtYW5pcHVsYXRpb24gY29udHJvbGxlciB0byBzZW5kIGFkZGl0aW9u
YWwKKyAgICAgICAgbWV0YWRhdGEgZm9yIGVhY2ggdGV4dCBtYW5pcHVsYXRpb24gdG9rZW4gdGhy
b3VnaCB0byB0aGUgV2ViS2l0IGNsaWVudCwgZm9yIGRlYnVnZ2luZworICAgICAgICBwdXJwb3Nl
cy4KKworICAgICAgICBUZXN0OiBUZXh0TWFuaXB1bGF0aW9uLlN0YXJ0VGV4dE1hbmlwdWxhdGlv
bkV4dHJhY3RzVXNlckluZm8KKworICAgICAgICAqIGVkaXRpbmcvVGV4dE1hbmlwdWxhdGlvbkNv
bnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9rZW5JbmZvKToKKyAgICAgICAgKFdl
YkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpvYnNlcnZlUGFyYWdyYXBocyk6Cisg
ICAgICAgICogZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5oOgorCisgICAgICAg
IEFkZCBUZXh0TWFuaXB1bGF0aW9uVG9rZW5JbmZvLCBhbmQgYWRkIGFuIG9wdGlvbmFsIFRleHRN
YW5pcHVsYXRpb25Ub2tlbkluZm8gbWVtYmVyIHRvCisgICAgICAgIFRleHRNYW5pcHVsYXRpb25U
b2tlbi4gRm9yIG5vdywganVzdCBzZW5kIG92ZXIgdGhlIGRvY3VtZW50IFVSTCwgZWxlbWVudCB0
YWcgbmFtZSwgYW5kCisgICAgICAgIHRoZSB2YWx1ZSBvZiB0aGUgcm9sZSBhdHRyaWJ1dGUuCisK
KyAgICAgICAgKFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpNYW5pcHVsYXRp
b25Ub2tlbkluZm86OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0TWFuaXB1
bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9uVG9rZW5JbmZvOjpkZWNvZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Ok1hbmlwdWxhdGlvblRva2Vu
OjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRy
b2xsZXI6Ok1hbmlwdWxhdGlvblRva2VuOjpkZWNvZGUpOgorCiAyMDIwLTA0LTI4ICBSb2IgQnVp
cyAgPHJidWlzQGlnYWxpYS5jb20+CiAKICAgICAgICAgUmVtb3ZlIGRvd25sb2FkQXR0cmlidXRl
IGZyb20gRG9jdW1lbnRMb2FkZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9n
IGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggMjAwY2M3OGE5YWI2N2YwZGFkNDc5N2E2
ZmE3N2Y0ZjFjYzllZjZlMS4uOTFlZjY1MWRhYTVhMGYwZjBlMjVlNzFhZTgxNDhjNTFjNmRkMmZl
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNyBAQAorMjAyMC0wNC0yOCAgV2Vuc29uIEhzaWVoICA8
d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KKworICAgICAgICBbVGV4dCBtYW5pcHVsYXRpb25dIEFk
ZCBhIHVzZXJJbmZvIGRpY3Rpb25hcnkgdG8gX1dLVGV4dE1hbmlwdWxhdGlvblRva2VuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTExNTEKKyAgICAg
ICAgPHJkYXI6Ly9wcm9ibGVtLzYyMzI5NTM0PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW06
CisgICAgICAgIChjcmVhdGVVc2VySW5mbyk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc3RhcnRU
ZXh0TWFuaXB1bGF0aW9uc1dpdGhDb25maWd1cmF0aW9uOmNvbXBsZXRpb246XSk6CisgICAgICAg
ICgtW1dLV2ViVmlldyBfY29tcGxldGVUZXh0TWFuaXB1bGF0aW9uOmNvbXBsZXRpb246XSk6Cisg
ICAgICAgICgtW1dLV2ViVmlldyBfY29tcGxldGVUZXh0TWFuaXB1bGF0aW9uRm9ySXRlbXM6Y29t
cGxldGlvbjpdKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL19XS1RleHRNYW5pcHVs
YXRpb25Ub2tlbi5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVGV4dE1hbmlw
dWxhdGlvblRva2VuLm1tOgorICAgICAgICAoLVtfV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4gc2V0
VXNlckluZm86XSk6CisgICAgICAgICgtW19XS1RleHRNYW5pcHVsYXRpb25Ub2tlbiB1c2VySW5m
b10pOgorCisgICAgICAgIEFkZCBhIG5ldyBgdXNlckluZm9gIGRpY3Rpb25hcnkgdG8gYF9XS1Rl
eHRNYW5pcHVsYXRpb25Ub2tlbmAsIHdoaWNoIGNvbnRhaW5zIHNldmVyYWwgbmFtZWQKKyAgICAg
ICAgYE5TU3RyaW5nYCBrZXlzLgorCisgICAgICAgICgtW19XS1RleHRNYW5pcHVsYXRpb25Ub2tl
biBpc0VxdWFsVG9UZXh0TWFuaXB1bGF0aW9uVG9rZW46aW5jbHVkaW5nQ29udGVudEVxdWFsaXR5
Ol0pOgorICAgICAgICAoLVtfV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4gX2Rlc2NyaXB0aW9uUHJl
c2VydmluZ1ByaXZhY3k6XSk6CisKIDIwMjAtMDQtMjggIERhdmlkIEtpbHplciAgPGRka2lsemVy
QGFwcGxlLmNvbT4KIAogICAgICAgICBbTWFjQ2F0YWx5c3RdIEFkZCBtaXNzaW5nIHN5bWxpbmtz
IHRvIFdlYktpdC5mcmFtZXdvcmtzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1RleHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuY3BwCmluZGV4IDUwZmFmMjgxMzA0OGY3YWMxNmM0
ZGU2ZmMwZmVhZGViOTFiMjgzYmEuLmNhNWU0YjA4ZjRjYjNiMTY2YTI2MDQ5NWIxNjlkNTRhOWYz
ZGE3YTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dE1hbmlwdWxhdGlv
bkNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dE1hbmlwdWxh
dGlvbkNvbnRyb2xsZXIuY3BwCkBAIC0yNTgsNiArMjU4LDIxIEBAIHN0YXRpYyBib29sIGNvbnRh
aW5zT25seUhUTUxTcGFjZXMoU3RyaW5nVmlldyB0ZXh0KQogICAgIHJldHVybiB0cnVlOwogfQog
CitzdGF0aWMgT3B0aW9uYWw8VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Ok1hbmlwdWxhdGlv
blRva2VuSW5mbz4gdG9rZW5JbmZvKFJlZlB0cjxOb2RlPiYmIG5vZGUpCit7CisgICAgaWYgKCFu
b2RlKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgVGV4dE1hbmlwdWxhdGlv
bkNvbnRyb2xsZXI6Ok1hbmlwdWxhdGlvblRva2VuSW5mbyByZXN1bHQ7CisgICAgcmVzdWx0LmRv
Y3VtZW50VVJMID0gbm9kZS0+ZG9jdW1lbnQoKS51cmwoKTsKKyAgICBpZiAoYXV0byBlbGVtZW50
ID0gbWFrZVJlZlB0cihpczxFbGVtZW50Pihub2RlLmdldCgpKSA/IGRvd25jYXN0PEVsZW1lbnQ+
KG5vZGUuZ2V0KCkpIDogbm9kZS0+cGFyZW50RWxlbWVudCgpKSkgeworICAgICAgICByZXN1bHQu
dGFnTmFtZSA9IGVsZW1lbnQtPnRhZ05hbWUoKTsKKyAgICAgICAgaWYgKGVsZW1lbnQtPmhhc0F0
dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oSFRNTE5hbWVzOjpyb2xlQXR0cikpCisgICAg
ICAgICAgICByZXN1bHQucm9sZUF0dHJpYnV0ZSA9IGVsZW1lbnQtPmF0dHJpYnV0ZVdpdGhvdXRT
eW5jaHJvbml6YXRpb24oSFRNTE5hbWVzOjpyb2xlQXR0cik7CisgICAgfQorICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKIHZvaWQgVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Om9ic2VydmVQYXJh
Z3JhcGhzKGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24mIGVuZCkKIHsKICAg
ICBpZiAoc3RhcnQuaXNOdWxsKCkgfHwgZW5kLmlzTnVsbCgpKQpAQCAtMzIxLDEzICszMzYsMTMg
QEAgdm9pZCBUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6b2JzZXJ2ZVBhcmFncmFwaHMoY29u
c3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdAogICAgICAgICAgICAgICAgIGF1dG8mIGN1cnJlbnRF
bGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4oKmNvbnRlbnQubm9kZSk7CiAgICAgICAgICAgICAg
ICAgaWYgKCFjb250ZW50LmlzVGV4dENvbnRlbnQgJiYgY2FuUGVyZm9ybVRleHRNYW5pcHVsYXRp
b25CeVJlcGxhY2luZ0VudGlyZVRleHRDb250ZW50KGN1cnJlbnRFbGVtZW50KSkgewogICAgICAg
ICAgICAgICAgICAgICBhZGRJdGVtKE1hbmlwdWxhdGlvbkl0ZW1EYXRhIHsgUG9zaXRpb24oKSwg
UG9zaXRpb24oKSwgbWFrZVdlYWtQdHIoY3VycmVudEVsZW1lbnQpLCBudWxsUU5hbWUoKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHsgTWFuaXB1bGF0aW9uVG9rZW4geyBtX3Rva2VuSWRlbnRp
Zmllci5nZW5lcmF0ZSgpLCBjdXJyZW50RWxlbWVudC50ZXh0Q29udGVudCgpIH0gfSB9KTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHsgTWFuaXB1bGF0aW9uVG9rZW4geyBtX3Rva2VuSWRlbnRp
Zmllci5nZW5lcmF0ZSgpLCBjdXJyZW50RWxlbWVudC50ZXh0Q29udGVudCgpLCB0b2tlbkluZm8o
JmN1cnJlbnRFbGVtZW50KSB9IH0gfSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIGlmIChjdXJyZW50RWxlbWVudC5oYXNBdHRyaWJ1dGVzKCkpIHsKICAgICAgICAgICAgICAg
ICAgICAgZm9yIChhdXRvJiBhdHRyaWJ1dGUgOiBjdXJyZW50RWxlbWVudC5hdHRyaWJ1dGVzSXRl
cmF0b3IoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzQXR0cmlidXRlRm9yVGV4
dE1hbmlwdWxhdGlvbihhdHRyaWJ1dGUubmFtZSgpKSkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGFkZEl0ZW0oTWFuaXB1bGF0aW9uSXRlbURhdGEgeyBQb3NpdGlvbigpLCBQb3NpdGlv
bigpLCBtYWtlV2Vha1B0cihjdXJyZW50RWxlbWVudCksIGF0dHJpYnV0ZS5uYW1lKCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgTWFuaXB1bGF0aW9uVG9rZW4geyBtX3Rva2Vu
SWRlbnRpZmllci5nZW5lcmF0ZSgpLCBhdHRyaWJ1dGUudmFsdWUoKSB9IH0gfSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHsgTWFuaXB1bGF0aW9uVG9rZW4geyBtX3Rva2VuSWRl
bnRpZmllci5nZW5lcmF0ZSgpLCBhdHRyaWJ1dGUudmFsdWUoKSwgdG9rZW5JbmZvKCZjdXJyZW50
RWxlbWVudCkgfSB9IH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQpAQCAtMzQ2LDcgKzM2MSw3IEBAIHZvaWQgVGV4
dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Om9ic2VydmVQYXJhZ3JhcGhzKGNvbnN0IFBvc2l0aW9u
JiBzdGFydCwgY29uc3QKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAgICAg
ZW5kT2ZDdXJyZW50UGFyYWdyYXBoID0gY3VycmVudEVuZE9mQ3VycmVudFBhcmFncmFwaDsKLSAg
ICAgICAgICAgIHRva2Vuc0luQ3VycmVudFBhcmFncmFwaC5hcHBlbmQoTWFuaXB1bGF0aW9uVG9r
ZW4geyBtX3Rva2VuSWRlbnRpZmllci5nZW5lcmF0ZSgpLCAiW10iLCB0cnVlIH0pOworICAgICAg
ICAgICAgdG9rZW5zSW5DdXJyZW50UGFyYWdyYXBoLmFwcGVuZChNYW5pcHVsYXRpb25Ub2tlbiB7
IG1fdG9rZW5JZGVudGlmaWVyLmdlbmVyYXRlKCksICJbXSIsIHRva2VuSW5mbyhjb250ZW50Lm5v
ZGUuZ2V0KCkpLCB0cnVlIH0pOwogCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQpA
QCAtMzY1LDcgKzM4MCw3IEBAIHZvaWQgVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Om9ic2Vy
dmVQYXJhZ3JhcGhzKGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QKICAgICAgICAgICAgICAg
ICBpZiAodG9rZW5zSW5DdXJyZW50UGFyYWdyYXBoLmlzRW1wdHkoKSkKICAgICAgICAgICAgICAg
ICAgICAgc3RhcnRPZkN1cnJlbnRQYXJhZ3JhcGggPSBQb3NpdGlvbigmdGV4dE5vZGUsIHN0YXJ0
T2ZDdXJyZW50TGluZSk7CiAKLSAgICAgICAgICAgICAgICB0b2tlbnNJbkN1cnJlbnRQYXJhZ3Jh
cGguYXBwZW5kKE1hbmlwdWxhdGlvblRva2VuIHsgbV90b2tlbklkZW50aWZpZXIuZ2VuZXJhdGUo
KSwgc3RyaW5nVW50aWxFbmRPZkxpbmUsIGV4Y2x1c2lvblJ1bGVNYXRjaGVyLmlzRXhjbHVkZWQo
Y29udGVudC5ub2RlLmdldCgpKSB9KTsKKyAgICAgICAgICAgICAgICB0b2tlbnNJbkN1cnJlbnRQ
YXJhZ3JhcGguYXBwZW5kKE1hbmlwdWxhdGlvblRva2VuIHsgbV90b2tlbklkZW50aWZpZXIuZ2Vu
ZXJhdGUoKSwgc3RyaW5nVW50aWxFbmRPZkxpbmUsIHRva2VuSW5mbygmdGV4dE5vZGUpLCBleGNs
dXNpb25SdWxlTWF0Y2hlci5pc0V4Y2x1ZGVkKGNvbnRlbnQubm9kZS5nZXQoKSkgfSk7CiAgICAg
ICAgICAgICB9CiAKICAgICAgICAgICAgIGlmICghdG9rZW5zSW5DdXJyZW50UGFyYWdyYXBoLmlz
RW1wdHkoKSkgewpAQCAtMzg1LDcgKzQwMCw3IEBAIHZvaWQgVGV4dE1hbmlwdWxhdGlvbkNvbnRy
b2xsZXI6Om9ic2VydmVQYXJhZ3JhcGhzKGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QKICAg
ICAgICAgICAgICAgICAgICAgc3RhcnRPZkN1cnJlbnRQYXJhZ3JhcGggPSBpdGVyYXRvci5zdGFy
dFBvc2l0aW9uKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbmRPZkN1cnJlbnRQYXJh
Z3JhcGggPSBpdGVyYXRvci5lbmRQb3NpdGlvbigpOwotICAgICAgICAgICAgdG9rZW5zSW5DdXJy
ZW50UGFyYWdyYXBoLmFwcGVuZChNYW5pcHVsYXRpb25Ub2tlbiB7IG1fdG9rZW5JZGVudGlmaWVy
LmdlbmVyYXRlKCksIHJlbWFpbmluZ1RleHQudG9TdHJpbmcoKSwgZXhjbHVzaW9uUnVsZU1hdGNo
ZXIuaXNFeGNsdWRlZChjb250ZW50Lm5vZGUuZ2V0KCkpIH0pOworICAgICAgICAgICAgdG9rZW5z
SW5DdXJyZW50UGFyYWdyYXBoLmFwcGVuZChNYW5pcHVsYXRpb25Ub2tlbiB7IG1fdG9rZW5JZGVu
dGlmaWVyLmdlbmVyYXRlKCksIHJlbWFpbmluZ1RleHQudG9TdHJpbmcoKSwgdG9rZW5JbmZvKGNv
bnRlbnQubm9kZS5nZXQoKSksIGV4Y2x1c2lvblJ1bGVNYXRjaGVyLmlzRXhjbHVkZWQoY29udGVu
dC5ub2RlLmdldCgpKSB9KTsKICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5oIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5oCmluZGV4IGM3Y2Q4NjQ5
NTc3MWM2ODM5MzhmOTU3NDFlMzU2ODhhODRlOTJlZWYuLmI1ZDNhNjlkMGZmOTFkZjcyZTBlNTlh
MDY1YzU3ZDBjNWE3NjI2OTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4
dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Rl
eHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmgKQEAgLTQ4LDkgKzQ4LDE5IEBAIHB1YmxpYzoKICAg
ICBlbnVtIFRva2VuSWRlbnRpZmllclR5cGUgeyB9OwogICAgIHVzaW5nIFRva2VuSWRlbnRpZmll
ciA9IE9iamVjdElkZW50aWZpZXI8VG9rZW5JZGVudGlmaWVyVHlwZT47CiAKKyAgICBzdHJ1Y3Qg
TWFuaXB1bGF0aW9uVG9rZW5JbmZvIHsKKyAgICAgICAgU3RyaW5nIHRhZ05hbWU7CisgICAgICAg
IFN0cmluZyByb2xlQXR0cmlidXRlOworICAgICAgICBVUkwgZG9jdW1lbnRVUkw7CisKKyAgICAg
ICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0Owor
ICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8TWFuaXB1bGF0
aW9uVG9rZW5JbmZvPiBkZWNvZGUoRGVjb2RlciYpOworICAgIH07CisKICAgICBzdHJ1Y3QgTWFu
aXB1bGF0aW9uVG9rZW4gewogICAgICAgICBUb2tlbklkZW50aWZpZXIgaWRlbnRpZmllcjsKICAg
ICAgICAgU3RyaW5nIGNvbnRlbnQ7CisgICAgICAgIE9wdGlvbmFsPE1hbmlwdWxhdGlvblRva2Vu
SW5mbz4gaW5mbzsKICAgICAgICAgYm9vbCBpc0V4Y2x1ZGVkIHsgZmFsc2UgfTsKIAogICAgICAg
ICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CkBA
IC0xNTcsMTAgKzE2NywzNCBAQCBwcml2YXRlOgogICAgIFRva2VuSWRlbnRpZmllciBtX3Rva2Vu
SWRlbnRpZmllcjsKIH07CiAKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2b2lkIFRleHRNYW5p
cHVsYXRpb25Db250cm9sbGVyOjpNYW5pcHVsYXRpb25Ub2tlbkluZm86OmVuY29kZShFbmNvZGVy
JiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwgdGFnTmFtZTsKKyAgICBlbmNvZGVy
IDw8IHJvbGVBdHRyaWJ1dGU7CisgICAgZW5jb2RlciA8PCBkb2N1bWVudFVSTDsKK30KKwordGVt
cGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK09wdGlvbmFsPFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVy
OjpNYW5pcHVsYXRpb25Ub2tlbkluZm8+IFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpNYW5p
cHVsYXRpb25Ub2tlbkluZm86OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIE1hbmlw
dWxhdGlvblRva2VuSW5mbyByZXN1bHQ7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQu
dGFnTmFtZSkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKHJlc3VsdC5yb2xlQXR0cmlidXRlKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKKworICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmRvY3VtZW50VVJMKSkKKyAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIHRl
bXBsYXRlPGNsYXNzIEVuY29kZXI+CiB2b2lkIFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpN
YW5pcHVsYXRpb25Ub2tlbjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiB7Ci0gICAg
ZW5jb2RlciA8PCBpZGVudGlmaWVyIDw8IGNvbnRlbnQgPDwgaXNFeGNsdWRlZDsKKyAgICBlbmNv
ZGVyIDw8IGlkZW50aWZpZXIgPDwgY29udGVudCA8PCBpbmZvIDw8IGlzRXhjbHVkZWQ7CiB9CiAK
IHRlbXBsYXRlPGNsYXNzIERlY29kZXI+CkBAIC0xNzEsNiArMjA1LDggQEAgT3B0aW9uYWw8VGV4
dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Ok1hbmlwdWxhdGlvblRva2VuPiBUZXh0TWFuaXB1bGF0
aW9uQ29udHJvbGwKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKHJlc3VsdC5jb250ZW50KSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
KyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5pbmZvKSkKKyAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5pc0V4Y2x1ZGVkKSkK
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICByZXR1cm4gcmVzdWx0OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbSBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0KaW5kZXggODhjOTVk
ZGVjZmQ0NjhlY2MzNThmNmViYzU4OWRlZDZhMDlkNTUzOC4uOTFjOGFhMzk5MjdhMDMxMWRhMGI3
ZDMyZmJmNmUwY2FkMGU5MmJlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0NvY29hL1dLV2ViVmlldy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Q29jb2EvV0tXZWJWaWV3Lm1tCkBAIC0xNjA2LDYgKzE2MDYsMjIgQEAgLSAodm9pZClfc2V0VGV4
dE1hbmlwdWxhdGlvbkRlbGVnYXRlOihpZCA8X1dLVGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlPilk
ZWxlZ2F0ZQogICAgIF90ZXh0TWFuaXB1bGF0aW9uRGVsZWdhdGUgPSBkZWxlZ2F0ZTsKIH0KIAor
c3RhdGljIFJldGFpblB0cjxOU0RpY3Rpb25hcnk8TlNTdHJpbmcgKiwgaWQ+PiBjcmVhdGVVc2Vy
SW5mbyhjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6
TWFuaXB1bGF0aW9uVG9rZW5JbmZvPiYgaW5mbykKK3sKKyAgICBpZiAoIWluZm8pCisgICAgICAg
IHJldHVybiB7IH07CisKKyAgICBhdXRvIHJlc3VsdCA9IGFkb3B0TlMoW1tOU011dGFibGVEaWN0
aW9uYXJ5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5OjNdKTsKKyAgICBpZiAoIWluZm8tPmRvY3Vt
ZW50VVJMLmlzTnVsbCgpKQorICAgICAgICBbcmVzdWx0IHNldE9iamVjdDooTlNVUkwgKilpbmZv
LT5kb2N1bWVudFVSTCBmb3JLZXk6X1dLVGV4dE1hbmlwdWxhdGlvblRva2VuVXNlckluZm9Eb2N1
bWVudFVSTEtleV07CisgICAgaWYgKCEhaW5mby0+dGFnTmFtZSkKKyAgICAgICAgW3Jlc3VsdCBz
ZXRPYmplY3Q6KE5TU3RyaW5nICopaW5mby0+dGFnTmFtZSBmb3JLZXk6X1dLVGV4dE1hbmlwdWxh
dGlvblRva2VuVXNlckluZm9UYWdOYW1lS2V5XTsKKyAgICBpZiAoISFpbmZvLT5yb2xlQXR0cmli
dXRlKQorICAgICAgICBbcmVzdWx0IHNldE9iamVjdDooTlNTdHJpbmcgKilpbmZvLT5yb2xlQXR0
cmlidXRlIGZvcktleTpfV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW5Vc2VySW5mb1JvbGVBdHRyaWJ1
dGVLZXldOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogLSAodm9pZClfc3RhcnRUZXh0TWFu
aXB1bGF0aW9uc1dpdGhDb25maWd1cmF0aW9uOihfV0tUZXh0TWFuaXB1bGF0aW9uQ29uZmlndXJh
dGlvbiAqKWNvbmZpZ3VyYXRpb24gY29tcGxldGlvbjoodm9pZCheKSgpKWNvbXBsZXRpb25IYW5k
bGVyCiB7CiAgICAgdXNpbmcgRXhjbHVzaW9uUnVsZSA9IFdlYkNvcmU6OlRleHRNYW5pcHVsYXRp
b25Db250cm9sbGVyOjpFeGNsdXNpb25SdWxlOwpAQCAtMTY0Myw2ICsxNjU5LDcgQEAgLSAodm9p
ZClfc3RhcnRUZXh0TWFuaXB1bGF0aW9uc1dpdGhDb25maWd1cmF0aW9uOihfV0tUZXh0TWFuaXB1
bGF0aW9uQ29uZmlndXJhdGkKICAgICAgICAgICAgICAgICBbd2tUb2tlbiBzZXRJZGVudGlmaWVy
OlN0cmluZzo6bnVtYmVyKHRva2VuLmlkZW50aWZpZXIudG9VSW50NjQoKSldOwogICAgICAgICAg
ICAgICAgIFt3a1Rva2VuIHNldENvbnRlbnQ6dG9rZW4uY29udGVudF07CiAgICAgICAgICAgICAg
ICAgW3drVG9rZW4gc2V0RXhjbHVkZWQ6dG9rZW4uaXNFeGNsdWRlZF07CisgICAgICAgICAgICAg
ICAgW3drVG9rZW4gc2V0VXNlckluZm86Y3JlYXRlVXNlckluZm8odG9rZW4uaW5mbykuYXV0b3Jl
bGVhc2UoKV07CiAgICAgICAgICAgICAgICAgcmV0dXJuIHdrVG9rZW47CiAgICAgICAgICAgICB9
KTsKICAgICAgICAgICAgIHJldHVybiBhZG9wdE5TKFtbX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0g
YWxsb2NdIGluaXRXaXRoSWRlbnRpZmllcjpTdHJpbmc6Om51bWJlcihpdGVtLmlkZW50aWZpZXIu
dG9VSW50NjQoKSkgdG9rZW5zOnRva2Vucy5nZXQoKV0pOwpAQCAtMTY4MCw3ICsxNjk3LDcgQEAg
LSAodm9pZClfY29tcGxldGVUZXh0TWFuaXB1bGF0aW9uOihfV0tUZXh0TWFuaXB1bGF0aW9uSXRl
bSAqKWl0ZW0gY29tcGxldGlvbjoodm8KIAogICAgIFZlY3RvcjxXZWJDb3JlOjpUZXh0TWFuaXB1
bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9uVG9rZW4+IHRva2VuczsKICAgICBmb3IgKF9X
S1RleHRNYW5pcHVsYXRpb25Ub2tlbiAqd2tUb2tlbiBpbiBpdGVtLnRva2VucykKLSAgICAgICAg
dG9rZW5zLmFwcGVuZChXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1
bGF0aW9uVG9rZW4geyBjb3JlVGV4dE1hbmlwdWxhdGlvblRva2VuSWRlbnRpZmllckZyb21TdHJp
bmcod2tUb2tlbi5pZGVudGlmaWVyKSwgd2tUb2tlbi5jb250ZW50IH0pOworICAgICAgICB0b2tl
bnMuYXBwZW5kKFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpNYW5pcHVsYXRp
b25Ub2tlbiB7IGNvcmVUZXh0TWFuaXB1bGF0aW9uVG9rZW5JZGVudGlmaWVyRnJvbVN0cmluZyh3
a1Rva2VuLmlkZW50aWZpZXIpLCB3a1Rva2VuLmNvbnRlbnQsIFdURjo6bnVsbG9wdCB9KTsKIAog
ICAgIFZlY3RvcjxXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0
aW9uSXRlbT4gY29yZUl0ZW1zOwogICAgIGNvcmVJdGVtcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5
KDEpOwpAQCAtMTczOSw3ICsxNzU2LDcgQEAgLSAodm9pZClfY29tcGxldGVUZXh0TWFuaXB1bGF0
aW9uRm9ySXRlbXM6KE5TQXJyYXk8X1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0gKj4gKikKICAgICAg
ICAgVmVjdG9yPFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpNYW5pcHVsYXRp
b25Ub2tlbj4gY29yZVRva2VuczsKICAgICAgICAgY29yZVRva2Vucy5yZXNlcnZlSW5pdGlhbENh
cGFjaXR5KHdrSXRlbS50b2tlbnMuY291bnQpOwogICAgICAgICBmb3IgKF9XS1RleHRNYW5pcHVs
YXRpb25Ub2tlbiAqd2tUb2tlbiBpbiB3a0l0ZW0udG9rZW5zKQotICAgICAgICAgICAgY29yZVRv
a2Vucy51bmNoZWNrZWRBcHBlbmQoV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6
Ok1hbmlwdWxhdGlvblRva2VuIHsgY29yZVRleHRNYW5pcHVsYXRpb25Ub2tlbklkZW50aWZpZXJG
cm9tU3RyaW5nKHdrVG9rZW4uaWRlbnRpZmllciksIHdrVG9rZW4uY29udGVudCB9KTsKKyAgICAg
ICAgICAgIGNvcmVUb2tlbnMudW5jaGVja2VkQXBwZW5kKFdlYkNvcmU6OlRleHRNYW5pcHVsYXRp
b25Db250cm9sbGVyOjpNYW5pcHVsYXRpb25Ub2tlbiB7IGNvcmVUZXh0TWFuaXB1bGF0aW9uVG9r
ZW5JZGVudGlmaWVyRnJvbVN0cmluZyh3a1Rva2VuLmlkZW50aWZpZXIpLCB3a1Rva2VuLmNvbnRl
bnQsIFdURjo6bnVsbG9wdCB9KTsKICAgICAgICAgY29yZUl0ZW1zLnVuY2hlY2tlZEFwcGVuZChX
ZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9uSXRlbSB7IGNv
cmVUZXh0TWFuaXB1bGF0aW9uSXRlbUlkZW50aWZpZXJGcm9tU3RyaW5nKHdrSXRlbS5pZGVudGlm
aWVyKSwgV1RGTW92ZShjb3JlVG9rZW5zKSB9KTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4uaCBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tUZXh0TWFuaXB1bGF0aW9uVG9r
ZW4uaAppbmRleCAxZjJlODZmMmI2ODY4OGMyMzFjNDAyNTY5Yjg3MjM4YTczNjE2YWQ2Li41Zjky
NTY2OTg5YWZhYmFhMDgzNmJmMmRiM2Y1ZDQ3OGRlNWI0MDBlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVGV4dE1hbmlwdWxhdGlvblRva2VuLmgKKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1RleHRNYW5pcHVsYXRpb25U
b2tlbi5oCkBAIC0yOCw2ICsyOCwxMCBAQAogCiBOU19BU1NVTUVfTk9OTlVMTF9CRUdJTgogCitX
S19FWFRFUk4gTlNTdHJpbmcgKiBjb25zdCBfV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW5Vc2VySW5m
b0RvY3VtZW50VVJMS2V5IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhX
S19JT1NfVEJBKSk7CitXS19FWFRFUk4gTlNTdHJpbmcgKiBjb25zdCBfV0tUZXh0TWFuaXB1bGF0
aW9uVG9rZW5Vc2VySW5mb1RhZ05hbWVLZXkgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNf
VEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKK1dLX0VYVEVSTiBOU1N0cmluZyAqIGNvbnN0IF9XS1Rl
eHRNYW5pcHVsYXRpb25Ub2tlblVzZXJJbmZvUm9sZUF0dHJpYnV0ZUtleSBXS19BUElfQVZBSUxB
QkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOworCiBXS19DTEFTU19BVkFJ
TEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSkKIEBpbnRlcmZhY2UgX1dL
VGV4dE1hbmlwdWxhdGlvblRva2VuIDogTlNPYmplY3QKIApAQCAtMzgsNiArNDIsOCBAQCBXS19D
TEFTU19BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSkKIC0gKEJP
T0wpaXNFcXVhbFRvVGV4dE1hbmlwdWxhdGlvblRva2VuOihudWxsYWJsZSBfV0tUZXh0TWFuaXB1
bGF0aW9uVG9rZW4gKilvdGhlclRva2VuIGluY2x1ZGluZ0NvbnRlbnRFcXVhbGl0eTooQk9PTClp
bmNsdWRpbmdDb250ZW50RXF1YWxpdHk7CiBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSwgcmVh
ZG9ubHkpIE5TU3RyaW5nICpkZWJ1Z0Rlc2NyaXB0aW9uOwogCitAcHJvcGVydHkgKG5vbmF0b21p
YywgbnVsbGFibGUsIGNvcHkpIE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKnVzZXJJbmZv
OworCiBAZW5kCiAKIE5TX0FTU1VNRV9OT05OVUxMX0VORApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1RleHRNYW5pcHVsYXRpb25Ub2tlbi5tbSBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4u
bW0KaW5kZXggMTkyMzAwNDkzODgxODZmOWVhMWRmNDljMTlmZjJiNTQwZWJmNmM2YS4uODFiZTJm
MjYwNjA3YWI3NWUxZjNhMjY1OGE5ZmMwYWYxMjc3ZDM5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1RleHRNYW5pcHVsYXRpb25Ub2tlbi5tbQorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVGV4dE1hbmlwdWxhdGlvblRv
a2VuLm1tCkBAIC0yNiw3ICsyNiwxNSBAQAogI2ltcG9ydCAiY29uZmlnLmgiCiAjaW1wb3J0ICJf
V0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4uaCIKIAotQGltcGxlbWVudGF0aW9uIF9XS1RleHRNYW5p
cHVsYXRpb25Ub2tlbgorI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgorCitOU1N0cmluZyAqIGNv
bnN0IF9XS1RleHRNYW5pcHVsYXRpb25Ub2tlblVzZXJJbmZvRG9jdW1lbnRVUkxLZXkgPSBAIl9X
S1RleHRNYW5pcHVsYXRpb25Ub2tlblVzZXJJbmZvRG9jdW1lbnRVUkxLZXkiOworTlNTdHJpbmcg
KiBjb25zdCBfV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW5Vc2VySW5mb1RhZ05hbWVLZXkgPSBAIl9X
S1RleHRNYW5pcHVsYXRpb25Ub2tlblVzZXJJbmZvVGFnTmFtZUtleSI7CitOU1N0cmluZyAqIGNv
bnN0IF9XS1RleHRNYW5pcHVsYXRpb25Ub2tlblVzZXJJbmZvUm9sZUF0dHJpYnV0ZUtleSA9IEAi
X1dLVGV4dE1hbmlwdWxhdGlvblRva2VuVXNlckluZm9Sb2xlQXR0cmlidXRlS2V5IjsKKworQGlt
cGxlbWVudGF0aW9uIF9XS1RleHRNYW5pcHVsYXRpb25Ub2tlbiB7CisgICAgUmV0YWluUHRyPE5T
RGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4+IF91c2VySW5mbzsKK30KIAogLSAodm9pZClkZWFs
bG9jCiB7CkBAIC0zOCw2ICs0NiwxOSBAQCAtICh2b2lkKWRlYWxsb2MKICAgICBbc3VwZXIgZGVh
bGxvY107CiB9CiAKKy0gKHZvaWQpc2V0VXNlckluZm86KE5TRGljdGlvbmFyeTxOU1N0cmluZyAq
LCBpZD4gKil1c2VySW5mbworeworICAgIGlmICh1c2VySW5mbyA9PSBfdXNlckluZm8gfHwgW191
c2VySW5mbyBpc0VxdWFsOnVzZXJJbmZvXSkKKyAgICAgICAgcmV0dXJuOworCisgICAgX3VzZXJJ
bmZvID0gYWRvcHROUyh1c2VySW5mby5jb3B5KTsKK30KKworLSAoTlNEaWN0aW9uYXJ5PE5TU3Ry
aW5nICosIGlkPiAqKXVzZXJJbmZvCit7CisgICAgcmV0dXJuIF91c2VySW5mby5nZXQoKTsKK30K
Kwogc3RhdGljIEJPT0wgaXNFcXVhbE9yQm90aE5pbChpZCBhLCBpZCBiKQogewogICAgIGlmIChh
ID09IGIpCkBAIC02NSw4ICs4Niw5IEBAIC0gKEJPT0wpaXNFcXVhbFRvVGV4dE1hbmlwdWxhdGlv
blRva2VuOihfV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4gKilvdGhlclRva2VuIGluCiAgICAgQk9P
TCBlcXVhbElkZW50aWZpZXJzID0gaXNFcXVhbE9yQm90aE5pbChzZWxmLmlkZW50aWZpZXIsIG90
aGVyVG9rZW4uaWRlbnRpZmllcik7CiAgICAgQk9PTCBlcXVhbEV4Y2x1c2lvbiA9IHNlbGYuaXNF
eGNsdWRlZCA9PSBvdGhlclRva2VuLmlzRXhjbHVkZWQ7CiAgICAgQk9PTCBlcXVhbENvbnRlbnQg
PSAhaW5jbHVkaW5nQ29udGVudEVxdWFsaXR5IHx8IGlzRXF1YWxPckJvdGhOaWwoc2VsZi5jb250
ZW50LCBvdGhlclRva2VuLmNvbnRlbnQpOworICAgIEJPT0wgZXF1YWxVc2VySW5mbyA9IGlzRXF1
YWxPckJvdGhOaWwoc2VsZi51c2VySW5mbywgb3RoZXJUb2tlbi51c2VySW5mbyk7CiAKLSAgICBy
ZXR1cm4gZXF1YWxJZGVudGlmaWVycyAmJiBlcXVhbEV4Y2x1c2lvbiAmJiBlcXVhbENvbnRlbnQ7
CisgICAgcmV0dXJuIGVxdWFsSWRlbnRpZmllcnMgJiYgZXF1YWxFeGNsdXNpb24gJiYgZXF1YWxD
b250ZW50ICYmIGVxdWFsVXNlckluZm87CiB9CiAKIC0gKE5TU3RyaW5nICopZGVzY3JpcHRpb24K
QEAgLTg1LDcgKzEwNyw3IEBAIC0gKE5TU3RyaW5nICopX2Rlc2NyaXB0aW9uUHJlc2VydmluZ1By
aXZhY3k6KEJPT0wpcHJlc2VydmVQcml2YWN5CiAgICAgaWYgKHByZXNlcnZlUHJpdmFjeSkKICAg
ICAgICAgW2Rlc2NyaXB0aW9uIGFwcGVuZEZvcm1hdDpAIjsgY29udGVudCBsZW5ndGggPSAlbHUi
LCAodW5zaWduZWQgbG9uZylzZWxmLmNvbnRlbnQubGVuZ3RoXTsKICAgICBlbHNlCi0gICAgICAg
IFtkZXNjcmlwdGlvbiBhcHBlbmRGb3JtYXQ6QCI7IGNvbnRlbnQgPSAlQCIsIHNlbGYuY29udGVu
dF07CisgICAgICAgIFtkZXNjcmlwdGlvbiBhcHBlbmRGb3JtYXQ6QCI7IGNvbnRlbnQgPSAlQDsg
dXNlciBpbmZvID0gJUAiLCBzZWxmLmNvbnRlbnQsIHNlbGYudXNlckluZm9dOwogCiAgICAgW2Rl
c2NyaXB0aW9uIGFwcGVuZFN0cmluZzpAIj4iXTsKIApkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdl
TG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGQ2MTViMmFmNWI3MjFhM2EzYmI4NzBjYjY1MGYw
YmI3YzE0N2UzZGQuLmRkYjQzNjM0NDJhZGU5OTc4MDI4OTViOTlkYjMwYjMwMmIzZjkzYzQgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxNSBAQAorMjAyMC0wNC0yOCAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNv
bT4KKworICAgICAgICBbVGV4dCBtYW5pcHVsYXRpb25dIEFkZCBhIHVzZXJJbmZvIGRpY3Rpb25h
cnkgdG8gX1dLVGV4dE1hbmlwdWxhdGlvblRva2VuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTExNTEKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzYy
MzI5NTM0PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFkZCBhIG5ldyBBUEkgdGVzdCB0byBjaGVjayB0aGUgdXNlckluZm8gZGljdGlvbmFyeSBvbiB0
ZXh0IG1hbmlwdWxhdGlvbiB0b2tlbnMuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL1RleHRNYW5pcHVsYXRpb24ubW06CisKIDIwMjAtMDQtMjggIEthdGUgQ2hl
bmV5ICA8a2F0aGVyaW5lX2NoZW5leUBhcHBsZS5jb20+CiAKICAgICAgICAgQ3JlYXRlIGEgbWVj
aGFuaXNtIHRvIGFkZCBtaXNzaW5nIElUUCBEYXRhYmFzZSB0YWJsZXMgd2hlbiB0aGUgc2NoZW1h
IGlzIHVwZGF0ZWQKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvVGV4dE1hbmlwdWxhdGlvbi5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvVGV4dE1hbmlwdWxhdGlvbi5tbQppbmRleCAzNGNkZjlhZGRkYWQzYzgzZmQyYTcx
MzE1MzJmNDhmNmNkMzIxMmQyLi4zMWNmMWNhZmEwZjU1ZDU0ODI2NzViYjdiZGRiYjJkYTQ2Mjdk
ZGE4IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Rl
eHRNYW5pcHVsYXRpb24ubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9UZXh0TWFuaXB1bGF0aW9uLm1tCkBAIC03MDQsNiArNzA0LDU5IEBAIFRFU1QoVGV4dE1h
bmlwdWxhdGlvbiwgU3RhcnRUZXh0TWFuaXB1bGF0aW9uVHJlYXRzTGlua3NJbk5hdmlnYXRpb25F
bGVtZW50c0FzUGFyCiAgICAgRVhQRUNUX1dLX1NUUkVRKCJHYXJwbHkiLCBpdGVtc1szXS50b2tl
bnNbMF0uY29udGVudCk7CiB9CiAKK1RFU1QoVGV4dE1hbmlwdWxhdGlvbiwgU3RhcnRUZXh0TWFu
aXB1bGF0aW9uRXh0cmFjdHNVc2VySW5mbykKK3sKKyAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHRO
UyhbW1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOworICAgIGF1dG8gd2Vi
VmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFr
ZVJlY3QoMCwgMCwgNDAwLCA0MDApXSk7CisgICAgW3dlYlZpZXcgX3NldFRleHRNYW5pcHVsYXRp
b25EZWxlZ2F0ZTpkZWxlZ2F0ZS5nZXQoKV07CisKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5
TG9hZEhUTUxTdHJpbmc6QCI8IURPQ1RZUEUgaHRtbD4iCisgICAgICAgICI8Ym9keT4iCisgICAg
ICAgICIgICAgPHRpdGxlPlRoaXMgaXMgYSB0ZXN0PC90aXRsZT4iCisgICAgICAgICIgICAgPHA+
Rmlyc3Q8L3A+IgorICAgICAgICAiICAgIDxkaXYgcm9sZT0nYnV0dG9uJz5TZWNvbmQ8L2Rpdj4i
CisgICAgICAgICIgICAgPHNwYW4+VGhpcmQ8L3NwYW4+IgorICAgICAgICAiPC9ib2R5PiJdOwor
CisgICAgZG9uZSA9IGZhbHNlOworICAgIFt3ZWJWaWV3IF9zdGFydFRleHRNYW5pcHVsYXRpb25z
V2l0aENvbmZpZ3VyYXRpb246bmlsIGNvbXBsZXRpb246XnsKKyAgICAgICAgZG9uZSA9IHRydWU7
CisgICAgfV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKKworICAgIGF1
dG8gaXRlbXMgPSBbZGVsZWdhdGUgaXRlbXNdOworICAgIEVYUEVDVF9FUShpdGVtcy5jb3VudCwg
NFVMKTsKKyAgICBFWFBFQ1RfRVEoaXRlbXNbMF0udG9rZW5zLmNvdW50LCAxVUwpOworICAgIEVY
UEVDVF9FUShpdGVtc1sxXS50b2tlbnMuY291bnQsIDFVTCk7CisgICAgRVhQRUNUX0VRKGl0ZW1z
WzJdLnRva2Vucy5jb3VudCwgMVVMKTsKKyAgICBFWFBFQ1RfRVEoaXRlbXNbM10udG9rZW5zLmNv
dW50LCAxVUwpOworICAgIEVYUEVDVF9XS19TVFJFUSgiVGhpcyBpcyBhIHRlc3QiLCBpdGVtc1sw
XS50b2tlbnNbMF0uY29udGVudCk7CisgICAgRVhQRUNUX1dLX1NUUkVRKCJGaXJzdCIsIGl0ZW1z
WzFdLnRva2Vuc1swXS5jb250ZW50KTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoIlNlY29uZCIsIGl0
ZW1zWzJdLnRva2Vuc1swXS5jb250ZW50KTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoIlRoaXJkIiwg
aXRlbXNbM10udG9rZW5zWzBdLmNvbnRlbnQpOworICAgIHsKKyAgICAgICAgYXV0byB1c2VySW5m
byA9IGl0ZW1zWzBdLnRva2Vuc1swXS51c2VySW5mbzsKKyAgICAgICAgRVhQRUNUX1dLX1NUUkVR
KCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyIsIFsoTlNVUkwgKil1c2VySW5mb1tfV0tUZXh0TWFu
aXB1bGF0aW9uVG9rZW5Vc2VySW5mb0RvY3VtZW50VVJMS2V5XSBsYXN0UGF0aENvbXBvbmVudF0p
OworICAgICAgICBFWFBFQ1RfV0tfU1RSRVEoIlRJVExFIiwgKE5TU3RyaW5nICopdXNlckluZm9b
X1dLVGV4dE1hbmlwdWxhdGlvblRva2VuVXNlckluZm9UYWdOYW1lS2V5XSk7CisgICAgfQorICAg
IHsKKyAgICAgICAgYXV0byB1c2VySW5mbyA9IGl0ZW1zWzFdLnRva2Vuc1swXS51c2VySW5mbzsK
KyAgICAgICAgRVhQRUNUX1dLX1NUUkVRKCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyIsIFsoTlNV
UkwgKil1c2VySW5mb1tfV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW5Vc2VySW5mb0RvY3VtZW50VVJM
S2V5XSBsYXN0UGF0aENvbXBvbmVudF0pOworICAgICAgICBFWFBFQ1RfV0tfU1RSRVEoIlAiLCAo
TlNTdHJpbmcgKil1c2VySW5mb1tfV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW5Vc2VySW5mb1RhZ05h
bWVLZXldKTsKKyAgICB9CisgICAgeworICAgICAgICBhdXRvIHVzZXJJbmZvID0gaXRlbXNbMl0u
dG9rZW5zWzBdLnVzZXJJbmZvOworICAgICAgICBFWFBFQ1RfV0tfU1RSRVEoIlRlc3RXZWJLaXRB
UEkucmVzb3VyY2VzIiwgWyhOU1VSTCAqKXVzZXJJbmZvW19XS1RleHRNYW5pcHVsYXRpb25Ub2tl
blVzZXJJbmZvRG9jdW1lbnRVUkxLZXldIGxhc3RQYXRoQ29tcG9uZW50XSk7CisgICAgICAgIEVY
UEVDVF9XS19TVFJFUSgiRElWIiwgKE5TU3RyaW5nICopdXNlckluZm9bX1dLVGV4dE1hbmlwdWxh
dGlvblRva2VuVXNlckluZm9UYWdOYW1lS2V5XSk7CisgICAgICAgIEVYUEVDVF9XS19TVFJFUSgi
YnV0dG9uIiwgKE5TU3RyaW5nICopdXNlckluZm9bX1dLVGV4dE1hbmlwdWxhdGlvblRva2VuVXNl
ckluZm9Sb2xlQXR0cmlidXRlS2V5XSk7CisgICAgfQorICAgIHsKKyAgICAgICAgYXV0byB1c2Vy
SW5mbyA9IGl0ZW1zWzNdLnRva2Vuc1swXS51c2VySW5mbzsKKyAgICAgICAgRVhQRUNUX1dLX1NU
UkVRKCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyIsIFsoTlNVUkwgKil1c2VySW5mb1tfV0tUZXh0
TWFuaXB1bGF0aW9uVG9rZW5Vc2VySW5mb0RvY3VtZW50VVJMS2V5XSBsYXN0UGF0aENvbXBvbmVu
dF0pOworICAgICAgICBFWFBFQ1RfV0tfU1RSRVEoIlNQQU4iLCAoTlNTdHJpbmcgKil1c2VySW5m
b1tfV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW5Vc2VySW5mb1RhZ05hbWVLZXldKTsKKyAgICB9Cit9
CisKIHN0cnVjdCBUb2tlbiB7CiAgICAgTlNTdHJpbmcgKmlkZW50aWZpZXI7CiAgICAgTlNTdHJp
bmcgKmNvbnRlbnQ7Cg==
</data>
<flag name="review"
          id="413274"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>397922</attachid>
            <date>2020-04-28 21:53:42 -0700</date>
            <delta_ts>2020-04-28 22:16:28 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-211151-20200428215342.patch</filename>
            <type>text/plain</type>
            <size>21094</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwODQzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjViM2MxYjE0OGE5MmM2
Yzg2ZDQ5NmRiNWUwNmJjNWMxNjAxNGRhMC4uM2UzY2FjYmNmYzE0MzY5MGFhM2ZmNTQ5OWI1ZDA1
YmYzMWMzYTcwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDIwLTA0LTI4ICBXZW5z
b24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIFtUZXh0IG1hbmlw
dWxhdGlvbl0gQWRkIGEgdXNlckluZm8gZGljdGlvbmFyeSB0byBfV0tUZXh0TWFuaXB1bGF0aW9u
VG9rZW4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIx
MTE1MQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNjIzMjk1MzQ+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgQWRkIGFuIGV4dGVuc2libGUgbWVjaGFuaXNt
IGZvciB0aGUgdGV4dCBtYW5pcHVsYXRpb24gY29udHJvbGxlciB0byBzZW5kIGFkZGl0aW9uYWwK
KyAgICAgICAgbWV0YWRhdGEgZm9yIGVhY2ggdGV4dCBtYW5pcHVsYXRpb24gdG9rZW4gdGhyb3Vn
aCB0byB0aGUgV2ViS2l0IGNsaWVudCwgZm9yIGRlYnVnZ2luZworICAgICAgICBwdXJwb3Nlcy4K
KworICAgICAgICBUZXN0OiBUZXh0TWFuaXB1bGF0aW9uLlN0YXJ0VGV4dE1hbmlwdWxhdGlvbkV4
dHJhY3RzVXNlckluZm8KKworICAgICAgICAqIGVkaXRpbmcvVGV4dE1hbmlwdWxhdGlvbkNvbnRy
b2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9rZW5JbmZvKToKKyAgICAgICAgKFdlYkNv
cmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpvYnNlcnZlUGFyYWdyYXBocyk6CisgICAg
ICAgICogZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5oOgorCisgICAgICAgIEFk
ZCBUZXh0TWFuaXB1bGF0aW9uVG9rZW5JbmZvLCBhbmQgYWRkIGFuIG9wdGlvbmFsIFRleHRNYW5p
cHVsYXRpb25Ub2tlbkluZm8gbWVtYmVyIHRvCisgICAgICAgIFRleHRNYW5pcHVsYXRpb25Ub2tl
bi4gRm9yIG5vdywganVzdCBzZW5kIG92ZXIgdGhlIGRvY3VtZW50IFVSTCwgZWxlbWVudCB0YWcg
bmFtZSwgYW5kCisgICAgICAgIHRoZSB2YWx1ZSBvZiB0aGUgcm9sZSBhdHRyaWJ1dGUuCisKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpNYW5pcHVsYXRpb25U
b2tlbkluZm86OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0TWFuaXB1bGF0
aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9uVG9rZW5JbmZvOjpkZWNvZGUpOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Ok1hbmlwdWxhdGlvblRva2VuOjpl
bmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xs
ZXI6Ok1hbmlwdWxhdGlvblRva2VuOjpkZWNvZGUpOgorCiAyMDIwLTA0LTI4ICBSb2IgQnVpcyAg
PHJidWlzQGlnYWxpYS5jb20+CiAKICAgICAgICAgUmVtb3ZlIGRvd25sb2FkQXR0cmlidXRlIGZy
b20gRG9jdW1lbnRMb2FkZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggMjAwY2M3OGE5YWI2N2YwZGFkNDc5N2E2ZmE3
N2Y0ZjFjYzllZjZlMS4uNGRhNDdkNGJjYjNiMzcxNjI4YmI3ZTFiNTRiYTE4YzdkM2RjMTExNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwyNyBAQAorMjAyMC0wNC0yOCAgV2Vuc29uIEhzaWVoICA8d2Vu
c29uX2hzaWVoQGFwcGxlLmNvbT4KKworICAgICAgICBbVGV4dCBtYW5pcHVsYXRpb25dIEFkZCBh
IHVzZXJJbmZvIGRpY3Rpb25hcnkgdG8gX1dLVGV4dE1hbmlwdWxhdGlvblRva2VuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTExNTEKKyAgICAgICAg
PHJkYXI6Ly9wcm9ibGVtLzYyMzI5NTM0PgorCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFk
bGVyLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW06CisgICAg
ICAgIChjcmVhdGVVc2VySW5mbyk6CisgICAgICAgICgtW1dLV2ViVmlldyBfc3RhcnRUZXh0TWFu
aXB1bGF0aW9uc1dpdGhDb25maWd1cmF0aW9uOmNvbXBsZXRpb246XSk6CisgICAgICAgICgtW1dL
V2ViVmlldyBfY29tcGxldGVUZXh0TWFuaXB1bGF0aW9uOmNvbXBsZXRpb246XSk6CisgICAgICAg
ICgtW1dLV2ViVmlldyBfY29tcGxldGVUZXh0TWFuaXB1bGF0aW9uRm9ySXRlbXM6Y29tcGxldGlv
bjpdKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL19XS1RleHRNYW5pcHVsYXRpb25U
b2tlbi5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVGV4dE1hbmlwdWxhdGlv
blRva2VuLm1tOgorICAgICAgICAoLVtfV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4gc2V0VXNlcklu
Zm86XSk6CisgICAgICAgICgtW19XS1RleHRNYW5pcHVsYXRpb25Ub2tlbiB1c2VySW5mb10pOgor
CisgICAgICAgIEFkZCBhIG5ldyBgdXNlckluZm9gIGRpY3Rpb25hcnkgdG8gYF9XS1RleHRNYW5p
cHVsYXRpb25Ub2tlbmAsIHdoaWNoIGNvbnRhaW5zIHNldmVyYWwgbmFtZWQKKyAgICAgICAgYE5T
U3RyaW5nYCBrZXlzLgorCisgICAgICAgICgtW19XS1RleHRNYW5pcHVsYXRpb25Ub2tlbiBpc0Vx
dWFsVG9UZXh0TWFuaXB1bGF0aW9uVG9rZW46aW5jbHVkaW5nQ29udGVudEVxdWFsaXR5Ol0pOgor
ICAgICAgICAoLVtfV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4gX2Rlc2NyaXB0aW9uUHJlc2Vydmlu
Z1ByaXZhY3k6XSk6CisKIDIwMjAtMDQtMjggIERhdmlkIEtpbHplciAgPGRka2lsemVyQGFwcGxl
LmNvbT4KIAogICAgICAgICBbTWFjQ2F0YWx5c3RdIEFkZCBtaXNzaW5nIHN5bWxpbmtzIHRvIFdl
YktpdC5mcmFtZXdvcmtzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRN
YW5pcHVsYXRpb25Db250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dE1h
bmlwdWxhdGlvbkNvbnRyb2xsZXIuY3BwCmluZGV4IDUwZmFmMjgxMzA0OGY3YWMxNmM0ZGU2ZmMw
ZmVhZGViOTFiMjgzYmEuLjc3Y2M1M2NhMzM0NGNjMWRlMjAyZGU0YTg0NDczY2M5ODJmNTcyZGYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dE1hbmlwdWxhdGlvbkNvbnRy
b2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dE1hbmlwdWxhdGlvbkNv
bnRyb2xsZXIuY3BwCkBAIC0yNTgsNiArMjU4LDIxIEBAIHN0YXRpYyBib29sIGNvbnRhaW5zT25s
eUhUTUxTcGFjZXMoU3RyaW5nVmlldyB0ZXh0KQogICAgIHJldHVybiB0cnVlOwogfQogCitzdGF0
aWMgT3B0aW9uYWw8VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Ok1hbmlwdWxhdGlvblRva2Vu
SW5mbz4gdG9rZW5JbmZvKE5vZGUqIG5vZGUpCit7CisgICAgaWYgKCFub2RlKQorICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Ok1h
bmlwdWxhdGlvblRva2VuSW5mbyByZXN1bHQ7CisgICAgcmVzdWx0LmRvY3VtZW50VVJMID0gbm9k
ZS0+ZG9jdW1lbnQoKS51cmwoKTsKKyAgICBpZiAoYXV0byBlbGVtZW50ID0gaXM8RWxlbWVudD4o
bm9kZSkgPyBtYWtlUmVmUHRyKGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKSkgOiBtYWtlUmVmUHRy
KG5vZGUtPnBhcmVudEVsZW1lbnQoKSkpIHsKKyAgICAgICAgcmVzdWx0LnRhZ05hbWUgPSBlbGVt
ZW50LT50YWdOYW1lKCk7CisgICAgICAgIGlmIChlbGVtZW50LT5oYXNBdHRyaWJ1dGVXaXRob3V0
U3luY2hyb25pemF0aW9uKEhUTUxOYW1lczo6cm9sZUF0dHIpKQorICAgICAgICAgICAgcmVzdWx0
LnJvbGVBdHRyaWJ1dGUgPSBlbGVtZW50LT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9u
KEhUTUxOYW1lczo6cm9sZUF0dHIpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCiB2
b2lkIFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpvYnNlcnZlUGFyYWdyYXBocyhjb25zdCBQ
b3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQpCiB7CiAgICAgaWYgKHN0YXJ0Lmlz
TnVsbCgpIHx8IGVuZC5pc051bGwoKSkKQEAgLTMyMSwxMyArMzM2LDEzIEBAIHZvaWQgVGV4dE1h
bmlwdWxhdGlvbkNvbnRyb2xsZXI6Om9ic2VydmVQYXJhZ3JhcGhzKGNvbnN0IFBvc2l0aW9uJiBz
dGFydCwgY29uc3QKICAgICAgICAgICAgICAgICBhdXRvJiBjdXJyZW50RWxlbWVudCA9IGRvd25j
YXN0PEVsZW1lbnQ+KCpjb250ZW50Lm5vZGUpOwogICAgICAgICAgICAgICAgIGlmICghY29udGVu
dC5pc1RleHRDb250ZW50ICYmIGNhblBlcmZvcm1UZXh0TWFuaXB1bGF0aW9uQnlSZXBsYWNpbmdF
bnRpcmVUZXh0Q29udGVudChjdXJyZW50RWxlbWVudCkpIHsKICAgICAgICAgICAgICAgICAgICAg
YWRkSXRlbShNYW5pcHVsYXRpb25JdGVtRGF0YSB7IFBvc2l0aW9uKCksIFBvc2l0aW9uKCksIG1h
a2VXZWFrUHRyKGN1cnJlbnRFbGVtZW50KSwgbnVsbFFOYW1lKCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICB7IE1hbmlwdWxhdGlvblRva2VuIHsgbV90b2tlbklkZW50aWZpZXIuZ2VuZXJhdGUo
KSwgY3VycmVudEVsZW1lbnQudGV4dENvbnRlbnQoKSB9IH0gfSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICB7IE1hbmlwdWxhdGlvblRva2VuIHsgbV90b2tlbklkZW50aWZpZXIuZ2VuZXJhdGUo
KSwgY3VycmVudEVsZW1lbnQudGV4dENvbnRlbnQoKSwgdG9rZW5JbmZvKCZjdXJyZW50RWxlbWVu
dCkgfSB9IH0pOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAoY3VycmVu
dEVsZW1lbnQuaGFzQXR0cmlidXRlcygpKSB7CiAgICAgICAgICAgICAgICAgICAgIGZvciAoYXV0
byYgYXR0cmlidXRlIDogY3VycmVudEVsZW1lbnQuYXR0cmlidXRlc0l0ZXJhdG9yKCkpIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0F0dHJpYnV0ZUZvclRleHRNYW5pcHVsYXRpb24o
YXR0cmlidXRlLm5hbWUoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRJdGVt
KE1hbmlwdWxhdGlvbkl0ZW1EYXRhIHsgUG9zaXRpb24oKSwgUG9zaXRpb24oKSwgbWFrZVdlYWtQ
dHIoY3VycmVudEVsZW1lbnQpLCBhdHRyaWJ1dGUubmFtZSgpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB7IE1hbmlwdWxhdGlvblRva2VuIHsgbV90b2tlbklkZW50aWZpZXIuZ2Vu
ZXJhdGUoKSwgYXR0cmlidXRlLnZhbHVlKCkgfSB9IH0pOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB7IE1hbmlwdWxhdGlvblRva2VuIHsgbV90b2tlbklkZW50aWZpZXIuZ2VuZXJh
dGUoKSwgYXR0cmlidXRlLnZhbHVlKCksIHRva2VuSW5mbygmY3VycmVudEVsZW1lbnQpIH0gfSB9
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIH0KQEAgLTM0Niw3ICszNjEsNyBAQCB2b2lkIFRleHRNYW5pcHVsYXRpb25D
b250cm9sbGVyOjpvYnNlcnZlUGFyYWdyYXBocyhjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0
CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgICAgIGVuZE9mQ3VycmVudFBh
cmFncmFwaCA9IGN1cnJlbnRFbmRPZkN1cnJlbnRQYXJhZ3JhcGg7Ci0gICAgICAgICAgICB0b2tl
bnNJbkN1cnJlbnRQYXJhZ3JhcGguYXBwZW5kKE1hbmlwdWxhdGlvblRva2VuIHsgbV90b2tlbklk
ZW50aWZpZXIuZ2VuZXJhdGUoKSwgIltdIiwgdHJ1ZSB9KTsKKyAgICAgICAgICAgIHRva2Vuc0lu
Q3VycmVudFBhcmFncmFwaC5hcHBlbmQoTWFuaXB1bGF0aW9uVG9rZW4geyBtX3Rva2VuSWRlbnRp
Zmllci5nZW5lcmF0ZSgpLCAiW10iLCB0b2tlbkluZm8oY29udGVudC5ub2RlLmdldCgpKSwgdHJ1
ZSB9KTsKIAogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KQEAgLTM2NSw3ICszODAs
NyBAQCB2b2lkIFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpvYnNlcnZlUGFyYWdyYXBocyhj
b25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0CiAgICAgICAgICAgICAgICAgaWYgKHRva2Vuc0lu
Q3VycmVudFBhcmFncmFwaC5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgICAgIHN0YXJ0T2ZD
dXJyZW50UGFyYWdyYXBoID0gUG9zaXRpb24oJnRleHROb2RlLCBzdGFydE9mQ3VycmVudExpbmUp
OwogCi0gICAgICAgICAgICAgICAgdG9rZW5zSW5DdXJyZW50UGFyYWdyYXBoLmFwcGVuZChNYW5p
cHVsYXRpb25Ub2tlbiB7IG1fdG9rZW5JZGVudGlmaWVyLmdlbmVyYXRlKCksIHN0cmluZ1VudGls
RW5kT2ZMaW5lLCBleGNsdXNpb25SdWxlTWF0Y2hlci5pc0V4Y2x1ZGVkKGNvbnRlbnQubm9kZS5n
ZXQoKSkgfSk7CisgICAgICAgICAgICAgICAgdG9rZW5zSW5DdXJyZW50UGFyYWdyYXBoLmFwcGVu
ZChNYW5pcHVsYXRpb25Ub2tlbiB7IG1fdG9rZW5JZGVudGlmaWVyLmdlbmVyYXRlKCksIHN0cmlu
Z1VudGlsRW5kT2ZMaW5lLCB0b2tlbkluZm8oJnRleHROb2RlKSwgZXhjbHVzaW9uUnVsZU1hdGNo
ZXIuaXNFeGNsdWRlZChjb250ZW50Lm5vZGUuZ2V0KCkpIH0pOwogICAgICAgICAgICAgfQogCiAg
ICAgICAgICAgICBpZiAoIXRva2Vuc0luQ3VycmVudFBhcmFncmFwaC5pc0VtcHR5KCkpIHsKQEAg
LTM4NSw3ICs0MDAsNyBAQCB2b2lkIFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpvYnNlcnZl
UGFyYWdyYXBocyhjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0CiAgICAgICAgICAgICAgICAg
ICAgIHN0YXJ0T2ZDdXJyZW50UGFyYWdyYXBoID0gaXRlcmF0b3Iuc3RhcnRQb3NpdGlvbigpOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgZW5kT2ZDdXJyZW50UGFyYWdyYXBoID0gaXRlcmF0
b3IuZW5kUG9zaXRpb24oKTsKLSAgICAgICAgICAgIHRva2Vuc0luQ3VycmVudFBhcmFncmFwaC5h
cHBlbmQoTWFuaXB1bGF0aW9uVG9rZW4geyBtX3Rva2VuSWRlbnRpZmllci5nZW5lcmF0ZSgpLCBy
ZW1haW5pbmdUZXh0LnRvU3RyaW5nKCksIGV4Y2x1c2lvblJ1bGVNYXRjaGVyLmlzRXhjbHVkZWQo
Y29udGVudC5ub2RlLmdldCgpKSB9KTsKKyAgICAgICAgICAgIHRva2Vuc0luQ3VycmVudFBhcmFn
cmFwaC5hcHBlbmQoTWFuaXB1bGF0aW9uVG9rZW4geyBtX3Rva2VuSWRlbnRpZmllci5nZW5lcmF0
ZSgpLCByZW1haW5pbmdUZXh0LnRvU3RyaW5nKCksIHRva2VuSW5mbyhjb250ZW50Lm5vZGUuZ2V0
KCkpLCBleGNsdXNpb25SdWxlTWF0Y2hlci5pc0V4Y2x1ZGVkKGNvbnRlbnQubm9kZS5nZXQoKSkg
fSk7CiAgICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuaAppbmRleCBjN2NkODY0OTU3NzFjNjgzOTM4Zjk1
NzQxZTM1Njg4YTg0ZTkyZWVmLi5iNWQzYTY5ZDBmZjkxZGY3MmUwZTU5YTA2NWM1N2QwYzVhNzYy
NjkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRNYW5pcHVsYXRpb25D
b250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9u
Q29udHJvbGxlci5oCkBAIC00OCw5ICs0OCwxOSBAQCBwdWJsaWM6CiAgICAgZW51bSBUb2tlbklk
ZW50aWZpZXJUeXBlIHsgfTsKICAgICB1c2luZyBUb2tlbklkZW50aWZpZXIgPSBPYmplY3RJZGVu
dGlmaWVyPFRva2VuSWRlbnRpZmllclR5cGU+OwogCisgICAgc3RydWN0IE1hbmlwdWxhdGlvblRv
a2VuSW5mbyB7CisgICAgICAgIFN0cmluZyB0YWdOYW1lOworICAgICAgICBTdHJpbmcgcm9sZUF0
dHJpYnV0ZTsKKyAgICAgICAgVVJMIGRvY3VtZW50VVJMOworCisgICAgICAgIHRlbXBsYXRlPGNs
YXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICAgICAgdGVtcGxh
dGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFsPE1hbmlwdWxhdGlvblRva2VuSW5mbz4g
ZGVjb2RlKERlY29kZXImKTsKKyAgICB9OworCiAgICAgc3RydWN0IE1hbmlwdWxhdGlvblRva2Vu
IHsKICAgICAgICAgVG9rZW5JZGVudGlmaWVyIGlkZW50aWZpZXI7CiAgICAgICAgIFN0cmluZyBj
b250ZW50OworICAgICAgICBPcHRpb25hbDxNYW5pcHVsYXRpb25Ub2tlbkluZm8+IGluZm87CiAg
ICAgICAgIGJvb2wgaXNFeGNsdWRlZCB7IGZhbHNlIH07CiAKICAgICAgICAgdGVtcGxhdGU8Y2xh
c3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwpAQCAtMTU3LDEwICsxNjcs
MzQgQEAgcHJpdmF0ZToKICAgICBUb2tlbklkZW50aWZpZXIgbV90b2tlbklkZW50aWZpZXI7CiB9
OwogCit0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgordm9pZCBUZXh0TWFuaXB1bGF0aW9uQ29udHJv
bGxlcjo6TWFuaXB1bGF0aW9uVG9rZW5JbmZvOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29u
c3QKK3sKKyAgICBlbmNvZGVyIDw8IHRhZ05hbWU7CisgICAgZW5jb2RlciA8PCByb2xlQXR0cmli
dXRlOworICAgIGVuY29kZXIgPDwgZG9jdW1lbnRVUkw7Cit9CisKK3RlbXBsYXRlPGNsYXNzIERl
Y29kZXI+CitPcHRpb25hbDxUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9u
VG9rZW5JbmZvPiBUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9uVG9rZW5J
bmZvOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBNYW5pcHVsYXRpb25Ub2tlbklu
Zm8gcmVzdWx0OworICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnRhZ05hbWUpKQorICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1
bHQucm9sZUF0dHJpYnV0ZSkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5kb2N1bWVudFVSTCkpCisgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiB0ZW1wbGF0ZTxjbGFzcyBF
bmNvZGVyPgogdm9pZCBUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9uVG9r
ZW46OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogewotICAgIGVuY29kZXIgPDwgaWRl
bnRpZmllciA8PCBjb250ZW50IDw8IGlzRXhjbHVkZWQ7CisgICAgZW5jb2RlciA8PCBpZGVudGlm
aWVyIDw8IGNvbnRlbnQgPDwgaW5mbyA8PCBpc0V4Y2x1ZGVkOwogfQogCiB0ZW1wbGF0ZTxjbGFz
cyBEZWNvZGVyPgpAQCAtMTcxLDYgKzIwNSw4IEBAIE9wdGlvbmFsPFRleHRNYW5pcHVsYXRpb25D
b250cm9sbGVyOjpNYW5pcHVsYXRpb25Ub2tlbj4gVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsCiAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1
bHQuY29udGVudCkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZShyZXN1bHQuaW5mbykpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAg
ICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuaXNFeGNsdWRlZCkpCiAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAgICAgcmV0dXJuIHJlc3VsdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCmluZGV4IDg4Yzk1ZGRlY2ZkNDY4ZWNjMzU4
ZjZlYmM1ODlkZWQ2YTA5ZDU1MzguLjYxMTM1OTE2MGE0NDhkMzQ0ZjMwZmFlMzBmOWQwYzI5Yzhm
MjNjYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dl
YlZpZXcubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmll
dy5tbQpAQCAtMTYwNiw2ICsxNjA2LDIyIEBAIC0gKHZvaWQpX3NldFRleHRNYW5pcHVsYXRpb25E
ZWxlZ2F0ZTooaWQgPF9XS1RleHRNYW5pcHVsYXRpb25EZWxlZ2F0ZT4pZGVsZWdhdGUKICAgICBf
dGV4dE1hbmlwdWxhdGlvbkRlbGVnYXRlID0gZGVsZWdhdGU7CiB9CiAKK3N0YXRpYyBSZXRhaW5Q
dHI8TlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIGlkPj4gY3JlYXRlVXNlckluZm8oY29uc3QgT3B0
aW9uYWw8V2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Ok1hbmlwdWxhdGlvblRv
a2VuSW5mbz4mIGluZm8pCit7CisgICAgaWYgKCFpbmZvKQorICAgICAgICByZXR1cm4geyB9Owor
CisgICAgYXV0byByZXN1bHQgPSBhZG9wdE5TKFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10g
aW5pdFdpdGhDYXBhY2l0eTozXSk7CisgICAgaWYgKCFpbmZvLT5kb2N1bWVudFVSTC5pc051bGwo
KSkKKyAgICAgICAgW3Jlc3VsdCBzZXRPYmplY3Q6KE5TVVJMICopaW5mby0+ZG9jdW1lbnRVUkwg
Zm9yS2V5Ol9XS1RleHRNYW5pcHVsYXRpb25Ub2tlblVzZXJJbmZvRG9jdW1lbnRVUkxLZXldOwor
ICAgIGlmICghaW5mby0+dGFnTmFtZS5pc051bGwoKSkKKyAgICAgICAgW3Jlc3VsdCBzZXRPYmpl
Y3Q6KE5TU3RyaW5nICopaW5mby0+dGFnTmFtZSBmb3JLZXk6X1dLVGV4dE1hbmlwdWxhdGlvblRv
a2VuVXNlckluZm9UYWdOYW1lS2V5XTsKKyAgICBpZiAoIWluZm8tPnJvbGVBdHRyaWJ1dGUuaXNO
dWxsKCkpCisgICAgICAgIFtyZXN1bHQgc2V0T2JqZWN0OihOU1N0cmluZyAqKWluZm8tPnJvbGVB
dHRyaWJ1dGUgZm9yS2V5Ol9XS1RleHRNYW5pcHVsYXRpb25Ub2tlblVzZXJJbmZvUm9sZUF0dHJp
YnV0ZUtleV07CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiAtICh2b2lkKV9zdGFydFRleHRN
YW5pcHVsYXRpb25zV2l0aENvbmZpZ3VyYXRpb246KF9XS1RleHRNYW5pcHVsYXRpb25Db25maWd1
cmF0aW9uICopY29uZmlndXJhdGlvbiBjb21wbGV0aW9uOih2b2lkKF4pKCkpY29tcGxldGlvbkhh
bmRsZXIKIHsKICAgICB1c2luZyBFeGNsdXNpb25SdWxlID0gV2ViQ29yZTo6VGV4dE1hbmlwdWxh
dGlvbkNvbnRyb2xsZXI6OkV4Y2x1c2lvblJ1bGU7CkBAIC0xNjQzLDYgKzE2NTksNyBAQCAtICh2
b2lkKV9zdGFydFRleHRNYW5pcHVsYXRpb25zV2l0aENvbmZpZ3VyYXRpb246KF9XS1RleHRNYW5p
cHVsYXRpb25Db25maWd1cmF0aQogICAgICAgICAgICAgICAgIFt3a1Rva2VuIHNldElkZW50aWZp
ZXI6U3RyaW5nOjpudW1iZXIodG9rZW4uaWRlbnRpZmllci50b1VJbnQ2NCgpKV07CiAgICAgICAg
ICAgICAgICAgW3drVG9rZW4gc2V0Q29udGVudDp0b2tlbi5jb250ZW50XTsKICAgICAgICAgICAg
ICAgICBbd2tUb2tlbiBzZXRFeGNsdWRlZDp0b2tlbi5pc0V4Y2x1ZGVkXTsKKyAgICAgICAgICAg
ICAgICBbd2tUb2tlbiBzZXRVc2VySW5mbzpjcmVhdGVVc2VySW5mbyh0b2tlbi5pbmZvKS5nZXQo
KV07CiAgICAgICAgICAgICAgICAgcmV0dXJuIHdrVG9rZW47CiAgICAgICAgICAgICB9KTsKICAg
ICAgICAgICAgIHJldHVybiBhZG9wdE5TKFtbX1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0gYWxsb2Nd
IGluaXRXaXRoSWRlbnRpZmllcjpTdHJpbmc6Om51bWJlcihpdGVtLmlkZW50aWZpZXIudG9VSW50
NjQoKSkgdG9rZW5zOnRva2Vucy5nZXQoKV0pOwpAQCAtMTY4MCw3ICsxNjk3LDcgQEAgLSAodm9p
ZClfY29tcGxldGVUZXh0TWFuaXB1bGF0aW9uOihfV0tUZXh0TWFuaXB1bGF0aW9uSXRlbSAqKWl0
ZW0gY29tcGxldGlvbjoodm8KIAogICAgIFZlY3RvcjxXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9u
Q29udHJvbGxlcjo6TWFuaXB1bGF0aW9uVG9rZW4+IHRva2VuczsKICAgICBmb3IgKF9XS1RleHRN
YW5pcHVsYXRpb25Ub2tlbiAqd2tUb2tlbiBpbiBpdGVtLnRva2VucykKLSAgICAgICAgdG9rZW5z
LmFwcGVuZChXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9u
VG9rZW4geyBjb3JlVGV4dE1hbmlwdWxhdGlvblRva2VuSWRlbnRpZmllckZyb21TdHJpbmcod2tU
b2tlbi5pZGVudGlmaWVyKSwgd2tUb2tlbi5jb250ZW50IH0pOworICAgICAgICB0b2tlbnMuYXBw
ZW5kKFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpNYW5pcHVsYXRpb25Ub2tl
biB7IGNvcmVUZXh0TWFuaXB1bGF0aW9uVG9rZW5JZGVudGlmaWVyRnJvbVN0cmluZyh3a1Rva2Vu
LmlkZW50aWZpZXIpLCB3a1Rva2VuLmNvbnRlbnQsIFdURjo6bnVsbG9wdCB9KTsKIAogICAgIFZl
Y3RvcjxXZWJDb3JlOjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9uSXRl
bT4gY29yZUl0ZW1zOwogICAgIGNvcmVJdGVtcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KDEpOwpA
QCAtMTczOSw3ICsxNzU2LDcgQEAgLSAodm9pZClfY29tcGxldGVUZXh0TWFuaXB1bGF0aW9uRm9y
SXRlbXM6KE5TQXJyYXk8X1dLVGV4dE1hbmlwdWxhdGlvbkl0ZW0gKj4gKikKICAgICAgICAgVmVj
dG9yPFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpNYW5pcHVsYXRpb25Ub2tl
bj4gY29yZVRva2VuczsKICAgICAgICAgY29yZVRva2Vucy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5
KHdrSXRlbS50b2tlbnMuY291bnQpOwogICAgICAgICBmb3IgKF9XS1RleHRNYW5pcHVsYXRpb25U
b2tlbiAqd2tUb2tlbiBpbiB3a0l0ZW0udG9rZW5zKQotICAgICAgICAgICAgY29yZVRva2Vucy51
bmNoZWNrZWRBcHBlbmQoV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6Ok1hbmlw
dWxhdGlvblRva2VuIHsgY29yZVRleHRNYW5pcHVsYXRpb25Ub2tlbklkZW50aWZpZXJGcm9tU3Ry
aW5nKHdrVG9rZW4uaWRlbnRpZmllciksIHdrVG9rZW4uY29udGVudCB9KTsKKyAgICAgICAgICAg
IGNvcmVUb2tlbnMudW5jaGVja2VkQXBwZW5kKFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250
cm9sbGVyOjpNYW5pcHVsYXRpb25Ub2tlbiB7IGNvcmVUZXh0TWFuaXB1bGF0aW9uVG9rZW5JZGVu
dGlmaWVyRnJvbVN0cmluZyh3a1Rva2VuLmlkZW50aWZpZXIpLCB3a1Rva2VuLmNvbnRlbnQsIFdU
Rjo6bnVsbG9wdCB9KTsKICAgICAgICAgY29yZUl0ZW1zLnVuY2hlY2tlZEFwcGVuZChXZWJDb3Jl
OjpUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6TWFuaXB1bGF0aW9uSXRlbSB7IGNvcmVUZXh0
TWFuaXB1bGF0aW9uSXRlbUlkZW50aWZpZXJGcm9tU3RyaW5nKHdrSXRlbS5pZGVudGlmaWVyKSwg
V1RGTW92ZShjb3JlVG9rZW5zKSB9KTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4uaCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4uaApp
bmRleCAxZjJlODZmMmI2ODY4OGMyMzFjNDAyNTY5Yjg3MjM4YTczNjE2YWQ2Li41ZjkyNTY2OTg5
YWZhYmFhMDgzNmJmMmRiM2Y1ZDQ3OGRlNWI0MDBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVGV4dE1hbmlwdWxhdGlvblRva2VuLmgKKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1RleHRNYW5pcHVsYXRpb25Ub2tlbi5o
CkBAIC0yOCw2ICsyOCwxMCBAQAogCiBOU19BU1NVTUVfTk9OTlVMTF9CRUdJTgogCitXS19FWFRF
Uk4gTlNTdHJpbmcgKiBjb25zdCBfV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW5Vc2VySW5mb0RvY3Vt
ZW50VVJMS2V5IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1Nf
VEJBKSk7CitXS19FWFRFUk4gTlNTdHJpbmcgKiBjb25zdCBfV0tUZXh0TWFuaXB1bGF0aW9uVG9r
ZW5Vc2VySW5mb1RhZ05hbWVLZXkgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwg
aW9zKFdLX0lPU19UQkEpKTsKK1dLX0VYVEVSTiBOU1N0cmluZyAqIGNvbnN0IF9XS1RleHRNYW5p
cHVsYXRpb25Ub2tlblVzZXJJbmZvUm9sZUF0dHJpYnV0ZUtleSBXS19BUElfQVZBSUxBQkxFKG1h
Y29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOworCiBXS19DTEFTU19BVkFJTEFCTEUo
bWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSkKIEBpbnRlcmZhY2UgX1dLVGV4dE1h
bmlwdWxhdGlvblRva2VuIDogTlNPYmplY3QKIApAQCAtMzgsNiArNDIsOCBAQCBXS19DTEFTU19B
VkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSkKIC0gKEJPT0wpaXNF
cXVhbFRvVGV4dE1hbmlwdWxhdGlvblRva2VuOihudWxsYWJsZSBfV0tUZXh0TWFuaXB1bGF0aW9u
VG9rZW4gKilvdGhlclRva2VuIGluY2x1ZGluZ0NvbnRlbnRFcXVhbGl0eTooQk9PTClpbmNsdWRp
bmdDb250ZW50RXF1YWxpdHk7CiBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSwgcmVhZG9ubHkp
IE5TU3RyaW5nICpkZWJ1Z0Rlc2NyaXB0aW9uOwogCitAcHJvcGVydHkgKG5vbmF0b21pYywgbnVs
bGFibGUsIGNvcHkpIE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4gKnVzZXJJbmZvOworCiBA
ZW5kCiAKIE5TX0FTU1VNRV9OT05OVUxMX0VORApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0NvY29hL19XS1RleHRNYW5pcHVsYXRpb25Ub2tlbi5tbSBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4ubW0KaW5k
ZXggMTkyMzAwNDkzODgxODZmOWVhMWRmNDljMTlmZjJiNTQwZWJmNmM2YS4uODFiZTJmMjYwNjA3
YWI3NWUxZjNhMjY1OGE5ZmMwYWYxMjc3ZDM5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0NvY29hL19XS1RleHRNYW5pcHVsYXRpb25Ub2tlbi5tbQorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLVGV4dE1hbmlwdWxhdGlvblRva2VuLm1t
CkBAIC0yNiw3ICsyNiwxNSBAQAogI2ltcG9ydCAiY29uZmlnLmgiCiAjaW1wb3J0ICJfV0tUZXh0
TWFuaXB1bGF0aW9uVG9rZW4uaCIKIAotQGltcGxlbWVudGF0aW9uIF9XS1RleHRNYW5pcHVsYXRp
b25Ub2tlbgorI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgorCitOU1N0cmluZyAqIGNvbnN0IF9X
S1RleHRNYW5pcHVsYXRpb25Ub2tlblVzZXJJbmZvRG9jdW1lbnRVUkxLZXkgPSBAIl9XS1RleHRN
YW5pcHVsYXRpb25Ub2tlblVzZXJJbmZvRG9jdW1lbnRVUkxLZXkiOworTlNTdHJpbmcgKiBjb25z
dCBfV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW5Vc2VySW5mb1RhZ05hbWVLZXkgPSBAIl9XS1RleHRN
YW5pcHVsYXRpb25Ub2tlblVzZXJJbmZvVGFnTmFtZUtleSI7CitOU1N0cmluZyAqIGNvbnN0IF9X
S1RleHRNYW5pcHVsYXRpb25Ub2tlblVzZXJJbmZvUm9sZUF0dHJpYnV0ZUtleSA9IEAiX1dLVGV4
dE1hbmlwdWxhdGlvblRva2VuVXNlckluZm9Sb2xlQXR0cmlidXRlS2V5IjsKKworQGltcGxlbWVu
dGF0aW9uIF9XS1RleHRNYW5pcHVsYXRpb25Ub2tlbiB7CisgICAgUmV0YWluUHRyPE5TRGljdGlv
bmFyeTxOU1N0cmluZyAqLCBpZD4+IF91c2VySW5mbzsKK30KIAogLSAodm9pZClkZWFsbG9jCiB7
CkBAIC0zOCw2ICs0NiwxOSBAQCAtICh2b2lkKWRlYWxsb2MKICAgICBbc3VwZXIgZGVhbGxvY107
CiB9CiAKKy0gKHZvaWQpc2V0VXNlckluZm86KE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBpZD4g
Kil1c2VySW5mbworeworICAgIGlmICh1c2VySW5mbyA9PSBfdXNlckluZm8gfHwgW191c2VySW5m
byBpc0VxdWFsOnVzZXJJbmZvXSkKKyAgICAgICAgcmV0dXJuOworCisgICAgX3VzZXJJbmZvID0g
YWRvcHROUyh1c2VySW5mby5jb3B5KTsKK30KKworLSAoTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICos
IGlkPiAqKXVzZXJJbmZvCit7CisgICAgcmV0dXJuIF91c2VySW5mby5nZXQoKTsKK30KKwogc3Rh
dGljIEJPT0wgaXNFcXVhbE9yQm90aE5pbChpZCBhLCBpZCBiKQogewogICAgIGlmIChhID09IGIp
CkBAIC02NSw4ICs4Niw5IEBAIC0gKEJPT0wpaXNFcXVhbFRvVGV4dE1hbmlwdWxhdGlvblRva2Vu
OihfV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW4gKilvdGhlclRva2VuIGluCiAgICAgQk9PTCBlcXVh
bElkZW50aWZpZXJzID0gaXNFcXVhbE9yQm90aE5pbChzZWxmLmlkZW50aWZpZXIsIG90aGVyVG9r
ZW4uaWRlbnRpZmllcik7CiAgICAgQk9PTCBlcXVhbEV4Y2x1c2lvbiA9IHNlbGYuaXNFeGNsdWRl
ZCA9PSBvdGhlclRva2VuLmlzRXhjbHVkZWQ7CiAgICAgQk9PTCBlcXVhbENvbnRlbnQgPSAhaW5j
bHVkaW5nQ29udGVudEVxdWFsaXR5IHx8IGlzRXF1YWxPckJvdGhOaWwoc2VsZi5jb250ZW50LCBv
dGhlclRva2VuLmNvbnRlbnQpOworICAgIEJPT0wgZXF1YWxVc2VySW5mbyA9IGlzRXF1YWxPckJv
dGhOaWwoc2VsZi51c2VySW5mbywgb3RoZXJUb2tlbi51c2VySW5mbyk7CiAKLSAgICByZXR1cm4g
ZXF1YWxJZGVudGlmaWVycyAmJiBlcXVhbEV4Y2x1c2lvbiAmJiBlcXVhbENvbnRlbnQ7CisgICAg
cmV0dXJuIGVxdWFsSWRlbnRpZmllcnMgJiYgZXF1YWxFeGNsdXNpb24gJiYgZXF1YWxDb250ZW50
ICYmIGVxdWFsVXNlckluZm87CiB9CiAKIC0gKE5TU3RyaW5nICopZGVzY3JpcHRpb24KQEAgLTg1
LDcgKzEwNyw3IEBAIC0gKE5TU3RyaW5nICopX2Rlc2NyaXB0aW9uUHJlc2VydmluZ1ByaXZhY3k6
KEJPT0wpcHJlc2VydmVQcml2YWN5CiAgICAgaWYgKHByZXNlcnZlUHJpdmFjeSkKICAgICAgICAg
W2Rlc2NyaXB0aW9uIGFwcGVuZEZvcm1hdDpAIjsgY29udGVudCBsZW5ndGggPSAlbHUiLCAodW5z
aWduZWQgbG9uZylzZWxmLmNvbnRlbnQubGVuZ3RoXTsKICAgICBlbHNlCi0gICAgICAgIFtkZXNj
cmlwdGlvbiBhcHBlbmRGb3JtYXQ6QCI7IGNvbnRlbnQgPSAlQCIsIHNlbGYuY29udGVudF07Cisg
ICAgICAgIFtkZXNjcmlwdGlvbiBhcHBlbmRGb3JtYXQ6QCI7IGNvbnRlbnQgPSAlQDsgdXNlciBp
bmZvID0gJUAiLCBzZWxmLmNvbnRlbnQsIHNlbGYudXNlckluZm9dOwogCiAgICAgW2Rlc2NyaXB0
aW9uIGFwcGVuZFN0cmluZzpAIj4iXTsKIApkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIv
VG9vbHMvQ2hhbmdlTG9nCmluZGV4IGQ2MTViMmFmNWI3MjFhM2EzYmI4NzBjYjY1MGYwYmI3YzE0
N2UzZGQuLmVhZTQyM2IzZTE1ZTY5ODdlNjMwYjdhMDliNDkyODM1Nzc5Y2FlODMgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBA
QAorMjAyMC0wNC0yOCAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KKwor
ICAgICAgICBbVGV4dCBtYW5pcHVsYXRpb25dIEFkZCBhIHVzZXJJbmZvIGRpY3Rpb25hcnkgdG8g
X1dLVGV4dE1hbmlwdWxhdGlvblRva2VuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMTExNTEKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzYyMzI5NTM0
PgorCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgIEFkZCBhIG5l
dyBBUEkgdGVzdCB0byBjaGVjayB0aGUgdXNlckluZm8gZGljdGlvbmFyeSBvbiB0ZXh0IG1hbmlw
dWxhdGlvbiB0b2tlbnMuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL1RleHRNYW5pcHVsYXRpb24ubW06CisKIDIwMjAtMDQtMjggIEthdGUgQ2hlbmV5ICA8a2F0
aGVyaW5lX2NoZW5leUBhcHBsZS5jb20+CiAKICAgICAgICAgQ3JlYXRlIGEgbWVjaGFuaXNtIHRv
IGFkZCBtaXNzaW5nIElUUCBEYXRhYmFzZSB0YWJsZXMgd2hlbiB0aGUgc2NoZW1hIGlzIHVwZGF0
ZWQKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVGV4
dE1hbmlwdWxhdGlvbi5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
VGV4dE1hbmlwdWxhdGlvbi5tbQppbmRleCAzNGNkZjlhZGRkYWQzYzgzZmQyYTcxMzE1MzJmNDhm
NmNkMzIxMmQyLi4zMWNmMWNhZmEwZjU1ZDU0ODI2NzViYjdiZGRiYjJkYTQ2MjdkZGE4IDEwMDY0
NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1RleHRNYW5pcHVs
YXRpb24ubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9UZXh0
TWFuaXB1bGF0aW9uLm1tCkBAIC03MDQsNiArNzA0LDU5IEBAIFRFU1QoVGV4dE1hbmlwdWxhdGlv
biwgU3RhcnRUZXh0TWFuaXB1bGF0aW9uVHJlYXRzTGlua3NJbk5hdmlnYXRpb25FbGVtZW50c0Fz
UGFyCiAgICAgRVhQRUNUX1dLX1NUUkVRKCJHYXJwbHkiLCBpdGVtc1szXS50b2tlbnNbMF0uY29u
dGVudCk7CiB9CiAKK1RFU1QoVGV4dE1hbmlwdWxhdGlvbiwgU3RhcnRUZXh0TWFuaXB1bGF0aW9u
RXh0cmFjdHNVc2VySW5mbykKK3sKKyAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW1RleHRN
YW5pcHVsYXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOworICAgIGF1dG8gd2ViVmlldyA9IGFk
b3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwg
MCwgNDAwLCA0MDApXSk7CisgICAgW3dlYlZpZXcgX3NldFRleHRNYW5pcHVsYXRpb25EZWxlZ2F0
ZTpkZWxlZ2F0ZS5nZXQoKV07CisKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZEhUTUxT
dHJpbmc6QCI8IURPQ1RZUEUgaHRtbD4iCisgICAgICAgICI8Ym9keT4iCisgICAgICAgICIgICAg
PHRpdGxlPlRoaXMgaXMgYSB0ZXN0PC90aXRsZT4iCisgICAgICAgICIgICAgPHA+Rmlyc3Q8L3A+
IgorICAgICAgICAiICAgIDxkaXYgcm9sZT0nYnV0dG9uJz5TZWNvbmQ8L2Rpdj4iCisgICAgICAg
ICIgICAgPHNwYW4+VGhpcmQ8L3NwYW4+IgorICAgICAgICAiPC9ib2R5PiJdOworCisgICAgZG9u
ZSA9IGZhbHNlOworICAgIFt3ZWJWaWV3IF9zdGFydFRleHRNYW5pcHVsYXRpb25zV2l0aENvbmZp
Z3VyYXRpb246bmlsIGNvbXBsZXRpb246XnsKKyAgICAgICAgZG9uZSA9IHRydWU7CisgICAgfV07
CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsKKworICAgIGF1dG8gaXRlbXMg
PSBbZGVsZWdhdGUgaXRlbXNdOworICAgIEVYUEVDVF9FUShpdGVtcy5jb3VudCwgNFVMKTsKKyAg
ICBFWFBFQ1RfRVEoaXRlbXNbMF0udG9rZW5zLmNvdW50LCAxVUwpOworICAgIEVYUEVDVF9FUShp
dGVtc1sxXS50b2tlbnMuY291bnQsIDFVTCk7CisgICAgRVhQRUNUX0VRKGl0ZW1zWzJdLnRva2Vu
cy5jb3VudCwgMVVMKTsKKyAgICBFWFBFQ1RfRVEoaXRlbXNbM10udG9rZW5zLmNvdW50LCAxVUwp
OworICAgIEVYUEVDVF9XS19TVFJFUSgiVGhpcyBpcyBhIHRlc3QiLCBpdGVtc1swXS50b2tlbnNb
MF0uY29udGVudCk7CisgICAgRVhQRUNUX1dLX1NUUkVRKCJGaXJzdCIsIGl0ZW1zWzFdLnRva2Vu
c1swXS5jb250ZW50KTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoIlNlY29uZCIsIGl0ZW1zWzJdLnRv
a2Vuc1swXS5jb250ZW50KTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoIlRoaXJkIiwgaXRlbXNbM10u
dG9rZW5zWzBdLmNvbnRlbnQpOworICAgIHsKKyAgICAgICAgYXV0byB1c2VySW5mbyA9IGl0ZW1z
WzBdLnRva2Vuc1swXS51c2VySW5mbzsKKyAgICAgICAgRVhQRUNUX1dLX1NUUkVRKCJUZXN0V2Vi
S2l0QVBJLnJlc291cmNlcyIsIFsoTlNVUkwgKil1c2VySW5mb1tfV0tUZXh0TWFuaXB1bGF0aW9u
VG9rZW5Vc2VySW5mb0RvY3VtZW50VVJMS2V5XSBsYXN0UGF0aENvbXBvbmVudF0pOworICAgICAg
ICBFWFBFQ1RfV0tfU1RSRVEoIlRJVExFIiwgKE5TU3RyaW5nICopdXNlckluZm9bX1dLVGV4dE1h
bmlwdWxhdGlvblRva2VuVXNlckluZm9UYWdOYW1lS2V5XSk7CisgICAgfQorICAgIHsKKyAgICAg
ICAgYXV0byB1c2VySW5mbyA9IGl0ZW1zWzFdLnRva2Vuc1swXS51c2VySW5mbzsKKyAgICAgICAg
RVhQRUNUX1dLX1NUUkVRKCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyIsIFsoTlNVUkwgKil1c2Vy
SW5mb1tfV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW5Vc2VySW5mb0RvY3VtZW50VVJMS2V5XSBsYXN0
UGF0aENvbXBvbmVudF0pOworICAgICAgICBFWFBFQ1RfV0tfU1RSRVEoIlAiLCAoTlNTdHJpbmcg
Kil1c2VySW5mb1tfV0tUZXh0TWFuaXB1bGF0aW9uVG9rZW5Vc2VySW5mb1RhZ05hbWVLZXldKTsK
KyAgICB9CisgICAgeworICAgICAgICBhdXRvIHVzZXJJbmZvID0gaXRlbXNbMl0udG9rZW5zWzBd
LnVzZXJJbmZvOworICAgICAgICBFWFBFQ1RfV0tfU1RSRVEoIlRlc3RXZWJLaXRBUEkucmVzb3Vy
Y2VzIiwgWyhOU1VSTCAqKXVzZXJJbmZvW19XS1RleHRNYW5pcHVsYXRpb25Ub2tlblVzZXJJbmZv
RG9jdW1lbnRVUkxLZXldIGxhc3RQYXRoQ29tcG9uZW50XSk7CisgICAgICAgIEVYUEVDVF9XS19T
VFJFUSgiRElWIiwgKE5TU3RyaW5nICopdXNlckluZm9bX1dLVGV4dE1hbmlwdWxhdGlvblRva2Vu
VXNlckluZm9UYWdOYW1lS2V5XSk7CisgICAgICAgIEVYUEVDVF9XS19TVFJFUSgiYnV0dG9uIiwg
KE5TU3RyaW5nICopdXNlckluZm9bX1dLVGV4dE1hbmlwdWxhdGlvblRva2VuVXNlckluZm9Sb2xl
QXR0cmlidXRlS2V5XSk7CisgICAgfQorICAgIHsKKyAgICAgICAgYXV0byB1c2VySW5mbyA9IGl0
ZW1zWzNdLnRva2Vuc1swXS51c2VySW5mbzsKKyAgICAgICAgRVhQRUNUX1dLX1NUUkVRKCJUZXN0
V2ViS2l0QVBJLnJlc291cmNlcyIsIFsoTlNVUkwgKil1c2VySW5mb1tfV0tUZXh0TWFuaXB1bGF0
aW9uVG9rZW5Vc2VySW5mb0RvY3VtZW50VVJMS2V5XSBsYXN0UGF0aENvbXBvbmVudF0pOworICAg
ICAgICBFWFBFQ1RfV0tfU1RSRVEoIlNQQU4iLCAoTlNTdHJpbmcgKil1c2VySW5mb1tfV0tUZXh0
TWFuaXB1bGF0aW9uVG9rZW5Vc2VySW5mb1RhZ05hbWVLZXldKTsKKyAgICB9Cit9CisKIHN0cnVj
dCBUb2tlbiB7CiAgICAgTlNTdHJpbmcgKmlkZW50aWZpZXI7CiAgICAgTlNTdHJpbmcgKmNvbnRl
bnQ7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>