<?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>225368</bug_id>
          
          <creation_ts>2021-05-04 15:18:45 -0700</creation_ts>
          <short_desc>Streamline codec parsing, replacing uses of HashMap with SortedArrayMap</short_desc>
          <delta_ts>2021-05-06 16:57:21 -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>Media</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P3</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>jer.noble</cc>
    
    <cc>philipj</cc>
    
    <cc>sam</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1756686</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-05-04 15:18:45 -0700</bug_when>
    <thetext>Streamline codec parsing, replacing uses of HashMap with SortedArrayMap</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1756699</commentid>
    <comment_count>1</comment_count>
      <attachid>427706</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-05-04 15:55:40 -0700</bug_when>
    <thetext>Created attachment 427706
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1756775</commentid>
    <comment_count>2</comment_count>
      <attachid>427725</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-05-04 18:58:41 -0700</bug_when>
    <thetext>Created attachment 427725
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1756785</commentid>
    <comment_count>3</comment_count>
      <attachid>427727</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-05-04 19:46:00 -0700</bug_when>
    <thetext>Created attachment 427727
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1756818</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-05-04 22:49:55 -0700</bug_when>
    <thetext>Passing all the EWS tests, so now looking for a reviewer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1757416</commentid>
    <comment_count>5</comment_count>
      <attachid>427727</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-06 08:36:40 -0700</bug_when>
    <thetext>Comment on attachment 427727
Patch

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

&gt; Source/WebCore/platform/graphics/HEVCUtilities.cpp:128
&gt; +    return makeOptionalFromPointer(typesMap.tryGet(string));

Should we just make tryGet() return an Optional? Or, perhaps have a version of tryGet that does? This seems like it could be a pretty common idiom? (though, as always, this kind of change can and should be left until there is actual evidence that we need to have duplicate copies of makeOptionalFromPointer()).

&gt; Source/WebCore/platform/graphics/cocoa/HEVCUtilitiesCocoa.mm:150
&gt; +    Vector&lt;uint16_t&gt; vector;
&gt; +    vector.reserveInitialCapacity(array.count);
&gt; +    for (id value in array) {

I think you could use compactMap() here. If you don&apos;t want to (or it doesn&apos;t work), a shinkToFit() after the loop is probably a good idea here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1757424</commentid>
    <comment_count>6</comment_count>
      <attachid>427727</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-05-06 08:48:40 -0700</bug_when>
    <thetext>Comment on attachment 427727
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/HEVCUtilities.cpp:128
&gt;&gt; +    return makeOptionalFromPointer(typesMap.tryGet(string));
&gt; 
&gt; Should we just make tryGet() return an Optional? Or, perhaps have a version of tryGet that does? This seems like it could be a pretty common idiom? (though, as always, this kind of change can and should be left until there is actual evidence that we need to have duplicate copies of makeOptionalFromPointer()).

I do keep running into the intersection between Optional and pointers; in a lot of cases the two are used almost interchangeably but they are not all that easy to convert between.

I can’t decide which is better for tryGet; the pointer lets us peek into the array, but the Optional has more clean object lifetime semantics for callers that don’t know about an underlying array as an implementation detail.

&gt;&gt; Source/WebCore/platform/graphics/cocoa/HEVCUtilitiesCocoa.mm:150
&gt;&gt; +    for (id value in array) {
&gt; 
&gt; I think you could use compactMap() here. If you don&apos;t want to (or it doesn&apos;t work), a shinkToFit() after the loop is probably a good idea here.

I don’t think either of those is right for this. This does not skip over invalid values, instead it fails and drops the vector if it encounters an invalid value. So the vector is always perfectly sized because of reserving the initial capacity and a shrink to fit is not needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1757432</commentid>
    <comment_count>7</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-05-06 09:08:25 -0700</bug_when>
    <thetext>Committed r277093 (237395@main): &lt;https://commits.webkit.org/237395@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 427727.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1757434</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-05-06 09:09:20 -0700</bug_when>
    <thetext>&lt;rdar://problem/77609399&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1757724</commentid>
    <comment_count>9</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-06 16:57:21 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #6)
&gt; Comment on attachment 427727 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=427727&amp;action=review
&gt; 
&gt; 
&gt; &gt;&gt; Source/WebCore/platform/graphics/cocoa/HEVCUtilitiesCocoa.mm:150
&gt; &gt;&gt; +    for (id value in array) {
&gt; &gt; 
&gt; &gt; I think you could use compactMap() here. If you don&apos;t want to (or it doesn&apos;t work), a shinkToFit() after the loop is probably a good idea here.
&gt; 
&gt; I don’t think either of those is right for this. This does not skip over
&gt; invalid values, instead it fails and drops the vector if it encounters an
&gt; invalid value. So the vector is always perfectly sized because of reserving
&gt; the initial capacity and a shrink to fit is not needed.


Oops. Indeed.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>427706</attachid>
            <date>2021-05-04 15:55:40 -0700</date>
            <delta_ts>2021-05-04 18:58:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225368-20210504155539.patch</filename>
            <type>text/plain</type>
            <size>64402</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc2OTc4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDI1Y2Q0NDMxYTVkYWI0ZThhZWJhMDFj
YmZjZTAxYWQzYjY0YzQ4YjQuLjc0ZWYzZDUzYjNmZmI5NDhhOTkyMTgwMzg2NzRmYTNiYjkwNDM3
OWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMjEtMDUtMDQgIERhcmluIEFkbGVyICA8ZGFyaW5A
YXBwbGUuY29tPgorCisgICAgICAgIFN0cmVhbWxpbmUgY29kZWMgcGFyc2luZywgcmVwbGFjaW5n
IHVzZXMgb2YgSGFzaE1hcCB3aXRoIFNvcnRlZEFycmF5TWFwCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjUzNjgKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHd0Zi9Tb3J0ZWRBcnJheU1hcC5oOiBNb3Zl
ZCBQYWNrZWRBU0NJSUxvd2VyQ29kZXMgaGVyZSBmb3IgcmV1c2UuCisgICAgICAgIFNsaWdodGx5
IHR3ZWFrZWQgQ29tcGFyYWJsZUFTQ0lJU3Vic2V0TGl0ZXJhbCB0byBtYXRjaCBiZXR0ZXIuCisK
IDIwMjEtMDUtMDQgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4K
IAogICAgICAgICBEb24ndCBpdGVyYXRlIE5ldHdvcmtQcm9jZXNzUHJveHk6Om1fd2Vic2l0ZURh
dGFTdG9yZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwppbmRleCBmYjQ2ZmU1ZWU1ZGZkODMyNjRkYTJjYTI1ZThiYzI5NGUw
ZDJlYzk1Li5kMWU1Y2ZhZjg5NWFkNmU4YWFhOGY4NTAyODg0NmFhY2I5MDE0YjliIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsOTUgQEAKKzIwMjEtMDUtMDQgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBw
bGUuY29tPgorCisgICAgICAgIFN0cmVhbWxpbmUgY29kZWMgcGFyc2luZywgcmVwbGFjaW5nIHVz
ZXMgb2YgSGFzaE1hcCB3aXRoIFNvcnRlZEFycmF5TWFwCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjUzNjgKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0hFVkNVdGlsaXRp
ZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VIRVZDQ29kZWNQYXJhbWV0ZXJzKTogVGFr
ZSBhIFN0cmluZ1ZpZXcgaW5zdGVhZCBvZiBhIFN0cmluZworICAgICAgICBmb3IgZ3JlYXRlciBm
bGV4aWJpbGl0eSBhbmQgZWZmaWNpZW5jeS4gRG9uJ3Qgc3RvcmUgY29kZWNOYW1lLCB3aGljaCBp
cworICAgICAgICBuZXZlciB1c2VkIGFmdGVyIHZlcmlmeWluZyB0aGF0IGl0IGlzIGEgbGVnYWwg
dmFsdWUgaGVyZS4gRG9uJ3Qgc3RvcmUgdGhlCisgICAgICAgIGdlbmVyYWxUaWVyRmxhZywgd2hp
Y2ggaXMgbmV2ZXIgdXNlZCBhZnRlciB2ZXJpZnlpbmcgdGhhdCBpdCBpcyBhIGxlZ2FsCisgICAg
ICAgIHZhbHVlIGhlcmUuIERvbid0IHN0b3JlIHRoZSBjb25zdHJhaW50IGZsYWdzLCB3aGljaCBh
cmUgbmV2ZXIgdXNlZCBhZnRlcgorICAgICAgICB2ZXJpZnlpbmcgdGhhdCB0aGV5IGFyZSBsZWdh
bCB2YWx1ZXMgaGVyZS4KKyAgICAgICAgKFdlYkNvcmU6Om1ha2VPcHRpb25hbEZyb21Qb2ludGVy
KTogQWRkZWQgdG8gbWFrZSBjb2RlIGJlbG93IGNsZWFuZXIuCisgICAgICAgIChXZWJDb3JlOjpw
YXJzZURvVmlDb2RlY1R5cGUpOiBSZW5hbWVkIGZyb20gY29kZWNTdHJpbmdGb3JEb1ZpQ29kZWNU
eXBlCisgICAgICAgIHNpbmNlIGl0IG5vdyByZXR1cm5zIGFuIGVudW1lcmF0aW9uIHZhbHVlIGlu
c3RlYWQgb2YgYSBzdHJpbmcuIEFsc28KKyAgICAgICAgdGFrZSBhIFN0cmluZ1ZpZXcgaW5zdGVh
ZCBvZiBhIFN0cmluZyBmb3IgZ3JlYXRlciBmbGV4aWJpbGl0eSBhbmQgZWZmaWNpZW5jeS4KKyAg
ICAgICAgQWxzbyB1c2UgYSBTb3J0ZWRBcnJheU1hcCBpbnN0ZWFkIG9mIGEgTWVtb3J5Q29tcGFj
dExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwLgorICAgICAgICAoV2ViQ29yZTo6cHJvZmlsZUlE
Rm9yQWxwaGFiZXRpY0RvVmlQcm9maWxlKTogVGFrZSBhIFN0cmluZ1ZpZXcgaW5zdGVhZCBvZgor
ICAgICAgICBhIFN0cmluZyBmb3IgZ3JlYXRlciBmbGV4aWJpbGl0eSBhbmQgZWZmaWNpZW5jeS4g
VXNlIGEgU29ydGVkQXJyYXlNYXAgaW5zdGVhZAorICAgICAgICBvZiBhIE1lbW9yeUNvbXBhY3RM
b29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcC4KKyAgICAgICAgKFdlYkNvcmU6OmlzVmFsaWRQcm9m
aWxlSURGb3JDb2RlYyk6IFRha2UgYSBjb2RlYyBlbnVtZXJhdGlvbiB2YWx1ZSBwYXJhbWV0ZXIK
KyAgICAgICAgaW5zdGVhZCBvZiBhIHN0cmluZy4KKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlRG9W
aUNvZGVjUGFyYW1ldGVycyk6IFRha2UgYSBTdHJpbmdWaWV3IGluc3RlYWQgb2YgYSBTdHJpbmcK
KyAgICAgICAgZm9yIGdyZWF0ZXIgZmxleGliaWxpdHkgYW5kIGVmZmljaWVuY3kuIFN0b3JlIHRo
ZSBjb2RlYyBhcyBhbiBlbnVtZXJhdGlvbgorICAgICAgICBpbnN0ZWFkIG9mIGEgU3RyaW5nLiBE
b24ndCBjcmVhdGUgYSB0ZW1wb3JhcnkgU3RyaW5nIGp1c3Qgc28gd2UgY2FuIGNhbGwgdGhlCisg
ICAgICAgIHByb2ZpbGVJREZvckFscGhhYmV0aWNEb1ZpUHJvZmlsZSBmdW5jdGlvbi4KKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0hFVkNVdGlsaXRpZXMuaDogUmVuYW1lZCBIRVZDUGFy
YW1ldGVyU2V0IGFuZAorICAgICAgICBEb1ZpUGFyYW1ldGVyU2V0IHRvIEhFVkNQYXJhbWV0ZXJz
IGFuZCBEb1ZpUGFyYW1ldGVycy4gVGhlIHdvcmQgInNldCIgaXMgbm90CisgICAgICAgIGhlbHBm
dWwgaW4gdGhlc2UgbmFtZXMuIFJlbW92ZWQgY29kZWNOYW1lLCBnZW5lcmFsVGllckZsYWcsIGFu
ZCBjb25zdHJhaW50RmxhZ3MKKyAgICAgICAgZnJvbSBIRVZDUGFyYW1ldGVyU2V0LiBDaGFuZ2Vk
IHRoZSBwYXJzZSBmdW5jdGlvbnMgdG8gdGFrZSBTdHJpbmdWaWV3IGluc3RlYWQKKyAgICAgICAg
b2YgU3RyaW5nLiBSZXBsYWNlZCB0aGUgc3RyaW5nIGNvZGVjTmFtZSBpbiBEb1ZpUGFyYW1ldGVy
U2V0IHdpdGggYW4gZW51bWVyYXRpb24KKyAgICAgICAgc2luY2UgdGhlcmUgYXJlIG9ubHkgYSBm
ZXcgdmFsaWQgdmFsdWVzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSEVW
Q1V0aWxpdGllc0NvY29hLmg6IFVzZSBPcHRpb25hbCByZXR1cm4gdmFsdWUKKyAgICAgICAgaW5z
dGVhZCBvZiBhIGJvb2wgYW5kIGFuIG91dCBhcmd1bWVudC4KKworICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL0hFVkNVdGlsaXRpZXNDb2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6
OnZhbGlkYXRlSEVWQ1BhcmFtZXRlcnMpOiBVcGRhdGVkIHRvIHJldHVybiBPcHRpb25hbC4KKyAg
ICAgICAgKFdlYkNvcmU6OmNvZGVjVHlwZSk6IFVwZGF0ZWQgdG8gdGFrZSBhbiBlbnVtZXJhdGlv
biB2YWx1ZSBhbmQgbm8gbG9uZ2VyCisgICAgICAgIG5lZWQgdG8gcmV0dXJuIGFuIG9wdGlvbmFs
LiBBbHNvIHJlbmFtZWQgZnJvbSBjb2RlY1R5cGVGb3JEb1ZpQ29kZWNTdHJpbmcKKyAgICAgICAg
c2luY2UgdGhlIHR5cGUgbm93IG1ha2VzIHRoaXMgY2xlYXIgd2l0aG91dCBhIGxvbmcgZnVuY3Rp
b24gbmFtZS4KKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlU3RyaW5nQXJyYXlGcm9tRGljdGlvbmFy
eVRvVUludDE2VmVjdG9yKTogUmVuYW1lZCBmcm9tCisgICAgICAgIENGU3RyaW5nQXJyYXlUb051
bWJlclZlY3RvciwgYW5kIG1vdmVkIHRoZSBkaWN0aW9uYXJ5IGxvb2t1cCBpbiBoZXJlLgorICAg
ICAgICBUaGUgb2xkIG5hbWUgd2FzIGEgbGl0dGxlIHZhZ3VlOyAiTnVtYmVyVmVjdG9yIiBkb2Vz
bid0IHNheSAxNi1iaXQgdW5zaWduZWQuCisgICAgICAgIFNpbXBsaWZpZWQgY29kZSBieSB1c2lu
ZyBhbiBPYmplY3RpdmUtQyBmb3IgbG9vcCBpbnN0ZWFkIG9mIGEgYmxvY2sgYW5kCisgICAgICAg
IGVudW1lcmF0aW9uLiBUaGlzIGN1dCB0aGUgc2l6ZSBvZiB0aGUgZnVuY3Rpb24gZG93biBxdWl0
ZSBhIGJpdC4KKyAgICAgICAgKFdlYkNvcmU6OnZhbGlkYXRlRG9WaVBhcmFtZXRlcnMpOiBVcGRh
dGVkIHRvIHJldHVybiBPcHRpb25hbC4gQWxzbworICAgICAgICByZWZhY3RvcmVkIHRvIHVzZSB0
aGUgaW1ycG92ZWQgaGVscGVyIGZ1bmN0aW9ucyBhYm92ZS4KKworICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL01lZGlhRW5naW5lQ29uZmlndXJhdGlvbkZhY3RvcnlDb2NvYS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjp2aWRlb0NvZGVjVHlwZUZyb21SRkM0MjgxVHlwZSk6IFRha2Ug
YSBTdHJpbmdWaWV3IGluc3RlYWQgb2YgYSBTdHJpbmcKKyAgICAgICAgZm9yIGdyZWF0ZXIgZmxl
eGliaWxpdHkgYW5kIGVmZmljaWVuY3kuCisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlTWVkaWFD
YXBhYmlsaXRpZXNJbmZvKTogRmFjdG9yZWQgb3V0IHRoaXMgaGVscGVyIGZ1bmN0aW9uCisgICAg
ICAgIHNvIHdlIGRvbid0IGhhdmUgc3VjaCBjb21wbGljYXRlZCBjYWxsYmFjayBsb2dpYy4gUmVm
YWN0b3JlZCB0byB1c2UgdGhlIG5ldworICAgICAgICB2ZXJzaW9ucyBvZiB2YWxpZGF0ZUhFVkNQ
YXJhbWV0ZXJzLCB2YWxpZGF0ZURvVmlQYXJhbWV0ZXJzLCBhbmQKKyAgICAgICAgdmFsaWRhdGVW
UFBhcmFtZXRlcnMuCisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVNZWRpYVBsYXllckRlY29kaW5n
Q29uZmlndXJhdGlvbkNvY29hKTogTW92ZWQgbW9zdCBvZiB0aGUKKyAgICAgICAgY29kZSBpbnRv
IGNvbXB1dGVNZWRpYUNhcGFiaWxpdGllc0luZm87IHRoaXMgbW9zdGx5IGRlYWxzIHdpdGggdGhl
IGNhbGxiYWNrLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvVlA5VXRpbGl0
aWVzQ29jb2EuaDogUmVtb3ZlZCBleHRyYW5lb3VzIHVzZSBvZiBleHRlcm4uCisgICAgICAgIEFk
ZGVkIGNvbnN0IGZvciBpbnB1dC1vbmx5IHJlZmVyZW5jZSBhcmd1bWVudHMuIENoYW5nZWQgdmFs
aWRhdGVWUFBhcmFtZXRlcnMgdG8KKyAgICAgICAgcmV0dXJuIE9wdGlvbmFsIGluc3RlYWQgb2Yg
YSBib29sIHdpdGggYW4gb3V0IGFyZ3VtZW50LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY29jb2EvVlA5VXRpbGl0aWVzQ29jb2EubW06CisgICAgICAgIChXZWJDb3JlOjppc1ZQOUNv
ZGVjQ29uZmlndXJhdGlvblJlY29yZFN1cHBvcnRlZCk6IEFkZGVkIGNvbnN0LgorICAgICAgICAo
V2ViQ29yZTo6aXNWUDhDb2RlY0NvbmZpZ3VyYXRpb25SZWNvcmRTdXBwb3J0ZWQpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OmlzVlBDb2RlY0NvbmZpZ3VyYXRpb25SZWNvcmRTdXBwb3J0ZWQp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OnZhbGlkYXRlVlBQYXJhbWV0ZXJzKTogUmVmYWN0
b3JlZCB0byByZXR1cm4gT3B0aW9uYWwuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0hU
VFBIZWFkZXJNYXAuaDogUmVtb3ZlZCB1bm5lZWRlZCBpbmNsdWRlcy4KKworICAgICAgICAqIHBs
YXRmb3JtL3RleHQvTG9jYWxlVG9TY3JpcHRNYXBwaW5nLmNwcDogTW92ZWQgUGFja2VkQVNDSUlM
b3dlckNvZGVzIGZyb20KKyAgICAgICAgaGVyZSBpbnRvIHRoZSBTb3J0ZWRBcnJheU1hcC5oIGhl
YWRlci4KKworICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkludGVybmFsczo6cGFyc2VIRVZDQ29kZWNQYXJhbWV0ZXJzKTogVHdlYWtlZCBzaW5jZSBI
RVZDUGFyYW1ldGVyU2V0CisgICAgICAgIGlzIG5vdyBvbmx5IHRoZSBjb3JyZWN0IG5hbWUgaGVy
ZSBpbiB0aGUgSW50ZXJuYWxzIGNsYXNzLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpw
YXJzZURvVmlDb2RlY1BhcmFtZXRlcnMpOiBEaXR0by4gQWxzbyBhZGRlZCBjb2RlIHRvCisgICAg
ICAgIGV4cG9zZSB0aGUgY29kZWMgZW51bWVyYXRpb24gYXMgYSBzdHJpbmcuIFRoaXMgaXMgbm93
IGEgdGVzdGluZy1vbmx5IHRoaW5nLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpwYXJz
ZVZQQ29kZWNQYXJhbWV0ZXJzKTogRGl0dG8uCisKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFs
cy5oOiBUd2Vha2VkIHRoZSBQYXJhbWV0ZXJTZXQgdHlwZXMgc2luY2UgdGhleSBub3cgZG9uJ3QK
KyAgICAgICAgZXhhY3RseSBtYXRjaCB0aGUgc3RydWN0dXJlcyB1c2VkIGluIHRoZSByZWFsIGNv
ZGUuCisKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5pZGw6IFJlbW92ZWQgY29kZWNOYW1l
LCBnZW5lcmFsVGllckZsYWcsIGFuZAorICAgICAgICBjb25zdHJhaW50RmxhZ3MgZnJvbSBIRVZD
UGFyYW1ldGVyU2V0LiBOZWl0aGVyIGNvZGVjTmFtZSBub3IgY29uc3RyYWludEZsYWdzCisgICAg
ICAgIHdhcyB1c2VkIGluIGFueSB0ZXN0LiBBbmQgdGhlIGdlbmVyYWxUaWVyRmxhZyB0ZXN0IHdh
cyBzb21ldGhpbmcgd2UgY2FuCisgICAgICAgIGRvIHdpdGhvdXQ7IHRoZSBwYXJzZWQgdmFsdWUg
aXNuJ3QgYWN0dWFsbHkgdXNlZCBpbiBhbnkgV2ViS2l0IGNvZGUuCisKIDIwMjEtMDUtMDQgIEpl
ciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lPTiAocjI3
Njg4Myk6IFtEZWJ1Z10gQVNTRVJUSU9OIEZBSUxFRDogaW5kZXggIT0gbm90Rm91bmQgaW4gV2Vi
Q29yZTo6UGxhdGZvcm1NZWRpYVNlc3Npb25NYW5hZ2VyOjpzZXRDdXJyZW50U2Vzc2lvbigpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdl
TG9nCmluZGV4IGJjYTgwODY2ZTI0MmM4NDU2MTU0YTg0ODM1MGRjOGJkZTJhMDE4NjYuLmJlNjMw
MDBmYTQ5YjVhZTcwYjg3ODMzMzViMTRhZDkyMGExNzU4OWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MTQgQEAKKzIwMjEtMDUtMDQgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAg
ICAgIFN0cmVhbWxpbmUgY29kZWMgcGFyc2luZywgcmVwbGFjaW5nIHVzZXMgb2YgSGFzaE1hcCB3
aXRoIFNvcnRlZEFycmF5TWFwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMjUzNjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIFNoYXJlZC9SZW1vdGVMYXllclRyZWUvUmVtb3RlU2Nyb2xsaW5nQ29vcmRp
bmF0b3JUcmFuc2FjdGlvbi5jcHA6CisgICAgICAgIFJlbW92ZWQgdW5uZWVkZWQgaW5jbHVkZS4K
KyAgICAgICAgKiBTaGFyZWQvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGEuaDogRGl0dG8uCisKIDIw
MjEtMDUtMDQgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAog
ICAgICAgICBEb24ndCBpdGVyYXRlIE5ldHdvcmtQcm9jZXNzUHJveHk6Om1fd2Vic2l0ZURhdGFT
dG9yZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1NvcnRlZEFycmF5TWFwLmggYi9Tb3Vy
Y2UvV1RGL3d0Zi9Tb3J0ZWRBcnJheU1hcC5oCmluZGV4IDAzZDcwYmQ0OTQwMjk2YjFjMzdiNTFl
OTEzNTJlMWI5NTYzZWQ3ZTcuLmYwN2VhMjZlNmU4MzkzMjdjYjdlZWIzMDQ5NWZhZmE3ZmU1ZGE5
NTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1NvcnRlZEFycmF5TWFwLmgKKysrIGIvU291
cmNlL1dURi93dGYvU29ydGVkQXJyYXlNYXAuaApAQCAtODEsNyArODEsNyBAQCBlbnVtIGNsYXNz
IEFTQ0lJU3Vic2V0IHsgQWxsLCBOb1VwcGVyY2FzZUxldHRlcnMsIE5vVXBwZXJjYXNlTGV0dGVy
c09wdGltaXplZCB9OwogCiB0ZW1wbGF0ZTxBU0NJSVN1YnNldD4gc3RydWN0IENvbXBhcmFibGVB
U0NJSVN1YnNldExpdGVyYWwgewogICAgIEFTQ0lJTGl0ZXJhbCBsaXRlcmFsOwotICAgIHRlbXBs
YXRlPHN0ZDo6c2l6ZV90IHNpemU+IGNvbnN0ZXhwciBDb21wYXJhYmxlQVNDSUlTdWJzZXRMaXRl
cmFsKGNvbnN0IGNoYXIgKCZjaGFyYWN0ZXJzKVtzaXplXSk7CisgICAgdGVtcGxhdGU8dW5zaWdu
ZWQgc2l6ZT4gY29uc3RleHByIENvbXBhcmFibGVBU0NJSVN1YnNldExpdGVyYWwoY29uc3QgY2hh
ciAoJmNoYXJhY3RlcnMpW3NpemVdKTsKICAgICBzdGF0aWMgT3B0aW9uYWw8Q29tcGFyYWJsZVN0
cmluZ1ZpZXc+IHBhcnNlKFN0cmluZ1ZpZXcgc3RyaW5nKSB7IHJldHVybiB7IHsgc3RyaW5nIH0g
fTsgfQogfTsKIApAQCAtMTAzLDcgKzEwMywyMyBAQCBib29sIG9wZXJhdG9yPChDb21wYXJhYmxl
Q2FzZUZvbGRpbmdBU0NJSUxpdGVyYWwsIENvbXBhcmFibGVTdHJpbmdWaWV3KTsKIGJvb2wgb3Bl
cmF0b3I8KENvbXBhcmFibGVMZXR0ZXJzTGl0ZXJhbCwgQ29tcGFyYWJsZVN0cmluZ1ZpZXcpOwog
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBPdGhlclR5cGU+IGJvb2wgb3BlcmF0b3I9PShPdGhlclR5cGUs
IENvbXBhcmFibGVTdHJpbmdWaWV3KTsKLXRlbXBsYXRlPHR5cGVuYW1lIE90aGVyVHlwZT4gYm9v
bCBvcGVyYXRvciE9KENvbXBhcmFibGVTdHJpbmdWaWV3LCBPdGhlclR5cGUpOworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBTdG9yYWdlSW50ZWdlcj4gY2xhc3MgUGFja2VkQVNDSUlMb3dlckNvZGVzIHsK
K3B1YmxpYzoKKyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdW5zaWduZWRfdjxTdG9yYWdlSW50
ZWdlcj4pOworCisgICAgdGVtcGxhdGU8dW5zaWduZWQgc2l6ZT4gY29uc3RleHByIFBhY2tlZEFT
Q0lJTG93ZXJDb2Rlcyhjb25zdCBjaGFyICgmY2hhcmFjdGVycylbc2l6ZV0pOworICAgIHN0YXRp
YyBPcHRpb25hbDxQYWNrZWRBU0NJSUxvd2VyQ29kZXM+IHBhcnNlKFN0cmluZ1ZpZXcpOworICAg
IGNvbnN0ZXhwciBTdG9yYWdlSW50ZWdlciB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7
IH0KKworcHJpdmF0ZToKKyAgICB0ZW1wbGF0ZTx1bnNpZ25lZCBzaXplPiBzdGF0aWMgY29uc3Rl
eHByIFN0b3JhZ2VJbnRlZ2VyIHBhY2soY29uc3QgY2hhciAoJmNoYXJhY3RlcnMpW3NpemVdKTsK
KyAgICBleHBsaWNpdCBjb25zdGV4cHIgUGFja2VkQVNDSUlMb3dlckNvZGVzKFN0b3JhZ2VJbnRl
Z2VyKTsKKyAgICBTdG9yYWdlSW50ZWdlciBtX3ZhbHVlIHsgMCB9OworfTsKKwordGVtcGxhdGU8
dHlwZW5hbWUgU3RvcmFnZUludGVnZXI+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPT0oUGFja2Vk
QVNDSUlMb3dlckNvZGVzPFN0b3JhZ2VJbnRlZ2VyPiwgUGFja2VkQVNDSUlMb3dlckNvZGVzPFN0
b3JhZ2VJbnRlZ2VyPik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBTdG9yYWdlSW50ZWdlcj4gY29uc3Rl
eHByIGJvb2wgb3BlcmF0b3I8KFBhY2tlZEFTQ0lJTG93ZXJDb2RlczxTdG9yYWdlSW50ZWdlcj4s
IFBhY2tlZEFTQ0lJTG93ZXJDb2RlczxTdG9yYWdlSW50ZWdlcj4pOwogCiB0ZW1wbGF0ZTxBU0NJ
SVN1YnNldCBzdWJzZXQ+IGNvbnN0ZXhwciBib29sIGlzSW5TdWJzZXQoY2hhciBjaGFyYWN0ZXIp
CiB7CkBAIC0xMTksNyArMTM1LDcgQEAgdGVtcGxhdGU8QVNDSUlTdWJzZXQgc3Vic2V0PiBjb25z
dGV4cHIgYm9vbCBpc0luU3Vic2V0KGNoYXIgY2hhcmFjdGVyKQogICAgIH0KIH0KIAotdGVtcGxh
dGU8QVNDSUlTdWJzZXQgc3Vic2V0PiB0ZW1wbGF0ZTxzdGQ6OnNpemVfdCBzaXplPiBjb25zdGV4
cHIgQ29tcGFyYWJsZUFTQ0lJU3Vic2V0TGl0ZXJhbDxzdWJzZXQ+OjpDb21wYXJhYmxlQVNDSUlT
dWJzZXRMaXRlcmFsKGNvbnN0IGNoYXIgKCZjaGFyYWN0ZXJzKVtzaXplXSkKK3RlbXBsYXRlPEFT
Q0lJU3Vic2V0IHN1YnNldD4gdGVtcGxhdGU8dW5zaWduZWQgc2l6ZT4gY29uc3RleHByIENvbXBh
cmFibGVBU0NJSVN1YnNldExpdGVyYWw8c3Vic2V0Pjo6Q29tcGFyYWJsZUFTQ0lJU3Vic2V0TGl0
ZXJhbChjb25zdCBjaGFyICgmY2hhcmFjdGVycylbc2l6ZV0pCiAgICAgOiBsaXRlcmFsIHsgQVND
SUlMaXRlcmFsOjpmcm9tTGl0ZXJhbFVuc2FmZShjaGFyYWN0ZXJzKSB9CiB7CiAgICAgQVNTRVJU
X1VOREVSX0NPTlNURVhQUl9DT05URVhUKGFsbE9mQ29uc3RFeHByKCZjaGFyYWN0ZXJzWzBdLCAm
Y2hhcmFjdGVyc1tzaXplIC0gMV0sIFtdIChjaGFyIGNoYXJhY3RlcikgewpAQCAtMzAxLDE3ICsz
MTcsNjIgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3RoZXJUeXBlPiBpbmxpbmUgYm9vbCBvcGVyYXRv
cj09KE90aGVyVHlwZSBhLCBDb21wYXJhYmxlU3RyaW4KICAgICByZXR1cm4gYiA9PSBhOwogfQog
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBPdGhlclR5cGU+IGlubGluZSBib29sIG9wZXJhdG9yIT0oQ29t
cGFyYWJsZVN0cmluZ1ZpZXcgYSwgT3RoZXJUeXBlIGIpCit0ZW1wbGF0ZTx0eXBlbmFtZSBTdG9y
YWdlSW50ZWdlcj4gdGVtcGxhdGU8dW5zaWduZWQgc2l6ZT4gY29uc3RleHByIFBhY2tlZEFTQ0lJ
TG93ZXJDb2RlczxTdG9yYWdlSW50ZWdlcj46OlBhY2tlZEFTQ0lJTG93ZXJDb2Rlcyhjb25zdCBj
aGFyICgmc3RyaW5nKVtzaXplXSkKKyAgICA6IG1fdmFsdWUgeyBwYWNrKHN0cmluZykgfQorewor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBTdG9yYWdlSW50ZWdlcj4gY29uc3RleHByIFBhY2tlZEFT
Q0lJTG93ZXJDb2RlczxTdG9yYWdlSW50ZWdlcj46OlBhY2tlZEFTQ0lJTG93ZXJDb2RlcyhTdG9y
YWdlSW50ZWdlciB2YWx1ZSkKKyAgICA6IG1fdmFsdWUgeyB2YWx1ZSB9Cit7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFN0b3JhZ2VJbnRlZ2VyPiB0ZW1wbGF0ZTx1bnNpZ25lZCBzaXplPiBjb25z
dGV4cHIgU3RvcmFnZUludGVnZXIgUGFja2VkQVNDSUlMb3dlckNvZGVzPFN0b3JhZ2VJbnRlZ2Vy
Pjo6cGFjayhjb25zdCBjaGFyICgmc3RyaW5nKVtzaXplXSkKK3sKKyAgICBBU1NFUlRfVU5ERVJf
Q09OU1RFWFBSX0NPTlRFWFQoc2l6ZSk7CisgICAgY29uc3RleHByIHVuc2lnbmVkIGxlbmd0aCA9
IHNpemUgLSAxOworICAgIEFTU0VSVF9VTkRFUl9DT05TVEVYUFJfQ09OVEVYVCghc3RyaW5nW2xl
bmd0aF0pOworICAgIEFTU0VSVF9VTkRFUl9DT05TVEVYUFJfQ09OVEVYVChsZW5ndGggPD0gc2l6
ZW9mKFN0b3JhZ2VJbnRlZ2VyKSk7CisgICAgU3RvcmFnZUludGVnZXIgcmVzdWx0ID0gMDsKKyAg
ICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7ICsraW5kZXgpIHsKKyAg
ICAgICAgU3RvcmFnZUludGVnZXIgY29kZSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN0cmluZ1tp
bmRleF0pOworICAgICAgICByZXN1bHQgfD0gY29kZSA8PCAoKHNpemVvZihTdG9yYWdlSW50ZWdl
cikgLSBpbmRleCAtIDEpICogOCk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFN0b3JhZ2VJbnRlZ2VyPiBhdXRvIFBhY2tlZEFTQ0lJTG93ZXJDb2Rl
czxTdG9yYWdlSW50ZWdlcj46OnBhcnNlKFN0cmluZ1ZpZXcgc3RyaW5nKSAtPiBPcHRpb25hbDxQ
YWNrZWRBU0NJSUxvd2VyQ29kZXM+Cit7CisgICAgaWYgKHN0cmluZy5sZW5ndGgoKSA+IHNpemVv
ZihTdG9yYWdlSW50ZWdlcikpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgU3Rv
cmFnZUludGVnZXIgcmVzdWx0ID0gMDsKKyAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5k
ZXggPCBzdHJpbmcubGVuZ3RoKCk7ICsraW5kZXgpIHsKKyAgICAgICAgVUNoYXIgY29kZSA9IHN0
cmluZ1tpbmRleF07CisgICAgICAgIGlmICghaXNBU0NJSShjb2RlKSkKKyAgICAgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIHJlc3VsdCB8PSBzdGF0aWNfY2FzdDxTdG9yYWdl
SW50ZWdlcj4odG9BU0NJSUxvd2VyKGNvZGUpKSA8PCAoKHNpemVvZihTdG9yYWdlSW50ZWdlcikg
LSBpbmRleCAtIDEpICogOCk7CisgICAgfQorICAgIHJldHVybiBQYWNrZWRBU0NJSUxvd2VyQ29k
ZXMocmVzdWx0KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgU3RvcmFnZUludGVnZXI+IGNvbnN0
ZXhwciBib29sIG9wZXJhdG9yPT0oUGFja2VkQVNDSUlMb3dlckNvZGVzPFN0b3JhZ2VJbnRlZ2Vy
PiBhLCBQYWNrZWRBU0NJSUxvd2VyQ29kZXM8U3RvcmFnZUludGVnZXI+IGIpCit7CisgICAgcmV0
dXJuIGEudmFsdWUoKSA9PSBiLnZhbHVlKCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFN0b3Jh
Z2VJbnRlZ2VyPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjwoUGFja2VkQVNDSUlMb3dlckNvZGVz
PFN0b3JhZ2VJbnRlZ2VyPiBhLCBQYWNrZWRBU0NJSUxvd2VyQ29kZXM8U3RvcmFnZUludGVnZXI+
IGIpCiB7Ci0gICAgcmV0dXJuICEoYSA9PSBiKTsKKyAgICByZXR1cm4gYS52YWx1ZSgpIDwgYi52
YWx1ZSgpOwogfQogCiB9CiAKKy8vIEZJWE1FOiBSZW5hbWUgdGhlIENvbXBhcmFibGUgYW5kIFBh
Y2tlZCB0eXBlcyBmb3IgY2xhcml0eSBhbmQgdG8gYWxpZ24gdGhlbSBiZXR0ZXIgd2l0aCBlYWNo
IG90aGVyLgogdXNpbmcgV1RGOjpBU0NJSVN1YnNldDsKIHVzaW5nIFdURjo6Q29tcGFyYWJsZUFT
Q0lJTGl0ZXJhbDsKIHVzaW5nIFdURjo6Q29tcGFyYWJsZUFTQ0lJU3Vic2V0TGl0ZXJhbDsKIHVz
aW5nIFdURjo6Q29tcGFyYWJsZUNhc2VGb2xkaW5nQVNDSUlMaXRlcmFsOwogdXNpbmcgV1RGOjpD
b21wYXJhYmxlTGV0dGVyc0xpdGVyYWw7Cit1c2luZyBXVEY6OlBhY2tlZEFTQ0lJTG93ZXJDb2Rl
czsKIHVzaW5nIFdURjo6U29ydGVkQXJyYXlNYXA7CiB1c2luZyBXVEY6OlNvcnRlZEFycmF5U2V0
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSEVWQ1V0aWxp
dGllcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9IRVZDVXRpbGl0aWVz
LmNwcAppbmRleCA4NTcxM2Y0YmE1MjFkZTVkNWI2OTFmNjk5M2QzY2JmOWVjM2M1ODE1Li40ZjJl
ZTQyZThkNzgwYzcxMmU0NzVhNDEyMTU1MmI4ZmM5YjVkZDllIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9IRVZDVXRpbGl0aWVzLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9IRVZDVXRpbGl0aWVzLmNwcApAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNywxMyArMjcsMTIg
QEAKICNpbmNsdWRlICJIRVZDVXRpbGl0aWVzLmgiCiAKICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0
cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvUm9iaW5Ib29kSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L1N0cmluZ0hhc2guaD4KKyNpbmNsdWRlIDx3dGYvU29ydGVkQXJyYXlNYXAuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdUb0ludGVnZXJDb252ZXJzaW9uLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotT3B0aW9uYWw8SEVWQ1BhcmFtZXRlclNldD4gcGFyc2VIRVZDQ29kZWNQ
YXJhbWV0ZXJzKGNvbnN0IFN0cmluZyYgY29kZWNTdHJpbmcpCitPcHRpb25hbDxIRVZDUGFyYW1l
dGVycz4gcGFyc2VIRVZDQ29kZWNQYXJhbWV0ZXJzKFN0cmluZ1ZpZXcgY29kZWNTdHJpbmcpCiB7
CiAgICAgLy8gVGhlIGZvcm1hdCBvZiB0aGUgJ2hldmMnIGNvZGVjIHN0cmluZyBpcyBzcGVjaWZp
ZWQgaW4gSVNPL0lFQyAxNDQ5Ni0xNToyMDE0LCBBbm5leCBFLjMuCiAgICAgU3RyaW5nVmlldyBj
b2RlY1ZpZXcoY29kZWNTdHJpbmcpOwpAQCAtNDIsMTEgKzQxLDExIEBAIE9wdGlvbmFsPEhFVkNQ
YXJhbWV0ZXJTZXQ+IHBhcnNlSEVWQ0NvZGVjUGFyYW1ldGVycyhjb25zdCBTdHJpbmcmIGNvZGVj
U3RyaW5nKQogICAgIGlmIChuZXh0RWxlbWVudCA9PSBjb2RlY1NwbGl0LmVuZCgpKQogICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgSEVWQ1BhcmFtZXRlclNldCBwYXJhbWV0ZXJz
OworICAgIEhFVkNQYXJhbWV0ZXJzIHBhcmFtZXRlcnM7CiAKICAgICAvLyBDb2RlYyBpZGVudGlm
aWVyOiBsZWdhbCB2YWx1ZXMgYXJlIHNwZWNpZmllZCBpbiBJU08vSUVDIDE0NDk2LTE1OjIwMTQs
IHNlY3Rpb24gODoKLSAgICBwYXJhbWV0ZXJzLmNvZGVjTmFtZSA9ICgqbmV4dEVsZW1lbnQpLnRv
U3RyaW5nKCk7Ci0gICAgaWYgKCFlcXVhbChwYXJhbWV0ZXJzLmNvZGVjTmFtZSwgImh2YzEiKSAm
JiAhZXF1YWwocGFyYW1ldGVycy5jb2RlY05hbWUsICJoZXYxIikpCisgICAgYXV0byBjb2RlY05h
bWUgPSAqbmV4dEVsZW1lbnQ7CisgICAgaWYgKGNvZGVjTmFtZSAhPSAiaHZjMSIgJiYgY29kZWNO
YW1lICE9ICJoZXYxIikKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIGlmICgr
K25leHRFbGVtZW50ID09IGNvZGVjU3BsaXQuZW5kKCkpCkBAIC05MSwyMSArOTAsMTggQEAgT3B0
aW9uYWw8SEVWQ1BhcmFtZXRlclNldD4gcGFyc2VIRVZDQ29kZWNQYXJhbWV0ZXJzKGNvbnN0IFN0
cmluZyYgY29kZWNTdHJpbmcpCiAgICAgaWYgKGZpcnN0Q2hhcmFjdGVyICE9ICdMJyAmJiBmaXJz
dENoYXJhY3RlciAhPSAnSCcpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBw
YXJhbWV0ZXJzLmdlbmVyYWxUaWVyRmxhZyA9IGZpcnN0Q2hhcmFjdGVyID09ICdIJzsKICAgICBi
b29sIGlzVmFsaWRHZW5lcmFsTGV2ZWxJREMgPSBmYWxzZTsKICAgICBwYXJhbWV0ZXJzLmdlbmVy
YWxMZXZlbElEQyA9IHRvSW50ZWdyYWxUeXBlPHVpbnQ4X3Q+KGdlbmVyYWxUaWVyLnN1YnN0cmlu
ZygxKSwgJmlzVmFsaWRHZW5lcmFsTGV2ZWxJREMpOwogICAgIGlmICghaXNWYWxpZEdlbmVyYWxM
ZXZlbElEQykKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIC8vIE9wdGlvbmFs
IGZvdXJ0aCBhbmQgcmVtYW5pbmcgZWxlbWVudHM6IGEgc2VxdWVuY2Ugb2YgNiAxLWJ5dGUgY29u
c3RyYWludCBmbGFncywgZWFjaCBieXRlIGVuY29kZWQKKyAgICAvLyBPcHRpb25hbCBmb3VydGgg
YW5kIHJlbWFpbmluZyBlbGVtZW50czogYSBzZXF1ZW5jZSBvZiA2IDEtYnl0ZSBjb25zdHJhaW50
IGZsYWdzLCBlYWNoIGJ5dGUgZW5jb2RlZAogICAgIC8vIGluIGhleCwgYW5kIHNlcGFyYXRlZCBi
eSBhIHBlcmlvZCwgd2l0aCB0cmFpbGluZyB6ZXJvIGJ5dGVzIG9taXR0ZWQuCi0gICAgcGFyYW1l
dGVycy5jb25zdHJhaW50RmxhZ3MuZmlsbCgwLCA2KTsKLSAgICBmb3IgKGF1dG8mIGZsYWcgOiBw
YXJhbWV0ZXJzLmNvbnN0cmFpbnRGbGFncykgeworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCA2OyArK2kpIHsKICAgICAgICAgaWYgKCsrbmV4dEVsZW1lbnQgPT0gY29kZWNTcGxpdC5lbmQo
KSkKICAgICAgICAgICAgIGJyZWFrOwotCiAgICAgICAgIGJvb2wgaXNWYWxpZEZsYWcgPSBmYWxz
ZTsKLSAgICAgICAgZmxhZyA9IHRvSW50ZWdyYWxUeXBlPHVpbnQ4X3Q+KCpuZXh0RWxlbWVudCwg
JmlzVmFsaWRGbGFnLCAxNik7CisgICAgICAgIHRvSW50ZWdyYWxUeXBlPHVpbnQ4X3Q+KCpuZXh0
RWxlbWVudCwgJmlzVmFsaWRGbGFnLCAxNik7CiAgICAgICAgIGlmICghaXNWYWxpZEZsYWcpCiAg
ICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0KQEAgLTExMyw0MSArMTA5LDQw
IEBAIE9wdGlvbmFsPEhFVkNQYXJhbWV0ZXJTZXQ+IHBhcnNlSEVWQ0NvZGVjUGFyYW1ldGVycyhj
b25zdCBTdHJpbmcmIGNvZGVjU3RyaW5nKQogICAgIHJldHVybiBwYXJhbWV0ZXJzOwogfQogCi1z
dGF0aWMgU3RyaW5nIGNvZGVjU3RyaW5nRm9yRG9WaUNvZGVjVHlwZShjb25zdCBTdHJpbmcmIGNv
ZGVjKQordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVUeXBlPiBpbmxpbmUgT3B0aW9uYWw8VmFsdWVU
eXBlPiBtYWtlT3B0aW9uYWxGcm9tUG9pbnRlcihjb25zdCBWYWx1ZVR5cGUqIHBvaW50ZXIpCit7
CisgICAgaWYgKCFwb2ludGVyKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJl
dHVybiAqcG9pbnRlcjsKK30KKworc3RhdGljIE9wdGlvbmFsPERvVmlQYXJhbWV0ZXJzOjpDb2Rl
Yz4gcGFyc2VEb1ZpQ29kZWNUeXBlKFN0cmluZ1ZpZXcgc3RyaW5nKQogewotICAgIHVzaW5nIE1h
cFR5cGUgPSBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8U3RyaW5nLCBT
dHJpbmc+OwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxNYXBUeXBlPiB0eXBlcyA9IHN0ZDo6
aW5pdGlhbGl6ZXJfbGlzdDxNYXBUeXBlOjpLZXlWYWx1ZVBhaXJUeXBlPih7Ci0gICAgICAgIHsg
ImR2aGUiX3MsICJoZXYxIl9zIH0sCi0gICAgICAgIHsgImR2aDEiX3MsICJodmMxIl9zIH0sCi0g
ICAgICAgIHsgImR2YXYiX3MsICJhdmMzIl9zIH0sCi0gICAgICAgIHsgImR2YTEiX3MsICJhdmMx
Il9zIH0KLSAgICB9KTsKLQotICAgIGF1dG8gZmluZFJlc3VsdHMgPSB0eXBlcy5nZXQoKS5maW5k
KGNvZGVjKTsKLSAgICBpZiAoZmluZFJlc3VsdHMgPT0gdHlwZXMuZ2V0KCkuZW5kKCkpCi0gICAg
ICAgIHJldHVybiBudWxsU3RyaW5nKCk7Ci0gICAgcmV0dXJuIGZpbmRSZXN1bHRzLT52YWx1ZTsK
KyAgICBzdGF0aWMgY29uc3RleHByIHN0ZDo6cGFpcjxQYWNrZWRBU0NJSUxvd2VyQ29kZXM8dWlu
dDMyX3Q+LCBEb1ZpUGFyYW1ldGVyczo6Q29kZWM+IHR5cGVzQXJyYXlbXSA9IHsKKyAgICAgICAg
eyAiZHZhMSIsIERvVmlQYXJhbWV0ZXJzOjpDb2RlYzo6QVZDMSB9LAorICAgICAgICB7ICJkdmF2
IiwgRG9WaVBhcmFtZXRlcnM6OkNvZGVjOjpBVkMzIH0sCisgICAgICAgIHsgImR2aDEiLCBEb1Zp
UGFyYW1ldGVyczo6Q29kZWM6OkhWQzEgfSwKKyAgICAgICAgeyAiZHZoZSIsIERvVmlQYXJhbWV0
ZXJzOjpDb2RlYzo6SEVWMSB9LAorICAgIH07CisgICAgc3RhdGljIGNvbnN0ZXhwciBTb3J0ZWRB
cnJheU1hcCB0eXBlc01hcCB7IHR5cGVzQXJyYXkgfTsKKyAgICByZXR1cm4gbWFrZU9wdGlvbmFs
RnJvbVBvaW50ZXIodHlwZXNNYXAudHJ5R2V0KHN0cmluZykpOwogfQogCi1zdGF0aWMgT3B0aW9u
YWw8dW5zaWduZWQgc2hvcnQ+IHByb2ZpbGVJREZvckFscGhhYmV0aWNEb1ZpUHJvZmlsZShjb25z
dCBTdHJpbmcmIHByb2ZpbGUpCitzdGF0aWMgT3B0aW9uYWw8dWludDE2X3Q+IHByb2ZpbGVJREZv
ckFscGhhYmV0aWNEb1ZpUHJvZmlsZShTdHJpbmdWaWV3IHByb2ZpbGUpCiB7CiAgICAgLy8gU2Vl
IFRhYmxlIDcgb2YgIkRvbGJ5IFZpc2lvbiBQcm9maWxlcyBhbmQgTGV2ZWxzIFZlcnNpb24gMS4z
LjIiCi0gICAgdXNpbmcgTWFwVHlwZSA9IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29k
SGFzaE1hcDxTdHJpbmcsIHVuc2lnbmVkIHNob3J0PjsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8TWFwVHlwZT4gbWFwID0gc3RkOjppbml0aWFsaXplcl9saXN0PE1hcFR5cGU6OktleVZhbHVl
UGFpclR5cGU+KHsKLSAgICAgICAgeyAiZHZoZS5kdHIiX3MsIDQgfSwKLSAgICAgICAgeyAiZHZo
ZS5zdG4iX3MsIDUgfSwKLSAgICAgICAgeyAiZHZoZS5kdGIiX3MsIDcgfSwKLSAgICAgICAgeyAi
ZHZoZS5zdCJfcywgOCB9LAotICAgICAgICB7ICJkdmF2LnNlIl9zLCA5IH0KLSAgICB9KTsKLQot
ICAgIGF1dG8gZmluZFJlc3VsdHMgPSBtYXAuZ2V0KCkuZmluZChwcm9maWxlKTsKLSAgICBpZiAo
ZmluZFJlc3VsdHMgPT0gbWFwLmdldCgpLmVuZCgpKQotICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwotICAgIHJldHVybiBmaW5kUmVzdWx0cy0+dmFsdWU7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBzdGQ6OnBhaXI8UGFja2VkQVNDSUlMb3dlckNvZGVzPHVpbnQ2NF90PiwgdWludDE2X3Q+IHBy
b2ZpbGVzQXJyYXlbXSA9IHsKKyAgICAgICAgeyAiZHZhdi5zZSIsIDkgfSwKKyAgICAgICAgeyAi
ZHZoZS5kdGIiLCA3IH0sCisgICAgICAgIHsgImR2aGUuZHRyIiwgNCB9LAorICAgICAgICB7ICJk
dmhlLnN0IiwgOCB9LAorICAgICAgICB7ICJkdmhlLnN0biIsIDUgfSwKKyAgICB9OworICAgIHN0
YXRpYyBjb25zdGV4cHIgU29ydGVkQXJyYXlNYXAgcHJvZmlsZXNNYXAgeyBwcm9maWxlc0FycmF5
IH07CisgICAgcmV0dXJuIG1ha2VPcHRpb25hbEZyb21Qb2ludGVyKHByb2ZpbGVzTWFwLnRyeUdl
dChwcm9maWxlKSk7CiB9CiAKLXN0YXRpYyBib29sIGlzVmFsaWREb1ZpUHJvZmlsZUlEKHVuc2ln
bmVkIHNob3J0IHByb2ZpbGVJRCkKK3N0YXRpYyBib29sIGlzVmFsaWREb1ZpUHJvZmlsZUlEKHVp
bnQxNl90IHByb2ZpbGVJRCkKIHsKICAgICBzd2l0Y2ggKHByb2ZpbGVJRCkgewogICAgIGNhc2Ug
NDoKQEAgLTE2MSw3ICsxNTYsNyBAQCBzdGF0aWMgYm9vbCBpc1ZhbGlkRG9WaVByb2ZpbGVJRCh1
bnNpZ25lZCBzaG9ydCBwcm9maWxlSUQpCiAgICAgfQogfQogCi1zdGF0aWMgT3B0aW9uYWw8dW5z
aWduZWQgc2hvcnQ+IG1heGltdW1MZXZlbElERm9yRG9WaVByb2ZpbGVJRCh1bnNpZ25lZCBzaG9y
dCBwcm9maWxlSUQpCitzdGF0aWMgT3B0aW9uYWw8dWludDE2X3Q+IG1heGltdW1MZXZlbElERm9y
RG9WaVByb2ZpbGVJRCh1aW50MTZfdCBwcm9maWxlSUQpCiB7CiAgICAgLy8gU2VlIFNlY3Rpb24g
NC4xIG9mICJEb2xieSBWaXNpb24gUHJvZmlsZXMgYW5kIExldmVscyBWZXJzaW9uIDEuMy4yIgog
ICAgIHN3aXRjaCAocHJvZmlsZUlEKSB7CkBAIC0xNzQsMjcgKzE2OSwyNyBAQCBzdGF0aWMgT3B0
aW9uYWw8dW5zaWduZWQgc2hvcnQ+IG1heGltdW1MZXZlbElERm9yRG9WaVByb2ZpbGVJRCh1bnNp
Z25lZCBzaG9ydCBwcgogICAgIH0KIH0KIAotc3RhdGljIGJvb2wgaXNWYWxpZFByb2ZpbGVJREZv
ckNvZGVjTmFtZSh1bnNpZ25lZCBzaG9ydCBwcm9maWxlSUQsIGNvbnN0IFN0cmluZyYgY29kZWNO
YW1lKQorc3RhdGljIGJvb2wgaXNWYWxpZFByb2ZpbGVJREZvckNvZGVjKHVpbnQxNl90IHByb2Zp
bGVJRCwgRG9WaVBhcmFtZXRlcnM6OkNvZGVjIGNvZGVjKQogewogICAgIGlmIChwcm9maWxlSUQg
PT0gOSkKLSAgICAgICAgcmV0dXJuIGNvZGVjTmFtZSA9PSAiYXZjMSIgfHwgY29kZWNOYW1lID09
ICJhdmMzIjsKLSAgICByZXR1cm4gY29kZWNOYW1lID09ICJodmMxIiB8fCBjb2RlY05hbWUgPT0g
ImhldjEiOworICAgICAgICByZXR1cm4gY29kZWMgPT0gRG9WaVBhcmFtZXRlcnM6OkNvZGVjOjpB
VkMxIHx8IGNvZGVjID09IERvVmlQYXJhbWV0ZXJzOjpDb2RlYzo6QVZDMzsKKyAgICByZXR1cm4g
Y29kZWMgPT0gRG9WaVBhcmFtZXRlcnM6OkNvZGVjOjpIVkMxIHx8IGNvZGVjID09IERvVmlQYXJh
bWV0ZXJzOjpDb2RlYzo6SEVWMTsKIH0KIAotT3B0aW9uYWw8RG9WaVBhcmFtZXRlclNldD4gcGFy
c2VEb1ZpQ29kZWNQYXJhbWV0ZXJzKGNvbnN0IFN0cmluZyYgY29kZWNTdHJpbmcpCitPcHRpb25h
bDxEb1ZpUGFyYW1ldGVycz4gcGFyc2VEb1ZpQ29kZWNQYXJhbWV0ZXJzKFN0cmluZ1ZpZXcgY29k
ZWNWaWV3KQogewogICAgIC8vIFRoZSBmb3JtYXQgb2YgdGhlIERvVmkgY29kZWMgc3RyaW5nIGlz
IHNwZWNpZmllZCBpbiAiRG9sYnkgVmlzaW9uIFByb2ZpbGVzIGFuZCBMZXZlbHMgVmVyc2lvbiAx
LjMuMiIKLSAgICBTdHJpbmdWaWV3IGNvZGVjVmlldyhjb2RlY1N0cmluZyk7CiAgICAgYXV0byBj
b2RlY1NwbGl0ID0gY29kZWNWaWV3LnNwbGl0KCcuJyk7CiAgICAgYXV0byBuZXh0RWxlbWVudCA9
IGNvZGVjU3BsaXQuYmVnaW4oKTsKICAgICBpZiAobmV4dEVsZW1lbnQgPT0gY29kZWNTcGxpdC5l
bmQoKSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIERvVmlQYXJhbWV0ZXJT
ZXQgcGFyYW1ldGVyczsKKyAgICBEb1ZpUGFyYW1ldGVycyBwYXJhbWV0ZXJzOwogCi0gICAgcGFy
YW1ldGVycy5jb2RlY05hbWUgPSBjb2RlY1N0cmluZ0ZvckRvVmlDb2RlY1R5cGUoKCpuZXh0RWxl
bWVudCkudG9TdHJpbmcoKSk7Ci0gICAgaWYgKCFwYXJhbWV0ZXJzLmNvZGVjTmFtZSkKKyAgICBh
dXRvIGNvZGVjID0gcGFyc2VEb1ZpQ29kZWNUeXBlKCpuZXh0RWxlbWVudCk7CisgICAgaWYgKCFj
b2RlYykKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBwYXJhbWV0ZXJzLmNvZGVj
ID0gKmNvZGVjOwogCiAgICAgaWYgKCsrbmV4dEVsZW1lbnQgPT0gY29kZWNTcGxpdC5lbmQoKSkK
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKQEAgLTIxMSwxNyArMjA2LDE2IEBAIE9wdGlv
bmFsPERvVmlQYXJhbWV0ZXJTZXQ+IHBhcnNlRG9WaUNvZGVjUGFyYW1ldGVycyhjb25zdCBTdHJp
bmcmIGNvZGVjU3RyaW5nKQogICAgICAgICBpZiAoIWlzSW50ZWdyYWwpCiAgICAgICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGF1dG8gYWxwaGFudW1l
cmljUHJvZmlsZVN0cmluZyA9IGNvZGVjVmlldy5sZWZ0KDUgKyBwcm9maWxlSUQubGVuZ3RoKCkp
LnRvU3RyaW5nKCk7Ci0gICAgICAgIGF1dG8gcHJvZmlsZUlEID0gcHJvZmlsZUlERm9yQWxwaGFi
ZXRpY0RvVmlQcm9maWxlKGFscGhhbnVtZXJpY1Byb2ZpbGVTdHJpbmcpOwotICAgICAgICBpZiAo
IXByb2ZpbGVJRCkKKyAgICAgICAgYXV0byBiaXRzdHJlYW1Qcm9maWxlSUQgPSBwcm9maWxlSURG
b3JBbHBoYWJldGljRG9WaVByb2ZpbGUoY29kZWNWaWV3LmxlZnQoNSArIHByb2ZpbGVJRC5sZW5n
dGgoKSkpOworICAgICAgICBpZiAoIWJpdHN0cmVhbVByb2ZpbGVJRCkKICAgICAgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgICAgIHBhcmFtZXRlcnMuYml0c3RyZWFtUHJvZmlsZUlE
ID0gcHJvZmlsZUlELnZhbHVlKCk7CisgICAgICAgIHBhcmFtZXRlcnMuYml0c3RyZWFtUHJvZmls
ZUlEID0gKmJpdHN0cmVhbVByb2ZpbGVJRDsKICAgICB9CiAKICAgICBpZiAoIWlzVmFsaWREb1Zp
UHJvZmlsZUlEKHBhcmFtZXRlcnMuYml0c3RyZWFtUHJvZmlsZUlEKSkKICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKIAotICAgIGlmICghaXNWYWxpZFByb2ZpbGVJREZvckNvZGVjTmFtZShw
YXJhbWV0ZXJzLmJpdHN0cmVhbVByb2ZpbGVJRCwgcGFyYW1ldGVycy5jb2RlY05hbWUpKQorICAg
IGlmICghaXNWYWxpZFByb2ZpbGVJREZvckNvZGVjKHBhcmFtZXRlcnMuYml0c3RyZWFtUHJvZmls
ZUlELCBwYXJhbWV0ZXJzLmNvZGVjKSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAog
ICAgIGlmICgrK25leHRFbGVtZW50ID09IGNvZGVjU3BsaXQuZW5kKCkpCkBAIC0yMzYsNyArMjMw
LDcgQEAgT3B0aW9uYWw8RG9WaVBhcmFtZXRlclNldD4gcGFyc2VEb1ZpQ29kZWNQYXJhbWV0ZXJz
KGNvbnN0IFN0cmluZyYgY29kZWNTdHJpbmcpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CiAKICAgICBhdXRvIG1heGltdW1MZXZlbElEID0gbWF4aW11bUxldmVsSURGb3JEb1ZpUHJvZmls
ZUlEKHBhcmFtZXRlcnMuYml0c3RyZWFtUHJvZmlsZUlEKTsKLSAgICBpZiAoIW1heGltdW1MZXZl
bElEIHx8IHBhcmFtZXRlcnMuYml0c3RyZWFtTGV2ZWxJRCA+IG1heGltdW1MZXZlbElELnZhbHVl
KCkpCisgICAgaWYgKCFtYXhpbXVtTGV2ZWxJRCB8fCBwYXJhbWV0ZXJzLmJpdHN0cmVhbUxldmVs
SUQgPiAqbWF4aW11bUxldmVsSUQpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAg
ICByZXR1cm4gcGFyYW1ldGVyczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0hFVkNVdGlsaXRpZXMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0hFVkNVdGlsaXRpZXMuaAppbmRleCA0M2VlYTg3YWI4ZmEzODg5ZjU0ODRlNzE3Y2YwMjYy
MzRkMWIwMGUyLi43MmVjNTYxNjJhOTBjODYzMWM2YTRkY2QxODZmNjdhMzIzYjVmNjBkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9IRVZDVXRpbGl0aWVzLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSEVWQ1V0aWxpdGllcy5oCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI1
LDI5ICsyNSwyMyBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1zdHJ1Y3QgSEVWQ1BhcmFtZXRlclNldCB7Ci0gICAgU3RyaW5nIGNvZGVjTmFtZTsKLSAgICB1
bnNpZ25lZCBzaG9ydCBnZW5lcmFsUHJvZmlsZVNwYWNlIHsgMCB9OwotICAgIHVuc2lnbmVkIHNo
b3J0IGdlbmVyYWxQcm9maWxlSURDIHsgMCB9Oworc3RydWN0IEhFVkNQYXJhbWV0ZXJzIHsKKyAg
ICB1aW50MTZfdCBnZW5lcmFsUHJvZmlsZVNwYWNlIHsgMCB9OworICAgIHVpbnQxNl90IGdlbmVy
YWxQcm9maWxlSURDIHsgMCB9OwogICAgIHVpbnQzMl90IGdlbmVyYWxQcm9maWxlQ29tcGF0aWJp
bGl0eUZsYWdzIHsgMCB9OwotICAgIGJvb2wgZ2VuZXJhbFRpZXJGbGFnIHsgZmFsc2UgfTsKLSAg
ICB1bnNpZ25lZCBzaG9ydCBnZW5lcmFsTGV2ZWxJREMgeyAwIH07Ci0gICAgVmVjdG9yPHVuc2ln
bmVkIHNob3J0PiBjb25zdHJhaW50RmxhZ3MgeyA2LCAwIH07CisgICAgdWludDE2X3QgZ2VuZXJh
bExldmVsSURDIHsgMCB9OwogfTsKIAotV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8SEVWQ1BhcmFt
ZXRlclNldD4gcGFyc2VIRVZDQ29kZWNQYXJhbWV0ZXJzKGNvbnN0IFN0cmluZyYgY29kZWNTdHJp
bmcpOworV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8SEVWQ1BhcmFtZXRlcnM+IHBhcnNlSEVWQ0Nv
ZGVjUGFyYW1ldGVycyhTdHJpbmdWaWV3KTsKIAotc3RydWN0IERvVmlQYXJhbWV0ZXJTZXQgewot
ICAgIFN0cmluZyBjb2RlY05hbWU7Ci0gICAgdW5zaWduZWQgc2hvcnQgYml0c3RyZWFtUHJvZmls
ZUlEIHsgMCB9OwotICAgIHVuc2lnbmVkIHNob3J0IGJpdHN0cmVhbUxldmVsSUQgeyAwIH07Citz
dHJ1Y3QgRG9WaVBhcmFtZXRlcnMgeworICAgIGVudW0gY2xhc3MgQ29kZWMgeyBBVkMxLCBBVkMz
LCBIRVYxLCBIVkMxIH0gY29kZWM7CisgICAgdWludDE2X3QgYml0c3RyZWFtUHJvZmlsZUlEIHsg
MCB9OworICAgIHVpbnQxNl90IGJpdHN0cmVhbUxldmVsSUQgeyAwIH07CiB9OwogCi1XRUJDT1JF
X0VYUE9SVCBPcHRpb25hbDxEb1ZpUGFyYW1ldGVyU2V0PiBwYXJzZURvVmlDb2RlY1BhcmFtZXRl
cnMoY29uc3QgU3RyaW5nJiBjb2RlY1N0cmluZyk7CitXRUJDT1JFX0VYUE9SVCBPcHRpb25hbDxE
b1ZpUGFyYW1ldGVycz4gcGFyc2VEb1ZpQ29kZWNQYXJhbWV0ZXJzKFN0cmluZ1ZpZXcpOwogCiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9IRVZD
VXRpbGl0aWVzQ29jb2EuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29h
L0hFVkNVdGlsaXRpZXNDb2NvYS5oCmluZGV4IGRhOTFjMDc1YWRlZGQ1MmU0YzUwOTg1NjM2NTcy
ZTQ5NWNlMjEyMmEuLjNhZjQ2YjU3YTRlMGM0YzdiNTllMWRmOGVmNTM5YzVjMWU5ODc5YjUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0hFVkNVdGls
aXRpZXNDb2NvYS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29h
L0hFVkNVdGlsaXRpZXNDb2NvYS5oCkBAIC0zMyw4ICszMyw4IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogc3RydWN0IE1lZGlhQ2FwYWJpbGl0aWVzSW5mbzsKIAotZXh0ZXJuIGJvb2wgdmFsaWRh
dGVIRVZDUGFyYW1ldGVycyhIRVZDUGFyYW1ldGVyU2V0JiwgTWVkaWFDYXBhYmlsaXRpZXNJbmZv
JiwgYm9vbCBoYXNBbHBoYUNoYW5uZWwsIGJvb2wgaGRyU3VwcG9ydCk7Ci1leHRlcm4gYm9vbCB2
YWxpZGF0ZURvVmlQYXJhbWV0ZXJzKERvVmlQYXJhbWV0ZXJTZXQmLCBNZWRpYUNhcGFiaWxpdGll
c0luZm8mLCBib29sIGhhc0FscGhhQ2hhbm5lbCwgYm9vbCBoZHJTdXBwb3J0KTsKK09wdGlvbmFs
PE1lZGlhQ2FwYWJpbGl0aWVzSW5mbz4gdmFsaWRhdGVIRVZDUGFyYW1ldGVycyhjb25zdCBIRVZD
UGFyYW1ldGVycyYsIGJvb2wgaGFzQWxwaGFDaGFubmVsLCBib29sIGhkclN1cHBvcnQpOworT3B0
aW9uYWw8TWVkaWFDYXBhYmlsaXRpZXNJbmZvPiB2YWxpZGF0ZURvVmlQYXJhbWV0ZXJzKGNvbnN0
IERvVmlQYXJhbWV0ZXJzJiwgYm9vbCBoYXNBbHBoYUNoYW5uZWwsIGJvb2wgaGRyU3VwcG9ydCk7
CiAKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvSEVWQ1V0aWxpdGllc0NvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY29jb2EvSEVWQ1V0aWxpdGllc0NvY29hLm1tCmluZGV4IDYyNmM1MmRlMDIzMmIzMjZjZTJi
NGJmODMyZmYwOWY5MGE3OGI4NzguLmI4MTgyYjE4ZmE0NGU3ZmI2ZDFiYTgzZDA3M2MwMTc2OWU3
YjNjYWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29h
L0hFVkNVdGlsaXRpZXNDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9IRVZDVXRpbGl0aWVzQ29jb2EubW0KQEAgLTQwLDE2ICs0MCwxNiBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLWJvb2wgdmFsaWRhdGVIRVZDUGFyYW1ldGVycyhIRVZDUGFy
YW1ldGVyU2V0JiBwYXJhbWV0ZXJzLCBNZWRpYUNhcGFiaWxpdGllc0luZm8mIGluZm8sIGJvb2wg
aGFzQWxwaGFDaGFubmVsLCBib29sIGhkclN1cHBvcnQpCitPcHRpb25hbDxNZWRpYUNhcGFiaWxp
dGllc0luZm8+IHZhbGlkYXRlSEVWQ1BhcmFtZXRlcnMoY29uc3QgSEVWQ1BhcmFtZXRlcnMmIHBh
cmFtZXRlcnMsIGJvb2wgaGFzQWxwaGFDaGFubmVsLCBib29sIGhkclN1cHBvcnQpCiB7CiAgICAg
Q01WaWRlb0NvZGVjVHlwZSBjb2RlYyA9IGtDTVZpZGVvQ29kZWNUeXBlX0hFVkM7CiAgICAgaWYg
KGhhc0FscGhhQ2hhbm5lbCkgewogICAgICAgICBpZiAoIVBBTDo6aXNBVkZvdW5kYXRpb25GcmFt
ZXdvcmtBdmFpbGFibGUoKSB8fCAhUEFMOjpjYW5Mb2FkX0FWRm91bmRhdGlvbl9BVlZpZGVvQ29k
ZWNUeXBlSEVWQ1dpdGhBbHBoYSgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgICAgICBhdXRvIGNvZGVjQ29kZSA9IEZv
dXJDQzo6ZnJvbVN0cmluZyhBVlZpZGVvQ29kZWNUeXBlSEVWQ1dpdGhBbHBoYSk7CiAgICAgICAg
IGlmICghY29kZWNDb2RlKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgICAgICBjb2RlYyA9IGNvZGVjQ29kZS52YWx1ZSgp
LnZhbHVlOwogICAgIH0KQEAgLTU5LDEyICs1OSwxMiBAQCBib29sIHZhbGlkYXRlSEVWQ1BhcmFt
ZXRlcnMoSEVWQ1BhcmFtZXRlclNldCYgcGFyYW1ldGVycywgTWVkaWFDYXBhYmlsaXRpZXNJbmZv
JgogICAgICAgICBib29sIGlzTWFpbjEwID0gcGFyYW1ldGVycy5nZW5lcmFsUHJvZmlsZVNwYWNl
ID09IDAKICAgICAgICAgICAgICYmIChwYXJhbWV0ZXJzLmdlbmVyYWxQcm9maWxlSURDID09IDIg
fHwgcGFyYW1ldGVycy5nZW5lcmFsUHJvZmlsZUNvbXBhdGliaWxpdHlGbGFncyA9PSAxKTsKICAg
ICAgICAgaWYgKCFpc01haW4xMCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgfQogCiAgICAgT1NTdGF0dXMgc3RhdHVzID0g
VlRTZWxlY3RBbmRDcmVhdGVWaWRlb0RlY29kZXJJbnN0YW5jZShjb2RlYywga0NGQWxsb2NhdG9y
RGVmYXVsdCwgbnVsbHB0ciwgbnVsbHB0cik7CiAgICAgaWYgKHN0YXR1cyAhPSBub0VycikKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAg
aWYgKCFjYW5Mb2FkX1ZpZGVvVG9vbGJveF9WVENvcHlIRVZDRGVjb2RlckNhcGFiaWxpdGllc0Rp
Y3Rpb25hcnkoKQogICAgICAgICB8fCAhY2FuTG9hZF9WaWRlb1Rvb2xib3hfa1ZUSEVWQ0RlY29k
ZXJDYXBhYmlsaXR5X1N1cHBvcnRlZFByb2ZpbGVzKCkKQEAgLTcyLDMwICs3MiwzMiBAQCBib29s
IHZhbGlkYXRlSEVWQ1BhcmFtZXRlcnMoSEVWQ1BhcmFtZXRlclNldCYgcGFyYW1ldGVycywgTWVk
aWFDYXBhYmlsaXRpZXNJbmZvJgogICAgICAgICB8fCAhY2FuTG9hZF9WaWRlb1Rvb2xib3hfa1ZU
SEVWQ0RlY29kZXJQcm9maWxlQ2FwYWJpbGl0eV9Jc0hhcmR3YXJlQWNjZWxlcmF0ZWQoKQogICAg
ICAgICB8fCAhY2FuTG9hZF9WaWRlb1Rvb2xib3hfa1ZUSEVWQ0RlY29kZXJQcm9maWxlQ2FwYWJp
bGl0eV9NYXhEZWNvZGVMZXZlbCgpCiAgICAgICAgIHx8ICFjYW5Mb2FkX1ZpZGVvVG9vbGJveF9r
VlRIRVZDRGVjb2RlclByb2ZpbGVDYXBhYmlsaXR5X01heFBsYXliYWNrTGV2ZWwoKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgUmV0
YWluUHRyPENGRGljdGlvbmFyeVJlZj4gY2FwYWJpbGl0aWVzID0gYWRvcHRDRihWVENvcHlIRVZD
RGVjb2RlckNhcGFiaWxpdGllc0RpY3Rpb25hcnkoKSk7CisgICAgYXV0byBjYXBhYmlsaXRpZXMg
PSBhZG9wdENGKFZUQ29weUhFVkNEZWNvZGVyQ2FwYWJpbGl0aWVzRGljdGlvbmFyeSgpKTsKICAg
ICBpZiAoIWNhcGFiaWxpdGllcykKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogCiAgICAgYXV0byBzdXBwb3J0ZWRQcm9maWxlcyA9IChDRkFycmF5
UmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKGNhcGFiaWxpdGllcy5nZXQoKSwga1ZUSEVWQ0RlY29k
ZXJDYXBhYmlsaXR5X1N1cHBvcnRlZFByb2ZpbGVzKTsKICAgICBpZiAoIXN1cHBvcnRlZFByb2Zp
bGVzIHx8IENGR2V0VHlwZUlEKHN1cHBvcnRlZFByb2ZpbGVzKSAhPSBDRkFycmF5R2V0VHlwZUlE
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
IAogICAgIGludDE2X3QgZ2VuZXJhbFByb2ZpbGVJREMgPSBwYXJhbWV0ZXJzLmdlbmVyYWxQcm9m
aWxlSURDOwogICAgIGF1dG8gY2ZHZW5lcmFsUHJvZmlsZUlEQyA9IGFkb3B0Q0YoQ0ZOdW1iZXJD
cmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga0NGTnVtYmVyU0ludDE2VHlwZSwgJmdlbmVyYWxQ
cm9maWxlSURDKSk7CiAgICAgYXV0byBzZWFyY2hSYW5nZSA9IENGUmFuZ2VNYWtlKDAsIENGQXJy
YXlHZXRDb3VudChzdXBwb3J0ZWRQcm9maWxlcykpOwogICAgIGlmICghQ0ZBcnJheUNvbnRhaW5z
VmFsdWUoc3VwcG9ydGVkUHJvZmlsZXMsIHNlYXJjaFJhbmdlLCBjZkdlbmVyYWxQcm9maWxlSURD
LmdldCgpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogCiAgICAgYXV0byBwZXJQcm9maWxlU3VwcG9ydCA9IChDRkRpY3Rpb25hcnlSZWYpQ0ZE
aWN0aW9uYXJ5R2V0VmFsdWUoY2FwYWJpbGl0aWVzLmdldCgpLCBrVlRIRVZDRGVjb2RlckNhcGFi
aWxpdHlfUGVyUHJvZmlsZVN1cHBvcnQpOwogICAgIGlmICghcGVyUHJvZmlsZVN1cHBvcnQgfHwg
Q0ZHZXRUeXBlSUQocGVyUHJvZmlsZVN1cHBvcnQpICE9IENGRGljdGlvbmFyeUdldFR5cGVJRCgp
KQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAK
ICAgICBhdXRvIGdlbmVyYWxQcm9maWxlSURDU3RyaW5nID0gU3RyaW5nOjpudW1iZXIoZ2VuZXJh
bFByb2ZpbGVJREMpLmNyZWF0ZUNGU3RyaW5nKCk7CiAgICAgYXV0byBwcm9maWxlU3VwcG9ydCA9
IChDRkRpY3Rpb25hcnlSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocGVyUHJvZmlsZVN1cHBvcnQs
IGdlbmVyYWxQcm9maWxlSURDU3RyaW5nLmdldCgpKTsKICAgICBpZiAoIXByb2ZpbGVTdXBwb3J0
IHx8IENGR2V0VHlwZUlEKHByb2ZpbGVTdXBwb3J0KSAhPSBDRkRpY3Rpb25hcnlHZXRUeXBlSUQo
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
CisgICAgTWVkaWFDYXBhYmlsaXRpZXNJbmZvIGluZm87CiAKICAgICBhdXRvIGlzSGFyZHdhcmVB
Y2NlbGVyYXRlZCA9IChDRkJvb2xlYW5SZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocHJvZmlsZVN1
cHBvcnQsIGtWVEhFVkNEZWNvZGVyUHJvZmlsZUNhcGFiaWxpdHlfSXNIYXJkd2FyZUFjY2VsZXJh
dGVkKTsKICAgICBpZiAoaXNIYXJkd2FyZUFjY2VsZXJhdGVkICYmIENGR2V0VHlwZUlEKGlzSGFy
ZHdhcmVBY2NlbGVyYXRlZCkgPT0gQ0ZCb29sZWFuR2V0VHlwZUlEKCkpCkBAIC0xMDUsMTAgKzEw
NywxMCBAQCBib29sIHZhbGlkYXRlSEVWQ1BhcmFtZXRlcnMoSEVWQ1BhcmFtZXRlclNldCYgcGFy
YW1ldGVycywgTWVkaWFDYXBhYmlsaXRpZXNJbmZvJgogICAgIGlmIChjZk1heERlY29kZUxldmVs
ICYmIENGR2V0VHlwZUlEKGNmTWF4RGVjb2RlTGV2ZWwpID09IENGTnVtYmVyR2V0VHlwZUlEKCkp
IHsKICAgICAgICAgaW50MTZfdCBtYXhEZWNvZGVMZXZlbCA9IDA7CiAgICAgICAgIGlmICghQ0ZO
dW1iZXJHZXRWYWx1ZShjZk1heERlY29kZUxldmVsLCBrQ0ZOdW1iZXJTSW50MTZUeXBlLCAmbWF4
RGVjb2RlTGV2ZWwpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKIAogICAgICAgICBpZiAocGFyYW1ldGVycy5nZW5lcmFsTGV2ZWxJ
REMgPiBtYXhEZWNvZGVMZXZlbCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICAgICAgaW5mby5zdXBwb3J0ZWQgPSB0cnVl
OwogICAgIH0KQEAgLTExNyw2OCArMTE5LDUwIEBAIGJvb2wgdmFsaWRhdGVIRVZDUGFyYW1ldGVy
cyhIRVZDUGFyYW1ldGVyU2V0JiBwYXJhbWV0ZXJzLCBNZWRpYUNhcGFiaWxpdGllc0luZm8mCiAg
ICAgaWYgKGNmTWF4UGxheWJhY2tMZXZlbCAmJiBDRkdldFR5cGVJRChjZk1heFBsYXliYWNrTGV2
ZWwpID09IENGTnVtYmVyR2V0VHlwZUlEKCkpIHsKICAgICAgICAgaW50MTZfdCBtYXhQbGF5YmFj
a0xldmVsID0gMDsKICAgICAgICAgaWYgKCFDRk51bWJlckdldFZhbHVlKGNmTWF4UGxheWJhY2tM
ZXZlbCwga0NGTnVtYmVyU0ludDE2VHlwZSwgJm1heFBsYXliYWNrTGV2ZWwpKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAg
ICAgICBpbmZvLnNtb290aCA9IHBhcmFtZXRlcnMuZ2VuZXJhbExldmVsSURDIDw9IG1heFBsYXli
YWNrTGV2ZWw7CiAgICAgfQogCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGluZm87CiB9
CiAKLXN0YXRpYyBPcHRpb25hbDxDTVZpZGVvQ29kZWNUeXBlPiBjb2RlY1R5cGVGb3JEb1ZpQ29k
ZWNTdHJpbmcoY29uc3QgU3RyaW5nJiBjb2RlY1N0cmluZykKK3N0YXRpYyBDTVZpZGVvQ29kZWNU
eXBlIGNvZGVjVHlwZShEb1ZpUGFyYW1ldGVyczo6Q29kZWMgY29kZWMpCiB7Ci0gICAgc3RhdGlj
IGF1dG8gbWFwID0gbWFrZU5ldmVyRGVzdHJveWVkPE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9i
aW5Ib29kSGFzaE1hcDxTdHJpbmcsIENNVmlkZW9Db2RlY1R5cGU+Pih7Ci0gICAgICAgIHsgImF2
YzEiX3MsIGtDTVZpZGVvQ29kZWNUeXBlX0gyNjQgfSwKLSAgICAgICAgeyAiYXZjMyJfcywga0NN
VmlkZW9Db2RlY1R5cGVfSDI2NCB9LAotICAgICAgICB7ICJodmMxIl9zLCBrQ01WaWRlb0NvZGVj
VHlwZV9IRVZDIH0sCi0gICAgICAgIHsgImhldjEiX3MsIGtDTVZpZGVvQ29kZWNUeXBlX0hFVkMg
fSwKLSAgICB9KTsKLQotICAgIGF1dG8gZmluZFJlc3VsdCA9IG1hcC5nZXQoKS5maW5kKGNvZGVj
U3RyaW5nKTsKLSAgICBpZiAoZmluZFJlc3VsdCA9PSBtYXAuZ2V0KCkuZW5kKCkpCi0gICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgcmV0dXJuIGZpbmRSZXN1bHQtPnZhbHVlOworICAg
IHN3aXRjaCAoY29kZWMpIHsKKyAgICBjYXNlIERvVmlQYXJhbWV0ZXJzOjpDb2RlYzo6QVZDMToK
KyAgICBjYXNlIERvVmlQYXJhbWV0ZXJzOjpDb2RlYzo6QVZDMzoKKyAgICAgICAgcmV0dXJuIGtD
TVZpZGVvQ29kZWNUeXBlX0gyNjQ7CisgICAgY2FzZSBEb1ZpUGFyYW1ldGVyczo6Q29kZWM6OkhF
VjE6CisgICAgY2FzZSBEb1ZpUGFyYW1ldGVyczo6Q29kZWM6OkhWQzE6CisgICAgICAgIHJldHVy
biBrQ01WaWRlb0NvZGVjVHlwZV9IRVZDOworICAgIH0KIH0KIAotc3RhdGljIE9wdGlvbmFsPFZl
Y3Rvcjx1bnNpZ25lZCBzaG9ydD4+IENGU3RyaW5nQXJyYXlUb051bWJlclZlY3RvcihDRkFycmF5
UmVmIGFycmF5Q0YpCitzdGF0aWMgT3B0aW9uYWw8VmVjdG9yPHVpbnQxNl90Pj4gcGFyc2VTdHJp
bmdBcnJheUZyb21EaWN0aW9uYXJ5VG9VSW50MTZWZWN0b3IoQ0ZEaWN0aW9uYXJ5UmVmIGRpY3Rp
b25hcnksIGNvbnN0IHZvaWQqIGtleSkKIHsKLSAgICBpZiAoIWFycmF5Q0YgfHwgQ0ZHZXRUeXBl
SUQoYXJyYXlDRikgIT0gQ0ZBcnJheUdldFR5cGVJRCgpKQorICAgIGF1dG8gdmFsdWUgPSBDRkRp
Y3Rpb25hcnlHZXRWYWx1ZShkaWN0aW9uYXJ5LCBrZXkpOworICAgIGlmICghdmFsdWUgfHwgQ0ZH
ZXRUeXBlSUQodmFsdWUpICE9IENGQXJyYXlHZXRUeXBlSUQoKSkKICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKLQotICAgIGF1dG8gYXJyYXlOUyA9IChfX2JyaWRnZSBOU0FycmF5PE5TU3Ry
aW5nKj4qKWFycmF5Q0Y7Ci0gICAgVmVjdG9yPHVuc2lnbmVkIHNob3J0PiB2YWx1ZXM7Ci0gICAg
dmFsdWVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoYXJyYXlOUy5jb3VudCk7Ci0KLSAgICBib29s
IGFyZUFsbFZhbGlkTnVtYmVycyA9IHRydWU7Ci0gICAgW2FycmF5TlMgZW51bWVyYXRlT2JqZWN0
c1VzaW5nQmxvY2s6WyZdIChOU1N0cmluZyogdmFsdWUsIE5TVUludGVnZXIsIEJPT0wgKnN0b3Ap
IHsKLSAgICAgICAgaWYgKCFbdmFsdWUgaXNLaW5kT2ZDbGFzczpOU1N0cmluZy5jbGFzc10pIHsK
LSAgICAgICAgICAgIGFyZUFsbFZhbGlkTnVtYmVycyA9IGZhbHNlOwotICAgICAgICAgICAgaWYg
KHN0b3ApCi0gICAgICAgICAgICAgICAgKnN0b3AgPSB0cnVlOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0KKyAgICBOU0FycmF5ICphcnJheSA9IChfX2JyaWRnZSBOU0FycmF5ICop
dmFsdWU7CisgICAgVmVjdG9yPHVpbnQxNl90PiB2ZWN0b3I7CisgICAgdmVjdG9yLnJlc2VydmVJ
bml0aWFsQ2FwYWNpdHkoYXJyYXkuY291bnQpOworICAgIGZvciAoaWQgdmFsdWUgaW4gYXJyYXkp
IHsKKyAgICAgICAgaWYgKCFbdmFsdWUgaXNLaW5kT2ZDbGFzczpOU1N0cmluZy5jbGFzc10pCisg
ICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICBib29sIGlzVmFsaWROdW1i
ZXIgPSBmYWxzZTsKLSAgICAgICAgYXV0byBudW1lcmljVmFsdWUgPSB0b0ludGVncmFsVHlwZTx1
bnNpZ25lZCBzaG9ydD4oU3RyaW5nKHZhbHVlKSwgJmlzVmFsaWROdW1iZXIpOwotICAgICAgICBp
ZiAoIWlzVmFsaWROdW1iZXIpIHsKLSAgICAgICAgICAgIGFyZUFsbFZhbGlkTnVtYmVycyA9IGZh
bHNlOwotICAgICAgICAgICAgaWYgKHN0b3ApCi0gICAgICAgICAgICAgICAgKnN0b3AgPSB0cnVl
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgdmFsdWVzLnVuY2hl
Y2tlZEFwcGVuZChudW1lcmljVmFsdWUpOwotICAgIH1dOwotCi0gICAgaWYgKCFhcmVBbGxWYWxp
ZE51bWJlcnMpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgcmV0dXJuIHZhbHVl
czsKKyAgICAgICAgYXV0byBudW1lcmljVmFsdWUgPSB0b0ludGVncmFsVHlwZTx1aW50MTZfdD4o
U3RyaW5nKChOU1N0cmluZyAqKXZhbHVlKSwgJmlzVmFsaWROdW1iZXIpOworICAgICAgICBpZiAo
IWlzVmFsaWROdW1iZXIpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAg
ICB2ZWN0b3IudW5jaGVja2VkQXBwZW5kKG51bWVyaWNWYWx1ZSk7CisgICAgfQorICAgIHJldHVy
biB2ZWN0b3I7CiB9CiAKLWJvb2wgdmFsaWRhdGVEb1ZpUGFyYW1ldGVycyhEb1ZpUGFyYW1ldGVy
U2V0JiBwYXJhbWV0ZXJzLCBNZWRpYUNhcGFiaWxpdGllc0luZm8mIGluZm8sIGJvb2wgaGFzQWxw
aGFDaGFubmVsLCBib29sIGhkclN1cHBvcnQpCitPcHRpb25hbDxNZWRpYUNhcGFiaWxpdGllc0lu
Zm8+IHZhbGlkYXRlRG9WaVBhcmFtZXRlcnMoY29uc3QgRG9WaVBhcmFtZXRlcnMmIHBhcmFtZXRl
cnMsIGJvb2wgaGFzQWxwaGFDaGFubmVsLCBib29sIGhkclN1cHBvcnQpCiB7CiAgICAgaWYgKGhh
c0FscGhhQ2hhbm5lbCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwogCiAgICAgaWYgKGhkclN1cHBvcnQpIHsKICAgICAgICAgLy8gUGxhdGZvcm0g
c3VwcG9ydHMgSERSIHBsYXliYWNrIG9mIEhFVkMgTWFpbjEwIFByb2ZpbGUsIHdoaWNoIGlzIHNp
Z25hbGxlZCBieSBEb1ZpIHByb2ZpbGVzIDQsIDUsIDcsICYgOC4KQEAgLTE4OSw1MCArMTczLDQx
IEBAIGJvb2wgdmFsaWRhdGVEb1ZpUGFyYW1ldGVycyhEb1ZpUGFyYW1ldGVyU2V0JiBwYXJhbWV0
ZXJzLCBNZWRpYUNhcGFiaWxpdGllc0luZm8mCiAgICAgICAgIGNhc2UgODoKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgfQogICAgIH0KIAotICAgIGF1
dG8gY29kZWNUeXBlID0gY29kZWNUeXBlRm9yRG9WaUNvZGVjU3RyaW5nKHBhcmFtZXRlcnMuY29k
ZWNOYW1lKTsKLSAgICBpZiAoIWNvZGVjVHlwZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgT1NTdGF0dXMgc3RhdHVzID0gVlRTZWxlY3RBbmRDcmVhdGVWaWRlb0RlY29kZXJJbnN0YW5j
ZShjb2RlY1R5cGUudmFsdWUoKSwga0NGQWxsb2NhdG9yRGVmYXVsdCwgbnVsbHB0ciwgbnVsbHB0
cik7CisgICAgT1NTdGF0dXMgc3RhdHVzID0gVlRTZWxlY3RBbmRDcmVhdGVWaWRlb0RlY29kZXJJ
bnN0YW5jZShjb2RlY1R5cGUocGFyYW1ldGVycy5jb2RlYyksIGtDRkFsbG9jYXRvckRlZmF1bHQs
IG51bGxwdHIsIG51bGxwdHIpOwogICAgIGlmIChzdGF0dXMgIT0gbm9FcnIpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIGlmICghY2Fu
TG9hZF9WaWRlb1Rvb2xib3hfVlRDb3B5SEVWQ0RlY29kZXJDYXBhYmlsaXRpZXNEaWN0aW9uYXJ5
KCkKICAgICAgICAgfHwgIWNhbkxvYWRfVmlkZW9Ub29sYm94X2tWVERvbGJ5VmlzaW9uRGVjb2Rl
ckNhcGFiaWxpdHlfU3VwcG9ydGVkUHJvZmlsZXMoKQogICAgICAgICB8fCAhY2FuTG9hZF9WaWRl
b1Rvb2xib3hfa1ZURG9sYnlWaXNpb25EZWNvZGVyQ2FwYWJpbGl0eV9TdXBwb3J0ZWRMZXZlbHMo
KQogICAgICAgICB8fCAhY2FuTG9hZF9WaWRlb1Rvb2xib3hfa1ZURG9sYnlWaXNpb25EZWNvZGVy
Q2FwYWJpbGl0eV9Jc0hhcmR3YXJlQWNjZWxlcmF0ZWQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgUmV0YWluUHRyPENGRGljdGlv
bmFyeVJlZj4gY2FwYWJpbGl0aWVzID0gYWRvcHRDRihWVENvcHlIRVZDRGVjb2RlckNhcGFiaWxp
dGllc0RpY3Rpb25hcnkoKSk7CisgICAgYXV0byBjYXBhYmlsaXRpZXMgPSBhZG9wdENGKFZUQ29w
eUhFVkNEZWNvZGVyQ2FwYWJpbGl0aWVzRGljdGlvbmFyeSgpKTsKICAgICBpZiAoIWNhcGFiaWxp
dGllcykKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwogCi0gICAgYXV0byBzdXBwb3J0ZWRQcm9maWxlc0NGID0gKENGQXJyYXlSZWYpQ0ZEaWN0aW9u
YXJ5R2V0VmFsdWUoY2FwYWJpbGl0aWVzLmdldCgpLCBrVlREb2xieVZpc2lvbkRlY29kZXJDYXBh
YmlsaXR5X1N1cHBvcnRlZFByb2ZpbGVzKTsKLSAgICBhdXRvIHN1cHBvcnRlZFByb2ZpbGVzID0g
Q0ZTdHJpbmdBcnJheVRvTnVtYmVyVmVjdG9yKHN1cHBvcnRlZFByb2ZpbGVzQ0YpOworICAgIGF1
dG8gc3VwcG9ydGVkUHJvZmlsZXMgPSBwYXJzZVN0cmluZ0FycmF5RnJvbURpY3Rpb25hcnlUb1VJ
bnQxNlZlY3RvcihjYXBhYmlsaXRpZXMuZ2V0KCksIGtWVERvbGJ5VmlzaW9uRGVjb2RlckNhcGFi
aWxpdHlfU3VwcG9ydGVkUHJvZmlsZXMpOwogICAgIGlmICghc3VwcG9ydGVkUHJvZmlsZXMpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAg
IGF1dG8gc3VwcG9ydGVkTGV2ZWxzQ0YgPSAoQ0ZBcnJheVJlZilDRkRpY3Rpb25hcnlHZXRWYWx1
ZShjYXBhYmlsaXRpZXMuZ2V0KCksIGtWVERvbGJ5VmlzaW9uRGVjb2RlckNhcGFiaWxpdHlfU3Vw
cG9ydGVkTGV2ZWxzKTsKLSAgICBhdXRvIHN1cHBvcnRlZExldmVscyA9IENGU3RyaW5nQXJyYXlU
b051bWJlclZlY3RvcihzdXBwb3J0ZWRMZXZlbHNDRik7CisgICAgYXV0byBzdXBwb3J0ZWRMZXZl
bHMgPSBwYXJzZVN0cmluZ0FycmF5RnJvbURpY3Rpb25hcnlUb1VJbnQxNlZlY3RvcihjYXBhYmls
aXRpZXMuZ2V0KCksIGtWVERvbGJ5VmlzaW9uRGVjb2RlckNhcGFiaWxpdHlfU3VwcG9ydGVkTGV2
ZWxzKTsKICAgICBpZiAoIXN1cHBvcnRlZExldmVscykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgYXV0byBpc0hhcmR3YXJlQWNjZWxl
cmF0ZWRDRiA9IChDRkJvb2xlYW5SZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoY2FwYWJpbGl0aWVz
LmdldCgpLCBrVlREb2xieVZpc2lvbkRlY29kZXJDYXBhYmlsaXR5X0lzSGFyZHdhcmVBY2NlbGVy
YXRlZCk7CiAgICAgaWYgKCFpc0hhcmR3YXJlQWNjZWxlcmF0ZWRDRiB8fCBDRkdldFR5cGVJRChp
c0hhcmR3YXJlQWNjZWxlcmF0ZWRDRikgIT0gQ0ZCb29sZWFuR2V0VHlwZUlEKCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBib29sIGlz
SGFyZHdhcmVBY2NlbGVyYXRlZCA9IENGQm9vbGVhbkdldFZhbHVlKGlzSGFyZHdhcmVBY2NlbGVy
YXRlZENGKTsKIAogICAgIGlmICghc3VwcG9ydGVkUHJvZmlsZXMudmFsdWUoKS5jb250YWlucyhw
YXJhbWV0ZXJzLmJpdHN0cmVhbVByb2ZpbGVJRCkgfHwgIXN1cHBvcnRlZExldmVscy52YWx1ZSgp
LmNvbnRhaW5zKHBhcmFtZXRlcnMuYml0c3RyZWFtTGV2ZWxJRCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIGluZm8uc3VwcG9ydGVkID0gdHJ1ZTsKLSAgICBpbmZvLnNtb290aCA9IHRy
dWU7Ci0gICAgaW5mby5wb3dlckVmZmljaWVudCA9IENGQm9vbGVhbkdldFZhbHVlKGlzSGFyZHdh
cmVBY2NlbGVyYXRlZENGKTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJl
dHVybiB0cnVlOworICAgIHJldHVybiB7IHsgdHJ1ZSwgdHJ1ZSwgaXNIYXJkd2FyZUFjY2VsZXJh
dGVkIH0gfTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY29jb2EvTWVkaWFFbmdpbmVDb25maWd1cmF0aW9uRmFjdG9yeUNvY29hLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL01lZGlhRW5naW5lQ29uZmlndXJh
dGlvbkZhY3RvcnlDb2NvYS5jcHAKaW5kZXggODllMjFjZmU5OTFjN2NlZDU5NWJhM2QwYjE3MWMz
MjcyYTA4ZTA1YS4uYzg5NmNhNDBhNjdjMjE0MWRjZDIwNjNlNWQwYzc2ODYxYTc0ZjFjOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvTWVkaWFFbmdp
bmVDb25maWd1cmF0aW9uRmFjdG9yeUNvY29hLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9NZWRpYUVuZ2luZUNvbmZpZ3VyYXRpb25GYWN0b3J5Q29jb2Eu
Y3BwCkBAIC00MCw3ICs0MCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIENN
VmlkZW9Db2RlY1R5cGUgdmlkZW9Db2RlY1R5cGVGcm9tUkZDNDI4MVR5cGUoU3RyaW5nIHR5cGUp
CitzdGF0aWMgQ01WaWRlb0NvZGVjVHlwZSB2aWRlb0NvZGVjVHlwZUZyb21SRkM0MjgxVHlwZShT
dHJpbmdWaWV3IHR5cGUpCiB7CiAgICAgaWYgKHR5cGUuc3RhcnRzV2l0aCgibXA0diIpKQogICAg
ICAgICByZXR1cm4ga0NNVmlkZW9Db2RlY1R5cGVfTVBFRzRWaWRlbzsKQEAgLTU1LDY2ICs1NSw2
MiBAQCBzdGF0aWMgQ01WaWRlb0NvZGVjVHlwZSB2aWRlb0NvZGVjVHlwZUZyb21SRkM0MjgxVHlw
ZShTdHJpbmcgdHlwZSkKICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBjcmVhdGVNZWRpYVBsYXll
ckRlY29kaW5nQ29uZmlndXJhdGlvbkNvY29hKE1lZGlhRGVjb2RpbmdDb25maWd1cmF0aW9uJiYg
Y29uZmlndXJhdGlvbiwgV1RGOjpGdW5jdGlvbjx2b2lkKE1lZGlhQ2FwYWJpbGl0aWVzRGVjb2Rp
bmdJbmZvJiYpPiYmIGNhbGxiYWNrKQorc3RhdGljIE9wdGlvbmFsPE1lZGlhQ2FwYWJpbGl0aWVz
SW5mbz4gY29tcHV0ZU1lZGlhQ2FwYWJpbGl0aWVzSW5mbyhjb25zdCBNZWRpYURlY29kaW5nQ29u
ZmlndXJhdGlvbiYgY29uZmlndXJhdGlvbikKIHsKLSAgICBNZWRpYUNhcGFiaWxpdGllc0RlY29k
aW5nSW5mbyBpbmZvOworICAgIE1lZGlhQ2FwYWJpbGl0aWVzSW5mbyBpbmZvOwogCiAgICAgaWYg
KGNvbmZpZ3VyYXRpb24udmlkZW8pIHsKICAgICAgICAgYXV0byYgdmlkZW9Db25maWd1cmF0aW9u
ID0gY29uZmlndXJhdGlvbi52aWRlby52YWx1ZSgpOwogICAgICAgICBNZWRpYUVuZ2luZVN1cHBv
cnRQYXJhbWV0ZXJzIHBhcmFtZXRlcnMgeyB9OwogICAgICAgICBwYXJhbWV0ZXJzLnR5cGUgPSBD
b250ZW50VHlwZSh2aWRlb0NvbmZpZ3VyYXRpb24uY29udGVudFR5cGUpOwogICAgICAgICBwYXJh
bWV0ZXJzLmlzTWVkaWFTb3VyY2UgPSBjb25maWd1cmF0aW9uLnR5cGUgPT0gTWVkaWFEZWNvZGlu
Z1R5cGU6Ok1lZGlhU291cmNlOwotICAgICAgICBpZiAoTWVkaWFQbGF5ZXI6OnN1cHBvcnRzVHlw
ZShwYXJhbWV0ZXJzKSAhPSBNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlOjpJc1N1cHBvcnRlZCkg
ewotICAgICAgICAgICAgY2FsbGJhY2soe3sgfSwgV1RGTW92ZShjb25maWd1cmF0aW9uKX0pOwot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisgICAgICAgIGlmIChNZWRpYVBsYXllcjo6
c3VwcG9ydHNUeXBlKHBhcmFtZXRlcnMpICE9IE1lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGU6Oklz
U3VwcG9ydGVkKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgICAgICBh
dXRvIGNvZGVjcyA9IHBhcmFtZXRlcnMudHlwZS5jb2RlY3MoKTsKLSAgICAgICAgaWYgKGNvZGVj
cy5zaXplKCkgIT0gMSkgewotICAgICAgICAgICAgY2FsbGJhY2soe3sgfSwgV1RGTW92ZShjb25m
aWd1cmF0aW9uKX0pOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisgICAgICAgIGlm
IChjb2RlY3Muc2l6ZSgpICE9IDEpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owog
CiAgICAgICAgIGluZm8uc3VwcG9ydGVkID0gdHJ1ZTsKICAgICAgICAgYXV0byYgY29kZWMgPSBj
b2RlY3NbMF07CiAgICAgICAgIGF1dG8gdmlkZW9Db2RlY1R5cGUgPSB2aWRlb0NvZGVjVHlwZUZy
b21SRkM0MjgxVHlwZShjb2RlYyk7Ci0gICAgICAgIGlmICghdmlkZW9Db2RlY1R5cGUgJiYgIShj
b2RlYy5zdGFydHNXaXRoKCJkdmgxIikgfHwgY29kZWMuc3RhcnRzV2l0aCgiZHZoZSIpKSkgewot
ICAgICAgICAgICAgY2FsbGJhY2soe3sgfSwgV1RGTW92ZShjb25maWd1cmF0aW9uKX0pOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisgICAgICAgIGlmICghdmlkZW9Db2RlY1R5cGUg
JiYgIShjb2RlYy5zdGFydHNXaXRoKCJkdmgxIikgfHwgY29kZWMuc3RhcnRzV2l0aCgiZHZoZSIp
KSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICAgICAgYm9vbCBoZHJT
dXBwb3J0ZWQgPSB2aWRlb0NvbmZpZ3VyYXRpb24uY29sb3JHYW11dCB8fCB2aWRlb0NvbmZpZ3Vy
YXRpb24uaGRyTWV0YWRhdGFUeXBlIHx8IHZpZGVvQ29uZmlndXJhdGlvbi50cmFuc2ZlckZ1bmN0
aW9uOwogICAgICAgICBib29sIGFscGhhQ2hhbm5lbCA9IHZpZGVvQ29uZmlndXJhdGlvbi5hbHBo
YUNoYW5uZWwgJiYgdmlkZW9Db25maWd1cmF0aW9uLmFscGhhQ2hhbm5lbC52YWx1ZSgpOwogCiAg
ICAgICAgIGlmICh2aWRlb0NvZGVjVHlwZSA9PSBrQ01WaWRlb0NvZGVjVHlwZV9IRVZDKSB7CiAg
ICAgICAgICAgICBhdXRvIHBhcmFtZXRlcnMgPSBwYXJzZUhFVkNDb2RlY1BhcmFtZXRlcnMoY29k
ZWMpOwotICAgICAgICAgICAgaWYgKCFwYXJhbWV0ZXJzIHx8ICF2YWxpZGF0ZUhFVkNQYXJhbWV0
ZXJzKHBhcmFtZXRlcnMudmFsdWUoKSwgaW5mbywgYWxwaGFDaGFubmVsLCBoZHJTdXBwb3J0ZWQp
KSB7Ci0gICAgICAgICAgICAgICAgY2FsbGJhY2soe3sgfSwgV1RGTW92ZShjb25maWd1cmF0aW9u
KX0pOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGlmICghcGFyYW1ldGVycykKKyAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
ICAgICAgICAgICAgYXV0byBwYXJzZWRJbmZvID0gdmFsaWRhdGVIRVZDUGFyYW1ldGVycygqcGFy
YW1ldGVycywgYWxwaGFDaGFubmVsLCBoZHJTdXBwb3J0ZWQpOworICAgICAgICAgICAgaWYgKCFw
YXJzZWRJbmZvKQorICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAg
ICAgICBpbmZvID0gKnBhcnNlZEluZm87CiAgICAgICAgIH0gZWxzZSBpZiAoY29kZWMuc3RhcnRz
V2l0aCgiZHZoMSIpIHx8IGNvZGVjLnN0YXJ0c1dpdGgoImR2aGUiKSkgewogICAgICAgICAgICAg
YXV0byBwYXJhbWV0ZXJzID0gcGFyc2VEb1ZpQ29kZWNQYXJhbWV0ZXJzKGNvZGVjKTsKLSAgICAg
ICAgICAgIGlmICghcGFyYW1ldGVycyB8fCAhdmFsaWRhdGVEb1ZpUGFyYW1ldGVycyhwYXJhbWV0
ZXJzLnZhbHVlKCksIGluZm8sIGFscGhhQ2hhbm5lbCwgaGRyU3VwcG9ydGVkKSkgewotICAgICAg
ICAgICAgICAgIGNhbGxiYWNrKHt7IH0sIFdURk1vdmUoY29uZmlndXJhdGlvbil9KTsKLSAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIXBhcmFt
ZXRlcnMpCisgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgICAg
IGF1dG8gcGFyc2VkSW5mbyA9IHZhbGlkYXRlRG9WaVBhcmFtZXRlcnMoKnBhcmFtZXRlcnMsIGFs
cGhhQ2hhbm5lbCwgaGRyU3VwcG9ydGVkKTsKKyAgICAgICAgICAgIGlmICghcGFyc2VkSW5mbykK
KyAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICAgICAgaW5mbyA9
ICpwYXJzZWRJbmZvOwogI2lmIEVOQUJMRShWUDkpCiAgICAgICAgIH0gZWxzZSBpZiAodmlkZW9D
b2RlY1R5cGUgPT0ga0NNVmlkZW9Db2RlY1R5cGVfVlA5KSB7Ci0gICAgICAgICAgICBpZiAoIWNv
bmZpZ3VyYXRpb24uY2FuRXhwb3NlVlA5KSB7Ci0gICAgICAgICAgICAgICAgY2FsbGJhY2soe3sg
fSwgV1RGTW92ZShjb25maWd1cmF0aW9uKX0pOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGF1dG8gY29kZWNDb25maWd1cmF0aW9uID0gcGFyc2VW
UENvZGVjUGFyYW1ldGVycyhjb2RlYyk7Ci0gICAgICAgICAgICBpZiAoIWNvZGVjQ29uZmlndXJh
dGlvbiB8fCAhdmFsaWRhdGVWUFBhcmFtZXRlcnMoKmNvZGVjQ29uZmlndXJhdGlvbiwgaW5mbywg
dmlkZW9Db25maWd1cmF0aW9uKSkgewotICAgICAgICAgICAgICAgIGNhbGxiYWNrKHt7IH0sIFdU
Rk1vdmUoY29uZmlndXJhdGlvbil9KTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
ICAgICB9CisgICAgICAgICAgICBpZiAoIWNvbmZpZ3VyYXRpb24uY2FuRXhwb3NlVlA5KQorICAg
ICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgICAgICBhdXRvIHBhcmFt
ZXRlcnMgPSBwYXJzZVZQQ29kZWNQYXJhbWV0ZXJzKGNvZGVjKTsKKyAgICAgICAgICAgIGlmICgh
cGFyYW1ldGVycykKKyAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAg
ICAgICAgYXV0byBwYXJzZWRJbmZvID0gdmFsaWRhdGVWUFBhcmFtZXRlcnMoKnBhcmFtZXRlcnMs
IHZpZGVvQ29uZmlndXJhdGlvbik7CisgICAgICAgICAgICBpZiAoIXBhcnNlZEluZm8pCisgICAg
ICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgICAgIGluZm8gPSAqcGFy
c2VkSW5mbzsKICNlbmRpZgogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKGFscGhh
Q2hhbm5lbCB8fCBoZHJTdXBwb3J0ZWQpIHsKLSAgICAgICAgICAgICAgICBjYWxsYmFjayh7eyB9
LCBXVEZNb3ZlKGNvbmZpZ3VyYXRpb24pfSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGFscGhhQ2hhbm5lbCB8fCBoZHJTdXBwb3J0ZWQp
CisgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgICAgICAgICAgaWYg
KGNhbkxvYWRfVmlkZW9Ub29sYm94X1ZUSXNIYXJkd2FyZURlY29kZVN1cHBvcnRlZCgpKSB7CiAg
ICAgICAgICAgICAgICAgaW5mby5wb3dlckVmZmljaWVudCA9IFZUSXNIYXJkd2FyZURlY29kZVN1
cHBvcnRlZCh2aWRlb0NvZGVjVHlwZSk7CkBAIC0xMjcsNDIgKzEyMywzOSBAQCB2b2lkIGNyZWF0
ZU1lZGlhUGxheWVyRGVjb2RpbmdDb25maWd1cmF0aW9uQ29jb2EoTWVkaWFEZWNvZGluZ0NvbmZp
Z3VyYXRpb24mJiBjbwogICAgICAgICBNZWRpYUVuZ2luZVN1cHBvcnRQYXJhbWV0ZXJzIHBhcmFt
ZXRlcnMgeyB9OwogICAgICAgICBwYXJhbWV0ZXJzLnR5cGUgPSBDb250ZW50VHlwZShjb25maWd1
cmF0aW9uLmF1ZGlvLnZhbHVlKCkuY29udGVudFR5cGUpOwogICAgICAgICBwYXJhbWV0ZXJzLmlz
TWVkaWFTb3VyY2UgPSBjb25maWd1cmF0aW9uLnR5cGUgPT0gTWVkaWFEZWNvZGluZ1R5cGU6Ok1l
ZGlhU291cmNlOwotICAgICAgICBpZiAoTWVkaWFQbGF5ZXI6OnN1cHBvcnRzVHlwZShwYXJhbWV0
ZXJzKSAhPSBNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlOjpJc1N1cHBvcnRlZCkgewotICAgICAg
ICAgICAgY2FsbGJhY2soe3sgfSwgV1RGTW92ZShjb25maWd1cmF0aW9uKX0pOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9CisgICAgICAgIGlmIChNZWRpYVBsYXllcjo6c3VwcG9ydHNU
eXBlKHBhcmFtZXRlcnMpICE9IE1lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGU6OklzU3VwcG9ydGVk
KQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgICAgICBpZiAoY29uZmln
dXJhdGlvbi5hdWRpby0+c3BhdGlhbFJlbmRlcmluZy52YWx1ZU9yKGZhbHNlKSkgewogICAgICAg
ICAgICAgYXV0byBjb250ZXh0ID0gUEFMOjpPdXRwdXRDb250ZXh0OjpzaGFyZWRBdWRpb1ByZXNl
bnRhdGlvbk91dHB1dENvbnRleHQoKTsKLSAgICAgICAgICAgIGlmICghY29udGV4dCkgewotICAg
ICAgICAgICAgICAgIGNhbGxiYWNrKHt7IH0sIFdURk1vdmUoY29uZmlndXJhdGlvbil9KTsKLSAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIWNv
bnRleHQpCisgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgICAgICAg
ICAgYXV0byBkZXZpY2VzID0gY29udGV4dC0+b3V0cHV0RGV2aWNlcygpOwogICAgICAgICAgICAg
aWYgKGRldmljZXMuaXNFbXB0eSgpIHx8ICFXVEY6OmFsbE9mKGRldmljZXMsIFtdKGF1dG8mIGRl
dmljZSkgewogICAgICAgICAgICAgICAgIHJldHVybiBkZXZpY2Uuc3VwcG9ydHNTcGF0aWFsQXVk
aW8oKTsKLSAgICAgICAgICAgIH0pKSB7Ci0gICAgICAgICAgICAgICAgY2FsbGJhY2soe3sgfSwg
V1RGTW92ZShjb25maWd1cmF0aW9uKX0pOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0pKQorICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CiAKICAgICAgICAgICAgIC8vIE9ubHkgbXVsdGljaGFubmVsIGF1ZGlvIGNhbiBiZSBz
cGF0aWFsbHkgcmVuZGVyZWQuCi0gICAgICAgICAgICBpZiAoIWNvbmZpZ3VyYXRpb24uYXVkaW8t
PmNoYW5uZWxzLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICAgICAgYm9vbCBpc09rID0gZmFsc2U7
Ci0gICAgICAgICAgICAgICAgYXV0byBwYXJzZWRDaGFubmVscyA9IGNvbmZpZ3VyYXRpb24uYXVk
aW8tPmNoYW5uZWxzLnRvRG91YmxlKCZpc09rKTsKLSAgICAgICAgICAgICAgICBpZiAoIWlzT2sg
fHwgcGFyc2VkQ2hhbm5lbHMgPD0gMikgewotICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayh7
eyB9LCBXVEZNb3ZlKGNvbmZpZ3VyYXRpb24pfSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIWNv
bmZpZ3VyYXRpb24uYXVkaW8tPmNoYW5uZWxzLmlzTnVsbCgpICYmIGNvbmZpZ3VyYXRpb24uYXVk
aW8tPmNoYW5uZWxzLnRvRG91YmxlKCkgPD0gMikKKyAgICAgICAgICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwogICAgICAgICB9CiAgICAgICAgIGluZm8uc3VwcG9ydGVkID0gdHJ1ZTsKICAg
ICB9CiAKLSAgICBpbmZvLnN1cHBvcnRlZENvbmZpZ3VyYXRpb24gPSBXVEZNb3ZlKGNvbmZpZ3Vy
YXRpb24pOworICAgIHJldHVybiBpbmZvOworfQogCi0gICAgY2FsbGJhY2soV1RGTW92ZShpbmZv
KSk7Cit2b2lkIGNyZWF0ZU1lZGlhUGxheWVyRGVjb2RpbmdDb25maWd1cmF0aW9uQ29jb2EoTWVk
aWFEZWNvZGluZ0NvbmZpZ3VyYXRpb24mJiBjb25maWd1cmF0aW9uLCBXVEY6OkZ1bmN0aW9uPHZv
aWQoTWVkaWFDYXBhYmlsaXRpZXNEZWNvZGluZ0luZm8mJik+JiYgY2FsbGJhY2spCit7CisgICAg
YXV0byBpbmZvID0gY29tcHV0ZU1lZGlhQ2FwYWJpbGl0aWVzSW5mbyhjb25maWd1cmF0aW9uKTsK
KyAgICBpZiAoIWluZm8pCisgICAgICAgIGNhbGxiYWNrKHsgeyB9LCBXVEZNb3ZlKGNvbmZpZ3Vy
YXRpb24pIH0pOworICAgIGVsc2UgeworICAgICAgICBNZWRpYUNhcGFiaWxpdGllc0RlY29kaW5n
SW5mbyBpbmZvV2l0aENvbmZpZ3VyYXRpb24gPSB7IFdURk1vdmUoKmluZm8pLCBXVEZNb3ZlKGNv
bmZpZ3VyYXRpb24pIH07CisgICAgICAgIGNhbGxiYWNrKFdURk1vdmUoaW5mb1dpdGhDb25maWd1
cmF0aW9uKSk7CisgICAgfQogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9WUDlVdGlsaXRpZXNDb2NvYS5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvVlA5VXRpbGl0aWVzQ29jb2EuaAppbmRleCBmY2FmOTlh
ZWQzMjYwZWI1Y2IwZDFjNTZjZWUwOWRlNmVmYjBkYzJlLi43Y2E1NDlmOGU5MGFkZGVjZmE3YWE4
ZjNmZDI3YWE2ZTY3N2U4ODgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jb2NvYS9WUDlVdGlsaXRpZXNDb2NvYS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NvY29hL1ZQOVV0aWxpdGllc0NvY29hLmgKQEAgLTQxLDEzICs0MSwx
MyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBzdHJ1Y3QgTWVkaWFDYXBhYmlsaXRpZXNJbmZvOwog
c3RydWN0IFZpZGVvQ29uZmlndXJhdGlvbjsKIAotV0VCQ09SRV9FWFBPUlQgZXh0ZXJuIHZvaWQg
cmVnaXN0ZXJXZWJLaXRWUDlEZWNvZGVyKCk7Ci1XRUJDT1JFX0VYUE9SVCBleHRlcm4gdm9pZCBy
ZWdpc3RlcldlYktpdFZQOERlY29kZXIoKTsKLVdFQkNPUkVfRVhQT1JUIGV4dGVybiB2b2lkIHJl
Z2lzdGVyU3VwcGxlbWVudGFsVlA5RGVjb2RlcigpOwotZXh0ZXJuIGJvb2wgaXNWUDlEZWNvZGVy
QXZhaWxhYmxlKCk7Ci1leHRlcm4gYm9vbCBpc1ZQOERlY29kZXJBdmFpbGFibGUoKTsKLWV4dGVy
biBib29sIGlzVlBDb2RlY0NvbmZpZ3VyYXRpb25SZWNvcmRTdXBwb3J0ZWQoVlBDb2RlY0NvbmZp
Z3VyYXRpb25SZWNvcmQmKTsKLWV4dGVybiBib29sIHZhbGlkYXRlVlBQYXJhbWV0ZXJzKFZQQ29k
ZWNDb25maWd1cmF0aW9uUmVjb3JkJiwgTWVkaWFDYXBhYmlsaXRpZXNJbmZvJiwgY29uc3QgVmlk
ZW9Db25maWd1cmF0aW9uJik7CitXRUJDT1JFX0VYUE9SVCB2b2lkIHJlZ2lzdGVyV2ViS2l0VlA5
RGVjb2RlcigpOworV0VCQ09SRV9FWFBPUlQgdm9pZCByZWdpc3RlcldlYktpdFZQOERlY29kZXIo
KTsKK1dFQkNPUkVfRVhQT1JUIHZvaWQgcmVnaXN0ZXJTdXBwbGVtZW50YWxWUDlEZWNvZGVyKCk7
Citib29sIGlzVlA5RGVjb2RlckF2YWlsYWJsZSgpOworYm9vbCBpc1ZQOERlY29kZXJBdmFpbGFi
bGUoKTsKK2Jvb2wgaXNWUENvZGVjQ29uZmlndXJhdGlvblJlY29yZFN1cHBvcnRlZChjb25zdCBW
UENvZGVjQ29uZmlndXJhdGlvblJlY29yZCYpOworT3B0aW9uYWw8TWVkaWFDYXBhYmlsaXRpZXNJ
bmZvPiB2YWxpZGF0ZVZQUGFyYW1ldGVycyhjb25zdCBWUENvZGVjQ29uZmlndXJhdGlvblJlY29y
ZCYsIGNvbnN0IFZpZGVvQ29uZmlndXJhdGlvbiYpOwogCiBSZXRhaW5QdHI8Q01Gb3JtYXREZXNj
cmlwdGlvblJlZj4gY3JlYXRlRm9ybWF0RGVzY3JpcHRpb25Gcm9tVlA5SGVhZGVyUGFyc2VyKGNv
bnN0IHZwOV9wYXJzZXI6OlZwOUhlYWRlclBhcnNlciYsIGNvbnN0IHdlYm06OkVsZW1lbnQ8d2Vi
bTo6Q29sb3VyPiYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9WUDlVdGlsaXRpZXNDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL1ZQOVV0aWxpdGllc0NvY29hLm1tCmluZGV4IGM1ZmEzODg0NzhlNGU0
MmE1MDc4ZTgyMWY3YTM4OGI4OWE2NzI2MTIuLjMyY2FmNzE1NjdlZGY5ZGViNzBiYWM3MWYyODli
MjMzNGRmNTY3NTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NvY29hL1ZQOVV0aWxpdGllc0NvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL1ZQOVV0aWxpdGllc0NvY29hLm1tCkBAIC0xNDgsNyArMTQ4LDcgQEAg
c3RhdGljIGJvb2wgdnA5SGFyZHdhcmVEZWNvZGVyQXZhaWxhYmxlKCkKICAgICByZXR1cm4gY2Fu
TG9hZF9WaWRlb1Rvb2xib3hfVlRJc0hhcmR3YXJlRGVjb2RlU3VwcG9ydGVkKCkgJiYgVlRJc0hh
cmR3YXJlRGVjb2RlU3VwcG9ydGVkKGtDTVZpZGVvQ29kZWNUeXBlX1ZQOSk7CiB9CiAKLXN0YXRp
YyBib29sIGlzVlA5Q29kZWNDb25maWd1cmF0aW9uUmVjb3JkU3VwcG9ydGVkKFZQQ29kZWNDb25m
aWd1cmF0aW9uUmVjb3JkJiBjb2RlY0NvbmZpZ3VyYXRpb24pCitzdGF0aWMgYm9vbCBpc1ZQOUNv
ZGVjQ29uZmlndXJhdGlvblJlY29yZFN1cHBvcnRlZChjb25zdCBWUENvZGVjQ29uZmlndXJhdGlv
blJlY29yZCYgY29kZWNDb25maWd1cmF0aW9uKQogewogICAgIGlmICghaXNWUDlEZWNvZGVyQXZh
aWxhYmxlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE5OSw3ICsxOTksNyBAQCBzdGF0
aWMgYm9vbCBpc1ZQOUNvZGVjQ29uZmlndXJhdGlvblJlY29yZFN1cHBvcnRlZChWUENvZGVjQ29u
ZmlndXJhdGlvblJlY29yZCYgYwogICAgIHJldHVybiBoYXM0a1NjcmVlbjsKIH0KIAotc3RhdGlj
IGJvb2wgaXNWUDhDb2RlY0NvbmZpZ3VyYXRpb25SZWNvcmRTdXBwb3J0ZWQoVlBDb2RlY0NvbmZp
Z3VyYXRpb25SZWNvcmQmIGNvZGVjQ29uZmlndXJhdGlvbikKK3N0YXRpYyBib29sIGlzVlA4Q29k
ZWNDb25maWd1cmF0aW9uUmVjb3JkU3VwcG9ydGVkKGNvbnN0IFZQQ29kZWNDb25maWd1cmF0aW9u
UmVjb3JkJiBjb2RlY0NvbmZpZ3VyYXRpb24pCiB7CiAgICAgaWYgKCFpc1ZQOERlY29kZXJBdmFp
bGFibGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjE5LDcgKzIxOSw3IEBAIHN0YXRp
YyBib29sIGlzVlA4Q29kZWNDb25maWd1cmF0aW9uUmVjb3JkU3VwcG9ydGVkKFZQQ29kZWNDb25m
aWd1cmF0aW9uUmVjb3JkJiBjCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgaXNWUENvZGVj
Q29uZmlndXJhdGlvblJlY29yZFN1cHBvcnRlZChWUENvZGVjQ29uZmlndXJhdGlvblJlY29yZCYg
Y29kZWNDb25maWd1cmF0aW9uKQorYm9vbCBpc1ZQQ29kZWNDb25maWd1cmF0aW9uUmVjb3JkU3Vw
cG9ydGVkKGNvbnN0IFZQQ29kZWNDb25maWd1cmF0aW9uUmVjb3JkJiBjb2RlY0NvbmZpZ3VyYXRp
b24pCiB7CiAgICAgaWYgKGNvZGVjQ29uZmlndXJhdGlvbi5jb2RlY05hbWUgPT0gInZwMDgiIHx8
IGNvZGVjQ29uZmlndXJhdGlvbi5jb2RlY05hbWUgPT0gInZwOCIpCiAgICAgICAgIHJldHVybiBp
c1ZQOENvZGVjQ29uZmlndXJhdGlvblJlY29yZFN1cHBvcnRlZChjb2RlY0NvbmZpZ3VyYXRpb24p
OwpAQCAtMjMwLDM2ICsyMzAsMzggQEAgYm9vbCBpc1ZQQ29kZWNDb25maWd1cmF0aW9uUmVjb3Jk
U3VwcG9ydGVkKFZQQ29kZWNDb25maWd1cmF0aW9uUmVjb3JkJiBjb2RlY0NvbmYKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKLWJvb2wgdmFsaWRhdGVWUFBhcmFtZXRlcnMoVlBDb2RlY0NvbmZpZ3Vy
YXRpb25SZWNvcmQmIGNvZGVjQ29uZmlndXJhdGlvbiwgTWVkaWFDYXBhYmlsaXRpZXNJbmZvJiBp
bmZvLCBjb25zdCBWaWRlb0NvbmZpZ3VyYXRpb24mIHZpZGVvQ29uZmlndXJhdGlvbikKK09wdGlv
bmFsPE1lZGlhQ2FwYWJpbGl0aWVzSW5mbz4gdmFsaWRhdGVWUFBhcmFtZXRlcnMoY29uc3QgVlBD
b2RlY0NvbmZpZ3VyYXRpb25SZWNvcmQmIGNvZGVjQ29uZmlndXJhdGlvbiwgY29uc3QgVmlkZW9D
b25maWd1cmF0aW9uJiB2aWRlb0NvbmZpZ3VyYXRpb24pCiB7CiAgICAgaWYgKCFpc1ZQQ29kZWND
b25maWd1cmF0aW9uUmVjb3JkU3VwcG9ydGVkKGNvZGVjQ29uZmlndXJhdGlvbikpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIC8vIFZp
ZGVvQ29uZmlndXJhdGlvbiBhbmQgVlBDb2RlY0NvbmZpZ3VyYXRpb25SZWNvcmQgY2FuIGhhdmUg
Y29uZmxpY3RpbmcgdmFsdWVzIGZvciBIRFIgcHJvcGVydGllcy4gSWYgc28sIHJlamVjdC4KICAg
ICBpZiAodmlkZW9Db25maWd1cmF0aW9uLnRyYW5zZmVyRnVuY3Rpb24pIHsKICAgICAgICAgLy8g
Tm90ZTogVHJhbnNmZXIgQ2hhcmFjdGVyaXN0aWNzIGFyZSBkZWZpbmVkIGJ5IElTTy9JRUMgMjMw
OTEtMjoyMDE5LgogICAgICAgICBpZiAoKnZpZGVvQ29uZmlndXJhdGlvbi50cmFuc2ZlckZ1bmN0
aW9uID09IFRyYW5zZmVyRnVuY3Rpb246OlNSR0IgJiYgY29kZWNDb25maWd1cmF0aW9uLnRyYW5z
ZmVyQ2hhcmFjdGVyaXN0aWNzID4gMTUpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICBpZiAoKnZpZGVvQ29uZmlndXJh
dGlvbi50cmFuc2ZlckZ1bmN0aW9uID09IFRyYW5zZmVyRnVuY3Rpb246OlBRICYmIGNvZGVjQ29u
ZmlndXJhdGlvbi50cmFuc2ZlckNoYXJhY3RlcmlzdGljcyAhPSAxNikKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIGlm
ICgqdmlkZW9Db25maWd1cmF0aW9uLnRyYW5zZmVyRnVuY3Rpb24gPT0gVHJhbnNmZXJGdW5jdGlv
bjo6SExHICYmIGNvZGVjQ29uZmlndXJhdGlvbi50cmFuc2ZlckNoYXJhY3RlcmlzdGljcyAhPSAx
OCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CiAgICAgfQogCiAgICAgaWYgKHZpZGVvQ29uZmlndXJhdGlvbi5jb2xvckdhbXV0KSB7
CiAgICAgICAgIGlmICgqdmlkZW9Db25maWd1cmF0aW9uLmNvbG9yR2FtdXQgPT0gQ29sb3JHYW11
dDo6UmVjMjAyMCAmJiBjb2RlY0NvbmZpZ3VyYXRpb24uY29sb3JQcmltYXJpZXMgIT0gOSkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CiAgICAgfQogCisgICAgTWVkaWFDYXBhYmlsaXRpZXNJbmZvIGluZm87CisKICAgICBpZiAodnA5
SGFyZHdhcmVEZWNvZGVyQXZhaWxhYmxlKCkpIHsKICAgICAgICAgLy8gSFcgVlA5IERlY29kZXIg
ZG9lcyBub3Qgc3VwcG9ydCBhbHBoYSBjaGFubmVsOgogICAgICAgICBpZiAodmlkZW9Db25maWd1
cmF0aW9uLmFscGhhQ2hhbm5lbCAmJiAqdmlkZW9Db25maWd1cmF0aW9uLmFscGhhQ2hhbm5lbCkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiAKICAgICAgICAgLy8gSFcgVlA5IERlY29kZXIgY2FuIHN1cHBvcnQgdXAgdG8gNEsgQCAx
MjAgb3IgOEsgQCAzMAogICAgICAgICBhdXRvIHJlc29sdXRpb24gPSByZXNvbHV0aW9uQ2F0ZWdv
cnkoeyAoZmxvYXQpdmlkZW9Db25maWd1cmF0aW9uLndpZHRoLCAoZmxvYXQpdmlkZW9Db25maWd1
cmF0aW9uLmhlaWdodCB9KTsKICAgICAgICAgaWYgKHJlc29sdXRpb24gPiBSZXNvbHV0aW9uQ2F0
ZWdvcnk6OlJfOEspCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogICAgICAgICBpZiAocmVzb2x1dGlvbiA9PSBSZXNvbHV0aW9uQ2F0
ZWdvcnk6OlJfOEsgJiYgdmlkZW9Db25maWd1cmF0aW9uLmZyYW1lcmF0ZSA+IDMwKQogICAgICAg
ICAgICAgaW5mby5zbW9vdGggPSBmYWxzZTsKICAgICAgICAgZWxzZSBpZiAocmVzb2x1dGlvbiA8
PSBSZXNvbHV0aW9uQ2F0ZWdvcnk6OlJfNEsgJiYgdmlkZW9Db25maWd1cmF0aW9uLmZyYW1lcmF0
ZSA+IDEyMCkKQEAgLTI2OSw3ICsyNzEsNyBAQCBib29sIHZhbGlkYXRlVlBQYXJhbWV0ZXJzKFZQ
Q29kZWNDb25maWd1cmF0aW9uUmVjb3JkJiBjb2RlY0NvbmZpZ3VyYXRpb24sIE1lZGlhQwogCiAg
ICAgICAgIGluZm8ucG93ZXJFZmZpY2llbnQgPSB0cnVlOwogICAgICAgICBpbmZvLnN1cHBvcnRl
ZCA9IHRydWU7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4gaW5mbzsKICAg
ICB9CiAKICAgICBpbmZvLnBvd2VyRWZmaWNpZW50ID0gZmFsc2U7CkBAIC0yODcsNyArMjg5LDcg
QEAgYm9vbCB2YWxpZGF0ZVZQUGFyYW1ldGVycyhWUENvZGVjQ29uZmlndXJhdGlvblJlY29yZCYg
Y29kZWNDb25maWd1cmF0aW9uLCBNZWRpYUMKICAgICAvLyBGb3Igd2FsbC1wb3dlcmVkIGRldmlj
ZXMsIGFsd2F5cyByZXBvcnQgVlA5IGFzIHN1cHBvcnRlZCwgZXZlbiBpZiBub3QgcG93ZXJFZmZp
Y2llbnQuCiAgICAgaWYgKCFzeXN0ZW1IYXNCYXR0ZXJ5KCkpIHsKICAgICAgICAgaW5mby5zdXBw
b3J0ZWQgPSB0cnVlOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGluZm87
CiAgICAgfQogCiAgICAgLy8gRm9yIGJhdHRlcnktcG93ZXJlZCBkZXZpY2VzLCBhbHdheXMgcmVw
b3J0IFZQOSBhcyBzdXBwb3J0ZWQgd2hlbiBydW5uaW5nIG9uIEFDIHBvd2VyLApAQCAtMjk1LDcg
KzI5Nyw3IEBAIGJvb2wgdmFsaWRhdGVWUFBhcmFtZXRlcnMoVlBDb2RlY0NvbmZpZ3VyYXRpb25S
ZWNvcmQmIGNvZGVjQ29uZmlndXJhdGlvbiwgTWVkaWFDCiAgICAgLy8gdG8gc3VwcG9ydCA0SyB2
aWRlby4KICAgICBpZiAoc3lzdGVtSGFzQUMoKSkgewogICAgICAgICBpbmZvLnN1cHBvcnRlZCA9
IHRydWU7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4gaW5mbzsKICAgICB9
CiAKICAgICBib29sIGhhczRrU2NyZWVuID0gZmFsc2U7CkBAIC0zMTMsMTAgKzMxNSwxMCBAQCBi
b29sIHZhbGlkYXRlVlBQYXJhbWV0ZXJzKFZQQ29kZWNDb25maWd1cmF0aW9uUmVjb3JkJiBjb2Rl
Y0NvbmZpZ3VyYXRpb24sIE1lZGlhQwogICAgIH0KIAogICAgIGlmICghaGFzNGtTY3JlZW4pCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAg
IGluZm8uc3VwcG9ydGVkID0gdHJ1ZTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gaW5m
bzsKIH0KIAogc3RhdGljIHVpbnQ4X3QgY29udmVydFRvQ29sb3JQcmltYXJpZXMoY29uc3QgUHJp
bWFyaWVzJiBjb2VmZmljaWVudHMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL0hUVFBIZWFkZXJNYXAuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvSFRUUEhlYWRlck1hcC5oCmluZGV4IGNiNjgzOTc3MGRiZjZjYWUzMmZhOGJkMDMxYTM3ZTk5
N2ZlOTVkYWUuLmEwZWMyMDY5ZDkyOTc3N2M0YjIxZTJhNGUzMDgwZWE5NGRhZGQzNDEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvSFRUUEhlYWRlck1hcC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvSFRUUEhlYWRlck1hcC5oCkBAIC0y
OCw5ICsyOCw3IEBACiAKICNpbmNsdWRlICJIVFRQSGVhZGVyTmFtZXMuaCIKICNpbmNsdWRlIDx1
dGlsaXR5PgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL09wdGlvbmFs
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvTG9jYWxlVG9TY3JpcHRNYXBwaW5nLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvTG9jYWxlVG9TY3JpcHRNYXBwaW5nLmNwcAppbmRleCA5
NjY3OWM3MTYwYjNiY2UxNDkxZWI5MGM3ZWQxNzYxMDU5MGUwMmZlLi4wNGJkNTM3MWNjNGY2YTNl
MTMxNTQ1MjIxZmRjMTMwNmFiYWJlNWM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L0xvY2FsZVRvU2NyaXB0TWFwcGluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vdGV4dC9Mb2NhbGVUb1NjcmlwdE1hcHBpbmcuY3BwCkBAIC0zOCw4MSArMzgsNiBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLS8vIEZJWE1FOiBDb25zaWRlciBtb3ZpbmcgYWxv
bmdzaWRlIENvbXBhcmFibGVBU0NJSUxpdGVyYWwgYW5kIGdpdmluZyBhbiBldmVuIGJldHRlciBu
YW1lLgotdGVtcGxhdGU8dHlwZW5hbWUgU3RvcmFnZUludGVnZXI+Ci1jbGFzcyBQYWNrZWRBU0NJ
SUxvd2VyQ29kZXMgewotcHVibGljOgotICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc191bnNpZ25l
ZF92PFN0b3JhZ2VJbnRlZ2VyPik7Ci0KLSAgICB0ZW1wbGF0ZTx1bnNpZ25lZCBjaGFyYWN0ZXJD
b3VudFBsdXNPbmU+Ci0gICAgY29uc3RleHByIFBhY2tlZEFTQ0lJTG93ZXJDb2Rlcyhjb25zdCBj
aGFyICgmc3RyaW5nKVtjaGFyYWN0ZXJDb3VudFBsdXNPbmVdKQotICAgIHsKLSAgICAgICAgY29u
c3RleHByIHVuc2lnbmVkIGxlbmd0aCA9IGNoYXJhY3RlckNvdW50UGx1c09uZSAtIDE7Ci0gICAg
ICAgIEFTU0VSVF9VTkRFUl9DT05TVEVYUFJfQ09OVEVYVChsZW5ndGggPD0gc2l6ZW9mKFN0b3Jh
Z2VJbnRlZ2VyKSk7Ci0gICAgICAgIEFTU0VSVF9VTkRFUl9DT05TVEVYUFJfQ09OVEVYVCghc3Ry
aW5nW2xlbmd0aF0pOwotICAgICAgICBTdG9yYWdlSW50ZWdlciByZXN1bHQgPSAwOwotICAgICAg
ICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7ICsraW5kZXgpIHsKLSAg
ICAgICAgICAgIHVpbnQ4X3QgY29kZSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN0cmluZ1tpbmRl
eF0pOwotICAgICAgICAgICAgcmVzdWx0IHw9IHN0YXRpY19jYXN0PFN0b3JhZ2VJbnRlZ2VyPihj
b2RlKSA8PCAoKHNpemVvZihTdG9yYWdlSW50ZWdlcikgLSBpbmRleCAtIDEpICogOCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgbV92YWx1ZSA9IHJlc3VsdDsKLSAgICB9Ci0KLSAgICBzdGF0aWMgT3B0
aW9uYWw8UGFja2VkQVNDSUlMb3dlckNvZGVzPiBwYXJzZShTdHJpbmdWaWV3IHN0cmluZykKLSAg
ICB7Ci0gICAgICAgIGlmIChzdHJpbmcubGVuZ3RoKCkgPiBzaXplb2YoU3RvcmFnZUludGVnZXIp
KQotICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICAgICAgU3RvcmFnZUludGVn
ZXIgcmVzdWx0ID0gMDsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwg
c3RyaW5nLmxlbmd0aCgpOyArK2luZGV4KSB7Ci0gICAgICAgICAgICBVQ2hhciBjb2RlID0gc3Ry
aW5nW2luZGV4XTsKLSAgICAgICAgICAgIGlmICghaXNBU0NJSShjb2RlKSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgICAgICAgICAgcmVzdWx0IHw9IHN0YXRpY19j
YXN0PFN0b3JhZ2VJbnRlZ2VyPih0b0FTQ0lJTG93ZXIoY29kZSkpIDw8ICgoc2l6ZW9mKFN0b3Jh
Z2VJbnRlZ2VyKSAtIGluZGV4IC0gMSkgKiA4KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4g
UGFja2VkQVNDSUlMb3dlckNvZGVzKHJlc3VsdCk7Ci0gICAgfQotCi0gICAgZnJpZW5kIGNvbnN0
ZXhwciBib29sIG9wZXJhdG9yPT0oUGFja2VkQVNDSUlMb3dlckNvZGVzIGxocywgUGFja2VkQVND
SUlMb3dlckNvZGVzIHJocykKLSAgICB7Ci0gICAgICAgIHJldHVybiBsaHMubV92YWx1ZSA9PSBy
aHMubV92YWx1ZTsKLSAgICB9Ci0KLSAgICBmcmllbmQgY29uc3RleHByIGJvb2wgb3BlcmF0b3Ih
PShQYWNrZWRBU0NJSUxvd2VyQ29kZXMgbGhzLCBQYWNrZWRBU0NJSUxvd2VyQ29kZXMgcmhzKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGxocy5tX3ZhbHVlICE9IHJocy5tX3ZhbHVlOwotICAgIH0K
LQotICAgIGZyaWVuZCBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjwoUGFja2VkQVNDSUlMb3dlckNv
ZGVzIGxocywgUGFja2VkQVNDSUlMb3dlckNvZGVzIHJocykKLSAgICB7Ci0gICAgICAgIHJldHVy
biBsaHMubV92YWx1ZSA8IHJocy5tX3ZhbHVlOwotICAgIH0KLQotICAgIGZyaWVuZCBjb25zdGV4
cHIgYm9vbCBvcGVyYXRvcjw9KFBhY2tlZEFTQ0lJTG93ZXJDb2RlcyBsaHMsIFBhY2tlZEFTQ0lJ
TG93ZXJDb2RlcyByaHMpCi0gICAgewotICAgICAgICByZXR1cm4gbGhzLm1fdmFsdWUgPD0gcmhz
Lm1fdmFsdWU7Ci0gICAgfQotCi0gICAgZnJpZW5kIGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPihQ
YWNrZWRBU0NJSUxvd2VyQ29kZXMgbGhzLCBQYWNrZWRBU0NJSUxvd2VyQ29kZXMgcmhzKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGxocy5tX3ZhbHVlID4gcmhzLm1fdmFsdWU7Ci0gICAgfQotCi0g
ICAgZnJpZW5kIGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPj0oUGFja2VkQVNDSUlMb3dlckNvZGVz
IGxocywgUGFja2VkQVNDSUlMb3dlckNvZGVzIHJocykKLSAgICB7Ci0gICAgICAgIHJldHVybiBs
aHMubV92YWx1ZSA+PSByaHMubV92YWx1ZTsKLSAgICB9Ci0KLSAgICBjb25zdGV4cHIgU3RvcmFn
ZUludGVnZXIgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9Ci0KLXByaXZhdGU6Ci0g
ICAgZXhwbGljaXQgY29uc3RleHByIFBhY2tlZEFTQ0lJTG93ZXJDb2RlcyhTdG9yYWdlSW50ZWdl
ciB2YWx1ZSkKLSAgICAgICAgOiBtX3ZhbHVlKHZhbHVlKQotICAgIHsKLSAgICB9Ci0KLSAgICBT
dG9yYWdlSW50ZWdlciBtX3ZhbHVlIHsgMCB9OwotfTsKLQogVVNjcmlwdENvZGUgc2NyaXB0TmFt
ZVRvQ29kZShTdHJpbmdWaWV3IHNjcmlwdE5hbWUpCiB7CiAgICAgLy8gVGhpcyBnZW5lcmFsbHkg
bWFwcyBhbiBJU08gMTU5MjQgc2NyaXB0IGNvZGUgdG8gaXRzIFVTY3JpcHRDb2RlLCBidXQgY2Vy
dGFpbiBmYW1pbGllcyBvZiBzY3JpcHQgY29kZXMgYXJlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVy
bmFscy5jcHAKaW5kZXggZGE4MjgyMTVhODAxMzZmYmM5MjI2ZjQ3ZjhiMDNlNmM2MGZiZGJmMi4u
NTI0NGJjMjRiYzdiYzRjODAxNjM0MjIwNjk0ZmZmZmY5MTc2Nzg5MCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rl
c3RpbmcvSW50ZXJuYWxzLmNwcApAQCAtNTc1MSwxOSArNTc1MSwzOSBAQCBib29sIEludGVybmFs
czo6Y2Fwc0xvY2tJc09uKCkKICAgICByZXR1cm4gV2ViQ29yZTo6UGxhdGZvcm1LZXlib2FyZEV2
ZW50OjpjdXJyZW50Q2Fwc0xvY2tTdGF0ZSgpOwogfQogCi1PcHRpb25hbDxIRVZDUGFyYW1ldGVy
U2V0PiBJbnRlcm5hbHM6OnBhcnNlSEVWQ0NvZGVjUGFyYW1ldGVycyhjb25zdCBTdHJpbmcmIGNv
ZGVjU3RyaW5nKQorYXV0byBJbnRlcm5hbHM6OnBhcnNlSEVWQ0NvZGVjUGFyYW1ldGVycyhTdHJp
bmdWaWV3IHN0cmluZykgLT4gT3B0aW9uYWw8SEVWQ1BhcmFtZXRlclNldD4KIHsKLSAgICByZXR1
cm4gV2ViQ29yZTo6cGFyc2VIRVZDQ29kZWNQYXJhbWV0ZXJzKGNvZGVjU3RyaW5nKTsKKyAgICBy
ZXR1cm4gV2ViQ29yZTo6cGFyc2VIRVZDQ29kZWNQYXJhbWV0ZXJzKHN0cmluZyk7CiB9CiAKLU9w
dGlvbmFsPERvVmlQYXJhbWV0ZXJTZXQ+IEludGVybmFsczo6cGFyc2VEb1ZpQ29kZWNQYXJhbWV0
ZXJzKGNvbnN0IFN0cmluZyYgY29kZWNTdHJpbmcpCithdXRvIEludGVybmFsczo6cGFyc2VEb1Zp
Q29kZWNQYXJhbWV0ZXJzKFN0cmluZ1ZpZXcgc3RyaW5nKSAtPiBPcHRpb25hbDxEb1ZpUGFyYW1l
dGVyU2V0PgogewotICAgIHJldHVybiBXZWJDb3JlOjpwYXJzZURvVmlDb2RlY1BhcmFtZXRlcnMo
Y29kZWNTdHJpbmcpOworICAgIGF1dG8gcGFyc2VSZXN1bHQgPSBXZWJDb3JlOjpwYXJzZURvVmlD
b2RlY1BhcmFtZXRlcnMoc3RyaW5nKTsKKyAgICBpZiAoIXBhcnNlUmVzdWx0KQorICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OworICAgIERvVmlQYXJhbWV0ZXJTZXQgY29udmVydGVkUmVzdWx0
OworICAgIHN3aXRjaCAocGFyc2VSZXN1bHQtPmNvZGVjKSB7CisgICAgY2FzZSBEb1ZpUGFyYW1l
dGVyczo6Q29kZWM6OkFWQzE6CisgICAgICAgIGNvbnZlcnRlZFJlc3VsdC5jb2RlY05hbWUgPSAi
YXZjMSJfczsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBEb1ZpUGFyYW1ldGVyczo6Q29kZWM6
OkFWQzM6CisgICAgICAgIGNvbnZlcnRlZFJlc3VsdC5jb2RlY05hbWUgPSAiYXZjMyJfczsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBEb1ZpUGFyYW1ldGVyczo6Q29kZWM6OkhFVjE6CisgICAg
ICAgIGNvbnZlcnRlZFJlc3VsdC5jb2RlY05hbWUgPSAiaGV2MSJfczsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBEb1ZpUGFyYW1ldGVyczo6Q29kZWM6OkhWQzE6CisgICAgICAgIGNvbnZlcnRl
ZFJlc3VsdC5jb2RlY05hbWUgPSAiaHZjMSJfczsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAg
IGNvbnZlcnRlZFJlc3VsdC5iaXRzdHJlYW1Qcm9maWxlSUQgPSBwYXJzZVJlc3VsdC0+Yml0c3Ry
ZWFtUHJvZmlsZUlEOworICAgIGNvbnZlcnRlZFJlc3VsdC5iaXRzdHJlYW1MZXZlbElEID0gcGFy
c2VSZXN1bHQtPmJpdHN0cmVhbUxldmVsSUQ7CisgICAgcmV0dXJuIGNvbnZlcnRlZFJlc3VsdDsK
IH0KIAotT3B0aW9uYWw8VlBDb2RlY0NvbmZpZ3VyYXRpb25SZWNvcmQ+IEludGVybmFsczo6cGFy
c2VWUENvZGVjUGFyYW1ldGVycyhjb25zdCBTdHJpbmcmIGNvZGVjU3RyaW5nKQorT3B0aW9uYWw8
VlBDb2RlY0NvbmZpZ3VyYXRpb25SZWNvcmQ+IEludGVybmFsczo6cGFyc2VWUENvZGVjUGFyYW1l
dGVycyhTdHJpbmdWaWV3IHN0cmluZykKIHsKLSAgICByZXR1cm4gV2ViQ29yZTo6cGFyc2VWUENv
ZGVjUGFyYW1ldGVycyhjb2RlY1N0cmluZyk7CisgICAgcmV0dXJuIFdlYkNvcmU6OnBhcnNlVlBD
b2RlY1BhcmFtZXRlcnMoc3RyaW5nKTsKIH0KIAogYXV0byBJbnRlcm5hbHM6OmdldENvb2tpZXMo
KSBjb25zdCAtPiBWZWN0b3I8Q29va2llRGF0YT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3Rlc3RpbmcvSW50ZXJuYWxzLmggYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5o
CmluZGV4IGUyMDIzNGI3YmE0ZjU3ZTNlNDk0MjlmZjBkMjU4NjEzMGJmZDMyNGQuLmY5YTE4N2Jk
MzM5ZDQ4ZTMyYjg1ZTc1NWY4NzBjNzVlMjg4MTExZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRl
cm5hbHMuaApAQCAtOTcxLDE0ICs5NzEsMTggQEAgcHVibGljOgogCiAgICAgYm9vbCBjYXBzTG9j
a0lzT24oKTsKICAgICAgICAgCi0gICAgdXNpbmcgSEVWQ1BhcmFtZXRlclNldCA9IFdlYkNvcmU6
OkhFVkNQYXJhbWV0ZXJTZXQ7Ci0gICAgT3B0aW9uYWw8SEVWQ1BhcmFtZXRlclNldD4gcGFyc2VI
RVZDQ29kZWNQYXJhbWV0ZXJzKGNvbnN0IFN0cmluZyYgY29kZWNTdHJpbmcpOworICAgIHVzaW5n
IEhFVkNQYXJhbWV0ZXJTZXQgPSBXZWJDb3JlOjpIRVZDUGFyYW1ldGVyczsKKyAgICBPcHRpb25h
bDxIRVZDUGFyYW1ldGVyU2V0PiBwYXJzZUhFVkNDb2RlY1BhcmFtZXRlcnMoU3RyaW5nVmlldyk7
CiAKLSAgICB1c2luZyBEb1ZpUGFyYW1ldGVyU2V0ID0gV2ViQ29yZTo6RG9WaVBhcmFtZXRlclNl
dDsKLSAgICBPcHRpb25hbDxEb1ZpUGFyYW1ldGVyU2V0PiBwYXJzZURvVmlDb2RlY1BhcmFtZXRl
cnMoY29uc3QgU3RyaW5nJiBjb2RlY1N0cmluZyk7CisgICAgc3RydWN0IERvVmlQYXJhbWV0ZXJT
ZXQgeworICAgICAgICBTdHJpbmcgY29kZWNOYW1lOworICAgICAgICB1aW50MTZfdCBiaXRzdHJl
YW1Qcm9maWxlSUQ7CisgICAgICAgIHVpbnQxNl90IGJpdHN0cmVhbUxldmVsSUQ7CisgICAgfTsK
KyAgICBPcHRpb25hbDxEb1ZpUGFyYW1ldGVyU2V0PiBwYXJzZURvVmlDb2RlY1BhcmFtZXRlcnMo
U3RyaW5nVmlldyk7CiAKICAgICB1c2luZyBWUENvZGVjQ29uZmlndXJhdGlvblJlY29yZCA9IFdl
YkNvcmU6OlZQQ29kZWNDb25maWd1cmF0aW9uUmVjb3JkOwotICAgIE9wdGlvbmFsPFZQQ29kZWND
b25maWd1cmF0aW9uUmVjb3JkPiBwYXJzZVZQQ29kZWNQYXJhbWV0ZXJzKGNvbnN0IFN0cmluZyYg
Y29kZWNTdHJpbmcpOworICAgIE9wdGlvbmFsPFZQQ29kZWNDb25maWd1cmF0aW9uUmVjb3JkPiBw
YXJzZVZQQ29kZWNQYXJhbWV0ZXJzKFN0cmluZ1ZpZXcpOwogCiAgICAgc3RydWN0IENvb2tpZURh
dGEgewogICAgICAgICBTdHJpbmcgbmFtZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rl
c3RpbmcvSW50ZXJuYWxzLmlkbCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlk
bAppbmRleCAwMzVhMjY4ZDMyZjdmZmI0YjRmZjBmZTQ5MGI5ZWNkM2Q1NzNkZTE2Li4yYmZkNmNi
OTI4ODhjNmI1OTZkNmRlMTlhNTI2MjgxZWEzNDdjZDI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9J
bnRlcm5hbHMuaWRsCkBAIC0xNzEsMTMgKzE3MSwxMCBAQCBlbnVtIFRyZWVUeXBlIHsKICAgICBF
eHBvcnRNYWNybz1XRUJDT1JFX1RFU1RTVVBQT1JUX0VYUE9SVCwKICAgICBKU0dlbmVyYXRlVG9K
U09iamVjdCwKIF0gZGljdGlvbmFyeSBIRVZDUGFyYW1ldGVyU2V0IHsKLSAgICBET01TdHJpbmcg
Y29kZWNOYW1lOwogICAgIHVuc2lnbmVkIHNob3J0IGdlbmVyYWxQcm9maWxlU3BhY2U7CiAgICAg
dW5zaWduZWQgc2hvcnQgZ2VuZXJhbFByb2ZpbGVJREM7CiAgICAgdW5zaWduZWQgbG9uZyBnZW5l
cmFsUHJvZmlsZUNvbXBhdGliaWxpdHlGbGFnczsKLSAgICBib29sZWFuIGdlbmVyYWxUaWVyRmxh
ZzsKICAgICB1bnNpZ25lZCBzaG9ydCBnZW5lcmFsTGV2ZWxJREM7Ci0gICAgc2VxdWVuY2U8dW5z
aWduZWQgc2hvcnQ+IGNvbnN0cmFpbnRGbGFnczsKIH07CiAKIFsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvU2hhcmVkL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRv
clRyYW5zYWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1JlbW90ZUxheWVyVHJlZS9S
ZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclRyYW5zYWN0aW9uLmNwcAppbmRleCBlZjU2ZTNhOGNl
YmQzNzY5NTc1ODkyYmIxNDljY2JiY2EwNDdmM2UyLi5kZWU2MGUxNzgwODE5YzZkMDIxMThlOTg0
OGI0YjdiYmM3N2NhZTk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9SZW1vdGVM
YXllclRyZWUvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JUcmFuc2FjdGlvbi5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9TaGFyZWQvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZVNjcm9sbGluZ0Nvb3Jk
aW5hdG9yVHJhbnNhY3Rpb24uY3BwCkBAIC00MSw3ICs0MSw2IEBACiAjaW5jbHVkZSA8V2ViQ29y
ZS9TY3JvbGxpbmdTdGF0ZVBvc2l0aW9uZWROb2RlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TY3Jv
bGxpbmdTdGF0ZVN0aWNreU5vZGUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Njcm9sbGluZ1N0YXRl
VHJlZS5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGEuaCBiL1NvdXJjZS9X
ZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhLmgKaW5kZXggMjc4YWEzYTkyZWQw
N2E3YjQyNzkzN2M1YjkwMjdkMThlNTM2YjFkMC4uNmZmZDQyY2RlZDkwZWFhZGNjNjQ2Y2M0MzAz
MTgwMjUzNzRiYWRkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURh
dGEvV2Vic2l0ZURhdGEuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YS9X
ZWJzaXRlRGF0YS5oCkBAIC0yNyw3ICsyNyw2IEBACiAKICNpbmNsdWRlIDxXZWJDb3JlL1JlZ2lz
dHJhYmxlRG9tYWluLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TZWN1cml0eU9yaWdpbkRhdGEuaD4K
LSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5j
bHVkZSA8d3RmL09wdGlvblNldC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBk
NDE4NzBjYmJkMjQyYTAyODkwY2RkZDEzY2E3ZDVlOTJmMDJkOGM1Li4xODViYTZlMzQwZDAwZWE4
ODAzYWU1ZjhmMGFmNmI2NmEyYjQwMWRiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjEtMDUt
MDQgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFN0cmVhbWxpbmUg
Y29kZWMgcGFyc2luZywgcmVwbGFjaW5nIHVzZXMgb2YgSGFzaE1hcCB3aXRoIFNvcnRlZEFycmF5
TWFwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjUz
NjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIG1l
ZGlhL2hldmMtY29kZWMtcGFyYW1ldGVycy1leHBlY3RlZC50eHQ6IFJlbW92ZSB0ZXN0aW5nIG9m
IGdlbmVyYWxUaWVyRmxhZywgd2hpY2ggaXMgaWdub3JlZAorICAgICAgICBieSBvdXIgYWN0dWFs
IG1lZGlhIGNvZGUgYWZ0ZXIgcGFyc2luZy4KKyAgICAgICAgKiBtZWRpYS9oZXZjLWNvZGVjLXBh
cmFtZXRlcnMuaHRtbDogRGl0dG8uCisKIDIwMjEtMDUtMDQgIFNlcmdpbyBWaWxsYXIgU2VuaW4g
IDxzdmlsbGFyQGlnYWxpYS5jb20+CiAKICAgICAgICAgQVNTRVJUSU9OIEZBSUxFRDogY29udGVu
dFNpemUgPj0gMCBpbiBXZWJDb3JlOjpSZW5kZXJGbGV4aWJsZUJveDo6YWRqdXN0Q2hpbGRTaXpl
Rm9yTWluQW5kTWF4CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9tZWRpYS9oZXZjLWNvZGVjLXBh
cmFtZXRlcnMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvbWVkaWEvaGV2Yy1jb2RlYy1wYXJh
bWV0ZXJzLWV4cGVjdGVkLnR4dAppbmRleCBmNmRlZjU4NTlhOWU0ZjhmYzdkNGM4NzI3ZmIzMTc5
MzZmZmQxZWFlLi4yYmIxZmNlNTc3MmRhNWEwYWRlYWJmYTg5Mzk0MDY3MWQ4ZWE5YTBjIDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9tZWRpYS9oZXZjLWNvZGVjLXBhcmFtZXRlcnMtZXhwZWN0ZWQu
dHh0CisrKyBiL0xheW91dFRlc3RzL21lZGlhL2hldmMtY29kZWMtcGFyYW1ldGVycy1leHBlY3Rl
ZC50eHQKQEAgLTEsOCArMSw4IEBACiBFWFBFQ1RFRCAoaW50ZXJuYWxzLnBhcnNlSEVWQ0NvZGVj
UGFyYW1ldGVycygiYmFkLXBhcmFtZXRlciIpID09ICdudWxsJykgT0sKIEVYUEVDVEVEIChpbnRl
cm5hbHMucGFyc2VIRVZDQ29kZWNQYXJhbWV0ZXJzKCJodmMxIikgPT0gJ251bGwnKSBPSwotRVhQ
RUNURUQgKGludGVybmFscy5wYXJzZUhFVkNDb2RlY1BhcmFtZXRlcnMoImhldjEuMS42Lkw5MyIp
ID09PSAneyAwLCAxLCA2LCBmYWxzZSwgOTMgfScpIE9LCi1FWFBFQ1RFRCAoaW50ZXJuYWxzLnBh
cnNlSEVWQ0NvZGVjUGFyYW1ldGVycygiaGV2MS5BNC40MS5IMTIwIikgPT09ICd7IDEsIDQsIDY1
LCB0cnVlLCAxMjAgfScpIE9LCi1FWFBFQ1RFRCAoaW50ZXJuYWxzLnBhcnNlSEVWQ0NvZGVjUGFy
YW1ldGVycygiaGV2MS5CMS40Lkw2MyIpID09PSAneyAyLCAxLCA0LCBmYWxzZSwgNjMgfScpIE9L
CitFWFBFQ1RFRCAoaW50ZXJuYWxzLnBhcnNlSEVWQ0NvZGVjUGFyYW1ldGVycygiaGV2MS4xLjYu
TDkzIikgPT09ICd7IDAsIDEsIDYsIDkzIH0nKSBPSworRVhQRUNURUQgKGludGVybmFscy5wYXJz
ZUhFVkNDb2RlY1BhcmFtZXRlcnMoImhldjEuQTQuNDEuSDEyMCIpID09PSAneyAxLCA0LCA2NSwg
MTIwIH0nKSBPSworRVhQRUNURUQgKGludGVybmFscy5wYXJzZUhFVkNDb2RlY1BhcmFtZXRlcnMo
ImhldjEuQjEuNC5MNjMiKSA9PT0gJ3sgMiwgMSwgNCwgNjMgfScpIE9LCiBFWFBFQ1RFRCAoaW50
ZXJuYWxzLnBhcnNlSEVWQ0NvZGVjUGFyYW1ldGVycygiaGV2MS5EMS40Lkw2MyIpID09ICdudWxs
JykgT0sKIEVYUEVDVEVEIChpbnRlcm5hbHMucGFyc2VIRVZDQ29kZWNQYXJhbWV0ZXJzKCJoZXYx
LkIxLjQuTDY4MDAwIikgPT0gJ251bGwnKSBPSwogRU5EIE9GIFRFU1QKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL21lZGlhL2hldmMtY29kZWMtcGFyYW1ldGVycy5odG1sIGIvTGF5b3V0VGVzdHMv
bWVkaWEvaGV2Yy1jb2RlYy1wYXJhbWV0ZXJzLmh0bWwKaW5kZXggMWRkY2Q5Y2Y5YzcxMTAxNzk2
OWVlMDIwNzBhYzA4YjY0NzcyYzdlNi4uMmQ3ZTVjOTliODgwMzIzZGMxMTE1M2FiMzRmMzdjOThi
MDE1NGNhMCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvbWVkaWEvaGV2Yy1jb2RlYy1wYXJhbWV0
ZXJzLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvbWVkaWEvaGV2Yy1jb2RlYy1wYXJhbWV0ZXJzLmh0
bWwKQEAgLTQsMjIgKzQsMjAgQEAKICAgICA8c2NyaXB0IHNyYz0idmlkZW8tdGVzdC5qcyI+PC9z
Y3JpcHQ+CiAgICAgPHNjcmlwdD4KICAgICBmdW5jdGlvbiBIRVZDUGFyYW1ldGVyU2V0VG9TdHJp
bmcoc2V0KSB7Ci0gICAgICAgIHJldHVybiBgeyAke3NldC5nZW5lcmFsUHJvZmlsZVNwYWNlIH0s
ICR7c2V0LmdlbmVyYWxQcm9maWxlSURDIH0sICR7c2V0LmdlbmVyYWxQcm9maWxlQ29tcGF0aWJp
bGl0eUZsYWdzIH0sICR7c2V0LmdlbmVyYWxUaWVyRmxhZyB9LCAke3NldC5nZW5lcmFsTGV2ZWxJ
REMgfSB9YDsKKyAgICAgICAgcmV0dXJuIGB7ICR7c2V0LmdlbmVyYWxQcm9maWxlU3BhY2UgfSwg
JHtzZXQuZ2VuZXJhbFByb2ZpbGVJREMgfSwgJHtzZXQuZ2VuZXJhbFByb2ZpbGVDb21wYXRpYmls
aXR5RmxhZ3MgfSwgJHtzZXQuZ2VuZXJhbExldmVsSURDIH0gfWA7CiAgICAgfQogICAgIGZ1bmN0
aW9uIGlzRXF1YWxIRVZDUGFyYW1ldGVyU2V0KHNldEEsIHNldEIpIHsKICAgICAgICAgcmV0dXJu
IHNldEEuZ2VuZXJhbFByb2ZpbGVTcGFjZSA9PT0gc2V0Qi5nZW5lcmFsUHJvZmlsZVNwYWNlCiAg
ICAgICAgICAgICAmJiBzZXRBLmdlbmVyYWxQcm9maWxlSURDID09PSBzZXRCLmdlbmVyYWxQcm9m
aWxlSURDCiAgICAgICAgICAgICAmJiBzZXRBLmdlbmVyYWxQcm9maWxlQ29tcGF0aWJpbGl0eUZs
YWdzID09PSBzZXRCLmdlbmVyYWxQcm9maWxlQ29tcGF0aWJpbGl0eUZsYWdzCi0gICAgICAgICAg
ICAmJiBzZXRBLmdlbmVyYWxUaWVyRmxhZyA9PT0gc2V0Qi5nZW5lcmFsVGllckZsYWcKICAgICAg
ICAgICAgICYmIHNldEEuZ2VuZXJhbExldmVsSURDID09PSBzZXRCLmdlbmVyYWxMZXZlbElEQwog
ICAgIH0KLSAgICBmdW5jdGlvbiBtYWtlSEVWQ1BhcmFtZXRlclNldChnZW5lcmFsUHJvZmlsZVNw
YWNlLCBnZW5lcmFsUHJvZmlsZUlEQywgZ2VuZXJhbFByb2ZpbGVDb21wYXRpYmlsaXR5RmxhZ3Ms
IGdlbmVyYWxUaWVyRmxhZywgZ2VuZXJhbExldmVsSURDKQorICAgIGZ1bmN0aW9uIG1ha2VIRVZD
UGFyYW1ldGVyU2V0KGdlbmVyYWxQcm9maWxlU3BhY2UsIGdlbmVyYWxQcm9maWxlSURDLCBnZW5l
cmFsUHJvZmlsZUNvbXBhdGliaWxpdHlGbGFncywgZ2VuZXJhbExldmVsSURDKQogICAgIHsKICAg
ICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgIGdlbmVyYWxQcm9maWxlU3BhY2U6IGdlbmVyYWxQ
cm9maWxlU3BhY2UsCiAgICAgICAgICAgICBnZW5lcmFsUHJvZmlsZUlEQzogZ2VuZXJhbFByb2Zp
bGVJREMsCiAgICAgICAgICAgICBnZW5lcmFsUHJvZmlsZUNvbXBhdGliaWxpdHlGbGFnczogZ2Vu
ZXJhbFByb2ZpbGVDb21wYXRpYmlsaXR5RmxhZ3MsCi0gICAgICAgICAgICBnZW5lcmFsVGllckZs
YWc6IGdlbmVyYWxUaWVyRmxhZywKICAgICAgICAgICAgIGdlbmVyYWxMZXZlbElEQzogZ2VuZXJh
bExldmVsSURDLAogICAgICAgICB9OwogICAgIH0KQEAgLTMyLDkgKzMwLDkgQEAKICAgICB3aW5k
b3cuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGV2ZW50ID0+IHsKICAgICAgICAgdGVzdEV4cGVj
dGVkKCdpbnRlcm5hbHMucGFyc2VIRVZDQ29kZWNQYXJhbWV0ZXJzKCJiYWQtcGFyYW1ldGVyIikn
LCBudWxsKTsKICAgICAgICAgdGVzdEV4cGVjdGVkKCdpbnRlcm5hbHMucGFyc2VIRVZDQ29kZWNQ
YXJhbWV0ZXJzKCJodmMxIiknLCBudWxsKTsKLSAgICAgICAgdGVzdEV4cGVjdGVkSEVWQ1BhcmFt
ZXRlclNldCgnaW50ZXJuYWxzLnBhcnNlSEVWQ0NvZGVjUGFyYW1ldGVycygiaGV2MS4xLjYuTDkz
IiknLCBtYWtlSEVWQ1BhcmFtZXRlclNldCgwLCAxLCA2LCBmYWxzZSwgOTMpKTsKLSAgICAgICAg
dGVzdEV4cGVjdGVkSEVWQ1BhcmFtZXRlclNldCgnaW50ZXJuYWxzLnBhcnNlSEVWQ0NvZGVjUGFy
YW1ldGVycygiaGV2MS5BNC40MS5IMTIwIiknLCBtYWtlSEVWQ1BhcmFtZXRlclNldCgxLCA0LCA2
NSwgdHJ1ZSwgMTIwKSk7Ci0gICAgICAgIHRlc3RFeHBlY3RlZEhFVkNQYXJhbWV0ZXJTZXQoJ2lu
dGVybmFscy5wYXJzZUhFVkNDb2RlY1BhcmFtZXRlcnMoImhldjEuQjEuNC5MNjMiKScsIG1ha2VI
RVZDUGFyYW1ldGVyU2V0KDIsIDEsIDQsIGZhbHNlLCA2MykpOworICAgICAgICB0ZXN0RXhwZWN0
ZWRIRVZDUGFyYW1ldGVyU2V0KCdpbnRlcm5hbHMucGFyc2VIRVZDQ29kZWNQYXJhbWV0ZXJzKCJo
ZXYxLjEuNi5MOTMiKScsIG1ha2VIRVZDUGFyYW1ldGVyU2V0KDAsIDEsIDYsIDkzKSk7CisgICAg
ICAgIHRlc3RFeHBlY3RlZEhFVkNQYXJhbWV0ZXJTZXQoJ2ludGVybmFscy5wYXJzZUhFVkNDb2Rl
Y1BhcmFtZXRlcnMoImhldjEuQTQuNDEuSDEyMCIpJywgbWFrZUhFVkNQYXJhbWV0ZXJTZXQoMSwg
NCwgNjUsIDEyMCkpOworICAgICAgICB0ZXN0RXhwZWN0ZWRIRVZDUGFyYW1ldGVyU2V0KCdpbnRl
cm5hbHMucGFyc2VIRVZDQ29kZWNQYXJhbWV0ZXJzKCJoZXYxLkIxLjQuTDYzIiknLCBtYWtlSEVW
Q1BhcmFtZXRlclNldCgyLCAxLCA0LCA2MykpOwogICAgICAgICB0ZXN0RXhwZWN0ZWQoJ2ludGVy
bmFscy5wYXJzZUhFVkNDb2RlY1BhcmFtZXRlcnMoImhldjEuRDEuNC5MNjMiKScsIG51bGwpOwog
ICAgICAgICB0ZXN0RXhwZWN0ZWQoJ2ludGVybmFscy5wYXJzZUhFVkNDb2RlY1BhcmFtZXRlcnMo
ImhldjEuQjEuNC5MNjgwMDAiKScsIG51bGwpOwogICAgICAgICBlbmRUZXN0KCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>427725</attachid>
            <date>2021-05-04 18:58:41 -0700</date>
            <delta_ts>2021-05-04 19:45:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225368-20210504185840.patch</filename>
            <type>text/plain</type>
            <size>69527</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc2OTk5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDI1Y2Q0NDMxYTVkYWI0ZThhZWJhMDFj
YmZjZTAxYWQzYjY0YzQ4YjQuLjc0ZWYzZDUzYjNmZmI5NDhhOTkyMTgwMzg2NzRmYTNiYjkwNDM3
OWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMjEtMDUtMDQgIERhcmluIEFkbGVyICA8ZGFyaW5A
YXBwbGUuY29tPgorCisgICAgICAgIFN0cmVhbWxpbmUgY29kZWMgcGFyc2luZywgcmVwbGFjaW5n
IHVzZXMgb2YgSGFzaE1hcCB3aXRoIFNvcnRlZEFycmF5TWFwCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjUzNjgKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHd0Zi9Tb3J0ZWRBcnJheU1hcC5oOiBNb3Zl
ZCBQYWNrZWRBU0NJSUxvd2VyQ29kZXMgaGVyZSBmb3IgcmV1c2UuCisgICAgICAgIFNsaWdodGx5
IHR3ZWFrZWQgQ29tcGFyYWJsZUFTQ0lJU3Vic2V0TGl0ZXJhbCB0byBtYXRjaCBiZXR0ZXIuCisK
IDIwMjEtMDUtMDQgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4K
IAogICAgICAgICBEb24ndCBpdGVyYXRlIE5ldHdvcmtQcm9jZXNzUHJveHk6Om1fd2Vic2l0ZURh
dGFTdG9yZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwppbmRleCA3ZmRlYTdmZDA5MjQ1ZTBkN2JhNDMxZmJlNzI1YThkNWY5
MTEwNjcwLi41Y2EyODRlOTFhODAwM2Y1MGFkYjEwNjJjOGQ2YWFlZDMxYmRkMWVhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMTA4IEBACisyMDIxLTA1LTA0ICBEYXJpbiBBZGxlciAgPGRhcmluQGFw
cGxlLmNvbT4KKworICAgICAgICBTdHJlYW1saW5lIGNvZGVjIHBhcnNpbmcsIHJlcGxhY2luZyB1
c2VzIG9mIEhhc2hNYXAgd2l0aCBTb3J0ZWRBcnJheU1hcAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1MzY4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9Db250ZW50VHlwZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDb250ZW50VHlwZTo6cGFyYW1ldGVyIGNvbnN0KTogVXNlIGVhcmx5
IHJldHVybiBpbnN0ZWFkIG9mIG5lc3RpbmcuCisgICAgICAgIFN0cmlwIEhUTUwgc3BhY2VzLCBu
b3QgYWxsIHdoaXRlc3BhY2UsIGFuZCBkbyBpdCBvbmx5IG9uY2UgcmF0aGVyIHRoYW4gdHdpY2Uu
CisgICAgICAgIEZpeGVkIGEgc21hbGwgYnVnIHdoZXJlIHdlIHNlYXJjaCBmb3IgdGhlIHNlY29u
ZCBxdW90YXRpb24gbWFyayBpbiBhIHdheSB0aGF0CisgICAgICAgIGNvdWxkIGZpbmQgdGhlIHNh
bWUgcXVvdGF0aW9uIG1hcmsgdHdpY2UgaWYgdGhlcmUgaXMgYSBzcGFjZSBiZWZvcmUgdGhlIGZp
cnN0CisgICAgICAgIG9uZS4gQWRkZWQgRklYTUUgY29tbWVudHMgYWJvdXQgYSBmZXcgb2J2aW91
cyBwcm9ibGVtcyBpbiB0aGUgcGFyc2luZyBhbGdvcml0aG0uCisgICAgICAgIEltcHJvdmVkIGVm
ZmljaWVuY3kgYnkgdXNpbmcgU3RyaW5nVmlldywgc2F2aW5nIHRoZSBhbGxvY2F0aW9uIG9mIG9u
ZSB0ZW1wb3JhcnkKKyAgICAgICAgU3RyaW5nSW1wbCBpbiB0aGUgY2FzZSB3aGVyZSB3ZSBoYXZl
IHNvbWUgSFRNTCBzcGFjZXMgdG8gc3RyaXAuCisgICAgICAgIChXZWJDb3JlOjpDb250ZW50VHlw
ZTo6Y29udGFpbmVyVHlwZSBjb25zdCk6IFNpbXBsaWZpZWQgdGhlIGltcGxlbWVtZW50YXRpb24K
KyAgICAgICAgYnkgdGFraW5nIGFkdmFudGFnZSBvZiB0aGUgZmFjdCB0aGF0IG91ciBub3RGb3Vu
ZCB2YWx1ZSBpcyBkZXNpZ25lZCB0byBiZSB1c2VkCisgICAgICAgIGFzIGFuIGFyZ3VtZW50IHRv
IGZ1bmN0aW9ucyBsaWtlIFN0cmluZzo6bGVmdCwgdGVsbGluZyB0aGVtIHRvIHJldHVybiB0aGUK
KyAgICAgICAgZW50aXJlIHN0cmluZy4gU3RyaXAgSFRNTCBzcGFjZXMsIG5vdCBhbGwgd2hpdGVz
cGFjZS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0hFVkNVdGlsaXRpZXMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6cGFyc2VIRVZDQ29kZWNQYXJhbWV0ZXJzKTogVGFrZSBhIFN0cmlu
Z1ZpZXcgaW5zdGVhZCBvZiBhIFN0cmluZworICAgICAgICBmb3IgZ3JlYXRlciBmbGV4aWJpbGl0
eSBhbmQgZWZmaWNpZW5jeS4gRG9uJ3Qgc3RvcmUgY29kZWNOYW1lLCB3aGljaCBpcworICAgICAg
ICBuZXZlciB1c2VkIGFmdGVyIHZlcmlmeWluZyB0aGF0IGl0IGlzIGEgbGVnYWwgdmFsdWUgaGVy
ZS4gRG9uJ3Qgc3RvcmUgdGhlCisgICAgICAgIGdlbmVyYWxUaWVyRmxhZywgd2hpY2ggaXMgbmV2
ZXIgdXNlZCBhZnRlciB2ZXJpZnlpbmcgdGhhdCBpdCBpcyBhIGxlZ2FsCisgICAgICAgIHZhbHVl
IGhlcmUuIERvbid0IHN0b3JlIHRoZSBjb25zdHJhaW50IGZsYWdzLCB3aGljaCBhcmUgbmV2ZXIg
dXNlZCBhZnRlcgorICAgICAgICB2ZXJpZnlpbmcgdGhhdCB0aGV5IGFyZSBsZWdhbCB2YWx1ZXMg
aGVyZS4KKyAgICAgICAgKFdlYkNvcmU6Om1ha2VPcHRpb25hbEZyb21Qb2ludGVyKTogQWRkZWQg
dG8gbWFrZSBjb2RlIGJlbG93IGNsZWFuZXIuCisgICAgICAgIChXZWJDb3JlOjpwYXJzZURvVmlD
b2RlY1R5cGUpOiBSZW5hbWVkIGZyb20gY29kZWNTdHJpbmdGb3JEb1ZpQ29kZWNUeXBlCisgICAg
ICAgIHNpbmNlIGl0IG5vdyByZXR1cm5zIGFuIGVudW1lcmF0aW9uIHZhbHVlIGluc3RlYWQgb2Yg
YSBzdHJpbmcuIEFsc28KKyAgICAgICAgdGFrZSBhIFN0cmluZ1ZpZXcgaW5zdGVhZCBvZiBhIFN0
cmluZyBmb3IgZ3JlYXRlciBmbGV4aWJpbGl0eSBhbmQgZWZmaWNpZW5jeS4KKyAgICAgICAgQWxz
byB1c2UgYSBTb3J0ZWRBcnJheU1hcCBpbnN0ZWFkIG9mIGEgTWVtb3J5Q29tcGFjdExvb2t1cE9u
bHlSb2Jpbkhvb2RIYXNoTWFwLgorICAgICAgICAoV2ViQ29yZTo6cHJvZmlsZUlERm9yQWxwaGFi
ZXRpY0RvVmlQcm9maWxlKTogVGFrZSBhIFN0cmluZ1ZpZXcgaW5zdGVhZCBvZgorICAgICAgICBh
IFN0cmluZyBmb3IgZ3JlYXRlciBmbGV4aWJpbGl0eSBhbmQgZWZmaWNpZW5jeS4gVXNlIGEgU29y
dGVkQXJyYXlNYXAgaW5zdGVhZAorICAgICAgICBvZiBhIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5
Um9iaW5Ib29kSGFzaE1hcC4KKyAgICAgICAgKFdlYkNvcmU6OmlzVmFsaWRQcm9maWxlSURGb3JD
b2RlYyk6IFRha2UgYSBjb2RlYyBlbnVtZXJhdGlvbiB2YWx1ZSBwYXJhbWV0ZXIKKyAgICAgICAg
aW5zdGVhZCBvZiBhIHN0cmluZy4KKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlRG9WaUNvZGVjUGFy
YW1ldGVycyk6IFRha2UgYSBTdHJpbmdWaWV3IGluc3RlYWQgb2YgYSBTdHJpbmcKKyAgICAgICAg
Zm9yIGdyZWF0ZXIgZmxleGliaWxpdHkgYW5kIGVmZmljaWVuY3kuIFN0b3JlIHRoZSBjb2RlYyBh
cyBhbiBlbnVtZXJhdGlvbgorICAgICAgICBpbnN0ZWFkIG9mIGEgU3RyaW5nLiBEb24ndCBjcmVh
dGUgYSB0ZW1wb3JhcnkgU3RyaW5nIGp1c3Qgc28gd2UgY2FuIGNhbGwgdGhlCisgICAgICAgIHBy
b2ZpbGVJREZvckFscGhhYmV0aWNEb1ZpUHJvZmlsZSBmdW5jdGlvbi4KKworICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL0hFVkNVdGlsaXRpZXMuaDogUmVuYW1lZCBIRVZDUGFyYW1ldGVyU2V0
IGFuZAorICAgICAgICBEb1ZpUGFyYW1ldGVyU2V0IHRvIEhFVkNQYXJhbWV0ZXJzIGFuZCBEb1Zp
UGFyYW1ldGVycy4gVGhlIHdvcmQgInNldCIgaXMgbm90CisgICAgICAgIGhlbHBmdWwgaW4gdGhl
c2UgbmFtZXMuIFJlbW92ZWQgY29kZWNOYW1lLCBnZW5lcmFsVGllckZsYWcsIGFuZCBjb25zdHJh
aW50RmxhZ3MKKyAgICAgICAgZnJvbSBIRVZDUGFyYW1ldGVyU2V0LiBDaGFuZ2VkIHRoZSBwYXJz
ZSBmdW5jdGlvbnMgdG8gdGFrZSBTdHJpbmdWaWV3IGluc3RlYWQKKyAgICAgICAgb2YgU3RyaW5n
LiBSZXBsYWNlZCB0aGUgc3RyaW5nIGNvZGVjTmFtZSBpbiBEb1ZpUGFyYW1ldGVyU2V0IHdpdGgg
YW4gZW51bWVyYXRpb24KKyAgICAgICAgc2luY2UgdGhlcmUgYXJlIG9ubHkgYSBmZXcgdmFsaWQg
dmFsdWVzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSEVWQ1V0aWxpdGll
c0NvY29hLmg6IFVzZSBPcHRpb25hbCByZXR1cm4gdmFsdWUKKyAgICAgICAgaW5zdGVhZCBvZiBh
IGJvb2wgYW5kIGFuIG91dCBhcmd1bWVudC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NvY29hL0hFVkNVdGlsaXRpZXNDb2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6OnZhbGlkYXRl
SEVWQ1BhcmFtZXRlcnMpOiBVcGRhdGVkIHRvIHJldHVybiBPcHRpb25hbC4KKyAgICAgICAgKFdl
YkNvcmU6OmNvZGVjVHlwZSk6IFVwZGF0ZWQgdG8gdGFrZSBhbiBlbnVtZXJhdGlvbiB2YWx1ZSBh
bmQgbm8gbG9uZ2VyCisgICAgICAgIG5lZWQgdG8gcmV0dXJuIGFuIG9wdGlvbmFsLiBBbHNvIHJl
bmFtZWQgZnJvbSBjb2RlY1R5cGVGb3JEb1ZpQ29kZWNTdHJpbmcKKyAgICAgICAgc2luY2UgdGhl
IHR5cGUgbm93IG1ha2VzIHRoaXMgY2xlYXIgd2l0aG91dCBhIGxvbmcgZnVuY3Rpb24gbmFtZS4K
KyAgICAgICAgKFdlYkNvcmU6OnBhcnNlU3RyaW5nQXJyYXlGcm9tRGljdGlvbmFyeVRvVUludDE2
VmVjdG9yKTogUmVuYW1lZCBmcm9tCisgICAgICAgIENGU3RyaW5nQXJyYXlUb051bWJlclZlY3Rv
ciwgYW5kIG1vdmVkIHRoZSBkaWN0aW9uYXJ5IGxvb2t1cCBpbiBoZXJlLgorICAgICAgICBUaGUg
b2xkIG5hbWUgd2FzIGEgbGl0dGxlIHZhZ3VlOyAiTnVtYmVyVmVjdG9yIiBkb2Vzbid0IHNheSAx
Ni1iaXQgdW5zaWduZWQuCisgICAgICAgIFNpbXBsaWZpZWQgY29kZSBieSB1c2luZyBhbiBPYmpl
Y3RpdmUtQyBmb3IgbG9vcCBpbnN0ZWFkIG9mIGEgYmxvY2sgYW5kCisgICAgICAgIGVudW1lcmF0
aW9uLiBUaGlzIGN1dCB0aGUgc2l6ZSBvZiB0aGUgZnVuY3Rpb24gZG93biBxdWl0ZSBhIGJpdC4K
KyAgICAgICAgKFdlYkNvcmU6OnZhbGlkYXRlRG9WaVBhcmFtZXRlcnMpOiBVcGRhdGVkIHRvIHJl
dHVybiBPcHRpb25hbC4gQWxzbworICAgICAgICByZWZhY3RvcmVkIHRvIHVzZSB0aGUgaW1ycG92
ZWQgaGVscGVyIGZ1bmN0aW9ucyBhYm92ZS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NvY29hL01lZGlhRW5naW5lQ29uZmlndXJhdGlvbkZhY3RvcnlDb2NvYS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjp2aWRlb0NvZGVjVHlwZUZyb21SRkM0MjgxVHlwZSk6IFRha2UgYSBTdHJpbmdW
aWV3IGluc3RlYWQgb2YgYSBTdHJpbmcKKyAgICAgICAgZm9yIGdyZWF0ZXIgZmxleGliaWxpdHkg
YW5kIGVmZmljaWVuY3kuCisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlTWVkaWFDYXBhYmlsaXRp
ZXNJbmZvKTogRmFjdG9yZWQgb3V0IHRoaXMgaGVscGVyIGZ1bmN0aW9uCisgICAgICAgIHNvIHdl
IGRvbid0IGhhdmUgc3VjaCBjb21wbGljYXRlZCBjYWxsYmFjayBsb2dpYy4gUmVmYWN0b3JlZCB0
byB1c2UgdGhlIG5ldworICAgICAgICB2ZXJzaW9ucyBvZiB2YWxpZGF0ZUhFVkNQYXJhbWV0ZXJz
LCB2YWxpZGF0ZURvVmlQYXJhbWV0ZXJzLCBhbmQKKyAgICAgICAgdmFsaWRhdGVWUFBhcmFtZXRl
cnMuCisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVNZWRpYVBsYXllckRlY29kaW5nQ29uZmlndXJh
dGlvbkNvY29hKTogTW92ZWQgbW9zdCBvZiB0aGUKKyAgICAgICAgY29kZSBpbnRvIGNvbXB1dGVN
ZWRpYUNhcGFiaWxpdGllc0luZm87IHRoaXMgbW9zdGx5IGRlYWxzIHdpdGggdGhlIGNhbGxiYWNr
LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvVlA5VXRpbGl0aWVzQ29jb2Eu
aDogUmVtb3ZlZCBleHRyYW5lb3VzIHVzZSBvZiBleHRlcm4uCisgICAgICAgIEFkZGVkIGNvbnN0
IGZvciBpbnB1dC1vbmx5IHJlZmVyZW5jZSBhcmd1bWVudHMuIENoYW5nZWQgdmFsaWRhdGVWUFBh
cmFtZXRlcnMgdG8KKyAgICAgICAgcmV0dXJuIE9wdGlvbmFsIGluc3RlYWQgb2YgYSBib29sIHdp
dGggYW4gb3V0IGFyZ3VtZW50LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
VlA5VXRpbGl0aWVzQ29jb2EubW06CisgICAgICAgIChXZWJDb3JlOjppc1ZQOUNvZGVjQ29uZmln
dXJhdGlvblJlY29yZFN1cHBvcnRlZCk6IEFkZGVkIGNvbnN0LgorICAgICAgICAoV2ViQ29yZTo6
aXNWUDhDb2RlY0NvbmZpZ3VyYXRpb25SZWNvcmRTdXBwb3J0ZWQpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OmlzVlBDb2RlY0NvbmZpZ3VyYXRpb25SZWNvcmRTdXBwb3J0ZWQpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OnZhbGlkYXRlVlBQYXJhbWV0ZXJzKTogUmVmYWN0b3JlZCB0byBy
ZXR1cm4gT3B0aW9uYWwuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0hUVFBIZWFkZXJN
YXAuaDogUmVtb3ZlZCB1bm5lZWRlZCBpbmNsdWRlcy4KKworICAgICAgICAqIHBsYXRmb3JtL3Rl
eHQvTG9jYWxlVG9TY3JpcHRNYXBwaW5nLmNwcDogTW92ZWQgUGFja2VkQVNDSUlMb3dlckNvZGVz
IGZyb20KKyAgICAgICAgaGVyZSBpbnRvIHRoZSBTb3J0ZWRBcnJheU1hcC5oIGhlYWRlci4KKwor
ICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkludGVy
bmFsczo6cGFyc2VIRVZDQ29kZWNQYXJhbWV0ZXJzKTogVHdlYWtlZCBzaW5jZSBIRVZDUGFyYW1l
dGVyU2V0CisgICAgICAgIGlzIG5vdyBvbmx5IHRoZSBjb3JyZWN0IG5hbWUgaGVyZSBpbiB0aGUg
SW50ZXJuYWxzIGNsYXNzLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpwYXJzZURvVmlD
b2RlY1BhcmFtZXRlcnMpOiBEaXR0by4gQWxzbyBhZGRlZCBjb2RlIHRvCisgICAgICAgIGV4cG9z
ZSB0aGUgY29kZWMgZW51bWVyYXRpb24gYXMgYSBzdHJpbmcuIFRoaXMgaXMgbm93IGEgdGVzdGlu
Zy1vbmx5IHRoaW5nLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpwYXJzZVZQQ29kZWNQ
YXJhbWV0ZXJzKTogRGl0dG8uCisKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5oOiBUd2Vh
a2VkIHRoZSBQYXJhbWV0ZXJTZXQgdHlwZXMgc2luY2UgdGhleSBub3cgZG9uJ3QKKyAgICAgICAg
ZXhhY3RseSBtYXRjaCB0aGUgc3RydWN0dXJlcyB1c2VkIGluIHRoZSByZWFsIGNvZGUuCisKKyAg
ICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5pZGw6IFJlbW92ZWQgY29kZWNOYW1lLCBnZW5lcmFs
VGllckZsYWcsIGFuZAorICAgICAgICBjb25zdHJhaW50RmxhZ3MgZnJvbSBIRVZDUGFyYW1ldGVy
U2V0LiBOZWl0aGVyIGNvZGVjTmFtZSBub3IgY29uc3RyYWludEZsYWdzCisgICAgICAgIHdhcyB1
c2VkIGluIGFueSB0ZXN0LiBBbmQgdGhlIGdlbmVyYWxUaWVyRmxhZyB0ZXN0IHdhcyBzb21ldGhp
bmcgd2UgY2FuCisgICAgICAgIGRvIHdpdGhvdXQ7IHRoZSBwYXJzZWQgdmFsdWUgaXNuJ3QgYWN0
dWFsbHkgdXNlZCBpbiBhbnkgV2ViS2l0IGNvZGUuCisKIDIwMjEtMDUtMDQgIEtlbm5ldGggUnVz
c2VsbCAgPGtickBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViS2l0IG11c3QgdHJlYXQgJ3dl
YmdsJyBhbmQgJ3dlYmdsMicgYXMgZGlzdGluY3QgY29udGV4dCB0eXBlcwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA3
YWE2MDgzOTEwOWNlZjNjMjllNmEyYTk4OWIyOGU5ODA0N2VkYmUxLi4xZjY2NWE2YzY2Yzk2OTJh
MThhN2MxYjM0MDFiMDNkMjVhZmUwYTQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDIx
LTA1LTA0ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBTdHJlYW1s
aW5lIGNvZGVjIHBhcnNpbmcsIHJlcGxhY2luZyB1c2VzIG9mIEhhc2hNYXAgd2l0aCBTb3J0ZWRB
cnJheU1hcAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjI1MzY4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBTaGFyZWQvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yVHJhbnNh
Y3Rpb24uY3BwOgorICAgICAgICBSZW1vdmVkIHVubmVlZGVkIGluY2x1ZGUuCisgICAgICAgICog
U2hhcmVkL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhLmg6IERpdHRvLgorCiAyMDIxLTA1LTA0ICBK
aWV3ZW4gVGFuICA8amlld2VuX3RhbkBhcHBsZS5jb20+CiAKICAgICAgICAgUENNOiBGaW5kIGEg
d2F5IHRvIHZhbGlkYXRlIHNvdXJjZV9zZWNyZXRfdG9rZW4gYW5kIHNvdXJjZV9zZWNyZXRfdG9r
ZW5fc2lnbmF0dXJlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9Tb3J0ZWRBcnJheU1hcC5o
IGIvU291cmNlL1dURi93dGYvU29ydGVkQXJyYXlNYXAuaAppbmRleCAwM2Q3MGJkNDk0MDI5NmIx
YzM3YjUxZTkxMzUyZTFiOTU2M2VkN2U3Li5mMDdlYTI2ZTZlODM5MzI3Y2I3ZWViMzA0OTVmYWZh
N2ZlNWRhOTUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9Tb3J0ZWRBcnJheU1hcC5oCisr
KyBiL1NvdXJjZS9XVEYvd3RmL1NvcnRlZEFycmF5TWFwLmgKQEAgLTgxLDcgKzgxLDcgQEAgZW51
bSBjbGFzcyBBU0NJSVN1YnNldCB7IEFsbCwgTm9VcHBlcmNhc2VMZXR0ZXJzLCBOb1VwcGVyY2Fz
ZUxldHRlcnNPcHRpbWl6ZWQgfTsKIAogdGVtcGxhdGU8QVNDSUlTdWJzZXQ+IHN0cnVjdCBDb21w
YXJhYmxlQVNDSUlTdWJzZXRMaXRlcmFsIHsKICAgICBBU0NJSUxpdGVyYWwgbGl0ZXJhbDsKLSAg
ICB0ZW1wbGF0ZTxzdGQ6OnNpemVfdCBzaXplPiBjb25zdGV4cHIgQ29tcGFyYWJsZUFTQ0lJU3Vi
c2V0TGl0ZXJhbChjb25zdCBjaGFyICgmY2hhcmFjdGVycylbc2l6ZV0pOworICAgIHRlbXBsYXRl
PHVuc2lnbmVkIHNpemU+IGNvbnN0ZXhwciBDb21wYXJhYmxlQVNDSUlTdWJzZXRMaXRlcmFsKGNv
bnN0IGNoYXIgKCZjaGFyYWN0ZXJzKVtzaXplXSk7CiAgICAgc3RhdGljIE9wdGlvbmFsPENvbXBh
cmFibGVTdHJpbmdWaWV3PiBwYXJzZShTdHJpbmdWaWV3IHN0cmluZykgeyByZXR1cm4geyB7IHN0
cmluZyB9IH07IH0KIH07CiAKQEAgLTEwMyw3ICsxMDMsMjMgQEAgYm9vbCBvcGVyYXRvcjwoQ29t
cGFyYWJsZUNhc2VGb2xkaW5nQVNDSUlMaXRlcmFsLCBDb21wYXJhYmxlU3RyaW5nVmlldyk7CiBi
b29sIG9wZXJhdG9yPChDb21wYXJhYmxlTGV0dGVyc0xpdGVyYWwsIENvbXBhcmFibGVTdHJpbmdW
aWV3KTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgT3RoZXJUeXBlPiBib29sIG9wZXJhdG9yPT0oT3Ro
ZXJUeXBlLCBDb21wYXJhYmxlU3RyaW5nVmlldyk7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBPdGhlclR5
cGU+IGJvb2wgb3BlcmF0b3IhPShDb21wYXJhYmxlU3RyaW5nVmlldywgT3RoZXJUeXBlKTsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgU3RvcmFnZUludGVnZXI+IGNsYXNzIFBhY2tlZEFTQ0lJTG93ZXJD
b2RlcyB7CitwdWJsaWM6CisgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3Vuc2lnbmVkX3Y8U3Rv
cmFnZUludGVnZXI+KTsKKworICAgIHRlbXBsYXRlPHVuc2lnbmVkIHNpemU+IGNvbnN0ZXhwciBQ
YWNrZWRBU0NJSUxvd2VyQ29kZXMoY29uc3QgY2hhciAoJmNoYXJhY3RlcnMpW3NpemVdKTsKKyAg
ICBzdGF0aWMgT3B0aW9uYWw8UGFja2VkQVNDSUlMb3dlckNvZGVzPiBwYXJzZShTdHJpbmdWaWV3
KTsKKyAgICBjb25zdGV4cHIgU3RvcmFnZUludGVnZXIgdmFsdWUoKSBjb25zdCB7IHJldHVybiBt
X3ZhbHVlOyB9CisKK3ByaXZhdGU6CisgICAgdGVtcGxhdGU8dW5zaWduZWQgc2l6ZT4gc3RhdGlj
IGNvbnN0ZXhwciBTdG9yYWdlSW50ZWdlciBwYWNrKGNvbnN0IGNoYXIgKCZjaGFyYWN0ZXJzKVtz
aXplXSk7CisgICAgZXhwbGljaXQgY29uc3RleHByIFBhY2tlZEFTQ0lJTG93ZXJDb2RlcyhTdG9y
YWdlSW50ZWdlcik7CisgICAgU3RvcmFnZUludGVnZXIgbV92YWx1ZSB7IDAgfTsKK307CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFN0b3JhZ2VJbnRlZ2VyPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj09
KFBhY2tlZEFTQ0lJTG93ZXJDb2RlczxTdG9yYWdlSW50ZWdlcj4sIFBhY2tlZEFTQ0lJTG93ZXJD
b2RlczxTdG9yYWdlSW50ZWdlcj4pOwordGVtcGxhdGU8dHlwZW5hbWUgU3RvcmFnZUludGVnZXI+
IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPChQYWNrZWRBU0NJSUxvd2VyQ29kZXM8U3RvcmFnZUlu
dGVnZXI+LCBQYWNrZWRBU0NJSUxvd2VyQ29kZXM8U3RvcmFnZUludGVnZXI+KTsKIAogdGVtcGxh
dGU8QVNDSUlTdWJzZXQgc3Vic2V0PiBjb25zdGV4cHIgYm9vbCBpc0luU3Vic2V0KGNoYXIgY2hh
cmFjdGVyKQogewpAQCAtMTE5LDcgKzEzNSw3IEBAIHRlbXBsYXRlPEFTQ0lJU3Vic2V0IHN1YnNl
dD4gY29uc3RleHByIGJvb2wgaXNJblN1YnNldChjaGFyIGNoYXJhY3RlcikKICAgICB9CiB9CiAK
LXRlbXBsYXRlPEFTQ0lJU3Vic2V0IHN1YnNldD4gdGVtcGxhdGU8c3RkOjpzaXplX3Qgc2l6ZT4g
Y29uc3RleHByIENvbXBhcmFibGVBU0NJSVN1YnNldExpdGVyYWw8c3Vic2V0Pjo6Q29tcGFyYWJs
ZUFTQ0lJU3Vic2V0TGl0ZXJhbChjb25zdCBjaGFyICgmY2hhcmFjdGVycylbc2l6ZV0pCit0ZW1w
bGF0ZTxBU0NJSVN1YnNldCBzdWJzZXQ+IHRlbXBsYXRlPHVuc2lnbmVkIHNpemU+IGNvbnN0ZXhw
ciBDb21wYXJhYmxlQVNDSUlTdWJzZXRMaXRlcmFsPHN1YnNldD46OkNvbXBhcmFibGVBU0NJSVN1
YnNldExpdGVyYWwoY29uc3QgY2hhciAoJmNoYXJhY3RlcnMpW3NpemVdKQogICAgIDogbGl0ZXJh
bCB7IEFTQ0lJTGl0ZXJhbDo6ZnJvbUxpdGVyYWxVbnNhZmUoY2hhcmFjdGVycykgfQogewogICAg
IEFTU0VSVF9VTkRFUl9DT05TVEVYUFJfQ09OVEVYVChhbGxPZkNvbnN0RXhwcigmY2hhcmFjdGVy
c1swXSwgJmNoYXJhY3RlcnNbc2l6ZSAtIDFdLCBbXSAoY2hhciBjaGFyYWN0ZXIpIHsKQEAgLTMw
MSwxNyArMzE3LDYyIEBAIHRlbXBsYXRlPHR5cGVuYW1lIE90aGVyVHlwZT4gaW5saW5lIGJvb2wg
b3BlcmF0b3I9PShPdGhlclR5cGUgYSwgQ29tcGFyYWJsZVN0cmluCiAgICAgcmV0dXJuIGIgPT0g
YTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgT3RoZXJUeXBlPiBpbmxpbmUgYm9vbCBvcGVyYXRv
ciE9KENvbXBhcmFibGVTdHJpbmdWaWV3IGEsIE90aGVyVHlwZSBiKQordGVtcGxhdGU8dHlwZW5h
bWUgU3RvcmFnZUludGVnZXI+IHRlbXBsYXRlPHVuc2lnbmVkIHNpemU+IGNvbnN0ZXhwciBQYWNr
ZWRBU0NJSUxvd2VyQ29kZXM8U3RvcmFnZUludGVnZXI+OjpQYWNrZWRBU0NJSUxvd2VyQ29kZXMo
Y29uc3QgY2hhciAoJnN0cmluZylbc2l6ZV0pCisgICAgOiBtX3ZhbHVlIHsgcGFjayhzdHJpbmcp
IH0KK3sKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgU3RvcmFnZUludGVnZXI+IGNvbnN0ZXhwciBQ
YWNrZWRBU0NJSUxvd2VyQ29kZXM8U3RvcmFnZUludGVnZXI+OjpQYWNrZWRBU0NJSUxvd2VyQ29k
ZXMoU3RvcmFnZUludGVnZXIgdmFsdWUpCisgICAgOiBtX3ZhbHVlIHsgdmFsdWUgfQoreworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBTdG9yYWdlSW50ZWdlcj4gdGVtcGxhdGU8dW5zaWduZWQgc2l6
ZT4gY29uc3RleHByIFN0b3JhZ2VJbnRlZ2VyIFBhY2tlZEFTQ0lJTG93ZXJDb2RlczxTdG9yYWdl
SW50ZWdlcj46OnBhY2soY29uc3QgY2hhciAoJnN0cmluZylbc2l6ZV0pCit7CisgICAgQVNTRVJU
X1VOREVSX0NPTlNURVhQUl9DT05URVhUKHNpemUpOworICAgIGNvbnN0ZXhwciB1bnNpZ25lZCBs
ZW5ndGggPSBzaXplIC0gMTsKKyAgICBBU1NFUlRfVU5ERVJfQ09OU1RFWFBSX0NPTlRFWFQoIXN0
cmluZ1tsZW5ndGhdKTsKKyAgICBBU1NFUlRfVU5ERVJfQ09OU1RFWFBSX0NPTlRFWFQobGVuZ3Ro
IDw9IHNpemVvZihTdG9yYWdlSW50ZWdlcikpOworICAgIFN0b3JhZ2VJbnRlZ2VyIHJlc3VsdCA9
IDA7CisgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyArK2luZGV4
KSB7CisgICAgICAgIFN0b3JhZ2VJbnRlZ2VyIGNvZGUgPSBzdGF0aWNfY2FzdDx1aW50OF90Pihz
dHJpbmdbaW5kZXhdKTsKKyAgICAgICAgcmVzdWx0IHw9IGNvZGUgPDwgKChzaXplb2YoU3RvcmFn
ZUludGVnZXIpIC0gaW5kZXggLSAxKSAqIDgpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBTdG9yYWdlSW50ZWdlcj4gYXV0byBQYWNrZWRBU0NJSUxv
d2VyQ29kZXM8U3RvcmFnZUludGVnZXI+OjpwYXJzZShTdHJpbmdWaWV3IHN0cmluZykgLT4gT3B0
aW9uYWw8UGFja2VkQVNDSUlMb3dlckNvZGVzPgoreworICAgIGlmIChzdHJpbmcubGVuZ3RoKCkg
PiBzaXplb2YoU3RvcmFnZUludGVnZXIpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
ICAgIFN0b3JhZ2VJbnRlZ2VyIHJlc3VsdCA9IDA7CisgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9
IDA7IGluZGV4IDwgc3RyaW5nLmxlbmd0aCgpOyArK2luZGV4KSB7CisgICAgICAgIFVDaGFyIGNv
ZGUgPSBzdHJpbmdbaW5kZXhdOworICAgICAgICBpZiAoIWlzQVNDSUkoY29kZSkpCisgICAgICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICByZXN1bHQgfD0gc3RhdGljX2Nhc3Q8
U3RvcmFnZUludGVnZXI+KHRvQVNDSUlMb3dlcihjb2RlKSkgPDwgKChzaXplb2YoU3RvcmFnZUlu
dGVnZXIpIC0gaW5kZXggLSAxKSAqIDgpOworICAgIH0KKyAgICByZXR1cm4gUGFja2VkQVNDSUlM
b3dlckNvZGVzKHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFN0b3JhZ2VJbnRlZ2Vy
PiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj09KFBhY2tlZEFTQ0lJTG93ZXJDb2RlczxTdG9yYWdl
SW50ZWdlcj4gYSwgUGFja2VkQVNDSUlMb3dlckNvZGVzPFN0b3JhZ2VJbnRlZ2VyPiBiKQorewor
ICAgIHJldHVybiBhLnZhbHVlKCkgPT0gYi52YWx1ZSgpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBTdG9yYWdlSW50ZWdlcj4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I8KFBhY2tlZEFTQ0lJTG93
ZXJDb2RlczxTdG9yYWdlSW50ZWdlcj4gYSwgUGFja2VkQVNDSUlMb3dlckNvZGVzPFN0b3JhZ2VJ
bnRlZ2VyPiBiKQogewotICAgIHJldHVybiAhKGEgPT0gYik7CisgICAgcmV0dXJuIGEudmFsdWUo
KSA8IGIudmFsdWUoKTsKIH0KIAogfQogCisvLyBGSVhNRTogUmVuYW1lIHRoZSBDb21wYXJhYmxl
IGFuZCBQYWNrZWQgdHlwZXMgZm9yIGNsYXJpdHkgYW5kIHRvIGFsaWduIHRoZW0gYmV0dGVyIHdp
dGggZWFjaCBvdGhlci4KIHVzaW5nIFdURjo6QVNDSUlTdWJzZXQ7CiB1c2luZyBXVEY6OkNvbXBh
cmFibGVBU0NJSUxpdGVyYWw7CiB1c2luZyBXVEY6OkNvbXBhcmFibGVBU0NJSVN1YnNldExpdGVy
YWw7CiB1c2luZyBXVEY6OkNvbXBhcmFibGVDYXNlRm9sZGluZ0FTQ0lJTGl0ZXJhbDsKIHVzaW5n
IFdURjo6Q29tcGFyYWJsZUxldHRlcnNMaXRlcmFsOwordXNpbmcgV1RGOjpQYWNrZWRBU0NJSUxv
d2VyQ29kZXM7CiB1c2luZyBXVEY6OlNvcnRlZEFycmF5TWFwOwogdXNpbmcgV1RGOjpTb3J0ZWRB
cnJheVNldDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0NvbnRlbnRUeXBl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0NvbnRlbnRUeXBlLmNwcAppbmRleCBmMGQy
YzEwYjg4ZjIwODdlYmRhYmYxNTdiYzgxYjY1YzU4MDgxMzg5Li43NTEyYjAyM2Q1YTI0MTY5Zjg1
ZTQ4MGMxZTBiMDg2N2IxNmEwYzY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9Db250ZW50VHlwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ29udGVudFR5
cGUuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOCwg
MjAxMyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA2LTIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAo
QykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3
dy50b3JjaG1vYmlsZS5jb20vKQogICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKQEAgLTU3LDQzICs1Nyw0NCBAQCBjb25zdCBTdHJpbmcm
IENvbnRlbnRUeXBlOjpwcm9maWxlc1BhcmFtZXRlcigpCiAKIFN0cmluZyBDb250ZW50VHlwZTo6
cGFyYW1ldGVyKGNvbnN0IFN0cmluZyYgcGFyYW1ldGVyTmFtZSkgY29uc3QKIHsKLSAgICBTdHJp
bmcgcGFyYW1ldGVyVmFsdWU7Ci0gICAgU3RyaW5nIHN0cmlwcGVkVHlwZSA9IG1fdHlwZS5zdHJp
cFdoaXRlU3BhY2UoKTsKLQotICAgIC8vIGEgTUlNRSB0eXBlIGNhbiBoYXZlIG9uZSBvciBtb3Jl
ICJwYXJhbT12YWx1ZSIgYWZ0ZXIgYSBzZW1pLWNvbG9uLCBhbmQgc2VwYXJhdGVkIGZyb20gZWFj
aCBvdGhlciBieSBzZW1pLWNvbG9ucwotICAgIHNpemVfdCBzZW1pID0gc3RyaXBwZWRUeXBlLmZp
bmQoJzsnKTsKLSAgICBpZiAoc2VtaSAhPSBub3RGb3VuZCkgewotICAgICAgICBzaXplX3Qgc3Rh
cnQgPSBzdHJpcHBlZFR5cGUuZmluZElnbm9yaW5nQVNDSUlDYXNlKHBhcmFtZXRlck5hbWUsIHNl
bWkgKyAxKTsKLSAgICAgICAgaWYgKHN0YXJ0ICE9IG5vdEZvdW5kKSB7Ci0gICAgICAgICAgICBz
dGFydCA9IHN0cmlwcGVkVHlwZS5maW5kKCc9Jywgc3RhcnQgKyBwYXJhbWV0ZXJOYW1lLmxlbmd0
aCgpKTsKLSAgICAgICAgICAgIGlmIChzdGFydCAhPSBub3RGb3VuZCkgewotICAgICAgICAgICAg
ICAgIHNpemVfdCBxdW90ZSA9IHN0cmlwcGVkVHlwZS5maW5kKCdcIicsIHN0YXJ0ICsgMSk7Ci0g
ICAgICAgICAgICAgICAgc2l6ZV90IGVuZCA9IHN0cmlwcGVkVHlwZS5maW5kKCdcIicsIHN0YXJ0
ICsgMik7Ci0gICAgICAgICAgICAgICAgaWYgKHF1b3RlICE9IG5vdEZvdW5kICYmIGVuZCAhPSBu
b3RGb3VuZCkKLSAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSBxdW90ZTsKLSAgICAgICAgICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgZW5kID0gc3RyaXBwZWRUeXBlLmZpbmQo
JzsnLCBzdGFydCArIDEpOwotICAgICAgICAgICAgICAgICAgICBpZiAoZW5kID09IG5vdEZvdW5k
KQotICAgICAgICAgICAgICAgICAgICAgICAgZW5kID0gc3RyaXBwZWRUeXBlLmxlbmd0aCgpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBwYXJhbWV0ZXJWYWx1ZSA9IHN0cmlw
cGVkVHlwZS5zdWJzdHJpbmcoc3RhcnQgKyAxLCBlbmQgLSAoc3RhcnQgKyAxKSkuc3RyaXBXaGl0
ZVNwYWNlKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAvLyBBIE1JTUUgdHlwZSBj
YW4gaGF2ZSBvbmUgb3IgbW9yZSAicGFyYW09dmFsdWUiIGFmdGVyIGEgc2VtaWNvbG9uLCBzZXBh
cmF0ZWQgZnJvbSBlYWNoIG90aGVyIGJ5IHNlbWljb2xvbnMuCisKKyAgICAvLyBGSVhNRTogVGhp
cyB3aWxsIGlnbm9yZSBhIHF1b3RhdGlvbiBtYXJrIGlmIGl0IGNvbWVzIGJlZm9yZSB0aGUgc2Vt
aWNvbG9uLiBJcyB0aGF0IHRoZSBkZXNpcmVkIGJlaGF2aW9yPworICAgIGF1dG8gc2VtaWNvbG9u
UG9zaXRpb24gPSBtX3R5cGUuZmluZCgnOycpOworICAgIGlmIChzZW1pY29sb25Qb3NpdGlvbiA9
PSBub3RGb3VuZCkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIC8vIEZJWE1FOiBUaGlzIG1h
dGNoZXMgcGFyYW1ldGVycyB0aGF0IGhhdmUgcGFyYW1ldGVyTmFtZSBhcyBhIHN1ZmZpeDsgdGhh
dCBpcyBub3QgdGhlIGRlc2lyZWQgYmVoYXZpb3IuCisgICAgYXV0byBuYW1lU3RhcnQgPSBtX3R5
cGUuZmluZElnbm9yaW5nQVNDSUlDYXNlKHBhcmFtZXRlck5hbWUsIHNlbWljb2xvblBvc2l0aW9u
ICsgMSk7CisgICAgaWYgKG5hbWVTdGFydCA9PSBub3RGb3VuZCkKKyAgICAgICAgcmV0dXJuIHsg
fTsKKworICAgIGF1dG8gZXF1YWxTaWduUG9zaXRpb24gPSBtX3R5cGUuZmluZCgnPScsIG5hbWVT
dGFydCArIHBhcmFtZXRlck5hbWUubGVuZ3RoKCkpOworICAgIGlmIChlcXVhbFNpZ25Qb3NpdGlv
biA9PSBub3RGb3VuZCkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIC8vIEZJWE1FOiBUaGlz
IHNraXBzIG92ZXIgYW55IGNoYXJhY3RlcnMgdGhhdCBjb21lIGJlZm9yZSBhIHF1b3RhdGlvbiBt
YXJrOyB0aGF0IGlzIG5vdCB0aGUgZGVzaXJlZCBiZWhhdmlvci4KKyAgICBhdXRvIHF1b3RlUG9z
aXRpb24gPSBtX3R5cGUuZmluZCgnIicsIGVxdWFsU2lnblBvc2l0aW9uICsgMSk7CisgICAgLy8g
RklYTUU6IFRoaXMgZG9lcyBub3Qgd29yayBpZiB0aGVyZSBpcyBhbiBlc2NhcGVkIHF1b3RhdGlv
biBtYXJrIGluIHRoZSBxdW90ZWQgc3RyaW5nLiBJcyB0aGF0IHRoZSBkZXNpcmVkIGJlaGF2aW9y
PworICAgIGF1dG8gc2Vjb25kUXVvdGVQb3NpdGlvbiA9IG1fdHlwZS5maW5kKCciJywgcXVvdGVQ
b3NpdGlvbiArIDEpOworICAgIHNpemVfdCBzdGFydDsKKyAgICBzaXplX3QgZW5kOworICAgIGlm
IChxdW90ZVBvc2l0aW9uICE9IG5vdEZvdW5kICYmIHNlY29uZFF1b3RlUG9zaXRpb24gIT0gbm90
Rm91bmQpIHsKKyAgICAgICAgc3RhcnQgPSBxdW90ZVBvc2l0aW9uICsgMTsKKyAgICAgICAgZW5k
ID0gc2Vjb25kUXVvdGVQb3NpdGlvbjsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBGSVhNRTog
SWYgdGhlcmUgaXMgb25seSBvbmUgcXVvdGF0aW9uIG1hcmssIHRoaXMgd2lsbCB0cmVhdCBpdCBh
cyBwYXJ0IG9mIHRoZSBzdHJpbmc7IHRoYXQgaXMgbm90IHRoZSBkZXNpcmVkIGJlaGF2aW9yLgor
ICAgICAgICBzdGFydCA9IGVxdWFsU2lnblBvc2l0aW9uICsgMTsKKyAgICAgICAgZW5kID0gbV90
eXBlLmZpbmQoJzsnLCBzdGFydCk7CiAgICAgfQotCi0gICAgcmV0dXJuIHBhcmFtZXRlclZhbHVl
OworICAgIHJldHVybiBTdHJpbmdWaWV3IHsgbV90eXBlIH0uc3Vic3RyaW5nKHN0YXJ0LCBlbmQg
LSBzdGFydCkuc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdNYXRjaGVkQ2hhcmFjdGVycyhpc0hUTUxT
cGFjZTxVQ2hhcj4pLnRvU3RyaW5nKCk7CiB9CiAKIFN0cmluZyBDb250ZW50VHlwZTo6Y29udGFp
bmVyVHlwZSgpIGNvbnN0CiB7Ci0gICAgU3RyaW5nIHN0cmlwcGVkVHlwZSA9IG1fdHlwZS5zdHJp
cFdoaXRlU3BhY2UoKTsKLQotICAgIC8vICJ0eXBlIiBjYW4gaGF2ZSBwYXJhbWV0ZXJzIGFmdGVy
IGEgc2VtaS1jb2xvbiwgc3RyaXAgdGhlbQotICAgIHNpemVfdCBzZW1pID0gc3RyaXBwZWRUeXBl
LmZpbmQoJzsnKTsKLSAgICBpZiAoc2VtaSAhPSBub3RGb3VuZCkKLSAgICAgICAgc3RyaXBwZWRU
eXBlID0gc3RyaXBwZWRUeXBlLmxlZnQoc2VtaSkuc3RyaXBXaGl0ZVNwYWNlKCk7Ci0KLSAgICBy
ZXR1cm4gc3RyaXBwZWRUeXBlOworICAgIC8vIFN0cmlwIHBhcmFtZXRlcnMgdGhhdCBjb21lIGFm
dGVyIGEgc2VtaWNvbG9uLgorICAgIC8vIEZJWE1FOiBUaGlzIHdpbGwgaWdub3JlIGEgcXVvdGF0
aW9uIG1hcmsgaWYgaXQgY29tZXMgYmVmb3JlIHRoZSBzZW1pY29sb24uIElzIHRoYXQgdGhlIGRl
c2lyZWQgYmVoYXZpb3I/CisgICAgcmV0dXJuIHN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nSFRNTFNw
YWNlcyhtX3R5cGUubGVmdChtX3R5cGUuZmluZCgnOycpKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUg
VmVjdG9yPFN0cmluZz4gc3BsaXRQYXJhbWV0ZXJzKFN0cmluZ1ZpZXcgcGFyYW1ldGVyc1ZpZXcp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9IRVZDVXRpbGl0
aWVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0hFVkNVdGlsaXRpZXMu
Y3BwCmluZGV4IDg1NzEzZjRiYTUyMWRlNWQ1YjY5MWY2OTkzZDNjYmY5ZWMzYzU4MTUuLjRmMmVl
NDJlOGQ3ODBjNzEyZTQ3NWE0MTIxNTUyYjhmYzliNWRkOWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0hFVkNVdGlsaXRpZXMuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0hFVkNVdGlsaXRpZXMuY3BwCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDEzICsyNywxMiBA
QAogI2luY2x1ZGUgIkhFVkNVdGlsaXRpZXMuaCIKIAogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ry
b3llZC5oPgotI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nSGFzaC5oPgorI2luY2x1ZGUgPHd0Zi9Tb3J0ZWRBcnJheU1hcC5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1RvSW50ZWdlckNvbnZlcnNpb24uaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1PcHRpb25hbDxIRVZDUGFyYW1ldGVyU2V0PiBwYXJzZUhFVkNDb2RlY1Bh
cmFtZXRlcnMoY29uc3QgU3RyaW5nJiBjb2RlY1N0cmluZykKK09wdGlvbmFsPEhFVkNQYXJhbWV0
ZXJzPiBwYXJzZUhFVkNDb2RlY1BhcmFtZXRlcnMoU3RyaW5nVmlldyBjb2RlY1N0cmluZykKIHsK
ICAgICAvLyBUaGUgZm9ybWF0IG9mIHRoZSAnaGV2YycgY29kZWMgc3RyaW5nIGlzIHNwZWNpZmll
ZCBpbiBJU08vSUVDIDE0NDk2LTE1OjIwMTQsIEFubmV4IEUuMy4KICAgICBTdHJpbmdWaWV3IGNv
ZGVjVmlldyhjb2RlY1N0cmluZyk7CkBAIC00MiwxMSArNDEsMTEgQEAgT3B0aW9uYWw8SEVWQ1Bh
cmFtZXRlclNldD4gcGFyc2VIRVZDQ29kZWNQYXJhbWV0ZXJzKGNvbnN0IFN0cmluZyYgY29kZWNT
dHJpbmcpCiAgICAgaWYgKG5leHRFbGVtZW50ID09IGNvZGVjU3BsaXQuZW5kKCkpCiAgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBIRVZDUGFyYW1ldGVyU2V0IHBhcmFtZXRlcnM7
CisgICAgSEVWQ1BhcmFtZXRlcnMgcGFyYW1ldGVyczsKIAogICAgIC8vIENvZGVjIGlkZW50aWZp
ZXI6IGxlZ2FsIHZhbHVlcyBhcmUgc3BlY2lmaWVkIGluIElTTy9JRUMgMTQ0OTYtMTU6MjAxNCwg
c2VjdGlvbiA4OgotICAgIHBhcmFtZXRlcnMuY29kZWNOYW1lID0gKCpuZXh0RWxlbWVudCkudG9T
dHJpbmcoKTsKLSAgICBpZiAoIWVxdWFsKHBhcmFtZXRlcnMuY29kZWNOYW1lLCAiaHZjMSIpICYm
ICFlcXVhbChwYXJhbWV0ZXJzLmNvZGVjTmFtZSwgImhldjEiKSkKKyAgICBhdXRvIGNvZGVjTmFt
ZSA9ICpuZXh0RWxlbWVudDsKKyAgICBpZiAoY29kZWNOYW1lICE9ICJodmMxIiAmJiBjb2RlY05h
bWUgIT0gImhldjEiKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgaWYgKCsr
bmV4dEVsZW1lbnQgPT0gY29kZWNTcGxpdC5lbmQoKSkKQEAgLTkxLDIxICs5MCwxOCBAQCBPcHRp
b25hbDxIRVZDUGFyYW1ldGVyU2V0PiBwYXJzZUhFVkNDb2RlY1BhcmFtZXRlcnMoY29uc3QgU3Ry
aW5nJiBjb2RlY1N0cmluZykKICAgICBpZiAoZmlyc3RDaGFyYWN0ZXIgIT0gJ0wnICYmIGZpcnN0
Q2hhcmFjdGVyICE9ICdIJykKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHBh
cmFtZXRlcnMuZ2VuZXJhbFRpZXJGbGFnID0gZmlyc3RDaGFyYWN0ZXIgPT0gJ0gnOwogICAgIGJv
b2wgaXNWYWxpZEdlbmVyYWxMZXZlbElEQyA9IGZhbHNlOwogICAgIHBhcmFtZXRlcnMuZ2VuZXJh
bExldmVsSURDID0gdG9JbnRlZ3JhbFR5cGU8dWludDhfdD4oZ2VuZXJhbFRpZXIuc3Vic3RyaW5n
KDEpLCAmaXNWYWxpZEdlbmVyYWxMZXZlbElEQyk7CiAgICAgaWYgKCFpc1ZhbGlkR2VuZXJhbExl
dmVsSURDKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgLy8gT3B0aW9uYWwg
Zm91cnRoIGFuZCByZW1hbmluZyBlbGVtZW50czogYSBzZXF1ZW5jZSBvZiA2IDEtYnl0ZSBjb25z
dHJhaW50IGZsYWdzLCBlYWNoIGJ5dGUgZW5jb2RlZAorICAgIC8vIE9wdGlvbmFsIGZvdXJ0aCBh
bmQgcmVtYWluaW5nIGVsZW1lbnRzOiBhIHNlcXVlbmNlIG9mIDYgMS1ieXRlIGNvbnN0cmFpbnQg
ZmxhZ3MsIGVhY2ggYnl0ZSBlbmNvZGVkCiAgICAgLy8gaW4gaGV4LCBhbmQgc2VwYXJhdGVkIGJ5
IGEgcGVyaW9kLCB3aXRoIHRyYWlsaW5nIHplcm8gYnl0ZXMgb21pdHRlZC4KLSAgICBwYXJhbWV0
ZXJzLmNvbnN0cmFpbnRGbGFncy5maWxsKDAsIDYpOwotICAgIGZvciAoYXV0byYgZmxhZyA6IHBh
cmFtZXRlcnMuY29uc3RyYWludEZsYWdzKSB7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IDY7ICsraSkgewogICAgICAgICBpZiAoKytuZXh0RWxlbWVudCA9PSBjb2RlY1NwbGl0LmVuZCgp
KQogICAgICAgICAgICAgYnJlYWs7Ci0KICAgICAgICAgYm9vbCBpc1ZhbGlkRmxhZyA9IGZhbHNl
OwotICAgICAgICBmbGFnID0gdG9JbnRlZ3JhbFR5cGU8dWludDhfdD4oKm5leHRFbGVtZW50LCAm
aXNWYWxpZEZsYWcsIDE2KTsKKyAgICAgICAgdG9JbnRlZ3JhbFR5cGU8dWludDhfdD4oKm5leHRF
bGVtZW50LCAmaXNWYWxpZEZsYWcsIDE2KTsKICAgICAgICAgaWYgKCFpc1ZhbGlkRmxhZykKICAg
ICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgfQpAQCAtMTEzLDQxICsxMDksNDAg
QEAgT3B0aW9uYWw8SEVWQ1BhcmFtZXRlclNldD4gcGFyc2VIRVZDQ29kZWNQYXJhbWV0ZXJzKGNv
bnN0IFN0cmluZyYgY29kZWNTdHJpbmcpCiAgICAgcmV0dXJuIHBhcmFtZXRlcnM7CiB9CiAKLXN0
YXRpYyBTdHJpbmcgY29kZWNTdHJpbmdGb3JEb1ZpQ29kZWNUeXBlKGNvbnN0IFN0cmluZyYgY29k
ZWMpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGU+IGlubGluZSBPcHRpb25hbDxWYWx1ZVR5
cGU+IG1ha2VPcHRpb25hbEZyb21Qb2ludGVyKGNvbnN0IFZhbHVlVHlwZSogcG9pbnRlcikKK3sK
KyAgICBpZiAoIXBvaW50ZXIpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0
dXJuICpwb2ludGVyOworfQorCitzdGF0aWMgT3B0aW9uYWw8RG9WaVBhcmFtZXRlcnM6OkNvZGVj
PiBwYXJzZURvVmlDb2RlY1R5cGUoU3RyaW5nVmlldyBzdHJpbmcpCiB7Ci0gICAgdXNpbmcgTWFw
VHlwZSA9IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxTdHJpbmcsIFN0
cmluZz47Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPE1hcFR5cGU+IHR5cGVzID0gc3RkOjpp
bml0aWFsaXplcl9saXN0PE1hcFR5cGU6OktleVZhbHVlUGFpclR5cGU+KHsKLSAgICAgICAgeyAi
ZHZoZSJfcywgImhldjEiX3MgfSwKLSAgICAgICAgeyAiZHZoMSJfcywgImh2YzEiX3MgfSwKLSAg
ICAgICAgeyAiZHZhdiJfcywgImF2YzMiX3MgfSwKLSAgICAgICAgeyAiZHZhMSJfcywgImF2YzEi
X3MgfQotICAgIH0pOwotCi0gICAgYXV0byBmaW5kUmVzdWx0cyA9IHR5cGVzLmdldCgpLmZpbmQo
Y29kZWMpOwotICAgIGlmIChmaW5kUmVzdWx0cyA9PSB0eXBlcy5nZXQoKS5lbmQoKSkKLSAgICAg
ICAgcmV0dXJuIG51bGxTdHJpbmcoKTsKLSAgICByZXR1cm4gZmluZFJlc3VsdHMtPnZhbHVlOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgc3RkOjpwYWlyPFBhY2tlZEFTQ0lJTG93ZXJDb2Rlczx1aW50
MzJfdD4sIERvVmlQYXJhbWV0ZXJzOjpDb2RlYz4gdHlwZXNBcnJheVtdID0geworICAgICAgICB7
ICJkdmExIiwgRG9WaVBhcmFtZXRlcnM6OkNvZGVjOjpBVkMxIH0sCisgICAgICAgIHsgImR2YXYi
LCBEb1ZpUGFyYW1ldGVyczo6Q29kZWM6OkFWQzMgfSwKKyAgICAgICAgeyAiZHZoMSIsIERvVmlQ
YXJhbWV0ZXJzOjpDb2RlYzo6SFZDMSB9LAorICAgICAgICB7ICJkdmhlIiwgRG9WaVBhcmFtZXRl
cnM6OkNvZGVjOjpIRVYxIH0sCisgICAgfTsKKyAgICBzdGF0aWMgY29uc3RleHByIFNvcnRlZEFy
cmF5TWFwIHR5cGVzTWFwIHsgdHlwZXNBcnJheSB9OworICAgIHJldHVybiBtYWtlT3B0aW9uYWxG
cm9tUG9pbnRlcih0eXBlc01hcC50cnlHZXQoc3RyaW5nKSk7CiB9CiAKLXN0YXRpYyBPcHRpb25h
bDx1bnNpZ25lZCBzaG9ydD4gcHJvZmlsZUlERm9yQWxwaGFiZXRpY0RvVmlQcm9maWxlKGNvbnN0
IFN0cmluZyYgcHJvZmlsZSkKK3N0YXRpYyBPcHRpb25hbDx1aW50MTZfdD4gcHJvZmlsZUlERm9y
QWxwaGFiZXRpY0RvVmlQcm9maWxlKFN0cmluZ1ZpZXcgcHJvZmlsZSkKIHsKICAgICAvLyBTZWUg
VGFibGUgNyBvZiAiRG9sYnkgVmlzaW9uIFByb2ZpbGVzIGFuZCBMZXZlbHMgVmVyc2lvbiAxLjMu
MiIKLSAgICB1c2luZyBNYXBUeXBlID0gTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RI
YXNoTWFwPFN0cmluZywgdW5zaWduZWQgc2hvcnQ+OwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxNYXBUeXBlPiBtYXAgPSBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8TWFwVHlwZTo6S2V5VmFsdWVQ
YWlyVHlwZT4oewotICAgICAgICB7ICJkdmhlLmR0ciJfcywgNCB9LAotICAgICAgICB7ICJkdmhl
LnN0biJfcywgNSB9LAotICAgICAgICB7ICJkdmhlLmR0YiJfcywgNyB9LAotICAgICAgICB7ICJk
dmhlLnN0Il9zLCA4IH0sCi0gICAgICAgIHsgImR2YXYuc2UiX3MsIDkgfQotICAgIH0pOwotCi0g
ICAgYXV0byBmaW5kUmVzdWx0cyA9IG1hcC5nZXQoKS5maW5kKHByb2ZpbGUpOwotICAgIGlmIChm
aW5kUmVzdWx0cyA9PSBtYXAuZ2V0KCkuZW5kKCkpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7Ci0gICAgcmV0dXJuIGZpbmRSZXN1bHRzLT52YWx1ZTsKKyAgICBzdGF0aWMgY29uc3RleHBy
IHN0ZDo6cGFpcjxQYWNrZWRBU0NJSUxvd2VyQ29kZXM8dWludDY0X3Q+LCB1aW50MTZfdD4gcHJv
ZmlsZXNBcnJheVtdID0geworICAgICAgICB7ICJkdmF2LnNlIiwgOSB9LAorICAgICAgICB7ICJk
dmhlLmR0YiIsIDcgfSwKKyAgICAgICAgeyAiZHZoZS5kdHIiLCA0IH0sCisgICAgICAgIHsgImR2
aGUuc3QiLCA4IH0sCisgICAgICAgIHsgImR2aGUuc3RuIiwgNSB9LAorICAgIH07CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBTb3J0ZWRBcnJheU1hcCBwcm9maWxlc01hcCB7IHByb2ZpbGVzQXJyYXkg
fTsKKyAgICByZXR1cm4gbWFrZU9wdGlvbmFsRnJvbVBvaW50ZXIocHJvZmlsZXNNYXAudHJ5R2V0
KHByb2ZpbGUpKTsKIH0KIAotc3RhdGljIGJvb2wgaXNWYWxpZERvVmlQcm9maWxlSUQodW5zaWdu
ZWQgc2hvcnQgcHJvZmlsZUlEKQorc3RhdGljIGJvb2wgaXNWYWxpZERvVmlQcm9maWxlSUQodWlu
dDE2X3QgcHJvZmlsZUlEKQogewogICAgIHN3aXRjaCAocHJvZmlsZUlEKSB7CiAgICAgY2FzZSA0
OgpAQCAtMTYxLDcgKzE1Niw3IEBAIHN0YXRpYyBib29sIGlzVmFsaWREb1ZpUHJvZmlsZUlEKHVu
c2lnbmVkIHNob3J0IHByb2ZpbGVJRCkKICAgICB9CiB9CiAKLXN0YXRpYyBPcHRpb25hbDx1bnNp
Z25lZCBzaG9ydD4gbWF4aW11bUxldmVsSURGb3JEb1ZpUHJvZmlsZUlEKHVuc2lnbmVkIHNob3J0
IHByb2ZpbGVJRCkKK3N0YXRpYyBPcHRpb25hbDx1aW50MTZfdD4gbWF4aW11bUxldmVsSURGb3JE
b1ZpUHJvZmlsZUlEKHVpbnQxNl90IHByb2ZpbGVJRCkKIHsKICAgICAvLyBTZWUgU2VjdGlvbiA0
LjEgb2YgIkRvbGJ5IFZpc2lvbiBQcm9maWxlcyBhbmQgTGV2ZWxzIFZlcnNpb24gMS4zLjIiCiAg
ICAgc3dpdGNoIChwcm9maWxlSUQpIHsKQEAgLTE3NCwyNyArMTY5LDI3IEBAIHN0YXRpYyBPcHRp
b25hbDx1bnNpZ25lZCBzaG9ydD4gbWF4aW11bUxldmVsSURGb3JEb1ZpUHJvZmlsZUlEKHVuc2ln
bmVkIHNob3J0IHByCiAgICAgfQogfQogCi1zdGF0aWMgYm9vbCBpc1ZhbGlkUHJvZmlsZUlERm9y
Q29kZWNOYW1lKHVuc2lnbmVkIHNob3J0IHByb2ZpbGVJRCwgY29uc3QgU3RyaW5nJiBjb2RlY05h
bWUpCitzdGF0aWMgYm9vbCBpc1ZhbGlkUHJvZmlsZUlERm9yQ29kZWModWludDE2X3QgcHJvZmls
ZUlELCBEb1ZpUGFyYW1ldGVyczo6Q29kZWMgY29kZWMpCiB7CiAgICAgaWYgKHByb2ZpbGVJRCA9
PSA5KQotICAgICAgICByZXR1cm4gY29kZWNOYW1lID09ICJhdmMxIiB8fCBjb2RlY05hbWUgPT0g
ImF2YzMiOwotICAgIHJldHVybiBjb2RlY05hbWUgPT0gImh2YzEiIHx8IGNvZGVjTmFtZSA9PSAi
aGV2MSI7CisgICAgICAgIHJldHVybiBjb2RlYyA9PSBEb1ZpUGFyYW1ldGVyczo6Q29kZWM6OkFW
QzEgfHwgY29kZWMgPT0gRG9WaVBhcmFtZXRlcnM6OkNvZGVjOjpBVkMzOworICAgIHJldHVybiBj
b2RlYyA9PSBEb1ZpUGFyYW1ldGVyczo6Q29kZWM6OkhWQzEgfHwgY29kZWMgPT0gRG9WaVBhcmFt
ZXRlcnM6OkNvZGVjOjpIRVYxOwogfQogCi1PcHRpb25hbDxEb1ZpUGFyYW1ldGVyU2V0PiBwYXJz
ZURvVmlDb2RlY1BhcmFtZXRlcnMoY29uc3QgU3RyaW5nJiBjb2RlY1N0cmluZykKK09wdGlvbmFs
PERvVmlQYXJhbWV0ZXJzPiBwYXJzZURvVmlDb2RlY1BhcmFtZXRlcnMoU3RyaW5nVmlldyBjb2Rl
Y1ZpZXcpCiB7CiAgICAgLy8gVGhlIGZvcm1hdCBvZiB0aGUgRG9WaSBjb2RlYyBzdHJpbmcgaXMg
c3BlY2lmaWVkIGluICJEb2xieSBWaXNpb24gUHJvZmlsZXMgYW5kIExldmVscyBWZXJzaW9uIDEu
My4yIgotICAgIFN0cmluZ1ZpZXcgY29kZWNWaWV3KGNvZGVjU3RyaW5nKTsKICAgICBhdXRvIGNv
ZGVjU3BsaXQgPSBjb2RlY1ZpZXcuc3BsaXQoJy4nKTsKICAgICBhdXRvIG5leHRFbGVtZW50ID0g
Y29kZWNTcGxpdC5iZWdpbigpOwogICAgIGlmIChuZXh0RWxlbWVudCA9PSBjb2RlY1NwbGl0LmVu
ZCgpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgRG9WaVBhcmFtZXRlclNl
dCBwYXJhbWV0ZXJzOworICAgIERvVmlQYXJhbWV0ZXJzIHBhcmFtZXRlcnM7CiAKLSAgICBwYXJh
bWV0ZXJzLmNvZGVjTmFtZSA9IGNvZGVjU3RyaW5nRm9yRG9WaUNvZGVjVHlwZSgoKm5leHRFbGVt
ZW50KS50b1N0cmluZygpKTsKLSAgICBpZiAoIXBhcmFtZXRlcnMuY29kZWNOYW1lKQorICAgIGF1
dG8gY29kZWMgPSBwYXJzZURvVmlDb2RlY1R5cGUoKm5leHRFbGVtZW50KTsKKyAgICBpZiAoIWNv
ZGVjKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHBhcmFtZXRlcnMuY29kZWMg
PSAqY29kZWM7CiAKICAgICBpZiAoKytuZXh0RWxlbWVudCA9PSBjb2RlY1NwbGl0LmVuZCgpKQog
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwpAQCAtMjExLDE3ICsyMDYsMTYgQEAgT3B0aW9u
YWw8RG9WaVBhcmFtZXRlclNldD4gcGFyc2VEb1ZpQ29kZWNQYXJhbWV0ZXJzKGNvbnN0IFN0cmlu
ZyYgY29kZWNTdHJpbmcpCiAgICAgICAgIGlmICghaXNJbnRlZ3JhbCkKICAgICAgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgYXV0byBhbHBoYW51bWVy
aWNQcm9maWxlU3RyaW5nID0gY29kZWNWaWV3LmxlZnQoNSArIHByb2ZpbGVJRC5sZW5ndGgoKSku
dG9TdHJpbmcoKTsKLSAgICAgICAgYXV0byBwcm9maWxlSUQgPSBwcm9maWxlSURGb3JBbHBoYWJl
dGljRG9WaVByb2ZpbGUoYWxwaGFudW1lcmljUHJvZmlsZVN0cmluZyk7Ci0gICAgICAgIGlmICgh
cHJvZmlsZUlEKQorICAgICAgICBhdXRvIGJpdHN0cmVhbVByb2ZpbGVJRCA9IHByb2ZpbGVJREZv
ckFscGhhYmV0aWNEb1ZpUHJvZmlsZShjb2RlY1ZpZXcubGVmdCg1ICsgcHJvZmlsZUlELmxlbmd0
aCgpKSk7CisgICAgICAgIGlmICghYml0c3RyZWFtUHJvZmlsZUlEKQogICAgICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKLSAgICAgICAgcGFyYW1ldGVycy5iaXRzdHJlYW1Qcm9maWxlSUQg
PSBwcm9maWxlSUQudmFsdWUoKTsKKyAgICAgICAgcGFyYW1ldGVycy5iaXRzdHJlYW1Qcm9maWxl
SUQgPSAqYml0c3RyZWFtUHJvZmlsZUlEOwogICAgIH0KIAogICAgIGlmICghaXNWYWxpZERvVmlQ
cm9maWxlSUQocGFyYW1ldGVycy5iaXRzdHJlYW1Qcm9maWxlSUQpKQogICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogCi0gICAgaWYgKCFpc1ZhbGlkUHJvZmlsZUlERm9yQ29kZWNOYW1lKHBh
cmFtZXRlcnMuYml0c3RyZWFtUHJvZmlsZUlELCBwYXJhbWV0ZXJzLmNvZGVjTmFtZSkpCisgICAg
aWYgKCFpc1ZhbGlkUHJvZmlsZUlERm9yQ29kZWMocGFyYW1ldGVycy5iaXRzdHJlYW1Qcm9maWxl
SUQsIHBhcmFtZXRlcnMuY29kZWMpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAg
ICAgaWYgKCsrbmV4dEVsZW1lbnQgPT0gY29kZWNTcGxpdC5lbmQoKSkKQEAgLTIzNiw3ICsyMzAs
NyBAQCBPcHRpb25hbDxEb1ZpUGFyYW1ldGVyU2V0PiBwYXJzZURvVmlDb2RlY1BhcmFtZXRlcnMo
Y29uc3QgU3RyaW5nJiBjb2RlY1N0cmluZykKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
IAogICAgIGF1dG8gbWF4aW11bUxldmVsSUQgPSBtYXhpbXVtTGV2ZWxJREZvckRvVmlQcm9maWxl
SUQocGFyYW1ldGVycy5iaXRzdHJlYW1Qcm9maWxlSUQpOwotICAgIGlmICghbWF4aW11bUxldmVs
SUQgfHwgcGFyYW1ldGVycy5iaXRzdHJlYW1MZXZlbElEID4gbWF4aW11bUxldmVsSUQudmFsdWUo
KSkKKyAgICBpZiAoIW1heGltdW1MZXZlbElEIHx8IHBhcmFtZXRlcnMuYml0c3RyZWFtTGV2ZWxJ
RCA+ICptYXhpbXVtTGV2ZWxJRCkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAg
IHJldHVybiBwYXJhbWV0ZXJzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvSEVWQ1V0aWxpdGllcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSEVWQ1V0aWxpdGllcy5oCmluZGV4IDQzZWVhODdhYjhmYTM4ODlmNTQ4NGU3MTdjZjAyNjIz
NGQxYjAwZTIuLjM5NDI3OTdjNTc5MDNkMGJjZWI3OGI3ZDIyOWFjNTkxMTE5ODFkMmIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0hFVkNVdGlsaXRpZXMuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9IRVZDVXRpbGl0aWVzLmgKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjUs
MjkgKzI1LDI1IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0cnVjdCBIRVZDUGFyYW1ldGVyU2V0IHsKLSAg
ICBTdHJpbmcgY29kZWNOYW1lOwotICAgIHVuc2lnbmVkIHNob3J0IGdlbmVyYWxQcm9maWxlU3Bh
Y2UgeyAwIH07Ci0gICAgdW5zaWduZWQgc2hvcnQgZ2VuZXJhbFByb2ZpbGVJREMgeyAwIH07Citz
dHJ1Y3QgSEVWQ1BhcmFtZXRlcnMgeworICAgIHVpbnQxNl90IGdlbmVyYWxQcm9maWxlU3BhY2Ug
eyAwIH07CisgICAgdWludDE2X3QgZ2VuZXJhbFByb2ZpbGVJREMgeyAwIH07CiAgICAgdWludDMy
X3QgZ2VuZXJhbFByb2ZpbGVDb21wYXRpYmlsaXR5RmxhZ3MgeyAwIH07Ci0gICAgYm9vbCBnZW5l
cmFsVGllckZsYWcgeyBmYWxzZSB9OwotICAgIHVuc2lnbmVkIHNob3J0IGdlbmVyYWxMZXZlbElE
QyB7IDAgfTsKLSAgICBWZWN0b3I8dW5zaWduZWQgc2hvcnQ+IGNvbnN0cmFpbnRGbGFncyB7IDYs
IDAgfTsKKyAgICB1aW50MTZfdCBnZW5lcmFsTGV2ZWxJREMgeyAwIH07CiB9OwogCi1XRUJDT1JF
X0VYUE9SVCBPcHRpb25hbDxIRVZDUGFyYW1ldGVyU2V0PiBwYXJzZUhFVkNDb2RlY1BhcmFtZXRl
cnMoY29uc3QgU3RyaW5nJiBjb2RlY1N0cmluZyk7CitXRUJDT1JFX0VYUE9SVCBPcHRpb25hbDxI
RVZDUGFyYW1ldGVycz4gcGFyc2VIRVZDQ29kZWNQYXJhbWV0ZXJzKFN0cmluZ1ZpZXcpOwogCi1z
dHJ1Y3QgRG9WaVBhcmFtZXRlclNldCB7Ci0gICAgU3RyaW5nIGNvZGVjTmFtZTsKLSAgICB1bnNp
Z25lZCBzaG9ydCBiaXRzdHJlYW1Qcm9maWxlSUQgeyAwIH07Ci0gICAgdW5zaWduZWQgc2hvcnQg
Yml0c3RyZWFtTGV2ZWxJRCB7IDAgfTsKK3N0cnVjdCBEb1ZpUGFyYW1ldGVycyB7CisgICAgZW51
bSBjbGFzcyBDb2RlYyB7IEFWQzEsIEFWQzMsIEhFVjEsIEhWQzEgfSBjb2RlYzsKKyAgICB1aW50
MTZfdCBiaXRzdHJlYW1Qcm9maWxlSUQgeyAwIH07CisgICAgdWludDE2X3QgYml0c3RyZWFtTGV2
ZWxJRCB7IDAgfTsKIH07CiAKLVdFQkNPUkVfRVhQT1JUIE9wdGlvbmFsPERvVmlQYXJhbWV0ZXJT
ZXQ+IHBhcnNlRG9WaUNvZGVjUGFyYW1ldGVycyhjb25zdCBTdHJpbmcmIGNvZGVjU3RyaW5nKTsK
K1dFQkNPUkVfRVhQT1JUIE9wdGlvbmFsPERvVmlQYXJhbWV0ZXJzPiBwYXJzZURvVmlDb2RlY1Bh
cmFtZXRlcnMoU3RyaW5nVmlldyk7CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NvY29hL0hFVkNVdGlsaXRpZXNDb2NvYS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSEVWQ1V0aWxpdGllc0NvY29hLmgKaW5kZXggZGE5
MWMwNzVhZGVkZDUyZTRjNTA5ODU2MzY1NzJlNDk1Y2UyMTIyYS4uM2FmNDZiNTdhNGUwYzRjN2I1
OWUxZGY4ZWY1MzljNWMxZTk4NzliNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY29jb2EvSEVWQ1V0aWxpdGllc0NvY29hLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSEVWQ1V0aWxpdGllc0NvY29hLmgKQEAgLTMzLDgg
KzMzLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdHJ1Y3QgTWVkaWFDYXBhYmlsaXRpZXNJ
bmZvOwogCi1leHRlcm4gYm9vbCB2YWxpZGF0ZUhFVkNQYXJhbWV0ZXJzKEhFVkNQYXJhbWV0ZXJT
ZXQmLCBNZWRpYUNhcGFiaWxpdGllc0luZm8mLCBib29sIGhhc0FscGhhQ2hhbm5lbCwgYm9vbCBo
ZHJTdXBwb3J0KTsKLWV4dGVybiBib29sIHZhbGlkYXRlRG9WaVBhcmFtZXRlcnMoRG9WaVBhcmFt
ZXRlclNldCYsIE1lZGlhQ2FwYWJpbGl0aWVzSW5mbyYsIGJvb2wgaGFzQWxwaGFDaGFubmVsLCBi
b29sIGhkclN1cHBvcnQpOworT3B0aW9uYWw8TWVkaWFDYXBhYmlsaXRpZXNJbmZvPiB2YWxpZGF0
ZUhFVkNQYXJhbWV0ZXJzKGNvbnN0IEhFVkNQYXJhbWV0ZXJzJiwgYm9vbCBoYXNBbHBoYUNoYW5u
ZWwsIGJvb2wgaGRyU3VwcG9ydCk7CitPcHRpb25hbDxNZWRpYUNhcGFiaWxpdGllc0luZm8+IHZh
bGlkYXRlRG9WaVBhcmFtZXRlcnMoY29uc3QgRG9WaVBhcmFtZXRlcnMmLCBib29sIGhhc0FscGhh
Q2hhbm5lbCwgYm9vbCBoZHJTdXBwb3J0KTsKIAogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9IRVZDVXRpbGl0aWVzQ29jb2EubW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9IRVZDVXRpbGl0aWVzQ29jb2EubW0K
aW5kZXggNjI2YzUyZGUwMjMyYjMyNmNlMmI0YmY4MzJmZjA5ZjkwYTc4Yjg3OC4uYzg3MzlkYjJl
NTUxZGVmMDM4YTQyZTgyNGZiZjFiN2ZlNDAxZmE2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSEVWQ1V0aWxpdGllc0NvY29hLm1tCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0hFVkNVdGlsaXRpZXNDb2NvYS5t
bQpAQCAtNDAsMTYgKzQwLDE2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotYm9vbCB2YWxp
ZGF0ZUhFVkNQYXJhbWV0ZXJzKEhFVkNQYXJhbWV0ZXJTZXQmIHBhcmFtZXRlcnMsIE1lZGlhQ2Fw
YWJpbGl0aWVzSW5mbyYgaW5mbywgYm9vbCBoYXNBbHBoYUNoYW5uZWwsIGJvb2wgaGRyU3VwcG9y
dCkKK09wdGlvbmFsPE1lZGlhQ2FwYWJpbGl0aWVzSW5mbz4gdmFsaWRhdGVIRVZDUGFyYW1ldGVy
cyhjb25zdCBIRVZDUGFyYW1ldGVycyYgcGFyYW1ldGVycywgYm9vbCBoYXNBbHBoYUNoYW5uZWws
IGJvb2wgaGRyU3VwcG9ydCkKIHsKICAgICBDTVZpZGVvQ29kZWNUeXBlIGNvZGVjID0ga0NNVmlk
ZW9Db2RlY1R5cGVfSEVWQzsKICAgICBpZiAoaGFzQWxwaGFDaGFubmVsKSB7CiAgICAgICAgIGlm
ICghUEFMOjppc0FWRm91bmRhdGlvbkZyYW1ld29ya0F2YWlsYWJsZSgpIHx8ICFQQUw6OmNhbkxv
YWRfQVZGb3VuZGF0aW9uX0FWVmlkZW9Db2RlY1R5cGVIRVZDV2l0aEFscGhhKCkpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAg
ICAgICAgIGF1dG8gY29kZWNDb2RlID0gRm91ckNDOjpmcm9tU3RyaW5nKEFWVmlkZW9Db2RlY1R5
cGVIRVZDV2l0aEFscGhhKTsKICAgICAgICAgaWYgKCFjb2RlY0NvZGUpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgICAg
IGNvZGVjID0gY29kZWNDb2RlLnZhbHVlKCkudmFsdWU7CiAgICAgfQpAQCAtNTksMTIgKzU5LDEy
IEBAIGJvb2wgdmFsaWRhdGVIRVZDUGFyYW1ldGVycyhIRVZDUGFyYW1ldGVyU2V0JiBwYXJhbWV0
ZXJzLCBNZWRpYUNhcGFiaWxpdGllc0luZm8mCiAgICAgICAgIGJvb2wgaXNNYWluMTAgPSBwYXJh
bWV0ZXJzLmdlbmVyYWxQcm9maWxlU3BhY2UgPT0gMAogICAgICAgICAgICAgJiYgKHBhcmFtZXRl
cnMuZ2VuZXJhbFByb2ZpbGVJREMgPT0gMiB8fCBwYXJhbWV0ZXJzLmdlbmVyYWxQcm9maWxlQ29t
cGF0aWJpbGl0eUZsYWdzID09IDEpOwogICAgICAgICBpZiAoIWlzTWFpbjEwKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9
CiAKICAgICBPU1N0YXR1cyBzdGF0dXMgPSBWVFNlbGVjdEFuZENyZWF0ZVZpZGVvRGVjb2Rlcklu
c3RhbmNlKGNvZGVjLCBrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBudWxscHRyLCBudWxscHRyKTsKICAg
ICBpZiAoc3RhdHVzICE9IG5vRXJyKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICBpZiAoIWNhbkxvYWRfVmlkZW9Ub29sYm94X1ZUQ29w
eUhFVkNEZWNvZGVyQ2FwYWJpbGl0aWVzRGljdGlvbmFyeSgpCiAgICAgICAgIHx8ICFjYW5Mb2Fk
X1ZpZGVvVG9vbGJveF9rVlRIRVZDRGVjb2RlckNhcGFiaWxpdHlfU3VwcG9ydGVkUHJvZmlsZXMo
KQpAQCAtNzIsMzAgKzcyLDM0IEBAIGJvb2wgdmFsaWRhdGVIRVZDUGFyYW1ldGVycyhIRVZDUGFy
YW1ldGVyU2V0JiBwYXJhbWV0ZXJzLCBNZWRpYUNhcGFiaWxpdGllc0luZm8mCiAgICAgICAgIHx8
ICFjYW5Mb2FkX1ZpZGVvVG9vbGJveF9rVlRIRVZDRGVjb2RlclByb2ZpbGVDYXBhYmlsaXR5X0lz
SGFyZHdhcmVBY2NlbGVyYXRlZCgpCiAgICAgICAgIHx8ICFjYW5Mb2FkX1ZpZGVvVG9vbGJveF9r
VlRIRVZDRGVjb2RlclByb2ZpbGVDYXBhYmlsaXR5X01heERlY29kZUxldmVsKCkKICAgICAgICAg
fHwgIWNhbkxvYWRfVmlkZW9Ub29sYm94X2tWVEhFVkNEZWNvZGVyUHJvZmlsZUNhcGFiaWxpdHlf
TWF4UGxheWJhY2tMZXZlbCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAKLSAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBjYXBhYmls
aXRpZXMgPSBhZG9wdENGKFZUQ29weUhFVkNEZWNvZGVyQ2FwYWJpbGl0aWVzRGljdGlvbmFyeSgp
KTsKKyAgICBhdXRvIGNhcGFiaWxpdGllcyA9IGFkb3B0Q0YoVlRDb3B5SEVWQ0RlY29kZXJDYXBh
YmlsaXRpZXNEaWN0aW9uYXJ5KCkpOwogICAgIGlmICghY2FwYWJpbGl0aWVzKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICBhdXRvIHN1
cHBvcnRlZFByb2ZpbGVzID0gKENGQXJyYXlSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoY2FwYWJp
bGl0aWVzLmdldCgpLCBrVlRIRVZDRGVjb2RlckNhcGFiaWxpdHlfU3VwcG9ydGVkUHJvZmlsZXMp
OwogICAgIGlmICghc3VwcG9ydGVkUHJvZmlsZXMgfHwgQ0ZHZXRUeXBlSUQoc3VwcG9ydGVkUHJv
ZmlsZXMpICE9IENGQXJyYXlHZXRUeXBlSUQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgaW50MTZfdCBnZW5lcmFsUHJvZmlsZUlE
QyA9IHBhcmFtZXRlcnMuZ2VuZXJhbFByb2ZpbGVJREM7CiAgICAgYXV0byBjZkdlbmVyYWxQcm9m
aWxlSURDID0gYWRvcHRDRihDRk51bWJlckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ0ZO
dW1iZXJTSW50MTZUeXBlLCAmZ2VuZXJhbFByb2ZpbGVJREMpKTsKICAgICBhdXRvIHNlYXJjaFJh
bmdlID0gQ0ZSYW5nZU1ha2UoMCwgQ0ZBcnJheUdldENvdW50KHN1cHBvcnRlZFByb2ZpbGVzKSk7
CiAgICAgaWYgKCFDRkFycmF5Q29udGFpbnNWYWx1ZShzdXBwb3J0ZWRQcm9maWxlcywgc2VhcmNo
UmFuZ2UsIGNmR2VuZXJhbFByb2ZpbGVJREMuZ2V0KCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICBhdXRvIHBlclByb2ZpbGVTdXBw
b3J0ID0gKENGRGljdGlvbmFyeVJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShjYXBhYmlsaXRpZXMu
Z2V0KCksIGtWVEhFVkNEZWNvZGVyQ2FwYWJpbGl0eV9QZXJQcm9maWxlU3VwcG9ydCk7CiAgICAg
aWYgKCFwZXJQcm9maWxlU3VwcG9ydCB8fCBDRkdldFR5cGVJRChwZXJQcm9maWxlU3VwcG9ydCkg
IT0gQ0ZEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIGF1dG8gZ2VuZXJhbFByb2ZpbGVJRENTdHJp
bmcgPSBTdHJpbmc6Om51bWJlcihnZW5lcmFsUHJvZmlsZUlEQykuY3JlYXRlQ0ZTdHJpbmcoKTsK
ICAgICBhdXRvIHByb2ZpbGVTdXBwb3J0ID0gKENGRGljdGlvbmFyeVJlZilDRkRpY3Rpb25hcnlH
ZXRWYWx1ZShwZXJQcm9maWxlU3VwcG9ydCwgZ2VuZXJhbFByb2ZpbGVJRENTdHJpbmcuZ2V0KCkp
OwogICAgIGlmICghcHJvZmlsZVN1cHBvcnQgfHwgQ0ZHZXRUeXBlSUQocHJvZmlsZVN1cHBvcnQp
ICE9IENGRGljdGlvbmFyeUdldFR5cGVJRCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBNZWRpYUNhcGFiaWxpdGllc0luZm8gaW5m
bzsKKworICAgIGluZm8uc3VwcG9ydGVkID0gdHJ1ZTsKIAogICAgIGF1dG8gaXNIYXJkd2FyZUFj
Y2VsZXJhdGVkID0gKENGQm9vbGVhblJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShwcm9maWxlU3Vw
cG9ydCwga1ZUSEVWQ0RlY29kZXJQcm9maWxlQ2FwYWJpbGl0eV9Jc0hhcmR3YXJlQWNjZWxlcmF0
ZWQpOwogICAgIGlmIChpc0hhcmR3YXJlQWNjZWxlcmF0ZWQgJiYgQ0ZHZXRUeXBlSUQoaXNIYXJk
d2FyZUFjY2VsZXJhdGVkKSA9PSBDRkJvb2xlYW5HZXRUeXBlSUQoKSkKQEAgLTEwNSw4MCArMTA5
LDYwIEBAIGJvb2wgdmFsaWRhdGVIRVZDUGFyYW1ldGVycyhIRVZDUGFyYW1ldGVyU2V0JiBwYXJh
bWV0ZXJzLCBNZWRpYUNhcGFiaWxpdGllc0luZm8mCiAgICAgaWYgKGNmTWF4RGVjb2RlTGV2ZWwg
JiYgQ0ZHZXRUeXBlSUQoY2ZNYXhEZWNvZGVMZXZlbCkgPT0gQ0ZOdW1iZXJHZXRUeXBlSUQoKSkg
ewogICAgICAgICBpbnQxNl90IG1heERlY29kZUxldmVsID0gMDsKICAgICAgICAgaWYgKCFDRk51
bWJlckdldFZhbHVlKGNmTWF4RGVjb2RlTGV2ZWwsIGtDRk51bWJlclNJbnQxNlR5cGUsICZtYXhE
ZWNvZGVMZXZlbCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogCiAgICAgICAgIGlmIChwYXJhbWV0ZXJzLmdlbmVyYWxMZXZlbElE
QyA+IG1heERlY29kZUxldmVsKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAg
IGluZm8uc3VwcG9ydGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CiAgICAgfQogCiAgICAgYXV0byBjZk1heFBsYXliYWNrTGV2ZWwgPSAoQ0ZOdW1iZXJSZWYpQ0ZE
aWN0aW9uYXJ5R2V0VmFsdWUocHJvZmlsZVN1cHBvcnQsIGtWVEhFVkNEZWNvZGVyUHJvZmlsZUNh
cGFiaWxpdHlfTWF4UGxheWJhY2tMZXZlbCk7CiAgICAgaWYgKGNmTWF4UGxheWJhY2tMZXZlbCAm
JiBDRkdldFR5cGVJRChjZk1heFBsYXliYWNrTGV2ZWwpID09IENGTnVtYmVyR2V0VHlwZUlEKCkp
IHsKICAgICAgICAgaW50MTZfdCBtYXhQbGF5YmFja0xldmVsID0gMDsKICAgICAgICAgaWYgKCFD
Rk51bWJlckdldFZhbHVlKGNmTWF4UGxheWJhY2tMZXZlbCwga0NGTnVtYmVyU0ludDE2VHlwZSwg
Jm1heFBsYXliYWNrTGV2ZWwpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgICAgICBpbmZvLnNtb290aCA9IHBhcmFtZXRl
cnMuZ2VuZXJhbExldmVsSURDIDw9IG1heFBsYXliYWNrTGV2ZWw7CiAgICAgfQogCi0gICAgcmV0
dXJuIHRydWU7CisgICAgcmV0dXJuIGluZm87CiB9CiAKLXN0YXRpYyBPcHRpb25hbDxDTVZpZGVv
Q29kZWNUeXBlPiBjb2RlY1R5cGVGb3JEb1ZpQ29kZWNTdHJpbmcoY29uc3QgU3RyaW5nJiBjb2Rl
Y1N0cmluZykKK3N0YXRpYyBDTVZpZGVvQ29kZWNUeXBlIGNvZGVjVHlwZShEb1ZpUGFyYW1ldGVy
czo6Q29kZWMgY29kZWMpCiB7Ci0gICAgc3RhdGljIGF1dG8gbWFwID0gbWFrZU5ldmVyRGVzdHJv
eWVkPE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxTdHJpbmcsIENNVmlk
ZW9Db2RlY1R5cGU+Pih7Ci0gICAgICAgIHsgImF2YzEiX3MsIGtDTVZpZGVvQ29kZWNUeXBlX0gy
NjQgfSwKLSAgICAgICAgeyAiYXZjMyJfcywga0NNVmlkZW9Db2RlY1R5cGVfSDI2NCB9LAotICAg
ICAgICB7ICJodmMxIl9zLCBrQ01WaWRlb0NvZGVjVHlwZV9IRVZDIH0sCi0gICAgICAgIHsgImhl
djEiX3MsIGtDTVZpZGVvQ29kZWNUeXBlX0hFVkMgfSwKLSAgICB9KTsKLQotICAgIGF1dG8gZmlu
ZFJlc3VsdCA9IG1hcC5nZXQoKS5maW5kKGNvZGVjU3RyaW5nKTsKLSAgICBpZiAoZmluZFJlc3Vs
dCA9PSBtYXAuZ2V0KCkuZW5kKCkpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAg
cmV0dXJuIGZpbmRSZXN1bHQtPnZhbHVlOworICAgIHN3aXRjaCAoY29kZWMpIHsKKyAgICBjYXNl
IERvVmlQYXJhbWV0ZXJzOjpDb2RlYzo6QVZDMToKKyAgICBjYXNlIERvVmlQYXJhbWV0ZXJzOjpD
b2RlYzo6QVZDMzoKKyAgICAgICAgcmV0dXJuIGtDTVZpZGVvQ29kZWNUeXBlX0gyNjQ7CisgICAg
Y2FzZSBEb1ZpUGFyYW1ldGVyczo6Q29kZWM6OkhFVjE6CisgICAgY2FzZSBEb1ZpUGFyYW1ldGVy
czo6Q29kZWM6OkhWQzE6CisgICAgICAgIHJldHVybiBrQ01WaWRlb0NvZGVjVHlwZV9IRVZDOwor
ICAgIH0KIH0KIAotc3RhdGljIE9wdGlvbmFsPFZlY3Rvcjx1bnNpZ25lZCBzaG9ydD4+IENGU3Ry
aW5nQXJyYXlUb051bWJlclZlY3RvcihDRkFycmF5UmVmIGFycmF5Q0YpCitzdGF0aWMgT3B0aW9u
YWw8VmVjdG9yPHVpbnQxNl90Pj4gcGFyc2VTdHJpbmdBcnJheUZyb21EaWN0aW9uYXJ5VG9VSW50
MTZWZWN0b3IoQ0ZEaWN0aW9uYXJ5UmVmIGRpY3Rpb25hcnksIGNvbnN0IHZvaWQqIGtleSkKIHsK
LSAgICBpZiAoIWFycmF5Q0YgfHwgQ0ZHZXRUeXBlSUQoYXJyYXlDRikgIT0gQ0ZBcnJheUdldFR5
cGVJRCgpKQorICAgIGF1dG8gdmFsdWUgPSBDRkRpY3Rpb25hcnlHZXRWYWx1ZShkaWN0aW9uYXJ5
LCBrZXkpOworICAgIGlmICghdmFsdWUgfHwgQ0ZHZXRUeXBlSUQodmFsdWUpICE9IENGQXJyYXlH
ZXRUeXBlSUQoKSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIGF1dG8gYXJy
YXlOUyA9IChfX2JyaWRnZSBOU0FycmF5PE5TU3RyaW5nKj4qKWFycmF5Q0Y7Ci0gICAgVmVjdG9y
PHVuc2lnbmVkIHNob3J0PiB2YWx1ZXM7Ci0gICAgdmFsdWVzLnJlc2VydmVJbml0aWFsQ2FwYWNp
dHkoYXJyYXlOUy5jb3VudCk7Ci0KLSAgICBib29sIGFyZUFsbFZhbGlkTnVtYmVycyA9IHRydWU7
Ci0gICAgW2FycmF5TlMgZW51bWVyYXRlT2JqZWN0c1VzaW5nQmxvY2s6WyZdIChOU1N0cmluZyog
dmFsdWUsIE5TVUludGVnZXIsIEJPT0wgKnN0b3ApIHsKLSAgICAgICAgaWYgKCFbdmFsdWUgaXNL
aW5kT2ZDbGFzczpOU1N0cmluZy5jbGFzc10pIHsKLSAgICAgICAgICAgIGFyZUFsbFZhbGlkTnVt
YmVycyA9IGZhbHNlOwotICAgICAgICAgICAgaWYgKHN0b3ApCi0gICAgICAgICAgICAgICAgKnN0
b3AgPSB0cnVlOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KKyAgICBOU0FycmF5
ICphcnJheSA9IChfX2JyaWRnZSBOU0FycmF5ICopdmFsdWU7CisgICAgVmVjdG9yPHVpbnQxNl90
PiB2ZWN0b3I7CisgICAgdmVjdG9yLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoYXJyYXkuY291bnQp
OworICAgIGZvciAoaWQgdmFsdWUgaW4gYXJyYXkpIHsKKyAgICAgICAgaWYgKCFbdmFsdWUgaXNL
aW5kT2ZDbGFzczpOU1N0cmluZy5jbGFzc10pCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogICAgICAgICBib29sIGlzVmFsaWROdW1iZXIgPSBmYWxzZTsKLSAgICAgICAgYXV0byBu
dW1lcmljVmFsdWUgPSB0b0ludGVncmFsVHlwZTx1bnNpZ25lZCBzaG9ydD4oU3RyaW5nKHZhbHVl
KSwgJmlzVmFsaWROdW1iZXIpOwotICAgICAgICBpZiAoIWlzVmFsaWROdW1iZXIpIHsKLSAgICAg
ICAgICAgIGFyZUFsbFZhbGlkTnVtYmVycyA9IGZhbHNlOwotICAgICAgICAgICAgaWYgKHN0b3Ap
Ci0gICAgICAgICAgICAgICAgKnN0b3AgPSB0cnVlOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0KLSAgICAgICAgdmFsdWVzLnVuY2hlY2tlZEFwcGVuZChudW1lcmljVmFsdWUpOwot
ICAgIH1dOwotCi0gICAgaWYgKCFhcmVBbGxWYWxpZE51bWJlcnMpCi0gICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7Ci0gICAgcmV0dXJuIHZhbHVlczsKKyAgICAgICAgYXV0byBudW1lcmljVmFs
dWUgPSB0b0ludGVncmFsVHlwZTx1aW50MTZfdD4oU3RyaW5nKChOU1N0cmluZyAqKXZhbHVlKSwg
JmlzVmFsaWROdW1iZXIpOworICAgICAgICBpZiAoIWlzVmFsaWROdW1iZXIpCisgICAgICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICB2ZWN0b3IudW5jaGVja2VkQXBwZW5kKG51
bWVyaWNWYWx1ZSk7CisgICAgfQorICAgIHJldHVybiB2ZWN0b3I7CiB9CiAKLWJvb2wgdmFsaWRh
dGVEb1ZpUGFyYW1ldGVycyhEb1ZpUGFyYW1ldGVyU2V0JiBwYXJhbWV0ZXJzLCBNZWRpYUNhcGFi
aWxpdGllc0luZm8mIGluZm8sIGJvb2wgaGFzQWxwaGFDaGFubmVsLCBib29sIGhkclN1cHBvcnQp
CitPcHRpb25hbDxNZWRpYUNhcGFiaWxpdGllc0luZm8+IHZhbGlkYXRlRG9WaVBhcmFtZXRlcnMo
Y29uc3QgRG9WaVBhcmFtZXRlcnMmIHBhcmFtZXRlcnMsIGJvb2wgaGFzQWxwaGFDaGFubmVsLCBi
b29sIGhkclN1cHBvcnQpCiB7CiAgICAgaWYgKGhhc0FscGhhQ2hhbm5lbCkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgaWYgKGhkclN1
cHBvcnQpIHsKICAgICAgICAgLy8gUGxhdGZvcm0gc3VwcG9ydHMgSERSIHBsYXliYWNrIG9mIEhF
VkMgTWFpbjEwIFByb2ZpbGUsIHdoaWNoIGlzIHNpZ25hbGxlZCBieSBEb1ZpIHByb2ZpbGVzIDQs
IDUsIDcsICYgOC4KQEAgLTE4OSw1MCArMTczLDQxIEBAIGJvb2wgdmFsaWRhdGVEb1ZpUGFyYW1l
dGVycyhEb1ZpUGFyYW1ldGVyU2V0JiBwYXJhbWV0ZXJzLCBNZWRpYUNhcGFiaWxpdGllc0luZm8m
CiAgICAgICAgIGNhc2UgODoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKICAgICAgICAgfQogICAgIH0KIAotICAgIGF1dG8gY29kZWNUeXBlID0gY29kZWNUeXBlRm9y
RG9WaUNvZGVjU3RyaW5nKHBhcmFtZXRlcnMuY29kZWNOYW1lKTsKLSAgICBpZiAoIWNvZGVjVHlw
ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgT1NTdGF0dXMgc3RhdHVzID0gVlRTZWxl
Y3RBbmRDcmVhdGVWaWRlb0RlY29kZXJJbnN0YW5jZShjb2RlY1R5cGUudmFsdWUoKSwga0NGQWxs
b2NhdG9yRGVmYXVsdCwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgT1NTdGF0dXMgc3RhdHVzID0g
VlRTZWxlY3RBbmRDcmVhdGVWaWRlb0RlY29kZXJJbnN0YW5jZShjb2RlY1R5cGUocGFyYW1ldGVy
cy5jb2RlYyksIGtDRkFsbG9jYXRvckRlZmF1bHQsIG51bGxwdHIsIG51bGxwdHIpOwogICAgIGlm
IChzdGF0dXMgIT0gbm9FcnIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKIAogICAgIGlmICghY2FuTG9hZF9WaWRlb1Rvb2xib3hfVlRDb3B5SEVW
Q0RlY29kZXJDYXBhYmlsaXRpZXNEaWN0aW9uYXJ5KCkKICAgICAgICAgfHwgIWNhbkxvYWRfVmlk
ZW9Ub29sYm94X2tWVERvbGJ5VmlzaW9uRGVjb2RlckNhcGFiaWxpdHlfU3VwcG9ydGVkUHJvZmls
ZXMoKQogICAgICAgICB8fCAhY2FuTG9hZF9WaWRlb1Rvb2xib3hfa1ZURG9sYnlWaXNpb25EZWNv
ZGVyQ2FwYWJpbGl0eV9TdXBwb3J0ZWRMZXZlbHMoKQogICAgICAgICB8fCAhY2FuTG9hZF9WaWRl
b1Rvb2xib3hfa1ZURG9sYnlWaXNpb25EZWNvZGVyQ2FwYWJpbGl0eV9Jc0hhcmR3YXJlQWNjZWxl
cmF0ZWQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogCi0gICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gY2FwYWJpbGl0aWVzID0gYWRv
cHRDRihWVENvcHlIRVZDRGVjb2RlckNhcGFiaWxpdGllc0RpY3Rpb25hcnkoKSk7CisgICAgYXV0
byBjYXBhYmlsaXRpZXMgPSBhZG9wdENGKFZUQ29weUhFVkNEZWNvZGVyQ2FwYWJpbGl0aWVzRGlj
dGlvbmFyeSgpKTsKICAgICBpZiAoIWNhcGFiaWxpdGllcykKLSAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgYXV0byBzdXBwb3J0ZWRQcm9m
aWxlc0NGID0gKENGQXJyYXlSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoY2FwYWJpbGl0aWVzLmdl
dCgpLCBrVlREb2xieVZpc2lvbkRlY29kZXJDYXBhYmlsaXR5X1N1cHBvcnRlZFByb2ZpbGVzKTsK
LSAgICBhdXRvIHN1cHBvcnRlZFByb2ZpbGVzID0gQ0ZTdHJpbmdBcnJheVRvTnVtYmVyVmVjdG9y
KHN1cHBvcnRlZFByb2ZpbGVzQ0YpOworICAgIGF1dG8gc3VwcG9ydGVkUHJvZmlsZXMgPSBwYXJz
ZVN0cmluZ0FycmF5RnJvbURpY3Rpb25hcnlUb1VJbnQxNlZlY3RvcihjYXBhYmlsaXRpZXMuZ2V0
KCksIGtWVERvbGJ5VmlzaW9uRGVjb2RlckNhcGFiaWxpdHlfU3VwcG9ydGVkUHJvZmlsZXMpOwog
ICAgIGlmICghc3VwcG9ydGVkUHJvZmlsZXMpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIGF1dG8gc3VwcG9ydGVkTGV2ZWxzQ0YgPSAo
Q0ZBcnJheVJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShjYXBhYmlsaXRpZXMuZ2V0KCksIGtWVERv
bGJ5VmlzaW9uRGVjb2RlckNhcGFiaWxpdHlfU3VwcG9ydGVkTGV2ZWxzKTsKLSAgICBhdXRvIHN1
cHBvcnRlZExldmVscyA9IENGU3RyaW5nQXJyYXlUb051bWJlclZlY3RvcihzdXBwb3J0ZWRMZXZl
bHNDRik7CisgICAgYXV0byBzdXBwb3J0ZWRMZXZlbHMgPSBwYXJzZVN0cmluZ0FycmF5RnJvbURp
Y3Rpb25hcnlUb1VJbnQxNlZlY3RvcihjYXBhYmlsaXRpZXMuZ2V0KCksIGtWVERvbGJ5VmlzaW9u
RGVjb2RlckNhcGFiaWxpdHlfU3VwcG9ydGVkTGV2ZWxzKTsKICAgICBpZiAoIXN1cHBvcnRlZExl
dmVscykKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwogCiAgICAgYXV0byBpc0hhcmR3YXJlQWNjZWxlcmF0ZWRDRiA9IChDRkJvb2xlYW5SZWYpQ0ZE
aWN0aW9uYXJ5R2V0VmFsdWUoY2FwYWJpbGl0aWVzLmdldCgpLCBrVlREb2xieVZpc2lvbkRlY29k
ZXJDYXBhYmlsaXR5X0lzSGFyZHdhcmVBY2NlbGVyYXRlZCk7CiAgICAgaWYgKCFpc0hhcmR3YXJl
QWNjZWxlcmF0ZWRDRiB8fCBDRkdldFR5cGVJRChpc0hhcmR3YXJlQWNjZWxlcmF0ZWRDRikgIT0g
Q0ZCb29sZWFuR2V0VHlwZUlEKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKKyAgICBib29sIGlzSGFyZHdhcmVBY2NlbGVyYXRlZCA9IENGQm9v
bGVhbkdldFZhbHVlKGlzSGFyZHdhcmVBY2NlbGVyYXRlZENGKTsKIAogICAgIGlmICghc3VwcG9y
dGVkUHJvZmlsZXMudmFsdWUoKS5jb250YWlucyhwYXJhbWV0ZXJzLmJpdHN0cmVhbVByb2ZpbGVJ
RCkgfHwgIXN1cHBvcnRlZExldmVscy52YWx1ZSgpLmNvbnRhaW5zKHBhcmFtZXRlcnMuYml0c3Ry
ZWFtTGV2ZWxJRCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGluZm8uc3VwcG9ydGVk
ID0gdHJ1ZTsKLSAgICBpbmZvLnNtb290aCA9IHRydWU7Ci0gICAgaW5mby5wb3dlckVmZmljaWVu
dCA9IENGQm9vbGVhbkdldFZhbHVlKGlzSGFyZHdhcmVBY2NlbGVyYXRlZENGKTsKKyAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiB7IHsg
dHJ1ZSwgdHJ1ZSwgaXNIYXJkd2FyZUFjY2VsZXJhdGVkIH0gfTsKIH0KIAogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvTWVkaWFFbmdpbmVDb25m
aWd1cmF0aW9uRmFjdG9yeUNvY29hLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NvY29hL01lZGlhRW5naW5lQ29uZmlndXJhdGlvbkZhY3RvcnlDb2NvYS5jcHAKaW5kZXgg
ODllMjFjZmU5OTFjN2NlZDU5NWJhM2QwYjE3MWMzMjcyYTA4ZTA1YS4uYzg5NmNhNDBhNjdjMjE0
MWRjZDIwNjNlNWQwYzc2ODYxYTc0ZjFjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvTWVkaWFFbmdpbmVDb25maWd1cmF0aW9uRmFjdG9yeUNvY29h
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9NZWRpYUVu
Z2luZUNvbmZpZ3VyYXRpb25GYWN0b3J5Q29jb2EuY3BwCkBAIC00MCw3ICs0MCw3IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIENNVmlkZW9Db2RlY1R5cGUgdmlkZW9Db2RlY1R5
cGVGcm9tUkZDNDI4MVR5cGUoU3RyaW5nIHR5cGUpCitzdGF0aWMgQ01WaWRlb0NvZGVjVHlwZSB2
aWRlb0NvZGVjVHlwZUZyb21SRkM0MjgxVHlwZShTdHJpbmdWaWV3IHR5cGUpCiB7CiAgICAgaWYg
KHR5cGUuc3RhcnRzV2l0aCgibXA0diIpKQogICAgICAgICByZXR1cm4ga0NNVmlkZW9Db2RlY1R5
cGVfTVBFRzRWaWRlbzsKQEAgLTU1LDY2ICs1NSw2MiBAQCBzdGF0aWMgQ01WaWRlb0NvZGVjVHlw
ZSB2aWRlb0NvZGVjVHlwZUZyb21SRkM0MjgxVHlwZShTdHJpbmcgdHlwZSkKICAgICByZXR1cm4g
MDsKIH0KIAotdm9pZCBjcmVhdGVNZWRpYVBsYXllckRlY29kaW5nQ29uZmlndXJhdGlvbkNvY29h
KE1lZGlhRGVjb2RpbmdDb25maWd1cmF0aW9uJiYgY29uZmlndXJhdGlvbiwgV1RGOjpGdW5jdGlv
bjx2b2lkKE1lZGlhQ2FwYWJpbGl0aWVzRGVjb2RpbmdJbmZvJiYpPiYmIGNhbGxiYWNrKQorc3Rh
dGljIE9wdGlvbmFsPE1lZGlhQ2FwYWJpbGl0aWVzSW5mbz4gY29tcHV0ZU1lZGlhQ2FwYWJpbGl0
aWVzSW5mbyhjb25zdCBNZWRpYURlY29kaW5nQ29uZmlndXJhdGlvbiYgY29uZmlndXJhdGlvbikK
IHsKLSAgICBNZWRpYUNhcGFiaWxpdGllc0RlY29kaW5nSW5mbyBpbmZvOworICAgIE1lZGlhQ2Fw
YWJpbGl0aWVzSW5mbyBpbmZvOwogCiAgICAgaWYgKGNvbmZpZ3VyYXRpb24udmlkZW8pIHsKICAg
ICAgICAgYXV0byYgdmlkZW9Db25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbi52aWRlby52YWx1
ZSgpOwogICAgICAgICBNZWRpYUVuZ2luZVN1cHBvcnRQYXJhbWV0ZXJzIHBhcmFtZXRlcnMgeyB9
OwogICAgICAgICBwYXJhbWV0ZXJzLnR5cGUgPSBDb250ZW50VHlwZSh2aWRlb0NvbmZpZ3VyYXRp
b24uY29udGVudFR5cGUpOwogICAgICAgICBwYXJhbWV0ZXJzLmlzTWVkaWFTb3VyY2UgPSBjb25m
aWd1cmF0aW9uLnR5cGUgPT0gTWVkaWFEZWNvZGluZ1R5cGU6Ok1lZGlhU291cmNlOwotICAgICAg
ICBpZiAoTWVkaWFQbGF5ZXI6OnN1cHBvcnRzVHlwZShwYXJhbWV0ZXJzKSAhPSBNZWRpYVBsYXll
cjo6U3VwcG9ydHNUeXBlOjpJc1N1cHBvcnRlZCkgewotICAgICAgICAgICAgY2FsbGJhY2soe3sg
fSwgV1RGTW92ZShjb25maWd1cmF0aW9uKX0pOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9CisgICAgICAgIGlmIChNZWRpYVBsYXllcjo6c3VwcG9ydHNUeXBlKHBhcmFtZXRlcnMpICE9
IE1lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGU6OklzU3VwcG9ydGVkKQorICAgICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKIAogICAgICAgICBhdXRvIGNvZGVjcyA9IHBhcmFtZXRlcnMudHlw
ZS5jb2RlY3MoKTsKLSAgICAgICAgaWYgKGNvZGVjcy5zaXplKCkgIT0gMSkgewotICAgICAgICAg
ICAgY2FsbGJhY2soe3sgfSwgV1RGTW92ZShjb25maWd1cmF0aW9uKX0pOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9CisgICAgICAgIGlmIChjb2RlY3Muc2l6ZSgpICE9IDEpCisgICAg
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgICAgIGluZm8uc3VwcG9ydGVkID0g
dHJ1ZTsKICAgICAgICAgYXV0byYgY29kZWMgPSBjb2RlY3NbMF07CiAgICAgICAgIGF1dG8gdmlk
ZW9Db2RlY1R5cGUgPSB2aWRlb0NvZGVjVHlwZUZyb21SRkM0MjgxVHlwZShjb2RlYyk7Ci0gICAg
ICAgIGlmICghdmlkZW9Db2RlY1R5cGUgJiYgIShjb2RlYy5zdGFydHNXaXRoKCJkdmgxIikgfHwg
Y29kZWMuc3RhcnRzV2l0aCgiZHZoZSIpKSkgewotICAgICAgICAgICAgY2FsbGJhY2soe3sgfSwg
V1RGTW92ZShjb25maWd1cmF0aW9uKX0pOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
CisgICAgICAgIGlmICghdmlkZW9Db2RlY1R5cGUgJiYgIShjb2RlYy5zdGFydHNXaXRoKCJkdmgx
IikgfHwgY29kZWMuc3RhcnRzV2l0aCgiZHZoZSIpKSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CiAKICAgICAgICAgYm9vbCBoZHJTdXBwb3J0ZWQgPSB2aWRlb0NvbmZpZ3VyYXRp
b24uY29sb3JHYW11dCB8fCB2aWRlb0NvbmZpZ3VyYXRpb24uaGRyTWV0YWRhdGFUeXBlIHx8IHZp
ZGVvQ29uZmlndXJhdGlvbi50cmFuc2ZlckZ1bmN0aW9uOwogICAgICAgICBib29sIGFscGhhQ2hh
bm5lbCA9IHZpZGVvQ29uZmlndXJhdGlvbi5hbHBoYUNoYW5uZWwgJiYgdmlkZW9Db25maWd1cmF0
aW9uLmFscGhhQ2hhbm5lbC52YWx1ZSgpOwogCiAgICAgICAgIGlmICh2aWRlb0NvZGVjVHlwZSA9
PSBrQ01WaWRlb0NvZGVjVHlwZV9IRVZDKSB7CiAgICAgICAgICAgICBhdXRvIHBhcmFtZXRlcnMg
PSBwYXJzZUhFVkNDb2RlY1BhcmFtZXRlcnMoY29kZWMpOwotICAgICAgICAgICAgaWYgKCFwYXJh
bWV0ZXJzIHx8ICF2YWxpZGF0ZUhFVkNQYXJhbWV0ZXJzKHBhcmFtZXRlcnMudmFsdWUoKSwgaW5m
bywgYWxwaGFDaGFubmVsLCBoZHJTdXBwb3J0ZWQpKSB7Ci0gICAgICAgICAgICAgICAgY2FsbGJh
Y2soe3sgfSwgV1RGTW92ZShjb25maWd1cmF0aW9uKX0pOwotICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghcGFyYW1ldGVycykKKyAgICAgICAg
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICAgICAgYXV0byBwYXJzZWRJbmZv
ID0gdmFsaWRhdGVIRVZDUGFyYW1ldGVycygqcGFyYW1ldGVycywgYWxwaGFDaGFubmVsLCBoZHJT
dXBwb3J0ZWQpOworICAgICAgICAgICAgaWYgKCFwYXJzZWRJbmZvKQorICAgICAgICAgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgICAgICBpbmZvID0gKnBhcnNlZEluZm87CiAg
ICAgICAgIH0gZWxzZSBpZiAoY29kZWMuc3RhcnRzV2l0aCgiZHZoMSIpIHx8IGNvZGVjLnN0YXJ0
c1dpdGgoImR2aGUiKSkgewogICAgICAgICAgICAgYXV0byBwYXJhbWV0ZXJzID0gcGFyc2VEb1Zp
Q29kZWNQYXJhbWV0ZXJzKGNvZGVjKTsKLSAgICAgICAgICAgIGlmICghcGFyYW1ldGVycyB8fCAh
dmFsaWRhdGVEb1ZpUGFyYW1ldGVycyhwYXJhbWV0ZXJzLnZhbHVlKCksIGluZm8sIGFscGhhQ2hh
bm5lbCwgaGRyU3VwcG9ydGVkKSkgewotICAgICAgICAgICAgICAgIGNhbGxiYWNrKHt7IH0sIFdU
Rk1vdmUoY29uZmlndXJhdGlvbil9KTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
ICAgICB9CisgICAgICAgICAgICBpZiAoIXBhcmFtZXRlcnMpCisgICAgICAgICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgICAgIGF1dG8gcGFyc2VkSW5mbyA9IHZhbGlkYXRl
RG9WaVBhcmFtZXRlcnMoKnBhcmFtZXRlcnMsIGFscGhhQ2hhbm5lbCwgaGRyU3VwcG9ydGVkKTsK
KyAgICAgICAgICAgIGlmICghcGFyc2VkSW5mbykKKyAgICAgICAgICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OworICAgICAgICAgICAgaW5mbyA9ICpwYXJzZWRJbmZvOwogI2lmIEVOQUJMRShW
UDkpCiAgICAgICAgIH0gZWxzZSBpZiAodmlkZW9Db2RlY1R5cGUgPT0ga0NNVmlkZW9Db2RlY1R5
cGVfVlA5KSB7Ci0gICAgICAgICAgICBpZiAoIWNvbmZpZ3VyYXRpb24uY2FuRXhwb3NlVlA5KSB7
Ci0gICAgICAgICAgICAgICAgY2FsbGJhY2soe3sgfSwgV1RGTW92ZShjb25maWd1cmF0aW9uKX0p
OwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGF1
dG8gY29kZWNDb25maWd1cmF0aW9uID0gcGFyc2VWUENvZGVjUGFyYW1ldGVycyhjb2RlYyk7Ci0g
ICAgICAgICAgICBpZiAoIWNvZGVjQ29uZmlndXJhdGlvbiB8fCAhdmFsaWRhdGVWUFBhcmFtZXRl
cnMoKmNvZGVjQ29uZmlndXJhdGlvbiwgaW5mbywgdmlkZW9Db25maWd1cmF0aW9uKSkgewotICAg
ICAgICAgICAgICAgIGNhbGxiYWNrKHt7IH0sIFdURk1vdmUoY29uZmlndXJhdGlvbil9KTsKLSAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIWNv
bmZpZ3VyYXRpb24uY2FuRXhwb3NlVlA5KQorICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CisgICAgICAgICAgICBhdXRvIHBhcmFtZXRlcnMgPSBwYXJzZVZQQ29kZWNQYXJhbWV0
ZXJzKGNvZGVjKTsKKyAgICAgICAgICAgIGlmICghcGFyYW1ldGVycykKKyAgICAgICAgICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICAgICAgYXV0byBwYXJzZWRJbmZvID0gdmFs
aWRhdGVWUFBhcmFtZXRlcnMoKnBhcmFtZXRlcnMsIHZpZGVvQ29uZmlndXJhdGlvbik7CisgICAg
ICAgICAgICBpZiAoIXBhcnNlZEluZm8pCisgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKKyAgICAgICAgICAgIGluZm8gPSAqcGFyc2VkSW5mbzsKICNlbmRpZgogICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgaWYgKGFscGhhQ2hhbm5lbCB8fCBoZHJTdXBwb3J0ZWQpIHsK
LSAgICAgICAgICAgICAgICBjYWxsYmFjayh7eyB9LCBXVEZNb3ZlKGNvbmZpZ3VyYXRpb24pfSk7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KGFscGhhQ2hhbm5lbCB8fCBoZHJTdXBwb3J0ZWQpCisgICAgICAgICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKIAogICAgICAgICAgICAgaWYgKGNhbkxvYWRfVmlkZW9Ub29sYm94X1ZUSXNI
YXJkd2FyZURlY29kZVN1cHBvcnRlZCgpKSB7CiAgICAgICAgICAgICAgICAgaW5mby5wb3dlckVm
ZmljaWVudCA9IFZUSXNIYXJkd2FyZURlY29kZVN1cHBvcnRlZCh2aWRlb0NvZGVjVHlwZSk7CkBA
IC0xMjcsNDIgKzEyMywzOSBAQCB2b2lkIGNyZWF0ZU1lZGlhUGxheWVyRGVjb2RpbmdDb25maWd1
cmF0aW9uQ29jb2EoTWVkaWFEZWNvZGluZ0NvbmZpZ3VyYXRpb24mJiBjbwogICAgICAgICBNZWRp
YUVuZ2luZVN1cHBvcnRQYXJhbWV0ZXJzIHBhcmFtZXRlcnMgeyB9OwogICAgICAgICBwYXJhbWV0
ZXJzLnR5cGUgPSBDb250ZW50VHlwZShjb25maWd1cmF0aW9uLmF1ZGlvLnZhbHVlKCkuY29udGVu
dFR5cGUpOwogICAgICAgICBwYXJhbWV0ZXJzLmlzTWVkaWFTb3VyY2UgPSBjb25maWd1cmF0aW9u
LnR5cGUgPT0gTWVkaWFEZWNvZGluZ1R5cGU6Ok1lZGlhU291cmNlOwotICAgICAgICBpZiAoTWVk
aWFQbGF5ZXI6OnN1cHBvcnRzVHlwZShwYXJhbWV0ZXJzKSAhPSBNZWRpYVBsYXllcjo6U3VwcG9y
dHNUeXBlOjpJc1N1cHBvcnRlZCkgewotICAgICAgICAgICAgY2FsbGJhY2soe3sgfSwgV1RGTW92
ZShjb25maWd1cmF0aW9uKX0pOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisgICAg
ICAgIGlmIChNZWRpYVBsYXllcjo6c3VwcG9ydHNUeXBlKHBhcmFtZXRlcnMpICE9IE1lZGlhUGxh
eWVyOjpTdXBwb3J0c1R5cGU6OklzU3VwcG9ydGVkKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKIAogICAgICAgICBpZiAoY29uZmlndXJhdGlvbi5hdWRpby0+c3BhdGlhbFJlbmRl
cmluZy52YWx1ZU9yKGZhbHNlKSkgewogICAgICAgICAgICAgYXV0byBjb250ZXh0ID0gUEFMOjpP
dXRwdXRDb250ZXh0OjpzaGFyZWRBdWRpb1ByZXNlbnRhdGlvbk91dHB1dENvbnRleHQoKTsKLSAg
ICAgICAgICAgIGlmICghY29udGV4dCkgewotICAgICAgICAgICAgICAgIGNhbGxiYWNrKHt7IH0s
IFdURk1vdmUoY29uZmlndXJhdGlvbil9KTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICB9CisgICAgICAgICAgICBpZiAoIWNvbnRleHQpCisgICAgICAgICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKIAogICAgICAgICAgICAgYXV0byBkZXZpY2VzID0gY29udGV4dC0+
b3V0cHV0RGV2aWNlcygpOwogICAgICAgICAgICAgaWYgKGRldmljZXMuaXNFbXB0eSgpIHx8ICFX
VEY6OmFsbE9mKGRldmljZXMsIFtdKGF1dG8mIGRldmljZSkgewogICAgICAgICAgICAgICAgIHJl
dHVybiBkZXZpY2Uuc3VwcG9ydHNTcGF0aWFsQXVkaW8oKTsKLSAgICAgICAgICAgIH0pKSB7Ci0g
ICAgICAgICAgICAgICAgY2FsbGJhY2soe3sgfSwgV1RGTW92ZShjb25maWd1cmF0aW9uKX0pOwot
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pKQor
ICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICAgICAgICAgIC8vIE9u
bHkgbXVsdGljaGFubmVsIGF1ZGlvIGNhbiBiZSBzcGF0aWFsbHkgcmVuZGVyZWQuCi0gICAgICAg
ICAgICBpZiAoIWNvbmZpZ3VyYXRpb24uYXVkaW8tPmNoYW5uZWxzLmlzTnVsbCgpKSB7Ci0gICAg
ICAgICAgICAgICAgYm9vbCBpc09rID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgYXV0byBwYXJz
ZWRDaGFubmVscyA9IGNvbmZpZ3VyYXRpb24uYXVkaW8tPmNoYW5uZWxzLnRvRG91YmxlKCZpc09r
KTsKLSAgICAgICAgICAgICAgICBpZiAoIWlzT2sgfHwgcGFyc2VkQ2hhbm5lbHMgPD0gMikgewot
ICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayh7eyB9LCBXVEZNb3ZlKGNvbmZpZ3VyYXRpb24p
fSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9CisgICAgICAgICAgICBpZiAoIWNvbmZpZ3VyYXRpb24uYXVkaW8tPmNoYW5uZWxz
LmlzTnVsbCgpICYmIGNvbmZpZ3VyYXRpb24uYXVkaW8tPmNoYW5uZWxzLnRvRG91YmxlKCkgPD0g
MikKKyAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICB9CiAgICAg
ICAgIGluZm8uc3VwcG9ydGVkID0gdHJ1ZTsKICAgICB9CiAKLSAgICBpbmZvLnN1cHBvcnRlZENv
bmZpZ3VyYXRpb24gPSBXVEZNb3ZlKGNvbmZpZ3VyYXRpb24pOworICAgIHJldHVybiBpbmZvOwor
fQogCi0gICAgY2FsbGJhY2soV1RGTW92ZShpbmZvKSk7Cit2b2lkIGNyZWF0ZU1lZGlhUGxheWVy
RGVjb2RpbmdDb25maWd1cmF0aW9uQ29jb2EoTWVkaWFEZWNvZGluZ0NvbmZpZ3VyYXRpb24mJiBj
b25maWd1cmF0aW9uLCBXVEY6OkZ1bmN0aW9uPHZvaWQoTWVkaWFDYXBhYmlsaXRpZXNEZWNvZGlu
Z0luZm8mJik+JiYgY2FsbGJhY2spCit7CisgICAgYXV0byBpbmZvID0gY29tcHV0ZU1lZGlhQ2Fw
YWJpbGl0aWVzSW5mbyhjb25maWd1cmF0aW9uKTsKKyAgICBpZiAoIWluZm8pCisgICAgICAgIGNh
bGxiYWNrKHsgeyB9LCBXVEZNb3ZlKGNvbmZpZ3VyYXRpb24pIH0pOworICAgIGVsc2UgeworICAg
ICAgICBNZWRpYUNhcGFiaWxpdGllc0RlY29kaW5nSW5mbyBpbmZvV2l0aENvbmZpZ3VyYXRpb24g
PSB7IFdURk1vdmUoKmluZm8pLCBXVEZNb3ZlKGNvbmZpZ3VyYXRpb24pIH07CisgICAgICAgIGNh
bGxiYWNrKFdURk1vdmUoaW5mb1dpdGhDb25maWd1cmF0aW9uKSk7CisgICAgfQogfQogCiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9WUDlVdGls
aXRpZXNDb2NvYS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvVlA5
VXRpbGl0aWVzQ29jb2EuaAppbmRleCBmY2FmOTlhZWQzMjYwZWI1Y2IwZDFjNTZjZWUwOWRlNmVm
YjBkYzJlLi43Y2E1NDlmOGU5MGFkZGVjZmE3YWE4ZjNmZDI3YWE2ZTY3N2U4ODgxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9WUDlVdGlsaXRpZXND
b2NvYS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1ZQOVV0
aWxpdGllc0NvY29hLmgKQEAgLTQxLDEzICs0MSwxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBz
dHJ1Y3QgTWVkaWFDYXBhYmlsaXRpZXNJbmZvOwogc3RydWN0IFZpZGVvQ29uZmlndXJhdGlvbjsK
IAotV0VCQ09SRV9FWFBPUlQgZXh0ZXJuIHZvaWQgcmVnaXN0ZXJXZWJLaXRWUDlEZWNvZGVyKCk7
Ci1XRUJDT1JFX0VYUE9SVCBleHRlcm4gdm9pZCByZWdpc3RlcldlYktpdFZQOERlY29kZXIoKTsK
LVdFQkNPUkVfRVhQT1JUIGV4dGVybiB2b2lkIHJlZ2lzdGVyU3VwcGxlbWVudGFsVlA5RGVjb2Rl
cigpOwotZXh0ZXJuIGJvb2wgaXNWUDlEZWNvZGVyQXZhaWxhYmxlKCk7Ci1leHRlcm4gYm9vbCBp
c1ZQOERlY29kZXJBdmFpbGFibGUoKTsKLWV4dGVybiBib29sIGlzVlBDb2RlY0NvbmZpZ3VyYXRp
b25SZWNvcmRTdXBwb3J0ZWQoVlBDb2RlY0NvbmZpZ3VyYXRpb25SZWNvcmQmKTsKLWV4dGVybiBi
b29sIHZhbGlkYXRlVlBQYXJhbWV0ZXJzKFZQQ29kZWNDb25maWd1cmF0aW9uUmVjb3JkJiwgTWVk
aWFDYXBhYmlsaXRpZXNJbmZvJiwgY29uc3QgVmlkZW9Db25maWd1cmF0aW9uJik7CitXRUJDT1JF
X0VYUE9SVCB2b2lkIHJlZ2lzdGVyV2ViS2l0VlA5RGVjb2RlcigpOworV0VCQ09SRV9FWFBPUlQg
dm9pZCByZWdpc3RlcldlYktpdFZQOERlY29kZXIoKTsKK1dFQkNPUkVfRVhQT1JUIHZvaWQgcmVn
aXN0ZXJTdXBwbGVtZW50YWxWUDlEZWNvZGVyKCk7Citib29sIGlzVlA5RGVjb2RlckF2YWlsYWJs
ZSgpOworYm9vbCBpc1ZQOERlY29kZXJBdmFpbGFibGUoKTsKK2Jvb2wgaXNWUENvZGVjQ29uZmln
dXJhdGlvblJlY29yZFN1cHBvcnRlZChjb25zdCBWUENvZGVjQ29uZmlndXJhdGlvblJlY29yZCYp
OworT3B0aW9uYWw8TWVkaWFDYXBhYmlsaXRpZXNJbmZvPiB2YWxpZGF0ZVZQUGFyYW1ldGVycyhj
b25zdCBWUENvZGVjQ29uZmlndXJhdGlvblJlY29yZCYsIGNvbnN0IFZpZGVvQ29uZmlndXJhdGlv
biYpOwogCiBSZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gY3JlYXRlRm9ybWF0RGVz
Y3JpcHRpb25Gcm9tVlA5SGVhZGVyUGFyc2VyKGNvbnN0IHZwOV9wYXJzZXI6OlZwOUhlYWRlclBh
cnNlciYsIGNvbnN0IHdlYm06OkVsZW1lbnQ8d2VibTo6Q29sb3VyPiYpOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9WUDlVdGlsaXRpZXNDb2Nv
YS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1ZQOVV0aWxpdGll
c0NvY29hLm1tCmluZGV4IGM1ZmEzODg0NzhlNGU0MmE1MDc4ZTgyMWY3YTM4OGI4OWE2NzI2MTIu
LjMyY2FmNzE1NjdlZGY5ZGViNzBiYWM3MWYyODliMjMzNGRmNTY3NTIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1ZQOVV0aWxpdGllc0NvY29hLm1t
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1ZQOVV0aWxpdGll
c0NvY29hLm1tCkBAIC0xNDgsNyArMTQ4LDcgQEAgc3RhdGljIGJvb2wgdnA5SGFyZHdhcmVEZWNv
ZGVyQXZhaWxhYmxlKCkKICAgICByZXR1cm4gY2FuTG9hZF9WaWRlb1Rvb2xib3hfVlRJc0hhcmR3
YXJlRGVjb2RlU3VwcG9ydGVkKCkgJiYgVlRJc0hhcmR3YXJlRGVjb2RlU3VwcG9ydGVkKGtDTVZp
ZGVvQ29kZWNUeXBlX1ZQOSk7CiB9CiAKLXN0YXRpYyBib29sIGlzVlA5Q29kZWNDb25maWd1cmF0
aW9uUmVjb3JkU3VwcG9ydGVkKFZQQ29kZWNDb25maWd1cmF0aW9uUmVjb3JkJiBjb2RlY0NvbmZp
Z3VyYXRpb24pCitzdGF0aWMgYm9vbCBpc1ZQOUNvZGVjQ29uZmlndXJhdGlvblJlY29yZFN1cHBv
cnRlZChjb25zdCBWUENvZGVjQ29uZmlndXJhdGlvblJlY29yZCYgY29kZWNDb25maWd1cmF0aW9u
KQogewogICAgIGlmICghaXNWUDlEZWNvZGVyQXZhaWxhYmxlKCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKQEAgLTE5OSw3ICsxOTksNyBAQCBzdGF0aWMgYm9vbCBpc1ZQOUNvZGVjQ29uZmlndXJh
dGlvblJlY29yZFN1cHBvcnRlZChWUENvZGVjQ29uZmlndXJhdGlvblJlY29yZCYgYwogICAgIHJl
dHVybiBoYXM0a1NjcmVlbjsKIH0KIAotc3RhdGljIGJvb2wgaXNWUDhDb2RlY0NvbmZpZ3VyYXRp
b25SZWNvcmRTdXBwb3J0ZWQoVlBDb2RlY0NvbmZpZ3VyYXRpb25SZWNvcmQmIGNvZGVjQ29uZmln
dXJhdGlvbikKK3N0YXRpYyBib29sIGlzVlA4Q29kZWNDb25maWd1cmF0aW9uUmVjb3JkU3VwcG9y
dGVkKGNvbnN0IFZQQ29kZWNDb25maWd1cmF0aW9uUmVjb3JkJiBjb2RlY0NvbmZpZ3VyYXRpb24p
CiB7CiAgICAgaWYgKCFpc1ZQOERlY29kZXJBdmFpbGFibGUoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwpAQCAtMjE5LDcgKzIxOSw3IEBAIHN0YXRpYyBib29sIGlzVlA4Q29kZWNDb25maWd1cmF0
aW9uUmVjb3JkU3VwcG9ydGVkKFZQQ29kZWNDb25maWd1cmF0aW9uUmVjb3JkJiBjCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLWJvb2wgaXNWUENvZGVjQ29uZmlndXJhdGlvblJlY29yZFN1cHBvcnRl
ZChWUENvZGVjQ29uZmlndXJhdGlvblJlY29yZCYgY29kZWNDb25maWd1cmF0aW9uKQorYm9vbCBp
c1ZQQ29kZWNDb25maWd1cmF0aW9uUmVjb3JkU3VwcG9ydGVkKGNvbnN0IFZQQ29kZWNDb25maWd1
cmF0aW9uUmVjb3JkJiBjb2RlY0NvbmZpZ3VyYXRpb24pCiB7CiAgICAgaWYgKGNvZGVjQ29uZmln
dXJhdGlvbi5jb2RlY05hbWUgPT0gInZwMDgiIHx8IGNvZGVjQ29uZmlndXJhdGlvbi5jb2RlY05h
bWUgPT0gInZwOCIpCiAgICAgICAgIHJldHVybiBpc1ZQOENvZGVjQ29uZmlndXJhdGlvblJlY29y
ZFN1cHBvcnRlZChjb2RlY0NvbmZpZ3VyYXRpb24pOwpAQCAtMjMwLDM2ICsyMzAsMzggQEAgYm9v
bCBpc1ZQQ29kZWNDb25maWd1cmF0aW9uUmVjb3JkU3VwcG9ydGVkKFZQQ29kZWNDb25maWd1cmF0
aW9uUmVjb3JkJiBjb2RlY0NvbmYKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgdmFsaWRh
dGVWUFBhcmFtZXRlcnMoVlBDb2RlY0NvbmZpZ3VyYXRpb25SZWNvcmQmIGNvZGVjQ29uZmlndXJh
dGlvbiwgTWVkaWFDYXBhYmlsaXRpZXNJbmZvJiBpbmZvLCBjb25zdCBWaWRlb0NvbmZpZ3VyYXRp
b24mIHZpZGVvQ29uZmlndXJhdGlvbikKK09wdGlvbmFsPE1lZGlhQ2FwYWJpbGl0aWVzSW5mbz4g
dmFsaWRhdGVWUFBhcmFtZXRlcnMoY29uc3QgVlBDb2RlY0NvbmZpZ3VyYXRpb25SZWNvcmQmIGNv
ZGVjQ29uZmlndXJhdGlvbiwgY29uc3QgVmlkZW9Db25maWd1cmF0aW9uJiB2aWRlb0NvbmZpZ3Vy
YXRpb24pCiB7CiAgICAgaWYgKCFpc1ZQQ29kZWNDb25maWd1cmF0aW9uUmVjb3JkU3VwcG9ydGVk
KGNvZGVjQ29uZmlndXJhdGlvbikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIC8vIFZpZGVvQ29uZmlndXJhdGlvbiBhbmQgVlBDb2Rl
Y0NvbmZpZ3VyYXRpb25SZWNvcmQgY2FuIGhhdmUgY29uZmxpY3RpbmcgdmFsdWVzIGZvciBIRFIg
cHJvcGVydGllcy4gSWYgc28sIHJlamVjdC4KICAgICBpZiAodmlkZW9Db25maWd1cmF0aW9uLnRy
YW5zZmVyRnVuY3Rpb24pIHsKICAgICAgICAgLy8gTm90ZTogVHJhbnNmZXIgQ2hhcmFjdGVyaXN0
aWNzIGFyZSBkZWZpbmVkIGJ5IElTTy9JRUMgMjMwOTEtMjoyMDE5LgogICAgICAgICBpZiAoKnZp
ZGVvQ29uZmlndXJhdGlvbi50cmFuc2ZlckZ1bmN0aW9uID09IFRyYW5zZmVyRnVuY3Rpb246OlNS
R0IgJiYgY29kZWNDb25maWd1cmF0aW9uLnRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzID4gMTUpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwogICAgICAgICBpZiAoKnZpZGVvQ29uZmlndXJhdGlvbi50cmFuc2ZlckZ1bmN0aW9uID09IFRy
YW5zZmVyRnVuY3Rpb246OlBRICYmIGNvZGVjQ29uZmlndXJhdGlvbi50cmFuc2ZlckNoYXJhY3Rl
cmlzdGljcyAhPSAxNikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIGlmICgqdmlkZW9Db25maWd1cmF0aW9uLnRyYW5z
ZmVyRnVuY3Rpb24gPT0gVHJhbnNmZXJGdW5jdGlvbjo6SExHICYmIGNvZGVjQ29uZmlndXJhdGlv
bi50cmFuc2ZlckNoYXJhY3RlcmlzdGljcyAhPSAxOCkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgfQogCiAgICAgaWYgKHZp
ZGVvQ29uZmlndXJhdGlvbi5jb2xvckdhbXV0KSB7CiAgICAgICAgIGlmICgqdmlkZW9Db25maWd1
cmF0aW9uLmNvbG9yR2FtdXQgPT0gQ29sb3JHYW11dDo6UmVjMjAyMCAmJiBjb2RlY0NvbmZpZ3Vy
YXRpb24uY29sb3JQcmltYXJpZXMgIT0gOSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgfQogCisgICAgTWVkaWFDYXBhYmls
aXRpZXNJbmZvIGluZm87CisKICAgICBpZiAodnA5SGFyZHdhcmVEZWNvZGVyQXZhaWxhYmxlKCkp
IHsKICAgICAgICAgLy8gSFcgVlA5IERlY29kZXIgZG9lcyBub3Qgc3VwcG9ydCBhbHBoYSBjaGFu
bmVsOgogICAgICAgICBpZiAodmlkZW9Db25maWd1cmF0aW9uLmFscGhhQ2hhbm5lbCAmJiAqdmlk
ZW9Db25maWd1cmF0aW9uLmFscGhhQ2hhbm5lbCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICAgICAgLy8gSFcgVlA5IERl
Y29kZXIgY2FuIHN1cHBvcnQgdXAgdG8gNEsgQCAxMjAgb3IgOEsgQCAzMAogICAgICAgICBhdXRv
IHJlc29sdXRpb24gPSByZXNvbHV0aW9uQ2F0ZWdvcnkoeyAoZmxvYXQpdmlkZW9Db25maWd1cmF0
aW9uLndpZHRoLCAoZmxvYXQpdmlkZW9Db25maWd1cmF0aW9uLmhlaWdodCB9KTsKICAgICAgICAg
aWYgKHJlc29sdXRpb24gPiBSZXNvbHV0aW9uQ2F0ZWdvcnk6OlJfOEspCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICBp
ZiAocmVzb2x1dGlvbiA9PSBSZXNvbHV0aW9uQ2F0ZWdvcnk6OlJfOEsgJiYgdmlkZW9Db25maWd1
cmF0aW9uLmZyYW1lcmF0ZSA+IDMwKQogICAgICAgICAgICAgaW5mby5zbW9vdGggPSBmYWxzZTsK
ICAgICAgICAgZWxzZSBpZiAocmVzb2x1dGlvbiA8PSBSZXNvbHV0aW9uQ2F0ZWdvcnk6OlJfNEsg
JiYgdmlkZW9Db25maWd1cmF0aW9uLmZyYW1lcmF0ZSA+IDEyMCkKQEAgLTI2OSw3ICsyNzEsNyBA
QCBib29sIHZhbGlkYXRlVlBQYXJhbWV0ZXJzKFZQQ29kZWNDb25maWd1cmF0aW9uUmVjb3JkJiBj
b2RlY0NvbmZpZ3VyYXRpb24sIE1lZGlhQwogCiAgICAgICAgIGluZm8ucG93ZXJFZmZpY2llbnQg
PSB0cnVlOwogICAgICAgICBpbmZvLnN1cHBvcnRlZCA9IHRydWU7Ci0gICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICByZXR1cm4gaW5mbzsKICAgICB9CiAKICAgICBpbmZvLnBvd2VyRWZmaWNp
ZW50ID0gZmFsc2U7CkBAIC0yODcsNyArMjg5LDcgQEAgYm9vbCB2YWxpZGF0ZVZQUGFyYW1ldGVy
cyhWUENvZGVjQ29uZmlndXJhdGlvblJlY29yZCYgY29kZWNDb25maWd1cmF0aW9uLCBNZWRpYUMK
ICAgICAvLyBGb3Igd2FsbC1wb3dlcmVkIGRldmljZXMsIGFsd2F5cyByZXBvcnQgVlA5IGFzIHN1
cHBvcnRlZCwgZXZlbiBpZiBub3QgcG93ZXJFZmZpY2llbnQuCiAgICAgaWYgKCFzeXN0ZW1IYXNC
YXR0ZXJ5KCkpIHsKICAgICAgICAgaW5mby5zdXBwb3J0ZWQgPSB0cnVlOwotICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGluZm87CiAgICAgfQogCiAgICAgLy8gRm9yIGJhdHRl
cnktcG93ZXJlZCBkZXZpY2VzLCBhbHdheXMgcmVwb3J0IFZQOSBhcyBzdXBwb3J0ZWQgd2hlbiBy
dW5uaW5nIG9uIEFDIHBvd2VyLApAQCAtMjk1LDcgKzI5Nyw3IEBAIGJvb2wgdmFsaWRhdGVWUFBh
cmFtZXRlcnMoVlBDb2RlY0NvbmZpZ3VyYXRpb25SZWNvcmQmIGNvZGVjQ29uZmlndXJhdGlvbiwg
TWVkaWFDCiAgICAgLy8gdG8gc3VwcG9ydCA0SyB2aWRlby4KICAgICBpZiAoc3lzdGVtSGFzQUMo
KSkgewogICAgICAgICBpbmZvLnN1cHBvcnRlZCA9IHRydWU7Ci0gICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICByZXR1cm4gaW5mbzsKICAgICB9CiAKICAgICBib29sIGhhczRrU2NyZWVuID0g
ZmFsc2U7CkBAIC0zMTMsMTAgKzMxNSwxMCBAQCBib29sIHZhbGlkYXRlVlBQYXJhbWV0ZXJzKFZQ
Q29kZWNDb25maWd1cmF0aW9uUmVjb3JkJiBjb2RlY0NvbmZpZ3VyYXRpb24sIE1lZGlhQwogICAg
IH0KIAogICAgIGlmICghaGFzNGtTY3JlZW4pCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIGluZm8uc3VwcG9ydGVkID0gdHJ1ZTsKLSAg
ICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gaW5mbzsKIH0KIAogc3RhdGljIHVpbnQ4X3QgY29u
dmVydFRvQ29sb3JQcmltYXJpZXMoY29uc3QgUHJpbWFyaWVzJiBjb2VmZmljaWVudHMpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0hUVFBIZWFkZXJNYXAuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvSFRUUEhlYWRlck1hcC5oCmluZGV4IGNi
NjgzOTc3MGRiZjZjYWUzMmZhOGJkMDMxYTM3ZTk5N2ZlOTVkYWUuLmEwZWMyMDY5ZDkyOTc3N2M0
YjIxZTJhNGUzMDgwZWE5NGRhZGQzNDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvSFRUUEhlYWRlck1hcC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvSFRUUEhlYWRlck1hcC5oCkBAIC0yOCw5ICsyOCw3IEBACiAKICNpbmNsdWRlICJI
VFRQSGVhZGVyTmFtZXMuaCIKICNpbmNsdWRlIDx1dGlsaXR5PgotI2luY2x1ZGUgPHd0Zi9IYXNo
TWFwLmg+Ci0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3Ry
aW5nSGFzaC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvTG9j
YWxlVG9TY3JpcHRNYXBwaW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvTG9j
YWxlVG9TY3JpcHRNYXBwaW5nLmNwcAppbmRleCA5NjY3OWM3MTYwYjNiY2UxNDkxZWI5MGM3ZWQx
NzYxMDU5MGUwMmZlLi4wNGJkNTM3MWNjNGY2YTNlMTMxNTQ1MjIxZmRjMTMwNmFiYWJlNWM5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0xvY2FsZVRvU2NyaXB0TWFw
cGluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9Mb2NhbGVUb1Njcmlw
dE1hcHBpbmcuY3BwCkBAIC0zOCw4MSArMzgsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LS8vIEZJWE1FOiBDb25zaWRlciBtb3ZpbmcgYWxvbmdzaWRlIENvbXBhcmFibGVBU0NJSUxpdGVy
YWwgYW5kIGdpdmluZyBhbiBldmVuIGJldHRlciBuYW1lLgotdGVtcGxhdGU8dHlwZW5hbWUgU3Rv
cmFnZUludGVnZXI+Ci1jbGFzcyBQYWNrZWRBU0NJSUxvd2VyQ29kZXMgewotcHVibGljOgotICAg
IHN0YXRpY19hc3NlcnQoc3RkOjppc191bnNpZ25lZF92PFN0b3JhZ2VJbnRlZ2VyPik7Ci0KLSAg
ICB0ZW1wbGF0ZTx1bnNpZ25lZCBjaGFyYWN0ZXJDb3VudFBsdXNPbmU+Ci0gICAgY29uc3RleHBy
IFBhY2tlZEFTQ0lJTG93ZXJDb2Rlcyhjb25zdCBjaGFyICgmc3RyaW5nKVtjaGFyYWN0ZXJDb3Vu
dFBsdXNPbmVdKQotICAgIHsKLSAgICAgICAgY29uc3RleHByIHVuc2lnbmVkIGxlbmd0aCA9IGNo
YXJhY3RlckNvdW50UGx1c09uZSAtIDE7Ci0gICAgICAgIEFTU0VSVF9VTkRFUl9DT05TVEVYUFJf
Q09OVEVYVChsZW5ndGggPD0gc2l6ZW9mKFN0b3JhZ2VJbnRlZ2VyKSk7Ci0gICAgICAgIEFTU0VS
VF9VTkRFUl9DT05TVEVYUFJfQ09OVEVYVCghc3RyaW5nW2xlbmd0aF0pOwotICAgICAgICBTdG9y
YWdlSW50ZWdlciByZXN1bHQgPSAwOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsg
aW5kZXggPCBsZW5ndGg7ICsraW5kZXgpIHsKLSAgICAgICAgICAgIHVpbnQ4X3QgY29kZSA9IHN0
YXRpY19jYXN0PHVpbnQ4X3Q+KHN0cmluZ1tpbmRleF0pOwotICAgICAgICAgICAgcmVzdWx0IHw9
IHN0YXRpY19jYXN0PFN0b3JhZ2VJbnRlZ2VyPihjb2RlKSA8PCAoKHNpemVvZihTdG9yYWdlSW50
ZWdlcikgLSBpbmRleCAtIDEpICogOCk7Ci0gICAgICAgIH0KLSAgICAgICAgbV92YWx1ZSA9IHJl
c3VsdDsKLSAgICB9Ci0KLSAgICBzdGF0aWMgT3B0aW9uYWw8UGFja2VkQVNDSUlMb3dlckNvZGVz
PiBwYXJzZShTdHJpbmdWaWV3IHN0cmluZykKLSAgICB7Ci0gICAgICAgIGlmIChzdHJpbmcubGVu
Z3RoKCkgPiBzaXplb2YoU3RvcmFnZUludGVnZXIpKQotICAgICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKLSAgICAgICAgU3RvcmFnZUludGVnZXIgcmVzdWx0ID0gMDsKLSAgICAgICAgZm9y
ICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgc3RyaW5nLmxlbmd0aCgpOyArK2luZGV4KSB7
Ci0gICAgICAgICAgICBVQ2hhciBjb2RlID0gc3RyaW5nW2luZGV4XTsKLSAgICAgICAgICAgIGlm
ICghaXNBU0NJSShjb2RlKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owot
ICAgICAgICAgICAgcmVzdWx0IHw9IHN0YXRpY19jYXN0PFN0b3JhZ2VJbnRlZ2VyPih0b0FTQ0lJ
TG93ZXIoY29kZSkpIDw8ICgoc2l6ZW9mKFN0b3JhZ2VJbnRlZ2VyKSAtIGluZGV4IC0gMSkgKiA4
KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gUGFja2VkQVNDSUlMb3dlckNvZGVzKHJlc3Vs
dCk7Ci0gICAgfQotCi0gICAgZnJpZW5kIGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPT0oUGFja2Vk
QVNDSUlMb3dlckNvZGVzIGxocywgUGFja2VkQVNDSUlMb3dlckNvZGVzIHJocykKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBsaHMubV92YWx1ZSA9PSByaHMubV92YWx1ZTsKLSAgICB9Ci0KLSAgICBm
cmllbmQgY29uc3RleHByIGJvb2wgb3BlcmF0b3IhPShQYWNrZWRBU0NJSUxvd2VyQ29kZXMgbGhz
LCBQYWNrZWRBU0NJSUxvd2VyQ29kZXMgcmhzKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGxocy5t
X3ZhbHVlICE9IHJocy5tX3ZhbHVlOwotICAgIH0KLQotICAgIGZyaWVuZCBjb25zdGV4cHIgYm9v
bCBvcGVyYXRvcjwoUGFja2VkQVNDSUlMb3dlckNvZGVzIGxocywgUGFja2VkQVNDSUlMb3dlckNv
ZGVzIHJocykKLSAgICB7Ci0gICAgICAgIHJldHVybiBsaHMubV92YWx1ZSA8IHJocy5tX3ZhbHVl
OwotICAgIH0KLQotICAgIGZyaWVuZCBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjw9KFBhY2tlZEFT
Q0lJTG93ZXJDb2RlcyBsaHMsIFBhY2tlZEFTQ0lJTG93ZXJDb2RlcyByaHMpCi0gICAgewotICAg
ICAgICByZXR1cm4gbGhzLm1fdmFsdWUgPD0gcmhzLm1fdmFsdWU7Ci0gICAgfQotCi0gICAgZnJp
ZW5kIGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPihQYWNrZWRBU0NJSUxvd2VyQ29kZXMgbGhzLCBQ
YWNrZWRBU0NJSUxvd2VyQ29kZXMgcmhzKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGxocy5tX3Zh
bHVlID4gcmhzLm1fdmFsdWU7Ci0gICAgfQotCi0gICAgZnJpZW5kIGNvbnN0ZXhwciBib29sIG9w
ZXJhdG9yPj0oUGFja2VkQVNDSUlMb3dlckNvZGVzIGxocywgUGFja2VkQVNDSUlMb3dlckNvZGVz
IHJocykKLSAgICB7Ci0gICAgICAgIHJldHVybiBsaHMubV92YWx1ZSA+PSByaHMubV92YWx1ZTsK
LSAgICB9Ci0KLSAgICBjb25zdGV4cHIgU3RvcmFnZUludGVnZXIgdmFsdWUoKSBjb25zdCB7IHJl
dHVybiBtX3ZhbHVlOyB9Ci0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgY29uc3RleHByIFBhY2tl
ZEFTQ0lJTG93ZXJDb2RlcyhTdG9yYWdlSW50ZWdlciB2YWx1ZSkKLSAgICAgICAgOiBtX3ZhbHVl
KHZhbHVlKQotICAgIHsKLSAgICB9Ci0KLSAgICBTdG9yYWdlSW50ZWdlciBtX3ZhbHVlIHsgMCB9
OwotfTsKLQogVVNjcmlwdENvZGUgc2NyaXB0TmFtZVRvQ29kZShTdHJpbmdWaWV3IHNjcmlwdE5h
bWUpCiB7CiAgICAgLy8gVGhpcyBnZW5lcmFsbHkgbWFwcyBhbiBJU08gMTU5MjQgc2NyaXB0IGNv
ZGUgdG8gaXRzIFVTY3JpcHRDb2RlLCBidXQgY2VydGFpbiBmYW1pbGllcyBvZiBzY3JpcHQgY29k
ZXMgYXJlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKaW5kZXggZGE4MjgyMTVhODAx
MzZmYmM5MjI2ZjQ3ZjhiMDNlNmM2MGZiZGJmMi4uNTI0NGJjMjRiYzdiYzRjODAxNjM0MjIwNjk0
ZmZmZmY5MTc2Nzg5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5h
bHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcApAQCAtNTc1
MSwxOSArNTc1MSwzOSBAQCBib29sIEludGVybmFsczo6Y2Fwc0xvY2tJc09uKCkKICAgICByZXR1
cm4gV2ViQ29yZTo6UGxhdGZvcm1LZXlib2FyZEV2ZW50OjpjdXJyZW50Q2Fwc0xvY2tTdGF0ZSgp
OwogfQogCi1PcHRpb25hbDxIRVZDUGFyYW1ldGVyU2V0PiBJbnRlcm5hbHM6OnBhcnNlSEVWQ0Nv
ZGVjUGFyYW1ldGVycyhjb25zdCBTdHJpbmcmIGNvZGVjU3RyaW5nKQorYXV0byBJbnRlcm5hbHM6
OnBhcnNlSEVWQ0NvZGVjUGFyYW1ldGVycyhTdHJpbmdWaWV3IHN0cmluZykgLT4gT3B0aW9uYWw8
SEVWQ1BhcmFtZXRlclNldD4KIHsKLSAgICByZXR1cm4gV2ViQ29yZTo6cGFyc2VIRVZDQ29kZWNQ
YXJhbWV0ZXJzKGNvZGVjU3RyaW5nKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6cGFyc2VIRVZDQ29k
ZWNQYXJhbWV0ZXJzKHN0cmluZyk7CiB9CiAKLU9wdGlvbmFsPERvVmlQYXJhbWV0ZXJTZXQ+IElu
dGVybmFsczo6cGFyc2VEb1ZpQ29kZWNQYXJhbWV0ZXJzKGNvbnN0IFN0cmluZyYgY29kZWNTdHJp
bmcpCithdXRvIEludGVybmFsczo6cGFyc2VEb1ZpQ29kZWNQYXJhbWV0ZXJzKFN0cmluZ1ZpZXcg
c3RyaW5nKSAtPiBPcHRpb25hbDxEb1ZpUGFyYW1ldGVyU2V0PgogewotICAgIHJldHVybiBXZWJD
b3JlOjpwYXJzZURvVmlDb2RlY1BhcmFtZXRlcnMoY29kZWNTdHJpbmcpOworICAgIGF1dG8gcGFy
c2VSZXN1bHQgPSBXZWJDb3JlOjpwYXJzZURvVmlDb2RlY1BhcmFtZXRlcnMoc3RyaW5nKTsKKyAg
ICBpZiAoIXBhcnNlUmVzdWx0KQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIERv
VmlQYXJhbWV0ZXJTZXQgY29udmVydGVkUmVzdWx0OworICAgIHN3aXRjaCAocGFyc2VSZXN1bHQt
PmNvZGVjKSB7CisgICAgY2FzZSBEb1ZpUGFyYW1ldGVyczo6Q29kZWM6OkFWQzE6CisgICAgICAg
IGNvbnZlcnRlZFJlc3VsdC5jb2RlY05hbWUgPSAiYXZjMSJfczsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBEb1ZpUGFyYW1ldGVyczo6Q29kZWM6OkFWQzM6CisgICAgICAgIGNvbnZlcnRlZFJl
c3VsdC5jb2RlY05hbWUgPSAiYXZjMyJfczsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBEb1Zp
UGFyYW1ldGVyczo6Q29kZWM6OkhFVjE6CisgICAgICAgIGNvbnZlcnRlZFJlc3VsdC5jb2RlY05h
bWUgPSAiaGV2MSJfczsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBEb1ZpUGFyYW1ldGVyczo6
Q29kZWM6OkhWQzE6CisgICAgICAgIGNvbnZlcnRlZFJlc3VsdC5jb2RlY05hbWUgPSAiaHZjMSJf
czsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNvbnZlcnRlZFJlc3VsdC5iaXRzdHJlYW1Q
cm9maWxlSUQgPSBwYXJzZVJlc3VsdC0+Yml0c3RyZWFtUHJvZmlsZUlEOworICAgIGNvbnZlcnRl
ZFJlc3VsdC5iaXRzdHJlYW1MZXZlbElEID0gcGFyc2VSZXN1bHQtPmJpdHN0cmVhbUxldmVsSUQ7
CisgICAgcmV0dXJuIGNvbnZlcnRlZFJlc3VsdDsKIH0KIAotT3B0aW9uYWw8VlBDb2RlY0NvbmZp
Z3VyYXRpb25SZWNvcmQ+IEludGVybmFsczo6cGFyc2VWUENvZGVjUGFyYW1ldGVycyhjb25zdCBT
dHJpbmcmIGNvZGVjU3RyaW5nKQorT3B0aW9uYWw8VlBDb2RlY0NvbmZpZ3VyYXRpb25SZWNvcmQ+
IEludGVybmFsczo6cGFyc2VWUENvZGVjUGFyYW1ldGVycyhTdHJpbmdWaWV3IHN0cmluZykKIHsK
LSAgICByZXR1cm4gV2ViQ29yZTo6cGFyc2VWUENvZGVjUGFyYW1ldGVycyhjb2RlY1N0cmluZyk7
CisgICAgcmV0dXJuIFdlYkNvcmU6OnBhcnNlVlBDb2RlY1BhcmFtZXRlcnMoc3RyaW5nKTsKIH0K
IAogYXV0byBJbnRlcm5hbHM6OmdldENvb2tpZXMoKSBjb25zdCAtPiBWZWN0b3I8Q29va2llRGF0
YT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmggYi9Tb3Vy
Y2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oCmluZGV4IGUyMDIzNGI3YmE0ZjU3ZTNlNDk0
MjlmZjBkMjU4NjEzMGJmZDMyNGQuLmY5YTE4N2JkMzM5ZDQ4ZTMyYjg1ZTc1NWY4NzBjNzVlMjg4
MTExZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaApAQCAtOTcxLDE0ICs5NzEsMTgg
QEAgcHVibGljOgogCiAgICAgYm9vbCBjYXBzTG9ja0lzT24oKTsKICAgICAgICAgCi0gICAgdXNp
bmcgSEVWQ1BhcmFtZXRlclNldCA9IFdlYkNvcmU6OkhFVkNQYXJhbWV0ZXJTZXQ7Ci0gICAgT3B0
aW9uYWw8SEVWQ1BhcmFtZXRlclNldD4gcGFyc2VIRVZDQ29kZWNQYXJhbWV0ZXJzKGNvbnN0IFN0
cmluZyYgY29kZWNTdHJpbmcpOworICAgIHVzaW5nIEhFVkNQYXJhbWV0ZXJTZXQgPSBXZWJDb3Jl
OjpIRVZDUGFyYW1ldGVyczsKKyAgICBPcHRpb25hbDxIRVZDUGFyYW1ldGVyU2V0PiBwYXJzZUhF
VkNDb2RlY1BhcmFtZXRlcnMoU3RyaW5nVmlldyk7CiAKLSAgICB1c2luZyBEb1ZpUGFyYW1ldGVy
U2V0ID0gV2ViQ29yZTo6RG9WaVBhcmFtZXRlclNldDsKLSAgICBPcHRpb25hbDxEb1ZpUGFyYW1l
dGVyU2V0PiBwYXJzZURvVmlDb2RlY1BhcmFtZXRlcnMoY29uc3QgU3RyaW5nJiBjb2RlY1N0cmlu
Zyk7CisgICAgc3RydWN0IERvVmlQYXJhbWV0ZXJTZXQgeworICAgICAgICBTdHJpbmcgY29kZWNO
YW1lOworICAgICAgICB1aW50MTZfdCBiaXRzdHJlYW1Qcm9maWxlSUQ7CisgICAgICAgIHVpbnQx
Nl90IGJpdHN0cmVhbUxldmVsSUQ7CisgICAgfTsKKyAgICBPcHRpb25hbDxEb1ZpUGFyYW1ldGVy
U2V0PiBwYXJzZURvVmlDb2RlY1BhcmFtZXRlcnMoU3RyaW5nVmlldyk7CiAKICAgICB1c2luZyBW
UENvZGVjQ29uZmlndXJhdGlvblJlY29yZCA9IFdlYkNvcmU6OlZQQ29kZWNDb25maWd1cmF0aW9u
UmVjb3JkOwotICAgIE9wdGlvbmFsPFZQQ29kZWNDb25maWd1cmF0aW9uUmVjb3JkPiBwYXJzZVZQ
Q29kZWNQYXJhbWV0ZXJzKGNvbnN0IFN0cmluZyYgY29kZWNTdHJpbmcpOworICAgIE9wdGlvbmFs
PFZQQ29kZWNDb25maWd1cmF0aW9uUmVjb3JkPiBwYXJzZVZQQ29kZWNQYXJhbWV0ZXJzKFN0cmlu
Z1ZpZXcpOwogCiAgICAgc3RydWN0IENvb2tpZURhdGEgewogICAgICAgICBTdHJpbmcgbmFtZTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbCBiL1NvdXJj
ZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbAppbmRleCAwMzVhMjY4ZDMyZjdmZmI0YjRm
ZjBmZTQ5MGI5ZWNkM2Q1NzNkZTE2Li4yYmZkNmNiOTI4ODhjNmI1OTZkNmRlMTlhNTI2MjgxZWEz
NDdjZDI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwK
KysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsCkBAIC0xNzEsMTMgKzE3
MSwxMCBAQCBlbnVtIFRyZWVUeXBlIHsKICAgICBFeHBvcnRNYWNybz1XRUJDT1JFX1RFU1RTVVBQ
T1JUX0VYUE9SVCwKICAgICBKU0dlbmVyYXRlVG9KU09iamVjdCwKIF0gZGljdGlvbmFyeSBIRVZD
UGFyYW1ldGVyU2V0IHsKLSAgICBET01TdHJpbmcgY29kZWNOYW1lOwogICAgIHVuc2lnbmVkIHNo
b3J0IGdlbmVyYWxQcm9maWxlU3BhY2U7CiAgICAgdW5zaWduZWQgc2hvcnQgZ2VuZXJhbFByb2Zp
bGVJREM7CiAgICAgdW5zaWduZWQgbG9uZyBnZW5lcmFsUHJvZmlsZUNvbXBhdGliaWxpdHlGbGFn
czsKLSAgICBib29sZWFuIGdlbmVyYWxUaWVyRmxhZzsKICAgICB1bnNpZ25lZCBzaG9ydCBnZW5l
cmFsTGV2ZWxJREM7Ci0gICAgc2VxdWVuY2U8dW5zaWduZWQgc2hvcnQ+IGNvbnN0cmFpbnRGbGFn
czsKIH07CiAKIFsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1JlbW90ZUxheWVy
VHJlZS9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclRyYW5zYWN0aW9uLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvU2hhcmVkL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclRy
YW5zYWN0aW9uLmNwcAppbmRleCBlZjU2ZTNhOGNlYmQzNzY5NTc1ODkyYmIxNDljY2JiY2EwNDdm
M2UyLi5kZWU2MGUxNzgwODE5YzZkMDIxMThlOTg0OGI0YjdiYmM3N2NhZTk0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9SZW1vdGVMYXllclRyZWUvUmVtb3RlU2Nyb2xsaW5nQ29v
cmRpbmF0b3JUcmFuc2FjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvUmVtb3Rl
TGF5ZXJUcmVlL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yVHJhbnNhY3Rpb24uY3BwCkBAIC00
MSw3ICs0MSw2IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9TY3JvbGxpbmdTdGF0ZVBvc2l0aW9uZWRO
b2RlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TY3JvbGxpbmdTdGF0ZVN0aWNreU5vZGUuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL1Njcm9sbGluZ1N0YXRlVHJlZS5oPgotI2luY2x1ZGUgPHd0Zi9IYXNo
TWFwLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1RleHRTdHJlYW0uaD4KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0
ZURhdGEvV2Vic2l0ZURhdGEuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhL1dl
YnNpdGVEYXRhLmgKaW5kZXggMjc4YWEzYTkyZWQwN2E3YjQyNzkzN2M1YjkwMjdkMThlNTM2YjFk
MC4uNmZmZDQyY2RlZDkwZWFhZGNjNjQ2Y2M0MzAzMTgwMjUzNzRiYWRkNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGEuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YS5oCkBAIC0yNyw3ICsyNyw2
IEBACiAKICNpbmNsdWRlIDxXZWJDb3JlL1JlZ2lzdHJhYmxlRG9tYWluLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9TZWN1cml0eU9yaWdpbkRhdGEuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgog
I2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL09wdGlvblNldC5oPgogI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBi
L0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA2YmRiODhjNmY4NmFmMWJkMjI5YTEwYTEzM2Nl
NjQxZTdhNjNiMzNlLi5mMDUyOTE5NTQyMWYxNzcyYmFlMDU0YjQ4MDRiNWEzNDVhYzYzZmU5IDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjEtMDUtMDQgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBw
bGUuY29tPgorCisgICAgICAgIFN0cmVhbWxpbmUgY29kZWMgcGFyc2luZywgcmVwbGFjaW5nIHVz
ZXMgb2YgSGFzaE1hcCB3aXRoIFNvcnRlZEFycmF5TWFwCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjUzNjgKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIG1lZGlhL2hldmMtY29kZWMtcGFyYW1ldGVycy1l
eHBlY3RlZC50eHQ6IFJlbW92ZSB0ZXN0aW5nIG9mIGdlbmVyYWxUaWVyRmxhZywgd2hpY2ggaXMg
aWdub3JlZAorICAgICAgICBieSBvdXIgYWN0dWFsIG1lZGlhIGNvZGUgYWZ0ZXIgcGFyc2luZy4K
KyAgICAgICAgKiBtZWRpYS9oZXZjLWNvZGVjLXBhcmFtZXRlcnMuaHRtbDogRGl0dG8uCisKIDIw
MjEtMDUtMDQgIEtlbm5ldGggUnVzc2VsbCAgPGtickBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
V2ViS2l0IG11c3QgdHJlYXQgJ3dlYmdsJyBhbmQgJ3dlYmdsMicgYXMgZGlzdGluY3QgY29udGV4
dCB0eXBlcwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvbWVkaWEvaGV2Yy1jb2RlYy1wYXJhbWV0
ZXJzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL21lZGlhL2hldmMtY29kZWMtcGFyYW1ldGVy
cy1leHBlY3RlZC50eHQKaW5kZXggZjZkZWY1ODU5YTllNGY4ZmM3ZDRjODcyN2ZiMzE3OTM2ZmZk
MWVhZS4uMmJiMWZjZTU3NzJkYTVhMGFkZWFiZmE4OTM5NDA2NzFkOGVhOWEwYyAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvbWVkaWEvaGV2Yy1jb2RlYy1wYXJhbWV0ZXJzLWV4cGVjdGVkLnR4dAor
KysgYi9MYXlvdXRUZXN0cy9tZWRpYS9oZXZjLWNvZGVjLXBhcmFtZXRlcnMtZXhwZWN0ZWQudHh0
CkBAIC0xLDggKzEsOCBAQAogRVhQRUNURUQgKGludGVybmFscy5wYXJzZUhFVkNDb2RlY1BhcmFt
ZXRlcnMoImJhZC1wYXJhbWV0ZXIiKSA9PSAnbnVsbCcpIE9LCiBFWFBFQ1RFRCAoaW50ZXJuYWxz
LnBhcnNlSEVWQ0NvZGVjUGFyYW1ldGVycygiaHZjMSIpID09ICdudWxsJykgT0sKLUVYUEVDVEVE
IChpbnRlcm5hbHMucGFyc2VIRVZDQ29kZWNQYXJhbWV0ZXJzKCJoZXYxLjEuNi5MOTMiKSA9PT0g
J3sgMCwgMSwgNiwgZmFsc2UsIDkzIH0nKSBPSwotRVhQRUNURUQgKGludGVybmFscy5wYXJzZUhF
VkNDb2RlY1BhcmFtZXRlcnMoImhldjEuQTQuNDEuSDEyMCIpID09PSAneyAxLCA0LCA2NSwgdHJ1
ZSwgMTIwIH0nKSBPSwotRVhQRUNURUQgKGludGVybmFscy5wYXJzZUhFVkNDb2RlY1BhcmFtZXRl
cnMoImhldjEuQjEuNC5MNjMiKSA9PT0gJ3sgMiwgMSwgNCwgZmFsc2UsIDYzIH0nKSBPSworRVhQ
RUNURUQgKGludGVybmFscy5wYXJzZUhFVkNDb2RlY1BhcmFtZXRlcnMoImhldjEuMS42Lkw5MyIp
ID09PSAneyAwLCAxLCA2LCA5MyB9JykgT0sKK0VYUEVDVEVEIChpbnRlcm5hbHMucGFyc2VIRVZD
Q29kZWNQYXJhbWV0ZXJzKCJoZXYxLkE0LjQxLkgxMjAiKSA9PT0gJ3sgMSwgNCwgNjUsIDEyMCB9
JykgT0sKK0VYUEVDVEVEIChpbnRlcm5hbHMucGFyc2VIRVZDQ29kZWNQYXJhbWV0ZXJzKCJoZXYx
LkIxLjQuTDYzIikgPT09ICd7IDIsIDEsIDQsIDYzIH0nKSBPSwogRVhQRUNURUQgKGludGVybmFs
cy5wYXJzZUhFVkNDb2RlY1BhcmFtZXRlcnMoImhldjEuRDEuNC5MNjMiKSA9PSAnbnVsbCcpIE9L
CiBFWFBFQ1RFRCAoaW50ZXJuYWxzLnBhcnNlSEVWQ0NvZGVjUGFyYW1ldGVycygiaGV2MS5CMS40
Lkw2ODAwMCIpID09ICdudWxsJykgT0sKIEVORCBPRiBURVNUCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9tZWRpYS9oZXZjLWNvZGVjLXBhcmFtZXRlcnMuaHRtbCBiL0xheW91dFRlc3RzL21lZGlh
L2hldmMtY29kZWMtcGFyYW1ldGVycy5odG1sCmluZGV4IDFkZGNkOWNmOWM3MTEwMTc5NjllZTAy
MDcwYWMwOGI2NDc3MmM3ZTYuLjJkN2U1Yzk5Yjg4MDMyM2RjMTExNTNhYjM0ZjM3Yzk4YjAxNTRj
YTAgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL21lZGlhL2hldmMtY29kZWMtcGFyYW1ldGVycy5o
dG1sCisrKyBiL0xheW91dFRlc3RzL21lZGlhL2hldmMtY29kZWMtcGFyYW1ldGVycy5odG1sCkBA
IC00LDIyICs0LDIwIEBACiAgICAgPHNjcmlwdCBzcmM9InZpZGVvLXRlc3QuanMiPjwvc2NyaXB0
PgogICAgIDxzY3JpcHQ+CiAgICAgZnVuY3Rpb24gSEVWQ1BhcmFtZXRlclNldFRvU3RyaW5nKHNl
dCkgewotICAgICAgICByZXR1cm4gYHsgJHtzZXQuZ2VuZXJhbFByb2ZpbGVTcGFjZSB9LCAke3Nl
dC5nZW5lcmFsUHJvZmlsZUlEQyB9LCAke3NldC5nZW5lcmFsUHJvZmlsZUNvbXBhdGliaWxpdHlG
bGFncyB9LCAke3NldC5nZW5lcmFsVGllckZsYWcgfSwgJHtzZXQuZ2VuZXJhbExldmVsSURDIH0g
fWA7CisgICAgICAgIHJldHVybiBgeyAke3NldC5nZW5lcmFsUHJvZmlsZVNwYWNlIH0sICR7c2V0
LmdlbmVyYWxQcm9maWxlSURDIH0sICR7c2V0LmdlbmVyYWxQcm9maWxlQ29tcGF0aWJpbGl0eUZs
YWdzIH0sICR7c2V0LmdlbmVyYWxMZXZlbElEQyB9IH1gOwogICAgIH0KICAgICBmdW5jdGlvbiBp
c0VxdWFsSEVWQ1BhcmFtZXRlclNldChzZXRBLCBzZXRCKSB7CiAgICAgICAgIHJldHVybiBzZXRB
LmdlbmVyYWxQcm9maWxlU3BhY2UgPT09IHNldEIuZ2VuZXJhbFByb2ZpbGVTcGFjZQogICAgICAg
ICAgICAgJiYgc2V0QS5nZW5lcmFsUHJvZmlsZUlEQyA9PT0gc2V0Qi5nZW5lcmFsUHJvZmlsZUlE
QwogICAgICAgICAgICAgJiYgc2V0QS5nZW5lcmFsUHJvZmlsZUNvbXBhdGliaWxpdHlGbGFncyA9
PT0gc2V0Qi5nZW5lcmFsUHJvZmlsZUNvbXBhdGliaWxpdHlGbGFncwotICAgICAgICAgICAgJiYg
c2V0QS5nZW5lcmFsVGllckZsYWcgPT09IHNldEIuZ2VuZXJhbFRpZXJGbGFnCiAgICAgICAgICAg
ICAmJiBzZXRBLmdlbmVyYWxMZXZlbElEQyA9PT0gc2V0Qi5nZW5lcmFsTGV2ZWxJREMKICAgICB9
Ci0gICAgZnVuY3Rpb24gbWFrZUhFVkNQYXJhbWV0ZXJTZXQoZ2VuZXJhbFByb2ZpbGVTcGFjZSwg
Z2VuZXJhbFByb2ZpbGVJREMsIGdlbmVyYWxQcm9maWxlQ29tcGF0aWJpbGl0eUZsYWdzLCBnZW5l
cmFsVGllckZsYWcsIGdlbmVyYWxMZXZlbElEQykKKyAgICBmdW5jdGlvbiBtYWtlSEVWQ1BhcmFt
ZXRlclNldChnZW5lcmFsUHJvZmlsZVNwYWNlLCBnZW5lcmFsUHJvZmlsZUlEQywgZ2VuZXJhbFBy
b2ZpbGVDb21wYXRpYmlsaXR5RmxhZ3MsIGdlbmVyYWxMZXZlbElEQykKICAgICB7CiAgICAgICAg
IHJldHVybiB7CiAgICAgICAgICAgICBnZW5lcmFsUHJvZmlsZVNwYWNlOiBnZW5lcmFsUHJvZmls
ZVNwYWNlLAogICAgICAgICAgICAgZ2VuZXJhbFByb2ZpbGVJREM6IGdlbmVyYWxQcm9maWxlSURD
LAogICAgICAgICAgICAgZ2VuZXJhbFByb2ZpbGVDb21wYXRpYmlsaXR5RmxhZ3M6IGdlbmVyYWxQ
cm9maWxlQ29tcGF0aWJpbGl0eUZsYWdzLAotICAgICAgICAgICAgZ2VuZXJhbFRpZXJGbGFnOiBn
ZW5lcmFsVGllckZsYWcsCiAgICAgICAgICAgICBnZW5lcmFsTGV2ZWxJREM6IGdlbmVyYWxMZXZl
bElEQywKICAgICAgICAgfTsKICAgICB9CkBAIC0zMiw5ICszMCw5IEBACiAgICAgd2luZG93LmFk
ZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBldmVudCA9PiB7CiAgICAgICAgIHRlc3RFeHBlY3RlZCgn
aW50ZXJuYWxzLnBhcnNlSEVWQ0NvZGVjUGFyYW1ldGVycygiYmFkLXBhcmFtZXRlciIpJywgbnVs
bCk7CiAgICAgICAgIHRlc3RFeHBlY3RlZCgnaW50ZXJuYWxzLnBhcnNlSEVWQ0NvZGVjUGFyYW1l
dGVycygiaHZjMSIpJywgbnVsbCk7Ci0gICAgICAgIHRlc3RFeHBlY3RlZEhFVkNQYXJhbWV0ZXJT
ZXQoJ2ludGVybmFscy5wYXJzZUhFVkNDb2RlY1BhcmFtZXRlcnMoImhldjEuMS42Lkw5MyIpJywg
bWFrZUhFVkNQYXJhbWV0ZXJTZXQoMCwgMSwgNiwgZmFsc2UsIDkzKSk7Ci0gICAgICAgIHRlc3RF
eHBlY3RlZEhFVkNQYXJhbWV0ZXJTZXQoJ2ludGVybmFscy5wYXJzZUhFVkNDb2RlY1BhcmFtZXRl
cnMoImhldjEuQTQuNDEuSDEyMCIpJywgbWFrZUhFVkNQYXJhbWV0ZXJTZXQoMSwgNCwgNjUsIHRy
dWUsIDEyMCkpOwotICAgICAgICB0ZXN0RXhwZWN0ZWRIRVZDUGFyYW1ldGVyU2V0KCdpbnRlcm5h
bHMucGFyc2VIRVZDQ29kZWNQYXJhbWV0ZXJzKCJoZXYxLkIxLjQuTDYzIiknLCBtYWtlSEVWQ1Bh
cmFtZXRlclNldCgyLCAxLCA0LCBmYWxzZSwgNjMpKTsKKyAgICAgICAgdGVzdEV4cGVjdGVkSEVW
Q1BhcmFtZXRlclNldCgnaW50ZXJuYWxzLnBhcnNlSEVWQ0NvZGVjUGFyYW1ldGVycygiaGV2MS4x
LjYuTDkzIiknLCBtYWtlSEVWQ1BhcmFtZXRlclNldCgwLCAxLCA2LCA5MykpOworICAgICAgICB0
ZXN0RXhwZWN0ZWRIRVZDUGFyYW1ldGVyU2V0KCdpbnRlcm5hbHMucGFyc2VIRVZDQ29kZWNQYXJh
bWV0ZXJzKCJoZXYxLkE0LjQxLkgxMjAiKScsIG1ha2VIRVZDUGFyYW1ldGVyU2V0KDEsIDQsIDY1
LCAxMjApKTsKKyAgICAgICAgdGVzdEV4cGVjdGVkSEVWQ1BhcmFtZXRlclNldCgnaW50ZXJuYWxz
LnBhcnNlSEVWQ0NvZGVjUGFyYW1ldGVycygiaGV2MS5CMS40Lkw2MyIpJywgbWFrZUhFVkNQYXJh
bWV0ZXJTZXQoMiwgMSwgNCwgNjMpKTsKICAgICAgICAgdGVzdEV4cGVjdGVkKCdpbnRlcm5hbHMu
cGFyc2VIRVZDQ29kZWNQYXJhbWV0ZXJzKCJoZXYxLkQxLjQuTDYzIiknLCBudWxsKTsKICAgICAg
ICAgdGVzdEV4cGVjdGVkKCdpbnRlcm5hbHMucGFyc2VIRVZDQ29kZWNQYXJhbWV0ZXJzKCJoZXYx
LkIxLjQuTDY4MDAwIiknLCBudWxsKTsKICAgICAgICAgZW5kVGVzdCgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>427727</attachid>
            <date>2021-05-04 19:46:00 -0700</date>
            <delta_ts>2021-05-06 09:08:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225368-20210504194559.patch</filename>
            <type>text/plain</type>
            <size>69526</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc2OTk5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDI1Y2Q0NDMxYTVkYWI0ZThhZWJhMDFj
YmZjZTAxYWQzYjY0YzQ4YjQuLjc0ZWYzZDUzYjNmZmI5NDhhOTkyMTgwMzg2NzRmYTNiYjkwNDM3
OWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMjEtMDUtMDQgIERhcmluIEFkbGVyICA8ZGFyaW5A
YXBwbGUuY29tPgorCisgICAgICAgIFN0cmVhbWxpbmUgY29kZWMgcGFyc2luZywgcmVwbGFjaW5n
IHVzZXMgb2YgSGFzaE1hcCB3aXRoIFNvcnRlZEFycmF5TWFwCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjUzNjgKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHd0Zi9Tb3J0ZWRBcnJheU1hcC5oOiBNb3Zl
ZCBQYWNrZWRBU0NJSUxvd2VyQ29kZXMgaGVyZSBmb3IgcmV1c2UuCisgICAgICAgIFNsaWdodGx5
IHR3ZWFrZWQgQ29tcGFyYWJsZUFTQ0lJU3Vic2V0TGl0ZXJhbCB0byBtYXRjaCBiZXR0ZXIuCisK
IDIwMjEtMDUtMDQgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4K
IAogICAgICAgICBEb24ndCBpdGVyYXRlIE5ldHdvcmtQcm9jZXNzUHJveHk6Om1fd2Vic2l0ZURh
dGFTdG9yZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwppbmRleCA3ZmRlYTdmZDA5MjQ1ZTBkN2JhNDMxZmJlNzI1YThkNWY5
MTEwNjcwLi41Y2EyODRlOTFhODAwM2Y1MGFkYjEwNjJjOGQ2YWFlZDMxYmRkMWVhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMTA4IEBACisyMDIxLTA1LTA0ICBEYXJpbiBBZGxlciAgPGRhcmluQGFw
cGxlLmNvbT4KKworICAgICAgICBTdHJlYW1saW5lIGNvZGVjIHBhcnNpbmcsIHJlcGxhY2luZyB1
c2VzIG9mIEhhc2hNYXAgd2l0aCBTb3J0ZWRBcnJheU1hcAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1MzY4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9Db250ZW50VHlwZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDb250ZW50VHlwZTo6cGFyYW1ldGVyIGNvbnN0KTogVXNlIGVhcmx5
IHJldHVybiBpbnN0ZWFkIG9mIG5lc3RpbmcuCisgICAgICAgIFN0cmlwIEhUTUwgc3BhY2VzLCBu
b3QgYWxsIHdoaXRlc3BhY2UsIGFuZCBkbyBpdCBvbmx5IG9uY2UgcmF0aGVyIHRoYW4gdHdpY2Uu
CisgICAgICAgIEZpeGVkIGEgc21hbGwgYnVnIHdoZXJlIHdlIHNlYXJjaCBmb3IgdGhlIHNlY29u
ZCBxdW90YXRpb24gbWFyayBpbiBhIHdheSB0aGF0CisgICAgICAgIGNvdWxkIGZpbmQgdGhlIHNh
bWUgcXVvdGF0aW9uIG1hcmsgdHdpY2UgaWYgdGhlcmUgaXMgYSBzcGFjZSBiZWZvcmUgdGhlIGZp
cnN0CisgICAgICAgIG9uZS4gQWRkZWQgRklYTUUgY29tbWVudHMgYWJvdXQgYSBmZXcgb2J2aW91
cyBwcm9ibGVtcyBpbiB0aGUgcGFyc2luZyBhbGdvcml0aG0uCisgICAgICAgIEltcHJvdmVkIGVm
ZmljaWVuY3kgYnkgdXNpbmcgU3RyaW5nVmlldywgc2F2aW5nIHRoZSBhbGxvY2F0aW9uIG9mIG9u
ZSB0ZW1wb3JhcnkKKyAgICAgICAgU3RyaW5nSW1wbCBpbiB0aGUgY2FzZSB3aGVyZSB3ZSBoYXZl
IHNvbWUgSFRNTCBzcGFjZXMgdG8gc3RyaXAuCisgICAgICAgIChXZWJDb3JlOjpDb250ZW50VHlw
ZTo6Y29udGFpbmVyVHlwZSBjb25zdCk6IFNpbXBsaWZpZWQgdGhlIGltcGxlbWVtZW50YXRpb24K
KyAgICAgICAgYnkgdGFraW5nIGFkdmFudGFnZSBvZiB0aGUgZmFjdCB0aGF0IG91ciBub3RGb3Vu
ZCB2YWx1ZSBpcyBkZXNpZ25lZCB0byBiZSB1c2VkCisgICAgICAgIGFzIGFuIGFyZ3VtZW50IHRv
IGZ1bmN0aW9ucyBsaWtlIFN0cmluZzo6bGVmdCwgdGVsbGluZyB0aGVtIHRvIHJldHVybiB0aGUK
KyAgICAgICAgZW50aXJlIHN0cmluZy4gU3RyaXAgSFRNTCBzcGFjZXMsIG5vdCBhbGwgd2hpdGVz
cGFjZS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0hFVkNVdGlsaXRpZXMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6cGFyc2VIRVZDQ29kZWNQYXJhbWV0ZXJzKTogVGFrZSBhIFN0cmlu
Z1ZpZXcgaW5zdGVhZCBvZiBhIFN0cmluZworICAgICAgICBmb3IgZ3JlYXRlciBmbGV4aWJpbGl0
eSBhbmQgZWZmaWNpZW5jeS4gRG9uJ3Qgc3RvcmUgY29kZWNOYW1lLCB3aGljaCBpcworICAgICAg
ICBuZXZlciB1c2VkIGFmdGVyIHZlcmlmeWluZyB0aGF0IGl0IGlzIGEgbGVnYWwgdmFsdWUgaGVy
ZS4gRG9uJ3Qgc3RvcmUgdGhlCisgICAgICAgIGdlbmVyYWxUaWVyRmxhZywgd2hpY2ggaXMgbmV2
ZXIgdXNlZCBhZnRlciB2ZXJpZnlpbmcgdGhhdCBpdCBpcyBhIGxlZ2FsCisgICAgICAgIHZhbHVl
IGhlcmUuIERvbid0IHN0b3JlIHRoZSBjb25zdHJhaW50IGZsYWdzLCB3aGljaCBhcmUgbmV2ZXIg
dXNlZCBhZnRlcgorICAgICAgICB2ZXJpZnlpbmcgdGhhdCB0aGV5IGFyZSBsZWdhbCB2YWx1ZXMg
aGVyZS4KKyAgICAgICAgKFdlYkNvcmU6Om1ha2VPcHRpb25hbEZyb21Qb2ludGVyKTogQWRkZWQg
dG8gbWFrZSBjb2RlIGJlbG93IGNsZWFuZXIuCisgICAgICAgIChXZWJDb3JlOjpwYXJzZURvVmlD
b2RlY1R5cGUpOiBSZW5hbWVkIGZyb20gY29kZWNTdHJpbmdGb3JEb1ZpQ29kZWNUeXBlCisgICAg
ICAgIHNpbmNlIGl0IG5vdyByZXR1cm5zIGFuIGVudW1lcmF0aW9uIHZhbHVlIGluc3RlYWQgb2Yg
YSBzdHJpbmcuIEFsc28KKyAgICAgICAgdGFrZSBhIFN0cmluZ1ZpZXcgaW5zdGVhZCBvZiBhIFN0
cmluZyBmb3IgZ3JlYXRlciBmbGV4aWJpbGl0eSBhbmQgZWZmaWNpZW5jeS4KKyAgICAgICAgQWxz
byB1c2UgYSBTb3J0ZWRBcnJheU1hcCBpbnN0ZWFkIG9mIGEgTWVtb3J5Q29tcGFjdExvb2t1cE9u
bHlSb2Jpbkhvb2RIYXNoTWFwLgorICAgICAgICAoV2ViQ29yZTo6cHJvZmlsZUlERm9yQWxwaGFi
ZXRpY0RvVmlQcm9maWxlKTogVGFrZSBhIFN0cmluZ1ZpZXcgaW5zdGVhZCBvZgorICAgICAgICBh
IFN0cmluZyBmb3IgZ3JlYXRlciBmbGV4aWJpbGl0eSBhbmQgZWZmaWNpZW5jeS4gVXNlIGEgU29y
dGVkQXJyYXlNYXAgaW5zdGVhZAorICAgICAgICBvZiBhIE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5
Um9iaW5Ib29kSGFzaE1hcC4KKyAgICAgICAgKFdlYkNvcmU6OmlzVmFsaWRQcm9maWxlSURGb3JD
b2RlYyk6IFRha2UgYSBjb2RlYyBlbnVtZXJhdGlvbiB2YWx1ZSBwYXJhbWV0ZXIKKyAgICAgICAg
aW5zdGVhZCBvZiBhIHN0cmluZy4KKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlRG9WaUNvZGVjUGFy
YW1ldGVycyk6IFRha2UgYSBTdHJpbmdWaWV3IGluc3RlYWQgb2YgYSBTdHJpbmcKKyAgICAgICAg
Zm9yIGdyZWF0ZXIgZmxleGliaWxpdHkgYW5kIGVmZmljaWVuY3kuIFN0b3JlIHRoZSBjb2RlYyBh
cyBhbiBlbnVtZXJhdGlvbgorICAgICAgICBpbnN0ZWFkIG9mIGEgU3RyaW5nLiBEb24ndCBjcmVh
dGUgYSB0ZW1wb3JhcnkgU3RyaW5nIGp1c3Qgc28gd2UgY2FuIGNhbGwgdGhlCisgICAgICAgIHBy
b2ZpbGVJREZvckFscGhhYmV0aWNEb1ZpUHJvZmlsZSBmdW5jdGlvbi4KKworICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL0hFVkNVdGlsaXRpZXMuaDogUmVuYW1lZCBIRVZDUGFyYW1ldGVyU2V0
IGFuZAorICAgICAgICBEb1ZpUGFyYW1ldGVyU2V0IHRvIEhFVkNQYXJhbWV0ZXJzIGFuZCBEb1Zp
UGFyYW1ldGVycy4gVGhlIHdvcmQgInNldCIgaXMgbm90CisgICAgICAgIGhlbHBmdWwgaW4gdGhl
c2UgbmFtZXMuIFJlbW92ZWQgY29kZWNOYW1lLCBnZW5lcmFsVGllckZsYWcsIGFuZCBjb25zdHJh
aW50RmxhZ3MKKyAgICAgICAgZnJvbSBIRVZDUGFyYW1ldGVyU2V0LiBDaGFuZ2VkIHRoZSBwYXJz
ZSBmdW5jdGlvbnMgdG8gdGFrZSBTdHJpbmdWaWV3IGluc3RlYWQKKyAgICAgICAgb2YgU3RyaW5n
LiBSZXBsYWNlZCB0aGUgc3RyaW5nIGNvZGVjTmFtZSBpbiBEb1ZpUGFyYW1ldGVyU2V0IHdpdGgg
YW4gZW51bWVyYXRpb24KKyAgICAgICAgc2luY2UgdGhlcmUgYXJlIG9ubHkgYSBmZXcgdmFsaWQg
dmFsdWVzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSEVWQ1V0aWxpdGll
c0NvY29hLmg6IFVzZSBPcHRpb25hbCByZXR1cm4gdmFsdWUKKyAgICAgICAgaW5zdGVhZCBvZiBh
IGJvb2wgYW5kIGFuIG91dCBhcmd1bWVudC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NvY29hL0hFVkNVdGlsaXRpZXNDb2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6OnZhbGlkYXRl
SEVWQ1BhcmFtZXRlcnMpOiBVcGRhdGVkIHRvIHJldHVybiBPcHRpb25hbC4KKyAgICAgICAgKFdl
YkNvcmU6OmNvZGVjVHlwZSk6IFVwZGF0ZWQgdG8gdGFrZSBhbiBlbnVtZXJhdGlvbiB2YWx1ZSBh
bmQgbm8gbG9uZ2VyCisgICAgICAgIG5lZWQgdG8gcmV0dXJuIGFuIG9wdGlvbmFsLiBBbHNvIHJl
bmFtZWQgZnJvbSBjb2RlY1R5cGVGb3JEb1ZpQ29kZWNTdHJpbmcKKyAgICAgICAgc2luY2UgdGhl
IHR5cGUgbm93IG1ha2VzIHRoaXMgY2xlYXIgd2l0aG91dCBhIGxvbmcgZnVuY3Rpb24gbmFtZS4K
KyAgICAgICAgKFdlYkNvcmU6OnBhcnNlU3RyaW5nQXJyYXlGcm9tRGljdGlvbmFyeVRvVUludDE2
VmVjdG9yKTogUmVuYW1lZCBmcm9tCisgICAgICAgIENGU3RyaW5nQXJyYXlUb051bWJlclZlY3Rv
ciwgYW5kIG1vdmVkIHRoZSBkaWN0aW9uYXJ5IGxvb2t1cCBpbiBoZXJlLgorICAgICAgICBUaGUg
b2xkIG5hbWUgd2FzIGEgbGl0dGxlIHZhZ3VlOyAiTnVtYmVyVmVjdG9yIiBkb2Vzbid0IHNheSAx
Ni1iaXQgdW5zaWduZWQuCisgICAgICAgIFNpbXBsaWZpZWQgY29kZSBieSB1c2luZyBhbiBPYmpl
Y3RpdmUtQyBmb3IgbG9vcCBpbnN0ZWFkIG9mIGEgYmxvY2sgYW5kCisgICAgICAgIGVudW1lcmF0
aW9uLiBUaGlzIGN1dCB0aGUgc2l6ZSBvZiB0aGUgZnVuY3Rpb24gZG93biBxdWl0ZSBhIGJpdC4K
KyAgICAgICAgKFdlYkNvcmU6OnZhbGlkYXRlRG9WaVBhcmFtZXRlcnMpOiBVcGRhdGVkIHRvIHJl
dHVybiBPcHRpb25hbC4gQWxzbworICAgICAgICByZWZhY3RvcmVkIHRvIHVzZSB0aGUgaW1ycG92
ZWQgaGVscGVyIGZ1bmN0aW9ucyBhYm92ZS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NvY29hL01lZGlhRW5naW5lQ29uZmlndXJhdGlvbkZhY3RvcnlDb2NvYS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjp2aWRlb0NvZGVjVHlwZUZyb21SRkM0MjgxVHlwZSk6IFRha2UgYSBTdHJpbmdW
aWV3IGluc3RlYWQgb2YgYSBTdHJpbmcKKyAgICAgICAgZm9yIGdyZWF0ZXIgZmxleGliaWxpdHkg
YW5kIGVmZmljaWVuY3kuCisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlTWVkaWFDYXBhYmlsaXRp
ZXNJbmZvKTogRmFjdG9yZWQgb3V0IHRoaXMgaGVscGVyIGZ1bmN0aW9uCisgICAgICAgIHNvIHdl
IGRvbid0IGhhdmUgc3VjaCBjb21wbGljYXRlZCBjYWxsYmFjayBsb2dpYy4gUmVmYWN0b3JlZCB0
byB1c2UgdGhlIG5ldworICAgICAgICB2ZXJzaW9ucyBvZiB2YWxpZGF0ZUhFVkNQYXJhbWV0ZXJz
LCB2YWxpZGF0ZURvVmlQYXJhbWV0ZXJzLCBhbmQKKyAgICAgICAgdmFsaWRhdGVWUFBhcmFtZXRl
cnMuCisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVNZWRpYVBsYXllckRlY29kaW5nQ29uZmlndXJh
dGlvbkNvY29hKTogTW92ZWQgbW9zdCBvZiB0aGUKKyAgICAgICAgY29kZSBpbnRvIGNvbXB1dGVN
ZWRpYUNhcGFiaWxpdGllc0luZm87IHRoaXMgbW9zdGx5IGRlYWxzIHdpdGggdGhlIGNhbGxiYWNr
LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvVlA5VXRpbGl0aWVzQ29jb2Eu
aDogUmVtb3ZlZCBleHRyYW5lb3VzIHVzZSBvZiBleHRlcm4uCisgICAgICAgIEFkZGVkIGNvbnN0
IGZvciBpbnB1dC1vbmx5IHJlZmVyZW5jZSBhcmd1bWVudHMuIENoYW5nZWQgdmFsaWRhdGVWUFBh
cmFtZXRlcnMgdG8KKyAgICAgICAgcmV0dXJuIE9wdGlvbmFsIGluc3RlYWQgb2YgYSBib29sIHdp
dGggYW4gb3V0IGFyZ3VtZW50LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
VlA5VXRpbGl0aWVzQ29jb2EubW06CisgICAgICAgIChXZWJDb3JlOjppc1ZQOUNvZGVjQ29uZmln
dXJhdGlvblJlY29yZFN1cHBvcnRlZCk6IEFkZGVkIGNvbnN0LgorICAgICAgICAoV2ViQ29yZTo6
aXNWUDhDb2RlY0NvbmZpZ3VyYXRpb25SZWNvcmRTdXBwb3J0ZWQpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OmlzVlBDb2RlY0NvbmZpZ3VyYXRpb25SZWNvcmRTdXBwb3J0ZWQpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OnZhbGlkYXRlVlBQYXJhbWV0ZXJzKTogUmVmYWN0b3JlZCB0byBy
ZXR1cm4gT3B0aW9uYWwuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0hUVFBIZWFkZXJN
YXAuaDogUmVtb3ZlZCB1bm5lZWRlZCBpbmNsdWRlcy4KKworICAgICAgICAqIHBsYXRmb3JtL3Rl
eHQvTG9jYWxlVG9TY3JpcHRNYXBwaW5nLmNwcDogTW92ZWQgUGFja2VkQVNDSUlMb3dlckNvZGVz
IGZyb20KKyAgICAgICAgaGVyZSBpbnRvIHRoZSBTb3J0ZWRBcnJheU1hcC5oIGhlYWRlci4KKwor
ICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkludGVy
bmFsczo6cGFyc2VIRVZDQ29kZWNQYXJhbWV0ZXJzKTogVHdlYWtlZCBzaW5jZSBIRVZDUGFyYW1l
dGVyU2V0CisgICAgICAgIGlzIG5vdyBvbmx5IHRoZSBjb3JyZWN0IG5hbWUgaGVyZSBpbiB0aGUg
SW50ZXJuYWxzIGNsYXNzLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpwYXJzZURvVmlD
b2RlY1BhcmFtZXRlcnMpOiBEaXR0by4gQWxzbyBhZGRlZCBjb2RlIHRvCisgICAgICAgIGV4cG9z
ZSB0aGUgY29kZWMgZW51bWVyYXRpb24gYXMgYSBzdHJpbmcuIFRoaXMgaXMgbm93IGEgdGVzdGlu
Zy1vbmx5IHRoaW5nLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpwYXJzZVZQQ29kZWNQ
YXJhbWV0ZXJzKTogRGl0dG8uCisKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5oOiBUd2Vh
a2VkIHRoZSBQYXJhbWV0ZXJTZXQgdHlwZXMgc2luY2UgdGhleSBub3cgZG9uJ3QKKyAgICAgICAg
ZXhhY3RseSBtYXRjaCB0aGUgc3RydWN0dXJlcyB1c2VkIGluIHRoZSByZWFsIGNvZGUuCisKKyAg
ICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5pZGw6IFJlbW92ZWQgY29kZWNOYW1lLCBnZW5lcmFs
VGllckZsYWcsIGFuZAorICAgICAgICBjb25zdHJhaW50RmxhZ3MgZnJvbSBIRVZDUGFyYW1ldGVy
U2V0LiBOZWl0aGVyIGNvZGVjTmFtZSBub3IgY29uc3RyYWludEZsYWdzCisgICAgICAgIHdhcyB1
c2VkIGluIGFueSB0ZXN0LiBBbmQgdGhlIGdlbmVyYWxUaWVyRmxhZyB0ZXN0IHdhcyBzb21ldGhp
bmcgd2UgY2FuCisgICAgICAgIGRvIHdpdGhvdXQ7IHRoZSBwYXJzZWQgdmFsdWUgaXNuJ3QgYWN0
dWFsbHkgdXNlZCBpbiBhbnkgV2ViS2l0IGNvZGUuCisKIDIwMjEtMDUtMDQgIEtlbm5ldGggUnVz
c2VsbCAgPGtickBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViS2l0IG11c3QgdHJlYXQgJ3dl
YmdsJyBhbmQgJ3dlYmdsMicgYXMgZGlzdGluY3QgY29udGV4dCB0eXBlcwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA3
YWE2MDgzOTEwOWNlZjNjMjllNmEyYTk4OWIyOGU5ODA0N2VkYmUxLi4xZjY2NWE2YzY2Yzk2OTJh
MThhN2MxYjM0MDFiMDNkMjVhZmUwYTQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDIx
LTA1LTA0ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBTdHJlYW1s
aW5lIGNvZGVjIHBhcnNpbmcsIHJlcGxhY2luZyB1c2VzIG9mIEhhc2hNYXAgd2l0aCBTb3J0ZWRB
cnJheU1hcAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjI1MzY4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBTaGFyZWQvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yVHJhbnNh
Y3Rpb24uY3BwOgorICAgICAgICBSZW1vdmVkIHVubmVlZGVkIGluY2x1ZGUuCisgICAgICAgICog
U2hhcmVkL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhLmg6IERpdHRvLgorCiAyMDIxLTA1LTA0ICBK
aWV3ZW4gVGFuICA8amlld2VuX3RhbkBhcHBsZS5jb20+CiAKICAgICAgICAgUENNOiBGaW5kIGEg
d2F5IHRvIHZhbGlkYXRlIHNvdXJjZV9zZWNyZXRfdG9rZW4gYW5kIHNvdXJjZV9zZWNyZXRfdG9r
ZW5fc2lnbmF0dXJlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9Tb3J0ZWRBcnJheU1hcC5o
IGIvU291cmNlL1dURi93dGYvU29ydGVkQXJyYXlNYXAuaAppbmRleCAwM2Q3MGJkNDk0MDI5NmIx
YzM3YjUxZTkxMzUyZTFiOTU2M2VkN2U3Li5mMDdlYTI2ZTZlODM5MzI3Y2I3ZWViMzA0OTVmYWZh
N2ZlNWRhOTUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9Tb3J0ZWRBcnJheU1hcC5oCisr
KyBiL1NvdXJjZS9XVEYvd3RmL1NvcnRlZEFycmF5TWFwLmgKQEAgLTgxLDcgKzgxLDcgQEAgZW51
bSBjbGFzcyBBU0NJSVN1YnNldCB7IEFsbCwgTm9VcHBlcmNhc2VMZXR0ZXJzLCBOb1VwcGVyY2Fz
ZUxldHRlcnNPcHRpbWl6ZWQgfTsKIAogdGVtcGxhdGU8QVNDSUlTdWJzZXQ+IHN0cnVjdCBDb21w
YXJhYmxlQVNDSUlTdWJzZXRMaXRlcmFsIHsKICAgICBBU0NJSUxpdGVyYWwgbGl0ZXJhbDsKLSAg
ICB0ZW1wbGF0ZTxzdGQ6OnNpemVfdCBzaXplPiBjb25zdGV4cHIgQ29tcGFyYWJsZUFTQ0lJU3Vi
c2V0TGl0ZXJhbChjb25zdCBjaGFyICgmY2hhcmFjdGVycylbc2l6ZV0pOworICAgIHRlbXBsYXRl
PHVuc2lnbmVkIHNpemU+IGNvbnN0ZXhwciBDb21wYXJhYmxlQVNDSUlTdWJzZXRMaXRlcmFsKGNv
bnN0IGNoYXIgKCZjaGFyYWN0ZXJzKVtzaXplXSk7CiAgICAgc3RhdGljIE9wdGlvbmFsPENvbXBh
cmFibGVTdHJpbmdWaWV3PiBwYXJzZShTdHJpbmdWaWV3IHN0cmluZykgeyByZXR1cm4geyB7IHN0
cmluZyB9IH07IH0KIH07CiAKQEAgLTEwMyw3ICsxMDMsMjMgQEAgYm9vbCBvcGVyYXRvcjwoQ29t
cGFyYWJsZUNhc2VGb2xkaW5nQVNDSUlMaXRlcmFsLCBDb21wYXJhYmxlU3RyaW5nVmlldyk7CiBi
b29sIG9wZXJhdG9yPChDb21wYXJhYmxlTGV0dGVyc0xpdGVyYWwsIENvbXBhcmFibGVTdHJpbmdW
aWV3KTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgT3RoZXJUeXBlPiBib29sIG9wZXJhdG9yPT0oT3Ro
ZXJUeXBlLCBDb21wYXJhYmxlU3RyaW5nVmlldyk7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBPdGhlclR5
cGU+IGJvb2wgb3BlcmF0b3IhPShDb21wYXJhYmxlU3RyaW5nVmlldywgT3RoZXJUeXBlKTsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgU3RvcmFnZUludGVnZXI+IGNsYXNzIFBhY2tlZEFTQ0lJTG93ZXJD
b2RlcyB7CitwdWJsaWM6CisgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3Vuc2lnbmVkX3Y8U3Rv
cmFnZUludGVnZXI+KTsKKworICAgIHRlbXBsYXRlPHVuc2lnbmVkIHNpemU+IGNvbnN0ZXhwciBQ
YWNrZWRBU0NJSUxvd2VyQ29kZXMoY29uc3QgY2hhciAoJmNoYXJhY3RlcnMpW3NpemVdKTsKKyAg
ICBzdGF0aWMgT3B0aW9uYWw8UGFja2VkQVNDSUlMb3dlckNvZGVzPiBwYXJzZShTdHJpbmdWaWV3
KTsKKyAgICBjb25zdGV4cHIgU3RvcmFnZUludGVnZXIgdmFsdWUoKSBjb25zdCB7IHJldHVybiBt
X3ZhbHVlOyB9CisKK3ByaXZhdGU6CisgICAgdGVtcGxhdGU8dW5zaWduZWQgc2l6ZT4gc3RhdGlj
IGNvbnN0ZXhwciBTdG9yYWdlSW50ZWdlciBwYWNrKGNvbnN0IGNoYXIgKCZjaGFyYWN0ZXJzKVtz
aXplXSk7CisgICAgZXhwbGljaXQgY29uc3RleHByIFBhY2tlZEFTQ0lJTG93ZXJDb2RlcyhTdG9y
YWdlSW50ZWdlcik7CisgICAgU3RvcmFnZUludGVnZXIgbV92YWx1ZSB7IDAgfTsKK307CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFN0b3JhZ2VJbnRlZ2VyPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj09
KFBhY2tlZEFTQ0lJTG93ZXJDb2RlczxTdG9yYWdlSW50ZWdlcj4sIFBhY2tlZEFTQ0lJTG93ZXJD
b2RlczxTdG9yYWdlSW50ZWdlcj4pOwordGVtcGxhdGU8dHlwZW5hbWUgU3RvcmFnZUludGVnZXI+
IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPChQYWNrZWRBU0NJSUxvd2VyQ29kZXM8U3RvcmFnZUlu
dGVnZXI+LCBQYWNrZWRBU0NJSUxvd2VyQ29kZXM8U3RvcmFnZUludGVnZXI+KTsKIAogdGVtcGxh
dGU8QVNDSUlTdWJzZXQgc3Vic2V0PiBjb25zdGV4cHIgYm9vbCBpc0luU3Vic2V0KGNoYXIgY2hh
cmFjdGVyKQogewpAQCAtMTE5LDcgKzEzNSw3IEBAIHRlbXBsYXRlPEFTQ0lJU3Vic2V0IHN1YnNl
dD4gY29uc3RleHByIGJvb2wgaXNJblN1YnNldChjaGFyIGNoYXJhY3RlcikKICAgICB9CiB9CiAK
LXRlbXBsYXRlPEFTQ0lJU3Vic2V0IHN1YnNldD4gdGVtcGxhdGU8c3RkOjpzaXplX3Qgc2l6ZT4g
Y29uc3RleHByIENvbXBhcmFibGVBU0NJSVN1YnNldExpdGVyYWw8c3Vic2V0Pjo6Q29tcGFyYWJs
ZUFTQ0lJU3Vic2V0TGl0ZXJhbChjb25zdCBjaGFyICgmY2hhcmFjdGVycylbc2l6ZV0pCit0ZW1w
bGF0ZTxBU0NJSVN1YnNldCBzdWJzZXQ+IHRlbXBsYXRlPHVuc2lnbmVkIHNpemU+IGNvbnN0ZXhw
ciBDb21wYXJhYmxlQVNDSUlTdWJzZXRMaXRlcmFsPHN1YnNldD46OkNvbXBhcmFibGVBU0NJSVN1
YnNldExpdGVyYWwoY29uc3QgY2hhciAoJmNoYXJhY3RlcnMpW3NpemVdKQogICAgIDogbGl0ZXJh
bCB7IEFTQ0lJTGl0ZXJhbDo6ZnJvbUxpdGVyYWxVbnNhZmUoY2hhcmFjdGVycykgfQogewogICAg
IEFTU0VSVF9VTkRFUl9DT05TVEVYUFJfQ09OVEVYVChhbGxPZkNvbnN0RXhwcigmY2hhcmFjdGVy
c1swXSwgJmNoYXJhY3RlcnNbc2l6ZSAtIDFdLCBbXSAoY2hhciBjaGFyYWN0ZXIpIHsKQEAgLTMw
MSwxNyArMzE3LDYyIEBAIHRlbXBsYXRlPHR5cGVuYW1lIE90aGVyVHlwZT4gaW5saW5lIGJvb2wg
b3BlcmF0b3I9PShPdGhlclR5cGUgYSwgQ29tcGFyYWJsZVN0cmluCiAgICAgcmV0dXJuIGIgPT0g
YTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgT3RoZXJUeXBlPiBpbmxpbmUgYm9vbCBvcGVyYXRv
ciE9KENvbXBhcmFibGVTdHJpbmdWaWV3IGEsIE90aGVyVHlwZSBiKQordGVtcGxhdGU8dHlwZW5h
bWUgU3RvcmFnZUludGVnZXI+IHRlbXBsYXRlPHVuc2lnbmVkIHNpemU+IGNvbnN0ZXhwciBQYWNr
ZWRBU0NJSUxvd2VyQ29kZXM8U3RvcmFnZUludGVnZXI+OjpQYWNrZWRBU0NJSUxvd2VyQ29kZXMo
Y29uc3QgY2hhciAoJnN0cmluZylbc2l6ZV0pCisgICAgOiBtX3ZhbHVlIHsgcGFjayhzdHJpbmcp
IH0KK3sKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgU3RvcmFnZUludGVnZXI+IGNvbnN0ZXhwciBQ
YWNrZWRBU0NJSUxvd2VyQ29kZXM8U3RvcmFnZUludGVnZXI+OjpQYWNrZWRBU0NJSUxvd2VyQ29k
ZXMoU3RvcmFnZUludGVnZXIgdmFsdWUpCisgICAgOiBtX3ZhbHVlIHsgdmFsdWUgfQoreworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBTdG9yYWdlSW50ZWdlcj4gdGVtcGxhdGU8dW5zaWduZWQgc2l6
ZT4gY29uc3RleHByIFN0b3JhZ2VJbnRlZ2VyIFBhY2tlZEFTQ0lJTG93ZXJDb2RlczxTdG9yYWdl
SW50ZWdlcj46OnBhY2soY29uc3QgY2hhciAoJnN0cmluZylbc2l6ZV0pCit7CisgICAgQVNTRVJU
X1VOREVSX0NPTlNURVhQUl9DT05URVhUKHNpemUpOworICAgIGNvbnN0ZXhwciB1bnNpZ25lZCBs
ZW5ndGggPSBzaXplIC0gMTsKKyAgICBBU1NFUlRfVU5ERVJfQ09OU1RFWFBSX0NPTlRFWFQoIXN0
cmluZ1tsZW5ndGhdKTsKKyAgICBBU1NFUlRfVU5ERVJfQ09OU1RFWFBSX0NPTlRFWFQobGVuZ3Ro
IDw9IHNpemVvZihTdG9yYWdlSW50ZWdlcikpOworICAgIFN0b3JhZ2VJbnRlZ2VyIHJlc3VsdCA9
IDA7CisgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyArK2luZGV4
KSB7CisgICAgICAgIFN0b3JhZ2VJbnRlZ2VyIGNvZGUgPSBzdGF0aWNfY2FzdDx1aW50OF90Pihz
dHJpbmdbaW5kZXhdKTsKKyAgICAgICAgcmVzdWx0IHw9IGNvZGUgPDwgKChzaXplb2YoU3RvcmFn
ZUludGVnZXIpIC0gaW5kZXggLSAxKSAqIDgpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBTdG9yYWdlSW50ZWdlcj4gYXV0byBQYWNrZWRBU0NJSUxv
d2VyQ29kZXM8U3RvcmFnZUludGVnZXI+OjpwYXJzZShTdHJpbmdWaWV3IHN0cmluZykgLT4gT3B0
aW9uYWw8UGFja2VkQVNDSUlMb3dlckNvZGVzPgoreworICAgIGlmIChzdHJpbmcubGVuZ3RoKCkg
PiBzaXplb2YoU3RvcmFnZUludGVnZXIpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
ICAgIFN0b3JhZ2VJbnRlZ2VyIHJlc3VsdCA9IDA7CisgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9
IDA7IGluZGV4IDwgc3RyaW5nLmxlbmd0aCgpOyArK2luZGV4KSB7CisgICAgICAgIFVDaGFyIGNv
ZGUgPSBzdHJpbmdbaW5kZXhdOworICAgICAgICBpZiAoIWlzQVNDSUkoY29kZSkpCisgICAgICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICByZXN1bHQgfD0gc3RhdGljX2Nhc3Q8
U3RvcmFnZUludGVnZXI+KHRvQVNDSUlMb3dlcihjb2RlKSkgPDwgKChzaXplb2YoU3RvcmFnZUlu
dGVnZXIpIC0gaW5kZXggLSAxKSAqIDgpOworICAgIH0KKyAgICByZXR1cm4gUGFja2VkQVNDSUlM
b3dlckNvZGVzKHJlc3VsdCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFN0b3JhZ2VJbnRlZ2Vy
PiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj09KFBhY2tlZEFTQ0lJTG93ZXJDb2RlczxTdG9yYWdl
SW50ZWdlcj4gYSwgUGFja2VkQVNDSUlMb3dlckNvZGVzPFN0b3JhZ2VJbnRlZ2VyPiBiKQorewor
ICAgIHJldHVybiBhLnZhbHVlKCkgPT0gYi52YWx1ZSgpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBTdG9yYWdlSW50ZWdlcj4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I8KFBhY2tlZEFTQ0lJTG93
ZXJDb2RlczxTdG9yYWdlSW50ZWdlcj4gYSwgUGFja2VkQVNDSUlMb3dlckNvZGVzPFN0b3JhZ2VJ
bnRlZ2VyPiBiKQogewotICAgIHJldHVybiAhKGEgPT0gYik7CisgICAgcmV0dXJuIGEudmFsdWUo
KSA8IGIudmFsdWUoKTsKIH0KIAogfQogCisvLyBGSVhNRTogUmVuYW1lIHRoZSBDb21wYXJhYmxl
IGFuZCBQYWNrZWQgdHlwZXMgZm9yIGNsYXJpdHkgYW5kIHRvIGFsaWduIHRoZW0gYmV0dGVyIHdp
dGggZWFjaCBvdGhlci4KIHVzaW5nIFdURjo6QVNDSUlTdWJzZXQ7CiB1c2luZyBXVEY6OkNvbXBh
cmFibGVBU0NJSUxpdGVyYWw7CiB1c2luZyBXVEY6OkNvbXBhcmFibGVBU0NJSVN1YnNldExpdGVy
YWw7CiB1c2luZyBXVEY6OkNvbXBhcmFibGVDYXNlRm9sZGluZ0FTQ0lJTGl0ZXJhbDsKIHVzaW5n
IFdURjo6Q29tcGFyYWJsZUxldHRlcnNMaXRlcmFsOwordXNpbmcgV1RGOjpQYWNrZWRBU0NJSUxv
d2VyQ29kZXM7CiB1c2luZyBXVEY6OlNvcnRlZEFycmF5TWFwOwogdXNpbmcgV1RGOjpTb3J0ZWRB
cnJheVNldDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0NvbnRlbnRUeXBl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0NvbnRlbnRUeXBlLmNwcAppbmRleCBmMGQy
YzEwYjg4ZjIwODdlYmRhYmYxNTdiYzgxYjY1YzU4MDgxMzg5Li43NTEyYjAyM2Q1YTI0MTY5Zjg1
ZTQ4MGMxZTBiMDg2N2IxNmEwYzY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9Db250ZW50VHlwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ29udGVudFR5
cGUuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOCwg
MjAxMyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA2LTIwMjEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAo
QykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3
dy50b3JjaG1vYmlsZS5jb20vKQogICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKQEAgLTU3LDQzICs1Nyw0NCBAQCBjb25zdCBTdHJpbmcm
IENvbnRlbnRUeXBlOjpwcm9maWxlc1BhcmFtZXRlcigpCiAKIFN0cmluZyBDb250ZW50VHlwZTo6
cGFyYW1ldGVyKGNvbnN0IFN0cmluZyYgcGFyYW1ldGVyTmFtZSkgY29uc3QKIHsKLSAgICBTdHJp
bmcgcGFyYW1ldGVyVmFsdWU7Ci0gICAgU3RyaW5nIHN0cmlwcGVkVHlwZSA9IG1fdHlwZS5zdHJp
cFdoaXRlU3BhY2UoKTsKLQotICAgIC8vIGEgTUlNRSB0eXBlIGNhbiBoYXZlIG9uZSBvciBtb3Jl
ICJwYXJhbT12YWx1ZSIgYWZ0ZXIgYSBzZW1pLWNvbG9uLCBhbmQgc2VwYXJhdGVkIGZyb20gZWFj
aCBvdGhlciBieSBzZW1pLWNvbG9ucwotICAgIHNpemVfdCBzZW1pID0gc3RyaXBwZWRUeXBlLmZp
bmQoJzsnKTsKLSAgICBpZiAoc2VtaSAhPSBub3RGb3VuZCkgewotICAgICAgICBzaXplX3Qgc3Rh
cnQgPSBzdHJpcHBlZFR5cGUuZmluZElnbm9yaW5nQVNDSUlDYXNlKHBhcmFtZXRlck5hbWUsIHNl
bWkgKyAxKTsKLSAgICAgICAgaWYgKHN0YXJ0ICE9IG5vdEZvdW5kKSB7Ci0gICAgICAgICAgICBz
dGFydCA9IHN0cmlwcGVkVHlwZS5maW5kKCc9Jywgc3RhcnQgKyBwYXJhbWV0ZXJOYW1lLmxlbmd0
aCgpKTsKLSAgICAgICAgICAgIGlmIChzdGFydCAhPSBub3RGb3VuZCkgewotICAgICAgICAgICAg
ICAgIHNpemVfdCBxdW90ZSA9IHN0cmlwcGVkVHlwZS5maW5kKCdcIicsIHN0YXJ0ICsgMSk7Ci0g
ICAgICAgICAgICAgICAgc2l6ZV90IGVuZCA9IHN0cmlwcGVkVHlwZS5maW5kKCdcIicsIHN0YXJ0
ICsgMik7Ci0gICAgICAgICAgICAgICAgaWYgKHF1b3RlICE9IG5vdEZvdW5kICYmIGVuZCAhPSBu
b3RGb3VuZCkKLSAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSBxdW90ZTsKLSAgICAgICAgICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgZW5kID0gc3RyaXBwZWRUeXBlLmZpbmQo
JzsnLCBzdGFydCArIDEpOwotICAgICAgICAgICAgICAgICAgICBpZiAoZW5kID09IG5vdEZvdW5k
KQotICAgICAgICAgICAgICAgICAgICAgICAgZW5kID0gc3RyaXBwZWRUeXBlLmxlbmd0aCgpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBwYXJhbWV0ZXJWYWx1ZSA9IHN0cmlw
cGVkVHlwZS5zdWJzdHJpbmcoc3RhcnQgKyAxLCBlbmQgLSAoc3RhcnQgKyAxKSkuc3RyaXBXaGl0
ZVNwYWNlKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAvLyBBIE1JTUUgdHlwZSBj
YW4gaGF2ZSBvbmUgb3IgbW9yZSAicGFyYW09dmFsdWUiIGFmdGVyIGEgc2VtaWNvbG9uLCBzZXBh
cmF0ZWQgZnJvbSBlYWNoIG90aGVyIGJ5IHNlbWljb2xvbnMuCisKKyAgICAvLyBGSVhNRTogVGhp
cyB3aWxsIGlnbm9yZSBhIHF1b3RhdGlvbiBtYXJrIGlmIGl0IGNvbWVzIGJlZm9yZSB0aGUgc2Vt
aWNvbG9uLiBJcyB0aGF0IHRoZSBkZXNpcmVkIGJlaGF2aW9yPworICAgIGF1dG8gc2VtaWNvbG9u
UG9zaXRpb24gPSBtX3R5cGUuZmluZCgnOycpOworICAgIGlmIChzZW1pY29sb25Qb3NpdGlvbiA9
PSBub3RGb3VuZCkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIC8vIEZJWE1FOiBUaGlzIG1h
dGNoZXMgcGFyYW1ldGVycyB0aGF0IGhhdmUgcGFyYW1ldGVyTmFtZSBhcyBhIHN1ZmZpeDsgdGhh
dCBpcyBub3QgdGhlIGRlc2lyZWQgYmVoYXZpb3IuCisgICAgYXV0byBuYW1lU3RhcnQgPSBtX3R5
cGUuZmluZElnbm9yaW5nQVNDSUlDYXNlKHBhcmFtZXRlck5hbWUsIHNlbWljb2xvblBvc2l0aW9u
ICsgMSk7CisgICAgaWYgKG5hbWVTdGFydCA9PSBub3RGb3VuZCkKKyAgICAgICAgcmV0dXJuIHsg
fTsKKworICAgIGF1dG8gZXF1YWxTaWduUG9zaXRpb24gPSBtX3R5cGUuZmluZCgnPScsIG5hbWVT
dGFydCArIHBhcmFtZXRlck5hbWUubGVuZ3RoKCkpOworICAgIGlmIChlcXVhbFNpZ25Qb3NpdGlv
biA9PSBub3RGb3VuZCkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIC8vIEZJWE1FOiBUaGlz
IHNraXBzIG92ZXIgYW55IGNoYXJhY3RlcnMgdGhhdCBjb21lIGJlZm9yZSBhIHF1b3RhdGlvbiBt
YXJrOyB0aGF0IGlzIG5vdCB0aGUgZGVzaXJlZCBiZWhhdmlvci4KKyAgICBhdXRvIHF1b3RlUG9z
aXRpb24gPSBtX3R5cGUuZmluZCgnIicsIGVxdWFsU2lnblBvc2l0aW9uICsgMSk7CisgICAgLy8g
RklYTUU6IFRoaXMgZG9lcyBub3Qgd29yayBpZiB0aGVyZSBpcyBhbiBlc2NhcGVkIHF1b3RhdGlv
biBtYXJrIGluIHRoZSBxdW90ZWQgc3RyaW5nLiBJcyB0aGF0IHRoZSBkZXNpcmVkIGJlaGF2aW9y
PworICAgIGF1dG8gc2Vjb25kUXVvdGVQb3NpdGlvbiA9IG1fdHlwZS5maW5kKCciJywgcXVvdGVQ
b3NpdGlvbiArIDEpOworICAgIHNpemVfdCBzdGFydDsKKyAgICBzaXplX3QgZW5kOworICAgIGlm
IChxdW90ZVBvc2l0aW9uICE9IG5vdEZvdW5kICYmIHNlY29uZFF1b3RlUG9zaXRpb24gIT0gbm90
Rm91bmQpIHsKKyAgICAgICAgc3RhcnQgPSBxdW90ZVBvc2l0aW9uICsgMTsKKyAgICAgICAgZW5k
ID0gc2Vjb25kUXVvdGVQb3NpdGlvbjsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBGSVhNRTog
SWYgdGhlcmUgaXMgb25seSBvbmUgcXVvdGF0aW9uIG1hcmssIHRoaXMgd2lsbCB0cmVhdCBpdCBh
cyBwYXJ0IG9mIHRoZSBzdHJpbmc7IHRoYXQgaXMgbm90IHRoZSBkZXNpcmVkIGJlaGF2aW9yLgor
ICAgICAgICBzdGFydCA9IGVxdWFsU2lnblBvc2l0aW9uICsgMTsKKyAgICAgICAgZW5kID0gbV90
eXBlLmZpbmQoJzsnLCBzdGFydCk7CiAgICAgfQotCi0gICAgcmV0dXJuIHBhcmFtZXRlclZhbHVl
OworICAgIHJldHVybiBTdHJpbmdWaWV3IHsgbV90eXBlIH0uc3Vic3RyaW5nKHN0YXJ0LCBlbmQg
LSBzdGFydCkuc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdNYXRjaGVkQ2hhcmFjdGVycyhpc0hUTUxT
cGFjZTxVQ2hhcj4pLnRvU3RyaW5nKCk7CiB9CiAKIFN0cmluZyBDb250ZW50VHlwZTo6Y29udGFp
bmVyVHlwZSgpIGNvbnN0CiB7Ci0gICAgU3RyaW5nIHN0cmlwcGVkVHlwZSA9IG1fdHlwZS5zdHJp
cFdoaXRlU3BhY2UoKTsKLQotICAgIC8vICJ0eXBlIiBjYW4gaGF2ZSBwYXJhbWV0ZXJzIGFmdGVy
IGEgc2VtaS1jb2xvbiwgc3RyaXAgdGhlbQotICAgIHNpemVfdCBzZW1pID0gc3RyaXBwZWRUeXBl
LmZpbmQoJzsnKTsKLSAgICBpZiAoc2VtaSAhPSBub3RGb3VuZCkKLSAgICAgICAgc3RyaXBwZWRU
eXBlID0gc3RyaXBwZWRUeXBlLmxlZnQoc2VtaSkuc3RyaXBXaGl0ZVNwYWNlKCk7Ci0KLSAgICBy
ZXR1cm4gc3RyaXBwZWRUeXBlOworICAgIC8vIFN0cmlwIHBhcmFtZXRlcnMgdGhhdCBjb21lIGFm
dGVyIGEgc2VtaWNvbG9uLgorICAgIC8vIEZJWE1FOiBUaGlzIHdpbGwgaWdub3JlIGEgcXVvdGF0
aW9uIG1hcmsgaWYgaXQgY29tZXMgYmVmb3JlIHRoZSBzZW1pY29sb24uIElzIHRoYXQgdGhlIGRl
c2lyZWQgYmVoYXZpb3I/CisgICAgcmV0dXJuIHN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nSFRNTFNw
YWNlcyhtX3R5cGUubGVmdChtX3R5cGUuZmluZCgnOycpKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUg
VmVjdG9yPFN0cmluZz4gc3BsaXRQYXJhbWV0ZXJzKFN0cmluZ1ZpZXcgcGFyYW1ldGVyc1ZpZXcp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9IRVZDVXRpbGl0
aWVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0hFVkNVdGlsaXRpZXMu
Y3BwCmluZGV4IDg1NzEzZjRiYTUyMWRlNWQ1YjY5MWY2OTkzZDNjYmY5ZWMzYzU4MTUuLjRmMmVl
NDJlOGQ3ODBjNzEyZTQ3NWE0MTIxNTUyYjhmYzliNWRkOWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0hFVkNVdGlsaXRpZXMuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0hFVkNVdGlsaXRpZXMuY3BwCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDEzICsyNywxMiBA
QAogI2luY2x1ZGUgIkhFVkNVdGlsaXRpZXMuaCIKIAogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ry
b3llZC5oPgotI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nSGFzaC5oPgorI2luY2x1ZGUgPHd0Zi9Tb3J0ZWRBcnJheU1hcC5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1RvSW50ZWdlckNvbnZlcnNpb24uaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1PcHRpb25hbDxIRVZDUGFyYW1ldGVyU2V0PiBwYXJzZUhFVkNDb2RlY1Bh
cmFtZXRlcnMoY29uc3QgU3RyaW5nJiBjb2RlY1N0cmluZykKK09wdGlvbmFsPEhFVkNQYXJhbWV0
ZXJzPiBwYXJzZUhFVkNDb2RlY1BhcmFtZXRlcnMoU3RyaW5nVmlldyBjb2RlY1N0cmluZykKIHsK
ICAgICAvLyBUaGUgZm9ybWF0IG9mIHRoZSAnaGV2YycgY29kZWMgc3RyaW5nIGlzIHNwZWNpZmll
ZCBpbiBJU08vSUVDIDE0NDk2LTE1OjIwMTQsIEFubmV4IEUuMy4KICAgICBTdHJpbmdWaWV3IGNv
ZGVjVmlldyhjb2RlY1N0cmluZyk7CkBAIC00MiwxMSArNDEsMTEgQEAgT3B0aW9uYWw8SEVWQ1Bh
cmFtZXRlclNldD4gcGFyc2VIRVZDQ29kZWNQYXJhbWV0ZXJzKGNvbnN0IFN0cmluZyYgY29kZWNT
dHJpbmcpCiAgICAgaWYgKG5leHRFbGVtZW50ID09IGNvZGVjU3BsaXQuZW5kKCkpCiAgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBIRVZDUGFyYW1ldGVyU2V0IHBhcmFtZXRlcnM7
CisgICAgSEVWQ1BhcmFtZXRlcnMgcGFyYW1ldGVyczsKIAogICAgIC8vIENvZGVjIGlkZW50aWZp
ZXI6IGxlZ2FsIHZhbHVlcyBhcmUgc3BlY2lmaWVkIGluIElTTy9JRUMgMTQ0OTYtMTU6MjAxNCwg
c2VjdGlvbiA4OgotICAgIHBhcmFtZXRlcnMuY29kZWNOYW1lID0gKCpuZXh0RWxlbWVudCkudG9T
dHJpbmcoKTsKLSAgICBpZiAoIWVxdWFsKHBhcmFtZXRlcnMuY29kZWNOYW1lLCAiaHZjMSIpICYm
ICFlcXVhbChwYXJhbWV0ZXJzLmNvZGVjTmFtZSwgImhldjEiKSkKKyAgICBhdXRvIGNvZGVjTmFt
ZSA9ICpuZXh0RWxlbWVudDsKKyAgICBpZiAoY29kZWNOYW1lICE9ICJodmMxIiAmJiBjb2RlY05h
bWUgIT0gImhldjEiKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgaWYgKCsr
bmV4dEVsZW1lbnQgPT0gY29kZWNTcGxpdC5lbmQoKSkKQEAgLTkxLDIxICs5MCwxOCBAQCBPcHRp
b25hbDxIRVZDUGFyYW1ldGVyU2V0PiBwYXJzZUhFVkNDb2RlY1BhcmFtZXRlcnMoY29uc3QgU3Ry
aW5nJiBjb2RlY1N0cmluZykKICAgICBpZiAoZmlyc3RDaGFyYWN0ZXIgIT0gJ0wnICYmIGZpcnN0
Q2hhcmFjdGVyICE9ICdIJykKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHBh
cmFtZXRlcnMuZ2VuZXJhbFRpZXJGbGFnID0gZmlyc3RDaGFyYWN0ZXIgPT0gJ0gnOwogICAgIGJv
b2wgaXNWYWxpZEdlbmVyYWxMZXZlbElEQyA9IGZhbHNlOwogICAgIHBhcmFtZXRlcnMuZ2VuZXJh
bExldmVsSURDID0gdG9JbnRlZ3JhbFR5cGU8dWludDhfdD4oZ2VuZXJhbFRpZXIuc3Vic3RyaW5n
KDEpLCAmaXNWYWxpZEdlbmVyYWxMZXZlbElEQyk7CiAgICAgaWYgKCFpc1ZhbGlkR2VuZXJhbExl
dmVsSURDKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgLy8gT3B0aW9uYWwg
Zm91cnRoIGFuZCByZW1hbmluZyBlbGVtZW50czogYSBzZXF1ZW5jZSBvZiA2IDEtYnl0ZSBjb25z
dHJhaW50IGZsYWdzLCBlYWNoIGJ5dGUgZW5jb2RlZAorICAgIC8vIE9wdGlvbmFsIGZvdXJ0aCBh
bmQgcmVtYWluaW5nIGVsZW1lbnRzOiBhIHNlcXVlbmNlIG9mIDYgMS1ieXRlIGNvbnN0cmFpbnQg
ZmxhZ3MsIGVhY2ggYnl0ZSBlbmNvZGVkCiAgICAgLy8gaW4gaGV4LCBhbmQgc2VwYXJhdGVkIGJ5
IGEgcGVyaW9kLCB3aXRoIHRyYWlsaW5nIHplcm8gYnl0ZXMgb21pdHRlZC4KLSAgICBwYXJhbWV0
ZXJzLmNvbnN0cmFpbnRGbGFncy5maWxsKDAsIDYpOwotICAgIGZvciAoYXV0byYgZmxhZyA6IHBh
cmFtZXRlcnMuY29uc3RyYWludEZsYWdzKSB7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IDY7ICsraSkgewogICAgICAgICBpZiAoKytuZXh0RWxlbWVudCA9PSBjb2RlY1NwbGl0LmVuZCgp
KQogICAgICAgICAgICAgYnJlYWs7Ci0KICAgICAgICAgYm9vbCBpc1ZhbGlkRmxhZyA9IGZhbHNl
OwotICAgICAgICBmbGFnID0gdG9JbnRlZ3JhbFR5cGU8dWludDhfdD4oKm5leHRFbGVtZW50LCAm
aXNWYWxpZEZsYWcsIDE2KTsKKyAgICAgICAgdG9JbnRlZ3JhbFR5cGU8dWludDhfdD4oKm5leHRF
bGVtZW50LCAmaXNWYWxpZEZsYWcsIDE2KTsKICAgICAgICAgaWYgKCFpc1ZhbGlkRmxhZykKICAg
ICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgfQpAQCAtMTEzLDQxICsxMDksNDAg
QEAgT3B0aW9uYWw8SEVWQ1BhcmFtZXRlclNldD4gcGFyc2VIRVZDQ29kZWNQYXJhbWV0ZXJzKGNv
bnN0IFN0cmluZyYgY29kZWNTdHJpbmcpCiAgICAgcmV0dXJuIHBhcmFtZXRlcnM7CiB9CiAKLXN0
YXRpYyBTdHJpbmcgY29kZWNTdHJpbmdGb3JEb1ZpQ29kZWNUeXBlKGNvbnN0IFN0cmluZyYgY29k
ZWMpCit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGU+IGlubGluZSBPcHRpb25hbDxWYWx1ZVR5
cGU+IG1ha2VPcHRpb25hbEZyb21Qb2ludGVyKGNvbnN0IFZhbHVlVHlwZSogcG9pbnRlcikKK3sK
KyAgICBpZiAoIXBvaW50ZXIpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0
dXJuICpwb2ludGVyOworfQorCitzdGF0aWMgT3B0aW9uYWw8RG9WaVBhcmFtZXRlcnM6OkNvZGVj
PiBwYXJzZURvVmlDb2RlY1R5cGUoU3RyaW5nVmlldyBzdHJpbmcpCiB7Ci0gICAgdXNpbmcgTWFw
VHlwZSA9IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxTdHJpbmcsIFN0
cmluZz47Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPE1hcFR5cGU+IHR5cGVzID0gc3RkOjpp
bml0aWFsaXplcl9saXN0PE1hcFR5cGU6OktleVZhbHVlUGFpclR5cGU+KHsKLSAgICAgICAgeyAi
ZHZoZSJfcywgImhldjEiX3MgfSwKLSAgICAgICAgeyAiZHZoMSJfcywgImh2YzEiX3MgfSwKLSAg
ICAgICAgeyAiZHZhdiJfcywgImF2YzMiX3MgfSwKLSAgICAgICAgeyAiZHZhMSJfcywgImF2YzEi
X3MgfQotICAgIH0pOwotCi0gICAgYXV0byBmaW5kUmVzdWx0cyA9IHR5cGVzLmdldCgpLmZpbmQo
Y29kZWMpOwotICAgIGlmIChmaW5kUmVzdWx0cyA9PSB0eXBlcy5nZXQoKS5lbmQoKSkKLSAgICAg
ICAgcmV0dXJuIG51bGxTdHJpbmcoKTsKLSAgICByZXR1cm4gZmluZFJlc3VsdHMtPnZhbHVlOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgc3RkOjpwYWlyPFBhY2tlZEFTQ0lJTG93ZXJDb2Rlczx1aW50
MzJfdD4sIERvVmlQYXJhbWV0ZXJzOjpDb2RlYz4gdHlwZXNBcnJheVtdID0geworICAgICAgICB7
ICJkdmExIiwgRG9WaVBhcmFtZXRlcnM6OkNvZGVjOjpBVkMxIH0sCisgICAgICAgIHsgImR2YXYi
LCBEb1ZpUGFyYW1ldGVyczo6Q29kZWM6OkFWQzMgfSwKKyAgICAgICAgeyAiZHZoMSIsIERvVmlQ
YXJhbWV0ZXJzOjpDb2RlYzo6SFZDMSB9LAorICAgICAgICB7ICJkdmhlIiwgRG9WaVBhcmFtZXRl
cnM6OkNvZGVjOjpIRVYxIH0sCisgICAgfTsKKyAgICBzdGF0aWMgY29uc3RleHByIFNvcnRlZEFy
cmF5TWFwIHR5cGVzTWFwIHsgdHlwZXNBcnJheSB9OworICAgIHJldHVybiBtYWtlT3B0aW9uYWxG
cm9tUG9pbnRlcih0eXBlc01hcC50cnlHZXQoc3RyaW5nKSk7CiB9CiAKLXN0YXRpYyBPcHRpb25h
bDx1bnNpZ25lZCBzaG9ydD4gcHJvZmlsZUlERm9yQWxwaGFiZXRpY0RvVmlQcm9maWxlKGNvbnN0
IFN0cmluZyYgcHJvZmlsZSkKK3N0YXRpYyBPcHRpb25hbDx1aW50MTZfdD4gcHJvZmlsZUlERm9y
QWxwaGFiZXRpY0RvVmlQcm9maWxlKFN0cmluZ1ZpZXcgcHJvZmlsZSkKIHsKICAgICAvLyBTZWUg
VGFibGUgNyBvZiAiRG9sYnkgVmlzaW9uIFByb2ZpbGVzIGFuZCBMZXZlbHMgVmVyc2lvbiAxLjMu
MiIKLSAgICB1c2luZyBNYXBUeXBlID0gTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RI
YXNoTWFwPFN0cmluZywgdW5zaWduZWQgc2hvcnQ+OwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxNYXBUeXBlPiBtYXAgPSBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8TWFwVHlwZTo6S2V5VmFsdWVQ
YWlyVHlwZT4oewotICAgICAgICB7ICJkdmhlLmR0ciJfcywgNCB9LAotICAgICAgICB7ICJkdmhl
LnN0biJfcywgNSB9LAotICAgICAgICB7ICJkdmhlLmR0YiJfcywgNyB9LAotICAgICAgICB7ICJk
dmhlLnN0Il9zLCA4IH0sCi0gICAgICAgIHsgImR2YXYuc2UiX3MsIDkgfQotICAgIH0pOwotCi0g
ICAgYXV0byBmaW5kUmVzdWx0cyA9IG1hcC5nZXQoKS5maW5kKHByb2ZpbGUpOwotICAgIGlmIChm
aW5kUmVzdWx0cyA9PSBtYXAuZ2V0KCkuZW5kKCkpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7Ci0gICAgcmV0dXJuIGZpbmRSZXN1bHRzLT52YWx1ZTsKKyAgICBzdGF0aWMgY29uc3RleHBy
IHN0ZDo6cGFpcjxQYWNrZWRBU0NJSUxvd2VyQ29kZXM8dWludDY0X3Q+LCB1aW50MTZfdD4gcHJv
ZmlsZXNBcnJheVtdID0geworICAgICAgICB7ICJkdmF2LnNlIiwgOSB9LAorICAgICAgICB7ICJk
dmhlLmR0YiIsIDcgfSwKKyAgICAgICAgeyAiZHZoZS5kdHIiLCA0IH0sCisgICAgICAgIHsgImR2
aGUuc3QiLCA4IH0sCisgICAgICAgIHsgImR2aGUuc3RuIiwgNSB9LAorICAgIH07CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBTb3J0ZWRBcnJheU1hcCBwcm9maWxlc01hcCB7IHByb2ZpbGVzQXJyYXkg
fTsKKyAgICByZXR1cm4gbWFrZU9wdGlvbmFsRnJvbVBvaW50ZXIocHJvZmlsZXNNYXAudHJ5R2V0
KHByb2ZpbGUpKTsKIH0KIAotc3RhdGljIGJvb2wgaXNWYWxpZERvVmlQcm9maWxlSUQodW5zaWdu
ZWQgc2hvcnQgcHJvZmlsZUlEKQorc3RhdGljIGJvb2wgaXNWYWxpZERvVmlQcm9maWxlSUQodWlu
dDE2X3QgcHJvZmlsZUlEKQogewogICAgIHN3aXRjaCAocHJvZmlsZUlEKSB7CiAgICAgY2FzZSA0
OgpAQCAtMTYxLDcgKzE1Niw3IEBAIHN0YXRpYyBib29sIGlzVmFsaWREb1ZpUHJvZmlsZUlEKHVu
c2lnbmVkIHNob3J0IHByb2ZpbGVJRCkKICAgICB9CiB9CiAKLXN0YXRpYyBPcHRpb25hbDx1bnNp
Z25lZCBzaG9ydD4gbWF4aW11bUxldmVsSURGb3JEb1ZpUHJvZmlsZUlEKHVuc2lnbmVkIHNob3J0
IHByb2ZpbGVJRCkKK3N0YXRpYyBPcHRpb25hbDx1aW50MTZfdD4gbWF4aW11bUxldmVsSURGb3JE
b1ZpUHJvZmlsZUlEKHVpbnQxNl90IHByb2ZpbGVJRCkKIHsKICAgICAvLyBTZWUgU2VjdGlvbiA0
LjEgb2YgIkRvbGJ5IFZpc2lvbiBQcm9maWxlcyBhbmQgTGV2ZWxzIFZlcnNpb24gMS4zLjIiCiAg
ICAgc3dpdGNoIChwcm9maWxlSUQpIHsKQEAgLTE3NCwyNyArMTY5LDI3IEBAIHN0YXRpYyBPcHRp
b25hbDx1bnNpZ25lZCBzaG9ydD4gbWF4aW11bUxldmVsSURGb3JEb1ZpUHJvZmlsZUlEKHVuc2ln
bmVkIHNob3J0IHByCiAgICAgfQogfQogCi1zdGF0aWMgYm9vbCBpc1ZhbGlkUHJvZmlsZUlERm9y
Q29kZWNOYW1lKHVuc2lnbmVkIHNob3J0IHByb2ZpbGVJRCwgY29uc3QgU3RyaW5nJiBjb2RlY05h
bWUpCitzdGF0aWMgYm9vbCBpc1ZhbGlkUHJvZmlsZUlERm9yQ29kZWModWludDE2X3QgcHJvZmls
ZUlELCBEb1ZpUGFyYW1ldGVyczo6Q29kZWMgY29kZWMpCiB7CiAgICAgaWYgKHByb2ZpbGVJRCA9
PSA5KQotICAgICAgICByZXR1cm4gY29kZWNOYW1lID09ICJhdmMxIiB8fCBjb2RlY05hbWUgPT0g
ImF2YzMiOwotICAgIHJldHVybiBjb2RlY05hbWUgPT0gImh2YzEiIHx8IGNvZGVjTmFtZSA9PSAi
aGV2MSI7CisgICAgICAgIHJldHVybiBjb2RlYyA9PSBEb1ZpUGFyYW1ldGVyczo6Q29kZWM6OkFW
QzEgfHwgY29kZWMgPT0gRG9WaVBhcmFtZXRlcnM6OkNvZGVjOjpBVkMzOworICAgIHJldHVybiBj
b2RlYyA9PSBEb1ZpUGFyYW1ldGVyczo6Q29kZWM6OkhWQzEgfHwgY29kZWMgPT0gRG9WaVBhcmFt
ZXRlcnM6OkNvZGVjOjpIRVYxOwogfQogCi1PcHRpb25hbDxEb1ZpUGFyYW1ldGVyU2V0PiBwYXJz
ZURvVmlDb2RlY1BhcmFtZXRlcnMoY29uc3QgU3RyaW5nJiBjb2RlY1N0cmluZykKK09wdGlvbmFs
PERvVmlQYXJhbWV0ZXJzPiBwYXJzZURvVmlDb2RlY1BhcmFtZXRlcnMoU3RyaW5nVmlldyBjb2Rl
Y1ZpZXcpCiB7CiAgICAgLy8gVGhlIGZvcm1hdCBvZiB0aGUgRG9WaSBjb2RlYyBzdHJpbmcgaXMg
c3BlY2lmaWVkIGluICJEb2xieSBWaXNpb24gUHJvZmlsZXMgYW5kIExldmVscyBWZXJzaW9uIDEu
My4yIgotICAgIFN0cmluZ1ZpZXcgY29kZWNWaWV3KGNvZGVjU3RyaW5nKTsKICAgICBhdXRvIGNv
ZGVjU3BsaXQgPSBjb2RlY1ZpZXcuc3BsaXQoJy4nKTsKICAgICBhdXRvIG5leHRFbGVtZW50ID0g
Y29kZWNTcGxpdC5iZWdpbigpOwogICAgIGlmIChuZXh0RWxlbWVudCA9PSBjb2RlY1NwbGl0LmVu
ZCgpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgRG9WaVBhcmFtZXRlclNl
dCBwYXJhbWV0ZXJzOworICAgIERvVmlQYXJhbWV0ZXJzIHBhcmFtZXRlcnM7CiAKLSAgICBwYXJh
bWV0ZXJzLmNvZGVjTmFtZSA9IGNvZGVjU3RyaW5nRm9yRG9WaUNvZGVjVHlwZSgoKm5leHRFbGVt
ZW50KS50b1N0cmluZygpKTsKLSAgICBpZiAoIXBhcmFtZXRlcnMuY29kZWNOYW1lKQorICAgIGF1
dG8gY29kZWMgPSBwYXJzZURvVmlDb2RlY1R5cGUoKm5leHRFbGVtZW50KTsKKyAgICBpZiAoIWNv
ZGVjKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHBhcmFtZXRlcnMuY29kZWMg
PSAqY29kZWM7CiAKICAgICBpZiAoKytuZXh0RWxlbWVudCA9PSBjb2RlY1NwbGl0LmVuZCgpKQog
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwpAQCAtMjExLDE3ICsyMDYsMTYgQEAgT3B0aW9u
YWw8RG9WaVBhcmFtZXRlclNldD4gcGFyc2VEb1ZpQ29kZWNQYXJhbWV0ZXJzKGNvbnN0IFN0cmlu
ZyYgY29kZWNTdHJpbmcpCiAgICAgICAgIGlmICghaXNJbnRlZ3JhbCkKICAgICAgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgYXV0byBhbHBoYW51bWVy
aWNQcm9maWxlU3RyaW5nID0gY29kZWNWaWV3LmxlZnQoNSArIHByb2ZpbGVJRC5sZW5ndGgoKSku
dG9TdHJpbmcoKTsKLSAgICAgICAgYXV0byBwcm9maWxlSUQgPSBwcm9maWxlSURGb3JBbHBoYWJl
dGljRG9WaVByb2ZpbGUoYWxwaGFudW1lcmljUHJvZmlsZVN0cmluZyk7Ci0gICAgICAgIGlmICgh
cHJvZmlsZUlEKQorICAgICAgICBhdXRvIGJpdHN0cmVhbVByb2ZpbGVJRCA9IHByb2ZpbGVJREZv
ckFscGhhYmV0aWNEb1ZpUHJvZmlsZShjb2RlY1ZpZXcubGVmdCg1ICsgcHJvZmlsZUlELmxlbmd0
aCgpKSk7CisgICAgICAgIGlmICghYml0c3RyZWFtUHJvZmlsZUlEKQogICAgICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKLSAgICAgICAgcGFyYW1ldGVycy5iaXRzdHJlYW1Qcm9maWxlSUQg
PSBwcm9maWxlSUQudmFsdWUoKTsKKyAgICAgICAgcGFyYW1ldGVycy5iaXRzdHJlYW1Qcm9maWxl
SUQgPSAqYml0c3RyZWFtUHJvZmlsZUlEOwogICAgIH0KIAogICAgIGlmICghaXNWYWxpZERvVmlQ
cm9maWxlSUQocGFyYW1ldGVycy5iaXRzdHJlYW1Qcm9maWxlSUQpKQogICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogCi0gICAgaWYgKCFpc1ZhbGlkUHJvZmlsZUlERm9yQ29kZWNOYW1lKHBh
cmFtZXRlcnMuYml0c3RyZWFtUHJvZmlsZUlELCBwYXJhbWV0ZXJzLmNvZGVjTmFtZSkpCisgICAg
aWYgKCFpc1ZhbGlkUHJvZmlsZUlERm9yQ29kZWMocGFyYW1ldGVycy5iaXRzdHJlYW1Qcm9maWxl
SUQsIHBhcmFtZXRlcnMuY29kZWMpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAg
ICAgaWYgKCsrbmV4dEVsZW1lbnQgPT0gY29kZWNTcGxpdC5lbmQoKSkKQEAgLTIzNiw3ICsyMzAs
NyBAQCBPcHRpb25hbDxEb1ZpUGFyYW1ldGVyU2V0PiBwYXJzZURvVmlDb2RlY1BhcmFtZXRlcnMo
Y29uc3QgU3RyaW5nJiBjb2RlY1N0cmluZykKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
IAogICAgIGF1dG8gbWF4aW11bUxldmVsSUQgPSBtYXhpbXVtTGV2ZWxJREZvckRvVmlQcm9maWxl
SUQocGFyYW1ldGVycy5iaXRzdHJlYW1Qcm9maWxlSUQpOwotICAgIGlmICghbWF4aW11bUxldmVs
SUQgfHwgcGFyYW1ldGVycy5iaXRzdHJlYW1MZXZlbElEID4gbWF4aW11bUxldmVsSUQudmFsdWUo
KSkKKyAgICBpZiAoIW1heGltdW1MZXZlbElEIHx8IHBhcmFtZXRlcnMuYml0c3RyZWFtTGV2ZWxJ
RCA+ICptYXhpbXVtTGV2ZWxJRCkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAg
IHJldHVybiBwYXJhbWV0ZXJzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvSEVWQ1V0aWxpdGllcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSEVWQ1V0aWxpdGllcy5oCmluZGV4IDQzZWVhODdhYjhmYTM4ODlmNTQ4NGU3MTdjZjAyNjIz
NGQxYjAwZTIuLmEyMDQ1OThkZDA2MzBjOGM2YTcwMzZkNGI1ODUzMzRmZWRjNWI3ZmYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0hFVkNVdGlsaXRpZXMuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9IRVZDVXRpbGl0aWVzLmgKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjUs
MjkgKzI1LDI1IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RydWN0IEhFVkNQYXJhbWV0ZXJTZXQgewotICAg
IFN0cmluZyBjb2RlY05hbWU7Ci0gICAgdW5zaWduZWQgc2hvcnQgZ2VuZXJhbFByb2ZpbGVTcGFj
ZSB7IDAgfTsKLSAgICB1bnNpZ25lZCBzaG9ydCBnZW5lcmFsUHJvZmlsZUlEQyB7IDAgfTsKK3N0
cnVjdCBIRVZDUGFyYW1ldGVycyB7CisgICAgdWludDE2X3QgZ2VuZXJhbFByb2ZpbGVTcGFjZSB7
IDAgfTsKKyAgICB1aW50MTZfdCBnZW5lcmFsUHJvZmlsZUlEQyB7IDAgfTsKICAgICB1aW50MzJf
dCBnZW5lcmFsUHJvZmlsZUNvbXBhdGliaWxpdHlGbGFncyB7IDAgfTsKLSAgICBib29sIGdlbmVy
YWxUaWVyRmxhZyB7IGZhbHNlIH07Ci0gICAgdW5zaWduZWQgc2hvcnQgZ2VuZXJhbExldmVsSURD
IHsgMCB9OwotICAgIFZlY3Rvcjx1bnNpZ25lZCBzaG9ydD4gY29uc3RyYWludEZsYWdzIHsgNiwg
MCB9OworICAgIHVpbnQxNl90IGdlbmVyYWxMZXZlbElEQyB7IDAgfTsKIH07CiAKLVdFQkNPUkVf
RVhQT1JUIE9wdGlvbmFsPEhFVkNQYXJhbWV0ZXJTZXQ+IHBhcnNlSEVWQ0NvZGVjUGFyYW1ldGVy
cyhjb25zdCBTdHJpbmcmIGNvZGVjU3RyaW5nKTsKK1dFQkNPUkVfRVhQT1JUIE9wdGlvbmFsPEhF
VkNQYXJhbWV0ZXJzPiBwYXJzZUhFVkNDb2RlY1BhcmFtZXRlcnMoU3RyaW5nVmlldyk7CiAKLXN0
cnVjdCBEb1ZpUGFyYW1ldGVyU2V0IHsKLSAgICBTdHJpbmcgY29kZWNOYW1lOwotICAgIHVuc2ln
bmVkIHNob3J0IGJpdHN0cmVhbVByb2ZpbGVJRCB7IDAgfTsKLSAgICB1bnNpZ25lZCBzaG9ydCBi
aXRzdHJlYW1MZXZlbElEIHsgMCB9Oworc3RydWN0IERvVmlQYXJhbWV0ZXJzIHsKKyAgICBlbnVt
IGNsYXNzIENvZGVjIHsgQVZDMSwgQVZDMywgSEVWMSwgSFZDMSB9IGNvZGVjOworICAgIHVpbnQx
Nl90IGJpdHN0cmVhbVByb2ZpbGVJRCB7IDAgfTsKKyAgICB1aW50MTZfdCBiaXRzdHJlYW1MZXZl
bElEIHsgMCB9OwogfTsKIAotV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8RG9WaVBhcmFtZXRlclNl
dD4gcGFyc2VEb1ZpQ29kZWNQYXJhbWV0ZXJzKGNvbnN0IFN0cmluZyYgY29kZWNTdHJpbmcpOwor
V0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8RG9WaVBhcmFtZXRlcnM+IHBhcnNlRG9WaUNvZGVjUGFy
YW1ldGVycyhTdHJpbmdWaWV3KTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvSEVWQ1V0aWxpdGllc0NvY29hLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9IRVZDVXRpbGl0aWVzQ29jb2EuaAppbmRleCBkYTkx
YzA3NWFkZWRkNTJlNGM1MDk4NTYzNjU3MmU0OTVjZTIxMjJhLi4zYWY0NmI1N2E0ZTBjNGM3YjU5
ZTFkZjhlZjUzOWM1YzFlOTg3OWI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jb2NvYS9IRVZDVXRpbGl0aWVzQ29jb2EuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9IRVZDVXRpbGl0aWVzQ29jb2EuaApAQCAtMzMsOCAr
MzMsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0cnVjdCBNZWRpYUNhcGFiaWxpdGllc0lu
Zm87CiAKLWV4dGVybiBib29sIHZhbGlkYXRlSEVWQ1BhcmFtZXRlcnMoSEVWQ1BhcmFtZXRlclNl
dCYsIE1lZGlhQ2FwYWJpbGl0aWVzSW5mbyYsIGJvb2wgaGFzQWxwaGFDaGFubmVsLCBib29sIGhk
clN1cHBvcnQpOwotZXh0ZXJuIGJvb2wgdmFsaWRhdGVEb1ZpUGFyYW1ldGVycyhEb1ZpUGFyYW1l
dGVyU2V0JiwgTWVkaWFDYXBhYmlsaXRpZXNJbmZvJiwgYm9vbCBoYXNBbHBoYUNoYW5uZWwsIGJv
b2wgaGRyU3VwcG9ydCk7CitPcHRpb25hbDxNZWRpYUNhcGFiaWxpdGllc0luZm8+IHZhbGlkYXRl
SEVWQ1BhcmFtZXRlcnMoY29uc3QgSEVWQ1BhcmFtZXRlcnMmLCBib29sIGhhc0FscGhhQ2hhbm5l
bCwgYm9vbCBoZHJTdXBwb3J0KTsKK09wdGlvbmFsPE1lZGlhQ2FwYWJpbGl0aWVzSW5mbz4gdmFs
aWRhdGVEb1ZpUGFyYW1ldGVycyhjb25zdCBEb1ZpUGFyYW1ldGVycyYsIGJvb2wgaGFzQWxwaGFD
aGFubmVsLCBib29sIGhkclN1cHBvcnQpOwogCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0hFVkNVdGlsaXRpZXNDb2NvYS5tbSBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0hFVkNVdGlsaXRpZXNDb2NvYS5tbQpp
bmRleCA2MjZjNTJkZTAyMzJiMzI2Y2UyYjRiZjgzMmZmMDlmOTBhNzhiODc4Li5jODczOWRiMmU1
NTFkZWYwMzhhNDJlODI0ZmJmMWI3ZmU0MDFmYTY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9IRVZDVXRpbGl0aWVzQ29jb2EubW0KKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSEVWQ1V0aWxpdGllc0NvY29hLm1t
CkBAIC00MCwxNiArNDAsMTYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1ib29sIHZhbGlk
YXRlSEVWQ1BhcmFtZXRlcnMoSEVWQ1BhcmFtZXRlclNldCYgcGFyYW1ldGVycywgTWVkaWFDYXBh
YmlsaXRpZXNJbmZvJiBpbmZvLCBib29sIGhhc0FscGhhQ2hhbm5lbCwgYm9vbCBoZHJTdXBwb3J0
KQorT3B0aW9uYWw8TWVkaWFDYXBhYmlsaXRpZXNJbmZvPiB2YWxpZGF0ZUhFVkNQYXJhbWV0ZXJz
KGNvbnN0IEhFVkNQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzLCBib29sIGhhc0FscGhhQ2hhbm5lbCwg
Ym9vbCBoZHJTdXBwb3J0KQogewogICAgIENNVmlkZW9Db2RlY1R5cGUgY29kZWMgPSBrQ01WaWRl
b0NvZGVjVHlwZV9IRVZDOwogICAgIGlmIChoYXNBbHBoYUNoYW5uZWwpIHsKICAgICAgICAgaWYg
KCFQQUw6OmlzQVZGb3VuZGF0aW9uRnJhbWV3b3JrQXZhaWxhYmxlKCkgfHwgIVBBTDo6Y2FuTG9h
ZF9BVkZvdW5kYXRpb25fQVZWaWRlb0NvZGVjVHlwZUhFVkNXaXRoQWxwaGEoKSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAg
ICAgICAgYXV0byBjb2RlY0NvZGUgPSBGb3VyQ0M6OmZyb21TdHJpbmcoQVZWaWRlb0NvZGVjVHlw
ZUhFVkNXaXRoQWxwaGEpOwogICAgICAgICBpZiAoIWNvZGVjQ29kZSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICAgICAg
Y29kZWMgPSBjb2RlY0NvZGUudmFsdWUoKS52YWx1ZTsKICAgICB9CkBAIC01OSwxMiArNTksMTIg
QEAgYm9vbCB2YWxpZGF0ZUhFVkNQYXJhbWV0ZXJzKEhFVkNQYXJhbWV0ZXJTZXQmIHBhcmFtZXRl
cnMsIE1lZGlhQ2FwYWJpbGl0aWVzSW5mbyYKICAgICAgICAgYm9vbCBpc01haW4xMCA9IHBhcmFt
ZXRlcnMuZ2VuZXJhbFByb2ZpbGVTcGFjZSA9PSAwCiAgICAgICAgICAgICAmJiAocGFyYW1ldGVy
cy5nZW5lcmFsUHJvZmlsZUlEQyA9PSAyIHx8IHBhcmFtZXRlcnMuZ2VuZXJhbFByb2ZpbGVDb21w
YXRpYmlsaXR5RmxhZ3MgPT0gMSk7CiAgICAgICAgIGlmICghaXNNYWluMTApCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0K
IAogICAgIE9TU3RhdHVzIHN0YXR1cyA9IFZUU2VsZWN0QW5kQ3JlYXRlVmlkZW9EZWNvZGVySW5z
dGFuY2UoY29kZWMsIGtDRkFsbG9jYXRvckRlZmF1bHQsIG51bGxwdHIsIG51bGxwdHIpOwogICAg
IGlmIChzdGF0dXMgIT0gbm9FcnIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIGlmICghY2FuTG9hZF9WaWRlb1Rvb2xib3hfVlRDb3B5
SEVWQ0RlY29kZXJDYXBhYmlsaXRpZXNEaWN0aW9uYXJ5KCkKICAgICAgICAgfHwgIWNhbkxvYWRf
VmlkZW9Ub29sYm94X2tWVEhFVkNEZWNvZGVyQ2FwYWJpbGl0eV9TdXBwb3J0ZWRQcm9maWxlcygp
CkBAIC03MiwzMCArNzIsMzQgQEAgYm9vbCB2YWxpZGF0ZUhFVkNQYXJhbWV0ZXJzKEhFVkNQYXJh
bWV0ZXJTZXQmIHBhcmFtZXRlcnMsIE1lZGlhQ2FwYWJpbGl0aWVzSW5mbyYKICAgICAgICAgfHwg
IWNhbkxvYWRfVmlkZW9Ub29sYm94X2tWVEhFVkNEZWNvZGVyUHJvZmlsZUNhcGFiaWxpdHlfSXNI
YXJkd2FyZUFjY2VsZXJhdGVkKCkKICAgICAgICAgfHwgIWNhbkxvYWRfVmlkZW9Ub29sYm94X2tW
VEhFVkNEZWNvZGVyUHJvZmlsZUNhcGFiaWxpdHlfTWF4RGVjb2RlTGV2ZWwoKQogICAgICAgICB8
fCAhY2FuTG9hZF9WaWRlb1Rvb2xib3hfa1ZUSEVWQ0RlY29kZXJQcm9maWxlQ2FwYWJpbGl0eV9N
YXhQbGF5YmFja0xldmVsKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKIAotICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGNhcGFiaWxp
dGllcyA9IGFkb3B0Q0YoVlRDb3B5SEVWQ0RlY29kZXJDYXBhYmlsaXRpZXNEaWN0aW9uYXJ5KCkp
OworICAgIGF1dG8gY2FwYWJpbGl0aWVzID0gYWRvcHRDRihWVENvcHlIRVZDRGVjb2RlckNhcGFi
aWxpdGllc0RpY3Rpb25hcnkoKSk7CiAgICAgaWYgKCFjYXBhYmlsaXRpZXMpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIGF1dG8gc3Vw
cG9ydGVkUHJvZmlsZXMgPSAoQ0ZBcnJheVJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShjYXBhYmls
aXRpZXMuZ2V0KCksIGtWVEhFVkNEZWNvZGVyQ2FwYWJpbGl0eV9TdXBwb3J0ZWRQcm9maWxlcyk7
CiAgICAgaWYgKCFzdXBwb3J0ZWRQcm9maWxlcyB8fCBDRkdldFR5cGVJRChzdXBwb3J0ZWRQcm9m
aWxlcykgIT0gQ0ZBcnJheUdldFR5cGVJRCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICBpbnQxNl90IGdlbmVyYWxQcm9maWxlSURD
ID0gcGFyYW1ldGVycy5nZW5lcmFsUHJvZmlsZUlEQzsKICAgICBhdXRvIGNmR2VuZXJhbFByb2Zp
bGVJREMgPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtDRk51
bWJlclNJbnQxNlR5cGUsICZnZW5lcmFsUHJvZmlsZUlEQykpOwogICAgIGF1dG8gc2VhcmNoUmFu
Z2UgPSBDRlJhbmdlTWFrZSgwLCBDRkFycmF5R2V0Q291bnQoc3VwcG9ydGVkUHJvZmlsZXMpKTsK
ICAgICBpZiAoIUNGQXJyYXlDb250YWluc1ZhbHVlKHN1cHBvcnRlZFByb2ZpbGVzLCBzZWFyY2hS
YW5nZSwgY2ZHZW5lcmFsUHJvZmlsZUlEQy5nZXQoKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIGF1dG8gcGVyUHJvZmlsZVN1cHBv
cnQgPSAoQ0ZEaWN0aW9uYXJ5UmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKGNhcGFiaWxpdGllcy5n
ZXQoKSwga1ZUSEVWQ0RlY29kZXJDYXBhYmlsaXR5X1BlclByb2ZpbGVTdXBwb3J0KTsKICAgICBp
ZiAoIXBlclByb2ZpbGVTdXBwb3J0IHx8IENGR2V0VHlwZUlEKHBlclByb2ZpbGVTdXBwb3J0KSAh
PSBDRkRpY3Rpb25hcnlHZXRUeXBlSUQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgYXV0byBnZW5lcmFsUHJvZmlsZUlEQ1N0cmlu
ZyA9IFN0cmluZzo6bnVtYmVyKGdlbmVyYWxQcm9maWxlSURDKS5jcmVhdGVDRlN0cmluZygpOwog
ICAgIGF1dG8gcHJvZmlsZVN1cHBvcnQgPSAoQ0ZEaWN0aW9uYXJ5UmVmKUNGRGljdGlvbmFyeUdl
dFZhbHVlKHBlclByb2ZpbGVTdXBwb3J0LCBnZW5lcmFsUHJvZmlsZUlEQ1N0cmluZy5nZXQoKSk7
CiAgICAgaWYgKCFwcm9maWxlU3VwcG9ydCB8fCBDRkdldFR5cGVJRChwcm9maWxlU3VwcG9ydCkg
IT0gQ0ZEaWN0aW9uYXJ5R2V0VHlwZUlEKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIE1lZGlhQ2FwYWJpbGl0aWVzSW5mbyBpbmZv
OworCisgICAgaW5mby5zdXBwb3J0ZWQgPSB0cnVlOwogCiAgICAgYXV0byBpc0hhcmR3YXJlQWNj
ZWxlcmF0ZWQgPSAoQ0ZCb29sZWFuUmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKHByb2ZpbGVTdXBw
b3J0LCBrVlRIRVZDRGVjb2RlclByb2ZpbGVDYXBhYmlsaXR5X0lzSGFyZHdhcmVBY2NlbGVyYXRl
ZCk7CiAgICAgaWYgKGlzSGFyZHdhcmVBY2NlbGVyYXRlZCAmJiBDRkdldFR5cGVJRChpc0hhcmR3
YXJlQWNjZWxlcmF0ZWQpID09IENGQm9vbGVhbkdldFR5cGVJRCgpKQpAQCAtMTA1LDgwICsxMDks
NjAgQEAgYm9vbCB2YWxpZGF0ZUhFVkNQYXJhbWV0ZXJzKEhFVkNQYXJhbWV0ZXJTZXQmIHBhcmFt
ZXRlcnMsIE1lZGlhQ2FwYWJpbGl0aWVzSW5mbyYKICAgICBpZiAoY2ZNYXhEZWNvZGVMZXZlbCAm
JiBDRkdldFR5cGVJRChjZk1heERlY29kZUxldmVsKSA9PSBDRk51bWJlckdldFR5cGVJRCgpKSB7
CiAgICAgICAgIGludDE2X3QgbWF4RGVjb2RlTGV2ZWwgPSAwOwogICAgICAgICBpZiAoIUNGTnVt
YmVyR2V0VmFsdWUoY2ZNYXhEZWNvZGVMZXZlbCwga0NGTnVtYmVyU0ludDE2VHlwZSwgJm1heERl
Y29kZUxldmVsKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAKICAgICAgICAgaWYgKHBhcmFtZXRlcnMuZ2VuZXJhbExldmVsSURD
ID4gbWF4RGVjb2RlTGV2ZWwpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAg
aW5mby5zdXBwb3J0ZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
ICAgICB9CiAKICAgICBhdXRvIGNmTWF4UGxheWJhY2tMZXZlbCA9IChDRk51bWJlclJlZilDRkRp
Y3Rpb25hcnlHZXRWYWx1ZShwcm9maWxlU3VwcG9ydCwga1ZUSEVWQ0RlY29kZXJQcm9maWxlQ2Fw
YWJpbGl0eV9NYXhQbGF5YmFja0xldmVsKTsKICAgICBpZiAoY2ZNYXhQbGF5YmFja0xldmVsICYm
IENGR2V0VHlwZUlEKGNmTWF4UGxheWJhY2tMZXZlbCkgPT0gQ0ZOdW1iZXJHZXRUeXBlSUQoKSkg
ewogICAgICAgICBpbnQxNl90IG1heFBsYXliYWNrTGV2ZWwgPSAwOwogICAgICAgICBpZiAoIUNG
TnVtYmVyR2V0VmFsdWUoY2ZNYXhQbGF5YmFja0xldmVsLCBrQ0ZOdW1iZXJTSW50MTZUeXBlLCAm
bWF4UGxheWJhY2tMZXZlbCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgICAgIGluZm8uc21vb3RoID0gcGFyYW1ldGVy
cy5nZW5lcmFsTGV2ZWxJREMgPD0gbWF4UGxheWJhY2tMZXZlbDsKICAgICB9CiAKLSAgICByZXR1
cm4gdHJ1ZTsKKyAgICByZXR1cm4gaW5mbzsKIH0KIAotc3RhdGljIE9wdGlvbmFsPENNVmlkZW9D
b2RlY1R5cGU+IGNvZGVjVHlwZUZvckRvVmlDb2RlY1N0cmluZyhjb25zdCBTdHJpbmcmIGNvZGVj
U3RyaW5nKQorc3RhdGljIENNVmlkZW9Db2RlY1R5cGUgY29kZWNUeXBlKERvVmlQYXJhbWV0ZXJz
OjpDb2RlYyBjb2RlYykKIHsKLSAgICBzdGF0aWMgYXV0byBtYXAgPSBtYWtlTmV2ZXJEZXN0cm95
ZWQ8TWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPFN0cmluZywgQ01WaWRl
b0NvZGVjVHlwZT4+KHsKLSAgICAgICAgeyAiYXZjMSJfcywga0NNVmlkZW9Db2RlY1R5cGVfSDI2
NCB9LAotICAgICAgICB7ICJhdmMzIl9zLCBrQ01WaWRlb0NvZGVjVHlwZV9IMjY0IH0sCi0gICAg
ICAgIHsgImh2YzEiX3MsIGtDTVZpZGVvQ29kZWNUeXBlX0hFVkMgfSwKLSAgICAgICAgeyAiaGV2
MSJfcywga0NNVmlkZW9Db2RlY1R5cGVfSEVWQyB9LAotICAgIH0pOwotCi0gICAgYXV0byBmaW5k
UmVzdWx0ID0gbWFwLmdldCgpLmZpbmQoY29kZWNTdHJpbmcpOwotICAgIGlmIChmaW5kUmVzdWx0
ID09IG1hcC5nZXQoKS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICBy
ZXR1cm4gZmluZFJlc3VsdC0+dmFsdWU7CisgICAgc3dpdGNoIChjb2RlYykgeworICAgIGNhc2Ug
RG9WaVBhcmFtZXRlcnM6OkNvZGVjOjpBVkMxOgorICAgIGNhc2UgRG9WaVBhcmFtZXRlcnM6OkNv
ZGVjOjpBVkMzOgorICAgICAgICByZXR1cm4ga0NNVmlkZW9Db2RlY1R5cGVfSDI2NDsKKyAgICBj
YXNlIERvVmlQYXJhbWV0ZXJzOjpDb2RlYzo6SEVWMToKKyAgICBjYXNlIERvVmlQYXJhbWV0ZXJz
OjpDb2RlYzo6SFZDMToKKyAgICAgICAgcmV0dXJuIGtDTVZpZGVvQ29kZWNUeXBlX0hFVkM7Cisg
ICAgfQogfQogCi1zdGF0aWMgT3B0aW9uYWw8VmVjdG9yPHVuc2lnbmVkIHNob3J0Pj4gQ0ZTdHJp
bmdBcnJheVRvTnVtYmVyVmVjdG9yKENGQXJyYXlSZWYgYXJyYXlDRikKK3N0YXRpYyBPcHRpb25h
bDxWZWN0b3I8dWludDE2X3Q+PiBwYXJzZVN0cmluZ0FycmF5RnJvbURpY3Rpb25hcnlUb1VJbnQx
NlZlY3RvcihDRkRpY3Rpb25hcnlSZWYgZGljdGlvbmFyeSwgY29uc3Qgdm9pZCoga2V5KQogewot
ICAgIGlmICghYXJyYXlDRiB8fCBDRkdldFR5cGVJRChhcnJheUNGKSAhPSBDRkFycmF5R2V0VHlw
ZUlEKCkpCisgICAgYXV0byB2YWx1ZSA9IENGRGljdGlvbmFyeUdldFZhbHVlKGRpY3Rpb25hcnks
IGtleSk7CisgICAgaWYgKCF2YWx1ZSB8fCBDRkdldFR5cGVJRCh2YWx1ZSkgIT0gQ0ZBcnJheUdl
dFR5cGVJRCgpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgYXV0byBhcnJh
eU5TID0gKF9fYnJpZGdlIE5TQXJyYXk8TlNTdHJpbmcqPiopYXJyYXlDRjsKLSAgICBWZWN0b3I8
dW5zaWduZWQgc2hvcnQ+IHZhbHVlczsKLSAgICB2YWx1ZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0
eShhcnJheU5TLmNvdW50KTsKLQotICAgIGJvb2wgYXJlQWxsVmFsaWROdW1iZXJzID0gdHJ1ZTsK
LSAgICBbYXJyYXlOUyBlbnVtZXJhdGVPYmplY3RzVXNpbmdCbG9jazpbJl0gKE5TU3RyaW5nKiB2
YWx1ZSwgTlNVSW50ZWdlciwgQk9PTCAqc3RvcCkgewotICAgICAgICBpZiAoIVt2YWx1ZSBpc0tp
bmRPZkNsYXNzOk5TU3RyaW5nLmNsYXNzXSkgewotICAgICAgICAgICAgYXJlQWxsVmFsaWROdW1i
ZXJzID0gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoc3RvcCkKLSAgICAgICAgICAgICAgICAqc3Rv
cCA9IHRydWU7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQorICAgIE5TQXJyYXkg
KmFycmF5ID0gKF9fYnJpZGdlIE5TQXJyYXkgKil2YWx1ZTsKKyAgICBWZWN0b3I8dWludDE2X3Q+
IHZlY3RvcjsKKyAgICB2ZWN0b3IucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShhcnJheS5jb3VudCk7
CisgICAgZm9yIChpZCB2YWx1ZSBpbiBhcnJheSkgeworICAgICAgICBpZiAoIVt2YWx1ZSBpc0tp
bmRPZkNsYXNzOk5TU3RyaW5nLmNsYXNzXSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiAgICAgICAgIGJvb2wgaXNWYWxpZE51bWJlciA9IGZhbHNlOwotICAgICAgICBhdXRvIG51
bWVyaWNWYWx1ZSA9IHRvSW50ZWdyYWxUeXBlPHVuc2lnbmVkIHNob3J0PihTdHJpbmcodmFsdWUp
LCAmaXNWYWxpZE51bWJlcik7Ci0gICAgICAgIGlmICghaXNWYWxpZE51bWJlcikgewotICAgICAg
ICAgICAgYXJlQWxsVmFsaWROdW1iZXJzID0gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoc3RvcCkK
LSAgICAgICAgICAgICAgICAqc3RvcCA9IHRydWU7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLQotICAgICAgICB2YWx1ZXMudW5jaGVja2VkQXBwZW5kKG51bWVyaWNWYWx1ZSk7Ci0g
ICAgfV07Ci0KLSAgICBpZiAoIWFyZUFsbFZhbGlkTnVtYmVycykKLSAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKLSAgICByZXR1cm4gdmFsdWVzOworICAgICAgICBhdXRvIG51bWVyaWNWYWx1
ZSA9IHRvSW50ZWdyYWxUeXBlPHVpbnQxNl90PihTdHJpbmcoKE5TU3RyaW5nICopdmFsdWUpLCAm
aXNWYWxpZE51bWJlcik7CisgICAgICAgIGlmICghaXNWYWxpZE51bWJlcikKKyAgICAgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIHZlY3Rvci51bmNoZWNrZWRBcHBlbmQobnVt
ZXJpY1ZhbHVlKTsKKyAgICB9CisgICAgcmV0dXJuIHZlY3RvcjsKIH0KIAotYm9vbCB2YWxpZGF0
ZURvVmlQYXJhbWV0ZXJzKERvVmlQYXJhbWV0ZXJTZXQmIHBhcmFtZXRlcnMsIE1lZGlhQ2FwYWJp
bGl0aWVzSW5mbyYgaW5mbywgYm9vbCBoYXNBbHBoYUNoYW5uZWwsIGJvb2wgaGRyU3VwcG9ydCkK
K09wdGlvbmFsPE1lZGlhQ2FwYWJpbGl0aWVzSW5mbz4gdmFsaWRhdGVEb1ZpUGFyYW1ldGVycyhj
b25zdCBEb1ZpUGFyYW1ldGVycyYgcGFyYW1ldGVycywgYm9vbCBoYXNBbHBoYUNoYW5uZWwsIGJv
b2wgaGRyU3VwcG9ydCkKIHsKICAgICBpZiAoaGFzQWxwaGFDaGFubmVsKQotICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICBpZiAoaGRyU3Vw
cG9ydCkgewogICAgICAgICAvLyBQbGF0Zm9ybSBzdXBwb3J0cyBIRFIgcGxheWJhY2sgb2YgSEVW
QyBNYWluMTAgUHJvZmlsZSwgd2hpY2ggaXMgc2lnbmFsbGVkIGJ5IERvVmkgcHJvZmlsZXMgNCwg
NSwgNywgJiA4LgpAQCAtMTg5LDUwICsxNzMsNDEgQEAgYm9vbCB2YWxpZGF0ZURvVmlQYXJhbWV0
ZXJzKERvVmlQYXJhbWV0ZXJTZXQmIHBhcmFtZXRlcnMsIE1lZGlhQ2FwYWJpbGl0aWVzSW5mbyYK
ICAgICAgICAgY2FzZSA4OgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwogICAgICAgICB9CiAgICAgfQogCi0gICAgYXV0byBjb2RlY1R5cGUgPSBjb2RlY1R5cGVGb3JE
b1ZpQ29kZWNTdHJpbmcocGFyYW1ldGVycy5jb2RlY05hbWUpOwotICAgIGlmICghY29kZWNUeXBl
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBPU1N0YXR1cyBzdGF0dXMgPSBWVFNlbGVj
dEFuZENyZWF0ZVZpZGVvRGVjb2Rlckluc3RhbmNlKGNvZGVjVHlwZS52YWx1ZSgpLCBrQ0ZBbGxv
Y2F0b3JEZWZhdWx0LCBudWxscHRyLCBudWxscHRyKTsKKyAgICBPU1N0YXR1cyBzdGF0dXMgPSBW
VFNlbGVjdEFuZENyZWF0ZVZpZGVvRGVjb2Rlckluc3RhbmNlKGNvZGVjVHlwZShwYXJhbWV0ZXJz
LmNvZGVjKSwga0NGQWxsb2NhdG9yRGVmYXVsdCwgbnVsbHB0ciwgbnVsbHB0cik7CiAgICAgaWYg
KHN0YXR1cyAhPSBub0VycikKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogCiAgICAgaWYgKCFjYW5Mb2FkX1ZpZGVvVG9vbGJveF9WVENvcHlIRVZD
RGVjb2RlckNhcGFiaWxpdGllc0RpY3Rpb25hcnkoKQogICAgICAgICB8fCAhY2FuTG9hZF9WaWRl
b1Rvb2xib3hfa1ZURG9sYnlWaXNpb25EZWNvZGVyQ2FwYWJpbGl0eV9TdXBwb3J0ZWRQcm9maWxl
cygpCiAgICAgICAgIHx8ICFjYW5Mb2FkX1ZpZGVvVG9vbGJveF9rVlREb2xieVZpc2lvbkRlY29k
ZXJDYXBhYmlsaXR5X1N1cHBvcnRlZExldmVscygpCiAgICAgICAgIHx8ICFjYW5Mb2FkX1ZpZGVv
VG9vbGJveF9rVlREb2xieVZpc2lvbkRlY29kZXJDYXBhYmlsaXR5X0lzSGFyZHdhcmVBY2NlbGVy
YXRlZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiAKLSAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBjYXBhYmlsaXRpZXMgPSBhZG9w
dENGKFZUQ29weUhFVkNEZWNvZGVyQ2FwYWJpbGl0aWVzRGljdGlvbmFyeSgpKTsKKyAgICBhdXRv
IGNhcGFiaWxpdGllcyA9IGFkb3B0Q0YoVlRDb3B5SEVWQ0RlY29kZXJDYXBhYmlsaXRpZXNEaWN0
aW9uYXJ5KCkpOwogICAgIGlmICghY2FwYWJpbGl0aWVzKQotICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBhdXRvIHN1cHBvcnRlZFByb2Zp
bGVzQ0YgPSAoQ0ZBcnJheVJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShjYXBhYmlsaXRpZXMuZ2V0
KCksIGtWVERvbGJ5VmlzaW9uRGVjb2RlckNhcGFiaWxpdHlfU3VwcG9ydGVkUHJvZmlsZXMpOwot
ICAgIGF1dG8gc3VwcG9ydGVkUHJvZmlsZXMgPSBDRlN0cmluZ0FycmF5VG9OdW1iZXJWZWN0b3Io
c3VwcG9ydGVkUHJvZmlsZXNDRik7CisgICAgYXV0byBzdXBwb3J0ZWRQcm9maWxlcyA9IHBhcnNl
U3RyaW5nQXJyYXlGcm9tRGljdGlvbmFyeVRvVUludDE2VmVjdG9yKGNhcGFiaWxpdGllcy5nZXQo
KSwga1ZURG9sYnlWaXNpb25EZWNvZGVyQ2FwYWJpbGl0eV9TdXBwb3J0ZWRQcm9maWxlcyk7CiAg
ICAgaWYgKCFzdXBwb3J0ZWRQcm9maWxlcykKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgYXV0byBzdXBwb3J0ZWRMZXZlbHNDRiA9IChD
RkFycmF5UmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKGNhcGFiaWxpdGllcy5nZXQoKSwga1ZURG9s
YnlWaXNpb25EZWNvZGVyQ2FwYWJpbGl0eV9TdXBwb3J0ZWRMZXZlbHMpOwotICAgIGF1dG8gc3Vw
cG9ydGVkTGV2ZWxzID0gQ0ZTdHJpbmdBcnJheVRvTnVtYmVyVmVjdG9yKHN1cHBvcnRlZExldmVs
c0NGKTsKKyAgICBhdXRvIHN1cHBvcnRlZExldmVscyA9IHBhcnNlU3RyaW5nQXJyYXlGcm9tRGlj
dGlvbmFyeVRvVUludDE2VmVjdG9yKGNhcGFiaWxpdGllcy5nZXQoKSwga1ZURG9sYnlWaXNpb25E
ZWNvZGVyQ2FwYWJpbGl0eV9TdXBwb3J0ZWRMZXZlbHMpOwogICAgIGlmICghc3VwcG9ydGVkTGV2
ZWxzKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CiAKICAgICBhdXRvIGlzSGFyZHdhcmVBY2NlbGVyYXRlZENGID0gKENGQm9vbGVhblJlZilDRkRp
Y3Rpb25hcnlHZXRWYWx1ZShjYXBhYmlsaXRpZXMuZ2V0KCksIGtWVERvbGJ5VmlzaW9uRGVjb2Rl
ckNhcGFiaWxpdHlfSXNIYXJkd2FyZUFjY2VsZXJhdGVkKTsKICAgICBpZiAoIWlzSGFyZHdhcmVB
Y2NlbGVyYXRlZENGIHx8IENGR2V0VHlwZUlEKGlzSGFyZHdhcmVBY2NlbGVyYXRlZENGKSAhPSBD
RkJvb2xlYW5HZXRUeXBlSUQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OworICAgIGJvb2wgaXNIYXJkd2FyZUFjY2VsZXJhdGVkID0gQ0ZCb29s
ZWFuR2V0VmFsdWUoaXNIYXJkd2FyZUFjY2VsZXJhdGVkQ0YpOwogCiAgICAgaWYgKCFzdXBwb3J0
ZWRQcm9maWxlcy52YWx1ZSgpLmNvbnRhaW5zKHBhcmFtZXRlcnMuYml0c3RyZWFtUHJvZmlsZUlE
KSB8fCAhc3VwcG9ydGVkTGV2ZWxzLnZhbHVlKCkuY29udGFpbnMocGFyYW1ldGVycy5iaXRzdHJl
YW1MZXZlbElEKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaW5mby5zdXBwb3J0ZWQg
PSB0cnVlOwotICAgIGluZm8uc21vb3RoID0gdHJ1ZTsKLSAgICBpbmZvLnBvd2VyRWZmaWNpZW50
ID0gQ0ZCb29sZWFuR2V0VmFsdWUoaXNIYXJkd2FyZUFjY2VsZXJhdGVkQ0YpOworICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHsgeyB0
cnVlLCB0cnVlLCBpc0hhcmR3YXJlQWNjZWxlcmF0ZWQgfSB9OwogfQogCiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9NZWRpYUVuZ2luZUNvbmZp
Z3VyYXRpb25GYWN0b3J5Q29jb2EuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY29jb2EvTWVkaWFFbmdpbmVDb25maWd1cmF0aW9uRmFjdG9yeUNvY29hLmNwcAppbmRleCA4
OWUyMWNmZTk5MWM3Y2VkNTk1YmEzZDBiMTcxYzMyNzJhMDhlMDVhLi5jODk2Y2E0MGE2N2MyMTQx
ZGNkMjA2M2U1ZDBjNzY4NjFhNzRmMWM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9NZWRpYUVuZ2luZUNvbmZpZ3VyYXRpb25GYWN0b3J5Q29jb2Eu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL01lZGlhRW5n
aW5lQ29uZmlndXJhdGlvbkZhY3RvcnlDb2NvYS5jcHAKQEAgLTQwLDcgKzQwLDcgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgQ01WaWRlb0NvZGVjVHlwZSB2aWRlb0NvZGVjVHlw
ZUZyb21SRkM0MjgxVHlwZShTdHJpbmcgdHlwZSkKK3N0YXRpYyBDTVZpZGVvQ29kZWNUeXBlIHZp
ZGVvQ29kZWNUeXBlRnJvbVJGQzQyODFUeXBlKFN0cmluZ1ZpZXcgdHlwZSkKIHsKICAgICBpZiAo
dHlwZS5zdGFydHNXaXRoKCJtcDR2IikpCiAgICAgICAgIHJldHVybiBrQ01WaWRlb0NvZGVjVHlw
ZV9NUEVHNFZpZGVvOwpAQCAtNTUsNjYgKzU1LDYyIEBAIHN0YXRpYyBDTVZpZGVvQ29kZWNUeXBl
IHZpZGVvQ29kZWNUeXBlRnJvbVJGQzQyODFUeXBlKFN0cmluZyB0eXBlKQogICAgIHJldHVybiAw
OwogfQogCi12b2lkIGNyZWF0ZU1lZGlhUGxheWVyRGVjb2RpbmdDb25maWd1cmF0aW9uQ29jb2Eo
TWVkaWFEZWNvZGluZ0NvbmZpZ3VyYXRpb24mJiBjb25maWd1cmF0aW9uLCBXVEY6OkZ1bmN0aW9u
PHZvaWQoTWVkaWFDYXBhYmlsaXRpZXNEZWNvZGluZ0luZm8mJik+JiYgY2FsbGJhY2spCitzdGF0
aWMgT3B0aW9uYWw8TWVkaWFDYXBhYmlsaXRpZXNJbmZvPiBjb21wdXRlTWVkaWFDYXBhYmlsaXRp
ZXNJbmZvKGNvbnN0IE1lZGlhRGVjb2RpbmdDb25maWd1cmF0aW9uJiBjb25maWd1cmF0aW9uKQog
ewotICAgIE1lZGlhQ2FwYWJpbGl0aWVzRGVjb2RpbmdJbmZvIGluZm87CisgICAgTWVkaWFDYXBh
YmlsaXRpZXNJbmZvIGluZm87CiAKICAgICBpZiAoY29uZmlndXJhdGlvbi52aWRlbykgewogICAg
ICAgICBhdXRvJiB2aWRlb0NvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uLnZpZGVvLnZhbHVl
KCk7CiAgICAgICAgIE1lZGlhRW5naW5lU3VwcG9ydFBhcmFtZXRlcnMgcGFyYW1ldGVycyB7IH07
CiAgICAgICAgIHBhcmFtZXRlcnMudHlwZSA9IENvbnRlbnRUeXBlKHZpZGVvQ29uZmlndXJhdGlv
bi5jb250ZW50VHlwZSk7CiAgICAgICAgIHBhcmFtZXRlcnMuaXNNZWRpYVNvdXJjZSA9IGNvbmZp
Z3VyYXRpb24udHlwZSA9PSBNZWRpYURlY29kaW5nVHlwZTo6TWVkaWFTb3VyY2U7Ci0gICAgICAg
IGlmIChNZWRpYVBsYXllcjo6c3VwcG9ydHNUeXBlKHBhcmFtZXRlcnMpICE9IE1lZGlhUGxheWVy
OjpTdXBwb3J0c1R5cGU6OklzU3VwcG9ydGVkKSB7Ci0gICAgICAgICAgICBjYWxsYmFjayh7eyB9
LCBXVEZNb3ZlKGNvbmZpZ3VyYXRpb24pfSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KKyAgICAgICAgaWYgKE1lZGlhUGxheWVyOjpzdXBwb3J0c1R5cGUocGFyYW1ldGVycykgIT0g
TWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZTo6SXNTdXBwb3J0ZWQpCisgICAgICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogCiAgICAgICAgIGF1dG8gY29kZWNzID0gcGFyYW1ldGVycy50eXBl
LmNvZGVjcygpOwotICAgICAgICBpZiAoY29kZWNzLnNpemUoKSAhPSAxKSB7Ci0gICAgICAgICAg
ICBjYWxsYmFjayh7eyB9LCBXVEZNb3ZlKGNvbmZpZ3VyYXRpb24pfSk7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKGNvZGVjcy5zaXplKCkgIT0gMSkKKyAgICAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICAgICAgaW5mby5zdXBwb3J0ZWQgPSB0
cnVlOwogICAgICAgICBhdXRvJiBjb2RlYyA9IGNvZGVjc1swXTsKICAgICAgICAgYXV0byB2aWRl
b0NvZGVjVHlwZSA9IHZpZGVvQ29kZWNUeXBlRnJvbVJGQzQyODFUeXBlKGNvZGVjKTsKLSAgICAg
ICAgaWYgKCF2aWRlb0NvZGVjVHlwZSAmJiAhKGNvZGVjLnN0YXJ0c1dpdGgoImR2aDEiKSB8fCBj
b2RlYy5zdGFydHNXaXRoKCJkdmhlIikpKSB7Ci0gICAgICAgICAgICBjYWxsYmFjayh7eyB9LCBX
VEZNb3ZlKGNvbmZpZ3VyYXRpb24pfSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
KyAgICAgICAgaWYgKCF2aWRlb0NvZGVjVHlwZSAmJiAhKGNvZGVjLnN0YXJ0c1dpdGgoImR2aDEi
KSB8fCBjb2RlYy5zdGFydHNXaXRoKCJkdmhlIikpKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKIAogICAgICAgICBib29sIGhkclN1cHBvcnRlZCA9IHZpZGVvQ29uZmlndXJhdGlv
bi5jb2xvckdhbXV0IHx8IHZpZGVvQ29uZmlndXJhdGlvbi5oZHJNZXRhZGF0YVR5cGUgfHwgdmlk
ZW9Db25maWd1cmF0aW9uLnRyYW5zZmVyRnVuY3Rpb247CiAgICAgICAgIGJvb2wgYWxwaGFDaGFu
bmVsID0gdmlkZW9Db25maWd1cmF0aW9uLmFscGhhQ2hhbm5lbCAmJiB2aWRlb0NvbmZpZ3VyYXRp
b24uYWxwaGFDaGFubmVsLnZhbHVlKCk7CiAKICAgICAgICAgaWYgKHZpZGVvQ29kZWNUeXBlID09
IGtDTVZpZGVvQ29kZWNUeXBlX0hFVkMpIHsKICAgICAgICAgICAgIGF1dG8gcGFyYW1ldGVycyA9
IHBhcnNlSEVWQ0NvZGVjUGFyYW1ldGVycyhjb2RlYyk7Ci0gICAgICAgICAgICBpZiAoIXBhcmFt
ZXRlcnMgfHwgIXZhbGlkYXRlSEVWQ1BhcmFtZXRlcnMocGFyYW1ldGVycy52YWx1ZSgpLCBpbmZv
LCBhbHBoYUNoYW5uZWwsIGhkclN1cHBvcnRlZCkpIHsKLSAgICAgICAgICAgICAgICBjYWxsYmFj
ayh7eyB9LCBXVEZNb3ZlKGNvbmZpZ3VyYXRpb24pfSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFwYXJhbWV0ZXJzKQorICAgICAgICAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgICAgICBhdXRvIHBhcnNlZEluZm8g
PSB2YWxpZGF0ZUhFVkNQYXJhbWV0ZXJzKCpwYXJhbWV0ZXJzLCBhbHBoYUNoYW5uZWwsIGhkclN1
cHBvcnRlZCk7CisgICAgICAgICAgICBpZiAoIXBhcnNlZEluZm8pCisgICAgICAgICAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgICAgIGluZm8gPSAqcGFyc2VkSW5mbzsKICAg
ICAgICAgfSBlbHNlIGlmIChjb2RlYy5zdGFydHNXaXRoKCJkdmgxIikgfHwgY29kZWMuc3RhcnRz
V2l0aCgiZHZoZSIpKSB7CiAgICAgICAgICAgICBhdXRvIHBhcmFtZXRlcnMgPSBwYXJzZURvVmlD
b2RlY1BhcmFtZXRlcnMoY29kZWMpOwotICAgICAgICAgICAgaWYgKCFwYXJhbWV0ZXJzIHx8ICF2
YWxpZGF0ZURvVmlQYXJhbWV0ZXJzKHBhcmFtZXRlcnMudmFsdWUoKSwgaW5mbywgYWxwaGFDaGFu
bmVsLCBoZHJTdXBwb3J0ZWQpKSB7Ci0gICAgICAgICAgICAgICAgY2FsbGJhY2soe3sgfSwgV1RG
TW92ZShjb25maWd1cmF0aW9uKX0pOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmICghcGFyYW1ldGVycykKKyAgICAgICAgICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OworICAgICAgICAgICAgYXV0byBwYXJzZWRJbmZvID0gdmFsaWRhdGVE
b1ZpUGFyYW1ldGVycygqcGFyYW1ldGVycywgYWxwaGFDaGFubmVsLCBoZHJTdXBwb3J0ZWQpOwor
ICAgICAgICAgICAgaWYgKCFwYXJzZWRJbmZvKQorICAgICAgICAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisgICAgICAgICAgICBpbmZvID0gKnBhcnNlZEluZm87CiAjaWYgRU5BQkxFKFZQ
OSkKICAgICAgICAgfSBlbHNlIGlmICh2aWRlb0NvZGVjVHlwZSA9PSBrQ01WaWRlb0NvZGVjVHlw
ZV9WUDkpIHsKLSAgICAgICAgICAgIGlmICghY29uZmlndXJhdGlvbi5jYW5FeHBvc2VWUDkpIHsK
LSAgICAgICAgICAgICAgICBjYWxsYmFjayh7eyB9LCBXVEZNb3ZlKGNvbmZpZ3VyYXRpb24pfSk7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYXV0
byBjb2RlY0NvbmZpZ3VyYXRpb24gPSBwYXJzZVZQQ29kZWNQYXJhbWV0ZXJzKGNvZGVjKTsKLSAg
ICAgICAgICAgIGlmICghY29kZWNDb25maWd1cmF0aW9uIHx8ICF2YWxpZGF0ZVZQUGFyYW1ldGVy
cygqY29kZWNDb25maWd1cmF0aW9uLCBpbmZvLCB2aWRlb0NvbmZpZ3VyYXRpb24pKSB7Ci0gICAg
ICAgICAgICAgICAgY2FsbGJhY2soe3sgfSwgV1RGTW92ZShjb25maWd1cmF0aW9uKX0pOwotICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghY29u
ZmlndXJhdGlvbi5jYW5FeHBvc2VWUDkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKKyAgICAgICAgICAgIGF1dG8gcGFyYW1ldGVycyA9IHBhcnNlVlBDb2RlY1BhcmFtZXRl
cnMoY29kZWMpOworICAgICAgICAgICAgaWYgKCFwYXJhbWV0ZXJzKQorICAgICAgICAgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgICAgICBhdXRvIHBhcnNlZEluZm8gPSB2YWxp
ZGF0ZVZQUGFyYW1ldGVycygqcGFyYW1ldGVycywgdmlkZW9Db25maWd1cmF0aW9uKTsKKyAgICAg
ICAgICAgIGlmICghcGFyc2VkSW5mbykKKyAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OworICAgICAgICAgICAgaW5mbyA9ICpwYXJzZWRJbmZvOwogI2VuZGlmCiAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICBpZiAoYWxwaGFDaGFubmVsIHx8IGhkclN1cHBvcnRlZCkgewot
ICAgICAgICAgICAgICAgIGNhbGxiYWNrKHt7IH0sIFdURk1vdmUoY29uZmlndXJhdGlvbil9KTsK
LSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
YWxwaGFDaGFubmVsIHx8IGhkclN1cHBvcnRlZCkKKyAgICAgICAgICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwogCiAgICAgICAgICAgICBpZiAoY2FuTG9hZF9WaWRlb1Rvb2xib3hfVlRJc0hh
cmR3YXJlRGVjb2RlU3VwcG9ydGVkKCkpIHsKICAgICAgICAgICAgICAgICBpbmZvLnBvd2VyRWZm
aWNpZW50ID0gVlRJc0hhcmR3YXJlRGVjb2RlU3VwcG9ydGVkKHZpZGVvQ29kZWNUeXBlKTsKQEAg
LTEyNyw0MiArMTIzLDM5IEBAIHZvaWQgY3JlYXRlTWVkaWFQbGF5ZXJEZWNvZGluZ0NvbmZpZ3Vy
YXRpb25Db2NvYShNZWRpYURlY29kaW5nQ29uZmlndXJhdGlvbiYmIGNvCiAgICAgICAgIE1lZGlh
RW5naW5lU3VwcG9ydFBhcmFtZXRlcnMgcGFyYW1ldGVycyB7IH07CiAgICAgICAgIHBhcmFtZXRl
cnMudHlwZSA9IENvbnRlbnRUeXBlKGNvbmZpZ3VyYXRpb24uYXVkaW8udmFsdWUoKS5jb250ZW50
VHlwZSk7CiAgICAgICAgIHBhcmFtZXRlcnMuaXNNZWRpYVNvdXJjZSA9IGNvbmZpZ3VyYXRpb24u
dHlwZSA9PSBNZWRpYURlY29kaW5nVHlwZTo6TWVkaWFTb3VyY2U7Ci0gICAgICAgIGlmIChNZWRp
YVBsYXllcjo6c3VwcG9ydHNUeXBlKHBhcmFtZXRlcnMpICE9IE1lZGlhUGxheWVyOjpTdXBwb3J0
c1R5cGU6OklzU3VwcG9ydGVkKSB7Ci0gICAgICAgICAgICBjYWxsYmFjayh7eyB9LCBXVEZNb3Zl
KGNvbmZpZ3VyYXRpb24pfSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICAg
ICAgaWYgKE1lZGlhUGxheWVyOjpzdXBwb3J0c1R5cGUocGFyYW1ldGVycykgIT0gTWVkaWFQbGF5
ZXI6OlN1cHBvcnRzVHlwZTo6SXNTdXBwb3J0ZWQpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogCiAgICAgICAgIGlmIChjb25maWd1cmF0aW9uLmF1ZGlvLT5zcGF0aWFsUmVuZGVy
aW5nLnZhbHVlT3IoZmFsc2UpKSB7CiAgICAgICAgICAgICBhdXRvIGNvbnRleHQgPSBQQUw6Ok91
dHB1dENvbnRleHQ6OnNoYXJlZEF1ZGlvUHJlc2VudGF0aW9uT3V0cHV0Q29udGV4dCgpOwotICAg
ICAgICAgICAgaWYgKCFjb250ZXh0KSB7Ci0gICAgICAgICAgICAgICAgY2FsbGJhY2soe3sgfSwg
V1RGTW92ZShjb25maWd1cmF0aW9uKX0pOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmICghY29udGV4dCkKKyAgICAgICAgICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogCiAgICAgICAgICAgICBhdXRvIGRldmljZXMgPSBjb250ZXh0LT5v
dXRwdXREZXZpY2VzKCk7CiAgICAgICAgICAgICBpZiAoZGV2aWNlcy5pc0VtcHR5KCkgfHwgIVdU
Rjo6YWxsT2YoZGV2aWNlcywgW10oYXV0byYgZGV2aWNlKSB7CiAgICAgICAgICAgICAgICAgcmV0
dXJuIGRldmljZS5zdXBwb3J0c1NwYXRpYWxBdWRpbygpOwotICAgICAgICAgICAgfSkpIHsKLSAg
ICAgICAgICAgICAgICBjYWxsYmFjayh7eyB9LCBXVEZNb3ZlKGNvbmZpZ3VyYXRpb24pfSk7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgfSkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgICAgICAgICAgLy8gT25s
eSBtdWx0aWNoYW5uZWwgYXVkaW8gY2FuIGJlIHNwYXRpYWxseSByZW5kZXJlZC4KLSAgICAgICAg
ICAgIGlmICghY29uZmlndXJhdGlvbi5hdWRpby0+Y2hhbm5lbHMuaXNOdWxsKCkpIHsKLSAgICAg
ICAgICAgICAgICBib29sIGlzT2sgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBhdXRvIHBhcnNl
ZENoYW5uZWxzID0gY29uZmlndXJhdGlvbi5hdWRpby0+Y2hhbm5lbHMudG9Eb3VibGUoJmlzT2sp
OwotICAgICAgICAgICAgICAgIGlmICghaXNPayB8fCBwYXJzZWRDaGFubmVscyA8PSAyKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKHt7IH0sIFdURk1vdmUoY29uZmlndXJhdGlvbil9
KTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmICghY29uZmlndXJhdGlvbi5hdWRpby0+Y2hhbm5lbHMu
aXNOdWxsKCkgJiYgY29uZmlndXJhdGlvbi5hdWRpby0+Y2hhbm5lbHMudG9Eb3VibGUoKSA8PSAy
KQorICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIH0KICAgICAg
ICAgaW5mby5zdXBwb3J0ZWQgPSB0cnVlOwogICAgIH0KIAotICAgIGluZm8uc3VwcG9ydGVkQ29u
ZmlndXJhdGlvbiA9IFdURk1vdmUoY29uZmlndXJhdGlvbik7CisgICAgcmV0dXJuIGluZm87Cit9
CiAKLSAgICBjYWxsYmFjayhXVEZNb3ZlKGluZm8pKTsKK3ZvaWQgY3JlYXRlTWVkaWFQbGF5ZXJE
ZWNvZGluZ0NvbmZpZ3VyYXRpb25Db2NvYShNZWRpYURlY29kaW5nQ29uZmlndXJhdGlvbiYmIGNv
bmZpZ3VyYXRpb24sIFdURjo6RnVuY3Rpb248dm9pZChNZWRpYUNhcGFiaWxpdGllc0RlY29kaW5n
SW5mbyYmKT4mJiBjYWxsYmFjaykKK3sKKyAgICBhdXRvIGluZm8gPSBjb21wdXRlTWVkaWFDYXBh
YmlsaXRpZXNJbmZvKGNvbmZpZ3VyYXRpb24pOworICAgIGlmICghaW5mbykKKyAgICAgICAgY2Fs
bGJhY2soeyB7IH0sIFdURk1vdmUoY29uZmlndXJhdGlvbikgfSk7CisgICAgZWxzZSB7CisgICAg
ICAgIE1lZGlhQ2FwYWJpbGl0aWVzRGVjb2RpbmdJbmZvIGluZm9XaXRoQ29uZmlndXJhdGlvbiA9
IHsgV1RGTW92ZSgqaW5mbyksIFdURk1vdmUoY29uZmlndXJhdGlvbikgfTsKKyAgICAgICAgY2Fs
bGJhY2soV1RGTW92ZShpbmZvV2l0aENvbmZpZ3VyYXRpb24pKTsKKyAgICB9CiB9CiAKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1ZQOVV0aWxp
dGllc0NvY29hLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9WUDlV
dGlsaXRpZXNDb2NvYS5oCmluZGV4IGZjYWY5OWFlZDMyNjBlYjVjYjBkMWM1NmNlZTA5ZGU2ZWZi
MGRjMmUuLjdjYTU0OWY4ZTkwYWRkZWNmYTdhYThmM2ZkMjdhYTZlNjc3ZTg4ODEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1ZQOVV0aWxpdGllc0Nv
Y29hLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvVlA5VXRp
bGl0aWVzQ29jb2EuaApAQCAtNDEsMTMgKzQxLDEzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHN0
cnVjdCBNZWRpYUNhcGFiaWxpdGllc0luZm87CiBzdHJ1Y3QgVmlkZW9Db25maWd1cmF0aW9uOwog
Ci1XRUJDT1JFX0VYUE9SVCBleHRlcm4gdm9pZCByZWdpc3RlcldlYktpdFZQOURlY29kZXIoKTsK
LVdFQkNPUkVfRVhQT1JUIGV4dGVybiB2b2lkIHJlZ2lzdGVyV2ViS2l0VlA4RGVjb2RlcigpOwot
V0VCQ09SRV9FWFBPUlQgZXh0ZXJuIHZvaWQgcmVnaXN0ZXJTdXBwbGVtZW50YWxWUDlEZWNvZGVy
KCk7Ci1leHRlcm4gYm9vbCBpc1ZQOURlY29kZXJBdmFpbGFibGUoKTsKLWV4dGVybiBib29sIGlz
VlA4RGVjb2RlckF2YWlsYWJsZSgpOwotZXh0ZXJuIGJvb2wgaXNWUENvZGVjQ29uZmlndXJhdGlv
blJlY29yZFN1cHBvcnRlZChWUENvZGVjQ29uZmlndXJhdGlvblJlY29yZCYpOwotZXh0ZXJuIGJv
b2wgdmFsaWRhdGVWUFBhcmFtZXRlcnMoVlBDb2RlY0NvbmZpZ3VyYXRpb25SZWNvcmQmLCBNZWRp
YUNhcGFiaWxpdGllc0luZm8mLCBjb25zdCBWaWRlb0NvbmZpZ3VyYXRpb24mKTsKK1dFQkNPUkVf
RVhQT1JUIHZvaWQgcmVnaXN0ZXJXZWJLaXRWUDlEZWNvZGVyKCk7CitXRUJDT1JFX0VYUE9SVCB2
b2lkIHJlZ2lzdGVyV2ViS2l0VlA4RGVjb2RlcigpOworV0VCQ09SRV9FWFBPUlQgdm9pZCByZWdp
c3RlclN1cHBsZW1lbnRhbFZQOURlY29kZXIoKTsKK2Jvb2wgaXNWUDlEZWNvZGVyQXZhaWxhYmxl
KCk7Citib29sIGlzVlA4RGVjb2RlckF2YWlsYWJsZSgpOworYm9vbCBpc1ZQQ29kZWNDb25maWd1
cmF0aW9uUmVjb3JkU3VwcG9ydGVkKGNvbnN0IFZQQ29kZWNDb25maWd1cmF0aW9uUmVjb3JkJik7
CitPcHRpb25hbDxNZWRpYUNhcGFiaWxpdGllc0luZm8+IHZhbGlkYXRlVlBQYXJhbWV0ZXJzKGNv
bnN0IFZQQ29kZWNDb25maWd1cmF0aW9uUmVjb3JkJiwgY29uc3QgVmlkZW9Db25maWd1cmF0aW9u
Jik7CiAKIFJldGFpblB0cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVmPiBjcmVhdGVGb3JtYXREZXNj
cmlwdGlvbkZyb21WUDlIZWFkZXJQYXJzZXIoY29uc3QgdnA5X3BhcnNlcjo6VnA5SGVhZGVyUGFy
c2VyJiwgY29uc3Qgd2VibTo6RWxlbWVudDx3ZWJtOjpDb2xvdXI+Jik7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1ZQOVV0aWxpdGllc0NvY29h
Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvVlA5VXRpbGl0aWVz
Q29jb2EubW0KaW5kZXggYzVmYTM4ODQ3OGU0ZTQyYTUwNzhlODIxZjdhMzg4Yjg5YTY3MjYxMi4u
MzJjYWY3MTU2N2VkZjlkZWI3MGJhYzcxZjI4OWIyMzM0ZGY1Njc1MiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvVlA5VXRpbGl0aWVzQ29jb2EubW0K
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvVlA5VXRpbGl0aWVz
Q29jb2EubW0KQEAgLTE0OCw3ICsxNDgsNyBAQCBzdGF0aWMgYm9vbCB2cDlIYXJkd2FyZURlY29k
ZXJBdmFpbGFibGUoKQogICAgIHJldHVybiBjYW5Mb2FkX1ZpZGVvVG9vbGJveF9WVElzSGFyZHdh
cmVEZWNvZGVTdXBwb3J0ZWQoKSAmJiBWVElzSGFyZHdhcmVEZWNvZGVTdXBwb3J0ZWQoa0NNVmlk
ZW9Db2RlY1R5cGVfVlA5KTsKIH0KIAotc3RhdGljIGJvb2wgaXNWUDlDb2RlY0NvbmZpZ3VyYXRp
b25SZWNvcmRTdXBwb3J0ZWQoVlBDb2RlY0NvbmZpZ3VyYXRpb25SZWNvcmQmIGNvZGVjQ29uZmln
dXJhdGlvbikKK3N0YXRpYyBib29sIGlzVlA5Q29kZWNDb25maWd1cmF0aW9uUmVjb3JkU3VwcG9y
dGVkKGNvbnN0IFZQQ29kZWNDb25maWd1cmF0aW9uUmVjb3JkJiBjb2RlY0NvbmZpZ3VyYXRpb24p
CiB7CiAgICAgaWYgKCFpc1ZQOURlY29kZXJBdmFpbGFibGUoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwpAQCAtMTk5LDcgKzE5OSw3IEBAIHN0YXRpYyBib29sIGlzVlA5Q29kZWNDb25maWd1cmF0
aW9uUmVjb3JkU3VwcG9ydGVkKFZQQ29kZWNDb25maWd1cmF0aW9uUmVjb3JkJiBjCiAgICAgcmV0
dXJuIGhhczRrU2NyZWVuOwogfQogCi1zdGF0aWMgYm9vbCBpc1ZQOENvZGVjQ29uZmlndXJhdGlv
blJlY29yZFN1cHBvcnRlZChWUENvZGVjQ29uZmlndXJhdGlvblJlY29yZCYgY29kZWNDb25maWd1
cmF0aW9uKQorc3RhdGljIGJvb2wgaXNWUDhDb2RlY0NvbmZpZ3VyYXRpb25SZWNvcmRTdXBwb3J0
ZWQoY29uc3QgVlBDb2RlY0NvbmZpZ3VyYXRpb25SZWNvcmQmIGNvZGVjQ29uZmlndXJhdGlvbikK
IHsKICAgICBpZiAoIWlzVlA4RGVjb2RlckF2YWlsYWJsZSgpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CkBAIC0yMTksNyArMjE5LDcgQEAgc3RhdGljIGJvb2wgaXNWUDhDb2RlY0NvbmZpZ3VyYXRp
b25SZWNvcmRTdXBwb3J0ZWQoVlBDb2RlY0NvbmZpZ3VyYXRpb25SZWNvcmQmIGMKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotYm9vbCBpc1ZQQ29kZWNDb25maWd1cmF0aW9uUmVjb3JkU3VwcG9ydGVk
KFZQQ29kZWNDb25maWd1cmF0aW9uUmVjb3JkJiBjb2RlY0NvbmZpZ3VyYXRpb24pCitib29sIGlz
VlBDb2RlY0NvbmZpZ3VyYXRpb25SZWNvcmRTdXBwb3J0ZWQoY29uc3QgVlBDb2RlY0NvbmZpZ3Vy
YXRpb25SZWNvcmQmIGNvZGVjQ29uZmlndXJhdGlvbikKIHsKICAgICBpZiAoY29kZWNDb25maWd1
cmF0aW9uLmNvZGVjTmFtZSA9PSAidnAwOCIgfHwgY29kZWNDb25maWd1cmF0aW9uLmNvZGVjTmFt
ZSA9PSAidnA4IikKICAgICAgICAgcmV0dXJuIGlzVlA4Q29kZWNDb25maWd1cmF0aW9uUmVjb3Jk
U3VwcG9ydGVkKGNvZGVjQ29uZmlndXJhdGlvbik7CkBAIC0yMzAsMzYgKzIzMCwzOCBAQCBib29s
IGlzVlBDb2RlY0NvbmZpZ3VyYXRpb25SZWNvcmRTdXBwb3J0ZWQoVlBDb2RlY0NvbmZpZ3VyYXRp
b25SZWNvcmQmIGNvZGVjQ29uZgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCB2YWxpZGF0
ZVZQUGFyYW1ldGVycyhWUENvZGVjQ29uZmlndXJhdGlvblJlY29yZCYgY29kZWNDb25maWd1cmF0
aW9uLCBNZWRpYUNhcGFiaWxpdGllc0luZm8mIGluZm8sIGNvbnN0IFZpZGVvQ29uZmlndXJhdGlv
biYgdmlkZW9Db25maWd1cmF0aW9uKQorT3B0aW9uYWw8TWVkaWFDYXBhYmlsaXRpZXNJbmZvPiB2
YWxpZGF0ZVZQUGFyYW1ldGVycyhjb25zdCBWUENvZGVjQ29uZmlndXJhdGlvblJlY29yZCYgY29k
ZWNDb25maWd1cmF0aW9uLCBjb25zdCBWaWRlb0NvbmZpZ3VyYXRpb24mIHZpZGVvQ29uZmlndXJh
dGlvbikKIHsKICAgICBpZiAoIWlzVlBDb2RlY0NvbmZpZ3VyYXRpb25SZWNvcmRTdXBwb3J0ZWQo
Y29kZWNDb25maWd1cmF0aW9uKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogCiAgICAgLy8gVmlkZW9Db25maWd1cmF0aW9uIGFuZCBWUENvZGVj
Q29uZmlndXJhdGlvblJlY29yZCBjYW4gaGF2ZSBjb25mbGljdGluZyB2YWx1ZXMgZm9yIEhEUiBw
cm9wZXJ0aWVzLiBJZiBzbywgcmVqZWN0LgogICAgIGlmICh2aWRlb0NvbmZpZ3VyYXRpb24udHJh
bnNmZXJGdW5jdGlvbikgewogICAgICAgICAvLyBOb3RlOiBUcmFuc2ZlciBDaGFyYWN0ZXJpc3Rp
Y3MgYXJlIGRlZmluZWQgYnkgSVNPL0lFQyAyMzA5MS0yOjIwMTkuCiAgICAgICAgIGlmICgqdmlk
ZW9Db25maWd1cmF0aW9uLnRyYW5zZmVyRnVuY3Rpb24gPT0gVHJhbnNmZXJGdW5jdGlvbjo6U1JH
QiAmJiBjb2RlY0NvbmZpZ3VyYXRpb24udHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3MgPiAxNSkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CiAgICAgICAgIGlmICgqdmlkZW9Db25maWd1cmF0aW9uLnRyYW5zZmVyRnVuY3Rpb24gPT0gVHJh
bnNmZXJGdW5jdGlvbjo6UFEgJiYgY29kZWNDb25maWd1cmF0aW9uLnRyYW5zZmVyQ2hhcmFjdGVy
aXN0aWNzICE9IDE2KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgaWYgKCp2aWRlb0NvbmZpZ3VyYXRpb24udHJhbnNm
ZXJGdW5jdGlvbiA9PSBUcmFuc2ZlckZ1bmN0aW9uOjpITEcgJiYgY29kZWNDb25maWd1cmF0aW9u
LnRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzICE9IDE4KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9CiAKICAgICBpZiAodmlk
ZW9Db25maWd1cmF0aW9uLmNvbG9yR2FtdXQpIHsKICAgICAgICAgaWYgKCp2aWRlb0NvbmZpZ3Vy
YXRpb24uY29sb3JHYW11dCA9PSBDb2xvckdhbXV0OjpSZWMyMDIwICYmIGNvZGVjQ29uZmlndXJh
dGlvbi5jb2xvclByaW1hcmllcyAhPSA5KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9CiAKKyAgICBNZWRpYUNhcGFiaWxp
dGllc0luZm8gaW5mbzsKKwogICAgIGlmICh2cDlIYXJkd2FyZURlY29kZXJBdmFpbGFibGUoKSkg
ewogICAgICAgICAvLyBIVyBWUDkgRGVjb2RlciBkb2VzIG5vdCBzdXBwb3J0IGFscGhhIGNoYW5u
ZWw6CiAgICAgICAgIGlmICh2aWRlb0NvbmZpZ3VyYXRpb24uYWxwaGFDaGFubmVsICYmICp2aWRl
b0NvbmZpZ3VyYXRpb24uYWxwaGFDaGFubmVsKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgICAgICAvLyBIVyBWUDkgRGVj
b2RlciBjYW4gc3VwcG9ydCB1cCB0byA0SyBAIDEyMCBvciA4SyBAIDMwCiAgICAgICAgIGF1dG8g
cmVzb2x1dGlvbiA9IHJlc29sdXRpb25DYXRlZ29yeSh7IChmbG9hdCl2aWRlb0NvbmZpZ3VyYXRp
b24ud2lkdGgsIChmbG9hdCl2aWRlb0NvbmZpZ3VyYXRpb24uaGVpZ2h0IH0pOwogICAgICAgICBp
ZiAocmVzb2x1dGlvbiA+IFJlc29sdXRpb25DYXRlZ29yeTo6Ul84SykKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIGlm
IChyZXNvbHV0aW9uID09IFJlc29sdXRpb25DYXRlZ29yeTo6Ul84SyAmJiB2aWRlb0NvbmZpZ3Vy
YXRpb24uZnJhbWVyYXRlID4gMzApCiAgICAgICAgICAgICBpbmZvLnNtb290aCA9IGZhbHNlOwog
ICAgICAgICBlbHNlIGlmIChyZXNvbHV0aW9uIDw9IFJlc29sdXRpb25DYXRlZ29yeTo6Ul80SyAm
JiB2aWRlb0NvbmZpZ3VyYXRpb24uZnJhbWVyYXRlID4gMTIwKQpAQCAtMjY5LDcgKzI3MSw3IEBA
IGJvb2wgdmFsaWRhdGVWUFBhcmFtZXRlcnMoVlBDb2RlY0NvbmZpZ3VyYXRpb25SZWNvcmQmIGNv
ZGVjQ29uZmlndXJhdGlvbiwgTWVkaWFDCiAKICAgICAgICAgaW5mby5wb3dlckVmZmljaWVudCA9
IHRydWU7CiAgICAgICAgIGluZm8uc3VwcG9ydGVkID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIHJldHVybiBpbmZvOwogICAgIH0KIAogICAgIGluZm8ucG93ZXJFZmZpY2ll
bnQgPSBmYWxzZTsKQEAgLTI4Nyw3ICsyODksNyBAQCBib29sIHZhbGlkYXRlVlBQYXJhbWV0ZXJz
KFZQQ29kZWNDb25maWd1cmF0aW9uUmVjb3JkJiBjb2RlY0NvbmZpZ3VyYXRpb24sIE1lZGlhQwog
ICAgIC8vIEZvciB3YWxsLXBvd2VyZWQgZGV2aWNlcywgYWx3YXlzIHJlcG9ydCBWUDkgYXMgc3Vw
cG9ydGVkLCBldmVuIGlmIG5vdCBwb3dlckVmZmljaWVudC4KICAgICBpZiAoIXN5c3RlbUhhc0Jh
dHRlcnkoKSkgewogICAgICAgICBpbmZvLnN1cHBvcnRlZCA9IHRydWU7Ci0gICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICByZXR1cm4gaW5mbzsKICAgICB9CiAKICAgICAvLyBGb3IgYmF0dGVy
eS1wb3dlcmVkIGRldmljZXMsIGFsd2F5cyByZXBvcnQgVlA5IGFzIHN1cHBvcnRlZCB3aGVuIHJ1
bm5pbmcgb24gQUMgcG93ZXIsCkBAIC0yOTUsNyArMjk3LDcgQEAgYm9vbCB2YWxpZGF0ZVZQUGFy
YW1ldGVycyhWUENvZGVjQ29uZmlndXJhdGlvblJlY29yZCYgY29kZWNDb25maWd1cmF0aW9uLCBN
ZWRpYUMKICAgICAvLyB0byBzdXBwb3J0IDRLIHZpZGVvLgogICAgIGlmIChzeXN0ZW1IYXNBQygp
KSB7CiAgICAgICAgIGluZm8uc3VwcG9ydGVkID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIHJldHVybiBpbmZvOwogICAgIH0KIAogICAgIGJvb2wgaGFzNGtTY3JlZW4gPSBm
YWxzZTsKQEAgLTMxMywxMCArMzE1LDEwIEBAIGJvb2wgdmFsaWRhdGVWUFBhcmFtZXRlcnMoVlBD
b2RlY0NvbmZpZ3VyYXRpb25SZWNvcmQmIGNvZGVjQ29uZmlndXJhdGlvbiwgTWVkaWFDCiAgICAg
fQogCiAgICAgaWYgKCFoYXM0a1NjcmVlbikKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgaW5mby5zdXBwb3J0ZWQgPSB0cnVlOwotICAg
IHJldHVybiB0cnVlOworICAgIHJldHVybiBpbmZvOwogfQogCiBzdGF0aWMgdWludDhfdCBjb252
ZXJ0VG9Db2xvclByaW1hcmllcyhjb25zdCBQcmltYXJpZXMmIGNvZWZmaWNpZW50cykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvSFRUUEhlYWRlck1hcC5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9IVFRQSGVhZGVyTWFwLmgKaW5kZXggY2I2
ODM5NzcwZGJmNmNhZTMyZmE4YmQwMzFhMzdlOTk3ZmU5NWRhZS4uYTBlYzIwNjlkOTI5Nzc3YzRi
MjFlMmE0ZTMwODBlYTk0ZGFkZDM0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9IVFRQSGVhZGVyTWFwLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9IVFRQSGVhZGVyTWFwLmgKQEAgLTI4LDkgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkhU
VFBIZWFkZXJOYW1lcy5oIgogI2luY2x1ZGUgPHV0aWxpdHk+Ci0jaW5jbHVkZSA8d3RmL0hhc2hN
YXAuaD4KLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdIYXNoLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9Mb2Nh
bGVUb1NjcmlwdE1hcHBpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9Mb2Nh
bGVUb1NjcmlwdE1hcHBpbmcuY3BwCmluZGV4IDk2Njc5YzcxNjBiM2JjZTE0OTFlYjkwYzdlZDE3
NjEwNTkwZTAyZmUuLjA0YmQ1MzcxY2M0ZjZhM2UxMzE1NDUyMjFmZGMxMzA2YWJhYmU1YzkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvTG9jYWxlVG9TY3JpcHRNYXBw
aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0xvY2FsZVRvU2NyaXB0
TWFwcGluZy5jcHAKQEAgLTM4LDgxICszOCw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
Ly8gRklYTUU6IENvbnNpZGVyIG1vdmluZyBhbG9uZ3NpZGUgQ29tcGFyYWJsZUFTQ0lJTGl0ZXJh
bCBhbmQgZ2l2aW5nIGFuIGV2ZW4gYmV0dGVyIG5hbWUuCi10ZW1wbGF0ZTx0eXBlbmFtZSBTdG9y
YWdlSW50ZWdlcj4KLWNsYXNzIFBhY2tlZEFTQ0lJTG93ZXJDb2RlcyB7Ci1wdWJsaWM6Ci0gICAg
c3RhdGljX2Fzc2VydChzdGQ6OmlzX3Vuc2lnbmVkX3Y8U3RvcmFnZUludGVnZXI+KTsKLQotICAg
IHRlbXBsYXRlPHVuc2lnbmVkIGNoYXJhY3RlckNvdW50UGx1c09uZT4KLSAgICBjb25zdGV4cHIg
UGFja2VkQVNDSUlMb3dlckNvZGVzKGNvbnN0IGNoYXIgKCZzdHJpbmcpW2NoYXJhY3RlckNvdW50
UGx1c09uZV0pCi0gICAgewotICAgICAgICBjb25zdGV4cHIgdW5zaWduZWQgbGVuZ3RoID0gY2hh
cmFjdGVyQ291bnRQbHVzT25lIC0gMTsKLSAgICAgICAgQVNTRVJUX1VOREVSX0NPTlNURVhQUl9D
T05URVhUKGxlbmd0aCA8PSBzaXplb2YoU3RvcmFnZUludGVnZXIpKTsKLSAgICAgICAgQVNTRVJU
X1VOREVSX0NPTlNURVhQUl9DT05URVhUKCFzdHJpbmdbbGVuZ3RoXSk7Ci0gICAgICAgIFN0b3Jh
Z2VJbnRlZ2VyIHJlc3VsdCA9IDA7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBp
bmRleCA8IGxlbmd0aDsgKytpbmRleCkgewotICAgICAgICAgICAgdWludDhfdCBjb2RlID0gc3Rh
dGljX2Nhc3Q8dWludDhfdD4oc3RyaW5nW2luZGV4XSk7Ci0gICAgICAgICAgICByZXN1bHQgfD0g
c3RhdGljX2Nhc3Q8U3RvcmFnZUludGVnZXI+KGNvZGUpIDw8ICgoc2l6ZW9mKFN0b3JhZ2VJbnRl
Z2VyKSAtIGluZGV4IC0gMSkgKiA4KTsKLSAgICAgICAgfQotICAgICAgICBtX3ZhbHVlID0gcmVz
dWx0OwotICAgIH0KLQotICAgIHN0YXRpYyBPcHRpb25hbDxQYWNrZWRBU0NJSUxvd2VyQ29kZXM+
IHBhcnNlKFN0cmluZ1ZpZXcgc3RyaW5nKQotICAgIHsKLSAgICAgICAgaWYgKHN0cmluZy5sZW5n
dGgoKSA+IHNpemVvZihTdG9yYWdlSW50ZWdlcikpCi0gICAgICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwotICAgICAgICBTdG9yYWdlSW50ZWdlciByZXN1bHQgPSAwOwotICAgICAgICBmb3Ig
KHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBzdHJpbmcubGVuZ3RoKCk7ICsraW5kZXgpIHsK
LSAgICAgICAgICAgIFVDaGFyIGNvZGUgPSBzdHJpbmdbaW5kZXhdOwotICAgICAgICAgICAgaWYg
KCFpc0FTQ0lJKGNvZGUpKQotICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0g
ICAgICAgICAgICByZXN1bHQgfD0gc3RhdGljX2Nhc3Q8U3RvcmFnZUludGVnZXI+KHRvQVNDSUlM
b3dlcihjb2RlKSkgPDwgKChzaXplb2YoU3RvcmFnZUludGVnZXIpIC0gaW5kZXggLSAxKSAqIDgp
OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBQYWNrZWRBU0NJSUxvd2VyQ29kZXMocmVzdWx0
KTsKLSAgICB9Ci0KLSAgICBmcmllbmQgY29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShQYWNrZWRB
U0NJSUxvd2VyQ29kZXMgbGhzLCBQYWNrZWRBU0NJSUxvd2VyQ29kZXMgcmhzKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGxocy5tX3ZhbHVlID09IHJocy5tX3ZhbHVlOwotICAgIH0KLQotICAgIGZy
aWVuZCBjb25zdGV4cHIgYm9vbCBvcGVyYXRvciE9KFBhY2tlZEFTQ0lJTG93ZXJDb2RlcyBsaHMs
IFBhY2tlZEFTQ0lJTG93ZXJDb2RlcyByaHMpCi0gICAgewotICAgICAgICByZXR1cm4gbGhzLm1f
dmFsdWUgIT0gcmhzLm1fdmFsdWU7Ci0gICAgfQotCi0gICAgZnJpZW5kIGNvbnN0ZXhwciBib29s
IG9wZXJhdG9yPChQYWNrZWRBU0NJSUxvd2VyQ29kZXMgbGhzLCBQYWNrZWRBU0NJSUxvd2VyQ29k
ZXMgcmhzKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGxocy5tX3ZhbHVlIDwgcmhzLm1fdmFsdWU7
Ci0gICAgfQotCi0gICAgZnJpZW5kIGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPD0oUGFja2VkQVND
SUlMb3dlckNvZGVzIGxocywgUGFja2VkQVNDSUlMb3dlckNvZGVzIHJocykKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBsaHMubV92YWx1ZSA8PSByaHMubV92YWx1ZTsKLSAgICB9Ci0KLSAgICBmcmll
bmQgY29uc3RleHByIGJvb2wgb3BlcmF0b3I+KFBhY2tlZEFTQ0lJTG93ZXJDb2RlcyBsaHMsIFBh
Y2tlZEFTQ0lJTG93ZXJDb2RlcyByaHMpCi0gICAgewotICAgICAgICByZXR1cm4gbGhzLm1fdmFs
dWUgPiByaHMubV92YWx1ZTsKLSAgICB9Ci0KLSAgICBmcmllbmQgY29uc3RleHByIGJvb2wgb3Bl
cmF0b3I+PShQYWNrZWRBU0NJSUxvd2VyQ29kZXMgbGhzLCBQYWNrZWRBU0NJSUxvd2VyQ29kZXMg
cmhzKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGxocy5tX3ZhbHVlID49IHJocy5tX3ZhbHVlOwot
ICAgIH0KLQotICAgIGNvbnN0ZXhwciBTdG9yYWdlSW50ZWdlciB2YWx1ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fdmFsdWU7IH0KLQotcHJpdmF0ZToKLSAgICBleHBsaWNpdCBjb25zdGV4cHIgUGFja2Vk
QVNDSUlMb3dlckNvZGVzKFN0b3JhZ2VJbnRlZ2VyIHZhbHVlKQotICAgICAgICA6IG1fdmFsdWUo
dmFsdWUpCi0gICAgewotICAgIH0KLQotICAgIFN0b3JhZ2VJbnRlZ2VyIG1fdmFsdWUgeyAwIH07
Ci19OwotCiBVU2NyaXB0Q29kZSBzY3JpcHROYW1lVG9Db2RlKFN0cmluZ1ZpZXcgc2NyaXB0TmFt
ZSkKIHsKICAgICAvLyBUaGlzIGdlbmVyYWxseSBtYXBzIGFuIElTTyAxNTkyNCBzY3JpcHQgY29k
ZSB0byBpdHMgVVNjcmlwdENvZGUsIGJ1dCBjZXJ0YWluIGZhbWlsaWVzIG9mIHNjcmlwdCBjb2Rl
cyBhcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAppbmRleCBkYTgyODIxNWE4MDEz
NmZiYzkyMjZmNDdmOGIwM2U2YzYwZmJkYmYyLi41MjQ0YmMyNGJjN2JjNGM4MDE2MzQyMjA2OTRm
ZmZmZjkxNzY3ODkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFs
cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCkBAIC01NzUx
LDE5ICs1NzUxLDM5IEBAIGJvb2wgSW50ZXJuYWxzOjpjYXBzTG9ja0lzT24oKQogICAgIHJldHVy
biBXZWJDb3JlOjpQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OmN1cnJlbnRDYXBzTG9ja1N0YXRlKCk7
CiB9CiAKLU9wdGlvbmFsPEhFVkNQYXJhbWV0ZXJTZXQ+IEludGVybmFsczo6cGFyc2VIRVZDQ29k
ZWNQYXJhbWV0ZXJzKGNvbnN0IFN0cmluZyYgY29kZWNTdHJpbmcpCithdXRvIEludGVybmFsczo6
cGFyc2VIRVZDQ29kZWNQYXJhbWV0ZXJzKFN0cmluZ1ZpZXcgc3RyaW5nKSAtPiBPcHRpb25hbDxI
RVZDUGFyYW1ldGVyU2V0PgogewotICAgIHJldHVybiBXZWJDb3JlOjpwYXJzZUhFVkNDb2RlY1Bh
cmFtZXRlcnMoY29kZWNTdHJpbmcpOworICAgIHJldHVybiBXZWJDb3JlOjpwYXJzZUhFVkNDb2Rl
Y1BhcmFtZXRlcnMoc3RyaW5nKTsKIH0KIAotT3B0aW9uYWw8RG9WaVBhcmFtZXRlclNldD4gSW50
ZXJuYWxzOjpwYXJzZURvVmlDb2RlY1BhcmFtZXRlcnMoY29uc3QgU3RyaW5nJiBjb2RlY1N0cmlu
ZykKK2F1dG8gSW50ZXJuYWxzOjpwYXJzZURvVmlDb2RlY1BhcmFtZXRlcnMoU3RyaW5nVmlldyBz
dHJpbmcpIC0+IE9wdGlvbmFsPERvVmlQYXJhbWV0ZXJTZXQ+CiB7Ci0gICAgcmV0dXJuIFdlYkNv
cmU6OnBhcnNlRG9WaUNvZGVjUGFyYW1ldGVycyhjb2RlY1N0cmluZyk7CisgICAgYXV0byBwYXJz
ZVJlc3VsdCA9IFdlYkNvcmU6OnBhcnNlRG9WaUNvZGVjUGFyYW1ldGVycyhzdHJpbmcpOworICAg
IGlmICghcGFyc2VSZXN1bHQpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgRG9W
aVBhcmFtZXRlclNldCBjb252ZXJ0ZWRSZXN1bHQ7CisgICAgc3dpdGNoIChwYXJzZVJlc3VsdC0+
Y29kZWMpIHsKKyAgICBjYXNlIERvVmlQYXJhbWV0ZXJzOjpDb2RlYzo6QVZDMToKKyAgICAgICAg
Y29udmVydGVkUmVzdWx0LmNvZGVjTmFtZSA9ICJhdmMxIl9zOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIERvVmlQYXJhbWV0ZXJzOjpDb2RlYzo6QVZDMzoKKyAgICAgICAgY29udmVydGVkUmVz
dWx0LmNvZGVjTmFtZSA9ICJhdmMzIl9zOworICAgICAgICBicmVhazsKKyAgICBjYXNlIERvVmlQ
YXJhbWV0ZXJzOjpDb2RlYzo6SEVWMToKKyAgICAgICAgY29udmVydGVkUmVzdWx0LmNvZGVjTmFt
ZSA9ICJoZXYxIl9zOworICAgICAgICBicmVhazsKKyAgICBjYXNlIERvVmlQYXJhbWV0ZXJzOjpD
b2RlYzo6SFZDMToKKyAgICAgICAgY29udmVydGVkUmVzdWx0LmNvZGVjTmFtZSA9ICJodmMxIl9z
OworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY29udmVydGVkUmVzdWx0LmJpdHN0cmVhbVBy
b2ZpbGVJRCA9IHBhcnNlUmVzdWx0LT5iaXRzdHJlYW1Qcm9maWxlSUQ7CisgICAgY29udmVydGVk
UmVzdWx0LmJpdHN0cmVhbUxldmVsSUQgPSBwYXJzZVJlc3VsdC0+Yml0c3RyZWFtTGV2ZWxJRDsK
KyAgICByZXR1cm4gY29udmVydGVkUmVzdWx0OwogfQogCi1PcHRpb25hbDxWUENvZGVjQ29uZmln
dXJhdGlvblJlY29yZD4gSW50ZXJuYWxzOjpwYXJzZVZQQ29kZWNQYXJhbWV0ZXJzKGNvbnN0IFN0
cmluZyYgY29kZWNTdHJpbmcpCitPcHRpb25hbDxWUENvZGVjQ29uZmlndXJhdGlvblJlY29yZD4g
SW50ZXJuYWxzOjpwYXJzZVZQQ29kZWNQYXJhbWV0ZXJzKFN0cmluZ1ZpZXcgc3RyaW5nKQogewot
ICAgIHJldHVybiBXZWJDb3JlOjpwYXJzZVZQQ29kZWNQYXJhbWV0ZXJzKGNvZGVjU3RyaW5nKTsK
KyAgICByZXR1cm4gV2ViQ29yZTo6cGFyc2VWUENvZGVjUGFyYW1ldGVycyhzdHJpbmcpOwogfQog
CiBhdXRvIEludGVybmFsczo6Z2V0Q29va2llcygpIGNvbnN0IC0+IFZlY3RvcjxDb29raWVEYXRh
PgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaCBiL1NvdXJj
ZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgKaW5kZXggZTIwMjM0YjdiYTRmNTdlM2U0OTQy
OWZmMGQyNTg2MTMwYmZkMzI0ZC4uZjlhMTg3YmQzMzlkNDhlMzJiODVlNzU1Zjg3MGM3NWUyODgx
MTFlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oCkBAIC05NzEsMTQgKzk3MSwxOCBA
QCBwdWJsaWM6CiAKICAgICBib29sIGNhcHNMb2NrSXNPbigpOwogICAgICAgICAKLSAgICB1c2lu
ZyBIRVZDUGFyYW1ldGVyU2V0ID0gV2ViQ29yZTo6SEVWQ1BhcmFtZXRlclNldDsKLSAgICBPcHRp
b25hbDxIRVZDUGFyYW1ldGVyU2V0PiBwYXJzZUhFVkNDb2RlY1BhcmFtZXRlcnMoY29uc3QgU3Ry
aW5nJiBjb2RlY1N0cmluZyk7CisgICAgdXNpbmcgSEVWQ1BhcmFtZXRlclNldCA9IFdlYkNvcmU6
OkhFVkNQYXJhbWV0ZXJzOworICAgIE9wdGlvbmFsPEhFVkNQYXJhbWV0ZXJTZXQ+IHBhcnNlSEVW
Q0NvZGVjUGFyYW1ldGVycyhTdHJpbmdWaWV3KTsKIAotICAgIHVzaW5nIERvVmlQYXJhbWV0ZXJT
ZXQgPSBXZWJDb3JlOjpEb1ZpUGFyYW1ldGVyU2V0OwotICAgIE9wdGlvbmFsPERvVmlQYXJhbWV0
ZXJTZXQ+IHBhcnNlRG9WaUNvZGVjUGFyYW1ldGVycyhjb25zdCBTdHJpbmcmIGNvZGVjU3RyaW5n
KTsKKyAgICBzdHJ1Y3QgRG9WaVBhcmFtZXRlclNldCB7CisgICAgICAgIFN0cmluZyBjb2RlY05h
bWU7CisgICAgICAgIHVpbnQxNl90IGJpdHN0cmVhbVByb2ZpbGVJRDsKKyAgICAgICAgdWludDE2
X3QgYml0c3RyZWFtTGV2ZWxJRDsKKyAgICB9OworICAgIE9wdGlvbmFsPERvVmlQYXJhbWV0ZXJT
ZXQ+IHBhcnNlRG9WaUNvZGVjUGFyYW1ldGVycyhTdHJpbmdWaWV3KTsKIAogICAgIHVzaW5nIFZQ
Q29kZWNDb25maWd1cmF0aW9uUmVjb3JkID0gV2ViQ29yZTo6VlBDb2RlY0NvbmZpZ3VyYXRpb25S
ZWNvcmQ7Ci0gICAgT3B0aW9uYWw8VlBDb2RlY0NvbmZpZ3VyYXRpb25SZWNvcmQ+IHBhcnNlVlBD
b2RlY1BhcmFtZXRlcnMoY29uc3QgU3RyaW5nJiBjb2RlY1N0cmluZyk7CisgICAgT3B0aW9uYWw8
VlBDb2RlY0NvbmZpZ3VyYXRpb25SZWNvcmQ+IHBhcnNlVlBDb2RlY1BhcmFtZXRlcnMoU3RyaW5n
Vmlldyk7CiAKICAgICBzdHJ1Y3QgQ29va2llRGF0YSB7CiAgICAgICAgIFN0cmluZyBuYW1lOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsIGIvU291cmNl
L1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsCmluZGV4IDAzNWEyNjhkMzJmN2ZmYjRiNGZm
MGZlNDkwYjllY2QzZDU3M2RlMTYuLjJiZmQ2Y2I5Mjg4OGM2YjU5NmQ2ZGUxOWE1MjYyODFlYTM0
N2NkMjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwKQEAgLTE3MSwxMyArMTcx
LDEwIEBAIGVudW0gVHJlZVR5cGUgewogICAgIEV4cG9ydE1hY3JvPVdFQkNPUkVfVEVTVFNVUFBP
UlRfRVhQT1JULAogICAgIEpTR2VuZXJhdGVUb0pTT2JqZWN0LAogXSBkaWN0aW9uYXJ5IEhFVkNQ
YXJhbWV0ZXJTZXQgewotICAgIERPTVN0cmluZyBjb2RlY05hbWU7CiAgICAgdW5zaWduZWQgc2hv
cnQgZ2VuZXJhbFByb2ZpbGVTcGFjZTsKICAgICB1bnNpZ25lZCBzaG9ydCBnZW5lcmFsUHJvZmls
ZUlEQzsKICAgICB1bnNpZ25lZCBsb25nIGdlbmVyYWxQcm9maWxlQ29tcGF0aWJpbGl0eUZsYWdz
OwotICAgIGJvb2xlYW4gZ2VuZXJhbFRpZXJGbGFnOwogICAgIHVuc2lnbmVkIHNob3J0IGdlbmVy
YWxMZXZlbElEQzsKLSAgICBzZXF1ZW5jZTx1bnNpZ25lZCBzaG9ydD4gY29uc3RyYWludEZsYWdz
OwogfTsKIAogWwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvUmVtb3RlTGF5ZXJU
cmVlL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yVHJhbnNhY3Rpb24uY3BwIGIvU291cmNlL1dl
YktpdC9TaGFyZWQvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yVHJh
bnNhY3Rpb24uY3BwCmluZGV4IGVmNTZlM2E4Y2ViZDM3Njk1NzU4OTJiYjE0OWNjYmJjYTA0N2Yz
ZTIuLmRlZTYwZTE3ODA4MTljNmQwMjExOGU5ODQ4YjRiN2JiYzc3Y2FlOTQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVTY3JvbGxpbmdDb29y
ZGluYXRvclRyYW5zYWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9SZW1vdGVM
YXllclRyZWUvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JUcmFuc2FjdGlvbi5jcHAKQEAgLTQx
LDcgKzQxLDYgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1Njcm9sbGluZ1N0YXRlUG9zaXRpb25lZE5v
ZGUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Njcm9sbGluZ1N0YXRlU3RpY2t5Tm9kZS5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvU2Nyb2xsaW5nU3RhdGVUcmVlLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hN
YXAuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQv
VGV4dFN0cmVhbS5oPgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRl
RGF0YS9XZWJzaXRlRGF0YS5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vic2l0ZURhdGEvV2Vi
c2l0ZURhdGEuaAppbmRleCAyNzhhYTNhOTJlZDA3YTdiNDI3OTM3YzViOTAyN2QxOGU1MzZiMWQw
Li42ZmZkNDJjZGVkOTBlYWFkY2M2NDZjYzQzMDMxODAyNTM3NGJhZGQ0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YS5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvU2hhcmVkL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhLmgKQEAgLTI3LDcgKzI3LDYg
QEAKIAogI2luY2x1ZGUgPFdlYkNvcmUvUmVnaXN0cmFibGVEb21haW4uaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL1NlY3VyaXR5T3JpZ2luRGF0YS5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAj
aW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0Lmg+CiAjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDZiZGI4OGM2Zjg2YWYxYmQyMjlhMTBhMTMzY2U2
NDFlN2E2M2IzM2UuLmYwNTI5MTk1NDIxZjE3NzJiYWUwNTRiNDgwNGI1YTM0NWFjNjNmZTkgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxNCBAQAorMjAyMS0wNS0wNCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBs
ZS5jb20+CisKKyAgICAgICAgU3RyZWFtbGluZSBjb2RlYyBwYXJzaW5nLCByZXBsYWNpbmcgdXNl
cyBvZiBIYXNoTWFwIHdpdGggU29ydGVkQXJyYXlNYXAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNTM2OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogbWVkaWEvaGV2Yy1jb2RlYy1wYXJhbWV0ZXJzLWV4
cGVjdGVkLnR4dDogUmVtb3ZlIHRlc3Rpbmcgb2YgZ2VuZXJhbFRpZXJGbGFnLCB3aGljaCBpcyBp
Z25vcmVkCisgICAgICAgIGJ5IG91ciBhY3R1YWwgbWVkaWEgY29kZSBhZnRlciBwYXJzaW5nLgor
ICAgICAgICAqIG1lZGlhL2hldmMtY29kZWMtcGFyYW1ldGVycy5odG1sOiBEaXR0by4KKwogMjAy
MS0wNS0wNCAgS2VubmV0aCBSdXNzZWxsICA8a2JyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBX
ZWJLaXQgbXVzdCB0cmVhdCAnd2ViZ2wnIGFuZCAnd2ViZ2wyJyBhcyBkaXN0aW5jdCBjb250ZXh0
IHR5cGVzCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9tZWRpYS9oZXZjLWNvZGVjLXBhcmFtZXRl
cnMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvbWVkaWEvaGV2Yy1jb2RlYy1wYXJhbWV0ZXJz
LWV4cGVjdGVkLnR4dAppbmRleCBmNmRlZjU4NTlhOWU0ZjhmYzdkNGM4NzI3ZmIzMTc5MzZmZmQx
ZWFlLi4yYmIxZmNlNTc3MmRhNWEwYWRlYWJmYTg5Mzk0MDY3MWQ4ZWE5YTBjIDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9tZWRpYS9oZXZjLWNvZGVjLXBhcmFtZXRlcnMtZXhwZWN0ZWQudHh0Cisr
KyBiL0xheW91dFRlc3RzL21lZGlhL2hldmMtY29kZWMtcGFyYW1ldGVycy1leHBlY3RlZC50eHQK
QEAgLTEsOCArMSw4IEBACiBFWFBFQ1RFRCAoaW50ZXJuYWxzLnBhcnNlSEVWQ0NvZGVjUGFyYW1l
dGVycygiYmFkLXBhcmFtZXRlciIpID09ICdudWxsJykgT0sKIEVYUEVDVEVEIChpbnRlcm5hbHMu
cGFyc2VIRVZDQ29kZWNQYXJhbWV0ZXJzKCJodmMxIikgPT0gJ251bGwnKSBPSwotRVhQRUNURUQg
KGludGVybmFscy5wYXJzZUhFVkNDb2RlY1BhcmFtZXRlcnMoImhldjEuMS42Lkw5MyIpID09PSAn
eyAwLCAxLCA2LCBmYWxzZSwgOTMgfScpIE9LCi1FWFBFQ1RFRCAoaW50ZXJuYWxzLnBhcnNlSEVW
Q0NvZGVjUGFyYW1ldGVycygiaGV2MS5BNC40MS5IMTIwIikgPT09ICd7IDEsIDQsIDY1LCB0cnVl
LCAxMjAgfScpIE9LCi1FWFBFQ1RFRCAoaW50ZXJuYWxzLnBhcnNlSEVWQ0NvZGVjUGFyYW1ldGVy
cygiaGV2MS5CMS40Lkw2MyIpID09PSAneyAyLCAxLCA0LCBmYWxzZSwgNjMgfScpIE9LCitFWFBF
Q1RFRCAoaW50ZXJuYWxzLnBhcnNlSEVWQ0NvZGVjUGFyYW1ldGVycygiaGV2MS4xLjYuTDkzIikg
PT09ICd7IDAsIDEsIDYsIDkzIH0nKSBPSworRVhQRUNURUQgKGludGVybmFscy5wYXJzZUhFVkND
b2RlY1BhcmFtZXRlcnMoImhldjEuQTQuNDEuSDEyMCIpID09PSAneyAxLCA0LCA2NSwgMTIwIH0n
KSBPSworRVhQRUNURUQgKGludGVybmFscy5wYXJzZUhFVkNDb2RlY1BhcmFtZXRlcnMoImhldjEu
QjEuNC5MNjMiKSA9PT0gJ3sgMiwgMSwgNCwgNjMgfScpIE9LCiBFWFBFQ1RFRCAoaW50ZXJuYWxz
LnBhcnNlSEVWQ0NvZGVjUGFyYW1ldGVycygiaGV2MS5EMS40Lkw2MyIpID09ICdudWxsJykgT0sK
IEVYUEVDVEVEIChpbnRlcm5hbHMucGFyc2VIRVZDQ29kZWNQYXJhbWV0ZXJzKCJoZXYxLkIxLjQu
TDY4MDAwIikgPT0gJ251bGwnKSBPSwogRU5EIE9GIFRFU1QKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL21lZGlhL2hldmMtY29kZWMtcGFyYW1ldGVycy5odG1sIGIvTGF5b3V0VGVzdHMvbWVkaWEv
aGV2Yy1jb2RlYy1wYXJhbWV0ZXJzLmh0bWwKaW5kZXggMWRkY2Q5Y2Y5YzcxMTAxNzk2OWVlMDIw
NzBhYzA4YjY0NzcyYzdlNi4uMmQ3ZTVjOTliODgwMzIzZGMxMTE1M2FiMzRmMzdjOThiMDE1NGNh
MCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvbWVkaWEvaGV2Yy1jb2RlYy1wYXJhbWV0ZXJzLmh0
bWwKKysrIGIvTGF5b3V0VGVzdHMvbWVkaWEvaGV2Yy1jb2RlYy1wYXJhbWV0ZXJzLmh0bWwKQEAg
LTQsMjIgKzQsMjAgQEAKICAgICA8c2NyaXB0IHNyYz0idmlkZW8tdGVzdC5qcyI+PC9zY3JpcHQ+
CiAgICAgPHNjcmlwdD4KICAgICBmdW5jdGlvbiBIRVZDUGFyYW1ldGVyU2V0VG9TdHJpbmcoc2V0
KSB7Ci0gICAgICAgIHJldHVybiBgeyAke3NldC5nZW5lcmFsUHJvZmlsZVNwYWNlIH0sICR7c2V0
LmdlbmVyYWxQcm9maWxlSURDIH0sICR7c2V0LmdlbmVyYWxQcm9maWxlQ29tcGF0aWJpbGl0eUZs
YWdzIH0sICR7c2V0LmdlbmVyYWxUaWVyRmxhZyB9LCAke3NldC5nZW5lcmFsTGV2ZWxJREMgfSB9
YDsKKyAgICAgICAgcmV0dXJuIGB7ICR7c2V0LmdlbmVyYWxQcm9maWxlU3BhY2UgfSwgJHtzZXQu
Z2VuZXJhbFByb2ZpbGVJREMgfSwgJHtzZXQuZ2VuZXJhbFByb2ZpbGVDb21wYXRpYmlsaXR5Rmxh
Z3MgfSwgJHtzZXQuZ2VuZXJhbExldmVsSURDIH0gfWA7CiAgICAgfQogICAgIGZ1bmN0aW9uIGlz
RXF1YWxIRVZDUGFyYW1ldGVyU2V0KHNldEEsIHNldEIpIHsKICAgICAgICAgcmV0dXJuIHNldEEu
Z2VuZXJhbFByb2ZpbGVTcGFjZSA9PT0gc2V0Qi5nZW5lcmFsUHJvZmlsZVNwYWNlCiAgICAgICAg
ICAgICAmJiBzZXRBLmdlbmVyYWxQcm9maWxlSURDID09PSBzZXRCLmdlbmVyYWxQcm9maWxlSURD
CiAgICAgICAgICAgICAmJiBzZXRBLmdlbmVyYWxQcm9maWxlQ29tcGF0aWJpbGl0eUZsYWdzID09
PSBzZXRCLmdlbmVyYWxQcm9maWxlQ29tcGF0aWJpbGl0eUZsYWdzCi0gICAgICAgICAgICAmJiBz
ZXRBLmdlbmVyYWxUaWVyRmxhZyA9PT0gc2V0Qi5nZW5lcmFsVGllckZsYWcKICAgICAgICAgICAg
ICYmIHNldEEuZ2VuZXJhbExldmVsSURDID09PSBzZXRCLmdlbmVyYWxMZXZlbElEQwogICAgIH0K
LSAgICBmdW5jdGlvbiBtYWtlSEVWQ1BhcmFtZXRlclNldChnZW5lcmFsUHJvZmlsZVNwYWNlLCBn
ZW5lcmFsUHJvZmlsZUlEQywgZ2VuZXJhbFByb2ZpbGVDb21wYXRpYmlsaXR5RmxhZ3MsIGdlbmVy
YWxUaWVyRmxhZywgZ2VuZXJhbExldmVsSURDKQorICAgIGZ1bmN0aW9uIG1ha2VIRVZDUGFyYW1l
dGVyU2V0KGdlbmVyYWxQcm9maWxlU3BhY2UsIGdlbmVyYWxQcm9maWxlSURDLCBnZW5lcmFsUHJv
ZmlsZUNvbXBhdGliaWxpdHlGbGFncywgZ2VuZXJhbExldmVsSURDKQogICAgIHsKICAgICAgICAg
cmV0dXJuIHsKICAgICAgICAgICAgIGdlbmVyYWxQcm9maWxlU3BhY2U6IGdlbmVyYWxQcm9maWxl
U3BhY2UsCiAgICAgICAgICAgICBnZW5lcmFsUHJvZmlsZUlEQzogZ2VuZXJhbFByb2ZpbGVJREMs
CiAgICAgICAgICAgICBnZW5lcmFsUHJvZmlsZUNvbXBhdGliaWxpdHlGbGFnczogZ2VuZXJhbFBy
b2ZpbGVDb21wYXRpYmlsaXR5RmxhZ3MsCi0gICAgICAgICAgICBnZW5lcmFsVGllckZsYWc6IGdl
bmVyYWxUaWVyRmxhZywKICAgICAgICAgICAgIGdlbmVyYWxMZXZlbElEQzogZ2VuZXJhbExldmVs
SURDLAogICAgICAgICB9OwogICAgIH0KQEAgLTMyLDkgKzMwLDkgQEAKICAgICB3aW5kb3cuYWRk
RXZlbnRMaXN0ZW5lcignbG9hZCcsIGV2ZW50ID0+IHsKICAgICAgICAgdGVzdEV4cGVjdGVkKCdp
bnRlcm5hbHMucGFyc2VIRVZDQ29kZWNQYXJhbWV0ZXJzKCJiYWQtcGFyYW1ldGVyIiknLCBudWxs
KTsKICAgICAgICAgdGVzdEV4cGVjdGVkKCdpbnRlcm5hbHMucGFyc2VIRVZDQ29kZWNQYXJhbWV0
ZXJzKCJodmMxIiknLCBudWxsKTsKLSAgICAgICAgdGVzdEV4cGVjdGVkSEVWQ1BhcmFtZXRlclNl
dCgnaW50ZXJuYWxzLnBhcnNlSEVWQ0NvZGVjUGFyYW1ldGVycygiaGV2MS4xLjYuTDkzIiknLCBt
YWtlSEVWQ1BhcmFtZXRlclNldCgwLCAxLCA2LCBmYWxzZSwgOTMpKTsKLSAgICAgICAgdGVzdEV4
cGVjdGVkSEVWQ1BhcmFtZXRlclNldCgnaW50ZXJuYWxzLnBhcnNlSEVWQ0NvZGVjUGFyYW1ldGVy
cygiaGV2MS5BNC40MS5IMTIwIiknLCBtYWtlSEVWQ1BhcmFtZXRlclNldCgxLCA0LCA2NSwgdHJ1
ZSwgMTIwKSk7Ci0gICAgICAgIHRlc3RFeHBlY3RlZEhFVkNQYXJhbWV0ZXJTZXQoJ2ludGVybmFs
cy5wYXJzZUhFVkNDb2RlY1BhcmFtZXRlcnMoImhldjEuQjEuNC5MNjMiKScsIG1ha2VIRVZDUGFy
YW1ldGVyU2V0KDIsIDEsIDQsIGZhbHNlLCA2MykpOworICAgICAgICB0ZXN0RXhwZWN0ZWRIRVZD
UGFyYW1ldGVyU2V0KCdpbnRlcm5hbHMucGFyc2VIRVZDQ29kZWNQYXJhbWV0ZXJzKCJoZXYxLjEu
Ni5MOTMiKScsIG1ha2VIRVZDUGFyYW1ldGVyU2V0KDAsIDEsIDYsIDkzKSk7CisgICAgICAgIHRl
c3RFeHBlY3RlZEhFVkNQYXJhbWV0ZXJTZXQoJ2ludGVybmFscy5wYXJzZUhFVkNDb2RlY1BhcmFt
ZXRlcnMoImhldjEuQTQuNDEuSDEyMCIpJywgbWFrZUhFVkNQYXJhbWV0ZXJTZXQoMSwgNCwgNjUs
IDEyMCkpOworICAgICAgICB0ZXN0RXhwZWN0ZWRIRVZDUGFyYW1ldGVyU2V0KCdpbnRlcm5hbHMu
cGFyc2VIRVZDQ29kZWNQYXJhbWV0ZXJzKCJoZXYxLkIxLjQuTDYzIiknLCBtYWtlSEVWQ1BhcmFt
ZXRlclNldCgyLCAxLCA0LCA2MykpOwogICAgICAgICB0ZXN0RXhwZWN0ZWQoJ2ludGVybmFscy5w
YXJzZUhFVkNDb2RlY1BhcmFtZXRlcnMoImhldjEuRDEuNC5MNjMiKScsIG51bGwpOwogICAgICAg
ICB0ZXN0RXhwZWN0ZWQoJ2ludGVybmFscy5wYXJzZUhFVkNDb2RlY1BhcmFtZXRlcnMoImhldjEu
QjEuNC5MNjgwMDAiKScsIG51bGwpOwogICAgICAgICBlbmRUZXN0KCk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>