<?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>176659</bug_id>
          
          <creation_ts>2017-09-09 11:19:12 -0700</creation_ts>
          <short_desc>Finish off the FormData implementation</short_desc>
          <delta_ts>2017-09-27 12:48:24 -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>https://xhr.spec.whatwg.org/#interface-formdata</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="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>ap</cc>
    
    <cc>cdumez</cc>
    
    <cc>darin</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1347137</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-09-09 11:19:12 -0700</bug_when>
    <thetext>Looks like we have a partial implementation of FormData (https://xhr.spec.whatwg.org/#interface-formdata). Pretty easy spec, so let&apos;s finish it off.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1347164</commentid>
    <comment_count>1</comment_count>
      <attachid>320360</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-09-09 14:53:51 -0700</bug_when>
    <thetext>Created attachment 320360
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1347181</commentid>
    <comment_count>2</comment_count>
      <attachid>320366</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-09-09 17:11:11 -0700</bug_when>
    <thetext>Created attachment 320366
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1347190</commentid>
    <comment_count>3</comment_count>
      <attachid>320370</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-09-09 18:19:53 -0700</bug_when>
    <thetext>Created attachment 320370
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1347264</commentid>
    <comment_count>4</comment_count>
      <attachid>320370</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-09-10 12:34:29 -0700</bug_when>
    <thetext>Comment on attachment 320370
Patch

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

Is it OK that all these functions are inefficient if there are a huge numbers of elements, because this is a vector and not an associative data structure?

&gt; Source/WebCore/fileapi/Blob.cpp:82
&gt; +Blob::Blob(const Blob&amp; blob)

Where is this new function used? Given that it seems that a Blob is both reference counted and immutable, I don’t understand when we need to copy one. Nor can I spot it reading the code.

&gt; Source/WebCore/html/DOMFormData.cpp:72
&gt; +}
&gt; +auto DOMFormData::get(const String&amp; name) -&gt; std::optional&lt;FormDataEntryValue&gt;

Missing blank line.

&gt; Source/WebCore/html/DOMFormData.cpp:126
&gt; +    return WTF::KeyValuePair&lt;String, FormDataEntryValue&gt; { item.key(), item.data() };

Should we add a makeKeyValuePair function so we don’t have to write out types in a case like this?

&gt; Source/WebCore/html/DOMFormData.idl:33
&gt; +// FIXME: Should be Exposed=(Window,Worker)

Would be nice to have the comment explain what this is waiting on.

&gt; Source/WebCore/html/FormDataList.cpp:44
&gt; +        auto file = File::create(blob.get(), filename.isNull() ? ASCIILiteral(&quot;blob&quot;) : filename);
&gt; +        return { key, WTFMove(file) };

Do this as a one-liner? It would only be 4 characters longer than the File::create line.

&gt; Source/WebCore/html/FormDataList.cpp:49
&gt; +        auto file = File::create(downcast&lt;File&gt;(blob.get()), filename);
&gt; +        return { key, WTFMove(file) };

Ditto.

&gt; Source/WebCore/html/FormDataList.cpp:71
&gt; +template&lt;typename EntryMaker&gt;
&gt; +void FormDataList::set(const String&amp; key, const EntryMaker&amp; entryMaker)

Looking at the logic below, it seems that EntryMaker is always called, and there is no ordering issue due to side effects that I can see. Thus, I think this function could take an Item&amp;&amp; instead and would not need to be a template.

&gt; Source/WebCore/html/FormDataList.cpp:73
&gt; +    size_t initialMatchLocation = WTF::notFound;

I suggest we use std::optional for clarity instead of WTF::notFound.

&gt; Source/WebCore/html/FormDataList.cpp:79
&gt; +            m_items[i] = entryMaker();

This would be easier to read if the loop was kept as a pure &quot;findKey&quot; operation.

Could move this one line of code into the if statement below instead of putting it inside the loop. I can’t think of a good reason to have some of work inside the loop and some outside.

&gt; Source/WebCore/html/FormDataList.h:32
&gt;      class Item {

Seems like this should be a struct instead of a class now. Unless we think Variant is so inconvenient to work with that we want to hide it behind &quot;private&quot;.

&gt; Source/WebCore/html/FormDataList.h:66
&gt; +    CString normalizeString(const String&amp;) const;

Seems a little strange now that we hold a TextEncoding just so that clients can explicitly call normalizeString. Is m_encoding used for anything else? Is there a more elegant way to arrange things?

&gt; Source/WebCore/html/HTMLKeygenElement.cpp:126
&gt; +    encoded_values.appendData(name(), value);

Could save one little reference count churn if a version that took String&amp;&amp; existed. Probably not worth it.

Does this fix a bug because we use the proper TextEncoding now rather than always UTF-8? Or is this always going to be an ASCII string and so it doesn’t matter what encoding is used?

&gt; Source/WebCore/platform/network/FormData.cpp:209
&gt; +                        String generatedFileName;
&gt; +                        shouldGenerateFile = page-&gt;chrome().client().shouldReplaceWithGeneratedFileForUpload(path, generatedFileName);

Should come back and change the ChromeClient function to use a return value instead of an out argument. A boolean plus a String out argument seems out of style in our code these days. Not sure what is ideal, though. Maybe std::optional&lt;String&gt;? Or even just String using null string or empty string to mean false, but we always could have done that.

&gt; Source/WebCore/platform/network/FormData.cpp:231
&gt; +                auto file = WTF::get&lt;RefPtr&lt;File&gt;&gt;(item.data());

I would have written &quot;auto&amp; file = *WTF::get ...&quot; here and had the local variable be a File&amp; instead of a guaranteed non-null RefPtr&lt;File&gt;.

&gt; Source/WebCore/platform/network/FormData.cpp:233
&gt; +                if (!file-&gt;path().isEmpty())
&gt; +                    appendFile(file-&gt;path(), shouldGenerateFile);

It is a bit awkward that we have to check holds_alternative&lt;RefPtr&lt;File&gt;&gt; and then file-&gt;path().isEmpty() again here, and then rely on the fact that the side effect of calling shouldReplaceWithGeneratedFileForUpload is in sync with this code. I wonder if there’s any way to tie the code above to the code down here in a tighter way. Annoying to re-do all the same conditionals after just two lines of unconditional code.

It’s mainly because the append functions have to be in a certain order because they have side effects, I think.

Similar problem with the various isMultipartForm. I think there is some improvement possible here at some point with some additional refactoring.

&gt; Source/WebCore/platform/network/FormData.cpp:237
&gt; +                auto normalizedStingData = list.normalizeString(WTF::get&lt;String&gt;(item.data()));

Typo here: &quot;Sting&quot;.

&gt; Source/WebCore/platform/network/FormData.cpp:244
&gt; +            auto normalizedStingData = list.normalizeString(WTF::get&lt;String&gt;(item.data()));

Typo here: &quot;Sting&quot;.

&gt; Source/WebCore/platform/network/FormData.cpp:260
&gt; +    auto&amp; e = m_elements.last();

Amazed that you resisted the impulse to rename this lastElement.

&gt; Source/WebCore/platform/network/FormData.cpp:262
&gt;      e.m_data.grow(oldSize + size);

This math seems like it needs an overflow check or an explanation of why it doesn’t need one.

&gt; Source/WebCore/platform/network/FormData.cpp:275
&gt;      }
&gt; +    
&gt; +    return data;

Seems a bit strange to have this one blank line in this function.

&gt; Source/WebCore/platform/network/FormData.cpp:312
&gt; +    for (const auto&amp; element : m_elements) {

I would have just done &quot;auto&amp;&quot;; I don’t think it adds much clarity to state const.

&gt; Source/WebCore/platform/network/FormData.cpp:327
&gt; +    for (const auto&amp; element : m_elements) {

Ditto.

&gt; Source/WebCore/platform/network/FormData.cpp:361
&gt; +    for (const auto&amp; element : m_elements) {

I would have just done auto&amp; here; it will be const either way since this is a const member function, no need to state it explicitly.

&gt; Source/WebCore/platform/network/FormData.cpp:370
&gt; +    for (const auto&amp; element : m_elements) {

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1347278</commentid>
    <comment_count>5</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-09-10 13:57:47 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #4)
&gt; Comment on attachment 320370 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=320370&amp;action=review
&gt; 
&gt; Is it OK that all these functions are inefficient if there are a huge
&gt; numbers of elements, because this is a vector and not an associative data
&gt; structure?

That&apos;s an interesting question, and one I don&apos;t have a great answer for. I would guess the use case for this object would remain mostly append, and relatively small number of elements, but that often ends up being a bad assumption.

I&apos;ll think a bit more about it, and look at what converting this (and maybe also URLSearchParams which is very similar) to use a ListHashSet. 

&gt; 
&gt; &gt; Source/WebCore/fileapi/Blob.cpp:82
&gt; &gt; +Blob::Blob(const Blob&amp; blob)
&gt; 
&gt; Where is this new function used? Given that it seems that a Blob is both
&gt; reference counted and immutable, I don’t understand when we need to copy
&gt; one. Nor can I spot it reading the code.

This is used from the File constructor that takes a const Blob&amp;. Blob and File are refcounted, these aren&apos;t really acting as copy constructors, but rather, this constructor creates a Blob that references the passed in Blob (or at least references it&apos;s URL, in the way Blobs do). 

&gt; 
&gt; &gt; Source/WebCore/html/DOMFormData.cpp:72
&gt; &gt; +}
&gt; &gt; +auto DOMFormData::get(const String&amp; name) -&gt; std::optional&lt;FormDataEntryValue&gt;
&gt; 
&gt; Missing blank line.

Will fix.

&gt; 
&gt; &gt; Source/WebCore/html/DOMFormData.cpp:126
&gt; &gt; +    return WTF::KeyValuePair&lt;String, FormDataEntryValue&gt; { item.key(), item.data() };
&gt; 
&gt; Should we add a makeKeyValuePair function so we don’t have to write out
&gt; types in a case like this?

Yes. Will do in a follow up.

&gt; 
&gt; &gt; Source/WebCore/html/DOMFormData.idl:33
&gt; &gt; +// FIXME: Should be Exposed=(Window,Worker)
&gt; 
&gt; Would be nice to have the comment explain what this is waiting on.

Indeed. I&apos;ll also file a bug and reference it.

&gt; 
&gt; &gt; Source/WebCore/html/FormDataList.cpp:44
&gt; &gt; +        auto file = File::create(blob.get(), filename.isNull() ? ASCIILiteral(&quot;blob&quot;) : filename);
&gt; &gt; +        return { key, WTFMove(file) };
&gt; 
&gt; Do this as a one-liner? It would only be 4 characters longer than the
&gt; File::create line.

Will do.

&gt; 
&gt; &gt; Source/WebCore/html/FormDataList.cpp:49
&gt; &gt; +        auto file = File::create(downcast&lt;File&gt;(blob.get()), filename);
&gt; &gt; +        return { key, WTFMove(file) };
&gt; 
&gt; Ditto.


Will do.

&gt; 
&gt; &gt; Source/WebCore/html/FormDataList.cpp:71
&gt; &gt; +template&lt;typename EntryMaker&gt;
&gt; &gt; +void FormDataList::set(const String&amp; key, const EntryMaker&amp; entryMaker)
&gt; 
&gt; Looking at the logic below, it seems that EntryMaker is always called, and
&gt; there is no ordering issue due to side effects that I can see. Thus, I think
&gt; this function could take an Item&amp;&amp; instead and would not need to be a
&gt; template.

Nice. I wonder what I was thinking. 

&gt; 
&gt; &gt; Source/WebCore/html/FormDataList.cpp:73
&gt; &gt; +    size_t initialMatchLocation = WTF::notFound;
&gt; 
&gt; I suggest we use std::optional for clarity instead of WTF::notFound.

Will do.

&gt; 
&gt; &gt; Source/WebCore/html/FormDataList.cpp:79
&gt; &gt; +            m_items[i] = entryMaker();
&gt; 
&gt; This would be easier to read if the loop was kept as a pure &quot;findKey&quot;
&gt; operation.
&gt; 
&gt; Could move this one line of code into the if statement below instead of
&gt; putting it inside the loop. I can’t think of a good reason to have some of
&gt; work inside the loop and some outside.
&gt; 
&gt; &gt; Source/WebCore/html/FormDataList.h:32
&gt; &gt;      class Item {
&gt; 
&gt; Seems like this should be a struct instead of a class now. Unless we think
&gt; Variant is so inconvenient to work with that we want to hide it behind
&gt; &quot;private&quot;.
&gt; 
&gt; &gt; Source/WebCore/html/FormDataList.h:66
&gt; &gt; +    CString normalizeString(const String&amp;) const;
&gt; 
&gt; Seems a little strange now that we hold a TextEncoding just so that clients
&gt; can explicitly call normalizeString. Is m_encoding used for anything else?
&gt; Is there a more elegant way to arrange things?

Not sure. I was hoping when I merged DOMFormData and FormDataList a solution would emerge. My guess is we can just pass the encoding to FormData with the DOMFormData, but I&apos;ll have to work that out.

&gt; 
&gt; &gt; Source/WebCore/html/HTMLKeygenElement.cpp:126
&gt; &gt; +    encoded_values.appendData(name(), value);
&gt; 
&gt; Could save one little reference count churn if a version that took String&amp;&amp;
&gt; existed. Probably not worth it.
&gt; 
&gt; Does this fix a bug because we use the proper TextEncoding now rather than
&gt; always UTF-8? Or is this always going to be an ASCII string and so it
&gt; doesn’t matter what encoding is used?

It was always ASCII (a base-64 encoded string), so it didn&apos;t matter.

&gt; 
&gt; &gt; Source/WebCore/platform/network/FormData.cpp:209
&gt; &gt; +                        String generatedFileName;
&gt; &gt; +                        shouldGenerateFile = page-&gt;chrome().client().shouldReplaceWithGeneratedFileForUpload(path, generatedFileName);
&gt; 
&gt; Should come back and change the ChromeClient function to use a return value
&gt; instead of an out argument. A boolean plus a String out argument seems out
&gt; of style in our code these days. Not sure what is ideal, though. Maybe
&gt; std::optional&lt;String&gt;? Or even just String using null string or empty string
&gt; to mean false, but we always could have done that.

Totally. I need to change all this so it can work with Workers, so I tried not to touch it in this round.

&gt; 
&gt; &gt; Source/WebCore/platform/network/FormData.cpp:231
&gt; &gt; +                auto file = WTF::get&lt;RefPtr&lt;File&gt;&gt;(item.data());
&gt; 
&gt; I would have written &quot;auto&amp; file = *WTF::get ...&quot; here and had the local
&gt; variable be a File&amp; instead of a guaranteed non-null RefPtr&lt;File&gt;.

Good call.

&gt; 
&gt; &gt; Source/WebCore/platform/network/FormData.cpp:233
&gt; &gt; +                if (!file-&gt;path().isEmpty())
&gt; &gt; +                    appendFile(file-&gt;path(), shouldGenerateFile);
&gt; 
&gt; It is a bit awkward that we have to check holds_alternative&lt;RefPtr&lt;File&gt;&gt;
&gt; and then file-&gt;path().isEmpty() again here, and then rely on the fact that
&gt; the side effect of calling shouldReplaceWithGeneratedFileForUpload is in
&gt; sync with this code. I wonder if there’s any way to tie the code above to
&gt; the code down here in a tighter way. Annoying to re-do all the same
&gt; conditionals after just two lines of unconditional code.
&gt; 
&gt; It’s mainly because the append functions have to be in a certain order
&gt; because they have side effects, I think.
&gt; 
&gt; Similar problem with the various isMultipartForm. I think there is some
&gt; improvement possible here at some point with some additional refactoring.

Yeah, this code is asking for a bath :).

&gt; 
&gt; &gt; Source/WebCore/platform/network/FormData.cpp:237
&gt; &gt; +                auto normalizedStingData = list.normalizeString(WTF::get&lt;String&gt;(item.data()));
&gt; 
&gt; Typo here: &quot;Sting&quot;.

Will fix.

&gt; 
&gt; &gt; Source/WebCore/platform/network/FormData.cpp:244
&gt; &gt; +            auto normalizedStingData = list.normalizeString(WTF::get&lt;String&gt;(item.data()));
&gt; 
&gt; Typo here: &quot;Sting&quot;.
&gt; 
&gt; &gt; Source/WebCore/platform/network/FormData.cpp:260
&gt; &gt; +    auto&amp; e = m_elements.last();
&gt; 
&gt; Amazed that you resisted the impulse to rename this lastElement.

Me too. I renamed so many other single letter variables.

&gt; 
&gt; &gt; Source/WebCore/platform/network/FormData.cpp:262
&gt; &gt;      e.m_data.grow(oldSize + size);
&gt; 
&gt; This math seems like it needs an overflow check or an explanation of why it
&gt; doesn’t need one.

Hm. I will investigate it.

&gt; 
&gt; &gt; Source/WebCore/platform/network/FormData.cpp:275
&gt; &gt;      }
&gt; &gt; +    
&gt; &gt; +    return data;
&gt; 
&gt; Seems a bit strange to have this one blank line in this function.

Will fix.

&gt; 
&gt; &gt; Source/WebCore/platform/network/FormData.cpp:312
&gt; &gt; +    for (const auto&amp; element : m_elements) {
&gt; 
&gt; I would have just done &quot;auto&amp;&quot;; I don’t think it adds much clarity to state
&gt; const.
&gt; 
&gt; &gt; Source/WebCore/platform/network/FormData.cpp:327
&gt; &gt; +    for (const auto&amp; element : m_elements) {
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt; Source/WebCore/platform/network/FormData.cpp:361
&gt; &gt; +    for (const auto&amp; element : m_elements) {
&gt; 
&gt; I would have just done auto&amp; here; it will be const either way since this is
&gt; a const member function, no need to state it explicitly.
&gt; 
&gt; &gt; Source/WebCore/platform/network/FormData.cpp:370
&gt; &gt; +    for (const auto&amp; element : m_elements) {
&gt; 
&gt; Ditto.

Will fix.


Thanks so much for the review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1347280</commentid>
    <comment_count>6</comment_count>
      <attachid>320370</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-09-10 14:15:47 -0700</bug_when>
    <thetext>Comment on attachment 320370
Patch

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

&gt;&gt;&gt; Source/WebCore/fileapi/Blob.cpp:82
&gt;&gt;&gt; +Blob::Blob(const Blob&amp; blob)
&gt;&gt; 
&gt;&gt; Where is this new function used? Given that it seems that a Blob is both reference counted and immutable, I don’t understand when we need to copy one. Nor can I spot it reading the code.
&gt; 
&gt; This is used from the File constructor that takes a const Blob&amp;. Blob and File are refcounted, these aren&apos;t really acting as copy constructors, but rather, this constructor creates a Blob that references the passed in Blob (or at least references it&apos;s URL, in the way Blobs do).

I still don’t understand. Why can’t we just use the original Blob in that case instead of making a new one? Do we need separate sets of custom properties when it’s web-exposed? Or some other reason?

&gt;&gt; Source/WebCore/html/FormDataList.h:32
&gt;&gt;      class Item {
&gt; 
&gt; Seems like this should be a struct instead of a class now. Unless we think Variant is so inconvenient to work with that we want to hide it behind &quot;private&quot;.

I noticed you did not respond to this one in either the negative or the affirmative. I hope that’s because you decided to do it and thought it was so obvious it did not even need to be mentioned.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1347281</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-09-10 14:17:21 -0700</bug_when>
    <thetext>(In reply to Sam Weinig from comment #5)
&gt; I&apos;ll think a bit more about it, and look at what converting this (and maybe
&gt; also URLSearchParams which is very similar) to use a ListHashSet. 

Sadly it seems this requires support for duplicate keys, and so I suspect ListHashSet won’t be usable as-is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1347287</commentid>
    <comment_count>8</comment_count>
      <attachid>320402</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-09-10 14:43:12 -0700</bug_when>
    <thetext>Created attachment 320402
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1347289</commentid>
    <comment_count>9</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-09-10 14:50:53 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #7)
&gt; (In reply to Sam Weinig from comment #5)
&gt; &gt; I&apos;ll think a bit more about it, and look at what converting this (and maybe
&gt; &gt; also URLSearchParams which is very similar) to use a ListHashSet. 
&gt; 
&gt; Sadly it seems this requires support for duplicate keys, and so I suspect
&gt; ListHashSet won’t be usable as-is.

Oh darn, good point.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1347297</commentid>
    <comment_count>10</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-09-10 15:07:59 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #6)
&gt; Comment on attachment 320370 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=320370&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/fileapi/Blob.cpp:82
&gt; &gt;&gt;&gt; +Blob::Blob(const Blob&amp; blob)
&gt; &gt;&gt; 
&gt; &gt;&gt; Where is this new function used? Given that it seems that a Blob is both reference counted and immutable, I don’t understand when we need to copy one. Nor can I spot it reading the code.
&gt; &gt; 
&gt; &gt; This is used from the File constructor that takes a const Blob&amp;. Blob and File are refcounted, these aren&apos;t really acting as copy constructors, but rather, this constructor creates a Blob that references the passed in Blob (or at least references it&apos;s URL, in the way Blobs do).
&gt; 
&gt; I still don’t understand. Why can’t we just use the original Blob in that
&gt; case instead of making a new one? Do we need separate sets of custom
&gt; properties when it’s web-exposed? Or some other reason?

Oh. Yeah, we need to convert the Blob into a File per https://xhr.spec.whatwg.org/#create-an-entry (specifically step 3 &quot;If value is a Blob object and not a File object, then set value to a new File object, representing the same bytes, whose name attribute value is &quot;blob&quot;.&quot;). This is web visible, since you can append a Blob, but then when you go an inspect what you just appended, it needs to be a file.  

&gt; 
&gt; &gt;&gt; Source/WebCore/html/FormDataList.h:32
&gt; &gt;&gt;      class Item {
&gt; &gt; 
&gt; &gt; Seems like this should be a struct instead of a class now. Unless we think Variant is so inconvenient to work with that we want to hide it behind &quot;private&quot;.
&gt; 
&gt; I noticed you did not respond to this one in either the negative or the
&gt; affirmative. I hope that’s because you decided to do it and thought it was
&gt; so obvious it did not even need to be mentioned.

Oops, sorry. Yeah, I made it a struct.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1347307</commentid>
    <comment_count>11</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-09-10 15:57:01 -0700</bug_when>
    <thetext>Committed r221839: &lt;http://trac.webkit.org/changeset/221839&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1347632</commentid>
    <comment_count>12</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-09-11 14:47:11 -0700</bug_when>
    <thetext>Hey Sam:

[2201/4301] Building CXX object Source...keFiles/WebCore.dir/fileapi/Blob.cpp.o
../../Source/WebCore/fileapi/Blob.cpp: In copy constructor ‘WebCore::Blob::Blob(const WebCore::Blob&amp;)’:
../../Source/WebCore/fileapi/Blob.cpp:82:1: warning: base class ‘class WTF::RefCounted&lt;WebCore::Blob&gt;’ should be explicitly initialized in the copy constructor [-Wextra]
 Blob::Blob(const Blob&amp; blob)
 ^~~~</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1347650</commentid>
    <comment_count>13</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-09-11 15:07:25 -0700</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #12)
&gt; Hey Sam:
&gt; 
&gt; [2201/4301] Building CXX object
&gt; Source...keFiles/WebCore.dir/fileapi/Blob.cpp.o
&gt; ../../Source/WebCore/fileapi/Blob.cpp: In copy constructor
&gt; ‘WebCore::Blob::Blob(const WebCore::Blob&amp;)’:
&gt; ../../Source/WebCore/fileapi/Blob.cpp:82:1: warning: base class ‘class
&gt; WTF::RefCounted&lt;WebCore::Blob&gt;’ should be explicitly initialized in the copy
&gt; constructor [-Wextra]
&gt;  Blob::Blob(const Blob&amp; blob)
&gt;  ^~~~

What compiler / port is that?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1347697</commentid>
    <comment_count>14</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-09-11 16:02:16 -0700</bug_when>
    <thetext>GCC 7.1.1

It&apos;s WebKitGTK+, but that shouldn&apos;t matter....</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1347707</commentid>
    <comment_count>15</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-09-11 16:13:08 -0700</bug_when>
    <thetext>So I think the problem is that Blob and File are supposed to be noncopyable, because they are RefCounted, but you have defined copy constructors for them. I won&apos;t roll this out, but reopening for follow-up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1347941</commentid>
    <comment_count>16</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-09-12 09:48:37 -0700</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #15)
&gt; So I think the problem is that Blob and File are supposed to be noncopyable,
&gt; because they are RefCounted, but you have defined copy constructors for
&gt; them. I won&apos;t roll this out, but reopening for follow-up.

Thanks. I&apos;ll post a fix shortly.

Separately, it would be good to get this warning enabled on one (or as many as support it) of the EWS bots.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1348003</commentid>
    <comment_count>17</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-09-12 13:03:59 -0700</bug_when>
    <thetext>Fix landed in r221936.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1348097</commentid>
    <comment_count>18</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-09-12 16:47:05 -0700</bug_when>
    <thetext>Let me know if its still an issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1353663</commentid>
    <comment_count>19</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-09-27 12:48:24 -0700</bug_when>
    <thetext>&lt;rdar://problem/34694059&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>320360</attachid>
            <date>2017-09-09 14:53:51 -0700</date>
            <delta_ts>2017-09-09 15:57:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-176659-20170909145350.patch</filename>
            <type>text/plain</type>
            <size>55512</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMTgyNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY3IEBACisyMDE3LTA5LTA5ICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgRmluaXNoIG9mZiB0aGUgRm9ybURhdGEg
aW1wbGVtZW50YXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE3NjY1OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogZmlsZWFwaS9CbG9iLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6OkJsb2Ip
OgorICAgICAgICAqIGZpbGVhcGkvQmxvYi5oOgorICAgICAgICAqIGZpbGVhcGkvRmlsZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGaWxlOjpGaWxlKToKKyAgICAgICAgKiBmaWxlYXBpL0ZpbGUu
aDoKKyAgICAgICAgKiBodG1sL0RPTUZvcm1EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRP
TUZvcm1EYXRhOjpyZW1vdmUpOgorICAgICAgICAoV2ViQ29yZTo6dG9TdHJpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6RE9NRm9ybURhdGE6OmdldCk6CisgICAgICAgIChXZWJDb3JlOjpET01Gb3Jt
RGF0YTo6Z2V0QWxsKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTUZvcm1EYXRhOjpoYXMpOgorICAg
ICAgICAoV2ViQ29yZTo6RE9NRm9ybURhdGE6OnNldCk6CisgICAgICAgIChXZWJDb3JlOjpET01G
b3JtRGF0YTo6SXRlcmF0b3I6Okl0ZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTUZvcm1E
YXRhOjpJdGVyYXRvcjo6bmV4dCk6CisgICAgICAgICogaHRtbC9ET01Gb3JtRGF0YS5oOgorICAg
ICAgICAoV2ViQ29yZTo6RE9NRm9ybURhdGE6OmFwcGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpE
T01Gb3JtRGF0YTo6c2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkRPTUZvcm1EYXRhOjpjcmVhdGVJ
dGVyYXRvcik6CisgICAgICAgICogaHRtbC9ET01Gb3JtRGF0YS5pZGw6CisgICAgICAgICogaHRt
bC9Gb3JtRGF0YUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGFMaXN0Ojpub3Jt
YWxpemVTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGFMaXN0OjpjcmVhdGVGaWxl
RW50cnkpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGFMaXN0OjphcHBlbmREYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhTGlzdDo6YXBwZW5kQmxvYik6CisgICAgICAgIChXZWJD
b3JlOjpGb3JtRGF0YUxpc3Q6OnNldCk6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YUxpc3Q6
OnNldERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGFMaXN0OjpzZXRCbG9iKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhTGlzdDo6YXBwZW5kU3RyaW5nKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBodG1sL0Zvcm1EYXRhTGlzdC5oOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGFM
aXN0OjpJdGVtOjpJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhTGlzdDo6SXRlbTo6
a2V5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhTGlzdDo6SXRlbTo6ZGF0YSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YUxpc3Q6Okl0ZW06OmZpbGUgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGFMaXN0OjphcHBlbmRCbG9iKToKKyAgICAgICAg
KFdlYkNvcmU6OkZvcm1EYXRhTGlzdDo6c2V0QmxvYik6CisgICAgICAgIChXZWJDb3JlOjpGb3Jt
RGF0YUxpc3Q6Okl0ZW06OmJsb2IgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
Rm9ybURhdGFMaXN0OjpJdGVtOjpmaWxlbmFtZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGb3JtRGF0YUxpc3Q6OmFwcGVuZERhdGEpOiBEZWxldGVkLgorICAgICAgICAqIGlu
c3BlY3Rvci9JbnNwZWN0b3JOZXR3b3JrQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YnVp
bGRPYmplY3RGb3JSZXNvdXJjZVJlcXVlc3QpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsv
Rm9ybURhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGE6OkZvcm1EYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9y
bURhdGE6OmNyZWF0ZU11bHRpUGFydCk6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YTo6YXBw
ZW5kS2V5VmFsdWVQYWlySXRlbXMpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGE6OmV4cGFu
ZERhdGFTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YTo6ZmxhdHRlbiBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YTo6ZmxhdHRlblRvU3RyaW5nIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OmFwcGVuZEJsb2JSZXNvbHZlZCk6CisgICAgICAgIChXZWJDb3JlOjpG
b3JtRGF0YTo6cmVzb2x2ZUJsb2JSZWZlcmVuY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1E
YXRhOjpnZW5lcmF0ZUZpbGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhOjpoYXNHZW5l
cmF0ZWRGaWxlcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YTo6aGFzT3duZWRH
ZW5lcmF0ZWRGaWxlcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YTo6cmVtb3Zl
R2VuZXJhdGVkRmlsZXNJZk5lZWRlZCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9Gb3Jt
RGF0YS5oOgorCiAyMDE3LTA5LTA5ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAog
ICAgICAgICBBdm9pZCBkdXBsaWNhdGUgY29tcHV0YXRpb25zIG9mIEV4ZWNTdGF0ZTo6dm0oKS4K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQmxvYi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9iLmNwcAkocmV2aXNpb24gMjIxODI3KQorKysgU291cmNl
L1dlYkNvcmUvZmlsZWFwaS9CbG9iLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzksNiArNzksMTQg
QEAgQmxvYjo6QmxvYigpCiAgICAgVGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6cmVnaXN0ZXJCbG9i
VVJMKG1faW50ZXJuYWxVUkwsIHsgfSwgIHsgfSk7CiB9CiAKK0Jsb2I6OkJsb2IoY29uc3QgQmxv
YiYgYmxvYikKKyAgICA6IG1faW50ZXJuYWxVUkwoQmxvYlVSTDo6Y3JlYXRlSW50ZXJuYWxVUkwo
KSkKKyAgICAsIG1fdHlwZShibG9iLnR5cGUoKSkKKyAgICAsIG1fc2l6ZShibG9iLnNpemUoKSkK
K3sKKyAgICBUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5OjpyZWdpc3RlckJsb2JVUkwobV9pbnRlcm5h
bFVSTCwgeyBCbG9iUGFydChibG9iLnVybCgpKSB9ICwgbV90eXBlKTsKK30KKwogQmxvYjo6Qmxv
YihWZWN0b3I8QmxvYlBhcnRWYXJpYW50PiYmIGJsb2JQYXJ0VmFyaWFudHMsIGNvbnN0IEJsb2JQ
cm9wZXJ0eUJhZyYgcHJvcGVydHlCYWcpCiAgICAgOiBtX2ludGVybmFsVVJMKEJsb2JVUkw6OmNy
ZWF0ZUludGVybmFsVVJMKCkpCiAgICAgLCBtX3R5cGUobm9ybWFsaXplZENvbnRlbnRUeXBlKHBy
b3BlcnR5QmFnLnR5cGUpKQpJbmRleDogU291cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9iLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9iLmgJKHJldmlzaW9uIDIyMTgy
NykKKysrIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQmxvYi5oCSh3b3JraW5nIGNvcHkpCkBAIC05
OCw2ICs5OCw3IEBAIHB1YmxpYzoKIAogcHJvdGVjdGVkOgogICAgIEJsb2IoKTsKKyAgICBCbG9i
KGNvbnN0IEJsb2ImKTsKICAgICBCbG9iKFZlY3RvcjxCbG9iUGFydFZhcmlhbnQ+JiYsIGNvbnN0
IEJsb2JQcm9wZXJ0eUJhZyYpOwogICAgIEJsb2IoVmVjdG9yPHVpbnQ4X3Q+JiYsIGNvbnN0IFN0
cmluZyYgY29udGVudFR5cGUpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZS5jcHAJKHJldmlz
aW9uIDIyMTgyNykKKysrIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTg1LDYgKzg1LDIzIEBAIEZpbGU6OkZpbGUoVmVjdG9yPEJsb2JQYXJ0VmFyaWFu
dD4mJiBibG8KIHsKIH0KIAorRmlsZTo6RmlsZShjb25zdCBCbG9iJiBibG9iLCBjb25zdCBTdHJp
bmcmIG5hbWUpCisgICAgOiBCbG9iKGJsb2IpCisgICAgLCBtX25hbWUobmFtZSkKK3sKKyAgICBB
U1NFUlQoIWJsb2IuaXNGaWxlKCkpOworfQorCitGaWxlOjpGaWxlKGNvbnN0IEZpbGUmIGZpbGUs
IGNvbnN0IFN0cmluZyYgbmFtZSkKKyAgICA6IEJsb2IoZmlsZSkKKyAgICAsIG1fcGF0aChmaWxl
LnBhdGgoKSkKKyAgICAsIG1fcmVsYXRpdmVQYXRoKGZpbGUucmVsYXRpdmVQYXRoKCkpCisgICAg
LCBtX25hbWUoIW5hbWUuaXNOdWxsKCkgPyBuYW1lIDogZmlsZS5uYW1lKCkpCisgICAgLCBtX292
ZXJyaWRlTGFzdE1vZGlmaWVkRGF0ZShmaWxlLm1fb3ZlcnJpZGVMYXN0TW9kaWZpZWREYXRlKQor
ICAgICwgbV9pc0RpcmVjdG9yeShmaWxlLmlzRGlyZWN0b3J5KCkpCit7Cit9CisKIGRvdWJsZSBG
aWxlOjpsYXN0TW9kaWZpZWQoKSBjb25zdAogewogICAgIGlmIChtX292ZXJyaWRlTGFzdE1vZGlm
aWVkRGF0ZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZS5oCShyZXZpc2lvbiAyMjE4MjcpCisrKyBT
b3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjUsNiArNjUs
MTYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGaWxlKHBhdGgsIG5h
bWVPdmVycmlkZSkpOwogICAgIH0KIAorICAgIHN0YXRpYyBSZWY8RmlsZT4gY3JlYXRlKGNvbnN0
IEJsb2ImIGJsb2IsIGNvbnN0IFN0cmluZyYgbmFtZSkKKyAgICB7CisgICAgICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IEZpbGUoYmxvYiwgbmFtZSkpOworICAgIH0KKworICAgIHN0YXRpYyBSZWY8
RmlsZT4gY3JlYXRlKGNvbnN0IEZpbGUmIGZpbGUsIGNvbnN0IFN0cmluZyYgbmFtZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZpbGUoZmlsZSwgbmFtZSkpOworICAgIH0K
KwogICAgIHN0YXRpYyBSZWY8RmlsZT4gY3JlYXRlV2l0aFJlbGF0aXZlUGF0aChjb25zdCBTdHJp
bmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgcmVsYXRpdmVQYXRoKTsKIAogICAgIGJvb2wgaXNGaWxl
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQpAQCAtODcsNiArOTcsOCBAQCBwcml2
YXRlOgogICAgIFdFQkNPUkVfRVhQT1JUIGV4cGxpY2l0IEZpbGUoY29uc3QgU3RyaW5nJiBwYXRo
KTsKICAgICBGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nJiBuYW1lT3ZlcnJp
ZGUpOwogICAgIEZpbGUoVmVjdG9yPEJsb2JQYXJ0VmFyaWFudD4mJiBibG9iUGFydFZhcmlhbnRz
LCBjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBQcm9wZXJ0eUJhZyYpOworICAgIEZpbGUo
Y29uc3QgQmxvYiYsIGNvbnN0IFN0cmluZyYgbmFtZSk7CisgICAgRmlsZShjb25zdCBGaWxlJiwg
Y29uc3QgU3RyaW5nJiBuYW1lKTsKIAogICAgIEZpbGUoRGVzZXJpYWxpemF0aW9uQ29udHJ1Y3Rv
ciwgY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBVUkwmIHNyY1VSTCwgY29uc3QgU3RyaW5nJiB0
eXBlLCBjb25zdCBTdHJpbmcmIG5hbWUpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0RP
TUZvcm1EYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0RPTUZvcm1E
YXRhLmNwcAkocmV2aXNpb24gMjIxODI3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9ET01Gb3Jt
RGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1LDQgKzY1LDkxIEBAIHZvaWQgRE9NRm9ybURh
dGE6OmFwcGVuZChjb25zdCBTdHJpbmcmIG4KICAgICAgICAgYXBwZW5kQmxvYihuYW1lLCBibG9i
LCBmaWxlbmFtZSk7CiB9CiAKK3ZvaWQgRE9NRm9ybURhdGE6OnJlbW92ZShjb25zdCBTdHJpbmcm
IG5hbWUpCit7CisgICAgYXV0byBub3JtYWxpemVkTmFtZSA9IG5vcm1hbGl6ZVN0cmluZyhuYW1l
KTsKKworICAgIG1faXRlbXMucmVtb3ZlQWxsTWF0Y2hpbmcoWyZub3JtYWxpemVkTmFtZV0gKGNv
bnN0IGF1dG8mIGl0ZW0pIHsKKyAgICAgICAgcmV0dXJuIGl0ZW0ua2V5KCkgPT0gbm9ybWFsaXpl
ZE5hbWU7CisgICAgfSk7Cit9CisKK3N0YXRpYyBTdHJpbmcgdG9TdHJpbmcoY29uc3QgQ1N0cmlu
ZyYgdmFsdWUpCit7CisgICAgcmV0dXJuIHsgdmFsdWUuYnVmZmVyKCktPmRhdGEoKSwgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KHZhbHVlLmJ1ZmZlcigpLT5sZW5ndGgoKSkgfTsKK30KKworYXV0byBE
T01Gb3JtRGF0YTo6Z2V0KGNvbnN0IFN0cmluZyYgbmFtZSkgLT4gc3RkOjpvcHRpb25hbDxGb3Jt
RGF0YUVudHJ5VmFsdWU+Cit7CisgICAgYXV0byBub3JtYWxpemVkTmFtZSA9IG5vcm1hbGl6ZVN0
cmluZyhuYW1lKTsKKworICAgIGZvciAoYXV0byYgaXRlbSA6IG1faXRlbXMpIHsKKyAgICAgICAg
aWYgKGl0ZW0ua2V5KCkgPT0gbm9ybWFsaXplZE5hbWUpIHsKKyAgICAgICAgICAgIGlmIChpdGVt
LmZpbGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gRm9ybURhdGFFbnRyeVZhbHVlIHsgUmVm
UHRyPEZpbGU+IHsgaXRlbS5maWxlKCkgfSB9OworICAgICAgICAgICAgcmV0dXJuIEZvcm1EYXRh
RW50cnlWYWx1ZSB7IHRvU3RyaW5nKGl0ZW0uZGF0YSgpKSB9OworICAgICAgICB9CisgICAgfQor
CisgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKK30KKworYXV0byBET01Gb3JtRGF0YTo6Z2V0QWxs
KGNvbnN0IFN0cmluZyYgbmFtZSkgLT4gVmVjdG9yPEZvcm1EYXRhRW50cnlWYWx1ZT4KK3sKKyAg
ICBhdXRvIG5vcm1hbGl6ZWROYW1lID0gbm9ybWFsaXplU3RyaW5nKG5hbWUpOworCisgICAgVmVj
dG9yPEZvcm1EYXRhRW50cnlWYWx1ZT4gcmVzdWx0OworCisgICAgZm9yIChhdXRvJiBpdGVtIDog
bV9pdGVtcykgeworICAgICAgICBpZiAoaXRlbS5rZXkoKSA9PSBub3JtYWxpemVkTmFtZSkgewor
ICAgICAgICAgICAgaWYgKGl0ZW0uZmlsZSgpKQorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBl
bmQoeyBSZWZQdHI8RmlsZT4geyBpdGVtLmZpbGUoKSB9IH0pOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoeyB0b1N0cmluZyhpdGVtLmRhdGEoKSkgfSk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitib29sIERPTUZv
cm1EYXRhOjpoYXMoY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGF1dG8gbm9ybWFsaXplZE5h
bWUgPSBub3JtYWxpemVTdHJpbmcobmFtZSk7CisKKyAgICBmb3IgKGF1dG8mIGl0ZW0gOiBtX2l0
ZW1zKSB7CisgICAgICAgIGlmIChpdGVtLmtleSgpID09IG5vcm1hbGl6ZWROYW1lKQorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBmYWxzZTsKK30KKwor
dm9pZCBET01Gb3JtRGF0YTo6c2V0KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2
YWx1ZSkKK3sKKyAgICBzZXREYXRhKG5hbWUsIHZhbHVlKTsKK30KKwordm9pZCBET01Gb3JtRGF0
YTo6c2V0KGNvbnN0IFN0cmluZyYgbmFtZSwgQmxvYiYgYmxvYiwgY29uc3QgU3RyaW5nJiBmaWxl
bmFtZSkKK3sKKyAgICBzZXRCbG9iKG5hbWUsIGJsb2IsIGZpbGVuYW1lKTsKK30KKworRE9NRm9y
bURhdGE6Okl0ZXJhdG9yOjpJdGVyYXRvcihET01Gb3JtRGF0YSYgdGFyZ2V0KQorICAgIDogbV90
YXJnZXQodGFyZ2V0KQoreworfQorCitzdGQ6Om9wdGlvbmFsPFdURjo6S2V5VmFsdWVQYWlyPFN0
cmluZywgRE9NRm9ybURhdGE6OkZvcm1EYXRhRW50cnlWYWx1ZT4+IERPTUZvcm1EYXRhOjpJdGVy
YXRvcjo6bmV4dCgpCit7CisgICAgYXV0byYgaXRlbXMgPSBtX3RhcmdldC0+aXRlbXMoKTsKKyAg
ICBpZiAobV9pbmRleCA+PSBpdGVtcy5zaXplKCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7CisKKyAgICBhdXRvJiBpdGVtID0gaXRlbXNbbV9pbmRleCsrXTsKKyAgICAKKyAgICBpZiAo
aXRlbS5maWxlKCkpCisgICAgICAgIHJldHVybiBXVEY6OktleVZhbHVlUGFpcjxTdHJpbmcsIEZv
cm1EYXRhRW50cnlWYWx1ZT4geyB0b1N0cmluZyhpdGVtLmtleSgpKSwgUmVmUHRyPEZpbGU+IHsg
aXRlbS5maWxlKCkgfSB9OworICAgIHJldHVybiBXVEY6OktleVZhbHVlUGFpcjxTdHJpbmcsIEZv
cm1EYXRhRW50cnlWYWx1ZT4geyB0b1N0cmluZyhpdGVtLmtleSgpKSwgdG9TdHJpbmcoaXRlbS5k
YXRhKCkpIH07Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2h0bWwvRE9NRm9ybURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L0RPTUZvcm1EYXRhLmgJKHJldmlzaW9uIDIyMTgyNykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwv
RE9NRm9ybURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTEgKzMyLDE1IEBACiAKICNpbmNs
dWRlICJGb3JtRGF0YUxpc3QuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUg
PHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8
d3RmL1ZhcmlhbnQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogY2xhc3MgQmxvYjsKK2NsYXNzIEZpbGU7CiBjbGFzcyBIVE1MRm9ybUVsZW1lbnQ7
CiBjbGFzcyBUZXh0RW5jb2Rpbmc7CiAKQEAgLTQ1LDggKzQ5LDI3IEBAIHB1YmxpYzoKICAgICBz
dGF0aWMgUmVmPERPTUZvcm1EYXRhPiBjcmVhdGUoSFRNTEZvcm1FbGVtZW50KiBmb3JtKSB7IHJl
dHVybiBhZG9wdFJlZigqbmV3IERPTUZvcm1EYXRhKGZvcm0pKTsgfQogICAgIHN0YXRpYyBSZWY8
RE9NRm9ybURhdGE+IGNyZWF0ZShjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nKSB7IHJldHVy
biBhZG9wdFJlZigqbmV3IERPTUZvcm1EYXRhKGVuY29kaW5nKSk7IH0KIAorICAgIHVzaW5nIEZv
cm1EYXRhRW50cnlWYWx1ZSA9IFZhcmlhbnQ8UmVmUHRyPEZpbGU+LCBTdHJpbmc+OworCiAgICAg
dm9pZCBhcHBlbmQoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKLSAg
ICB2b2lkIGFwcGVuZChjb25zdCBTdHJpbmcmIG5hbWUsIEJsb2ImLCBjb25zdCBTdHJpbmcmIGZp
bGVuYW1lID0gU3RyaW5nKCkpOworICAgIHZvaWQgYXBwZW5kKGNvbnN0IFN0cmluZyYgbmFtZSwg
QmxvYiYsIGNvbnN0IFN0cmluZyYgZmlsZW5hbWUgPSB7IH0pOworICAgIHZvaWQgcmVtb3ZlKGNv
bnN0IFN0cmluZyYgbmFtZSk7CisgICAgc3RkOjpvcHRpb25hbDxGb3JtRGF0YUVudHJ5VmFsdWU+
IGdldChjb25zdCBTdHJpbmcmIG5hbWUpOworICAgIFZlY3RvcjxGb3JtRGF0YUVudHJ5VmFsdWU+
IGdldEFsbChjb25zdCBTdHJpbmcmIG5hbWUpOworICAgIGJvb2wgaGFzKGNvbnN0IFN0cmluZyYg
bmFtZSk7CisgICAgdm9pZCBzZXQoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZh
bHVlKTsKKyAgICB2b2lkIHNldChjb25zdCBTdHJpbmcmIG5hbWUsIEJsb2ImLCBjb25zdCBTdHJp
bmcmIGZpbGVuYW1lID0geyB9KTsKKworICAgIGNsYXNzIEl0ZXJhdG9yIHsKKyAgICBwdWJsaWM6
CisgICAgICAgIGV4cGxpY2l0IEl0ZXJhdG9yKERPTUZvcm1EYXRhJik7CisgICAgICAgIHN0ZDo6
b3B0aW9uYWw8V1RGOjpLZXlWYWx1ZVBhaXI8U3RyaW5nLCBGb3JtRGF0YUVudHJ5VmFsdWU+PiBu
ZXh0KCk7CisKKyAgICBwcml2YXRlOgorICAgICAgICBSZWY8RE9NRm9ybURhdGE+IG1fdGFyZ2V0
OworICAgICAgICBzaXplX3QgbV9pbmRleCB7IDAgfTsKKyAgICB9OworICAgIEl0ZXJhdG9yIGNy
ZWF0ZUl0ZXJhdG9yKCkgeyByZXR1cm4gSXRlcmF0b3IgeyAqdGhpcyB9OyB9CiAKIHByaXZhdGU6
CiAgICAgZXhwbGljaXQgRE9NRm9ybURhdGEoY29uc3QgVGV4dEVuY29kaW5nJik7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9odG1sL0RPTUZvcm1EYXRhLmlkbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL0RPTUZvcm1EYXRhLmlkbAkocmV2aXNpb24gMjIxODI3KQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC9ET01Gb3JtRGF0YS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTI4LDE0ICsy
OCwyNCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCit0eXBlZGVmIChGaWxlIG9yIFVTVlN0cmlu
ZykgRm9ybURhdGFFbnRyeVZhbHVlOworCiBbCiAgICAgQ29uc3RydWN0b3Iob3B0aW9uYWwgSFRN
TEZvcm1FbGVtZW50PyBmb3JtKSwKKyAgICBFeHBvc2VkPShXaW5kb3csV29ya2VyKSwKICAgICBK
U0dlbmVyYXRlVG9OYXRpdmVPYmplY3QsCiAgICAgSlNHZW5lcmF0ZVRvSlNPYmplY3QsCiAgICAg
SW50ZXJmYWNlTmFtZT1Gb3JtRGF0YSwKICAgICBJbXBsZW1lbnRhdGlvbkxhY2tzVlRhYmxlLAog
XSBpbnRlcmZhY2UgRE9NRm9ybURhdGEgewogICAgIHZvaWQgYXBwZW5kKFVTVlN0cmluZyBuYW1l
LCBVU1ZTdHJpbmcgdmFsdWUpOwotICAgIHZvaWQgYXBwZW5kKFVTVlN0cmluZyBuYW1lLCBCbG9i
IHZhbHVlLCBvcHRpb25hbCBVU1ZTdHJpbmcgZmlsZW5hbWUpOwotfTsKKyAgICB2b2lkIGFwcGVu
ZChVU1ZTdHJpbmcgbmFtZSwgQmxvYiBibG9iVmFsdWUsIG9wdGlvbmFsIFVTVlN0cmluZyBmaWxl
bmFtZSk7CisgICAgW0ltcGxlbWVudGVkQXM9cmVtb3ZlXSB2b2lkIGRlbGV0ZShVU1ZTdHJpbmcg
bmFtZSk7CisgICAgRm9ybURhdGFFbnRyeVZhbHVlPyBnZXQoVVNWU3RyaW5nIG5hbWUpOworICAg
IHNlcXVlbmNlPEZvcm1EYXRhRW50cnlWYWx1ZT4gZ2V0QWxsKFVTVlN0cmluZyBuYW1lKTsKKyAg
ICBib29sZWFuIGhhcyhVU1ZTdHJpbmcgbmFtZSk7CisgICAgdm9pZCBzZXQoVVNWU3RyaW5nIG5h
bWUsIFVTVlN0cmluZyB2YWx1ZSk7CisgICAgdm9pZCBzZXQoVVNWU3RyaW5nIG5hbWUsIEJsb2Ig
YmxvYlZhbHVlLCBvcHRpb25hbCBVU1ZTdHJpbmcgZmlsZW5hbWUpOwogCisgICAgaXRlcmFibGU8
VVNWU3RyaW5nLCBGb3JtRGF0YUVudHJ5VmFsdWU+OworfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvRm9ybURhdGFMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L0Zvcm1EYXRhTGlzdC5jcHAJKHJldmlzaW9uIDIyMTgyNykKKysrIFNvdXJjZS9XZWJDb3JlL2h0
bWwvRm9ybURhdGFMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsMjAgKzMxLDg5IEBAIEZv
cm1EYXRhTGlzdDo6Rm9ybURhdGFMaXN0KGNvbnN0IFRleHRFbmMKIHsKIH0KIAotdm9pZCBGb3Jt
RGF0YUxpc3Q6OmFwcGVuZFN0cmluZyhjb25zdCBTdHJpbmcmIHMpCitDU3RyaW5nIEZvcm1EYXRh
TGlzdDo6bm9ybWFsaXplU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7Ci0gICAgQ1N0cmlu
ZyBjc3RyID0gbV9lbmNvZGluZy5lbmNvZGUocywgRW50aXRpZXNGb3JVbmVuY29kYWJsZXMpOwot
ICAgIG1faXRlbXMuYXBwZW5kKG5vcm1hbGl6ZUxpbmVFbmRpbmdzVG9DUkxGKGNzdHIpKTsKKyAg
ICByZXR1cm4gbm9ybWFsaXplTGluZUVuZGluZ3NUb0NSTEYobV9lbmNvZGluZy5lbmNvZGUodmFs
dWUsIEVudGl0aWVzRm9yVW5lbmNvZGFibGVzKSk7CiB9CiAKLXZvaWQgRm9ybURhdGFMaXN0Ojph
cHBlbmRTdHJpbmcoY29uc3QgQ1N0cmluZyYgcykKK2F1dG8gRm9ybURhdGFMaXN0OjpjcmVhdGVG
aWxlRW50cnkoY29uc3QgQ1N0cmluZyYga2V5LCBSZWY8QmxvYj4mJiBibG9iLCBjb25zdCBTdHJp
bmcmIGZpbGVuYW1lKSAtPiBJdGVtCiB7Ci0gICAgbV9pdGVtcy5hcHBlbmQocyk7CisgICAgaWYg
KCFibG9iLT5pc0ZpbGUoKSkgeworICAgICAgICBhdXRvIGZpbGUgPSBGaWxlOjpjcmVhdGUoYmxv
Yi5nZXQoKSwgZmlsZW5hbWUuaXNOdWxsKCkgPyBBU0NJSUxpdGVyYWwoImJsb2IiKSA6IGZpbGVu
YW1lKTsKKyAgICAgICAgcmV0dXJuIHsga2V5LCBXVEZNb3ZlKGZpbGUpIH07CisgICAgfQorICAg
IAorICAgIGlmICghZmlsZW5hbWUuaXNOdWxsKCkpIHsKKyAgICAgICAgYXV0byBmaWxlID0gRmls
ZTo6Y3JlYXRlKGRvd25jYXN0PEZpbGU+KGJsb2IuZ2V0KCkpLCBmaWxlbmFtZSk7CisgICAgICAg
IHJldHVybiB7IGtleSwgV1RGTW92ZShmaWxlKSB9OworICAgIH0KKworICAgIHJldHVybiB7IGtl
eSwgc3RhdGljX3JlZmVyZW5jZV9jYXN0PEZpbGU+KFdURk1vdmUoYmxvYikpIH07Cit9CisKK3Zv
aWQgRm9ybURhdGFMaXN0OjphcHBlbmREYXRhKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJp
bmcmIHZhbHVlKQoreworICAgIG1faXRlbXMuYXBwZW5kKHsgbm9ybWFsaXplU3RyaW5nKGtleSks
IG5vcm1hbGl6ZVN0cmluZyh2YWx1ZSkgfSk7Cit9CisKK3ZvaWQgRm9ybURhdGFMaXN0OjphcHBl
bmREYXRhKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBDU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBt
X2l0ZW1zLmFwcGVuZCh7IG5vcm1hbGl6ZVN0cmluZyhrZXkpLCB2YWx1ZSB9KTsKIH0KIAotdm9p
ZCBGb3JtRGF0YUxpc3Q6OmFwcGVuZEJsb2IoUmVmPEJsb2I+JiYgYmxvYiwgY29uc3QgU3RyaW5n
JiBmaWxlbmFtZSkKK3ZvaWQgRm9ybURhdGFMaXN0OjphcHBlbmREYXRhKGNvbnN0IFN0cmluZyYg
a2V5LCBpbnQgdmFsdWUpCiB7Ci0gICAgbV9pdGVtcy5hcHBlbmQoSXRlbShXVEZNb3ZlKGJsb2Ip
LCBmaWxlbmFtZSkpOworICAgIC8vIEZJWE1FOiBUaGlzIGNvdWxkIGJlIG9wdGltaXplZCBieSBo
YXZpbmcgYSBDU3RyaW5nIHZhcmlhbnQgb2YgU3RyaW5nOjpudW1iZXIuCisgICAgbV9pdGVtcy5h
cHBlbmQoeyBub3JtYWxpemVTdHJpbmcoa2V5KSwgbm9ybWFsaXplU3RyaW5nKFN0cmluZzo6bnVt
YmVyKHZhbHVlKSkgfSk7Cit9CisKK3ZvaWQgRm9ybURhdGFMaXN0OjphcHBlbmRCbG9iKGNvbnN0
IFN0cmluZyYga2V5LCBSZWY8QmxvYj4mJiBibG9iLCBjb25zdCBTdHJpbmcmIGZpbGVuYW1lKQor
eworICAgIGF1dG8gbm9ybWFsaXplZEtleSA9IG5vcm1hbGl6ZVN0cmluZyhrZXkpOworCisgICAg
bV9pdGVtcy5hcHBlbmQoY3JlYXRlRmlsZUVudHJ5KG5vcm1hbGl6ZWRLZXksIFdURk1vdmUoYmxv
YiksIGZpbGVuYW1lKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEVudHJ5TWFrZXI+Cit2b2lk
IEZvcm1EYXRhTGlzdDo6c2V0KGNvbnN0IENTdHJpbmcmIGtleSwgY29uc3QgRW50cnlNYWtlciYg
ZW50cnlNYWtlcikKK3sKKyAgICBzaXplX3QgaW5pdGlhbE1hdGNoTG9jYXRpb24gPSBXVEY6Om5v
dEZvdW5kOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2l0ZW1zLnNpemUoKTsgKytp
KSB7CisgICAgICAgIGlmIChrZXkgPT0gbV9pdGVtc1tpXS5rZXkoKSkgeworICAgICAgICAgICAg
aW5pdGlhbE1hdGNoTG9jYXRpb24gPSBpOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX2l0
ZW1zW2ldID0gZW50cnlNYWtlcigpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBpZiAoaW5pdGlhbE1hdGNoTG9jYXRpb24gIT0gV1RGOjpub3RGb3VuZCkgewor
ICAgICAgICBtX2l0ZW1zLnJlbW92ZUFsbE1hdGNoaW5nKFsma2V5XSAoY29uc3QgYXV0byYgaXRl
bSkgeworICAgICAgICAgICAgcmV0dXJuIGl0ZW0ua2V5KCkgPT0ga2V5OworICAgICAgICB9LCBp
bml0aWFsTWF0Y2hMb2NhdGlvbiArIDEpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
bV9pdGVtcy5hcHBlbmQoZW50cnlNYWtlcigpKTsKK30KKwordm9pZCBGb3JtRGF0YUxpc3Q6OnNl
dERhdGEoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgYXV0
byBub3JtYWxpemVkS2V5ID0gbm9ybWFsaXplU3RyaW5nKGtleSk7CisKKyAgICBzZXQobm9ybWFs
aXplZEtleSwgWyZdKCkgLT4gSXRlbSB7CisgICAgICAgIHJldHVybiB7IG5vcm1hbGl6ZWRLZXks
IG5vcm1hbGl6ZVN0cmluZyh2YWx1ZSkgfTsKKyAgICB9KTsKK30KKwordm9pZCBGb3JtRGF0YUxp
c3Q6OnNldEJsb2IoY29uc3QgU3RyaW5nJiBrZXksIFJlZjxCbG9iPiYmIGJsb2IsIGNvbnN0IFN0
cmluZyYgZmlsZW5hbWUpCit7CisgICAgYXV0byBub3JtYWxpemVkS2V5ID0gbm9ybWFsaXplU3Ry
aW5nKGtleSk7CisKKyAgICBzZXQobm9ybWFsaXplZEtleSwgWyZdKCkgLT4gSXRlbSB7CisgICAg
ICAgIHJldHVybiBjcmVhdGVGaWxlRW50cnkobm9ybWFsaXplZEtleSwgV1RGTW92ZShibG9iKSwg
ZmlsZW5hbWUpOworICAgIH0pOwogfQogCiB9IC8vIG5hbWVzcGFjZQpJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC9Gb3JtRGF0YUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL0Zvcm1EYXRhTGlzdC5oCShyZXZpc2lvbiAyMjE4MjcpCisrKyBTb3VyY2UvV2ViQ29yZS9o
dG1sL0Zvcm1EYXRhTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMCw3ICsyMCw3IEBACiAKICNw
cmFnbWEgb25jZQogCi0jaW5jbHVkZSAiQmxvYi5oIgorI2luY2x1ZGUgIkZpbGUuaCIKICNpbmNs
dWRlICJUZXh0RW5jb2RpbmcuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KQEAgLTMxLDUzICszMSw0OCBAQCBjbGFzcyBGb3JtRGF0YUxp
c3QgewogcHVibGljOgogICAgIGNsYXNzIEl0ZW0gewogICAgIHB1YmxpYzoKLSAgICAgICAgSXRl
bSgpIHsgfQotICAgICAgICBJdGVtKGNvbnN0IFdURjo6Q1N0cmluZyYgZGF0YSkgOiBtX2RhdGEo
ZGF0YSkgeyB9Ci0gICAgICAgIEl0ZW0oUmVmPEJsb2I+JiYgYmxvYiwgY29uc3QgU3RyaW5nJiBm
aWxlbmFtZSkKLSAgICAgICAgICAgIDogbV9ibG9iKFdURk1vdmUoYmxvYikpCi0gICAgICAgICAg
ICAsIG1fZmlsZW5hbWUoZmlsZW5hbWUpCi0gICAgICAgIHsgfQotCi0gICAgICAgIGNvbnN0IFdU
Rjo6Q1N0cmluZyYgZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YTsgfQotICAgICAgICBCbG9i
KiBibG9iKCkgY29uc3QgeyByZXR1cm4gbV9ibG9iLmdldCgpOyB9Ci0gICAgICAgIGNvbnN0IFN0
cmluZyYgZmlsZW5hbWUoKSBjb25zdCB7IHJldHVybiBtX2ZpbGVuYW1lOyB9CisgICAgICAgIEl0
ZW0oKSA9IGRlZmF1bHQ7CisgICAgICAgIEl0ZW0oY29uc3QgQ1N0cmluZyYga2V5LCBjb25zdCBD
U3RyaW5nJiBkYXRhKQorICAgICAgICAgICAgOiBtX2tleShrZXkpCisgICAgICAgICAgICAsIG1f
ZGF0YShkYXRhKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBJdGVtKGNvbnN0IENT
dHJpbmcmIGtleSwgUmVmPEZpbGU+JiYgZmlsZSkKKyAgICAgICAgICAgIDogbV9rZXkoa2V5KQor
ICAgICAgICAgICAgLCBtX2ZpbGUoV1RGTW92ZShmaWxlKSkKKyAgICAgICAgeworICAgICAgICB9
CisKKyAgICAgICAgY29uc3QgQ1N0cmluZyYga2V5KCkgY29uc3QgeyByZXR1cm4gbV9rZXk7IH0K
KyAgICAgICAgY29uc3QgQ1N0cmluZyYgZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YTsgfQor
ICAgICAgICBGaWxlKiBmaWxlKCkgY29uc3QgeyByZXR1cm4gbV9maWxlLmdldCgpOyB9CiAKICAg
ICBwcml2YXRlOgotICAgICAgICBXVEY6OkNTdHJpbmcgbV9kYXRhOwotICAgICAgICBSZWZQdHI8
QmxvYj4gbV9ibG9iOwotICAgICAgICBTdHJpbmcgbV9maWxlbmFtZTsKKyAgICAgICAgLy8gRklY
TUU6IFNob3VsZCB0aGVzZSBiZSBsYXppbHkgbm9ybWFsaXplZD8KKyAgICAgICAgQ1N0cmluZyBt
X2tleTsKKyAgICAgICAgQ1N0cmluZyBtX2RhdGE7CisgICAgICAgIFJlZlB0cjxGaWxlPiBtX2Zp
bGU7CiAgICAgfTsKIAogICAgIEZvcm1EYXRhTGlzdChjb25zdCBUZXh0RW5jb2RpbmcmKTsKIAot
ICAgIHZvaWQgYXBwZW5kRGF0YShjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1
ZSkKLSAgICB7Ci0gICAgICAgIGFwcGVuZFN0cmluZyhrZXkpOwotICAgICAgICBhcHBlbmRTdHJp
bmcodmFsdWUpOwotICAgIH0KLSAgICB2b2lkIGFwcGVuZERhdGEoY29uc3QgU3RyaW5nJiBrZXks
IGNvbnN0IENTdHJpbmcmIHZhbHVlKQotICAgIHsKLSAgICAgICAgYXBwZW5kU3RyaW5nKGtleSk7
Ci0gICAgICAgIGFwcGVuZFN0cmluZyh2YWx1ZSk7Ci0gICAgfQotICAgIHZvaWQgYXBwZW5kRGF0
YShjb25zdCBTdHJpbmcmIGtleSwgaW50IHZhbHVlKQotICAgIHsKLSAgICAgICAgYXBwZW5kU3Ry
aW5nKGtleSk7Ci0gICAgICAgIGFwcGVuZFN0cmluZyhTdHJpbmc6Om51bWJlcih2YWx1ZSkpOwot
ICAgIH0KLSAgICB2b2lkIGFwcGVuZEJsb2IoY29uc3QgU3RyaW5nJiBrZXksIFJlZjxCbG9iPiYm
IGJsb2IsIGNvbnN0IFN0cmluZyYgZmlsZW5hbWUgPSBTdHJpbmcoKSkKLSAgICB7Ci0gICAgICAg
IGFwcGVuZFN0cmluZyhrZXkpOwotICAgICAgICBhcHBlbmRCbG9iKFdURk1vdmUoYmxvYiksIGZp
bGVuYW1lKTsKLSAgICB9CisgICAgdm9pZCBhcHBlbmREYXRhKGNvbnN0IFN0cmluZyYga2V5LCBj
b25zdCBTdHJpbmcmIHZhbHVlKTsKKyAgICB2b2lkIGFwcGVuZERhdGEoY29uc3QgU3RyaW5nJiBr
ZXksIGNvbnN0IENTdHJpbmcmIHZhbHVlKTsKKyAgICB2b2lkIGFwcGVuZERhdGEoY29uc3QgU3Ry
aW5nJiBrZXksIGludCB2YWx1ZSk7CisgICAgdm9pZCBhcHBlbmRCbG9iKGNvbnN0IFN0cmluZyYg
a2V5LCBSZWY8QmxvYj4mJiwgY29uc3QgU3RyaW5nJiBmaWxlbmFtZSA9IHsgfSk7CisgICAgdm9p
ZCBzZXREYXRhKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKKyAgICB2
b2lkIHNldEJsb2IoY29uc3QgU3RyaW5nJiBrZXksIFJlZjxCbG9iPiYmLCBjb25zdCBTdHJpbmcm
IGZpbGVuYW1lID0geyB9KTsKIAogICAgIGNvbnN0IFZlY3RvcjxJdGVtPiYgaXRlbXMoKSBjb25z
dCB7IHJldHVybiBtX2l0ZW1zOyB9CiAgICAgY29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZygp
IGNvbnN0IHsgcmV0dXJuIG1fZW5jb2Rpbmc7IH0KIAotcHJpdmF0ZToKLSAgICB2b2lkIGFwcGVu
ZFN0cmluZyhjb25zdCBDU3RyaW5nJik7Ci0gICAgdm9pZCBhcHBlbmRTdHJpbmcoY29uc3QgU3Ry
aW5nJik7Ci0gICAgdm9pZCBhcHBlbmRCbG9iKFJlZjxCbG9iPiYmLCBjb25zdCBTdHJpbmcmIGZp
bGVuYW1lKTsKK3Byb3RlY3RlZDoKKyAgICBDU3RyaW5nIG5vcm1hbGl6ZVN0cmluZyhjb25zdCBT
dHJpbmcmKTsKKyAgICBJdGVtIGNyZWF0ZUZpbGVFbnRyeShjb25zdCBDU3RyaW5nJiBrZXksIFJl
ZjxCbG9iPiYmLCBjb25zdCBTdHJpbmcmIGZpbGVuYW1lKTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBFbnRyeU1ha2VyPgorICAgIHZvaWQgc2V0KGNvbnN0IENTdHJpbmcmIGtleSwgY29u
c3QgRW50cnlNYWtlciYpOwogCiAgICAgVGV4dEVuY29kaW5nIG1fZW5jb2Rpbmc7CiAgICAgVmVj
dG9yPEl0ZW0+IG1faXRlbXM7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yTmV0d29ya0FnZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yTmV0d29ya0FnZW50LmNwcAkocmV2aXNpb24gMjIxODI3KQorKysgU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck5ldHdvcmtBZ2VudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI1Niw4ICsyNTYsNyBAQCBzdGF0aWMgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5l
dHdvcms6CiAgICAgICAgIC5zZXRIZWFkZXJzKGJ1aWxkT2JqZWN0Rm9ySGVhZGVycyhyZXF1ZXN0
Lmh0dHBIZWFkZXJGaWVsZHMoKSkpCiAgICAgICAgIC5yZWxlYXNlKCk7CiAgICAgaWYgKHJlcXVl
c3QuaHR0cEJvZHkoKSAmJiAhcmVxdWVzdC5odHRwQm9keSgpLT5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgVmVjdG9yPGNoYXI+IGJ5dGVzOwotICAgICAgICByZXF1ZXN0Lmh0dHBCb2R5KCktPmZsYXR0
ZW4oYnl0ZXMpOworICAgICAgICBhdXRvIGJ5dGVzID0gcmVxdWVzdC5odHRwQm9keSgpLT5mbGF0
dGVuKCk7CiAgICAgICAgIHJlcXVlc3RPYmplY3QtPnNldFBvc3REYXRhKFN0cmluZzo6ZnJvbVVU
RjhXaXRoTGF0aW4xRmFsbGJhY2soYnl0ZXMuZGF0YSgpLCBieXRlcy5zaXplKCkpKTsKICAgICB9
CiAgICAgcmV0dXJuIHJlcXVlc3RPYmplY3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL0Zvcm1EYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcAkocmV2aXNpb24gMjIxODI3KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUw
LDcgKzUwLDcgQEAgaW5saW5lIEZvcm1EYXRhOjpGb3JtRGF0YShjb25zdCBGb3JtRGF0YQogewog
ICAgIC8vIFdlIHNob3VsZG4ndCBiZSBjb3B5aW5nIEZvcm1EYXRhIHRoYXQgaGFzbid0IGFscmVh
ZHkgcmVtb3ZlZCBpdHMgZ2VuZXJhdGVkIGZpbGVzCiAgICAgLy8gYnV0IGp1c3QgaW4gY2FzZSwg
bWFrZSBzdXJlIHRoZSBuZXcgRm9ybURhdGEgaXMgcmVhZHkgdG8gZ2VuZXJhdGUgaXRzIG93biBm
aWxlcy4KLSAgICBmb3IgKEZvcm1EYXRhRWxlbWVudCYgZWxlbWVudCA6IG1fZWxlbWVudHMpIHsK
KyAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBtX2VsZW1lbnRzKSB7CiAgICAgICAgIGlmIChlbGVt
ZW50Lm1fdHlwZSA9PSBGb3JtRGF0YUVsZW1lbnQ6OlR5cGU6OkVuY29kZWRGaWxlKSB7CiAgICAg
ICAgICAgICBlbGVtZW50Lm1fZ2VuZXJhdGVkRmlsZW5hbWUgPSBTdHJpbmcoKTsKICAgICAgICAg
ICAgIGVsZW1lbnQubV9vd25zR2VuZXJhdGVkRmlsZSA9IGZhbHNlOwpAQCAtNzMsMzUgKzczLDM1
IEBAIFJlZjxGb3JtRGF0YT4gRm9ybURhdGE6OmNyZWF0ZSgpCiAKIFJlZjxGb3JtRGF0YT4gRm9y
bURhdGE6OmNyZWF0ZShjb25zdCB2b2lkKiBkYXRhLCBzaXplX3Qgc2l6ZSkKIHsKLSAgICBSZWY8
Rm9ybURhdGE+IHJlc3VsdCA9IGNyZWF0ZSgpOworICAgIGF1dG8gcmVzdWx0ID0gY3JlYXRlKCk7
CiAgICAgcmVzdWx0LT5hcHBlbmREYXRhKGRhdGEsIHNpemUpOwogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKIFJlZjxGb3JtRGF0YT4gRm9ybURhdGE6OmNyZWF0ZShjb25zdCBDU3RyaW5nJiBzdHJp
bmcpCiB7Ci0gICAgUmVmPEZvcm1EYXRhPiByZXN1bHQgPSBjcmVhdGUoKTsKKyAgICBhdXRvIHJl
c3VsdCA9IGNyZWF0ZSgpOwogICAgIHJlc3VsdC0+YXBwZW5kRGF0YShzdHJpbmcuZGF0YSgpLCBz
dHJpbmcubGVuZ3RoKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIFJlZjxGb3JtRGF0YT4g
Rm9ybURhdGE6OmNyZWF0ZShjb25zdCBWZWN0b3I8Y2hhcj4mIHZlY3RvcikKIHsKLSAgICBSZWY8
Rm9ybURhdGE+IHJlc3VsdCA9IGNyZWF0ZSgpOworICAgIGF1dG8gcmVzdWx0ID0gY3JlYXRlKCk7
CiAgICAgcmVzdWx0LT5hcHBlbmREYXRhKHZlY3Rvci5kYXRhKCksIHZlY3Rvci5zaXplKCkpOwog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIFJlZjxGb3JtRGF0YT4gRm9ybURhdGE6OmNyZWF0ZShj
b25zdCBGb3JtRGF0YUxpc3QmIGxpc3QsIGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2RpbmcsIEVu
Y29kaW5nVHlwZSBlbmNvZGluZ1R5cGUpCiB7Ci0gICAgUmVmPEZvcm1EYXRhPiByZXN1bHQgPSBj
cmVhdGUoKTsKKyAgICBhdXRvIHJlc3VsdCA9IGNyZWF0ZSgpOwogICAgIHJlc3VsdC0+YXBwZW5k
S2V5VmFsdWVQYWlySXRlbXMobGlzdCwgZW5jb2RpbmcsIGZhbHNlLCAwLCBlbmNvZGluZ1R5cGUp
OwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIFJlZjxGb3JtRGF0YT4gRm9ybURhdGE6OmNyZWF0
ZU11bHRpUGFydChjb25zdCBGb3JtRGF0YUxpc3QmIGxpc3QsIGNvbnN0IFRleHRFbmNvZGluZyYg
ZW5jb2RpbmcsIERvY3VtZW50KiBkb2N1bWVudCkKIHsKLSAgICBSZWY8Rm9ybURhdGE+IHJlc3Vs
dCA9IGNyZWF0ZSgpOworICAgIGF1dG8gcmVzdWx0ID0gY3JlYXRlKCk7CiAgICAgcmVzdWx0LT5h
cHBlbmRLZXlWYWx1ZVBhaXJJdGVtcyhsaXN0LCBlbmNvZGluZywgdHJ1ZSwgZG9jdW1lbnQpOwog
ICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC0xODgsNTIgKzE4OCwzMiBAQCB2b2lkIEZvcm1EYXRh
OjphcHBlbmRLZXlWYWx1ZVBhaXJJdGVtcyhjCiAgICAgICAgIG1fYm91bmRhcnkgPSBGb3JtRGF0
YUJ1aWxkZXI6OmdlbmVyYXRlVW5pcXVlQm91bmRhcnlTdHJpbmcoKTsKIAogICAgIFZlY3Rvcjxj
aGFyPiBlbmNvZGVkRGF0YTsKLQotICAgIGNvbnN0IFZlY3RvcjxGb3JtRGF0YUxpc3Q6Okl0ZW0+
JiBpdGVtcyA9IGxpc3QuaXRlbXMoKTsKLSAgICBzaXplX3QgZm9ybURhdGFMaXN0U2l6ZSA9IGl0
ZW1zLnNpemUoKTsKLSAgICBBU1NFUlQoIShmb3JtRGF0YUxpc3RTaXplICUgMikpOwotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgZm9ybURhdGFMaXN0U2l6ZTsgaSArPSAyKSB7Ci0gICAgICAg
IGNvbnN0IEZvcm1EYXRhTGlzdDo6SXRlbSYga2V5ID0gaXRlbXNbaV07Ci0gICAgICAgIGNvbnN0
IEZvcm1EYXRhTGlzdDo6SXRlbSYgdmFsdWUgPSBpdGVtc1tpICsgMV07CisgICAgZm9yIChjb25z
dCBhdXRvJiBpdGVtIDogbGlzdC5pdGVtcygpKSB7CiAgICAgICAgIGlmIChpc011bHRpUGFydEZv
cm0pIHsKICAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBoZWFkZXI7Ci0gICAgICAgICAgICBGb3Jt
RGF0YUJ1aWxkZXI6OmJlZ2luTXVsdGlQYXJ0SGVhZGVyKGhlYWRlciwgbV9ib3VuZGFyeS5kYXRh
KCksIGtleS5kYXRhKCkpOworICAgICAgICAgICAgRm9ybURhdGFCdWlsZGVyOjpiZWdpbk11bHRp
UGFydEhlYWRlcihoZWFkZXIsIG1fYm91bmRhcnkuZGF0YSgpLCBpdGVtLmtleSgpLmRhdGEoKSk7
CiAKICAgICAgICAgICAgIGJvb2wgc2hvdWxkR2VuZXJhdGVGaWxlID0gZmFsc2U7CiAKICAgICAg
ICAgICAgIC8vIElmIHRoZSBjdXJyZW50IHR5cGUgaXMgYmxvYiwgdGhlbiB3ZSBhbHNvIG5lZWQg
dG8gaW5jbHVkZSB0aGUgZmlsZW5hbWUKLSAgICAgICAgICAgIGlmICh2YWx1ZS5ibG9iKCkpIHsK
LSAgICAgICAgICAgICAgICBTdHJpbmcgbmFtZTsKLSAgICAgICAgICAgICAgICBpZiAoaXM8Rmls
ZT4oKnZhbHVlLmJsb2IoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgRmlsZSYgZmlsZSA9IGRv
d25jYXN0PEZpbGU+KCp2YWx1ZS5ibG9iKCkpOwotICAgICAgICAgICAgICAgICAgICBuYW1lID0g
ZmlsZS5uYW1lKCk7Ci0gICAgICAgICAgICAgICAgICAgIC8vIExldCB0aGUgYXBwbGljYXRpb24g
c3BlY2lmeSBhIGZpbGVuYW1lIGlmIGl0J3MgZ29pbmcgdG8gZ2VuZXJhdGUgYSByZXBsYWNlbWVu
dCBmaWxlIGZvciB0aGUgdXBsb2FkLgotICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcm
IHBhdGggPSBmaWxlLnBhdGgoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFwYXRoLmlzRW1w
dHkoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBkb2N1bWVu
dC0+cGFnZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGdlbmVyYXRl
ZEZpbGVOYW1lOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZEdlbmVyYXRlRmls
ZSA9IHBhZ2UtPmNocm9tZSgpLmNsaWVudCgpLnNob3VsZFJlcGxhY2VXaXRoR2VuZXJhdGVkRmls
ZUZvclVwbG9hZChwYXRoLCBnZW5lcmF0ZWRGaWxlTmFtZSk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHNob3VsZEdlbmVyYXRlRmlsZSkKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbmFtZSA9IGdlbmVyYXRlZEZpbGVOYW1lOwotICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaWYgKGl0ZW0uZmlsZSgpKSB7CisgICAgICAgICAgICAgICAgYXV0
byBuYW1lID0gaXRlbS5maWxlKCktPm5hbWUoKTsKKyAgICAgICAgICAgICAgICAvLyBMZXQgdGhl
IGFwcGxpY2F0aW9uIHNwZWNpZnkgYSBmaWxlbmFtZSBpZiBpdCdzIGdvaW5nIHRvIGdlbmVyYXRl
IGEgcmVwbGFjZW1lbnQgZmlsZSBmb3IgdGhlIHVwbG9hZC4KKyAgICAgICAgICAgICAgICBjb25z
dCBhdXRvJiBwYXRoID0gaXRlbS5maWxlKCktPnBhdGgoKTsKKyAgICAgICAgICAgICAgICBpZiAo
IXBhdGguaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChQYWdlKiBwYWdlID0g
ZG9jdW1lbnQtPnBhZ2UoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGdlbmVy
YXRlZEZpbGVOYW1lOworICAgICAgICAgICAgICAgICAgICAgICAgc2hvdWxkR2VuZXJhdGVGaWxl
ID0gcGFnZS0+Y2hyb21lKCkuY2xpZW50KCkuc2hvdWxkUmVwbGFjZVdpdGhHZW5lcmF0ZWRGaWxl
Rm9yVXBsb2FkKHBhdGgsIGdlbmVyYXRlZEZpbGVOYW1lKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChzaG91bGRHZW5lcmF0ZUZpbGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bmFtZSA9IGdlbmVyYXRlZEZpbGVOYW1lOwogICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICAgICAgLy8gSWYgYSBmaWxlbmFtZSBpcyBwYXNzZWQgaW4gRm9ybURhdGEuYXBw
ZW5kKCksIHVzZSBpdCBpbnN0ZWFkIG9mIHRoZSBmaWxlIGJsb2IncyBuYW1lLgotICAgICAgICAg
ICAgICAgICAgICBpZiAoIXZhbHVlLmZpbGVuYW1lKCkuaXNOdWxsKCkpCi0gICAgICAgICAgICAg
ICAgICAgICAgICBuYW1lID0gdmFsdWUuZmlsZW5hbWUoKTsKLSAgICAgICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgICAgICAvLyBGb3Igbm9uLWZpbGUgYmxvYiwgdXNlIHRoZSBm
aWxlbmFtZSBpZiBpdCBpcyBwYXNzZWQgaW4gRm9ybURhdGEuYXBwZW5kKCkuCi0gICAgICAgICAg
ICAgICAgICAgIGlmICghdmFsdWUuZmlsZW5hbWUoKS5pc051bGwoKSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIG5hbWUgPSB2YWx1ZS5maWxlbmFtZSgpOwotICAgICAgICAgICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gImJsb2IiOwogICAgICAgICAgICAg
ICAgIH0KIAogICAgICAgICAgICAgICAgIC8vIFdlIGhhdmUgdG8gaW5jbHVkZSB0aGUgZmlsZW5h
bWU9Ii4uIiBwYXJ0IGluIHRoZSBoZWFkZXIsIGV2ZW4gaWYgdGhlIGZpbGVuYW1lIGlzIGVtcHR5
CiAgICAgICAgICAgICAgICAgRm9ybURhdGFCdWlsZGVyOjphZGRGaWxlbmFtZVRvTXVsdGlQYXJ0
SGVhZGVyKGhlYWRlciwgZW5jb2RpbmcsIG5hbWUpOwogCiAgICAgICAgICAgICAgICAgLy8gQWRk
IHRoZSBjb250ZW50IHR5cGUgaWYgYXZhaWxhYmxlLCBvciAiYXBwbGljYXRpb24vb2N0ZXQtc3Ry
ZWFtIiBvdGhlcndpc2UgKFJGQyAxODY3KS4KLSAgICAgICAgICAgICAgICBTdHJpbmcgY29udGVu
dFR5cGUgPSB2YWx1ZS5ibG9iKCktPnR5cGUoKTsKKyAgICAgICAgICAgICAgICBhdXRvIGNvbnRl
bnRUeXBlID0gaXRlbS5maWxlKCktPnR5cGUoKTsKICAgICAgICAgICAgICAgICBpZiAoY29udGVu
dFR5cGUuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgICAgICBjb250ZW50VHlwZSA9ICJhcHBs
aWNhdGlvbi9vY3RldC1zdHJlYW0iOwogICAgICAgICAgICAgICAgIEFTU0VSVChCbG9iOjppc05v
cm1hbGl6ZWRDb250ZW50VHlwZShjb250ZW50VHlwZSkpOwpAQCAtMjQ0LDIwICsyMjQsMTYgQEAg
dm9pZCBGb3JtRGF0YTo6YXBwZW5kS2V5VmFsdWVQYWlySXRlbXMoYwogCiAgICAgICAgICAgICAv
LyBBcHBlbmQgYm9keQogICAgICAgICAgICAgYXBwZW5kRGF0YShoZWFkZXIuZGF0YSgpLCBoZWFk
ZXIuc2l6ZSgpKTsKLSAgICAgICAgICAgIGlmICh2YWx1ZS5ibG9iKCkpIHsKLSAgICAgICAgICAg
ICAgICBpZiAoaXM8RmlsZT4oKnZhbHVlLmJsb2IoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAg
RmlsZSYgZmlsZSA9IGRvd25jYXN0PEZpbGU+KCp2YWx1ZS5ibG9iKCkpOwotICAgICAgICAgICAg
ICAgICAgICAvLyBEbyBub3QgYWRkIHRoZSBmaWxlIGlmIHRoZSBwYXRoIGlzIGVtcHR5LgotICAg
ICAgICAgICAgICAgICAgICBpZiAoIWZpbGUucGF0aCgpLmlzRW1wdHkoKSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGFwcGVuZEZpbGUoZmlsZS5wYXRoKCksIHNob3VsZEdlbmVyYXRlRmlsZSk7
Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGl0ZW0uZmlsZSgpKSB7CisgICAg
ICAgICAgICAgICAgaWYgKCFpdGVtLmZpbGUoKS0+cGF0aCgpLmlzRW1wdHkoKSkKKyAgICAgICAg
ICAgICAgICAgICAgYXBwZW5kRmlsZShpdGVtLmZpbGUoKS0+cGF0aCgpLCBzaG91bGRHZW5lcmF0
ZUZpbGUpOwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgYXBwZW5k
QmxvYih2YWx1ZS5ibG9iKCktPnVybCgpKTsKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kQmxv
YihpdGVtLmZpbGUoKS0+dXJsKCkpOwogICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAg
ICAgYXBwZW5kRGF0YSh2YWx1ZS5kYXRhKCkuZGF0YSgpLCB2YWx1ZS5kYXRhKCkubGVuZ3RoKCkp
OworICAgICAgICAgICAgICAgIGFwcGVuZERhdGEoaXRlbS5kYXRhKCkuZGF0YSgpLCBpdGVtLmRh
dGEoKS5sZW5ndGgoKSk7CiAgICAgICAgICAgICBhcHBlbmREYXRhKCJcclxuIiwgMik7CiAgICAg
ICAgIH0gZWxzZQotICAgICAgICAgICAgRm9ybURhdGFCdWlsZGVyOjphZGRLZXlWYWx1ZVBhaXJB
c0Zvcm1EYXRhKGVuY29kZWREYXRhLCBrZXkuZGF0YSgpLCB2YWx1ZS5kYXRhKCksIGVuY29kaW5n
VHlwZSk7CisgICAgICAgICAgICBGb3JtRGF0YUJ1aWxkZXI6OmFkZEtleVZhbHVlUGFpckFzRm9y
bURhdGEoZW5jb2RlZERhdGEsIGl0ZW0ua2V5KCkuZGF0YSgpLCBpdGVtLmRhdGEoKS5kYXRhKCks
IGVuY29kaW5nVHlwZSk7CiAgICAgfQogCiAgICAgaWYgKGlzTXVsdGlQYXJ0Rm9ybSkKQEAgLTI3
MCwyOSArMjQ2LDI4IEBAIGNoYXIqIEZvcm1EYXRhOjpleHBhbmREYXRhU3RvcmUoc2l6ZV90IHMK
IHsKICAgICBtX2xlbmd0aEluQnl0ZXMgPSBzdGQ6Om51bGxvcHQ7CiAgICAgaWYgKG1fZWxlbWVu
dHMuaXNFbXB0eSgpIHx8IG1fZWxlbWVudHMubGFzdCgpLm1fdHlwZSAhPSBGb3JtRGF0YUVsZW1l
bnQ6OlR5cGU6OkRhdGEpCi0gICAgICAgIG1fZWxlbWVudHMuYXBwZW5kKEZvcm1EYXRhRWxlbWVu
dCgpKTsKLSAgICBGb3JtRGF0YUVsZW1lbnQmIGUgPSBtX2VsZW1lbnRzLmxhc3QoKTsKKyAgICAg
ICAgbV9lbGVtZW50cy5hcHBlbmQoeyB9KTsKKyAgICBhdXRvJiBlID0gbV9lbGVtZW50cy5sYXN0
KCk7CiAgICAgc2l6ZV90IG9sZFNpemUgPSBlLm1fZGF0YS5zaXplKCk7CiAgICAgZS5tX2RhdGEu
Z3JvdyhvbGRTaXplICsgc2l6ZSk7CiAgICAgcmV0dXJuIGUubV9kYXRhLmRhdGEoKSArIG9sZFNp
emU7CiB9CiAKLXZvaWQgRm9ybURhdGE6OmZsYXR0ZW4oVmVjdG9yPGNoYXI+JiBkYXRhKSBjb25z
dAorVmVjdG9yPGNoYXI+IEZvcm1EYXRhOjpmbGF0dGVuKCkgY29uc3QKIHsKICAgICAvLyBDb25j
YXRlbmF0ZSBhbGwgdGhlIGJ5dGUgYXJyYXlzLCBidXQgb21pdCBhbnkgZmlsZXMuCi0gICAgZGF0
YS5jbGVhcigpOwotICAgIHNpemVfdCBuID0gbV9lbGVtZW50cy5zaXplKCk7Ci0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBuOyArK2kpIHsKLSAgICAgICAgY29uc3QgRm9ybURhdGFFbGVtZW50
JiBlID0gbV9lbGVtZW50c1tpXTsKLSAgICAgICAgaWYgKGUubV90eXBlID09IEZvcm1EYXRhRWxl
bWVudDo6VHlwZTo6RGF0YSkKLSAgICAgICAgICAgIGRhdGEuYXBwZW5kKGUubV9kYXRhLmRhdGEo
KSwgc3RhdGljX2Nhc3Q8c2l6ZV90PihlLm1fZGF0YS5zaXplKCkpKTsKKyAgICBWZWN0b3I8Y2hh
cj4gZGF0YTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGVsZW1lbnQgOiBtX2VsZW1lbnRzKSB7Cisg
ICAgICAgIGlmIChlbGVtZW50Lm1fdHlwZSA9PSBGb3JtRGF0YUVsZW1lbnQ6OlR5cGU6OkRhdGEp
CisgICAgICAgICAgICBkYXRhLmFwcGVuZChlbGVtZW50Lm1fZGF0YS5kYXRhKCksIHN0YXRpY19j
YXN0PHNpemVfdD4oZWxlbWVudC5tX2RhdGEuc2l6ZSgpKSk7CiAgICAgfQorICAgIAorICAgIHJl
dHVybiBkYXRhOwogfQogCiBTdHJpbmcgRm9ybURhdGE6OmZsYXR0ZW5Ub1N0cmluZygpIGNvbnN0
CiB7Ci0gICAgVmVjdG9yPGNoYXI+IGJ5dGVzOwotICAgIGZsYXR0ZW4oYnl0ZXMpOworICAgIGF1
dG8gYnl0ZXMgPSBmbGF0dGVuKCk7CiAgICAgcmV0dXJuIExhdGluMUVuY29kaW5nKCkuZGVjb2Rl
KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGJ5dGVzLmRhdGEoKSksIGJ5dGVzLnNpemUo
KSk7CiB9CiAKQEAgLTMwMiwxNiArMjc3LDE0IEBAIHN0YXRpYyB2b2lkIGFwcGVuZEJsb2JSZXNv
bHZlZChGb3JtRGF0YSoKICAgICAgICAgTE9HX0VSUk9SKCJUcmllZCB0byByZXNvbHZlIGEgYmxv
YiB3aXRob3V0IGEgdXNhYmxlIHJlZ2lzdHJ5Iik7CiAgICAgICAgIHJldHVybjsKICAgICB9CisK
ICAgICBCbG9iRGF0YSogYmxvYkRhdGEgPSBzdGF0aWNfY2FzdDxCbG9iUmVnaXN0cnlJbXBsJj4o
YmxvYlJlZ2lzdHJ5KCkpLmdldEJsb2JEYXRhRnJvbVVSTCh1cmwpOwogICAgIGlmICghYmxvYkRh
dGEpIHsKICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgZ2V0IGJsb2IgZGF0YSBmcm9tIGEg
cmVnaXN0cnkiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIEJsb2JEYXRhSXRlbUxp
c3Q6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gYmxvYkRhdGEtPml0ZW1zKCkuYmVnaW4oKTsKLSAgICBj
b25zdCBCbG9iRGF0YUl0ZW1MaXN0Ojpjb25zdF9pdGVyYXRvciBpdGVuZCA9IGJsb2JEYXRhLT5p
dGVtcygpLmVuZCgpOwotICAgIGZvciAoOyBpdCAhPSBpdGVuZDsgKytpdCkgewotICAgICAgICBj
b25zdCBCbG9iRGF0YUl0ZW0mIGJsb2JJdGVtID0gKml0OworICAgIGZvciAoY29uc3QgYXV0byYg
YmxvYkl0ZW0gOiBibG9iRGF0YS0+aXRlbXMoKSkgewogICAgICAgICBpZiAoYmxvYkl0ZW0udHlw
ZSgpID09IEJsb2JEYXRhSXRlbTo6VHlwZTo6RGF0YSkgewogICAgICAgICAgICAgQVNTRVJUKGJs
b2JJdGVtLmRhdGEoKS5kYXRhKCkpOwogICAgICAgICAgICAgZm9ybURhdGEtPmFwcGVuZERhdGEo
YmxvYkl0ZW0uZGF0YSgpLmRhdGEoKS0+ZGF0YSgpICsgc3RhdGljX2Nhc3Q8aW50PihibG9iSXRl
bS5vZmZzZXQoKSksIHN0YXRpY19jYXN0PGludD4oYmxvYkl0ZW0ubGVuZ3RoKCkpKTsKQEAgLTMy
NiwxMCArMjk5LDggQEAgUmVmPEZvcm1EYXRhPiBGb3JtRGF0YTo6cmVzb2x2ZUJsb2JSZWZlcgog
ewogICAgIC8vIEZpcnN0IGNoZWNrIGlmIGFueSBibG9icyBuZWVkcyB0byBiZSByZXNvbHZlZCwg
b3Igd2UgY2FuIHRha2UgdGhlIGZhc3QgcGF0aC4KICAgICBib29sIGhhc0Jsb2IgPSBmYWxzZTsK
LSAgICBWZWN0b3I8Rm9ybURhdGFFbGVtZW50Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBlbGVtZW50
cygpLmJlZ2luKCk7Ci0gICAgY29uc3QgVmVjdG9yPEZvcm1EYXRhRWxlbWVudD46OmNvbnN0X2l0
ZXJhdG9yIGl0ZW5kID0gZWxlbWVudHMoKS5lbmQoKTsKLSAgICBmb3IgKDsgaXQgIT0gaXRlbmQ7
ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT5tX3R5cGUgPT0gRm9ybURhdGFFbGVtZW50OjpUeXBl
OjpFbmNvZGVkQmxvYikgeworICAgIGZvciAoY29uc3QgYXV0byYgZWxlbWVudCA6IG1fZWxlbWVu
dHMpIHsKKyAgICAgICAgaWYgKGVsZW1lbnQubV90eXBlID09IEZvcm1EYXRhRWxlbWVudDo6VHlw
ZTo6RW5jb2RlZEJsb2IpIHsKICAgICAgICAgICAgIGhhc0Jsb2IgPSB0cnVlOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTMzOSwxMiArMzEwLDExIEBAIFJlZjxGb3JtRGF0YT4g
Rm9ybURhdGE6OnJlc29sdmVCbG9iUmVmZXIKICAgICAgICAgcmV0dXJuICp0aGlzOwogCiAgICAg
Ly8gQ3JlYXRlIGEgY29weSB0byBhcHBlbmQgdGhlIHJlc3VsdCBpbnRvLgotICAgIFJlZjxGb3Jt
RGF0YT4gbmV3Rm9ybURhdGEgPSBGb3JtRGF0YTo6Y3JlYXRlKCk7CisgICAgYXV0byBuZXdGb3Jt
RGF0YSA9IEZvcm1EYXRhOjpjcmVhdGUoKTsKICAgICBuZXdGb3JtRGF0YS0+c2V0QWx3YXlzU3Ry
ZWFtKGFsd2F5c1N0cmVhbSgpKTsKICAgICBuZXdGb3JtRGF0YS0+c2V0SWRlbnRpZmllcihpZGVu
dGlmaWVyKCkpOwotICAgIGl0ID0gZWxlbWVudHMoKS5iZWdpbigpOwotICAgIGZvciAoOyBpdCAh
PSBpdGVuZDsgKytpdCkgewotICAgICAgICBjb25zdCBGb3JtRGF0YUVsZW1lbnQmIGVsZW1lbnQg
PSAqaXQ7CisKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGVsZW1lbnQgOiBtX2VsZW1lbnRzKSB7CiAg
ICAgICAgIGlmIChlbGVtZW50Lm1fdHlwZSA9PSBGb3JtRGF0YUVsZW1lbnQ6OlR5cGU6OkRhdGEp
CiAgICAgICAgICAgICBuZXdGb3JtRGF0YS0+YXBwZW5kRGF0YShlbGVtZW50Lm1fZGF0YS5kYXRh
KCksIGVsZW1lbnQubV9kYXRhLnNpemUoKSk7CiAgICAgICAgIGVsc2UgaWYgKGVsZW1lbnQubV90
eXBlID09IEZvcm1EYXRhRWxlbWVudDo6VHlwZTo6RW5jb2RlZEZpbGUpCkBAIC0zNjMsNyArMzMz
LDcgQEAgdm9pZCBGb3JtRGF0YTo6Z2VuZXJhdGVGaWxlcyhEb2N1bWVudCogZAogICAgIGlmICgh
cGFnZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZm9yIChGb3JtRGF0YUVsZW1lbnQmIGVsZW1l
bnQgOiBtX2VsZW1lbnRzKSB7CisgICAgZm9yIChhdXRvJiBlbGVtZW50IDogbV9lbGVtZW50cykg
ewogICAgICAgICBpZiAoZWxlbWVudC5tX3R5cGUgPT0gRm9ybURhdGFFbGVtZW50OjpUeXBlOjpF
bmNvZGVkRmlsZSAmJiBlbGVtZW50Lm1fc2hvdWxkR2VuZXJhdGVGaWxlKSB7CiAgICAgICAgICAg
ICBBU1NFUlQoIWVsZW1lbnQubV9vd25zR2VuZXJhdGVkRmlsZSk7CiAgICAgICAgICAgICBBU1NF
UlQoZWxlbWVudC5tX2dlbmVyYXRlZEZpbGVuYW1lLmlzRW1wdHkoKSk7CkBAIC0zNzgsNyArMzQ4
LDcgQEAgdm9pZCBGb3JtRGF0YTo6Z2VuZXJhdGVGaWxlcyhEb2N1bWVudCogZAogCiBib29sIEZv
cm1EYXRhOjpoYXNHZW5lcmF0ZWRGaWxlcygpIGNvbnN0CiB7Ci0gICAgZm9yIChjb25zdCBGb3Jt
RGF0YUVsZW1lbnQmIGVsZW1lbnQgOiBtX2VsZW1lbnRzKSB7CisgICAgZm9yIChjb25zdCBhdXRv
JiBlbGVtZW50IDogbV9lbGVtZW50cykgewogICAgICAgICBpZiAoZWxlbWVudC5tX3R5cGUgPT0g
Rm9ybURhdGFFbGVtZW50OjpUeXBlOjpFbmNvZGVkRmlsZSAmJiAhZWxlbWVudC5tX2dlbmVyYXRl
ZEZpbGVuYW1lLmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAg
LTM4Nyw3ICszNTcsNyBAQCBib29sIEZvcm1EYXRhOjpoYXNHZW5lcmF0ZWRGaWxlcygpIGNvbnN0
CiAKIGJvb2wgRm9ybURhdGE6Omhhc093bmVkR2VuZXJhdGVkRmlsZXMoKSBjb25zdAogewotICAg
IGZvciAoY29uc3QgRm9ybURhdGFFbGVtZW50JiBlbGVtZW50IDogbV9lbGVtZW50cykgeworICAg
IGZvciAoY29uc3QgYXV0byYgZWxlbWVudCA6IG1fZWxlbWVudHMpIHsKICAgICAgICAgaWYgKGVs
ZW1lbnQubV90eXBlID09IEZvcm1EYXRhRWxlbWVudDo6VHlwZTo6RW5jb2RlZEZpbGUgJiYgZWxl
bWVudC5tX293bnNHZW5lcmF0ZWRGaWxlKSB7CiAgICAgICAgICAgICBBU1NFUlQoIWVsZW1lbnQu
bV9nZW5lcmF0ZWRGaWxlbmFtZS5pc0VtcHR5KCkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CkBAIC0zOTgsNyArMzY4LDcgQEAgYm9vbCBGb3JtRGF0YTo6aGFzT3duZWRHZW5lcmF0ZWRGaWxl
cygpIAogCiB2b2lkIEZvcm1EYXRhOjpyZW1vdmVHZW5lcmF0ZWRGaWxlc0lmTmVlZGVkKCkKIHsK
LSAgICBmb3IgKEZvcm1EYXRhRWxlbWVudCYgZWxlbWVudCA6IG1fZWxlbWVudHMpIHsKKyAgICBm
b3IgKGF1dG8mIGVsZW1lbnQgOiBtX2VsZW1lbnRzKSB7CiAgICAgICAgIGlmIChlbGVtZW50Lm1f
dHlwZSA9PSBGb3JtRGF0YUVsZW1lbnQ6OlR5cGU6OkVuY29kZWRGaWxlICYmIGVsZW1lbnQubV9v
d25zR2VuZXJhdGVkRmlsZSkgewogICAgICAgICAgICAgQVNTRVJUKCFlbGVtZW50Lm1fZ2VuZXJh
dGVkRmlsZW5hbWUuaXNFbXB0eSgpKTsKICAgICAgICAgICAgIEFTU0VSVChlbGVtZW50Lm1fc2hv
dWxkR2VuZXJhdGVGaWxlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Rm9ybURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L0Zvcm1EYXRhLmgJKHJldmlzaW9uIDIyMTgyNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvRm9ybURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMjIyLDcgKzIyMiw3IEBAIHB1
YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGVuZEJsb2IoY29uc3QgVVJMJiBibG9i
VVJMKTsKICAgICBjaGFyKiBleHBhbmREYXRhU3RvcmUoc2l6ZV90KTsKIAotICAgIHZvaWQgZmxh
dHRlbihWZWN0b3I8Y2hhcj4mKSBjb25zdDsgLy8gb21pdHMgZmlsZXMKKyAgICBWZWN0b3I8Y2hh
cj4gZmxhdHRlbigpIGNvbnN0OyAvLyBvbWl0cyBmaWxlcwogICAgIFN0cmluZyBmbGF0dGVuVG9T
dHJpbmcoKSBjb25zdDsgLy8gb21pdHMgZmlsZXMKIAogICAgIC8vIFJlc29sdmUgYWxsIGJsb2Ig
cmVmZXJlbmNlcyBzbyB3ZSBvbmx5IGhhdmUgZmlsZSBhbmQgZGF0YS4KSW5kZXg6IExheW91dFRl
c3RzL2ltcG9ydGVkL3czYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL0NoYW5nZUxvZwkocmV2aXNpb24gMjIxODI4KQorKysgTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBACisyMDE3
LTA5LTA5ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgRmluaXNoIG9m
ZiB0aGUgRm9ybURhdGEgaW1wbGVtZW50YXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NjY1OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL1hNTEh0dHBSZXF1ZXN0
L0Zvcm1EYXRhLWFwcGVuZC1leHBlY3RlZC50eHQ6CisgICAgICAgICogd2ViLXBsYXRmb3JtLXRl
c3RzL1hNTEh0dHBSZXF1ZXN0L2Zvcm1kYXRhLWRlbGV0ZS1leHBlY3RlZC50eHQ6CisgICAgICAg
ICogd2ViLXBsYXRmb3JtLXRlc3RzL1hNTEh0dHBSZXF1ZXN0L2Zvcm1kYXRhLWZvcmVhY2gtZXhw
ZWN0ZWQudHh0OgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9YTUxIdHRwUmVxdWVzdC9m
b3JtZGF0YS1nZXQtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9Y
TUxIdHRwUmVxdWVzdC9mb3JtZGF0YS1oYXMtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHdlYi1w
bGF0Zm9ybS10ZXN0cy9YTUxIdHRwUmVxdWVzdC9mb3JtZGF0YS1zZXQtZXhwZWN0ZWQudHh0Ogor
ICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9YTUxIdHRwUmVxdWVzdC9pbnRlcmZhY2VzLWV4
cGVjdGVkLnR4dDoKKyAgICAgICAgCisgICAgICAgICAgICBVcGRhdGUgcmVzdWx0cy4KKwogMjAx
Ny0wOS0wOCAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgUmVt
b3ZlIHN1cHBvcnQgZm9yID4+IGRlc2NlbmRhbnQgY29tYmluYXRvciBzeW50YXgKSW5kZXg6IExh
eW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvWE1MSHR0cFJlcXVlc3Qv
Rm9ybURhdGEtYXBwZW5kLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL1hNTEh0dHBSZXF1ZXN0L0Zvcm1EYXRhLWFw
cGVuZC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDIyMTgyNykKKysrIExheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvWE1MSHR0cFJlcXVlc3QvRm9ybURhdGEtYXBwZW5k
LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSwxNiArMSwxNiBAQAogCiBQQVNTIFBh
c3NpbmcgYSBTdHJpbmcgb2JqZWN0IHRvIEZvcm1EYXRhLmFwcGVuZCBzaG91bGQgd29yay4gCi1G
QUlMIHRlc3RGb3JtRGF0YUFwcGVuZDEgY3JlYXRlX2Zvcm1kYXRhKFsna2V5JywgJ3ZhbHVlMSdd
KS5nZXQgaXMgbm90IGEgZnVuY3Rpb24uIChJbiAnY3JlYXRlX2Zvcm1kYXRhKFsna2V5JywgJ3Zh
bHVlMSddKS5nZXQoJ2tleScpJywgJ2NyZWF0ZV9mb3JtZGF0YShbJ2tleScsICd2YWx1ZTEnXSku
Z2V0JyBpcyB1bmRlZmluZWQpCi1GQUlMIHRlc3RGb3JtRGF0YUFwcGVuZDIgY3JlYXRlX2Zvcm1k
YXRhKFsna2V5JywgJ3ZhbHVlMiddLCBbJ2tleScsICd2YWx1ZTEnXSkuZ2V0IGlzIG5vdCBhIGZ1
bmN0aW9uLiAoSW4gJ2NyZWF0ZV9mb3JtZGF0YShbJ2tleScsICd2YWx1ZTInXSwgWydrZXknLCAn
dmFsdWUxJ10pLmdldCgna2V5JyknLCAnY3JlYXRlX2Zvcm1kYXRhKFsna2V5JywgJ3ZhbHVlMidd
LCBbJ2tleScsICd2YWx1ZTEnXSkuZ2V0JyBpcyB1bmRlZmluZWQpCi1GQUlMIHRlc3RGb3JtRGF0
YUFwcGVuZFVuZGVmaW5lZDEgY3JlYXRlX2Zvcm1kYXRhKFsna2V5JywgdW5kZWZpbmVkXSkuZ2V0
IGlzIG5vdCBhIGZ1bmN0aW9uLiAoSW4gJ2NyZWF0ZV9mb3JtZGF0YShbJ2tleScsIHVuZGVmaW5l
ZF0pLmdldCgna2V5JyknLCAnY3JlYXRlX2Zvcm1kYXRhKFsna2V5JywgdW5kZWZpbmVkXSkuZ2V0
JyBpcyB1bmRlZmluZWQpCi1GQUlMIHRlc3RGb3JtRGF0YUFwcGVuZFVuZGVmaW5lZDIgY3JlYXRl
X2Zvcm1kYXRhKFsna2V5JywgdW5kZWZpbmVkXSwgWydrZXknLCAndmFsdWUxJ10pLmdldCBpcyBu
b3QgYSBmdW5jdGlvbi4gKEluICdjcmVhdGVfZm9ybWRhdGEoWydrZXknLCB1bmRlZmluZWRdLCBb
J2tleScsICd2YWx1ZTEnXSkuZ2V0KCdrZXknKScsICdjcmVhdGVfZm9ybWRhdGEoWydrZXknLCB1
bmRlZmluZWRdLCBbJ2tleScsICd2YWx1ZTEnXSkuZ2V0JyBpcyB1bmRlZmluZWQpCi1GQUlMIHRl
c3RGb3JtRGF0YUFwcGVuZE51bGwxIGNyZWF0ZV9mb3JtZGF0YShbJ2tleScsIG51bGxdKS5nZXQg
aXMgbm90IGEgZnVuY3Rpb24uIChJbiAnY3JlYXRlX2Zvcm1kYXRhKFsna2V5JywgbnVsbF0pLmdl
dCgna2V5JyknLCAnY3JlYXRlX2Zvcm1kYXRhKFsna2V5JywgbnVsbF0pLmdldCcgaXMgdW5kZWZp
bmVkKQotRkFJTCB0ZXN0Rm9ybURhdGFBcHBlbmROdWxsMiBjcmVhdGVfZm9ybWRhdGEoWydrZXkn
LCBudWxsXSwgWydrZXknLCAndmFsdWUxJ10pLmdldCBpcyBub3QgYSBmdW5jdGlvbi4gKEluICdj
cmVhdGVfZm9ybWRhdGEoWydrZXknLCBudWxsXSwgWydrZXknLCAndmFsdWUxJ10pLmdldCgna2V5
JyknLCAnY3JlYXRlX2Zvcm1kYXRhKFsna2V5JywgbnVsbF0sIFsna2V5JywgJ3ZhbHVlMSddKS5n
ZXQnIGlzIHVuZGVmaW5lZCkKLUZBSUwgdGVzdEZvcm1EYXRhQXBwZW5kVG9Gb3JtMSBmZC5nZXQg
aXMgbm90IGEgZnVuY3Rpb24uIChJbiAnZmQuZ2V0KCdrZXknKScsICdmZC5nZXQnIGlzIHVuZGVm
aW5lZCkKLUZBSUwgdGVzdEZvcm1EYXRhQXBwZW5kVG9Gb3JtMiBmZC5nZXQgaXMgbm90IGEgZnVu
Y3Rpb24uIChJbiAnZmQuZ2V0KCdrZXknKScsICdmZC5nZXQnIGlzIHVuZGVmaW5lZCkKLUZBSUwg
dGVzdEZvcm1EYXRhQXBwZW5kVG9Gb3JtVW5kZWZpbmVkMSBmZC5nZXQgaXMgbm90IGEgZnVuY3Rp
b24uIChJbiAnZmQuZ2V0KCdrZXknKScsICdmZC5nZXQnIGlzIHVuZGVmaW5lZCkKLUZBSUwgdGVz
dEZvcm1EYXRhQXBwZW5kVG9Gb3JtVW5kZWZpbmVkMiBmZC5nZXQgaXMgbm90IGEgZnVuY3Rpb24u
IChJbiAnZmQuZ2V0KCdrZXknKScsICdmZC5nZXQnIGlzIHVuZGVmaW5lZCkKLUZBSUwgdGVzdEZv
cm1EYXRhQXBwZW5kVG9Gb3JtTnVsbDEgZmQuZ2V0IGlzIG5vdCBhIGZ1bmN0aW9uLiAoSW4gJ2Zk
LmdldCgna2V5JyknLCAnZmQuZ2V0JyBpcyB1bmRlZmluZWQpCi1GQUlMIHRlc3RGb3JtRGF0YUFw
cGVuZFRvRm9ybU51bGwyIGZkLmdldCBpcyBub3QgYSBmdW5jdGlvbi4gKEluICdmZC5nZXQoJ2tl
eScpJywgJ2ZkLmdldCcgaXMgdW5kZWZpbmVkKQotRkFJTCB0ZXN0Rm9ybURhdGFBcHBlbmRFbXB0
eUJsb2IgY3JlYXRlX2Zvcm1kYXRhKFsna2V5JywgbmV3IEJsb2IoKSwgJ2JsYW5rLnR4dCddKS5n
ZXQgaXMgbm90IGEgZnVuY3Rpb24uIChJbiAnY3JlYXRlX2Zvcm1kYXRhKFsna2V5JywgbmV3IEJs
b2IoKSwgJ2JsYW5rLnR4dCddKS5nZXQoJ2tleScpJywgJ2NyZWF0ZV9mb3JtZGF0YShbJ2tleScs
IG5ldyBCbG9iKCksICdibGFuay50eHQnXSkuZ2V0JyBpcyB1bmRlZmluZWQpCitQQVNTIHRlc3RG
b3JtRGF0YUFwcGVuZDEgCitQQVNTIHRlc3RGb3JtRGF0YUFwcGVuZDIgCitQQVNTIHRlc3RGb3Jt
RGF0YUFwcGVuZFVuZGVmaW5lZDEgCitQQVNTIHRlc3RGb3JtRGF0YUFwcGVuZFVuZGVmaW5lZDIg
CitQQVNTIHRlc3RGb3JtRGF0YUFwcGVuZE51bGwxIAorUEFTUyB0ZXN0Rm9ybURhdGFBcHBlbmRO
dWxsMiAKK1BBU1MgdGVzdEZvcm1EYXRhQXBwZW5kVG9Gb3JtMSAKK1BBU1MgdGVzdEZvcm1EYXRh
QXBwZW5kVG9Gb3JtMiAKK1BBU1MgdGVzdEZvcm1EYXRhQXBwZW5kVG9Gb3JtVW5kZWZpbmVkMSAK
K1BBU1MgdGVzdEZvcm1EYXRhQXBwZW5kVG9Gb3JtVW5kZWZpbmVkMiAKK1BBU1MgdGVzdEZvcm1E
YXRhQXBwZW5kVG9Gb3JtTnVsbDEgCitQQVNTIHRlc3RGb3JtRGF0YUFwcGVuZFRvRm9ybU51bGwy
IAorUEFTUyB0ZXN0Rm9ybURhdGFBcHBlbmRFbXB0eUJsb2IgCiAKSW5kZXg6IExheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvWE1MSHR0cFJlcXVlc3QvZm9ybWRhdGEt
ZGVsZXRlLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9pbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL1hNTEh0dHBSZXF1ZXN0L2Zvcm1kYXRhLWRlbGV0ZS1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDIyMTgyNykKKysrIExheW91dFRlc3RzL2ltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvWE1MSHR0cFJlcXVlc3QvZm9ybWRhdGEtZGVsZXRlLWV4cGVjdGVk
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSw5ICsxLDkgQEAKIAotRkFJTCB0ZXN0Rm9ybURhdGFE
ZWxldGUgZmQuZGVsZXRlIGlzIG5vdCBhIGZ1bmN0aW9uLiAoSW4gJ2ZkLmRlbGV0ZSgna2V5Jykn
LCAnZmQuZGVsZXRlJyBpcyB1bmRlZmluZWQpCi1GQUlMIHRlc3RGb3JtRGF0YURlbGV0ZUZyb21G
b3JtIGZkLmRlbGV0ZSBpcyBub3QgYSBmdW5jdGlvbi4gKEluICdmZC5kZWxldGUoJ2tleScpJywg
J2ZkLmRlbGV0ZScgaXMgdW5kZWZpbmVkKQotRkFJTCB0ZXN0Rm9ybURhdGFEZWxldGVGcm9tRm9y
bU5vbkV4aXN0ZW50S2V5IGZkLmRlbGV0ZSBpcyBub3QgYSBmdW5jdGlvbi4gKEluICdmZC5kZWxl
dGUoJ25pbCcpJywgJ2ZkLmRlbGV0ZScgaXMgdW5kZWZpbmVkKQotRkFJTCB0ZXN0Rm9ybURhdGFE
ZWxldGVGcm9tRm9ybU90aGVyS2V5IGZkLmRlbGV0ZSBpcyBub3QgYSBmdW5jdGlvbi4gKEluICdm
ZC5kZWxldGUoJ2tleTEnKScsICdmZC5kZWxldGUnIGlzIHVuZGVmaW5lZCkKLUZBSUwgdGVzdEZv
cm1EYXRhRGVsZXRlRnJvbUVtcHR5Rm9ybSBmZC5kZWxldGUgaXMgbm90IGEgZnVuY3Rpb24uIChJ
biAnZmQuZGVsZXRlKCdrZXknKScsICdmZC5kZWxldGUnIGlzIHVuZGVmaW5lZCkKLUZBSUwgdGVz
dEZvcm1EYXRhRGVsZXRlTm9uRXhpc3RlbnRLZXkgZmQuZGVsZXRlIGlzIG5vdCBhIGZ1bmN0aW9u
LiAoSW4gJ2ZkLmRlbGV0ZSgnbmlsJyknLCAnZmQuZGVsZXRlJyBpcyB1bmRlZmluZWQpCi1GQUlM
IHRlc3RGb3JtRGF0YURlbGV0ZU90aGVyS2V5IGZkLmRlbGV0ZSBpcyBub3QgYSBmdW5jdGlvbi4g
KEluICdmZC5kZWxldGUoJ2tleTEnKScsICdmZC5kZWxldGUnIGlzIHVuZGVmaW5lZCkKK1BBU1Mg
dGVzdEZvcm1EYXRhRGVsZXRlIAorUEFTUyB0ZXN0Rm9ybURhdGFEZWxldGVGcm9tRm9ybSAKK1BB
U1MgdGVzdEZvcm1EYXRhRGVsZXRlRnJvbUZvcm1Ob25FeGlzdGVudEtleSAKK1BBU1MgdGVzdEZv
cm1EYXRhRGVsZXRlRnJvbUZvcm1PdGhlcktleSAKK1BBU1MgdGVzdEZvcm1EYXRhRGVsZXRlRnJv
bUVtcHR5Rm9ybSAKK1BBU1MgdGVzdEZvcm1EYXRhRGVsZXRlTm9uRXhpc3RlbnRLZXkgCitQQVNT
IHRlc3RGb3JtRGF0YURlbGV0ZU90aGVyS2V5IAogCkluZGV4OiBMYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL1hNTEh0dHBSZXF1ZXN0L2Zvcm1kYXRhLWZvcmVhY2gt
ZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvWE1MSHR0cFJlcXVlc3QvZm9ybWRhdGEtZm9yZWFjaC1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDIyMTgyNykKKysrIExheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvWE1MSHR0cFJlcXVlc3QvZm9ybWRhdGEtZm9yZWFjaC1leHBlY3RlZC50eHQJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw2IEBACi1DT05TT0xFIE1FU1NBR0U6IGxpbmUgMTY6
IFR5cGVFcnJvcjogZmQuZGVsZXRlIGlzIG5vdCBhIGZ1bmN0aW9uLiAoSW4gJ2ZkLmRlbGV0ZSgn
bjInKScsICdmZC5kZWxldGUnIGlzIHVuZGVmaW5lZCkKIAotRkFJTCBGb3JtRGF0YTogZm9yZWFj
aCBUeXBlRXJyb3I6IGZkLmRlbGV0ZSBpcyBub3QgYSBmdW5jdGlvbi4gKEluICdmZC5kZWxldGUo
J24yJyknLCAnZmQuZGVsZXRlJyBpcyB1bmRlZmluZWQpCitQQVNTIEl0ZXJhdG9yIHNob3VsZCBy
ZXR1cm4gZHVwbGljYXRlIGtleXMgYW5kIG5vbi1kZWxldGVkIHZhbHVlcyAKK1BBU1MgRW50cmll
cyBpdGVyYXRvciBzaG91bGQgcmV0dXJuIGR1cGxpY2F0ZSBrZXlzIGFuZCBub24tZGVsZXRlZCB2
YWx1ZXMgCitQQVNTIEtleXMgaXRlcmF0b3Igc2hvdWxkIHJldHVybiBkdXBsaWNhdGVzIAorUEFT
UyBWYWx1ZXMgaXRlcmF0b3Igc2hvdWxkIHJldHVybiBub24tZGVsZXRlZCB2YWx1ZXMgCiAKSW5k
ZXg6IExheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvWE1MSHR0cFJl
cXVlc3QvZm9ybWRhdGEtZ2V0LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL1hNTEh0dHBSZXF1ZXN0L2Zvcm1kYXRh
LWdldC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDIyMTgyNykKKysrIExheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvWE1MSHR0cFJlcXVlc3QvZm9ybWRhdGEtZ2V0LWV4
cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSwxNCArMSwxNCBAQAogCi1GQUlMIHRlc3RG
b3JtRGF0YUdldCBjcmVhdGVfZm9ybWRhdGEoWydrZXknLCAndmFsdWUxJ10sIFsna2V5JywgJ3Zh
bHVlMiddKS5nZXQgaXMgbm90IGEgZnVuY3Rpb24uIChJbiAnY3JlYXRlX2Zvcm1kYXRhKFsna2V5
JywgJ3ZhbHVlMSddLCBbJ2tleScsICd2YWx1ZTInXSkuZ2V0KCdrZXknKScsICdjcmVhdGVfZm9y
bWRhdGEoWydrZXknLCAndmFsdWUxJ10sIFsna2V5JywgJ3ZhbHVlMiddKS5nZXQnIGlzIHVuZGVm
aW5lZCkKLUZBSUwgdGVzdEZvcm1EYXRhR2V0RnJvbUZvcm0gbmV3IEZvcm1EYXRhKGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCdmb3JtJykpLmdldCBpcyBub3QgYSBmdW5jdGlvbi4gKEluICduZXcg
Rm9ybURhdGEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Zvcm0nKSkuZ2V0KCdrZXknKScsICdu
ZXcgRm9ybURhdGEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Zvcm0nKSkuZ2V0JyBpcyB1bmRl
ZmluZWQpCi1GQUlMIHRlc3RGb3JtRGF0YUdldEZyb21Gb3JtTnVsbCBuZXcgRm9ybURhdGEoZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Zvcm0nKSkuZ2V0IGlzIG5vdCBhIGZ1bmN0aW9uLiAoSW4g
J25ldyBGb3JtRGF0YShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZm9ybScpKS5nZXQoJ25pbCcp
JywgJ25ldyBGb3JtRGF0YShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZm9ybScpKS5nZXQnIGlz
IHVuZGVmaW5lZCkKLUZBSUwgdGVzdEZvcm1EYXRhR2V0RnJvbUVtcHR5Rm9ybSBuZXcgRm9ybURh
dGEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VtcHR5LWZvcm0nKSkuZ2V0IGlzIG5vdCBhIGZ1
bmN0aW9uLiAoSW4gJ25ldyBGb3JtRGF0YShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZW1wdHkt
Zm9ybScpKS5nZXQoJ2tleScpJywgJ25ldyBGb3JtRGF0YShkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgnZW1wdHktZm9ybScpKS5nZXQnIGlzIHVuZGVmaW5lZCkKLUZBSUwgdGVzdEZvcm1EYXRhR2V0
TnVsbDEgY3JlYXRlX2Zvcm1kYXRhKFsna2V5JywgJ3ZhbHVlMSddLCBbJ2tleScsICd2YWx1ZTIn
XSkuZ2V0IGlzIG5vdCBhIGZ1bmN0aW9uLiAoSW4gJ2NyZWF0ZV9mb3JtZGF0YShbJ2tleScsICd2
YWx1ZTEnXSwgWydrZXknLCAndmFsdWUyJ10pLmdldCgnbmlsJyknLCAnY3JlYXRlX2Zvcm1kYXRh
KFsna2V5JywgJ3ZhbHVlMSddLCBbJ2tleScsICd2YWx1ZTInXSkuZ2V0JyBpcyB1bmRlZmluZWQp
Ci1GQUlMIHRlc3RGb3JtRGF0YUdldE51bGwyIGNyZWF0ZV9mb3JtZGF0YSgpLmdldCBpcyBub3Qg
YSBmdW5jdGlvbi4gKEluICdjcmVhdGVfZm9ybWRhdGEoKS5nZXQoJ2tleScpJywgJ2NyZWF0ZV9m
b3JtZGF0YSgpLmdldCcgaXMgdW5kZWZpbmVkKQotRkFJTCB0ZXN0Rm9ybURhdGFHZXRBbGwgY3Jl
YXRlX2Zvcm1kYXRhKFsna2V5JywgJ3ZhbHVlMSddLCBbJ2tleScsICd2YWx1ZTInXSkuZ2V0QWxs
IGlzIG5vdCBhIGZ1bmN0aW9uLiAoSW4gJ2NyZWF0ZV9mb3JtZGF0YShbJ2tleScsICd2YWx1ZTEn
XSwgWydrZXknLCAndmFsdWUyJ10pLmdldEFsbCgna2V5JyknLCAnY3JlYXRlX2Zvcm1kYXRhKFsn
a2V5JywgJ3ZhbHVlMSddLCBbJ2tleScsICd2YWx1ZTInXSkuZ2V0QWxsJyBpcyB1bmRlZmluZWQp
Ci1GQUlMIHRlc3RGb3JtRGF0YUdldEFsbEVtcHR5MSBjcmVhdGVfZm9ybWRhdGEoWydrZXknLCAn
dmFsdWUxJ10sIFsna2V5JywgJ3ZhbHVlMiddKS5nZXRBbGwgaXMgbm90IGEgZnVuY3Rpb24uIChJ
biAnY3JlYXRlX2Zvcm1kYXRhKFsna2V5JywgJ3ZhbHVlMSddLCBbJ2tleScsICd2YWx1ZTInXSku
Z2V0QWxsKCduaWwnKScsICdjcmVhdGVfZm9ybWRhdGEoWydrZXknLCAndmFsdWUxJ10sIFsna2V5
JywgJ3ZhbHVlMiddKS5nZXRBbGwnIGlzIHVuZGVmaW5lZCkKLUZBSUwgdGVzdEZvcm1EYXRhR2V0
QWxsRW1wdHkyIGNyZWF0ZV9mb3JtZGF0YSgpLmdldEFsbCBpcyBub3QgYSBmdW5jdGlvbi4gKElu
ICdjcmVhdGVfZm9ybWRhdGEoKS5nZXRBbGwoJ2tleScpJywgJ2NyZWF0ZV9mb3JtZGF0YSgpLmdl
dEFsbCcgaXMgdW5kZWZpbmVkKQotRkFJTCB0ZXN0Rm9ybURhdGFHZXRBbGxGcm9tRm9ybSBuZXcg
Rm9ybURhdGEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Zvcm0nKSkuZ2V0QWxsIGlzIG5vdCBh
IGZ1bmN0aW9uLiAoSW4gJ25ldyBGb3JtRGF0YShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZm9y
bScpKS5nZXRBbGwoJ2tleScpJywgJ25ldyBGb3JtRGF0YShkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgnZm9ybScpKS5nZXRBbGwnIGlzIHVuZGVmaW5lZCkKLUZBSUwgdGVzdEZvcm1EYXRhR2V0QWxs
RnJvbUZvcm1OdWxsIG5ldyBGb3JtRGF0YShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZm9ybScp
KS5nZXRBbGwgaXMgbm90IGEgZnVuY3Rpb24uIChJbiAnbmV3IEZvcm1EYXRhKGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCdmb3JtJykpLmdldEFsbCgnbmlsJyknLCAnbmV3IEZvcm1EYXRhKGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCdmb3JtJykpLmdldEFsbCcgaXMgdW5kZWZpbmVkKQotRkFJTCB0
ZXN0Rm9ybURhdGFHZXRBbGxGcm9tRW1wdHlGb3JtIG5ldyBGb3JtRGF0YShkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgnZW1wdHktZm9ybScpKS5nZXRBbGwgaXMgbm90IGEgZnVuY3Rpb24uIChJbiAn
bmV3IEZvcm1EYXRhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlbXB0eS1mb3JtJykpLmdldEFs
bCgna2V5JyknLCAnbmV3IEZvcm1EYXRhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlbXB0eS1m
b3JtJykpLmdldEFsbCcgaXMgdW5kZWZpbmVkKQorUEFTUyB0ZXN0Rm9ybURhdGFHZXQgCitQQVNT
IHRlc3RGb3JtRGF0YUdldEZyb21Gb3JtIAorUEFTUyB0ZXN0Rm9ybURhdGFHZXRGcm9tRm9ybU51
bGwgCitQQVNTIHRlc3RGb3JtRGF0YUdldEZyb21FbXB0eUZvcm0gCitQQVNTIHRlc3RGb3JtRGF0
YUdldE51bGwxIAorUEFTUyB0ZXN0Rm9ybURhdGFHZXROdWxsMiAKK1BBU1MgdGVzdEZvcm1EYXRh
R2V0QWxsIAorUEFTUyB0ZXN0Rm9ybURhdGFHZXRBbGxFbXB0eTEgCitQQVNTIHRlc3RGb3JtRGF0
YUdldEFsbEVtcHR5MiAKK1BBU1MgdGVzdEZvcm1EYXRhR2V0QWxsRnJvbUZvcm0gCitQQVNTIHRl
c3RGb3JtRGF0YUdldEFsbEZyb21Gb3JtTnVsbCAKK1BBU1MgdGVzdEZvcm1EYXRhR2V0QWxsRnJv
bUVtcHR5Rm9ybSAKIApJbmRleDogTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9YTUxIdHRwUmVxdWVzdC9mb3JtZGF0YS1oYXMtZXhwZWN0ZWQudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvWE1MSHR0
cFJlcXVlc3QvZm9ybWRhdGEtaGFzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMjIxODI3KQorKysg
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9YTUxIdHRwUmVxdWVz
dC9mb3JtZGF0YS1oYXMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDggKzEsOCBA
QAogCi1GQUlMIHRlc3RGb3JtRGF0YUhhcyBjcmVhdGVfZm9ybWRhdGEoWydrZXknLCAndmFsdWUx
J10sIFsna2V5JywgJ3ZhbHVlMiddKS5oYXMgaXMgbm90IGEgZnVuY3Rpb24uIChJbiAnY3JlYXRl
X2Zvcm1kYXRhKFsna2V5JywgJ3ZhbHVlMSddLCBbJ2tleScsICd2YWx1ZTInXSkuaGFzKCdrZXkn
KScsICdjcmVhdGVfZm9ybWRhdGEoWydrZXknLCAndmFsdWUxJ10sIFsna2V5JywgJ3ZhbHVlMidd
KS5oYXMnIGlzIHVuZGVmaW5lZCkKLUZBSUwgdGVzdEZvcm1EYXRhSGFzRnJvbUZvcm0gbmV3IEZv
cm1EYXRhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmb3JtJykpLmhhcyBpcyBub3QgYSBmdW5j
dGlvbi4gKEluICduZXcgRm9ybURhdGEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Zvcm0nKSku
aGFzKCdrZXknKScsICduZXcgRm9ybURhdGEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Zvcm0n
KSkuaGFzJyBpcyB1bmRlZmluZWQpCi1GQUlMIHRlc3RGb3JtRGF0YUhhc0Zyb21Gb3JtTnVsbCBu
ZXcgRm9ybURhdGEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Zvcm0nKSkuaGFzIGlzIG5vdCBh
IGZ1bmN0aW9uLiAoSW4gJ25ldyBGb3JtRGF0YShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZm9y
bScpKS5oYXMoJ25pbCcpJywgJ25ldyBGb3JtRGF0YShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn
Zm9ybScpKS5oYXMnIGlzIHVuZGVmaW5lZCkKLUZBSUwgdGVzdEZvcm1EYXRhSGFzRnJvbUVtcHR5
Rm9ybSBuZXcgRm9ybURhdGEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VtcHR5LWZvcm0nKSku
aGFzIGlzIG5vdCBhIGZ1bmN0aW9uLiAoSW4gJ25ldyBGb3JtRGF0YShkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgnZW1wdHktZm9ybScpKS5oYXMoJ2tleScpJywgJ25ldyBGb3JtRGF0YShkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgnZW1wdHktZm9ybScpKS5oYXMnIGlzIHVuZGVmaW5lZCkKLUZBSUwg
dGVzdEZvcm1EYXRhSGFzRW1wdHkxIGNyZWF0ZV9mb3JtZGF0YShbJ2tleScsICd2YWx1ZTEnXSwg
WydrZXknLCAndmFsdWUyJ10pLmhhcyBpcyBub3QgYSBmdW5jdGlvbi4gKEluICdjcmVhdGVfZm9y
bWRhdGEoWydrZXknLCAndmFsdWUxJ10sIFsna2V5JywgJ3ZhbHVlMiddKS5oYXMoJ25pbCcpJywg
J2NyZWF0ZV9mb3JtZGF0YShbJ2tleScsICd2YWx1ZTEnXSwgWydrZXknLCAndmFsdWUyJ10pLmhh
cycgaXMgdW5kZWZpbmVkKQotRkFJTCB0ZXN0Rm9ybURhdGFIYXNFbXB0eTIgY3JlYXRlX2Zvcm1k
YXRhKCkuaGFzIGlzIG5vdCBhIGZ1bmN0aW9uLiAoSW4gJ2NyZWF0ZV9mb3JtZGF0YSgpLmhhcygn
a2V5JyknLCAnY3JlYXRlX2Zvcm1kYXRhKCkuaGFzJyBpcyB1bmRlZmluZWQpCitQQVNTIHRlc3RG
b3JtRGF0YUhhcyAKK1BBU1MgdGVzdEZvcm1EYXRhSGFzRnJvbUZvcm0gCitQQVNTIHRlc3RGb3Jt
RGF0YUhhc0Zyb21Gb3JtTnVsbCAKK1BBU1MgdGVzdEZvcm1EYXRhSGFzRnJvbUVtcHR5Rm9ybSAK
K1BBU1MgdGVzdEZvcm1EYXRhSGFzRW1wdHkxIAorUEFTUyB0ZXN0Rm9ybURhdGFIYXNFbXB0eTIg
CiAKSW5kZXg6IExheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvWE1M
SHR0cFJlcXVlc3QvZm9ybWRhdGEtc2V0LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL1hNTEh0dHBSZXF1ZXN0L2Zv
cm1kYXRhLXNldC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDIyMTgyNykKKysrIExheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvWE1MSHR0cFJlcXVlc3QvZm9ybWRhdGEt
c2V0LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSwxNiArMSwxNiBAQAogCi1GQUlM
IFBhc3NpbmcgYSBTdHJpbmcgb2JqZWN0IHRvIEZvcm1EYXRhLnNldCBzaG91bGQgd29yayBmZC5z
ZXQgaXMgbm90IGEgZnVuY3Rpb24uIChJbiAnZmQuc2V0KCJuYW1lIiwgbmV3IFN0cmluZygidmFs
dWUiKSknLCAnZmQuc2V0JyBpcyB1bmRlZmluZWQpCi1GQUlMIHRlc3RGb3JtRGF0YVNldDEgdW5k
ZWZpbmVkIGlzIG5vdCBhbiBvYmplY3QgKGV2YWx1YXRpbmcgJ2ZkLnNldC5hcHBseScpCi1GQUlM
IHRlc3RGb3JtRGF0YVNldDIgdW5kZWZpbmVkIGlzIG5vdCBhbiBvYmplY3QgKGV2YWx1YXRpbmcg
J2ZkLnNldC5hcHBseScpCi1GQUlMIHRlc3RGb3JtRGF0YVNldFVuZGVmaW5lZDEgdW5kZWZpbmVk
IGlzIG5vdCBhbiBvYmplY3QgKGV2YWx1YXRpbmcgJ2ZkLnNldC5hcHBseScpCi1GQUlMIHRlc3RG
b3JtRGF0YVNldFVuZGVmaW5lZDIgdW5kZWZpbmVkIGlzIG5vdCBhbiBvYmplY3QgKGV2YWx1YXRp
bmcgJ2ZkLnNldC5hcHBseScpCi1GQUlMIHRlc3RGb3JtRGF0YVNldE51bGwxIHVuZGVmaW5lZCBp
cyBub3QgYW4gb2JqZWN0IChldmFsdWF0aW5nICdmZC5zZXQuYXBwbHknKQotRkFJTCB0ZXN0Rm9y
bURhdGFTZXROdWxsMiB1bmRlZmluZWQgaXMgbm90IGFuIG9iamVjdCAoZXZhbHVhdGluZyAnZmQu
c2V0LmFwcGx5JykKLUZBSUwgdGVzdEZvcm1EYXRhU2V0VG9Gb3JtMSBmZC5zZXQgaXMgbm90IGEg
ZnVuY3Rpb24uIChJbiAnZmQuc2V0KCdrZXknLCAndmFsdWUxJyknLCAnZmQuc2V0JyBpcyB1bmRl
ZmluZWQpCi1GQUlMIHRlc3RGb3JtRGF0YVNldFRvRm9ybTIgZmQuc2V0IGlzIG5vdCBhIGZ1bmN0
aW9uLiAoSW4gJ2ZkLnNldCgna2V5JywgJ3ZhbHVlMicpJywgJ2ZkLnNldCcgaXMgdW5kZWZpbmVk
KQotRkFJTCB0ZXN0Rm9ybURhdGFTZXRUb0Zvcm1VbmRlZmluZWQxIGZkLnNldCBpcyBub3QgYSBm
dW5jdGlvbi4gKEluICdmZC5zZXQoJ2tleScsIHVuZGVmaW5lZCknLCAnZmQuc2V0JyBpcyB1bmRl
ZmluZWQpCi1GQUlMIHRlc3RGb3JtRGF0YVNldFRvRm9ybVVuZGVmaW5lZDIgZmQuc2V0IGlzIG5v
dCBhIGZ1bmN0aW9uLiAoSW4gJ2ZkLnNldCgna2V5JywgdW5kZWZpbmVkKScsICdmZC5zZXQnIGlz
IHVuZGVmaW5lZCkKLUZBSUwgdGVzdEZvcm1EYXRhU2V0VG9Gb3JtTnVsbDEgZmQuc2V0IGlzIG5v
dCBhIGZ1bmN0aW9uLiAoSW4gJ2ZkLnNldCgna2V5JywgbnVsbCknLCAnZmQuc2V0JyBpcyB1bmRl
ZmluZWQpCi1GQUlMIHRlc3RGb3JtRGF0YVNldFRvRm9ybU51bGwyIGZkLnNldCBpcyBub3QgYSBm
dW5jdGlvbi4gKEluICdmZC5zZXQoJ2tleScsIG51bGwpJywgJ2ZkLnNldCcgaXMgdW5kZWZpbmVk
KQotRkFJTCB0ZXN0Rm9ybURhdGFTZXRFbXB0eUJsb2IgZmQuc2V0IGlzIG5vdCBhIGZ1bmN0aW9u
LiAoSW4gJ2ZkLnNldCgna2V5JywgbmV3IEJsb2IoW10pLCAnYmxhbmsudHh0JyknLCAnZmQuc2V0
JyBpcyB1bmRlZmluZWQpCitQQVNTIFBhc3NpbmcgYSBTdHJpbmcgb2JqZWN0IHRvIEZvcm1EYXRh
LnNldCBzaG91bGQgd29yayAKK1BBU1MgdGVzdEZvcm1EYXRhU2V0MSAKK1BBU1MgdGVzdEZvcm1E
YXRhU2V0MiAKK1BBU1MgdGVzdEZvcm1EYXRhU2V0VW5kZWZpbmVkMSAKK1BBU1MgdGVzdEZvcm1E
YXRhU2V0VW5kZWZpbmVkMiAKK1BBU1MgdGVzdEZvcm1EYXRhU2V0TnVsbDEgCitQQVNTIHRlc3RG
b3JtRGF0YVNldE51bGwyIAorUEFTUyB0ZXN0Rm9ybURhdGFTZXRUb0Zvcm0xIAorUEFTUyB0ZXN0
Rm9ybURhdGFTZXRUb0Zvcm0yIAorUEFTUyB0ZXN0Rm9ybURhdGFTZXRUb0Zvcm1VbmRlZmluZWQx
IAorUEFTUyB0ZXN0Rm9ybURhdGFTZXRUb0Zvcm1VbmRlZmluZWQyIAorUEFTUyB0ZXN0Rm9ybURh
dGFTZXRUb0Zvcm1OdWxsMSAKK1BBU1MgdGVzdEZvcm1EYXRhU2V0VG9Gb3JtTnVsbDIgCitQQVNT
IHRlc3RGb3JtRGF0YVNldEVtcHR5QmxvYiAKIApJbmRleDogTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9YTUxIdHRwUmVxdWVzdC9pbnRlcmZhY2VzLWV4cGVjdGVk
LnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL1hNTEh0dHBSZXF1ZXN0L2ludGVyZmFjZXMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAy
MjE4MjcpCisrKyBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL1hN
TEh0dHBSZXF1ZXN0L2ludGVyZmFjZXMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0x
MDgsNDQgKzEwOCw0NCBAQCBQQVNTIEZvcm1EYXRhIGludGVyZmFjZTogZXhpc3RlbmNlIGFuZCBw
CiBQQVNTIEZvcm1EYXRhIGludGVyZmFjZTogZXhpc3RlbmNlIGFuZCBwcm9wZXJ0aWVzIG9mIGlu
dGVyZmFjZSBwcm90b3R5cGUgb2JqZWN0J3MgImNvbnN0cnVjdG9yIiBwcm9wZXJ0eSAKIFBBU1Mg
Rm9ybURhdGEgaW50ZXJmYWNlOiBvcGVyYXRpb24gYXBwZW5kKFVTVlN0cmluZyxCbG9iLFVTVlN0
cmluZykgCiBQQVNTIEZvcm1EYXRhIGludGVyZmFjZTogb3BlcmF0aW9uIGFwcGVuZChVU1ZTdHJp
bmcsVVNWU3RyaW5nKSAKLUZBSUwgRm9ybURhdGEgaW50ZXJmYWNlOiBvcGVyYXRpb24gZGVsZXRl
KFVTVlN0cmluZykgYXNzZXJ0X293bl9wcm9wZXJ0eTogaW50ZXJmYWNlIHByb3RvdHlwZSBvYmpl
Y3QgbWlzc2luZyBub24tc3RhdGljIG9wZXJhdGlvbiBleHBlY3RlZCBwcm9wZXJ0eSAiZGVsZXRl
IiBtaXNzaW5nCi1GQUlMIEZvcm1EYXRhIGludGVyZmFjZTogb3BlcmF0aW9uIGdldChVU1ZTdHJp
bmcpIGFzc2VydF9vd25fcHJvcGVydHk6IGludGVyZmFjZSBwcm90b3R5cGUgb2JqZWN0IG1pc3Np
bmcgbm9uLXN0YXRpYyBvcGVyYXRpb24gZXhwZWN0ZWQgcHJvcGVydHkgImdldCIgbWlzc2luZwot
RkFJTCBGb3JtRGF0YSBpbnRlcmZhY2U6IG9wZXJhdGlvbiBnZXRBbGwoVVNWU3RyaW5nKSBhc3Nl
cnRfb3duX3Byb3BlcnR5OiBpbnRlcmZhY2UgcHJvdG90eXBlIG9iamVjdCBtaXNzaW5nIG5vbi1z
dGF0aWMgb3BlcmF0aW9uIGV4cGVjdGVkIHByb3BlcnR5ICJnZXRBbGwiIG1pc3NpbmcKLUZBSUwg
Rm9ybURhdGEgaW50ZXJmYWNlOiBvcGVyYXRpb24gaGFzKFVTVlN0cmluZykgYXNzZXJ0X293bl9w
cm9wZXJ0eTogaW50ZXJmYWNlIHByb3RvdHlwZSBvYmplY3QgbWlzc2luZyBub24tc3RhdGljIG9w
ZXJhdGlvbiBleHBlY3RlZCBwcm9wZXJ0eSAiaGFzIiBtaXNzaW5nCi1GQUlMIEZvcm1EYXRhIGlu
dGVyZmFjZTogb3BlcmF0aW9uIHNldChVU1ZTdHJpbmcsQmxvYixVU1ZTdHJpbmcpIGFzc2VydF9v
d25fcHJvcGVydHk6IGludGVyZmFjZSBwcm90b3R5cGUgb2JqZWN0IG1pc3Npbmcgbm9uLXN0YXRp
YyBvcGVyYXRpb24gZXhwZWN0ZWQgcHJvcGVydHkgInNldCIgbWlzc2luZwotRkFJTCBGb3JtRGF0
YSBpbnRlcmZhY2U6IG9wZXJhdGlvbiBzZXQoVVNWU3RyaW5nLFVTVlN0cmluZykgYXNzZXJ0X293
bl9wcm9wZXJ0eTogaW50ZXJmYWNlIHByb3RvdHlwZSBvYmplY3QgbWlzc2luZyBub24tc3RhdGlj
IG9wZXJhdGlvbiBleHBlY3RlZCBwcm9wZXJ0eSAic2V0IiBtaXNzaW5nCitQQVNTIEZvcm1EYXRh
IGludGVyZmFjZTogb3BlcmF0aW9uIGRlbGV0ZShVU1ZTdHJpbmcpIAorUEFTUyBGb3JtRGF0YSBp
bnRlcmZhY2U6IG9wZXJhdGlvbiBnZXQoVVNWU3RyaW5nKSAKK1BBU1MgRm9ybURhdGEgaW50ZXJm
YWNlOiBvcGVyYXRpb24gZ2V0QWxsKFVTVlN0cmluZykgCitQQVNTIEZvcm1EYXRhIGludGVyZmFj
ZTogb3BlcmF0aW9uIGhhcyhVU1ZTdHJpbmcpIAorUEFTUyBGb3JtRGF0YSBpbnRlcmZhY2U6IG9w
ZXJhdGlvbiBzZXQoVVNWU3RyaW5nLEJsb2IsVVNWU3RyaW5nKSAKK1BBU1MgRm9ybURhdGEgaW50
ZXJmYWNlOiBvcGVyYXRpb24gc2V0KFVTVlN0cmluZyxVU1ZTdHJpbmcpIAogUEFTUyBGb3JtRGF0
YSBpbnRlcmZhY2U6IG5ldyBGb3JtRGF0YSgpIG11c3QgaW5oZXJpdCBwcm9wZXJ0eSAiYXBwZW5k
IiB3aXRoIHRoZSBwcm9wZXIgdHlwZSAoMCkgCiBQQVNTIEZvcm1EYXRhIGludGVyZmFjZTogY2Fs
bGluZyBhcHBlbmQoVVNWU3RyaW5nLEJsb2IsVVNWU3RyaW5nKSBvbiBuZXcgRm9ybURhdGEoKSB3
aXRoIHRvbyBmZXcgYXJndW1lbnRzIG11c3QgdGhyb3cgVHlwZUVycm9yIAogUEFTUyBGb3JtRGF0
YSBpbnRlcmZhY2U6IG5ldyBGb3JtRGF0YSgpIG11c3QgaW5oZXJpdCBwcm9wZXJ0eSAiYXBwZW5k
IiB3aXRoIHRoZSBwcm9wZXIgdHlwZSAoMSkgCiBQQVNTIEZvcm1EYXRhIGludGVyZmFjZTogY2Fs
bGluZyBhcHBlbmQoVVNWU3RyaW5nLFVTVlN0cmluZykgb24gbmV3IEZvcm1EYXRhKCkgd2l0aCB0
b28gZmV3IGFyZ3VtZW50cyBtdXN0IHRocm93IFR5cGVFcnJvciAKLUZBSUwgRm9ybURhdGEgaW50
ZXJmYWNlOiBuZXcgRm9ybURhdGEoKSBtdXN0IGluaGVyaXQgcHJvcGVydHkgImRlbGV0ZSIgd2l0
aCB0aGUgcHJvcGVyIHR5cGUgKDIpIGFzc2VydF9pbmhlcml0czogcHJvcGVydHkgImRlbGV0ZSIg
bm90IGZvdW5kIGluIHByb3RvdHlwZSBjaGFpbgotRkFJTCBGb3JtRGF0YSBpbnRlcmZhY2U6IGNh
bGxpbmcgZGVsZXRlKFVTVlN0cmluZykgb24gbmV3IEZvcm1EYXRhKCkgd2l0aCB0b28gZmV3IGFy
Z3VtZW50cyBtdXN0IHRocm93IFR5cGVFcnJvciBhc3NlcnRfaW5oZXJpdHM6IHByb3BlcnR5ICJk
ZWxldGUiIG5vdCBmb3VuZCBpbiBwcm90b3R5cGUgY2hhaW4KLUZBSUwgRm9ybURhdGEgaW50ZXJm
YWNlOiBuZXcgRm9ybURhdGEoKSBtdXN0IGluaGVyaXQgcHJvcGVydHkgImdldCIgd2l0aCB0aGUg
cHJvcGVyIHR5cGUgKDMpIGFzc2VydF9pbmhlcml0czogcHJvcGVydHkgImdldCIgbm90IGZvdW5k
IGluIHByb3RvdHlwZSBjaGFpbgotRkFJTCBGb3JtRGF0YSBpbnRlcmZhY2U6IGNhbGxpbmcgZ2V0
KFVTVlN0cmluZykgb24gbmV3IEZvcm1EYXRhKCkgd2l0aCB0b28gZmV3IGFyZ3VtZW50cyBtdXN0
IHRocm93IFR5cGVFcnJvciBhc3NlcnRfaW5oZXJpdHM6IHByb3BlcnR5ICJnZXQiIG5vdCBmb3Vu
ZCBpbiBwcm90b3R5cGUgY2hhaW4KLUZBSUwgRm9ybURhdGEgaW50ZXJmYWNlOiBuZXcgRm9ybURh
dGEoKSBtdXN0IGluaGVyaXQgcHJvcGVydHkgImdldEFsbCIgd2l0aCB0aGUgcHJvcGVyIHR5cGUg
KDQpIGFzc2VydF9pbmhlcml0czogcHJvcGVydHkgImdldEFsbCIgbm90IGZvdW5kIGluIHByb3Rv
dHlwZSBjaGFpbgotRkFJTCBGb3JtRGF0YSBpbnRlcmZhY2U6IGNhbGxpbmcgZ2V0QWxsKFVTVlN0
cmluZykgb24gbmV3IEZvcm1EYXRhKCkgd2l0aCB0b28gZmV3IGFyZ3VtZW50cyBtdXN0IHRocm93
IFR5cGVFcnJvciBhc3NlcnRfaW5oZXJpdHM6IHByb3BlcnR5ICJnZXRBbGwiIG5vdCBmb3VuZCBp
biBwcm90b3R5cGUgY2hhaW4KLUZBSUwgRm9ybURhdGEgaW50ZXJmYWNlOiBuZXcgRm9ybURhdGEo
KSBtdXN0IGluaGVyaXQgcHJvcGVydHkgImhhcyIgd2l0aCB0aGUgcHJvcGVyIHR5cGUgKDUpIGFz
c2VydF9pbmhlcml0czogcHJvcGVydHkgImhhcyIgbm90IGZvdW5kIGluIHByb3RvdHlwZSBjaGFp
bgotRkFJTCBGb3JtRGF0YSBpbnRlcmZhY2U6IGNhbGxpbmcgaGFzKFVTVlN0cmluZykgb24gbmV3
IEZvcm1EYXRhKCkgd2l0aCB0b28gZmV3IGFyZ3VtZW50cyBtdXN0IHRocm93IFR5cGVFcnJvciBh
c3NlcnRfaW5oZXJpdHM6IHByb3BlcnR5ICJoYXMiIG5vdCBmb3VuZCBpbiBwcm90b3R5cGUgY2hh
aW4KLUZBSUwgRm9ybURhdGEgaW50ZXJmYWNlOiBuZXcgRm9ybURhdGEoKSBtdXN0IGluaGVyaXQg
cHJvcGVydHkgInNldCIgd2l0aCB0aGUgcHJvcGVyIHR5cGUgKDYpIGFzc2VydF9pbmhlcml0czog
cHJvcGVydHkgInNldCIgbm90IGZvdW5kIGluIHByb3RvdHlwZSBjaGFpbgotRkFJTCBGb3JtRGF0
YSBpbnRlcmZhY2U6IGNhbGxpbmcgc2V0KFVTVlN0cmluZyxCbG9iLFVTVlN0cmluZykgb24gbmV3
IEZvcm1EYXRhKCkgd2l0aCB0b28gZmV3IGFyZ3VtZW50cyBtdXN0IHRocm93IFR5cGVFcnJvciBh
c3NlcnRfaW5oZXJpdHM6IHByb3BlcnR5ICJzZXQiIG5vdCBmb3VuZCBpbiBwcm90b3R5cGUgY2hh
aW4KLUZBSUwgRm9ybURhdGEgaW50ZXJmYWNlOiBuZXcgRm9ybURhdGEoKSBtdXN0IGluaGVyaXQg
cHJvcGVydHkgInNldCIgd2l0aCB0aGUgcHJvcGVyIHR5cGUgKDcpIGFzc2VydF9pbmhlcml0czog
cHJvcGVydHkgInNldCIgbm90IGZvdW5kIGluIHByb3RvdHlwZSBjaGFpbgotRkFJTCBGb3JtRGF0
YSBpbnRlcmZhY2U6IGNhbGxpbmcgc2V0KFVTVlN0cmluZyxVU1ZTdHJpbmcpIG9uIG5ldyBGb3Jt
RGF0YSgpIHdpdGggdG9vIGZldyBhcmd1bWVudHMgbXVzdCB0aHJvdyBUeXBlRXJyb3IgYXNzZXJ0
X2luaGVyaXRzOiBwcm9wZXJ0eSAic2V0IiBub3QgZm91bmQgaW4gcHJvdG90eXBlIGNoYWluCitQ
QVNTIEZvcm1EYXRhIGludGVyZmFjZTogbmV3IEZvcm1EYXRhKCkgbXVzdCBpbmhlcml0IHByb3Bl
cnR5ICJkZWxldGUiIHdpdGggdGhlIHByb3BlciB0eXBlICgyKSAKK1BBU1MgRm9ybURhdGEgaW50
ZXJmYWNlOiBjYWxsaW5nIGRlbGV0ZShVU1ZTdHJpbmcpIG9uIG5ldyBGb3JtRGF0YSgpIHdpdGgg
dG9vIGZldyBhcmd1bWVudHMgbXVzdCB0aHJvdyBUeXBlRXJyb3IgCitQQVNTIEZvcm1EYXRhIGlu
dGVyZmFjZTogbmV3IEZvcm1EYXRhKCkgbXVzdCBpbmhlcml0IHByb3BlcnR5ICJnZXQiIHdpdGgg
dGhlIHByb3BlciB0eXBlICgzKSAKK1BBU1MgRm9ybURhdGEgaW50ZXJmYWNlOiBjYWxsaW5nIGdl
dChVU1ZTdHJpbmcpIG9uIG5ldyBGb3JtRGF0YSgpIHdpdGggdG9vIGZldyBhcmd1bWVudHMgbXVz
dCB0aHJvdyBUeXBlRXJyb3IgCitQQVNTIEZvcm1EYXRhIGludGVyZmFjZTogbmV3IEZvcm1EYXRh
KCkgbXVzdCBpbmhlcml0IHByb3BlcnR5ICJnZXRBbGwiIHdpdGggdGhlIHByb3BlciB0eXBlICg0
KSAKK1BBU1MgRm9ybURhdGEgaW50ZXJmYWNlOiBjYWxsaW5nIGdldEFsbChVU1ZTdHJpbmcpIG9u
IG5ldyBGb3JtRGF0YSgpIHdpdGggdG9vIGZldyBhcmd1bWVudHMgbXVzdCB0aHJvdyBUeXBlRXJy
b3IgCitQQVNTIEZvcm1EYXRhIGludGVyZmFjZTogbmV3IEZvcm1EYXRhKCkgbXVzdCBpbmhlcml0
IHByb3BlcnR5ICJoYXMiIHdpdGggdGhlIHByb3BlciB0eXBlICg1KSAKK1BBU1MgRm9ybURhdGEg
aW50ZXJmYWNlOiBjYWxsaW5nIGhhcyhVU1ZTdHJpbmcpIG9uIG5ldyBGb3JtRGF0YSgpIHdpdGgg
dG9vIGZldyBhcmd1bWVudHMgbXVzdCB0aHJvdyBUeXBlRXJyb3IgCitQQVNTIEZvcm1EYXRhIGlu
dGVyZmFjZTogbmV3IEZvcm1EYXRhKCkgbXVzdCBpbmhlcml0IHByb3BlcnR5ICJzZXQiIHdpdGgg
dGhlIHByb3BlciB0eXBlICg2KSAKK1BBU1MgRm9ybURhdGEgaW50ZXJmYWNlOiBjYWxsaW5nIHNl
dChVU1ZTdHJpbmcsQmxvYixVU1ZTdHJpbmcpIG9uIG5ldyBGb3JtRGF0YSgpIHdpdGggdG9vIGZl
dyBhcmd1bWVudHMgbXVzdCB0aHJvdyBUeXBlRXJyb3IgCitQQVNTIEZvcm1EYXRhIGludGVyZmFj
ZTogbmV3IEZvcm1EYXRhKCkgbXVzdCBpbmhlcml0IHByb3BlcnR5ICJzZXQiIHdpdGggdGhlIHBy
b3BlciB0eXBlICg3KSAKK1BBU1MgRm9ybURhdGEgaW50ZXJmYWNlOiBjYWxsaW5nIHNldChVU1ZT
dHJpbmcsVVNWU3RyaW5nKSBvbiBuZXcgRm9ybURhdGEoKSB3aXRoIHRvbyBmZXcgYXJndW1lbnRz
IG11c3QgdGhyb3cgVHlwZUVycm9yIAogUEFTUyBGb3JtRGF0YSBpbnRlcmZhY2U6IG5ldyBGb3Jt
RGF0YShmb3JtKSBtdXN0IGluaGVyaXQgcHJvcGVydHkgImFwcGVuZCIgd2l0aCB0aGUgcHJvcGVy
IHR5cGUgKDApIAogUEFTUyBGb3JtRGF0YSBpbnRlcmZhY2U6IGNhbGxpbmcgYXBwZW5kKFVTVlN0
cmluZyxCbG9iLFVTVlN0cmluZykgb24gbmV3IEZvcm1EYXRhKGZvcm0pIHdpdGggdG9vIGZldyBh
cmd1bWVudHMgbXVzdCB0aHJvdyBUeXBlRXJyb3IgCiBQQVNTIEZvcm1EYXRhIGludGVyZmFjZTog
bmV3IEZvcm1EYXRhKGZvcm0pIG11c3QgaW5oZXJpdCBwcm9wZXJ0eSAiYXBwZW5kIiB3aXRoIHRo
ZSBwcm9wZXIgdHlwZSAoMSkgCiBQQVNTIEZvcm1EYXRhIGludGVyZmFjZTogY2FsbGluZyBhcHBl
bmQoVVNWU3RyaW5nLFVTVlN0cmluZykgb24gbmV3IEZvcm1EYXRhKGZvcm0pIHdpdGggdG9vIGZl
dyBhcmd1bWVudHMgbXVzdCB0aHJvdyBUeXBlRXJyb3IgCi1GQUlMIEZvcm1EYXRhIGludGVyZmFj
ZTogbmV3IEZvcm1EYXRhKGZvcm0pIG11c3QgaW5oZXJpdCBwcm9wZXJ0eSAiZGVsZXRlIiB3aXRo
IHRoZSBwcm9wZXIgdHlwZSAoMikgYXNzZXJ0X2luaGVyaXRzOiBwcm9wZXJ0eSAiZGVsZXRlIiBu
b3QgZm91bmQgaW4gcHJvdG90eXBlIGNoYWluCi1GQUlMIEZvcm1EYXRhIGludGVyZmFjZTogY2Fs
bGluZyBkZWxldGUoVVNWU3RyaW5nKSBvbiBuZXcgRm9ybURhdGEoZm9ybSkgd2l0aCB0b28gZmV3
IGFyZ3VtZW50cyBtdXN0IHRocm93IFR5cGVFcnJvciBhc3NlcnRfaW5oZXJpdHM6IHByb3BlcnR5
ICJkZWxldGUiIG5vdCBmb3VuZCBpbiBwcm90b3R5cGUgY2hhaW4KLUZBSUwgRm9ybURhdGEgaW50
ZXJmYWNlOiBuZXcgRm9ybURhdGEoZm9ybSkgbXVzdCBpbmhlcml0IHByb3BlcnR5ICJnZXQiIHdp
dGggdGhlIHByb3BlciB0eXBlICgzKSBhc3NlcnRfaW5oZXJpdHM6IHByb3BlcnR5ICJnZXQiIG5v
dCBmb3VuZCBpbiBwcm90b3R5cGUgY2hhaW4KLUZBSUwgRm9ybURhdGEgaW50ZXJmYWNlOiBjYWxs
aW5nIGdldChVU1ZTdHJpbmcpIG9uIG5ldyBGb3JtRGF0YShmb3JtKSB3aXRoIHRvbyBmZXcgYXJn
dW1lbnRzIG11c3QgdGhyb3cgVHlwZUVycm9yIGFzc2VydF9pbmhlcml0czogcHJvcGVydHkgImdl
dCIgbm90IGZvdW5kIGluIHByb3RvdHlwZSBjaGFpbgotRkFJTCBGb3JtRGF0YSBpbnRlcmZhY2U6
IG5ldyBGb3JtRGF0YShmb3JtKSBtdXN0IGluaGVyaXQgcHJvcGVydHkgImdldEFsbCIgd2l0aCB0
aGUgcHJvcGVyIHR5cGUgKDQpIGFzc2VydF9pbmhlcml0czogcHJvcGVydHkgImdldEFsbCIgbm90
IGZvdW5kIGluIHByb3RvdHlwZSBjaGFpbgotRkFJTCBGb3JtRGF0YSBpbnRlcmZhY2U6IGNhbGxp
bmcgZ2V0QWxsKFVTVlN0cmluZykgb24gbmV3IEZvcm1EYXRhKGZvcm0pIHdpdGggdG9vIGZldyBh
cmd1bWVudHMgbXVzdCB0aHJvdyBUeXBlRXJyb3IgYXNzZXJ0X2luaGVyaXRzOiBwcm9wZXJ0eSAi
Z2V0QWxsIiBub3QgZm91bmQgaW4gcHJvdG90eXBlIGNoYWluCi1GQUlMIEZvcm1EYXRhIGludGVy
ZmFjZTogbmV3IEZvcm1EYXRhKGZvcm0pIG11c3QgaW5oZXJpdCBwcm9wZXJ0eSAiaGFzIiB3aXRo
IHRoZSBwcm9wZXIgdHlwZSAoNSkgYXNzZXJ0X2luaGVyaXRzOiBwcm9wZXJ0eSAiaGFzIiBub3Qg
Zm91bmQgaW4gcHJvdG90eXBlIGNoYWluCi1GQUlMIEZvcm1EYXRhIGludGVyZmFjZTogY2FsbGlu
ZyBoYXMoVVNWU3RyaW5nKSBvbiBuZXcgRm9ybURhdGEoZm9ybSkgd2l0aCB0b28gZmV3IGFyZ3Vt
ZW50cyBtdXN0IHRocm93IFR5cGVFcnJvciBhc3NlcnRfaW5oZXJpdHM6IHByb3BlcnR5ICJoYXMi
IG5vdCBmb3VuZCBpbiBwcm90b3R5cGUgY2hhaW4KLUZBSUwgRm9ybURhdGEgaW50ZXJmYWNlOiBu
ZXcgRm9ybURhdGEoZm9ybSkgbXVzdCBpbmhlcml0IHByb3BlcnR5ICJzZXQiIHdpdGggdGhlIHBy
b3BlciB0eXBlICg2KSBhc3NlcnRfaW5oZXJpdHM6IHByb3BlcnR5ICJzZXQiIG5vdCBmb3VuZCBp
biBwcm90b3R5cGUgY2hhaW4KLUZBSUwgRm9ybURhdGEgaW50ZXJmYWNlOiBjYWxsaW5nIHNldChV
U1ZTdHJpbmcsQmxvYixVU1ZTdHJpbmcpIG9uIG5ldyBGb3JtRGF0YShmb3JtKSB3aXRoIHRvbyBm
ZXcgYXJndW1lbnRzIG11c3QgdGhyb3cgVHlwZUVycm9yIGFzc2VydF9pbmhlcml0czogcHJvcGVy
dHkgInNldCIgbm90IGZvdW5kIGluIHByb3RvdHlwZSBjaGFpbgotRkFJTCBGb3JtRGF0YSBpbnRl
cmZhY2U6IG5ldyBGb3JtRGF0YShmb3JtKSBtdXN0IGluaGVyaXQgcHJvcGVydHkgInNldCIgd2l0
aCB0aGUgcHJvcGVyIHR5cGUgKDcpIGFzc2VydF9pbmhlcml0czogcHJvcGVydHkgInNldCIgbm90
IGZvdW5kIGluIHByb3RvdHlwZSBjaGFpbgotRkFJTCBGb3JtRGF0YSBpbnRlcmZhY2U6IGNhbGxp
bmcgc2V0KFVTVlN0cmluZyxVU1ZTdHJpbmcpIG9uIG5ldyBGb3JtRGF0YShmb3JtKSB3aXRoIHRv
byBmZXcgYXJndW1lbnRzIG11c3QgdGhyb3cgVHlwZUVycm9yIGFzc2VydF9pbmhlcml0czogcHJv
cGVydHkgInNldCIgbm90IGZvdW5kIGluIHByb3RvdHlwZSBjaGFpbgorUEFTUyBGb3JtRGF0YSBp
bnRlcmZhY2U6IG5ldyBGb3JtRGF0YShmb3JtKSBtdXN0IGluaGVyaXQgcHJvcGVydHkgImRlbGV0
ZSIgd2l0aCB0aGUgcHJvcGVyIHR5cGUgKDIpIAorUEFTUyBGb3JtRGF0YSBpbnRlcmZhY2U6IGNh
bGxpbmcgZGVsZXRlKFVTVlN0cmluZykgb24gbmV3IEZvcm1EYXRhKGZvcm0pIHdpdGggdG9vIGZl
dyBhcmd1bWVudHMgbXVzdCB0aHJvdyBUeXBlRXJyb3IgCitQQVNTIEZvcm1EYXRhIGludGVyZmFj
ZTogbmV3IEZvcm1EYXRhKGZvcm0pIG11c3QgaW5oZXJpdCBwcm9wZXJ0eSAiZ2V0IiB3aXRoIHRo
ZSBwcm9wZXIgdHlwZSAoMykgCitQQVNTIEZvcm1EYXRhIGludGVyZmFjZTogY2FsbGluZyBnZXQo
VVNWU3RyaW5nKSBvbiBuZXcgRm9ybURhdGEoZm9ybSkgd2l0aCB0b28gZmV3IGFyZ3VtZW50cyBt
dXN0IHRocm93IFR5cGVFcnJvciAKK1BBU1MgRm9ybURhdGEgaW50ZXJmYWNlOiBuZXcgRm9ybURh
dGEoZm9ybSkgbXVzdCBpbmhlcml0IHByb3BlcnR5ICJnZXRBbGwiIHdpdGggdGhlIHByb3BlciB0
eXBlICg0KSAKK1BBU1MgRm9ybURhdGEgaW50ZXJmYWNlOiBjYWxsaW5nIGdldEFsbChVU1ZTdHJp
bmcpIG9uIG5ldyBGb3JtRGF0YShmb3JtKSB3aXRoIHRvbyBmZXcgYXJndW1lbnRzIG11c3QgdGhy
b3cgVHlwZUVycm9yIAorUEFTUyBGb3JtRGF0YSBpbnRlcmZhY2U6IG5ldyBGb3JtRGF0YShmb3Jt
KSBtdXN0IGluaGVyaXQgcHJvcGVydHkgImhhcyIgd2l0aCB0aGUgcHJvcGVyIHR5cGUgKDUpIAor
UEFTUyBGb3JtRGF0YSBpbnRlcmZhY2U6IGNhbGxpbmcgaGFzKFVTVlN0cmluZykgb24gbmV3IEZv
cm1EYXRhKGZvcm0pIHdpdGggdG9vIGZldyBhcmd1bWVudHMgbXVzdCB0aHJvdyBUeXBlRXJyb3Ig
CitQQVNTIEZvcm1EYXRhIGludGVyZmFjZTogbmV3IEZvcm1EYXRhKGZvcm0pIG11c3QgaW5oZXJp
dCBwcm9wZXJ0eSAic2V0IiB3aXRoIHRoZSBwcm9wZXIgdHlwZSAoNikgCitQQVNTIEZvcm1EYXRh
IGludGVyZmFjZTogY2FsbGluZyBzZXQoVVNWU3RyaW5nLEJsb2IsVVNWU3RyaW5nKSBvbiBuZXcg
Rm9ybURhdGEoZm9ybSkgd2l0aCB0b28gZmV3IGFyZ3VtZW50cyBtdXN0IHRocm93IFR5cGVFcnJv
ciAKK1BBU1MgRm9ybURhdGEgaW50ZXJmYWNlOiBuZXcgRm9ybURhdGEoZm9ybSkgbXVzdCBpbmhl
cml0IHByb3BlcnR5ICJzZXQiIHdpdGggdGhlIHByb3BlciB0eXBlICg3KSAKK1BBU1MgRm9ybURh
dGEgaW50ZXJmYWNlOiBjYWxsaW5nIHNldChVU1ZTdHJpbmcsVVNWU3RyaW5nKSBvbiBuZXcgRm9y
bURhdGEoZm9ybSkgd2l0aCB0b28gZmV3IGFyZ3VtZW50cyBtdXN0IHRocm93IFR5cGVFcnJvciAK
IFBBU1MgUHJvZ3Jlc3NFdmVudCBpbnRlcmZhY2U6IGV4aXN0ZW5jZSBhbmQgcHJvcGVydGllcyBv
ZiBpbnRlcmZhY2Ugb2JqZWN0IAogUEFTUyBQcm9ncmVzc0V2ZW50IGludGVyZmFjZSBvYmplY3Qg
bGVuZ3RoIAogUEFTUyBQcm9ncmVzc0V2ZW50IGludGVyZmFjZSBvYmplY3QgbmFtZSAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>320366</attachid>
            <date>2017-09-09 17:11:11 -0700</date>
            <delta_ts>2017-09-09 18:19:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-176659-20170909171110.patch</filename>
            <type>text/plain</type>
            <size>56027</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMTgyNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY3IEBACisyMDE3LTA5LTA5ICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgRmluaXNoIG9mZiB0aGUgRm9ybURhdGEg
aW1wbGVtZW50YXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE3NjY1OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogZmlsZWFwaS9CbG9iLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6OkJsb2Ip
OgorICAgICAgICAqIGZpbGVhcGkvQmxvYi5oOgorICAgICAgICAqIGZpbGVhcGkvRmlsZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGaWxlOjpGaWxlKToKKyAgICAgICAgKiBmaWxlYXBpL0ZpbGUu
aDoKKyAgICAgICAgKiBodG1sL0RPTUZvcm1EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRP
TUZvcm1EYXRhOjpyZW1vdmUpOgorICAgICAgICAoV2ViQ29yZTo6dG9TdHJpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6RE9NRm9ybURhdGE6OmdldCk6CisgICAgICAgIChXZWJDb3JlOjpET01Gb3Jt
RGF0YTo6Z2V0QWxsKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTUZvcm1EYXRhOjpoYXMpOgorICAg
ICAgICAoV2ViQ29yZTo6RE9NRm9ybURhdGE6OnNldCk6CisgICAgICAgIChXZWJDb3JlOjpET01G
b3JtRGF0YTo6SXRlcmF0b3I6Okl0ZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTUZvcm1E
YXRhOjpJdGVyYXRvcjo6bmV4dCk6CisgICAgICAgICogaHRtbC9ET01Gb3JtRGF0YS5oOgorICAg
ICAgICAoV2ViQ29yZTo6RE9NRm9ybURhdGE6OmFwcGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpE
T01Gb3JtRGF0YTo6c2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkRPTUZvcm1EYXRhOjpjcmVhdGVJ
dGVyYXRvcik6CisgICAgICAgICogaHRtbC9ET01Gb3JtRGF0YS5pZGw6CisgICAgICAgICogaHRt
bC9Gb3JtRGF0YUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGFMaXN0Ojpub3Jt
YWxpemVTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGFMaXN0OjpjcmVhdGVGaWxl
RW50cnkpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGFMaXN0OjphcHBlbmREYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhTGlzdDo6YXBwZW5kQmxvYik6CisgICAgICAgIChXZWJD
b3JlOjpGb3JtRGF0YUxpc3Q6OnNldCk6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YUxpc3Q6
OnNldERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGFMaXN0OjpzZXRCbG9iKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhTGlzdDo6YXBwZW5kU3RyaW5nKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBodG1sL0Zvcm1EYXRhTGlzdC5oOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGFM
aXN0OjpJdGVtOjpJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhTGlzdDo6SXRlbTo6
a2V5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhTGlzdDo6SXRlbTo6ZGF0YSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YUxpc3Q6Okl0ZW06OmZpbGUgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGFMaXN0OjphcHBlbmRCbG9iKToKKyAgICAgICAg
KFdlYkNvcmU6OkZvcm1EYXRhTGlzdDo6c2V0QmxvYik6CisgICAgICAgIChXZWJDb3JlOjpGb3Jt
RGF0YUxpc3Q6Okl0ZW06OmJsb2IgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
Rm9ybURhdGFMaXN0OjpJdGVtOjpmaWxlbmFtZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpGb3JtRGF0YUxpc3Q6OmFwcGVuZERhdGEpOiBEZWxldGVkLgorICAgICAgICAqIGlu
c3BlY3Rvci9JbnNwZWN0b3JOZXR3b3JrQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YnVp
bGRPYmplY3RGb3JSZXNvdXJjZVJlcXVlc3QpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsv
Rm9ybURhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGE6OkZvcm1EYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9y
bURhdGE6OmNyZWF0ZU11bHRpUGFydCk6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YTo6YXBw
ZW5kS2V5VmFsdWVQYWlySXRlbXMpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGE6OmV4cGFu
ZERhdGFTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YTo6ZmxhdHRlbiBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YTo6ZmxhdHRlblRvU3RyaW5nIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OmFwcGVuZEJsb2JSZXNvbHZlZCk6CisgICAgICAgIChXZWJDb3JlOjpG
b3JtRGF0YTo6cmVzb2x2ZUJsb2JSZWZlcmVuY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1E
YXRhOjpnZW5lcmF0ZUZpbGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhOjpoYXNHZW5l
cmF0ZWRGaWxlcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YTo6aGFzT3duZWRH
ZW5lcmF0ZWRGaWxlcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YTo6cmVtb3Zl
R2VuZXJhdGVkRmlsZXNJZk5lZWRlZCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9Gb3Jt
RGF0YS5oOgorCiAyMDE3LTA5LTA5ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAog
ICAgICAgICBBdm9pZCBkdXBsaWNhdGUgY29tcHV0YXRpb25zIG9mIEV4ZWNTdGF0ZTo6dm0oKS4K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQmxvYi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9iLmNwcAkocmV2aXNpb24gMjIxODI3KQorKysgU291cmNl
L1dlYkNvcmUvZmlsZWFwaS9CbG9iLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzksNiArNzksMTQg
QEAgQmxvYjo6QmxvYigpCiAgICAgVGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6cmVnaXN0ZXJCbG9i
VVJMKG1faW50ZXJuYWxVUkwsIHsgfSwgIHsgfSk7CiB9CiAKK0Jsb2I6OkJsb2IoY29uc3QgQmxv
YiYgYmxvYikKKyAgICA6IG1faW50ZXJuYWxVUkwoQmxvYlVSTDo6Y3JlYXRlSW50ZXJuYWxVUkwo
KSkKKyAgICAsIG1fdHlwZShibG9iLnR5cGUoKSkKKyAgICAsIG1fc2l6ZShibG9iLnNpemUoKSkK
K3sKKyAgICBUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5OjpyZWdpc3RlckJsb2JVUkwobV9pbnRlcm5h
bFVSTCwgeyBCbG9iUGFydChibG9iLnVybCgpKSB9ICwgbV90eXBlKTsKK30KKwogQmxvYjo6Qmxv
YihWZWN0b3I8QmxvYlBhcnRWYXJpYW50PiYmIGJsb2JQYXJ0VmFyaWFudHMsIGNvbnN0IEJsb2JQ
cm9wZXJ0eUJhZyYgcHJvcGVydHlCYWcpCiAgICAgOiBtX2ludGVybmFsVVJMKEJsb2JVUkw6OmNy
ZWF0ZUludGVybmFsVVJMKCkpCiAgICAgLCBtX3R5cGUobm9ybWFsaXplZENvbnRlbnRUeXBlKHBy
b3BlcnR5QmFnLnR5cGUpKQpJbmRleDogU291cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9iLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9iLmgJKHJldmlzaW9uIDIyMTgy
NykKKysrIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQmxvYi5oCSh3b3JraW5nIGNvcHkpCkBAIC05
OCw2ICs5OCw3IEBAIHB1YmxpYzoKIAogcHJvdGVjdGVkOgogICAgIEJsb2IoKTsKKyAgICBCbG9i
KGNvbnN0IEJsb2ImKTsKICAgICBCbG9iKFZlY3RvcjxCbG9iUGFydFZhcmlhbnQ+JiYsIGNvbnN0
IEJsb2JQcm9wZXJ0eUJhZyYpOwogICAgIEJsb2IoVmVjdG9yPHVpbnQ4X3Q+JiYsIGNvbnN0IFN0
cmluZyYgY29udGVudFR5cGUpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZS5jcHAJKHJldmlz
aW9uIDIyMTgyNykKKysrIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTg1LDYgKzg1LDIzIEBAIEZpbGU6OkZpbGUoVmVjdG9yPEJsb2JQYXJ0VmFyaWFu
dD4mJiBibG8KIHsKIH0KIAorRmlsZTo6RmlsZShjb25zdCBCbG9iJiBibG9iLCBjb25zdCBTdHJp
bmcmIG5hbWUpCisgICAgOiBCbG9iKGJsb2IpCisgICAgLCBtX25hbWUobmFtZSkKK3sKKyAgICBB
U1NFUlQoIWJsb2IuaXNGaWxlKCkpOworfQorCitGaWxlOjpGaWxlKGNvbnN0IEZpbGUmIGZpbGUs
IGNvbnN0IFN0cmluZyYgbmFtZSkKKyAgICA6IEJsb2IoZmlsZSkKKyAgICAsIG1fcGF0aChmaWxl
LnBhdGgoKSkKKyAgICAsIG1fcmVsYXRpdmVQYXRoKGZpbGUucmVsYXRpdmVQYXRoKCkpCisgICAg
LCBtX25hbWUoIW5hbWUuaXNOdWxsKCkgPyBuYW1lIDogZmlsZS5uYW1lKCkpCisgICAgLCBtX292
ZXJyaWRlTGFzdE1vZGlmaWVkRGF0ZShmaWxlLm1fb3ZlcnJpZGVMYXN0TW9kaWZpZWREYXRlKQor
ICAgICwgbV9pc0RpcmVjdG9yeShmaWxlLmlzRGlyZWN0b3J5KCkpCit7Cit9CisKIGRvdWJsZSBG
aWxlOjpsYXN0TW9kaWZpZWQoKSBjb25zdAogewogICAgIGlmIChtX292ZXJyaWRlTGFzdE1vZGlm
aWVkRGF0ZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZS5oCShyZXZpc2lvbiAyMjE4MjcpCisrKyBT
b3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjUsNiArNjUs
MTYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBGaWxlKHBhdGgsIG5h
bWVPdmVycmlkZSkpOwogICAgIH0KIAorICAgIHN0YXRpYyBSZWY8RmlsZT4gY3JlYXRlKGNvbnN0
IEJsb2ImIGJsb2IsIGNvbnN0IFN0cmluZyYgbmFtZSkKKyAgICB7CisgICAgICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IEZpbGUoYmxvYiwgbmFtZSkpOworICAgIH0KKworICAgIHN0YXRpYyBSZWY8
RmlsZT4gY3JlYXRlKGNvbnN0IEZpbGUmIGZpbGUsIGNvbnN0IFN0cmluZyYgbmFtZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZpbGUoZmlsZSwgbmFtZSkpOworICAgIH0K
KwogICAgIHN0YXRpYyBSZWY8RmlsZT4gY3JlYXRlV2l0aFJlbGF0aXZlUGF0aChjb25zdCBTdHJp
bmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgcmVsYXRpdmVQYXRoKTsKIAogICAgIGJvb2wgaXNGaWxl
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQpAQCAtODcsNiArOTcsOCBAQCBwcml2
YXRlOgogICAgIFdFQkNPUkVfRVhQT1JUIGV4cGxpY2l0IEZpbGUoY29uc3QgU3RyaW5nJiBwYXRo
KTsKICAgICBGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nJiBuYW1lT3ZlcnJp
ZGUpOwogICAgIEZpbGUoVmVjdG9yPEJsb2JQYXJ0VmFyaWFudD4mJiBibG9iUGFydFZhcmlhbnRz
LCBjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBQcm9wZXJ0eUJhZyYpOworICAgIEZpbGUo
Y29uc3QgQmxvYiYsIGNvbnN0IFN0cmluZyYgbmFtZSk7CisgICAgRmlsZShjb25zdCBGaWxlJiwg
Y29uc3QgU3RyaW5nJiBuYW1lKTsKIAogICAgIEZpbGUoRGVzZXJpYWxpemF0aW9uQ29udHJ1Y3Rv
ciwgY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBVUkwmIHNyY1VSTCwgY29uc3QgU3RyaW5nJiB0
eXBlLCBjb25zdCBTdHJpbmcmIG5hbWUpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0RP
TUZvcm1EYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0RPTUZvcm1E
YXRhLmNwcAkocmV2aXNpb24gMjIxODI3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9ET01Gb3Jt
RGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDE0ICs1NSw3NSBAQCBET01Gb3JtRGF0YTo6
RE9NRm9ybURhdGEoSFRNTEZvcm1FbGVtZW50CiAKIHZvaWQgRE9NRm9ybURhdGE6OmFwcGVuZChj
b25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7Ci0gICAgaWYgKCFuYW1l
LmlzRW1wdHkoKSkKLSAgICAgICAgYXBwZW5kRGF0YShuYW1lLCB2YWx1ZSk7CisgICAgYXBwZW5k
RGF0YShuYW1lLCB2YWx1ZSk7CiB9CiAKIHZvaWQgRE9NRm9ybURhdGE6OmFwcGVuZChjb25zdCBT
dHJpbmcmIG5hbWUsIEJsb2ImIGJsb2IsIGNvbnN0IFN0cmluZyYgZmlsZW5hbWUpCiB7Ci0gICAg
aWYgKCFuYW1lLmlzRW1wdHkoKSkKLSAgICAgICAgYXBwZW5kQmxvYihuYW1lLCBibG9iLCBmaWxl
bmFtZSk7CisgICAgYXBwZW5kQmxvYihuYW1lLCBibG9iLCBmaWxlbmFtZSk7Cit9CisKK3ZvaWQg
RE9NRm9ybURhdGE6OnJlbW92ZShjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgbV9pdGVtcy5y
ZW1vdmVBbGxNYXRjaGluZyhbJm5hbWVdIChjb25zdCBhdXRvJiBpdGVtKSB7CisgICAgICAgIHJl
dHVybiBpdGVtLmtleSgpID09IG5hbWU7CisgICAgfSk7Cit9CithdXRvIERPTUZvcm1EYXRhOjpn
ZXQoY29uc3QgU3RyaW5nJiBuYW1lKSAtPiBzdGQ6Om9wdGlvbmFsPEZvcm1EYXRhRW50cnlWYWx1
ZT4KK3sKKyAgICBmb3IgKGF1dG8mIGl0ZW0gOiBtX2l0ZW1zKSB7CisgICAgICAgIGlmIChpdGVt
LmtleSgpID09IG5hbWUpCisgICAgICAgICAgICByZXR1cm4gaXRlbS5kYXRhKCk7CisgICAgfQor
CisgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKK30KKworYXV0byBET01Gb3JtRGF0YTo6Z2V0QWxs
KGNvbnN0IFN0cmluZyYgbmFtZSkgLT4gVmVjdG9yPEZvcm1EYXRhRW50cnlWYWx1ZT4KK3sKKyAg
ICBWZWN0b3I8Rm9ybURhdGFFbnRyeVZhbHVlPiByZXN1bHQ7CisKKyAgICBmb3IgKGF1dG8mIGl0
ZW0gOiBtX2l0ZW1zKSB7CisgICAgICAgIGlmIChpdGVtLmtleSgpID09IG5hbWUpCisgICAgICAg
ICAgICByZXN1bHQuYXBwZW5kKGl0ZW0uZGF0YSgpKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCitib29sIERPTUZvcm1EYXRhOjpoYXMoY29uc3QgU3RyaW5nJiBuYW1lKQorewor
ICAgIGZvciAoYXV0byYgaXRlbSA6IG1faXRlbXMpIHsKKyAgICAgICAgaWYgKGl0ZW0ua2V5KCkg
PT0gbmFtZSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK3ZvaWQgRE9NRm9ybURhdGE6OnNldChjb25zdCBTdHJpbmcmIG5hbWUs
IGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgc2V0RGF0YShuYW1lLCB2YWx1ZSk7Cit9CisK
K3ZvaWQgRE9NRm9ybURhdGE6OnNldChjb25zdCBTdHJpbmcmIG5hbWUsIEJsb2ImIGJsb2IsIGNv
bnN0IFN0cmluZyYgZmlsZW5hbWUpCit7CisgICAgc2V0QmxvYihuYW1lLCBibG9iLCBmaWxlbmFt
ZSk7Cit9CisKK0RPTUZvcm1EYXRhOjpJdGVyYXRvcjo6SXRlcmF0b3IoRE9NRm9ybURhdGEmIHRh
cmdldCkKKyAgICA6IG1fdGFyZ2V0KHRhcmdldCkKK3sKK30KKworc3RkOjpvcHRpb25hbDxXVEY6
OktleVZhbHVlUGFpcjxTdHJpbmcsIERPTUZvcm1EYXRhOjpGb3JtRGF0YUVudHJ5VmFsdWU+PiBE
T01Gb3JtRGF0YTo6SXRlcmF0b3I6Om5leHQoKQoreworICAgIGF1dG8mIGl0ZW1zID0gbV90YXJn
ZXQtPml0ZW1zKCk7CisgICAgaWYgKG1faW5kZXggPj0gaXRlbXMuc2l6ZSgpKQorICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgYXV0byYgaXRlbSA9IGl0ZW1zW21faW5kZXgrK107
CisgICAgcmV0dXJuIFdURjo6S2V5VmFsdWVQYWlyPFN0cmluZywgRm9ybURhdGFFbnRyeVZhbHVl
PiB7IGl0ZW0ua2V5KCksIGl0ZW0uZGF0YSgpIH07CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvRE9NRm9ybURhdGEuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9odG1sL0RPTUZvcm1EYXRhLmgJKHJldmlzaW9uIDIyMTgyNykKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvRE9NRm9ybURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMzIs
NiArMzIsNyBAQAogCiAjaW5jbHVkZSAiRm9ybURhdGFMaXN0LmgiCiAjaW5jbHVkZSA8d3RmL0Zv
cndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00MCwxMyArNDEsMzMgQEAgY2xhc3Mg
QmxvYjsKIGNsYXNzIEhUTUxGb3JtRWxlbWVudDsKIGNsYXNzIFRleHRFbmNvZGluZzsKIAorLy8g
RklYTUU6IERvIHdlIG5lZWQgdG8gaGF2ZSBzZXBhcmF0ZSBET01Gb3JtRGF0YSBhbmQgRm9ybURh
dGFMaXN0IGNsYXNzZXM/CiBjbGFzcyBET01Gb3JtRGF0YSA6IHB1YmxpYyBGb3JtRGF0YUxpc3Qs
IHB1YmxpYyBSZWZDb3VudGVkPERPTUZvcm1EYXRhPiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJl
ZjxET01Gb3JtRGF0YT4gY3JlYXRlKEhUTUxGb3JtRWxlbWVudCogZm9ybSkgeyByZXR1cm4gYWRv
cHRSZWYoKm5ldyBET01Gb3JtRGF0YShmb3JtKSk7IH0KICAgICBzdGF0aWMgUmVmPERPTUZvcm1E
YXRhPiBjcmVhdGUoY29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZykgeyByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBET01Gb3JtRGF0YShlbmNvZGluZykpOyB9CiAKKyAgICB1c2luZyBGb3JtRGF0YUVu
dHJ5VmFsdWUgPSBJdGVtOjpEYXRhOworCiAgICAgdm9pZCBhcHBlbmQoY29uc3QgU3RyaW5nJiBu
YW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKLSAgICB2b2lkIGFwcGVuZChjb25zdCBTdHJpbmcm
IG5hbWUsIEJsb2ImLCBjb25zdCBTdHJpbmcmIGZpbGVuYW1lID0gU3RyaW5nKCkpOworICAgIHZv
aWQgYXBwZW5kKGNvbnN0IFN0cmluZyYgbmFtZSwgQmxvYiYsIGNvbnN0IFN0cmluZyYgZmlsZW5h
bWUgPSB7IH0pOworICAgIHZvaWQgcmVtb3ZlKGNvbnN0IFN0cmluZyYgbmFtZSk7CisgICAgc3Rk
OjpvcHRpb25hbDxGb3JtRGF0YUVudHJ5VmFsdWU+IGdldChjb25zdCBTdHJpbmcmIG5hbWUpOwor
ICAgIFZlY3RvcjxGb3JtRGF0YUVudHJ5VmFsdWU+IGdldEFsbChjb25zdCBTdHJpbmcmIG5hbWUp
OworICAgIGJvb2wgaGFzKGNvbnN0IFN0cmluZyYgbmFtZSk7CisgICAgdm9pZCBzZXQoY29uc3Qg
U3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKKyAgICB2b2lkIHNldChjb25zdCBT
dHJpbmcmIG5hbWUsIEJsb2ImLCBjb25zdCBTdHJpbmcmIGZpbGVuYW1lID0geyB9KTsKKworICAg
IGNsYXNzIEl0ZXJhdG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAgIGV4cGxpY2l0IEl0ZXJhdG9y
KERPTUZvcm1EYXRhJik7CisgICAgICAgIHN0ZDo6b3B0aW9uYWw8V1RGOjpLZXlWYWx1ZVBhaXI8
U3RyaW5nLCBGb3JtRGF0YUVudHJ5VmFsdWU+PiBuZXh0KCk7CisKKyAgICBwcml2YXRlOgorICAg
ICAgICBSZWY8RE9NRm9ybURhdGE+IG1fdGFyZ2V0OworICAgICAgICBzaXplX3QgbV9pbmRleCB7
IDAgfTsKKyAgICB9OworICAgIEl0ZXJhdG9yIGNyZWF0ZUl0ZXJhdG9yKCkgeyByZXR1cm4gSXRl
cmF0b3IgeyAqdGhpcyB9OyB9CiAKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgRE9NRm9ybURhdGEo
Y29uc3QgVGV4dEVuY29kaW5nJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0RPTUZvcm1E
YXRhLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0RPTUZvcm1EYXRhLmlk
bAkocmV2aXNpb24gMjIxODI3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9ET01Gb3JtRGF0YS5p
ZGwJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDEwIEBACiAgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICov
CiAKK3R5cGVkZWYgKEZpbGUgb3IgVVNWU3RyaW5nKSBGb3JtRGF0YUVudHJ5VmFsdWU7CisKKy8v
IEZJWE1FOiBTaG91bGQgYmUgRXhwb3NlZD0oV2luZG93LFdvcmtlcikKKwogWwogICAgIENvbnN0
cnVjdG9yKG9wdGlvbmFsIEhUTUxGb3JtRWxlbWVudD8gZm9ybSksCiAgICAgSlNHZW5lcmF0ZVRv
TmF0aXZlT2JqZWN0LApAQCAtMzYsNiArNDAsMTMgQEAKICAgICBJbXBsZW1lbnRhdGlvbkxhY2tz
VlRhYmxlLAogXSBpbnRlcmZhY2UgRE9NRm9ybURhdGEgewogICAgIHZvaWQgYXBwZW5kKFVTVlN0
cmluZyBuYW1lLCBVU1ZTdHJpbmcgdmFsdWUpOwotICAgIHZvaWQgYXBwZW5kKFVTVlN0cmluZyBu
YW1lLCBCbG9iIHZhbHVlLCBvcHRpb25hbCBVU1ZTdHJpbmcgZmlsZW5hbWUpOwotfTsKKyAgICB2
b2lkIGFwcGVuZChVU1ZTdHJpbmcgbmFtZSwgQmxvYiBibG9iVmFsdWUsIG9wdGlvbmFsIFVTVlN0
cmluZyBmaWxlbmFtZSk7CisgICAgW0ltcGxlbWVudGVkQXM9cmVtb3ZlXSB2b2lkIGRlbGV0ZShV
U1ZTdHJpbmcgbmFtZSk7CisgICAgRm9ybURhdGFFbnRyeVZhbHVlPyBnZXQoVVNWU3RyaW5nIG5h
bWUpOworICAgIHNlcXVlbmNlPEZvcm1EYXRhRW50cnlWYWx1ZT4gZ2V0QWxsKFVTVlN0cmluZyBu
YW1lKTsKKyAgICBib29sZWFuIGhhcyhVU1ZTdHJpbmcgbmFtZSk7CisgICAgdm9pZCBzZXQoVVNW
U3RyaW5nIG5hbWUsIFVTVlN0cmluZyB2YWx1ZSk7CisgICAgdm9pZCBzZXQoVVNWU3RyaW5nIG5h
bWUsIEJsb2IgYmxvYlZhbHVlLCBvcHRpb25hbCBVU1ZTdHJpbmcgZmlsZW5hbWUpOwogCisgICAg
aXRlcmFibGU8VVNWU3RyaW5nLCBGb3JtRGF0YUVudHJ5VmFsdWU+OworfTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvRm9ybURhdGFMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9odG1sL0Zvcm1EYXRhTGlzdC5jcHAJKHJldmlzaW9uIDIyMTgyNykKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvRm9ybURhdGFMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsMjkgKzIy
LDg2IEBACiAjaW5jbHVkZSAiRm9ybURhdGFMaXN0LmgiCiAKICNpbmNsdWRlICJMaW5lRW5kaW5n
LmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nVmlldy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1Gb3JtRGF0YUxpc3Q6OkZvcm1E
YXRhTGlzdChjb25zdCBUZXh0RW5jb2RpbmcmIGMpCi0gICAgOiBtX2VuY29kaW5nKGMpCitGb3Jt
RGF0YUxpc3Q6OkZvcm1EYXRhTGlzdChjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nKQorICAg
IDogbV9lbmNvZGluZyhlbmNvZGluZykKIHsKIH0KIAotdm9pZCBGb3JtRGF0YUxpc3Q6OmFwcGVu
ZFN0cmluZyhjb25zdCBTdHJpbmcmIHMpCitDU3RyaW5nIEZvcm1EYXRhTGlzdDo6bm9ybWFsaXpl
U3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpIGNvbnN0CiB7Ci0gICAgQ1N0cmluZyBjc3RyID0g
bV9lbmNvZGluZy5lbmNvZGUocywgRW50aXRpZXNGb3JVbmVuY29kYWJsZXMpOwotICAgIG1faXRl
bXMuYXBwZW5kKG5vcm1hbGl6ZUxpbmVFbmRpbmdzVG9DUkxGKGNzdHIpKTsKKyAgICByZXR1cm4g
bm9ybWFsaXplTGluZUVuZGluZ3NUb0NSTEYobV9lbmNvZGluZy5lbmNvZGUodmFsdWUsIEVudGl0
aWVzRm9yVW5lbmNvZGFibGVzKSk7CiB9CiAKLXZvaWQgRm9ybURhdGFMaXN0OjphcHBlbmRTdHJp
bmcoY29uc3QgQ1N0cmluZyYgcykKK2F1dG8gRm9ybURhdGFMaXN0OjpjcmVhdGVGaWxlRW50cnko
Y29uc3QgU3RyaW5nJiBrZXksIFJlZjxCbG9iPiYmIGJsb2IsIGNvbnN0IFN0cmluZyYgZmlsZW5h
bWUpIC0+IEl0ZW0KIHsKLSAgICBtX2l0ZW1zLmFwcGVuZChzKTsKKyAgICBpZiAoIWJsb2ItPmlz
RmlsZSgpKSB7CisgICAgICAgIGF1dG8gZmlsZSA9IEZpbGU6OmNyZWF0ZShibG9iLmdldCgpLCBm
aWxlbmFtZS5pc051bGwoKSA/IEFTQ0lJTGl0ZXJhbCgiYmxvYiIpIDogZmlsZW5hbWUpOworICAg
ICAgICByZXR1cm4geyBrZXksIFdURk1vdmUoZmlsZSkgfTsKKyAgICB9CisgICAgCisgICAgaWYg
KCFmaWxlbmFtZS5pc051bGwoKSkgeworICAgICAgICBhdXRvIGZpbGUgPSBGaWxlOjpjcmVhdGUo
ZG93bmNhc3Q8RmlsZT4oYmxvYi5nZXQoKSksIGZpbGVuYW1lKTsKKyAgICAgICAgcmV0dXJuIHsg
a2V5LCBXVEZNb3ZlKGZpbGUpIH07CisgICAgfQorCisgICAgcmV0dXJuIHsga2V5LCBzdGF0aWNf
cmVmZXJlbmNlX2Nhc3Q8RmlsZT4oV1RGTW92ZShibG9iKSkgfTsKK30KKwordm9pZCBGb3JtRGF0
YUxpc3Q6OmFwcGVuZERhdGEoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUp
Cit7CisgICAgbV9pdGVtcy5hcHBlbmQoeyBrZXksIHZhbHVlIH0pOworfQorCit2b2lkIEZvcm1E
YXRhTGlzdDo6YXBwZW5kRGF0YShjb25zdCBTdHJpbmcmIGtleSwgaW50IHZhbHVlKQoreworICAg
IG1faXRlbXMuYXBwZW5kKHsga2V5LCBTdHJpbmc6Om51bWJlcih2YWx1ZSkgfSk7CiB9CiAKLXZv
aWQgRm9ybURhdGFMaXN0OjphcHBlbmRCbG9iKFJlZjxCbG9iPiYmIGJsb2IsIGNvbnN0IFN0cmlu
ZyYgZmlsZW5hbWUpCit2b2lkIEZvcm1EYXRhTGlzdDo6YXBwZW5kQmxvYihjb25zdCBTdHJpbmcm
IGtleSwgUmVmPEJsb2I+JiYgYmxvYiwgY29uc3QgU3RyaW5nJiBmaWxlbmFtZSkKIHsKLSAgICBt
X2l0ZW1zLmFwcGVuZChJdGVtKFdURk1vdmUoYmxvYiksIGZpbGVuYW1lKSk7CisgICAgbV9pdGVt
cy5hcHBlbmQoY3JlYXRlRmlsZUVudHJ5KGtleSwgV1RGTW92ZShibG9iKSwgZmlsZW5hbWUpKTsK
IH0KIAotfSAvLyBuYW1lc3BhY2UKK3RlbXBsYXRlPHR5cGVuYW1lIEVudHJ5TWFrZXI+Cit2b2lk
IEZvcm1EYXRhTGlzdDo6c2V0KGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBFbnRyeU1ha2VyJiBl
bnRyeU1ha2VyKQoreworICAgIHNpemVfdCBpbml0aWFsTWF0Y2hMb2NhdGlvbiA9IFdURjo6bm90
Rm91bmQ7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1faXRlbXMuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgaWYgKGtleSA9PSBtX2l0ZW1zW2ldLmtleSgpKSB7CisgICAgICAgICAgICBp
bml0aWFsTWF0Y2hMb2NhdGlvbiA9IGk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1faXRl
bXNbaV0gPSBlbnRyeU1ha2VyKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
IH0KKworICAgIGlmIChpbml0aWFsTWF0Y2hMb2NhdGlvbiAhPSBXVEY6Om5vdEZvdW5kKSB7Cisg
ICAgICAgIG1faXRlbXMucmVtb3ZlQWxsTWF0Y2hpbmcoWyZrZXldIChjb25zdCBhdXRvJiBpdGVt
KSB7CisgICAgICAgICAgICByZXR1cm4gaXRlbS5rZXkoKSA9PSBrZXk7CisgICAgICAgIH0sIGlu
aXRpYWxNYXRjaExvY2F0aW9uICsgMSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBt
X2l0ZW1zLmFwcGVuZChlbnRyeU1ha2VyKCkpOworfQorCit2b2lkIEZvcm1EYXRhTGlzdDo6c2V0
RGF0YShjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBzZXQo
a2V5LCBbJl0oKSAtPiBJdGVtIHsKKyAgICAgICAgcmV0dXJuIHsga2V5LCB2YWx1ZSB9OworICAg
IH0pOworfQorCit2b2lkIEZvcm1EYXRhTGlzdDo6c2V0QmxvYihjb25zdCBTdHJpbmcmIGtleSwg
UmVmPEJsb2I+JiYgYmxvYiwgY29uc3QgU3RyaW5nJiBmaWxlbmFtZSkKK3sKKyAgICBzZXQoa2V5
LCBbJl0oKSAtPiBJdGVtIHsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUZpbGVFbnRyeShrZXksIFdU
Rk1vdmUoYmxvYiksIGZpbGVuYW1lKTsKKyAgICB9KTsKK30KKworfQpJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC9Gb3JtRGF0YUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL0Zvcm1EYXRhTGlzdC5oCShyZXZpc2lvbiAyMjE4MjcpCisrKyBTb3VyY2UvV2ViQ29yZS9o
dG1sL0Zvcm1EYXRhTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMCwxMCArMjAsMTAgQEAKIAog
I3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJCbG9iLmgiCisjaW5jbHVkZSAiRmlsZS5oIgogI2lu
Y2x1ZGUgIlRleHRFbmNvZGluZy5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9WYXJpYW50Lmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIApAQCAtMzEsNTMgKzMxLDQ3IEBAIGNsYXNzIEZvcm1EYXRhTGlzdCB7
CiBwdWJsaWM6CiAgICAgY2xhc3MgSXRlbSB7CiAgICAgcHVibGljOgotICAgICAgICBJdGVtKCkg
eyB9Ci0gICAgICAgIEl0ZW0oY29uc3QgV1RGOjpDU3RyaW5nJiBkYXRhKSA6IG1fZGF0YShkYXRh
KSB7IH0KLSAgICAgICAgSXRlbShSZWY8QmxvYj4mJiBibG9iLCBjb25zdCBTdHJpbmcmIGZpbGVu
YW1lKQotICAgICAgICAgICAgOiBtX2Jsb2IoV1RGTW92ZShibG9iKSkKLSAgICAgICAgICAgICwg
bV9maWxlbmFtZShmaWxlbmFtZSkKLSAgICAgICAgeyB9Ci0KLSAgICAgICAgY29uc3QgV1RGOjpD
U3RyaW5nJiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhOyB9Ci0gICAgICAgIEJsb2IqIGJs
b2IoKSBjb25zdCB7IHJldHVybiBtX2Jsb2IuZ2V0KCk7IH0KLSAgICAgICAgY29uc3QgU3RyaW5n
JiBmaWxlbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmlsZW5hbWU7IH0KKyAgICAgICAgSXRlbSgp
ID0gZGVmYXVsdDsKKyAgICAgICAgSXRlbShjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5n
JiBkYXRhKQorICAgICAgICAgICAgOiBtX2tleShrZXkpCisgICAgICAgICAgICAsIG1fZGF0YShk
YXRhKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBJdGVtKGNvbnN0IFN0cmluZyYg
a2V5LCBSZWY8RmlsZT4mJiBmaWxlKQorICAgICAgICAgICAgOiBtX2tleShrZXkpCisgICAgICAg
ICAgICAsIG1fZGF0YShSZWZQdHI8RmlsZT4geyBXVEZNb3ZlKGZpbGUpIH0pCisgICAgICAgIHsK
KyAgICAgICAgfQorCisgICAgICAgIHVzaW5nIERhdGEgPSBWYXJpYW50PFJlZlB0cjxGaWxlPiwg
U3RyaW5nPjsKKworICAgICAgICBjb25zdCBTdHJpbmcmIGtleSgpIGNvbnN0IHsgcmV0dXJuIG1f
a2V5OyB9CisgICAgICAgIGNvbnN0IERhdGEmIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2RhdGE7
IH0KIAogICAgIHByaXZhdGU6Ci0gICAgICAgIFdURjo6Q1N0cmluZyBtX2RhdGE7Ci0gICAgICAg
IFJlZlB0cjxCbG9iPiBtX2Jsb2I7Ci0gICAgICAgIFN0cmluZyBtX2ZpbGVuYW1lOworICAgICAg
ICBTdHJpbmcgbV9rZXk7CisgICAgICAgIERhdGEgbV9kYXRhOwogICAgIH07CiAKLSAgICBGb3Jt
RGF0YUxpc3QoY29uc3QgVGV4dEVuY29kaW5nJik7Ci0KLSAgICB2b2lkIGFwcGVuZERhdGEoY29u
c3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgewotICAgICAgICBhcHBl
bmRTdHJpbmcoa2V5KTsKLSAgICAgICAgYXBwZW5kU3RyaW5nKHZhbHVlKTsKLSAgICB9Ci0gICAg
dm9pZCBhcHBlbmREYXRhKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBDU3RyaW5nJiB2YWx1ZSkK
LSAgICB7Ci0gICAgICAgIGFwcGVuZFN0cmluZyhrZXkpOwotICAgICAgICBhcHBlbmRTdHJpbmco
dmFsdWUpOwotICAgIH0KLSAgICB2b2lkIGFwcGVuZERhdGEoY29uc3QgU3RyaW5nJiBrZXksIGlu
dCB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGFwcGVuZFN0cmluZyhrZXkpOwotICAgICAgICBhcHBl
bmRTdHJpbmcoU3RyaW5nOjpudW1iZXIodmFsdWUpKTsKLSAgICB9Ci0gICAgdm9pZCBhcHBlbmRC
bG9iKGNvbnN0IFN0cmluZyYga2V5LCBSZWY8QmxvYj4mJiBibG9iLCBjb25zdCBTdHJpbmcmIGZp
bGVuYW1lID0gU3RyaW5nKCkpCi0gICAgewotICAgICAgICBhcHBlbmRTdHJpbmcoa2V5KTsKLSAg
ICAgICAgYXBwZW5kQmxvYihXVEZNb3ZlKGJsb2IpLCBmaWxlbmFtZSk7Ci0gICAgfQorICAgIHZv
aWQgYXBwZW5kRGF0YShjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7Cisg
ICAgdm9pZCBhcHBlbmREYXRhKGNvbnN0IFN0cmluZyYga2V5LCBpbnQgdmFsdWUpOworICAgIHZv
aWQgYXBwZW5kQmxvYihjb25zdCBTdHJpbmcmIGtleSwgUmVmPEJsb2I+JiYsIGNvbnN0IFN0cmlu
ZyYgZmlsZW5hbWUgPSB7IH0pOworICAgIHZvaWQgc2V0RGF0YShjb25zdCBTdHJpbmcmIGtleSwg
Y29uc3QgU3RyaW5nJiB2YWx1ZSk7CisgICAgdm9pZCBzZXRCbG9iKGNvbnN0IFN0cmluZyYga2V5
LCBSZWY8QmxvYj4mJiwgY29uc3QgU3RyaW5nJiBmaWxlbmFtZSA9IHsgfSk7CiAKICAgICBjb25z
dCBWZWN0b3I8SXRlbT4mIGl0ZW1zKCkgY29uc3QgeyByZXR1cm4gbV9pdGVtczsgfQogICAgIGNv
bnN0IFRleHRFbmNvZGluZyYgZW5jb2RpbmcoKSBjb25zdCB7IHJldHVybiBtX2VuY29kaW5nOyB9
CiAKLXByaXZhdGU6Ci0gICAgdm9pZCBhcHBlbmRTdHJpbmcoY29uc3QgQ1N0cmluZyYpOwotICAg
IHZvaWQgYXBwZW5kU3RyaW5nKGNvbnN0IFN0cmluZyYpOwotICAgIHZvaWQgYXBwZW5kQmxvYihS
ZWY8QmxvYj4mJiwgY29uc3QgU3RyaW5nJiBmaWxlbmFtZSk7CisgICAgQ1N0cmluZyBub3JtYWxp
emVTdHJpbmcoY29uc3QgU3RyaW5nJikgY29uc3Q7CisKK3Byb3RlY3RlZDoKKyAgICBGb3JtRGF0
YUxpc3QoY29uc3QgVGV4dEVuY29kaW5nJik7CisKKyAgICBJdGVtIGNyZWF0ZUZpbGVFbnRyeShj
b25zdCBTdHJpbmcmIGtleSwgUmVmPEJsb2I+JiYsIGNvbnN0IFN0cmluZyYgZmlsZW5hbWUpOwor
ICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEVudHJ5TWFrZXI+CisgICAgdm9pZCBzZXQoY29u
c3QgU3RyaW5nJiBrZXksIGNvbnN0IEVudHJ5TWFrZXImKTsKIAogICAgIFRleHRFbmNvZGluZyBt
X2VuY29kaW5nOwogICAgIFZlY3RvcjxJdGVtPiBtX2l0ZW1zOwpJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MS2V5Z2VuRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MS2V5Z2VuRWxlbWVudC5jcHAJKHJldmlzaW9uIDIyMTgyNykKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTEtleWdlbkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MjMsNyArMTIzLDcgQEAgYm9vbCBIVE1MS2V5Z2VuRWxlbWVudDo6YXBwZW5kRm9ybURhdGEoRgog
ICAgIFN0cmluZyB2YWx1ZSA9IHNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZVN0cmluZyhzaGFk
b3dTZWxlY3QoKS0+c2VsZWN0ZWRJbmRleCgpLCBhdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0
aW9uKGNoYWxsZW5nZUF0dHIpLCBkb2N1bWVudCgpLmJhc2VVUkwoKSk7CiAgICAgaWYgKHZhbHVl
LmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZW5jb2RlZF92YWx1ZXMuYXBw
ZW5kRGF0YShuYW1lKCksIHZhbHVlLnV0ZjgoKSk7CisgICAgZW5jb2RlZF92YWx1ZXMuYXBwZW5k
RGF0YShuYW1lKCksIHZhbHVlKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck5ldHdvcmtBZ2VudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck5ldHdvcmtBZ2VudC5jcHAJKHJl
dmlzaW9uIDIyMTgyNykKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JOZXR3
b3JrQWdlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTYsOCArMjU2LDcgQEAgc3RhdGljIFJl
ZjxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOgogICAgICAgICAuc2V0SGVhZGVycyhidWls
ZE9iamVjdEZvckhlYWRlcnMocmVxdWVzdC5odHRwSGVhZGVyRmllbGRzKCkpKQogICAgICAgICAu
cmVsZWFzZSgpOwogICAgIGlmIChyZXF1ZXN0Lmh0dHBCb2R5KCkgJiYgIXJlcXVlc3QuaHR0cEJv
ZHkoKS0+aXNFbXB0eSgpKSB7Ci0gICAgICAgIFZlY3RvcjxjaGFyPiBieXRlczsKLSAgICAgICAg
cmVxdWVzdC5odHRwQm9keSgpLT5mbGF0dGVuKGJ5dGVzKTsKKyAgICAgICAgYXV0byBieXRlcyA9
IHJlcXVlc3QuaHR0cEJvZHkoKS0+ZmxhdHRlbigpOwogICAgICAgICByZXF1ZXN0T2JqZWN0LT5z
ZXRQb3N0RGF0YShTdHJpbmc6OmZyb21VVEY4V2l0aExhdGluMUZhbGxiYWNrKGJ5dGVzLmRhdGEo
KSwgYnl0ZXMuc2l6ZSgpKSk7CiAgICAgfQogICAgIHJldHVybiByZXF1ZXN0T2JqZWN0OwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHAJKHJldmlz
aW9uIDIyMTgyNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIGlubGluZSBGb3JtRGF0YTo6Rm9y
bURhdGEoY29uc3QgRm9ybURhdGEKIHsKICAgICAvLyBXZSBzaG91bGRuJ3QgYmUgY29weWluZyBG
b3JtRGF0YSB0aGF0IGhhc24ndCBhbHJlYWR5IHJlbW92ZWQgaXRzIGdlbmVyYXRlZCBmaWxlcwog
ICAgIC8vIGJ1dCBqdXN0IGluIGNhc2UsIG1ha2Ugc3VyZSB0aGUgbmV3IEZvcm1EYXRhIGlzIHJl
YWR5IHRvIGdlbmVyYXRlIGl0cyBvd24gZmlsZXMuCi0gICAgZm9yIChGb3JtRGF0YUVsZW1lbnQm
IGVsZW1lbnQgOiBtX2VsZW1lbnRzKSB7CisgICAgZm9yIChhdXRvJiBlbGVtZW50IDogbV9lbGVt
ZW50cykgewogICAgICAgICBpZiAoZWxlbWVudC5tX3R5cGUgPT0gRm9ybURhdGFFbGVtZW50OjpU
eXBlOjpFbmNvZGVkRmlsZSkgewogICAgICAgICAgICAgZWxlbWVudC5tX2dlbmVyYXRlZEZpbGVu
YW1lID0gU3RyaW5nKCk7CiAgICAgICAgICAgICBlbGVtZW50Lm1fb3duc0dlbmVyYXRlZEZpbGUg
PSBmYWxzZTsKQEAgLTczLDM1ICs3MywzNSBAQCBSZWY8Rm9ybURhdGE+IEZvcm1EYXRhOjpjcmVh
dGUoKQogCiBSZWY8Rm9ybURhdGE+IEZvcm1EYXRhOjpjcmVhdGUoY29uc3Qgdm9pZCogZGF0YSwg
c2l6ZV90IHNpemUpCiB7Ci0gICAgUmVmPEZvcm1EYXRhPiByZXN1bHQgPSBjcmVhdGUoKTsKKyAg
ICBhdXRvIHJlc3VsdCA9IGNyZWF0ZSgpOwogICAgIHJlc3VsdC0+YXBwZW5kRGF0YShkYXRhLCBz
aXplKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCiBSZWY8Rm9ybURhdGE+IEZvcm1EYXRhOjpj
cmVhdGUoY29uc3QgQ1N0cmluZyYgc3RyaW5nKQogewotICAgIFJlZjxGb3JtRGF0YT4gcmVzdWx0
ID0gY3JlYXRlKCk7CisgICAgYXV0byByZXN1bHQgPSBjcmVhdGUoKTsKICAgICByZXN1bHQtPmFw
cGVuZERhdGEoc3RyaW5nLmRhdGEoKSwgc3RyaW5nLmxlbmd0aCgpKTsKICAgICByZXR1cm4gcmVz
dWx0OwogfQogCiBSZWY8Rm9ybURhdGE+IEZvcm1EYXRhOjpjcmVhdGUoY29uc3QgVmVjdG9yPGNo
YXI+JiB2ZWN0b3IpCiB7Ci0gICAgUmVmPEZvcm1EYXRhPiByZXN1bHQgPSBjcmVhdGUoKTsKKyAg
ICBhdXRvIHJlc3VsdCA9IGNyZWF0ZSgpOwogICAgIHJlc3VsdC0+YXBwZW5kRGF0YSh2ZWN0b3Iu
ZGF0YSgpLCB2ZWN0b3Iuc2l6ZSgpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCiBSZWY8Rm9y
bURhdGE+IEZvcm1EYXRhOjpjcmVhdGUoY29uc3QgRm9ybURhdGFMaXN0JiBsaXN0LCBjb25zdCBU
ZXh0RW5jb2RpbmcmIGVuY29kaW5nLCBFbmNvZGluZ1R5cGUgZW5jb2RpbmdUeXBlKQogewotICAg
IFJlZjxGb3JtRGF0YT4gcmVzdWx0ID0gY3JlYXRlKCk7CisgICAgYXV0byByZXN1bHQgPSBjcmVh
dGUoKTsKICAgICByZXN1bHQtPmFwcGVuZEtleVZhbHVlUGFpckl0ZW1zKGxpc3QsIGVuY29kaW5n
LCBmYWxzZSwgMCwgZW5jb2RpbmdUeXBlKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCiBSZWY8
Rm9ybURhdGE+IEZvcm1EYXRhOjpjcmVhdGVNdWx0aVBhcnQoY29uc3QgRm9ybURhdGFMaXN0JiBs
aXN0LCBjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nLCBEb2N1bWVudCogZG9jdW1lbnQpCiB7
Ci0gICAgUmVmPEZvcm1EYXRhPiByZXN1bHQgPSBjcmVhdGUoKTsKKyAgICBhdXRvIHJlc3VsdCA9
IGNyZWF0ZSgpOwogICAgIHJlc3VsdC0+YXBwZW5kS2V5VmFsdWVQYWlySXRlbXMobGlzdCwgZW5j
b2RpbmcsIHRydWUsIGRvY3VtZW50KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtMTg4LDUy
ICsxODgsMzUgQEAgdm9pZCBGb3JtRGF0YTo6YXBwZW5kS2V5VmFsdWVQYWlySXRlbXMoYwogICAg
ICAgICBtX2JvdW5kYXJ5ID0gRm9ybURhdGFCdWlsZGVyOjpnZW5lcmF0ZVVuaXF1ZUJvdW5kYXJ5
U3RyaW5nKCk7CiAKICAgICBWZWN0b3I8Y2hhcj4gZW5jb2RlZERhdGE7Ci0KLSAgICBjb25zdCBW
ZWN0b3I8Rm9ybURhdGFMaXN0OjpJdGVtPiYgaXRlbXMgPSBsaXN0Lml0ZW1zKCk7Ci0gICAgc2l6
ZV90IGZvcm1EYXRhTGlzdFNpemUgPSBpdGVtcy5zaXplKCk7Ci0gICAgQVNTRVJUKCEoZm9ybURh
dGFMaXN0U2l6ZSAlIDIpKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZvcm1EYXRhTGlz
dFNpemU7IGkgKz0gMikgewotICAgICAgICBjb25zdCBGb3JtRGF0YUxpc3Q6Okl0ZW0mIGtleSA9
IGl0ZW1zW2ldOwotICAgICAgICBjb25zdCBGb3JtRGF0YUxpc3Q6Okl0ZW0mIHZhbHVlID0gaXRl
bXNbaSArIDFdOworICAgIGZvciAoY29uc3QgYXV0byYgaXRlbSA6IGxpc3QuaXRlbXMoKSkgewor
ICAgICAgICBhdXRvIG5vcm1hbGl6ZWROYW1lID0gbGlzdC5ub3JtYWxpemVTdHJpbmcoaXRlbS5r
ZXkoKSk7CisgICAgCiAgICAgICAgIGlmIChpc011bHRpUGFydEZvcm0pIHsKICAgICAgICAgICAg
IFZlY3RvcjxjaGFyPiBoZWFkZXI7Ci0gICAgICAgICAgICBGb3JtRGF0YUJ1aWxkZXI6OmJlZ2lu
TXVsdGlQYXJ0SGVhZGVyKGhlYWRlciwgbV9ib3VuZGFyeS5kYXRhKCksIGtleS5kYXRhKCkpOwor
ICAgICAgICAgICAgRm9ybURhdGFCdWlsZGVyOjpiZWdpbk11bHRpUGFydEhlYWRlcihoZWFkZXIs
IG1fYm91bmRhcnkuZGF0YSgpLCBub3JtYWxpemVkTmFtZSk7CiAKICAgICAgICAgICAgIGJvb2wg
c2hvdWxkR2VuZXJhdGVGaWxlID0gZmFsc2U7CiAKLSAgICAgICAgICAgIC8vIElmIHRoZSBjdXJy
ZW50IHR5cGUgaXMgYmxvYiwgdGhlbiB3ZSBhbHNvIG5lZWQgdG8gaW5jbHVkZSB0aGUgZmlsZW5h
bWUKLSAgICAgICAgICAgIGlmICh2YWx1ZS5ibG9iKCkpIHsKLSAgICAgICAgICAgICAgICBTdHJp
bmcgbmFtZTsKLSAgICAgICAgICAgICAgICBpZiAoaXM8RmlsZT4oKnZhbHVlLmJsb2IoKSkpIHsK
LSAgICAgICAgICAgICAgICAgICAgRmlsZSYgZmlsZSA9IGRvd25jYXN0PEZpbGU+KCp2YWx1ZS5i
bG9iKCkpOwotICAgICAgICAgICAgICAgICAgICBuYW1lID0gZmlsZS5uYW1lKCk7Ci0gICAgICAg
ICAgICAgICAgICAgIC8vIExldCB0aGUgYXBwbGljYXRpb24gc3BlY2lmeSBhIGZpbGVuYW1lIGlm
IGl0J3MgZ29pbmcgdG8gZ2VuZXJhdGUgYSByZXBsYWNlbWVudCBmaWxlIGZvciB0aGUgdXBsb2Fk
LgotICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHBhdGggPSBmaWxlLnBhdGgoKTsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKCFwYXRoLmlzRW1wdHkoKSkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBkb2N1bWVudC0+cGFnZSgpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGdlbmVyYXRlZEZpbGVOYW1lOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNob3VsZEdlbmVyYXRlRmlsZSA9IHBhZ2UtPmNocm9tZSgpLmNs
aWVudCgpLnNob3VsZFJlcGxhY2VXaXRoR2VuZXJhdGVkRmlsZUZvclVwbG9hZChwYXRoLCBnZW5l
cmF0ZWRGaWxlTmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZEdl
bmVyYXRlRmlsZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IGdlbmVy
YXRlZEZpbGVOYW1lOwotICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8g
SWYgdGhlIGN1cnJlbnQgdHlwZSBpcyBhIGZpbGUsIHRoZW4gd2UgYWxzbyBuZWVkIHRvIGluY2x1
ZGUgdGhlIGZpbGVuYW1lCisgICAgICAgICAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxS
ZWZQdHI8RmlsZT4+KGl0ZW0uZGF0YSgpKSkgeworICAgICAgICAgICAgICAgIGF1dG8gZmlsZSA9
IFdURjo6Z2V0PFJlZlB0cjxGaWxlPj4oaXRlbS5kYXRhKCkpOworICAgICAgICAgICAgICAgIGF1
dG8gbmFtZSA9IGZpbGUtPm5hbWUoKTsKKyAgICAgICAgICAgICAgICAvLyBMZXQgdGhlIGFwcGxp
Y2F0aW9uIHNwZWNpZnkgYSBmaWxlbmFtZSBpZiBpdCdzIGdvaW5nIHRvIGdlbmVyYXRlIGEgcmVw
bGFjZW1lbnQgZmlsZSBmb3IgdGhlIHVwbG9hZC4KKyAgICAgICAgICAgICAgICBjb25zdCBhdXRv
JiBwYXRoID0gZmlsZS0+cGF0aCgpOworICAgICAgICAgICAgICAgIGlmICghcGF0aC5pc0VtcHR5
KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBkb2N1bWVudC0+cGFn
ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgZ2VuZXJhdGVkRmlsZU5hbWU7
CisgICAgICAgICAgICAgICAgICAgICAgICBzaG91bGRHZW5lcmF0ZUZpbGUgPSBwYWdlLT5jaHJv
bWUoKS5jbGllbnQoKS5zaG91bGRSZXBsYWNlV2l0aEdlbmVyYXRlZEZpbGVGb3JVcGxvYWQocGF0
aCwgZ2VuZXJhdGVkRmlsZU5hbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNob3Vs
ZEdlbmVyYXRlRmlsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gZ2VuZXJh
dGVkRmlsZU5hbWU7CiAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAg
ICAvLyBJZiBhIGZpbGVuYW1lIGlzIHBhc3NlZCBpbiBGb3JtRGF0YS5hcHBlbmQoKSwgdXNlIGl0
IGluc3RlYWQgb2YgdGhlIGZpbGUgYmxvYidzIG5hbWUuCi0gICAgICAgICAgICAgICAgICAgIGlm
ICghdmFsdWUuZmlsZW5hbWUoKS5pc051bGwoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG5h
bWUgPSB2YWx1ZS5maWxlbmFtZSgpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgIC8vIEZvciBub24tZmlsZSBibG9iLCB1c2UgdGhlIGZpbGVuYW1lIGlmIGl0
IGlzIHBhc3NlZCBpbiBGb3JtRGF0YS5hcHBlbmQoKS4KLSAgICAgICAgICAgICAgICAgICAgaWYg
KCF2YWx1ZS5maWxlbmFtZSgpLmlzTnVsbCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgbmFt
ZSA9IHZhbHVlLmZpbGVuYW1lKCk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICAgICAgICAgIG5hbWUgPSAiYmxvYiI7CiAgICAgICAgICAgICAgICAgfQogCiAgICAg
ICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBpbmNsdWRlIHRoZSBmaWxlbmFtZT0iLi4iIHBhcnQg
aW4gdGhlIGhlYWRlciwgZXZlbiBpZiB0aGUgZmlsZW5hbWUgaXMgZW1wdHkKICAgICAgICAgICAg
ICAgICBGb3JtRGF0YUJ1aWxkZXI6OmFkZEZpbGVuYW1lVG9NdWx0aVBhcnRIZWFkZXIoaGVhZGVy
LCBlbmNvZGluZywgbmFtZSk7CiAKICAgICAgICAgICAgICAgICAvLyBBZGQgdGhlIGNvbnRlbnQg
dHlwZSBpZiBhdmFpbGFibGUsIG9yICJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iIG90aGVyd2lz
ZSAoUkZDIDE4NjcpLgotICAgICAgICAgICAgICAgIFN0cmluZyBjb250ZW50VHlwZSA9IHZhbHVl
LmJsb2IoKS0+dHlwZSgpOworICAgICAgICAgICAgICAgIGF1dG8gY29udGVudFR5cGUgPSBmaWxl
LT50eXBlKCk7CiAgICAgICAgICAgICAgICAgaWYgKGNvbnRlbnRUeXBlLmlzRW1wdHkoKSkKICAg
ICAgICAgICAgICAgICAgICAgY29udGVudFR5cGUgPSAiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFt
IjsKICAgICAgICAgICAgICAgICBBU1NFUlQoQmxvYjo6aXNOb3JtYWxpemVkQ29udGVudFR5cGUo
Y29udGVudFR5cGUpKTsKQEAgLTI0NCwyMCArMjI3LDIzIEBAIHZvaWQgRm9ybURhdGE6OmFwcGVu
ZEtleVZhbHVlUGFpckl0ZW1zKGMKIAogICAgICAgICAgICAgLy8gQXBwZW5kIGJvZHkKICAgICAg
ICAgICAgIGFwcGVuZERhdGEoaGVhZGVyLmRhdGEoKSwgaGVhZGVyLnNpemUoKSk7Ci0gICAgICAg
ICAgICBpZiAodmFsdWUuYmxvYigpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGlzPEZpbGU+KCp2
YWx1ZS5ibG9iKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIEZpbGUmIGZpbGUgPSBkb3duY2Fz
dDxGaWxlPigqdmFsdWUuYmxvYigpKTsKLSAgICAgICAgICAgICAgICAgICAgLy8gRG8gbm90IGFk
ZCB0aGUgZmlsZSBpZiB0aGUgcGF0aCBpcyBlbXB0eS4KLSAgICAgICAgICAgICAgICAgICAgaWYg
KCFmaWxlLnBhdGgoKS5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRG
aWxlKGZpbGUucGF0aCgpLCBzaG91bGRHZW5lcmF0ZUZpbGUpOwotICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFJlZlB0cjxGaWxlPj4oaXRl
bS5kYXRhKCkpKSB7CisgICAgICAgICAgICAgICAgYXV0byBmaWxlID0gV1RGOjpnZXQ8UmVmUHRy
PEZpbGU+PihpdGVtLmRhdGEoKSk7CisgICAgICAgICAgICAgICAgaWYgKCFmaWxlLT5wYXRoKCku
aXNFbXB0eSgpKQorICAgICAgICAgICAgICAgICAgICBhcHBlbmRGaWxlKGZpbGUtPnBhdGgoKSwg
c2hvdWxkR2VuZXJhdGVGaWxlKTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgICAgIGFwcGVuZEJsb2IodmFsdWUuYmxvYigpLT51cmwoKSk7Ci0gICAgICAgICAgICB9IGVs
c2UKLSAgICAgICAgICAgICAgICBhcHBlbmREYXRhKHZhbHVlLmRhdGEoKS5kYXRhKCksIHZhbHVl
LmRhdGEoKS5sZW5ndGgoKSk7CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZEJsb2IoZmlsZS0+
dXJsKCkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBhdXRvIG5vcm1h
bGl6ZWRTdGluZ0RhdGEgPSBsaXN0Lm5vcm1hbGl6ZVN0cmluZyhXVEY6OmdldDxTdHJpbmc+KGl0
ZW0uZGF0YSgpKSk7CisgICAgICAgICAgICAgICAgYXBwZW5kRGF0YShub3JtYWxpemVkU3RpbmdE
YXRhLmRhdGEoKSwgbm9ybWFsaXplZFN0aW5nRGF0YS5sZW5ndGgoKSk7CisgICAgICAgICAgICB9
CiAgICAgICAgICAgICBhcHBlbmREYXRhKCJcclxuIiwgMik7Ci0gICAgICAgIH0gZWxzZQotICAg
ICAgICAgICAgRm9ybURhdGFCdWlsZGVyOjphZGRLZXlWYWx1ZVBhaXJBc0Zvcm1EYXRhKGVuY29k
ZWREYXRhLCBrZXkuZGF0YSgpLCB2YWx1ZS5kYXRhKCksIGVuY29kaW5nVHlwZSk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxTdHJp
bmc+KGl0ZW0uZGF0YSgpKSk7CisKKyAgICAgICAgICAgIGF1dG8gbm9ybWFsaXplZFN0aW5nRGF0
YSA9IGxpc3Qubm9ybWFsaXplU3RyaW5nKFdURjo6Z2V0PFN0cmluZz4oaXRlbS5kYXRhKCkpKTsK
KyAgICAgICAgICAgIEZvcm1EYXRhQnVpbGRlcjo6YWRkS2V5VmFsdWVQYWlyQXNGb3JtRGF0YShl
bmNvZGVkRGF0YSwgbm9ybWFsaXplZE5hbWUsIG5vcm1hbGl6ZWRTdGluZ0RhdGEsIGVuY29kaW5n
VHlwZSk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAoaXNNdWx0aVBhcnRGb3JtKQpAQCAt
MjcwLDI5ICsyNTYsMjggQEAgY2hhciogRm9ybURhdGE6OmV4cGFuZERhdGFTdG9yZShzaXplX3Qg
cwogewogICAgIG1fbGVuZ3RoSW5CeXRlcyA9IHN0ZDo6bnVsbG9wdDsKICAgICBpZiAobV9lbGVt
ZW50cy5pc0VtcHR5KCkgfHwgbV9lbGVtZW50cy5sYXN0KCkubV90eXBlICE9IEZvcm1EYXRhRWxl
bWVudDo6VHlwZTo6RGF0YSkKLSAgICAgICAgbV9lbGVtZW50cy5hcHBlbmQoRm9ybURhdGFFbGVt
ZW50KCkpOwotICAgIEZvcm1EYXRhRWxlbWVudCYgZSA9IG1fZWxlbWVudHMubGFzdCgpOworICAg
ICAgICBtX2VsZW1lbnRzLmFwcGVuZCh7IH0pOworICAgIGF1dG8mIGUgPSBtX2VsZW1lbnRzLmxh
c3QoKTsKICAgICBzaXplX3Qgb2xkU2l6ZSA9IGUubV9kYXRhLnNpemUoKTsKICAgICBlLm1fZGF0
YS5ncm93KG9sZFNpemUgKyBzaXplKTsKICAgICByZXR1cm4gZS5tX2RhdGEuZGF0YSgpICsgb2xk
U2l6ZTsKIH0KIAotdm9pZCBGb3JtRGF0YTo6ZmxhdHRlbihWZWN0b3I8Y2hhcj4mIGRhdGEpIGNv
bnN0CitWZWN0b3I8Y2hhcj4gRm9ybURhdGE6OmZsYXR0ZW4oKSBjb25zdAogewogICAgIC8vIENv
bmNhdGVuYXRlIGFsbCB0aGUgYnl0ZSBhcnJheXMsIGJ1dCBvbWl0IGFueSBmaWxlcy4KLSAgICBk
YXRhLmNsZWFyKCk7Ci0gICAgc2l6ZV90IG4gPSBtX2VsZW1lbnRzLnNpemUoKTsKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG47ICsraSkgewotICAgICAgICBjb25zdCBGb3JtRGF0YUVsZW1l
bnQmIGUgPSBtX2VsZW1lbnRzW2ldOwotICAgICAgICBpZiAoZS5tX3R5cGUgPT0gRm9ybURhdGFF
bGVtZW50OjpUeXBlOjpEYXRhKQotICAgICAgICAgICAgZGF0YS5hcHBlbmQoZS5tX2RhdGEuZGF0
YSgpLCBzdGF0aWNfY2FzdDxzaXplX3Q+KGUubV9kYXRhLnNpemUoKSkpOworICAgIFZlY3Rvcjxj
aGFyPiBkYXRhOworICAgIGZvciAoY29uc3QgYXV0byYgZWxlbWVudCA6IG1fZWxlbWVudHMpIHsK
KyAgICAgICAgaWYgKGVsZW1lbnQubV90eXBlID09IEZvcm1EYXRhRWxlbWVudDo6VHlwZTo6RGF0
YSkKKyAgICAgICAgICAgIGRhdGEuYXBwZW5kKGVsZW1lbnQubV9kYXRhLmRhdGEoKSwgc3RhdGlj
X2Nhc3Q8c2l6ZV90PihlbGVtZW50Lm1fZGF0YS5zaXplKCkpKTsKICAgICB9CisgICAgCisgICAg
cmV0dXJuIGRhdGE7CiB9CiAKIFN0cmluZyBGb3JtRGF0YTo6ZmxhdHRlblRvU3RyaW5nKCkgY29u
c3QKIHsKLSAgICBWZWN0b3I8Y2hhcj4gYnl0ZXM7Ci0gICAgZmxhdHRlbihieXRlcyk7CisgICAg
YXV0byBieXRlcyA9IGZsYXR0ZW4oKTsKICAgICByZXR1cm4gTGF0aW4xRW5jb2RpbmcoKS5kZWNv
ZGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oYnl0ZXMuZGF0YSgpKSwgYnl0ZXMuc2l6
ZSgpKTsKIH0KIApAQCAtMzAyLDE2ICsyODcsMTQgQEAgc3RhdGljIHZvaWQgYXBwZW5kQmxvYlJl
c29sdmVkKEZvcm1EYXRhKgogICAgICAgICBMT0dfRVJST1IoIlRyaWVkIHRvIHJlc29sdmUgYSBi
bG9iIHdpdGhvdXQgYSB1c2FibGUgcmVnaXN0cnkiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
KwogICAgIEJsb2JEYXRhKiBibG9iRGF0YSA9IHN0YXRpY19jYXN0PEJsb2JSZWdpc3RyeUltcGwm
PihibG9iUmVnaXN0cnkoKSkuZ2V0QmxvYkRhdGFGcm9tVVJMKHVybCk7CiAgICAgaWYgKCFibG9i
RGF0YSkgewogICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBnZXQgYmxvYiBkYXRhIGZyb20g
YSByZWdpc3RyeSIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgQmxvYkRhdGFJdGVt
TGlzdDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBibG9iRGF0YS0+aXRlbXMoKS5iZWdpbigpOwotICAg
IGNvbnN0IEJsb2JEYXRhSXRlbUxpc3Q6OmNvbnN0X2l0ZXJhdG9yIGl0ZW5kID0gYmxvYkRhdGEt
Pml0ZW1zKCkuZW5kKCk7Ci0gICAgZm9yICg7IGl0ICE9IGl0ZW5kOyArK2l0KSB7Ci0gICAgICAg
IGNvbnN0IEJsb2JEYXRhSXRlbSYgYmxvYkl0ZW0gPSAqaXQ7CisgICAgZm9yIChjb25zdCBhdXRv
JiBibG9iSXRlbSA6IGJsb2JEYXRhLT5pdGVtcygpKSB7CiAgICAgICAgIGlmIChibG9iSXRlbS50
eXBlKCkgPT0gQmxvYkRhdGFJdGVtOjpUeXBlOjpEYXRhKSB7CiAgICAgICAgICAgICBBU1NFUlQo
YmxvYkl0ZW0uZGF0YSgpLmRhdGEoKSk7CiAgICAgICAgICAgICBmb3JtRGF0YS0+YXBwZW5kRGF0
YShibG9iSXRlbS5kYXRhKCkuZGF0YSgpLT5kYXRhKCkgKyBzdGF0aWNfY2FzdDxpbnQ+KGJsb2JJ
dGVtLm9mZnNldCgpKSwgc3RhdGljX2Nhc3Q8aW50PihibG9iSXRlbS5sZW5ndGgoKSkpOwpAQCAt
MzI2LDEwICszMDksOCBAQCBSZWY8Rm9ybURhdGE+IEZvcm1EYXRhOjpyZXNvbHZlQmxvYlJlZmVy
CiB7CiAgICAgLy8gRmlyc3QgY2hlY2sgaWYgYW55IGJsb2JzIG5lZWRzIHRvIGJlIHJlc29sdmVk
LCBvciB3ZSBjYW4gdGFrZSB0aGUgZmFzdCBwYXRoLgogICAgIGJvb2wgaGFzQmxvYiA9IGZhbHNl
OwotICAgIFZlY3RvcjxGb3JtRGF0YUVsZW1lbnQ+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGVsZW1l
bnRzKCkuYmVnaW4oKTsKLSAgICBjb25zdCBWZWN0b3I8Rm9ybURhdGFFbGVtZW50Pjo6Y29uc3Rf
aXRlcmF0b3IgaXRlbmQgPSBlbGVtZW50cygpLmVuZCgpOwotICAgIGZvciAoOyBpdCAhPSBpdGVu
ZDsgKytpdCkgewotICAgICAgICBpZiAoaXQtPm1fdHlwZSA9PSBGb3JtRGF0YUVsZW1lbnQ6OlR5
cGU6OkVuY29kZWRCbG9iKSB7CisgICAgZm9yIChjb25zdCBhdXRvJiBlbGVtZW50IDogbV9lbGVt
ZW50cykgeworICAgICAgICBpZiAoZWxlbWVudC5tX3R5cGUgPT0gRm9ybURhdGFFbGVtZW50OjpU
eXBlOjpFbmNvZGVkQmxvYikgewogICAgICAgICAgICAgaGFzQmxvYiA9IHRydWU7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMzM5LDEyICszMjAsMTEgQEAgUmVmPEZvcm1EYXRh
PiBGb3JtRGF0YTo6cmVzb2x2ZUJsb2JSZWZlcgogICAgICAgICByZXR1cm4gKnRoaXM7CiAKICAg
ICAvLyBDcmVhdGUgYSBjb3B5IHRvIGFwcGVuZCB0aGUgcmVzdWx0IGludG8uCi0gICAgUmVmPEZv
cm1EYXRhPiBuZXdGb3JtRGF0YSA9IEZvcm1EYXRhOjpjcmVhdGUoKTsKKyAgICBhdXRvIG5ld0Zv
cm1EYXRhID0gRm9ybURhdGE6OmNyZWF0ZSgpOwogICAgIG5ld0Zvcm1EYXRhLT5zZXRBbHdheXNT
dHJlYW0oYWx3YXlzU3RyZWFtKCkpOwogICAgIG5ld0Zvcm1EYXRhLT5zZXRJZGVudGlmaWVyKGlk
ZW50aWZpZXIoKSk7Ci0gICAgaXQgPSBlbGVtZW50cygpLmJlZ2luKCk7Ci0gICAgZm9yICg7IGl0
ICE9IGl0ZW5kOyArK2l0KSB7Ci0gICAgICAgIGNvbnN0IEZvcm1EYXRhRWxlbWVudCYgZWxlbWVu
dCA9ICppdDsKKworICAgIGZvciAoY29uc3QgYXV0byYgZWxlbWVudCA6IG1fZWxlbWVudHMpIHsK
ICAgICAgICAgaWYgKGVsZW1lbnQubV90eXBlID09IEZvcm1EYXRhRWxlbWVudDo6VHlwZTo6RGF0
YSkKICAgICAgICAgICAgIG5ld0Zvcm1EYXRhLT5hcHBlbmREYXRhKGVsZW1lbnQubV9kYXRhLmRh
dGEoKSwgZWxlbWVudC5tX2RhdGEuc2l6ZSgpKTsKICAgICAgICAgZWxzZSBpZiAoZWxlbWVudC5t
X3R5cGUgPT0gRm9ybURhdGFFbGVtZW50OjpUeXBlOjpFbmNvZGVkRmlsZSkKQEAgLTM2Myw3ICsz
NDMsNyBAQCB2b2lkIEZvcm1EYXRhOjpnZW5lcmF0ZUZpbGVzKERvY3VtZW50KiBkCiAgICAgaWYg
KCFwYWdlKQogICAgICAgICByZXR1cm47CiAKLSAgICBmb3IgKEZvcm1EYXRhRWxlbWVudCYgZWxl
bWVudCA6IG1fZWxlbWVudHMpIHsKKyAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBtX2VsZW1lbnRz
KSB7CiAgICAgICAgIGlmIChlbGVtZW50Lm1fdHlwZSA9PSBGb3JtRGF0YUVsZW1lbnQ6OlR5cGU6
OkVuY29kZWRGaWxlICYmIGVsZW1lbnQubV9zaG91bGRHZW5lcmF0ZUZpbGUpIHsKICAgICAgICAg
ICAgIEFTU0VSVCghZWxlbWVudC5tX293bnNHZW5lcmF0ZWRGaWxlKTsKICAgICAgICAgICAgIEFT
U0VSVChlbGVtZW50Lm1fZ2VuZXJhdGVkRmlsZW5hbWUuaXNFbXB0eSgpKTsKQEAgLTM3OCw3ICsz
NTgsNyBAQCB2b2lkIEZvcm1EYXRhOjpnZW5lcmF0ZUZpbGVzKERvY3VtZW50KiBkCiAKIGJvb2wg
Rm9ybURhdGE6Omhhc0dlbmVyYXRlZEZpbGVzKCkgY29uc3QKIHsKLSAgICBmb3IgKGNvbnN0IEZv
cm1EYXRhRWxlbWVudCYgZWxlbWVudCA6IG1fZWxlbWVudHMpIHsKKyAgICBmb3IgKGNvbnN0IGF1
dG8mIGVsZW1lbnQgOiBtX2VsZW1lbnRzKSB7CiAgICAgICAgIGlmIChlbGVtZW50Lm1fdHlwZSA9
PSBGb3JtRGF0YUVsZW1lbnQ6OlR5cGU6OkVuY29kZWRGaWxlICYmICFlbGVtZW50Lm1fZ2VuZXJh
dGVkRmlsZW5hbWUuaXNFbXB0eSgpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpA
QCAtMzg3LDcgKzM2Nyw3IEBAIGJvb2wgRm9ybURhdGE6Omhhc0dlbmVyYXRlZEZpbGVzKCkgY29u
c3QKIAogYm9vbCBGb3JtRGF0YTo6aGFzT3duZWRHZW5lcmF0ZWRGaWxlcygpIGNvbnN0CiB7Ci0g
ICAgZm9yIChjb25zdCBGb3JtRGF0YUVsZW1lbnQmIGVsZW1lbnQgOiBtX2VsZW1lbnRzKSB7Cisg
ICAgZm9yIChjb25zdCBhdXRvJiBlbGVtZW50IDogbV9lbGVtZW50cykgewogICAgICAgICBpZiAo
ZWxlbWVudC5tX3R5cGUgPT0gRm9ybURhdGFFbGVtZW50OjpUeXBlOjpFbmNvZGVkRmlsZSAmJiBl
bGVtZW50Lm1fb3duc0dlbmVyYXRlZEZpbGUpIHsKICAgICAgICAgICAgIEFTU0VSVCghZWxlbWVu
dC5tX2dlbmVyYXRlZEZpbGVuYW1lLmlzRW1wdHkoKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKQEAgLTM5OCw3ICszNzgsNyBAQCBib29sIEZvcm1EYXRhOjpoYXNPd25lZEdlbmVyYXRlZEZp
bGVzKCkgCiAKIHZvaWQgRm9ybURhdGE6OnJlbW92ZUdlbmVyYXRlZEZpbGVzSWZOZWVkZWQoKQog
ewotICAgIGZvciAoRm9ybURhdGFFbGVtZW50JiBlbGVtZW50IDogbV9lbGVtZW50cykgeworICAg
IGZvciAoYXV0byYgZWxlbWVudCA6IG1fZWxlbWVudHMpIHsKICAgICAgICAgaWYgKGVsZW1lbnQu
bV90eXBlID09IEZvcm1EYXRhRWxlbWVudDo6VHlwZTo6RW5jb2RlZEZpbGUgJiYgZWxlbWVudC5t
X293bnNHZW5lcmF0ZWRGaWxlKSB7CiAgICAgICAgICAgICBBU1NFUlQoIWVsZW1lbnQubV9nZW5l
cmF0ZWRGaWxlbmFtZS5pc0VtcHR5KCkpOwogICAgICAgICAgICAgQVNTRVJUKGVsZW1lbnQubV9z
aG91bGRHZW5lcmF0ZUZpbGUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9Gb3JtRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvRm9ybURhdGEuaAkocmV2aXNpb24gMjIxODI3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9Gb3JtRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjIsNyArMjIyLDcgQEAg
cHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwZW5kQmxvYihjb25zdCBVUkwmIGJs
b2JVUkwpOwogICAgIGNoYXIqIGV4cGFuZERhdGFTdG9yZShzaXplX3QpOwogCi0gICAgdm9pZCBm
bGF0dGVuKFZlY3RvcjxjaGFyPiYpIGNvbnN0OyAvLyBvbWl0cyBmaWxlcworICAgIFZlY3Rvcjxj
aGFyPiBmbGF0dGVuKCkgY29uc3Q7IC8vIG9taXRzIGZpbGVzCiAgICAgU3RyaW5nIGZsYXR0ZW5U
b1N0cmluZygpIGNvbnN0OyAvLyBvbWl0cyBmaWxlcwogCiAgICAgLy8gUmVzb2x2ZSBhbGwgYmxv
YiByZWZlcmVuY2VzIHNvIHdlIG9ubHkgaGF2ZSBmaWxlIGFuZCBkYXRhLgpJbmRleDogTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2MvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjE4MjgpCisrKyBMYXlvdXRUZXN0cy9p
bXBvcnRlZC93M2MvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIw
MTctMDktMDkgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBGaW5pc2gg
b2ZmIHRoZSBGb3JtRGF0YSBpbXBsZW1lbnRhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc2NjU5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvWE1MSHR0cFJlcXVl
c3QvRm9ybURhdGEtYXBwZW5kLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0t
dGVzdHMvWE1MSHR0cFJlcXVlc3QvZm9ybWRhdGEtZGVsZXRlLWV4cGVjdGVkLnR4dDoKKyAgICAg
ICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvWE1MSHR0cFJlcXVlc3QvZm9ybWRhdGEtZm9yZWFjaC1l
eHBlY3RlZC50eHQ6CisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL1hNTEh0dHBSZXF1ZXN0
L2Zvcm1kYXRhLWdldC1leHBlY3RlZC50eHQ6CisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3Rz
L1hNTEh0dHBSZXF1ZXN0L2Zvcm1kYXRhLWhhcy1leHBlY3RlZC50eHQ6CisgICAgICAgICogd2Vi
LXBsYXRmb3JtLXRlc3RzL1hNTEh0dHBSZXF1ZXN0L2Zvcm1kYXRhLXNldC1leHBlY3RlZC50eHQ6
CisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL1hNTEh0dHBSZXF1ZXN0L2ludGVyZmFjZXMt
ZXhwZWN0ZWQudHh0OgorICAgICAgICAKKyAgICAgICAgICAgIFVwZGF0ZSByZXN1bHRzLgorCiAy
MDE3LTA5LTA4ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KIAogICAgICAgICBS
ZW1vdmUgc3VwcG9ydCBmb3IgPj4gZGVzY2VuZGFudCBjb21iaW5hdG9yIHN5bnRheApJbmRleDog
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9YTUxIdHRwUmVxdWVz
dC9Gb3JtRGF0YS1hcHBlbmQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvWE1MSHR0cFJlcXVlc3QvRm9ybURhdGEt
YXBwZW5kLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMjIxODI3KQorKysgTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9YTUxIdHRwUmVxdWVzdC9Gb3JtRGF0YS1hcHBl
bmQtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDE2ICsxLDE2IEBACiAKIFBBU1Mg
UGFzc2luZyBhIFN0cmluZyBvYmplY3QgdG8gRm9ybURhdGEuYXBwZW5kIHNob3VsZCB3b3JrLiAK
LUZBSUwgdGVzdEZvcm1EYXRhQXBwZW5kMSBjcmVhdGVfZm9ybWRhdGEoWydrZXknLCAndmFsdWUx
J10pLmdldCBpcyBub3QgYSBmdW5jdGlvbi4gKEluICdjcmVhdGVfZm9ybWRhdGEoWydrZXknLCAn
dmFsdWUxJ10pLmdldCgna2V5JyknLCAnY3JlYXRlX2Zvcm1kYXRhKFsna2V5JywgJ3ZhbHVlMSdd
KS5nZXQnIGlzIHVuZGVmaW5lZCkKLUZBSUwgdGVzdEZvcm1EYXRhQXBwZW5kMiBjcmVhdGVfZm9y
bWRhdGEoWydrZXknLCAndmFsdWUyJ10sIFsna2V5JywgJ3ZhbHVlMSddKS5nZXQgaXMgbm90IGEg
ZnVuY3Rpb24uIChJbiAnY3JlYXRlX2Zvcm1kYXRhKFsna2V5JywgJ3ZhbHVlMiddLCBbJ2tleScs
ICd2YWx1ZTEnXSkuZ2V0KCdrZXknKScsICdjcmVhdGVfZm9ybWRhdGEoWydrZXknLCAndmFsdWUy
J10sIFsna2V5JywgJ3ZhbHVlMSddKS5nZXQnIGlzIHVuZGVmaW5lZCkKLUZBSUwgdGVzdEZvcm1E
YXRhQXBwZW5kVW5kZWZpbmVkMSBjcmVhdGVfZm9ybWRhdGEoWydrZXknLCB1bmRlZmluZWRdKS5n
ZXQgaXMgbm90IGEgZnVuY3Rpb24uIChJbiAnY3JlYXRlX2Zvcm1kYXRhKFsna2V5JywgdW5kZWZp
bmVkXSkuZ2V0KCdrZXknKScsICdjcmVhdGVfZm9ybWRhdGEoWydrZXknLCB1bmRlZmluZWRdKS5n
ZXQnIGlzIHVuZGVmaW5lZCkKLUZBSUwgdGVzdEZvcm1EYXRhQXBwZW5kVW5kZWZpbmVkMiBjcmVh
dGVfZm9ybWRhdGEoWydrZXknLCB1bmRlZmluZWRdLCBbJ2tleScsICd2YWx1ZTEnXSkuZ2V0IGlz
IG5vdCBhIGZ1bmN0aW9uLiAoSW4gJ2NyZWF0ZV9mb3JtZGF0YShbJ2tleScsIHVuZGVmaW5lZF0s
IFsna2V5JywgJ3ZhbHVlMSddKS5nZXQoJ2tleScpJywgJ2NyZWF0ZV9mb3JtZGF0YShbJ2tleScs
IHVuZGVmaW5lZF0sIFsna2V5JywgJ3ZhbHVlMSddKS5nZXQnIGlzIHVuZGVmaW5lZCkKLUZBSUwg
dGVzdEZvcm1EYXRhQXBwZW5kTnVsbDEgY3JlYXRlX2Zvcm1kYXRhKFsna2V5JywgbnVsbF0pLmdl
dCBpcyBub3QgYSBmdW5jdGlvbi4gKEluICdjcmVhdGVfZm9ybWRhdGEoWydrZXknLCBudWxsXSku
Z2V0KCdrZXknKScsICdjcmVhdGVfZm9ybWRhdGEoWydrZXknLCBudWxsXSkuZ2V0JyBpcyB1bmRl
ZmluZWQpCi1GQUlMIHRlc3RGb3JtRGF0YUFwcGVuZE51bGwyIGNyZWF0ZV9mb3JtZGF0YShbJ2tl
eScsIG51bGxdLCBbJ2tleScsICd2YWx1ZTEnXSkuZ2V0IGlzIG5vdCBhIGZ1bmN0aW9uLiAoSW4g
J2NyZWF0ZV9mb3JtZGF0YShbJ2tleScsIG51bGxdLCBbJ2tleScsICd2YWx1ZTEnXSkuZ2V0KCdr
ZXknKScsICdjcmVhdGVfZm9ybWRhdGEoWydrZXknLCBudWxsXSwgWydrZXknLCAndmFsdWUxJ10p
LmdldCcgaXMgdW5kZWZpbmVkKQotRkFJTCB0ZXN0Rm9ybURhdGFBcHBlbmRUb0Zvcm0xIGZkLmdl
dCBpcyBub3QgYSBmdW5jdGlvbi4gKEluICdmZC5nZXQoJ2tleScpJywgJ2ZkLmdldCcgaXMgdW5k
ZWZpbmVkKQotRkFJTCB0ZXN0Rm9ybURhdGFBcHBlbmRUb0Zvcm0yIGZkLmdldCBpcyBub3QgYSBm
dW5jdGlvbi4gKEluICdmZC5nZXQoJ2tleScpJywgJ2ZkLmdldCcgaXMgdW5kZWZpbmVkKQotRkFJ
TCB0ZXN0Rm9ybURhdGFBcHBlbmRUb0Zvcm1VbmRlZmluZWQxIGZkLmdldCBpcyBub3QgYSBmdW5j
dGlvbi4gKEluICdmZC5nZXQoJ2tleScpJywgJ2ZkLmdldCcgaXMgdW5kZWZpbmVkKQotRkFJTCB0
ZXN0Rm9ybURhdGFBcHBlbmRUb0Zvcm1VbmRlZmluZWQyIGZkLmdldCBpcyBub3QgYSBmdW5jdGlv
bi4gKEluICdmZC5nZXQoJ2tleScpJywgJ2ZkLmdldCcgaXMgdW5kZWZpbmVkKQotRkFJTCB0ZXN0
Rm9ybURhdGFBcHBlbmRUb0Zvcm1OdWxsMSBmZC5nZXQgaXMgbm90IGEgZnVuY3Rpb24uIChJbiAn
ZmQuZ2V0KCdrZXknKScsICdmZC5nZXQnIGlzIHVuZGVmaW5lZCkKLUZBSUwgdGVzdEZvcm1EYXRh
QXBwZW5kVG9Gb3JtTnVsbDIgZmQuZ2V0IGlzIG5vdCBhIGZ1bmN0aW9uLiAoSW4gJ2ZkLmdldCgn
a2V5JyknLCAnZmQuZ2V0JyBpcyB1bmRlZmluZWQpCi1GQUlMIHRlc3RGb3JtRGF0YUFwcGVuZEVt
cHR5QmxvYiBjcmVhdGVfZm9ybWRhdGEoWydrZXknLCBuZXcgQmxvYigpLCAnYmxhbmsudHh0J10p
LmdldCBpcyBub3QgYSBmdW5jdGlvbi4gKEluICdjcmVhdGVfZm9ybWRhdGEoWydrZXknLCBuZXcg
QmxvYigpLCAnYmxhbmsudHh0J10pLmdldCgna2V5JyknLCAnY3JlYXRlX2Zvcm1kYXRhKFsna2V5
JywgbmV3IEJsb2IoKSwgJ2JsYW5rLnR4dCddKS5nZXQnIGlzIHVuZGVmaW5lZCkKK1BBU1MgdGVz
dEZvcm1EYXRhQXBwZW5kMSAKK1BBU1MgdGVzdEZvcm1EYXRhQXBwZW5kMiAKK1BBU1MgdGVzdEZv
cm1EYXRhQXBwZW5kVW5kZWZpbmVkMSAKK1BBU1MgdGVzdEZvcm1EYXRhQXBwZW5kVW5kZWZpbmVk
MiAKK1BBU1MgdGVzdEZvcm1EYXRhQXBwZW5kTnVsbDEgCitQQVNTIHRlc3RGb3JtRGF0YUFwcGVu
ZE51bGwyIAorUEFTUyB0ZXN0Rm9ybURhdGFBcHBlbmRUb0Zvcm0xIAorUEFTUyB0ZXN0Rm9ybURh
dGFBcHBlbmRUb0Zvcm0yIAorUEFTUyB0ZXN0Rm9ybURhdGFBcHBlbmRUb0Zvcm1VbmRlZmluZWQx
IAorUEFTUyB0ZXN0Rm9ybURhdGFBcHBlbmRUb0Zvcm1VbmRlZmluZWQyIAorUEFTUyB0ZXN0Rm9y
bURhdGFBcHBlbmRUb0Zvcm1OdWxsMSAKK1BBU1MgdGVzdEZvcm1EYXRhQXBwZW5kVG9Gb3JtTnVs
bDIgCitQQVNTIHRlc3RGb3JtRGF0YUFwcGVuZEVtcHR5QmxvYiAKIApJbmRleDogTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9YTUxIdHRwUmVxdWVzdC9mb3JtZGF0
YS1kZWxldGUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvWE1MSHR0cFJlcXVlc3QvZm9ybWRhdGEtZGVsZXRlLWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMjIxODI3KQorKysgTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9YTUxIdHRwUmVxdWVzdC9mb3JtZGF0YS1kZWxldGUtZXhwZWN0
ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDkgKzEsOSBAQAogCi1GQUlMIHRlc3RGb3JtRGF0
YURlbGV0ZSBmZC5kZWxldGUgaXMgbm90IGEgZnVuY3Rpb24uIChJbiAnZmQuZGVsZXRlKCdrZXkn
KScsICdmZC5kZWxldGUnIGlzIHVuZGVmaW5lZCkKLUZBSUwgdGVzdEZvcm1EYXRhRGVsZXRlRnJv
bUZvcm0gZmQuZGVsZXRlIGlzIG5vdCBhIGZ1bmN0aW9uLiAoSW4gJ2ZkLmRlbGV0ZSgna2V5Jykn
LCAnZmQuZGVsZXRlJyBpcyB1bmRlZmluZWQpCi1GQUlMIHRlc3RGb3JtRGF0YURlbGV0ZUZyb21G
b3JtTm9uRXhpc3RlbnRLZXkgZmQuZGVsZXRlIGlzIG5vdCBhIGZ1bmN0aW9uLiAoSW4gJ2ZkLmRl
bGV0ZSgnbmlsJyknLCAnZmQuZGVsZXRlJyBpcyB1bmRlZmluZWQpCi1GQUlMIHRlc3RGb3JtRGF0
YURlbGV0ZUZyb21Gb3JtT3RoZXJLZXkgZmQuZGVsZXRlIGlzIG5vdCBhIGZ1bmN0aW9uLiAoSW4g
J2ZkLmRlbGV0ZSgna2V5MScpJywgJ2ZkLmRlbGV0ZScgaXMgdW5kZWZpbmVkKQotRkFJTCB0ZXN0
Rm9ybURhdGFEZWxldGVGcm9tRW1wdHlGb3JtIGZkLmRlbGV0ZSBpcyBub3QgYSBmdW5jdGlvbi4g
KEluICdmZC5kZWxldGUoJ2tleScpJywgJ2ZkLmRlbGV0ZScgaXMgdW5kZWZpbmVkKQotRkFJTCB0
ZXN0Rm9ybURhdGFEZWxldGVOb25FeGlzdGVudEtleSBmZC5kZWxldGUgaXMgbm90IGEgZnVuY3Rp
b24uIChJbiAnZmQuZGVsZXRlKCduaWwnKScsICdmZC5kZWxldGUnIGlzIHVuZGVmaW5lZCkKLUZB
SUwgdGVzdEZvcm1EYXRhRGVsZXRlT3RoZXJLZXkgZmQuZGVsZXRlIGlzIG5vdCBhIGZ1bmN0aW9u
LiAoSW4gJ2ZkLmRlbGV0ZSgna2V5MScpJywgJ2ZkLmRlbGV0ZScgaXMgdW5kZWZpbmVkKQorUEFT
UyB0ZXN0Rm9ybURhdGFEZWxldGUgCitQQVNTIHRlc3RGb3JtRGF0YURlbGV0ZUZyb21Gb3JtIAor
UEFTUyB0ZXN0Rm9ybURhdGFEZWxldGVGcm9tRm9ybU5vbkV4aXN0ZW50S2V5IAorUEFTUyB0ZXN0
Rm9ybURhdGFEZWxldGVGcm9tRm9ybU90aGVyS2V5IAorUEFTUyB0ZXN0Rm9ybURhdGFEZWxldGVG
cm9tRW1wdHlGb3JtIAorUEFTUyB0ZXN0Rm9ybURhdGFEZWxldGVOb25FeGlzdGVudEtleSAKK1BB
U1MgdGVzdEZvcm1EYXRhRGVsZXRlT3RoZXJLZXkgCiAKSW5kZXg6IExheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvWE1MSHR0cFJlcXVlc3QvZm9ybWRhdGEtZm9yZWFj
aC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9YTUxIdHRwUmVxdWVzdC9mb3JtZGF0YS1mb3JlYWNoLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMjIxODI3KQorKysgTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9YTUxIdHRwUmVxdWVzdC9mb3JtZGF0YS1mb3JlYWNoLWV4cGVjdGVkLnR4
dAkod29ya2luZyBjb3B5KQpAQCAtMSw0ICsxLDYgQEAKLUNPTlNPTEUgTUVTU0FHRTogbGluZSAx
NjogVHlwZUVycm9yOiBmZC5kZWxldGUgaXMgbm90IGEgZnVuY3Rpb24uIChJbiAnZmQuZGVsZXRl
KCduMicpJywgJ2ZkLmRlbGV0ZScgaXMgdW5kZWZpbmVkKQogCi1GQUlMIEZvcm1EYXRhOiBmb3Jl
YWNoIFR5cGVFcnJvcjogZmQuZGVsZXRlIGlzIG5vdCBhIGZ1bmN0aW9uLiAoSW4gJ2ZkLmRlbGV0
ZSgnbjInKScsICdmZC5kZWxldGUnIGlzIHVuZGVmaW5lZCkKK1BBU1MgSXRlcmF0b3Igc2hvdWxk
IHJldHVybiBkdXBsaWNhdGUga2V5cyBhbmQgbm9uLWRlbGV0ZWQgdmFsdWVzIAorUEFTUyBFbnRy
aWVzIGl0ZXJhdG9yIHNob3VsZCByZXR1cm4gZHVwbGljYXRlIGtleXMgYW5kIG5vbi1kZWxldGVk
IHZhbHVlcyAKK1BBU1MgS2V5cyBpdGVyYXRvciBzaG91bGQgcmV0dXJuIGR1cGxpY2F0ZXMgCitQ
QVNTIFZhbHVlcyBpdGVyYXRvciBzaG91bGQgcmV0dXJuIG5vbi1kZWxldGVkIHZhbHVlcyAKIApJ
bmRleDogTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9YTUxIdHRw
UmVxdWVzdC9mb3JtZGF0YS1nZXQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvWE1MSHR0cFJlcXVlc3QvZm9ybWRh
dGEtZ2V0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMjIxODI3KQorKysgTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9YTUxIdHRwUmVxdWVzdC9mb3JtZGF0YS1nZXQt
ZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDE0ICsxLDE0IEBACiAKLUZBSUwgdGVz
dEZvcm1EYXRhR2V0IGNyZWF0ZV9mb3JtZGF0YShbJ2tleScsICd2YWx1ZTEnXSwgWydrZXknLCAn
dmFsdWUyJ10pLmdldCBpcyBub3QgYSBmdW5jdGlvbi4gKEluICdjcmVhdGVfZm9ybWRhdGEoWydr
ZXknLCAndmFsdWUxJ10sIFsna2V5JywgJ3ZhbHVlMiddKS5nZXQoJ2tleScpJywgJ2NyZWF0ZV9m
b3JtZGF0YShbJ2tleScsICd2YWx1ZTEnXSwgWydrZXknLCAndmFsdWUyJ10pLmdldCcgaXMgdW5k
ZWZpbmVkKQotRkFJTCB0ZXN0Rm9ybURhdGFHZXRGcm9tRm9ybSBuZXcgRm9ybURhdGEoZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoJ2Zvcm0nKSkuZ2V0IGlzIG5vdCBhIGZ1bmN0aW9uLiAoSW4gJ25l
dyBGb3JtRGF0YShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZm9ybScpKS5nZXQoJ2tleScpJywg
J25ldyBGb3JtRGF0YShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZm9ybScpKS5nZXQnIGlzIHVu
ZGVmaW5lZCkKLUZBSUwgdGVzdEZvcm1EYXRhR2V0RnJvbUZvcm1OdWxsIG5ldyBGb3JtRGF0YShk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZm9ybScpKS5nZXQgaXMgbm90IGEgZnVuY3Rpb24uIChJ
biAnbmV3IEZvcm1EYXRhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmb3JtJykpLmdldCgnbmls
JyknLCAnbmV3IEZvcm1EYXRhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmb3JtJykpLmdldCcg
aXMgdW5kZWZpbmVkKQotRkFJTCB0ZXN0Rm9ybURhdGFHZXRGcm9tRW1wdHlGb3JtIG5ldyBGb3Jt
RGF0YShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZW1wdHktZm9ybScpKS5nZXQgaXMgbm90IGEg
ZnVuY3Rpb24uIChJbiAnbmV3IEZvcm1EYXRhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlbXB0
eS1mb3JtJykpLmdldCgna2V5JyknLCAnbmV3IEZvcm1EYXRhKGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCdlbXB0eS1mb3JtJykpLmdldCcgaXMgdW5kZWZpbmVkKQotRkFJTCB0ZXN0Rm9ybURhdGFH
ZXROdWxsMSBjcmVhdGVfZm9ybWRhdGEoWydrZXknLCAndmFsdWUxJ10sIFsna2V5JywgJ3ZhbHVl
MiddKS5nZXQgaXMgbm90IGEgZnVuY3Rpb24uIChJbiAnY3JlYXRlX2Zvcm1kYXRhKFsna2V5Jywg
J3ZhbHVlMSddLCBbJ2tleScsICd2YWx1ZTInXSkuZ2V0KCduaWwnKScsICdjcmVhdGVfZm9ybWRh
dGEoWydrZXknLCAndmFsdWUxJ10sIFsna2V5JywgJ3ZhbHVlMiddKS5nZXQnIGlzIHVuZGVmaW5l
ZCkKLUZBSUwgdGVzdEZvcm1EYXRhR2V0TnVsbDIgY3JlYXRlX2Zvcm1kYXRhKCkuZ2V0IGlzIG5v
dCBhIGZ1bmN0aW9uLiAoSW4gJ2NyZWF0ZV9mb3JtZGF0YSgpLmdldCgna2V5JyknLCAnY3JlYXRl
X2Zvcm1kYXRhKCkuZ2V0JyBpcyB1bmRlZmluZWQpCi1GQUlMIHRlc3RGb3JtRGF0YUdldEFsbCBj
cmVhdGVfZm9ybWRhdGEoWydrZXknLCAndmFsdWUxJ10sIFsna2V5JywgJ3ZhbHVlMiddKS5nZXRB
bGwgaXMgbm90IGEgZnVuY3Rpb24uIChJbiAnY3JlYXRlX2Zvcm1kYXRhKFsna2V5JywgJ3ZhbHVl
MSddLCBbJ2tleScsICd2YWx1ZTInXSkuZ2V0QWxsKCdrZXknKScsICdjcmVhdGVfZm9ybWRhdGEo
WydrZXknLCAndmFsdWUxJ10sIFsna2V5JywgJ3ZhbHVlMiddKS5nZXRBbGwnIGlzIHVuZGVmaW5l
ZCkKLUZBSUwgdGVzdEZvcm1EYXRhR2V0QWxsRW1wdHkxIGNyZWF0ZV9mb3JtZGF0YShbJ2tleScs
ICd2YWx1ZTEnXSwgWydrZXknLCAndmFsdWUyJ10pLmdldEFsbCBpcyBub3QgYSBmdW5jdGlvbi4g
KEluICdjcmVhdGVfZm9ybWRhdGEoWydrZXknLCAndmFsdWUxJ10sIFsna2V5JywgJ3ZhbHVlMidd
KS5nZXRBbGwoJ25pbCcpJywgJ2NyZWF0ZV9mb3JtZGF0YShbJ2tleScsICd2YWx1ZTEnXSwgWydr
ZXknLCAndmFsdWUyJ10pLmdldEFsbCcgaXMgdW5kZWZpbmVkKQotRkFJTCB0ZXN0Rm9ybURhdGFH
ZXRBbGxFbXB0eTIgY3JlYXRlX2Zvcm1kYXRhKCkuZ2V0QWxsIGlzIG5vdCBhIGZ1bmN0aW9uLiAo
SW4gJ2NyZWF0ZV9mb3JtZGF0YSgpLmdldEFsbCgna2V5JyknLCAnY3JlYXRlX2Zvcm1kYXRhKCku
Z2V0QWxsJyBpcyB1bmRlZmluZWQpCi1GQUlMIHRlc3RGb3JtRGF0YUdldEFsbEZyb21Gb3JtIG5l
dyBGb3JtRGF0YShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZm9ybScpKS5nZXRBbGwgaXMgbm90
IGEgZnVuY3Rpb24uIChJbiAnbmV3IEZvcm1EYXRhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdm
b3JtJykpLmdldEFsbCgna2V5JyknLCAnbmV3IEZvcm1EYXRhKGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCdmb3JtJykpLmdldEFsbCcgaXMgdW5kZWZpbmVkKQotRkFJTCB0ZXN0Rm9ybURhdGFHZXRB
bGxGcm9tRm9ybU51bGwgbmV3IEZvcm1EYXRhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmb3Jt
JykpLmdldEFsbCBpcyBub3QgYSBmdW5jdGlvbi4gKEluICduZXcgRm9ybURhdGEoZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoJ2Zvcm0nKSkuZ2V0QWxsKCduaWwnKScsICduZXcgRm9ybURhdGEoZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Zvcm0nKSkuZ2V0QWxsJyBpcyB1bmRlZmluZWQpCi1GQUlM
IHRlc3RGb3JtRGF0YUdldEFsbEZyb21FbXB0eUZvcm0gbmV3IEZvcm1EYXRhKGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCdlbXB0eS1mb3JtJykpLmdldEFsbCBpcyBub3QgYSBmdW5jdGlvbi4gKElu
ICduZXcgRm9ybURhdGEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VtcHR5LWZvcm0nKSkuZ2V0
QWxsKCdrZXknKScsICduZXcgRm9ybURhdGEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VtcHR5
LWZvcm0nKSkuZ2V0QWxsJyBpcyB1bmRlZmluZWQpCitQQVNTIHRlc3RGb3JtRGF0YUdldCAKK1BB
U1MgdGVzdEZvcm1EYXRhR2V0RnJvbUZvcm0gCitQQVNTIHRlc3RGb3JtRGF0YUdldEZyb21Gb3Jt
TnVsbCAKK1BBU1MgdGVzdEZvcm1EYXRhR2V0RnJvbUVtcHR5Rm9ybSAKK1BBU1MgdGVzdEZvcm1E
YXRhR2V0TnVsbDEgCitQQVNTIHRlc3RGb3JtRGF0YUdldE51bGwyIAorUEFTUyB0ZXN0Rm9ybURh
dGFHZXRBbGwgCitQQVNTIHRlc3RGb3JtRGF0YUdldEFsbEVtcHR5MSAKK1BBU1MgdGVzdEZvcm1E
YXRhR2V0QWxsRW1wdHkyIAorUEFTUyB0ZXN0Rm9ybURhdGFHZXRBbGxGcm9tRm9ybSAKK1BBU1Mg
dGVzdEZvcm1EYXRhR2V0QWxsRnJvbUZvcm1OdWxsIAorUEFTUyB0ZXN0Rm9ybURhdGFHZXRBbGxG
cm9tRW1wdHlGb3JtIAogCkluZGV4OiBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL1hNTEh0dHBSZXF1ZXN0L2Zvcm1kYXRhLWhhcy1leHBlY3RlZC50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9YTUxI
dHRwUmVxdWVzdC9mb3JtZGF0YS1oYXMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAyMjE4MjcpCisr
KyBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL1hNTEh0dHBSZXF1
ZXN0L2Zvcm1kYXRhLWhhcy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEsOCArMSw4
IEBACiAKLUZBSUwgdGVzdEZvcm1EYXRhSGFzIGNyZWF0ZV9mb3JtZGF0YShbJ2tleScsICd2YWx1
ZTEnXSwgWydrZXknLCAndmFsdWUyJ10pLmhhcyBpcyBub3QgYSBmdW5jdGlvbi4gKEluICdjcmVh
dGVfZm9ybWRhdGEoWydrZXknLCAndmFsdWUxJ10sIFsna2V5JywgJ3ZhbHVlMiddKS5oYXMoJ2tl
eScpJywgJ2NyZWF0ZV9mb3JtZGF0YShbJ2tleScsICd2YWx1ZTEnXSwgWydrZXknLCAndmFsdWUy
J10pLmhhcycgaXMgdW5kZWZpbmVkKQotRkFJTCB0ZXN0Rm9ybURhdGFIYXNGcm9tRm9ybSBuZXcg
Rm9ybURhdGEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Zvcm0nKSkuaGFzIGlzIG5vdCBhIGZ1
bmN0aW9uLiAoSW4gJ25ldyBGb3JtRGF0YShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZm9ybScp
KS5oYXMoJ2tleScpJywgJ25ldyBGb3JtRGF0YShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZm9y
bScpKS5oYXMnIGlzIHVuZGVmaW5lZCkKLUZBSUwgdGVzdEZvcm1EYXRhSGFzRnJvbUZvcm1OdWxs
IG5ldyBGb3JtRGF0YShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZm9ybScpKS5oYXMgaXMgbm90
IGEgZnVuY3Rpb24uIChJbiAnbmV3IEZvcm1EYXRhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdm
b3JtJykpLmhhcygnbmlsJyknLCAnbmV3IEZvcm1EYXRhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCdmb3JtJykpLmhhcycgaXMgdW5kZWZpbmVkKQotRkFJTCB0ZXN0Rm9ybURhdGFIYXNGcm9tRW1w
dHlGb3JtIG5ldyBGb3JtRGF0YShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZW1wdHktZm9ybScp
KS5oYXMgaXMgbm90IGEgZnVuY3Rpb24uIChJbiAnbmV3IEZvcm1EYXRhKGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCdlbXB0eS1mb3JtJykpLmhhcygna2V5JyknLCAnbmV3IEZvcm1EYXRhKGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCdlbXB0eS1mb3JtJykpLmhhcycgaXMgdW5kZWZpbmVkKQotRkFJ
TCB0ZXN0Rm9ybURhdGFIYXNFbXB0eTEgY3JlYXRlX2Zvcm1kYXRhKFsna2V5JywgJ3ZhbHVlMSdd
LCBbJ2tleScsICd2YWx1ZTInXSkuaGFzIGlzIG5vdCBhIGZ1bmN0aW9uLiAoSW4gJ2NyZWF0ZV9m
b3JtZGF0YShbJ2tleScsICd2YWx1ZTEnXSwgWydrZXknLCAndmFsdWUyJ10pLmhhcygnbmlsJykn
LCAnY3JlYXRlX2Zvcm1kYXRhKFsna2V5JywgJ3ZhbHVlMSddLCBbJ2tleScsICd2YWx1ZTInXSku
aGFzJyBpcyB1bmRlZmluZWQpCi1GQUlMIHRlc3RGb3JtRGF0YUhhc0VtcHR5MiBjcmVhdGVfZm9y
bWRhdGEoKS5oYXMgaXMgbm90IGEgZnVuY3Rpb24uIChJbiAnY3JlYXRlX2Zvcm1kYXRhKCkuaGFz
KCdrZXknKScsICdjcmVhdGVfZm9ybWRhdGEoKS5oYXMnIGlzIHVuZGVmaW5lZCkKK1BBU1MgdGVz
dEZvcm1EYXRhSGFzIAorUEFTUyB0ZXN0Rm9ybURhdGFIYXNGcm9tRm9ybSAKK1BBU1MgdGVzdEZv
cm1EYXRhSGFzRnJvbUZvcm1OdWxsIAorUEFTUyB0ZXN0Rm9ybURhdGFIYXNGcm9tRW1wdHlGb3Jt
IAorUEFTUyB0ZXN0Rm9ybURhdGFIYXNFbXB0eTEgCitQQVNTIHRlc3RGb3JtRGF0YUhhc0VtcHR5
MiAKIApJbmRleDogTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9Y
TUxIdHRwUmVxdWVzdC9mb3JtZGF0YS1zZXQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvWE1MSHR0cFJlcXVlc3Qv
Zm9ybWRhdGEtc2V0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMjIxODI3KQorKysgTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9YTUxIdHRwUmVxdWVzdC9mb3JtZGF0
YS1zZXQtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDE2ICsxLDE2IEBACiAKLUZB
SUwgUGFzc2luZyBhIFN0cmluZyBvYmplY3QgdG8gRm9ybURhdGEuc2V0IHNob3VsZCB3b3JrIGZk
LnNldCBpcyBub3QgYSBmdW5jdGlvbi4gKEluICdmZC5zZXQoIm5hbWUiLCBuZXcgU3RyaW5nKCJ2
YWx1ZSIpKScsICdmZC5zZXQnIGlzIHVuZGVmaW5lZCkKLUZBSUwgdGVzdEZvcm1EYXRhU2V0MSB1
bmRlZmluZWQgaXMgbm90IGFuIG9iamVjdCAoZXZhbHVhdGluZyAnZmQuc2V0LmFwcGx5JykKLUZB
SUwgdGVzdEZvcm1EYXRhU2V0MiB1bmRlZmluZWQgaXMgbm90IGFuIG9iamVjdCAoZXZhbHVhdGlu
ZyAnZmQuc2V0LmFwcGx5JykKLUZBSUwgdGVzdEZvcm1EYXRhU2V0VW5kZWZpbmVkMSB1bmRlZmlu
ZWQgaXMgbm90IGFuIG9iamVjdCAoZXZhbHVhdGluZyAnZmQuc2V0LmFwcGx5JykKLUZBSUwgdGVz
dEZvcm1EYXRhU2V0VW5kZWZpbmVkMiB1bmRlZmluZWQgaXMgbm90IGFuIG9iamVjdCAoZXZhbHVh
dGluZyAnZmQuc2V0LmFwcGx5JykKLUZBSUwgdGVzdEZvcm1EYXRhU2V0TnVsbDEgdW5kZWZpbmVk
IGlzIG5vdCBhbiBvYmplY3QgKGV2YWx1YXRpbmcgJ2ZkLnNldC5hcHBseScpCi1GQUlMIHRlc3RG
b3JtRGF0YVNldE51bGwyIHVuZGVmaW5lZCBpcyBub3QgYW4gb2JqZWN0IChldmFsdWF0aW5nICdm
ZC5zZXQuYXBwbHknKQotRkFJTCB0ZXN0Rm9ybURhdGFTZXRUb0Zvcm0xIGZkLnNldCBpcyBub3Qg
YSBmdW5jdGlvbi4gKEluICdmZC5zZXQoJ2tleScsICd2YWx1ZTEnKScsICdmZC5zZXQnIGlzIHVu
ZGVmaW5lZCkKLUZBSUwgdGVzdEZvcm1EYXRhU2V0VG9Gb3JtMiBmZC5zZXQgaXMgbm90IGEgZnVu
Y3Rpb24uIChJbiAnZmQuc2V0KCdrZXknLCAndmFsdWUyJyknLCAnZmQuc2V0JyBpcyB1bmRlZmlu
ZWQpCi1GQUlMIHRlc3RGb3JtRGF0YVNldFRvRm9ybVVuZGVmaW5lZDEgZmQuc2V0IGlzIG5vdCBh
IGZ1bmN0aW9uLiAoSW4gJ2ZkLnNldCgna2V5JywgdW5kZWZpbmVkKScsICdmZC5zZXQnIGlzIHVu
ZGVmaW5lZCkKLUZBSUwgdGVzdEZvcm1EYXRhU2V0VG9Gb3JtVW5kZWZpbmVkMiBmZC5zZXQgaXMg
bm90IGEgZnVuY3Rpb24uIChJbiAnZmQuc2V0KCdrZXknLCB1bmRlZmluZWQpJywgJ2ZkLnNldCcg
aXMgdW5kZWZpbmVkKQotRkFJTCB0ZXN0Rm9ybURhdGFTZXRUb0Zvcm1OdWxsMSBmZC5zZXQgaXMg
bm90IGEgZnVuY3Rpb24uIChJbiAnZmQuc2V0KCdrZXknLCBudWxsKScsICdmZC5zZXQnIGlzIHVu
ZGVmaW5lZCkKLUZBSUwgdGVzdEZvcm1EYXRhU2V0VG9Gb3JtTnVsbDIgZmQuc2V0IGlzIG5vdCBh
IGZ1bmN0aW9uLiAoSW4gJ2ZkLnNldCgna2V5JywgbnVsbCknLCAnZmQuc2V0JyBpcyB1bmRlZmlu
ZWQpCi1GQUlMIHRlc3RGb3JtRGF0YVNldEVtcHR5QmxvYiBmZC5zZXQgaXMgbm90IGEgZnVuY3Rp
b24uIChJbiAnZmQuc2V0KCdrZXknLCBuZXcgQmxvYihbXSksICdibGFuay50eHQnKScsICdmZC5z
ZXQnIGlzIHVuZGVmaW5lZCkKK1BBU1MgUGFzc2luZyBhIFN0cmluZyBvYmplY3QgdG8gRm9ybURh
dGEuc2V0IHNob3VsZCB3b3JrIAorUEFTUyB0ZXN0Rm9ybURhdGFTZXQxIAorUEFTUyB0ZXN0Rm9y
bURhdGFTZXQyIAorUEFTUyB0ZXN0Rm9ybURhdGFTZXRVbmRlZmluZWQxIAorUEFTUyB0ZXN0Rm9y
bURhdGFTZXRVbmRlZmluZWQyIAorUEFTUyB0ZXN0Rm9ybURhdGFTZXROdWxsMSAKK1BBU1MgdGVz
dEZvcm1EYXRhU2V0TnVsbDIgCitQQVNTIHRlc3RGb3JtRGF0YVNldFRvRm9ybTEgCitQQVNTIHRl
c3RGb3JtRGF0YVNldFRvRm9ybTIgCitQQVNTIHRlc3RGb3JtRGF0YVNldFRvRm9ybVVuZGVmaW5l
ZDEgCitQQVNTIHRlc3RGb3JtRGF0YVNldFRvRm9ybVVuZGVmaW5lZDIgCitQQVNTIHRlc3RGb3Jt
RGF0YVNldFRvRm9ybU51bGwxIAorUEFTUyB0ZXN0Rm9ybURhdGFTZXRUb0Zvcm1OdWxsMiAKK1BB
U1MgdGVzdEZvcm1EYXRhU2V0RW1wdHlCbG9iIAogCkluZGV4OiBMYXlvdXRUZXN0cy9pbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL1hNTEh0dHBSZXF1ZXN0L2ludGVyZmFjZXMtZXhwZWN0
ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvWE1MSHR0cFJlcXVlc3QvaW50ZXJmYWNlcy1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDIyMTgyNykKKysrIExheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
WE1MSHR0cFJlcXVlc3QvaW50ZXJmYWNlcy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAg
LTEwOCw0NCArMTA4LDQ0IEBAIFBBU1MgRm9ybURhdGEgaW50ZXJmYWNlOiBleGlzdGVuY2UgYW5k
IHAKIFBBU1MgRm9ybURhdGEgaW50ZXJmYWNlOiBleGlzdGVuY2UgYW5kIHByb3BlcnRpZXMgb2Yg
aW50ZXJmYWNlIHByb3RvdHlwZSBvYmplY3QncyAiY29uc3RydWN0b3IiIHByb3BlcnR5IAogUEFT
UyBGb3JtRGF0YSBpbnRlcmZhY2U6IG9wZXJhdGlvbiBhcHBlbmQoVVNWU3RyaW5nLEJsb2IsVVNW
U3RyaW5nKSAKIFBBU1MgRm9ybURhdGEgaW50ZXJmYWNlOiBvcGVyYXRpb24gYXBwZW5kKFVTVlN0
cmluZyxVU1ZTdHJpbmcpIAotRkFJTCBGb3JtRGF0YSBpbnRlcmZhY2U6IG9wZXJhdGlvbiBkZWxl
dGUoVVNWU3RyaW5nKSBhc3NlcnRfb3duX3Byb3BlcnR5OiBpbnRlcmZhY2UgcHJvdG90eXBlIG9i
amVjdCBtaXNzaW5nIG5vbi1zdGF0aWMgb3BlcmF0aW9uIGV4cGVjdGVkIHByb3BlcnR5ICJkZWxl
dGUiIG1pc3NpbmcKLUZBSUwgRm9ybURhdGEgaW50ZXJmYWNlOiBvcGVyYXRpb24gZ2V0KFVTVlN0
cmluZykgYXNzZXJ0X293bl9wcm9wZXJ0eTogaW50ZXJmYWNlIHByb3RvdHlwZSBvYmplY3QgbWlz
c2luZyBub24tc3RhdGljIG9wZXJhdGlvbiBleHBlY3RlZCBwcm9wZXJ0eSAiZ2V0IiBtaXNzaW5n
Ci1GQUlMIEZvcm1EYXRhIGludGVyZmFjZTogb3BlcmF0aW9uIGdldEFsbChVU1ZTdHJpbmcpIGFz
c2VydF9vd25fcHJvcGVydHk6IGludGVyZmFjZSBwcm90b3R5cGUgb2JqZWN0IG1pc3Npbmcgbm9u
LXN0YXRpYyBvcGVyYXRpb24gZXhwZWN0ZWQgcHJvcGVydHkgImdldEFsbCIgbWlzc2luZwotRkFJ
TCBGb3JtRGF0YSBpbnRlcmZhY2U6IG9wZXJhdGlvbiBoYXMoVVNWU3RyaW5nKSBhc3NlcnRfb3du
X3Byb3BlcnR5OiBpbnRlcmZhY2UgcHJvdG90eXBlIG9iamVjdCBtaXNzaW5nIG5vbi1zdGF0aWMg
b3BlcmF0aW9uIGV4cGVjdGVkIHByb3BlcnR5ICJoYXMiIG1pc3NpbmcKLUZBSUwgRm9ybURhdGEg
aW50ZXJmYWNlOiBvcGVyYXRpb24gc2V0KFVTVlN0cmluZyxCbG9iLFVTVlN0cmluZykgYXNzZXJ0
X293bl9wcm9wZXJ0eTogaW50ZXJmYWNlIHByb3RvdHlwZSBvYmplY3QgbWlzc2luZyBub24tc3Rh
dGljIG9wZXJhdGlvbiBleHBlY3RlZCBwcm9wZXJ0eSAic2V0IiBtaXNzaW5nCi1GQUlMIEZvcm1E
YXRhIGludGVyZmFjZTogb3BlcmF0aW9uIHNldChVU1ZTdHJpbmcsVVNWU3RyaW5nKSBhc3NlcnRf
b3duX3Byb3BlcnR5OiBpbnRlcmZhY2UgcHJvdG90eXBlIG9iamVjdCBtaXNzaW5nIG5vbi1zdGF0
aWMgb3BlcmF0aW9uIGV4cGVjdGVkIHByb3BlcnR5ICJzZXQiIG1pc3NpbmcKK1BBU1MgRm9ybURh
dGEgaW50ZXJmYWNlOiBvcGVyYXRpb24gZGVsZXRlKFVTVlN0cmluZykgCitQQVNTIEZvcm1EYXRh
IGludGVyZmFjZTogb3BlcmF0aW9uIGdldChVU1ZTdHJpbmcpIAorUEFTUyBGb3JtRGF0YSBpbnRl
cmZhY2U6IG9wZXJhdGlvbiBnZXRBbGwoVVNWU3RyaW5nKSAKK1BBU1MgRm9ybURhdGEgaW50ZXJm
YWNlOiBvcGVyYXRpb24gaGFzKFVTVlN0cmluZykgCitQQVNTIEZvcm1EYXRhIGludGVyZmFjZTog
b3BlcmF0aW9uIHNldChVU1ZTdHJpbmcsQmxvYixVU1ZTdHJpbmcpIAorUEFTUyBGb3JtRGF0YSBp
bnRlcmZhY2U6IG9wZXJhdGlvbiBzZXQoVVNWU3RyaW5nLFVTVlN0cmluZykgCiBQQVNTIEZvcm1E
YXRhIGludGVyZmFjZTogbmV3IEZvcm1EYXRhKCkgbXVzdCBpbmhlcml0IHByb3BlcnR5ICJhcHBl
bmQiIHdpdGggdGhlIHByb3BlciB0eXBlICgwKSAKIFBBU1MgRm9ybURhdGEgaW50ZXJmYWNlOiBj
YWxsaW5nIGFwcGVuZChVU1ZTdHJpbmcsQmxvYixVU1ZTdHJpbmcpIG9uIG5ldyBGb3JtRGF0YSgp
IHdpdGggdG9vIGZldyBhcmd1bWVudHMgbXVzdCB0aHJvdyBUeXBlRXJyb3IgCiBQQVNTIEZvcm1E
YXRhIGludGVyZmFjZTogbmV3IEZvcm1EYXRhKCkgbXVzdCBpbmhlcml0IHByb3BlcnR5ICJhcHBl
bmQiIHdpdGggdGhlIHByb3BlciB0eXBlICgxKSAKIFBBU1MgRm9ybURhdGEgaW50ZXJmYWNlOiBj
YWxsaW5nIGFwcGVuZChVU1ZTdHJpbmcsVVNWU3RyaW5nKSBvbiBuZXcgRm9ybURhdGEoKSB3aXRo
IHRvbyBmZXcgYXJndW1lbnRzIG11c3QgdGhyb3cgVHlwZUVycm9yIAotRkFJTCBGb3JtRGF0YSBp
bnRlcmZhY2U6IG5ldyBGb3JtRGF0YSgpIG11c3QgaW5oZXJpdCBwcm9wZXJ0eSAiZGVsZXRlIiB3
aXRoIHRoZSBwcm9wZXIgdHlwZSAoMikgYXNzZXJ0X2luaGVyaXRzOiBwcm9wZXJ0eSAiZGVsZXRl
IiBub3QgZm91bmQgaW4gcHJvdG90eXBlIGNoYWluCi1GQUlMIEZvcm1EYXRhIGludGVyZmFjZTog
Y2FsbGluZyBkZWxldGUoVVNWU3RyaW5nKSBvbiBuZXcgRm9ybURhdGEoKSB3aXRoIHRvbyBmZXcg
YXJndW1lbnRzIG11c3QgdGhyb3cgVHlwZUVycm9yIGFzc2VydF9pbmhlcml0czogcHJvcGVydHkg
ImRlbGV0ZSIgbm90IGZvdW5kIGluIHByb3RvdHlwZSBjaGFpbgotRkFJTCBGb3JtRGF0YSBpbnRl
cmZhY2U6IG5ldyBGb3JtRGF0YSgpIG11c3QgaW5oZXJpdCBwcm9wZXJ0eSAiZ2V0IiB3aXRoIHRo
ZSBwcm9wZXIgdHlwZSAoMykgYXNzZXJ0X2luaGVyaXRzOiBwcm9wZXJ0eSAiZ2V0IiBub3QgZm91
bmQgaW4gcHJvdG90eXBlIGNoYWluCi1GQUlMIEZvcm1EYXRhIGludGVyZmFjZTogY2FsbGluZyBn
ZXQoVVNWU3RyaW5nKSBvbiBuZXcgRm9ybURhdGEoKSB3aXRoIHRvbyBmZXcgYXJndW1lbnRzIG11
c3QgdGhyb3cgVHlwZUVycm9yIGFzc2VydF9pbmhlcml0czogcHJvcGVydHkgImdldCIgbm90IGZv
dW5kIGluIHByb3RvdHlwZSBjaGFpbgotRkFJTCBGb3JtRGF0YSBpbnRlcmZhY2U6IG5ldyBGb3Jt
RGF0YSgpIG11c3QgaW5oZXJpdCBwcm9wZXJ0eSAiZ2V0QWxsIiB3aXRoIHRoZSBwcm9wZXIgdHlw
ZSAoNCkgYXNzZXJ0X2luaGVyaXRzOiBwcm9wZXJ0eSAiZ2V0QWxsIiBub3QgZm91bmQgaW4gcHJv
dG90eXBlIGNoYWluCi1GQUlMIEZvcm1EYXRhIGludGVyZmFjZTogY2FsbGluZyBnZXRBbGwoVVNW
U3RyaW5nKSBvbiBuZXcgRm9ybURhdGEoKSB3aXRoIHRvbyBmZXcgYXJndW1lbnRzIG11c3QgdGhy
b3cgVHlwZUVycm9yIGFzc2VydF9pbmhlcml0czogcHJvcGVydHkgImdldEFsbCIgbm90IGZvdW5k
IGluIHByb3RvdHlwZSBjaGFpbgotRkFJTCBGb3JtRGF0YSBpbnRlcmZhY2U6IG5ldyBGb3JtRGF0
YSgpIG11c3QgaW5oZXJpdCBwcm9wZXJ0eSAiaGFzIiB3aXRoIHRoZSBwcm9wZXIgdHlwZSAoNSkg
YXNzZXJ0X2luaGVyaXRzOiBwcm9wZXJ0eSAiaGFzIiBub3QgZm91bmQgaW4gcHJvdG90eXBlIGNo
YWluCi1GQUlMIEZvcm1EYXRhIGludGVyZmFjZTogY2FsbGluZyBoYXMoVVNWU3RyaW5nKSBvbiBu
ZXcgRm9ybURhdGEoKSB3aXRoIHRvbyBmZXcgYXJndW1lbnRzIG11c3QgdGhyb3cgVHlwZUVycm9y
IGFzc2VydF9pbmhlcml0czogcHJvcGVydHkgImhhcyIgbm90IGZvdW5kIGluIHByb3RvdHlwZSBj
aGFpbgotRkFJTCBGb3JtRGF0YSBpbnRlcmZhY2U6IG5ldyBGb3JtRGF0YSgpIG11c3QgaW5oZXJp
dCBwcm9wZXJ0eSAic2V0IiB3aXRoIHRoZSBwcm9wZXIgdHlwZSAoNikgYXNzZXJ0X2luaGVyaXRz
OiBwcm9wZXJ0eSAic2V0IiBub3QgZm91bmQgaW4gcHJvdG90eXBlIGNoYWluCi1GQUlMIEZvcm1E
YXRhIGludGVyZmFjZTogY2FsbGluZyBzZXQoVVNWU3RyaW5nLEJsb2IsVVNWU3RyaW5nKSBvbiBu
ZXcgRm9ybURhdGEoKSB3aXRoIHRvbyBmZXcgYXJndW1lbnRzIG11c3QgdGhyb3cgVHlwZUVycm9y
IGFzc2VydF9pbmhlcml0czogcHJvcGVydHkgInNldCIgbm90IGZvdW5kIGluIHByb3RvdHlwZSBj
aGFpbgotRkFJTCBGb3JtRGF0YSBpbnRlcmZhY2U6IG5ldyBGb3JtRGF0YSgpIG11c3QgaW5oZXJp
dCBwcm9wZXJ0eSAic2V0IiB3aXRoIHRoZSBwcm9wZXIgdHlwZSAoNykgYXNzZXJ0X2luaGVyaXRz
OiBwcm9wZXJ0eSAic2V0IiBub3QgZm91bmQgaW4gcHJvdG90eXBlIGNoYWluCi1GQUlMIEZvcm1E
YXRhIGludGVyZmFjZTogY2FsbGluZyBzZXQoVVNWU3RyaW5nLFVTVlN0cmluZykgb24gbmV3IEZv
cm1EYXRhKCkgd2l0aCB0b28gZmV3IGFyZ3VtZW50cyBtdXN0IHRocm93IFR5cGVFcnJvciBhc3Nl
cnRfaW5oZXJpdHM6IHByb3BlcnR5ICJzZXQiIG5vdCBmb3VuZCBpbiBwcm90b3R5cGUgY2hhaW4K
K1BBU1MgRm9ybURhdGEgaW50ZXJmYWNlOiBuZXcgRm9ybURhdGEoKSBtdXN0IGluaGVyaXQgcHJv
cGVydHkgImRlbGV0ZSIgd2l0aCB0aGUgcHJvcGVyIHR5cGUgKDIpIAorUEFTUyBGb3JtRGF0YSBp
bnRlcmZhY2U6IGNhbGxpbmcgZGVsZXRlKFVTVlN0cmluZykgb24gbmV3IEZvcm1EYXRhKCkgd2l0
aCB0b28gZmV3IGFyZ3VtZW50cyBtdXN0IHRocm93IFR5cGVFcnJvciAKK1BBU1MgRm9ybURhdGEg
aW50ZXJmYWNlOiBuZXcgRm9ybURhdGEoKSBtdXN0IGluaGVyaXQgcHJvcGVydHkgImdldCIgd2l0
aCB0aGUgcHJvcGVyIHR5cGUgKDMpIAorUEFTUyBGb3JtRGF0YSBpbnRlcmZhY2U6IGNhbGxpbmcg
Z2V0KFVTVlN0cmluZykgb24gbmV3IEZvcm1EYXRhKCkgd2l0aCB0b28gZmV3IGFyZ3VtZW50cyBt
dXN0IHRocm93IFR5cGVFcnJvciAKK1BBU1MgRm9ybURhdGEgaW50ZXJmYWNlOiBuZXcgRm9ybURh
dGEoKSBtdXN0IGluaGVyaXQgcHJvcGVydHkgImdldEFsbCIgd2l0aCB0aGUgcHJvcGVyIHR5cGUg
KDQpIAorUEFTUyBGb3JtRGF0YSBpbnRlcmZhY2U6IGNhbGxpbmcgZ2V0QWxsKFVTVlN0cmluZykg
b24gbmV3IEZvcm1EYXRhKCkgd2l0aCB0b28gZmV3IGFyZ3VtZW50cyBtdXN0IHRocm93IFR5cGVF
cnJvciAKK1BBU1MgRm9ybURhdGEgaW50ZXJmYWNlOiBuZXcgRm9ybURhdGEoKSBtdXN0IGluaGVy
aXQgcHJvcGVydHkgImhhcyIgd2l0aCB0aGUgcHJvcGVyIHR5cGUgKDUpIAorUEFTUyBGb3JtRGF0
YSBpbnRlcmZhY2U6IGNhbGxpbmcgaGFzKFVTVlN0cmluZykgb24gbmV3IEZvcm1EYXRhKCkgd2l0
aCB0b28gZmV3IGFyZ3VtZW50cyBtdXN0IHRocm93IFR5cGVFcnJvciAKK1BBU1MgRm9ybURhdGEg
aW50ZXJmYWNlOiBuZXcgRm9ybURhdGEoKSBtdXN0IGluaGVyaXQgcHJvcGVydHkgInNldCIgd2l0
aCB0aGUgcHJvcGVyIHR5cGUgKDYpIAorUEFTUyBGb3JtRGF0YSBpbnRlcmZhY2U6IGNhbGxpbmcg
c2V0KFVTVlN0cmluZyxCbG9iLFVTVlN0cmluZykgb24gbmV3IEZvcm1EYXRhKCkgd2l0aCB0b28g
ZmV3IGFyZ3VtZW50cyBtdXN0IHRocm93IFR5cGVFcnJvciAKK1BBU1MgRm9ybURhdGEgaW50ZXJm
YWNlOiBuZXcgRm9ybURhdGEoKSBtdXN0IGluaGVyaXQgcHJvcGVydHkgInNldCIgd2l0aCB0aGUg
cHJvcGVyIHR5cGUgKDcpIAorUEFTUyBGb3JtRGF0YSBpbnRlcmZhY2U6IGNhbGxpbmcgc2V0KFVT
VlN0cmluZyxVU1ZTdHJpbmcpIG9uIG5ldyBGb3JtRGF0YSgpIHdpdGggdG9vIGZldyBhcmd1bWVu
dHMgbXVzdCB0aHJvdyBUeXBlRXJyb3IgCiBQQVNTIEZvcm1EYXRhIGludGVyZmFjZTogbmV3IEZv
cm1EYXRhKGZvcm0pIG11c3QgaW5oZXJpdCBwcm9wZXJ0eSAiYXBwZW5kIiB3aXRoIHRoZSBwcm9w
ZXIgdHlwZSAoMCkgCiBQQVNTIEZvcm1EYXRhIGludGVyZmFjZTogY2FsbGluZyBhcHBlbmQoVVNW
U3RyaW5nLEJsb2IsVVNWU3RyaW5nKSBvbiBuZXcgRm9ybURhdGEoZm9ybSkgd2l0aCB0b28gZmV3
IGFyZ3VtZW50cyBtdXN0IHRocm93IFR5cGVFcnJvciAKIFBBU1MgRm9ybURhdGEgaW50ZXJmYWNl
OiBuZXcgRm9ybURhdGEoZm9ybSkgbXVzdCBpbmhlcml0IHByb3BlcnR5ICJhcHBlbmQiIHdpdGgg
dGhlIHByb3BlciB0eXBlICgxKSAKIFBBU1MgRm9ybURhdGEgaW50ZXJmYWNlOiBjYWxsaW5nIGFw
cGVuZChVU1ZTdHJpbmcsVVNWU3RyaW5nKSBvbiBuZXcgRm9ybURhdGEoZm9ybSkgd2l0aCB0b28g
ZmV3IGFyZ3VtZW50cyBtdXN0IHRocm93IFR5cGVFcnJvciAKLUZBSUwgRm9ybURhdGEgaW50ZXJm
YWNlOiBuZXcgRm9ybURhdGEoZm9ybSkgbXVzdCBpbmhlcml0IHByb3BlcnR5ICJkZWxldGUiIHdp
dGggdGhlIHByb3BlciB0eXBlICgyKSBhc3NlcnRfaW5oZXJpdHM6IHByb3BlcnR5ICJkZWxldGUi
IG5vdCBmb3VuZCBpbiBwcm90b3R5cGUgY2hhaW4KLUZBSUwgRm9ybURhdGEgaW50ZXJmYWNlOiBj
YWxsaW5nIGRlbGV0ZShVU1ZTdHJpbmcpIG9uIG5ldyBGb3JtRGF0YShmb3JtKSB3aXRoIHRvbyBm
ZXcgYXJndW1lbnRzIG11c3QgdGhyb3cgVHlwZUVycm9yIGFzc2VydF9pbmhlcml0czogcHJvcGVy
dHkgImRlbGV0ZSIgbm90IGZvdW5kIGluIHByb3RvdHlwZSBjaGFpbgotRkFJTCBGb3JtRGF0YSBp
bnRlcmZhY2U6IG5ldyBGb3JtRGF0YShmb3JtKSBtdXN0IGluaGVyaXQgcHJvcGVydHkgImdldCIg
d2l0aCB0aGUgcHJvcGVyIHR5cGUgKDMpIGFzc2VydF9pbmhlcml0czogcHJvcGVydHkgImdldCIg
bm90IGZvdW5kIGluIHByb3RvdHlwZSBjaGFpbgotRkFJTCBGb3JtRGF0YSBpbnRlcmZhY2U6IGNh
bGxpbmcgZ2V0KFVTVlN0cmluZykgb24gbmV3IEZvcm1EYXRhKGZvcm0pIHdpdGggdG9vIGZldyBh
cmd1bWVudHMgbXVzdCB0aHJvdyBUeXBlRXJyb3IgYXNzZXJ0X2luaGVyaXRzOiBwcm9wZXJ0eSAi
Z2V0IiBub3QgZm91bmQgaW4gcHJvdG90eXBlIGNoYWluCi1GQUlMIEZvcm1EYXRhIGludGVyZmFj
ZTogbmV3IEZvcm1EYXRhKGZvcm0pIG11c3QgaW5oZXJpdCBwcm9wZXJ0eSAiZ2V0QWxsIiB3aXRo
IHRoZSBwcm9wZXIgdHlwZSAoNCkgYXNzZXJ0X2luaGVyaXRzOiBwcm9wZXJ0eSAiZ2V0QWxsIiBu
b3QgZm91bmQgaW4gcHJvdG90eXBlIGNoYWluCi1GQUlMIEZvcm1EYXRhIGludGVyZmFjZTogY2Fs
bGluZyBnZXRBbGwoVVNWU3RyaW5nKSBvbiBuZXcgRm9ybURhdGEoZm9ybSkgd2l0aCB0b28gZmV3
IGFyZ3VtZW50cyBtdXN0IHRocm93IFR5cGVFcnJvciBhc3NlcnRfaW5oZXJpdHM6IHByb3BlcnR5
ICJnZXRBbGwiIG5vdCBmb3VuZCBpbiBwcm90b3R5cGUgY2hhaW4KLUZBSUwgRm9ybURhdGEgaW50
ZXJmYWNlOiBuZXcgRm9ybURhdGEoZm9ybSkgbXVzdCBpbmhlcml0IHByb3BlcnR5ICJoYXMiIHdp
dGggdGhlIHByb3BlciB0eXBlICg1KSBhc3NlcnRfaW5oZXJpdHM6IHByb3BlcnR5ICJoYXMiIG5v
dCBmb3VuZCBpbiBwcm90b3R5cGUgY2hhaW4KLUZBSUwgRm9ybURhdGEgaW50ZXJmYWNlOiBjYWxs
aW5nIGhhcyhVU1ZTdHJpbmcpIG9uIG5ldyBGb3JtRGF0YShmb3JtKSB3aXRoIHRvbyBmZXcgYXJn
dW1lbnRzIG11c3QgdGhyb3cgVHlwZUVycm9yIGFzc2VydF9pbmhlcml0czogcHJvcGVydHkgImhh
cyIgbm90IGZvdW5kIGluIHByb3RvdHlwZSBjaGFpbgotRkFJTCBGb3JtRGF0YSBpbnRlcmZhY2U6
IG5ldyBGb3JtRGF0YShmb3JtKSBtdXN0IGluaGVyaXQgcHJvcGVydHkgInNldCIgd2l0aCB0aGUg
cHJvcGVyIHR5cGUgKDYpIGFzc2VydF9pbmhlcml0czogcHJvcGVydHkgInNldCIgbm90IGZvdW5k
IGluIHByb3RvdHlwZSBjaGFpbgotRkFJTCBGb3JtRGF0YSBpbnRlcmZhY2U6IGNhbGxpbmcgc2V0
KFVTVlN0cmluZyxCbG9iLFVTVlN0cmluZykgb24gbmV3IEZvcm1EYXRhKGZvcm0pIHdpdGggdG9v
IGZldyBhcmd1bWVudHMgbXVzdCB0aHJvdyBUeXBlRXJyb3IgYXNzZXJ0X2luaGVyaXRzOiBwcm9w
ZXJ0eSAic2V0IiBub3QgZm91bmQgaW4gcHJvdG90eXBlIGNoYWluCi1GQUlMIEZvcm1EYXRhIGlu
dGVyZmFjZTogbmV3IEZvcm1EYXRhKGZvcm0pIG11c3QgaW5oZXJpdCBwcm9wZXJ0eSAic2V0IiB3
aXRoIHRoZSBwcm9wZXIgdHlwZSAoNykgYXNzZXJ0X2luaGVyaXRzOiBwcm9wZXJ0eSAic2V0IiBu
b3QgZm91bmQgaW4gcHJvdG90eXBlIGNoYWluCi1GQUlMIEZvcm1EYXRhIGludGVyZmFjZTogY2Fs
bGluZyBzZXQoVVNWU3RyaW5nLFVTVlN0cmluZykgb24gbmV3IEZvcm1EYXRhKGZvcm0pIHdpdGgg
dG9vIGZldyBhcmd1bWVudHMgbXVzdCB0aHJvdyBUeXBlRXJyb3IgYXNzZXJ0X2luaGVyaXRzOiBw
cm9wZXJ0eSAic2V0IiBub3QgZm91bmQgaW4gcHJvdG90eXBlIGNoYWluCitQQVNTIEZvcm1EYXRh
IGludGVyZmFjZTogbmV3IEZvcm1EYXRhKGZvcm0pIG11c3QgaW5oZXJpdCBwcm9wZXJ0eSAiZGVs
ZXRlIiB3aXRoIHRoZSBwcm9wZXIgdHlwZSAoMikgCitQQVNTIEZvcm1EYXRhIGludGVyZmFjZTog
Y2FsbGluZyBkZWxldGUoVVNWU3RyaW5nKSBvbiBuZXcgRm9ybURhdGEoZm9ybSkgd2l0aCB0b28g
ZmV3IGFyZ3VtZW50cyBtdXN0IHRocm93IFR5cGVFcnJvciAKK1BBU1MgRm9ybURhdGEgaW50ZXJm
YWNlOiBuZXcgRm9ybURhdGEoZm9ybSkgbXVzdCBpbmhlcml0IHByb3BlcnR5ICJnZXQiIHdpdGgg
dGhlIHByb3BlciB0eXBlICgzKSAKK1BBU1MgRm9ybURhdGEgaW50ZXJmYWNlOiBjYWxsaW5nIGdl
dChVU1ZTdHJpbmcpIG9uIG5ldyBGb3JtRGF0YShmb3JtKSB3aXRoIHRvbyBmZXcgYXJndW1lbnRz
IG11c3QgdGhyb3cgVHlwZUVycm9yIAorUEFTUyBGb3JtRGF0YSBpbnRlcmZhY2U6IG5ldyBGb3Jt
RGF0YShmb3JtKSBtdXN0IGluaGVyaXQgcHJvcGVydHkgImdldEFsbCIgd2l0aCB0aGUgcHJvcGVy
IHR5cGUgKDQpIAorUEFTUyBGb3JtRGF0YSBpbnRlcmZhY2U6IGNhbGxpbmcgZ2V0QWxsKFVTVlN0
cmluZykgb24gbmV3IEZvcm1EYXRhKGZvcm0pIHdpdGggdG9vIGZldyBhcmd1bWVudHMgbXVzdCB0
aHJvdyBUeXBlRXJyb3IgCitQQVNTIEZvcm1EYXRhIGludGVyZmFjZTogbmV3IEZvcm1EYXRhKGZv
cm0pIG11c3QgaW5oZXJpdCBwcm9wZXJ0eSAiaGFzIiB3aXRoIHRoZSBwcm9wZXIgdHlwZSAoNSkg
CitQQVNTIEZvcm1EYXRhIGludGVyZmFjZTogY2FsbGluZyBoYXMoVVNWU3RyaW5nKSBvbiBuZXcg
Rm9ybURhdGEoZm9ybSkgd2l0aCB0b28gZmV3IGFyZ3VtZW50cyBtdXN0IHRocm93IFR5cGVFcnJv
ciAKK1BBU1MgRm9ybURhdGEgaW50ZXJmYWNlOiBuZXcgRm9ybURhdGEoZm9ybSkgbXVzdCBpbmhl
cml0IHByb3BlcnR5ICJzZXQiIHdpdGggdGhlIHByb3BlciB0eXBlICg2KSAKK1BBU1MgRm9ybURh
dGEgaW50ZXJmYWNlOiBjYWxsaW5nIHNldChVU1ZTdHJpbmcsQmxvYixVU1ZTdHJpbmcpIG9uIG5l
dyBGb3JtRGF0YShmb3JtKSB3aXRoIHRvbyBmZXcgYXJndW1lbnRzIG11c3QgdGhyb3cgVHlwZUVy
cm9yIAorUEFTUyBGb3JtRGF0YSBpbnRlcmZhY2U6IG5ldyBGb3JtRGF0YShmb3JtKSBtdXN0IGlu
aGVyaXQgcHJvcGVydHkgInNldCIgd2l0aCB0aGUgcHJvcGVyIHR5cGUgKDcpIAorUEFTUyBGb3Jt
RGF0YSBpbnRlcmZhY2U6IGNhbGxpbmcgc2V0KFVTVlN0cmluZyxVU1ZTdHJpbmcpIG9uIG5ldyBG
b3JtRGF0YShmb3JtKSB3aXRoIHRvbyBmZXcgYXJndW1lbnRzIG11c3QgdGhyb3cgVHlwZUVycm9y
IAogUEFTUyBQcm9ncmVzc0V2ZW50IGludGVyZmFjZTogZXhpc3RlbmNlIGFuZCBwcm9wZXJ0aWVz
IG9mIGludGVyZmFjZSBvYmplY3QgCiBQQVNTIFByb2dyZXNzRXZlbnQgaW50ZXJmYWNlIG9iamVj
dCBsZW5ndGggCiBQQVNTIFByb2dyZXNzRXZlbnQgaW50ZXJmYWNlIG9iamVjdCBuYW1lIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>320370</attachid>
            <date>2017-09-09 18:19:53 -0700</date>
            <delta_ts>2017-09-10 14:43:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-176659-20170909181953.patch</filename>
            <type>text/plain</type>
            <size>56778</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMTgzMikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg2IEBACisyMDE3LTA5LTA5ICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgRmluaXNoIG9mZiB0aGUgRm9ybURhdGEg
aW1wbGVtZW50YXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE3NjY1OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogZmlsZWFwaS9CbG9iLmNwcDoKKyAgICAgICAgKiBmaWxlYXBpL0Jsb2IuaDoKKyAg
ICAgICAgKiBmaWxlYXBpL0ZpbGUuY3BwOgorICAgICAgICAqIGZpbGVhcGkvRmlsZS5oOgorCisg
ICAgICAgICAgICBBZGQgY29uc3RydWN0b3JzIC8gY3JlYXRlIGZ1bmN0aW9ucyBmb3IgbWFraW5n
IEZpbGUgb2JqZWN0cworICAgICAgICAgICAgZnJvbSBhbiBleGlzdGluZyBCbG9iIG9yIEZpbGUg
d2l0aCBhbiBvdmVycmlkZSBuYW1lLgorCisgICAgICAgICogaHRtbC9ET01Gb3JtRGF0YS5jcHA6
CisgICAgICAgICogaHRtbC9ET01Gb3JtRGF0YS5oOgorCisgICAgICAgICAgICBBZGQgbWlzc2lu
ZyBvcGVyYXRpb25zIGFuZCBpdGVyYXRvciBpbXBsZW1lbnRhdGlvbgorICAgICAgICAgICAgYW5k
IGJyaW5nIGFwcGVuZCB1cCB0byBzcGVjIGJ5IG5vIGlnbm9yaW5nIGVtcHR5IG5hbWVzLgorCisg
ICAgICAgICogaHRtbC9ET01Gb3JtRGF0YS5pZGw6CisKKyAgICAgICAgICAgIEJyaW5nIElETCB1
cCB0byBzcGVjLiBMZWF2ZSBpdHMgZXhwb3N1cmUgdG8ganVzdCB0aGUgd2luZG93IGZvcgorICAg
ICAgICAgICAgbm93LCBhcyBGb3JtRGF0YSBjdXJyZW50bHkgZGVwZW5kcyBvbiB0aGUgRG9jdW1l
bnQvUGFnZSBmb3IgcmVwbGFjZQorICAgICAgICAgICAgZmlsZSBnZW5lcmF0aW9uIGFuZCB0aGVy
ZWZvcmUgY2Fubm90IG9wZXJhdGUgaW4gYSB3b3JrZXIuCisKKyAgICAgICAgKiBodG1sL0Zvcm1E
YXRhTGlzdC5jcHA6CisgICAgICAgICogaHRtbC9Gb3JtRGF0YUxpc3QuaDoKKworICAgICAgICAg
ICAgQ2hhbmdlcyBGb3JtRGF0YUxpc3Q6Okl0ZW0gdG8gYSBTdHJpbmcga2V5IGFuZCBWYXJpYW50
PFJlZlB0cjxGaWxlPiwgU3RyaW5nPgorICAgICAgICAgICAgZGF0YSwgbWF0Y2hpbmcgc3BlYyBj
b25jZXB0cyBtb3JlIGNsZWFubHkuIE5vcm1hbGl6YXRpb24gLyBlbmNvZGluZyBoYXMgYWxzbwor
ICAgICAgICAgICAgYmVlbiBtYWRlIGxhenksIGFuZCBub3cgZG9lcyBub3QgaGFwcGVuIHVudGls
IGNyZWF0aW5nIGEgRm9ybURhdGEgZnJvbSB0aGUKKyAgICAgICAgICAgIEZvcm1EYXRhTGlzdC4K
KworICAgICAgICAgICAgU2luY2Ugd2Ugbm93IHN0b3JlIEZpbGVzLCByYXRoZXIgdGhhbiBCbG9i
cywgd2UgZm9sbG93IHRoZSBzcGVjJ3MgJ2NyZWF0ZSBhbiAKKyAgICAgICAgICAgIGVudHJ5JyBh
bGdvcml0aG0gdG8gY29udmVydCBCbG9icyBpbnRvIEZpbGVzIHdpdGggdGhlIHNhbWUgYmFja2lu
ZyBieXRlcy4gVGhpcworICAgICAgICAgICAgd2FzIHByZXZpb3VzbHkgZG9uZSBhcyBwYXJ0IG9m
IEZvcm1EYXRhOjphcHBlbmRLZXlWYWx1ZVBhaXJJdGVtcy4KKworICAgICAgICAqIGh0bWwvSFRN
TEtleWdlbkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEtleWdlbkVsZW1lbnQ6
OmFwcGVuZEZvcm1EYXRhKToKKworICAgICAgICAgICAgUmVtb3ZlIHVubmVjZXNzYXJ5IGNvbnZl
cnNpb24gdG8gdXRmOCwgdGhlIGRhdGEgaXMgYmFzZTY0IGVuY29kZWQsIGFsbG93aW5nCisgICAg
ICAgICAgICB1cyB0byByZW1vdmUgYW4gb3ZlcmxvYWQgb2YgYXBwZW5kRGF0YSB0aGF0IHRvb2sg
YSBDU3RyaW5nLgorCisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvck5ldHdvcmtBZ2VudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpidWlsZE9iamVjdEZvclJlc291cmNlUmVxdWVzdCk6CisK
KyAgICAgICAgICAgIFVwZGF0ZSBmb3IgbmV3IHNpZ25hdHVyZSBvZiBGb3JtRGF0YTo6ZmxhdHRl
bigpIHdoaWNoIG5vdworICAgICAgICAgICAgcmV0dXJucyBhIFZlY3RvciwgcmF0aGVyIHRoYW4g
dGFrZXMgb25lIGluLgorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5oOgor
ICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Rm9ybURhdGE6OkZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhOjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGE6OmNyZWF0ZU11bHRpUGFydCk6CisgICAg
ICAgIAorICAgICAgICAgICAgQ2xlYW51cCByZWR1bmRhbmN5IGJ5IHVzaW5nIGF1dG8uCisgICAg
ICAgIAorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGE6OmFwcGVuZEtleVZhbHVlUGFpckl0ZW1z
KToKKyAgICAgICAgCisgICAgICAgICAgICBVcGRhdGVkIHRvIGhhbmRsZSBuZXcgRm9ybURhdGFM
aXN0IGl0ZW0gZm9ybWF0IChlLmcuIHBhaXJzIG9mIGtleSAvIGRhdGEpIGFsbG93aW5nCisgICAg
ICAgICAgICB1cyB0byByZW1vdmUgdHdvLWJ5LXR3byBpdGVyYXRpb24uIFNvbWUgY29tcGxleGl0
eSB3YXMgcmVtb3ZlZCBhcm91bmQgQmxvYnMsIGFzCisgICAgICAgICAgICBGb3JtRGF0YUxpc3Qg
bm93IGFsd2F5cyBjcmVhdGVzIEZpbGUuIAorCisgICAgICAgICAgICBTaW5jZSBGb3JtRGF0YUxp
c3Qgbm8gbG9uZ2VyIGVhZ2VybHkgZW5jb2RlcyAvIG5vcm1hbGl6ZXMgdGhlIGtleXMgYW5kIHN0
cmluZyBkYXRhCisgICAgICAgICAgICB2YWx1ZXMsIHdlIG5vdyBwZXJmb3JtIHRob3NlIG9wZXJh
dGlvbnMgaGVyZS4KKyAgICAgICAgCisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YTo6ZXhwYW5k
RGF0YVN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OmFwcGVuZEJsb2JSZXNvbHZlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpGb3JtRGF0YTo6cmVzb2x2ZUJsb2JSZWZlcmVuY2VzKToKKyAgICAgICAg
KFdlYkNvcmU6OkZvcm1EYXRhOjpnZW5lcmF0ZUZpbGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkZv
cm1EYXRhOjpoYXNHZW5lcmF0ZWRGaWxlcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb3Jt
RGF0YTo6aGFzT3duZWRHZW5lcmF0ZWRGaWxlcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpG
b3JtRGF0YTo6cmVtb3ZlR2VuZXJhdGVkRmlsZXNJZk5lZWRlZCk6CisKKyAgICAgICAgICAgIEFk
b3B0IGF1dG8gYW5kIG1vZGVybiBmb3ItaW4gbG9vcHMuCisKKyAgICAgICAgKFdlYkNvcmU6OkZv
cm1EYXRhOjpmbGF0dGVuIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhOjpmbGF0
dGVuVG9TdHJpbmcgY29uc3QpOgorCisgICAgICAgICAgICBVcGRhdGUgZmxhdHRlbiB0byByZXR1
cm4gYSBWZWN0b3IsIHJhdGhlciB0aGFuIHRha2UgaXQgaW4uCisKIDIwMTctMDktMDggIERlYW4g
SmFja3NvbiAgPGRpbm9AYXBwbGUuY29tPgogCiAgICAgICAgIGdsLmRldGFjaFNoYWRlciBicmVh
a3Mgc2hhZGVyIHByb2dyYW0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQmxvYi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9iLmNwcAkocmV2aXNpb24g
MjIxODI3KQorKysgU291cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9iLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzksNiArNzksMTQgQEAgQmxvYjo6QmxvYigpCiAgICAgVGhyZWFkYWJsZUJsb2JSZWdp
c3RyeTo6cmVnaXN0ZXJCbG9iVVJMKG1faW50ZXJuYWxVUkwsIHsgfSwgIHsgfSk7CiB9CiAKK0Js
b2I6OkJsb2IoY29uc3QgQmxvYiYgYmxvYikKKyAgICA6IG1faW50ZXJuYWxVUkwoQmxvYlVSTDo6
Y3JlYXRlSW50ZXJuYWxVUkwoKSkKKyAgICAsIG1fdHlwZShibG9iLnR5cGUoKSkKKyAgICAsIG1f
c2l6ZShibG9iLnNpemUoKSkKK3sKKyAgICBUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5OjpyZWdpc3Rl
ckJsb2JVUkwobV9pbnRlcm5hbFVSTCwgeyBCbG9iUGFydChibG9iLnVybCgpKSB9ICwgbV90eXBl
KTsKK30KKwogQmxvYjo6QmxvYihWZWN0b3I8QmxvYlBhcnRWYXJpYW50PiYmIGJsb2JQYXJ0VmFy
aWFudHMsIGNvbnN0IEJsb2JQcm9wZXJ0eUJhZyYgcHJvcGVydHlCYWcpCiAgICAgOiBtX2ludGVy
bmFsVVJMKEJsb2JVUkw6OmNyZWF0ZUludGVybmFsVVJMKCkpCiAgICAgLCBtX3R5cGUobm9ybWFs
aXplZENvbnRlbnRUeXBlKHByb3BlcnR5QmFnLnR5cGUpKQpJbmRleDogU291cmNlL1dlYkNvcmUv
ZmlsZWFwaS9CbG9iLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9i
LmgJKHJldmlzaW9uIDIyMTgyNykKKysrIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQmxvYi5oCSh3
b3JraW5nIGNvcHkpCkBAIC05OCw2ICs5OCw3IEBAIHB1YmxpYzoKIAogcHJvdGVjdGVkOgogICAg
IEJsb2IoKTsKKyAgICBCbG9iKGNvbnN0IEJsb2ImKTsKICAgICBCbG9iKFZlY3RvcjxCbG9iUGFy
dFZhcmlhbnQ+JiYsIGNvbnN0IEJsb2JQcm9wZXJ0eUJhZyYpOwogICAgIEJsb2IoVmVjdG9yPHVp
bnQ4X3Q+JiYsIGNvbnN0IFN0cmluZyYgY29udGVudFR5cGUpOwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9maWxlYXBpL0ZpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2ZpbGVh
cGkvRmlsZS5jcHAJKHJldmlzaW9uIDIyMTgyNykKKysrIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkv
RmlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1LDYgKzg1LDIzIEBAIEZpbGU6OkZpbGUoVmVj
dG9yPEJsb2JQYXJ0VmFyaWFudD4mJiBibG8KIHsKIH0KIAorRmlsZTo6RmlsZShjb25zdCBCbG9i
JiBibG9iLCBjb25zdCBTdHJpbmcmIG5hbWUpCisgICAgOiBCbG9iKGJsb2IpCisgICAgLCBtX25h
bWUobmFtZSkKK3sKKyAgICBBU1NFUlQoIWJsb2IuaXNGaWxlKCkpOworfQorCitGaWxlOjpGaWxl
KGNvbnN0IEZpbGUmIGZpbGUsIGNvbnN0IFN0cmluZyYgbmFtZSkKKyAgICA6IEJsb2IoZmlsZSkK
KyAgICAsIG1fcGF0aChmaWxlLnBhdGgoKSkKKyAgICAsIG1fcmVsYXRpdmVQYXRoKGZpbGUucmVs
YXRpdmVQYXRoKCkpCisgICAgLCBtX25hbWUoIW5hbWUuaXNOdWxsKCkgPyBuYW1lIDogZmlsZS5u
YW1lKCkpCisgICAgLCBtX292ZXJyaWRlTGFzdE1vZGlmaWVkRGF0ZShmaWxlLm1fb3ZlcnJpZGVM
YXN0TW9kaWZpZWREYXRlKQorICAgICwgbV9pc0RpcmVjdG9yeShmaWxlLmlzRGlyZWN0b3J5KCkp
Cit7Cit9CisKIGRvdWJsZSBGaWxlOjpsYXN0TW9kaWZpZWQoKSBjb25zdAogewogICAgIGlmICht
X292ZXJyaWRlTGFzdE1vZGlmaWVkRGF0ZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkv
RmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZS5oCShyZXZp
c2lvbiAyMjE4MjcpCisrKyBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGUuaAkod29ya2luZyBj
b3B5KQpAQCAtNjUsNiArNjUsMTYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBGaWxlKHBhdGgsIG5hbWVPdmVycmlkZSkpOwogICAgIH0KIAorICAgIHN0YXRpYyBSZWY8
RmlsZT4gY3JlYXRlKGNvbnN0IEJsb2ImIGJsb2IsIGNvbnN0IFN0cmluZyYgbmFtZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZpbGUoYmxvYiwgbmFtZSkpOworICAgIH0K
KworICAgIHN0YXRpYyBSZWY8RmlsZT4gY3JlYXRlKGNvbnN0IEZpbGUmIGZpbGUsIGNvbnN0IFN0
cmluZyYgbmFtZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZpbGUoZmls
ZSwgbmFtZSkpOworICAgIH0KKwogICAgIHN0YXRpYyBSZWY8RmlsZT4gY3JlYXRlV2l0aFJlbGF0
aXZlUGF0aChjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgcmVsYXRpdmVQYXRoKTsK
IAogICAgIGJvb2wgaXNGaWxlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQpAQCAt
ODcsNiArOTcsOCBAQCBwcml2YXRlOgogICAgIFdFQkNPUkVfRVhQT1JUIGV4cGxpY2l0IEZpbGUo
Y29uc3QgU3RyaW5nJiBwYXRoKTsKICAgICBGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3Qg
U3RyaW5nJiBuYW1lT3ZlcnJpZGUpOwogICAgIEZpbGUoVmVjdG9yPEJsb2JQYXJ0VmFyaWFudD4m
JiBibG9iUGFydFZhcmlhbnRzLCBjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBQcm9wZXJ0
eUJhZyYpOworICAgIEZpbGUoY29uc3QgQmxvYiYsIGNvbnN0IFN0cmluZyYgbmFtZSk7CisgICAg
RmlsZShjb25zdCBGaWxlJiwgY29uc3QgU3RyaW5nJiBuYW1lKTsKIAogICAgIEZpbGUoRGVzZXJp
YWxpemF0aW9uQ29udHJ1Y3RvciwgY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBVUkwmIHNyY1VS
TCwgY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIG5hbWUpOwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0RPTUZvcm1EYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9odG1sL0RPTUZvcm1EYXRhLmNwcAkocmV2aXNpb24gMjIxODI3KQorKysgU291cmNlL1dl
YkNvcmUvaHRtbC9ET01Gb3JtRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDE0ICs1NSw3
NSBAQCBET01Gb3JtRGF0YTo6RE9NRm9ybURhdGEoSFRNTEZvcm1FbGVtZW50CiAKIHZvaWQgRE9N
Rm9ybURhdGE6OmFwcGVuZChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUp
CiB7Ci0gICAgaWYgKCFuYW1lLmlzRW1wdHkoKSkKLSAgICAgICAgYXBwZW5kRGF0YShuYW1lLCB2
YWx1ZSk7CisgICAgYXBwZW5kRGF0YShuYW1lLCB2YWx1ZSk7CiB9CiAKIHZvaWQgRE9NRm9ybURh
dGE6OmFwcGVuZChjb25zdCBTdHJpbmcmIG5hbWUsIEJsb2ImIGJsb2IsIGNvbnN0IFN0cmluZyYg
ZmlsZW5hbWUpCiB7Ci0gICAgaWYgKCFuYW1lLmlzRW1wdHkoKSkKLSAgICAgICAgYXBwZW5kQmxv
YihuYW1lLCBibG9iLCBmaWxlbmFtZSk7CisgICAgYXBwZW5kQmxvYihuYW1lLCBibG9iLCBmaWxl
bmFtZSk7Cit9CisKK3ZvaWQgRE9NRm9ybURhdGE6OnJlbW92ZShjb25zdCBTdHJpbmcmIG5hbWUp
Cit7CisgICAgbV9pdGVtcy5yZW1vdmVBbGxNYXRjaGluZyhbJm5hbWVdIChjb25zdCBhdXRvJiBp
dGVtKSB7CisgICAgICAgIHJldHVybiBpdGVtLmtleSgpID09IG5hbWU7CisgICAgfSk7Cit9Cith
dXRvIERPTUZvcm1EYXRhOjpnZXQoY29uc3QgU3RyaW5nJiBuYW1lKSAtPiBzdGQ6Om9wdGlvbmFs
PEZvcm1EYXRhRW50cnlWYWx1ZT4KK3sKKyAgICBmb3IgKGF1dG8mIGl0ZW0gOiBtX2l0ZW1zKSB7
CisgICAgICAgIGlmIChpdGVtLmtleSgpID09IG5hbWUpCisgICAgICAgICAgICByZXR1cm4gaXRl
bS5kYXRhKCk7CisgICAgfQorCisgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKK30KKworYXV0byBE
T01Gb3JtRGF0YTo6Z2V0QWxsKGNvbnN0IFN0cmluZyYgbmFtZSkgLT4gVmVjdG9yPEZvcm1EYXRh
RW50cnlWYWx1ZT4KK3sKKyAgICBWZWN0b3I8Rm9ybURhdGFFbnRyeVZhbHVlPiByZXN1bHQ7CisK
KyAgICBmb3IgKGF1dG8mIGl0ZW0gOiBtX2l0ZW1zKSB7CisgICAgICAgIGlmIChpdGVtLmtleSgp
ID09IG5hbWUpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGl0ZW0uZGF0YSgpKTsKKyAgICB9
CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitib29sIERPTUZvcm1EYXRhOjpoYXMoY29uc3Qg
U3RyaW5nJiBuYW1lKQoreworICAgIGZvciAoYXV0byYgaXRlbSA6IG1faXRlbXMpIHsKKyAgICAg
ICAgaWYgKGl0ZW0ua2V5KCkgPT0gbmFtZSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKyAgICAKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgRE9NRm9ybURhdGE6OnNldChj
b25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgc2V0RGF0YShu
YW1lLCB2YWx1ZSk7Cit9CisKK3ZvaWQgRE9NRm9ybURhdGE6OnNldChjb25zdCBTdHJpbmcmIG5h
bWUsIEJsb2ImIGJsb2IsIGNvbnN0IFN0cmluZyYgZmlsZW5hbWUpCit7CisgICAgc2V0QmxvYihu
YW1lLCBibG9iLCBmaWxlbmFtZSk7Cit9CisKK0RPTUZvcm1EYXRhOjpJdGVyYXRvcjo6SXRlcmF0
b3IoRE9NRm9ybURhdGEmIHRhcmdldCkKKyAgICA6IG1fdGFyZ2V0KHRhcmdldCkKK3sKK30KKwor
c3RkOjpvcHRpb25hbDxXVEY6OktleVZhbHVlUGFpcjxTdHJpbmcsIERPTUZvcm1EYXRhOjpGb3Jt
RGF0YUVudHJ5VmFsdWU+PiBET01Gb3JtRGF0YTo6SXRlcmF0b3I6Om5leHQoKQoreworICAgIGF1
dG8mIGl0ZW1zID0gbV90YXJnZXQtPml0ZW1zKCk7CisgICAgaWYgKG1faW5kZXggPj0gaXRlbXMu
c2l6ZSgpKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgYXV0byYgaXRlbSA9
IGl0ZW1zW21faW5kZXgrK107CisgICAgcmV0dXJuIFdURjo6S2V5VmFsdWVQYWlyPFN0cmluZywg
Rm9ybURhdGFFbnRyeVZhbHVlPiB7IGl0ZW0ua2V5KCksIGl0ZW0uZGF0YSgpIH07CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvRE9NRm9ybURh
dGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0RPTUZvcm1EYXRhLmgJKHJl
dmlzaW9uIDIyMTgyNykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvRE9NRm9ybURhdGEuaAkod29y
a2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogCiAjaW5jbHVkZSAiRm9ybURhdGFMaXN0Lmgi
CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00MCwx
MyArNDEsMzMgQEAgY2xhc3MgQmxvYjsKIGNsYXNzIEhUTUxGb3JtRWxlbWVudDsKIGNsYXNzIFRl
eHRFbmNvZGluZzsKIAorLy8gRklYTUU6IERvIHdlIG5lZWQgdG8gaGF2ZSBzZXBhcmF0ZSBET01G
b3JtRGF0YSBhbmQgRm9ybURhdGFMaXN0IGNsYXNzZXM/CiBjbGFzcyBET01Gb3JtRGF0YSA6IHB1
YmxpYyBGb3JtRGF0YUxpc3QsIHB1YmxpYyBSZWZDb3VudGVkPERPTUZvcm1EYXRhPiB7CiBwdWJs
aWM6CiAgICAgc3RhdGljIFJlZjxET01Gb3JtRGF0YT4gY3JlYXRlKEhUTUxGb3JtRWxlbWVudCog
Zm9ybSkgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBET01Gb3JtRGF0YShmb3JtKSk7IH0KICAgICBz
dGF0aWMgUmVmPERPTUZvcm1EYXRhPiBjcmVhdGUoY29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGlu
ZykgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBET01Gb3JtRGF0YShlbmNvZGluZykpOyB9CiAKKyAg
ICB1c2luZyBGb3JtRGF0YUVudHJ5VmFsdWUgPSBJdGVtOjpEYXRhOworCiAgICAgdm9pZCBhcHBl
bmQoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKLSAgICB2b2lkIGFw
cGVuZChjb25zdCBTdHJpbmcmIG5hbWUsIEJsb2ImLCBjb25zdCBTdHJpbmcmIGZpbGVuYW1lID0g
U3RyaW5nKCkpOworICAgIHZvaWQgYXBwZW5kKGNvbnN0IFN0cmluZyYgbmFtZSwgQmxvYiYsIGNv
bnN0IFN0cmluZyYgZmlsZW5hbWUgPSB7IH0pOworICAgIHZvaWQgcmVtb3ZlKGNvbnN0IFN0cmlu
ZyYgbmFtZSk7CisgICAgc3RkOjpvcHRpb25hbDxGb3JtRGF0YUVudHJ5VmFsdWU+IGdldChjb25z
dCBTdHJpbmcmIG5hbWUpOworICAgIFZlY3RvcjxGb3JtRGF0YUVudHJ5VmFsdWU+IGdldEFsbChj
b25zdCBTdHJpbmcmIG5hbWUpOworICAgIGJvb2wgaGFzKGNvbnN0IFN0cmluZyYgbmFtZSk7Cisg
ICAgdm9pZCBzZXQoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKKyAg
ICB2b2lkIHNldChjb25zdCBTdHJpbmcmIG5hbWUsIEJsb2ImLCBjb25zdCBTdHJpbmcmIGZpbGVu
YW1lID0geyB9KTsKKworICAgIGNsYXNzIEl0ZXJhdG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAg
IGV4cGxpY2l0IEl0ZXJhdG9yKERPTUZvcm1EYXRhJik7CisgICAgICAgIHN0ZDo6b3B0aW9uYWw8
V1RGOjpLZXlWYWx1ZVBhaXI8U3RyaW5nLCBGb3JtRGF0YUVudHJ5VmFsdWU+PiBuZXh0KCk7CisK
KyAgICBwcml2YXRlOgorICAgICAgICBSZWY8RE9NRm9ybURhdGE+IG1fdGFyZ2V0OworICAgICAg
ICBzaXplX3QgbV9pbmRleCB7IDAgfTsKKyAgICB9OworICAgIEl0ZXJhdG9yIGNyZWF0ZUl0ZXJh
dG9yKCkgeyByZXR1cm4gSXRlcmF0b3IgeyAqdGhpcyB9OyB9CiAKIHByaXZhdGU6CiAgICAgZXhw
bGljaXQgRE9NRm9ybURhdGEoY29uc3QgVGV4dEVuY29kaW5nJik7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL0RPTUZvcm1EYXRhLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL0RPTUZvcm1EYXRhLmlkbAkocmV2aXNpb24gMjIxODI3KQorKysgU291cmNlL1dlYkNvcmUv
aHRtbC9ET01Gb3JtRGF0YS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDEwIEBACiAg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgogICovCiAKK3R5cGVkZWYgKEZpbGUgb3IgVVNWU3RyaW5nKSBGb3JtRGF0
YUVudHJ5VmFsdWU7CisKKy8vIEZJWE1FOiBTaG91bGQgYmUgRXhwb3NlZD0oV2luZG93LFdvcmtl
cikKKwogWwogICAgIENvbnN0cnVjdG9yKG9wdGlvbmFsIEhUTUxGb3JtRWxlbWVudD8gZm9ybSks
CiAgICAgSlNHZW5lcmF0ZVRvTmF0aXZlT2JqZWN0LApAQCAtMzYsNiArNDAsMTMgQEAKICAgICBJ
bXBsZW1lbnRhdGlvbkxhY2tzVlRhYmxlLAogXSBpbnRlcmZhY2UgRE9NRm9ybURhdGEgewogICAg
IHZvaWQgYXBwZW5kKFVTVlN0cmluZyBuYW1lLCBVU1ZTdHJpbmcgdmFsdWUpOwotICAgIHZvaWQg
YXBwZW5kKFVTVlN0cmluZyBuYW1lLCBCbG9iIHZhbHVlLCBvcHRpb25hbCBVU1ZTdHJpbmcgZmls
ZW5hbWUpOwotfTsKKyAgICB2b2lkIGFwcGVuZChVU1ZTdHJpbmcgbmFtZSwgQmxvYiBibG9iVmFs
dWUsIG9wdGlvbmFsIFVTVlN0cmluZyBmaWxlbmFtZSk7CisgICAgW0ltcGxlbWVudGVkQXM9cmVt
b3ZlXSB2b2lkIGRlbGV0ZShVU1ZTdHJpbmcgbmFtZSk7CisgICAgRm9ybURhdGFFbnRyeVZhbHVl
PyBnZXQoVVNWU3RyaW5nIG5hbWUpOworICAgIHNlcXVlbmNlPEZvcm1EYXRhRW50cnlWYWx1ZT4g
Z2V0QWxsKFVTVlN0cmluZyBuYW1lKTsKKyAgICBib29sZWFuIGhhcyhVU1ZTdHJpbmcgbmFtZSk7
CisgICAgdm9pZCBzZXQoVVNWU3RyaW5nIG5hbWUsIFVTVlN0cmluZyB2YWx1ZSk7CisgICAgdm9p
ZCBzZXQoVVNWU3RyaW5nIG5hbWUsIEJsb2IgYmxvYlZhbHVlLCBvcHRpb25hbCBVU1ZTdHJpbmcg
ZmlsZW5hbWUpOwogCisgICAgaXRlcmFibGU8VVNWU3RyaW5nLCBGb3JtRGF0YUVudHJ5VmFsdWU+
OworfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvRm9ybURhdGFMaXN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0Zvcm1EYXRhTGlzdC5jcHAJKHJldmlzaW9uIDIy
MTgyNykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvRm9ybURhdGFMaXN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjIsMjkgKzIyLDg3IEBACiAjaW5jbHVkZSAiRm9ybURhdGFMaXN0LmgiCiAKICNp
bmNsdWRlICJMaW5lRW5kaW5nLmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nVmlldy5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1G
b3JtRGF0YUxpc3Q6OkZvcm1EYXRhTGlzdChjb25zdCBUZXh0RW5jb2RpbmcmIGMpCi0gICAgOiBt
X2VuY29kaW5nKGMpCitGb3JtRGF0YUxpc3Q6OkZvcm1EYXRhTGlzdChjb25zdCBUZXh0RW5jb2Rp
bmcmIGVuY29kaW5nKQorICAgIDogbV9lbmNvZGluZyhlbmNvZGluZykKIHsKIH0KIAotdm9pZCBG
b3JtRGF0YUxpc3Q6OmFwcGVuZFN0cmluZyhjb25zdCBTdHJpbmcmIHMpCitDU3RyaW5nIEZvcm1E
YXRhTGlzdDo6bm9ybWFsaXplU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpIGNvbnN0CiB7Ci0g
ICAgQ1N0cmluZyBjc3RyID0gbV9lbmNvZGluZy5lbmNvZGUocywgRW50aXRpZXNGb3JVbmVuY29k
YWJsZXMpOwotICAgIG1faXRlbXMuYXBwZW5kKG5vcm1hbGl6ZUxpbmVFbmRpbmdzVG9DUkxGKGNz
dHIpKTsKKyAgICByZXR1cm4gbm9ybWFsaXplTGluZUVuZGluZ3NUb0NSTEYobV9lbmNvZGluZy5l
bmNvZGUodmFsdWUsIEVudGl0aWVzRm9yVW5lbmNvZGFibGVzKSk7CiB9CiAKLXZvaWQgRm9ybURh
dGFMaXN0OjphcHBlbmRTdHJpbmcoY29uc3QgQ1N0cmluZyYgcykKKy8vIGh0dHBzOi8veGhyLnNw
ZWMud2hhdHdnLm9yZy8jY3JlYXRlLWFuLWVudHJ5CithdXRvIEZvcm1EYXRhTGlzdDo6Y3JlYXRl
RmlsZUVudHJ5KGNvbnN0IFN0cmluZyYga2V5LCBSZWY8QmxvYj4mJiBibG9iLCBjb25zdCBTdHJp
bmcmIGZpbGVuYW1lKSAtPiBJdGVtCiB7Ci0gICAgbV9pdGVtcy5hcHBlbmQocyk7CisgICAgaWYg
KCFibG9iLT5pc0ZpbGUoKSkgeworICAgICAgICBhdXRvIGZpbGUgPSBGaWxlOjpjcmVhdGUoYmxv
Yi5nZXQoKSwgZmlsZW5hbWUuaXNOdWxsKCkgPyBBU0NJSUxpdGVyYWwoImJsb2IiKSA6IGZpbGVu
YW1lKTsKKyAgICAgICAgcmV0dXJuIHsga2V5LCBXVEZNb3ZlKGZpbGUpIH07CisgICAgfQorICAg
IAorICAgIGlmICghZmlsZW5hbWUuaXNOdWxsKCkpIHsKKyAgICAgICAgYXV0byBmaWxlID0gRmls
ZTo6Y3JlYXRlKGRvd25jYXN0PEZpbGU+KGJsb2IuZ2V0KCkpLCBmaWxlbmFtZSk7CisgICAgICAg
IHJldHVybiB7IGtleSwgV1RGTW92ZShmaWxlKSB9OworICAgIH0KKworICAgIHJldHVybiB7IGtl
eSwgc3RhdGljX3JlZmVyZW5jZV9jYXN0PEZpbGU+KFdURk1vdmUoYmxvYikpIH07Cit9CisKK3Zv
aWQgRm9ybURhdGFMaXN0OjphcHBlbmREYXRhKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJp
bmcmIHZhbHVlKQoreworICAgIG1faXRlbXMuYXBwZW5kKHsga2V5LCB2YWx1ZSB9KTsKK30KKwor
dm9pZCBGb3JtRGF0YUxpc3Q6OmFwcGVuZERhdGEoY29uc3QgU3RyaW5nJiBrZXksIGludCB2YWx1
ZSkKK3sKKyAgICBtX2l0ZW1zLmFwcGVuZCh7IGtleSwgU3RyaW5nOjpudW1iZXIodmFsdWUpIH0p
OwogfQogCi12b2lkIEZvcm1EYXRhTGlzdDo6YXBwZW5kQmxvYihSZWY8QmxvYj4mJiBibG9iLCBj
b25zdCBTdHJpbmcmIGZpbGVuYW1lKQordm9pZCBGb3JtRGF0YUxpc3Q6OmFwcGVuZEJsb2IoY29u
c3QgU3RyaW5nJiBrZXksIFJlZjxCbG9iPiYmIGJsb2IsIGNvbnN0IFN0cmluZyYgZmlsZW5hbWUp
CiB7Ci0gICAgbV9pdGVtcy5hcHBlbmQoSXRlbShXVEZNb3ZlKGJsb2IpLCBmaWxlbmFtZSkpOwor
ICAgIG1faXRlbXMuYXBwZW5kKGNyZWF0ZUZpbGVFbnRyeShrZXksIFdURk1vdmUoYmxvYiksIGZp
bGVuYW1lKSk7CiB9CiAKLX0gLy8gbmFtZXNwYWNlCit0ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeU1h
a2VyPgordm9pZCBGb3JtRGF0YUxpc3Q6OnNldChjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgRW50
cnlNYWtlciYgZW50cnlNYWtlcikKK3sKKyAgICBzaXplX3QgaW5pdGlhbE1hdGNoTG9jYXRpb24g
PSBXVEY6Om5vdEZvdW5kOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2l0ZW1zLnNp
emUoKTsgKytpKSB7CisgICAgICAgIGlmIChrZXkgPT0gbV9pdGVtc1tpXS5rZXkoKSkgeworICAg
ICAgICAgICAgaW5pdGlhbE1hdGNoTG9jYXRpb24gPSBpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBtX2l0ZW1zW2ldID0gZW50cnlNYWtlcigpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBpZiAoaW5pdGlhbE1hdGNoTG9jYXRpb24gIT0gV1RGOjpub3RG
b3VuZCkgeworICAgICAgICBtX2l0ZW1zLnJlbW92ZUFsbE1hdGNoaW5nKFsma2V5XSAoY29uc3Qg
YXV0byYgaXRlbSkgeworICAgICAgICAgICAgcmV0dXJuIGl0ZW0ua2V5KCkgPT0ga2V5OworICAg
ICAgICB9LCBpbml0aWFsTWF0Y2hMb2NhdGlvbiArIDEpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgbV9pdGVtcy5hcHBlbmQoZW50cnlNYWtlcigpKTsKK30KKwordm9pZCBGb3JtRGF0
YUxpc3Q6OnNldERhdGEoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpCit7
CisgICAgc2V0KGtleSwgWyZdKCkgLT4gSXRlbSB7CisgICAgICAgIHJldHVybiB7IGtleSwgdmFs
dWUgfTsKKyAgICB9KTsKK30KKwordm9pZCBGb3JtRGF0YUxpc3Q6OnNldEJsb2IoY29uc3QgU3Ry
aW5nJiBrZXksIFJlZjxCbG9iPiYmIGJsb2IsIGNvbnN0IFN0cmluZyYgZmlsZW5hbWUpCit7Cisg
ICAgc2V0KGtleSwgWyZdKCkgLT4gSXRlbSB7CisgICAgICAgIHJldHVybiBjcmVhdGVGaWxlRW50
cnkoa2V5LCBXVEZNb3ZlKGJsb2IpLCBmaWxlbmFtZSk7CisgICAgfSk7Cit9CisKK30KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvRm9ybURhdGFMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaHRtbC9Gb3JtRGF0YUxpc3QuaAkocmV2aXNpb24gMjIxODI3KQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC9Gb3JtRGF0YUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjAsMTAgKzIw
LDEwIEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiQmxvYi5oIgorI2luY2x1ZGUgIkZp
bGUuaCIKICNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5o
PgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvVmFyaWFudC5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTMxLDUzICszMSw0NyBAQCBjbGFzcyBGb3Jt
RGF0YUxpc3QgewogcHVibGljOgogICAgIGNsYXNzIEl0ZW0gewogICAgIHB1YmxpYzoKLSAgICAg
ICAgSXRlbSgpIHsgfQotICAgICAgICBJdGVtKGNvbnN0IFdURjo6Q1N0cmluZyYgZGF0YSkgOiBt
X2RhdGEoZGF0YSkgeyB9Ci0gICAgICAgIEl0ZW0oUmVmPEJsb2I+JiYgYmxvYiwgY29uc3QgU3Ry
aW5nJiBmaWxlbmFtZSkKLSAgICAgICAgICAgIDogbV9ibG9iKFdURk1vdmUoYmxvYikpCi0gICAg
ICAgICAgICAsIG1fZmlsZW5hbWUoZmlsZW5hbWUpCi0gICAgICAgIHsgfQotCi0gICAgICAgIGNv
bnN0IFdURjo6Q1N0cmluZyYgZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YTsgfQotICAgICAg
ICBCbG9iKiBibG9iKCkgY29uc3QgeyByZXR1cm4gbV9ibG9iLmdldCgpOyB9Ci0gICAgICAgIGNv
bnN0IFN0cmluZyYgZmlsZW5hbWUoKSBjb25zdCB7IHJldHVybiBtX2ZpbGVuYW1lOyB9CisgICAg
ICAgIEl0ZW0oKSA9IGRlZmF1bHQ7CisgICAgICAgIEl0ZW0oY29uc3QgU3RyaW5nJiBrZXksIGNv
bnN0IFN0cmluZyYgZGF0YSkKKyAgICAgICAgICAgIDogbV9rZXkoa2V5KQorICAgICAgICAgICAg
LCBtX2RhdGEoZGF0YSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgSXRlbShjb25z
dCBTdHJpbmcmIGtleSwgUmVmPEZpbGU+JiYgZmlsZSkKKyAgICAgICAgICAgIDogbV9rZXkoa2V5
KQorICAgICAgICAgICAgLCBtX2RhdGEoUmVmUHRyPEZpbGU+IHsgV1RGTW92ZShmaWxlKSB9KQor
ICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICB1c2luZyBEYXRhID0gVmFyaWFudDxSZWZQ
dHI8RmlsZT4sIFN0cmluZz47CisKKyAgICAgICAgY29uc3QgU3RyaW5nJiBrZXkoKSBjb25zdCB7
IHJldHVybiBtX2tleTsgfQorICAgICAgICBjb25zdCBEYXRhJiBkYXRhKCkgY29uc3QgeyByZXR1
cm4gbV9kYXRhOyB9CiAKICAgICBwcml2YXRlOgotICAgICAgICBXVEY6OkNTdHJpbmcgbV9kYXRh
OwotICAgICAgICBSZWZQdHI8QmxvYj4gbV9ibG9iOwotICAgICAgICBTdHJpbmcgbV9maWxlbmFt
ZTsKKyAgICAgICAgU3RyaW5nIG1fa2V5OworICAgICAgICBEYXRhIG1fZGF0YTsKICAgICB9Owog
Ci0gICAgRm9ybURhdGFMaXN0KGNvbnN0IFRleHRFbmNvZGluZyYpOwotCi0gICAgdm9pZCBhcHBl
bmREYXRhKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlKQotICAgIHsKLSAg
ICAgICAgYXBwZW5kU3RyaW5nKGtleSk7Ci0gICAgICAgIGFwcGVuZFN0cmluZyh2YWx1ZSk7Ci0g
ICAgfQotICAgIHZvaWQgYXBwZW5kRGF0YShjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgQ1N0cmlu
ZyYgdmFsdWUpCi0gICAgewotICAgICAgICBhcHBlbmRTdHJpbmcoa2V5KTsKLSAgICAgICAgYXBw
ZW5kU3RyaW5nKHZhbHVlKTsKLSAgICB9Ci0gICAgdm9pZCBhcHBlbmREYXRhKGNvbnN0IFN0cmlu
ZyYga2V5LCBpbnQgdmFsdWUpCi0gICAgewotICAgICAgICBhcHBlbmRTdHJpbmcoa2V5KTsKLSAg
ICAgICAgYXBwZW5kU3RyaW5nKFN0cmluZzo6bnVtYmVyKHZhbHVlKSk7Ci0gICAgfQotICAgIHZv
aWQgYXBwZW5kQmxvYihjb25zdCBTdHJpbmcmIGtleSwgUmVmPEJsb2I+JiYgYmxvYiwgY29uc3Qg
U3RyaW5nJiBmaWxlbmFtZSA9IFN0cmluZygpKQotICAgIHsKLSAgICAgICAgYXBwZW5kU3RyaW5n
KGtleSk7Ci0gICAgICAgIGFwcGVuZEJsb2IoV1RGTW92ZShibG9iKSwgZmlsZW5hbWUpOwotICAg
IH0KKyAgICB2b2lkIGFwcGVuZERhdGEoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYg
dmFsdWUpOworICAgIHZvaWQgYXBwZW5kRGF0YShjb25zdCBTdHJpbmcmIGtleSwgaW50IHZhbHVl
KTsKKyAgICB2b2lkIGFwcGVuZEJsb2IoY29uc3QgU3RyaW5nJiBrZXksIFJlZjxCbG9iPiYmLCBj
b25zdCBTdHJpbmcmIGZpbGVuYW1lID0geyB9KTsKKyAgICB2b2lkIHNldERhdGEoY29uc3QgU3Ry
aW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpOworICAgIHZvaWQgc2V0QmxvYihjb25zdCBT
dHJpbmcmIGtleSwgUmVmPEJsb2I+JiYsIGNvbnN0IFN0cmluZyYgZmlsZW5hbWUgPSB7IH0pOwog
CiAgICAgY29uc3QgVmVjdG9yPEl0ZW0+JiBpdGVtcygpIGNvbnN0IHsgcmV0dXJuIG1faXRlbXM7
IH0KICAgICBjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nKCkgY29uc3QgeyByZXR1cm4gbV9l
bmNvZGluZzsgfQogCi1wcml2YXRlOgotICAgIHZvaWQgYXBwZW5kU3RyaW5nKGNvbnN0IENTdHJp
bmcmKTsKLSAgICB2b2lkIGFwcGVuZFN0cmluZyhjb25zdCBTdHJpbmcmKTsKLSAgICB2b2lkIGFw
cGVuZEJsb2IoUmVmPEJsb2I+JiYsIGNvbnN0IFN0cmluZyYgZmlsZW5hbWUpOworICAgIENTdHJp
bmcgbm9ybWFsaXplU3RyaW5nKGNvbnN0IFN0cmluZyYpIGNvbnN0OworCitwcm90ZWN0ZWQ6Cisg
ICAgRm9ybURhdGFMaXN0KGNvbnN0IFRleHRFbmNvZGluZyYpOworCisgICAgSXRlbSBjcmVhdGVG
aWxlRW50cnkoY29uc3QgU3RyaW5nJiBrZXksIFJlZjxCbG9iPiYmLCBjb25zdCBTdHJpbmcmIGZp
bGVuYW1lKTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFbnRyeU1ha2VyPgorICAgIHZv
aWQgc2V0KGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBFbnRyeU1ha2VyJik7CiAKICAgICBUZXh0
RW5jb2RpbmcgbV9lbmNvZGluZzsKICAgICBWZWN0b3I8SXRlbT4gbV9pdGVtczsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTEtleWdlbkVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTEtleWdlbkVsZW1lbnQuY3BwCShyZXZpc2lvbiAyMjE4Mjcp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxLZXlnZW5FbGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTIzLDcgKzEyMyw3IEBAIGJvb2wgSFRNTEtleWdlbkVsZW1lbnQ6OmFwcGVuZEZv
cm1EYXRhKEYKICAgICBTdHJpbmcgdmFsdWUgPSBzaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2VT
dHJpbmcoc2hhZG93U2VsZWN0KCktPnNlbGVjdGVkSW5kZXgoKSwgYXR0cmlidXRlV2l0aG91dFN5
bmNocm9uaXphdGlvbihjaGFsbGVuZ2VBdHRyKSwgZG9jdW1lbnQoKS5iYXNlVVJMKCkpOwogICAg
IGlmICh2YWx1ZS5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGVuY29kZWRf
dmFsdWVzLmFwcGVuZERhdGEobmFtZSgpLCB2YWx1ZS51dGY4KCkpOworICAgIGVuY29kZWRfdmFs
dWVzLmFwcGVuZERhdGEobmFtZSgpLCB2YWx1ZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JOZXR3b3JrQWdlbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JOZXR3b3JrQWdl
bnQuY3BwCShyZXZpc2lvbiAyMjE4MjcpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yTmV0d29ya0FnZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU2LDggKzI1Niw3IEBA
IHN0YXRpYyBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazoKICAgICAgICAgLnNldEhl
YWRlcnMoYnVpbGRPYmplY3RGb3JIZWFkZXJzKHJlcXVlc3QuaHR0cEhlYWRlckZpZWxkcygpKSkK
ICAgICAgICAgLnJlbGVhc2UoKTsKICAgICBpZiAocmVxdWVzdC5odHRwQm9keSgpICYmICFyZXF1
ZXN0Lmh0dHBCb2R5KCktPmlzRW1wdHkoKSkgewotICAgICAgICBWZWN0b3I8Y2hhcj4gYnl0ZXM7
Ci0gICAgICAgIHJlcXVlc3QuaHR0cEJvZHkoKS0+ZmxhdHRlbihieXRlcyk7CisgICAgICAgIGF1
dG8gYnl0ZXMgPSByZXF1ZXN0Lmh0dHBCb2R5KCktPmZsYXR0ZW4oKTsKICAgICAgICAgcmVxdWVz
dE9iamVjdC0+c2V0UG9zdERhdGEoU3RyaW5nOjpmcm9tVVRGOFdpdGhMYXRpbjFGYWxsYmFjayhi
eXRlcy5kYXRhKCksIGJ5dGVzLnNpemUoKSkpOwogICAgIH0KICAgICByZXR1cm4gcmVxdWVzdE9i
amVjdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEu
Y3BwCShyZXZpc2lvbiAyMjE4MjcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L0Zvcm1EYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCBpbmxpbmUgRm9y
bURhdGE6OkZvcm1EYXRhKGNvbnN0IEZvcm1EYXRhCiB7CiAgICAgLy8gV2Ugc2hvdWxkbid0IGJl
IGNvcHlpbmcgRm9ybURhdGEgdGhhdCBoYXNuJ3QgYWxyZWFkeSByZW1vdmVkIGl0cyBnZW5lcmF0
ZWQgZmlsZXMKICAgICAvLyBidXQganVzdCBpbiBjYXNlLCBtYWtlIHN1cmUgdGhlIG5ldyBGb3Jt
RGF0YSBpcyByZWFkeSB0byBnZW5lcmF0ZSBpdHMgb3duIGZpbGVzLgotICAgIGZvciAoRm9ybURh
dGFFbGVtZW50JiBlbGVtZW50IDogbV9lbGVtZW50cykgeworICAgIGZvciAoYXV0byYgZWxlbWVu
dCA6IG1fZWxlbWVudHMpIHsKICAgICAgICAgaWYgKGVsZW1lbnQubV90eXBlID09IEZvcm1EYXRh
RWxlbWVudDo6VHlwZTo6RW5jb2RlZEZpbGUpIHsKICAgICAgICAgICAgIGVsZW1lbnQubV9nZW5l
cmF0ZWRGaWxlbmFtZSA9IFN0cmluZygpOwogICAgICAgICAgICAgZWxlbWVudC5tX293bnNHZW5l
cmF0ZWRGaWxlID0gZmFsc2U7CkBAIC03MywzNSArNzMsMzUgQEAgUmVmPEZvcm1EYXRhPiBGb3Jt
RGF0YTo6Y3JlYXRlKCkKIAogUmVmPEZvcm1EYXRhPiBGb3JtRGF0YTo6Y3JlYXRlKGNvbnN0IHZv
aWQqIGRhdGEsIHNpemVfdCBzaXplKQogewotICAgIFJlZjxGb3JtRGF0YT4gcmVzdWx0ID0gY3Jl
YXRlKCk7CisgICAgYXV0byByZXN1bHQgPSBjcmVhdGUoKTsKICAgICByZXN1bHQtPmFwcGVuZERh
dGEoZGF0YSwgc2l6ZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogUmVmPEZvcm1EYXRhPiBG
b3JtRGF0YTo6Y3JlYXRlKGNvbnN0IENTdHJpbmcmIHN0cmluZykKIHsKLSAgICBSZWY8Rm9ybURh
dGE+IHJlc3VsdCA9IGNyZWF0ZSgpOworICAgIGF1dG8gcmVzdWx0ID0gY3JlYXRlKCk7CiAgICAg
cmVzdWx0LT5hcHBlbmREYXRhKHN0cmluZy5kYXRhKCksIHN0cmluZy5sZW5ndGgoKSk7CiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAogUmVmPEZvcm1EYXRhPiBGb3JtRGF0YTo6Y3JlYXRlKGNvbnN0
IFZlY3RvcjxjaGFyPiYgdmVjdG9yKQogewotICAgIFJlZjxGb3JtRGF0YT4gcmVzdWx0ID0gY3Jl
YXRlKCk7CisgICAgYXV0byByZXN1bHQgPSBjcmVhdGUoKTsKICAgICByZXN1bHQtPmFwcGVuZERh
dGEodmVjdG9yLmRhdGEoKSwgdmVjdG9yLnNpemUoKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAogUmVmPEZvcm1EYXRhPiBGb3JtRGF0YTo6Y3JlYXRlKGNvbnN0IEZvcm1EYXRhTGlzdCYgbGlz
dCwgY29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZywgRW5jb2RpbmdUeXBlIGVuY29kaW5nVHlw
ZSkKIHsKLSAgICBSZWY8Rm9ybURhdGE+IHJlc3VsdCA9IGNyZWF0ZSgpOworICAgIGF1dG8gcmVz
dWx0ID0gY3JlYXRlKCk7CiAgICAgcmVzdWx0LT5hcHBlbmRLZXlWYWx1ZVBhaXJJdGVtcyhsaXN0
LCBlbmNvZGluZywgZmFsc2UsIDAsIGVuY29kaW5nVHlwZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAogUmVmPEZvcm1EYXRhPiBGb3JtRGF0YTo6Y3JlYXRlTXVsdGlQYXJ0KGNvbnN0IEZvcm1E
YXRhTGlzdCYgbGlzdCwgY29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZywgRG9jdW1lbnQqIGRv
Y3VtZW50KQogewotICAgIFJlZjxGb3JtRGF0YT4gcmVzdWx0ID0gY3JlYXRlKCk7CisgICAgYXV0
byByZXN1bHQgPSBjcmVhdGUoKTsKICAgICByZXN1bHQtPmFwcGVuZEtleVZhbHVlUGFpckl0ZW1z
KGxpc3QsIGVuY29kaW5nLCB0cnVlLCBkb2N1bWVudCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
QEAgLTE4OCw1MiArMTg4LDM1IEBAIHZvaWQgRm9ybURhdGE6OmFwcGVuZEtleVZhbHVlUGFpckl0
ZW1zKGMKICAgICAgICAgbV9ib3VuZGFyeSA9IEZvcm1EYXRhQnVpbGRlcjo6Z2VuZXJhdGVVbmlx
dWVCb3VuZGFyeVN0cmluZygpOwogCiAgICAgVmVjdG9yPGNoYXI+IGVuY29kZWREYXRhOwotCi0g
ICAgY29uc3QgVmVjdG9yPEZvcm1EYXRhTGlzdDo6SXRlbT4mIGl0ZW1zID0gbGlzdC5pdGVtcygp
OwotICAgIHNpemVfdCBmb3JtRGF0YUxpc3RTaXplID0gaXRlbXMuc2l6ZSgpOwotICAgIEFTU0VS
VCghKGZvcm1EYXRhTGlzdFNpemUgJSAyKSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBm
b3JtRGF0YUxpc3RTaXplOyBpICs9IDIpIHsKLSAgICAgICAgY29uc3QgRm9ybURhdGFMaXN0OjpJ
dGVtJiBrZXkgPSBpdGVtc1tpXTsKLSAgICAgICAgY29uc3QgRm9ybURhdGFMaXN0OjpJdGVtJiB2
YWx1ZSA9IGl0ZW1zW2kgKyAxXTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGl0ZW0gOiBsaXN0Lml0
ZW1zKCkpIHsKKyAgICAgICAgYXV0byBub3JtYWxpemVkTmFtZSA9IGxpc3Qubm9ybWFsaXplU3Ry
aW5nKGl0ZW0ua2V5KCkpOworICAgIAogICAgICAgICBpZiAoaXNNdWx0aVBhcnRGb3JtKSB7CiAg
ICAgICAgICAgICBWZWN0b3I8Y2hhcj4gaGVhZGVyOwotICAgICAgICAgICAgRm9ybURhdGFCdWls
ZGVyOjpiZWdpbk11bHRpUGFydEhlYWRlcihoZWFkZXIsIG1fYm91bmRhcnkuZGF0YSgpLCBrZXku
ZGF0YSgpKTsKKyAgICAgICAgICAgIEZvcm1EYXRhQnVpbGRlcjo6YmVnaW5NdWx0aVBhcnRIZWFk
ZXIoaGVhZGVyLCBtX2JvdW5kYXJ5LmRhdGEoKSwgbm9ybWFsaXplZE5hbWUpOwogCiAgICAgICAg
ICAgICBib29sIHNob3VsZEdlbmVyYXRlRmlsZSA9IGZhbHNlOwogCi0gICAgICAgICAgICAvLyBJ
ZiB0aGUgY3VycmVudCB0eXBlIGlzIGJsb2IsIHRoZW4gd2UgYWxzbyBuZWVkIHRvIGluY2x1ZGUg
dGhlIGZpbGVuYW1lCi0gICAgICAgICAgICBpZiAodmFsdWUuYmxvYigpKSB7Ci0gICAgICAgICAg
ICAgICAgU3RyaW5nIG5hbWU7Ci0gICAgICAgICAgICAgICAgaWYgKGlzPEZpbGU+KCp2YWx1ZS5i
bG9iKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIEZpbGUmIGZpbGUgPSBkb3duY2FzdDxGaWxl
PigqdmFsdWUuYmxvYigpKTsKLSAgICAgICAgICAgICAgICAgICAgbmFtZSA9IGZpbGUubmFtZSgp
OwotICAgICAgICAgICAgICAgICAgICAvLyBMZXQgdGhlIGFwcGxpY2F0aW9uIHNwZWNpZnkgYSBm
aWxlbmFtZSBpZiBpdCdzIGdvaW5nIHRvIGdlbmVyYXRlIGEgcmVwbGFjZW1lbnQgZmlsZSBmb3Ig
dGhlIHVwbG9hZC4KLSAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBwYXRoID0gZmls
ZS5wYXRoKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghcGF0aC5pc0VtcHR5KCkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChQYWdlKiBwYWdlID0gZG9jdW1lbnQtPnBhZ2UoKSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBnZW5lcmF0ZWRGaWxlTmFtZTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG91bGRHZW5lcmF0ZUZpbGUgPSBwYWdlLT5j
aHJvbWUoKS5jbGllbnQoKS5zaG91bGRSZXBsYWNlV2l0aEdlbmVyYXRlZEZpbGVGb3JVcGxvYWQo
cGF0aCwgZ2VuZXJhdGVkRmlsZU5hbWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChzaG91bGRHZW5lcmF0ZUZpbGUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5h
bWUgPSBnZW5lcmF0ZWRGaWxlTmFtZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIC8vIElmIHRoZSBjdXJyZW50IHR5cGUgaXMgYSBmaWxlLCB0aGVuIHdlIGFsc28gbmVl
ZCB0byBpbmNsdWRlIHRoZSBmaWxlbmFtZQorICAgICAgICAgICAgaWYgKFdURjo6aG9sZHNfYWx0
ZXJuYXRpdmU8UmVmUHRyPEZpbGU+PihpdGVtLmRhdGEoKSkpIHsKKyAgICAgICAgICAgICAgICBh
dXRvIGZpbGUgPSBXVEY6OmdldDxSZWZQdHI8RmlsZT4+KGl0ZW0uZGF0YSgpKTsKKyAgICAgICAg
ICAgICAgICBhdXRvIG5hbWUgPSBmaWxlLT5uYW1lKCk7CisgICAgICAgICAgICAgICAgLy8gTGV0
IHRoZSBhcHBsaWNhdGlvbiBzcGVjaWZ5IGEgZmlsZW5hbWUgaWYgaXQncyBnb2luZyB0byBnZW5l
cmF0ZSBhIHJlcGxhY2VtZW50IGZpbGUgZm9yIHRoZSB1cGxvYWQuCisgICAgICAgICAgICAgICAg
Y29uc3QgYXV0byYgcGF0aCA9IGZpbGUtPnBhdGgoKTsKKyAgICAgICAgICAgICAgICBpZiAoIXBh
dGguaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChQYWdlKiBwYWdlID0gZG9j
dW1lbnQtPnBhZ2UoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGdlbmVyYXRl
ZEZpbGVOYW1lOworICAgICAgICAgICAgICAgICAgICAgICAgc2hvdWxkR2VuZXJhdGVGaWxlID0g
cGFnZS0+Y2hyb21lKCkuY2xpZW50KCkuc2hvdWxkUmVwbGFjZVdpdGhHZW5lcmF0ZWRGaWxlRm9y
VXBsb2FkKHBhdGgsIGdlbmVyYXRlZEZpbGVOYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChzaG91bGRHZW5lcmF0ZUZpbGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFt
ZSA9IGdlbmVyYXRlZEZpbGVOYW1lOwogICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICAgICAgLy8gSWYgYSBmaWxlbmFtZSBpcyBwYXNzZWQgaW4gRm9ybURhdGEuYXBwZW5k
KCksIHVzZSBpdCBpbnN0ZWFkIG9mIHRoZSBmaWxlIGJsb2IncyBuYW1lLgotICAgICAgICAgICAg
ICAgICAgICBpZiAoIXZhbHVlLmZpbGVuYW1lKCkuaXNOdWxsKCkpCi0gICAgICAgICAgICAgICAg
ICAgICAgICBuYW1lID0gdmFsdWUuZmlsZW5hbWUoKTsKLSAgICAgICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgICAgICAvLyBGb3Igbm9uLWZpbGUgYmxvYiwgdXNlIHRoZSBmaWxl
bmFtZSBpZiBpdCBpcyBwYXNzZWQgaW4gRm9ybURhdGEuYXBwZW5kKCkuCi0gICAgICAgICAgICAg
ICAgICAgIGlmICghdmFsdWUuZmlsZW5hbWUoKS5pc051bGwoKSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIG5hbWUgPSB2YWx1ZS5maWxlbmFtZSgpOwotICAgICAgICAgICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gImJsb2IiOwogICAgICAgICAgICAgICAg
IH0KIAogICAgICAgICAgICAgICAgIC8vIFdlIGhhdmUgdG8gaW5jbHVkZSB0aGUgZmlsZW5hbWU9
Ii4uIiBwYXJ0IGluIHRoZSBoZWFkZXIsIGV2ZW4gaWYgdGhlIGZpbGVuYW1lIGlzIGVtcHR5CiAg
ICAgICAgICAgICAgICAgRm9ybURhdGFCdWlsZGVyOjphZGRGaWxlbmFtZVRvTXVsdGlQYXJ0SGVh
ZGVyKGhlYWRlciwgZW5jb2RpbmcsIG5hbWUpOwogCiAgICAgICAgICAgICAgICAgLy8gQWRkIHRo
ZSBjb250ZW50IHR5cGUgaWYgYXZhaWxhYmxlLCBvciAiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFt
IiBvdGhlcndpc2UgKFJGQyAxODY3KS4KLSAgICAgICAgICAgICAgICBTdHJpbmcgY29udGVudFR5
cGUgPSB2YWx1ZS5ibG9iKCktPnR5cGUoKTsKKyAgICAgICAgICAgICAgICBhdXRvIGNvbnRlbnRU
eXBlID0gZmlsZS0+dHlwZSgpOwogICAgICAgICAgICAgICAgIGlmIChjb250ZW50VHlwZS5pc0Vt
cHR5KCkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRUeXBlID0gImFwcGxpY2F0aW9uL29j
dGV0LXN0cmVhbSI7CiAgICAgICAgICAgICAgICAgQVNTRVJUKEJsb2I6OmlzTm9ybWFsaXplZENv
bnRlbnRUeXBlKGNvbnRlbnRUeXBlKSk7CkBAIC0yNDQsMjAgKzIyNywyMyBAQCB2b2lkIEZvcm1E
YXRhOjphcHBlbmRLZXlWYWx1ZVBhaXJJdGVtcyhjCiAKICAgICAgICAgICAgIC8vIEFwcGVuZCBi
b2R5CiAgICAgICAgICAgICBhcHBlbmREYXRhKGhlYWRlci5kYXRhKCksIGhlYWRlci5zaXplKCkp
OwotICAgICAgICAgICAgaWYgKHZhbHVlLmJsb2IoKSkgewotICAgICAgICAgICAgICAgIGlmIChp
czxGaWxlPigqdmFsdWUuYmxvYigpKSkgewotICAgICAgICAgICAgICAgICAgICBGaWxlJiBmaWxl
ID0gZG93bmNhc3Q8RmlsZT4oKnZhbHVlLmJsb2IoKSk7Ci0gICAgICAgICAgICAgICAgICAgIC8v
IERvIG5vdCBhZGQgdGhlIGZpbGUgaWYgdGhlIHBhdGggaXMgZW1wdHkuCi0gICAgICAgICAgICAg
ICAgICAgIGlmICghZmlsZS5wYXRoKCkuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgICAgICAg
ICAgYXBwZW5kRmlsZShmaWxlLnBhdGgoKSwgc2hvdWxkR2VuZXJhdGVGaWxlKTsKLSAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxSZWZQdHI8
RmlsZT4+KGl0ZW0uZGF0YSgpKSkgeworICAgICAgICAgICAgICAgIGF1dG8gZmlsZSA9IFdURjo6
Z2V0PFJlZlB0cjxGaWxlPj4oaXRlbS5kYXRhKCkpOworICAgICAgICAgICAgICAgIGlmICghZmls
ZS0+cGF0aCgpLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kRmlsZShmaWxl
LT5wYXRoKCksIHNob3VsZEdlbmVyYXRlRmlsZSk7CiAgICAgICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgICAgICBhcHBlbmRCbG9iKHZhbHVlLmJsb2IoKS0+dXJsKCkpOwotICAgICAg
ICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgYXBwZW5kRGF0YSh2YWx1ZS5kYXRhKCkuZGF0
YSgpLCB2YWx1ZS5kYXRhKCkubGVuZ3RoKCkpOworICAgICAgICAgICAgICAgICAgICBhcHBlbmRC
bG9iKGZpbGUtPnVybCgpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
YXV0byBub3JtYWxpemVkU3RpbmdEYXRhID0gbGlzdC5ub3JtYWxpemVTdHJpbmcoV1RGOjpnZXQ8
U3RyaW5nPihpdGVtLmRhdGEoKSkpOworICAgICAgICAgICAgICAgIGFwcGVuZERhdGEobm9ybWFs
aXplZFN0aW5nRGF0YS5kYXRhKCksIG5vcm1hbGl6ZWRTdGluZ0RhdGEubGVuZ3RoKCkpOworICAg
ICAgICAgICAgfQogICAgICAgICAgICAgYXBwZW5kRGF0YSgiXHJcbiIsIDIpOwotICAgICAgICB9
IGVsc2UKLSAgICAgICAgICAgIEZvcm1EYXRhQnVpbGRlcjo6YWRkS2V5VmFsdWVQYWlyQXNGb3Jt
RGF0YShlbmNvZGVkRGF0YSwga2V5LmRhdGEoKSwgdmFsdWUuZGF0YSgpLCBlbmNvZGluZ1R5cGUp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKFdURjo6aG9sZHNfYWx0ZXJu
YXRpdmU8U3RyaW5nPihpdGVtLmRhdGEoKSkpOworCisgICAgICAgICAgICBhdXRvIG5vcm1hbGl6
ZWRTdGluZ0RhdGEgPSBsaXN0Lm5vcm1hbGl6ZVN0cmluZyhXVEY6OmdldDxTdHJpbmc+KGl0ZW0u
ZGF0YSgpKSk7CisgICAgICAgICAgICBGb3JtRGF0YUJ1aWxkZXI6OmFkZEtleVZhbHVlUGFpckFz
Rm9ybURhdGEoZW5jb2RlZERhdGEsIG5vcm1hbGl6ZWROYW1lLCBub3JtYWxpemVkU3RpbmdEYXRh
LCBlbmNvZGluZ1R5cGUpOworICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKGlzTXVsdGlQYXJ0
Rm9ybSkKQEAgLTI3MCwyOSArMjU2LDI4IEBAIGNoYXIqIEZvcm1EYXRhOjpleHBhbmREYXRhU3Rv
cmUoc2l6ZV90IHMKIHsKICAgICBtX2xlbmd0aEluQnl0ZXMgPSBzdGQ6Om51bGxvcHQ7CiAgICAg
aWYgKG1fZWxlbWVudHMuaXNFbXB0eSgpIHx8IG1fZWxlbWVudHMubGFzdCgpLm1fdHlwZSAhPSBG
b3JtRGF0YUVsZW1lbnQ6OlR5cGU6OkRhdGEpCi0gICAgICAgIG1fZWxlbWVudHMuYXBwZW5kKEZv
cm1EYXRhRWxlbWVudCgpKTsKLSAgICBGb3JtRGF0YUVsZW1lbnQmIGUgPSBtX2VsZW1lbnRzLmxh
c3QoKTsKKyAgICAgICAgbV9lbGVtZW50cy5hcHBlbmQoeyB9KTsKKyAgICBhdXRvJiBlID0gbV9l
bGVtZW50cy5sYXN0KCk7CiAgICAgc2l6ZV90IG9sZFNpemUgPSBlLm1fZGF0YS5zaXplKCk7CiAg
ICAgZS5tX2RhdGEuZ3JvdyhvbGRTaXplICsgc2l6ZSk7CiAgICAgcmV0dXJuIGUubV9kYXRhLmRh
dGEoKSArIG9sZFNpemU7CiB9CiAKLXZvaWQgRm9ybURhdGE6OmZsYXR0ZW4oVmVjdG9yPGNoYXI+
JiBkYXRhKSBjb25zdAorVmVjdG9yPGNoYXI+IEZvcm1EYXRhOjpmbGF0dGVuKCkgY29uc3QKIHsK
ICAgICAvLyBDb25jYXRlbmF0ZSBhbGwgdGhlIGJ5dGUgYXJyYXlzLCBidXQgb21pdCBhbnkgZmls
ZXMuCi0gICAgZGF0YS5jbGVhcigpOwotICAgIHNpemVfdCBuID0gbV9lbGVtZW50cy5zaXplKCk7
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuOyArK2kpIHsKLSAgICAgICAgY29uc3QgRm9y
bURhdGFFbGVtZW50JiBlID0gbV9lbGVtZW50c1tpXTsKLSAgICAgICAgaWYgKGUubV90eXBlID09
IEZvcm1EYXRhRWxlbWVudDo6VHlwZTo6RGF0YSkKLSAgICAgICAgICAgIGRhdGEuYXBwZW5kKGUu
bV9kYXRhLmRhdGEoKSwgc3RhdGljX2Nhc3Q8c2l6ZV90PihlLm1fZGF0YS5zaXplKCkpKTsKKyAg
ICBWZWN0b3I8Y2hhcj4gZGF0YTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGVsZW1lbnQgOiBtX2Vs
ZW1lbnRzKSB7CisgICAgICAgIGlmIChlbGVtZW50Lm1fdHlwZSA9PSBGb3JtRGF0YUVsZW1lbnQ6
OlR5cGU6OkRhdGEpCisgICAgICAgICAgICBkYXRhLmFwcGVuZChlbGVtZW50Lm1fZGF0YS5kYXRh
KCksIHN0YXRpY19jYXN0PHNpemVfdD4oZWxlbWVudC5tX2RhdGEuc2l6ZSgpKSk7CiAgICAgfQor
ICAgIAorICAgIHJldHVybiBkYXRhOwogfQogCiBTdHJpbmcgRm9ybURhdGE6OmZsYXR0ZW5Ub1N0
cmluZygpIGNvbnN0CiB7Ci0gICAgVmVjdG9yPGNoYXI+IGJ5dGVzOwotICAgIGZsYXR0ZW4oYnl0
ZXMpOworICAgIGF1dG8gYnl0ZXMgPSBmbGF0dGVuKCk7CiAgICAgcmV0dXJuIExhdGluMUVuY29k
aW5nKCkuZGVjb2RlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGJ5dGVzLmRhdGEoKSks
IGJ5dGVzLnNpemUoKSk7CiB9CiAKQEAgLTMwMiwxNiArMjg3LDE0IEBAIHN0YXRpYyB2b2lkIGFw
cGVuZEJsb2JSZXNvbHZlZChGb3JtRGF0YSoKICAgICAgICAgTE9HX0VSUk9SKCJUcmllZCB0byBy
ZXNvbHZlIGEgYmxvYiB3aXRob3V0IGEgdXNhYmxlIHJlZ2lzdHJ5Iik7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CisKICAgICBCbG9iRGF0YSogYmxvYkRhdGEgPSBzdGF0aWNfY2FzdDxCbG9iUmVn
aXN0cnlJbXBsJj4oYmxvYlJlZ2lzdHJ5KCkpLmdldEJsb2JEYXRhRnJvbVVSTCh1cmwpOwogICAg
IGlmICghYmxvYkRhdGEpIHsKICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgZ2V0IGJsb2Ig
ZGF0YSBmcm9tIGEgcmVnaXN0cnkiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIEJs
b2JEYXRhSXRlbUxpc3Q6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gYmxvYkRhdGEtPml0ZW1zKCkuYmVn
aW4oKTsKLSAgICBjb25zdCBCbG9iRGF0YUl0ZW1MaXN0Ojpjb25zdF9pdGVyYXRvciBpdGVuZCA9
IGJsb2JEYXRhLT5pdGVtcygpLmVuZCgpOwotICAgIGZvciAoOyBpdCAhPSBpdGVuZDsgKytpdCkg
ewotICAgICAgICBjb25zdCBCbG9iRGF0YUl0ZW0mIGJsb2JJdGVtID0gKml0OworICAgIGZvciAo
Y29uc3QgYXV0byYgYmxvYkl0ZW0gOiBibG9iRGF0YS0+aXRlbXMoKSkgewogICAgICAgICBpZiAo
YmxvYkl0ZW0udHlwZSgpID09IEJsb2JEYXRhSXRlbTo6VHlwZTo6RGF0YSkgewogICAgICAgICAg
ICAgQVNTRVJUKGJsb2JJdGVtLmRhdGEoKS5kYXRhKCkpOwogICAgICAgICAgICAgZm9ybURhdGEt
PmFwcGVuZERhdGEoYmxvYkl0ZW0uZGF0YSgpLmRhdGEoKS0+ZGF0YSgpICsgc3RhdGljX2Nhc3Q8
aW50PihibG9iSXRlbS5vZmZzZXQoKSksIHN0YXRpY19jYXN0PGludD4oYmxvYkl0ZW0ubGVuZ3Ro
KCkpKTsKQEAgLTMyNiwxMCArMzA5LDggQEAgUmVmPEZvcm1EYXRhPiBGb3JtRGF0YTo6cmVzb2x2
ZUJsb2JSZWZlcgogewogICAgIC8vIEZpcnN0IGNoZWNrIGlmIGFueSBibG9icyBuZWVkcyB0byBi
ZSByZXNvbHZlZCwgb3Igd2UgY2FuIHRha2UgdGhlIGZhc3QgcGF0aC4KICAgICBib29sIGhhc0Js
b2IgPSBmYWxzZTsKLSAgICBWZWN0b3I8Rm9ybURhdGFFbGVtZW50Pjo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBlbGVtZW50cygpLmJlZ2luKCk7Ci0gICAgY29uc3QgVmVjdG9yPEZvcm1EYXRhRWxlbWVu
dD46OmNvbnN0X2l0ZXJhdG9yIGl0ZW5kID0gZWxlbWVudHMoKS5lbmQoKTsKLSAgICBmb3IgKDsg
aXQgIT0gaXRlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT5tX3R5cGUgPT0gRm9ybURhdGFF
bGVtZW50OjpUeXBlOjpFbmNvZGVkQmxvYikgeworICAgIGZvciAoY29uc3QgYXV0byYgZWxlbWVu
dCA6IG1fZWxlbWVudHMpIHsKKyAgICAgICAgaWYgKGVsZW1lbnQubV90eXBlID09IEZvcm1EYXRh
RWxlbWVudDo6VHlwZTo6RW5jb2RlZEJsb2IpIHsKICAgICAgICAgICAgIGhhc0Jsb2IgPSB0cnVl
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTMzOSwxMiArMzIwLDExIEBAIFJl
ZjxGb3JtRGF0YT4gRm9ybURhdGE6OnJlc29sdmVCbG9iUmVmZXIKICAgICAgICAgcmV0dXJuICp0
aGlzOwogCiAgICAgLy8gQ3JlYXRlIGEgY29weSB0byBhcHBlbmQgdGhlIHJlc3VsdCBpbnRvLgot
ICAgIFJlZjxGb3JtRGF0YT4gbmV3Rm9ybURhdGEgPSBGb3JtRGF0YTo6Y3JlYXRlKCk7CisgICAg
YXV0byBuZXdGb3JtRGF0YSA9IEZvcm1EYXRhOjpjcmVhdGUoKTsKICAgICBuZXdGb3JtRGF0YS0+
c2V0QWx3YXlzU3RyZWFtKGFsd2F5c1N0cmVhbSgpKTsKICAgICBuZXdGb3JtRGF0YS0+c2V0SWRl
bnRpZmllcihpZGVudGlmaWVyKCkpOwotICAgIGl0ID0gZWxlbWVudHMoKS5iZWdpbigpOwotICAg
IGZvciAoOyBpdCAhPSBpdGVuZDsgKytpdCkgewotICAgICAgICBjb25zdCBGb3JtRGF0YUVsZW1l
bnQmIGVsZW1lbnQgPSAqaXQ7CisKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGVsZW1lbnQgOiBtX2Vs
ZW1lbnRzKSB7CiAgICAgICAgIGlmIChlbGVtZW50Lm1fdHlwZSA9PSBGb3JtRGF0YUVsZW1lbnQ6
OlR5cGU6OkRhdGEpCiAgICAgICAgICAgICBuZXdGb3JtRGF0YS0+YXBwZW5kRGF0YShlbGVtZW50
Lm1fZGF0YS5kYXRhKCksIGVsZW1lbnQubV9kYXRhLnNpemUoKSk7CiAgICAgICAgIGVsc2UgaWYg
KGVsZW1lbnQubV90eXBlID09IEZvcm1EYXRhRWxlbWVudDo6VHlwZTo6RW5jb2RlZEZpbGUpCkBA
IC0zNjMsNyArMzQzLDcgQEAgdm9pZCBGb3JtRGF0YTo6Z2VuZXJhdGVGaWxlcyhEb2N1bWVudCog
ZAogICAgIGlmICghcGFnZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZm9yIChGb3JtRGF0YUVs
ZW1lbnQmIGVsZW1lbnQgOiBtX2VsZW1lbnRzKSB7CisgICAgZm9yIChhdXRvJiBlbGVtZW50IDog
bV9lbGVtZW50cykgewogICAgICAgICBpZiAoZWxlbWVudC5tX3R5cGUgPT0gRm9ybURhdGFFbGVt
ZW50OjpUeXBlOjpFbmNvZGVkRmlsZSAmJiBlbGVtZW50Lm1fc2hvdWxkR2VuZXJhdGVGaWxlKSB7
CiAgICAgICAgICAgICBBU1NFUlQoIWVsZW1lbnQubV9vd25zR2VuZXJhdGVkRmlsZSk7CiAgICAg
ICAgICAgICBBU1NFUlQoZWxlbWVudC5tX2dlbmVyYXRlZEZpbGVuYW1lLmlzRW1wdHkoKSk7CkBA
IC0zNzgsNyArMzU4LDcgQEAgdm9pZCBGb3JtRGF0YTo6Z2VuZXJhdGVGaWxlcyhEb2N1bWVudCog
ZAogCiBib29sIEZvcm1EYXRhOjpoYXNHZW5lcmF0ZWRGaWxlcygpIGNvbnN0CiB7Ci0gICAgZm9y
IChjb25zdCBGb3JtRGF0YUVsZW1lbnQmIGVsZW1lbnQgOiBtX2VsZW1lbnRzKSB7CisgICAgZm9y
IChjb25zdCBhdXRvJiBlbGVtZW50IDogbV9lbGVtZW50cykgewogICAgICAgICBpZiAoZWxlbWVu
dC5tX3R5cGUgPT0gRm9ybURhdGFFbGVtZW50OjpUeXBlOjpFbmNvZGVkRmlsZSAmJiAhZWxlbWVu
dC5tX2dlbmVyYXRlZEZpbGVuYW1lLmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KQEAgLTM4Nyw3ICszNjcsNyBAQCBib29sIEZvcm1EYXRhOjpoYXNHZW5lcmF0ZWRG
aWxlcygpIGNvbnN0CiAKIGJvb2wgRm9ybURhdGE6Omhhc093bmVkR2VuZXJhdGVkRmlsZXMoKSBj
b25zdAogewotICAgIGZvciAoY29uc3QgRm9ybURhdGFFbGVtZW50JiBlbGVtZW50IDogbV9lbGVt
ZW50cykgeworICAgIGZvciAoY29uc3QgYXV0byYgZWxlbWVudCA6IG1fZWxlbWVudHMpIHsKICAg
ICAgICAgaWYgKGVsZW1lbnQubV90eXBlID09IEZvcm1EYXRhRWxlbWVudDo6VHlwZTo6RW5jb2Rl
ZEZpbGUgJiYgZWxlbWVudC5tX293bnNHZW5lcmF0ZWRGaWxlKSB7CiAgICAgICAgICAgICBBU1NF
UlQoIWVsZW1lbnQubV9nZW5lcmF0ZWRGaWxlbmFtZS5pc0VtcHR5KCkpOwogICAgICAgICAgICAg
cmV0dXJuIHRydWU7CkBAIC0zOTgsNyArMzc4LDcgQEAgYm9vbCBGb3JtRGF0YTo6aGFzT3duZWRH
ZW5lcmF0ZWRGaWxlcygpIAogCiB2b2lkIEZvcm1EYXRhOjpyZW1vdmVHZW5lcmF0ZWRGaWxlc0lm
TmVlZGVkKCkKIHsKLSAgICBmb3IgKEZvcm1EYXRhRWxlbWVudCYgZWxlbWVudCA6IG1fZWxlbWVu
dHMpIHsKKyAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBtX2VsZW1lbnRzKSB7CiAgICAgICAgIGlm
IChlbGVtZW50Lm1fdHlwZSA9PSBGb3JtRGF0YUVsZW1lbnQ6OlR5cGU6OkVuY29kZWRGaWxlICYm
IGVsZW1lbnQubV9vd25zR2VuZXJhdGVkRmlsZSkgewogICAgICAgICAgICAgQVNTRVJUKCFlbGVt
ZW50Lm1fZ2VuZXJhdGVkRmlsZW5hbWUuaXNFbXB0eSgpKTsKICAgICAgICAgICAgIEFTU0VSVChl
bGVtZW50Lm1fc2hvdWxkR2VuZXJhdGVGaWxlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvRm9ybURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmgJKHJldmlzaW9uIDIyMTgyNykKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMjIyLDcg
KzIyMiw3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGVuZEJsb2IoY29u
c3QgVVJMJiBibG9iVVJMKTsKICAgICBjaGFyKiBleHBhbmREYXRhU3RvcmUoc2l6ZV90KTsKIAot
ICAgIHZvaWQgZmxhdHRlbihWZWN0b3I8Y2hhcj4mKSBjb25zdDsgLy8gb21pdHMgZmlsZXMKKyAg
ICBWZWN0b3I8Y2hhcj4gZmxhdHRlbigpIGNvbnN0OyAvLyBvbWl0cyBmaWxlcwogICAgIFN0cmlu
ZyBmbGF0dGVuVG9TdHJpbmcoKSBjb25zdDsgLy8gb21pdHMgZmlsZXMKIAogICAgIC8vIFJlc29s
dmUgYWxsIGJsb2IgcmVmZXJlbmNlcyBzbyB3ZSBvbmx5IGhhdmUgZmlsZSBhbmQgZGF0YS4KSW5k
ZXg6IExheW91dFRlc3RzL2ltcG9ydGVkL3czYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL0NoYW5nZUxvZwkocmV2aXNpb24gMjIxODI4KQorKysgTGF5
b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDIwIEBACisyMDE3LTA5LTA5ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAg
ICAgRmluaXNoIG9mZiB0aGUgRm9ybURhdGEgaW1wbGVtZW50YXRpb24KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NjY1OQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL1hN
TEh0dHBSZXF1ZXN0L0Zvcm1EYXRhLWFwcGVuZC1leHBlY3RlZC50eHQ6CisgICAgICAgICogd2Vi
LXBsYXRmb3JtLXRlc3RzL1hNTEh0dHBSZXF1ZXN0L2Zvcm1kYXRhLWRlbGV0ZS1leHBlY3RlZC50
eHQ6CisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL1hNTEh0dHBSZXF1ZXN0L2Zvcm1kYXRh
LWZvcmVhY2gtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9YTUxI
dHRwUmVxdWVzdC9mb3JtZGF0YS1nZXQtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHdlYi1wbGF0
Zm9ybS10ZXN0cy9YTUxIdHRwUmVxdWVzdC9mb3JtZGF0YS1oYXMtZXhwZWN0ZWQudHh0OgorICAg
ICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9YTUxIdHRwUmVxdWVzdC9mb3JtZGF0YS1zZXQtZXhw
ZWN0ZWQudHh0OgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9YTUxIdHRwUmVxdWVzdC9p
bnRlcmZhY2VzLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgCisgICAgICAgICAgICBVcGRhdGUgcmVz
dWx0cy4KKwogMjAxNy0wOS0wOCAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CiAK
ICAgICAgICAgUmVtb3ZlIHN1cHBvcnQgZm9yID4+IGRlc2NlbmRhbnQgY29tYmluYXRvciBzeW50
YXgKSW5kZXg6IExheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvWE1M
SHR0cFJlcXVlc3QvRm9ybURhdGEtYXBwZW5kLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL1hNTEh0dHBSZXF1ZXN0
L0Zvcm1EYXRhLWFwcGVuZC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDIyMTgyNykKKysrIExheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvWE1MSHR0cFJlcXVlc3QvRm9y
bURhdGEtYXBwZW5kLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSwxNiArMSwxNiBA
QAogCiBQQVNTIFBhc3NpbmcgYSBTdHJpbmcgb2JqZWN0IHRvIEZvcm1EYXRhLmFwcGVuZCBzaG91
bGQgd29yay4gCi1GQUlMIHRlc3RGb3JtRGF0YUFwcGVuZDEgY3JlYXRlX2Zvcm1kYXRhKFsna2V5
JywgJ3ZhbHVlMSddKS5nZXQgaXMgbm90IGEgZnVuY3Rpb24uIChJbiAnY3JlYXRlX2Zvcm1kYXRh
KFsna2V5JywgJ3ZhbHVlMSddKS5nZXQoJ2tleScpJywgJ2NyZWF0ZV9mb3JtZGF0YShbJ2tleScs
ICd2YWx1ZTEnXSkuZ2V0JyBpcyB1bmRlZmluZWQpCi1GQUlMIHRlc3RGb3JtRGF0YUFwcGVuZDIg
Y3JlYXRlX2Zvcm1kYXRhKFsna2V5JywgJ3ZhbHVlMiddLCBbJ2tleScsICd2YWx1ZTEnXSkuZ2V0
IGlzIG5vdCBhIGZ1bmN0aW9uLiAoSW4gJ2NyZWF0ZV9mb3JtZGF0YShbJ2tleScsICd2YWx1ZTIn
XSwgWydrZXknLCAndmFsdWUxJ10pLmdldCgna2V5JyknLCAnY3JlYXRlX2Zvcm1kYXRhKFsna2V5
JywgJ3ZhbHVlMiddLCBbJ2tleScsICd2YWx1ZTEnXSkuZ2V0JyBpcyB1bmRlZmluZWQpCi1GQUlM
IHRlc3RGb3JtRGF0YUFwcGVuZFVuZGVmaW5lZDEgY3JlYXRlX2Zvcm1kYXRhKFsna2V5JywgdW5k
ZWZpbmVkXSkuZ2V0IGlzIG5vdCBhIGZ1bmN0aW9uLiAoSW4gJ2NyZWF0ZV9mb3JtZGF0YShbJ2tl
eScsIHVuZGVmaW5lZF0pLmdldCgna2V5JyknLCAnY3JlYXRlX2Zvcm1kYXRhKFsna2V5JywgdW5k
ZWZpbmVkXSkuZ2V0JyBpcyB1bmRlZmluZWQpCi1GQUlMIHRlc3RGb3JtRGF0YUFwcGVuZFVuZGVm
aW5lZDIgY3JlYXRlX2Zvcm1kYXRhKFsna2V5JywgdW5kZWZpbmVkXSwgWydrZXknLCAndmFsdWUx
J10pLmdldCBpcyBub3QgYSBmdW5jdGlvbi4gKEluICdjcmVhdGVfZm9ybWRhdGEoWydrZXknLCB1
bmRlZmluZWRdLCBbJ2tleScsICd2YWx1ZTEnXSkuZ2V0KCdrZXknKScsICdjcmVhdGVfZm9ybWRh
dGEoWydrZXknLCB1bmRlZmluZWRdLCBbJ2tleScsICd2YWx1ZTEnXSkuZ2V0JyBpcyB1bmRlZmlu
ZWQpCi1GQUlMIHRlc3RGb3JtRGF0YUFwcGVuZE51bGwxIGNyZWF0ZV9mb3JtZGF0YShbJ2tleScs
IG51bGxdKS5nZXQgaXMgbm90IGEgZnVuY3Rpb24uIChJbiAnY3JlYXRlX2Zvcm1kYXRhKFsna2V5
JywgbnVsbF0pLmdldCgna2V5JyknLCAnY3JlYXRlX2Zvcm1kYXRhKFsna2V5JywgbnVsbF0pLmdl
dCcgaXMgdW5kZWZpbmVkKQotRkFJTCB0ZXN0Rm9ybURhdGFBcHBlbmROdWxsMiBjcmVhdGVfZm9y
bWRhdGEoWydrZXknLCBudWxsXSwgWydrZXknLCAndmFsdWUxJ10pLmdldCBpcyBub3QgYSBmdW5j
dGlvbi4gKEluICdjcmVhdGVfZm9ybWRhdGEoWydrZXknLCBudWxsXSwgWydrZXknLCAndmFsdWUx
J10pLmdldCgna2V5JyknLCAnY3JlYXRlX2Zvcm1kYXRhKFsna2V5JywgbnVsbF0sIFsna2V5Jywg
J3ZhbHVlMSddKS5nZXQnIGlzIHVuZGVmaW5lZCkKLUZBSUwgdGVzdEZvcm1EYXRhQXBwZW5kVG9G
b3JtMSBmZC5nZXQgaXMgbm90IGEgZnVuY3Rpb24uIChJbiAnZmQuZ2V0KCdrZXknKScsICdmZC5n
ZXQnIGlzIHVuZGVmaW5lZCkKLUZBSUwgdGVzdEZvcm1EYXRhQXBwZW5kVG9Gb3JtMiBmZC5nZXQg
aXMgbm90IGEgZnVuY3Rpb24uIChJbiAnZmQuZ2V0KCdrZXknKScsICdmZC5nZXQnIGlzIHVuZGVm
aW5lZCkKLUZBSUwgdGVzdEZvcm1EYXRhQXBwZW5kVG9Gb3JtVW5kZWZpbmVkMSBmZC5nZXQgaXMg
bm90IGEgZnVuY3Rpb24uIChJbiAnZmQuZ2V0KCdrZXknKScsICdmZC5nZXQnIGlzIHVuZGVmaW5l
ZCkKLUZBSUwgdGVzdEZvcm1EYXRhQXBwZW5kVG9Gb3JtVW5kZWZpbmVkMiBmZC5nZXQgaXMgbm90
IGEgZnVuY3Rpb24uIChJbiAnZmQuZ2V0KCdrZXknKScsICdmZC5nZXQnIGlzIHVuZGVmaW5lZCkK
LUZBSUwgdGVzdEZvcm1EYXRhQXBwZW5kVG9Gb3JtTnVsbDEgZmQuZ2V0IGlzIG5vdCBhIGZ1bmN0
aW9uLiAoSW4gJ2ZkLmdldCgna2V5JyknLCAnZmQuZ2V0JyBpcyB1bmRlZmluZWQpCi1GQUlMIHRl
c3RGb3JtRGF0YUFwcGVuZFRvRm9ybU51bGwyIGZkLmdldCBpcyBub3QgYSBmdW5jdGlvbi4gKElu
ICdmZC5nZXQoJ2tleScpJywgJ2ZkLmdldCcgaXMgdW5kZWZpbmVkKQotRkFJTCB0ZXN0Rm9ybURh
dGFBcHBlbmRFbXB0eUJsb2IgY3JlYXRlX2Zvcm1kYXRhKFsna2V5JywgbmV3IEJsb2IoKSwgJ2Js
YW5rLnR4dCddKS5nZXQgaXMgbm90IGEgZnVuY3Rpb24uIChJbiAnY3JlYXRlX2Zvcm1kYXRhKFsn
a2V5JywgbmV3IEJsb2IoKSwgJ2JsYW5rLnR4dCddKS5nZXQoJ2tleScpJywgJ2NyZWF0ZV9mb3Jt
ZGF0YShbJ2tleScsIG5ldyBCbG9iKCksICdibGFuay50eHQnXSkuZ2V0JyBpcyB1bmRlZmluZWQp
CitQQVNTIHRlc3RGb3JtRGF0YUFwcGVuZDEgCitQQVNTIHRlc3RGb3JtRGF0YUFwcGVuZDIgCitQ
QVNTIHRlc3RGb3JtRGF0YUFwcGVuZFVuZGVmaW5lZDEgCitQQVNTIHRlc3RGb3JtRGF0YUFwcGVu
ZFVuZGVmaW5lZDIgCitQQVNTIHRlc3RGb3JtRGF0YUFwcGVuZE51bGwxIAorUEFTUyB0ZXN0Rm9y
bURhdGFBcHBlbmROdWxsMiAKK1BBU1MgdGVzdEZvcm1EYXRhQXBwZW5kVG9Gb3JtMSAKK1BBU1Mg
dGVzdEZvcm1EYXRhQXBwZW5kVG9Gb3JtMiAKK1BBU1MgdGVzdEZvcm1EYXRhQXBwZW5kVG9Gb3Jt
VW5kZWZpbmVkMSAKK1BBU1MgdGVzdEZvcm1EYXRhQXBwZW5kVG9Gb3JtVW5kZWZpbmVkMiAKK1BB
U1MgdGVzdEZvcm1EYXRhQXBwZW5kVG9Gb3JtTnVsbDEgCitQQVNTIHRlc3RGb3JtRGF0YUFwcGVu
ZFRvRm9ybU51bGwyIAorUEFTUyB0ZXN0Rm9ybURhdGFBcHBlbmRFbXB0eUJsb2IgCiAKSW5kZXg6
IExheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvWE1MSHR0cFJlcXVl
c3QvZm9ybWRhdGEtZGVsZXRlLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL1hNTEh0dHBSZXF1ZXN0L2Zvcm1kYXRh
LWRlbGV0ZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDIyMTgyNykKKysrIExheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvWE1MSHR0cFJlcXVlc3QvZm9ybWRhdGEtZGVs
ZXRlLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSw5ICsxLDkgQEAKIAotRkFJTCB0
ZXN0Rm9ybURhdGFEZWxldGUgZmQuZGVsZXRlIGlzIG5vdCBhIGZ1bmN0aW9uLiAoSW4gJ2ZkLmRl
bGV0ZSgna2V5JyknLCAnZmQuZGVsZXRlJyBpcyB1bmRlZmluZWQpCi1GQUlMIHRlc3RGb3JtRGF0
YURlbGV0ZUZyb21Gb3JtIGZkLmRlbGV0ZSBpcyBub3QgYSBmdW5jdGlvbi4gKEluICdmZC5kZWxl
dGUoJ2tleScpJywgJ2ZkLmRlbGV0ZScgaXMgdW5kZWZpbmVkKQotRkFJTCB0ZXN0Rm9ybURhdGFE
ZWxldGVGcm9tRm9ybU5vbkV4aXN0ZW50S2V5IGZkLmRlbGV0ZSBpcyBub3QgYSBmdW5jdGlvbi4g
KEluICdmZC5kZWxldGUoJ25pbCcpJywgJ2ZkLmRlbGV0ZScgaXMgdW5kZWZpbmVkKQotRkFJTCB0
ZXN0Rm9ybURhdGFEZWxldGVGcm9tRm9ybU90aGVyS2V5IGZkLmRlbGV0ZSBpcyBub3QgYSBmdW5j
dGlvbi4gKEluICdmZC5kZWxldGUoJ2tleTEnKScsICdmZC5kZWxldGUnIGlzIHVuZGVmaW5lZCkK
LUZBSUwgdGVzdEZvcm1EYXRhRGVsZXRlRnJvbUVtcHR5Rm9ybSBmZC5kZWxldGUgaXMgbm90IGEg
ZnVuY3Rpb24uIChJbiAnZmQuZGVsZXRlKCdrZXknKScsICdmZC5kZWxldGUnIGlzIHVuZGVmaW5l
ZCkKLUZBSUwgdGVzdEZvcm1EYXRhRGVsZXRlTm9uRXhpc3RlbnRLZXkgZmQuZGVsZXRlIGlzIG5v
dCBhIGZ1bmN0aW9uLiAoSW4gJ2ZkLmRlbGV0ZSgnbmlsJyknLCAnZmQuZGVsZXRlJyBpcyB1bmRl
ZmluZWQpCi1GQUlMIHRlc3RGb3JtRGF0YURlbGV0ZU90aGVyS2V5IGZkLmRlbGV0ZSBpcyBub3Qg
YSBmdW5jdGlvbi4gKEluICdmZC5kZWxldGUoJ2tleTEnKScsICdmZC5kZWxldGUnIGlzIHVuZGVm
aW5lZCkKK1BBU1MgdGVzdEZvcm1EYXRhRGVsZXRlIAorUEFTUyB0ZXN0Rm9ybURhdGFEZWxldGVG
cm9tRm9ybSAKK1BBU1MgdGVzdEZvcm1EYXRhRGVsZXRlRnJvbUZvcm1Ob25FeGlzdGVudEtleSAK
K1BBU1MgdGVzdEZvcm1EYXRhRGVsZXRlRnJvbUZvcm1PdGhlcktleSAKK1BBU1MgdGVzdEZvcm1E
YXRhRGVsZXRlRnJvbUVtcHR5Rm9ybSAKK1BBU1MgdGVzdEZvcm1EYXRhRGVsZXRlTm9uRXhpc3Rl
bnRLZXkgCitQQVNTIHRlc3RGb3JtRGF0YURlbGV0ZU90aGVyS2V5IAogCkluZGV4OiBMYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL1hNTEh0dHBSZXF1ZXN0L2Zvcm1k
YXRhLWZvcmVhY2gtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2ltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvWE1MSHR0cFJlcXVlc3QvZm9ybWRhdGEtZm9yZWFj
aC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDIyMTgyNykKKysrIExheW91dFRlc3RzL2ltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvWE1MSHR0cFJlcXVlc3QvZm9ybWRhdGEtZm9yZWFjaC1l
eHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw2IEBACi1DT05TT0xFIE1FU1NB
R0U6IGxpbmUgMTY6IFR5cGVFcnJvcjogZmQuZGVsZXRlIGlzIG5vdCBhIGZ1bmN0aW9uLiAoSW4g
J2ZkLmRlbGV0ZSgnbjInKScsICdmZC5kZWxldGUnIGlzIHVuZGVmaW5lZCkKIAotRkFJTCBGb3Jt
RGF0YTogZm9yZWFjaCBUeXBlRXJyb3I6IGZkLmRlbGV0ZSBpcyBub3QgYSBmdW5jdGlvbi4gKElu
ICdmZC5kZWxldGUoJ24yJyknLCAnZmQuZGVsZXRlJyBpcyB1bmRlZmluZWQpCitQQVNTIEl0ZXJh
dG9yIHNob3VsZCByZXR1cm4gZHVwbGljYXRlIGtleXMgYW5kIG5vbi1kZWxldGVkIHZhbHVlcyAK
K1BBU1MgRW50cmllcyBpdGVyYXRvciBzaG91bGQgcmV0dXJuIGR1cGxpY2F0ZSBrZXlzIGFuZCBu
b24tZGVsZXRlZCB2YWx1ZXMgCitQQVNTIEtleXMgaXRlcmF0b3Igc2hvdWxkIHJldHVybiBkdXBs
aWNhdGVzIAorUEFTUyBWYWx1ZXMgaXRlcmF0b3Igc2hvdWxkIHJldHVybiBub24tZGVsZXRlZCB2
YWx1ZXMgCiAKSW5kZXg6IExheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvWE1MSHR0cFJlcXVlc3QvZm9ybWRhdGEtZ2V0LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL1hNTEh0dHBSZXF1
ZXN0L2Zvcm1kYXRhLWdldC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDIyMTgyNykKKysrIExheW91
dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvWE1MSHR0cFJlcXVlc3QvZm9y
bWRhdGEtZ2V0LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSwxNCArMSwxNCBAQAog
Ci1GQUlMIHRlc3RGb3JtRGF0YUdldCBjcmVhdGVfZm9ybWRhdGEoWydrZXknLCAndmFsdWUxJ10s
IFsna2V5JywgJ3ZhbHVlMiddKS5nZXQgaXMgbm90IGEgZnVuY3Rpb24uIChJbiAnY3JlYXRlX2Zv
cm1kYXRhKFsna2V5JywgJ3ZhbHVlMSddLCBbJ2tleScsICd2YWx1ZTInXSkuZ2V0KCdrZXknKScs
ICdjcmVhdGVfZm9ybWRhdGEoWydrZXknLCAndmFsdWUxJ10sIFsna2V5JywgJ3ZhbHVlMiddKS5n
ZXQnIGlzIHVuZGVmaW5lZCkKLUZBSUwgdGVzdEZvcm1EYXRhR2V0RnJvbUZvcm0gbmV3IEZvcm1E
YXRhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmb3JtJykpLmdldCBpcyBub3QgYSBmdW5jdGlv
bi4gKEluICduZXcgRm9ybURhdGEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Zvcm0nKSkuZ2V0
KCdrZXknKScsICduZXcgRm9ybURhdGEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Zvcm0nKSku
Z2V0JyBpcyB1bmRlZmluZWQpCi1GQUlMIHRlc3RGb3JtRGF0YUdldEZyb21Gb3JtTnVsbCBuZXcg
Rm9ybURhdGEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Zvcm0nKSkuZ2V0IGlzIG5vdCBhIGZ1
bmN0aW9uLiAoSW4gJ25ldyBGb3JtRGF0YShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZm9ybScp
KS5nZXQoJ25pbCcpJywgJ25ldyBGb3JtRGF0YShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZm9y
bScpKS5nZXQnIGlzIHVuZGVmaW5lZCkKLUZBSUwgdGVzdEZvcm1EYXRhR2V0RnJvbUVtcHR5Rm9y
bSBuZXcgRm9ybURhdGEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VtcHR5LWZvcm0nKSkuZ2V0
IGlzIG5vdCBhIGZ1bmN0aW9uLiAoSW4gJ25ldyBGb3JtRGF0YShkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgnZW1wdHktZm9ybScpKS5nZXQoJ2tleScpJywgJ25ldyBGb3JtRGF0YShkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgnZW1wdHktZm9ybScpKS5nZXQnIGlzIHVuZGVmaW5lZCkKLUZBSUwgdGVz
dEZvcm1EYXRhR2V0TnVsbDEgY3JlYXRlX2Zvcm1kYXRhKFsna2V5JywgJ3ZhbHVlMSddLCBbJ2tl
eScsICd2YWx1ZTInXSkuZ2V0IGlzIG5vdCBhIGZ1bmN0aW9uLiAoSW4gJ2NyZWF0ZV9mb3JtZGF0
YShbJ2tleScsICd2YWx1ZTEnXSwgWydrZXknLCAndmFsdWUyJ10pLmdldCgnbmlsJyknLCAnY3Jl
YXRlX2Zvcm1kYXRhKFsna2V5JywgJ3ZhbHVlMSddLCBbJ2tleScsICd2YWx1ZTInXSkuZ2V0JyBp
cyB1bmRlZmluZWQpCi1GQUlMIHRlc3RGb3JtRGF0YUdldE51bGwyIGNyZWF0ZV9mb3JtZGF0YSgp
LmdldCBpcyBub3QgYSBmdW5jdGlvbi4gKEluICdjcmVhdGVfZm9ybWRhdGEoKS5nZXQoJ2tleScp
JywgJ2NyZWF0ZV9mb3JtZGF0YSgpLmdldCcgaXMgdW5kZWZpbmVkKQotRkFJTCB0ZXN0Rm9ybURh
dGFHZXRBbGwgY3JlYXRlX2Zvcm1kYXRhKFsna2V5JywgJ3ZhbHVlMSddLCBbJ2tleScsICd2YWx1
ZTInXSkuZ2V0QWxsIGlzIG5vdCBhIGZ1bmN0aW9uLiAoSW4gJ2NyZWF0ZV9mb3JtZGF0YShbJ2tl
eScsICd2YWx1ZTEnXSwgWydrZXknLCAndmFsdWUyJ10pLmdldEFsbCgna2V5JyknLCAnY3JlYXRl
X2Zvcm1kYXRhKFsna2V5JywgJ3ZhbHVlMSddLCBbJ2tleScsICd2YWx1ZTInXSkuZ2V0QWxsJyBp
cyB1bmRlZmluZWQpCi1GQUlMIHRlc3RGb3JtRGF0YUdldEFsbEVtcHR5MSBjcmVhdGVfZm9ybWRh
dGEoWydrZXknLCAndmFsdWUxJ10sIFsna2V5JywgJ3ZhbHVlMiddKS5nZXRBbGwgaXMgbm90IGEg
ZnVuY3Rpb24uIChJbiAnY3JlYXRlX2Zvcm1kYXRhKFsna2V5JywgJ3ZhbHVlMSddLCBbJ2tleScs
ICd2YWx1ZTInXSkuZ2V0QWxsKCduaWwnKScsICdjcmVhdGVfZm9ybWRhdGEoWydrZXknLCAndmFs
dWUxJ10sIFsna2V5JywgJ3ZhbHVlMiddKS5nZXRBbGwnIGlzIHVuZGVmaW5lZCkKLUZBSUwgdGVz
dEZvcm1EYXRhR2V0QWxsRW1wdHkyIGNyZWF0ZV9mb3JtZGF0YSgpLmdldEFsbCBpcyBub3QgYSBm
dW5jdGlvbi4gKEluICdjcmVhdGVfZm9ybWRhdGEoKS5nZXRBbGwoJ2tleScpJywgJ2NyZWF0ZV9m
b3JtZGF0YSgpLmdldEFsbCcgaXMgdW5kZWZpbmVkKQotRkFJTCB0ZXN0Rm9ybURhdGFHZXRBbGxG
cm9tRm9ybSBuZXcgRm9ybURhdGEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Zvcm0nKSkuZ2V0
QWxsIGlzIG5vdCBhIGZ1bmN0aW9uLiAoSW4gJ25ldyBGb3JtRGF0YShkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgnZm9ybScpKS5nZXRBbGwoJ2tleScpJywgJ25ldyBGb3JtRGF0YShkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgnZm9ybScpKS5nZXRBbGwnIGlzIHVuZGVmaW5lZCkKLUZBSUwgdGVzdEZv
cm1EYXRhR2V0QWxsRnJvbUZvcm1OdWxsIG5ldyBGb3JtRGF0YShkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgnZm9ybScpKS5nZXRBbGwgaXMgbm90IGEgZnVuY3Rpb24uIChJbiAnbmV3IEZvcm1EYXRh
KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmb3JtJykpLmdldEFsbCgnbmlsJyknLCAnbmV3IEZv
cm1EYXRhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmb3JtJykpLmdldEFsbCcgaXMgdW5kZWZp
bmVkKQotRkFJTCB0ZXN0Rm9ybURhdGFHZXRBbGxGcm9tRW1wdHlGb3JtIG5ldyBGb3JtRGF0YShk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZW1wdHktZm9ybScpKS5nZXRBbGwgaXMgbm90IGEgZnVu
Y3Rpb24uIChJbiAnbmV3IEZvcm1EYXRhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlbXB0eS1m
b3JtJykpLmdldEFsbCgna2V5JyknLCAnbmV3IEZvcm1EYXRhKGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCdlbXB0eS1mb3JtJykpLmdldEFsbCcgaXMgdW5kZWZpbmVkKQorUEFTUyB0ZXN0Rm9ybURh
dGFHZXQgCitQQVNTIHRlc3RGb3JtRGF0YUdldEZyb21Gb3JtIAorUEFTUyB0ZXN0Rm9ybURhdGFH
ZXRGcm9tRm9ybU51bGwgCitQQVNTIHRlc3RGb3JtRGF0YUdldEZyb21FbXB0eUZvcm0gCitQQVNT
IHRlc3RGb3JtRGF0YUdldE51bGwxIAorUEFTUyB0ZXN0Rm9ybURhdGFHZXROdWxsMiAKK1BBU1Mg
dGVzdEZvcm1EYXRhR2V0QWxsIAorUEFTUyB0ZXN0Rm9ybURhdGFHZXRBbGxFbXB0eTEgCitQQVNT
IHRlc3RGb3JtRGF0YUdldEFsbEVtcHR5MiAKK1BBU1MgdGVzdEZvcm1EYXRhR2V0QWxsRnJvbUZv
cm0gCitQQVNTIHRlc3RGb3JtRGF0YUdldEFsbEZyb21Gb3JtTnVsbCAKK1BBU1MgdGVzdEZvcm1E
YXRhR2V0QWxsRnJvbUVtcHR5Rm9ybSAKIApJbmRleDogTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9YTUxIdHRwUmVxdWVzdC9mb3JtZGF0YS1oYXMtZXhwZWN0ZWQu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvWE1MSHR0cFJlcXVlc3QvZm9ybWRhdGEtaGFzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24g
MjIxODI3KQorKysgTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9Y
TUxIdHRwUmVxdWVzdC9mb3JtZGF0YS1oYXMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBA
IC0xLDggKzEsOCBAQAogCi1GQUlMIHRlc3RGb3JtRGF0YUhhcyBjcmVhdGVfZm9ybWRhdGEoWydr
ZXknLCAndmFsdWUxJ10sIFsna2V5JywgJ3ZhbHVlMiddKS5oYXMgaXMgbm90IGEgZnVuY3Rpb24u
IChJbiAnY3JlYXRlX2Zvcm1kYXRhKFsna2V5JywgJ3ZhbHVlMSddLCBbJ2tleScsICd2YWx1ZTIn
XSkuaGFzKCdrZXknKScsICdjcmVhdGVfZm9ybWRhdGEoWydrZXknLCAndmFsdWUxJ10sIFsna2V5
JywgJ3ZhbHVlMiddKS5oYXMnIGlzIHVuZGVmaW5lZCkKLUZBSUwgdGVzdEZvcm1EYXRhSGFzRnJv
bUZvcm0gbmV3IEZvcm1EYXRhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmb3JtJykpLmhhcyBp
cyBub3QgYSBmdW5jdGlvbi4gKEluICduZXcgRm9ybURhdGEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoJ2Zvcm0nKSkuaGFzKCdrZXknKScsICduZXcgRm9ybURhdGEoZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoJ2Zvcm0nKSkuaGFzJyBpcyB1bmRlZmluZWQpCi1GQUlMIHRlc3RGb3JtRGF0YUhhc0Zy
b21Gb3JtTnVsbCBuZXcgRm9ybURhdGEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Zvcm0nKSku
aGFzIGlzIG5vdCBhIGZ1bmN0aW9uLiAoSW4gJ25ldyBGb3JtRGF0YShkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgnZm9ybScpKS5oYXMoJ25pbCcpJywgJ25ldyBGb3JtRGF0YShkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgnZm9ybScpKS5oYXMnIGlzIHVuZGVmaW5lZCkKLUZBSUwgdGVzdEZvcm1EYXRh
SGFzRnJvbUVtcHR5Rm9ybSBuZXcgRm9ybURhdGEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Vt
cHR5LWZvcm0nKSkuaGFzIGlzIG5vdCBhIGZ1bmN0aW9uLiAoSW4gJ25ldyBGb3JtRGF0YShkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgnZW1wdHktZm9ybScpKS5oYXMoJ2tleScpJywgJ25ldyBGb3Jt
RGF0YShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZW1wdHktZm9ybScpKS5oYXMnIGlzIHVuZGVm
aW5lZCkKLUZBSUwgdGVzdEZvcm1EYXRhSGFzRW1wdHkxIGNyZWF0ZV9mb3JtZGF0YShbJ2tleScs
ICd2YWx1ZTEnXSwgWydrZXknLCAndmFsdWUyJ10pLmhhcyBpcyBub3QgYSBmdW5jdGlvbi4gKElu
ICdjcmVhdGVfZm9ybWRhdGEoWydrZXknLCAndmFsdWUxJ10sIFsna2V5JywgJ3ZhbHVlMiddKS5o
YXMoJ25pbCcpJywgJ2NyZWF0ZV9mb3JtZGF0YShbJ2tleScsICd2YWx1ZTEnXSwgWydrZXknLCAn
dmFsdWUyJ10pLmhhcycgaXMgdW5kZWZpbmVkKQotRkFJTCB0ZXN0Rm9ybURhdGFIYXNFbXB0eTIg
Y3JlYXRlX2Zvcm1kYXRhKCkuaGFzIGlzIG5vdCBhIGZ1bmN0aW9uLiAoSW4gJ2NyZWF0ZV9mb3Jt
ZGF0YSgpLmhhcygna2V5JyknLCAnY3JlYXRlX2Zvcm1kYXRhKCkuaGFzJyBpcyB1bmRlZmluZWQp
CitQQVNTIHRlc3RGb3JtRGF0YUhhcyAKK1BBU1MgdGVzdEZvcm1EYXRhSGFzRnJvbUZvcm0gCitQ
QVNTIHRlc3RGb3JtRGF0YUhhc0Zyb21Gb3JtTnVsbCAKK1BBU1MgdGVzdEZvcm1EYXRhSGFzRnJv
bUVtcHR5Rm9ybSAKK1BBU1MgdGVzdEZvcm1EYXRhSGFzRW1wdHkxIAorUEFTUyB0ZXN0Rm9ybURh
dGFIYXNFbXB0eTIgCiAKSW5kZXg6IExheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvWE1MSHR0cFJlcXVlc3QvZm9ybWRhdGEtc2V0LWV4cGVjdGVkLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL1hNTEh0
dHBSZXF1ZXN0L2Zvcm1kYXRhLXNldC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDIyMTgyNykKKysr
IExheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvWE1MSHR0cFJlcXVl
c3QvZm9ybWRhdGEtc2V0LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSwxNiArMSwx
NiBAQAogCi1GQUlMIFBhc3NpbmcgYSBTdHJpbmcgb2JqZWN0IHRvIEZvcm1EYXRhLnNldCBzaG91
bGQgd29yayBmZC5zZXQgaXMgbm90IGEgZnVuY3Rpb24uIChJbiAnZmQuc2V0KCJuYW1lIiwgbmV3
IFN0cmluZygidmFsdWUiKSknLCAnZmQuc2V0JyBpcyB1bmRlZmluZWQpCi1GQUlMIHRlc3RGb3Jt
RGF0YVNldDEgdW5kZWZpbmVkIGlzIG5vdCBhbiBvYmplY3QgKGV2YWx1YXRpbmcgJ2ZkLnNldC5h
cHBseScpCi1GQUlMIHRlc3RGb3JtRGF0YVNldDIgdW5kZWZpbmVkIGlzIG5vdCBhbiBvYmplY3Qg
KGV2YWx1YXRpbmcgJ2ZkLnNldC5hcHBseScpCi1GQUlMIHRlc3RGb3JtRGF0YVNldFVuZGVmaW5l
ZDEgdW5kZWZpbmVkIGlzIG5vdCBhbiBvYmplY3QgKGV2YWx1YXRpbmcgJ2ZkLnNldC5hcHBseScp
Ci1GQUlMIHRlc3RGb3JtRGF0YVNldFVuZGVmaW5lZDIgdW5kZWZpbmVkIGlzIG5vdCBhbiBvYmpl
Y3QgKGV2YWx1YXRpbmcgJ2ZkLnNldC5hcHBseScpCi1GQUlMIHRlc3RGb3JtRGF0YVNldE51bGwx
IHVuZGVmaW5lZCBpcyBub3QgYW4gb2JqZWN0IChldmFsdWF0aW5nICdmZC5zZXQuYXBwbHknKQot
RkFJTCB0ZXN0Rm9ybURhdGFTZXROdWxsMiB1bmRlZmluZWQgaXMgbm90IGFuIG9iamVjdCAoZXZh
bHVhdGluZyAnZmQuc2V0LmFwcGx5JykKLUZBSUwgdGVzdEZvcm1EYXRhU2V0VG9Gb3JtMSBmZC5z
ZXQgaXMgbm90IGEgZnVuY3Rpb24uIChJbiAnZmQuc2V0KCdrZXknLCAndmFsdWUxJyknLCAnZmQu
c2V0JyBpcyB1bmRlZmluZWQpCi1GQUlMIHRlc3RGb3JtRGF0YVNldFRvRm9ybTIgZmQuc2V0IGlz
IG5vdCBhIGZ1bmN0aW9uLiAoSW4gJ2ZkLnNldCgna2V5JywgJ3ZhbHVlMicpJywgJ2ZkLnNldCcg
aXMgdW5kZWZpbmVkKQotRkFJTCB0ZXN0Rm9ybURhdGFTZXRUb0Zvcm1VbmRlZmluZWQxIGZkLnNl
dCBpcyBub3QgYSBmdW5jdGlvbi4gKEluICdmZC5zZXQoJ2tleScsIHVuZGVmaW5lZCknLCAnZmQu
c2V0JyBpcyB1bmRlZmluZWQpCi1GQUlMIHRlc3RGb3JtRGF0YVNldFRvRm9ybVVuZGVmaW5lZDIg
ZmQuc2V0IGlzIG5vdCBhIGZ1bmN0aW9uLiAoSW4gJ2ZkLnNldCgna2V5JywgdW5kZWZpbmVkKScs
ICdmZC5zZXQnIGlzIHVuZGVmaW5lZCkKLUZBSUwgdGVzdEZvcm1EYXRhU2V0VG9Gb3JtTnVsbDEg
ZmQuc2V0IGlzIG5vdCBhIGZ1bmN0aW9uLiAoSW4gJ2ZkLnNldCgna2V5JywgbnVsbCknLCAnZmQu
c2V0JyBpcyB1bmRlZmluZWQpCi1GQUlMIHRlc3RGb3JtRGF0YVNldFRvRm9ybU51bGwyIGZkLnNl
dCBpcyBub3QgYSBmdW5jdGlvbi4gKEluICdmZC5zZXQoJ2tleScsIG51bGwpJywgJ2ZkLnNldCcg
aXMgdW5kZWZpbmVkKQotRkFJTCB0ZXN0Rm9ybURhdGFTZXRFbXB0eUJsb2IgZmQuc2V0IGlzIG5v
dCBhIGZ1bmN0aW9uLiAoSW4gJ2ZkLnNldCgna2V5JywgbmV3IEJsb2IoW10pLCAnYmxhbmsudHh0
JyknLCAnZmQuc2V0JyBpcyB1bmRlZmluZWQpCitQQVNTIFBhc3NpbmcgYSBTdHJpbmcgb2JqZWN0
IHRvIEZvcm1EYXRhLnNldCBzaG91bGQgd29yayAKK1BBU1MgdGVzdEZvcm1EYXRhU2V0MSAKK1BB
U1MgdGVzdEZvcm1EYXRhU2V0MiAKK1BBU1MgdGVzdEZvcm1EYXRhU2V0VW5kZWZpbmVkMSAKK1BB
U1MgdGVzdEZvcm1EYXRhU2V0VW5kZWZpbmVkMiAKK1BBU1MgdGVzdEZvcm1EYXRhU2V0TnVsbDEg
CitQQVNTIHRlc3RGb3JtRGF0YVNldE51bGwyIAorUEFTUyB0ZXN0Rm9ybURhdGFTZXRUb0Zvcm0x
IAorUEFTUyB0ZXN0Rm9ybURhdGFTZXRUb0Zvcm0yIAorUEFTUyB0ZXN0Rm9ybURhdGFTZXRUb0Zv
cm1VbmRlZmluZWQxIAorUEFTUyB0ZXN0Rm9ybURhdGFTZXRUb0Zvcm1VbmRlZmluZWQyIAorUEFT
UyB0ZXN0Rm9ybURhdGFTZXRUb0Zvcm1OdWxsMSAKK1BBU1MgdGVzdEZvcm1EYXRhU2V0VG9Gb3Jt
TnVsbDIgCitQQVNTIHRlc3RGb3JtRGF0YVNldEVtcHR5QmxvYiAKIApJbmRleDogTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9YTUxIdHRwUmVxdWVzdC9pbnRlcmZh
Y2VzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL1hNTEh0dHBSZXF1ZXN0L2ludGVyZmFjZXMtZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiAyMjE4MjcpCisrKyBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL1hNTEh0dHBSZXF1ZXN0L2ludGVyZmFjZXMtZXhwZWN0ZWQudHh0CSh3b3JraW5n
IGNvcHkpCkBAIC0xMDgsNDQgKzEwOCw0NCBAQCBQQVNTIEZvcm1EYXRhIGludGVyZmFjZTogZXhp
c3RlbmNlIGFuZCBwCiBQQVNTIEZvcm1EYXRhIGludGVyZmFjZTogZXhpc3RlbmNlIGFuZCBwcm9w
ZXJ0aWVzIG9mIGludGVyZmFjZSBwcm90b3R5cGUgb2JqZWN0J3MgImNvbnN0cnVjdG9yIiBwcm9w
ZXJ0eSAKIFBBU1MgRm9ybURhdGEgaW50ZXJmYWNlOiBvcGVyYXRpb24gYXBwZW5kKFVTVlN0cmlu
ZyxCbG9iLFVTVlN0cmluZykgCiBQQVNTIEZvcm1EYXRhIGludGVyZmFjZTogb3BlcmF0aW9uIGFw
cGVuZChVU1ZTdHJpbmcsVVNWU3RyaW5nKSAKLUZBSUwgRm9ybURhdGEgaW50ZXJmYWNlOiBvcGVy
YXRpb24gZGVsZXRlKFVTVlN0cmluZykgYXNzZXJ0X293bl9wcm9wZXJ0eTogaW50ZXJmYWNlIHBy
b3RvdHlwZSBvYmplY3QgbWlzc2luZyBub24tc3RhdGljIG9wZXJhdGlvbiBleHBlY3RlZCBwcm9w
ZXJ0eSAiZGVsZXRlIiBtaXNzaW5nCi1GQUlMIEZvcm1EYXRhIGludGVyZmFjZTogb3BlcmF0aW9u
IGdldChVU1ZTdHJpbmcpIGFzc2VydF9vd25fcHJvcGVydHk6IGludGVyZmFjZSBwcm90b3R5cGUg
b2JqZWN0IG1pc3Npbmcgbm9uLXN0YXRpYyBvcGVyYXRpb24gZXhwZWN0ZWQgcHJvcGVydHkgImdl
dCIgbWlzc2luZwotRkFJTCBGb3JtRGF0YSBpbnRlcmZhY2U6IG9wZXJhdGlvbiBnZXRBbGwoVVNW
U3RyaW5nKSBhc3NlcnRfb3duX3Byb3BlcnR5OiBpbnRlcmZhY2UgcHJvdG90eXBlIG9iamVjdCBt
aXNzaW5nIG5vbi1zdGF0aWMgb3BlcmF0aW9uIGV4cGVjdGVkIHByb3BlcnR5ICJnZXRBbGwiIG1p
c3NpbmcKLUZBSUwgRm9ybURhdGEgaW50ZXJmYWNlOiBvcGVyYXRpb24gaGFzKFVTVlN0cmluZykg
YXNzZXJ0X293bl9wcm9wZXJ0eTogaW50ZXJmYWNlIHByb3RvdHlwZSBvYmplY3QgbWlzc2luZyBu
b24tc3RhdGljIG9wZXJhdGlvbiBleHBlY3RlZCBwcm9wZXJ0eSAiaGFzIiBtaXNzaW5nCi1GQUlM
IEZvcm1EYXRhIGludGVyZmFjZTogb3BlcmF0aW9uIHNldChVU1ZTdHJpbmcsQmxvYixVU1ZTdHJp
bmcpIGFzc2VydF9vd25fcHJvcGVydHk6IGludGVyZmFjZSBwcm90b3R5cGUgb2JqZWN0IG1pc3Np
bmcgbm9uLXN0YXRpYyBvcGVyYXRpb24gZXhwZWN0ZWQgcHJvcGVydHkgInNldCIgbWlzc2luZwot
RkFJTCBGb3JtRGF0YSBpbnRlcmZhY2U6IG9wZXJhdGlvbiBzZXQoVVNWU3RyaW5nLFVTVlN0cmlu
ZykgYXNzZXJ0X293bl9wcm9wZXJ0eTogaW50ZXJmYWNlIHByb3RvdHlwZSBvYmplY3QgbWlzc2lu
ZyBub24tc3RhdGljIG9wZXJhdGlvbiBleHBlY3RlZCBwcm9wZXJ0eSAic2V0IiBtaXNzaW5nCitQ
QVNTIEZvcm1EYXRhIGludGVyZmFjZTogb3BlcmF0aW9uIGRlbGV0ZShVU1ZTdHJpbmcpIAorUEFT
UyBGb3JtRGF0YSBpbnRlcmZhY2U6IG9wZXJhdGlvbiBnZXQoVVNWU3RyaW5nKSAKK1BBU1MgRm9y
bURhdGEgaW50ZXJmYWNlOiBvcGVyYXRpb24gZ2V0QWxsKFVTVlN0cmluZykgCitQQVNTIEZvcm1E
YXRhIGludGVyZmFjZTogb3BlcmF0aW9uIGhhcyhVU1ZTdHJpbmcpIAorUEFTUyBGb3JtRGF0YSBp
bnRlcmZhY2U6IG9wZXJhdGlvbiBzZXQoVVNWU3RyaW5nLEJsb2IsVVNWU3RyaW5nKSAKK1BBU1Mg
Rm9ybURhdGEgaW50ZXJmYWNlOiBvcGVyYXRpb24gc2V0KFVTVlN0cmluZyxVU1ZTdHJpbmcpIAog
UEFTUyBGb3JtRGF0YSBpbnRlcmZhY2U6IG5ldyBGb3JtRGF0YSgpIG11c3QgaW5oZXJpdCBwcm9w
ZXJ0eSAiYXBwZW5kIiB3aXRoIHRoZSBwcm9wZXIgdHlwZSAoMCkgCiBQQVNTIEZvcm1EYXRhIGlu
dGVyZmFjZTogY2FsbGluZyBhcHBlbmQoVVNWU3RyaW5nLEJsb2IsVVNWU3RyaW5nKSBvbiBuZXcg
Rm9ybURhdGEoKSB3aXRoIHRvbyBmZXcgYXJndW1lbnRzIG11c3QgdGhyb3cgVHlwZUVycm9yIAog
UEFTUyBGb3JtRGF0YSBpbnRlcmZhY2U6IG5ldyBGb3JtRGF0YSgpIG11c3QgaW5oZXJpdCBwcm9w
ZXJ0eSAiYXBwZW5kIiB3aXRoIHRoZSBwcm9wZXIgdHlwZSAoMSkgCiBQQVNTIEZvcm1EYXRhIGlu
dGVyZmFjZTogY2FsbGluZyBhcHBlbmQoVVNWU3RyaW5nLFVTVlN0cmluZykgb24gbmV3IEZvcm1E
YXRhKCkgd2l0aCB0b28gZmV3IGFyZ3VtZW50cyBtdXN0IHRocm93IFR5cGVFcnJvciAKLUZBSUwg
Rm9ybURhdGEgaW50ZXJmYWNlOiBuZXcgRm9ybURhdGEoKSBtdXN0IGluaGVyaXQgcHJvcGVydHkg
ImRlbGV0ZSIgd2l0aCB0aGUgcHJvcGVyIHR5cGUgKDIpIGFzc2VydF9pbmhlcml0czogcHJvcGVy
dHkgImRlbGV0ZSIgbm90IGZvdW5kIGluIHByb3RvdHlwZSBjaGFpbgotRkFJTCBGb3JtRGF0YSBp
bnRlcmZhY2U6IGNhbGxpbmcgZGVsZXRlKFVTVlN0cmluZykgb24gbmV3IEZvcm1EYXRhKCkgd2l0
aCB0b28gZmV3IGFyZ3VtZW50cyBtdXN0IHRocm93IFR5cGVFcnJvciBhc3NlcnRfaW5oZXJpdHM6
IHByb3BlcnR5ICJkZWxldGUiIG5vdCBmb3VuZCBpbiBwcm90b3R5cGUgY2hhaW4KLUZBSUwgRm9y
bURhdGEgaW50ZXJmYWNlOiBuZXcgRm9ybURhdGEoKSBtdXN0IGluaGVyaXQgcHJvcGVydHkgImdl
dCIgd2l0aCB0aGUgcHJvcGVyIHR5cGUgKDMpIGFzc2VydF9pbmhlcml0czogcHJvcGVydHkgImdl
dCIgbm90IGZvdW5kIGluIHByb3RvdHlwZSBjaGFpbgotRkFJTCBGb3JtRGF0YSBpbnRlcmZhY2U6
IGNhbGxpbmcgZ2V0KFVTVlN0cmluZykgb24gbmV3IEZvcm1EYXRhKCkgd2l0aCB0b28gZmV3IGFy
Z3VtZW50cyBtdXN0IHRocm93IFR5cGVFcnJvciBhc3NlcnRfaW5oZXJpdHM6IHByb3BlcnR5ICJn
ZXQiIG5vdCBmb3VuZCBpbiBwcm90b3R5cGUgY2hhaW4KLUZBSUwgRm9ybURhdGEgaW50ZXJmYWNl
OiBuZXcgRm9ybURhdGEoKSBtdXN0IGluaGVyaXQgcHJvcGVydHkgImdldEFsbCIgd2l0aCB0aGUg
cHJvcGVyIHR5cGUgKDQpIGFzc2VydF9pbmhlcml0czogcHJvcGVydHkgImdldEFsbCIgbm90IGZv
dW5kIGluIHByb3RvdHlwZSBjaGFpbgotRkFJTCBGb3JtRGF0YSBpbnRlcmZhY2U6IGNhbGxpbmcg
Z2V0QWxsKFVTVlN0cmluZykgb24gbmV3IEZvcm1EYXRhKCkgd2l0aCB0b28gZmV3IGFyZ3VtZW50
cyBtdXN0IHRocm93IFR5cGVFcnJvciBhc3NlcnRfaW5oZXJpdHM6IHByb3BlcnR5ICJnZXRBbGwi
IG5vdCBmb3VuZCBpbiBwcm90b3R5cGUgY2hhaW4KLUZBSUwgRm9ybURhdGEgaW50ZXJmYWNlOiBu
ZXcgRm9ybURhdGEoKSBtdXN0IGluaGVyaXQgcHJvcGVydHkgImhhcyIgd2l0aCB0aGUgcHJvcGVy
IHR5cGUgKDUpIGFzc2VydF9pbmhlcml0czogcHJvcGVydHkgImhhcyIgbm90IGZvdW5kIGluIHBy
b3RvdHlwZSBjaGFpbgotRkFJTCBGb3JtRGF0YSBpbnRlcmZhY2U6IGNhbGxpbmcgaGFzKFVTVlN0
cmluZykgb24gbmV3IEZvcm1EYXRhKCkgd2l0aCB0b28gZmV3IGFyZ3VtZW50cyBtdXN0IHRocm93
IFR5cGVFcnJvciBhc3NlcnRfaW5oZXJpdHM6IHByb3BlcnR5ICJoYXMiIG5vdCBmb3VuZCBpbiBw
cm90b3R5cGUgY2hhaW4KLUZBSUwgRm9ybURhdGEgaW50ZXJmYWNlOiBuZXcgRm9ybURhdGEoKSBt
dXN0IGluaGVyaXQgcHJvcGVydHkgInNldCIgd2l0aCB0aGUgcHJvcGVyIHR5cGUgKDYpIGFzc2Vy
dF9pbmhlcml0czogcHJvcGVydHkgInNldCIgbm90IGZvdW5kIGluIHByb3RvdHlwZSBjaGFpbgot
RkFJTCBGb3JtRGF0YSBpbnRlcmZhY2U6IGNhbGxpbmcgc2V0KFVTVlN0cmluZyxCbG9iLFVTVlN0
cmluZykgb24gbmV3IEZvcm1EYXRhKCkgd2l0aCB0b28gZmV3IGFyZ3VtZW50cyBtdXN0IHRocm93
IFR5cGVFcnJvciBhc3NlcnRfaW5oZXJpdHM6IHByb3BlcnR5ICJzZXQiIG5vdCBmb3VuZCBpbiBw
cm90b3R5cGUgY2hhaW4KLUZBSUwgRm9ybURhdGEgaW50ZXJmYWNlOiBuZXcgRm9ybURhdGEoKSBt
dXN0IGluaGVyaXQgcHJvcGVydHkgInNldCIgd2l0aCB0aGUgcHJvcGVyIHR5cGUgKDcpIGFzc2Vy
dF9pbmhlcml0czogcHJvcGVydHkgInNldCIgbm90IGZvdW5kIGluIHByb3RvdHlwZSBjaGFpbgot
RkFJTCBGb3JtRGF0YSBpbnRlcmZhY2U6IGNhbGxpbmcgc2V0KFVTVlN0cmluZyxVU1ZTdHJpbmcp
IG9uIG5ldyBGb3JtRGF0YSgpIHdpdGggdG9vIGZldyBhcmd1bWVudHMgbXVzdCB0aHJvdyBUeXBl
RXJyb3IgYXNzZXJ0X2luaGVyaXRzOiBwcm9wZXJ0eSAic2V0IiBub3QgZm91bmQgaW4gcHJvdG90
eXBlIGNoYWluCitQQVNTIEZvcm1EYXRhIGludGVyZmFjZTogbmV3IEZvcm1EYXRhKCkgbXVzdCBp
bmhlcml0IHByb3BlcnR5ICJkZWxldGUiIHdpdGggdGhlIHByb3BlciB0eXBlICgyKSAKK1BBU1Mg
Rm9ybURhdGEgaW50ZXJmYWNlOiBjYWxsaW5nIGRlbGV0ZShVU1ZTdHJpbmcpIG9uIG5ldyBGb3Jt
RGF0YSgpIHdpdGggdG9vIGZldyBhcmd1bWVudHMgbXVzdCB0aHJvdyBUeXBlRXJyb3IgCitQQVNT
IEZvcm1EYXRhIGludGVyZmFjZTogbmV3IEZvcm1EYXRhKCkgbXVzdCBpbmhlcml0IHByb3BlcnR5
ICJnZXQiIHdpdGggdGhlIHByb3BlciB0eXBlICgzKSAKK1BBU1MgRm9ybURhdGEgaW50ZXJmYWNl
OiBjYWxsaW5nIGdldChVU1ZTdHJpbmcpIG9uIG5ldyBGb3JtRGF0YSgpIHdpdGggdG9vIGZldyBh
cmd1bWVudHMgbXVzdCB0aHJvdyBUeXBlRXJyb3IgCitQQVNTIEZvcm1EYXRhIGludGVyZmFjZTog
bmV3IEZvcm1EYXRhKCkgbXVzdCBpbmhlcml0IHByb3BlcnR5ICJnZXRBbGwiIHdpdGggdGhlIHBy
b3BlciB0eXBlICg0KSAKK1BBU1MgRm9ybURhdGEgaW50ZXJmYWNlOiBjYWxsaW5nIGdldEFsbChV
U1ZTdHJpbmcpIG9uIG5ldyBGb3JtRGF0YSgpIHdpdGggdG9vIGZldyBhcmd1bWVudHMgbXVzdCB0
aHJvdyBUeXBlRXJyb3IgCitQQVNTIEZvcm1EYXRhIGludGVyZmFjZTogbmV3IEZvcm1EYXRhKCkg
bXVzdCBpbmhlcml0IHByb3BlcnR5ICJoYXMiIHdpdGggdGhlIHByb3BlciB0eXBlICg1KSAKK1BB
U1MgRm9ybURhdGEgaW50ZXJmYWNlOiBjYWxsaW5nIGhhcyhVU1ZTdHJpbmcpIG9uIG5ldyBGb3Jt
RGF0YSgpIHdpdGggdG9vIGZldyBhcmd1bWVudHMgbXVzdCB0aHJvdyBUeXBlRXJyb3IgCitQQVNT
IEZvcm1EYXRhIGludGVyZmFjZTogbmV3IEZvcm1EYXRhKCkgbXVzdCBpbmhlcml0IHByb3BlcnR5
ICJzZXQiIHdpdGggdGhlIHByb3BlciB0eXBlICg2KSAKK1BBU1MgRm9ybURhdGEgaW50ZXJmYWNl
OiBjYWxsaW5nIHNldChVU1ZTdHJpbmcsQmxvYixVU1ZTdHJpbmcpIG9uIG5ldyBGb3JtRGF0YSgp
IHdpdGggdG9vIGZldyBhcmd1bWVudHMgbXVzdCB0aHJvdyBUeXBlRXJyb3IgCitQQVNTIEZvcm1E
YXRhIGludGVyZmFjZTogbmV3IEZvcm1EYXRhKCkgbXVzdCBpbmhlcml0IHByb3BlcnR5ICJzZXQi
IHdpdGggdGhlIHByb3BlciB0eXBlICg3KSAKK1BBU1MgRm9ybURhdGEgaW50ZXJmYWNlOiBjYWxs
aW5nIHNldChVU1ZTdHJpbmcsVVNWU3RyaW5nKSBvbiBuZXcgRm9ybURhdGEoKSB3aXRoIHRvbyBm
ZXcgYXJndW1lbnRzIG11c3QgdGhyb3cgVHlwZUVycm9yIAogUEFTUyBGb3JtRGF0YSBpbnRlcmZh
Y2U6IG5ldyBGb3JtRGF0YShmb3JtKSBtdXN0IGluaGVyaXQgcHJvcGVydHkgImFwcGVuZCIgd2l0
aCB0aGUgcHJvcGVyIHR5cGUgKDApIAogUEFTUyBGb3JtRGF0YSBpbnRlcmZhY2U6IGNhbGxpbmcg
YXBwZW5kKFVTVlN0cmluZyxCbG9iLFVTVlN0cmluZykgb24gbmV3IEZvcm1EYXRhKGZvcm0pIHdp
dGggdG9vIGZldyBhcmd1bWVudHMgbXVzdCB0aHJvdyBUeXBlRXJyb3IgCiBQQVNTIEZvcm1EYXRh
IGludGVyZmFjZTogbmV3IEZvcm1EYXRhKGZvcm0pIG11c3QgaW5oZXJpdCBwcm9wZXJ0eSAiYXBw
ZW5kIiB3aXRoIHRoZSBwcm9wZXIgdHlwZSAoMSkgCiBQQVNTIEZvcm1EYXRhIGludGVyZmFjZTog
Y2FsbGluZyBhcHBlbmQoVVNWU3RyaW5nLFVTVlN0cmluZykgb24gbmV3IEZvcm1EYXRhKGZvcm0p
IHdpdGggdG9vIGZldyBhcmd1bWVudHMgbXVzdCB0aHJvdyBUeXBlRXJyb3IgCi1GQUlMIEZvcm1E
YXRhIGludGVyZmFjZTogbmV3IEZvcm1EYXRhKGZvcm0pIG11c3QgaW5oZXJpdCBwcm9wZXJ0eSAi
ZGVsZXRlIiB3aXRoIHRoZSBwcm9wZXIgdHlwZSAoMikgYXNzZXJ0X2luaGVyaXRzOiBwcm9wZXJ0
eSAiZGVsZXRlIiBub3QgZm91bmQgaW4gcHJvdG90eXBlIGNoYWluCi1GQUlMIEZvcm1EYXRhIGlu
dGVyZmFjZTogY2FsbGluZyBkZWxldGUoVVNWU3RyaW5nKSBvbiBuZXcgRm9ybURhdGEoZm9ybSkg
d2l0aCB0b28gZmV3IGFyZ3VtZW50cyBtdXN0IHRocm93IFR5cGVFcnJvciBhc3NlcnRfaW5oZXJp
dHM6IHByb3BlcnR5ICJkZWxldGUiIG5vdCBmb3VuZCBpbiBwcm90b3R5cGUgY2hhaW4KLUZBSUwg
Rm9ybURhdGEgaW50ZXJmYWNlOiBuZXcgRm9ybURhdGEoZm9ybSkgbXVzdCBpbmhlcml0IHByb3Bl
cnR5ICJnZXQiIHdpdGggdGhlIHByb3BlciB0eXBlICgzKSBhc3NlcnRfaW5oZXJpdHM6IHByb3Bl
cnR5ICJnZXQiIG5vdCBmb3VuZCBpbiBwcm90b3R5cGUgY2hhaW4KLUZBSUwgRm9ybURhdGEgaW50
ZXJmYWNlOiBjYWxsaW5nIGdldChVU1ZTdHJpbmcpIG9uIG5ldyBGb3JtRGF0YShmb3JtKSB3aXRo
IHRvbyBmZXcgYXJndW1lbnRzIG11c3QgdGhyb3cgVHlwZUVycm9yIGFzc2VydF9pbmhlcml0czog
cHJvcGVydHkgImdldCIgbm90IGZvdW5kIGluIHByb3RvdHlwZSBjaGFpbgotRkFJTCBGb3JtRGF0
YSBpbnRlcmZhY2U6IG5ldyBGb3JtRGF0YShmb3JtKSBtdXN0IGluaGVyaXQgcHJvcGVydHkgImdl
dEFsbCIgd2l0aCB0aGUgcHJvcGVyIHR5cGUgKDQpIGFzc2VydF9pbmhlcml0czogcHJvcGVydHkg
ImdldEFsbCIgbm90IGZvdW5kIGluIHByb3RvdHlwZSBjaGFpbgotRkFJTCBGb3JtRGF0YSBpbnRl
cmZhY2U6IGNhbGxpbmcgZ2V0QWxsKFVTVlN0cmluZykgb24gbmV3IEZvcm1EYXRhKGZvcm0pIHdp
dGggdG9vIGZldyBhcmd1bWVudHMgbXVzdCB0aHJvdyBUeXBlRXJyb3IgYXNzZXJ0X2luaGVyaXRz
OiBwcm9wZXJ0eSAiZ2V0QWxsIiBub3QgZm91bmQgaW4gcHJvdG90eXBlIGNoYWluCi1GQUlMIEZv
cm1EYXRhIGludGVyZmFjZTogbmV3IEZvcm1EYXRhKGZvcm0pIG11c3QgaW5oZXJpdCBwcm9wZXJ0
eSAiaGFzIiB3aXRoIHRoZSBwcm9wZXIgdHlwZSAoNSkgYXNzZXJ0X2luaGVyaXRzOiBwcm9wZXJ0
eSAiaGFzIiBub3QgZm91bmQgaW4gcHJvdG90eXBlIGNoYWluCi1GQUlMIEZvcm1EYXRhIGludGVy
ZmFjZTogY2FsbGluZyBoYXMoVVNWU3RyaW5nKSBvbiBuZXcgRm9ybURhdGEoZm9ybSkgd2l0aCB0
b28gZmV3IGFyZ3VtZW50cyBtdXN0IHRocm93IFR5cGVFcnJvciBhc3NlcnRfaW5oZXJpdHM6IHBy
b3BlcnR5ICJoYXMiIG5vdCBmb3VuZCBpbiBwcm90b3R5cGUgY2hhaW4KLUZBSUwgRm9ybURhdGEg
aW50ZXJmYWNlOiBuZXcgRm9ybURhdGEoZm9ybSkgbXVzdCBpbmhlcml0IHByb3BlcnR5ICJzZXQi
IHdpdGggdGhlIHByb3BlciB0eXBlICg2KSBhc3NlcnRfaW5oZXJpdHM6IHByb3BlcnR5ICJzZXQi
IG5vdCBmb3VuZCBpbiBwcm90b3R5cGUgY2hhaW4KLUZBSUwgRm9ybURhdGEgaW50ZXJmYWNlOiBj
YWxsaW5nIHNldChVU1ZTdHJpbmcsQmxvYixVU1ZTdHJpbmcpIG9uIG5ldyBGb3JtRGF0YShmb3Jt
KSB3aXRoIHRvbyBmZXcgYXJndW1lbnRzIG11c3QgdGhyb3cgVHlwZUVycm9yIGFzc2VydF9pbmhl
cml0czogcHJvcGVydHkgInNldCIgbm90IGZvdW5kIGluIHByb3RvdHlwZSBjaGFpbgotRkFJTCBG
b3JtRGF0YSBpbnRlcmZhY2U6IG5ldyBGb3JtRGF0YShmb3JtKSBtdXN0IGluaGVyaXQgcHJvcGVy
dHkgInNldCIgd2l0aCB0aGUgcHJvcGVyIHR5cGUgKDcpIGFzc2VydF9pbmhlcml0czogcHJvcGVy
dHkgInNldCIgbm90IGZvdW5kIGluIHByb3RvdHlwZSBjaGFpbgotRkFJTCBGb3JtRGF0YSBpbnRl
cmZhY2U6IGNhbGxpbmcgc2V0KFVTVlN0cmluZyxVU1ZTdHJpbmcpIG9uIG5ldyBGb3JtRGF0YShm
b3JtKSB3aXRoIHRvbyBmZXcgYXJndW1lbnRzIG11c3QgdGhyb3cgVHlwZUVycm9yIGFzc2VydF9p
bmhlcml0czogcHJvcGVydHkgInNldCIgbm90IGZvdW5kIGluIHByb3RvdHlwZSBjaGFpbgorUEFT
UyBGb3JtRGF0YSBpbnRlcmZhY2U6IG5ldyBGb3JtRGF0YShmb3JtKSBtdXN0IGluaGVyaXQgcHJv
cGVydHkgImRlbGV0ZSIgd2l0aCB0aGUgcHJvcGVyIHR5cGUgKDIpIAorUEFTUyBGb3JtRGF0YSBp
bnRlcmZhY2U6IGNhbGxpbmcgZGVsZXRlKFVTVlN0cmluZykgb24gbmV3IEZvcm1EYXRhKGZvcm0p
IHdpdGggdG9vIGZldyBhcmd1bWVudHMgbXVzdCB0aHJvdyBUeXBlRXJyb3IgCitQQVNTIEZvcm1E
YXRhIGludGVyZmFjZTogbmV3IEZvcm1EYXRhKGZvcm0pIG11c3QgaW5oZXJpdCBwcm9wZXJ0eSAi
Z2V0IiB3aXRoIHRoZSBwcm9wZXIgdHlwZSAoMykgCitQQVNTIEZvcm1EYXRhIGludGVyZmFjZTog
Y2FsbGluZyBnZXQoVVNWU3RyaW5nKSBvbiBuZXcgRm9ybURhdGEoZm9ybSkgd2l0aCB0b28gZmV3
IGFyZ3VtZW50cyBtdXN0IHRocm93IFR5cGVFcnJvciAKK1BBU1MgRm9ybURhdGEgaW50ZXJmYWNl
OiBuZXcgRm9ybURhdGEoZm9ybSkgbXVzdCBpbmhlcml0IHByb3BlcnR5ICJnZXRBbGwiIHdpdGgg
dGhlIHByb3BlciB0eXBlICg0KSAKK1BBU1MgRm9ybURhdGEgaW50ZXJmYWNlOiBjYWxsaW5nIGdl
dEFsbChVU1ZTdHJpbmcpIG9uIG5ldyBGb3JtRGF0YShmb3JtKSB3aXRoIHRvbyBmZXcgYXJndW1l
bnRzIG11c3QgdGhyb3cgVHlwZUVycm9yIAorUEFTUyBGb3JtRGF0YSBpbnRlcmZhY2U6IG5ldyBG
b3JtRGF0YShmb3JtKSBtdXN0IGluaGVyaXQgcHJvcGVydHkgImhhcyIgd2l0aCB0aGUgcHJvcGVy
IHR5cGUgKDUpIAorUEFTUyBGb3JtRGF0YSBpbnRlcmZhY2U6IGNhbGxpbmcgaGFzKFVTVlN0cmlu
Zykgb24gbmV3IEZvcm1EYXRhKGZvcm0pIHdpdGggdG9vIGZldyBhcmd1bWVudHMgbXVzdCB0aHJv
dyBUeXBlRXJyb3IgCitQQVNTIEZvcm1EYXRhIGludGVyZmFjZTogbmV3IEZvcm1EYXRhKGZvcm0p
IG11c3QgaW5oZXJpdCBwcm9wZXJ0eSAic2V0IiB3aXRoIHRoZSBwcm9wZXIgdHlwZSAoNikgCitQ
QVNTIEZvcm1EYXRhIGludGVyZmFjZTogY2FsbGluZyBzZXQoVVNWU3RyaW5nLEJsb2IsVVNWU3Ry
aW5nKSBvbiBuZXcgRm9ybURhdGEoZm9ybSkgd2l0aCB0b28gZmV3IGFyZ3VtZW50cyBtdXN0IHRo
cm93IFR5cGVFcnJvciAKK1BBU1MgRm9ybURhdGEgaW50ZXJmYWNlOiBuZXcgRm9ybURhdGEoZm9y
bSkgbXVzdCBpbmhlcml0IHByb3BlcnR5ICJzZXQiIHdpdGggdGhlIHByb3BlciB0eXBlICg3KSAK
K1BBU1MgRm9ybURhdGEgaW50ZXJmYWNlOiBjYWxsaW5nIHNldChVU1ZTdHJpbmcsVVNWU3RyaW5n
KSBvbiBuZXcgRm9ybURhdGEoZm9ybSkgd2l0aCB0b28gZmV3IGFyZ3VtZW50cyBtdXN0IHRocm93
IFR5cGVFcnJvciAKIFBBU1MgUHJvZ3Jlc3NFdmVudCBpbnRlcmZhY2U6IGV4aXN0ZW5jZSBhbmQg
cHJvcGVydGllcyBvZiBpbnRlcmZhY2Ugb2JqZWN0IAogUEFTUyBQcm9ncmVzc0V2ZW50IGludGVy
ZmFjZSBvYmplY3QgbGVuZ3RoIAogUEFTUyBQcm9ncmVzc0V2ZW50IGludGVyZmFjZSBvYmplY3Qg
bmFtZSAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>320402</attachid>
            <date>2017-09-10 14:43:12 -0700</date>
            <delta_ts>2017-09-10 14:43:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-176659-20170910144311.patch</filename>
            <type>text/plain</type>
            <size>56674</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMTgzMikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg2IEBACisyMDE3LTA5LTA5ICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgRmluaXNoIG9mZiB0aGUgRm9ybURhdGEg
aW1wbGVtZW50YXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE3NjY1OQorCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAg
ICAgICogZmlsZWFwaS9CbG9iLmNwcDoKKyAgICAgICAgKiBmaWxlYXBpL0Jsb2IuaDoKKyAgICAg
ICAgKiBmaWxlYXBpL0ZpbGUuY3BwOgorICAgICAgICAqIGZpbGVhcGkvRmlsZS5oOgorCisgICAg
ICAgICAgICBBZGQgY29uc3RydWN0b3JzIC8gY3JlYXRlIGZ1bmN0aW9ucyBmb3IgbWFraW5nIEZp
bGUgb2JqZWN0cworICAgICAgICAgICAgZnJvbSBhbiBleGlzdGluZyBCbG9iIG9yIEZpbGUgd2l0
aCBhbiBvdmVycmlkZSBuYW1lLgorCisgICAgICAgICogaHRtbC9ET01Gb3JtRGF0YS5jcHA6Cisg
ICAgICAgICogaHRtbC9ET01Gb3JtRGF0YS5oOgorCisgICAgICAgICAgICBBZGQgbWlzc2luZyBv
cGVyYXRpb25zIGFuZCBpdGVyYXRvciBpbXBsZW1lbnRhdGlvbgorICAgICAgICAgICAgYW5kIGJy
aW5nIGFwcGVuZCB1cCB0byBzcGVjIGJ5IG5vIGlnbm9yaW5nIGVtcHR5IG5hbWVzLgorCisgICAg
ICAgICogaHRtbC9ET01Gb3JtRGF0YS5pZGw6CisKKyAgICAgICAgICAgIEJyaW5nIElETCB1cCB0
byBzcGVjLiBMZWF2ZSBpdHMgZXhwb3N1cmUgdG8ganVzdCB0aGUgd2luZG93IGZvcgorICAgICAg
ICAgICAgbm93LCBhcyBGb3JtRGF0YSBjdXJyZW50bHkgZGVwZW5kcyBvbiB0aGUgRG9jdW1lbnQv
UGFnZSBmb3IgcmVwbGFjZQorICAgICAgICAgICAgZmlsZSBnZW5lcmF0aW9uIGFuZCB0aGVyZWZv
cmUgY2Fubm90IG9wZXJhdGUgaW4gYSB3b3JrZXIuCisKKyAgICAgICAgKiBodG1sL0Zvcm1EYXRh
TGlzdC5jcHA6CisgICAgICAgICogaHRtbC9Gb3JtRGF0YUxpc3QuaDoKKworICAgICAgICAgICAg
Q2hhbmdlcyBGb3JtRGF0YUxpc3Q6Okl0ZW0gdG8gYSBTdHJpbmcga2V5IGFuZCBWYXJpYW50PFJl
ZlB0cjxGaWxlPiwgU3RyaW5nPgorICAgICAgICAgICAgZGF0YSwgbWF0Y2hpbmcgc3BlYyBjb25j
ZXB0cyBtb3JlIGNsZWFubHkuIE5vcm1hbGl6YXRpb24gLyBlbmNvZGluZyBoYXMgYWxzbworICAg
ICAgICAgICAgYmVlbiBtYWRlIGxhenksIGFuZCBub3cgZG9lcyBub3QgaGFwcGVuIHVudGlsIGNy
ZWF0aW5nIGEgRm9ybURhdGEgZnJvbSB0aGUKKyAgICAgICAgICAgIEZvcm1EYXRhTGlzdC4KKwor
ICAgICAgICAgICAgU2luY2Ugd2Ugbm93IHN0b3JlIEZpbGVzLCByYXRoZXIgdGhhbiBCbG9icywg
d2UgZm9sbG93IHRoZSBzcGVjJ3MgJ2NyZWF0ZSBhbiAKKyAgICAgICAgICAgIGVudHJ5JyBhbGdv
cml0aG0gdG8gY29udmVydCBCbG9icyBpbnRvIEZpbGVzIHdpdGggdGhlIHNhbWUgYmFja2luZyBi
eXRlcy4gVGhpcworICAgICAgICAgICAgd2FzIHByZXZpb3VzbHkgZG9uZSBhcyBwYXJ0IG9mIEZv
cm1EYXRhOjphcHBlbmRLZXlWYWx1ZVBhaXJJdGVtcy4KKworICAgICAgICAqIGh0bWwvSFRNTEtl
eWdlbkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEtleWdlbkVsZW1lbnQ6OmFw
cGVuZEZvcm1EYXRhKToKKworICAgICAgICAgICAgUmVtb3ZlIHVubmVjZXNzYXJ5IGNvbnZlcnNp
b24gdG8gdXRmOCwgdGhlIGRhdGEgaXMgYmFzZTY0IGVuY29kZWQsIGFsbG93aW5nCisgICAgICAg
ICAgICB1cyB0byByZW1vdmUgYW4gb3ZlcmxvYWQgb2YgYXBwZW5kRGF0YSB0aGF0IHRvb2sgYSBD
U3RyaW5nLgorCisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvck5ldHdvcmtBZ2VudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpidWlsZE9iamVjdEZvclJlc291cmNlUmVxdWVzdCk6CisKKyAg
ICAgICAgICAgIFVwZGF0ZSBmb3IgbmV3IHNpZ25hdHVyZSBvZiBGb3JtRGF0YTo6ZmxhdHRlbigp
IHdoaWNoIG5vdworICAgICAgICAgICAgcmV0dXJucyBhIFZlY3RvciwgcmF0aGVyIHRoYW4gdGFr
ZXMgb25lIGluLgorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5oOgorICAg
ICAgICAqIHBsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Rm9ybURhdGE6OkZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhOjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGE6OmNyZWF0ZU11bHRpUGFydCk6CisgICAgICAg
IAorICAgICAgICAgICAgQ2xlYW51cCByZWR1bmRhbmN5IGJ5IHVzaW5nIGF1dG8uCisgICAgICAg
IAorICAgICAgICAoV2ViQ29yZTo6Rm9ybURhdGE6OmFwcGVuZEtleVZhbHVlUGFpckl0ZW1zKToK
KyAgICAgICAgCisgICAgICAgICAgICBVcGRhdGVkIHRvIGhhbmRsZSBuZXcgRm9ybURhdGFMaXN0
IGl0ZW0gZm9ybWF0IChlLmcuIHBhaXJzIG9mIGtleSAvIGRhdGEpIGFsbG93aW5nCisgICAgICAg
ICAgICB1cyB0byByZW1vdmUgdHdvLWJ5LXR3byBpdGVyYXRpb24uIFNvbWUgY29tcGxleGl0eSB3
YXMgcmVtb3ZlZCBhcm91bmQgQmxvYnMsIGFzCisgICAgICAgICAgICBGb3JtRGF0YUxpc3Qgbm93
IGFsd2F5cyBjcmVhdGVzIEZpbGUuIAorCisgICAgICAgICAgICBTaW5jZSBGb3JtRGF0YUxpc3Qg
bm8gbG9uZ2VyIGVhZ2VybHkgZW5jb2RlcyAvIG5vcm1hbGl6ZXMgdGhlIGtleXMgYW5kIHN0cmlu
ZyBkYXRhCisgICAgICAgICAgICB2YWx1ZXMsIHdlIG5vdyBwZXJmb3JtIHRob3NlIG9wZXJhdGlv
bnMgaGVyZS4KKyAgICAgICAgCisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YTo6ZXhwYW5kRGF0
YVN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OmFwcGVuZEJsb2JSZXNvbHZlZCk6CisgICAgICAg
IChXZWJDb3JlOjpGb3JtRGF0YTo6cmVzb2x2ZUJsb2JSZWZlcmVuY2VzKToKKyAgICAgICAgKFdl
YkNvcmU6OkZvcm1EYXRhOjpnZW5lcmF0ZUZpbGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1E
YXRhOjpoYXNHZW5lcmF0ZWRGaWxlcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0
YTo6aGFzT3duZWRHZW5lcmF0ZWRGaWxlcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb3Jt
RGF0YTo6cmVtb3ZlR2VuZXJhdGVkRmlsZXNJZk5lZWRlZCk6CisKKyAgICAgICAgICAgIEFkb3B0
IGF1dG8gYW5kIG1vZGVybiBmb3ItaW4gbG9vcHMuCisKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1E
YXRhOjpmbGF0dGVuIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhOjpmbGF0dGVu
VG9TdHJpbmcgY29uc3QpOgorCisgICAgICAgICAgICBVcGRhdGUgZmxhdHRlbiB0byByZXR1cm4g
YSBWZWN0b3IsIHJhdGhlciB0aGFuIHRha2UgaXQgaW4uCisKIDIwMTctMDktMDggIERlYW4gSmFj
a3NvbiAgPGRpbm9AYXBwbGUuY29tPgogCiAgICAgICAgIGdsLmRldGFjaFNoYWRlciBicmVha3Mg
c2hhZGVyIHByb2dyYW0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQmxvYi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9iLmNwcAkocmV2aXNpb24gMjIx
ODI3KQorKysgU291cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9iLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNzksNiArNzksMTQgQEAgQmxvYjo6QmxvYigpCiAgICAgVGhyZWFkYWJsZUJsb2JSZWdpc3Ry
eTo6cmVnaXN0ZXJCbG9iVVJMKG1faW50ZXJuYWxVUkwsIHsgfSwgIHsgfSk7CiB9CiAKK0Jsb2I6
OkJsb2IoY29uc3QgQmxvYiYgYmxvYikKKyAgICA6IG1faW50ZXJuYWxVUkwoQmxvYlVSTDo6Y3Jl
YXRlSW50ZXJuYWxVUkwoKSkKKyAgICAsIG1fdHlwZShibG9iLnR5cGUoKSkKKyAgICAsIG1fc2l6
ZShibG9iLnNpemUoKSkKK3sKKyAgICBUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5OjpyZWdpc3RlckJs
b2JVUkwobV9pbnRlcm5hbFVSTCwgeyBCbG9iUGFydChibG9iLnVybCgpKSB9ICwgbV90eXBlKTsK
K30KKwogQmxvYjo6QmxvYihWZWN0b3I8QmxvYlBhcnRWYXJpYW50PiYmIGJsb2JQYXJ0VmFyaWFu
dHMsIGNvbnN0IEJsb2JQcm9wZXJ0eUJhZyYgcHJvcGVydHlCYWcpCiAgICAgOiBtX2ludGVybmFs
VVJMKEJsb2JVUkw6OmNyZWF0ZUludGVybmFsVVJMKCkpCiAgICAgLCBtX3R5cGUobm9ybWFsaXpl
ZENvbnRlbnRUeXBlKHByb3BlcnR5QmFnLnR5cGUpKQpJbmRleDogU291cmNlL1dlYkNvcmUvZmls
ZWFwaS9CbG9iLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9iLmgJ
KHJldmlzaW9uIDIyMTgyNykKKysrIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQmxvYi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC05OCw2ICs5OCw3IEBAIHB1YmxpYzoKIAogcHJvdGVjdGVkOgogICAgIEJs
b2IoKTsKKyAgICBCbG9iKGNvbnN0IEJsb2ImKTsKICAgICBCbG9iKFZlY3RvcjxCbG9iUGFydFZh
cmlhbnQ+JiYsIGNvbnN0IEJsb2JQcm9wZXJ0eUJhZyYpOwogICAgIEJsb2IoVmVjdG9yPHVpbnQ4
X3Q+JiYsIGNvbnN0IFN0cmluZyYgY29udGVudFR5cGUpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9maWxlYXBpL0ZpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkv
RmlsZS5jcHAJKHJldmlzaW9uIDIyMTgyNykKKysrIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmls
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1LDYgKzg1LDIzIEBAIEZpbGU6OkZpbGUoVmVjdG9y
PEJsb2JQYXJ0VmFyaWFudD4mJiBibG8KIHsKIH0KIAorRmlsZTo6RmlsZShjb25zdCBCbG9iJiBi
bG9iLCBjb25zdCBTdHJpbmcmIG5hbWUpCisgICAgOiBCbG9iKGJsb2IpCisgICAgLCBtX25hbWUo
bmFtZSkKK3sKKyAgICBBU1NFUlQoIWJsb2IuaXNGaWxlKCkpOworfQorCitGaWxlOjpGaWxlKGNv
bnN0IEZpbGUmIGZpbGUsIGNvbnN0IFN0cmluZyYgbmFtZSkKKyAgICA6IEJsb2IoZmlsZSkKKyAg
ICAsIG1fcGF0aChmaWxlLnBhdGgoKSkKKyAgICAsIG1fcmVsYXRpdmVQYXRoKGZpbGUucmVsYXRp
dmVQYXRoKCkpCisgICAgLCBtX25hbWUoIW5hbWUuaXNOdWxsKCkgPyBuYW1lIDogZmlsZS5uYW1l
KCkpCisgICAgLCBtX292ZXJyaWRlTGFzdE1vZGlmaWVkRGF0ZShmaWxlLm1fb3ZlcnJpZGVMYXN0
TW9kaWZpZWREYXRlKQorICAgICwgbV9pc0RpcmVjdG9yeShmaWxlLmlzRGlyZWN0b3J5KCkpCit7
Cit9CisKIGRvdWJsZSBGaWxlOjpsYXN0TW9kaWZpZWQoKSBjb25zdAogewogICAgIGlmIChtX292
ZXJyaWRlTGFzdE1vZGlmaWVkRGF0ZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmls
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZS5oCShyZXZpc2lv
biAyMjE4MjcpCisrKyBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGUuaAkod29ya2luZyBjb3B5
KQpAQCAtNjUsNiArNjUsMTYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBGaWxlKHBhdGgsIG5hbWVPdmVycmlkZSkpOwogICAgIH0KIAorICAgIHN0YXRpYyBSZWY8Rmls
ZT4gY3JlYXRlKGNvbnN0IEJsb2ImIGJsb2IsIGNvbnN0IFN0cmluZyYgbmFtZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZpbGUoYmxvYiwgbmFtZSkpOworICAgIH0KKwor
ICAgIHN0YXRpYyBSZWY8RmlsZT4gY3JlYXRlKGNvbnN0IEZpbGUmIGZpbGUsIGNvbnN0IFN0cmlu
ZyYgbmFtZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZpbGUoZmlsZSwg
bmFtZSkpOworICAgIH0KKwogICAgIHN0YXRpYyBSZWY8RmlsZT4gY3JlYXRlV2l0aFJlbGF0aXZl
UGF0aChjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgcmVsYXRpdmVQYXRoKTsKIAog
ICAgIGJvb2wgaXNGaWxlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQpAQCAtODcs
NiArOTcsOCBAQCBwcml2YXRlOgogICAgIFdFQkNPUkVfRVhQT1JUIGV4cGxpY2l0IEZpbGUoY29u
c3QgU3RyaW5nJiBwYXRoKTsKICAgICBGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU3Ry
aW5nJiBuYW1lT3ZlcnJpZGUpOwogICAgIEZpbGUoVmVjdG9yPEJsb2JQYXJ0VmFyaWFudD4mJiBi
bG9iUGFydFZhcmlhbnRzLCBjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBQcm9wZXJ0eUJh
ZyYpOworICAgIEZpbGUoY29uc3QgQmxvYiYsIGNvbnN0IFN0cmluZyYgbmFtZSk7CisgICAgRmls
ZShjb25zdCBGaWxlJiwgY29uc3QgU3RyaW5nJiBuYW1lKTsKIAogICAgIEZpbGUoRGVzZXJpYWxp
emF0aW9uQ29udHJ1Y3RvciwgY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBVUkwmIHNyY1VSTCwg
Y29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIG5hbWUpOwogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL0RPTUZvcm1EYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9odG1sL0RPTUZvcm1EYXRhLmNwcAkocmV2aXNpb24gMjIxODI3KQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC9ET01Gb3JtRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDE0ICs1NSw3NiBA
QCBET01Gb3JtRGF0YTo6RE9NRm9ybURhdGEoSFRNTEZvcm1FbGVtZW50CiAKIHZvaWQgRE9NRm9y
bURhdGE6OmFwcGVuZChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7
Ci0gICAgaWYgKCFuYW1lLmlzRW1wdHkoKSkKLSAgICAgICAgYXBwZW5kRGF0YShuYW1lLCB2YWx1
ZSk7CisgICAgYXBwZW5kRGF0YShuYW1lLCB2YWx1ZSk7CiB9CiAKIHZvaWQgRE9NRm9ybURhdGE6
OmFwcGVuZChjb25zdCBTdHJpbmcmIG5hbWUsIEJsb2ImIGJsb2IsIGNvbnN0IFN0cmluZyYgZmls
ZW5hbWUpCiB7Ci0gICAgaWYgKCFuYW1lLmlzRW1wdHkoKSkKLSAgICAgICAgYXBwZW5kQmxvYihu
YW1lLCBibG9iLCBmaWxlbmFtZSk7CisgICAgYXBwZW5kQmxvYihuYW1lLCBibG9iLCBmaWxlbmFt
ZSk7Cit9CisKK3ZvaWQgRE9NRm9ybURhdGE6OnJlbW92ZShjb25zdCBTdHJpbmcmIG5hbWUpCit7
CisgICAgbV9pdGVtcy5yZW1vdmVBbGxNYXRjaGluZyhbJm5hbWVdIChjb25zdCBhdXRvJiBpdGVt
KSB7CisgICAgICAgIHJldHVybiBpdGVtLm5hbWUgPT0gbmFtZTsKKyAgICB9KTsKK30KKworYXV0
byBET01Gb3JtRGF0YTo6Z2V0KGNvbnN0IFN0cmluZyYgbmFtZSkgLT4gc3RkOjpvcHRpb25hbDxG
b3JtRGF0YUVudHJ5VmFsdWU+Cit7CisgICAgZm9yIChhdXRvJiBpdGVtIDogbV9pdGVtcykgewor
ICAgICAgICBpZiAoaXRlbS5uYW1lID09IG5hbWUpCisgICAgICAgICAgICByZXR1cm4gaXRlbS5k
YXRhOworICAgIH0KKworICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Cit9CisKK2F1dG8gRE9NRm9y
bURhdGE6OmdldEFsbChjb25zdCBTdHJpbmcmIG5hbWUpIC0+IFZlY3RvcjxGb3JtRGF0YUVudHJ5
VmFsdWU+Cit7CisgICAgVmVjdG9yPEZvcm1EYXRhRW50cnlWYWx1ZT4gcmVzdWx0OworCisgICAg
Zm9yIChhdXRvJiBpdGVtIDogbV9pdGVtcykgeworICAgICAgICBpZiAoaXRlbS5uYW1lID09IG5h
bWUpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGl0ZW0uZGF0YSk7CisgICAgfQorCisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBET01Gb3JtRGF0YTo6aGFzKGNvbnN0IFN0cmluZyYg
bmFtZSkKK3sKKyAgICBmb3IgKGF1dG8mIGl0ZW0gOiBtX2l0ZW1zKSB7CisgICAgICAgIGlmIChp
dGVtLm5hbWUgPT0gbmFtZSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgRE9NRm9ybURhdGE6OnNldChjb25zdCBTdHJp
bmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgc2V0RGF0YShuYW1lLCB2YWx1
ZSk7Cit9CisKK3ZvaWQgRE9NRm9ybURhdGE6OnNldChjb25zdCBTdHJpbmcmIG5hbWUsIEJsb2Im
IGJsb2IsIGNvbnN0IFN0cmluZyYgZmlsZW5hbWUpCit7CisgICAgc2V0QmxvYihuYW1lLCBibG9i
LCBmaWxlbmFtZSk7Cit9CisKK0RPTUZvcm1EYXRhOjpJdGVyYXRvcjo6SXRlcmF0b3IoRE9NRm9y
bURhdGEmIHRhcmdldCkKKyAgICA6IG1fdGFyZ2V0KHRhcmdldCkKK3sKK30KKworc3RkOjpvcHRp
b25hbDxXVEY6OktleVZhbHVlUGFpcjxTdHJpbmcsIERPTUZvcm1EYXRhOjpGb3JtRGF0YUVudHJ5
VmFsdWU+PiBET01Gb3JtRGF0YTo6SXRlcmF0b3I6Om5leHQoKQoreworICAgIGF1dG8mIGl0ZW1z
ID0gbV90YXJnZXQtPml0ZW1zKCk7CisgICAgaWYgKG1faW5kZXggPj0gaXRlbXMuc2l6ZSgpKQor
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgYXV0byYgaXRlbSA9IGl0ZW1zW21f
aW5kZXgrK107CisgICAgcmV0dXJuIFdURjo6S2V5VmFsdWVQYWlyPFN0cmluZywgRm9ybURhdGFF
bnRyeVZhbHVlPiB7IGl0ZW0ubmFtZSwgaXRlbS5kYXRhIH07CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvRE9NRm9ybURhdGEuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0RPTUZvcm1EYXRhLmgJKHJldmlzaW9uIDIyMTgy
NykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvRE9NRm9ybURhdGEuaAkod29ya2luZyBjb3B5KQpA
QCAtMzIsNiArMzIsNyBAQAogCiAjaW5jbHVkZSAiRm9ybURhdGFMaXN0LmgiCiAjaW5jbHVkZSA8
d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00MCwxMyArNDEsMzMgQEAg
Y2xhc3MgQmxvYjsKIGNsYXNzIEhUTUxGb3JtRWxlbWVudDsKIGNsYXNzIFRleHRFbmNvZGluZzsK
IAorLy8gRklYTUU6IERvIHdlIG5lZWQgdG8gaGF2ZSBzZXBhcmF0ZSBET01Gb3JtRGF0YSBhbmQg
Rm9ybURhdGFMaXN0IGNsYXNzZXM/CiBjbGFzcyBET01Gb3JtRGF0YSA6IHB1YmxpYyBGb3JtRGF0
YUxpc3QsIHB1YmxpYyBSZWZDb3VudGVkPERPTUZvcm1EYXRhPiB7CiBwdWJsaWM6CiAgICAgc3Rh
dGljIFJlZjxET01Gb3JtRGF0YT4gY3JlYXRlKEhUTUxGb3JtRWxlbWVudCogZm9ybSkgeyByZXR1
cm4gYWRvcHRSZWYoKm5ldyBET01Gb3JtRGF0YShmb3JtKSk7IH0KICAgICBzdGF0aWMgUmVmPERP
TUZvcm1EYXRhPiBjcmVhdGUoY29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZykgeyByZXR1cm4g
YWRvcHRSZWYoKm5ldyBET01Gb3JtRGF0YShlbmNvZGluZykpOyB9CiAKKyAgICB1c2luZyBGb3Jt
RGF0YUVudHJ5VmFsdWUgPSBJdGVtOjpEYXRhOworCiAgICAgdm9pZCBhcHBlbmQoY29uc3QgU3Ry
aW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKLSAgICB2b2lkIGFwcGVuZChjb25zdCBT
dHJpbmcmIG5hbWUsIEJsb2ImLCBjb25zdCBTdHJpbmcmIGZpbGVuYW1lID0gU3RyaW5nKCkpOwor
ICAgIHZvaWQgYXBwZW5kKGNvbnN0IFN0cmluZyYgbmFtZSwgQmxvYiYsIGNvbnN0IFN0cmluZyYg
ZmlsZW5hbWUgPSB7IH0pOworICAgIHZvaWQgcmVtb3ZlKGNvbnN0IFN0cmluZyYgbmFtZSk7Cisg
ICAgc3RkOjpvcHRpb25hbDxGb3JtRGF0YUVudHJ5VmFsdWU+IGdldChjb25zdCBTdHJpbmcmIG5h
bWUpOworICAgIFZlY3RvcjxGb3JtRGF0YUVudHJ5VmFsdWU+IGdldEFsbChjb25zdCBTdHJpbmcm
IG5hbWUpOworICAgIGJvb2wgaGFzKGNvbnN0IFN0cmluZyYgbmFtZSk7CisgICAgdm9pZCBzZXQo
Y29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKKyAgICB2b2lkIHNldChj
b25zdCBTdHJpbmcmIG5hbWUsIEJsb2ImLCBjb25zdCBTdHJpbmcmIGZpbGVuYW1lID0geyB9KTsK
KworICAgIGNsYXNzIEl0ZXJhdG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAgIGV4cGxpY2l0IEl0
ZXJhdG9yKERPTUZvcm1EYXRhJik7CisgICAgICAgIHN0ZDo6b3B0aW9uYWw8V1RGOjpLZXlWYWx1
ZVBhaXI8U3RyaW5nLCBGb3JtRGF0YUVudHJ5VmFsdWU+PiBuZXh0KCk7CisKKyAgICBwcml2YXRl
OgorICAgICAgICBSZWY8RE9NRm9ybURhdGE+IG1fdGFyZ2V0OworICAgICAgICBzaXplX3QgbV9p
bmRleCB7IDAgfTsKKyAgICB9OworICAgIEl0ZXJhdG9yIGNyZWF0ZUl0ZXJhdG9yKCkgeyByZXR1
cm4gSXRlcmF0b3IgeyAqdGhpcyB9OyB9CiAKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgRE9NRm9y
bURhdGEoY29uc3QgVGV4dEVuY29kaW5nJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0RP
TUZvcm1EYXRhLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0RPTUZvcm1E
YXRhLmlkbAkocmV2aXNpb24gMjIxODI3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9ET01Gb3Jt
RGF0YS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDEyIEBACiAgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgogICovCiAKK3R5cGVkZWYgKEZpbGUgb3IgVVNWU3RyaW5nKSBGb3JtRGF0YUVudHJ5VmFsdWU7
CisKKy8vIEZJWE1FOiBTaG91bGQgYmUgRXhwb3NlZD0oV2luZG93LFdvcmtlcikgSXQgaXMgbm90
IGN1cnJlbnRseSBwb3NzaWJsZSB0byBkbyB0aGlzIGR1ZSB0bworLy8gRmV0Y2ggYW5kIFhNTEh0
dHBSZXF1ZXN0IGV4cGVjdGluZyB0byBoYXZlIERvY3VtZW50IHdoZW4gcHJvY2Vzc2luZyBET01G
b3JtRGF0YSB0byBwZXJmb3JtCisvLyBmaWxlIHJlcGxhY2VtZW50IChodHRwczovL3dlYmtpdC5v
cmcvYi8xNzY2NzQpLgorCiBbCiAgICAgQ29uc3RydWN0b3Iob3B0aW9uYWwgSFRNTEZvcm1FbGVt
ZW50PyBmb3JtKSwKICAgICBKU0dlbmVyYXRlVG9OYXRpdmVPYmplY3QsCkBAIC0zNiw2ICs0Miwx
MyBAQAogICAgIEltcGxlbWVudGF0aW9uTGFja3NWVGFibGUsCiBdIGludGVyZmFjZSBET01Gb3Jt
RGF0YSB7CiAgICAgdm9pZCBhcHBlbmQoVVNWU3RyaW5nIG5hbWUsIFVTVlN0cmluZyB2YWx1ZSk7
Ci0gICAgdm9pZCBhcHBlbmQoVVNWU3RyaW5nIG5hbWUsIEJsb2IgdmFsdWUsIG9wdGlvbmFsIFVT
VlN0cmluZyBmaWxlbmFtZSk7Ci19OworICAgIHZvaWQgYXBwZW5kKFVTVlN0cmluZyBuYW1lLCBC
bG9iIGJsb2JWYWx1ZSwgb3B0aW9uYWwgVVNWU3RyaW5nIGZpbGVuYW1lKTsKKyAgICBbSW1wbGVt
ZW50ZWRBcz1yZW1vdmVdIHZvaWQgZGVsZXRlKFVTVlN0cmluZyBuYW1lKTsKKyAgICBGb3JtRGF0
YUVudHJ5VmFsdWU/IGdldChVU1ZTdHJpbmcgbmFtZSk7CisgICAgc2VxdWVuY2U8Rm9ybURhdGFF
bnRyeVZhbHVlPiBnZXRBbGwoVVNWU3RyaW5nIG5hbWUpOworICAgIGJvb2xlYW4gaGFzKFVTVlN0
cmluZyBuYW1lKTsKKyAgICB2b2lkIHNldChVU1ZTdHJpbmcgbmFtZSwgVVNWU3RyaW5nIHZhbHVl
KTsKKyAgICB2b2lkIHNldChVU1ZTdHJpbmcgbmFtZSwgQmxvYiBibG9iVmFsdWUsIG9wdGlvbmFs
IFVTVlN0cmluZyBmaWxlbmFtZSk7CiAKKyAgICBpdGVyYWJsZTxVU1ZTdHJpbmcsIEZvcm1EYXRh
RW50cnlWYWx1ZT47Cit9OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9Gb3JtRGF0YUxpc3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvRm9ybURhdGFMaXN0LmNwcAko
cmV2aXNpb24gMjIxODI3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9Gb3JtRGF0YUxpc3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMiwyOSArMjIsNzkgQEAKICNpbmNsdWRlICJGb3JtRGF0YUxp
c3QuaCIKIAogI2luY2x1ZGUgIkxpbmVFbmRpbmcuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdWaWV3Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLUZvcm1EYXRhTGlzdDo6Rm9ybURhdGFMaXN0KGNvbnN0IFRleHRFbmNvZGluZyYg
YykKLSAgICA6IG1fZW5jb2RpbmcoYykKK0Zvcm1EYXRhTGlzdDo6Rm9ybURhdGFMaXN0KGNvbnN0
IFRleHRFbmNvZGluZyYgZW5jb2RpbmcpCisgICAgOiBtX2VuY29kaW5nKGVuY29kaW5nKQogewog
fQogCi12b2lkIEZvcm1EYXRhTGlzdDo6YXBwZW5kU3RyaW5nKGNvbnN0IFN0cmluZyYgcykKK0NT
dHJpbmcgRm9ybURhdGFMaXN0Ojpub3JtYWxpemVTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkg
Y29uc3QKIHsKLSAgICBDU3RyaW5nIGNzdHIgPSBtX2VuY29kaW5nLmVuY29kZShzLCBFbnRpdGll
c0ZvclVuZW5jb2RhYmxlcyk7Ci0gICAgbV9pdGVtcy5hcHBlbmQobm9ybWFsaXplTGluZUVuZGlu
Z3NUb0NSTEYoY3N0cikpOworICAgIHJldHVybiBub3JtYWxpemVMaW5lRW5kaW5nc1RvQ1JMRiht
X2VuY29kaW5nLmVuY29kZSh2YWx1ZSwgRW50aXRpZXNGb3JVbmVuY29kYWJsZXMpKTsKIH0KIAot
dm9pZCBGb3JtRGF0YUxpc3Q6OmFwcGVuZFN0cmluZyhjb25zdCBDU3RyaW5nJiBzKQorLy8gaHR0
cHM6Ly94aHIuc3BlYy53aGF0d2cub3JnLyNjcmVhdGUtYW4tZW50cnkKK2F1dG8gRm9ybURhdGFM
aXN0OjpjcmVhdGVGaWxlRW50cnkoY29uc3QgU3RyaW5nJiBuYW1lLCBSZWY8QmxvYj4mJiBibG9i
LCBjb25zdCBTdHJpbmcmIGZpbGVuYW1lKSAtPiBJdGVtCiB7Ci0gICAgbV9pdGVtcy5hcHBlbmQo
cyk7CisgICAgaWYgKCFibG9iLT5pc0ZpbGUoKSkKKyAgICAgICAgcmV0dXJuIHsgbmFtZSwgRmls
ZTo6Y3JlYXRlKGJsb2IuZ2V0KCksIGZpbGVuYW1lLmlzTnVsbCgpID8gQVNDSUlMaXRlcmFsKCJi
bG9iIikgOiBmaWxlbmFtZSkgfTsKKyAgICAKKyAgICBpZiAoIWZpbGVuYW1lLmlzTnVsbCgpKQor
ICAgICAgICByZXR1cm4geyBuYW1lLCBGaWxlOjpjcmVhdGUoZG93bmNhc3Q8RmlsZT4oYmxvYi5n
ZXQoKSksIGZpbGVuYW1lKSB9OworCisgICAgcmV0dXJuIHsgbmFtZSwgc3RhdGljX3JlZmVyZW5j
ZV9jYXN0PEZpbGU+KFdURk1vdmUoYmxvYikpIH07Cit9CisKK3ZvaWQgRm9ybURhdGFMaXN0Ojph
cHBlbmREYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAg
ICBtX2l0ZW1zLmFwcGVuZCh7IG5hbWUsIHZhbHVlIH0pOworfQorCit2b2lkIEZvcm1EYXRhTGlz
dDo6YXBwZW5kRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIGludCB2YWx1ZSkKK3sKKyAgICBtX2l0
ZW1zLmFwcGVuZCh7IG5hbWUsIFN0cmluZzo6bnVtYmVyKHZhbHVlKSB9KTsKIH0KIAotdm9pZCBG
b3JtRGF0YUxpc3Q6OmFwcGVuZEJsb2IoUmVmPEJsb2I+JiYgYmxvYiwgY29uc3QgU3RyaW5nJiBm
aWxlbmFtZSkKK3ZvaWQgRm9ybURhdGFMaXN0OjphcHBlbmRCbG9iKGNvbnN0IFN0cmluZyYgbmFt
ZSwgUmVmPEJsb2I+JiYgYmxvYiwgY29uc3QgU3RyaW5nJiBmaWxlbmFtZSkKIHsKLSAgICBtX2l0
ZW1zLmFwcGVuZChJdGVtKFdURk1vdmUoYmxvYiksIGZpbGVuYW1lKSk7CisgICAgbV9pdGVtcy5h
cHBlbmQoY3JlYXRlRmlsZUVudHJ5KG5hbWUsIFdURk1vdmUoYmxvYiksIGZpbGVuYW1lKSk7CiB9
CiAKLX0gLy8gbmFtZXNwYWNlCit2b2lkIEZvcm1EYXRhTGlzdDo6c2V0KGNvbnN0IFN0cmluZyYg
bmFtZSwgSXRlbSYmIGl0ZW0pCit7CisgICAgc3RkOjpvcHRpb25hbDxzaXplX3Q+IGluaXRpYWxN
YXRjaExvY2F0aW9uOworCisgICAgLy8gRmluZCBsb2NhdGlvbiBvZiB0aGUgZmlyc3QgaXRlbSB3
aXRoIGEgbWF0Y2hpbmcgbmFtZS4KKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1faXRlbXMu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG5hbWUgPT0gbV9pdGVtc1tpXS5uYW1lKSB7Cisg
ICAgICAgICAgICBpbml0aWFsTWF0Y2hMb2NhdGlvbiA9IGk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChpbml0aWFsTWF0Y2hMb2NhdGlvbikgeworICAg
ICAgICBtX2l0ZW1zWyppbml0aWFsTWF0Y2hMb2NhdGlvbl0gPSBXVEZNb3ZlKGl0ZW0pOworCisg
ICAgICAgIG1faXRlbXMucmVtb3ZlQWxsTWF0Y2hpbmcoWyZuYW1lXSAoY29uc3QgYXV0byYgaXRl
bSkgeworICAgICAgICAgICAgcmV0dXJuIGl0ZW0ubmFtZSA9PSBuYW1lOworICAgICAgICB9LCAq
aW5pdGlhbE1hdGNoTG9jYXRpb24gKyAxKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IG1faXRlbXMuYXBwZW5kKFdURk1vdmUoaXRlbSkpOworfQorCit2b2lkIEZvcm1EYXRhTGlzdDo6
c2V0RGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAg
c2V0KG5hbWUsIHsgbmFtZSwgdmFsdWUgfSk7Cit9CisKK3ZvaWQgRm9ybURhdGFMaXN0OjpzZXRC
bG9iKGNvbnN0IFN0cmluZyYgbmFtZSwgUmVmPEJsb2I+JiYgYmxvYiwgY29uc3QgU3RyaW5nJiBm
aWxlbmFtZSkKK3sKKyAgICBzZXQobmFtZSwgY3JlYXRlRmlsZUVudHJ5KG5hbWUsIFdURk1vdmUo
YmxvYiksIGZpbGVuYW1lKSk7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvRm9y
bURhdGFMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9Gb3JtRGF0YUxp
c3QuaAkocmV2aXNpb24gMjIxODI3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9Gb3JtRGF0YUxp
c3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjAsNjQgKzIwLDM4IEBACiAKICNwcmFnbWEgb25jZQog
Ci0jaW5jbHVkZSAiQmxvYi5oIgorI2luY2x1ZGUgIkZpbGUuaCIKICNpbmNsdWRlICJUZXh0RW5j
b2RpbmcuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvVmFyaWFudC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIGNsYXNzIEZvcm1EYXRhTGlzdCB7CiBwdWJsaWM6Ci0gICAgY2xhc3MgSXRlbSB7Ci0gICAg
cHVibGljOgotICAgICAgICBJdGVtKCkgeyB9Ci0gICAgICAgIEl0ZW0oY29uc3QgV1RGOjpDU3Ry
aW5nJiBkYXRhKSA6IG1fZGF0YShkYXRhKSB7IH0KLSAgICAgICAgSXRlbShSZWY8QmxvYj4mJiBi
bG9iLCBjb25zdCBTdHJpbmcmIGZpbGVuYW1lKQotICAgICAgICAgICAgOiBtX2Jsb2IoV1RGTW92
ZShibG9iKSkKLSAgICAgICAgICAgICwgbV9maWxlbmFtZShmaWxlbmFtZSkKLSAgICAgICAgeyB9
Ci0KLSAgICAgICAgY29uc3QgV1RGOjpDU3RyaW5nJiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9k
YXRhOyB9Ci0gICAgICAgIEJsb2IqIGJsb2IoKSBjb25zdCB7IHJldHVybiBtX2Jsb2IuZ2V0KCk7
IH0KLSAgICAgICAgY29uc3QgU3RyaW5nJiBmaWxlbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmls
ZW5hbWU7IH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIFdURjo6Q1N0cmluZyBtX2RhdGE7Ci0g
ICAgICAgIFJlZlB0cjxCbG9iPiBtX2Jsb2I7Ci0gICAgICAgIFN0cmluZyBtX2ZpbGVuYW1lOwot
ICAgIH07CisgICAgc3RydWN0IEl0ZW0geworICAgICAgICB1c2luZyBEYXRhID0gVmFyaWFudDxS
ZWZQdHI8RmlsZT4sIFN0cmluZz47CiAKLSAgICBGb3JtRGF0YUxpc3QoY29uc3QgVGV4dEVuY29k
aW5nJik7CisgICAgICAgIFN0cmluZyBuYW1lOworICAgICAgICBEYXRhIGRhdGE7CisgICAgfTsK
IAotICAgIHZvaWQgYXBwZW5kRGF0YShjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2
YWx1ZSkKLSAgICB7Ci0gICAgICAgIGFwcGVuZFN0cmluZyhrZXkpOwotICAgICAgICBhcHBlbmRT
dHJpbmcodmFsdWUpOwotICAgIH0KLSAgICB2b2lkIGFwcGVuZERhdGEoY29uc3QgU3RyaW5nJiBr
ZXksIGNvbnN0IENTdHJpbmcmIHZhbHVlKQotICAgIHsKLSAgICAgICAgYXBwZW5kU3RyaW5nKGtl
eSk7Ci0gICAgICAgIGFwcGVuZFN0cmluZyh2YWx1ZSk7Ci0gICAgfQotICAgIHZvaWQgYXBwZW5k
RGF0YShjb25zdCBTdHJpbmcmIGtleSwgaW50IHZhbHVlKQotICAgIHsKLSAgICAgICAgYXBwZW5k
U3RyaW5nKGtleSk7Ci0gICAgICAgIGFwcGVuZFN0cmluZyhTdHJpbmc6Om51bWJlcih2YWx1ZSkp
OwotICAgIH0KLSAgICB2b2lkIGFwcGVuZEJsb2IoY29uc3QgU3RyaW5nJiBrZXksIFJlZjxCbG9i
PiYmIGJsb2IsIGNvbnN0IFN0cmluZyYgZmlsZW5hbWUgPSBTdHJpbmcoKSkKLSAgICB7Ci0gICAg
ICAgIGFwcGVuZFN0cmluZyhrZXkpOwotICAgICAgICBhcHBlbmRCbG9iKFdURk1vdmUoYmxvYiks
IGZpbGVuYW1lKTsKLSAgICB9CisgICAgdm9pZCBhcHBlbmREYXRhKGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7CisgICAgdm9pZCBhcHBlbmREYXRhKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgaW50IHZhbHVlKTsKKyAgICB2b2lkIGFwcGVuZEJsb2IoY29uc3QgU3RyaW5nJiBu
YW1lLCBSZWY8QmxvYj4mJiwgY29uc3QgU3RyaW5nJiBmaWxlbmFtZSA9IHsgfSk7CisgICAgdm9p
ZCBzZXREYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7CisgICAg
dm9pZCBzZXRCbG9iKGNvbnN0IFN0cmluZyYgbmFtZSwgUmVmPEJsb2I+JiYsIGNvbnN0IFN0cmlu
ZyYgZmlsZW5hbWUgPSB7IH0pOwogCiAgICAgY29uc3QgVmVjdG9yPEl0ZW0+JiBpdGVtcygpIGNv
bnN0IHsgcmV0dXJuIG1faXRlbXM7IH0KICAgICBjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5n
KCkgY29uc3QgeyByZXR1cm4gbV9lbmNvZGluZzsgfQogCi1wcml2YXRlOgotICAgIHZvaWQgYXBw
ZW5kU3RyaW5nKGNvbnN0IENTdHJpbmcmKTsKLSAgICB2b2lkIGFwcGVuZFN0cmluZyhjb25zdCBT
dHJpbmcmKTsKLSAgICB2b2lkIGFwcGVuZEJsb2IoUmVmPEJsb2I+JiYsIGNvbnN0IFN0cmluZyYg
ZmlsZW5hbWUpOworICAgIENTdHJpbmcgbm9ybWFsaXplU3RyaW5nKGNvbnN0IFN0cmluZyYpIGNv
bnN0OworCitwcm90ZWN0ZWQ6CisgICAgRm9ybURhdGFMaXN0KGNvbnN0IFRleHRFbmNvZGluZyYp
OworCisgICAgSXRlbSBjcmVhdGVGaWxlRW50cnkoY29uc3QgU3RyaW5nJiBuYW1lLCBSZWY8Qmxv
Yj4mJiwgY29uc3QgU3RyaW5nJiBmaWxlbmFtZSk7CisgICAgdm9pZCBzZXQoY29uc3QgU3RyaW5n
JiBuYW1lLCBJdGVtJiYpOwogCiAgICAgVGV4dEVuY29kaW5nIG1fZW5jb2Rpbmc7CiAgICAgVmVj
dG9yPEl0ZW0+IG1faXRlbXM7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxLZXlnZW5F
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxLZXlnZW5F
bGVtZW50LmNwcAkocmV2aXNpb24gMjIxODI3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
S2V5Z2VuRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMyw3ICsxMjMsNyBAQCBib29s
IEhUTUxLZXlnZW5FbGVtZW50OjphcHBlbmRGb3JtRGF0YShGCiAgICAgU3RyaW5nIHZhbHVlID0g
c2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlU3RyaW5nKHNoYWRvd1NlbGVjdCgpLT5zZWxlY3Rl
ZEluZGV4KCksIGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oY2hhbGxlbmdlQXR0ciks
IGRvY3VtZW50KCkuYmFzZVVSTCgpKTsKICAgICBpZiAodmFsdWUuaXNOdWxsKCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBlbmNvZGVkX3ZhbHVlcy5hcHBlbmREYXRhKG5hbWUoKSwgdmFs
dWUudXRmOCgpKTsKKyAgICBlbmNvZGVkX3ZhbHVlcy5hcHBlbmREYXRhKG5hbWUoKSwgdmFsdWUp
OwogICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yTmV0d29ya0FnZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yTmV0d29ya0FnZW50LmNwcAkocmV2aXNpb24gMjIxODI3KQorKysg
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck5ldHdvcmtBZ2VudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI1Niw4ICsyNTYsNyBAQCBzdGF0aWMgUmVmPEluc3BlY3Rvcjo6UHJvdG9j
b2w6Ok5ldHdvcms6CiAgICAgICAgIC5zZXRIZWFkZXJzKGJ1aWxkT2JqZWN0Rm9ySGVhZGVycyhy
ZXF1ZXN0Lmh0dHBIZWFkZXJGaWVsZHMoKSkpCiAgICAgICAgIC5yZWxlYXNlKCk7CiAgICAgaWYg
KHJlcXVlc3QuaHR0cEJvZHkoKSAmJiAhcmVxdWVzdC5odHRwQm9keSgpLT5pc0VtcHR5KCkpIHsK
LSAgICAgICAgVmVjdG9yPGNoYXI+IGJ5dGVzOwotICAgICAgICByZXF1ZXN0Lmh0dHBCb2R5KCkt
PmZsYXR0ZW4oYnl0ZXMpOworICAgICAgICBhdXRvIGJ5dGVzID0gcmVxdWVzdC5odHRwQm9keSgp
LT5mbGF0dGVuKCk7CiAgICAgICAgIHJlcXVlc3RPYmplY3QtPnNldFBvc3REYXRhKFN0cmluZzo6
ZnJvbVVURjhXaXRoTGF0aW4xRmFsbGJhY2soYnl0ZXMuZGF0YSgpLCBieXRlcy5zaXplKCkpKTsK
ICAgICB9CiAgICAgcmV0dXJuIHJlcXVlc3RPYmplY3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcAkocmV2aXNpb24gMjIxODI3KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTUwLDcgKzUwLDcgQEAgaW5saW5lIEZvcm1EYXRhOjpGb3JtRGF0YShjb25zdCBGb3JtRGF0
YQogewogICAgIC8vIFdlIHNob3VsZG4ndCBiZSBjb3B5aW5nIEZvcm1EYXRhIHRoYXQgaGFzbid0
IGFscmVhZHkgcmVtb3ZlZCBpdHMgZ2VuZXJhdGVkIGZpbGVzCiAgICAgLy8gYnV0IGp1c3QgaW4g
Y2FzZSwgbWFrZSBzdXJlIHRoZSBuZXcgRm9ybURhdGEgaXMgcmVhZHkgdG8gZ2VuZXJhdGUgaXRz
IG93biBmaWxlcy4KLSAgICBmb3IgKEZvcm1EYXRhRWxlbWVudCYgZWxlbWVudCA6IG1fZWxlbWVu
dHMpIHsKKyAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBtX2VsZW1lbnRzKSB7CiAgICAgICAgIGlm
IChlbGVtZW50Lm1fdHlwZSA9PSBGb3JtRGF0YUVsZW1lbnQ6OlR5cGU6OkVuY29kZWRGaWxlKSB7
CiAgICAgICAgICAgICBlbGVtZW50Lm1fZ2VuZXJhdGVkRmlsZW5hbWUgPSBTdHJpbmcoKTsKICAg
ICAgICAgICAgIGVsZW1lbnQubV9vd25zR2VuZXJhdGVkRmlsZSA9IGZhbHNlOwpAQCAtNzMsMzUg
KzczLDM1IEBAIFJlZjxGb3JtRGF0YT4gRm9ybURhdGE6OmNyZWF0ZSgpCiAKIFJlZjxGb3JtRGF0
YT4gRm9ybURhdGE6OmNyZWF0ZShjb25zdCB2b2lkKiBkYXRhLCBzaXplX3Qgc2l6ZSkKIHsKLSAg
ICBSZWY8Rm9ybURhdGE+IHJlc3VsdCA9IGNyZWF0ZSgpOworICAgIGF1dG8gcmVzdWx0ID0gY3Jl
YXRlKCk7CiAgICAgcmVzdWx0LT5hcHBlbmREYXRhKGRhdGEsIHNpemUpOwogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKIFJlZjxGb3JtRGF0YT4gRm9ybURhdGE6OmNyZWF0ZShjb25zdCBDU3RyaW5n
JiBzdHJpbmcpCiB7Ci0gICAgUmVmPEZvcm1EYXRhPiByZXN1bHQgPSBjcmVhdGUoKTsKKyAgICBh
dXRvIHJlc3VsdCA9IGNyZWF0ZSgpOwogICAgIHJlc3VsdC0+YXBwZW5kRGF0YShzdHJpbmcuZGF0
YSgpLCBzdHJpbmcubGVuZ3RoKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIFJlZjxGb3Jt
RGF0YT4gRm9ybURhdGE6OmNyZWF0ZShjb25zdCBWZWN0b3I8Y2hhcj4mIHZlY3RvcikKIHsKLSAg
ICBSZWY8Rm9ybURhdGE+IHJlc3VsdCA9IGNyZWF0ZSgpOworICAgIGF1dG8gcmVzdWx0ID0gY3Jl
YXRlKCk7CiAgICAgcmVzdWx0LT5hcHBlbmREYXRhKHZlY3Rvci5kYXRhKCksIHZlY3Rvci5zaXpl
KCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIFJlZjxGb3JtRGF0YT4gRm9ybURhdGE6OmNy
ZWF0ZShjb25zdCBGb3JtRGF0YUxpc3QmIGxpc3QsIGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2Rp
bmcsIEVuY29kaW5nVHlwZSBlbmNvZGluZ1R5cGUpCiB7Ci0gICAgUmVmPEZvcm1EYXRhPiByZXN1
bHQgPSBjcmVhdGUoKTsKLSAgICByZXN1bHQtPmFwcGVuZEtleVZhbHVlUGFpckl0ZW1zKGxpc3Qs
IGVuY29kaW5nLCBmYWxzZSwgMCwgZW5jb2RpbmdUeXBlKTsKKyAgICBhdXRvIHJlc3VsdCA9IGNy
ZWF0ZSgpOworICAgIHJlc3VsdC0+YXBwZW5kS2V5VmFsdWVQYWlySXRlbXMobGlzdCwgZW5jb2Rp
bmcsIGZhbHNlLCBudWxscHRyLCBlbmNvZGluZ1R5cGUpOwogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKIFJlZjxGb3JtRGF0YT4gRm9ybURhdGE6OmNyZWF0ZU11bHRpUGFydChjb25zdCBGb3JtRGF0
YUxpc3QmIGxpc3QsIGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2RpbmcsIERvY3VtZW50KiBkb2N1
bWVudCkKIHsKLSAgICBSZWY8Rm9ybURhdGE+IHJlc3VsdCA9IGNyZWF0ZSgpOworICAgIGF1dG8g
cmVzdWx0ID0gY3JlYXRlKCk7CiAgICAgcmVzdWx0LT5hcHBlbmRLZXlWYWx1ZVBhaXJJdGVtcyhs
aXN0LCBlbmNvZGluZywgdHJ1ZSwgZG9jdW1lbnQpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkBA
IC0xODgsNTIgKzE4OCwzNiBAQCB2b2lkIEZvcm1EYXRhOjphcHBlbmRLZXlWYWx1ZVBhaXJJdGVt
cyhjCiAgICAgICAgIG1fYm91bmRhcnkgPSBGb3JtRGF0YUJ1aWxkZXI6OmdlbmVyYXRlVW5pcXVl
Qm91bmRhcnlTdHJpbmcoKTsKIAogICAgIFZlY3RvcjxjaGFyPiBlbmNvZGVkRGF0YTsKLQotICAg
IGNvbnN0IFZlY3RvcjxGb3JtRGF0YUxpc3Q6Okl0ZW0+JiBpdGVtcyA9IGxpc3QuaXRlbXMoKTsK
LSAgICBzaXplX3QgZm9ybURhdGFMaXN0U2l6ZSA9IGl0ZW1zLnNpemUoKTsKLSAgICBBU1NFUlQo
IShmb3JtRGF0YUxpc3RTaXplICUgMikpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZm9y
bURhdGFMaXN0U2l6ZTsgaSArPSAyKSB7Ci0gICAgICAgIGNvbnN0IEZvcm1EYXRhTGlzdDo6SXRl
bSYga2V5ID0gaXRlbXNbaV07Ci0gICAgICAgIGNvbnN0IEZvcm1EYXRhTGlzdDo6SXRlbSYgdmFs
dWUgPSBpdGVtc1tpICsgMV07CisgICAgZm9yIChjb25zdCBhdXRvJiBpdGVtIDogbGlzdC5pdGVt
cygpKSB7CisgICAgICAgIGF1dG8gbm9ybWFsaXplZE5hbWUgPSBsaXN0Lm5vcm1hbGl6ZVN0cmlu
ZyhpdGVtLm5hbWUpOworICAgIAogICAgICAgICBpZiAoaXNNdWx0aVBhcnRGb3JtKSB7CiAgICAg
ICAgICAgICBWZWN0b3I8Y2hhcj4gaGVhZGVyOwotICAgICAgICAgICAgRm9ybURhdGFCdWlsZGVy
OjpiZWdpbk11bHRpUGFydEhlYWRlcihoZWFkZXIsIG1fYm91bmRhcnkuZGF0YSgpLCBrZXkuZGF0
YSgpKTsKKyAgICAgICAgICAgIEZvcm1EYXRhQnVpbGRlcjo6YmVnaW5NdWx0aVBhcnRIZWFkZXIo
aGVhZGVyLCBtX2JvdW5kYXJ5LmRhdGEoKSwgbm9ybWFsaXplZE5hbWUpOwogCiAgICAgICAgICAg
ICBib29sIHNob3VsZEdlbmVyYXRlRmlsZSA9IGZhbHNlOwogCi0gICAgICAgICAgICAvLyBJZiB0
aGUgY3VycmVudCB0eXBlIGlzIGJsb2IsIHRoZW4gd2UgYWxzbyBuZWVkIHRvIGluY2x1ZGUgdGhl
IGZpbGVuYW1lCi0gICAgICAgICAgICBpZiAodmFsdWUuYmxvYigpKSB7Ci0gICAgICAgICAgICAg
ICAgU3RyaW5nIG5hbWU7Ci0gICAgICAgICAgICAgICAgaWYgKGlzPEZpbGU+KCp2YWx1ZS5ibG9i
KCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIEZpbGUmIGZpbGUgPSBkb3duY2FzdDxGaWxlPigq
dmFsdWUuYmxvYigpKTsKLSAgICAgICAgICAgICAgICAgICAgbmFtZSA9IGZpbGUubmFtZSgpOwot
ICAgICAgICAgICAgICAgICAgICAvLyBMZXQgdGhlIGFwcGxpY2F0aW9uIHNwZWNpZnkgYSBmaWxl
bmFtZSBpZiBpdCdzIGdvaW5nIHRvIGdlbmVyYXRlIGEgcmVwbGFjZW1lbnQgZmlsZSBmb3IgdGhl
IHVwbG9hZC4KLSAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBwYXRoID0gZmlsZS5w
YXRoKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghcGF0aC5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChQYWdlKiBwYWdlID0gZG9jdW1lbnQtPnBhZ2UoKSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBnZW5lcmF0ZWRGaWxlTmFtZTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzaG91bGRHZW5lcmF0ZUZpbGUgPSBwYWdlLT5jaHJv
bWUoKS5jbGllbnQoKS5zaG91bGRSZXBsYWNlV2l0aEdlbmVyYXRlZEZpbGVGb3JVcGxvYWQocGF0
aCwgZ2VuZXJhdGVkRmlsZU5hbWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChz
aG91bGRHZW5lcmF0ZUZpbGUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUg
PSBnZW5lcmF0ZWRGaWxlTmFtZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFJlZlB0cjxGaWxlPj4oaXRlbS5kYXRhKSkg
eworICAgICAgICAgICAgICAgIC8vIElmIHRoZSBjdXJyZW50IHR5cGUgaXMgYSBmaWxlLCB0aGVu
IHdlIGFsc28gbmVlZCB0byBpbmNsdWRlIHRoZSBmaWxlbmFtZQorICAgICAgICAgICAgICAgIGF1
dG8mIGZpbGUgPSAqV1RGOjpnZXQ8UmVmUHRyPEZpbGU+PihpdGVtLmRhdGEpOworICAgICAgICAg
ICAgICAgIGF1dG8gbmFtZSA9IGZpbGUubmFtZSgpOworCisgICAgICAgICAgICAgICAgLy8gTGV0
IHRoZSBhcHBsaWNhdGlvbiBzcGVjaWZ5IGEgZmlsZW5hbWUgaWYgaXQncyBnb2luZyB0byBnZW5l
cmF0ZSBhIHJlcGxhY2VtZW50IGZpbGUgZm9yIHRoZSB1cGxvYWQuCisgICAgICAgICAgICAgICAg
Y29uc3QgYXV0byYgcGF0aCA9IGZpbGUucGF0aCgpOworICAgICAgICAgICAgICAgIGlmICghcGF0
aC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBkb2N1
bWVudC0+cGFnZSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgZ2VuZXJhdGVk
RmlsZU5hbWU7CisgICAgICAgICAgICAgICAgICAgICAgICBzaG91bGRHZW5lcmF0ZUZpbGUgPSBw
YWdlLT5jaHJvbWUoKS5jbGllbnQoKS5zaG91bGRSZXBsYWNlV2l0aEdlbmVyYXRlZEZpbGVGb3JV
cGxvYWQocGF0aCwgZ2VuZXJhdGVkRmlsZU5hbWUpOworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHNob3VsZEdlbmVyYXRlRmlsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1l
ID0gZ2VuZXJhdGVkRmlsZU5hbWU7CiAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgICAgICAvLyBJZiBhIGZpbGVuYW1lIGlzIHBhc3NlZCBpbiBGb3JtRGF0YS5hcHBlbmQo
KSwgdXNlIGl0IGluc3RlYWQgb2YgdGhlIGZpbGUgYmxvYidzIG5hbWUuCi0gICAgICAgICAgICAg
ICAgICAgIGlmICghdmFsdWUuZmlsZW5hbWUoKS5pc051bGwoKSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIG5hbWUgPSB2YWx1ZS5maWxlbmFtZSgpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgICAgIC8vIEZvciBub24tZmlsZSBibG9iLCB1c2UgdGhlIGZpbGVu
YW1lIGlmIGl0IGlzIHBhc3NlZCBpbiBGb3JtRGF0YS5hcHBlbmQoKS4KLSAgICAgICAgICAgICAg
ICAgICAgaWYgKCF2YWx1ZS5maWxlbmFtZSgpLmlzTnVsbCgpKQotICAgICAgICAgICAgICAgICAg
ICAgICAgbmFtZSA9IHZhbHVlLmZpbGVuYW1lKCk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSAiYmxvYiI7CiAgICAgICAgICAgICAgICAg
fQogCiAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBpbmNsdWRlIHRoZSBmaWxlbmFtZT0i
Li4iIHBhcnQgaW4gdGhlIGhlYWRlciwgZXZlbiBpZiB0aGUgZmlsZW5hbWUgaXMgZW1wdHkKICAg
ICAgICAgICAgICAgICBGb3JtRGF0YUJ1aWxkZXI6OmFkZEZpbGVuYW1lVG9NdWx0aVBhcnRIZWFk
ZXIoaGVhZGVyLCBlbmNvZGluZywgbmFtZSk7CiAKICAgICAgICAgICAgICAgICAvLyBBZGQgdGhl
IGNvbnRlbnQgdHlwZSBpZiBhdmFpbGFibGUsIG9yICJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0i
IG90aGVyd2lzZSAoUkZDIDE4NjcpLgotICAgICAgICAgICAgICAgIFN0cmluZyBjb250ZW50VHlw
ZSA9IHZhbHVlLmJsb2IoKS0+dHlwZSgpOworICAgICAgICAgICAgICAgIGF1dG8gY29udGVudFR5
cGUgPSBmaWxlLnR5cGUoKTsKICAgICAgICAgICAgICAgICBpZiAoY29udGVudFR5cGUuaXNFbXB0
eSgpKQogICAgICAgICAgICAgICAgICAgICBjb250ZW50VHlwZSA9ICJhcHBsaWNhdGlvbi9vY3Rl
dC1zdHJlYW0iOwogICAgICAgICAgICAgICAgIEFTU0VSVChCbG9iOjppc05vcm1hbGl6ZWRDb250
ZW50VHlwZShjb250ZW50VHlwZSkpOwpAQCAtMjQyLDIyICsyMjYsMjYgQEAgdm9pZCBGb3JtRGF0
YTo6YXBwZW5kS2V5VmFsdWVQYWlySXRlbXMoYwogCiAgICAgICAgICAgICBGb3JtRGF0YUJ1aWxk
ZXI6OmZpbmlzaE11bHRpUGFydEhlYWRlcihoZWFkZXIpOwogCi0gICAgICAgICAgICAvLyBBcHBl
bmQgYm9keQogICAgICAgICAgICAgYXBwZW5kRGF0YShoZWFkZXIuZGF0YSgpLCBoZWFkZXIuc2l6
ZSgpKTsKLSAgICAgICAgICAgIGlmICh2YWx1ZS5ibG9iKCkpIHsKLSAgICAgICAgICAgICAgICBp
ZiAoaXM8RmlsZT4oKnZhbHVlLmJsb2IoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgRmlsZSYg
ZmlsZSA9IGRvd25jYXN0PEZpbGU+KCp2YWx1ZS5ibG9iKCkpOwotICAgICAgICAgICAgICAgICAg
ICAvLyBEbyBub3QgYWRkIHRoZSBmaWxlIGlmIHRoZSBwYXRoIGlzIGVtcHR5LgotICAgICAgICAg
ICAgICAgICAgICBpZiAoIWZpbGUucGF0aCgpLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGFwcGVuZEZpbGUoZmlsZS5wYXRoKCksIHNob3VsZEdlbmVyYXRlRmlsZSk7Ci0gICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxS
ZWZQdHI8RmlsZT4+KGl0ZW0uZGF0YSkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBmaWxlID0g
KldURjo6Z2V0PFJlZlB0cjxGaWxlPj4oaXRlbS5kYXRhKTsKKyAgICAgICAgICAgICAgICBpZiAo
IWZpbGUucGF0aCgpLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kRmlsZShm
aWxlLnBhdGgoKSwgc2hvdWxkR2VuZXJhdGVGaWxlKTsKICAgICAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgICAgIGFwcGVuZEJsb2IodmFsdWUuYmxvYigpLT51cmwoKSk7Ci0gICAg
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBhcHBlbmREYXRhKHZhbHVlLmRhdGEoKS5k
YXRhKCksIHZhbHVlLmRhdGEoKS5sZW5ndGgoKSk7CisgICAgICAgICAgICAgICAgICAgIGFwcGVu
ZEJsb2IoZmlsZS51cmwoKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IGF1dG8gbm9ybWFsaXplZFN0cmluZ0RhdGEgPSBsaXN0Lm5vcm1hbGl6ZVN0cmluZyhXVEY6Omdl
dDxTdHJpbmc+KGl0ZW0uZGF0YSkpOworICAgICAgICAgICAgICAgIGFwcGVuZERhdGEobm9ybWFs
aXplZFN0cmluZ0RhdGEuZGF0YSgpLCBub3JtYWxpemVkU3RyaW5nRGF0YS5sZW5ndGgoKSk7Cisg
ICAgICAgICAgICB9CisKICAgICAgICAgICAgIGFwcGVuZERhdGEoIlxyXG4iLCAyKTsKLSAgICAg
ICAgfSBlbHNlCi0gICAgICAgICAgICBGb3JtRGF0YUJ1aWxkZXI6OmFkZEtleVZhbHVlUGFpckFz
Rm9ybURhdGEoZW5jb2RlZERhdGEsIGtleS5kYXRhKCksIHZhbHVlLmRhdGEoKSwgZW5jb2RpbmdU
eXBlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChXVEY6OmhvbGRzX2Fs
dGVybmF0aXZlPFN0cmluZz4oaXRlbS5kYXRhKSk7CisKKyAgICAgICAgICAgIGF1dG8gbm9ybWFs
aXplZFN0cmluZ0RhdGEgPSBsaXN0Lm5vcm1hbGl6ZVN0cmluZyhXVEY6OmdldDxTdHJpbmc+KGl0
ZW0uZGF0YSkpOworICAgICAgICAgICAgRm9ybURhdGFCdWlsZGVyOjphZGRLZXlWYWx1ZVBhaXJB
c0Zvcm1EYXRhKGVuY29kZWREYXRhLCBub3JtYWxpemVkTmFtZSwgbm9ybWFsaXplZFN0cmluZ0Rh
dGEsIGVuY29kaW5nVHlwZSk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAoaXNNdWx0aVBh
cnRGb3JtKQpAQCAtMjcwLDI5ICsyNTgsMzEgQEAgY2hhciogRm9ybURhdGE6OmV4cGFuZERhdGFT
dG9yZShzaXplX3QgcwogewogICAgIG1fbGVuZ3RoSW5CeXRlcyA9IHN0ZDo6bnVsbG9wdDsKICAg
ICBpZiAobV9lbGVtZW50cy5pc0VtcHR5KCkgfHwgbV9lbGVtZW50cy5sYXN0KCkubV90eXBlICE9
IEZvcm1EYXRhRWxlbWVudDo6VHlwZTo6RGF0YSkKLSAgICAgICAgbV9lbGVtZW50cy5hcHBlbmQo
Rm9ybURhdGFFbGVtZW50KCkpOwotICAgIEZvcm1EYXRhRWxlbWVudCYgZSA9IG1fZWxlbWVudHMu
bGFzdCgpOwotICAgIHNpemVfdCBvbGRTaXplID0gZS5tX2RhdGEuc2l6ZSgpOwotICAgIGUubV9k
YXRhLmdyb3cob2xkU2l6ZSArIHNpemUpOwotICAgIHJldHVybiBlLm1fZGF0YS5kYXRhKCkgKyBv
bGRTaXplOworICAgICAgICBtX2VsZW1lbnRzLmFwcGVuZCh7IH0pOworCisgICAgYXV0byYgbGFz
dEVsZW1lbnQgPSBtX2VsZW1lbnRzLmxhc3QoKTsKKyAgICBzaXplX3Qgb2xkU2l6ZSA9IGxhc3RF
bGVtZW50Lm1fZGF0YS5zaXplKCk7CisKKyAgICBhdXRvIG5ld1NpemUgPSBDaGVja2VkPHNpemVf
dD4ob2xkU2l6ZSkgKyBzaXplOworCisgICAgbGFzdEVsZW1lbnQubV9kYXRhLmdyb3cobmV3U2l6
ZS51bnNhZmVHZXQoKSk7CisgICAgcmV0dXJuIGxhc3RFbGVtZW50Lm1fZGF0YS5kYXRhKCkgKyBv
bGRTaXplOwogfQogCi12b2lkIEZvcm1EYXRhOjpmbGF0dGVuKFZlY3RvcjxjaGFyPiYgZGF0YSkg
Y29uc3QKK1ZlY3RvcjxjaGFyPiBGb3JtRGF0YTo6ZmxhdHRlbigpIGNvbnN0CiB7CiAgICAgLy8g
Q29uY2F0ZW5hdGUgYWxsIHRoZSBieXRlIGFycmF5cywgYnV0IG9taXQgYW55IGZpbGVzLgotICAg
IGRhdGEuY2xlYXIoKTsKLSAgICBzaXplX3QgbiA9IG1fZWxlbWVudHMuc2l6ZSgpOwotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbjsgKytpKSB7Ci0gICAgICAgIGNvbnN0IEZvcm1EYXRhRWxl
bWVudCYgZSA9IG1fZWxlbWVudHNbaV07Ci0gICAgICAgIGlmIChlLm1fdHlwZSA9PSBGb3JtRGF0
YUVsZW1lbnQ6OlR5cGU6OkRhdGEpCi0gICAgICAgICAgICBkYXRhLmFwcGVuZChlLm1fZGF0YS5k
YXRhKCksIHN0YXRpY19jYXN0PHNpemVfdD4oZS5tX2RhdGEuc2l6ZSgpKSk7CisgICAgVmVjdG9y
PGNoYXI+IGRhdGE7CisgICAgZm9yIChhdXRvJiBlbGVtZW50IDogbV9lbGVtZW50cykgeworICAg
ICAgICBpZiAoZWxlbWVudC5tX3R5cGUgPT0gRm9ybURhdGFFbGVtZW50OjpUeXBlOjpEYXRhKQor
ICAgICAgICAgICAgZGF0YS5hcHBlbmQoZWxlbWVudC5tX2RhdGEuZGF0YSgpLCBzdGF0aWNfY2Fz
dDxzaXplX3Q+KGVsZW1lbnQubV9kYXRhLnNpemUoKSkpOwogICAgIH0KKyAgICByZXR1cm4gZGF0
YTsKIH0KIAogU3RyaW5nIEZvcm1EYXRhOjpmbGF0dGVuVG9TdHJpbmcoKSBjb25zdAogewotICAg
IFZlY3RvcjxjaGFyPiBieXRlczsKLSAgICBmbGF0dGVuKGJ5dGVzKTsKKyAgICBhdXRvIGJ5dGVz
ID0gZmxhdHRlbigpOwogICAgIHJldHVybiBMYXRpbjFFbmNvZGluZygpLmRlY29kZShyZWludGVy
cHJldF9jYXN0PGNvbnN0IGNoYXIqPihieXRlcy5kYXRhKCkpLCBieXRlcy5zaXplKCkpOwogfQog
CkBAIC0zMDIsMTYgKzI5MiwxNCBAQCBzdGF0aWMgdm9pZCBhcHBlbmRCbG9iUmVzb2x2ZWQoRm9y
bURhdGEqCiAgICAgICAgIExPR19FUlJPUigiVHJpZWQgdG8gcmVzb2x2ZSBhIGJsb2Igd2l0aG91
dCBhIHVzYWJsZSByZWdpc3RyeSIpOwogICAgICAgICByZXR1cm47CiAgICAgfQorCiAgICAgQmxv
YkRhdGEqIGJsb2JEYXRhID0gc3RhdGljX2Nhc3Q8QmxvYlJlZ2lzdHJ5SW1wbCY+KGJsb2JSZWdp
c3RyeSgpKS5nZXRCbG9iRGF0YUZyb21VUkwodXJsKTsKICAgICBpZiAoIWJsb2JEYXRhKSB7CiAg
ICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGdldCBibG9iIGRhdGEgZnJvbSBhIHJlZ2lzdHJ5
Iik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBCbG9iRGF0YUl0ZW1MaXN0Ojpjb25z
dF9pdGVyYXRvciBpdCA9IGJsb2JEYXRhLT5pdGVtcygpLmJlZ2luKCk7Ci0gICAgY29uc3QgQmxv
YkRhdGFJdGVtTGlzdDo6Y29uc3RfaXRlcmF0b3IgaXRlbmQgPSBibG9iRGF0YS0+aXRlbXMoKS5l
bmQoKTsKLSAgICBmb3IgKDsgaXQgIT0gaXRlbmQ7ICsraXQpIHsKLSAgICAgICAgY29uc3QgQmxv
YkRhdGFJdGVtJiBibG9iSXRlbSA9ICppdDsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGJsb2JJdGVt
IDogYmxvYkRhdGEtPml0ZW1zKCkpIHsKICAgICAgICAgaWYgKGJsb2JJdGVtLnR5cGUoKSA9PSBC
bG9iRGF0YUl0ZW06OlR5cGU6OkRhdGEpIHsKICAgICAgICAgICAgIEFTU0VSVChibG9iSXRlbS5k
YXRhKCkuZGF0YSgpKTsKICAgICAgICAgICAgIGZvcm1EYXRhLT5hcHBlbmREYXRhKGJsb2JJdGVt
LmRhdGEoKS5kYXRhKCktPmRhdGEoKSArIHN0YXRpY19jYXN0PGludD4oYmxvYkl0ZW0ub2Zmc2V0
KCkpLCBzdGF0aWNfY2FzdDxpbnQ+KGJsb2JJdGVtLmxlbmd0aCgpKSk7CkBAIC0zMjYsMTAgKzMx
NCw4IEBAIFJlZjxGb3JtRGF0YT4gRm9ybURhdGE6OnJlc29sdmVCbG9iUmVmZXIKIHsKICAgICAv
LyBGaXJzdCBjaGVjayBpZiBhbnkgYmxvYnMgbmVlZHMgdG8gYmUgcmVzb2x2ZWQsIG9yIHdlIGNh
biB0YWtlIHRoZSBmYXN0IHBhdGguCiAgICAgYm9vbCBoYXNCbG9iID0gZmFsc2U7Ci0gICAgVmVj
dG9yPEZvcm1EYXRhRWxlbWVudD46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZWxlbWVudHMoKS5iZWdp
bigpOwotICAgIGNvbnN0IFZlY3RvcjxGb3JtRGF0YUVsZW1lbnQ+Ojpjb25zdF9pdGVyYXRvciBp
dGVuZCA9IGVsZW1lbnRzKCkuZW5kKCk7Ci0gICAgZm9yICg7IGl0ICE9IGl0ZW5kOyArK2l0KSB7
Ci0gICAgICAgIGlmIChpdC0+bV90eXBlID09IEZvcm1EYXRhRWxlbWVudDo6VHlwZTo6RW5jb2Rl
ZEJsb2IpIHsKKyAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBtX2VsZW1lbnRzKSB7CisgICAgICAg
IGlmIChlbGVtZW50Lm1fdHlwZSA9PSBGb3JtRGF0YUVsZW1lbnQ6OlR5cGU6OkVuY29kZWRCbG9i
KSB7CiAgICAgICAgICAgICBoYXNCbG9iID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CkBAIC0zMzksMTIgKzMyNSwxMSBAQCBSZWY8Rm9ybURhdGE+IEZvcm1EYXRhOjpyZXNv
bHZlQmxvYlJlZmVyCiAgICAgICAgIHJldHVybiAqdGhpczsKIAogICAgIC8vIENyZWF0ZSBhIGNv
cHkgdG8gYXBwZW5kIHRoZSByZXN1bHQgaW50by4KLSAgICBSZWY8Rm9ybURhdGE+IG5ld0Zvcm1E
YXRhID0gRm9ybURhdGE6OmNyZWF0ZSgpOworICAgIGF1dG8gbmV3Rm9ybURhdGEgPSBGb3JtRGF0
YTo6Y3JlYXRlKCk7CiAgICAgbmV3Rm9ybURhdGEtPnNldEFsd2F5c1N0cmVhbShhbHdheXNTdHJl
YW0oKSk7CiAgICAgbmV3Rm9ybURhdGEtPnNldElkZW50aWZpZXIoaWRlbnRpZmllcigpKTsKLSAg
ICBpdCA9IGVsZW1lbnRzKCkuYmVnaW4oKTsKLSAgICBmb3IgKDsgaXQgIT0gaXRlbmQ7ICsraXQp
IHsKLSAgICAgICAgY29uc3QgRm9ybURhdGFFbGVtZW50JiBlbGVtZW50ID0gKml0OworCisgICAg
Zm9yIChhdXRvJiBlbGVtZW50IDogbV9lbGVtZW50cykgewogICAgICAgICBpZiAoZWxlbWVudC5t
X3R5cGUgPT0gRm9ybURhdGFFbGVtZW50OjpUeXBlOjpEYXRhKQogICAgICAgICAgICAgbmV3Rm9y
bURhdGEtPmFwcGVuZERhdGEoZWxlbWVudC5tX2RhdGEuZGF0YSgpLCBlbGVtZW50Lm1fZGF0YS5z
aXplKCkpOwogICAgICAgICBlbHNlIGlmIChlbGVtZW50Lm1fdHlwZSA9PSBGb3JtRGF0YUVsZW1l
bnQ6OlR5cGU6OkVuY29kZWRGaWxlKQpAQCAtMzYzLDcgKzM0OCw3IEBAIHZvaWQgRm9ybURhdGE6
OmdlbmVyYXRlRmlsZXMoRG9jdW1lbnQqIGQKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGZvciAoRm9ybURhdGFFbGVtZW50JiBlbGVtZW50IDogbV9lbGVtZW50cykgewor
ICAgIGZvciAoYXV0byYgZWxlbWVudCA6IG1fZWxlbWVudHMpIHsKICAgICAgICAgaWYgKGVsZW1l
bnQubV90eXBlID09IEZvcm1EYXRhRWxlbWVudDo6VHlwZTo6RW5jb2RlZEZpbGUgJiYgZWxlbWVu
dC5tX3Nob3VsZEdlbmVyYXRlRmlsZSkgewogICAgICAgICAgICAgQVNTRVJUKCFlbGVtZW50Lm1f
b3duc0dlbmVyYXRlZEZpbGUpOwogICAgICAgICAgICAgQVNTRVJUKGVsZW1lbnQubV9nZW5lcmF0
ZWRGaWxlbmFtZS5pc0VtcHR5KCkpOwpAQCAtMzc4LDcgKzM2Myw3IEBAIHZvaWQgRm9ybURhdGE6
OmdlbmVyYXRlRmlsZXMoRG9jdW1lbnQqIGQKIAogYm9vbCBGb3JtRGF0YTo6aGFzR2VuZXJhdGVk
RmlsZXMoKSBjb25zdAogewotICAgIGZvciAoY29uc3QgRm9ybURhdGFFbGVtZW50JiBlbGVtZW50
IDogbV9lbGVtZW50cykgeworICAgIGZvciAoYXV0byYgZWxlbWVudCA6IG1fZWxlbWVudHMpIHsK
ICAgICAgICAgaWYgKGVsZW1lbnQubV90eXBlID09IEZvcm1EYXRhRWxlbWVudDo6VHlwZTo6RW5j
b2RlZEZpbGUgJiYgIWVsZW1lbnQubV9nZW5lcmF0ZWRGaWxlbmFtZS5pc0VtcHR5KCkpCiAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC0zODcsNyArMzcyLDcgQEAgYm9vbCBGb3Jt
RGF0YTo6aGFzR2VuZXJhdGVkRmlsZXMoKSBjb25zdAogCiBib29sIEZvcm1EYXRhOjpoYXNPd25l
ZEdlbmVyYXRlZEZpbGVzKCkgY29uc3QKIHsKLSAgICBmb3IgKGNvbnN0IEZvcm1EYXRhRWxlbWVu
dCYgZWxlbWVudCA6IG1fZWxlbWVudHMpIHsKKyAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBtX2Vs
ZW1lbnRzKSB7CiAgICAgICAgIGlmIChlbGVtZW50Lm1fdHlwZSA9PSBGb3JtRGF0YUVsZW1lbnQ6
OlR5cGU6OkVuY29kZWRGaWxlICYmIGVsZW1lbnQubV9vd25zR2VuZXJhdGVkRmlsZSkgewogICAg
ICAgICAgICAgQVNTRVJUKCFlbGVtZW50Lm1fZ2VuZXJhdGVkRmlsZW5hbWUuaXNFbXB0eSgpKTsK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMzk4LDcgKzM4Myw3IEBAIGJvb2wgRm9ybURh
dGE6Omhhc093bmVkR2VuZXJhdGVkRmlsZXMoKSAKIAogdm9pZCBGb3JtRGF0YTo6cmVtb3ZlR2Vu
ZXJhdGVkRmlsZXNJZk5lZWRlZCgpCiB7Ci0gICAgZm9yIChGb3JtRGF0YUVsZW1lbnQmIGVsZW1l
bnQgOiBtX2VsZW1lbnRzKSB7CisgICAgZm9yIChhdXRvJiBlbGVtZW50IDogbV9lbGVtZW50cykg
ewogICAgICAgICBpZiAoZWxlbWVudC5tX3R5cGUgPT0gRm9ybURhdGFFbGVtZW50OjpUeXBlOjpF
bmNvZGVkRmlsZSAmJiBlbGVtZW50Lm1fb3duc0dlbmVyYXRlZEZpbGUpIHsKICAgICAgICAgICAg
IEFTU0VSVCghZWxlbWVudC5tX2dlbmVyYXRlZEZpbGVuYW1lLmlzRW1wdHkoKSk7CiAgICAgICAg
ICAgICBBU1NFUlQoZWxlbWVudC5tX3Nob3VsZEdlbmVyYXRlRmlsZSk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5oCShyZXZpc2lvbiAyMjE4MjcpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTIyMiw3ICsyMjIsNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBh
cHBlbmRCbG9iKGNvbnN0IFVSTCYgYmxvYlVSTCk7CiAgICAgY2hhciogZXhwYW5kRGF0YVN0b3Jl
KHNpemVfdCk7CiAKLSAgICB2b2lkIGZsYXR0ZW4oVmVjdG9yPGNoYXI+JikgY29uc3Q7IC8vIG9t
aXRzIGZpbGVzCisgICAgVmVjdG9yPGNoYXI+IGZsYXR0ZW4oKSBjb25zdDsgLy8gb21pdHMgZmls
ZXMKICAgICBTdHJpbmcgZmxhdHRlblRvU3RyaW5nKCkgY29uc3Q7IC8vIG9taXRzIGZpbGVzCiAK
ICAgICAvLyBSZXNvbHZlIGFsbCBibG9iIHJlZmVyZW5jZXMgc28gd2Ugb25seSBoYXZlIGZpbGUg
YW5kIGRhdGEuCkluZGV4OiBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2MvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2ltcG9ydGVkL3czYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIy
MTgyOCkKKysrIExheW91dFRlc3RzL2ltcG9ydGVkL3czYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwyMCBAQAorMjAxNy0wOS0wOSAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQu
b3JnPgorCisgICAgICAgIEZpbmlzaCBvZmYgdGhlIEZvcm1EYXRhIGltcGxlbWVudGF0aW9uCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzY2NTkKKwor
ICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAgICAqIHdlYi1wbGF0Zm9y
bS10ZXN0cy9YTUxIdHRwUmVxdWVzdC9Gb3JtRGF0YS1hcHBlbmQtZXhwZWN0ZWQudHh0OgorICAg
ICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9YTUxIdHRwUmVxdWVzdC9mb3JtZGF0YS1kZWxldGUt
ZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9YTUxIdHRwUmVxdWVz
dC9mb3JtZGF0YS1mb3JlYWNoLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0t
dGVzdHMvWE1MSHR0cFJlcXVlc3QvZm9ybWRhdGEtZ2V0LWV4cGVjdGVkLnR4dDoKKyAgICAgICAg
KiB3ZWItcGxhdGZvcm0tdGVzdHMvWE1MSHR0cFJlcXVlc3QvZm9ybWRhdGEtaGFzLWV4cGVjdGVk
LnR4dDoKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvWE1MSHR0cFJlcXVlc3QvZm9ybWRh
dGEtc2V0LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiB3ZWItcGxhdGZvcm0tdGVzdHMvWE1MSHR0
cFJlcXVlc3QvaW50ZXJmYWNlcy1leHBlY3RlZC50eHQ6CisgICAgICAgIAorICAgICAgICAgICAg
VXBkYXRlIHJlc3VsdHMuCisKIDIwMTctMDktMDggIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBw
bGUuY29tPgogCiAgICAgICAgIFJlbW92ZSBzdXBwb3J0IGZvciA+PiBkZXNjZW5kYW50IGNvbWJp
bmF0b3Igc3ludGF4CkluZGV4OiBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL1hNTEh0dHBSZXF1ZXN0L0Zvcm1EYXRhLWFwcGVuZC1leHBlY3RlZC50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9YTUxI
dHRwUmVxdWVzdC9Gb3JtRGF0YS1hcHBlbmQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAyMjE4Mjcp
CisrKyBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL1hNTEh0dHBS
ZXF1ZXN0L0Zvcm1EYXRhLWFwcGVuZC1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEs
MTYgKzEsMTYgQEAKIAogUEFTUyBQYXNzaW5nIGEgU3RyaW5nIG9iamVjdCB0byBGb3JtRGF0YS5h
cHBlbmQgc2hvdWxkIHdvcmsuIAotRkFJTCB0ZXN0Rm9ybURhdGFBcHBlbmQxIGNyZWF0ZV9mb3Jt
ZGF0YShbJ2tleScsICd2YWx1ZTEnXSkuZ2V0IGlzIG5vdCBhIGZ1bmN0aW9uLiAoSW4gJ2NyZWF0
ZV9mb3JtZGF0YShbJ2tleScsICd2YWx1ZTEnXSkuZ2V0KCdrZXknKScsICdjcmVhdGVfZm9ybWRh
dGEoWydrZXknLCAndmFsdWUxJ10pLmdldCcgaXMgdW5kZWZpbmVkKQotRkFJTCB0ZXN0Rm9ybURh
dGFBcHBlbmQyIGNyZWF0ZV9mb3JtZGF0YShbJ2tleScsICd2YWx1ZTInXSwgWydrZXknLCAndmFs
dWUxJ10pLmdldCBpcyBub3QgYSBmdW5jdGlvbi4gKEluICdjcmVhdGVfZm9ybWRhdGEoWydrZXkn
LCAndmFsdWUyJ10sIFsna2V5JywgJ3ZhbHVlMSddKS5nZXQoJ2tleScpJywgJ2NyZWF0ZV9mb3Jt
ZGF0YShbJ2tleScsICd2YWx1ZTInXSwgWydrZXknLCAndmFsdWUxJ10pLmdldCcgaXMgdW5kZWZp
bmVkKQotRkFJTCB0ZXN0Rm9ybURhdGFBcHBlbmRVbmRlZmluZWQxIGNyZWF0ZV9mb3JtZGF0YShb
J2tleScsIHVuZGVmaW5lZF0pLmdldCBpcyBub3QgYSBmdW5jdGlvbi4gKEluICdjcmVhdGVfZm9y
bWRhdGEoWydrZXknLCB1bmRlZmluZWRdKS5nZXQoJ2tleScpJywgJ2NyZWF0ZV9mb3JtZGF0YShb
J2tleScsIHVuZGVmaW5lZF0pLmdldCcgaXMgdW5kZWZpbmVkKQotRkFJTCB0ZXN0Rm9ybURhdGFB
cHBlbmRVbmRlZmluZWQyIGNyZWF0ZV9mb3JtZGF0YShbJ2tleScsIHVuZGVmaW5lZF0sIFsna2V5
JywgJ3ZhbHVlMSddKS5nZXQgaXMgbm90IGEgZnVuY3Rpb24uIChJbiAnY3JlYXRlX2Zvcm1kYXRh
KFsna2V5JywgdW5kZWZpbmVkXSwgWydrZXknLCAndmFsdWUxJ10pLmdldCgna2V5JyknLCAnY3Jl
YXRlX2Zvcm1kYXRhKFsna2V5JywgdW5kZWZpbmVkXSwgWydrZXknLCAndmFsdWUxJ10pLmdldCcg
aXMgdW5kZWZpbmVkKQotRkFJTCB0ZXN0Rm9ybURhdGFBcHBlbmROdWxsMSBjcmVhdGVfZm9ybWRh
dGEoWydrZXknLCBudWxsXSkuZ2V0IGlzIG5vdCBhIGZ1bmN0aW9uLiAoSW4gJ2NyZWF0ZV9mb3Jt
ZGF0YShbJ2tleScsIG51bGxdKS5nZXQoJ2tleScpJywgJ2NyZWF0ZV9mb3JtZGF0YShbJ2tleScs
IG51bGxdKS5nZXQnIGlzIHVuZGVmaW5lZCkKLUZBSUwgdGVzdEZvcm1EYXRhQXBwZW5kTnVsbDIg
Y3JlYXRlX2Zvcm1kYXRhKFsna2V5JywgbnVsbF0sIFsna2V5JywgJ3ZhbHVlMSddKS5nZXQgaXMg
bm90IGEgZnVuY3Rpb24uIChJbiAnY3JlYXRlX2Zvcm1kYXRhKFsna2V5JywgbnVsbF0sIFsna2V5
JywgJ3ZhbHVlMSddKS5nZXQoJ2tleScpJywgJ2NyZWF0ZV9mb3JtZGF0YShbJ2tleScsIG51bGxd
LCBbJ2tleScsICd2YWx1ZTEnXSkuZ2V0JyBpcyB1bmRlZmluZWQpCi1GQUlMIHRlc3RGb3JtRGF0
YUFwcGVuZFRvRm9ybTEgZmQuZ2V0IGlzIG5vdCBhIGZ1bmN0aW9uLiAoSW4gJ2ZkLmdldCgna2V5
JyknLCAnZmQuZ2V0JyBpcyB1bmRlZmluZWQpCi1GQUlMIHRlc3RGb3JtRGF0YUFwcGVuZFRvRm9y
bTIgZmQuZ2V0IGlzIG5vdCBhIGZ1bmN0aW9uLiAoSW4gJ2ZkLmdldCgna2V5JyknLCAnZmQuZ2V0
JyBpcyB1bmRlZmluZWQpCi1GQUlMIHRlc3RGb3JtRGF0YUFwcGVuZFRvRm9ybVVuZGVmaW5lZDEg
ZmQuZ2V0IGlzIG5vdCBhIGZ1bmN0aW9uLiAoSW4gJ2ZkLmdldCgna2V5JyknLCAnZmQuZ2V0JyBp
cyB1bmRlZmluZWQpCi1GQUlMIHRlc3RGb3JtRGF0YUFwcGVuZFRvRm9ybVVuZGVmaW5lZDIgZmQu
Z2V0IGlzIG5vdCBhIGZ1bmN0aW9uLiAoSW4gJ2ZkLmdldCgna2V5JyknLCAnZmQuZ2V0JyBpcyB1
bmRlZmluZWQpCi1GQUlMIHRlc3RGb3JtRGF0YUFwcGVuZFRvRm9ybU51bGwxIGZkLmdldCBpcyBu
b3QgYSBmdW5jdGlvbi4gKEluICdmZC5nZXQoJ2tleScpJywgJ2ZkLmdldCcgaXMgdW5kZWZpbmVk
KQotRkFJTCB0ZXN0Rm9ybURhdGFBcHBlbmRUb0Zvcm1OdWxsMiBmZC5nZXQgaXMgbm90IGEgZnVu
Y3Rpb24uIChJbiAnZmQuZ2V0KCdrZXknKScsICdmZC5nZXQnIGlzIHVuZGVmaW5lZCkKLUZBSUwg
dGVzdEZvcm1EYXRhQXBwZW5kRW1wdHlCbG9iIGNyZWF0ZV9mb3JtZGF0YShbJ2tleScsIG5ldyBC
bG9iKCksICdibGFuay50eHQnXSkuZ2V0IGlzIG5vdCBhIGZ1bmN0aW9uLiAoSW4gJ2NyZWF0ZV9m
b3JtZGF0YShbJ2tleScsIG5ldyBCbG9iKCksICdibGFuay50eHQnXSkuZ2V0KCdrZXknKScsICdj
cmVhdGVfZm9ybWRhdGEoWydrZXknLCBuZXcgQmxvYigpLCAnYmxhbmsudHh0J10pLmdldCcgaXMg
dW5kZWZpbmVkKQorUEFTUyB0ZXN0Rm9ybURhdGFBcHBlbmQxIAorUEFTUyB0ZXN0Rm9ybURhdGFB
cHBlbmQyIAorUEFTUyB0ZXN0Rm9ybURhdGFBcHBlbmRVbmRlZmluZWQxIAorUEFTUyB0ZXN0Rm9y
bURhdGFBcHBlbmRVbmRlZmluZWQyIAorUEFTUyB0ZXN0Rm9ybURhdGFBcHBlbmROdWxsMSAKK1BB
U1MgdGVzdEZvcm1EYXRhQXBwZW5kTnVsbDIgCitQQVNTIHRlc3RGb3JtRGF0YUFwcGVuZFRvRm9y
bTEgCitQQVNTIHRlc3RGb3JtRGF0YUFwcGVuZFRvRm9ybTIgCitQQVNTIHRlc3RGb3JtRGF0YUFw
cGVuZFRvRm9ybVVuZGVmaW5lZDEgCitQQVNTIHRlc3RGb3JtRGF0YUFwcGVuZFRvRm9ybVVuZGVm
aW5lZDIgCitQQVNTIHRlc3RGb3JtRGF0YUFwcGVuZFRvRm9ybU51bGwxIAorUEFTUyB0ZXN0Rm9y
bURhdGFBcHBlbmRUb0Zvcm1OdWxsMiAKK1BBU1MgdGVzdEZvcm1EYXRhQXBwZW5kRW1wdHlCbG9i
IAogCkluZGV4OiBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL1hN
TEh0dHBSZXF1ZXN0L2Zvcm1kYXRhLWRlbGV0ZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9YTUxIdHRwUmVxdWVz
dC9mb3JtZGF0YS1kZWxldGUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAyMjE4MjcpCisrKyBMYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL1hNTEh0dHBSZXF1ZXN0L2Zv
cm1kYXRhLWRlbGV0ZS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEsOSArMSw5IEBA
CiAKLUZBSUwgdGVzdEZvcm1EYXRhRGVsZXRlIGZkLmRlbGV0ZSBpcyBub3QgYSBmdW5jdGlvbi4g
KEluICdmZC5kZWxldGUoJ2tleScpJywgJ2ZkLmRlbGV0ZScgaXMgdW5kZWZpbmVkKQotRkFJTCB0
ZXN0Rm9ybURhdGFEZWxldGVGcm9tRm9ybSBmZC5kZWxldGUgaXMgbm90IGEgZnVuY3Rpb24uIChJ
biAnZmQuZGVsZXRlKCdrZXknKScsICdmZC5kZWxldGUnIGlzIHVuZGVmaW5lZCkKLUZBSUwgdGVz
dEZvcm1EYXRhRGVsZXRlRnJvbUZvcm1Ob25FeGlzdGVudEtleSBmZC5kZWxldGUgaXMgbm90IGEg
ZnVuY3Rpb24uIChJbiAnZmQuZGVsZXRlKCduaWwnKScsICdmZC5kZWxldGUnIGlzIHVuZGVmaW5l
ZCkKLUZBSUwgdGVzdEZvcm1EYXRhRGVsZXRlRnJvbUZvcm1PdGhlcktleSBmZC5kZWxldGUgaXMg
bm90IGEgZnVuY3Rpb24uIChJbiAnZmQuZGVsZXRlKCdrZXkxJyknLCAnZmQuZGVsZXRlJyBpcyB1
bmRlZmluZWQpCi1GQUlMIHRlc3RGb3JtRGF0YURlbGV0ZUZyb21FbXB0eUZvcm0gZmQuZGVsZXRl
IGlzIG5vdCBhIGZ1bmN0aW9uLiAoSW4gJ2ZkLmRlbGV0ZSgna2V5JyknLCAnZmQuZGVsZXRlJyBp
cyB1bmRlZmluZWQpCi1GQUlMIHRlc3RGb3JtRGF0YURlbGV0ZU5vbkV4aXN0ZW50S2V5IGZkLmRl
bGV0ZSBpcyBub3QgYSBmdW5jdGlvbi4gKEluICdmZC5kZWxldGUoJ25pbCcpJywgJ2ZkLmRlbGV0
ZScgaXMgdW5kZWZpbmVkKQotRkFJTCB0ZXN0Rm9ybURhdGFEZWxldGVPdGhlcktleSBmZC5kZWxl
dGUgaXMgbm90IGEgZnVuY3Rpb24uIChJbiAnZmQuZGVsZXRlKCdrZXkxJyknLCAnZmQuZGVsZXRl
JyBpcyB1bmRlZmluZWQpCitQQVNTIHRlc3RGb3JtRGF0YURlbGV0ZSAKK1BBU1MgdGVzdEZvcm1E
YXRhRGVsZXRlRnJvbUZvcm0gCitQQVNTIHRlc3RGb3JtRGF0YURlbGV0ZUZyb21Gb3JtTm9uRXhp
c3RlbnRLZXkgCitQQVNTIHRlc3RGb3JtRGF0YURlbGV0ZUZyb21Gb3JtT3RoZXJLZXkgCitQQVNT
IHRlc3RGb3JtRGF0YURlbGV0ZUZyb21FbXB0eUZvcm0gCitQQVNTIHRlc3RGb3JtRGF0YURlbGV0
ZU5vbkV4aXN0ZW50S2V5IAorUEFTUyB0ZXN0Rm9ybURhdGFEZWxldGVPdGhlcktleSAKIApJbmRl
eDogTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9YTUxIdHRwUmVx
dWVzdC9mb3JtZGF0YS1mb3JlYWNoLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL1hNTEh0dHBSZXF1ZXN0L2Zvcm1k
YXRhLWZvcmVhY2gtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAyMjE4MjcpCisrKyBMYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL1hNTEh0dHBSZXF1ZXN0L2Zvcm1kYXRh
LWZvcmVhY2gtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEsNiBAQAotQ09O
U09MRSBNRVNTQUdFOiBsaW5lIDE2OiBUeXBlRXJyb3I6IGZkLmRlbGV0ZSBpcyBub3QgYSBmdW5j
dGlvbi4gKEluICdmZC5kZWxldGUoJ24yJyknLCAnZmQuZGVsZXRlJyBpcyB1bmRlZmluZWQpCiAK
LUZBSUwgRm9ybURhdGE6IGZvcmVhY2ggVHlwZUVycm9yOiBmZC5kZWxldGUgaXMgbm90IGEgZnVu
Y3Rpb24uIChJbiAnZmQuZGVsZXRlKCduMicpJywgJ2ZkLmRlbGV0ZScgaXMgdW5kZWZpbmVkKQor
UEFTUyBJdGVyYXRvciBzaG91bGQgcmV0dXJuIGR1cGxpY2F0ZSBrZXlzIGFuZCBub24tZGVsZXRl
ZCB2YWx1ZXMgCitQQVNTIEVudHJpZXMgaXRlcmF0b3Igc2hvdWxkIHJldHVybiBkdXBsaWNhdGUg
a2V5cyBhbmQgbm9uLWRlbGV0ZWQgdmFsdWVzIAorUEFTUyBLZXlzIGl0ZXJhdG9yIHNob3VsZCBy
ZXR1cm4gZHVwbGljYXRlcyAKK1BBU1MgVmFsdWVzIGl0ZXJhdG9yIHNob3VsZCByZXR1cm4gbm9u
LWRlbGV0ZWQgdmFsdWVzIAogCkluZGV4OiBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL1hNTEh0dHBSZXF1ZXN0L2Zvcm1kYXRhLWdldC1leHBlY3RlZC50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9Y
TUxIdHRwUmVxdWVzdC9mb3JtZGF0YS1nZXQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAyMjE4Mjcp
CisrKyBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL1hNTEh0dHBS
ZXF1ZXN0L2Zvcm1kYXRhLWdldC1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEsMTQg
KzEsMTQgQEAKIAotRkFJTCB0ZXN0Rm9ybURhdGFHZXQgY3JlYXRlX2Zvcm1kYXRhKFsna2V5Jywg
J3ZhbHVlMSddLCBbJ2tleScsICd2YWx1ZTInXSkuZ2V0IGlzIG5vdCBhIGZ1bmN0aW9uLiAoSW4g
J2NyZWF0ZV9mb3JtZGF0YShbJ2tleScsICd2YWx1ZTEnXSwgWydrZXknLCAndmFsdWUyJ10pLmdl
dCgna2V5JyknLCAnY3JlYXRlX2Zvcm1kYXRhKFsna2V5JywgJ3ZhbHVlMSddLCBbJ2tleScsICd2
YWx1ZTInXSkuZ2V0JyBpcyB1bmRlZmluZWQpCi1GQUlMIHRlc3RGb3JtRGF0YUdldEZyb21Gb3Jt
IG5ldyBGb3JtRGF0YShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZm9ybScpKS5nZXQgaXMgbm90
IGEgZnVuY3Rpb24uIChJbiAnbmV3IEZvcm1EYXRhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdm
b3JtJykpLmdldCgna2V5JyknLCAnbmV3IEZvcm1EYXRhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCdmb3JtJykpLmdldCcgaXMgdW5kZWZpbmVkKQotRkFJTCB0ZXN0Rm9ybURhdGFHZXRGcm9tRm9y
bU51bGwgbmV3IEZvcm1EYXRhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmb3JtJykpLmdldCBp
cyBub3QgYSBmdW5jdGlvbi4gKEluICduZXcgRm9ybURhdGEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoJ2Zvcm0nKSkuZ2V0KCduaWwnKScsICduZXcgRm9ybURhdGEoZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoJ2Zvcm0nKSkuZ2V0JyBpcyB1bmRlZmluZWQpCi1GQUlMIHRlc3RGb3JtRGF0YUdldEZy
b21FbXB0eUZvcm0gbmV3IEZvcm1EYXRhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlbXB0eS1m
b3JtJykpLmdldCBpcyBub3QgYSBmdW5jdGlvbi4gKEluICduZXcgRm9ybURhdGEoZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoJ2VtcHR5LWZvcm0nKSkuZ2V0KCdrZXknKScsICduZXcgRm9ybURhdGEo
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VtcHR5LWZvcm0nKSkuZ2V0JyBpcyB1bmRlZmluZWQp
Ci1GQUlMIHRlc3RGb3JtRGF0YUdldE51bGwxIGNyZWF0ZV9mb3JtZGF0YShbJ2tleScsICd2YWx1
ZTEnXSwgWydrZXknLCAndmFsdWUyJ10pLmdldCBpcyBub3QgYSBmdW5jdGlvbi4gKEluICdjcmVh
dGVfZm9ybWRhdGEoWydrZXknLCAndmFsdWUxJ10sIFsna2V5JywgJ3ZhbHVlMiddKS5nZXQoJ25p
bCcpJywgJ2NyZWF0ZV9mb3JtZGF0YShbJ2tleScsICd2YWx1ZTEnXSwgWydrZXknLCAndmFsdWUy
J10pLmdldCcgaXMgdW5kZWZpbmVkKQotRkFJTCB0ZXN0Rm9ybURhdGFHZXROdWxsMiBjcmVhdGVf
Zm9ybWRhdGEoKS5nZXQgaXMgbm90IGEgZnVuY3Rpb24uIChJbiAnY3JlYXRlX2Zvcm1kYXRhKCku
Z2V0KCdrZXknKScsICdjcmVhdGVfZm9ybWRhdGEoKS5nZXQnIGlzIHVuZGVmaW5lZCkKLUZBSUwg
dGVzdEZvcm1EYXRhR2V0QWxsIGNyZWF0ZV9mb3JtZGF0YShbJ2tleScsICd2YWx1ZTEnXSwgWydr
ZXknLCAndmFsdWUyJ10pLmdldEFsbCBpcyBub3QgYSBmdW5jdGlvbi4gKEluICdjcmVhdGVfZm9y
bWRhdGEoWydrZXknLCAndmFsdWUxJ10sIFsna2V5JywgJ3ZhbHVlMiddKS5nZXRBbGwoJ2tleScp
JywgJ2NyZWF0ZV9mb3JtZGF0YShbJ2tleScsICd2YWx1ZTEnXSwgWydrZXknLCAndmFsdWUyJ10p
LmdldEFsbCcgaXMgdW5kZWZpbmVkKQotRkFJTCB0ZXN0Rm9ybURhdGFHZXRBbGxFbXB0eTEgY3Jl
YXRlX2Zvcm1kYXRhKFsna2V5JywgJ3ZhbHVlMSddLCBbJ2tleScsICd2YWx1ZTInXSkuZ2V0QWxs
IGlzIG5vdCBhIGZ1bmN0aW9uLiAoSW4gJ2NyZWF0ZV9mb3JtZGF0YShbJ2tleScsICd2YWx1ZTEn
XSwgWydrZXknLCAndmFsdWUyJ10pLmdldEFsbCgnbmlsJyknLCAnY3JlYXRlX2Zvcm1kYXRhKFsn
a2V5JywgJ3ZhbHVlMSddLCBbJ2tleScsICd2YWx1ZTInXSkuZ2V0QWxsJyBpcyB1bmRlZmluZWQp
Ci1GQUlMIHRlc3RGb3JtRGF0YUdldEFsbEVtcHR5MiBjcmVhdGVfZm9ybWRhdGEoKS5nZXRBbGwg
aXMgbm90IGEgZnVuY3Rpb24uIChJbiAnY3JlYXRlX2Zvcm1kYXRhKCkuZ2V0QWxsKCdrZXknKScs
ICdjcmVhdGVfZm9ybWRhdGEoKS5nZXRBbGwnIGlzIHVuZGVmaW5lZCkKLUZBSUwgdGVzdEZvcm1E
YXRhR2V0QWxsRnJvbUZvcm0gbmV3IEZvcm1EYXRhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdm
b3JtJykpLmdldEFsbCBpcyBub3QgYSBmdW5jdGlvbi4gKEluICduZXcgRm9ybURhdGEoZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoJ2Zvcm0nKSkuZ2V0QWxsKCdrZXknKScsICduZXcgRm9ybURhdGEo
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Zvcm0nKSkuZ2V0QWxsJyBpcyB1bmRlZmluZWQpCi1G
QUlMIHRlc3RGb3JtRGF0YUdldEFsbEZyb21Gb3JtTnVsbCBuZXcgRm9ybURhdGEoZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoJ2Zvcm0nKSkuZ2V0QWxsIGlzIG5vdCBhIGZ1bmN0aW9uLiAoSW4gJ25l
dyBGb3JtRGF0YShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZm9ybScpKS5nZXRBbGwoJ25pbCcp
JywgJ25ldyBGb3JtRGF0YShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZm9ybScpKS5nZXRBbGwn
IGlzIHVuZGVmaW5lZCkKLUZBSUwgdGVzdEZvcm1EYXRhR2V0QWxsRnJvbUVtcHR5Rm9ybSBuZXcg
Rm9ybURhdGEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VtcHR5LWZvcm0nKSkuZ2V0QWxsIGlz
IG5vdCBhIGZ1bmN0aW9uLiAoSW4gJ25ldyBGb3JtRGF0YShkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgnZW1wdHktZm9ybScpKS5nZXRBbGwoJ2tleScpJywgJ25ldyBGb3JtRGF0YShkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgnZW1wdHktZm9ybScpKS5nZXRBbGwnIGlzIHVuZGVmaW5lZCkKK1BBU1Mg
dGVzdEZvcm1EYXRhR2V0IAorUEFTUyB0ZXN0Rm9ybURhdGFHZXRGcm9tRm9ybSAKK1BBU1MgdGVz
dEZvcm1EYXRhR2V0RnJvbUZvcm1OdWxsIAorUEFTUyB0ZXN0Rm9ybURhdGFHZXRGcm9tRW1wdHlG
b3JtIAorUEFTUyB0ZXN0Rm9ybURhdGFHZXROdWxsMSAKK1BBU1MgdGVzdEZvcm1EYXRhR2V0TnVs
bDIgCitQQVNTIHRlc3RGb3JtRGF0YUdldEFsbCAKK1BBU1MgdGVzdEZvcm1EYXRhR2V0QWxsRW1w
dHkxIAorUEFTUyB0ZXN0Rm9ybURhdGFHZXRBbGxFbXB0eTIgCitQQVNTIHRlc3RGb3JtRGF0YUdl
dEFsbEZyb21Gb3JtIAorUEFTUyB0ZXN0Rm9ybURhdGFHZXRBbGxGcm9tRm9ybU51bGwgCitQQVNT
IHRlc3RGb3JtRGF0YUdldEFsbEZyb21FbXB0eUZvcm0gCiAKSW5kZXg6IExheW91dFRlc3RzL2lt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvWE1MSHR0cFJlcXVlc3QvZm9ybWRhdGEtaGFz
LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL1hNTEh0dHBSZXF1ZXN0L2Zvcm1kYXRhLWhhcy1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDIyMTgyNykKKysrIExheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvWE1MSHR0cFJlcXVlc3QvZm9ybWRhdGEtaGFzLWV4cGVjdGVkLnR4dAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw4ICsxLDggQEAKIAotRkFJTCB0ZXN0Rm9ybURhdGFIYXMgY3JlYXRlX2Zv
cm1kYXRhKFsna2V5JywgJ3ZhbHVlMSddLCBbJ2tleScsICd2YWx1ZTInXSkuaGFzIGlzIG5vdCBh
IGZ1bmN0aW9uLiAoSW4gJ2NyZWF0ZV9mb3JtZGF0YShbJ2tleScsICd2YWx1ZTEnXSwgWydrZXkn
LCAndmFsdWUyJ10pLmhhcygna2V5JyknLCAnY3JlYXRlX2Zvcm1kYXRhKFsna2V5JywgJ3ZhbHVl
MSddLCBbJ2tleScsICd2YWx1ZTInXSkuaGFzJyBpcyB1bmRlZmluZWQpCi1GQUlMIHRlc3RGb3Jt
RGF0YUhhc0Zyb21Gb3JtIG5ldyBGb3JtRGF0YShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZm9y
bScpKS5oYXMgaXMgbm90IGEgZnVuY3Rpb24uIChJbiAnbmV3IEZvcm1EYXRhKGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCdmb3JtJykpLmhhcygna2V5JyknLCAnbmV3IEZvcm1EYXRhKGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCdmb3JtJykpLmhhcycgaXMgdW5kZWZpbmVkKQotRkFJTCB0ZXN0Rm9y
bURhdGFIYXNGcm9tRm9ybU51bGwgbmV3IEZvcm1EYXRhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCdmb3JtJykpLmhhcyBpcyBub3QgYSBmdW5jdGlvbi4gKEluICduZXcgRm9ybURhdGEoZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoJ2Zvcm0nKSkuaGFzKCduaWwnKScsICduZXcgRm9ybURhdGEoZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Zvcm0nKSkuaGFzJyBpcyB1bmRlZmluZWQpCi1GQUlMIHRl
c3RGb3JtRGF0YUhhc0Zyb21FbXB0eUZvcm0gbmV3IEZvcm1EYXRhKGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCdlbXB0eS1mb3JtJykpLmhhcyBpcyBub3QgYSBmdW5jdGlvbi4gKEluICduZXcgRm9y
bURhdGEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VtcHR5LWZvcm0nKSkuaGFzKCdrZXknKScs
ICduZXcgRm9ybURhdGEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VtcHR5LWZvcm0nKSkuaGFz
JyBpcyB1bmRlZmluZWQpCi1GQUlMIHRlc3RGb3JtRGF0YUhhc0VtcHR5MSBjcmVhdGVfZm9ybWRh
dGEoWydrZXknLCAndmFsdWUxJ10sIFsna2V5JywgJ3ZhbHVlMiddKS5oYXMgaXMgbm90IGEgZnVu
Y3Rpb24uIChJbiAnY3JlYXRlX2Zvcm1kYXRhKFsna2V5JywgJ3ZhbHVlMSddLCBbJ2tleScsICd2
YWx1ZTInXSkuaGFzKCduaWwnKScsICdjcmVhdGVfZm9ybWRhdGEoWydrZXknLCAndmFsdWUxJ10s
IFsna2V5JywgJ3ZhbHVlMiddKS5oYXMnIGlzIHVuZGVmaW5lZCkKLUZBSUwgdGVzdEZvcm1EYXRh
SGFzRW1wdHkyIGNyZWF0ZV9mb3JtZGF0YSgpLmhhcyBpcyBub3QgYSBmdW5jdGlvbi4gKEluICdj
cmVhdGVfZm9ybWRhdGEoKS5oYXMoJ2tleScpJywgJ2NyZWF0ZV9mb3JtZGF0YSgpLmhhcycgaXMg
dW5kZWZpbmVkKQorUEFTUyB0ZXN0Rm9ybURhdGFIYXMgCitQQVNTIHRlc3RGb3JtRGF0YUhhc0Zy
b21Gb3JtIAorUEFTUyB0ZXN0Rm9ybURhdGFIYXNGcm9tRm9ybU51bGwgCitQQVNTIHRlc3RGb3Jt
RGF0YUhhc0Zyb21FbXB0eUZvcm0gCitQQVNTIHRlc3RGb3JtRGF0YUhhc0VtcHR5MSAKK1BBU1Mg
dGVzdEZvcm1EYXRhSGFzRW1wdHkyIAogCkluZGV4OiBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL1hNTEh0dHBSZXF1ZXN0L2Zvcm1kYXRhLXNldC1leHBlY3RlZC50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9YTUxIdHRwUmVxdWVzdC9mb3JtZGF0YS1zZXQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAy
MjE4MjcpCisrKyBMYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL1hN
TEh0dHBSZXF1ZXN0L2Zvcm1kYXRhLXNldC1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAg
LTEsMTYgKzEsMTYgQEAKIAotRkFJTCBQYXNzaW5nIGEgU3RyaW5nIG9iamVjdCB0byBGb3JtRGF0
YS5zZXQgc2hvdWxkIHdvcmsgZmQuc2V0IGlzIG5vdCBhIGZ1bmN0aW9uLiAoSW4gJ2ZkLnNldCgi
bmFtZSIsIG5ldyBTdHJpbmcoInZhbHVlIikpJywgJ2ZkLnNldCcgaXMgdW5kZWZpbmVkKQotRkFJ
TCB0ZXN0Rm9ybURhdGFTZXQxIHVuZGVmaW5lZCBpcyBub3QgYW4gb2JqZWN0IChldmFsdWF0aW5n
ICdmZC5zZXQuYXBwbHknKQotRkFJTCB0ZXN0Rm9ybURhdGFTZXQyIHVuZGVmaW5lZCBpcyBub3Qg
YW4gb2JqZWN0IChldmFsdWF0aW5nICdmZC5zZXQuYXBwbHknKQotRkFJTCB0ZXN0Rm9ybURhdGFT
ZXRVbmRlZmluZWQxIHVuZGVmaW5lZCBpcyBub3QgYW4gb2JqZWN0IChldmFsdWF0aW5nICdmZC5z
ZXQuYXBwbHknKQotRkFJTCB0ZXN0Rm9ybURhdGFTZXRVbmRlZmluZWQyIHVuZGVmaW5lZCBpcyBu
b3QgYW4gb2JqZWN0IChldmFsdWF0aW5nICdmZC5zZXQuYXBwbHknKQotRkFJTCB0ZXN0Rm9ybURh
dGFTZXROdWxsMSB1bmRlZmluZWQgaXMgbm90IGFuIG9iamVjdCAoZXZhbHVhdGluZyAnZmQuc2V0
LmFwcGx5JykKLUZBSUwgdGVzdEZvcm1EYXRhU2V0TnVsbDIgdW5kZWZpbmVkIGlzIG5vdCBhbiBv
YmplY3QgKGV2YWx1YXRpbmcgJ2ZkLnNldC5hcHBseScpCi1GQUlMIHRlc3RGb3JtRGF0YVNldFRv
Rm9ybTEgZmQuc2V0IGlzIG5vdCBhIGZ1bmN0aW9uLiAoSW4gJ2ZkLnNldCgna2V5JywgJ3ZhbHVl
MScpJywgJ2ZkLnNldCcgaXMgdW5kZWZpbmVkKQotRkFJTCB0ZXN0Rm9ybURhdGFTZXRUb0Zvcm0y
IGZkLnNldCBpcyBub3QgYSBmdW5jdGlvbi4gKEluICdmZC5zZXQoJ2tleScsICd2YWx1ZTInKScs
ICdmZC5zZXQnIGlzIHVuZGVmaW5lZCkKLUZBSUwgdGVzdEZvcm1EYXRhU2V0VG9Gb3JtVW5kZWZp
bmVkMSBmZC5zZXQgaXMgbm90IGEgZnVuY3Rpb24uIChJbiAnZmQuc2V0KCdrZXknLCB1bmRlZmlu
ZWQpJywgJ2ZkLnNldCcgaXMgdW5kZWZpbmVkKQotRkFJTCB0ZXN0Rm9ybURhdGFTZXRUb0Zvcm1V
bmRlZmluZWQyIGZkLnNldCBpcyBub3QgYSBmdW5jdGlvbi4gKEluICdmZC5zZXQoJ2tleScsIHVu
ZGVmaW5lZCknLCAnZmQuc2V0JyBpcyB1bmRlZmluZWQpCi1GQUlMIHRlc3RGb3JtRGF0YVNldFRv
Rm9ybU51bGwxIGZkLnNldCBpcyBub3QgYSBmdW5jdGlvbi4gKEluICdmZC5zZXQoJ2tleScsIG51
bGwpJywgJ2ZkLnNldCcgaXMgdW5kZWZpbmVkKQotRkFJTCB0ZXN0Rm9ybURhdGFTZXRUb0Zvcm1O
dWxsMiBmZC5zZXQgaXMgbm90IGEgZnVuY3Rpb24uIChJbiAnZmQuc2V0KCdrZXknLCBudWxsKScs
ICdmZC5zZXQnIGlzIHVuZGVmaW5lZCkKLUZBSUwgdGVzdEZvcm1EYXRhU2V0RW1wdHlCbG9iIGZk
LnNldCBpcyBub3QgYSBmdW5jdGlvbi4gKEluICdmZC5zZXQoJ2tleScsIG5ldyBCbG9iKFtdKSwg
J2JsYW5rLnR4dCcpJywgJ2ZkLnNldCcgaXMgdW5kZWZpbmVkKQorUEFTUyBQYXNzaW5nIGEgU3Ry
aW5nIG9iamVjdCB0byBGb3JtRGF0YS5zZXQgc2hvdWxkIHdvcmsgCitQQVNTIHRlc3RGb3JtRGF0
YVNldDEgCitQQVNTIHRlc3RGb3JtRGF0YVNldDIgCitQQVNTIHRlc3RGb3JtRGF0YVNldFVuZGVm
aW5lZDEgCitQQVNTIHRlc3RGb3JtRGF0YVNldFVuZGVmaW5lZDIgCitQQVNTIHRlc3RGb3JtRGF0
YVNldE51bGwxIAorUEFTUyB0ZXN0Rm9ybURhdGFTZXROdWxsMiAKK1BBU1MgdGVzdEZvcm1EYXRh
U2V0VG9Gb3JtMSAKK1BBU1MgdGVzdEZvcm1EYXRhU2V0VG9Gb3JtMiAKK1BBU1MgdGVzdEZvcm1E
YXRhU2V0VG9Gb3JtVW5kZWZpbmVkMSAKK1BBU1MgdGVzdEZvcm1EYXRhU2V0VG9Gb3JtVW5kZWZp
bmVkMiAKK1BBU1MgdGVzdEZvcm1EYXRhU2V0VG9Gb3JtTnVsbDEgCitQQVNTIHRlc3RGb3JtRGF0
YVNldFRvRm9ybU51bGwyIAorUEFTUyB0ZXN0Rm9ybURhdGFTZXRFbXB0eUJsb2IgCiAKSW5kZXg6
IExheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvWE1MSHR0cFJlcXVl
c3QvaW50ZXJmYWNlcy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9YTUxIdHRwUmVxdWVzdC9pbnRlcmZhY2VzLWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMjIxODI3KQorKysgTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9YTUxIdHRwUmVxdWVzdC9pbnRlcmZhY2VzLWV4cGVjdGVkLnR4
dAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDQ0ICsxMDgsNDQgQEAgUEFTUyBGb3JtRGF0YSBpbnRl
cmZhY2U6IGV4aXN0ZW5jZSBhbmQgcAogUEFTUyBGb3JtRGF0YSBpbnRlcmZhY2U6IGV4aXN0ZW5j
ZSBhbmQgcHJvcGVydGllcyBvZiBpbnRlcmZhY2UgcHJvdG90eXBlIG9iamVjdCdzICJjb25zdHJ1
Y3RvciIgcHJvcGVydHkgCiBQQVNTIEZvcm1EYXRhIGludGVyZmFjZTogb3BlcmF0aW9uIGFwcGVu
ZChVU1ZTdHJpbmcsQmxvYixVU1ZTdHJpbmcpIAogUEFTUyBGb3JtRGF0YSBpbnRlcmZhY2U6IG9w
ZXJhdGlvbiBhcHBlbmQoVVNWU3RyaW5nLFVTVlN0cmluZykgCi1GQUlMIEZvcm1EYXRhIGludGVy
ZmFjZTogb3BlcmF0aW9uIGRlbGV0ZShVU1ZTdHJpbmcpIGFzc2VydF9vd25fcHJvcGVydHk6IGlu
dGVyZmFjZSBwcm90b3R5cGUgb2JqZWN0IG1pc3Npbmcgbm9uLXN0YXRpYyBvcGVyYXRpb24gZXhw
ZWN0ZWQgcHJvcGVydHkgImRlbGV0ZSIgbWlzc2luZwotRkFJTCBGb3JtRGF0YSBpbnRlcmZhY2U6
IG9wZXJhdGlvbiBnZXQoVVNWU3RyaW5nKSBhc3NlcnRfb3duX3Byb3BlcnR5OiBpbnRlcmZhY2Ug
cHJvdG90eXBlIG9iamVjdCBtaXNzaW5nIG5vbi1zdGF0aWMgb3BlcmF0aW9uIGV4cGVjdGVkIHBy
b3BlcnR5ICJnZXQiIG1pc3NpbmcKLUZBSUwgRm9ybURhdGEgaW50ZXJmYWNlOiBvcGVyYXRpb24g
Z2V0QWxsKFVTVlN0cmluZykgYXNzZXJ0X293bl9wcm9wZXJ0eTogaW50ZXJmYWNlIHByb3RvdHlw
ZSBvYmplY3QgbWlzc2luZyBub24tc3RhdGljIG9wZXJhdGlvbiBleHBlY3RlZCBwcm9wZXJ0eSAi
Z2V0QWxsIiBtaXNzaW5nCi1GQUlMIEZvcm1EYXRhIGludGVyZmFjZTogb3BlcmF0aW9uIGhhcyhV
U1ZTdHJpbmcpIGFzc2VydF9vd25fcHJvcGVydHk6IGludGVyZmFjZSBwcm90b3R5cGUgb2JqZWN0
IG1pc3Npbmcgbm9uLXN0YXRpYyBvcGVyYXRpb24gZXhwZWN0ZWQgcHJvcGVydHkgImhhcyIgbWlz
c2luZwotRkFJTCBGb3JtRGF0YSBpbnRlcmZhY2U6IG9wZXJhdGlvbiBzZXQoVVNWU3RyaW5nLEJs
b2IsVVNWU3RyaW5nKSBhc3NlcnRfb3duX3Byb3BlcnR5OiBpbnRlcmZhY2UgcHJvdG90eXBlIG9i
amVjdCBtaXNzaW5nIG5vbi1zdGF0aWMgb3BlcmF0aW9uIGV4cGVjdGVkIHByb3BlcnR5ICJzZXQi
IG1pc3NpbmcKLUZBSUwgRm9ybURhdGEgaW50ZXJmYWNlOiBvcGVyYXRpb24gc2V0KFVTVlN0cmlu
ZyxVU1ZTdHJpbmcpIGFzc2VydF9vd25fcHJvcGVydHk6IGludGVyZmFjZSBwcm90b3R5cGUgb2Jq
ZWN0IG1pc3Npbmcgbm9uLXN0YXRpYyBvcGVyYXRpb24gZXhwZWN0ZWQgcHJvcGVydHkgInNldCIg
bWlzc2luZworUEFTUyBGb3JtRGF0YSBpbnRlcmZhY2U6IG9wZXJhdGlvbiBkZWxldGUoVVNWU3Ry
aW5nKSAKK1BBU1MgRm9ybURhdGEgaW50ZXJmYWNlOiBvcGVyYXRpb24gZ2V0KFVTVlN0cmluZykg
CitQQVNTIEZvcm1EYXRhIGludGVyZmFjZTogb3BlcmF0aW9uIGdldEFsbChVU1ZTdHJpbmcpIAor
UEFTUyBGb3JtRGF0YSBpbnRlcmZhY2U6IG9wZXJhdGlvbiBoYXMoVVNWU3RyaW5nKSAKK1BBU1Mg
Rm9ybURhdGEgaW50ZXJmYWNlOiBvcGVyYXRpb24gc2V0KFVTVlN0cmluZyxCbG9iLFVTVlN0cmlu
ZykgCitQQVNTIEZvcm1EYXRhIGludGVyZmFjZTogb3BlcmF0aW9uIHNldChVU1ZTdHJpbmcsVVNW
U3RyaW5nKSAKIFBBU1MgRm9ybURhdGEgaW50ZXJmYWNlOiBuZXcgRm9ybURhdGEoKSBtdXN0IGlu
aGVyaXQgcHJvcGVydHkgImFwcGVuZCIgd2l0aCB0aGUgcHJvcGVyIHR5cGUgKDApIAogUEFTUyBG
b3JtRGF0YSBpbnRlcmZhY2U6IGNhbGxpbmcgYXBwZW5kKFVTVlN0cmluZyxCbG9iLFVTVlN0cmlu
Zykgb24gbmV3IEZvcm1EYXRhKCkgd2l0aCB0b28gZmV3IGFyZ3VtZW50cyBtdXN0IHRocm93IFR5
cGVFcnJvciAKIFBBU1MgRm9ybURhdGEgaW50ZXJmYWNlOiBuZXcgRm9ybURhdGEoKSBtdXN0IGlu
aGVyaXQgcHJvcGVydHkgImFwcGVuZCIgd2l0aCB0aGUgcHJvcGVyIHR5cGUgKDEpIAogUEFTUyBG
b3JtRGF0YSBpbnRlcmZhY2U6IGNhbGxpbmcgYXBwZW5kKFVTVlN0cmluZyxVU1ZTdHJpbmcpIG9u
IG5ldyBGb3JtRGF0YSgpIHdpdGggdG9vIGZldyBhcmd1bWVudHMgbXVzdCB0aHJvdyBUeXBlRXJy
b3IgCi1GQUlMIEZvcm1EYXRhIGludGVyZmFjZTogbmV3IEZvcm1EYXRhKCkgbXVzdCBpbmhlcml0
IHByb3BlcnR5ICJkZWxldGUiIHdpdGggdGhlIHByb3BlciB0eXBlICgyKSBhc3NlcnRfaW5oZXJp
dHM6IHByb3BlcnR5ICJkZWxldGUiIG5vdCBmb3VuZCBpbiBwcm90b3R5cGUgY2hhaW4KLUZBSUwg
Rm9ybURhdGEgaW50ZXJmYWNlOiBjYWxsaW5nIGRlbGV0ZShVU1ZTdHJpbmcpIG9uIG5ldyBGb3Jt
RGF0YSgpIHdpdGggdG9vIGZldyBhcmd1bWVudHMgbXVzdCB0aHJvdyBUeXBlRXJyb3IgYXNzZXJ0
X2luaGVyaXRzOiBwcm9wZXJ0eSAiZGVsZXRlIiBub3QgZm91bmQgaW4gcHJvdG90eXBlIGNoYWlu
Ci1GQUlMIEZvcm1EYXRhIGludGVyZmFjZTogbmV3IEZvcm1EYXRhKCkgbXVzdCBpbmhlcml0IHBy
b3BlcnR5ICJnZXQiIHdpdGggdGhlIHByb3BlciB0eXBlICgzKSBhc3NlcnRfaW5oZXJpdHM6IHBy
b3BlcnR5ICJnZXQiIG5vdCBmb3VuZCBpbiBwcm90b3R5cGUgY2hhaW4KLUZBSUwgRm9ybURhdGEg
aW50ZXJmYWNlOiBjYWxsaW5nIGdldChVU1ZTdHJpbmcpIG9uIG5ldyBGb3JtRGF0YSgpIHdpdGgg
dG9vIGZldyBhcmd1bWVudHMgbXVzdCB0aHJvdyBUeXBlRXJyb3IgYXNzZXJ0X2luaGVyaXRzOiBw
cm9wZXJ0eSAiZ2V0IiBub3QgZm91bmQgaW4gcHJvdG90eXBlIGNoYWluCi1GQUlMIEZvcm1EYXRh
IGludGVyZmFjZTogbmV3IEZvcm1EYXRhKCkgbXVzdCBpbmhlcml0IHByb3BlcnR5ICJnZXRBbGwi
IHdpdGggdGhlIHByb3BlciB0eXBlICg0KSBhc3NlcnRfaW5oZXJpdHM6IHByb3BlcnR5ICJnZXRB
bGwiIG5vdCBmb3VuZCBpbiBwcm90b3R5cGUgY2hhaW4KLUZBSUwgRm9ybURhdGEgaW50ZXJmYWNl
OiBjYWxsaW5nIGdldEFsbChVU1ZTdHJpbmcpIG9uIG5ldyBGb3JtRGF0YSgpIHdpdGggdG9vIGZl
dyBhcmd1bWVudHMgbXVzdCB0aHJvdyBUeXBlRXJyb3IgYXNzZXJ0X2luaGVyaXRzOiBwcm9wZXJ0
eSAiZ2V0QWxsIiBub3QgZm91bmQgaW4gcHJvdG90eXBlIGNoYWluCi1GQUlMIEZvcm1EYXRhIGlu
dGVyZmFjZTogbmV3IEZvcm1EYXRhKCkgbXVzdCBpbmhlcml0IHByb3BlcnR5ICJoYXMiIHdpdGgg
dGhlIHByb3BlciB0eXBlICg1KSBhc3NlcnRfaW5oZXJpdHM6IHByb3BlcnR5ICJoYXMiIG5vdCBm
b3VuZCBpbiBwcm90b3R5cGUgY2hhaW4KLUZBSUwgRm9ybURhdGEgaW50ZXJmYWNlOiBjYWxsaW5n
IGhhcyhVU1ZTdHJpbmcpIG9uIG5ldyBGb3JtRGF0YSgpIHdpdGggdG9vIGZldyBhcmd1bWVudHMg
bXVzdCB0aHJvdyBUeXBlRXJyb3IgYXNzZXJ0X2luaGVyaXRzOiBwcm9wZXJ0eSAiaGFzIiBub3Qg
Zm91bmQgaW4gcHJvdG90eXBlIGNoYWluCi1GQUlMIEZvcm1EYXRhIGludGVyZmFjZTogbmV3IEZv
cm1EYXRhKCkgbXVzdCBpbmhlcml0IHByb3BlcnR5ICJzZXQiIHdpdGggdGhlIHByb3BlciB0eXBl
ICg2KSBhc3NlcnRfaW5oZXJpdHM6IHByb3BlcnR5ICJzZXQiIG5vdCBmb3VuZCBpbiBwcm90b3R5
cGUgY2hhaW4KLUZBSUwgRm9ybURhdGEgaW50ZXJmYWNlOiBjYWxsaW5nIHNldChVU1ZTdHJpbmcs
QmxvYixVU1ZTdHJpbmcpIG9uIG5ldyBGb3JtRGF0YSgpIHdpdGggdG9vIGZldyBhcmd1bWVudHMg
bXVzdCB0aHJvdyBUeXBlRXJyb3IgYXNzZXJ0X2luaGVyaXRzOiBwcm9wZXJ0eSAic2V0IiBub3Qg
Zm91bmQgaW4gcHJvdG90eXBlIGNoYWluCi1GQUlMIEZvcm1EYXRhIGludGVyZmFjZTogbmV3IEZv
cm1EYXRhKCkgbXVzdCBpbmhlcml0IHByb3BlcnR5ICJzZXQiIHdpdGggdGhlIHByb3BlciB0eXBl
ICg3KSBhc3NlcnRfaW5oZXJpdHM6IHByb3BlcnR5ICJzZXQiIG5vdCBmb3VuZCBpbiBwcm90b3R5
cGUgY2hhaW4KLUZBSUwgRm9ybURhdGEgaW50ZXJmYWNlOiBjYWxsaW5nIHNldChVU1ZTdHJpbmcs
VVNWU3RyaW5nKSBvbiBuZXcgRm9ybURhdGEoKSB3aXRoIHRvbyBmZXcgYXJndW1lbnRzIG11c3Qg
dGhyb3cgVHlwZUVycm9yIGFzc2VydF9pbmhlcml0czogcHJvcGVydHkgInNldCIgbm90IGZvdW5k
IGluIHByb3RvdHlwZSBjaGFpbgorUEFTUyBGb3JtRGF0YSBpbnRlcmZhY2U6IG5ldyBGb3JtRGF0
YSgpIG11c3QgaW5oZXJpdCBwcm9wZXJ0eSAiZGVsZXRlIiB3aXRoIHRoZSBwcm9wZXIgdHlwZSAo
MikgCitQQVNTIEZvcm1EYXRhIGludGVyZmFjZTogY2FsbGluZyBkZWxldGUoVVNWU3RyaW5nKSBv
biBuZXcgRm9ybURhdGEoKSB3aXRoIHRvbyBmZXcgYXJndW1lbnRzIG11c3QgdGhyb3cgVHlwZUVy
cm9yIAorUEFTUyBGb3JtRGF0YSBpbnRlcmZhY2U6IG5ldyBGb3JtRGF0YSgpIG11c3QgaW5oZXJp
dCBwcm9wZXJ0eSAiZ2V0IiB3aXRoIHRoZSBwcm9wZXIgdHlwZSAoMykgCitQQVNTIEZvcm1EYXRh
IGludGVyZmFjZTogY2FsbGluZyBnZXQoVVNWU3RyaW5nKSBvbiBuZXcgRm9ybURhdGEoKSB3aXRo
IHRvbyBmZXcgYXJndW1lbnRzIG11c3QgdGhyb3cgVHlwZUVycm9yIAorUEFTUyBGb3JtRGF0YSBp
bnRlcmZhY2U6IG5ldyBGb3JtRGF0YSgpIG11c3QgaW5oZXJpdCBwcm9wZXJ0eSAiZ2V0QWxsIiB3
aXRoIHRoZSBwcm9wZXIgdHlwZSAoNCkgCitQQVNTIEZvcm1EYXRhIGludGVyZmFjZTogY2FsbGlu
ZyBnZXRBbGwoVVNWU3RyaW5nKSBvbiBuZXcgRm9ybURhdGEoKSB3aXRoIHRvbyBmZXcgYXJndW1l
bnRzIG11c3QgdGhyb3cgVHlwZUVycm9yIAorUEFTUyBGb3JtRGF0YSBpbnRlcmZhY2U6IG5ldyBG
b3JtRGF0YSgpIG11c3QgaW5oZXJpdCBwcm9wZXJ0eSAiaGFzIiB3aXRoIHRoZSBwcm9wZXIgdHlw
ZSAoNSkgCitQQVNTIEZvcm1EYXRhIGludGVyZmFjZTogY2FsbGluZyBoYXMoVVNWU3RyaW5nKSBv
biBuZXcgRm9ybURhdGEoKSB3aXRoIHRvbyBmZXcgYXJndW1lbnRzIG11c3QgdGhyb3cgVHlwZUVy
cm9yIAorUEFTUyBGb3JtRGF0YSBpbnRlcmZhY2U6IG5ldyBGb3JtRGF0YSgpIG11c3QgaW5oZXJp
dCBwcm9wZXJ0eSAic2V0IiB3aXRoIHRoZSBwcm9wZXIgdHlwZSAoNikgCitQQVNTIEZvcm1EYXRh
IGludGVyZmFjZTogY2FsbGluZyBzZXQoVVNWU3RyaW5nLEJsb2IsVVNWU3RyaW5nKSBvbiBuZXcg
Rm9ybURhdGEoKSB3aXRoIHRvbyBmZXcgYXJndW1lbnRzIG11c3QgdGhyb3cgVHlwZUVycm9yIAor
UEFTUyBGb3JtRGF0YSBpbnRlcmZhY2U6IG5ldyBGb3JtRGF0YSgpIG11c3QgaW5oZXJpdCBwcm9w
ZXJ0eSAic2V0IiB3aXRoIHRoZSBwcm9wZXIgdHlwZSAoNykgCitQQVNTIEZvcm1EYXRhIGludGVy
ZmFjZTogY2FsbGluZyBzZXQoVVNWU3RyaW5nLFVTVlN0cmluZykgb24gbmV3IEZvcm1EYXRhKCkg
d2l0aCB0b28gZmV3IGFyZ3VtZW50cyBtdXN0IHRocm93IFR5cGVFcnJvciAKIFBBU1MgRm9ybURh
dGEgaW50ZXJmYWNlOiBuZXcgRm9ybURhdGEoZm9ybSkgbXVzdCBpbmhlcml0IHByb3BlcnR5ICJh
cHBlbmQiIHdpdGggdGhlIHByb3BlciB0eXBlICgwKSAKIFBBU1MgRm9ybURhdGEgaW50ZXJmYWNl
OiBjYWxsaW5nIGFwcGVuZChVU1ZTdHJpbmcsQmxvYixVU1ZTdHJpbmcpIG9uIG5ldyBGb3JtRGF0
YShmb3JtKSB3aXRoIHRvbyBmZXcgYXJndW1lbnRzIG11c3QgdGhyb3cgVHlwZUVycm9yIAogUEFT
UyBGb3JtRGF0YSBpbnRlcmZhY2U6IG5ldyBGb3JtRGF0YShmb3JtKSBtdXN0IGluaGVyaXQgcHJv
cGVydHkgImFwcGVuZCIgd2l0aCB0aGUgcHJvcGVyIHR5cGUgKDEpIAogUEFTUyBGb3JtRGF0YSBp
bnRlcmZhY2U6IGNhbGxpbmcgYXBwZW5kKFVTVlN0cmluZyxVU1ZTdHJpbmcpIG9uIG5ldyBGb3Jt
RGF0YShmb3JtKSB3aXRoIHRvbyBmZXcgYXJndW1lbnRzIG11c3QgdGhyb3cgVHlwZUVycm9yIAot
RkFJTCBGb3JtRGF0YSBpbnRlcmZhY2U6IG5ldyBGb3JtRGF0YShmb3JtKSBtdXN0IGluaGVyaXQg
cHJvcGVydHkgImRlbGV0ZSIgd2l0aCB0aGUgcHJvcGVyIHR5cGUgKDIpIGFzc2VydF9pbmhlcml0
czogcHJvcGVydHkgImRlbGV0ZSIgbm90IGZvdW5kIGluIHByb3RvdHlwZSBjaGFpbgotRkFJTCBG
b3JtRGF0YSBpbnRlcmZhY2U6IGNhbGxpbmcgZGVsZXRlKFVTVlN0cmluZykgb24gbmV3IEZvcm1E
YXRhKGZvcm0pIHdpdGggdG9vIGZldyBhcmd1bWVudHMgbXVzdCB0aHJvdyBUeXBlRXJyb3IgYXNz
ZXJ0X2luaGVyaXRzOiBwcm9wZXJ0eSAiZGVsZXRlIiBub3QgZm91bmQgaW4gcHJvdG90eXBlIGNo
YWluCi1GQUlMIEZvcm1EYXRhIGludGVyZmFjZTogbmV3IEZvcm1EYXRhKGZvcm0pIG11c3QgaW5o
ZXJpdCBwcm9wZXJ0eSAiZ2V0IiB3aXRoIHRoZSBwcm9wZXIgdHlwZSAoMykgYXNzZXJ0X2luaGVy
aXRzOiBwcm9wZXJ0eSAiZ2V0IiBub3QgZm91bmQgaW4gcHJvdG90eXBlIGNoYWluCi1GQUlMIEZv
cm1EYXRhIGludGVyZmFjZTogY2FsbGluZyBnZXQoVVNWU3RyaW5nKSBvbiBuZXcgRm9ybURhdGEo
Zm9ybSkgd2l0aCB0b28gZmV3IGFyZ3VtZW50cyBtdXN0IHRocm93IFR5cGVFcnJvciBhc3NlcnRf
aW5oZXJpdHM6IHByb3BlcnR5ICJnZXQiIG5vdCBmb3VuZCBpbiBwcm90b3R5cGUgY2hhaW4KLUZB
SUwgRm9ybURhdGEgaW50ZXJmYWNlOiBuZXcgRm9ybURhdGEoZm9ybSkgbXVzdCBpbmhlcml0IHBy
b3BlcnR5ICJnZXRBbGwiIHdpdGggdGhlIHByb3BlciB0eXBlICg0KSBhc3NlcnRfaW5oZXJpdHM6
IHByb3BlcnR5ICJnZXRBbGwiIG5vdCBmb3VuZCBpbiBwcm90b3R5cGUgY2hhaW4KLUZBSUwgRm9y
bURhdGEgaW50ZXJmYWNlOiBjYWxsaW5nIGdldEFsbChVU1ZTdHJpbmcpIG9uIG5ldyBGb3JtRGF0
YShmb3JtKSB3aXRoIHRvbyBmZXcgYXJndW1lbnRzIG11c3QgdGhyb3cgVHlwZUVycm9yIGFzc2Vy
dF9pbmhlcml0czogcHJvcGVydHkgImdldEFsbCIgbm90IGZvdW5kIGluIHByb3RvdHlwZSBjaGFp
bgotRkFJTCBGb3JtRGF0YSBpbnRlcmZhY2U6IG5ldyBGb3JtRGF0YShmb3JtKSBtdXN0IGluaGVy
aXQgcHJvcGVydHkgImhhcyIgd2l0aCB0aGUgcHJvcGVyIHR5cGUgKDUpIGFzc2VydF9pbmhlcml0
czogcHJvcGVydHkgImhhcyIgbm90IGZvdW5kIGluIHByb3RvdHlwZSBjaGFpbgotRkFJTCBGb3Jt
RGF0YSBpbnRlcmZhY2U6IGNhbGxpbmcgaGFzKFVTVlN0cmluZykgb24gbmV3IEZvcm1EYXRhKGZv
cm0pIHdpdGggdG9vIGZldyBhcmd1bWVudHMgbXVzdCB0aHJvdyBUeXBlRXJyb3IgYXNzZXJ0X2lu
aGVyaXRzOiBwcm9wZXJ0eSAiaGFzIiBub3QgZm91bmQgaW4gcHJvdG90eXBlIGNoYWluCi1GQUlM
IEZvcm1EYXRhIGludGVyZmFjZTogbmV3IEZvcm1EYXRhKGZvcm0pIG11c3QgaW5oZXJpdCBwcm9w
ZXJ0eSAic2V0IiB3aXRoIHRoZSBwcm9wZXIgdHlwZSAoNikgYXNzZXJ0X2luaGVyaXRzOiBwcm9w
ZXJ0eSAic2V0IiBub3QgZm91bmQgaW4gcHJvdG90eXBlIGNoYWluCi1GQUlMIEZvcm1EYXRhIGlu
dGVyZmFjZTogY2FsbGluZyBzZXQoVVNWU3RyaW5nLEJsb2IsVVNWU3RyaW5nKSBvbiBuZXcgRm9y
bURhdGEoZm9ybSkgd2l0aCB0b28gZmV3IGFyZ3VtZW50cyBtdXN0IHRocm93IFR5cGVFcnJvciBh
c3NlcnRfaW5oZXJpdHM6IHByb3BlcnR5ICJzZXQiIG5vdCBmb3VuZCBpbiBwcm90b3R5cGUgY2hh
aW4KLUZBSUwgRm9ybURhdGEgaW50ZXJmYWNlOiBuZXcgRm9ybURhdGEoZm9ybSkgbXVzdCBpbmhl
cml0IHByb3BlcnR5ICJzZXQiIHdpdGggdGhlIHByb3BlciB0eXBlICg3KSBhc3NlcnRfaW5oZXJp
dHM6IHByb3BlcnR5ICJzZXQiIG5vdCBmb3VuZCBpbiBwcm90b3R5cGUgY2hhaW4KLUZBSUwgRm9y
bURhdGEgaW50ZXJmYWNlOiBjYWxsaW5nIHNldChVU1ZTdHJpbmcsVVNWU3RyaW5nKSBvbiBuZXcg
Rm9ybURhdGEoZm9ybSkgd2l0aCB0b28gZmV3IGFyZ3VtZW50cyBtdXN0IHRocm93IFR5cGVFcnJv
ciBhc3NlcnRfaW5oZXJpdHM6IHByb3BlcnR5ICJzZXQiIG5vdCBmb3VuZCBpbiBwcm90b3R5cGUg
Y2hhaW4KK1BBU1MgRm9ybURhdGEgaW50ZXJmYWNlOiBuZXcgRm9ybURhdGEoZm9ybSkgbXVzdCBp
bmhlcml0IHByb3BlcnR5ICJkZWxldGUiIHdpdGggdGhlIHByb3BlciB0eXBlICgyKSAKK1BBU1Mg
Rm9ybURhdGEgaW50ZXJmYWNlOiBjYWxsaW5nIGRlbGV0ZShVU1ZTdHJpbmcpIG9uIG5ldyBGb3Jt
RGF0YShmb3JtKSB3aXRoIHRvbyBmZXcgYXJndW1lbnRzIG11c3QgdGhyb3cgVHlwZUVycm9yIAor
UEFTUyBGb3JtRGF0YSBpbnRlcmZhY2U6IG5ldyBGb3JtRGF0YShmb3JtKSBtdXN0IGluaGVyaXQg
cHJvcGVydHkgImdldCIgd2l0aCB0aGUgcHJvcGVyIHR5cGUgKDMpIAorUEFTUyBGb3JtRGF0YSBp
bnRlcmZhY2U6IGNhbGxpbmcgZ2V0KFVTVlN0cmluZykgb24gbmV3IEZvcm1EYXRhKGZvcm0pIHdp
dGggdG9vIGZldyBhcmd1bWVudHMgbXVzdCB0aHJvdyBUeXBlRXJyb3IgCitQQVNTIEZvcm1EYXRh
IGludGVyZmFjZTogbmV3IEZvcm1EYXRhKGZvcm0pIG11c3QgaW5oZXJpdCBwcm9wZXJ0eSAiZ2V0
QWxsIiB3aXRoIHRoZSBwcm9wZXIgdHlwZSAoNCkgCitQQVNTIEZvcm1EYXRhIGludGVyZmFjZTog
Y2FsbGluZyBnZXRBbGwoVVNWU3RyaW5nKSBvbiBuZXcgRm9ybURhdGEoZm9ybSkgd2l0aCB0b28g
ZmV3IGFyZ3VtZW50cyBtdXN0IHRocm93IFR5cGVFcnJvciAKK1BBU1MgRm9ybURhdGEgaW50ZXJm
YWNlOiBuZXcgRm9ybURhdGEoZm9ybSkgbXVzdCBpbmhlcml0IHByb3BlcnR5ICJoYXMiIHdpdGgg
dGhlIHByb3BlciB0eXBlICg1KSAKK1BBU1MgRm9ybURhdGEgaW50ZXJmYWNlOiBjYWxsaW5nIGhh
cyhVU1ZTdHJpbmcpIG9uIG5ldyBGb3JtRGF0YShmb3JtKSB3aXRoIHRvbyBmZXcgYXJndW1lbnRz
IG11c3QgdGhyb3cgVHlwZUVycm9yIAorUEFTUyBGb3JtRGF0YSBpbnRlcmZhY2U6IG5ldyBGb3Jt
RGF0YShmb3JtKSBtdXN0IGluaGVyaXQgcHJvcGVydHkgInNldCIgd2l0aCB0aGUgcHJvcGVyIHR5
cGUgKDYpIAorUEFTUyBGb3JtRGF0YSBpbnRlcmZhY2U6IGNhbGxpbmcgc2V0KFVTVlN0cmluZyxC
bG9iLFVTVlN0cmluZykgb24gbmV3IEZvcm1EYXRhKGZvcm0pIHdpdGggdG9vIGZldyBhcmd1bWVu
dHMgbXVzdCB0aHJvdyBUeXBlRXJyb3IgCitQQVNTIEZvcm1EYXRhIGludGVyZmFjZTogbmV3IEZv
cm1EYXRhKGZvcm0pIG11c3QgaW5oZXJpdCBwcm9wZXJ0eSAic2V0IiB3aXRoIHRoZSBwcm9wZXIg
dHlwZSAoNykgCitQQVNTIEZvcm1EYXRhIGludGVyZmFjZTogY2FsbGluZyBzZXQoVVNWU3RyaW5n
LFVTVlN0cmluZykgb24gbmV3IEZvcm1EYXRhKGZvcm0pIHdpdGggdG9vIGZldyBhcmd1bWVudHMg
bXVzdCB0aHJvdyBUeXBlRXJyb3IgCiBQQVNTIFByb2dyZXNzRXZlbnQgaW50ZXJmYWNlOiBleGlz
dGVuY2UgYW5kIHByb3BlcnRpZXMgb2YgaW50ZXJmYWNlIG9iamVjdCAKIFBBU1MgUHJvZ3Jlc3NF
dmVudCBpbnRlcmZhY2Ugb2JqZWN0IGxlbmd0aCAKIFBBU1MgUHJvZ3Jlc3NFdmVudCBpbnRlcmZh
Y2Ugb2JqZWN0IG5hbWUgCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>