<?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>175210</bug_id>
          
          <creation_ts>2017-08-04 14:28:16 -0700</creation_ts>
          <short_desc>[ESNext] Async iteration - Implement Async Generator - parser</short_desc>
          <delta_ts>2017-08-30 03:08:18 -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>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=175334</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>166695</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="GSkachkov">gskachkov</reporter>
          <assigned_to name="GSkachkov">gskachkov</assigned_to>
          <cc>buildbot</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1335462</commentid>
    <comment_count>0</comment_count>
    <who name="GSkachkov">gskachkov</who>
    <bug_when>2017-08-04 14:28:16 -0700</bug_when>
    <thetext>Implemented parser part of the Async Generator</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1335507</commentid>
    <comment_count>1</comment_count>
      <attachid>317298</attachid>
    <who name="GSkachkov">gskachkov</who>
    <bug_when>2017-08-04 15:02:09 -0700</bug_when>
    <thetext>Created attachment 317298
Patch

Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1335715</commentid>
    <comment_count>2</comment_count>
      <attachid>317298</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-08-05 11:54:56 -0700</bug_when>
    <thetext>Comment on attachment 317298
Patch

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

r=+ with nits.

&gt; Source/JavaScriptCore/parser/ASTBuilder.h:440
&gt; +        SourceParseMode sourceParseMode;

Let&apos;s rename this to `bodySourceParseMode` and set `bodySourceParseMode = mode;` first.

&gt; Source/JavaScriptCore/parser/ASTBuilder.h:451
&gt; +        } else
&gt; +            sourceParseMode = mode;

Drop this.

&gt; Source/JavaScriptCore/parser/Parser.cpp:2866
&gt; +            if (isAsyncMethodParseMode(parseMode) || isAsyncGeneratorMethodParseMode(parseMode)) {
&gt;                  isConstructor = false;
&gt; -                parseMode = SourceParseMode::AsyncMethodMode;
&gt; -                semanticFailIfTrue(*ident == m_vm-&gt;propertyNames-&gt;prototype, &quot;Cannot declare an async method named &apos;prototype&apos;&quot;);
&gt; -                semanticFailIfTrue(*ident == m_vm-&gt;propertyNames-&gt;constructor, &quot;Cannot declare an async method named &apos;constructor&apos;&quot;);
&gt; -            } else if (isGenerator) {
&gt; +                semanticFailIfTrue(*ident == m_vm-&gt;propertyNames-&gt;prototype, &quot;Cannot declare &quot;, stringArticleForFunctionMode(parseMode), stringForFunctionMode(parseMode), &quot; named &apos;prototype&apos;&quot;);
&gt; +                semanticFailIfTrue(*ident == m_vm-&gt;propertyNames-&gt;constructor, &quot;Cannot declare &quot;, stringArticleForFunctionMode(parseMode), stringForFunctionMode(parseMode), &quot; named &apos;constructor&apos;&quot;);
&gt; +            } else if (isGeneratorMethodParseMode(parseMode)) {
&gt;                  isConstructor = false;
&gt;                  parseMode = SourceParseMode::GeneratorWrapperMethodMode;
&gt;                  semanticFailIfTrue(*ident == m_vm-&gt;propertyNames-&gt;prototype, &quot;Cannot declare a generator named &apos;prototype&apos;&quot;);
&gt;                  semanticFailIfTrue(*ident == m_vm-&gt;propertyNames-&gt;constructor, &quot;Cannot declare a generator named &apos;constructor&apos;&quot;);
&gt;              }

I think this `if (isGeneratorMethodParseMode(parseMode))` case can be merged into the above async case if you add a generator case to stringArticleForFunctionMode and stringForFunctionMode.
And we do not need to execute `parseMode = SourceParseMode::GeneratorWrapperMethodMode;` since parseMode is already SourceParseMode::GeneratorWrapperMethodMode.

&gt; Source/JavaScriptCore/parser/Parser.cpp:3858
&gt; +    bool isIdentSet = false;

I think this is always `false`, right? Nobody changes this isIdentSet.
What is the purpose of this variable?

&gt; Source/JavaScriptCore/parser/Parser.cpp:3861
&gt; +    const Identifier* ident;
&gt; +    unsigned getterOrSetterStartOffset;
&gt; +    JSToken identToken;

These changes are not necessary. Let&apos;s revert this.

&gt; Source/JavaScriptCore/parser/Parser.cpp:3896
&gt; -        JSToken identToken = m_token;
&gt; -        const Identifier* ident = m_token.m_data.ident;
&gt; -        unsigned getterOrSetterStartOffset = tokenStart();
&gt; +        identToken = m_token;
&gt; +        ident = m_token.m_data.ident;
&gt; +        getterOrSetterStartOffset = tokenStart();

I don&apos;t think these changes are necessary. Let&apos;s revert this.

&gt; Source/JavaScriptCore/parser/Parser.cpp:3900
&gt; +        else if (UNLIKELY(!isIdentSet))

This is always `false`, right?

&gt; Source/JavaScriptCore/parser/Parser.h:1514
&gt; +    ALWAYS_INLINE SourceParseMode getAsynFunctionBodyParseMode(SourceParseMode parseMode)
&gt; +    {
&gt; +        if (isAsyncGeneratorFunctionParseMode(parseMode))
&gt; +            return SourceParseMode::AsyncGeneratorBodyMode;
&gt; +
&gt; +        if (parseMode == SourceParseMode::AsyncArrowFunctionMode)
&gt; +            return SourceParseMode::AsyncArrowFunctionBodyMode;
&gt; +        
&gt; +        return SourceParseMode::AsyncFunctionBodyMode;
&gt; +    }

Let&apos;s put it in Parser.cpp as static function insead of Parser&apos;s member function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1335777</commentid>
    <comment_count>3</comment_count>
    <who name="GSkachkov">gskachkov</who>
    <bug_when>2017-08-06 06:05:38 -0700</bug_when>
    <thetext>Patch applied https://trac.webkit.org/r220323</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1335778</commentid>
    <comment_count>4</comment_count>
      <attachid>317298</attachid>
    <who name="GSkachkov">gskachkov</who>
    <bug_when>2017-08-06 06:05:50 -0700</bug_when>
    <thetext>Comment on attachment 317298
Patch

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

&gt;&gt; Source/JavaScriptCore/parser/ASTBuilder.h:440
&gt;&gt; +        SourceParseMode sourceParseMode;
&gt; 
&gt; Let&apos;s rename this to `bodySourceParseMode` and set `bodySourceParseMode = mode;` first.

Done

&gt;&gt; Source/JavaScriptCore/parser/ASTBuilder.h:451
&gt;&gt; +            sourceParseMode = mode;
&gt; 
&gt; Drop this.

Done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1343499</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-08-30 03:08:18 -0700</bug_when>
    <thetext>&lt;rdar://problem/34158206&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>317298</attachid>
            <date>2017-08-04 15:02:09 -0700</date>
            <delta_ts>2017-08-06 06:05:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-175210-20170805010207.patch</filename>
            <type>text/plain</type>
            <size>52666</size>
            <attacher name="GSkachkov">gskachkov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIwMjY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAx
ZGY3MWQ0ZWY4MDFkZDZjZTFiOGM0NWViOGE1NWFjYzY3YzE3MTNlLi5lZDk0N2NjYmM2NDdlNmJh
YTRiYzAwZjIzNDMyYTRlZmFjODc4NDE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
NSArMSw1MCBAQAogMjAxNy0wOC0wNCAgT2xla3NhbmRyIFNrYWNoa292ICA8Z3NrYWNoa292QGdt
YWlsLmNvbT4KIAorICAgICAgICBbRVNOZXh0XSBBc3luYyBpdGVyYXRpb24gLSBJbXBsZW1lbnQg
QXN5bmMgR2VuZXJhdG9yIC0gcGFyc2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNzUyMTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBDdXJyZW50IGltcGxlbWVudGF0aW9uIGlzIGRyYWZ0IHZlcnNpb24g
b2YgQXN5bmMgSXRlcmF0aW9uLiAKKyAgICAgICAgTGluayB0byBzcGVjIGh0dHBzOi8vdGMzOS5n
aXRodWIuaW8vcHJvcG9zYWwtYXN5bmMtaXRlcmF0aW9uLworCisgICAgICAgIEN1cnJlbnQgcGF0
Y2ggaW1wbGVtZW50IG9ubHkgcGFyc2VyIHBhcnQgb2YgdGhlIEFzeW5jIGdlbmVyYXRvcgorICAg
ICAgICBSdW50aW1lIHBhcnQgd2lsbCBiZSBpbiBuZXh0IHB0Y2hlcworCisgICAgICAgICogcGFy
c2VyL0FTVEJ1aWxkZXIuaDoKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlRnVuY3Rp
b25NZXRhZGF0YSk6CisgICAgICAgICogcGFyc2VyL1BhcnNlci5jcHA6CisgICAgICAgIChKU0M6
OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUlubmVyKToKKyAgICAgICAgKEpTQzo6UGFyc2VyPExl
eGVyVHlwZT46OnBhcnNlQXN5bmNGdW5jdGlvblNvdXJjZUVsZW1lbnRzKToKKyAgICAgICAgKEpT
Qzo6UGFyc2VyPExleGVyVHlwZT46OnBhcnNlQXN5bmNHZW5lcmF0b3JGdW5jdGlvblNvdXJjZUVs
ZW1lbnRzKToKKyAgICAgICAgKEpTQzo6c3RyaW5nQXJ0aWNsZUZvckZ1bmN0aW9uTW9kZSk6Cisg
ICAgICAgIChKU0M6OnN0cmluZ0ZvckZ1bmN0aW9uTW9kZSk6CisgICAgICAgIChKU0M6OlBhcnNl
cjxMZXhlclR5cGU+OjpwYXJzZUZ1bmN0aW9uSW5mbyk6CisgICAgICAgIChKU0M6OlBhcnNlcjxM
ZXhlclR5cGU+OjpwYXJzZUFzeW5jRnVuY3Rpb25EZWNsYXJhdGlvbik6CisgICAgICAgIChKU0M6
OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUNsYXNzKToKKyAgICAgICAgKEpTQzo6UGFyc2VyPExl
eGVyVHlwZT46OnBhcnNlUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpQYXJzZXI8TGV4ZXJUeXBl
Pjo6cGFyc2VQcm9wZXJ0eU1ldGhvZCk6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+
OjpwYXJzZUFzeW5jRnVuY3Rpb25FeHByZXNzaW9uKToKKyAgICAgICAgKiBwYXJzZXIvUGFyc2Vy
Lmg6CisgICAgICAgIChKU0M6OlNjb3BlOjpzZXRTb3VyY2VQYXJzZU1vZGUpOgorICAgICAgICAo
SlNDOjpQYXJzZXI6OmdldEFzeW5GdW5jdGlvbkJvZHlQYXJzZU1vZGUpOgorICAgICAgICAqIHBh
cnNlci9QYXJzZXJNb2Rlcy5oOgorICAgICAgICAoSlNDOjppc0Z1bmN0aW9uUGFyc2VNb2RlKToK
KyAgICAgICAgKEpTQzo6aXNBc3luY0Z1bmN0aW9uUGFyc2VNb2RlKToKKyAgICAgICAgKEpTQzo6
aXNBc3luY0Fycm93RnVuY3Rpb25QYXJzZU1vZGUpOgorICAgICAgICAoSlNDOjppc0FzeW5jR2Vu
ZXJhdG9yRnVuY3Rpb25QYXJzZU1vZGUpOgorICAgICAgICAoSlNDOjppc0FzeW5jRnVuY3Rpb25P
ckFzeW5jR2VuZXJhdG9yV3JhcHBlclBhcnNlTW9kZSk6CisgICAgICAgIChKU0M6OmlzQXN5bmNG
dW5jdGlvbldyYXBwZXJQYXJzZU1vZGUpOgorICAgICAgICAoSlNDOjppc0FzeW5jRnVuY3Rpb25C
b2R5UGFyc2VNb2RlKToKKyAgICAgICAgKEpTQzo6aXNHZW5lcmF0b3JNZXRob2RQYXJzZU1vZGUp
OgorICAgICAgICAoSlNDOjppc0FzeW5jTWV0aG9kUGFyc2VNb2RlKToKKyAgICAgICAgKEpTQzo6
aXNBc3luY0dlbmVyYXRvck1ldGhvZFBhcnNlTW9kZSk6CisgICAgICAgIChKU0M6OmlzTWV0aG9k
UGFyc2VNb2RlKToKKyAgICAgICAgKEpTQzo6aXNHZW5lcmF0b3JPckFzeW5jRnVuY3Rpb25Cb2R5
UGFyc2VNb2RlKToKKyAgICAgICAgKEpTQzo6aXNHZW5lcmF0b3JPckFzeW5jRnVuY3Rpb25XcmFw
cGVyUGFyc2VNb2RlKToKKworMjAxNy0wOC0wNCAgT2xla3NhbmRyIFNrYWNoa292ICA8Z3NrYWNo
a292QGdtYWlsLmNvbT4KKwogICAgICAgICBbRXNOZXh0XSBBc3luYyBpdGVyYXRpb24gLSBBZGQg
ZmVhdHVyZSBmbGFnCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNjY2OTQKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9B
U1RCdWlsZGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0FTVEJ1aWxkZXIuaApp
bmRleCAyODBjNzI3ZDI1MDUwNTY4OTZkN2FiZTdmODA1NzA2MTA3MzE2NmEwLi43ZGU2MzUwOTA0
YzRmOWRlNDUyMzcwOTk0NDBjMjRjMDdkMTFkOTViIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcGFyc2VyL0FTVEJ1aWxkZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cGFyc2VyL0FTVEJ1aWxkZXIuaApAQCAtNDM3LDExICs0MzcsMjQgQEAgcHVibGljOgogICAgICAg
ICB1bnNpZ25lZCBwYXJhbWV0ZXJDb3VudCwKICAgICAgICAgU291cmNlUGFyc2VNb2RlIG1vZGUs
IGJvb2wgaXNBcnJvd0Z1bmN0aW9uQm9keUV4cHJlc3Npb24pCiAgICAgeworICAgICAgICBTb3Vy
Y2VQYXJzZU1vZGUgc291cmNlUGFyc2VNb2RlOworICAgICAgICBpZiAobW9kZSA9PSBTb3VyY2VQ
YXJzZU1vZGU6OkFzeW5jR2VuZXJhdG9yQm9keU1vZGUpIHsKKyAgICAgICAgICAgIEFTU0VSVChP
cHRpb25zOjp1c2VBc3luY0l0ZXJhdG9yKCkpOworICAgICAgICAgICAgc291cmNlUGFyc2VNb2Rl
ID0gU291cmNlUGFyc2VNb2RlOjpBc3luY0Z1bmN0aW9uQm9keU1vZGU7CisgICAgICAgIH0gZWxz
ZSBpZiAobW9kZSA9PSBTb3VyY2VQYXJzZU1vZGU6OkFzeW5jR2VuZXJhdG9yV3JhcHBlckZ1bmN0
aW9uTW9kZSkgeworICAgICAgICAgICAgQVNTRVJUKE9wdGlvbnM6OnVzZUFzeW5jSXRlcmF0b3Io
KSk7CisgICAgICAgICAgICBzb3VyY2VQYXJzZU1vZGUgPSBTb3VyY2VQYXJzZU1vZGU6OkFycm93
RnVuY3Rpb25Nb2RlOworICAgICAgICB9IGVsc2UgaWYgKG1vZGUgPT0gU291cmNlUGFyc2VNb2Rl
OjpBc3luY0dlbmVyYXRvcldyYXBwZXJNZXRob2RNb2RlKSB7CisgICAgICAgICAgICBBU1NFUlQo
T3B0aW9uczo6dXNlQXN5bmNJdGVyYXRvcigpKTsKKyAgICAgICAgICAgIHNvdXJjZVBhcnNlTW9k
ZSA9IFNvdXJjZVBhcnNlTW9kZTo6QXN5bmNNZXRob2RNb2RlOworICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgIHNvdXJjZVBhcnNlTW9kZSA9IG1vZGU7CisKICAgICAgICAgcmV0dXJuIG5ldyAo
bV9wYXJzZXJBcmVuYSkgRnVuY3Rpb25NZXRhZGF0YU5vZGUoCiAgICAgICAgICAgICBtX3BhcnNl
ckFyZW5hLCBzdGFydExvY2F0aW9uLCBlbmRMb2NhdGlvbiwgc3RhcnRDb2x1bW4sIGVuZENvbHVt
biwgCiAgICAgICAgICAgICBmdW5jdGlvbktleXdvcmRTdGFydCwgZnVuY3Rpb25OYW1lU3RhcnQs
IHBhcmFtZXRlcnNTdGFydCwgCiAgICAgICAgICAgICBpblN0cmljdENvbnRleHQsIGNvbnN0cnVj
dG9yS2luZCwgc3VwZXJCaW5kaW5nLAotICAgICAgICAgICAgcGFyYW1ldGVyQ291bnQsIG1vZGUs
IGlzQXJyb3dGdW5jdGlvbkJvZHlFeHByZXNzaW9uKTsKKyAgICAgICAgICAgIHBhcmFtZXRlckNv
dW50LCBzb3VyY2VQYXJzZU1vZGUsIGlzQXJyb3dGdW5jdGlvbkJvZHlFeHByZXNzaW9uKTsKICAg
ICB9CiAKICAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlQXJyb3dGdW5jdGlvbkV4cHIoY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgY29uc3QgUGFyc2VyRnVuY3Rpb25JbmZvPEFTVEJ1
aWxkZXI+JiBmdW5jdGlvbkluZm8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cGFyc2VyL1BhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5j
cHAKaW5kZXggY2E2ZDgyMGYwYmI2OTNjZjg1YmJkNGVhM2FlMzViMzU1ZjQ2ZGFhMi4uZTM0Y2Vm
NDI0M2RlMTZiMjkxOWU2MDBkMzhjMGNlZWY5Y2ZkZWMxZCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9wYXJzZXIvUGFyc2VyLmNwcApAQCAtMjI4LDYgKzIyOCw4IEBAIFN0cmluZyBQYXJzZXI8TGV4
ZXJUeXBlPjo6cGFyc2VJbm5lcihjb25zdCBJZGVudGlmaWVyJiBjYWxsZWVOYW1lLCBTb3VyY2VQ
YXJzZU1vCiAgICAgICAgICAgICBzb3VyY2VFbGVtZW50cyA9IHBhcnNlTW9kdWxlU291cmNlRWxl
bWVudHMoY29udGV4dCwgcGFyc2VNb2RlKTsKICAgICAgICAgZWxzZSBpZiAoaXNHZW5lcmF0b3JX
cmFwcGVyUGFyc2VNb2RlKHBhcnNlTW9kZSkpCiAgICAgICAgICAgICBzb3VyY2VFbGVtZW50cyA9
IHBhcnNlR2VuZXJhdG9yRnVuY3Rpb25Tb3VyY2VFbGVtZW50cyhjb250ZXh0LCBjYWxsZWVOYW1l
LCBDaGVja0ZvclN0cmljdE1vZGUpOworICAgICAgICBlbHNlIGlmIChpc0FzeW5jR2VuZXJhdG9y
RnVuY3Rpb25QYXJzZU1vZGUocGFyc2VNb2RlKSkKKyAgICAgICAgICAgIHNvdXJjZUVsZW1lbnRz
ID0gcGFyc2VBc3luY0dlbmVyYXRvckZ1bmN0aW9uU291cmNlRWxlbWVudHMoY29udGV4dCwgcGFy
c2VNb2RlLCBpc0Fycm93RnVuY3Rpb25Cb2R5RXhwcmVzc2lvbiwgQ2hlY2tGb3JTdHJpY3RNb2Rl
KTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgc291cmNlRWxlbWVudHMgPSBwYXJzZVNvdXJj
ZUVsZW1lbnRzKGNvbnRleHQsIENoZWNrRm9yU3RyaWN0TW9kZSk7CiAgICAgfQpAQCAtMjQ5LDcg
KzI1MSw3IEBAIFN0cmluZyBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VJbm5lcihjb25zdCBJZGVu
dGlmaWVyJiBjYWxsZWVOYW1lLCBTb3VyY2VQYXJzZU1vCiAgICAgZm9yIChhdXRvJiBlbnRyeSA6
IGNhcHR1cmVkVmFyaWFibGVzKQogICAgICAgICB2YXJEZWNsYXJhdGlvbnMubWFya1ZhcmlhYmxl
QXNDYXB0dXJlZChlbnRyeSk7CiAKLSAgICBpZiAoaXNHZW5lcmF0b3JXcmFwcGVyUGFyc2VNb2Rl
KHBhcnNlTW9kZSkgfHwgaXNBc3luY0Z1bmN0aW9uV3JhcHBlclBhcnNlTW9kZShwYXJzZU1vZGUp
KSB7CisgICAgaWYgKGlzR2VuZXJhdG9yV3JhcHBlclBhcnNlTW9kZShwYXJzZU1vZGUpIHx8IGlz
QXN5bmNGdW5jdGlvbk9yQXN5bmNHZW5lcmF0b3JXcmFwcGVyUGFyc2VNb2RlKHBhcnNlTW9kZSkp
IHsKICAgICAgICAgaWYgKHNjb3BlLT51c2VkVmFyaWFibGVzQ29udGFpbnMobV92bS0+cHJvcGVy
dHlOYW1lcy0+YXJndW1lbnRzLmltcGwoKSkpCiAgICAgICAgICAgICBjb250ZXh0LnByb3BhZ2F0
ZUFyZ3VtZW50c1VzZSgpOwogICAgIH0KQEAgLTUwMiw3ICs1MDQsNyBAQCB0ZW1wbGF0ZSA8Y2xh
c3MgVHJlZUJ1aWxkZXI+IFRyZWVTb3VyY2VFbGVtZW50cyBQYXJzZXI8TGV4ZXJUeXBlPjo6cGFy
c2VHZW5lcmF0bwogdGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4KIHRlbXBsYXRlIDxjbGFz
cyBUcmVlQnVpbGRlcj4gVHJlZVNvdXJjZUVsZW1lbnRzIFBhcnNlcjxMZXhlclR5cGU+OjpwYXJz
ZUFzeW5jRnVuY3Rpb25Tb3VyY2VFbGVtZW50cyhUcmVlQnVpbGRlciYgY29udGV4dCwgU291cmNl
UGFyc2VNb2RlIHBhcnNlTW9kZSwgYm9vbCBpc0Fycm93RnVuY3Rpb25Cb2R5RXhwcmVzc2lvbiwg
U291cmNlRWxlbWVudHNNb2RlIG1vZGUpCiB7Ci0gICAgQVNTRVJUKGlzQXN5bmNGdW5jdGlvbldy
YXBwZXJQYXJzZU1vZGUocGFyc2VNb2RlKSk7CisgICAgQVNTRVJUKGlzQXN5bmNGdW5jdGlvbk9y
QXN5bmNHZW5lcmF0b3JXcmFwcGVyUGFyc2VNb2RlKHBhcnNlTW9kZSkpOwogICAgIGF1dG8gc291
cmNlRWxlbWVudHMgPSBjb250ZXh0LmNyZWF0ZVNvdXJjZUVsZW1lbnRzKCk7CiAKICAgICB1bnNp
Z25lZCBmdW5jdGlvbktleXdvcmRTdGFydCA9IHRva2VuU3RhcnQoKTsKQEAgLTUxNyw5ICs1MTks
OSBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTb3VyY2VFbGVtZW50cyBQYXJz
ZXI8TGV4ZXJUeXBlPjo6cGFyc2VBc3luY0Z1bgogICAgIGNyZWF0ZUdlbmVyYXRvclBhcmFtZXRl
cnMoY29udGV4dCwgaW5mby5wYXJhbWV0ZXJDb3VudCk7CiAgICAgaW5mby5zdGFydE9mZnNldCA9
IHBhcmFtZXRlcnNTdGFydDsKICAgICBpbmZvLnN0YXJ0TGluZSA9IHRva2VuTGluZSgpOwotICAg
IFNvdXJjZVBhcnNlTW9kZSBpbm5lclBhcnNlTW9kZSA9IHBhcnNlTW9kZSA9PSBTb3VyY2VQYXJz
ZU1vZGU6OkFzeW5jQXJyb3dGdW5jdGlvbk1vZGUKLSAgICAgICAgPyBTb3VyY2VQYXJzZU1vZGU6
OkFzeW5jQXJyb3dGdW5jdGlvbkJvZHlNb2RlCi0gICAgICAgIDogU291cmNlUGFyc2VNb2RlOjpB
c3luY0Z1bmN0aW9uQm9keU1vZGU7CisKKyAgICBTb3VyY2VQYXJzZU1vZGUgaW5uZXJQYXJzZU1v
ZGUgPSBnZXRBc3luRnVuY3Rpb25Cb2R5UGFyc2VNb2RlKHBhcnNlTW9kZSk7CisKICAgICB7CiAg
ICAgICAgIEF1dG9Qb3BTY29wZVJlZiBhc3luY0Z1bmN0aW9uQm9keVNjb3BlKHRoaXMsIHB1c2hT
Y29wZSgpKTsKICAgICAgICAgYXN5bmNGdW5jdGlvbkJvZHlTY29wZS0+c2V0U291cmNlUGFyc2VN
b2RlKGlubmVyUGFyc2VNb2RlKTsKQEAgLTU1MSw2ICs1NTMsNTUgQEAgdGVtcGxhdGUgPGNsYXNz
IFRyZWVCdWlsZGVyPiBUcmVlU291cmNlRWxlbWVudHMgUGFyc2VyPExleGVyVHlwZT46OnBhcnNl
QXN5bmNGdW4KIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4KK3RlbXBsYXRlIDxj
bGFzcyBUcmVlQnVpbGRlcj4gVHJlZVNvdXJjZUVsZW1lbnRzIFBhcnNlcjxMZXhlclR5cGU+Ojpw
YXJzZUFzeW5jR2VuZXJhdG9yRnVuY3Rpb25Tb3VyY2VFbGVtZW50cyhUcmVlQnVpbGRlciYgY29u
dGV4dCwgU291cmNlUGFyc2VNb2RlIHBhcnNlTW9kZSwgYm9vbCBpc0Fycm93RnVuY3Rpb25Cb2R5
RXhwcmVzc2lvbiwgU291cmNlRWxlbWVudHNNb2RlIG1vZGUpCit7CisgICAgQVNTRVJUX1VOVVNF
RChwYXJzZU1vZGUsIGlzQXN5bmNHZW5lcmF0b3JGdW5jdGlvblBhcnNlTW9kZShwYXJzZU1vZGUp
KTsKKyAgICBhdXRvIHNvdXJjZUVsZW1lbnRzID0gY29udGV4dC5jcmVhdGVTb3VyY2VFbGVtZW50
cygpOworICAgICAgICAKKyAgICB1bnNpZ25lZCBmdW5jdGlvbktleXdvcmRTdGFydCA9IHRva2Vu
U3RhcnQoKTsKKyAgICBKU1Rva2VuTG9jYXRpb24gc3RhcnRMb2NhdGlvbih0b2tlbkxvY2F0aW9u
KCkpOworICAgIEpTVGV4dFBvc2l0aW9uIHN0YXJ0ID0gdG9rZW5TdGFydFBvc2l0aW9uKCk7Cisg
ICAgdW5zaWduZWQgc3RhcnRDb2x1bW4gPSB0b2tlbkNvbHVtbigpOworICAgIGludCBmdW5jdGlv
bk5hbWVTdGFydCA9IG1fdG9rZW4ubV9sb2NhdGlvbi5zdGFydE9mZnNldDsKKyAgICBpbnQgcGFy
YW1ldGVyc1N0YXJ0ID0gbV90b2tlbi5tX2xvY2F0aW9uLnN0YXJ0T2Zmc2V0OworICAgIAorICAg
IFBhcnNlckZ1bmN0aW9uSW5mbzxUcmVlQnVpbGRlcj4gaW5mbzsKKyAgICBpbmZvLm5hbWUgPSAm
bV92bS0+cHJvcGVydHlOYW1lcy0+bnVsbElkZW50aWZpZXI7CisgICAgY3JlYXRlR2VuZXJhdG9y
UGFyYW1ldGVycyhjb250ZXh0LCBpbmZvLnBhcmFtZXRlckNvdW50KTsKKyAgICBpbmZvLnN0YXJ0
T2Zmc2V0ID0gcGFyYW1ldGVyc1N0YXJ0OworICAgIGluZm8uc3RhcnRMaW5lID0gdG9rZW5MaW5l
KCk7CisgICAgU291cmNlUGFyc2VNb2RlIGlubmVyUGFyc2VNb2RlID0gU291cmNlUGFyc2VNb2Rl
OjpBc3luY0dlbmVyYXRvckJvZHlNb2RlOworICAgIHsKKyAgICAgICAgQXV0b1BvcFNjb3BlUmVm
IGFzeW5jRnVuY3Rpb25Cb2R5U2NvcGUodGhpcywgcHVzaFNjb3BlKCkpOworICAgICAgICBhc3lu
Y0Z1bmN0aW9uQm9keVNjb3BlLT5zZXRTb3VyY2VQYXJzZU1vZGUoaW5uZXJQYXJzZU1vZGUpOwor
ICAgICAgICBTeW50YXhDaGVja2VyIHN5bnRheENoZWNrZXIoY29uc3RfY2FzdDxWTSo+KG1fdm0p
LCBtX2xleGVyLmdldCgpKTsKKyAgICAgICAgaWYgKGlzQXJyb3dGdW5jdGlvbkJvZHlFeHByZXNz
aW9uKSB7CisgICAgICAgICAgICBpZiAobV9kZWJ1Z2dlclBhcnNlRGF0YSkKKyAgICAgICAgICAg
ICAgICBmYWlsSWZGYWxzZShwYXJzZUFycm93RnVuY3Rpb25TaW5nbGVFeHByZXNzaW9uQm9keVNv
dXJjZUVsZW1lbnRzKGNvbnRleHQpLCAiQ2Fubm90IHBhcnNlIHRoZSBib2R5IG9mIGFzeW5jIGFy
cm93IGZ1bmN0aW9uIik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZmFpbElm
RmFsc2UocGFyc2VBcnJvd0Z1bmN0aW9uU2luZ2xlRXhwcmVzc2lvbkJvZHlTb3VyY2VFbGVtZW50
cyhzeW50YXhDaGVja2VyKSwgIkNhbm5vdCBwYXJzZSB0aGUgYm9keSBvZiBhc3luYyBhcnJvdyBm
dW5jdGlvbiIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKG1fZGVidWdnZXJQ
YXJzZURhdGEpCisgICAgICAgICAgICAgICAgZmFpbElmRmFsc2UocGFyc2VTb3VyY2VFbGVtZW50
cyhjb250ZXh0LCBtb2RlKSwgIkNhbm5vdCBwYXJzZSB0aGUgYm9keSBvZiBhc3luYyBmdW5jdGlv
biIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGZhaWxJZkZhbHNlKHBhcnNl
U291cmNlRWxlbWVudHMoc3ludGF4Q2hlY2tlciwgbW9kZSksICJDYW5ub3QgcGFyc2UgdGhlIGJv
ZHkgb2YgYXN5bmMgZnVuY3Rpb24iKTsKKyAgICAgICAgfQorICAgICAgICBwb3BTY29wZShhc3lu
Y0Z1bmN0aW9uQm9keVNjb3BlLCBUcmVlQnVpbGRlcjo6TmVlZHNGcmVlVmFyaWFibGVJbmZvKTsK
KyAgICB9CisgICAgaW5mby5ib2R5ID0gY29udGV4dC5jcmVhdGVGdW5jdGlvbk1ldGFkYXRhKHN0
YXJ0TG9jYXRpb24sIHRva2VuTG9jYXRpb24oKSwgc3RhcnRDb2x1bW4sIHRva2VuQ29sdW1uKCks
IGZ1bmN0aW9uS2V5d29yZFN0YXJ0LCBmdW5jdGlvbk5hbWVTdGFydCwgcGFyYW1ldGVyc1N0YXJ0
LCBzdHJpY3RNb2RlKCksIENvbnN0cnVjdG9yS2luZDo6Tm9uZSwgbV9zdXBlckJpbmRpbmcsIGlu
Zm8ucGFyYW1ldGVyQ291bnQsIGlubmVyUGFyc2VNb2RlLCBpc0Fycm93RnVuY3Rpb25Cb2R5RXhw
cmVzc2lvbik7CisKKyAgICBpbmZvLmVuZExpbmUgPSB0b2tlbkxpbmUoKTsKKyAgICBpbmZvLmVu
ZE9mZnNldCA9IGlzQXJyb3dGdW5jdGlvbkJvZHlFeHByZXNzaW9uID8gdG9rZW5Mb2NhdGlvbigp
LmVuZE9mZnNldCA6IG1fdG9rZW4ubV9kYXRhLm9mZnNldDsKKyAgICBpbmZvLnBhcmFtZXRlcnNT
dGFydENvbHVtbiA9IHN0YXJ0Q29sdW1uOworCisgICAgYXV0byBmdW5jdGlvbkV4cHIgPSBjb250
ZXh0LmNyZWF0ZUFzeW5jRnVuY3Rpb25Cb2R5KHN0YXJ0TG9jYXRpb24sIGluZm8sIGlubmVyUGFy
c2VNb2RlKTsKKyAgICBhdXRvIHN0YXRlbWVudCA9IGNvbnRleHQuY3JlYXRlRXhwclN0YXRlbWVu
dChzdGFydExvY2F0aW9uLCBmdW5jdGlvbkV4cHIsIHN0YXJ0LCBtX2xhc3RUb2tlbkVuZFBvc2l0
aW9uLmxpbmUpOworICAgIGNvbnRleHQuYXBwZW5kU3RhdGVtZW50KHNvdXJjZUVsZW1lbnRzLCBz
dGF0ZW1lbnQpOworICAgICAgICAKKyAgICByZXR1cm4gc291cmNlRWxlbWVudHM7Cit9CisgICAg
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgTGV4ZXJUeXBlPgogdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWls
ZGVyPiBUcmVlU3RhdGVtZW50IFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZVN0YXRlbWVudExpc3RJ
dGVtKFRyZWVCdWlsZGVyJiBjb250ZXh0LCBjb25zdCBJZGVudGlmaWVyKiYgZGlyZWN0aXZlLCB1
bnNpZ25lZCogZGlyZWN0aXZlTGl0ZXJhbExlbmd0aCkKIHsKICAgICAvLyBUaGUgZ3JhbW1hciBp
cyBkb2N1bWVudGVkIGhlcmU6CkBAIC0yMDA2LDYgKzIwNTcsMzcgQEAgdGVtcGxhdGUgPGNsYXNz
IFRyZWVCdWlsZGVyPiBUcmVlRnVuY3Rpb25Cb2R5IFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUZ1
bmN0aW9uQm8KICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVGdW5jdGlvbk1ldGFkYXRhKHN0YXJ0
TG9jYXRpb24sIHRva2VuTG9jYXRpb24oKSwgc3RhcnRDb2x1bW4sIGVuZENvbHVtbiwgZnVuY3Rp
b25LZXl3b3JkU3RhcnQsIGZ1bmN0aW9uTmFtZVN0YXJ0LCBwYXJhbWV0ZXJzU3RhcnQsIHN0cmlj
dE1vZGUoKSwgY29uc3RydWN0b3JLaW5kLCBmdW5jdGlvblN1cGVyQmluZGluZywgcGFyYW1ldGVy
Q291bnQsIHBhcnNlTW9kZSwgaXNBcnJvd0Z1bmN0aW9uQm9keUV4cHJlc3Npb24pOwogfQogCitz
dGF0aWMgY29uc3QgY2hhciogc3RyaW5nQXJ0aWNsZUZvckZ1bmN0aW9uTW9kZShTb3VyY2VQYXJz
ZU1vZGUgbW9kZSkKK3sKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNlIFNvdXJjZVBhcnNl
TW9kZTo6R2V0dGVyTW9kZToKKyAgICBjYXNlIFNvdXJjZVBhcnNlTW9kZTo6U2V0dGVyTW9kZToK
KyAgICBjYXNlIFNvdXJjZVBhcnNlTW9kZTo6Tm9ybWFsRnVuY3Rpb25Nb2RlOgorICAgIGNhc2Ug
U291cmNlUGFyc2VNb2RlOjpNZXRob2RNb2RlOgorICAgIGNhc2UgU291cmNlUGFyc2VNb2RlOjpH
ZW5lcmF0b3JCb2R5TW9kZToKKyAgICBjYXNlIFNvdXJjZVBhcnNlTW9kZTo6R2VuZXJhdG9yV3Jh
cHBlckZ1bmN0aW9uTW9kZToKKyAgICBjYXNlIFNvdXJjZVBhcnNlTW9kZTo6R2VuZXJhdG9yV3Jh
cHBlck1ldGhvZE1vZGU6CisgICAgICAgIHJldHVybiAiYSAiOworICAgIGNhc2UgU291cmNlUGFy
c2VNb2RlOjpBcnJvd0Z1bmN0aW9uTW9kZToKKyAgICBjYXNlIFNvdXJjZVBhcnNlTW9kZTo6QXN5
bmNGdW5jdGlvbk1vZGU6CisgICAgY2FzZSBTb3VyY2VQYXJzZU1vZGU6OkFzeW5jRnVuY3Rpb25C
b2R5TW9kZToKKyAgICBjYXNlIFNvdXJjZVBhcnNlTW9kZTo6QXN5bmNNZXRob2RNb2RlOgorICAg
IGNhc2UgU291cmNlUGFyc2VNb2RlOjpBc3luY0Fycm93RnVuY3Rpb25Cb2R5TW9kZToKKyAgICBj
YXNlIFNvdXJjZVBhcnNlTW9kZTo6QXN5bmNBcnJvd0Z1bmN0aW9uTW9kZToKKyAgICBjYXNlIFNv
dXJjZVBhcnNlTW9kZTo6QXN5bmNHZW5lcmF0b3JXcmFwcGVyRnVuY3Rpb25Nb2RlOgorICAgIGNh
c2UgU291cmNlUGFyc2VNb2RlOjpBc3luY0dlbmVyYXRvckJvZHlNb2RlOgorICAgIGNhc2UgU291
cmNlUGFyc2VNb2RlOjpBc3luY0dlbmVyYXRvcldyYXBwZXJNZXRob2RNb2RlOgorICAgICAgICBy
ZXR1cm4gImFuICI7CisgICAgY2FzZSBTb3VyY2VQYXJzZU1vZGU6OlByb2dyYW1Nb2RlOgorICAg
IGNhc2UgU291cmNlUGFyc2VNb2RlOjpNb2R1bGVBbmFseXplTW9kZToKKyAgICBjYXNlIFNvdXJj
ZVBhcnNlTW9kZTo6TW9kdWxlRXZhbHVhdGVNb2RlOgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gIiI7CisgICAgfQorICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisgICAgCiBzdGF0aWMg
Y29uc3QgY2hhciogc3RyaW5nRm9yRnVuY3Rpb25Nb2RlKFNvdXJjZVBhcnNlTW9kZSBtb2RlKQog
ewogICAgIHN3aXRjaCAobW9kZSkgewpAQCAtMjAzMiw2ICsyMTE0LDExIEBAIHN0YXRpYyBjb25z
dCBjaGFyKiBzdHJpbmdGb3JGdW5jdGlvbk1vZGUoU291cmNlUGFyc2VNb2RlIG1vZGUpCiAgICAg
Y2FzZSBTb3VyY2VQYXJzZU1vZGU6OkFzeW5jQXJyb3dGdW5jdGlvbkJvZHlNb2RlOgogICAgIGNh
c2UgU291cmNlUGFyc2VNb2RlOjpBc3luY0Fycm93RnVuY3Rpb25Nb2RlOgogICAgICAgICByZXR1
cm4gImFzeW5jIGFycm93IGZ1bmN0aW9uIjsKKyAgICBjYXNlIFNvdXJjZVBhcnNlTW9kZTo6QXN5
bmNHZW5lcmF0b3JXcmFwcGVyRnVuY3Rpb25Nb2RlOgorICAgIGNhc2UgU291cmNlUGFyc2VNb2Rl
OjpBc3luY0dlbmVyYXRvckJvZHlNb2RlOgorICAgICAgICByZXR1cm4gImFzeW5jIGdlbmVyYXRv
ciBmdW5jdGlvbiI7CisgICAgY2FzZSBTb3VyY2VQYXJzZU1vZGU6OkFzeW5jR2VuZXJhdG9yV3Jh
cHBlck1ldGhvZE1vZGU6CisgICAgICAgIHJldHVybiAiYXN5bmMgZ2VuZXJhdG9yIG1ldGhvZCI7
CiAgICAgY2FzZSBTb3VyY2VQYXJzZU1vZGU6OlByb2dyYW1Nb2RlOgogICAgIGNhc2UgU291cmNl
UGFyc2VNb2RlOjpNb2R1bGVBbmFseXplTW9kZToKICAgICBjYXNlIFNvdXJjZVBhcnNlTW9kZTo6
TW9kdWxlRXZhbHVhdGVNb2RlOgpAQCAtMjMwMyw5ICsyMzkwLDkgQEAgdGVtcGxhdGUgPGNsYXNz
IFRyZWVCdWlsZGVyPiBib29sIFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZUZ1bmN0aW9uSW5mbyhU
cmVlQnVpbGQKICAgICAgICAgICAgICAgICBmdW5jdGlvbkluZm8ubmFtZSA9IG1fdG9rZW4ubV9k
YXRhLmlkZW50OwogICAgICAgICAgICAgICAgIG1fcGFyc2VyU3RhdGUubGFzdEZ1bmN0aW9uTmFt
ZSA9IGZ1bmN0aW9uSW5mby5uYW1lOwogICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShpc0Rp
c2FsbG93ZWRBd2FpdEZ1bmN0aW9uTmFtZSkpCi0gICAgICAgICAgICAgICAgICAgIHNlbWFudGlj
RmFpbElmVHJ1ZShmdW5jdGlvbkRlZmluaXRpb25UeXBlID09IEZ1bmN0aW9uRGVmaW5pdGlvblR5
cGU6OkRlY2xhcmF0aW9uIHx8IGlzQXN5bmNGdW5jdGlvbldyYXBwZXJQYXJzZU1vZGUobW9kZSks
ICJDYW5ub3QgZGVjbGFyZSBmdW5jdGlvbiBuYW1lZCAnYXdhaXQnICIsIGlzRGlzYWxsb3dlZEF3
YWl0RnVuY3Rpb25OYW1lUmVhc29uKTsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChpc0FzeW5j
RnVuY3Rpb25XcmFwcGVyUGFyc2VNb2RlKG1vZGUpICYmIG1hdGNoKEFXQUlUKSAmJiBmdW5jdGlv
bkRlZmluaXRpb25UeXBlID09IEZ1bmN0aW9uRGVmaW5pdGlvblR5cGU6OkV4cHJlc3Npb24pCi0g
ICAgICAgICAgICAgICAgICAgIHNlbWFudGljRmFpbCgiQ2Fubm90IGRlY2xhcmUgYXN5bmMgZnVu
Y3Rpb24gbmFtZWQgJ2F3YWl0JyIpOworICAgICAgICAgICAgICAgICAgICBzZW1hbnRpY0ZhaWxJ
ZlRydWUoZnVuY3Rpb25EZWZpbml0aW9uVHlwZSA9PSBGdW5jdGlvbkRlZmluaXRpb25UeXBlOjpE
ZWNsYXJhdGlvbiB8fCBpc0FzeW5jRnVuY3Rpb25PckFzeW5jR2VuZXJhdG9yV3JhcHBlclBhcnNl
TW9kZShtb2RlKSwgIkNhbm5vdCBkZWNsYXJlIGZ1bmN0aW9uIG5hbWVkICdhd2FpdCcgIiwgaXNE
aXNhbGxvd2VkQXdhaXRGdW5jdGlvbk5hbWVSZWFzb24pOworICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKGlzQXN5bmNGdW5jdGlvbk9yQXN5bmNHZW5lcmF0b3JXcmFwcGVyUGFyc2VNb2RlKG1vZGUp
ICYmIG1hdGNoKEFXQUlUKSAmJiBmdW5jdGlvbkRlZmluaXRpb25UeXBlID09IEZ1bmN0aW9uRGVm
aW5pdGlvblR5cGU6OkV4cHJlc3Npb24pCisgICAgICAgICAgICAgICAgICAgIHNlbWFudGljRmFp
bCgiQ2Fubm90IGRlY2xhcmUgIiwgc3RyaW5nRm9yRnVuY3Rpb25Nb2RlKG1vZGUpLCAiIG5hbWVk
ICdhd2FpdCciKTsKICAgICAgICAgICAgICAgICBlbHNlIGlmIChpc0dlbmVyYXRvcldyYXBwZXJQ
YXJzZU1vZGUobW9kZSkgJiYgbWF0Y2goWUlFTEQpICYmIGZ1bmN0aW9uRGVmaW5pdGlvblR5cGUg
PT0gRnVuY3Rpb25EZWZpbml0aW9uVHlwZTo6RXhwcmVzc2lvbikKICAgICAgICAgICAgICAgICAg
ICAgc2VtYW50aWNGYWlsKCJDYW5ub3QgZGVjbGFyZSBnZW5lcmF0b3IgZnVuY3Rpb24gbmFtZWQg
J3lpZWxkJyIpOwogICAgICAgICAgICAgICAgIG5leHQoKTsKQEAgLTIzODcsMTEgKzI0NzQsOSBA
QCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IGJvb2wgUGFyc2VyPExleGVyVHlwZT46OnBh
cnNlRnVuY3Rpb25JbmZvKFRyZWVCdWlsZAogICAgIGlmIChpc0dlbmVyYXRvck9yQXN5bmNGdW5j
dGlvbldyYXBwZXJQYXJzZU1vZGUobW9kZSkpIHsKICAgICAgICAgQXV0b1BvcFNjb3BlUmVmIGdl
bmVyYXRvckJvZHlTY29wZSh0aGlzLCBwdXNoU2NvcGUoKSk7CiAgICAgICAgIFNvdXJjZVBhcnNl
TW9kZSBpbm5lclBhcnNlTW9kZSA9IFNvdXJjZVBhcnNlTW9kZTo6R2VuZXJhdG9yQm9keU1vZGU7
Ci0gICAgICAgIGlmIChpc0FzeW5jRnVuY3Rpb25XcmFwcGVyUGFyc2VNb2RlKG1vZGUpKSB7Ci0g
ICAgICAgICAgICBpbm5lclBhcnNlTW9kZSA9IG1vZGUgPT0gU291cmNlUGFyc2VNb2RlOjpBc3lu
Y0Fycm93RnVuY3Rpb25Nb2RlCi0gICAgICAgICAgICAgICAgPyBTb3VyY2VQYXJzZU1vZGU6OkFz
eW5jQXJyb3dGdW5jdGlvbkJvZHlNb2RlCi0gICAgICAgICAgICAgICAgOiBTb3VyY2VQYXJzZU1v
ZGU6OkFzeW5jRnVuY3Rpb25Cb2R5TW9kZTsKLSAgICAgICAgfQorICAgICAgICBpZiAoaXNBc3lu
Y0Z1bmN0aW9uT3JBc3luY0dlbmVyYXRvcldyYXBwZXJQYXJzZU1vZGUobW9kZSkpCisgICAgICAg
ICAgICBpbm5lclBhcnNlTW9kZSA9IGdldEFzeW5GdW5jdGlvbkJvZHlQYXJzZU1vZGUobW9kZSk7
CisKICAgICAgICAgZ2VuZXJhdG9yQm9keVNjb3BlLT5zZXRTb3VyY2VQYXJzZU1vZGUoaW5uZXJQ
YXJzZU1vZGUpOwogICAgICAgICBnZW5lcmF0b3JCb2R5U2NvcGUtPnNldENvbnN0cnVjdG9yS2lu
ZChDb25zdHJ1Y3RvcktpbmQ6Ok5vbmUpOwogICAgICAgICBnZW5lcmF0b3JCb2R5U2NvcGUtPnNl
dEV4cGVjdGVkU3VwZXJCaW5kaW5nKGV4cGVjdGVkU3VwZXJCaW5kaW5nKTsKQEAgLTI0MTYsNyAr
MjUwMSw3IEBAIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gYm9vbCBQYXJzZXI8TGV4ZXJU
eXBlPjo6cGFyc2VGdW5jdGlvbkluZm8oVHJlZUJ1aWxkCiAgICAgY29udGV4dC5zZXRFbmRPZmZz
ZXQoZnVuY3Rpb25JbmZvLmJvZHksIG1fbGV4ZXItPmN1cnJlbnRPZmZzZXQoKSk7CiAgICAgaWYg
KGZ1bmN0aW9uU2NvcGUtPnN0cmljdE1vZGUoKSAmJiByZXF1aXJlbWVudHMgIT0gRnVuY3Rpb25O
YW1lUmVxdWlyZW1lbnRzOjpVbm5hbWVkKSB7CiAgICAgICAgIEFTU0VSVChmdW5jdGlvbkluZm8u
bmFtZSk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKFNvdXJjZVBhcnNlTW9kZVNldChTb3VyY2VQ
YXJzZU1vZGU6Ok5vcm1hbEZ1bmN0aW9uTW9kZSwgU291cmNlUGFyc2VNb2RlOjpNZXRob2RNb2Rl
LCBTb3VyY2VQYXJzZU1vZGU6OkFycm93RnVuY3Rpb25Nb2RlLCBTb3VyY2VQYXJzZU1vZGU6Okdl
bmVyYXRvckJvZHlNb2RlLCBTb3VyY2VQYXJzZU1vZGU6OkdlbmVyYXRvcldyYXBwZXJGdW5jdGlv
bk1vZGUpLmNvbnRhaW5zKG1vZGUpIHx8IGlzQXN5bmNGdW5jdGlvbldyYXBwZXJQYXJzZU1vZGUo
bW9kZSkpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChTb3VyY2VQYXJzZU1vZGVTZXQoU291cmNl
UGFyc2VNb2RlOjpOb3JtYWxGdW5jdGlvbk1vZGUsIFNvdXJjZVBhcnNlTW9kZTo6TWV0aG9kTW9k
ZSwgU291cmNlUGFyc2VNb2RlOjpBcnJvd0Z1bmN0aW9uTW9kZSwgU291cmNlUGFyc2VNb2RlOjpH
ZW5lcmF0b3JCb2R5TW9kZSwgU291cmNlUGFyc2VNb2RlOjpHZW5lcmF0b3JXcmFwcGVyRnVuY3Rp
b25Nb2RlKS5jb250YWlucyhtb2RlKSB8fCBpc0FzeW5jRnVuY3Rpb25PckFzeW5jR2VuZXJhdG9y
V3JhcHBlclBhcnNlTW9kZShtb2RlKSk7CiAgICAgICAgIHNlbWFudGljRmFpbElmVHJ1ZShtX3Zt
LT5wcm9wZXJ0eU5hbWVzLT5hcmd1bWVudHMgPT0gKmZ1bmN0aW9uSW5mby5uYW1lLCAiJyIsIGZ1
bmN0aW9uSW5mby5uYW1lLT5pbXBsKCksICInIGlzIG5vdCBhIHZhbGlkIGZ1bmN0aW9uIG5hbWUg
aW4gc3RyaWN0IG1vZGUiKTsKICAgICAgICAgc2VtYW50aWNGYWlsSWZUcnVlKG1fdm0tPnByb3Bl
cnR5TmFtZXMtPmV2YWwgPT0gKmZ1bmN0aW9uSW5mby5uYW1lLCAiJyIsIGZ1bmN0aW9uSW5mby5u
YW1lLT5pbXBsKCksICInIGlzIG5vdCBhIHZhbGlkIGZ1bmN0aW9uIG5hbWUgaW4gc3RyaWN0IG1v
ZGUiKTsKICAgICB9CkBAIC0yNTQyLDYgKzI2MjcsOSBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1
aWxkZXI+IFRyZWVTdGF0ZW1lbnQgUGFyc2VyPExleGVyVHlwZT46OnBhcnNlQXN5bmNGdW5jdGlv
bgogICAgIG5leHQoKTsKICAgICBQYXJzZXJGdW5jdGlvbkluZm88VHJlZUJ1aWxkZXI+IGZ1bmN0
aW9uSW5mbzsKICAgICBTb3VyY2VQYXJzZU1vZGUgcGFyc2VNb2RlID0gU291cmNlUGFyc2VNb2Rl
OjpBc3luY0Z1bmN0aW9uTW9kZTsKKyAgICBpZiAoT3B0aW9uczo6dXNlQXN5bmNJdGVyYXRvcigp
ICYmIGNvbnN1bWUoVElNRVMpKQorICAgICAgICBwYXJzZU1vZGUgPSBTb3VyY2VQYXJzZU1vZGU6
OkFzeW5jR2VuZXJhdG9yV3JhcHBlckZ1bmN0aW9uTW9kZTsKKwogICAgIEZ1bmN0aW9uTmFtZVJl
cXVpcmVtZW50cyByZXF1aXJlbWVudHMgPSBGdW5jdGlvbk5hbWVSZXF1aXJlbWVudHM6Ok5hbWVk
OwogICAgIGlmIChkZWNsYXJhdGlvbkRlZmF1bHRDb250ZXh0ID09IERlY2xhcmF0aW9uRGVmYXVs
dENvbnRleHQ6OkV4cG9ydERlZmF1bHQpIHsKICAgICAgICAgLy8gVW5kZXIgdGhlICJleHBvcnQg
ZGVmYXVsdCIgY29udGV4dCwgZnVuY3Rpb24gZGVjbGFyYXRpb24gZG9lcyBub3QgcmVxdWlyZSB0
aGUgZnVuY3Rpb24gbmFtZS4KQEAgLTI3MDMsMTEgKzI3OTEsOSBAQCB0ZW1wbGF0ZSA8Y2xhc3Mg
VHJlZUJ1aWxkZXI+IFRyZWVDbGFzc0V4cHJlc3Npb24gUGFyc2VyPExleGVyVHlwZT46OnBhcnNl
Q2xhc3MoVAogICAgICAgICBUcmVlRXhwcmVzc2lvbiBjb21wdXRlZFByb3BlcnR5TmFtZSA9IDA7
CiAgICAgICAgIGJvb2wgaXNHZXR0ZXIgPSBmYWxzZTsKICAgICAgICAgYm9vbCBpc1NldHRlciA9
IGZhbHNlOwotICAgICAgICBib29sIGlzR2VuZXJhdG9yID0gZmFsc2U7Ci0gICAgICAgIGJvb2wg
aXNBc3luYyA9IGZhbHNlOwotICAgICAgICBib29sIGlzQXN5bmNNZXRob2QgPSBmYWxzZTsKKyAg
ICAgICAgU291cmNlUGFyc2VNb2RlIHBhcnNlTW9kZSA9IFNvdXJjZVBhcnNlTW9kZTo6TWV0aG9k
TW9kZTsKICAgICAgICAgaWYgKGNvbnN1bWUoVElNRVMpKQotICAgICAgICAgICAgaXNHZW5lcmF0
b3IgPSB0cnVlOworICAgICAgICAgICAgcGFyc2VNb2RlID0gU291cmNlUGFyc2VNb2RlOjpHZW5l
cmF0b3JXcmFwcGVyTWV0aG9kTW9kZTsKIAogcGFyc2VNZXRob2Q6CiAgICAgICAgIHN3aXRjaCAo
bV90b2tlbi5tX3R5cGUpIHsKQEAgLTI3MTgsMjEgKzI4MDQsMjYgQEAgcGFyc2VNZXRob2Q6CiAg
ICAgICAgICAgICBuZXh0KCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBU1lO
QzoKLSAgICAgICAgICAgIGlzQXN5bmMgPSAhaXNHZW5lcmF0b3IgJiYgIWlzQXN5bmNNZXRob2Q7
CisgICAgICAgICAgICBpZiAoIWlzR2VuZXJhdG9yTWV0aG9kUGFyc2VNb2RlKHBhcnNlTW9kZSkg
JiYgIWlzQXN5bmNNZXRob2RQYXJzZU1vZGUocGFyc2VNb2RlKSkgeworICAgICAgICAgICAgICAg
IGlkZW50ID0gbV90b2tlbi5tX2RhdGEuaWRlbnQ7CisgICAgICAgICAgICAgICAgbmV4dCgpOwor
ICAgICAgICAgICAgICAgIGlmIChtYXRjaChPUEVOUEFSRU4pIHx8IG1hdGNoKENPTE9OKSB8fCBt
YXRjaChFUVVBTCkgfHwgbV9sZXhlci0+cHJldlRlcm1pbmF0b3IoKSkKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnVzZUFzeW5jSXRlcmF0
b3IoKSAmJiBVTkxJS0VMWShjb25zdW1lKFRJTUVTKSkpCisgICAgICAgICAgICAgICAgICAgIHBh
cnNlTW9kZSA9IFNvdXJjZVBhcnNlTW9kZTo6QXN5bmNHZW5lcmF0b3JXcmFwcGVyTWV0aG9kTW9k
ZTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHBhcnNlTW9kZSA9
IFNvdXJjZVBhcnNlTW9kZTo6QXN5bmNNZXRob2RNb2RlOworICAgICAgICAgICAgICAgIGdvdG8g
cGFyc2VNZXRob2Q7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBGQUxMVEhST1VHSDsKICAg
ICAgICAgY2FzZSBJREVOVDoKICAgICAgICAgY2FzZSBBV0FJVDoKICAgICAgICAgICAgIGlkZW50
ID0gbV90b2tlbi5tX2RhdGEuaWRlbnQ7CiAgICAgICAgICAgICBBU1NFUlQoaWRlbnQpOwogICAg
ICAgICAgICAgbmV4dCgpOwotICAgICAgICAgICAgaWYgKCFpc0dlbmVyYXRvciAmJiAhaXNBc3lu
Y01ldGhvZCAmJiAobWF0Y2hJZGVudGlmaWVyT3JLZXl3b3JkKCkgfHwgbWF0Y2goU1RSSU5HKSB8
fCBtYXRjaChET1VCTEUpIHx8IG1hdGNoKElOVEVHRVIpIHx8IG1hdGNoKE9QRU5CUkFDS0VUKSkp
IHsKKyAgICAgICAgICAgIGlmIChwYXJzZU1vZGUgPT0gU291cmNlUGFyc2VNb2RlOjpNZXRob2RN
b2RlICYmIChtYXRjaElkZW50aWZpZXJPcktleXdvcmQoKSB8fCBtYXRjaChTVFJJTkcpIHx8IG1h
dGNoKERPVUJMRSkgfHwgbWF0Y2goSU5URUdFUikgfHwgbWF0Y2goT1BFTkJSQUNLRVQpKSkgewog
ICAgICAgICAgICAgICAgIGlzR2V0dGVyID0gKmlkZW50ID09IHByb3BlcnR5TmFtZXMuZ2V0Owog
ICAgICAgICAgICAgICAgIGlzU2V0dGVyID0gKmlkZW50ID09IHByb3BlcnR5TmFtZXMuc2V0Owot
Ci0gICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKGlzQXN5bmMgJiYgIW1fbGV4ZXItPnByZXZU
ZXJtaW5hdG9yKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlzQXN5bmNNZXRob2QgPSB0cnVl
OwotICAgICAgICAgICAgICAgICAgICBnb3RvIHBhcnNlTWV0aG9kOwotICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIERPVUJM
RToKQEAgLTI3NjMsMTggKzI4NTQsMTcgQEAgcGFyc2VNZXRob2Q6CiAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICBQYXJzZXJGdW5jdGlvbkluZm88VHJlZUJ1aWxkZXI+IG1ldGhvZEluZm87
CiAgICAgICAgICAgICBib29sIGlzQ29uc3RydWN0b3IgPSAhaXNTdGF0aWNNZXRob2QgJiYgKmlk
ZW50ID09IHByb3BlcnR5TmFtZXMuY29uc3RydWN0b3I7Ci0gICAgICAgICAgICBTb3VyY2VQYXJz
ZU1vZGUgcGFyc2VNb2RlID0gU291cmNlUGFyc2VNb2RlOjpNZXRob2RNb2RlOwotICAgICAgICAg
ICAgaWYgKGlzQXN5bmNNZXRob2QpIHsKKyAgICAgICAgICAgIGlmIChpc0FzeW5jTWV0aG9kUGFy
c2VNb2RlKHBhcnNlTW9kZSkgfHwgaXNBc3luY0dlbmVyYXRvck1ldGhvZFBhcnNlTW9kZShwYXJz
ZU1vZGUpKSB7CiAgICAgICAgICAgICAgICAgaXNDb25zdHJ1Y3RvciA9IGZhbHNlOwotICAgICAg
ICAgICAgICAgIHBhcnNlTW9kZSA9IFNvdXJjZVBhcnNlTW9kZTo6QXN5bmNNZXRob2RNb2RlOwot
ICAgICAgICAgICAgICAgIHNlbWFudGljRmFpbElmVHJ1ZSgqaWRlbnQgPT0gbV92bS0+cHJvcGVy
dHlOYW1lcy0+cHJvdG90eXBlLCAiQ2Fubm90IGRlY2xhcmUgYW4gYXN5bmMgbWV0aG9kIG5hbWVk
ICdwcm90b3R5cGUnIik7Ci0gICAgICAgICAgICAgICAgc2VtYW50aWNGYWlsSWZUcnVlKCppZGVu
dCA9PSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5jb25zdHJ1Y3RvciwgIkNhbm5vdCBkZWNsYXJlIGFu
IGFzeW5jIG1ldGhvZCBuYW1lZCAnY29uc3RydWN0b3InIik7Ci0gICAgICAgICAgICB9IGVsc2Ug
aWYgKGlzR2VuZXJhdG9yKSB7CisgICAgICAgICAgICAgICAgc2VtYW50aWNGYWlsSWZUcnVlKCpp
ZGVudCA9PSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsICJDYW5ub3QgZGVjbGFyZSAi
LCBzdHJpbmdBcnRpY2xlRm9yRnVuY3Rpb25Nb2RlKHBhcnNlTW9kZSksIHN0cmluZ0ZvckZ1bmN0
aW9uTW9kZShwYXJzZU1vZGUpLCAiIG5hbWVkICdwcm90b3R5cGUnIik7CisgICAgICAgICAgICAg
ICAgc2VtYW50aWNGYWlsSWZUcnVlKCppZGVudCA9PSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5jb25z
dHJ1Y3RvciwgIkNhbm5vdCBkZWNsYXJlICIsIHN0cmluZ0FydGljbGVGb3JGdW5jdGlvbk1vZGUo
cGFyc2VNb2RlKSwgc3RyaW5nRm9yRnVuY3Rpb25Nb2RlKHBhcnNlTW9kZSksICIgbmFtZWQgJ2Nv
bnN0cnVjdG9yJyIpOworICAgICAgICAgICAgfSBlbHNlIGlmIChpc0dlbmVyYXRvck1ldGhvZFBh
cnNlTW9kZShwYXJzZU1vZGUpKSB7CiAgICAgICAgICAgICAgICAgaXNDb25zdHJ1Y3RvciA9IGZh
bHNlOwogICAgICAgICAgICAgICAgIHBhcnNlTW9kZSA9IFNvdXJjZVBhcnNlTW9kZTo6R2VuZXJh
dG9yV3JhcHBlck1ldGhvZE1vZGU7CiAgICAgICAgICAgICAgICAgc2VtYW50aWNGYWlsSWZUcnVl
KCppZGVudCA9PSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsICJDYW5ub3QgZGVjbGFy
ZSBhIGdlbmVyYXRvciBuYW1lZCAncHJvdG90eXBlJyIpOwogICAgICAgICAgICAgICAgIHNlbWFu
dGljRmFpbElmVHJ1ZSgqaWRlbnQgPT0gbV92bS0+cHJvcGVydHlOYW1lcy0+Y29uc3RydWN0b3Is
ICJDYW5ub3QgZGVjbGFyZSBhIGdlbmVyYXRvciBuYW1lZCAnY29uc3RydWN0b3InIik7CiAgICAg
ICAgICAgICB9CisKICAgICAgICAgICAgIG1ldGhvZEluZm8ubmFtZSA9IGlzQ29uc3RydWN0b3Ig
PyBpbmZvLmNsYXNzTmFtZSA6IGlkZW50OwogICAgICAgICAgICAgZmFpbElmRmFsc2UoKHBhcnNl
RnVuY3Rpb25JbmZvKGNvbnRleHQsIEZ1bmN0aW9uTmFtZVJlcXVpcmVtZW50czo6VW5uYW1lZCwg
cGFyc2VNb2RlLCBmYWxzZSwgaXNDb25zdHJ1Y3RvciA/IGNvbnN0cnVjdG9yS2luZCA6IENvbnN0
cnVjdG9yS2luZDo6Tm9uZSwgU3VwZXJCaW5kaW5nOjpOZWVkZWQsIG1ldGhvZFN0YXJ0LCBtZXRo
b2RJbmZvLCBGdW5jdGlvbkRlZmluaXRpb25UeXBlOjpNZXRob2QpKSwgIkNhbm5vdCBwYXJzZSB0
aGlzIG1ldGhvZCIpOwogCkBAIC0zNzYxLDE5ICszODUxLDM4IEBAIHRlbXBsYXRlIDxjbGFzcyBU
cmVlQnVpbGRlcj4gVHJlZUV4cHJlc3Npb24gUGFyc2VyPExleGVyVHlwZT46OnBhcnNlQmluYXJ5
RXhwcmVzCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGV4ZXJUeXBlPgogdGVtcGxhdGUgPGNsYXNzIFRy
ZWVCdWlsZGVyPiBUcmVlUHJvcGVydHkgUGFyc2VyPExleGVyVHlwZT46OnBhcnNlUHJvcGVydHko
VHJlZUJ1aWxkZXImIGNvbnRleHQsIGJvb2wgY29tcGxldGUpCiB7CisgICAgU291cmNlUGFyc2VN
b2RlIHBhcnNlTW9kZSA9IFNvdXJjZVBhcnNlTW9kZTo6TWV0aG9kTW9kZTsKICAgICBib29sIHdh
c0lkZW50ID0gZmFsc2U7Ci0gICAgYm9vbCBpc0FzeW5jID0gZmFsc2U7Ci0gICAgYm9vbCBpc0dl
bmVyYXRvciA9IGZhbHNlOwogICAgIGJvb2wgaXNDbGFzc1Byb3BlcnR5ID0gZmFsc2U7CiAgICAg
Ym9vbCBpc1N0YXRpY01ldGhvZCA9IGZhbHNlOwotICAgIGJvb2wgaXNBc3luY01ldGhvZCA9IGZh
bHNlOworICAgIGJvb2wgaXNJZGVudFNldCA9IGZhbHNlOworICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50OworICAgIHVuc2lnbmVkIGdldHRlck9yU2V0dGVyU3RhcnRPZmZzZXQ7CisgICAgSlNU
b2tlbiBpZGVudFRva2VuOworCiAgICAgaWYgKGNvbnN1bWUoVElNRVMpKQotICAgICAgICBpc0dl
bmVyYXRvciA9IHRydWU7CisgICAgICAgIHBhcnNlTW9kZSA9IFNvdXJjZVBhcnNlTW9kZTo6R2Vu
ZXJhdG9yV3JhcHBlck1ldGhvZE1vZGU7CiAKIHBhcnNlUHJvcGVydHk6CiAgICAgc3dpdGNoICht
X3Rva2VuLm1fdHlwZSkgewogICAgIGNhc2UgQVNZTkM6Ci0gICAgICAgIGlzQXN5bmMgPSAhaXNH
ZW5lcmF0b3IgJiYgIWlzQXN5bmNNZXRob2Q7CisgICAgICAgIGlmIChwYXJzZU1vZGUgPT0gU291
cmNlUGFyc2VNb2RlOjpNZXRob2RNb2RlKSB7CisgICAgICAgICAgICBTYXZlUG9pbnQgc2F2ZVBv
aW50ID0gY3JlYXRlU2F2ZVBvaW50KCk7CisgICAgICAgICAgICBuZXh0KCk7CisKKyAgICAgICAg
ICAgIGlmIChtYXRjaChDT0xPTikgfHwgbWF0Y2goT1BFTlBBUkVOKSB8fCBtYXRjaChDT01NQSkg
fHwgbWF0Y2goQ0xPU0VCUkFDRSkpIHsKKyAgICAgICAgICAgICAgICByZXN0b3JlU2F2ZVBvaW50
KHNhdmVQb2ludCk7CisgICAgICAgICAgICAgICAgd2FzSWRlbnQgPSB0cnVlOworICAgICAgICAg
ICAgICAgIGdvdG8gbmFtZWRQcm9wZXJ0eTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ZmFpbElmVHJ1ZShtX2xleGVyLT5wcmV2VGVybWluYXRvcigpLCAiRXhwZWN0ZWQgYSBwcm9wZXJ0
eSBuYW1lIGZvbGxvd2luZyBrZXl3b3JkICdhc3luYyciKTsKKyAgICAgICAgICAgIGlmIChPcHRp
b25zOjp1c2VBc3luY0l0ZXJhdG9yKCkgJiYgVU5MSUtFTFkoY29uc3VtZShUSU1FUykpKQorICAg
ICAgICAgICAgICAgIHBhcnNlTW9kZSA9IFNvdXJjZVBhcnNlTW9kZTo6QXN5bmNHZW5lcmF0b3JX
cmFwcGVyTWV0aG9kTW9kZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBwYXJz
ZU1vZGUgPSBTb3VyY2VQYXJzZU1vZGU6OkFzeW5jTWV0aG9kTW9kZTsKKyAgICAgICAgICAgIGdv
dG8gcGFyc2VQcm9wZXJ0eTsKKyAgICAgICAgfQogICAgICAgICBGQUxMVEhST1VHSDsKICAgICBj
YXNlIElERU5UOgogICAgIGNhc2UgWUlFTEQ6CkBAIC0zNzgyLDE2ICszODkxLDE2IEBAIHBhcnNl
UHJvcGVydHk6CiAgICAgICAgIEZBTExUSFJPVUdIOwogICAgIGNhc2UgU1RSSU5HOiB7CiBuYW1l
ZFByb3BlcnR5OgotICAgICAgICBKU1Rva2VuIGlkZW50VG9rZW4gPSBtX3Rva2VuOwotICAgICAg
ICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9IG1fdG9rZW4ubV9kYXRhLmlkZW50OwotICAgICAg
ICB1bnNpZ25lZCBnZXR0ZXJPclNldHRlclN0YXJ0T2Zmc2V0ID0gdG9rZW5TdGFydCgpOworICAg
ICAgICBpZGVudFRva2VuID0gbV90b2tlbjsKKyAgICAgICAgaWRlbnQgPSBtX3Rva2VuLm1fZGF0
YS5pZGVudDsKKyAgICAgICAgZ2V0dGVyT3JTZXR0ZXJTdGFydE9mZnNldCA9IHRva2VuU3RhcnQo
KTsKIAotICAgICAgICBpZiAoY29tcGxldGUgfHwgKHdhc0lkZW50ICYmICFpc0dlbmVyYXRvciAm
JiAoKmlkZW50ID09IG1fdm0tPnByb3BlcnR5TmFtZXMtPmdldCB8fCAqaWRlbnQgPT0gbV92bS0+
cHJvcGVydHlOYW1lcy0+c2V0KSkgfHwgaXNBc3luYykKKyAgICAgICAgaWYgKGNvbXBsZXRlIHx8
ICh3YXNJZGVudCAmJiAhaXNHZW5lcmF0b3JNZXRob2RQYXJzZU1vZGUocGFyc2VNb2RlKSAgJiYg
KCppZGVudCA9PSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5nZXQgfHwgKmlkZW50ID09IG1fdm0tPnBy
b3BlcnR5TmFtZXMtPnNldCkpKQogICAgICAgICAgICAgbmV4dEV4cGVjdElkZW50aWZpZXIoTGV4
ZXJGbGFnc0lnbm9yZVJlc2VydmVkV29yZHMpOwotICAgICAgICBlbHNlCisgICAgICAgIGVsc2Ug
aWYgKFVOTElLRUxZKCFpc0lkZW50U2V0KSkKICAgICAgICAgICAgIG5leHRFeHBlY3RJZGVudGlm
aWVyKExleGVyRmxhZ3NJZ25vcmVSZXNlcnZlZFdvcmRzIHwgVHJlZUJ1aWxkZXI6OkRvbnRCdWls
ZEtleXdvcmRzKTsKIAotICAgICAgICBpZiAoIWlzR2VuZXJhdG9yICYmICFpc0FzeW5jTWV0aG9k
ICYmIG1hdGNoKENPTE9OKSkgeworICAgICAgICBpZiAoIWlzR2VuZXJhdG9yTWV0aG9kUGFyc2VN
b2RlKHBhcnNlTW9kZSkgJiYgIWlzQXN5bmNNZXRob2RQYXJzZU1vZGUocGFyc2VNb2RlKSAmJiBt
YXRjaChDT0xPTikpIHsKICAgICAgICAgICAgIG5leHQoKTsKICAgICAgICAgICAgIFRyZWVFeHBy
ZXNzaW9uIG5vZGUgPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uT3JQcm9wYWdhdGVFcnJvckNs
YXNzKGNvbnRleHQpOwogICAgICAgICAgICAgZmFpbElmRmFsc2Uobm9kZSwgIkNhbm5vdCBwYXJz
ZSBleHByZXNzaW9uIGZvciBwcm9wZXJ0eSBkZWNsYXJhdGlvbiIpOwpAQCAtMzgwMSwxMSArMzkx
MCwxMSBAQCBuYW1lZFByb3BlcnR5OgogICAgICAgICB9CiAKICAgICAgICAgaWYgKG1hdGNoKE9Q
RU5QQVJFTikpIHsKLSAgICAgICAgICAgIGF1dG8gbWV0aG9kID0gcGFyc2VQcm9wZXJ0eU1ldGhv
ZChjb250ZXh0LCBpZGVudCwgaXNHZW5lcmF0b3IsIGlzQXN5bmNNZXRob2QpOworICAgICAgICAg
ICAgYXV0byBtZXRob2QgPSBwYXJzZVByb3BlcnR5TWV0aG9kKGNvbnRleHQsIGlkZW50LCBwYXJz
ZU1vZGUpOwogICAgICAgICAgICAgcHJvcGFnYXRlRXJyb3IoKTsKICAgICAgICAgICAgIHJldHVy
biBjb250ZXh0LmNyZWF0ZVByb3BlcnR5KGlkZW50LCBtZXRob2QsIFByb3BlcnR5Tm9kZTo6Q29u
c3RhbnQsIFByb3BlcnR5Tm9kZTo6S25vd25EaXJlY3QsIGNvbXBsZXRlLCBTdXBlckJpbmRpbmc6
Ok5lZWRlZCwgSW5mZXJOYW1lOjpBbGxvd2VkLCBpc0NsYXNzUHJvcGVydHkpOwogICAgICAgICB9
Ci0gICAgICAgIGZhaWxJZlRydWUoaXNHZW5lcmF0b3IgfHwgaXNBc3luY01ldGhvZCwgIkV4cGVj
dGVkIGEgcGFyZW50aGVzaXMgZm9yIGFyZ3VtZW50IGxpc3QiKTsKKyAgICAgICAgZmFpbElmVHJ1
ZShwYXJzZU1vZGUgIT0gU291cmNlUGFyc2VNb2RlOjpNZXRob2RNb2RlLCAiRXhwZWN0ZWQgYSBw
YXJlbnRoZXNpcyBmb3IgYXJndW1lbnQgbGlzdCIpOwogCiAgICAgICAgIGZhaWxJZkZhbHNlKHdh
c0lkZW50LCAiRXhwZWN0ZWQgYW4gaWRlbnRpZmllciBhcyBwcm9wZXJ0eSBuYW1lIik7CiAKQEAg
LTM4MjgsMTEgKzM5MzcsNyBAQCBuYW1lZFByb3BlcnR5OgogICAgICAgICAgICAgdHlwZSA9IFBy
b3BlcnR5Tm9kZTo6R2V0dGVyOwogICAgICAgICBlbHNlIGlmICgqaWRlbnQgPT0gbV92bS0+cHJv
cGVydHlOYW1lcy0+c2V0KQogICAgICAgICAgICAgdHlwZSA9IFByb3BlcnR5Tm9kZTo6U2V0dGVy
OwotICAgICAgICBlbHNlIGlmIChVTkxJS0VMWShpc0FzeW5jICYmICFpc0FzeW5jTWV0aG9kKSkg
ewotICAgICAgICAgICAgaXNBc3luY01ldGhvZCA9IHRydWU7Ci0gICAgICAgICAgICBmYWlsSWZU
cnVlKG1fbGV4ZXItPnByZXZUZXJtaW5hdG9yKCksICJFeHBlY3RlZCBhIHByb3BlcnR5IG5hbWUg
Zm9sbG93aW5nIGtleXdvcmQgJ2FzeW5jJyIpOwotICAgICAgICAgICAgZ290byBwYXJzZVByb3Bl
cnR5OwotICAgICAgICB9IGVsc2UKKyAgICAgICAgZWxzZQogICAgICAgICAgICAgZmFpbFdpdGhN
ZXNzYWdlKCJFeHBlY3RlZCBhICc6JyBmb2xsb3dpbmcgdGhlIHByb3BlcnR5IG5hbWUgJyIsIGlk
ZW50LT5pbXBsKCksICInIik7CiAgICAgICAgIHJldHVybiBwYXJzZUdldHRlclNldHRlcihjb250
ZXh0LCBjb21wbGV0ZSwgdHlwZSwgZ2V0dGVyT3JTZXR0ZXJTdGFydE9mZnNldCwgQ29uc3RydWN0
b3JLaW5kOjpOb25lLCBpc0NsYXNzUHJvcGVydHksIGlzU3RhdGljTWV0aG9kKTsKICAgICB9CkBA
IC0zODQzLDExICszOTQ4LDExIEBAIG5hbWVkUHJvcGVydHk6CiAKICAgICAgICAgaWYgKG1hdGNo
KE9QRU5QQVJFTikpIHsKICAgICAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gbV9w
YXJzZXJBcmVuYS5pZGVudGlmaWVyQXJlbmEoKS5tYWtlTnVtZXJpY0lkZW50aWZpZXIoY29uc3Rf
Y2FzdDxWTSo+KG1fdm0pLCBwcm9wZXJ0eU5hbWUpOwotICAgICAgICAgICAgYXV0byBtZXRob2Qg
PSBwYXJzZVByb3BlcnR5TWV0aG9kKGNvbnRleHQsICZpZGVudCwgaXNHZW5lcmF0b3IsIGlzQXN5
bmNNZXRob2QpOworICAgICAgICAgICAgYXV0byBtZXRob2QgPSBwYXJzZVByb3BlcnR5TWV0aG9k
KGNvbnRleHQsICZpZGVudCwgcGFyc2VNb2RlKTsKICAgICAgICAgICAgIHByb3BhZ2F0ZUVycm9y
KCk7CiAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVQcm9wZXJ0eSgmaWRlbnQsIG1l
dGhvZCwgUHJvcGVydHlOb2RlOjpDb25zdGFudCwgUHJvcGVydHlOb2RlOjpVbmtub3duLCBjb21w
bGV0ZSwgU3VwZXJCaW5kaW5nOjpOZWVkZWQsIEluZmVyTmFtZTo6QWxsb3dlZCwgaXNDbGFzc1By
b3BlcnR5KTsKICAgICAgICAgfQotICAgICAgICBmYWlsSWZUcnVlKGlzR2VuZXJhdG9yIHx8IGlz
QXN5bmNNZXRob2QsICJFeHBlY3RlZCBhIHBhcmVudGhlc2lzIGZvciBhcmd1bWVudCBsaXN0Iik7
CisgICAgICAgIGZhaWxJZlRydWUocGFyc2VNb2RlICE9IFNvdXJjZVBhcnNlTW9kZTo6TWV0aG9k
TW9kZSwgIkV4cGVjdGVkIGEgcGFyZW50aGVzaXMgZm9yIGFyZ3VtZW50IGxpc3QiKTsKIAogICAg
ICAgICBjb25zdW1lT3JGYWlsKENPTE9OLCAiRXhwZWN0ZWQgJzonIGFmdGVyIHByb3BlcnR5IG5h
bWUiKTsKICAgICAgICAgVHJlZUV4cHJlc3Npb24gbm9kZSA9IHBhcnNlQXNzaWdubWVudEV4cHJl
c3Npb24oY29udGV4dCk7CkBAIC0zODYyLDExICszOTY3LDExIEBAIG5hbWVkUHJvcGVydHk6CiAg
ICAgICAgIGhhbmRsZVByb2R1Y3Rpb25PckZhaWwoQ0xPU0VCUkFDS0VULCAiXSIsICJlbmQiLCAi
Y29tcHV0ZWQgcHJvcGVydHkgbmFtZSIpOwogCiAgICAgICAgIGlmIChtYXRjaChPUEVOUEFSRU4p
KSB7Ci0gICAgICAgICAgICBhdXRvIG1ldGhvZCA9IHBhcnNlUHJvcGVydHlNZXRob2QoY29udGV4
dCwgJm1fdm0tPnByb3BlcnR5TmFtZXMtPm51bGxJZGVudGlmaWVyLCBpc0dlbmVyYXRvciwgaXNB
c3luY01ldGhvZCk7CisgICAgICAgICAgICBhdXRvIG1ldGhvZCA9IHBhcnNlUHJvcGVydHlNZXRo
b2QoY29udGV4dCwgJm1fdm0tPnByb3BlcnR5TmFtZXMtPm51bGxJZGVudGlmaWVyLCBwYXJzZU1v
ZGUpOwogICAgICAgICAgICAgcHJvcGFnYXRlRXJyb3IoKTsKICAgICAgICAgICAgIHJldHVybiBj
b250ZXh0LmNyZWF0ZVByb3BlcnR5KHByb3BlcnR5TmFtZSwgbWV0aG9kLCBzdGF0aWNfY2FzdDxQ
cm9wZXJ0eU5vZGU6OlR5cGU+KFByb3BlcnR5Tm9kZTo6Q29uc3RhbnQgfCBQcm9wZXJ0eU5vZGU6
OkNvbXB1dGVkKSwgUHJvcGVydHlOb2RlOjpLbm93bkRpcmVjdCwgY29tcGxldGUsIFN1cGVyQmlu
ZGluZzo6TmVlZGVkLCBpc0NsYXNzUHJvcGVydHkpOwogICAgICAgICB9Ci0gICAgICAgIGZhaWxJ
ZlRydWUoaXNHZW5lcmF0b3IgfHwgaXNBc3luY01ldGhvZCwgIkV4cGVjdGVkIGEgcGFyZW50aGVz
aXMgZm9yIGFyZ3VtZW50IGxpc3QiKTsKKyAgICAgICAgZmFpbElmVHJ1ZShwYXJzZU1vZGUgIT0g
U291cmNlUGFyc2VNb2RlOjpNZXRob2RNb2RlLCAiRXhwZWN0ZWQgYSBwYXJlbnRoZXNpcyBmb3Ig
YXJndW1lbnQgbGlzdCIpOwogCiAgICAgICAgIGNvbnN1bWVPckZhaWwoQ09MT04sICJFeHBlY3Rl
ZCAnOicgYWZ0ZXIgcHJvcGVydHkgbmFtZSIpOwogICAgICAgICBUcmVlRXhwcmVzc2lvbiBub2Rl
ID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbihjb250ZXh0KTsKQEAgLTM4OTUsMTMgKzQwMDAs
MTMgQEAgbmFtZWRQcm9wZXJ0eToKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4K
LXRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3Npb24gUGFyc2VyPExleGVy
VHlwZT46OnBhcnNlUHJvcGVydHlNZXRob2QoVHJlZUJ1aWxkZXImIGNvbnRleHQsIGNvbnN0IElk
ZW50aWZpZXIqIG1ldGhvZE5hbWUsIGJvb2wgaXNHZW5lcmF0b3IsIGJvb2wgaXNBc3luY01ldGhv
ZCkKK3RlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZUV4cHJlc3Npb24gUGFyc2VyPExl
eGVyVHlwZT46OnBhcnNlUHJvcGVydHlNZXRob2QoVHJlZUJ1aWxkZXImIGNvbnRleHQsIGNvbnN0
IElkZW50aWZpZXIqIG1ldGhvZE5hbWUsIFNvdXJjZVBhcnNlTW9kZSBwYXJzZU1vZGUpCiB7Cisg
ICAgQVNTRVJUKGlzTWV0aG9kUGFyc2VNb2RlKHBhcnNlTW9kZSkpOwogICAgIEpTVG9rZW5Mb2Nh
dGlvbiBtZXRob2RMb2NhdGlvbih0b2tlbkxvY2F0aW9uKCkpOwogICAgIHVuc2lnbmVkIG1ldGhv
ZFN0YXJ0ID0gdG9rZW5TdGFydCgpOwogICAgIFBhcnNlckZ1bmN0aW9uSW5mbzxUcmVlQnVpbGRl
cj4gbWV0aG9kSW5mbzsKICAgICBtZXRob2RJbmZvLm5hbWUgPSBtZXRob2ROYW1lOwotICAgIFNv
dXJjZVBhcnNlTW9kZSBwYXJzZU1vZGUgPSBpc0dlbmVyYXRvciA/IFNvdXJjZVBhcnNlTW9kZTo6
R2VuZXJhdG9yV3JhcHBlck1ldGhvZE1vZGUgOiBpc0FzeW5jTWV0aG9kID8gU291cmNlUGFyc2VN
b2RlOjpBc3luY01ldGhvZE1vZGUgOiBTb3VyY2VQYXJzZU1vZGU6Ok1ldGhvZE1vZGU7CiAgICAg
ZmFpbElmRmFsc2UoKHBhcnNlRnVuY3Rpb25JbmZvKGNvbnRleHQsIEZ1bmN0aW9uTmFtZVJlcXVp
cmVtZW50czo6VW5uYW1lZCwgcGFyc2VNb2RlLCBmYWxzZSwgQ29uc3RydWN0b3JLaW5kOjpOb25l
LCBTdXBlckJpbmRpbmc6Ok5lZWRlZCwgbWV0aG9kU3RhcnQsIG1ldGhvZEluZm8sIEZ1bmN0aW9u
RGVmaW5pdGlvblR5cGU6Ok1ldGhvZCkpLCAiQ2Fubm90IHBhcnNlIHRoaXMgbWV0aG9kIik7CiAg
ICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlTWV0aG9kRGVmaW5pdGlvbihtZXRob2RMb2NhdGlvbiwg
bWV0aG9kSW5mbyk7CiB9CkBAIC00MjAzLDEwICs0MzA4LDE0IEBAIHRlbXBsYXRlIDxjbGFzcyBU
cmVlQnVpbGRlcj4gVHJlZUV4cHJlc3Npb24gUGFyc2VyPExleGVyVHlwZT46OnBhcnNlQXN5bmNG
dW5jdGlvCiAgICAgSlNUb2tlbkxvY2F0aW9uIGxvY2F0aW9uKHRva2VuTG9jYXRpb24oKSk7CiAg
ICAgdW5zaWduZWQgZnVuY3Rpb25LZXl3b3JkU3RhcnQgPSB0b2tlblN0YXJ0KCk7CiAgICAgbmV4
dCgpOworICAgIFNvdXJjZVBhcnNlTW9kZSBwYXJzZU1vZGUgPSBTb3VyY2VQYXJzZU1vZGU6OkFz
eW5jRnVuY3Rpb25Nb2RlOworCisgICAgaWYgKE9wdGlvbnM6OnVzZUFzeW5jSXRlcmF0b3IoKSAm
JiBjb25zdW1lKFRJTUVTKSkKKyAgICAgICAgcGFyc2VNb2RlID0gU291cmNlUGFyc2VNb2RlOjpB
c3luY0dlbmVyYXRvcldyYXBwZXJGdW5jdGlvbk1vZGU7CisKICAgICBQYXJzZXJGdW5jdGlvbklu
Zm88VHJlZUJ1aWxkZXI+IGZ1bmN0aW9uSW5mbzsKICAgICBmdW5jdGlvbkluZm8ubmFtZSA9ICZt
X3ZtLT5wcm9wZXJ0eU5hbWVzLT5udWxsSWRlbnRpZmllcjsKLSAgICBTb3VyY2VQYXJzZU1vZGUg
cGFyc2VNb2RlID0gU291cmNlUGFyc2VNb2RlOjpBc3luY0Z1bmN0aW9uTW9kZTsKLSAgICBmYWls
SWZGYWxzZShwYXJzZUZ1bmN0aW9uSW5mbyhjb250ZXh0LCBGdW5jdGlvbk5hbWVSZXF1aXJlbWVu
dHM6Ok5vbmUsIHBhcnNlTW9kZSwgZmFsc2UsIENvbnN0cnVjdG9yS2luZDo6Tm9uZSwgU3VwZXJC
aW5kaW5nOjpOb3ROZWVkZWQsIGZ1bmN0aW9uS2V5d29yZFN0YXJ0LCBmdW5jdGlvbkluZm8sIEZ1
bmN0aW9uRGVmaW5pdGlvblR5cGU6OkV4cHJlc3Npb24pLCAiQ2Fubm90IHBhcnNlIGFzeW5jIGZ1
bmN0aW9uIGV4cHJlc3Npb24iKTsKKyAgICBmYWlsSWZGYWxzZShwYXJzZUZ1bmN0aW9uSW5mbyhj
b250ZXh0LCBGdW5jdGlvbk5hbWVSZXF1aXJlbWVudHM6Ok5vbmUsIHBhcnNlTW9kZSwgZmFsc2Us
IENvbnN0cnVjdG9yS2luZDo6Tm9uZSwgU3VwZXJCaW5kaW5nOjpOb3ROZWVkZWQsIGZ1bmN0aW9u
S2V5d29yZFN0YXJ0LCBmdW5jdGlvbkluZm8sIEZ1bmN0aW9uRGVmaW5pdGlvblR5cGU6OkV4cHJl
c3Npb24pLCBwYXJzZU1vZGUgPT0gU291cmNlUGFyc2VNb2RlOjpBc3luY0Z1bmN0aW9uTW9kZSA/
ICJDYW5ub3QgcGFyc2UgYXN5bmMgZnVuY3Rpb24gZXhwcmVzc2lvbiIgOiAiQ2Fubm90IHBhcnNl
IGFzeW5jIGdlbmVyYXRvciBmdW5jdGlvbiBleHByZXNzaW9uIik7CiAgICAgcmV0dXJuIGNvbnRl
eHQuY3JlYXRlRnVuY3Rpb25FeHByKGxvY2F0aW9uLCBmdW5jdGlvbkluZm8pOwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaAppbmRleCAwN2ZlYjM5YzQ3MTE1ZTk2N2NiYjkz
ZGQ5ZmY2N2E4YzMxNGMzZWUwLi41MWYzOWM2ZGJlYTRiZDQxZDBlMzRlMGI4Zjg5YzU2MDNmMmNj
ZjFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgKQEAgLTIyNSw2ICsyMjUs
MTAgQEAgcHVibGljOgogICAgIHZvaWQgc2V0U291cmNlUGFyc2VNb2RlKFNvdXJjZVBhcnNlTW9k
ZSBtb2RlKQogICAgIHsKICAgICAgICAgc3dpdGNoIChtb2RlKSB7CisgICAgICAgIGNhc2UgU291
cmNlUGFyc2VNb2RlOjpBc3luY0dlbmVyYXRvckJvZHlNb2RlOgorICAgICAgICAgICAgc2V0SXNB
c3luY0Z1bmN0aW9uQm9keSgpOworICAgICAgICAgICAgc2V0SXNHZW5lcmF0b3IoKTsKKyAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFNvdXJjZVBhcnNlTW9kZTo6QXN5bmNBcnJvd0Z1
bmN0aW9uQm9keU1vZGU6CiAgICAgICAgICAgICBzZXRJc0FzeW5jQXJyb3dGdW5jdGlvbkJvZHko
KTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjQyLDYgKzI0NiwxMiBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICBzZXRJc0dlbmVyYXRvckZ1bmN0aW9uKCk7CiAgICAgICAgICAgICBicmVhazsKIAor
ICAgICAgICBjYXNlIFNvdXJjZVBhcnNlTW9kZTo6QXN5bmNHZW5lcmF0b3JXcmFwcGVyTWV0aG9k
TW9kZToKKyAgICAgICAgY2FzZSBTb3VyY2VQYXJzZU1vZGU6OkFzeW5jR2VuZXJhdG9yV3JhcHBl
ckZ1bmN0aW9uTW9kZToKKyAgICAgICAgICAgIHNldElzQXN5bmNGdW5jdGlvbigpOworICAgICAg
ICAgICAgc2V0SXNHZW5lcmF0b3JGdW5jdGlvbigpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
CiAgICAgICAgIGNhc2UgU291cmNlUGFyc2VNb2RlOjpOb3JtYWxGdW5jdGlvbk1vZGU6CiAgICAg
ICAgIGNhc2UgU291cmNlUGFyc2VNb2RlOjpHZXR0ZXJNb2RlOgogICAgICAgICBjYXNlIFNvdXJj
ZVBhcnNlTW9kZTo6U2V0dGVyTW9kZToKQEAgLTE0OTIsOSArMTUwMiwyMSBAQCBwcml2YXRlOgog
ICAgICAgICByZXR1cm4gbWF0Y2goSURFTlQpIHx8IGlzTEVUTWFza2VkQXNJREVOVCgpIHx8IGlz
WUlFTERNYXNrZWRBc0lERU5UKGN1cnJlbnRTY29wZSgpLT5pc0dlbmVyYXRvcigpKSB8fCBpc1Nh
ZmVDb250ZXh0dWFsS2V5d29yZChtX3Rva2VuKTsKICAgICB9CiAKKyAgICBBTFdBWVNfSU5MSU5F
IFNvdXJjZVBhcnNlTW9kZSBnZXRBc3luRnVuY3Rpb25Cb2R5UGFyc2VNb2RlKFNvdXJjZVBhcnNl
TW9kZSBwYXJzZU1vZGUpCisgICAgeworICAgICAgICBpZiAoaXNBc3luY0dlbmVyYXRvckZ1bmN0
aW9uUGFyc2VNb2RlKHBhcnNlTW9kZSkpCisgICAgICAgICAgICByZXR1cm4gU291cmNlUGFyc2VN
b2RlOjpBc3luY0dlbmVyYXRvckJvZHlNb2RlOworCisgICAgICAgIGlmIChwYXJzZU1vZGUgPT0g
U291cmNlUGFyc2VNb2RlOjpBc3luY0Fycm93RnVuY3Rpb25Nb2RlKQorICAgICAgICAgICAgcmV0
dXJuIFNvdXJjZVBhcnNlTW9kZTo6QXN5bmNBcnJvd0Z1bmN0aW9uQm9keU1vZGU7CisgICAgICAg
IAorICAgICAgICByZXR1cm4gU291cmNlUGFyc2VNb2RlOjpBc3luY0Z1bmN0aW9uQm9keU1vZGU7
CisgICAgfQorCiAgICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU291cmNlRWxl
bWVudHMgcGFyc2VTb3VyY2VFbGVtZW50cyhUcmVlQnVpbGRlciYsIFNvdXJjZUVsZW1lbnRzTW9k
ZSk7CiAgICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlU291cmNlRWxlbWVudHMg
cGFyc2VHZW5lcmF0b3JGdW5jdGlvblNvdXJjZUVsZW1lbnRzKFRyZWVCdWlsZGVyJiwgY29uc3Qg
SWRlbnRpZmllciYgbmFtZSwgU291cmNlRWxlbWVudHNNb2RlKTsKICAgICB0ZW1wbGF0ZSA8Y2xh
c3MgVHJlZUJ1aWxkZXI+IFRyZWVTb3VyY2VFbGVtZW50cyBwYXJzZUFzeW5jRnVuY3Rpb25Tb3Vy
Y2VFbGVtZW50cyhUcmVlQnVpbGRlciYsIFNvdXJjZVBhcnNlTW9kZSwgYm9vbCBpc0Fycm93RnVu
Y3Rpb25Cb2R5RXhwcmVzc2lvbiwgU291cmNlRWxlbWVudHNNb2RlKTsKKyAgICB0ZW1wbGF0ZSA8
Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTb3VyY2VFbGVtZW50cyBwYXJzZUFzeW5jR2VuZXJhdG9y
RnVuY3Rpb25Tb3VyY2VFbGVtZW50cyhUcmVlQnVpbGRlciYsIFNvdXJjZVBhcnNlTW9kZSwgYm9v
bCBpc0Fycm93RnVuY3Rpb25Cb2R5RXhwcmVzc2lvbiwgU291cmNlRWxlbWVudHNNb2RlKTsKICAg
ICB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQgcGFyc2VTdGF0ZW1l
bnRMaXN0SXRlbShUcmVlQnVpbGRlciYsIGNvbnN0IElkZW50aWZpZXIqJiBkaXJlY3RpdmUsIHVu
c2lnbmVkKiBkaXJlY3RpdmVMaXRlcmFsTGVuZ3RoKTsKICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHJl
ZUJ1aWxkZXI+IFRyZWVTdGF0ZW1lbnQgcGFyc2VTdGF0ZW1lbnQoVHJlZUJ1aWxkZXImLCBjb25z
dCBJZGVudGlmaWVyKiYgZGlyZWN0aXZlLCB1bnNpZ25lZCogZGlyZWN0aXZlTGl0ZXJhbExlbmd0
aCA9IDApOwogICAgIGVudW0gY2xhc3MgRXhwb3J0VHlwZSB7IEV4cG9ydGVkLCBOb3RFeHBvcnRl
ZCB9OwpAQCAtMTU0MSw3ICsxNTYzLDcgQEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZSA8Y2xhc3Mg
VHJlZUJ1aWxkZXI+IEFMV0FZU19JTkxJTkUgVHJlZUFyZ3VtZW50cyBwYXJzZUFyZ3VtZW50cyhU
cmVlQnVpbGRlciYpOwogICAgIHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gQUxXQVlTX0lO
TElORSBUcmVlRXhwcmVzc2lvbiBwYXJzZUFyZ3VtZW50KFRyZWVCdWlsZGVyJiwgQXJndW1lbnRU
eXBlJik7CiAgICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlUHJvcGVydHkgcGFy
c2VQcm9wZXJ0eShUcmVlQnVpbGRlciYsIGJvb2wgc3RyaWN0KTsKLSAgICB0ZW1wbGF0ZSA8Y2xh
c3MgVHJlZUJ1aWxkZXI+IFRyZWVFeHByZXNzaW9uIHBhcnNlUHJvcGVydHlNZXRob2QoVHJlZUJ1
aWxkZXImIGNvbnRleHQsIGNvbnN0IElkZW50aWZpZXIqIG1ldGhvZE5hbWUsIGJvb2wgaXNHZW5l
cmF0b3IsIGJvb2wgaXNBc3luY01ldGhvZCk7CisgICAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWls
ZGVyPiBUcmVlRXhwcmVzc2lvbiBwYXJzZVByb3BlcnR5TWV0aG9kKFRyZWVCdWlsZGVyJiBjb250
ZXh0LCBjb25zdCBJZGVudGlmaWVyKiBtZXRob2ROYW1lLCBTb3VyY2VQYXJzZU1vZGUpOwogICAg
IHRlbXBsYXRlIDxjbGFzcyBUcmVlQnVpbGRlcj4gVHJlZVByb3BlcnR5IHBhcnNlR2V0dGVyU2V0
dGVyKFRyZWVCdWlsZGVyJiwgYm9vbCBzdHJpY3QsIFByb3BlcnR5Tm9kZTo6VHlwZSwgdW5zaWdu
ZWQgZ2V0dGVyT3JTZXR0ZXJTdGFydE9mZnNldCwgQ29uc3RydWN0b3JLaW5kLCBib29sIGlzQ2xh
c3NQcm9wZXJ0eSwgYm9vbCBpc1N0YXRpY01ldGhvZCk7CiAgICAgdGVtcGxhdGUgPGNsYXNzIFRy
ZWVCdWlsZGVyPiBBTFdBWVNfSU5MSU5FIFRyZWVGdW5jdGlvbkJvZHkgcGFyc2VGdW5jdGlvbkJv
ZHkoVHJlZUJ1aWxkZXImLCBTeW50YXhDaGVja2VyJiwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwg
aW50LCBpbnQgZnVuY3Rpb25LZXl3b3JkU3RhcnQsIGludCBmdW5jdGlvbk5hbWVTdGFydCwgaW50
IHBhcmFtZXRlcnNTdGFydCwgQ29uc3RydWN0b3JLaW5kLCBTdXBlckJpbmRpbmcsIEZ1bmN0aW9u
Qm9keVR5cGUsIHVuc2lnbmVkLCBTb3VyY2VQYXJzZU1vZGUpOwogICAgIHRlbXBsYXRlIDxjbGFz
cyBUcmVlQnVpbGRlcj4gQUxXQVlTX0lOTElORSBib29sIHBhcnNlRm9ybWFsUGFyYW1ldGVycyhU
cmVlQnVpbGRlciYsIFRyZWVGb3JtYWxQYXJhbWV0ZXJMaXN0LCBib29sIGlzQXJyb3dGdW5jdGlv
biwgYm9vbCBpc01ldGhvZCwgdW5zaWduZWQmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvUGFyc2VyTW9kZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJz
ZXIvUGFyc2VyTW9kZXMuaAppbmRleCA5YTk2ZjVkMTdiZGU3MDQwMTE5NjUwZTgxNjRmMzhkZTEz
ZDQwMDM0Li44MjIyOWFkMDU4MTc2YTRjYTBiY2UwMzhmMDg0Nzk2ZjFmNThhZTAxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlck1vZGVzLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJNb2Rlcy5oCkBAIC00MiwyMyArNDIsMjYg
QEAgZW51bSBEZWJ1Z2dlck1vZGUgeyBEZWJ1Z2dlck9mZiwgRGVidWdnZXJPbiB9OwogCiBlbnVt
IGNsYXNzIEZ1bmN0aW9uTW9kZSB7IEZ1bmN0aW9uRXhwcmVzc2lvbiwgRnVuY3Rpb25EZWNsYXJh
dGlvbiwgTWV0aG9kRGVmaW5pdGlvbiB9OwogCi1lbnVtIGNsYXNzIFNvdXJjZVBhcnNlTW9kZSA6
IHVpbnQxNl90IHsKLSAgICBOb3JtYWxGdW5jdGlvbk1vZGUgICAgICAgICAgICA9IDBiMDAwMDAw
MDAwMDAwMDAwMSwKLSAgICBHZW5lcmF0b3JCb2R5TW9kZSAgICAgICAgICAgICA9IDBiMDAwMDAw
MDAwMDAwMDAxMCwKLSAgICBHZW5lcmF0b3JXcmFwcGVyRnVuY3Rpb25Nb2RlICA9IDBiMDAwMDAw
MDAwMDAwMDEwMCwKLSAgICBHZW5lcmF0b3JXcmFwcGVyTWV0aG9kTW9kZSAgICA9IDBiMDAwMDAw
MDAwMDAwMTAwMCwKLSAgICBHZXR0ZXJNb2RlICAgICAgICAgICAgICAgICAgICA9IDBiMDAwMDAw
MDAwMDAxMDAwMCwKLSAgICBTZXR0ZXJNb2RlICAgICAgICAgICAgICAgICAgICA9IDBiMDAwMDAw
MDAwMDEwMDAwMCwKLSAgICBNZXRob2RNb2RlICAgICAgICAgICAgICAgICAgICA9IDBiMDAwMDAw
MDAwMTAwMDAwMCwKLSAgICBBcnJvd0Z1bmN0aW9uTW9kZSAgICAgICAgICAgICA9IDBiMDAwMDAw
MDAxMDAwMDAwMCwKLSAgICBBc3luY0Z1bmN0aW9uQm9keU1vZGUgICAgICAgICA9IDBiMDAwMDAw
MDEwMDAwMDAwMCwKLSAgICBBc3luY0Fycm93RnVuY3Rpb25Cb2R5TW9kZSAgICA9IDBiMDAwMDAw
MTAwMDAwMDAwMCwKLSAgICBBc3luY0Z1bmN0aW9uTW9kZSAgICAgICAgICAgICA9IDBiMDAwMDAx
MDAwMDAwMDAwMCwKLSAgICBBc3luY01ldGhvZE1vZGUgICAgICAgICAgICAgICA9IDBiMDAwMDEw
MDAwMDAwMDAwMCwKLSAgICBBc3luY0Fycm93RnVuY3Rpb25Nb2RlICAgICAgICA9IDBiMDAwMTAw
MDAwMDAwMDAwMCwKLSAgICBQcm9ncmFtTW9kZSAgICAgICAgICAgICAgICAgICA9IDBiMDAxMDAw
MDAwMDAwMDAwMCwKLSAgICBNb2R1bGVBbmFseXplTW9kZSAgICAgICAgICAgICA9IDBiMDEwMDAw
MDAwMDAwMDAwMCwKLSAgICBNb2R1bGVFdmFsdWF0ZU1vZGUgICAgICAgICAgICA9IDBiMTAwMDAw
MDAwMDAwMDAwMCwKK2VudW0gY2xhc3MgU291cmNlUGFyc2VNb2RlIDogdWludDMyX3QgeworICAg
IE5vcm1hbEZ1bmN0aW9uTW9kZSAgICAgICAgICAgICAgICA9IDBiMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDEsCisgICAgR2VuZXJhdG9yQm9keU1vZGUgICAgICAgICAgICAgICAgID0g
MGIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMCwKKyAgICBHZW5lcmF0b3JXcmFwcGVy
RnVuY3Rpb25Nb2RlICAgICAgPSAwYjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAwLAor
ICAgIEdldHRlck1vZGUgICAgICAgICAgICAgICAgICAgICAgICA9IDBiMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDEwMDAsCisgICAgU2V0dGVyTW9kZSAgICAgICAgICAgICAgICAgICAgICAg
ID0gMGIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMCwKKyAgICBNZXRob2RNb2RlICAg
ICAgICAgICAgICAgICAgICAgICAgPSAwYjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAw
LAorICAgIEFycm93RnVuY3Rpb25Nb2RlICAgICAgICAgICAgICAgICA9IDBiMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDEwMDAwMDAsCisgICAgQXN5bmNGdW5jdGlvbkJvZHlNb2RlICAgICAgICAg
ICAgID0gMGIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMCwKKyAgICBBc3luY0Fycm93
RnVuY3Rpb25Cb2R5TW9kZSAgICAgICAgPSAwYjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAw
MDAwLAorICAgIEFzeW5jRnVuY3Rpb25Nb2RlICAgICAgICAgICAgICAgICA9IDBiMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAsCisgICAgQXN5bmNNZXRob2RNb2RlICAgICAgICAgICAg
ICAgICAgID0gMGIwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMCwKKyAgICBBc3luY0Fy
cm93RnVuY3Rpb25Nb2RlICAgICAgICAgICAgPSAwYjAwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAw
MDAwMDAwLAorICAgIFByb2dyYW1Nb2RlICAgICAgICAgICAgICAgICAgICAgICA9IDBiMDAwMDAw
MDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAsCisgICAgTW9kdWxlQW5hbHl6ZU1vZGUgICAgICAg
ICAgICAgICAgID0gMGIwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMCwKKyAgICBNb2R1
bGVFdmFsdWF0ZU1vZGUgICAgICAgICAgICAgICAgPSAwYjAwMDAwMDAwMDAwMDAwMDAwMTAwMDAw
MDAwMDAwMDAwLAorICAgIEFzeW5jR2VuZXJhdG9yQm9keU1vZGUgICAgICAgICAgICA9IDBiMDAw
MDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAsCisgICAgQXN5bmNHZW5lcmF0b3JXcmFwcGVy
RnVuY3Rpb25Nb2RlID0gMGIwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMCwKKyAgICBB
c3luY0dlbmVyYXRvcldyYXBwZXJNZXRob2RNb2RlICAgPSAwYjAwMDAwMDAwMDAwMDAwMTAwMDAw
MDAwMDAwMDAwMDAwLAorICAgIEdlbmVyYXRvcldyYXBwZXJNZXRob2RNb2RlICAgICAgICA9IDBi
MDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMDAsCiB9OwogCiBjbGFzcyBTb3VyY2VQYXJz
ZU1vZGVTZXQgeyAKQEAgLTEwNCwxMiArMTA3LDE4IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBpc0Z1
bmN0aW9uUGFyc2VNb2RlKFNvdXJjZVBhcnNlTW9kZSBwYXJzZU1vZGUpCiAgICAgICAgIFNvdXJj
ZVBhcnNlTW9kZTo6QXN5bmNGdW5jdGlvbk1vZGUsIAogICAgICAgICBTb3VyY2VQYXJzZU1vZGU6
OkFzeW5jTWV0aG9kTW9kZSwgCiAgICAgICAgIFNvdXJjZVBhcnNlTW9kZTo6QXN5bmNBcnJvd0Z1
bmN0aW9uTW9kZSwgCi0gICAgICAgIFNvdXJjZVBhcnNlTW9kZTo6QXN5bmNBcnJvd0Z1bmN0aW9u
Qm9keU1vZGUpLmNvbnRhaW5zKHBhcnNlTW9kZSk7IAorICAgICAgICBTb3VyY2VQYXJzZU1vZGU6
OkFzeW5jQXJyb3dGdW5jdGlvbkJvZHlNb2RlLAorICAgICAgICBTb3VyY2VQYXJzZU1vZGU6OkFz
eW5jR2VuZXJhdG9yQm9keU1vZGUsCisgICAgICAgIFNvdXJjZVBhcnNlTW9kZTo6QXN5bmNHZW5l
cmF0b3JXcmFwcGVyRnVuY3Rpb25Nb2RlLAorICAgICAgICBTb3VyY2VQYXJzZU1vZGU6OkFzeW5j
R2VuZXJhdG9yV3JhcHBlck1ldGhvZE1vZGUpLmNvbnRhaW5zKHBhcnNlTW9kZSk7CiB9IAogCiBB
TFdBWVNfSU5MSU5FIGJvb2wgaXNBc3luY0Z1bmN0aW9uUGFyc2VNb2RlKFNvdXJjZVBhcnNlTW9k
ZSBwYXJzZU1vZGUpIAogeyAKLSAgICByZXR1cm4gU291cmNlUGFyc2VNb2RlU2V0KCAKKyAgICBy
ZXR1cm4gU291cmNlUGFyc2VNb2RlU2V0KAorICAgICAgICBTb3VyY2VQYXJzZU1vZGU6OkFzeW5j
R2VuZXJhdG9yV3JhcHBlckZ1bmN0aW9uTW9kZSwKKyAgICAgICAgU291cmNlUGFyc2VNb2RlOjpB
c3luY0dlbmVyYXRvckJvZHlNb2RlLAorICAgICAgICBTb3VyY2VQYXJzZU1vZGU6OkFzeW5jR2Vu
ZXJhdG9yV3JhcHBlck1ldGhvZE1vZGUsCiAgICAgICAgIFNvdXJjZVBhcnNlTW9kZTo6QXN5bmNG
dW5jdGlvbkJvZHlNb2RlLCAKICAgICAgICAgU291cmNlUGFyc2VNb2RlOjpBc3luY0Z1bmN0aW9u
TW9kZSwgCiAgICAgICAgIFNvdXJjZVBhcnNlTW9kZTo6QXN5bmNNZXRob2RNb2RlLCAKQEAgLTEy
MCwyNCArMTI5LDU4IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBpc0FzeW5jRnVuY3Rpb25QYXJzZU1v
ZGUoU291cmNlUGFyc2VNb2RlIHBhcnNlTW9kZSkKIEFMV0FZU19JTkxJTkUgYm9vbCBpc0FzeW5j
QXJyb3dGdW5jdGlvblBhcnNlTW9kZShTb3VyY2VQYXJzZU1vZGUgcGFyc2VNb2RlKSAKIHsgCiAg
ICAgcmV0dXJuIFNvdXJjZVBhcnNlTW9kZVNldCggCi0gICAgICAgIFNvdXJjZVBhcnNlTW9kZTo6
QXN5bmNBcnJvd0Z1bmN0aW9uTW9kZSwgCisgICAgICAgIFNvdXJjZVBhcnNlTW9kZTo6QXN5bmNB
cnJvd0Z1bmN0aW9uTW9kZSwKICAgICAgICAgU291cmNlUGFyc2VNb2RlOjpBc3luY0Fycm93RnVu
Y3Rpb25Cb2R5TW9kZSkuY29udGFpbnMocGFyc2VNb2RlKTsgCiB9IAogCitBTFdBWVNfSU5MSU5F
IGJvb2wgaXNBc3luY0dlbmVyYXRvckZ1bmN0aW9uUGFyc2VNb2RlKFNvdXJjZVBhcnNlTW9kZSBw
YXJzZU1vZGUpCit7CisgICAgcmV0dXJuIFNvdXJjZVBhcnNlTW9kZVNldCgKKyAgICAgICAgU291
cmNlUGFyc2VNb2RlOjpBc3luY0dlbmVyYXRvcldyYXBwZXJGdW5jdGlvbk1vZGUsCisgICAgICAg
IFNvdXJjZVBhcnNlTW9kZTo6QXN5bmNHZW5lcmF0b3JXcmFwcGVyTWV0aG9kTW9kZSkuY29udGFp
bnMocGFyc2VNb2RlKTsKK30KKworQUxXQVlTX0lOTElORSBib29sIGlzQXN5bmNGdW5jdGlvbk9y
QXN5bmNHZW5lcmF0b3JXcmFwcGVyUGFyc2VNb2RlKFNvdXJjZVBhcnNlTW9kZSBwYXJzZU1vZGUp
Cit7CisgICAgcmV0dXJuIFNvdXJjZVBhcnNlTW9kZVNldCgKKyAgICAgICAgU291cmNlUGFyc2VN
b2RlOjpBc3luY0Fycm93RnVuY3Rpb25Nb2RlLAorICAgICAgICBTb3VyY2VQYXJzZU1vZGU6OkFz
eW5jRnVuY3Rpb25Nb2RlLAorICAgICAgICBTb3VyY2VQYXJzZU1vZGU6OkFzeW5jR2VuZXJhdG9y
V3JhcHBlckZ1bmN0aW9uTW9kZSwKKyAgICAgICAgU291cmNlUGFyc2VNb2RlOjpBc3luY0dlbmVy
YXRvcldyYXBwZXJNZXRob2RNb2RlLAorICAgICAgICBTb3VyY2VQYXJzZU1vZGU6OkFzeW5jTWV0
aG9kTW9kZSkuY29udGFpbnMocGFyc2VNb2RlKTsKKyAgICB9CisgICAgCiBBTFdBWVNfSU5MSU5F
IGJvb2wgaXNBc3luY0Z1bmN0aW9uV3JhcHBlclBhcnNlTW9kZShTb3VyY2VQYXJzZU1vZGUgcGFy
c2VNb2RlKSAKIHsgCiAgICAgcmV0dXJuIFNvdXJjZVBhcnNlTW9kZVNldCggCiAgICAgICAgIFNv
dXJjZVBhcnNlTW9kZTo6QXN5bmNBcnJvd0Z1bmN0aW9uTW9kZSwgCi0gICAgICAgIFNvdXJjZVBh
cnNlTW9kZTo6QXN5bmNGdW5jdGlvbk1vZGUsIAorICAgICAgICBTb3VyY2VQYXJzZU1vZGU6OkFz
eW5jRnVuY3Rpb25Nb2RlLAogICAgICAgICBTb3VyY2VQYXJzZU1vZGU6OkFzeW5jTWV0aG9kTW9k
ZSkuY29udGFpbnMocGFyc2VNb2RlKTsgCi19IAorfQogCiBBTFdBWVNfSU5MSU5FIGJvb2wgaXNB
c3luY0Z1bmN0aW9uQm9keVBhcnNlTW9kZShTb3VyY2VQYXJzZU1vZGUgcGFyc2VNb2RlKSAKIHsg
CiAgICAgcmV0dXJuIFNvdXJjZVBhcnNlTW9kZVNldCggCi0gICAgICAgIFNvdXJjZVBhcnNlTW9k
ZTo6QXN5bmNGdW5jdGlvbkJvZHlNb2RlLCAKKyAgICAgICAgU291cmNlUGFyc2VNb2RlOjpBc3lu
Y0Z1bmN0aW9uQm9keU1vZGUsCisgICAgICAgIFNvdXJjZVBhcnNlTW9kZTo6QXN5bmNHZW5lcmF0
b3JCb2R5TW9kZSwKICAgICAgICAgU291cmNlUGFyc2VNb2RlOjpBc3luY0Fycm93RnVuY3Rpb25C
b2R5TW9kZSkuY29udGFpbnMocGFyc2VNb2RlKTsgCi19IAorfQorICAgIAorQUxXQVlTX0lOTElO
RSBib29sIGlzR2VuZXJhdG9yTWV0aG9kUGFyc2VNb2RlKFNvdXJjZVBhcnNlTW9kZSBwYXJzZU1v
ZGUpCit7CisgICAgcmV0dXJuIFNvdXJjZVBhcnNlTW9kZVNldCgKKyAgICAgICAgU291cmNlUGFy
c2VNb2RlOjpHZW5lcmF0b3JXcmFwcGVyTWV0aG9kTW9kZSkuY29udGFpbnMocGFyc2VNb2RlKTsK
K30KKworQUxXQVlTX0lOTElORSBib29sIGlzQXN5bmNNZXRob2RQYXJzZU1vZGUoU291cmNlUGFy
c2VNb2RlIHBhcnNlTW9kZSkKK3sKKyAgICByZXR1cm4gU291cmNlUGFyc2VNb2RlU2V0KFNvdXJj
ZVBhcnNlTW9kZTo6QXN5bmNNZXRob2RNb2RlKS5jb250YWlucyhwYXJzZU1vZGUpOworfQorICAg
IAorQUxXQVlTX0lOTElORSBib29sIGlzQXN5bmNHZW5lcmF0b3JNZXRob2RQYXJzZU1vZGUoU291
cmNlUGFyc2VNb2RlIHBhcnNlTW9kZSkKK3sKKyAgICByZXR1cm4gU291cmNlUGFyc2VNb2RlU2V0
KFNvdXJjZVBhcnNlTW9kZTo6QXN5bmNHZW5lcmF0b3JXcmFwcGVyRnVuY3Rpb25Nb2RlKS5jb250
YWlucyhwYXJzZU1vZGUpOworfQogCiBBTFdBWVNfSU5MSU5FIGJvb2wgaXNNZXRob2RQYXJzZU1v
ZGUoU291cmNlUGFyc2VNb2RlIHBhcnNlTW9kZSkKIHsKQEAgLTE0Niw3ICsxODksOCBAQCBBTFdB
WVNfSU5MSU5FIGJvb2wgaXNNZXRob2RQYXJzZU1vZGUoU291cmNlUGFyc2VNb2RlIHBhcnNlTW9k
ZSkKICAgICAgICAgU291cmNlUGFyc2VNb2RlOjpHZXR0ZXJNb2RlLAogICAgICAgICBTb3VyY2VQ
YXJzZU1vZGU6OlNldHRlck1vZGUsCiAgICAgICAgIFNvdXJjZVBhcnNlTW9kZTo6TWV0aG9kTW9k
ZSwKLSAgICAgICAgU291cmNlUGFyc2VNb2RlOjpBc3luY01ldGhvZE1vZGUpLmNvbnRhaW5zKHBh
cnNlTW9kZSk7CisgICAgICAgIFNvdXJjZVBhcnNlTW9kZTo6QXN5bmNNZXRob2RNb2RlLAorICAg
ICAgICBTb3VyY2VQYXJzZU1vZGU6OkFzeW5jR2VuZXJhdG9yV3JhcHBlck1ldGhvZE1vZGUpLmNv
bnRhaW5zKHBhcnNlTW9kZSk7CiB9CiAKIEFMV0FZU19JTkxJTkUgYm9vbCBpc0dlbmVyYXRvck9y
QXN5bmNGdW5jdGlvbkJvZHlQYXJzZU1vZGUoU291cmNlUGFyc2VNb2RlIHBhcnNlTW9kZSkKQEAg
LTE1NCw2ICsxOTgsNyBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgaXNHZW5lcmF0b3JPckFzeW5jRnVu
Y3Rpb25Cb2R5UGFyc2VNb2RlKFNvdXJjZVBhcnNlTW9kZSBwYXJzZQogICAgIHJldHVybiBTb3Vy
Y2VQYXJzZU1vZGVTZXQoCiAgICAgICAgIFNvdXJjZVBhcnNlTW9kZTo6R2VuZXJhdG9yQm9keU1v
ZGUsCiAgICAgICAgIFNvdXJjZVBhcnNlTW9kZTo6QXN5bmNGdW5jdGlvbkJvZHlNb2RlLAorICAg
ICAgICBTb3VyY2VQYXJzZU1vZGU6OkFzeW5jR2VuZXJhdG9yQm9keU1vZGUsCiAgICAgICAgIFNv
dXJjZVBhcnNlTW9kZTo6QXN5bmNBcnJvd0Z1bmN0aW9uQm9keU1vZGUpLmNvbnRhaW5zKHBhcnNl
TW9kZSk7CiB9CiAKQEAgLTE2NCw3ICsyMDksOSBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgaXNHZW5l
cmF0b3JPckFzeW5jRnVuY3Rpb25XcmFwcGVyUGFyc2VNb2RlKFNvdXJjZVBhcnNlTW9kZSBwYQog
ICAgICAgICBTb3VyY2VQYXJzZU1vZGU6OkdlbmVyYXRvcldyYXBwZXJNZXRob2RNb2RlLAogICAg
ICAgICBTb3VyY2VQYXJzZU1vZGU6OkFzeW5jRnVuY3Rpb25Nb2RlLAogICAgICAgICBTb3VyY2VQ
YXJzZU1vZGU6OkFzeW5jQXJyb3dGdW5jdGlvbk1vZGUsCi0gICAgICAgIFNvdXJjZVBhcnNlTW9k
ZTo6QXN5bmNNZXRob2RNb2RlKS5jb250YWlucyhwYXJzZU1vZGUpOworICAgICAgICBTb3VyY2VQ
YXJzZU1vZGU6OkFzeW5jR2VuZXJhdG9yV3JhcHBlckZ1bmN0aW9uTW9kZSwKKyAgICAgICAgU291
cmNlUGFyc2VNb2RlOjpBc3luY01ldGhvZE1vZGUsCisgICAgICAgIFNvdXJjZVBhcnNlTW9kZTo6
QXN5bmNHZW5lcmF0b3JXcmFwcGVyTWV0aG9kTW9kZSkuY29udGFpbnMocGFyc2VNb2RlKTsKIH0K
IAogQUxXQVlTX0lOTElORSBib29sIGlzR2VuZXJhdG9yUGFyc2VNb2RlKFNvdXJjZVBhcnNlTW9k
ZSBwYXJzZU1vZGUpCmRpZmYgLS1naXQgYS9KU1Rlc3RzL0NoYW5nZUxvZyBiL0pTVGVzdHMvQ2hh
bmdlTG9nCmluZGV4IGFlNmE5MDQwNDMwYjNiNWJlYmQxZDViMGFkZTlhN2JjYWQ4NzU0NmIuLmNh
MmQzZGQzOWFjYjUwNzE2YThlYTM1OTdhYTI1MzBmNWVlY2VjOWMgMTAwNjQ0Ci0tLSBhL0pTVGVz
dHMvQ2hhbmdlTG9nCisrKyBiL0pTVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIw
MTctMDgtMDQgIE9sZWtzYW5kciBTa2FjaGtvdiAgPGdza2FjaGtvdkBnbWFpbC5jb20+CisKKyAg
ICAgICAgW0VTTmV4dF0gQXN5bmMgaXRlcmF0aW9uIC0gSW1wbGVtZW50IEFzeW5jIEdlbmVyYXRv
ciAtIHBhcnNlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTc1MjEwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBzdHJlc3MvYXN5bmMtYXdhaXQtc3ludGF4LmpzOgorICAgICAgICAodGVzdFRvcExldmVs
QXN5bmNBd2FpdFN5bnRheFNsb3BweU1vZGUudGVzdFN5bnRheCk6CisgICAgICAgICogc3RyZXNz
L2FzeW5jLWl0ZXJhdGlvbi1zeW50YXguanM6IEFkZGVkLgorICAgICAgICAoYXNzZXJ0KToKKyAg
ICAgICAgKGNoZWNrU3ludGF4KToKKyAgICAgICAgKGNoZWNrU3ludGF4RXJyb3IpOgorICAgICAg
ICAoY2hlY2tTaW1wbGVBc3luY0dlbmVyYXRvclNsb3BweU1vZGUpOgorICAgICAgICAoY2hlY2tT
aW1wbGVBc3luY0dlbmVyYXRvclN0cmljdE1vZGUpOgorICAgICAgICAoY2hlY2tOZXN0ZWRBc3lu
Y0dlbmVyYXRvcnMpOgorICAgICAgICAoY2hlY2tTaW1wbGVBc3luY0dlbmVyYXRvclN5bnRheEVy
cm9ySW5TdHJpY3RNb2RlKToKKwogMjAxNy0wOC0wMyAgQ2FybG9zIEFsYmVydG8gTG9wZXogUGVy
ZXogIDxjbG9wZXpAaWdhbGlhLmNvbT4KIAogICAgICAgICBKU0MgdGVzdCB3YXNtL2pzLWFwaS90
ZXN0X21lbW9yeV9jb25zdHJ1Y3Rvci5qcyBzaG91bGQgYmUgc2tpcHBlZCBvbiBtZW1vcnlMaW1p
dGVkCmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9hc3luYy1hd2FpdC1zeW50YXguanMgYi9K
U1Rlc3RzL3N0cmVzcy9hc3luYy1hd2FpdC1zeW50YXguanMKaW5kZXggODNkZTQxZjFmZjlkZTJm
ODk4ZmJiOTM2Y2YwNjQ4ZDYyNjFjMDY1ZC4uMWIzZGJhNDFjNTMxZDE0MTY0MjYxMDMxYWZhMGUx
NDIxMWVlMjUzMiAxMDA2NDQKLS0tIGEvSlNUZXN0cy9zdHJlc3MvYXN5bmMtYXdhaXQtc3ludGF4
LmpzCisrKyBiL0pTVGVzdHMvc3RyZXNzL2FzeW5jLWF3YWl0LXN5bnRheC5qcwpAQCAtMzIsMTAg
KzMyLDEyIEBAIGZ1bmN0aW9uIHRlc3RTeW50YXhFcnJvcihzY3JpcHQsIG1lc3NhZ2UpIHsKIH0K
IAogKGZ1bmN0aW9uIHRlc3RUb3BMZXZlbEFzeW5jQXdhaXRTeW50YXhTbG9wcHlNb2RlKCkgewor
ICAgIHRlc3RTeW50YXgoYCh7YXN5bmM6IDF9KWApOwogICAgIHRlc3RTeW50YXgoYHZhciBhc3lu
Y0ZuID0gYXN5bmMgZnVuY3Rpb24oKSB7IGF3YWl0IDE7IH07YCk7CiAgICAgdGVzdFN5bnRheChg
dmFyIGFzeW5jRm4gPSBhc3luYyBmdW5jdGlvbiB3aXRoTmFtZSgpIHsgYXdhaXQgMTsgfTtgKTsK
ICAgICB0ZXN0U3ludGF4KGB2YXIgYXN5bmNGbiA9IGFzeW5jICgpID0+IGF3YWl0ICd0ZXN0Jztg
KTsKICAgICB0ZXN0U3ludGF4KGB2YXIgYXN5bmNGbiA9IGFzeW5jIHggPT4gYXdhaXQgeCArICd0
ZXN0JztgKTsKKyAgICB0ZXN0U3ludGF4KGBmdW5jdGlvbiBmb28oZm4pIHsgZm4oeyBhc3luYzog
dHJ1ZSB9KTsgfWApOwogICAgIHRlc3RTeW50YXgoYGFzeW5jIGZ1bmN0aW9uIGFzeW5jRm4oKSB7
IGF3YWl0IDE7IH1gKTsKICAgICB0ZXN0U3ludGF4KGB2YXIgTyA9IHsgYXN5bmMgbWV0aG9kKCkg
eyBhd2FpdCAxOyB9IH07YCk7CiAgICAgdGVzdFN5bnRheChgdmFyIE8gPSB7IGFzeW5jIFsnbWV0
aCcgKyAnb2QnXSgpIHsgYXdhaXQgMTsgfSB9O2ApOwpAQCAtNjUsMTAgKzY3LDEyIEBAIGZ1bmN0
aW9uIHRlc3RTeW50YXhFcnJvcihzY3JpcHQsIG1lc3NhZ2UpIHsKIH0pKCk7CiAKIChmdW5jdGlv
biB0ZXN0VG9wTGV2ZWxBc3luY0F3YWl0U3ludGF4U3RyaWN0TW9kZSgpIHsKKyAgICB0ZXN0U3lu
dGF4KGAidXNlIHN0cmljdCI7ICh7YXN5bmM6IDF9KWApOwogICAgIHRlc3RTeW50YXgoYCJ1c2Ug
c3RyaWN0IjsgdmFyIGFzeW5jRm4gPSBhc3luYyBmdW5jdGlvbigpIHsgYXdhaXQgMTsgfTtgKTsK
ICAgICB0ZXN0U3ludGF4KGAidXNlIHN0cmljdCI7IHZhciBhc3luY0ZuID0gYXN5bmMgZnVuY3Rp
b24gd2l0aE5hbWUoKSB7IGF3YWl0IDE7IH07YCk7CiAgICAgdGVzdFN5bnRheChgInVzZSBzdHJp
Y3QiOyB2YXIgYXN5bmNGbiA9IGFzeW5jICgpID0+IGF3YWl0ICd0ZXN0JztgKTsKICAgICB0ZXN0
U3ludGF4KGAidXNlIHN0cmljdCI7IHZhciBhc3luY0ZuID0gYXN5bmMgeCA9PiBhd2FpdCB4ICsg
J3Rlc3QnO2ApOworICAgIHRlc3RTeW50YXgoYCJ1c2Ugc3RyaWN0IjsgZnVuY3Rpb24gZm9vKGZu
KSB7IGZuKHsgYXN5bmM6IHRydWUgfSk7IH1gKTsKICAgICB0ZXN0U3ludGF4KGAidXNlIHN0cmlj
dCI7IGFzeW5jIGZ1bmN0aW9uIGFzeW5jRm4oKSB7IGF3YWl0IDE7IH1gKTsKICAgICB0ZXN0U3lu
dGF4KGAidXNlIHN0cmljdCI7IHZhciBPID0geyBhc3luYyBtZXRob2QoKSB7IGF3YWl0IDE7IH0g
fTtgKTsKICAgICB0ZXN0U3ludGF4KGAidXNlIHN0cmljdCI7IHZhciBPID0geyBhc3luYyBbJ21l
dGgnICsgJ29kJ10oKSB7IGF3YWl0IDE7IH0gfTtgKTsKQEAgLTE1NSw2ICsxNTksOSBAQCBmdW5j
dGlvbiB0ZXN0U3ludGF4RXJyb3Ioc2NyaXB0LCBtZXNzYWdlKSB7CiAKIAogKGZ1bmN0aW9uIHRl
c3RUb3BMZXZlbEFzeW5jQXdhaXRTeW50YXhTbG9wcHlNb2RlKCkgeworICAgIHRlc3RTeW50YXhF
cnJvcihgKHsgYXN5bmMgCisgICAgICAgIGZvbygpIHt9IH0pYCk7CisgICAgdGVzdFN5bnRheEVy
cm9yKGAoe2FzeW5jID0gIDF9KWApOwogICAgIHRlc3RTeW50YXhFcnJvcihgdmFyIGFzeW5jRm4g
PSBhc3luYyBmdW5jdGlvbiBhd2FpdCgpIHt9YCk7CiAgICAgdGVzdFN5bnRheEVycm9yKGB2YXIg
YXN5bmNGbiA9IGFzeW5jICgpID0+IHZhciBhd2FpdCA9ICd0ZXN0JztgKTsKICAgICB0ZXN0U3lu
dGF4RXJyb3IoYHZhciBhc3luY0ZuID0gYXN5bmMgKCkgPT4geyB2YXIgYXdhaXQgPSAndGVzdCc7
IH07YCk7CkBAIC0xODYsMTAgKzE5MywxMCBAQCBmdW5jdGlvbiB0ZXN0U3ludGF4RXJyb3Ioc2Ny
aXB0LCBtZXNzYWdlKSB7CiAKICAgICB0ZXN0U3ludGF4RXJyb3IoYHZhciBhc3luY0Fycm93Rm4g
PSBhc3luYygpID0+IGF3YWl0O2ApOwogCi0gICAgdGVzdFN5bnRheEVycm9yKGB2YXIgYXN5bmNG
biA9IGFzeW5jIGZ1bmN0aW9uKigpIHt9YCk7Ci0gICAgdGVzdFN5bnRheEVycm9yKGBhc3luYyBm
dW5jdGlvbiogYXN5bmNHZW5lcmF0b3IoKSB7fWApOworICAgIHRlc3RTeW50YXgoYHZhciBhc3lu
Y0ZuID0gYXN5bmMgZnVuY3Rpb24qKCkge31gKTsKKyAgICB0ZXN0U3ludGF4KGBhc3luYyBmdW5j
dGlvbiogYXN5bmNHZW5lcmF0b3IoKSB7fWApOwogICAgIHRlc3RTeW50YXhFcnJvcihgdmFyIE8g
PSB7ICphc3luYyBhc3luY0dlbmVyYXRvck1ldGhvZCgpIHt9IH07YCk7Ci0gICAgdGVzdFN5bnRh
eEVycm9yKGB2YXIgTyA9IHsgYXN5bmMgKmFzeW5jR2VuZXJhdG9yTWV0aG9kKCkge30gfTtgKTsK
KyAgICB0ZXN0U3ludGF4KGB2YXIgTyA9IHsgYXN5bmMgKmFzeW5jR2VuZXJhdG9yTWV0aG9kKCkg
e30gfTtgKTsKICAgICB0ZXN0U3ludGF4RXJyb3IoYHZhciBPID0geyBhc3luYyBhc3luY0dlbmVy
YXRvck1ldGhvZCooKSB7fSB9O2ApOwogCiAgICAgdGVzdFN5bnRheEVycm9yKGB2YXIgYXN5bmNG
biA9IGFzeW5jIGZ1bmN0aW9uKHggPSBhd2FpdCAxKSB7IHJldHVybiB4OyB9YCk7CkBAIC0yNDEs
NiArMjQ4LDkgQEAgZnVuY3Rpb24gdGVzdFN5bnRheEVycm9yKHNjcmlwdCwgbWVzc2FnZSkgewog
fSkoKTsKIAogKGZ1bmN0aW9uIHRlc3RUb3BMZXZlbEFzeW5jQXdhaXRTeW50YXhTdHJpY3RNb2Rl
KCkgeworICAgIHRlc3RTeW50YXhFcnJvcihgInVzZSBzdHJpY3QiOyAoeyBhc3luYyAKKyAgICAg
ICAgZm9vKCkge30gfSlgKTsKKyAgICB0ZXN0U3ludGF4RXJyb3IoYCJ1c2Ugc3RyaWN0IjsgKHth
c3luYyA9ICAxfSlgKTsKICAgICB0ZXN0U3ludGF4RXJyb3IoYCJ1c2Ugc3RyaWN0IjsgdmFyIGFz
eW5jRm4gPSBhc3luYyBmdW5jdGlvbiBhd2FpdCgpIHt9YCk7CiAgICAgdGVzdFN5bnRheEVycm9y
KGAidXNlIHN0cmljdCI7IHZhciBhc3luY0ZuID0gYXN5bmMgKCkgPT4gdmFyIGF3YWl0ID0gJ3Rl
c3QnO2ApOwogICAgIHRlc3RTeW50YXhFcnJvcihgInVzZSBzdHJpY3QiOyB2YXIgYXN5bmNGbiA9
IGFzeW5jICgpID0+IHsgdmFyIGF3YWl0ID0gJ3Rlc3QnOyB9O2ApOwpAQCAtMjU3LDEwICsyNjcs
NyBAQCBmdW5jdGlvbiB0ZXN0U3ludGF4RXJyb3Ioc2NyaXB0LCBtZXNzYWdlKSB7CiAKICAgICB0
ZXN0U3ludGF4RXJyb3IoYCJ1c2Ugc3RyaWN0IjsgdmFyIGFzeW5jQXJyb3dGbiA9IGFzeW5jKCkg
PT4gYXdhaXQ7YCk7CiAKLSAgICB0ZXN0U3ludGF4RXJyb3IoYCJ1c2Ugc3RyaWN0IjsgdmFyIGFz
eW5jRm4gPSBhc3luYyBmdW5jdGlvbiooKSB7fWApOwotICAgIHRlc3RTeW50YXhFcnJvcihgInVz
ZSBzdHJpY3QiOyBhc3luYyBmdW5jdGlvbiogYXN5bmNHZW5lcmF0b3IoKSB7fWApOwogICAgIHRl
c3RTeW50YXhFcnJvcihgInVzZSBzdHJpY3QiOyB2YXIgTyA9IHsgKmFzeW5jIGFzeW5jR2VuZXJh
dG9yTWV0aG9kKCkge30gfTtgKTsKLSAgICB0ZXN0U3ludGF4RXJyb3IoYCJ1c2Ugc3RyaWN0Ijsg
dmFyIE8gPSB7IGFzeW5jICphc3luY0dlbmVyYXRvck1ldGhvZCgpIHt9IH07YCk7CiAgICAgdGVz
dFN5bnRheEVycm9yKGAidXNlIHN0cmljdCI7IHZhciBPID0geyBhc3luYyBhc3luY0dlbmVyYXRv
ck1ldGhvZCooKSB7fSB9O2ApOwogCiAgICAgdGVzdFN5bnRheChgInVzZSBzdHJpY3QiOyB2YXIg
TyA9IHsgYXN5bmMgZnVuY3Rpb24oKSB7fSB9O2ApOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJl
c3MvYXN5bmMtaXRlcmF0aW9uLXN5bnRheC5qcyBiL0pTVGVzdHMvc3RyZXNzL2FzeW5jLWl0ZXJh
dGlvbi1zeW50YXguanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzEwZTcyZTdlNGY0OTNiYTdkZjQwNWJkOGJhYWRi
NmZhOGJiYzVkYwotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvc3RyZXNzL2FzeW5jLWl0ZXJh
dGlvbi1zeW50YXguanMKQEAgLTAsMCArMSwxMjMgQEAKK3ZhciBhc3NlcnQgPSBmdW5jdGlvbiAo
cmVzdWx0LCBleHBlY3RlZCwgbWVzc2FnZSA9ICIiKSB7CisgIGlmIChyZXN1bHQgIT09IGV4cGVj
dGVkKSB7CisgICAgdGhyb3cgbmV3IEVycm9yKCdFcnJvciBpbiBhc3NlcnQuIEV4cGVjdGVkICIn
ICsgZXhwZWN0ZWQgKyAnIiBidXQgd2FzICInICsgcmVzdWx0ICsgJyI6JyArIG1lc3NhZ2UgKTsK
KyAgfQorfTsKKworCitmdW5jdGlvbiBjaGVja1N5bnRheChzcmMpIHsKKyAgICB0cnkgeworICAg
ICAgICBldmFsKHNyYyk7CisgICAgfSBjYXRjaCAoZXJyb3IpIHsKKyAgICAgICAgaWYgKGVycm9y
IGluc3RhbmNlb2YgU3ludGF4RXJyb3IpCisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlN5
bnRheCBFcnJvcjogIiArIFN0cmluZyhlcnJvcikgKyAiXG4gc2NyaXB0OiBgIiArIHNyYyArICJg
Iik7CisgICAgfQorfQorCitmdW5jdGlvbiBjaGVja1N5bnRheEVycm9yKHNyYywgbWVzc2FnZSkg
eworICAgIHZhciBiRXJyb3IgPSBmYWxzZTsKKyAgICB0cnkgeworICAgICAgICBldmFsKHNyYyk7
CisgICAgfSBjYXRjaCAoZXJyb3IpIHsKKyAgICAgICAgYkVycm9yID0gZXJyb3IgaW5zdGFuY2Vv
ZiBTeW50YXhFcnJvciAmJiAoU3RyaW5nKGVycm9yKSA9PT0gbWVzc2FnZSB8fCB0eXBlb2YgbWVz
c2FnZSA9PT0gJ3VuZGVmaW5lZCcpOyAKKyAgICB9CisgICAgaWYgKCFiRXJyb3IpIHsKKyAgICAg
ICAgdGhyb3cgbmV3IEVycm9yKCJFeHBlY3RlZCBzeW50YXggRXJyb3I6ICIgKyBtZXNzYWdlICsg
IlxuIGluIHNjcmlwdDogYCIgKyBzcmMgKyAiYCIpOworICAgIH0KK30KKworKGZ1bmN0aW9uIGNo
ZWNrU2ltcGxlQXN5bmNHZW5lcmF0b3JTbG9wcHlNb2RlKCkgeworICAgIGNoZWNrU3ludGF4KCd2
YXIgYTEgPSBhc3luYyBmdW5jdGlvbiphc3luY0dlbldpdGhOYW1lMSgpe30nKTsKKyAgICBjaGVj
a1N5bnRheCgndmFyIGEyID0gYXN5bmMgZnVuY3Rpb24gKmFzeW5jR2VuV2l0aE5hbWUyKCl7IHlp
ZWxkIDExOyB9Jyk7CisgICAgY2hlY2tTeW50YXgoJ3ZhciBhMyA9IGFzeW5jIGZ1bmN0aW9uICog
YXN5bmNHZW5XaXRoTmFtZTIoKXsgYXdhaXQgcDsgeWllbGQgMTE7IH0nKTsKKyAgICBjaGVja1N5
bnRheCgndmFyIGQxID0gYXN5bmMgZnVuY3Rpb24qKCl7fScpOworICAgIGNoZWNrU3ludGF4KCd2
YXIgZDIgPSBhc3luYyBmdW5jdGlvbiogKCl7IHlpZWxkIDExOyB9Jyk7CisgICAgY2hlY2tTeW50
YXgoJ3ZhciBkMyA9IGFzeW5jIGZ1bmN0aW9uICogKCl7IGF3YWl0IHA7IHlpZWxkIDExOyB9Jyk7
CisgICAgY2hlY2tTeW50YXgoJ2FzeW5jIGZ1bmN0aW9uKiB3aXRoTmFtZTEoKXsgIH0nKTsKKyAg
ICBjaGVja1N5bnRheCgnYXN5bmMgZnVuY3Rpb24gKndpdGhOYW1lMigpeyB5aWVsZCAxMTsgfScp
OworICAgIGNoZWNrU3ludGF4KCdhc3luYyBmdW5jdGlvbiAqIHdpdGhOYW1lMygpeyBhd2FpdCBw
OyB5aWVsZCAxMTsgfScpOworICAgIGNoZWNrU3ludGF4KCdjbGFzcyBBIHsgYXN5bmMgKiBtZXRo
b2QoKSB7IH0gfScpOworICAgIGNoZWNrU3ludGF4KCdjbGFzcyBCIHsgYXN5bmMgKiBtZXRob2Qo
KSB7eWllbGQgMTE7fSB9Jyk7CisgICAgY2hlY2tTeW50YXgoJ2NsYXNzIEMgeyBhc3luYyAqIG1l
dGhvZCgpIHt5aWVsZCAxMTsgYXdhaXQgcDt9IH0nKTsKKyAgICBjaGVja1N5bnRheCgnY2xhc3Mg
RCB7IGFzeW5jICogIm1ldGhvZCIoKSB7eWllbGQgMTE7IGF3YWl0IHA7fSB9Jyk7CisgICAgY2hl
Y2tTeW50YXgoJ2NsYXNzIEYgeyBhc3luYyAqIDAoKSB7eWllbGQgMTE7IGF3YWl0IHA7fSB9Jyk7
CisgICAgY2hlY2tTeW50YXgoJ3ZhciBvYmogPSB7IGFzeW5jICogbWV0aG9kKCkge3lpZWxkIDEx
OyBhd2FpdCBwO30gfScpOworICAgIGNoZWNrU3ludGF4KCcoeyBhc3luYyBmb28oKSB7fSB9KScp
OworICAgIGNoZWNrU3ludGF4KCcoeyBhc3luYyA6IDEgfSknKTsKK30pKCk7CisKKyhmdW5jdGlv
biBjaGVja1NpbXBsZUFzeW5jR2VuZXJhdG9yU3RyaWN0TW9kZSgpIHsKKyAgICBjaGVja1N5bnRh
eCgnInVzZSBzdHJpY3QiOyB2YXIgYTEgPSBhc3luYyBmdW5jdGlvbiphc3luY0dlbldpdGhOYW1l
MSgpe30nKTsKKyAgICBjaGVja1N5bnRheCgnInVzZSBzdHJpY3QiOyB2YXIgYTIgPSBhc3luYyBm
dW5jdGlvbiAqYXN5bmNHZW5XaXRoTmFtZTIoKXsgeWllbGQgMTE7IH0nKTsKKyAgICBjaGVja1N5
bnRheCgnInVzZSBzdHJpY3QiOyB2YXIgYTMgPSBhc3luYyBmdW5jdGlvbiAqIGFzeW5jR2VuV2l0
aE5hbWUyKCl7IGF3YWl0IHA7IHlpZWxkIDExOyB9Jyk7CisgICAgY2hlY2tTeW50YXgoJyJ1c2Ug
c3RyaWN0IjsgdmFyIGQxID0gYXN5bmMgZnVuY3Rpb24qKCl7fScpOworICAgIGNoZWNrU3ludGF4
KCcidXNlIHN0cmljdCI7IHZhciBkMiA9IGFzeW5jIGZ1bmN0aW9uKiAoKXsgeWllbGQgMTE7IH0n
KTsKKyAgICBjaGVja1N5bnRheCgnInVzZSBzdHJpY3QiOyB2YXIgZDMgPSBhc3luYyBmdW5jdGlv
biAqICgpeyBhd2FpdCBwOyB5aWVsZCAxMTsgfScpOworICAgIGNoZWNrU3ludGF4KCcidXNlIHN0
cmljdCI7IGFzeW5jIGZ1bmN0aW9uKiB3aXRoTmFtZTEoKXsgIH0nKTsKKyAgICBjaGVja1N5bnRh
eCgnInVzZSBzdHJpY3QiOyBhc3luYyBmdW5jdGlvbiAqd2l0aE5hbWUyKCl7IHlpZWxkIDExOyB9
Jyk7CisgICAgY2hlY2tTeW50YXgoJyJ1c2Ugc3RyaWN0IjsgYXN5bmMgZnVuY3Rpb24gKiB3aXRo
TmFtZTMoKXsgYXdhaXQgcDsgeWllbGQgMTE7IH0nKTsKKyAgICBjaGVja1N5bnRheCgnInVzZSBz
dHJpY3QiOyBjbGFzcyBBIHsgYXN5bmMgKiBtZXRob2QoKSB7IH0gfScpOworICAgIGNoZWNrU3lu
dGF4KCcidXNlIHN0cmljdCI7IGNsYXNzIEIgeyBhc3luYyAqIG1ldGhvZCgpIHt5aWVsZCAxMTt9
IH0nKTsKKyAgICBjaGVja1N5bnRheCgnInVzZSBzdHJpY3QiOyBjbGFzcyBDIHsgYXN5bmMgKiBt
ZXRob2QoKSB7eWllbGQgMTE7IGF3YWl0IHA7fSB9Jyk7CisgICAgY2hlY2tTeW50YXgoJyJ1c2Ug
c3RyaWN0IjsgY2xhc3MgRCB7IGFzeW5jICogIm1ldGhvZCIoKSB7eWllbGQgMTE7IGF3YWl0IHA7
fSB9Jyk7CisgICAgY2hlY2tTeW50YXgoJyJ1c2Ugc3RyaWN0IjsgY2xhc3MgRSB7IGFzeW5jICog
WyJjYWxjIiArICJ1bGF0ZSJdKCkge3lpZWxkIDExOyBhd2FpdCBwO30gfScpOworICAgIGNoZWNr
U3ludGF4KCcidXNlIHN0cmljdCI7IGNsYXNzIEYgeyBhc3luYyAqIDAoKSB7eWllbGQgMTE7IGF3
YWl0IHA7fSB9Jyk7CisgICAgY2hlY2tTeW50YXgoJyJ1c2Ugc3RyaWN0IjsgdmFyIG9iaiA9IHsg
YXN5bmMgKiBtZXRob2QoKSB7eWllbGQgMTE7IGF3YWl0IHA7fSB9Jyk7CisgICAgY2hlY2tTeW50
YXgoJyJ1c2Ugc3RyaWN0IjsgKHsgYXN5bmMgZm9vKCkge30gfSknKTsKKyAgICBjaGVja1N5bnRh
eCgnInVzZSBzdHJpY3QiOyAoeyBhc3luYyA6IDEgfSknKTsKK30pKCk7CisKKworKGZ1bmN0aW9u
IGNoZWNrTmVzdGVkQXN5bmNHZW5lcmF0b3JzKCkgeyAKKyAgICB2YXIgd3JhcHBlcnMgPSBbCisg
ICAgICAgIHtzdGFydDogJ3ZhciBhMSA9IGFzeW5jIGZ1bmN0aW9uKmFzeW5jR2VuV2l0aE5hbWUx
KCl7JywgZmluaXNoOiAnfSd9LAorICAgICAgICB7c3RhcnQ6ICdhc3luYyBmdW5jdGlvbiphc3lu
Y0dlbldpdGhOYW1lMigpeyAnLCBmaW5pc2g6ICd9J30sCisgICAgICAgIHtzdGFydDogJ2NsYXNz
IEEgeyBhc3luYyAqIG1ldGhvZCgpIHsgJywgZmluaXNoOiAnIH0gfSd9CisgICAgXTsKKworICAg
IGV4cHJlc3Npb25zID0gWworICAgICAgICAnYXdhaXQgMTA7IHlpZWxkIDExOyByZXR1cm4gMTI7
JywKKyAgICAgICAgJ3ZhciBhc3luYyA9IDEwOyB5aWVsZCBhc3luYzsnLAorICAgICAgICAndmFy
IGFzeW5jID0gMTA7IGF3YWl0IGFzeW5jOycsCisgICAgICAgICd2YXIgYXN5bmMgPSAxMDsgcmV0
dXJuIGFzeW5jOycsCisgICAgICAgICd2YXIgYXN5bmMgPSBmdW5jdGlvbigpIHt9OyByZXR1cm4g
YXN5bmM7JywKKyAgICAgICAgJ3ZhciBhc3luYyA9IGZ1bmN0aW9uKCkge307IHJldHVybiBhc3lu
YygpOycsCisgICAgXTsKKworICAgIHdyYXBwZXJzLmZvckVhY2god3JhcHBlciA9PiB7CisgICAg
ICAgIGV4cHJlc3Npb25zLmZvckVhY2goZXhwID0+IHsKKyAgICAgICAgICAgIGNoZWNrU3ludGF4
KHdyYXBwZXIuc3RhcnQgKyBleHAgKyB3cmFwcGVyLmZpbmlzaCk7CisgICAgICAgIH0pOworICAg
IH0pCit9KSgpOworCisKKyhmdW5jdGlvbiBjaGVja1NpbXBsZUFzeW5jR2VuZXJhdG9yU3ludGF4
RXJyb3JJblNsb3BweU1vZGUoKSB7CisgICAgY2hlY2tTeW50YXhFcnJvcigidmFyIGFzeW5jR2Vu
Rm4gPSBhc3luYyBmdW5jdGlvbiAqYXdhaXQoKSB7fSIpOworICAgIGNoZWNrU3ludGF4RXJyb3Io
InZhciBhc3luY0dlbkZuID0gYXN5bmMgZnVuY3Rpb24qKGF3YWl0KSB7fSIpOworICAgIGNoZWNr
U3ludGF4RXJyb3IoInZhciBhc3luY0dlbkZuID0gYXN5bmMgZnVuY3Rpb24gKndpdGhOYW1lKGF3
YWl0KSB7fSIpOworICAgIGNoZWNrU3ludGF4RXJyb3IoImFzeW5jIGZ1bmN0aW9uICphc3luY0dl
bmVyYXRvckZ1bmN0aW9uRGVjbGFyYXRpb24oYXdhaXQpIHt9Iik7CisgICAgY2hlY2tTeW50YXhF
cnJvcigidmFyIGFzeW5jR2VuRm4gPSAqYXN5bmMgZnVuY3Rpb24gKCkge30iKTsKKyAgICBjaGVj
a1N5bnRheEVycm9yKCJ2YXIgYXN5bmNHZW5GbiA9ICphc3luYyBmdW5jdGlvbiB3aXRoTmFtZSgp
IHt9Iik7CisgICAgY2hlY2tTeW50YXhFcnJvcigiKmFzeW5jIGZ1bmN0aW9uIGFzeW5jR2VuZXJh
dG9yRnVuY3Rpb25EZWNsYXJhdGlvbihhd2FpdCkge30iKTsKKyAgICBjaGVja1N5bnRheEVycm9y
KCJ2YXIgb2JqID0geyAqYXN5bmMgYXN5bmNHZW5lcmF0b3JNZXRob2QoKSB7fSB9OyIpOworICAg
IGNoZWNrU3ludGF4RXJyb3IoInZhciBvYmogPSB7IGFzeW5jIGFzeW5jR2VuZXJhdG9yTWV0aG9k
KigpIHt9IH07Iik7CisgICAgY2hlY2tTeW50YXhFcnJvcigiY2xhc3MgQSB7IGdldCBhc3luYyog
dHR0KCkge30gfSIpOworICAgIGNoZWNrU3ludGF4RXJyb3IoImNsYXNzIEIgeyBnZXQgKmFzeW5j
IHR0dCgpIHt9IH0iKTsKKyAgICBjaGVja1N5bnRheEVycm9yKCcoeyBhc3luYyA9IDEgfSknKTsK
K30pKCk7CisKKyhmdW5jdGlvbiBjaGVja1NpbXBsZUFzeW5jR2VuZXJhdG9yU3ludGF4RXJyb3JJ
blN0cmljdE1vZGUoKSB7CisgICAgY2hlY2tTeW50YXhFcnJvcigiJ3VzZSBzdHJpY3QnOyB2YXIg
YXN5bmNHZW5GbiA9IGFzeW5jIGZ1bmN0aW9uICphd2FpdCgpIHt9Iik7CisgICAgY2hlY2tTeW50
YXhFcnJvcigiJ3VzZSBzdHJpY3QnOyB2YXIgYXN5bmNHZW5GbiA9IGFzeW5jIGZ1bmN0aW9uKihh
d2FpdCkge30iKTsKKyAgICBjaGVja1N5bnRheEVycm9yKCIndXNlIHN0cmljdCc7IHZhciBhc3lu
Y0dlbkZuID0gYXN5bmMgZnVuY3Rpb24gKndpdGhOYW1lKGF3YWl0KSB7fSIpOworICAgIGNoZWNr
U3ludGF4RXJyb3IoIid1c2Ugc3RyaWN0JzsgYXN5bmMgZnVuY3Rpb24gKmFzeW5jR2VuZXJhdG9y
RnVuY3Rpb25EZWNsYXJhdGlvbihhd2FpdCkge30iKTsKKyAgICBjaGVja1N5bnRheEVycm9yKCIn
dXNlIHN0cmljdCc7IHZhciBhc3luY0dlbkZuID0gKmFzeW5jIGZ1bmN0aW9uICgpIHt9Iik7Cisg
ICAgY2hlY2tTeW50YXhFcnJvcigiJ3VzZSBzdHJpY3QnOyB2YXIgYXN5bmNHZW5GbiA9ICphc3lu
YyBmdW5jdGlvbiB3aXRoTmFtZSgpIHt9Iik7CisgICAgY2hlY2tTeW50YXhFcnJvcigiJ3VzZSBz
dHJpY3QnOyAqYXN5bmMgZnVuY3Rpb24gYXN5bmNHZW5lcmF0b3JGdW5jdGlvbkRlY2xhcmF0aW9u
KGF3YWl0KSB7fSIpOworICAgIGNoZWNrU3ludGF4RXJyb3IoIid1c2Ugc3RyaWN0JzsgdmFyIG9i
aiA9IHsgKmFzeW5jIGFzeW5jR2VuZXJhdG9yTWV0aG9kKCkge30gfTsiKTsKKyAgICBjaGVja1N5
bnRheEVycm9yKCIndXNlIHN0cmljdCc7IHZhciBvYmogPSB7IGFzeW5jIGFzeW5jR2VuZXJhdG9y
TWV0aG9kKigpIHt9IH07Iik7CisgICAgY2hlY2tTeW50YXhFcnJvcigiJ3VzZSBzdHJpY3QnOyBj
bGFzcyBBIHsgZ2V0IGFzeW5jKiB0dHQoKSB7fSB9Iik7CisgICAgY2hlY2tTeW50YXhFcnJvcigi
J3VzZSBzdHJpY3QnOyBjbGFzcyBCIHsgZ2V0ICphc3luYyB0dHQoKSB7fSB9Iik7CisgICAgY2hl
Y2tTeW50YXhFcnJvcigiJ3VzZSBzdHJpY3QnOyAoeyBhc3luYyA9IDEgfSkiKTsKK30pKCk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>