<?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>60279</bug_id>
          
          <creation_ts>2011-05-05 10:55:20 -0700</creation_ts>
          <short_desc>Modify WTF::String and UString to use a more safe API for lookup functions.</short_desc>
          <delta_ts>2011-05-05 12:58:40 -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>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>ASSIGNED</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexis Menard (darktears)">menard</reporter>
          <assigned_to name="Alexis Menard (darktears)">menard</assigned_to>
          <cc>apavlov</cc>
    
    <cc>ap</cc>
    
    <cc>barraclough</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>msaboff</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>398834</commentid>
    <comment_count>0</comment_count>
    <who name="Alexis Menard (darktears)">menard</who>
    <bug_when>2011-05-05 10:55:20 -0700</bug_when>
    <thetext>Modify WTF::String and UString to use a more safe API for lookup functions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>398846</commentid>
    <comment_count>1</comment_count>
      <attachid>92434</attachid>
    <who name="Alexis Menard (darktears)">menard</who>
    <bug_when>2011-05-05 11:11:28 -0700</bug_when>
    <thetext>Created attachment 92434
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>398850</commentid>
    <comment_count>2</comment_count>
    <who name="Alexis Menard (darktears)">menard</who>
    <bug_when>2011-05-05 11:17:05 -0700</bug_when>
    <thetext>I&apos;m seeking comments here...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>398939</commentid>
    <comment_count>3</comment_count>
      <attachid>92434</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-05-05 12:44:28 -0700</bug_when>
    <thetext>Comment on attachment 92434
Patch

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

What’s the real problem being solved here? Can you show me the specific call sites for find that have a problem? I think we may in fact want to move to a 64-bit interface to strings even though we have a 32-bit limit on their length at this time, so changing this function from size_t to uint32_t may be a step in the wrong direction.

&gt; Source/JavaScriptCore/ChangeLog:8
&gt; +        This patch change the API of WTF::String and UString to a more safe one.

Saying this is more safe seems to oversell it.

Anywhere we use notFound rather than String::notFound to check a result will compile correctly and work wrong; this adds a new kind of peril for programmers using the string class where they have to remember to use the correct notFound value.

Changing the index and size types of the string class to be more consistent is a good idea.

&gt; Source/JavaScriptCore/runtime/UString.h:109
&gt; -    size_t find(UChar c, unsigned start = 0) const
&gt; -        { return m_impl ? m_impl-&gt;find(c, start) : notFound; }
&gt; -    size_t find(const UString&amp; str, unsigned start = 0) const
&gt; -        { return m_impl ? m_impl-&gt;find(str.impl(), start) : notFound; }
&gt; -    size_t find(const char* str, unsigned start = 0) const
&gt; -        { return m_impl ? m_impl-&gt;find(str, start) : notFound; }
&gt; +    uint32_t find(UChar c, unsigned start = 0) const
&gt; +        { return m_impl ? m_impl-&gt;find(c, start) : String::notFound; }
&gt; +    uint32_t find(const UString&amp; str, unsigned start = 0) const
&gt; +        { return m_impl ? m_impl-&gt;find(str.impl(), start) : String::notFound; }
&gt; +    uint32_t find(const char* str, unsigned start = 0) const
&gt; +        { return m_impl ? m_impl-&gt;find(str, start) : String::notFound; }
&gt;  
&gt;      // Find the last instance of a single character or string.
&gt; -    size_t reverseFind(UChar c, unsigned start = UINT_MAX) const
&gt; -        { return m_impl ? m_impl-&gt;reverseFind(c, start) : notFound; }
&gt; -    size_t reverseFind(const UString&amp; str, unsigned start = UINT_MAX) const
&gt; -        { return m_impl ? m_impl-&gt;reverseFind(str.impl(), start) : notFound; }
&gt; +    uint32_t reverseFind(UChar c, unsigned start = UINT_MAX) const
&gt; +        { return m_impl ? m_impl-&gt;reverseFind(c, start) : String::notFound; }
&gt; +    uint32_t reverseFind(const UString&amp; str, unsigned start = UINT_MAX) const
&gt; +        { return m_impl ? m_impl-&gt;reverseFind(str.impl(), start) : String::notFound; }

I don’t like a patch that makes a single function, find, use two distinct unsigned 32-bit integer types for the argument and result. Specifically, both uint32_t and unsigned.

&gt; Source/JavaScriptCore/wtf/text/StringImpl.cpp:83
&gt; +    // We do not support this length.
&gt; +    if (length == 0xFFFFFFFF)
&gt; +        CRASH();

I don’t think that the 3 create functions you patched here are the only places that can make strings that have lengths == 0xFFFFFFFF.

For example, StringImpl::adopt doesn&apos;t go through any of these checks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>398954</commentid>
    <comment_count>4</comment_count>
    <who name="Alexis Menard (darktears)">menard</who>
    <bug_when>2011-05-05 12:58:40 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 92434 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=92434&amp;action=review
&gt; 
&gt; What’s the real problem being solved here? Can you show me the specific call sites for find that have a problem? I think we may in fact want to move to a 64-bit interface to strings even though we have a 32-bit limit on their length at this time, so changing this function from size_t to uint32_t may be a step in the wrong direction.

Hi Darin,

Thanks for the feedback.

Yes well if the plan is to move to something that support both, well yes my patch is wrong.

What I&apos;m trying to solve is a warning in StringPrototype.cpp line 465.

int ovector[2] = { matchPos, matchEnd };

matchPos being :

size_t matchPos = source.find(patternString);

and matchEnd being :

int matchLen = patternString.length();

One could say I can change ovector but it&apos;s a bigger change than it seems (it will modify RegExpConstructor and RegExp.

&gt; 
&gt; &gt; Source/JavaScriptCore/ChangeLog:8
&gt; &gt; +        This patch change the API of WTF::String and UString to a more safe one.
&gt; 
&gt; Saying this is more safe seems to oversell it.

oops.

&gt; 
&gt; Anywhere we use notFound rather than String::notFound to check a result will compile correctly and work wrong; this adds a new kind of peril for programmers using the string class where they have to remember to use the correct notFound value.

Yes that is the risk. That&apos;s why I was looking for comments or better suggestions.

&gt; 
&gt; Changing the index and size types of the string class to be more consistent is a good idea.
&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/UString.h:109
&gt; &gt; -    size_t find(UChar c, unsigned start = 0) const
&gt; &gt; -        { return m_impl ? m_impl-&gt;find(c, start) : notFound; }
&gt; &gt; -    size_t find(const UString&amp; str, unsigned start = 0) const
&gt; &gt; -        { return m_impl ? m_impl-&gt;find(str.impl(), start) : notFound; }
&gt; &gt; -    size_t find(const char* str, unsigned start = 0) const
&gt; &gt; -        { return m_impl ? m_impl-&gt;find(str, start) : notFound; }
&gt; &gt; +    uint32_t find(UChar c, unsigned start = 0) const
&gt; &gt; +        { return m_impl ? m_impl-&gt;find(c, start) : String::notFound; }
&gt; &gt; +    uint32_t find(const UString&amp; str, unsigned start = 0) const
&gt; &gt; +        { return m_impl ? m_impl-&gt;find(str.impl(), start) : String::notFound; }
&gt; &gt; +    uint32_t find(const char* str, unsigned start = 0) const
&gt; &gt; +        { return m_impl ? m_impl-&gt;find(str, start) : String::notFound; }
&gt; &gt;  
&gt; &gt;      // Find the last instance of a single character or string.
&gt; &gt; -    size_t reverseFind(UChar c, unsigned start = UINT_MAX) const
&gt; &gt; -        { return m_impl ? m_impl-&gt;reverseFind(c, start) : notFound; }
&gt; &gt; -    size_t reverseFind(const UString&amp; str, unsigned start = UINT_MAX) const
&gt; &gt; -        { return m_impl ? m_impl-&gt;reverseFind(str.impl(), start) : notFound; }
&gt; &gt; +    uint32_t reverseFind(UChar c, unsigned start = UINT_MAX) const
&gt; &gt; +        { return m_impl ? m_impl-&gt;reverseFind(c, start) : String::notFound; }
&gt; &gt; +    uint32_t reverseFind(const UString&amp; str, unsigned start = UINT_MAX) const
&gt; &gt; +        { return m_impl ? m_impl-&gt;reverseFind(str.impl(), start) : String::notFound; }
&gt; 
&gt; I don’t like a patch that makes a single function, find, use two distinct unsigned 32-bit integer types for the argument and result. Specifically, both uint32_t and unsigned.

We can definitively be more consistent here. 

&gt; 
&gt; &gt; Source/JavaScriptCore/wtf/text/StringImpl.cpp:83
&gt; &gt; +    // We do not support this length.
&gt; &gt; +    if (length == 0xFFFFFFFF)
&gt; &gt; +        CRASH();
&gt; 
&gt; I don’t think that the 3 create functions you patched here are the only places that can make strings that have lengths == 0xFFFFFFFF.
&gt; 
&gt; For example, StringImpl::adopt doesn&apos;t go through any of these checks.

Thanks. I will look at that.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>92434</attachid>
            <date>2011-05-05 11:11:28 -0700</date>
            <delta_ts>2011-05-05 12:44:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-60279-20110505151136.patch</filename>
            <type>text/plain</type>
            <size>91853</size>
            <attacher name="Alexis Menard (darktears)">menard</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gODU4NjIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTIgQEAK
KzIwMTEtMDUtMDUgIEFsZXhpcyBNZW5hcmQgIDxhbGV4aXMubWVuYXJkQG9wZW5ib3NzYS5vcmc+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW9kaWZ5
IFdURjo6U3RyaW5nIGFuZCBVU3RyaW5nIHRvIHVzZSBhIG1vcmUgc2FmZSBBUEkgZm9yIGxvb2t1
cCBmdW5jdGlvbnMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD02MDI3OQorCisgICAgICAgIFRoaXMgcGF0Y2ggY2hhbmdlIHRoZSBBUEkgb2YgV1RGOjpT
dHJpbmcgYW5kIFVTdHJpbmcgdG8gYSBtb3JlIHNhZmUgb25lLgorICAgICAgICBBbGwgbG9va3Vw
IGZ1bmN0aW9ucyAoZS5nLiBmaW5kKCkpIHVzZSBzaXplX3QgYXMgYSByZXR1cm4gdmFsdWUgc28g
d2UgY2FuCisgICAgICAgIHJldHVybiAtMSBmb3Igbm90IGZvdW5kIGNhc2VzLiBUaGlzIEFQSSBj
YW4gbGVhZCB0byBwcmVjaXNpb24gbG9zcyB3aGVuIHVzaW5nIGl0CisgICAgICAgIChvbiByZWFs
bHkgYmlnIHN0cmluZ3MpLiBUb2RheSBXVEY6OlN0cmluZyBhbmQgVVN0cmluZyBoYXZlIGEgbGVu
Z3RoIG9mIDJeMzItMSwKKyAgICAgICAgdGhpcyBwYXRjaCBjaGFuZ2UgdGhlaXIgc2l6ZSB0byBi
ZSAyXjMyLTIgYW5kIHVzZSB0aGUgbGFzdCB2YWx1ZSBhcyBhIG5ldyBub3RGb3VuZAorICAgICAg
ICB2YWx1ZS4gVGhlcmVmb3JlIHdlIGNhbiBzYWZlbHkgcmV0dXJuIGEgdWludDMyX3QgaW4gdGhl
IEFQSS4KKworICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6
OmVzY2FwZVF1b3Rlcyk6CisgICAgICAgICogcnVudGltZS9KU1N0cmluZy5jcHA6CisgICAgICAg
IChKU0M6OkpTU3RyaW5nOjpyZXBsYWNlQ2hhcmFjdGVyKToKKyAgICAgICAgKiBydW50aW1lL1N0
cmluZ1Byb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OnN1YnN0aXR1dGVCYWNrcmVmZXJlbmNl
c1Nsb3cpOgorICAgICAgICAoSlNDOjpzdWJzdGl0dXRlQmFja3JlZmVyZW5jZXMpOgorICAgICAg
ICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNSZXBsYWNlKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJv
dG9GdW5jSW5kZXhPZik6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY0xhc3RJbmRleE9m
KToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jU3BsaXQpOgorICAgICAgICAqIHJ1bnRp
bWUvVVN0cmluZy5oOgorICAgICAgICAoSlNDOjpVU3RyaW5nOjpmaW5kKToKKyAgICAgICAgKEpT
Qzo6VVN0cmluZzo6cmV2ZXJzZUZpbmQpOgorICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0ltcGwu
Y3BwOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpjcmVhdGVVbmluaXRpYWxpemVkKToKKyAg
ICAgICAgKFdURjo6U3RyaW5nSW1wbDo6Y3JlYXRlKToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1w
bDo6ZmluZCk6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OmZpbmRJZ25vcmluZ0Nhc2UpOgor
ICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpyZXZlcnNlRmluZCk6CisgICAgICAgIChXVEY6OlN0
cmluZ0ltcGw6OnJldmVyc2VGaW5kSWdub3JpbmdDYXNlKToKKyAgICAgICAgKFdURjo6U3RyaW5n
SW1wbDo6cmVwbGFjZSk6CisgICAgICAgICogd3RmL3RleHQvU3RyaW5nSW1wbC5oOgorICAgICAg
ICAoV1RGOjpTdHJpbmdJbXBsOjp0cnlDcmVhdGVVbmluaXRpYWxpemVkKToKKyAgICAgICAgKiB3
dGYvdGV4dC9XVEZTdHJpbmcuY3BwOgorICAgICAgICAoV1RGOjpTdHJpbmc6OnNwbGl0KToKKyAg
ICAgICAgKiB3dGYvdGV4dC9XVEZTdHJpbmcuaDoKKyAgICAgICAgKFdURjo6U3RyaW5nOjpmaW5k
KToKKyAgICAgICAgKFdURjo6U3RyaW5nOjpyZXZlcnNlRmluZCk6CisgICAgICAgIChXVEY6OlN0
cmluZzo6ZmluZElnbm9yaW5nQ2FzZSk6CisgICAgICAgIChXVEY6OlN0cmluZzo6cmV2ZXJzZUZp
bmRJZ25vcmluZ0Nhc2UpOgorICAgICAgICAoV1RGOjpTdHJpbmc6OmNvbnRhaW5zKToKKyAgICAg
ICAgKFdURjo6ZmluZCk6CisgICAgICAgIChXVEY6OnJldmVyc2VGaW5kKToKKwogMjAxMS0wNS0w
NSAgQWxleGlzIE1lbmFyZCAgPGFsZXhpcy5tZW5hcmRAb3BlbmJvc3NhLm9yZz4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBCZW5qYW1pbiBQb3VsYWluLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDg1ODYwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTUxLDggKzUxLDggQEAgbmFtZXNwYWNlIEpTQyB7CiBzdGF0aWMgVVN0cmluZyBlc2NhcGVRdW90
ZXMoY29uc3QgVVN0cmluZyYgc3RyKQogewogICAgIFVTdHJpbmcgcmVzdWx0ID0gc3RyOwotICAg
IHNpemVfdCBwb3MgPSAwOwotICAgIHdoaWxlICgocG9zID0gcmVzdWx0LmZpbmQoJ1wiJywgcG9z
KSkgIT0gbm90Rm91bmQpIHsKKyAgICB1aW50MzJfdCBwb3MgPSAwOworICAgIHdoaWxlICgocG9z
ID0gcmVzdWx0LmZpbmQoJ1wiJywgcG9zKSkgIT0gU3RyaW5nOjpub3RGb3VuZCkgewogICAgICAg
ICByZXN1bHQgPSBtYWtlVVN0cmluZyhyZXN1bHQuc3Vic3RyaW5nU2hhcmluZ0ltcGwoMCwgcG9z
KSwgIlwiXFxcIlwiIiwgcmVzdWx0LnN1YnN0cmluZ1NoYXJpbmdJbXBsKHBvcyArIDEpKTsKICAg
ICAgICAgcG9zICs9IDQ7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNTdHJpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTU3RyaW5nLmNwcAkocmV2aXNpb24gODU4NjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1N0cmluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwOSw3ICsyMDksNyBA
QCBKU1ZhbHVlIEpTU3RyaW5nOjpyZXBsYWNlQ2hhcmFjdGVyKEV4ZWNTCiB7CiAgICAgaWYgKCFp
c1JvcGUoKSkgewogICAgICAgICBzaXplX3QgbWF0Y2hQb3NpdGlvbiA9IG1fdmFsdWUuZmluZChj
aGFyYWN0ZXIpOwotICAgICAgICBpZiAobWF0Y2hQb3NpdGlvbiA9PSBub3RGb3VuZCkKKyAgICAg
ICAgaWYgKG1hdGNoUG9zaXRpb24gPT0gU3RyaW5nOjpub3RGb3VuZCkKICAgICAgICAgICAgIHJl
dHVybiBKU1ZhbHVlKHRoaXMpOwogICAgICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgbV92YWx1
ZS5zdWJzdHJpbmdTaGFyaW5nSW1wbCgwLCBtYXRjaFBvc2l0aW9uKSwgcmVwbGFjZW1lbnQsIG1f
dmFsdWUuc3Vic3RyaW5nU2hhcmluZ0ltcGwobWF0Y2hQb3NpdGlvbiArIDEpKTsKICAgICB9CkBA
IC0yMTksNyArMjE5LDcgQEAgSlNWYWx1ZSBKU1N0cmluZzo6cmVwbGFjZUNoYXJhY3RlcihFeGVj
UwogICAgIC8vIENvdW50IHRvdGFsIGZpYmVycyBhbmQgZmluZCBtYXRjaGluZyBzdHJpbmcuCiAg
ICAgc2l6ZV90IGZpYmVyQ291bnQgPSAwOwogICAgIFN0cmluZ0ltcGwqIG1hdGNoU3RyaW5nID0g
MDsKLSAgICBzaXplX3QgbWF0Y2hQb3NpdGlvbiA9IG5vdEZvdW5kOworICAgIHVpbnQzMl90IG1h
dGNoUG9zaXRpb24gPSBTdHJpbmc6Om5vdEZvdW5kOwogICAgIGZvciAoUm9wZUl0ZXJhdG9yIGl0
KG1fZmliZXJzLmRhdGEoKSwgbV9maWJlckNvdW50KTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAg
ICAgICsrZmliZXJDb3VudDsKICAgICAgICAgaWYgKG1hdGNoU3RyaW5nKQpAQCAtMjI3LDcgKzIy
Nyw3IEBAIEpTVmFsdWUgSlNTdHJpbmc6OnJlcGxhY2VDaGFyYWN0ZXIoRXhlY1MKIAogICAgICAg
ICBTdHJpbmdJbXBsKiBzdHJpbmcgPSAqaXQ7CiAgICAgICAgIG1hdGNoUG9zaXRpb24gPSBzdHJp
bmctPmZpbmQoY2hhcmFjdGVyKTsKLSAgICAgICAgaWYgKG1hdGNoUG9zaXRpb24gPT0gbm90Rm91
bmQpCisgICAgICAgIGlmIChtYXRjaFBvc2l0aW9uID09IFN0cmluZzo6bm90Rm91bmQpCiAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgbWF0Y2hTdHJpbmcgPSBzdHJpbmc7CiAgICAgfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5
cGUuY3BwCShyZXZpc2lvbiA4NTg2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cmluZ1Byb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMCw3ICsyMTAsNyBAQCBz
dGF0aWMgTkVWRVJfSU5MSU5FIFVTdHJpbmcgc3Vic3RpdHV0ZUJhCiAgICAgICAgIG9mZnNldCA9
IGkgKyAxOwogICAgICAgICBpZiAoYmFja3JlZlN0YXJ0ID49IDApCiAgICAgICAgICAgICBzdWJz
dGl0dXRlZFJlcGxhY2VtZW50LmFwcGVuZChzb3VyY2UuY2hhcmFjdGVycygpICsgYmFja3JlZlN0
YXJ0LCBiYWNrcmVmTGVuZ3RoKTsKLSAgICB9IHdoaWxlICgoaSA9IHJlcGxhY2VtZW50LmZpbmQo
JyQnLCBpICsgMSkpICE9IG5vdEZvdW5kKTsKKyAgICB9IHdoaWxlICgoaSA9IHJlcGxhY2VtZW50
LmZpbmQoJyQnLCBpICsgMSkpICE9IFN0cmluZzo6bm90Rm91bmQpOwogCiAgICAgaWYgKHJlcGxh
Y2VtZW50Lmxlbmd0aCgpIC0gb2Zmc2V0KQogICAgICAgICBzdWJzdGl0dXRlZFJlcGxhY2VtZW50
LmFwcGVuZChyZXBsYWNlbWVudC5jaGFyYWN0ZXJzKCkgKyBvZmZzZXQsIHJlcGxhY2VtZW50Lmxl
bmd0aCgpIC0gb2Zmc2V0KTsKQEAgLTIyMSw4ICsyMjEsOCBAQCBzdGF0aWMgTkVWRVJfSU5MSU5F
IFVTdHJpbmcgc3Vic3RpdHV0ZUJhCiAKIHN0YXRpYyBpbmxpbmUgVVN0cmluZyBzdWJzdGl0dXRl
QmFja3JlZmVyZW5jZXMoY29uc3QgVVN0cmluZyYgcmVwbGFjZW1lbnQsIGNvbnN0IFVTdHJpbmcm
IHNvdXJjZSwgY29uc3QgaW50KiBvdmVjdG9yLCBSZWdFeHAqIHJlZykKIHsKLSAgICBzaXplX3Qg
aSA9IHJlcGxhY2VtZW50LmZpbmQoJyQnLCAwKTsKLSAgICBpZiAoVU5MSUtFTFkoaSAhPSBub3RG
b3VuZCkpCisgICAgdWludDMyX3QgaSA9IHJlcGxhY2VtZW50LmZpbmQoJyQnLCAwKTsKKyAgICBp
ZiAoVU5MSUtFTFkoaSAhPSBTdHJpbmc6Om5vdEZvdW5kKSkKICAgICAgICAgcmV0dXJuIHN1YnN0
aXR1dGVCYWNrcmVmZXJlbmNlc1Nsb3cocmVwbGFjZW1lbnQsIHNvdXJjZSwgb3ZlY3RvciwgcmVn
LCBpKTsKICAgICByZXR1cm4gcmVwbGFjZW1lbnQ7CiB9CkBAIC00NDMsMTMgKzQ0MywxMyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiAKICAgICBVU3RyaW5nIHBh
dHRlcm5TdHJpbmcgPSBwYXR0ZXJuLnRvU3RyaW5nKGV4ZWMpOwogICAgIC8vIFNwZWNpYWwgY2Fz
ZSBmb3Igc2luZ2xlIGNoYXJhY3RlciBwYXR0ZXJucyB3aXRob3V0IGJhY2sgcmVmZXJlbmNlIHJl
cGxhY2VtZW50Ci0gICAgaWYgKHBhdHRlcm5TdHJpbmcubGVuZ3RoKCkgPT0gMSAmJiBjYWxsVHlw
ZSA9PSBDYWxsVHlwZU5vbmUgJiYgcmVwbGFjZW1lbnRTdHJpbmcuZmluZCgnJCcsIDApID09IG5v
dEZvdW5kKQorICAgIGlmIChwYXR0ZXJuU3RyaW5nLmxlbmd0aCgpID09IDEgJiYgY2FsbFR5cGUg
PT0gQ2FsbFR5cGVOb25lICYmIHJlcGxhY2VtZW50U3RyaW5nLmZpbmQoJyQnLCAwKSA9PSBTdHJp
bmc6Om5vdEZvdW5kKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHNvdXJjZVZhbC0+
cmVwbGFjZUNoYXJhY3RlcihleGVjLCBwYXR0ZXJuU3RyaW5nWzBdLCByZXBsYWNlbWVudFN0cmlu
ZykpOwogCiAgICAgY29uc3QgVVN0cmluZyYgc291cmNlID0gc291cmNlVmFsLT52YWx1ZShleGVj
KTsKLSAgICBzaXplX3QgbWF0Y2hQb3MgPSBzb3VyY2UuZmluZChwYXR0ZXJuU3RyaW5nKTsKKyAg
ICB1aW50MzJfdCBtYXRjaFBvcyA9IHNvdXJjZS5maW5kKHBhdHRlcm5TdHJpbmcpOwogCi0gICAg
aWYgKG1hdGNoUG9zID09IG5vdEZvdW5kKQorICAgIGlmIChtYXRjaFBvcyA9PSBTdHJpbmc6Om5v
dEZvdW5kKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHNvdXJjZVZhbCk7CiAKICAg
ICBpbnQgbWF0Y2hMZW4gPSBwYXR0ZXJuU3RyaW5nLmxlbmd0aCgpOwpAQCAtNDYyLDcgKzQ2Miw3
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG8KICAgICAgICAgcmVw
bGFjZW1lbnRTdHJpbmcgPSBjYWxsKGV4ZWMsIHJlcGxhY2VtZW50LCBjYWxsVHlwZSwgY2FsbERh
dGEsIGV4ZWMtPmdsb2JhbFRoaXNWYWx1ZSgpLCBhcmdzKS50b1N0cmluZyhleGVjKTsKICAgICB9
CiAgICAgCi0gICAgc2l6ZV90IG1hdGNoRW5kID0gbWF0Y2hQb3MgKyBtYXRjaExlbjsKKyAgICB1
aW50MzJfdCBtYXRjaEVuZCA9IG1hdGNoUG9zICsgbWF0Y2hMZW47CiAgICAgaW50IG92ZWN0b3Jb
Ml0gPSB7IG1hdGNoUG9zLCBtYXRjaEVuZCB9OwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNTdHJpbmcoZXhlYywgc291cmNlLnN1YnN0cmluZ1NoYXJpbmdJbXBsKDAsIG1hdGNoUG9zKSwg
c3Vic3RpdHV0ZUJhY2tyZWZlcmVuY2VzKHJlcGxhY2VtZW50U3RyaW5nLCBzb3VyY2UsIG92ZWN0
b3IsIDApLCBzb3VyY2Uuc3Vic3RyaW5nU2hhcmluZ0ltcGwobWF0Y2hFbmQpKSk7CiB9CkBAIC01
NjAsOCArNTYwLDggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90bwog
ICAgICAgICBwb3MgPSBzdGF0aWNfY2FzdDxpbnQ+KGRwb3MpOwogICAgIH0KIAotICAgIHNpemVf
dCByZXN1bHQgPSBzLmZpbmQodTIsIHBvcyk7Ci0gICAgaWYgKHJlc3VsdCA9PSBub3RGb3VuZCkK
KyAgICB1aW50MzJfdCByZXN1bHQgPSBzLmZpbmQodTIsIHBvcyk7CisgICAgaWYgKHJlc3VsdCA9
PSBTdHJpbmc6Om5vdEZvdW5kKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVt
YmVyKC0xKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihyZXN1bHQpKTsK
IH0KQEAgLTU4OSw4ICs1ODksOCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmlu
Z1Byb3RvCiAgICAgICAgIGRwb3MgPSBsZW47CiAjZW5kaWYKIAotICAgIHNpemVfdCByZXN1bHQg
PSBzLnJldmVyc2VGaW5kKHUyLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZHBvcykpOwotICAgIGlm
IChyZXN1bHQgPT0gbm90Rm91bmQpCisgICAgdWludDMyX3QgcmVzdWx0ID0gcy5yZXZlcnNlRmlu
ZCh1Miwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGRwb3MpKTsKKyAgICBpZiAocmVzdWx0ID09IFN0
cmluZzo6bm90Rm91bmQpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIo
LTEpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHJlc3VsdCkpOwogfQpA
QCAtNzQ5LDggKzc0OSw4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJv
dG8KICAgICAgICAgICAgIHdoaWxlIChpICE9IGxpbWl0ICYmIHAwIDwgcy5sZW5ndGgoKSAtIDEp
CiAgICAgICAgICAgICAgICAgcmVzdWx0LT5wdXQoZXhlYywgaSsrLCBqc1NpbmdsZUNoYXJhY3Rl
clN1YnN0cmluZyhleGVjLCBzLCBwMCsrKSk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICBzaXplX3QgcG9zOwotICAgICAgICAgICAgd2hpbGUgKGkgIT0gbGltaXQgJiYgKHBvcyA9IHMu
ZmluZCh1MiwgcDApKSAhPSBub3RGb3VuZCkgeworICAgICAgICAgICAgdWludDMyX3QgcG9zOwor
ICAgICAgICAgICAgd2hpbGUgKGkgIT0gbGltaXQgJiYgKHBvcyA9IHMuZmluZCh1MiwgcDApKSAh
PSBTdHJpbmc6Om5vdEZvdW5kKSB7CiAgICAgICAgICAgICAgICAgcmVzdWx0LT5wdXQoZXhlYywg
aSsrLCBqc1N1YnN0cmluZyhleGVjLCBzLCBwMCwgcG9zIC0gcDApKTsKICAgICAgICAgICAgICAg
ICBwMCA9IHBvcyArIHUyLmxlbmd0aCgpOwogICAgICAgICAgICAgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVVN0cmluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1VTdHJpbmcuaAkocmV2aXNpb24gODU4NjApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9VU3RyaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0LDYg
KzI0LDcgQEAKICNkZWZpbmUgVVN0cmluZ19oCiAKICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdJ
bXBsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBKU0Mg
ewogCkBAIC05NCwxOCArOTUsMTggQEAgcHVibGljOgogICAgIHN0YXRpYyBVU3RyaW5nIG51bWJl
cihkb3VibGUpOwogCiAgICAgLy8gRmluZCBhIHNpbmdsZSBjaGFyYWN0ZXIgb3Igc3RyaW5nLCBh
bHNvIHdpdGggbWF0Y2ggZnVuY3Rpb24gJiBsYXRpbjEgZm9ybXMuCi0gICAgc2l6ZV90IGZpbmQo
VUNoYXIgYywgdW5zaWduZWQgc3RhcnQgPSAwKSBjb25zdAotICAgICAgICB7IHJldHVybiBtX2lt
cGwgPyBtX2ltcGwtPmZpbmQoYywgc3RhcnQpIDogbm90Rm91bmQ7IH0KLSAgICBzaXplX3QgZmlu
ZChjb25zdCBVU3RyaW5nJiBzdHIsIHVuc2lnbmVkIHN0YXJ0ID0gMCkgY29uc3QKLSAgICAgICAg
eyByZXR1cm4gbV9pbXBsID8gbV9pbXBsLT5maW5kKHN0ci5pbXBsKCksIHN0YXJ0KSA6IG5vdEZv
dW5kOyB9Ci0gICAgc2l6ZV90IGZpbmQoY29uc3QgY2hhciogc3RyLCB1bnNpZ25lZCBzdGFydCA9
IDApIGNvbnN0Ci0gICAgICAgIHsgcmV0dXJuIG1faW1wbCA/IG1faW1wbC0+ZmluZChzdHIsIHN0
YXJ0KSA6IG5vdEZvdW5kOyB9CisgICAgdWludDMyX3QgZmluZChVQ2hhciBjLCB1bnNpZ25lZCBz
dGFydCA9IDApIGNvbnN0CisgICAgICAgIHsgcmV0dXJuIG1faW1wbCA/IG1faW1wbC0+ZmluZChj
LCBzdGFydCkgOiBTdHJpbmc6Om5vdEZvdW5kOyB9CisgICAgdWludDMyX3QgZmluZChjb25zdCBV
U3RyaW5nJiBzdHIsIHVuc2lnbmVkIHN0YXJ0ID0gMCkgY29uc3QKKyAgICAgICAgeyByZXR1cm4g
bV9pbXBsID8gbV9pbXBsLT5maW5kKHN0ci5pbXBsKCksIHN0YXJ0KSA6IFN0cmluZzo6bm90Rm91
bmQ7IH0KKyAgICB1aW50MzJfdCBmaW5kKGNvbnN0IGNoYXIqIHN0ciwgdW5zaWduZWQgc3RhcnQg
PSAwKSBjb25zdAorICAgICAgICB7IHJldHVybiBtX2ltcGwgPyBtX2ltcGwtPmZpbmQoc3RyLCBz
dGFydCkgOiBTdHJpbmc6Om5vdEZvdW5kOyB9CiAKICAgICAvLyBGaW5kIHRoZSBsYXN0IGluc3Rh
bmNlIG9mIGEgc2luZ2xlIGNoYXJhY3RlciBvciBzdHJpbmcuCi0gICAgc2l6ZV90IHJldmVyc2VG
aW5kKFVDaGFyIGMsIHVuc2lnbmVkIHN0YXJ0ID0gVUlOVF9NQVgpIGNvbnN0Ci0gICAgICAgIHsg
cmV0dXJuIG1faW1wbCA/IG1faW1wbC0+cmV2ZXJzZUZpbmQoYywgc3RhcnQpIDogbm90Rm91bmQ7
IH0KLSAgICBzaXplX3QgcmV2ZXJzZUZpbmQoY29uc3QgVVN0cmluZyYgc3RyLCB1bnNpZ25lZCBz
dGFydCA9IFVJTlRfTUFYKSBjb25zdAotICAgICAgICB7IHJldHVybiBtX2ltcGwgPyBtX2ltcGwt
PnJldmVyc2VGaW5kKHN0ci5pbXBsKCksIHN0YXJ0KSA6IG5vdEZvdW5kOyB9CisgICAgdWludDMy
X3QgcmV2ZXJzZUZpbmQoVUNoYXIgYywgdW5zaWduZWQgc3RhcnQgPSBVSU5UX01BWCkgY29uc3QK
KyAgICAgICAgeyByZXR1cm4gbV9pbXBsID8gbV9pbXBsLT5yZXZlcnNlRmluZChjLCBzdGFydCkg
OiBTdHJpbmc6Om5vdEZvdW5kOyB9CisgICAgdWludDMyX3QgcmV2ZXJzZUZpbmQoY29uc3QgVVN0
cmluZyYgc3RyLCB1bnNpZ25lZCBzdGFydCA9IFVJTlRfTUFYKSBjb25zdAorICAgICAgICB7IHJl
dHVybiBtX2ltcGwgPyBtX2ltcGwtPnJldmVyc2VGaW5kKHN0ci5pbXBsKCksIHN0YXJ0KSA6IFN0
cmluZzo6bm90Rm91bmQ7IH0KIAogICAgIFVTdHJpbmcgc3Vic3RyaW5nU2hhcmluZ0ltcGwodW5z
aWduZWQgcG9zLCB1bnNpZ25lZCBsZW4gPSBVSU5UX01BWCkgY29uc3Q7CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9TdHJpbmdJbXBsLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvU3RyaW5nSW1wbC5jcHAJKHJldmlzaW9uIDg1
ODYwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03OCw2ICs3OCwxMCBAQCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0
cmluZ0ltcGw6OmNyZWF0CiAgICAgICAgIHJldHVybiBlbXB0eSgpOwogICAgIH0KIAorICAgIC8v
IFdlIGRvIG5vdCBzdXBwb3J0IHRoaXMgbGVuZ3RoLgorICAgIGlmIChsZW5ndGggPT0gMHhGRkZG
RkZGRikKKyAgICAgICAgQ1JBU0goKTsKKwogICAgIC8vIEFsbG9jYXRlIGEgc2luZ2xlIGJ1ZmZl
ciBsYXJnZSBlbm91Z2ggdG8gY29udGFpbiB0aGUgU3RyaW5nSW1wbAogICAgIC8vIHN0cnVjdCBh
cyB3ZWxsIGFzIHRoZSBkYXRhIHdoaWNoIGl0IGNvbnRhaW5zLiBUaGlzIHJlbW92ZXMgb25lIAog
ICAgIC8vIGhlYXAgYWxsb2NhdGlvbiBmcm9tIHRoaXMgY2FsbC4KQEAgLTk1LDYgKzk5LDEwIEBA
IFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6Y3JlYXQKICAgICBpZiAoIWNoYXJh
Y3RlcnMgfHwgIWxlbmd0aCkKICAgICAgICAgcmV0dXJuIGVtcHR5KCk7CiAKKyAgICAvLyBXZSBk
byBub3Qgc3VwcG9ydCB0aGlzIGxlbmd0aC4KKyAgICBpZiAobGVuZ3RoID09IDB4RkZGRkZGRkYp
CisgICAgICAgIENSQVNIKCk7CisKICAgICBVQ2hhciogZGF0YTsKICAgICBSZWZQdHI8U3RyaW5n
SW1wbD4gc3RyaW5nID0gY3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGRhdGEpOwogICAgIG1l
bWNweShkYXRhLCBjaGFyYWN0ZXJzLCBsZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKQEAgLTEwNiw2
ICsxMTQsMTAgQEAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpjcmVhdAogICAg
IGlmICghY2hhcmFjdGVycyB8fCAhbGVuZ3RoKQogICAgICAgICByZXR1cm4gZW1wdHkoKTsKIAor
ICAgIC8vIFdlIGRvIG5vdCBzdXBwb3J0IHRoaXMgbGVuZ3RoLgorICAgIGlmIChsZW5ndGggPT0g
MHhGRkZGRkZGRikKKyAgICAgICAgQ1JBU0goKTsKKwogICAgIFVDaGFyKiBkYXRhOwogICAgIFJl
ZlB0cjxTdHJpbmdJbXBsPiBzdHJpbmcgPSBjcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCwgZGF0
YSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSAhPSBsZW5ndGg7ICsraSkgewpAQCAtNTE4
LDIxICs1MzAsMjEgQEAgaW50IGNvZGVQb2ludENvbXBhcmUoY29uc3QgU3RyaW5nSW1wbCogcwog
ICAgIHJldHVybiAobDEgPiBsMikgPyAxIDogLTE7CiB9CiAKLXNpemVfdCBTdHJpbmdJbXBsOjpm
aW5kKFVDaGFyIGMsIHVuc2lnbmVkIHN0YXJ0KQordWludDMyX3QgU3RyaW5nSW1wbDo6ZmluZChV
Q2hhciBjLCB1bnNpZ25lZCBzdGFydCkKIHsKICAgICByZXR1cm4gV1RGOjpmaW5kKG1fZGF0YSwg
bV9sZW5ndGgsIGMsIHN0YXJ0KTsKIH0KIAotc2l6ZV90IFN0cmluZ0ltcGw6OmZpbmQoQ2hhcmFj
dGVyTWF0Y2hGdW5jdGlvblB0ciBtYXRjaEZ1bmN0aW9uLCB1bnNpZ25lZCBzdGFydCkKK3VpbnQz
Ml90IFN0cmluZ0ltcGw6OmZpbmQoQ2hhcmFjdGVyTWF0Y2hGdW5jdGlvblB0ciBtYXRjaEZ1bmN0
aW9uLCB1bnNpZ25lZCBzdGFydCkKIHsKICAgICByZXR1cm4gV1RGOjpmaW5kKG1fZGF0YSwgbV9s
ZW5ndGgsIG1hdGNoRnVuY3Rpb24sIHN0YXJ0KTsKIH0KIAotc2l6ZV90IFN0cmluZ0ltcGw6OmZp
bmQoY29uc3QgY2hhciogbWF0Y2hTdHJpbmcsIHVuc2lnbmVkIGluZGV4KQordWludDMyX3QgU3Ry
aW5nSW1wbDo6ZmluZChjb25zdCBjaGFyKiBtYXRjaFN0cmluZywgdW5zaWduZWQgaW5kZXgpCiB7
CiAgICAgLy8gQ2hlY2sgZm9yIG51bGwgb3IgZW1wdHkgc3RyaW5nIHRvIG1hdGNoIGFnYWluc3QK
ICAgICBpZiAoIW1hdGNoU3RyaW5nKQotICAgICAgICByZXR1cm4gbm90Rm91bmQ7CisgICAgICAg
IHJldHVybiBTdHJpbmc6Om5vdEZvdW5kOwogICAgIHNpemVfdCBtYXRjaFN0cmluZ0xlbmd0aCA9
IHN0cmxlbihtYXRjaFN0cmluZyk7CiAgICAgaWYgKG1hdGNoU3RyaW5nTGVuZ3RoID4gbnVtZXJp
Y19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkKICAgICAgICAgQ1JBU0goKTsKQEAgLTU0NiwxMCAr
NTU4LDEwIEBAIHNpemVfdCBTdHJpbmdJbXBsOjpmaW5kKGNvbnN0IGNoYXIqIG1hdGMKIAogICAg
IC8vIENoZWNrIGluZGV4ICYgbWF0Y2hMZW5ndGggYXJlIGluIHJhbmdlLgogICAgIGlmIChpbmRl
eCA+IGxlbmd0aCgpKQotICAgICAgICByZXR1cm4gbm90Rm91bmQ7CisgICAgICAgIHJldHVybiBT
dHJpbmc6Om5vdEZvdW5kOwogICAgIHVuc2lnbmVkIHNlYXJjaExlbmd0aCA9IGxlbmd0aCgpIC0g
aW5kZXg7CiAgICAgaWYgKG1hdGNoTGVuZ3RoID4gc2VhcmNoTGVuZ3RoKQotICAgICAgICByZXR1
cm4gbm90Rm91bmQ7CisgICAgICAgIHJldHVybiBTdHJpbmc6Om5vdEZvdW5kOwogICAgIC8vIGRl
bHRhIGlzIHRoZSBudW1iZXIgb2YgYWRkaXRpb25hbCB0aW1lcyB0byB0ZXN0OyBkZWx0YSA9PSAw
IG1lYW5zIHRlc3Qgb25seSBvbmNlLgogICAgIHVuc2lnbmVkIGRlbHRhID0gc2VhcmNoTGVuZ3Ro
IC0gbWF0Y2hMZW5ndGg7CiAKQEAgLTU2OSw3ICs1ODEsNyBAQCBzaXplX3QgU3RyaW5nSW1wbDo6
ZmluZChjb25zdCBjaGFyKiBtYXRjCiAgICAgLy8ga2VlcCBsb29waW5nIHVudGlsIHdlIG1hdGNo
CiAgICAgd2hpbGUgKHNlYXJjaEhhc2ggIT0gbWF0Y2hIYXNoIHx8ICFlcXVhbChzZWFyY2hDaGFy
YWN0ZXJzICsgaSwgbWF0Y2hTdHJpbmcsIG1hdGNoTGVuZ3RoKSkgewogICAgICAgICBpZiAoaSA9
PSBkZWx0YSkKLSAgICAgICAgICAgIHJldHVybiBub3RGb3VuZDsKKyAgICAgICAgICAgIHJldHVy
biBTdHJpbmc6Om5vdEZvdW5kOwogICAgICAgICBzZWFyY2hIYXNoICs9IHNlYXJjaENoYXJhY3Rl
cnNbaSArIG1hdGNoTGVuZ3RoXTsKICAgICAgICAgc2VhcmNoSGFzaCAtPSBzZWFyY2hDaGFyYWN0
ZXJzW2ldOwogICAgICAgICArK2k7CkBAIC01NzcsMTEgKzU4OSwxMSBAQCBzaXplX3QgU3RyaW5n
SW1wbDo6ZmluZChjb25zdCBjaGFyKiBtYXRjCiAgICAgcmV0dXJuIGluZGV4ICsgaTsKIH0KIAot
c2l6ZV90IFN0cmluZ0ltcGw6OmZpbmRJZ25vcmluZ0Nhc2UoY29uc3QgY2hhciogbWF0Y2hTdHJp
bmcsIHVuc2lnbmVkIGluZGV4KQordWludDMyX3QgU3RyaW5nSW1wbDo6ZmluZElnbm9yaW5nQ2Fz
ZShjb25zdCBjaGFyKiBtYXRjaFN0cmluZywgdW5zaWduZWQgaW5kZXgpCiB7CiAgICAgLy8gQ2hl
Y2sgZm9yIG51bGwgb3IgZW1wdHkgc3RyaW5nIHRvIG1hdGNoIGFnYWluc3QKICAgICBpZiAoIW1h
dGNoU3RyaW5nKQotICAgICAgICByZXR1cm4gbm90Rm91bmQ7CisgICAgICAgIHJldHVybiBTdHJp
bmc6Om5vdEZvdW5kOwogICAgIHNpemVfdCBtYXRjaFN0cmluZ0xlbmd0aCA9IHN0cmxlbihtYXRj
aFN0cmluZyk7CiAgICAgaWYgKG1hdGNoU3RyaW5nTGVuZ3RoID4gbnVtZXJpY19saW1pdHM8dW5z
aWduZWQ+OjptYXgoKSkKICAgICAgICAgQ1JBU0goKTsKQEAgLTU5MSwxMCArNjAzLDEwIEBAIHNp
emVfdCBTdHJpbmdJbXBsOjpmaW5kSWdub3JpbmdDYXNlKGNvbnMKIAogICAgIC8vIENoZWNrIGlu
ZGV4ICYgbWF0Y2hMZW5ndGggYXJlIGluIHJhbmdlLgogICAgIGlmIChpbmRleCA+IGxlbmd0aCgp
KQotICAgICAgICByZXR1cm4gbm90Rm91bmQ7CisgICAgICAgIHJldHVybiBTdHJpbmc6Om5vdEZv
dW5kOwogICAgIHVuc2lnbmVkIHNlYXJjaExlbmd0aCA9IGxlbmd0aCgpIC0gaW5kZXg7CiAgICAg
aWYgKG1hdGNoTGVuZ3RoID4gc2VhcmNoTGVuZ3RoKQotICAgICAgICByZXR1cm4gbm90Rm91bmQ7
CisgICAgICAgIHJldHVybiBTdHJpbmc6Om5vdEZvdW5kOwogICAgIC8vIGRlbHRhIGlzIHRoZSBu
dW1iZXIgb2YgYWRkaXRpb25hbCB0aW1lcyB0byB0ZXN0OyBkZWx0YSA9PSAwIG1lYW5zIHRlc3Qg
b25seSBvbmNlLgogICAgIHVuc2lnbmVkIGRlbHRhID0gc2VhcmNoTGVuZ3RoIC0gbWF0Y2hMZW5n
dGg7CiAKQEAgLTYwNCwxNyArNjE2LDE3IEBAIHNpemVfdCBTdHJpbmdJbXBsOjpmaW5kSWdub3Jp
bmdDYXNlKGNvbnMKICAgICAvLyBrZWVwIGxvb3BpbmcgdW50aWwgd2UgbWF0Y2gKICAgICB3aGls
ZSAoIWVxdWFsSWdub3JpbmdDYXNlKHNlYXJjaENoYXJhY3RlcnMgKyBpLCBtYXRjaFN0cmluZywg
bWF0Y2hMZW5ndGgpKSB7CiAgICAgICAgIGlmIChpID09IGRlbHRhKQotICAgICAgICAgICAgcmV0
dXJuIG5vdEZvdW5kOworICAgICAgICAgICAgcmV0dXJuIFN0cmluZzo6bm90Rm91bmQ7CiAgICAg
ICAgICsraTsKICAgICB9CiAgICAgcmV0dXJuIGluZGV4ICsgaTsKIH0KIAotc2l6ZV90IFN0cmlu
Z0ltcGw6OmZpbmQoU3RyaW5nSW1wbCogbWF0Y2hTdHJpbmcsIHVuc2lnbmVkIGluZGV4KQordWlu
dDMyX3QgU3RyaW5nSW1wbDo6ZmluZChTdHJpbmdJbXBsKiBtYXRjaFN0cmluZywgdW5zaWduZWQg
aW5kZXgpCiB7CiAgICAgLy8gQ2hlY2sgZm9yIG51bGwgb3IgZW1wdHkgc3RyaW5nIHRvIG1hdGNo
IGFnYWluc3QKICAgICBpZiAoIW1hdGNoU3RyaW5nKQotICAgICAgICByZXR1cm4gbm90Rm91bmQ7
CisgICAgICAgIHJldHVybiBTdHJpbmc6Om5vdEZvdW5kOwogICAgIHVuc2lnbmVkIG1hdGNoTGVu
Z3RoID0gbWF0Y2hTdHJpbmctPmxlbmd0aCgpOwogICAgIGlmICghbWF0Y2hMZW5ndGgpCiAgICAg
ICAgIHJldHVybiBtaW4oaW5kZXgsIGxlbmd0aCgpKTsKQEAgLTYyNSwxMCArNjM3LDEwIEBAIHNp
emVfdCBTdHJpbmdJbXBsOjpmaW5kKFN0cmluZ0ltcGwqIG1hdGMKIAogICAgIC8vIENoZWNrIGlu
ZGV4ICYgbWF0Y2hMZW5ndGggYXJlIGluIHJhbmdlLgogICAgIGlmIChpbmRleCA+IGxlbmd0aCgp
KQotICAgICAgICByZXR1cm4gbm90Rm91bmQ7CisgICAgICAgIHJldHVybiBTdHJpbmc6Om5vdEZv
dW5kOwogICAgIHVuc2lnbmVkIHNlYXJjaExlbmd0aCA9IGxlbmd0aCgpIC0gaW5kZXg7CiAgICAg
aWYgKG1hdGNoTGVuZ3RoID4gc2VhcmNoTGVuZ3RoKQotICAgICAgICByZXR1cm4gbm90Rm91bmQ7
CisgICAgICAgIHJldHVybiBTdHJpbmc6Om5vdEZvdW5kOwogICAgIC8vIGRlbHRhIGlzIHRoZSBu
dW1iZXIgb2YgYWRkaXRpb25hbCB0aW1lcyB0byB0ZXN0OyBkZWx0YSA9PSAwIG1lYW5zIHRlc3Qg
b25seSBvbmNlLgogICAgIHVuc2lnbmVkIGRlbHRhID0gc2VhcmNoTGVuZ3RoIC0gbWF0Y2hMZW5n
dGg7CiAKQEAgLTY0OCw3ICs2NjAsNyBAQCBzaXplX3QgU3RyaW5nSW1wbDo6ZmluZChTdHJpbmdJ
bXBsKiBtYXRjCiAgICAgLy8ga2VlcCBsb29waW5nIHVudGlsIHdlIG1hdGNoCiAgICAgd2hpbGUg
KHNlYXJjaEhhc2ggIT0gbWF0Y2hIYXNoIHx8IG1lbWNtcChzZWFyY2hDaGFyYWN0ZXJzICsgaSwg
bWF0Y2hDaGFyYWN0ZXJzLCBtYXRjaExlbmd0aCAqIHNpemVvZihVQ2hhcikpKSB7CiAgICAgICAg
IGlmIChpID09IGRlbHRhKQotICAgICAgICAgICAgcmV0dXJuIG5vdEZvdW5kOworICAgICAgICAg
ICAgcmV0dXJuIFN0cmluZzo6bm90Rm91bmQ7CiAgICAgICAgIHNlYXJjaEhhc2ggKz0gc2VhcmNo
Q2hhcmFjdGVyc1tpICsgbWF0Y2hMZW5ndGhdOwogICAgICAgICBzZWFyY2hIYXNoIC09IHNlYXJj
aENoYXJhY3RlcnNbaV07CiAgICAgICAgICsraTsKQEAgLTY1NiwyMSArNjY4LDIxIEBAIHNpemVf
dCBTdHJpbmdJbXBsOjpmaW5kKFN0cmluZ0ltcGwqIG1hdGMKICAgICByZXR1cm4gaW5kZXggKyBp
OwogfQogCi1zaXplX3QgU3RyaW5nSW1wbDo6ZmluZElnbm9yaW5nQ2FzZShTdHJpbmdJbXBsKiBt
YXRjaFN0cmluZywgdW5zaWduZWQgaW5kZXgpCit1aW50MzJfdCBTdHJpbmdJbXBsOjpmaW5kSWdu
b3JpbmdDYXNlKFN0cmluZ0ltcGwqIG1hdGNoU3RyaW5nLCB1bnNpZ25lZCBpbmRleCkKIHsKICAg
ICAvLyBDaGVjayBmb3IgbnVsbCBvciBlbXB0eSBzdHJpbmcgdG8gbWF0Y2ggYWdhaW5zdAogICAg
IGlmICghbWF0Y2hTdHJpbmcpCi0gICAgICAgIHJldHVybiBub3RGb3VuZDsKKyAgICAgICAgcmV0
dXJuIFN0cmluZzo6bm90Rm91bmQ7CiAgICAgdW5zaWduZWQgbWF0Y2hMZW5ndGggPSBtYXRjaFN0
cmluZy0+bGVuZ3RoKCk7CiAgICAgaWYgKCFtYXRjaExlbmd0aCkKICAgICAgICAgcmV0dXJuIG1p
bihpbmRleCwgbGVuZ3RoKCkpOwogCiAgICAgLy8gQ2hlY2sgaW5kZXggJiBtYXRjaExlbmd0aCBh
cmUgaW4gcmFuZ2UuCiAgICAgaWYgKGluZGV4ID4gbGVuZ3RoKCkpCi0gICAgICAgIHJldHVybiBu
b3RGb3VuZDsKKyAgICAgICAgcmV0dXJuIFN0cmluZzo6bm90Rm91bmQ7CiAgICAgdW5zaWduZWQg
c2VhcmNoTGVuZ3RoID0gbGVuZ3RoKCkgLSBpbmRleDsKICAgICBpZiAobWF0Y2hMZW5ndGggPiBz
ZWFyY2hMZW5ndGgpCi0gICAgICAgIHJldHVybiBub3RGb3VuZDsKKyAgICAgICAgcmV0dXJuIFN0
cmluZzo6bm90Rm91bmQ7CiAgICAgLy8gZGVsdGEgaXMgdGhlIG51bWJlciBvZiBhZGRpdGlvbmFs
IHRpbWVzIHRvIHRlc3Q7IGRlbHRhID09IDAgbWVhbnMgdGVzdCBvbmx5IG9uY2UuCiAgICAgdW5z
aWduZWQgZGVsdGEgPSBzZWFyY2hMZW5ndGggLSBtYXRjaExlbmd0aDsKIApAQCAtNjgxLDIyICs2
OTMsMjIgQEAgc2l6ZV90IFN0cmluZ0ltcGw6OmZpbmRJZ25vcmluZ0Nhc2UoU3RyaQogICAgIC8v
IGtlZXAgbG9vcGluZyB1bnRpbCB3ZSBtYXRjaAogICAgIHdoaWxlICghZXF1YWxJZ25vcmluZ0Nh
c2Uoc2VhcmNoQ2hhcmFjdGVycyArIGksIG1hdGNoQ2hhcmFjdGVycywgbWF0Y2hMZW5ndGgpKSB7
CiAgICAgICAgIGlmIChpID09IGRlbHRhKQotICAgICAgICAgICAgcmV0dXJuIG5vdEZvdW5kOwor
ICAgICAgICAgICAgcmV0dXJuIFN0cmluZzo6bm90Rm91bmQ7CiAgICAgICAgICsraTsKICAgICB9
CiAgICAgcmV0dXJuIGluZGV4ICsgaTsKIH0KIAotc2l6ZV90IFN0cmluZ0ltcGw6OnJldmVyc2VG
aW5kKFVDaGFyIGMsIHVuc2lnbmVkIGluZGV4KQordWludDMyX3QgU3RyaW5nSW1wbDo6cmV2ZXJz
ZUZpbmQoVUNoYXIgYywgdW5zaWduZWQgaW5kZXgpCiB7CiAgICAgcmV0dXJuIFdURjo6cmV2ZXJz
ZUZpbmQobV9kYXRhLCBtX2xlbmd0aCwgYywgaW5kZXgpOwogfQogCi1zaXplX3QgU3RyaW5nSW1w
bDo6cmV2ZXJzZUZpbmQoU3RyaW5nSW1wbCogbWF0Y2hTdHJpbmcsIHVuc2lnbmVkIGluZGV4KQor
dWludDMyX3QgU3RyaW5nSW1wbDo6cmV2ZXJzZUZpbmQoU3RyaW5nSW1wbCogbWF0Y2hTdHJpbmcs
IHVuc2lnbmVkIGluZGV4KQogewogICAgIC8vIENoZWNrIGZvciBudWxsIG9yIGVtcHR5IHN0cmlu
ZyB0byBtYXRjaCBhZ2FpbnN0CiAgICAgaWYgKCFtYXRjaFN0cmluZykKLSAgICAgICAgcmV0dXJu
IG5vdEZvdW5kOworICAgICAgICByZXR1cm4gU3RyaW5nOjpub3RGb3VuZDsKICAgICB1bnNpZ25l
ZCBtYXRjaExlbmd0aCA9IG1hdGNoU3RyaW5nLT5sZW5ndGgoKTsKICAgICBpZiAoIW1hdGNoTGVu
Z3RoKQogICAgICAgICByZXR1cm4gbWluKGluZGV4LCBsZW5ndGgoKSk7CkBAIC03MDcsNyArNzE5
LDcgQEAgc2l6ZV90IFN0cmluZ0ltcGw6OnJldmVyc2VGaW5kKFN0cmluZ0ltcAogCiAgICAgLy8g
Q2hlY2sgaW5kZXggJiBtYXRjaExlbmd0aCBhcmUgaW4gcmFuZ2UuCiAgICAgaWYgKG1hdGNoTGVu
Z3RoID4gbGVuZ3RoKCkpCi0gICAgICAgIHJldHVybiBub3RGb3VuZDsKKyAgICAgICAgcmV0dXJu
IFN0cmluZzo6bm90Rm91bmQ7CiAgICAgLy8gZGVsdGEgaXMgdGhlIG51bWJlciBvZiBhZGRpdGlv
bmFsIHRpbWVzIHRvIHRlc3Q7IGRlbHRhID09IDAgbWVhbnMgdGVzdCBvbmx5IG9uY2UuCiAgICAg
dW5zaWduZWQgZGVsdGEgPSBtaW4oaW5kZXgsIGxlbmd0aCgpIC0gbWF0Y2hMZW5ndGgpOwogCkBA
IC03MjYsNyArNzM4LDcgQEAgc2l6ZV90IFN0cmluZ0ltcGw6OnJldmVyc2VGaW5kKFN0cmluZ0lt
cAogICAgIC8vIGtlZXAgbG9vcGluZyB1bnRpbCB3ZSBtYXRjaAogICAgIHdoaWxlIChzZWFyY2hI
YXNoICE9IG1hdGNoSGFzaCB8fCBtZW1jbXAoc2VhcmNoQ2hhcmFjdGVycyArIGRlbHRhLCBtYXRj
aENoYXJhY3RlcnMsIG1hdGNoTGVuZ3RoICogc2l6ZW9mKFVDaGFyKSkpIHsKICAgICAgICAgaWYg
KCFkZWx0YSkKLSAgICAgICAgICAgIHJldHVybiBub3RGb3VuZDsKKyAgICAgICAgICAgIHJldHVy
biBTdHJpbmc6Om5vdEZvdW5kOwogICAgICAgICBkZWx0YS0tOwogICAgICAgICBzZWFyY2hIYXNo
IC09IHNlYXJjaENoYXJhY3RlcnNbZGVsdGEgKyBtYXRjaExlbmd0aF07CiAgICAgICAgIHNlYXJj
aEhhc2ggKz0gc2VhcmNoQ2hhcmFjdGVyc1tkZWx0YV07CkBAIC03MzQsMTggKzc0NiwxOCBAQCBz
aXplX3QgU3RyaW5nSW1wbDo6cmV2ZXJzZUZpbmQoU3RyaW5nSW1wCiAgICAgcmV0dXJuIGRlbHRh
OwogfQogCi1zaXplX3QgU3RyaW5nSW1wbDo6cmV2ZXJzZUZpbmRJZ25vcmluZ0Nhc2UoU3RyaW5n
SW1wbCogbWF0Y2hTdHJpbmcsIHVuc2lnbmVkIGluZGV4KQordWludDMyX3QgU3RyaW5nSW1wbDo6
cmV2ZXJzZUZpbmRJZ25vcmluZ0Nhc2UoU3RyaW5nSW1wbCogbWF0Y2hTdHJpbmcsIHVuc2lnbmVk
IGluZGV4KQogewogICAgIC8vIENoZWNrIGZvciBudWxsIG9yIGVtcHR5IHN0cmluZyB0byBtYXRj
aCBhZ2FpbnN0CiAgICAgaWYgKCFtYXRjaFN0cmluZykKLSAgICAgICAgcmV0dXJuIG5vdEZvdW5k
OworICAgICAgICByZXR1cm4gU3RyaW5nOjpub3RGb3VuZDsKICAgICB1bnNpZ25lZCBtYXRjaExl
bmd0aCA9IG1hdGNoU3RyaW5nLT5sZW5ndGgoKTsKICAgICBpZiAoIW1hdGNoTGVuZ3RoKQogICAg
ICAgICByZXR1cm4gbWluKGluZGV4LCBsZW5ndGgoKSk7CiAKICAgICAvLyBDaGVjayBpbmRleCAm
IG1hdGNoTGVuZ3RoIGFyZSBpbiByYW5nZS4KICAgICBpZiAobWF0Y2hMZW5ndGggPiBsZW5ndGgo
KSkKLSAgICAgICAgcmV0dXJuIG5vdEZvdW5kOworICAgICAgICByZXR1cm4gU3RyaW5nOjpub3RG
b3VuZDsKICAgICAvLyBkZWx0YSBpcyB0aGUgbnVtYmVyIG9mIGFkZGl0aW9uYWwgdGltZXMgdG8g
dGVzdDsgZGVsdGEgPT0gMCBtZWFucyB0ZXN0IG9ubHkgb25jZS4KICAgICB1bnNpZ25lZCBkZWx0
YSA9IG1pbihpbmRleCwgbGVuZ3RoKCkgLSBtYXRjaExlbmd0aCk7CiAgICAgCkBAIC03NTUsNyAr
NzY3LDcgQEAgc2l6ZV90IFN0cmluZ0ltcGw6OnJldmVyc2VGaW5kSWdub3JpbmdDYQogICAgIC8v
IGtlZXAgbG9vcGluZyB1bnRpbCB3ZSBtYXRjaAogICAgIHdoaWxlICghZXF1YWxJZ25vcmluZ0Nh
c2Uoc2VhcmNoQ2hhcmFjdGVycyArIGRlbHRhLCBtYXRjaENoYXJhY3RlcnMsIG1hdGNoTGVuZ3Ro
KSkgewogICAgICAgICBpZiAoIWRlbHRhKQotICAgICAgICAgICAgcmV0dXJuIG5vdEZvdW5kOwor
ICAgICAgICAgICAgcmV0dXJuIFN0cmluZzo6bm90Rm91bmQ7CiAgICAgICAgIGRlbHRhLS07CiAg
ICAgfQogICAgIHJldHVybiBkZWx0YTsKQEAgLTgyMiwxMSArODM0LDExIEBAIFBhc3NSZWZQdHI8
U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6cmVwbGEKICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAg
ICAgIAogICAgIHVuc2lnbmVkIHJlcFN0ckxlbmd0aCA9IHJlcGxhY2VtZW50LT5sZW5ndGgoKTsK
LSAgICBzaXplX3Qgc3JjU2VnbWVudFN0YXJ0ID0gMDsKKyAgICB1aW50MzJfdCBzcmNTZWdtZW50
U3RhcnQgPSAwOwogICAgIHVuc2lnbmVkIG1hdGNoQ291bnQgPSAwOwogICAgIAogICAgIC8vIENv
dW50IHRoZSBtYXRjaGVzCi0gICAgd2hpbGUgKChzcmNTZWdtZW50U3RhcnQgPSBmaW5kKHBhdHRl
cm4sIHNyY1NlZ21lbnRTdGFydCkpICE9IG5vdEZvdW5kKSB7CisgICAgd2hpbGUgKChzcmNTZWdt
ZW50U3RhcnQgPSBmaW5kKHBhdHRlcm4sIHNyY1NlZ21lbnRTdGFydCkpICE9IFN0cmluZzo6bm90
Rm91bmQpIHsKICAgICAgICAgKyttYXRjaENvdW50OwogICAgICAgICArK3NyY1NlZ21lbnRTdGFy
dDsKICAgICB9CkBAIC04NDksMTIgKzg2MSwxMiBAQCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0
cmluZ0ltcGw6OnJlcGxhCiAgICAgUmVmUHRyPFN0cmluZ0ltcGw+IG5ld0ltcGwgPSBjcmVhdGVV
bmluaXRpYWxpemVkKG5ld1NpemUsIGRhdGEpOwogCiAgICAgLy8gQ29uc3RydWN0IHRoZSBuZXcg
ZGF0YQotICAgIHNpemVfdCBzcmNTZWdtZW50RW5kOworICAgIHVpbnQzMl90IHNyY1NlZ21lbnRF
bmQ7CiAgICAgdW5zaWduZWQgc3JjU2VnbWVudExlbmd0aDsKICAgICBzcmNTZWdtZW50U3RhcnQg
PSAwOwogICAgIHVuc2lnbmVkIGRzdE9mZnNldCA9IDA7CiAgICAgCi0gICAgd2hpbGUgKChzcmNT
ZWdtZW50RW5kID0gZmluZChwYXR0ZXJuLCBzcmNTZWdtZW50U3RhcnQpKSAhPSBub3RGb3VuZCkg
eworICAgIHdoaWxlICgoc3JjU2VnbWVudEVuZCA9IGZpbmQocGF0dGVybiwgc3JjU2VnbWVudFN0
YXJ0KSkgIT0gU3RyaW5nOjpub3RGb3VuZCkgewogICAgICAgICBzcmNTZWdtZW50TGVuZ3RoID0g
c3JjU2VnbWVudEVuZCAtIHNyY1NlZ21lbnRTdGFydDsKICAgICAgICAgbWVtY3B5KGRhdGEgKyBk
c3RPZmZzZXQsIG1fZGF0YSArIHNyY1NlZ21lbnRTdGFydCwgc3JjU2VnbWVudExlbmd0aCAqIHNp
emVvZihVQ2hhcikpOwogICAgICAgICBkc3RPZmZzZXQgKz0gc3JjU2VnbWVudExlbmd0aDsKQEAg
LTg4MSwxMSArODkzLDExIEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6cmVw
bGEKICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgIAogICAgIHVuc2lnbmVkIHJlcFN0ckxl
bmd0aCA9IHJlcGxhY2VtZW50LT5sZW5ndGgoKTsKLSAgICBzaXplX3Qgc3JjU2VnbWVudFN0YXJ0
ID0gMDsKKyAgICB1aW50MzJfdCBzcmNTZWdtZW50U3RhcnQgPSAwOwogICAgIHVuc2lnbmVkIG1h
dGNoQ291bnQgPSAwOwogICAgIAogICAgIC8vIENvdW50IHRoZSBtYXRjaGVzCi0gICAgd2hpbGUg
KChzcmNTZWdtZW50U3RhcnQgPSBmaW5kKHBhdHRlcm4sIHNyY1NlZ21lbnRTdGFydCkpICE9IG5v
dEZvdW5kKSB7CisgICAgd2hpbGUgKChzcmNTZWdtZW50U3RhcnQgPSBmaW5kKHBhdHRlcm4sIHNy
Y1NlZ21lbnRTdGFydCkpICE9IFN0cmluZzo6bm90Rm91bmQpIHsKICAgICAgICAgKyttYXRjaENv
dW50OwogICAgICAgICBzcmNTZWdtZW50U3RhcnQgKz0gcGF0dGVybkxlbmd0aDsKICAgICB9CkBA
IC05MDcsMTIgKzkxOSwxMiBAQCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OnJl
cGxhCiAgICAgUmVmUHRyPFN0cmluZ0ltcGw+IG5ld0ltcGwgPSBjcmVhdGVVbmluaXRpYWxpemVk
KG5ld1NpemUsIGRhdGEpOwogICAgIAogICAgIC8vIENvbnN0cnVjdCB0aGUgbmV3IGRhdGEKLSAg
ICBzaXplX3Qgc3JjU2VnbWVudEVuZDsKKyAgICB1aW50MzJfdCBzcmNTZWdtZW50RW5kOwogICAg
IHVuc2lnbmVkIHNyY1NlZ21lbnRMZW5ndGg7CiAgICAgc3JjU2VnbWVudFN0YXJ0ID0gMDsKICAg
ICB1bnNpZ25lZCBkc3RPZmZzZXQgPSAwOwogICAgIAotICAgIHdoaWxlICgoc3JjU2VnbWVudEVu
ZCA9IGZpbmQocGF0dGVybiwgc3JjU2VnbWVudFN0YXJ0KSkgIT0gbm90Rm91bmQpIHsKKyAgICB3
aGlsZSAoKHNyY1NlZ21lbnRFbmQgPSBmaW5kKHBhdHRlcm4sIHNyY1NlZ21lbnRTdGFydCkpICE9
IFN0cmluZzo6bm90Rm91bmQpIHsKICAgICAgICAgc3JjU2VnbWVudExlbmd0aCA9IHNyY1NlZ21l
bnRFbmQgLSBzcmNTZWdtZW50U3RhcnQ7CiAgICAgICAgIG1lbWNweShkYXRhICsgZHN0T2Zmc2V0
LCBtX2RhdGEgKyBzcmNTZWdtZW50U3RhcnQsIHNyY1NlZ21lbnRMZW5ndGggKiBzaXplb2YoVUNo
YXIpKTsKICAgICAgICAgZHN0T2Zmc2V0ICs9IHNyY1NlZ21lbnRMZW5ndGg7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvU3RyaW5nSW1wbC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9TdHJpbmdJbXBsLmgJKHJldmlzaW9uIDg1ODYw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1N0cmluZ0ltcGwuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTY3LDcgKzE2Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBl
bXB0eSgpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKGxlbmd0aCA+ICgoc3RkOjpudW1lcmlj
X2xpbWl0czx1bnNpZ25lZD46Om1heCgpIC0gc2l6ZW9mKFN0cmluZ0ltcGwpKSAvIHNpemVvZihV
Q2hhcikpKSB7CisgICAgICAgIGlmIChsZW5ndGggPiAoKHN0ZDo6bnVtZXJpY19saW1pdHM8dW5z
aWduZWQ+OjptYXgoKSAtIHNpemVvZihTdHJpbmdJbXBsKSkgLyBzaXplb2YoVUNoYXIpKSB8fCBs
ZW5ndGggPT0gMHhGRkZGRkZGRikgewogICAgICAgICAgICAgb3V0cHV0ID0gMDsKICAgICAgICAg
ICAgIHJldHVybiAwOwogICAgICAgICB9CkBAIC0yOTQsMTYgKzI5NCwxNiBAQCBwdWJsaWM6CiAK
ICAgICBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IHJlbW92ZUNoYXJhY3RlcnMoQ2hhcmFjdGVyTWF0
Y2hGdW5jdGlvblB0cik7CiAKLSAgICBzaXplX3QgZmluZChVQ2hhciwgdW5zaWduZWQgaW5kZXgg
PSAwKTsKLSAgICBzaXplX3QgZmluZChDaGFyYWN0ZXJNYXRjaEZ1bmN0aW9uUHRyLCB1bnNpZ25l
ZCBpbmRleCA9IDApOwotICAgIHNpemVfdCBmaW5kKGNvbnN0IGNoYXIqLCB1bnNpZ25lZCBpbmRl
eCA9IDApOwotICAgIHNpemVfdCBmaW5kKFN0cmluZ0ltcGwqLCB1bnNpZ25lZCBpbmRleCA9IDAp
OwotICAgIHNpemVfdCBmaW5kSWdub3JpbmdDYXNlKGNvbnN0IGNoYXIqLCB1bnNpZ25lZCBpbmRl
eCA9IDApOwotICAgIHNpemVfdCBmaW5kSWdub3JpbmdDYXNlKFN0cmluZ0ltcGwqLCB1bnNpZ25l
ZCBpbmRleCA9IDApOwotCi0gICAgc2l6ZV90IHJldmVyc2VGaW5kKFVDaGFyLCB1bnNpZ25lZCBp
bmRleCA9IFVJTlRfTUFYKTsKLSAgICBzaXplX3QgcmV2ZXJzZUZpbmQoU3RyaW5nSW1wbCosIHVu
c2lnbmVkIGluZGV4ID0gVUlOVF9NQVgpOwotICAgIHNpemVfdCByZXZlcnNlRmluZElnbm9yaW5n
Q2FzZShTdHJpbmdJbXBsKiwgdW5zaWduZWQgaW5kZXggPSBVSU5UX01BWCk7CisgICAgdWludDMy
X3QgZmluZChVQ2hhciwgdW5zaWduZWQgaW5kZXggPSAwKTsKKyAgICB1aW50MzJfdCBmaW5kKENo
YXJhY3Rlck1hdGNoRnVuY3Rpb25QdHIsIHVuc2lnbmVkIGluZGV4ID0gMCk7CisgICAgdWludDMy
X3QgZmluZChjb25zdCBjaGFyKiwgdW5zaWduZWQgaW5kZXggPSAwKTsKKyAgICB1aW50MzJfdCBm
aW5kKFN0cmluZ0ltcGwqLCB1bnNpZ25lZCBpbmRleCA9IDApOworICAgIHVpbnQzMl90IGZpbmRJ
Z25vcmluZ0Nhc2UoY29uc3QgY2hhciosIHVuc2lnbmVkIGluZGV4ID0gMCk7CisgICAgdWludDMy
X3QgZmluZElnbm9yaW5nQ2FzZShTdHJpbmdJbXBsKiwgdW5zaWduZWQgaW5kZXggPSAwKTsKKwor
ICAgIHVpbnQzMl90IHJldmVyc2VGaW5kKFVDaGFyLCB1bnNpZ25lZCBpbmRleCA9IFVJTlRfTUFY
KTsKKyAgICB1aW50MzJfdCByZXZlcnNlRmluZChTdHJpbmdJbXBsKiwgdW5zaWduZWQgaW5kZXgg
PSBVSU5UX01BWCk7CisgICAgdWludDMyX3QgcmV2ZXJzZUZpbmRJZ25vcmluZ0Nhc2UoU3RyaW5n
SW1wbCosIHVuc2lnbmVkIGluZGV4ID0gVUlOVF9NQVgpOwogCiAgICAgYm9vbCBzdGFydHNXaXRo
KFN0cmluZ0ltcGwqIHN0ciwgYm9vbCBjYXNlU2Vuc2l0aXZlID0gdHJ1ZSkgeyByZXR1cm4gKGNh
c2VTZW5zaXRpdmUgPyByZXZlcnNlRmluZChzdHIsIDApIDogcmV2ZXJzZUZpbmRJZ25vcmluZ0Nh
c2Uoc3RyLCAwKSkgPT0gMDsgfQogICAgIGJvb2wgZW5kc1dpdGgoU3RyaW5nSW1wbCosIGJvb2wg
Y2FzZVNlbnNpdGl2ZSA9IHRydWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90
ZXh0L1dURlN0cmluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0
Zi90ZXh0L1dURlN0cmluZy5jcHAJKHJldmlzaW9uIDg1ODYwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3d0Zi90ZXh0L1dURlN0cmluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwNCw4ICs2
MDQsOCBAQCB2b2lkIFN0cmluZzo6c3BsaXQoY29uc3QgU3RyaW5nJiBzZXBhcmF0CiAgICAgcmVz
dWx0LmNsZWFyKCk7CiAKICAgICB1bnNpZ25lZCBzdGFydFBvcyA9IDA7Ci0gICAgc2l6ZV90IGVu
ZFBvczsKLSAgICB3aGlsZSAoKGVuZFBvcyA9IGZpbmQoc2VwYXJhdG9yLCBzdGFydFBvcykpICE9
IG5vdEZvdW5kKSB7CisgICAgdWludDMyX3QgZW5kUG9zOworICAgIHdoaWxlICgoZW5kUG9zID0g
ZmluZChzZXBhcmF0b3IsIHN0YXJ0UG9zKSkgIT0gU3RyaW5nOjpub3RGb3VuZCkgewogICAgICAg
ICBpZiAoYWxsb3dFbXB0eUVudHJpZXMgfHwgc3RhcnRQb3MgIT0gZW5kUG9zKQogICAgICAgICAg
ICAgcmVzdWx0LmFwcGVuZChzdWJzdHJpbmcoc3RhcnRQb3MsIGVuZFBvcyAtIHN0YXJ0UG9zKSk7
CiAgICAgICAgIHN0YXJ0UG9zID0gZW5kUG9zICsgc2VwYXJhdG9yLmxlbmd0aCgpOwpAQCAtNjI0
LDggKzYyNCw4IEBAIHZvaWQgU3RyaW5nOjpzcGxpdChVQ2hhciBzZXBhcmF0b3IsIGJvb2wKICAg
ICByZXN1bHQuY2xlYXIoKTsKIAogICAgIHVuc2lnbmVkIHN0YXJ0UG9zID0gMDsKLSAgICBzaXpl
X3QgZW5kUG9zOwotICAgIHdoaWxlICgoZW5kUG9zID0gZmluZChzZXBhcmF0b3IsIHN0YXJ0UG9z
KSkgIT0gbm90Rm91bmQpIHsKKyAgICB1aW50MzJfdCBlbmRQb3M7CisgICAgd2hpbGUgKChlbmRQ
b3MgPSBmaW5kKHNlcGFyYXRvciwgc3RhcnRQb3MpKSAhPSBTdHJpbmc6Om5vdEZvdW5kKSB7CiAg
ICAgICAgIGlmIChhbGxvd0VtcHR5RW50cmllcyB8fCBzdGFydFBvcyAhPSBlbmRQb3MpCiAgICAg
ICAgICAgICByZXN1bHQuYXBwZW5kKHN1YnN0cmluZyhzdGFydFBvcywgZW5kUG9zIC0gc3RhcnRQ
b3MpKTsKICAgICAgICAgc3RhcnRQb3MgPSBlbmRQb3MgKyAxOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3d0Zi90ZXh0L1dURlN0cmluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93dGYvdGV4dC9XVEZTdHJpbmcuaAkocmV2aXNpb24gODU4NjApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvV1RGU3RyaW5nLmgJKHdvcmtpbmcgY29weSkKQEAg
LTg2LDYgKzg2LDEwIEBAIHRlbXBsYXRlPGJvb2wgaXNTcGVjaWFsQ2hhcmFjdGVyKFVDaGFyKT4K
IAogY2xhc3MgU3RyaW5nIHsKIHB1YmxpYzoKKworICAgIC8vIE5vdCBmb3VuZCB2YWx1ZSwgYSBT
dHJpbmcgaGFzIGEgbGVuZ3RoIG9mIDJeMzItMi4KKyAgICBzdGF0aWMgY29uc3QgdWludDMyX3Qg
bm90Rm91bmQgPSAweEZGRkZGRkZGOworCiAgICAgLy8gQ29uc3RydWN0IGEgbnVsbCBzdHJpbmcs
IGRpc3Rpbmd1aXNoYWJsZSBmcm9tIGFuIGVtcHR5IHN0cmluZy4KICAgICBTdHJpbmcoKSB7IH0K
IApAQCAtMTYxLDQ0ICsxNjUsNDQgQEAgcHVibGljOgogICAgIHN0YXRpYyBTdHJpbmcgbnVtYmVy
KGRvdWJsZSk7CiAKICAgICAvLyBGaW5kIGEgc2luZ2xlIGNoYXJhY3RlciBvciBzdHJpbmcsIGFs
c28gd2l0aCBtYXRjaCBmdW5jdGlvbiAmIGxhdGluMSBmb3Jtcy4KLSAgICBzaXplX3QgZmluZChV
Q2hhciBjLCB1bnNpZ25lZCBzdGFydCA9IDApIGNvbnN0Ci0gICAgICAgIHsgcmV0dXJuIG1faW1w
bCA/IG1faW1wbC0+ZmluZChjLCBzdGFydCkgOiBub3RGb3VuZDsgfQotICAgIHNpemVfdCBmaW5k
KGNvbnN0IFN0cmluZyYgc3RyLCB1bnNpZ25lZCBzdGFydCA9IDApIGNvbnN0Ci0gICAgICAgIHsg
cmV0dXJuIG1faW1wbCA/IG1faW1wbC0+ZmluZChzdHIuaW1wbCgpLCBzdGFydCkgOiBub3RGb3Vu
ZDsgfQotICAgIHNpemVfdCBmaW5kKENoYXJhY3Rlck1hdGNoRnVuY3Rpb25QdHIgbWF0Y2hGdW5j
dGlvbiwgdW5zaWduZWQgc3RhcnQgPSAwKSBjb25zdAotICAgICAgICB7IHJldHVybiBtX2ltcGwg
PyBtX2ltcGwtPmZpbmQobWF0Y2hGdW5jdGlvbiwgc3RhcnQpIDogbm90Rm91bmQ7IH0KLSAgICBz
aXplX3QgZmluZChjb25zdCBjaGFyKiBzdHIsIHVuc2lnbmVkIHN0YXJ0ID0gMCkgY29uc3QKLSAg
ICAgICAgeyByZXR1cm4gbV9pbXBsID8gbV9pbXBsLT5maW5kKHN0ciwgc3RhcnQpIDogbm90Rm91
bmQ7IH0KKyAgICB1aW50MzJfdCBmaW5kKFVDaGFyIGMsIHVuc2lnbmVkIHN0YXJ0ID0gMCkgY29u
c3QKKyAgICAgICAgeyByZXR1cm4gbV9pbXBsID8gbV9pbXBsLT5maW5kKGMsIHN0YXJ0KSA6IFN0
cmluZzo6bm90Rm91bmQ7IH0KKyAgICB1aW50MzJfdCBmaW5kKGNvbnN0IFN0cmluZyYgc3RyLCB1
bnNpZ25lZCBzdGFydCA9IDApIGNvbnN0CisgICAgICAgIHsgcmV0dXJuIG1faW1wbCA/IG1faW1w
bC0+ZmluZChzdHIuaW1wbCgpLCBzdGFydCkgOiBTdHJpbmc6Om5vdEZvdW5kOyB9CisgICAgdWlu
dDMyX3QgZmluZChDaGFyYWN0ZXJNYXRjaEZ1bmN0aW9uUHRyIG1hdGNoRnVuY3Rpb24sIHVuc2ln
bmVkIHN0YXJ0ID0gMCkgY29uc3QKKyAgICAgICAgeyByZXR1cm4gbV9pbXBsID8gbV9pbXBsLT5m
aW5kKG1hdGNoRnVuY3Rpb24sIHN0YXJ0KSA6IFN0cmluZzo6bm90Rm91bmQ7IH0KKyAgICB1aW50
MzJfdCBmaW5kKGNvbnN0IGNoYXIqIHN0ciwgdW5zaWduZWQgc3RhcnQgPSAwKSBjb25zdAorICAg
ICAgICB7IHJldHVybiBtX2ltcGwgPyBtX2ltcGwtPmZpbmQoc3RyLCBzdGFydCkgOiBTdHJpbmc6
Om5vdEZvdW5kOyB9CiAKICAgICAvLyBGaW5kIHRoZSBsYXN0IGluc3RhbmNlIG9mIGEgc2luZ2xl
IGNoYXJhY3RlciBvciBzdHJpbmcuCi0gICAgc2l6ZV90IHJldmVyc2VGaW5kKFVDaGFyIGMsIHVu
c2lnbmVkIHN0YXJ0ID0gVUlOVF9NQVgpIGNvbnN0Ci0gICAgICAgIHsgcmV0dXJuIG1faW1wbCA/
IG1faW1wbC0+cmV2ZXJzZUZpbmQoYywgc3RhcnQpIDogbm90Rm91bmQ7IH0KLSAgICBzaXplX3Qg
cmV2ZXJzZUZpbmQoY29uc3QgU3RyaW5nJiBzdHIsIHVuc2lnbmVkIHN0YXJ0ID0gVUlOVF9NQVgp
IGNvbnN0Ci0gICAgICAgIHsgcmV0dXJuIG1faW1wbCA/IG1faW1wbC0+cmV2ZXJzZUZpbmQoc3Ry
LmltcGwoKSwgc3RhcnQpIDogbm90Rm91bmQ7IH0KKyAgICB1aW50MzJfdCByZXZlcnNlRmluZChV
Q2hhciBjLCB1bnNpZ25lZCBzdGFydCA9IFVJTlRfTUFYKSBjb25zdAorICAgICAgICB7IHJldHVy
biBtX2ltcGwgPyBtX2ltcGwtPnJldmVyc2VGaW5kKGMsIHN0YXJ0KSA6IFN0cmluZzo6bm90Rm91
bmQ7IH0KKyAgICB1aW50MzJfdCByZXZlcnNlRmluZChjb25zdCBTdHJpbmcmIHN0ciwgdW5zaWdu
ZWQgc3RhcnQgPSBVSU5UX01BWCkgY29uc3QKKyAgICAgICAgeyByZXR1cm4gbV9pbXBsID8gbV9p
bXBsLT5yZXZlcnNlRmluZChzdHIuaW1wbCgpLCBzdGFydCkgOiBTdHJpbmc6Om5vdEZvdW5kOyB9
CiAKICAgICAvLyBDYXNlIGluc2Vuc2l0aXZlIHN0cmluZyBtYXRjaGluZy4KLSAgICBzaXplX3Qg
ZmluZElnbm9yaW5nQ2FzZShjb25zdCBjaGFyKiBzdHIsIHVuc2lnbmVkIHN0YXJ0ID0gMCkgY29u
c3QKLSAgICAgICAgeyByZXR1cm4gbV9pbXBsID8gbV9pbXBsLT5maW5kSWdub3JpbmdDYXNlKHN0
ciwgc3RhcnQpIDogbm90Rm91bmQ7IH0KLSAgICBzaXplX3QgZmluZElnbm9yaW5nQ2FzZShjb25z
dCBTdHJpbmcmIHN0ciwgdW5zaWduZWQgc3RhcnQgPSAwKSBjb25zdAotICAgICAgICB7IHJldHVy
biBtX2ltcGwgPyBtX2ltcGwtPmZpbmRJZ25vcmluZ0Nhc2Uoc3RyLmltcGwoKSwgc3RhcnQpIDog
bm90Rm91bmQ7IH0KLSAgICBzaXplX3QgcmV2ZXJzZUZpbmRJZ25vcmluZ0Nhc2UoY29uc3QgU3Ry
aW5nJiBzdHIsIHVuc2lnbmVkIHN0YXJ0ID0gVUlOVF9NQVgpIGNvbnN0Ci0gICAgICAgIHsgcmV0
dXJuIG1faW1wbCA/IG1faW1wbC0+cmV2ZXJzZUZpbmRJZ25vcmluZ0Nhc2Uoc3RyLmltcGwoKSwg
c3RhcnQpIDogbm90Rm91bmQ7IH0KKyAgICB1aW50MzJfdCBmaW5kSWdub3JpbmdDYXNlKGNvbnN0
IGNoYXIqIHN0ciwgdW5zaWduZWQgc3RhcnQgPSAwKSBjb25zdAorICAgICAgICB7IHJldHVybiBt
X2ltcGwgPyBtX2ltcGwtPmZpbmRJZ25vcmluZ0Nhc2Uoc3RyLCBzdGFydCkgOiBTdHJpbmc6Om5v
dEZvdW5kOyB9CisgICAgdWludDMyX3QgZmluZElnbm9yaW5nQ2FzZShjb25zdCBTdHJpbmcmIHN0
ciwgdW5zaWduZWQgc3RhcnQgPSAwKSBjb25zdAorICAgICAgICB7IHJldHVybiBtX2ltcGwgPyBt
X2ltcGwtPmZpbmRJZ25vcmluZ0Nhc2Uoc3RyLmltcGwoKSwgc3RhcnQpIDogU3RyaW5nOjpub3RG
b3VuZDsgfQorICAgIHVpbnQzMl90IHJldmVyc2VGaW5kSWdub3JpbmdDYXNlKGNvbnN0IFN0cmlu
ZyYgc3RyLCB1bnNpZ25lZCBzdGFydCA9IFVJTlRfTUFYKSBjb25zdAorICAgICAgICB7IHJldHVy
biBtX2ltcGwgPyBtX2ltcGwtPnJldmVyc2VGaW5kSWdub3JpbmdDYXNlKHN0ci5pbXBsKCksIHN0
YXJ0KSA6IFN0cmluZzo6bm90Rm91bmQ7IH0KIAogICAgIC8vIFdyYXBwZXJzIGZvciBmaW5kICYg
cmV2ZXJzZUZpbmQgYWRkaW5nIGR5bmFtaWMgc2Vuc2l0aXZpdHkgY2hlY2suCi0gICAgc2l6ZV90
IGZpbmQoY29uc3QgY2hhciogc3RyLCB1bnNpZ25lZCBzdGFydCwgYm9vbCBjYXNlU2Vuc2l0aXZl
KSBjb25zdAorICAgIHVpbnQzMl90IGZpbmQoY29uc3QgY2hhciogc3RyLCB1bnNpZ25lZCBzdGFy
dCwgYm9vbCBjYXNlU2Vuc2l0aXZlKSBjb25zdAogICAgICAgICB7IHJldHVybiBjYXNlU2Vuc2l0
aXZlID8gZmluZChzdHIsIHN0YXJ0KSA6IGZpbmRJZ25vcmluZ0Nhc2Uoc3RyLCBzdGFydCk7IH0K
LSAgICBzaXplX3QgZmluZChjb25zdCBTdHJpbmcmIHN0ciwgdW5zaWduZWQgc3RhcnQsIGJvb2wg
Y2FzZVNlbnNpdGl2ZSkgY29uc3QKKyAgICB1aW50MzJfdCBmaW5kKGNvbnN0IFN0cmluZyYgc3Ry
LCB1bnNpZ25lZCBzdGFydCwgYm9vbCBjYXNlU2Vuc2l0aXZlKSBjb25zdAogICAgICAgICB7IHJl
dHVybiBjYXNlU2Vuc2l0aXZlID8gZmluZChzdHIsIHN0YXJ0KSA6IGZpbmRJZ25vcmluZ0Nhc2Uo
c3RyLCBzdGFydCk7IH0KLSAgICBzaXplX3QgcmV2ZXJzZUZpbmQoY29uc3QgU3RyaW5nJiBzdHIs
IHVuc2lnbmVkIHN0YXJ0LCBib29sIGNhc2VTZW5zaXRpdmUpIGNvbnN0CisgICAgdWludDMyX3Qg
cmV2ZXJzZUZpbmQoY29uc3QgU3RyaW5nJiBzdHIsIHVuc2lnbmVkIHN0YXJ0LCBib29sIGNhc2VT
ZW5zaXRpdmUpIGNvbnN0CiAgICAgICAgIHsgcmV0dXJuIGNhc2VTZW5zaXRpdmUgPyByZXZlcnNl
RmluZChzdHIsIHN0YXJ0KSA6IHJldmVyc2VGaW5kSWdub3JpbmdDYXNlKHN0ciwgc3RhcnQpOyB9
CiAKICAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKTsKICAg
ICAKICAgICBVQ2hhcjMyIGNoYXJhY3RlclN0YXJ0aW5nQXQodW5zaWduZWQpIGNvbnN0OyAvLyBE
aXR0by4KICAgICAKLSAgICBib29sIGNvbnRhaW5zKFVDaGFyIGMpIGNvbnN0IHsgcmV0dXJuIGZp
bmQoYykgIT0gbm90Rm91bmQ7IH0KLSAgICBib29sIGNvbnRhaW5zKGNvbnN0IGNoYXIqIHN0ciwg
Ym9vbCBjYXNlU2Vuc2l0aXZlID0gdHJ1ZSkgY29uc3QgeyByZXR1cm4gZmluZChzdHIsIDAsIGNh
c2VTZW5zaXRpdmUpICE9IG5vdEZvdW5kOyB9Ci0gICAgYm9vbCBjb250YWlucyhjb25zdCBTdHJp
bmcmIHN0ciwgYm9vbCBjYXNlU2Vuc2l0aXZlID0gdHJ1ZSkgY29uc3QgeyByZXR1cm4gZmluZChz
dHIsIDAsIGNhc2VTZW5zaXRpdmUpICE9IG5vdEZvdW5kOyB9CisgICAgYm9vbCBjb250YWlucyhV
Q2hhciBjKSBjb25zdCB7IHJldHVybiBmaW5kKGMpICE9IFN0cmluZzo6bm90Rm91bmQ7IH0KKyAg
ICBib29sIGNvbnRhaW5zKGNvbnN0IGNoYXIqIHN0ciwgYm9vbCBjYXNlU2Vuc2l0aXZlID0gdHJ1
ZSkgY29uc3QgeyByZXR1cm4gZmluZChzdHIsIDAsIGNhc2VTZW5zaXRpdmUpICE9IFN0cmluZzo6
bm90Rm91bmQ7IH0KKyAgICBib29sIGNvbnRhaW5zKGNvbnN0IFN0cmluZyYgc3RyLCBib29sIGNh
c2VTZW5zaXRpdmUgPSB0cnVlKSBjb25zdCB7IHJldHVybiBmaW5kKHN0ciwgMCwgY2FzZVNlbnNp
dGl2ZSkgIT0gU3RyaW5nOjpub3RGb3VuZDsgfQogCiAgICAgYm9vbCBzdGFydHNXaXRoKGNvbnN0
IFN0cmluZyYgcywgYm9vbCBjYXNlU2Vuc2l0aXZlID0gdHJ1ZSkgY29uc3QKICAgICAgICAgeyBy
ZXR1cm4gbV9pbXBsID8gbV9pbXBsLT5zdGFydHNXaXRoKHMuaW1wbCgpLCBjYXNlU2Vuc2l0aXZl
KSA6IHMuaXNFbXB0eSgpOyB9CkBAIC00MjEsMzUgKzQyNSwzNSBAQCBpbmxpbmUgYm9vbCBjaGFy
YWN0ZXJzQXJlQWxsTGF0aW4xKGNvbnN0CiAKIGludCBjb2RlUG9pbnRDb21wYXJlKGNvbnN0IFN0
cmluZyYsIGNvbnN0IFN0cmluZyYpOwogCi1pbmxpbmUgc2l6ZV90IGZpbmQoY29uc3QgVUNoYXIq
IGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIgbWF0Y2hDaGFyYWN0ZXIsIHVuc2ln
bmVkIGluZGV4ID0gMCkKK2lubGluZSB1aW50MzJfdCBmaW5kKGNvbnN0IFVDaGFyKiBjaGFyYWN0
ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIFVDaGFyIG1hdGNoQ2hhcmFjdGVyLCB1bnNpZ25lZCBpbmRl
eCA9IDApCiB7CiAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7CiAgICAgICAgIGlmIChjaGFy
YWN0ZXJzW2luZGV4XSA9PSBtYXRjaENoYXJhY3RlcikKICAgICAgICAgICAgIHJldHVybiBpbmRl
eDsKICAgICAgICAgKytpbmRleDsKICAgICB9Ci0gICAgcmV0dXJuIG5vdEZvdW5kOworICAgIHJl
dHVybiBTdHJpbmc6Om5vdEZvdW5kOwogfQogCi1pbmxpbmUgc2l6ZV90IGZpbmQoY29uc3QgVUNo
YXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgQ2hhcmFjdGVyTWF0Y2hGdW5jdGlvblB0
ciBtYXRjaEZ1bmN0aW9uLCB1bnNpZ25lZCBpbmRleCA9IDApCitpbmxpbmUgdWludDMyX3QgZmlu
ZChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCBDaGFyYWN0ZXJNYXRj
aEZ1bmN0aW9uUHRyIG1hdGNoRnVuY3Rpb24sIHVuc2lnbmVkIGluZGV4ID0gMCkKIHsKICAgICB3
aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKICAgICAgICAgaWYgKG1hdGNoRnVuY3Rpb24oY2hhcmFj
dGVyc1tpbmRleF0pKQogICAgICAgICAgICAgcmV0dXJuIGluZGV4OwogICAgICAgICArK2luZGV4
OwogICAgIH0KLSAgICByZXR1cm4gbm90Rm91bmQ7CisgICAgcmV0dXJuIFN0cmluZzo6bm90Rm91
bmQ7CiB9CiAKIGlubGluZSBzaXplX3QgcmV2ZXJzZUZpbmQoY29uc3QgVUNoYXIqIGNoYXJhY3Rl
cnMsIHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIgbWF0Y2hDaGFyYWN0ZXIsIHVuc2lnbmVkIGluZGV4
ID0gVUlOVF9NQVgpCiB7CiAgICAgaWYgKCFsZW5ndGgpCi0gICAgICAgIHJldHVybiBub3RGb3Vu
ZDsKKyAgICAgICAgcmV0dXJuIFN0cmluZzo6bm90Rm91bmQ7CiAgICAgaWYgKGluZGV4ID49IGxl
bmd0aCkKICAgICAgICAgaW5kZXggPSBsZW5ndGggLSAxOwogICAgIHdoaWxlIChjaGFyYWN0ZXJz
W2luZGV4XSAhPSBtYXRjaENoYXJhY3RlcikgewogICAgICAgICBpZiAoIWluZGV4LS0pCi0gICAg
ICAgICAgICByZXR1cm4gbm90Rm91bmQ7CisgICAgICAgICAgICByZXR1cm4gU3RyaW5nOjpub3RG
b3VuZDsKICAgICB9CiAgICAgcmV0dXJuIGluZGV4OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNp
b24gODU4NjIpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxMTkgQEAKKzIwMTEtMDUtMDUgIEFsZXhpcyBNZW5hcmQgIDxhbGV4aXMubWVuYXJk
QG9wZW5ib3NzYS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgTW9kaWZ5IFdURjo6U3RyaW5nIGFuZCBVU3RyaW5nIHRvIHVzZSBhIG1vcmUgc2Fm
ZSBBUEkgZm9yIGxvb2t1cCBmdW5jdGlvbnMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD02MDI3OQorCisgICAgICAgIEFkYXB0IGFsbCB0aGUgY29kZSB0
byB0aGUgbmV3IFN0cmluZyBBUEkuIFdlIHVzZSBub3cgU3RyaW5nOjpub3RGb3VuZCBhbmQKKyAg
ICAgICAgdWludDMyX3QuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGJlY2F1c2UgdGhlIGV4aXN0
aW5nIG9uZXMgc2hvdWxkIGNvdmVyIHRoZSByZWZhY3RvcmluZy4KKworICAgICAgICAqIGNzcy9D
U1NQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjptYXJrUHJvcGVydHlF
bmQpOgorICAgICAgICAqIGNzcy9DU1NTZWxlY3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
U1NTZWxlY3Rvcjo6UmFyZURhdGE6OnBhcnNlTnRoKToKKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVE
ZWNsYXJhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZURlY2xhcmF0aW9uOjpz
ZXRQcm9wZXJ0eSk6CisgICAgICAgICogY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0b3JDaGVja2VyOjpjaGVja09uZVNl
bGVjdG9yKToKKyAgICAgICAgKiBkb20vVHJlZVNjb3BlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlRyZWVTY29wZTo6Z2V0SW1hZ2VNYXApOgorICAgICAgICAqIGVkaXRpbmcvQ29tcG9zaXRlRWRp
dENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6Omlu
cHV0VGV4dCk6CisgICAgICAgICogZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFuZC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNlcnRUZXh0Q29tbWFuZDo6aW5wdXQpOgorICAgICAgICAqIGVkaXRp
bmcvVGV4dEl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRJdGVyYXRvcjo6aGFu
ZGxlVGV4dEJveCk6CisgICAgICAgICogZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHQpOgorICAgICAgICAqIGVkaXRp
bmcvbWFya3VwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmZpbGxDb250YWluZXJGcm9tU3RyaW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUZyYWdtZW50RnJvbVRleHQpOgorICAgICAgICAq
IGh0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEFuY2hv
ckVsZW1lbnQ6OnNldEhvc3QpOgorICAgICAgICAqIGh0bWwvSFRNTEVtYmVkRWxlbWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MRW1iZWRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0
ZSk6CisgICAgICAgICogaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Ojppc1BsYWNlaG9sZGVyRW1wdHkp
OgorICAgICAgICAqIGh0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTE9iamVjdEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxPYmplY3RFbGVtZW50OjpwYXJhbWV0ZXJzRm9yUGx1Z2luKToKKyAgICAgICAg
KiBodG1sL3BhcnNlci9IVE1MTWV0YUNoYXJzZXRQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTE1ldGFDaGFyc2V0UGFyc2VyOjpleHRyYWN0Q2hhcnNldCk6CisgICAgICAgICogaHRt
bC9wYXJzZXIvSFRNTFBhcnNlcklkaW9tcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZVRv
RG91YmxlRm9yTnVtYmVyVHlwZVdpdGhEZWNpbWFsUGxhY2VzKToKKyAgICAgICAgKiBodG1sL3Bh
cnNlci9YU1NGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WFNTRmlsdGVyOjppbml0KToK
KyAgICAgICAgKFdlYkNvcmU6OlhTU0ZpbHRlcjo6aXNDb250YWluZWRJblJlcXVlc3QpOgorICAg
ICAgICAqIGxvYWRlci9Dcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OnBhcnNlQWNjZXNzQ29udHJvbEFsbG93TGlzdCk6CisgICAgICAgICogbG9h
ZGVyL01haW5SZXNvdXJjZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNYWluUmVzb3Vy
Y2VMb2FkZXI6OnN1YnN0aXR1dGVNSU1FVHlwZUZyb21QbHVnaW5EYXRhYmFzZSk6CisgICAgICAg
ICogbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OnBhcnNlSGVhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlSGVhZGVycyk6
CisgICAgICAgICogcGFnZS9TZWN1cml0eU9yaWdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
ZWN1cml0eU9yaWdpbjo6Y3JlYXRlRnJvbURhdGFiYXNlSWRlbnRpZmllcik6CisgICAgICAgICog
cGFnZS9Vc2VyQ29udGVudFVSTFBhdHRlcm4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VXNlckNv
bnRlbnRVUkxQYXR0ZXJuOjpwYXJzZSk6CisgICAgICAgICogcGFnZS9XaW5kb3dGZWF0dXJlcy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpXaW5kb3dGZWF0dXJlczo6cGFyc2VEaWFsb2dGZWF0dXJl
cyk6CisgICAgICAgICogcGxhdGZvcm0vQ29udGVudFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q29udGVudFR5cGU6OnBhcmFtZXRlcik6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50VHlw
ZTo6dHlwZSk6CisgICAgICAgICogcGxhdGZvcm0vS1VSTC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXMpOgorICAgICAgICAoV2ViQ29yZTo6c3Vic3RpdHV0
ZUJhY2tzbGFzaGVzKToKKyAgICAgICAgKFdlYkNvcmU6Om1pbWVUeXBlRnJvbURhdGFVUkwpOgor
ICAgICAgICAqIHBsYXRmb3JtL0xlbmd0aC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpuZXdDb29y
ZHNBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpuZXdMZW5ndGhBcnJheSk6CisgICAgICAgICog
cGxhdGZvcm0vTGlua0hhc2guY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZmluZFNsYXNoRG90RG90
U2xhc2gpOgorICAgICAgICAoV2ViQ29yZTo6ZmluZFNsYXNoU2xhc2gpOgorICAgICAgICAoV2Vi
Q29yZTo6ZmluZFNsYXNoRG90U2xhc2gpOgorICAgICAgICAoV2ViQ29yZTo6Y2xlYW5TbGFzaERv
dERvdFNsYXNoZXMpOgorICAgICAgICAoV2ViQ29yZTo6bWVyZ2VEb3VibGVTbGFzaGVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OmNsZWFuU2xhc2hEb3RTbGFzaGVzKToKKyAgICAgICAgKFdlYkNvcmU6
OmNsZWFuUGF0aCk6CisgICAgICAgICogcGxhdGZvcm0vTUlNRVR5cGVSZWdpc3RyeS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRNSU1FVHlwZUZvclBhdGgpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyOjpsb2FkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9T
VkdHbHlwaC5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc0NvbXBhdGlibGVHbHlwaCk6CisgICAg
ICAgICogcGxhdGZvcm0vbWFjL0RyYWdJbWFnZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OmNy
ZWF0ZURyYWdJbWFnZUljb25Gb3JDYWNoZWRJbWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0
d29yay9DcmVkZW50aWFsU3RvcmFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwcm90ZWN0aW9u
U3BhY2VNYXBLZXlGcm9tVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OmZpbmREZWZhdWx0UHJvdGVj
dGlvblNwYWNlRm9yVVJMKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0hUVFBQYXJzZXJz
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmZpbGVuYW1lRnJvbUhUVFBDb250ZW50RGlzcG9zaXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6ZmluZENoYXJzZXRJbk1lZGlhVHlwZSk6CisgICAgICAg
ICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlc3BvbnNlQmFzZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlQmFzZTo6aXNBdHRhY2htZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OnBhcnNlQ2FjaGVIZWFkZXIpOgorICAgICAgICAqIHBsYXRmb3JtL3dpbmNlL0ZpbGVT
eXN0ZW1XaW5DRS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpyZXZlcnNlRmluZFBhdGhTZXBhcmF0
b3IpOgorICAgICAgICAoV2ViQ29yZTo6bWFrZUFsbERpcmVjdG9yaWVzKToKKyAgICAgICAgKFdl
YkNvcmU6OnBhdGhHZXRGaWxlTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpkaXJlY3RvcnlOYW1l
KToKKyAgICAgICAgKiBzdmcvU1ZHVVJJUmVmZXJlbmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNWR1VSSVJlZmVyZW5jZTo6Z2V0VGFyZ2V0KToKKyAgICAgICAgKiBzdmcvYW5pbWF0aW9uL1NW
R1NNSUxFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1NNSUxFbGVtZW50OjpwYXJz
ZUNsb2NrVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU01JTEVsZW1lbnQ6OnBhcnNlQ29u
ZGl0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1NNSUxFbGVtZW50OjpjYWxjdWxhdGVOZXh0
UHJvZ3Jlc3NUaW1lKToKKyAgICAgICAgKiB4bWwvWFBhdGhGdW5jdGlvbnMuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6WFBhdGg6OkZ1blN1YnN0cmluZ0JlZm9yZTo6ZXZhbHVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6WFBhdGg6OkZ1blN1YnN0cmluZ0FmdGVyOjpldmFsdWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpYUGF0aDo6RnVuVHJhbnNsYXRlOjpldmFsdWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpYUGF0aDo6RnVuTGFuZzo6ZXZhbHVhdGUpOgorICAgICAgICAqIHhtbC9YUGF0aFBhcnNl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6UGFyc2VyOjpleHBhbmRRTmFtZSk6CisK
IDIwMTEtMDUtMDUgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUB3ZWJraXQub3JnPgogCiAgICAg
ICAgIFtXaW5DYWlyb10gdW5yZXZpZXdlZCBidWlsZCBjb3JyZWN0aW9uLgpJbmRleDogU291cmNl
L1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1BhcnNlci5jcHAJKHJldmlzaW9uIDg1ODYwKQorKysgU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1BhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1NjMsOCArNjU2Myw4IEBAIHZvaWQg
Q1NTUGFyc2VyOjptYXJrUHJvcGVydHlFbmQoYm9vbCBpc0kKICAgICAgICAgaWYgKHByb3BlcnR5
U3RyaW5nLmVuZHNXaXRoKCI7IiwgdHJ1ZSkpCiAgICAgICAgICAgICBwcm9wZXJ0eVN0cmluZyA9
IHByb3BlcnR5U3RyaW5nLmxlZnQocHJvcGVydHlTdHJpbmcubGVuZ3RoKCkgLSAxKTsKICAgICAg
ICAgVmVjdG9yPFN0cmluZz4gcHJvcGVydHlDb21wb25lbnRzOwotICAgICAgICBzaXplX3QgY29s
b25JbmRleCA9IHByb3BlcnR5U3RyaW5nLmZpbmQoIjoiKTsKLSAgICAgICAgQVNTRVJUKGNvbG9u
SW5kZXggIT0gbm90Rm91bmQpOworICAgICAgICB1aW50MzJfdCBjb2xvbkluZGV4ID0gcHJvcGVy
dHlTdHJpbmcuZmluZCgiOiIpOworICAgICAgICBBU1NFUlQoY29sb25JbmRleCAhPSBTdHJpbmc6
Om5vdEZvdW5kKTsKIAogICAgICAgICBTdHJpbmcgbmFtZSA9IHByb3BlcnR5U3RyaW5nLmxlZnQo
Y29sb25JbmRleCkuc3RyaXBXaGl0ZVNwYWNlKCk7CiAgICAgICAgIFN0cmluZyB2YWx1ZSA9IHBy
b3BlcnR5U3RyaW5nLnN1YnN0cmluZyhjb2xvbkluZGV4ICsgMSwgcHJvcGVydHlTdHJpbmcubGVu
Z3RoKCkpLnN0cmlwV2hpdGVTcGFjZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1Nl
bGVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VsZWN0b3Iu
Y3BwCShyZXZpc2lvbiA4NTg2MCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWxlY3Rvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTc4Niw4ICs3ODYsOCBAQCBib29sIENTU1NlbGVjdG9yOjpS
YXJlRGF0YTo6cGFyc2VOdGgoKQogICAgICAgICBtX2EgPSAyOwogICAgICAgICBtX2IgPSAwOwog
ICAgIH0gZWxzZSB7Ci0gICAgICAgIHNpemVfdCBuID0gYXJndW1lbnQuZmluZCgnbicpOwotICAg
ICAgICBpZiAobiAhPSBub3RGb3VuZCkgeworICAgICAgICB1aW50MzJfdCBuID0gYXJndW1lbnQu
ZmluZCgnbicpOworICAgICAgICBpZiAobiAhPSBTdHJpbmc6Om5vdEZvdW5kKSB7CiAgICAgICAg
ICAgICBpZiAoYXJndW1lbnRbMF0gPT0gJy0nKSB7CiAgICAgICAgICAgICAgICAgaWYgKG4gPT0g
MSkKICAgICAgICAgICAgICAgICAgICAgbV9hID0gLTE7IC8vIC1uID09IC0xbgpAQCAtNzk4LDEy
ICs3OTgsMTIgQEAgYm9vbCBDU1NTZWxlY3Rvcjo6UmFyZURhdGE6OnBhcnNlTnRoKCkKICAgICAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBtX2EgPSBhcmd1bWVudC5zdWJzdHJpbmcoMCwg
bikudG9JbnQoKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgc2l6ZV90IHAgPSBhcmd1bWVu
dC5maW5kKCcrJywgbik7Ci0gICAgICAgICAgICBpZiAocCAhPSBub3RGb3VuZCkKKyAgICAgICAg
ICAgIHVpbnQzMl90IHAgPSBhcmd1bWVudC5maW5kKCcrJywgbik7CisgICAgICAgICAgICBpZiAo
cCAhPSBTdHJpbmc6Om5vdEZvdW5kKQogICAgICAgICAgICAgICAgIG1fYiA9IGFyZ3VtZW50LnN1
YnN0cmluZyhwICsgMSwgYXJndW1lbnQubGVuZ3RoKCkgLSBwIC0gMSkudG9JbnQoKTsKICAgICAg
ICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIHAgPSBhcmd1bWVudC5maW5kKCctJywgbik7
Ci0gICAgICAgICAgICAgICAgaWYgKHAgIT0gbm90Rm91bmQpCisgICAgICAgICAgICAgICAgaWYg
KHAgIT0gU3RyaW5nOjpub3RGb3VuZCkKICAgICAgICAgICAgICAgICAgICAgbV9iID0gLWFyZ3Vt
ZW50LnN1YnN0cmluZyhwICsgMSwgYXJndW1lbnQubGVuZ3RoKCkgLSBwIC0gMSkudG9JbnQoKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTU3R5bGVEZWNsYXJhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1N0eWxlRGVjbGFyYXRpb24uY3BwCShyZXZpc2lvbiA4NTg2MCkKKysrIFNvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NTdHlsZURlY2xhcmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA2LDEx
ICsxMDYsMTEgQEAgYm9vbCBDU1NTdHlsZURlY2xhcmF0aW9uOjppc1Byb3BlcnR5SW1wbAogCiB2
b2lkIENTU1N0eWxlRGVjbGFyYXRpb246OnNldFByb3BlcnR5KGNvbnN0IFN0cmluZyYgcHJvcGVy
dHlOYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBz
aXplX3QgaW1wb3J0YW50ID0gdmFsdWUuZmluZCgiIWltcG9ydGFudCIsIDAsIGZhbHNlKTsKKyAg
ICB1aW50MzJfdCBpbXBvcnRhbnQgPSB2YWx1ZS5maW5kKCIhaW1wb3J0YW50IiwgMCwgZmFsc2Up
OwogICAgIGludCBwcm9wZXJ0eUlEID0gY3NzUHJvcGVydHlJRChwcm9wZXJ0eU5hbWUpOwogICAg
IGlmICghcHJvcGVydHlJRCkKICAgICAgICAgcmV0dXJuOwotICAgIGlmIChpbXBvcnRhbnQgPT0g
bm90Rm91bmQpCisgICAgaWYgKGltcG9ydGFudCA9PSBTdHJpbmc6Om5vdEZvdW5kKQogICAgICAg
ICBzZXRQcm9wZXJ0eShwcm9wZXJ0eUlELCB2YWx1ZSwgZmFsc2UsIGVjKTsKICAgICBlbHNlCiAg
ICAgICAgIHNldFByb3BlcnR5KHByb3BlcnR5SUQsIHZhbHVlLmxlZnQoaW1wb3J0YW50IC0gMSks
IHRydWUsIGVjKTsKQEAgLTEyMyw3ICsxMjMsNyBAQCB2b2lkIENTU1N0eWxlRGVjbGFyYXRpb246
OnNldFByb3BlcnR5KGNvCiAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgcmFpc2UgYW4gZXhj
ZXB0aW9uIGhlcmU/CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgYm9vbCBpbXBvcnRhbnQg
PSBwcmlvcml0eS5maW5kKCJpbXBvcnRhbnQiLCAwLCBmYWxzZSkgIT0gbm90Rm91bmQ7CisgICAg
Ym9vbCBpbXBvcnRhbnQgPSBwcmlvcml0eS5maW5kKCJpbXBvcnRhbnQiLCAwLCBmYWxzZSkgIT0g
U3RyaW5nOjpub3RGb3VuZDsKICAgICBzZXRQcm9wZXJ0eShwcm9wSUQsIHZhbHVlLCBpbXBvcnRh
bnQsIGVjKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3Iu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNw
cAkocmV2aXNpb24gODU4NjApCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rv
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0MDEsOCArMjQwMSw4IEBAIGJvb2wgQ1NTU3R5bGVT
ZWxlY3Rvcjo6U2VsZWN0b3JDaGVja2VyOjoKIAogICAgICAgICAgICAgdW5zaWduZWQgc3RhcnRT
ZWFyY2hBdCA9IDA7CiAgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICAgICAgICAg
IHNpemVfdCBmb3VuZFBvcyA9IHZhbHVlLmZpbmQoc2VsLT52YWx1ZSgpLCBzdGFydFNlYXJjaEF0
LCBjYXNlU2Vuc2l0aXZlKTsKLSAgICAgICAgICAgICAgICBpZiAoZm91bmRQb3MgPT0gbm90Rm91
bmQpCisgICAgICAgICAgICAgICAgdWludDMyX3QgZm91bmRQb3MgPSB2YWx1ZS5maW5kKHNlbC0+
dmFsdWUoKSwgc3RhcnRTZWFyY2hBdCwgY2FzZVNlbnNpdGl2ZSk7CisgICAgICAgICAgICAgICAg
aWYgKGZvdW5kUG9zID09IFN0cmluZzo6bm90Rm91bmQpCiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICBpZiAoZm91bmRQb3MgPT0gMCB8fCB2YWx1ZVtm
b3VuZFBvcyAtIDFdID09ICcgJykgewogICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBlbmRT
dHIgPSBmb3VuZFBvcyArIHNlbC0+dmFsdWUoKS5sZW5ndGgoKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2RvbS9UcmVlU2NvcGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9U
cmVlU2NvcGUuY3BwCShyZXZpc2lvbiA4NTg2MCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9UcmVl
U2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsOCArMTAyLDggQEAgSFRNTE1hcEVsZW1l
bnQqIFRyZWVTY29wZTo6Z2V0SW1hZ2VNYXAoYwogewogICAgIGlmICh1cmwuaXNOdWxsKCkpCiAg
ICAgICAgIHJldHVybiAwOwotICAgIHNpemVfdCBoYXNoUG9zID0gdXJsLmZpbmQoJyMnKTsKLSAg
ICBTdHJpbmcgbmFtZSA9IChoYXNoUG9zID09IG5vdEZvdW5kID8gdXJsIDogdXJsLnN1YnN0cmlu
ZyhoYXNoUG9zICsgMSkpLmltcGwoKTsKKyAgICB1aW50MzJfdCBoYXNoUG9zID0gdXJsLmZpbmQo
JyMnKTsKKyAgICBTdHJpbmcgbmFtZSA9IChoYXNoUG9zID09IFN0cmluZzo6bm90Rm91bmQgPyB1
cmwgOiB1cmwuc3Vic3RyaW5nKGhhc2hQb3MgKyAxKSkuaW1wbCgpOwogICAgIGlmIChkb2N1bWVu
dCgpLT5pc0hUTUxEb2N1bWVudCgpKQogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTE1h
cEVsZW1lbnQqPihtX2ltYWdlTWFwc0J5TmFtZS5nZXRFbGVtZW50QnlMb3dlcmNhc2VkTWFwTmFt
ZShBdG9taWNTdHJpbmcobmFtZS5sb3dlcigpKS5pbXBsKCksIHRoaXMpKTsKICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8SFRNTE1hcEVsZW1lbnQqPihtX2ltYWdlTWFwc0J5TmFtZS5nZXRFbGVtZW50
QnlNYXBOYW1lKEF0b21pY1N0cmluZyhuYW1lKS5pbXBsKCksIHRoaXMpKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCShyZXZpc2lv
biA4NTg2MCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDMsMjAgKzMwMywyMCBAQCB2b2lkIENvbXBvc2l0ZUVk
aXRDb21tYW5kOjppbnB1dFRleHQoY29uCiAgICAgdW5zaWduZWQgbGVuZ3RoID0gdGV4dC5sZW5n
dGgoKTsKICAgICBSZWZQdHI8UmFuZ2U+IHN0YXJ0UmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGRvY3Vt
ZW50KCksIGZpcnN0UG9zaXRpb25Jbk5vZGUoZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkp
LCBlbmRpbmdTZWxlY3Rpb24oKS5zdGFydCgpKTsKICAgICB1bnNpZ25lZCBzdGFydEluZGV4ID0g
VGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChzdGFydFJhbmdlLmdldCgpKTsKLSAgICBzaXplX3Qg
bmV3bGluZTsKKyAgICB1aW50MzJfdCBuZXdsaW5lOwogICAgIGRvIHsKICAgICAgICAgbmV3bGlu
ZSA9IHRleHQuZmluZCgnXG4nLCBvZmZzZXQpOwogICAgICAgICBpZiAobmV3bGluZSAhPSBvZmZz
ZXQpIHsKICAgICAgICAgICAgIFJlZlB0cjxJbnNlcnRUZXh0Q29tbWFuZD4gY29tbWFuZCA9IElu
c2VydFRleHRDb21tYW5kOjpjcmVhdGUoZG9jdW1lbnQoKSk7CiAgICAgICAgICAgICBhcHBseUNv
bW1hbmRUb0NvbXBvc2l0ZShjb21tYW5kKTsKLSAgICAgICAgICAgIGludCBzdWJzdHJpbmdMZW5n
dGggPSBuZXdsaW5lID09IG5vdEZvdW5kID8gbGVuZ3RoIC0gb2Zmc2V0IDogbmV3bGluZSAtIG9m
ZnNldDsKKyAgICAgICAgICAgIGludCBzdWJzdHJpbmdMZW5ndGggPSBuZXdsaW5lID09IFN0cmlu
Zzo6bm90Rm91bmQgPyBsZW5ndGggLSBvZmZzZXQgOiBuZXdsaW5lIC0gb2Zmc2V0OwogICAgICAg
ICAgICAgY29tbWFuZC0+aW5wdXQodGV4dC5zdWJzdHJpbmcob2Zmc2V0LCBzdWJzdHJpbmdMZW5n
dGgpLCBmYWxzZSk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKG5ld2xpbmUgIT0gbm90Rm91bmQp
CisgICAgICAgIGlmIChuZXdsaW5lICE9IFN0cmluZzo6bm90Rm91bmQpCiAgICAgICAgICAgICBp
bnNlcnRMaW5lQnJlYWsoKTsKICAgICAgICAgICAgIAogICAgICAgICBvZmZzZXQgPSBuZXdsaW5l
ICsgMTsKLSAgICB9IHdoaWxlIChuZXdsaW5lICE9IG5vdEZvdW5kICYmIG9mZnNldCAhPSBsZW5n
dGgpOworICAgIH0gd2hpbGUgKG5ld2xpbmUgIT0gU3RyaW5nOjpub3RGb3VuZCAmJiBvZmZzZXQg
IT0gbGVuZ3RoKTsKICAgICAKICAgICBpZiAoc2VsZWN0SW5zZXJ0ZWRUZXh0KSB7CiAgICAgICAg
IFJlZlB0cjxSYW5nZT4gc2VsZWN0ZWRSYW5nZSA9IFRleHRJdGVyYXRvcjo6cmFuZ2VGcm9tTG9j
YXRpb25BbmRMZW5ndGgoZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCksIHN0YXJ0SW5kZXgs
IGxlbmd0aCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFRleHRDb21tYW5k
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFRleHRDb21t
YW5kLmNwcAkocmV2aXNpb24gODU4NjApCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2Vy
dFRleHRDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDcgKzEwNSw3IEBAIGJvb2wg
SW5zZXJ0VGV4dENvbW1hbmQ6OnBlcmZvcm1Ucml2aWFsUmUKIHZvaWQgSW5zZXJ0VGV4dENvbW1h
bmQ6OmlucHV0KGNvbnN0IFN0cmluZyYgdGV4dCwgYm9vbCBzZWxlY3RJbnNlcnRlZFRleHQsIFJl
YmFsYW5jZVR5cGUgd2hpdGVzcGFjZVJlYmFsYW5jZSkKIHsKICAgICAKLSAgICBBU1NFUlQodGV4
dC5maW5kKCdcbicpID09IG5vdEZvdW5kKTsKKyAgICBBU1NFUlQodGV4dC5maW5kKCdcbicpID09
IFN0cmluZzo6bm90Rm91bmQpOwogCiAgICAgaWYgKCFlbmRpbmdTZWxlY3Rpb24oKS5pc05vbk9y
cGhhbmVkQ2FyZXRPclJhbmdlKCkpCiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAJKHJldmlzaW9uIDg1ODYwKQorKysgU291cmNlL1dl
YkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NjAsOCAr
NTYwLDggQEAgdm9pZCBUZXh0SXRlcmF0b3I6OmhhbmRsZVRleHRCb3goKQogICAgICAgICAgICAg
ICAgIGVtaXRDaGFyYWN0ZXIoJyAnLCBtX25vZGUsIDAsIHJ1blN0YXJ0LCBydW5TdGFydCArIDEp
OwogICAgICAgICAgICAgICAgIG1fb2Zmc2V0ID0gcnVuU3RhcnQgKyAxOwogICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICBzaXplX3Qgc3VicnVuRW5kID0gc3RyLmZpbmQoJ1xu
JywgcnVuU3RhcnQpOwotICAgICAgICAgICAgICAgIGlmIChzdWJydW5FbmQgPT0gbm90Rm91bmQg
fHwgc3VicnVuRW5kID4gcnVuRW5kKQorICAgICAgICAgICAgICAgIHVpbnQzMl90IHN1YnJ1bkVu
ZCA9IHN0ci5maW5kKCdcbicsIHJ1blN0YXJ0KTsKKyAgICAgICAgICAgICAgICBpZiAoc3VicnVu
RW5kID09IFN0cmluZzo6bm90Rm91bmQgfHwgc3VicnVuRW5kID4gcnVuRW5kKQogICAgICAgICAg
ICAgICAgICAgICBzdWJydW5FbmQgPSBydW5FbmQ7CiAgICAgCiAgICAgICAgICAgICAgICAgbV9v
ZmZzZXQgPSBzdWJydW5FbmQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0Nv
bW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29t
bWFuZC5jcHAJKHJldmlzaW9uIDg1ODYwKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBp
bmdDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzc2LDggKzM3Niw4IEBAIHZvaWQgVHlw
aW5nQ29tbWFuZDo6aW5zZXJ0VGV4dChjb25zdCBTdHIKICAgICAvLyBzZWxlY3Qgd2hhdCdzIGlu
c2VydGVkLCBidXQgdGhlcmUncyBubyB3YXkgdG8gImV4dGVuZCBzZWxlY3Rpb24iIHRvIGluY2x1
ZGUgYm90aCBhbiBvbGQgc2VsZWN0aW9uCiAgICAgLy8gdGhhdCBlbmRzIGp1c3QgYmVmb3JlIHdo
ZXJlIHdlIHdhbnQgdG8gaW5zZXJ0IHRleHQgYW5kIHRoZSBuZXdseSBpbnNlcnRlZCB0ZXh0Lgog
ICAgIHVuc2lnbmVkIG9mZnNldCA9IDA7Ci0gICAgc2l6ZV90IG5ld2xpbmU7Ci0gICAgd2hpbGUg
KChuZXdsaW5lID0gdGV4dC5maW5kKCdcbicsIG9mZnNldCkpICE9IG5vdEZvdW5kKSB7CisgICAg
dWludDMyX3QgbmV3bGluZTsKKyAgICB3aGlsZSAoKG5ld2xpbmUgPSB0ZXh0LmZpbmQoJ1xuJywg
b2Zmc2V0KSkgIT0gU3RyaW5nOjpub3RGb3VuZCkgewogICAgICAgICBpZiAobmV3bGluZSAhPSBv
ZmZzZXQpCiAgICAgICAgICAgICBpbnNlcnRUZXh0UnVuV2l0aG91dE5ld2xpbmVzKHRleHQuc3Vi
c3RyaW5nKG9mZnNldCwgbmV3bGluZSAtIG9mZnNldCksIGZhbHNlKTsKICAgICAgICAgaW5zZXJ0
UGFyYWdyYXBoU2VwYXJhdG9yKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1
cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCShy
ZXZpc2lvbiA4NTg2MCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzE0LDcgKzcxNCw3IEBAIHN0YXRpYyB2b2lkIGZpbGxDb250YWluZXJG
cm9tU3RyaW5nKENvbnQKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIEFTU0VSVChzdHJp
bmcuZmluZCgnXG4nKSA9PSBub3RGb3VuZCk7CisgICAgQVNTRVJUKHN0cmluZy5maW5kKCdcbicp
ID09IFN0cmluZzo6bm90Rm91bmQpOwogCiAgICAgVmVjdG9yPFN0cmluZz4gdGFiTGlzdDsKICAg
ICBzdHJpbmcuc3BsaXQoJ1x0JywgdHJ1ZSwgdGFiTGlzdCk7CkBAIC03OTcsNyArNzk3LDcgQEAg
UGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbQogICAgIH0KIAogICAgIC8v
IEEgc3RyaW5nIHdpdGggbm8gbmV3bGluZXMgZ2V0cyBhZGRlZCBpbmxpbmUsIHJhdGhlciB0aGFu
IGJlaW5nIHB1dCBpbnRvIGEgcGFyYWdyYXBoLgotICAgIGlmIChzdHJpbmcuZmluZCgnXG4nKSA9
PSBub3RGb3VuZCkgeworICAgIGlmIChzdHJpbmcuZmluZCgnXG4nKSA9PSBTdHJpbmc6Om5vdEZv
dW5kKSB7CiAgICAgICAgIGZpbGxDb250YWluZXJGcm9tU3RyaW5nKGZyYWdtZW50LmdldCgpLCBz
dHJpbmcpOwogICAgICAgICByZXR1cm4gZnJhZ21lbnQucmVsZWFzZSgpOwogICAgIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwCShyZXZpc2lvbiA4NTg2
MCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMzYsMTEgKzMzNiwxMSBAQCB2b2lkIEhUTUxBbmNob3JFbGVtZW50OjpzZXRI
b3N0KGNvbnN0IFN0CiAgICAgaWYgKCF1cmwuY2FuU2V0SG9zdE9yUG9ydCgpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBzaXplX3Qgc2VwYXJhdG9yID0gdmFsdWUuZmluZCgnOicpOworICAgIHVp
bnQzMl90IHNlcGFyYXRvciA9IHZhbHVlLmZpbmQoJzonKTsKICAgICBpZiAoIXNlcGFyYXRvcikK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKHNlcGFyYXRvciA9PSBub3RGb3VuZCkKKyAgICBp
ZiAoc2VwYXJhdG9yID09IFN0cmluZzo6bm90Rm91bmQpCiAgICAgICAgIHVybC5zZXRIb3N0QW5k
UG9ydCh2YWx1ZSk7CiAgICAgZWxzZSB7CiAgICAgICAgIHVuc2lnbmVkIHBvcnRFbmQ7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbWJlZEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVtYmVkRWxlbWVudC5jcHAJKHJldmlzaW9uIDg1ODYw
KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRW1iZWRFbGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtOTAsOCArOTAsOCBAQCB2b2lkIEhUTUxFbWJlZEVsZW1lbnQ6OnBhcnNlTWFwcGVk
QXR0cmliCiAgIAogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gdHlwZUF0dHIpIHsKICAgICAgICAg
bV9zZXJ2aWNlVHlwZSA9IHZhbHVlLnN0cmluZygpLmxvd2VyKCk7Ci0gICAgICAgIHNpemVfdCBw
b3MgPSBtX3NlcnZpY2VUeXBlLmZpbmQoIjsiKTsKLSAgICAgICAgaWYgKHBvcyAhPSBub3RGb3Vu
ZCkKKyAgICAgICAgdWludDMyX3QgcG9zID0gbV9zZXJ2aWNlVHlwZS5maW5kKCI7Iik7CisgICAg
ICAgIGlmIChwb3MgIT0gU3RyaW5nOjpub3RGb3VuZCkKICAgICAgICAgICAgIG1fc2VydmljZVR5
cGUgPSBtX3NlcnZpY2VUeXBlLmxlZnQocG9zKTsKICAgICAgICAgaWYgKCFpc0ltYWdlVHlwZSgp
ICYmIG1faW1hZ2VMb2FkZXIpCiAgICAgICAgICAgICBtX2ltYWdlTG9hZGVyLmNsZWFyKCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAJ
KHJldmlzaW9uIDg1ODYwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xF
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAwLDcgKzYwMCw3IEBAIHN0YXRpYyBib29s
IGlzTm90TGluZUJyZWFrKFVDaGFyIGNoKSB7IHIKIGJvb2wgSFRNTFRleHRGb3JtQ29udHJvbEVs
ZW1lbnQ6OmlzUGxhY2Vob2xkZXJFbXB0eSgpIGNvbnN0CiB7CiAgICAgY29uc3QgQXRvbWljU3Ry
aW5nJiBhdHRyaWJ1dGVWYWx1ZSA9IGdldEF0dHJpYnV0ZShwbGFjZWhvbGRlckF0dHIpOwotICAg
IHJldHVybiBhdHRyaWJ1dGVWYWx1ZS5zdHJpbmcoKS5maW5kKGlzTm90TGluZUJyZWFrKSA9PSBu
b3RGb3VuZDsKKyAgICByZXR1cm4gYXR0cmlidXRlVmFsdWUuc3RyaW5nKCkuZmluZChpc05vdExp
bmVCcmVhaykgPT0gU3RyaW5nOjpub3RGb3VuZDsKIH0KIAogYm9vbCBIVE1MVGV4dEZvcm1Db250
cm9sRWxlbWVudDo6cGxhY2Vob2xkZXJTaG91bGRCZVZpc2libGUoKSBjb25zdApJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5jcHAJKHJldmlzaW9uIDg1ODYwKQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTgwLDggKzgwLDggQEAgdm9pZCBIVE1MT2JqZWN0RWxlbWVudDo6cGFyc2VNYXBwZWRB
dHRyaQogewogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gdHlwZUF0dHIpIHsKICAgICAgICAgbV9z
ZXJ2aWNlVHlwZSA9IGF0dHItPnZhbHVlKCkubG93ZXIoKTsKLSAgICAgICAgc2l6ZV90IHBvcyA9
IG1fc2VydmljZVR5cGUuZmluZCgiOyIpOwotICAgICAgICBpZiAocG9zICE9IG5vdEZvdW5kKQor
ICAgICAgICB1aW50MzJfdCBwb3MgPSBtX3NlcnZpY2VUeXBlLmZpbmQoIjsiKTsKKyAgICAgICAg
aWYgKHBvcyAhPSBTdHJpbmc6Om5vdEZvdW5kKQogICAgICAgICAgICAgbV9zZXJ2aWNlVHlwZSA9
IG1fc2VydmljZVR5cGUubGVmdChwb3MpOwogICAgICAgICBpZiAocmVuZGVyZXIoKSkKICAgICAg
ICAgICAgIHNldE5lZWRzV2lkZ2V0VXBkYXRlKHRydWUpOwpAQCAtMTc4LDggKzE3OCw4IEBAIHZv
aWQgSFRNTE9iamVjdEVsZW1lbnQ6OnBhcmFtZXRlcnNGb3JQbHUKICAgICAgICAgLy8gRklYTUU6
IHNlcnZpY2VUeXBlIGNhbGN1bGF0aW9uIGRvZXMgbm90IGJlbG9uZyBpbiB0aGlzIGZ1bmN0aW9u
LgogICAgICAgICBpZiAoc2VydmljZVR5cGUuaXNFbXB0eSgpICYmIGVxdWFsSWdub3JpbmdDYXNl
KG5hbWUsICJ0eXBlIikpIHsKICAgICAgICAgICAgIHNlcnZpY2VUeXBlID0gcC0+dmFsdWUoKTsK
LSAgICAgICAgICAgIHNpemVfdCBwb3MgPSBzZXJ2aWNlVHlwZS5maW5kKCI7Iik7Ci0gICAgICAg
ICAgICBpZiAocG9zICE9IG5vdEZvdW5kKQorICAgICAgICAgICAgdWludDMyX3QgcG9zID0gc2Vy
dmljZVR5cGUuZmluZCgiOyIpOworICAgICAgICAgICAgaWYgKHBvcyAhPSBTdHJpbmc6Om5vdEZv
dW5kKQogICAgICAgICAgICAgICAgIHNlcnZpY2VUeXBlID0gc2VydmljZVR5cGUubGVmdChwb3Mp
OwogICAgICAgICB9CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRN
TE1ldGFDaGFyc2V0UGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L3BhcnNlci9IVE1MTWV0YUNoYXJzZXRQYXJzZXIuY3BwCShyZXZpc2lvbiA4NTg2MCkKKysrIFNv
dXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxNZXRhQ2hhcnNldFBhcnNlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTU2LDEyICs1NiwxMiBAQCBzdGF0aWMgY29uc3Qgc2l6ZV90IGNoYXJzZXRM
ZW5ndGggPSBzaXplCiAKIFN0cmluZyBIVE1MTWV0YUNoYXJzZXRQYXJzZXI6OmV4dHJhY3RDaGFy
c2V0KGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7Ci0gICAgc2l6ZV90IHBvcyA9IDA7CisgICAgdWlu
dDMyX3QgcG9zID0gMDsKICAgICB1bnNpZ25lZCBsZW5ndGggPSB2YWx1ZS5sZW5ndGgoKTsKIAog
ICAgIHdoaWxlIChwb3MgPCBsZW5ndGgpIHsKICAgICAgICAgcG9zID0gdmFsdWUuZmluZChjaGFy
c2V0U3RyaW5nLCBwb3MsIGZhbHNlKTsKLSAgICAgICAgaWYgKHBvcyA9PSBub3RGb3VuZCkKKyAg
ICAgICAgaWYgKHBvcyA9PSBTdHJpbmc6Om5vdEZvdW5kKQogICAgICAgICAgICAgYnJlYWs7CiAK
ICAgICAgICAgcG9zICs9IGNoYXJzZXRMZW5ndGg7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1s
L3BhcnNlci9IVE1MUGFyc2VySWRpb21zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9odG1sL3BhcnNlci9IVE1MUGFyc2VySWRpb21zLmNwcAkocmV2aXNpb24gODU4NjApCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUGFyc2VySWRpb21zLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTA4LDIxICsxMDgsMjEgQEAgYm9vbCBwYXJzZVRvRG91YmxlRm9yTnVtYmVyVHlw
ZVdpdGhEZWNpbQogICAgIGlmICghZGVjaW1hbFBsYWNlcykKICAgICAgICAgcmV0dXJuIHRydWU7
CiAKLSAgICBzaXplX3QgZG90SW5kZXggPSBzdHJpbmcuZmluZCgnLicpOwotICAgIHNpemVfdCBl
SW5kZXggPSBzdHJpbmcuZmluZCgnZScpOwotICAgIGlmIChlSW5kZXggPT0gbm90Rm91bmQpIAor
ICAgIHVpbnQzMl90IGRvdEluZGV4ID0gc3RyaW5nLmZpbmQoJy4nKTsKKyAgICB1aW50MzJfdCBl
SW5kZXggPSBzdHJpbmcuZmluZCgnZScpOworICAgIGlmIChlSW5kZXggPT0gU3RyaW5nOjpub3RG
b3VuZCkKICAgICAgICAgZUluZGV4ID0gc3RyaW5nLmZpbmQoJ0UnKTsKIAogICAgIHVuc2lnbmVk
IGJhc2VEZWNpbWFsUGxhY2VzID0gMDsKLSAgICBpZiAoZG90SW5kZXggIT0gbm90Rm91bmQpIHsK
LSAgICAgICAgaWYgKGVJbmRleCA9PSBub3RGb3VuZCkKKyAgICBpZiAoZG90SW5kZXggIT0gU3Ry
aW5nOjpub3RGb3VuZCkgeworICAgICAgICBpZiAoZUluZGV4ID09IFN0cmluZzo6bm90Rm91bmQp
CiAgICAgICAgICAgICBiYXNlRGVjaW1hbFBsYWNlcyA9IHN0cmluZy5sZW5ndGgoKSAtIGRvdElu
ZGV4IC0gMTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgYmFzZURlY2ltYWxQbGFjZXMgPSBl
SW5kZXggLSBkb3RJbmRleCAtIDE7CiAgICAgfQogCiAgICAgaW50IGV4cG9uZW50ID0gMDsKLSAg
ICBpZiAoZUluZGV4ICE9IG5vdEZvdW5kKSB7CisgICAgaWYgKGVJbmRleCAhPSBTdHJpbmc6Om5v
dEZvdW5kKSB7CiAgICAgICAgIHVuc2lnbmVkIGN1cnNvciA9IGVJbmRleCArIDEsIGN1cnNvclNh
dmVkOwogICAgICAgICBpbnQgZGlnaXQsIGV4cG9uZW50U2lnbjsKICAgICAgICAgaW50MzJfdCBl
eHBvbmVudDMyOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvWFNTRmlsdGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9YU1NGaWx0ZXIuY3Bw
CShyZXZpc2lvbiA4NTg2MCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1hTU0ZpbHRl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2Niw3ICsxNjYsNyBAQCB2b2lkIFhTU0ZpbHRlcjo6
aW5pdCgpCiAKICAgICBUZXh0UmVzb3VyY2VEZWNvZGVyKiBkZWNvZGVyID0gbV9wYXJzZXItPmRv
Y3VtZW50KCktPmRlY29kZXIoKTsKICAgICBtX2RlY29kZWRVUkwgPSBkZWNvZGVyID8gZGVjb2Rl
VVJMKHVybC5zdHJpbmcoKSwgZGVjb2Rlci0+ZW5jb2RpbmcoKSkgOiB1cmwuc3RyaW5nKCk7Ci0g
ICAgaWYgKG1fZGVjb2RlZFVSTC5maW5kKGlzUmVxdWlyZWRGb3JJbmplY3Rpb24sIDApID09IG5v
dEZvdW5kKQorICAgIGlmIChtX2RlY29kZWRVUkwuZmluZChpc1JlcXVpcmVkRm9ySW5qZWN0aW9u
LCAwKSA9PSBTdHJpbmc6Om5vdEZvdW5kKQogICAgICAgICBtX2RlY29kZWRVUkwgPSBTdHJpbmco
KTsKIAogICAgIGlmIChEb2N1bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIgPSBtX3BhcnNlci0+
ZG9jdW1lbnQoKS0+ZnJhbWUoKS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCkpIHsKQEAgLTE3
Nyw3ICsxNzcsNyBAQCB2b2lkIFhTU0ZpbHRlcjo6aW5pdCgpCiAgICAgICAgIGlmIChodHRwQm9k
eSAmJiAhaHR0cEJvZHktPmlzRW1wdHkoKSkgewogICAgICAgICAgICAgU3RyaW5nIGh0dHBCb2R5
QXNTdHJpbmcgPSBodHRwQm9keS0+ZmxhdHRlblRvU3RyaW5nKCk7CiAgICAgICAgICAgICBtX2Rl
Y29kZWRIVFRQQm9keSA9IGRlY29kZXIgPyBkZWNvZGVVUkwoaHR0cEJvZHlBc1N0cmluZywgZGVj
b2Rlci0+ZW5jb2RpbmcoKSkgOiBodHRwQm9keUFzU3RyaW5nOwotICAgICAgICAgICAgaWYgKG1f
ZGVjb2RlZEhUVFBCb2R5LmZpbmQoaXNSZXF1aXJlZEZvckluamVjdGlvbiwgMCkgPT0gbm90Rm91
bmQpCisgICAgICAgICAgICBpZiAobV9kZWNvZGVkSFRUUEJvZHkuZmluZChpc1JlcXVpcmVkRm9y
SW5qZWN0aW9uLCAwKSA9PSBTdHJpbmc6Om5vdEZvdW5kKQogICAgICAgICAgICAgICAgIG1fZGVj
b2RlZEhUVFBCb2R5ID0gU3RyaW5nKCk7CiAgICAgICAgICAgICBpZiAobV9kZWNvZGVkSFRUUEJv
ZHkubGVuZ3RoKCkgPj0gbWluaXVtTGVuZ3RoRm9yU3VmZml4VHJlZSkKICAgICAgICAgICAgICAg
ICBtX2RlY29kZWRIVFRQQm9keVN1ZmZpeFRyZWUgPSBhZG9wdFB0cihuZXcgU3VmZml4VHJlZTxB
U0NJSUNvZGVib29rPihtX2RlY29kZWRIVFRQQm9keSwgc3VmZml4VHJlZURlcHRoKSk7CkBAIC00
NTEsMTEgKzQ1MSwxMSBAQCBib29sIFhTU0ZpbHRlcjo6aXNDb250YWluZWRJblJlcXVlc3QoY29u
CiAgICAgQVNTRVJUKCFzbmlwcGV0LmlzRW1wdHkoKSk7CiAgICAgU3RyaW5nIGNhbm9uaWNhbGl6
ZWRTbmlwcGV0ID0gY2Fub25pY2FsaXplKHNuaXBwZXQpOwogICAgIEFTU0VSVCghY2Fub25pY2Fs
aXplZFNuaXBwZXQuaXNFbXB0eSgpKTsKLSAgICBpZiAobV9kZWNvZGVkVVJMLmZpbmQoY2Fub25p
Y2FsaXplZFNuaXBwZXQsIDAsIGZhbHNlKSAhPSBub3RGb3VuZCkKKyAgICBpZiAobV9kZWNvZGVk
VVJMLmZpbmQoY2Fub25pY2FsaXplZFNuaXBwZXQsIDAsIGZhbHNlKSAhPSBTdHJpbmc6Om5vdEZv
dW5kKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBpZiAobV9kZWNvZGVkSFRUUEJvZHlTdWZm
aXhUcmVlICYmICFtX2RlY29kZWRIVFRQQm9keVN1ZmZpeFRyZWUtPm1pZ2h0Q29udGFpbihjYW5v
bmljYWxpemVkU25pcHBldCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gbV9k
ZWNvZGVkSFRUUEJvZHkuZmluZChjYW5vbmljYWxpemVkU25pcHBldCwgMCwgZmFsc2UpICE9IG5v
dEZvdW5kOworICAgIHJldHVybiBtX2RlY29kZWRIVFRQQm9keS5maW5kKGNhbm9uaWNhbGl6ZWRT
bmlwcGV0LCAwLCBmYWxzZSkgIT0gU3RyaW5nOjpub3RGb3VuZDsKIH0KIAogYm9vbCBYU1NGaWx0
ZXI6OmlzU2FtZU9yaWdpblJlc291cmNlKGNvbnN0IFN0cmluZyYgdXJsKQpJbmRleDogU291cmNl
L1dlYkNvcmUvbG9hZGVyL0Nyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Dcm9zc09yaWdpblByZWZsaWdodFJlc3Vs
dENhY2hlLmNwcAkocmV2aXNpb24gODU4NjApCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ3Jv
c3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc1LDgg
Kzc1LDggQEAgdGVtcGxhdGU8Y2xhc3MgSGFzaFR5cGU+CiBzdGF0aWMgYm9vbCBwYXJzZUFjY2Vz
c0NvbnRyb2xBbGxvd0xpc3QoY29uc3QgU3RyaW5nJiBzdHJpbmcsIEhhc2hTZXQ8U3RyaW5nLCBI
YXNoVHlwZT4mIHNldCkKIHsKICAgICB1bnNpZ25lZCBzdGFydCA9IDA7Ci0gICAgc2l6ZV90IGVu
ZDsKLSAgICB3aGlsZSAoKGVuZCA9IHN0cmluZy5maW5kKCcsJywgc3RhcnQpKSAhPSBub3RGb3Vu
ZCkgeworICAgIHVpbnQzMl90IGVuZDsKKyAgICB3aGlsZSAoKGVuZCA9IHN0cmluZy5maW5kKCcs
Jywgc3RhcnQpKSAhPSBTdHJpbmc6Om5vdEZvdW5kKSB7CiAgICAgICAgIGlmIChzdGFydCA9PSBl
bmQpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9NYWluUmVzb3VyY2VMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9NYWluUmVzb3VyY2VMb2FkZXIuY3BwCShyZXZpc2lvbiA4NTg2MCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2xvYWRlci9NYWluUmVzb3VyY2VMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNDQsOCArMzQ0LDggQEAgdm9pZCBNYWluUmVzb3VyY2VMb2FkZXI6OnN1YnN0aXR1dGVNSU1F
VAogICAgIGlmIChmaWxlbmFtZS5lbmRzV2l0aCgiLyIpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBzaXplX3QgZXh0ZW5zaW9uUG9zID0gZmlsZW5hbWUucmV2ZXJzZUZpbmQoJy4nKTsKLSAgICBp
ZiAoZXh0ZW5zaW9uUG9zID09IG5vdEZvdW5kKQorICAgIHVpbnQzMl90IGV4dGVuc2lvblBvcyA9
IGZpbGVuYW1lLnJldmVyc2VGaW5kKCcuJyk7CisgICAgaWYgKGV4dGVuc2lvblBvcyA9PSBTdHJp
bmc6Om5vdEZvdW5kKQogICAgICAgICByZXR1cm47CiAKICAgICBTdHJpbmcgZXh0ZW5zaW9uID0g
ZmlsZW5hbWUuc3Vic3RyaW5nKGV4dGVuc2lvblBvcyArIDEpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3Jh
Z2UuY3BwCShyZXZpc2lvbiA4NTg2MCkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9hcHBjYWNo
ZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMjcsOCAr
MTAyNyw4IEBAIGJvb2wgQXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnN0b3JlTmV3ZXMKIAogc3Rh
dGljIGlubGluZSB2b2lkIHBhcnNlSGVhZGVyKGNvbnN0IFVDaGFyKiBoZWFkZXIsIHNpemVfdCBo
ZWFkZXJMZW5ndGgsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQogewotICAgIHNpemVfdCBw
b3MgPSBmaW5kKGhlYWRlciwgaGVhZGVyTGVuZ3RoLCAnOicpOwotICAgIEFTU0VSVChwb3MgIT0g
bm90Rm91bmQpOworICAgIHVpbnQzMl90IHBvcyA9IGZpbmQoaGVhZGVyLCBoZWFkZXJMZW5ndGgs
ICc6Jyk7CisgICAgQVNTRVJUKHBvcyAhPSBTdHJpbmc6Om5vdEZvdW5kKTsKICAgICAKICAgICBB
dG9taWNTdHJpbmcgaGVhZGVyTmFtZSA9IEF0b21pY1N0cmluZyhoZWFkZXIsIHBvcyk7CiAgICAg
U3RyaW5nIGhlYWRlclZhbHVlID0gU3RyaW5nKGhlYWRlciArIHBvcyArIDEsIGhlYWRlckxlbmd0
aCAtIHBvcyAtIDEpOwpAQCAtMTAzOSw4ICsxMDM5LDggQEAgc3RhdGljIGlubGluZSB2b2lkIHBh
cnNlSGVhZGVyKGNvbnN0IFVDaAogc3RhdGljIGlubGluZSB2b2lkIHBhcnNlSGVhZGVycyhjb25z
dCBTdHJpbmcmIGhlYWRlcnMsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQogewogICAgIHVu
c2lnbmVkIHN0YXJ0UG9zID0gMDsKLSAgICBzaXplX3QgZW5kUG9zOwotICAgIHdoaWxlICgoZW5k
UG9zID0gaGVhZGVycy5maW5kKCdcbicsIHN0YXJ0UG9zKSkgIT0gbm90Rm91bmQpIHsKKyAgICB1
aW50MzJfdCBlbmRQb3M7CisgICAgd2hpbGUgKChlbmRQb3MgPSBoZWFkZXJzLmZpbmQoJ1xuJywg
c3RhcnRQb3MpKSAhPSBTdHJpbmc6Om5vdEZvdW5kKSB7CiAgICAgICAgIEFTU0VSVChzdGFydFBv
cyAhPSBlbmRQb3MpOwogCiAgICAgICAgIHBhcnNlSGVhZGVyKGhlYWRlcnMuY2hhcmFjdGVycygp
ICsgc3RhcnRQb3MsIGVuZFBvcyAtIHN0YXJ0UG9zLCByZXNwb25zZSk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmNwcAkocmV2aXNpb24gODU4NjApCisrKyBTb3VyY2Uv
V2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIwLDEz
ICs0MjAsMTMgQEAgc3RhdGljIGNvbnN0IGNoYXIgU2VwYXJhdG9yQ2hhcmFjdGVyID0gJwogUGFz
c1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gU2VjdXJpdHlPcmlnaW46OmNyZWF0ZUZyb21EYXRhYmFz
ZUlkZW50aWZpZXIoY29uc3QgU3RyaW5nJiBkYXRhYmFzZUlkZW50aWZpZXIpCiB7IAogICAgIC8v
IE1ha2Ugc3VyZSB0aGVyZSdzIGEgZmlyc3Qgc2VwYXJhdG9yCi0gICAgc2l6ZV90IHNlcGFyYXRv
cjEgPSBkYXRhYmFzZUlkZW50aWZpZXIuZmluZChTZXBhcmF0b3JDaGFyYWN0ZXIpOwotICAgIGlm
IChzZXBhcmF0b3IxID09IG5vdEZvdW5kKQorICAgIHVpbnQzMl90IHNlcGFyYXRvcjEgPSBkYXRh
YmFzZUlkZW50aWZpZXIuZmluZChTZXBhcmF0b3JDaGFyYWN0ZXIpOworICAgIGlmIChzZXBhcmF0
b3IxID09IFN0cmluZzo6bm90Rm91bmQpCiAgICAgICAgIHJldHVybiBjcmVhdGUoS1VSTCgpKTsK
ICAgICAgICAgCiAgICAgLy8gTWFrZSBzdXJlIHRoZXJlJ3MgYSBzZWNvbmQgc2VwYXJhdG9yCi0g
ICAgc2l6ZV90IHNlcGFyYXRvcjIgPSBkYXRhYmFzZUlkZW50aWZpZXIucmV2ZXJzZUZpbmQoU2Vw
YXJhdG9yQ2hhcmFjdGVyKTsKLSAgICBpZiAoc2VwYXJhdG9yMiA9PSBub3RGb3VuZCkKKyAgICB1
aW50MzJfdCBzZXBhcmF0b3IyID0gZGF0YWJhc2VJZGVudGlmaWVyLnJldmVyc2VGaW5kKFNlcGFy
YXRvckNoYXJhY3Rlcik7CisgICAgaWYgKHNlcGFyYXRvcjIgPT0gU3RyaW5nOjpub3RGb3VuZCkK
ICAgICAgICAgcmV0dXJuIGNyZWF0ZShLVVJMKCkpOwogICAgICAgICAKICAgICAvLyBFbnN1cmUg
dGhlcmUgd2VyZSBhdCBsZWFzdCAyIHNlcGFyYXRvciBjaGFyYWN0ZXJzLiBTb21lIGhvc3RuYW1l
cyBvbiBpbnRyYW5ldHMgaGF2ZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9Vc2VyQ29udGVu
dFVSTFBhdHRlcm4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvVXNlckNv
bnRlbnRVUkxQYXR0ZXJuLmNwcAkocmV2aXNpb24gODU4NjApCisrKyBTb3VyY2UvV2ViQ29yZS9w
YWdlL1VzZXJDb250ZW50VVJMUGF0dGVybi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDggKzYz
LDggQEAgYm9vbCBVc2VyQ29udGVudFVSTFBhdHRlcm46OnBhcnNlKGNvbnN0CiB7CiAgICAgREVG
SU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJpbmcsIHNjaGVtZVNlcGFyYXRvciwgKCI6Ly8iKSk7
CiAKLSAgICBzaXplX3Qgc2NoZW1lRW5kUG9zID0gcGF0dGVybi5maW5kKHNjaGVtZVNlcGFyYXRv
cik7Ci0gICAgaWYgKHNjaGVtZUVuZFBvcyA9PSBub3RGb3VuZCkKKyAgICB1aW50MzJfdCBzY2hl
bWVFbmRQb3MgPSBwYXR0ZXJuLmZpbmQoc2NoZW1lU2VwYXJhdG9yKTsKKyAgICBpZiAoc2NoZW1l
RW5kUG9zID09IFN0cmluZzo6bm90Rm91bmQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IG1fc2NoZW1lID0gcGF0dGVybi5sZWZ0KHNjaGVtZUVuZFBvcyk7CkBAIC03OCw4ICs3OCw4IEBA
IGJvb2wgVXNlckNvbnRlbnRVUkxQYXR0ZXJuOjpwYXJzZShjb25zdAogICAgIGlmIChlcXVhbEln
bm9yaW5nQ2FzZShtX3NjaGVtZSwgImZpbGUiKSkKICAgICAgICAgcGF0aFN0YXJ0UG9zID0gaG9z
dFN0YXJ0UG9zOwogICAgIGVsc2UgewotICAgICAgICBzaXplX3QgaG9zdEVuZFBvcyA9IHBhdHRl
cm4uZmluZCgiLyIsIGhvc3RTdGFydFBvcyk7Ci0gICAgICAgIGlmIChob3N0RW5kUG9zID09IG5v
dEZvdW5kKQorICAgICAgICB1aW50MzJfdCBob3N0RW5kUG9zID0gcGF0dGVybi5maW5kKCIvIiwg
aG9zdFN0YXJ0UG9zKTsKKyAgICAgICAgaWYgKGhvc3RFbmRQb3MgPT0gU3RyaW5nOjpub3RGb3Vu
ZCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICBtX2hvc3QgPSBwYXR0ZXJu
LnN1YnN0cmluZyhob3N0U3RhcnRQb3MsIGhvc3RFbmRQb3MgLSBob3N0U3RhcnRQb3MpOwpAQCAt
OTYsNyArOTYsNyBAQCBib29sIFVzZXJDb250ZW50VVJMUGF0dGVybjo6cGFyc2UoY29uc3QKICAg
ICAgICAgfQogCiAgICAgICAgIC8vIE5vIG90aGVyICcqJyBjYW4gb2NjdXIgaW4gdGhlIGhvc3Qu
Ci0gICAgICAgIGlmIChtX2hvc3QuZmluZCgiKiIpICE9IG5vdEZvdW5kKQorICAgICAgICBpZiAo
bV9ob3N0LmZpbmQoIioiKSAhPSBTdHJpbmc6Om5vdEZvdW5kKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgICAgIHBhdGhTdGFydFBvcyA9IGhvc3RFbmRQb3M7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL1dpbmRvd0ZlYXR1cmVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wYWdlL1dpbmRvd0ZlYXR1cmVzLmNwcAkocmV2aXNpb24gODU4NjApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL1dpbmRvd0ZlYXR1cmVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQz
LDE4ICsyNDMsMTggQEAgdm9pZCBXaW5kb3dGZWF0dXJlczo6cGFyc2VEaWFsb2dGZWF0dXJlcwog
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CiAgICAgICAgIGNvbnN0IFN0
cmluZyYgZmVhdHVyZVN0cmluZyA9IHZlY3RvcltpXTsKIAotICAgICAgICBzaXplX3Qgc2VwYXJh
dG9yUG9zaXRpb24gPSBmZWF0dXJlU3RyaW5nLmZpbmQoJz0nKTsKLSAgICAgICAgc2l6ZV90IGNv
bG9uUG9zaXRpb24gPSBmZWF0dXJlU3RyaW5nLmZpbmQoJzonKTsKLSAgICAgICAgaWYgKHNlcGFy
YXRvclBvc2l0aW9uICE9IG5vdEZvdW5kICYmIGNvbG9uUG9zaXRpb24gIT0gbm90Rm91bmQpCisg
ICAgICAgIHVpbnQzMl90IHNlcGFyYXRvclBvc2l0aW9uID0gZmVhdHVyZVN0cmluZy5maW5kKCc9
Jyk7CisgICAgICAgIHVpbnQzMl90IGNvbG9uUG9zaXRpb24gPSBmZWF0dXJlU3RyaW5nLmZpbmQo
JzonKTsKKyAgICAgICAgaWYgKHNlcGFyYXRvclBvc2l0aW9uICE9IFN0cmluZzo6bm90Rm91bmQg
JiYgY29sb25Qb3NpdGlvbiAhPSBTdHJpbmc6Om5vdEZvdW5kKQogICAgICAgICAgICAgY29udGlu
dWU7IC8vIGlnbm9yZSBzdHJpbmdzIHRoYXQgaGF2ZSBib3RoID0gYW5kIDoKLSAgICAgICAgaWYg
KHNlcGFyYXRvclBvc2l0aW9uID09IG5vdEZvdW5kKQorICAgICAgICBpZiAoc2VwYXJhdG9yUG9z
aXRpb24gPT0gU3RyaW5nOjpub3RGb3VuZCkKICAgICAgICAgICAgIHNlcGFyYXRvclBvc2l0aW9u
ID0gY29sb25Qb3NpdGlvbjsKIAogICAgICAgICBTdHJpbmcga2V5ID0gZmVhdHVyZVN0cmluZy5s
ZWZ0KHNlcGFyYXRvclBvc2l0aW9uKS5zdHJpcFdoaXRlU3BhY2UoKS5sb3dlcigpOwogCiAgICAg
ICAgIC8vIE51bGwgc3RyaW5nIGZvciB2YWx1ZSBpbmRpY2F0ZXMga2V5IHdpdGhvdXQgdmFsdWUu
CiAgICAgICAgIFN0cmluZyB2YWx1ZTsKLSAgICAgICAgaWYgKHNlcGFyYXRvclBvc2l0aW9uICE9
IG5vdEZvdW5kKSB7CisgICAgICAgIGlmIChzZXBhcmF0b3JQb3NpdGlvbiAhPSBTdHJpbmc6Om5v
dEZvdW5kKSB7CiAgICAgICAgICAgICB2YWx1ZSA9IGZlYXR1cmVTdHJpbmcuc3Vic3RyaW5nKHNl
cGFyYXRvclBvc2l0aW9uICsgMSkuc3RyaXBXaGl0ZVNwYWNlKCkubG93ZXIoKTsKICAgICAgICAg
ICAgIHZhbHVlID0gdmFsdWUubGVmdCh2YWx1ZS5maW5kKCcgJykpOwogICAgICAgICB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Db250ZW50VHlwZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ29udGVudFR5cGUuY3BwCShyZXZpc2lvbiA4NTg2MCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0NvbnRlbnRUeXBlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDEsMTkgKzQxLDE5IEBAIFN0cmluZyBDb250ZW50VHlwZTo6cGFyYW1ldGVyKGNvbnN0
IFN0cmkKICAgICBTdHJpbmcgc3RyaXBwZWRUeXBlID0gbV90eXBlLnN0cmlwV2hpdGVTcGFjZSgp
OwogCiAgICAgLy8gYSBNSU1FIHR5cGUgY2FuIGhhdmUgb25lIG9yIG1vcmUgInBhcmFtPXZhbHVl
IiBhZnRlciBhIHNlbWktY29sb24sIGFuZCBzZXBhcmF0ZWQgZnJvbSBlYWNoIG90aGVyIGJ5IHNl
bWktY29sb25zCi0gICAgc2l6ZV90IHNlbWkgPSBzdHJpcHBlZFR5cGUuZmluZCgnOycpOwotICAg
IGlmIChzZW1pICE9IG5vdEZvdW5kKSB7Ci0gICAgICAgIHNpemVfdCBzdGFydCA9IHN0cmlwcGVk
VHlwZS5maW5kKHBhcmFtZXRlck5hbWUsIHNlbWkgKyAxLCBmYWxzZSk7Ci0gICAgICAgIGlmIChz
dGFydCAhPSBub3RGb3VuZCkgeworICAgIHVpbnQzMl90IHNlbWkgPSBzdHJpcHBlZFR5cGUuZmlu
ZCgnOycpOworICAgIGlmIChzZW1pICE9IFN0cmluZzo6bm90Rm91bmQpIHsKKyAgICAgICAgdWlu
dDMyX3Qgc3RhcnQgPSBzdHJpcHBlZFR5cGUuZmluZChwYXJhbWV0ZXJOYW1lLCBzZW1pICsgMSwg
ZmFsc2UpOworICAgICAgICBpZiAoc3RhcnQgIT0gU3RyaW5nOjpub3RGb3VuZCkgewogICAgICAg
ICAgICAgc3RhcnQgPSBzdHJpcHBlZFR5cGUuZmluZCgnPScsIHN0YXJ0ICsgcGFyYW1ldGVyTmFt
ZS5sZW5ndGgoKSk7Ci0gICAgICAgICAgICBpZiAoc3RhcnQgIT0gbm90Rm91bmQpIHsKLSAgICAg
ICAgICAgICAgICBzaXplX3QgcXVvdGUgPSBzdHJpcHBlZFR5cGUuZmluZCgnXCInLCBzdGFydCAr
IDEpOwotICAgICAgICAgICAgICAgIHNpemVfdCBlbmQgPSBzdHJpcHBlZFR5cGUuZmluZCgnXCIn
LCBzdGFydCArIDIpOwotICAgICAgICAgICAgICAgIGlmIChxdW90ZSAhPSBub3RGb3VuZCAmJiBl
bmQgIT0gbm90Rm91bmQpCisgICAgICAgICAgICBpZiAoc3RhcnQgIT0gU3RyaW5nOjpub3RGb3Vu
ZCkgeworICAgICAgICAgICAgICAgIHVpbnQzMl90IHF1b3RlID0gc3RyaXBwZWRUeXBlLmZpbmQo
J1wiJywgc3RhcnQgKyAxKTsKKyAgICAgICAgICAgICAgICB1aW50MzJfdCBlbmQgPSBzdHJpcHBl
ZFR5cGUuZmluZCgnXCInLCBzdGFydCArIDIpOworICAgICAgICAgICAgICAgIGlmIChxdW90ZSAh
PSBTdHJpbmc6Om5vdEZvdW5kICYmIGVuZCAhPSBTdHJpbmc6Om5vdEZvdW5kKQogICAgICAgICAg
ICAgICAgICAgICBzdGFydCA9IHF1b3RlOwogICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAg
ICAgICAgICAgICAgICBlbmQgPSBzdHJpcHBlZFR5cGUuZmluZCgnOycsIHN0YXJ0ICsgMSk7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChlbmQgPT0gbm90Rm91bmQpCisgICAgICAgICAgICAgICAg
ICAgIGlmIChlbmQgPT0gU3RyaW5nOjpub3RGb3VuZCkKICAgICAgICAgICAgICAgICAgICAgICAg
IGVuZCA9IHN0cmlwcGVkVHlwZS5sZW5ndGgoKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgcGFyYW1ldGVyVmFsdWUgPSBzdHJpcHBlZFR5cGUuc3Vic3RyaW5nKHN0YXJ0ICsg
MSwgZW5kIC0gKHN0YXJ0ICsgMSkpLnN0cmlwV2hpdGVTcGFjZSgpOwpAQCAtNjksOCArNjksOCBA
QCBTdHJpbmcgQ29udGVudFR5cGU6OnR5cGUoKSBjb25zdAogICAgIFN0cmluZyBzdHJpcHBlZFR5
cGUgPSBtX3R5cGUuc3RyaXBXaGl0ZVNwYWNlKCk7CiAKICAgICAvLyAidHlwZSIgY2FuIGhhdmUg
cGFyYW1ldGVycyBhZnRlciBhIHNlbWktY29sb24sIHN0cmlwIHRoZW0KLSAgICBzaXplX3Qgc2Vt
aSA9IHN0cmlwcGVkVHlwZS5maW5kKCc7Jyk7Ci0gICAgaWYgKHNlbWkgIT0gbm90Rm91bmQpCisg
ICAgdWludDMyX3Qgc2VtaSA9IHN0cmlwcGVkVHlwZS5maW5kKCc7Jyk7CisgICAgaWYgKHNlbWkg
IT0gU3RyaW5nOjpub3RGb3VuZCkKICAgICAgICAgc3RyaXBwZWRUeXBlID0gc3RyaXBwZWRUeXBl
LmxlZnQoc2VtaSkuc3RyaXBXaGl0ZVNwYWNlKCk7CiAKICAgICByZXR1cm4gc3RyaXBwZWRUeXBl
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vS1VSTC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vS1VSTC5jcHAJKHJldmlzaW9uIDg1ODYwKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vS1VSTC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkzOCw4ICs5
MzgsOCBAQCBTdHJpbmcgZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKGNvbnN0IFN0CiAgICAgdW5z
aWduZWQgbGVuZ3RoID0gc3RyLmxlbmd0aCgpOwogICAgIHVuc2lnbmVkIGRlY29kZWRQb3NpdGlv
biA9IDA7CiAgICAgdW5zaWduZWQgc2VhcmNoUG9zaXRpb24gPSAwOwotICAgIHNpemVfdCBlbmNv
ZGVkUnVuUG9zaXRpb247Ci0gICAgd2hpbGUgKChlbmNvZGVkUnVuUG9zaXRpb24gPSBzdHIuZmlu
ZCgnJScsIHNlYXJjaFBvc2l0aW9uKSkgIT0gbm90Rm91bmQpIHsKKyAgICB1aW50MzJfdCBlbmNv
ZGVkUnVuUG9zaXRpb247CisgICAgd2hpbGUgKChlbmNvZGVkUnVuUG9zaXRpb24gPSBzdHIuZmlu
ZCgnJScsIHNlYXJjaFBvc2l0aW9uKSkgIT0gU3RyaW5nOjpub3RGb3VuZCkgewogICAgICAgICAv
LyBGaW5kIHRoZSBzZXF1ZW5jZSBvZiAlLWVzY2FwZSBjb2Rlcy4KICAgICAgICAgdW5zaWduZWQg
ZW5jb2RlZFJ1bkVuZCA9IGVuY29kZWRSdW5Qb3NpdGlvbjsKICAgICAgICAgd2hpbGUgKGxlbmd0
aCAtIGVuY29kZWRSdW5FbmQgPj0gMwpAQCAtMTc0MSwxMyArMTc0MSwxMyBAQCBzdGF0aWMgdm9p
ZCBlbmNvZGVSZWxhdGl2ZVN0cmluZyhjb25zdCBTCiAKIHN0YXRpYyBTdHJpbmcgc3Vic3RpdHV0
ZUJhY2tzbGFzaGVzKGNvbnN0IFN0cmluZyYgc3RyaW5nKQogewotICAgIHNpemVfdCBxdWVzdGlv
blBvcyA9IHN0cmluZy5maW5kKCc/Jyk7Ci0gICAgc2l6ZV90IGhhc2hQb3MgPSBzdHJpbmcuZmlu
ZCgnIycpOworICAgIHVpbnQzMl90IHF1ZXN0aW9uUG9zID0gc3RyaW5nLmZpbmQoJz8nKTsKKyAg
ICB1aW50MzJfdCBoYXNoUG9zID0gc3RyaW5nLmZpbmQoJyMnKTsKICAgICB1bnNpZ25lZCBwYXRo
RW5kOwogCi0gICAgaWYgKGhhc2hQb3MgIT0gbm90Rm91bmQgJiYgKHF1ZXN0aW9uUG9zID09IG5v
dEZvdW5kIHx8IHF1ZXN0aW9uUG9zID4gaGFzaFBvcykpCisgICAgaWYgKGhhc2hQb3MgIT0gU3Ry
aW5nOjpub3RGb3VuZCAmJiAocXVlc3Rpb25Qb3MgPT0gU3RyaW5nOjpub3RGb3VuZCB8fCBxdWVz
dGlvblBvcyA+IGhhc2hQb3MpKQogICAgICAgICBwYXRoRW5kID0gaGFzaFBvczsKLSAgICBlbHNl
IGlmIChxdWVzdGlvblBvcyAhPSBub3RGb3VuZCkKKyAgICBlbHNlIGlmIChxdWVzdGlvblBvcyAh
PSBTdHJpbmc6Om5vdEZvdW5kKQogICAgICAgICBwYXRoRW5kID0gcXVlc3Rpb25Qb3M7CiAgICAg
ZWxzZQogICAgICAgICBwYXRoRW5kID0gc3RyaW5nLmxlbmd0aCgpOwpAQCAtMTk1OSwxMCArMTk1
OSwxMCBAQCBib29sIHBvcnRBbGxvd2VkKGNvbnN0IEtVUkwmIHVybCkKIFN0cmluZyBtaW1lVHlw
ZUZyb21EYXRhVVJMKGNvbnN0IFN0cmluZyYgdXJsKQogewogICAgIEFTU0VSVChwcm90b2NvbElz
KHVybCwgImRhdGEiKSk7Ci0gICAgc2l6ZV90IGluZGV4ID0gdXJsLmZpbmQoJzsnKTsKLSAgICBp
ZiAoaW5kZXggPT0gbm90Rm91bmQpCisgICAgdWludDMyX3QgaW5kZXggPSB1cmwuZmluZCgnOycp
OworICAgIGlmIChpbmRleCA9PSBTdHJpbmc6Om5vdEZvdW5kKQogICAgICAgICBpbmRleCA9IHVy
bC5maW5kKCcsJyk7Ci0gICAgaWYgKGluZGV4ICE9IG5vdEZvdW5kKSB7CisgICAgaWYgKGluZGV4
ICE9IFN0cmluZzo6bm90Rm91bmQpIHsKICAgICAgICAgaWYgKGluZGV4ID4gNSkKICAgICAgICAg
ICAgIHJldHVybiB1cmwuc3Vic3RyaW5nKDUsIGluZGV4IC0gNSk7CiAgICAgICAgIHJldHVybiAi
dGV4dC9wbGFpbiI7IC8vIERhdGEgVVJMcyB3aXRoIG5vIE1JTUUgdHlwZSBhcmUgY29uc2lkZXJl
ZCB0ZXh0L3BsYWluLgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGVuZ3RoLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MZW5ndGguY3BwCShyZXZpc2lv
biA4NTg2MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xlbmd0aC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEwNSw5ICsxMDUsOSBAQCBQYXNzT3duQXJyYXlQdHI8TGVuZ3RoPiBuZXdDb29y
ZHNBcnJheShjCiAKICAgICBpbnQgaSA9IDA7CiAgICAgdW5zaWduZWQgcG9zID0gMDsKLSAgICBz
aXplX3QgcG9zMjsKKyAgICB1aW50MzJfdCBwb3MyOwogCi0gICAgd2hpbGUgKChwb3MyID0gc3Ry
LT5maW5kKCcgJywgcG9zKSkgIT0gbm90Rm91bmQpIHsKKyAgICB3aGlsZSAoKHBvczIgPSBzdHIt
PmZpbmQoJyAnLCBwb3MpKSAhPSBTdHJpbmc6Om5vdEZvdW5kKSB7CiAgICAgICAgIHJbaSsrXSA9
IHBhcnNlTGVuZ3RoKHN0ci0+Y2hhcmFjdGVycygpICsgcG9zLCBwb3MyIC0gcG9zKTsKICAgICAg
ICAgcG9zID0gcG9zMisxOwogICAgIH0KQEAgLTEzMSw5ICsxMzEsOSBAQCBQYXNzT3duQXJyYXlQ
dHI8TGVuZ3RoPiBuZXdMZW5ndGhBcnJheShjCiAKICAgICBpbnQgaSA9IDA7CiAgICAgdW5zaWdu
ZWQgcG9zID0gMDsKLSAgICBzaXplX3QgcG9zMjsKKyAgICB1aW50MzJfdCBwb3MyOwogCi0gICAg
d2hpbGUgKChwb3MyID0gc3RyLT5maW5kKCcsJywgcG9zKSkgIT0gbm90Rm91bmQpIHsKKyAgICB3
aGlsZSAoKHBvczIgPSBzdHItPmZpbmQoJywnLCBwb3MpKSAhPSBTdHJpbmc6Om5vdEZvdW5kKSB7
CiAgICAgICAgIHJbaSsrXSA9IHBhcnNlTGVuZ3RoKHN0ci0+Y2hhcmFjdGVycygpICsgcG9zLCBw
b3MyIC0gcG9zKTsKICAgICAgICAgcG9zID0gcG9zMisxOwogICAgIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL0xpbmtIYXNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9MaW5rSGFzaC5jcHAJKHJldmlzaW9uIDg1ODYwKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vTGlua0hhc2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw0MCArMzEsNDAg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgaW5saW5lIHNpemVfdCBmaW5kU2xh
c2hEb3REb3RTbGFzaChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCwgc2l6
ZV90IHBvc2l0aW9uKQorc3RhdGljIGlubGluZSB1aW50MzJfdCBmaW5kU2xhc2hEb3REb3RTbGFz
aChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCwgdWludDMyX3QgcG9zaXRp
b24pCiB7CiAgICAgaWYgKGxlbmd0aCA8IDQpCi0gICAgICAgIHJldHVybiBub3RGb3VuZDsKLSAg
ICBzaXplX3QgbG9vcExpbWl0ID0gbGVuZ3RoIC0gMzsKKyAgICAgICAgcmV0dXJuIFN0cmluZzo6
bm90Rm91bmQ7CisgICAgdWludDMyX3QgbG9vcExpbWl0ID0gbGVuZ3RoIC0gMzsKICAgICBmb3Ig
KHNpemVfdCBpID0gcG9zaXRpb247IGkgPCBsb29wTGltaXQ7ICsraSkgewogICAgICAgICBpZiAo
Y2hhcmFjdGVyc1tpXSA9PSAnLycgJiYgY2hhcmFjdGVyc1tpICsgMV0gPT0gJy4nICYmIGNoYXJh
Y3RlcnNbaSArIDJdID09ICcuJyAmJiBjaGFyYWN0ZXJzW2kgKyAzXSA9PSAnLycpCiAgICAgICAg
ICAgICByZXR1cm4gaTsKICAgICB9Ci0gICAgcmV0dXJuIG5vdEZvdW5kOworICAgIHJldHVybiBT
dHJpbmc6Om5vdEZvdW5kOwogfQogCi1zdGF0aWMgaW5saW5lIHNpemVfdCBmaW5kU2xhc2hTbGFz
aChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCwgc2l6ZV90IHBvc2l0aW9u
KQorc3RhdGljIGlubGluZSB1aW50MzJfdCBmaW5kU2xhc2hTbGFzaChjb25zdCBVQ2hhciogY2hh
cmFjdGVycywgc2l6ZV90IGxlbmd0aCwgdWludDMyX3QgcG9zaXRpb24pCiB7CiAgICAgaWYgKGxl
bmd0aCA8IDIpCi0gICAgICAgIHJldHVybiBub3RGb3VuZDsKLSAgICBzaXplX3QgbG9vcExpbWl0
ID0gbGVuZ3RoIC0gMTsKLSAgICBmb3IgKHNpemVfdCBpID0gcG9zaXRpb247IGkgPCBsb29wTGlt
aXQ7ICsraSkgeworICAgICAgICByZXR1cm4gU3RyaW5nOjpub3RGb3VuZDsKKyAgICB1aW50MzJf
dCBsb29wTGltaXQgPSBsZW5ndGggLSAxOworICAgIGZvciAodWludDMyX3QgaSA9IHBvc2l0aW9u
OyBpIDwgbG9vcExpbWl0OyArK2kpIHsKICAgICAgICAgaWYgKGNoYXJhY3RlcnNbaV0gPT0gJy8n
ICYmIGNoYXJhY3RlcnNbaSArIDFdID09ICcvJykKICAgICAgICAgICAgIHJldHVybiBpOwogICAg
IH0KLSAgICByZXR1cm4gbm90Rm91bmQ7CisgICAgcmV0dXJuIFN0cmluZzo6bm90Rm91bmQ7CiB9
CiAKLXN0YXRpYyBpbmxpbmUgc2l6ZV90IGZpbmRTbGFzaERvdFNsYXNoKGNvbnN0IFVDaGFyKiBj
aGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoLCBzaXplX3QgcG9zaXRpb24pCitzdGF0aWMgaW5saW5l
IHVpbnQzMl90IGZpbmRTbGFzaERvdFNsYXNoKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXpl
X3QgbGVuZ3RoLCB1aW50MzJfdCBwb3NpdGlvbikKIHsKICAgICBpZiAobGVuZ3RoIDwgMykKLSAg
ICAgICAgcmV0dXJuIG5vdEZvdW5kOwotICAgIHNpemVfdCBsb29wTGltaXQgPSBsZW5ndGggLSAy
OwotICAgIGZvciAoc2l6ZV90IGkgPSBwb3NpdGlvbjsgaSA8IGxvb3BMaW1pdDsgKytpKSB7Cisg
ICAgICAgIHJldHVybiBTdHJpbmc6Om5vdEZvdW5kOworICAgIHVpbnQzMl90IGxvb3BMaW1pdCA9
IGxlbmd0aCAtIDI7CisgICAgZm9yICh1aW50MzJfdCBpID0gcG9zaXRpb247IGkgPCBsb29wTGlt
aXQ7ICsraSkgewogICAgICAgICBpZiAoY2hhcmFjdGVyc1tpXSA9PSAnLycgJiYgY2hhcmFjdGVy
c1tpICsgMV0gPT0gJy4nICYmIGNoYXJhY3RlcnNbaSArIDJdID09ICcvJykKICAgICAgICAgICAg
IHJldHVybiBpOwogICAgIH0KLSAgICByZXR1cm4gbm90Rm91bmQ7CisgICAgcmV0dXJuIFN0cmlu
Zzo6bm90Rm91bmQ7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBjb250YWluc0NvbG9uU2xhc2hT
bGFzaChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQpAQCAtMTAwLDY3
ICsxMDAsNjcgQEAgc3RhdGljIGlubGluZSB2b2lkIHNxdWVlemVPdXROdWxsQ2hhcmFjdAogCiBz
dGF0aWMgdm9pZCBjbGVhblNsYXNoRG90RG90U2xhc2hlcyhWZWN0b3I8VUNoYXIsIDUxMj4mIHBh
dGgsIHNpemVfdCBmaXJzdFNsYXNoKQogewotICAgIHNpemVfdCBzbGFzaCA9IGZpcnN0U2xhc2g7
CisgICAgdWludDMyX3Qgc2xhc2ggPSBmaXJzdFNsYXNoOwogICAgIGRvIHsKLSAgICAgICAgc2l6
ZV90IHByZXZpb3VzU2xhc2ggPSBzbGFzaCA/IHJldmVyc2VGaW5kKHBhdGguZGF0YSgpLCBwYXRo
LnNpemUoKSwgJy8nLCBzbGFzaCAtIDEpIDogbm90Rm91bmQ7CisgICAgICAgIHVpbnQzMl90IHBy
ZXZpb3VzU2xhc2ggPSBzbGFzaCA/IHJldmVyc2VGaW5kKHBhdGguZGF0YSgpLCBwYXRoLnNpemUo
KSwgJy8nLCBzbGFzaCAtIDEpIDogU3RyaW5nOjpub3RGb3VuZDsKICAgICAgICAgLy8gRG9uJ3Qg
cmVtb3ZlIHRoZSBob3N0LCBpLmUuIGh0dHA6Ly9mb28ub3JnLy4uL2Zvby5odG1sCi0gICAgICAg
IGlmIChwcmV2aW91c1NsYXNoID09IG5vdEZvdW5kIHx8IChwcmV2aW91c1NsYXNoID4gMyAmJiBw
YXRoW3ByZXZpb3VzU2xhc2ggLSAyXSA9PSAnOicgJiYgcGF0aFtwcmV2aW91c1NsYXNoIC0gMV0g
PT0gJy8nKSkgeworICAgICAgICBpZiAocHJldmlvdXNTbGFzaCA9PSBTdHJpbmc6Om5vdEZvdW5k
IHx8IChwcmV2aW91c1NsYXNoID4gMyAmJiBwYXRoW3ByZXZpb3VzU2xhc2ggLSAyXSA9PSAnOicg
JiYgcGF0aFtwcmV2aW91c1NsYXNoIC0gMV0gPT0gJy8nKSkgewogICAgICAgICAgICAgcGF0aFtz
bGFzaF0gPSAwOwogICAgICAgICAgICAgcGF0aFtzbGFzaCArIDFdID0gMDsKICAgICAgICAgICAg
IHBhdGhbc2xhc2ggKyAyXSA9IDA7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBmb3Ig
KHNpemVfdCBpID0gcHJldmlvdXNTbGFzaDsgaSA8IHNsYXNoICsgMzsgKytpKQorICAgICAgICAg
ICAgZm9yICh1aW50MzJfdCBpID0gcHJldmlvdXNTbGFzaDsgaSA8IHNsYXNoICsgMzsgKytpKQog
ICAgICAgICAgICAgICAgIHBhdGhbaV0gPSAwOwogICAgICAgICB9CiAgICAgICAgIHNsYXNoICs9
IDM7Ci0gICAgfSB3aGlsZSAoKHNsYXNoID0gZmluZFNsYXNoRG90RG90U2xhc2gocGF0aC5kYXRh
KCksIHBhdGguc2l6ZSgpLCBzbGFzaCkpICE9IG5vdEZvdW5kKTsKKyAgICB9IHdoaWxlICgoc2xh
c2ggPSBmaW5kU2xhc2hEb3REb3RTbGFzaChwYXRoLmRhdGEoKSwgcGF0aC5zaXplKCksIHNsYXNo
KSkgIT0gU3RyaW5nOjpub3RGb3VuZCk7CiAgICAgc3F1ZWV6ZU91dE51bGxDaGFyYWN0ZXJzKHBh
dGgpOwogfQogCiBzdGF0aWMgdm9pZCBtZXJnZURvdWJsZVNsYXNoZXMoVmVjdG9yPFVDaGFyLCA1
MTI+JiBwYXRoLCBzaXplX3QgZmlyc3RTbGFzaCkKIHsKLSAgICBzaXplX3QgcmVmUG9zID0gZmlu
ZChwYXRoLmRhdGEoKSwgcGF0aC5zaXplKCksICcjJyk7Ci0gICAgaWYgKCFyZWZQb3MgfHwgcmVm
UG9zID09IG5vdEZvdW5kKQorICAgIHVpbnQzMl90IHJlZlBvcyA9IGZpbmQocGF0aC5kYXRhKCks
IHBhdGguc2l6ZSgpLCAnIycpOworICAgIGlmICghcmVmUG9zIHx8IHJlZlBvcyA9PSBTdHJpbmc6
Om5vdEZvdW5kKQogICAgICAgICByZWZQb3MgPSBwYXRoLnNpemUoKTsKIAotICAgIHNpemVfdCBz
bGFzaCA9IGZpcnN0U2xhc2g7CisgICAgdWludDMyX3Qgc2xhc2ggPSBmaXJzdFNsYXNoOwogICAg
IHdoaWxlIChzbGFzaCA8IHJlZlBvcykgewogICAgICAgICBpZiAoIXNsYXNoIHx8IHBhdGhbc2xh
c2ggLSAxXSAhPSAnOicpCiAgICAgICAgICAgICBwYXRoW3NsYXNoKytdID0gMDsKICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgc2xhc2ggKz0gMjsKLSAgICAgICAgaWYgKChzbGFzaCA9IGZpbmRT
bGFzaFNsYXNoKHBhdGguZGF0YSgpLCBwYXRoLnNpemUoKSwgc2xhc2gpKSA9PSBub3RGb3VuZCkK
KyAgICAgICAgaWYgKChzbGFzaCA9IGZpbmRTbGFzaFNsYXNoKHBhdGguZGF0YSgpLCBwYXRoLnNp
emUoKSwgc2xhc2gpKSA9PSBTdHJpbmc6Om5vdEZvdW5kKQogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgfQogICAgIHNxdWVlemVPdXROdWxsQ2hhcmFjdGVycyhwYXRoKTsKIH0KIAotc3RhdGljIHZv
aWQgY2xlYW5TbGFzaERvdFNsYXNoZXMoVmVjdG9yPFVDaGFyLCA1MTI+JiBwYXRoLCBzaXplX3Qg
Zmlyc3RTbGFzaCkKK3N0YXRpYyB2b2lkIGNsZWFuU2xhc2hEb3RTbGFzaGVzKFZlY3RvcjxVQ2hh
ciwgNTEyPiYgcGF0aCwgdWludDMyX3QgZmlyc3RTbGFzaCkKIHsKLSAgICBzaXplX3Qgc2xhc2gg
PSBmaXJzdFNsYXNoOworICAgIHVpbnQzMl90IHNsYXNoID0gZmlyc3RTbGFzaDsKICAgICBkbyB7
CiAgICAgICAgIHBhdGhbc2xhc2hdID0gMDsKICAgICAgICAgcGF0aFtzbGFzaCArIDFdID0gMDsK
ICAgICAgICAgc2xhc2ggKz0gMjsKLSAgICB9IHdoaWxlICgoc2xhc2ggPSBmaW5kU2xhc2hEb3RT
bGFzaChwYXRoLmRhdGEoKSwgcGF0aC5zaXplKCksIHNsYXNoKSkgIT0gbm90Rm91bmQpOworICAg
IH0gd2hpbGUgKChzbGFzaCA9IGZpbmRTbGFzaERvdFNsYXNoKHBhdGguZGF0YSgpLCBwYXRoLnNp
emUoKSwgc2xhc2gpKSAhPSBTdHJpbmc6Om5vdEZvdW5kKTsKICAgICBzcXVlZXplT3V0TnVsbENo
YXJhY3RlcnMocGF0aCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBjbGVhblBhdGgoVmVjdG9y
PFVDaGFyLCA1MTI+JiBwYXRoKQogewogICAgIC8vIEZJWE1FOiBTaG91bGQgbm90IGRvIHRoaXMg
aW4gdGhlIHF1ZXJ5IG9yIGFuY2hvciBwYXJ0IG9mIHRoZSBVUkwuCi0gICAgc2l6ZV90IGZpcnN0
U2xhc2ggPSBmaW5kU2xhc2hEb3REb3RTbGFzaChwYXRoLmRhdGEoKSwgcGF0aC5zaXplKCksIDAp
OwotICAgIGlmIChmaXJzdFNsYXNoICE9IG5vdEZvdW5kKQorICAgIHVpbnQzMl90IGZpcnN0U2xh
c2ggPSBmaW5kU2xhc2hEb3REb3RTbGFzaChwYXRoLmRhdGEoKSwgcGF0aC5zaXplKCksIDApOwor
ICAgIGlmIChmaXJzdFNsYXNoICE9IFN0cmluZzo6bm90Rm91bmQpCiAgICAgICAgIGNsZWFuU2xh
c2hEb3REb3RTbGFzaGVzKHBhdGgsIGZpcnN0U2xhc2gpOwogCiAgICAgLy8gRklYTUU6IFNob3Vs
ZCBub3QgZG8gdGhpcyBpbiB0aGUgcXVlcnkgcGFydC4KICAgICBmaXJzdFNsYXNoID0gZmluZFNs
YXNoU2xhc2gocGF0aC5kYXRhKCksIHBhdGguc2l6ZSgpLCAwKTsKLSAgICBpZiAoZmlyc3RTbGFz
aCAhPSBub3RGb3VuZCkKKyAgICBpZiAoZmlyc3RTbGFzaCAhPSBTdHJpbmc6Om5vdEZvdW5kKQog
ICAgICAgICBtZXJnZURvdWJsZVNsYXNoZXMocGF0aCwgZmlyc3RTbGFzaCk7CiAKICAgICAvLyBG
SVhNRTogU2hvdWxkIG5vdCBkbyB0aGlzIGluIHRoZSBxdWVyeSBvciBhbmNob3IgcGFydC4KICAg
ICBmaXJzdFNsYXNoID0gZmluZFNsYXNoRG90U2xhc2gocGF0aC5kYXRhKCksIHBhdGguc2l6ZSgp
LCAwKTsKLSAgICBpZiAoZmlyc3RTbGFzaCAhPSBub3RGb3VuZCkKKyAgICBpZiAoZmlyc3RTbGFz
aCAhPSBTdHJpbmc6Om5vdEZvdW5kKQogICAgICAgICBjbGVhblNsYXNoRG90U2xhc2hlcyhwYXRo
LCBmaXJzdFNsYXNoKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTUlNRVR5
cGVSZWdpc3RyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTUlN
RVR5cGVSZWdpc3RyeS5jcHAJKHJldmlzaW9uIDg1ODYwKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vTUlNRVR5cGVSZWdpc3RyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzMiw4ICs0MzIs
OCBAQCBzdGF0aWMgdm9pZCBpbml0aWFsaXplTUlNRVR5cGVSZWdpc3RyeSgpCiAKIFN0cmluZyBN
SU1FVHlwZVJlZ2lzdHJ5OjpnZXRNSU1FVHlwZUZvclBhdGgoY29uc3QgU3RyaW5nJiBwYXRoKQog
ewotICAgIHNpemVfdCBwb3MgPSBwYXRoLnJldmVyc2VGaW5kKCcuJyk7Ci0gICAgaWYgKHBvcyAh
PSBub3RGb3VuZCkgeworICAgIHVpbnQzMl90IHBvcyA9IHBhdGgucmV2ZXJzZUZpbmQoJy4nKTsK
KyAgICBpZiAocG9zICE9IFN0cmluZzo6bm90Rm91bmQpIHsKICAgICAgICAgU3RyaW5nIGV4dGVu
c2lvbiA9IHBhdGguc3Vic3RyaW5nKHBvcyArIDEpOwogICAgICAgICBTdHJpbmcgcmVzdWx0ID0g
Z2V0TUlNRVR5cGVGb3JFeHRlbnNpb24oZXh0ZW5zaW9uKTsKICAgICAgICAgaWYgKHJlc3VsdC5s
ZW5ndGgoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxh
eWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9N
ZWRpYVBsYXllci5jcHAJKHJldmlzaW9uIDg1ODYwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzMsOCArMzMz
LDggQEAgdm9pZCBNZWRpYVBsYXllcjo6bG9hZChjb25zdCBTdHJpbmcmIHVybAogICAgICAgICBp
ZiAocHJvdG9jb2xJcyh1cmwsICJkYXRhIikpCiAgICAgICAgICAgICB0eXBlID0gbWltZVR5cGVG
cm9tRGF0YVVSTCh1cmwpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHNpemVfdCBwb3Mg
PSB1cmwucmV2ZXJzZUZpbmQoJy4nKTsKLSAgICAgICAgICAgIGlmIChwb3MgIT0gbm90Rm91bmQp
IHsKKyAgICAgICAgICAgIHVpbnQzMl90IHBvcyA9IHVybC5yZXZlcnNlRmluZCgnLicpOworICAg
ICAgICAgICAgaWYgKHBvcyAhPSBTdHJpbmc6Om5vdEZvdW5kKSB7CiAgICAgICAgICAgICAgICAg
U3RyaW5nIGV4dGVuc2lvbiA9IHVybC5zdWJzdHJpbmcocG9zICsgMSk7CiAgICAgICAgICAgICAg
ICAgU3RyaW5nIG1lZGlhVHlwZSA9IE1JTUVUeXBlUmVnaXN0cnk6OmdldE1lZGlhTUlNRVR5cGVG
b3JFeHRlbnNpb24oZXh0ZW5zaW9uKTsKICAgICAgICAgICAgICAgICBpZiAoIW1lZGlhVHlwZS5p
c0VtcHR5KCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TVkdHbHlw
aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU1ZH
R2x5cGguY3BwCShyZXZpc2lvbiA4NTg2MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1NWR0dseXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYyLDggKzE2Miw4IEBAIGJv
b2wgaXNDb21wYXRpYmxlR2x5cGgoY29uc3QgU1ZHR2x5cGgmIGkKICAgICAgICAgLy8gU3BsaXQg
c3ViY29kZSBmcm9tIGxhbmd1YWdlLCBpZiBleGlzdGFudC4KICAgICAgICAgU3RyaW5nIGxhbmd1
YWdlUHJlZml4OwogCi0gICAgICAgIHNpemVfdCBzdWJDb2RlU2VwYXJhdG9yID0gbGFuZ3VhZ2Uu
ZmluZCgnLScpOwotICAgICAgICBpZiAoc3ViQ29kZVNlcGFyYXRvciAhPSBub3RGb3VuZCkKKyAg
ICAgICAgdWludDMyX3Qgc3ViQ29kZVNlcGFyYXRvciA9IGxhbmd1YWdlLmZpbmQoJy0nKTsKKyAg
ICAgICAgaWYgKHN1YkNvZGVTZXBhcmF0b3IgIT0gU3RyaW5nOjpub3RGb3VuZCkKICAgICAgICAg
ICAgIGxhbmd1YWdlUHJlZml4ID0gbGFuZ3VhZ2UubGVmdChzdWJDb2RlU2VwYXJhdG9yKTsKIAog
ICAgICAgICBWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBpZGVudGlmaWVyLmxh
bmd1YWdlcy5iZWdpbigpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0RyYWdJ
bWFnZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvRHJh
Z0ltYWdlTWFjLm1tCShyZXZpc2lvbiA4NTg2MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21hYy9EcmFnSW1hZ2VNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTk0LDkgKzk0LDkgQEAgUmV0
YWluUHRyPE5TSW1hZ2U+IGNyZWF0ZURyYWdJbWFnZUljb25GbwogewogICAgIGNvbnN0IFN0cmlu
ZyYgZmlsZW5hbWUgPSBpbWFnZS0+cmVzcG9uc2UoKS5zdWdnZXN0ZWRGaWxlbmFtZSgpOwogICAg
IE5TU3RyaW5nICpleHRlbnNpb24gPSBuaWw7Ci0gICAgc2l6ZV90IGRvdEluZGV4ID0gZmlsZW5h
bWUucmV2ZXJzZUZpbmQoJy4nKTsKKyAgICB1aW50MzJfdCBkb3RJbmRleCA9IGZpbGVuYW1lLnJl
dmVyc2VGaW5kKCcuJyk7CiAgICAgCi0gICAgaWYgKGRvdEluZGV4ICE9IG5vdEZvdW5kICYmIGRv
dEluZGV4IDwgKGZpbGVuYW1lLmxlbmd0aCgpIC0gMSkpIC8vIHJlcXVpcmUgdGhhdCBhIC4gZXhp
c3RzIGFmdGVyIHRoZSBmaXJzdCBjaGFyYWN0ZXIgYW5kIGJlZm9yZSB0aGUgbGFzdAorICAgIGlm
IChkb3RJbmRleCAhPSBTdHJpbmc6Om5vdEZvdW5kICYmIGRvdEluZGV4IDwgKGZpbGVuYW1lLmxl
bmd0aCgpIC0gMSkpIC8vIHJlcXVpcmUgdGhhdCBhIC4gZXhpc3RzIGFmdGVyIHRoZSBmaXJzdCBj
aGFyYWN0ZXIgYW5kIGJlZm9yZSB0aGUgbGFzdAogICAgICAgICBleHRlbnNpb24gPSBmaWxlbmFt
ZS5zdWJzdHJpbmcoZG90SW5kZXggKyAxKTsKICAgICBlbHNlIHsKICAgICAgICAgLy8gSXQgbWln
aHQgYmUgd29ydGggZG9pbmcgYSBmdXJ0aGVyIGxvb2t1cCB0byBwdWxsIHRoZSBleHRlbnNpb24g
ZnJvbSB0aGUgTUlNRSB0eXBlLgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9DcmVkZW50aWFsU3RvcmFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9DcmVkZW50aWFsU3RvcmFnZS5jcHAJKHJldmlzaW9uIDg1ODYwKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9DcmVkZW50aWFsU3RvcmFnZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTc1LDggKzc1LDggQEAgc3RhdGljIFN0cmluZyBwcm90ZWN0aW9uU3Bh
Y2VNYXBLZXlGcm9tVQogICAgIHVuc2lnbmVkIGRpcmVjdG9yeVVSTFBhdGhTdGFydCA9IHVybC5w
YXRoU3RhcnQoKTsKICAgICBBU1NFUlQoZGlyZWN0b3J5VVJMW2RpcmVjdG9yeVVSTFBhdGhTdGFy
dF0gPT0gJy8nKTsKICAgICBpZiAoZGlyZWN0b3J5VVJMLmxlbmd0aCgpID4gZGlyZWN0b3J5VVJM
UGF0aFN0YXJ0ICsgMSkgewotICAgICAgICBzaXplX3QgaW5kZXggPSBkaXJlY3RvcnlVUkwucmV2
ZXJzZUZpbmQoJy8nKTsKLSAgICAgICAgQVNTRVJUKGluZGV4ICE9IG5vdEZvdW5kKTsKKyAgICAg
ICAgdWludDMyX3QgaW5kZXggPSBkaXJlY3RvcnlVUkwucmV2ZXJzZUZpbmQoJy8nKTsKKyAgICAg
ICAgQVNTRVJUKGluZGV4ICE9IFN0cmluZzo6bm90Rm91bmQpOwogICAgICAgICBkaXJlY3RvcnlV
UkwgPSBkaXJlY3RvcnlVUkwuc3Vic3RyaW5nKDAsIChpbmRleCAhPSBkaXJlY3RvcnlVUkxQYXRo
U3RhcnQpID8gaW5kZXggOiBkaXJlY3RvcnlVUkxQYXRoU3RhcnQgKyAxKTsKICAgICB9CiAKQEAg
LTEzMSw4ICsxMzEsOCBAQCBzdGF0aWMgUGF0aFRvRGVmYXVsdFByb3RlY3Rpb25TcGFjZU1hcDo6
CiAgICAgICAgIGlmIChkaXJlY3RvcnlVUkwubGVuZ3RoKCkgPT0gZGlyZWN0b3J5VVJMUGF0aFN0
YXJ0ICsgMSkgIC8vIHBhdGggaXMgIi8iIGFscmVhZHksIGNhbm5vdCBzaG9ydGVuIGl0IGFueSBt
b3JlCiAgICAgICAgICAgICByZXR1cm4gbWFwLmVuZCgpOwogCi0gICAgICAgIHNpemVfdCBpbmRl
eCA9IGRpcmVjdG9yeVVSTC5yZXZlcnNlRmluZCgnLycsIGRpcmVjdG9yeVVSTC5sZW5ndGgoKSAt
IDIpOwotICAgICAgICBBU1NFUlQoaW5kZXggIT0gbm90Rm91bmQpOworICAgICAgICB1aW50MzJf
dCBpbmRleCA9IGRpcmVjdG9yeVVSTC5yZXZlcnNlRmluZCgnLycsIGRpcmVjdG9yeVVSTC5sZW5n
dGgoKSAtIDIpOworICAgICAgICBBU1NFUlQoaW5kZXggIT0gU3RyaW5nOjpub3RGb3VuZCk7CiAg
ICAgICAgIGRpcmVjdG9yeVVSTCA9IGRpcmVjdG9yeVVSTC5zdWJzdHJpbmcoMCwgKGluZGV4ID09
IGRpcmVjdG9yeVVSTFBhdGhTdGFydCkgPyBpbmRleCArIDEgOiBpbmRleCk7CiAgICAgICAgIEFT
U0VSVChkaXJlY3RvcnlVUkwubGVuZ3RoKCkgPiBkaXJlY3RvcnlVUkxQYXRoU3RhcnQpOwogICAg
ICAgICBBU1NFUlQoZGlyZWN0b3J5VVJMLmxlbmd0aCgpID09IGRpcmVjdG9yeVVSTFBhdGhTdGFy
dCArIDEgfHwgZGlyZWN0b3J5VVJMW2RpcmVjdG9yeVVSTC5sZW5ndGgoKSAtIDFdICE9ICcvJyk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0hUVFBQYXJzZXJzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0hUVFBQYXJzZXJz
LmNwcAkocmV2aXNpb24gODU4NjApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L0hUVFBQYXJzZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTczLDggKzE3Myw4IEBAIFN0cmlu
ZyBmaWxlbmFtZUZyb21IVFRQQ29udGVudERpc3Bvc2l0aW8KIAogICAgIHVuc2lnbmVkIGxlbmd0
aCA9IGtleVZhbHVlUGFpcnMuc2l6ZSgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBs
ZW5ndGg7IGkrKykgewotICAgICAgICBzaXplX3QgdmFsdWVTdGFydFBvcyA9IGtleVZhbHVlUGFp
cnNbaV0uZmluZCgnPScpOwotICAgICAgICBpZiAodmFsdWVTdGFydFBvcyA9PSBub3RGb3VuZCkK
KyAgICAgICAgdWludDMyX3QgdmFsdWVTdGFydFBvcyA9IGtleVZhbHVlUGFpcnNbaV0uZmluZCgn
PScpOworICAgICAgICBpZiAodmFsdWVTdGFydFBvcyA9PSBTdHJpbmc6Om5vdEZvdW5kKQogICAg
ICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgU3RyaW5nIGtleSA9IGtleVZhbHVlUGFpcnNb
aV0ubGVmdCh2YWx1ZVN0YXJ0UG9zKS5zdHJpcFdoaXRlU3BhY2UoKTsKQEAgLTI0MSwxMiArMjQx
LDEyIEBAIHZvaWQgZmluZENoYXJzZXRJbk1lZGlhVHlwZShjb25zdCBTdHJpbmcKICAgICBjaGFy
c2V0UG9zID0gc3RhcnQ7CiAgICAgY2hhcnNldExlbiA9IDA7CiAKLSAgICBzaXplX3QgcG9zID0g
c3RhcnQ7CisgICAgdWludDMyX3QgcG9zID0gc3RhcnQ7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0g
bWVkaWFUeXBlLmxlbmd0aCgpOwogICAgIAogICAgIHdoaWxlIChwb3MgPCBsZW5ndGgpIHsKICAg
ICAgICAgcG9zID0gbWVkaWFUeXBlLmZpbmQoImNoYXJzZXQiLCBwb3MsIGZhbHNlKTsKLSAgICAg
ICAgaWYgKHBvcyA9PSBub3RGb3VuZCB8fCBwb3MgPT0gMCkgeworICAgICAgICBpZiAocG9zID09
IFN0cmluZzo6bm90Rm91bmQgfHwgIXBvcykgewogICAgICAgICAgICAgY2hhcnNldExlbiA9IDA7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXNwb25zZUJhc2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXNwb25zZUJhc2UuY3BwCShy
ZXZpc2lvbiA4NTg2MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3Vy
Y2VSZXNwb25zZUJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NjgsOCArNDY4LDggQEAgYm9v
bCBSZXNvdXJjZVJlc3BvbnNlQmFzZTo6aXNBdHRhY2htZW50KAogCiAgICAgREVGSU5FX1NUQVRJ
Q19MT0NBTChjb25zdCBBdG9taWNTdHJpbmcsIGhlYWRlck5hbWUsICgiY29udGVudC1kaXNwb3Np
dGlvbiIpKTsKICAgICBTdHJpbmcgdmFsdWUgPSBtX2h0dHBIZWFkZXJGaWVsZHMuZ2V0KGhlYWRl
ck5hbWUpOwotICAgIHNpemVfdCBsb2MgPSB2YWx1ZS5maW5kKCc7Jyk7Ci0gICAgaWYgKGxvYyAh
PSBub3RGb3VuZCkKKyAgICB1aW50MzJfdCBsb2MgPSB2YWx1ZS5maW5kKCc7Jyk7CisgICAgaWYg
KGxvYyAhPSBTdHJpbmc6Om5vdEZvdW5kKQogICAgICAgICB2YWx1ZSA9IHZhbHVlLmxlZnQobG9j
KTsKICAgICB2YWx1ZSA9IHZhbHVlLnN0cmlwV2hpdGVTcGFjZSgpOwogICAgIERFRklORV9TVEFU
SUNfTE9DQUwoY29uc3QgQXRvbWljU3RyaW5nLCBhdHRhY2htZW50U3RyaW5nLCAoImF0dGFjaG1l
bnQiKSk7CkBAIC02MzQsOSArNjM0LDkgQEAgc3RhdGljIHZvaWQgcGFyc2VDYWNoZUhlYWRlcihj
b25zdCBTdHJpbgogICAgIGNvbnN0IFN0cmluZyBzYWZlSGVhZGVyID0gaGVhZGVyLnJlbW92ZUNo
YXJhY3RlcnMoaXNDb250cm9sQ2hhcmFjdGVyKTsKICAgICB1bnNpZ25lZCBtYXggPSBzYWZlSGVh
ZGVyLmxlbmd0aCgpOwogICAgIGZvciAodW5zaWduZWQgcG9zID0gMDsgcG9zIDwgbWF4OyAvKiBw
b3MgaW5jcmVtZW50ZWQgaW4gbG9vcCAqLykgewotICAgICAgICBzaXplX3QgbmV4dENvbW1hUG9z
aXRpb24gPSBzYWZlSGVhZGVyLmZpbmQoJywnLCBwb3MpOwotICAgICAgICBzaXplX3QgbmV4dEVx
dWFsU2lnblBvc2l0aW9uID0gc2FmZUhlYWRlci5maW5kKCc9JywgcG9zKTsKLSAgICAgICAgaWYg
KG5leHRFcXVhbFNpZ25Qb3NpdGlvbiAhPSBub3RGb3VuZCAmJiAobmV4dEVxdWFsU2lnblBvc2l0
aW9uIDwgbmV4dENvbW1hUG9zaXRpb24gfHwgbmV4dENvbW1hUG9zaXRpb24gPT0gbm90Rm91bmQp
KSB7CisgICAgICAgIHVpbnQzMl90IG5leHRDb21tYVBvc2l0aW9uID0gc2FmZUhlYWRlci5maW5k
KCcsJywgcG9zKTsKKyAgICAgICAgdWludDMyX3QgbmV4dEVxdWFsU2lnblBvc2l0aW9uID0gc2Fm
ZUhlYWRlci5maW5kKCc9JywgcG9zKTsKKyAgICAgICAgaWYgKG5leHRFcXVhbFNpZ25Qb3NpdGlv
biAhPSBTdHJpbmc6Om5vdEZvdW5kICYmIChuZXh0RXF1YWxTaWduUG9zaXRpb24gPCBuZXh0Q29t
bWFQb3NpdGlvbiB8fCBuZXh0Q29tbWFQb3NpdGlvbiA9PSBTdHJpbmc6Om5vdEZvdW5kKSkgewog
ICAgICAgICAgICAgLy8gR2V0IGRpcmVjdGl2ZSBuYW1lLCBwYXJzZSByaWdodCBoYW5kIHNpZGUg
b2YgZXF1YWwgc2lnbiwgdGhlbiBhZGQgdG8gbWFwCiAgICAgICAgICAgICBTdHJpbmcgZGlyZWN0
aXZlID0gdHJpbVRvTmV4dFNlcGFyYXRvcihzYWZlSGVhZGVyLnN1YnN0cmluZyhwb3MsIG5leHRF
cXVhbFNpZ25Qb3NpdGlvbiAtIHBvcykuc3RyaXBXaGl0ZVNwYWNlKCkpOwogICAgICAgICAgICAg
cG9zICs9IG5leHRFcXVhbFNpZ25Qb3NpdGlvbiAtIHBvcyArIDE7CkBAIC02NDQsMTQgKzY0NCwx
NCBAQCBzdGF0aWMgdm9pZCBwYXJzZUNhY2hlSGVhZGVyKGNvbnN0IFN0cmluCiAgICAgICAgICAg
ICBTdHJpbmcgdmFsdWUgPSBzYWZlSGVhZGVyLnN1YnN0cmluZyhwb3MsIG1heCAtIHBvcykuc3Ry
aXBXaGl0ZVNwYWNlKCk7CiAgICAgICAgICAgICBpZiAodmFsdWVbMF0gPT0gJyInKSB7CiAgICAg
ICAgICAgICAgICAgLy8gVGhlIHZhbHVlIGlzIGEgcXVvdGVkIHN0cmluZwotICAgICAgICAgICAg
ICAgIHNpemVfdCBuZXh0RG91YmxlUXVvdGVQb3NpdGlvbiA9IHZhbHVlLmZpbmQoJyInLCAxKTsK
LSAgICAgICAgICAgICAgICBpZiAobmV4dERvdWJsZVF1b3RlUG9zaXRpb24gIT0gbm90Rm91bmQp
IHsKKyAgICAgICAgICAgICAgICB1aW50MzJfdCBuZXh0RG91YmxlUXVvdGVQb3NpdGlvbiA9IHZh
bHVlLmZpbmQoJyInLCAxKTsKKyAgICAgICAgICAgICAgICBpZiAobmV4dERvdWJsZVF1b3RlUG9z
aXRpb24gIT0gU3RyaW5nOjpub3RGb3VuZCkgewogICAgICAgICAgICAgICAgICAgICAvLyBTdG9y
ZSB0aGUgdmFsdWUgYXMgYSBxdW90ZWQgc3RyaW5nIHdpdGhvdXQgcXVvdGVzCiAgICAgICAgICAg
ICAgICAgICAgIHJlc3VsdC5hcHBlbmQocGFpcjxTdHJpbmcsIFN0cmluZz4oZGlyZWN0aXZlLCB2
YWx1ZS5zdWJzdHJpbmcoMSwgbmV4dERvdWJsZVF1b3RlUG9zaXRpb24gLSAxKS5zdHJpcFdoaXRl
U3BhY2UoKSkpOwogICAgICAgICAgICAgICAgICAgICBwb3MgKz0gKHNhZmVIZWFkZXIuZmluZCgn
IicsIHBvcykgLSBwb3MpICsgbmV4dERvdWJsZVF1b3RlUG9zaXRpb24gKyAxOwogICAgICAgICAg
ICAgICAgICAgICAvLyBNb3ZlIHBhc3QgbmV4dCBjb21tYSwgaWYgdGhlcmUgaXMgb25lCi0gICAg
ICAgICAgICAgICAgICAgIHNpemVfdCBuZXh0Q29tbWFQb3NpdGlvbjIgPSBzYWZlSGVhZGVyLmZp
bmQoJywnLCBwb3MpOwotICAgICAgICAgICAgICAgICAgICBpZiAobmV4dENvbW1hUG9zaXRpb24y
ICE9IG5vdEZvdW5kKQorICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBuZXh0Q29tbWFQb3Np
dGlvbjIgPSBzYWZlSGVhZGVyLmZpbmQoJywnLCBwb3MpOworICAgICAgICAgICAgICAgICAgICBp
ZiAobmV4dENvbW1hUG9zaXRpb24yICE9IFN0cmluZzo6bm90Rm91bmQpCiAgICAgICAgICAgICAg
ICAgICAgICAgICBwb3MgKz0gbmV4dENvbW1hUG9zaXRpb24yIC0gcG9zICsgMTsKICAgICAgICAg
ICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBQYXJz
ZSBlcnJvciBpZiB0aGVyZSBpcyBhbnl0aGluZyBsZWZ0IHdpdGggbm8gY29tbWEKQEAgLTY2Miw4
ICs2NjIsOCBAQCBzdGF0aWMgdm9pZCBwYXJzZUNhY2hlSGVhZGVyKGNvbnN0IFN0cmluCiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAvLyBU
aGUgdmFsdWUgaXMgYSB0b2tlbiB1bnRpbCB0aGUgbmV4dCBjb21tYQotICAgICAgICAgICAgICAg
IHNpemVfdCBuZXh0Q29tbWFQb3NpdGlvbjIgPSB2YWx1ZS5maW5kKCcsJywgMCk7Ci0gICAgICAg
ICAgICAgICAgaWYgKG5leHRDb21tYVBvc2l0aW9uMiAhPSBub3RGb3VuZCkgeworICAgICAgICAg
ICAgICAgIHVpbnQzMl90IG5leHRDb21tYVBvc2l0aW9uMiA9IHZhbHVlLmZpbmQoJywnLCAwKTsK
KyAgICAgICAgICAgICAgICBpZiAobmV4dENvbW1hUG9zaXRpb24yICE9IFN0cmluZzo6bm90Rm91
bmQpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHZhbHVlIGlzIGRlbGltaXRlZCBieSB0
aGUgbmV4dCBjb21tYQogICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHBhaXI8U3Ry
aW5nLCBTdHJpbmc+KGRpcmVjdGl2ZSwgdHJpbVRvTmV4dFNlcGFyYXRvcih2YWx1ZS5zdWJzdHJp
bmcoMCwgbmV4dENvbW1hUG9zaXRpb24yKS5zdHJpcFdoaXRlU3BhY2UoKSkpKTsKICAgICAgICAg
ICAgICAgICAgICAgcG9zICs9IChzYWZlSGVhZGVyLmZpbmQoJywnLCBwb3MpIC0gcG9zKSArIDE7
CkBAIC02NzMsNyArNjczLDcgQEAgc3RhdGljIHZvaWQgcGFyc2VDYWNoZUhlYWRlcihjb25zdCBT
dHJpbgogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKG5leHRDb21tYVBvc2l0aW9uICE9IG5vdEZv
dW5kICYmIChuZXh0Q29tbWFQb3NpdGlvbiA8IG5leHRFcXVhbFNpZ25Qb3NpdGlvbiB8fCBuZXh0
RXF1YWxTaWduUG9zaXRpb24gPT0gbm90Rm91bmQpKSB7CisgICAgICAgIH0gZWxzZSBpZiAobmV4
dENvbW1hUG9zaXRpb24gIT0gU3RyaW5nOjpub3RGb3VuZCAmJiAobmV4dENvbW1hUG9zaXRpb24g
PCBuZXh0RXF1YWxTaWduUG9zaXRpb24gfHwgbmV4dEVxdWFsU2lnblBvc2l0aW9uID09IFN0cmlu
Zzo6bm90Rm91bmQpKSB7CiAgICAgICAgICAgICAvLyBBZGQgZGlyZWN0aXZlIHRvIG1hcCB3aXRo
IGVtcHR5IHN0cmluZyBhcyB2YWx1ZQogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChwYWlyPFN0
cmluZywgU3RyaW5nPih0cmltVG9OZXh0U2VwYXJhdG9yKHNhZmVIZWFkZXIuc3Vic3RyaW5nKHBv
cywgbmV4dENvbW1hUG9zaXRpb24gLSBwb3MpLnN0cmlwV2hpdGVTcGFjZSgpKSwgIiIpKTsKICAg
ICAgICAgICAgIHBvcyArPSBuZXh0Q29tbWFQb3NpdGlvbiAtIHBvcyArIDE7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS93aW5jZS9GaWxlU3lzdGVtV2luQ0UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbmNlL0ZpbGVTeXN0ZW1XaW5DRS5jcHAJKHJl
dmlzaW9uIDg1ODYwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luY2UvRmlsZVN5c3Rl
bVdpbkNFLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsMTMgKzQxLDEzIEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogc3RhdGljIHNpemVfdCByZXZlcnNlRmluZFBhdGhTZXBhcmF0b3IoY29uc3Qg
U3RyaW5nJiBwYXRoLCB1bnNpZ25lZCBzdGFydCA9IFVJTlRfTUFYKQogewotICAgIHNpemVfdCBw
b3NpdGlvblNsYXNoID0gcGF0aC5yZXZlcnNlRmluZCgnLycsIHN0YXJ0KTsKLSAgICBzaXplX3Qg
cG9zaXRpb25CYWNrc2xhc2ggPSBwYXRoLnJldmVyc2VGaW5kKCdcXCcsIHN0YXJ0KTsKKyAgICB1
aW50MzJfdCBwb3NpdGlvblNsYXNoID0gcGF0aC5yZXZlcnNlRmluZCgnLycsIHN0YXJ0KTsKKyAg
ICB1aW50MzJfdCBwb3NpdGlvbkJhY2tzbGFzaCA9IHBhdGgucmV2ZXJzZUZpbmQoJ1xcJywgc3Rh
cnQpOwogCi0gICAgaWYgKHBvc2l0aW9uU2xhc2ggPT0gbm90Rm91bmQpCisgICAgaWYgKHBvc2l0
aW9uU2xhc2ggPT0gU3RyaW5nOjpub3RGb3VuZCkKICAgICAgICAgcmV0dXJuIHBvc2l0aW9uQmFj
a3NsYXNoOwogCi0gICAgaWYgKHBvc2l0aW9uQmFja3NsYXNoID09IG5vdEZvdW5kKQorICAgIGlm
IChwb3NpdGlvbkJhY2tzbGFzaCA9PSBTdHJpbmc6Om5vdEZvdW5kKQogICAgICAgICByZXR1cm4g
cG9zaXRpb25TbGFzaDsKIAogICAgIHJldHVybiBzdGQ6Om1heChwb3NpdGlvblNsYXNoLCBwb3Np
dGlvbkJhY2tzbGFzaCk7CkBAIC0xNDYsMTQgKzE0NiwxNCBAQCBDU3RyaW5nIGZpbGVTeXN0ZW1S
ZXByZXNlbnRhdGlvbihjb25zdCBTCiAKIGJvb2wgbWFrZUFsbERpcmVjdG9yaWVzKGNvbnN0IFN0
cmluZyYgcGF0aCkKIHsKLSAgICBzaXplX3QgbGFzdERpdlBvcyA9IHJldmVyc2VGaW5kUGF0aFNl
cGFyYXRvcihwYXRoKTsKKyAgICB1aW50MzJfdCBsYXN0RGl2UG9zID0gcmV2ZXJzZUZpbmRQYXRo
U2VwYXJhdG9yKHBhdGgpOwogICAgIHVuc2lnbmVkIGVuZFBvcyA9IHBhdGgubGVuZ3RoKCk7CiAg
ICAgaWYgKGxhc3REaXZQb3MgPT0gZW5kUG9zIC0gMSkgewogICAgICAgICAtLWVuZFBvczsKICAg
ICAgICAgbGFzdERpdlBvcyA9IHJldmVyc2VGaW5kUGF0aFNlcGFyYXRvcihwYXRoLCBsYXN0RGl2
UG9zKTsKICAgICB9CiAKLSAgICBpZiAobGFzdERpdlBvcyAhPSBub3RGb3VuZCkgeworICAgIGlm
IChsYXN0RGl2UG9zICE9IFN0cmluZzo6bm90Rm91bmQpIHsKICAgICAgICAgaWYgKCFtYWtlQWxs
RGlyZWN0b3JpZXMocGF0aC5zdWJzdHJpbmcoMCwgbGFzdERpdlBvcykpKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTE3MywxNiArMTczLDE2IEBAIFN0cmluZyBob21lRGly
ZWN0b3J5UGF0aCgpCiAKIFN0cmluZyBwYXRoR2V0RmlsZU5hbWUoY29uc3QgU3RyaW5nJiBwYXRo
KQogewotICAgIHNpemVfdCBwb3MgPSByZXZlcnNlRmluZFBhdGhTZXBhcmF0b3IocGF0aCk7Ci0g
ICAgaWYgKHBvcyA9PSBub3RGb3VuZCkKKyAgICB1aW50MzJfdCBwb3MgPSByZXZlcnNlRmluZFBh
dGhTZXBhcmF0b3IocGF0aCk7CisgICAgaWYgKHBvcyA9PSBTdHJpbmc6Om5vdEZvdW5kKQogICAg
ICAgICByZXR1cm4gcGF0aDsKICAgICByZXR1cm4gcGF0aC5zdWJzdHJpbmcocG9zICsgMSk7CiB9
CiAKIFN0cmluZyBkaXJlY3RvcnlOYW1lKGNvbnN0IFN0cmluZyYgcGF0aCkKIHsKLSAgICBzaXpl
X3QgcG9zID0gcmV2ZXJzZUZpbmRQYXRoU2VwYXJhdG9yKHBhdGgpOwotICAgIGlmIChwb3MgPT0g
bm90Rm91bmQpCisgICAgdWludDMyX3QgcG9zID0gcmV2ZXJzZUZpbmRQYXRoU2VwYXJhdG9yKHBh
dGgpOworICAgIGlmIChwb3MgPT0gU3RyaW5nOjpub3RGb3VuZCkKICAgICAgICAgcmV0dXJuIFN0
cmluZygpOwogICAgIHJldHVybiBwYXRoLmxlZnQocG9zKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdVUklSZWZlcmVuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdVUklSZWZlcmVuY2UuY3BwCShyZXZpc2lvbiA4NTg2MCkKKysrIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdVUklSZWZlcmVuY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSwxMiArNDUs
MTIgQEAgYm9vbCBTVkdVUklSZWZlcmVuY2U6OmlzS25vd25BdHRyaWJ1dGUoYwogU3RyaW5nIFNW
R1VSSVJlZmVyZW5jZTo6Z2V0VGFyZ2V0KGNvbnN0IFN0cmluZyYgdXJsKQogewogICAgIGlmICh1
cmwuc3RhcnRzV2l0aCgidXJsKCIpKSB7IC8vIFVSSSBSZWZlcmVuY2VzLCBpZS4gZmlsbDp1cmwo
I3RhcmdldCkKLSAgICAgICAgc2l6ZV90IHN0YXJ0ID0gdXJsLmZpbmQoJyMnKSArIDE7Ci0gICAg
ICAgIHNpemVfdCBlbmQgPSB1cmwucmV2ZXJzZUZpbmQoJyknKTsKKyAgICAgICAgdWludDMyX3Qg
c3RhcnQgPSB1cmwuZmluZCgnIycpICsgMTsKKyAgICAgICAgdWludDMyX3QgZW5kID0gdXJsLnJl
dmVyc2VGaW5kKCcpJyk7CiAgICAgICAgIHJldHVybiB1cmwuc3Vic3RyaW5nKHN0YXJ0LCBlbmQg
LSBzdGFydCk7CiAgICAgfQotICAgIGlmICh1cmwuZmluZCgnIycpICE9IG5vdEZvdW5kKSB7IC8v
IGZvcm1hdCBpcyAjdGFyZ2V0Ci0gICAgICAgIHNpemVfdCBzdGFydCA9IHVybC5maW5kKCcjJykg
KyAxOworICAgIGlmICh1cmwuZmluZCgnIycpICE9IFN0cmluZzo6bm90Rm91bmQpIHsgLy8gZm9y
bWF0IGlzICN0YXJnZXQKKyAgICAgICAgdWludDMyX3Qgc3RhcnQgPSB1cmwuZmluZCgnIycpICsg
MTsKICAgICAgICAgcmV0dXJuIHVybC5zdWJzdHJpbmcoc3RhcnQsIHVybC5sZW5ndGgoKSAtIHN0
YXJ0KTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU1ZHU01J
TEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24v
U1ZHU01JTEVsZW1lbnQuY3BwCShyZXZpc2lvbiA4NTg2MCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2
Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDgsOCAr
MjQ4LDggQEAgU01JTFRpbWUgU1ZHU01JTEVsZW1lbnQ6OnBhcnNlQ2xvY2tWYWx1ZQogCiAgICAg
ZG91YmxlIHJlc3VsdCA9IDA7CiAgICAgYm9vbCBvazsKLSAgICBzaXplX3QgZG91YmxlUG9pbnRP
bmUgPSBwYXJzZS5maW5kKCc6Jyk7Ci0gICAgc2l6ZV90IGRvdWJsZVBvaW50VHdvID0gcGFyc2Uu
ZmluZCgnOicsIGRvdWJsZVBvaW50T25lICsgMSk7CisgICAgdWludDMyX3QgZG91YmxlUG9pbnRP
bmUgPSBwYXJzZS5maW5kKCc6Jyk7CisgICAgdWludDMyX3QgZG91YmxlUG9pbnRUd28gPSBwYXJz
ZS5maW5kKCc6JywgZG91YmxlUG9pbnRPbmUgKyAxKTsKICAgICBpZiAoZG91YmxlUG9pbnRPbmUg
PT0gMiAmJiBkb3VibGVQb2ludFR3byA9PSA1ICYmIHBhcnNlLmxlbmd0aCgpID49IDgpIHsgCiAg
ICAgICAgIHJlc3VsdCArPSBwYXJzZS5zdWJzdHJpbmcoMCwgMikudG9VSW50U3RyaWN0KCZvaykg
KiA2MCAqIDYwOwogICAgICAgICBpZiAoIW9rKQpAQCAtMjU4LDcgKzI1OCw3IEBAIFNNSUxUaW1l
IFNWR1NNSUxFbGVtZW50OjpwYXJzZUNsb2NrVmFsdWUKICAgICAgICAgaWYgKCFvaykKICAgICAg
ICAgICAgIHJldHVybiBTTUlMVGltZTo6dW5yZXNvbHZlZCgpOwogICAgICAgICByZXN1bHQgKz0g
cGFyc2Uuc3Vic3RyaW5nKDYpLnRvRG91YmxlKCZvayk7Ci0gICAgfSBlbHNlIGlmIChkb3VibGVQ
b2ludE9uZSA9PSAyICYmIGRvdWJsZVBvaW50VHdvID09IG5vdEZvdW5kICYmIHBhcnNlLmxlbmd0
aCgpID49IDUpIHsgCisgICAgfSBlbHNlIGlmIChkb3VibGVQb2ludE9uZSA9PSAyICYmIGRvdWJs
ZVBvaW50VHdvID09IFN0cmluZzo6bm90Rm91bmQgJiYgcGFyc2UubGVuZ3RoKCkgPj0gNSkgewog
ICAgICAgICByZXN1bHQgKz0gcGFyc2Uuc3Vic3RyaW5nKDAsIDIpLnRvVUludFN0cmljdCgmb2sp
ICogNjA7CiAgICAgICAgIGlmICghb2spCiAgICAgICAgICAgICByZXR1cm4gU01JTFRpbWU6OnVu
cmVzb2x2ZWQoKTsKQEAgLTI4MiwxNSArMjgyLDE1IEBAIGJvb2wgU1ZHU01JTEVsZW1lbnQ6OnBh
cnNlQ29uZGl0aW9uKGNvbnMKICAgICAKICAgICBkb3VibGUgc2lnbiA9IDEuOwogICAgIGJvb2wg
b2s7Ci0gICAgc2l6ZV90IHBvcyA9IHBhcnNlU3RyaW5nLmZpbmQoJysnKTsKLSAgICBpZiAocG9z
ID09IG5vdEZvdW5kKSB7CisgICAgdWludDMyX3QgcG9zID0gcGFyc2VTdHJpbmcuZmluZCgnKycp
OworICAgIGlmIChwb3MgPT0gU3RyaW5nOjpub3RGb3VuZCkgewogICAgICAgICBwb3MgPSBwYXJz
ZVN0cmluZy5maW5kKCctJyk7Ci0gICAgICAgIGlmIChwb3MgIT0gbm90Rm91bmQpCisgICAgICAg
IGlmIChwb3MgIT0gU3RyaW5nOjpub3RGb3VuZCkKICAgICAgICAgICAgIHNpZ24gPSAtMS47CiAg
ICAgfQogICAgIFN0cmluZyBjb25kaXRpb25TdHJpbmc7CiAgICAgU01JTFRpbWUgb2Zmc2V0ID0g
MDsKLSAgICBpZiAocG9zID09IG5vdEZvdW5kKQorICAgIGlmIChwb3MgPT0gU3RyaW5nOjpub3RG
b3VuZCkKICAgICAgICAgY29uZGl0aW9uU3RyaW5nID0gcGFyc2VTdHJpbmc7CiAgICAgZWxzZSB7
CiAgICAgICAgIGNvbmRpdGlvblN0cmluZyA9IHBhcnNlU3RyaW5nLmxlZnQocG9zKS5zdHJpcFdo
aXRlU3BhY2UoKTsKQEAgLTMwNiw3ICszMDYsNyBAQCBib29sIFNWR1NNSUxFbGVtZW50OjpwYXJz
ZUNvbmRpdGlvbihjb25zCiAgICAgCiAgICAgU3RyaW5nIGJhc2VJRDsKICAgICBTdHJpbmcgbmFt
ZVN0cmluZzsKLSAgICBpZiAocG9zID09IG5vdEZvdW5kKQorICAgIGlmIChwb3MgPT0gU3RyaW5n
Ojpub3RGb3VuZCkKICAgICAgICAgbmFtZVN0cmluZyA9IGNvbmRpdGlvblN0cmluZzsKICAgICBl
bHNlIHsKICAgICAgICAgYmFzZUlEID0gY29uZGl0aW9uU3RyaW5nLmxlZnQocG9zKTsKQEAgLTg0
Nyw3ICs4NDcsNiBAQCBTTUlMVGltZSBTVkdTTUlMRWxlbWVudDo6Y2FsY3VsYXRlTmV4dFByCiAg
ICAgICAgIC8vIElmIGR1cmF0aW9uIGlzIGluZGVmaW5pdGUgdGhlIHZhbHVlIGRvZXMgbm90IGFj
dHVhbGx5IGNoYW5nZSBvdmVyIHRpbWUuIFNhbWUgaXMgdHJ1ZSBmb3IgPHNldD4uCiAgICAgICAg
IFNNSUxUaW1lIHNpbXBsZUR1cmF0aW9uID0gdGhpcy0+c2ltcGxlRHVyYXRpb24oKTsKICAgICAg
ICAgaWYgKHNpbXBsZUR1cmF0aW9uLmlzSW5kZWZpbml0ZSgpIHx8IGhhc1RhZ05hbWUoU1ZHTmFt
ZXM6OnNldFRhZykpIHsKLSAgICAgICAgICAgIFNNSUxUaW1lIHJlcGVhdENvdW50ID0gdGhpcy0+
cmVwZWF0Q291bnQoKTsKICAgICAgICAgICAgIFNNSUxUaW1lIHJlcGVhdGluZ0R1cmF0aW9uRW5k
ID0gbV9pbnRlcnZhbEJlZ2luICsgcmVwZWF0aW5nRHVyYXRpb24oKTsKICAgICAgICAgICAgIC8v
IFdlIGFyZSBzdXBwb3NlZCB0byBkbyBmcmVlemUgc2VtYW50aWNzIHdoZW4gcmVwZWF0aW5nIGVu
ZHMsIGV2ZW4gaWYgdGhlIGVsZW1lbnQgaXMgc3RpbGwgYWN0aXZlLiAKICAgICAgICAgICAgIC8v
IFRha2UgY2FyZSB0aGF0IHdlIGdldCBhIHRpbWVyIGNhbGxiYWNrIGF0IHRoYXQgcG9pbnQuCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhGdW5jdGlvbnMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3htbC9YUGF0aEZ1bmN0aW9ucy5jcHAJKHJldmlzaW9uIDg1ODYwKQor
KysgU291cmNlL1dlYkNvcmUveG1sL1hQYXRoRnVuY3Rpb25zLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDc3LDkgKzQ3Nyw5IEBAIFZhbHVlIEZ1blN1YnN0cmluZ0JlZm9yZTo6ZXZhbHVhdGUoKSBj
b24KICAgICBpZiAoczIuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gIiI7CiAKLSAgICBzaXpl
X3QgaSA9IHMxLmZpbmQoczIpOworICAgIHVpbnQzMl90IGkgPSBzMS5maW5kKHMyKTsKIAotICAg
IGlmIChpID09IG5vdEZvdW5kKQorICAgIGlmIChpID09IFN0cmluZzo6bm90Rm91bmQpCiAgICAg
ICAgIHJldHVybiAiIjsKIAogICAgIHJldHVybiBzMS5sZWZ0KGkpOwpAQCAtNDkwLDggKzQ5MCw4
IEBAIFZhbHVlIEZ1blN1YnN0cmluZ0FmdGVyOjpldmFsdWF0ZSgpIGNvbnMKICAgICBTdHJpbmcg
czEgPSBhcmcoMCktPmV2YWx1YXRlKCkudG9TdHJpbmcoKTsKICAgICBTdHJpbmcgczIgPSBhcmco
MSktPmV2YWx1YXRlKCkudG9TdHJpbmcoKTsKIAotICAgIHNpemVfdCBpID0gczEuZmluZChzMik7
Ci0gICAgaWYgKGkgPT0gbm90Rm91bmQpCisgICAgdWludDMyX3QgaSA9IHMxLmZpbmQoczIpOwor
ICAgIGlmIChpID09IFN0cmluZzo6bm90Rm91bmQpCiAgICAgICAgIHJldHVybiAiIjsKIAogICAg
IHJldHVybiBzMS5zdWJzdHJpbmcoaSArIHMyLmxlbmd0aCgpKTsKQEAgLTU1Niw5ICs1NTYsOSBA
QCBWYWx1ZSBGdW5UcmFuc2xhdGU6OmV2YWx1YXRlKCkgY29uc3QKICAgICAvLyBGSVhNRTogQnVp
bGRpbmcgYSBTdHJpbmcgYSBjaGFyYWN0ZXIgYXQgYSB0aW1lIGlzIHF1aXRlIHNsb3cuCiAgICAg
Zm9yICh1bnNpZ25lZCBpMSA9IDA7IGkxIDwgczEubGVuZ3RoKCk7ICsraTEpIHsKICAgICAgICAg
VUNoYXIgY2ggPSBzMVtpMV07Ci0gICAgICAgIHNpemVfdCBpMiA9IHMyLmZpbmQoY2gpOworICAg
ICAgICB1aW50MzJfdCBpMiA9IHMyLmZpbmQoY2gpOwogICAgICAgICAKLSAgICAgICAgaWYgKGky
ID09IG5vdEZvdW5kKQorICAgICAgICBpZiAoaTIgPT0gU3RyaW5nOjpub3RGb3VuZCkKICAgICAg
ICAgICAgIG5ld1N0cmluZyArPSBTdHJpbmcoJmNoLCAxKTsKICAgICAgICAgZWxzZSBpZiAoaTIg
PCBzMy5sZW5ndGgoKSkgewogICAgICAgICAgICAgVUNoYXIgYzIgPSBzM1tpMl07CkBAIC02MDgs
OCArNjA4LDggQEAgVmFsdWUgRnVuTGFuZzo6ZXZhbHVhdGUoKSBjb25zdAogICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAKICAgICAgICAgLy8gUmVtb3ZlIHN1ZmZpeGVzIG9uZSBieSBvbmUuCi0g
ICAgICAgIHNpemVfdCBpbmRleCA9IGxhbmdWYWx1ZS5yZXZlcnNlRmluZCgnLScpOwotICAgICAg
ICBpZiAoaW5kZXggPT0gbm90Rm91bmQpCisgICAgICAgIHVpbnQzMl90IGluZGV4ID0gbGFuZ1Zh
bHVlLnJldmVyc2VGaW5kKCctJyk7CisgICAgICAgIGlmIChpbmRleCA9PSBTdHJpbmc6Om5vdEZv
dW5kKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGxhbmdWYWx1ZSA9IGxhbmdWYWx1ZS5s
ZWZ0KGluZGV4KTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhQYXJzZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3htbC9YUGF0aFBhcnNlci5jcHAJKHJl
dmlzaW9uIDg1ODYwKQorKysgU291cmNlL1dlYkNvcmUveG1sL1hQYXRoUGFyc2VyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDU1LDggKzQ1NSw4IEBAIGludCBQYXJzZXI6OmxleCh2b2lkKiBkYXRh
KQogCiBib29sIFBhcnNlcjo6ZXhwYW5kUU5hbWUoY29uc3QgU3RyaW5nJiBxTmFtZSwgU3RyaW5n
JiBsb2NhbE5hbWUsIFN0cmluZyYgbmFtZXNwYWNlVVJJKQogewotICAgIHNpemVfdCBjb2xvbiA9
IHFOYW1lLmZpbmQoJzonKTsKLSAgICBpZiAoY29sb24gIT0gbm90Rm91bmQpIHsKKyAgICB1aW50
MzJfdCBjb2xvbiA9IHFOYW1lLmZpbmQoJzonKTsKKyAgICBpZiAoY29sb24gIT0gU3RyaW5nOjpu
b3RGb3VuZCkgewogICAgICAgICBpZiAoIW1fcmVzb2x2ZXIpCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgIG5hbWVzcGFjZVVSSSA9IG1fcmVzb2x2ZXItPmxvb2t1cE5hbWVzcGFj
ZVVSSShxTmFtZS5sZWZ0KGNvbG9uKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwko
cmV2aXNpb24gODU4NjIpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDExLTA1LTA1ICBBbGV4aXMgTWVuYXJkICA8
YWxleGlzLm1lbmFyZEBvcGVuYm9zc2Eub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIE1vZGlmeSBXVEY6OlN0cmluZyBhbmQgVVN0cmluZyB0byB1
c2UgYSBtb3JlIHNhZmUgQVBJIGZvciBsb29rdXAgZnVuY3Rpb25zLgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjAyNzkKKworICAgICAgICBBZGFwdCBh
bGwgdGhlIGNvZGUgdG8gdGhlIG5ldyBTdHJpbmcgQVBJLiBXZSB1c2Ugbm93IFN0cmluZzo6bm90
Rm91bmQgYW5kCisgICAgICAgIHVpbnQzMl90LgorCisgICAgICAgICogc3JjL1dlYlBhZ2VTZXJp
YWxpemVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVNlcmlhbGl6ZXI6OnJldHJpZXZl
QWxsUmVzb3VyY2VzKToKKwogMjAxMS0wNS0wMyAgSGFucyBXZW5uYm9yZyAgPGhhbnNAY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFN0ZXZlIEJsb2NrLgpJbmRleDogU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUGFnZVNlcmlhbGl6ZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBhZ2VTZXJpYWxpemVyLmNwcAkocmV2aXNp
b24gODU4NjApCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQYWdlU2VyaWFsaXpl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0MSw4ICsyNDEsOCBAQCBib29sIFdlYlBhZ2VTZXJp
YWxpemVyOjpyZXRyaWV2ZUFsbFJlc291CiAgICAgICAgIHJlc3VsdFJlc291cmNlVVJMc1tpXSA9
IHJlc291cmNlS1VSTHNbaV07CiAgICAgICAgIC8vIEEgZnJhbWUncyBzcmMgY2FuIHBvaW50IHRv
IHRoZSBzYW1lIFVSTCBhcyBhbm90aGVyIHJlc291cmNlLCBrZWVwIHRoZQogICAgICAgICAvLyBy
ZXNvdXJjZSBVUkwgb25seSBpbiBzdWNoIGNhc2VzLgotICAgICAgICBzaXplX3QgaW5kZXggPSBm
cmFtZUtVUkxzLmZpbmQocmVzb3VyY2VLVVJMc1tpXSk7Ci0gICAgICAgIGlmIChpbmRleCAhPSBu
b3RGb3VuZCkKKyAgICAgICAgdWludDMyX3QgaW5kZXggPSBmcmFtZUtVUkxzLmZpbmQocmVzb3Vy
Y2VLVVJMc1tpXSk7CisgICAgICAgIGlmIChpbmRleCAhPSBTdHJpbmc6Om5vdEZvdW5kKQogICAg
ICAgICAgICAgZnJhbWVLVVJMcy5yZW1vdmUoaW5kZXgpOwogICAgIH0KICAgICAqcmVzb3VyY2VV
UkxzID0gcmVzdWx0UmVzb3VyY2VVUkxzOwo=
</data>
<flag name="review"
          id="85406"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>