<?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>33592</bug_id>
          
          <creation_ts>2010-01-13 05:13:18 -0800</creation_ts>
          <short_desc>Use SerializedScriptValue for passing values between inspector front-end and the inspected page</short_desc>
          <delta_ts>2010-02-05 06:08:56 -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>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>32920</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yury Semikhatsky">yurys</reporter>
          <assigned_to name="Yury Semikhatsky">yurys</assigned_to>
          <cc>pfeldman</cc>
    
    <cc>timothy</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>180174</commentid>
    <comment_count>0</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-01-13 05:13:18 -0800</bug_when>
    <thetext>Currently we serialize the values using custom JSON implementation to serialize the values(see bug 32554 for more details on why we need that custom implementation). Using SerializedScriptValue would allow to get rid of that custom implementation and would work for both in-process and out-of-process front-end since SerializedScriptValue can be converted into a String or new JS object in specified ExecState.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188138</commentid>
    <comment_count>1</comment_count>
      <attachid>48221</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-02-05 03:40:05 -0800</bug_when>
    <thetext>Created attachment 48221
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188141</commentid>
    <comment_count>2</comment_count>
      <attachid>48221</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-02-05 03:59:01 -0800</bug_when>
    <thetext>Comment on attachment 48221
patch

I like this a lot!

&gt; +PassRefPtr&lt;SerializedScriptValue&gt; serialize(ScriptState* scriptState, const ScriptValue&amp; value)
&gt; +{
&gt; +    return SerializedScriptValue::create(scriptState, value.jsValue());
&gt; +}

Should this be defined in ScriptValue instead?

&gt; +
&gt; +ScriptValue deserialize(ScriptState* scriptState, SerializedScriptValue* value)
&gt; +{
&gt; +    return ScriptValue(value-&gt;deserialize(scriptState, scriptState-&gt;lexicalGlobalObject()));
&gt; +}
&gt; +

ditto.

&gt; -    var argsArray = InjectedScript.JSON.parse(args);
&gt; +    var argsArray = JSON.parse(args);

Overriding JSON would bring harm us here. I realize that parse is much more standard than stringify, but still. I&apos;d suggest that you either inline copy of parse method here or simply use eval. This method is being called from the trusted source, it has only valid symbols, etc. r- for this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188159</commentid>
    <comment_count>3</comment_count>
      <attachid>48226</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-02-05 05:32:52 -0800</bug_when>
    <thetext>Created attachment 48226
patch

Addressed all the comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188160</commentid>
    <comment_count>4</comment_count>
      <attachid>48226</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-02-05 05:36:55 -0800</bug_when>
    <thetext>Comment on attachment 48226
patch

Nit: I&apos;d probably do a constructor instead of ScriptValue::deserialize.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188165</commentid>
    <comment_count>5</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-02-05 06:06:40 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 48226 [details])
&gt; Nit: I&apos;d probably do a constructor instead of ScriptValue::deserialize.

Adding a constructor would still require a static method which would still require a static method that would enter the script state scope before deserializing value so I&apos;d rather stick with this approach.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188167</commentid>
    <comment_count>6</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-02-05 06:08:56 -0800</bug_when>
    <thetext>Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	WebCore/ChangeLog
	M	WebCore/bindings/js/JSInjectedScriptHostCustom.cpp
	M	WebCore/bindings/js/ScriptArray.cpp
	M	WebCore/bindings/js/ScriptFunctionCall.cpp
	M	WebCore/bindings/js/ScriptFunctionCall.h
	M	WebCore/bindings/js/ScriptObject.cpp
	M	WebCore/bindings/js/ScriptValue.cpp
	M	WebCore/bindings/js/ScriptValue.h
	M	WebCore/bindings/v8/ScriptArray.cpp
	M	WebCore/bindings/v8/ScriptFunctionCall.cpp
	M	WebCore/bindings/v8/ScriptFunctionCall.h
	M	WebCore/bindings/v8/ScriptObject.cpp
	M	WebCore/bindings/v8/ScriptState.h
	M	WebCore/bindings/v8/ScriptValue.cpp
	M	WebCore/bindings/v8/ScriptValue.h
	M	WebCore/bindings/v8/custom/V8InjectedScriptHostCustom.cpp
	M	WebCore/inspector/InjectedScript.cpp
	M	WebCore/inspector/InjectedScript.h
	M	WebCore/inspector/InjectedScriptHost.cpp
	M	WebCore/inspector/InjectedScriptHost.h
	M	WebCore/inspector/InjectedScriptHost.idl
	M	WebCore/inspector/InspectorBackend.cpp
	M	WebCore/inspector/InspectorController.cpp
	M	WebCore/inspector/InspectorFrontend.cpp
	M	WebCore/inspector/InspectorFrontend.h
	M	WebCore/inspector/front-end/InjectedScript.js
	M	WebCore/inspector/front-end/InjectedScriptAccess.js
	M	WebCore/inspector/front-end/inspector.js
	M	WebKit/qt/Api/qwebelement.cpp
	M	WebKit/qt/ChangeLog
Committed r54421</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48221</attachid>
            <date>2010-02-05 03:40:05 -0800</date>
            <delta_ts>2010-02-05 05:32:52 -0800</delta_ts>
            <desc>patch</desc>
            <filename>serialized-sctipt-access.patch</filename>
            <type>text/plain</type>
            <size>67905</size>
            <attacher name="Yury Semikhatsky">yurys</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NTYyZWZhZC4uOGNiZDJjZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMjEgQEAKKzIwMTAtMDItMDUgIFl1cnkgU2VtaWto
YXRza3kgIDx5dXJ5c0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgLSBVc2UgU2VyaWFsaXplZFNjcmlwdFZhbHVlIGZvciBwYXNz
aW5nIGRhdGEgYmV0d2VlbiBpbmplY3RlZCBzY3JpcHQgYW5kCisgICAgICAgIGluc3BlY3RvciBm
cm9udGVuZC4KKyAgICAgICAgLSBSZW1vdmUgY3VzdG9tIEpTT04gaW1wbGVtZW50YXRpb24gZnJv
bSB0aGUgaW5zdHBlY3RvciB1dGlsaXR5IHNjcmlwdC4KKyAgICAgICAgLSBNYWtlIHN1cmUgdGhh
dCBvbmx5IG9iamVjdHMgY3JlYXRlZCBpbiB0aGUgc2FtZSBTY3JpcHRTdGF0ZSBjYW4gYmUgdmFs
dWVzCisgICAgICAgIG9mIFNjcmlwdE9iamVjdC9BcnJheSBwcm9wZXJ0aWVzIGFuZCBhcmd1bWVu
dHMgdG8gU2NyaXB0RnVuY3Rpb25DYWxsLiBXZSBkb24ndAorICAgICAgICB3YW50IFNjcmlwdE9i
amVjdHMgdG8gbGVhayBiZXR3ZWVuIGNvbnRleHRzLgorICAgICAgICAtIFVzZSBTY3JpcHRTdGF0
ZSBvZiB0aGUgJ3RoaXMnIG9iamVjdCBpbiBTY3JpcHRGdW5jdGlvbkNhbGwgaW5zdGVhZCBvZiBw
YXNzaW5nCisgICAgICAgIGl0IGFzIGFkZGl0aW9uYWwgcGFyYW1ldGVyLgorCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMzU5MgorCisgICAgICAgICog
YmluZGluZ3MvanMvSlNJbmplY3RlZFNjcmlwdEhvc3RDdXN0b20uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SlNJbmplY3RlZFNjcmlwdEhvc3Q6OnJlcG9ydERpZERpc3BhdGNoT25JbmplY3RlZFNj
cmlwdCk6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0QXJyYXkuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U2NyaXB0QXJyYXk6OnNldCk6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0
RnVuY3Rpb25DYWxsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEZ1bmN0aW9uQ2FsbDo6
U2NyaXB0RnVuY3Rpb25DYWxsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEZ1bmN0aW9uQ2Fs
bDo6YXBwZW5kQXJndW1lbnQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdEZ1bmN0aW9u
Q2FsbC5oOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdE9iamVjdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTY3JpcHRPYmplY3Q6OnNldCk6CisgICAgICAgICogYmluZGluZ3MvanMvU2Ny
aXB0U3RhdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2VyaWFsaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OmRlc2VyaWFsaXplKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRTdGF0ZS5o
OgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1NjcmlwdEFycmF5LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNjcmlwdEFycmF5OjpzZXQpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1NjcmlwdEZ1bmN0
aW9uQ2FsbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRGdW5jdGlvbkNhbGw6OlNjcmlw
dEZ1bmN0aW9uQ2FsbCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRGdW5jdGlvbkNhbGw6OmFw
cGVuZEFyZ3VtZW50KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHRGdW5jdGlvbkNhbGwu
aDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHRPYmplY3QuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U2NyaXB0T2JqZWN0OjpzZXQpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1NjcmlwdFN0
YXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNlcmlhbGl6ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpkZXNlcmlhbGl6ZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0U3RhdGUuaDoKKyAg
ICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhJbmplY3RlZFNjcmlwdEhvc3RDdXN0b20uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6VjhJbmplY3RlZFNjcmlwdEhvc3Q6OnJlcG9ydERpZERpc3Bh
dGNoT25JbmplY3RlZFNjcmlwdENhbGxiYWNrKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5qZWN0
ZWRTY3JpcHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5qZWN0ZWRTY3JpcHQ6OmRpc3BhdGNo
KToKKyAgICAgICAgKFdlYkNvcmU6OkluamVjdGVkU2NyaXB0OjpjYWxsRnJhbWVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkluamVjdGVkU2NyaXB0Ojp3cmFwRm9yQ29uc29sZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbmplY3RlZFNjcmlwdDo6cmVsZWFzZVdyYXBwZXJPYmplY3RHcm91cCk6CisgICAg
ICAgICogaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0Lmg6CisgICAgICAgICogaW5zcGVjdG9yL0lu
amVjdGVkU2NyaXB0SG9zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmplY3RlZFNjcmlwdEhv
c3Q6OnJlcG9ydERpZERpc3BhdGNoT25JbmplY3RlZFNjcmlwdCk6CisgICAgICAgICogaW5zcGVj
dG9yL0luamVjdGVkU2NyaXB0SG9zdC5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbmplY3RlZFNj
cmlwdEhvc3QuaWRsOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckJhY2tlbmQ6OmRpc3BhdGNoT25JbmplY3RlZFNj
cmlwdCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0RnJvbnRlbmRQcm94eU9iamVj
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRQYXVzZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRFdmFsdWF0ZUZvclRlc3RJ
bkZyb250ZW5kKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmQ6Okluc3BlY3RvckZyb250ZW5kKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kOjpuZXdTY3JpcHRBcnJheSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZDo6bmV3U2NyaXB0T2JqZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kOjpwb3B1bGF0ZUZyb250ZW5kU2V0dGlu
Z3MpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmQ6OnVwZGF0ZUNvbnNvbGVN
ZXNzYWdlRXhwaXJlZENvdW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5k
OjphZGRDb25zb2xlTWVzc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVu
ZDo6dXBkYXRlQ29uc29sZU1lc3NhZ2VSZXBlYXRDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JGcm9udGVuZDo6dXBkYXRlUmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yRnJvbnRlbmQ6OnJlbW92ZVJlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckZyb250ZW5kOjpkaWRHZXRSZXNvdXJjZUNvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yRnJvbnRlbmQ6OnVwZGF0ZUZvY3VzZWROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckZyb250ZW5kOjpzZXRBdHRhY2hlZFdpbmRvdyk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JGcm9udGVuZDo6YWRkUmVjb3JkVG9UaW1lbGluZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JGcm9udGVuZDo6cGFyc2VkU2NyaXB0U291cmNlKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckZyb250ZW5kOjpmYWlsZWRUb1BhcnNlU2NyaXB0U291cmNlKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kOjphZGRQcm9maWxlSGVhZGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kOjpzZXRSZWNvcmRpbmdQcm9maWxlKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kOjpkaWRHZXRQcm9maWxlSGVhZGVy
cyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZDo6ZGlkR2V0UHJvZmlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZDo6cGF1c2VkU2NyaXB0KToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kOjpzZXREb2N1bWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZDo6c2V0RGV0YWNoZWRSb290KToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kOjpzZXRDaGlsZE5vZGVzKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckZyb250ZW5kOjpjaGlsZE5vZGVDb3VudFVwZGF0ZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmQ6OmNoaWxkTm9kZUluc2VydGVkKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kOjpjaGlsZE5vZGVSZW1vdmVkKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kOjphdHRyaWJ1dGVzVXBkYXRlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZDo6ZGlkUmVtb3ZlTm9kZSk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZDo6ZGlkR2V0Q2hpbGROb2Rlcyk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZDo6ZGlkQXBwbHlEb21DaGFuZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmQ6OmRpZEdldEV2ZW50TGlzdGVuZXJzRm9yTm9k
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZDo6ZGlkR2V0Q29va2llcyk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZDo6ZGlkRGlzcGF0Y2hPbkluamVj
dGVkU2NyaXB0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kOjphZGREYXRh
YmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZDo6c2VsZWN0RGF0YWJh
c2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmQ6OmRpZEdldERhdGFiYXNl
VGFibGVOYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZDo6YWRkRE9N
U3RvcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZDo6c2VsZWN0RE9N
U3RvcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZDo6ZGlkR2V0RE9N
U3RvcmFnZUVudHJpZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmQ6OmRp
ZFNldERPTVN0b3JhZ2VJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5k
OjpkaWRSZW1vdmVET01TdG9yYWdlSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JG
cm9udGVuZDo6dXBkYXRlRE9NU3RvcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JG
cm9udGVuZDo6YWRkTm9kZXNUb1NlYXJjaFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JGcm9udGVuZDo6Y29udGV4dE1lbnVJdGVtU2VsZWN0ZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yRnJvbnRlbmQ6OmV2YWx1YXRlRm9yVGVzdEluRnJvbnRlbmQpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmQ6OmNhbGxTaW1wbGVGdW5jdGlvbik6CisgICAg
ICAgICogaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmg6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JGcm9udGVuZDo6c2NyaXB0U3RhdGUpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9u
dC1lbmQvSW5qZWN0ZWRTY3JpcHQuanM6CisgICAgICAgIChpbmplY3RlZFNjcmlwdENvbnN0cnVj
dG9yKToKKyAgICAgICAgKGluamVjdGVkU2NyaXB0Q29uc3RydWN0b3IuKToKKyAgICAgICAgKiBp
bnNwZWN0b3IvZnJvbnQtZW5kL0luamVjdGVkU2NyaXB0QWNjZXNzLmpzOgorICAgICAgICAoSW5q
ZWN0ZWRTY3JpcHRBY2Nlc3MuX2luc3RhbGxIYW5kbGVyLkluamVjdGVkU2NyaXB0QWNjZXNzLnBy
b3RvdHlwZS5tZXRob2ROYW1lLm15Q2FsbGJhY2spOgorICAgICAgICAoSW5qZWN0ZWRTY3JpcHRB
Y2Nlc3MuX2luc3RhbGxIYW5kbGVyLkluamVjdGVkU2NyaXB0QWNjZXNzLnByb3RvdHlwZS5tZXRo
b2ROYW1lKToKKyAgICAgICAgKEluamVjdGVkU2NyaXB0QWNjZXNzLl9pbnN0YWxsSGFuZGxlcik6
CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanM6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuYWRkQ29uc29sZU1lc3NhZ2UpOgorCiAyMDEwLTAyLTA0ICBNYXJrIFJvd2Ug
IDxtcm93ZUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVy
LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luamVjdGVkU2NyaXB0SG9zdEN1
c3RvbS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5qZWN0ZWRTY3JpcHRIb3N0Q3VzdG9t
LmNwcAppbmRleCA5NmM1YzQzLi4zZGI4OTRkIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTSW5qZWN0ZWRTY3JpcHRIb3N0Q3VzdG9tLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTSW5qZWN0ZWRTY3JpcHRIb3N0Q3VzdG9tLmNwcApAQCAtNTMsNiArNTMsNyBAQAogI2lu
Y2x1ZGUgIk5vZGUuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaWYgRU5BQkxFKERPTV9TVE9SQUdF
KQorI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgogI2luY2x1ZGUgIlN0b3JhZ2Uu
aCIKICNpbmNsdWRlICJKU1N0b3JhZ2UuaCIKICNlbmRpZgpAQCAtNjEsNiArNjIsNyBAQAogI2lu
Y2x1ZGUgPHBhcnNlci9Tb3VyY2VDb2RlLmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU0FycmF5Lmg+
CiAjaW5jbHVkZSA8cnVudGltZS9KU0xvY2suaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIp
CkBAIC0xOTUsNiArMTk3LDI0IEBAIEpTVmFsdWUgSlNJbmplY3RlZFNjcmlwdEhvc3Q6OnNlbGVj
dERPTVN0b3JhZ2UoRXhlY1N0YXRlKiwgY29uc3QgQXJnTGlzdCYgYXJncykKIH0KICNlbmRpZgog
CitKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpyZXBvcnREaWREaXNwYXRjaE9uSW5qZWN0
ZWRTY3JpcHQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQoreworICAgIGlm
IChhcmdzLnNpemUoKSA8IDMpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIAor
ICAgIGlmICghYXJncy5hdCgwKS5pc0ludDMyKCkpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOworICAgIGludCBjYWxsSWQgPSBhcmdzLmF0KDApLmFzSW50MzIoKTsKKyAgICAKKyAgICBS
ZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiByZXN1bHQoU2VyaWFsaXplZFNjcmlwdFZhbHVl
OjpjcmVhdGUoZXhlYywgYXJncy5hdCgxKSkpOworICAgIAorICAgIGJvb2wgaXNFeGNlcHRpb247
CisgICAgaWYgKCFhcmdzLmF0KDIpLmdldEJvb2xlYW4oaXNFeGNlcHRpb24pKQorICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBpbXBsKCktPnJlcG9ydERpZERpc3BhdGNoT25Jbmpl
Y3RlZFNjcmlwdChjYWxsSWQsIHJlc3VsdC5nZXQoKSwgaXNFeGNlcHRpb24pOworICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOworfQorCiBJbmplY3RlZFNjcmlwdCBJbmplY3RlZFNjcmlwdEhvc3Q6
OmluamVjdGVkU2NyaXB0Rm9yKFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSkKIHsKICAgICBKU0xv
Y2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5k
aW5ncy9qcy9TY3JpcHRBcnJheS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEFycmF5
LmNwcAppbmRleCAyYzQwNzVhLi5jYWVjYzQwIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdz
L2pzL1NjcmlwdEFycmF5LmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEFycmF5
LmNwcApAQCAtNTMsNiArNTMsMTAgQEAgc3RhdGljIGJvb2wgaGFuZGxlRXhjZXB0aW9uKFNjcmlw
dFN0YXRlKiBzY3JpcHRTdGF0ZSkKIAogYm9vbCBTY3JpcHRBcnJheTo6c2V0KHVuc2lnbmVkIGlu
ZGV4LCBjb25zdCBTY3JpcHRPYmplY3QmIHZhbHVlKQogeworICAgIGlmICh2YWx1ZS5zY3JpcHRT
dGF0ZSgpICE9IG1fc2NyaXB0U3RhdGUpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFz
c2VydGlvbnNPbmx5KTsKICAgICBqc0FycmF5KCktPnB1dChtX3NjcmlwdFN0YXRlLCBpbmRleCwg
dmFsdWUuanNPYmplY3QoKSk7CiAgICAgcmV0dXJuIGhhbmRsZUV4Y2VwdGlvbihtX3NjcmlwdFN0
YXRlKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RnVuY3Rpb25DYWxs
LmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RnVuY3Rpb25DYWxsLmNwcAppbmRleCBh
MjI4NGJjLi41MDAxZDNjIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEZ1
bmN0aW9uQ2FsbC5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRGdW5jdGlvbkNh
bGwuY3BwCkBAIC00Miw4ICs0Miw4IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotU2NyaXB0RnVuY3Rpb25DYWxsOjpTY3JpcHRGdW5jdGlvbkNhbGwoU2Ny
aXB0U3RhdGUqIGV4ZWMsIGNvbnN0IFNjcmlwdE9iamVjdCYgdGhpc09iamVjdCwgY29uc3QgU3Ry
aW5nJiBuYW1lKQotICAgIDogbV9leGVjKGV4ZWMpCitTY3JpcHRGdW5jdGlvbkNhbGw6OlNjcmlw
dEZ1bmN0aW9uQ2FsbChjb25zdCBTY3JpcHRPYmplY3QmIHRoaXNPYmplY3QsIGNvbnN0IFN0cmlu
ZyYgbmFtZSkKKyAgICA6IG1fZXhlYyh0aGlzT2JqZWN0LnNjcmlwdFN0YXRlKCkpCiAgICAgLCBt
X3RoaXNPYmplY3QodGhpc09iamVjdCkKICAgICAsIG1fbmFtZShuYW1lKQogewpAQCAtNTEsNiAr
NTEsMTAgQEAgU2NyaXB0RnVuY3Rpb25DYWxsOjpTY3JpcHRGdW5jdGlvbkNhbGwoU2NyaXB0U3Rh
dGUqIGV4ZWMsIGNvbnN0IFNjcmlwdE9iamVjdCYgdGgKIAogdm9pZCBTY3JpcHRGdW5jdGlvbkNh
bGw6OmFwcGVuZEFyZ3VtZW50KGNvbnN0IFNjcmlwdE9iamVjdCYgYXJndW1lbnQpCiB7CisgICAg
aWYgKGFyZ3VtZW50LnNjcmlwdFN0YXRlKCkgIT0gbV9leGVjKSB7CisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQogICAgIG1fYXJndW1lbnRzLmFw
cGVuZChhcmd1bWVudC5qc09iamVjdCgpKTsKIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5k
aW5ncy9qcy9TY3JpcHRGdW5jdGlvbkNhbGwuaCBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0
RnVuY3Rpb25DYWxsLmgKaW5kZXggN2M1MDc0Zi4uOTc0MmU4ZiAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9TY3JpcHRGdW5jdGlvbkNhbGwuaAorKysgYi9XZWJDb3JlL2JpbmRpbmdz
L2pzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5oCkBAIC00OCw3ICs0OCw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogICAgIGNsYXNzIFNjcmlwdEZ1bmN0aW9uQ2FsbCB7CiAgICAgcHVibGljOgotICAg
ICAgICBTY3JpcHRGdW5jdGlvbkNhbGwoU2NyaXB0U3RhdGUqIGV4ZWMsIGNvbnN0IFNjcmlwdE9i
amVjdCYgdGhpc09iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lKTsKKyAgICAgICAgU2NyaXB0RnVu
Y3Rpb25DYWxsKGNvbnN0IFNjcmlwdE9iamVjdCYgdGhpc09iamVjdCwgY29uc3QgU3RyaW5nJiBu
YW1lKTsKICAgICAgICAgdmlydHVhbCB+U2NyaXB0RnVuY3Rpb25DYWxsKCkge307CiAKICAgICAg
ICAgdm9pZCBhcHBlbmRBcmd1bWVudChjb25zdCBTY3JpcHRPYmplY3QmKTsKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0T2JqZWN0LmNwcCBiL1dlYkNvcmUvYmluZGluZ3Mv
anMvU2NyaXB0T2JqZWN0LmNwcAppbmRleCAwM2VjZmM2Li43OTQ4MjE5IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdE9iamVjdC5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5n
cy9qcy9TY3JpcHRPYmplY3QuY3BwCkBAIC03MCw2ICs3MCwxMCBAQCBib29sIFNjcmlwdE9iamVj
dDo6c2V0KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKIAogYm9vbCBT
Y3JpcHRPYmplY3Q6OnNldChjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBTY3JpcHRPYmplY3QmIHZh
bHVlKQogeworICAgIGlmICh2YWx1ZS5zY3JpcHRTdGF0ZSgpICE9IG1fc2NyaXB0U3RhdGUpIHsK
KyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CiAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKICAgICBQdXRQcm9w
ZXJ0eVNsb3Qgc2xvdDsKICAgICBqc09iamVjdCgpLT5wdXQobV9zY3JpcHRTdGF0ZSwgSWRlbnRp
ZmllcihtX3NjcmlwdFN0YXRlLCBuYW1lKSwgdmFsdWUuanNPYmplY3QoKSwgc2xvdCk7CmRpZmYg
LS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFN0YXRlLmNwcCBiL1dlYkNvcmUvYmlu
ZGluZ3MvanMvU2NyaXB0U3RhdGUuY3BwCmluZGV4IGI5ZjMzNGEuLjZiNWYyOTYgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0U3RhdGUuY3BwCisrKyBiL1dlYkNvcmUvYmlu
ZGluZ3MvanMvU2NyaXB0U3RhdGUuY3BwCkBAIC02NCw0ICs2NCwxNCBAQCBTY3JpcHRTdGF0ZSog
c2NyaXB0U3RhdGVGcm9tUGFnZShET01XcmFwcGVyV29ybGQqIHdvcmxkLCBQYWdlKiBwYWdlKQog
ICAgIHJldHVybiBwYWdlLT5tYWluRnJhbWUoKS0+c2NyaXB0KCktPmdsb2JhbE9iamVjdCh3b3Js
ZCktPmdsb2JhbEV4ZWMoKTsKIH0KIAorUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+
IHNlcmlhbGl6ZShTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUsIGNvbnN0IFNjcmlwdFZhbHVlJiB2
YWx1ZSkKK3sKKyAgICByZXR1cm4gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoc2NyaXB0
U3RhdGUsIHZhbHVlLmpzVmFsdWUoKSk7Cit9CisKK1NjcmlwdFZhbHVlIGRlc2VyaWFsaXplKFNj
cmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSwgU2VyaWFsaXplZFNjcmlwdFZhbHVlKiB2YWx1ZSkKK3sK
KyAgICByZXR1cm4gU2NyaXB0VmFsdWUodmFsdWUtPmRlc2VyaWFsaXplKHNjcmlwdFN0YXRlLCBz
Y3JpcHRTdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKSk7Cit9CisKIH0KZGlmZiAtLWdpdCBh
L1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0U3RhdGUuaCBiL1dlYkNvcmUvYmluZGluZ3MvanMv
U2NyaXB0U3RhdGUuaAppbmRleCAwYzdjNTc1Li4xZDBjYjllIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1NjcmlwdFN0YXRlLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3Jp
cHRTdGF0ZS5oCkBAIC0zMywxMiArMzMsMTUgQEAKICNkZWZpbmUgU2NyaXB0U3RhdGVfaAogCiAj
aW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIERPTVdyYXBwZXJXb3JsZDsKICAgICBjbGFz
cyBGcmFtZTsKICAgICBjbGFzcyBOb2RlOwogICAgIGNsYXNzIFBhZ2U7CisgICAgY2xhc3MgU2Ny
aXB0VmFsdWU7CisgICAgY2xhc3MgU2VyaWFsaXplZFNjcmlwdFZhbHVlOwogCiAgICAgLy8gVGhl
IGlkZWEgaXMgdG8gZXhwb3NlICJzdGF0ZS1saWtlIiBtZXRob2RzIChoYWRFeGNlcHRpb24sIGFu
ZCBhbnkgb3RoZXIKICAgICAvLyBtZXRob2RzIHdoZXJlIEV4ZWNTdGF0ZSBqdXN0IGRpcHMgaW50
byBnbG9iYWxEYXRhKSBvZiBKU0M6OkV4ZWNTdGF0ZSBhcyBhCkBAIC01MSw2ICs1NCw4IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICBTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGVGcm9tTm9kZShE
T01XcmFwcGVyV29ybGQqLCBOb2RlKik7CiAgICAgU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlRnJv
bVBhZ2UoRE9NV3JhcHBlcldvcmxkKiwgUGFnZSopOwogCisgICAgUGFzc1JlZlB0cjxTZXJpYWxp
emVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6ZShTY3JpcHRTdGF0ZSosIGNvbnN0IFNjcmlwdFZhbHVl
Jik7CisgICAgU2NyaXB0VmFsdWUgZGVzZXJpYWxpemUoU2NyaXB0U3RhdGUqLCBTZXJpYWxpemVk
U2NyaXB0VmFsdWUqKTsKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIFNjcmlw
dFN0YXRlX2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0QXJyYXkuY3Bw
IGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRBcnJheS5jcHAKaW5kZXggNzQ4ZWUxOS4uMDFi
MDg5OCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRBcnJheS5jcHAKKysr
IGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRBcnJheS5jcHAKQEAgLTUwLDYgKzUwLDEwIEBA
IFNjcmlwdEFycmF5OjpTY3JpcHRBcnJheShTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUsIHY4OjpI
YW5kbGU8djg6OkFycmF5PiB2OEFycmF5CiAKIGJvb2wgU2NyaXB0QXJyYXk6OnNldCh1bnNpZ25l
ZCBpbmRleCwgY29uc3QgU2NyaXB0T2JqZWN0JiB2YWx1ZSkKIHsKKyAgICBpZiAodmFsdWUuc2Ny
aXB0U3RhdGUoKSAhPSBtX3NjcmlwdFN0YXRlKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogICAgIFNjcmlwdFNjb3BlIHNjb3Bl
KG1fc2NyaXB0U3RhdGUpOwogICAgIHY4T2JqZWN0KCktPlNldCh2ODo6SW50ZWdlcjo6TmV3KGlu
ZGV4KSwgdmFsdWUudjhWYWx1ZSgpKTsKICAgICByZXR1cm4gc2NvcGUuc3VjY2VzcygpOwpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRGdW5jdGlvbkNhbGwuY3BwIGIvV2Vi
Q29yZS9iaW5kaW5ncy92OC9TY3JpcHRGdW5jdGlvbkNhbGwuY3BwCmluZGV4IGEyMzJhY2QuLmU2
YjIyZWUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0RnVuY3Rpb25DYWxs
LmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAKQEAg
LTQ1LDggKzQ1LDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1TY3JpcHRGdW5jdGlvbkNh
bGw6OlNjcmlwdEZ1bmN0aW9uQ2FsbChTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUsIGNvbnN0IFNj
cmlwdE9iamVjdCYgdGhpc09iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lKQotICAgIDogbV9zY3Jp
cHRTdGF0ZShzY3JpcHRTdGF0ZSkKK1NjcmlwdEZ1bmN0aW9uQ2FsbDo6U2NyaXB0RnVuY3Rpb25D
YWxsKGNvbnN0IFNjcmlwdE9iamVjdCYgdGhpc09iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lKQor
ICAgIDogbV9zY3JpcHRTdGF0ZSh0aGlzT2JqZWN0LnNjcmlwdFN0YXRlKCkpCiAgICAgLCBtX3Ro
aXNPYmplY3QodGhpc09iamVjdCkKICAgICAsIG1fbmFtZShuYW1lKQogewpAQCAtNTQsNiArNTQs
MTAgQEAgU2NyaXB0RnVuY3Rpb25DYWxsOjpTY3JpcHRGdW5jdGlvbkNhbGwoU2NyaXB0U3RhdGUq
IHNjcmlwdFN0YXRlLCBjb25zdCBTY3JpcHRPYmoKIAogdm9pZCBTY3JpcHRGdW5jdGlvbkNhbGw6
OmFwcGVuZEFyZ3VtZW50KGNvbnN0IFNjcmlwdE9iamVjdCYgYXJndW1lbnQpCiB7CisgICAgaWYg
KGFyZ3VtZW50LnNjcmlwdFN0YXRlKCkgIT0gbV9zY3JpcHRTdGF0ZSkgeworICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KICAgICBtX2FyZ3VtZW50
cy5hcHBlbmQoYXJndW1lbnQpOwogfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1NjcmlwdEZ1bmN0aW9uQ2FsbC5oIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRGdW5jdGlv
bkNhbGwuaAppbmRleCA2MjAzNDAyLi40Y2JiZjdlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1NjcmlwdEZ1bmN0aW9uQ2FsbC5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2Ny
aXB0RnVuY3Rpb25DYWxsLmgKQEAgLTQzLDcgKzQzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiAgICAgY2xhc3MgU2NyaXB0RnVuY3Rpb25DYWxsIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIFNj
cmlwdEZ1bmN0aW9uQ2FsbChTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUsIGNvbnN0IFNjcmlwdE9i
amVjdCYgdGhpc09iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lKTsKKyAgICAgICAgU2NyaXB0RnVu
Y3Rpb25DYWxsKGNvbnN0IFNjcmlwdE9iamVjdCYgdGhpc09iamVjdCwgY29uc3QgU3RyaW5nJiBu
YW1lKTsKICAgICAgICAgdmlydHVhbCB+U2NyaXB0RnVuY3Rpb25DYWxsKCkge307CiAKICAgICAg
ICAgdm9pZCBhcHBlbmRBcmd1bWVudChjb25zdCBTY3JpcHRPYmplY3QmKTsKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0T2JqZWN0LmNwcCBiL1dlYkNvcmUvYmluZGluZ3Mv
djgvU2NyaXB0T2JqZWN0LmNwcAppbmRleCAwZmNkMTZmLi41MjBjNTdiIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdE9iamVjdC5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5n
cy92OC9TY3JpcHRPYmplY3QuY3BwCkBAIC02Nyw2ICs2NywxMCBAQCBib29sIFNjcmlwdE9iamVj
dDo6c2V0KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKIAogYm9vbCBT
Y3JpcHRPYmplY3Q6OnNldChjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBTY3JpcHRPYmplY3QmIHZh
bHVlKQogeworICAgIGlmICh2YWx1ZS5zY3JpcHRTdGF0ZSgpICE9IG1fc2NyaXB0U3RhdGUpIHsK
KyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CiAgICAgU2NyaXB0U2NvcGUgc2NvcGUobV9zY3JpcHRTdGF0ZSk7CiAgICAgdjhPYmplY3Qo
KS0+U2V0KHY4OjpTdHJpbmc6Ok5ldyhuYW1lKSwgdmFsdWUudjhWYWx1ZSgpKTsKICAgICByZXR1
cm4gc2NvcGUuc3VjY2VzcygpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3Jp
cHRTdGF0ZS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFN0YXRlLmNwcAppbmRleCBm
YWMxZDI2Li5hOTg5YjNhIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFN0
YXRlLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFN0YXRlLmNwcApAQCAtMzUs
NiArMzUsOCBAQAogI2luY2x1ZGUgIk5vZGUuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVk
ZSAiU2NyaXB0Q29udHJvbGxlci5oIgorI2luY2x1ZGUgIlNjcmlwdFNjb3BlLmgiCisjaW5jbHVk
ZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCiAjaW5jbHVkZSAiVjhIaWRkZW5Qcm9wZXJ0eU5h
bWUuaCIKIAogI2luY2x1ZGUgPHY4Lmg+CkBAIC0xMTEsNCArMTEzLDE2IEBAIFNjcmlwdFN0YXRl
KiBzY3JpcHRTdGF0ZUZyb21QYWdlKERPTVdyYXBwZXJXb3JsZCosIFBhZ2UqIHBhZ2UpCiAgICAg
cmV0dXJuIG1haW5Xb3JsZFNjcmlwdFN0YXRlKHBhZ2UtPm1haW5GcmFtZSgpKTsKIH0KIAorUGFz
c1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6ZShTY3JpcHRTdGF0ZSogc2Ny
aXB0U3RhdGUsIGNvbnN0IFNjcmlwdFZhbHVlJiB2YWx1ZSkKK3sKKyAgICBTY3JpcHRTY29wZSBz
Y29wZShzY3JpcHRTdGF0ZSk7CisgICAgcmV0dXJuIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3Jl
YXRlKHZhbHVlLnY4VmFsdWUoKSk7Cit9CisKK1NjcmlwdFZhbHVlIGRlc2VyaWFsaXplKFNjcmlw
dFN0YXRlKiBzY3JpcHRTdGF0ZSwgU2VyaWFsaXplZFNjcmlwdFZhbHVlKiB2YWx1ZSkKK3sKKyAg
ICBTY3JpcHRTY29wZSBzY29wZShzY3JpcHRTdGF0ZSk7CisgICAgcmV0dXJuIFNjcmlwdFZhbHVl
KHZhbHVlLT5kZXNlcmlhbGl6ZSgpKTsKK30KKwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5k
aW5ncy92OC9TY3JpcHRTdGF0ZS5oIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRTdGF0ZS5o
CmluZGV4IGU3MWJlY2IuLmViOGE5ODEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvdjgv
U2NyaXB0U3RhdGUuaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFN0YXRlLmgKQEAg
LTM0LDEzICszNCwxNiBAQAogI2luY2x1ZGUgIkRPTVdyYXBwZXJXb3JsZC5oIgogI2luY2x1ZGUg
PHY4Lmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NS
ZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgY2xhc3MgRE9NV3JhcHBlcldvcmxkOworICAgIGNsYXNzIEZyYW1lOwogICAgIGNs
YXNzIE5vZGU7CiAgICAgY2xhc3MgUGFnZTsKLSAgICBjbGFzcyBGcmFtZTsKKyAgICBjbGFzcyBT
Y3JpcHRWYWx1ZTsKKyAgICBjbGFzcyBTZXJpYWxpemVkU2NyaXB0VmFsdWU7CiAKICAgICBjbGFz
cyBTY3JpcHRTdGF0ZSA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CiAgICAgcHVibGljOgpAQCAtODQs
NiArODcsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgU2NyaXB0U3RhdGUqIHNjcmlwdFN0
YXRlRnJvbU5vZGUoRE9NV3JhcHBlcldvcmxkKiwgTm9kZSopOwogICAgIFNjcmlwdFN0YXRlKiBz
Y3JpcHRTdGF0ZUZyb21QYWdlKERPTVdyYXBwZXJXb3JsZCosIFBhZ2UqKTsKIAorICAgIFBhc3NS
ZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxpemUoU2NyaXB0U3RhdGUqLCBjb25z
dCBTY3JpcHRWYWx1ZSYpOworICAgIFNjcmlwdFZhbHVlIGRlc2VyaWFsaXplKFNjcmlwdFN0YXRl
KiwgU2VyaWFsaXplZFNjcmlwdFZhbHVlKik7CisKICAgICBpbmxpbmUgRE9NV3JhcHBlcldvcmxk
KiBkZWJ1Z2dlcldvcmxkKCkgeyByZXR1cm4gbWFpblRocmVhZE5vcm1hbFdvcmxkKCk7IH0KICAg
ICBpbmxpbmUgRE9NV3JhcHBlcldvcmxkKiBwbHVnaW5Xb3JsZCgpIHsgcmV0dXJuIG1haW5UaHJl
YWROb3JtYWxXb3JsZCgpOyB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4SW5qZWN0ZWRTY3JpcHRIb3N0Q3VzdG9tLmNwcCBiL1dlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4SW5qZWN0ZWRTY3JpcHRIb3N0Q3VzdG9tLmNwcAppbmRleCBhZDRlZDAxLi45NDJi
MDE3IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEluamVjdGVkU2Ny
aXB0SG9zdEN1c3RvbS5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJbmpl
Y3RlZFNjcmlwdEhvc3RDdXN0b20uY3BwCkBAIC0zOSwxMiArMzksMTQgQEAKICNpbmNsdWRlICJJ
bnNwZWN0b3JDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiTm9kZS5oIgogI2luY2x1ZGUgIlBhZ2Uu
aCIKKyNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKIAogI2luY2x1ZGUgIlY4Qmlu
ZGluZy5oIgogI2luY2x1ZGUgIlY4RGF0YWJhc2UuaCIKICNpbmNsdWRlICJWOE5vZGUuaCIKICNp
bmNsdWRlICJWOFByb3h5LmgiCiAjaW5jbHVkZSAiVjhTdG9yYWdlLmgiCisjaW5jbHVkZSA8d3Rm
L1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTE5NCw2ICsxOTYsMTkgQEAg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4SW5qZWN0ZWRTY3JpcHRIb3N0OjpzZWxlY3RET01TdG9y
YWdlQ2FsbGJhY2soY29uc3Qgdjg6OkEKIH0KICNlbmRpZgogCit2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gVjhJbmplY3RlZFNjcmlwdEhvc3Q6OnJlcG9ydERpZERpc3BhdGNoT25JbmplY3RlZFNjcmlw
dENhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit7CisgICAgSU5DX1NUQVRTKCJJ
bmplY3RlZFNjcmlwdEhvc3QucmVwb3J0RGlkRGlzcGF0Y2hPbkluamVjdGVkU2NyaXB0KCkiKTsK
KyAgICBpZiAoYXJncy5MZW5ndGgoKSA8IDMpCisgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVk
KCk7CisgICAgSW5qZWN0ZWRTY3JpcHRIb3N0KiBob3N0ID0gVjhJbmplY3RlZFNjcmlwdEhvc3Q6
OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOworICAgIGludCBjYWxsSWQgPSBhcmdzWzBdLT5Ub0lu
dDMyKCktPlZhbHVlKCk7CisgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gcmVzdWx0
KFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKGFyZ3NbMV0pKTsKKyAgICBib29sIGlzRXhj
ZXB0aW9uID0gYXJnc1syXS0+VG9Cb29sZWFuKCktPlZhbHVlKCk7CisgICAgaG9zdC0+cmVwb3J0
RGlkRGlzcGF0Y2hPbkluamVjdGVkU2NyaXB0KGNhbGxJZCwgcmVzdWx0LmdldCgpLCBpc0V4Y2Vw
dGlvbik7CisgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKK30KKwogSW5qZWN0ZWRTY3JpcHQg
SW5qZWN0ZWRTY3JpcHRIb3N0OjppbmplY3RlZFNjcmlwdEZvcihTY3JpcHRTdGF0ZSogaW5zcGVj
dGVkU2NyaXB0U3RhdGUpCiB7CiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuY3BwIGIvV2ViQ29yZS9p
bnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuY3BwCmluZGV4IDU1MjU4NzcuLjI0MmZiZTIgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0LmNwcAorKysgYi9XZWJDb3Jl
L2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5jcHAKQEAgLTM0LDYgKzM0LDcgQEAKICNpZiBFTkFC
TEUoSU5TUEVDVE9SKQogCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJT
ZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKICNpbmNsdWRlICJTY3JpcHRGdW5jdGlvbkNhbGwuaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDMsMTEgKzQ0LDEwIEBAIEluamVjdGVkU2NyaXB0
OjpJbmplY3RlZFNjcmlwdChTY3JpcHRPYmplY3QgaW5qZWN0ZWRTY3JpcHRPYmplY3QpCiB7CiB9
CiAKLXZvaWQgSW5qZWN0ZWRTY3JpcHQ6OmRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJp
bmcmIG1ldGhvZE5hbWUsIGNvbnN0IFN0cmluZyYgYXJndW1lbnRzLCBib29sIGFzeW5jLCBTdHJp
bmcqIHJlc3VsdCwgYm9vbCogaGFkRXhjZXB0aW9uKSAKK3ZvaWQgSW5qZWN0ZWRTY3JpcHQ6OmRp
c3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZE5hbWUsIGNvbnN0IFN0cmlu
ZyYgYXJndW1lbnRzLCBib29sIGFzeW5jLCBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiog
cmVzdWx0LCBib29sKiBoYWRFeGNlcHRpb24pIAogewogICAgIEFTU0VSVCghaGFzTm9WYWx1ZSgp
KTsKLSAgICBTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUgPSBtX2luamVjdGVkU2NyaXB0T2JqZWN0
LnNjcmlwdFN0YXRlKCk7Ci0gICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKHNjcmlwdFN0
YXRlLCBtX2luamVjdGVkU2NyaXB0T2JqZWN0LCAiZGlzcGF0Y2giKTsKKyAgICBTY3JpcHRGdW5j
dGlvbkNhbGwgZnVuY3Rpb24obV9pbmplY3RlZFNjcmlwdE9iamVjdCwgImRpc3BhdGNoIik7CiAg
ICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQobWV0aG9kTmFtZSk7CiAgICAgZnVuY3Rpb24uYXBw
ZW5kQXJndW1lbnQoYXJndW1lbnRzKTsKICAgICBpZiAoYXN5bmMpCkBAIC01NSwzOCArNTUsMzMg
QEAgdm9pZCBJbmplY3RlZFNjcmlwdDo6ZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmlu
ZyYgbWV0aG9kTmFtZSwgY29uc3QgU3RyaW4KICAgICAqaGFkRXhjZXB0aW9uID0gZmFsc2U7CiAg
ICAgU2NyaXB0VmFsdWUgcmVzdWx0VmFsdWUgPSBmdW5jdGlvbi5jYWxsKCpoYWRFeGNlcHRpb24p
OwogICAgIGlmICghKmhhZEV4Y2VwdGlvbikKLSAgICAgICAgKnJlc3VsdCA9IHJlc3VsdFZhbHVl
LnRvU3RyaW5nKHNjcmlwdFN0YXRlKTsKKyAgICAgICAgKnJlc3VsdCA9IHNlcmlhbGl6ZShtX2lu
amVjdGVkU2NyaXB0T2JqZWN0LnNjcmlwdFN0YXRlKCksIHJlc3VsdFZhbHVlKTsKIH0KIAogI2lm
IEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQotU3RyaW5nIEluamVjdGVkU2NyaXB0OjpjYWxs
RnJhbWVzKCkKK1Bhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBJbmplY3RlZFNjcmlw
dDo6Y2FsbEZyYW1lcygpCiB7CiAgICAgQVNTRVJUKCFoYXNOb1ZhbHVlKCkpOwotICAgIFNjcmlw
dFN0YXRlKiBzY3JpcHRTdGF0ZSA9IG1faW5qZWN0ZWRTY3JpcHRPYmplY3Quc2NyaXB0U3RhdGUo
KTsKLSAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24oc2NyaXB0U3RhdGUsIG1faW5qZWN0
ZWRTY3JpcHRPYmplY3QsICJjYWxsRnJhbWVzIik7CisgICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1
bmN0aW9uKG1faW5qZWN0ZWRTY3JpcHRPYmplY3QsICJjYWxsRnJhbWVzIik7CiAgICAgU2NyaXB0
VmFsdWUgY2FsbEZyYW1lc1ZhbHVlID0gZnVuY3Rpb24uY2FsbCgpOwotICAgIHJldHVybiBjYWxs
RnJhbWVzVmFsdWUudG9TdHJpbmcoc2NyaXB0U3RhdGUpOworICAgIHJldHVybiBzZXJpYWxpemUo
bV9pbmplY3RlZFNjcmlwdE9iamVjdC5zY3JpcHRTdGF0ZSgpLCBjYWxsRnJhbWVzVmFsdWUpOwog
fQogI2VuZGlmCiAKLVN0cmluZyBJbmplY3RlZFNjcmlwdDo6d3JhcEFuZFN0cmluZ2lmeUZvckNv
bnNvbGUoU2NyaXB0VmFsdWUgdmFsdWUpCitQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZT4gSW5qZWN0ZWRTY3JpcHQ6OndyYXBGb3JDb25zb2xlKFNjcmlwdFZhbHVlIHZhbHVlKQogewog
ICAgIEFTU0VSVCghaGFzTm9WYWx1ZSgpKTsKLSAgICBTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUg
PSBtX2luamVjdGVkU2NyaXB0T2JqZWN0LnNjcmlwdFN0YXRlKCk7Ci0gICAgU2NyaXB0RnVuY3Rp
b25DYWxsIHdyYXBGdW5jdGlvbihzY3JpcHRTdGF0ZSwgbV9pbmplY3RlZFNjcmlwdE9iamVjdCwg
IndyYXBBbmRTdHJpbmdpZnlPYmplY3QiKTsKKyAgICBTY3JpcHRGdW5jdGlvbkNhbGwgd3JhcEZ1
bmN0aW9uKG1faW5qZWN0ZWRTY3JpcHRPYmplY3QsICJ3cmFwT2JqZWN0Iik7CiAgICAgd3JhcEZ1
bmN0aW9uLmFwcGVuZEFyZ3VtZW50KHZhbHVlKTsKICAgICB3cmFwRnVuY3Rpb24uYXBwZW5kQXJn
dW1lbnQoImNvbnNvbGUiKTsKICAgICBTY3JpcHRWYWx1ZSByID0gd3JhcEZ1bmN0aW9uLmNhbGwo
KTsKLSAgICBpZiAoci5oYXNOb1ZhbHVlKCkpCi0gICAgICAgIHJldHVybiAiIjsKLSAgICByZXR1
cm4gci50b1N0cmluZyhzY3JpcHRTdGF0ZSk7CisgICAgcmV0dXJuIHNlcmlhbGl6ZShtX2luamVj
dGVkU2NyaXB0T2JqZWN0LnNjcmlwdFN0YXRlKCksIHIpOwogfQogCiB2b2lkIEluamVjdGVkU2Ny
aXB0OjpyZWxlYXNlV3JhcHBlck9iamVjdEdyb3VwKGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXAp
CiB7CiAgICAgQVNTRVJUKCFoYXNOb1ZhbHVlKCkpOwotICAgIFNjcmlwdFN0YXRlKiBzY3JpcHRT
dGF0ZSA9IG1faW5qZWN0ZWRTY3JpcHRPYmplY3Quc2NyaXB0U3RhdGUoKTsKLSAgICBTY3JpcHRG
dW5jdGlvbkNhbGwgcmVsZWFzZUZ1bmN0aW9uKHNjcmlwdFN0YXRlLCBtX2luamVjdGVkU2NyaXB0
T2JqZWN0LCAicmVsZWFzZVdyYXBwZXJPYmplY3RHcm91cCIpOworICAgIFNjcmlwdEZ1bmN0aW9u
Q2FsbCByZWxlYXNlRnVuY3Rpb24obV9pbmplY3RlZFNjcmlwdE9iamVjdCwgInJlbGVhc2VXcmFw
cGVyT2JqZWN0R3JvdXAiKTsKICAgICByZWxlYXNlRnVuY3Rpb24uYXBwZW5kQXJndW1lbnQob2Jq
ZWN0R3JvdXApOwogICAgIHJlbGVhc2VGdW5jdGlvbi5jYWxsKCk7CiB9CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5q
ZWN0ZWRTY3JpcHQuaAppbmRleCBiNzBlZTM5Li5kYjQwZjgwIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luamVj
dGVkU2NyaXB0LmgKQEAgLTM0LDkgKzM0LDExIEBACiAjaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHRI
b3N0LmgiCiAjaW5jbHVkZSAiU2NyaXB0T2JqZWN0LmgiCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlh
YmxlLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCitjbGFzcyBTZXJpYWxpemVkU2NyaXB0VmFsdWU7CiBjbGFzcyBTdHJpbmc7CiAKIGNsYXNz
IEluamVjdGVkU2NyaXB0IHsKQEAgLTQ2LDExICs0OCwxMSBAQCBwdWJsaWM6CiAKICAgICBib29s
IGhhc05vVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2luamVjdGVkU2NyaXB0T2JqZWN0Lmhhc05v
VmFsdWUoKTsgfQogCi0gICAgdm9pZCBkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5n
JiBtZXRob2ROYW1lLCBjb25zdCBTdHJpbmcmIGFyZ3VtZW50cywgYm9vbCBhc3luYywgU3RyaW5n
KiByZXN1bHQsIGJvb2wqIGhhZEV4Y2VwdGlvbik7CisgICAgdm9pZCBkaXNwYXRjaChsb25nIGNh
bGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2ROYW1lLCBjb25zdCBTdHJpbmcmIGFyZ3VtZW50cywg
Ym9vbCBhc3luYywgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4qIHJlc3VsdCwgYm9vbCog
aGFkRXhjZXB0aW9uKTsKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKLSAgICBTdHJp
bmcgY2FsbEZyYW1lcygpOworICAgIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBj
YWxsRnJhbWVzKCk7CiAjZW5kaWYKLSAgICBTdHJpbmcgd3JhcEFuZFN0cmluZ2lmeUZvckNvbnNv
bGUoU2NyaXB0VmFsdWUpOworICAgIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB3
cmFwRm9yQ29uc29sZShTY3JpcHRWYWx1ZSk7CiAgICAgdm9pZCByZWxlYXNlV3JhcHBlck9iamVj
dEdyb3VwKGNvbnN0IFN0cmluZyYpOwogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9p
bnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luamVj
dGVkU2NyaXB0SG9zdC5jcHAKaW5kZXggMTNlMTU2YS4uNjJkYjRiNCAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcAorKysgYi9XZWJDb3JlL2luc3Bl
Y3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuY3BwCkBAIC00NSw4ICs0NSw2IEBACiAjaW5jbHVkZSAi
SW5zcGVjdG9yRnJvbnRlbmQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JSZXNvdXJjZS5oIgogI2lu
Y2x1ZGUgIlBhc3RlYm9hcmQuaCIKLSNpbmNsdWRlICJTY3JpcHRBcnJheS5oIgotI2luY2x1ZGUg
IlNjcmlwdEZ1bmN0aW9uQ2FsbC5oIgogCiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIp
ICYmIFVTRShKU0MpCiAjaW5jbHVkZSAiSmF2YVNjcmlwdENhbGxGcmFtZS5oIgpAQCAtMTYyLDcg
KzE2MCw3IEBAIHZvaWQgSW5qZWN0ZWRTY3JpcHRIb3N0OjpzZWxlY3RET01TdG9yYWdlKFN0b3Jh
Z2UqIHN0b3JhZ2UpCiB9CiAjZW5kaWYKIAotdm9pZCBJbmplY3RlZFNjcmlwdEhvc3Q6OnJlcG9y
dERpZERpc3BhdGNoT25JbmplY3RlZFNjcmlwdChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBy
ZXN1bHQsIGJvb2wgaXNFeGNlcHRpb24pCit2b2lkIEluamVjdGVkU2NyaXB0SG9zdDo6cmVwb3J0
RGlkRGlzcGF0Y2hPbkluamVjdGVkU2NyaXB0KGxvbmcgY2FsbElkLCBTZXJpYWxpemVkU2NyaXB0
VmFsdWUqIHJlc3VsdCwgYm9vbCBpc0V4Y2VwdGlvbikKIHsKICAgICBpZiAoSW5zcGVjdG9yRnJv
bnRlbmQqIGZyb250ZW5kID0gaW5zcGVjdG9yRnJvbnRlbmQoKSkKICAgICAgICAgZnJvbnRlbmQt
PmRpZERpc3BhdGNoT25JbmplY3RlZFNjcmlwdChjYWxsSWQsIHJlc3VsdCwgaXNFeGNlcHRpb24p
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmggYi9X
ZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuaAppbmRleCA5MDE0NzJjLi5mYjU2
MTE1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuaAor
KysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuaApAQCAtNDYsNiArNDYs
NyBAQCBjbGFzcyBJbnNwZWN0b3JET01BZ2VudDsKIGNsYXNzIEluc3BlY3RvckZyb250ZW5kOwog
Y2xhc3MgSmF2YVNjcmlwdENhbGxGcmFtZTsKIGNsYXNzIE5vZGU7CitjbGFzcyBTZXJpYWxpemVk
U2NyaXB0VmFsdWU7CiBjbGFzcyBTdG9yYWdlOwogCiBjbGFzcyBJbmplY3RlZFNjcmlwdEhvc3Qg
OiBwdWJsaWMgUmVmQ291bnRlZDxJbmplY3RlZFNjcmlwdEhvc3Q+CkBAIC04Miw3ICs4Myw3IEBA
IHB1YmxpYzoKICNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCiAgICAgdm9pZCBzZWxlY3RET01TdG9y
YWdlKFN0b3JhZ2UqIHN0b3JhZ2UpOwogI2VuZGlmCi0gICAgdm9pZCByZXBvcnREaWREaXNwYXRj
aE9uSW5qZWN0ZWRTY3JpcHQobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgcmVzdWx0LCBib29s
IGlzRXhjZXB0aW9uKTsKKyAgICB2b2lkIHJlcG9ydERpZERpc3BhdGNoT25JbmplY3RlZFNjcmlw
dChsb25nIGNhbGxJZCwgU2VyaWFsaXplZFNjcmlwdFZhbHVlKiByZXN1bHQsIGJvb2wgaXNFeGNl
cHRpb24pOwogCiAgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHRGb3IoU2NyaXB0U3Rh
dGUqKTsKICAgICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdEZvcklkKGxvbmcpOwpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmlkbCBiL1dlYkNv
cmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0SG9zdC5pZGwKaW5kZXggZDIyNGQxYS4uNzNhMzZm
ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmlkbAor
KysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuaWRsCkBAIC01NSw2ICs1
NSw2IEBAIG1vZHVsZSBjb3JlIHsKICAgICAgICAgW0N1c3RvbV0gdm9pZCBzZWxlY3RET01TdG9y
YWdlKGluIERPTU9iamVjdCBzdG9yYWdlKTsKICNlbmRpZgogCi0gICAgICAgIHZvaWQgcmVwb3J0
RGlkRGlzcGF0Y2hPbkluamVjdGVkU2NyaXB0KGluIGxvbmcgY2FsbElkLCBpbiBET01TdHJpbmcg
cmVzdWx0LCBpbiBib29sZWFuIGlzRXhjZXB0aW9uKTsKKyAgICAgICAgW0N1c3RvbV0gdm9pZCBy
ZXBvcnREaWREaXNwYXRjaE9uSW5qZWN0ZWRTY3JpcHQoaW4gbG9uZyBjYWxsSWQsIGluIERPTU9i
amVjdCByZXN1bHQsIGluIGJvb2xlYW4gaXNFeGNlcHRpb24pOwogICAgIH07CiB9CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmNwcCBiL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckJhY2tlbmQuY3BwCmluZGV4IDFjZTBlNjkuLjVlM2E5MTAgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuY3BwCisrKyBiL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuY3BwCkBAIC00OSw3ICs0OSw3IEBACiAjaW5j
bHVkZSAiSW5zcGVjdG9yUmVzb3VyY2UuaCIKICNpbmNsdWRlICJQYXN0ZWJvYXJkLmgiCiAjaW5j
bHVkZSAiU2NyaXB0QXJyYXkuaCIKLSNpbmNsdWRlICJTY3JpcHRGdW5jdGlvbkNhbGwuaCIKKyNp
bmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKIAogI2lmIEVOQUJMRShET01fU1RPUkFH
RSkKICNpbmNsdWRlICJTdG9yYWdlLmgiCkBAIC0yOTUsMTIgKzI5NSwxMiBAQCB2b2lkIEluc3Bl
Y3RvckJhY2tlbmQ6OmRpc3BhdGNoT25JbmplY3RlZFNjcmlwdChsb25nIGNhbGxJZCwgbG9uZyBp
bmplY3RlZFNjcmlwdAogICAgIGlmIChpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIFN0cmluZyByZXN1bHQ7CisgICAgUmVmUHRyPFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZT4gcmVzdWx0OwogICAgIGJvb2wgaGFkRXhjZXB0aW9uID0gZmFsc2U7CiAgICAg
aW5qZWN0ZWRTY3JpcHQuZGlzcGF0Y2goY2FsbElkLCBtZXRob2ROYW1lLCBhcmd1bWVudHMsIGFz
eW5jLCAmcmVzdWx0LCAmaGFkRXhjZXB0aW9uKTsKICAgICBpZiAoYXN5bmMpCiAgICAgICAgIHJl
dHVybjsgIC8vIEluamVjdGVkU2NyaXB0IHdpbGwgcmV0dXJuIHJlc3VsdCBhc3luY2hyb25vdXNs
eSBieSBtZWFucyBvZiA6OnJlcG9ydERpZERpc3BhdGNoT25JbmplY3RlZFNjcmlwdC4KLSAgICBm
cm9udGVuZC0+ZGlkRGlzcGF0Y2hPbkluamVjdGVkU2NyaXB0KGNhbGxJZCwgcmVzdWx0LCBoYWRF
eGNlcHRpb24pOworICAgIGZyb250ZW5kLT5kaWREaXNwYXRjaE9uSW5qZWN0ZWRTY3JpcHQoY2Fs
bElkLCByZXN1bHQuZ2V0KCksIGhhZEV4Y2VwdGlvbik7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQmFj
a2VuZDo6Z2V0Q2hpbGROb2Rlcyhsb25nIGNhbGxJZCwgbG9uZyBub2RlSWQpCmRpZmYgLS1naXQg
YS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcCBiL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCmluZGV4IGFlNGUyNDMuLjM2OTQ1MGUgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCisrKyBi
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCkBAIC01NDIsNyArNTQy
LDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzY3JpcHRPYmplY3RSZWFkeSgpCiB2b2lk
IEluc3BlY3RvckNvbnRyb2xsZXI6OnNldEZyb250ZW5kUHJveHlPYmplY3QoU2NyaXB0U3RhdGUq
IHNjcmlwdFN0YXRlLCBTY3JpcHRPYmplY3Qgd2ViSW5zcGVjdG9yT2JqLCBTY3JpcHRPYmplY3Qp
CiB7CiAgICAgbV9mcm9udGVuZFNjcmlwdFN0YXRlID0gc2NyaXB0U3RhdGU7Ci0gICAgbV9mcm9u
dGVuZC5zZXQobmV3IEluc3BlY3RvckZyb250ZW5kKHRoaXMsIHNjcmlwdFN0YXRlLCB3ZWJJbnNw
ZWN0b3JPYmopKTsKKyAgICBtX2Zyb250ZW5kLnNldChuZXcgSW5zcGVjdG9yRnJvbnRlbmQodGhp
cywgd2ViSW5zcGVjdG9yT2JqKSk7CiAgICAgcmVsZWFzZURPTUFnZW50KCk7CiAgICAgbV9kb21B
Z2VudCA9IEluc3BlY3RvckRPTUFnZW50OjpjcmVhdGUobV9mcm9udGVuZC5nZXQoKSk7CiAgICAg
aWYgKG1fdGltZWxpbmVBZ2VudCkKQEAgLTE1NjksOCArMTU2OSw4IEBAIHZvaWQgSW5zcGVjdG9y
Q29udHJvbGxlcjo6ZGlkUGF1c2UoKQogICAgIFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSA9IGNh
bGxGcmFtZS0+c2NvcGVDaGFpbigpLT5nbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKICAgICBB
U1NFUlQoc2NyaXB0U3RhdGUpOwogICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0g
bV9pbmplY3RlZFNjcmlwdEhvc3QtPmluamVjdGVkU2NyaXB0Rm9yKHNjcmlwdFN0YXRlKTsKLSAg
ICBTdHJpbmcgY2FsbEZyYW1lcyA9IGluamVjdGVkU2NyaXB0LmNhbGxGcmFtZXMoKTsKLSAgICBt
X2Zyb250ZW5kLT5wYXVzZWRTY3JpcHQoY2FsbEZyYW1lcyk7CisgICAgUmVmUHRyPFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZT4gY2FsbEZyYW1lcyA9IGluamVjdGVkU2NyaXB0LmNhbGxGcmFtZXMoKTsK
KyAgICBtX2Zyb250ZW5kLT5wYXVzZWRTY3JpcHQoY2FsbEZyYW1lcy5nZXQoKSk7CiB9CiAKIHZv
aWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkQ29udGludWUoKQpAQCAtMTU5Myw3ICsxNTkzLDcg
QEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRFdmFsdWF0ZUZvclRlc3RJbkZyb250ZW5k
KGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcKICAgICBTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUg
PSBzY3JpcHRTdGF0ZUZyb21QYWdlKGRlYnVnZ2VyV29ybGQoKSwgbV9pbnNwZWN0ZWRQYWdlKTsK
ICAgICBTY3JpcHRPYmplY3Qgd2luZG93OwogICAgIFNjcmlwdEdsb2JhbE9iamVjdDo6Z2V0KHNj
cmlwdFN0YXRlLCAid2luZG93Iiwgd2luZG93KTsKLSAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVu
Y3Rpb24oc2NyaXB0U3RhdGUsIHdpbmRvdywgImRpZEV2YWx1YXRlRm9yVGVzdEluRnJvbnRlbmQi
KTsKKyAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24od2luZG93LCAiZGlkRXZhbHVhdGVG
b3JUZXN0SW5Gcm9udGVuZCIpOwogICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGNhbGxJZCk7
CiAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoanNvblJlc3VsdCk7CiAgICAgZnVuY3Rpb24u
Y2FsbCgpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQu
Y3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuY3BwCmluZGV4IGMzYmYx
YjQuLjM0NTMxMjkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250
ZW5kLmNwcAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5jcHAKQEAg
LTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlICJTY3JpcHRPYmplY3QuaCIKICNpbmNsdWRlICJTY3Jp
cHRTdGF0ZS5oIgogI2luY2x1ZGUgIlNjcmlwdFN0cmluZy5oIgorI2luY2x1ZGUgIlNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZS5oIgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KIAogI2lmIEVOQUJMRShK
QVZBU0NSSVBUX0RFQlVHR0VSKSAmJiBVU0UoSlNDKQpAQCAtNTIsOSArNTMsOCBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLUluc3BlY3RvckZyb250ZW5kOjpJbnNwZWN0b3JGcm9udGVuZChJ
bnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyLCBTY3JpcHRTdGF0ZSogc2Ny
aXB0U3RhdGUsIFNjcmlwdE9iamVjdCB3ZWJJbnNwZWN0b3IpCitJbnNwZWN0b3JGcm9udGVuZDo6
SW5zcGVjdG9yRnJvbnRlbmQoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxl
ciwgU2NyaXB0T2JqZWN0IHdlYkluc3BlY3RvcikKICAgICA6IG1faW5zcGVjdG9yQ29udHJvbGxl
cihpbnNwZWN0b3JDb250cm9sbGVyKQotICAgICwgbV9zY3JpcHRTdGF0ZShzY3JpcHRTdGF0ZSkK
ICAgICAsIG1fd2ViSW5zcGVjdG9yKHdlYkluc3BlY3RvcikKIHsKIH0KQEAgLTY2LDEyICs2Niwx
MiBAQCBJbnNwZWN0b3JGcm9udGVuZDo6fkluc3BlY3RvckZyb250ZW5kKCkKIAogU2NyaXB0QXJy
YXkgSW5zcGVjdG9yRnJvbnRlbmQ6Om5ld1NjcmlwdEFycmF5KCkKIHsKLSAgICByZXR1cm4gU2Ny
aXB0QXJyYXk6OmNyZWF0ZU5ldyhtX3NjcmlwdFN0YXRlKTsKKyAgICByZXR1cm4gU2NyaXB0QXJy
YXk6OmNyZWF0ZU5ldyhzY3JpcHRTdGF0ZSgpKTsKIH0KIAogU2NyaXB0T2JqZWN0IEluc3BlY3Rv
ckZyb250ZW5kOjpuZXdTY3JpcHRPYmplY3QoKQogewotICAgIHJldHVybiBTY3JpcHRPYmplY3Q6
OmNyZWF0ZU5ldyhtX3NjcmlwdFN0YXRlKTsKKyAgICByZXR1cm4gU2NyaXB0T2JqZWN0OjpjcmVh
dGVOZXcoc2NyaXB0U3RhdGUoKSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OmRpZENv
bW1pdExvYWQoKQpAQCAtODEsNyArODEsNyBAQCB2b2lkIEluc3BlY3RvckZyb250ZW5kOjpkaWRD
b21taXRMb2FkKCkKIAogdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6cG9wdWxhdGVGcm9udGVuZFNl
dHRpbmdzKGNvbnN0IFN0cmluZyYgc2V0dGluZ3MpCiB7Ci0gICAgU2NyaXB0RnVuY3Rpb25DYWxs
IGZ1bmN0aW9uKG1fc2NyaXB0U3RhdGUsIG1fd2ViSW5zcGVjdG9yLCAiZGlzcGF0Y2giKTsKKyAg
ICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24obV93ZWJJbnNwZWN0b3IsICJkaXNwYXRjaCIp
OwogICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KCJwb3B1bGF0ZUZyb250ZW5kU2V0dGluZ3Mi
KTsKICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChzZXR0aW5ncyk7CiAgICAgZnVuY3Rpb24u
Y2FsbCgpOwpAQCAtODksNyArODksNyBAQCB2b2lkIEluc3BlY3RvckZyb250ZW5kOjpwb3B1bGF0
ZUZyb250ZW5kU2V0dGluZ3MoY29uc3QgU3RyaW5nJiBzZXR0aW5ncykKIAogdm9pZCBJbnNwZWN0
b3JGcm9udGVuZDo6dXBkYXRlQ29uc29sZU1lc3NhZ2VFeHBpcmVkQ291bnQodW5zaWduZWQgY291
bnQpCiB7Ci0gICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1fc2NyaXB0U3RhdGUsIG1f
d2ViSW5zcGVjdG9yLCAiZGlzcGF0Y2giKTsgCisgICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0
aW9uKG1fd2ViSW5zcGVjdG9yLCAiZGlzcGF0Y2giKTsgCiAgICAgZnVuY3Rpb24uYXBwZW5kQXJn
dW1lbnQoInVwZGF0ZUNvbnNvbGVNZXNzYWdlRXhwaXJlZENvdW50Iik7CiAgICAgZnVuY3Rpb24u
YXBwZW5kQXJndW1lbnQoY291bnQpOwogICAgIGZ1bmN0aW9uLmNhbGwoKTsKQEAgLTk3LDIyICs5
NywyNCBAQCB2b2lkIEluc3BlY3RvckZyb250ZW5kOjp1cGRhdGVDb25zb2xlTWVzc2FnZUV4cGly
ZWRDb3VudCh1bnNpZ25lZCBjb3VudCkKIAogdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6YWRkQ29u
c29sZU1lc3NhZ2UoY29uc3QgU2NyaXB0T2JqZWN0JiBtZXNzYWdlT2JqLCBjb25zdCBWZWN0b3I8
U2NyaXB0U3RyaW5nPiYgZnJhbWVzLCBTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUsIGNvbnN0IFZl
Y3RvcjxTY3JpcHRWYWx1ZT4gYXJndW1lbnRzLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiB7Ci0g
ICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1fc2NyaXB0U3RhdGUsIG1fd2ViSW5zcGVj
dG9yLCAiZGlzcGF0Y2giKTsgCisgICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1fd2Vi
SW5zcGVjdG9yLCAiZGlzcGF0Y2giKTsgCiAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoImFk
ZENvbnNvbGVNZXNzYWdlIik7CiAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQobWVzc2FnZU9i
aik7CiAgICAgaWYgKCFmcmFtZXMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGZ1bmN0aW9uLmFwcGVu
ZEFyZ3VtZW50KGZhbHNlKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZyYW1l
cy5zaXplKCk7ICsraSkKICAgICAgICAgICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGZyYW1l
c1tpXSk7CiAgICAgfSBlbHNlIGlmICghYXJndW1lbnRzLmlzRW1wdHkoKSkgewotICAgICAgICBm
dW5jdGlvbi5hcHBlbmRBcmd1bWVudCh0cnVlKTsKICAgICAgICAgSW5qZWN0ZWRTY3JpcHQgaW5q
ZWN0ZWRTY3JpcHQgPSBtX2luc3BlY3RvckNvbnRyb2xsZXItPmluamVjdGVkU2NyaXB0SG9zdCgp
LT5pbmplY3RlZFNjcmlwdEZvcihzY3JpcHRTdGF0ZSk7CiAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBhcmd1bWVudHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIFN0cmluZyBz
ID0gaW5qZWN0ZWRTY3JpcHQud3JhcEFuZFN0cmluZ2lmeUZvckNvbnNvbGUoYXJndW1lbnRzW2ld
KTsKLSAgICAgICAgICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KHMpOworICAgICAgICAgICAg
UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplZFZhbHVlID0gaW5qZWN0ZWRT
Y3JpcHQud3JhcEZvckNvbnNvbGUoYXJndW1lbnRzW2ldKTsKKyAgICAgICAgICAgIFNjcmlwdFZh
bHVlIHNjcmlwdFZhbHVlID0gZGVzZXJpYWxpemUodGhpcy0+c2NyaXB0U3RhdGUoKSwgc2VyaWFs
aXplZFZhbHVlLmdldCgpKTsKKyAgICAgICAgICAgIGlmIChzY3JpcHRWYWx1ZS5oYXNOb1ZhbHVl
KCkpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmdW5jdGlvbi5hcHBlbmRB
cmd1bWVudChzY3JpcHRWYWx1ZSk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICBm
dW5jdGlvbi5hcHBlbmRBcmd1bWVudChmYWxzZSk7CiAgICAgICAgIGZ1bmN0aW9uLmFwcGVuZEFy
Z3VtZW50KG1lc3NhZ2UpOwogICAgIH0KICAgICBmdW5jdGlvbi5jYWxsKCk7CkBAIC0xMjAsNyAr
MTIyLDcgQEAgdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6YWRkQ29uc29sZU1lc3NhZ2UoY29uc3Qg
U2NyaXB0T2JqZWN0JiBtZXNzYWdlT2JqLCBjb25zdAogCiB2b2lkIEluc3BlY3RvckZyb250ZW5k
Ojp1cGRhdGVDb25zb2xlTWVzc2FnZVJlcGVhdENvdW50KHVuc2lnbmVkIGNvdW50KQogewotICAg
IFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3NjcmlwdFN0YXRlLCBtX3dlYkluc3BlY3Rv
ciwgImRpc3BhdGNoIik7IAorICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3dlYklu
c3BlY3RvciwgImRpc3BhdGNoIik7IAogICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KCJ1cGRh
dGVDb25zb2xlTWVzc2FnZVJlcGVhdENvdW50Iik7CiAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1l
bnQoY291bnQpOwogICAgIGZ1bmN0aW9uLmNhbGwoKTsKQEAgLTEzMyw3ICsxMzUsNyBAQCB2b2lk
IEluc3BlY3RvckZyb250ZW5kOjpjbGVhckNvbnNvbGVNZXNzYWdlcygpCiAKIGJvb2wgSW5zcGVj
dG9yRnJvbnRlbmQ6OnVwZGF0ZVJlc291cmNlKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29u
c3QgU2NyaXB0T2JqZWN0JiByZXNvdXJjZU9iaikKIHsKLSAgICBTY3JpcHRGdW5jdGlvbkNhbGwg
ZnVuY3Rpb24obV9zY3JpcHRTdGF0ZSwgbV93ZWJJbnNwZWN0b3IsICJkaXNwYXRjaCIpOyAKKyAg
ICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24obV93ZWJJbnNwZWN0b3IsICJkaXNwYXRjaCIp
OyAKICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudCgidXBkYXRlUmVzb3VyY2UiKTsKICAgICBm
dW5jdGlvbi5hcHBlbmRBcmd1bWVudChpZGVudGlmaWVyKTsKICAgICBmdW5jdGlvbi5hcHBlbmRB
cmd1bWVudChyZXNvdXJjZU9iaik7CkBAIC0xNDQsNyArMTQ2LDcgQEAgYm9vbCBJbnNwZWN0b3JG
cm9udGVuZDo6dXBkYXRlUmVzb3VyY2UodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBT
Y3JpcHRPYmoKIAogdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6cmVtb3ZlUmVzb3VyY2UodW5zaWdu
ZWQgbG9uZyBpZGVudGlmaWVyKQogewotICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbiht
X3NjcmlwdFN0YXRlLCBtX3dlYkluc3BlY3RvciwgImRpc3BhdGNoIik7IAorICAgIFNjcmlwdEZ1
bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3dlYkluc3BlY3RvciwgImRpc3BhdGNoIik7IAogICAgIGZ1
bmN0aW9uLmFwcGVuZEFyZ3VtZW50KCJyZW1vdmVSZXNvdXJjZSIpOwogICAgIGZ1bmN0aW9uLmFw
cGVuZEFyZ3VtZW50KGlkZW50aWZpZXIpOwogICAgIGZ1bmN0aW9uLmNhbGwoKTsKQEAgLTE1Miw3
ICsxNTQsNyBAQCB2b2lkIEluc3BlY3RvckZyb250ZW5kOjpyZW1vdmVSZXNvdXJjZSh1bnNpZ25l
ZCBsb25nIGlkZW50aWZpZXIpCiAKIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OmRpZEdldFJlc291
cmNlQ29udGVudChpbnQgY2FsbElkLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQpCiB7Ci0gICAgU2Ny
aXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1fc2NyaXB0U3RhdGUsIG1fd2ViSW5zcGVjdG9yLCAi
ZGlzcGF0Y2giKTsKKyAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24obV93ZWJJbnNwZWN0
b3IsICJkaXNwYXRjaCIpOwogICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KCJkaWRHZXRSZXNv
dXJjZUNvbnRlbnQiKTsKICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChjYWxsSWQpOwogICAg
IGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGNvbnRlbnQpOwpAQCAtMTYxLDcgKzE2Myw3IEBAIHZv
aWQgSW5zcGVjdG9yRnJvbnRlbmQ6OmRpZEdldFJlc291cmNlQ29udGVudChpbnQgY2FsbElkLCBj
b25zdCBTdHJpbmcmIGNvbnRlbnQpCiAKIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OnVwZGF0ZUZv
Y3VzZWROb2RlKGxvbmcgbm9kZUlkKQogewotICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlv
bihtX3NjcmlwdFN0YXRlLCBtX3dlYkluc3BlY3RvciwgImRpc3BhdGNoIik7IAorICAgIFNjcmlw
dEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3dlYkluc3BlY3RvciwgImRpc3BhdGNoIik7IAogICAg
IGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KCJ1cGRhdGVGb2N1c2VkTm9kZSIpOwogICAgIGZ1bmN0
aW9uLmFwcGVuZEFyZ3VtZW50KG5vZGVJZCk7CiAgICAgZnVuY3Rpb24uY2FsbCgpOwpAQCAtMTY5
LDcgKzE3MSw3IEBAIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OnVwZGF0ZUZvY3VzZWROb2RlKGxv
bmcgbm9kZUlkKQogCiB2b2lkIEluc3BlY3RvckZyb250ZW5kOjpzZXRBdHRhY2hlZFdpbmRvdyhi
b29sIGF0dGFjaGVkKQogewotICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3Njcmlw
dFN0YXRlLCBtX3dlYkluc3BlY3RvciwgImRpc3BhdGNoIik7IAorICAgIFNjcmlwdEZ1bmN0aW9u
Q2FsbCBmdW5jdGlvbihtX3dlYkluc3BlY3RvciwgImRpc3BhdGNoIik7IAogICAgIGZ1bmN0aW9u
LmFwcGVuZEFyZ3VtZW50KCJzZXRBdHRhY2hlZFdpbmRvdyIpOwogICAgIGZ1bmN0aW9uLmFwcGVu
ZEFyZ3VtZW50KGF0dGFjaGVkKTsKICAgICBmdW5jdGlvbi5jYWxsKCk7CkBAIC0yNDEsNyArMjQz
LDcgQEAgdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6dGltZWxpbmVQcm9maWxlcldhc1N0b3BwZWQo
KQogCiB2b2lkIEluc3BlY3RvckZyb250ZW5kOjphZGRSZWNvcmRUb1RpbWVsaW5lKGNvbnN0IFNj
cmlwdE9iamVjdCYgcmVjb3JkKQogewotICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbiht
X3NjcmlwdFN0YXRlLCBtX3dlYkluc3BlY3RvciwgImRpc3BhdGNoIik7IAorICAgIFNjcmlwdEZ1
bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3dlYkluc3BlY3RvciwgImRpc3BhdGNoIik7IAogICAgIGZ1
bmN0aW9uLmFwcGVuZEFyZ3VtZW50KCJhZGRSZWNvcmRUb1RpbWVsaW5lIik7CiAgICAgZnVuY3Rp
b24uYXBwZW5kQXJndW1lbnQocmVjb3JkKTsKICAgICBmdW5jdGlvbi5jYWxsKCk7CkBAIC0yNzUs
NyArMjc3LDcgQEAgdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6cHJvZmlsZXJXYXNEaXNhYmxlZCgp
CiAKIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OnBhcnNlZFNjcmlwdFNvdXJjZShjb25zdCBKU0M6
OlNvdXJjZUNvZGUmIHNvdXJjZSkKIHsKLSAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24o
bV9zY3JpcHRTdGF0ZSwgbV93ZWJJbnNwZWN0b3IsICJkaXNwYXRjaCIpOyAKKyAgICBTY3JpcHRG
dW5jdGlvbkNhbGwgZnVuY3Rpb24obV93ZWJJbnNwZWN0b3IsICJkaXNwYXRjaCIpOyAKICAgICBm
dW5jdGlvbi5hcHBlbmRBcmd1bWVudCgicGFyc2VkU2NyaXB0U291cmNlIik7CiAgICAgZnVuY3Rp
b24uYXBwZW5kQXJndW1lbnQoSlNDOjpVU3RyaW5nKEpTQzo6VVN0cmluZzo6ZnJvbShzb3VyY2Uu
cHJvdmlkZXIoKS0+YXNJRCgpKSkpOwogICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KHNvdXJj
ZS5wcm92aWRlcigpLT51cmwoKSk7CkBAIC0yODYsNyArMjg4LDcgQEAgdm9pZCBJbnNwZWN0b3JG
cm9udGVuZDo6cGFyc2VkU2NyaXB0U291cmNlKGNvbnN0IEpTQzo6U291cmNlQ29kZSYgc291cmNl
KQogCiB2b2lkIEluc3BlY3RvckZyb250ZW5kOjpmYWlsZWRUb1BhcnNlU2NyaXB0U291cmNlKGNv
bnN0IEpTQzo6U291cmNlQ29kZSYgc291cmNlLCBpbnQgZXJyb3JMaW5lLCBjb25zdCBKU0M6OlVT
dHJpbmcmIGVycm9yTWVzc2FnZSkKIHsKLSAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24o
bV9zY3JpcHRTdGF0ZSwgbV93ZWJJbnNwZWN0b3IsICJkaXNwYXRjaCIpOyAKKyAgICBTY3JpcHRG
dW5jdGlvbkNhbGwgZnVuY3Rpb24obV93ZWJJbnNwZWN0b3IsICJkaXNwYXRjaCIpOyAKICAgICBm
dW5jdGlvbi5hcHBlbmRBcmd1bWVudCgiZmFpbGVkVG9QYXJzZVNjcmlwdFNvdXJjZSIpOwogICAg
IGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KHNvdXJjZS5wcm92aWRlcigpLT51cmwoKSk7CiAgICAg
ZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoSlNDOjpVU3RyaW5nKHNvdXJjZS5kYXRhKCksIHNvdXJj
ZS5sZW5ndGgoKSkpOwpAQCAtMjk4LDcgKzMwMCw3IEBAIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6
OmZhaWxlZFRvUGFyc2VTY3JpcHRTb3VyY2UoY29uc3QgSlNDOjpTb3VyY2VDb2RlJiBzb3VyY2Us
CiAKIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OmFkZFByb2ZpbGVIZWFkZXIoY29uc3QgU2NyaXB0
VmFsdWUmIHByb2ZpbGUpCiB7Ci0gICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1fc2Ny
aXB0U3RhdGUsIG1fd2ViSW5zcGVjdG9yLCAiZGlzcGF0Y2giKTsgCisgICAgU2NyaXB0RnVuY3Rp
b25DYWxsIGZ1bmN0aW9uKG1fd2ViSW5zcGVjdG9yLCAiZGlzcGF0Y2giKTsgCiAgICAgZnVuY3Rp
b24uYXBwZW5kQXJndW1lbnQoImFkZFByb2ZpbGVIZWFkZXIiKTsKICAgICBmdW5jdGlvbi5hcHBl
bmRBcmd1bWVudChwcm9maWxlKTsKICAgICBmdW5jdGlvbi5jYWxsKCk7CkBAIC0zMDYsNyArMzA4
LDcgQEAgdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6YWRkUHJvZmlsZUhlYWRlcihjb25zdCBTY3Jp
cHRWYWx1ZSYgcHJvZmlsZSkKIAogdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6c2V0UmVjb3JkaW5n
UHJvZmlsZShib29sIGlzUHJvZmlsaW5nKQogewotICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5j
dGlvbihtX3NjcmlwdFN0YXRlLCBtX3dlYkluc3BlY3RvciwgImRpc3BhdGNoIik7IAorICAgIFNj
cmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3dlYkluc3BlY3RvciwgImRpc3BhdGNoIik7IAog
ICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KCJzZXRSZWNvcmRpbmdQcm9maWxlIik7CiAgICAg
ZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoaXNQcm9maWxpbmcpOwogICAgIGZ1bmN0aW9uLmNhbGwo
KTsKQEAgLTMxNCw3ICszMTYsNyBAQCB2b2lkIEluc3BlY3RvckZyb250ZW5kOjpzZXRSZWNvcmRp
bmdQcm9maWxlKGJvb2wgaXNQcm9maWxpbmcpCiAKIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OmRp
ZEdldFByb2ZpbGVIZWFkZXJzKGludCBjYWxsSWQsIGNvbnN0IFNjcmlwdEFycmF5JiBoZWFkZXJz
KQogewotICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3NjcmlwdFN0YXRlLCBtX3dl
Ykluc3BlY3RvciwgImRpc3BhdGNoIik7IAorICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlv
bihtX3dlYkluc3BlY3RvciwgImRpc3BhdGNoIik7IAogICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3Vt
ZW50KCJkaWRHZXRQcm9maWxlSGVhZGVycyIpOwogICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50
KGNhbGxJZCk7CiAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoaGVhZGVycyk7CkBAIC0zMjMs
MTggKzMyNSwxOSBAQCB2b2lkIEluc3BlY3RvckZyb250ZW5kOjpkaWRHZXRQcm9maWxlSGVhZGVy
cyhpbnQgY2FsbElkLCBjb25zdCBTY3JpcHRBcnJheSYgaGVhZAogCiB2b2lkIEluc3BlY3RvckZy
b250ZW5kOjpkaWRHZXRQcm9maWxlKGludCBjYWxsSWQsIGNvbnN0IFNjcmlwdFZhbHVlJiBwcm9m
aWxlKQogewotICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3NjcmlwdFN0YXRlLCBt
X3dlYkluc3BlY3RvciwgImRpc3BhdGNoIik7IAorICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5j
dGlvbihtX3dlYkluc3BlY3RvciwgImRpc3BhdGNoIik7IAogICAgIGZ1bmN0aW9uLmFwcGVuZEFy
Z3VtZW50KCJkaWRHZXRQcm9maWxlIik7CiAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoY2Fs
bElkKTsKICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChwcm9maWxlKTsKICAgICBmdW5jdGlv
bi5jYWxsKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OnBhdXNlZFNjcmlwdChjb25z
dCBTdHJpbmcmIGNhbGxGcmFtZXMpCit2b2lkIEluc3BlY3RvckZyb250ZW5kOjpwYXVzZWRTY3Jp
cHQoU2VyaWFsaXplZFNjcmlwdFZhbHVlKiBjYWxsRnJhbWVzKQogewotICAgIFNjcmlwdEZ1bmN0
aW9uQ2FsbCBmdW5jdGlvbihtX3NjcmlwdFN0YXRlLCBtX3dlYkluc3BlY3RvciwgImRpc3BhdGNo
Iik7IAorICAgIFNjcmlwdFZhbHVlIGNhbGxGcmFtZXNWYWx1ZSA9IGRlc2VyaWFsaXplKHNjcmlw
dFN0YXRlKCksIGNhbGxGcmFtZXMpOworICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbiht
X3dlYkluc3BlY3RvciwgImRpc3BhdGNoIik7IAogICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50
KCJwYXVzZWRTY3JpcHQiKTsKLSAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChjYWxsRnJhbWVz
KTsKKyAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChjYWxsRnJhbWVzVmFsdWUpOwogICAgIGZ1
bmN0aW9uLmNhbGwoKTsKIH0KIApAQCAtMzQ2LDcgKzM0OSw3IEBAIHZvaWQgSW5zcGVjdG9yRnJv
bnRlbmQ6OnJlc3VtZWRTY3JpcHQoKQogCiB2b2lkIEluc3BlY3RvckZyb250ZW5kOjpzZXREb2N1
bWVudChjb25zdCBTY3JpcHRPYmplY3QmIHJvb3QpCiB7Ci0gICAgU2NyaXB0RnVuY3Rpb25DYWxs
IGZ1bmN0aW9uKG1fc2NyaXB0U3RhdGUsIG1fd2ViSW5zcGVjdG9yLCAiZGlzcGF0Y2giKTsgCisg
ICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1fd2ViSW5zcGVjdG9yLCAiZGlzcGF0Y2gi
KTsgCiAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoInNldERvY3VtZW50Iik7CiAgICAgZnVu
Y3Rpb24uYXBwZW5kQXJndW1lbnQocm9vdCk7CiAgICAgZnVuY3Rpb24uY2FsbCgpOwpAQCAtMzU0
LDcgKzM1Nyw3IEBAIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OnNldERvY3VtZW50KGNvbnN0IFNj
cmlwdE9iamVjdCYgcm9vdCkKIAogdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6c2V0RGV0YWNoZWRS
b290KGNvbnN0IFNjcmlwdE9iamVjdCYgcm9vdCkKIHsKLSAgICBTY3JpcHRGdW5jdGlvbkNhbGwg
ZnVuY3Rpb24obV9zY3JpcHRTdGF0ZSwgbV93ZWJJbnNwZWN0b3IsICJkaXNwYXRjaCIpOyAKKyAg
ICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24obV93ZWJJbnNwZWN0b3IsICJkaXNwYXRjaCIp
OyAKICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudCgic2V0RGV0YWNoZWRSb290Iik7CiAgICAg
ZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQocm9vdCk7CiAgICAgZnVuY3Rpb24uY2FsbCgpOwpAQCAt
MzYyLDcgKzM2NSw3IEBAIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OnNldERldGFjaGVkUm9vdChj
b25zdCBTY3JpcHRPYmplY3QmIHJvb3QpCiAKIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OnNldENo
aWxkTm9kZXMoaW50IHBhcmVudElkLCBjb25zdCBTY3JpcHRBcnJheSYgbm9kZXMpCiB7Ci0gICAg
U2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1fc2NyaXB0U3RhdGUsIG1fd2ViSW5zcGVjdG9y
LCAiZGlzcGF0Y2giKTsgCisgICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1fd2ViSW5z
cGVjdG9yLCAiZGlzcGF0Y2giKTsgCiAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoInNldENo
aWxkTm9kZXMiKTsKICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChwYXJlbnRJZCk7CiAgICAg
ZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQobm9kZXMpOwpAQCAtMzcxLDcgKzM3NCw3IEBAIHZvaWQg
SW5zcGVjdG9yRnJvbnRlbmQ6OnNldENoaWxkTm9kZXMoaW50IHBhcmVudElkLCBjb25zdCBTY3Jp
cHRBcnJheSYgbm9kZXMpCiAKIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OmNoaWxkTm9kZUNvdW50
VXBkYXRlZChpbnQgaWQsIGludCBuZXdWYWx1ZSkKIHsKLSAgICBTY3JpcHRGdW5jdGlvbkNhbGwg
ZnVuY3Rpb24obV9zY3JpcHRTdGF0ZSwgbV93ZWJJbnNwZWN0b3IsICJkaXNwYXRjaCIpOyAKKyAg
ICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24obV93ZWJJbnNwZWN0b3IsICJkaXNwYXRjaCIp
OyAKICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudCgiY2hpbGROb2RlQ291bnRVcGRhdGVkIik7
CiAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoaWQpOwogICAgIGZ1bmN0aW9uLmFwcGVuZEFy
Z3VtZW50KG5ld1ZhbHVlKTsKQEAgLTM4MCw3ICszODMsNyBAQCB2b2lkIEluc3BlY3RvckZyb250
ZW5kOjpjaGlsZE5vZGVDb3VudFVwZGF0ZWQoaW50IGlkLCBpbnQgbmV3VmFsdWUpCiAKIHZvaWQg
SW5zcGVjdG9yRnJvbnRlbmQ6OmNoaWxkTm9kZUluc2VydGVkKGludCBwYXJlbnRJZCwgaW50IHBy
ZXZJZCwgY29uc3QgU2NyaXB0T2JqZWN0JiBub2RlKQogewotICAgIFNjcmlwdEZ1bmN0aW9uQ2Fs
bCBmdW5jdGlvbihtX3NjcmlwdFN0YXRlLCBtX3dlYkluc3BlY3RvciwgImRpc3BhdGNoIik7IAor
ICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3dlYkluc3BlY3RvciwgImRpc3BhdGNo
Iik7IAogICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KCJjaGlsZE5vZGVJbnNlcnRlZCIpOwog
ICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KHBhcmVudElkKTsKICAgICBmdW5jdGlvbi5hcHBl
bmRBcmd1bWVudChwcmV2SWQpOwpAQCAtMzkwLDcgKzM5Myw3IEBAIHZvaWQgSW5zcGVjdG9yRnJv
bnRlbmQ6OmNoaWxkTm9kZUluc2VydGVkKGludCBwYXJlbnRJZCwgaW50IHByZXZJZCwgY29uc3Qg
U2NyaXB0CiAKIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OmNoaWxkTm9kZVJlbW92ZWQoaW50IHBh
cmVudElkLCBpbnQgaWQpCiB7Ci0gICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1fc2Ny
aXB0U3RhdGUsIG1fd2ViSW5zcGVjdG9yLCAiZGlzcGF0Y2giKTsgCisgICAgU2NyaXB0RnVuY3Rp
b25DYWxsIGZ1bmN0aW9uKG1fd2ViSW5zcGVjdG9yLCAiZGlzcGF0Y2giKTsgCiAgICAgZnVuY3Rp
b24uYXBwZW5kQXJndW1lbnQoImNoaWxkTm9kZVJlbW92ZWQiKTsKICAgICBmdW5jdGlvbi5hcHBl
bmRBcmd1bWVudChwYXJlbnRJZCk7CiAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoaWQpOwpA
QCAtMzk5LDcgKzQwMiw3IEBAIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OmNoaWxkTm9kZVJlbW92
ZWQoaW50IHBhcmVudElkLCBpbnQgaWQpCiAKIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OmF0dHJp
YnV0ZXNVcGRhdGVkKGludCBpZCwgY29uc3QgU2NyaXB0QXJyYXkmIGF0dHJpYnV0ZXMpCiB7Ci0g
ICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1fc2NyaXB0U3RhdGUsIG1fd2ViSW5zcGVj
dG9yLCAiZGlzcGF0Y2giKTsgCisgICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1fd2Vi
SW5zcGVjdG9yLCAiZGlzcGF0Y2giKTsgCiAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoImF0
dHJpYnV0ZXNVcGRhdGVkIik7CiAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoaWQpOwogICAg
IGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGF0dHJpYnV0ZXMpOwpAQCAtNDA4LDcgKzQxMSw3IEBA
IHZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OmF0dHJpYnV0ZXNVcGRhdGVkKGludCBpZCwgY29uc3Qg
U2NyaXB0QXJyYXkmIGF0dHJpYnV0ZXMpCiAKIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OmRpZFJl
bW92ZU5vZGUoaW50IGNhbGxJZCwgaW50IG5vZGVJZCkKIHsKLSAgICBTY3JpcHRGdW5jdGlvbkNh
bGwgZnVuY3Rpb24obV9zY3JpcHRTdGF0ZSwgbV93ZWJJbnNwZWN0b3IsICJkaXNwYXRjaCIpOyAK
KyAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24obV93ZWJJbnNwZWN0b3IsICJkaXNwYXRj
aCIpOyAKICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudCgiZGlkUmVtb3ZlTm9kZSIpOwogICAg
IGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGNhbGxJZCk7CiAgICAgZnVuY3Rpb24uYXBwZW5kQXJn
dW1lbnQobm9kZUlkKTsKQEAgLTQxNyw3ICs0MjAsNyBAQCB2b2lkIEluc3BlY3RvckZyb250ZW5k
OjpkaWRSZW1vdmVOb2RlKGludCBjYWxsSWQsIGludCBub2RlSWQpCiAKIHZvaWQgSW5zcGVjdG9y
RnJvbnRlbmQ6OmRpZEdldENoaWxkTm9kZXMoaW50IGNhbGxJZCkKIHsKLSAgICBTY3JpcHRGdW5j
dGlvbkNhbGwgZnVuY3Rpb24obV9zY3JpcHRTdGF0ZSwgbV93ZWJJbnNwZWN0b3IsICJkaXNwYXRj
aCIpOyAKKyAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24obV93ZWJJbnNwZWN0b3IsICJk
aXNwYXRjaCIpOyAKICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudCgiZGlkR2V0Q2hpbGROb2Rl
cyIpOwogICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGNhbGxJZCk7CiAgICAgZnVuY3Rpb24u
Y2FsbCgpOwpAQCAtNDI1LDcgKzQyOCw3IEBAIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OmRpZEdl
dENoaWxkTm9kZXMoaW50IGNhbGxJZCkKIAogdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6ZGlkQXBw
bHlEb21DaGFuZ2UoaW50IGNhbGxJZCwgYm9vbCBzdWNjZXNzKQogewotICAgIFNjcmlwdEZ1bmN0
aW9uQ2FsbCBmdW5jdGlvbihtX3NjcmlwdFN0YXRlLCBtX3dlYkluc3BlY3RvciwgImRpc3BhdGNo
Iik7IAorICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3dlYkluc3BlY3RvciwgImRp
c3BhdGNoIik7IAogICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KCJkaWRBcHBseURvbUNoYW5n
ZSIpOwogICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGNhbGxJZCk7CiAgICAgZnVuY3Rpb24u
YXBwZW5kQXJndW1lbnQoc3VjY2Vzcyk7CkBAIC00MzQsNyArNDM3LDcgQEAgdm9pZCBJbnNwZWN0
b3JGcm9udGVuZDo6ZGlkQXBwbHlEb21DaGFuZ2UoaW50IGNhbGxJZCwgYm9vbCBzdWNjZXNzKQog
CiB2b2lkIEluc3BlY3RvckZyb250ZW5kOjpkaWRHZXRFdmVudExpc3RlbmVyc0Zvck5vZGUoaW50
IGNhbGxJZCwgaW50IG5vZGVJZCwgU2NyaXB0QXJyYXkmIGxpc3RlbmVyc0FycmF5KQogewotICAg
IFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3NjcmlwdFN0YXRlLCBtX3dlYkluc3BlY3Rv
ciwgImRpc3BhdGNoIik7IAorICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3dlYklu
c3BlY3RvciwgImRpc3BhdGNoIik7IAogICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KCJkaWRH
ZXRFdmVudExpc3RlbmVyc0Zvck5vZGUiKTsKICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChj
YWxsSWQpOwogICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KG5vZGVJZCk7CkBAIC00NDQsNyAr
NDQ3LDcgQEAgdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6ZGlkR2V0RXZlbnRMaXN0ZW5lcnNGb3JO
b2RlKGludCBjYWxsSWQsIGludCBub2RlSWQsIFNjcmkKIAogdm9pZCBJbnNwZWN0b3JGcm9udGVu
ZDo6ZGlkR2V0Q29va2llcyhpbnQgY2FsbElkLCBjb25zdCBTY3JpcHRBcnJheSYgY29va2llcywg
Y29uc3QgU3RyaW5nJiBjb29raWVzU3RyaW5nKQogewotICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBm
dW5jdGlvbihtX3NjcmlwdFN0YXRlLCBtX3dlYkluc3BlY3RvciwgImRpc3BhdGNoIik7IAorICAg
IFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3dlYkluc3BlY3RvciwgImRpc3BhdGNoIik7
IAogICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KCJkaWRHZXRDb29raWVzIik7CiAgICAgZnVu
Y3Rpb24uYXBwZW5kQXJndW1lbnQoY2FsbElkKTsKICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVu
dChjb29raWVzKTsKQEAgLTQ1MiwxMiArNDU1LDE3IEBAIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6
OmRpZEdldENvb2tpZXMoaW50IGNhbGxJZCwgY29uc3QgU2NyaXB0QXJyYXkmIGNvb2tpZXMsIGNv
CiAgICAgZnVuY3Rpb24uY2FsbCgpOwogfQogCi12b2lkIEluc3BlY3RvckZyb250ZW5kOjpkaWRE
aXNwYXRjaE9uSW5qZWN0ZWRTY3JpcHQoaW50IGNhbGxJZCwgY29uc3QgU3RyaW5nJiByZXN1bHQs
IGJvb2wgaXNFeGNlcHRpb24pCit2b2lkIEluc3BlY3RvckZyb250ZW5kOjpkaWREaXNwYXRjaE9u
SW5qZWN0ZWRTY3JpcHQoaW50IGNhbGxJZCwgU2VyaWFsaXplZFNjcmlwdFZhbHVlKiByZXN1bHQs
IGJvb2wgaXNFeGNlcHRpb24pCiB7Ci0gICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1f
c2NyaXB0U3RhdGUsIG1fd2ViSW5zcGVjdG9yLCAiZGlzcGF0Y2giKTsgCisgICAgU2NyaXB0RnVu
Y3Rpb25DYWxsIGZ1bmN0aW9uKG1fd2ViSW5zcGVjdG9yLCAiZGlzcGF0Y2giKTsgCiAgICAgZnVu
Y3Rpb24uYXBwZW5kQXJndW1lbnQoImRpZERpc3BhdGNoT25JbmplY3RlZFNjcmlwdCIpOwogICAg
IGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGNhbGxJZCk7Ci0gICAgZnVuY3Rpb24uYXBwZW5kQXJn
dW1lbnQocmVzdWx0KTsKKyAgICBpZiAoaXNFeGNlcHRpb24pCisgICAgICAgIGZ1bmN0aW9uLmFw
cGVuZEFyZ3VtZW50KCIiKTsKKyAgICBlbHNlIHsKKyAgICAgICAgU2NyaXB0VmFsdWUgcmVzdWx0
VmFsdWUgPSBkZXNlcmlhbGl6ZShzY3JpcHRTdGF0ZSgpLCByZXN1bHQpOworICAgICAgICBmdW5j
dGlvbi5hcHBlbmRBcmd1bWVudChyZXN1bHRWYWx1ZSk7CisgICAgfQogICAgIGZ1bmN0aW9uLmFw
cGVuZEFyZ3VtZW50KGlzRXhjZXB0aW9uKTsKICAgICBmdW5jdGlvbi5jYWxsKCk7CiB9CkBAIC00
NjUsNyArNDczLDcgQEAgdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6ZGlkRGlzcGF0Y2hPbkluamVj
dGVkU2NyaXB0KGludCBjYWxsSWQsIGNvbnN0IFN0cmluZyYgcmUKICNpZiBFTkFCTEUoREFUQUJB
U0UpCiBib29sIEluc3BlY3RvckZyb250ZW5kOjphZGREYXRhYmFzZShjb25zdCBTY3JpcHRPYmpl
Y3QmIGRiT2JqZWN0KQogewotICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3Njcmlw
dFN0YXRlLCBtX3dlYkluc3BlY3RvciwgImRpc3BhdGNoIik7IAorICAgIFNjcmlwdEZ1bmN0aW9u
Q2FsbCBmdW5jdGlvbihtX3dlYkluc3BlY3RvciwgImRpc3BhdGNoIik7IAogICAgIGZ1bmN0aW9u
LmFwcGVuZEFyZ3VtZW50KCJhZGREYXRhYmFzZSIpOwogICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3Vt
ZW50KGRiT2JqZWN0KTsKICAgICBib29sIGhhZEV4Y2VwdGlvbiA9IGZhbHNlOwpAQCAtNDc1LDE0
ICs0ODMsMTQgQEAgYm9vbCBJbnNwZWN0b3JGcm9udGVuZDo6YWRkRGF0YWJhc2UoY29uc3QgU2Ny
aXB0T2JqZWN0JiBkYk9iamVjdCkKIAogdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6c2VsZWN0RGF0
YWJhc2UoaW50IGRhdGFiYXNlSWQpCiB7Ci0gICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9u
KG1fc2NyaXB0U3RhdGUsIG1fd2ViSW5zcGVjdG9yLCAiZGlzcGF0Y2giKTsgCisgICAgU2NyaXB0
RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1fd2ViSW5zcGVjdG9yLCAiZGlzcGF0Y2giKTsgCiAgICAg
ZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoInNlbGVjdERhdGFiYXNlIik7CiAgICAgZnVuY3Rpb24u
YXBwZW5kQXJndW1lbnQoZGF0YWJhc2VJZCk7CiAgICAgZnVuY3Rpb24uY2FsbCgpOwogfQogdm9p
ZCBJbnNwZWN0b3JGcm9udGVuZDo6ZGlkR2V0RGF0YWJhc2VUYWJsZU5hbWVzKGludCBjYWxsSWQs
IGNvbnN0IFNjcmlwdEFycmF5JiB0YWJsZU5hbWVzKQogewotICAgIFNjcmlwdEZ1bmN0aW9uQ2Fs
bCBmdW5jdGlvbihtX3NjcmlwdFN0YXRlLCBtX3dlYkluc3BlY3RvciwgImRpc3BhdGNoIik7IAor
ICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3dlYkluc3BlY3RvciwgImRpc3BhdGNo
Iik7IAogICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KCJkaWRHZXREYXRhYmFzZVRhYmxlTmFt
ZXMiKTsKICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChjYWxsSWQpOwogICAgIGZ1bmN0aW9u
LmFwcGVuZEFyZ3VtZW50KHRhYmxlTmFtZXMpOwpAQCAtNDkzLDcgKzUwMSw3IEBAIHZvaWQgSW5z
cGVjdG9yRnJvbnRlbmQ6OmRpZEdldERhdGFiYXNlVGFibGVOYW1lcyhpbnQgY2FsbElkLCBjb25z
dCBTY3JpcHRBcnJheSYKICNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCiBib29sIEluc3BlY3RvckZy
b250ZW5kOjphZGRET01TdG9yYWdlKGNvbnN0IFNjcmlwdE9iamVjdCYgZG9tU3RvcmFnZU9iaikK
IHsKLSAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24obV9zY3JpcHRTdGF0ZSwgbV93ZWJJ
bnNwZWN0b3IsICJkaXNwYXRjaCIpOyAKKyAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24o
bV93ZWJJbnNwZWN0b3IsICJkaXNwYXRjaCIpOyAKICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVu
dCgiYWRkRE9NU3RvcmFnZSIpOwogICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGRvbVN0b3Jh
Z2VPYmopOwogICAgIGJvb2wgaGFkRXhjZXB0aW9uID0gZmFsc2U7CkBAIC01MDMsNyArNTExLDcg
QEAgYm9vbCBJbnNwZWN0b3JGcm9udGVuZDo6YWRkRE9NU3RvcmFnZShjb25zdCBTY3JpcHRPYmpl
Y3QmIGRvbVN0b3JhZ2VPYmopCiAKIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OnNlbGVjdERPTVN0
b3JhZ2UoaW50IHN0b3JhZ2VJZCkKIHsKLSAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24o
bV9zY3JpcHRTdGF0ZSwgbV93ZWJJbnNwZWN0b3IsICJkaXNwYXRjaCIpOyAKKyAgICBTY3JpcHRG
dW5jdGlvbkNhbGwgZnVuY3Rpb24obV93ZWJJbnNwZWN0b3IsICJkaXNwYXRjaCIpOyAKICAgICBm
dW5jdGlvbi5hcHBlbmRBcmd1bWVudCgic2VsZWN0RE9NU3RvcmFnZSIpOwogICAgIGZ1bmN0aW9u
LmFwcGVuZEFyZ3VtZW50KHN0b3JhZ2VJZCk7CiAgICAgZnVuY3Rpb24uY2FsbCgpOwpAQCAtNTEx
LDcgKzUxOSw3IEBAIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OnNlbGVjdERPTVN0b3JhZ2UoaW50
IHN0b3JhZ2VJZCkKIAogdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6ZGlkR2V0RE9NU3RvcmFnZUVu
dHJpZXMoaW50IGNhbGxJZCwgY29uc3QgU2NyaXB0QXJyYXkmIGVudHJpZXMpCiB7Ci0gICAgU2Ny
aXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1fc2NyaXB0U3RhdGUsIG1fd2ViSW5zcGVjdG9yLCAi
ZGlzcGF0Y2giKTsgCisgICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1fd2ViSW5zcGVj
dG9yLCAiZGlzcGF0Y2giKTsgCiAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoImRpZEdldERP
TVN0b3JhZ2VFbnRyaWVzIik7CiAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoY2FsbElkKTsK
ICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChlbnRyaWVzKTsKQEAgLTUyMCw3ICs1MjgsNyBA
QCB2b2lkIEluc3BlY3RvckZyb250ZW5kOjpkaWRHZXRET01TdG9yYWdlRW50cmllcyhpbnQgY2Fs
bElkLCBjb25zdCBTY3JpcHRBcnJheSYgZQogCiB2b2lkIEluc3BlY3RvckZyb250ZW5kOjpkaWRT
ZXRET01TdG9yYWdlSXRlbShpbnQgY2FsbElkLCBib29sIHN1Y2Nlc3MpCiB7Ci0gICAgU2NyaXB0
RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1fc2NyaXB0U3RhdGUsIG1fd2ViSW5zcGVjdG9yLCAiZGlz
cGF0Y2giKTsgCisgICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1fd2ViSW5zcGVjdG9y
LCAiZGlzcGF0Y2giKTsgCiAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoImRpZFNldERPTVN0
b3JhZ2VJdGVtIik7CiAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoY2FsbElkKTsKICAgICBm
dW5jdGlvbi5hcHBlbmRBcmd1bWVudChzdWNjZXNzKTsKQEAgLTUyOSw3ICs1MzcsNyBAQCB2b2lk
IEluc3BlY3RvckZyb250ZW5kOjpkaWRTZXRET01TdG9yYWdlSXRlbShpbnQgY2FsbElkLCBib29s
IHN1Y2Nlc3MpCiAKIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OmRpZFJlbW92ZURPTVN0b3JhZ2VJ
dGVtKGludCBjYWxsSWQsIGJvb2wgc3VjY2VzcykKIHsKLSAgICBTY3JpcHRGdW5jdGlvbkNhbGwg
ZnVuY3Rpb24obV9zY3JpcHRTdGF0ZSwgbV93ZWJJbnNwZWN0b3IsICJkaXNwYXRjaCIpOyAKKyAg
ICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24obV93ZWJJbnNwZWN0b3IsICJkaXNwYXRjaCIp
OyAKICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudCgiZGlkUmVtb3ZlRE9NU3RvcmFnZUl0ZW0i
KTsKICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChjYWxsSWQpOwogICAgIGZ1bmN0aW9uLmFw
cGVuZEFyZ3VtZW50KHN1Y2Nlc3MpOwpAQCAtNTM4LDcgKzU0Niw3IEBAIHZvaWQgSW5zcGVjdG9y
RnJvbnRlbmQ6OmRpZFJlbW92ZURPTVN0b3JhZ2VJdGVtKGludCBjYWxsSWQsIGJvb2wgc3VjY2Vz
cykKIAogdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6dXBkYXRlRE9NU3RvcmFnZShpbnQgc3RvcmFn
ZUlkKQogewotICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3NjcmlwdFN0YXRlLCBt
X3dlYkluc3BlY3RvciwgImRpc3BhdGNoIik7IAorICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5j
dGlvbihtX3dlYkluc3BlY3RvciwgImRpc3BhdGNoIik7IAogICAgIGZ1bmN0aW9uLmFwcGVuZEFy
Z3VtZW50KCJ1cGRhdGVET01TdG9yYWdlIik7CiAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQo
c3RvcmFnZUlkKTsKICAgICBmdW5jdGlvbi5jYWxsKCk7CkBAIC01NDcsNyArNTU1LDcgQEAgdm9p
ZCBJbnNwZWN0b3JGcm9udGVuZDo6dXBkYXRlRE9NU3RvcmFnZShpbnQgc3RvcmFnZUlkKQogCiB2
b2lkIEluc3BlY3RvckZyb250ZW5kOjphZGROb2Rlc1RvU2VhcmNoUmVzdWx0KGNvbnN0IFN0cmlu
ZyYgbm9kZUlkcykKIHsKLSAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24obV9zY3JpcHRT
dGF0ZSwgbV93ZWJJbnNwZWN0b3IsICJkaXNwYXRjaCIpOyAKKyAgICBTY3JpcHRGdW5jdGlvbkNh
bGwgZnVuY3Rpb24obV93ZWJJbnNwZWN0b3IsICJkaXNwYXRjaCIpOyAKICAgICBmdW5jdGlvbi5h
cHBlbmRBcmd1bWVudCgiYWRkTm9kZXNUb1NlYXJjaFJlc3VsdCIpOwogICAgIGZ1bmN0aW9uLmFw
cGVuZEFyZ3VtZW50KG5vZGVJZHMpOwogICAgIGZ1bmN0aW9uLmNhbGwoKTsKQEAgLTU1NSw3ICs1
NjMsNyBAQCB2b2lkIEluc3BlY3RvckZyb250ZW5kOjphZGROb2Rlc1RvU2VhcmNoUmVzdWx0KGNv
bnN0IFN0cmluZyYgbm9kZUlkcykKIAogdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6Y29udGV4dE1l
bnVJdGVtU2VsZWN0ZWQoaW50IGl0ZW1JZCkKIHsKLSAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVu
Y3Rpb24obV9zY3JpcHRTdGF0ZSwgbV93ZWJJbnNwZWN0b3IsICJkaXNwYXRjaCIpOworICAgIFNj
cmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3dlYkluc3BlY3RvciwgImRpc3BhdGNoIik7CiAg
ICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoImNvbnRleHRNZW51SXRlbVNlbGVjdGVkIik7CiAg
ICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoaXRlbUlkKTsKICAgICBmdW5jdGlvbi5jYWxsKCk7
CkBAIC01NjgsNyArNTc2LDcgQEAgdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6Y29udGV4dE1lbnVD
bGVhcmVkKCkKIAogdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6ZXZhbHVhdGVGb3JUZXN0SW5Gcm9u
dGVuZChpbnQgY2FsbElkLCBjb25zdCBTdHJpbmcmIHNjcmlwdCkKIHsKLSAgICBTY3JpcHRGdW5j
dGlvbkNhbGwgZnVuY3Rpb24obV9zY3JpcHRTdGF0ZSwgbV93ZWJJbnNwZWN0b3IsICJkaXNwYXRj
aCIpOyAKKyAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24obV93ZWJJbnNwZWN0b3IsICJk
aXNwYXRjaCIpOyAKICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudCgiZXZhbHVhdGVGb3JUZXN0
SW5Gcm9udGVuZCIpOwogICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGNhbGxJZCk7CiAgICAg
ZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoc2NyaXB0KTsKQEAgLTU3Nyw3ICs1ODUsNyBAQCB2b2lk
IEluc3BlY3RvckZyb250ZW5kOjpldmFsdWF0ZUZvclRlc3RJbkZyb250ZW5kKGludCBjYWxsSWQs
IGNvbnN0IFN0cmluZyYgc2NyaQogCiB2b2lkIEluc3BlY3RvckZyb250ZW5kOjpjYWxsU2ltcGxl
RnVuY3Rpb24oY29uc3QgU3RyaW5nJiBmdW5jdGlvbk5hbWUpCiB7Ci0gICAgU2NyaXB0RnVuY3Rp
b25DYWxsIGZ1bmN0aW9uKG1fc2NyaXB0U3RhdGUsIG1fd2ViSW5zcGVjdG9yLCAiZGlzcGF0Y2gi
KTsKKyAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24obV93ZWJJbnNwZWN0b3IsICJkaXNw
YXRjaCIpOwogICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGZ1bmN0aW9uTmFtZSk7CiAgICAg
ZnVuY3Rpb24uY2FsbCgpOwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yRnJvbnRlbmQuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmgKaW5k
ZXggYTM2YTMyMy4uYzNkMTIxMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yRnJvbnRlbmQuaAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5o
CkBAIC01MCwxMyArNTAsMTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIEluc3Bl
Y3RvckNvbnRyb2xsZXI7CiAgICAgY2xhc3MgSW5zcGVjdG9yUmVzb3VyY2U7CiAgICAgY2xhc3Mg
Tm9kZTsKLSAgICBjbGFzcyBTY3JpcHRGdW5jdGlvbkNhbGw7CiAgICAgY2xhc3MgU2NyaXB0U3Ry
aW5nOworICAgIGNsYXNzIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTsKICAgICBjbGFzcyBTdG9yYWdl
OwogCiAgICAgY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmQgOiBwdWJsaWMgTm9uY29weWFibGUgewog
ICAgIHB1YmxpYzoKLSAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmQoSW5zcGVjdG9yQ29udHJvbGxl
ciogaW5zcGVjdG9yQ29udHJvbGxlciwgU2NyaXB0U3RhdGUqLCBTY3JpcHRPYmplY3Qgd2ViSW5z
cGVjdG9yKTsKKyAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmQoSW5zcGVjdG9yQ29udHJvbGxlciog
aW5zcGVjdG9yQ29udHJvbGxlciwgU2NyaXB0T2JqZWN0IHdlYkluc3BlY3Rvcik7CiAgICAgICAg
IH5JbnNwZWN0b3JGcm9udGVuZCgpOwogCiAgICAgICAgIFNjcmlwdEFycmF5IG5ld1NjcmlwdEFy
cmF5KCk7CkBAIC05Niw3ICs5Niw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9p
ZCBzZXRSZWNvcmRpbmdQcm9maWxlKGJvb2wgaXNQcm9maWxpbmcpOwogICAgICAgICB2b2lkIGRp
ZEdldFByb2ZpbGVIZWFkZXJzKGludCBjYWxsSWQsIGNvbnN0IFNjcmlwdEFycmF5JiBoZWFkZXJz
KTsKICAgICAgICAgdm9pZCBkaWRHZXRQcm9maWxlKGludCBjYWxsSWQsIGNvbnN0IFNjcmlwdFZh
bHVlJiBwcm9maWxlKTsKLSAgICAgICAgdm9pZCBwYXVzZWRTY3JpcHQoY29uc3QgU3RyaW5nJiBj
YWxsRnJhbWVzKTsKKyAgICAgICAgdm9pZCBwYXVzZWRTY3JpcHQoU2VyaWFsaXplZFNjcmlwdFZh
bHVlKiBjYWxsRnJhbWVzKTsKICAgICAgICAgdm9pZCByZXN1bWVkU2NyaXB0KCk7CiAjZW5kaWYK
IApAQCAtMTMyLDIwICsxMzIsMTkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lk
IGFkZFJlY29yZFRvVGltZWxpbmUoY29uc3QgU2NyaXB0T2JqZWN0Jik7CiAKICAgICAgICAgdm9p
ZCBkaWRHZXRDb29raWVzKGludCBjYWxsSWQsIGNvbnN0IFNjcmlwdEFycmF5JiBjb29raWVzLCBj
b25zdCBTdHJpbmcmIGNvb2tpZXNTdHJpbmcpOwotICAgICAgICB2b2lkIGRpZERpc3BhdGNoT25J
bmplY3RlZFNjcmlwdChpbnQgY2FsbElkLCBjb25zdCBTdHJpbmcmIHJlc3VsdCwgYm9vbCBpc0V4
Y2VwdGlvbik7CisgICAgICAgIHZvaWQgZGlkRGlzcGF0Y2hPbkluamVjdGVkU2NyaXB0KGludCBj
YWxsSWQsIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogcmVzdWx0LCBib29sIGlzRXhjZXB0aW9uKTsK
IAogICAgICAgICB2b2lkIGFkZE5vZGVzVG9TZWFyY2hSZXN1bHQoY29uc3QgU3RyaW5nJiBub2Rl
SWRzKTsKIAogICAgICAgICB2b2lkIGNvbnRleHRNZW51SXRlbVNlbGVjdGVkKGludCBpdGVtSWQp
OwogICAgICAgICB2b2lkIGNvbnRleHRNZW51Q2xlYXJlZCgpOwogCi0gICAgICAgIFNjcmlwdFN0
YXRlKiBzY3JpcHRTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2NyaXB0U3RhdGU7IH0KKyAgICAg
ICAgU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV93ZWJJbnNwZWN0
b3Iuc2NyaXB0U3RhdGUoKTsgfQogCiAgICAgICAgIHZvaWQgZXZhbHVhdGVGb3JUZXN0SW5Gcm9u
dGVuZChpbnQgY2FsbElkLCBjb25zdCBTdHJpbmcmIHNjcmlwdCk7CiAgICAgcHJpdmF0ZToKICAg
ICAgICAgdm9pZCBjYWxsU2ltcGxlRnVuY3Rpb24oY29uc3QgU3RyaW5nJiBmdW5jdGlvbk5hbWUp
OwogICAgICAgICBJbnNwZWN0b3JDb250cm9sbGVyKiBtX2luc3BlY3RvckNvbnRyb2xsZXI7Ci0g
ICAgICAgIFNjcmlwdFN0YXRlKiBtX3NjcmlwdFN0YXRlOwogICAgICAgICBTY3JpcHRPYmplY3Qg
bV93ZWJJbnNwZWN0b3I7CiAgICAgfTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL0luamVjdGVkU2NyaXB0LmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L0luamVjdGVkU2NyaXB0LmpzCmluZGV4IDMzNzYyOGYuLjBhOTZhMmYgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbmplY3RlZFNjcmlwdC5qcworKysgYi9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvSW5qZWN0ZWRTY3JpcHQuanMKQEAgLTUyLDExICs1Miw2IEBA
IEluamVjdGVkU2NyaXB0LndyYXBPYmplY3QgPSBmdW5jdGlvbihvYmplY3QsIG9iamVjdEdyb3Vw
TmFtZSkKICAgICByZXR1cm4gSW5qZWN0ZWRTY3JpcHQuY3JlYXRlUHJveHlPYmplY3Qob2JqZWN0
LCBvYmplY3RJZCk7CiB9OwogCi1JbmplY3RlZFNjcmlwdC53cmFwQW5kU3RyaW5naWZ5T2JqZWN0
ID0gZnVuY3Rpb24ob2JqZWN0LCBvYmplY3RHcm91cE5hbWUpIHsKLSAgICB2YXIgciA9IEluamVj
dGVkU2NyaXB0LndyYXBPYmplY3Qob2JqZWN0LCBvYmplY3RHcm91cE5hbWUpOwotICAgIHJldHVy
biBJbmplY3RlZFNjcmlwdC5KU09OLnN0cmluZ2lmeShyKTsKLX07Ci0KIEluamVjdGVkU2NyaXB0
LnVud3JhcE9iamVjdCA9IGZ1bmN0aW9uKG9iamVjdElkKSB7CiAgICAgcmV0dXJuIEluamVjdGVk
U2NyaXB0LmlkVG9XcmFwcGVkT2JqZWN0W29iamVjdElkXTsKIH07CkBAIC04NSw3ICs4MCw3IEBA
IEluamVjdGVkU2NyaXB0LnJlc2V0KCk7CiAKIEluamVjdGVkU2NyaXB0LmRpc3BhdGNoID0gZnVu
Y3Rpb24obWV0aG9kTmFtZSwgYXJncywgY2FsbElkKQogewotICAgIHZhciBhcmdzQXJyYXkgPSBJ
bmplY3RlZFNjcmlwdC5KU09OLnBhcnNlKGFyZ3MpOworICAgIHZhciBhcmdzQXJyYXkgPSBKU09O
LnBhcnNlKGFyZ3MpOwogICAgIGlmIChjYWxsSWQpCiAgICAgICAgIGFyZ3NBcnJheS5zcGxpY2Uo
MCwgMCwgY2FsbElkKTsgIC8vIE1ldGhvZHMgdGhhdCBydW4gYXN5bmNocm9ub3VzbHkgaGF2ZSBh
IGNhbGwgYmFjayBpZCBwYXJhbWV0ZXIuCiAgICAgdmFyIHJlc3VsdCA9IEluamVjdGVkU2NyaXB0
W21ldGhvZE5hbWVdLmFwcGx5KEluamVjdGVkU2NyaXB0LCBhcmdzQXJyYXkpOwpAQCAtOTMsNyAr
ODgsNyBAQCBJbmplY3RlZFNjcmlwdC5kaXNwYXRjaCA9IGZ1bmN0aW9uKG1ldGhvZE5hbWUsIGFy
Z3MsIGNhbGxJZCkKICAgICAgICAgSW5qZWN0ZWRTY3JpcHQuX3dpbmRvdygpLmNvbnNvbGUuZXJy
b3IoIldlYiBJbnNwZWN0b3IgZXJyb3I6IEluamVjdGVkU2NyaXB0LiVzIHJldHVybnMgdW5kZWZp
bmVkIiwgbWV0aG9kTmFtZSk7CiAgICAgICAgIHJlc3VsdCA9IG51bGw7CiAgICAgfQotICAgIHJl
dHVybiBJbmplY3RlZFNjcmlwdC5KU09OLnN0cmluZ2lmeShyZXN1bHQpOworICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKIEluamVjdGVkU2NyaXB0LmdldFN0eWxlcyA9IGZ1bmN0aW9uKG5vZGVJZCwg
YXV0aG9yT25seSkKQEAgLTkzNSw3ICs5MzAsNyBAQCBJbmplY3RlZFNjcmlwdC5jYWxsRnJhbWVz
ID0gZnVuY3Rpb24oKQogICAgICAgICByZXN1bHQucHVzaChuZXcgSW5qZWN0ZWRTY3JpcHQuQ2Fs
bEZyYW1lUHJveHkoZGVwdGgrKywgY2FsbEZyYW1lKSk7CiAgICAgICAgIGNhbGxGcmFtZSA9IGNh
bGxGcmFtZS5jYWxsZXI7CiAgICAgfSB3aGlsZSAoY2FsbEZyYW1lKTsKLSAgICByZXR1cm4gSW5q
ZWN0ZWRTY3JpcHQuSlNPTi5zdHJpbmdpZnkocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0Owog
fQogCiBJbmplY3RlZFNjcmlwdC5ldmFsdWF0ZUluQ2FsbEZyYW1lID0gZnVuY3Rpb24oY2FsbEZy
YW1lSWQsIGNvZGUsIG9iamVjdEdyb3VwKQpAQCAtMTIyMCwxMiArMTIxNSwxMiBAQCBJbmplY3Rl
ZFNjcmlwdC5leGVjdXRlU3FsID0gZnVuY3Rpb24oY2FsbElkLCBkYXRhYmFzZUlkLCBxdWVyeSkK
ICAgICAgICAgICAgICAgICBkYXRhW2NvbHVtbklkZW50aWZpZXJdID0gU3RyaW5nKHRleHQpOwog
ICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIEluamVjdGVkU2NyaXB0SG9zdC5yZXBv
cnREaWREaXNwYXRjaE9uSW5qZWN0ZWRTY3JpcHQoY2FsbElkLCBJbmplY3RlZFNjcmlwdC5KU09O
LnN0cmluZ2lmeShyZXN1bHQpLCBmYWxzZSk7CisgICAgICAgIEluamVjdGVkU2NyaXB0SG9zdC5y
ZXBvcnREaWREaXNwYXRjaE9uSW5qZWN0ZWRTY3JpcHQoY2FsbElkLCByZXN1bHQsIGZhbHNlKTsK
ICAgICB9CiAKICAgICBmdW5jdGlvbiBlcnJvckNhbGxiYWNrKHR4LCBlcnJvcikKICAgICB7Ci0g
ICAgICAgIEluamVjdGVkU2NyaXB0SG9zdC5yZXBvcnREaWREaXNwYXRjaE9uSW5qZWN0ZWRTY3Jp
cHQoY2FsbElkLCBJbmplY3RlZFNjcmlwdC5KU09OLnN0cmluZ2lmeShlcnJvciksIGZhbHNlKTsK
KyAgICAgICAgSW5qZWN0ZWRTY3JpcHRIb3N0LnJlcG9ydERpZERpc3BhdGNoT25JbmplY3RlZFNj
cmlwdChjYWxsSWQsIGVycm9yLCBmYWxzZSk7CiAgICAgfQogCiAgICAgZnVuY3Rpb24gcXVlcnlU
cmFuc2FjdGlvbih0eCkKQEAgLTEzMzksMjk2ICsxMzM0LDUgQEAgSW5qZWN0ZWRTY3JpcHQuX2Vz
Y2FwZUNoYXJhY3RlcnMgPSBmdW5jdGlvbihzdHIsIGNoYXJzKQogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKLUluamVjdGVkU2NyaXB0LkpTT04gPSB7fTsKLQotLy8gVGhlIGZvbGxvd2luZyBjb2Rl
IGlzIGEgc2xpZ2h0bHkgbW9kaWZpZWQgdmVyc2lvbiBvZiBodHRwOi8vd3d3Lmpzb24ub3JnL2pz
b24yLmpzIGxhc3QgbW9kaWZpZWQgb24gMjAwOS0wOS0yOS4KLS8vIENvbXBhcmVkIHRvIHRoZSBv
cmlnaW5hbCB2ZXJzaW9uIGl0IGlnbm9yZXMgdG9KU09OIG1ldGhvZCBvbiBvYmplY3RzIGl0IHNl
cmlhbGl6ZXMuCi0vLyBJdCdzIGRvbmUgdG8gYXZvaWQgd2VpcmQgYmVoYXZpb3VyIHdoZW4gaW5z
cGVjdGVkIGFwcGxpY2F0aW9uIHByb3ZpZGVzIGl0J3Mgb3duIGltcGxlbWVudGF0aW9uCi0vLyBv
ZiB0b0pTT04gbWV0aG9kcyB0byB0aGUgT2JqZWN0IGFuZCBvdGhlciBpbnRyaW5zaWMgdHlwZXMu
IFdlIHVzZSBJbmplY3RlZFNjcmlwdC5KU09OIGltcGxlbWVudGF0aW9uCi0vLyBpbnN0ZWFkIG9m
IGdsb2JhbCBKU09OIG9iamVjdCBzaW5jZSBpdCBjYW4gaGF2ZSBiZWVuIG1vZGlmaWVkIGJ5IHRo
ZSBpbnNwZWN0ZWQgY29kZS4KLShmdW5jdGlvbigpIHsKLQotICAgIGZ1bmN0aW9uIGYobikgewot
ICAgICAgICAvLyBGb3JtYXQgaW50ZWdlcnMgdG8gaGF2ZSBhdCBsZWFzdCB0d28gZGlnaXRzLgot
ICAgICAgICByZXR1cm4gbiA8IDEwID8gJzAnICsgbiA6IG47Ci0gICAgfQotCi0gICAgdmFyIGN4
ID0gL1tcdTAwMDBcdTAwYWRcdTA2MDAtXHUwNjA0XHUwNzBmXHUxN2I0XHUxN2I1XHUyMDBjLVx1
MjAwZlx1MjAyOC1cdTIwMmZcdTIwNjAtXHUyMDZmXHVmZWZmXHVmZmYwLVx1ZmZmZl0vZywKLSAg
ICAgICAgZXNjYXBhYmxlID0gL1tcXFwiXHgwMC1ceDFmXHg3Zi1ceDlmXHUwMGFkXHUwNjAwLVx1
MDYwNFx1MDcwZlx1MTdiNFx1MTdiNVx1MjAwYy1cdTIwMGZcdTIwMjgtXHUyMDJmXHUyMDYwLVx1
MjA2Zlx1ZmVmZlx1ZmZmMC1cdWZmZmZdL2csCi0gICAgICAgIGdhcCwKLSAgICAgICAgaW5kZW50
LAotICAgICAgICBtZXRhID0geyAgICAvLyB0YWJsZSBvZiBjaGFyYWN0ZXIgc3Vic3RpdHV0aW9u
cwotICAgICAgICAgICAgJ1xiJzogJ1xcYicsCi0gICAgICAgICAgICAnXHQnOiAnXFx0JywKLSAg
ICAgICAgICAgICdcbic6ICdcXG4nLAotICAgICAgICAgICAgJ1xmJzogJ1xcZicsCi0gICAgICAg
ICAgICAnXHInOiAnXFxyJywKLSAgICAgICAgICAgICciJyA6ICdcXCInLAotICAgICAgICAgICAg
J1xcJzogJ1xcXFwnCi0gICAgICAgIH0sCi0gICAgICAgIHJlcDsKLQotCi0gICAgZnVuY3Rpb24g
cXVvdGUoc3RyaW5nKSB7Ci0KLS8vIElmIHRoZSBzdHJpbmcgY29udGFpbnMgbm8gY29udHJvbCBj
aGFyYWN0ZXJzLCBubyBxdW90ZSBjaGFyYWN0ZXJzLCBhbmQgbm8KLS8vIGJhY2tzbGFzaCBjaGFy
YWN0ZXJzLCB0aGVuIHdlIGNhbiBzYWZlbHkgc2xhcCBzb21lIHF1b3RlcyBhcm91bmQgaXQuCi0v
LyBPdGhlcndpc2Ugd2UgbXVzdCBhbHNvIHJlcGxhY2UgdGhlIG9mZmVuZGluZyBjaGFyYWN0ZXJz
IHdpdGggc2FmZSBlc2NhcGUKLS8vIHNlcXVlbmNlcy4KLQotICAgICAgICBlc2NhcGFibGUubGFz
dEluZGV4ID0gMDsKLSAgICAgICAgcmV0dXJuIGVzY2FwYWJsZS50ZXN0KHN0cmluZykgPwotICAg
ICAgICAgICAgJyInICsgc3RyaW5nLnJlcGxhY2UoZXNjYXBhYmxlLCBmdW5jdGlvbiAoYSkgewot
ICAgICAgICAgICAgICAgIHZhciBjID0gbWV0YVthXTsKLSAgICAgICAgICAgICAgICByZXR1cm4g
dHlwZW9mIGMgPT09ICdzdHJpbmcnID8gYyA6Ci0gICAgICAgICAgICAgICAgICAgICdcXHUnICsg
KCcwMDAwJyArIGEuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikpLnNsaWNlKC00KTsKLSAgICAg
ICAgICAgIH0pICsgJyInIDoKLSAgICAgICAgICAgICciJyArIHN0cmluZyArICciJzsKLSAgICB9
Ci0KLQotICAgIGZ1bmN0aW9uIHN0cihrZXksIGhvbGRlcikgewotCi0vLyBQcm9kdWNlIGEgc3Ry
aW5nIGZyb20gaG9sZGVyW2tleV0uCi0KLSAgICAgICAgdmFyIGksICAgICAgICAgIC8vIFRoZSBs
b29wIGNvdW50ZXIuCi0gICAgICAgICAgICBrLCAgICAgICAgICAvLyBUaGUgbWVtYmVyIGtleS4K
LSAgICAgICAgICAgIHYsICAgICAgICAgIC8vIFRoZSBtZW1iZXIgdmFsdWUuCi0gICAgICAgICAg
ICBsZW5ndGgsCi0gICAgICAgICAgICBtaW5kID0gZ2FwLAotICAgICAgICAgICAgcGFydGlhbCwK
LSAgICAgICAgICAgIHZhbHVlID0gaG9sZGVyW2tleV07Ci0KLS8vIElmIHdlIHdlcmUgY2FsbGVk
IHdpdGggYSByZXBsYWNlciBmdW5jdGlvbiwgdGhlbiBjYWxsIHRoZSByZXBsYWNlciB0bwotLy8g
b2J0YWluIGEgcmVwbGFjZW1lbnQgdmFsdWUuCi0KLSAgICAgICAgaWYgKHR5cGVvZiByZXAgPT09
ICdmdW5jdGlvbicpIHsKLSAgICAgICAgICAgIHZhbHVlID0gcmVwLmNhbGwoaG9sZGVyLCBrZXks
IHZhbHVlKTsKLSAgICAgICAgfQotCi0vLyBXaGF0IGhhcHBlbnMgbmV4dCBkZXBlbmRzIG9uIHRo
ZSB2YWx1ZSdzIHR5cGUuCi0KLSAgICAgICAgc3dpdGNoICh0eXBlb2YgdmFsdWUpIHsKLSAgICAg
ICAgY2FzZSAnc3RyaW5nJzoKLSAgICAgICAgICAgIHJldHVybiBxdW90ZSh2YWx1ZSk7Ci0KLSAg
ICAgICAgY2FzZSAnbnVtYmVyJzoKLQotLy8gSlNPTiBudW1iZXJzIG11c3QgYmUgZmluaXRlLiBF
bmNvZGUgbm9uLWZpbml0ZSBudW1iZXJzIGFzIG51bGwuCi0KLSAgICAgICAgICAgIHJldHVybiBp
c0Zpbml0ZSh2YWx1ZSkgPyBTdHJpbmcodmFsdWUpIDogJ251bGwnOwotCi0gICAgICAgIGNhc2Ug
J2Jvb2xlYW4nOgotICAgICAgICBjYXNlICdudWxsJzoKLQotLy8gSWYgdGhlIHZhbHVlIGlzIGEg
Ym9vbGVhbiBvciBudWxsLCBjb252ZXJ0IGl0IHRvIGEgc3RyaW5nLiBOb3RlOgotLy8gdHlwZW9m
IG51bGwgZG9lcyBub3QgcHJvZHVjZSAnbnVsbCcuIFRoZSBjYXNlIGlzIGluY2x1ZGVkIGhlcmUg
aW4KLS8vIHRoZSByZW1vdGUgY2hhbmNlIHRoYXQgdGhpcyBnZXRzIGZpeGVkIHNvbWVkYXkuCi0K
LSAgICAgICAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpOwotCi0vLyBJZiB0aGUgdHlwZSBpcyAn
b2JqZWN0Jywgd2UgbWlnaHQgYmUgZGVhbGluZyB3aXRoIGFuIG9iamVjdCBvciBhbiBhcnJheSBv
cgotLy8gbnVsbC4KLQotICAgICAgICBjYXNlICdvYmplY3QnOgotCi0vLyBEdWUgdG8gYSBzcGVj
aWZpY2F0aW9uIGJsdW5kZXIgaW4gRUNNQVNjcmlwdCwgdHlwZW9mIG51bGwgaXMgJ29iamVjdCcs
Ci0vLyBzbyB3YXRjaCBvdXQgZm9yIHRoYXQgY2FzZS4KLQotICAgICAgICAgICAgaWYgKCF2YWx1
ZSkgewotICAgICAgICAgICAgICAgIHJldHVybiAnbnVsbCc7Ci0gICAgICAgICAgICB9Ci0KLS8v
IE1ha2UgYW4gYXJyYXkgdG8gaG9sZCB0aGUgcGFydGlhbCByZXN1bHRzIG9mIHN0cmluZ2lmeWlu
ZyB0aGlzIG9iamVjdCB2YWx1ZS4KLQotICAgICAgICAgICAgZ2FwICs9IGluZGVudDsKLSAgICAg
ICAgICAgIHBhcnRpYWwgPSBbXTsKLQotLy8gSXMgdGhlIHZhbHVlIGFuIGFycmF5PwotCi0gICAg
ICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5hcHBseSh2YWx1ZSkgPT09ICdb
b2JqZWN0IEFycmF5XScpIHsKLQotLy8gVGhlIHZhbHVlIGlzIGFuIGFycmF5LiBTdHJpbmdpZnkg
ZXZlcnkgZWxlbWVudC4gVXNlIG51bGwgYXMgYSBwbGFjZWhvbGRlcgotLy8gZm9yIG5vbi1KU09O
IHZhbHVlcy4KLQotICAgICAgICAgICAgICAgIGxlbmd0aCA9IHZhbHVlLmxlbmd0aDsKLSAgICAg
ICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDEpIHsKLSAgICAgICAgICAg
ICAgICAgICAgcGFydGlhbFtpXSA9IHN0cihpLCB2YWx1ZSkgfHwgJ251bGwnOwotICAgICAgICAg
ICAgICAgIH0KLQotLy8gSm9pbiBhbGwgb2YgdGhlIGVsZW1lbnRzIHRvZ2V0aGVyLCBzZXBhcmF0
ZWQgd2l0aCBjb21tYXMsIGFuZCB3cmFwIHRoZW0gaW4KLS8vIGJyYWNrZXRzLgotCi0gICAgICAg
ICAgICAgICAgdiA9IHBhcnRpYWwubGVuZ3RoID09PSAwID8gJ1tdJyA6Ci0gICAgICAgICAgICAg
ICAgICAgIGdhcCA/ICdbXG4nICsgZ2FwICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
YXJ0aWFsLmpvaW4oJyxcbicgKyBnYXApICsgJ1xuJyArCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1pbmQgKyAnXScgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAnWycgKyBw
YXJ0aWFsLmpvaW4oJywnKSArICddJzsKLSAgICAgICAgICAgICAgICBnYXAgPSBtaW5kOwotICAg
ICAgICAgICAgICAgIHJldHVybiB2OwotICAgICAgICAgICAgfQotCi0vLyBJZiB0aGUgcmVwbGFj
ZXIgaXMgYW4gYXJyYXksIHVzZSBpdCB0byBzZWxlY3QgdGhlIG1lbWJlcnMgdG8gYmUgc3RyaW5n
aWZpZWQuCi0KLSAgICAgICAgICAgIGlmIChyZXAgJiYgdHlwZW9mIHJlcCA9PT0gJ29iamVjdCcp
IHsKLSAgICAgICAgICAgICAgICBsZW5ndGggPSByZXAubGVuZ3RoOwotICAgICAgICAgICAgICAg
IGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gMSkgewotICAgICAgICAgICAgICAgICAgICBr
ID0gcmVwW2ldOwotICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGsgPT09ICdzdHJpbmcn
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2ID0gc3RyKGssIHZhbHVlKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICh2KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFy
dGlhbC5wdXNoKHF1b3RlKGspICsgKGdhcCA/ICc6ICcgOiAnOicpICsgdik7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9IGVsc2UgewotCi0vLyBPdGhlcndpc2UsIGl0ZXJhdGUgdGhyb3VnaCBh
bGwgb2YgdGhlIGtleXMgaW4gdGhlIG9iamVjdC4KLQotICAgICAgICAgICAgICAgIGZvciAoayBp
biB2YWx1ZSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoT2JqZWN0Lmhhc093blByb3BlcnR5
LmNhbGwodmFsdWUsIGspKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2ID0gc3RyKGssIHZh
bHVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2KSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcGFydGlhbC5wdXNoKHF1b3RlKGspICsgKGdhcCA/ICc6ICcgOiAnOicpICsg
dik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLS8vIEpvaW4gYWxsIG9mIHRoZSBtZW1i
ZXIgdGV4dHMgdG9nZXRoZXIsIHNlcGFyYXRlZCB3aXRoIGNvbW1hcywKLS8vIGFuZCB3cmFwIHRo
ZW0gaW4gYnJhY2VzLgotCi0gICAgICAgICAgICB2ID0gcGFydGlhbC5sZW5ndGggPT09IDAgPyAn
e30nIDoKLSAgICAgICAgICAgICAgICBnYXAgPyAne1xuJyArIGdhcCArIHBhcnRpYWwuam9pbign
LFxuJyArIGdhcCkgKyAnXG4nICsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1pbmQgKyAnfScg
OiAneycgKyBwYXJ0aWFsLmpvaW4oJywnKSArICd9JzsKLSAgICAgICAgICAgIGdhcCA9IG1pbmQ7
Ci0gICAgICAgICAgICByZXR1cm4gdjsKLSAgICAgICAgfQotICAgIH0KLQotICAgICAgICBJbmpl
Y3RlZFNjcmlwdC5KU09OLnN0cmluZ2lmeSA9IGZ1bmN0aW9uICh2YWx1ZSwgcmVwbGFjZXIsIHNw
YWNlKSB7Ci0KLS8vIFRoZSBzdHJpbmdpZnkgbWV0aG9kIHRha2VzIGEgdmFsdWUgYW5kIGFuIG9w
dGlvbmFsIHJlcGxhY2VyLCBhbmQgYW4gb3B0aW9uYWwKLS8vIHNwYWNlIHBhcmFtZXRlciwgYW5k
IHJldHVybnMgYSBKU09OIHRleHQuIFRoZSByZXBsYWNlciBjYW4gYmUgYSBmdW5jdGlvbgotLy8g
dGhhdCBjYW4gcmVwbGFjZSB2YWx1ZXMsIG9yIGFuIGFycmF5IG9mIHN0cmluZ3MgdGhhdCB3aWxs
IHNlbGVjdCB0aGUga2V5cy4KLS8vIEEgZGVmYXVsdCByZXBsYWNlciBtZXRob2QgY2FuIGJlIHBy
b3ZpZGVkLiBVc2Ugb2YgdGhlIHNwYWNlIHBhcmFtZXRlciBjYW4KLS8vIHByb2R1Y2UgdGV4dCB0
aGF0IGlzIG1vcmUgZWFzaWx5IHJlYWRhYmxlLgotCi0gICAgICAgICAgICB2YXIgaTsKLSAgICAg
ICAgICAgIGdhcCA9ICcnOwotICAgICAgICAgICAgaW5kZW50ID0gJyc7Ci0KLS8vIElmIHRoZSBz
cGFjZSBwYXJhbWV0ZXIgaXMgYSBudW1iZXIsIG1ha2UgYW4gaW5kZW50IHN0cmluZyBjb250YWlu
aW5nIHRoYXQKLS8vIG1hbnkgc3BhY2VzLgotCi0gICAgICAgICAgICBpZiAodHlwZW9mIHNwYWNl
ID09PSAnbnVtYmVyJykgewotICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzcGFjZTsg
aSArPSAxKSB7Ci0gICAgICAgICAgICAgICAgICAgIGluZGVudCArPSAnICc7Ci0gICAgICAgICAg
ICAgICAgfQotCi0vLyBJZiB0aGUgc3BhY2UgcGFyYW1ldGVyIGlzIGEgc3RyaW5nLCBpdCB3aWxs
IGJlIHVzZWQgYXMgdGhlIGluZGVudCBzdHJpbmcuCi0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAo
dHlwZW9mIHNwYWNlID09PSAnc3RyaW5nJykgewotICAgICAgICAgICAgICAgIGluZGVudCA9IHNw
YWNlOwotICAgICAgICAgICAgfQotCi0vLyBJZiB0aGVyZSBpcyBhIHJlcGxhY2VyLCBpdCBtdXN0
IGJlIGEgZnVuY3Rpb24gb3IgYW4gYXJyYXkuCi0vLyBPdGhlcndpc2UsIHRocm93IGFuIGVycm9y
LgotCi0gICAgICAgICAgICByZXAgPSByZXBsYWNlcjsKLSAgICAgICAgICAgIGlmIChyZXBsYWNl
ciAmJiB0eXBlb2YgcmVwbGFjZXIgIT09ICdmdW5jdGlvbicgJiYKLSAgICAgICAgICAgICAgICAg
ICAgKHR5cGVvZiByZXBsYWNlciAhPT0gJ29iamVjdCcgfHwKLSAgICAgICAgICAgICAgICAgICAg
IHR5cGVvZiByZXBsYWNlci5sZW5ndGggIT09ICdudW1iZXInKSkgewotICAgICAgICAgICAgICAg
IHRocm93IG5ldyBFcnJvcignSlNPTi5zdHJpbmdpZnknKTsKLSAgICAgICAgICAgIH0KLQotLy8g
TWFrZSBhIGZha2Ugcm9vdCBvYmplY3QgY29udGFpbmluZyBvdXIgdmFsdWUgdW5kZXIgdGhlIGtl
eSBvZiAnJy4KLS8vIFJldHVybiB0aGUgcmVzdWx0IG9mIHN0cmluZ2lmeWluZyB0aGUgdmFsdWUu
Ci0KLSAgICAgICAgICAgIHJldHVybiBzdHIoJycsIHsnJzogdmFsdWV9KTsKLSAgICAgICAgfTsK
LQotCi0vLyBJZiB0aGUgSlNPTiBvYmplY3QgZG9lcyBub3QgeWV0IGhhdmUgYSBwYXJzZSBtZXRo
b2QsIGdpdmUgaXQgb25lLgotCi0gICAgSW5qZWN0ZWRTY3JpcHQuSlNPTi5wYXJzZSA9IGZ1bmN0
aW9uICh0ZXh0LCByZXZpdmVyKSB7Ci0KLS8vIFRoZSBwYXJzZSBtZXRob2QgdGFrZXMgYSB0ZXh0
IGFuZCBhbiBvcHRpb25hbCByZXZpdmVyIGZ1bmN0aW9uLCBhbmQgcmV0dXJucwotLy8gYSBKYXZh
U2NyaXB0IHZhbHVlIGlmIHRoZSB0ZXh0IGlzIGEgdmFsaWQgSlNPTiB0ZXh0LgotCi0gICAgICAg
ICAgICB2YXIgajsKLQotICAgICAgICAgICAgZnVuY3Rpb24gd2Fsayhob2xkZXIsIGtleSkgewot
Ci0vLyBUaGUgd2FsayBtZXRob2QgaXMgdXNlZCB0byByZWN1cnNpdmVseSB3YWxrIHRoZSByZXN1
bHRpbmcgc3RydWN0dXJlIHNvCi0vLyB0aGF0IG1vZGlmaWNhdGlvbnMgY2FuIGJlIG1hZGUuCi0K
LSAgICAgICAgICAgICAgICB2YXIgaywgdiwgdmFsdWUgPSBob2xkZXJba2V5XTsKLSAgICAgICAg
ICAgICAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JykgewotICAgICAg
ICAgICAgICAgICAgICBmb3IgKGsgaW4gdmFsdWUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgaykpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2ID0gd2Fsayh2YWx1ZSwgayk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHYgIT09IHVuZGVmaW5lZCkgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2YWx1ZVtrXSA9IHY7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHZhbHVlW2tdOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBy
ZXR1cm4gcmV2aXZlci5jYWxsKGhvbGRlciwga2V5LCB2YWx1ZSk7Ci0gICAgICAgICAgICB9Ci0K
LQotLy8gUGFyc2luZyBoYXBwZW5zIGluIGZvdXIgc3RhZ2VzLiBJbiB0aGUgZmlyc3Qgc3RhZ2Us
IHdlIHJlcGxhY2UgY2VydGFpbgotLy8gVW5pY29kZSBjaGFyYWN0ZXJzIHdpdGggZXNjYXBlIHNl
cXVlbmNlcy4gSmF2YVNjcmlwdCBoYW5kbGVzIG1hbnkgY2hhcmFjdGVycwotLy8gaW5jb3JyZWN0
bHksIGVpdGhlciBzaWxlbnRseSBkZWxldGluZyB0aGVtLCBvciB0cmVhdGluZyB0aGVtIGFzIGxp
bmUgZW5kaW5ncy4KLQotICAgICAgICAgICAgY3gubGFzdEluZGV4ID0gMDsKLSAgICAgICAgICAg
IGlmIChjeC50ZXN0KHRleHQpKSB7Ci0gICAgICAgICAgICAgICAgdGV4dCA9IHRleHQucmVwbGFj
ZShjeCwgZnVuY3Rpb24gKGEpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdcXHUnICsK
LSAgICAgICAgICAgICAgICAgICAgICAgICgnMDAwMCcgKyBhLmNoYXJDb2RlQXQoMCkudG9TdHJp
bmcoMTYpKS5zbGljZSgtNCk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICB9Ci0K
LS8vIEluIHRoZSBzZWNvbmQgc3RhZ2UsIHdlIHJ1biB0aGUgdGV4dCBhZ2FpbnN0IHJlZ3VsYXIg
ZXhwcmVzc2lvbnMgdGhhdCBsb29rCi0vLyBmb3Igbm9uLUpTT04gcGF0dGVybnMuIFdlIGFyZSBl
c3BlY2lhbGx5IGNvbmNlcm5lZCB3aXRoICcoKScgYW5kICduZXcnCi0vLyBiZWNhdXNlIHRoZXkg
Y2FuIGNhdXNlIGludm9jYXRpb24sIGFuZCAnPScgYmVjYXVzZSBpdCBjYW4gY2F1c2UgbXV0YXRp
b24uCi0vLyBCdXQganVzdCB0byBiZSBzYWZlLCB3ZSB3YW50IHRvIHJlamVjdCBhbGwgdW5leHBl
Y3RlZCBmb3Jtcy4KLQotLy8gV2Ugc3BsaXQgdGhlIHNlY29uZCBzdGFnZSBpbnRvIDQgcmVnZXhw
IG9wZXJhdGlvbnMgaW4gb3JkZXIgdG8gd29yayBhcm91bmQKLS8vIGNyaXBwbGluZyBpbmVmZmlj
aWVuY2llcyBpbiBJRSdzIGFuZCBTYWZhcmkncyByZWdleHAgZW5naW5lcy4gRmlyc3Qgd2UKLS8v
IHJlcGxhY2UgdGhlIEpTT04gYmFja3NsYXNoIHBhaXJzIHdpdGggJ0AnIChhIG5vbi1KU09OIGNo
YXJhY3RlcikuIFNlY29uZCwgd2UKLS8vIHJlcGxhY2UgYWxsIHNpbXBsZSB2YWx1ZSB0b2tlbnMg
d2l0aCAnXScgY2hhcmFjdGVycy4gVGhpcmQsIHdlIGRlbGV0ZSBhbGwKLS8vIG9wZW4gYnJhY2tl
dHMgdGhhdCBmb2xsb3cgYSBjb2xvbiBvciBjb21tYSBvciB0aGF0IGJlZ2luIHRoZSB0ZXh0LiBG
aW5hbGx5LAotLy8gd2UgbG9vayB0byBzZWUgdGhhdCB0aGUgcmVtYWluaW5nIGNoYXJhY3RlcnMg
YXJlIG9ubHkgd2hpdGVzcGFjZSBvciAnXScgb3IKLS8vICcsJyBvciAnOicgb3IgJ3snIG9yICd9
Jy4gSWYgdGhhdCBpcyBzbywgdGhlbiB0aGUgdGV4dCBpcyBzYWZlIGZvciBldmFsLgotCi0gICAg
ICAgICAgICBpZiAoL15bXF0sOnt9XHNdKiQvLgotdGVzdCh0ZXh0LnJlcGxhY2UoL1xcKD86WyJc
XFwvYmZucnRdfHVbMC05YS1mQS1GXXs0fSkvZywgJ0AnKS4KLXJlcGxhY2UoLyJbXiJcXFxuXHJd
KiJ8dHJ1ZXxmYWxzZXxudWxsfC0/XGQrKD86XC5cZCopPyg/OltlRV1bK1wtXT9cZCspPy9nLCAn
XScpLgotcmVwbGFjZSgvKD86Xnw6fCwpKD86XHMqXFspKy9nLCAnJykpKSB7Ci0KLS8vIEluIHRo
ZSB0aGlyZCBzdGFnZSB3ZSB1c2UgdGhlIGV2YWwgZnVuY3Rpb24gdG8gY29tcGlsZSB0aGUgdGV4
dCBpbnRvIGEKLS8vIEphdmFTY3JpcHQgc3RydWN0dXJlLiBUaGUgJ3snIG9wZXJhdG9yIGlzIHN1
YmplY3QgdG8gYSBzeW50YWN0aWMgYW1iaWd1aXR5Ci0vLyBpbiBKYXZhU2NyaXB0OiBpdCBjYW4g
YmVnaW4gYSBibG9jayBvciBhbiBvYmplY3QgbGl0ZXJhbC4gV2Ugd3JhcCB0aGUgdGV4dAotLy8g
aW4gcGFyZW5zIHRvIGVsaW1pbmF0ZSB0aGUgYW1iaWd1aXR5LgotCi0gICAgICAgICAgICAgICAg
aiA9IGV2YWwoJygnICsgdGV4dCArICcpJyk7Ci0KLS8vIEluIHRoZSBvcHRpb25hbCBmb3VydGgg
c3RhZ2UsIHdlIHJlY3Vyc2l2ZWx5IHdhbGsgdGhlIG5ldyBzdHJ1Y3R1cmUsIHBhc3NpbmcKLS8v
IGVhY2ggbmFtZS92YWx1ZSBwYWlyIHRvIGEgcmV2aXZlciBmdW5jdGlvbiBmb3IgcG9zc2libGUg
dHJhbnNmb3JtYXRpb24uCi0KLSAgICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIHJldml2ZXIg
PT09ICdmdW5jdGlvbicgPwotICAgICAgICAgICAgICAgICAgICB3YWxrKHsnJzogan0sICcnKSA6
IGo7Ci0gICAgICAgICAgICB9Ci0KLS8vIElmIHRoZSB0ZXh0IGlzIG5vdCBKU09OIHBhcnNlYWJs
ZSwgdGhlbiBhIFN5bnRheEVycm9yIGlzIHRocm93bi4KLQotICAgICAgICAgICAgdGhyb3cgbmV3
IFN5bnRheEVycm9yKCdKU09OLnBhcnNlJyk7Ci0gICAgICAgIH07Ci19KCkpOwotCiByZXR1cm4g
SW5qZWN0ZWRTY3JpcHQ7CiB9KTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9JbmplY3RlZFNjcmlwdEFjY2Vzcy5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9JbmplY3RlZFNjcmlwdEFjY2Vzcy5qcwppbmRleCAyZGQyOTA4Li4yNTU4MjY3IDEwMDY0NAot
LS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5qZWN0ZWRTY3JpcHRBY2Nlc3MuanMK
KysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luamVjdGVkU2NyaXB0QWNjZXNzLmpz
CkBAIC01Niw3ICs1Niw3IEBAIEluamVjdGVkU2NyaXB0QWNjZXNzLl9pbnN0YWxsSGFuZGxlciA9
IGZ1bmN0aW9uKG1ldGhvZE5hbWUsIGFzeW5jKQogICAgICAgICBmdW5jdGlvbiBteUNhbGxiYWNr
KHJlc3VsdCwgaXNFeGNlcHRpb24pCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICghaXNFeGNl
cHRpb24pCi0gICAgICAgICAgICAgICAgY2FsbGJhY2soSlNPTi5wYXJzZShyZXN1bHQpKTsKKyAg
ICAgICAgICAgICAgICBjYWxsYmFjayhyZXN1bHQpOwogICAgICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgICAgIFdlYkluc3BlY3Rvci5jb25zb2xlLmFkZE1lc3NhZ2UobmV3IFdlYkluc3BlY3Rv
ci5Db25zb2xlVGV4dE1lc3NhZ2UoIkVycm9yIGRpc3BhdGNoaW5nOiAiICsgbWV0aG9kTmFtZSkp
OwogICAgICAgICB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5z
cGVjdG9yLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcwppbmRl
eCBjY2QzZDAwLi5mZjU1OTM2IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvaW5zcGVjdG9yLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0
b3IuanMKQEAgLTEyNjAsNyArMTI2MCw3IEBAIFdlYkluc3BlY3Rvci51cGRhdGVDb25zb2xlTWVz
c2FnZUV4cGlyZWRDb3VudCA9IGZ1bmN0aW9uKGNvdW50KQogICAgIFdlYkluc3BlY3Rvci5jb25z
b2xlLmFkZE1lc3NhZ2UobmV3IFdlYkluc3BlY3Rvci5Db25zb2xlVGV4dE1lc3NhZ2UobWVzc2Fn
ZSwgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VMZXZlbC5XYXJuaW5nKSk7CiB9
CiAKLVdlYkluc3BlY3Rvci5hZGRDb25zb2xlTWVzc2FnZSA9IGZ1bmN0aW9uKHBheWxvYWQsIGFy
Z3VtZW50c1N0cmluZ2lmaWVkLCBvcHRfYXJncykKK1dlYkluc3BlY3Rvci5hZGRDb25zb2xlTWVz
c2FnZSA9IGZ1bmN0aW9uKHBheWxvYWQsIG9wdF9hcmdzKQogewogICAgIHZhciBjb25zb2xlTWVz
c2FnZSA9IG5ldyBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UoCiAgICAgICAgIHBheWxvYWQu
c291cmNlLApAQCAtMTI3MCwxNCArMTI3MCw3IEBAIFdlYkluc3BlY3Rvci5hZGRDb25zb2xlTWVz
c2FnZSA9IGZ1bmN0aW9uKHBheWxvYWQsIGFyZ3VtZW50c1N0cmluZ2lmaWVkLCBvcHRfYXJnCiAg
ICAgICAgIHBheWxvYWQudXJsLAogICAgICAgICBwYXlsb2FkLmdyb3VwTGV2ZWwsCiAgICAgICAg
IHBheWxvYWQucmVwZWF0Q291bnQpOwotICAgIHZhciBwYXJzZWRBcmd1bWVudHMgPSBbXTsKLSAg
ICBmb3IgKHZhciBpID0gMjsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgewotICAgICAgICBp
ZiAoYXJndW1lbnRzU3RyaW5naWZpZWQpCi0gICAgICAgICAgICBwYXJzZWRBcmd1bWVudHMucHVz
aChKU09OLnBhcnNlKGFyZ3VtZW50c1tpXSkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBw
YXJzZWRBcmd1bWVudHMucHVzaChhcmd1bWVudHNbaV0pOwotICAgIH0KLSAgICBjb25zb2xlTWVz
c2FnZS5zZXRNZXNzYWdlQm9keShwYXJzZWRBcmd1bWVudHMpOworICAgIGNvbnNvbGVNZXNzYWdl
LnNldE1lc3NhZ2VCb2R5KEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSkp
OwogICAgIHRoaXMuY29uc29sZS5hZGRNZXNzYWdlKGNvbnNvbGVNZXNzYWdlKTsKIH0KIApkaWZm
IC0tZ2l0IGEvV2ViS2l0L3F0L0FwaS9xd2ViZWxlbWVudC5jcHAgYi9XZWJLaXQvcXQvQXBpL3F3
ZWJlbGVtZW50LmNwcAppbmRleCA0NDFiZWM3Li45ZDRkMGQwIDEwMDY0NAotLS0gYS9XZWJLaXQv
cXQvQXBpL3F3ZWJlbGVtZW50LmNwcAorKysgYi9XZWJLaXQvcXQvQXBpL3F3ZWJlbGVtZW50LmNw
cApAQCAtMzgsNyArMzgsNiBAQAogI2luY2x1ZGUgIk5vZGVMaXN0LmgiCiAjaW5jbHVkZSAiUHJv
cGVydHlOYW1lQXJyYXkuaCIKICNpbmNsdWRlICJSZW5kZXJJbWFnZS5oIgotI2luY2x1ZGUgIlNj
cmlwdEZ1bmN0aW9uQ2FsbC5oIgogI2luY2x1ZGUgIlN0YXRpY05vZGVMaXN0LmgiCiAjaW5jbHVk
ZSAicXRfcnVudGltZS5oIgogI2luY2x1ZGUgInF3ZWJmcmFtZS5oIgpkaWZmIC0tZ2l0IGEvV2Vi
S2l0L3F0L0NoYW5nZUxvZyBiL1dlYktpdC9xdC9DaGFuZ2VMb2cKaW5kZXggZGJjODQxZS4uMTY0
ZjdmMyAxMDA2NDQKLS0tIGEvV2ViS2l0L3F0L0NoYW5nZUxvZworKysgYi9XZWJLaXQvcXQvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTAtMDItMDUgIFl1cnkgU2VtaWtoYXRza3kgIDx5
dXJ5c0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgUmVtb3ZlIHVudXNlZCBpbm1wb3J0IG9mIFNjcmlwdEZ1bmN0aW9uQ2FsbC5o
CisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMzNTky
CisKKyAgICAgICAgKiBBcGkvcXdlYmVsZW1lbnQuY3BwOgorCiAyMDEwLTAyLTA0ICBObydhbSBS
b3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgQXJpeWEgSGlkYXlhdC4K
</data>
<flag name="review"
          id="30866"
          type_id="1"
          status="-"
          setter="pfeldman"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48226</attachid>
            <date>2010-02-05 05:32:52 -0800</date>
            <delta_ts>2010-02-05 05:36:54 -0800</delta_ts>
            <desc>patch</desc>
            <filename>serialized-sctipt-access2.patch</filename>
            <type>text/plain</type>
            <size>68186</size>
            <attacher name="Yury Semikhatsky">yurys</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NTYyZWZhZC4uNDY1Y2Y2YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMjMgQEAKKzIwMTAtMDItMDUgIFl1cnkgU2VtaWto
YXRza3kgIDx5dXJ5c0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgLSBVc2UgU2VyaWFsaXplZFNjcmlwdFZhbHVlIGZvciBwYXNz
aW5nIGRhdGEgYmV0d2VlbiBpbmplY3RlZCBzY3JpcHQgYW5kCisgICAgICAgIGluc3BlY3RvciBm
cm9udGVuZC4KKyAgICAgICAgLSBSZW1vdmUgY3VzdG9tIEpTT04gaW1wbGVtZW50YXRpb24gZnJv
bSB0aGUgaW5zdHBlY3RvciB1dGlsaXR5IHNjcmlwdC4KKyAgICAgICAgLSBNYWtlIHN1cmUgdGhh
dCBvbmx5IG9iamVjdHMgY3JlYXRlZCBpbiB0aGUgc2FtZSBTY3JpcHRTdGF0ZSBjYW4gYmUgdmFs
dWVzCisgICAgICAgIG9mIFNjcmlwdE9iamVjdC9BcnJheSBwcm9wZXJ0aWVzIGFuZCBhcmd1bWVu
dHMgdG8gU2NyaXB0RnVuY3Rpb25DYWxsLiBXZSBkb24ndAorICAgICAgICB3YW50IFNjcmlwdE9i
amVjdHMgdG8gbGVhayBiZXR3ZWVuIGNvbnRleHRzLgorICAgICAgICAtIFVzZSBTY3JpcHRTdGF0
ZSBvZiB0aGUgJ3RoaXMnIG9iamVjdCBpbiBTY3JpcHRGdW5jdGlvbkNhbGwgaW5zdGVhZCBvZiBw
YXNzaW5nCisgICAgICAgIGl0IGFzIGFkZGl0aW9uYWwgcGFyYW1ldGVyLgorCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMzU5MgorCisgICAgICAgICog
YmluZGluZ3MvanMvSlNJbmplY3RlZFNjcmlwdEhvc3RDdXN0b20uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SlNJbmplY3RlZFNjcmlwdEhvc3Q6OnJlcG9ydERpZERpc3BhdGNoT25JbmplY3RlZFNj
cmlwdCk6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0QXJyYXkuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U2NyaXB0QXJyYXk6OnNldCk6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0
RnVuY3Rpb25DYWxsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEZ1bmN0aW9uQ2FsbDo6
U2NyaXB0RnVuY3Rpb25DYWxsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEZ1bmN0aW9uQ2Fs
bDo6YXBwZW5kQXJndW1lbnQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdEZ1bmN0aW9u
Q2FsbC5oOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdE9iamVjdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTY3JpcHRPYmplY3Q6OnNldCk6CisgICAgICAgICogYmluZGluZ3MvanMvU2Ny
aXB0VmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0VmFsdWU6OnNlcmlhbGl6ZSk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRWYWx1ZTo6ZGVzZXJpYWxpemUpOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL1NjcmlwdFZhbHVlLmg6CisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0
QXJyYXkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0QXJyYXk6OnNldCk6CisgICAgICAg
ICogYmluZGluZ3MvdjgvU2NyaXB0RnVuY3Rpb25DYWxsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNjcmlwdEZ1bmN0aW9uQ2FsbDo6U2NyaXB0RnVuY3Rpb25DYWxsKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcmlwdEZ1bmN0aW9uQ2FsbDo6YXBwZW5kQXJndW1lbnQpOgorICAgICAgICAqIGJpbmRp
bmdzL3Y4L1NjcmlwdEZ1bmN0aW9uQ2FsbC5oOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Njcmlw
dE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRPYmplY3Q6OnNldCk6CisgICAg
ICAgICogYmluZGluZ3MvdjgvU2NyaXB0U3RhdGUuaDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9T
Y3JpcHRWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRWYWx1ZTo6c2VyaWFsaXpl
KToKKyAgICAgICAgKFdlYkNvcmU6OmRlc2VyaWFsaXplKToKKyAgICAgICAgKiBiaW5kaW5ncy92
OC9TY3JpcHRWYWx1ZS5oOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEluamVjdGVk
U2NyaXB0SG9zdEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOEluamVjdGVkU2NyaXB0
SG9zdDo6cmVwb3J0RGlkRGlzcGF0Y2hPbkluamVjdGVkU2NyaXB0Q2FsbGJhY2spOgorICAgICAg
ICAqIGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmpl
Y3RlZFNjcmlwdDo6ZGlzcGF0Y2gpOgorICAgICAgICAoV2ViQ29yZTo6SW5qZWN0ZWRTY3JpcHQ6
OmNhbGxGcmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW5qZWN0ZWRTY3JpcHQ6OndyYXBGb3JD
b25zb2xlKToKKyAgICAgICAgKFdlYkNvcmU6OkluamVjdGVkU2NyaXB0OjpyZWxlYXNlV3JhcHBl
ck9iamVjdEdyb3VwKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuaDoKKyAg
ICAgICAgKiBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkluamVjdGVkU2NyaXB0SG9zdDo6cmVwb3J0RGlkRGlzcGF0Y2hPbkluamVjdGVkU2NyaXB0
KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0Lmg6CisgICAgICAgICog
aW5zcGVjdG9yL0luamVjdGVkU2NyaXB0SG9zdC5pZGw6CisgICAgICAgICogaW5zcGVjdG9yL0lu
c3BlY3RvckJhY2tlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQmFja2VuZDo6
ZGlzcGF0Y2hPbkluamVjdGVkU2NyaXB0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9y
Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpz
ZXRGcm9udGVuZFByb3h5T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRy
b2xsZXI6OmRpZFBhdXNlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6
OmRpZEV2YWx1YXRlRm9yVGVzdEluRnJvbnRlbmQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNw
ZWN0b3JGcm9udGVuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZDo6
SW5zcGVjdG9yRnJvbnRlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmQ6
Om5ld1NjcmlwdEFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kOjpu
ZXdTY3JpcHRPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmQ6OnBv
cHVsYXRlRnJvbnRlbmRTZXR0aW5ncyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9u
dGVuZDo6dXBkYXRlQ29uc29sZU1lc3NhZ2VFeHBpcmVkQ291bnQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yRnJvbnRlbmQ6OmFkZENvbnNvbGVNZXNzYWdlKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckZyb250ZW5kOjp1cGRhdGVDb25zb2xlTWVzc2FnZVJlcGVhdENvdW50KToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kOjp1cGRhdGVSZXNvdXJjZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZDo6cmVtb3ZlUmVzb3VyY2UpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmQ6OmRpZEdldFJlc291cmNlQ29udGVudCk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZDo6dXBkYXRlRm9jdXNlZE5vZGUp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmQ6OnNldEF0dGFjaGVkV2luZG93
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kOjphZGRSZWNvcmRUb1RpbWVs
aW5lKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kOjpwYXJzZWRTY3JpcHRT
b3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmQ6OmZhaWxlZFRvUGFy
c2VTY3JpcHRTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmQ6OmFk
ZFByb2ZpbGVIZWFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmQ6OnNl
dFJlY29yZGluZ1Byb2ZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmQ6
OmRpZEdldFByb2ZpbGVIZWFkZXJzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250
ZW5kOjpkaWRHZXRQcm9maWxlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5k
OjpwYXVzZWRTY3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmQ6OnNl
dERvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kOjpzZXREZXRh
Y2hlZFJvb3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmQ6OnNldENoaWxk
Tm9kZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmQ6OmNoaWxkTm9kZUNv
dW50VXBkYXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZDo6Y2hpbGRO
b2RlSW5zZXJ0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmQ6OmNoaWxk
Tm9kZVJlbW92ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmQ6OmF0dHJp
YnV0ZXNVcGRhdGVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kOjpkaWRS
ZW1vdmVOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kOjpkaWRHZXRD
aGlsZE5vZGVzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kOjpkaWRBcHBs
eURvbUNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZDo6ZGlkR2V0
RXZlbnRMaXN0ZW5lcnNGb3JOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250
ZW5kOjpkaWRHZXRDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5k
OjpkaWREaXNwYXRjaE9uSW5qZWN0ZWRTY3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yRnJvbnRlbmQ6OmFkZERhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZy
b250ZW5kOjpzZWxlY3REYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9u
dGVuZDo6ZGlkR2V0RGF0YWJhc2VUYWJsZU5hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckZyb250ZW5kOjphZGRET01TdG9yYWdlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckZyb250ZW5kOjpzZWxlY3RET01TdG9yYWdlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckZyb250ZW5kOjpkaWRHZXRET01TdG9yYWdlRW50cmllcyk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JGcm9udGVuZDo6ZGlkU2V0RE9NU3RvcmFnZUl0ZW0pOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yRnJvbnRlbmQ6OmRpZFJlbW92ZURPTVN0b3JhZ2VJdGVtKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kOjp1cGRhdGVET01TdG9yYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kOjphZGROb2Rlc1RvU2VhcmNoUmVzdWx0KToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kOjpjb250ZXh0TWVudUl0ZW1TZWxlY3Rl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZDo6ZXZhbHVhdGVGb3JUZXN0
SW5Gcm9udGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZDo6Y2FsbFNp
bXBsZUZ1bmN0aW9uKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuaDoK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kOjpzY3JpcHRTdGF0ZSk6CisgICAg
ICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9JbmplY3RlZFNjcmlwdC5qczoKKyAgICAgICAgKGlu
amVjdGVkU2NyaXB0Q29uc3RydWN0b3IpOgorICAgICAgICAoaW5qZWN0ZWRTY3JpcHRDb25zdHJ1
Y3Rvci4pOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvSW5qZWN0ZWRTY3JpcHRBY2Nl
c3MuanM6CisgICAgICAgIChJbmplY3RlZFNjcmlwdEFjY2Vzcy5faW5zdGFsbEhhbmRsZXIuSW5q
ZWN0ZWRTY3JpcHRBY2Nlc3MucHJvdG90eXBlLm1ldGhvZE5hbWUubXlDYWxsYmFjayk6CisgICAg
ICAgIChJbmplY3RlZFNjcmlwdEFjY2Vzcy5faW5zdGFsbEhhbmRsZXIuSW5qZWN0ZWRTY3JpcHRB
Y2Nlc3MucHJvdG90eXBlLm1ldGhvZE5hbWUpOgorICAgICAgICAoSW5qZWN0ZWRTY3JpcHRBY2Nl
c3MuX2luc3RhbGxIYW5kbGVyKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL2luc3Bl
Y3Rvci5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5wYXVzZWRTY3JpcHQpOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLmFkZENvbnNvbGVNZXNzYWdlKToKKwogMjAxMC0wMi0wNCAgTWFyayBSb3dl
ICA8bXJvd2VAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hl
ci4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbmplY3RlZFNjcmlwdEhvc3RD
dXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luamVjdGVkU2NyaXB0SG9zdEN1c3Rv
bS5jcHAKaW5kZXggOTZjNWM0My4uM2RiODk0ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0luamVjdGVkU2NyaXB0SG9zdEN1c3RvbS5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0luamVjdGVkU2NyaXB0SG9zdEN1c3RvbS5jcHAKQEAgLTUzLDYgKzUzLDcgQEAKICNp
bmNsdWRlICJOb2RlLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2lmIEVOQUJMRShET01fU1RPUkFH
RSkKKyNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKICNpbmNsdWRlICJTdG9yYWdl
LmgiCiAjaW5jbHVkZSAiSlNTdG9yYWdlLmgiCiAjZW5kaWYKQEAgLTYxLDYgKzYyLDcgQEAKICNp
bmNsdWRlIDxwYXJzZXIvU291cmNlQ29kZS5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJheS5o
PgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNMb2NrLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgog
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VS
KQpAQCAtMTk1LDYgKzE5NywyNCBAQCBKU1ZhbHVlIEpTSW5qZWN0ZWRTY3JpcHRIb3N0OjpzZWxl
Y3RET01TdG9yYWdlKEV4ZWNTdGF0ZSosIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB9CiAjZW5kaWYK
IAorSlNWYWx1ZSBKU0luamVjdGVkU2NyaXB0SG9zdDo6cmVwb3J0RGlkRGlzcGF0Y2hPbkluamVj
dGVkU2NyaXB0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK3sKKyAgICBp
ZiAoYXJncy5zaXplKCkgPCAzKQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAK
KyAgICBpZiAoIWFyZ3MuYXQoMCkuaXNJbnQzMigpKQorICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKKyAgICBpbnQgY2FsbElkID0gYXJncy5hdCgwKS5hc0ludDMyKCk7CisgICAgCisgICAg
UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gcmVzdWx0KFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZTo6Y3JlYXRlKGV4ZWMsIGFyZ3MuYXQoMSkpKTsKKyAgICAKKyAgICBib29sIGlzRXhjZXB0aW9u
OworICAgIGlmICghYXJncy5hdCgyKS5nZXRCb29sZWFuKGlzRXhjZXB0aW9uKSkKKyAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgaW1wbCgpLT5yZXBvcnREaWREaXNwYXRjaE9uSW5q
ZWN0ZWRTY3JpcHQoY2FsbElkLCByZXN1bHQuZ2V0KCksIGlzRXhjZXB0aW9uKTsKKyAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKK30KKwogSW5qZWN0ZWRTY3JpcHQgSW5qZWN0ZWRTY3JpcHRIb3N0
OjppbmplY3RlZFNjcmlwdEZvcihTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUpCiB7CiAgICAgSlNM
b2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmlu
ZGluZ3MvanMvU2NyaXB0QXJyYXkuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRBcnJh
eS5jcHAKaW5kZXggMmM0MDc1YS4uY2FlY2M0MCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5n
cy9qcy9TY3JpcHRBcnJheS5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRBcnJh
eS5jcHAKQEAgLTUzLDYgKzUzLDEwIEBAIHN0YXRpYyBib29sIGhhbmRsZUV4Y2VwdGlvbihTY3Jp
cHRTdGF0ZSogc2NyaXB0U3RhdGUpCiAKIGJvb2wgU2NyaXB0QXJyYXk6OnNldCh1bnNpZ25lZCBp
bmRleCwgY29uc3QgU2NyaXB0T2JqZWN0JiB2YWx1ZSkKIHsKKyAgICBpZiAodmFsdWUuc2NyaXB0
U3RhdGUoKSAhPSBtX3NjcmlwdFN0YXRlKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogICAgIEpTTG9jayBsb2NrKFNpbGVuY2VB
c3NlcnRpb25zT25seSk7CiAgICAganNBcnJheSgpLT5wdXQobV9zY3JpcHRTdGF0ZSwgaW5kZXgs
IHZhbHVlLmpzT2JqZWN0KCkpOwogICAgIHJldHVybiBoYW5kbGVFeGNlcHRpb24obV9zY3JpcHRT
dGF0ZSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEZ1bmN0aW9uQ2Fs
bC5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAKaW5kZXgg
YTIyODRiYy4uNTAwMWQzYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRG
dW5jdGlvbkNhbGwuY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RnVuY3Rpb25D
YWxsLmNwcApAQCAtNDIsOCArNDIsOCBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLVNjcmlwdEZ1bmN0aW9uQ2FsbDo6U2NyaXB0RnVuY3Rpb25DYWxsKFNj
cmlwdFN0YXRlKiBleGVjLCBjb25zdCBTY3JpcHRPYmplY3QmIHRoaXNPYmplY3QsIGNvbnN0IFN0
cmluZyYgbmFtZSkKLSAgICA6IG1fZXhlYyhleGVjKQorU2NyaXB0RnVuY3Rpb25DYWxsOjpTY3Jp
cHRGdW5jdGlvbkNhbGwoY29uc3QgU2NyaXB0T2JqZWN0JiB0aGlzT2JqZWN0LCBjb25zdCBTdHJp
bmcmIG5hbWUpCisgICAgOiBtX2V4ZWModGhpc09iamVjdC5zY3JpcHRTdGF0ZSgpKQogICAgICwg
bV90aGlzT2JqZWN0KHRoaXNPYmplY3QpCiAgICAgLCBtX25hbWUobmFtZSkKIHsKQEAgLTUxLDYg
KzUxLDEwIEBAIFNjcmlwdEZ1bmN0aW9uQ2FsbDo6U2NyaXB0RnVuY3Rpb25DYWxsKFNjcmlwdFN0
YXRlKiBleGVjLCBjb25zdCBTY3JpcHRPYmplY3QmIHRoCiAKIHZvaWQgU2NyaXB0RnVuY3Rpb25D
YWxsOjphcHBlbmRBcmd1bWVudChjb25zdCBTY3JpcHRPYmplY3QmIGFyZ3VtZW50KQogeworICAg
IGlmIChhcmd1bWVudC5zY3JpcHRTdGF0ZSgpICE9IG1fZXhlYykgeworICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KICAgICBtX2FyZ3VtZW50cy5h
cHBlbmQoYXJndW1lbnQuanNPYmplY3QoKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmlu
ZGluZ3MvanMvU2NyaXB0RnVuY3Rpb25DYWxsLmggYi9XZWJDb3JlL2JpbmRpbmdzL2pzL1Njcmlw
dEZ1bmN0aW9uQ2FsbC5oCmluZGV4IDdjNTA3NGYuLjk3NDJlOGYgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvYmluZGluZ3MvanMvU2NyaXB0RnVuY3Rpb25DYWxsLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5n
cy9qcy9TY3JpcHRGdW5jdGlvbkNhbGwuaApAQCAtNDgsNyArNDgsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKICAgICBjbGFzcyBTY3JpcHRGdW5jdGlvbkNhbGwgewogICAgIHB1YmxpYzoKLSAg
ICAgICAgU2NyaXB0RnVuY3Rpb25DYWxsKFNjcmlwdFN0YXRlKiBleGVjLCBjb25zdCBTY3JpcHRP
YmplY3QmIHRoaXNPYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSk7CisgICAgICAgIFNjcmlwdEZ1
bmN0aW9uQ2FsbChjb25zdCBTY3JpcHRPYmplY3QmIHRoaXNPYmplY3QsIGNvbnN0IFN0cmluZyYg
bmFtZSk7CiAgICAgICAgIHZpcnR1YWwgflNjcmlwdEZ1bmN0aW9uQ2FsbCgpIHt9OwogCiAgICAg
ICAgIHZvaWQgYXBwZW5kQXJndW1lbnQoY29uc3QgU2NyaXB0T2JqZWN0Jik7CmRpZmYgLS1naXQg
YS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdE9iamVjdC5jcHAgYi9XZWJDb3JlL2JpbmRpbmdz
L2pzL1NjcmlwdE9iamVjdC5jcHAKaW5kZXggMDNlY2ZjNi4uNzk0ODIxOSAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRPYmplY3QuY3BwCisrKyBiL1dlYkNvcmUvYmluZGlu
Z3MvanMvU2NyaXB0T2JqZWN0LmNwcApAQCAtNzAsNiArNzAsMTAgQEAgYm9vbCBTY3JpcHRPYmpl
Y3Q6OnNldChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiAKIGJvb2wg
U2NyaXB0T2JqZWN0OjpzZXQoY29uc3QgY2hhciogbmFtZSwgY29uc3QgU2NyaXB0T2JqZWN0JiB2
YWx1ZSkKIHsKKyAgICBpZiAodmFsdWUuc2NyaXB0U3RhdGUoKSAhPSBtX3NjcmlwdFN0YXRlKSB7
CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQogICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgUHV0UHJv
cGVydHlTbG90IHNsb3Q7CiAgICAganNPYmplY3QoKS0+cHV0KG1fc2NyaXB0U3RhdGUsIElkZW50
aWZpZXIobV9zY3JpcHRTdGF0ZSwgbmFtZSksIHZhbHVlLmpzT2JqZWN0KCksIHNsb3QpOwpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRWYWx1ZS5jcHAgYi9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1NjcmlwdFZhbHVlLmNwcAppbmRleCBhYzkyZTE0Li4wMDVjMzI5IDEwMDY0NAot
LS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFZhbHVlLmNwcAorKysgYi9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1NjcmlwdFZhbHVlLmNwcApAQCAtMjksNiArMjksOCBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIlNjcmlwdFZhbHVlLmgiCiAKKyNpbmNsdWRlICJTZXJpYWxpemVk
U2NyaXB0VmFsdWUuaCIKKwogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0FQSUNhc3QuaD4KICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1ZhbHVlUmVmLmg+CiAKQEAgLTgxLDQgKzgzLDE0IEBA
IGJvb2wgU2NyaXB0VmFsdWU6OmlzT2JqZWN0KCkgY29uc3QKICAgICByZXR1cm4gbV92YWx1ZS5n
ZXQoKS5pc09iamVjdCgpOwogfQogCitQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4g
U2NyaXB0VmFsdWU6OnNlcmlhbGl6ZShTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUpCit7CisgICAg
cmV0dXJuIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKHNjcmlwdFN0YXRlLCBqc1ZhbHVl
KCkpOworfQorCitTY3JpcHRWYWx1ZSBTY3JpcHRWYWx1ZTo6ZGVzZXJpYWxpemUoU2NyaXB0U3Rh
dGUqIHNjcmlwdFN0YXRlLCBTZXJpYWxpemVkU2NyaXB0VmFsdWUqIHZhbHVlKQoreworICAgIHJl
dHVybiBTY3JpcHRWYWx1ZSh2YWx1ZS0+ZGVzZXJpYWxpemUoc2NyaXB0U3RhdGUsIHNjcmlwdFN0
YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRWYWx1ZS5oIGIvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9TY3JpcHRWYWx1ZS5oCmluZGV4IGIxZWFhMjEuLjljY2I3YWMgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0VmFsdWUuaAorKysgYi9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1NjcmlwdFZhbHVlLmgKQEAgLTM0LDEwICszNCwxMiBAQAogI2luY2x1ZGUgIlBs
YXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiU2NyaXB0U3RhdGUuaCIKICNpbmNsdWRlIDxydW50
aW1lL1Byb3RlY3QuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIGNsYXNzIFN0cmluZzsKK2NsYXNzIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTsK
IAogY2xhc3MgU2NyaXB0VmFsdWUgewogcHVibGljOgpAQCAtNTMsNiArNTUsOSBAQCBwdWJsaWM6
CiAgICAgYm9vbCBpc09iamVjdCgpIGNvbnN0OwogICAgIGJvb2wgaGFzTm9WYWx1ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fdmFsdWUgPT0gSlNDOjpKU1ZhbHVlKCk7IH0KIAorICAgIFBhc3NSZWZQdHI8
U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxpemUoU2NyaXB0U3RhdGUqKTsKKyAgICBzdGF0
aWMgU2NyaXB0VmFsdWUgZGVzZXJpYWxpemUoU2NyaXB0U3RhdGUqLCBTZXJpYWxpemVkU2NyaXB0
VmFsdWUqKTsKKwogcHJpdmF0ZToKICAgICBKU0M6OlByb3RlY3RlZEpTVmFsdWUgbV92YWx1ZTsK
IH07CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdEFycmF5LmNwcCBiL1dl
YkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0QXJyYXkuY3BwCmluZGV4IDc0OGVlMTkuLjAxYjA4OTgg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0QXJyYXkuY3BwCisrKyBiL1dl
YkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0QXJyYXkuY3BwCkBAIC01MCw2ICs1MCwxMCBAQCBTY3Jp
cHRBcnJheTo6U2NyaXB0QXJyYXkoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlLCB2ODo6SGFuZGxl
PHY4OjpBcnJheT4gdjhBcnJheQogCiBib29sIFNjcmlwdEFycmF5OjpzZXQodW5zaWduZWQgaW5k
ZXgsIGNvbnN0IFNjcmlwdE9iamVjdCYgdmFsdWUpCiB7CisgICAgaWYgKHZhbHVlLnNjcmlwdFN0
YXRlKCkgIT0gbV9zY3JpcHRTdGF0ZSkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KICAgICBTY3JpcHRTY29wZSBzY29wZShtX3Nj
cmlwdFN0YXRlKTsKICAgICB2OE9iamVjdCgpLT5TZXQodjg6OkludGVnZXI6Ok5ldyhpbmRleCks
IHZhbHVlLnY4VmFsdWUoKSk7CiAgICAgcmV0dXJuIHNjb3BlLnN1Y2Nlc3MoKTsKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0RnVuY3Rpb25DYWxsLmNwcCBiL1dlYkNvcmUv
YmluZGluZ3MvdjgvU2NyaXB0RnVuY3Rpb25DYWxsLmNwcAppbmRleCBhMjMyYWNkLi5lNmIyMmVl
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAK
KysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRGdW5jdGlvbkNhbGwuY3BwCkBAIC00NSw4
ICs0NSw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU2NyaXB0RnVuY3Rpb25DYWxsOjpT
Y3JpcHRGdW5jdGlvbkNhbGwoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlLCBjb25zdCBTY3JpcHRP
YmplY3QmIHRoaXNPYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSkKLSAgICA6IG1fc2NyaXB0U3Rh
dGUoc2NyaXB0U3RhdGUpCitTY3JpcHRGdW5jdGlvbkNhbGw6OlNjcmlwdEZ1bmN0aW9uQ2FsbChj
b25zdCBTY3JpcHRPYmplY3QmIHRoaXNPYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSkKKyAgICA6
IG1fc2NyaXB0U3RhdGUodGhpc09iamVjdC5zY3JpcHRTdGF0ZSgpKQogICAgICwgbV90aGlzT2Jq
ZWN0KHRoaXNPYmplY3QpCiAgICAgLCBtX25hbWUobmFtZSkKIHsKQEAgLTU0LDYgKzU0LDEwIEBA
IFNjcmlwdEZ1bmN0aW9uQ2FsbDo6U2NyaXB0RnVuY3Rpb25DYWxsKFNjcmlwdFN0YXRlKiBzY3Jp
cHRTdGF0ZSwgY29uc3QgU2NyaXB0T2JqCiAKIHZvaWQgU2NyaXB0RnVuY3Rpb25DYWxsOjphcHBl
bmRBcmd1bWVudChjb25zdCBTY3JpcHRPYmplY3QmIGFyZ3VtZW50KQogeworICAgIGlmIChhcmd1
bWVudC5zY3JpcHRTdGF0ZSgpICE9IG1fc2NyaXB0U3RhdGUpIHsKKyAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgbV9hcmd1bWVudHMuYXBw
ZW5kKGFyZ3VtZW50KTsKIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3Jp
cHRGdW5jdGlvbkNhbGwuaCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0RnVuY3Rpb25DYWxs
LmgKaW5kZXggNjIwMzQwMi4uNGNiYmY3ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92
OC9TY3JpcHRGdW5jdGlvbkNhbGwuaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdEZ1
bmN0aW9uQ2FsbC5oCkBAIC00Myw3ICs0Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAg
IGNsYXNzIFNjcmlwdEZ1bmN0aW9uQ2FsbCB7CiAgICAgcHVibGljOgotICAgICAgICBTY3JpcHRG
dW5jdGlvbkNhbGwoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlLCBjb25zdCBTY3JpcHRPYmplY3Qm
IHRoaXNPYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSk7CisgICAgICAgIFNjcmlwdEZ1bmN0aW9u
Q2FsbChjb25zdCBTY3JpcHRPYmplY3QmIHRoaXNPYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSk7
CiAgICAgICAgIHZpcnR1YWwgflNjcmlwdEZ1bmN0aW9uQ2FsbCgpIHt9OwogCiAgICAgICAgIHZv
aWQgYXBwZW5kQXJndW1lbnQoY29uc3QgU2NyaXB0T2JqZWN0Jik7CmRpZmYgLS1naXQgYS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L1NjcmlwdE9iamVjdC5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Nj
cmlwdE9iamVjdC5jcHAKaW5kZXggMGZjZDE2Zi4uNTIwYzU3YiAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9iaW5kaW5ncy92OC9TY3JpcHRPYmplY3QuY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvdjgv
U2NyaXB0T2JqZWN0LmNwcApAQCAtNjcsNiArNjcsMTAgQEAgYm9vbCBTY3JpcHRPYmplY3Q6OnNl
dChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiAKIGJvb2wgU2NyaXB0
T2JqZWN0OjpzZXQoY29uc3QgY2hhciogbmFtZSwgY29uc3QgU2NyaXB0T2JqZWN0JiB2YWx1ZSkK
IHsKKyAgICBpZiAodmFsdWUuc2NyaXB0U3RhdGUoKSAhPSBtX3NjcmlwdFN0YXRlKSB7CisgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQog
ICAgIFNjcmlwdFNjb3BlIHNjb3BlKG1fc2NyaXB0U3RhdGUpOwogICAgIHY4T2JqZWN0KCktPlNl
dCh2ODo6U3RyaW5nOjpOZXcobmFtZSksIHZhbHVlLnY4VmFsdWUoKSk7CiAgICAgcmV0dXJuIHNj
b3BlLnN1Y2Nlc3MoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0U3Rh
dGUuaCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0U3RhdGUuaAppbmRleCBlNzFiZWNiLi41
YzVjZTZjIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFN0YXRlLmgKKysr
IGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRTdGF0ZS5oCkBAIC0zOCw5ICszOCw5IEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBET01XcmFwcGVyV29ybGQ7CisgICAgY2xh
c3MgRnJhbWU7CiAgICAgY2xhc3MgTm9kZTsKICAgICBjbGFzcyBQYWdlOwotICAgIGNsYXNzIEZy
YW1lOwogCiAgICAgY2xhc3MgU2NyaXB0U3RhdGUgOiBwdWJsaWMgTm9uY29weWFibGUgewogICAg
IHB1YmxpYzoKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0VmFsdWUuY3Bw
IGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRWYWx1ZS5jcHAKaW5kZXggYWY4NGU5OS4uY2Yy
YTdkOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRWYWx1ZS5jcHAKKysr
IGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRWYWx1ZS5jcHAKQEAgLTMxLDEwICszMSwyNCBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNjcmlwdFZhbHVlLmgiCiAKKyNpbmNs
dWRlICJTY3JpcHRTY29wZS5oIgorI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgog
I2luY2x1ZGUgIlY4QmluZGluZy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK1Bhc3NSZWZQ
dHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBTY3JpcHRWYWx1ZTo6c2VyaWFsaXplKFNjcmlwdFN0
YXRlKiBzY3JpcHRTdGF0ZSkKK3sKKyAgICBTY3JpcHRTY29wZSBzY29wZShzY3JpcHRTdGF0ZSk7
CisgICAgcmV0dXJuIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKHY4VmFsdWUoKSk7Cit9
CisKK1NjcmlwdFZhbHVlIGRlc2VyaWFsaXplKFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSwgU2Vy
aWFsaXplZFNjcmlwdFZhbHVlKiB2YWx1ZSkKK3sKKyAgICBTY3JpcHRTY29wZSBzY29wZShzY3Jp
cHRTdGF0ZSk7CisgICAgcmV0dXJuIFNjcmlwdFZhbHVlKHZhbHVlLT5kZXNlcmlhbGl6ZSgpKTsK
K30KKwogYm9vbCBTY3JpcHRWYWx1ZTo6Z2V0U3RyaW5nKFN0cmluZyYgcmVzdWx0KSBjb25zdAog
ewogICAgIGlmIChtX3ZhbHVlLklzRW1wdHkoKSkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGlu
Z3MvdjgvU2NyaXB0VmFsdWUuaCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0VmFsdWUuaApp
bmRleCA2YTcwYmQ3Li4xNzEzZjgwIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Nj
cmlwdFZhbHVlLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRWYWx1ZS5oCkBAIC0z
NSw2ICszNSw3IEBACiAjaW5jbHVkZSAiU2NyaXB0U3RhdGUuaCIKIAogI2luY2x1ZGUgPHY4Lmg+
CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KIAogI2lmbmRlZiBOREVCVUcKICNpbmNsdWRl
ICJWOFByb3h5LmgiICAvLyBmb3IgcmVnaXN0ZXIgYW5kIHVucmVnaXN0ZXIgZ2xvYmFsIGhhbmRs
ZXMuCkBAIC00Miw2ICs0Myw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgU2Vy
aWFsaXplZFNjcmlwdFZhbHVlOworCiBjbGFzcyBTY3JpcHRWYWx1ZSB7CiBwdWJsaWM6CiAgICAg
U2NyaXB0VmFsdWUoKSB7fQpAQCAtMTIxLDYgKzEyNCw5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIG1fdmFsdWUuSXNFbXB0eSgpOwogICAgIH0KIAorICAgIFBhc3NSZWZQdHI8U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlPiBzZXJpYWxpemUoU2NyaXB0U3RhdGUqKTsKKyAgICBzdGF0aWMgU2NyaXB0
VmFsdWUgZGVzZXJpYWxpemUoU2NyaXB0U3RhdGUqLCBTZXJpYWxpemVkU2NyaXB0VmFsdWUqKTsK
KwogICAgIHZvaWQgY2xlYXIoKQogICAgIHsKICAgICAgICAgaWYgKG1fdmFsdWUuSXNFbXB0eSgp
KQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJbmplY3RlZFNjcmlw
dEhvc3RDdXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJbmplY3RlZFNj
cmlwdEhvc3RDdXN0b20uY3BwCmluZGV4IGFkNGVkMDEuLjk0MmIwMTcgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW5qZWN0ZWRTY3JpcHRIb3N0Q3VzdG9tLmNwcAor
KysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEluamVjdGVkU2NyaXB0SG9zdEN1c3Rv
bS5jcHAKQEAgLTM5LDEyICszOSwxNCBAQAogI2luY2x1ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIu
aCIKICNpbmNsdWRlICJOb2RlLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZS5oIgogCiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCiAjaW5jbHVkZSAi
VjhEYXRhYmFzZS5oIgogI2luY2x1ZGUgIlY4Tm9kZS5oIgogI2luY2x1ZGUgIlY4UHJveHkuaCIK
ICNpbmNsdWRlICJWOFN0b3JhZ2UuaCIKKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIApAQCAtMTk0LDYgKzE5NiwxOSBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gVjhJbmplY3RlZFNjcmlwdEhvc3Q6OnNlbGVjdERPTVN0b3JhZ2VDYWxsYmFjayhjb25zdCB2
ODo6QQogfQogI2VuZGlmCiAKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiBWOEluamVjdGVkU2NyaXB0
SG9zdDo6cmVwb3J0RGlkRGlzcGF0Y2hPbkluamVjdGVkU2NyaXB0Q2FsbGJhY2soY29uc3Qgdjg6
OkFyZ3VtZW50cyYgYXJncykKK3sKKyAgICBJTkNfU1RBVFMoIkluamVjdGVkU2NyaXB0SG9zdC5y
ZXBvcnREaWREaXNwYXRjaE9uSW5qZWN0ZWRTY3JpcHQoKSIpOworICAgIGlmIChhcmdzLkxlbmd0
aCgpIDwgMykKKyAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKKyAgICBJbmplY3RlZFNj
cmlwdEhvc3QqIGhvc3QgPSBWOEluamVjdGVkU2NyaXB0SG9zdDo6dG9OYXRpdmUoYXJncy5Ib2xk
ZXIoKSk7CisgICAgaW50IGNhbGxJZCA9IGFyZ3NbMF0tPlRvSW50MzIoKS0+VmFsdWUoKTsKKyAg
ICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiByZXN1bHQoU2VyaWFsaXplZFNjcmlwdFZh
bHVlOjpjcmVhdGUoYXJnc1sxXSkpOworICAgIGJvb2wgaXNFeGNlcHRpb24gPSBhcmdzWzJdLT5U
b0Jvb2xlYW4oKS0+VmFsdWUoKTsKKyAgICBob3N0LT5yZXBvcnREaWREaXNwYXRjaE9uSW5qZWN0
ZWRTY3JpcHQoY2FsbElkLCByZXN1bHQuZ2V0KCksIGlzRXhjZXB0aW9uKTsKKyAgICByZXR1cm4g
djg6OlVuZGVmaW5lZCgpOworfQorCiBJbmplY3RlZFNjcmlwdCBJbmplY3RlZFNjcmlwdEhvc3Q6
OmluamVjdGVkU2NyaXB0Rm9yKFNjcmlwdFN0YXRlKiBpbnNwZWN0ZWRTY3JpcHRTdGF0ZSkKIHsK
ICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2lu
c3BlY3Rvci9JbmplY3RlZFNjcmlwdC5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNj
cmlwdC5jcHAKaW5kZXggNTUyNTg3Ny4uNDJhMjg1NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5qZWN0ZWRTY3JpcHQuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVk
U2NyaXB0LmNwcApAQCAtMzQsNiArMzQsNyBAQAogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAKICNp
bmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZS5oIgogI2luY2x1ZGUgIlNjcmlwdEZ1bmN0aW9uQ2FsbC5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CkBAIC00MywxMSArNDQsMTAgQEAgSW5qZWN0ZWRTY3JpcHQ6OkluamVjdGVkU2NyaXB0KFNj
cmlwdE9iamVjdCBpbmplY3RlZFNjcmlwdE9iamVjdCkKIHsKIH0KIAotdm9pZCBJbmplY3RlZFNj
cmlwdDo6ZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kTmFtZSwgY29u
c3QgU3RyaW5nJiBhcmd1bWVudHMsIGJvb2wgYXN5bmMsIFN0cmluZyogcmVzdWx0LCBib29sKiBo
YWRFeGNlcHRpb24pIAordm9pZCBJbmplY3RlZFNjcmlwdDo6ZGlzcGF0Y2gobG9uZyBjYWxsSWQs
IGNvbnN0IFN0cmluZyYgbWV0aG9kTmFtZSwgY29uc3QgU3RyaW5nJiBhcmd1bWVudHMsIGJvb2wg
YXN5bmMsIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+KiByZXN1bHQsIGJvb2wqIGhhZEV4
Y2VwdGlvbikgCiB7CiAgICAgQVNTRVJUKCFoYXNOb1ZhbHVlKCkpOwotICAgIFNjcmlwdFN0YXRl
KiBzY3JpcHRTdGF0ZSA9IG1faW5qZWN0ZWRTY3JpcHRPYmplY3Quc2NyaXB0U3RhdGUoKTsKLSAg
ICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24oc2NyaXB0U3RhdGUsIG1faW5qZWN0ZWRTY3Jp
cHRPYmplY3QsICJkaXNwYXRjaCIpOworICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbiht
X2luamVjdGVkU2NyaXB0T2JqZWN0LCAiZGlzcGF0Y2giKTsKICAgICBmdW5jdGlvbi5hcHBlbmRB
cmd1bWVudChtZXRob2ROYW1lKTsKICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChhcmd1bWVu
dHMpOwogICAgIGlmIChhc3luYykKQEAgLTU1LDM4ICs1NSwzMyBAQCB2b2lkIEluamVjdGVkU2Ny
aXB0OjpkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2ROYW1lLCBjb25z
dCBTdHJpbgogICAgICpoYWRFeGNlcHRpb24gPSBmYWxzZTsKICAgICBTY3JpcHRWYWx1ZSByZXN1
bHRWYWx1ZSA9IGZ1bmN0aW9uLmNhbGwoKmhhZEV4Y2VwdGlvbik7CiAgICAgaWYgKCEqaGFkRXhj
ZXB0aW9uKQotICAgICAgICAqcmVzdWx0ID0gcmVzdWx0VmFsdWUudG9TdHJpbmcoc2NyaXB0U3Rh
dGUpOworICAgICAgICAqcmVzdWx0ID0gcmVzdWx0VmFsdWUuc2VyaWFsaXplKG1faW5qZWN0ZWRT
Y3JpcHRPYmplY3Quc2NyaXB0U3RhdGUoKSk7CiB9CiAKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9E
RUJVR0dFUikKLVN0cmluZyBJbmplY3RlZFNjcmlwdDo6Y2FsbEZyYW1lcygpCitQYXNzUmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gSW5qZWN0ZWRTY3JpcHQ6OmNhbGxGcmFtZXMoKQogewog
ICAgIEFTU0VSVCghaGFzTm9WYWx1ZSgpKTsKLSAgICBTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUg
PSBtX2luamVjdGVkU2NyaXB0T2JqZWN0LnNjcmlwdFN0YXRlKCk7Ci0gICAgU2NyaXB0RnVuY3Rp
b25DYWxsIGZ1bmN0aW9uKHNjcmlwdFN0YXRlLCBtX2luamVjdGVkU2NyaXB0T2JqZWN0LCAiY2Fs
bEZyYW1lcyIpOworICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX2luamVjdGVkU2Ny
aXB0T2JqZWN0LCAiY2FsbEZyYW1lcyIpOwogICAgIFNjcmlwdFZhbHVlIGNhbGxGcmFtZXNWYWx1
ZSA9IGZ1bmN0aW9uLmNhbGwoKTsKLSAgICByZXR1cm4gY2FsbEZyYW1lc1ZhbHVlLnRvU3RyaW5n
KHNjcmlwdFN0YXRlKTsKKyAgICByZXR1cm4gY2FsbEZyYW1lc1ZhbHVlLnNlcmlhbGl6ZShtX2lu
amVjdGVkU2NyaXB0T2JqZWN0LnNjcmlwdFN0YXRlKCkpOwogfQogI2VuZGlmCiAKLVN0cmluZyBJ
bmplY3RlZFNjcmlwdDo6d3JhcEFuZFN0cmluZ2lmeUZvckNvbnNvbGUoU2NyaXB0VmFsdWUgdmFs
dWUpCitQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gSW5qZWN0ZWRTY3JpcHQ6Ondy
YXBGb3JDb25zb2xlKFNjcmlwdFZhbHVlIHZhbHVlKQogewogICAgIEFTU0VSVCghaGFzTm9WYWx1
ZSgpKTsKLSAgICBTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUgPSBtX2luamVjdGVkU2NyaXB0T2Jq
ZWN0LnNjcmlwdFN0YXRlKCk7Ci0gICAgU2NyaXB0RnVuY3Rpb25DYWxsIHdyYXBGdW5jdGlvbihz
Y3JpcHRTdGF0ZSwgbV9pbmplY3RlZFNjcmlwdE9iamVjdCwgIndyYXBBbmRTdHJpbmdpZnlPYmpl
Y3QiKTsKKyAgICBTY3JpcHRGdW5jdGlvbkNhbGwgd3JhcEZ1bmN0aW9uKG1faW5qZWN0ZWRTY3Jp
cHRPYmplY3QsICJ3cmFwT2JqZWN0Iik7CiAgICAgd3JhcEZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50
KHZhbHVlKTsKICAgICB3cmFwRnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoImNvbnNvbGUiKTsKICAg
ICBTY3JpcHRWYWx1ZSByID0gd3JhcEZ1bmN0aW9uLmNhbGwoKTsKLSAgICBpZiAoci5oYXNOb1Zh
bHVlKCkpCi0gICAgICAgIHJldHVybiAiIjsKLSAgICByZXR1cm4gci50b1N0cmluZyhzY3JpcHRT
dGF0ZSk7CisgICAgcmV0dXJuIHIuc2VyaWFsaXplKG1faW5qZWN0ZWRTY3JpcHRPYmplY3Quc2Ny
aXB0U3RhdGUoKSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRTY3JpcHQ6OnJlbGVhc2VXcmFwcGVyT2Jq
ZWN0R3JvdXAoY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCkKIHsKICAgICBBU1NFUlQoIWhhc05v
VmFsdWUoKSk7Ci0gICAgU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlID0gbV9pbmplY3RlZFNjcmlw
dE9iamVjdC5zY3JpcHRTdGF0ZSgpOwotICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCByZWxlYXNlRnVu
Y3Rpb24oc2NyaXB0U3RhdGUsIG1faW5qZWN0ZWRTY3JpcHRPYmplY3QsICJyZWxlYXNlV3JhcHBl
ck9iamVjdEdyb3VwIik7CisgICAgU2NyaXB0RnVuY3Rpb25DYWxsIHJlbGVhc2VGdW5jdGlvbiht
X2luamVjdGVkU2NyaXB0T2JqZWN0LCAicmVsZWFzZVdyYXBwZXJPYmplY3RHcm91cCIpOwogICAg
IHJlbGVhc2VGdW5jdGlvbi5hcHBlbmRBcmd1bWVudChvYmplY3RHcm91cCk7CiAgICAgcmVsZWFz
ZUZ1bmN0aW9uLmNhbGwoKTsKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luamVj
dGVkU2NyaXB0LmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5oCmluZGV4IGI3
MGVlMzkuLmRiNDBmODAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2Ny
aXB0LmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuaApAQCAtMzQsOSAr
MzQsMTEgQEAKICNpbmNsdWRlICJJbmplY3RlZFNjcmlwdEhvc3QuaCIKICNpbmNsdWRlICJTY3Jp
cHRPYmplY3QuaCIKICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYv
UGFzc1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZTsKIGNsYXNzIFN0cmluZzsKIAogY2xhc3MgSW5qZWN0ZWRTY3JpcHQgewpAQCAt
NDYsMTEgKzQ4LDExIEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaGFzTm9WYWx1ZSgpIGNvbnN0IHsg
cmV0dXJuIG1faW5qZWN0ZWRTY3JpcHRPYmplY3QuaGFzTm9WYWx1ZSgpOyB9CiAKLSAgICB2b2lk
IGRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZE5hbWUsIGNvbnN0IFN0
cmluZyYgYXJndW1lbnRzLCBib29sIGFzeW5jLCBTdHJpbmcqIHJlc3VsdCwgYm9vbCogaGFkRXhj
ZXB0aW9uKTsKKyAgICB2b2lkIGRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1l
dGhvZE5hbWUsIGNvbnN0IFN0cmluZyYgYXJndW1lbnRzLCBib29sIGFzeW5jLCBSZWZQdHI8U2Vy
aWFsaXplZFNjcmlwdFZhbHVlPiogcmVzdWx0LCBib29sKiBoYWRFeGNlcHRpb24pOwogI2lmIEVO
QUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQotICAgIFN0cmluZyBjYWxsRnJhbWVzKCk7CisgICAg
UGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGNhbGxGcmFtZXMoKTsKICNlbmRpZgot
ICAgIFN0cmluZyB3cmFwQW5kU3RyaW5naWZ5Rm9yQ29uc29sZShTY3JpcHRWYWx1ZSk7CisgICAg
UGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHdyYXBGb3JDb25zb2xlKFNjcmlwdFZh
bHVlKTsKICAgICB2b2lkIHJlbGVhc2VXcmFwcGVyT2JqZWN0R3JvdXAoY29uc3QgU3RyaW5nJik7
CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlw
dEhvc3QuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcAppbmRl
eCAxM2UxNTZhLi42MmRiNGI0IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbmplY3Rl
ZFNjcmlwdEhvc3QuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0SG9z
dC5jcHAKQEAgLTQ1LDggKzQ1LDYgQEAKICNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZC5oIgog
I2luY2x1ZGUgIkluc3BlY3RvclJlc291cmNlLmgiCiAjaW5jbHVkZSAiUGFzdGVib2FyZC5oIgot
I2luY2x1ZGUgIlNjcmlwdEFycmF5LmgiCi0jaW5jbHVkZSAiU2NyaXB0RnVuY3Rpb25DYWxsLmgi
CiAKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikgJiYgVVNFKEpTQykKICNpbmNsdWRl
ICJKYXZhU2NyaXB0Q2FsbEZyYW1lLmgiCkBAIC0xNjIsNyArMTYwLDcgQEAgdm9pZCBJbmplY3Rl
ZFNjcmlwdEhvc3Q6OnNlbGVjdERPTVN0b3JhZ2UoU3RvcmFnZSogc3RvcmFnZSkKIH0KICNlbmRp
ZgogCi12b2lkIEluamVjdGVkU2NyaXB0SG9zdDo6cmVwb3J0RGlkRGlzcGF0Y2hPbkluamVjdGVk
U2NyaXB0KGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIHJlc3VsdCwgYm9vbCBpc0V4Y2VwdGlv
bikKK3ZvaWQgSW5qZWN0ZWRTY3JpcHRIb3N0OjpyZXBvcnREaWREaXNwYXRjaE9uSW5qZWN0ZWRT
Y3JpcHQobG9uZyBjYWxsSWQsIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogcmVzdWx0LCBib29sIGlz
RXhjZXB0aW9uKQogewogICAgIGlmIChJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQgPSBpbnNw
ZWN0b3JGcm9udGVuZCgpKQogICAgICAgICBmcm9udGVuZC0+ZGlkRGlzcGF0Y2hPbkluamVjdGVk
U2NyaXB0KGNhbGxJZCwgcmVzdWx0LCBpc0V4Y2VwdGlvbik7CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luamVj
dGVkU2NyaXB0SG9zdC5oCmluZGV4IDkwMTQ3MmMuLmZiNTYxMTUgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0SG9zdC5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9y
L0luamVjdGVkU2NyaXB0SG9zdC5oCkBAIC00Niw2ICs0Niw3IEBAIGNsYXNzIEluc3BlY3RvckRP
TUFnZW50OwogY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmQ7CiBjbGFzcyBKYXZhU2NyaXB0Q2FsbEZy
YW1lOwogY2xhc3MgTm9kZTsKK2NsYXNzIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTsKIGNsYXNzIFN0
b3JhZ2U7CiAKIGNsYXNzIEluamVjdGVkU2NyaXB0SG9zdCA6IHB1YmxpYyBSZWZDb3VudGVkPElu
amVjdGVkU2NyaXB0SG9zdD4KQEAgLTgyLDcgKzgzLDcgQEAgcHVibGljOgogI2lmIEVOQUJMRShE
T01fU1RPUkFHRSkKICAgICB2b2lkIHNlbGVjdERPTVN0b3JhZ2UoU3RvcmFnZSogc3RvcmFnZSk7
CiAjZW5kaWYKLSAgICB2b2lkIHJlcG9ydERpZERpc3BhdGNoT25JbmplY3RlZFNjcmlwdChsb25n
IGNhbGxJZCwgY29uc3QgU3RyaW5nJiByZXN1bHQsIGJvb2wgaXNFeGNlcHRpb24pOworICAgIHZv
aWQgcmVwb3J0RGlkRGlzcGF0Y2hPbkluamVjdGVkU2NyaXB0KGxvbmcgY2FsbElkLCBTZXJpYWxp
emVkU2NyaXB0VmFsdWUqIHJlc3VsdCwgYm9vbCBpc0V4Y2VwdGlvbik7CiAKICAgICBJbmplY3Rl
ZFNjcmlwdCBpbmplY3RlZFNjcmlwdEZvcihTY3JpcHRTdGF0ZSopOwogICAgIEluamVjdGVkU2Ny
aXB0IGluamVjdGVkU2NyaXB0Rm9ySWQobG9uZyk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuaWRsIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRT
Y3JpcHRIb3N0LmlkbAppbmRleCBkMjI0ZDFhLi43M2EzNmZkIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuaWRsCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9y
L0luamVjdGVkU2NyaXB0SG9zdC5pZGwKQEAgLTU1LDYgKzU1LDYgQEAgbW9kdWxlIGNvcmUgewog
ICAgICAgICBbQ3VzdG9tXSB2b2lkIHNlbGVjdERPTVN0b3JhZ2UoaW4gRE9NT2JqZWN0IHN0b3Jh
Z2UpOwogI2VuZGlmCiAKLSAgICAgICAgdm9pZCByZXBvcnREaWREaXNwYXRjaE9uSW5qZWN0ZWRT
Y3JpcHQoaW4gbG9uZyBjYWxsSWQsIGluIERPTVN0cmluZyByZXN1bHQsIGluIGJvb2xlYW4gaXNF
eGNlcHRpb24pOworICAgICAgICBbQ3VzdG9tXSB2b2lkIHJlcG9ydERpZERpc3BhdGNoT25Jbmpl
Y3RlZFNjcmlwdChpbiBsb25nIGNhbGxJZCwgaW4gRE9NT2JqZWN0IHJlc3VsdCwgaW4gYm9vbGVh
biBpc0V4Y2VwdGlvbik7CiAgICAgfTsKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckJhY2tlbmQuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2Vu
ZC5jcHAKaW5kZXggMWNlMGU2OS4uNWUzYTkxMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQmFja2VuZC5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
QmFja2VuZC5jcHAKQEAgLTQ5LDcgKzQ5LDcgQEAKICNpbmNsdWRlICJJbnNwZWN0b3JSZXNvdXJj
ZS5oIgogI2luY2x1ZGUgIlBhc3RlYm9hcmQuaCIKICNpbmNsdWRlICJTY3JpcHRBcnJheS5oIgot
I2luY2x1ZGUgIlNjcmlwdEZ1bmN0aW9uQ2FsbC5oIgorI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZS5oIgogCiAjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQogI2luY2x1ZGUgIlN0b3JhZ2Uu
aCIKQEAgLTI5NSwxMiArMjk1LDEyIEBAIHZvaWQgSW5zcGVjdG9yQmFja2VuZDo6ZGlzcGF0Y2hP
bkluamVjdGVkU2NyaXB0KGxvbmcgY2FsbElkLCBsb25nIGluamVjdGVkU2NyaXB0CiAgICAgaWYg
KGluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgU3Ry
aW5nIHJlc3VsdDsKKyAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiByZXN1bHQ7CiAg
ICAgYm9vbCBoYWRFeGNlcHRpb24gPSBmYWxzZTsKICAgICBpbmplY3RlZFNjcmlwdC5kaXNwYXRj
aChjYWxsSWQsIG1ldGhvZE5hbWUsIGFyZ3VtZW50cywgYXN5bmMsICZyZXN1bHQsICZoYWRFeGNl
cHRpb24pOwogICAgIGlmIChhc3luYykKICAgICAgICAgcmV0dXJuOyAgLy8gSW5qZWN0ZWRTY3Jp
cHQgd2lsbCByZXR1cm4gcmVzdWx0IGFzeW5jaHJvbm91c2x5IGJ5IG1lYW5zIG9mIDo6cmVwb3J0
RGlkRGlzcGF0Y2hPbkluamVjdGVkU2NyaXB0LgotICAgIGZyb250ZW5kLT5kaWREaXNwYXRjaE9u
SW5qZWN0ZWRTY3JpcHQoY2FsbElkLCByZXN1bHQsIGhhZEV4Y2VwdGlvbik7CisgICAgZnJvbnRl
bmQtPmRpZERpc3BhdGNoT25JbmplY3RlZFNjcmlwdChjYWxsSWQsIHJlc3VsdC5nZXQoKSwgaGFk
RXhjZXB0aW9uKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JCYWNrZW5kOjpnZXRDaGlsZE5vZGVzKGxv
bmcgY2FsbElkLCBsb25nIG5vZGVJZCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNvbnRyb2xsZXIuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJv
bGxlci5jcHAKaW5kZXggYWU0ZTI0My4uMzY5NDUwZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQ29udHJvbGxlci5jcHAKQEAgLTU0Miw3ICs1NDIsNyBAQCB2b2lkIEluc3BlY3RvckNv
bnRyb2xsZXI6OnNjcmlwdE9iamVjdFJlYWR5KCkKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6
c2V0RnJvbnRlbmRQcm94eU9iamVjdChTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUsIFNjcmlwdE9i
amVjdCB3ZWJJbnNwZWN0b3JPYmosIFNjcmlwdE9iamVjdCkKIHsKICAgICBtX2Zyb250ZW5kU2Ny
aXB0U3RhdGUgPSBzY3JpcHRTdGF0ZTsKLSAgICBtX2Zyb250ZW5kLnNldChuZXcgSW5zcGVjdG9y
RnJvbnRlbmQodGhpcywgc2NyaXB0U3RhdGUsIHdlYkluc3BlY3Rvck9iaikpOworICAgIG1fZnJv
bnRlbmQuc2V0KG5ldyBJbnNwZWN0b3JGcm9udGVuZCh0aGlzLCB3ZWJJbnNwZWN0b3JPYmopKTsK
ICAgICByZWxlYXNlRE9NQWdlbnQoKTsKICAgICBtX2RvbUFnZW50ID0gSW5zcGVjdG9yRE9NQWdl
bnQ6OmNyZWF0ZShtX2Zyb250ZW5kLmdldCgpKTsKICAgICBpZiAobV90aW1lbGluZUFnZW50KQpA
QCAtMTU2OSw4ICsxNTY5LDggQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRQYXVzZSgp
CiAgICAgU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlID0gY2FsbEZyYW1lLT5zY29wZUNoYWluKCkt
Pmdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOwogICAgIEFTU0VSVChzY3JpcHRTdGF0ZSk7CiAg
ICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBtX2luamVjdGVkU2NyaXB0SG9zdC0+
aW5qZWN0ZWRTY3JpcHRGb3Ioc2NyaXB0U3RhdGUpOwotICAgIFN0cmluZyBjYWxsRnJhbWVzID0g
aW5qZWN0ZWRTY3JpcHQuY2FsbEZyYW1lcygpOwotICAgIG1fZnJvbnRlbmQtPnBhdXNlZFNjcmlw
dChjYWxsRnJhbWVzKTsKKyAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBjYWxsRnJh
bWVzID0gaW5qZWN0ZWRTY3JpcHQuY2FsbEZyYW1lcygpOworICAgIG1fZnJvbnRlbmQtPnBhdXNl
ZFNjcmlwdChjYWxsRnJhbWVzLmdldCgpKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVy
OjpkaWRDb250aW51ZSgpCkBAIC0xNTkzLDcgKzE1OTMsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRy
b2xsZXI6OmRpZEV2YWx1YXRlRm9yVGVzdEluRnJvbnRlbmQobG9uZyBjYWxsSWQsIGNvbnN0IFN0
cmluZwogICAgIFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSA9IHNjcmlwdFN0YXRlRnJvbVBhZ2Uo
ZGVidWdnZXJXb3JsZCgpLCBtX2luc3BlY3RlZFBhZ2UpOwogICAgIFNjcmlwdE9iamVjdCB3aW5k
b3c7CiAgICAgU2NyaXB0R2xvYmFsT2JqZWN0OjpnZXQoc2NyaXB0U3RhdGUsICJ3aW5kb3ciLCB3
aW5kb3cpOwotICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihzY3JpcHRTdGF0ZSwgd2lu
ZG93LCAiZGlkRXZhbHVhdGVGb3JUZXN0SW5Gcm9udGVuZCIpOworICAgIFNjcmlwdEZ1bmN0aW9u
Q2FsbCBmdW5jdGlvbih3aW5kb3csICJkaWRFdmFsdWF0ZUZvclRlc3RJbkZyb250ZW5kIik7CiAg
ICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoY2FsbElkKTsKICAgICBmdW5jdGlvbi5hcHBlbmRB
cmd1bWVudChqc29uUmVzdWx0KTsKICAgICBmdW5jdGlvbi5jYWxsKCk7CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5jcHAgYi9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JGcm9udGVuZC5jcHAKaW5kZXggYzNiZjFiNC4uMmU3MzU2NiAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuY3BwCisrKyBiL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmNwcApAQCAtNDIsNiArNDIsNyBAQAogI2luY2x1
ZGUgIlNjcmlwdE9iamVjdC5oIgogI2luY2x1ZGUgIlNjcmlwdFN0YXRlLmgiCiAjaW5jbHVkZSAi
U2NyaXB0U3RyaW5nLmgiCisjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCiAjaW5j
bHVkZSA8d3RmL093blB0ci5oPgogCiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpICYm
IFVTRShKU0MpCkBAIC01Miw5ICs1Myw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSW5z
cGVjdG9yRnJvbnRlbmQ6Okluc3BlY3RvckZyb250ZW5kKEluc3BlY3RvckNvbnRyb2xsZXIqIGlu
c3BlY3RvckNvbnRyb2xsZXIsIFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSwgU2NyaXB0T2JqZWN0
IHdlYkluc3BlY3RvcikKK0luc3BlY3RvckZyb250ZW5kOjpJbnNwZWN0b3JGcm9udGVuZChJbnNw
ZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyLCBTY3JpcHRPYmplY3Qgd2ViSW5z
cGVjdG9yKQogICAgIDogbV9pbnNwZWN0b3JDb250cm9sbGVyKGluc3BlY3RvckNvbnRyb2xsZXIp
Ci0gICAgLCBtX3NjcmlwdFN0YXRlKHNjcmlwdFN0YXRlKQogICAgICwgbV93ZWJJbnNwZWN0b3Io
d2ViSW5zcGVjdG9yKQogewogfQpAQCAtNjYsMTIgKzY2LDEyIEBAIEluc3BlY3RvckZyb250ZW5k
Ojp+SW5zcGVjdG9yRnJvbnRlbmQoKQogCiBTY3JpcHRBcnJheSBJbnNwZWN0b3JGcm9udGVuZDo6
bmV3U2NyaXB0QXJyYXkoKQogewotICAgIHJldHVybiBTY3JpcHRBcnJheTo6Y3JlYXRlTmV3KG1f
c2NyaXB0U3RhdGUpOworICAgIHJldHVybiBTY3JpcHRBcnJheTo6Y3JlYXRlTmV3KHNjcmlwdFN0
YXRlKCkpOwogfQogCiBTY3JpcHRPYmplY3QgSW5zcGVjdG9yRnJvbnRlbmQ6Om5ld1NjcmlwdE9i
amVjdCgpCiB7Ci0gICAgcmV0dXJuIFNjcmlwdE9iamVjdDo6Y3JlYXRlTmV3KG1fc2NyaXB0U3Rh
dGUpOworICAgIHJldHVybiBTY3JpcHRPYmplY3Q6OmNyZWF0ZU5ldyhzY3JpcHRTdGF0ZSgpKTsK
IH0KIAogdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6ZGlkQ29tbWl0TG9hZCgpCkBAIC04MSw3ICs4
MSw3IEBAIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OmRpZENvbW1pdExvYWQoKQogCiB2b2lkIElu
c3BlY3RvckZyb250ZW5kOjpwb3B1bGF0ZUZyb250ZW5kU2V0dGluZ3MoY29uc3QgU3RyaW5nJiBz
ZXR0aW5ncykKIHsKLSAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24obV9zY3JpcHRTdGF0
ZSwgbV93ZWJJbnNwZWN0b3IsICJkaXNwYXRjaCIpOworICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBm
dW5jdGlvbihtX3dlYkluc3BlY3RvciwgImRpc3BhdGNoIik7CiAgICAgZnVuY3Rpb24uYXBwZW5k
QXJndW1lbnQoInBvcHVsYXRlRnJvbnRlbmRTZXR0aW5ncyIpOwogICAgIGZ1bmN0aW9uLmFwcGVu
ZEFyZ3VtZW50KHNldHRpbmdzKTsKICAgICBmdW5jdGlvbi5jYWxsKCk7CkBAIC04OSw3ICs4OSw3
IEBAIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OnBvcHVsYXRlRnJvbnRlbmRTZXR0aW5ncyhjb25z
dCBTdHJpbmcmIHNldHRpbmdzKQogCiB2b2lkIEluc3BlY3RvckZyb250ZW5kOjp1cGRhdGVDb25z
b2xlTWVzc2FnZUV4cGlyZWRDb3VudCh1bnNpZ25lZCBjb3VudCkKIHsKLSAgICBTY3JpcHRGdW5j
dGlvbkNhbGwgZnVuY3Rpb24obV9zY3JpcHRTdGF0ZSwgbV93ZWJJbnNwZWN0b3IsICJkaXNwYXRj
aCIpOyAKKyAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24obV93ZWJJbnNwZWN0b3IsICJk
aXNwYXRjaCIpOyAKICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudCgidXBkYXRlQ29uc29sZU1l
c3NhZ2VFeHBpcmVkQ291bnQiKTsKICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChjb3VudCk7
CiAgICAgZnVuY3Rpb24uY2FsbCgpOwpAQCAtOTcsMjIgKzk3LDI0IEBAIHZvaWQgSW5zcGVjdG9y
RnJvbnRlbmQ6OnVwZGF0ZUNvbnNvbGVNZXNzYWdlRXhwaXJlZENvdW50KHVuc2lnbmVkIGNvdW50
KQogCiB2b2lkIEluc3BlY3RvckZyb250ZW5kOjphZGRDb25zb2xlTWVzc2FnZShjb25zdCBTY3Jp
cHRPYmplY3QmIG1lc3NhZ2VPYmosIGNvbnN0IFZlY3RvcjxTY3JpcHRTdHJpbmc+JiBmcmFtZXMs
IFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSwgY29uc3QgVmVjdG9yPFNjcmlwdFZhbHVlPiBhcmd1
bWVudHMsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKIHsKLSAgICBTY3JpcHRGdW5jdGlvbkNhbGwg
ZnVuY3Rpb24obV9zY3JpcHRTdGF0ZSwgbV93ZWJJbnNwZWN0b3IsICJkaXNwYXRjaCIpOyAKKyAg
ICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24obV93ZWJJbnNwZWN0b3IsICJkaXNwYXRjaCIp
OyAKICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudCgiYWRkQ29uc29sZU1lc3NhZ2UiKTsKICAg
ICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChtZXNzYWdlT2JqKTsKICAgICBpZiAoIWZyYW1lcy5p
c0VtcHR5KCkpIHsKLSAgICAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoZmFsc2UpOwogICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZnJhbWVzLnNpemUoKTsgKytpKQogICAgICAg
ICAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoZnJhbWVzW2ldKTsKICAgICB9IGVsc2UgaWYg
KCFhcmd1bWVudHMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50
KHRydWUpOwogICAgICAgICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IG1faW5zcGVj
dG9yQ29udHJvbGxlci0+aW5qZWN0ZWRTY3JpcHRIb3N0KCktPmluamVjdGVkU2NyaXB0Rm9yKHNj
cmlwdFN0YXRlKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFyZ3VtZW50cy5z
aXplKCk7ICsraSkgewotICAgICAgICAgICAgU3RyaW5nIHMgPSBpbmplY3RlZFNjcmlwdC53cmFw
QW5kU3RyaW5naWZ5Rm9yQ29uc29sZShhcmd1bWVudHNbaV0pOwotICAgICAgICAgICAgZnVuY3Rp
b24uYXBwZW5kQXJndW1lbnQocyk7CisgICAgICAgICAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlw
dFZhbHVlPiBzZXJpYWxpemVkVmFsdWUgPSBpbmplY3RlZFNjcmlwdC53cmFwRm9yQ29uc29sZShh
cmd1bWVudHNbaV0pOworICAgICAgICAgICAgU2NyaXB0VmFsdWUgc2NyaXB0VmFsdWUgPSBTY3Jp
cHRWYWx1ZTo6ZGVzZXJpYWxpemUodGhpcy0+c2NyaXB0U3RhdGUoKSwgc2VyaWFsaXplZFZhbHVl
LmdldCgpKTsKKyAgICAgICAgICAgIGlmIChzY3JpcHRWYWx1ZS5oYXNOb1ZhbHVlKCkpIHsKKyAg
ICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChz
Y3JpcHRWYWx1ZSk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICBmdW5jdGlvbi5h
cHBlbmRBcmd1bWVudChmYWxzZSk7CiAgICAgICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KG1l
c3NhZ2UpOwogICAgIH0KICAgICBmdW5jdGlvbi5jYWxsKCk7CkBAIC0xMjAsNyArMTIyLDcgQEAg
dm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6YWRkQ29uc29sZU1lc3NhZ2UoY29uc3QgU2NyaXB0T2Jq
ZWN0JiBtZXNzYWdlT2JqLCBjb25zdAogCiB2b2lkIEluc3BlY3RvckZyb250ZW5kOjp1cGRhdGVD
b25zb2xlTWVzc2FnZVJlcGVhdENvdW50KHVuc2lnbmVkIGNvdW50KQogewotICAgIFNjcmlwdEZ1
bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3NjcmlwdFN0YXRlLCBtX3dlYkluc3BlY3RvciwgImRpc3Bh
dGNoIik7IAorICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3dlYkluc3BlY3Rvciwg
ImRpc3BhdGNoIik7IAogICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KCJ1cGRhdGVDb25zb2xl
TWVzc2FnZVJlcGVhdENvdW50Iik7CiAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoY291bnQp
OwogICAgIGZ1bmN0aW9uLmNhbGwoKTsKQEAgLTEzMyw3ICsxMzUsNyBAQCB2b2lkIEluc3BlY3Rv
ckZyb250ZW5kOjpjbGVhckNvbnNvbGVNZXNzYWdlcygpCiAKIGJvb2wgSW5zcGVjdG9yRnJvbnRl
bmQ6OnVwZGF0ZVJlc291cmNlKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgU2NyaXB0
T2JqZWN0JiByZXNvdXJjZU9iaikKIHsKLSAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24o
bV9zY3JpcHRTdGF0ZSwgbV93ZWJJbnNwZWN0b3IsICJkaXNwYXRjaCIpOyAKKyAgICBTY3JpcHRG
dW5jdGlvbkNhbGwgZnVuY3Rpb24obV93ZWJJbnNwZWN0b3IsICJkaXNwYXRjaCIpOyAKICAgICBm
dW5jdGlvbi5hcHBlbmRBcmd1bWVudCgidXBkYXRlUmVzb3VyY2UiKTsKICAgICBmdW5jdGlvbi5h
cHBlbmRBcmd1bWVudChpZGVudGlmaWVyKTsKICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChy
ZXNvdXJjZU9iaik7CkBAIC0xNDQsNyArMTQ2LDcgQEAgYm9vbCBJbnNwZWN0b3JGcm9udGVuZDo6
dXBkYXRlUmVzb3VyY2UodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBTY3JpcHRPYmoK
IAogdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6cmVtb3ZlUmVzb3VyY2UodW5zaWduZWQgbG9uZyBp
ZGVudGlmaWVyKQogewotICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3NjcmlwdFN0
YXRlLCBtX3dlYkluc3BlY3RvciwgImRpc3BhdGNoIik7IAorICAgIFNjcmlwdEZ1bmN0aW9uQ2Fs
bCBmdW5jdGlvbihtX3dlYkluc3BlY3RvciwgImRpc3BhdGNoIik7IAogICAgIGZ1bmN0aW9uLmFw
cGVuZEFyZ3VtZW50KCJyZW1vdmVSZXNvdXJjZSIpOwogICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3Vt
ZW50KGlkZW50aWZpZXIpOwogICAgIGZ1bmN0aW9uLmNhbGwoKTsKQEAgLTE1Miw3ICsxNTQsNyBA
QCB2b2lkIEluc3BlY3RvckZyb250ZW5kOjpyZW1vdmVSZXNvdXJjZSh1bnNpZ25lZCBsb25nIGlk
ZW50aWZpZXIpCiAKIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OmRpZEdldFJlc291cmNlQ29udGVu
dChpbnQgY2FsbElkLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQpCiB7Ci0gICAgU2NyaXB0RnVuY3Rp
b25DYWxsIGZ1bmN0aW9uKG1fc2NyaXB0U3RhdGUsIG1fd2ViSW5zcGVjdG9yLCAiZGlzcGF0Y2gi
KTsKKyAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24obV93ZWJJbnNwZWN0b3IsICJkaXNw
YXRjaCIpOwogICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KCJkaWRHZXRSZXNvdXJjZUNvbnRl
bnQiKTsKICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChjYWxsSWQpOwogICAgIGZ1bmN0aW9u
LmFwcGVuZEFyZ3VtZW50KGNvbnRlbnQpOwpAQCAtMTYxLDcgKzE2Myw3IEBAIHZvaWQgSW5zcGVj
dG9yRnJvbnRlbmQ6OmRpZEdldFJlc291cmNlQ29udGVudChpbnQgY2FsbElkLCBjb25zdCBTdHJp
bmcmIGNvbnRlbnQpCiAKIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OnVwZGF0ZUZvY3VzZWROb2Rl
KGxvbmcgbm9kZUlkKQogewotICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3Njcmlw
dFN0YXRlLCBtX3dlYkluc3BlY3RvciwgImRpc3BhdGNoIik7IAorICAgIFNjcmlwdEZ1bmN0aW9u
Q2FsbCBmdW5jdGlvbihtX3dlYkluc3BlY3RvciwgImRpc3BhdGNoIik7IAogICAgIGZ1bmN0aW9u
LmFwcGVuZEFyZ3VtZW50KCJ1cGRhdGVGb2N1c2VkTm9kZSIpOwogICAgIGZ1bmN0aW9uLmFwcGVu
ZEFyZ3VtZW50KG5vZGVJZCk7CiAgICAgZnVuY3Rpb24uY2FsbCgpOwpAQCAtMTY5LDcgKzE3MSw3
IEBAIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OnVwZGF0ZUZvY3VzZWROb2RlKGxvbmcgbm9kZUlk
KQogCiB2b2lkIEluc3BlY3RvckZyb250ZW5kOjpzZXRBdHRhY2hlZFdpbmRvdyhib29sIGF0dGFj
aGVkKQogewotICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3NjcmlwdFN0YXRlLCBt
X3dlYkluc3BlY3RvciwgImRpc3BhdGNoIik7IAorICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5j
dGlvbihtX3dlYkluc3BlY3RvciwgImRpc3BhdGNoIik7IAogICAgIGZ1bmN0aW9uLmFwcGVuZEFy
Z3VtZW50KCJzZXRBdHRhY2hlZFdpbmRvdyIpOwogICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50
KGF0dGFjaGVkKTsKICAgICBmdW5jdGlvbi5jYWxsKCk7CkBAIC0yNDEsNyArMjQzLDcgQEAgdm9p
ZCBJbnNwZWN0b3JGcm9udGVuZDo6dGltZWxpbmVQcm9maWxlcldhc1N0b3BwZWQoKQogCiB2b2lk
IEluc3BlY3RvckZyb250ZW5kOjphZGRSZWNvcmRUb1RpbWVsaW5lKGNvbnN0IFNjcmlwdE9iamVj
dCYgcmVjb3JkKQogewotICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3NjcmlwdFN0
YXRlLCBtX3dlYkluc3BlY3RvciwgImRpc3BhdGNoIik7IAorICAgIFNjcmlwdEZ1bmN0aW9uQ2Fs
bCBmdW5jdGlvbihtX3dlYkluc3BlY3RvciwgImRpc3BhdGNoIik7IAogICAgIGZ1bmN0aW9uLmFw
cGVuZEFyZ3VtZW50KCJhZGRSZWNvcmRUb1RpbWVsaW5lIik7CiAgICAgZnVuY3Rpb24uYXBwZW5k
QXJndW1lbnQocmVjb3JkKTsKICAgICBmdW5jdGlvbi5jYWxsKCk7CkBAIC0yNzUsNyArMjc3LDcg
QEAgdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6cHJvZmlsZXJXYXNEaXNhYmxlZCgpCiAKIHZvaWQg
SW5zcGVjdG9yRnJvbnRlbmQ6OnBhcnNlZFNjcmlwdFNvdXJjZShjb25zdCBKU0M6OlNvdXJjZUNv
ZGUmIHNvdXJjZSkKIHsKLSAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24obV9zY3JpcHRT
dGF0ZSwgbV93ZWJJbnNwZWN0b3IsICJkaXNwYXRjaCIpOyAKKyAgICBTY3JpcHRGdW5jdGlvbkNh
bGwgZnVuY3Rpb24obV93ZWJJbnNwZWN0b3IsICJkaXNwYXRjaCIpOyAKICAgICBmdW5jdGlvbi5h
cHBlbmRBcmd1bWVudCgicGFyc2VkU2NyaXB0U291cmNlIik7CiAgICAgZnVuY3Rpb24uYXBwZW5k
QXJndW1lbnQoSlNDOjpVU3RyaW5nKEpTQzo6VVN0cmluZzo6ZnJvbShzb3VyY2UucHJvdmlkZXIo
KS0+YXNJRCgpKSkpOwogICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KHNvdXJjZS5wcm92aWRl
cigpLT51cmwoKSk7CkBAIC0yODYsNyArMjg4LDcgQEAgdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6
cGFyc2VkU2NyaXB0U291cmNlKGNvbnN0IEpTQzo6U291cmNlQ29kZSYgc291cmNlKQogCiB2b2lk
IEluc3BlY3RvckZyb250ZW5kOjpmYWlsZWRUb1BhcnNlU2NyaXB0U291cmNlKGNvbnN0IEpTQzo6
U291cmNlQ29kZSYgc291cmNlLCBpbnQgZXJyb3JMaW5lLCBjb25zdCBKU0M6OlVTdHJpbmcmIGVy
cm9yTWVzc2FnZSkKIHsKLSAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24obV9zY3JpcHRT
dGF0ZSwgbV93ZWJJbnNwZWN0b3IsICJkaXNwYXRjaCIpOyAKKyAgICBTY3JpcHRGdW5jdGlvbkNh
bGwgZnVuY3Rpb24obV93ZWJJbnNwZWN0b3IsICJkaXNwYXRjaCIpOyAKICAgICBmdW5jdGlvbi5h
cHBlbmRBcmd1bWVudCgiZmFpbGVkVG9QYXJzZVNjcmlwdFNvdXJjZSIpOwogICAgIGZ1bmN0aW9u
LmFwcGVuZEFyZ3VtZW50KHNvdXJjZS5wcm92aWRlcigpLT51cmwoKSk7CiAgICAgZnVuY3Rpb24u
YXBwZW5kQXJndW1lbnQoSlNDOjpVU3RyaW5nKHNvdXJjZS5kYXRhKCksIHNvdXJjZS5sZW5ndGgo
KSkpOwpAQCAtMjk4LDcgKzMwMCw3IEBAIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OmZhaWxlZFRv
UGFyc2VTY3JpcHRTb3VyY2UoY29uc3QgSlNDOjpTb3VyY2VDb2RlJiBzb3VyY2UsCiAKIHZvaWQg
SW5zcGVjdG9yRnJvbnRlbmQ6OmFkZFByb2ZpbGVIZWFkZXIoY29uc3QgU2NyaXB0VmFsdWUmIHBy
b2ZpbGUpCiB7Ci0gICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1fc2NyaXB0U3RhdGUs
IG1fd2ViSW5zcGVjdG9yLCAiZGlzcGF0Y2giKTsgCisgICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1
bmN0aW9uKG1fd2ViSW5zcGVjdG9yLCAiZGlzcGF0Y2giKTsgCiAgICAgZnVuY3Rpb24uYXBwZW5k
QXJndW1lbnQoImFkZFByb2ZpbGVIZWFkZXIiKTsKICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVu
dChwcm9maWxlKTsKICAgICBmdW5jdGlvbi5jYWxsKCk7CkBAIC0zMDYsNyArMzA4LDcgQEAgdm9p
ZCBJbnNwZWN0b3JGcm9udGVuZDo6YWRkUHJvZmlsZUhlYWRlcihjb25zdCBTY3JpcHRWYWx1ZSYg
cHJvZmlsZSkKIAogdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6c2V0UmVjb3JkaW5nUHJvZmlsZShi
b29sIGlzUHJvZmlsaW5nKQogewotICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3Nj
cmlwdFN0YXRlLCBtX3dlYkluc3BlY3RvciwgImRpc3BhdGNoIik7IAorICAgIFNjcmlwdEZ1bmN0
aW9uQ2FsbCBmdW5jdGlvbihtX3dlYkluc3BlY3RvciwgImRpc3BhdGNoIik7IAogICAgIGZ1bmN0
aW9uLmFwcGVuZEFyZ3VtZW50KCJzZXRSZWNvcmRpbmdQcm9maWxlIik7CiAgICAgZnVuY3Rpb24u
YXBwZW5kQXJndW1lbnQoaXNQcm9maWxpbmcpOwogICAgIGZ1bmN0aW9uLmNhbGwoKTsKQEAgLTMx
NCw3ICszMTYsNyBAQCB2b2lkIEluc3BlY3RvckZyb250ZW5kOjpzZXRSZWNvcmRpbmdQcm9maWxl
KGJvb2wgaXNQcm9maWxpbmcpCiAKIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OmRpZEdldFByb2Zp
bGVIZWFkZXJzKGludCBjYWxsSWQsIGNvbnN0IFNjcmlwdEFycmF5JiBoZWFkZXJzKQogewotICAg
IFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3NjcmlwdFN0YXRlLCBtX3dlYkluc3BlY3Rv
ciwgImRpc3BhdGNoIik7IAorICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3dlYklu
c3BlY3RvciwgImRpc3BhdGNoIik7IAogICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KCJkaWRH
ZXRQcm9maWxlSGVhZGVycyIpOwogICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGNhbGxJZCk7
CiAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoaGVhZGVycyk7CkBAIC0zMjMsMTggKzMyNSwx
OSBAQCB2b2lkIEluc3BlY3RvckZyb250ZW5kOjpkaWRHZXRQcm9maWxlSGVhZGVycyhpbnQgY2Fs
bElkLCBjb25zdCBTY3JpcHRBcnJheSYgaGVhZAogCiB2b2lkIEluc3BlY3RvckZyb250ZW5kOjpk
aWRHZXRQcm9maWxlKGludCBjYWxsSWQsIGNvbnN0IFNjcmlwdFZhbHVlJiBwcm9maWxlKQogewot
ICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3NjcmlwdFN0YXRlLCBtX3dlYkluc3Bl
Y3RvciwgImRpc3BhdGNoIik7IAorICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3dl
Ykluc3BlY3RvciwgImRpc3BhdGNoIik7IAogICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KCJk
aWRHZXRQcm9maWxlIik7CiAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoY2FsbElkKTsKICAg
ICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChwcm9maWxlKTsKICAgICBmdW5jdGlvbi5jYWxsKCk7
CiB9CiAKLXZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OnBhdXNlZFNjcmlwdChjb25zdCBTdHJpbmcm
IGNhbGxGcmFtZXMpCit2b2lkIEluc3BlY3RvckZyb250ZW5kOjpwYXVzZWRTY3JpcHQoU2VyaWFs
aXplZFNjcmlwdFZhbHVlKiBjYWxsRnJhbWVzKQogewotICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBm
dW5jdGlvbihtX3NjcmlwdFN0YXRlLCBtX3dlYkluc3BlY3RvciwgImRpc3BhdGNoIik7IAorICAg
IFNjcmlwdFZhbHVlIGNhbGxGcmFtZXNWYWx1ZSA9IFNjcmlwdFZhbHVlOjpkZXNlcmlhbGl6ZShz
Y3JpcHRTdGF0ZSgpLCBjYWxsRnJhbWVzKTsKKyAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rp
b24obV93ZWJJbnNwZWN0b3IsICJkaXNwYXRjaCIpOyAKICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1
bWVudCgicGF1c2VkU2NyaXB0Iik7Ci0gICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoY2FsbEZy
YW1lcyk7CisgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoY2FsbEZyYW1lc1ZhbHVlKTsKICAg
ICBmdW5jdGlvbi5jYWxsKCk7CiB9CiAKQEAgLTM0Niw3ICszNDksNyBAQCB2b2lkIEluc3BlY3Rv
ckZyb250ZW5kOjpyZXN1bWVkU2NyaXB0KCkKIAogdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6c2V0
RG9jdW1lbnQoY29uc3QgU2NyaXB0T2JqZWN0JiByb290KQogewotICAgIFNjcmlwdEZ1bmN0aW9u
Q2FsbCBmdW5jdGlvbihtX3NjcmlwdFN0YXRlLCBtX3dlYkluc3BlY3RvciwgImRpc3BhdGNoIik7
IAorICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3dlYkluc3BlY3RvciwgImRpc3Bh
dGNoIik7IAogICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KCJzZXREb2N1bWVudCIpOwogICAg
IGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KHJvb3QpOwogICAgIGZ1bmN0aW9uLmNhbGwoKTsKQEAg
LTM1NCw3ICszNTcsNyBAQCB2b2lkIEluc3BlY3RvckZyb250ZW5kOjpzZXREb2N1bWVudChjb25z
dCBTY3JpcHRPYmplY3QmIHJvb3QpCiAKIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OnNldERldGFj
aGVkUm9vdChjb25zdCBTY3JpcHRPYmplY3QmIHJvb3QpCiB7Ci0gICAgU2NyaXB0RnVuY3Rpb25D
YWxsIGZ1bmN0aW9uKG1fc2NyaXB0U3RhdGUsIG1fd2ViSW5zcGVjdG9yLCAiZGlzcGF0Y2giKTsg
CisgICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1fd2ViSW5zcGVjdG9yLCAiZGlzcGF0
Y2giKTsgCiAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoInNldERldGFjaGVkUm9vdCIpOwog
ICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KHJvb3QpOwogICAgIGZ1bmN0aW9uLmNhbGwoKTsK
QEAgLTM2Miw3ICszNjUsNyBAQCB2b2lkIEluc3BlY3RvckZyb250ZW5kOjpzZXREZXRhY2hlZFJv
b3QoY29uc3QgU2NyaXB0T2JqZWN0JiByb290KQogCiB2b2lkIEluc3BlY3RvckZyb250ZW5kOjpz
ZXRDaGlsZE5vZGVzKGludCBwYXJlbnRJZCwgY29uc3QgU2NyaXB0QXJyYXkmIG5vZGVzKQogewot
ICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3NjcmlwdFN0YXRlLCBtX3dlYkluc3Bl
Y3RvciwgImRpc3BhdGNoIik7IAorICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3dl
Ykluc3BlY3RvciwgImRpc3BhdGNoIik7IAogICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KCJz
ZXRDaGlsZE5vZGVzIik7CiAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQocGFyZW50SWQpOwog
ICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KG5vZGVzKTsKQEAgLTM3MSw3ICszNzQsNyBAQCB2
b2lkIEluc3BlY3RvckZyb250ZW5kOjpzZXRDaGlsZE5vZGVzKGludCBwYXJlbnRJZCwgY29uc3Qg
U2NyaXB0QXJyYXkmIG5vZGVzKQogCiB2b2lkIEluc3BlY3RvckZyb250ZW5kOjpjaGlsZE5vZGVD
b3VudFVwZGF0ZWQoaW50IGlkLCBpbnQgbmV3VmFsdWUpCiB7Ci0gICAgU2NyaXB0RnVuY3Rpb25D
YWxsIGZ1bmN0aW9uKG1fc2NyaXB0U3RhdGUsIG1fd2ViSW5zcGVjdG9yLCAiZGlzcGF0Y2giKTsg
CisgICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1fd2ViSW5zcGVjdG9yLCAiZGlzcGF0
Y2giKTsgCiAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoImNoaWxkTm9kZUNvdW50VXBkYXRl
ZCIpOwogICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGlkKTsKICAgICBmdW5jdGlvbi5hcHBl
bmRBcmd1bWVudChuZXdWYWx1ZSk7CkBAIC0zODAsNyArMzgzLDcgQEAgdm9pZCBJbnNwZWN0b3JG
cm9udGVuZDo6Y2hpbGROb2RlQ291bnRVcGRhdGVkKGludCBpZCwgaW50IG5ld1ZhbHVlKQogCiB2
b2lkIEluc3BlY3RvckZyb250ZW5kOjpjaGlsZE5vZGVJbnNlcnRlZChpbnQgcGFyZW50SWQsIGlu
dCBwcmV2SWQsIGNvbnN0IFNjcmlwdE9iamVjdCYgbm9kZSkKIHsKLSAgICBTY3JpcHRGdW5jdGlv
bkNhbGwgZnVuY3Rpb24obV9zY3JpcHRTdGF0ZSwgbV93ZWJJbnNwZWN0b3IsICJkaXNwYXRjaCIp
OyAKKyAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24obV93ZWJJbnNwZWN0b3IsICJkaXNw
YXRjaCIpOyAKICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudCgiY2hpbGROb2RlSW5zZXJ0ZWQi
KTsKICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChwYXJlbnRJZCk7CiAgICAgZnVuY3Rpb24u
YXBwZW5kQXJndW1lbnQocHJldklkKTsKQEAgLTM5MCw3ICszOTMsNyBAQCB2b2lkIEluc3BlY3Rv
ckZyb250ZW5kOjpjaGlsZE5vZGVJbnNlcnRlZChpbnQgcGFyZW50SWQsIGludCBwcmV2SWQsIGNv
bnN0IFNjcmlwdAogCiB2b2lkIEluc3BlY3RvckZyb250ZW5kOjpjaGlsZE5vZGVSZW1vdmVkKGlu
dCBwYXJlbnRJZCwgaW50IGlkKQogewotICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbiht
X3NjcmlwdFN0YXRlLCBtX3dlYkluc3BlY3RvciwgImRpc3BhdGNoIik7IAorICAgIFNjcmlwdEZ1
bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3dlYkluc3BlY3RvciwgImRpc3BhdGNoIik7IAogICAgIGZ1
bmN0aW9uLmFwcGVuZEFyZ3VtZW50KCJjaGlsZE5vZGVSZW1vdmVkIik7CiAgICAgZnVuY3Rpb24u
YXBwZW5kQXJndW1lbnQocGFyZW50SWQpOwogICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGlk
KTsKQEAgLTM5OSw3ICs0MDIsNyBAQCB2b2lkIEluc3BlY3RvckZyb250ZW5kOjpjaGlsZE5vZGVS
ZW1vdmVkKGludCBwYXJlbnRJZCwgaW50IGlkKQogCiB2b2lkIEluc3BlY3RvckZyb250ZW5kOjph
dHRyaWJ1dGVzVXBkYXRlZChpbnQgaWQsIGNvbnN0IFNjcmlwdEFycmF5JiBhdHRyaWJ1dGVzKQog
ewotICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3NjcmlwdFN0YXRlLCBtX3dlYklu
c3BlY3RvciwgImRpc3BhdGNoIik7IAorICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbiht
X3dlYkluc3BlY3RvciwgImRpc3BhdGNoIik7IAogICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50
KCJhdHRyaWJ1dGVzVXBkYXRlZCIpOwogICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGlkKTsK
ICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChhdHRyaWJ1dGVzKTsKQEAgLTQwOCw3ICs0MTEs
NyBAQCB2b2lkIEluc3BlY3RvckZyb250ZW5kOjphdHRyaWJ1dGVzVXBkYXRlZChpbnQgaWQsIGNv
bnN0IFNjcmlwdEFycmF5JiBhdHRyaWJ1dGVzKQogCiB2b2lkIEluc3BlY3RvckZyb250ZW5kOjpk
aWRSZW1vdmVOb2RlKGludCBjYWxsSWQsIGludCBub2RlSWQpCiB7Ci0gICAgU2NyaXB0RnVuY3Rp
b25DYWxsIGZ1bmN0aW9uKG1fc2NyaXB0U3RhdGUsIG1fd2ViSW5zcGVjdG9yLCAiZGlzcGF0Y2gi
KTsgCisgICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1fd2ViSW5zcGVjdG9yLCAiZGlz
cGF0Y2giKTsgCiAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoImRpZFJlbW92ZU5vZGUiKTsK
ICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChjYWxsSWQpOwogICAgIGZ1bmN0aW9uLmFwcGVu
ZEFyZ3VtZW50KG5vZGVJZCk7CkBAIC00MTcsNyArNDIwLDcgQEAgdm9pZCBJbnNwZWN0b3JGcm9u
dGVuZDo6ZGlkUmVtb3ZlTm9kZShpbnQgY2FsbElkLCBpbnQgbm9kZUlkKQogCiB2b2lkIEluc3Bl
Y3RvckZyb250ZW5kOjpkaWRHZXRDaGlsZE5vZGVzKGludCBjYWxsSWQpCiB7Ci0gICAgU2NyaXB0
RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1fc2NyaXB0U3RhdGUsIG1fd2ViSW5zcGVjdG9yLCAiZGlz
cGF0Y2giKTsgCisgICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1fd2ViSW5zcGVjdG9y
LCAiZGlzcGF0Y2giKTsgCiAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoImRpZEdldENoaWxk
Tm9kZXMiKTsKICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChjYWxsSWQpOwogICAgIGZ1bmN0
aW9uLmNhbGwoKTsKQEAgLTQyNSw3ICs0MjgsNyBAQCB2b2lkIEluc3BlY3RvckZyb250ZW5kOjpk
aWRHZXRDaGlsZE5vZGVzKGludCBjYWxsSWQpCiAKIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OmRp
ZEFwcGx5RG9tQ2hhbmdlKGludCBjYWxsSWQsIGJvb2wgc3VjY2VzcykKIHsKLSAgICBTY3JpcHRG
dW5jdGlvbkNhbGwgZnVuY3Rpb24obV9zY3JpcHRTdGF0ZSwgbV93ZWJJbnNwZWN0b3IsICJkaXNw
YXRjaCIpOyAKKyAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24obV93ZWJJbnNwZWN0b3Is
ICJkaXNwYXRjaCIpOyAKICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudCgiZGlkQXBwbHlEb21D
aGFuZ2UiKTsKICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChjYWxsSWQpOwogICAgIGZ1bmN0
aW9uLmFwcGVuZEFyZ3VtZW50KHN1Y2Nlc3MpOwpAQCAtNDM0LDcgKzQzNyw3IEBAIHZvaWQgSW5z
cGVjdG9yRnJvbnRlbmQ6OmRpZEFwcGx5RG9tQ2hhbmdlKGludCBjYWxsSWQsIGJvb2wgc3VjY2Vz
cykKIAogdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6ZGlkR2V0RXZlbnRMaXN0ZW5lcnNGb3JOb2Rl
KGludCBjYWxsSWQsIGludCBub2RlSWQsIFNjcmlwdEFycmF5JiBsaXN0ZW5lcnNBcnJheSkKIHsK
LSAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24obV9zY3JpcHRTdGF0ZSwgbV93ZWJJbnNw
ZWN0b3IsICJkaXNwYXRjaCIpOyAKKyAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24obV93
ZWJJbnNwZWN0b3IsICJkaXNwYXRjaCIpOyAKICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudCgi
ZGlkR2V0RXZlbnRMaXN0ZW5lcnNGb3JOb2RlIik7CiAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1l
bnQoY2FsbElkKTsKICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChub2RlSWQpOwpAQCAtNDQ0
LDcgKzQ0Nyw3IEBAIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OmRpZEdldEV2ZW50TGlzdGVuZXJz
Rm9yTm9kZShpbnQgY2FsbElkLCBpbnQgbm9kZUlkLCBTY3JpCiAKIHZvaWQgSW5zcGVjdG9yRnJv
bnRlbmQ6OmRpZEdldENvb2tpZXMoaW50IGNhbGxJZCwgY29uc3QgU2NyaXB0QXJyYXkmIGNvb2tp
ZXMsIGNvbnN0IFN0cmluZyYgY29va2llc1N0cmluZykKIHsKLSAgICBTY3JpcHRGdW5jdGlvbkNh
bGwgZnVuY3Rpb24obV9zY3JpcHRTdGF0ZSwgbV93ZWJJbnNwZWN0b3IsICJkaXNwYXRjaCIpOyAK
KyAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24obV93ZWJJbnNwZWN0b3IsICJkaXNwYXRj
aCIpOyAKICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudCgiZGlkR2V0Q29va2llcyIpOwogICAg
IGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGNhbGxJZCk7CiAgICAgZnVuY3Rpb24uYXBwZW5kQXJn
dW1lbnQoY29va2llcyk7CkBAIC00NTIsMTIgKzQ1NSwxNyBAQCB2b2lkIEluc3BlY3RvckZyb250
ZW5kOjpkaWRHZXRDb29raWVzKGludCBjYWxsSWQsIGNvbnN0IFNjcmlwdEFycmF5JiBjb29raWVz
LCBjbwogICAgIGZ1bmN0aW9uLmNhbGwoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6
ZGlkRGlzcGF0Y2hPbkluamVjdGVkU2NyaXB0KGludCBjYWxsSWQsIGNvbnN0IFN0cmluZyYgcmVz
dWx0LCBib29sIGlzRXhjZXB0aW9uKQordm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6ZGlkRGlzcGF0
Y2hPbkluamVjdGVkU2NyaXB0KGludCBjYWxsSWQsIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogcmVz
dWx0LCBib29sIGlzRXhjZXB0aW9uKQogewotICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlv
bihtX3NjcmlwdFN0YXRlLCBtX3dlYkluc3BlY3RvciwgImRpc3BhdGNoIik7IAorICAgIFNjcmlw
dEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3dlYkluc3BlY3RvciwgImRpc3BhdGNoIik7IAogICAg
IGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KCJkaWREaXNwYXRjaE9uSW5qZWN0ZWRTY3JpcHQiKTsK
ICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChjYWxsSWQpOwotICAgIGZ1bmN0aW9uLmFwcGVu
ZEFyZ3VtZW50KHJlc3VsdCk7CisgICAgaWYgKGlzRXhjZXB0aW9uKQorICAgICAgICBmdW5jdGlv
bi5hcHBlbmRBcmd1bWVudCgiIik7CisgICAgZWxzZSB7CisgICAgICAgIFNjcmlwdFZhbHVlIHJl
c3VsdFZhbHVlID0gU2NyaXB0VmFsdWU6OmRlc2VyaWFsaXplKHNjcmlwdFN0YXRlKCksIHJlc3Vs
dCk7CisgICAgICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KHJlc3VsdFZhbHVlKTsKKyAgICB9
CiAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoaXNFeGNlcHRpb24pOwogICAgIGZ1bmN0aW9u
LmNhbGwoKTsKIH0KQEAgLTQ2NSw3ICs0NzMsNyBAQCB2b2lkIEluc3BlY3RvckZyb250ZW5kOjpk
aWREaXNwYXRjaE9uSW5qZWN0ZWRTY3JpcHQoaW50IGNhbGxJZCwgY29uc3QgU3RyaW5nJiByZQog
I2lmIEVOQUJMRShEQVRBQkFTRSkKIGJvb2wgSW5zcGVjdG9yRnJvbnRlbmQ6OmFkZERhdGFiYXNl
KGNvbnN0IFNjcmlwdE9iamVjdCYgZGJPYmplY3QpCiB7Ci0gICAgU2NyaXB0RnVuY3Rpb25DYWxs
IGZ1bmN0aW9uKG1fc2NyaXB0U3RhdGUsIG1fd2ViSW5zcGVjdG9yLCAiZGlzcGF0Y2giKTsgCisg
ICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1fd2ViSW5zcGVjdG9yLCAiZGlzcGF0Y2gi
KTsgCiAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoImFkZERhdGFiYXNlIik7CiAgICAgZnVu
Y3Rpb24uYXBwZW5kQXJndW1lbnQoZGJPYmplY3QpOwogICAgIGJvb2wgaGFkRXhjZXB0aW9uID0g
ZmFsc2U7CkBAIC00NzUsMTQgKzQ4MywxNCBAQCBib29sIEluc3BlY3RvckZyb250ZW5kOjphZGRE
YXRhYmFzZShjb25zdCBTY3JpcHRPYmplY3QmIGRiT2JqZWN0KQogCiB2b2lkIEluc3BlY3RvckZy
b250ZW5kOjpzZWxlY3REYXRhYmFzZShpbnQgZGF0YWJhc2VJZCkKIHsKLSAgICBTY3JpcHRGdW5j
dGlvbkNhbGwgZnVuY3Rpb24obV9zY3JpcHRTdGF0ZSwgbV93ZWJJbnNwZWN0b3IsICJkaXNwYXRj
aCIpOyAKKyAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24obV93ZWJJbnNwZWN0b3IsICJk
aXNwYXRjaCIpOyAKICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudCgic2VsZWN0RGF0YWJhc2Ui
KTsKICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChkYXRhYmFzZUlkKTsKICAgICBmdW5jdGlv
bi5jYWxsKCk7CiB9CiB2b2lkIEluc3BlY3RvckZyb250ZW5kOjpkaWRHZXREYXRhYmFzZVRhYmxl
TmFtZXMoaW50IGNhbGxJZCwgY29uc3QgU2NyaXB0QXJyYXkmIHRhYmxlTmFtZXMpCiB7Ci0gICAg
U2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1fc2NyaXB0U3RhdGUsIG1fd2ViSW5zcGVjdG9y
LCAiZGlzcGF0Y2giKTsgCisgICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1fd2ViSW5z
cGVjdG9yLCAiZGlzcGF0Y2giKTsgCiAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoImRpZEdl
dERhdGFiYXNlVGFibGVOYW1lcyIpOwogICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGNhbGxJ
ZCk7CiAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQodGFibGVOYW1lcyk7CkBAIC00OTMsNyAr
NTAxLDcgQEAgdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6ZGlkR2V0RGF0YWJhc2VUYWJsZU5hbWVz
KGludCBjYWxsSWQsIGNvbnN0IFNjcmlwdEFycmF5JgogI2lmIEVOQUJMRShET01fU1RPUkFHRSkK
IGJvb2wgSW5zcGVjdG9yRnJvbnRlbmQ6OmFkZERPTVN0b3JhZ2UoY29uc3QgU2NyaXB0T2JqZWN0
JiBkb21TdG9yYWdlT2JqKQogewotICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3Nj
cmlwdFN0YXRlLCBtX3dlYkluc3BlY3RvciwgImRpc3BhdGNoIik7IAorICAgIFNjcmlwdEZ1bmN0
aW9uQ2FsbCBmdW5jdGlvbihtX3dlYkluc3BlY3RvciwgImRpc3BhdGNoIik7IAogICAgIGZ1bmN0
aW9uLmFwcGVuZEFyZ3VtZW50KCJhZGRET01TdG9yYWdlIik7CiAgICAgZnVuY3Rpb24uYXBwZW5k
QXJndW1lbnQoZG9tU3RvcmFnZU9iaik7CiAgICAgYm9vbCBoYWRFeGNlcHRpb24gPSBmYWxzZTsK
QEAgLTUwMyw3ICs1MTEsNyBAQCBib29sIEluc3BlY3RvckZyb250ZW5kOjphZGRET01TdG9yYWdl
KGNvbnN0IFNjcmlwdE9iamVjdCYgZG9tU3RvcmFnZU9iaikKIAogdm9pZCBJbnNwZWN0b3JGcm9u
dGVuZDo6c2VsZWN0RE9NU3RvcmFnZShpbnQgc3RvcmFnZUlkKQogewotICAgIFNjcmlwdEZ1bmN0
aW9uQ2FsbCBmdW5jdGlvbihtX3NjcmlwdFN0YXRlLCBtX3dlYkluc3BlY3RvciwgImRpc3BhdGNo
Iik7IAorICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3dlYkluc3BlY3RvciwgImRp
c3BhdGNoIik7IAogICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KCJzZWxlY3RET01TdG9yYWdl
Iik7CiAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoc3RvcmFnZUlkKTsKICAgICBmdW5jdGlv
bi5jYWxsKCk7CkBAIC01MTEsNyArNTE5LDcgQEAgdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6c2Vs
ZWN0RE9NU3RvcmFnZShpbnQgc3RvcmFnZUlkKQogCiB2b2lkIEluc3BlY3RvckZyb250ZW5kOjpk
aWRHZXRET01TdG9yYWdlRW50cmllcyhpbnQgY2FsbElkLCBjb25zdCBTY3JpcHRBcnJheSYgZW50
cmllcykKIHsKLSAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24obV9zY3JpcHRTdGF0ZSwg
bV93ZWJJbnNwZWN0b3IsICJkaXNwYXRjaCIpOyAKKyAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVu
Y3Rpb24obV93ZWJJbnNwZWN0b3IsICJkaXNwYXRjaCIpOyAKICAgICBmdW5jdGlvbi5hcHBlbmRB
cmd1bWVudCgiZGlkR2V0RE9NU3RvcmFnZUVudHJpZXMiKTsKICAgICBmdW5jdGlvbi5hcHBlbmRB
cmd1bWVudChjYWxsSWQpOwogICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGVudHJpZXMpOwpA
QCAtNTIwLDcgKzUyOCw3IEBAIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OmRpZEdldERPTVN0b3Jh
Z2VFbnRyaWVzKGludCBjYWxsSWQsIGNvbnN0IFNjcmlwdEFycmF5JiBlCiAKIHZvaWQgSW5zcGVj
dG9yRnJvbnRlbmQ6OmRpZFNldERPTVN0b3JhZ2VJdGVtKGludCBjYWxsSWQsIGJvb2wgc3VjY2Vz
cykKIHsKLSAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24obV9zY3JpcHRTdGF0ZSwgbV93
ZWJJbnNwZWN0b3IsICJkaXNwYXRjaCIpOyAKKyAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rp
b24obV93ZWJJbnNwZWN0b3IsICJkaXNwYXRjaCIpOyAKICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1
bWVudCgiZGlkU2V0RE9NU3RvcmFnZUl0ZW0iKTsKICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVu
dChjYWxsSWQpOwogICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KHN1Y2Nlc3MpOwpAQCAtNTI5
LDcgKzUzNyw3IEBAIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OmRpZFNldERPTVN0b3JhZ2VJdGVt
KGludCBjYWxsSWQsIGJvb2wgc3VjY2VzcykKIAogdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6ZGlk
UmVtb3ZlRE9NU3RvcmFnZUl0ZW0oaW50IGNhbGxJZCwgYm9vbCBzdWNjZXNzKQogewotICAgIFNj
cmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3NjcmlwdFN0YXRlLCBtX3dlYkluc3BlY3Rvciwg
ImRpc3BhdGNoIik7IAorICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3dlYkluc3Bl
Y3RvciwgImRpc3BhdGNoIik7IAogICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KCJkaWRSZW1v
dmVET01TdG9yYWdlSXRlbSIpOwogICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGNhbGxJZCk7
CiAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoc3VjY2Vzcyk7CkBAIC01MzgsNyArNTQ2LDcg
QEAgdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6ZGlkUmVtb3ZlRE9NU3RvcmFnZUl0ZW0oaW50IGNh
bGxJZCwgYm9vbCBzdWNjZXNzKQogCiB2b2lkIEluc3BlY3RvckZyb250ZW5kOjp1cGRhdGVET01T
dG9yYWdlKGludCBzdG9yYWdlSWQpCiB7Ci0gICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9u
KG1fc2NyaXB0U3RhdGUsIG1fd2ViSW5zcGVjdG9yLCAiZGlzcGF0Y2giKTsgCisgICAgU2NyaXB0
RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1fd2ViSW5zcGVjdG9yLCAiZGlzcGF0Y2giKTsgCiAgICAg
ZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoInVwZGF0ZURPTVN0b3JhZ2UiKTsKICAgICBmdW5jdGlv
bi5hcHBlbmRBcmd1bWVudChzdG9yYWdlSWQpOwogICAgIGZ1bmN0aW9uLmNhbGwoKTsKQEAgLTU0
Nyw3ICs1NTUsNyBAQCB2b2lkIEluc3BlY3RvckZyb250ZW5kOjp1cGRhdGVET01TdG9yYWdlKGlu
dCBzdG9yYWdlSWQpCiAKIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OmFkZE5vZGVzVG9TZWFyY2hS
ZXN1bHQoY29uc3QgU3RyaW5nJiBub2RlSWRzKQogewotICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBm
dW5jdGlvbihtX3NjcmlwdFN0YXRlLCBtX3dlYkluc3BlY3RvciwgImRpc3BhdGNoIik7IAorICAg
IFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3dlYkluc3BlY3RvciwgImRpc3BhdGNoIik7
IAogICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KCJhZGROb2Rlc1RvU2VhcmNoUmVzdWx0Iik7
CiAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQobm9kZUlkcyk7CiAgICAgZnVuY3Rpb24uY2Fs
bCgpOwpAQCAtNTU1LDcgKzU2Myw3IEBAIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OmFkZE5vZGVz
VG9TZWFyY2hSZXN1bHQoY29uc3QgU3RyaW5nJiBub2RlSWRzKQogCiB2b2lkIEluc3BlY3RvckZy
b250ZW5kOjpjb250ZXh0TWVudUl0ZW1TZWxlY3RlZChpbnQgaXRlbUlkKQogewotICAgIFNjcmlw
dEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3NjcmlwdFN0YXRlLCBtX3dlYkluc3BlY3RvciwgImRp
c3BhdGNoIik7CisgICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1fd2ViSW5zcGVjdG9y
LCAiZGlzcGF0Y2giKTsKICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudCgiY29udGV4dE1lbnVJ
dGVtU2VsZWN0ZWQiKTsKICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChpdGVtSWQpOwogICAg
IGZ1bmN0aW9uLmNhbGwoKTsKQEAgLTU2OCw3ICs1NzYsNyBAQCB2b2lkIEluc3BlY3RvckZyb250
ZW5kOjpjb250ZXh0TWVudUNsZWFyZWQoKQogCiB2b2lkIEluc3BlY3RvckZyb250ZW5kOjpldmFs
dWF0ZUZvclRlc3RJbkZyb250ZW5kKGludCBjYWxsSWQsIGNvbnN0IFN0cmluZyYgc2NyaXB0KQog
ewotICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3NjcmlwdFN0YXRlLCBtX3dlYklu
c3BlY3RvciwgImRpc3BhdGNoIik7IAorICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbiht
X3dlYkluc3BlY3RvciwgImRpc3BhdGNoIik7IAogICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50
KCJldmFsdWF0ZUZvclRlc3RJbkZyb250ZW5kIik7CiAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1l
bnQoY2FsbElkKTsKICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChzY3JpcHQpOwpAQCAtNTc3
LDcgKzU4NSw3IEBAIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OmV2YWx1YXRlRm9yVGVzdEluRnJv
bnRlbmQoaW50IGNhbGxJZCwgY29uc3QgU3RyaW5nJiBzY3JpCiAKIHZvaWQgSW5zcGVjdG9yRnJv
bnRlbmQ6OmNhbGxTaW1wbGVGdW5jdGlvbihjb25zdCBTdHJpbmcmIGZ1bmN0aW9uTmFtZSkKIHsK
LSAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24obV9zY3JpcHRTdGF0ZSwgbV93ZWJJbnNw
ZWN0b3IsICJkaXNwYXRjaCIpOworICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3dl
Ykluc3BlY3RvciwgImRpc3BhdGNoIik7CiAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoZnVu
Y3Rpb25OYW1lKTsKICAgICBmdW5jdGlvbi5jYWxsKCk7CiB9CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yRnJvbnRlbmQuaAppbmRleCBhMzZhMzIzLi5jM2QxMjEyIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckZyb250ZW5kLmgKQEAgLTUwLDEzICs1MCwxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgY2xhc3MgSW5zcGVjdG9yQ29udHJvbGxlcjsKICAgICBjbGFzcyBJbnNwZWN0b3JSZXNv
dXJjZTsKICAgICBjbGFzcyBOb2RlOwotICAgIGNsYXNzIFNjcmlwdEZ1bmN0aW9uQ2FsbDsKICAg
ICBjbGFzcyBTY3JpcHRTdHJpbmc7CisgICAgY2xhc3MgU2VyaWFsaXplZFNjcmlwdFZhbHVlOwog
ICAgIGNsYXNzIFN0b3JhZ2U7CiAKICAgICBjbGFzcyBJbnNwZWN0b3JGcm9udGVuZCA6IHB1Ymxp
YyBOb25jb3B5YWJsZSB7CiAgICAgcHVibGljOgotICAgICAgICBJbnNwZWN0b3JGcm9udGVuZChJ
bnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyLCBTY3JpcHRTdGF0ZSosIFNj
cmlwdE9iamVjdCB3ZWJJbnNwZWN0b3IpOworICAgICAgICBJbnNwZWN0b3JGcm9udGVuZChJbnNw
ZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyLCBTY3JpcHRPYmplY3Qgd2ViSW5z
cGVjdG9yKTsKICAgICAgICAgfkluc3BlY3RvckZyb250ZW5kKCk7CiAKICAgICAgICAgU2NyaXB0
QXJyYXkgbmV3U2NyaXB0QXJyYXkoKTsKQEAgLTk2LDcgKzk2LDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICB2b2lkIHNldFJlY29yZGluZ1Byb2ZpbGUoYm9vbCBpc1Byb2ZpbGluZyk7
CiAgICAgICAgIHZvaWQgZGlkR2V0UHJvZmlsZUhlYWRlcnMoaW50IGNhbGxJZCwgY29uc3QgU2Ny
aXB0QXJyYXkmIGhlYWRlcnMpOwogICAgICAgICB2b2lkIGRpZEdldFByb2ZpbGUoaW50IGNhbGxJ
ZCwgY29uc3QgU2NyaXB0VmFsdWUmIHByb2ZpbGUpOwotICAgICAgICB2b2lkIHBhdXNlZFNjcmlw
dChjb25zdCBTdHJpbmcmIGNhbGxGcmFtZXMpOworICAgICAgICB2b2lkIHBhdXNlZFNjcmlwdChT
ZXJpYWxpemVkU2NyaXB0VmFsdWUqIGNhbGxGcmFtZXMpOwogICAgICAgICB2b2lkIHJlc3VtZWRT
Y3JpcHQoKTsKICNlbmRpZgogCkBAIC0xMzIsMjAgKzEzMiwxOSBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIHZvaWQgYWRkUmVjb3JkVG9UaW1lbGluZShjb25zdCBTY3JpcHRPYmplY3Qm
KTsKIAogICAgICAgICB2b2lkIGRpZEdldENvb2tpZXMoaW50IGNhbGxJZCwgY29uc3QgU2NyaXB0
QXJyYXkmIGNvb2tpZXMsIGNvbnN0IFN0cmluZyYgY29va2llc1N0cmluZyk7Ci0gICAgICAgIHZv
aWQgZGlkRGlzcGF0Y2hPbkluamVjdGVkU2NyaXB0KGludCBjYWxsSWQsIGNvbnN0IFN0cmluZyYg
cmVzdWx0LCBib29sIGlzRXhjZXB0aW9uKTsKKyAgICAgICAgdm9pZCBkaWREaXNwYXRjaE9uSW5q
ZWN0ZWRTY3JpcHQoaW50IGNhbGxJZCwgU2VyaWFsaXplZFNjcmlwdFZhbHVlKiByZXN1bHQsIGJv
b2wgaXNFeGNlcHRpb24pOwogCiAgICAgICAgIHZvaWQgYWRkTm9kZXNUb1NlYXJjaFJlc3VsdChj
b25zdCBTdHJpbmcmIG5vZGVJZHMpOwogCiAgICAgICAgIHZvaWQgY29udGV4dE1lbnVJdGVtU2Vs
ZWN0ZWQoaW50IGl0ZW1JZCk7CiAgICAgICAgIHZvaWQgY29udGV4dE1lbnVDbGVhcmVkKCk7CiAK
LSAgICAgICAgU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zY3Jp
cHRTdGF0ZTsgfQorICAgICAgICBTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUoKSBjb25zdCB7IHJl
dHVybiBtX3dlYkluc3BlY3Rvci5zY3JpcHRTdGF0ZSgpOyB9CiAKICAgICAgICAgdm9pZCBldmFs
dWF0ZUZvclRlc3RJbkZyb250ZW5kKGludCBjYWxsSWQsIGNvbnN0IFN0cmluZyYgc2NyaXB0KTsK
ICAgICBwcml2YXRlOgogICAgICAgICB2b2lkIGNhbGxTaW1wbGVGdW5jdGlvbihjb25zdCBTdHJp
bmcmIGZ1bmN0aW9uTmFtZSk7CiAgICAgICAgIEluc3BlY3RvckNvbnRyb2xsZXIqIG1faW5zcGVj
dG9yQ29udHJvbGxlcjsKLSAgICAgICAgU2NyaXB0U3RhdGUqIG1fc2NyaXB0U3RhdGU7CiAgICAg
ICAgIFNjcmlwdE9iamVjdCBtX3dlYkluc3BlY3RvcjsKICAgICB9OwogCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5qZWN0ZWRTY3JpcHQuanMgYi9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvSW5qZWN0ZWRTY3JpcHQuanMKaW5kZXggMzM3NjI4Zi4uOTU4Njdj
NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luamVjdGVkU2NyaXB0
LmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbmplY3RlZFNjcmlwdC5qcwpA
QCAtNTIsMTEgKzUyLDYgQEAgSW5qZWN0ZWRTY3JpcHQud3JhcE9iamVjdCA9IGZ1bmN0aW9uKG9i
amVjdCwgb2JqZWN0R3JvdXBOYW1lKQogICAgIHJldHVybiBJbmplY3RlZFNjcmlwdC5jcmVhdGVQ
cm94eU9iamVjdChvYmplY3QsIG9iamVjdElkKTsKIH07CiAKLUluamVjdGVkU2NyaXB0LndyYXBB
bmRTdHJpbmdpZnlPYmplY3QgPSBmdW5jdGlvbihvYmplY3QsIG9iamVjdEdyb3VwTmFtZSkgewot
ICAgIHZhciByID0gSW5qZWN0ZWRTY3JpcHQud3JhcE9iamVjdChvYmplY3QsIG9iamVjdEdyb3Vw
TmFtZSk7Ci0gICAgcmV0dXJuIEluamVjdGVkU2NyaXB0LkpTT04uc3RyaW5naWZ5KHIpOwotfTsK
LQogSW5qZWN0ZWRTY3JpcHQudW53cmFwT2JqZWN0ID0gZnVuY3Rpb24ob2JqZWN0SWQpIHsKICAg
ICByZXR1cm4gSW5qZWN0ZWRTY3JpcHQuaWRUb1dyYXBwZWRPYmplY3Rbb2JqZWN0SWRdOwogfTsK
QEAgLTg1LDcgKzgwLDcgQEAgSW5qZWN0ZWRTY3JpcHQucmVzZXQoKTsKIAogSW5qZWN0ZWRTY3Jp
cHQuZGlzcGF0Y2ggPSBmdW5jdGlvbihtZXRob2ROYW1lLCBhcmdzLCBjYWxsSWQpCiB7Ci0gICAg
dmFyIGFyZ3NBcnJheSA9IEluamVjdGVkU2NyaXB0LkpTT04ucGFyc2UoYXJncyk7CisgICAgdmFy
IGFyZ3NBcnJheSA9IGV2YWwoIigiICsgYXJncyArICIpIik7CiAgICAgaWYgKGNhbGxJZCkKICAg
ICAgICAgYXJnc0FycmF5LnNwbGljZSgwLCAwLCBjYWxsSWQpOyAgLy8gTWV0aG9kcyB0aGF0IHJ1
biBhc3luY2hyb25vdXNseSBoYXZlIGEgY2FsbCBiYWNrIGlkIHBhcmFtZXRlci4KICAgICB2YXIg
cmVzdWx0ID0gSW5qZWN0ZWRTY3JpcHRbbWV0aG9kTmFtZV0uYXBwbHkoSW5qZWN0ZWRTY3JpcHQs
IGFyZ3NBcnJheSk7CkBAIC05Myw3ICs4OCw3IEBAIEluamVjdGVkU2NyaXB0LmRpc3BhdGNoID0g
ZnVuY3Rpb24obWV0aG9kTmFtZSwgYXJncywgY2FsbElkKQogICAgICAgICBJbmplY3RlZFNjcmlw
dC5fd2luZG93KCkuY29uc29sZS5lcnJvcigiV2ViIEluc3BlY3RvciBlcnJvcjogSW5qZWN0ZWRT
Y3JpcHQuJXMgcmV0dXJucyB1bmRlZmluZWQiLCBtZXRob2ROYW1lKTsKICAgICAgICAgcmVzdWx0
ID0gbnVsbDsKICAgICB9Ci0gICAgcmV0dXJuIEluamVjdGVkU2NyaXB0LkpTT04uc3RyaW5naWZ5
KHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogSW5qZWN0ZWRTY3JpcHQuZ2V0U3R5
bGVzID0gZnVuY3Rpb24obm9kZUlkLCBhdXRob3JPbmx5KQpAQCAtOTM1LDcgKzkzMCw3IEBAIElu
amVjdGVkU2NyaXB0LmNhbGxGcmFtZXMgPSBmdW5jdGlvbigpCiAgICAgICAgIHJlc3VsdC5wdXNo
KG5ldyBJbmplY3RlZFNjcmlwdC5DYWxsRnJhbWVQcm94eShkZXB0aCsrLCBjYWxsRnJhbWUpKTsK
ICAgICAgICAgY2FsbEZyYW1lID0gY2FsbEZyYW1lLmNhbGxlcjsKICAgICB9IHdoaWxlIChjYWxs
RnJhbWUpOwotICAgIHJldHVybiBJbmplY3RlZFNjcmlwdC5KU09OLnN0cmluZ2lmeShyZXN1bHQp
OworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIEluamVjdGVkU2NyaXB0LmV2YWx1YXRlSW5DYWxs
RnJhbWUgPSBmdW5jdGlvbihjYWxsRnJhbWVJZCwgY29kZSwgb2JqZWN0R3JvdXApCkBAIC0xMjIw
LDEyICsxMjE1LDEyIEBAIEluamVjdGVkU2NyaXB0LmV4ZWN1dGVTcWwgPSBmdW5jdGlvbihjYWxs
SWQsIGRhdGFiYXNlSWQsIHF1ZXJ5KQogICAgICAgICAgICAgICAgIGRhdGFbY29sdW1uSWRlbnRp
Zmllcl0gPSBTdHJpbmcodGV4dCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAg
SW5qZWN0ZWRTY3JpcHRIb3N0LnJlcG9ydERpZERpc3BhdGNoT25JbmplY3RlZFNjcmlwdChjYWxs
SWQsIEluamVjdGVkU2NyaXB0LkpTT04uc3RyaW5naWZ5KHJlc3VsdCksIGZhbHNlKTsKKyAgICAg
ICAgSW5qZWN0ZWRTY3JpcHRIb3N0LnJlcG9ydERpZERpc3BhdGNoT25JbmplY3RlZFNjcmlwdChj
YWxsSWQsIHJlc3VsdCwgZmFsc2UpOwogICAgIH0KIAogICAgIGZ1bmN0aW9uIGVycm9yQ2FsbGJh
Y2sodHgsIGVycm9yKQogICAgIHsKLSAgICAgICAgSW5qZWN0ZWRTY3JpcHRIb3N0LnJlcG9ydERp
ZERpc3BhdGNoT25JbmplY3RlZFNjcmlwdChjYWxsSWQsIEluamVjdGVkU2NyaXB0LkpTT04uc3Ry
aW5naWZ5KGVycm9yKSwgZmFsc2UpOworICAgICAgICBJbmplY3RlZFNjcmlwdEhvc3QucmVwb3J0
RGlkRGlzcGF0Y2hPbkluamVjdGVkU2NyaXB0KGNhbGxJZCwgZXJyb3IsIGZhbHNlKTsKICAgICB9
CiAKICAgICBmdW5jdGlvbiBxdWVyeVRyYW5zYWN0aW9uKHR4KQpAQCAtMTMzOSwyOTYgKzEzMzQs
NSBAQCBJbmplY3RlZFNjcmlwdC5fZXNjYXBlQ2hhcmFjdGVycyA9IGZ1bmN0aW9uKHN0ciwgY2hh
cnMpCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotSW5qZWN0ZWRTY3JpcHQuSlNPTiA9IHt9Owot
Ci0vLyBUaGUgZm9sbG93aW5nIGNvZGUgaXMgYSBzbGlnaHRseSBtb2RpZmllZCB2ZXJzaW9uIG9m
IGh0dHA6Ly93d3cuanNvbi5vcmcvanNvbjIuanMgbGFzdCBtb2RpZmllZCBvbiAyMDA5LTA5LTI5
LgotLy8gQ29tcGFyZWQgdG8gdGhlIG9yaWdpbmFsIHZlcnNpb24gaXQgaWdub3JlcyB0b0pTT04g
bWV0aG9kIG9uIG9iamVjdHMgaXQgc2VyaWFsaXplcy4KLS8vIEl0J3MgZG9uZSB0byBhdm9pZCB3
ZWlyZCBiZWhhdmlvdXIgd2hlbiBpbnNwZWN0ZWQgYXBwbGljYXRpb24gcHJvdmlkZXMgaXQncyBv
d24gaW1wbGVtZW50YXRpb24KLS8vIG9mIHRvSlNPTiBtZXRob2RzIHRvIHRoZSBPYmplY3QgYW5k
IG90aGVyIGludHJpbnNpYyB0eXBlcy4gV2UgdXNlIEluamVjdGVkU2NyaXB0LkpTT04gaW1wbGVt
ZW50YXRpb24KLS8vIGluc3RlYWQgb2YgZ2xvYmFsIEpTT04gb2JqZWN0IHNpbmNlIGl0IGNhbiBo
YXZlIGJlZW4gbW9kaWZpZWQgYnkgdGhlIGluc3BlY3RlZCBjb2RlLgotKGZ1bmN0aW9uKCkgewot
Ci0gICAgZnVuY3Rpb24gZihuKSB7Ci0gICAgICAgIC8vIEZvcm1hdCBpbnRlZ2VycyB0byBoYXZl
IGF0IGxlYXN0IHR3byBkaWdpdHMuCi0gICAgICAgIHJldHVybiBuIDwgMTAgPyAnMCcgKyBuIDog
bjsKLSAgICB9Ci0KLSAgICB2YXIgY3ggPSAvW1x1MDAwMFx1MDBhZFx1MDYwMC1cdTA2MDRcdTA3
MGZcdTE3YjRcdTE3YjVcdTIwMGMtXHUyMDBmXHUyMDI4LVx1MjAyZlx1MjA2MC1cdTIwNmZcdWZl
ZmZcdWZmZjAtXHVmZmZmXS9nLAotICAgICAgICBlc2NhcGFibGUgPSAvW1xcXCJceDAwLVx4MWZc
eDdmLVx4OWZcdTAwYWRcdTA2MDAtXHUwNjA0XHUwNzBmXHUxN2I0XHUxN2I1XHUyMDBjLVx1MjAw
Zlx1MjAyOC1cdTIwMmZcdTIwNjAtXHUyMDZmXHVmZWZmXHVmZmYwLVx1ZmZmZl0vZywKLSAgICAg
ICAgZ2FwLAotICAgICAgICBpbmRlbnQsCi0gICAgICAgIG1ldGEgPSB7ICAgIC8vIHRhYmxlIG9m
IGNoYXJhY3RlciBzdWJzdGl0dXRpb25zCi0gICAgICAgICAgICAnXGInOiAnXFxiJywKLSAgICAg
ICAgICAgICdcdCc6ICdcXHQnLAotICAgICAgICAgICAgJ1xuJzogJ1xcbicsCi0gICAgICAgICAg
ICAnXGYnOiAnXFxmJywKLSAgICAgICAgICAgICdccic6ICdcXHInLAotICAgICAgICAgICAgJyIn
IDogJ1xcIicsCi0gICAgICAgICAgICAnXFwnOiAnXFxcXCcKLSAgICAgICAgfSwKLSAgICAgICAg
cmVwOwotCi0KLSAgICBmdW5jdGlvbiBxdW90ZShzdHJpbmcpIHsKLQotLy8gSWYgdGhlIHN0cmlu
ZyBjb250YWlucyBubyBjb250cm9sIGNoYXJhY3RlcnMsIG5vIHF1b3RlIGNoYXJhY3RlcnMsIGFu
ZCBubwotLy8gYmFja3NsYXNoIGNoYXJhY3RlcnMsIHRoZW4gd2UgY2FuIHNhZmVseSBzbGFwIHNv
bWUgcXVvdGVzIGFyb3VuZCBpdC4KLS8vIE90aGVyd2lzZSB3ZSBtdXN0IGFsc28gcmVwbGFjZSB0
aGUgb2ZmZW5kaW5nIGNoYXJhY3RlcnMgd2l0aCBzYWZlIGVzY2FwZQotLy8gc2VxdWVuY2VzLgot
Ci0gICAgICAgIGVzY2FwYWJsZS5sYXN0SW5kZXggPSAwOwotICAgICAgICByZXR1cm4gZXNjYXBh
YmxlLnRlc3Qoc3RyaW5nKSA/Ci0gICAgICAgICAgICAnIicgKyBzdHJpbmcucmVwbGFjZShlc2Nh
cGFibGUsIGZ1bmN0aW9uIChhKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGMgPSBtZXRhW2FdOwot
ICAgICAgICAgICAgICAgIHJldHVybiB0eXBlb2YgYyA9PT0gJ3N0cmluZycgPyBjIDoKLSAgICAg
ICAgICAgICAgICAgICAgJ1xcdScgKyAoJzAwMDAnICsgYS5jaGFyQ29kZUF0KDApLnRvU3RyaW5n
KDE2KSkuc2xpY2UoLTQpOwotICAgICAgICAgICAgfSkgKyAnIicgOgotICAgICAgICAgICAgJyIn
ICsgc3RyaW5nICsgJyInOwotICAgIH0KLQotCi0gICAgZnVuY3Rpb24gc3RyKGtleSwgaG9sZGVy
KSB7Ci0KLS8vIFByb2R1Y2UgYSBzdHJpbmcgZnJvbSBob2xkZXJba2V5XS4KLQotICAgICAgICB2
YXIgaSwgICAgICAgICAgLy8gVGhlIGxvb3AgY291bnRlci4KLSAgICAgICAgICAgIGssICAgICAg
ICAgIC8vIFRoZSBtZW1iZXIga2V5LgotICAgICAgICAgICAgdiwgICAgICAgICAgLy8gVGhlIG1l
bWJlciB2YWx1ZS4KLSAgICAgICAgICAgIGxlbmd0aCwKLSAgICAgICAgICAgIG1pbmQgPSBnYXAs
Ci0gICAgICAgICAgICBwYXJ0aWFsLAotICAgICAgICAgICAgdmFsdWUgPSBob2xkZXJba2V5XTsK
LQotLy8gSWYgd2Ugd2VyZSBjYWxsZWQgd2l0aCBhIHJlcGxhY2VyIGZ1bmN0aW9uLCB0aGVuIGNh
bGwgdGhlIHJlcGxhY2VyIHRvCi0vLyBvYnRhaW4gYSByZXBsYWNlbWVudCB2YWx1ZS4KLQotICAg
ICAgICBpZiAodHlwZW9mIHJlcCA9PT0gJ2Z1bmN0aW9uJykgewotICAgICAgICAgICAgdmFsdWUg
PSByZXAuY2FsbChob2xkZXIsIGtleSwgdmFsdWUpOwotICAgICAgICB9Ci0KLS8vIFdoYXQgaGFw
cGVucyBuZXh0IGRlcGVuZHMgb24gdGhlIHZhbHVlJ3MgdHlwZS4KLQotICAgICAgICBzd2l0Y2gg
KHR5cGVvZiB2YWx1ZSkgewotICAgICAgICBjYXNlICdzdHJpbmcnOgotICAgICAgICAgICAgcmV0
dXJuIHF1b3RlKHZhbHVlKTsKLQotICAgICAgICBjYXNlICdudW1iZXInOgotCi0vLyBKU09OIG51
bWJlcnMgbXVzdCBiZSBmaW5pdGUuIEVuY29kZSBub24tZmluaXRlIG51bWJlcnMgYXMgbnVsbC4K
LQotICAgICAgICAgICAgcmV0dXJuIGlzRmluaXRlKHZhbHVlKSA/IFN0cmluZyh2YWx1ZSkgOiAn
bnVsbCc7Ci0KLSAgICAgICAgY2FzZSAnYm9vbGVhbic6Ci0gICAgICAgIGNhc2UgJ251bGwnOgot
Ci0vLyBJZiB0aGUgdmFsdWUgaXMgYSBib29sZWFuIG9yIG51bGwsIGNvbnZlcnQgaXQgdG8gYSBz
dHJpbmcuIE5vdGU6Ci0vLyB0eXBlb2YgbnVsbCBkb2VzIG5vdCBwcm9kdWNlICdudWxsJy4gVGhl
IGNhc2UgaXMgaW5jbHVkZWQgaGVyZSBpbgotLy8gdGhlIHJlbW90ZSBjaGFuY2UgdGhhdCB0aGlz
IGdldHMgZml4ZWQgc29tZWRheS4KLQotICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7
Ci0KLS8vIElmIHRoZSB0eXBlIGlzICdvYmplY3QnLCB3ZSBtaWdodCBiZSBkZWFsaW5nIHdpdGgg
YW4gb2JqZWN0IG9yIGFuIGFycmF5IG9yCi0vLyBudWxsLgotCi0gICAgICAgIGNhc2UgJ29iamVj
dCc6Ci0KLS8vIER1ZSB0byBhIHNwZWNpZmljYXRpb24gYmx1bmRlciBpbiBFQ01BU2NyaXB0LCB0
eXBlb2YgbnVsbCBpcyAnb2JqZWN0JywKLS8vIHNvIHdhdGNoIG91dCBmb3IgdGhhdCBjYXNlLgot
Ci0gICAgICAgICAgICBpZiAoIXZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdudWxs
JzsKLSAgICAgICAgICAgIH0KLQotLy8gTWFrZSBhbiBhcnJheSB0byBob2xkIHRoZSBwYXJ0aWFs
IHJlc3VsdHMgb2Ygc3RyaW5naWZ5aW5nIHRoaXMgb2JqZWN0IHZhbHVlLgotCi0gICAgICAgICAg
ICBnYXAgKz0gaW5kZW50OwotICAgICAgICAgICAgcGFydGlhbCA9IFtdOwotCi0vLyBJcyB0aGUg
dmFsdWUgYW4gYXJyYXk/Ci0KLSAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3Ry
aW5nLmFwcGx5KHZhbHVlKSA9PT0gJ1tvYmplY3QgQXJyYXldJykgewotCi0vLyBUaGUgdmFsdWUg
aXMgYW4gYXJyYXkuIFN0cmluZ2lmeSBldmVyeSBlbGVtZW50LiBVc2UgbnVsbCBhcyBhIHBsYWNl
aG9sZGVyCi0vLyBmb3Igbm9uLUpTT04gdmFsdWVzLgotCi0gICAgICAgICAgICAgICAgbGVuZ3Ro
ID0gdmFsdWUubGVuZ3RoOwotICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7
IGkgKz0gMSkgewotICAgICAgICAgICAgICAgICAgICBwYXJ0aWFsW2ldID0gc3RyKGksIHZhbHVl
KSB8fCAnbnVsbCc7Ci0gICAgICAgICAgICAgICAgfQotCi0vLyBKb2luIGFsbCBvZiB0aGUgZWxl
bWVudHMgdG9nZXRoZXIsIHNlcGFyYXRlZCB3aXRoIGNvbW1hcywgYW5kIHdyYXAgdGhlbSBpbgot
Ly8gYnJhY2tldHMuCi0KLSAgICAgICAgICAgICAgICB2ID0gcGFydGlhbC5sZW5ndGggPT09IDAg
PyAnW10nIDoKLSAgICAgICAgICAgICAgICAgICAgZ2FwID8gJ1tcbicgKyBnYXAgKwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBhcnRpYWwuam9pbignLFxuJyArIGdhcCkgKyAnXG4nICsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluZCArICddJyA6Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICdbJyArIHBhcnRpYWwuam9pbignLCcpICsgJ10nOwotICAgICAgICAg
ICAgICAgIGdhcCA9IG1pbmQ7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHY7Ci0gICAgICAgICAg
ICB9Ci0KLS8vIElmIHRoZSByZXBsYWNlciBpcyBhbiBhcnJheSwgdXNlIGl0IHRvIHNlbGVjdCB0
aGUgbWVtYmVycyB0byBiZSBzdHJpbmdpZmllZC4KLQotICAgICAgICAgICAgaWYgKHJlcCAmJiB0
eXBlb2YgcmVwID09PSAnb2JqZWN0JykgewotICAgICAgICAgICAgICAgIGxlbmd0aCA9IHJlcC5s
ZW5ndGg7Ci0gICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAxKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGsgPSByZXBbaV07Ci0gICAgICAgICAgICAgICAgICAgIGlm
ICh0eXBlb2YgayA9PT0gJ3N0cmluZycpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHYgPSBz
dHIoaywgdmFsdWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHYpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwYXJ0aWFsLnB1c2gocXVvdGUoaykgKyAoZ2FwID8gJzogJyA6
ICc6JykgKyB2KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0KLS8vIE90aGVy
d2lzZSwgaXRlcmF0ZSB0aHJvdWdoIGFsbCBvZiB0aGUga2V5cyBpbiB0aGUgb2JqZWN0LgotCi0g
ICAgICAgICAgICAgICAgZm9yIChrIGluIHZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlm
IChPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgaykpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHYgPSBzdHIoaywgdmFsdWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHYpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWFsLnB1c2gocXVvdGUoaykg
KyAoZ2FwID8gJzogJyA6ICc6JykgKyB2KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQot
Ly8gSm9pbiBhbGwgb2YgdGhlIG1lbWJlciB0ZXh0cyB0b2dldGhlciwgc2VwYXJhdGVkIHdpdGgg
Y29tbWFzLAotLy8gYW5kIHdyYXAgdGhlbSBpbiBicmFjZXMuCi0KLSAgICAgICAgICAgIHYgPSBw
YXJ0aWFsLmxlbmd0aCA9PT0gMCA/ICd7fScgOgotICAgICAgICAgICAgICAgIGdhcCA/ICd7XG4n
ICsgZ2FwICsgcGFydGlhbC5qb2luKCcsXG4nICsgZ2FwKSArICdcbicgKwotICAgICAgICAgICAg
ICAgICAgICAgICAgbWluZCArICd9JyA6ICd7JyArIHBhcnRpYWwuam9pbignLCcpICsgJ30nOwot
ICAgICAgICAgICAgZ2FwID0gbWluZDsKLSAgICAgICAgICAgIHJldHVybiB2OwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgICAgIEluamVjdGVkU2NyaXB0LkpTT04uc3RyaW5naWZ5ID0gZnVuY3Rp
b24gKHZhbHVlLCByZXBsYWNlciwgc3BhY2UpIHsKLQotLy8gVGhlIHN0cmluZ2lmeSBtZXRob2Qg
dGFrZXMgYSB2YWx1ZSBhbmQgYW4gb3B0aW9uYWwgcmVwbGFjZXIsIGFuZCBhbiBvcHRpb25hbAot
Ly8gc3BhY2UgcGFyYW1ldGVyLCBhbmQgcmV0dXJucyBhIEpTT04gdGV4dC4gVGhlIHJlcGxhY2Vy
IGNhbiBiZSBhIGZ1bmN0aW9uCi0vLyB0aGF0IGNhbiByZXBsYWNlIHZhbHVlcywgb3IgYW4gYXJy
YXkgb2Ygc3RyaW5ncyB0aGF0IHdpbGwgc2VsZWN0IHRoZSBrZXlzLgotLy8gQSBkZWZhdWx0IHJl
cGxhY2VyIG1ldGhvZCBjYW4gYmUgcHJvdmlkZWQuIFVzZSBvZiB0aGUgc3BhY2UgcGFyYW1ldGVy
IGNhbgotLy8gcHJvZHVjZSB0ZXh0IHRoYXQgaXMgbW9yZSBlYXNpbHkgcmVhZGFibGUuCi0KLSAg
ICAgICAgICAgIHZhciBpOwotICAgICAgICAgICAgZ2FwID0gJyc7Ci0gICAgICAgICAgICBpbmRl
bnQgPSAnJzsKLQotLy8gSWYgdGhlIHNwYWNlIHBhcmFtZXRlciBpcyBhIG51bWJlciwgbWFrZSBh
biBpbmRlbnQgc3RyaW5nIGNvbnRhaW5pbmcgdGhhdAotLy8gbWFueSBzcGFjZXMuCi0KLSAgICAg
ICAgICAgIGlmICh0eXBlb2Ygc3BhY2UgPT09ICdudW1iZXInKSB7Ci0gICAgICAgICAgICAgICAg
Zm9yIChpID0gMDsgaSA8IHNwYWNlOyBpICs9IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgaW5k
ZW50ICs9ICcgJzsKLSAgICAgICAgICAgICAgICB9Ci0KLS8vIElmIHRoZSBzcGFjZSBwYXJhbWV0
ZXIgaXMgYSBzdHJpbmcsIGl0IHdpbGwgYmUgdXNlZCBhcyB0aGUgaW5kZW50IHN0cmluZy4KLQot
ICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygc3BhY2UgPT09ICdzdHJpbmcnKSB7Ci0gICAg
ICAgICAgICAgICAgaW5kZW50ID0gc3BhY2U7Ci0gICAgICAgICAgICB9Ci0KLS8vIElmIHRoZXJl
IGlzIGEgcmVwbGFjZXIsIGl0IG11c3QgYmUgYSBmdW5jdGlvbiBvciBhbiBhcnJheS4KLS8vIE90
aGVyd2lzZSwgdGhyb3cgYW4gZXJyb3IuCi0KLSAgICAgICAgICAgIHJlcCA9IHJlcGxhY2VyOwot
ICAgICAgICAgICAgaWYgKHJlcGxhY2VyICYmIHR5cGVvZiByZXBsYWNlciAhPT0gJ2Z1bmN0aW9u
JyAmJgotICAgICAgICAgICAgICAgICAgICAodHlwZW9mIHJlcGxhY2VyICE9PSAnb2JqZWN0JyB8
fAotICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHJlcGxhY2VyLmxlbmd0aCAhPT0gJ251bWJl
cicpKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdKU09OLnN0cmluZ2lmeScp
OwotICAgICAgICAgICAgfQotCi0vLyBNYWtlIGEgZmFrZSByb290IG9iamVjdCBjb250YWluaW5n
IG91ciB2YWx1ZSB1bmRlciB0aGUga2V5IG9mICcnLgotLy8gUmV0dXJuIHRoZSByZXN1bHQgb2Yg
c3RyaW5naWZ5aW5nIHRoZSB2YWx1ZS4KLQotICAgICAgICAgICAgcmV0dXJuIHN0cignJywgeycn
OiB2YWx1ZX0pOwotICAgICAgICB9OwotCi0KLS8vIElmIHRoZSBKU09OIG9iamVjdCBkb2VzIG5v
dCB5ZXQgaGF2ZSBhIHBhcnNlIG1ldGhvZCwgZ2l2ZSBpdCBvbmUuCi0KLSAgICBJbmplY3RlZFNj
cmlwdC5KU09OLnBhcnNlID0gZnVuY3Rpb24gKHRleHQsIHJldml2ZXIpIHsKLQotLy8gVGhlIHBh
cnNlIG1ldGhvZCB0YWtlcyBhIHRleHQgYW5kIGFuIG9wdGlvbmFsIHJldml2ZXIgZnVuY3Rpb24s
IGFuZCByZXR1cm5zCi0vLyBhIEphdmFTY3JpcHQgdmFsdWUgaWYgdGhlIHRleHQgaXMgYSB2YWxp
ZCBKU09OIHRleHQuCi0KLSAgICAgICAgICAgIHZhciBqOwotCi0gICAgICAgICAgICBmdW5jdGlv
biB3YWxrKGhvbGRlciwga2V5KSB7Ci0KLS8vIFRoZSB3YWxrIG1ldGhvZCBpcyB1c2VkIHRvIHJl
Y3Vyc2l2ZWx5IHdhbGsgdGhlIHJlc3VsdGluZyBzdHJ1Y3R1cmUgc28KLS8vIHRoYXQgbW9kaWZp
Y2F0aW9ucyBjYW4gYmUgbWFkZS4KLQotICAgICAgICAgICAgICAgIHZhciBrLCB2LCB2YWx1ZSA9
IGhvbGRlcltrZXldOwotICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUg
PT09ICdvYmplY3QnKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoayBpbiB2YWx1ZSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHZh
bHVlLCBrKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYgPSB3YWxrKHZhbHVlLCBr
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodiAhPT0gdW5kZWZpbmVkKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlW2tdID0gdjsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkZWxldGUgdmFsdWVba107Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIHJldHVybiByZXZpdmVyLmNhbGwoaG9sZGVyLCBrZXksIHZh
bHVlKTsKLSAgICAgICAgICAgIH0KLQotCi0vLyBQYXJzaW5nIGhhcHBlbnMgaW4gZm91ciBzdGFn
ZXMuIEluIHRoZSBmaXJzdCBzdGFnZSwgd2UgcmVwbGFjZSBjZXJ0YWluCi0vLyBVbmljb2RlIGNo
YXJhY3RlcnMgd2l0aCBlc2NhcGUgc2VxdWVuY2VzLiBKYXZhU2NyaXB0IGhhbmRsZXMgbWFueSBj
aGFyYWN0ZXJzCi0vLyBpbmNvcnJlY3RseSwgZWl0aGVyIHNpbGVudGx5IGRlbGV0aW5nIHRoZW0s
IG9yIHRyZWF0aW5nIHRoZW0gYXMgbGluZSBlbmRpbmdzLgotCi0gICAgICAgICAgICBjeC5sYXN0
SW5kZXggPSAwOwotICAgICAgICAgICAgaWYgKGN4LnRlc3QodGV4dCkpIHsKLSAgICAgICAgICAg
ICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKGN4LCBmdW5jdGlvbiAoYSkgewotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gJ1xcdScgKwotICAgICAgICAgICAgICAgICAgICAgICAgKCcwMDAwJyAr
IGEuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikpLnNsaWNlKC00KTsKLSAgICAgICAgICAgICAg
ICB9KTsKLSAgICAgICAgICAgIH0KLQotLy8gSW4gdGhlIHNlY29uZCBzdGFnZSwgd2UgcnVuIHRo
ZSB0ZXh0IGFnYWluc3QgcmVndWxhciBleHByZXNzaW9ucyB0aGF0IGxvb2sKLS8vIGZvciBub24t
SlNPTiBwYXR0ZXJucy4gV2UgYXJlIGVzcGVjaWFsbHkgY29uY2VybmVkIHdpdGggJygpJyBhbmQg
J25ldycKLS8vIGJlY2F1c2UgdGhleSBjYW4gY2F1c2UgaW52b2NhdGlvbiwgYW5kICc9JyBiZWNh
dXNlIGl0IGNhbiBjYXVzZSBtdXRhdGlvbi4KLS8vIEJ1dCBqdXN0IHRvIGJlIHNhZmUsIHdlIHdh
bnQgdG8gcmVqZWN0IGFsbCB1bmV4cGVjdGVkIGZvcm1zLgotCi0vLyBXZSBzcGxpdCB0aGUgc2Vj
b25kIHN0YWdlIGludG8gNCByZWdleHAgb3BlcmF0aW9ucyBpbiBvcmRlciB0byB3b3JrIGFyb3Vu
ZAotLy8gY3JpcHBsaW5nIGluZWZmaWNpZW5jaWVzIGluIElFJ3MgYW5kIFNhZmFyaSdzIHJlZ2V4
cCBlbmdpbmVzLiBGaXJzdCB3ZQotLy8gcmVwbGFjZSB0aGUgSlNPTiBiYWNrc2xhc2ggcGFpcnMg
d2l0aCAnQCcgKGEgbm9uLUpTT04gY2hhcmFjdGVyKS4gU2Vjb25kLCB3ZQotLy8gcmVwbGFjZSBh
bGwgc2ltcGxlIHZhbHVlIHRva2VucyB3aXRoICddJyBjaGFyYWN0ZXJzLiBUaGlyZCwgd2UgZGVs
ZXRlIGFsbAotLy8gb3BlbiBicmFja2V0cyB0aGF0IGZvbGxvdyBhIGNvbG9uIG9yIGNvbW1hIG9y
IHRoYXQgYmVnaW4gdGhlIHRleHQuIEZpbmFsbHksCi0vLyB3ZSBsb29rIHRvIHNlZSB0aGF0IHRo
ZSByZW1haW5pbmcgY2hhcmFjdGVycyBhcmUgb25seSB3aGl0ZXNwYWNlIG9yICddJyBvcgotLy8g
JywnIG9yICc6JyBvciAneycgb3IgJ30nLiBJZiB0aGF0IGlzIHNvLCB0aGVuIHRoZSB0ZXh0IGlz
IHNhZmUgZm9yIGV2YWwuCi0KLSAgICAgICAgICAgIGlmICgvXltcXSw6e31cc10qJC8uCi10ZXN0
KHRleHQucmVwbGFjZSgvXFwoPzpbIlxcXC9iZm5ydF18dVswLTlhLWZBLUZdezR9KS9nLCAnQCcp
LgotcmVwbGFjZSgvIlteIlxcXG5ccl0qInx0cnVlfGZhbHNlfG51bGx8LT9cZCsoPzpcLlxkKik/
KD86W2VFXVsrXC1dP1xkKyk/L2csICddJykuCi1yZXBsYWNlKC8oPzpefDp8LCkoPzpccypcWykr
L2csICcnKSkpIHsKLQotLy8gSW4gdGhlIHRoaXJkIHN0YWdlIHdlIHVzZSB0aGUgZXZhbCBmdW5j
dGlvbiB0byBjb21waWxlIHRoZSB0ZXh0IGludG8gYQotLy8gSmF2YVNjcmlwdCBzdHJ1Y3R1cmUu
IFRoZSAneycgb3BlcmF0b3IgaXMgc3ViamVjdCB0byBhIHN5bnRhY3RpYyBhbWJpZ3VpdHkKLS8v
IGluIEphdmFTY3JpcHQ6IGl0IGNhbiBiZWdpbiBhIGJsb2NrIG9yIGFuIG9iamVjdCBsaXRlcmFs
LiBXZSB3cmFwIHRoZSB0ZXh0Ci0vLyBpbiBwYXJlbnMgdG8gZWxpbWluYXRlIHRoZSBhbWJpZ3Vp
dHkuCi0KLSAgICAgICAgICAgICAgICBqID0gZXZhbCgnKCcgKyB0ZXh0ICsgJyknKTsKLQotLy8g
SW4gdGhlIG9wdGlvbmFsIGZvdXJ0aCBzdGFnZSwgd2UgcmVjdXJzaXZlbHkgd2FsayB0aGUgbmV3
IHN0cnVjdHVyZSwgcGFzc2luZwotLy8gZWFjaCBuYW1lL3ZhbHVlIHBhaXIgdG8gYSByZXZpdmVy
IGZ1bmN0aW9uIGZvciBwb3NzaWJsZSB0cmFuc2Zvcm1hdGlvbi4KLQotICAgICAgICAgICAgICAg
IHJldHVybiB0eXBlb2YgcmV2aXZlciA9PT0gJ2Z1bmN0aW9uJyA/Ci0gICAgICAgICAgICAgICAg
ICAgIHdhbGsoeycnOiBqfSwgJycpIDogajsKLSAgICAgICAgICAgIH0KLQotLy8gSWYgdGhlIHRl
eHQgaXMgbm90IEpTT04gcGFyc2VhYmxlLCB0aGVuIGEgU3ludGF4RXJyb3IgaXMgdGhyb3duLgot
Ci0gICAgICAgICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0pTT04ucGFyc2UnKTsKLSAgICAg
ICAgfTsKLX0oKSk7Ci0KIHJldHVybiBJbmplY3RlZFNjcmlwdDsKIH0pOwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luamVjdGVkU2NyaXB0QWNjZXNzLmpzIGIvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luamVjdGVkU2NyaXB0QWNjZXNzLmpzCmluZGV4IDJk
ZDI5MDguLjI1NTgyNjcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9J
bmplY3RlZFNjcmlwdEFjY2Vzcy5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
SW5qZWN0ZWRTY3JpcHRBY2Nlc3MuanMKQEAgLTU2LDcgKzU2LDcgQEAgSW5qZWN0ZWRTY3JpcHRB
Y2Nlc3MuX2luc3RhbGxIYW5kbGVyID0gZnVuY3Rpb24obWV0aG9kTmFtZSwgYXN5bmMpCiAgICAg
ICAgIGZ1bmN0aW9uIG15Q2FsbGJhY2socmVzdWx0LCBpc0V4Y2VwdGlvbikKICAgICAgICAgewog
ICAgICAgICAgICAgaWYgKCFpc0V4Y2VwdGlvbikKLSAgICAgICAgICAgICAgICBjYWxsYmFjayhK
U09OLnBhcnNlKHJlc3VsdCkpOworICAgICAgICAgICAgICAgIGNhbGxiYWNrKHJlc3VsdCk7CiAg
ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmNvbnNvbGUuYWRk
TWVzc2FnZShuZXcgV2ViSW5zcGVjdG9yLkNvbnNvbGVUZXh0TWVzc2FnZSgiRXJyb3IgZGlzcGF0
Y2hpbmc6ICIgKyBtZXRob2ROYW1lKSk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvaW5zcGVjdG9yLmpzCmluZGV4IGNjZDNkMDAuLjc2MDRiODcgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMKKysrIGIvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcwpAQCAtMTIwMyw3ICsxMjAzLDYgQEAgV2ViSW5z
cGVjdG9yLmZhaWxlZFRvUGFyc2VTY3JpcHRTb3VyY2UgPSBmdW5jdGlvbihzb3VyY2VVUkwsIHNv
dXJjZSwgc3RhcnRpbmdMaW4KIAogV2ViSW5zcGVjdG9yLnBhdXNlZFNjcmlwdCA9IGZ1bmN0aW9u
KGNhbGxGcmFtZXMpCiB7Ci0gICAgY2FsbEZyYW1lcyA9IEpTT04ucGFyc2UoY2FsbEZyYW1lcyk7
CiAgICAgdGhpcy5wYW5lbHMuc2NyaXB0cy5kZWJ1Z2dlclBhdXNlZChjYWxsRnJhbWVzKTsKIH0K
IApAQCAtMTI2MCw3ICsxMjU5LDcgQEAgV2ViSW5zcGVjdG9yLnVwZGF0ZUNvbnNvbGVNZXNzYWdl
RXhwaXJlZENvdW50ID0gZnVuY3Rpb24oY291bnQpCiAgICAgV2ViSW5zcGVjdG9yLmNvbnNvbGUu
YWRkTWVzc2FnZShuZXcgV2ViSW5zcGVjdG9yLkNvbnNvbGVUZXh0TWVzc2FnZShtZXNzYWdlLCBX
ZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZUxldmVsLldhcm5pbmcpKTsKIH0KIAot
V2ViSW5zcGVjdG9yLmFkZENvbnNvbGVNZXNzYWdlID0gZnVuY3Rpb24ocGF5bG9hZCwgYXJndW1l
bnRzU3RyaW5naWZpZWQsIG9wdF9hcmdzKQorV2ViSW5zcGVjdG9yLmFkZENvbnNvbGVNZXNzYWdl
ID0gZnVuY3Rpb24ocGF5bG9hZCwgb3B0X2FyZ3MpCiB7CiAgICAgdmFyIGNvbnNvbGVNZXNzYWdl
ID0gbmV3IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZSgKICAgICAgICAgcGF5bG9hZC5zb3Vy
Y2UsCkBAIC0xMjcwLDE0ICsxMjY5LDcgQEAgV2ViSW5zcGVjdG9yLmFkZENvbnNvbGVNZXNzYWdl
ID0gZnVuY3Rpb24ocGF5bG9hZCwgYXJndW1lbnRzU3RyaW5naWZpZWQsIG9wdF9hcmcKICAgICAg
ICAgcGF5bG9hZC51cmwsCiAgICAgICAgIHBheWxvYWQuZ3JvdXBMZXZlbCwKICAgICAgICAgcGF5
bG9hZC5yZXBlYXRDb3VudCk7Ci0gICAgdmFyIHBhcnNlZEFyZ3VtZW50cyA9IFtdOwotICAgIGZv
ciAodmFyIGkgPSAyOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIGlmIChh
cmd1bWVudHNTdHJpbmdpZmllZCkKLSAgICAgICAgICAgIHBhcnNlZEFyZ3VtZW50cy5wdXNoKEpT
T04ucGFyc2UoYXJndW1lbnRzW2ldKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHBhcnNl
ZEFyZ3VtZW50cy5wdXNoKGFyZ3VtZW50c1tpXSk7Ci0gICAgfQotICAgIGNvbnNvbGVNZXNzYWdl
LnNldE1lc3NhZ2VCb2R5KHBhcnNlZEFyZ3VtZW50cyk7CisgICAgY29uc29sZU1lc3NhZ2Uuc2V0
TWVzc2FnZUJvZHkoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSk7CiAg
ICAgdGhpcy5jb25zb2xlLmFkZE1lc3NhZ2UoY29uc29sZU1lc3NhZ2UpOwogfQogCmRpZmYgLS1n
aXQgYS9XZWJLaXQvcXQvQXBpL3F3ZWJlbGVtZW50LmNwcCBiL1dlYktpdC9xdC9BcGkvcXdlYmVs
ZW1lbnQuY3BwCmluZGV4IDQ0MWJlYzcuLjlkNGQwZDAgMTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC9B
cGkvcXdlYmVsZW1lbnQuY3BwCisrKyBiL1dlYktpdC9xdC9BcGkvcXdlYmVsZW1lbnQuY3BwCkBA
IC0zOCw3ICszOCw2IEBACiAjaW5jbHVkZSAiTm9kZUxpc3QuaCIKICNpbmNsdWRlICJQcm9wZXJ0
eU5hbWVBcnJheS5oIgogI2luY2x1ZGUgIlJlbmRlckltYWdlLmgiCi0jaW5jbHVkZSAiU2NyaXB0
RnVuY3Rpb25DYWxsLmgiCiAjaW5jbHVkZSAiU3RhdGljTm9kZUxpc3QuaCIKICNpbmNsdWRlICJx
dF9ydW50aW1lLmgiCiAjaW5jbHVkZSAicXdlYmZyYW1lLmgiCmRpZmYgLS1naXQgYS9XZWJLaXQv
cXQvQ2hhbmdlTG9nIGIvV2ViS2l0L3F0L0NoYW5nZUxvZwppbmRleCBkYmM4NDFlLi4xNjRmN2Yz
IDEwMDY0NAotLS0gYS9XZWJLaXQvcXQvQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9xdC9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxMyBAQAorMjAxMC0wMi0wNSAgWXVyeSBTZW1pa2hhdHNreSAgPHl1cnlz
QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBSZW1vdmUgdW51c2VkIGlubXBvcnQgb2YgU2NyaXB0RnVuY3Rpb25DYWxsLmgKKwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzM1OTIKKwor
ICAgICAgICAqIEFwaS9xd2ViZWxlbWVudC5jcHA6CisKIDIwMTAtMDItMDQgIE5vJ2FtIFJvc2Vu
dGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBB
cml5YSBIaWRheWF0Lgo=
</data>
<flag name="review"
          id="30873"
          type_id="1"
          status="+"
          setter="pfeldman"
    />
          </attachment>
      

    </bug>

</bugzilla>