<?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>190746</bug_id>
          
          <creation_ts>2018-10-18 23:53:00 -0700</creation_ts>
          <short_desc>Introduce CompletionHandler-based Async IPC messages with replies</short_desc>
          <delta_ts>2019-06-28 10:17:37 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alex Christensen">achristensen</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          <cc>andersca</cc>
    
    <cc>cdumez</cc>
    
    <cc>ggaren</cc>
    
    <cc>mitz</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1470816</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2018-10-18 23:53:00 -0700</bug_when>
    <thetext>Introduce CompletionHandler-based Async IPC messages with replies</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1470818</commentid>
    <comment_count>1</comment_count>
      <attachid>352773</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2018-10-19 00:04:43 -0700</bug_when>
    <thetext>Created attachment 352773
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1470819</commentid>
    <comment_count>2</comment_count>
      <attachid>352774</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2018-10-19 00:10:51 -0700</bug_when>
    <thetext>Created attachment 352774
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1470859</commentid>
    <comment_count>3</comment_count>
      <attachid>352783</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2018-10-19 07:44:04 -0700</bug_when>
    <thetext>Created attachment 352783
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1470891</commentid>
    <comment_count>4</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2018-10-19 09:54:15 -0700</bug_when>
    <thetext>Tim wants to know from Anders why this wasn&apos;t already done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1470902</commentid>
    <comment_count>5</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2018-10-19 10:05:14 -0700</bug_when>
    <thetext>(like if there&apos;s a good reason to not do it or if it just hasn&apos;t been done yet)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1470911</commentid>
    <comment_count>6</comment_count>
      <attachid>352783</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2018-10-19 10:25:54 -0700</bug_when>
    <thetext>Comment on attachment 352783
Patch

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

&gt; Source/WebKit/ChangeLog:11
&gt; +        What a mess.  No wonder people take shortcuts and make strange design decisions.

Hah. Ouch.

&gt; Source/WebKit/ChangeLog:15
&gt; +        layout test and many others.  I intent to refine and further adopt this incrementally.

You intent!

&gt; Source/WebKit/UIProcess/Network/NetworkProcessProxy.messages.in:59
&gt; +    GetSandboxExtensionsForBlobFiles(Vector&lt;String&gt; paths) -&gt; (WebKit::SandboxExtension::HandleArray extensions) Async

I feel like we should either invert the sync-by-default or make you always write one or the other. But that can be later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1470918</commentid>
    <comment_count>7</comment_count>
      <attachid>352783</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2018-10-19 10:41:28 -0700</bug_when>
    <thetext>Comment on attachment 352783
Patch

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

http://trac.webkit.org/r237294

&gt; Source/WebKit/Platform/IPC/Connection.cpp:1137
&gt; +CompletionHandler&lt;void(Decoder*)&gt; takeAsyncReplyHandler(Connection&amp; connection, uint64_t identifier)

As suggested by Anders, I added the equivalent of MESSAGE_CHECK(map.isValidKey(identifier)) here because it&apos;s coming from an untrusted source.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1470919</commentid>
    <comment_count>8</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2018-10-19 10:41:44 -0700</bug_when>
    <thetext>http://trac.webkit.org/r237294</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1470920</commentid>
    <comment_count>9</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-10-19 10:42:26 -0700</bug_when>
    <thetext>&lt;rdar://problem/45409444&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1470969</commentid>
    <comment_count>10</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2018-10-19 13:18:38 -0700</bug_when>
    <thetext>http://trac.webkit.org/r237298</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1471068</commentid>
    <comment_count>11</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2018-10-19 21:57:02 -0700</bug_when>
    <thetext>Do we expect all callers to be on the main thread?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1471223</commentid>
    <comment_count>12</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-10-22 08:55:55 -0700</bug_when>
    <thetext>(In reply to Simon Fraser (smfr) from comment #11)
&gt; Do we expect all callers to be on the main thread?

This definitely has not been a requirement so far for async IPC. I do not think we should add such requirement either.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1471224</commentid>
    <comment_count>13</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2018-10-22 08:57:34 -0700</bug_when>
    <thetext>Do you need to protect asyncReplyHandlerMap() with a lock then?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1471234</commentid>
    <comment_count>14</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-10-22 09:18:22 -0700</bug_when>
    <thetext>(In reply to Simon Fraser (smfr) from comment #13)
&gt; Do you need to protect asyncReplyHandlerMap() with a lock then?

I will look into the patch more but there might be other issues also:
- ID generation is not thread safe
- CompletionHandlers may not get called on the thread that scheduled them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1471235</commentid>
    <comment_count>15</comment_count>
      <attachid>352783</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2018-10-22 09:26:36 -0700</bug_when>
    <thetext>Comment on attachment 352783
Patch

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

&gt; Source/WebKit/Platform/IPC/Connection.cpp:284
&gt; +            handler(nullptr);

The Connection destructor is always called on the main thread so those completion handlers will be called on the main thread no matter on which thread they were scheduled.

&gt; Source/WebKit/Platform/IPC/Connection.cpp:970
&gt; +        auto handler = takeAsyncReplyHandler(*this, *listenerID);

Looks like the map is only used from the main thread here.

&gt; Source/WebKit/Platform/IPC/Connection.h:419
&gt; +void Connection::sendWithAsyncReply(T&amp;&amp; message, CompletionHandler&lt;void(Args...)&gt;&amp;&amp; completionHandler, uint64_t destinationID)

I see that you added a new method. We may want to add ASSERT(RunLoop::isMain()); in this method and in nextAsyncReplyHandlerID() and in asyncReplyHandlerMap() since those are not thread safe.

In the future we have have some use cases for calling this on background threads though as the regular send() allows this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1548856</commentid>
    <comment_count>16</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-06-28 10:17:37 -0700</bug_when>
    <thetext>Adding assertions in https://bugs.webkit.org/show_bug.cgi?id=199324</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>352773</attachid>
            <date>2018-10-19 00:04:43 -0700</date>
            <delta_ts>2018-10-19 00:10:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-190746-20181019000442.patch</filename>
            <type>text/plain</type>
            <size>30537</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMzcyODIpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYzIEBACisyMDE4LTEwLTE4ICBBbGV4IENocmlz
dGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgSW50cm9kdWNlIENv
bXBsZXRpb25IYW5kbGVyLWJhc2VkIEFzeW5jIElQQyBtZXNzYWdlcyB3aXRoIHJlcGxpZXMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MDc0NgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJlZm9yZSB0aGlz
IHBhdGNoLCB0byBtYWtlIGFuIGFzeW5jaHJvbm91cyBJUEMgbWVzc2FnZSB3aXRoIGEgcmVwbHkg
eW91IGhhZCB0byBmaW5kIHR3byBvYmplY3RzIHRoYXQKKyAgICAgICAgY2FuIHRhbGsgdG8gZWFj
aCBvdGhlciwgbWFrZSB0d28gbmV3IG1lc3NhZ2UgdHlwZXMsIHNlbmQgYSBnZW5lcmF0ZWQgaWRl
bnRpZmllciwga2VlcCB0cmFjayBvZiB0aGF0CisgICAgICAgIGlkZW50aWZpZXIsIG1ha2UgYSBI
YXNoTWFwIHNvbWV3aGVyZSB0byBzdG9yZSB0aGUgb2JqZWN0IHdhaXRpbmcgZm9yIHRoZSByZXNw
b25zZSwgYW5kIGhvb2sgaXQgYWxsIHVwLgorICAgICAgICBXaGF0IGEgbWVzcy4gIE5vIHdvbmRl
ciBwZW9wbGUgdGFrZSBzaG9ydGN1dHMgYW5kIG1ha2Ugc3RyYW5nZSBkZXNpZ24gZGVjaXNpb25z
LgorCisgICAgICAgIE5vdywgeW91IGNhbiBqdXN0IHVzZSBhIENvbXBsZXRpb25IYW5kbGVyIGFu
ZCBtYXJrIHRoZSByZXBseSBhcyBBc3luYyBpbiAqLm1lc3NhZ2VzLmluLgorICAgICAgICBJJ3Zl
IGFkb3B0ZWQgdGhpcyB3aXRoIGEgbWVzc2FnZSB3aG9zZSBiZWhhdmlvciBpcyBjb3ZlcmVkIGJ5
IHRoZSBzdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vYmxvYi1jdXJzb3IuaHRtbAorICAgICAgICBs
YXlvdXQgdGVzdCBhbmQgbWFueSBvdGhlcnMuICBJIGludGVudCB0byByZWZpbmUgYW5kIGZ1cnRo
ZXIgYWRvcHQgdGhpcyBpbmNyZW1lbnRhbGx5LgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Byb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6Z2V0
U2FuZGJveEV4dGVuc2lvbnNGb3JCbG9iRmlsZXMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UHJvY2Vzczo6ZGlkR2V0U2FuZGJveEV4dGVuc2lvbnNGb3JCbG9iRmlsZXMpOiBEZWxldGVkLgor
ICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmg6CisgICAgICAgICogTmV0
d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVzc2FnZXMuaW46CisgICAgICAgIFRoaXMgaXMg
cmVwcmVzZW50YXRpdmUgb2YgaG93IGNvZGUgd2lsbCBiZSBzaW1wbGlmaWVkIHdpdGggZ3JlYXRl
ciBhZG9wdGlvbi4gCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9h
ZFBhcmFtZXRlcnMuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkUGFy
YW1ldGVyczo6ZGVjb2RlKToKKyAgICAgICAgTW9kZXJuaXplIEhhbmRsZUFycmF5IGRlY29kaW5n
LgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9Db25uZWN0aW9uLmNwcDoKKyAgICAgICAgKElQQzo6
Q29ubmVjdGlvbjo6ZGlzcGF0Y2hNZXNzYWdlKToKKyAgICAgICAgKElQQzo6bmV4dEFzeW5jUmVw
bHlIYW5kbGVySUQpOgorICAgICAgICAoSVBDOjphc3luY1JlcGx5SGFuZGxlck1hcCk6CisgICAg
ICAgIEhhbmRsZSBhc3luYyByZXBsaWVzIHdoZW4gbG9va2luZyBhdCBpbmNvbWluZyBtZXNzYWdl
cyBmcm9tIHRoZSBzZW5kaW5nIHByb2Nlc3MuCisgICAgICAgICogUGxhdGZvcm0vSVBDL0Nvbm5l
Y3Rpb24uaDoKKyAgICAgICAgKElQQzo6Q29ubmVjdGlvbjo6c2VuZFdpdGhBc3luY1JlcGx5KToK
KyAgICAgICAgU2VuZCBhIG1lc3NhZ2Ugd2l0aCBhbiBhc3luYyByZXBseSBhbmQgcHJlcGFyZSB0
aGUgcmVwbHkgcmVjZWl2ZXIuCisgICAgICAgICogUGxhdGZvcm0vSVBDL0VuY29kZXIuaDoKKyAg
ICAgICAgTWFrZSB0aGUgdWludDY0X3QgZW5jb2RlciBwdWJsaWMgc28gd2UgY2FuIHVzZSBpdCB3
aGVuIGVuY29kaW5nIHRoZSBsaXN0ZW5lcklELgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9IYW5k
bGVNZXNzYWdlLmg6CisgICAgICAgIChJUEM6OmhhbmRsZU1lc3NhZ2VBc3luYyk6CisgICAgICAg
IEhhbmRsZSBhbiBhc3luY2hyb25vdXMgbWVzc2FnZSB3aXRoIGEgcmVwbHkgZnJvbSB0aGUgcmVj
ZWl2aW5nIHByb2Nlc3MuCisgICAgICAgIFRoaXMgaXMgc2ltaWxhciB0byBob3cgRGVsYXllZFJl
cGx5IG1lc3NhZ2VzIGFyZSBoYW5kbGVkLCBidXQgdGhlIGxpc3RlbmVySUQgaXMgYXV0b21hdGlj
YWxseSBjYXB0dXJlZCBhbmQgc2VudCBiYWNrLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0L21l
c3NhZ2VzLnB5OgorICAgICAgICBHZW5lcmF0ZSBjb2RlIGZvciBhc3luYyBtZXNzYWdlIHJlcGxp
ZXMuCisgICAgICAgICogU2hhcmVkL0RhdGFiYXNlcy9JbmRleGVkREIvV2ViSURCUmVzdWx0LmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViSURCUmVzdWx0OjpkZWNvZGUpOgorICAgICAgICAqIFNo
YXJlZC9TYW5kYm94RXh0ZW5zaW9uLmg6CisgICAgICAgIChXZWJLaXQ6OlNhbmRib3hFeHRlbnNp
b246OkhhbmRsZUFycmF5OjphdCk6CisgICAgICAgIChXZWJLaXQ6OlNhbmRib3hFeHRlbnNpb246
OkhhbmRsZUFycmF5OjpkZWNvZGUpOgorICAgICAgICAqIFNoYXJlZC9XZWJQcm9jZXNzQ3JlYXRp
b25QYXJhbWV0ZXJzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc0NyZWF0aW9uUGFy
YW1ldGVyczo6ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQvbWFjL1NhbmRib3hFeHRlbnNpb25N
YWMubW06CisgICAgICAgIChXZWJLaXQ6OlNhbmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5Ojpk
ZWNvZGUpOgorICAgICAgICBNb2Rlcm5pemUgdGhlIGRlY29kaW5nIG9mIEhhbmRsZUFycmF5IHRv
IHdvcmsgd2l0aCBnZW5lcmF0ZWQgZGVjb2RpbmcuCisgICAgICAgICogVUlQcm9jZXNzL05ldHdv
cmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9j
ZXNzUHJveHk6OmdldFNhbmRib3hFeHRlbnNpb25zRm9yQmxvYkZpbGVzKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Lmg6CisgICAgICAgICogVUlQcm9j
ZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5tZXNzYWdlcy5pbjoKKyAgICAgICAgVGhp
cyBpcyBhbHNvIHJlcHJlc2VudGF0aXZlIG9mIGhvdyBjb2RlIHdpbGwgYmUgc2ltcGxpZmllZCB3
aXRoIGdyZWF0ZXIgYWRvcHRpb24uCisgICAgICAgICogV2ViUHJvY2Vzcy9NZWRpYVN0cmVhbS9N
ZWRpYURldmljZVNhbmRib3hFeHRlbnNpb25zLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TWVkaWFE
ZXZpY2VTYW5kYm94RXh0ZW5zaW9uczo6ZGVjb2RlKToKKyAgICAgICAgTW9kZXJuaXplIEhhbmRs
ZUFycmF5IGRlY29kaW5nLgorCiAyMDE4LTEwLTE4ICBFcmljIENhcmxzb24gIDxlcmljLmNhcmxz
b25AYXBwbGUuY29tPgogCiAgICAgICAgIFtNZWRpYVN0cmVhbV0gQWxsb3cgcG9ydHMgdG8gb3B0
aW9uYWxseSBkbyBzY3JlZW4gY2FwdHVyZSBpbiB0aGUgVUkgcHJvY2VzcwpJbmRleDogU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAJKHJldmlzaW9u
IDIzNzI1OSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3Mu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTkwLDIxICsxMTkwLDExIEBAIHZvaWQgTmV0d29ya1By
b2Nlc3M6OmFkZEluZGV4ZWREYXRhYmFzZVMKICNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRB
QkFTRSkKIAogI2lmIEVOQUJMRShTQU5EQk9YX0VYVEVOU0lPTlMpCi12b2lkIE5ldHdvcmtQcm9j
ZXNzOjpnZXRTYW5kYm94RXh0ZW5zaW9uc0ZvckJsb2JGaWxlcyhjb25zdCBWZWN0b3I8U3RyaW5n
PiYgZmlsZW5hbWVzLCBGdW5jdGlvbjx2b2lkKFNhbmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5
JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBOZXR3b3JrUHJvY2Vzczo6Z2V0U2FuZGJv
eEV4dGVuc2lvbnNGb3JCbG9iRmlsZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIGZpbGVuYW1lcywg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheSYmKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBzdGF0aWMgdWludDY0X3QgbGFzdFJlcXVlc3RJ
RDsKLSAgICAKLSAgICB1aW50NjRfdCByZXF1ZXN0SUQgPSArK2xhc3RSZXF1ZXN0SUQ7Ci0gICAg
bV9zYW5kYm94RXh0ZW5zaW9uRm9yQmxvYnNDb21wbGV0aW9uSGFuZGxlcnNTdG9yYWdlRm9yTmV0
d29ya1Byb2Nlc3Muc2V0KHJlcXVlc3RJRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwot
ICAgIHBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzUHJveHk6OkdldFNhbmRib3hFeHRlbnNpb25zRm9yQmxvYkZpbGVzKHJlcXVlc3RJRCwgZmls
ZW5hbWVzKSwgMCk7CisgICAgcGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFdpdGhBc3lu
Y1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpHZXRTYW5kYm94RXh0ZW5zaW9u
c0ZvckJsb2JGaWxlcyhmaWxlbmFtZXMpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9
CiAKLXZvaWQgTmV0d29ya1Byb2Nlc3M6OmRpZEdldFNhbmRib3hFeHRlbnNpb25zRm9yQmxvYkZp
bGVzKHVpbnQ2NF90IHJlcXVlc3RJRCwgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlQXJyYXkmJiBo
YW5kbGVzKQotewotICAgIGlmIChhdXRvIGhhbmRsZXIgPSBtX3NhbmRib3hFeHRlbnNpb25Gb3JC
bG9ic0NvbXBsZXRpb25IYW5kbGVyc1N0b3JhZ2VGb3JOZXR3b3JrUHJvY2Vzcy50YWtlKHJlcXVl
c3RJRCkpCi0gICAgICAgIGhhbmRsZXIoV1RGTW92ZShoYW5kbGVzKSk7Ci19Ci0gICAgCiB2b2lk
IE5ldHdvcmtQcm9jZXNzOjp1cGRhdGVUZW1wb3JhcnlGaWxlU2FuZGJveEV4dGVuc2lvbnMoY29u
c3QgVmVjdG9yPFN0cmluZz4mIHBhdGhzLCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheSYg
aGFuZGxlcykKIHsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGhhbmRsZXMuc2l6ZSgpOyAr
K2kpIHsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3Mu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9j
ZXNzLmgJKHJldmlzaW9uIDIzNzI2NCkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Byb2Nlc3MuaAkod29ya2luZyBjb3B5KQpAQCAtMTkzLDcgKzE5Myw3IEBAIHB1Ymxp
YzoKICNlbmRpZgogCiAjaWYgRU5BQkxFKFNBTkRCT1hfRVhURU5TSU9OUykKLSAgICB2b2lkIGdl
dFNhbmRib3hFeHRlbnNpb25zRm9yQmxvYkZpbGVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxl
bmFtZXMsIFdURjo6RnVuY3Rpb248dm9pZChTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheSYm
KT4mJiBjb21wbGV0aW9uSGFuZGxlcik7CisgICAgdm9pZCBnZXRTYW5kYm94RXh0ZW5zaW9uc0Zv
ckJsb2JGaWxlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgZmlsZW5hbWVzLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKFNhbmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5JiYpPiYmKTsKICAgICB2b2lk
IHVwZGF0ZVRlbXBvcmFyeUZpbGVTYW5kYm94RXh0ZW5zaW9ucyhjb25zdCBWZWN0b3I8U3RyaW5n
PiYgcGF0aHMsIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5Jik7CiAjZW5kaWYKIApAQCAt
MzE0LDEwICszMTQsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVnaXN0ZXJVUkxTY2hlbWVBc0NP
UlNFbmFibGVkKGNvbnN0IFN0cmluZyYpIGNvbnN0OwogICAgIHZvaWQgcmVnaXN0ZXJVUkxTY2hl
bWVBc0NhbkRpc3BsYXlPbmx5SWZDYW5SZXF1ZXN0KGNvbnN0IFN0cmluZyYpIGNvbnN0OwogCi0j
aWYgRU5BQkxFKFNBTkRCT1hfRVhURU5TSU9OUykKLSAgICB2b2lkIGRpZEdldFNhbmRib3hFeHRl
bnNpb25zRm9yQmxvYkZpbGVzKHVpbnQ2NF90IHJlcXVlc3RJRCwgU2FuZGJveEV4dGVuc2lvbjo6
SGFuZGxlQXJyYXkmJik7Ci0jZW5kaWYKLQogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQog
ICAgIHZvaWQgYWRkSW5kZXhlZERhdGFiYXNlU2Vzc2lvbihQQUw6OlNlc3Npb25JRCwgU3RyaW5n
JiwgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJik7CiAgICAgSGFzaFNldDxXZWJDb3JlOjpTZWN1
cml0eU9yaWdpbkRhdGE+IGluZGV4ZWREYXRhYmFzZU9yaWdpbnMoY29uc3QgU3RyaW5nJiBwYXRo
KTsKQEAgLTM5OCw3ICszOTQsNiBAQCBwcml2YXRlOgogI2VuZGlmCiAKICAgICBIYXNoTWFwPFN0
cmluZywgUmVmUHRyPFNhbmRib3hFeHRlbnNpb24+PiBtX2Jsb2JUZW1wb3JhcnlGaWxlU2FuZGJv
eEV4dGVuc2lvbnM7Ci0gICAgSGFzaE1hcDx1aW50NjRfdCwgV1RGOjpGdW5jdGlvbjx2b2lkKFNh
bmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5JiYpPj4gbV9zYW5kYm94RXh0ZW5zaW9uRm9yQmxv
YnNDb21wbGV0aW9uSGFuZGxlcnNTdG9yYWdlRm9yTmV0d29ya1Byb2Nlc3M7CiAgICAgCiAgICAg
RGVxdWU8Q3Jvc3NUaHJlYWRUYXNrPiBtX3N0b3JhZ2VUYXNrczsKICAgICBMb2NrIG1fc3RvcmFn
ZVRhc2tNdXRleDsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1By
b2Nlc3MubWVzc2FnZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbgkocmV2aXNpb24gMjM3MjY0KQorKysgU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbgkod29y
a2luZyBjb3B5KQpAQCAtNzMsMTAgKzczLDYgQEAgbWVzc2FnZXMgLT4gTmV0d29ya1Byb2Nlc3Mg
TGVnYWN5UmVjZWl2ZQogICAgIENhbmNlbFByZXBhcmVUb1N1c3BlbmQoKQogICAgIFByb2Nlc3NE
aWRSZXN1bWUoKQogCi0jaWYgRU5BQkxFKFNBTkRCT1hfRVhURU5TSU9OUykKLSAgICBEaWRHZXRT
YW5kYm94RXh0ZW5zaW9uc0ZvckJsb2JGaWxlcyh1aW50NjRfdCByZXF1ZXN0SUQsIFdlYktpdDo6
U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlQXJyYXkgZXh0ZW5zaW9ucykKLSNlbmRpZgotCiAgICAg
V3JpdGVCbG9iVG9GaWxlUGF0aChXZWJDb3JlOjpVUkwgYmxvYlVSTCwgU3RyaW5nIHBhdGgsIFdl
YktpdDo6U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIGhhbmRsZSwgdWludDY0X3QgY2FsbGJhY2tJ
RCkKIAogICAgIFByZWNvbm5lY3RUbyhXZWJDb3JlOjpVUkwgdXJsLCBlbnVtOmJvb2wgV2ViQ29y
ZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kpOwpJbmRl
eDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1l
dGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycy5jcHAJKHJldmlzaW9uIDIzNzI1OSkKKysrIFNvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzMsMTEgKzEzMywxMiBAQCBib29sIE5ldHdvcmtSZXNvdXJj
ZUxvYWRQYXJhbWV0ZXJzOjpkZWNvCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IHJlc3VsdC5yZXF1ZXN0LnNldEhUVFBCb2R5KFdURk1vdmUoZm9ybURhdGEpKTsKIAotICAgICAg
ICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheSByZXF1ZXN0Qm9keVNhbmRib3hFeHRlbnNp
b25IYW5kbGVzOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlcXVlc3RCb2R5U2FuZGJv
eEV4dGVuc2lvbkhhbmRsZXMpKQorICAgICAgICBzdGQ6Om9wdGlvbmFsPFNhbmRib3hFeHRlbnNp
b246OkhhbmRsZUFycmF5PiByZXF1ZXN0Qm9keVNhbmRib3hFeHRlbnNpb25IYW5kbGVzOworICAg
ICAgICBkZWNvZGVyID4+IHJlcXVlc3RCb2R5U2FuZGJveEV4dGVuc2lvbkhhbmRsZXM7CisgICAg
ICAgIGlmICghcmVxdWVzdEJvZHlTYW5kYm94RXh0ZW5zaW9uSGFuZGxlcykKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZXF1ZXN0Qm9k
eVNhbmRib3hFeHRlbnNpb25IYW5kbGVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAo
YXV0byBleHRlbnNpb24gPSBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGUoV1RGTW92ZShyZXF1ZXN0
Qm9keVNhbmRib3hFeHRlbnNpb25IYW5kbGVzW2ldKSkpCisgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgcmVxdWVzdEJvZHlTYW5kYm94RXh0ZW5zaW9uSGFuZGxlcy0+c2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgICAgIGlmIChhdXRvIGV4dGVuc2lvbiA9IFNhbmRib3hFeHRlbnNpb246OmNy
ZWF0ZShXVEZNb3ZlKHJlcXVlc3RCb2R5U2FuZGJveEV4dGVuc2lvbkhhbmRsZXMtPmF0KGkpKSkp
CiAgICAgICAgICAgICAgICAgcmVzdWx0LnJlcXVlc3RCb2R5U2FuZGJveEV4dGVuc2lvbnMuYXBw
ZW5kKFdURk1vdmUoZXh0ZW5zaW9uKSk7CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L1BsYXRmb3JtL0lQQy9Db25uZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L1BsYXRmb3JtL0lQQy9Db25uZWN0aW9uLmNwcAkocmV2aXNpb24gMjM3MjU5KQorKysg
U291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQ29ubmVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTk0OCw2ICs5NDgsMjEgQEAgdm9pZCBDb25uZWN0aW9uOjplbnF1ZXVlSW5jb21pbmdNZXNz
YWdlKAogdm9pZCBDb25uZWN0aW9uOjpkaXNwYXRjaE1lc3NhZ2UoRGVjb2RlciYgZGVjb2RlcikK
IHsKICAgICBSRUxFQVNFX0FTU0VSVChpc1ZhbGlkKCkpOworICAgIGlmIChkZWNvZGVyLm1lc3Nh
Z2VSZWNlaXZlck5hbWUoKSA9PSAiQXN5bmNSZXBseSIpIHsKKyAgICAgICAgc3RkOjpvcHRpb25h
bDx1aW50NjRfdD4gbGlzdGVuZXJJRDsKKyAgICAgICAgZGVjb2RlciA+PiBsaXN0ZW5lcklEOwor
ICAgICAgICBpZiAoIWxpc3RlbmVySUQpIHsKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGF1dG8gaGFuZGxl
ciA9IGFzeW5jUmVwbHlIYW5kbGVyTWFwKCkudGFrZSgqbGlzdGVuZXJJRCk7CisgICAgICAgIGlm
ICghaGFuZGxlcikgeworICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaGFuZGxlcihkZWNvZGVyKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KICAgICBtX2NsaWVudC5kaWRSZWNlaXZlTWVzc2FnZSgqdGhpcywg
ZGVjb2Rlcik7CiB9CiAKQEAgLTEwOTMsNiArMTEwOCwxOCBAQCB2b2lkIENvbm5lY3Rpb246OmRp
c3BhdGNoSW5jb21pbmdNZXNzYWdlCiAgICAgfQogfQogCit1aW50NjRfdCBuZXh0QXN5bmNSZXBs
eUhhbmRsZXJJRCgpCit7CisgICAgc3RhdGljIHVpbnQ2NF90IGlkZW50aWZpZXIgeyAwIH07Cisg
ICAgcmV0dXJuICsraWRlbnRpZmllcjsKK30KKworSGFzaE1hcDx1aW50NjRfdCwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChEZWNvZGVyJik+PiYgYXN5bmNSZXBseUhhbmRsZXJNYXAoKQoreworICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoTWFwPHVpbnQ2NF90LCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKERlY29kZXImKT4+PiBtYXA7CisgICAgcmV0dXJuIG1hcC5nZXQoKTsKK30KKwogdm9p
ZCBDb25uZWN0aW9uOjp3YWtlVXBSdW5Mb29wKCkKIHsKICAgICBSdW5Mb29wOjptYWluKCkud2Fr
ZVVwKCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Db25uZWN0aW9uLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQ29ubmVjdGlvbi5oCShyZXZp
c2lvbiAyMzcyNTkpCisrKyBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Db25uZWN0aW9uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE3Nyw2ICsxNzcsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHBv
c3RDb25uZWN0aW9uRGlkQ2xvc2VPbkNvbm5lY3Rpb25Xb3JrUXVldWUoKTsKIAorICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIEFyZ3M+IHZvaWQgc2VuZFdpdGhBc3luY1JlcGx5
KFQmJiBtZXNzYWdlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEFyZ3MuLi4pPiYmIGFyZ3MsIHVp
bnQ2NF90IGRlc3RpbmF0aW9uSUQgPSAwKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBib29s
IHNlbmQoVCYmIG1lc3NhZ2UsIHVpbnQ2NF90IGRlc3RpbmF0aW9uSUQsIE9wdGlvblNldDxTZW5k
T3B0aW9uPiBzZW5kT3B0aW9ucyA9IHsgfSk7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9p
ZCBzZW5kV2l0aFJlcGx5KFQmJiBtZXNzYWdlLCB1aW50NjRfdCBkZXN0aW5hdGlvbklELCBGdW5j
dGlvbkRpc3BhdGNoZXImIHJlcGx5RGlzcGF0Y2hlciwgRnVuY3Rpb248dm9pZChzdGQ6Om9wdGlv
bmFsPHR5cGVuYW1lIENvZGluZ1R5cGU8dHlwZW5hbWUgVDo6UmVwbHk+OjpUeXBlPik+JiYgcmVw
bHlIYW5kbGVyKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBib29sIHNlbmRTeW5jKFQmJiBt
ZXNzYWdlLCB0eXBlbmFtZSBUOjpSZXBseSYmIHJlcGx5LCB1aW50NjRfdCBkZXN0aW5hdGlvbklE
LCBTZWNvbmRzIHRpbWVvdXQgPSBTZWNvbmRzOjppbmZpbml0eSgpLCBPcHRpb25TZXQ8U2VuZFN5
bmNPcHRpb24+IHNlbmRTeW5jT3B0aW9ucyA9IHsgfSk7CkBAIC00MTAsNiArNDExLDI0IEBAIGJv
b2wgQ29ubmVjdGlvbjo6c2VuZChUJiYgbWVzc2FnZSwgdWludDYKICAgICByZXR1cm4gc2VuZE1l
c3NhZ2UoV1RGTW92ZShlbmNvZGVyKSwgc2VuZE9wdGlvbnMpOwogfQogCitIYXNoTWFwPHVpbnQ2
NF90LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKERlY29kZXImKT4+JiBhc3luY1JlcGx5SGFuZGxl
ck1hcCgpOwordWludDY0X3QgbmV4dEFzeW5jUmVwbHlIYW5kbGVySUQoKTsKKwordGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gQXJncz4KK3ZvaWQgQ29ubmVjdGlvbjo6c2VuZFdpdGhB
c3luY1JlcGx5KFQmJiBtZXNzYWdlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEFyZ3MuLi4pPiYm
IGNvbXBsZXRpb25IYW5kbGVyLCB1aW50NjRfdCBkZXN0aW5hdGlvbklEKQoreworICAgIENPTVBJ
TEVfQVNTRVJUKCFUOjppc1N5bmMsIEFzeW5jTWVzc2FnZUV4cGVjdGVkKTsKKworICAgIGF1dG8g
ZW5jb2RlciA9IHN0ZDo6bWFrZV91bmlxdWU8RW5jb2Rlcj4oVDo6cmVjZWl2ZXJOYW1lKCksIFQ6
Om5hbWUoKSwgZGVzdGluYXRpb25JRCk7CisgICAgdWludDY0X3QgbGlzdGVuZXJJRCA9IG5leHRB
c3luY1JlcGx5SGFuZGxlcklEKCk7CisgICAgZW5jb2Rlci0+ZW5jb2RlKGxpc3RlbmVySUQpOwor
ICAgIGVuY29kZXItPmVuY29kZShtZXNzYWdlLmFyZ3VtZW50cygpKTsKKyAgICBzZW5kTWVzc2Fn
ZShXVEZNb3ZlKGVuY29kZXIpLCB7IH0pOworICAgIGFzeW5jUmVwbHlIYW5kbGVyTWFwKCkuYWRk
KGxpc3RlbmVySUQsIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpXSAoRGVjb2RlciYgZGVjb2RlcikgbXV0YWJsZSB7CisgICAgICAgIFQ6OmNhbGxSZXBseShk
ZWNvZGVyLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgfSk7Cit9CisKIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+CiB2b2lkIENvbm5lY3Rpb246OnNlbmRXaXRoUmVwbHkoVCYmIG1lc3Nh
Z2UsIHVpbnQ2NF90IGRlc3RpbmF0aW9uSUQsIEZ1bmN0aW9uRGlzcGF0Y2hlciYgcmVwbHlEaXNw
YXRjaGVyLCBGdW5jdGlvbjx2b2lkKHN0ZDo6b3B0aW9uYWw8dHlwZW5hbWUgQ29kaW5nVHlwZTx0
eXBlbmFtZSBUOjpSZXBseT46OlR5cGU+KT4mJiByZXBseUhhbmRsZXIpCiB7CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9FbmNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9QbGF0Zm9ybS9JUEMvRW5jb2Rlci5oCShyZXZpc2lvbiAyMzcyNTkpCisrKyBTb3VyY2Uv
V2ViS2l0L1BsYXRmb3JtL0lQQy9FbmNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTk0LDYgKzk0
LDggQEAgcHVibGljOgogCiAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNJUENFbmNvZGVyID0gdHJ1
ZTsKIAorICAgIHZvaWQgZW5jb2RlKHVpbnQ2NF90KTsKKwogcHJpdmF0ZToKICAgICB1aW50OF90
KiBncm93KHVuc2lnbmVkIGFsaWdubWVudCwgc2l6ZV90KTsKIApAQCAtMTAxLDcgKzEwMyw2IEBA
IHByaXZhdGU6CiAgICAgdm9pZCBlbmNvZGUodWludDhfdCk7CiAgICAgdm9pZCBlbmNvZGUodWlu
dDE2X3QpOwogICAgIHZvaWQgZW5jb2RlKHVpbnQzMl90KTsKLSAgICB2b2lkIGVuY29kZSh1aW50
NjRfdCk7CiAgICAgdm9pZCBlbmNvZGUoaW50MTZfdCk7CiAgICAgdm9pZCBlbmNvZGUoaW50MzJf
dCk7CiAgICAgdm9pZCBlbmNvZGUoaW50NjRfdCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1BsYXRm
b3JtL0lQQy9IYW5kbGVNZXNzYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9QbGF0
Zm9ybS9JUEMvSGFuZGxlTWVzc2FnZS5oCShyZXZpc2lvbiAyMzcyNTkpCisrKyBTb3VyY2UvV2Vi
S2l0L1BsYXRmb3JtL0lQQy9IYW5kbGVNZXNzYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4Nyw0
ICsxODcsMjggQEAgdm9pZCBoYW5kbGVNZXNzYWdlRGVsYXllZChDb25uZWN0aW9uJiBjbwogICAg
IGNhbGxNZW1iZXJGdW5jdGlvbihXVEZNb3ZlKGFyZ3VtZW50cyksIFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpLCBvYmplY3QsIGZ1bmN0aW9uKTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgQywgdHlwZW5hbWUgTUY+Cit2b2lkIGhhbmRsZU1lc3NhZ2VBc3luYyhDb25uZWN0
aW9uJiBjb25uZWN0aW9uLCBEZWNvZGVyJiBkZWNvZGVyLCBDKiBvYmplY3QsIE1GIGZ1bmN0aW9u
KQoreworICAgIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IGxpc3RlbmVySUQ7CisgICAgZGVjb2Rl
ciA+PiBsaXN0ZW5lcklEOworICAgIGlmICghbGlzdGVuZXJJRCkgeworICAgICAgICBBU1NFUlQo
ZGVjb2Rlci5pc0ludmFsaWQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAg
dHlwZW5hbWUgQ29kaW5nVHlwZTx0eXBlbmFtZSBUOjpBcmd1bWVudHM+OjpUeXBlIGFyZ3VtZW50
czsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGFyZ3VtZW50cykpIHsKKyAgICAgICAgQVNTRVJU
KGRlY29kZXIuaXNJbnZhbGlkKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgdHlw
ZW5hbWUgVDo6QXN5bmNSZXBseSBjb21wbGV0aW9uSGFuZGxlciA9IFtsaXN0ZW5lcklEID0gKmxp
c3RlbmVySUQsIGNvbm5lY3Rpb24gPSBtYWtlUmVmKGNvbm5lY3Rpb24pXSAoYXV0byYmLi4uIGFy
Z3MpIG11dGFibGUgeworICAgICAgICBhdXRvIGVuY29kZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPEVu
Y29kZXI+KCJBc3luY1JlcGx5IiwgVDo6YXN5bmNNZXNzYWdlUmVwbHlOYW1lKCksIDApOworICAg
ICAgICAqZW5jb2RlciA8PCBsaXN0ZW5lcklEOworICAgICAgICBUOjpzZW5kKFdURk1vdmUoZW5j
b2RlciksIFdURk1vdmUoY29ubmVjdGlvbiksIGFyZ3MuLi4pOworICAgIH07CisgICAgY2FsbE1l
bWJlckZ1bmN0aW9uKFdURk1vdmUoYXJndW1lbnRzKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
ciksIG9iamVjdCwgZnVuY3Rpb24pOworfQorCiB9IC8vIG5hbWVzcGFjZSBJUEMKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weQkocmV2aXNpb24gMjM3MjY0KQor
KysgU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weQkod29ya2luZyBjb3B5
KQpAQCAtMjksNiArMjksNyBAQCBmcm9tIHdlYmtpdCBpbXBvcnQgcGFyc2VyCiBXQU5UU19DT05O
RUNUSU9OX0FUVFJJQlVURSA9ICdXYW50c0Nvbm5lY3Rpb24nCiBMRUdBQ1lfUkVDRUlWRVJfQVRU
UklCVVRFID0gJ0xlZ2FjeVJlY2VpdmVyJwogREVMQVlFRF9BVFRSSUJVVEUgPSAnRGVsYXllZCcK
K0FTWU5DX0FUVFJJQlVURSA9ICdBc3luYycKIAogX2xpY2Vuc2VfaGVhZGVyID0gIiIiLyoKICAq
IENvcHlyaWdodCAoQykgMjAxMC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
QEAgLTk2LDYgKzk3LDEwIEBAIGRlZiByZXBseV9wYXJhbWV0ZXJfdHlwZSh0eXBlKToKICAgICBy
ZXR1cm4gJyVzJicgJSB0eXBlCiAKIAorZGVmIG1vdmVfdHlwZSh0eXBlKToKKyAgICByZXR1cm4g
JyVzJiYnICUgdHlwZQorCisKIGRlZiBhcmd1bWVudHNfdHlwZShtZXNzYWdlKToKICAgICByZXR1
cm4gJ3N0ZDo6dHVwbGU8JXM+JyAlICcsICcuam9pbihmdW5jdGlvbl9wYXJhbWV0ZXJfdHlwZShw
YXJhbWV0ZXIudHlwZSwgcGFyYW1ldGVyLmtpbmQpIGZvciBwYXJhbWV0ZXIgaW4gbWVzc2FnZS5w
YXJhbWV0ZXJzKQogCkBAIC0xMTMsMjAgKzExOCwyMyBAQCBkZWYgbWVzc2FnZV90b19zdHJ1Y3Rf
ZGVjbGFyYXRpb24obWVzc2FnCiAgICAgcmVzdWx0LmFwcGVuZCgnXG4nKQogICAgIHJlc3VsdC5h
cHBlbmQoJyAgICBzdGF0aWMgSVBDOjpTdHJpbmdSZWZlcmVuY2UgcmVjZWl2ZXJOYW1lKCkgeyBy
ZXR1cm4gbWVzc2FnZVJlY2VpdmVyTmFtZSgpOyB9XG4nKQogICAgIHJlc3VsdC5hcHBlbmQoJyAg
ICBzdGF0aWMgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbmFtZSgpIHsgcmV0dXJuIElQQzo6U3RyaW5n
UmVmZXJlbmNlKCIlcyIpOyB9XG4nICUgbWVzc2FnZS5uYW1lKQotICAgIHJlc3VsdC5hcHBlbmQo
JyAgICBzdGF0aWMgY29uc3QgYm9vbCBpc1N5bmMgPSAlcztcbicgJSAoJ2ZhbHNlJywgJ3RydWUn
KVttZXNzYWdlLnJlcGx5X3BhcmFtZXRlcnMgIT0gTm9uZV0pCisgICAgcmVzdWx0LmFwcGVuZCgn
ICAgIHN0YXRpYyBjb25zdCBib29sIGlzU3luYyA9ICVzO1xuJyAlICgnZmFsc2UnLCAndHJ1ZScp
W21lc3NhZ2UucmVwbHlfcGFyYW1ldGVycyAhPSBOb25lIGFuZCBub3QgbWVzc2FnZS5oYXNfYXR0
cmlidXRlKEFTWU5DX0FUVFJJQlVURSldKQogICAgIHJlc3VsdC5hcHBlbmQoJ1xuJykKICAgICBp
ZiBtZXNzYWdlLnJlcGx5X3BhcmFtZXRlcnMgIT0gTm9uZToKLSAgICAgICAgaWYgbWVzc2FnZS5o
YXNfYXR0cmlidXRlKERFTEFZRURfQVRUUklCVVRFKToKLSAgICAgICAgICAgIHNlbmRfcGFyYW1l
dGVycyA9IFsoZnVuY3Rpb25fcGFyYW1ldGVyX3R5cGUoeC50eXBlLCB4LmtpbmQpLCB4Lm5hbWUp
IGZvciB4IGluIG1lc3NhZ2UucmVwbHlfcGFyYW1ldGVyc10KLSAgICAgICAgICAgIHJlc3VsdC5h
cHBlbmQoJyAgICB1c2luZyBEZWxheWVkUmVwbHkgPSBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCcp
Ci0gICAgICAgICAgICBpZiBsZW4oc2VuZF9wYXJhbWV0ZXJzKToKLSAgICAgICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kKCclcycgJSAnLCAnLmpvaW4oWycgJy5qb2luKHgpIGZvciB4IGluIHNlbmRf
cGFyYW1ldGVyc10pKQotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnKT47XG4nKQorICAgICAg
ICBzZW5kX3BhcmFtZXRlcnMgPSBbKGZ1bmN0aW9uX3BhcmFtZXRlcl90eXBlKHgudHlwZSwgeC5r
aW5kKSwgeC5uYW1lKSBmb3IgeCBpbiBtZXNzYWdlLnJlcGx5X3BhcmFtZXRlcnNdCisgICAgICAg
IGlmIG1lc3NhZ2UuaGFzX2F0dHJpYnV0ZShERUxBWUVEX0FUVFJJQlVURSkgb3IgbWVzc2FnZS5o
YXNfYXR0cmlidXRlKEFTWU5DX0FUVFJJQlVURSk6CisgICAgICAgICAgICBjb21wbGV0aW9uX2hh
bmRsZXJfcGFyYW1ldGVycyA9ICclcycgJSAnLCAnLmpvaW4oWycgJy5qb2luKHgpIGZvciB4IGlu
IHNlbmRfcGFyYW1ldGVyc10pCisgICAgICAgICAgICBpZiBtZXNzYWdlLmhhc19hdHRyaWJ1dGUo
QVNZTkNfQVRUUklCVVRFKToKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgc3Rh
dGljIHZvaWQgY2FsbFJlcGx5KElQQzo6RGVjb2RlciYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
JXMpPiYmKTtcbicgJSAnLCAnLmpvaW4oW21vdmVfdHlwZSh4LnR5cGUpIGZvciB4IGluIG1lc3Nh
Z2UucmVwbHlfcGFyYW1ldGVyc10pKQorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAg
ICBzdGF0aWMgSVBDOjpTdHJpbmdSZWZlcmVuY2UgYXN5bmNNZXNzYWdlUmVwbHlOYW1lKCkgeyBy
ZXR1cm4geyAiJXNSZXBseSIgfTsgfVxuJyAlIG1lc3NhZ2UubmFtZSkKKyAgICAgICAgICAgICAg
ICByZXN1bHQuYXBwZW5kKCcgICAgdXNpbmcgQXN5bmNSZXBseScpCisgICAgICAgICAgICBlbHNl
OgorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICB1c2luZyBEZWxheWVkUmVwbHkn
KQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnID0gQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgl
cyk+O1xuJyAlIGNvbXBsZXRpb25faGFuZGxlcl9wYXJhbWV0ZXJzKQogICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZCgnICAgIHN0YXRpYyB2b2lkIHNlbmQoc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5j
b2Rlcj4mJiwgSVBDOjpDb25uZWN0aW9uJicpCiAgICAgICAgICAgICBpZiBsZW4oc2VuZF9wYXJh
bWV0ZXJzKToKLSAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcsICVzJyAlICcsICcuam9p
bihbJyAnLmpvaW4oeCkgZm9yIHggaW4gc2VuZF9wYXJhbWV0ZXJzXSkpCisgICAgICAgICAgICAg
ICAgcmVzdWx0LmFwcGVuZCgnLCAlcycgJSBjb21wbGV0aW9uX2hhbmRsZXJfcGFyYW1ldGVycykK
ICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyk7XG4nKQotCiAgICAgICAgIHJlc3VsdC5hcHBl
bmQoJyAgICB0eXBlZGVmICVzIFJlcGx5O1xuJyAlIHJlcGx5X3R5cGUobWVzc2FnZSkpCiAKICAg
ICBpZiBsZW4oZnVuY3Rpb25fcGFyYW1ldGVycyk6CkBAIC0yNzYsNiArMjg0LDkgQEAgZGVmIGFz
eW5jX21lc3NhZ2Vfc3RhdGVtZW50KHJlY2VpdmVyLCBtZQogICAgIGRpc3BhdGNoX2Z1bmN0aW9u
X2FyZ3MgPSBbJ2RlY29kZXInLCAndGhpcycsICcmJXMnICUgaGFuZGxlcl9mdW5jdGlvbihyZWNl
aXZlciwgbWVzc2FnZSldCiAKICAgICBkaXNwYXRjaF9mdW5jdGlvbiA9ICdoYW5kbGVNZXNzYWdl
JworICAgIGlmIG1lc3NhZ2UuaGFzX2F0dHJpYnV0ZShBU1lOQ19BVFRSSUJVVEUpOgorICAgICAg
ICBkaXNwYXRjaF9mdW5jdGlvbiArPSAnQXN5bmMnCisgICAgICAgIGRpc3BhdGNoX2Z1bmN0aW9u
X2FyZ3MuaW5zZXJ0KDAsICdjb25uZWN0aW9uJykKIAogICAgIGlmIG1lc3NhZ2UuaGFzX2F0dHJp
YnV0ZShXQU5UU19DT05ORUNUSU9OX0FUVFJJQlVURSk6CiAgICAgICAgIGRpc3BhdGNoX2Z1bmN0
aW9uX2FyZ3MuaW5zZXJ0KDAsICdjb25uZWN0aW9uJykKQEAgLTI5MiwxMiArMzAzLDE0IEBAIGRl
ZiBzeW5jX21lc3NhZ2Vfc3RhdGVtZW50KHJlY2VpdmVyLCBtZXMKICAgICBkaXNwYXRjaF9mdW5j
dGlvbiA9ICdoYW5kbGVNZXNzYWdlJwogICAgIGlmIG1lc3NhZ2UuaGFzX2F0dHJpYnV0ZShERUxB
WUVEX0FUVFJJQlVURSk6CiAgICAgICAgIGRpc3BhdGNoX2Z1bmN0aW9uICs9ICdEZWxheWVkJwor
ICAgIGlmIG1lc3NhZ2UuaGFzX2F0dHJpYnV0ZShBU1lOQ19BVFRSSUJVVEUpOgorICAgICAgICBk
aXNwYXRjaF9mdW5jdGlvbiArPSAnQXN5bmMnCiAKICAgICB3YW50c19jb25uZWN0aW9uID0gbWVz
c2FnZS5oYXNfYXR0cmlidXRlKERFTEFZRURfQVRUUklCVVRFKSBvciBtZXNzYWdlLmhhc19hdHRy
aWJ1dGUoV0FOVFNfQ09OTkVDVElPTl9BVFRSSUJVVEUpCiAKICAgICByZXN1bHQgPSBbXQogICAg
IHJlc3VsdC5hcHBlbmQoJyAgICBpZiAoZGVjb2Rlci5tZXNzYWdlTmFtZSgpID09IE1lc3NhZ2Vz
Ojolczo6JXM6Om5hbWUoKSkge1xuJyAlIChyZWNlaXZlci5uYW1lLCBtZXNzYWdlLm5hbWUpKQot
ICAgIHJlc3VsdC5hcHBlbmQoJyAgICAgICAgSVBDOjolczxNZXNzYWdlczo6JXM6OiVzPiglc2Rl
Y29kZXIsICVzcmVwbHlFbmNvZGVyLCB0aGlzLCAmJXMpO1xuJyAlIChkaXNwYXRjaF9mdW5jdGlv
biwgcmVjZWl2ZXIubmFtZSwgbWVzc2FnZS5uYW1lLCAnY29ubmVjdGlvbiwgJyBpZiB3YW50c19j
b25uZWN0aW9uIGVsc2UgJycsICcnIGlmIG1lc3NhZ2UuaGFzX2F0dHJpYnV0ZShERUxBWUVEX0FU
VFJJQlVURSkgZWxzZSAnKicsIGhhbmRsZXJfZnVuY3Rpb24ocmVjZWl2ZXIsIG1lc3NhZ2UpKSkK
KyAgICByZXN1bHQuYXBwZW5kKCcgICAgICAgIElQQzo6JXM8TWVzc2FnZXM6OiVzOjolcz4oJXNk
ZWNvZGVyLCAlc3JlcGx5RW5jb2RlciwgdGhpcywgJiVzKTtcbicgJSAoZGlzcGF0Y2hfZnVuY3Rp
b24sIHJlY2VpdmVyLm5hbWUsIG1lc3NhZ2UubmFtZSwgJ2Nvbm5lY3Rpb24sICcgaWYgd2FudHNf
Y29ubmVjdGlvbiBlbHNlICcnLCAnJyBpZiBtZXNzYWdlLmhhc19hdHRyaWJ1dGUoREVMQVlFRF9B
VFRSSUJVVEUpIG9yIG1lc3NhZ2UuaGFzX2F0dHJpYnV0ZShBU1lOQ19BVFRSSUJVVEUpIGVsc2Ug
JyonLCBoYW5kbGVyX2Z1bmN0aW9uKHJlY2VpdmVyLCBtZXNzYWdlKSkpCiAgICAgcmVzdWx0LmFw
cGVuZCgnICAgICAgICByZXR1cm47XG4nKQogICAgIHJlc3VsdC5hcHBlbmQoJyAgICB9XG4nKQog
ICAgIHJldHVybiBzdXJyb3VuZF9pbl9jb25kaXRpb24oJycuam9pbihyZXN1bHQpLCBtZXNzYWdl
LmNvbmRpdGlvbikKQEAgLTUyNSwyMCArNTM4LDI4IEBAIGRlZiBnZW5lcmF0ZV9tZXNzYWdlX2hh
bmRsZXIoZmlsZSk6CiAgICAgICAgICAgICByZXN1bHQgKz0gWycjaW5jbHVkZSAlc1xuJyAlIGhl
YWRlcl0KICAgICByZXN1bHQuYXBwZW5kKCdcbicpCiAKLSAgICBzeW5jX2RlbGF5ZWRfbWVzc2Fn
ZXMgPSBbXQorICAgIGRlbGF5ZWRfb3JfYXN5bmNfbWVzc2FnZXMgPSBbXQogICAgIGZvciBtZXNz
YWdlIGluIHJlY2VpdmVyLm1lc3NhZ2VzOgotICAgICAgICBpZiBtZXNzYWdlLnJlcGx5X3BhcmFt
ZXRlcnMgIT0gTm9uZSBhbmQgbWVzc2FnZS5oYXNfYXR0cmlidXRlKERFTEFZRURfQVRUUklCVVRF
KToKLSAgICAgICAgICAgIHN5bmNfZGVsYXllZF9tZXNzYWdlcy5hcHBlbmQobWVzc2FnZSkKKyAg
ICAgICAgaWYgbWVzc2FnZS5yZXBseV9wYXJhbWV0ZXJzICE9IE5vbmUgYW5kIChtZXNzYWdlLmhh
c19hdHRyaWJ1dGUoREVMQVlFRF9BVFRSSUJVVEUpIG9yIG1lc3NhZ2UuaGFzX2F0dHJpYnV0ZShB
U1lOQ19BVFRSSUJVVEUpKToKKyAgICAgICAgICAgIGRlbGF5ZWRfb3JfYXN5bmNfbWVzc2FnZXMu
YXBwZW5kKG1lc3NhZ2UpCiAKLSAgICBpZiBzeW5jX2RlbGF5ZWRfbWVzc2FnZXM6CisgICAgaWYg
ZGVsYXllZF9vcl9hc3luY19tZXNzYWdlczoKICAgICAgICAgcmVzdWx0LmFwcGVuZCgnbmFtZXNw
YWNlIE1lc3NhZ2VzIHtcblxubmFtZXNwYWNlICVzIHtcblxuJyAlIHJlY2VpdmVyLm5hbWUpCiAK
LSAgICAgICAgZm9yIG1lc3NhZ2UgaW4gc3luY19kZWxheWVkX21lc3NhZ2VzOgorICAgICAgICBm
b3IgbWVzc2FnZSBpbiBkZWxheWVkX29yX2FzeW5jX21lc3NhZ2VzOgogICAgICAgICAgICAgc2Vu
ZF9wYXJhbWV0ZXJzID0gWyhmdW5jdGlvbl9wYXJhbWV0ZXJfdHlwZSh4LnR5cGUsIHgua2luZCks
IHgubmFtZSkgZm9yIHggaW4gbWVzc2FnZS5yZXBseV9wYXJhbWV0ZXJzXQogCiAgICAgICAgICAg
ICBpZiBtZXNzYWdlLmNvbmRpdGlvbjoKICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcj
aWYgJXNcblxuJyAlIG1lc3NhZ2UuY29uZGl0aW9uKQogCisgICAgICAgICAgICBpZiBtZXNzYWdl
Lmhhc19hdHRyaWJ1dGUoQVNZTkNfQVRUUklCVVRFKToKKyAgICAgICAgICAgICAgICByZXN1bHQu
YXBwZW5kKCd2b2lkICVzOjpjYWxsUmVwbHkoSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCVzKT4mJiBjb21wbGV0aW9uSGFuZGxlcilcbntcbicgJSAobWVzc2Fn
ZS5uYW1lLCAnLCAnLmpvaW4oW21vdmVfdHlwZSh4LnR5cGUpIGZvciB4IGluIG1lc3NhZ2UucmVw
bHlfcGFyYW1ldGVyc10pKSkKKyAgICAgICAgICAgICAgICBmb3IgeCBpbiBtZXNzYWdlLnJlcGx5
X3BhcmFtZXRlcnM6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICBzdGQ6
Om9wdGlvbmFsPCVzPiAlcztcbicgJSAoeC50eXBlLCB4Lm5hbWUpKQorICAgICAgICAgICAgICAg
ICAgICByZXN1bHQuYXBwZW5kKCcgICAgZGVjb2RlciA+PiAlcztcbicgJSB4Lm5hbWUpCisgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICBpZiAoISVzKSB7XG4gICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuJyAlIHgubmFtZSkK
KyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgY29tcGxldGlvbkhhbmRsZXIoV1RG
TW92ZSgqJXMpKTtcbn1cblxuJyAlICgnLCAqJy5qb2luKHgubmFtZSBmb3IgeCBpbiBtZXNzYWdl
LnJlcGx5X3BhcmFtZXRlcnMpKSkKKwogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgndm9pZCAl
czo6c2VuZChzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYmIGVuY29kZXIsIElQQzo6Q29u
bmVjdGlvbiYgY29ubmVjdGlvbicgJSAobWVzc2FnZS5uYW1lKSkKICAgICAgICAgICAgIGlmIGxl
bihzZW5kX3BhcmFtZXRlcnMpOgogICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJywgJXMn
ICUgJywgJy5qb2luKFsnICcuam9pbih4KSBmb3IgeCBpbiBzZW5kX3BhcmFtZXRlcnNdKSkKQEAg
LTU1OCw3ICs1NzksNyBAQCBkZWYgZ2VuZXJhdGVfbWVzc2FnZV9oYW5kbGVyKGZpbGUpOgogICAg
IGFzeW5jX21lc3NhZ2VzID0gW10KICAgICBzeW5jX21lc3NhZ2VzID0gW10KICAgICBmb3IgbWVz
c2FnZSBpbiByZWNlaXZlci5tZXNzYWdlczoKLSAgICAgICAgaWYgbWVzc2FnZS5yZXBseV9wYXJh
bWV0ZXJzIGlzIG5vdCBOb25lOgorICAgICAgICBpZiBtZXNzYWdlLnJlcGx5X3BhcmFtZXRlcnMg
aXMgbm90IE5vbmUgYW5kIG5vdCBtZXNzYWdlLmhhc19hdHRyaWJ1dGUoQVNZTkNfQVRUUklCVVRF
KToKICAgICAgICAgICAgIHN5bmNfbWVzc2FnZXMuYXBwZW5kKG1lc3NhZ2UpCiAgICAgICAgIGVs
c2U6CiAgICAgICAgICAgICBhc3luY19tZXNzYWdlcy5hcHBlbmQobWVzc2FnZSkKQEAgLTU4Niw3
ICs2MDcsNyBAQCBkZWYgZ2VuZXJhdGVfbWVzc2FnZV9oYW5kbGVyKGZpbGUpOgogICAgICAgICBy
ZXN1bHQuYXBwZW5kKCcgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7XG4nKQogICAgICAgICByZXN1
bHQuYXBwZW5kKCd9XG4nKQogCi0gICAgcmVzdWx0LmFwcGVuZCgnXG59IC8vIG5hbWVzcGFjZSBX
ZWJLaXRcbicpCisgICAgcmVzdWx0LmFwcGVuZCgnXG59IC8vIG5hbWVzcGFjZSBXZWJLaXRcblxu
JykKIAogICAgIGlmIHJlY2VpdmVyLmNvbmRpdGlvbjoKICAgICAgICAgcmVzdWx0LmFwcGVuZCgn
XG4jZW5kaWYgLy8gJXNcbicgJSByZWNlaXZlci5jb25kaXRpb24pCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L1NoYXJlZC9TYW5kYm94RXh0ZW5zaW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9TaGFyZWQvU2FuZGJveEV4dGVuc2lvbi5oCShyZXZpc2lvbiAyMzcyNTkpCisrKyBTb3VyY2Uv
V2ViS2l0L1NoYXJlZC9TYW5kYm94RXh0ZW5zaW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTc3LDE0
ICs3NywxNiBAQCBwdWJsaWM6CiAgICAgcHVibGljOgogICAgICAgICBIYW5kbGVBcnJheSgpOwog
ICAgICAgICBIYW5kbGVBcnJheShIYW5kbGVBcnJheSYmKSA9IGRlZmF1bHQ7CisgICAgICAgIEhh
bmRsZUFycmF5JiBvcGVyYXRvcj0oSGFuZGxlQXJyYXkmJikgPSBkZWZhdWx0OwogICAgICAgICB+
SGFuZGxlQXJyYXkoKTsKICAgICAgICAgdm9pZCBhbGxvY2F0ZShzaXplX3QpOwogICAgICAgICBI
YW5kbGUmIG9wZXJhdG9yW10oc2l6ZV90IGkpOworICAgICAgICBIYW5kbGUmIGF0KHNpemVfdCBp
KSB7IHJldHVybiBvcGVyYXRvcltdKGkpOyB9CiAgICAgICAgIGNvbnN0IEhhbmRsZSYgb3BlcmF0
b3JbXShzaXplX3QgaSkgY29uc3Q7CiAgICAgICAgIHNpemVfdCBzaXplKCkgY29uc3Q7CiAgICAg
ICAgIHZvaWQgZW5jb2RlKElQQzo6RW5jb2RlciYpIGNvbnN0OwotICAgICAgICBzdGF0aWMgYm9v
bCBkZWNvZGUoSVBDOjpEZWNvZGVyJiwgSGFuZGxlQXJyYXkmKTsKLSAgICAgICAKKyAgICAgICAg
c3RhdGljIHN0ZDo6b3B0aW9uYWw8SGFuZGxlQXJyYXk+IGRlY29kZShJUEM6OkRlY29kZXImKTsK
KwogICAgIHByaXZhdGU6CiAjaWYgRU5BQkxFKFNBTkRCT1hfRVhURU5TSU9OUykKICAgICAgICAg
VmVjdG9yPEhhbmRsZT4gbV9kYXRhOwpAQCAtMTI4LDcgKzEzMCw3IEBAIGlubGluZSBzaXplX3Qg
U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlQXIKIGlubGluZSBjb25zdCBTYW5kYm94RXh0ZW5zaW9u
OjpIYW5kbGUmIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5OjpvcGVyYXRvcltdKHNpemVf
dCkgY29uc3QgeyByZXR1cm4gbV9lbXB0eUhhbmRsZTsgfQogaW5saW5lIFNhbmRib3hFeHRlbnNp
b246OkhhbmRsZSYgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlQXJyYXk6Om9wZXJhdG9yW10oc2l6
ZV90KSB7IHJldHVybiBtX2VtcHR5SGFuZGxlOyB9CiBpbmxpbmUgdm9pZCBTYW5kYm94RXh0ZW5z
aW9uOjpIYW5kbGVBcnJheTo6ZW5jb2RlKElQQzo6RW5jb2RlciYpIGNvbnN0IHsgfQotaW5saW5l
IGJvb2wgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlQXJyYXk6OmRlY29kZShJUEM6OkRlY29kZXIm
LCBIYW5kbGVBcnJheSYpIHsgcmV0dXJuIHRydWU7IH0KK2lubGluZSBzdGQ6Om9wdGlvbmFsPEhh
bmRsZUFycmF5PiBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheTo6ZGVjb2RlKElQQzo6RGVj
b2RlciYpIHsgcmV0dXJuIHt7IH19OyB9CiBpbmxpbmUgUmVmUHRyPFNhbmRib3hFeHRlbnNpb24+
IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZShIYW5kbGUmJikgeyByZXR1cm4gbnVsbHB0cjsgfQog
aW5saW5lIGJvb2wgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKGNvbnN0IFN0cmluZyYs
IFR5cGUsIEhhbmRsZSYpIHsgcmV0dXJuIHRydWU7IH0KIGlubGluZSBib29sIFNhbmRib3hFeHRl
bnNpb246OmNyZWF0ZUhhbmRsZVdpdGhvdXRSZXNvbHZpbmdQYXRoKGNvbnN0IFN0cmluZyYsIFR5
cGUsIEhhbmRsZSYpIHsgcmV0dXJuIHRydWU7IH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVk
L1dlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvU2hhcmVkL1dlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwCShyZXZpc2lvbiAy
MzcyNTkpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0
ZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc0LDggKzE3NCwxMSBAQCBib29sIFdlYlByb2Nl
c3NDcmVhdGlvblBhcmFtZXRlcnM6OmRlY29kCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBw
YXJhbWV0ZXJzLmluamVjdGVkQnVuZGxlUGF0aEV4dGVuc2lvbkhhbmRsZSA9IFdURk1vdmUoKmlu
amVjdGVkQnVuZGxlUGF0aEV4dGVuc2lvbkhhbmRsZSk7CiAKLSAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKHBhcmFtZXRlcnMuYWRkaXRpb25hbFNhbmRib3hFeHRlbnNpb25IYW5kbGVzKSkKKyAgICBz
dGQ6Om9wdGlvbmFsPFNhbmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5PiBhZGRpdGlvbmFsU2Fu
ZGJveEV4dGVuc2lvbkhhbmRsZXM7CisgICAgZGVjb2RlciA+PiBhZGRpdGlvbmFsU2FuZGJveEV4
dGVuc2lvbkhhbmRsZXM7CisgICAgaWYgKCFhZGRpdGlvbmFsU2FuZGJveEV4dGVuc2lvbkhhbmRs
ZXMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBwYXJhbWV0ZXJzLmFkZGl0aW9uYWxTYW5k
Ym94RXh0ZW5zaW9uSGFuZGxlcyA9IFdURk1vdmUoKmFkZGl0aW9uYWxTYW5kYm94RXh0ZW5zaW9u
SGFuZGxlcyk7CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShwYXJhbWV0ZXJzLmluaXRpYWxpemF0
aW9uVXNlckRhdGEpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFkZWNvZGVyLmRl
Y29kZShwYXJhbWV0ZXJzLmFwcGxpY2F0aW9uQ2FjaGVEaXJlY3RvcnkpKQpJbmRleDogU291cmNl
L1dlYktpdC9TaGFyZWQvRGF0YWJhc2VzL0luZGV4ZWREQi9XZWJJREJSZXN1bHQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL0RhdGFiYXNlcy9JbmRleGVkREIvV2ViSURC
UmVzdWx0LmNwcAkocmV2aXNpb24gMjM3MjU5KQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvRGF0
YWJhc2VzL0luZGV4ZWREQi9XZWJJREJSZXN1bHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw4
ICs0NiwxMSBAQCBib29sIFdlYklEQlJlc3VsdDo6ZGVjb2RlKElQQzo6RGVjb2RlciYgCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICByZXN1bHQubV9yZXN1bHREYXRhID0gV1RGTW92ZSgqcmVz
dWx0RGF0YSk7CiAKLSAgICBpZiAoIVNhbmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5OjpkZWNv
ZGUoZGVjb2RlciwgcmVzdWx0Lm1faGFuZGxlcykpCisgICAgc3RkOjpvcHRpb25hbDxTYW5kYm94
RXh0ZW5zaW9uOjpIYW5kbGVBcnJheT4gaGFuZGxlczsKKyAgICBkZWNvZGVyID4+IGhhbmRsZXM7
CisgICAgaWYgKCFoYW5kbGVzKQogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmVzdWx0Lm1f
aGFuZGxlcyA9IFdURk1vdmUoKmhhbmRsZXMpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CkluZGV4
OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvU2FuZGJveEV4dGVuc2lvbk1hYy5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvU2FuZGJveEV4dGVuc2lvbk1hYy5tbQko
cmV2aXNpb24gMjM3MjU5KQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL1NhbmRib3hFeHRl
bnNpb25NYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTE5MCwyMCArMTkwLDIyIEBAIHZvaWQgU2Fu
ZGJveEV4dGVuc2lvbjo6SGFuZGxlQXJyYXk6OmVuY28KICAgICAgICAgZW5jb2RlciA8PCBoYW5k
bGU7CiB9CiAKLWJvb2wgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlQXJyYXk6OmRlY29kZShJUEM6
OkRlY29kZXImIGRlY29kZXIsIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5JiBoYW5kbGVz
KQorc3RkOjpvcHRpb25hbDxTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheT4gU2FuZGJveEV4
dGVuc2lvbjo6SGFuZGxlQXJyYXk6OmRlY29kZShJUEM6OkRlY29kZXImIGRlY29kZXIpCiB7Ci0g
ICAgdWludDY0X3Qgc2l6ZTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHNpemUpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgaGFuZGxlcy5hbGxvY2F0ZShzaXplKTsKLSAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+
IHNpemU7CisgICAgZGVjb2RlciA+PiBzaXplOworICAgIGlmICghc2l6ZSkKKyAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheSBoYW5k
bGVzOworICAgIGhhbmRsZXMuYWxsb2NhdGUoKnNpemUpOworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgKnNpemU7ICsraSkgewogICAgICAgICBzdGQ6Om9wdGlvbmFsPFNhbmRib3hFeHRlbnNp
b246OkhhbmRsZT4gaGFuZGxlOwogICAgICAgICBkZWNvZGVyID4+IGhhbmRsZTsKICAgICAgICAg
aWYgKCFoYW5kbGUpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OwogICAgICAgICBoYW5kbGVzW2ldID0gV1RGTW92ZSgqaGFuZGxlKTsK
ICAgICB9Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIFdURk1vdmUoaGFuZGxlcyk7CiB9
CiAKIFJlZlB0cjxTYW5kYm94RXh0ZW5zaW9uPiBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGUoSGFu
ZGxlJiYgaGFuZGxlKQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3
b3JrUHJvY2Vzc1Byb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCShyZXZpc2lvbiAyMzcyNTkpCisrKyBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02OTIsNyArNjkyLDcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5
OjpzZW5kUHJvY2Vzc0RpZAogfQogCiAjaWYgRU5BQkxFKFNBTkRCT1hfRVhURU5TSU9OUykKLXZv
aWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6Z2V0U2FuZGJveEV4dGVuc2lvbnNGb3JCbG9iRmlsZXMo
dWludDY0X3QgcmVxdWVzdElELCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGF0aHMpCit2b2lkIE5l
dHdvcmtQcm9jZXNzUHJveHk6OmdldFNhbmRib3hFeHRlbnNpb25zRm9yQmxvYkZpbGVzKGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBwYXRocywgTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzUHJveHk6Okdl
dFNhbmRib3hFeHRlbnNpb25zRm9yQmxvYkZpbGVzOjpBc3luY1JlcGx5JiYgcmVwbHkpCiB7CiAg
ICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlQXJyYXkgZXh0ZW5zaW9uczsKICAgICBleHRlbnNp
b25zLmFsbG9jYXRlKHBhdGhzLnNpemUoKSk7CkBAIC03MDAsOCArNzAwLDcgQEAgdm9pZCBOZXR3
b3JrUHJvY2Vzc1Byb3h5OjpnZXRTYW5kYm94RXh0ZQogICAgICAgICAvLyBSZWFkV3JpdGUgaXMg
cmVxdWlyZWQgZm9yIGNyZWF0aW5nIGhhcmQgbGlua3MsIHdoaWNoIGlzIHNvbWV0aGluZyB0aGF0
IG1pZ2h0IGJlIGRvbmUgd2l0aCB0aGVzZSBleHRlbnNpb25zLgogICAgICAgICBTYW5kYm94RXh0
ZW5zaW9uOjpjcmVhdGVIYW5kbGUocGF0aHNbaV0sIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJl
YWRXcml0ZSwgZXh0ZW5zaW9uc1tpXSk7CiAgICAgfQotICAgIAotICAgIHNlbmQoTWVzc2FnZXM6
Ok5ldHdvcmtQcm9jZXNzOjpEaWRHZXRTYW5kYm94RXh0ZW5zaW9uc0ZvckJsb2JGaWxlcyhyZXF1
ZXN0SUQsIGV4dGVuc2lvbnMpLCAwKTsKKyAgICByZXBseShXVEZNb3ZlKGV4dGVuc2lvbnMpKTsK
IH0KICNlbmRpZgogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdv
cmtQcm9jZXNzUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9O
ZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaAkocmV2aXNpb24gMjM3MjU5KQorKysgU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpZiBFTkFCTEUoTEVHQUNZX0NVU1RPTV9QUk9UT0NP
TF9NQU5BR0VSKQogI2luY2x1ZGUgIkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5Lmgi
CiAjZW5kaWYKKyNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc1Byb3h5TWVzc2FnZXMuaCIKICNpbmNs
dWRlICJQcm9jZXNzTGF1bmNoZXIuaCIKICNpbmNsdWRlICJQcm9jZXNzVGhyb3R0bGVyLmgiCiAj
aW5jbHVkZSAiUHJvY2Vzc1Rocm90dGxlckNsaWVudC5oIgpAQCAtMTU2LDcgKzE1Nyw3IEBAIHBy
aXZhdGU6CiAjZW5kaWYKIAogI2lmIEVOQUJMRShTQU5EQk9YX0VYVEVOU0lPTlMpCi0gICAgdm9p
ZCBnZXRTYW5kYm94RXh0ZW5zaW9uc0ZvckJsb2JGaWxlcyh1aW50NjRfdCByZXF1ZXN0SUQsIGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBwYXRocyk7CisgICAgdm9pZCBnZXRTYW5kYm94RXh0ZW5zaW9u
c0ZvckJsb2JGaWxlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGF0aHMsIE1lc3NhZ2VzOjpOZXR3
b3JrUHJvY2Vzc1Byb3h5OjpHZXRTYW5kYm94RXh0ZW5zaW9uc0ZvckJsb2JGaWxlczo6QXN5bmNS
ZXBseSYmKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQpJbmRleDogU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Lm1lc3NhZ2Vz
LmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29y
a1Byb2Nlc3NQcm94eS5tZXNzYWdlcy5pbgkocmV2aXNpb24gMjM3MjU5KQorKysgU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Lm1lc3NhZ2VzLmluCSh3
b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIG1lc3NhZ2VzIC0+IE5ldHdvcmtQcm9jZXNz
UHJveHkgTGVnYWN5UmUKICAgICBSZXRyaWV2ZUNhY2hlU3RvcmFnZVBhcmFtZXRlcnMoUEFMOjpT
ZXNzaW9uSUQgc2Vzc2lvbklEKQogCiAjaWYgRU5BQkxFKFNBTkRCT1hfRVhURU5TSU9OUykKLSAg
ICBHZXRTYW5kYm94RXh0ZW5zaW9uc0ZvckJsb2JGaWxlcyh1aW50NjRfdCByZXF1ZXN0SUQsIFZl
Y3RvcjxTdHJpbmc+IHBhdGhzKQorICAgIEdldFNhbmRib3hFeHRlbnNpb25zRm9yQmxvYkZpbGVz
KFZlY3RvcjxTdHJpbmc+IHBhdGhzKSAtPiAoV2ViS2l0OjpTYW5kYm94RXh0ZW5zaW9uOjpIYW5k
bGVBcnJheSBleHRlbnNpb25zKSBBc3luYwogI2VuZGlmCiAKICNpZiBFTkFCTEUoU0VSVklDRV9X
T1JLRVIpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTWVkaWFTdHJlYW0vTWVkaWFE
ZXZpY2VTYW5kYm94RXh0ZW5zaW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL01lZGlhU3RyZWFtL01lZGlhRGV2aWNlU2FuZGJveEV4dGVuc2lvbnMuY3BwCShy
ZXZpc2lvbiAyMzcyNTkpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTWVkaWFTdHJlYW0v
TWVkaWFEZXZpY2VTYW5kYm94RXh0ZW5zaW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDgg
KzUwLDExIEBAIGJvb2wgTWVkaWFEZXZpY2VTYW5kYm94RXh0ZW5zaW9uczo6ZGVjb2QKICAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5tX2lkcykpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIGlmICghU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlQXJyYXk6OmRlY29kZShkZWNvZGVy
LCByZXN1bHQubV9oYW5kbGVzKSkKKyAgICBzdGQ6Om9wdGlvbmFsPFNhbmRib3hFeHRlbnNpb246
OkhhbmRsZUFycmF5PiBoYW5kbGVzOworICAgIGRlY29kZXIgPj4gaGFuZGxlczsKKyAgICBpZiAo
IWhhbmRsZXMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXN1bHQubV9oYW5kbGVzID0g
V1RGTW92ZSgqaGFuZGxlcyk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>352774</attachid>
            <date>2018-10-19 00:10:51 -0700</date>
            <delta_ts>2018-10-19 07:44:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-190746-20181019001050.patch</filename>
            <type>text/plain</type>
            <size>30545</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMzcyODIpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYzIEBACisyMDE4LTEwLTE4ICBBbGV4IENocmlz
dGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgSW50cm9kdWNlIENv
bXBsZXRpb25IYW5kbGVyLWJhc2VkIEFzeW5jIElQQyBtZXNzYWdlcyB3aXRoIHJlcGxpZXMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MDc0NgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJlZm9yZSB0aGlz
IHBhdGNoLCB0byBtYWtlIGFuIGFzeW5jaHJvbm91cyBJUEMgbWVzc2FnZSB3aXRoIGEgcmVwbHkg
eW91IGhhZCB0byBmaW5kIHR3byBvYmplY3RzIHRoYXQKKyAgICAgICAgY2FuIHRhbGsgdG8gZWFj
aCBvdGhlciwgbWFrZSB0d28gbmV3IG1lc3NhZ2UgdHlwZXMsIHNlbmQgYSBnZW5lcmF0ZWQgaWRl
bnRpZmllciwga2VlcCB0cmFjayBvZiB0aGF0CisgICAgICAgIGlkZW50aWZpZXIsIG1ha2UgYSBI
YXNoTWFwIHNvbWV3aGVyZSB0byBzdG9yZSB0aGUgb2JqZWN0IHdhaXRpbmcgZm9yIHRoZSByZXNw
b25zZSwgYW5kIGhvb2sgaXQgYWxsIHVwLgorICAgICAgICBXaGF0IGEgbWVzcy4gIE5vIHdvbmRl
ciBwZW9wbGUgdGFrZSBzaG9ydGN1dHMgYW5kIG1ha2Ugc3RyYW5nZSBkZXNpZ24gZGVjaXNpb25z
LgorCisgICAgICAgIE5vdywgeW91IGNhbiBqdXN0IHVzZSBhIENvbXBsZXRpb25IYW5kbGVyIGFu
ZCBtYXJrIHRoZSByZXBseSBhcyBBc3luYyBpbiAqLm1lc3NhZ2VzLmluLgorICAgICAgICBJJ3Zl
IGFkb3B0ZWQgdGhpcyB3aXRoIGEgbWVzc2FnZSB3aG9zZSBiZWhhdmlvciBpcyBjb3ZlcmVkIGJ5
IHRoZSBzdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vYmxvYi1jdXJzb3IuaHRtbAorICAgICAgICBs
YXlvdXQgdGVzdCBhbmQgbWFueSBvdGhlcnMuICBJIGludGVudCB0byByZWZpbmUgYW5kIGZ1cnRo
ZXIgYWRvcHQgdGhpcyBpbmNyZW1lbnRhbGx5LgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Byb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6Z2V0
U2FuZGJveEV4dGVuc2lvbnNGb3JCbG9iRmlsZXMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UHJvY2Vzczo6ZGlkR2V0U2FuZGJveEV4dGVuc2lvbnNGb3JCbG9iRmlsZXMpOiBEZWxldGVkLgor
ICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmg6CisgICAgICAgICogTmV0
d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVzc2FnZXMuaW46CisgICAgICAgIFRoaXMgaXMg
cmVwcmVzZW50YXRpdmUgb2YgaG93IGNvZGUgd2lsbCBiZSBzaW1wbGlmaWVkIHdpdGggZ3JlYXRl
ciBhZG9wdGlvbi4gCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9h
ZFBhcmFtZXRlcnMuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkUGFy
YW1ldGVyczo6ZGVjb2RlKToKKyAgICAgICAgTW9kZXJuaXplIEhhbmRsZUFycmF5IGRlY29kaW5n
LgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9Db25uZWN0aW9uLmNwcDoKKyAgICAgICAgKElQQzo6
Q29ubmVjdGlvbjo6ZGlzcGF0Y2hNZXNzYWdlKToKKyAgICAgICAgKElQQzo6bmV4dEFzeW5jUmVw
bHlIYW5kbGVySUQpOgorICAgICAgICAoSVBDOjphc3luY1JlcGx5SGFuZGxlck1hcCk6CisgICAg
ICAgIEhhbmRsZSBhc3luYyByZXBsaWVzIHdoZW4gbG9va2luZyBhdCBpbmNvbWluZyBtZXNzYWdl
cyBmcm9tIHRoZSBzZW5kaW5nIHByb2Nlc3MuCisgICAgICAgICogUGxhdGZvcm0vSVBDL0Nvbm5l
Y3Rpb24uaDoKKyAgICAgICAgKElQQzo6Q29ubmVjdGlvbjo6c2VuZFdpdGhBc3luY1JlcGx5KToK
KyAgICAgICAgU2VuZCBhIG1lc3NhZ2Ugd2l0aCBhbiBhc3luYyByZXBseSBhbmQgcHJlcGFyZSB0
aGUgcmVwbHkgcmVjZWl2ZXIuCisgICAgICAgICogUGxhdGZvcm0vSVBDL0VuY29kZXIuaDoKKyAg
ICAgICAgTWFrZSB0aGUgdWludDY0X3QgZW5jb2RlciBwdWJsaWMgc28gd2UgY2FuIHVzZSBpdCB3
aGVuIGVuY29kaW5nIHRoZSBsaXN0ZW5lcklELgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9IYW5k
bGVNZXNzYWdlLmg6CisgICAgICAgIChJUEM6OmhhbmRsZU1lc3NhZ2VBc3luYyk6CisgICAgICAg
IEhhbmRsZSBhbiBhc3luY2hyb25vdXMgbWVzc2FnZSB3aXRoIGEgcmVwbHkgZnJvbSB0aGUgcmVj
ZWl2aW5nIHByb2Nlc3MuCisgICAgICAgIFRoaXMgaXMgc2ltaWxhciB0byBob3cgRGVsYXllZFJl
cGx5IG1lc3NhZ2VzIGFyZSBoYW5kbGVkLCBidXQgdGhlIGxpc3RlbmVySUQgaXMgYXV0b21hdGlj
YWxseSBjYXB0dXJlZCBhbmQgc2VudCBiYWNrLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0L21l
c3NhZ2VzLnB5OgorICAgICAgICBHZW5lcmF0ZSBjb2RlIGZvciBhc3luYyBtZXNzYWdlIHJlcGxp
ZXMuCisgICAgICAgICogU2hhcmVkL0RhdGFiYXNlcy9JbmRleGVkREIvV2ViSURCUmVzdWx0LmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViSURCUmVzdWx0OjpkZWNvZGUpOgorICAgICAgICAqIFNo
YXJlZC9TYW5kYm94RXh0ZW5zaW9uLmg6CisgICAgICAgIChXZWJLaXQ6OlNhbmRib3hFeHRlbnNp
b246OkhhbmRsZUFycmF5OjphdCk6CisgICAgICAgIChXZWJLaXQ6OlNhbmRib3hFeHRlbnNpb246
OkhhbmRsZUFycmF5OjpkZWNvZGUpOgorICAgICAgICAqIFNoYXJlZC9XZWJQcm9jZXNzQ3JlYXRp
b25QYXJhbWV0ZXJzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc0NyZWF0aW9uUGFy
YW1ldGVyczo6ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQvbWFjL1NhbmRib3hFeHRlbnNpb25N
YWMubW06CisgICAgICAgIChXZWJLaXQ6OlNhbmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5Ojpk
ZWNvZGUpOgorICAgICAgICBNb2Rlcm5pemUgdGhlIGRlY29kaW5nIG9mIEhhbmRsZUFycmF5IHRv
IHdvcmsgd2l0aCBnZW5lcmF0ZWQgZGVjb2RpbmcuCisgICAgICAgICogVUlQcm9jZXNzL05ldHdv
cmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9j
ZXNzUHJveHk6OmdldFNhbmRib3hFeHRlbnNpb25zRm9yQmxvYkZpbGVzKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Lmg6CisgICAgICAgICogVUlQcm9j
ZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5tZXNzYWdlcy5pbjoKKyAgICAgICAgVGhp
cyBpcyBhbHNvIHJlcHJlc2VudGF0aXZlIG9mIGhvdyBjb2RlIHdpbGwgYmUgc2ltcGxpZmllZCB3
aXRoIGdyZWF0ZXIgYWRvcHRpb24uCisgICAgICAgICogV2ViUHJvY2Vzcy9NZWRpYVN0cmVhbS9N
ZWRpYURldmljZVNhbmRib3hFeHRlbnNpb25zLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TWVkaWFE
ZXZpY2VTYW5kYm94RXh0ZW5zaW9uczo6ZGVjb2RlKToKKyAgICAgICAgTW9kZXJuaXplIEhhbmRs
ZUFycmF5IGRlY29kaW5nLgorCiAyMDE4LTEwLTE4ICBFcmljIENhcmxzb24gIDxlcmljLmNhcmxz
b25AYXBwbGUuY29tPgogCiAgICAgICAgIFtNZWRpYVN0cmVhbV0gQWxsb3cgcG9ydHMgdG8gb3B0
aW9uYWxseSBkbyBzY3JlZW4gY2FwdHVyZSBpbiB0aGUgVUkgcHJvY2VzcwpJbmRleDogU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAJKHJldmlzaW9u
IDIzNzI1OSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3Mu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTkwLDIxICsxMTkwLDExIEBAIHZvaWQgTmV0d29ya1By
b2Nlc3M6OmFkZEluZGV4ZWREYXRhYmFzZVMKICNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRB
QkFTRSkKIAogI2lmIEVOQUJMRShTQU5EQk9YX0VYVEVOU0lPTlMpCi12b2lkIE5ldHdvcmtQcm9j
ZXNzOjpnZXRTYW5kYm94RXh0ZW5zaW9uc0ZvckJsb2JGaWxlcyhjb25zdCBWZWN0b3I8U3RyaW5n
PiYgZmlsZW5hbWVzLCBGdW5jdGlvbjx2b2lkKFNhbmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5
JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBOZXR3b3JrUHJvY2Vzczo6Z2V0U2FuZGJv
eEV4dGVuc2lvbnNGb3JCbG9iRmlsZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIGZpbGVuYW1lcywg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheSYmKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBzdGF0aWMgdWludDY0X3QgbGFzdFJlcXVlc3RJ
RDsKLSAgICAKLSAgICB1aW50NjRfdCByZXF1ZXN0SUQgPSArK2xhc3RSZXF1ZXN0SUQ7Ci0gICAg
bV9zYW5kYm94RXh0ZW5zaW9uRm9yQmxvYnNDb21wbGV0aW9uSGFuZGxlcnNTdG9yYWdlRm9yTmV0
d29ya1Byb2Nlc3Muc2V0KHJlcXVlc3RJRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwot
ICAgIHBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzUHJveHk6OkdldFNhbmRib3hFeHRlbnNpb25zRm9yQmxvYkZpbGVzKHJlcXVlc3RJRCwgZmls
ZW5hbWVzKSwgMCk7CisgICAgcGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFdpdGhBc3lu
Y1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpHZXRTYW5kYm94RXh0ZW5zaW9u
c0ZvckJsb2JGaWxlcyhmaWxlbmFtZXMpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9
CiAKLXZvaWQgTmV0d29ya1Byb2Nlc3M6OmRpZEdldFNhbmRib3hFeHRlbnNpb25zRm9yQmxvYkZp
bGVzKHVpbnQ2NF90IHJlcXVlc3RJRCwgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlQXJyYXkmJiBo
YW5kbGVzKQotewotICAgIGlmIChhdXRvIGhhbmRsZXIgPSBtX3NhbmRib3hFeHRlbnNpb25Gb3JC
bG9ic0NvbXBsZXRpb25IYW5kbGVyc1N0b3JhZ2VGb3JOZXR3b3JrUHJvY2Vzcy50YWtlKHJlcXVl
c3RJRCkpCi0gICAgICAgIGhhbmRsZXIoV1RGTW92ZShoYW5kbGVzKSk7Ci19Ci0gICAgCiB2b2lk
IE5ldHdvcmtQcm9jZXNzOjp1cGRhdGVUZW1wb3JhcnlGaWxlU2FuZGJveEV4dGVuc2lvbnMoY29u
c3QgVmVjdG9yPFN0cmluZz4mIHBhdGhzLCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheSYg
aGFuZGxlcykKIHsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGhhbmRsZXMuc2l6ZSgpOyAr
K2kpIHsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3Mu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9j
ZXNzLmgJKHJldmlzaW9uIDIzNzI2NCkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Byb2Nlc3MuaAkod29ya2luZyBjb3B5KQpAQCAtMTkzLDcgKzE5Myw3IEBAIHB1Ymxp
YzoKICNlbmRpZgogCiAjaWYgRU5BQkxFKFNBTkRCT1hfRVhURU5TSU9OUykKLSAgICB2b2lkIGdl
dFNhbmRib3hFeHRlbnNpb25zRm9yQmxvYkZpbGVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxl
bmFtZXMsIFdURjo6RnVuY3Rpb248dm9pZChTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheSYm
KT4mJiBjb21wbGV0aW9uSGFuZGxlcik7CisgICAgdm9pZCBnZXRTYW5kYm94RXh0ZW5zaW9uc0Zv
ckJsb2JGaWxlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgZmlsZW5hbWVzLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKFNhbmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5JiYpPiYmKTsKICAgICB2b2lk
IHVwZGF0ZVRlbXBvcmFyeUZpbGVTYW5kYm94RXh0ZW5zaW9ucyhjb25zdCBWZWN0b3I8U3RyaW5n
PiYgcGF0aHMsIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5Jik7CiAjZW5kaWYKIApAQCAt
MzE0LDEwICszMTQsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVnaXN0ZXJVUkxTY2hlbWVBc0NP
UlNFbmFibGVkKGNvbnN0IFN0cmluZyYpIGNvbnN0OwogICAgIHZvaWQgcmVnaXN0ZXJVUkxTY2hl
bWVBc0NhbkRpc3BsYXlPbmx5SWZDYW5SZXF1ZXN0KGNvbnN0IFN0cmluZyYpIGNvbnN0OwogCi0j
aWYgRU5BQkxFKFNBTkRCT1hfRVhURU5TSU9OUykKLSAgICB2b2lkIGRpZEdldFNhbmRib3hFeHRl
bnNpb25zRm9yQmxvYkZpbGVzKHVpbnQ2NF90IHJlcXVlc3RJRCwgU2FuZGJveEV4dGVuc2lvbjo6
SGFuZGxlQXJyYXkmJik7Ci0jZW5kaWYKLQogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQog
ICAgIHZvaWQgYWRkSW5kZXhlZERhdGFiYXNlU2Vzc2lvbihQQUw6OlNlc3Npb25JRCwgU3RyaW5n
JiwgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJik7CiAgICAgSGFzaFNldDxXZWJDb3JlOjpTZWN1
cml0eU9yaWdpbkRhdGE+IGluZGV4ZWREYXRhYmFzZU9yaWdpbnMoY29uc3QgU3RyaW5nJiBwYXRo
KTsKQEAgLTM5OCw3ICszOTQsNiBAQCBwcml2YXRlOgogI2VuZGlmCiAKICAgICBIYXNoTWFwPFN0
cmluZywgUmVmUHRyPFNhbmRib3hFeHRlbnNpb24+PiBtX2Jsb2JUZW1wb3JhcnlGaWxlU2FuZGJv
eEV4dGVuc2lvbnM7Ci0gICAgSGFzaE1hcDx1aW50NjRfdCwgV1RGOjpGdW5jdGlvbjx2b2lkKFNh
bmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5JiYpPj4gbV9zYW5kYm94RXh0ZW5zaW9uRm9yQmxv
YnNDb21wbGV0aW9uSGFuZGxlcnNTdG9yYWdlRm9yTmV0d29ya1Byb2Nlc3M7CiAgICAgCiAgICAg
RGVxdWU8Q3Jvc3NUaHJlYWRUYXNrPiBtX3N0b3JhZ2VUYXNrczsKICAgICBMb2NrIG1fc3RvcmFn
ZVRhc2tNdXRleDsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1By
b2Nlc3MubWVzc2FnZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbgkocmV2aXNpb24gMjM3MjY0KQorKysgU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbgkod29y
a2luZyBjb3B5KQpAQCAtNzMsMTAgKzczLDYgQEAgbWVzc2FnZXMgLT4gTmV0d29ya1Byb2Nlc3Mg
TGVnYWN5UmVjZWl2ZQogICAgIENhbmNlbFByZXBhcmVUb1N1c3BlbmQoKQogICAgIFByb2Nlc3NE
aWRSZXN1bWUoKQogCi0jaWYgRU5BQkxFKFNBTkRCT1hfRVhURU5TSU9OUykKLSAgICBEaWRHZXRT
YW5kYm94RXh0ZW5zaW9uc0ZvckJsb2JGaWxlcyh1aW50NjRfdCByZXF1ZXN0SUQsIFdlYktpdDo6
U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlQXJyYXkgZXh0ZW5zaW9ucykKLSNlbmRpZgotCiAgICAg
V3JpdGVCbG9iVG9GaWxlUGF0aChXZWJDb3JlOjpVUkwgYmxvYlVSTCwgU3RyaW5nIHBhdGgsIFdl
YktpdDo6U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIGhhbmRsZSwgdWludDY0X3QgY2FsbGJhY2tJ
RCkKIAogICAgIFByZWNvbm5lY3RUbyhXZWJDb3JlOjpVUkwgdXJsLCBlbnVtOmJvb2wgV2ViQ29y
ZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kpOwpJbmRl
eDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1l
dGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycy5jcHAJKHJldmlzaW9uIDIzNzI1OSkKKysrIFNvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzMsMTEgKzEzMywxMiBAQCBib29sIE5ldHdvcmtSZXNvdXJj
ZUxvYWRQYXJhbWV0ZXJzOjpkZWNvCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IHJlc3VsdC5yZXF1ZXN0LnNldEhUVFBCb2R5KFdURk1vdmUoZm9ybURhdGEpKTsKIAotICAgICAg
ICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheSByZXF1ZXN0Qm9keVNhbmRib3hFeHRlbnNp
b25IYW5kbGVzOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlcXVlc3RCb2R5U2FuZGJv
eEV4dGVuc2lvbkhhbmRsZXMpKQorICAgICAgICBzdGQ6Om9wdGlvbmFsPFNhbmRib3hFeHRlbnNp
b246OkhhbmRsZUFycmF5PiByZXF1ZXN0Qm9keVNhbmRib3hFeHRlbnNpb25IYW5kbGVzOworICAg
ICAgICBkZWNvZGVyID4+IHJlcXVlc3RCb2R5U2FuZGJveEV4dGVuc2lvbkhhbmRsZXM7CisgICAg
ICAgIGlmICghcmVxdWVzdEJvZHlTYW5kYm94RXh0ZW5zaW9uSGFuZGxlcykKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZXF1ZXN0Qm9k
eVNhbmRib3hFeHRlbnNpb25IYW5kbGVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAo
YXV0byBleHRlbnNpb24gPSBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGUoV1RGTW92ZShyZXF1ZXN0
Qm9keVNhbmRib3hFeHRlbnNpb25IYW5kbGVzW2ldKSkpCisgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgcmVxdWVzdEJvZHlTYW5kYm94RXh0ZW5zaW9uSGFuZGxlcy0+c2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgICAgIGlmIChhdXRvIGV4dGVuc2lvbiA9IFNhbmRib3hFeHRlbnNpb246OmNy
ZWF0ZShXVEZNb3ZlKHJlcXVlc3RCb2R5U2FuZGJveEV4dGVuc2lvbkhhbmRsZXMtPmF0KGkpKSkp
CiAgICAgICAgICAgICAgICAgcmVzdWx0LnJlcXVlc3RCb2R5U2FuZGJveEV4dGVuc2lvbnMuYXBw
ZW5kKFdURk1vdmUoZXh0ZW5zaW9uKSk7CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L1BsYXRmb3JtL0lQQy9Db25uZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L1BsYXRmb3JtL0lQQy9Db25uZWN0aW9uLmNwcAkocmV2aXNpb24gMjM3MjU5KQorKysg
U291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQ29ubmVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTk0OCw2ICs5NDgsMjEgQEAgdm9pZCBDb25uZWN0aW9uOjplbnF1ZXVlSW5jb21pbmdNZXNz
YWdlKAogdm9pZCBDb25uZWN0aW9uOjpkaXNwYXRjaE1lc3NhZ2UoRGVjb2RlciYgZGVjb2RlcikK
IHsKICAgICBSRUxFQVNFX0FTU0VSVChpc1ZhbGlkKCkpOworICAgIGlmIChkZWNvZGVyLm1lc3Nh
Z2VSZWNlaXZlck5hbWUoKSA9PSAiQXN5bmNSZXBseSIpIHsKKyAgICAgICAgc3RkOjpvcHRpb25h
bDx1aW50NjRfdD4gbGlzdGVuZXJJRDsKKyAgICAgICAgZGVjb2RlciA+PiBsaXN0ZW5lcklEOwor
ICAgICAgICBpZiAoIWxpc3RlbmVySUQpIHsKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGF1dG8gaGFuZGxl
ciA9IGFzeW5jUmVwbHlIYW5kbGVyTWFwKCkudGFrZSgqbGlzdGVuZXJJRCk7CisgICAgICAgIGlm
ICghaGFuZGxlcikgeworICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaGFuZGxlcihkZWNvZGVyKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KICAgICBtX2NsaWVudC5kaWRSZWNlaXZlTWVzc2FnZSgqdGhpcywg
ZGVjb2Rlcik7CiB9CiAKQEAgLTEwOTMsNiArMTEwOCwxOCBAQCB2b2lkIENvbm5lY3Rpb246OmRp
c3BhdGNoSW5jb21pbmdNZXNzYWdlCiAgICAgfQogfQogCit1aW50NjRfdCBuZXh0QXN5bmNSZXBs
eUhhbmRsZXJJRCgpCit7CisgICAgc3RhdGljIHVpbnQ2NF90IGlkZW50aWZpZXIgeyAwIH07Cisg
ICAgcmV0dXJuICsraWRlbnRpZmllcjsKK30KKworSGFzaE1hcDx1aW50NjRfdCwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChEZWNvZGVyJik+PiYgYXN5bmNSZXBseUhhbmRsZXJNYXAoKQoreworICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoTWFwPHVpbnQ2NF90LCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKERlY29kZXImKT4+PiBtYXA7CisgICAgcmV0dXJuIG1hcC5nZXQoKTsKK30KKwogdm9p
ZCBDb25uZWN0aW9uOjp3YWtlVXBSdW5Mb29wKCkKIHsKICAgICBSdW5Mb29wOjptYWluKCkud2Fr
ZVVwKCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Db25uZWN0aW9uLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQ29ubmVjdGlvbi5oCShyZXZp
c2lvbiAyMzcyNTkpCisrKyBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Db25uZWN0aW9uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE3Nyw2ICsxNzcsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHBv
c3RDb25uZWN0aW9uRGlkQ2xvc2VPbkNvbm5lY3Rpb25Xb3JrUXVldWUoKTsKIAorICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIEFyZ3M+IHZvaWQgc2VuZFdpdGhBc3luY1JlcGx5
KFQmJiBtZXNzYWdlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEFyZ3MuLi4pPiYmIGFyZ3MsIHVp
bnQ2NF90IGRlc3RpbmF0aW9uSUQgPSAwKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBib29s
IHNlbmQoVCYmIG1lc3NhZ2UsIHVpbnQ2NF90IGRlc3RpbmF0aW9uSUQsIE9wdGlvblNldDxTZW5k
T3B0aW9uPiBzZW5kT3B0aW9ucyA9IHsgfSk7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9p
ZCBzZW5kV2l0aFJlcGx5KFQmJiBtZXNzYWdlLCB1aW50NjRfdCBkZXN0aW5hdGlvbklELCBGdW5j
dGlvbkRpc3BhdGNoZXImIHJlcGx5RGlzcGF0Y2hlciwgRnVuY3Rpb248dm9pZChzdGQ6Om9wdGlv
bmFsPHR5cGVuYW1lIENvZGluZ1R5cGU8dHlwZW5hbWUgVDo6UmVwbHk+OjpUeXBlPik+JiYgcmVw
bHlIYW5kbGVyKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBib29sIHNlbmRTeW5jKFQmJiBt
ZXNzYWdlLCB0eXBlbmFtZSBUOjpSZXBseSYmIHJlcGx5LCB1aW50NjRfdCBkZXN0aW5hdGlvbklE
LCBTZWNvbmRzIHRpbWVvdXQgPSBTZWNvbmRzOjppbmZpbml0eSgpLCBPcHRpb25TZXQ8U2VuZFN5
bmNPcHRpb24+IHNlbmRTeW5jT3B0aW9ucyA9IHsgfSk7CkBAIC00MTAsNiArNDExLDI0IEBAIGJv
b2wgQ29ubmVjdGlvbjo6c2VuZChUJiYgbWVzc2FnZSwgdWludDYKICAgICByZXR1cm4gc2VuZE1l
c3NhZ2UoV1RGTW92ZShlbmNvZGVyKSwgc2VuZE9wdGlvbnMpOwogfQogCitIYXNoTWFwPHVpbnQ2
NF90LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKERlY29kZXImKT4+JiBhc3luY1JlcGx5SGFuZGxl
ck1hcCgpOwordWludDY0X3QgbmV4dEFzeW5jUmVwbHlIYW5kbGVySUQoKTsKKwordGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gQXJncz4KK3ZvaWQgQ29ubmVjdGlvbjo6c2VuZFdpdGhB
c3luY1JlcGx5KFQmJiBtZXNzYWdlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEFyZ3MuLi4pPiYm
IGNvbXBsZXRpb25IYW5kbGVyLCB1aW50NjRfdCBkZXN0aW5hdGlvbklEKQoreworICAgIENPTVBJ
TEVfQVNTRVJUKCFUOjppc1N5bmMsIEFzeW5jTWVzc2FnZUV4cGVjdGVkKTsKKworICAgIGF1dG8g
ZW5jb2RlciA9IHN0ZDo6bWFrZV91bmlxdWU8RW5jb2Rlcj4oVDo6cmVjZWl2ZXJOYW1lKCksIFQ6
Om5hbWUoKSwgZGVzdGluYXRpb25JRCk7CisgICAgdWludDY0X3QgbGlzdGVuZXJJRCA9IG5leHRB
c3luY1JlcGx5SGFuZGxlcklEKCk7CisgICAgZW5jb2Rlci0+ZW5jb2RlKGxpc3RlbmVySUQpOwor
ICAgIGVuY29kZXItPmVuY29kZShtZXNzYWdlLmFyZ3VtZW50cygpKTsKKyAgICBzZW5kTWVzc2Fn
ZShXVEZNb3ZlKGVuY29kZXIpLCB7IH0pOworICAgIGFzeW5jUmVwbHlIYW5kbGVyTWFwKCkuYWRk
KGxpc3RlbmVySUQsIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpXSAoRGVjb2RlciYgZGVjb2RlcikgbXV0YWJsZSB7CisgICAgICAgIFQ6OmNhbGxSZXBseShk
ZWNvZGVyLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgfSk7Cit9CisKIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+CiB2b2lkIENvbm5lY3Rpb246OnNlbmRXaXRoUmVwbHkoVCYmIG1lc3Nh
Z2UsIHVpbnQ2NF90IGRlc3RpbmF0aW9uSUQsIEZ1bmN0aW9uRGlzcGF0Y2hlciYgcmVwbHlEaXNw
YXRjaGVyLCBGdW5jdGlvbjx2b2lkKHN0ZDo6b3B0aW9uYWw8dHlwZW5hbWUgQ29kaW5nVHlwZTx0
eXBlbmFtZSBUOjpSZXBseT46OlR5cGU+KT4mJiByZXBseUhhbmRsZXIpCiB7CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9FbmNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9QbGF0Zm9ybS9JUEMvRW5jb2Rlci5oCShyZXZpc2lvbiAyMzcyNTkpCisrKyBTb3VyY2Uv
V2ViS2l0L1BsYXRmb3JtL0lQQy9FbmNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTk0LDYgKzk0
LDggQEAgcHVibGljOgogCiAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNJUENFbmNvZGVyID0gdHJ1
ZTsKIAorICAgIHZvaWQgZW5jb2RlKHVpbnQ2NF90KTsKKwogcHJpdmF0ZToKICAgICB1aW50OF90
KiBncm93KHVuc2lnbmVkIGFsaWdubWVudCwgc2l6ZV90KTsKIApAQCAtMTAxLDcgKzEwMyw2IEBA
IHByaXZhdGU6CiAgICAgdm9pZCBlbmNvZGUodWludDhfdCk7CiAgICAgdm9pZCBlbmNvZGUodWlu
dDE2X3QpOwogICAgIHZvaWQgZW5jb2RlKHVpbnQzMl90KTsKLSAgICB2b2lkIGVuY29kZSh1aW50
NjRfdCk7CiAgICAgdm9pZCBlbmNvZGUoaW50MTZfdCk7CiAgICAgdm9pZCBlbmNvZGUoaW50MzJf
dCk7CiAgICAgdm9pZCBlbmNvZGUoaW50NjRfdCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1BsYXRm
b3JtL0lQQy9IYW5kbGVNZXNzYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9QbGF0
Zm9ybS9JUEMvSGFuZGxlTWVzc2FnZS5oCShyZXZpc2lvbiAyMzcyNTkpCisrKyBTb3VyY2UvV2Vi
S2l0L1BsYXRmb3JtL0lQQy9IYW5kbGVNZXNzYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4Nyw0
ICsxODcsMjggQEAgdm9pZCBoYW5kbGVNZXNzYWdlRGVsYXllZChDb25uZWN0aW9uJiBjbwogICAg
IGNhbGxNZW1iZXJGdW5jdGlvbihXVEZNb3ZlKGFyZ3VtZW50cyksIFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpLCBvYmplY3QsIGZ1bmN0aW9uKTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgQywgdHlwZW5hbWUgTUY+Cit2b2lkIGhhbmRsZU1lc3NhZ2VBc3luYyhDb25uZWN0
aW9uJiBjb25uZWN0aW9uLCBEZWNvZGVyJiBkZWNvZGVyLCBDKiBvYmplY3QsIE1GIGZ1bmN0aW9u
KQoreworICAgIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IGxpc3RlbmVySUQ7CisgICAgZGVjb2Rl
ciA+PiBsaXN0ZW5lcklEOworICAgIGlmICghbGlzdGVuZXJJRCkgeworICAgICAgICBBU1NFUlQo
ZGVjb2Rlci5pc0ludmFsaWQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAg
dHlwZW5hbWUgQ29kaW5nVHlwZTx0eXBlbmFtZSBUOjpBcmd1bWVudHM+OjpUeXBlIGFyZ3VtZW50
czsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGFyZ3VtZW50cykpIHsKKyAgICAgICAgQVNTRVJU
KGRlY29kZXIuaXNJbnZhbGlkKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgdHlw
ZW5hbWUgVDo6QXN5bmNSZXBseSBjb21wbGV0aW9uSGFuZGxlciA9IFtsaXN0ZW5lcklEID0gKmxp
c3RlbmVySUQsIGNvbm5lY3Rpb24gPSBtYWtlUmVmKGNvbm5lY3Rpb24pXSAoYXV0byYmLi4uIGFy
Z3MpIG11dGFibGUgeworICAgICAgICBhdXRvIGVuY29kZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPEVu
Y29kZXI+KCJBc3luY1JlcGx5IiwgVDo6YXN5bmNNZXNzYWdlUmVwbHlOYW1lKCksIDApOworICAg
ICAgICAqZW5jb2RlciA8PCBsaXN0ZW5lcklEOworICAgICAgICBUOjpzZW5kKFdURk1vdmUoZW5j
b2RlciksIFdURk1vdmUoY29ubmVjdGlvbiksIGFyZ3MuLi4pOworICAgIH07CisgICAgY2FsbE1l
bWJlckZ1bmN0aW9uKFdURk1vdmUoYXJndW1lbnRzKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
ciksIG9iamVjdCwgZnVuY3Rpb24pOworfQorCiB9IC8vIG5hbWVzcGFjZSBJUEMKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weQkocmV2aXNpb24gMjM3MjY0KQor
KysgU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weQkod29ya2luZyBjb3B5
KQpAQCAtMjksNiArMjksNyBAQCBmcm9tIHdlYmtpdCBpbXBvcnQgcGFyc2VyCiBXQU5UU19DT05O
RUNUSU9OX0FUVFJJQlVURSA9ICdXYW50c0Nvbm5lY3Rpb24nCiBMRUdBQ1lfUkVDRUlWRVJfQVRU
UklCVVRFID0gJ0xlZ2FjeVJlY2VpdmVyJwogREVMQVlFRF9BVFRSSUJVVEUgPSAnRGVsYXllZCcK
K0FTWU5DX0FUVFJJQlVURSA9ICdBc3luYycKIAogX2xpY2Vuc2VfaGVhZGVyID0gIiIiLyoKICAq
IENvcHlyaWdodCAoQykgMjAxMC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
QEAgLTk2LDYgKzk3LDEwIEBAIGRlZiByZXBseV9wYXJhbWV0ZXJfdHlwZSh0eXBlKToKICAgICBy
ZXR1cm4gJyVzJicgJSB0eXBlCiAKIAorZGVmIG1vdmVfdHlwZSh0eXBlKToKKyAgICByZXR1cm4g
JyVzJiYnICUgdHlwZQorCisKIGRlZiBhcmd1bWVudHNfdHlwZShtZXNzYWdlKToKICAgICByZXR1
cm4gJ3N0ZDo6dHVwbGU8JXM+JyAlICcsICcuam9pbihmdW5jdGlvbl9wYXJhbWV0ZXJfdHlwZShw
YXJhbWV0ZXIudHlwZSwgcGFyYW1ldGVyLmtpbmQpIGZvciBwYXJhbWV0ZXIgaW4gbWVzc2FnZS5w
YXJhbWV0ZXJzKQogCkBAIC0xMTMsMjAgKzExOCwyMyBAQCBkZWYgbWVzc2FnZV90b19zdHJ1Y3Rf
ZGVjbGFyYXRpb24obWVzc2FnCiAgICAgcmVzdWx0LmFwcGVuZCgnXG4nKQogICAgIHJlc3VsdC5h
cHBlbmQoJyAgICBzdGF0aWMgSVBDOjpTdHJpbmdSZWZlcmVuY2UgcmVjZWl2ZXJOYW1lKCkgeyBy
ZXR1cm4gbWVzc2FnZVJlY2VpdmVyTmFtZSgpOyB9XG4nKQogICAgIHJlc3VsdC5hcHBlbmQoJyAg
ICBzdGF0aWMgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbmFtZSgpIHsgcmV0dXJuIElQQzo6U3RyaW5n
UmVmZXJlbmNlKCIlcyIpOyB9XG4nICUgbWVzc2FnZS5uYW1lKQotICAgIHJlc3VsdC5hcHBlbmQo
JyAgICBzdGF0aWMgY29uc3QgYm9vbCBpc1N5bmMgPSAlcztcbicgJSAoJ2ZhbHNlJywgJ3RydWUn
KVttZXNzYWdlLnJlcGx5X3BhcmFtZXRlcnMgIT0gTm9uZV0pCisgICAgcmVzdWx0LmFwcGVuZCgn
ICAgIHN0YXRpYyBjb25zdCBib29sIGlzU3luYyA9ICVzO1xuJyAlICgnZmFsc2UnLCAndHJ1ZScp
W21lc3NhZ2UucmVwbHlfcGFyYW1ldGVycyAhPSBOb25lIGFuZCBub3QgbWVzc2FnZS5oYXNfYXR0
cmlidXRlKEFTWU5DX0FUVFJJQlVURSldKQogICAgIHJlc3VsdC5hcHBlbmQoJ1xuJykKICAgICBp
ZiBtZXNzYWdlLnJlcGx5X3BhcmFtZXRlcnMgIT0gTm9uZToKLSAgICAgICAgaWYgbWVzc2FnZS5o
YXNfYXR0cmlidXRlKERFTEFZRURfQVRUUklCVVRFKToKLSAgICAgICAgICAgIHNlbmRfcGFyYW1l
dGVycyA9IFsoZnVuY3Rpb25fcGFyYW1ldGVyX3R5cGUoeC50eXBlLCB4LmtpbmQpLCB4Lm5hbWUp
IGZvciB4IGluIG1lc3NhZ2UucmVwbHlfcGFyYW1ldGVyc10KLSAgICAgICAgICAgIHJlc3VsdC5h
cHBlbmQoJyAgICB1c2luZyBEZWxheWVkUmVwbHkgPSBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCcp
Ci0gICAgICAgICAgICBpZiBsZW4oc2VuZF9wYXJhbWV0ZXJzKToKLSAgICAgICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kKCclcycgJSAnLCAnLmpvaW4oWycgJy5qb2luKHgpIGZvciB4IGluIHNlbmRf
cGFyYW1ldGVyc10pKQotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnKT47XG4nKQorICAgICAg
ICBzZW5kX3BhcmFtZXRlcnMgPSBbKGZ1bmN0aW9uX3BhcmFtZXRlcl90eXBlKHgudHlwZSwgeC5r
aW5kKSwgeC5uYW1lKSBmb3IgeCBpbiBtZXNzYWdlLnJlcGx5X3BhcmFtZXRlcnNdCisgICAgICAg
IGlmIG1lc3NhZ2UuaGFzX2F0dHJpYnV0ZShERUxBWUVEX0FUVFJJQlVURSkgb3IgbWVzc2FnZS5o
YXNfYXR0cmlidXRlKEFTWU5DX0FUVFJJQlVURSk6CisgICAgICAgICAgICBjb21wbGV0aW9uX2hh
bmRsZXJfcGFyYW1ldGVycyA9ICclcycgJSAnLCAnLmpvaW4oWycgJy5qb2luKHgpIGZvciB4IGlu
IHNlbmRfcGFyYW1ldGVyc10pCisgICAgICAgICAgICBpZiBtZXNzYWdlLmhhc19hdHRyaWJ1dGUo
QVNZTkNfQVRUUklCVVRFKToKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgc3Rh
dGljIHZvaWQgY2FsbFJlcGx5KElQQzo6RGVjb2RlciYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
JXMpPiYmKTtcbicgJSAnLCAnLmpvaW4oW21vdmVfdHlwZSh4LnR5cGUpIGZvciB4IGluIG1lc3Nh
Z2UucmVwbHlfcGFyYW1ldGVyc10pKQorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAg
ICBzdGF0aWMgSVBDOjpTdHJpbmdSZWZlcmVuY2UgYXN5bmNNZXNzYWdlUmVwbHlOYW1lKCkgeyBy
ZXR1cm4geyAiJXNSZXBseSIgfTsgfVxuJyAlIG1lc3NhZ2UubmFtZSkKKyAgICAgICAgICAgICAg
ICByZXN1bHQuYXBwZW5kKCcgICAgdXNpbmcgQXN5bmNSZXBseScpCisgICAgICAgICAgICBlbHNl
OgorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICB1c2luZyBEZWxheWVkUmVwbHkn
KQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnID0gQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgl
cyk+O1xuJyAlIGNvbXBsZXRpb25faGFuZGxlcl9wYXJhbWV0ZXJzKQogICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZCgnICAgIHN0YXRpYyB2b2lkIHNlbmQoc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5j
b2Rlcj4mJiwgSVBDOjpDb25uZWN0aW9uJicpCiAgICAgICAgICAgICBpZiBsZW4oc2VuZF9wYXJh
bWV0ZXJzKToKLSAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcsICVzJyAlICcsICcuam9p
bihbJyAnLmpvaW4oeCkgZm9yIHggaW4gc2VuZF9wYXJhbWV0ZXJzXSkpCisgICAgICAgICAgICAg
ICAgcmVzdWx0LmFwcGVuZCgnLCAlcycgJSBjb21wbGV0aW9uX2hhbmRsZXJfcGFyYW1ldGVycykK
ICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyk7XG4nKQotCiAgICAgICAgIHJlc3VsdC5hcHBl
bmQoJyAgICB0eXBlZGVmICVzIFJlcGx5O1xuJyAlIHJlcGx5X3R5cGUobWVzc2FnZSkpCiAKICAg
ICBpZiBsZW4oZnVuY3Rpb25fcGFyYW1ldGVycyk6CkBAIC0yNzYsNiArMjg0LDkgQEAgZGVmIGFz
eW5jX21lc3NhZ2Vfc3RhdGVtZW50KHJlY2VpdmVyLCBtZQogICAgIGRpc3BhdGNoX2Z1bmN0aW9u
X2FyZ3MgPSBbJ2RlY29kZXInLCAndGhpcycsICcmJXMnICUgaGFuZGxlcl9mdW5jdGlvbihyZWNl
aXZlciwgbWVzc2FnZSldCiAKICAgICBkaXNwYXRjaF9mdW5jdGlvbiA9ICdoYW5kbGVNZXNzYWdl
JworICAgIGlmIG1lc3NhZ2UuaGFzX2F0dHJpYnV0ZShBU1lOQ19BVFRSSUJVVEUpOgorICAgICAg
ICBkaXNwYXRjaF9mdW5jdGlvbiArPSAnQXN5bmMnCisgICAgICAgIGRpc3BhdGNoX2Z1bmN0aW9u
X2FyZ3MuaW5zZXJ0KDAsICdjb25uZWN0aW9uJykKIAogICAgIGlmIG1lc3NhZ2UuaGFzX2F0dHJp
YnV0ZShXQU5UU19DT05ORUNUSU9OX0FUVFJJQlVURSk6CiAgICAgICAgIGRpc3BhdGNoX2Z1bmN0
aW9uX2FyZ3MuaW5zZXJ0KDAsICdjb25uZWN0aW9uJykKQEAgLTI5MiwxMiArMzAzLDE0IEBAIGRl
ZiBzeW5jX21lc3NhZ2Vfc3RhdGVtZW50KHJlY2VpdmVyLCBtZXMKICAgICBkaXNwYXRjaF9mdW5j
dGlvbiA9ICdoYW5kbGVNZXNzYWdlJwogICAgIGlmIG1lc3NhZ2UuaGFzX2F0dHJpYnV0ZShERUxB
WUVEX0FUVFJJQlVURSk6CiAgICAgICAgIGRpc3BhdGNoX2Z1bmN0aW9uICs9ICdEZWxheWVkJwor
ICAgIGlmIG1lc3NhZ2UuaGFzX2F0dHJpYnV0ZShBU1lOQ19BVFRSSUJVVEUpOgorICAgICAgICBk
aXNwYXRjaF9mdW5jdGlvbiArPSAnQXN5bmMnCiAKICAgICB3YW50c19jb25uZWN0aW9uID0gbWVz
c2FnZS5oYXNfYXR0cmlidXRlKERFTEFZRURfQVRUUklCVVRFKSBvciBtZXNzYWdlLmhhc19hdHRy
aWJ1dGUoV0FOVFNfQ09OTkVDVElPTl9BVFRSSUJVVEUpCiAKICAgICByZXN1bHQgPSBbXQogICAg
IHJlc3VsdC5hcHBlbmQoJyAgICBpZiAoZGVjb2Rlci5tZXNzYWdlTmFtZSgpID09IE1lc3NhZ2Vz
Ojolczo6JXM6Om5hbWUoKSkge1xuJyAlIChyZWNlaXZlci5uYW1lLCBtZXNzYWdlLm5hbWUpKQot
ICAgIHJlc3VsdC5hcHBlbmQoJyAgICAgICAgSVBDOjolczxNZXNzYWdlczo6JXM6OiVzPiglc2Rl
Y29kZXIsICVzcmVwbHlFbmNvZGVyLCB0aGlzLCAmJXMpO1xuJyAlIChkaXNwYXRjaF9mdW5jdGlv
biwgcmVjZWl2ZXIubmFtZSwgbWVzc2FnZS5uYW1lLCAnY29ubmVjdGlvbiwgJyBpZiB3YW50c19j
b25uZWN0aW9uIGVsc2UgJycsICcnIGlmIG1lc3NhZ2UuaGFzX2F0dHJpYnV0ZShERUxBWUVEX0FU
VFJJQlVURSkgZWxzZSAnKicsIGhhbmRsZXJfZnVuY3Rpb24ocmVjZWl2ZXIsIG1lc3NhZ2UpKSkK
KyAgICByZXN1bHQuYXBwZW5kKCcgICAgICAgIElQQzo6JXM8TWVzc2FnZXM6OiVzOjolcz4oJXNk
ZWNvZGVyLCAlc3JlcGx5RW5jb2RlciwgdGhpcywgJiVzKTtcbicgJSAoZGlzcGF0Y2hfZnVuY3Rp
b24sIHJlY2VpdmVyLm5hbWUsIG1lc3NhZ2UubmFtZSwgJ2Nvbm5lY3Rpb24sICcgaWYgd2FudHNf
Y29ubmVjdGlvbiBlbHNlICcnLCAnJyBpZiBtZXNzYWdlLmhhc19hdHRyaWJ1dGUoREVMQVlFRF9B
VFRSSUJVVEUpIG9yIG1lc3NhZ2UuaGFzX2F0dHJpYnV0ZShBU1lOQ19BVFRSSUJVVEUpIGVsc2Ug
JyonLCBoYW5kbGVyX2Z1bmN0aW9uKHJlY2VpdmVyLCBtZXNzYWdlKSkpCiAgICAgcmVzdWx0LmFw
cGVuZCgnICAgICAgICByZXR1cm47XG4nKQogICAgIHJlc3VsdC5hcHBlbmQoJyAgICB9XG4nKQog
ICAgIHJldHVybiBzdXJyb3VuZF9pbl9jb25kaXRpb24oJycuam9pbihyZXN1bHQpLCBtZXNzYWdl
LmNvbmRpdGlvbikKQEAgLTUyNSwyMCArNTM4LDI4IEBAIGRlZiBnZW5lcmF0ZV9tZXNzYWdlX2hh
bmRsZXIoZmlsZSk6CiAgICAgICAgICAgICByZXN1bHQgKz0gWycjaW5jbHVkZSAlc1xuJyAlIGhl
YWRlcl0KICAgICByZXN1bHQuYXBwZW5kKCdcbicpCiAKLSAgICBzeW5jX2RlbGF5ZWRfbWVzc2Fn
ZXMgPSBbXQorICAgIGRlbGF5ZWRfb3JfYXN5bmNfbWVzc2FnZXMgPSBbXQogICAgIGZvciBtZXNz
YWdlIGluIHJlY2VpdmVyLm1lc3NhZ2VzOgotICAgICAgICBpZiBtZXNzYWdlLnJlcGx5X3BhcmFt
ZXRlcnMgIT0gTm9uZSBhbmQgbWVzc2FnZS5oYXNfYXR0cmlidXRlKERFTEFZRURfQVRUUklCVVRF
KToKLSAgICAgICAgICAgIHN5bmNfZGVsYXllZF9tZXNzYWdlcy5hcHBlbmQobWVzc2FnZSkKKyAg
ICAgICAgaWYgbWVzc2FnZS5yZXBseV9wYXJhbWV0ZXJzICE9IE5vbmUgYW5kIChtZXNzYWdlLmhh
c19hdHRyaWJ1dGUoREVMQVlFRF9BVFRSSUJVVEUpIG9yIG1lc3NhZ2UuaGFzX2F0dHJpYnV0ZShB
U1lOQ19BVFRSSUJVVEUpKToKKyAgICAgICAgICAgIGRlbGF5ZWRfb3JfYXN5bmNfbWVzc2FnZXMu
YXBwZW5kKG1lc3NhZ2UpCiAKLSAgICBpZiBzeW5jX2RlbGF5ZWRfbWVzc2FnZXM6CisgICAgaWYg
ZGVsYXllZF9vcl9hc3luY19tZXNzYWdlczoKICAgICAgICAgcmVzdWx0LmFwcGVuZCgnbmFtZXNw
YWNlIE1lc3NhZ2VzIHtcblxubmFtZXNwYWNlICVzIHtcblxuJyAlIHJlY2VpdmVyLm5hbWUpCiAK
LSAgICAgICAgZm9yIG1lc3NhZ2UgaW4gc3luY19kZWxheWVkX21lc3NhZ2VzOgorICAgICAgICBm
b3IgbWVzc2FnZSBpbiBkZWxheWVkX29yX2FzeW5jX21lc3NhZ2VzOgogICAgICAgICAgICAgc2Vu
ZF9wYXJhbWV0ZXJzID0gWyhmdW5jdGlvbl9wYXJhbWV0ZXJfdHlwZSh4LnR5cGUsIHgua2luZCks
IHgubmFtZSkgZm9yIHggaW4gbWVzc2FnZS5yZXBseV9wYXJhbWV0ZXJzXQogCiAgICAgICAgICAg
ICBpZiBtZXNzYWdlLmNvbmRpdGlvbjoKICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcj
aWYgJXNcblxuJyAlIG1lc3NhZ2UuY29uZGl0aW9uKQogCisgICAgICAgICAgICBpZiBtZXNzYWdl
Lmhhc19hdHRyaWJ1dGUoQVNZTkNfQVRUUklCVVRFKToKKyAgICAgICAgICAgICAgICByZXN1bHQu
YXBwZW5kKCd2b2lkICVzOjpjYWxsUmVwbHkoSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCVzKT4mJiBjb21wbGV0aW9uSGFuZGxlcilcbntcbicgJSAobWVzc2Fn
ZS5uYW1lLCAnLCAnLmpvaW4oW21vdmVfdHlwZSh4LnR5cGUpIGZvciB4IGluIG1lc3NhZ2UucmVw
bHlfcGFyYW1ldGVyc10pKSkKKyAgICAgICAgICAgICAgICBmb3IgeCBpbiBtZXNzYWdlLnJlcGx5
X3BhcmFtZXRlcnM6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICBzdGQ6
Om9wdGlvbmFsPCVzPiAlcztcbicgJSAoeC50eXBlLCB4Lm5hbWUpKQorICAgICAgICAgICAgICAg
ICAgICByZXN1bHQuYXBwZW5kKCcgICAgZGVjb2RlciA+PiAlcztcbicgJSB4Lm5hbWUpCisgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICBpZiAoISVzKSB7XG4gICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuJyAlIHgubmFtZSkK
KyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgY29tcGxldGlvbkhhbmRsZXIoV1RG
TW92ZSgqJXMpKTtcbn1cblxuJyAlICgnLCAqJy5qb2luKHgubmFtZSBmb3IgeCBpbiBtZXNzYWdl
LnJlcGx5X3BhcmFtZXRlcnMpKSkKKwogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgndm9pZCAl
czo6c2VuZChzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYmIGVuY29kZXIsIElQQzo6Q29u
bmVjdGlvbiYgY29ubmVjdGlvbicgJSAobWVzc2FnZS5uYW1lKSkKICAgICAgICAgICAgIGlmIGxl
bihzZW5kX3BhcmFtZXRlcnMpOgogICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJywgJXMn
ICUgJywgJy5qb2luKFsnICcuam9pbih4KSBmb3IgeCBpbiBzZW5kX3BhcmFtZXRlcnNdKSkKQEAg
LTU1OCw3ICs1NzksNyBAQCBkZWYgZ2VuZXJhdGVfbWVzc2FnZV9oYW5kbGVyKGZpbGUpOgogICAg
IGFzeW5jX21lc3NhZ2VzID0gW10KICAgICBzeW5jX21lc3NhZ2VzID0gW10KICAgICBmb3IgbWVz
c2FnZSBpbiByZWNlaXZlci5tZXNzYWdlczoKLSAgICAgICAgaWYgbWVzc2FnZS5yZXBseV9wYXJh
bWV0ZXJzIGlzIG5vdCBOb25lOgorICAgICAgICBpZiBtZXNzYWdlLnJlcGx5X3BhcmFtZXRlcnMg
aXMgbm90IE5vbmUgYW5kIG5vdCBtZXNzYWdlLmhhc19hdHRyaWJ1dGUoQVNZTkNfQVRUUklCVVRF
KToKICAgICAgICAgICAgIHN5bmNfbWVzc2FnZXMuYXBwZW5kKG1lc3NhZ2UpCiAgICAgICAgIGVs
c2U6CiAgICAgICAgICAgICBhc3luY19tZXNzYWdlcy5hcHBlbmQobWVzc2FnZSkKQEAgLTU4Niw3
ICs2MDcsNyBAQCBkZWYgZ2VuZXJhdGVfbWVzc2FnZV9oYW5kbGVyKGZpbGUpOgogICAgICAgICBy
ZXN1bHQuYXBwZW5kKCcgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7XG4nKQogICAgICAgICByZXN1
bHQuYXBwZW5kKCd9XG4nKQogCi0gICAgcmVzdWx0LmFwcGVuZCgnXG59IC8vIG5hbWVzcGFjZSBX
ZWJLaXRcbicpCisgICAgcmVzdWx0LmFwcGVuZCgnXG59IC8vIG5hbWVzcGFjZSBXZWJLaXRcblxu
JykKIAogICAgIGlmIHJlY2VpdmVyLmNvbmRpdGlvbjoKICAgICAgICAgcmVzdWx0LmFwcGVuZCgn
XG4jZW5kaWYgLy8gJXNcbicgJSByZWNlaXZlci5jb25kaXRpb24pCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L1NoYXJlZC9TYW5kYm94RXh0ZW5zaW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9TaGFyZWQvU2FuZGJveEV4dGVuc2lvbi5oCShyZXZpc2lvbiAyMzcyNTkpCisrKyBTb3VyY2Uv
V2ViS2l0L1NoYXJlZC9TYW5kYm94RXh0ZW5zaW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTc3LDE0
ICs3NywxNiBAQCBwdWJsaWM6CiAgICAgcHVibGljOgogICAgICAgICBIYW5kbGVBcnJheSgpOwog
ICAgICAgICBIYW5kbGVBcnJheShIYW5kbGVBcnJheSYmKSA9IGRlZmF1bHQ7CisgICAgICAgIEhh
bmRsZUFycmF5JiBvcGVyYXRvcj0oSGFuZGxlQXJyYXkmJikgPSBkZWZhdWx0OwogICAgICAgICB+
SGFuZGxlQXJyYXkoKTsKICAgICAgICAgdm9pZCBhbGxvY2F0ZShzaXplX3QpOwogICAgICAgICBI
YW5kbGUmIG9wZXJhdG9yW10oc2l6ZV90IGkpOworICAgICAgICBIYW5kbGUmIGF0KHNpemVfdCBp
KSB7IHJldHVybiBvcGVyYXRvcltdKGkpOyB9CiAgICAgICAgIGNvbnN0IEhhbmRsZSYgb3BlcmF0
b3JbXShzaXplX3QgaSkgY29uc3Q7CiAgICAgICAgIHNpemVfdCBzaXplKCkgY29uc3Q7CiAgICAg
ICAgIHZvaWQgZW5jb2RlKElQQzo6RW5jb2RlciYpIGNvbnN0OwotICAgICAgICBzdGF0aWMgYm9v
bCBkZWNvZGUoSVBDOjpEZWNvZGVyJiwgSGFuZGxlQXJyYXkmKTsKLSAgICAgICAKKyAgICAgICAg
c3RhdGljIHN0ZDo6b3B0aW9uYWw8SGFuZGxlQXJyYXk+IGRlY29kZShJUEM6OkRlY29kZXImKTsK
KwogICAgIHByaXZhdGU6CiAjaWYgRU5BQkxFKFNBTkRCT1hfRVhURU5TSU9OUykKICAgICAgICAg
VmVjdG9yPEhhbmRsZT4gbV9kYXRhOwpAQCAtMTI4LDcgKzEzMCw3IEBAIGlubGluZSBzaXplX3Qg
U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlQXIKIGlubGluZSBjb25zdCBTYW5kYm94RXh0ZW5zaW9u
OjpIYW5kbGUmIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5OjpvcGVyYXRvcltdKHNpemVf
dCkgY29uc3QgeyByZXR1cm4gbV9lbXB0eUhhbmRsZTsgfQogaW5saW5lIFNhbmRib3hFeHRlbnNp
b246OkhhbmRsZSYgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlQXJyYXk6Om9wZXJhdG9yW10oc2l6
ZV90KSB7IHJldHVybiBtX2VtcHR5SGFuZGxlOyB9CiBpbmxpbmUgdm9pZCBTYW5kYm94RXh0ZW5z
aW9uOjpIYW5kbGVBcnJheTo6ZW5jb2RlKElQQzo6RW5jb2RlciYpIGNvbnN0IHsgfQotaW5saW5l
IGJvb2wgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlQXJyYXk6OmRlY29kZShJUEM6OkRlY29kZXIm
LCBIYW5kbGVBcnJheSYpIHsgcmV0dXJuIHRydWU7IH0KK2lubGluZSBhdXRvIFNhbmRib3hFeHRl
bnNpb246OkhhbmRsZUFycmF5OjpkZWNvZGUoSVBDOjpEZWNvZGVyJikgLT4gc3RkOjpvcHRpb25h
bDxIYW5kbGVBcnJheT4geyByZXR1cm4ge3sgfX07IH0KIGlubGluZSBSZWZQdHI8U2FuZGJveEV4
dGVuc2lvbj4gU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlKEhhbmRsZSYmKSB7IHJldHVybiBudWxs
cHRyOyB9CiBpbmxpbmUgYm9vbCBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUoY29uc3Qg
U3RyaW5nJiwgVHlwZSwgSGFuZGxlJikgeyByZXR1cm4gdHJ1ZTsgfQogaW5saW5lIGJvb2wgU2Fu
ZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlV2l0aG91dFJlc29sdmluZ1BhdGgoY29uc3QgU3Ry
aW5nJiwgVHlwZSwgSGFuZGxlJikgeyByZXR1cm4gdHJ1ZTsgfQpJbmRleDogU291cmNlL1dlYktp
dC9TaGFyZWQvV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9TaGFyZWQvV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAJKHJl
dmlzaW9uIDIzNzI1OSkKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlByb2Nlc3NDcmVhdGlv
blBhcmFtZXRlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzQsOCArMTc0LDExIEBAIGJvb2wg
V2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZGVjb2QKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIHBhcmFtZXRlcnMuaW5qZWN0ZWRCdW5kbGVQYXRoRXh0ZW5zaW9uSGFuZGxlID0gV1RG
TW92ZSgqaW5qZWN0ZWRCdW5kbGVQYXRoRXh0ZW5zaW9uSGFuZGxlKTsKIAotICAgIGlmICghZGVj
b2Rlci5kZWNvZGUocGFyYW1ldGVycy5hZGRpdGlvbmFsU2FuZGJveEV4dGVuc2lvbkhhbmRsZXMp
KQorICAgIHN0ZDo6b3B0aW9uYWw8U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlQXJyYXk+IGFkZGl0
aW9uYWxTYW5kYm94RXh0ZW5zaW9uSGFuZGxlczsKKyAgICBkZWNvZGVyID4+IGFkZGl0aW9uYWxT
YW5kYm94RXh0ZW5zaW9uSGFuZGxlczsKKyAgICBpZiAoIWFkZGl0aW9uYWxTYW5kYm94RXh0ZW5z
aW9uSGFuZGxlcykKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHBhcmFtZXRlcnMuYWRkaXRp
b25hbFNhbmRib3hFeHRlbnNpb25IYW5kbGVzID0gV1RGTW92ZSgqYWRkaXRpb25hbFNhbmRib3hF
eHRlbnNpb25IYW5kbGVzKTsKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHBhcmFtZXRlcnMuaW5p
dGlhbGl6YXRpb25Vc2VyRGF0YSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKHBhcmFtZXRlcnMuYXBwbGljYXRpb25DYWNoZURpcmVjdG9yeSkpCkluZGV4
OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC9EYXRhYmFzZXMvSW5kZXhlZERCL1dlYklEQlJlc3VsdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvRGF0YWJhc2VzL0luZGV4ZWRE
Qi9XZWJJREJSZXN1bHQuY3BwCShyZXZpc2lvbiAyMzcyNTkpCisrKyBTb3VyY2UvV2ViS2l0L1No
YXJlZC9EYXRhYmFzZXMvSW5kZXhlZERCL1dlYklEQlJlc3VsdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ2LDggKzQ2LDExIEBAIGJvb2wgV2ViSURCUmVzdWx0OjpkZWNvZGUoSVBDOjpEZWNvZGVy
JiAKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJlc3VsdC5tX3Jlc3VsdERhdGEgPSBXVEZN
b3ZlKCpyZXN1bHREYXRhKTsKIAotICAgIGlmICghU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlQXJy
YXk6OmRlY29kZShkZWNvZGVyLCByZXN1bHQubV9oYW5kbGVzKSkKKyAgICBzdGQ6Om9wdGlvbmFs
PFNhbmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5PiBoYW5kbGVzOworICAgIGRlY29kZXIgPj4g
aGFuZGxlczsKKyAgICBpZiAoIWhhbmRsZXMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBy
ZXN1bHQubV9oYW5kbGVzID0gV1RGTW92ZSgqaGFuZGxlcyk7CiAKICAgICByZXR1cm4gdHJ1ZTsK
IH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9TYW5kYm94RXh0ZW5zaW9uTWFjLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9TYW5kYm94RXh0ZW5zaW9u
TWFjLm1tCShyZXZpc2lvbiAyMzcyNTkpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvU2Fu
ZGJveEV4dGVuc2lvbk1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTkwLDIwICsxOTAsMjIgQEAg
dm9pZCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheTo6ZW5jbwogICAgICAgICBlbmNvZGVy
IDw8IGhhbmRsZTsKIH0KIAotYm9vbCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheTo6ZGVj
b2RlKElQQzo6RGVjb2RlciYgZGVjb2RlciwgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlQXJyYXkm
IGhhbmRsZXMpCitzdGQ6Om9wdGlvbmFsPFNhbmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5PiBT
YW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheTo6ZGVjb2RlKElQQzo6RGVjb2RlciYgZGVjb2Rl
cikKIHsKLSAgICB1aW50NjRfdCBzaXplOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc2l6ZSkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBoYW5kbGVzLmFsbG9jYXRlKHNpemUpOwotICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgc3RkOjpvcHRpb25hbDx1
aW50NjRfdD4gc2l6ZTsKKyAgICBkZWNvZGVyID4+IHNpemU7CisgICAgaWYgKCFzaXplKQorICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZUFy
cmF5IGhhbmRsZXM7CisgICAgaGFuZGxlcy5hbGxvY2F0ZSgqc2l6ZSk7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCAqc2l6ZTsgKytpKSB7CiAgICAgICAgIHN0ZDo6b3B0aW9uYWw8U2FuZGJv
eEV4dGVuc2lvbjo6SGFuZGxlPiBoYW5kbGU7CiAgICAgICAgIGRlY29kZXIgPj4gaGFuZGxlOwog
ICAgICAgICBpZiAoIWhhbmRsZSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgICAgIGhhbmRsZXNbaV0gPSBXVEZNb3ZlKCpo
YW5kbGUpOwogICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gV1RGTW92ZShoYW5k
bGVzKTsKIH0KIAogUmVmUHRyPFNhbmRib3hFeHRlbnNpb24+IFNhbmRib3hFeHRlbnNpb246OmNy
ZWF0ZShIYW5kbGUmJiBoYW5kbGUpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3
b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAJKHJldmlzaW9uIDIzNzI1
OSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94
eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5Miw3ICs2OTIsNyBAQCB2b2lkIE5ldHdvcmtQcm9j
ZXNzUHJveHk6OnNlbmRQcm9jZXNzRGlkCiB9CiAKICNpZiBFTkFCTEUoU0FOREJPWF9FWFRFTlNJ
T05TKQotdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpnZXRTYW5kYm94RXh0ZW5zaW9uc0ZvckJs
b2JGaWxlcyh1aW50NjRfdCByZXF1ZXN0SUQsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXRocykK
K3ZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6Z2V0U2FuZGJveEV4dGVuc2lvbnNGb3JCbG9iRmls
ZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhdGhzLCBNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3NQ
cm94eTo6R2V0U2FuZGJveEV4dGVuc2lvbnNGb3JCbG9iRmlsZXM6OkFzeW5jUmVwbHkmJiByZXBs
eSkKIHsKICAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheSBleHRlbnNpb25zOwogICAg
IGV4dGVuc2lvbnMuYWxsb2NhdGUocGF0aHMuc2l6ZSgpKTsKQEAgLTcwMCw4ICs3MDAsNyBAQCB2
b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmdldFNhbmRib3hFeHRlCiAgICAgICAgIC8vIFJlYWRX
cml0ZSBpcyByZXF1aXJlZCBmb3IgY3JlYXRpbmcgaGFyZCBsaW5rcywgd2hpY2ggaXMgc29tZXRo
aW5nIHRoYXQgbWlnaHQgYmUgZG9uZSB3aXRoIHRoZXNlIGV4dGVuc2lvbnMuCiAgICAgICAgIFNh
bmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShwYXRoc1tpXSwgU2FuZGJveEV4dGVuc2lvbjo6
VHlwZTo6UmVhZFdyaXRlLCBleHRlbnNpb25zW2ldKTsKICAgICB9Ci0gICAgCi0gICAgc2VuZChN
ZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkRpZEdldFNhbmRib3hFeHRlbnNpb25zRm9yQmxvYkZp
bGVzKHJlcXVlc3RJRCwgZXh0ZW5zaW9ucyksIDApOworICAgIHJlcGx5KFdURk1vdmUoZXh0ZW5z
aW9ucykpOwogfQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdv
cmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oCShyZXZpc2lvbiAyMzcyNTkpCisr
KyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaAko
d29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2lmIEVOQUJMRShMRUdBQ1lfQ1VTVE9N
X1BST1RPQ09MX01BTkFHRVIpCiAjaW5jbHVkZSAiTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2Vy
UHJveHkuaCIKICNlbmRpZgorI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzUHJveHlNZXNzYWdlcy5o
IgogI2luY2x1ZGUgIlByb2Nlc3NMYXVuY2hlci5oIgogI2luY2x1ZGUgIlByb2Nlc3NUaHJvdHRs
ZXIuaCIKICNpbmNsdWRlICJQcm9jZXNzVGhyb3R0bGVyQ2xpZW50LmgiCkBAIC0xNTYsNyArMTU3
LDcgQEAgcHJpdmF0ZToKICNlbmRpZgogCiAjaWYgRU5BQkxFKFNBTkRCT1hfRVhURU5TSU9OUykK
LSAgICB2b2lkIGdldFNhbmRib3hFeHRlbnNpb25zRm9yQmxvYkZpbGVzKHVpbnQ2NF90IHJlcXVl
c3RJRCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhdGhzKTsKKyAgICB2b2lkIGdldFNhbmRib3hF
eHRlbnNpb25zRm9yQmxvYkZpbGVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXRocywgTWVzc2Fn
ZXM6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OkdldFNhbmRib3hFeHRlbnNpb25zRm9yQmxvYkZpbGVz
OjpBc3luY1JlcGx5JiYpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHku
bWVzc2FnZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29y
ay9OZXR3b3JrUHJvY2Vzc1Byb3h5Lm1lc3NhZ2VzLmluCShyZXZpc2lvbiAyMzcyNTkpCisrKyBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkubWVzc2Fn
ZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAgbWVzc2FnZXMgLT4gTmV0d29y
a1Byb2Nlc3NQcm94eSBMZWdhY3lSZQogICAgIFJldHJpZXZlQ2FjaGVTdG9yYWdlUGFyYW1ldGVy
cyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiAKICNpZiBFTkFCTEUoU0FOREJPWF9FWFRFTlNJ
T05TKQotICAgIEdldFNhbmRib3hFeHRlbnNpb25zRm9yQmxvYkZpbGVzKHVpbnQ2NF90IHJlcXVl
c3RJRCwgVmVjdG9yPFN0cmluZz4gcGF0aHMpCisgICAgR2V0U2FuZGJveEV4dGVuc2lvbnNGb3JC
bG9iRmlsZXMoVmVjdG9yPFN0cmluZz4gcGF0aHMpIC0+IChXZWJLaXQ6OlNhbmRib3hFeHRlbnNp
b246OkhhbmRsZUFycmF5IGV4dGVuc2lvbnMpIEFzeW5jCiAjZW5kaWYKIAogI2lmIEVOQUJMRShT
RVJWSUNFX1dPUktFUikKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9NZWRpYVN0cmVh
bS9NZWRpYURldmljZVNhbmRib3hFeHRlbnNpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvTWVkaWFTdHJlYW0vTWVkaWFEZXZpY2VTYW5kYm94RXh0ZW5zaW9u
cy5jcHAJKHJldmlzaW9uIDIzNzI1OSkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9NZWRp
YVN0cmVhbS9NZWRpYURldmljZVNhbmRib3hFeHRlbnNpb25zLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTAsOCArNTAsMTEgQEAgYm9vbCBNZWRpYURldmljZVNhbmRib3hFeHRlbnNpb25zOjpkZWNv
ZAogICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0Lm1faWRzKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgaWYgKCFTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheTo6ZGVjb2Rl
KGRlY29kZXIsIHJlc3VsdC5tX2hhbmRsZXMpKQorICAgIHN0ZDo6b3B0aW9uYWw8U2FuZGJveEV4
dGVuc2lvbjo6SGFuZGxlQXJyYXk+IGhhbmRsZXM7CisgICAgZGVjb2RlciA+PiBoYW5kbGVzOwor
ICAgIGlmICghaGFuZGxlcykKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJlc3VsdC5tX2hh
bmRsZXMgPSBXVEZNb3ZlKCpoYW5kbGVzKTsKIAogICAgIHJldHVybiB0cnVlOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>352783</attachid>
            <date>2018-10-19 07:44:04 -0700</date>
            <delta_ts>2018-10-19 10:25:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-190746-20181019074403.patch</filename>
            <type>text/plain</type>
            <size>32748</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMzcyODIpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYzIEBACisyMDE4LTEwLTE4ICBBbGV4IENocmlz
dGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgSW50cm9kdWNlIENv
bXBsZXRpb25IYW5kbGVyLWJhc2VkIEFzeW5jIElQQyBtZXNzYWdlcyB3aXRoIHJlcGxpZXMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MDc0NgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJlZm9yZSB0aGlz
IHBhdGNoLCB0byBtYWtlIGFuIGFzeW5jaHJvbm91cyBJUEMgbWVzc2FnZSB3aXRoIGEgcmVwbHkg
eW91IGhhZCB0byBmaW5kIHR3byBvYmplY3RzIHRoYXQKKyAgICAgICAgY2FuIHRhbGsgdG8gZWFj
aCBvdGhlciwgbWFrZSB0d28gbmV3IG1lc3NhZ2UgdHlwZXMsIHNlbmQgYSBnZW5lcmF0ZWQgaWRl
bnRpZmllciwga2VlcCB0cmFjayBvZiB0aGF0CisgICAgICAgIGlkZW50aWZpZXIsIG1ha2UgYSBI
YXNoTWFwIHNvbWV3aGVyZSB0byBzdG9yZSB0aGUgb2JqZWN0IHdhaXRpbmcgZm9yIHRoZSByZXNw
b25zZSwgYW5kIGhvb2sgaXQgYWxsIHVwLgorICAgICAgICBXaGF0IGEgbWVzcy4gIE5vIHdvbmRl
ciBwZW9wbGUgdGFrZSBzaG9ydGN1dHMgYW5kIG1ha2Ugc3RyYW5nZSBkZXNpZ24gZGVjaXNpb25z
LgorCisgICAgICAgIE5vdywgeW91IGNhbiBqdXN0IHVzZSBhIENvbXBsZXRpb25IYW5kbGVyIGFu
ZCBtYXJrIHRoZSByZXBseSBhcyBBc3luYyBpbiAqLm1lc3NhZ2VzLmluLgorICAgICAgICBJJ3Zl
IGFkb3B0ZWQgdGhpcyB3aXRoIGEgbWVzc2FnZSB3aG9zZSBiZWhhdmlvciBpcyBjb3ZlcmVkIGJ5
IHRoZSBzdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vYmxvYi1jdXJzb3IuaHRtbAorICAgICAgICBs
YXlvdXQgdGVzdCBhbmQgbWFueSBvdGhlcnMuICBJIGludGVudCB0byByZWZpbmUgYW5kIGZ1cnRo
ZXIgYWRvcHQgdGhpcyBpbmNyZW1lbnRhbGx5LgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Byb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6Z2V0
U2FuZGJveEV4dGVuc2lvbnNGb3JCbG9iRmlsZXMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
UHJvY2Vzczo6ZGlkR2V0U2FuZGJveEV4dGVuc2lvbnNGb3JCbG9iRmlsZXMpOiBEZWxldGVkLgor
ICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmg6CisgICAgICAgICogTmV0
d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVzc2FnZXMuaW46CisgICAgICAgIFRoaXMgaXMg
cmVwcmVzZW50YXRpdmUgb2YgaG93IGNvZGUgd2lsbCBiZSBzaW1wbGlmaWVkIHdpdGggZ3JlYXRl
ciBhZG9wdGlvbi4gCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9h
ZFBhcmFtZXRlcnMuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkUGFy
YW1ldGVyczo6ZGVjb2RlKToKKyAgICAgICAgTW9kZXJuaXplIEhhbmRsZUFycmF5IGRlY29kaW5n
LgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9Db25uZWN0aW9uLmNwcDoKKyAgICAgICAgKElQQzo6
Q29ubmVjdGlvbjo6ZGlzcGF0Y2hNZXNzYWdlKToKKyAgICAgICAgKElQQzo6bmV4dEFzeW5jUmVw
bHlIYW5kbGVySUQpOgorICAgICAgICAoSVBDOjphc3luY1JlcGx5SGFuZGxlck1hcCk6CisgICAg
ICAgIEhhbmRsZSBhc3luYyByZXBsaWVzIHdoZW4gbG9va2luZyBhdCBpbmNvbWluZyBtZXNzYWdl
cyBmcm9tIHRoZSBzZW5kaW5nIHByb2Nlc3MuCisgICAgICAgICogUGxhdGZvcm0vSVBDL0Nvbm5l
Y3Rpb24uaDoKKyAgICAgICAgKElQQzo6Q29ubmVjdGlvbjo6c2VuZFdpdGhBc3luY1JlcGx5KToK
KyAgICAgICAgU2VuZCBhIG1lc3NhZ2Ugd2l0aCBhbiBhc3luYyByZXBseSBhbmQgcHJlcGFyZSB0
aGUgcmVwbHkgcmVjZWl2ZXIuCisgICAgICAgICogUGxhdGZvcm0vSVBDL0VuY29kZXIuaDoKKyAg
ICAgICAgTWFrZSB0aGUgdWludDY0X3QgZW5jb2RlciBwdWJsaWMgc28gd2UgY2FuIHVzZSBpdCB3
aGVuIGVuY29kaW5nIHRoZSBsaXN0ZW5lcklELgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9IYW5k
bGVNZXNzYWdlLmg6CisgICAgICAgIChJUEM6OmhhbmRsZU1lc3NhZ2VBc3luYyk6CisgICAgICAg
IEhhbmRsZSBhbiBhc3luY2hyb25vdXMgbWVzc2FnZSB3aXRoIGEgcmVwbHkgZnJvbSB0aGUgcmVj
ZWl2aW5nIHByb2Nlc3MuCisgICAgICAgIFRoaXMgaXMgc2ltaWxhciB0byBob3cgRGVsYXllZFJl
cGx5IG1lc3NhZ2VzIGFyZSBoYW5kbGVkLCBidXQgdGhlIGxpc3RlbmVySUQgaXMgYXV0b21hdGlj
YWxseSBjYXB0dXJlZCBhbmQgc2VudCBiYWNrLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0L21l
c3NhZ2VzLnB5OgorICAgICAgICBHZW5lcmF0ZSBjb2RlIGZvciBhc3luYyBtZXNzYWdlIHJlcGxp
ZXMuCisgICAgICAgICogU2hhcmVkL0RhdGFiYXNlcy9JbmRleGVkREIvV2ViSURCUmVzdWx0LmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViSURCUmVzdWx0OjpkZWNvZGUpOgorICAgICAgICAqIFNo
YXJlZC9TYW5kYm94RXh0ZW5zaW9uLmg6CisgICAgICAgIChXZWJLaXQ6OlNhbmRib3hFeHRlbnNp
b246OkhhbmRsZUFycmF5OjphdCk6CisgICAgICAgIChXZWJLaXQ6OlNhbmRib3hFeHRlbnNpb246
OkhhbmRsZUFycmF5OjpkZWNvZGUpOgorICAgICAgICAqIFNoYXJlZC9XZWJQcm9jZXNzQ3JlYXRp
b25QYXJhbWV0ZXJzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc0NyZWF0aW9uUGFy
YW1ldGVyczo6ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQvbWFjL1NhbmRib3hFeHRlbnNpb25N
YWMubW06CisgICAgICAgIChXZWJLaXQ6OlNhbmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5Ojpk
ZWNvZGUpOgorICAgICAgICBNb2Rlcm5pemUgdGhlIGRlY29kaW5nIG9mIEhhbmRsZUFycmF5IHRv
IHdvcmsgd2l0aCBnZW5lcmF0ZWQgZGVjb2RpbmcuCisgICAgICAgICogVUlQcm9jZXNzL05ldHdv
cmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9j
ZXNzUHJveHk6OmdldFNhbmRib3hFeHRlbnNpb25zRm9yQmxvYkZpbGVzKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Lmg6CisgICAgICAgICogVUlQcm9j
ZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5tZXNzYWdlcy5pbjoKKyAgICAgICAgVGhp
cyBpcyBhbHNvIHJlcHJlc2VudGF0aXZlIG9mIGhvdyBjb2RlIHdpbGwgYmUgc2ltcGxpZmllZCB3
aXRoIGdyZWF0ZXIgYWRvcHRpb24uCisgICAgICAgICogV2ViUHJvY2Vzcy9NZWRpYVN0cmVhbS9N
ZWRpYURldmljZVNhbmRib3hFeHRlbnNpb25zLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TWVkaWFE
ZXZpY2VTYW5kYm94RXh0ZW5zaW9uczo6ZGVjb2RlKToKKyAgICAgICAgTW9kZXJuaXplIEhhbmRs
ZUFycmF5IGRlY29kaW5nLgorCiAyMDE4LTEwLTE4ICBFcmljIENhcmxzb24gIDxlcmljLmNhcmxz
b25AYXBwbGUuY29tPgogCiAgICAgICAgIFtNZWRpYVN0cmVhbV0gQWxsb3cgcG9ydHMgdG8gb3B0
aW9uYWxseSBkbyBzY3JlZW4gY2FwdHVyZSBpbiB0aGUgVUkgcHJvY2VzcwpJbmRleDogU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAJKHJldmlzaW9u
IDIzNzI1OSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3Mu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTkwLDIxICsxMTkwLDExIEBAIHZvaWQgTmV0d29ya1By
b2Nlc3M6OmFkZEluZGV4ZWREYXRhYmFzZVMKICNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRB
QkFTRSkKIAogI2lmIEVOQUJMRShTQU5EQk9YX0VYVEVOU0lPTlMpCi12b2lkIE5ldHdvcmtQcm9j
ZXNzOjpnZXRTYW5kYm94RXh0ZW5zaW9uc0ZvckJsb2JGaWxlcyhjb25zdCBWZWN0b3I8U3RyaW5n
PiYgZmlsZW5hbWVzLCBGdW5jdGlvbjx2b2lkKFNhbmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5
JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBOZXR3b3JrUHJvY2Vzczo6Z2V0U2FuZGJv
eEV4dGVuc2lvbnNGb3JCbG9iRmlsZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIGZpbGVuYW1lcywg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheSYmKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBzdGF0aWMgdWludDY0X3QgbGFzdFJlcXVlc3RJ
RDsKLSAgICAKLSAgICB1aW50NjRfdCByZXF1ZXN0SUQgPSArK2xhc3RSZXF1ZXN0SUQ7Ci0gICAg
bV9zYW5kYm94RXh0ZW5zaW9uRm9yQmxvYnNDb21wbGV0aW9uSGFuZGxlcnNTdG9yYWdlRm9yTmV0
d29ya1Byb2Nlc3Muc2V0KHJlcXVlc3RJRCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwot
ICAgIHBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzUHJveHk6OkdldFNhbmRib3hFeHRlbnNpb25zRm9yQmxvYkZpbGVzKHJlcXVlc3RJRCwgZmls
ZW5hbWVzKSwgMCk7CisgICAgcGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFdpdGhBc3lu
Y1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpHZXRTYW5kYm94RXh0ZW5zaW9u
c0ZvckJsb2JGaWxlcyhmaWxlbmFtZXMpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9
CiAKLXZvaWQgTmV0d29ya1Byb2Nlc3M6OmRpZEdldFNhbmRib3hFeHRlbnNpb25zRm9yQmxvYkZp
bGVzKHVpbnQ2NF90IHJlcXVlc3RJRCwgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlQXJyYXkmJiBo
YW5kbGVzKQotewotICAgIGlmIChhdXRvIGhhbmRsZXIgPSBtX3NhbmRib3hFeHRlbnNpb25Gb3JC
bG9ic0NvbXBsZXRpb25IYW5kbGVyc1N0b3JhZ2VGb3JOZXR3b3JrUHJvY2Vzcy50YWtlKHJlcXVl
c3RJRCkpCi0gICAgICAgIGhhbmRsZXIoV1RGTW92ZShoYW5kbGVzKSk7Ci19Ci0gICAgCiB2b2lk
IE5ldHdvcmtQcm9jZXNzOjp1cGRhdGVUZW1wb3JhcnlGaWxlU2FuZGJveEV4dGVuc2lvbnMoY29u
c3QgVmVjdG9yPFN0cmluZz4mIHBhdGhzLCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheSYg
aGFuZGxlcykKIHsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGhhbmRsZXMuc2l6ZSgpOyAr
K2kpIHsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3Mu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9j
ZXNzLmgJKHJldmlzaW9uIDIzNzI2NCkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Byb2Nlc3MuaAkod29ya2luZyBjb3B5KQpAQCAtMTkzLDcgKzE5Myw3IEBAIHB1Ymxp
YzoKICNlbmRpZgogCiAjaWYgRU5BQkxFKFNBTkRCT1hfRVhURU5TSU9OUykKLSAgICB2b2lkIGdl
dFNhbmRib3hFeHRlbnNpb25zRm9yQmxvYkZpbGVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxl
bmFtZXMsIFdURjo6RnVuY3Rpb248dm9pZChTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheSYm
KT4mJiBjb21wbGV0aW9uSGFuZGxlcik7CisgICAgdm9pZCBnZXRTYW5kYm94RXh0ZW5zaW9uc0Zv
ckJsb2JGaWxlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgZmlsZW5hbWVzLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKFNhbmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5JiYpPiYmKTsKICAgICB2b2lk
IHVwZGF0ZVRlbXBvcmFyeUZpbGVTYW5kYm94RXh0ZW5zaW9ucyhjb25zdCBWZWN0b3I8U3RyaW5n
PiYgcGF0aHMsIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5Jik7CiAjZW5kaWYKIApAQCAt
MzE0LDEwICszMTQsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVnaXN0ZXJVUkxTY2hlbWVBc0NP
UlNFbmFibGVkKGNvbnN0IFN0cmluZyYpIGNvbnN0OwogICAgIHZvaWQgcmVnaXN0ZXJVUkxTY2hl
bWVBc0NhbkRpc3BsYXlPbmx5SWZDYW5SZXF1ZXN0KGNvbnN0IFN0cmluZyYpIGNvbnN0OwogCi0j
aWYgRU5BQkxFKFNBTkRCT1hfRVhURU5TSU9OUykKLSAgICB2b2lkIGRpZEdldFNhbmRib3hFeHRl
bnNpb25zRm9yQmxvYkZpbGVzKHVpbnQ2NF90IHJlcXVlc3RJRCwgU2FuZGJveEV4dGVuc2lvbjo6
SGFuZGxlQXJyYXkmJik7Ci0jZW5kaWYKLQogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQog
ICAgIHZvaWQgYWRkSW5kZXhlZERhdGFiYXNlU2Vzc2lvbihQQUw6OlNlc3Npb25JRCwgU3RyaW5n
JiwgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJik7CiAgICAgSGFzaFNldDxXZWJDb3JlOjpTZWN1
cml0eU9yaWdpbkRhdGE+IGluZGV4ZWREYXRhYmFzZU9yaWdpbnMoY29uc3QgU3RyaW5nJiBwYXRo
KTsKQEAgLTM5OCw3ICszOTQsNiBAQCBwcml2YXRlOgogI2VuZGlmCiAKICAgICBIYXNoTWFwPFN0
cmluZywgUmVmUHRyPFNhbmRib3hFeHRlbnNpb24+PiBtX2Jsb2JUZW1wb3JhcnlGaWxlU2FuZGJv
eEV4dGVuc2lvbnM7Ci0gICAgSGFzaE1hcDx1aW50NjRfdCwgV1RGOjpGdW5jdGlvbjx2b2lkKFNh
bmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5JiYpPj4gbV9zYW5kYm94RXh0ZW5zaW9uRm9yQmxv
YnNDb21wbGV0aW9uSGFuZGxlcnNTdG9yYWdlRm9yTmV0d29ya1Byb2Nlc3M7CiAgICAgCiAgICAg
RGVxdWU8Q3Jvc3NUaHJlYWRUYXNrPiBtX3N0b3JhZ2VUYXNrczsKICAgICBMb2NrIG1fc3RvcmFn
ZVRhc2tNdXRleDsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1By
b2Nlc3MubWVzc2FnZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbgkocmV2aXNpb24gMjM3MjY0KQorKysgU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbgkod29y
a2luZyBjb3B5KQpAQCAtNzMsMTAgKzczLDYgQEAgbWVzc2FnZXMgLT4gTmV0d29ya1Byb2Nlc3Mg
TGVnYWN5UmVjZWl2ZQogICAgIENhbmNlbFByZXBhcmVUb1N1c3BlbmQoKQogICAgIFByb2Nlc3NE
aWRSZXN1bWUoKQogCi0jaWYgRU5BQkxFKFNBTkRCT1hfRVhURU5TSU9OUykKLSAgICBEaWRHZXRT
YW5kYm94RXh0ZW5zaW9uc0ZvckJsb2JGaWxlcyh1aW50NjRfdCByZXF1ZXN0SUQsIFdlYktpdDo6
U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlQXJyYXkgZXh0ZW5zaW9ucykKLSNlbmRpZgotCiAgICAg
V3JpdGVCbG9iVG9GaWxlUGF0aChXZWJDb3JlOjpVUkwgYmxvYlVSTCwgU3RyaW5nIHBhdGgsIFdl
YktpdDo6U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIGhhbmRsZSwgdWludDY0X3QgY2FsbGJhY2tJ
RCkKIAogICAgIFByZWNvbm5lY3RUbyhXZWJDb3JlOjpVUkwgdXJsLCBlbnVtOmJvb2wgV2ViQ29y
ZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kgc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kpOwpJbmRl
eDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1l
dGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycy5jcHAJKHJldmlzaW9uIDIzNzI1OSkKKysrIFNvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzMsMTEgKzEzMywxMiBAQCBib29sIE5ldHdvcmtSZXNvdXJj
ZUxvYWRQYXJhbWV0ZXJzOjpkZWNvCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IHJlc3VsdC5yZXF1ZXN0LnNldEhUVFBCb2R5KFdURk1vdmUoZm9ybURhdGEpKTsKIAotICAgICAg
ICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheSByZXF1ZXN0Qm9keVNhbmRib3hFeHRlbnNp
b25IYW5kbGVzOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlcXVlc3RCb2R5U2FuZGJv
eEV4dGVuc2lvbkhhbmRsZXMpKQorICAgICAgICBzdGQ6Om9wdGlvbmFsPFNhbmRib3hFeHRlbnNp
b246OkhhbmRsZUFycmF5PiByZXF1ZXN0Qm9keVNhbmRib3hFeHRlbnNpb25IYW5kbGVzOworICAg
ICAgICBkZWNvZGVyID4+IHJlcXVlc3RCb2R5U2FuZGJveEV4dGVuc2lvbkhhbmRsZXM7CisgICAg
ICAgIGlmICghcmVxdWVzdEJvZHlTYW5kYm94RXh0ZW5zaW9uSGFuZGxlcykKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZXF1ZXN0Qm9k
eVNhbmRib3hFeHRlbnNpb25IYW5kbGVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAo
YXV0byBleHRlbnNpb24gPSBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGUoV1RGTW92ZShyZXF1ZXN0
Qm9keVNhbmRib3hFeHRlbnNpb25IYW5kbGVzW2ldKSkpCisgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgcmVxdWVzdEJvZHlTYW5kYm94RXh0ZW5zaW9uSGFuZGxlcy0+c2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgICAgIGlmIChhdXRvIGV4dGVuc2lvbiA9IFNhbmRib3hFeHRlbnNpb246OmNy
ZWF0ZShXVEZNb3ZlKHJlcXVlc3RCb2R5U2FuZGJveEV4dGVuc2lvbkhhbmRsZXMtPmF0KGkpKSkp
CiAgICAgICAgICAgICAgICAgcmVzdWx0LnJlcXVlc3RCb2R5U2FuZGJveEV4dGVuc2lvbnMuYXBw
ZW5kKFdURk1vdmUoZXh0ZW5zaW9uKSk7CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L1BsYXRmb3JtL0lQQy9Db25uZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L1BsYXRmb3JtL0lQQy9Db25uZWN0aW9uLmNwcAkocmV2aXNpb24gMjM3MjU5KQorKysg
U291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQ29ubmVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIzNyw2ICsyMzcsMTIgQEAgc3RhdGljIEhhc2hNYXA8SVBDOjpDb25uZWN0aW9uOjpVbmlx
dWVJRAogICAgIHJldHVybiBtYXA7CiB9CiAKK3N0YXRpYyBIYXNoTWFwPHVpbnRwdHJfdCwgSGFz
aE1hcDx1aW50NjRfdCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChEZWNvZGVyKik+Pj4mIGFzeW5j
UmVwbHlIYW5kbGVyTWFwKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaE1hcDx1
aW50cHRyX3QsIEhhc2hNYXA8dWludDY0X3QsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoRGVjb2Rl
ciopPj4+PiBtYXA7CisgICAgcmV0dXJuIG1hcC5nZXQoKTsKK30KKyAgICAKIENvbm5lY3Rpb246
OkNvbm5lY3Rpb24oSWRlbnRpZmllciBpZGVudGlmaWVyLCBib29sIGlzU2VydmVyLCBDbGllbnQm
IGNsaWVudCkKICAgICA6IG1fY2xpZW50KGNsaWVudCkKICAgICAsIG1fdW5pcXVlSUQoZ2VuZXJh
dGVPYmplY3RJZGVudGlmaWVyPFVuaXF1ZUlEVHlwZT4oKSkKQEAgLTI3MSw2ICsyNzcsMTIgQEAg
Q29ubmVjdGlvbjo6fkNvbm5lY3Rpb24oKQogICAgIEFTU0VSVCghaXNWYWxpZCgpKTsKIAogICAg
IGFsbENvbm5lY3Rpb25zKCkucmVtb3ZlKG1fdW5pcXVlSUQpOworICAgIAorICAgIGF1dG8gbWFw
ID0gYXN5bmNSZXBseUhhbmRsZXJNYXAoKS50YWtlKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90
Pih0aGlzKSk7CisgICAgZm9yIChhdXRvJiBoYW5kbGVyIDogbWFwLnZhbHVlcygpKSB7CisgICAg
ICAgIGlmIChoYW5kbGVyKQorICAgICAgICAgICAgaGFuZGxlcihudWxscHRyKTsKKyAgICB9CiB9
CiAKIENvbm5lY3Rpb24qIENvbm5lY3Rpb246OmNvbm5lY3Rpb24oVW5pcXVlSUQgdW5pcXVlSUQp
CkBAIC05NDgsNiArOTYwLDIxIEBAIHZvaWQgQ29ubmVjdGlvbjo6ZW5xdWV1ZUluY29taW5nTWVz
c2FnZSgKIHZvaWQgQ29ubmVjdGlvbjo6ZGlzcGF0Y2hNZXNzYWdlKERlY29kZXImIGRlY29kZXIp
CiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoaXNWYWxpZCgpKTsKKyAgICBpZiAoZGVjb2Rlci5tZXNz
YWdlUmVjZWl2ZXJOYW1lKCkgPT0gIkFzeW5jUmVwbHkiKSB7CisgICAgICAgIHN0ZDo6b3B0aW9u
YWw8dWludDY0X3Q+IGxpc3RlbmVySUQ7CisgICAgICAgIGRlY29kZXIgPj4gbGlzdGVuZXJJRDsK
KyAgICAgICAgaWYgKCFsaXN0ZW5lcklEKSB7CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBhdXRvIGhhbmRs
ZXIgPSB0YWtlQXN5bmNSZXBseUhhbmRsZXIoKnRoaXMsICpsaXN0ZW5lcklEKTsKKyAgICAgICAg
aWYgKCFoYW5kbGVyKSB7CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBoYW5kbGVyKCZkZWNvZGVyKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KICAgICBtX2NsaWVudC5kaWRSZWNlaXZlTWVzc2FnZSgqdGhp
cywgZGVjb2Rlcik7CiB9CiAKQEAgLTEwOTMsNiArMTEyMCwzMSBAQCB2b2lkIENvbm5lY3Rpb246
OmRpc3BhdGNoSW5jb21pbmdNZXNzYWdlCiAgICAgfQogfQogCit1aW50NjRfdCBuZXh0QXN5bmNS
ZXBseUhhbmRsZXJJRCgpCit7CisgICAgc3RhdGljIHVpbnQ2NF90IGlkZW50aWZpZXIgeyAwIH07
CisgICAgcmV0dXJuICsraWRlbnRpZmllcjsKK30KKwordm9pZCBhZGRBc3luY1JlcGx5SGFuZGxl
cihDb25uZWN0aW9uJiBjb25uZWN0aW9uLCB1aW50NjRfdCBpZGVudGlmaWVyLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKERlY29kZXIqKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBhdXRv
IHJlc3VsdCA9IGFzeW5jUmVwbHlIYW5kbGVyTWFwKCkuZW5zdXJlKHJlaW50ZXJwcmV0X2Nhc3Q8
dWludHB0cl90PigmY29ubmVjdGlvbiksIFtdIHsKKyAgICAgICAgcmV0dXJuIEhhc2hNYXA8dWlu
dDY0X3QsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoRGVjb2RlciopPj4oKTsKKyAgICB9KS5pdGVy
YXRvci0+dmFsdWUuYWRkKGlkZW50aWZpZXIsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
KyAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0LmlzTmV3RW50cnkpOworfQorCitDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKERlY29kZXIqKT4gdGFrZUFzeW5jUmVwbHlIYW5kbGVyKENvbm5l
Y3Rpb24mIGNvbm5lY3Rpb24sIHVpbnQ2NF90IGlkZW50aWZpZXIpCit7CisgICAgYXV0byBpdGVy
YXRvciA9IGFzeW5jUmVwbHlIYW5kbGVyTWFwKCkuZmluZChyZWludGVycHJldF9jYXN0PHVpbnRw
dHJfdD4oJmNvbm5lY3Rpb24pKTsKKyAgICBpZiAoaXRlcmF0b3IgIT0gYXN5bmNSZXBseUhhbmRs
ZXJNYXAoKS5lbmQoKSkgeworICAgICAgICBBU1NFUlQoaXRlcmF0b3ItPnZhbHVlLmNvbnRhaW5z
KGlkZW50aWZpZXIpKTsKKyAgICAgICAgcmV0dXJuIGl0ZXJhdG9yLT52YWx1ZS50YWtlKGlkZW50
aWZpZXIpOworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbnVs
bHB0cjsKK30KKwogdm9pZCBDb25uZWN0aW9uOjp3YWtlVXBSdW5Mb29wKCkKIHsKICAgICBSdW5M
b29wOjptYWluKCkud2FrZVVwKCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9D
b25uZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQ29u
bmVjdGlvbi5oCShyZXZpc2lvbiAyMzcyNTkpCisrKyBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQ
Qy9Db25uZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3Nyw2ICsxNzcsNyBAQCBwdWJsaWM6
CiAKICAgICB2b2lkIHBvc3RDb25uZWN0aW9uRGlkQ2xvc2VPbkNvbm5lY3Rpb25Xb3JrUXVldWUo
KTsKIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIEFyZ3M+IHZvaWQgc2Vu
ZFdpdGhBc3luY1JlcGx5KFQmJiBtZXNzYWdlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEFyZ3Mu
Li4pPiYmIGFyZ3MsIHVpbnQ2NF90IGRlc3RpbmF0aW9uSUQgPSAwKTsKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBib29sIHNlbmQoVCYmIG1lc3NhZ2UsIHVpbnQ2NF90IGRlc3RpbmF0aW9uSUQs
IE9wdGlvblNldDxTZW5kT3B0aW9uPiBzZW5kT3B0aW9ucyA9IHsgfSk7CiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4gdm9pZCBzZW5kV2l0aFJlcGx5KFQmJiBtZXNzYWdlLCB1aW50NjRfdCBkZXN0
aW5hdGlvbklELCBGdW5jdGlvbkRpc3BhdGNoZXImIHJlcGx5RGlzcGF0Y2hlciwgRnVuY3Rpb248
dm9pZChzdGQ6Om9wdGlvbmFsPHR5cGVuYW1lIENvZGluZ1R5cGU8dHlwZW5hbWUgVDo6UmVwbHk+
OjpUeXBlPik+JiYgcmVwbHlIYW5kbGVyKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBib29s
IHNlbmRTeW5jKFQmJiBtZXNzYWdlLCB0eXBlbmFtZSBUOjpSZXBseSYmIHJlcGx5LCB1aW50NjRf
dCBkZXN0aW5hdGlvbklELCBTZWNvbmRzIHRpbWVvdXQgPSBTZWNvbmRzOjppbmZpbml0eSgpLCBP
cHRpb25TZXQ8U2VuZFN5bmNPcHRpb24+IHNlbmRTeW5jT3B0aW9ucyA9IHsgfSk7CkBAIC00MTAs
NiArNDExLDI4IEBAIGJvb2wgQ29ubmVjdGlvbjo6c2VuZChUJiYgbWVzc2FnZSwgdWludDYKICAg
ICByZXR1cm4gc2VuZE1lc3NhZ2UoV1RGTW92ZShlbmNvZGVyKSwgc2VuZE9wdGlvbnMpOwogfQog
Cit1aW50NjRfdCBuZXh0QXN5bmNSZXBseUhhbmRsZXJJRCgpOwordm9pZCBhZGRBc3luY1JlcGx5
SGFuZGxlcihDb25uZWN0aW9uJiwgdWludDY0X3QsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoRGVj
b2RlciopPiYmKTsKK0NvbXBsZXRpb25IYW5kbGVyPHZvaWQoRGVjb2RlciopPiB0YWtlQXN5bmNS
ZXBseUhhbmRsZXIoQ29ubmVjdGlvbiYsIHVpbnQ2NF90KTsKKwordGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUuLi4gQXJncz4KK3ZvaWQgQ29ubmVjdGlvbjo6c2VuZFdpdGhBc3luY1JlcGx5
KFQmJiBtZXNzYWdlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKEFyZ3MuLi4pPiYmIGNvbXBsZXRp
b25IYW5kbGVyLCB1aW50NjRfdCBkZXN0aW5hdGlvbklEKQoreworICAgIENPTVBJTEVfQVNTRVJU
KCFUOjppc1N5bmMsIEFzeW5jTWVzc2FnZUV4cGVjdGVkKTsKKworICAgIGF1dG8gZW5jb2RlciA9
IHN0ZDo6bWFrZV91bmlxdWU8RW5jb2Rlcj4oVDo6cmVjZWl2ZXJOYW1lKCksIFQ6Om5hbWUoKSwg
ZGVzdGluYXRpb25JRCk7CisgICAgdWludDY0X3QgbGlzdGVuZXJJRCA9IG5leHRBc3luY1JlcGx5
SGFuZGxlcklEKCk7CisgICAgZW5jb2Rlci0+ZW5jb2RlKGxpc3RlbmVySUQpOworICAgIGVuY29k
ZXItPmVuY29kZShtZXNzYWdlLmFyZ3VtZW50cygpKTsKKyAgICBzZW5kTWVzc2FnZShXVEZNb3Zl
KGVuY29kZXIpLCB7IH0pOworICAgIGFkZEFzeW5jUmVwbHlIYW5kbGVyKCp0aGlzLCBsaXN0ZW5l
cklELCBbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKERl
Y29kZXIqIGRlY29kZXIpIG11dGFibGUgeworICAgICAgICBpZiAoZGVjb2RlciAmJiAhZGVjb2Rl
ci0+aXNJbnZhbGlkKCkpCisgICAgICAgICAgICBUOjpjYWxsUmVwbHkoKmRlY29kZXIsIFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgVDo6Y2Fu
Y2VsUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgIH0pOworfQorCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgogdm9pZCBDb25uZWN0aW9uOjpzZW5kV2l0aFJlcGx5KFQmJiBtZXNz
YWdlLCB1aW50NjRfdCBkZXN0aW5hdGlvbklELCBGdW5jdGlvbkRpc3BhdGNoZXImIHJlcGx5RGlz
cGF0Y2hlciwgRnVuY3Rpb248dm9pZChzdGQ6Om9wdGlvbmFsPHR5cGVuYW1lIENvZGluZ1R5cGU8
dHlwZW5hbWUgVDo6UmVwbHk+OjpUeXBlPik+JiYgcmVwbHlIYW5kbGVyKQogewpJbmRleDogU291
cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRW5jb2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvUGxhdGZvcm0vSVBDL0VuY29kZXIuaAkocmV2aXNpb24gMjM3MjU5KQorKysgU291cmNl
L1dlYktpdC9QbGF0Zm9ybS9JUEMvRW5jb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC05NCw2ICs5
NCw4IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBjb25zdCBib29sIGlzSVBDRW5jb2RlciA9IHRy
dWU7CiAKKyAgICB2b2lkIGVuY29kZSh1aW50NjRfdCk7CisKIHByaXZhdGU6CiAgICAgdWludDhf
dCogZ3Jvdyh1bnNpZ25lZCBhbGlnbm1lbnQsIHNpemVfdCk7CiAKQEAgLTEwMSw3ICsxMDMsNiBA
QCBwcml2YXRlOgogICAgIHZvaWQgZW5jb2RlKHVpbnQ4X3QpOwogICAgIHZvaWQgZW5jb2RlKHVp
bnQxNl90KTsKICAgICB2b2lkIGVuY29kZSh1aW50MzJfdCk7Ci0gICAgdm9pZCBlbmNvZGUodWlu
dDY0X3QpOwogICAgIHZvaWQgZW5jb2RlKGludDE2X3QpOwogICAgIHZvaWQgZW5jb2RlKGludDMy
X3QpOwogICAgIHZvaWQgZW5jb2RlKGludDY0X3QpOwpJbmRleDogU291cmNlL1dlYktpdC9QbGF0
Zm9ybS9JUEMvSGFuZGxlTWVzc2FnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvUGxh
dGZvcm0vSVBDL0hhbmRsZU1lc3NhZ2UuaAkocmV2aXNpb24gMjM3MjU5KQorKysgU291cmNlL1dl
YktpdC9QbGF0Zm9ybS9JUEMvSGFuZGxlTWVzc2FnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODcs
NCArMTg3LDI4IEBAIHZvaWQgaGFuZGxlTWVzc2FnZURlbGF5ZWQoQ29ubmVjdGlvbiYgY28KICAg
ICBjYWxsTWVtYmVyRnVuY3Rpb24oV1RGTW92ZShhcmd1bWVudHMpLCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSwgb2JqZWN0LCBmdW5jdGlvbik7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIEMsIHR5cGVuYW1lIE1GPgordm9pZCBoYW5kbGVNZXNzYWdlQXN5bmMoQ29ubmVj
dGlvbiYgY29ubmVjdGlvbiwgRGVjb2RlciYgZGVjb2RlciwgQyogb2JqZWN0LCBNRiBmdW5jdGlv
bikKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBsaXN0ZW5lcklEOworICAgIGRlY29k
ZXIgPj4gbGlzdGVuZXJJRDsKKyAgICBpZiAoIWxpc3RlbmVySUQpIHsKKyAgICAgICAgQVNTRVJU
KGRlY29kZXIuaXNJbnZhbGlkKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAg
IHR5cGVuYW1lIENvZGluZ1R5cGU8dHlwZW5hbWUgVDo6QXJndW1lbnRzPjo6VHlwZSBhcmd1bWVu
dHM7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShhcmd1bWVudHMpKSB7CisgICAgICAgIEFTU0VS
VChkZWNvZGVyLmlzSW52YWxpZCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHR5
cGVuYW1lIFQ6OkFzeW5jUmVwbHkgY29tcGxldGlvbkhhbmRsZXIgPSBbbGlzdGVuZXJJRCA9ICps
aXN0ZW5lcklELCBjb25uZWN0aW9uID0gbWFrZVJlZihjb25uZWN0aW9uKV0gKGF1dG8mJi4uLiBh
cmdzKSBtdXRhYmxlIHsKKyAgICAgICAgYXV0byBlbmNvZGVyID0gc3RkOjptYWtlX3VuaXF1ZTxF
bmNvZGVyPigiQXN5bmNSZXBseSIsIFQ6OmFzeW5jTWVzc2FnZVJlcGx5TmFtZSgpLCAwKTsKKyAg
ICAgICAgKmVuY29kZXIgPDwgbGlzdGVuZXJJRDsKKyAgICAgICAgVDo6c2VuZChXVEZNb3ZlKGVu
Y29kZXIpLCBXVEZNb3ZlKGNvbm5lY3Rpb24pLCBhcmdzLi4uKTsKKyAgICB9OworICAgIGNhbGxN
ZW1iZXJGdW5jdGlvbihXVEZNb3ZlKGFyZ3VtZW50cyksIFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpLCBvYmplY3QsIGZ1bmN0aW9uKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSVBDCkluZGV4OiBT
b3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkJKHJldmlzaW9uIDIzNzI2NCkK
KysrIFNvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkJKHdvcmtpbmcgY29w
eSkKQEAgLTI5LDYgKzI5LDcgQEAgZnJvbSB3ZWJraXQgaW1wb3J0IHBhcnNlcgogV0FOVFNfQ09O
TkVDVElPTl9BVFRSSUJVVEUgPSAnV2FudHNDb25uZWN0aW9uJwogTEVHQUNZX1JFQ0VJVkVSX0FU
VFJJQlVURSA9ICdMZWdhY3lSZWNlaXZlcicKIERFTEFZRURfQVRUUklCVVRFID0gJ0RlbGF5ZWQn
CitBU1lOQ19BVFRSSUJVVEUgPSAnQXN5bmMnCiAKIF9saWNlbnNlX2hlYWRlciA9ICIiIi8qCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CkBAIC05Niw2ICs5NywxMCBAQCBkZWYgcmVwbHlfcGFyYW1ldGVyX3R5cGUodHlwZSk6CiAgICAg
cmV0dXJuICclcyYnICUgdHlwZQogCiAKK2RlZiBtb3ZlX3R5cGUodHlwZSk6CisgICAgcmV0dXJu
ICclcyYmJyAlIHR5cGUKKworCiBkZWYgYXJndW1lbnRzX3R5cGUobWVzc2FnZSk6CiAgICAgcmV0
dXJuICdzdGQ6OnR1cGxlPCVzPicgJSAnLCAnLmpvaW4oZnVuY3Rpb25fcGFyYW1ldGVyX3R5cGUo
cGFyYW1ldGVyLnR5cGUsIHBhcmFtZXRlci5raW5kKSBmb3IgcGFyYW1ldGVyIGluIG1lc3NhZ2Uu
cGFyYW1ldGVycykKIApAQCAtMTEzLDIwICsxMTgsMjUgQEAgZGVmIG1lc3NhZ2VfdG9fc3RydWN0
X2RlY2xhcmF0aW9uKG1lc3NhZwogICAgIHJlc3VsdC5hcHBlbmQoJ1xuJykKICAgICByZXN1bHQu
YXBwZW5kKCcgICAgc3RhdGljIElQQzo6U3RyaW5nUmVmZXJlbmNlIHJlY2VpdmVyTmFtZSgpIHsg
cmV0dXJuIG1lc3NhZ2VSZWNlaXZlck5hbWUoKTsgfVxuJykKICAgICByZXN1bHQuYXBwZW5kKCcg
ICAgc3RhdGljIElQQzo6U3RyaW5nUmVmZXJlbmNlIG5hbWUoKSB7IHJldHVybiBJUEM6OlN0cmlu
Z1JlZmVyZW5jZSgiJXMiKTsgfVxuJyAlIG1lc3NhZ2UubmFtZSkKLSAgICByZXN1bHQuYXBwZW5k
KCcgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNTeW5jID0gJXM7XG4nICUgKCdmYWxzZScsICd0cnVl
JylbbWVzc2FnZS5yZXBseV9wYXJhbWV0ZXJzICE9IE5vbmVdKQorICAgIHJlc3VsdC5hcHBlbmQo
JyAgICBzdGF0aWMgY29uc3QgYm9vbCBpc1N5bmMgPSAlcztcbicgJSAoJ2ZhbHNlJywgJ3RydWUn
KVttZXNzYWdlLnJlcGx5X3BhcmFtZXRlcnMgIT0gTm9uZSBhbmQgbm90IG1lc3NhZ2UuaGFzX2F0
dHJpYnV0ZShBU1lOQ19BVFRSSUJVVEUpXSkKICAgICByZXN1bHQuYXBwZW5kKCdcbicpCiAgICAg
aWYgbWVzc2FnZS5yZXBseV9wYXJhbWV0ZXJzICE9IE5vbmU6Ci0gICAgICAgIGlmIG1lc3NhZ2Uu
aGFzX2F0dHJpYnV0ZShERUxBWUVEX0FUVFJJQlVURSk6Ci0gICAgICAgICAgICBzZW5kX3BhcmFt
ZXRlcnMgPSBbKGZ1bmN0aW9uX3BhcmFtZXRlcl90eXBlKHgudHlwZSwgeC5raW5kKSwgeC5uYW1l
KSBmb3IgeCBpbiBtZXNzYWdlLnJlcGx5X3BhcmFtZXRlcnNdCi0gICAgICAgICAgICByZXN1bHQu
YXBwZW5kKCcgICAgdXNpbmcgRGVsYXllZFJlcGx5ID0gQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgn
KQotICAgICAgICAgICAgaWYgbGVuKHNlbmRfcGFyYW1ldGVycyk6Ci0gICAgICAgICAgICAgICAg
cmVzdWx0LmFwcGVuZCgnJXMnICUgJywgJy5qb2luKFsnICcuam9pbih4KSBmb3IgeCBpbiBzZW5k
X3BhcmFtZXRlcnNdKSkKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyk+O1xuJykKKyAgICAg
ICAgc2VuZF9wYXJhbWV0ZXJzID0gWyhmdW5jdGlvbl9wYXJhbWV0ZXJfdHlwZSh4LnR5cGUsIHgu
a2luZCksIHgubmFtZSkgZm9yIHggaW4gbWVzc2FnZS5yZXBseV9wYXJhbWV0ZXJzXQorICAgICAg
ICBpZiBtZXNzYWdlLmhhc19hdHRyaWJ1dGUoREVMQVlFRF9BVFRSSUJVVEUpIG9yIG1lc3NhZ2Uu
aGFzX2F0dHJpYnV0ZShBU1lOQ19BVFRSSUJVVEUpOgorICAgICAgICAgICAgY29tcGxldGlvbl9o
YW5kbGVyX3BhcmFtZXRlcnMgPSAnJXMnICUgJywgJy5qb2luKFsnICcuam9pbih4KSBmb3IgeCBp
biBzZW5kX3BhcmFtZXRlcnNdKQorICAgICAgICAgICAgaWYgbWVzc2FnZS5oYXNfYXR0cmlidXRl
KEFTWU5DX0FUVFJJQlVURSk6CisgICAgICAgICAgICAgICAgbW92ZV9wYXJhbWV0ZXJzID0gJywg
Jy5qb2luKFttb3ZlX3R5cGUoeC50eXBlKSBmb3IgeCBpbiBtZXNzYWdlLnJlcGx5X3BhcmFtZXRl
cnNdKQorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICBzdGF0aWMgdm9pZCBjYWxs
UmVwbHkoSVBDOjpEZWNvZGVyJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCglcyk+JiYpO1xuJyAl
IG1vdmVfcGFyYW1ldGVycykKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgc3Rh
dGljIHZvaWQgY2FuY2VsUmVwbHkoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCglcyk+JiYpO1xuJyAl
IG1vdmVfcGFyYW1ldGVycykKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgc3Rh
dGljIElQQzo6U3RyaW5nUmVmZXJlbmNlIGFzeW5jTWVzc2FnZVJlcGx5TmFtZSgpIHsgcmV0dXJu
IHsgIiVzUmVwbHkiIH07IH1cbicgJSBtZXNzYWdlLm5hbWUpCisgICAgICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZCgnICAgIHVzaW5nIEFzeW5jUmVwbHknKQorICAgICAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgdXNpbmcgRGVsYXllZFJlcGx5JykKKyAg
ICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyA9IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoJXMpPjtc
bicgJSBjb21wbGV0aW9uX2hhbmRsZXJfcGFyYW1ldGVycykKICAgICAgICAgICAgIHJlc3VsdC5h
cHBlbmQoJyAgICBzdGF0aWMgdm9pZCBzZW5kKHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+
JiYsIElQQzo6Q29ubmVjdGlvbiYnKQogICAgICAgICAgICAgaWYgbGVuKHNlbmRfcGFyYW1ldGVy
cyk6Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnLCAlcycgJSAnLCAnLmpvaW4oWycg
Jy5qb2luKHgpIGZvciB4IGluIHNlbmRfcGFyYW1ldGVyc10pKQorICAgICAgICAgICAgICAgIHJl
c3VsdC5hcHBlbmQoJywgJXMnICUgY29tcGxldGlvbl9oYW5kbGVyX3BhcmFtZXRlcnMpCiAgICAg
ICAgICAgICByZXN1bHQuYXBwZW5kKCcpO1xuJykKLQogICAgICAgICByZXN1bHQuYXBwZW5kKCcg
ICAgdHlwZWRlZiAlcyBSZXBseTtcbicgJSByZXBseV90eXBlKG1lc3NhZ2UpKQogCiAgICAgaWYg
bGVuKGZ1bmN0aW9uX3BhcmFtZXRlcnMpOgpAQCAtMjc2LDYgKzI4Niw5IEBAIGRlZiBhc3luY19t
ZXNzYWdlX3N0YXRlbWVudChyZWNlaXZlciwgbWUKICAgICBkaXNwYXRjaF9mdW5jdGlvbl9hcmdz
ID0gWydkZWNvZGVyJywgJ3RoaXMnLCAnJiVzJyAlIGhhbmRsZXJfZnVuY3Rpb24ocmVjZWl2ZXIs
IG1lc3NhZ2UpXQogCiAgICAgZGlzcGF0Y2hfZnVuY3Rpb24gPSAnaGFuZGxlTWVzc2FnZScKKyAg
ICBpZiBtZXNzYWdlLmhhc19hdHRyaWJ1dGUoQVNZTkNfQVRUUklCVVRFKToKKyAgICAgICAgZGlz
cGF0Y2hfZnVuY3Rpb24gKz0gJ0FzeW5jJworICAgICAgICBkaXNwYXRjaF9mdW5jdGlvbl9hcmdz
Lmluc2VydCgwLCAnY29ubmVjdGlvbicpCiAKICAgICBpZiBtZXNzYWdlLmhhc19hdHRyaWJ1dGUo
V0FOVFNfQ09OTkVDVElPTl9BVFRSSUJVVEUpOgogICAgICAgICBkaXNwYXRjaF9mdW5jdGlvbl9h
cmdzLmluc2VydCgwLCAnY29ubmVjdGlvbicpCkBAIC0yOTIsMTIgKzMwNSwxNCBAQCBkZWYgc3lu
Y19tZXNzYWdlX3N0YXRlbWVudChyZWNlaXZlciwgbWVzCiAgICAgZGlzcGF0Y2hfZnVuY3Rpb24g
PSAnaGFuZGxlTWVzc2FnZScKICAgICBpZiBtZXNzYWdlLmhhc19hdHRyaWJ1dGUoREVMQVlFRF9B
VFRSSUJVVEUpOgogICAgICAgICBkaXNwYXRjaF9mdW5jdGlvbiArPSAnRGVsYXllZCcKKyAgICBp
ZiBtZXNzYWdlLmhhc19hdHRyaWJ1dGUoQVNZTkNfQVRUUklCVVRFKToKKyAgICAgICAgZGlzcGF0
Y2hfZnVuY3Rpb24gKz0gJ0FzeW5jJwogCiAgICAgd2FudHNfY29ubmVjdGlvbiA9IG1lc3NhZ2Uu
aGFzX2F0dHJpYnV0ZShERUxBWUVEX0FUVFJJQlVURSkgb3IgbWVzc2FnZS5oYXNfYXR0cmlidXRl
KFdBTlRTX0NPTk5FQ1RJT05fQVRUUklCVVRFKQogCiAgICAgcmVzdWx0ID0gW10KICAgICByZXN1
bHQuYXBwZW5kKCcgICAgaWYgKGRlY29kZXIubWVzc2FnZU5hbWUoKSA9PSBNZXNzYWdlczo6JXM6
OiVzOjpuYW1lKCkpIHtcbicgJSAocmVjZWl2ZXIubmFtZSwgbWVzc2FnZS5uYW1lKSkKLSAgICBy
ZXN1bHQuYXBwZW5kKCcgICAgICAgIElQQzo6JXM8TWVzc2FnZXM6OiVzOjolcz4oJXNkZWNvZGVy
LCAlc3JlcGx5RW5jb2RlciwgdGhpcywgJiVzKTtcbicgJSAoZGlzcGF0Y2hfZnVuY3Rpb24sIHJl
Y2VpdmVyLm5hbWUsIG1lc3NhZ2UubmFtZSwgJ2Nvbm5lY3Rpb24sICcgaWYgd2FudHNfY29ubmVj
dGlvbiBlbHNlICcnLCAnJyBpZiBtZXNzYWdlLmhhc19hdHRyaWJ1dGUoREVMQVlFRF9BVFRSSUJV
VEUpIGVsc2UgJyonLCBoYW5kbGVyX2Z1bmN0aW9uKHJlY2VpdmVyLCBtZXNzYWdlKSkpCisgICAg
cmVzdWx0LmFwcGVuZCgnICAgICAgICBJUEM6OiVzPE1lc3NhZ2VzOjolczo6JXM+KCVzZGVjb2Rl
ciwgJXNyZXBseUVuY29kZXIsIHRoaXMsICYlcyk7XG4nICUgKGRpc3BhdGNoX2Z1bmN0aW9uLCBy
ZWNlaXZlci5uYW1lLCBtZXNzYWdlLm5hbWUsICdjb25uZWN0aW9uLCAnIGlmIHdhbnRzX2Nvbm5l
Y3Rpb24gZWxzZSAnJywgJycgaWYgbWVzc2FnZS5oYXNfYXR0cmlidXRlKERFTEFZRURfQVRUUklC
VVRFKSBvciBtZXNzYWdlLmhhc19hdHRyaWJ1dGUoQVNZTkNfQVRUUklCVVRFKSBlbHNlICcqJywg
aGFuZGxlcl9mdW5jdGlvbihyZWNlaXZlciwgbWVzc2FnZSkpKQogICAgIHJlc3VsdC5hcHBlbmQo
JyAgICAgICAgcmV0dXJuO1xuJykKICAgICByZXN1bHQuYXBwZW5kKCcgICAgfVxuJykKICAgICBy
ZXR1cm4gc3Vycm91bmRfaW5fY29uZGl0aW9uKCcnLmpvaW4ocmVzdWx0KSwgbWVzc2FnZS5jb25k
aXRpb24pCkBAIC01MjUsMjAgKzU0MCwzMiBAQCBkZWYgZ2VuZXJhdGVfbWVzc2FnZV9oYW5kbGVy
KGZpbGUpOgogICAgICAgICAgICAgcmVzdWx0ICs9IFsnI2luY2x1ZGUgJXNcbicgJSBoZWFkZXJd
CiAgICAgcmVzdWx0LmFwcGVuZCgnXG4nKQogCi0gICAgc3luY19kZWxheWVkX21lc3NhZ2VzID0g
W10KKyAgICBkZWxheWVkX29yX2FzeW5jX21lc3NhZ2VzID0gW10KICAgICBmb3IgbWVzc2FnZSBp
biByZWNlaXZlci5tZXNzYWdlczoKLSAgICAgICAgaWYgbWVzc2FnZS5yZXBseV9wYXJhbWV0ZXJz
ICE9IE5vbmUgYW5kIG1lc3NhZ2UuaGFzX2F0dHJpYnV0ZShERUxBWUVEX0FUVFJJQlVURSk6Ci0g
ICAgICAgICAgICBzeW5jX2RlbGF5ZWRfbWVzc2FnZXMuYXBwZW5kKG1lc3NhZ2UpCisgICAgICAg
IGlmIG1lc3NhZ2UucmVwbHlfcGFyYW1ldGVycyAhPSBOb25lIGFuZCAobWVzc2FnZS5oYXNfYXR0
cmlidXRlKERFTEFZRURfQVRUUklCVVRFKSBvciBtZXNzYWdlLmhhc19hdHRyaWJ1dGUoQVNZTkNf
QVRUUklCVVRFKSk6CisgICAgICAgICAgICBkZWxheWVkX29yX2FzeW5jX21lc3NhZ2VzLmFwcGVu
ZChtZXNzYWdlKQogCi0gICAgaWYgc3luY19kZWxheWVkX21lc3NhZ2VzOgorICAgIGlmIGRlbGF5
ZWRfb3JfYXN5bmNfbWVzc2FnZXM6CiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJ25hbWVzcGFjZSBN
ZXNzYWdlcyB7XG5cbm5hbWVzcGFjZSAlcyB7XG5cbicgJSByZWNlaXZlci5uYW1lKQogCi0gICAg
ICAgIGZvciBtZXNzYWdlIGluIHN5bmNfZGVsYXllZF9tZXNzYWdlczoKKyAgICAgICAgZm9yIG1l
c3NhZ2UgaW4gZGVsYXllZF9vcl9hc3luY19tZXNzYWdlczoKICAgICAgICAgICAgIHNlbmRfcGFy
YW1ldGVycyA9IFsoZnVuY3Rpb25fcGFyYW1ldGVyX3R5cGUoeC50eXBlLCB4LmtpbmQpLCB4Lm5h
bWUpIGZvciB4IGluIG1lc3NhZ2UucmVwbHlfcGFyYW1ldGVyc10KIAogICAgICAgICAgICAgaWYg
bWVzc2FnZS5jb25kaXRpb246CiAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnI2lmICVz
XG5cbicgJSBtZXNzYWdlLmNvbmRpdGlvbikKIAorICAgICAgICAgICAgaWYgbWVzc2FnZS5oYXNf
YXR0cmlidXRlKEFTWU5DX0FUVFJJQlVURSk6CisgICAgICAgICAgICAgICAgbW92ZV9wYXJhbWV0
ZXJzID0gbWVzc2FnZS5uYW1lLCAnLCAnLmpvaW4oW21vdmVfdHlwZSh4LnR5cGUpIGZvciB4IGlu
IG1lc3NhZ2UucmVwbHlfcGFyYW1ldGVyc10pCisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVu
ZCgndm9pZCAlczo6Y2FsbFJlcGx5KElQQzo6RGVjb2RlciYgZGVjb2RlciwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCglcyk+JiYgY29tcGxldGlvbkhhbmRsZXIpXG57XG4nICUgbW92ZV9wYXJhbWV0
ZXJzKQorICAgICAgICAgICAgICAgIGZvciB4IGluIG1lc3NhZ2UucmVwbHlfcGFyYW1ldGVyczoK
KyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIHN0ZDo6b3B0aW9uYWw8JXM+
ICVzO1xuJyAlICh4LnR5cGUsIHgubmFtZSkpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5h
cHBlbmQoJyAgICBkZWNvZGVyID4+ICVzO1xuJyAlIHgubmFtZSkKKyAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0LmFwcGVuZCgnICAgIGlmICghJXMpIHtcbiAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4nICUgeC5uYW1lKQorICAgICAgICAgICAg
ICAgIHJlc3VsdC5hcHBlbmQoJyAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKColcykpO1xu
fVxuXG4nICUgKCcsIConLmpvaW4oeC5uYW1lIGZvciB4IGluIG1lc3NhZ2UucmVwbHlfcGFyYW1l
dGVycykpKQorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJ3ZvaWQgJXM6OmNhbmNlbFJl
cGx5KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoJXMpPiYmIGNvbXBsZXRpb25IYW5kbGVyKVxue1xu
ICAgIGNvbXBsZXRpb25IYW5kbGVyKCcgJSBtb3ZlX3BhcmFtZXRlcnMpCisgICAgICAgICAgICAg
ICAgcmVzdWx0LmFwcGVuZCgnLCAnLmpvaW4oWyd7IH0nIGZvciB4IGluIG1lc3NhZ2UucmVwbHlf
cGFyYW1ldGVyc10pKQorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyk7XG59XG5cbicp
CisKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJ3ZvaWQgJXM6OnNlbmQoc3RkOjp1bmlxdWVf
cHRyPElQQzo6RW5jb2Rlcj4mJiBlbmNvZGVyLCBJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24n
ICUgKG1lc3NhZ2UubmFtZSkpCiAgICAgICAgICAgICBpZiBsZW4oc2VuZF9wYXJhbWV0ZXJzKToK
ICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcsICVzJyAlICcsICcuam9pbihbJyAnLmpv
aW4oeCkgZm9yIHggaW4gc2VuZF9wYXJhbWV0ZXJzXSkpCkBAIC01NTgsNyArNTg1LDcgQEAgZGVm
IGdlbmVyYXRlX21lc3NhZ2VfaGFuZGxlcihmaWxlKToKICAgICBhc3luY19tZXNzYWdlcyA9IFtd
CiAgICAgc3luY19tZXNzYWdlcyA9IFtdCiAgICAgZm9yIG1lc3NhZ2UgaW4gcmVjZWl2ZXIubWVz
c2FnZXM6Ci0gICAgICAgIGlmIG1lc3NhZ2UucmVwbHlfcGFyYW1ldGVycyBpcyBub3QgTm9uZToK
KyAgICAgICAgaWYgbWVzc2FnZS5yZXBseV9wYXJhbWV0ZXJzIGlzIG5vdCBOb25lIGFuZCBub3Qg
bWVzc2FnZS5oYXNfYXR0cmlidXRlKEFTWU5DX0FUVFJJQlVURSk6CiAgICAgICAgICAgICBzeW5j
X21lc3NhZ2VzLmFwcGVuZChtZXNzYWdlKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgYXN5
bmNfbWVzc2FnZXMuYXBwZW5kKG1lc3NhZ2UpCkBAIC01ODYsNyArNjEzLDcgQEAgZGVmIGdlbmVy
YXRlX21lc3NhZ2VfaGFuZGxlcihmaWxlKToKICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpO1xuJykKICAgICAgICAgcmVzdWx0LmFwcGVuZCgnfVxuJykKIAot
ICAgIHJlc3VsdC5hcHBlbmQoJ1xufSAvLyBuYW1lc3BhY2UgV2ViS2l0XG4nKQorICAgIHJlc3Vs
dC5hcHBlbmQoJ1xufSAvLyBuYW1lc3BhY2UgV2ViS2l0XG5cbicpCiAKICAgICBpZiByZWNlaXZl
ci5jb25kaXRpb246CiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJ1xuI2VuZGlmIC8vICVzXG4nICUg
cmVjZWl2ZXIuY29uZGl0aW9uKQpJbmRleDogU291cmNlL1dlYktpdC9TaGFyZWQvU2FuZGJveEV4
dGVuc2lvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1NhbmRib3hFeHRl
bnNpb24uaAkocmV2aXNpb24gMjM3MjU5KQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvU2FuZGJv
eEV4dGVuc2lvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC03NywxNCArNzcsMTYgQEAgcHVibGljOgog
ICAgIHB1YmxpYzoKICAgICAgICAgSGFuZGxlQXJyYXkoKTsKICAgICAgICAgSGFuZGxlQXJyYXko
SGFuZGxlQXJyYXkmJikgPSBkZWZhdWx0OworICAgICAgICBIYW5kbGVBcnJheSYgb3BlcmF0b3I9
KEhhbmRsZUFycmF5JiYpID0gZGVmYXVsdDsKICAgICAgICAgfkhhbmRsZUFycmF5KCk7CiAgICAg
ICAgIHZvaWQgYWxsb2NhdGUoc2l6ZV90KTsKICAgICAgICAgSGFuZGxlJiBvcGVyYXRvcltdKHNp
emVfdCBpKTsKKyAgICAgICAgSGFuZGxlJiBhdChzaXplX3QgaSkgeyByZXR1cm4gb3BlcmF0b3Jb
XShpKTsgfQogICAgICAgICBjb25zdCBIYW5kbGUmIG9wZXJhdG9yW10oc2l6ZV90IGkpIGNvbnN0
OwogICAgICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0OwogICAgICAgICB2b2lkIGVuY29kZShJUEM6
OkVuY29kZXImKSBjb25zdDsKLSAgICAgICAgc3RhdGljIGJvb2wgZGVjb2RlKElQQzo6RGVjb2Rl
ciYsIEhhbmRsZUFycmF5Jik7Ci0gICAgICAgCisgICAgICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFs
PEhhbmRsZUFycmF5PiBkZWNvZGUoSVBDOjpEZWNvZGVyJik7CisKICAgICBwcml2YXRlOgogI2lm
IEVOQUJMRShTQU5EQk9YX0VYVEVOU0lPTlMpCiAgICAgICAgIFZlY3RvcjxIYW5kbGU+IG1fZGF0
YTsKQEAgLTEyOCw3ICsxMzAsNyBAQCBpbmxpbmUgc2l6ZV90IFNhbmRib3hFeHRlbnNpb246Okhh
bmRsZUFyCiBpbmxpbmUgY29uc3QgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJiBTYW5kYm94RXh0
ZW5zaW9uOjpIYW5kbGVBcnJheTo6b3BlcmF0b3JbXShzaXplX3QpIGNvbnN0IHsgcmV0dXJuIG1f
ZW1wdHlIYW5kbGU7IH0KIGlubGluZSBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmIFNhbmRib3hF
eHRlbnNpb246OkhhbmRsZUFycmF5OjpvcGVyYXRvcltdKHNpemVfdCkgeyByZXR1cm4gbV9lbXB0
eUhhbmRsZTsgfQogaW5saW5lIHZvaWQgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlQXJyYXk6OmVu
Y29kZShJUEM6OkVuY29kZXImKSBjb25zdCB7IH0KLWlubGluZSBib29sIFNhbmRib3hFeHRlbnNp
b246OkhhbmRsZUFycmF5OjpkZWNvZGUoSVBDOjpEZWNvZGVyJiwgSGFuZGxlQXJyYXkmKSB7IHJl
dHVybiB0cnVlOyB9CitpbmxpbmUgYXV0byBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheTo6
ZGVjb2RlKElQQzo6RGVjb2RlciYpIC0+IHN0ZDo6b3B0aW9uYWw8SGFuZGxlQXJyYXk+IHsgcmV0
dXJuIHt7IH19OyB9CiBpbmxpbmUgUmVmUHRyPFNhbmRib3hFeHRlbnNpb24+IFNhbmRib3hFeHRl
bnNpb246OmNyZWF0ZShIYW5kbGUmJikgeyByZXR1cm4gbnVsbHB0cjsgfQogaW5saW5lIGJvb2wg
U2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKGNvbnN0IFN0cmluZyYsIFR5cGUsIEhhbmRs
ZSYpIHsgcmV0dXJuIHRydWU7IH0KIGlubGluZSBib29sIFNhbmRib3hFeHRlbnNpb246OmNyZWF0
ZUhhbmRsZVdpdGhvdXRSZXNvbHZpbmdQYXRoKGNvbnN0IFN0cmluZyYsIFR5cGUsIEhhbmRsZSYp
IHsgcmV0dXJuIHRydWU7IH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlByb2Nlc3ND
cmVhdGlvblBhcmFtZXRlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVk
L1dlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwCShyZXZpc2lvbiAyMzcyNTkpCisrKyBT
b3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTc0LDggKzE3NCwxMSBAQCBib29sIFdlYlByb2Nlc3NDcmVhdGlvblBh
cmFtZXRlcnM6OmRlY29kCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBwYXJhbWV0ZXJzLmlu
amVjdGVkQnVuZGxlUGF0aEV4dGVuc2lvbkhhbmRsZSA9IFdURk1vdmUoKmluamVjdGVkQnVuZGxl
UGF0aEV4dGVuc2lvbkhhbmRsZSk7CiAKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHBhcmFtZXRl
cnMuYWRkaXRpb25hbFNhbmRib3hFeHRlbnNpb25IYW5kbGVzKSkKKyAgICBzdGQ6Om9wdGlvbmFs
PFNhbmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5PiBhZGRpdGlvbmFsU2FuZGJveEV4dGVuc2lv
bkhhbmRsZXM7CisgICAgZGVjb2RlciA+PiBhZGRpdGlvbmFsU2FuZGJveEV4dGVuc2lvbkhhbmRs
ZXM7CisgICAgaWYgKCFhZGRpdGlvbmFsU2FuZGJveEV4dGVuc2lvbkhhbmRsZXMpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBwYXJhbWV0ZXJzLmFkZGl0aW9uYWxTYW5kYm94RXh0ZW5zaW9u
SGFuZGxlcyA9IFdURk1vdmUoKmFkZGl0aW9uYWxTYW5kYm94RXh0ZW5zaW9uSGFuZGxlcyk7CiAg
ICAgaWYgKCFkZWNvZGVyLmRlY29kZShwYXJhbWV0ZXJzLmluaXRpYWxpemF0aW9uVXNlckRhdGEp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShwYXJhbWV0
ZXJzLmFwcGxpY2F0aW9uQ2FjaGVEaXJlY3RvcnkpKQpJbmRleDogU291cmNlL1dlYktpdC9TaGFy
ZWQvRGF0YWJhc2VzL0luZGV4ZWREQi9XZWJJREJSZXN1bHQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvU2hhcmVkL0RhdGFiYXNlcy9JbmRleGVkREIvV2ViSURCUmVzdWx0LmNwcAko
cmV2aXNpb24gMjM3MjU5KQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvRGF0YWJhc2VzL0luZGV4
ZWREQi9XZWJJREJSZXN1bHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw4ICs0NiwxMSBAQCBi
b29sIFdlYklEQlJlc3VsdDo6ZGVjb2RlKElQQzo6RGVjb2RlciYgCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICByZXN1bHQubV9yZXN1bHREYXRhID0gV1RGTW92ZSgqcmVzdWx0RGF0YSk7CiAK
LSAgICBpZiAoIVNhbmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5OjpkZWNvZGUoZGVjb2Rlciwg
cmVzdWx0Lm1faGFuZGxlcykpCisgICAgc3RkOjpvcHRpb25hbDxTYW5kYm94RXh0ZW5zaW9uOjpI
YW5kbGVBcnJheT4gaGFuZGxlczsKKyAgICBkZWNvZGVyID4+IGhhbmRsZXM7CisgICAgaWYgKCFo
YW5kbGVzKQogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmVzdWx0Lm1faGFuZGxlcyA9IFdU
Rk1vdmUoKmhhbmRsZXMpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CkluZGV4OiBTb3VyY2UvV2Vi
S2l0L1NoYXJlZC9tYWMvU2FuZGJveEV4dGVuc2lvbk1hYy5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9tYWMvU2FuZGJveEV4dGVuc2lvbk1hYy5tbQkocmV2aXNpb24gMjM3
MjU5KQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL1NhbmRib3hFeHRlbnNpb25NYWMubW0J
KHdvcmtpbmcgY29weSkKQEAgLTE5MCwyMCArMTkwLDIyIEBAIHZvaWQgU2FuZGJveEV4dGVuc2lv
bjo6SGFuZGxlQXJyYXk6OmVuY28KICAgICAgICAgZW5jb2RlciA8PCBoYW5kbGU7CiB9CiAKLWJv
b2wgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlQXJyYXk6OmRlY29kZShJUEM6OkRlY29kZXImIGRl
Y29kZXIsIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5JiBoYW5kbGVzKQorc3RkOjpvcHRp
b25hbDxTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheT4gU2FuZGJveEV4dGVuc2lvbjo6SGFu
ZGxlQXJyYXk6OmRlY29kZShJUEM6OkRlY29kZXImIGRlY29kZXIpCiB7Ci0gICAgdWludDY0X3Qg
c2l6ZTsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHNpemUpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgaGFuZGxlcy5hbGxvY2F0ZShzaXplKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHNpemU7IGkrKykgeworICAgIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IHNpemU7CisgICAg
ZGVjb2RlciA+PiBzaXplOworICAgIGlmICghc2l6ZSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKKyAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheSBoYW5kbGVzOworICAgIGhh
bmRsZXMuYWxsb2NhdGUoKnNpemUpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgKnNpemU7
ICsraSkgewogICAgICAgICBzdGQ6Om9wdGlvbmFsPFNhbmRib3hFeHRlbnNpb246OkhhbmRsZT4g
aGFuZGxlOwogICAgICAgICBkZWNvZGVyID4+IGhhbmRsZTsKICAgICAgICAgaWYgKCFoYW5kbGUp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OwogICAgICAgICBoYW5kbGVzW2ldID0gV1RGTW92ZSgqaGFuZGxlKTsKICAgICB9Ci0gICAg
cmV0dXJuIHRydWU7CisgICAgcmV0dXJuIFdURk1vdmUoaGFuZGxlcyk7CiB9CiAKIFJlZlB0cjxT
YW5kYm94RXh0ZW5zaW9uPiBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGUoSGFuZGxlJiYgaGFuZGxl
KQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1By
b3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05l
dHdvcmtQcm9jZXNzUHJveHkuY3BwCShyZXZpc2lvbiAyMzcyNTkpCisrKyBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02OTIsNyArNjkyLDcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpzZW5kUHJvY2Vz
c0RpZAogfQogCiAjaWYgRU5BQkxFKFNBTkRCT1hfRVhURU5TSU9OUykKLXZvaWQgTmV0d29ya1By
b2Nlc3NQcm94eTo6Z2V0U2FuZGJveEV4dGVuc2lvbnNGb3JCbG9iRmlsZXModWludDY0X3QgcmVx
dWVzdElELCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGF0aHMpCit2b2lkIE5ldHdvcmtQcm9jZXNz
UHJveHk6OmdldFNhbmRib3hFeHRlbnNpb25zRm9yQmxvYkZpbGVzKGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBwYXRocywgTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OkdldFNhbmRib3hFeHRl
bnNpb25zRm9yQmxvYkZpbGVzOjpBc3luY1JlcGx5JiYgcmVwbHkpCiB7CiAgICAgU2FuZGJveEV4
dGVuc2lvbjo6SGFuZGxlQXJyYXkgZXh0ZW5zaW9uczsKICAgICBleHRlbnNpb25zLmFsbG9jYXRl
KHBhdGhzLnNpemUoKSk7CkBAIC03MDAsOCArNzAwLDcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1By
b3h5OjpnZXRTYW5kYm94RXh0ZQogICAgICAgICAvLyBSZWFkV3JpdGUgaXMgcmVxdWlyZWQgZm9y
IGNyZWF0aW5nIGhhcmQgbGlua3MsIHdoaWNoIGlzIHNvbWV0aGluZyB0aGF0IG1pZ2h0IGJlIGRv
bmUgd2l0aCB0aGVzZSBleHRlbnNpb25zLgogICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVh
dGVIYW5kbGUocGF0aHNbaV0sIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwgZXh0
ZW5zaW9uc1tpXSk7CiAgICAgfQotICAgIAotICAgIHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpEaWRHZXRTYW5kYm94RXh0ZW5zaW9uc0ZvckJsb2JGaWxlcyhyZXF1ZXN0SUQsIGV4dGVu
c2lvbnMpLCAwKTsKKyAgICByZXBseShXVEZNb3ZlKGV4dGVuc2lvbnMpKTsKIH0KICNlbmRpZgog
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJv
eHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdv
cmtQcm9jZXNzUHJveHkuaAkocmV2aXNpb24gMjM3MjU5KQorKysgU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTMw
LDYgKzMwLDcgQEAKICNpZiBFTkFCTEUoTEVHQUNZX0NVU1RPTV9QUk9UT0NPTF9NQU5BR0VSKQog
I2luY2x1ZGUgIkxlZ2FjeUN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5LmgiCiAjZW5kaWYKKyNp
bmNsdWRlICJOZXR3b3JrUHJvY2Vzc1Byb3h5TWVzc2FnZXMuaCIKICNpbmNsdWRlICJQcm9jZXNz
TGF1bmNoZXIuaCIKICNpbmNsdWRlICJQcm9jZXNzVGhyb3R0bGVyLmgiCiAjaW5jbHVkZSAiUHJv
Y2Vzc1Rocm90dGxlckNsaWVudC5oIgpAQCAtMTU2LDcgKzE1Nyw3IEBAIHByaXZhdGU6CiAjZW5k
aWYKIAogI2lmIEVOQUJMRShTQU5EQk9YX0VYVEVOU0lPTlMpCi0gICAgdm9pZCBnZXRTYW5kYm94
RXh0ZW5zaW9uc0ZvckJsb2JGaWxlcyh1aW50NjRfdCByZXF1ZXN0SUQsIGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiBwYXRocyk7CisgICAgdm9pZCBnZXRTYW5kYm94RXh0ZW5zaW9uc0ZvckJsb2JGaWxl
cyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGF0aHMsIE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzc1By
b3h5OjpHZXRTYW5kYm94RXh0ZW5zaW9uc0ZvckJsb2JGaWxlczo6QXN5bmNSZXBseSYmKTsKICNl
bmRpZgogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQpJbmRleDogU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Lm1lc3NhZ2VzLmluCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94
eS5tZXNzYWdlcy5pbgkocmV2aXNpb24gMjM3MjU5KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Lm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkp
CkBAIC01Niw3ICs1Niw3IEBAIG1lc3NhZ2VzIC0+IE5ldHdvcmtQcm9jZXNzUHJveHkgTGVnYWN5
UmUKICAgICBSZXRyaWV2ZUNhY2hlU3RvcmFnZVBhcmFtZXRlcnMoUEFMOjpTZXNzaW9uSUQgc2Vz
c2lvbklEKQogCiAjaWYgRU5BQkxFKFNBTkRCT1hfRVhURU5TSU9OUykKLSAgICBHZXRTYW5kYm94
RXh0ZW5zaW9uc0ZvckJsb2JGaWxlcyh1aW50NjRfdCByZXF1ZXN0SUQsIFZlY3RvcjxTdHJpbmc+
IHBhdGhzKQorICAgIEdldFNhbmRib3hFeHRlbnNpb25zRm9yQmxvYkZpbGVzKFZlY3RvcjxTdHJp
bmc+IHBhdGhzKSAtPiAoV2ViS2l0OjpTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheSBleHRl
bnNpb25zKSBBc3luYwogI2VuZGlmCiAKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCkluZGV4
OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTWVkaWFTdHJlYW0vTWVkaWFEZXZpY2VTYW5kYm94
RXh0ZW5zaW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL01l
ZGlhU3RyZWFtL01lZGlhRGV2aWNlU2FuZGJveEV4dGVuc2lvbnMuY3BwCShyZXZpc2lvbiAyMzcy
NTkpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTWVkaWFTdHJlYW0vTWVkaWFEZXZpY2VT
YW5kYm94RXh0ZW5zaW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDggKzUwLDExIEBAIGJv
b2wgTWVkaWFEZXZpY2VTYW5kYm94RXh0ZW5zaW9uczo6ZGVjb2QKICAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKHJlc3VsdC5tX2lkcykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmICgh
U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlQXJyYXk6OmRlY29kZShkZWNvZGVyLCByZXN1bHQubV9o
YW5kbGVzKSkKKyAgICBzdGQ6Om9wdGlvbmFsPFNhbmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5
PiBoYW5kbGVzOworICAgIGRlY29kZXIgPj4gaGFuZGxlczsKKyAgICBpZiAoIWhhbmRsZXMpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXN1bHQubV9oYW5kbGVzID0gV1RGTW92ZSgqaGFu
ZGxlcyk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0K
</data>
<flag name="review"
          id="370034"
          type_id="1"
          status="+"
          setter="thorton"
    />
          </attachment>
      

    </bug>

</bugzilla>