<?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>153737</bug_id>
          
          <creation_ts>2016-01-31 23:37:39 -0800</creation_ts>
          <short_desc>[JSC] Introduce BytecodeIntrinsic constant rep like @undefined</short_desc>
          <delta_ts>2016-02-02 11:33:15 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>benjamin</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1160800</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-01-31 23:37:39 -0800</bug_when>
    <thetext>[JSC] Introduce BytecodeIntrinsic constant rep like @undefined</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1160803</commentid>
    <comment_count>1</comment_count>
      <attachid>270379</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-02-01 00:38:20 -0800</bug_when>
    <thetext>Created attachment 270379
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1160812</commentid>
    <comment_count>2</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-02-01 03:02:15 -0800</bug_when>
    <thetext>The other plan (additional) is, converting GetGlobalVar in DFG to JSConstant if the property is NonWritable and NonConfigurable.
What do you think of?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1160915</commentid>
    <comment_count>3</comment_count>
      <attachid>270379</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-02-01 10:13:28 -0800</bug_when>
    <thetext>Comment on attachment 270379
Patch

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

What prevents us from accidentally using &quot;undefined&quot; instead of &quot;@undefined&quot;? Seems like it might be easy to make this kind of error.

&gt; Source/JavaScriptCore/bytecode/BytecodeIntrinsicRegistry.cpp:37
&gt; -#define INITIALISE_BYTECODE_INTRINSIC_NAMES_TO_SET(name) m_bytecodeIntrinsicMap.add(propertyNames.name##PrivateName.impl(), &amp;BytecodeIntrinsicNode::emit_intrinsic_##name);
&gt; +#define INITIALISE_BYTECODE_INTRINSIC_NAMES_TO_SET(name) m_bytecodeIntrinsicMap.add(vm.propertyNames-&gt;name##PrivateName.impl(), &amp;BytecodeIntrinsicNode::emit_intrinsic_##name);

INITIALISE is the British spelling. We should move to INITIALIZE in the future.

&gt; Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp:860
&gt; +            return 0; \

nullptr</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1160951</commentid>
    <comment_count>4</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-02-01 11:15:35 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; Comment on attachment 270379 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=270379&amp;action=review
&gt; 
&gt; What prevents us from accidentally using &quot;undefined&quot; instead of
&gt; &quot;@undefined&quot;? Seems like it might be easy to make this kind of error.

I agree that this would be good to have. Maybe we can do some
post-parsing validation only in debug builds. I think we already
do some post-parsing validation for builtins, but I forget for what.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1160955</commentid>
    <comment_count>5</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-02-01 11:36:11 -0800</bug_when>
    <thetext>&gt; &gt; What prevents us from accidentally using &quot;undefined&quot; instead of
&gt; &gt; &quot;@undefined&quot;? Seems like it might be easy to make this kind of error.
&gt; 
&gt; I agree that this would be good to have. Maybe we can do some
&gt; post-parsing validation only in debug builds. I think we already
&gt; do some post-parsing validation for builtins, but I forget for what.

I propose: Once we have constants available for all &quot;@&quot; constructs -- and perhaps we do already -- we should treat any use of a non-locally-resolved variable in a builtin as a compile-time error.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1161322</commentid>
    <comment_count>6</comment_count>
      <attachid>270379</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-02-02 11:08:16 -0800</bug_when>
    <thetext>Comment on attachment 270379
Patch

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

Thanks for your review.
We have some post parsing pass in BuiltinExecutable.cpp&apos;s createExecutableInternal. So, we should check this here.
I&apos;ll create it in another patch :)

&gt;&gt; Source/JavaScriptCore/bytecode/BytecodeIntrinsicRegistry.cpp:37
&gt;&gt; +#define INITIALISE_BYTECODE_INTRINSIC_NAMES_TO_SET(name) m_bytecodeIntrinsicMap.add(vm.propertyNames-&gt;name##PrivateName.impl(), &amp;BytecodeIntrinsicNode::emit_intrinsic_##name);
&gt; 
&gt; INITIALISE is the British spelling. We should move to INITIALIZE in the future.

ok. here, I&apos;ll rename this to INITIALIZE.

&gt;&gt; Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp:860
&gt;&gt; +            return 0; \
&gt; 
&gt; nullptr

Thanks! Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1161325</commentid>
    <comment_count>7</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-02-02 11:14:29 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; &gt; &gt; What prevents us from accidentally using &quot;undefined&quot; instead of
&gt; &gt; &gt; &quot;@undefined&quot;? Seems like it might be easy to make this kind of error.
&gt; &gt; 
&gt; &gt; I agree that this would be good to have. Maybe we can do some
&gt; &gt; post-parsing validation only in debug builds. I think we already
&gt; &gt; do some post-parsing validation for builtins, but I forget for what.
&gt; 
&gt; I propose: Once we have constants available for all &quot;@&quot; constructs -- and
&gt; perhaps we do already -- we should treat any use of a non-locally-resolved
&gt; variable in a builtin as a compile-time error.

Nice. To do so, I think we need some interesting phase in CodeBlock.
Since UnlinkedCodeBlock is not linked to JSGlobalObject, we cannot use any constant values that belongs to the realm.
Currently, in this patch, all the constants are primitive values.

One idea is that,

1. In the parsing phase, when we see @xxx (like, `@Object`), we look up it from the bytecode intrinsic registry. And if there is none, we should assert it!
2. And filling constant buffer with placeholder value.
3. Later, in CodeBlock phase, we will fill it with the actual constant value linked with the specific JSGlobalObject.

And luckly, we already have some mechanizm for that., called link time constant (see emitMoveLinkTimeConstant, that is used to fill `defineProperty` method in constant register).
Extending this mechanizm to use it genericly and easily is nice. And as the result, we can purge all the hacky JSGlobalObject&apos;s private properties.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1161327</commentid>
    <comment_count>8</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-02-02 11:16:54 -0800</bug_when>
    <thetext>Opened the issue for that. https://bugs.webkit.org/show_bug.cgi?id=153792</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1161336</commentid>
    <comment_count>9</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-02-02 11:33:15 -0800</bug_when>
    <thetext>Committed r196022: &lt;http://trac.webkit.org/changeset/196022&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>270379</attachid>
            <date>2016-02-01 00:38:20 -0800</date>
            <delta_ts>2016-02-01 10:13:28 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-153737-20160201173754.patch</filename>
            <type>text/plain</type>
            <size>93228</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk1OTQ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA2
NTk5NjNiYjZlZjJhN2FjMTdkMjA2ZmU2NjgyZTM2ZWQxMzE4YWEwLi5kOTI4YzlhZGE4NDhiZTE4
YjdkNGRlNzhkOWY3NDYwNzgwNTA2OGFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNDUgQEAKKzIwMTYtMDItMDEgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFp
bC5jb20+CisKKyAgICAgICAgW0pTQ10gSW50cm9kdWNlIEJ5dGVjb2RlSW50cmluc2ljIGNvbnN0
YW50IHJlcCBsaWtlIEB1bmRlZmluZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE1MzczNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggZW5oYW5jZXMgZXhpc3RpbmcgQnl0ZWNvZGVJbnRy
aW5zaWMgbWVjaGFuaXNtIHRvIGFjY2VwdCBgQHh4eGAgZm9ybSwKKyAgICAgICAgdGhhdCB3aWxs
IGJlIHVzZWQgdG8gcmVwcmVzZW50IGJ5dGVjb2RlIGludHJpbnNpYyBjb25zdGFudHMuCisgICAg
ICAgIEFmdGVyIHRoaXMgY2hhbmdlLCB3ZSBjYW4gdXNlIDIgZm9ybXMgZm9yIGJ5dGVjb2RlIGlu
dHJpbnNpY3MuICgxKSBGdW5jdGlvbiBmb3JtIChsaWtlLCBAdG9TdHJpbmcodmFsdWUpKQorICAg
ICAgICBhbmQgKDIpIENvbnN0YW50IGZvcm0gKGxpa2UgQHVuZGVmaW5lZCkuCisKKyAgICAgICAg
Qnl0ZWNvZGUgaW50cmluc2ljIGNvbnN0YW50cyBhbGxvdyB1cyB0byBlYXNpbHkgZXhwb3NlIGNv
bnN0YW50IHZhbHVlcyBmcm9tIEMrKyB3b3JsZC4KKyAgICAgICAgRm9yIGV4YW1wbGUsIHdlIGNh
biBleHBvc2UgQXJyYXlJdGVyYXRpb25LaW5kIGZsYWdzIHRvIEpTIHdvcmxkIHdpdGhvdXQgdXNp
bmcgcHJpdmF0ZSBnbG9iYWwgdmFyaWFibGVzLgorICAgICAgICBFeHBvc2VkIGNvbnN0YW50IHZh
bHVlcyBhcmUgbG9hZGVkIGZyb20gYnl0ZWNvZGVzIGRpcmVjdGx5IHRocm91Z2ggY29uc3RhbnQg
cmVnaXN0ZXJzLgorICAgICAgICBXaGlsZSBwcmV2aW91c2x5IHdlIGV4cG9zZSB0aGVtIHRocm91
Z2ggcHJpdmF0ZSBnbG9iYWwgdmFyaWFibGVzLCBieXRlY29kZSBpbnRyaW5zaWMgY29uc3RhbnRz
CisgICAgICAgIGNhbiBiZSBsb2FkZWQgZGlyZWN0bHkgZnJvbSBDb2RlQmxvY2suIEFuZCBsYXRl
ciwgaXQgd2lsbCBiZWNvbWUgSlNDb25zdGFudCBpbiBERkcuCisKKyAgICAgICAgQW5kIGJ5IHVz
aW5nIHRoaXMgbWVjaGFuaXNtLCB3ZSBpbXBsZW1lbnQgc2V2ZXJhbCBjb25zdGFudHMuIEB1bmRl
ZmluZWQsIEBhcnJheUl0ZXJhdGlvbktpbmRLZXlWYWx1ZSBldGMuCisKKyAgICAgICAgKiBidWls
dGlucy9BcnJheUNvbnN0cnVjdG9yLmpzOgorICAgICAgICAoZnJvbSk6CisgICAgICAgICogYnVp
bHRpbnMvQXJyYXlJdGVyYXRvclByb3RvdHlwZS5qczoKKyAgICAgICAgKG5leHQpOgorICAgICAg
ICAqIGJ1aWx0aW5zL0FycmF5UHJvdG90eXBlLmpzOgorICAgICAgICAocmVkdWNlKToKKyAgICAg
ICAgKHJlZHVjZVJpZ2h0KToKKyAgICAgICAgKGV2ZXJ5KToKKyAgICAgICAgKGZvckVhY2gpOgor
ICAgICAgICAoZmlsdGVyKToKKyAgICAgICAgKG1hcCk6CisgICAgICAgIChzb21lKToKKyAgICAg
ICAgKGZpbGwpOgorICAgICAgICAoZmluZCk6CisgICAgICAgIChmaW5kSW5kZXgpOgorICAgICAg
ICAoaW5jbHVkZXMpOgorICAgICAgICAoc29ydC5jb21wYWN0U3BhcnNlKToKKyAgICAgICAgKHNv
cnQuY29tcGFjdFNsb3cpOgorICAgICAgICAoc29ydC5jb21wYWN0KToKKyAgICAgICAgKHNvcnQp
OgorICAgICAgICAoY29weVdpdGhpbik6CisgICAgICAgICogYnVpbHRpbnMvRGF0ZVByb3RvdHlw
ZS5qczoKKyAgICAgICAgKHRvTG9jYWxlU3RyaW5nLnRvRGF0ZVRpbWVPcHRpb25zQW55QWxsKToK
KyAgICAgICAgKHRvTG9jYWxlU3RyaW5nKToKKyAgICAgICAgKHRvTG9jYWxlRGF0ZVN0cmluZy50
b0RhdGVUaW1lT3B0aW9uc0RhdGVEYXRlKToKKyAgICAgICAgKHRvTG9jYWxlRGF0ZVN0cmluZyk6
CisgICAgICAgICh0b0xvY2FsZVRpbWVTdHJpbmcudG9EYXRlVGltZU9wdGlvbnNUaW1lVGltZSk6
CisgICAgICAgICh0b0xvY2FsZVRpbWVTdHJpbmcpOgorICAgICAgICAqIGJ1aWx0aW5zL0dlbmVy
YXRvclByb3RvdHlwZS5qczoKKyAgICAgICAgKGdlbmVyYXRvclJlc3VtZSk6CisgICAgICAgICog
YnVpbHRpbnMvR2xvYmFsT2JqZWN0LmpzOgorICAgICAgICAoaXNEaWN0aW9uYXJ5KToKKyAgICAg
ICAgKiBidWlsdGlucy9JbnRlcm5hbFByb21pc2VDb25zdHJ1Y3Rvci5qczoKKyAgICAgICAgKGlu
dGVybmFsQWxsLm5ld1Jlc29sdmVFbGVtZW50KToKKyAgICAgICAgKGludGVybmFsQWxsKToKKyAg
ICAgICAgKiBidWlsdGlucy9JdGVyYXRvclByb3RvdHlwZS5qczoKKyAgICAgICAgKHN5bWJvbEl0
ZXJhdG9yR2V0dGVyKToKKyAgICAgICAgKHN5bWJvbEl0ZXJhdG9yKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBidWlsdGlucy9NYXBQcm90b3R5cGUuanM6CisgICAgICAgIChmb3JFYWNoKToKKyAgICAg
ICAgKiBidWlsdGlucy9Nb2R1bGVMb2FkZXJPYmplY3QuanM6CisgICAgICAgIChuZXdSZWdpc3Ry
eUVudHJ5KToKKyAgICAgICAgKGZvcmNlRnVsZmlsbFByb21pc2UpOgorICAgICAgICAoY29tbWl0
SW5zdGFudGlhdGVkKToKKyAgICAgICAgKHJlcXVlc3RGZXRjaCk6CisgICAgICAgIChyZXF1ZXN0
VHJhbnNsYXRlKToKKyAgICAgICAgKHJlcXVlc3RJbnN0YW50aWF0ZSk6CisgICAgICAgIChyZXF1
ZXN0TGluayk6CisgICAgICAgIChwcm92aWRlKToKKyAgICAgICAgKiBidWlsdGlucy9Qcm9taXNl
Q29uc3RydWN0b3IuanM6CisgICAgICAgIChhbGwubmV3UmVzb2x2ZUVsZW1lbnQpOgorICAgICAg
ICAoYWxsKToKKyAgICAgICAgKHJhY2UpOgorICAgICAgICAocmVqZWN0KToKKyAgICAgICAgKHJl
c29sdmUpOgorICAgICAgICAqIGJ1aWx0aW5zL1Byb21pc2VPcGVyYXRpb25zLmpzOgorICAgICAg
ICAobmV3UHJvbWlzZUNhcGFiaWxpdHkuZXhlY3V0b3IpOgorICAgICAgICAobmV3UHJvbWlzZUNh
cGFiaWxpdHkpOgorICAgICAgICAocmVqZWN0UHJvbWlzZSk6CisgICAgICAgIChmdWxmaWxsUHJv
bWlzZSk6CisgICAgICAgIChjcmVhdGVSZXNvbHZpbmdGdW5jdGlvbnMucmVzb2x2ZSk6CisgICAg
ICAgIChjcmVhdGVSZXNvbHZpbmdGdW5jdGlvbnMucmVqZWN0KToKKyAgICAgICAgKGNyZWF0ZVJl
c29sdmluZ0Z1bmN0aW9ucyk6CisgICAgICAgIChwcm9taXNlUmVhY3Rpb25Kb2IpOgorICAgICAg
ICAocHJvbWlzZVJlc29sdmVUaGVuYWJsZUpvYik6CisgICAgICAgIChpbml0aWFsaXplUHJvbWlz
ZSk6CisgICAgICAgICogYnVpbHRpbnMvUHJvbWlzZVByb3RvdHlwZS5qczoKKyAgICAgICAgKGNh
dGNoKToKKyAgICAgICAgKHRoZW4pOgorICAgICAgICAqIGJ1aWx0aW5zL1NldFByb3RvdHlwZS5q
czoKKyAgICAgICAgKGZvckVhY2gpOgorICAgICAgICAqIGJ1aWx0aW5zL1N0cmluZ0NvbnN0cnVj
dG9yLmpzOgorICAgICAgICAocmF3KToKKyAgICAgICAgKiBidWlsdGlucy9TdHJpbmdJdGVyYXRv
clByb3RvdHlwZS5qczoKKyAgICAgICAgKG5leHQpOgorICAgICAgICAqIGJ1aWx0aW5zL1N0cmlu
Z1Byb3RvdHlwZS5qczoKKyAgICAgICAgKGxvY2FsZUNvbXBhcmUpOgorICAgICAgICAqIGJ1aWx0
aW5zL1R5cGVkQXJyYXlDb25zdHJ1Y3Rvci5qczoKKyAgICAgICAgKG9mKToKKyAgICAgICAgKGZy
b20pOgorICAgICAgICAqIGJ1aWx0aW5zL1R5cGVkQXJyYXlQcm90b3R5cGUuanM6CisgICAgICAg
IChldmVyeSk6CisgICAgICAgIChmaW5kKToKKyAgICAgICAgKGZpbmRJbmRleCk6CisgICAgICAg
IChmb3JFYWNoKToKKyAgICAgICAgKHNvbWUpOgorICAgICAgICAocmVkdWNlKToKKyAgICAgICAg
KHJlZHVjZVJpZ2h0KToKKyAgICAgICAgKG1hcCk6CisgICAgICAgIChmaWx0ZXIpOgorICAgICAg
ICAqIGJ5dGVjb2RlL0J5dGVjb2RlSW50cmluc2ljUmVnaXN0cnkuY3BwOgorICAgICAgICAoSlND
OjpCeXRlY29kZUludHJpbnNpY1JlZ2lzdHJ5OjpCeXRlY29kZUludHJpbnNpY1JlZ2lzdHJ5KToK
KyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVJbnRyaW5zaWNSZWdpc3RyeTo6bG9va3VwKToKKyAgICAg
ICAgKiBieXRlY29kZS9CeXRlY29kZUludHJpbnNpY1JlZ2lzdHJ5Lmg6CisgICAgICAgICogYnl0
ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHA6CisgICAgICAgICogcGFyc2VyL0FTVEJ1aWxkZXIu
aDoKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlUmVzb2x2ZSk6CisgICAgICAgIChK
U0M6OkFTVEJ1aWxkZXI6Om1ha2VGdW5jdGlvbkNhbGxOb2RlKToKKyAgICAgICAgKiBwYXJzZXIv
Tm9kZUNvbnN0cnVjdG9ycy5oOgorICAgICAgICAoSlNDOjpCeXRlY29kZUludHJpbnNpY05vZGU6
OkJ5dGVjb2RlSW50cmluc2ljTm9kZSk6CisgICAgICAgICogcGFyc2VyL05vZGVzLmg6CisgICAg
ICAgIChKU0M6OkV4cHJlc3Npb25Ob2RlOjppc0J5dGVjb2RlSW50cmluc2ljTm9kZSk6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlSW50cmluc2ljTm9kZTo6dHlwZSk6CisgICAgICAgIChKU0M6OkJ5
dGVjb2RlSW50cmluc2ljTm9kZTo6ZW1pdHRlcik6CisgICAgICAgICogcGFyc2VyL1BhcnNlci5j
cHA6CisgICAgICAgIChKU0M6OlBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZVByb3BlcnR5KToKKyAg
ICAgICAgKEpTQzo6UGFyc2VyPExleGVyVHlwZT46OnBhcnNlUHJpbWFyeUV4cHJlc3Npb24pOgor
ICAgICAgICAqIHBhcnNlci9TeW50YXhDaGVja2VyLmg6CisgICAgICAgIChKU0M6OlN5bnRheENo
ZWNrZXI6OmNyZWF0ZVJlc29sdmUpOgorICAgICAgICAqIHJ1bnRpbWUvQ29tbW9uSWRlbnRpZmll
cnMuY3BwOgorICAgICAgICAoSlNDOjpDb21tb25JZGVudGlmaWVyczo6Q29tbW9uSWRlbnRpZmll
cnMpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaDoKKyAg
ICAgICAgKEpTQzo6Q29tbW9uSWRlbnRpZmllcnM6OmJ5dGVjb2RlSW50cmluc2ljUmVnaXN0cnkp
OiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSXRlcmF0b3JQcm90b3R5cGUuY3BwOgorICAg
ICAgICAoSlNDOjpJdGVyYXRvclByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAq
IHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVj
dDo6aW5pdCk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAgIChK
U0M6OlZNOjpWTSk6CisgICAgICAgICogcnVudGltZS9WTS5oOgorICAgICAgICAoSlNDOjpWTTo6
Ynl0ZWNvZGVJbnRyaW5zaWNSZWdpc3RyeSk6CisKIDIwMTYtMDEtMzEgIERhbiBCZXJuc3RlaW4g
IDxtaXR6QGFwcGxlLmNvbT4KIAogICAgICAgICBbQ29jb2FdIFJlbW92ZSB1bnVzZWQgZGVmaW5p
dGlvbiBvZiBIQVZFX0hFQURFUl9ERVRFQ1RJT05fSApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGY0N2JjZGEyODYw
MzEzNDc4YzgwYzYwODk4OTg1NTZjOWI2Njg4NWQuLjg1Y2U2Y2ZkN2U4NTc4ZmM5Nzk0NWYyMTQ3
ZDY3YjEzNjA2NDU2NjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzOCBAQAorMjAxNi0wMi0wMSAg
WXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KKworICAgICAgICBbSlNDXSBJ
bnRyb2R1Y2UgQnl0ZWNvZGVJbnRyaW5zaWMgY29uc3RhbnQgcmVwIGxpa2UgQHVuZGVmaW5lZAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUzNzM3CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBNb2R1bGVz
L2ZldGNoL0ZldGNoSGVhZGVycy5qczoKKyAgICAgICAgKGluaXRpYWxpemVGZXRjaEhlYWRlcnMp
OgorICAgICAgICAqIE1vZHVsZXMvc3RyZWFtcy9SZWFkYWJsZVN0cmVhbS5qczoKKyAgICAgICAg
KGluaXRpYWxpemVSZWFkYWJsZVN0cmVhbSk6CisgICAgICAgIChjbG9zZURlc3RpbmF0aW9uKToK
KyAgICAgICAgKGFib3J0RGVzdGluYXRpb24pOgorICAgICAgICAocGlwZVRvKToKKyAgICAgICAg
KiBNb2R1bGVzL3N0cmVhbXMvUmVhZGFibGVTdHJlYW1JbnRlcm5hbHMuanM6CisgICAgICAgIChw
cml2YXRlSW5pdGlhbGl6ZVJlYWRhYmxlU3RyZWFtQ29udHJvbGxlcik6CisgICAgICAgICh0ZWVS
ZWFkYWJsZVN0cmVhbSk6CisgICAgICAgIChpc1JlYWRhYmxlU3RyZWFtUmVhZGVyKToKKyAgICAg
ICAgKGVycm9yUmVhZGFibGVTdHJlYW0pOgorICAgICAgICAoZmluaXNoQ2xvc2luZ1JlYWRhYmxl
U3RyZWFtKToKKyAgICAgICAgKGVucXVldWVJblJlYWRhYmxlU3RyZWFtKToKKyAgICAgICAgKHJl
YWRGcm9tUmVhZGFibGVTdHJlYW1SZWFkZXIpOgorICAgICAgICAqIE1vZHVsZXMvc3RyZWFtcy9S
ZWFkYWJsZVN0cmVhbVJlYWRlci5qczoKKyAgICAgICAgKHJlbGVhc2VMb2NrKToKKyAgICAgICAg
KiBNb2R1bGVzL3N0cmVhbXMvU3RyZWFtSW50ZXJuYWxzLmpzOgorICAgICAgICAoc2hpZWxkaW5n
UHJvbWlzZVJlc29sdmUpOgorICAgICAgICAocHJvbWlzZUludm9rZU9yTm9vcE5vQ2F0Y2gpOgor
ICAgICAgICAocHJvbWlzZUludm9rZU9yRmFsbGJhY2tPck5vb3ApOgorICAgICAgICAodmFsaWRh
dGVBbmROb3JtYWxpemVRdWV1aW5nU3RyYXRlZ3kpOgorICAgICAgICAqIE1vZHVsZXMvc3RyZWFt
cy9Xcml0YWJsZVN0cmVhbS5qczoKKyAgICAgICAgKGluaXRpYWxpemVXcml0YWJsZVN0cmVhbSk6
CisgICAgICAgICh3cml0ZSk6CisgICAgICAgICogTW9kdWxlcy9zdHJlYW1zL1dyaXRhYmxlU3Ry
ZWFtSW50ZXJuYWxzLmpzOgorICAgICAgICAoZXJyb3JXcml0YWJsZVN0cmVhbSk6CisKIDIwMTYt
MDEtMzEgIERhbmllbCBCYXRlcyAgPGRhYmF0ZXNAYXBwbGUuY29tPgogCiAgICAgICAgIENTUDog
VXNlIHRoZSBzZXJ2ZWQgQ1NQIGhlYWRlciBmb3IgZGVkaWNhdGVkIHdvcmtlcnMKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9BcnJheUNvbnN0cnVjdG9yLmpzIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0FycmF5Q29uc3RydWN0b3IuanMKaW5kZXgg
OWU4YzFiNDQ5NmNjNTQ0ZjQwNzczOTUwNDJjZmQyNGU4YTM5NDY2MS4uMjdlZmMxZDk1YjY1N2Jl
M2YwYzBiMzhjZjA0ZjM5NDY3MzQwZDg4NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J1aWx0aW5zL0FycmF5Q29uc3RydWN0b3IuanMKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J1aWx0aW5zL0FycmF5Q29uc3RydWN0b3IuanMKQEAgLTQyLDExICs0MiwxMSBAQCBmdW5j
dGlvbiBmcm9tKGl0ZW1zIC8qLCBtYXBGbiwgdGhpc0FyZyAqLykKIAogICAgIHZhciB0aGlzT2Jq
ID0gdGhpczsKIAotICAgIHZhciBtYXBGbiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1l
bnRzWzFdIDogdW5kZWZpbmVkOworICAgIHZhciBtYXBGbiA9IGFyZ3VtZW50cy5sZW5ndGggPiAx
ID8gYXJndW1lbnRzWzFdIDogQHVuZGVmaW5lZDsKIAogICAgIHZhciB0aGlzQXJnOwogCi0gICAg
aWYgKG1hcEZuICE9PSB1bmRlZmluZWQpIHsKKyAgICBpZiAobWFwRm4gIT09IEB1bmRlZmluZWQp
IHsKICAgICAgICAgaWYgKHR5cGVvZiBtYXBGbiAhPT0gImZ1bmN0aW9uIikKICAgICAgICAgICAg
IHRocm93IG5ldyBAVHlwZUVycm9yKCJBcnJheS5mcm9tIHJlcXVpcmVzIHRoYXQgdGhlIHNlY29u
ZCBhcmd1bWVudCwgd2hlbiBwcm92aWRlZCwgYmUgYSBmdW5jdGlvbiIpOwogCkBAIC03OSw3ICs3
OSw3IEBAIGZ1bmN0aW9uIGZyb20oaXRlbXMgLyosIG1hcEZuLCB0aGlzQXJnICovKQogCiAgICAg
ICAgIGZvciAodmFyIHZhbHVlIG9mIHdyYXBwZXIpIHsKICAgICAgICAgICAgIGlmIChtYXBGbikK
LSAgICAgICAgICAgICAgICBAcHV0QnlWYWxEaXJlY3QocmVzdWx0LCBrLCB0aGlzQXJnID09PSB1
bmRlZmluZWQgPyBtYXBGbih2YWx1ZSwgaykgOiBtYXBGbi5AY2FsbCh0aGlzQXJnLCB2YWx1ZSwg
aykpOworICAgICAgICAgICAgICAgIEBwdXRCeVZhbERpcmVjdChyZXN1bHQsIGssIHRoaXNBcmcg
PT09IEB1bmRlZmluZWQgPyBtYXBGbih2YWx1ZSwgaykgOiBtYXBGbi5AY2FsbCh0aGlzQXJnLCB2
YWx1ZSwgaykpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIEBwdXRCeVZhbERp
cmVjdChyZXN1bHQsIGssIHZhbHVlKTsKICAgICAgICAgICAgIGsgKz0gMTsKQEAgLTk5LDcgKzk5
LDcgQEAgZnVuY3Rpb24gZnJvbShpdGVtcyAvKiwgbWFwRm4sIHRoaXNBcmcgKi8pCiAgICAgd2hp
bGUgKGsgPCBhcnJheUxpa2VMZW5ndGgpIHsKICAgICAgICAgdmFyIHZhbHVlID0gYXJyYXlMaWtl
W2tdOwogICAgICAgICBpZiAobWFwRm4pCi0gICAgICAgICAgICBAcHV0QnlWYWxEaXJlY3QocmVz
dWx0LCBrLCB0aGlzQXJnID09PSB1bmRlZmluZWQgPyBtYXBGbih2YWx1ZSwgaykgOiBtYXBGbi5A
Y2FsbCh0aGlzQXJnLCB2YWx1ZSwgaykpOworICAgICAgICAgICAgQHB1dEJ5VmFsRGlyZWN0KHJl
c3VsdCwgaywgdGhpc0FyZyA9PT0gQHVuZGVmaW5lZCA/IG1hcEZuKHZhbHVlLCBrKSA6IG1hcEZu
LkBjYWxsKHRoaXNBcmcsIHZhbHVlLCBrKSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIEBw
dXRCeVZhbERpcmVjdChyZXN1bHQsIGssIHZhbHVlKTsKICAgICAgICAgayArPSAxOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0FycmF5SXRlcmF0b3JQcm90b3R5
cGUuanMgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQXJyYXlJdGVyYXRvclByb3Rv
dHlwZS5qcwppbmRleCBmNjg3ZmMyNmY4MzlkMTEzMTc2OGE2MWVlODZlZGZjNDFkOWM4MmVlLi5h
YTc4ODZjNmY3MDI3MDg0MjhkMzlkODA1MDI0Y2RkNWU1MmFlN2UwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQXJyYXlJdGVyYXRvclByb3RvdHlwZS5qcworKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQXJyYXlJdGVyYXRvclByb3RvdHlwZS5q
cwpAQCAtMzEsMTggKzMxLDE4IEBAIGZ1bmN0aW9uIG5leHQoKQogICAgICAgICB0aHJvdyBuZXcg
QFR5cGVFcnJvcigiJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlLm5leHQgcmVxdWlyZXMgdGhhdCB8
dGhpc3wgbm90IGJlIG51bGwgb3IgdW5kZWZpbmVkIik7CiAKICAgICB2YXIgaXRlbUtpbmQgPSB0
aGlzLkBhcnJheUl0ZXJhdGlvbktpbmQ7Ci0gICAgaWYgKGl0ZW1LaW5kID09PSB1bmRlZmluZWQp
CisgICAgaWYgKGl0ZW1LaW5kID09PSBAdW5kZWZpbmVkKQogICAgICAgICB0aHJvdyBuZXcgQFR5
cGVFcnJvcigiJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlLm5leHQgcmVxdWlyZXMgdGhhdCB8dGhp
c3wgYmUgYW4gQXJyYXkgSXRlcmF0b3IgaW5zdGFuY2UiKTsKIAogICAgIHZhciBkb25lID0gdHJ1
ZTsKLSAgICB2YXIgdmFsdWUgPSB1bmRlZmluZWQ7CisgICAgdmFyIHZhbHVlID0gQHVuZGVmaW5l
ZDsKIAogICAgIHZhciBhcnJheSA9IHRoaXMuQGl0ZXJhdGVkT2JqZWN0OwotICAgIGlmIChhcnJh
eSAhPT0gdW5kZWZpbmVkKSB7CisgICAgaWYgKGFycmF5ICE9PSBAdW5kZWZpbmVkKSB7CiAgICAg
ICAgIHZhciBpbmRleCA9IHRoaXMuQGFycmF5SXRlcmF0b3JOZXh0SW5kZXg7CiAgICAgICAgIHZh
ciBsZW5ndGggPSBhcnJheS5sZW5ndGggPj4+IDA7CiAgICAgICAgIGlmIChpbmRleCA+PSBsZW5n
dGgpIHsKLSAgICAgICAgICAgIHRoaXMuQGl0ZXJhdGVkT2JqZWN0ID0gdW5kZWZpbmVkOworICAg
ICAgICAgICAgdGhpcy5AaXRlcmF0ZWRPYmplY3QgPSBAdW5kZWZpbmVkOwogICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgdGhpcy5AYXJyYXlJdGVyYXRvck5leHRJbmRleCA9IGluZGV4ICsg
MTsKICAgICAgICAgICAgIGRvbmUgPSBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9idWlsdGlucy9BcnJheVByb3RvdHlwZS5qcyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9idWlsdGlucy9BcnJheVByb3RvdHlwZS5qcwppbmRleCBmMDg4ZDI2MzllYmY0NDE5YTU1Yzdh
M2Y2ZWRiMGIxZDgwMDBjY2YyLi41N2M4MWQ3Yzc0MjNlOTU2ODgzZThhMjlhMDI3ZjAyMjUzZjEx
ZGYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQXJyYXlQcm90
b3R5cGUuanMKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0FycmF5UHJvdG90
eXBlLmpzCkBAIC0zMSw3ICszMSw3IEBAIGZ1bmN0aW9uIHJlZHVjZShjYWxsYmFjayAvKiwgaW5p
dGlhbFZhbHVlICovKQogICAgIGlmICh0aGlzID09PSBudWxsKQogICAgICAgICB0aHJvdyBuZXcg
QFR5cGVFcnJvcigiQXJyYXkucHJvdG90eXBlLnJlZHVjZSByZXF1aXJlcyB0aGF0IHx0aGlzfCBu
b3QgYmUgbnVsbCIpOwogCi0gICAgaWYgKHRoaXMgPT09IHVuZGVmaW5lZCkKKyAgICBpZiAodGhp
cyA9PT0gQHVuZGVmaW5lZCkKICAgICAgICAgdGhyb3cgbmV3IEBUeXBlRXJyb3IoIkFycmF5LnBy
b3RvdHlwZS5yZWR1Y2UgcmVxdWlyZXMgdGhhdCB8dGhpc3wgbm90IGJlIHVuZGVmaW5lZCIpOwog
CiAgICAgdmFyIGFycmF5ID0gQE9iamVjdCh0aGlzKTsKQEAgLTU2LDcgKzU2LDcgQEAgZnVuY3Rp
b24gcmVkdWNlKGNhbGxiYWNrIC8qLCBpbml0aWFsVmFsdWUgKi8pCiAKICAgICB3aGlsZSAoayA8
IGxlbmd0aCkgewogICAgICAgICBpZiAoayBpbiBhcnJheSkKLSAgICAgICAgICAgIGFjY3VtdWxh
dG9yID0gY2FsbGJhY2suQGNhbGwodW5kZWZpbmVkLCBhY2N1bXVsYXRvciwgYXJyYXlba10sIGss
IGFycmF5KTsKKyAgICAgICAgICAgIGFjY3VtdWxhdG9yID0gY2FsbGJhY2suQGNhbGwoQHVuZGVm
aW5lZCwgYWNjdW11bGF0b3IsIGFycmF5W2tdLCBrLCBhcnJheSk7CiAgICAgICAgIGsgKz0gMTsK
ICAgICB9CiAgICAgcmV0dXJuIGFjY3VtdWxhdG9yOwpAQCAtNjksNyArNjksNyBAQCBmdW5jdGlv
biByZWR1Y2VSaWdodChjYWxsYmFjayAvKiwgaW5pdGlhbFZhbHVlICovKQogICAgIGlmICh0aGlz
ID09PSBudWxsKQogICAgICAgICB0aHJvdyBuZXcgQFR5cGVFcnJvcigiQXJyYXkucHJvdG90eXBl
LnJlZHVjZVJpZ2h0IHJlcXVpcmVzIHRoYXQgfHRoaXN8IG5vdCBiZSBudWxsIik7CiAKLSAgICBp
ZiAodGhpcyA9PT0gdW5kZWZpbmVkKQorICAgIGlmICh0aGlzID09PSBAdW5kZWZpbmVkKQogICAg
ICAgICB0aHJvdyBuZXcgQFR5cGVFcnJvcigiQXJyYXkucHJvdG90eXBlLnJlZHVjZVJpZ2h0IHJl
cXVpcmVzIHRoYXQgfHRoaXN8IG5vdCBiZSB1bmRlZmluZWQiKTsKIAogICAgIHZhciBhcnJheSA9
IEBPYmplY3QodGhpcyk7CkBAIC05NCw3ICs5NCw3IEBAIGZ1bmN0aW9uIHJlZHVjZVJpZ2h0KGNh
bGxiYWNrIC8qLCBpbml0aWFsVmFsdWUgKi8pCiAKICAgICB3aGlsZSAoayA+PSAwKSB7CiAgICAg
ICAgIGlmIChrIGluIGFycmF5KQotICAgICAgICAgICAgYWNjdW11bGF0b3IgPSBjYWxsYmFjay5A
Y2FsbCh1bmRlZmluZWQsIGFjY3VtdWxhdG9yLCBhcnJheVtrXSwgaywgYXJyYXkpOworICAgICAg
ICAgICAgYWNjdW11bGF0b3IgPSBjYWxsYmFjay5AY2FsbChAdW5kZWZpbmVkLCBhY2N1bXVsYXRv
ciwgYXJyYXlba10sIGssIGFycmF5KTsKICAgICAgICAgayAtPSAxOwogICAgIH0KICAgICByZXR1
cm4gYWNjdW11bGF0b3I7CkBAIC0xMDcsNyArMTA3LDcgQEAgZnVuY3Rpb24gZXZlcnkoY2FsbGJh
Y2sgLyosIHRoaXNBcmcgKi8pCiAgICAgaWYgKHRoaXMgPT09IG51bGwpCiAgICAgICAgIHRocm93
IG5ldyBAVHlwZUVycm9yKCJBcnJheS5wcm90b3R5cGUuZXZlcnkgcmVxdWlyZXMgdGhhdCB8dGhp
c3wgbm90IGJlIG51bGwiKTsKICAgICAKLSAgICBpZiAodGhpcyA9PT0gdW5kZWZpbmVkKQorICAg
IGlmICh0aGlzID09PSBAdW5kZWZpbmVkKQogICAgICAgICB0aHJvdyBuZXcgQFR5cGVFcnJvcigi
QXJyYXkucHJvdG90eXBlLmV2ZXJ5IHJlcXVpcmVzIHRoYXQgfHRoaXN8IG5vdCBiZSB1bmRlZmlu
ZWQiKTsKICAgICAKICAgICB2YXIgYXJyYXkgPSBAT2JqZWN0KHRoaXMpOwpAQCAtMTE2LDcgKzEx
Niw3IEBAIGZ1bmN0aW9uIGV2ZXJ5KGNhbGxiYWNrIC8qLCB0aGlzQXJnICovKQogICAgIGlmICh0
eXBlb2YgY2FsbGJhY2sgIT09ICJmdW5jdGlvbiIpCiAgICAgICAgIHRocm93IG5ldyBAVHlwZUVy
cm9yKCJBcnJheS5wcm90b3R5cGUuZXZlcnkgY2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uIik7
CiAgICAgCi0gICAgdmFyIHRoaXNBcmcgPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50
c1sxXSA6IHVuZGVmaW5lZDsKKyAgICB2YXIgdGhpc0FyZyA9IGFyZ3VtZW50cy5sZW5ndGggPiAx
ID8gYXJndW1lbnRzWzFdIDogQHVuZGVmaW5lZDsKICAgICAKICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgIGlmICghKGkgaW4gYXJyYXkpKQpAQCAtMTM1LDcg
KzEzNSw3IEBAIGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2sgLyosIHRoaXNBcmcgKi8pCiAgICAg
aWYgKHRoaXMgPT09IG51bGwpCiAgICAgICAgIHRocm93IG5ldyBAVHlwZUVycm9yKCJBcnJheS5w
cm90b3R5cGUuZm9yRWFjaCByZXF1aXJlcyB0aGF0IHx0aGlzfCBub3QgYmUgbnVsbCIpOwogICAg
IAotICAgIGlmICh0aGlzID09PSB1bmRlZmluZWQpCisgICAgaWYgKHRoaXMgPT09IEB1bmRlZmlu
ZWQpCiAgICAgICAgIHRocm93IG5ldyBAVHlwZUVycm9yKCJBcnJheS5wcm90b3R5cGUuZm9yRWFj
aCByZXF1aXJlcyB0aGF0IHx0aGlzfCBub3QgYmUgdW5kZWZpbmVkIik7CiAgICAgCiAgICAgdmFy
IGFycmF5ID0gQE9iamVjdCh0aGlzKTsKQEAgLTE0NCw3ICsxNDQsNyBAQCBmdW5jdGlvbiBmb3JF
YWNoKGNhbGxiYWNrIC8qLCB0aGlzQXJnICovKQogICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09
ICJmdW5jdGlvbiIpCiAgICAgICAgIHRocm93IG5ldyBAVHlwZUVycm9yKCJBcnJheS5wcm90b3R5
cGUuZm9yRWFjaCBjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb24iKTsKICAgICAKLSAgICB2YXIg
dGhpc0FyZyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVk
OworICAgIHZhciB0aGlzQXJnID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0g
OiBAdW5kZWZpbmVkOwogICAgIAogICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKysp
IHsKICAgICAgICAgaWYgKGkgaW4gYXJyYXkpCkBAIC0xNTksNyArMTU5LDcgQEAgZnVuY3Rpb24g
ZmlsdGVyKGNhbGxiYWNrIC8qLCB0aGlzQXJnICovKQogICAgIGlmICh0aGlzID09PSBudWxsKQog
ICAgICAgICB0aHJvdyBuZXcgQFR5cGVFcnJvcigiQXJyYXkucHJvdG90eXBlLmZpbHRlciByZXF1
aXJlcyB0aGF0IHx0aGlzfCBub3QgYmUgbnVsbCIpOwogICAgIAotICAgIGlmICh0aGlzID09PSB1
bmRlZmluZWQpCisgICAgaWYgKHRoaXMgPT09IEB1bmRlZmluZWQpCiAgICAgICAgIHRocm93IG5l
dyBAVHlwZUVycm9yKCJBcnJheS5wcm90b3R5cGUuZmlsdGVyIHJlcXVpcmVzIHRoYXQgfHRoaXN8
IG5vdCBiZSB1bmRlZmluZWQiKTsKICAgICAKICAgICB2YXIgYXJyYXkgPSBAT2JqZWN0KHRoaXMp
OwpAQCAtMTY4LDcgKzE2OCw3IEBAIGZ1bmN0aW9uIGZpbHRlcihjYWxsYmFjayAvKiwgdGhpc0Fy
ZyAqLykKICAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAiZnVuY3Rpb24iKQogICAgICAgICB0
aHJvdyBuZXcgQFR5cGVFcnJvcigiQXJyYXkucHJvdG90eXBlLmZpbHRlciBjYWxsYmFjayBtdXN0
IGJlIGEgZnVuY3Rpb24iKTsKICAgICAKLSAgICB2YXIgdGhpc0FyZyA9IGFyZ3VtZW50cy5sZW5n
dGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkOworICAgIHZhciB0aGlzQXJnID0gYXJn
dW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiBAdW5kZWZpbmVkOwogICAgIHZhciBy
ZXN1bHQgPSBbXTsKICAgICB2YXIgbmV4dEluZGV4ID0gMDsKICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IGxlbmd0aDsgaSsrKSB7CkBAIC0xOTAsNyArMTkwLDcgQEAgZnVuY3Rpb24gbWFwKGNhbGxi
YWNrIC8qLCB0aGlzQXJnICovKQogICAgIGlmICh0aGlzID09PSBudWxsKQogICAgICAgICB0aHJv
dyBuZXcgQFR5cGVFcnJvcigiQXJyYXkucHJvdG90eXBlLm1hcCByZXF1aXJlcyB0aGF0IHx0aGlz
fCBub3QgYmUgbnVsbCIpOwogICAgIAotICAgIGlmICh0aGlzID09PSB1bmRlZmluZWQpCisgICAg
aWYgKHRoaXMgPT09IEB1bmRlZmluZWQpCiAgICAgICAgIHRocm93IG5ldyBAVHlwZUVycm9yKCJB
cnJheS5wcm90b3R5cGUubWFwIHJlcXVpcmVzIHRoYXQgfHRoaXN8IG5vdCBiZSB1bmRlZmluZWQi
KTsKICAgICAKICAgICB2YXIgYXJyYXkgPSBAT2JqZWN0KHRoaXMpOwpAQCAtMTk5LDcgKzE5OSw3
IEBAIGZ1bmN0aW9uIG1hcChjYWxsYmFjayAvKiwgdGhpc0FyZyAqLykKICAgICBpZiAodHlwZW9m
IGNhbGxiYWNrICE9PSAiZnVuY3Rpb24iKQogICAgICAgICB0aHJvdyBuZXcgQFR5cGVFcnJvcigi
QXJyYXkucHJvdG90eXBlLm1hcCBjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb24iKTsKICAgICAK
LSAgICB2YXIgdGhpc0FyZyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDog
dW5kZWZpbmVkOworICAgIHZhciB0aGlzQXJnID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1
bWVudHNbMV0gOiBAdW5kZWZpbmVkOwogICAgIHZhciByZXN1bHQgPSBbXTsKICAgICByZXN1bHQu
bGVuZ3RoID0gbGVuZ3RoOwogICAgIHZhciBuZXh0SW5kZXggPSAwOwpAQCAtMjE5LDcgKzIxOSw3
IEBAIGZ1bmN0aW9uIHNvbWUoY2FsbGJhY2sgLyosIHRoaXNBcmcgKi8pCiAgICAgaWYgKHRoaXMg
PT09IG51bGwpCiAgICAgICAgIHRocm93IG5ldyBAVHlwZUVycm9yKCJBcnJheS5wcm90b3R5cGUu
c29tZSByZXF1aXJlcyB0aGF0IHx0aGlzfCBub3QgYmUgbnVsbCIpOwogICAgIAotICAgIGlmICh0
aGlzID09PSB1bmRlZmluZWQpCisgICAgaWYgKHRoaXMgPT09IEB1bmRlZmluZWQpCiAgICAgICAg
IHRocm93IG5ldyBAVHlwZUVycm9yKCJBcnJheS5wcm90b3R5cGUuc29tZSByZXF1aXJlcyB0aGF0
IHx0aGlzfCBub3QgYmUgdW5kZWZpbmVkIik7CiAgICAgCiAgICAgdmFyIGFycmF5ID0gQE9iamVj
dCh0aGlzKTsKQEAgLTIyOCw3ICsyMjgsNyBAQCBmdW5jdGlvbiBzb21lKGNhbGxiYWNrIC8qLCB0
aGlzQXJnICovKQogICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICJmdW5jdGlvbiIpCiAgICAg
ICAgIHRocm93IG5ldyBAVHlwZUVycm9yKCJBcnJheS5wcm90b3R5cGUuc29tZSBjYWxsYmFjayBt
dXN0IGJlIGEgZnVuY3Rpb24iKTsKICAgICAKLSAgICB2YXIgdGhpc0FyZyA9IGFyZ3VtZW50cy5s
ZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkOworICAgIHZhciB0aGlzQXJnID0g
YXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiBAdW5kZWZpbmVkOwogICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICAgaWYgKCEoaSBpbiBhcnJh
eSkpCiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTI0NSwxMiArMjQ1LDEyIEBAIGZ1bmN0aW9u
IGZpbGwodmFsdWUgLyogWywgc3RhcnQgWywgZW5kXV0gKi8pCiAgICAgaWYgKHRoaXMgPT09IG51
bGwpCiAgICAgICAgIHRocm93IG5ldyBAVHlwZUVycm9yKCJBcnJheS5wcm90b3R5cGUuZmlsbCBy
ZXF1aXJlcyB0aGF0IHx0aGlzfCBub3QgYmUgbnVsbCIpOwogICAgIAotICAgIGlmICh0aGlzID09
PSB1bmRlZmluZWQpCisgICAgaWYgKHRoaXMgPT09IEB1bmRlZmluZWQpCiAgICAgICAgIHRocm93
IG5ldyBAVHlwZUVycm9yKCJBcnJheS5wcm90b3R5cGUuZmlsbCByZXF1aXJlcyB0aGF0IHx0aGlz
fCBub3QgYmUgdW5kZWZpbmVkIik7CiAgICAgdmFyIE8gPSBAT2JqZWN0KHRoaXMpOwogICAgIHZh
ciBsZW4gPSBAdG9MZW5ndGgoTy5sZW5ndGgpOwogICAgIHZhciByZWxhdGl2ZVN0YXJ0ID0gMDsK
LSAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmlu
ZWQpCisgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gQHVu
ZGVmaW5lZCkKICAgICAgICAgcmVsYXRpdmVTdGFydCA9IGFyZ3VtZW50c1sxXSB8IDA7CiAgICAg
dmFyIGsgPSAwOwogICAgIGlmIChyZWxhdGl2ZVN0YXJ0IDwgMCkgewpAQCAtMjYzLDcgKzI2Myw3
IEBAIGZ1bmN0aW9uIGZpbGwodmFsdWUgLyogWywgc3RhcnQgWywgZW5kXV0gKi8pCiAgICAgICAg
ICAgICBrID0gbGVuOwogICAgIH0KICAgICB2YXIgcmVsYXRpdmVFbmQgPSBsZW47Ci0gICAgaWYg
KGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkKQorICAg
IGlmIChhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IEB1bmRlZmluZWQp
CiAgICAgICAgIHJlbGF0aXZlRW5kID0gYXJndW1lbnRzWzJdIHwgMDsKICAgICB2YXIgZmluYWwg
PSAwOwogICAgIGlmIChyZWxhdGl2ZUVuZCA8IDApIHsKQEAgLTI4Nyw3ICsyODcsNyBAQCBmdW5j
dGlvbiBmaW5kKGNhbGxiYWNrIC8qLCB0aGlzQXJnICovKQogICAgIGlmICh0aGlzID09PSBudWxs
KQogICAgICAgICB0aHJvdyBuZXcgQFR5cGVFcnJvcigiQXJyYXkucHJvdG90eXBlLmZpbmQgcmVx
dWlyZXMgdGhhdCB8dGhpc3wgbm90IGJlIG51bGwiKTsKICAgICAKLSAgICBpZiAodGhpcyA9PT0g
dW5kZWZpbmVkKQorICAgIGlmICh0aGlzID09PSBAdW5kZWZpbmVkKQogICAgICAgICB0aHJvdyBu
ZXcgQFR5cGVFcnJvcigiQXJyYXkucHJvdG90eXBlLmZpbmQgcmVxdWlyZXMgdGhhdCB8dGhpc3wg
bm90IGJlIHVuZGVmaW5lZCIpOwogICAgIAogICAgIHZhciBhcnJheSA9IEBPYmplY3QodGhpcyk7
CkBAIC0yOTYsMTMgKzI5NiwxMyBAQCBmdW5jdGlvbiBmaW5kKGNhbGxiYWNrIC8qLCB0aGlzQXJn
ICovKQogICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICJmdW5jdGlvbiIpCiAgICAgICAgIHRo
cm93IG5ldyBAVHlwZUVycm9yKCJBcnJheS5wcm90b3R5cGUuZmluZCBjYWxsYmFjayBtdXN0IGJl
IGEgZnVuY3Rpb24iKTsKICAgICAKLSAgICB2YXIgdGhpc0FyZyA9IGFyZ3VtZW50cy5sZW5ndGgg
PiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkOworICAgIHZhciB0aGlzQXJnID0gYXJndW1l
bnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiBAdW5kZWZpbmVkOwogICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICAgdmFyIGtWYWx1ZSA9IGFycmF5W2ld
OwogICAgICAgICBpZiAoY2FsbGJhY2suQGNhbGwodGhpc0FyZywga1ZhbHVlLCBpLCBhcnJheSkp
CiAgICAgICAgICAgICByZXR1cm4ga1ZhbHVlOwogICAgIH0KLSAgICByZXR1cm4gdW5kZWZpbmVk
OworICAgIHJldHVybiBAdW5kZWZpbmVkOwogfQogCiBmdW5jdGlvbiBmaW5kSW5kZXgoY2FsbGJh
Y2sgLyosIHRoaXNBcmcgKi8pCkBAIC0zMTIsNyArMzEyLDcgQEAgZnVuY3Rpb24gZmluZEluZGV4
KGNhbGxiYWNrIC8qLCB0aGlzQXJnICovKQogICAgIGlmICh0aGlzID09PSBudWxsKQogICAgICAg
ICB0aHJvdyBuZXcgQFR5cGVFcnJvcigiQXJyYXkucHJvdG90eXBlLmZpbmRJbmRleCByZXF1aXJl
cyB0aGF0IHx0aGlzfCBub3QgYmUgbnVsbCIpOwogICAgIAotICAgIGlmICh0aGlzID09PSB1bmRl
ZmluZWQpCisgICAgaWYgKHRoaXMgPT09IEB1bmRlZmluZWQpCiAgICAgICAgIHRocm93IG5ldyBA
VHlwZUVycm9yKCJBcnJheS5wcm90b3R5cGUuZmluZEluZGV4IHJlcXVpcmVzIHRoYXQgfHRoaXN8
IG5vdCBiZSB1bmRlZmluZWQiKTsKICAgICAKICAgICB2YXIgYXJyYXkgPSBAT2JqZWN0KHRoaXMp
OwpAQCAtMzIxLDcgKzMyMSw3IEBAIGZ1bmN0aW9uIGZpbmRJbmRleChjYWxsYmFjayAvKiwgdGhp
c0FyZyAqLykKICAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAiZnVuY3Rpb24iKQogICAgICAg
ICB0aHJvdyBuZXcgQFR5cGVFcnJvcigiQXJyYXkucHJvdG90eXBlLmZpbmRJbmRleCBjYWxsYmFj
ayBtdXN0IGJlIGEgZnVuY3Rpb24iKTsKICAgICAKLSAgICB2YXIgdGhpc0FyZyA9IGFyZ3VtZW50
cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkOworICAgIHZhciB0aGlzQXJn
ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiBAdW5kZWZpbmVkOwogICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICAgaWYgKGNhbGxiYWNr
LkBjYWxsKHRoaXNBcmcsIGFycmF5W2ldLCBpLCBhcnJheSkpCiAgICAgICAgICAgICByZXR1cm4g
aTsKQEAgLTMzNiw3ICszMzYsNyBAQCBmdW5jdGlvbiBpbmNsdWRlcyhzZWFyY2hFbGVtZW50IC8q
LCBmcm9tSW5kZXgqLykKICAgICBpZiAodGhpcyA9PT0gbnVsbCkKICAgICAgICAgdGhyb3cgbmV3
IEBUeXBlRXJyb3IoIkFycmF5LnByb3RvdHlwZS5pbmNsdWRlcyByZXF1aXJlcyB0aGF0IHx0aGlz
fCBub3QgYmUgbnVsbCIpOwogCi0gICAgaWYgKHRoaXMgPT09IHVuZGVmaW5lZCkKKyAgICBpZiAo
dGhpcyA9PT0gQHVuZGVmaW5lZCkKICAgICAgICAgdGhyb3cgbmV3IEBUeXBlRXJyb3IoIkFycmF5
LnByb3RvdHlwZS5pbmNsdWRlcyByZXF1aXJlcyB0aGF0IHx0aGlzfCBub3QgYmUgdW5kZWZpbmVk
Iik7CiAKICAgICB2YXIgYXJyYXkgPSBAT2JqZWN0KHRoaXMpOwpAQCAtMzQ2LDcgKzM0Niw3IEBA
IGZ1bmN0aW9uIGluY2x1ZGVzKHNlYXJjaEVsZW1lbnQgLyosIGZyb21JbmRleCovKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICB2YXIgZnJvbUluZGV4ID0gMDsKLSAgICBpZiAoYXJndW1l
bnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQpCisgICAgaWYgKGFy
Z3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gQHVuZGVmaW5lZCkKICAgICAg
ICAgZnJvbUluZGV4ID0gYXJndW1lbnRzWzFdIHwgMDsKIAogICAgIHZhciBpbmRleDsKQEAgLTQy
Myw3ICs0MjMsNyBAQCBmdW5jdGlvbiBjb21wYWN0U3BhcnNlKGFycmF5LCBkc3QsIHNyYywgbGVu
Z3RoKQogICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF07CiAgICAg
ICAgICAgICAgICAgICAgIGRlbGV0ZSBhcnJheVtpbmRleF07CiAKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZh
bHVlID09PSBAdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICArK3VuZGVmaW5l
ZENvdW50OwogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAg
ICAgICAgIH0KQEAgLTQzNCw3ICs0MzQsNyBAQCBmdW5jdGlvbiBjb21wYWN0U3BhcnNlKGFycmF5
LCBkc3QsIHNyYywgbGVuZ3RoKQogICAgICAgICB9CiAKICAgICAgICAgZm9yICh2YXIgaSA9IHZh
bHVlQ291bnQ7IGkgPCB2YWx1ZUNvdW50ICsgdW5kZWZpbmVkQ291bnQ7ICsraSkKLSAgICAgICAg
ICAgIGFycmF5W2ldID0gdW5kZWZpbmVkOworICAgICAgICAgICAgYXJyYXlbaV0gPSBAdW5kZWZp
bmVkOwogCiAgICAgICAgIHJldHVybiB2YWx1ZUNvdW50OwogICAgIH0KQEAgLTQ1Miw3ICs0NTIs
NyBAQCBmdW5jdGlvbiBjb21wYWN0U2xvdyhhcnJheSwgbGVuZ3RoKQogICAgICAgICAgICAgfQog
CiAgICAgICAgICAgICB2YXIgdmFsdWUgPSBhcnJheVtzcmNdOwotICAgICAgICAgICAgaWYgKHZh
bHVlID09PSB1bmRlZmluZWQpCisgICAgICAgICAgICBpZiAodmFsdWUgPT09IEB1bmRlZmluZWQp
CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgICAgIGFycmF5W2RzdCsrXSA9
IHZhbHVlOwpAQCAtNDYyLDcgKzQ2Miw3IEBAIGZ1bmN0aW9uIGNvbXBhY3RTbG93KGFycmF5LCBs
ZW5ndGgpCiAgICAgICAgIHZhciB1bmRlZmluZWRDb3VudCA9IGxlbmd0aCAtIHZhbHVlQ291bnQg
LSBob2xlQ291bnQ7CiAKICAgICAgICAgZm9yICh2YXIgaSA9IHZhbHVlQ291bnQ7IGkgPCB2YWx1
ZUNvdW50ICsgdW5kZWZpbmVkQ291bnQ7ICsraSkKLSAgICAgICAgICAgIGFycmF5W2ldID0gdW5k
ZWZpbmVkOworICAgICAgICAgICAgYXJyYXlbaV0gPSBAdW5kZWZpbmVkOwogCiAgICAgICAgIGZv
ciAodmFyIGkgPSB2YWx1ZUNvdW50ICsgdW5kZWZpbmVkQ291bnQ7IGkgPCBsZW5ndGg7ICsraSkK
ICAgICAgICAgICAgIGRlbGV0ZSBhcnJheVtpXTsKQEAgLTQ3NCw3ICs0NzQsNyBAQCBmdW5jdGlv
biBjb21wYWN0U2xvdyhhcnJheSwgbGVuZ3RoKQogICAgIGZ1bmN0aW9uIGNvbXBhY3QoYXJyYXks
IGxlbmd0aCkKICAgICB7CiAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3Ro
OyArK2kpIHsKLSAgICAgICAgICAgIGlmIChhcnJheVtpXSA9PT0gdW5kZWZpbmVkKQorICAgICAg
ICAgICAgaWYgKGFycmF5W2ldID09PSBAdW5kZWZpbmVkKQogICAgICAgICAgICAgICAgIHJldHVy
biBjb21wYWN0U2xvdyhhcnJheSwgbGVuZ3RoKTsKICAgICAgICAgfQogCkBAIC01ODksNyArNTg5
LDcgQEAgZnVuY3Rpb24gc3RyaW5nU29ydChhcnJheSkKICAgICBpZiAodGhpcyA9PT0gbnVsbCkK
ICAgICAgICAgdGhyb3cgbmV3IEBUeXBlRXJyb3IoIkFycmF5LnByb3RvdHlwZS5zb3J0IHJlcXVp
cmVzIHRoYXQgfHRoaXN8IG5vdCBiZSBudWxsIik7CiAKLSAgICBpZiAodGhpcyA9PT0gdW5kZWZp
bmVkKQorICAgIGlmICh0aGlzID09PSBAdW5kZWZpbmVkKQogICAgICAgICB0aHJvdyBuZXcgQFR5
cGVFcnJvcigiQXJyYXkucHJvdG90eXBlLnNvcnQgcmVxdWlyZXMgdGhhdCB8dGhpc3wgbm90IGJl
IHVuZGVmaW5lZCIpOwogCiAgICAgaWYgKHR5cGVvZiB0aGlzID09ICJzdHJpbmciKQpAQCAtNjE5
LDcgKzYxOSw3IEBAIGZ1bmN0aW9uIG1pbldpdGhNYXliZU5lZ2F0aXZlWmVyb0FuZFBvc2l0aXZl
KG1heWJlTmVnYXRpdmVaZXJvLCBwb3NpdGl2ZSkKICAgICAgICAgcmV0dXJuIChtYXliZU5lZ2F0
aXZlWmVybyA8IHBvc2l0aXZlKSA/IG1heWJlTmVnYXRpdmVaZXJvIDogcG9zaXRpdmU7CiAgICAg
fQogCi0gICAgaWYgKHRoaXMgPT09IG51bGwgfHwgdGhpcyA9PT0gdW5kZWZpbmVkKQorICAgIGlm
ICh0aGlzID09PSBudWxsIHx8IHRoaXMgPT09IEB1bmRlZmluZWQpCiAgICAgICAgIHRocm93IG5l
dyBAVHlwZUVycm9yKCJBcnJheS5jb3B5V2l0aGluIHJlcXVpcmVzIHRoYXQgfHRoaXN8IG5vdCBi
ZSBudWxsIG9yIHVuZGVmaW5lZCIpOwogICAgIHZhciB0aGlzT2JqZWN0ID0gQE9iamVjdCh0aGlz
KTsKIApAQCAtNjM0LDcgKzYzNCw3IEBAIGZ1bmN0aW9uIG1pbldpdGhNYXliZU5lZ2F0aXZlWmVy
b0FuZFBvc2l0aXZlKG1heWJlTmVnYXRpdmVaZXJvLCBwb3NpdGl2ZSkKICAgICB2YXIgcmVsYXRp
dmVFbmQ7CiAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPj0gMykgewogICAgICAgICB2YXIgZW5k
ID0gYXJndW1lbnRzWzJdOwotICAgICAgICBpZiAoZW5kID09PSB1bmRlZmluZWQpCisgICAgICAg
IGlmIChlbmQgPT09IEB1bmRlZmluZWQpCiAgICAgICAgICAgICByZWxhdGl2ZUVuZCA9IGxlbmd0
aDsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmVsYXRpdmVFbmQgPSBAdG9JbnRlZ2VyKGVu
ZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvRGF0ZVByb3Rv
dHlwZS5qcyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9EYXRlUHJvdG90eXBlLmpz
CmluZGV4IDIxNjcyYTdjNTIxYjcwNWMzN2Q5NzAwNjdiNGRjMTQyMjM4OTFjNDIuLjJjODI1MDhm
OTU4M2I3NTkzYTIzZGJiYWRhODRlY2ZkMzQwNzBjZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9idWlsdGlucy9EYXRlUHJvdG90eXBlLmpzCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9idWlsdGlucy9EYXRlUHJvdG90eXBlLmpzCkBAIC0zNSw3ICszNSw3IEBAIGZ1bmN0
aW9uIHRvRGF0ZVRpbWVPcHRpb25zQW55QWxsKG9wdHMpCiAgICAgICAgIC8vIGh0dHA6Ly93d3cu
ZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTQwMi8yLjAvI3NlYy1Jbml0aWFsaXplRGF0ZVRp
bWVGb3JtYXQKIAogICAgICAgICB2YXIgb3B0aW9uczsKLSAgICAgICAgaWYgKG9wdHMgPT09IHVu
ZGVmaW5lZCkKKyAgICAgICAgaWYgKG9wdHMgPT09IEB1bmRlZmluZWQpCiAgICAgICAgICAgICBv
cHRpb25zID0gbnVsbDsKICAgICAgICAgZWxzZSBpZiAob3B0cyA9PT0gbnVsbCkKICAgICAgICAg
ICAgIHRocm93IG5ldyBAVHlwZUVycm9yKCJudWxsIGlzIG5vdCBhbiBvYmplY3QiKTsKQEAgLTQ0
LDEzICs0NCwxMyBAQCBlbHNlIGlmIChvcHRzID09PSBudWxsKQogCiAgICAgICAgIC8vIENoZWNr
IG9yaWdpbmFsIGluc3RlYWQgb2YgZGVzY2VuZGFudCB0byByZWR1Y2UgbG9va3VwcyB1cCB0aGUg
cHJvdG90eXBlIGNoYWluLgogICAgICAgICB2YXIgbmVlZHNEZWZhdWx0cyA9ICFvcHRpb25zIHx8
ICgKLSAgICAgICAgICAgIG9wdGlvbnMud2Vla2RheSA9PT0gdW5kZWZpbmVkICYmCi0gICAgICAg
ICAgICBvcHRpb25zLnllYXIgPT09IHVuZGVmaW5lZCAmJgotICAgICAgICAgICAgb3B0aW9ucy5t
b250aCA9PT0gdW5kZWZpbmVkICYmCi0gICAgICAgICAgICBvcHRpb25zLmRheSA9PT0gdW5kZWZp
bmVkICYmCi0gICAgICAgICAgICBvcHRpb25zLmhvdXIgPT09IHVuZGVmaW5lZCAmJgotICAgICAg
ICAgICAgb3B0aW9ucy5taW51dGUgPT09IHVuZGVmaW5lZCAmJgotICAgICAgICAgICAgb3B0aW9u
cy5zZWNvbmQgPT09IHVuZGVmaW5lZAorICAgICAgICAgICAgb3B0aW9ucy53ZWVrZGF5ID09PSBA
dW5kZWZpbmVkICYmCisgICAgICAgICAgICBvcHRpb25zLnllYXIgPT09IEB1bmRlZmluZWQgJiYK
KyAgICAgICAgICAgIG9wdGlvbnMubW9udGggPT09IEB1bmRlZmluZWQgJiYKKyAgICAgICAgICAg
IG9wdGlvbnMuZGF5ID09PSBAdW5kZWZpbmVkICYmCisgICAgICAgICAgICBvcHRpb25zLmhvdXIg
PT09IEB1bmRlZmluZWQgJiYKKyAgICAgICAgICAgIG9wdGlvbnMubWludXRlID09PSBAdW5kZWZp
bmVkICYmCisgICAgICAgICAgICBvcHRpb25zLnNlY29uZCA9PT0gQHVuZGVmaW5lZAogICAgICAg
ICApOwogCiAgICAgICAgIC8vIE9ubHkgY3JlYXRlIGRlc2NlbmRhbnQgaWYgaXQgd2lsbCBoYXZl
IG93biBwcm9wZXJ0aWVzLgpAQCAtOTIsNyArOTIsNyBAQCBmdW5jdGlvbiB0b0RhdGVUaW1lT3B0
aW9uc0RhdGVEYXRlKG9wdHMpCiAgICAgICAgIC8vIGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlv
bmFsLm9yZy9lY21hLTQwMi8yLjAvI3NlYy1Jbml0aWFsaXplRGF0ZVRpbWVGb3JtYXQKIAogICAg
ICAgICB2YXIgb3B0aW9uczsKLSAgICAgICAgaWYgKG9wdHMgPT09IHVuZGVmaW5lZCkKKyAgICAg
ICAgaWYgKG9wdHMgPT09IEB1bmRlZmluZWQpCiAgICAgICAgICAgICBvcHRpb25zID0gbnVsbDsK
ICAgICAgICAgZWxzZSBpZiAob3B0cyA9PT0gbnVsbCkKICAgICAgICAgICAgIHRocm93IG5ldyBA
VHlwZUVycm9yKCJudWxsIGlzIG5vdCBhbiBvYmplY3QiKTsKQEAgLTEwMSwxMCArMTAxLDEwIEBA
IGVsc2UgaWYgKG9wdHMgPT09IG51bGwpCiAKICAgICAgICAgLy8gQ2hlY2sgb3JpZ2luYWwgaW5z
dGVhZCBvZiBkZXNjZW5kYW50IHRvIHJlZHVjZSBsb29rdXBzIHVwIHRoZSBwcm90b3R5cGUgY2hh
aW4uCiAgICAgICAgIHZhciBuZWVkc0RlZmF1bHRzID0gIW9wdGlvbnMgfHwgKAotICAgICAgICAg
ICAgb3B0aW9ucy53ZWVrZGF5ID09PSB1bmRlZmluZWQgJiYKLSAgICAgICAgICAgIG9wdGlvbnMu
eWVhciA9PT0gdW5kZWZpbmVkICYmCi0gICAgICAgICAgICBvcHRpb25zLm1vbnRoID09PSB1bmRl
ZmluZWQgJiYKLSAgICAgICAgICAgIG9wdGlvbnMuZGF5ID09PSB1bmRlZmluZWQKKyAgICAgICAg
ICAgIG9wdGlvbnMud2Vla2RheSA9PT0gQHVuZGVmaW5lZCAmJgorICAgICAgICAgICAgb3B0aW9u
cy55ZWFyID09PSBAdW5kZWZpbmVkICYmCisgICAgICAgICAgICBvcHRpb25zLm1vbnRoID09PSBA
dW5kZWZpbmVkICYmCisgICAgICAgICAgICBvcHRpb25zLmRheSA9PT0gQHVuZGVmaW5lZAogICAg
ICAgICApOwogCiAgICAgICAgIC8vIE9ubHkgY3JlYXRlIGRlc2NlbmRhbnQgaWYgaXQgd2lsbCBo
YXZlIG93biBwcm9wZXJ0aWVzLgpAQCAtMTQyLDcgKzE0Miw3IEBAIGZ1bmN0aW9uIHRvRGF0ZVRp
bWVPcHRpb25zVGltZVRpbWUob3B0cykKICAgICAgICAgLy8gaHR0cDovL3d3dy5lY21hLWludGVy
bmF0aW9uYWwub3JnL2VjbWEtNDAyLzIuMC8jc2VjLUluaXRpYWxpemVEYXRlVGltZUZvcm1hdAog
CiAgICAgICAgIHZhciBvcHRpb25zOwotICAgICAgICBpZiAob3B0cyA9PT0gdW5kZWZpbmVkKQor
ICAgICAgICBpZiAob3B0cyA9PT0gQHVuZGVmaW5lZCkKICAgICAgICAgICAgIG9wdGlvbnMgPSBu
dWxsOwogICAgICAgICBlbHNlIGlmIChvcHRzID09PSBudWxsKQogICAgICAgICAgICAgdGhyb3cg
bmV3IEBUeXBlRXJyb3IoIm51bGwgaXMgbm90IGFuIG9iamVjdCIpOwpAQCAtMTUxLDkgKzE1MSw5
IEBAIGVsc2UgaWYgKG9wdHMgPT09IG51bGwpCiAKICAgICAgICAgLy8gQ2hlY2sgb3JpZ2luYWwg
aW5zdGVhZCBvZiBkZXNjZW5kYW50IHRvIHJlZHVjZSBsb29rdXBzIHVwIHRoZSBwcm90b3R5cGUg
Y2hhaW4uCiAgICAgICAgIHZhciBuZWVkc0RlZmF1bHRzID0gIW9wdGlvbnMgfHwgKAotICAgICAg
ICAgICAgb3B0aW9ucy5ob3VyID09PSB1bmRlZmluZWQgJiYKLSAgICAgICAgICAgIG9wdGlvbnMu
bWludXRlID09PSB1bmRlZmluZWQgJiYKLSAgICAgICAgICAgIG9wdGlvbnMuc2Vjb25kID09PSB1
bmRlZmluZWQKKyAgICAgICAgICAgIG9wdGlvbnMuaG91ciA9PT0gQHVuZGVmaW5lZCAmJgorICAg
ICAgICAgICAgb3B0aW9ucy5taW51dGUgPT09IEB1bmRlZmluZWQgJiYKKyAgICAgICAgICAgIG9w
dGlvbnMuc2Vjb25kID09PSBAdW5kZWZpbmVkCiAgICAgICAgICk7CiAKICAgICAgICAgLy8gT25s
eSBjcmVhdGUgZGVzY2VuZGFudCBpZiBpdCB3aWxsIGhhdmUgb3duIHByb3BlcnRpZXMuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvR2VuZXJhdG9yUHJvdG90eXBl
LmpzIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0dlbmVyYXRvclByb3RvdHlwZS5q
cwppbmRleCBhM2JiYzM1MzRhZTA1MmY0ZDZmYTI1YmRlNzAzYzkzZDNhNzk1ZTExLi41OTdhODgy
MWRlY2FkZDk1MzllNjJhMjllMzQwMWMwZTZkZGMwYzZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnVpbHRpbnMvR2VuZXJhdG9yUHJvdG90eXBlLmpzCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9idWlsdGlucy9HZW5lcmF0b3JQcm90b3R5cGUuanMKQEAgLTQwLDcgKzQw
LDcgQEAgZnVuY3Rpb24gZ2VuZXJhdG9yUmVzdW1lKGdlbmVyYXRvciwgc2VudFZhbHVlLCByZXN1
bWVNb2RlKQogCiAgICAgbGV0IHN0YXRlID0gZ2VuZXJhdG9yLkBnZW5lcmF0b3JTdGF0ZTsKICAg
ICBsZXQgZG9uZSA9IGZhbHNlOwotICAgIGxldCB2YWx1ZSA9IHVuZGVmaW5lZDsKKyAgICBsZXQg
dmFsdWUgPSBAdW5kZWZpbmVkOwogCiAgICAgaWYgKHR5cGVvZiBzdGF0ZSAhPT0gJ251bWJlcicp
CiAgICAgICAgIHRocm93IG5ldyBAVHlwZUVycm9yKCJ8dGhpc3wgc2hvdWxkIGJlIGEgZ2VuZXJh
dG9yIik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvR2xvYmFs
T2JqZWN0LmpzIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0dsb2JhbE9iamVjdC5q
cwppbmRleCBhZDI4ZTc5OWU4ZDQ4N2Q4MjE1NDdlYjEwNGIwZjE0ZmE5Mzg3MzVkLi41ZTM5NGNm
MTJhY2RhMTY3YTQyNTFhMjE2Y2M3MTY5NTAxNjdiMzFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnVpbHRpbnMvR2xvYmFsT2JqZWN0LmpzCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9idWlsdGlucy9HbG9iYWxPYmplY3QuanMKQEAgLTYyLDcgKzYyLDcgQEAgZnVuY3Rp
b24gaXNEaWN0aW9uYXJ5KG9iamVjdCkKIHsKICAgICAidXNlIHN0cmljdCI7CiAKLSAgICByZXR1
cm4gdHlwZW9mIG9iamVjdCA9PT0gInVuZGVmaW5lZCIgfHwgb2JqZWN0ID09IG51bGwgfHwgdHlw
ZW9mIG9iamVjdCA9PT0gIm9iamVjdCI7CisgICAgcmV0dXJuIG9iamVjdCA9PT0gQHVuZGVmaW5l
ZCB8fCBvYmplY3QgPT0gbnVsbCB8fCB0eXBlb2Ygb2JqZWN0ID09PSAib2JqZWN0IjsKIH0KIAog
Ly8gRklYTUU6IHRoaXMgbmVlZHMgdG8gaGF2ZSBpdCdzIG5hbWUgY2hhbmdlZCB0byAiZ2V0IFtT
eW1ib2wuc3BlY2llc10iLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0
aW5zL0ludGVybmFsUHJvbWlzZUNvbnN0cnVjdG9yLmpzIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J1aWx0aW5zL0ludGVybmFsUHJvbWlzZUNvbnN0cnVjdG9yLmpzCmluZGV4IDUxNzc3YzZhYzg0
ZmUyNDc5MjQzNTc0OTZkY2E3MTcyZDE1MmJiYmMuLmQwMWY1ZjdlNTM2ZWFkYTBiNGJmZGEyYTgy
ZDMyOGUyMjVlMjRjMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlu
cy9JbnRlcm5hbFByb21pc2VDb25zdHJ1Y3Rvci5qcworKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnVpbHRpbnMvSW50ZXJuYWxQcm9taXNlQ29uc3RydWN0b3IuanMKQEAgLTQ4LDI5ICs0OCwy
OSBAQCBmdW5jdGlvbiBuZXdSZXNvbHZlRWxlbWVudChpbmRleCkKICAgICAgICAgcmV0dXJuIGZ1
bmN0aW9uIChhcmd1bWVudCkKICAgICAgICAgewogICAgICAgICAgICAgaWYgKGFscmVhZHlDYWxs
ZWQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gQHVuZGVmaW5lZDsKICAgICAgICAgICAgIGFscmVhZHlDYWxsZWQgPSB0cnVlOwogCiAg
ICAgICAgICAgICBAcHV0QnlWYWxEaXJlY3QodmFsdWVzLCBpbmRleCwgYXJndW1lbnQpOwogCiAg
ICAgICAgICAgICAtLXJlbWFpbmluZ0VsZW1lbnRzQ291bnQ7CiAgICAgICAgICAgICBpZiAocmVt
YWluaW5nRWxlbWVudHNDb3VudCA9PT0gMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gcHJvbWlz
ZUNhcGFiaWxpdHkuQHJlc29sdmUuQGNhbGwodW5kZWZpbmVkLCB2YWx1ZXMpOworICAgICAgICAg
ICAgICAgIHJldHVybiBwcm9taXNlQ2FwYWJpbGl0eS5AcmVzb2x2ZS5AY2FsbChAdW5kZWZpbmVk
LCB2YWx1ZXMpOwogCi0gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkOworICAgICAgICAgICAg
cmV0dXJuIEB1bmRlZmluZWQ7CiAgICAgICAgIH0KICAgICB9CiAKICAgICB0cnkgewogICAgICAg
ICBpZiAoYXJyYXkubGVuZ3RoID09PSAwKQotICAgICAgICAgICAgcHJvbWlzZUNhcGFiaWxpdHku
QHJlc29sdmUuQGNhbGwodW5kZWZpbmVkLCB2YWx1ZXMpOworICAgICAgICAgICAgcHJvbWlzZUNh
cGFiaWxpdHkuQHJlc29sdmUuQGNhbGwoQHVuZGVmaW5lZCwgdmFsdWVzKTsKICAgICAgICAgZWxz
ZSB7CiAgICAgICAgICAgICBmb3IgKHZhciBpbmRleCA9IDAsIGxlbmd0aCA9IGFycmF5Lmxlbmd0
aDsgaW5kZXggPCBsZW5ndGg7ICsraW5kZXgpIHsKICAgICAgICAgICAgICAgICB2YXIgdmFsdWUg
PSBhcnJheVtpbmRleF07Ci0gICAgICAgICAgICAgICAgQHB1dEJ5VmFsRGlyZWN0KHZhbHVlcywg
aW5kZXgsIHVuZGVmaW5lZCk7CisgICAgICAgICAgICAgICAgQHB1dEJ5VmFsRGlyZWN0KHZhbHVl
cywgaW5kZXgsIEB1bmRlZmluZWQpOwogCiAgICAgICAgICAgICAgICAgdmFyIG5leHRQcm9taXNl
Q2FwYWJpbGl0eSA9IEBuZXdQcm9taXNlQ2FwYWJpbGl0eShASW50ZXJuYWxQcm9taXNlKTsKLSAg
ICAgICAgICAgICAgICBuZXh0UHJvbWlzZUNhcGFiaWxpdHkuQHJlc29sdmUuQGNhbGwodW5kZWZp
bmVkLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgbmV4dFByb21pc2VDYXBhYmlsaXR5LkByZXNv
bHZlLkBjYWxsKEB1bmRlZmluZWQsIHZhbHVlKTsKICAgICAgICAgICAgICAgICB2YXIgbmV4dFBy
b21pc2UgPSBuZXh0UHJvbWlzZUNhcGFiaWxpdHkuQHByb21pc2U7CiAKICAgICAgICAgICAgICAg
ICB2YXIgcmVzb2x2ZUVsZW1lbnQgPSBuZXdSZXNvbHZlRWxlbWVudChpbmRleCk7CkBAIC03OSw3
ICs3OSw3IEBAIGZ1bmN0aW9uIG5ld1Jlc29sdmVFbGVtZW50KGluZGV4KQogICAgICAgICAgICAg
fQogICAgICAgICB9CiAgICAgfSBjYXRjaCAoZXJyb3IpIHsKLSAgICAgICAgcHJvbWlzZUNhcGFi
aWxpdHkuQHJlamVjdC5AY2FsbCh1bmRlZmluZWQsIGVycm9yKTsKKyAgICAgICAgcHJvbWlzZUNh
cGFiaWxpdHkuQHJlamVjdC5AY2FsbChAdW5kZWZpbmVkLCBlcnJvcik7CiAgICAgfQogCiAgICAg
cmV0dXJuIHByb21pc2VDYXBhYmlsaXR5LkBwcm9taXNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J1aWx0aW5zL0l0ZXJhdG9yUHJvdG90eXBlLmpzIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J1aWx0aW5zL0l0ZXJhdG9yUHJvdG90eXBlLmpzCmluZGV4IDYyY2FlM2YxMjUw
ZTg0MGI2NjQzNWZiZTdmMzFkYTkwMWZlYzJlZTUuLjVjMTY5MWEzZDVlNzY4ZmE5ZDQ2YmI0NGRi
Zjc0MmZhZWFmOWNjZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlu
cy9JdGVyYXRvclByb3RvdHlwZS5qcworKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRp
bnMvSXRlcmF0b3JQcm90b3R5cGUuanMKQEAgLTIzLDcgKzIzLDcgQEAKICAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CiAgKi8KIAotZnVuY3Rpb24gc3ltYm9sSXRlcmF0b3IoKQorZnVuY3Rpb24gc3ltYm9sSXRlcmF0
b3JHZXR0ZXIoKQogewogICAgICJ1c2Ugc3RyaWN0IjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J1aWx0aW5zL01hcFByb3RvdHlwZS5qcyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9idWlsdGlucy9NYXBQcm90b3R5cGUuanMKaW5kZXggNjM2NDZhODM2NTcwODUyMDFlMTU1
ODE4ZTllOTU4MzFiMzExOGE3Zi4uNjIwYTAxNWQzMDdiYzVlZjY5NDdiMzE0NTFmODk2Yjc0ZjBk
MGYyNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL01hcFByb3Rv
dHlwZS5qcworKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvTWFwUHJvdG90eXBl
LmpzCkBAIC0zMywxMSArMzMsMTEgQEAgZnVuY3Rpb24gZm9yRWFjaChjYWxsYmFjayAvKiwgdGhp
c0FyZyAqLykKICAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKQogICAgICAg
ICB0aHJvdyBuZXcgQFR5cGVFcnJvcigiTWFwLnByb3RvdHlwZS5mb3JFYWNoIGNhbGxiYWNrIG11
c3QgYmUgYSBmdW5jdGlvbiIpOwogCi0gICAgdmFyIHRoaXNBcmcgPSBhcmd1bWVudHMubGVuZ3Ro
ID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDsKKyAgICB2YXIgdGhpc0FyZyA9IGFyZ3Vt
ZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogQHVuZGVmaW5lZDsKICAgICB2YXIgaXRl
cmF0b3IgPSBATWFwSXRlcmF0b3IodGhpcyk7CiAKICAgICAvLyBUbyBhdm9pZCBvYmplY3QgYWxs
b2NhdGlvbnMgZm9yIGl0ZXJhdG9yIHJlc3VsdCBvYmplY3RzLCB3ZSBwYXNzIHRoZSBwbGFjZWhv
bGRlciB0byB0aGUgc3BlY2lhbCAibmV4dCIgZnVuY3Rpb24gaW4gb3JkZXIgdG8gZmlsbCB0aGUg
cmVzdWx0cy4KLSAgICB2YXIgdmFsdWUgPSBbIHVuZGVmaW5lZCwgdW5kZWZpbmVkIF07CisgICAg
dmFyIHZhbHVlID0gWyBAdW5kZWZpbmVkLCBAdW5kZWZpbmVkIF07CiAgICAgZm9yICg7Oykgewog
ICAgICAgICBpZiAoQG1hcEl0ZXJhdG9yTmV4dC5AY2FsbChpdGVyYXRvciwgdmFsdWUpKQogICAg
ICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRp
bnMvTW9kdWxlTG9hZGVyT2JqZWN0LmpzIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5z
L01vZHVsZUxvYWRlck9iamVjdC5qcwppbmRleCBjNWNlMzE3OWRiYmUzNTA2MmM0MDczZDAxNTE2
YjVkZTczOTY3NGRlLi41NjhhMzA3Yjc5ZDI0MjNlY2RlNzZlMDUxZmE0YWUyZjZhYzE2MmYzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvTW9kdWxlTG9hZGVyT2Jq
ZWN0LmpzCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9Nb2R1bGVMb2FkZXJP
YmplY3QuanMKQEAgLTk4LDE1ICs5OCwxNSBAQCBmdW5jdGlvbiBuZXdSZWdpc3RyeUVudHJ5KGtl
eSkKICAgICByZXR1cm4gewogICAgICAgICBrZXk6IGtleSwKICAgICAgICAgc3RhdGU6IHRoaXMu
RmV0Y2gsCi0gICAgICAgIG1ldGFkYXRhOiB1bmRlZmluZWQsCi0gICAgICAgIGZldGNoOiB1bmRl
ZmluZWQsCi0gICAgICAgIHRyYW5zbGF0ZTogdW5kZWZpbmVkLAotICAgICAgICBpbnN0YW50aWF0
ZTogdW5kZWZpbmVkLAotICAgICAgICByZXNvbHZlRGVwZW5kZW5jaWVzOiB1bmRlZmluZWQsCisg
ICAgICAgIG1ldGFkYXRhOiBAdW5kZWZpbmVkLAorICAgICAgICBmZXRjaDogQHVuZGVmaW5lZCwK
KyAgICAgICAgdHJhbnNsYXRlOiBAdW5kZWZpbmVkLAorICAgICAgICBpbnN0YW50aWF0ZTogQHVu
ZGVmaW5lZCwKKyAgICAgICAgcmVzb2x2ZURlcGVuZGVuY2llczogQHVuZGVmaW5lZCwKICAgICAg
ICAgZGVwZW5kZW5jaWVzOiBbXSwgLy8gVG8ga2VlcCB0aGUgbW9kdWxlIG9yZGVyLCB3ZSBzdG9y
ZSB0aGUgbW9kdWxlIGtleXMgaW4gdGhlIGFycmF5LgotICAgICAgICBkZXBlbmRlbmNpZXNNYXA6
IHVuZGVmaW5lZCwKLSAgICAgICAgbW9kdWxlOiB1bmRlZmluZWQsIC8vIEpTTW9kdWxlUmVjb3Jk
Ci0gICAgICAgIGVycm9yOiB1bmRlZmluZWQsCisgICAgICAgIGRlcGVuZGVuY2llc01hcDogQHVu
ZGVmaW5lZCwKKyAgICAgICAgbW9kdWxlOiBAdW5kZWZpbmVkLCAvLyBKU01vZHVsZVJlY29yZAor
ICAgICAgICBlcnJvcjogQHVuZGVmaW5lZCwKICAgICB9OwogfQogCkBAIC0xMzAsNyArMTMwLDcg
QEAgZnVuY3Rpb24gZm9yY2VGdWxmaWxsUHJvbWlzZShwcm9taXNlLCB2YWx1ZSkKIHsKICAgICAi
dXNlIHN0cmljdCI7CiAKLSAgICBpZiAocHJvbWlzZS5AcHJvbWlzZVN0YXRlID09PSBAcHJvbWlz
ZVBlbmRpbmcpCisgICAgaWYgKHByb21pc2UuQHByb21pc2VTdGF0ZSA9PT0gQHByb21pc2VTdGF0
ZVBlbmRpbmcpCiAgICAgICAgIEBmdWxmaWxsUHJvbWlzZShwcm9taXNlLCB2YWx1ZSk7CiB9CiAK
QEAgLTE5OSw3ICsxOTksNyBAQCBmdW5jdGlvbiBjb21taXRJbnN0YW50aWF0ZWQoZW50cnksIG9w
dGlvbmFsSW5zdGFuY2UsIHNvdXJjZSkKICAgICAgICAgdmFyIGRlcEtleSA9IHJlcXVlc3RlZE1v
ZHVsZXNbaV07CiAgICAgICAgIHZhciBwYWlyID0gewogICAgICAgICAgICAga2V5OiBkZXBLZXks
Ci0gICAgICAgICAgICB2YWx1ZTogdW5kZWZpbmVkCisgICAgICAgICAgICB2YWx1ZTogQHVuZGVm
aW5lZAogICAgICAgICB9OwogICAgICAgICBAcHV0QnlWYWxEaXJlY3QoZGVwZW5kZW5jaWVzLCBp
LCBwYWlyKTsKICAgICAgICAgZGVwZW5kZW5jaWVzTWFwLkBzZXQoZGVwS2V5LCBwYWlyKTsKQEAg
LTIzMiw3ICsyMzIsNyBAQCBmdW5jdGlvbiByZXF1ZXN0RmV0Y2goa2V5KQogICAgIHZhciBlbnRy
eSA9IHRoaXMuZW5zdXJlUmVnaXN0ZXJlZChrZXkpOwogICAgIGlmIChlbnRyeS5zdGF0ZSA+IHRo
aXMuTGluaykgewogICAgICAgICB2YXIgZGVmZXJyZWQgPSBAbmV3UHJvbWlzZUNhcGFiaWxpdHko
QEludGVybmFsUHJvbWlzZSk7Ci0gICAgICAgIGRlZmVycmVkLkByZWplY3QuQGNhbGwodW5kZWZp
bmVkLCBuZXcgQFR5cGVFcnJvcigiUmVxdWVzdGVkIG1vZHVsZSBpcyBhbHJlYWR5IHJlYWR5IHRv
IGJlIGV4ZWN1dGVkLiIpKTsKKyAgICAgICAgZGVmZXJyZWQuQHJlamVjdC5AY2FsbChAdW5kZWZp
bmVkLCBuZXcgQFR5cGVFcnJvcigiUmVxdWVzdGVkIG1vZHVsZSBpcyBhbHJlYWR5IHJlYWR5IHRv
IGJlIGV4ZWN1dGVkLiIpKTsKICAgICAgICAgcmV0dXJuIGRlZmVycmVkLkBwcm9taXNlOwogICAg
IH0KIApAQCAtMjY0LDcgKzI2NCw3IEBAIGZ1bmN0aW9uIHJlcXVlc3RUcmFuc2xhdGUoa2V5KQog
ICAgIHZhciBlbnRyeSA9IHRoaXMuZW5zdXJlUmVnaXN0ZXJlZChrZXkpOwogICAgIGlmIChlbnRy
eS5zdGF0ZSA+IHRoaXMuTGluaykgewogICAgICAgICB2YXIgZGVmZXJyZWQgPSBAbmV3UHJvbWlz
ZUNhcGFiaWxpdHkoQEludGVybmFsUHJvbWlzZSk7Ci0gICAgICAgIGRlZmVycmVkLkByZWplY3Qu
QGNhbGwodW5kZWZpbmVkLCBuZXcgQFR5cGVFcnJvcigiUmVxdWVzdGVkIG1vZHVsZSBpcyBhbHJl
YWR5IHJlYWR5IHRvIGJlIGV4ZWN1dGVkLiIpKTsKKyAgICAgICAgZGVmZXJyZWQuQHJlamVjdC5A
Y2FsbChAdW5kZWZpbmVkLCBuZXcgQFR5cGVFcnJvcigiUmVxdWVzdGVkIG1vZHVsZSBpcyBhbHJl
YWR5IHJlYWR5IHRvIGJlIGV4ZWN1dGVkLiIpKTsKICAgICAgICAgcmV0dXJuIGRlZmVycmVkLkBw
cm9taXNlOwogICAgIH0KIApAQCAtMjk2LDcgKzI5Niw3IEBAIGZ1bmN0aW9uIHJlcXVlc3RJbnN0
YW50aWF0ZShrZXkpCiAgICAgdmFyIGVudHJ5ID0gdGhpcy5lbnN1cmVSZWdpc3RlcmVkKGtleSk7
CiAgICAgaWYgKGVudHJ5LnN0YXRlID4gdGhpcy5MaW5rKSB7CiAgICAgICAgIHZhciBkZWZlcnJl
ZCA9IEBuZXdQcm9taXNlQ2FwYWJpbGl0eShASW50ZXJuYWxQcm9taXNlKTsKLSAgICAgICAgZGVm
ZXJyZWQuQHJlamVjdC5AY2FsbCh1bmRlZmluZWQsIG5ldyBAVHlwZUVycm9yKCJSZXF1ZXN0ZWQg
bW9kdWxlIGlzIGFscmVhZHkgcmVhZHkgdG8gYmUgZXhlY3V0ZWQuIikpOworICAgICAgICBkZWZl
cnJlZC5AcmVqZWN0LkBjYWxsKEB1bmRlZmluZWQsIG5ldyBAVHlwZUVycm9yKCJSZXF1ZXN0ZWQg
bW9kdWxlIGlzIGFscmVhZHkgcmVhZHkgdG8gYmUgZXhlY3V0ZWQuIikpOwogICAgICAgICByZXR1
cm4gZGVmZXJyZWQuQHByb21pc2U7CiAgICAgfQogCkBAIC0zMzgsNyArMzM4LDcgQEAgZnVuY3Rp
b24gcmVxdWVzdFJlc29sdmVEZXBlbmRlbmNpZXMoa2V5KQogICAgIHZhciBlbnRyeSA9IHRoaXMu
ZW5zdXJlUmVnaXN0ZXJlZChrZXkpOwogICAgIGlmIChlbnRyeS5zdGF0ZSA+IHRoaXMuTGluaykg
ewogICAgICAgICB2YXIgZGVmZXJyZWQgPSBAbmV3UHJvbWlzZUNhcGFiaWxpdHkoQEludGVybmFs
UHJvbWlzZSk7Ci0gICAgICAgIGRlZmVycmVkLkByZWplY3QuQGNhbGwodW5kZWZpbmVkLCBuZXcg
QFR5cGVFcnJvcigiUmVxdWVzdGVkIG1vZHVsZSBpcyBhbHJlYWR5IHJlYWR5IHRvIGJlIGV4ZWN1
dGVkLiIpKTsKKyAgICAgICAgZGVmZXJyZWQuQHJlamVjdC5AY2FsbChAdW5kZWZpbmVkLCBuZXcg
QFR5cGVFcnJvcigiUmVxdWVzdGVkIG1vZHVsZSBpcyBhbHJlYWR5IHJlYWR5IHRvIGJlIGV4ZWN1
dGVkLiIpKTsKICAgICAgICAgcmV0dXJuIGRlZmVycmVkLkBwcm9taXNlOwogICAgIH0KIApAQCAt
NDExLDcgKzQxMSw3IEBAIGZ1bmN0aW9uIHJlcXVlc3RMaW5rKGtleSkKICAgICB2YXIgZW50cnkg
PSB0aGlzLmVuc3VyZVJlZ2lzdGVyZWQoa2V5KTsKICAgICBpZiAoZW50cnkuc3RhdGUgPiB0aGlz
LkxpbmspIHsKICAgICAgICAgdmFyIGRlZmVycmVkID0gQG5ld1Byb21pc2VDYXBhYmlsaXR5KEBJ
bnRlcm5hbFByb21pc2UpOwotICAgICAgICBkZWZlcnJlZC5AcmVzb2x2ZS5AY2FsbCh1bmRlZmlu
ZWQsIGVudHJ5Lm1vZHVsZSk7CisgICAgICAgIGRlZmVycmVkLkByZXNvbHZlLkBjYWxsKEB1bmRl
ZmluZWQsIGVudHJ5Lm1vZHVsZSk7CiAgICAgICAgIHJldHVybiBkZWZlcnJlZC5AcHJvbWlzZTsK
ICAgICB9CiAKQEAgLTUwNCw3ICs1MDQsNyBAQCBmdW5jdGlvbiBwcm92aWRlKGtleSwgc3RhZ2Us
IHZhbHVlKQogICAgIGlmIChzdGFnZSA9PT0gdGhpcy5UcmFuc2xhdGUpIHsKICAgICAgICAgaWYg
KGVudHJ5LnN0YXR1cyA+IHRoaXMuVHJhbnNsYXRlKQogICAgICAgICAgICAgdGhyb3cgbmV3IEBU
eXBlRXJyb3IoIlJlcXVlc3RlZCBtb2R1bGUgaXMgYWxyZWFkeSB0cmFuc2xhdGVkLiIpOwotICAg
ICAgICB0aGlzLmZ1bGZpbGxGZXRjaChlbnRyeSwgdW5kZWZpbmVkKTsKKyAgICAgICAgdGhpcy5m
dWxmaWxsRmV0Y2goZW50cnksIEB1bmRlZmluZWQpOwogICAgICAgICB0aGlzLmZ1bGZpbGxUcmFu
c2xhdGUoZW50cnksIHZhbHVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTUxMiw3ICs1
MTIsNyBAQCBmdW5jdGlvbiBwcm92aWRlKGtleSwgc3RhZ2UsIHZhbHVlKQogICAgIGlmIChzdGFn
ZSA9PT0gdGhpcy5JbnN0YW50aWF0ZSkgewogICAgICAgICBpZiAoZW50cnkuc3RhdHVzID4gdGhp
cy5JbnN0YW50aWF0ZSkKICAgICAgICAgICAgIHRocm93IG5ldyBAVHlwZUVycm9yKCJSZXF1ZXN0
ZWQgbW9kdWxlIGlzIGFscmVhZHkgaW5zdGFudGlhdGVkLiIpOwotICAgICAgICB0aGlzLmZ1bGZp
bGxGZXRjaChlbnRyeSwgdW5kZWZpbmVkKTsKKyAgICAgICAgdGhpcy5mdWxmaWxsRmV0Y2goZW50
cnksIEB1bmRlZmluZWQpOwogICAgICAgICB0aGlzLmZ1bGZpbGxUcmFuc2xhdGUoZW50cnksIHZh
bHVlKTsKICAgICAgICAgdmFyIGxvYWRlciA9IHRoaXM7CiAgICAgICAgIGVudHJ5LnRyYW5zbGF0
ZS50aGVuKGZ1bmN0aW9uIChzb3VyY2UpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9idWlsdGlucy9Qcm9taXNlQ29uc3RydWN0b3IuanMgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnVpbHRpbnMvUHJvbWlzZUNvbnN0cnVjdG9yLmpzCmluZGV4IDFmODNiNDdmNzkwYTc1ZTVi
ZjhjOTNkNWU2NjQ5NjE4Y2IxYWVjNjcuLmRiOThlZjMzNTFiZDE1ZDc5NDVjZDgzMjEyYTk2YjU3
ZDIzMjIzNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9Qcm9t
aXNlQ29uc3RydWN0b3IuanMKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL1By
b21pc2VDb25zdHJ1Y3Rvci5qcwpAQCAtNDYsMjIgKzQ2LDIyIEBAIGZ1bmN0aW9uIG5ld1Jlc29s
dmVFbGVtZW50KGluZGV4KQogICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGFyZ3VtZW50KQogICAg
ICAgICB7CiAgICAgICAgICAgICBpZiAoYWxyZWFkeUNhbGxlZCkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gdW5kZWZpbmVkOworICAgICAgICAgICAgICAgIHJldHVybiBAdW5kZWZpbmVkOwogICAg
ICAgICAgICAgYWxyZWFkeUNhbGxlZCA9IHRydWU7CiAKICAgICAgICAgICAgIEBwdXRCeVZhbERp
cmVjdCh2YWx1ZXMsIGluZGV4LCBhcmd1bWVudCk7CiAKICAgICAgICAgICAgIC0tcmVtYWluaW5n
RWxlbWVudHNDb3VudDsKICAgICAgICAgICAgIGlmIChyZW1haW5pbmdFbGVtZW50c0NvdW50ID09
PSAwKQotICAgICAgICAgICAgICAgIHJldHVybiBwcm9taXNlQ2FwYWJpbGl0eS5AcmVzb2x2ZS5A
Y2FsbCh1bmRlZmluZWQsIHZhbHVlcyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHByb21pc2VD
YXBhYmlsaXR5LkByZXNvbHZlLkBjYWxsKEB1bmRlZmluZWQsIHZhbHVlcyk7CiAKLSAgICAgICAg
ICAgIHJldHVybiB1bmRlZmluZWQ7CisgICAgICAgICAgICByZXR1cm4gQHVuZGVmaW5lZDsKICAg
ICAgICAgfQogICAgIH0KIAogICAgIHRyeSB7CiAgICAgICAgIGZvciAodmFyIHZhbHVlIG9mIGl0
ZXJhYmxlKSB7Ci0gICAgICAgICAgICBAcHV0QnlWYWxEaXJlY3QodmFsdWVzLCBpbmRleCwgdW5k
ZWZpbmVkKTsKKyAgICAgICAgICAgIEBwdXRCeVZhbERpcmVjdCh2YWx1ZXMsIGluZGV4LCBAdW5k
ZWZpbmVkKTsKICAgICAgICAgICAgIHZhciBuZXh0UHJvbWlzZSA9IGNvbnN0cnVjdG9yLnJlc29s
dmUodmFsdWUpOwogICAgICAgICAgICAgdmFyIHJlc29sdmVFbGVtZW50ID0gbmV3UmVzb2x2ZUVs
ZW1lbnQoaW5kZXgpOwogICAgICAgICAgICAgKytyZW1haW5pbmdFbGVtZW50c0NvdW50OwpAQCAt
NzEsOSArNzEsOSBAQCBmdW5jdGlvbiBuZXdSZXNvbHZlRWxlbWVudChpbmRleCkKIAogICAgICAg
ICAtLXJlbWFpbmluZ0VsZW1lbnRzQ291bnQ7CiAgICAgICAgIGlmIChyZW1haW5pbmdFbGVtZW50
c0NvdW50ID09PSAwKQotICAgICAgICAgICAgcHJvbWlzZUNhcGFiaWxpdHkuQHJlc29sdmUuQGNh
bGwodW5kZWZpbmVkLCB2YWx1ZXMpOworICAgICAgICAgICAgcHJvbWlzZUNhcGFiaWxpdHkuQHJl
c29sdmUuQGNhbGwoQHVuZGVmaW5lZCwgdmFsdWVzKTsKICAgICB9IGNhdGNoIChlcnJvcikgewot
ICAgICAgICBwcm9taXNlQ2FwYWJpbGl0eS5AcmVqZWN0LkBjYWxsKHVuZGVmaW5lZCwgZXJyb3Ip
OworICAgICAgICBwcm9taXNlQ2FwYWJpbGl0eS5AcmVqZWN0LkBjYWxsKEB1bmRlZmluZWQsIGVy
cm9yKTsKICAgICB9CiAKICAgICByZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkuQHByb21pc2U7CkBA
IC05OCw3ICs5OCw3IEBAIGZ1bmN0aW9uIHJhY2UoaXRlcmFibGUpCiAgICAgICAgICAgICBuZXh0
UHJvbWlzZS50aGVuKHByb21pc2VDYXBhYmlsaXR5LkByZXNvbHZlLCBwcm9taXNlQ2FwYWJpbGl0
eS5AcmVqZWN0KTsKICAgICAgICAgfQogICAgIH0gY2F0Y2ggKGVycm9yKSB7Ci0gICAgICAgIHBy
b21pc2VDYXBhYmlsaXR5LkByZWplY3QuQGNhbGwodW5kZWZpbmVkLCBlcnJvcik7CisgICAgICAg
IHByb21pc2VDYXBhYmlsaXR5LkByZWplY3QuQGNhbGwoQHVuZGVmaW5lZCwgZXJyb3IpOwogICAg
IH0KIAogICAgIHJldHVybiBwcm9taXNlQ2FwYWJpbGl0eS5AcHJvbWlzZTsKQEAgLTExMyw3ICsx
MTMsNyBAQCBmdW5jdGlvbiByZWplY3QocmVhc29uKQogCiAgICAgdmFyIHByb21pc2VDYXBhYmls
aXR5ID0gQG5ld1Byb21pc2VDYXBhYmlsaXR5KHRoaXMpOwogCi0gICAgcHJvbWlzZUNhcGFiaWxp
dHkuQHJlamVjdC5AY2FsbCh1bmRlZmluZWQsIHJlYXNvbik7CisgICAgcHJvbWlzZUNhcGFiaWxp
dHkuQHJlamVjdC5AY2FsbChAdW5kZWZpbmVkLCByZWFzb24pOwogCiAgICAgcmV0dXJuIHByb21p
c2VDYXBhYmlsaXR5LkBwcm9taXNlOwogfQpAQCAtMTMzLDcgKzEzMyw3IEBAIGZ1bmN0aW9uIHJl
c29sdmUodmFsdWUpCiAKICAgICB2YXIgcHJvbWlzZUNhcGFiaWxpdHkgPSBAbmV3UHJvbWlzZUNh
cGFiaWxpdHkodGhpcyk7CiAKLSAgICBwcm9taXNlQ2FwYWJpbGl0eS5AcmVzb2x2ZS5AY2FsbCh1
bmRlZmluZWQsIHZhbHVlKTsKKyAgICBwcm9taXNlQ2FwYWJpbGl0eS5AcmVzb2x2ZS5AY2FsbChA
dW5kZWZpbmVkLCB2YWx1ZSk7CiAKICAgICByZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkuQHByb21p
c2U7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvUHJvbWlz
ZU9wZXJhdGlvbnMuanMgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvUHJvbWlzZU9w
ZXJhdGlvbnMuanMKaW5kZXggYTU5YjRmZDUwMjNjNTRkOGRhMTJmOTkwZDUwNDdjMDU4NGFiMGUy
YS4uYzRlNTliYjA3OTNiOWUwMGFlN2Q5YTI1MTVhM2RkMmQyYjRiMTI4YiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL1Byb21pc2VPcGVyYXRpb25zLmpzCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9Qcm9taXNlT3BlcmF0aW9ucy5qcwpAQCAt
NTEsMTYgKzUxLDE2IEBAIGZ1bmN0aW9uIG5ld1Byb21pc2VDYXBhYmlsaXR5KGNvbnN0cnVjdG9y
KQogICAgICAgICB0aHJvdyBuZXcgQFR5cGVFcnJvcigicHJvbWlzZSBjYXBhYmlsaXR5IHJlcXVp
cmVzIGEgY29uc3RydWN0b3IgZnVuY3Rpb24iKTsKIAogICAgIHZhciBwcm9taXNlQ2FwYWJpbGl0
eSA9IHsKLSAgICAgICAgQHByb21pc2U6IHVuZGVmaW5lZCwKLSAgICAgICAgQHJlc29sdmU6IHVu
ZGVmaW5lZCwKLSAgICAgICAgQHJlamVjdDogdW5kZWZpbmVkCisgICAgICAgIEBwcm9taXNlOiBA
dW5kZWZpbmVkLAorICAgICAgICBAcmVzb2x2ZTogQHVuZGVmaW5lZCwKKyAgICAgICAgQHJlamVj
dDogQHVuZGVmaW5lZAogICAgIH07CiAKICAgICBmdW5jdGlvbiBleGVjdXRvcihyZXNvbHZlLCBy
ZWplY3QpCiAgICAgewotICAgICAgICBpZiAocHJvbWlzZUNhcGFiaWxpdHkuQHJlc29sdmUgIT09
IHVuZGVmaW5lZCkKKyAgICAgICAgaWYgKHByb21pc2VDYXBhYmlsaXR5LkByZXNvbHZlICE9PSBA
dW5kZWZpbmVkKQogICAgICAgICAgICAgdGhyb3cgbmV3IEBUeXBlRXJyb3IoInJlc29sdmUgZnVu
Y3Rpb24gaXMgYWxyZWFkeSBzZXQiKTsKLSAgICAgICAgaWYgKHByb21pc2VDYXBhYmlsaXR5LkBy
ZWplY3QgIT09IHVuZGVmaW5lZCkKKyAgICAgICAgaWYgKHByb21pc2VDYXBhYmlsaXR5LkByZWpl
Y3QgIT09IEB1bmRlZmluZWQpCiAgICAgICAgICAgICB0aHJvdyBuZXcgQFR5cGVFcnJvcigicmVq
ZWN0IGZ1bmN0aW9uIGlzIGFscmVhZHkgc2V0Iik7CiAKICAgICAgICAgcHJvbWlzZUNhcGFiaWxp
dHkuQHJlc29sdmUgPSByZXNvbHZlOwpAQCAtOTQsOSArOTQsOSBAQCBmdW5jdGlvbiByZWplY3RQ
cm9taXNlKHByb21pc2UsIHJlYXNvbikKIAogICAgIHZhciByZWFjdGlvbnMgPSBwcm9taXNlLkBw
cm9taXNlUmVqZWN0UmVhY3Rpb25zOwogICAgIHByb21pc2UuQHByb21pc2VSZXN1bHQgPSByZWFz
b247Ci0gICAgcHJvbWlzZS5AcHJvbWlzZUZ1bGZpbGxSZWFjdGlvbnMgPSB1bmRlZmluZWQ7Ci0g
ICAgcHJvbWlzZS5AcHJvbWlzZVJlamVjdFJlYWN0aW9ucyA9IHVuZGVmaW5lZDsKLSAgICBwcm9t
aXNlLkBwcm9taXNlU3RhdGUgPSBAcHJvbWlzZVJlamVjdGVkOworICAgIHByb21pc2UuQHByb21p
c2VGdWxmaWxsUmVhY3Rpb25zID0gQHVuZGVmaW5lZDsKKyAgICBwcm9taXNlLkBwcm9taXNlUmVq
ZWN0UmVhY3Rpb25zID0gQHVuZGVmaW5lZDsKKyAgICBwcm9taXNlLkBwcm9taXNlU3RhdGUgPSBA
cHJvbWlzZVN0YXRlUmVqZWN0ZWQ7CiAKICAgICBASW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLnBy
b21pc2VSZWplY3RlZChwcm9taXNlLCByZWFzb24sIHJlYWN0aW9ucyk7CiAKQEAgLTEwOSw5ICsx
MDksOSBAQCBmdW5jdGlvbiBmdWxmaWxsUHJvbWlzZShwcm9taXNlLCB2YWx1ZSkKIAogICAgIHZh
ciByZWFjdGlvbnMgPSBwcm9taXNlLkBwcm9taXNlRnVsZmlsbFJlYWN0aW9uczsKICAgICBwcm9t
aXNlLkBwcm9taXNlUmVzdWx0ID0gdmFsdWU7Ci0gICAgcHJvbWlzZS5AcHJvbWlzZUZ1bGZpbGxS
ZWFjdGlvbnMgPSB1bmRlZmluZWQ7Ci0gICAgcHJvbWlzZS5AcHJvbWlzZVJlamVjdFJlYWN0aW9u
cyA9IHVuZGVmaW5lZDsKLSAgICBwcm9taXNlLkBwcm9taXNlU3RhdGUgPSBAcHJvbWlzZUZ1bGZp
bGxlZDsKKyAgICBwcm9taXNlLkBwcm9taXNlRnVsZmlsbFJlYWN0aW9ucyA9IEB1bmRlZmluZWQ7
CisgICAgcHJvbWlzZS5AcHJvbWlzZVJlamVjdFJlYWN0aW9ucyA9IEB1bmRlZmluZWQ7CisgICAg
cHJvbWlzZS5AcHJvbWlzZVN0YXRlID0gQHByb21pc2VTdGF0ZUZ1bGZpbGxlZDsKIAogICAgIEBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb24ucHJvbWlzZUZ1bGZpbGxlZChwcm9taXNlLCB2YWx1ZSwg
cmVhY3Rpb25zKTsKIApAQCAtMTI2LDcgKzEyNiw3IEBAIGZ1bmN0aW9uIGNyZWF0ZVJlc29sdmlu
Z0Z1bmN0aW9ucyhwcm9taXNlKQogCiAgICAgdmFyIHJlc29sdmUgPSBmdW5jdGlvbiAocmVzb2x1
dGlvbikgewogICAgICAgICBpZiAoYWxyZWFkeVJlc29sdmVkKQotICAgICAgICAgICAgcmV0dXJu
IHVuZGVmaW5lZDsKKyAgICAgICAgICAgIHJldHVybiBAdW5kZWZpbmVkOwogICAgICAgICBhbHJl
YWR5UmVzb2x2ZWQgPSB0cnVlOwogCiAgICAgICAgIGlmIChyZXNvbHV0aW9uID09PSBwcm9taXNl
KQpAQCAtMTQ3LDEyICsxNDcsMTIgQEAgZnVuY3Rpb24gY3JlYXRlUmVzb2x2aW5nRnVuY3Rpb25z
KHByb21pc2UpCiAKICAgICAgICAgQGVucXVldWVKb2IoQHByb21pc2VSZXNvbHZlVGhlbmFibGVK
b2IsIFtwcm9taXNlLCByZXNvbHV0aW9uLCB0aGVuXSk7CiAKLSAgICAgICAgcmV0dXJuIHVuZGVm
aW5lZDsKKyAgICAgICAgcmV0dXJuIEB1bmRlZmluZWQ7CiAgICAgfTsKIAogICAgIHZhciByZWpl
Y3QgPSBmdW5jdGlvbiAocmVhc29uKSB7CiAgICAgICAgIGlmIChhbHJlYWR5UmVzb2x2ZWQpCi0g
ICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkOworICAgICAgICAgICAgcmV0dXJuIEB1bmRlZmlu
ZWQ7CiAgICAgICAgIGFscmVhZHlSZXNvbHZlZCA9IHRydWU7CiAKICAgICAgICAgcmV0dXJuIEBy
ZWplY3RQcm9taXNlKHByb21pc2UsIHJlYXNvbik7CkBAIC0xNzIsMTIgKzE3MiwxMiBAQCBmdW5j
dGlvbiBwcm9taXNlUmVhY3Rpb25Kb2IocmVhY3Rpb24sIGFyZ3VtZW50KQogCiAgICAgdmFyIHJl
c3VsdDsKICAgICB0cnkgewotICAgICAgICByZXN1bHQgPSByZWFjdGlvbi5AaGFuZGxlci5AY2Fs
bCh1bmRlZmluZWQsIGFyZ3VtZW50KTsKKyAgICAgICAgcmVzdWx0ID0gcmVhY3Rpb24uQGhhbmRs
ZXIuQGNhbGwoQHVuZGVmaW5lZCwgYXJndW1lbnQpOwogICAgIH0gY2F0Y2ggKGVycm9yKSB7Ci0g
ICAgICAgIHJldHVybiBwcm9taXNlQ2FwYWJpbGl0eS5AcmVqZWN0LkBjYWxsKHVuZGVmaW5lZCwg
ZXJyb3IpOworICAgICAgICByZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkuQHJlamVjdC5AY2FsbChA
dW5kZWZpbmVkLCBlcnJvcik7CiAgICAgfQogCi0gICAgcmV0dXJuIHByb21pc2VDYXBhYmlsaXR5
LkByZXNvbHZlLkBjYWxsKHVuZGVmaW5lZCwgcmVzdWx0KTsKKyAgICByZXR1cm4gcHJvbWlzZUNh
cGFiaWxpdHkuQHJlc29sdmUuQGNhbGwoQHVuZGVmaW5lZCwgcmVzdWx0KTsKIH0KIAogZnVuY3Rp
b24gcHJvbWlzZVJlc29sdmVUaGVuYWJsZUpvYihwcm9taXNlVG9SZXNvbHZlLCB0aGVuYWJsZSwg
dGhlbikKQEAgLTE4OSw3ICsxODksNyBAQCBmdW5jdGlvbiBwcm9taXNlUmVzb2x2ZVRoZW5hYmxl
Sm9iKHByb21pc2VUb1Jlc29sdmUsIHRoZW5hYmxlLCB0aGVuKQogICAgIHRyeSB7CiAgICAgICAg
IHJldHVybiB0aGVuLkBjYWxsKHRoZW5hYmxlLCByZXNvbHZpbmdGdW5jdGlvbnMuQHJlc29sdmUs
IHJlc29sdmluZ0Z1bmN0aW9ucy5AcmVqZWN0KTsKICAgICB9IGNhdGNoIChlcnJvcikgewotICAg
ICAgICByZXR1cm4gcmVzb2x2aW5nRnVuY3Rpb25zLkByZWplY3QuQGNhbGwodW5kZWZpbmVkLCBl
cnJvcik7CisgICAgICAgIHJldHVybiByZXNvbHZpbmdGdW5jdGlvbnMuQHJlamVjdC5AY2FsbChA
dW5kZWZpbmVkLCBlcnJvcik7CiAgICAgfQogfQogCkBAIC0yMDAsNyArMjAwLDcgQEAgZnVuY3Rp
b24gaW5pdGlhbGl6ZVByb21pc2UoZXhlY3V0b3IpCiAgICAgaWYgKHR5cGVvZiBleGVjdXRvciAh
PT0gJ2Z1bmN0aW9uJykKICAgICAgICAgdGhyb3cgbmV3IEBUeXBlRXJyb3IoIlByb21pc2UgY29u
c3RydWN0b3IgdGFrZXMgYSBmdW5jdGlvbiBhcmd1bWVudCIpOwogCi0gICAgdGhpcy5AcHJvbWlz
ZVN0YXRlID0gQHByb21pc2VQZW5kaW5nOworICAgIHRoaXMuQHByb21pc2VTdGF0ZSA9IEBwcm9t
aXNlU3RhdGVQZW5kaW5nOwogICAgIHRoaXMuQHByb21pc2VGdWxmaWxsUmVhY3Rpb25zID0gW107
CiAgICAgdGhpcy5AcHJvbWlzZVJlamVjdFJlYWN0aW9ucyA9IFtdOwogCkBAIC0yMDgsNyArMjA4
LDcgQEAgZnVuY3Rpb24gaW5pdGlhbGl6ZVByb21pc2UoZXhlY3V0b3IpCiAgICAgdHJ5IHsKICAg
ICAgICAgZXhlY3V0b3IocmVzb2x2aW5nRnVuY3Rpb25zLkByZXNvbHZlLCByZXNvbHZpbmdGdW5j
dGlvbnMuQHJlamVjdCk7CiAgICAgfSBjYXRjaCAoZXJyb3IpIHsKLSAgICAgICAgcmV0dXJuIHJl
c29sdmluZ0Z1bmN0aW9ucy5AcmVqZWN0LkBjYWxsKHVuZGVmaW5lZCwgZXJyb3IpOworICAgICAg
ICByZXR1cm4gcmVzb2x2aW5nRnVuY3Rpb25zLkByZWplY3QuQGNhbGwoQHVuZGVmaW5lZCwgZXJy
b3IpOwogICAgIH0KIAogICAgIHJldHVybiB0aGlzOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J1aWx0aW5zL1Byb21pc2VQcm90b3R5cGUuanMgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnVpbHRpbnMvUHJvbWlzZVByb3RvdHlwZS5qcwppbmRleCA4NTYzZGYwZDkyN2ZiMjMz
OTY4OTM5ZTE0OTQyMzk2ZWM4NWU2NWFhLi5lYzYwNGI4MjgyNTI4NjE4M2IxZDA4NTk1ZWYzMTM2
NjQ5ZmU2NmZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvUHJv
bWlzZVByb3RvdHlwZS5qcworKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvUHJv
bWlzZVByb3RvdHlwZS5qcwpAQCAtMjcsNyArMjcsNyBAQCBmdW5jdGlvbiBjYXRjaChvblJlamVj
dGVkKQogewogICAgICJ1c2Ugc3RyaWN0IjsKIAotICAgIHJldHVybiB0aGlzLnRoZW4odW5kZWZp
bmVkLCBvblJlamVjdGVkKTsKKyAgICByZXR1cm4gdGhpcy50aGVuKEB1bmRlZmluZWQsIG9uUmVq
ZWN0ZWQpOwogfQogCiBmdW5jdGlvbiB0aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKQpAQCAt
NTQsMTIgKzU0LDEyIEBAIGZ1bmN0aW9uIHRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpCiAK
ICAgICB2YXIgc3RhdGUgPSB0aGlzLkBwcm9taXNlU3RhdGU7CiAKLSAgICBpZiAoc3RhdGUgPT09
IEBwcm9taXNlUGVuZGluZykgeworICAgIGlmIChzdGF0ZSA9PT0gQHByb21pc2VTdGF0ZVBlbmRp
bmcpIHsKICAgICAgICAgQHB1dEJ5VmFsRGlyZWN0KHRoaXMuQHByb21pc2VGdWxmaWxsUmVhY3Rp
b25zLCB0aGlzLkBwcm9taXNlRnVsZmlsbFJlYWN0aW9ucy5sZW5ndGgsIGZ1bGZpbGxSZWFjdGlv
bikKICAgICAgICAgQHB1dEJ5VmFsRGlyZWN0KHRoaXMuQHByb21pc2VSZWplY3RSZWFjdGlvbnMs
IHRoaXMuQHByb21pc2VSZWplY3RSZWFjdGlvbnMubGVuZ3RoLCByZWplY3RSZWFjdGlvbikKLSAg
ICB9IGVsc2UgaWYgKHN0YXRlID09PSBAcHJvbWlzZUZ1bGZpbGxlZCkKKyAgICB9IGVsc2UgaWYg
KHN0YXRlID09PSBAcHJvbWlzZVN0YXRlRnVsZmlsbGVkKQogICAgICAgICBAZW5xdWV1ZUpvYihA
cHJvbWlzZVJlYWN0aW9uSm9iLCBbZnVsZmlsbFJlYWN0aW9uLCB0aGlzLkBwcm9taXNlUmVzdWx0
XSk7Ci0gICAgZWxzZSBpZiAoc3RhdGUgPT09IEBwcm9taXNlUmVqZWN0ZWQpCisgICAgZWxzZSBp
ZiAoc3RhdGUgPT09IEBwcm9taXNlU3RhdGVSZWplY3RlZCkKICAgICAgICAgQGVucXVldWVKb2Io
QHByb21pc2VSZWFjdGlvbkpvYiwgW3JlamVjdFJlYWN0aW9uLCB0aGlzLkBwcm9taXNlUmVzdWx0
XSk7CiAKICAgICByZXR1cm4gcmVzdWx0Q2FwYWJpbGl0eS5AcHJvbWlzZTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9TZXRQcm90b3R5cGUuanMgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvU2V0UHJvdG90eXBlLmpzCmluZGV4IGFiODljNmVlNWI2
MjY3NjgxZTJlZWU0ZmUwNzQzNjgwM2VlMTljZTUuLjU1MjcxYjUyOTU4ODM2ZmU4MjU3MDNmNzcw
YjdlZmI1MzE5ZWQyOWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlu
cy9TZXRQcm90b3R5cGUuanMKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL1Nl
dFByb3RvdHlwZS5qcwpAQCAtMzMsMTEgKzMzLDExIEBAIGZ1bmN0aW9uIGZvckVhY2goY2FsbGJh
Y2sgLyosIHRoaXNBcmcgKi8pCiAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9u
JykKICAgICAgICAgdGhyb3cgbmV3IEBUeXBlRXJyb3IoIlNldC5wcm90b3R5cGUuZm9yRWFjaCBj
YWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb24iKTsKIAotICAgIHZhciB0aGlzQXJnID0gYXJndW1l
bnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7CisgICAgdmFyIHRoaXNB
cmcgPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IEB1bmRlZmluZWQ7CiAg
ICAgdmFyIGl0ZXJhdG9yID0gQFNldEl0ZXJhdG9yKHRoaXMpOwogCiAgICAgLy8gVG8gYXZvaWQg
b2JqZWN0IGFsbG9jYXRpb25zIGZvciBpdGVyYXRvciByZXN1bHQgb2JqZWN0cywgd2UgcGFzcyB0
aGUgcGxhY2Vob2xkZXIgdG8gdGhlIHNwZWNpYWwgIm5leHQiIGZ1bmN0aW9uIGluIG9yZGVyIHRv
IGZpbGwgdGhlIHJlc3VsdHMuCi0gICAgdmFyIHZhbHVlID0gWyB1bmRlZmluZWQgXTsKKyAgICB2
YXIgdmFsdWUgPSBbIEB1bmRlZmluZWQgXTsKICAgICBmb3IgKDs7KSB7CiAgICAgICAgIGlmIChA
c2V0SXRlcmF0b3JOZXh0LkBjYWxsKGl0ZXJhdG9yLCB2YWx1ZSkpCiAgICAgICAgICAgICBicmVh
azsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9TdHJpbmdDb25z
dHJ1Y3Rvci5qcyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9TdHJpbmdDb25zdHJ1
Y3Rvci5qcwppbmRleCA0MTllYmVmZDVjYzdlZDIzMDk0MTdhMDNlMDNmZjNmZTg5ZDhmZjFhLi45
MGI0MzVmY2UyNjZhZjE4NzlhMzBiNjc4NGQxN2QxYTI2ZjkyYjhiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvU3RyaW5nQ29uc3RydWN0b3IuanMKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL1N0cmluZ0NvbnN0cnVjdG9yLmpzCkBAIC0yNywx
MiArMjcsMTIgQEAgZnVuY3Rpb24gcmF3KHRlbXBsYXRlKQogewogICAgICJ1c2Ugc3RyaWN0IjsK
IAotICAgIGlmICh0ZW1wbGF0ZSA9PT0gbnVsbCB8fCB0ZW1wbGF0ZSA9PT0gdW5kZWZpbmVkKQor
ICAgIGlmICh0ZW1wbGF0ZSA9PT0gbnVsbCB8fCB0ZW1wbGF0ZSA9PT0gQHVuZGVmaW5lZCkKICAg
ICAgICAgdGhyb3cgbmV3IEBUeXBlRXJyb3IoIlN0cmluZy5yYXcgcmVxdWlyZXMgdGVtcGxhdGUg
bm90IGJlIG51bGwgb3IgdW5kZWZpbmVkIik7CiAgICAgdmFyIGNvb2tlZFNlZ21lbnRzID0gQE9i
amVjdCh0ZW1wbGF0ZSk7CiAKICAgICB2YXIgcmF3VmFsdWUgPSBjb29rZWRTZWdtZW50cy5yYXc7
Ci0gICAgaWYgKHJhd1ZhbHVlID09PSBudWxsIHx8IHJhd1ZhbHVlID09PSB1bmRlZmluZWQpCisg
ICAgaWYgKHJhd1ZhbHVlID09PSBudWxsIHx8IHJhd1ZhbHVlID09PSBAdW5kZWZpbmVkKQogICAg
ICAgICB0aHJvdyBuZXcgQFR5cGVFcnJvcigiU3RyaW5nLnJhdyByZXF1aXJlcyB0ZW1wbGF0ZS5y
YXcgbm90IGJlIG51bGwgb3IgdW5kZWZpbmVkIik7CiAgICAgdmFyIHJhd1NlZ21lbnRzID0gQE9i
amVjdChyYXdWYWx1ZSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWls
dGlucy9TdHJpbmdJdGVyYXRvclByb3RvdHlwZS5qcyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
dWlsdGlucy9TdHJpbmdJdGVyYXRvclByb3RvdHlwZS5qcwppbmRleCAzMWVlNWQ3MzM2Nzg2Njgx
MDM4MWE3OWI5Njg4YjhiZGU3ZDBhYzRiLi5mNzc0ZWM0N2FkMTBkNmUwMWM5MjQ1YmUwYTgzNWUw
NDJhZDRiZmY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvU3Ry
aW5nSXRlcmF0b3JQcm90b3R5cGUuanMKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0
aW5zL1N0cmluZ0l0ZXJhdG9yUHJvdG90eXBlLmpzCkBAIC0zMSwxNyArMzEsMTcgQEAgZnVuY3Rp
b24gbmV4dCgpCiAgICAgICAgIHRocm93IG5ldyBAVHlwZUVycm9yKCIlU3RyaW5nSXRlcmF0b3JQ
cm90b3R5cGUlLm5leHQgcmVxdWlyZXMgdGhhdCB8dGhpc3wgbm90IGJlIG51bGwgb3IgdW5kZWZp
bmVkIik7CiAKICAgICB2YXIgcG9zaXRpb24gPSB0aGlzLkBzdHJpbmdJdGVyYXRvck5leHRJbmRl
eDsKLSAgICBpZiAocG9zaXRpb24gPT09IHVuZGVmaW5lZCkKKyAgICBpZiAocG9zaXRpb24gPT09
IEB1bmRlZmluZWQpCiAgICAgICAgIHRocm93IG5ldyBAVHlwZUVycm9yKCIlU3RyaW5nSXRlcmF0
b3JQcm90b3R5cGUlLm5leHQgcmVxdWlyZXMgdGhhdCB8dGhpc3wgYmUgYSBTdHJpbmcgSXRlcmF0
b3IgaW5zdGFuY2UiKTsKIAogICAgIHZhciBkb25lID0gdHJ1ZTsKLSAgICB2YXIgdmFsdWUgPSB1
bmRlZmluZWQ7CisgICAgdmFyIHZhbHVlID0gQHVuZGVmaW5lZDsKIAogICAgIHZhciBzdHJpbmcg
PSB0aGlzLkBpdGVyYXRlZFN0cmluZzsKLSAgICBpZiAoc3RyaW5nICE9PSB1bmRlZmluZWQpIHsK
KyAgICBpZiAoc3RyaW5nICE9PSBAdW5kZWZpbmVkKSB7CiAgICAgICAgIHZhciBsZW5ndGggPSBz
dHJpbmcubGVuZ3RoID4+PiAwOwogICAgICAgICBpZiAocG9zaXRpb24gPj0gbGVuZ3RoKSB7Ci0g
ICAgICAgICAgICB0aGlzLkBpdGVyYXRlZFN0cmluZyA9IHVuZGVmaW5lZDsKKyAgICAgICAgICAg
IHRoaXMuQGl0ZXJhdGVkU3RyaW5nID0gQHVuZGVmaW5lZDsKICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgIGRvbmUgPSBmYWxzZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J1aWx0aW5zL1N0cmluZ1Byb3RvdHlwZS5qcyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
dWlsdGlucy9TdHJpbmdQcm90b3R5cGUuanMKaW5kZXggYTM1YTVhMTQ1NDBmNzM2ZjVhMjIxOTBl
OTI3OTY5NzE1MDA4OWVmMC4uNmQ1MTczM2E2NzRlM2JkYTk4ODAwYWMwNmNmZTEyMWNhYjY3YzFl
MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL1N0cmluZ1Byb3Rv
dHlwZS5qcworKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvU3RyaW5nUHJvdG90
eXBlLmpzCkBAIC0zNiw3ICszNiw3IEBAIGZ1bmN0aW9uIGxvY2FsZUNvbXBhcmUodGhhdC8qLCBs
b2NhbGVzLCBvcHRpb25zICovKQogICAgIGlmICh0aGlzID09PSBudWxsKQogICAgICAgICB0aHJv
dyBuZXcgQFR5cGVFcnJvcigiU3RyaW5nLnByb3RvdHlwZS5sb2NhbGVDb21wYXJlIHJlcXVpcmVz
IHRoYXQgfHRoaXN8IG5vdCBiZSBudWxsIik7CiAgICAgCi0gICAgaWYgKHRoaXMgPT09IHVuZGVm
aW5lZCkKKyAgICBpZiAodGhpcyA9PT0gQHVuZGVmaW5lZCkKICAgICAgICAgdGhyb3cgbmV3IEBU
eXBlRXJyb3IoIlN0cmluZy5wcm90b3R5cGUubG9jYWxlQ29tcGFyZSByZXF1aXJlcyB0aGF0IHx0
aGlzfCBub3QgYmUgdW5kZWZpbmVkIik7CiAKICAgICAvLyAyLiBMZXQgUyBiZSBUb1N0cmluZyhP
KS4KQEAgLTQ4LDcgKzQ4LDcgQEAgZnVuY3Rpb24gbG9jYWxlQ29tcGFyZSh0aGF0LyosIGxvY2Fs
ZXMsIG9wdGlvbnMgKi8pCiAgICAgdmFyIHRoYXRTdHJpbmcgPSBAdG9TdHJpbmcodGhhdCk7CiAK
ICAgICAvLyBBdm9pZCBjcmVhdGluZyBhIGNvbGxhdG9yIGZvciBkZWZhdWx0cy4KLSAgICBpZiAo
YXJndW1lbnRzWzFdID09PSB1bmRlZmluZWQgJiYgYXJndW1lbnRzWzJdID09PSB1bmRlZmluZWQp
CisgICAgaWYgKGFyZ3VtZW50c1sxXSA9PT0gQHVuZGVmaW5lZCAmJiBhcmd1bWVudHNbMl0gPT09
IEB1bmRlZmluZWQpCiAgICAgICAgIHJldHVybiBAQ29sbGF0b3IucHJvdG90eXBlLmNvbXBhcmUo
dGhpc1N0cmluZywgdGhhdFN0cmluZyk7CiAKICAgICAvLyA2LiBMZXQgY29sbGF0b3IgYmUgQ29u
c3RydWN0KCVDb2xsYXRvciUsIMKrbG9jYWxlcywgb3B0aW9uc8K7KS4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9UeXBlZEFycmF5Q29uc3RydWN0b3IuanMgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvVHlwZWRBcnJheUNvbnN0cnVjdG9yLmpzCmlu
ZGV4IGZmN2JjZDkxNDNkYzVjYTJkNzA0OWJmMDhjYmJkZjhiN2ZiMDNlZDIuLmE4M2Q3NDVmZGVi
MzBhMWNlOTY0MWU2ZDMyMzRkYTZiOGVlYWFlYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9idWlsdGlucy9UeXBlZEFycmF5Q29uc3RydWN0b3IuanMKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J1aWx0aW5zL1R5cGVkQXJyYXlDb25zdHJ1Y3Rvci5qcwpAQCAtMzMsNyAr
MzMsNyBAQCBmdW5jdGlvbiBvZigvKiBpdGVtcy4uLiAqLykKICAgICAidXNlIHN0cmljdCI7CiAg
ICAgbGV0IGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7CiAgICAgbGV0IGNvbnN0cnVjdEZ1bmN0aW9u
ID0gdGhpcy5AYWxsb2NhdGVUeXBlZEFycmF5OwotICAgIGlmIChjb25zdHJ1Y3RGdW5jdGlvbiA9
PT0gdW5kZWZpbmVkKQorICAgIGlmIChjb25zdHJ1Y3RGdW5jdGlvbiA9PT0gQHVuZGVmaW5lZCkK
ICAgICAgICAgdGhyb3cgbmV3IEBUeXBlRXJyb3IoIlR5cGVkQXJyYXkuZnJvbSByZXF1aXJlcyBp
dHMgdGhpcyBhcmd1bWVudCB0byBzdWJjbGFzcyBhIFR5cGVkQXJyYXkgY29uc3RydWN0b3IiKTsK
IAogICAgIGxldCByZXN1bHQgPSBjb25zdHJ1Y3RGdW5jdGlvbihsZW4pOwpAQCAtNTIsNyArNTIs
NyBAQCBmdW5jdGlvbiBmcm9tKGl0ZW1zIC8qIFsgLCBtYXBmbiBbICwgdGhpc0FyZyBdIF0gKi8p
CiAKICAgICBsZXQgdGhpc0FyZzsKIAotICAgIGlmIChtYXBGbiAhPT0gdW5kZWZpbmVkKSB7Cisg
ICAgaWYgKG1hcEZuICE9PSBAdW5kZWZpbmVkKSB7CiAgICAgICAgIGlmICh0eXBlb2YgbWFwRm4g
IT09ICJmdW5jdGlvbiIpCiAgICAgICAgICAgICB0aHJvdyBuZXcgQFR5cGVFcnJvcigiVHlwZWRB
cnJheS5mcm9tIHJlcXVpcmVzIHRoYXQgdGhlIHNlY29uZCBhcmd1bWVudCwgd2hlbiBwcm92aWRl
ZCwgYmUgYSBmdW5jdGlvbiIpOwogCkBAIC04NSwxNCArODUsMTQgQEAgZnVuY3Rpb24gZnJvbShp
dGVtcyAvKiBbICwgbWFwZm4gWyAsIHRoaXNBcmcgXSBdICovKQogCiAgICAgICAgIGZvciAobGV0
IHZhbHVlIG9mIHdyYXBwZXIpIHsKICAgICAgICAgICAgIGlmIChtYXBGbikKLSAgICAgICAgICAg
ICAgICBAcHV0QnlWYWxEaXJlY3QoYWNjdW11bGF0b3IsIGssIHRoaXNBcmcgPT09IHVuZGVmaW5l
ZCA/IG1hcEZuKHZhbHVlLCBrKSA6IG1hcEZuLkBjYWxsKHRoaXNBcmcsIHZhbHVlLCBrKSk7Cisg
ICAgICAgICAgICAgICAgQHB1dEJ5VmFsRGlyZWN0KGFjY3VtdWxhdG9yLCBrLCB0aGlzQXJnID09
PSBAdW5kZWZpbmVkID8gbWFwRm4odmFsdWUsIGspIDogbWFwRm4uQGNhbGwodGhpc0FyZywgdmFs
dWUsIGspKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBAcHV0QnlWYWxEaXJl
Y3QoYWNjdW11bGF0b3IsIGssIHZhbHVlKTsKICAgICAgICAgICAgIGsrKzsKICAgICAgICAgfQog
CiAgICAgICAgIGxldCBjb25zdHJ1Y3RGdW5jdGlvbiA9IHRoaXMuQGFsbG9jYXRlVHlwZWRBcnJh
eTsKLSAgICAgICAgaWYgKGNvbnN0cnVjdEZ1bmN0aW9uID09PSB1bmRlZmluZWQpCisgICAgICAg
IGlmIChjb25zdHJ1Y3RGdW5jdGlvbiA9PT0gQHVuZGVmaW5lZCkKICAgICAgICAgICAgIHRocm93
IG5ldyBAVHlwZUVycm9yKCJUeXBlZEFycmF5LmZyb20gcmVxdWlyZXMgaXRzIHRoaXMgYXJndW1l
bnQgc3ViY2xhc3MgYSBUeXBlZEFycmF5IGNvbnN0cnVjdG9yIik7CiAKICAgICAgICAgbGV0IHJl
c3VsdCA9IGNvbnN0cnVjdEZ1bmN0aW9uKGspOwpAQCAtMTA4LDcgKzEwOCw3IEBAIGZ1bmN0aW9u
IGZyb20oaXRlbXMgLyogWyAsIG1hcGZuIFsgLCB0aGlzQXJnIF0gXSAqLykKICAgICBsZXQgYXJy
YXlMaWtlTGVuZ3RoID0gQHRvTGVuZ3RoKGFycmF5TGlrZS5sZW5ndGgpOwogCiAgICAgbGV0IGNv
bnN0cnVjdEZ1bmN0aW9uID0gdGhpcy5AYWxsb2NhdGVUeXBlZEFycmF5OwotICAgIGlmIChjb25z
dHJ1Y3RGdW5jdGlvbiA9PT0gdW5kZWZpbmVkKQorICAgIGlmIChjb25zdHJ1Y3RGdW5jdGlvbiA9
PT0gQHVuZGVmaW5lZCkKICAgICAgICAgdGhyb3cgbmV3IEBUeXBlRXJyb3IoInRoaXMgZG9lcyBu
b3Qgc3ViY2xhc3MgYSBUeXBlZEFycmF5IGNvbnN0cnVjdG9yIik7CiAKICAgICBsZXQgcmVzdWx0
ID0gY29uc3RydWN0RnVuY3Rpb24oYXJyYXlMaWtlTGVuZ3RoKTsKQEAgLTExNyw3ICsxMTcsNyBA
QCBmdW5jdGlvbiBmcm9tKGl0ZW1zIC8qIFsgLCBtYXBmbiBbICwgdGhpc0FyZyBdIF0gKi8pCiAg
ICAgd2hpbGUgKGsgPCBhcnJheUxpa2VMZW5ndGgpIHsKICAgICAgICAgbGV0IHZhbHVlID0gYXJy
YXlMaWtlW2tdOwogICAgICAgICBpZiAobWFwRm4pCi0gICAgICAgICAgICByZXN1bHRba10gPSB0
aGlzQXJnID09PSB1bmRlZmluZWQgPyBtYXBGbih2YWx1ZSwgaykgOiBtYXBGbi5AY2FsbCh0aGlz
QXJnLCB2YWx1ZSwgayk7CisgICAgICAgICAgICByZXN1bHRba10gPSB0aGlzQXJnID09PSBAdW5k
ZWZpbmVkID8gbWFwRm4odmFsdWUsIGspIDogbWFwRm4uQGNhbGwodGhpc0FyZywgdmFsdWUsIGsp
OwogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXN1bHRba10gPSB2YWx1ZTsKICAgICAgICAg
aysrOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL1R5cGVkQXJy
YXlQcm90b3R5cGUuanMgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvVHlwZWRBcnJh
eVByb3RvdHlwZS5qcwppbmRleCBlOWM1Nzk3YTc4YmY5ZGM5ZTA5NmY1ZjkzZWQ5ZDM0OWUwYWJi
M2RiLi5mNjhiYjQzYmRhMGFmMGM5MTI2MDgxZDA4MzRmMTAyM2ZlNDYzM2NmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvVHlwZWRBcnJheVByb3RvdHlwZS5qcwor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvVHlwZWRBcnJheVByb3RvdHlwZS5q
cwpAQCAtMzAsNyArMzAsNyBAQCBmdW5jdGlvbiBldmVyeShjYWxsYmFjayAvKiwgdGhpc0FyZyAq
LykKIHsKICAgICAidXNlIHN0cmljdCI7CiAgICAgdmFyIGxlbmd0aCA9IEB0eXBlZEFycmF5TGVu
Z3RoKHRoaXMpOwotICAgIHZhciB0aGlzQXJnID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1
bWVudHNbMV0gOiB1bmRlZmluZWQ7CisgICAgdmFyIHRoaXNBcmcgPSBhcmd1bWVudHMubGVuZ3Ro
ID4gMSA/IGFyZ3VtZW50c1sxXSA6IEB1bmRlZmluZWQ7CiAKICAgICBpZiAodHlwZW9mIGNhbGxi
YWNrICE9PSAiZnVuY3Rpb24iKQogICAgICAgICB0aHJvdyBuZXcgQFR5cGVFcnJvcigiVHlwZWRB
cnJheS5wcm90b3R5cGUuZXZlcnkgY2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uIik7CkBAIC00
Nyw3ICs0Nyw3IEBAIGZ1bmN0aW9uIGZpbmQoY2FsbGJhY2sgLyogWywgdGhpc0FyZ10gKi8pCiB7
CiAgICAgInVzZSBzdHJpY3QiOwogICAgIHZhciBsZW5ndGggPSBAdHlwZWRBcnJheUxlbmd0aCh0
aGlzKTsKLSAgICB2YXIgdGhpc0FyZyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRz
WzFdIDogdW5kZWZpbmVkOworICAgIHZhciB0aGlzQXJnID0gYXJndW1lbnRzLmxlbmd0aCA+IDEg
PyBhcmd1bWVudHNbMV0gOiBAdW5kZWZpbmVkOwogCiAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAh
PT0gImZ1bmN0aW9uIikKICAgICAgICAgdGhyb3cgbmV3IEBUeXBlRXJyb3IoIlR5cGVkQXJyYXku
cHJvdG90eXBlLmZpbmQgY2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uIik7CkBAIC01NywxNCAr
NTcsMTQgQEAgZnVuY3Rpb24gZmluZChjYWxsYmFjayAvKiBbLCB0aGlzQXJnXSAqLykKICAgICAg
ICAgaWYgKGNhbGxiYWNrLkBjYWxsKHRoaXNBcmcsIGVsZW0sIGksIHRoaXMpKQogICAgICAgICAg
ICAgcmV0dXJuIGVsZW07CiAgICAgfQotICAgIHJldHVybiB1bmRlZmluZWQ7CisgICAgcmV0dXJu
IEB1bmRlZmluZWQ7CiB9CiAKIGZ1bmN0aW9uIGZpbmRJbmRleChjYWxsYmFjayAvKiBbLCB0aGlz
QXJnXSAqLykKIHsKICAgICAidXNlIHN0cmljdCI7CiAgICAgdmFyIGxlbmd0aCA9IEB0eXBlZEFy
cmF5TGVuZ3RoKHRoaXMpOwotICAgIHZhciB0aGlzQXJnID0gYXJndW1lbnRzLmxlbmd0aCA+IDEg
PyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7CisgICAgdmFyIHRoaXNBcmcgPSBhcmd1bWVudHMu
bGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IEB1bmRlZmluZWQ7CiAKICAgICBpZiAodHlwZW9m
IGNhbGxiYWNrICE9PSAiZnVuY3Rpb24iKQogICAgICAgICB0aHJvdyBuZXcgQFR5cGVFcnJvcigi
VHlwZWRBcnJheS5wcm90b3R5cGUuZmluZEluZGV4IGNhbGxiYWNrIG11c3QgYmUgYSBmdW5jdGlv
biIpOwpAQCAtODAsNyArODAsNyBAQCBmdW5jdGlvbiBmb3JFYWNoKGNhbGxiYWNrIC8qIFssIHRo
aXNBcmddICovKQogewogICAgICJ1c2Ugc3RyaWN0IjsKICAgICB2YXIgbGVuZ3RoID0gQHR5cGVk
QXJyYXlMZW5ndGgodGhpcyk7Ci0gICAgdmFyIHRoaXNBcmcgPSBhcmd1bWVudHMubGVuZ3RoID4g
MSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDsKKyAgICB2YXIgdGhpc0FyZyA9IGFyZ3VtZW50
cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogQHVuZGVmaW5lZDsKIAogICAgIGlmICh0eXBl
b2YgY2FsbGJhY2sgIT09ICJmdW5jdGlvbiIpCiAgICAgICAgIHRocm93IG5ldyBAVHlwZUVycm9y
KCJUeXBlZEFycmF5LnByb3RvdHlwZS5mb3JFYWNoIGNhbGxiYWNrIG11c3QgYmUgYSBmdW5jdGlv
biIpOwpAQCAtOTQsNyArOTQsNyBAQCBmdW5jdGlvbiBzb21lKGNhbGxiYWNrIC8qIFssIHRoaXNB
cmddICovKQogICAgIC8vIDIyLjIuMy4yNAogICAgICJ1c2Ugc3RyaWN0IjsKICAgICB2YXIgbGVu
Z3RoID0gQHR5cGVkQXJyYXlMZW5ndGgodGhpcyk7Ci0gICAgdmFyIHRoaXNBcmcgPSBhcmd1bWVu
dHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDsKKyAgICB2YXIgdGhpc0Fy
ZyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogQHVuZGVmaW5lZDsKIAog
ICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICJmdW5jdGlvbiIpCiAgICAgICAgIHRocm93IG5l
dyBAVHlwZUVycm9yKCJUeXBlZEFycmF5LnByb3RvdHlwZS5zb21lIGNhbGxiYWNrIG11c3QgYmUg
YSBmdW5jdGlvbiIpOwpAQCAtMTkyLDcgKzE5Miw3IEBAIGZ1bmN0aW9uIHJlZHVjZShjYWxsYmFj
ayAvKiBbLCBpbml0aWFsVmFsdWVdICovKQogICAgICAgICBhY2N1bXVsYXRvciA9IHRoaXNbaysr
XTsKIAogICAgIGZvciAoOyBrIDwgbGVuZ3RoOyBrKyspCi0gICAgICAgIGFjY3VtdWxhdG9yID0g
Y2FsbGJhY2suQGNhbGwodW5kZWZpbmVkLCBhY2N1bXVsYXRvciwgdGhpc1trXSwgaywgdGhpcyk7
CisgICAgICAgIGFjY3VtdWxhdG9yID0gY2FsbGJhY2suQGNhbGwoQHVuZGVmaW5lZCwgYWNjdW11
bGF0b3IsIHRoaXNba10sIGssIHRoaXMpOwogCiAgICAgcmV0dXJuIGFjY3VtdWxhdG9yOwogfQpA
QCAtMjE3LDcgKzIxNyw3IEBAIGZ1bmN0aW9uIHJlZHVjZVJpZ2h0KGNhbGxiYWNrIC8qIFssIGlu
aXRpYWxWYWx1ZV0gKi8pCiAgICAgICAgIGFjY3VtdWxhdG9yID0gdGhpc1trLS1dOwogCiAgICAg
Zm9yICg7IGsgPj0gMDsgay0tKQotICAgICAgICBhY2N1bXVsYXRvciA9IGNhbGxiYWNrLkBjYWxs
KHVuZGVmaW5lZCwgYWNjdW11bGF0b3IsIHRoaXNba10sIGssIHRoaXMpOworICAgICAgICBhY2N1
bXVsYXRvciA9IGNhbGxiYWNrLkBjYWxsKEB1bmRlZmluZWQsIGFjY3VtdWxhdG9yLCB0aGlzW2td
LCBrLCB0aGlzKTsKIAogICAgIHJldHVybiBhY2N1bXVsYXRvcjsKIH0KQEAgLTIzMiw3ICsyMzIs
NyBAQCBmdW5jdGlvbiBtYXAoY2FsbGJhY2sgLyosIHRoaXNBcmcgKi8pCiAgICAgaWYgKHR5cGVv
ZiBjYWxsYmFjayAhPT0gImZ1bmN0aW9uIikKICAgICAgICAgdGhyb3cgbmV3IEBUeXBlRXJyb3Io
IlR5cGVkQXJyYXkucHJvdG90eXBlLm1hcCBjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb24iKTsK
IAotICAgIHZhciB0aGlzQXJnID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0g
OiB1bmRlZmluZWQ7CisgICAgdmFyIHRoaXNBcmcgPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFy
Z3VtZW50c1sxXSA6IEB1bmRlZmluZWQ7CiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIGEg
c3BlY2llcyBjb25zdHJ1Y3Rvci4KICAgICB2YXIgcmVzdWx0ID0gbmV3IHRoaXMuY29uc3RydWN0
b3IobGVuZ3RoKTsKICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CkBAIC0y
NTEsNyArMjUxLDcgQEAgZnVuY3Rpb24gZmlsdGVyKGNhbGxiYWNrIC8qLCB0aGlzQXJnICovKQog
ICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICJmdW5jdGlvbiIpCiAgICAgICAgIHRocm93IG5l
dyBAVHlwZUVycm9yKCJUeXBlZEFycmF5LnByb3RvdHlwZS5maWx0ZXIgY2FsbGJhY2sgbXVzdCBi
ZSBhIGZ1bmN0aW9uIik7CiAKLSAgICB2YXIgdGhpc0FyZyA9IGFyZ3VtZW50cy5sZW5ndGggPiAx
ID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkOworICAgIHZhciB0aGlzQXJnID0gYXJndW1lbnRz
Lmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiBAdW5kZWZpbmVkOwogCiAgICAgdmFyIGtlcHQg
PSBbXTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlSW50cmluc2ljUmVnaXN0cnkuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0J5dGVjb2RlSW50cmluc2ljUmVnaXN0cnkuY3BwCmluZGV4IDgzZjkzYzZkYzM0NmFkZjlhYWQ4
ZjY2MzczNGFjZjhlZjk2MDZjMDguLmI0MGU5NDI4MjUzMjA2NjAxNzUxOTg1ZDNjZDA3ZmQ4ZTUw
MDg4N2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29k
ZUludHJpbnNpY1JlZ2lzdHJ5LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVJbnRyaW5zaWNSZWdpc3RyeS5jcHAKQEAgLTI1LDI0ICsyNSwzNyBAQAogCiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVJbnRyaW5zaWNSZWdpc3RyeS5o
IgotCi0jaW5jbHVkZSAiQ29tbW9uSWRlbnRpZmllcnMuaCIKKyNpbmNsdWRlICJCeXRlY29kZUdl
bmVyYXRvci5oIgorI2luY2x1ZGUgIkpTQXJyYXlJdGVyYXRvci5oIgorI2luY2x1ZGUgIkpTQ0pT
VmFsdWVJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNQcm9taXNlLmgiCiAjaW5jbHVkZSAiTm9kZXMu
aCIKKyNpbmNsdWRlICJTdHJvbmdJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCi0jZGVm
aW5lIElOSVRJQUxJU0VfQllURUNPREVfSU5UUklOU0lDX05BTUVTX1RPX1NFVChuYW1lKSBtX2J5
dGVjb2RlSW50cmluc2ljTWFwLmFkZChwcm9wZXJ0eU5hbWVzLm5hbWUjI1ByaXZhdGVOYW1lLmlt
cGwoKSwgJkJ5dGVjb2RlSW50cmluc2ljTm9kZTo6ZW1pdF9pbnRyaW5zaWNfIyNuYW1lKTsKKyNk
ZWZpbmUgSU5JVElBTElTRV9CWVRFQ09ERV9JTlRSSU5TSUNfTkFNRVNfVE9fU0VUKG5hbWUpIG1f
Ynl0ZWNvZGVJbnRyaW5zaWNNYXAuYWRkKHZtLnByb3BlcnR5TmFtZXMtPm5hbWUjI1ByaXZhdGVO
YW1lLmltcGwoKSwgJkJ5dGVjb2RlSW50cmluc2ljTm9kZTo6ZW1pdF9pbnRyaW5zaWNfIyNuYW1l
KTsKIAotQnl0ZWNvZGVJbnRyaW5zaWNSZWdpc3RyeTo6Qnl0ZWNvZGVJbnRyaW5zaWNSZWdpc3Ry
eShjb25zdCBDb21tb25JZGVudGlmaWVycyYgcHJvcGVydHlOYW1lcykKLSAgICA6IG1fcHJvcGVy
dHlOYW1lcyhwcm9wZXJ0eU5hbWVzKQorQnl0ZWNvZGVJbnRyaW5zaWNSZWdpc3RyeTo6Qnl0ZWNv
ZGVJbnRyaW5zaWNSZWdpc3RyeShWTSYgdm0pCisgICAgOiBtX3ZtKHZtKQogICAgICwgbV9ieXRl
Y29kZUludHJpbnNpY01hcCgpCiB7Ci0gICAgSlNDX0NPTU1PTl9CWVRFQ09ERV9JTlRSSU5TSUNT
X0VBQ0hfTkFNRShJTklUSUFMSVNFX0JZVEVDT0RFX0lOVFJJTlNJQ19OQU1FU19UT19TRVQpCisg
ICAgSlNDX0NPTU1PTl9CWVRFQ09ERV9JTlRSSU5TSUNfRlVOQ1RJT05TX0VBQ0hfTkFNRShJTklU
SUFMSVNFX0JZVEVDT0RFX0lOVFJJTlNJQ19OQU1FU19UT19TRVQpCisgICAgSlNDX0NPTU1PTl9C
WVRFQ09ERV9JTlRSSU5TSUNfQ09OU1RBTlRTX0VBQ0hfTkFNRShJTklUSUFMSVNFX0JZVEVDT0RF
X0lOVFJJTlNJQ19OQU1FU19UT19TRVQpCisKKyAgICBtX3VuZGVmaW5lZC5zZXQobV92bSwganNV
bmRlZmluZWQoKSk7CisgICAgbV9hcnJheUl0ZXJhdGlvbktpbmRLZXkuc2V0KG1fdm0sIGpzTnVt
YmVyKEFycmF5SXRlcmF0ZUtleSkpOworICAgIG1fYXJyYXlJdGVyYXRpb25LaW5kVmFsdWUuc2V0
KG1fdm0sIGpzTnVtYmVyKEFycmF5SXRlcmF0ZVZhbHVlKSk7CisgICAgbV9hcnJheUl0ZXJhdGlv
bktpbmRLZXlWYWx1ZS5zZXQobV92bSwganNOdW1iZXIoQXJyYXlJdGVyYXRlS2V5VmFsdWUpKTsK
KyAgICBtX3Byb21pc2VTdGF0ZVBlbmRpbmcuc2V0KG1fdm0sIGpzTnVtYmVyKHN0YXRpY19jYXN0
PHVuc2lnbmVkPihKU1Byb21pc2U6OlN0YXR1czo6UGVuZGluZykpKTsKKyAgICBtX3Byb21pc2VT
dGF0ZUZ1bGZpbGxlZC5zZXQobV92bSwganNOdW1iZXIoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpT
UHJvbWlzZTo6U3RhdHVzOjpGdWxmaWxsZWQpKSk7CisgICAgbV9wcm9taXNlU3RhdGVSZWplY3Rl
ZC5zZXQobV92bSwganNOdW1iZXIoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTUHJvbWlzZTo6U3Rh
dHVzOjpSZWplY3RlZCkpKTsKKyAgICBtX3N5bWJvbEl0ZXJhdG9yLnNldChtX3ZtLCBTeW1ib2w6
OmNyZWF0ZShtX3ZtLCBzdGF0aWNfY2FzdDxTeW1ib2xJbXBsJj4oKm1fdm0ucHJvcGVydHlOYW1l
cy0+aXRlcmF0b3JTeW1ib2wuaW1wbCgpKSkpOwogfQogCiBCeXRlY29kZUludHJpbnNpY05vZGU6
OkVtaXR0ZXJUeXBlIEJ5dGVjb2RlSW50cmluc2ljUmVnaXN0cnk6Omxvb2t1cChjb25zdCBJZGVu
dGlmaWVyJiBpZGVudCkgY29uc3QKIHsKLSAgICBpZiAoIW1fcHJvcGVydHlOYW1lcy5pc1ByaXZh
dGVOYW1lKGlkZW50KSkKKyAgICBpZiAoIW1fdm0ucHJvcGVydHlOYW1lcy0+aXNQcml2YXRlTmFt
ZShpZGVudCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGF1dG8gaXRlcmF0b3IgPSBt
X2J5dGVjb2RlSW50cmluc2ljTWFwLmZpbmQoaWRlbnQuaW1wbCgpKTsKICAgICBpZiAoaXRlcmF0
b3IgPT0gbV9ieXRlY29kZUludHJpbnNpY01hcC5lbmQoKSkKQEAgLTUwLDUgKzYzLDEzIEBACiAg
ICAgcmV0dXJuIGl0ZXJhdG9yLT52YWx1ZTsKIH0KIAorI2RlZmluZSBKU0NfREVDTEFSRV9CWVRF
Q09ERV9JTlRSSU5TSUNfQ09OU1RBTlRfR0VORVJBVE9SUyhuYW1lKSBcCisgICAgSlNWYWx1ZSBC
eXRlY29kZUludHJpbnNpY1JlZ2lzdHJ5OjpuYW1lIyNWYWx1ZShCeXRlY29kZUdlbmVyYXRvciYp
IFwKKyAgICB7IFwKKyAgICAgICAgcmV0dXJuIG1fIyNuYW1lLmdldCgpOyBcCisgICAgfQorICAg
IEpTQ19DT01NT05fQllURUNPREVfSU5UUklOU0lDX0NPTlNUQU5UU19FQUNIX05BTUUoSlNDX0RF
Q0xBUkVfQllURUNPREVfSU5UUklOU0lDX0NPTlNUQU5UX0dFTkVSQVRPUlMpCisjdW5kZWYgSlND
X0RFQ0xBUkVfQllURUNPREVfSU5UUklOU0lDX0NPTlNUQU5UX0dFTkVSQVRPUlMKKwogfSAvLyBu
YW1lc3BhY2UgSlNDCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZUludHJpbnNpY1JlZ2lzdHJ5LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQnl0ZWNvZGVJbnRyaW5zaWNSZWdpc3RyeS5oCmluZGV4IDg3YTU3OGMxNmMzMGEzMzQ3
MDE0NTE1NmU1ZDFjN2I3YmExMzJlMjUuLjNlMzlkYjcxOGE4OWM3MTQ3NTlmZDc5ZTlmZmYxOGZj
MDAyZGQxNzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZUludHJpbnNpY1JlZ2lzdHJ5LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlSW50cmluc2ljUmVnaXN0cnkuaApAQCAtMzYsMTkgKzM2LDQzIEBACiBjbGFz
cyBCeXRlY29kZUdlbmVyYXRvcjsKIGNsYXNzIEJ5dGVjb2RlSW50cmluc2ljTm9kZTsKIGNsYXNz
IFJlZ2lzdGVySUQ7CitjbGFzcyBJZGVudGlmaWVyOworCisjZGVmaW5lIEpTQ19DT01NT05fQllU
RUNPREVfSU5UUklOU0lDX0ZVTkNUSU9OU19FQUNIX05BTUUobWFjcm8pIFwKKyAgICBtYWNybyhh
c3NlcnQpIFwKKyAgICBtYWNybyhwdXRCeVZhbERpcmVjdCkgXAorICAgIG1hY3JvKHRvU3RyaW5n
KQorCisjZGVmaW5lIEpTQ19DT01NT05fQllURUNPREVfSU5UUklOU0lDX0NPTlNUQU5UU19FQUNI
X05BTUUobWFjcm8pIFwKKyAgICBtYWNybyh1bmRlZmluZWQpIFwKKyAgICBtYWNybyhhcnJheUl0
ZXJhdGlvbktpbmRLZXkpIFwKKyAgICBtYWNybyhhcnJheUl0ZXJhdGlvbktpbmRWYWx1ZSkgXAor
ICAgIG1hY3JvKGFycmF5SXRlcmF0aW9uS2luZEtleVZhbHVlKSBcCisgICAgbWFjcm8ocHJvbWlz
ZVN0YXRlUGVuZGluZykgXAorICAgIG1hY3JvKHByb21pc2VTdGF0ZUZ1bGZpbGxlZCkgXAorICAg
IG1hY3JvKHByb21pc2VTdGF0ZVJlamVjdGVkKSBcCisgICAgbWFjcm8oc3ltYm9sSXRlcmF0b3Ip
CiAKIGNsYXNzIEJ5dGVjb2RlSW50cmluc2ljUmVnaXN0cnkgewogICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKEJ5dGVjb2RlSW50cmluc2ljUmVnaXN0cnkpOwogcHVibGljOgotICAgIGV4cGxpY2l0
IEJ5dGVjb2RlSW50cmluc2ljUmVnaXN0cnkoY29uc3QgQ29tbW9uSWRlbnRpZmllcnMmKTsKKyAg
ICBleHBsaWNpdCBCeXRlY29kZUludHJpbnNpY1JlZ2lzdHJ5KFZNJik7CiAKICAgICB0eXBlZGVm
IFJlZ2lzdGVySUQqIChCeXRlY29kZUludHJpbnNpY05vZGU6OiogRW1pdHRlclR5cGUpKEJ5dGVj
b2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCopOwogCiAgICAgRW1pdHRlclR5cGUgbG9va3VwKGNv
bnN0IElkZW50aWZpZXImKSBjb25zdDsKIAorI2RlZmluZSBKU0NfREVDTEFSRV9CWVRFQ09ERV9J
TlRSSU5TSUNfQ09OU1RBTlRfR0VORVJBVE9SUyhuYW1lKSBKU1ZhbHVlIG5hbWUjI1ZhbHVlKEJ5
dGVjb2RlR2VuZXJhdG9yJik7CisgICAgSlNDX0NPTU1PTl9CWVRFQ09ERV9JTlRSSU5TSUNfQ09O
U1RBTlRTX0VBQ0hfTkFNRShKU0NfREVDTEFSRV9CWVRFQ09ERV9JTlRSSU5TSUNfQ09OU1RBTlRf
R0VORVJBVE9SUykKKyN1bmRlZiBKU0NfREVDTEFSRV9CWVRFQ09ERV9JTlRSSU5TSUNfQ09OU1RB
TlRfR0VORVJBVE9SUworCiBwcml2YXRlOgotICAgIGNvbnN0IENvbW1vbklkZW50aWZpZXJzJiBt
X3Byb3BlcnR5TmFtZXM7CisgICAgVk0mIG1fdm07CiAgICAgSGFzaE1hcDxSZWZQdHI8VW5pcXVl
ZFN0cmluZ0ltcGw+LCBFbWl0dGVyVHlwZSwgSWRlbnRpZmllclJlcEhhc2g+IG1fYnl0ZWNvZGVJ
bnRyaW5zaWNNYXA7CisKKyNkZWZpbmUgSlNDX0RFQ0xBUkVfQllURUNPREVfSU5UUklOU0lDX0NP
TlNUQU5UX0dFTkVSQVRPUlMobmFtZSkgU3Ryb25nPFVua25vd24+IG1fIyNuYW1lOworICAgIEpT
Q19DT01NT05fQllURUNPREVfSU5UUklOU0lDX0NPTlNUQU5UU19FQUNIX05BTUUoSlNDX0RFQ0xB
UkVfQllURUNPREVfSU5UUklOU0lDX0NPTlNUQU5UX0dFTkVSQVRPUlMpCisjdW5kZWYgSlNDX0RF
Q0xBUkVfQllURUNPREVfSU5UUklOU0lDX0NPTlNUQU5UX0dFTkVSQVRPUlMKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21w
aWxlci9Ob2Rlc0NvZGVnZW4uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxl
ci9Ob2Rlc0NvZGVnZW4uY3BwCmluZGV4IGEzOTAzNzE0NDRlMjI0MmM2NjRmY2Q5Y2JiMmMyYmZh
NDRlZTEwNDEuLmVmNDM0M2UzNWQ3NDAxNzY2MzU3ODc4YzExM2EwY2Q2ZTQyMTgzMDUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5j
cHAKQEAgLTg1MCw2ICs4NTAsMTkgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVJbnRyaW5zaWNOb2Rl
OjplbWl0X2ludHJpbnNpY190b1N0cmluZyhCeXRlY29kZUdlbmVyYXRvciYgZ2UKICAgICByZXR1
cm4gZ2VuZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQoZHN0LCBnZW5lcmF0b3IuZW1p
dFRvU3RyaW5nKGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KSwgc3JjLmdldCgpKSk7CiB9
CiAKKworI2RlZmluZSBKU0NfREVDTEFSRV9CWVRFQ09ERV9JTlRSSU5TSUNfQ09OU1RBTlRfR0VO
RVJBVE9SUyhuYW1lKSBcCisgICAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVJbnRyaW5zaWNOb2RlOjpl
bWl0X2ludHJpbnNpY18jI25hbWUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0
ZXJJRCogZHN0KSBcCisgICAgeyBcCisgICAgICAgIEFTU0VSVCghbV9hcmdzKTsgXAorICAgICAg
ICBBU1NFUlQodHlwZSgpID09IFR5cGU6OkNvbnN0YW50KTsgXAorICAgICAgICBpZiAoZHN0ID09
IGdlbmVyYXRvci5pZ25vcmVkUmVzdWx0KCkpIFwKKyAgICAgICAgICAgIHJldHVybiAwOyBcCisg
ICAgICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdExvYWQoZHN0LCBnZW5lcmF0b3Iudm0oKS0+Ynl0
ZWNvZGVJbnRyaW5zaWNSZWdpc3RyeSgpLm5hbWUjI1ZhbHVlKGdlbmVyYXRvcikpOyBcCisgICAg
fQorICAgIEpTQ19DT01NT05fQllURUNPREVfSU5UUklOU0lDX0NPTlNUQU5UU19FQUNIX05BTUUo
SlNDX0RFQ0xBUkVfQllURUNPREVfSU5UUklOU0lDX0NPTlNUQU5UX0dFTkVSQVRPUlMpCisjdW5k
ZWYgSlNDX0RFQ0xBUkVfQllURUNPREVfSU5UUklOU0lDX0NPTlNUQU5UX0dFTkVSQVRPUlMKKwog
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZ1bmN0aW9uQ2FsbEJyYWNrZXROb2Rl
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogUmVnaXN0ZXJJRCogRnVuY3Rp
b25DYWxsQnJhY2tldE5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJh
dG9yLCBSZWdpc3RlcklEKiBkc3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cGFyc2VyL0FTVEJ1aWxkZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvQVNUQnVp
bGRlci5oCmluZGV4IDEwNDk4OWRhZjNkYTIxNTBlM2UyZTgyOTI3OTFhNmQwZmIzMTk4NmIuLjRj
ODc4ZTk1Yjg4OTI0ZDM5N2QwMWY4YTMwYzIxZmI5NjRkYzY4OTYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvQVNUQnVpbGRlci5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvQVNUQnVpbGRlci5oCkBAIC0xODIsMTEgKzE4MiwxNyBAQCBjbGFzcyBB
U1RCdWlsZGVyIHsKICAgICB7CiAgICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIE5l
d1RhcmdldE5vZGUobG9jYXRpb24pOwogICAgIH0KLSAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRl
UmVzb2x2ZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIHN0YXJ0KQorICAgIEV4cHJlc3Npb25Ob2Rl
KiBjcmVhdGVSZXNvbHZlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIGNvbnN0IElk
ZW50aWZpZXImIGlkZW50LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IEpTVGV4
dFBvc2l0aW9uJiBlbmQpCiAgICAgewotICAgICAgICBpZiAobV92bS0+cHJvcGVydHlOYW1lcy0+
YXJndW1lbnRzID09ICppZGVudCkKKyAgICAgICAgaWYgKG1fdm0tPnByb3BlcnR5TmFtZXMtPmFy
Z3VtZW50cyA9PSBpZGVudCkKICAgICAgICAgICAgIHVzZXNBcmd1bWVudHMoKTsKLSAgICAgICAg
cmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgUmVzb2x2ZU5vZGUobG9jYXRpb24sICppZGVudCwg
c3RhcnQpOworCisgICAgICAgIGlmIChpZGVudC5pc1N5bWJvbCgpKSB7CisgICAgICAgICAgICBp
ZiAoQnl0ZWNvZGVJbnRyaW5zaWNOb2RlOjpFbWl0dGVyVHlwZSBlbWl0dGVyID0gbV92bS0+Ynl0
ZWNvZGVJbnRyaW5zaWNSZWdpc3RyeSgpLmxvb2t1cChpZGVudCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgQnl0ZWNvZGVJbnRyaW5zaWNOb2RlKEJ5dGVjb2Rl
SW50cmluc2ljTm9kZTo6VHlwZTo6Q29uc3RhbnQsIGxvY2F0aW9uLCBlbWl0dGVyLCBpZGVudCwg
bnVsbHB0ciwgc3RhcnQsIHN0YXJ0LCBlbmQpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJu
IG5ldyAobV9wYXJzZXJBcmVuYSkgUmVzb2x2ZU5vZGUobG9jYXRpb24sIGlkZW50LCBzdGFydCk7
CiAgICAgfQogICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVPYmplY3RMaXRlcmFsKGNvbnN0IEpT
VG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24pIHsgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgT2Jq
ZWN0TGl0ZXJhbE5vZGUobG9jYXRpb24pOyB9CiAgICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZU9i
amVjdExpdGVyYWwoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgUHJvcGVydHlMaXN0
Tm9kZSogcHJvcGVydGllcykgeyByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBPYmplY3RMaXRl
cmFsTm9kZShsb2NhdGlvbiwgcHJvcGVydGllcyk7IH0KQEAgLTExMzYsNiArMTE0MiwxMSBAQCBF
eHByZXNzaW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZUJpdFhPck5vZGUoY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiBsb2NhdGlvbiwgRXhwcgogRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VG
dW5jdGlvbkNhbGxOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJlc3Np
b25Ob2RlKiBmdW5jLCBBcmd1bWVudHNOb2RlKiBhcmdzLCBjb25zdCBKU1RleHRQb3NpdGlvbiYg
ZGl2b3RTdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3Np
dGlvbiYgZGl2b3RFbmQpCiB7CiAgICAgQVNTRVJUKGRpdm90Lm9mZnNldCA+PSBkaXZvdC5saW5l
U3RhcnRPZmZzZXQpOworICAgIGlmIChmdW5jLT5pc0J5dGVjb2RlSW50cmluc2ljTm9kZSgpKSB7
CisgICAgICAgIEJ5dGVjb2RlSW50cmluc2ljTm9kZSogaW50cmluc2ljID0gc3RhdGljX2Nhc3Q8
Qnl0ZWNvZGVJbnRyaW5zaWNOb2RlKj4oZnVuYyk7CisgICAgICAgIGlmIChpbnRyaW5zaWMtPnR5
cGUoKSA9PSBCeXRlY29kZUludHJpbnNpY05vZGU6OlR5cGU6OkNvbnN0YW50KQorICAgICAgICAg
ICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgQnl0ZWNvZGVJbnRyaW5zaWNOb2RlKEJ5dGVj
b2RlSW50cmluc2ljTm9kZTo6VHlwZTo6RnVuY3Rpb24sIGxvY2F0aW9uLCBpbnRyaW5zaWMtPmVt
aXR0ZXIoKSwgaW50cmluc2ljLT5pZGVudGlmaWVyKCksIGFyZ3MsIGRpdm90LCBkaXZvdFN0YXJ0
LCBkaXZvdEVuZCk7CisgICAgfQogICAgIGlmICghZnVuYy0+aXNMb2NhdGlvbigpKQogICAgICAg
ICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBGdW5jdGlvbkNhbGxWYWx1ZU5vZGUobG9jYXRp
b24sIGZ1bmMsIGFyZ3MsIGRpdm90LCBkaXZvdFN0YXJ0LCBkaXZvdEVuZCk7CiAgICAgaWYgKGZ1
bmMtPmlzUmVzb2x2ZU5vZGUoKSkgewpAQCAtMTE0NSw4ICsxMTU2LDYgQEAgRXhwcmVzc2lvbk5v
ZGUqIEFTVEJ1aWxkZXI6Om1ha2VGdW5jdGlvbkNhbGxOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlv
biYgbG9jYXRpb24KICAgICAgICAgICAgIHVzZXNFdmFsKCk7CiAgICAgICAgICAgICByZXR1cm4g
bmV3IChtX3BhcnNlckFyZW5hKSBFdmFsRnVuY3Rpb25DYWxsTm9kZShsb2NhdGlvbiwgYXJncywg
ZGl2b3QsIGRpdm90U3RhcnQsIGRpdm90RW5kKTsKICAgICAgICAgfQotICAgICAgICBpZiAoQnl0
ZWNvZGVJbnRyaW5zaWNOb2RlOjpFbWl0dGVyVHlwZSBlbWl0dGVyID0gbV92bS0+cHJvcGVydHlO
YW1lcy0+Ynl0ZWNvZGVJbnRyaW5zaWNSZWdpc3RyeSgpLmxvb2t1cChpZGVudGlmaWVyKSkKLSAg
ICAgICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIEJ5dGVjb2RlSW50cmluc2ljTm9k
ZShsb2NhdGlvbiwgZW1pdHRlciwgaWRlbnRpZmllciwgYXJncywgZGl2b3QsIGRpdm90U3RhcnQs
IGRpdm90RW5kKTsKICAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgRnVuY3Rpb25D
YWxsUmVzb2x2ZU5vZGUobG9jYXRpb24sIGlkZW50aWZpZXIsIGFyZ3MsIGRpdm90LCBkaXZvdFN0
YXJ0LCBkaXZvdEVuZCk7CiAgICAgfQogICAgIGlmIChmdW5jLT5pc0JyYWNrZXRBY2Nlc3Nvck5v
ZGUoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2RlQ29u
c3RydWN0b3JzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVDb25zdHJ1Y3Rv
cnMuaAppbmRleCAzOGQ2MjY2YWY4MTZkOWI1ZGQ3NDgwOTNkNWVkMWQxMjgwMjY0ZDEzLi4xZGUz
MTY4N2QxZWJjOThmZDMxNzg2NTY2MzFlYTA2Mzg0M2UwOTJmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMuaApAQCAtMzcwLDkgKzM3MCwxMCBA
QAogICAgIHsKICAgICB9CiAKLSAgICBpbmxpbmUgQnl0ZWNvZGVJbnRyaW5zaWNOb2RlOjpCeXRl
Y29kZUludHJpbnNpY05vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRW1pdHRl
clR5cGUgZW1pdHRlciwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIEFyZ3VtZW50c05vZGUqIGFy
Z3MsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRp
dm90U3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdEVuZCkKKyAgICBpbmxpbmUgQnl0
ZWNvZGVJbnRyaW5zaWNOb2RlOjpCeXRlY29kZUludHJpbnNpY05vZGUoVHlwZSB0eXBlLCBjb25z
dCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFbWl0dGVyVHlwZSBlbWl0dGVyLCBjb25zdCBJ
ZGVudGlmaWVyJiBpZGVudCwgQXJndW1lbnRzTm9kZSogYXJncywgY29uc3QgSlNUZXh0UG9zaXRp
b24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNUZXh0
UG9zaXRpb24mIGRpdm90RW5kKQogICAgICAgICA6IEV4cHJlc3Npb25Ob2RlKGxvY2F0aW9uKQog
ICAgICAgICAsIFRocm93YWJsZUV4cHJlc3Npb25EYXRhKGRpdm90LCBkaXZvdFN0YXJ0LCBkaXZv
dEVuZCkKKyAgICAgICAgLCBtX3R5cGUodHlwZSkKICAgICAgICAgLCBtX2VtaXR0ZXIoZW1pdHRl
cikKICAgICAgICAgLCBtX2lkZW50KGlkZW50KQogICAgICAgICAsIG1fYXJncyhhcmdzKQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCmluZGV4IGViYWQ2OGQwYTRlMjE4NWE0YzYxOTk5
MjU0YzMxZDY2ZGNmZDUxMzkuLmI3ODIzYTA1NTJiZGU0ZmJhYzdiNmJiODU3MDVhODY3N2U1MTg0
NzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgKQEAgLTE3Myw2ICsxNzMsNyBA
QAogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNCb29sZWFuKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KICAgICAgICAgdmlydHVhbCBib29sIGlzU3ByZWFkRXhwcmVzc2lvbigpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc1N1cGVyTm9kZSgpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CisgICAgICAgIHZpcnR1YWwgYm9vbCBpc0J5dGVjb2RlSW50cmluc2lj
Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICAgICAgdmlydHVhbCB2b2lkIGVt
aXRCeXRlY29kZUluQ29uZGl0aW9uQ29udGV4dChCeXRlY29kZUdlbmVyYXRvciYsIExhYmVsKiwg
TGFiZWwqLCBGYWxsVGhyb3VnaE1vZGUpOwogCkBAIC04MDEsMTkgKzgwMiwzMCBAQAogCiAgICAg
Y2xhc3MgQnl0ZWNvZGVJbnRyaW5zaWNOb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlLCBwdWJs
aWMgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEgewogICAgIHB1YmxpYzoKKyAgICAgICAgZW51bSBj
bGFzcyBUeXBlIHsKKyAgICAgICAgICAgIENvbnN0YW50LAorICAgICAgICAgICAgRnVuY3Rpb24K
KyAgICAgICAgfTsKKwogICAgICAgICB0eXBlZGVmIFJlZ2lzdGVySUQqIChCeXRlY29kZUludHJp
bnNpY05vZGU6OiogRW1pdHRlclR5cGUpKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCop
OwogCi0gICAgICAgIEJ5dGVjb2RlSW50cmluc2ljTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24m
LCBFbWl0dGVyVHlwZSwgY29uc3QgSWRlbnRpZmllciYsIEFyZ3VtZW50c05vZGUqLCBjb25zdCBK
U1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBj
b25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQpOworICAgICAgICBCeXRlY29kZUludHJpbnNp
Y05vZGUoVHlwZSwgY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRW1pdHRlclR5cGUsIGNvbnN0IElk
ZW50aWZpZXImLCBBcmd1bWVudHNOb2RlKiwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBj
b25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRp
dm90RW5kKTsKKworICAgICAgICB2aXJ0dWFsIGJvb2wgaXNCeXRlY29kZUludHJpbnNpY05vZGUo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAKKyAgICAgICAgVHlwZSB0eXBlKCkg
Y29uc3QgeyByZXR1cm4gbV90eXBlOyB9CisgICAgICAgIEVtaXR0ZXJUeXBlIGVtaXR0ZXIoKSBj
b25zdCB7IHJldHVybiBtX2VtaXR0ZXI7IH0KICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRl
bnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnQ7IH0KIAogI2RlZmluZSBKU0NfREVDTEFS
RV9CWVRFQ09ERV9JTlRSSU5TSUNfRlVOQ1RJT05TKG5hbWUpIFJlZ2lzdGVySUQqIGVtaXRfaW50
cmluc2ljXyMjbmFtZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqKTsKLSAgICAgICAg
SlNDX0NPTU1PTl9CWVRFQ09ERV9JTlRSSU5TSUNTX0VBQ0hfTkFNRShKU0NfREVDTEFSRV9CWVRF
Q09ERV9JTlRSSU5TSUNfRlVOQ1RJT05TKQorICAgICAgICBKU0NfQ09NTU9OX0JZVEVDT0RFX0lO
VFJJTlNJQ19GVU5DVElPTlNfRUFDSF9OQU1FKEpTQ19ERUNMQVJFX0JZVEVDT0RFX0lOVFJJTlNJ
Q19GVU5DVElPTlMpCisgICAgICAgIEpTQ19DT01NT05fQllURUNPREVfSU5UUklOU0lDX0NPTlNU
QU5UU19FQUNIX05BTUUoSlNDX0RFQ0xBUkVfQllURUNPREVfSU5UUklOU0lDX0ZVTkNUSU9OUykK
ICN1bmRlZiBKU0NfREVDTEFSRV9CWVRFQ09ERV9JTlRSSU5TSUNfRlVOQ1RJT05TCiAKICAgICBw
cml2YXRlOgogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRCeXRlY29kZShCeXRlY29k
ZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgb3ZlcnJpZGU7CiAKKyAgICAgICAgVHlwZSBt
X3R5cGU7CiAgICAgICAgIEVtaXR0ZXJUeXBlIG1fZW1pdHRlcjsKICAgICAgICAgY29uc3QgSWRl
bnRpZmllciYgbV9pZGVudDsKICAgICAgICAgQXJndW1lbnRzTm9kZSogbV9hcmdzOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwCmluZGV4IDJmNzM1MWU0Nzk3NGQ2NTFlY2U3
N2FkOWZmODIxYzE2NTYyOGE2NzAuLjU5NjU5MTkzZGY3ODc3YjgxMmIxODVhNjI2ZjFhODY4ODgw
OTVjNDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAKQEAgLTMyMDIs
NyArMzIwMiw3IEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIGJvb2wgaXNVbmFyeU9wKEpTVG9rZW5U
eXBlIHRva2VuKQogICAgICAgICAgICAgSlNUZXh0UG9zaXRpb24gc3RhcnQgPSB0b2tlblN0YXJ0
UG9zaXRpb24oKTsKICAgICAgICAgICAgIEpTVG9rZW5Mb2NhdGlvbiBsb2NhdGlvbih0b2tlbkxv
Y2F0aW9uKCkpOwogICAgICAgICAgICAgY3VycmVudFNjb3BlKCktPnVzZVZhcmlhYmxlKGlkZW50
LCBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5ldmFsID09ICppZGVudCk7Ci0gICAgICAgICAgICBUcmVl
RXhwcmVzc2lvbiBub2RlID0gY29udGV4dC5jcmVhdGVSZXNvbHZlKGxvY2F0aW9uLCBpZGVudCwg
c3RhcnQpOworICAgICAgICAgICAgVHJlZUV4cHJlc3Npb24gbm9kZSA9IGNvbnRleHQuY3JlYXRl
UmVzb2x2ZShsb2NhdGlvbiwgKmlkZW50LCBzdGFydCwgbGFzdFRva2VuRW5kUG9zaXRpb24oKSk7
CiAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVQcm9wZXJ0eShpZGVudCwgbm9kZSwg
c3RhdGljX2Nhc3Q8UHJvcGVydHlOb2RlOjpUeXBlPihQcm9wZXJ0eU5vZGU6OkNvbnN0YW50IHwg
UHJvcGVydHlOb2RlOjpTaG9ydGhhbmQpLCBQcm9wZXJ0eU5vZGU6Oktub3duRGlyZWN0LCBjb21w
bGV0ZSk7CiAgICAgICAgIH0KIApAQCAtMzYyNSw3ICszNjI1LDcgQEAgQUxXQVlTX0lOTElORSBz
dGF0aWMgYm9vbCBpc1VuYXJ5T3AoSlNUb2tlblR5cGUgdG9rZW4pCiAgICAgICAgIG5leHQoKTsK
ICAgICAgICAgY3VycmVudFNjb3BlKCktPnVzZVZhcmlhYmxlKGlkZW50LCBtX3ZtLT5wcm9wZXJ0
eU5hbWVzLT5ldmFsID09ICppZGVudCk7CiAgICAgICAgIG1fcGFyc2VyU3RhdGUubGFzdElkZW50
aWZpZXIgPSBpZGVudDsKLSAgICAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlUmVzb2x2ZShsb2Nh
dGlvbiwgaWRlbnQsIHN0YXJ0KTsKKyAgICAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlUmVzb2x2
ZShsb2NhdGlvbiwgKmlkZW50LCBzdGFydCwgbGFzdFRva2VuRW5kUG9zaXRpb24oKSk7CiAgICAg
fQogICAgIGNhc2UgU1RSSU5HOiB7CiAgICAgICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0g
bV90b2tlbi5tX2RhdGEuaWRlbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cGFyc2VyL1N5bnRheENoZWNrZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU3lu
dGF4Q2hlY2tlci5oCmluZGV4IDkxNDgwYmI2NDU4NWFiOTU0ZTQ0Y2ZlNDZkMDBmOWZkZGE3N2U4
YzUuLmFhZjEyNTQwYzZlZTA4NGQyNTM0MWMyNTM5Y2E0YzMzMmUyNzk1YWUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU3ludGF4Q2hlY2tlci5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU3ludGF4Q2hlY2tlci5oCkBAIC0xNjAsNyArMTYwLDcg
QEAgY2xhc3MgU3ludGF4Q2hlY2tlciB7CiAgICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlVGhpc0V4
cHIoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgVGhpc1REWk1vZGUpIHsgcmV0dXJuIFRoaXNFeHBy
OyB9CiAgICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlU3VwZXJFeHByKGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYpIHsgcmV0dXJuIFN1cGVyRXhwcjsgfQogICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZU5l
d1RhcmdldEV4cHIoY29uc3QgSlNUb2tlbkxvY2F0aW9uJikgeyByZXR1cm4gTmV3VGFyZ2V0RXhw
cjsgfQotICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZVJlc29sdmUoY29uc3QgSlNUb2tlbkxvY2F0
aW9uJiwgY29uc3QgSWRlbnRpZmllciosIGludCkgeyByZXR1cm4gUmVzb2x2ZUV4cHI7IH0KKyAg
ICBFeHByZXNzaW9uVHlwZSBjcmVhdGVSZXNvbHZlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIGNv
bnN0IElkZW50aWZpZXImLCBpbnQsIGludCkgeyByZXR1cm4gUmVzb2x2ZUV4cHI7IH0KICAgICBF
eHByZXNzaW9uVHlwZSBjcmVhdGVPYmplY3RMaXRlcmFsKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYp
IHsgcmV0dXJuIE9iamVjdExpdGVyYWxFeHByOyB9CiAgICAgRXhwcmVzc2lvblR5cGUgY3JlYXRl
T2JqZWN0TGl0ZXJhbChjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBpbnQpIHsgcmV0dXJuIE9iamVj
dExpdGVyYWxFeHByOyB9CiAgICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlQXJyYXkoY29uc3QgSlNU
b2tlbkxvY2F0aW9uJiwgaW50KSB7IHJldHVybiBBcnJheUxpdGVyYWxFeHByOyB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25JZGVudGlmaWVycy5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25JZGVudGlmaWVycy5jcHAKaW5k
ZXggZDZkNGI3NWEzZDVkNDgwNzljNzVhMTIwMmU0ZDgwOTljMTY3NDkxMy4uNDc1ZGYyNTg2ODMx
MTAzMjAxMGRhZjk2ZjY0NWE3ZDc2NzZiNTQxYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmNwcApAQCAtNDUsNyArNDUsNiBAQAog
ICAgIEpTQ19DT01NT05fSURFTlRJRklFUlNfRUFDSF9QUk9QRVJUWV9OQU1FKElOSVRJQUxJWkVf
UFJPUEVSVFlfTkFNRSkKICAgICBKU0NfQ09NTU9OX1BSSVZBVEVfSURFTlRJRklFUlNfRUFDSF9Q
Uk9QRVJUWV9OQU1FKElOSVRJQUxJWkVfUFJJVkFURV9OQU1FKQogICAgIEpTQ19DT01NT05fUFJJ
VkFURV9JREVOVElGSUVSU19FQUNIX1dFTExfS05PV05fU1lNQk9MKElOSVRJQUxJWkVfU1lNQk9M
KQotICAgICwgbV9ieXRlY29kZUludHJpbnNpY1JlZ2lzdHJ5KCp0aGlzKQogewogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25JZGVudGlmaWVycy5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaAppbmRl
eCA4NDFhYTBlMTYwZGZjYTRmZWY1MTQxYzUyODA3OGQyYTc5NTQyZDAyLi42NmVjMWNjOWQ3Mzcz
YWNlNWYyMmI0ODQ2M2EzOTBjODhhZTM0NWEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Db21tb25JZGVudGlmaWVycy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmgKQEAgLTI3OCwxOSArMjc4LDEyIEBACiAg
ICAgbWFjcm8odG9TdHJpbmdUYWcpIFwKICAgICBtYWNybyh1bnNjb3BhYmxlcykKIAotI2RlZmlu
ZSBKU0NfQ09NTU9OX0JZVEVDT0RFX0lOVFJJTlNJQ1NfRUFDSF9OQU1FKG1hY3JvKSBcCi0gICAg
bWFjcm8oYXNzZXJ0KSBcCi0gICAgbWFjcm8ocHV0QnlWYWxEaXJlY3QpIFwKLSAgICBtYWNybyh0
b1N0cmluZykKLQogI2RlZmluZSBKU0NfQ09NTU9OX1BSSVZBVEVfSURFTlRJRklFUlNfRUFDSF9Q
Uk9QRVJUWV9OQU1FKG1hY3JvKSBcCi0gICAgSlNDX0NPTU1PTl9CWVRFQ09ERV9JTlRSSU5TSUNT
X0VBQ0hfTkFNRShtYWNybykgXAorICAgIEpTQ19DT01NT05fQllURUNPREVfSU5UUklOU0lDX0ZV
TkNUSU9OU19FQUNIX05BTUUobWFjcm8pIFwKKyAgICBKU0NfQ09NTU9OX0JZVEVDT0RFX0lOVFJJ
TlNJQ19DT05TVEFOVFNfRUFDSF9OQU1FKG1hY3JvKSBcCiAgICAgbWFjcm8oaXRlcmF0ZWRPYmpl
Y3QpIFwKICAgICBtYWNybyhhcnJheUl0ZXJhdG9yTmV4dEluZGV4KSBcCiAgICAgbWFjcm8oYXJy
YXlJdGVyYXRpb25LaW5kKSBcCi0gICAgbWFjcm8oYXJyYXlJdGVyYXRpb25LaW5kS2V5KSBcCi0g
ICAgbWFjcm8oYXJyYXlJdGVyYXRpb25LaW5kVmFsdWUpIFwKLSAgICBtYWNybyhhcnJheUl0ZXJh
dGlvbktpbmRLZXlWYWx1ZSkgXAogICAgIG1hY3JvKGNoYXJDb2RlQXQpIFwKICAgICBtYWNybyhp
dGVyYXRlZFN0cmluZykgXAogICAgIG1hY3JvKHN0cmluZ0l0ZXJhdG9yTmV4dEluZGV4KSBcCkBA
IC0zMTksMTQgKzMxMiwxMiBAQAogICAgIG1hY3JvKFR5cGVFcnJvcikgXAogICAgIG1hY3JvKHR5
cGVkQXJyYXlMZW5ndGgpIFwKICAgICBtYWNybyh0eXBlZEFycmF5U29ydCkgXAotICAgIG1hY3Jv
KHVuZGVmaW5lZCkgXAogICAgIG1hY3JvKEJ1aWx0aW5Mb2cpIFwKICAgICBtYWNybyhob21lT2Jq
ZWN0KSBcCiAgICAgbWFjcm8oZ2V0VGVtcGxhdGVPYmplY3QpIFwKICAgICBtYWNybyhlbnF1ZXVl
Sm9iKSBcCiAgICAgbWFjcm8oaGFuZGxlcikgXAogICAgIG1hY3JvKHByb21pc2VTdGF0ZSkgXAot
ICAgIG1hY3JvKHByb21pc2VQZW5kaW5nKSBcCiAgICAgbWFjcm8ocHJvbWlzZUZ1bGZpbGxSZWFj
dGlvbnMpIFwKICAgICBtYWNybyhwcm9taXNlUmVqZWN0UmVhY3Rpb25zKSBcCiAgICAgbWFjcm8o
cHJvbWlzZVJlc3VsdCkgXApAQCAtNDE4LDE0ICs0MDksOSBAQAogICAgICAgICBjb25zdCBJZGVu
dGlmaWVyKiBsb29rVXBQcml2YXRlTmFtZShjb25zdCBJZGVudGlmaWVyJikgY29uc3Q7CiAgICAg
ICAgIElkZW50aWZpZXIgbG9va1VwUHVibGljTmFtZShjb25zdCBJZGVudGlmaWVyJikgY29uc3Q7
CiAKLSAgICAgICAgY29uc3QgQnl0ZWNvZGVJbnRyaW5zaWNSZWdpc3RyeSYgYnl0ZWNvZGVJbnRy
aW5zaWNSZWdpc3RyeSgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZWNvZGVJbnRyaW5zaWNSZWdpc3Ry
eTsgfQotCiAgICAgICAgIC8vIENhbGxlcnMgb2YgdGhpcyBtZXRob2Qgc2hvdWxkIG1ha2Ugc3Vy
ZSB0aGF0IGlkZW50aWZpZXJzIGdpdmVuIHRvIHRoaXMgbWV0aG9kIAogICAgICAgICAvLyBzdXJ2
aXZlIHRoZSBsaWZldGltZSBvZiBDb21tb25JZGVudGlmaWVycyBhbmQgcmVsYXRlZCBWTS4KICAg
ICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBhcHBlbmRFeHRlcm5hbE5hbWUoY29uc3QgSWRl
bnRpZmllciYgcHVibGljTmFtZSwgY29uc3QgSWRlbnRpZmllciYgcHJpdmF0ZU5hbWUpOwotCi0g
ICAgcHJpdmF0ZToKLSAgICAgICAgQnl0ZWNvZGVJbnRyaW5zaWNSZWdpc3RyeSBtX2J5dGVjb2Rl
SW50cmluc2ljUmVnaXN0cnk7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JdGVyYXRvclByb3RvdHlwZS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JdGVyYXRvclByb3RvdHlwZS5jcHAKaW5k
ZXggM2U0ZWM5MzAzNzFmZThlZjRlMDBkMjFlMzA4NjcyMTJjYWE4MzVlOC4uYWE5NTA2OTNmN2Y5
NGIyNjBkNmMwYzQ1MjYzMDYxNmM5MTAyOWNmMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSXRlcmF0b3JQcm90b3R5cGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0l0ZXJhdG9yUHJvdG90eXBlLmNwcApAQCAtNDMsNyArNDMsNyBAQCB2
b2lkIEl0ZXJhdG9yUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QpCiAgICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwogICAgIHZt
LnByb3RvdHlwZU1hcC5hZGRQcm90b3R5cGUodGhpcyk7CiAKLSAgICBKU0Z1bmN0aW9uKiBpdGVy
YXRvclByb3RvdHlwZUZ1bmN0aW9uID0gSlNGdW5jdGlvbjo6Y3JlYXRlQnVpbHRpbkZ1bmN0aW9u
KHZtLCBpdGVyYXRvclByb3RvdHlwZVN5bWJvbEl0ZXJhdG9yQ29kZUdlbmVyYXRvcih2bSksIGds
b2JhbE9iamVjdCwgIltTeW1ib2wuaXRlcmF0b3JdIik7CisgICAgSlNGdW5jdGlvbiogaXRlcmF0
b3JQcm90b3R5cGVGdW5jdGlvbiA9IEpTRnVuY3Rpb246OmNyZWF0ZUJ1aWx0aW5GdW5jdGlvbih2
bSwgaXRlcmF0b3JQcm90b3R5cGVTeW1ib2xJdGVyYXRvckdldHRlckNvZGVHZW5lcmF0b3Iodm0p
LCBnbG9iYWxPYmplY3QsICJbU3ltYm9sLml0ZXJhdG9yXSIpOwogICAgIHB1dERpcmVjdFdpdGhv
dXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvclN5bWJvbCwgaXRlcmF0
b3JQcm90b3R5cGVGdW5jdGlvbiwgRG9udEVudW0pOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKaW5kZXggMzU0YTBlYzU3NGJhNmY2
MWNjZTRkZDA2MjNmYjZmNGI2MTU3YWE4Ny4uYmYxZTllNzM1MzlhN2RlODA2YWE2OTBhYjQ3ZDA2
MTk0ODIxMjhkYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
bG9iYWxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xv
YmFsT2JqZWN0LmNwcApAQCAtNTI4LDcgKzUyOCw2IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6Omlu
aXQoVk0mIHZtKQogICAgICAgICBHbG9iYWxQcm9wZXJ0eUluZm8odm0ucHJvcGVydHlOYW1lcy0+
TmFOLCBqc05hTigpLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSksCiAgICAgICAg
IEdsb2JhbFByb3BlcnR5SW5mbyh2bS5wcm9wZXJ0eU5hbWVzLT5JbmZpbml0eSwganNOdW1iZXIo
c3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0eSgpKSwgRG9udEVudW0gfCBEb250
RGVsZXRlIHwgUmVhZE9ubHkpLAogICAgICAgICBHbG9iYWxQcm9wZXJ0eUluZm8odm0ucHJvcGVy
dHlOYW1lcy0+dW5kZWZpbmVkS2V5d29yZCwganNVbmRlZmluZWQoKSwgRG9udEVudW0gfCBEb250
RGVsZXRlIHwgUmVhZE9ubHkpLAotICAgICAgICBHbG9iYWxQcm9wZXJ0eUluZm8odm0ucHJvcGVy
dHlOYW1lcy0+dW5kZWZpbmVkUHJpdmF0ZU5hbWUsIGpzVW5kZWZpbmVkKCksIERvbnRFbnVtIHwg
RG9udERlbGV0ZSB8IFJlYWRPbmx5KSwKICAgICAgICAgR2xvYmFsUHJvcGVydHlJbmZvKHZtLnBy
b3BlcnR5TmFtZXMtPk9iamVjdFByaXZhdGVOYW1lLCBvYmplY3RDb25zdHJ1Y3RvciwgRG9udEVu
dW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpLAogICAgICAgICBHbG9iYWxQcm9wZXJ0eUluZm8o
dm0ucHJvcGVydHlOYW1lcy0+b3duRW51bWVyYWJsZVByb3BlcnR5S2V5c1ByaXZhdGVOYW1lLCBK
U0Z1bmN0aW9uOjpjcmVhdGUodm0sIHRoaXMsIDAsIFN0cmluZygpLCBvd25FbnVtZXJhYmxlUHJv
cGVydHlLZXlzKSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpLAogICAgICAgICBH
bG9iYWxQcm9wZXJ0eUluZm8odm0ucHJvcGVydHlOYW1lcy0+Z2V0VGVtcGxhdGVPYmplY3RQcml2
YXRlTmFtZSwgcHJpdmF0ZUZ1bmNHZXRUZW1wbGF0ZU9iamVjdCwgRG9udEVudW0gfCBEb250RGVs
ZXRlIHwgUmVhZE9ubHkpLApAQCAtNTQ4LDEzICs1NDcsOCBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0
Ojppbml0KFZNJiB2bSkKICAgICAgICAgR2xvYmFsUHJvcGVydHlJbmZvKHZtLnByb3BlcnR5TmFt
ZXMtPmZsb29yUHJpdmF0ZU5hbWUsIHByaXZhdGVGdW5jRmxvb3IsIERvbnRFbnVtIHwgRG9udERl
bGV0ZSB8IFJlYWRPbmx5KSwKICAgICAgICAgR2xvYmFsUHJvcGVydHlJbmZvKHZtLnByb3BlcnR5
TmFtZXMtPmlzRmluaXRlUHJpdmF0ZU5hbWUsIHByaXZhdGVGdW5jSXNGaW5pdGUsIERvbnRFbnVt
IHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KSwKICAgICAgICAgR2xvYmFsUHJvcGVydHlJbmZvKHZt
LnByb3BlcnR5TmFtZXMtPmlzTmFOUHJpdmF0ZU5hbWUsIHByaXZhdGVGdW5jSXNOYU4sIERvbnRF
bnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KSwKLSAgICAgICAgR2xvYmFsUHJvcGVydHlJbmZv
KHZtLnByb3BlcnR5TmFtZXMtPmFycmF5SXRlcmF0aW9uS2luZEtleVByaXZhdGVOYW1lLCBqc051
bWJlcihBcnJheUl0ZXJhdGVLZXkpLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSks
Ci0gICAgICAgIEdsb2JhbFByb3BlcnR5SW5mbyh2bS5wcm9wZXJ0eU5hbWVzLT5hcnJheUl0ZXJh
dGlvbktpbmRWYWx1ZVByaXZhdGVOYW1lLCBqc051bWJlcihBcnJheUl0ZXJhdGVWYWx1ZSksIERv
bnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KSwKLSAgICAgICAgR2xvYmFsUHJvcGVydHlJ
bmZvKHZtLnByb3BlcnR5TmFtZXMtPmFycmF5SXRlcmF0aW9uS2luZEtleVZhbHVlUHJpdmF0ZU5h
bWUsIGpzTnVtYmVyKEFycmF5SXRlcmF0ZUtleVZhbHVlKSwgRG9udEVudW0gfCBEb250RGVsZXRl
IHwgUmVhZE9ubHkpLAotICAgICAgICBHbG9iYWxQcm9wZXJ0eUluZm8odm0ucHJvcGVydHlOYW1l
cy0+YnVpbHRpbk5hbWVzKCkuc3ltYm9sSXRlcmF0b3JQcml2YXRlTmFtZSgpLCBTeW1ib2w6OmNy
ZWF0ZSh2bSwgc3RhdGljX2Nhc3Q8U3ltYm9sSW1wbCY+KCp2bS5wcm9wZXJ0eU5hbWVzLT5pdGVy
YXRvclN5bWJvbC5pbXBsKCkpKSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpLAog
ICAgICAgICBHbG9iYWxQcm9wZXJ0eUluZm8odm0ucHJvcGVydHlOYW1lcy0+UHJvbWlzZVByaXZh
dGVOYW1lLCBwcm9taXNlQ29uc3RydWN0b3IsIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRP
bmx5KSwKICAgICAgICAgR2xvYmFsUHJvcGVydHlJbmZvKHZtLnByb3BlcnR5TmFtZXMtPkludGVy
bmFsUHJvbWlzZVByaXZhdGVOYW1lLCBpbnRlcm5hbFByb21pc2VDb25zdHJ1Y3RvciwgRG9udEVu
dW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpLAotICAgICAgICBHbG9iYWxQcm9wZXJ0eUluZm8o
dm0ucHJvcGVydHlOYW1lcy0+cHJvbWlzZVBlbmRpbmdQcml2YXRlTmFtZSwganNOdW1iZXIoc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KEpTUHJvbWlzZTo6U3RhdHVzOjpQZW5kaW5nKSksIERvbnRFbnVt
IHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KSwKIAogICAgICAgICBHbG9iYWxQcm9wZXJ0eUluZm8o
dm0ucHJvcGVydHlOYW1lcy0+aXNTZXRQcml2YXRlTmFtZSwgSlNGdW5jdGlvbjo6Y3JlYXRlKHZt
LCB0aGlzLCAxLCBTdHJpbmcoKSwgcHJpdmF0ZUZ1bmNJc1NldCksIERvbnRFbnVtIHwgRG9udERl
bGV0ZSB8IFJlYWRPbmx5KSwKICAgICAgICAgR2xvYmFsUHJvcGVydHlJbmZvKHZtLnByb3BlcnR5
TmFtZXMtPlNldEl0ZXJhdG9yUHJpdmF0ZU5hbWUsIEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwgdGhp
cywgMSwgU3RyaW5nKCksIHByaXZhdGVGdW5jU2V0SXRlcmF0b3IpLCBEb250RW51bSB8IERvbnRE
ZWxldGUgfCBSZWFkT25seSksCkBAIC01NjMsOCArNTU3LDYgQEAgdm9pZCBKU0dsb2JhbE9iamVj
dDo6aW5pdChWTSYgdm0pCiAgICAgICAgIEdsb2JhbFByb3BlcnR5SW5mbyh2bS5wcm9wZXJ0eU5h
bWVzLT5NYXBJdGVyYXRvclByaXZhdGVOYW1lLCBKU0Z1bmN0aW9uOjpjcmVhdGUodm0sIHRoaXMs
IDEsIFN0cmluZygpLCBwcml2YXRlRnVuY01hcEl0ZXJhdG9yKSwgRG9udEVudW0gfCBEb250RGVs
ZXRlIHwgUmVhZE9ubHkpLAogICAgICAgICBHbG9iYWxQcm9wZXJ0eUluZm8odm0ucHJvcGVydHlO
YW1lcy0+bWFwSXRlcmF0b3JOZXh0UHJpdmF0ZU5hbWUsIEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwg
dGhpcywgMCwgU3RyaW5nKCksIHByaXZhdGVGdW5jTWFwSXRlcmF0b3JOZXh0KSwgRG9udEVudW0g
fCBEb250RGVsZXRlIHwgUmVhZE9ubHkpLAogCi0gICAgICAgIEdsb2JhbFByb3BlcnR5SW5mbyh2
bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5wcm9taXNlRnVsZmlsbGVkUHJpdmF0ZU5h
bWUoKSwganNOdW1iZXIoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTUHJvbWlzZTo6U3RhdHVzOjpG
dWxmaWxsZWQpKSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpLAotICAgICAgICBH
bG9iYWxQcm9wZXJ0eUluZm8odm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkucHJvbWlz
ZVJlamVjdGVkUHJpdmF0ZU5hbWUoKSwganNOdW1iZXIoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpT
UHJvbWlzZTo6U3RhdHVzOjpSZWplY3RlZCkpLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFk
T25seSksCiAgICAgICAgIEdsb2JhbFByb3BlcnR5SW5mbyh2bS5wcm9wZXJ0eU5hbWVzLT5idWls
dGluTmFtZXMoKS50b0xlbmd0aFByaXZhdGVOYW1lKCksIHByaXZhdGVGdW5jVG9MZW5ndGgsIERv
bnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KSwKICAgICAgICAgR2xvYmFsUHJvcGVydHlJ
bmZvKHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLnRvSW50ZWdlclByaXZhdGVOYW1l
KCksIHByaXZhdGVGdW5jVG9JbnRlZ2VyLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25s
eSksCiAgICAgICAgIEdsb2JhbFByb3BlcnR5SW5mbyh2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGlu
TmFtZXMoKS5pc09iamVjdFByaXZhdGVOYW1lKCksIEpTRnVuY3Rpb246OmNyZWF0ZUJ1aWx0aW5G
dW5jdGlvbih2bSwgZ2xvYmFsT2JqZWN0SXNPYmplY3RDb2RlR2VuZXJhdG9yKHZtKSwgdGhpcyks
IERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNLmNwcAppbmRleCA2ZmQ2YWYyZmEyNWFlNGMzYWJkN2E2ZWNmMzgyOGNiNjM3NmIwMzQw
Li5lMjkwMjIzZjQwMmFmZGE3YzcwMWMwZWVkYjgzY2U1OTMzNTFiNDJmIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uY3BwCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiQXJnTGlz
dC5oIgogI2luY2x1ZGUgIkFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5oIgogI2luY2x1
ZGUgIkJ1aWx0aW5FeGVjdXRhYmxlcy5oIgorI2luY2x1ZGUgIkJ5dGVjb2RlSW50cmluc2ljUmVn
aXN0cnkuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJDb2RlQ2FjaGUuaCIK
ICNpbmNsdWRlICJDb21tb25JZGVudGlmaWVycy5oIgpAQCAtMzA2LDYgKzMwNyw4IEBAIHN0YXRp
YyBib29sIGVuYWJsZUFzc2VtYmxlcihFeGVjdXRhYmxlQWxsb2NhdG9yJiBleGVjdXRhYmxlQWxs
b2NhdG9yKQogICAgIC8vIHdvbid0IHVzZSB0aGlzLgogICAgIG1fdHlwZWRBcnJheUNvbnRyb2xs
ZXIgPSBhZG9wdFJlZihuZXcgU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIoKSk7CiAKKyAgICBt
X2J5dGVjb2RlSW50cmluc2ljUmVnaXN0cnkgPSBzdGQ6Om1ha2VfdW5pcXVlPEJ5dGVjb2RlSW50
cmluc2ljUmVnaXN0cnk+KCp0aGlzKTsKKwogICAgIGlmIChPcHRpb25zOjp1c2VUeXBlUHJvZmls
ZXIoKSkKICAgICAgICAgZW5hYmxlVHlwZVByb2ZpbGVyKCk7CiAgICAgaWYgKE9wdGlvbnM6OnVz
ZUNvbnRyb2xGbG93UHJvZmlsZXIoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCmluZGV4
IDk4MDI4NDg5OTA2M2RmMTY5NDA5ZmUzYWM0MTI0OWEzYmJkZDg3MzAuLjcxMTA1N2MwNDQyZDRh
NmE1MTk1OWM4MDQ3ZGZmNjk4MzAxZDQ2ODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1ZNLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0u
aApAQCAtNzcsNiArNzcsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEJ1aWx0aW5FeGVj
dXRhYmxlczsKK2NsYXNzIEJ5dGVjb2RlSW50cmluc2ljUmVnaXN0cnk7CiBjbGFzcyBDb2RlQmxv
Y2s7CiBjbGFzcyBDb2RlQ2FjaGU7CiBjbGFzcyBDb21tb25JZGVudGlmaWVyczsKQEAgLTYwMCw2
ICs2MDEsOCBAQCBjbGFzcyBWTSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxWTT4gewog
ICAgIHZvaWQgc2V0U2hvdWxkQnVpbGRQQ1RvQ29kZU9yaWdpbk1hcHBpbmcoKSB7IG1fc2hvdWxk
QnVpbGRQQ1RvQ29kZU9yaWdpbk1hcHBpbmcgPSB0cnVlOyB9CiAgICAgYm9vbCBzaG91bGRCdWls
ZGVyUENUb0NvZGVPcmlnaW5NYXBwaW5nKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRCdWlsZFBD
VG9Db2RlT3JpZ2luTWFwcGluZzsgfQogCisgICAgQnl0ZWNvZGVJbnRyaW5zaWNSZWdpc3RyeSYg
Ynl0ZWNvZGVJbnRyaW5zaWNSZWdpc3RyeSgpIHsgcmV0dXJuICptX2J5dGVjb2RlSW50cmluc2lj
UmVnaXN0cnk7IH0KKwogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0
cmFjdG9yOwogICAgIGZyaWVuZCBjbGFzcyBDbGVhckV4Y2VwdGlvblNjb3BlOwpAQCAtNjY4LDYg
KzY3MSw3IEBAIGNsYXNzIFZNIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFZNPiB7CiAj
aWYgRU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVSKQogICAgIFJlZlB0cjxTYW1wbGluZ1Byb2ZpbGVy
PiBtX3NhbXBsaW5nUHJvZmlsZXI7CiAjZW5kaWYKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Qnl0ZWNv
ZGVJbnRyaW5zaWNSZWdpc3RyeT4gbV9ieXRlY29kZUludHJpbnNpY1JlZ2lzdHJ5OwogfTsKIAog
I2lmIEVOQUJMRShHQ19WQUxJREFUSU9OKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9mZXRjaC9GZXRjaEhlYWRlcnMuanMgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNo
L0ZldGNoSGVhZGVycy5qcwppbmRleCAxNTBiMjUwYjVjZTJjNDRkYjIzMDM4MzdkYzA0OTg2YjM5
YWNhNjU5Li4yN2VhN2EwMTU4ZTZjOWZlYzE4NGIwNzkwNjllOTQ2YWNjNmU0OTVjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoSGVhZGVycy5qcworKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoSGVhZGVycy5qcwpAQCAtMjksNyArMjks
NyBAQCBmdW5jdGlvbiBpbml0aWFsaXplRmV0Y2hIZWFkZXJzKGhlYWRlcnNJbml0KQogewogICAg
ICJ1c2Ugc3RyaWN0IjsKIAotICAgIGlmIChoZWFkZXJzSW5pdCA9PT0gdW5kZWZpbmVkKQorICAg
IGlmIChoZWFkZXJzSW5pdCA9PT0gQHVuZGVmaW5lZCkKICAgICAgICAgcmV0dXJuIHRoaXM7CiAK
ICAgICBpZiAoIUBpc09iamVjdChoZWFkZXJzSW5pdCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3N0cmVhbXMvUmVhZGFibGVTdHJlYW0uanMgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3N0cmVhbXMvUmVhZGFibGVTdHJlYW0uanMKaW5kZXggOGI1NjdjZjE1NDIzY2QxNWU3
MTk2ZjFkZGExOTA4NGJjNTBkM2UwNS4uM2U0MjU2YzY0ZjQ2YWFmOTU3MzQ3NWE1ZTNmOTljNGIy
NDc2YTk1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zdHJlYW1zL1JlYWRh
YmxlU3RyZWFtLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9SZWFkYWJs
ZVN0cmVhbS5qcwpAQCAtMzAsMTUgKzMwLDE1IEBAIGZ1bmN0aW9uIGluaXRpYWxpemVSZWFkYWJs
ZVN0cmVhbSh1bmRlcmx5aW5nU291cmNlLCBzdHJhdGVneSkKIHsKICAgICAidXNlIHN0cmljdCI7
CiAKLSAgICAgaWYgKHR5cGVvZiB1bmRlcmx5aW5nU291cmNlID09PSAidW5kZWZpbmVkIikKKyAg
ICAgaWYgKHVuZGVybHlpbmdTb3VyY2UgPT09IEB1bmRlZmluZWQpCiAgICAgICAgICB1bmRlcmx5
aW5nU291cmNlID0geyB9OwotICAgICBpZiAodHlwZW9mIHN0cmF0ZWd5ID09PSAidW5kZWZpbmVk
IikKKyAgICAgaWYgKHN0cmF0ZWd5ID09PSBAdW5kZWZpbmVkKQogICAgICAgICAgc3RyYXRlZ3kg
PSB7IGhpZ2hXYXRlck1hcms6IDEsIHNpemU6IGZ1bmN0aW9uKCkgeyByZXR1cm4gMTsgfSB9Owog
CiAgICAgaWYgKCFAaXNPYmplY3QodW5kZXJseWluZ1NvdXJjZSkpCiAgICAgICAgIHRocm93IG5l
dyBAVHlwZUVycm9yKCJSZWFkYWJsZVN0cmVhbSBjb25zdHJ1Y3RvciB0YWtlcyBhbiBvYmplY3Qg
YXMgZmlyc3QgYXJndW1lbnQiKTsKIAotICAgIGlmIChzdHJhdGVneSAhPT0gdW5kZWZpbmVkICYm
ICFAaXNPYmplY3Qoc3RyYXRlZ3kpKQorICAgIGlmIChzdHJhdGVneSAhPT0gQHVuZGVmaW5lZCAm
JiAhQGlzT2JqZWN0KHN0cmF0ZWd5KSkKICAgICAgICAgdGhyb3cgbmV3IEBUeXBlRXJyb3IoIlJl
YWRhYmxlU3RyZWFtIGNvbnN0cnVjdG9yIHRha2VzIGFuIG9iamVjdCBhcyBzZWNvbmQgYXJndW1l
bnQsIGlmIGFueSIpOwogCiAgICAgdGhpcy5AdW5kZXJseWluZ1NvdXJjZSA9IHVuZGVybHlpbmdT
b3VyY2U7CkBAIC00OSw4ICs0OSw4IEBAIGZ1bmN0aW9uIGluaXRpYWxpemVSZWFkYWJsZVN0cmVh
bSh1bmRlcmx5aW5nU291cmNlLCBzdHJhdGVneSkKICAgICB0aGlzLkBjbG9zZVJlcXVlc3RlZCA9
IGZhbHNlOwogICAgIHRoaXMuQHB1bGxBZ2FpbiA9IGZhbHNlOwogICAgIHRoaXMuQHB1bGxpbmcg
PSBmYWxzZTsKLSAgICB0aGlzLkByZWFkZXIgPSB1bmRlZmluZWQ7Ci0gICAgdGhpcy5Ac3RvcmVk
RXJyb3IgPSB1bmRlZmluZWQ7CisgICAgdGhpcy5AcmVhZGVyID0gQHVuZGVmaW5lZDsKKyAgICB0
aGlzLkBzdG9yZWRFcnJvciA9IEB1bmRlZmluZWQ7CiAgICAgdGhpcy5AZGlzdHVyYmVkID0gZmFs
c2U7CiAgICAgdGhpcy5AY29udHJvbGxlciA9IG5ldyBAUmVhZGFibGVTdHJlYW1Db250cm9sbGVy
KHRoaXMpOwogICAgIHRoaXMuQHN0cmF0ZWd5ID0gQHZhbGlkYXRlQW5kTm9ybWFsaXplUXVldWlu
Z1N0cmF0ZWd5KHN0cmF0ZWd5LnNpemUsIHN0cmF0ZWd5LmhpZ2hXYXRlck1hcmspOwpAQCAtMTM3
LDExICsxMzcsMTEgQEAgZnVuY3Rpb24gY2FuY2VsU291cmNlKHJlYXNvbikgewogICAgICAgICBp
ZiAoIXByZXZlbnRDYW5jZWwpIHsKICAgICAgICAgICAgIHJlYWRlci5jYW5jZWwocmVhc29uKTsK
ICAgICAgICAgICAgIHJlYWRlci5yZWxlYXNlTG9jaygpOwotICAgICAgICAgICAgcHJvbWlzZUNh
cGFiaWxpdHkuQHJlamVjdC5AY2FsbCh1bmRlZmluZWQsIHJlYXNvbik7CisgICAgICAgICAgICBw
cm9taXNlQ2FwYWJpbGl0eS5AcmVqZWN0LkBjYWxsKEB1bmRlZmluZWQsIHJlYXNvbik7CiAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBAUHJvbWlzZS5wcm90b3R5cGUuQHRoZW4uQGNhbGwo
bGFzdFJlYWQsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgIHJlYWRlci5yZWxlYXNlTG9j
aygpOwotICAgICAgICAgICAgICAgIHByb21pc2VDYXBhYmlsaXR5LkByZWplY3QuQGNhbGwodW5k
ZWZpbmVkLCByZWFzb24pOworICAgICAgICAgICAgICAgIHByb21pc2VDYXBhYmlsaXR5LkByZWpl
Y3QuQGNhbGwoQHVuZGVmaW5lZCwgcmVhc29uKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICB9
CiAgICAgfQpAQCAtMTUzLDcgKzE1Myw3IEBAIGZ1bmN0aW9uIGNsb3NlRGVzdGluYXRpb24oKSB7
CiAgICAgICAgIGlmICghcHJldmVudENsb3NlICYmIChkZXN0aW5hdGlvblN0YXRlID09PSAid2Fp
dGluZyIgfHwgZGVzdGluYXRpb25TdGF0ZSA9PT0gIndyaXRhYmxlIikpIHsKICAgICAgICAgICAg
IGNsb3NlZFB1cnBvc2VmdWxseSA9IHRydWU7CiAgICAgICAgICAgICBAUHJvbWlzZS5wcm90b3R5
cGUuQHRoZW4uQGNhbGwoZGVzdGluYXRpb24uY2xvc2UoKSwgcHJvbWlzZUNhcGFiaWxpdHkuQHJl
c29sdmUsIHByb21pc2VDYXBhYmlsaXR5LkByZWplY3QpOwotICAgICAgICB9IGVsc2UgaWYgKGxh
c3RXcml0ZSAhPT0gdW5kZWZpbmVkKQorICAgICAgICB9IGVsc2UgaWYgKGxhc3RXcml0ZSAhPT0g
QHVuZGVmaW5lZCkKICAgICAgICAgICAgIEBQcm9taXNlLnByb3RvdHlwZS5AdGhlbi5AY2FsbChs
YXN0V3JpdGUsIHByb21pc2VDYXBhYmlsaXR5LkByZXNvbHZlLCBwcm9taXNlQ2FwYWJpbGl0eS5A
cmVqZWN0KTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcHJvbWlzZUNhcGFiaWxpdHkuQHJl
c29sdmUuQGNhbGwoKTsKQEAgLTE2NSwxNCArMTY1LDE0IEBAIGZ1bmN0aW9uIGFib3J0RGVzdGlu
YXRpb24ocmVhc29uKSB7CiAKICAgICAgICAgaWYgKCFwcmV2ZW50QWJvcnQpCiAgICAgICAgICAg
ICBkZXN0aW5hdGlvbi5hYm9ydChyZWFzb24pOwotICAgICAgICBwcm9taXNlQ2FwYWJpbGl0eS5A
cmVqZWN0LkBjYWxsKHVuZGVmaW5lZCwgcmVhc29uKTsKKyAgICAgICAgcHJvbWlzZUNhcGFiaWxp
dHkuQHJlamVjdC5AY2FsbChAdW5kZWZpbmVkLCByZWFzb24pOwogICAgIH0KIAogICAgIHByb21p
c2VDYXBhYmlsaXR5ID0gQG5ld1Byb21pc2VDYXBhYmlsaXR5KEBQcm9taXNlKTsKIAogICAgIHJl
YWRlciA9IHNvdXJjZS5nZXRSZWFkZXIoKTsKIAotICAgIEBQcm9taXNlLnByb3RvdHlwZS5AdGhl
bi5AY2FsbChyZWFkZXIuY2xvc2VkLCB1bmRlZmluZWQsIGFib3J0RGVzdGluYXRpb24pOworICAg
IEBQcm9taXNlLnByb3RvdHlwZS5AdGhlbi5AY2FsbChyZWFkZXIuY2xvc2VkLCBAdW5kZWZpbmVk
LCBhYm9ydERlc3RpbmF0aW9uKTsKICAgICBAUHJvbWlzZS5wcm90b3R5cGUuQHRoZW4uQGNhbGwo
ZGVzdGluYXRpb24uY2xvc2VkLAogICAgICAgICBmdW5jdGlvbigpIHsKICAgICAgICAgICAgIGlm
ICghY2xvc2VkUHVycG9zZWZ1bGx5KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9zdHJlYW1zL1JlYWRhYmxlU3RyZWFtSW50ZXJuYWxzLmpzIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9zdHJlYW1zL1JlYWRhYmxlU3RyZWFtSW50ZXJuYWxzLmpzCmluZGV4IGU2ODY3NmRhYzc5
ZTNiNDAyOWMxNTE1NDUwYTIxY2NlMWZmNGU5ZGUuLjgwNTk0MzkyYTkzNDQxMzBhMDM4NzdhNDNi
OTVlMWJiMmVlZjY2NTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3RyZWFt
cy9SZWFkYWJsZVN0cmVhbUludGVybmFscy5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3N0cmVhbXMvUmVhZGFibGVTdHJlYW1JbnRlcm5hbHMuanMKQEAgLTU5LDcgKzU5LDcgQEAgZnVu
Y3Rpb24gcHJpdmF0ZUluaXRpYWxpemVSZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXIoc3RyZWFtKQog
CiAgICAgaWYgKCFAaXNSZWFkYWJsZVN0cmVhbShzdHJlYW0pKQogICAgICAgICB0aHJvdyBuZXcg
QFR5cGVFcnJvcigiUmVhZGFibGVTdHJlYW1Db250cm9sbGVyIG5lZWRzIGEgUmVhZGFibGVTdHJl
YW0iKTsKLSAgICBpZiAodHlwZW9mIHN0cmVhbS5AY29udHJvbGxlciAhPT0gInVuZGVmaW5lZCIp
CisgICAgaWYgKHN0cmVhbS5AY29udHJvbGxlciAhPT0gQHVuZGVmaW5lZCkKICAgICAgICAgdGhy
b3cgbmV3IEBUeXBlRXJyb3IoIlJlYWRhYmxlU3RyZWFtIGFscmVhZHkgaGFzIGEgY29udHJvbGxl
ciIpOwogICAgIHRoaXMuQGNvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbSA9IHN0cmVhbTsKIApAQCAt
NzksOCArNzksOCBAQCBmdW5jdGlvbiB0ZWVSZWFkYWJsZVN0cmVhbShzdHJlYW0sIHNob3VsZENs
b25lKQogICAgICAgICBjbG9zZWRPckVycm9yZWQ6IGZhbHNlLAogICAgICAgICBjYW5jZWxlZDE6
IGZhbHNlLAogICAgICAgICBjYW5jZWxlZDI6IGZhbHNlLAotICAgICAgICByZWFzb24xOiB1bmRl
ZmluZWQsCi0gICAgICAgIHJlYXNvbjogdW5kZWZpbmVkLAorICAgICAgICByZWFzb24xOiBAdW5k
ZWZpbmVkLAorICAgICAgICByZWFzb246IEB1bmRlZmluZWQsCiAgICAgfTsKIAogICAgIHRlZVN0
YXRlLmNhbmNlbFByb21pc2VDYXBhYmlsaXR5ID0gQG5ld1Byb21pc2VDYXBhYmlsaXR5KEBJbnRl
cm5hbFByb21pc2UpOwpAQCAtOTYsNyArOTYsNyBAQCBmdW5jdGlvbiB0ZWVSZWFkYWJsZVN0cmVh
bShzdHJlYW0sIHNob3VsZENsb25lKQogICAgICAgICAiY2FuY2VsIjogQHRlZVJlYWRhYmxlU3Ry
ZWFtQnJhbmNoMkNhbmNlbEZ1bmN0aW9uKHRlZVN0YXRlLCBzdHJlYW0pCiAgICAgfSk7CiAKLSAg
ICByZWFkZXIuQGNsb3NlZFByb21pc2VDYXBhYmlsaXR5LkBwcm9taXNlLkB0aGVuKHVuZGVmaW5l
ZCwgZnVuY3Rpb24oZSkgeworICAgIHJlYWRlci5AY2xvc2VkUHJvbWlzZUNhcGFiaWxpdHkuQHBy
b21pc2UuQHRoZW4oQHVuZGVmaW5lZCwgZnVuY3Rpb24oZSkgewogICAgICAgICBpZiAodGVlU3Rh
dGUuY2xvc2VkT3JFcnJvcmVkKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBAZXJyb3JS
ZWFkYWJsZVN0cmVhbShicmFuY2gxLCBlKTsKQEAgLTE4Myw3ICsxODMsNyBAQCBmdW5jdGlvbiBp
c1JlYWRhYmxlU3RyZWFtUmVhZGVyKHJlYWRlcikKIAogICAgIC8vIFRvIHJlc2V0IEBvd25lclJl
YWRhYmxlU3RyZWFtIGl0IG11c3QgYmUgc2V0IHRvIG51bGwgaW5zdGVhZCBvZiB1bmRlZmluZWQg
YmVjYXVzZSB0aGVyZSBpcyBubyB3YXkgdG8gZGlzdGluZ3Vpc2gKICAgICAvLyBiZXR3ZWVuIGEg
bm9uLWV4aXN0ZW50IHNsb3QgYW5kIGFuIHNsb3Qgc2V0IHRvIHVuZGVmaW5lZC4KLSAgICByZXR1
cm4gQGlzT2JqZWN0KHJlYWRlcikgJiYgdHlwZW9mIHJlYWRlci5Ab3duZXJSZWFkYWJsZVN0cmVh
bSAhPT0gInVuZGVmaW5lZCI7CisgICAgcmV0dXJuIEBpc09iamVjdChyZWFkZXIpICYmIHJlYWRl
ci5Ab3duZXJSZWFkYWJsZVN0cmVhbSAhPT0gQHVuZGVmaW5lZDsKIH0KIAogZnVuY3Rpb24gaXNS
ZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXIoY29udHJvbGxlcikKQEAgLTIwOCwxMCArMjA4LDEwIEBA
IGZ1bmN0aW9uIGVycm9yUmVhZGFibGVTdHJlYW0oc3RyZWFtLCBlcnJvcikKIAogICAgIGNvbnN0
IHJlcXVlc3RzID0gcmVhZGVyLkByZWFkUmVxdWVzdHM7CiAgICAgZm9yIChsZXQgaW5kZXggPSAw
LCBsZW5ndGggPSByZXF1ZXN0cy5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyArK2luZGV4KQotICAg
ICAgICByZXF1ZXN0c1tpbmRleF0uQHJlamVjdC5AY2FsbCh1bmRlZmluZWQsIGVycm9yKTsKKyAg
ICAgICAgcmVxdWVzdHNbaW5kZXhdLkByZWplY3QuQGNhbGwoQHVuZGVmaW5lZCwgZXJyb3IpOwog
ICAgIHJlYWRlci5AcmVhZFJlcXVlc3RzID0gW107CiAKLSAgICByZWFkZXIuQGNsb3NlZFByb21p
c2VDYXBhYmlsaXR5LkByZWplY3QuQGNhbGwodW5kZWZpbmVkLCBlcnJvcik7CisgICAgcmVhZGVy
LkBjbG9zZWRQcm9taXNlQ2FwYWJpbGl0eS5AcmVqZWN0LkBjYWxsKEB1bmRlZmluZWQsIGVycm9y
KTsKIH0KIAogZnVuY3Rpb24gcmVxdWVzdFJlYWRhYmxlU3RyZWFtUHVsbChzdHJlYW0pCkBAIC0y
ODcsNyArMjg3LDcgQEAgZnVuY3Rpb24gZmluaXNoQ2xvc2luZ1JlYWRhYmxlU3RyZWFtKHN0cmVh
bSkKIAogICAgIGNvbnN0IHJlcXVlc3RzID0gcmVhZGVyLkByZWFkUmVxdWVzdHM7CiAgICAgZm9y
IChsZXQgaW5kZXggPSAwLCBsZW5ndGggPSByZXF1ZXN0cy5sZW5ndGg7IGluZGV4IDwgbGVuZ3Ro
OyArK2luZGV4KQotICAgICAgICByZXF1ZXN0c1tpbmRleF0uQHJlc29sdmUuQGNhbGwodW5kZWZp
bmVkLCB7dmFsdWU6dW5kZWZpbmVkLCBkb25lOiB0cnVlfSk7CisgICAgICAgIHJlcXVlc3RzW2lu
ZGV4XS5AcmVzb2x2ZS5AY2FsbChAdW5kZWZpbmVkLCB7dmFsdWU6QHVuZGVmaW5lZCwgZG9uZTog
dHJ1ZX0pOwogICAgIHJlYWRlci5AcmVhZFJlcXVlc3RzID0gW107CiAgICAgcmVhZGVyLkBjbG9z
ZWRQcm9taXNlQ2FwYWJpbGl0eS5AcmVzb2x2ZS5AY2FsbCgpOwogfQpAQCAtMzE0LDcgKzMxNCw3
IEBAIGZ1bmN0aW9uIGVucXVldWVJblJlYWRhYmxlU3RyZWFtKHN0cmVhbSwgY2h1bmspCiAgICAg
aWYgKHN0cmVhbS5Ac3RhdGUgPT09IEBzdHJlYW1DbG9zZWQpCiAgICAgICAgIHJldHVybjsKICAg
ICBpZiAoQGlzUmVhZGFibGVTdHJlYW1Mb2NrZWQoc3RyZWFtKSAmJiBzdHJlYW0uQHJlYWRlci5A
cmVhZFJlcXVlc3RzLmxlbmd0aCkgewotICAgICAgICBzdHJlYW0uQHJlYWRlci5AcmVhZFJlcXVl
c3RzLkBzaGlmdCgpLkByZXNvbHZlLkBjYWxsKHVuZGVmaW5lZCwge3ZhbHVlOiBjaHVuaywgZG9u
ZTogZmFsc2V9KTsKKyAgICAgICAgc3RyZWFtLkByZWFkZXIuQHJlYWRSZXF1ZXN0cy5Ac2hpZnQo
KS5AcmVzb2x2ZS5AY2FsbChAdW5kZWZpbmVkLCB7dmFsdWU6IGNodW5rLCBkb25lOiBmYWxzZX0p
OwogICAgICAgICBAcmVxdWVzdFJlYWRhYmxlU3RyZWFtUHVsbChzdHJlYW0pOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQpAQCAtMzQzLDcgKzM0Myw3IEBAIGZ1bmN0aW9uIHJlYWRGcm9tUmVhZGFi
bGVTdHJlYW1SZWFkZXIocmVhZGVyKQogICAgIEBhc3NlcnQoISFzdHJlYW0pOwogICAgIHN0cmVh
bS5AZGlzdHVyYmVkID0gdHJ1ZTsKICAgICBpZiAoc3RyZWFtLkBzdGF0ZSA9PT0gQHN0cmVhbUNs
b3NlZCkKLSAgICAgICAgcmV0dXJuIEBQcm9taXNlLkByZXNvbHZlKHt2YWx1ZTogdW5kZWZpbmVk
LCBkb25lOiB0cnVlfSk7CisgICAgICAgIHJldHVybiBAUHJvbWlzZS5AcmVzb2x2ZSh7dmFsdWU6
IEB1bmRlZmluZWQsIGRvbmU6IHRydWV9KTsKICAgICBpZiAoc3RyZWFtLkBzdGF0ZSA9PT0gQHN0
cmVhbUVycm9yZWQpCiAgICAgICAgIHJldHVybiBAUHJvbWlzZS5AcmVqZWN0KHN0cmVhbS5Ac3Rv
cmVkRXJyb3IpOwogICAgIEBhc3NlcnQoc3RyZWFtLkBzdGF0ZSA9PT0gQHN0cmVhbVJlYWRhYmxl
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9SZWFkYWJsZVN0
cmVhbVJlYWRlci5qcyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9SZWFkYWJsZVN0
cmVhbVJlYWRlci5qcwppbmRleCA1ODQ2ZmZiODI2YzA2NzQyMDQxNzU5OTk0OTM0YzdhMTQxMTUz
YTllLi5jMjY0N2Q1ZWI2ZDFmZmE3ZjBmMzIxZTlmNDhjN2I0MjFiZDc3ZTllIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3N0cmVhbXMvUmVhZGFibGVTdHJlYW1SZWFkZXIuanMK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zdHJlYW1zL1JlYWRhYmxlU3RyZWFtUmVhZGVy
LmpzCkBAIC02NSwxMSArNjUsMTEgQEAgZnVuY3Rpb24gcmVsZWFzZUxvY2soKQogICAgICAgICB0
aHJvdyBuZXcgQFR5cGVFcnJvcigiVGhlcmUgYXJlIHN0aWxsIHBlbmRpbmcgcmVhZCByZXF1ZXN0
cywgY2Fubm90IHJlbGVhc2UgdGhlIGxvY2siKTsKIAogICAgIGlmIChzdHJlYW0uQHN0YXRlID09
PSBAc3RyZWFtUmVhZGFibGUpCi0gICAgICAgIHRoaXMuQGNsb3NlZFByb21pc2VDYXBhYmlsaXR5
LkByZWplY3QuQGNhbGwodW5kZWZpbmVkLCBuZXcgQFR5cGVFcnJvcigicmVsZWFzaW5nIGxvY2sg
b2YgcmVhZGVyIHdob3NlIHN0cmVhbSBpcyBzdGlsbCBpbiByZWFkYWJsZSBzdGF0ZSIpKTsKKyAg
ICAgICAgdGhpcy5AY2xvc2VkUHJvbWlzZUNhcGFiaWxpdHkuQHJlamVjdC5AY2FsbChAdW5kZWZp
bmVkLCBuZXcgQFR5cGVFcnJvcigicmVsZWFzaW5nIGxvY2sgb2YgcmVhZGVyIHdob3NlIHN0cmVh
bSBpcyBzdGlsbCBpbiByZWFkYWJsZSBzdGF0ZSIpKTsKICAgICBlbHNlCiAgICAgICAgIHRoaXMu
QGNsb3NlZFByb21pc2VDYXBhYmlsaXR5ID0geyBAcHJvbWlzZTogQFByb21pc2UuQHJlamVjdChu
ZXcgQFR5cGVFcnJvcigicmVhZGVyIHJlbGVhc2VkIGxvY2siKSkgfTsKIAotICAgIHN0cmVhbS5A
cmVhZGVyID0gdW5kZWZpbmVkOworICAgIHN0cmVhbS5AcmVhZGVyID0gQHVuZGVmaW5lZDsKICAg
ICB0aGlzLkBvd25lclJlYWRhYmxlU3RyZWFtID0gbnVsbDsKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9zdHJlYW1zL1N0cmVhbUludGVybmFscy5qcyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9TdHJlYW1JbnRlcm5hbHMuanMKaW5kZXggMzVmYWRlOWQz
ZDExOWRiNWU2ZGU3YTMzM2I3OWY3NmIxZTRkOTNhMi4uN2Y0YzBjYTk3NjA4MGY3OTYwNTNlN2Iy
YjUxNjQ2NzRlNWZhMWJlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zdHJl
YW1zL1N0cmVhbUludGVybmFscy5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3N0cmVh
bXMvU3RyZWFtSW50ZXJuYWxzLmpzCkBAIC0zMCw3ICszMCw3IEBACiBmdW5jdGlvbiBzaGllbGRp
bmdQcm9taXNlUmVzb2x2ZShyZXN1bHQpCiB7CiAgICAgY29uc3QgcHJvbWlzZSA9IEBQcm9taXNl
LkByZXNvbHZlKHJlc3VsdCk7Ci0gICAgaWYgKHByb21pc2UuQHRoZW4gPT09IHVuZGVmaW5lZCkK
KyAgICBpZiAocHJvbWlzZS5AdGhlbiA9PT0gQHVuZGVmaW5lZCkKICAgICAgICAgcHJvbWlzZS5A
dGhlbiA9IEBQcm9taXNlLnByb3RvdHlwZS5AdGhlbjsKICAgICByZXR1cm4gcHJvbWlzZTsKIH0K
QEAgLTQwLDcgKzQwLDcgQEAgZnVuY3Rpb24gcHJvbWlzZUludm9rZU9yTm9vcE5vQ2F0Y2gob2Jq
ZWN0LCBrZXksIGFyZ3MpCiAgICAgInVzZSBzdHJpY3QiOwogCiAgICAgY29uc3QgbWV0aG9kID0g
b2JqZWN0W2tleV07Ci0gICAgaWYgKG1ldGhvZCA9PT0gdW5kZWZpbmVkKQorICAgIGlmIChtZXRo
b2QgPT09IEB1bmRlZmluZWQpCiAgICAgICAgIHJldHVybiBAUHJvbWlzZS5AcmVzb2x2ZSgpOwog
ICAgIHJldHVybiBAc2hpZWxkaW5nUHJvbWlzZVJlc29sdmUobWV0aG9kLkBhcHBseShvYmplY3Qs
IGFyZ3MpKTsKIH0KQEAgLTY0LDcgKzY0LDcgQEAgZnVuY3Rpb24gcHJvbWlzZUludm9rZU9yRmFs
bGJhY2tPck5vb3Aob2JqZWN0LCBrZXkxLCBhcmdzMSwga2V5MiwgYXJnczIpCiAKICAgICB0cnkg
ewogICAgICAgICBjb25zdCBtZXRob2QgPSBvYmplY3Rba2V5MV07Ci0gICAgICAgIGlmIChtZXRo
b2QgPT09IHVuZGVmaW5lZCkKKyAgICAgICAgaWYgKG1ldGhvZCA9PT0gQHVuZGVmaW5lZCkKICAg
ICAgICAgICAgIHJldHVybiBAcHJvbWlzZUludm9rZU9yTm9vcE5vQ2F0Y2gob2JqZWN0LCBrZXky
LCBhcmdzMik7CiAgICAgICAgIHJldHVybiBAc2hpZWxkaW5nUHJvbWlzZVJlc29sdmUobWV0aG9k
LkBhcHBseShvYmplY3QsIGFyZ3MxKSk7CiAgICAgfQpAQCAtNzcsNyArNzcsNyBAQCBmdW5jdGlv
biB2YWxpZGF0ZUFuZE5vcm1hbGl6ZVF1ZXVpbmdTdHJhdGVneShzaXplLCBoaWdoV2F0ZXJNYXJr
KQogewogICAgICJ1c2Ugc3RyaWN0IjsKIAotICAgIGlmIChzaXplICE9PSB1bmRlZmluZWQgJiYg
dHlwZW9mIHNpemUgIT09ICJmdW5jdGlvbiIpCisgICAgaWYgKHNpemUgIT09IEB1bmRlZmluZWQg
JiYgdHlwZW9mIHNpemUgIT09ICJmdW5jdGlvbiIpCiAgICAgICAgIHRocm93IG5ldyBAVHlwZUVy
cm9yKCJzaXplIHBhcmFtZXRlciBtdXN0IGJlIGEgZnVuY3Rpb24iKTsKIAogICAgIGNvbnN0IG5v
cm1hbGl6ZWRTdHJhdGVneSA9IHsgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvc3RyZWFtcy9Xcml0YWJsZVN0cmVhbS5qcyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3Ry
ZWFtcy9Xcml0YWJsZVN0cmVhbS5qcwppbmRleCBhMDg2OTRjODgzZDgyNDM0YWNkNjFhMWNiZjVi
MzNlMzVhZmE1YTJkLi41MWNjMDM3NmZhZDgwZjA3ODNlMTZjODRmN2QzYmE4MzZlYmI2OGI4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3N0cmVhbXMvV3JpdGFibGVTdHJlYW0u
anMKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zdHJlYW1zL1dyaXRhYmxlU3RyZWFtLmpz
CkBAIC0zMCw5ICszMCw5IEBAIGZ1bmN0aW9uIGluaXRpYWxpemVXcml0YWJsZVN0cmVhbSh1bmRl
cmx5aW5nU2luaywgc3RyYXRlZ3kpCiB7CiAgICAgInVzZSBzdHJpY3QiOwogCi0gICAgaWYgKHR5
cGVvZiB1bmRlcmx5aW5nU2luayA9PT0gInVuZGVmaW5lZCIpCisgICAgaWYgKHVuZGVybHlpbmdT
aW5rID09PSBAdW5kZWZpbmVkKQogICAgICAgICB1bmRlcmx5aW5nU2luayA9IHsgfTsKLSAgICBp
ZiAodHlwZW9mIHN0cmF0ZWd5ID09PSAidW5kZWZpbmVkIikKKyAgICBpZiAoc3RyYXRlZ3kgPT09
IEB1bmRlZmluZWQpCiAgICAgICAgIHN0cmF0ZWd5ID0geyBoaWdoV2F0ZXJNYXJrOiAwLCBzaXpl
OiBmdW5jdGlvbigpIHsgcmV0dXJuIDE7IH0gfTsKIAogICAgIGlmICghQGlzT2JqZWN0KHVuZGVy
bHlpbmdTaW5rKSkKQEAgLTU5LDcgKzU5LDcgQEAgZnVuY3Rpb24gaW5pdGlhbGl6ZVdyaXRhYmxl
U3RyZWFtKHVuZGVybHlpbmdTaW5rLCBzdHJhdGVneSkKICAgICB0aGlzLkBzdGFydGVkUHJvbWlz
ZSA9IEBwcm9taXNlSW52b2tlT3JOb29wTm9DYXRjaCh1bmRlcmx5aW5nU2luaywgInN0YXJ0Iiwg
W2Vycm9yRnVuY3Rpb25dKTsKICAgICB0aGlzLkBzdGFydGVkUHJvbWlzZS5AdGhlbigoKSA9PiB7
CiAgICAgICAgIHRoaXMuQHN0YXJ0ZWQgPSB0cnVlOwotICAgICAgICB0aGlzLkBzdGFydGVkUHJv
bWlzZSA9IHVuZGVmaW5lZDsKKyAgICAgICAgdGhpcy5Ac3RhcnRlZFByb21pc2UgPSBAdW5kZWZp
bmVkOwogICAgIH0sIGVycm9yRnVuY3Rpb24pOwogCiAgICAgcmV0dXJuIHRoaXM7CkBAIC0xMjIs
OSArMTIyLDkgQEAgZnVuY3Rpb24gd3JpdGUoY2h1bmspCiAgICAgQGFzc2VydCh0aGlzLkBzdGF0
ZSA9PT0gQHN0cmVhbVdyaXRhYmxlIHx8IHRoaXMuQHN0YXRlID09PSBAc3RyZWFtV2FpdGluZyk7
CiAKICAgICBsZXQgY2h1bmtTaXplID0gMTsKLSAgICBpZiAodGhpcy5Ac3RyYXRlZ3kuc2l6ZSAh
PT0gdW5kZWZpbmVkKSB7CisgICAgaWYgKHRoaXMuQHN0cmF0ZWd5LnNpemUgIT09IEB1bmRlZmlu
ZWQpIHsKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGNodW5rU2l6ZSA9IHRoaXMuQHN0cmF0
ZWd5LnNpemUuQGNhbGwodW5kZWZpbmVkLCBjaHVuayk7CisgICAgICAgICAgICBjaHVua1NpemUg
PSB0aGlzLkBzdHJhdGVneS5zaXplLkBjYWxsKEB1bmRlZmluZWQsIGNodW5rKTsKICAgICAgICAg
fSBjYXRjaChlKSB7CiAgICAgICAgICAgICBAZXJyb3JXcml0YWJsZVN0cmVhbSh0aGlzLCBlKTsK
ICAgICAgICAgICAgIHJldHVybiBAUHJvbWlzZS5AcmVqZWN0KGUpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9zdHJlYW1zL1dyaXRhYmxlU3RyZWFtSW50ZXJuYWxzLmpzIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9zdHJlYW1zL1dyaXRhYmxlU3RyZWFtSW50ZXJuYWxzLmpz
CmluZGV4IDU3Y2JhMzZlMjJiMzEzODM0YjcyMmU1MDFkNjI1OTMwNTA0YTBjY2EuLjE4MDYwNjU5
NjI2NDFiNzZiZjgxNGY4ZTI0MjllNDZkNzdjYWU3ODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvc3RyZWFtcy9Xcml0YWJsZVN0cmVhbUludGVybmFscy5qcworKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3N0cmVhbXMvV3JpdGFibGVTdHJlYW1JbnRlcm5hbHMuanMKQEAg
LTYzLDEyICs2MywxMiBAQCBmdW5jdGlvbiBlcnJvcldyaXRhYmxlU3RyZWFtKHN0cmVhbSwgZSkK
ICAgICB3aGlsZSAoc3RyZWFtLkBxdWV1ZS5jb250ZW50Lmxlbmd0aCA+IDApIHsKICAgICAgICAg
Y29uc3Qgd3JpdGVSZWNvcmQgPSBAZGVxdWV1ZVZhbHVlKHN0cmVhbS5AcXVldWUpOwogICAgICAg
ICBpZiAod3JpdGVSZWNvcmQgIT09ICJjbG9zZSIpCi0gICAgICAgICAgICB3cml0ZVJlY29yZC5w
cm9taXNlQ2FwYWJpbGl0eS5AcmVqZWN0LkBjYWxsKHVuZGVmaW5lZCwgZSk7CisgICAgICAgICAg
ICB3cml0ZVJlY29yZC5wcm9taXNlQ2FwYWJpbGl0eS5AcmVqZWN0LkBjYWxsKEB1bmRlZmluZWQs
IGUpOwogICAgIH0KICAgICBzdHJlYW0uQHN0b3JlZEVycm9yID0gZTsKICAgICBpZiAoc3RyZWFt
LkBzdGF0ZSA9PT0gQHN0cmVhbVdhaXRpbmcpCiAgICAgICAgIHN0cmVhbS5AcmVhZHlQcm9taXNl
Q2FwYWJpbGl0eS5AcmVzb2x2ZS5AY2FsbCgpOwotICAgIHN0cmVhbS5AY2xvc2VkUHJvbWlzZUNh
cGFiaWxpdHkuQHJlamVjdC5AY2FsbCh1bmRlZmluZWQsIGUpOworICAgIHN0cmVhbS5AY2xvc2Vk
UHJvbWlzZUNhcGFiaWxpdHkuQHJlamVjdC5AY2FsbChAdW5kZWZpbmVkLCBlKTsKICAgICBzdHJl
YW0uQHN0YXRlID0gQHN0cmVhbUVycm9yZWQ7CiB9CiAK
</data>
<flag name="review"
          id="295214"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>