<?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>17257</bug_id>
          
          <creation_ts>2008-02-09 07:04:35 -0800</creation_ts>
          <short_desc>start ref counts at 1 instead of 0 for speed</short_desc>
          <delta_ts>2008-06-17 22:36:06 -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>Web Template Framework</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>andersca</cc>
    
    <cc>david.krause</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>69917</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-02-09 07:04:35 -0800</bug_when>
    <thetext>We will change classes that do ref counting to start their ref counts at 1 instead of starting at 0 and then getting incremented to 1 by a later call to ref().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>69918</commentid>
    <comment_count>1</comment_count>
      <attachid>19017</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-02-09 07:05:45 -0800</bug_when>
    <thetext>Created attachment 19017
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>69923</commentid>
    <comment_count>2</comment_count>
      <attachid>19017</attachid>
    <who name="">mitz</who>
    <bug_when>2008-02-09 08:56:46 -0800</bug_when>
    <thetext>Comment on attachment 19017
patch

r=me

+        (KJS::RegExp::create): Added. Calls new RegExp then adopt&apos;s the initial ref.

Can simply say &quot;adopts&quot; without the apostrophe.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>69925</commentid>
    <comment_count>3</comment_count>
      <attachid>19017</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-02-09 10:10:10 -0800</bug_when>
    <thetext>Comment on attachment 19017
patch

Clearing the review flag since I landed this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>71148</commentid>
    <comment_count>4</comment_count>
      <attachid>19212</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-02-19 10:57:52 -0800</bug_when>
    <thetext>Created attachment 19212
patch for next step -- actually remove the default</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>71149</commentid>
    <comment_count>5</comment_count>
      <attachid>19212</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2008-02-19 10:59:02 -0800</bug_when>
    <thetext>Comment on attachment 19212
patch for next step -- actually remove the default

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>71150</commentid>
    <comment_count>6</comment_count>
      <attachid>19212</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-02-19 11:07:22 -0800</bug_when>
    <thetext>Comment on attachment 19212
patch for next step -- actually remove the default

Landed. Clearing review flag.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>71254</commentid>
    <comment_count>7</comment_count>
      <attachid>19228</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-02-20 09:17:24 -0800</bug_when>
    <thetext>Created attachment 19228
work in progress on StyleBase and classes derived from it</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>71255</commentid>
    <comment_count>8</comment_count>
      <attachid>19229</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-02-20 09:18:34 -0800</bug_when>
    <thetext>Created attachment 19229
work in progress on some other RefCounted classes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>71256</commentid>
    <comment_count>9</comment_count>
      <attachid>19230</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-02-20 09:19:20 -0800</bug_when>
    <thetext>Created attachment 19230
a patch with a &quot;sniffer&quot; I was using to see 0 ref counts that were actually hit at runtime</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>71716</commentid>
    <comment_count>10</comment_count>
      <attachid>19017</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-02-24 02:35:18 -0800</bug_when>
    <thetext>Comment on attachment 19017
patch

Marking patch already-landed as obsolete so the list of patches is easier to see.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>71717</commentid>
    <comment_count>11</comment_count>
      <attachid>19212</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-02-24 02:35:28 -0800</bug_when>
    <thetext>Comment on attachment 19212
patch for next step -- actually remove the default

Marking patch already-landed as obsolete so the list of patches is easier to see.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>82355</commentid>
    <comment_count>12</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-06-05 09:36:13 -0700</bug_when>
    <thetext>Anders is working on this now (even more than I am). We&apos;re down to only 70 sites that use RefCounted(0).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>82560</commentid>
    <comment_count>13</comment_count>
      <attachid>21561</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-06-07 09:45:04 -0700</bug_when>
    <thetext>Created attachment 21561
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>82565</commentid>
    <comment_count>14</comment_count>
      <attachid>21561</attachid>
    <who name="">mitz</who>
    <bug_when>2008-06-07 11:07:45 -0700</bug_when>
    <thetext>Comment on attachment 21561
patch

These look like they don&apos;t belong in this patch:

JavaScriptCore/VM/CodeBlock.cpp
WebCore/plugins/PluginDebug.h (also included in the ChangeLog)
WebKitTools/Scripts/make-js-test-wrappers

Other comments:

 38     PassRefPtr&lt;StaticNodeList&gt; createSelectorNodeList(PassRefPtr&lt;Node&gt; rootNode, CSSSelector*);

Maybe this should be a static StaticNodeList method? Perhaps StaticNodeList::create[By|With|From]Selector().

 101     : RefCounted&lt;HistoryItem&gt;(1)

Is the 1 necessary here?

 79     static PassRefPtr&lt;HTMLCollection&gt; create(PassRefPtr&lt;Node&gt; base, Type);

 38     static PassRefPtr&lt;HTMLFormCollection&gt; create(PassRefPtr&lt;HTMLFormElement&gt;);

 38     static PassRefPtr&lt;HTMLOptionsCollection&gt; create(PassRefPtr&lt;HTMLSelectElement&gt;);

 41     static PassRefPtr&lt;HTMLTableRowsCollection&gt; create(PassRefPtr&lt;HTMLTableElement&gt;);

Why are those not defined in the header?

I cannot r+ because I haven&apos;t read JSSVGTransformListCustom.cpp, JSSVGPointListCustom.cpp and JSSVGPODTypeWrapper.h. I will try to get to them later or somebody else could review just those (or you can land everything else with r=me).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>82566</commentid>
    <comment_count>15</comment_count>
      <attachid>21561</attachid>
    <who name="">mitz</who>
    <bug_when>2008-06-07 11:07:45 -0700</bug_when>
    <thetext>Comment on attachment 21561
patch

These look like they don&apos;t belong in this patch:

JavaScriptCore/VM/CodeBlock.cpp
WebCore/plugins/PluginDebug.h (also included in the ChangeLog)
WebKitTools/Scripts/make-js-test-wrappers

Other comments:

 38     PassRefPtr&lt;StaticNodeList&gt; createSelectorNodeList(PassRefPtr&lt;Node&gt; rootNode, CSSSelector*);

Maybe this should be a static StaticNodeList method? Perhaps StaticNodeList::create[By|With|From]Selector().

 101     : RefCounted&lt;HistoryItem&gt;(1)

Is the 1 necessary here?

 79     static PassRefPtr&lt;HTMLCollection&gt; create(PassRefPtr&lt;Node&gt; base, Type);

 38     static PassRefPtr&lt;HTMLFormCollection&gt; create(PassRefPtr&lt;HTMLFormElement&gt;);

 38     static PassRefPtr&lt;HTMLOptionsCollection&gt; create(PassRefPtr&lt;HTMLSelectElement&gt;);

 41     static PassRefPtr&lt;HTMLTableRowsCollection&gt; create(PassRefPtr&lt;HTMLTableElement&gt;);

Why are those not defined in the header?

I cannot r+ because I haven&apos;t read JSSVGTransformListCustom.cpp, JSSVGPointListCustom.cpp and JSSVGPODTypeWrapper.h. I will try to get to them later or somebody else could review just those (or you can land everything else with r=me).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>82576</commentid>
    <comment_count>16</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-06-07 13:49:05 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; These look like they don&apos;t belong in this patch:
&gt; 
&gt; JavaScriptCore/VM/CodeBlock.cpp

Oops. Need to land that to fix some warnings, but clearly not the same patch.

&gt; WebCore/plugins/PluginDebug.h (also included in the ChangeLog)

Right, just another warning fix.

&gt; WebKitTools/Scripts/make-js-test-wrappers

Yes, same thing.

&gt; Other comments:
&gt; 
&gt;  38     PassRefPtr&lt;StaticNodeList&gt; createSelectorNodeList(PassRefPtr&lt;Node&gt;
&gt; rootNode, CSSSelector*);
&gt; 
&gt; Maybe this should be a static StaticNodeList method? Perhaps
&gt; StaticNodeList::create[By|With|From]Selector().

I don&apos;t see why it should be. This is a function that yields a static node list. I wouldn&apos;t want to make all functions that yield vectors members of the Vector class.

&gt;  101     : RefCounted&lt;HistoryItem&gt;(1)
&gt; 
&gt; Is the 1 necessary here?

It is. This is a copy constructor and so we need to initialize base classes explicitly. I tried without it first.

&gt;  79     static PassRefPtr&lt;HTMLCollection&gt; create(PassRefPtr&lt;Node&gt; base, Type);
&gt;
&gt;  38     static PassRefPtr&lt;HTMLFormCollection&gt;
&gt; create(PassRefPtr&lt;HTMLFormElement&gt;);
&gt; 
&gt;  38     static PassRefPtr&lt;HTMLOptionsCollection&gt;
&gt; create(PassRefPtr&lt;HTMLSelectElement&gt;);
&gt; 
&gt;  41     static PassRefPtr&lt;HTMLTableRowsCollection&gt;
&gt; create(PassRefPtr&lt;HTMLTableElement&gt;);
&gt; 
&gt; Why are those not defined in the header?

Because I&apos;d have to add additional includes to make those headers compile, and I don&apos;t think it&apos;s crucial that all these functions be inlined.

&gt; I cannot r+ because I haven&apos;t read JSSVGTransformListCustom.cpp,
&gt; JSSVGPointListCustom.cpp and JSSVGPODTypeWrapper.h. I will try to get to them
&gt; later or somebody else could review just those (or you can land everything else
&gt; with r=me).

I think I&apos;ll separate those into a different patch since you reviewed the rest.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>82591</commentid>
    <comment_count>17</comment_count>
    <who name="David Krause">david.krause</who>
    <bug_when>2008-06-07 17:10:38 -0700</bug_when>
    <thetext>It looks like the latest patch breaks the Gtk build.  WebKit/gtk/webkit/webkitwebhistoryitem.cpp references an old version of the HistoryItem function that was removed.  

Specifically, the webkit_web_history_item_new_with_data is using the HistoryItem constructor that takes a KURL* and String as parameters.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>82611</commentid>
    <comment_count>18</comment_count>
      <attachid>21561</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-06-08 07:52:46 -0700</bug_when>
    <thetext>Comment on attachment 21561
patch

I landed the part of this that Dan reviewed, so clearing the review flag.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>82612</commentid>
    <comment_count>19</comment_count>
      <attachid>21572</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-06-08 09:01:46 -0700</bug_when>
    <thetext>Created attachment 21572
patch that does this for more classes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>83282</commentid>
    <comment_count>20</comment_count>
      <attachid>21572</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2008-06-13 18:17:02 -0700</bug_when>
    <thetext>Comment on attachment 21572
patch that does this for more classes

r=me.

Because I like the one class per file rule, I would would prefer that SimpleEditCommand be in its own file, but, I realize that is a little odd for such a small file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>83336</commentid>
    <comment_count>21</comment_count>
      <attachid>21572</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-06-14 17:44:58 -0700</bug_when>
    <thetext>Comment on attachment 21572
patch that does this for more classes

Clearing review flag since I landed this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>83337</commentid>
    <comment_count>22</comment_count>
      <attachid>21703</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-06-14 18:01:15 -0700</bug_when>
    <thetext>Created attachment 21703
patch that deals with almost all remaining classes

After this patch is landed, what we have left is:

    StyleBase
    NodeFilter
    TreeShared
    ThreadSafeShared</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>83341</commentid>
    <comment_count>23</comment_count>
      <attachid>21703</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2008-06-14 18:30:30 -0700</bug_when>
    <thetext>Comment on attachment 21703
patch that deals with almost all remaining classes

Can ParserRefCounted::hasOneRef be const as well?

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>83345</commentid>
    <comment_count>24</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-06-14 20:10:10 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; Can ParserRefCounted::hasOneRef be const as well?

I tried making it const, ran into minor problems (casting to work with the dictionary), and so decided not to bother.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>83346</commentid>
    <comment_count>25</comment_count>
      <attachid>21703</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-06-14 20:44:24 -0700</bug_when>
    <thetext>Comment on attachment 21703
patch that deals with almost all remaining classes

Clearing review flag since this was landed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>83429</commentid>
    <comment_count>26</comment_count>
      <attachid>21722</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-06-16 00:09:46 -0700</bug_when>
    <thetext>Created attachment 21722
patch that converts StyleBase and classes derived from it</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>83513</commentid>
    <comment_count>27</comment_count>
      <attachid>21722</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2008-06-16 11:51:20 -0700</bug_when>
    <thetext>Comment on attachment 21722
patch that converts StyleBase and classes derived from it

I think it would be better to make the computedStyle function be called CSSComputedStyleDeclaration::create.  Is there a reason to change the style for it?

Can this be done with a default value for  charset of String()?

+    static PassRefPtr&lt;CSSStyleSheet&gt; create(Node* ownerNode, const String&amp; href)
+    {
+        return adoptRef(new CSSStyleSheet(ownerNode, href, String()));
+    }
+    static PassRefPtr&lt;CSSStyleSheet&gt; create(Node* ownerNode, const String&amp; href, const String&amp; charset)
+    {
+        return adoptRef(new CSSStyleSheet(ownerNode, href, charset));
+    }


r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>83554</commentid>
    <comment_count>28</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-06-16 16:36:49 -0700</bug_when>
    <thetext>(In reply to comment #27)
&gt; (From update of attachment 21722 [edit])
&gt; I think it would be better to make the computedStyle function be called
&gt; CSSComputedStyleDeclaration::create.  Is there a reason to change the style for
&gt; it?

The computedStyle function already existed. I didn&apos;t want to have both that function and CSSComputedStyleDeclaration::create. I could be convinced to do it another way.

&gt; Can this be done with a default value for  charset of String()?
&gt; 
&gt; +    static PassRefPtr&lt;CSSStyleSheet&gt; create(Node* ownerNode, const String&amp;
&gt; href)
&gt; +    {
&gt; +        return adoptRef(new CSSStyleSheet(ownerNode, href, String()));
&gt; +    }
&gt; +    static PassRefPtr&lt;CSSStyleSheet&gt; create(Node* ownerNode, const String&amp;
&gt; href, const String&amp; charset)
&gt; +    {
&gt; +        return adoptRef(new CSSStyleSheet(ownerNode, href, charset));
&gt; +    }

Sure, it could be done either way. Those are just two different ways of writing the same code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>83606</commentid>
    <comment_count>29</comment_count>
      <attachid>21722</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-06-17 12:18:12 -0700</bug_when>
    <thetext>Comment on attachment 21722
patch that converts StyleBase and classes derived from it

Clearing reviewed flag on this one since I landed it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>83737</commentid>
    <comment_count>30</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-06-17 22:36:06 -0700</bug_when>
    <thetext>(In reply to comment #22)
&gt; After this patch is landed, what we have left is:
&gt; 
&gt;     StyleBase

Done.

&gt;     NodeFilter

Done.

&gt;     TreeShared

This one is really a separate task. When we wean classes away from TreeShared, we can make the refcount start at 1 at the same time.

&gt;     ThreadSafeShared

I was mistaken, this was already done a while ago.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19017</attachid>
            <date>2008-02-09 07:05:45 -0800</date>
            <delta_ts>2008-02-24 02:35:18 -0800</delta_ts>
            <desc>patch</desc>
            <filename>RegExpRefCount1Patch.txt</filename>
            <type>text/plain</type>
            <size>11303</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDMwMTA4KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjYgQEAKKzIwMDgtMDItMDkgIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIC0gaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTcyNTYKKyAgICAgICAgICBDaGFuZ2UgUmVnRXhwIHRvIHN0YXJ0IGl0cyByZWYgY291bnQgYXQg
MSwgbm90IDAKKworICAgICAgICBXZSdsbCB3YW50IHRvIGRvIHRoaXMgdG8gZXZlcnkgUmVmQ291
bnRlZCBjbGFzcywgb25lIGF0IGEgdGltZS4KKworICAgICAgICAqIGtqcy9ub2Rlcy5oOgorICAg
ICAgICAoS0pTOjpSZWdFeHBOb2RlOjpSZWdFeHBOb2RlKTogVXNlIFJlZ0V4cDo6Y3JlYXRlIGlu
c3RlYWQgb2YgbmV3IFJlZ0V4cC4KKyAgICAgICAgKiBranMvcmVnZXhwLmNwcDoKKyAgICAgICAg
KEtKUzo6UmVnRXhwOjpSZWdFeHApOiBNYXJrZWQgaW5saW5lLCBzZXQgaW5pdGlhbCByZWYgY291
bnQgdG8gMS4KKyAgICAgICAgKEtKUzo6UmVnRXhwOjpjcmVhdGUpOiBBZGRlZC4gQ2FsbHMgbmV3
IFJlZ0V4cCB0aGVuIGFkb3B0J3MgdGhlIGluaXRpYWwgcmVmLgorICAgICAgICAqIGtqcy9yZWdl
eHAuaDogUmVmb3JtYXR0ZWQuIE1hZGUgdGhlIGNvbnN0cnVjdG9ycyBwcml2YXRlLiBBZGRlZCBz
dGF0aWMKKyAgICAgICAgY3JlYXRlIGZ1bmN0aW9ucyB0aGF0IHJldHVybiBvYmplY3RzIGFscmVh
ZHkgd3JhcHBlZCBpbiBQYXNzUmVmUHRyLgorICAgICAgICAqIGtqcy9yZWdleHBfb2JqZWN0LmNw
cDoKKyAgICAgICAgKEtKUzo6cmVnRXhwUHJvdG9GdW5jQ29tcGlsZSk6IFVzZSBSZWdFeHA6OmNy
ZWF0ZSBpbnN0ZWFkIG9mIG5ldyBSZWdFeHAuCisgICAgICAgIChLSlM6OlJlZ0V4cE9iamVjdElt
cDo6Y29uc3RydWN0KTogRGl0dG8uCisgICAgICAgICoga2pzL3N0cmluZ19vYmplY3QuY3BwOgor
ICAgICAgICAoS0pTOjpzdHJpbmdQcm90b0Z1bmNNYXRjaCk6IERpdHRvLgorICAgICAgICAoS0pT
OjpzdHJpbmdQcm90b0Z1bmNTZWFyY2gpOiBEaXR0by4KKwogMjAwOC0wMi0wOCAgT2xpdmVyIEh1
bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE1hY2llai4KSW5k
ZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9ub2Rlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRD
b3JlL2tqcy9ub2Rlcy5oCShyZXZpc2lvbiAzMDEwOCkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9u
b2Rlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMzQsNyArMzM0LDcgQEAgbmFtZXNwYWNlIEtKUyB7
CiAgICAgY2xhc3MgUmVnRXhwTm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7CiAgICAgcHVi
bGljOgogICAgICAgICBSZWdFeHBOb2RlKGNvbnN0IFVTdHJpbmcmIHBhdHRlcm4sIGNvbnN0IFVT
dHJpbmcmIGZsYWdzKSBLSlNfRkFTVF9DQUxMCi0gICAgICAgICAgICA6IG1fcmVnRXhwKG5ldyBS
ZWdFeHAocGF0dGVybiwgZmxhZ3MpKQorICAgICAgICAgICAgOiBtX3JlZ0V4cChSZWdFeHA6OmNy
ZWF0ZShwYXR0ZXJuLCBmbGFncykpCiAgICAgICAgIHsKICAgICAgICAgfQogCkluZGV4OiBKYXZh
U2NyaXB0Q29yZS9ranMvcmVnZXhwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9r
anMvcmVnZXhwLmNwcAkocmV2aXNpb24gMzAxMDgpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvcmVn
ZXhwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw4ICsxLDcgQEAKIC8vIC0qLSBjLWJhc2ljLW9m
ZnNldDogMiAtKi0KIC8qCi0gKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBsaWJyYXJp
ZXMKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSwgMjAwNCBIYXJyaSBQb3J0ZW4gKHBvcnRl
bkBrZGUub3JnKQotICogIENvcHlyaWdodCAoYykgMjAwNywgQXBwbGUgSW5jLgorICogIENvcHly
aWdodCAoYykgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCkBAIC0yNCwxNSArMjMsMTggQEAKICNpbmNsdWRlICJyZWdleHAuaCIK
IAogI2luY2x1ZGUgImxleGVyLmgiCisjaW5jbHVkZSA8cGNyZS9wY3JlLmg+CiAjaW5jbHVkZSA8
c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNs
dWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9Pd25BcnJheVB0ci5oPgogCiBu
YW1lc3BhY2UgS0pTIHsKIAotUmVnRXhwOjpSZWdFeHAoY29uc3QgVVN0cmluZyYgcGF0dGVybikK
LSAgOiBtX3BhdHRlcm4ocGF0dGVybikKK2lubGluZSBSZWdFeHA6OlJlZ0V4cChjb25zdCBVU3Ry
aW5nJiBwYXR0ZXJuKQorICA6IFJlZkNvdW50ZWQ8UmVnRXhwPigxKQorICAsIG1fcGF0dGVybihw
YXR0ZXJuKQogICAsIG1fZmxhZ0JpdHMoMCkKICAgLCBtX2NvbnN0cnVjdGlvbkVycm9yKDApCiAg
ICwgbV9udW1TdWJwYXR0ZXJucygwKQpAQCAtNDEsOCArNDMsMTQgQEAgUmVnRXhwOjpSZWdFeHAo
Y29uc3QgVVN0cmluZyYgcGF0dGVybikKICAgICAgICAgSlNSZWdFeHBEb05vdElnbm9yZUNhc2Us
IEpTUmVnRXhwU2luZ2xlTGluZSwgJm1fbnVtU3VicGF0dGVybnMsICZtX2NvbnN0cnVjdGlvbkVy
cm9yKTsKIH0KIAotUmVnRXhwOjpSZWdFeHAoY29uc3QgVVN0cmluZyYgcGF0dGVybiwgY29uc3Qg
VVN0cmluZyYgZmxhZ3MpCi0gIDogbV9wYXR0ZXJuKHBhdHRlcm4pCitQYXNzUmVmUHRyPFJlZ0V4
cD4gUmVnRXhwOjpjcmVhdGUoY29uc3QgVVN0cmluZyYgcGF0dGVybikKK3sKKyAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFJlZ0V4cChwYXR0ZXJuKSk7Cit9CisKK2lubGluZSBSZWdFeHA6OlJlZ0V4
cChjb25zdCBVU3RyaW5nJiBwYXR0ZXJuLCBjb25zdCBVU3RyaW5nJiBmbGFncykKKyAgOiBSZWZD
b3VudGVkPFJlZ0V4cD4oMSkKKyAgLCBtX3BhdHRlcm4ocGF0dGVybikKICAgLCBtX2ZsYWdzKGZs
YWdzKQogICAsIG1fZmxhZ0JpdHMoMCkKICAgLCBtX2NvbnN0cnVjdGlvbkVycm9yKDApCkBAIC03
MCw2ICs3OCwxMSBAQCBSZWdFeHA6OlJlZ0V4cChjb25zdCBVU3RyaW5nJiBwYXR0ZXJuLCBjCiAg
ICAgICAgIGlnbm9yZUNhc2VPcHRpb24sIG11bHRpbGluZU9wdGlvbiwgJm1fbnVtU3VicGF0dGVy
bnMsICZtX2NvbnN0cnVjdGlvbkVycm9yKTsKIH0KIAorUGFzc1JlZlB0cjxSZWdFeHA+IFJlZ0V4
cDo6Y3JlYXRlKGNvbnN0IFVTdHJpbmcmIHBhdHRlcm4sIGNvbnN0IFVTdHJpbmcmIGZsYWdzKQor
eworICAgIHJldHVybiBhZG9wdFJlZihuZXcgUmVnRXhwKHBhdHRlcm4sIGZsYWdzKSk7Cit9CisK
IFJlZ0V4cDo6flJlZ0V4cCgpCiB7CiAgICAganNSZWdFeHBGcmVlKG1fcmVnRXhwKTsKSW5kZXg6
IEphdmFTY3JpcHRDb3JlL2tqcy9yZWdleHAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29y
ZS9ranMvcmVnZXhwLmgJKHJldmlzaW9uIDMwMTA4KQorKysgSmF2YVNjcmlwdENvcmUva2pzL3Jl
Z2V4cC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNiBAQAotLy8gLSotIGMtYmFzaWMtb2Zm
c2V0OiAyIC0qLQogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4g
KHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTIzLDUzICsyMiw0
OCBAQAogI2RlZmluZSBLSlNfUkVHRVhQX0gKIAogI2luY2x1ZGUgInVzdHJpbmcuaCIKLSNpbmNs
dWRlIDxwY3JlL3BjcmUuaD4KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYv
T3duQXJyYXlQdHIuaD4KKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9S
ZWZDb3VudGVkLmg+CiAKK3N0cnVjdCBKU1JlZ0V4cDsKKwogbmFtZXNwYWNlIEtKUyB7CiAKLSAg
Y2xhc3MgUmVnRXhwIDogcHVibGljIFJlZkNvdW50ZWQ8UmVnRXhwPiB7Ci0gIHByaXZhdGU6Ci0g
ICAgZW51bSB7IAotICAgICAgICBHbG9iYWwgPSAxLCAKLSAgICAgICAgSWdub3JlQ2FzZSA9IDIs
IAotICAgICAgICBNdWx0aWxpbmUgPSA0IAorICAgIGNsYXNzIFJlZ0V4cCA6IHB1YmxpYyBSZWZD
b3VudGVkPFJlZ0V4cD4geworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8
UmVnRXhwPiBjcmVhdGUoY29uc3QgVVN0cmluZyYgcGF0dGVybik7CisgICAgICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFJlZ0V4cD4gY3JlYXRlKGNvbnN0IFVTdHJpbmcmIHBhdHRlcm4sIGNvbnN0IFVT
dHJpbmcmIGZsYWdzKTsKKyAgICAgICAgflJlZ0V4cCgpOworCisgICAgICAgIGJvb2wgZ2xvYmFs
KCkgY29uc3QgeyByZXR1cm4gbV9mbGFnQml0cyAmIEdsb2JhbDsgfQorICAgICAgICBib29sIGln
bm9yZUNhc2UoKSBjb25zdCB7IHJldHVybiBtX2ZsYWdCaXRzICYgSWdub3JlQ2FzZTsgfQorICAg
ICAgICBib29sIG11bHRpbGluZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmxhZ0JpdHMgJiBNdWx0aWxp
bmU7IH0KKworICAgICAgICBjb25zdCBVU3RyaW5nJiBwYXR0ZXJuKCkgY29uc3QgeyByZXR1cm4g
bV9wYXR0ZXJuOyB9CisgICAgICAgIGNvbnN0IFVTdHJpbmcmIGZsYWdzKCkgY29uc3QgeyByZXR1
cm4gbV9mbGFnczsgfQorCisgICAgICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuICFt
X2NvbnN0cnVjdGlvbkVycm9yOyB9CisgICAgICAgIGNvbnN0IGNoYXIqIGVycm9yTWVzc2FnZSgp
IGNvbnN0IHsgcmV0dXJuIG1fY29uc3RydWN0aW9uRXJyb3I7IH0KKworICAgICAgICBpbnQgbWF0
Y2goY29uc3QgVVN0cmluZyYsIGludCBvZmZzZXQsIE93bkFycmF5UHRyPGludD4qIG92ZWN0b3Ig
PSAwKTsKKyAgICAgICAgdW5zaWduZWQgbnVtU3VicGF0dGVybnMoKSBjb25zdCB7IHJldHVybiBt
X251bVN1YnBhdHRlcm5zOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBSZWdFeHAoY29uc3Qg
VVN0cmluZyYgcGF0dGVybik7CisgICAgICAgIFJlZ0V4cChjb25zdCBVU3RyaW5nJiBwYXR0ZXJu
LCBjb25zdCBVU3RyaW5nJiBmbGFncyk7CisKKyAgICAgICAgdm9pZCBjb21waWxlKCk7CisKKyAg
ICAgICAgZW51bSBGbGFnQml0cyB7IEdsb2JhbCA9IDEsIElnbm9yZUNhc2UgPSAyLCBNdWx0aWxp
bmUgPSA0IH07CisKKyAgICAgICAgVVN0cmluZyBtX3BhdHRlcm47IC8vIEZJWE1FOiBKdXN0IGRl
Y29tcGlsZSBtX3JlZ0V4cCBpbnN0ZWFkIG9mIHN0b3JpbmcgdGhpcy4KKyAgICAgICAgVVN0cmlu
ZyBtX2ZsYWdzOyAvLyBGSVhNRTogSnVzdCBkZWNvbXBpbGUgbV9yZWdFeHAgaW5zdGVhZCBvZiBz
dG9yaW5nIHRoaXMuCisgICAgICAgIGludCBtX2ZsYWdCaXRzOworICAgICAgICBKU1JlZ0V4cCog
bV9yZWdFeHA7CisgICAgICAgIGNvbnN0IGNoYXIqIG1fY29uc3RydWN0aW9uRXJyb3I7CisgICAg
ICAgIHVuc2lnbmVkIG1fbnVtU3VicGF0dGVybnM7CiAgICAgfTsKIAotICBwdWJsaWM6Ci0gICAg
UmVnRXhwKGNvbnN0IFVTdHJpbmcmIHBhdHRlcm4pOwotICAgIFJlZ0V4cChjb25zdCBVU3RyaW5n
JiBwYXR0ZXJuLCBjb25zdCBVU3RyaW5nJiBmbGFncyk7Ci0gICAgflJlZ0V4cCgpOwotICAgIAot
ICAgIGJvb2wgZ2xvYmFsKCkgY29uc3QgeyByZXR1cm4gbV9mbGFnQml0cyAmIEdsb2JhbDsgfQot
ICAgIGJvb2wgaWdub3JlQ2FzZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmxhZ0JpdHMgJiBJZ25vcmVD
YXNlOyB9Ci0gICAgYm9vbCBtdWx0aWxpbmUoKSBjb25zdCB7IHJldHVybiBtX2ZsYWdCaXRzICYg
TXVsdGlsaW5lOyB9Ci0KLSAgICBjb25zdCBVU3RyaW5nJiBwYXR0ZXJuKCkgY29uc3QgeyByZXR1
cm4gbV9wYXR0ZXJuOyB9Ci0gICAgY29uc3QgVVN0cmluZyYgZmxhZ3MoKSBjb25zdCB7IHJldHVy
biBtX2ZsYWdzOyB9Ci0KLSAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiAhbV9jb25z
dHJ1Y3Rpb25FcnJvcjsgfQotICAgIGNvbnN0IGNoYXIqIGVycm9yTWVzc2FnZSgpIGNvbnN0IHsg
cmV0dXJuIG1fY29uc3RydWN0aW9uRXJyb3I7IH0KLQotICAgIGludCBtYXRjaChjb25zdCBVU3Ry
aW5nJiwgaW50IG9mZnNldCwgT3duQXJyYXlQdHI8aW50Piogb3ZlY3RvciA9IDApOwotICAgIHVu
c2lnbmVkIG51bVN1YnBhdHRlcm5zKCkgY29uc3QgeyByZXR1cm4gbV9udW1TdWJwYXR0ZXJuczsg
fQotCi0gIHByaXZhdGU6Ci0gICAgdm9pZCBjb21waWxlKCk7Ci0gICAgCi0gICAgLy8gRGF0YSBz
dXBwbGllZCBieSBjYWxsZXIuCi0gICAgVVN0cmluZyBtX3BhdHRlcm47IC8vIEZJWE1FOiBKdXN0
IGRlY29tcGlsZSBtX3JlZ0V4cCBpbnN0ZWFkIG9mIHN0b3JpbmcgdGhpcy4KLSAgICBVU3RyaW5n
IG1fZmxhZ3M7IC8vIEZJWE1FOiBKdXN0IGRlY29tcGlsZSBtX3JlZ0V4cCBpbnN0ZWFkIG9mIHN0
b3JpbmcgdGhpcy4KLSAgICBpbnQgbV9mbGFnQml0czsKLQotICAgIC8vIERhdGEgc3VwcGxpZWQg
YnkgUENSRS4KLSAgICBKU1JlZ0V4cCogbV9yZWdFeHA7Ci0gICAgY29uc3QgY2hhciogbV9jb25z
dHJ1Y3Rpb25FcnJvcjsKLSAgICB1bnNpZ25lZCBtX251bVN1YnBhdHRlcm5zOwotICB9OwotCiB9
IC8vIG5hbWVzcGFjZQogCiAjZW5kaWYKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9yZWdleHBf
b2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvcmVnZXhwX29iamVj
dC5jcHAJKHJldmlzaW9uIDMwMTA4KQorKysgSmF2YVNjcmlwdENvcmUva2pzL3JlZ2V4cF9vYmpl
Y3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NSw3ICs5NSw3IEBAIEpTVmFsdWUqIHJlZ0V4cFBy
b3RvRnVuY0NvbXBpbGUoRXhlY1N0YXQKICAgICB9IGVsc2UgewogICAgICAgICBVU3RyaW5nIHBh
dHRlcm4gPSBhcmdzLmlzRW1wdHkoKSA/IFVTdHJpbmcoIiIpIDogYXJnMC0+dG9TdHJpbmcoZXhl
Yyk7CiAgICAgICAgIFVTdHJpbmcgZmxhZ3MgPSBhcmcxLT5pc1VuZGVmaW5lZCgpID8gVVN0cmlu
ZygiIikgOiBhcmcxLT50b1N0cmluZyhleGVjKTsKLSAgICAgICAgcmVnRXhwID0gbmV3IFJlZ0V4
cChwYXR0ZXJuLCBmbGFncyk7CisgICAgICAgIHJlZ0V4cCA9IFJlZ0V4cDo6Y3JlYXRlKHBhdHRl
cm4sIGZsYWdzKTsKICAgICB9CiAKICAgICBpZiAoIXJlZ0V4cC0+aXNWYWxpZCgpKQpAQCAtNDQ5
LDcgKzQ0OSw3IEBAIEpTT2JqZWN0ICpSZWdFeHBPYmplY3RJbXA6OmNvbnN0cnVjdChFeGUKICAg
VVN0cmluZyBwYXR0ZXJuID0gYXJnMC0+aXNVbmRlZmluZWQoKSA/IFVTdHJpbmcoIiIpIDogYXJn
MC0+dG9TdHJpbmcoZXhlYyk7CiAgIFVTdHJpbmcgZmxhZ3MgPSBhcmcxLT5pc1VuZGVmaW5lZCgp
ID8gVVN0cmluZygiIikgOiBhcmcxLT50b1N0cmluZyhleGVjKTsKICAgCi0gIHJldHVybiBjcmVh
dGVSZWdFeHBJbXAoZXhlYywgbmV3IFJlZ0V4cChwYXR0ZXJuLCBmbGFncykpOworICByZXR1cm4g
Y3JlYXRlUmVnRXhwSW1wKGV4ZWMsIFJlZ0V4cDo6Y3JlYXRlKHBhdHRlcm4sIGZsYWdzKSk7CiB9
CiAKIEpTT2JqZWN0KiBSZWdFeHBPYmplY3RJbXA6OmNyZWF0ZVJlZ0V4cEltcChFeGVjU3RhdGUq
IGV4ZWMsIFBhc3NSZWZQdHI8UmVnRXhwPiByZWdFeHApCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9r
anMvc3RyaW5nX29iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL3N0
cmluZ19vYmplY3QuY3BwCShyZXZpc2lvbiAzMDEwOCkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9z
dHJpbmdfb2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMzLDggKzUzMyw3IEBAIEpTVmFs
dWUqIHN0cmluZ1Byb3RvRnVuY01hdGNoKEV4ZWNTdGF0ZSoKICAgICBKU1ZhbHVlKiBhMCA9IGFy
Z3NbMF07CiAKICAgICBVU3RyaW5nIHUgPSBzOwotICAgIFJlZ0V4cCogcmVnOwotICAgIFJlZ0V4
cCogdG1wUmVnID0gMDsKKyAgICBSZWZQdHI8UmVnRXhwPiByZWc7CiAgICAgUmVnRXhwSW1wKiBp
bXAgPSAwOwogICAgIGlmIChhMC0+aXNPYmplY3QoKSAmJiBzdGF0aWNfY2FzdDxKU09iamVjdCAq
PihhMCktPmluaGVyaXRzKCZSZWdFeHBJbXA6OmluZm8pKSB7CiAgICAgICByZWcgPSBzdGF0aWNf
Y2FzdDxSZWdFeHBJbXAgKj4oYTApLT5yZWdFeHAoKTsKQEAgLTU0NCwxMiArNTQzLDEyIEBAIEpT
VmFsdWUqIHN0cmluZ1Byb3RvRnVuY01hdGNoKEV4ZWNTdGF0ZSoKICAgICAgICAqICBJZiByZWdl
eHAgaXMgbm90IGFuIG9iamVjdCB3aG9zZSBbW0NsYXNzXV0gcHJvcGVydHkgaXMgIlJlZ0V4cCIs
IGl0IGlzCiAgICAgICAgKiAgcmVwbGFjZWQgd2l0aCB0aGUgcmVzdWx0IG9mIHRoZSBleHByZXNz
aW9uIG5ldyBSZWdFeHAocmVnZXhwKS4KICAgICAgICAqLwotICAgICAgcmVnID0gdG1wUmVnID0g
bmV3IFJlZ0V4cChhMC0+dG9TdHJpbmcoZXhlYykpOworICAgICAgcmVnID0gUmVnRXhwOjpjcmVh
dGUoYTAtPnRvU3RyaW5nKGV4ZWMpKTsKICAgICB9CiAgICAgUmVnRXhwT2JqZWN0SW1wKiByZWdF
eHBPYmogPSBzdGF0aWNfY2FzdDxSZWdFeHBPYmplY3RJbXAqPihleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCktPnJlZ0V4cENvbnN0cnVjdG9yKCkpOwogICAgIGludCBwb3M7CiAgICAgaW50IG1h
dGNoTGVuZ3RoOwotICAgIHJlZ0V4cE9iai0+cGVyZm9ybU1hdGNoKHJlZywgdSwgMCwgcG9zLCBt
YXRjaExlbmd0aCk7CisgICAgcmVnRXhwT2JqLT5wZXJmb3JtTWF0Y2gocmVnLmdldCgpLCB1LCAw
LCBwb3MsIG1hdGNoTGVuZ3RoKTsKICAgICBKU1ZhbHVlKiByZXN1bHQ7CiAgICAgaWYgKCEocmVn
LT5nbG9iYWwoKSkpIHsKICAgICAgIC8vIGNhc2Ugd2l0aG91dCAnZycgZmxhZyBpcyBoYW5kbGVk
IGxpa2UgUmVnRXhwLnByb3RvdHlwZS5leGVjCkBAIC01NjUsNyArNTY0LDcgQEAgSlNWYWx1ZSog
c3RyaW5nUHJvdG9GdW5jTWF0Y2goRXhlY1N0YXRlKgogICAgICAgICBsaXN0LmFwcGVuZChqc1N0
cmluZyh1LnN1YnN0cihwb3MsIG1hdGNoTGVuZ3RoKSkpOwogICAgICAgICBsYXN0SW5kZXggPSBw
b3M7CiAgICAgICAgIHBvcyArPSBtYXRjaExlbmd0aCA9PSAwID8gMSA6IG1hdGNoTGVuZ3RoOwot
ICAgICAgICByZWdFeHBPYmotPnBlcmZvcm1NYXRjaChyZWcsIHUsIHBvcywgcG9zLCBtYXRjaExl
bmd0aCk7CisgICAgICAgIHJlZ0V4cE9iai0+cGVyZm9ybU1hdGNoKHJlZy5nZXQoKSwgdSwgcG9z
LCBwb3MsIG1hdGNoTGVuZ3RoKTsKICAgICAgIH0KICAgICAgIGlmIChpbXApCiAgICAgICAgIGlt
cC0+c2V0TGFzdEluZGV4KGxhc3RJbmRleCk7CkBAIC01NzgsNyArNTc3LDYgQEAgSlNWYWx1ZSog
c3RyaW5nUHJvdG9GdW5jTWF0Y2goRXhlY1N0YXRlKgogICAgICAgICByZXN1bHQgPSBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCktPmFycmF5Q29uc3RydWN0b3IoKS0+Y29uc3RydWN0KGV4ZWMs
IGxpc3QpOwogICAgICAgfQogICAgIH0KLSAgICBkZWxldGUgdG1wUmVnOwogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKQEAgLTU5MCwyMyArNTg4LDIxIEBAIEpTVmFsdWUqIHN0cmluZ1Byb3RvRnVu
Y1NlYXJjaChFeGVjU3RhdGUKICAgICBKU1ZhbHVlKiBhMCA9IGFyZ3NbMF07CiAKICAgICBVU3Ry
aW5nIHUgPSBzOwotICAgIFJlZ0V4cCogcmVnOwotICAgIFJlZ0V4cCogdG1wUmVnID0gMDsKLSAg
ICBpZiAoYTAtPmlzT2JqZWN0KCkgJiYgc3RhdGljX2Nhc3Q8SlNPYmplY3QgKj4oYTApLT5pbmhl
cml0cygmUmVnRXhwSW1wOjppbmZvKSkgewotICAgICAgcmVnID0gc3RhdGljX2Nhc3Q8UmVnRXhw
SW1wICo+KGEwKS0+cmVnRXhwKCk7CisgICAgUmVmUHRyPFJlZ0V4cD4gcmVnOworICAgIGlmIChh
MC0+aXNPYmplY3QoKSAmJiBzdGF0aWNfY2FzdDxKU09iamVjdCo+KGEwKS0+aW5oZXJpdHMoJlJl
Z0V4cEltcDo6aW5mbykpIHsKKyAgICAgIHJlZyA9IHN0YXRpY19jYXN0PFJlZ0V4cEltcCo+KGEw
KS0+cmVnRXhwKCk7CiAgICAgfSBlbHNlIHsgCiAgICAgICAvKgogICAgICAgICogIEVDTUEgMTUu
NS40LjEyIFN0cmluZy5wcm90b3R5cGUuc2VhcmNoIChyZWdleHApCiAgICAgICAgKiAgSWYgcmVn
ZXhwIGlzIG5vdCBhbiBvYmplY3Qgd2hvc2UgW1tDbGFzc11dIHByb3BlcnR5IGlzICJSZWdFeHAi
LCBpdCBpcwogICAgICAgICogIHJlcGxhY2VkIHdpdGggdGhlIHJlc3VsdCBvZiB0aGUgZXhwcmVz
c2lvbiBuZXcgUmVnRXhwKHJlZ2V4cCkuCiAgICAgICAgKi8KLSAgICAgIHJlZyA9IHRtcFJlZyA9
IG5ldyBSZWdFeHAoYTAtPnRvU3RyaW5nKGV4ZWMpKTsKKyAgICAgIHJlZyA9IFJlZ0V4cDo6Y3Jl
YXRlKGEwLT50b1N0cmluZyhleGVjKSk7CiAgICAgfQogICAgIFJlZ0V4cE9iamVjdEltcCogcmVn
RXhwT2JqID0gc3RhdGljX2Nhc3Q8UmVnRXhwT2JqZWN0SW1wKj4oZXhlYy0+bGV4aWNhbEdsb2Jh
bE9iamVjdCgpLT5yZWdFeHBDb25zdHJ1Y3RvcigpKTsKICAgICBpbnQgcG9zOwogICAgIGludCBt
YXRjaExlbmd0aDsKLSAgICByZWdFeHBPYmotPnBlcmZvcm1NYXRjaChyZWcsIHUsIDAsIHBvcywg
bWF0Y2hMZW5ndGgpOwotICAgIGRlbGV0ZSB0bXBSZWc7CisgICAgcmVnRXhwT2JqLT5wZXJmb3Jt
TWF0Y2gocmVnLmdldCgpLCB1LCAwLCBwb3MsIG1hdGNoTGVuZ3RoKTsKICAgICByZXR1cm4ganNO
dW1iZXIocG9zKTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19212</attachid>
            <date>2008-02-19 10:57:52 -0800</date>
            <delta_ts>2008-02-24 02:35:28 -0800</delta_ts>
            <desc>patch for next step -- actually remove the default</desc>
            <filename>RefCountedPatch.txt</filename>
            <type>text/plain</type>
            <size>1267</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDMwNDA1KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMDgtMDItMTkgIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIC0gbmV4dCBzdGVwIGZvciBodHRwOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNzI1NworICAgICAgICAgIHN0YXJ0IHJlZiBjb3VudHMgYXQgMSBpbnN0
ZWFkIG9mIDAgZm9yIHNwZWVkCisKKyAgICAgICAgKiB3dGYvUmVmQ291bnRlZC5oOgorICAgICAg
ICAoV1RGOjpSZWZDb3VudGVkOjpSZWZDb3VudGVkKTogSGF2ZSByZWZjb3VudHMgZGVmYXVsdCB0
byAxLiBUaGlzIGFsbG93cyB1cyB0byBzdGFydAorICAgICAgICByZW1vdmluZyB0aGUgZXhwbGlj
aXQgaW5pdGlhbGl6YXRpb24gb2YgUmVmQ291bnRlZCBmcm9tIGNsYXNzZXMgYW5kIGV2ZW50dWFs
bHkgd2UKKyAgICAgICAgY2FuIHJlbW92ZSB0aGUgYWJpbGl0eSB0byBoYXZlIHRoZSBpbml0aWFs
IGNvdW50IG9mIDAgZW50aXJlbHkuCisKIDIwMDgtMDItMTggIFNhbXVlbCBXZWluaWcgIDxzYW1A
d2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBHZW9mZiBHYXJlbi4KSW5kZXg6IEph
dmFTY3JpcHRDb3JlL3d0Zi9SZWZDb3VudGVkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENv
cmUvd3RmL1JlZkNvdW50ZWQuaAkocmV2aXNpb24gMzA0MDQpCisrKyBKYXZhU2NyaXB0Q29yZS93
dGYvUmVmQ291bnRlZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBAIG5hbWVzcGFj
ZSBXVEYgewogCiB0ZW1wbGF0ZTxjbGFzcyBUPiBjbGFzcyBSZWZDb3VudGVkIDogTm9uY29weWFi
bGUgewogcHVibGljOgotICAgIFJlZkNvdW50ZWQoaW50IGluaXRpYWxSZWZDb3VudCkKKyAgICBS
ZWZDb3VudGVkKGludCBpbml0aWFsUmVmQ291bnQgPSAxKQogICAgICAgICA6IG1fcmVmQ291bnQo
aW5pdGlhbFJlZkNvdW50KQogI2lmbmRlZiBOREVCVUcKICAgICAgICAgLCBtX2RlbGV0aW9uSGFz
QmVndW4oZmFsc2UpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19228</attachid>
            <date>2008-02-20 09:17:24 -0800</date>
            <delta_ts>2008-06-16 00:09:46 -0700</delta_ts>
            <desc>work in progress on StyleBase and classes derived from it</desc>
            <filename>StyleBaseRefCountPatch.txt</filename>
            <type>text/plain</type>
            <size>68359</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCShyZXZpc2lvbiAzMDExOCkKKysr
IGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCSh3b3JraW5nIGNvcHkpCkBAIC0y
MDQsNyArMjA0LDcgQEAgc3ViIEFkZEluY2x1ZGVzRm9yVHlwZQogICAgICAgICAkaW1wbEluY2x1
ZGVzeyJDYW52YXNTdHlsZS5oIn0gPSAxOwogICAgIH0KIAotICAgIGlmICgkdHlwZSBlcSAiQ2Fu
dmFzR3JhZGllbnQiIG9yICR0eXBlIGVxICJYUGF0aE5TUmVzb2x2ZXIiKSB7CisgICAgaWYgKCR0
eXBlIGVxICJDYW52YXNHcmFkaWVudCIgb3IgJHR5cGUgZXEgIkNTU01lZGlhUnVsZSIgb3IgJHR5
cGUgZXEgIlhQYXRoTlNSZXNvbHZlciIpIHsKICAgICAgICAgJGltcGxJbmNsdWRlc3siUGxhdGZv
cm1TdHJpbmcuaCJ9ID0gMTsKICAgICB9CiAKSW5kZXg6IGNzcy9DU1NDaGFyc2V0UnVsZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gY3NzL0NTU0NoYXJzZXRSdWxlLmNwcAkocmV2aXNpb24gMzAxMTgpCisr
KyBjc3MvQ1NTQ2hhcnNldFJ1bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNCBAQAot
LyoqCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRE9NIGltcGxlbWVudGF0aW9uIGZvciBL
REUuCi0gKgorLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgog
ICogQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQG1hY3J1bGVzLnJ1
KQogICoKQEAgLTI1LDEyICsyMywxNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNTU0No
YXJzZXRSdWxlOjpDU1NDaGFyc2V0UnVsZShTdHlsZUJhc2UqIHBhcmVudCwgY29uc3QgU3RyaW5n
JiBlbmNvZGluZykKK2lubGluZSBDU1NDaGFyc2V0UnVsZTo6Q1NTQ2hhcnNldFJ1bGUoU3R5bGVC
YXNlKiBwYXJlbnQsIGNvbnN0IFN0cmluZyYgZW5jb2RpbmcpCiAgICAgOiBDU1NSdWxlKHBhcmVu
dCkKICAgICAsIG1fZW5jb2RpbmcoZW5jb2RpbmcpCiB7CiB9CiAKK1Bhc3NSZWZQdHI8Q1NTQ2hh
cnNldFJ1bGU+IENTU0NoYXJzZXRSdWxlOjpjcmVhdGUoU3R5bGVCYXNlKiBwYXJlbnQsIGNvbnN0
IFN0cmluZyYgZW5jb2RpbmcpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDU1NDaGFyc2V0
UnVsZShwYXJlbnQsIGVuY29kaW5nKSk7Cit9CisKIENTU0NoYXJzZXRSdWxlOjp+Q1NTQ2hhcnNl
dFJ1bGUoKQogewogfQpJbmRleDogY3NzL0NTU0NoYXJzZXRSdWxlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
Y3NzL0NTU0NoYXJzZXRSdWxlLmgJKHJldmlzaW9uIDMwMTE4KQorKysgY3NzL0NTU0NoYXJzZXRS
dWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw0IEBACiAvKgotICogVGhpcyBmaWxlIGlz
IHBhcnQgb2YgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgotICoKICAqIChDKSAxOTk5
LTIwMDMgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqIChDKSAyMDAyLTIwMDMgRGlyayBN
dWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDYgQXBw
bGUgQ29tcHV0ZXIsIEluYy4KQEAgLTMzLDIwICszMSwyMiBAQCB0eXBlZGVmIGludCBFeGNlcHRp
b25Db2RlOwogCiBjbGFzcyBDU1NDaGFyc2V0UnVsZSA6IHB1YmxpYyBDU1NSdWxlIHsKIHB1Ymxp
YzoKLSAgICBDU1NDaGFyc2V0UnVsZShTdHlsZUJhc2UqIHBhcmVudCwgY29uc3QgU3RyaW5nJiBl
bmNvZGluZyk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTQ2hhcnNldFJ1bGU+IGNyZWF0ZShT
dHlsZUJhc2UqIHBhcmVudCwgY29uc3QgU3RyaW5nJiBlbmNvZGluZyk7CiAgICAgdmlydHVhbCB+
Q1NTQ2hhcnNldFJ1bGUoKTsKIAogICAgIHZpcnR1YWwgYm9vbCBpc0NoYXJzZXRSdWxlKCkgeyBy
ZXR1cm4gdHJ1ZTsgfQogCi0gICAgU3RyaW5nIGVuY29kaW5nKCkgY29uc3QgeyByZXR1cm4gbV9l
bmNvZGluZzsgfQorICAgIGNvbnN0IFN0cmluZyYgZW5jb2RpbmcoKSBjb25zdCB7IHJldHVybiBt
X2VuY29kaW5nOyB9CiAgICAgdm9pZCBzZXRFbmNvZGluZyhjb25zdCBTdHJpbmcmIGVuY29kaW5n
LCBFeGNlcHRpb25Db2RlJikgeyBtX2VuY29kaW5nID0gZW5jb2Rpbmc7IH0KIAotICAgIC8vIElu
aGVyaXRlZCBmcm9tIENTU1J1bGUKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIHNob3J0IHR5cGUoKSBj
b25zdCB7IHJldHVybiBDSEFSU0VUX1JVTEU7IH0KKyAgICAvLyBmcm9tIENTU1J1bGUKIAorICAg
IHZpcnR1YWwgdW5zaWduZWQgc2hvcnQgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIENIQVJTRVRfUlVM
RTsgfQogICAgIHZpcnR1YWwgU3RyaW5nIGNzc1RleHQoKSBjb25zdDsKIAotcHJvdGVjdGVkOgor
cHJpdmF0ZToKKyAgICBDU1NDaGFyc2V0UnVsZShTdHlsZUJhc2UqIHBhcmVudCwgY29uc3QgU3Ry
aW5nJiBlbmNvZGluZyk7CisKICAgICBTdHJpbmcgbV9lbmNvZGluZzsKIH07CiAKSW5kZXg6IGNz
cy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGNzcy9DU1ND
b21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCShyZXZpc2lvbiAzMDExOCkKKysrIGNzcy9DU1ND
b21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTMsMTEgKzI5
MywxNiBAQCBzdGF0aWMgSW50UmVjdCBzaXppbmdCb3goUmVuZGVyT2JqZWN0KiByCiAgICAgcmV0
dXJuIHJlbmRlcmVyLT5zdHlsZSgpLT5ib3hTaXppbmcoKSA9PSBDT05URU5UX0JPWCA/IHJlbmRl
cmVyLT5jb250ZW50Qm94KCkgOiByZW5kZXJlci0+Ym9yZGVyQm94KCk7CiB9CiAKLUNTU0NvbXB1
dGVkU3R5bGVEZWNsYXJhdGlvbjo6Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uKFBhc3NSZWZQ
dHI8Tm9kZT4gbikKLSAgICA6IG1fbm9kZShuKQoraW5saW5lIENTU0NvbXB1dGVkU3R5bGVEZWNs
YXJhdGlvbjo6Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uKFBhc3NSZWZQdHI8Tm9kZT4gbm9k
ZSkKKyAgICA6IG1fbm9kZShub2RlKQogewogfQogCitQYXNzUmVmUHRyPENTU0NvbXB1dGVkU3R5
bGVEZWNsYXJhdGlvbj4gQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpjcmVhdGUoUGFzc1Jl
ZlB0cjxOb2RlPiBub2RlKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ1NTQ29tcHV0ZWRT
dHlsZURlY2xhcmF0aW9uKG5vZGUpKTsKK30KKwogQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9u
Ojp+Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uKCkKIHsKIH0KQEAgLTEwMzYsNyArMTA0MSw3
IEBAIFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IEMKIAogUGFzc1JlZlB0
cjxDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24+IGNvbXB1dGVkU3R5bGUoTm9kZSogbm9kZSkK
IHsKLSAgICByZXR1cm4gbmV3IENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbihub2RlKTsKKyAg
ICByZXR1cm4gQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpjcmVhdGUobm9kZSk7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IGNzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFy
YXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBjc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmgJ
KHJldmlzaW9uIDMwMTE4KQorKysgY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNSBAQAotLyoqCi0gKgotICogQ29weXJpZ2h0IChDKSAg
MjAwNCAgWmFjayBSdXNpbiA8emFja0BrZGUub3JnPgorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
NCBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUs
IDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0zNiw3ICszNSw3IEBA
IGVudW0gRVVwZGF0ZUxheW91dCB7IERvTm90VXBkYXRlTGF5b3V0ID0KIAogY2xhc3MgQ1NTQ29t
cHV0ZWRTdHlsZURlY2xhcmF0aW9uIDogcHVibGljIENTU1N0eWxlRGVjbGFyYXRpb24gewogcHVi
bGljOgotICAgIENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbihQYXNzUmVmUHRyPE5vZGU+KTsK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24+IGNyZWF0
ZShQYXNzUmVmUHRyPE5vZGU+KTsKICAgICB2aXJ0dWFsIH5DU1NDb21wdXRlZFN0eWxlRGVjbGFy
YXRpb24oKTsKIAogICAgIHZpcnR1YWwgU3RyaW5nIGNzc1RleHQoKSBjb25zdDsKQEAgLTYzLDYg
KzYyLDggQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIHJlbW92ZUNvbXB1dGVkSW5oZXJpdGFi
bGVQcm9wZXJ0aWVzRnJvbShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiopOwogCiBwcml2YXRl
OgorICAgIENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbihQYXNzUmVmUHRyPE5vZGU+KTsKKwog
ICAgIHZpcnR1YWwgdm9pZCBzZXRDc3NUZXh0KGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUm
KTsKIAogICAgIHZpcnR1YWwgU3RyaW5nIHJlbW92ZVByb3BlcnR5KGludCBwcm9wZXJ0eUlELCBF
eGNlcHRpb25Db2RlJik7CkluZGV4OiBjc3MvQ1NTRm9udEZhY2VSdWxlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBjc3MvQ1NTRm9udEZhY2VSdWxlLmNwcAkocmV2aXNpb24gMzAxMTgpCisrKyBjc3MvQ1NT
Rm9udEZhY2VSdWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDQgQEAKLS8qKgotICog
VGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgotICoK
Ky8qCiAgKiAoQykgMTk5OS0yMDAzIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAoQykg
MjAwMi0yMDAzIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQogICogQ29weXJpZ2h0IChD
KSAyMDAyLCAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCkBAIC0yOCwxMSArMjYsMTYg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1DU1NGb250RmFjZVJ1bGU6OkNTU0ZvbnRGYWNl
UnVsZShTdHlsZUJhc2UqIHBhcmVudCkKK2lubGluZSBDU1NGb250RmFjZVJ1bGU6OkNTU0ZvbnRG
YWNlUnVsZShTdHlsZUJhc2UqIHBhcmVudCkKICAgICA6IENTU1J1bGUocGFyZW50KQogewogfQog
CitQYXNzUmVmUHRyPENTU0ZvbnRGYWNlUnVsZT4gQ1NTRm9udEZhY2VSdWxlOjpjcmVhdGUoU3R5
bGVCYXNlKiBwYXJlbnQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDU1NGb250RmFjZVJ1
bGUocGFyZW50KSk7Cit9CisKIENTU0ZvbnRGYWNlUnVsZTo6fkNTU0ZvbnRGYWNlUnVsZSgpCiB7
CiB9CkluZGV4OiBjc3MvQ1NTRm9udEZhY2VSdWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gY3NzL0NTU0Zv
bnRGYWNlUnVsZS5oCShyZXZpc2lvbiAzMDExOCkKKysrIGNzcy9DU1NGb250RmFjZVJ1bGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQCBjbGFzcyBDU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbjsKIAogY2xhc3MgQ1NTRm9udEZhY2VSdWxlIDogcHVibGljIENTU1J1bGUgewogcHVi
bGljOgotICAgIENTU0ZvbnRGYWNlUnVsZShTdHlsZUJhc2UqIHBhcmVudCk7CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8Q1NTRm9udEZhY2VSdWxlPiBjcmVhdGUoU3R5bGVCYXNlKiBwYXJlbnQpOwog
ICAgIHZpcnR1YWwgfkNTU0ZvbnRGYWNlUnVsZSgpOwogCiAgICAgdmlydHVhbCBib29sIGlzRm9u
dEZhY2VSdWxlKCkgeyByZXR1cm4gdHJ1ZTsgfQpAQCAtNDgsNyArNDgsOSBAQCBwdWJsaWM6CiAK
ICAgICB2b2lkIHNldERlY2xhcmF0aW9uKFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb24+KTsKIAotcHJvdGVjdGVkOgorcHJpdmF0ZToKKyAgICBDU1NGb250RmFjZVJ1bGUoU3R5
bGVCYXNlKiBwYXJlbnQpOworCiAgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9u
PiBtX3N0eWxlOwogfTsKIApJbmRleDogY3NzL0NTU0ltcG9ydFJ1bGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIGNzcy9DU1NJbXBvcnRSdWxlLmNwcAkocmV2aXNpb24gMzAxMTgpCisrKyBjc3MvQ1NTSW1w
b3J0UnVsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw0IEBACi0vKioKLSAqIFRoaXMg
ZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9yIEtERS4KLSAqCisvKgog
ICogKEMpIDE5OTktMjAwMyBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogKEMpIDIwMDIt
MjAwMyBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKICAqIENvcHlyaWdodCAoQykgMjAw
MiwgMjAwNSwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgpAQCAtMzMsNyArMzEsNyBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNTU0ltcG9ydFJ1bGU6OkNTU0ltcG9ydFJ1bGUoU3R5bGVC
YXNlKiBwYXJlbnQsIGNvbnN0IFN0cmluZyYgaHJlZiwgTWVkaWFMaXN0KiBtZWRpYSkKK0NTU0lt
cG9ydFJ1bGU6OkNTU0ltcG9ydFJ1bGUoU3R5bGVCYXNlKiBwYXJlbnQsIGNvbnN0IFN0cmluZyYg
aHJlZiwgUGFzc1JlZlB0cjxNZWRpYUxpc3Q+IG1lZGlhKQogICAgIDogQ1NTUnVsZShwYXJlbnQp
CiAgICAgLCBtX3N0ckhyZWYoaHJlZikKICAgICAsIG1fbHN0TWVkaWEobWVkaWEpCkBAIC00Myw3
ICs0MSwxMiBAQCBDU1NJbXBvcnRSdWxlOjpDU1NJbXBvcnRSdWxlKFN0eWxlQmFzZSogCiAgICAg
aWYgKG1fbHN0TWVkaWEpCiAgICAgICAgIG1fbHN0TWVkaWEtPnNldFBhcmVudCh0aGlzKTsKICAg
ICBlbHNlCi0gICAgICAgIG1fbHN0TWVkaWEgPSBuZXcgTWVkaWFMaXN0KHRoaXMsIFN0cmluZygp
KTsKKyAgICAgICAgbV9sc3RNZWRpYSA9IE1lZGlhTGlzdDo6Y3JlYXRlKHRoaXMsIFN0cmluZygp
KTsKK30KKworUGFzc1JlZlB0cjxDU1NJbXBvcnRSdWxlPiBDU1NJbXBvcnRSdWxlOjpjcmVhdGUo
U3R5bGVCYXNlKiBwYXJlbnQsIGNvbnN0IFN0cmluZyYgaHJlZiwgUGFzc1JlZlB0cjxNZWRpYUxp
c3Q+IG1lZGlhKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ1NTSW1wb3J0UnVsZShwYXJl
bnQsIGhyZWYsIG1lZGlhKSk7CiB9CiAKIENTU0ltcG9ydFJ1bGU6On5DU1NJbXBvcnRSdWxlKCkK
SW5kZXg6IGNzcy9DU1NJbXBvcnRSdWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gY3NzL0NTU0ltcG9ydFJ1
bGUuaAkocmV2aXNpb24gMzAxMTgpCisrKyBjc3MvQ1NTSW1wb3J0UnVsZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00g
aW1wbGVtZW50YXRpb24gZm9yIEtERS4KLSAqCiAgKiAoQykgMTk5OS0yMDAzIExhcnMgS25vbGwg
KGtub2xsQGtkZS5vcmcpCiAgKiAoQykgMjAwMi0yMDAzIERpcmsgTXVlbGxlciAobXVlbGxlckBr
ZGUub3JnKQogICogQ29weXJpZ2h0IChDKSAyMDAyLCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMu
CkBAIC0zNSwyOSArMzMsMzQgQEAgY2xhc3MgTWVkaWFMaXN0OwogCiBjbGFzcyBDU1NJbXBvcnRS
dWxlIDogcHVibGljIENTU1J1bGUsIHB1YmxpYyBDYWNoZWRSZXNvdXJjZUNsaWVudCB7CiBwdWJs
aWM6Ci0gICAgQ1NTSW1wb3J0UnVsZShTdHlsZUJhc2UqIHBhcmVudCwgY29uc3QgU3RyaW5nJiBo
cmVmLCBNZWRpYUxpc3QqKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDU1NJbXBvcnRSdWxlPiBj
cmVhdGUoU3R5bGVCYXNlKiBwYXJlbnQsIGNvbnN0IFN0cmluZyYgaHJlZiwgUGFzc1JlZlB0cjxN
ZWRpYUxpc3Q+KTsKICAgICB2aXJ0dWFsIH5DU1NJbXBvcnRSdWxlKCk7CiAKLSAgICB2aXJ0dWFs
IGJvb2wgaXNJbXBvcnRSdWxlKCkgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgU3RyaW5nIGhyZWYo
KSBjb25zdCB7IHJldHVybiBtX3N0ckhyZWY7IH0KKyAgICBjb25zdCBTdHJpbmcmIGhyZWYoKSBj
b25zdCB7IHJldHVybiBtX3N0ckhyZWY7IH0KICAgICBNZWRpYUxpc3QqIG1lZGlhKCkgY29uc3Qg
eyByZXR1cm4gbV9sc3RNZWRpYS5nZXQoKTsgfQogICAgIENTU1N0eWxlU2hlZXQqIHN0eWxlU2hl
ZXQoKSBjb25zdCB7IHJldHVybiBtX3N0eWxlU2hlZXQuZ2V0KCk7IH0KIAotICAgIC8vIEluaGVy
aXRlZCBmcm9tIENTU1J1bGUKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIHNob3J0IHR5cGUoKSBjb25z
dCB7IHJldHVybiBJTVBPUlRfUlVMRTsgfQorICAgIC8vIGZyb20gU3R5bGVCYXNlCiAKLSAgICB2
aXJ0dWFsIFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGlzSW1wb3J0
UnVsZSgpIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIC8vIE5vdCBwYXJ0IG9mIHRoZSBDU1NPTQot
ICAgIGJvb2wgaXNMb2FkaW5nKCkgY29uc3Q7CisgICAgLy8gZnJvbSBDU1NSdWxlCisKKyAgICB2
aXJ0dWFsIHVuc2lnbmVkIHNob3J0IHR5cGUoKSBjb25zdCB7IHJldHVybiBJTVBPUlRfUlVMRTsg
fQorICAgIHZpcnR1YWwgU3RyaW5nIGNzc1RleHQoKSBjb25zdDsKIAogICAgIC8vIGZyb20gQ2Fj
aGVkUmVzb3VyY2VDbGllbnQKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q1NTU3R5bGVTaGVldChjb25z
dCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0LCBjb25zdCBTdHJpbmcmIHNoZWV0
KTsKIAorICAgIHZpcnR1YWwgdm9pZCBzZXRDU1NTdHlsZVNoZWV0KGNvbnN0IFN0cmluZyYgdXJs
LCBjb25zdCBTdHJpbmcmIGNoYXJzZXQsIGNvbnN0IFN0cmluZyYgc2hlZXQpOwogICAgIHZpcnR1
YWwgdm9pZCBpbnNlcnRlZEludG9QYXJlbnQoKTsKIAotcHJvdGVjdGVkOgorICAgIC8vIG90aGVy
CisKKyAgICBib29sIGlzTG9hZGluZygpIGNvbnN0OworCitwcml2YXRlOgorICAgIENTU0ltcG9y
dFJ1bGUoU3R5bGVCYXNlKiBwYXJlbnQsIGNvbnN0IFN0cmluZyYgaHJlZiwgUGFzc1JlZlB0cjxN
ZWRpYUxpc3Q+KTsKKwogICAgIFN0cmluZyBtX3N0ckhyZWY7CiAgICAgUmVmUHRyPE1lZGlhTGlz
dD4gbV9sc3RNZWRpYTsKICAgICBSZWZQdHI8Q1NTU3R5bGVTaGVldD4gbV9zdHlsZVNoZWV0OwpJ
bmRleDogY3NzL0NTU01lZGlhUnVsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gY3NzL0NTU01lZGlhUnVs
ZS5jcHAJKHJldmlzaW9uIDMwMTE4KQorKysgY3NzL0NTU01lZGlhUnVsZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNiArMSw0IEBACi0vKioKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBE
T00gaW1wbGVtZW50YXRpb24gZm9yIEtERS4KLSAqCisvKgogICogKEMpIDE5OTktMjAwMyBMYXJz
IEtub2xsIChrbm9sbEBrZGUub3JnKQogICogKEMpIDIwMDItMjAwMyBEaXJrIE11ZWxsZXIgKG11
ZWxsZXJAa2RlLm9yZykKICAqIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNSwgMjAwNiBBcHBsZSBD
b21wdXRlciwgSW5jLgpAQCAtMzMsMjYgKzMxLDE2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotQ1NTTWVkaWFSdWxlOjpDU1NNZWRpYVJ1bGUoU3R5bGVCYXNlKiBwYXJlbnQsIE1lZGlhTGlz
dCogbWVkaWFMaXN0LCBDU1NSdWxlTGlzdCogcnVsZUxpc3QpCitpbmxpbmUgQ1NTTWVkaWFSdWxl
OjpDU1NNZWRpYVJ1bGUoU3R5bGVCYXNlKiBwYXJlbnQsIFBhc3NSZWZQdHI8TWVkaWFMaXN0PiBt
ZWRpYUxpc3QsIFBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IHJ1bGVMaXN0KQogICAgIDogQ1NTUnVs
ZShwYXJlbnQpCiAgICAgLCBtX2xzdE1lZGlhKG1lZGlhTGlzdCkKICAgICAsIG1fbHN0Q1NTUnVs
ZXMocnVsZUxpc3QpCiB7CiB9CiAKLUNTU01lZGlhUnVsZTo6Q1NTTWVkaWFSdWxlKFN0eWxlQmFz
ZSogcGFyZW50KQotICAgIDogQ1NTUnVsZShwYXJlbnQpCi0gICAgLCBtX2xzdE1lZGlhKDApCi0g
ICAgLCBtX2xzdENTU1J1bGVzKG5ldyBDU1NSdWxlTGlzdCgpKQotCi17Ci19Ci0KLUNTU01lZGlh
UnVsZTo6Q1NTTWVkaWFSdWxlKFN0eWxlQmFzZSogcGFyZW50LCBjb25zdCBTdHJpbmcgJm1lZGlh
KQotICAgIDogQ1NTUnVsZShwYXJlbnQpCi0gICAgLCBtX2xzdE1lZGlhKG5ldyBNZWRpYUxpc3Qo
dGhpcywgbWVkaWEpKQotICAgICwgbV9sc3RDU1NSdWxlcyhuZXcgQ1NTUnVsZUxpc3QoKSkKK1Bh
c3NSZWZQdHI8Q1NTTWVkaWFSdWxlPiBDU1NNZWRpYVJ1bGU6OmNyZWF0ZShTdHlsZUJhc2UqIHBh
cmVudCwgUGFzc1JlZlB0cjxNZWRpYUxpc3Q+IG1lZGlhTGlzdCwgUGFzc1JlZlB0cjxDU1NSdWxl
TGlzdD4gcnVsZUxpc3QpCiB7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDU1NNZWRpYVJ1bGUo
cGFyZW50LCBtZWRpYUxpc3QsIHJ1bGVMaXN0KSk7CiB9CiAKIENTU01lZGlhUnVsZTo6fkNTU01l
ZGlhUnVsZSgpCkluZGV4OiBjc3MvQ1NTTWVkaWFSdWxlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gY3NzL0NT
U01lZGlhUnVsZS5oCShyZXZpc2lvbiAzMDExOCkKKysrIGNzcy9DU1NNZWRpYVJ1bGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0
aGUgRE9NIGltcGxlbWVudGF0aW9uIGZvciBLREUuCi0gKgogICogKEMpIDE5OTktMjAwMyBMYXJz
IEtub2xsIChrbm9sbEBrZGUub3JnKQogICogKEMpIDIwMDItMjAwMyBEaXJrIE11ZWxsZXIgKG11
ZWxsZXJAa2RlLm9yZykKICAqIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNiBBcHBsZSBDb21wdXRl
ciwgSW5jLgpAQCAtMjYsNiArMjQsNyBAQAogI2RlZmluZSBDU1NNZWRpYVJ1bGVfaAogCiAjaW5j
bHVkZSAiQ1NTUnVsZS5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3Rm
L1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zNyw5ICszNiw4IEBAIHR5cGVk
ZWYgaW50IEV4Y2VwdGlvbkNvZGU7CiAKIGNsYXNzIENTU01lZGlhUnVsZSA6IHB1YmxpYyBDU1NS
dWxlIHsKIHB1YmxpYzoKLSAgICBDU1NNZWRpYVJ1bGUoU3R5bGVCYXNlKiBwYXJlbnQpOwotICAg
IENTU01lZGlhUnVsZShTdHlsZUJhc2UqIHBhcmVudCwgY29uc3QgU3RyaW5nJiBtZWRpYSk7Ci0g
ICAgQ1NTTWVkaWFSdWxlKFN0eWxlQmFzZSogcGFyZW50LCBNZWRpYUxpc3QqIG1lZGlhTGlzdCwg
Q1NTUnVsZUxpc3QqIHJ1bGVMaXN0KTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDU1NNZWRpYVJ1
bGU+IGNyZWF0ZShTdHlsZUJhc2UqIHBhcmVudCwgUGFzc1JlZlB0cjxNZWRpYUxpc3Q+LCBQYXNz
UmVmUHRyPENTU1J1bGVMaXN0Pik7CisKICAgICB2aXJ0dWFsIH5DU1NNZWRpYVJ1bGUoKTsKIAog
ICAgIHZpcnR1YWwgYm9vbCBpc01lZGlhUnVsZSgpIHsgcmV0dXJuIHRydWU7IH0KQEAgLTU4LDcg
KzU2LDkgQEAgcHVibGljOgogICAgIC8vIE5vdCBwYXJ0IG9mIHRoZSBDU1NPTQogICAgIHVuc2ln
bmVkIGFwcGVuZChDU1NSdWxlKik7CiAKLXByb3RlY3RlZDoKK3ByaXZhdGU6CisgICAgQ1NTTWVk
aWFSdWxlKFN0eWxlQmFzZSogcGFyZW50LCBQYXNzUmVmUHRyPE1lZGlhTGlzdD4sIFBhc3NSZWZQ
dHI8Q1NTUnVsZUxpc3Q+KTsKKwogICAgIFJlZlB0cjxNZWRpYUxpc3Q+IG1fbHN0TWVkaWE7CiAg
ICAgUmVmUHRyPENTU1J1bGVMaXN0PiBtX2xzdENTU1J1bGVzOwogfTsKSW5kZXg6IGNzcy9DU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gY3NzL0NTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uLmNwcAkocmV2aXNpb24gMzAxMTgpCisrKyBjc3MvQ1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxOCArMzcsMjMgQEAgdXNp
bmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1DU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbjo6Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24oKQoraW5saW5lIENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uOjpDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbigpCiAgICAg
OiBtX25vZGUoMCkKIHsKIH0KIAorUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bj4gQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNyZWF0ZSgpCit7CisgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbik7Cit9CisKIENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uOjpDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbihDU1NSdWxlKiBwYXJl
bnQpCiAgICAgOiBDU1NTdHlsZURlY2xhcmF0aW9uKHBhcmVudCkKICAgICAsIG1fbm9kZSgwKQog
ewogfQogCi1DU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Q1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb24oQ1NTUnVsZSogcGFyZW50LCBjb25zdCBEZXByZWNhdGVkVmFsdWVMaXN0PENTU1Byb3Bl
cnR5PiYgdmFsdWVzKQoraW5saW5lIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbihDU1NSdWxlKiBwYXJlbnQsIGNvbnN0IERlcHJlY2F0ZWRWYWx1
ZUxpc3Q8Q1NTUHJvcGVydHk+JiB2YWx1ZXMpCiAgICAgOiBDU1NTdHlsZURlY2xhcmF0aW9uKHBh
cmVudCkKICAgICAsIG1fdmFsdWVzKHZhbHVlcykKICAgICAsIG1fbm9kZSgwKQpAQCAtNTYsNyAr
NjEsMTIgQEAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OkNTU011dGFibGVTdAogICAgIC8v
IEZJWE1FOiBUaGlzIGFsbG93cyBkdXBsaWNhdGUgcHJvcGVydGllcy4KIH0KIAotQ1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb246OkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKENTU1J1bGUqIHBh
cmVudCwgY29uc3QgQ1NTUHJvcGVydHkqIGNvbnN0ICogcHJvcGVydGllcywgaW50IG51bVByb3Bl
cnRpZXMpCitQYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbjo6Y3JlYXRlKENTU1J1bGUqIHBhcmVudCwgY29uc3QgRGVwcmVjYXRl
ZFZhbHVlTGlzdDxDU1NQcm9wZXJ0eT4mIHZhbHVlcykKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKHBhcmVudCwgdmFsdWVzKSk7Cit9CisKK2lu
bGluZSBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b24oQ1NTUnVsZSogcGFyZW50LCBjb25zdCBDU1NQcm9wZXJ0eSogY29uc3QgKiBwcm9wZXJ0aWVz
LCBpbnQgbnVtUHJvcGVydGllcykKICAgICA6IENTU1N0eWxlRGVjbGFyYXRpb24ocGFyZW50KQog
ICAgICwgbV9ub2RlKDApCiB7CkBAIC02Nyw2ICs3NywxMSBAQCBDU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbjo6Q1NTTXV0YWJsZVN0CiAgICAgLy8gRklYTUU6IFRoaXMgYWxsb3dzIGR1cGxpY2F0
ZSBwcm9wZXJ0aWVzLgogfQogCitQYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9u
PiBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y3JlYXRlKENTU1J1bGUqIHBhcmVudCwgY29u
c3QgQ1NTUHJvcGVydHkqIGNvbnN0ICogcHJvcGVydGllcywgaW50IG51bVByb3BlcnRpZXMpCit7
CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbihwYXJl
bnQsIHByb3BlcnRpZXMsIG51bVByb3BlcnRpZXMpKTsKK30KKwogQ1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb24mIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpvcGVyYXRvcj0oY29uc3QgQ1NT
TXV0YWJsZVN0eWxlRGVjbGFyYXRpb24mIG90aGVyKQogewogICAgIC8vIGRvbid0IGF0dGFjaCBp
dCB0byB0aGUgc2FtZSBub2RlLCBqdXN0IGxlYXZlIHRoZSBjdXJyZW50IG1fbm9kZSB2YWx1ZQpJ
bmRleDogY3NzL0NTU011dGFibGVTdHlsZURlY2xhcmF0aW9uLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gY3Nz
L0NTU011dGFibGVTdHlsZURlY2xhcmF0aW9uLmgJKHJldmlzaW9uIDMwMTE4KQorKysgY3NzL0NT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw0IEBA
CiAvKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiBmb3Ig
S0RFLgotICoKICAqIChDKSAxOTk5LTIwMDMgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAq
IENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgogICoK
QEAgLTM2LDEwICszNCw5IEBAIGNsYXNzIE5vZGU7CiAKIGNsYXNzIENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uIDogcHVibGljIENTU1N0eWxlRGVjbGFyYXRpb24gewogcHVibGljOgotICAgIENT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uKCk7Ci0gICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b24oQ1NTUnVsZSogcGFyZW50UnVsZSk7Ci0gICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24o
Q1NTUnVsZSogcGFyZW50UnVsZSwgY29uc3QgRGVwcmVjYXRlZFZhbHVlTGlzdDxDU1NQcm9wZXJ0
eT4mKTsKLSAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbihDU1NSdWxlKiBwYXJlbnRSdWxl
LCBjb25zdCBDU1NQcm9wZXJ0eSogY29uc3QgKiwgaW50IG51bVByb3BlcnRpZXMpOworICAgIHN0
YXRpYyBQYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBjcmVhdGUoKTsKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gY3JlYXRlKENT
U1J1bGUqIHBhcmVudFJ1bGUsIGNvbnN0IERlcHJlY2F0ZWRWYWx1ZUxpc3Q8Q1NTUHJvcGVydHk+
Jik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IGNy
ZWF0ZShDU1NSdWxlKiBwYXJlbnRSdWxlLCBjb25zdCBDU1NQcm9wZXJ0eSogY29uc3QgKiwgaW50
IG51bVByb3BlcnRpZXMpOwogCiAgICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24mIG9wZXJh
dG9yPShjb25zdCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiYpOwogCkBAIC0xMDIsNyArOTks
MTQgQEAgcHVibGljOgogCiAgICAgdm9pZCBtZXJnZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
biosIGJvb2wgYXJnT3ZlcnJpZGVzT25Db25mbGljdCA9IHRydWUpOwogCitwcm90ZWN0ZWQ6Cisg
ICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24oQ1NTUnVsZSogcGFyZW50UnVsZSk7CisKIHBy
aXZhdGU6CisgICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24oKTsKKyAgICBDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbihDU1NSdWxlKiBwYXJlbnRSdWxlLCBjb25zdCBEZXByZWNhdGVkVmFs
dWVMaXN0PENTU1Byb3BlcnR5PiYpOworICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKENT
U1J1bGUqIHBhcmVudFJ1bGUsIGNvbnN0IENTU1Byb3BlcnR5KiBjb25zdCAqLCBpbnQgbnVtUHJv
cGVydGllcyk7CisKICAgICBTdHJpbmcgZ2V0U2hvcnRoYW5kVmFsdWUoY29uc3QgaW50KiBwcm9w
ZXJ0aWVzLCBpbnQgbnVtYmVyKSBjb25zdDsKICAgICBTdHJpbmcgZ2V0TGF5ZXJlZFNob3J0aGFu
ZFZhbHVlKGNvbnN0IGludCogcHJvcGVydGllcywgdW5zaWduZWQgbnVtYmVyKSBjb25zdDsKICAg
ICBTdHJpbmcgZ2V0NFZhbHVlcyhjb25zdCBpbnQqIHByb3BlcnRpZXMpIGNvbnN0OwpJbmRleDog
Y3NzL0NTU1BhZ2VSdWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gY3NzL0NTU1BhZ2VSdWxlLmgJKHJldmlz
aW9uIDMwMTE4KQorKysgY3NzL0NTU1BhZ2VSdWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcg
KzM1LDYgQEAgdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKIAogY2xhc3MgQ1NTUGFnZVJ1bGUg
OiBwdWJsaWMgQ1NTUnVsZSB7CiBwdWJsaWM6Ci0gICAgQ1NTUGFnZVJ1bGUoU3R5bGVCYXNlKiBw
YXJlbnQpOwogICAgIHZpcnR1YWwgfkNTU1BhZ2VSdWxlKCk7CiAKICAgICB2aXJ0dWFsIGJvb2wg
aXNQYWdlUnVsZSgpIHsgcmV0dXJuIHRydWU7IH0KQEAgLTUwLDcgKzQ5LDkgQEAgcHVibGljOgog
CiAgICAgdmlydHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0OwogCi1wcm90ZWN0ZWQ6Citwcml2
YXRlOgorICAgIENTU1BhZ2VSdWxlKFN0eWxlQmFzZSogcGFyZW50KTsKKwogICAgIFJlZlB0cjxD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gbV9zdHlsZTsKIH07CiAKSW5kZXg6IGNzcy9DU1NQ
YXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIGNzcy9DU1NQYXJzZXIuY3BwCShyZXZpc2lvbiAzMDEx
OCkKKysrIGNzcy9DU1NQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTksNyArMjU5LDcg
QEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlQ29sb3IoUkdCQTMyJiBjb2xvcgogCiAgICAgLy8gRmly
c3QgdHJ5IGNyZWF0aW5nIGEgY29sb3Igc3BlY2lmaWVkIGJ5IG5hbWUgb3IgdGhlICIjIiBzeW50
YXguCiAgICAgaWYgKCFwYXJzZXIucGFyc2VDb2xvcihzdHJpbmcsIGNvbG9yLCBzdHJpY3QpKSB7
Ci0gICAgICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gZHVtbXlTdHlsZURl
Y2xhcmF0aW9uKG5ldyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbik7CisgICAgICAgIFJlZlB0
cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gZHVtbXlTdHlsZURlY2xhcmF0aW9uID0gQ1NT
TXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNyZWF0ZSgpOwogCiAgICAgICAgIC8vIE5vdyB0cnkg
dG8gY3JlYXRlIGEgY29sb3IgZnJvbSB0aGUgcmdiKCkgb3IgcmdiYSgpIHN5bnRheC4KICAgICAg
ICAgaWYgKHBhcnNlci5wYXJzZUNvbG9yKGR1bW15U3R5bGVEZWNsYXJhdGlvbi5nZXQoKSwgc3Ry
aW5nKSkgewpAQCAtMzg1Miw5ICszODUyLDEwIEBAIE1lZGlhUXVlcnkqIENTU1BhcnNlcjo6c2lu
a0Zsb2F0aW5nTWVkaWEKIAogTWVkaWFMaXN0KiBDU1NQYXJzZXI6OmNyZWF0ZU1lZGlhTGlzdCgp
CiB7Ci0gICAgTWVkaWFMaXN0KiBsaXN0ID0gbmV3IE1lZGlhTGlzdDsKLSAgICBtX3BhcnNlZFN0
eWxlT2JqZWN0cy5hcHBlbmQobGlzdCk7Ci0gICAgcmV0dXJuIGxpc3Q7CisgICAgUmVmUHRyPE1l
ZGlhTGlzdD4gbGlzdCA9IE1lZGlhTGlzdDo6Y3JlYXRlKCk7CisgICAgTWVkaWFMaXN0KiByZXN1
bHQgPSBsaXN0LmdldCgpOworICAgIG1fcGFyc2VkU3R5bGVPYmplY3RzLmFwcGVuZChsaXN0LnJl
bGVhc2UoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogQ1NTUnVsZSogQ1NTUGFyc2VyOjpj
cmVhdGVDaGFyc2V0UnVsZShjb25zdCBQYXJzZVN0cmluZyYgY2hhcnNldCkKQEAgLTM4NjMsOSAr
Mzg2NCwxMCBAQCBDU1NSdWxlKiBDU1NQYXJzZXI6OmNyZWF0ZUNoYXJzZXRSdWxlKGNvCiAgICAg
ICAgIHJldHVybiAwOwogICAgIGlmICghc3R5bGVFbGVtZW50LT5pc0NTU1N0eWxlU2hlZXQoKSkK
ICAgICAgICAgcmV0dXJuIDA7Ci0gICAgQ1NTQ2hhcnNldFJ1bGUqIHJ1bGUgPSBuZXcgQ1NTQ2hh
cnNldFJ1bGUoc3R5bGVFbGVtZW50LCBkb21TdHJpbmcoY2hhcnNldCkpOwotICAgIG1fcGFyc2Vk
U3R5bGVPYmplY3RzLmFwcGVuZChydWxlKTsKLSAgICByZXR1cm4gcnVsZTsKKyAgICBSZWZQdHI8
Q1NTQ2hhcnNldFJ1bGU+IHJ1bGUgPSBDU1NDaGFyc2V0UnVsZTo6Y3JlYXRlKHN0eWxlRWxlbWVu
dCwgZG9tU3RyaW5nKGNoYXJzZXQpKTsKKyAgICBDU1NDaGFyc2V0UnVsZSogcmVzdWx0ID0gcnVs
ZS5nZXQoKTsKKyAgICBtX3BhcnNlZFN0eWxlT2JqZWN0cy5hcHBlbmQocnVsZS5yZWxlYXNlKCkp
OworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIENTU1J1bGUqIENTU1BhcnNlcjo6Y3JlYXRlSW1w
b3J0UnVsZShjb25zdCBQYXJzZVN0cmluZyYgdXJsLCBNZWRpYUxpc3QqIG1lZGlhKQpAQCAtMzg3
Niw5ICszODc4LDEwIEBAIENTU1J1bGUqIENTU1BhcnNlcjo6Y3JlYXRlSW1wb3J0UnVsZShjb24K
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgaWYgKCFzdHlsZUVsZW1lbnQtPmlzQ1NTU3R5bGVTaGVl
dCgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICBDU1NJbXBvcnRSdWxlKiBydWxlID0gbmV3IENT
U0ltcG9ydFJ1bGUoc3R5bGVFbGVtZW50LCBkb21TdHJpbmcodXJsKSwgbWVkaWEpOwotICAgIG1f
cGFyc2VkU3R5bGVPYmplY3RzLmFwcGVuZChydWxlKTsKLSAgICByZXR1cm4gcnVsZTsKKyAgICBS
ZWZQdHI8Q1NTSW1wb3J0UnVsZT4gcnVsZSA9IENTU0ltcG9ydFJ1bGU6OmNyZWF0ZShzdHlsZUVs
ZW1lbnQsIGRvbVN0cmluZyh1cmwpLCBtZWRpYSk7CisgICAgQ1NTSW1wb3J0UnVsZSogcmVzdWx0
ID0gcnVsZS5nZXQoKTsKKyAgICBtX3BhcnNlZFN0eWxlT2JqZWN0cy5hcHBlbmQocnVsZS5yZWxl
YXNlKCkpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIENTU1J1bGUqIENTU1BhcnNlcjo6Y3Jl
YXRlTWVkaWFSdWxlKE1lZGlhTGlzdCogbWVkaWEsIENTU1J1bGVMaXN0KiBydWxlcykKQEAgLTM4
OTEsOSArMzg5NCwxMCBAQCBDU1NSdWxlKiBDU1NQYXJzZXI6OmNyZWF0ZU1lZGlhUnVsZShNZWRp
CiAgICAgICAgIHJldHVybiAwOwogICAgIGlmICghc3R5bGVFbGVtZW50LT5pc0NTU1N0eWxlU2hl
ZXQoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgQ1NTTWVkaWFSdWxlKiBydWxlID0gbmV3IENT
U01lZGlhUnVsZShzdHlsZUVsZW1lbnQsIG1lZGlhLCBydWxlcyk7Ci0gICAgbV9wYXJzZWRTdHls
ZU9iamVjdHMuYXBwZW5kKHJ1bGUpOwotICAgIHJldHVybiBydWxlOworICAgIFJlZlB0cjxDU1NN
ZWRpYVJ1bGU+IHJ1bGUgPSBDU1NNZWRpYVJ1bGU6OmNyZWF0ZShzdHlsZUVsZW1lbnQsIG1lZGlh
LCBydWxlcyk7CisgICAgQ1NTTWVkaWFSdWxlKiByZXN1bHQgPSBydWxlLmdldCgpOworICAgIG1f
cGFyc2VkU3R5bGVPYmplY3RzLmFwcGVuZChydWxlLnJlbGVhc2UoKSk7CisgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAogQ1NTUnVsZUxpc3QqIENTU1BhcnNlcjo6Y3JlYXRlUnVsZUxpc3QoKQpAQCAt
MzkwNSwyNCArMzkwOSwyNiBAQCBDU1NSdWxlTGlzdCogQ1NTUGFyc2VyOjpjcmVhdGVSdWxlTGlz
dCgpCiAKIENTU1J1bGUqIENTU1BhcnNlcjo6Y3JlYXRlU3R5bGVSdWxlKENTU1NlbGVjdG9yKiBz
ZWxlY3RvcikKIHsKLSAgICBDU1NTdHlsZVJ1bGUqIHJ1bGUgPSAwOworICAgIENTU1N0eWxlUnVs
ZSogcmVzdWx0ID0gMDsKICAgICBpZiAoc2VsZWN0b3IpIHsKLSAgICAgICAgcnVsZSA9IG5ldyBD
U1NTdHlsZVJ1bGUoc3R5bGVFbGVtZW50KTsKLSAgICAgICAgbV9wYXJzZWRTdHlsZU9iamVjdHMu
YXBwZW5kKHJ1bGUpOworICAgICAgICBSZWZQdHI8Q1NTU3R5bGVSdWxlPiBydWxlID0gQ1NTU3R5
bGVSdWxlOjpjcmVhdGUoc3R5bGVFbGVtZW50KTsKICAgICAgICAgcnVsZS0+c2V0U2VsZWN0b3Io
c2lua0Zsb2F0aW5nU2VsZWN0b3Ioc2VsZWN0b3IpKTsKLSAgICAgICAgcnVsZS0+c2V0RGVjbGFy
YXRpb24obmV3IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKHJ1bGUsIHBhcnNlZFByb3BlcnRp
ZXMsIG51bVBhcnNlZFByb3BlcnRpZXMpKTsKKyAgICAgICAgcnVsZS0+c2V0RGVjbGFyYXRpb24o
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNyZWF0ZShydWxlLmdldCgpLCBwYXJzZWRQcm9w
ZXJ0aWVzLCBudW1QYXJzZWRQcm9wZXJ0aWVzKSk7CisgICAgICAgIHJlc3VsdCA9IHJ1bGUuZ2V0
KCk7CisgICAgICAgIG1fcGFyc2VkU3R5bGVPYmplY3RzLmFwcGVuZChydWxlLnJlbGVhc2UoKSk7
CiAgICAgfQogICAgIGNsZWFyUHJvcGVydGllcygpOwotICAgIHJldHVybiBydWxlOworICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKIENTU1J1bGUqIENTU1BhcnNlcjo6Y3JlYXRlRm9udEZhY2VSdWxl
KCkKIHsKLSAgICBDU1NGb250RmFjZVJ1bGUqIHJ1bGUgPSBuZXcgQ1NTRm9udEZhY2VSdWxlKHN0
eWxlRWxlbWVudCk7Ci0gICAgbV9wYXJzZWRTdHlsZU9iamVjdHMuYXBwZW5kKHJ1bGUpOwotICAg
IHJ1bGUtPnNldERlY2xhcmF0aW9uKG5ldyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbihydWxl
LCBwYXJzZWRQcm9wZXJ0aWVzLCBudW1QYXJzZWRQcm9wZXJ0aWVzKSk7CisgICAgUmVmUHRyPENT
U0ZvbnRGYWNlUnVsZT4gcnVsZSA9IENTU0ZvbnRGYWNlUnVsZTo6Y3JlYXRlKHN0eWxlRWxlbWVu
dCk7CisgICAgcnVsZS0+c2V0RGVjbGFyYXRpb24oQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246
OmNyZWF0ZShydWxlLmdldCgpLCBwYXJzZWRQcm9wZXJ0aWVzLCBudW1QYXJzZWRQcm9wZXJ0aWVz
KSk7CiAgICAgY2xlYXJQcm9wZXJ0aWVzKCk7Ci0gICAgcmV0dXJuIHJ1bGU7CisgICAgQ1NTRm9u
dEZhY2VSdWxlKiByZXN1bHQgPSBydWxlLmdldCgpOworICAgIG1fcGFyc2VkU3R5bGVPYmplY3Rz
LmFwcGVuZChydWxlLnJlbGVhc2UoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogRGVwcmVj
YXRlZFN0cmluZyBkZXByZWNhdGVkU3RyaW5nKGNvbnN0IFBhcnNlU3RyaW5nJiBwcykKSW5kZXg6
IGNzcy9DU1NSdWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gY3NzL0NTU1J1bGUuaAkocmV2aXNpb24gMzAx
MTgpCisrKyBjc3MvQ1NTUnVsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNCBAQAogLyoK
LSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9yIEtERS4K
LSAqCiAgKiAoQykgMTk5OS0yMDAzIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAoQykg
MjAwMi0yMDAzIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQogICogQ29weXJpZ2h0IChD
KSAyMDAyLCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KQEAgLTQ0
LDExICs0Miw2IEBAIHB1YmxpYzoKICAgICAgICAgUEFHRV9SVUxFCiAgICAgfTsKIAotICAgIENT
U1J1bGUoU3R5bGVCYXNlKiBwYXJlbnQpCi0gICAgICAgIDogU3R5bGVCYXNlKHBhcmVudCkKLSAg
ICB7Ci0gICAgfQotCiAgICAgdmlydHVhbCBib29sIGlzUnVsZSgpIHsgcmV0dXJuIHRydWU7IH0K
IAogICAgIHZpcnR1YWwgdW5zaWduZWQgc2hvcnQgdHlwZSgpIGNvbnN0ID0gMDsKQEAgLTU4LDYg
KzUxLDEyIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgU3RyaW5nIGNzc1RleHQoKSBjb25zdDsK
ICAgICB2b2lkIHNldENzc1RleHQoU3RyaW5nLCBFeGNlcHRpb25Db2RlJik7CisKK3Byb3RlY3Rl
ZDoKKyAgICBDU1NSdWxlKFN0eWxlQmFzZSogcGFyZW50KQorICAgICAgICA6IFN0eWxlQmFzZShw
YXJlbnQpCisgICAgeworICAgIH0KIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IGNzcy9DU1NTdHlsZURlY2xhcmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBjc3MvQ1NTU3R5bGVE
ZWNsYXJhdGlvbi5jcHAJKHJldmlzaW9uIDMwMTE4KQorKysgY3NzL0NTU1N0eWxlRGVjbGFyYXRp
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEsNCBAQAotLyoqCisvKgogICogKEMpIDE5
OTktMjAwMyBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogQ29weXJpZ2h0IChDKSAyMDA0
LCAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCkBA
IC0xNjYsNyArMTY2LDcgQEAgUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4g
QwogICAgICAgICBpZiAodmFsdWUpCiAgICAgICAgICAgICBsaXN0LmFwcGVuZChDU1NQcm9wZXJ0
eShzZXRbaV0sIHZhbHVlLnJlbGVhc2UoKSwgZmFsc2UpKTsKICAgICB9Ci0gICAgcmV0dXJuIG5l
dyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbigwLCBsaXN0KTsKKyAgICByZXR1cm4gQ1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb246OmNyZWF0ZSgwLCBsaXN0KTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogY3NzL0NTU1N0eWxlRGVjbGFyYXRpb24uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBjc3MvQ1NTU3R5bGVEZWNsYXJhdGlvbi5oCShyZXZpc2lvbiAzMDExOCkKKysrIGNzcy9DU1NT
dHlsZURlY2xhcmF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw0IEBACiAvKgotICog
VGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgotICoK
ICAqIChDKSAxOTk5LTIwMDMgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqIENvcHlyaWdo
dCAoQykgMjAwNCwgMjAwNSwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgogICoKQEAgLTc1LDEw
ICs3Myw2IEBAIHB1YmxpYzoKIAogcHJvdGVjdGVkOgogICAgIENTU1N0eWxlRGVjbGFyYXRpb24o
Q1NTUnVsZSogcGFyZW50UnVsZSA9IDApOwotCi1wcml2YXRlOgotICAgIENTU1N0eWxlRGVjbGFy
YXRpb24oY29uc3QgQ1NTU3R5bGVEZWNsYXJhdGlvbiYpOwotICAgIENTU1N0eWxlRGVjbGFyYXRp
b24mIG9wZXJhdG9yPShjb25zdCBDU1NTdHlsZURlY2xhcmF0aW9uJik7CiB9OwogCiAvLyBEZWZp
bmVkIGluIENTU0dyYW1tYXIueSwgYnV0IG5vdCBpbiBhbnkgaGVhZGVyLgpJbmRleDogY3NzL0NT
U1N0eWxlUnVsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gY3NzL0NTU1N0eWxlUnVsZS5jcHAJKHJldmlz
aW9uIDMwMTE4KQorKysgY3NzL0NTU1N0eWxlUnVsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5
LDEyICsyOSwxNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNTU1N0eWxlUnVsZTo6Q1NT
U3R5bGVSdWxlKFN0eWxlQmFzZSogcGFyZW50KQoraW5saW5lIENTU1N0eWxlUnVsZTo6Q1NTU3R5
bGVSdWxlKFN0eWxlQmFzZSogcGFyZW50KQogICAgIDogQ1NTUnVsZShwYXJlbnQpCiAgICAgLCBt
X3NlbGVjdG9yKDApCiB7CiB9CiAKK1Bhc3NSZWZQdHI8Q1NTU3R5bGVSdWxlPiBDU1NTdHlsZVJ1
bGU6OmNyZWF0ZShTdHlsZUJhc2UqIHBhcmVudCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3
IENTU1N0eWxlUnVsZShwYXJlbnQpKTsKK30KKwogQ1NTU3R5bGVSdWxlOjp+Q1NTU3R5bGVSdWxl
KCkKIHsKICAgICBpZiAobV9zdHlsZSkKSW5kZXg6IGNzcy9DU1NTdHlsZVJ1bGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBjc3MvQ1NTU3R5bGVSdWxlLmgJKHJldmlzaW9uIDMwMTE4KQorKysgY3NzL0NTU1N0
eWxlUnVsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw4IEBAIHR5cGVkZWYgaW50IEV4
Y2VwdGlvbkNvZGU7CiAKIGNsYXNzIENTU1N0eWxlUnVsZSA6IHB1YmxpYyBDU1NSdWxlIHsKIHB1
YmxpYzoKLSAgICBDU1NTdHlsZVJ1bGUoU3R5bGVCYXNlKiBwYXJlbnQpOworICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPENTU1N0eWxlUnVsZT4gY3JlYXRlKFN0eWxlQmFzZSogcGFyZW50KTsKKwogICAg
IHZpcnR1YWwgfkNTU1N0eWxlUnVsZSgpOwogCiAgICAgdmlydHVhbCBib29sIGlzU3R5bGVSdWxl
KCkgeyByZXR1cm4gdHJ1ZTsgfQpAQCAtNjEsNyArNjIsOSBAQCBwdWJsaWM6CiAgICAgQ1NTU2Vs
ZWN0b3IqIHNlbGVjdG9yKCkgeyByZXR1cm4gbV9zZWxlY3RvcjsgfQogICAgIENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uKiBkZWNsYXJhdGlvbigpIHsgcmV0dXJuIG1fc3R5bGUuZ2V0KCk7IH0K
ICAKLXByb3RlY3RlZDoKK3ByaXZhdGU6CisgICAgQ1NTU3R5bGVSdWxlKFN0eWxlQmFzZSogcGFy
ZW50KTsKKwogICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gbV9zdHlsZTsK
ICAgICBDU1NTZWxlY3RvciogbV9zZWxlY3RvcjsKIH07CkluZGV4OiBjc3MvQ1NTU3R5bGVTZWxl
Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCShyZXZpc2lv
biAzMDExOCkKKysrIGNzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjQ2LDEyICsyNDYsMTIgQEAgc3RhdGljIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImIHByaW50
RQogICAgIHJldHVybiBzdGF0aWNQcmludEV2YWw7CiB9CiAKLUNTU1N0eWxlU2VsZWN0b3I6OkNT
U1N0eWxlU2VsZWN0b3IoRG9jdW1lbnQqIGRvYywgY29uc3QgU3RyaW5nJiB1c2VyU3R5bGVTaGVl
dCwgU3R5bGVTaGVldExpc3QgKnN0eWxlU2hlZXRzLCBDU1NTdHlsZVNoZWV0KiBtYXBwZWRFbGVt
ZW50U2hlZXQsIGJvb2wgX3N0cmljdFBhcnNpbmcsIGJvb2wgbWF0Y2hBdXRob3JBbmRVc2VyU3R5
bGVzKQorQ1NTU3R5bGVTZWxlY3Rvcjo6Q1NTU3R5bGVTZWxlY3RvcihEb2N1bWVudCogZG9jLCBj
b25zdCBTdHJpbmcmIHVzZXJTdHlsZVNoZWV0LCBTdHlsZVNoZWV0TGlzdCogc3R5bGVTaGVldHMs
IENTU1N0eWxlU2hlZXQqIG1hcHBlZEVsZW1lbnRTaGVldCwgYm9vbCBfc3RyaWN0UGFyc2luZywg
Ym9vbCBtYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMpCiB7CiAgICAgaW5pdCgpOwogICAgIAogICAg
IG1fZG9jdW1lbnQgPSBkb2M7Ci0gICAgbV9mb250U2VsZWN0b3IgPSBuZXcgQ1NTRm9udFNlbGVj
dG9yKGRvYyk7CisgICAgbV9mb250U2VsZWN0b3IgPSBDU1NGb250U2VsZWN0b3I6OmNyZWF0ZShk
b2MpOwogCiAgICAgbV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMgPSBtYXRjaEF1dGhvckFuZFVz
ZXJTdHlsZXM7CiAKQEAgLTI5OSwxMCArMjk5LDEyIEBAIENTU1N0eWxlU2VsZWN0b3I6OkNTU1N0
eWxlU2VsZWN0b3IoRG9jdW0KICAgICBpZiAobWFwcGVkRWxlbWVudFNoZWV0KQogICAgICAgICBt
X2F1dGhvclN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChtYXBwZWRFbGVtZW50U2hlZXQsICptX21l
ZGl1bSwgdGhpcyk7CiAKLSAgICBEZXByZWNhdGVkUHRyTGlzdEl0ZXJhdG9yPFN0eWxlU2hlZXQ+
IGl0KHN0eWxlU2hlZXRzLT5zdHlsZVNoZWV0cyk7Ci0gICAgZm9yICg7IGl0LmN1cnJlbnQoKTsg
KytpdCkKLSAgICAgICAgaWYgKGl0LmN1cnJlbnQoKS0+aXNDU1NTdHlsZVNoZWV0KCkgJiYgIWl0
LmN1cnJlbnQoKS0+ZGlzYWJsZWQoKSkKLSAgICAgICAgICAgIG1fYXV0aG9yU3R5bGUtPmFkZFJ1
bGVzRnJvbVNoZWV0KHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXQqPihpdC5jdXJyZW50KCkpLCAq
bV9tZWRpdW0sIHRoaXMpOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0eWxlU2hlZXRzLT5sZW5n
dGgoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAg
ICAgU3R5bGVTaGVldCogc2hlZXQgPSBzdHlsZVNoZWV0cy0+aXRlbShpKTsKKyAgICAgICAgaWYg
KHNoZWV0LT5pc0NTU1N0eWxlU2hlZXQoKSAmJiAhc2hlZXQtPmRpc2FibGVkKCkpCisgICAgICAg
ICAgICBtX2F1dGhvclN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChzdGF0aWNfY2FzdDxDU1NTdHls
ZVNoZWV0Kj4oc2hlZXQpLCAqbV9tZWRpdW0sIHRoaXMpOworICAgIH0KIH0KIAogdm9pZCBDU1NT
dHlsZVNlbGVjdG9yOjppbml0KCkKQEAgLTMzOSw2ICszNDEsOCBAQCBDU1NTdHlsZVNlbGVjdG9y
Ojp+Q1NTU3R5bGVTZWxlY3RvcigpCiAKICAgICBkZWxldGUgbV9hdXRob3JTdHlsZTsKICAgICBk
ZWxldGUgbV91c2VyU3R5bGU7CisKKyAgICBtX2ZvbnRTZWxlY3Rvci0+Y2xvc2UoKTsKIH0KIAog
c3RhdGljIENTU1N0eWxlU2hlZXQqIHBhcnNlVUFTaGVldChjb25zdCBjaGFyKiBjaGFyYWN0ZXJz
LCB1bnNpZ25lZCBzaXplKQpJbmRleDogY3NzL0NTU1N0eWxlU2hlZXQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIGNzcy9DU1NTdHlsZVNoZWV0LmNwcAkocmV2aXNpb24gMzAxMTgpCisrKyBjc3MvQ1NTU3R5
bGVTaGVldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3Niw3ICsxNzYsNyBAQCB2b2lkIENTU1N0
eWxlU2hlZXQ6OmNoZWNrTG9hZGVkKCkKICAgICAgICAgcmV0dXJuOwogICAgIGlmIChwYXJlbnQo
KSkKICAgICAgICAgcGFyZW50KCktPmNoZWNrTG9hZGVkKCk7Ci0gICAgbV9sb2FkQ29tcGxldGVk
ID0gbV9wYXJlbnROb2RlID8gbV9wYXJlbnROb2RlLT5zaGVldExvYWRlZCgpIDogdHJ1ZTsKKyAg
ICBtX2xvYWRDb21wbGV0ZWQgPSBvd25lck5vZGUoKSA/IG93bmVyTm9kZSgpLT5zaGVldExvYWRl
ZCgpIDogdHJ1ZTsKIH0KIAogRG9jTG9hZGVyICpDU1NTdHlsZVNoZWV0Ojpkb2NMb2FkZXIoKQpJ
bmRleDogY3NzL0NTU1Vua25vd25SdWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gY3NzL0NTU1Vua25vd25S
dWxlLmgJKHJldmlzaW9uIDMwMTE4KQorKysgY3NzL0NTU1Vua25vd25SdWxlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMwLDE0ICszMCwxNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENT
U1Vua25vd25SdWxlIDogcHVibGljIENTU1J1bGUgewogcHVibGljOgorICAgIHZpcnR1YWwgYm9v
bCBpc1Vua25vd25SdWxlKCkgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgdmlydHVhbCB1bnNpZ25l
ZCBzaG9ydCB0eXBlKCkgY29uc3QgeyByZXR1cm4gVU5LTk9XTl9SVUxFOyB9CisKK3ByaXZhdGU6
CiAgICAgQ1NTVW5rbm93blJ1bGUoU3R5bGVCYXNlKiBwYXJlbnQpCiAgICAgICAgIDogQ1NTUnVs
ZShwYXJlbnQpCiAgICAgewogICAgIH0KLQotICAgIHZpcnR1YWwgYm9vbCBpc1Vua25vd25SdWxl
KCkgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgdmlydHVhbCB1bnNpZ25lZCBzaG9ydCB0eXBlKCkg
Y29uc3QgeyByZXR1cm4gVU5LTk9XTl9SVUxFOyB9CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBjc3MvQ1NTVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBjc3MvQ1NTVmFsdWUuaAko
cmV2aXNpb24gMzAxMTgpCisrKyBjc3MvQ1NTVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMzcs
OCArMzcsNiBAQCBwdWJsaWM6CiAgICAgICAgIENTU19JTklUSUFMID0gNAogICAgIH07CiAKLSAg
ICBDU1NWYWx1ZSgpIDogU3R5bGVCYXNlKDApIHsgfQotCiAgICAgdmlydHVhbCB1bnNpZ25lZCBz
aG9ydCBjc3NWYWx1ZVR5cGUoKSBjb25zdCB7IHJldHVybiBDU1NfQ1VTVE9NOyB9CiAKICAgICB2
aXJ0dWFsIFN0cmluZyBjc3NUZXh0KCkgY29uc3QgPSAwOwpAQCAtNDgsNiArNDYsOSBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCBib29sIGlzRm9udFZhbHVlKCkgeyByZXR1cm4gZmFsc2U7IH0KICAg
ICB2aXJ0dWFsIGJvb2wgaXNJbXBsaWNpdEluaXRpYWxWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzVHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uVmFsdWUo
KSB7IHJldHVybiBmYWxzZTsgfQorCitwcm90ZWN0ZWQ6CisgICAgQ1NTVmFsdWUoKSA6IFN0eWxl
QmFzZSgwKSB7IH0KIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IGNzcy9NZWRp
YUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIGNzcy9NZWRpYUxpc3QuY3BwCShyZXZpc2lvbiAzMDEx
OCkKKysrIGNzcy9NZWRpYUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCwxNSArNTgsOSBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgKiB0aHJvdyBTWU5UQVhfRVJSIGV4Y2VwdGlvbi4KICAq
LwogCi1NZWRpYUxpc3Q6Ok1lZGlhTGlzdChDU1NTdHlsZVNoZWV0KiBwYXJlbnRTaGVldCwgYm9v
bCBmYWxsYmFja1RvRGVzY3JpcHRvcikKK2lubGluZSBNZWRpYUxpc3Q6Ok1lZGlhTGlzdChDU1NT
dHlsZVNoZWV0KiBwYXJlbnRTaGVldCwgY29uc3QgU3RyaW5nJiBtZWRpYSwgYm9vbCBzaG91bGRB
bGxvd0Rlc2NyaXB0b3IpCiAgICAgOiBTdHlsZUJhc2UocGFyZW50U2hlZXQpCi0gICAgLCBtX2Zh
bGxiYWNrKGZhbGxiYWNrVG9EZXNjcmlwdG9yKQotewotfQotCi1NZWRpYUxpc3Q6Ok1lZGlhTGlz
dChDU1NTdHlsZVNoZWV0KiBwYXJlbnRTaGVldCwgY29uc3QgU3RyaW5nJiBtZWRpYSwgYm9vbCBm
YWxsYmFja1RvRGVzY3JpcHRvcikKLSAgICA6IFN0eWxlQmFzZShwYXJlbnRTaGVldCkKLSAgICAs
IG1fZmFsbGJhY2soZmFsbGJhY2tUb0Rlc2NyaXB0b3IpCisgICAgLCBtX2ZhbGxiYWNrKHNob3Vs
ZEFsbG93RGVzY3JpcHRvcikKIHsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBzZXRN
ZWRpYVRleHQobWVkaWEsIGVjKTsKQEAgLTgyLDE1ICs3NiwzMiBAQCBNZWRpYUxpc3Q6Ok1lZGlh
TGlzdChDU1NTdHlsZVNoZWV0KiBwYXJlCiAgICAgICAgIHNldE1lZGlhVGV4dCgiaW52YWxpZCIs
IGVjKTsKIH0KIAotTWVkaWFMaXN0OjpNZWRpYUxpc3QoQ1NTUnVsZSogcGFyZW50UnVsZSwgY29u
c3QgU3RyaW5nJiBtZWRpYSwgYm9vbCBmYWxsYmFja1RvRGVzY3JpcHRvcikKK1Bhc3NSZWZQdHI8
TWVkaWFMaXN0PiBNZWRpYUxpc3Q6OmNyZWF0ZShDU1NTdHlsZVNoZWV0KiBwYXJlbnRTaGVldCwg
Y29uc3QgU3RyaW5nJiBtZWRpYSwgYm9vbCBzaG91bGRBbGxvd0Rlc2NyaXB0b3IpCit7CisgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBNZWRpYUxpc3QocGFyZW50U2hlZXQsIG1lZGlhLCBzaG91bGRB
bGxvd0Rlc2NyaXB0b3IpKTsKK30KKworaW5saW5lIE1lZGlhTGlzdDo6TWVkaWFMaXN0KENTU1J1
bGUqIHBhcmVudFJ1bGUpCiAgICAgOiBTdHlsZUJhc2UocGFyZW50UnVsZSkKLSAgICAsIG1fZmFs
bGJhY2soZmFsbGJhY2tUb0Rlc2NyaXB0b3IpCisgICAgLCBtX2ZhbGxiYWNrKGZhbHNlKQogewor
fQorCitQYXNzUmVmUHRyPE1lZGlhTGlzdD4gTWVkaWFMaXN0OjpjcmVhdGUoKQoreworICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgTWVkaWFMaXN0KDApKTsKK30KKworUGFzc1JlZlB0cjxNZWRpYUxp
c3Q+IE1lZGlhTGlzdDo6Y3JlYXRlKENTU1J1bGUqIHBhcmVudFJ1bGUsIGNvbnN0IFN0cmluZyYg
bWVkaWEpCit7CisgICAgUmVmUHRyPE1lZGlhTGlzdD4gbGlzdCA9IGFkb3B0UmVmKG5ldyBNZWRp
YUxpc3QocGFyZW50UnVsZSkpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIHNldE1l
ZGlhVGV4dChtZWRpYSwgZWMpOwotICAgIC8vRklYTUU6IHBhcnNpbmcgY2FuIGZhaWwuCi0gICAg
aWYgKGVjKQotICAgICAgICBzZXRNZWRpYVRleHQoImludmFsaWQiLCBlYyk7CisgICAgbGlzdC0+
c2V0TWVkaWFUZXh0KG1lZGlhLCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIC8vIEZJWE1F
OiBTaG91bGQgd2UgYmUgcmV0dXJuaW5nIDAgaW5zdGVhZD8KKyAgICAgICAgbGlzdC0+c2V0TWVk
aWFUZXh0KCJpbnZhbGlkIiwgZWMpOworICAgIH0KKyAgICByZXR1cm4gbGlzdC5yZWxlYXNlKCk7
CiB9CiAKIE1lZGlhTGlzdDo6fk1lZGlhTGlzdCgpCkBAIC0xMzEsMTUgKzE0MiwxNSBAQCBzdGF0
aWMgU3RyaW5nIHBhcnNlTWVkaWFEZXNjcmlwdG9yKGNvbnN0CiAKIHZvaWQgTWVkaWFMaXN0Ojpk
ZWxldGVNZWRpdW0oY29uc3QgU3RyaW5nJiBvbGRNZWRpdW0sIEV4Y2VwdGlvbkNvZGUmIGVjKQog
ewotICAgIE1lZGlhTGlzdCB0ZW1wTWVkaWFMaXN0OworICAgIFJlZlB0cjxNZWRpYUxpc3Q+IHRl
bXBNZWRpYUxpc3QgPSBNZWRpYUxpc3Q6OmNyZWF0ZSgpOwogICAgIENTU1BhcnNlciBwKHRydWUp
OwogCiAgICAgTWVkaWFRdWVyeSogb2xkUXVlcnkgPSAwOwogICAgIGJvb2wgZGVsZXRlT2xkUXVl
cnkgPSBmYWxzZTsKIAotICAgIGlmIChwLnBhcnNlTWVkaWFRdWVyeSgmdGVtcE1lZGlhTGlzdCwg
b2xkTWVkaXVtKSkgewotICAgICAgICBpZiAodGVtcE1lZGlhTGlzdC5tX3F1ZXJpZXMuc2l6ZSgp
ID4gMCkKLSAgICAgICAgICAgIG9sZFF1ZXJ5ID0gdGVtcE1lZGlhTGlzdC5tX3F1ZXJpZXNbMF07
CisgICAgaWYgKHAucGFyc2VNZWRpYVF1ZXJ5KHRlbXBNZWRpYUxpc3QuZ2V0KCksIG9sZE1lZGl1
bSkpIHsKKyAgICAgICAgaWYgKHRlbXBNZWRpYUxpc3QtPm1fcXVlcmllcy5zaXplKCkgPiAwKQor
ICAgICAgICAgICAgb2xkUXVlcnkgPSB0ZW1wTWVkaWFMaXN0LT5tX3F1ZXJpZXNbMF07CiAgICAg
fSBlbHNlIGlmIChtX2ZhbGxiYWNrKSB7CiAgICAgICAgIFN0cmluZyBtZWRpdW0gPSBwYXJzZU1l
ZGlhRGVzY3JpcHRvcihvbGRNZWRpdW0pOwogICAgICAgICBpZiAoIW1lZGl1bS5pc051bGwoKSkg
ewpAQCAtMTg0LDcgKzE5NSw3IEBAIFN0cmluZyBNZWRpYUxpc3Q6Om1lZGlhVGV4dCgpIGNvbnN0
CiAKIHZvaWQgTWVkaWFMaXN0OjpzZXRNZWRpYVRleHQoY29uc3QgU3RyaW5nJiB2YWx1ZSwgRXhj
ZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgTWVkaWFMaXN0IHRlbXBNZWRpYUxpc3Q7CisgICAgUmVm
UHRyPE1lZGlhTGlzdD4gdGVtcE1lZGlhTGlzdCA9IE1lZGlhTGlzdDo6Y3JlYXRlKCk7CiAgICAg
Q1NTUGFyc2VyIHAodHJ1ZSk7CiAKICAgICBWZWN0b3I8U3RyaW5nPiBsaXN0ID0gdmFsdWUuc3Bs
aXQoJywnKTsKQEAgLTE5MiwxMSArMjAzLDExIEBAIHZvaWQgTWVkaWFMaXN0OjpzZXRNZWRpYVRl
eHQoY29uc3QgU3RyaW4KICAgICBmb3IgKFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBp
dCA9IGxpc3QuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIFN0cmluZyBtZWRp
dW0gPSAoKml0KS5zdHJpcFdoaXRlU3BhY2UoKTsKICAgICAgICAgaWYgKCFtZWRpdW0uaXNFbXB0
eSgpKSB7Ci0gICAgICAgICAgICBpZiAoIXAucGFyc2VNZWRpYVF1ZXJ5KCZ0ZW1wTWVkaWFMaXN0
LCBtZWRpdW0pKSB7CisgICAgICAgICAgICBpZiAoIXAucGFyc2VNZWRpYVF1ZXJ5KHRlbXBNZWRp
YUxpc3QuZ2V0KCksIG1lZGl1bSkpIHsKICAgICAgICAgICAgICAgICBpZiAobV9mYWxsYmFjaykg
ewogICAgICAgICAgICAgICAgICAgICBTdHJpbmcgbWVkaWFEZXNjcmlwdG9yID0gcGFyc2VNZWRp
YURlc2NyaXB0b3IobWVkaXVtKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFtZWRpYURlc2Ny
aXB0b3IuaXNOdWxsKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wTWVkaWFMaXN0Lm1f
cXVlcmllcy5hcHBlbmQobmV3IE1lZGlhUXVlcnkoTWVkaWFRdWVyeTo6Tm9uZSwgbWVkaWFEZXNj
cmlwdG9yLCAwKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wTWVkaWFMaXN0LT5tX3F1
ZXJpZXMuYXBwZW5kKG5ldyBNZWRpYVF1ZXJ5KE1lZGlhUXVlcnk6Ok5vbmUsIG1lZGlhRGVzY3Jp
cHRvciwgMCkpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAg
IGVjID0gU1lOVEFYX0VSUjsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtMjE4LDgg
KzIyOSw4IEBAIHZvaWQgTWVkaWFMaXN0OjpzZXRNZWRpYVRleHQoY29uc3QgU3RyaW4KICAgICAK
ICAgICBlYyA9IDA7CiAgICAgZGVsZXRlQWxsVmFsdWVzKG1fcXVlcmllcyk7Ci0gICAgbV9xdWVy
aWVzID0gdGVtcE1lZGlhTGlzdC5tX3F1ZXJpZXM7Ci0gICAgdGVtcE1lZGlhTGlzdC5tX3F1ZXJp
ZXMuY2xlYXIoKTsKKyAgICBtX3F1ZXJpZXMuY2xlYXIoKTsKKyAgICBtX3F1ZXJpZXMuc3dhcCh0
ZW1wTWVkaWFMaXN0LT5tX3F1ZXJpZXMpOwogfQogCiBTdHJpbmcgTWVkaWFMaXN0OjppdGVtKHVu
c2lnbmVkIGluZGV4KSBjb25zdApJbmRleDogY3NzL01lZGlhTGlzdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IGNzcy9NZWRpYUxpc3QuaAkocmV2aXNpb24gMzAxMTgpCisrKyBjc3MvTWVkaWFMaXN0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNiArMSw0IEBACiAvKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgotICoKICAqIChDKSAxOTk5LTIwMDMgTGFy
cyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiBBcHBs
ZSBDb21wdXRlciwgSW5jLgogICoKQEAgLTI0LDI5ICsyMiwyOSBAQAogI2RlZmluZSBNZWRpYUxp
c3RfaAogCiAjaW5jbHVkZSAiU3R5bGVCYXNlLmgiCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4K
ICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgeworCiB0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOworCitjbGFz
cyBDU1NSdWxlOwogY2xhc3MgQ1NTU3R5bGVTaGVldDsKIGNsYXNzIE1lZGlhUXVlcnk7Ci1jbGFz
cyBDU1NSdWxlOwogCi1jbGFzcyBNZWRpYUxpc3QgOiBwdWJsaWMgU3R5bGVCYXNlCi17CitjbGFz
cyBNZWRpYUxpc3QgOiBwdWJsaWMgU3R5bGVCYXNlIHsKIHB1YmxpYzoKLSAgICBNZWRpYUxpc3Qo
Ym9vbCBmYWxsYmFja1RvRGVzY3JpcHRpb24gPSBmYWxzZSkgOiBTdHlsZUJhc2UoMCksIG1fZmFs
bGJhY2soZmFsbGJhY2tUb0Rlc2NyaXB0aW9uKSB7fQotICAgIE1lZGlhTGlzdChDU1NTdHlsZVNo
ZWV0KiBwYXJlbnRTaGVldCwgYm9vbCBmYWxsYmFja1RvRGVzY3JpcHRpb24gPSBmYWxzZSk7Ci0g
ICAgTWVkaWFMaXN0KENTU1N0eWxlU2hlZXQqIHBhcmVudFNoZWV0LCBjb25zdCBTdHJpbmcmIG1l
ZGlhLCBib29sIGZhbGxiYWNrVG9EZXNjcmlwdGlvbiA9IGZhbHNlKTsKLSAgICBNZWRpYUxpc3Qo
Q1NTUnVsZSogcGFyZW50UnVsZSwgY29uc3QgU3RyaW5nJiBtZWRpYSwgYm9vbCBmYWxsYmFja1Rv
RGVzY3JpcHRpb24gPSBmYWxzZSk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8TWVkaWFMaXN0PiBj
cmVhdGUoKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxNZWRpYUxpc3Q+IGNyZWF0ZShDU1NSdWxl
KiBwYXJlbnRSdWxlLCBjb25zdCBTdHJpbmcmIG1lZGlhKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxNZWRpYUxpc3Q+IGNyZWF0ZShDU1NTdHlsZVNoZWV0KiBwYXJlbnRTaGVldCwgY29uc3QgU3Ry
aW5nJiBtZWRpYSwgYm9vbCBzaG91bGRBbGxvd0Rlc2NyaXB0b3IpOwogICAgIH5NZWRpYUxpc3Qo
KTsKIAogICAgIHZpcnR1YWwgYm9vbCBpc01lZGlhTGlzdCgpIHsgcmV0dXJuIHRydWU7IH0KIAog
ICAgIENTU1N0eWxlU2hlZXQqIHBhcmVudFN0eWxlU2hlZXQoKSBjb25zdDsKICAgICBDU1NSdWxl
KiBwYXJlbnRSdWxlKCkgY29uc3Q7Ci0gICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1
cm4gKHVuc2lnbmVkKSBtX3F1ZXJpZXMuc2l6ZSgpOyB9CisgICAgdW5zaWduZWQgbGVuZ3RoKCkg
Y29uc3QgeyByZXR1cm4gbV9xdWVyaWVzLnNpemUoKTsgfQogICAgIFN0cmluZyBpdGVtKHVuc2ln
bmVkIGluZGV4KSBjb25zdDsKICAgICB2b2lkIGRlbGV0ZU1lZGl1bShjb25zdCBTdHJpbmcmIG9s
ZE1lZGl1bSwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZvaWQgYXBwZW5kTWVkaXVtKGNvbnN0IFN0
cmluZyYgbmV3TWVkaXVtLCBFeGNlcHRpb25Db2RlJik7CkBAIC01Nyw3ICs1NSwxMCBAQCBwdWJs
aWM6CiAgICAgdm9pZCBhcHBlbmRNZWRpYVF1ZXJ5KE1lZGlhUXVlcnkqIG1lZGlhUXVlcnkpOwog
ICAgIGNvbnN0IFZlY3RvcjxNZWRpYVF1ZXJ5Kj4qIG1lZGlhUXVlcmllcygpIGNvbnN0IHsgcmV0
dXJuICZtX3F1ZXJpZXM7IH0KIAotcHJvdGVjdGVkOgorcHJpdmF0ZToKKyAgICBNZWRpYUxpc3Qo
Q1NTUnVsZSogcGFyZW50UnVsZSk7CisgICAgTWVkaWFMaXN0KENTU1N0eWxlU2hlZXQqIHBhcmVu
dFNoZWV0LCBjb25zdCBTdHJpbmcmIG1lZGlhLCBib29sIHNob3VsZEFsbG93RGVzY3JpcHRvcik7
CisKICAgICBWZWN0b3I8TWVkaWFRdWVyeSo+IG1fcXVlcmllczsKICAgICBib29sIG1fZmFsbGJh
Y2s7IC8vIHRydWUgaWYgZmFpbGVkIG1lZGlhIHF1ZXJ5IHBhcnNpbmcgc2hvdWxkIGZhbGxiYWNr
IHRvIG1lZGlhIGRlc2NyaXB0aW9uIHBhcnNpbmcKIH07CkluZGV4OiBjc3MvU3R5bGVCYXNlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gY3NzL1N0eWxlQmFzZS5oCShyZXZpc2lvbiAzMDExOCkKKysrIGNzcy9T
dHlsZUJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiBUaGlzIGZp
bGUgaXMgcGFydCBvZiB0aGUgQ1NTIGltcGxlbWVudGF0aW9uIGZvciBLREUuCi0gKgogICogQ29w
eXJpZ2h0IChDKSAxOTk5LTIwMDMgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqIENvcHly
aWdodCAoQykgMTk5OSBXYWxkbyBCYXN0aWFuIChiYXN0aWFuQGtkZS5vcmcpCiAgKiBDb3B5cmln
aHQgKEMpIDIwMDYgU2FtdWVsIFdlaW5pZyAoc2FtLndlaW5pZ0BnbWlhbC5jb20pCkBAIC0zNSwx
MCArMzMsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgLy8gYSBzdHlsZSBjbGFzcyB3aGlj
aCBoYXMgYSBwYXJlbnQgKGFsbW9zdCBhbGwgaGF2ZSkKICAgICBjbGFzcyBTdHlsZUJhc2UgOiBw
dWJsaWMgUmVmQ291bnRlZDxTdHlsZUJhc2U+IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIFN0eWxl
QmFzZShTdHlsZUJhc2UqIHBhcmVudCkKLSAgICAgICAgICAgIDogbV9wYXJlbnQocGFyZW50KQot
ICAgICAgICAgICAgLCBtX3N0cmljdFBhcnNpbmcoIXBhcmVudCB8fCBwYXJlbnQtPnVzZVN0cmlj
dFBhcnNpbmcoKSkKLSAgICAgICAgeyB9CiAgICAgICAgIHZpcnR1YWwgflN0eWxlQmFzZSgpIHsg
fQogCiAgICAgICAgIFN0eWxlQmFzZSogcGFyZW50KCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnQ7
IH0KQEAgLTgxLDYgKzc1LDEzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBTdHls
ZVNoZWV0KiBzdHlsZXNoZWV0KCk7CiAKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIFN0eWxlQmFz
ZShTdHlsZUJhc2UqIHBhcmVudCkKKyAgICAgICAgICAgIDogbV9wYXJlbnQocGFyZW50KQorICAg
ICAgICAgICAgLCBtX3N0cmljdFBhcnNpbmcoIXBhcmVudCB8fCBwYXJlbnQtPnVzZVN0cmljdFBh
cnNpbmcoKSkKKyAgICAgICAgeworICAgICAgICB9CisKICAgICBwcml2YXRlOgogICAgICAgICBT
dHlsZUJhc2UqIG1fcGFyZW50OwogICAgICAgICBib29sIG1fc3RyaWN0UGFyc2luZzsKSW5kZXg6
IGNzcy9TdHlsZUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGNzcy9TdHlsZUxpc3QuY3BwCShyZXZp
c2lvbiAzMDExOCkKKysrIGNzcy9TdHlsZUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYg
KzEsNCBAQAogLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00gaW1wbGVtZW50YXRp
b24gZm9yIEtERS4KLSAqCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMyBMYXJzIEtub2xsIChr
bm9sbEBrZGUub3JnKQogICogICAgICAgICAgICAgICAxOTk5IFdhbGRvIEJhc3RpYW4gKGJhc3Rp
YW5Aa2RlLm9yZykKICAqICAgICAgICAgICAgICAgMjAwMSBBbmRyZWFzIFNjaGxhcGJhY2ggKHNj
aGxwYmNoQGlhbS51bmliZS5jaCkKQEAgLTIyLDI2ICsyMCwyNyBAQAogICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
ICAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgogICovCisKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJTdHlsZUxpc3QuaCIKIAorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+
CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdm9pZCBTdHlsZUxpc3Q6OmFwcGVuZChQYXNzUmVm
UHRyPFN0eWxlQmFzZT4gY2hpbGQpCiB7Ci0gICAgU3R5bGVCYXNlKiBjID0gY2hpbGQuZ2V0KCk7
Ci0gICAgbV9jaGlsZHJlbi5hcHBlbmQoY2hpbGQpOwotICAgIGMtPmluc2VydGVkSW50b1BhcmVu
dCgpOworICAgIG1fY2hpbGRyZW4uYXBwZW5kKGNoaWxkLmdldCgpKTsKKyAgICBjaGlsZC0+aW5z
ZXJ0ZWRJbnRvUGFyZW50KCk7CiB9CiAKIHZvaWQgU3R5bGVMaXN0OjppbnNlcnQodW5zaWduZWQg
cG9zaXRpb24sIFBhc3NSZWZQdHI8U3R5bGVCYXNlPiBjaGlsZCkKIHsKLSAgICBTdHlsZUJhc2Uq
IGMgPSBjaGlsZC5nZXQoKTsKICAgICBpZiAocG9zaXRpb24gPj0gbGVuZ3RoKCkpCi0gICAgICAg
IG1fY2hpbGRyZW4uYXBwZW5kKGNoaWxkKTsKKyAgICAgICAgbV9jaGlsZHJlbi5hcHBlbmQoY2hp
bGQuZ2V0KCkpOwogICAgIGVsc2UKLSAgICAgICAgbV9jaGlsZHJlbi5pbnNlcnQocG9zaXRpb24s
IGNoaWxkKTsKLSAgICBjLT5pbnNlcnRlZEludG9QYXJlbnQoKTsKKyAgICAgICAgbV9jaGlsZHJl
bi5pbnNlcnQocG9zaXRpb24sIGNoaWxkLmdldCgpKTsKKyAgICBjaGlsZC0+aW5zZXJ0ZWRJbnRv
UGFyZW50KCk7CiB9CiAKIHZvaWQgU3R5bGVMaXN0OjpyZW1vdmUodW5zaWduZWQgcG9zaXRpb24p
CkluZGV4OiBjc3MvU3R5bGVMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gY3NzL1N0eWxlTGlzdC5oCShy
ZXZpc2lvbiAzMDExOCkKKysrIGNzcy9TdHlsZUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2
ICsxLDQgQEAKIC8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgQ1NTIGltcGxlbWVudGF0
aW9uIGZvciBLREUuCi0gKgogICogQ29weXJpZ2h0IChDKSAxOTk5LTIwMDMgTGFycyBLbm9sbCAo
a25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAgICAgMTk5OSBXYWxkbyBCYXN0aWFuIChiYXN0
aWFuQGtkZS5vcmcpCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYgQXBwbGUgQ29tcHV0ZXIs
IEluYy4KQEAgLTI1LDcgKzIzLDcgQEAKICNkZWZpbmUgU3R5bGVMaXN0X2gKIAogI2luY2x1ZGUg
IlN0eWxlQmFzZS5oIgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKQEAgLTMzLDggKzMxLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIC8vIGEgc3R5bGUg
Y2xhc3Mgd2hpY2ggaGFzIGEgbGlzdCBvZiBjaGlsZHJlbiAoU3R5bGVTaGVldHMgZm9yIGV4YW1w
bGUpCiAgICAgY2xhc3MgU3R5bGVMaXN0IDogcHVibGljIFN0eWxlQmFzZSB7CiAgICAgcHVibGlj
OgotICAgICAgICBTdHlsZUxpc3QoU3R5bGVCYXNlKiBwYXJlbnQpIDogU3R5bGVCYXNlKHBhcmVu
dCkgeyB9Ci0KICAgICAgICAgdW5zaWduZWQgbGVuZ3RoKCkgeyByZXR1cm4gbV9jaGlsZHJlbi5z
aXplKCk7IH0KICAgICAgICAgU3R5bGVCYXNlKiBpdGVtKHVuc2lnbmVkIG51bSkgeyByZXR1cm4g
bnVtIDwgbGVuZ3RoKCkgPyBtX2NoaWxkcmVuW251bV0uZ2V0KCkgOiAwOyB9CiAKQEAgLTQzLDYg
KzM5LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHJlbW92ZSh1bnNpZ25l
ZCBwb3NpdGlvbik7CiAKICAgICBwcm90ZWN0ZWQ6CisgICAgICAgIFN0eWxlTGlzdChTdHlsZUJh
c2UqIHBhcmVudCkgOiBTdHlsZUJhc2UocGFyZW50KSB7IH0KKwogICAgICAgICBWZWN0b3I8UmVm
UHRyPFN0eWxlQmFzZT4gPiBtX2NoaWxkcmVuOwogICAgIH07CiB9CkluZGV4OiBjc3MvU3R5bGVT
aGVldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gY3NzL1N0eWxlU2hlZXQuY3BwCShyZXZpc2lvbiAzMDEx
OCkKKysrIGNzcy9TdHlsZVNoZWV0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIsNyArNjIsNyBA
QCBTdHlsZVNoZWV0KiBTdHlsZVNoZWV0OjpwYXJlbnRTdHlsZVNoZWV0CiAgICAgcmV0dXJuIChw
YXJlbnQoKSAmJiBwYXJlbnQoKS0+aXNTdHlsZVNoZWV0KCkpID8gc3RhdGljX2Nhc3Q8U3R5bGVT
aGVldCo+KHBhcmVudCgpKSA6IDA7CiB9CiAKLXZvaWQgU3R5bGVTaGVldDo6c2V0TWVkaWEoTWVk
aWFMaXN0KiBtZWRpYSkKK3ZvaWQgU3R5bGVTaGVldDo6c2V0TWVkaWEoUGFzc1JlZlB0cjxNZWRp
YUxpc3Q+IG1lZGlhKQogewogICAgIGlmIChtX21lZGlhKQogICAgICAgICBtX21lZGlhLT5zZXRQ
YXJlbnQoMCk7CkluZGV4OiBjc3MvU3R5bGVTaGVldC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGNzcy9TdHls
ZVNoZWV0LmgJKHJldmlzaW9uIDMwMTE4KQorKysgY3NzL1N0eWxlU2hlZXQuaAkod29ya2luZyBj
b3B5KQpAQCAtMzQsOSArMzQsNiBAQCBjbGFzcyBNZWRpYUxpc3Q7CiAKIGNsYXNzIFN0eWxlU2hl
ZXQgOiBwdWJsaWMgU3R5bGVMaXN0IHsKIHB1YmxpYzoKLSAgICBTdHlsZVNoZWV0KE5vZGUqIG93
bmVyTm9kZSwgY29uc3QgU3RyaW5nJiBocmVmID0gU3RyaW5nKCkpOwotICAgIFN0eWxlU2hlZXQo
U3R5bGVTaGVldCogcGFyZW50U2hlZXQsIGNvbnN0IFN0cmluZyYgaHJlZiA9IFN0cmluZygpKTsK
LSAgICBTdHlsZVNoZWV0KFN0eWxlQmFzZSogb3duZXIsIGNvbnN0IFN0cmluZyYgaHJlZiA9IFN0
cmluZygpKTsKICAgICB2aXJ0dWFsIH5TdHlsZVNoZWV0KCk7CiAKICAgICB2aXJ0dWFsIGJvb2wg
aXNTdHlsZVNoZWV0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQpAQCAtNTMsMTMgKzUwLDE4IEBA
IHB1YmxpYzoKICAgICBTdHJpbmcgdGl0bGUoKSBjb25zdCB7IHJldHVybiBtX3N0clRpdGxlOyB9
CiAgICAgdm9pZCBzZXRUaXRsZShjb25zdCBTdHJpbmcmIHMpIHsgbV9zdHJUaXRsZSA9IHM7IH0K
ICAgICBNZWRpYUxpc3QqIG1lZGlhKCkgY29uc3QgeyByZXR1cm4gbV9tZWRpYS5nZXQoKTsgfQot
ICAgIHZvaWQgc2V0TWVkaWEoTWVkaWFMaXN0Kik7CisgICAgdm9pZCBzZXRNZWRpYShQYXNzUmVm
UHRyPE1lZGlhTGlzdD4pOwogCiAgICAgdmlydHVhbCBib29sIGlzTG9hZGluZygpIHsgcmV0dXJu
IGZhbHNlOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgc3R5bGVTaGVldENoYW5nZWQoKSB7IH0KICAg
ICAKIHByb3RlY3RlZDoKKyAgICBTdHlsZVNoZWV0KE5vZGUqIG93bmVyTm9kZSwgY29uc3QgU3Ry
aW5nJiBocmVmID0gU3RyaW5nKCkpOworICAgIFN0eWxlU2hlZXQoU3R5bGVTaGVldCogcGFyZW50
U2hlZXQsIGNvbnN0IFN0cmluZyYgaHJlZiA9IFN0cmluZygpKTsKKyAgICBTdHlsZVNoZWV0KFN0
eWxlQmFzZSogb3duZXIsIGNvbnN0IFN0cmluZyYgaHJlZiA9IFN0cmluZygpKTsKKworcHJpdmF0
ZToKICAgICBOb2RlKiBtX3BhcmVudE5vZGU7CiAgICAgU3RyaW5nIG1fc3RySHJlZjsKICAgICBT
dHJpbmcgbV9zdHJUaXRsZTsKSW5kZXg6IGRvbS9DU1NNYXBwZWRBdHRyaWJ1dGVEZWNsYXJhdGlv
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIGRvbS9DU1NNYXBwZWRBdHRyaWJ1dGVEZWNsYXJhdGlvbi5oCShy
ZXZpc2lvbiAzMDExOCkKKysrIGRvbS9DU1NNYXBwZWRBdHRyaWJ1dGVEZWNsYXJhdGlvbi5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9m
IHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9yIEtERS4KLSAqCiAgKiBDb3B5cmlnaHQgKEMpIDE5
OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0
aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwMSBQZXRl
ciBLZWxseSAocG1rQHBvc3QuY29tKQpAQCAtMzUsMTEgKzMzLDExIEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogY2xhc3MgQ1NTTWFwcGVkQXR0cmlidXRlRGVjbGFyYXRpb24gOiBwdWJsaWMgQ1NT
TXV0YWJsZVN0eWxlRGVjbGFyYXRpb24gewogcHVibGljOgotICAgIENTU01hcHBlZEF0dHJpYnV0
ZURlY2xhcmF0aW9uKENTU1J1bGUqIHBhcmVudFJ1bGUpCi0gICAgICAgIDogQ1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb24ocGFyZW50UnVsZSkKLSAgICAgICAgLCBtX2VudHJ5VHlwZShlTm9uZSkK
LSAgICAgICAgLCBtX2F0dHJOYW1lKGFueVFOYW1lKCkpIHsgfQotICAgIAorICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPENTU01hcHBlZEF0dHJpYnV0ZURlY2xhcmF0aW9uPiBjcmVhdGUoQ1NTUnVsZSog
cGFyZW50UnVsZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ1NTTWFwcGVk
QXR0cmlidXRlRGVjbGFyYXRpb24ocGFyZW50UnVsZSkpOworICAgIH0KKwogICAgIHZpcnR1YWwg
fkNTU01hcHBlZEF0dHJpYnV0ZURlY2xhcmF0aW9uKCk7CiAKICAgICB2b2lkIHNldE1hcHBlZFN0
YXRlKE1hcHBlZEF0dHJpYnV0ZUVudHJ5IHR5cGUsIGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUs
IGNvbnN0IEF0b21pY1N0cmluZyYgdmFsKQpAQCAtNTAsNiArNDgsMTMgQEAgcHVibGljOgogICAg
IH0KIAogcHJpdmF0ZToKKyAgICBDU1NNYXBwZWRBdHRyaWJ1dGVEZWNsYXJhdGlvbihDU1NSdWxl
KiBwYXJlbnRSdWxlKQorICAgICAgICA6IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKHBhcmVu
dFJ1bGUpCisgICAgICAgICwgbV9lbnRyeVR5cGUoZU5vbmUpCisgICAgICAgICwgbV9hdHRyTmFt
ZShhbnlRTmFtZSgpKQorICAgIHsKKyAgICB9CisgICAgCiAgICAgTWFwcGVkQXR0cmlidXRlRW50
cnkgbV9lbnRyeVR5cGU7CiAgICAgUXVhbGlmaWVkTmFtZSBtX2F0dHJOYW1lOwogICAgIEF0b21p
Y1N0cmluZyBtX2F0dHJWYWx1ZTsKSW5kZXg6IGRvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gMzAxMTgpCisrKyBkb20vRG9jdW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01NzAsNyArNTc1LDcgQEAgUGFzc1JlZlB0cjxFZGl0aW5nVGV4
dD4gRG9jdW1lbnQ6OmNyZWF0ZQogCiBQYXNzUmVmUHRyPENTU1N0eWxlRGVjbGFyYXRpb24+IERv
Y3VtZW50OjpjcmVhdGVDU1NTdHlsZURlY2xhcmF0aW9uKCkKIHsKLSAgICByZXR1cm4gbmV3IENT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uOworICAgIHJldHVybiBDU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbjo6Y3JlYXRlKCk7CiB9CiAKIFBhc3NSZWZQdHI8Tm9kZT4gRG9jdW1lbnQ6OmltcG9y
dE5vZGUoTm9kZSogaW1wb3J0ZWROb2RlLCBib29sIGRlZXAsIEV4Y2VwdGlvbkNvZGUmIGVjKQpJ
bmRleDogZG9tL01hcHBlZEF0dHJpYnV0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRvbS9NYXBwZWRBdHRy
aWJ1dGUuaAkocmV2aXNpb24gMzAxMTgpCisrKyBkb20vTWFwcGVkQXR0cmlidXRlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTM4LDggKzM4LDcgQEAgY2xhc3MgQ1NTU3R5bGVTZWxlY3RvcjsKIGNsYXNz
IEVsZW1lbnQ7CiBjbGFzcyBOYW1lZEF0dHJNYXA7CiAKLWNsYXNzIE1hcHBlZEF0dHJpYnV0ZSA6
IHB1YmxpYyBBdHRyaWJ1dGUKLXsKK2NsYXNzIE1hcHBlZEF0dHJpYnV0ZSA6IHB1YmxpYyBBdHRy
aWJ1dGUgewogcHVibGljOgogICAgIE1hcHBlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1l
JiBuYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlLCBDU1NNYXBwZWRBdHRyaWJ1dGVEZWNs
YXJhdGlvbiogZGVjbCA9IDApCiAgICAgOiBBdHRyaWJ1dGUobmFtZSwgdmFsdWUpLCBtX3N0eWxl
RGVjbChkZWNsKQpAQCAtNTYsNyArNTUsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBDU1NTdHls
ZURlY2xhcmF0aW9uKiBzdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGVEZWNsLmdldCgpOyB9
CiAKICAgICBDU1NNYXBwZWRBdHRyaWJ1dGVEZWNsYXJhdGlvbiogZGVjbCgpIGNvbnN0IHsgcmV0
dXJuIG1fc3R5bGVEZWNsLmdldCgpOyB9Ci0gICAgdm9pZCBzZXREZWNsKENTU01hcHBlZEF0dHJp
YnV0ZURlY2xhcmF0aW9uKiBkZWNsKSB7IG1fc3R5bGVEZWNsID0gZGVjbDsgfQorICAgIHZvaWQg
c2V0RGVjbChQYXNzUmVmUHRyPENTU01hcHBlZEF0dHJpYnV0ZURlY2xhcmF0aW9uPiBkZWNsKSB7
IG1fc3R5bGVEZWNsID0gZGVjbDsgfQogCiBwcml2YXRlOgogICAgIFJlZlB0cjxDU1NNYXBwZWRB
dHRyaWJ1dGVEZWNsYXJhdGlvbj4gbV9zdHlsZURlY2w7CkluZGV4OiBkb20vUG9zaXRpb24uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIGRvbS9Qb3NpdGlvbi5jcHAJKHJldmlzaW9uIDMwMTE4KQorKysgZG9t
L1Bvc2l0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA3LDEwICsxMDcsMTAgQEAgRWxlbWVu
dCAqUG9zaXRpb246OmVsZW1lbnQoKSBjb25zdAogCiBQYXNzUmVmUHRyPENTU0NvbXB1dGVkU3R5
bGVEZWNsYXJhdGlvbj4gUG9zaXRpb246OmNvbXB1dGVkU3R5bGUoKSBjb25zdAogewotICAgIEVs
ZW1lbnQgKmVsZW0gPSBlbGVtZW50KCk7Ci0gICAgaWYgKCFlbGVtKQorICAgIEVsZW1lbnQqIGVs
ZW1lbnQgPSB0aGlzLT5lbGVtZW50KCk7CisgICAgaWYgKCFlbGVtZW50KQogICAgICAgICByZXR1
cm4gMDsKLSAgICByZXR1cm4gbmV3IENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbihlbGVtKTsK
KyAgICByZXR1cm4gQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpjcmVhdGUoZWxlbWVudCk7
CiB9CiAKIFBvc2l0aW9uIFBvc2l0aW9uOjpwcmV2aW91cyhFVXNpbmdDb21wb3NlZENoYXJhY3Rl
cnMgdXNpbmdDb21wb3NlZENoYXJhY3RlcnMpIGNvbnN0CkluZGV4OiBkb20vU3R5bGVFbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBkb20vU3R5bGVFbGVtZW50LmNwcAkocmV2aXNpb24gMzAxMTgp
CisrKyBkb20vU3R5bGVFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzYsNyArNzYsOCBA
QCB2b2lkIFN0eWxlRWxlbWVudDo6Y3JlYXRlU2hlZXQoRWxlbWVudCogCiAKICAgICBTdHJpbmcg
dHlwZVZhbHVlID0gZS0+aXNIVE1MRWxlbWVudCgpID8gdHlwZSgpLmRlcHJlY2F0ZWRTdHJpbmco
KS5sb3dlcigpIDogdHlwZSgpOwogICAgIGlmICh0eXBlVmFsdWUuaXNFbXB0eSgpIHx8IHR5cGVW
YWx1ZSA9PSAidGV4dC9jc3MiKSB7IC8vIFR5cGUgbXVzdCBiZSBlbXB0eSBvciBDU1MKLSAgICAg
ICAgUmVmUHRyPE1lZGlhTGlzdD4gbWVkaWFMaXN0ID0gbmV3IE1lZGlhTGlzdCgoQ1NTU3R5bGVT
aGVldCopMCwgbWVkaWEoKSwgZS0+aXNIVE1MRWxlbWVudCgpKTsKKyAgICAgICAgQ1NTU3R5bGVT
aGVldCogbm9TdHlsZVNoZWV0ID0gMDsKKyAgICAgICAgUmVmUHRyPE1lZGlhTGlzdD4gbWVkaWFM
aXN0ID0gTWVkaWFMaXN0OjpjcmVhdGUobm9TdHlsZVNoZWV0LCBtZWRpYSgpLCBlLT5pc0hUTUxF
bGVtZW50KCkpOwogICAgICAgICBNZWRpYVF1ZXJ5RXZhbHVhdG9yIHNjcmVlbkV2YWwoInNjcmVl
biIsIHRydWUpOwogICAgICAgICBNZWRpYVF1ZXJ5RXZhbHVhdG9yIHByaW50RXZhbCgicHJpbnQi
LCB0cnVlKTsKICAgICAgICAgaWYgKHNjcmVlbkV2YWwuZXZhbChtZWRpYUxpc3QuZ2V0KCkpIHx8
IHByaW50RXZhbC5ldmFsKG1lZGlhTGlzdC5nZXQoKSkpIHsKSW5kZXg6IGRvbS9TdHlsZWRFbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBkb20vU3R5bGVkRWxlbWVudC5jcHAJKHJldmlzaW9uIDMw
MTE4KQorKysgZG9tL1N0eWxlZEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjEsNyAr
MTIxLDcgQEAgQXR0cmlidXRlKiBTdHlsZWRFbGVtZW50OjpjcmVhdGVBdHRyaWJ1dAogCiB2b2lk
IFN0eWxlZEVsZW1lbnQ6OmNyZWF0ZUlubGluZVN0eWxlRGVjbCgpCiB7Ci0gICAgbV9pbmxpbmVT
dHlsZURlY2wgPSBuZXcgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb247CisgICAgbV9pbmxpbmVT
dHlsZURlY2wgPSBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y3JlYXRlKCk7CiAgICAgbV9p
bmxpbmVTdHlsZURlY2wtPnNldFBhcmVudChkb2N1bWVudCgpLT5lbGVtZW50U2hlZXQoKSk7CiAg
ICAgbV9pbmxpbmVTdHlsZURlY2wtPnNldE5vZGUodGhpcyk7CiAgICAgbV9pbmxpbmVTdHlsZURl
Y2wtPnNldFN0cmljdFBhcnNpbmcoaXNIVE1MRWxlbWVudCgpICYmICFkb2N1bWVudCgpLT5pbkNv
bXBhdE1vZGUoKSk7CkBAIC00MDEsNyArNDAxLDcgQEAgdm9pZCBTdHlsZWRFbGVtZW50OjphZGRD
U1NDb2xvcihNYXBwZWRBdAogCiB2b2lkIFN0eWxlZEVsZW1lbnQ6OmNyZWF0ZU1hcHBlZERlY2wo
TWFwcGVkQXR0cmlidXRlKiBhdHRyKQogewotICAgIENTU01hcHBlZEF0dHJpYnV0ZURlY2xhcmF0
aW9uKiBkZWNsID0gbmV3IENTU01hcHBlZEF0dHJpYnV0ZURlY2xhcmF0aW9uKDApOworICAgIFJl
ZlB0cjxDU1NNYXBwZWRBdHRyaWJ1dGVEZWNsYXJhdGlvbj4gZGVjbCA9IENTU01hcHBlZEF0dHJp
YnV0ZURlY2xhcmF0aW9uOjpjcmVhdGUoMCk7CiAgICAgYXR0ci0+c2V0RGVjbChkZWNsKTsKICAg
ICBkZWNsLT5zZXRQYXJlbnQoZG9jdW1lbnQoKS0+ZWxlbWVudFNoZWV0KCkpOwogICAgIGRlY2wt
PnNldE5vZGUodGhpcyk7CkluZGV4OiBlZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBlZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAkocmV2aXNpb24gMzAxMTgp
CisrKyBlZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAs
NiArMzAsNyBAQAogI2luY2x1ZGUgIkNTU1BhcnNlci5oIgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5
LmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgorI2luY2x1ZGUgIkRlcHJlY2F0ZWRQ
dHJMaXN0LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRWxlbWVudC5o
IgogI2luY2x1ZGUgIkhUTUxJbnRlcmNoYW5nZS5oIgpAQCAtMjk1LDcgKzI5Niw3IEBAIEFwcGx5
U3R5bGVDb21tYW5kOjpBcHBseVN0eWxlQ29tbWFuZChEb2MKIAogQXBwbHlTdHlsZUNvbW1hbmQ6
OkFwcGx5U3R5bGVDb21tYW5kKEVsZW1lbnQqIGVsZW1lbnQsIGJvb2wgcmVtb3ZlT25seSwgRWRp
dEFjdGlvbiBlZGl0aW5nQWN0aW9uKQogICAgIDogQ29tcG9zaXRlRWRpdENvbW1hbmQoZWxlbWVu
dC0+ZG9jdW1lbnQoKSkKLSAgICAsIG1fc3R5bGUobmV3IENTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uKCkpCisgICAgLCBtX3N0eWxlKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjcmVhdGUo
KSkKICAgICAsIG1fZWRpdGluZ0FjdGlvbihlZGl0aW5nQWN0aW9uKQogICAgICwgbV9wcm9wZXJ0
eUxldmVsKFByb3BlcnR5RGVmYXVsdCkKICAgICAsIG1fc3RhcnQoZW5kaW5nU2VsZWN0aW9uKCku
c3RhcnQoKS5kb3duc3RyZWFtKCkpCkBAIC03OTksOSArODAwLDggQEAgc3RhdGljIGJvb2wgaGFz
VGV4dERlY29yYXRpb25Qcm9wZXJ0eShObwogICAgIGlmICghbm9kZS0+aXNFbGVtZW50Tm9kZSgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBFbGVtZW50ICplbGVtZW50ID0gc3RhdGlj
X2Nhc3Q8RWxlbWVudCAqPihub2RlKTsKLSAgICBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24g
c3R5bGUoZWxlbWVudCk7Ci0gICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IHN0eWxlLmdldFBy
b3BlcnR5Q1NTVmFsdWUoQ1NTX1BST1BfVEVYVF9ERUNPUkFUSU9OLCBEb05vdFVwZGF0ZUxheW91
dCk7CisgICAgUmVmUHRyPENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGUgPSBDU1ND
b21wdXRlZFN0eWxlRGVjbGFyYXRpb246OmNyZWF0ZShzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9k
ZSkpOworICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBzdHlsZS0+Z2V0UHJvcGVydHlDU1NW
YWx1ZShDU1NfUFJPUF9URVhUX0RFQ09SQVRJT04sIERvTm90VXBkYXRlTGF5b3V0KTsKICAgICBy
ZXR1cm4gdmFsdWUgJiYgIWVxdWFsSWdub3JpbmdDYXNlKHZhbHVlLT5jc3NUZXh0KCksICJub25l
Iik7CiB9CiAKQEAgLTg1MCw4ICs4NTAsNyBAQCBQYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uPiBBCiAgICAgaWYgKCFub2RlLT5pc0hUTUxFbGVtZW50KCkpCiAgICAgICAgIHJl
dHVybiAwOwogCi0gICAgSFRNTEVsZW1lbnQgKmVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRWxl
bWVudCAqPihub2RlKTsKLSAgICBSZWZQdHI8Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uPiBj
b21wdXRlZFN0eWxlID0gbmV3IENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbihlbGVtZW50KTsK
KyAgICBSZWZQdHI8Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uPiBjb21wdXRlZFN0eWxlID0g
Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpjcmVhdGUoc3RhdGljX2Nhc3Q8SFRNTEVsZW1l
bnQqPihub2RlKSk7CiAgICAgQVNTRVJUKGNvbXB1dGVkU3R5bGUpOwogCiAgICAgaW50IHByb3Bl
cnRpZXNbMV0gPSB7IENTU19QUk9QX1RFWFRfREVDT1JBVElPTiB9OwpJbmRleDogZWRpdGluZy9D
b21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZWRpdGluZy9Db21wb3NpdGVF
ZGl0Q29tbWFuZC5jcHAJKHJldmlzaW9uIDMwMTE4KQorKysgZWRpdGluZy9Db21wb3NpdGVFZGl0
Q29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0OSw4ICs4NDksOCBAQCBib29sIENvbXBv
c2l0ZUVkaXRDb21tYW5kOjpicmVha091dE9mRW1wCiAgICAgYXBwZW5kQmxvY2tQbGFjZWhvbGRl
cihuZXdCbG9jay5nZXQoKSk7CiAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFNlbGVjdGlvbihQb3Np
dGlvbihuZXdCbG9jay5nZXQoKSwgMCksIERPV05TVFJFQU0pKTsKICAgICAKLSAgICBDU1NDb21w
dXRlZFN0eWxlRGVjbGFyYXRpb24gZW5kaW5nU3R5bGUoZW5kaW5nU2VsZWN0aW9uKCkuc3RhcnQo
KS5ub2RlKCkpOwotICAgIGVuZGluZ1N0eWxlLmRpZmYoc3R5bGUuZ2V0KCkpOworICAgIFJlZlB0
cjxDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24+IGVuZGluZ1N0eWxlID0gQ1NTQ29tcHV0ZWRT
dHlsZURlY2xhcmF0aW9uOjpjcmVhdGUoZW5kaW5nU2VsZWN0aW9uKCkuc3RhcnQoKS5ub2RlKCkp
OworICAgIGVuZGluZ1N0eWxlLT5kaWZmKHN0eWxlLmdldCgpKTsKICAgICBpZiAoc3R5bGUtPmxl
bmd0aCgpID4gMCkKICAgICAgICAgYXBwbHlTdHlsZShzdHlsZS5nZXQoKSk7CiAgICAgCkluZGV4
OiBlZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGVkaXRp
bmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAJKHJldmlzaW9uIDMwMTE4KQorKysgZWRpdGlu
Zy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEzLDcgKzYx
Myw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6Y2FsY3VsYXRlVHkKICAgICAgICAg
bV90eXBpbmdTdHlsZSA9IG1fZGVsZXRlSW50b0Jsb2NrcXVvdGVTdHlsZTsKICAgICBtX2RlbGV0
ZUludG9CbG9ja3F1b3RlU3R5bGUgPSAwOwogICAgIAotICAgIFJlZlB0cjxDU1NDb21wdXRlZFN0
eWxlRGVjbGFyYXRpb24+IGVuZGluZ1N0eWxlID0gbmV3IENTU0NvbXB1dGVkU3R5bGVEZWNsYXJh
dGlvbihtX2VuZGluZ1Bvc2l0aW9uLm5vZGUoKSk7CisgICAgUmVmUHRyPENTU0NvbXB1dGVkU3R5
bGVEZWNsYXJhdGlvbj4gZW5kaW5nU3R5bGUgPSBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246
OmNyZWF0ZShtX2VuZGluZ1Bvc2l0aW9uLm5vZGUoKSk7CiAgICAgZW5kaW5nU3R5bGUtPmRpZmYo
bV90eXBpbmdTdHlsZS5nZXQoKSk7CiAgICAgaWYgKCFtX3R5cGluZ1N0eWxlLT5sZW5ndGgoKSkK
ICAgICAgICAgbV90eXBpbmdTdHlsZSA9IDA7CkluZGV4OiBlZGl0aW5nL0VkaXRvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gZWRpdGluZy9FZGl0b3IuY3BwCShyZXZpc2lvbiAzMDExOCkKKysrIGVkaXRp
bmcvRWRpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzE3LDcgKzcxNyw3IEBAIFRyaVN0YXRl
IEVkaXRvcjo6c2VsZWN0aW9uSGFzU3R5bGUoQ1NTU3QKICAgICAgICAgfQogICAgIH0gZWxzZSB7
CiAgICAgICAgIGZvciAoTm9kZSogbm9kZSA9IG1fZnJhbWUtPnNlbGVjdGlvbkNvbnRyb2xsZXIo
KS0+c3RhcnQoKS5ub2RlKCk7IG5vZGU7IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCkp
IHsKLSAgICAgICAgICAgIFJlZlB0cjxDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24+IGNvbXB1
dGVkU3R5bGUgPSBuZXcgQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uKG5vZGUpOworICAgICAg
ICAgICAgUmVmUHRyPENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbj4gY29tcHV0ZWRTdHlsZSA9
IENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6Y3JlYXRlKG5vZGUpOwogICAgICAgICAgICAg
aWYgKGNvbXB1dGVkU3R5bGUpCiAgICAgICAgICAgICAgICAgdXBkYXRlU3RhdGUobXV0YWJsZVN0
eWxlLmdldCgpLCBjb21wdXRlZFN0eWxlLmdldCgpLCBhdFN0YXJ0LCBzdGF0ZSk7CiAgICAgICAg
ICAgICBpZiAoc3RhdGUgPT0gTWl4ZWRUcmlTdGF0ZSkKQEAgLTExMDYsNyArMTEwNiw3IEBAIHZv
aWQgRWRpdG9yOjpzZXRCYXNlV3JpdGluZ0RpcmVjdGlvbihjb24KIHsKICAgICBFeGNlcHRpb25D
b2RlIGVjID0gMDsKIAotICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gc3R5
bGUgPSBuZXcgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb247CisgICAgUmVmUHRyPENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uPiBzdHlsZSA9IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpj
cmVhdGUoKTsKICAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTX1BST1BfRElSRUNUSU9OLCBkaXJl
Y3Rpb24sIGZhbHNlLCBlYyk7CiAgICAgYXBwbHlQYXJhZ3JhcGhTdHlsZVRvU2VsZWN0aW9uKHN0
eWxlLmdldCgpLCBFZGl0QWN0aW9uU2V0V3JpdGluZ0RpcmVjdGlvbik7CiB9CkluZGV4OiBlZGl0
aW5nL0VkaXRvckNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGVkaXRpbmcvRWRpdG9yQ29tbWFu
ZC5jcHAJKHJldmlzaW9uIDMwMTE4KQorKysgZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODIsNyArODIsNyBAQCBzdGF0aWMgRnJhbWUqIHRhcmdldEZyYW1lKEZy
YW1lKiBmcmFtZSwgCiAKIHN0YXRpYyBib29sIGV4ZWN1dGVBcHBseVN0eWxlKEZyYW1lKiBmcmFt
ZSwgRWRpdG9yQ29tbWFuZFNvdXJjZSBzb3VyY2UsIEVkaXRBY3Rpb24gYWN0aW9uLCBpbnQgcHJv
cGVydHlJRCwgY29uc3QgU3RyaW5nJiBwcm9wZXJ0eVZhbHVlKQogewotICAgIFJlZlB0cjxDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGUgPSBuZXcgQ1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb247CisgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBzdHlsZSA9IENT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjcmVhdGUoKTsKICAgICBzdHlsZS0+c2V0UHJvcGVy
dHkocHJvcGVydHlJRCwgcHJvcGVydHlWYWx1ZSk7CiAgICAgLy8gRklYTUU6IFdlIGRvbid0IGNh
bGwgc2hvdWxkQXBwbHlTdHlsZSB3aGVuIHRoZSBzb3VyY2UgaXMgRE9NOyBpcyB0aGVyZSBhIGdv
b2QgcmVhc29uIGZvciB0aGF0PwogICAgIHN3aXRjaCAoc291cmNlKSB7CkBAIC0xMDUsNyArMTA1
LDcgQEAgc3RhdGljIGJvb2wgZXhlY3V0ZUFwcGx5U3R5bGUoRnJhbWUqIGZyYQogCiBzdGF0aWMg
Ym9vbCBleGVjdXRlQXBwbHlTdHlsZShGcmFtZSogZnJhbWUsIEVkaXRvckNvbW1hbmRTb3VyY2Ug
c291cmNlLCBFZGl0QWN0aW9uIGFjdGlvbiwgaW50IHByb3BlcnR5SUQsIGludCBwcm9wZXJ0eVZh
bHVlKQogewotICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGUgPSBu
ZXcgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb247CisgICAgUmVmUHRyPENTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uPiBzdHlsZSA9IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjcmVhdGUo
KTsKICAgICBzdHlsZS0+c2V0UHJvcGVydHkocHJvcGVydHlJRCwgcHJvcGVydHlWYWx1ZSk7CiAg
ICAgLy8gRklYTUU6IFdlIGRvbid0IGNhbGwgc2hvdWxkQXBwbHlTdHlsZSB3aGVuIHRoZSBzb3Vy
Y2UgaXMgRE9NOyBpcyB0aGVyZSBhIGdvb2QgcmVhc29uIGZvciB0aGF0PwogICAgIHN3aXRjaCAo
c291cmNlKSB7CkBAIC0xMjMsNyArMTIzLDcgQEAgc3RhdGljIGJvb2wgZXhlY3V0ZUFwcGx5U3R5
bGUoRnJhbWUqIGZyYQogCiBzdGF0aWMgYm9vbCBleGVjdXRlVG9nZ2xlU3R5bGUoRnJhbWUqIGZy
YW1lLCBFZGl0b3JDb21tYW5kU291cmNlIHNvdXJjZSwgRWRpdEFjdGlvbiBhY3Rpb24sIGludCBw
cm9wZXJ0eUlELCBjb25zdCBjaGFyKiBvZmZWYWx1ZSwgY29uc3QgY2hhciogb25WYWx1ZSkKIHsK
LSAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IHN0eWxlID0gbmV3IENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uOworICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbj4gc3R5bGUgPSBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y3JlYXRlKCk7CiAgICAg
c3R5bGUtPnNldFByb3BlcnR5KHByb3BlcnR5SUQsIG9uVmFsdWUpOwogICAgIHN0eWxlLT5zZXRQ
cm9wZXJ0eShwcm9wZXJ0eUlELCBmcmFtZS0+ZWRpdG9yKCktPnNlbGVjdGlvblN0YXJ0SGFzU3R5
bGUoc3R5bGUuZ2V0KCkpID8gb2ZmVmFsdWUgOiBvblZhbHVlKTsKICAgICAvLyBGSVhNRTogV2Ug
ZG9uJ3QgY2FsbCBzaG91bGRBcHBseVN0eWxlIHdoZW4gdGhlIHNvdXJjZSBpcyBET007IGlzIHRo
ZXJlIGEgZ29vZCByZWFzb24gZm9yIHRoYXQ/CkBAIC0xNDIsNyArMTQyLDcgQEAgc3RhdGljIGJv
b2wgZXhlY3V0ZVRvZ2dsZVN0eWxlKEZyYW1lKiBmcgogCiBzdGF0aWMgYm9vbCBleGVjdXRlQXBw
bHlQYXJhZ3JhcGhTdHlsZShGcmFtZSogZnJhbWUsIEVkaXRvckNvbW1hbmRTb3VyY2Ugc291cmNl
LCBFZGl0QWN0aW9uIGFjdGlvbiwgaW50IHByb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgcHJvcGVy
dHlWYWx1ZSkKIHsKLSAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IHN0eWxl
ID0gbmV3IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOworICAgIFJlZlB0cjxDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbj4gc3R5bGUgPSBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y3Jl
YXRlKCk7CiAgICAgc3R5bGUtPnNldFByb3BlcnR5KHByb3BlcnR5SUQsIHByb3BlcnR5VmFsdWUp
OwogICAgIC8vIEZJWE1FOiBXZSBkb24ndCBjYWxsIHNob3VsZEFwcGx5U3R5bGUgd2hlbiB0aGUg
c291cmNlIGlzIERPTTsgaXMgdGhlcmUgYSBnb29kIHJlYXNvbiBmb3IgdGhhdD8KICAgICBzd2l0
Y2ggKHNvdXJjZSkgewpAQCAtMTk1LDcgKzE5NSw3IEBAIHN0YXRpYyBib29sIGV4cGFuZFNlbGVj
dGlvblRvR3JhbnVsYXJpdHkKIAogc3RhdGljIFRyaVN0YXRlIHN0YXRlU3R5bGUoRnJhbWUqIGZy
YW1lLCBpbnQgcHJvcGVydHlJRCwgY29uc3QgY2hhciogZGVzaXJlZFZhbHVlKQogewotICAgIFJl
ZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGUgPSBuZXcgQ1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb247CisgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBz
dHlsZSA9IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjcmVhdGUoKTsKICAgICBzdHlsZS0+
c2V0UHJvcGVydHkocHJvcGVydHlJRCwgZGVzaXJlZFZhbHVlKTsKICAgICByZXR1cm4gZnJhbWUt
PmVkaXRvcigpLT5zZWxlY3Rpb25IYXNTdHlsZShzdHlsZS5nZXQoKSk7CiB9CkluZGV4OiBlZGl0
aW5nL0luc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGVk
aXRpbmcvSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZC5jcHAJKHJldmlzaW9uIDMwMTE4
KQorKysgZWRpdGluZy9JbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzIsOCArNzIsOCBAQCB2b2lkIEluc2VydFBhcmFncmFwaFNlcGFyYXRvckNv
bW1hbmQ6OmFwCiAgICAgaWYgKCFtX3N0eWxlKQogICAgICAgICByZXR1cm47CiAKLSAgICBDU1ND
b21wdXRlZFN0eWxlRGVjbGFyYXRpb24gZW5kaW5nU3R5bGUoZW5kaW5nU2VsZWN0aW9uKCkuc3Rh
cnQoKS5ub2RlKCkpOwotICAgIGVuZGluZ1N0eWxlLmRpZmYobV9zdHlsZS5nZXQoKSk7CisgICAg
UmVmUHRyPENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbj4gZW5kaW5nU3R5bGUgPSBDU1NDb21w
dXRlZFN0eWxlRGVjbGFyYXRpb246OmNyZWF0ZShlbmRpbmdTZWxlY3Rpb24oKS5zdGFydCgpLm5v
ZGUoKSk7CisgICAgZW5kaW5nU3R5bGUtPmRpZmYobV9zdHlsZS5nZXQoKSk7CiAgICAgaWYgKG1f
c3R5bGUtPmxlbmd0aCgpID4gMCkKICAgICAgICAgYXBwbHlTdHlsZShtX3N0eWxlLmdldCgpKTsK
IH0KSW5kZXg6IGVkaXRpbmcvUmVtb3ZlRm9ybWF0Q29tbWFuZC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
ZWRpdGluZy9SZW1vdmVGb3JtYXRDb21tYW5kLmNwcAkocmV2aXNpb24gMzAxMTgpCisrKyBlZGl0
aW5nL1JlbW92ZUZvcm1hdENvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3
IEBAIHZvaWQgUmVtb3ZlRm9ybWF0Q29tbWFuZDo6ZG9BcHBseSgpCiAgICAgLy8gR2V0IHRoZSBk
ZWZhdWx0IHN0eWxlIGZvciB0aGlzIGVkaXRhYmxlIHJvb3QsIGl0J3MgdGhlIHN0eWxlIHRoYXQg
d2UnbGwgZ2l2ZSB0aGUKICAgICAvLyBjb250ZW50IHRoYXQgd2UncmUgb3BlcmF0aW5nIG9uLgog
ICAgIE5vZGUqIHJvb3QgPSBmcmFtZS0+c2VsZWN0aW9uQ29udHJvbGxlcigpLT5yb290RWRpdGFi
bGVFbGVtZW50KCk7Ci0gICAgUmVmUHRyPENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbj4gY29t
cHV0ZWRTdHlsZSA9IG5ldyBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24ocm9vdCk7CisgICAg
UmVmUHRyPENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbj4gY29tcHV0ZWRTdHlsZSA9IENTU0Nv
bXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6Y3JlYXRlKHJvb3QpOwogICAgIFJlZlB0cjxDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbj4gZGVmYXVsdFN0eWxlID0gY29tcHV0ZWRTdHlsZS0+Y29weUlu
aGVyaXRhYmxlUHJvcGVydGllcygpOwogICAgIAogICAgIC8vIERlbGV0ZSB0aGUgc2VsZWN0ZWQg
Y29udGVudC4KSW5kZXg6IGVkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIGVkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCShyZXZpc2lvbiAz
MDExOCkKKysrIGVkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xOTUsNyArMTk1LDcgQEAgUGFzc1JlZlB0cjxOb2RlPiBSZXBsYWNlbWVudEZyYWdt
ZW50OjppbgogICAgIHdoaWxlIChuICYmICFuLT5pc0VsZW1lbnROb2RlKCkpCiAgICAgICAgIG4g
PSBuLT5wYXJlbnROb2RlKCk7CiAgICAgaWYgKG4pIHsKLSAgICAgICAgUmVmUHRyPENTU0NvbXB1
dGVkU3R5bGVEZWNsYXJhdGlvbj4gY29uRm9udFN0eWxlID0gbmV3IENTU0NvbXB1dGVkU3R5bGVE
ZWNsYXJhdGlvbihzdGF0aWNfY2FzdDxFbGVtZW50Kj4obikpOworICAgICAgICBSZWZQdHI8Q1NT
Q29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uPiBjb25Gb250U3R5bGUgPSBDU1NDb21wdXRlZFN0eWxl
RGVjbGFyYXRpb246OmNyZWF0ZShzdGF0aWNfY2FzdDxFbGVtZW50Kj4obikpOwogICAgICAgICBD
U1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSA9IGhvbGRlci0+c3R5bGUoKTsKICAgICAgICAgc3R5
bGUtPnNldFByb3BlcnR5KENTU19QUk9QX1dISVRFX1NQQUNFLCBjb25Gb250U3R5bGUtPmdldFBy
b3BlcnR5VmFsdWUoQ1NTX1BST1BfV0hJVEVfU1BBQ0UpLCBmYWxzZSwgZWMpOwogICAgICAgICBB
U1NFUlQoZWMgPT0gMCk7CkluZGV4OiBlZGl0aW5nL21hcmt1cC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
ZWRpdGluZy9tYXJrdXAuY3BwCShyZXZpc2lvbiAzMDExOCkKKysrIGVkaXRpbmcvbWFya3VwLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjY2LDcgKzI2Niw3IEBAIHN0YXRpYyBTdHJpbmcgcmVuZGVy
ZWRUZXh0KGNvbnN0IE5vZGUqIG4KIAogc3RhdGljIFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb24+IHN0eWxlRnJvbU1hdGNoZWRSdWxlc0ZvckVsZW1lbnQoRWxlbWVudCogZWxl
bWVudCwgYm9vbCBhdXRob3JPbmx5ID0gdHJ1ZSkKIHsKLSAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb24+IHN0eWxlID0gbmV3IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKCk7
CisgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBzdHlsZSA9IENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uOjpjcmVhdGUoKTsKICAgICBSZWZQdHI8Q1NTUnVsZUxpc3Q+IG1h
dGNoZWRSdWxlcyA9IGVsZW1lbnQtPmRvY3VtZW50KCktPnN0eWxlU2VsZWN0b3IoKS0+c3R5bGVS
dWxlc0ZvckVsZW1lbnQoZWxlbWVudCwgYXV0aG9yT25seSk7CiAgICAgaWYgKG1hdGNoZWRSdWxl
cykgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbWF0Y2hlZFJ1bGVzLT5sZW5n
dGgoKTsgaSsrKSB7CkluZGV4OiBodG1sL0hUTUxCb2R5RWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gaHRtbC9IVE1MQm9keUVsZW1lbnQuY3BwCShyZXZpc2lvbiAzMDExOCkKKysrIGh0bWwvSFRN
TEJvZHlFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCBIVE1MQm9k
eUVsZW1lbnQ6On5IVE1MQm9keUVsZW1lbnQoKQogCiB2b2lkIEhUTUxCb2R5RWxlbWVudDo6Y3Jl
YXRlTGlua0RlY2woKQogewotICAgIG1fbGlua0RlY2wgPSBuZXcgQ1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb247CisgICAgbV9saW5rRGVjbCA9IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpj
cmVhdGUoKTsKICAgICBtX2xpbmtEZWNsLT5zZXRQYXJlbnQoZG9jdW1lbnQoKS0+ZWxlbWVudFNo
ZWV0KCkpOwogICAgIG1fbGlua0RlY2wtPnNldE5vZGUodGhpcyk7CiAgICAgbV9saW5rRGVjbC0+
c2V0U3RyaWN0UGFyc2luZyghZG9jdW1lbnQoKS0+aW5Db21wYXRNb2RlKCkpOwpJbmRleDogaHRt
bC9IVE1MTGlua0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGh0bWwvSFRNTExpbmtFbGVtZW50
LmNwcAkocmV2aXNpb24gMzAxMTgpCisrKyBodG1sL0hUTUxMaW5rRWxlbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE3Miw3ICsxNzIsOCBAQCB2b2lkIEhUTUxMaW5rRWxlbWVudDo6cHJvY2Vz
cygpCiAgICAgICAgIE1lZGlhUXVlcnlFdmFsdWF0b3IgYWxsRXZhbCh0cnVlKTsKICAgICAgICAg
TWVkaWFRdWVyeUV2YWx1YXRvciBzY3JlZW5FdmFsKCJzY3JlZW4iLCB0cnVlKTsKICAgICAgICAg
TWVkaWFRdWVyeUV2YWx1YXRvciBwcmludEV2YWwoInByaW50IiwgdHJ1ZSk7Ci0gICAgICAgIFJl
ZlB0cjxNZWRpYUxpc3Q+IG1lZGlhID0gbmV3IE1lZGlhTGlzdCgoQ1NTU3R5bGVTaGVldCopMCwg
bV9tZWRpYSwgdHJ1ZSk7CisgICAgICAgIENTU1N0eWxlU2hlZXQqIG5vU2hlZXQgPSAwOworICAg
ICAgICBSZWZQdHI8TWVkaWFMaXN0PiBtZWRpYSA9IE1lZGlhTGlzdDo6Y3JlYXRlKG5vU2hlZXQs
IG1fbWVkaWEsIHRydWUpOwogICAgICAgICBpZiAoYWxsRXZhbC5ldmFsKG1lZGlhLmdldCgpKSB8
fCBzY3JlZW5FdmFsLmV2YWwobWVkaWEuZ2V0KCkpIHx8IHByaW50RXZhbC5ldmFsKG1lZGlhLmdl
dCgpKSkgewogCiAgICAgICAgICAgICAvLyBBZGQgb3Vyc2VsdmVzIGFzIGEgcGVuZGluZyBzaGVl
dCwgYnV0IG9ubHkgaWYgd2UgYXJlbid0IGFuIGFsdGVybmF0ZSAKQEAgLTIyMyw3ICsyMjQsOCBA
QCB2b2lkIEhUTUxMaW5rRWxlbWVudDo6c2V0Q1NTU3R5bGVTaGVldChjCiAgICAgbV9zaGVldC0+
cGFyc2VTdHJpbmcoc2hlZXRTdHIsICFkb2N1bWVudCgpLT5pbkNvbXBhdE1vZGUoKSk7CiAgICAg
bV9zaGVldC0+c2V0VGl0bGUodGl0bGUoKSk7CiAKLSAgICBSZWZQdHI8TWVkaWFMaXN0PiBtZWRp
YSA9IG5ldyBNZWRpYUxpc3QoKENTU1N0eWxlU2hlZXQqKTAsIG1fbWVkaWEsIHRydWUpOworICAg
IENTU1N0eWxlU2hlZXQqIG5vU2hlZXQgPSAwOworICAgIFJlZlB0cjxNZWRpYUxpc3Q+IG1lZGlh
ID0gTWVkaWFMaXN0OjpjcmVhdGUobm9TaGVldCwgbV9tZWRpYSwgdHJ1ZSk7CiAgICAgbV9zaGVl
dC0+c2V0TWVkaWEobWVkaWEuZ2V0KCkpOwogCiAgICAgbV9sb2FkaW5nID0gZmFsc2U7CkluZGV4
OiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGh0bWwvSFRNTE1lZGlh
RWxlbWVudC5jcHAJKHJldmlzaW9uIDMwMTE4KQorKysgaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtODEwLDcgKzgxMCw4IEBAIFN0cmluZyBIVE1MTWVkaWFFbGVt
ZW50OjpwaWNrTWVkaWEoKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsgCiAgICAgICAg
ICAgICAgICAgaWYgKHNvdXJjZS0+aGFzQXR0cmlidXRlKG1lZGlhQXR0cikpIHsKICAgICAgICAg
ICAgICAgICAgICAgTWVkaWFRdWVyeUV2YWx1YXRvciBzY3JlZW5FdmFsKCJzY3JlZW4iLCBkb2N1
bWVudCgpLT5wYWdlKCksIHJlbmRlcmVyKCkgPyByZW5kZXJlcigpLT5zdHlsZSgpIDogMCk7Ci0g
ICAgICAgICAgICAgICAgICAgIFJlZlB0cjxNZWRpYUxpc3Q+IG1lZGlhID0gbmV3IE1lZGlhTGlz
dCgoQ1NTU3R5bGVTaGVldCopMCwgc291cmNlLT5tZWRpYSgpLCB0cnVlKTsKKyAgICAgICAgICAg
ICAgICAgICAgQ1NTU3R5bGVTaGVldCogbm9TaGVldCA9IDA7CisgICAgICAgICAgICAgICAgICAg
IFJlZlB0cjxNZWRpYUxpc3Q+IG1lZGlhID0gTWVkaWFMaXN0OjpjcmVhdGUobm9TaGVldCwgc291
cmNlLT5tZWRpYSgpLCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFzY3JlZW5FdmFs
LmV2YWwobWVkaWEuZ2V0KCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICAgICAgfQpJbmRleDogaHRtbC9IVE1MVGFibGVFbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBodG1sL0hUTUxUYWJsZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAzMDExOCkKKysrIGh0
bWwvSFRNTFRhYmxlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2NiwxMiArNDY2LDEy
IEBAIHZvaWQgSFRNTFRhYmxlRWxlbWVudDo6YWRkaXRpb25hbEF0dHJpYnUKICAgICBNYXBwZWRB
dHRyaWJ1dGUgYXR0cih0YWJsZWJvcmRlckF0dHIsIG1fYm9yZGVyQ29sb3JBdHRyID8gInNvbGlk
IiA6ICJvdXRzZXQiKTsKICAgICBDU1NNYXBwZWRBdHRyaWJ1dGVEZWNsYXJhdGlvbiogZGVjbCA9
IGdldE1hcHBlZEF0dHJpYnV0ZURlY2woZVBlcnNpc3RlbnQsICZhdHRyKTsKICAgICBpZiAoIWRl
Y2wpIHsKLSAgICAgICAgZGVjbCA9IG5ldyBDU1NNYXBwZWRBdHRyaWJ1dGVEZWNsYXJhdGlvbigw
KTsKKyAgICAgICAgZGVjbCA9IENTU01hcHBlZEF0dHJpYnV0ZURlY2xhcmF0aW9uOjpjcmVhdGUo
MCkucmVsZWFzZVJlZigpOyAvLyBUaGlzIHNpbmdsZSByZWYgcGlucyB1cyBpbiB0aGUgdGFibGUg
dW50aWwgdGhlIGRvY3VtZW50IGRpZXMuCisgICAgICAgIC8vIEZJWE1FOiBXaGF0IGRvZXMgdGhh
dCBjb21tZW50IGFib3ZlIG1lYW4/IFdobyBldmVyIGRlcmVmcyB0aGlzPyBXaHkgZG9lc24ndCBp
dCBsZWFrPworCiAgICAgICAgIGRlY2wtPnNldFBhcmVudChkb2N1bWVudCgpLT5lbGVtZW50U2hl
ZXQoKSk7CiAgICAgICAgIGRlY2wtPnNldE5vZGUodGhpcyk7Ci0gICAgICAgIGRlY2wtPnNldFN0
cmljdFBhcnNpbmcoZmFsc2UpOyAvLyBNYXBwZWQgYXR0cmlidXRlcyBhcmUganVzdCBhbHdheXMg
cXVpcmt5LgotICAgICAgICAKLSAgICAgICAgZGVjbC0+cmVmKCk7IC8vIFRoaXMgc2luZ2xlIHJl
ZiBwaW5zIHVzIGluIHRoZSB0YWJsZSB1bnRpbCB0aGUgZG9jdW1lbnQgZGllcy4KKyAgICAgICAg
ZGVjbC0+c2V0U3RyaWN0UGFyc2luZyhmYWxzZSk7IC8vIE1hcHBlZCBhdHRyaWJ1dGVzIGFyZSBq
dXN0IGFsd2F5cyBxdWlya3kuICAgICAgICAKIAogICAgICAgICBpbnQgdiA9IG1fYm9yZGVyQ29s
b3JBdHRyID8gQ1NTX1ZBTF9TT0xJRCA6IENTU19WQUxfT1VUU0VUOwogICAgICAgICBkZWNsLT5z
ZXRQcm9wZXJ0eShDU1NfUFJPUF9CT1JERVJfVE9QX1NUWUxFLCB2LCBmYWxzZSk7CkBAIC01Mjcs
MTMgKzUyNywxMyBAQCB2b2lkIEhUTUxUYWJsZUVsZW1lbnQ6OmFkZFNoYXJlZENlbGxCb3JkCiAK
ICAgICBDU1NNYXBwZWRBdHRyaWJ1dGVEZWNsYXJhdGlvbiogZGVjbCA9IGdldE1hcHBlZEF0dHJp
YnV0ZURlY2woZVBlcnNpc3RlbnQsICZhdHRyKTsKICAgICBpZiAoIWRlY2wpIHsKLSAgICAgICAg
ZGVjbCA9IG5ldyBDU1NNYXBwZWRBdHRyaWJ1dGVEZWNsYXJhdGlvbigwKTsKKyAgICAgICAgZGVj
bCA9IENTU01hcHBlZEF0dHJpYnV0ZURlY2xhcmF0aW9uOjpjcmVhdGUoMCkucmVsZWFzZVJlZigp
OyAvLyBUaGlzIHNpbmdsZSByZWYgcGlucyB1cyBpbiB0aGUgdGFibGUgdW50aWwgdGhlIGRvY3Vt
ZW50IGRpZXMuCisgICAgICAgIC8vIEZJWE1FOiBXaGF0IGRvZXMgdGhhdCBjb21tZW50IGFib3Zl
IG1lYW4/IFdobyBldmVyIGRlcmVmcyB0aGlzPyBXaHkgZG9lc24ndCBpdCBsZWFrPworCiAgICAg
ICAgIGRlY2wtPnNldFBhcmVudChkb2N1bWVudCgpLT5lbGVtZW50U2hlZXQoKSk7CiAgICAgICAg
IGRlY2wtPnNldE5vZGUodGhpcyk7CiAgICAgICAgIGRlY2wtPnNldFN0cmljdFBhcnNpbmcoZmFs
c2UpOyAvLyBNYXBwZWQgYXR0cmlidXRlcyBhcmUganVzdCBhbHdheXMgcXVpcmt5LgogICAgICAg
ICAKLSAgICAgICAgZGVjbC0+cmVmKCk7IC8vIFRoaXMgc2luZ2xlIHJlZiBwaW5zIHVzIGluIHRo
ZSB0YWJsZSB1bnRpbCB0aGUgZG9jdW1lbnQgZGllcy4KLSAgICAgICAgCiAgICAgICAgIHN3aXRj
aCAoYm9yZGVycykgewogICAgICAgICAgICAgY2FzZSBTb2xpZEJvcmRlcnNDb2xzT25seToKICAg
ICAgICAgICAgICAgICBkZWNsLT5zZXRQcm9wZXJ0eShDU1NfUFJPUF9CT1JERVJfTEVGVF9XSURU
SCwgQ1NTX1ZBTF9USElOLCBmYWxzZSk7CkBAIC01ODksNyArNTg5LDcgQEAgdm9pZCBIVE1MVGFi
bGVFbGVtZW50OjphZGRTaGFyZWRDZWxsUGFkZAogICAgICAgICBNYXBwZWRBdHRyaWJ1dGUgYXR0
cihjZWxscGFkZGluZ0F0dHIsIG51bWVyaWNTdHIpOwogICAgICAgICBtX3BhZGRpbmdEZWNsID0g
Z2V0TWFwcGVkQXR0cmlidXRlRGVjbChlVW5pdmVyc2FsLCAmYXR0cik7CiAgICAgICAgIGlmICgh
bV9wYWRkaW5nRGVjbCkgewotICAgICAgICAgICAgbV9wYWRkaW5nRGVjbCA9IG5ldyBDU1NNYXBw
ZWRBdHRyaWJ1dGVEZWNsYXJhdGlvbigwKTsKKyAgICAgICAgICAgIG1fcGFkZGluZ0RlY2wgPSBD
U1NNYXBwZWRBdHRyaWJ1dGVEZWNsYXJhdGlvbjo6Y3JlYXRlKDApOwogICAgICAgICAgICAgbV9w
YWRkaW5nRGVjbC0+c2V0UGFyZW50KGRvY3VtZW50KCktPmVsZW1lbnRTaGVldCgpKTsKICAgICAg
ICAgICAgIG1fcGFkZGluZ0RlY2wtPnNldE5vZGUodGhpcyk7CiAgICAgICAgICAgICBtX3BhZGRp
bmdEZWNsLT5zZXRTdHJpY3RQYXJzaW5nKGZhbHNlKTsgLy8gTWFwcGVkIGF0dHJpYnV0ZXMgYXJl
IGp1c3QgYWx3YXlzIHF1aXJreS4KQEAgLTYxNywxMyArNjE3LDEzIEBAIHZvaWQgSFRNTFRhYmxl
RWxlbWVudDo6YWRkU2hhcmVkR3JvdXBEZWMKICAgICBNYXBwZWRBdHRyaWJ1dGUgYXR0cihydWxl
c0F0dHIsIHJvd3MgPyAicm93Z3JvdXBzIiA6ICJjb2xncm91cHMiKTsKICAgICBDU1NNYXBwZWRB
dHRyaWJ1dGVEZWNsYXJhdGlvbiogZGVjbCA9IGdldE1hcHBlZEF0dHJpYnV0ZURlY2woZVBlcnNp
c3RlbnQsICZhdHRyKTsKICAgICBpZiAoIWRlY2wpIHsKLSAgICAgICAgZGVjbCA9IG5ldyBDU1NN
YXBwZWRBdHRyaWJ1dGVEZWNsYXJhdGlvbigwKTsKKyAgICAgICAgZGVjbCA9IENTU01hcHBlZEF0
dHJpYnV0ZURlY2xhcmF0aW9uOjpjcmVhdGUoMCkucmVsZWFzZVJlZigpOyAvLyBUaGlzIHNpbmds
ZSByZWYgcGlucyB1cyBpbiB0aGUgdGFibGUgdW50aWwgdGhlIGRvY3VtZW50IGRpZXMuCisgICAg
ICAgIC8vIEZJWE1FOiBXaGF0IGRvZXMgdGhhdCBjb21tZW50IGFib3ZlIG1lYW4/IFdobyBldmVy
IGRlcmVmcyB0aGlzPyBXaHkgZG9lc24ndCBpdCBsZWFrPworCiAgICAgICAgIGRlY2wtPnNldFBh
cmVudChkb2N1bWVudCgpLT5lbGVtZW50U2hlZXQoKSk7CiAgICAgICAgIGRlY2wtPnNldE5vZGUo
dGhpcyk7CiAgICAgICAgIGRlY2wtPnNldFN0cmljdFBhcnNpbmcoZmFsc2UpOyAvLyBNYXBwZWQg
YXR0cmlidXRlcyBhcmUganVzdCBhbHdheXMgcXVpcmt5LgogICAgICAgICAKLSAgICAgICAgZGVj
bC0+cmVmKCk7IC8vIFRoaXMgc2luZ2xlIHJlZiBwaW5zIHVzIGluIHRoZSB0YWJsZSB1bnRpbCB0
aGUgZG9jdW1lbnQgZGllcy4KLSAgICAgICAgCiAgICAgICAgIGlmIChyb3dzKSB7CiAgICAgICAg
ICAgICBkZWNsLT5zZXRQcm9wZXJ0eShDU1NfUFJPUF9CT1JERVJfVE9QX1dJRFRILCBDU1NfVkFM
X1RISU4sIGZhbHNlKTsKICAgICAgICAgICAgIGRlY2wtPnNldFByb3BlcnR5KENTU19QUk9QX0JP
UkRFUl9CT1RUT01fV0lEVEgsIENTU19WQUxfVEhJTiwgZmFsc2UpOwpJbmRleDogcGFnZS9ET01X
aW5kb3cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIHBhZ2UvRE9NV2luZG93LmNwcAkocmV2aXNpb24gMzAx
MTgpCisrKyBwYWdlL0RPTVdpbmRvdy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2NiwxMyArNTY2
LDEyIEBAIERvY3VtZW50KiBET01XaW5kb3c6OmRvY3VtZW50KCkgY29uc3QKICAgICByZXR1cm4g
bV9mcmFtZS0+ZG9jdW1lbnQoKTsKIH0KIAotUGFzc1JlZlB0cjxDU1NTdHlsZURlY2xhcmF0aW9u
PiBET01XaW5kb3c6OmdldENvbXB1dGVkU3R5bGUoRWxlbWVudCogZWx0LCBjb25zdCBTdHJpbmcm
KSBjb25zdAorUGFzc1JlZlB0cjxDU1NTdHlsZURlY2xhcmF0aW9uPiBET01XaW5kb3c6OmdldENv
bXB1dGVkU3R5bGUoRWxlbWVudCogZWxlbWVudCwgY29uc3QgU3RyaW5nJikgY29uc3QKIHsKLSAg
ICBpZiAoIWVsdCkKKyAgICAvLyBGSVhNRTogVGhpcyBuZWVkcyB0byB3b3JrIHdpdGggcHNldWRv
IGVsZW1lbnRzIHJhdGhlciB0aGFuIGlnbm9yaW5nIHRoZSBzZWNvbmQgcGFyYW1ldGVyLgorICAg
IGlmICghZWxlbWVudCkKICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAvLyBGSVhNRTogVGhpcyBu
ZWVkcyB0byB3b3JrIHdpdGggcHNldWRvIGVsZW1lbnRzLgotICAgIHJldHVybiBuZXcgQ1NTQ29t
cHV0ZWRTdHlsZURlY2xhcmF0aW9uKGVsdCk7CisgICAgcmV0dXJuIENTU0NvbXB1dGVkU3R5bGVE
ZWNsYXJhdGlvbjo6Y3JlYXRlKGVsZW1lbnQpOwogfQogCiBQYXNzUmVmUHRyPENTU1J1bGVMaXN0
PiBET01XaW5kb3c6OmdldE1hdGNoZWRDU1NSdWxlcyhFbGVtZW50KiBlbHQsIGNvbnN0IFN0cmlu
ZyYgcHNldWRvRWx0LCBib29sIGF1dGhvck9ubHkpIGNvbnN0CkluZGV4OiBwYWdlL0ZyYW1lLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBwYWdlL0ZyYW1lLmNwcAkocmV2aXNpb24gMzAxMTgpCisrKyBwYWdl
L0ZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODI5LDggKzgzMCw4IEBAIHZvaWQgRnJhbWU6
OmNvbXB1dGVBbmRTZXRUeXBpbmdTdHlsZShDU1MKICAgICB9CiAKICAgICBOb2RlICpub2RlID0g
c2VsZWN0aW9uQ29udHJvbGxlcigpLT5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKS5kZWVwRXF1
aXZhbGVudCgpLm5vZGUoKTsKLSAgICBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24gY29tcHV0
ZWRTdHlsZShub2RlKTsKLSAgICBjb21wdXRlZFN0eWxlLmRpZmYobXV0YWJsZVN0eWxlLmdldCgp
KTsKKyAgICBSZWZQdHI8Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uPiBjb21wdXRlZFN0eWxl
ID0gQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpjcmVhdGUobm9kZSk7CisgICAgY29tcHV0
ZWRTdHlsZS0+ZGlmZihtdXRhYmxlU3R5bGUuZ2V0KCkpOwogICAgIAogICAgIC8vIEhhbmRsZSBi
bG9jayBzdHlsZXMsIHN1YnN0cmFjdGluZyB0aGVzZSBmcm9tIHRoZSB0eXBpbmcgc3R5bGUuCiAg
ICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBibG9ja1N0eWxlID0gbXV0YWJs
ZVN0eWxlLT5jb3B5QmxvY2tQcm9wZXJ0aWVzKCk7CkBAIC04NjAsNyArODYxLDcgQEAgU3RyaW5n
IEZyYW1lOjpzZWxlY3Rpb25TdGFydFN0eWxlUHJvcGVydAogICAgIHJldHVybiB2YWx1ZTsKIH0K
IAotQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uICpGcmFtZTo6c2VsZWN0aW9uQ29tcHV0ZWRT
dHlsZShOb2RlICombm9kZVRvUmVtb3ZlKSBjb25zdAorUGFzc1JlZlB0cjxDU1NDb21wdXRlZFN0
eWxlRGVjbGFyYXRpb24+IEZyYW1lOjpzZWxlY3Rpb25Db21wdXRlZFN0eWxlKE5vZGUgKiZub2Rl
VG9SZW1vdmUpIGNvbnN0CiB7CiAgICAgbm9kZVRvUmVtb3ZlID0gMDsKIApAQCAtOTA3LDcgKzkw
OCw3IEBAIENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbiAqRnJhbWU6OnNlbGUKICAgICAgICAg
bm9kZVRvUmVtb3ZlID0gc3R5bGVFbGVtZW50LmdldCgpOwogICAgIH0KIAotICAgIHJldHVybiBu
ZXcgQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uKHN0eWxlRWxlbWVudCk7CisgICAgcmV0dXJu
IENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6Y3JlYXRlKHN0eWxlRWxlbWVudCk7CiB9CiAK
IHZvaWQgRnJhbWU6OnRleHRGaWVsZERpZEJlZ2luRWRpdGluZyhFbGVtZW50KiBlKQpJbmRleDog
cGFnZS9GcmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBhZ2UvRnJhbWUuaAkocmV2aXNpb24gMzAxMTgp
CisrKyBwYWdlL0ZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4Nyw3ICsyODcsNyBAQCBwdWJs
aWM6CiAgICAgYm9vbCBtYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkKCkgY29uc3Q7CiAg
ICAgdm9pZCBzZXRNYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkKGJvb2wgZmxhZyk7CiAK
LSAgICBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24qIHNlbGVjdGlvbkNvbXB1dGVkU3R5bGUo
Tm9kZSomIG5vZGVUb1JlbW92ZSkgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxDU1NDb21wdXRlZFN0
eWxlRGVjbGFyYXRpb24+IHNlbGVjdGlvbkNvbXB1dGVkU3R5bGUoTm9kZSomIG5vZGVUb1JlbW92
ZSkgY29uc3Q7CiAKICAgICB2b2lkIHRleHRGaWVsZERpZEJlZ2luRWRpdGluZyhFbGVtZW50Kik7
CiAgICAgdm9pZCB0ZXh0RmllbGREaWRFbmRFZGl0aW5nKEVsZW1lbnQqKTsKSW5kZXg6IHN2Zy9T
VkdGb250RmFjZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN2Zy9TVkdGb250RmFjZUVsZW1l
bnQuY3BwCShyZXZpc2lvbiAzMDExOCkKKysrIHN2Zy9TVkdGb250RmFjZUVsZW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00OCw4ICs0OCw4IEBAIHVzaW5nIG5hbWVzcGFjZSBTVkdOYW1lczsK
IAogU1ZHRm9udEZhY2VFbGVtZW50OjpTVkdGb250RmFjZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVk
TmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYykKICAgICA6IFNWR0VsZW1lbnQodGFnTmFtZSwg
ZG9jKQotICAgICwgbV9mb250RmFjZVJ1bGUobmV3IENTU0ZvbnRGYWNlUnVsZSgwKSkKLSAgICAs
IG1fc3R5bGVEZWNsYXJhdGlvbihuZXcgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24pCisgICAg
LCBtX2ZvbnRGYWNlUnVsZShDU1NGb250RmFjZVJ1bGU6OmNyZWF0ZSgwKSkKKyAgICAsIG1fc3R5
bGVEZWNsYXJhdGlvbihDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y3JlYXRlKCkpCiB7CiAg
ICAgbV9zdHlsZURlY2xhcmF0aW9uLT5zZXRQYXJlbnQoZG9jdW1lbnQoKS0+bWFwcGVkRWxlbWVu
dFNoZWV0KCkpOwogICAgIG1fc3R5bGVEZWNsYXJhdGlvbi0+c2V0U3RyaWN0UGFyc2luZyh0cnVl
KTsKSW5kZXg6IHhtbC9YU0xJbXBvcnRSdWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB4bWwvWFNMSW1w
b3J0UnVsZS5jcHAJKHJldmlzaW9uIDMwMTE4KQorKysgeG1sL1hTTEltcG9ydFJ1bGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCwxMSBAQCBYU0xJbXBvcnRSdWxlOjpYU0xJbXBvcnRS
dWxlKFN0eWxlQmFzZSogCiB7CiB9CiAKK1Bhc3NSZWZQdHI8WFNMSW1wb3J0UnVsZT4gWFNMSW1w
b3J0UnVsZTo6Y3JlYXRlKFN0eWxlQmFzZSogcGFyZW50LCBjb25zdCBTdHJpbmcmIGhyZWYpCit7
CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBYU0xJbXBvcnRSdWxlKHBhcmVudCwgaHJlZikpOwor
fQorCiBYU0xJbXBvcnRSdWxlOjp+WFNMSW1wb3J0UnVsZSgpCiB7CiAgICAgaWYgKG1fc3R5bGVT
aGVldCkKSW5kZXg6IHhtbC9YU0xJbXBvcnRSdWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0geG1sL1hTTElt
cG9ydFJ1bGUuaAkocmV2aXNpb24gMzAxMTgpCisrKyB4bWwvWFNMSW1wb3J0UnVsZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMywxMiArMzMsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFz
cyBDYWNoZWRYU0xTdHlsZVNoZWV0OwogCi1jbGFzcyBYU0xJbXBvcnRSdWxlIDogcHVibGljIENh
Y2hlZFJlc291cmNlQ2xpZW50LCBwdWJsaWMgU3R5bGVCYXNlIHsKK2NsYXNzIFhTTEltcG9ydFJ1
bGUgOiBwdWJsaWMgU3R5bGVCYXNlLCBwdWJsaWMgQ2FjaGVkUmVzb3VyY2VDbGllbnQgewogcHVi
bGljOgotICAgIFhTTEltcG9ydFJ1bGUoU3R5bGVCYXNlKiBwYXJlbnQsIGNvbnN0IFN0cmluZyYg
aHJlZik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8WFNMSW1wb3J0UnVsZT4gY3JlYXRlKFN0eWxl
QmFzZSogcGFyZW50LCBjb25zdCBTdHJpbmcmIGhyZWYpOwogICAgIHZpcnR1YWwgflhTTEltcG9y
dFJ1bGUoKTsKICAgICAKLSAgICBTdHJpbmcgaHJlZigpIGNvbnN0IHsgcmV0dXJuIG1fc3RySHJl
ZjsgfQorICAgIGNvbnN0IFN0cmluZyYgaHJlZigpIGNvbnN0IHsgcmV0dXJuIG1fc3RySHJlZjsg
fQogICAgIFhTTFN0eWxlU2hlZXQqIHN0eWxlU2hlZXQoKSBjb25zdCB7IHJldHVybiBtX3N0eWxl
U2hlZXQuZ2V0KCk7IH0KICAgICAKICAgICB2aXJ0dWFsIGJvb2wgaXNJbXBvcnRSdWxlKCkgeyBy
ZXR1cm4gdHJ1ZTsgfQpAQCAtNTAsNyArNTAsOSBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0xvYWRp
bmcoKTsKICAgICB2b2lkIGxvYWRTaGVldCgpOwogICAgIAotcHJvdGVjdGVkOgorcHJpdmF0ZToK
KyAgICBYU0xJbXBvcnRSdWxlKFN0eWxlQmFzZSogcGFyZW50LCBjb25zdCBTdHJpbmcmIGhyZWYp
OworCiAgICAgU3RyaW5nIG1fc3RySHJlZjsKICAgICBSZWZQdHI8WFNMU3R5bGVTaGVldD4gbV9z
dHlsZVNoZWV0OwogICAgIENhY2hlZFhTTFN0eWxlU2hlZXQqIG1fY2FjaGVkU2hlZXQ7CkluZGV4
OiB4bWwvWFNMU3R5bGVTaGVldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0geG1sL1hTTFN0eWxlU2hlZXQu
Y3BwCShyZXZpc2lvbiAzMDExOCkKKysrIHhtbC9YU0xTdHlsZVNoZWV0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtOTcsOCArOTcsOCBAQCB2b2lkIFhTTFN0eWxlU2hlZXQ6OmNoZWNrTG9hZGVkKCkK
ICAgICAgICAgcmV0dXJuOwogICAgIGlmIChwYXJlbnQoKSkKICAgICAgICAgcGFyZW50KCktPmNo
ZWNrTG9hZGVkKCk7Ci0gICAgaWYgKG1fcGFyZW50Tm9kZSkKLSAgICAgICAgbV9wYXJlbnROb2Rl
LT5zaGVldExvYWRlZCgpOworICAgIGlmIChvd25lck5vZGUoKSkKKyAgICAgICAgb3duZXJOb2Rl
KCktPnNoZWV0TG9hZGVkKCk7CiB9CiAKIHhtbERvY1B0ciBYU0xTdHlsZVNoZWV0Ojpkb2N1bWVu
dCgpCkBAIC0yMDksOSArMjA5LDkgQEAgdm9pZCBYU0xTdHlsZVNoZWV0Ojpsb2FkQ2hpbGRTaGVl
dHMoKQogICAgIH0KIH0KIAotdm9pZCBYU0xTdHlsZVNoZWV0Ojpsb2FkQ2hpbGRTaGVldChjb25z
dCBEZXByZWNhdGVkU3RyaW5nJiBocmVmKQordm9pZCBYU0xTdHlsZVNoZWV0Ojpsb2FkQ2hpbGRT
aGVldChjb25zdCBTdHJpbmcmIGhyZWYpCiB7Ci0gICAgUmVmUHRyPFhTTEltcG9ydFJ1bGU+IGNo
aWxkUnVsZSA9IG5ldyBYU0xJbXBvcnRSdWxlKHRoaXMsIGhyZWYpOworICAgIFJlZlB0cjxYU0xJ
bXBvcnRSdWxlPiBjaGlsZFJ1bGUgPSBYU0xJbXBvcnRSdWxlOjpjcmVhdGUodGhpcywgaHJlZik7
CiAgICAgYXBwZW5kKGNoaWxkUnVsZSk7CiAgICAgY2hpbGRSdWxlLT5sb2FkU2hlZXQoKTsKIH0K
SW5kZXg6IHhtbC9YU0xTdHlsZVNoZWV0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0geG1sL1hTTFN0eWxlU2hl
ZXQuaAkocmV2aXNpb24gMzAxMTgpCisrKyB4bWwvWFNMU3R5bGVTaGVldC5oCSh3b3JraW5nIGNv
cHkpCkBAIC01MSw3ICs1MSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgY2hlY2tMb2Fk
ZWQoKTsKIAogICAgIHZvaWQgbG9hZENoaWxkU2hlZXRzKCk7Ci0gICAgdm9pZCBsb2FkQ2hpbGRT
aGVldChjb25zdCBEZXByZWNhdGVkU3RyaW5nJiBocmVmKTsKKyAgICB2b2lkIGxvYWRDaGlsZFNo
ZWV0KGNvbnN0IFN0cmluZyYgaHJlZik7CiAKICAgICB4c2x0U3R5bGVzaGVldFB0ciBjb21waWxl
U3R5bGVTaGVldCgpOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19229</attachid>
            <date>2008-02-20 09:18:34 -0800</date>
            <delta_ts>2008-02-20 09:18:34 -0800</delta_ts>
            <desc>work in progress on some other RefCounted classes</desc>
            <filename>OtherRefCount1Patch.txt</filename>
            <type>text/plain</type>
            <size>72140</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU291cmNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNvdXJjZS5jcHAJKHJldmlzaW9uIDMwMTE4KQorKysgV2Vi
Q29yZS9jc3MvQ1NTRm9udEZhY2VTb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzIsNyAr
MTcyLDEwIEBAIFNpbXBsZUZvbnREYXRhKiBDU1NGb250RmFjZVNvdXJjZTo6Z2V0Rm8KICAgICAg
ICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIEtpY2sgb2ZmIHRoZSBsb2FkIG5vdy4KLSAg
ICAgICAgbV9mb250LT5iZWdpbkxvYWRJZk5lZWRlZChmb250U2VsZWN0b3ItPmRvY0xvYWRlcigp
KTsKKyAgICAgICAgRG9jTG9hZGVyKiBsb2FkZXIgPSBmb250U2VsZWN0b3ItPmRvY0xvYWRlcigp
OworICAgICAgICBpZiAoIWxvYWRlcikKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBt
X2ZvbnQtPmJlZ2luTG9hZElmTmVlZGVkKGxvYWRlcik7CiAgICAgICAgIEZvbnRQbGF0Zm9ybURh
dGEqIHRlbXBEYXRhID0gRm9udENhY2hlOjpnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGZvbnRE
ZXNjcmlwdGlvbiwgbV9zdHJpbmcpOwogICAgICAgICBpZiAoIXRlbXBEYXRhKQogICAgICAgICAg
ICAgdGVtcERhdGEgPSBGb250Q2FjaGU6OmdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnQoZm9udERl
c2NyaXB0aW9uKTsKSW5kZXg6IFdlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmNwcAkocmV2aXNpb24gMzAxMTgp
CisrKyBXZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
NywxOCArNTcsMTkgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1DU1NGb250U2VsZWN0b3I6
OkNTU0ZvbnRTZWxlY3RvcihEb2N1bWVudCogZG9jdW1lbnQpCi06IG1fZG9jdW1lbnQoZG9jdW1l
bnQpCitpbmxpbmUgQ1NTRm9udFNlbGVjdG9yOjpDU1NGb250U2VsZWN0b3IoRG9jdW1lbnQqIGRv
Y3VtZW50KQorICAgIDogbV9kb2N1bWVudChkb2N1bWVudCkKIHsKICAgICBBU1NFUlQobV9kb2N1
bWVudCk7CiB9CiAKLUNTU0ZvbnRTZWxlY3Rvcjo6fkNTU0ZvbnRTZWxlY3RvcigpCi17fQorUGFz
c1JlZlB0cjxDU1NGb250U2VsZWN0b3I+IENTU0ZvbnRTZWxlY3Rvcjo6Y3JlYXRlKERvY3VtZW50
KiBkb2N1bWVudCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IENTU0ZvbnRTZWxlY3Rvcihk
b2N1bWVudCkpOworfQogCi1ib29sIENTU0ZvbnRTZWxlY3Rvcjo6aXNFbXB0eSgpIGNvbnN0CitD
U1NGb250U2VsZWN0b3I6On5DU1NGb250U2VsZWN0b3IoKQogewotICAgIHJldHVybiBtX2ZvbnRz
LmlzRW1wdHkoKTsKIH0KIAogRG9jTG9hZGVyKiBDU1NGb250U2VsZWN0b3I6OmRvY0xvYWRlcigp
IGNvbnN0CkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuaAkocmV2aXNpb24gMzAxMTgpCisrKyBXZWJD
b3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsMzggKzI3LDM2
IEBACiAjZGVmaW5lIENTU0ZvbnRTZWxlY3Rvcl9oCiAKICNpbmNsdWRlICJGb250U2VsZWN0b3Iu
aCIKLQogI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgog
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBB
dG9taWNTdHJpbmc7CiBjbGFzcyBDU1NGb250RmFjZVJ1bGU7CiBjbGFzcyBDU1NTZWdtZW50ZWRG
b250RmFjZTsKIGNsYXNzIERvY3VtZW50OwogY2xhc3MgRG9jTG9hZGVyOwotY2xhc3MgRm9udERl
c2NyaXB0aW9uOwotY2xhc3MgU3RyaW5nOwogCiBjbGFzcyBDU1NGb250U2VsZWN0b3IgOiBwdWJs
aWMgRm9udFNlbGVjdG9yIHsKIHB1YmxpYzoKLSAgICBDU1NGb250U2VsZWN0b3IoRG9jdW1lbnQq
IGRvYyk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTRm9udFNlbGVjdG9yPiBjcmVhdGUoRG9j
dW1lbnQqKTsKICAgICB2aXJ0dWFsIH5DU1NGb250U2VsZWN0b3IoKTsKKyAgICB2b2lkIGNsb3Nl
KCkgeyBtX2RvY3VtZW50ID0gMDsgfQogCi0gICAgdmlydHVhbCBGb250RGF0YSogZ2V0Rm9udERh
dGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21pY1N0
cmluZyYgZmFtaWx5TmFtZSk7CisgICAgdmlydHVhbCBGb250RGF0YSogZ2V0Rm9udERhdGEoY29u
c3QgRm9udERlc2NyaXB0aW9uJiwgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHlOYW1lKTsKICAg
ICAKICAgICB2b2lkIGFkZEZvbnRGYWNlUnVsZShjb25zdCBDU1NGb250RmFjZVJ1bGUqKTsKLQog
ICAgIHZvaWQgZm9udExvYWRlZChDU1NTZWdtZW50ZWRGb250RmFjZSopOwogCi0gICAgYm9vbCBp
c0VtcHR5KCkgY29uc3Q7Ci0KICAgICBEb2NMb2FkZXIqIGRvY0xvYWRlcigpIGNvbnN0OwogCi1w
cm90ZWN0ZWQ6Ci0gICAgRG9jdW1lbnQqIG1fZG9jdW1lbnQ7IC8vIE5vIG5lZWQgdG8gcmVmLCBz
aW5jZSB3ZSB3aWxsIGFsd2F5cyBnZXQgZGVzdHJveWVkIGJlZm9yZSB0aGUgZG9jdW1lbnQgZG9l
cy4KK3ByaXZhdGU6CisgICAgQ1NTRm9udFNlbGVjdG9yKERvY3VtZW50Kik7CisKKyAgICBib29s
IGlzRW1wdHkoKSBjb25zdDsKKworICAgIERvY3VtZW50KiBtX2RvY3VtZW50OwogICAgIEhhc2hN
YXA8U3RyaW5nLCBSZWZQdHI8Q1NTU2VnbWVudGVkRm9udEZhY2U+ID4gbV9mb250czsKIH07CiAK
SW5kZXg6IFdlYkNvcmUvY3NzL1N0eWxlU2hlZXRMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2Nzcy9TdHlsZVNoZWV0TGlzdC5jcHAJKHJldmlzaW9uIDMwMTE4KQorKysgV2ViQ29yZS9j
c3MvU3R5bGVTaGVldExpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNCBAQAotLyoq
Ci0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRE9NIGltcGxlbWVudGF0aW9uIGZvciBLREUu
Ci0gKgorLyoKICAqIChDKSAxOTk5LTIwMDMgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAq
IENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgpAQCAtMjMsNzEgKzIxLDc5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiU3R5bGVTaGVldExpc3QuaCIKIAotI2luY2x1ZGUgIkNTU1N0eWxlU2hlZXQuaCIKICNp
bmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhU
TUxTdHlsZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLVN0eWxlU2hlZXRM
aXN0OjpTdHlsZVNoZWV0TGlzdChEb2N1bWVudCogZG9jKQotICAgIDogbV9kb2MoZG9jKQoraW5s
aW5lIFN0eWxlU2hlZXRMaXN0OjpTdHlsZVNoZWV0TGlzdChEb2N1bWVudCogZG9jdW1lbnQpCisg
ICAgOiBSZWZDb3VudGVkPFN0eWxlU2hlZXRMaXN0PigxKQorICAgICwgbV9kb2N1bWVudChkb2N1
bWVudCkKIHsKIH0KIAotU3R5bGVTaGVldExpc3Q6On5TdHlsZVNoZWV0TGlzdCgpCitQYXNzUmVm
UHRyPFN0eWxlU2hlZXRMaXN0PiBTdHlsZVNoZWV0TGlzdDo6Y3JlYXRlKERvY3VtZW50KiBkb2N1
bWVudCkKIHsKLSAgICBmb3IgKERlcHJlY2F0ZWRQdHJMaXN0SXRlcmF0b3I8U3R5bGVTaGVldD4g
aXQgKHN0eWxlU2hlZXRzKTsgaXQuY3VycmVudCgpOyArK2l0KQotICAgICAgICBpdC5jdXJyZW50
KCktPmRlcmVmKCk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdHlsZVNoZWV0TGlzdChkb2N1
bWVudCkpOwogfQogCi12b2lkIFN0eWxlU2hlZXRMaXN0Ojpkb2N1bWVudERlc3Ryb3llZCgpCitT
dHlsZVNoZWV0TGlzdDo6flN0eWxlU2hlZXRMaXN0KCkKIHsKLSAgICBtX2RvYyA9IDA7CiB9CiAK
LXZvaWQgU3R5bGVTaGVldExpc3Q6OmFkZChTdHlsZVNoZWV0KiBzKQordm9pZCBTdHlsZVNoZWV0
TGlzdDo6YWRkKFBhc3NSZWZQdHI8U3R5bGVTaGVldD4gc2hlZXQpCiB7Ci0gICAgaWYgKCFzdHls
ZVNoZWV0cy5jb250YWluc1JlZihzKSkgewotICAgICAgICBzLT5yZWYoKTsKLSAgICAgICAgc3R5
bGVTaGVldHMuYXBwZW5kKHMpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV92ZWN0b3Iu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1fdmVjdG9yW2ldID09IHNoZWV0KQorICAgICAg
ICAgICAgcmV0dXJuOwogICAgIH0KKyAgICBtX3ZlY3Rvci5hcHBlbmQoc2hlZXQpOwogfQogCi12
b2lkIFN0eWxlU2hlZXRMaXN0OjpyZW1vdmUoU3R5bGVTaGVldCogcykKK3ZvaWQgU3R5bGVTaGVl
dExpc3Q6OnJlbW92ZShTdHlsZVNoZWV0KiBzaGVldCkKIHsKLSAgICBpZiAoc3R5bGVTaGVldHMu
cmVtb3ZlUmVmKHMpKQotICAgICAgICBzLT5kZXJlZigpOwotfQotCi11bnNpZ25lZCBTdHlsZVNo
ZWV0TGlzdDo6bGVuZ3RoKCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3R5bGVTaGVldHMuY291bnQo
KTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdmVjdG9yLnNpemUoKTsgKytpKSB7Cisg
ICAgICAgIGlmIChtX3ZlY3RvcltpXSA9PSBzaGVldCkgeworICAgICAgICAgICAgbV92ZWN0b3Iu
cmVtb3ZlKGkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CiB9CiAKIFN0
eWxlU2hlZXQqIFN0eWxlU2hlZXRMaXN0OjppdGVtKHVuc2lnbmVkIGluZGV4KQogewotICAgIHJl
dHVybiBpbmRleCA8IGxlbmd0aCgpID8gc3R5bGVTaGVldHMuYXQoaW5kZXgpIDogMDsKKyAgICBy
ZXR1cm4gaW5kZXggPCBtX3ZlY3Rvci5zaXplKCkgPyBtX3ZlY3RvcltpbmRleF0uZ2V0KCkgOiAw
OwogfQogCiBIVE1MU3R5bGVFbGVtZW50KiBTdHlsZVNoZWV0TGlzdDo6Z2V0TmFtZWRJdGVtKGNv
bnN0IFN0cmluZyYgbmFtZSkgY29uc3QKIHsKLSAgICBpZiAoIW1fZG9jKQorICAgIC8vIEZJWE1F
OiBUaGlzIGxvb2tzIG9ubHkgYnkgSUQsIG5vdCBuYW1lLCBhbmQgcmV0dXJucyBvbmx5IGEgc2lu
Z2xlIGVsZW1lbnQKKyAgICAvLyBldmVuIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBvbmVzLiBJdCdz
IGFsc28gc3RyYW5nZSB0aGF0IHRoaXMgZnVuY3Rpb24gcmV0dXJucworICAgIC8vIHN0eWxlIGVs
ZW1lbnRzLCBhbmQgdGhlIG90aGVyIGZ1bmN0aW9ucyBvbiB0aGlzIGNsYXNzIHJldHVybiBzdHls
ZSBzaGVldHMuCisgICAgaWYgKCFtX2RvY3VtZW50KQogICAgICAgICByZXR1cm4gMDsKKyAgICBF
bGVtZW50KiBlbGVtZW50ID0gbV9kb2N1bWVudC0+Z2V0RWxlbWVudEJ5SWQobmFtZSk7CisgICAg
aWYgKCFlbGVtZW50IHx8ICFlbGVtZW50LT5oYXNUYWdOYW1lKHN0eWxlVGFnKSkKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxTdHlsZUVsZW1lbnQqPihlbGVt
ZW50KTsKK30KKwordm9pZCBTdHlsZVNoZWV0TGlzdDo6YWRkTmV3U2hlZXQoUGFzc1JlZlB0cjxT
dHlsZVNoZWV0PiBzaGVldCkKK3sKKyNpZm5kZWYgTkRFQlVHCisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBtX3ZlY3Rvci5zaXplKCk7ICsraSkKKyAgICAgICAgQVNTRVJUKG1fdmVjdG9yW2ld
ICE9IHNoZWV0KTsKKyNlbmRpZgorICAgIG1fdmVjdG9yLmFwcGVuZChzaGVldCk7Cit9CiAKLSAg
ICAvLyBJRSBhbHNvIHN1cHBvcnRzIHJldHJpZXZpbmcgYSBzdHlsZXNoZWV0IGJ5IG5hbWUsIHVz
aW5nIHRoZSBuYW1lL2lkIG9mIHRoZSA8c3R5bGU+IHRhZwotICAgIC8vICh0aGlzIGlzIGNvbnNp
c3RlbnQgd2l0aCBhbGwgdGhlIG90aGVyIGNvbGxlY3Rpb25zKQotICAgIC8vICMjIyBCYWQgaW1w
bGVtZW50YXRpb24gYmVjYXVzZSByZXR1cm5zIGEgc2luZ2xlIGVsZW1lbnQgKGFyZSBJRHMgYWx3
YXlzIHVuaXF1ZT8pCi0gICAgLy8gYW5kIGRvZXNuJ3QgbG9vayBmb3IgbmFtZSBhdHRyaWJ1dGUu
Ci0gICAgLy8gQnV0IHVuaWNpdHkgb2Ygc3R5bGVzaGVldCBpZHMgaXMgZ29vZCBwcmFjdGljZSBh
bnl3YXkgOykKLSAgICAKLSAgICBFbGVtZW50KiBlbGVtZW50ID0gbV9kb2MtPmdldEVsZW1lbnRC
eUlkKG5hbWUpOwotICAgIGlmIChlbGVtZW50ICYmIGVsZW1lbnQtPmhhc1RhZ05hbWUoc3R5bGVU
YWcpKQotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTFN0eWxlRWxlbWVudCo+KGVsZW1l
bnQpOwotICAgIHJldHVybiAwOwordm9pZCBTdHlsZVNoZWV0TGlzdDo6dGFrZShTdHlsZVNoZWV0
VmVjdG9yJiByZXN1bHQpCit7CisgICAgcmVzdWx0LmNsZWFyKCk7CisgICAgbV92ZWN0b3Iuc3dh
cChyZXN1bHQpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2Nz
cy9TdHlsZVNoZWV0TGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL1N0eWxlU2hlZXRM
aXN0LmgJKHJldmlzaW9uIDMwMTE4KQorKysgV2ViQ29yZS9jc3MvU3R5bGVTaGVldExpc3QuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAoQykgMTk5OS0yMDAzIExhcnMg
S25vbGwgKGtub2xsQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYsIDIwMDcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwpAQCAtMjEsOCArMjEsMTAgQEAKICNpZm5kZWYgU3R5bGVTaGVldExpc3RfaAog
I2RlZmluZSBTdHlsZVNoZWV0TGlzdF9oCiAKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2lu
Y2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNs
dWRlICJEZXByZWNhdGVkUHRyTGlzdC5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zMSwyNSArMzMsMzEgQEAgY2xhc3MgSFRNTFN0eWxlRWxl
bWVudDsKIGNsYXNzIFN0eWxlU2hlZXQ7CiBjbGFzcyBTdHJpbmc7CiAKK3R5cGVkZWYgVmVjdG9y
PFJlZlB0cjxTdHlsZVNoZWV0PiA+IFN0eWxlU2hlZXRWZWN0b3I7CisKIGNsYXNzIFN0eWxlU2hl
ZXRMaXN0IDogcHVibGljIFJlZkNvdW50ZWQ8U3R5bGVTaGVldExpc3Q+IHsKIHB1YmxpYzoKLSAg
ICBTdHlsZVNoZWV0TGlzdChEb2N1bWVudCopOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0eWxl
U2hlZXRMaXN0PiBjcmVhdGUoRG9jdW1lbnQqKTsKICAgICB+U3R5bGVTaGVldExpc3QoKTsKIAot
ICAgIHZvaWQgZG9jdW1lbnREZXN0cm95ZWQoKTsKKyAgICB2b2lkIGRvY3VtZW50RGVzdHJveWVk
KCkgeyBtX2RvY3VtZW50ID0gMDsgfQogCi0gICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7Cisg
ICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV92ZWN0b3Iuc2l6ZSgpOyB9CiAg
ICAgU3R5bGVTaGVldCogaXRlbSh1bnNpZ25lZCBpbmRleCk7CiAKLSAgICB2b2lkIGFkZChTdHls
ZVNoZWV0Kik7CisgICAgdm9pZCBhZGQoUGFzc1JlZlB0cjxTdHlsZVNoZWV0Pik7CiAgICAgdm9p
ZCByZW1vdmUoU3R5bGVTaGVldCopOwogCiAgICAgSFRNTFN0eWxlRWxlbWVudCogZ2V0TmFtZWRJ
dGVtKGNvbnN0IFN0cmluZyYpIGNvbnN0OwogCi0gICAgRGVwcmVjYXRlZFB0ckxpc3Q8U3R5bGVT
aGVldD4gc3R5bGVTaGVldHM7CisgICAgdm9pZCBhZGROZXdTaGVldChQYXNzUmVmUHRyPFN0eWxl
U2hlZXQ+IHNoZWV0KTsgLy8gYWRkIHNoZWV0IGtub3duIHRvIGJlIG5ldywgd2l0aCBubyBuXjIg
YWxnb3JpdGhtCisgICAgdm9pZCB0YWtlKFN0eWxlU2hlZXRWZWN0b3ImIHJlc3VsdCk7IC8vIGNs
ZWFyIHRoZSBsaXN0LCBzdG9yaW5nIGEgY29weSBpbiB0aGUgcGFzc2VkLWluIHZlY3RvcgogCiBw
cml2YXRlOgotICAgIERvY3VtZW50KiBtX2RvYzsKKyAgICBTdHlsZVNoZWV0TGlzdChEb2N1bWVu
dCopOworCisgICAgRG9jdW1lbnQqIG1fZG9jdW1lbnQ7CisgICAgU3R5bGVTaGVldFZlY3RvciBt
X3ZlY3RvcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvZG9t
L0RPTUltcGxlbWVudGF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9ET01JbXBs
ZW1lbnRhdGlvbi5jcHAJKHJldmlzaW9uIDMwMTE4KQorKysgV2ViQ29yZS9kb20vRE9NSW1wbGVt
ZW50YXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjQsMTEgKzE2NCwxMiBAQCBzdGF0aWMg
Ym9vbCBpc1NWRzExRmVhdHVyZShjb25zdCBTdHJpbmcgCiB9CiAjZW5kaWYKIAotRE9NSW1wbGVt
ZW50YXRpb246On5ET01JbXBsZW1lbnRhdGlvbigpCitET01JbXBsZW1lbnRhdGlvbjo6RE9NSW1w
bGVtZW50YXRpb24oKQorICAgIDogUmVmQ291bnRlZDxET01JbXBsZW1lbnRhdGlvbj4oMSkKIHsK
IH0KIAotYm9vbCBET01JbXBsZW1lbnRhdGlvbjo6aGFzRmVhdHVyZSAoY29uc3QgU3RyaW5nJiBm
ZWF0dXJlLCBjb25zdCBTdHJpbmcmIHZlcnNpb24pIGNvbnN0Citib29sIERPTUltcGxlbWVudGF0
aW9uOjpoYXNGZWF0dXJlIChjb25zdCBTdHJpbmcmIGZlYXR1cmUsIGNvbnN0IFN0cmluZyYgdmVy
c2lvbikKIHsKICAgICBTdHJpbmcgbG93ZXIgPSBmZWF0dXJlLmxvd2VyKCk7CiAgICAgaWYgKGxv
d2VyID09ICJjb3JlIiB8fCBsb3dlciA9PSAiaHRtbCIgfHwgbG93ZXIgPT0gInhtbCIgfHwgbG93
ZXIgPT0gInhodG1sIikKQEAgLTIyNSwxMyArMjI2LDExIEBAIFBhc3NSZWZQdHI8RG9jdW1lbnRU
eXBlPiBET01JbXBsZW1lbnRhdGkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgZWMg
PSAwOwotICAgIHJldHVybiBuZXcgRG9jdW1lbnRUeXBlKHRoaXMsIDAsIHF1YWxpZmllZE5hbWUs
IHB1YmxpY0lkLCBzeXN0ZW1JZCk7CisgICAgcmV0dXJuIG5ldyBEb2N1bWVudFR5cGUoaW5zdGFu
Y2UoKSwgMCwgcXVhbGlmaWVkTmFtZSwgcHVibGljSWQsIHN5c3RlbUlkKTsKIH0KIAotRE9NSW1w
bGVtZW50YXRpb24qIERPTUltcGxlbWVudGF0aW9uOjpnZXRJbnRlcmZhY2UoY29uc3QgU3RyaW5n
JiAvKmZlYXR1cmUqLykgY29uc3QKK0RPTUltcGxlbWVudGF0aW9uKiBET01JbXBsZW1lbnRhdGlv
bjo6Z2V0SW50ZXJmYWNlKGNvbnN0IFN0cmluZyYgLypmZWF0dXJlKi8pCiB7Ci0gICAgLy8gIyMj
CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTI2Nyw3ICsyNjYsNyBAQCBQYXNzUmVmUHRyPERvY3Vt
ZW50PiBET01JbXBsZW1lbnRhdGlvbjo6CiAgICAgCiAgICAgLy8gV1JPTkdfRE9DVU1FTlRfRVJS
OiBSYWlzZWQgaWYgZG9jdHlwZSBoYXMgYWxyZWFkeSBiZWVuIHVzZWQgd2l0aCBhIGRpZmZlcmVu
dCBkb2N1bWVudCBvciB3YXMKICAgICAvLyBjcmVhdGVkIGZyb20gYSBkaWZmZXJlbnQgaW1wbGVt
ZW50YXRpb24uCi0gICAgaWYgKGRvY3R5cGUgJiYgKGRvY3R5cGUtPmRvY3VtZW50KCkgfHwgZG9j
dHlwZS0+aW1wbGVtZW50YXRpb24oKSAhPSB0aGlzKSkgeworICAgIGlmIChkb2N0eXBlICYmIGRv
Y3R5cGUtPmRvY3VtZW50KCkpIHsKICAgICAgICAgZWMgPSBXUk9OR19ET0NVTUVOVF9FUlI7CiAg
ICAgICAgIHJldHVybiAwOwogICAgIH0KQEAgLTI3NSwxMyArMjc0LDEzIEBAIFBhc3NSZWZQdHI8
RG9jdW1lbnQ+IERPTUltcGxlbWVudGF0aW9uOjoKICAgICBSZWZQdHI8RG9jdW1lbnQ+IGRvYzsK
ICNpZiBFTkFCTEUoU1ZHKQogICAgIGlmIChuYW1lc3BhY2VVUkkgPT0gU1ZHTmFtZXM6OnN2Z05h
bWVzcGFjZVVSSSkKLSAgICAgICAgZG9jID0gbmV3IFNWR0RvY3VtZW50KHRoaXMsIDApOworICAg
ICAgICBkb2MgPSBuZXcgU1ZHRG9jdW1lbnQoaW5zdGFuY2UoKSwgMCk7CiAgICAgZWxzZQogI2Vu
ZGlmCi0gICAgICAgIGlmIChuYW1lc3BhY2VVUkkgPT0gSFRNTE5hbWVzOjp4aHRtbE5hbWVzcGFj
ZVVSSSkKLSAgICAgICAgICAgIGRvYyA9IG5ldyBEb2N1bWVudCh0aGlzLCAwLCB0cnVlKTsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgZG9jID0gbmV3IERvY3VtZW50KHRoaXMsIDApOworICAg
IGlmIChuYW1lc3BhY2VVUkkgPT0gSFRNTE5hbWVzOjp4aHRtbE5hbWVzcGFjZVVSSSkKKyAgICAg
ICAgZG9jID0gbmV3IERvY3VtZW50KGluc3RhbmNlKCksIDAsIHRydWUpOworICAgIGVsc2UKKyAg
ICAgICAgZG9jID0gbmV3IERvY3VtZW50KGluc3RhbmNlKCksIDApOwogCiAgICAgLy8gbm93IGdl
dCB0aGUgaW50ZXJlc3RpbmcgcGFydHMgb2YgdGhlIGRvY3R5cGUKICAgICBpZiAoZG9jdHlwZSkg
ewpAQCAtMzAyLDI0ICszMDEsMjQgQEAgUGFzc1JlZlB0cjxDU1NTdHlsZVNoZWV0PiBET01JbXBs
ZW1lbnRhdAogICAgIGVjID0gMDsKICAgICBDU1NTdHlsZVNoZWV0KiBjb25zdCBudWxsU2hlZXQg
PSAwOwogICAgIFJlZlB0cjxDU1NTdHlsZVNoZWV0PiBzaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0
KG51bGxTaGVldCk7Ci0gICAgc2hlZXQtPnNldE1lZGlhKG5ldyBNZWRpYUxpc3Qoc2hlZXQuZ2V0
KCksIG1lZGlhLCB0cnVlKSk7CisgICAgc2hlZXQtPnNldE1lZGlhKE1lZGlhTGlzdDo6Y3JlYXRl
KHNoZWV0LmdldCgpLCBtZWRpYSwgdHJ1ZSkpOwogICAgIHJldHVybiBzaGVldC5yZWxlYXNlKCk7
CiB9CiAKIFBhc3NSZWZQdHI8RG9jdW1lbnQ+IERPTUltcGxlbWVudGF0aW9uOjpjcmVhdGVEb2N1
bWVudChGcmFtZSogZnJhbWUpCiB7Ci0gICAgcmV0dXJuIG5ldyBEb2N1bWVudCh0aGlzLCBmcmFt
ZSk7CisgICAgcmV0dXJuIG5ldyBEb2N1bWVudChpbnN0YW5jZSgpLCBmcmFtZSk7CiB9CiAKIFBh
c3NSZWZQdHI8SFRNTERvY3VtZW50PiBET01JbXBsZW1lbnRhdGlvbjo6Y3JlYXRlSFRNTERvY3Vt
ZW50KEZyYW1lKiBmcmFtZSkKIHsKLSAgICByZXR1cm4gbmV3IEhUTUxEb2N1bWVudCh0aGlzLCBm
cmFtZSk7CisgICAgcmV0dXJuIG5ldyBIVE1MRG9jdW1lbnQoaW5zdGFuY2UoKSwgZnJhbWUpOwog
fQogCiBET01JbXBsZW1lbnRhdGlvbiogRE9NSW1wbGVtZW50YXRpb246Omluc3RhbmNlKCkKIHsK
LSAgICBzdGF0aWMgUmVmUHRyPERPTUltcGxlbWVudGF0aW9uPiBpID0gbmV3IERPTUltcGxlbWVu
dGF0aW9uOwotICAgIHJldHVybiBpLmdldCgpOworICAgIHN0YXRpYyBET01JbXBsZW1lbnRhdGlv
biogc3RhdGljSW5zdGFuY2UgPSBuZXcgRE9NSW1wbGVtZW50YXRpb247CisgICAgcmV0dXJuIHN0
YXRpY0luc3RhbmNlOwogfQogCiBib29sIERPTUltcGxlbWVudGF0aW9uOjppc1hNTE1JTUVUeXBl
KGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCkBAIC0zNDUsNyArMzQ0LDcgQEAgYm9vbCBET01JbXBs
ZW1lbnRhdGlvbjo6aXNUZXh0TUlNRVR5cGUoYwogCiBQYXNzUmVmUHRyPEhUTUxEb2N1bWVudD4g
RE9NSW1wbGVtZW50YXRpb246OmNyZWF0ZUhUTUxEb2N1bWVudChjb25zdCBTdHJpbmcmIHRpdGxl
KQogewotICAgIFJlZlB0cjxIVE1MRG9jdW1lbnQ+IGQgPSBuZXcgSFRNTERvY3VtZW50KHRoaXMs
IDApOworICAgIFJlZlB0cjxIVE1MRG9jdW1lbnQ+IGQgPSBuZXcgSFRNTERvY3VtZW50KGluc3Rh
bmNlKCksIDApOwogICAgIGQtPm9wZW4oKTsKICAgICBkLT53cml0ZSgiPGh0bWw+PGhlYWQ+PHRp
dGxlPiIgKyB0aXRsZSArICI8L3RpdGxlPjwvaGVhZD48Ym9keT48L2JvZHk+PC9odG1sPiIpOwog
ICAgIHJldHVybiBkLnJlbGVhc2UoKTsKQEAgLTM1NSw0NiArMzU0LDQ2IEBAIFBhc3NSZWZQdHI8
RG9jdW1lbnQ+IERPTUltcGxlbWVudGF0aW9uOjoKIHsKICAgICBpZiAoaW5WaWV3U291cmNlTW9k
ZSkgewogICAgICAgICBpZiAodHlwZSA9PSAidGV4dC9odG1sIiB8fCB0eXBlID09ICJhcHBsaWNh
dGlvbi94aHRtbCt4bWwiIHx8IHR5cGUgPT0gImltYWdlL3N2Zyt4bWwiIHx8IGlzVGV4dE1JTUVU
eXBlKHR5cGUpIHx8IGlzWE1MTUlNRVR5cGUodHlwZSkpCi0gICAgICAgICAgICByZXR1cm4gbmV3
IEhUTUxWaWV3U291cmNlRG9jdW1lbnQodGhpcywgZnJhbWUsIHR5cGUpOworICAgICAgICAgICAg
cmV0dXJuIG5ldyBIVE1MVmlld1NvdXJjZURvY3VtZW50KGluc3RhbmNlKCksIGZyYW1lLCB0eXBl
KTsKICAgICB9CiAKICAgICAvLyBQbHVnaW5zIGNhbm5vdCB0YWtlIEhUTUwgYW5kIFhIVE1MIGZy
b20gdXMsIGFuZCB3ZSBkb24ndCBldmVuIG5lZWQgdG8gaW5pdGlhbGl6ZSB0aGUgcGx1Z2luIGRh
dGFiYXNlIGZvciB0aG9zZS4KICAgICBpZiAodHlwZSA9PSAidGV4dC9odG1sIikKLSAgICAgICAg
cmV0dXJuIG5ldyBIVE1MRG9jdW1lbnQodGhpcywgZnJhbWUpOworICAgICAgICByZXR1cm4gbmV3
IEhUTUxEb2N1bWVudChpbnN0YW5jZSgpLCBmcmFtZSk7CiAgICAgaWYgKHR5cGUgPT0gImFwcGxp
Y2F0aW9uL3hodG1sK3htbCIpCi0gICAgICAgIHJldHVybiBuZXcgRG9jdW1lbnQodGhpcywgZnJh
bWUsIHRydWUpOworICAgICAgICByZXR1cm4gbmV3IERvY3VtZW50KGluc3RhbmNlKCksIGZyYW1l
LCB0cnVlKTsKICAgICAgICAgCiAjaWYgRU5BQkxFKEZUUERJUikKICAgICAvLyBQbHVnaW5zIGNh
bm5vdCB0YWtlIEZUUCBmcm9tIHVzIGVpdGhlcgogICAgIGlmICh0eXBlID09ICJhcHBsaWNhdGlv
bi94LWZ0cC1kaXJlY3RvcnkiKQotICAgICAgICByZXR1cm4gbmV3IEZUUERpcmVjdG9yeURvY3Vt
ZW50KHRoaXMsIGZyYW1lKTsKKyAgICAgICAgcmV0dXJuIG5ldyBGVFBEaXJlY3RvcnlEb2N1bWVu
dChpbnN0YW5jZSgpLCBmcmFtZSk7CiAjZW5kaWYKIAogICAgIC8vIFBERiBpcyBvbmUgaW1hZ2Ug
dHlwZSBmb3Igd2hpY2ggYSBwbHVnaW4gY2FuIG92ZXJyaWRlIGJ1aWx0LWluIHN1cHBvcnQuCiAg
ICAgLy8gV2UgZG8gbm90IHdhbnQgUXVpY2tUaW1lIHRvIHRha2Ugb3ZlciBhbGwgaW1hZ2UgdHlw
ZXMsIG9idmlvdXNseS4KICAgICBpZiAoKHR5cGUgPT0gImFwcGxpY2F0aW9uL3BkZiIgfHwgdHlw
ZSA9PSAidGV4dC9wZGYiKSAmJiBQbHVnaW5JbmZvU3RvcmU6OnN1cHBvcnRzTUlNRVR5cGUodHlw
ZSkpCi0gICAgICAgIHJldHVybiBuZXcgUGx1Z2luRG9jdW1lbnQodGhpcywgZnJhbWUpOworICAg
ICAgICByZXR1cm4gbmV3IFBsdWdpbkRvY3VtZW50KGluc3RhbmNlKCksIGZyYW1lKTsKICAgICBp
ZiAoSW1hZ2U6OnN1cHBvcnRzVHlwZSh0eXBlKSkKLSAgICAgICAgcmV0dXJuIG5ldyBJbWFnZURv
Y3VtZW50KHRoaXMsIGZyYW1lKTsKKyAgICAgICAgcmV0dXJuIG5ldyBJbWFnZURvY3VtZW50KGlu
c3RhbmNlKCksIGZyYW1lKTsKICAgICAvLyBFdmVyeXRoaW5nIGVsc2UgZXhjZXB0IHRleHQvcGxh
aW4gY2FuIGJlIG92ZXJyaWRkZW4gYnkgcGx1Z2lucy4gSW4gcGFydGljdWxhciwgQWRvYmUgU1ZH
IFZpZXdlciBzaG91bGQgYmUgdXNlZCBmb3IgU1ZHLCBpZiBpbnN0YWxsZWQuCiAgICAgLy8gRGlz
YWxsb3dpbmcgcGx1Zy1pbnMgdG8gdXNlIHRleHQvcGxhaW4gcHJldmVudHMgcGx1Zy1pbnMgZnJv
bSBoaWphY2tpbmcgYSBmdW5kYW1lbnRhbCB0eXBlIHRoYXQgdGhlIGJyb3dzZXIgaXMgZXhwZWN0
ZWQgdG8gaGFuZGxlLAogICAgIC8vIGFuZCBhbHNvIHNlcnZlcyBhcyBhbiBvcHRpbWl6YXRpb24g
dG8gcHJldmVudCBsb2FkaW5nIHRoZSBwbHVnLWluIGRhdGFiYXNlIGluIHRoZSBjb21tb24gY2Fz
ZS4KICAgICBpZiAodHlwZSAhPSAidGV4dC9wbGFpbiIgJiYgUGx1Z2luSW5mb1N0b3JlOjpzdXBw
b3J0c01JTUVUeXBlKHR5cGUpKSAKLSAgICAgICAgcmV0dXJuIG5ldyBQbHVnaW5Eb2N1bWVudCh0
aGlzLCBmcmFtZSk7CisgICAgICAgIHJldHVybiBuZXcgUGx1Z2luRG9jdW1lbnQoaW5zdGFuY2Uo
KSwgZnJhbWUpOwogICAgIGlmIChpc1RleHRNSU1FVHlwZSh0eXBlKSkKLSAgICAgICAgcmV0dXJu
IG5ldyBUZXh0RG9jdW1lbnQodGhpcywgZnJhbWUpOworICAgICAgICByZXR1cm4gbmV3IFRleHRE
b2N1bWVudChpbnN0YW5jZSgpLCBmcmFtZSk7CiAKICNpZiBFTkFCTEUoU1ZHKQogICAgIGlmICh0
eXBlID09ICJpbWFnZS9zdmcreG1sIikgewogICAgICAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBm
cmFtZSA/IGZyYW1lLT5zZXR0aW5ncygpIDogMDsKICAgICAgICAgaWYgKCFzZXR0aW5ncyB8fCAh
c2V0dGluZ3MtPnVzZXNEYXNoYm9hcmRCYWNrd2FyZENvbXBhdGliaWxpdHlNb2RlKCkpCi0gICAg
ICAgICAgICByZXR1cm4gbmV3IFNWR0RvY3VtZW50KHRoaXMsIGZyYW1lKTsKKyAgICAgICAgICAg
IHJldHVybiBuZXcgU1ZHRG9jdW1lbnQoaW5zdGFuY2UoKSwgZnJhbWUpOwogICAgIH0KICNlbmRp
ZgogICAgIGlmIChpc1hNTE1JTUVUeXBlKHR5cGUpKQotICAgICAgICByZXR1cm4gbmV3IERvY3Vt
ZW50KHRoaXMsIGZyYW1lKTsKKyAgICAgICAgcmV0dXJuIG5ldyBEb2N1bWVudChpbnN0YW5jZSgp
LCBmcmFtZSk7CiAKLSAgICByZXR1cm4gbmV3IEhUTUxEb2N1bWVudCh0aGlzLCBmcmFtZSk7Cisg
ICAgcmV0dXJuIG5ldyBIVE1MRG9jdW1lbnQoaW5zdGFuY2UoKSwgZnJhbWUpOwogfQogCiB9Cklu
ZGV4OiBXZWJDb3JlL2RvbS9ET01JbXBsZW1lbnRhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvZG9tL0RPTUltcGxlbWVudGF0aW9uLmgJKHJldmlzaW9uIDMwMTE4KQorKysgV2ViQ29yZS9k
b20vRE9NSW1wbGVtZW50YXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDQgQEAKIC8q
Ci0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRE9NIGltcGxlbWVudGF0aW9uIGZvciBLREUu
Ci0gKgogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAg
KiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAg
KiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCkBAIC00
MiwzMiArNDAsMzMgQEAgdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKIAogY2xhc3MgRE9NSW1w
bGVtZW50YXRpb24gOiBwdWJsaWMgUmVmQ291bnRlZDxET01JbXBsZW1lbnRhdGlvbj4gewogcHVi
bGljOgotICAgIHZpcnR1YWwgfkRPTUltcGxlbWVudGF0aW9uKCk7IAotCiAgICAgLy8gRE9NIG1l
dGhvZHMgJiBhdHRyaWJ1dGVzIGZvciBET01JbXBsZW1lbnRhdGlvbgotICAgIGJvb2wgaGFzRmVh
dHVyZShjb25zdCBTdHJpbmcmIGZlYXR1cmUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbikgY29uc3Q7
Ci0gICAgUGFzc1JlZlB0cjxEb2N1bWVudFR5cGU+IGNyZWF0ZURvY3VtZW50VHlwZShjb25zdCBT
dHJpbmcmIHF1YWxpZmllZE5hbWUsIGNvbnN0IFN0cmluZyYgcHVibGljSWQsIGNvbnN0IFN0cmlu
ZyAmc3lzdGVtSWQsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQYXNzUmVmUHRyPERvY3VtZW50PiBj
cmVhdGVEb2N1bWVudChjb25zdCBTdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgU3RyaW5nJiBx
dWFsaWZpZWROYW1lLCBEb2N1bWVudFR5cGUqLCBFeGNlcHRpb25Db2RlJik7CisgICAgc3RhdGlj
IGJvb2wgaGFzRmVhdHVyZShjb25zdCBTdHJpbmcmIGZlYXR1cmUsIGNvbnN0IFN0cmluZyYgdmVy
c2lvbik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RG9jdW1lbnRUeXBlPiBjcmVhdGVEb2N1bWVu
dFR5cGUoY29uc3QgU3RyaW5nJiBxdWFsaWZpZWROYW1lLCBjb25zdCBTdHJpbmcmIHB1YmxpY0lk
LCBjb25zdCBTdHJpbmcgJnN5c3RlbUlkLCBFeGNlcHRpb25Db2RlJik7CisgICAgc3RhdGljIFBh
c3NSZWZQdHI8RG9jdW1lbnQ+IGNyZWF0ZURvY3VtZW50KGNvbnN0IFN0cmluZyYgbmFtZXNwYWNl
VVJJLCBjb25zdCBTdHJpbmcmIHF1YWxpZmllZE5hbWUsIERvY3VtZW50VHlwZSosIEV4Y2VwdGlv
bkNvZGUmKTsKIAotICAgIERPTUltcGxlbWVudGF0aW9uKiBnZXRJbnRlcmZhY2UoY29uc3QgU3Ry
aW5nJiBmZWF0dXJlKSBjb25zdDsKKyAgICBzdGF0aWMgRE9NSW1wbGVtZW50YXRpb24qIGdldElu
dGVyZmFjZShjb25zdCBTdHJpbmcmIGZlYXR1cmUpOwogCiAgICAgLy8gRnJvbSB0aGUgRE9NSW1w
bGVtZW50YXRpb25DU1MgaW50ZXJmYWNlCi0gICAgUGFzc1JlZlB0cjxDU1NTdHlsZVNoZWV0PiBj
cmVhdGVDU1NTdHlsZVNoZWV0KGNvbnN0IFN0cmluZyYgdGl0bGUsIGNvbnN0IFN0cmluZyYgbWVk
aWEsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDU1NTdHlsZVNoZWV0
PiBjcmVhdGVDU1NTdHlsZVNoZWV0KGNvbnN0IFN0cmluZyYgdGl0bGUsIGNvbnN0IFN0cmluZyYg
bWVkaWEsIEV4Y2VwdGlvbkNvZGUmKTsKIAogICAgIC8vIEZyb20gdGhlIEhUTUxET01JbXBsZW1l
bnRhdGlvbiBpbnRlcmZhY2UKLSAgICBQYXNzUmVmUHRyPEhUTUxEb2N1bWVudD4gY3JlYXRlSFRN
TERvY3VtZW50KGNvbnN0IFN0cmluZyYgdGl0bGUpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhU
TUxEb2N1bWVudD4gY3JlYXRlSFRNTERvY3VtZW50KGNvbnN0IFN0cmluZyYgdGl0bGUpOwogCiAg
ICAgLy8gT3RoZXIgbWV0aG9kcyAobm90IHBhcnQgb2YgRE9NKQotICAgIFBhc3NSZWZQdHI8RG9j
dW1lbnQ+IGNyZWF0ZURvY3VtZW50KGNvbnN0IFN0cmluZyYgTUlNRVR5cGUsIEZyYW1lKiwgYm9v
bCBpblZpZXdTb3VyY2VNb2RlKTsKLSAgICBQYXNzUmVmUHRyPERvY3VtZW50PiBjcmVhdGVEb2N1
bWVudChGcmFtZSopOwotICAgIFBhc3NSZWZQdHI8SFRNTERvY3VtZW50PiBjcmVhdGVIVE1MRG9j
dW1lbnQoRnJhbWUqKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxEb2N1bWVudD4gY3JlYXRlRG9j
dW1lbnQoY29uc3QgU3RyaW5nJiBNSU1FVHlwZSwgRnJhbWUqLCBib29sIGluVmlld1NvdXJjZU1v
ZGUpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPERvY3VtZW50PiBjcmVhdGVEb2N1bWVudChGcmFt
ZSopOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxEb2N1bWVudD4gY3JlYXRlSFRNTERvY3Vt
ZW50KEZyYW1lKik7CiAKLSAgICAvLyBSZXR1cm5zIHRoZSBzdGF0aWMgaW5zdGFuY2Ugb2YgdGhp
cyBjbGFzcyAtIG9ubHkgb25lIGluc3RhbmNlIG9mIHRoaXMgY2xhc3Mgc2hvdWxkCisgICAgLy8g
UmV0dXJucyB0aGUgc2luZ2xlIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MuIE9ubHkgb25lIGluc3Rh
bmNlIG9mIHRoaXMgY2xhc3Mgc2hvdWxkCiAgICAgLy8gZXZlciBiZSBwcmVzZW50LCBhbmQgaXMg
dXNlZCBhcyBhIGZhY3RvcnkgbWV0aG9kIGZvciBjcmVhdGluZyBEb2N1bWVudCBvYmplY3RzCiAg
ICAgc3RhdGljIERPTUltcGxlbWVudGF0aW9uKiBpbnN0YW5jZSgpOwogCiAgICAgc3RhdGljIGJv
b2wgaXNYTUxNSU1FVHlwZShjb25zdCBTdHJpbmcmIE1JTUVUeXBlKTsKICAgICBzdGF0aWMgYm9v
bCBpc1RleHRNSU1FVHlwZShjb25zdCBTdHJpbmcmIE1JTUVUeXBlKTsKKworcHJpdmF0ZToKKyAg
ICBET01JbXBsZW1lbnRhdGlvbigpOwogfTsKIAogfSAvL25hbWVzcGFjZQpJbmRleDogV2ViQ29y
ZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNw
cAkocmV2aXNpb24gMzAxMTgpCisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTc4LDYgKzc4LDcgQEAKICNpbmNsdWRlICJOYW1lTm9kZUxpc3QuaCIKICNpbmNs
dWRlICJOb2RlRmlsdGVyLmgiCiAjaW5jbHVkZSAiTm9kZUl0ZXJhdG9yLmgiCisjaW5jbHVkZSAi
Tm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJPdmVyZmxvd0V2ZW50LmgiCiAjaW5jbHVkZSAi
UGFnZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIgpAQCAtMjUxLDE0ICsy
NTIsMTggQEAgc3RhdGljIGJvb2wgYWNjZXB0c0VkaXRpbmdGb2N1cyhOb2RlICpubwogICAgIHJl
dHVybiBmcmFtZS0+ZWRpdG9yKCktPnNob3VsZEJlZ2luRWRpdGluZyhyYW5nZU9mQ29udGVudHMo
cm9vdCkuZ2V0KCkpOwogfQogCi1EZXByZWNhdGVkUHRyTGlzdDxEb2N1bWVudD4qICBEb2N1bWVu
dDo6Y2hhbmdlZERvY3VtZW50cyA9IDA7CitzdGF0aWMgSGFzaFNldDxEb2N1bWVudCo+IGNoYW5n
ZWREb2N1bWVudHMoKQoreworICAgIHN0YXRpYyBIYXNoU2V0PERvY3VtZW50Kj4qIHN0YXRpY0No
YW5nZWREb2N1bWVudHMgPSBuZXcgSGFzaFNldDxEb2N1bWVudCo+OworICAgIHJldHVybiAqc3Rh
dGljQ2hhbmdlZERvY3VtZW50czsKK30KIAogLy8gRnJhbWVWaWV3IG1pZ2h0IGJlIDAKIERvY3Vt
ZW50OjpEb2N1bWVudChET01JbXBsZW1lbnRhdGlvbiogaW1wbCwgRnJhbWUqIGZyYW1lLCBib29s
IGlzWEhUTUwpCiAgICAgOiBDb250YWluZXJOb2RlKDApCiAgICAgLCBtX2ltcGxlbWVudGF0aW9u
KGltcGwpCiAgICAgLCBtX2RvbXRyZWVfdmVyc2lvbigwKQotICAgICwgbV9zdHlsZVNoZWV0cyhu
ZXcgU3R5bGVTaGVldExpc3QodGhpcykpCisgICAgLCBtX3N0eWxlU2hlZXRzKFN0eWxlU2hlZXRM
aXN0OjpjcmVhdGUodGhpcykpCiAgICAgLCBtX3RpdGxlKCIiKQogICAgICwgbV90aXRsZVNldEV4
cGxpY2l0bHkoZmFsc2UpCiAgICAgLCBtX2ltYWdlTG9hZEV2ZW50VGltZXIodGhpcywgJkRvY3Vt
ZW50OjppbWFnZUxvYWRFdmVudFRpbWVyRmlyZWQpCkBAIC00MDksOCArNDE0LDggQEAgRG9jdW1l
bnQ6On5Eb2N1bWVudCgpCiAgICAgICAgIEtKUzo6U2NyaXB0SW50ZXJwcmV0ZXI6OmZvcmdldEFs
bERPTU5vZGVzRm9yRG9jdW1lbnQodGhpcyk7CiAgICAgfQogCi0gICAgaWYgKG1fZG9jQ2hhbmdl
ZCAmJiBjaGFuZ2VkRG9jdW1lbnRzKQotICAgICAgICBjaGFuZ2VkRG9jdW1lbnRzLT5yZW1vdmUo
dGhpcyk7CisgICAgaWYgKG1fZG9jQ2hhbmdlZCkKKyAgICAgICAgY2hhbmdlZERvY3VtZW50cygp
LnJlbW92ZSh0aGlzKTsKICAgICBkZWxldGUgbV90b2tlbml6ZXI7CiAgICAgbV9kb2N1bWVudC5y
ZXNldFNraXBwaW5nUmVmKDApOwogICAgIGRlbGV0ZSBtX3N0eWxlU2VsZWN0b3I7CkBAIC0xMDI2
LDE4ICsxMDMxLDE1IEBAIFBhc3NSZWZQdHI8VHJlZVdhbGtlcj4gRG9jdW1lbnQ6OmNyZWF0ZVQK
IHZvaWQgRG9jdW1lbnQ6OnNldERvY3VtZW50Q2hhbmdlZChib29sIGIpCiB7CiAgICAgaWYgKGIp
IHsKLSAgICAgICAgaWYgKCFtX2RvY0NoYW5nZWQpIHsKLSAgICAgICAgICAgIGlmICghY2hhbmdl
ZERvY3VtZW50cykKLSAgICAgICAgICAgICAgICBjaGFuZ2VkRG9jdW1lbnRzID0gbmV3IERlcHJl
Y2F0ZWRQdHJMaXN0PERvY3VtZW50PjsKLSAgICAgICAgICAgIGNoYW5nZWREb2N1bWVudHMtPmFw
cGVuZCh0aGlzKTsKLSAgICAgICAgfQorICAgICAgICBpZiAoIW1fZG9jQ2hhbmdlZCkKKyAgICAg
ICAgICAgIGNoYW5nZWREb2N1bWVudHMoKS5hZGQodGhpcyk7CiAgICAgICAgIGlmIChtX2FjY2Vz
c0tleU1hcFZhbGlkKSB7CiAgICAgICAgICAgICBtX2FjY2Vzc0tleU1hcFZhbGlkID0gZmFsc2U7
CiAgICAgICAgICAgICBtX2VsZW1lbnRzQnlBY2Nlc3NLZXkuY2xlYXIoKTsKICAgICAgICAgfQog
ICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChtX2RvY0NoYW5nZWQgJiYgY2hhbmdlZERvY3VtZW50
cykKLSAgICAgICAgICAgIGNoYW5nZWREb2N1bWVudHMtPnJlbW92ZSh0aGlzKTsKKyAgICAgICAg
aWYgKG1fZG9jQ2hhbmdlZCkKKyAgICAgICAgICAgIGNoYW5nZWREb2N1bWVudHMoKS5yZW1vdmUo
dGhpcyk7CiAgICAgfQogCiAgICAgbV9kb2NDaGFuZ2VkID0gYjsKQEAgLTExMzUsMTIgKzExMzcs
MTQgQEAgdm9pZCBEb2N1bWVudDo6dXBkYXRlUmVuZGVyaW5nKCkKIAogdm9pZCBEb2N1bWVudDo6
dXBkYXRlRG9jdW1lbnRzUmVuZGVyaW5nKCkKIHsKLSAgICBpZiAoIWNoYW5nZWREb2N1bWVudHMp
Ci0gICAgICAgIHJldHVybjsKKyAgICBIYXNoU2V0PERvY3VtZW50Kj4gc2V0OworICAgIGNoYW5n
ZWREb2N1bWVudHMoKS5zd2FwKHNldCk7CiAKLSAgICB3aGlsZSAoRG9jdW1lbnQqIGRvYyA9IGNo
YW5nZWREb2N1bWVudHMtPnRha2UoKSkgewotICAgICAgICBkb2MtPm1fZG9jQ2hhbmdlZCA9IGZh
bHNlOwotICAgICAgICBkb2MtPnVwZGF0ZVJlbmRlcmluZygpOworICAgIEhhc2hTZXQ8RG9jdW1l
bnQqPjo6aXRlcmF0b3IgZW5kID0gc2V0LmVuZCgpOworICAgIGZvciAoSGFzaFNldDxEb2N1bWVu
dCo+OjppdGVyYXRvciBpdCA9IHNldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAg
ICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gKml0OworICAgICAgICBkb2N1bWVudC0+bV9kb2NDaGFu
Z2VkID0gZmFsc2U7CisgICAgICAgIGRvY3VtZW50LT51cGRhdGVSZW5kZXJpbmcoKTsKICAgICB9
CiB9CiAKQEAgLTIwNzYsOCArMjA4MCw4IEBAIHZvaWQgRG9jdW1lbnQ6OnJlY2FsY1N0eWxlU2Vs
ZWN0b3IoKQogICAgIGlmICghcmVuZGVyZXIoKSB8fCAhYXR0YWNoZWQoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgRGVwcmVjYXRlZFB0ckxpc3Q8U3R5bGVTaGVldD4gb2xkU3R5bGVTaGVldHMg
PSBtX3N0eWxlU2hlZXRzLT5zdHlsZVNoZWV0czsKLSAgICBtX3N0eWxlU2hlZXRzLT5zdHlsZVNo
ZWV0cy5jbGVhcigpOworICAgIFN0eWxlU2hlZXRWZWN0b3Igb2xkU3R5bGVTaGVldHM7CisgICAg
bV9zdHlsZVNoZWV0cy0+dGFrZShvbGRTdHlsZVNoZWV0cyk7CiAKICAgICBib29sIG1hdGNoQXV0
aG9yQW5kVXNlclN0eWxlcyA9IHRydWU7CiAgICAgaWYgKFNldHRpbmdzKiBzZXR0aW5ncyA9IHRo
aXMtPnNldHRpbmdzKCkpCkBAIC0yMTg2LDEwICsyMTkwLDggQEAgdm9pZCBEb2N1bWVudDo6cmVj
YWxjU3R5bGVTZWxlY3RvcigpCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBp
ZiAoc2hlZXQpIHsKLSAgICAgICAgICAgIHNoZWV0LT5yZWYoKTsKLSAgICAgICAgICAgIG1fc3R5
bGVTaGVldHMtPnN0eWxlU2hlZXRzLmFwcGVuZChzaGVldCk7Ci0gICAgICAgIH0KKyAgICAgICAg
aWYgKHNoZWV0KQorICAgICAgICAgICAgbV9zdHlsZVNoZWV0cy0+YWRkTmV3U2hlZXQoc2hlZXQp
OwogCiAgICAgICAgIC8vIEZvciBIVE1MIGRvY3VtZW50cywgc3R5bGVzaGVldHMgYXJlIG5vdCBh
bGxvd2VkIHdpdGhpbi9hZnRlciB0aGUgPEJPRFk+IHRhZy4gU28gd2UKICAgICAgICAgLy8gY2Fu
IHN0b3Agc2VhcmNoaW5nIGhlcmUuCkBAIC0yMTk3LDExICsyMTk5LDYgQEAgdm9pZCBEb2N1bWVu
dDo6cmVjYWxjU3R5bGVTZWxlY3RvcigpCiAgICAgICAgICAgICBicmVhazsKICAgICB9CiAKLSAg
ICAvLyBEZS1yZWZlcmVuY2UgYWxsIHRoZSBzdHlsZXNoZWV0cyBpbiB0aGUgb2xkIGxpc3QKLSAg
ICBEZXByZWNhdGVkUHRyTGlzdEl0ZXJhdG9yPFN0eWxlU2hlZXQ+IGl0KG9sZFN0eWxlU2hlZXRz
KTsKLSAgICBmb3IgKDsgaXQuY3VycmVudCgpOyArK2l0KQotICAgICAgICBpdC5jdXJyZW50KCkt
PmRlcmVmKCk7Ci0KICAgICAvLyBDcmVhdGUgYSBuZXcgc3R5bGUgc2VsZWN0b3IKICAgICBkZWxl
dGUgbV9zdHlsZVNlbGVjdG9yOwogICAgIG1fc3R5bGVTZWxlY3RvciA9IG5ldyBDU1NTdHlsZVNl
bGVjdG9yKHRoaXMsIHVzZXJTdHlsZVNoZWV0KCksIG1fc3R5bGVTaGVldHMuZ2V0KCksIG1fbWFw
cGVkRWxlbWVudFNoZWV0LmdldCgpLCAhaW5Db21wYXRNb2RlKCksIG1hdGNoQXV0aG9yQW5kVXNl
clN0eWxlcyk7CkBAIC0yNDU1LDUwICsyNDUyLDQ5IEBAIFBhc3NSZWZQdHI8RXZlbnQ+IERvY3Vt
ZW50OjpjcmVhdGVFdmVudCgKICAgICByZXR1cm4gMDsKIH0KIAotQ1NTU3R5bGVEZWNsYXJhdGlv
biAqRG9jdW1lbnQ6OmdldE92ZXJyaWRlU3R5bGUoRWxlbWVudCAqLyplbHQqLywgY29uc3QgU3Ry
aW5nICYvKnBzZXVkb0VsdCovKQorQ1NTU3R5bGVEZWNsYXJhdGlvbiogRG9jdW1lbnQ6OmdldE92
ZXJyaWRlU3R5bGUoRWxlbWVudCosIGNvbnN0IFN0cmluZyYpCiB7Ci0gICAgcmV0dXJuIDA7IC8v
ICMjIworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgRG9j
dW1lbnQ6OmhhbmRsZVdpbmRvd0V2ZW50KEV2ZW50ICpldnQsIGJvb2wgdXNlQ2FwdHVyZSkKK3Zv
aWQgRG9jdW1lbnQ6OmhhbmRsZVdpbmRvd0V2ZW50KEV2ZW50KiBldmVudCwgYm9vbCB1c2VDYXB0
dXJlKQogewotICAgIGlmIChtX3dpbmRvd0V2ZW50TGlzdGVuZXJzLmlzRW1wdHkoKSkKLSAgICAg
ICAgcmV0dXJuOwotICAgICAgICAKLSAgICAvLyBpZiBhbnkgaHRtbCBldmVudCBsaXN0ZW5lcnMg
YXJlIHJlZ2lzdGVyZWQgb24gdGhlIHdpbmRvdywgdGhlbiBkaXNwYXRjaCB0aGVtIGhlcmUKLSAg
ICBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lckxpc3QgbGlzdGVuZXJzQ29weSA9IG1fd2luZG93RXZl
bnRMaXN0ZW5lcnM7Ci0gICAgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXJMaXN0OjppdGVyYXRvciBp
dCA9IGxpc3RlbmVyc0NvcHkuYmVnaW4oKTsKLSAgICAKLSAgICBmb3IgKDsgaXQgIT0gbGlzdGVu
ZXJzQ29weS5lbmQoKTsgKytpdCkKLSAgICAgICAgaWYgKCgqaXQpLT5ldmVudFR5cGUoKSA9PSBl
dnQtPnR5cGUoKSAmJiAoKml0KS0+dXNlQ2FwdHVyZSgpID09IHVzZUNhcHR1cmUgJiYgISgqaXQp
LT5yZW1vdmVkKCkpIAotICAgICAgICAgICAgKCppdCktPmxpc3RlbmVyKCktPmhhbmRsZUV2ZW50
KGV2dCwgdHJ1ZSk7CisgICAgLy8gaWYgYW55IEhUTUwgZXZlbnQgbGlzdGVuZXJzIGFyZSByZWdp
c3RlcmVkIG9uIHRoZSB3aW5kb3csIHRoZW4gZGlzcGF0Y2ggdGhlbSBoZXJlCisgICAgRXZlbnRM
aXN0ZW5lclZlY3RvciBsaXN0ZW5lcnNDb3B5ID0gbV93aW5kb3dFdmVudExpc3RlbmVyczsKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpc3RlbmVyc0NvcHkuc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyID0gbGlzdGVuZXJzQ29weVtp
XS5nZXQoKTsKKyAgICAgICAgaWYgKGxpc3RlbmVyLT5ldmVudFR5cGUoKSA9PSBldmVudC0+dHlw
ZSgpICYmIGxpc3RlbmVyLT51c2VDYXB0dXJlKCkgPT0gdXNlQ2FwdHVyZSAmJiAhbGlzdGVuZXIt
PnJlbW92ZWQoKSkgCisgICAgICAgICAgICBsaXN0ZW5lci0+bGlzdGVuZXIoKS0+aGFuZGxlRXZl
bnQoZXZlbnQsIHRydWUpOworICAgIH0KIH0KIAotdm9pZCBEb2N1bWVudDo6c2V0SFRNTFdpbmRv
d0V2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nICZldmVudFR5cGUsIFBhc3NSZWZQdHI8
RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIpCit2b2lkIERvY3VtZW50OjpzZXRIVE1MV2luZG93RXZl
bnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxFdmVu
dExpc3RlbmVyPiBsaXN0ZW5lcikKIHsKLSAgICAvLyBJZiB3ZSBhbHJlYWR5IGhhdmUgaXQgd2Ug
ZG9uJ3Qgd2FudCByZW1vdmVXaW5kb3dFdmVudExpc3RlbmVyIHRvIGRlbGV0ZSBpdAogICAgIHJl
bW92ZUhUTUxXaW5kb3dFdmVudExpc3RlbmVyKGV2ZW50VHlwZSk7CiAgICAgaWYgKGxpc3RlbmVy
KQogICAgICAgICBhZGRXaW5kb3dFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgbGlzdGVuZXIsIGZh
bHNlKTsKIH0KIAotRXZlbnRMaXN0ZW5lciAqRG9jdW1lbnQ6OmdldEhUTUxXaW5kb3dFdmVudExp
c3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyAmZXZlbnRUeXBlKQorRXZlbnRMaXN0ZW5lciogRG9j
dW1lbnQ6OmdldEhUTUxXaW5kb3dFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZl
bnRUeXBlKQogewotICAgIFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyTGlzdDo6aXRlcmF0b3IgaXQg
PSBtX3dpbmRvd0V2ZW50TGlzdGVuZXJzLmJlZ2luKCk7Ci0gICAgICAgZm9yICg7IGl0ICE9IG1f
d2luZG93RXZlbnRMaXN0ZW5lcnMuZW5kKCk7ICsraXQpCi0gICAgICAgIGlmICggKCppdCktPmV2
ZW50VHlwZSgpID09IGV2ZW50VHlwZSAmJiAoKml0KS0+bGlzdGVuZXIoKS0+aXNIVE1MRXZlbnRM
aXN0ZW5lcigpKQotICAgICAgICAgICAgcmV0dXJuICgqaXQpLT5saXN0ZW5lcigpOworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbV93aW5kb3dFdmVudExpc3RlbmVycy5zaXplKCk7ICsraSkg
eworICAgICAgICBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciogbGlzdGVuZXIgPSBtX3dpbmRvd0V2
ZW50TGlzdGVuZXJzW2ldLmdldCgpOworICAgICAgICBpZiAobGlzdGVuZXItPmV2ZW50VHlwZSgp
ID09IGV2ZW50VHlwZSAmJiBsaXN0ZW5lci0+bGlzdGVuZXIoKS0+aXNIVE1MRXZlbnRMaXN0ZW5l
cigpKQorICAgICAgICAgICAgcmV0dXJuIGxpc3RlbmVyLT5saXN0ZW5lcigpOworICAgIH0KICAg
ICByZXR1cm4gMDsKIH0KIAotdm9pZCBEb2N1bWVudDo6cmVtb3ZlSFRNTFdpbmRvd0V2ZW50TGlz
dGVuZXIoY29uc3QgQXRvbWljU3RyaW5nICZldmVudFR5cGUpCit2b2lkIERvY3VtZW50OjpyZW1v
dmVIVE1MV2luZG93RXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSkK
IHsKLSAgICBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lckxpc3Q6Oml0ZXJhdG9yIGl0ID0gbV93aW5k
b3dFdmVudExpc3RlbmVycy5iZWdpbigpOwotICAgIGZvciAoOyBpdCAhPSBtX3dpbmRvd0V2ZW50
TGlzdGVuZXJzLmVuZCgpOyArK2l0KQotICAgICAgICBpZiAoICgqaXQpLT5ldmVudFR5cGUoKSA9
PSBldmVudFR5cGUgJiYgKCppdCktPmxpc3RlbmVyKCktPmlzSFRNTEV2ZW50TGlzdGVuZXIoKSkg
ewotICAgICAgICAgICAgbV93aW5kb3dFdmVudExpc3RlbmVycy5yZW1vdmUoaXQpOwotICAgICAg
ICAgICAgcmV0dXJuOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV93aW5kb3dFdmVudExp
c3RlbmVycy5zaXplKCk7ICsraSkgeworICAgICAgICBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciog
bGlzdGVuZXIgPSBtX3dpbmRvd0V2ZW50TGlzdGVuZXJzW2ldLmdldCgpOworICAgICAgICBpZiAo
bGlzdGVuZXItPmV2ZW50VHlwZSgpID09IGV2ZW50VHlwZSAmJiBsaXN0ZW5lci0+bGlzdGVuZXIo
KS0+aXNIVE1MRXZlbnRMaXN0ZW5lcigpKSB7CisgICAgICAgICAgICBtX3dpbmRvd0V2ZW50TGlz
dGVuZXJzLnJlbW92ZShpKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisgICAgfQog
fQogCiB2b2lkIERvY3VtZW50OjphZGRXaW5kb3dFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0
cmluZyAmZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyLCBib29s
IHVzZUNhcHR1cmUpCkBAIC0yNTA5LDI0ICsyNTA1LDI3IEBAIHZvaWQgRG9jdW1lbnQ6OmFkZFdp
bmRvd0V2ZW50TGlzdGVuZXIoY28KICAgICBtX3dpbmRvd0V2ZW50TGlzdGVuZXJzLmFwcGVuZChu
ZXcgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBsaXN0ZW5lciwgdXNlQ2FwdHVy
ZSkpOwogfQogCi12b2lkIERvY3VtZW50OjpyZW1vdmVXaW5kb3dFdmVudExpc3RlbmVyKGNvbnN0
IEF0b21pY1N0cmluZyAmZXZlbnRUeXBlLCBFdmVudExpc3RlbmVyICpsaXN0ZW5lciwgYm9vbCB1
c2VDYXB0dXJlKQordm9pZCBEb2N1bWVudDo6cmVtb3ZlV2luZG93RXZlbnRMaXN0ZW5lcihjb25z
dCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciogbGlzdGVuZXIsIGJvb2wg
dXNlQ2FwdHVyZSkKIHsKICAgICBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciBybChldmVudFR5cGUs
IGxpc3RlbmVyLCB1c2VDYXB0dXJlKTsKLSAgICBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lckxpc3Q6
Oml0ZXJhdG9yIGl0ID0gbV93aW5kb3dFdmVudExpc3RlbmVycy5iZWdpbigpOwotICAgIGZvciAo
OyBpdCAhPSBtX3dpbmRvd0V2ZW50TGlzdGVuZXJzLmVuZCgpOyArK2l0KQotICAgICAgICBpZiAo
KigqaXQpID09IHJsKSB7Ci0gICAgICAgICAgICBtX3dpbmRvd0V2ZW50TGlzdGVuZXJzLnJlbW92
ZShpdCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3dpbmRvd0V2ZW50TGlzdGVuZXJz
LnNpemUoKTsgKytpKSB7CisgICAgICAgIFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyKiBsaXN0ZW5l
ciA9IG1fd2luZG93RXZlbnRMaXN0ZW5lcnNbaV0uZ2V0KCk7CisgICAgICAgIGlmICgqbGlzdGVu
ZXIgPT0gcmwpIHsKKyAgICAgICAgICAgIG1fd2luZG93RXZlbnRMaXN0ZW5lcnMucmVtb3ZlKGkp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CisgICAgfQogfQogCi1ib29sIERvY3Vt
ZW50OjpoYXNXaW5kb3dFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyAmZXZlbnRUeXBl
KQorYm9vbCBEb2N1bWVudDo6aGFzV2luZG93RXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJp
bmcmIGV2ZW50VHlwZSkKIHsKLSAgICBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lckxpc3Q6Oml0ZXJh
dG9yIGl0ID0gbV93aW5kb3dFdmVudExpc3RlbmVycy5iZWdpbigpOwotICAgIGZvciAoOyBpdCAh
PSBtX3dpbmRvd0V2ZW50TGlzdGVuZXJzLmVuZCgpOyArK2l0KQotICAgICAgICBpZiAoKCppdCkt
PmV2ZW50VHlwZSgpID09IGV2ZW50VHlwZSkgeworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bV93aW5kb3dFdmVudExpc3RlbmVycy5zaXplKCk7ICsraSkgeworICAgICAgICBSZWdpc3RlcmVk
RXZlbnRMaXN0ZW5lciogbGlzdGVuZXIgPSBtX3dpbmRvd0V2ZW50TGlzdGVuZXJzW2ldLmdldCgp
OworICAgICAgICBpZiAobGlzdGVuZXItPmV2ZW50VHlwZSgpID09IGV2ZW50VHlwZSkgeworICAg
ICAgICAgICAgbV93aW5kb3dFdmVudExpc3RlbmVycy5yZW1vdmUoaSk7CiAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgfQorICAgIH0KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKQEAg
LTI1NTUsMzMgKzI1NTQsMzIgQEAgdm9pZCBEb2N1bWVudDo6cmVtb3ZlSW1hZ2UoSFRNTEltYWdl
TG9hZAogewogICAgIC8vIFJlbW92ZSBpbnN0YW5jZXMgb2YgdGhpcyBpbWFnZSBmcm9tIGJvdGgg
bGlzdHMuCiAgICAgLy8gVXNlIGxvb3BzIGJlY2F1c2Ugd2UgYWxsb3cgbXVsdGlwbGUgaW5zdGFu
Y2VzIHRvIGdldCBpbnRvIHRoZSBsaXN0cy4KLSAgICB3aGlsZSAobV9pbWFnZUxvYWRFdmVudERp
c3BhdGNoU29vbkxpc3QucmVtb3ZlUmVmKGltYWdlKSkgeyB9Ci0gICAgd2hpbGUgKG1faW1hZ2VM
b2FkRXZlbnREaXNwYXRjaGluZ0xpc3QucmVtb3ZlUmVmKGltYWdlKSkgeyB9CisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtX2ltYWdlTG9hZEV2ZW50RGlzcGF0Y2hTb29uTGlzdC5zaXplKCk7
ICsraSkgeworICAgICAgICBpZiAobV9pbWFnZUxvYWRFdmVudERpc3BhdGNoU29vbkxpc3RbaV0g
PT0gaW1hZ2UpCisgICAgICAgICAgICBtX2ltYWdlTG9hZEV2ZW50RGlzcGF0Y2hTb29uTGlzdFtp
XSA9IDA7CisgICAgfQorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9pbWFnZUxvYWRFdmVu
dERpc3BhdGNoaW5nTGlzdC5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAobV9pbWFnZUxvYWRF
dmVudERpc3BhdGNoaW5nTGlzdFtpXSA9PSBpbWFnZSkKKyAgICAgICAgICAgIG1faW1hZ2VMb2Fk
RXZlbnREaXNwYXRjaGluZ0xpc3RbaV0gPSAwOworICAgIH0KICAgICBpZiAobV9pbWFnZUxvYWRF
dmVudERpc3BhdGNoU29vbkxpc3QuaXNFbXB0eSgpKQogICAgICAgICBtX2ltYWdlTG9hZEV2ZW50
VGltZXIuc3RvcCgpOwogfQogCiB2b2lkIERvY3VtZW50OjpkaXNwYXRjaEltYWdlTG9hZEV2ZW50
c05vdygpCiB7Ci0gICAgLy8gbmVlZCB0byBhdm9pZCByZS1lbnRlcmluZyB0aGlzIGZ1bmN0aW9u
OyBpZiBuZXcgZGlzcGF0Y2hlcyBhcmUKKyAgICAvLyBOZWVkIHRvIGF2b2lkIHJlLWVudGVyaW5n
IHRoaXMgZnVuY3Rpb247IGlmIG5ldyBkaXNwYXRjaGVzIGFyZQogICAgIC8vIHNjaGVkdWxlZCBi
ZWZvcmUgdGhlIHBhcmVudCBmaW5pc2hlcyBwcm9jZXNzaW5nIHRoZSBsaXN0LCB0aGV5Ci0gICAg
Ly8gd2lsbCBzZXQgYSB0aW1lciBhbmQgZXZlbnR1YWxseSBiZSBwcm9jZXNzZWQKLSAgICBpZiAo
IW1faW1hZ2VMb2FkRXZlbnREaXNwYXRjaGluZ0xpc3QuaXNFbXB0eSgpKSB7CisgICAgLy8gd2ls
bCBzZXQgYSB0aW1lciBhbmQgZXZlbnR1YWxseSBiZSBwcm9jZXNzZWQuCisgICAgaWYgKCFtX2lt
YWdlTG9hZEV2ZW50RGlzcGF0Y2hpbmdMaXN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwot
ICAgIH0KIAogICAgIG1faW1hZ2VMb2FkRXZlbnRUaW1lci5zdG9wKCk7CiAgICAgCi0gICAgbV9p
bWFnZUxvYWRFdmVudERpc3BhdGNoaW5nTGlzdCA9IG1faW1hZ2VMb2FkRXZlbnREaXNwYXRjaFNv
b25MaXN0OwotICAgIG1faW1hZ2VMb2FkRXZlbnREaXNwYXRjaFNvb25MaXN0LmNsZWFyKCk7Ci0g
ICAgZm9yIChEZXByZWNhdGVkUHRyTGlzdEl0ZXJhdG9yPEhUTUxJbWFnZUxvYWRlcj4gaXQobV9p
bWFnZUxvYWRFdmVudERpc3BhdGNoaW5nTGlzdCk7IGl0LmN1cnJlbnQoKTspIHsKLSAgICAgICAg
SFRNTEltYWdlTG9hZGVyKiBpbWFnZSA9IGl0LmN1cnJlbnQoKTsKLSAgICAgICAgLy8gTXVzdCBh
ZHZhbmNlIGl0ZXJhdG9yICpiZWZvcmUqIGRpc3BhdGNoaW5nIGNhbGwuCi0gICAgICAgIC8vIE90
aGVyd2lzZSwgaXQgbWlnaHQgYmUgYWR2YW5jZWQgYXV0b21hdGljYWxseSBpZiBkaXNwYXRjaGlu
ZyB0aGUgY2FsbCBoYWQgYSBzaWRlIGVmZmVjdAotICAgICAgICAvLyBvZiBkZXN0cm95aW5nIHRo
ZSBjdXJyZW50IEhUTUxJbWFnZUxvYWRlciwgYW5kIHRoZW4gd2Ugd291bGQgYWR2YW5jZSBwYXN0
IHRoZSAqbmV4dCogaXRlbSwKLSAgICAgICAgLy8gbWlzc2luZyBvbmUgYWx0b2dldGhlci4KLSAg
ICAgICAgKytpdDsKLSAgICAgICAgaW1hZ2UtPmRpc3BhdGNoTG9hZEV2ZW50KCk7CisgICAgbV9p
bWFnZUxvYWRFdmVudERpc3BhdGNoaW5nTGlzdC5zd2FwKG1faW1hZ2VMb2FkRXZlbnREaXNwYXRj
aFNvb25MaXN0KTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1faW1hZ2VMb2FkRXZlbnRE
aXNwYXRjaGluZ0xpc3Quc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKEhUTUxJbWFnZUxvYWRl
ciogaW1hZ2UgPSBtX2ltYWdlTG9hZEV2ZW50RGlzcGF0Y2hpbmdMaXN0W2ldKQorICAgICAgICAg
ICAgaW1hZ2UtPmRpc3BhdGNoTG9hZEV2ZW50KCk7CiAgICAgfQogICAgIG1faW1hZ2VMb2FkRXZl
bnREaXNwYXRjaGluZ0xpc3QuY2xlYXIoKTsKIH0KQEAgLTI3ODMsMTMgKzI3ODEsMTMgQEAgVUNo
YXIgRG9jdW1lbnQ6OmJhY2tzbGFzaEFzQ3VycmVuY3lTeW1ibwogICAgIHJldHVybiBtX2RlY29k
ZXItPmVuY29kaW5nKCkuYmFja3NsYXNoQXNDdXJyZW5jeVN5bWJvbCgpOwogfQogCi1EZXByZWNh
dGVkU3RyaW5nIERvY3VtZW50Ojpjb21wbGV0ZVVSTChjb25zdCBEZXByZWNhdGVkU3RyaW5nJiB1
cmwpCitEZXByZWNhdGVkU3RyaW5nIERvY3VtZW50OjpkZXByZWNhdGVkQ29tcGxldGVVUkwoY29u
c3QgRGVwcmVjYXRlZFN0cmluZyYgdXJsKQogewotICAgIC8vIEZJWE1FOiBUaGlzIHRyZWF0cyBu
dWxsIFVSTHMgdGhlIHNhbWUgYXMgZW1wdHkgVVJMcywgdW5saWtlIHRoZSBTdHJpbmcgZnVuY3Rp
b24gYmVsb3cuCisgICAgLy8gTm90ZTogVGhpcyB0cmVhdHMgbnVsbCBVUkxzIGFzIGVtcHR5IFVS
THMsIGFuZCByZXNvbHZlcyB0aGVtIHJlbGF0aXZlIHRvIHRoZSBiYXNlLAorICAgIC8vIHVubGlr
ZSB0aGUgY29tcGxldGVVUkwgZnVuY3Rpb24uCiAKICAgICAvLyBJZiBib3RoIHRoZSBVUkwgYW5k
IGJhc2UgVVJMIGFyZSBlbXB0eSwgbGlrZSB0aGV5IGFyZSBmb3IgZG9jdW1lbnRzCiAgICAgLy8g
Y3JlYXRlZCB1c2luZyBET01JbXBsZW1lbnRhdGlvbjo6Y3JlYXRlRG9jdW1lbnQsIGp1c3QgcmV0
dXJuIHRoZSBwYXNzZWQgaW4gVVJMLgotICAgIC8vIChXZSBkbyB0aGlzIGJlY2F1c2UgdXJsKCkg
cmV0dXJucyAiYWJvdXQ6YmxhbmsiIGZvciBlbXB0eSBVUkxzLgogICAgIGlmIChtX3VybC5pc0Vt
cHR5KCkgJiYgbV9iYXNlVVJMLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHVybDsKICAgICBp
ZiAoIW1fZGVjb2RlcikKQEAgLTI3OTksMTEgKzI3OTcsMTUgQEAgRGVwcmVjYXRlZFN0cmluZyBE
b2N1bWVudDo6Y29tcGxldGVVUkwoYwogCiBTdHJpbmcgRG9jdW1lbnQ6OmNvbXBsZXRlVVJMKGNv
bnN0IFN0cmluZyYgdXJsKQogewotICAgIC8vIEZJWE1FOiBUaGlzIGFsd2F5cyByZXR1cm5zIG51
bGwgd2hlbiBwYXNzZWQgYSBudWxsIFVSTCwgdW5saWtlIHRoZSBEZXByZWNhdGVkU3RyaW5nIGZ1
bmN0aW9uIGFib3ZlLgotICAgIC8vIENvZGUgcmVsaWVzIG9uIHRoaXMgYmVoYXZpb3IsIG5hbWVs
eSB0aGUgaHJlZiBwcm9wZXJ0eSBvZiA8YT4gYW5kIHRoZSBkYXRhIHByb3BlcnR5IG9mIDxvYmpl
Y3Q+LgogICAgIGlmICh1cmwuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiB1cmw7Ci0gICAgcmV0
dXJuIGNvbXBsZXRlVVJMKHVybC5kZXByZWNhdGVkU3RyaW5nKCkpOworICAgIC8vIElmIGJvdGgg
dGhlIFVSTCBhbmQgYmFzZSBVUkwgYXJlIGVtcHR5LCBsaWtlIHRoZXkgYXJlIGZvciBkb2N1bWVu
dHMKKyAgICAvLyBjcmVhdGVkIHVzaW5nIERPTUltcGxlbWVudGF0aW9uOjpjcmVhdGVEb2N1bWVu
dCwganVzdCByZXR1cm4gdGhlIHBhc3NlZCBpbiBVUkwuCisgICAgaWYgKG1fdXJsLmlzRW1wdHko
KSAmJiBtX2Jhc2VVUkwuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gdXJsOworICAgIGlmICgh
bV9kZWNvZGVyKQorICAgICAgICByZXR1cm4gS1VSTChiYXNlVVJMKCksIHVybC5kZXByZWNhdGVk
U3RyaW5nKCkpLmRlcHJlY2F0ZWRTdHJpbmcoKTsKKyAgICByZXR1cm4gS1VSTChiYXNlVVJMKCks
IHVybC5kZXByZWNhdGVkU3RyaW5nKCksIG1fZGVjb2Rlci0+ZW5jb2RpbmcoKSkuZGVwcmVjYXRl
ZFN0cmluZygpOwogfQogCiBib29sIERvY3VtZW50OjppblBhZ2VDYWNoZSgpCkluZGV4OiBXZWJD
b3JlL2RvbS9Eb2N1bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmgJ
KHJldmlzaW9uIDMwMTE4KQorKysgV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtMjcsOCArMjcsNiBAQAogCiAjaW5jbHVkZSAiQXR0ci5oIgogI2luY2x1ZGUgIkNvbG9y
LmgiCi0jaW5jbHVkZSAiRGVwcmVjYXRlZFB0ckxpc3QuaCIKLSNpbmNsdWRlICJEZXByZWNhdGVk
VmFsdWVMaXN0LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRNYXJrZXIuaCIKICNpbmNsdWRlICJIVE1M
Q29sbGVjdGlvbi5oIgogI2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgpAQCAtMzQwLDcgKzMz
OCw2IEBAIHB1YmxpYzoKICAgICBQYXNzUmVmUHRyPEVkaXRpbmdUZXh0PiBjcmVhdGVFZGl0aW5n
VGV4dE5vZGUoY29uc3QgU3RyaW5nJik7CiAKICAgICB2aXJ0dWFsIHZvaWQgcmVjYWxjU3R5bGUo
IFN0eWxlQ2hhbmdlID0gTm9DaGFuZ2UgKTsKLSAgICBzdGF0aWMgRGVwcmVjYXRlZFB0ckxpc3Q8
RG9jdW1lbnQ+KiBjaGFuZ2VkRG9jdW1lbnRzOwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVSZW5k
ZXJpbmcoKTsKICAgICB2b2lkIHVwZGF0ZUxheW91dCgpOwogICAgIHZvaWQgdXBkYXRlTGF5b3V0
SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CkBAIC0zNzksOSArMzc2LDEwIEBAIHB1YmxpYzoK
ICAgICBTdHJpbmcgYmFzZVRhcmdldCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFzZVRhcmdldDsgfQog
ICAgIHZvaWQgc2V0QmFzZVRhcmdldChjb25zdCBTdHJpbmcmIGJhc2VUYXJnZXQpIHsgbV9iYXNl
VGFyZ2V0ID0gYmFzZVRhcmdldDsgfQogCi0gICAgRGVwcmVjYXRlZFN0cmluZyBjb21wbGV0ZVVS
TChjb25zdCBEZXByZWNhdGVkU3RyaW5nICYpOwogICAgIFN0cmluZyBjb21wbGV0ZVVSTChjb25z
dCBTdHJpbmcmKTsKIAorICAgIERlcHJlY2F0ZWRTdHJpbmcgZGVwcmVjYXRlZENvbXBsZXRlVVJM
KGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcmKTsKKwogICAgIC8vIGZyb20gY2FjaGVkT2JqZWN0Q2xp
ZW50CiAgICAgdmlydHVhbCB2b2lkIHNldENTU1N0eWxlU2hlZXQoY29uc3QgU3RyaW5nJiB1cmws
IGNvbnN0IFN0cmluZyYgY2hhcnNldCwgY29uc3QgU3RyaW5nJiBzaGVldFN0cik7CiAKQEAgLTc0
OSw5ICs3NDcsOSBAQCBwcml2YXRlOgogCiAgICAgdW5zaWduZWQgc2hvcnQgbV9saXN0ZW5lclR5
cGVzOwogICAgIFJlZlB0cjxTdHlsZVNoZWV0TGlzdD4gbV9zdHlsZVNoZWV0czsKLSAgICAKLSAg
ICB0eXBlZGVmIERlcHJlY2F0ZWRWYWx1ZUxpc3Q8UmVmUHRyPFJlZ2lzdGVyZWRFdmVudExpc3Rl
bmVyPiA+IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyTGlzdDsKLSAgICBSZWdpc3RlcmVkRXZlbnRM
aXN0ZW5lckxpc3QgbV93aW5kb3dFdmVudExpc3RlbmVyczsKKworICAgIHR5cGVkZWYgVmVjdG9y
PFJlZlB0cjxSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcj4gPiBFdmVudExpc3RlbmVyVmVjdG9yOwor
ICAgIEV2ZW50TGlzdGVuZXJWZWN0b3IgbV93aW5kb3dFdmVudExpc3RlbmVyczsKIAogICAgIHR5
cGVkZWYgSGFzaE1hcDxGb3JtRWxlbWVudEtleSwgVmVjdG9yPFN0cmluZz4sIEZvcm1FbGVtZW50
S2V5SGFzaCwgRm9ybUVsZW1lbnRLZXlIYXNoVHJhaXRzPiBGb3JtRWxlbWVudFN0YXRlTWFwOwog
ICAgIExpc3RIYXNoU2V0PEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUqPiBtX2Zvcm1F
bGVtZW50c1dpdGhTdGF0ZTsKQEAgLTc4OCw4ICs3ODYsOCBAQCBwcml2YXRlOgogCiAgICAgbXV0
YWJsZSBBWE9iamVjdENhY2hlKiBtX2F4T2JqZWN0Q2FjaGU7CiAgICAgCi0gICAgRGVwcmVjYXRl
ZFB0ckxpc3Q8SFRNTEltYWdlTG9hZGVyPiBtX2ltYWdlTG9hZEV2ZW50RGlzcGF0Y2hTb29uTGlz
dDsKLSAgICBEZXByZWNhdGVkUHRyTGlzdDxIVE1MSW1hZ2VMb2FkZXI+IG1faW1hZ2VMb2FkRXZl
bnREaXNwYXRjaGluZ0xpc3Q7CisgICAgVmVjdG9yPEhUTUxJbWFnZUxvYWRlcio+IG1faW1hZ2VM
b2FkRXZlbnREaXNwYXRjaFNvb25MaXN0OworICAgIFZlY3RvcjxIVE1MSW1hZ2VMb2FkZXIqPiBt
X2ltYWdlTG9hZEV2ZW50RGlzcGF0Y2hpbmdMaXN0OwogICAgIFRpbWVyPERvY3VtZW50PiBtX2lt
YWdlTG9hZEV2ZW50VGltZXI7CiAKICAgICBUaW1lcjxEb2N1bWVudD4gbV91cGRhdGVGb2N1c0Fw
cGVhcmFuY2VUaW1lcjsKSW5kZXg6IFdlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2RvbS9FdmVudFRhcmdldC5jcHAJKHJldmlzaW9uIDMwMTE4KQorKysg
V2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxNiArMzQs
MTcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJFdmVudFRhcmdldC5oIgogCi0j
aW5jbHVkZSAiTm9kZS5oIgotI2luY2x1ZGUgIk5vZGVMaXN0LmgiCisjaW5jbHVkZSAiRGVwcmVj
YXRlZFB0ckxpc3QuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkV2ZW50Lmgi
CiAjaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKICNp
bmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgotI2luY2x1ZGUgImtqc19w
cm94eS5oIgorI2luY2x1ZGUgIk5vZGUuaCIKKyNpbmNsdWRlICJOb2RlTGlzdC5oIgogI2luY2x1
ZGUgIlJlZ2lzdGVyZWRFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSAia2pzX3Byb3h5LmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIApJbmRleDogV2ViQ29yZS9kb20vUXVhbGlmaWVkTmFtZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vUXVhbGlmaWVkTmFtZS5jcHAJKHJldmlzaW9u
IDMwMTE4KQorKysgV2ViQ29yZS9kb20vUXVhbGlmaWVkTmFtZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTk3LDcgKzk3LDcgQEAgc3RydWN0IFFOYW1lQ29tcG9uZW50c1RyYW5zbGF0b3IgewogICAg
ICAgICByZXR1cm4gYy5tX3ByZWZpeCA9PSBuYW1lLT5tX3ByZWZpeC5pbXBsKCkgJiYgYy5tX2xv
Y2FsTmFtZSA9PSBuYW1lLT5tX2xvY2FsTmFtZS5pbXBsKCkgJiYgYy5tX25hbWVzcGFjZSA9PSBu
YW1lLT5tX25hbWVzcGFjZS5pbXBsKCk7CiAgICAgfQogICAgIHN0YXRpYyB2b2lkIHRyYW5zbGF0
ZShRdWFsaWZpZWROYW1lOjpRdWFsaWZpZWROYW1lSW1wbComIGxvY2F0aW9uLCBjb25zdCBRdWFs
aWZpZWROYW1lQ29tcG9uZW50cyYgY29tcG9uZW50cywgdW5zaWduZWQgaGFzaCkgewotICAgICAg
ICBsb2NhdGlvbiA9IG5ldyBRdWFsaWZpZWROYW1lOjpRdWFsaWZpZWROYW1lSW1wbChjb21wb25l
bnRzLm1fcHJlZml4LCBjb21wb25lbnRzLm1fbG9jYWxOYW1lLCBjb21wb25lbnRzLm1fbmFtZXNw
YWNlKTsKKyAgICAgICAgbG9jYXRpb24gPSBRdWFsaWZpZWROYW1lOjpRdWFsaWZpZWROYW1lSW1w
bDo6Y3JlYXRlKGNvbXBvbmVudHMubV9wcmVmaXgsIGNvbXBvbmVudHMubV9sb2NhbE5hbWUsIGNv
bXBvbmVudHMubV9uYW1lc3BhY2UpLnJlbGVhc2VSZWYoKTsKICAgICB9CiB9OwogCkBAIC0xMDks
OCArMTA5LDEwIEBAIFF1YWxpZmllZE5hbWU6OlF1YWxpZmllZE5hbWUoY29uc3QgQXRvbWkKICAg
ICBpZiAoIWdOYW1lQ2FjaGUpCiAgICAgICAgIGdOYW1lQ2FjaGUgPSBuZXcgUU5hbWVTZXQ7CiAg
ICAgUXVhbGlmaWVkTmFtZUNvbXBvbmVudHMgY29tcG9uZW50cyA9IHsgcC5pbXBsKCksIGwuaW1w
bCgpLCBuLmltcGwoKSB9OwotICAgIG1faW1wbCA9ICpnTmFtZUNhY2hlLT5hZGQ8UXVhbGlmaWVk
TmFtZUNvbXBvbmVudHMsIFFOYW1lQ29tcG9uZW50c1RyYW5zbGF0b3I+KGNvbXBvbmVudHMpLmZp
cnN0OyAgICAKLSAgICByZWYoKTsKKyAgICBwYWlyPFFOYW1lU2V0OjppdGVyYXRvciwgYm9vbD4g
YWRkUmVzdWx0ID0gZ05hbWVDYWNoZS0+YWRkPFF1YWxpZmllZE5hbWVDb21wb25lbnRzLCBRTmFt
ZUNvbXBvbmVudHNUcmFuc2xhdG9yPihjb21wb25lbnRzKTsKKyAgICBtX2ltcGwgPSAqYWRkUmVz
dWx0LmZpcnN0OyAgICAKKyAgICBpZiAoIWFkZFJlc3VsdC5zZWNvbmQpCisgICAgICAgIG1faW1w
bC0+cmVmKCk7CiB9CiAKIFF1YWxpZmllZE5hbWU6On5RdWFsaWZpZWROYW1lKCkKSW5kZXg6IFdl
YkNvcmUvZG9tL1F1YWxpZmllZE5hbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9RdWFs
aWZpZWROYW1lLmgJKHJldmlzaW9uIDMwMTE4KQorKysgV2ViQ29yZS9kb20vUXVhbGlmaWVkTmFt
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNSBAQAogLyoKLSAqIFRoaXMgZmlsZSBpcyBw
YXJ0IG9mIHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9yIEtERS4KLSAqCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAw
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAg
LTMwLDExICsyOCwyMyBAQCBjbGFzcyBRdWFsaWZpZWROYW1lIHsKIHB1YmxpYzoKICAgICBjbGFz
cyBRdWFsaWZpZWROYW1lSW1wbCA6IHB1YmxpYyBSZWZDb3VudGVkPFF1YWxpZmllZE5hbWVJbXBs
PiB7CiAgICAgcHVibGljOgotICAgICAgICBRdWFsaWZpZWROYW1lSW1wbChjb25zdCBBdG9taWNT
dHJpbmcmIHAsIGNvbnN0IEF0b21pY1N0cmluZyYgbCwgY29uc3QgQXRvbWljU3RyaW5nJiBuKSA6
bV9wcmVmaXgocCksIG1fbG9jYWxOYW1lKGwpLCBtX25hbWVzcGFjZShuKSB7fQorICAgICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxRdWFsaWZpZWROYW1lSW1wbD4gY3JlYXRlKGNvbnN0IEF0b21pY1N0
cmluZyYgcCwgY29uc3QgQXRvbWljU3RyaW5nJiBsLCBjb25zdCBBdG9taWNTdHJpbmcmIG4pCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgUXVhbGlmaWVkTmFtZUlt
cGwocCwgbCwgbikpOworICAgICAgICB9CiAKICAgICAgICAgQXRvbWljU3RyaW5nIG1fcHJlZml4
OwogICAgICAgICBBdG9taWNTdHJpbmcgbV9sb2NhbE5hbWU7CiAgICAgICAgIEF0b21pY1N0cmlu
ZyBtX25hbWVzcGFjZTsKKworICAgIHByaXZhdGU6CisgICAgICAgIFF1YWxpZmllZE5hbWVJbXBs
KGNvbnN0IEF0b21pY1N0cmluZyYgcCwgY29uc3QgQXRvbWljU3RyaW5nJiBsLCBjb25zdCBBdG9t
aWNTdHJpbmcmIG4pCisgICAgICAgICAgICA6IFJlZkNvdW50ZWQ8UXVhbGlmaWVkTmFtZUltcGw+
KDEpCisgICAgICAgICAgICAsIG1fcHJlZml4KHApCisgICAgICAgICAgICAsIG1fbG9jYWxOYW1l
KGwpCisgICAgICAgICAgICAsIG1fbmFtZXNwYWNlKG4pCisgICAgICAgIHsKKyAgICAgICAgfQog
ICAgIH07CiAKICAgICBRdWFsaWZpZWROYW1lKGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4LCBj
b25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3Bh
Y2VVUkkpOwpAQCAtNjYsNyArNzYsNiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgaW5pdCgp
OwogCiBwcml2YXRlOgotCiAgICAgdm9pZCByZWYoKSB7IG1faW1wbC0+cmVmKCk7IH0gCiAgICAg
dm9pZCBkZXJlZigpOwogICAgIApJbmRleDogV2ViQ29yZS9oaXN0b3J5L0JhY2tGb3J3YXJkTGlz
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9oaXN0b3J5L0JhY2tGb3J3YXJkTGlzdC5jcHAJ
KHJldmlzaW9uIDMwMTE4KQorKysgV2ViQ29yZS9oaXN0b3J5L0JhY2tGb3J3YXJkTGlzdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM3LDggKzM3LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIERlZmF1bHRDYXBhY2l0eSA9IDEwMDsKIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBOb0N1cnJlbnRJdGVtSW5kZXggPSBVSU5UX01BWDsKIAotQmFja0ZvcndhcmRMaXN0
OjpCYWNrRm9yd2FyZExpc3QoUGFnZSogcGFnZSkKLSAgICA6IG1fcGFnZShwYWdlKQoraW5saW5l
IEJhY2tGb3J3YXJkTGlzdDo6QmFja0ZvcndhcmRMaXN0KFBhZ2UqIHBhZ2UpCisgICAgOiBSZWZD
b3VudGVkPEJhY2tGb3J3YXJkTGlzdD4oMSkKKyAgICAsIG1fcGFnZShwYWdlKQogICAgICwgbV9j
dXJyZW50KE5vQ3VycmVudEl0ZW1JbmRleCkKICAgICAsIG1fY2FwYWNpdHkoRGVmYXVsdENhcGFj
aXR5KQogICAgICwgbV9jbG9zZWQodHJ1ZSkKQEAgLTQ2LDYgKzQ3LDExIEBAIEJhY2tGb3J3YXJk
TGlzdDo6QmFja0ZvcndhcmRMaXN0KFBhZ2UqIHAKIHsKIH0KIAorUGFzc1JlZlB0cjxCYWNrRm9y
d2FyZExpc3Q+IEJhY2tGb3J3YXJkTGlzdDo6Y3JlYXRlKFBhZ2UqIHBhZ2UpCit7CisgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBCYWNrRm9yd2FyZExpc3QocGFnZSkpOworfQorCiBCYWNrRm9yd2Fy
ZExpc3Q6On5CYWNrRm9yd2FyZExpc3QoKQogewogICAgIEFTU0VSVChtX2Nsb3NlZCk7CkBAIC0y
MzIsMTEgKzIzOCw2IEBAIHZvaWQgQmFja0ZvcndhcmRMaXN0OjpjbG9zZSgpCiAgICAgbV9jbG9z
ZWQgPSB0cnVlOwogfQogCi1ib29sIEJhY2tGb3J3YXJkTGlzdDo6Y2xvc2VkKCkKLXsKLSAgICBy
ZXR1cm4gbV9jbG9zZWQ7Ci19Ci0KIHZvaWQgQmFja0ZvcndhcmRMaXN0OjpyZW1vdmVJdGVtKEhp
c3RvcnlJdGVtKiBpdGVtKQogewogICAgIGlmICghaXRlbSkKSW5kZXg6IFdlYkNvcmUvaGlzdG9y
eS9CYWNrRm9yd2FyZExpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2hpc3RvcnkvQmFja0Zv
cndhcmRMaXN0LmgJKHJldmlzaW9uIDMwMTE4KQorKysgV2ViQ29yZS9oaXN0b3J5L0JhY2tGb3J3
YXJkTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw4ICs0MCw4IEBAIHR5cGVkZWYgVmVjdG9y
PFJlZlB0cjxIaXN0b3J5SXRlbT4gPiBIaXMKIHR5cGVkZWYgSGFzaFNldDxSZWZQdHI8SGlzdG9y
eUl0ZW0+ID4gSGlzdG9yeUl0ZW1IYXNoU2V0OwogCiBjbGFzcyBCYWNrRm9yd2FyZExpc3QgOiBw
dWJsaWMgUmVmQ291bnRlZDxCYWNrRm9yd2FyZExpc3Q+IHsKLXB1YmxpYzogCi0gICAgQmFja0Zv
cndhcmRMaXN0KFBhZ2UqKTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxCYWNrRm9y
d2FyZExpc3Q+IGNyZWF0ZShQYWdlKik7CiAgICAgfkJhY2tGb3J3YXJkTGlzdCgpOwogICAgIAog
ICAgIFBhZ2UqIHBhZ2UoKSB7IHJldHVybiBtX3BhZ2U7IH0KQEAgLTY4LDEyICs2OCwxNCBAQCBw
dWJsaWM6IAogICAgIGJvb2wgY29udGFpbnNJdGVtKEhpc3RvcnlJdGVtKik7CiAKICAgICB2b2lk
IGNsb3NlKCk7Ci0gICAgYm9vbCBjbG9zZWQoKTsKKyAgICBib29sIGNsb3NlZCgpIGNvbnN0IHsg
cmV0dXJuIG1fY2xvc2VkOyB9CiAgICAgCiAgICAgdm9pZCByZW1vdmVJdGVtKEhpc3RvcnlJdGVt
Kik7CiAgICAgSGlzdG9yeUl0ZW1WZWN0b3ImIGVudHJpZXMoKTsKICAgICAKIHByaXZhdGU6Cisg
ICAgQmFja0ZvcndhcmRMaXN0KFBhZ2UqKTsKKwogICAgIFBhZ2UqIG1fcGFnZTsKICAgICBIaXN0
b3J5SXRlbVZlY3RvciBtX2VudHJpZXM7CiAgICAgSGlzdG9yeUl0ZW1IYXNoU2V0IG1fZW50cnlI
YXNoOwpAQCAtODEsOCArODMsOCBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fY2FwYWNpdHk7
CiAgICAgYm9vbCBtX2Nsb3NlZDsKICAgICBib29sIG1fZW5hYmxlZDsKLX07IC8vY2xhc3MgQmFj
a0ZvcndhcmRMaXN0Cit9OwogICAgIAotfTsgLy9uYW1lc3BhY2UgV2ViQ29yZQorfSAvLyBuYW1l
c3BhY2UKIAotI2VuZGlmIC8vQkFDS0ZPUldBUkRMSVNUX0gKKyNlbmRpZiAvLyBCYWNrRm9yd2Fy
ZExpc3RfaApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAJKHJldmlzaW9uIDMwMTE4KQor
KysgV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg2
LDEyICs4Niw5IEBAIEhUTUxGb3JtRWxlbWVudDo6fkhUTUxGb3JtRWxlbWVudCgpCiAgICAgICAg
IGltZ0VsZW1lbnRzW2ldLT5tX2Zvcm0gPSAwOwogfQogCi1ib29sIEhUTUxGb3JtRWxlbWVudDo6
Zm9ybVdvdWxkSGF2ZVNlY3VyZVN1Ym1pc3Npb24oY29uc3QgU3RyaW5nICZ1cmwpCitib29sIEhU
TUxGb3JtRWxlbWVudDo6Zm9ybVdvdWxkSGF2ZVNlY3VyZVN1Ym1pc3Npb24oY29uc3QgU3RyaW5n
JiB1cmwpCiB7Ci0gICAgaWYgKHVybC5pc051bGwoKSkgewotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotICAgIHJldHVybiBkb2N1bWVudCgpLT5jb21wbGV0ZVVSTCh1cmwuZGVwcmVjYXRl
ZFN0cmluZygpKS5zdGFydHNXaXRoKCJodHRwczoiLCBmYWxzZSk7CisgICAgcmV0dXJuIGRvY3Vt
ZW50KCktPmNvbXBsZXRlVVJMKHVybCkuc3RhcnRzV2l0aCgiaHR0cHM6IiwgZmFsc2UpOwogfQog
CiB2b2lkIEhUTUxGb3JtRWxlbWVudDo6YXR0YWNoKCkKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1M
RnJhbWVFbGVtZW50QmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxGcmFt
ZUVsZW1lbnRCYXNlLmNwcAkocmV2aXNpb24gMzAxMTgpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEZy
YW1lRWxlbWVudEJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MSw3ICs2MSw3IEBAIGJvb2wg
SFRNTEZyYW1lRWxlbWVudEJhc2U6OmlzVVJMQWxsb3dlZCgKICAgICBpZiAoVVJMU3RyaW5nLmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBLVVJMIGNvbXBsZXRlVVJMKGRv
Y3VtZW50KCktPmNvbXBsZXRlVVJMKFVSTFN0cmluZy5kZXByZWNhdGVkU3RyaW5nKCkpKTsKKyAg
ICBLVVJMIGNvbXBsZXRlVVJMKGRvY3VtZW50KCktPmRlcHJlY2F0ZWRDb21wbGV0ZVVSTChVUkxT
dHJpbmcuZGVwcmVjYXRlZFN0cmluZygpKSk7CiAgICAgY29tcGxldGVVUkwuc2V0UmVmKERlcHJl
Y2F0ZWRTdHJpbmc6Om51bGwpOwogCiAgICAgLy8gRG9uJ3QgYWxsb3cgbW9yZSB0aGFuIDIwMCB0
b3RhbCBmcmFtZXMgaW4gYSBzZXQuIFRoaXMgc2VlbXMKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0Rv
Y0xvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRG9jTG9hZGVyLmNwcAko
cmV2aXNpb24gMzAxMTgpCisrKyBXZWJDb3JlL2xvYWRlci9Eb2NMb2FkZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNDEsNyArMTQxLDcgQEAgQ2FjaGVkWEJMRG9jdW1lbnQqIERvY0xvYWRlcjo6
cmVxdWVzdFhCTAogCiBDYWNoZWRSZXNvdXJjZSogRG9jTG9hZGVyOjpyZXF1ZXN0UmVzb3VyY2Uo
Q2FjaGVkUmVzb3VyY2U6OlR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmlu
ZyogY2hhcnNldCwgYm9vbCBza2lwQ2FuTG9hZENoZWNrLCBib29sIHNlbmRSZXNvdXJjZUxvYWRD
YWxsYmFja3MpCiB7Ci0gICAgS1VSTCBmdWxsVVJMID0gbV9kb2MtPmNvbXBsZXRlVVJMKHVybC5k
ZXByZWNhdGVkU3RyaW5nKCkpOworICAgIEtVUkwgZnVsbFVSTCA9IG1fZG9jLT5kZXByZWNhdGVk
Q29tcGxldGVVUkwodXJsLmRlcHJlY2F0ZWRTdHJpbmcoKSk7CiAgICAgCiAgICAgaWYgKGNhY2hl
KCktPmRpc2FibGVkKCkpIHsKICAgICAgICAgSGFzaE1hcDxTdHJpbmcsIENhY2hlZFJlc291cmNl
Kj46Oml0ZXJhdG9yIGl0ID0gbV9kb2NSZXNvdXJjZXMuZmluZChmdWxsVVJMLnN0cmluZygpKTsK
SW5kZXg6IFdlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAJKHJldmlzaW9uIDMwMTE4KQorKysgV2Vi
Q29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjMsNyAr
MTIzLDggQEAgc3RhdGljIHZvaWQgc2V0QWxsRGVmZXJzTG9hZGluZyhjb25zdCBSZQogfQogCiBE
b2N1bWVudExvYWRlcjo6RG9jdW1lbnRMb2FkZXIoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXEs
IGNvbnN0IFN1YnN0aXR1dGVEYXRhJiBzdWJzdGl0dXRlRGF0YSkKLSAgICA6IG1fZGVmZXJNYWlu
UmVzb3VyY2VEYXRhTG9hZCh0cnVlKQorICAgIDogUmVmQ291bnRlZDxEb2N1bWVudExvYWRlcj4o
MSkKKyAgICAsIG1fZGVmZXJNYWluUmVzb3VyY2VEYXRhTG9hZCh0cnVlKQogICAgICwgbV9mcmFt
ZSgwKQogICAgICwgbV9vcmlnaW5hbFJlcXVlc3QocmVxKQogICAgICwgbV9zdWJzdGl0dXRlRGF0
YShzdWJzdGl0dXRlRGF0YSkKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuaAkocmV2aXNpb24g
MzAxMTgpCisrKyBXZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC01OCw3ICs1OCwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBEb2N1
bWVudExvYWRlciA6IHB1YmxpYyBSZWZDb3VudGVkPERvY3VtZW50TG9hZGVyPiB7CiAgICAgcHVi
bGljOgotICAgICAgICBEb2N1bWVudExvYWRlcihjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25z
dCBTdWJzdGl0dXRlRGF0YSYpOworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxEb2N1bWVudExv
YWRlcj4gY3JlYXRlKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgU3Vic3Rp
dHV0ZURhdGEmIHN1YnN0aXR1dGVEYXRhKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
bmV3IERvY3VtZW50TG9hZGVyKHJlcXVlc3QsIHN1YnN0aXR1dGVEYXRhKTsKKyAgICAgICAgfQor
CiAgICAgICAgIHZpcnR1YWwgfkRvY3VtZW50TG9hZGVyKCk7CiAKICAgICAgICAgdm9pZCBzZXRG
cmFtZShGcmFtZSopOwpAQCAtMTU0LDcgKzE1OCwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgIHZvaWQgc3VicmVzb3VyY2VMb2FkZXJGaW5pc2hlZExvYWRpbmdPbmVQYXJ0KFJlc291
cmNlTG9hZGVyKik7CiAgICAgICAgIAogICAgICAgICBib29sIGRlZmVyTWFpblJlc291cmNlRGF0
YUxvYWQoKSBjb25zdCB7IHJldHVybiBtX2RlZmVyTWFpblJlc291cmNlRGF0YUxvYWQ7IH0KKwog
ICAgIHByb3RlY3RlZDoKKyAgICAgICAgRG9jdW1lbnRMb2FkZXIoY29uc3QgUmVzb3VyY2VSZXF1
ZXN0JiwgY29uc3QgU3Vic3RpdHV0ZURhdGEmKTsKKwogICAgICAgICBib29sIG1fZGVmZXJNYWlu
UmVzb3VyY2VEYXRhTG9hZDsKIAogICAgIHByaXZhdGU6CkluZGV4OiBXZWJDb3JlL2xvYWRlci9p
Y29uL0ljb25EYXRhYmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvaWNvbi9J
Y29uRGF0YWJhc2UuY3BwCShyZXZpc2lvbiAzMDExOCkKKysrIFdlYkNvcmUvbG9hZGVyL2ljb24v
SWNvbkRhdGFiYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzc1LDcgKzM3NSw3IEBAIEltYWdl
KiBJY29uRGF0YWJhc2U6OmRlZmF1bHRJY29uKGNvbnN0IEkKICAgICBzdGF0aWMgUmVmUHRyPFNo
YXJlZEJ1ZmZlcj4gZGVmYXVsdEljb25CdWZmZXIobmV3IFNoYXJlZEJ1ZmZlcihkZWZhdWx0SWNv
bkRhdGEsIHNpemVvZihkZWZhdWx0SWNvbkRhdGEpKSk7CiAgICAgCiAgICAgaWYgKCFtX2RlZmF1
bHRJY29uUmVjb3JkKSB7Ci0gICAgICAgIG1fZGVmYXVsdEljb25SZWNvcmQgPSBuZXcgSWNvblJl
Y29yZCgidXJsSWNvbiIpOworICAgICAgICBtX2RlZmF1bHRJY29uUmVjb3JkID0gSWNvblJlY29y
ZDo6Y3JlYXRlKCJ1cmxJY29uIik7CiAgICAgICAgIG1fZGVmYXVsdEljb25SZWNvcmQtPnNldElt
YWdlRGF0YShkZWZhdWx0SWNvbkJ1ZmZlcik7CiAgICAgfQogICAgIApAQCAtNDczLDcgKzQ3Myw3
IEBAIHZvaWQgSWNvbkRhdGFiYXNlOjpyZWxlYXNlSWNvbkZvclBhZ2VVUkwKICAgICAgICAgbV9w
YWdlVVJMc0ludGVyZXN0ZWRJbkljb25zLnJlbW92ZShwYWdlVVJMT3JpZ2luYWwpOwogICAgICAg
ICAKICAgICAgICAgLy8gSWYgdGhpcyBpY29uIGlzIGRvd24gdG8gaXQncyBsYXN0IHJldGFpbmVy
LCB3ZSBkb24ndCBjYXJlIGFib3V0IHJlYWRpbmcgaXQgaW4gZnJvbSBkaXNrIGFueW1vcmUKLSAg
ICAgICAgaWYgKGljb25SZWNvcmQgJiYgaWNvblJlY29yZC0+aGFzT25lUmVmKCkpIHsKKyAgICAg
ICAgaWYgKGljb25SZWNvcmQgJiYgaWNvblJlY29yZC0+cmVmQ291bnQoKSA8PSAyKSB7CiAgICAg
ICAgICAgICBtX2ljb25VUkxUb1JlY29yZE1hcC5yZW1vdmUoaWNvblJlY29yZC0+aWNvblVSTCgp
KTsKICAgICAgICAgICAgIG1faWNvbnNQZW5kaW5nUmVhZGluZy5yZW1vdmUoaWNvblJlY29yZCk7
CiAgICAgICAgIH0KQEAgLTQ4Niw3ICs0ODYsNyBAQCB2b2lkIEljb25EYXRhYmFzZTo6cmVsZWFz
ZUljb25Gb3JQYWdlVVJMCiAgICAgCiAgICAgICAgIC8vIElmIHRoaXMgcGFnZSBpcyB0aGUgbGFz
dCBwYWdlIHRvIHJlZmVyIHRvIGEgcGFydGljdWxhciBJY29uUmVjb3JkLCB0aGF0IEljb25SZWNv
cmQgbmVlZHMgdG8KICAgICAgICAgLy8gYmUgbWFya2VkIGZvciBkZWxldGlvbgotICAgICAgICBp
ZiAoaWNvblJlY29yZCAmJiBpY29uUmVjb3JkLT5oYXNPbmVSZWYoKSkKKyAgICAgICAgaWYgKGlj
b25SZWNvcmQgJiYgaWNvblJlY29yZC0+cmVmQ291bnQoKSA8PSAyKQogICAgICAgICAgICAgbV9p
Y29uc1BlbmRpbmdTeW5jLnNldChpY29uUmVjb3JkLT5pY29uVVJMKCksIGljb25SZWNvcmQtPnNu
YXBzaG90KHRydWUpKTsKICAgICB9CiAgICAgCkBAIC01MTMsNyArNTEzLDcgQEAgdm9pZCBJY29u
RGF0YWJhc2U6OnNldEljb25EYXRhRm9ySWNvblVSTAogICAgICAgICBNdXRleExvY2tlciBsb2Nr
ZXIobV91cmxBbmRJY29uTG9jayk7CiAgICAgCiAgICAgICAgIC8vIElmIHRoaXMgaWNvbiB3YXMg
cGVuZGluZyBhIHJlYWQsIHJlbW92ZSBpdCBmcm9tIHRoYXQgc2V0IGJlY2F1c2UgdGhpcyBuZXcg
ZGF0YSBzaG91bGQgb3ZlcnJpZGUgd2hhdCBpcyBvbiBkaXNrCi0gICAgICAgIEljb25SZWNvcmQq
IGljb24gPSBtX2ljb25VUkxUb1JlY29yZE1hcC5nZXQoaWNvblVSTCk7CisgICAgICAgIEljb25S
ZWNvcmQqIGljb24gPSBtX2ljb25VUkxUb1JlY29yZE1hcC5nZXQoaWNvblVSTCkuZ2V0KCk7CiAg
ICAgICAgIGlmIChpY29uKSB7CiAgICAgICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9wZW5k
aW5nUmVhZGluZ0xvY2spOwogICAgICAgICAgICAgbV9pY29uc1BlbmRpbmdSZWFkaW5nLnJlbW92
ZShpY29uKTsKQEAgLTU5Myw3ICs1OTMsNyBAQCB2b2lkIEljb25EYXRhYmFzZTo6c2V0SWNvblVS
TEZvclBhZ2VVUkwoCiAKICAgICAgICAgLy8gSWYgdGhlIGN1cnJlbnQgaWNvbiBoYXMgb25seSBh
IHNpbmdsZSByZWYgbGVmdCwgaXQgaXMgYWJvdXQgdG8gZ2V0IHdpcGVkIG91dC4gCiAgICAgICAg
IC8vIFJlbW92ZSBpdCBmcm9tIHRoZSBpbi1tZW1vcnkgcmVjb3JkcyBhbmQgZG9uJ3QgYm90aGVy
IHJlYWRpbmcgaXQgaW4gZnJvbSBkaXNrIGFueW1vcmUKLSAgICAgICAgaWYgKGljb25SZWNvcmQg
JiYgaWNvblJlY29yZC0+aGFzT25lUmVmKCkpIHsKKyAgICAgICAgaWYgKGljb25SZWNvcmQgJiYg
aWNvblJlY29yZC0+cmVmQ291bnQoKSA8PSAyKSB7CiAgICAgICAgICAgICBBU1NFUlQoaWNvblJl
Y29yZC0+cmV0YWluaW5nUGFnZVVSTHMoKS5zaXplKCkgPT0gMCk7CiAgICAgICAgICAgICBMT0co
SWNvbkRhdGFiYXNlLCAiSWNvbiBmb3IgaWNvbiB1cmwgJXMgaXMgYWJvdXQgdG8gYmUgZGVzdHJv
eWVkIC0gcmVtb3ZpbmcgbWFwcGluZyBmb3IgaXQiLCB1cmxGb3JMb2dnaW5nKGljb25SZWNvcmQt
Pmljb25VUkwoKSkuYXNjaWkoKS5kYXRhKCkpOwogICAgICAgICAgICAgbV9pY29uVVJMVG9SZWNv
cmRNYXAucmVtb3ZlKGljb25SZWNvcmQtPmljb25VUkwoKSk7CkBAIC02MDcsNyArNjA3LDcgQEAg
dm9pZCBJY29uRGF0YWJhc2U6OnNldEljb25VUkxGb3JQYWdlVVJMKAogICAgICAgICAgICAgbV9w
YWdlVVJMc1BlbmRpbmdTeW5jLnNldChwYWdlVVJMLCBwYWdlUmVjb3JkLT5zbmFwc2hvdCgpKTsK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gSWYgdGhlIGljb24gaXMgb24gaXQncyBsYXN0
IHJlZiwgbWFyayBpdCBmb3IgZGVsZXRpb24KLSAgICAgICAgICAgIGlmIChpY29uUmVjb3JkICYm
IGljb25SZWNvcmQtPmhhc09uZVJlZigpKQorICAgICAgICAgICAgaWYgKGljb25SZWNvcmQgJiYg
aWNvblJlY29yZC0+cmVmQ291bnQoKSA8PSAyKQogICAgICAgICAgICAgICAgIG1faWNvbnNQZW5k
aW5nU3luYy5zZXQoaWNvblJlY29yZC0+aWNvblVSTCgpLCBpY29uUmVjb3JkLT5zbmFwc2hvdCh0
cnVlKSk7CiAgICAgICAgIH0KICAgICB9CkBAIC02MzYsNyArNjM2LDcgQEAgSWNvbkxvYWREZWNp
c2lvbiBJY29uRGF0YWJhc2U6OmxvYWREZWNpcwogICAgIC8vIDIgLSBXaGVuIHdlIGdldCBhIG5l
dyBpY29uIGZyb20gdGhlIGxvYWRlciwgaW4gd2hpY2ggY2FzZSB0aGUgdGltZXN0YW1wIGlzIHNl
dCBhdCB0aGF0IHRpbWUKICAgICB7CiAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3VybEFu
ZEljb25Mb2NrKTsKLSAgICAgICAgaWYgKEljb25SZWNvcmQqIGljb24gPSBtX2ljb25VUkxUb1Jl
Y29yZE1hcC5nZXQoaWNvblVSTCkpIHsKKyAgICAgICAgaWYgKEljb25SZWNvcmQqIGljb24gPSBt
X2ljb25VUkxUb1JlY29yZE1hcC5nZXQoaWNvblVSTCkuZ2V0KCkpIHsKICAgICAgICAgICAgIExP
RyhJY29uRGF0YWJhc2UsICJGb3VuZCBleHBpcmF0aW9uIHRpbWUgb24gYSBwcmVzZW50IGljb24g
YmFzZWQgb24gZXhpc3RpbmcgSWNvblJlY29yZCIpOwogICAgICAgICAgICAgcmV0dXJuIChpbnQp
Y3VycmVudFRpbWUoKSAtIGljb24tPmdldFRpbWVzdGFtcCgpID4gaWNvbkV4cGlyYXRpb25UaW1l
ID8gSWNvbkxvYWRZZXMgOiBJY29uTG9hZE5vOwogICAgICAgICB9CkBAIC02NjAsNyArNjYwLDcg
QEAgYm9vbCBJY29uRGF0YWJhc2U6Omljb25EYXRhS25vd25Gb3JJY29uVQogICAgIEFTU0VSVF9O
T1RfU1lOQ19USFJFQUQoKTsKICAgICAKICAgICBNdXRleExvY2tlciBsb2NrZXIobV91cmxBbmRJ
Y29uTG9jayk7Ci0gICAgaWYgKEljb25SZWNvcmQqIGljb24gPSBtX2ljb25VUkxUb1JlY29yZE1h
cC5nZXQoaWNvblVSTCkpCisgICAgaWYgKEljb25SZWNvcmQqIGljb24gPSBtX2ljb25VUkxUb1Jl
Y29yZE1hcC5nZXQoaWNvblVSTCkuZ2V0KCkpCiAgICAgICAgIHJldHVybiBpY29uLT5pbWFnZURh
dGFTdGF0dXMoKSAhPSBJbWFnZURhdGFTdGF0dXNVbmtub3duOwogCiAgICAgcmV0dXJuIGZhbHNl
OwpAQCAtNzM1LDggKzczNSw4IEBAIHNpemVfdCBJY29uRGF0YWJhc2U6Omljb25SZWNvcmRDb3Vu
dFdpdGgKICAgICBNdXRleExvY2tlciBsb2NrZXIobV91cmxBbmRJY29uTG9jayk7CiAgICAgc2l6
ZV90IHJlc3VsdCA9IDA7CiAgICAgCi0gICAgSGFzaE1hcDxTdHJpbmcsIEljb25SZWNvcmQqPjo6
aXRlcmF0b3IgaSA9IG1faWNvblVSTFRvUmVjb3JkTWFwLmJlZ2luKCk7Ci0gICAgSGFzaE1hcDxT
dHJpbmcsIEljb25SZWNvcmQqPjo6aXRlcmF0b3IgZW5kID0gbV9pY29uVVJMVG9SZWNvcmRNYXAu
ZW5kKCk7CisgICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxJY29uUmVjb3JkPiA+OjppdGVyYXRv
ciBpID0gbV9pY29uVVJMVG9SZWNvcmRNYXAuYmVnaW4oKTsKKyAgICBIYXNoTWFwPFN0cmluZywg
UmVmUHRyPEljb25SZWNvcmQ+ID46Oml0ZXJhdG9yIGVuZCA9IG1faWNvblVSTFRvUmVjb3JkTWFw
LmVuZCgpOwogICAgIAogICAgIGZvciAoOyBpICE9IGVuZDsgKytpKQogICAgICAgICByZXN1bHQg
Kz0gKCgqaSkuc2Vjb25kLT5pbWFnZURhdGFTdGF0dXMoKSA9PSBJbWFnZURhdGFTdGF0dXNQcmVz
ZW50KTsKQEAgLTgzOSwxMyArODM5LDEwIEBAIEljb25SZWNvcmQqIEljb25EYXRhYmFzZTo6Z2V0
T3JDcmVhdGVJY28KICAgICAvLyBDbGllbnRzIG9mIGdldE9yQ3JlYXRlSWNvblJlY29yZCgpIGFy
ZSByZXF1aXJlZCB0byBhY3F1aXJlIHRoZSBtX3VybEFuZEljb25Mb2NrIGJlZm9yZSBjYWxsaW5n
IHRoaXMgbWV0aG9kCiAgICAgQVNTRVJUKCFtX3VybEFuZEljb25Mb2NrLnRyeUxvY2soKSk7CiAK
LSAgICBpZiAoSWNvblJlY29yZCogaWNvbiA9IG1faWNvblVSTFRvUmVjb3JkTWFwLmdldChpY29u
VVJMKSkKKyAgICBpZiAoSWNvblJlY29yZCogaWNvbiA9IG1faWNvblVSTFRvUmVjb3JkTWFwLmdl
dChpY29uVVJMKS5nZXQoKSkKICAgICAgICAgcmV0dXJuIGljb247CiAgICAgICAgIAotICAgIElj
b25SZWNvcmQqIG5ld0ljb24gPSBuZXcgSWNvblJlY29yZChpY29uVVJMKTsKLSAgICBtX2ljb25V
UkxUb1JlY29yZE1hcC5zZXQoaWNvblVSTCwgbmV3SWNvbik7Ci0gICAgICAgIAotICAgIHJldHVy
biBuZXdJY29uOyAgICAKKyAgICByZXR1cm4gbV9pY29uVVJMVG9SZWNvcmRNYXAuc2V0KGljb25V
UkwsIEljb25SZWNvcmQ6OmNyZWF0ZShpY29uVVJMKSkuZmlyc3QtPnNlY29uZC5nZXQoKTsKIH0K
IAogLy8gVGhpcyBtZXRob2QgcmV0cmlldmVzIHRoZSBleGlzdGluZyBQYWdlVVJMUmVjb3JkLCBv
ciBjcmVhdGVzIGEgbmV3IG9uZSBhbmQgbWFya3MgaXQgYXMgImludGVyZXN0ZWQgaW4gdGhlIGlt
cG9ydCIgZm9yIGxhdGVyIG5vdGlmaWNhdGlvbgpAQCAtMTI2NSw3ICsxMjYyLDcgQEAgdm9pZCBJ
Y29uRGF0YWJhc2U6OnBlcmZvcm1VUkxJbXBvcnQoKQogICAgICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBwYWdlIGlzIHRoZSBvbmx5IHJlbWFpbmluZyBy
ZXRhaW5lciBvZiBpdHMgaWNvbiwgbWFyayB0aGF0IGljb24gZm9yIGRlbGV0aW9uIGFuZCBkb24n
dCBib3RoZXIKICAgICAgICAgICAgICAgICAgICAgLy8gcmVhZGluZyBhbnl0aGluZyByZWxhdGVk
IHRvIGl0IAotICAgICAgICAgICAgICAgICAgICBpZiAoaWNvblJlY29yZCAmJiBpY29uUmVjb3Jk
LT5oYXNPbmVSZWYoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoaWNvblJlY29yZCAmJiBp
Y29uUmVjb3JkLT5yZWZDb3VudCgpID09IDIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIG1f
aWNvblVSTFRvUmVjb3JkTWFwLnJlbW92ZShpY29uUmVjb3JkLT5pY29uVVJMKCkpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICB7CkluZGV4OiBXZWJD
b3JlL2xvYWRlci9pY29uL0ljb25EYXRhYmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9h
ZGVyL2ljb24vSWNvbkRhdGFiYXNlLmgJKHJldmlzaW9uIDMwMTE4KQorKysgV2ViQ29yZS9sb2Fk
ZXIvaWNvbi9JY29uRGF0YWJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTIzLDcgKzEyMyw3IEBA
IHByaXZhdGU6CiAgICAgCiAgICAgSGFzaFNldDxSZWZQdHI8RG9jdW1lbnRMb2FkZXI+ID4gbV9s
b2FkZXJzUGVuZGluZ0RlY2lzaW9uOwogCi0gICAgSWNvblJlY29yZCogbV9kZWZhdWx0SWNvblJl
Y29yZDsKKyAgICBSZWZQdHI8SWNvblJlY29yZD4gbV9kZWZhdWx0SWNvblJlY29yZDsKICNlbmRp
ZiAvLyBFTkFCTEUoSUNPTkRBVEFCQVNFKQogCiAvLyAqKiogQW55IFRocmVhZCAqKioKQEAgLTE1
Miw3ICsxNTIsNyBAQCBwcml2YXRlOgogICAgIAogICAgIE11dGV4IG1fdXJsQW5kSWNvbkxvY2s7
CiAgICAgLy8gSG9sZGluZyBtX3VybEFuZEljb25Mb2NrIGlzIHJlcXVpcmVkIHdoZW4gYWNjZXNz
aW5nIGFueSBvZiB0aGUgZm9sbG93aW5nIGRhdGEgc3RydWN0dXJlcyBvciB0aGUgb2JqZWN0cyB0
aGV5IGNvbnRhaW4KLSAgICBIYXNoTWFwPFN0cmluZywgSWNvblJlY29yZCo+IG1faWNvblVSTFRv
UmVjb3JkTWFwOworICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8SWNvblJlY29yZD4gPiBtX2lj
b25VUkxUb1JlY29yZE1hcDsKICAgICBIYXNoTWFwPFN0cmluZywgUGFnZVVSTFJlY29yZCo+IG1f
cGFnZVVSTFRvUmVjb3JkTWFwOwogICAgIEhhc2hTZXQ8U3RyaW5nPiBtX3JldGFpbmVkUGFnZVVS
THM7CiAKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL2ljb24vSWNvblJlY29yZC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uUmVjb3JkLmNwcAkocmV2aXNpb24gMzAxMTgp
CisrKyBXZWJDb3JlL2xvYWRlci9pY29uL0ljb25SZWNvcmQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00MCwxMiArNDAsMTcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1JY29uUmVjb3JkOjpJ
Y29uUmVjb3JkKGNvbnN0IFN0cmluZyYgdXJsKQotICAgIDogbV9pY29uVVJMKHVybCkKK2lubGlu
ZSBJY29uUmVjb3JkOjpJY29uUmVjb3JkKGNvbnN0IFN0cmluZyYgdXJsKQorICAgIDogUmVmQ291
bnRlZDxJY29uUmVjb3JkPigxKQorICAgICwgbV9pY29uVVJMKHVybCkKICAgICAsIG1fc3RhbXAo
MCkKICAgICAsIG1fZGF0YVNldChmYWxzZSkKIHsKK30KIAorUGFzc1JlZlB0cjxJY29uUmVjb3Jk
PiBJY29uUmVjb3JkOjpjcmVhdGUoY29uc3QgU3RyaW5nJiB1cmwpCit7CisgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBJY29uUmVjb3JkKHVybCkpOwogfQogCiBJY29uUmVjb3JkOjp+SWNvblJlY29y
ZCgpCkluZGV4OiBXZWJDb3JlL2xvYWRlci9pY29uL0ljb25SZWNvcmQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2xvYWRlci9pY29uL0ljb25SZWNvcmQuaAkocmV2aXNpb24gMzAxMTgpCisrKyBX
ZWJDb3JlL2xvYWRlci9pY29uL0ljb25SZWNvcmQuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTMg
KzMwLDEwIEBACiAjZGVmaW5lIEljb25SZWNvcmRfaAogCiAjaW5jbHVkZSAiUGFnZVVSTFJlY29y
ZC5oIgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVy
LmgiCi0KKyNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4K
ICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Ci0jaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNp
bmNsdWRlICJTdHJpbmdIYXNoLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsgCiAKQEAgLTY3LDcg
KzY0LDcgQEAgcHVibGljOgogY2xhc3MgSWNvblJlY29yZCA6IHB1YmxpYyBSZWZDb3VudGVkPElj
b25SZWNvcmQ+IHsKICAgICBmcmllbmQgY2xhc3MgUGFnZVVSTFJlY29yZDsKIHB1YmxpYzoKLSAg
ICBJY29uUmVjb3JkKGNvbnN0IFN0cmluZyYgdXJsKTsgCisgICAgc3RhdGljIFBhc3NSZWZQdHI8
SWNvblJlY29yZD4gY3JlYXRlKGNvbnN0IFN0cmluZyYgdXJsKTsKICAgICB+SWNvblJlY29yZCgp
OwogICAgIAogICAgIHRpbWVfdCBnZXRUaW1lc3RhbXAoKSB7IHJldHVybiBtX3N0YW1wOyB9CkBA
IC04NSw3ICs4MiwxMCBAQCBwdWJsaWM6CiAgICAgY29uc3QgSGFzaFNldDxTdHJpbmc+JiByZXRh
aW5pbmdQYWdlVVJMcygpIHsgcmV0dXJuIG1fcmV0YWluaW5nUGFnZVVSTHM7IH0KICAgICAKICAg
ICBJY29uU25hcHNob3Qgc25hcHNob3QoYm9vbCBmb3JEZWxldGlvbiA9IGZhbHNlKSBjb25zdDsK
KwogcHJpdmF0ZToKKyAgICBleHBsaWNpdCBJY29uUmVjb3JkKGNvbnN0IFN0cmluZyYgdXJsKTsg
CisKICAgICBTdHJpbmcgbV9pY29uVVJMOwogICAgIHRpbWVfdCBtX3N0YW1wOwogICAgIE93blB0
cjxJbWFnZT4gbV9pbWFnZTsKQEAgLTk3LDEyICs5Nyw2IEBAIHByaXZhdGU6CiAgICAgLy8gYW5k
IGFsc28gdG8gZGV0ZXJtaW5lIGlmIHRoZSBpY29uIGlzIG1pc3NpbmcgZGF0YSBvciBpZiBpdCBq
dXN0IGhhc24ndCBiZWVuIGJyb3VnaHQKICAgICAvLyBpbiBmcm9tIHRoZSBEQiB5ZXQKICAgICBi
b29sIG1fZGF0YVNldDsKLSAgICAKLSAgICAvLyBGSVhNRSAtIFJpZ2h0IG5vdyBXZWJDb3JlOjpJ
bWFnZSBkb2Vzbid0IGhhdmUgYSB2ZXJ5IGdvb2QgQVBJIGZvciBhY2Nlc3NpbmcgbXVsdGlwbGUg
cmVwcmVzZW50YXRpb25zCi0gICAgLy8gRXZlbiB0aGUgTlNJbWFnZSB3YXkgb2YgZG9pbmcgdGhp
bmdzIHRoYXQgd2UgZG8gaW4gV2ViS2l0IGlzbid0IHZlcnkgY2xlYW4uLi4gIG9uY2Ugd2UgY29t
ZSB1cCB3aXRoIGEgCi0gICAgLy8gYmV0dGVyIHdheSBvZiBoYW5kbGluZyB0aGF0LCB3ZSdsbCBs
aWtlbHkgaGF2ZSBhIG1hcCBvZiBzaXplLXRvLWltYWdlcyBzaW1pbGFyIHRvIGJlbG93Ci0gICAg
Ly8gdHlwZWRlZiBIYXNoTWFwPEludFNpemUsIEltYWdlKj4gU2l6ZUltYWdlTWFwOwotICAgIC8v
IFNpemVJbWFnZU1hcCBtX2ltYWdlczsKIH07CiAKIApJbmRleDogV2ViQ29yZS9wYWdlL0ZyYW1l
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCShyZXZpc2lvbiAzMDEx
OCkKKysrIFdlYkNvcmUvcGFnZS9GcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOSw3ICsx
MTksOCBAQCBzdGF0aWMgaW5saW5lIEZyYW1lKiBwYXJlbnRGcm9tT3duZXJFbGVtCiB9CiAKIEZy
YW1lOjpGcmFtZShQYWdlKiBwYWdlLCBIVE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVyRWxlbWVu
dCwgRnJhbWVMb2FkZXJDbGllbnQqIGZyYW1lTG9hZGVyQ2xpZW50KSAKLSAgICA6IGQobmV3IEZy
YW1lUHJpdmF0ZShwYWdlLCBwYXJlbnRGcm9tT3duZXJFbGVtZW50KG93bmVyRWxlbWVudCksIHRo
aXMsIG93bmVyRWxlbWVudCwgZnJhbWVMb2FkZXJDbGllbnQpKQorICAgIDogUmVmQ291bnRlZDxG
cmFtZT4oMSkKKyAgICAsIGQobmV3IEZyYW1lUHJpdmF0ZShwYWdlLCBwYXJlbnRGcm9tT3duZXJF
bGVtZW50KG93bmVyRWxlbWVudCksIHRoaXMsIG93bmVyRWxlbWVudCwgZnJhbWVMb2FkZXJDbGll
bnQpKQogewogICAgIEF0b21pY1N0cmluZzo6aW5pdCgpOwogICAgIEV2ZW50TmFtZXM6OmluaXQo
KTsKQEAgLTEzNSwxNCArMTM2LDE0IEBAIEZyYW1lOjpGcmFtZShQYWdlKiBwYWdlLCBIVE1MRnJh
bWVPd25lckUKICAgICBYTUxOYW1lczo6aW5pdCgpOwogCiAgICAgaWYgKCFvd25lckVsZW1lbnQp
Ci0gICAgICAgIHBhZ2UtPnNldE1haW5GcmFtZSh0aGlzKTsKKyAgICAgICAgcGFnZS0+c2V0TWFp
bkZyYW1lKGFkb3B0UmVmKHRoaXMpKTsKICAgICBlbHNlIHsKLSAgICAgICAgLy8gRklYTUU6IEZy
YW1lcyB3ZXJlIG9yaWdpbmFsbHkgY3JlYXRlZCB3aXRoIGEgcmVmY291bnQgb2YgMS4KLSAgICAg
ICAgLy8gTGVhdmUgdGhpcyByZWYgY2FsbCBoZXJlIHVudGlsIHdlIGNhbiBzdHJhaWdodGVuIHRo
YXQgb3V0LgotICAgICAgICByZWYoKTsKICAgICAgICAgcGFnZS0+aW5jcmVtZW50RnJhbWVDb3Vu
dCgpOwogICAgICAgICBvd25lckVsZW1lbnQtPm1fY29udGVudEZyYW1lID0gdGhpczsKICAgICB9
CisgICAgLy8gRklYTUU6IFVuZm9ydHVuYXRlbHksIHRoZSBhYm92ZSBjb2RlIG1lYW5zIHRoYXQg
dGhlIGNhbGxlciBoYXMgcmVzcG9uc2liaWxpdHkgZm9yIG9uZQorICAgIC8vIHJlZiBpbiB0aGUg
IW93bmVyRWxlbWVudCBjYXNlLCBidXQgbm90IGluIHRoZSBvd25lckVsZW1lbnQgY2FzZS4gSXQg
d291bGQgYmUgbmljZSB0bworICAgIC8vIHN0cmFpZ2h0ZW4gdGhhdCBvdXQuCiAKICNpZm5kZWYg
TkRFQlVHCiAgICAgKytGcmFtZUNvdW50ZXI6OmNvdW50OwpJbmRleDogV2ViQ29yZS9wYWdlL1Bh
Z2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9QYWdlLmNwcAkocmV2aXNpb24gMzAx
MTgpCisrKyBXZWJDb3JlL3BhZ2UvUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3LDcgKzc3
LDcgQEAgUGFnZTo6UGFnZShDaHJvbWVDbGllbnQqIGNocm9tZUNsaWVudCwgQwogICAgICwgbV9p
bnNwZWN0b3JDb250cm9sbGVyKG5ldyBJbnNwZWN0b3JDb250cm9sbGVyKHRoaXMsIGluc3BlY3Rv
ckNsaWVudCkpCiAgICAgLCBtX3NldHRpbmdzKG5ldyBTZXR0aW5ncyh0aGlzKSkKICAgICAsIG1f
cHJvZ3Jlc3MobmV3IFByb2dyZXNzVHJhY2tlcikKLSAgICAsIG1fYmFja0ZvcndhcmRMaXN0KG5l
dyBCYWNrRm9yd2FyZExpc3QodGhpcykpCisgICAgLCBtX2JhY2tGb3J3YXJkTGlzdChCYWNrRm9y
d2FyZExpc3Q6OmNyZWF0ZSh0aGlzKSkKICAgICAsIG1fZWRpdG9yQ2xpZW50KGVkaXRvckNsaWVu
dCkKICAgICAsIG1fZnJhbWVDb3VudCgwKQogICAgICwgbV90YWJLZXlDeWNsZXNUaHJvdWdoRWxl
bWVudHModHJ1ZSkKSW5kZXg6IFdlYkNvcmUvcGFnZS9tYWMvV2ViQ29yZUZyYW1lQnJpZGdlLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9tYWMvV2ViQ29yZUZyYW1lQnJpZGdlLm1tCShy
ZXZpc2lvbiAzMDExOCkKKysrIFdlYkNvcmUvcGFnZS9tYWMvV2ViQ29yZUZyYW1lQnJpZGdlLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC02MjcsMTIgKzYyNywxMSBAQCBzdGF0aWMgSFRNTEZvcm1FbGVt
ZW50ICpmb3JtRWxlbWVudEZyb21ECiAKIC0gKE5TVVJMICopVVJMV2l0aEF0dHJpYnV0ZVN0cmlu
ZzooTlNTdHJpbmcgKilzdHJpbmcKIHsKLSAgICBEb2N1bWVudCAqZG9jID0gbV9mcmFtZS0+ZG9j
dW1lbnQoKTsKLSAgICBpZiAoIWRvYykKKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBtX2ZyYW1l
LT5kb2N1bWVudCgpOworICAgIGlmICghZG9jdW1lbnQpCiAgICAgICAgIHJldHVybiBuaWw7Ci0g
ICAgLy8gRklYTUU6IGlzIHBhcnNlVVJMIGFwcHJvcHJpYXRlIGhlcmU/Ci0gICAgRGVwcmVjYXRl
ZFN0cmluZyByZWwgPSBwYXJzZVVSTChzdHJpbmcpLmRlcHJlY2F0ZWRTdHJpbmcoKTsKLSAgICBy
ZXR1cm4gS1VSTChkb2MtPmNvbXBsZXRlVVJMKHJlbCkpLmdldE5TVVJMKCk7CisgICAgLy8gRklY
TUU6IElzIHBhcnNlVVJMIGhlbHBmdWwgaGVyZT8KKyAgICByZXR1cm4gS1VSTChkb2N1bWVudC0+
ZGVwcmVjYXRlZENvbXBsZXRlVVJMKHBhcnNlVVJMKHN0cmluZykuZGVwcmVjYXRlZFN0cmluZygp
KSkuZ2V0TlNVUkwoKTsKIH0KIAogLSAoQk9PTClzZWFyY2hGb3I6KE5TU3RyaW5nICopc3RyaW5n
IGRpcmVjdGlvbjooQk9PTClmb3J3YXJkIGNhc2VTZW5zaXRpdmU6KEJPT0wpY2FzZUZsYWcgd3Jh
cDooQk9PTCl3cmFwRmxhZyBzdGFydEluU2VsZWN0aW9uOihCT09MKXN0YXJ0SW5TZWxlY3Rpb24K
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFNlbGVjdG9yLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250U2VsZWN0b3IuaAkocmV2aXNpb24g
MzAxMTgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRTZWxlY3Rvci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNiw4ICszNiwxMSBAQCBjbGFzcyBGb250RGVzY3JpcHRpb247CiAKIGNs
YXNzIEZvbnRTZWxlY3RvciA6IHB1YmxpYyBSZWZDb3VudGVkPEZvbnRTZWxlY3Rvcj4gewogcHVi
bGljOgotICAgIHZpcnR1YWwgfkZvbnRTZWxlY3RvcigpIHt9OwotICAgIHZpcnR1YWwgRm9udERh
dGEqIGdldEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBj
b25zdCBBdG9taWNTdHJpbmcmIGZhbWlseU5hbWUpID0gMDsKKyAgICB2aXJ0dWFsIH5Gb250U2Vs
ZWN0b3IoKSB7IH0KKyAgICB2aXJ0dWFsIEZvbnREYXRhKiBnZXRGb250RGF0YShjb25zdCBGb250
RGVzY3JpcHRpb24mLCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseU5hbWUpID0gMDsKKworcHJv
dGVjdGVkOgorICAgIEZvbnRTZWxlY3RvcigpIDogUmVmQ291bnRlZDxGb250U2VsZWN0b3I+KDEp
IHsgfQogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS90ZXh0L0F0b21pY1N0cmluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L0F0b21pY1N0cmluZy5jcHAJKHJldmlzaW9uIDMwMTE4KQorKysgV2ViQ29yZS9wbGF0Zm9y
bS90ZXh0L0F0b21pY1N0cmluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDggKzM5LDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgSGFzaFNldDxTdHJpbmdJbXBsKj4qIHN0cmlu
Z1RhYmxlOwogCi1zdHJ1Y3QgQ1N0cmluZ1RyYW5zbGF0b3IgCi17CitzdHJ1Y3QgQ1N0cmluZ1Ry
YW5zbGF0b3IgewogICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IGNoYXIqIGMpCiAgICAg
ewogICAgICAgICByZXR1cm4gU3RyaW5nSW1wbDo6Y29tcHV0ZUhhc2goYyk7CkBAIC03NCwxMyAr
NzMsMTYgQEAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEF0b21pY1N0cmluZyYgYSwgYwogICAgIHJl
dHVybiBDU3RyaW5nVHJhbnNsYXRvcjo6ZXF1YWwoaW1wbCwgYik7IAogfQogCi1TdHJpbmdJbXBs
KiBBdG9taWNTdHJpbmc6OmFkZChjb25zdCBjaGFyKiBjKQorUGFzc1JlZlB0cjxTdHJpbmdJbXBs
PiBBdG9taWNTdHJpbmc6OmFkZChjb25zdCBjaGFyKiBjKQogewogICAgIGlmICghYykKICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgaWYgKCEqYykKLSAgICAgICAgcmV0dXJuIFN0cmluZ0ltcGw6OmVt
cHR5KCk7ICAgIAotICAgIHJldHVybiAqc3RyaW5nVGFibGUtPmFkZDxjb25zdCBjaGFyKiwgQ1N0
cmluZ1RyYW5zbGF0b3I+KGMpLmZpcnN0OworICAgICAgICByZXR1cm4gU3RyaW5nSW1wbDo6ZW1w
dHkoKTsKKyAgICBwYWlyPEhhc2hTZXQ8U3RyaW5nSW1wbCo+OjppdGVyYXRvciwgYm9vbD4gYWRk
UmVzdWx0ID0gc3RyaW5nVGFibGUtPmFkZDxjb25zdCBjaGFyKiwgQ1N0cmluZ1RyYW5zbGF0b3I+
KGMpOworICAgIGlmICghYWRkUmVzdWx0LnNlY29uZCkKKyAgICAgICAgcmV0dXJuICphZGRSZXN1
bHQuZmlyc3Q7CisgICAgcmV0dXJuIGFkb3B0UmVmKCphZGRSZXN1bHQuZmlyc3QpOwogfQogCiBz
dHJ1Y3QgVUNoYXJCdWZmZXIgewpAQCAtMTM1LDcgKzEzNyw3IEBAIHN0cnVjdCBVQ2hhckJ1ZmZl
clRyYW5zbGF0b3IgewogICAgIH0KIH07CiAKLVN0cmluZ0ltcGwqIEF0b21pY1N0cmluZzo6YWRk
KGNvbnN0IFVDaGFyKiBzLCBpbnQgbGVuZ3RoKQorUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBBdG9t
aWNTdHJpbmc6OmFkZChjb25zdCBVQ2hhciogcywgaW50IGxlbmd0aCkKIHsKICAgICBpZiAoIXMp
CiAgICAgICAgIHJldHVybiAwOwpAQCAtMTQzLDI3ICsxNDUsMzMgQEAgU3RyaW5nSW1wbCogQXRv
bWljU3RyaW5nOjphZGQoY29uc3QgVUNoYQogICAgIGlmIChsZW5ndGggPT0gMCkKICAgICAgICAg
cmV0dXJuIFN0cmluZ0ltcGw6OmVtcHR5KCk7CiAgICAgCi0gICAgVUNoYXJCdWZmZXIgYnVmID0g
e3MsIGxlbmd0aH07IAotICAgIHJldHVybiAqc3RyaW5nVGFibGUtPmFkZDxVQ2hhckJ1ZmZlciwg
VUNoYXJCdWZmZXJUcmFuc2xhdG9yPihidWYpLmZpcnN0OworICAgIFVDaGFyQnVmZmVyIGJ1ZiA9
IHsgcywgbGVuZ3RoIH07IAorICAgIHBhaXI8SGFzaFNldDxTdHJpbmdJbXBsKj46Oml0ZXJhdG9y
LCBib29sPiBhZGRSZXN1bHQgPSBzdHJpbmdUYWJsZS0+YWRkPFVDaGFyQnVmZmVyLCBVQ2hhckJ1
ZmZlclRyYW5zbGF0b3I+KGJ1Zik7CisgICAgaWYgKCFhZGRSZXN1bHQuc2Vjb25kKQorICAgICAg
ICByZXR1cm4gKmFkZFJlc3VsdC5maXJzdDsKKyAgICByZXR1cm4gYWRvcHRSZWYoKmFkZFJlc3Vs
dC5maXJzdCk7CiB9CiAKLVN0cmluZ0ltcGwqIEF0b21pY1N0cmluZzo6YWRkKGNvbnN0IFVDaGFy
KiBzKQorUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBBdG9taWNTdHJpbmc6OmFkZChjb25zdCBVQ2hh
ciogcykKIHsKICAgICBpZiAoIXMpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgaW50IGxlbmd0
aCA9IDA7Ci0gICAgd2hpbGUgKHNbbGVuZ3RoXSAhPSBVQ2hhcigwKSkKKyAgICB3aGlsZSAoc1ts
ZW5ndGhdKQogICAgICAgICBsZW5ndGgrKzsKIAogICAgIGlmIChsZW5ndGggPT0gMCkKICAgICAg
ICAgcmV0dXJuIFN0cmluZ0ltcGw6OmVtcHR5KCk7CiAKLSAgICBVQ2hhckJ1ZmZlciBidWYgPSB7
cywgbGVuZ3RofTsgCi0gICAgcmV0dXJuICpzdHJpbmdUYWJsZS0+YWRkPFVDaGFyQnVmZmVyLCBV
Q2hhckJ1ZmZlclRyYW5zbGF0b3I+KGJ1ZikuZmlyc3Q7CisgICAgVUNoYXJCdWZmZXIgYnVmID0g
eyBzLCBsZW5ndGggfTsgCisgICAgcGFpcjxIYXNoU2V0PFN0cmluZ0ltcGwqPjo6aXRlcmF0b3Is
IGJvb2w+IGFkZFJlc3VsdCA9IHN0cmluZ1RhYmxlLT5hZGQ8VUNoYXJCdWZmZXIsIFVDaGFyQnVm
ZmVyVHJhbnNsYXRvcj4oYnVmKTsKKyAgICBpZiAoIWFkZFJlc3VsdC5zZWNvbmQpCisgICAgICAg
IHJldHVybiAqYWRkUmVzdWx0LmZpcnN0OworICAgIHJldHVybiBhZG9wdFJlZigqYWRkUmVzdWx0
LmZpcnN0KTsKIH0KIAotU3RyaW5nSW1wbCogQXRvbWljU3RyaW5nOjphZGQoU3RyaW5nSW1wbCog
cikKK1Bhc3NSZWZQdHI8U3RyaW5nSW1wbD4gQXRvbWljU3RyaW5nOjphZGQoU3RyaW5nSW1wbCog
cikKIHsKICAgICBpZiAoIXIgfHwgci0+bV9pblRhYmxlKQogICAgICAgICByZXR1cm4gcjsKQEAg
LTE4MiwxMiArMTkwLDEyIEBAIHZvaWQgQXRvbWljU3RyaW5nOjpyZW1vdmUoU3RyaW5nSW1wbCog
cikKICAgICBzdHJpbmdUYWJsZS0+cmVtb3ZlKHIpOwogfQogCi1TdHJpbmdJbXBsKiBBdG9taWNT
dHJpbmc6OmFkZChjb25zdCBLSlM6OklkZW50aWZpZXImIHN0cikKK1Bhc3NSZWZQdHI8U3RyaW5n
SW1wbD4gQXRvbWljU3RyaW5nOjphZGQoY29uc3QgS0pTOjpJZGVudGlmaWVyJiBzdHIpCiB7CiAg
ICAgcmV0dXJuIGFkZChyZWludGVycHJldF9jYXN0PGNvbnN0IFVDaGFyKj4oc3RyLmRhdGEoKSks
IHN0ci5zaXplKCkpOwogfQogCi1TdHJpbmdJbXBsKiBBdG9taWNTdHJpbmc6OmFkZChjb25zdCBL
SlM6OlVTdHJpbmcmIHN0cikKK1Bhc3NSZWZQdHI8U3RyaW5nSW1wbD4gQXRvbWljU3RyaW5nOjph
ZGQoY29uc3QgS0pTOjpVU3RyaW5nJiBzdHIpCiB7CiAgICAgcmV0dXJuIGFkZChyZWludGVycHJl
dF9jYXN0PGNvbnN0IFVDaGFyKj4oc3RyLmRhdGEoKSksIHN0ci5zaXplKCkpOwogfQpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0F0b21pY1N0cmluZy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vdGV4dC9BdG9taWNTdHJpbmcuaAkocmV2aXNpb24gMzAxMTgpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL3RleHQvQXRvbWljU3RyaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTk5LDEy
ICs5OSwxMiBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFN0cmluZyBtX3N0cmluZzsKICAgICAK
LSAgICBzdGF0aWMgU3RyaW5nSW1wbCogYWRkKGNvbnN0IGNoYXIqKTsKLSAgICBzdGF0aWMgU3Ry
aW5nSW1wbCogYWRkKGNvbnN0IFVDaGFyKiwgaW50IGxlbmd0aCk7Ci0gICAgc3RhdGljIFN0cmlu
Z0ltcGwqIGFkZChjb25zdCBVQ2hhciopOwotICAgIHN0YXRpYyBTdHJpbmdJbXBsKiBhZGQoU3Ry
aW5nSW1wbCopOwotICAgIHN0YXRpYyBTdHJpbmdJbXBsKiBhZGQoY29uc3QgS0pTOjpVU3RyaW5n
Jik7Ci0gICAgc3RhdGljIFN0cmluZ0ltcGwqIGFkZChjb25zdCBLSlM6OklkZW50aWZpZXImKTsK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBhZGQoY29uc3QgY2hhciopOworICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGFkZChjb25zdCBVQ2hhciosIGludCBsZW5n
dGgpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGFkZChjb25zdCBVQ2hhciop
OworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGFkZChTdHJpbmdJbXBsKik7Cisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gYWRkKGNvbnN0IEtKUzo6VVN0cmluZyYp
OworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGFkZChjb25zdCBLSlM6OklkZW50
aWZpZXImKTsKIH07CiAKIGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgQXRvbWljU3RyaW5n
JiBhLCBjb25zdCBBdG9taWNTdHJpbmcmIGIpIHsgcmV0dXJuIGEuaW1wbCgpID09IGIuaW1wbCgp
OyB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3RleHQvQ1N0cmluZy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0NTdHJpbmcuY3BwCShyZXZpc2lvbiAzMDExOCkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9DU3RyaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAs
NyArNTAsNyBAQCB2b2lkIENTdHJpbmc6OmluaXQoY29uc3QgY2hhciogc3RyLCB1bnNpCiAgICAg
aWYgKCFzdHIpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBtX2J1ZmZlciA9IG5ldyBDU3Ry
aW5nQnVmZmVyKGxlbmd0aCArIDEpOworICAgIG1fYnVmZmVyID0gQ1N0cmluZ0J1ZmZlcjo6Y3Jl
YXRlKGxlbmd0aCArIDEpOwogICAgIG1lbWNweShtX2J1ZmZlci0+ZGF0YSgpLCBzdHIsIGxlbmd0
aCk7IAogICAgIG1fYnVmZmVyLT5kYXRhKClbbGVuZ3RoXSA9ICdcMCc7CiB9CkBAIC04MSw3ICs4
MSw3IEBAIERlcHJlY2F0ZWRDU3RyaW5nIENTdHJpbmc6OmRlcHJlY2F0ZWRDU3QKIENTdHJpbmcg
Q1N0cmluZzo6bmV3VW5pbml0aWFsaXplZChzaXplX3QgbGVuZ3RoLCBjaGFyKiYgY2hhcmFjdGVy
QnVmZmVyKQogewogICAgIENTdHJpbmcgcmVzdWx0OwotICAgIHJlc3VsdC5tX2J1ZmZlciA9IG5l
dyBDU3RyaW5nQnVmZmVyKGxlbmd0aCArIDEpOworICAgIHJlc3VsdC5tX2J1ZmZlciA9IENTdHJp
bmdCdWZmZXI6OmNyZWF0ZShsZW5ndGggKyAxKTsKICAgICBjaGFyKiBieXRlcyA9IHJlc3VsdC5t
X2J1ZmZlci0+ZGF0YSgpOwogICAgIGJ5dGVzW2xlbmd0aF0gPSAnXDAnOwogICAgIGNoYXJhY3Rl
ckJ1ZmZlciA9IGJ5dGVzOwpAQCAtOTUsNyArOTUsNyBAQCB2b2lkIENTdHJpbmc6OmNvcHlCdWZm
ZXJJZk5lZWRlZCgpCiAgICAgICAgIAogICAgIGludCBsZW4gPSBtX2J1ZmZlci0+bGVuZ3RoKCk7
CiAgICAgUmVmUHRyPENTdHJpbmdCdWZmZXI+IG1fdGVtcCA9IG1fYnVmZmVyOwotICAgIG1fYnVm
ZmVyID0gbmV3IENTdHJpbmdCdWZmZXIobGVuKTsKKyAgICBtX2J1ZmZlciA9IENTdHJpbmdCdWZm
ZXI6OmNyZWF0ZShsZW4pOwogICAgIG1lbWNweShtX2J1ZmZlci0+ZGF0YSgpLCBtX3RlbXAtPmRh
dGEoKSwgbGVuKTsKIH0KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0NTdHJpbmcuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3RleHQvQ1N0cmluZy5oCShyZXZpc2lvbiAz
MDExOCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9DU3RyaW5nLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgQ1N0cmluZ19oCiAjZGVmaW5lIENTdHJpbmdfaAog
CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5o
PgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApAQCAtMzcsMTIgKzM4LDE0IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAKICAgICBjbGFzcyBDU3RyaW5nQnVmZmVyIDogcHVibGljIFJlZkNv
dW50ZWQ8Q1N0cmluZ0J1ZmZlcj4gewogICAgIHB1YmxpYzoKLSAgICAgICAgQ1N0cmluZ0J1ZmZl
cih1bnNpZ25lZCBsZW5ndGgpIDogbV92ZWN0b3IobGVuZ3RoKSB7IH0KKyAgICAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8Q1N0cmluZ0J1ZmZlcj4gY3JlYXRlKHVuc2lnbmVkIGxlbmd0aCkgeyByZXR1
cm4gbmV3IENTdHJpbmdCdWZmZXIobGVuZ3RoKTsgfQogCiAgICAgICAgIGNoYXIqIGRhdGEoKSB7
IHJldHVybiBtX3ZlY3Rvci5kYXRhKCk7IH0KICAgICAgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29u
c3QgeyByZXR1cm4gbV92ZWN0b3Iuc2l6ZSgpOyB9CiAKICAgICBwcml2YXRlOgorICAgICAgICBl
eHBsaWNpdCBDU3RyaW5nQnVmZmVyKHVuc2lnbmVkIGxlbmd0aCkgOiBSZWZDb3VudGVkPENTdHJp
bmdCdWZmZXI+KDEpLCBtX3ZlY3RvcihsZW5ndGgpIHsgfQorCiAgICAgICAgIFZlY3RvcjxjaGFy
PiBtX3ZlY3RvcjsKICAgICB9OwogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3RleHQvU3RyaW5n
SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1N0cmluZ0ltcGwu
Y3BwCShyZXZpc2lvbiAzMDExOCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmdJbXBs
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM0LDcgKzEzNCw3IEBAIGlubGluZSBTdHJpbmdJbXBs
OjpTdHJpbmdJbXBsKFVDaGFyKiBjaGEKIAogLy8gVGhpcyBjb25zdHJ1Y3RvciBpcyBvbmx5IGZv
ciB1c2UgYnkgQXRvbWljU3RyaW5nLgogU3RyaW5nSW1wbDo6U3RyaW5nSW1wbChjb25zdCBVQ2hh
ciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBoYXNoKQotICAgIDogUmVm
Q291bnRlZDxTdHJpbmdJbXBsPigwKQorICAgIDogUmVmQ291bnRlZDxTdHJpbmdJbXBsPigxKQog
ICAgICwgbV9sZW5ndGgobGVuZ3RoKQogICAgICwgbV9oYXNoKGhhc2gpCiAgICAgLCBtX2luVGFi
bGUodHJ1ZSkKQEAgLTE1MSw3ICsxNTEsNyBAQCBTdHJpbmdJbXBsOjpTdHJpbmdJbXBsKGNvbnN0
IFVDaGFyKiBjaGFyCiAKIC8vIFRoaXMgY29uc3RydWN0b3IgaXMgb25seSBmb3IgdXNlIGJ5IEF0
b21pY1N0cmluZy4KIFN0cmluZ0ltcGw6OlN0cmluZ0ltcGwoY29uc3QgY2hhciogY2hhcmFjdGVy
cywgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBoYXNoKQotICAgIDogUmVmQ291bnRlZDxTdHJp
bmdJbXBsPigwKQorICAgIDogUmVmQ291bnRlZDxTdHJpbmdJbXBsPigxKQogICAgICwgbV9sZW5n
dGgobGVuZ3RoKQogICAgICwgbV9oYXNoKGhhc2gpCiAgICAgLCBtX2luVGFibGUodHJ1ZSkKSW5k
ZXg6IFdlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwCShyZXZpc2lvbiAzMDExOCkKKysrIFdl
YkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDEs
NyArMjQxLDcgQEAgS1VSTCBIaXRUZXN0UmVzdWx0OjphYnNvbHV0ZUltYWdlVVJMKCkgYwogICAg
IGVsc2UKICAgICAgICAgcmV0dXJuIEtVUkwoKTsKICAgICAKLSAgICByZXR1cm4gS1VSTChtX2lu
bmVyTm9uU2hhcmVkTm9kZS0+ZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwocGFyc2VVUkwodXJsU3Ry
aW5nKS5kZXByZWNhdGVkU3RyaW5nKCkpKTsKKyAgICByZXR1cm4gS1VSTChtX2lubmVyTm9uU2hh
cmVkTm9kZS0+ZG9jdW1lbnQoKS0+ZGVwcmVjYXRlZENvbXBsZXRlVVJMKHBhcnNlVVJMKHVybFN0
cmluZykuZGVwcmVjYXRlZFN0cmluZygpKSk7CiB9CiAKIEtVUkwgSGl0VGVzdFJlc3VsdDo6YWJz
b2x1dGVMaW5rVVJMKCkgY29uc3QKQEAgLTI1OSw3ICsyNTksNyBAQCBLVVJMIEhpdFRlc3RSZXN1
bHQ6OmFic29sdXRlTGlua1VSTCgpIGNvCiAgICAgZWxzZQogICAgICAgICByZXR1cm4gS1VSTCgp
OwogCi0gICAgcmV0dXJuIEtVUkwobV9pbm5lclVSTEVsZW1lbnQtPmRvY3VtZW50KCktPmNvbXBs
ZXRlVVJMKHBhcnNlVVJMKHVybFN0cmluZykuZGVwcmVjYXRlZFN0cmluZygpKSk7CisgICAgcmV0
dXJuIEtVUkwobV9pbm5lclVSTEVsZW1lbnQtPmRvY3VtZW50KCktPmRlcHJlY2F0ZWRDb21wbGV0
ZVVSTChwYXJzZVVSTCh1cmxTdHJpbmcpLmRlcHJlY2F0ZWRTdHJpbmcoKSkpOwogfQogCiBib29s
IEhpdFRlc3RSZXN1bHQ6OmlzTGl2ZUxpbmsoKSBjb25zdApJbmRleDogV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJPYmplY3QuY3BwCShyZXZpc2lvbiAzMDExOCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2ODAsNyArMTY4MCw3IEBAIHZvaWQgUmVu
ZGVyT2JqZWN0OjphZGRQREZVUkxSZWN0KEdyYXBoaWMKICAgICAgICAgICAgICAgICAgICAgaHJl
ZiA9IGVsZW1lbnQtPmdldEF0dHJpYnV0ZShocmVmQXR0cik7CiAKICAgICAgICAgICAgICAgICBp
ZiAoIWhyZWYuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgS1VSTCBsaW5rID0gZWxl
bWVudC0+ZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoaHJlZi5kZXByZWNhdGVkU3RyaW5nKCkpOwor
ICAgICAgICAgICAgICAgICAgICBLVVJMIGxpbmsgPSBlbGVtZW50LT5kb2N1bWVudCgpLT5kZXBy
ZWNhdGVkQ29tcGxldGVVUkwoaHJlZi5kZXByZWNhdGVkU3RyaW5nKCkpOwogICAgICAgICAgICAg
ICAgICAgICBncmFwaGljc0NvbnRleHQtPnNldFVSTEZvclJlY3QobGluaywgcmVjdCk7CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyUGFydE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
UGFydE9iamVjdC5jcHAJKHJldmlzaW9uIDMwMTE4KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyUGFydE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDcgQEAgUmVuZGVy
UGFydE9iamVjdDo6flJlbmRlclBhcnRPYmplY3QoKQogCiBzdGF0aWMgYm9vbCBpc1VSTEFsbG93
ZWQoRG9jdW1lbnQgKmRvYywgY29uc3QgU3RyaW5nICZ1cmwpCiB7Ci0gICAgS1VSTCBuZXdVUkwo
ZG9jLT5jb21wbGV0ZVVSTCh1cmwuZGVwcmVjYXRlZFN0cmluZygpKSk7CisgICAgS1VSTCBuZXdV
UkwoZG9jLT5kZXByZWNhdGVkQ29tcGxldGVVUkwodXJsLmRlcHJlY2F0ZWRTdHJpbmcoKSkpOwog
ICAgIG5ld1VSTC5zZXRSZWYoRGVwcmVjYXRlZFN0cmluZzo6bnVsbCk7CiAgICAgCiAgICAgaWYg
KGRvYy0+ZnJhbWUoKS0+cGFnZSgpLT5mcmFtZUNvdW50KCkgPj0gMjAwKQpJbmRleDogV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2VFbXB0eUNsaWVudHMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZUVtcHR5Q2xpZW50cy5oCShyZXZpc2lvbiAzMDExOCkK
KysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlRW1wdHlDbGllbnRzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTIzOCw3ICsyMzgsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRpZEZp
bmlzaExvYWQoKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZUZvckRhdGFTb3VyY2VSZXBs
YWNlbWVudCgpIHsgfQogICAgIAotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxEb2N1bWVudExvYWRl
cj4gY3JlYXRlRG9jdW1lbnRMb2FkZXIoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBj
b25zdCBTdWJzdGl0dXRlRGF0YSYgc3Vic3RpdHV0ZURhdGEpIHsgcmV0dXJuIG5ldyBEb2N1bWVu
dExvYWRlcihyZXF1ZXN0LCBzdWJzdGl0dXRlRGF0YSk7IH0KKyAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8RG9jdW1lbnRMb2FkZXI+IGNyZWF0ZURvY3VtZW50TG9hZGVyKGNvbnN0IFJlc291cmNlUmVx
dWVzdCYgcmVxdWVzdCwgY29uc3QgU3Vic3RpdHV0ZURhdGEmIHN1YnN0aXR1dGVEYXRhKSB7IHJl
dHVybiBEb2N1bWVudExvYWRlcjo6Y3JlYXRlKHJlcXVlc3QsIHN1YnN0aXR1dGVEYXRhKTsgfQog
ICAgIHZpcnR1YWwgdm9pZCBzZXRUaXRsZShjb25zdCBTdHJpbmcmIHRpdGxlLCBjb25zdCBLVVJM
JikgeyB9CiAgICAgCiAgICAgdmlydHVhbCBTdHJpbmcgdXNlckFnZW50KGNvbnN0IEtVUkwmKSB7
IHJldHVybiAiIjsgfQpJbmRleDogV2ViS2l0L21hYy9IaXN0b3J5L1dlYkJhY2tGb3J3YXJkTGlz
dC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL0hpc3RvcnkvV2ViQmFja0ZvcndhcmRMaXN0
Lm1tCShyZXZpc2lvbiAzMDExOCkKKysrIFdlYktpdC9tYWMvSGlzdG9yeS9XZWJCYWNrRm9yd2Fy
ZExpc3QubW0JKHdvcmtpbmcgY29weSkKQEAgLTEwMSw3ICsxMDEsNyBAQCBXZWJCYWNrRm9yd2Fy
ZExpc3QgKmtpdChCYWNrRm9yd2FyZExpc3QqCiAKIC0gKGlkKWluaXQKIHsKLSAgICBSZWZQdHI8
QmFja0ZvcndhcmRMaXN0PiBjb3JlTGlzdChuZXcgQmFja0ZvcndhcmRMaXN0KDApKTsKKyAgICBS
ZWZQdHI8QmFja0ZvcndhcmRMaXN0PiBjb3JlTGlzdChCYWNrRm9yd2FyZExpc3Q6OmNyZWF0ZSgw
KSk7CiAgICAgcmV0dXJuIFtzZWxmIGluaXRXaXRoQmFja0ZvcndhcmRMaXN0OmNvcmVMaXN0LnJl
bGVhc2UoKV07CiB9CiAKSW5kZXg6IFdlYktpdC9tYWMvTWlzYy9XZWJOU0F0dHJpYnV0ZWRTdHJp
bmdFeHRyYXMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9NaXNjL1dlYk5TQXR0cmlidXRl
ZFN0cmluZ0V4dHJhcy5tbQkocmV2aXNpb24gMzAxMTgpCisrKyBXZWJLaXQvbWFjL01pc2MvV2Vi
TlNBdHRyaWJ1dGVkU3RyaW5nRXh0cmFzLm1tCSh3b3JraW5nIGNvcHkpCkBAIC05NCw3ICs5NCw3
IEBAIHN0YXRpYyBOU0ZpbGVXcmFwcGVyICpmaWxlV3JhcHBlckZvckVsZW0KICAgICAKICAgICBj
b25zdCBBdG9taWNTdHJpbmcmIGF0dHIgPSBlLT5nZXRBdHRyaWJ1dGUoc3JjQXR0cik7CiAgICAg
aWYgKCFhdHRyLmlzRW1wdHkoKSkgewotICAgICAgICBOU1VSTCAqVVJMID0gS1VSTChlLT5kb2N1
bWVudCgpLT5jb21wbGV0ZVVSTChhdHRyLmRlcHJlY2F0ZWRTdHJpbmcoKSkpLmdldE5TVVJMKCk7
CisgICAgICAgIE5TVVJMICpVUkwgPSBLVVJMKGUtPmRvY3VtZW50KCktPmRlcHJlY2F0ZWRDb21w
bGV0ZVVSTChhdHRyLmRlcHJlY2F0ZWRTdHJpbmcoKSkpLmdldE5TVVJMKCk7CiAgICAgICAgIHdy
YXBwZXIgPSBbW2tpdChlLT5kb2N1bWVudCgpLT5mcmFtZSgpKSBfZGF0YVNvdXJjZV0gX2ZpbGVX
cmFwcGVyRm9yVVJMOlVSTF07CiAgICAgfQogICAgIGlmICghd3JhcHBlcikgewpJbmRleDogV2Vi
S2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1tCShy
ZXZpc2lvbiAzMDExOCkKKysrIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2Fk
ZXJDbGllbnQubW0JKHdvcmtpbmcgY29weSkKQEAgLTkyOSw3ICs5MjksNyBAQCB2b2lkIFdlYkZy
YW1lTG9hZGVyQ2xpZW50OjpwcmVwYXJlRm9yRGF0CiAKIFBhc3NSZWZQdHI8RG9jdW1lbnRMb2Fk
ZXI+IFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpjcmVhdGVEb2N1bWVudExvYWRlcihjb25zdCBSZXNv
dXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFN1YnN0aXR1dGVEYXRhJiBzdWJzdGl0dXRlRGF0
YSkKIHsKLSAgICBSZWZQdHI8V2ViRG9jdW1lbnRMb2FkZXJNYWM+IGxvYWRlciA9IG5ldyBXZWJE
b2N1bWVudExvYWRlck1hYyhyZXF1ZXN0LCBzdWJzdGl0dXRlRGF0YSk7CisgICAgUmVmUHRyPFdl
YkRvY3VtZW50TG9hZGVyTWFjPiBsb2FkZXIgPSBXZWJEb2N1bWVudExvYWRlck1hYzo6Y3JlYXRl
KHJlcXVlc3QsIHN1YnN0aXR1dGVEYXRhKTsKIAogICAgIFdlYkRhdGFTb3VyY2UgKmRhdGFTb3Vy
Y2UgPSBbW1dlYkRhdGFTb3VyY2UgYWxsb2NdIF9pbml0V2l0aERvY3VtZW50TG9hZGVyOmxvYWRl
ci5nZXQoKV07CiAgICAgbG9hZGVyLT5zZXREYXRhU291cmNlKGRhdGFTb3VyY2UsIGdldFdlYlZp
ZXcobV93ZWJGcmFtZS5nZXQoKSkpOwpJbmRleDogV2ViS2l0L21hYy9XZWJWaWV3L1dlYkRhdGFT
b3VyY2UubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJWaWV3L1dlYkRhdGFTb3VyY2Uu
bW0JKHJldmlzaW9uIDMwMTE4KQorKysgV2ViS2l0L21hYy9XZWJWaWV3L1dlYkRhdGFTb3VyY2Uu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTM3MSw3ICszNzEsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQg
YWRkVHlwZXNGcm9tQ2xhc3MoTlNNCiAgICAgcmV0dXJuIF9wcml2YXRlLT5sb2FkZXI7CiB9CiAK
LS0gKGlkKV9pbml0V2l0aERvY3VtZW50TG9hZGVyOihXZWJEb2N1bWVudExvYWRlck1hYyAqKWxv
YWRlcgorLSAoaWQpX2luaXRXaXRoRG9jdW1lbnRMb2FkZXI6KFBhc3NSZWZQdHI8V2ViRG9jdW1l
bnRMb2FkZXJNYWM+KWxvYWRlcgogewogICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CiAgICAgaWYg
KCFzZWxmKQpAQCAtMzc5LDggKzM3OSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBhZGRUeXBlc0Zy
b21DbGFzcyhOU00KICAgICAKICAgICBfcHJpdmF0ZSA9IFtbV2ViRGF0YVNvdXJjZVByaXZhdGUg
YWxsb2NdIGluaXRdOwogICAgIAotICAgIF9wcml2YXRlLT5sb2FkZXIgPSBsb2FkZXI7Ci0gICAg
bG9hZGVyLT5yZWYoKTsKKyAgICBfcHJpdmF0ZS0+bG9hZGVyID0gbG9hZGVyLnJlbGVhc2VSZWYo
KTsKICAgICAgICAgCiAgICAgTE9HKExvYWRpbmcsICJjcmVhdGluZyBkYXRhc291cmNlIGZvciAl
QCIsIF9wcml2YXRlLT5sb2FkZXItPnJlcXVlc3QoKS51cmwoKS5nZXROU1VSTCgpKTsKICAgICAK
QEAgLTM5NSw3ICszOTQsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYWRkVHlwZXNGcm9tQ2xhc3Mo
TlNNCiAKIC0gKGlkKWluaXRXaXRoUmVxdWVzdDooTlNVUkxSZXF1ZXN0ICopcmVxdWVzdAogewot
ICAgIHJldHVybiBbc2VsZiBfaW5pdFdpdGhEb2N1bWVudExvYWRlcjpuZXcgV2ViRG9jdW1lbnRM
b2FkZXJNYWMocmVxdWVzdCwgU3Vic3RpdHV0ZURhdGEoKSldOworICAgIHJldHVybiBbc2VsZiBf
aW5pdFdpdGhEb2N1bWVudExvYWRlcjpXZWJEb2N1bWVudExvYWRlck1hYzo6Y3JlYXRlKHJlcXVl
c3QsIFN1YnN0aXR1dGVEYXRhKCkpXTsKIH0KIAogLSAodm9pZClkZWFsbG9jCkluZGV4OiBXZWJL
aXQvbWFjL1dlYlZpZXcvV2ViRGF0YVNvdXJjZUludGVybmFsLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0L21hYy9XZWJWaWV3L1dlYkRhdGFTb3VyY2VJbnRlcm5hbC5oCShyZXZpc2lvbiAzMDExOCkK
KysrIFdlYktpdC9tYWMvV2ViVmlldy9XZWJEYXRhU291cmNlSW50ZXJuYWwuaAkod29ya2luZyBj
b3B5KQpAQCAtMjcsNiArMjcsNyBAQAogICovCiAKICNpbXBvcnQgIldlYkRhdGFTb3VyY2VQcml2
YXRlLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9Gb3J3YXJkLmg+CiAKICNpZmRlZiBfX2Nw
bHVzcGx1cwogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNjQsNyArNjUsNyBAQCBjbGFzcyBXZWJE
b2N1bWVudExvYWRlck1hYzsKICsgKE5TTXV0YWJsZURpY3Rpb25hcnkgKilfcmVwVHlwZXNBbGxv
d0ltYWdlVHlwZU9taXNzaW9uOihCT09MKWFsbG93SW1hZ2VUeXBlT21pc3Npb247CiAtICh2b2lk
KV9yZXBsYWNlU2VsZWN0aW9uV2l0aEFyY2hpdmU6KFdlYkFyY2hpdmUgKilhcmNoaXZlIHNlbGVj
dFJlcGxhY2VtZW50OihCT09MKXNlbGVjdFJlcGxhY2VtZW50OwogLSAoV2ViUmVzb3VyY2UgKilf
YXJjaGl2ZWRTdWJyZXNvdXJjZUZvclVSTDooTlNVUkwgKilVUkw7Ci0tIChpZClfaW5pdFdpdGhE
b2N1bWVudExvYWRlcjooV2ViRG9jdW1lbnRMb2FkZXJNYWMqKWxvYWRlcjsKKy0gKGlkKV9pbml0
V2l0aERvY3VtZW50TG9hZGVyOihQYXNzUmVmUHRyPFdlYkRvY3VtZW50TG9hZGVyTWFjPilsb2Fk
ZXI7CiAtICh2b2lkKV9maW5pc2hlZExvYWRpbmc7CiAtICh2b2lkKV9yZWNlaXZlZERhdGE6KE5T
RGF0YSAqKWRhdGE7CiAtICh2b2lkKV9yZXZlcnRUb1Byb3Zpc2lvbmFsU3RhdGU7CkluZGV4OiBX
ZWJLaXQvbWFjL1dlYlZpZXcvV2ViRG9jdW1lbnRMb2FkZXJNYWMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQvbWFjL1dlYlZpZXcvV2ViRG9jdW1lbnRMb2FkZXJNYWMuaAkocmV2aXNpb24gMzAxMTgp
CisrKyBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViRG9jdW1lbnRMb2FkZXJNYWMuaAkod29ya2luZyBj
b3B5KQpAQCAtMzMsMTMgKzMzLDkgQEAKIEBjbGFzcyBXZWJEYXRhU291cmNlOwogQGNsYXNzIFdl
YlZpZXc7CiAKLW5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICBjbGFzcyBSZXNvdXJjZVJlcXVlc3Q7
Ci19Ci0KIGNsYXNzIFdlYkRvY3VtZW50TG9hZGVyTWFjIDogcHVibGljIFdlYkNvcmU6OkRvY3Vt
ZW50TG9hZGVyIHsKIHB1YmxpYzoKLSAgICBXZWJEb2N1bWVudExvYWRlck1hYyhjb25zdCBXZWJD
b3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBXZWJDb3JlOjpTdWJzdGl0dXRlRGF0YSYpOwor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkRvY3VtZW50TG9hZGVyTWFjPiBjcmVhdGUoY29uc3Qg
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgV2ViQ29yZTo6U3Vic3RpdHV0ZURhdGEm
KTsKIAogICAgIHZvaWQgc2V0RGF0YVNvdXJjZShXZWJEYXRhU291cmNlICosIFdlYlZpZXcqKTsK
ICAgICB2b2lkIGRldGFjaERhdGFTb3VyY2UoKTsKQEAgLTUyLDYgKzQ4LDggQEAgcHVibGljOgog
ICAgIHZvaWQgZGVjcmVhc2VMb2FkQ291bnQodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyKTsKIAog
cHJpdmF0ZToKKyAgICBXZWJEb2N1bWVudExvYWRlck1hYyhjb25zdCBXZWJDb3JlOjpSZXNvdXJj
ZVJlcXVlc3QmLCBjb25zdCBXZWJDb3JlOjpTdWJzdGl0dXRlRGF0YSYpOworCiAgICAgdm9pZCBy
ZXRhaW5EYXRhU291cmNlKCk7CiAgICAgdm9pZCByZWxlYXNlRGF0YVNvdXJjZSgpOwogCkluZGV4
OiBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViRG9jdW1lbnRMb2FkZXJNYWMubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0L21hYy9XZWJWaWV3L1dlYkRvY3VtZW50TG9hZGVyTWFjLm1tCShyZXZpc2lvbiAz
MDExOCkKKysrIFdlYktpdC9tYWMvV2ViVmlldy9XZWJEb2N1bWVudExvYWRlck1hYy5tbQkod29y
a2luZyBjb3B5KQpAQCAtMzMsMTMgKzMzLDE4IEBACiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OwogCi1XZWJEb2N1bWVudExvYWRlck1hYzo6V2ViRG9jdW1lbnRMb2FkZXJNYWMoY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBTdWJzdGl0dXRlRGF0YSYgc3Vic3RpdHV0ZURh
dGEpCitpbmxpbmUgV2ViRG9jdW1lbnRMb2FkZXJNYWM6OldlYkRvY3VtZW50TG9hZGVyTWFjKGNv
bnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgU3Vic3RpdHV0ZURhdGEmIHN1YnN0
aXR1dGVEYXRhKQogICAgIDogRG9jdW1lbnRMb2FkZXIocmVxdWVzdCwgc3Vic3RpdHV0ZURhdGEp
CiAgICAgLCBtX2RhdGFTb3VyY2UobmlsKQogICAgICwgbV9pc0RhdGFTb3VyY2VSZXRhaW5lZChm
YWxzZSkKIHsKIH0KIAorUGFzc1JlZlB0cjxXZWJEb2N1bWVudExvYWRlck1hYz4gV2ViRG9jdW1l
bnRMb2FkZXJNYWM6OmNyZWF0ZShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0
IFN1YnN0aXR1dGVEYXRhJiBzdWJzdGl0dXRlRGF0YSkgCit7CisgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBXZWJEb2N1bWVudExvYWRlck1hYyhyZXF1ZXN0LCBzdWJzdGl0dXRlRGF0YSkpOworfQor
CiBzdGF0aWMgaW5saW5lIGJvb2wgbmVlZHNEYXRhTG9hZFdvcmthcm91bmQoV2ViVmlldyAqd2Vi
VmlldykKIHsKICNpZmRlZiBCVUlMRElOR19PTl9USUdFUgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19230</attachid>
            <date>2008-02-20 09:19:20 -0800</date>
            <delta_ts>2008-02-20 09:19:20 -0800</delta_ts>
            <desc>a patch with a &quot;sniffer&quot; I was using to see 0 ref counts that were actually hit at runtime</desc>
            <filename>RefCountSnifferPatch.txt</filename>
            <type>text/plain</type>
            <size>1281</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAJKHJldmlzaW9uIDMwMTE4KQorKysgSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTcsMyAr
Mjk3LDQgQEAgX2pzY29yZV9jb2xsZWN0b3JfaW50cm9zcGVjdGlvbgogX2pzY29yZV9mYXN0bWFs
bG9jX2ludHJvc3BlY3Rpb24KIF9rSlNDbGFzc0RlZmluaXRpb25FbXB0eQogX2tqc19zdHJ0b2QK
K19fWk4zV1RGMTBpbml0aWFsUmVmRXYKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi9IYXNoVGFi
bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3d0Zi9IYXNoVGFibGUuY3BwCShy
ZXZpc2lvbiAzMDExOCkKKysrIEphdmFTY3JpcHRDb3JlL3d0Zi9IYXNoVGFibGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01OSw0ICs1OSw5IEBAIHZvaWQgSGFzaFRhYmxlU3RhdHM6OnJlY29yZENv
bGxpc2lvbkF0Q28KIAogI2VuZGlmCiAKK3ZvaWQgaW5pdGlhbFJlZigpCit7CisgICAgcHJpbnRm
KCJ5dWNrISBpbml0aWFsIHJlZiFcbiIpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6
IEphdmFTY3JpcHRDb3JlL3d0Zi9SZWZDb3VudGVkLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlw
dENvcmUvd3RmL1JlZkNvdW50ZWQuaAkocmV2aXNpb24gMzAxMTgpCisrKyBKYXZhU2NyaXB0Q29y
ZS93dGYvUmVmQ291bnRlZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw4IEBACiAKIG5h
bWVzcGFjZSBXVEYgewogCit2b2lkIGluaXRpYWxSZWYoKTsKKwogdGVtcGxhdGU8Y2xhc3MgVD4g
Y2xhc3MgUmVmQ291bnRlZCA6IE5vbmNvcHlhYmxlIHsKIHB1YmxpYzoKICAgICBSZWZDb3VudGVk
KGludCBpbml0aWFsUmVmQ291bnQgPSAwKQpAQCAtMzgsNiArNDAsOCBAQCBwdWJsaWM6CiAKICAg
ICB2b2lkIHJlZigpCiAgICAgeworICAgICAgICBpZiAoIW1fcmVmQ291bnQpCisgICAgICAgICAg
ICBpbml0aWFsUmVmKCk7CiAgICAgICAgIEFTU0VSVCghbV9kZWxldGlvbkhhc0JlZ3VuKTsKICAg
ICAgICAgKyttX3JlZkNvdW50OwogICAgIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>21561</attachid>
            <date>2008-06-07 09:45:04 -0700</date>
            <delta_ts>2008-06-08 09:01:46 -0700</delta_ts>
            <desc>patch</desc>
            <filename>RefCount1Patch.txt</filename>
            <type>text/plain</type>
            <size>163785</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL1ZNL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2
YVNjcmlwdENvcmUvVk0vQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMzQzNzYpCisrKyBKYXZhU2Ny
aXB0Q29yZS9WTS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTQsNyArMTU0LDEw
IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wKEV4ZWNTdGF0ZSogZXhlYykgY28KICAgICAgICAgaWYg
KG1hY2hpbmUoKS5pc09wY29kZShpdC0+dS5vcGNvZGUpKQogICAgICAgICAgICAgKytpbnN0cnVj
dGlvbkNvdW50OwogCi0gICAgcHJpbnRmKCIlbHUgaW5zdHJ1Y3Rpb25zOyAlbHUgYnl0ZXMgYXQg
JXA7ICVkIGxvY2FscyAoJWQgcGFyYW1ldGVycyk7ICVkIHRlbXBvcmFyaWVzXG5cbiIsIGluc3Ry
dWN0aW9uQ291bnQsIGluc3RydWN0aW9ucy5zaXplKCkgKiBzaXplb2YoSW5zdHJ1Y3Rpb24pLCB0
aGlzLCBudW1Mb2NhbHMsIG51bVBhcmFtZXRlcnMsIG51bVRlbXBvcmFyaWVzKTsKKyAgICBwcmlu
dGYoIiVsdSBpbnN0cnVjdGlvbnM7ICVsdSBieXRlcyBhdCAlcDsgJWQgbG9jYWxzICglZCBwYXJh
bWV0ZXJzKTsgJWQgdGVtcG9yYXJpZXNcblxuIiwKKyAgICAgICAgc3RhdGljX2Nhc3Q8bG9uZz4o
aW5zdHJ1Y3Rpb25Db3VudCksCisgICAgICAgIHN0YXRpY19jYXN0PGxvbmc+KGluc3RydWN0aW9u
cy5zaXplKCkgKiBzaXplb2YoSW5zdHJ1Y3Rpb24pKSwKKyAgICAgICAgdGhpcywgbnVtTG9jYWxz
LCBudW1QYXJhbWV0ZXJzLCBudW1UZW1wb3Jhcmllcyk7CiAgICAgCiAgICAgZm9yIChWZWN0b3I8
SW5zdHJ1Y3Rpb24+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGJlZ2luOyBpdCAhPSBlbmQ7ICsraXQp
CiAgICAgICAgIGR1bXAoZXhlYywgYmVnaW4sIGl0KTsKSW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAzNDQwMykKKysrIFdl
YkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjYxIEBACisyMDA4LTA2
LTA2ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIHdvcmsgb24gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MjU3CisgICAgICAgICAgc3RhcnQgcmVmIGNvdW50cyBh
dCAxIGluc3RlYWQgb2YgMCBmb3Igc3BlZWQKKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvSFRN
TENhbnZhc1N0eWxlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3dCYXNlOjpmaW5kT3JDcmVhdGVKU0V2ZW50
TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3dCYXNlOjpmaW5kT3JDcmVh
dGVKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNO
b2RlRmlsdGVyQ29uZGl0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpKU05vZGVGaWx0ZXJDb25k
aXRpb246OmNyZWF0ZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ3VzdG9t
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvTm9kZUZpbHRlcik6CisgICAgICAgICogYmluZGlu
Z3MvanMvSlNTVkdMYXp5RXZlbnRMaXN0ZW5lci5oOgorICAgICAgICAoV2ViQ29yZTo6SlNTVkdM
YXp5RXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1NWR01h
dHJpeEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1NWR01hdHJpeDo6bXVsdGlwbHkp
OgorICAgICAgICAoV2ViQ29yZTo6SlNTVkdNYXRyaXg6OmludmVyc2UpOgorICAgICAgICAoV2Vi
Q29yZTo6SlNTVkdNYXRyaXg6OnRyYW5zbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1NWR01h
dHJpeDo6c2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNTVkdNYXRyaXg6OnNjYWxlTm9uVW5p
Zm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpKU1NWR01hdHJpeDo6cm90YXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkpTU1ZHTWF0cml4Ojpyb3RhdGVGcm9tVmVjdG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OkpTU1ZHTWF0cml4OjpmbGlwWCk6CisgICAgICAgIChXZWJDb3JlOjpKU1NWR01hdHJpeDo6
ZmxpcFkpOgorICAgICAgICAoV2ViQ29yZTo6SlNTVkdNYXRyaXg6OnNrZXdYKToKKyAgICAgICAg
KFdlYkNvcmU6OkpTU1ZHTWF0cml4Ojpza2V3WSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNT
VkdQT0RUeXBlV3JhcHBlci5oOgorICAgICAgICAoV2ViQ29yZTo6SlNTVkdQT0RUeXBlV3JhcHBl
ckNyZWF0b3JSZWFkV3JpdGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1NWR1BPRFR5
cGVXcmFwcGVyQ3JlYXRvclJlYWRXcml0ZTo6SlNTVkdQT0RUeXBlV3JhcHBlckNyZWF0b3JSZWFk
V3JpdGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNTVkdQT0RUeXBlV3JhcHBlckNyZWF0b3JSZWFk
T25seTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTU1ZHUE9EVHlwZVdyYXBwZXJDcmVh
dG9yUmVhZE9ubHk6OkpTU1ZHUE9EVHlwZVdyYXBwZXJDcmVhdG9yUmVhZE9ubHkpOgorICAgICAg
ICAoV2ViQ29yZTo6SlNTVkdQT0RUeXBlV3JhcHBlckNyZWF0b3JGb3JMaXN0OjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNTVkdQT0RUeXBlV3JhcHBlckNyZWF0b3JGb3JMaXN0OjpKU1NW
R1BPRFR5cGVXcmFwcGVyQ3JlYXRvckZvckxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6SlNTVkdQ
T0RUeXBlV3JhcHBlckNhY2hlOjpsb29rdXBPckNyZWF0ZVdyYXBwZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6SlNTVkdQT0RUeXBlV3JhcHBlckNhY2hlOjpmb3JnZXRXcmFwcGVyKToKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU1NWR1BvaW50TGlzdEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3Jl
Ojpjb21tb25FeGl0KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbW1vbkV4aXRSZWFkT25seSk6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1NWR1BvaW50TGlzdDo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpKU1NWR1BvaW50TGlzdDo6Z2V0SXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpKU1NW
R1BvaW50TGlzdDo6aW5zZXJ0SXRlbUJlZm9yZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1NWR1Bv
aW50TGlzdDo6cmVwbGFjZUl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6SlNTVkdQb2ludExpc3Q6
OnJlbW92ZUl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6SlNTVkdQb2ludExpc3Q6OmFwcGVuZEl0
ZW0pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTU1ZHVHJhbnNmb3JtTGlzdEN1c3RvbS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpKU1NWR1RyYW5zZm9ybUxpc3Q6OmluaXRpYWxpemUpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNTVkdUcmFuc2Zvcm1MaXN0OjpnZXRJdGVtKToKKyAgICAgICAgKFdl
YkNvcmU6OkpTU1ZHVHJhbnNmb3JtTGlzdDo6aW5zZXJ0SXRlbUJlZm9yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpKU1NWR1RyYW5zZm9ybUxpc3Q6OnJlcGxhY2VJdGVtKToKKyAgICAgICAgKFdlYkNv
cmU6OkpTU1ZHVHJhbnNmb3JtTGlzdDo6cmVtb3ZlSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpK
U1NWR1RyYW5zZm9ybUxpc3Q6OmFwcGVuZEl0ZW0pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL2tq
c19iaW5kaW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNldERPTUV4Y2VwdGlvbik6CisgICAg
ICAgICogYmluZGluZ3MvanMva2pzX2V2ZW50cy5oOgorICAgICAgICAoV2ViQ29yZTo6SlNVbnBy
b3RlY3RlZEV2ZW50TGlzdGVuZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU0V2ZW50
TGlzdGVuZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU0xhenlFdmVudExpc3RlbmVy
OjpjcmVhdGUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL2tqc19wcm94eS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpLSlNQcm94eTo6Y3JlYXRlSFRNTEV2ZW50SGFuZGxlcik6CisgICAgICAgIChX
ZWJDb3JlOjpLSlNQcm94eTo6Y3JlYXRlU1ZHRXZlbnRIYW5kbGVyKToKKyAgICAgICAgKiBiaW5k
aW5ncy9vYmpjL0RPTS5tbToKKyAgICAgICAgKFdlYkNvcmU6Ok9iakNOb2RlRmlsdGVyQ29uZGl0
aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6T2JqQ05vZGVGaWx0ZXJDb25kaXRpb246
Ok9iakNOb2RlRmlsdGVyQ29uZGl0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Ok9iakNOb2RlRmls
dGVyQ29uZGl0aW9uOjphY2NlcHROb2RlKToKKyAgICAgICAgKC1bRE9NRG9jdW1lbnQgY3JlYXRl
Tm9kZUl0ZXJhdG9yOndoYXRUb1Nob3c6ZmlsdGVyOmV4cGFuZEVudGl0eVJlZmVyZW5jZXM6XSk6
CisgICAgICAgICgtW0RPTURvY3VtZW50IGNyZWF0ZVRyZWVXYWxrZXI6d2hhdFRvU2hvdzpmaWx0
ZXI6ZXhwYW5kRW50aXR5UmVmZXJlbmNlczpdKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L0NvZGVHZW5lcmF0b3JKUy5wbToKKyAgICAgICAgKiBjc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xh
cmF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnZhbHVlRm9yTmluZVBpZWNlSW1hZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0
eUNTU1ZhbHVlKToKKyAgICAgICAgKiBjc3MvQ1NTRm9udEZhY2UuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkNTU0ZvbnRGYWNlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2U6
OkNTU0ZvbnRGYWNlKToKKyAgICAgICAgKiBjc3MvQ1NTRm9udFNlbGVjdG9yLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU0ZvbnRTZWxlY3Rvcjo6YWRkRm9udEZhY2VSdWxlKToKKyAgICAgICAg
KiBjc3MvQ1NTUGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VE
YXNoYm9hcmRSZWdpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VDb3Vu
dGVyQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlU2hhcGUpOgor
ICAgICAgICAoV2ViQ29yZTo6Qm9yZGVySW1hZ2VQYXJzZUNvbnRleHQ6OmNvbW1pdEJvcmRlcklt
YWdlKToKKyAgICAgICAgKiBjc3MvQ1NTU2VnbWVudGVkRm9udEZhY2UuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTU2VnbWVudGVkRm9udEZhY2U6OkNTU1NlZ21lbnRlZEZvbnRGYWNlKToKKyAg
ICAgICAgKiBjc3MvQ1NTU2VnbWVudGVkRm9udEZhY2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1NlZ21lbnRlZEZvbnRGYWNlOjpjcmVhdGUpOgorICAgICAgICAqIGNzcy9Db3VudGVyLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpDb3VudGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q291
bnRlcjo6Q291bnRlcik6CisgICAgICAgICogY3NzL0Rhc2hib2FyZFJlZ2lvbi5oOgorICAgICAg
ICAoV2ViQ29yZTo6RGFzaGJvYXJkUmVnaW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
RGFzaGJvYXJkUmVnaW9uOjpEYXNoYm9hcmRSZWdpb24pOgorICAgICAgICAqIGNzcy9SZWN0Lmg6
CisgICAgICAgIChXZWJDb3JlOjpSZWN0OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVj
dDo6UmVjdCk6CisgICAgICAgICogZG9tL0NoaWxkTm9kZUxpc3QuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkNoaWxkTm9kZUxpc3Q6OmNyZWF0ZSk6CisgICAgICAgICogZG9tL0NsYXNzTm9kZUxpc3Qu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkNsYXNzTm9kZUxpc3Q6OmNyZWF0ZSk6CisgICAgICAgICog
ZG9tL0NsaXBib2FyZC5oOgorICAgICAgICAqIGRvbS9ET01Db3JlRXhjZXB0aW9uLmg6CisgICAg
ICAgIChXZWJDb3JlOjpET01Db3JlRXhjZXB0aW9uOjpjcmVhdGUpOgorICAgICAgICAqIGRvbS9E
T01JbXBsZW1lbnRhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01JbXBsZW1lbnRhdGlv
bjo6aW5zdGFuY2UpOgorICAgICAgICAqIGRvbS9ET01JbXBsZW1lbnRhdGlvbi5oOgorICAgICAg
ICAoV2ViQ29yZTo6RE9NSW1wbGVtZW50YXRpb246OkRPTUltcGxlbWVudGF0aW9uKToKKyAgICAg
ICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmFkZFdp
bmRvd0V2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnJlbW92ZVdp
bmRvd0V2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnNldERlY29k
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmltYWdlcyk6CisgICAgICAgIChXZWJD
b3JlOjpEb2N1bWVudDo6YXBwbGV0cyk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6ZW1i
ZWRzKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpwbHVnaW5zKToKKyAgICAgICAgKFdl
YkNvcmU6OkRvY3VtZW50OjpvYmplY3RzKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpz
Y3JpcHRzKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpsaW5rcyk6CisgICAgICAgIChX
ZWJDb3JlOjpEb2N1bWVudDo6Zm9ybXMpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmFu
Y2hvcnMpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmFsbCk6CisgICAgICAgIChXZWJD
b3JlOjpEb2N1bWVudDo6d2luZG93TmFtZWRJdGVtcyk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1
bWVudDo6ZG9jdW1lbnROYW1lZEl0ZW1zKToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuaDoKKyAg
ICAgICAgKiBkb20vRHluYW1pY05vZGVMaXN0Lmg6CisgICAgICAgICogZG9tL0V2ZW50RXhjZXB0
aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEV4Y2VwdGlvbjo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkV2ZW50RXhjZXB0aW9uOjpFdmVudEV4Y2VwdGlvbik6CisgICAgICAgICog
ZG9tL0V2ZW50TGlzdGVuZXIuaDoKKyAgICAgICAgKiBkb20vRXZlbnRUYXJnZXQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RXZlbnRUYXJnZXQ6OmFkZEV2ZW50TGlzdGVuZXIpOgorICAgICAgICAo
V2ViQ29yZTo6RXZlbnRUYXJnZXQ6OnJlbW92ZUV2ZW50TGlzdGVuZXIpOgorICAgICAgICAqIGRv
bS9FeGNlcHRpb25CYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV4Y2VwdGlvbkJhc2U6OkV4
Y2VwdGlvbkJhc2UpOgorICAgICAgICAqIGRvbS9FeGNlcHRpb25CYXNlLmg6CisgICAgICAgICog
ZG9tL05hbWVOb2RlTGlzdC5oOgorICAgICAgICAoV2ViQ29yZTo6TmFtZU5vZGVMaXN0OjpjcmVh
dGUpOgorICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmNo
aWxkTm9kZXMpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6Z2V0RWxlbWVudHNCeVRhZ05hbWVO
Uyk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpnZXRFbGVtZW50c0J5TmFtZSk6CisgICAgICAg
IChXZWJDb3JlOjpOb2RlOjpnZXRFbGVtZW50c0J5Q2xhc3NOYW1lKToKKyAgICAgICAgKFdlYkNv
cmU6Ok5vZGU6OnF1ZXJ5U2VsZWN0b3JBbGwpOgorICAgICAgICAqIGRvbS9Ob2RlRmlsdGVyQ29u
ZGl0aW9uLmg6CisgICAgICAgICogZG9tL05vZGVMaXN0Lmg6CisgICAgICAgICogZG9tL1Jhbmdl
RXhjZXB0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZUV4Y2VwdGlvbjo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJhbmdlRXhjZXB0aW9uOjpSYW5nZUV4Y2VwdGlvbik6CisgICAg
ICAgICogZG9tL1JlZ2lzdGVyZWRFdmVudExpc3RlbmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpS
ZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKToKKyAgICAgICAgKiBkb20vU2VsZWN0b3JO
b2RlTGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVTZWxlY3Rvck5vZGVMaXN0KToK
KyAgICAgICAgKiBkb20vU2VsZWN0b3JOb2RlTGlzdC5oOgorICAgICAgICAqIGRvbS9TdGF0aWNO
b2RlTGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdGF0aWNOb2RlTGlzdDo6U3RhdGljTm9k
ZUxpc3QpOgorICAgICAgICAqIGRvbS9TdGF0aWNOb2RlTGlzdC5oOgorICAgICAgICAoV2ViQ29y
ZTo6U3RhdGljTm9kZUxpc3Q6OmFkb3B0KToKKyAgICAgICAgKiBkb20vVGFnTm9kZUxpc3QuaDoK
KyAgICAgICAgKFdlYkNvcmU6OlRhZ05vZGVMaXN0OjpjcmVhdGUpOgorICAgICAgICAqIGhpc3Rv
cnkvSGlzdG9yeUl0ZW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZGVmYXVsdE5vdGlmeUhpc3Rv
cnlJdGVtQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpIaXN0b3J5SXRlbTo6SGlzdG9yeUl0
ZW0pOgorICAgICAgICAoV2ViQ29yZTo6SGlzdG9yeUl0ZW06OmNvcHkpOgorICAgICAgICAqIGhp
c3RvcnkvSGlzdG9yeUl0ZW0uaDoKKyAgICAgICAgKFdlYkNvcmU6Okhpc3RvcnlJdGVtOjpjcmVh
dGUpOgorICAgICAgICAqIGh0bWwvQ2FudmFzR3JhZGllbnQuaDoKKyAgICAgICAgKiBodG1sL0Nh
bnZhc1BhdHRlcm4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUGF0dGVybjo6Q2FudmFz
UGF0dGVybik6CisgICAgICAgICogaHRtbC9DYW52YXNQYXR0ZXJuLmg6CisgICAgICAgIChXZWJD
b3JlOjpDYW52YXNQYXR0ZXJuOjpjcmVhdGUpOgorICAgICAgICAqIGh0bWwvQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRDo6U3RhdGU6OlN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDo6c2V0U3Ryb2tlQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEOjpzZXRGaWxsQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEOjpjcmVhdGVQYXR0ZXJuKToKKyAgICAgICAgKiBodG1sL0NhbnZhc1N0
eWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1N0eWxlOjpDYW52YXNTdHlsZSk6Cisg
ICAgICAgICogaHRtbC9DYW52YXNTdHlsZS5oOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzU3R5
bGU6OmNyZWF0ZSk6CisgICAgICAgICogaHRtbC9IVE1MQ29sbGVjdGlvbi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MQ29sbGVjdGlvbjo6SFRNTENvbGxlY3Rpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTENvbGxlY3Rpb246OmNyZWF0ZSk6CisgICAgICAgICogaHRtbC9IVE1MQ29sbGVj
dGlvbi5oOgorICAgICAgICAqIGh0bWwvSFRNTEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTEVsZW1lbnQ6OmNoaWxkcmVuKToKKyAgICAgICAgKiBodG1sL0hUTUxGb3JtQ29sbGVj
dGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbGxlY3Rpb246OmNyZWF0ZSk6
CisgICAgICAgICogaHRtbC9IVE1MRm9ybUNvbGxlY3Rpb24uaDoKKyAgICAgICAgKiBodG1sL0hU
TUxGb3JtRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQ6OmVs
ZW1lbnRzKToKKyAgICAgICAgKiBodG1sL0hUTUxNYXBFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxNYXBFbGVtZW50OjphcmVhcyk6CisgICAgICAgICogaHRtbC9IVE1MTWVkaWFF
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmxvYWQpOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6bWVkaWFQbGF5ZXJOZXR3b3JrU3Rh
dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OndpbGxTYXZl
VG9DYWNoZSk6CisgICAgICAgICogaHRtbC9IVE1MTmFtZUNvbGxlY3Rpb24uaDoKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxOYW1lQ29sbGVjdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKiBodG1sL0hU
TUxPcHRpb25zQ29sbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MT3B0aW9uc0Nv
bGxlY3Rpb246OmNyZWF0ZSk6CisgICAgICAgICogaHRtbC9IVE1MT3B0aW9uc0NvbGxlY3Rpb24u
aDoKKyAgICAgICAgKiBodG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxTZWxlY3RFbGVtZW50OjpvcHRpb25zKToKKyAgICAgICAgKiBodG1sL0hUTUxUYWJs
ZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRhYmxlRWxlbWVudDo6cm93cyk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGFibGVFbGVtZW50Ojp0Qm9kaWVzKToKKyAgICAgICAg
KiBodG1sL0hUTUxUYWJsZVJvd0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRh
YmxlUm93RWxlbWVudDo6Y2VsbHMpOgorICAgICAgICAqIGh0bWwvSFRNTFRhYmxlUm93c0NvbGxl
Y3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRhYmxlUm93c0NvbGxlY3Rpb246OkhU
TUxUYWJsZVJvd3NDb2xsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUYWJsZVJvd3ND
b2xsZWN0aW9uOjpjcmVhdGUpOgorICAgICAgICAqIGh0bWwvSFRNTFRhYmxlUm93c0NvbGxlY3Rp
b24uaDoKKyAgICAgICAgKiBodG1sL0hUTUxUYWJsZVNlY3Rpb25FbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxUYWJsZVNlY3Rpb25FbGVtZW50Ojpyb3dzKToKKyAgICAgICAgKiBo
dG1sL01lZGlhRXJyb3IuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhRXJyb3I6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUVycm9yOjpNZWRpYUVycm9yKToKKyAgICAgICAgKiBs
b2FkZXIvQ2FjaGVkQ1NTU3R5bGVTaGVldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRD
U1NTdHlsZVNoZWV0OjpDYWNoZWRDU1NTdHlsZVNoZWV0KToKKyAgICAgICAgKiBsb2FkZXIvQ2Fj
aGVkRm9udC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRGb250OjplbnN1cmVTVkdGb250
RGF0YSk6CisgICAgICAgICogbG9hZGVyL0NhY2hlZFhTTFN0eWxlU2hlZXQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q2FjaGVkWFNMU3R5bGVTaGVldDo6Q2FjaGVkWFNMU3R5bGVTaGVldCk6Cisg
ICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
TG9hZGVyOjp3cml0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6Y3JlYXRlSGlz
dG9yeUl0ZW0pOgorICAgICAgICAqIGxvYWRlci9JbWFnZURvY3VtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlRXZlbnRMaXN0ZW5lcjo6SW1hZ2VFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlRG9jdW1lbnQ6OmNyZWF0ZURvY3VtZW50U3RydWN0dXJlKToKKyAgICAgICAgKiBs
b2FkZXIvVGV4dFJlc291cmNlRGVjb2Rlci5oOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFJlc291
cmNlRGVjb2Rlcjo6Y3JlYXRlKToKKyAgICAgICAgKiBwYWdlL1BhZ2UuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UGFnZTo6dXNlclN0eWxlU2hlZXQpOgorICAgICAgICAqIHBsdWdpbnMvUGx1Z2lu
RGVidWcuaDoKKyAgICAgICAgKiBzdmcvU1ZHRXhjZXB0aW9uLmg6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdFeGNlcHRpb246OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdFeGNlcHRpb246
OlNWR0V4Y2VwdGlvbik6CisgICAgICAgICogc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDb25kaXRpb25FdmVudExpc3RlbmVyOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29uZGl0aW9uRXZlbnRMaXN0ZW5lcjo6Q29uZGl0aW9uRXZlbnRM
aXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpTVkdTTUlMRWxlbWVudDo6Y29ubmVjdENvbmRp
dGlvbnMpOgorICAgICAgICAqIHhtbC9YTUxIdHRwUmVxdWVzdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpYTUxIdHRwUmVxdWVzdDo6ZGlkUmVjZWl2ZURhdGEpOgorICAgICAgICAqIHhtbC9YTUxI
dHRwUmVxdWVzdEV4Y2VwdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3RF
eGNlcHRpb246OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdEV4Y2Vw
dGlvbjo6WE1MSHR0cFJlcXVlc3RFeGNlcHRpb24pOgorICAgICAgICAqIHhtbC9YUGF0aEV4Y2Vw
dGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGhFeGNlcHRpb246OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpYUGF0aEV4Y2VwdGlvbjo6WFBhdGhFeGNlcHRpb24pOgorICAgICAgICAq
IHhtbC9YUGF0aFJlc3VsdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnZhbGlkYXRpbmdFdmVu
dExpc3RlbmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW52YWxpZGF0aW5nRXZlbnRM
aXN0ZW5lcjo6SW52YWxpZGF0aW5nRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpY
UGF0aFJlc3VsdDo6WFBhdGhSZXN1bHQpOgorICAgICAgICAqIHhtbC9YU0xUUHJvY2Vzc29yLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlhTTFRQcm9jZXNzb3I6OmNyZWF0ZURvY3VtZW50RnJvbVNv
dXJjZSk6CisKIDIwMDgtMDYtMDYgIEp1c3RpbiBHYXJjaWEgIDxqdXN0aW4uZ2FyY2lhQGFwcGxl
LmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbi4KSW5kZXg6IFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3Bw
CShyZXZpc2lvbiAzNDM3NikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MiwxNCArNTIsMTQgQEAg
c3RhdGljIEpTVmFsdWUqIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBDYQogc3RhdGljIFBhc3NSZWZQ
dHI8Q2FudmFzU3R5bGU+IHRvSFRNTENhbnZhc1N0eWxlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZSogdmFsdWUpCiB7CiAgICAgaWYgKHZhbHVlLT5pc1N0cmluZygpKQotICAgICAgICByZXR1cm4g
bmV3IENhbnZhc1N0eWxlKHZhbHVlLT50b1N0cmluZyhleGVjKSk7CisgICAgICAgIHJldHVybiBD
YW52YXNTdHlsZTo6Y3JlYXRlKHZhbHVlLT50b1N0cmluZyhleGVjKSk7CiAgICAgaWYgKCF2YWx1
ZS0+aXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgSlNPYmplY3QqIG9iamVjdCA9
IHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4odmFsdWUpOwogICAgIGlmIChvYmplY3QtPmluaGVyaXRz
KCZKU0NhbnZhc0dyYWRpZW50OjpzX2luZm8pKQotICAgICAgICByZXR1cm4gbmV3IENhbnZhc1N0
eWxlKHN0YXRpY19jYXN0PEpTQ2FudmFzR3JhZGllbnQqPihvYmplY3QpLT5pbXBsKCkpOworICAg
ICAgICByZXR1cm4gQ2FudmFzU3R5bGU6OmNyZWF0ZShzdGF0aWNfY2FzdDxKU0NhbnZhc0dyYWRp
ZW50Kj4ob2JqZWN0KS0+aW1wbCgpKTsKICAgICBpZiAob2JqZWN0LT5pbmhlcml0cygmSlNDYW52
YXNQYXR0ZXJuOjpzX2luZm8pKQotICAgICAgICByZXR1cm4gbmV3IENhbnZhc1N0eWxlKHN0YXRp
Y19jYXN0PEpTQ2FudmFzUGF0dGVybio+KG9iamVjdCktPmltcGwoKSk7CisgICAgICAgIHJldHVy
biBDYW52YXNTdHlsZTo6Y3JlYXRlKHN0YXRpY19jYXN0PEpTQ2FudmFzUGF0dGVybio+KG9iamVj
dCktPmltcGwoKSk7CiAgICAgcmV0dXJuIDA7CiB9CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01XaW5kb3dCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NV2luZG93QmFzZS5jcHAJKHJldmlzaW9uIDM0Mzc2KQorKysgV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MjgsNyArODI4LDcg
QEAgSlNFdmVudExpc3RlbmVyKiBKU0RPTVdpbmRvd0Jhc2U6OmZpbmRPcgogICAgIEpTT2JqZWN0
KiBvYmplY3QgPSBzdGF0aWNfY2FzdDxKU09iamVjdCo+KHZhbCk7CiAKICAgICAvLyBOb3RlIHRo
YXQgdGhlIEpTRXZlbnRMaXN0ZW5lciBjb25zdHJ1Y3RvciBhZGRzIGl0IHRvIG91ciBqc0V2ZW50
TGlzdGVuZXJzIGxpc3QKLSAgICByZXR1cm4gbmV3IEpTRXZlbnRMaXN0ZW5lcihvYmplY3QsIHN0
YXRpY19jYXN0PEpTRE9NV2luZG93Kj4odGhpcyksIGh0bWwpOworICAgIHJldHVybiBKU0V2ZW50
TGlzdGVuZXI6OmNyZWF0ZShvYmplY3QsIHN0YXRpY19jYXN0PEpTRE9NV2luZG93Kj4odGhpcyks
IGh0bWwpLmdldCgpOwogfQogCiBKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lciogSlNET01XaW5k
b3dCYXNlOjpmaW5kSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIoSlNWYWx1ZSogdmFsLCBib29s
IGh0bWwpCkBAIC04NTAsNyArODUwLDcgQEAgSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIqIEpT
RE9NV2luZG93QgogICAgIEpTT2JqZWN0KiBvYmplY3QgPSBzdGF0aWNfY2FzdDxKU09iamVjdCo+
KHZhbCk7CiAKICAgICAvLyBUaGUgSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIgY29uc3RydWN0
b3IgYWRkcyBpdCB0byBvdXIganNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXJzIG1hcC4KLSAgICBy
ZXR1cm4gbmV3IEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKG9iamVjdCwgc3RhdGljX2Nhc3Q8
SlNET01XaW5kb3cqPih0aGlzKSwgaHRtbCk7CisgICAgcmV0dXJuIEpTVW5wcm90ZWN0ZWRFdmVu
dExpc3RlbmVyOjpjcmVhdGUob2JqZWN0LCBzdGF0aWNfY2FzdDxKU0RPTVdpbmRvdyo+KHRoaXMp
LCBodG1sKS5nZXQoKTsKIH0KIAogdm9pZCBKU0RPTVdpbmRvd0Jhc2U6OmNsZWFySGVscGVyT2Jq
ZWN0UHJvcGVydGllcygpCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUZpbHRlckNv
bmRpdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlRmlsdGVy
Q29uZGl0aW9uLmgJKHJldmlzaW9uIDM0Mzc2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05v
ZGVGaWx0ZXJDb25kaXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjEsNiArMjEsNyBAQAogI2Rl
ZmluZSBKU05vZGVGaWx0ZXJDb25kaXRpb25faAogCiAjaW5jbHVkZSAiTm9kZUZpbHRlckNvbmRp
dGlvbi5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBLSlMgewog
ICAgIGNsYXNzIEpTT2JqZWN0OwpAQCAtMzIsMTEgKzMzLDE2IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogICAgIGNsYXNzIEpTTm9kZUZpbHRlckNvbmRpdGlvbiA6IHB1YmxpYyBOb2RlRmlsdGVy
Q29uZGl0aW9uIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIEpTTm9kZUZpbHRlckNvbmRpdGlvbihL
SlM6OkpTT2JqZWN0KiBmaWx0ZXIpOworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxKU05vZGVG
aWx0ZXJDb25kaXRpb24+IGNyZWF0ZShLSlM6OkpTT2JqZWN0KiBmaWx0ZXIpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSlNOb2RlRmlsdGVyQ29uZGl0aW9uKGZp
bHRlcikpOworICAgICAgICB9CisKICAgICAgICAgdmlydHVhbCBzaG9ydCBhY2NlcHROb2RlKE5v
ZGUqLCBLSlM6OkpTVmFsdWUqJiBleGNlcHRpb24pIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIHZv
aWQgbWFyaygpOwogCi0gICAgcHJvdGVjdGVkOgorICAgIHByaXZhdGU6CisgICAgICAgIEpTTm9k
ZUZpbHRlckNvbmRpdGlvbihLSlM6OkpTT2JqZWN0KiBmaWx0ZXIpOwogICAgICAgICBLSlM6OkpT
T2JqZWN0KiBtX2ZpbHRlcjsKICAgICB9OwogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Tm9kZUZpbHRlckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U05vZGVGaWx0ZXJDdXN0b20uY3BwCShyZXZpc2lvbiAzNDM3NikKKysrIFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNOb2RlRmlsdGVyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAs
NyBAQCBOb2RlRmlsdGVyKiB0b05vZGVGaWx0ZXIoS0pTOjpKU1ZhbHVlKiB2CiAKICAgICBLSlM6
OkpTT2JqZWN0KiBvID0gc3RhdGljX2Nhc3Q8S0pTOjpKU09iamVjdCo+KHZhbCk7CiAgICAgaWYg
KG8tPmltcGxlbWVudHNDYWxsKCkpCi0gICAgICAgIHJldHVybiBuZXcgTm9kZUZpbHRlcihuZXcg
SlNOb2RlRmlsdGVyQ29uZGl0aW9uKG8pKTsKKyAgICAgICAgcmV0dXJuIG5ldyBOb2RlRmlsdGVy
KEpTTm9kZUZpbHRlckNvbmRpdGlvbjo6Y3JlYXRlKG8pKTsKIAogICAgIHJldHVybiAwOwogfQpJ
bmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR0xhenlFdmVudExpc3RlbmVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR0xhenlFdmVudExpc3RlbmVyLmgJKHJl
dmlzaW9uIDM0Mzc2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR0xhenlFdmVudExpc3Rl
bmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw1IEBACiAvKgotICAgIENvcHlyaWdodCAo
QykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgotICAgICAgICAgICAgICAgICAgCi0gICAgVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBwcm9qZWN0CisgICAgQ29weXJpZ2h0IChDKSAy
MDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIAogICAgIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAg
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwpAQCAtMjEsMjEgKzE5LDI4IEBACiAKICNpZm5kZWYgSlNTVkdMYXp5RXZlbnRMaXN0ZW5l
cl9oCiAjZGVmaW5lIEpTU1ZHTGF6eUV2ZW50TGlzdGVuZXJfaAotI2lmIEVOQUJMRShTVkcpCiAK
ICNpbmNsdWRlICJranNfZXZlbnRzLmgiCiAKKyNpZiBFTkFCTEUoU1ZHKQorCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKICAgICBjbGFzcyBKU1NWR0xhenlFdmVudExpc3RlbmVyIDogcHVibGljIEpT
TGF6eUV2ZW50TGlzdGVuZXIgewogICAgIHB1YmxpYzoKLSAgICAgICAgSlNTVkdMYXp5RXZlbnRM
aXN0ZW5lcihjb25zdCBTdHJpbmcmIGZ1bmN0aW9uTmFtZSwgY29uc3QgU3RyaW5nJiBjb2RlLCBK
U0RPTVdpbmRvdyosIE5vZGUqLCBpbnQgbGluZU51bWJlciA9IDApOworICAgICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxKU1NWR0xhenlFdmVudExpc3RlbmVyPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBm
dW5jdGlvbk5hbWUsIGNvbnN0IFN0cmluZyYgY29kZSwgSlNET01XaW5kb3cqIHdpbmRvdywgTm9k
ZSogbm9kZSwgaW50IGxpbmVOdW1iZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgSlNTVkdMYXp5RXZlbnRMaXN0ZW5lcihmdW5jdGlvbk5hbWUsIGNvZGUsIHdp
bmRvdywgbm9kZSwgbGluZU51bWJlcikpOworICAgICAgICB9CiAKICAgICBwcml2YXRlOgorICAg
ICAgICBKU1NWR0xhenlFdmVudExpc3RlbmVyKGNvbnN0IFN0cmluZyYgZnVuY3Rpb25OYW1lLCBj
b25zdCBTdHJpbmcmIGNvZGUsIEpTRE9NV2luZG93KiwgTm9kZSosIGludCBsaW5lTnVtYmVyKTsK
KwogICAgICAgICB2aXJ0dWFsIEtKUzo6SlNWYWx1ZSogZXZlbnRQYXJhbWV0ZXJOYW1lKCkgY29u
c3Q7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxF
KFNWRykKKwogI2VuZGlmIC8vIEpTU1ZHTGF6eUV2ZW50TGlzdGVuZXJfaApJbmRleDogV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1NWR01hdHJpeEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1NWR01hdHJpeEN1c3RvbS5jcHAJKHJldmlzaW9uIDM0Mzc2KQorKysg
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR01hdHJpeEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM1LDEzICszNSwxMyBAQCBKU1ZhbHVlKiBKU1NWR01hdHJpeDo6bXVsdGlwbHkoRXhlY1N0
YXRlCiAgICAgQWZmaW5lVHJhbnNmb3JtIGltcCgqaW1wbCgpKTsKIAogICAgIEFmZmluZVRyYW5z
Zm9ybSBzZWNvbmRNYXRyaXggPSB0b1NWR01hdHJpeChhcmdzWzBdKTsgICAgCi0gICAgcmV0dXJu
IHRvSlMoZXhlYywgbmV3IEpTU1ZHUE9EVHlwZVdyYXBwZXJDcmVhdG9yUmVhZE9ubHk8QWZmaW5l
VHJhbnNmb3JtPihpbXAubXVsdGlwbHkoc2Vjb25kTWF0cml4KSksIG1fY29udGV4dC5nZXQoKSk7
CisgICAgcmV0dXJuIHRvSlMoZXhlYywgSlNTVkdQT0RUeXBlV3JhcHBlckNyZWF0b3JSZWFkT25s
eTxBZmZpbmVUcmFuc2Zvcm0+OjpjcmVhdGUoaW1wLm11bHRpcGx5KHNlY29uZE1hdHJpeCkpLmdl
dCgpLCBtX2NvbnRleHQuZ2V0KCkpOwogfQogCiBKU1ZhbHVlKiBKU1NWR01hdHJpeDo6aW52ZXJz
ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IExpc3QmKQogewogICAgIEFmZmluZVRyYW5zZm9ybSBp
bXAoKmltcGwoKSk7Ci0gICAgS0pTOjpKU1ZhbHVlKiByZXN1bHQgPSB0b0pTKGV4ZWMsIG5ldyBK
U1NWR1BPRFR5cGVXcmFwcGVyQ3JlYXRvclJlYWRPbmx5PEFmZmluZVRyYW5zZm9ybT4oaW1wLmlu
dmVyc2UoKSksIG1fY29udGV4dC5nZXQoKSk7CisgICAgS0pTOjpKU1ZhbHVlKiByZXN1bHQgPSB0
b0pTKGV4ZWMsIEpTU1ZHUE9EVHlwZVdyYXBwZXJDcmVhdG9yUmVhZE9ubHk8QWZmaW5lVHJhbnNm
b3JtPjo6Y3JlYXRlKGltcC5pbnZlcnNlKCkpLmdldCgpLCBtX2NvbnRleHQuZ2V0KCkpOwogCiAg
ICAgaWYgKCFpbXAuaXNJbnZlcnRpYmxlKCkpCiAgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVj
LCBTVkdFeGNlcHRpb246OlNWR19NQVRSSVhfTk9UX0lOVkVSVEFCTEUpOwpAQCAtNTYsNyArNTYs
NyBAQCBKU1ZhbHVlKiBKU1NWR01hdHJpeDo6dHJhbnNsYXRlKEV4ZWNTdGF0CiAgICAgZmxvYXQg
eCA9IGFyZ3NbMF0tPnRvRmxvYXQoZXhlYyk7CiAgICAgZmxvYXQgeSA9IGFyZ3NbMV0tPnRvRmxv
YXQoZXhlYyk7CiAKLSAgICByZXR1cm4gdG9KUyhleGVjLCBuZXcgSlNTVkdQT0RUeXBlV3JhcHBl
ckNyZWF0b3JSZWFkT25seTxBZmZpbmVUcmFuc2Zvcm0+KGltcC50cmFuc2xhdGUoeCwgeSkpLCBt
X2NvbnRleHQuZ2V0KCkpOworICAgIHJldHVybiB0b0pTKGV4ZWMsIEpTU1ZHUE9EVHlwZVdyYXBw
ZXJDcmVhdG9yUmVhZE9ubHk8QWZmaW5lVHJhbnNmb3JtPjo6Y3JlYXRlKGltcC50cmFuc2xhdGUo
eCwgeSkpLmdldCgpLCBtX2NvbnRleHQuZ2V0KCkpOwogfQogCiBKU1ZhbHVlKiBKU1NWR01hdHJp
eDo6c2NhbGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBMaXN0JiBhcmdzKQpAQCAtNjQsNyArNjQs
NyBAQCBKU1ZhbHVlKiBKU1NWR01hdHJpeDo6c2NhbGUoRXhlY1N0YXRlKiBlCiAgICAgQWZmaW5l
VHJhbnNmb3JtIGltcCgqaW1wbCgpKTsKIAogICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gYXJnc1sw
XS0+dG9GbG9hdChleGVjKTsKLSAgICByZXR1cm4gdG9KUyhleGVjLCBuZXcgSlNTVkdQT0RUeXBl
V3JhcHBlckNyZWF0b3JSZWFkT25seTxBZmZpbmVUcmFuc2Zvcm0+KGltcC5zY2FsZShzY2FsZUZh
Y3RvcikpLCBtX2NvbnRleHQuZ2V0KCkpOworICAgIHJldHVybiB0b0pTKGV4ZWMsIEpTU1ZHUE9E
VHlwZVdyYXBwZXJDcmVhdG9yUmVhZE9ubHk8QWZmaW5lVHJhbnNmb3JtPjo6Y3JlYXRlKGltcC5z
Y2FsZShzY2FsZUZhY3RvcikpLmdldCgpLCBtX2NvbnRleHQuZ2V0KCkpOwogfQogCiBKU1ZhbHVl
KiBKU1NWR01hdHJpeDo6c2NhbGVOb25Vbmlmb3JtKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgTGlz
dCYgYXJncykKQEAgLTc0LDcgKzc0LDcgQEAgSlNWYWx1ZSogSlNTVkdNYXRyaXg6OnNjYWxlTm9u
VW5pZm9ybShFeAogICAgIGZsb2F0IHNjYWxlRmFjdG9yWCA9IGFyZ3NbMF0tPnRvRmxvYXQoZXhl
Yyk7CiAgICAgZmxvYXQgc2NhbGVGYWN0b3JZID0gYXJnc1sxXS0+dG9GbG9hdChleGVjKTsKIAot
ICAgIHJldHVybiB0b0pTKGV4ZWMsIG5ldyBKU1NWR1BPRFR5cGVXcmFwcGVyQ3JlYXRvclJlYWRP
bmx5PEFmZmluZVRyYW5zZm9ybT4oaW1wLnNjYWxlTm9uVW5pZm9ybShzY2FsZUZhY3RvclgsIHNj
YWxlRmFjdG9yWSkpLCBtX2NvbnRleHQuZ2V0KCkpOworICAgIHJldHVybiB0b0pTKGV4ZWMsIEpT
U1ZHUE9EVHlwZVdyYXBwZXJDcmVhdG9yUmVhZE9ubHk8QWZmaW5lVHJhbnNmb3JtPjo6Y3JlYXRl
KGltcC5zY2FsZU5vblVuaWZvcm0oc2NhbGVGYWN0b3JYLCBzY2FsZUZhY3RvclkpKS5nZXQoKSwg
bV9jb250ZXh0LmdldCgpKTsKIH0KIAogSlNWYWx1ZSogSlNTVkdNYXRyaXg6OnJvdGF0ZShFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IExpc3QmIGFyZ3MpCkBAIC04Miw3ICs4Miw3IEBAIEpTVmFsdWUq
IEpTU1ZHTWF0cml4Ojpyb3RhdGUoRXhlY1N0YXRlKiAKICAgICBBZmZpbmVUcmFuc2Zvcm0gaW1w
KCppbXBsKCkpOwogCiAgICAgZmxvYXQgYW5nbGUgPSBhcmdzWzBdLT50b0Zsb2F0KGV4ZWMpOwot
ICAgIHJldHVybiB0b0pTKGV4ZWMsIG5ldyBKU1NWR1BPRFR5cGVXcmFwcGVyQ3JlYXRvclJlYWRP
bmx5PEFmZmluZVRyYW5zZm9ybT4oaW1wLnJvdGF0ZShhbmdsZSkpLCBtX2NvbnRleHQuZ2V0KCkp
OworICAgIHJldHVybiB0b0pTKGV4ZWMsIEpTU1ZHUE9EVHlwZVdyYXBwZXJDcmVhdG9yUmVhZE9u
bHk8QWZmaW5lVHJhbnNmb3JtPjo6Y3JlYXRlKGltcC5yb3RhdGUoYW5nbGUpKS5nZXQoKSwgbV9j
b250ZXh0LmdldCgpKTsKIH0KIAogSlNWYWx1ZSogSlNTVkdNYXRyaXg6OnJvdGF0ZUZyb21WZWN0
b3IoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBMaXN0JiBhcmdzKQpAQCAtOTIsNyArOTIsNyBAQCBK
U1ZhbHVlKiBKU1NWR01hdHJpeDo6cm90YXRlRnJvbVZlY3RvcihFCiAgICAgZmxvYXQgeCA9IGFy
Z3NbMF0tPnRvRmxvYXQoZXhlYyk7CiAgICAgZmxvYXQgeSA9IGFyZ3NbMV0tPnRvRmxvYXQoZXhl
Yyk7CiAKLSAgICBLSlM6OkpTVmFsdWUqIHJlc3VsdCA9IHRvSlMoZXhlYywgbmV3IEpTU1ZHUE9E
VHlwZVdyYXBwZXJDcmVhdG9yUmVhZE9ubHk8QWZmaW5lVHJhbnNmb3JtPihpbXAucm90YXRlRnJv
bVZlY3Rvcih4LCB5KSksIG1fY29udGV4dC5nZXQoKSk7CisgICAgS0pTOjpKU1ZhbHVlKiByZXN1
bHQgPSB0b0pTKGV4ZWMsIEpTU1ZHUE9EVHlwZVdyYXBwZXJDcmVhdG9yUmVhZE9ubHk8QWZmaW5l
VHJhbnNmb3JtPjo6Y3JlYXRlKGltcC5yb3RhdGVGcm9tVmVjdG9yKHgsIHkpKS5nZXQoKSwgbV9j
b250ZXh0LmdldCgpKTsKIAogICAgIGlmICh4ID09IDAuMCB8fCB5ID09IDAuMCkKICAgICAgICAg
c2V0RE9NRXhjZXB0aW9uKGV4ZWMsIFNWR0V4Y2VwdGlvbjo6U1ZHX0lOVkFMSURfVkFMVUVfRVJS
KTsKQEAgLTEwMywxMyArMTAzLDEzIEBAIEpTVmFsdWUqIEpTU1ZHTWF0cml4Ojpyb3RhdGVGcm9t
VmVjdG9yKEUKIEpTVmFsdWUqIEpTU1ZHTWF0cml4OjpmbGlwWChFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IExpc3QmKQogewogICAgIEFmZmluZVRyYW5zZm9ybSBpbXAoKmltcGwoKSk7Ci0gICAgcmV0
dXJuIHRvSlMoZXhlYywgbmV3IEpTU1ZHUE9EVHlwZVdyYXBwZXJDcmVhdG9yUmVhZE9ubHk8QWZm
aW5lVHJhbnNmb3JtPihpbXAuZmxpcFgoKSksIG1fY29udGV4dC5nZXQoKSk7CisgICAgcmV0dXJu
IHRvSlMoZXhlYywgSlNTVkdQT0RUeXBlV3JhcHBlckNyZWF0b3JSZWFkT25seTxBZmZpbmVUcmFu
c2Zvcm0+OjpjcmVhdGUoaW1wLmZsaXBYKCkpLmdldCgpLCBtX2NvbnRleHQuZ2V0KCkpOwogfQog
CiBKU1ZhbHVlKiBKU1NWR01hdHJpeDo6ZmxpcFkoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBMaXN0
JikKIHsKICAgICBBZmZpbmVUcmFuc2Zvcm0gaW1wKCppbXBsKCkpOwotICAgIHJldHVybiB0b0pT
KGV4ZWMsIG5ldyBKU1NWR1BPRFR5cGVXcmFwcGVyQ3JlYXRvclJlYWRPbmx5PEFmZmluZVRyYW5z
Zm9ybT4oaW1wLmZsaXBZKCkpLCBtX2NvbnRleHQuZ2V0KCkpOworICAgIHJldHVybiB0b0pTKGV4
ZWMsIEpTU1ZHUE9EVHlwZVdyYXBwZXJDcmVhdG9yUmVhZE9ubHk8QWZmaW5lVHJhbnNmb3JtPjo6
Y3JlYXRlKGltcC5mbGlwWSgpKS5nZXQoKSwgbV9jb250ZXh0LmdldCgpKTsKIH0KIAogSlNWYWx1
ZSogSlNTVkdNYXRyaXg6OnNrZXdYKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgTGlzdCYgYXJncykK
QEAgLTExNyw3ICsxMTcsNyBAQCBKU1ZhbHVlKiBKU1NWR01hdHJpeDo6c2tld1goRXhlY1N0YXRl
KiBlCiAgICAgQWZmaW5lVHJhbnNmb3JtIGltcCgqaW1wbCgpKTsKIAogICAgIGZsb2F0IGFuZ2xl
ID0gYXJnc1swXS0+dG9GbG9hdChleGVjKTsKLSAgICByZXR1cm4gdG9KUyhleGVjLCBuZXcgSlNT
VkdQT0RUeXBlV3JhcHBlckNyZWF0b3JSZWFkT25seTxBZmZpbmVUcmFuc2Zvcm0+KGltcC5za2V3
WChhbmdsZSkpLCBtX2NvbnRleHQuZ2V0KCkpOworICAgIHJldHVybiB0b0pTKGV4ZWMsIEpTU1ZH
UE9EVHlwZVdyYXBwZXJDcmVhdG9yUmVhZE9ubHk8QWZmaW5lVHJhbnNmb3JtPjo6Y3JlYXRlKGlt
cC5za2V3WChhbmdsZSkpLmdldCgpLCBtX2NvbnRleHQuZ2V0KCkpOwogfQogCiBKU1ZhbHVlKiBK
U1NWR01hdHJpeDo6c2tld1koRXhlY1N0YXRlKiBleGVjLCBjb25zdCBMaXN0JiBhcmdzKQpAQCAt
MTI1LDcgKzEyNSw3IEBAIEpTVmFsdWUqIEpTU1ZHTWF0cml4Ojpza2V3WShFeGVjU3RhdGUqIGUK
ICAgICBBZmZpbmVUcmFuc2Zvcm0gaW1wKCppbXBsKCkpOwogCiAgICAgZmxvYXQgYW5nbGUgPSBh
cmdzWzBdLT50b0Zsb2F0KGV4ZWMpOwotICAgIHJldHVybiB0b0pTKGV4ZWMsIG5ldyBKU1NWR1BP
RFR5cGVXcmFwcGVyQ3JlYXRvclJlYWRPbmx5PEFmZmluZVRyYW5zZm9ybT4oaW1wLnNrZXdZKGFu
Z2xlKSksIG1fY29udGV4dC5nZXQoKSk7CisgICAgcmV0dXJuIHRvSlMoZXhlYywgSlNTVkdQT0RU
eXBlV3JhcHBlckNyZWF0b3JSZWFkT25seTxBZmZpbmVUcmFuc2Zvcm0+OjpjcmVhdGUoaW1wLnNr
ZXdZKGFuZ2xlKSkuZ2V0KCksIG1fY29udGV4dC5nZXQoKSk7CiB9CiAKIH0KSW5kZXg6IFdlYkNv
cmUvYmluZGluZ3MvanMvSlNTVkdQT0RUeXBlV3JhcHBlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvYmluZGluZ3MvanMvSlNTVkdQT0RUeXBlV3JhcHBlci5oCShyZXZpc2lvbiAzNDM3NikKKysr
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdQT0RUeXBlV3JhcHBlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMCwxOCArMzAsMTMgQEAKICNpZiBFTkFCTEUoU1ZHKQogCiAjaW5jbHVkZSAiRnJhbWUu
aCIKLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgIlNWR0VsZW1lbnQuaCIK
IAotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4K
LQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBQT0RUeXBlPgogY2xh
c3MgSlNTVkdQT0RUeXBlV3JhcHBlciA6IHB1YmxpYyBSZWZDb3VudGVkPEpTU1ZHUE9EVHlwZVdy
YXBwZXI8UE9EVHlwZT4gPiB7CiBwdWJsaWM6Ci0gICAgSlNTVkdQT0RUeXBlV3JhcHBlcigpIDog
UmVmQ291bnRlZDxKU1NWR1BPRFR5cGVXcmFwcGVyPFBPRFR5cGU+ID4oMCkgeyB9CiAgICAgdmly
dHVhbCB+SlNTVkdQT0RUeXBlV3JhcHBlcigpIHsgfQogCiAgICAgLy8gR2V0dGVyIHdyYXBwZXIK
QEAgLTUyLDI0ICs0NywxNiBAQCBwdWJsaWM6CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBQT0RU
eXBlLCB0eXBlbmFtZSBQT0RUeXBlQ3JlYXRvcj4KLWNsYXNzIEpTU1ZHUE9EVHlwZVdyYXBwZXJD
cmVhdG9yUmVhZFdyaXRlIDogcHVibGljIEpTU1ZHUE9EVHlwZVdyYXBwZXI8UE9EVHlwZT4KLXsK
K2NsYXNzIEpTU1ZHUE9EVHlwZVdyYXBwZXJDcmVhdG9yUmVhZFdyaXRlIDogcHVibGljIEpTU1ZH
UE9EVHlwZVdyYXBwZXI8UE9EVHlwZT4gewogcHVibGljOgogICAgIHR5cGVkZWYgUE9EVHlwZSAo
UE9EVHlwZUNyZWF0b3I6OipHZXR0ZXJNZXRob2QpKCkgY29uc3Q7IAogICAgIHR5cGVkZWYgdm9p
ZCAoUE9EVHlwZUNyZWF0b3I6OipTZXR0ZXJNZXRob2QpKFBPRFR5cGUpOwogCi0gICAgSlNTVkdQ
T0RUeXBlV3JhcHBlckNyZWF0b3JSZWFkV3JpdGUoUE9EVHlwZUNyZWF0b3IqIGNyZWF0b3IsIEdl
dHRlck1ldGhvZCBnZXR0ZXIsIFNldHRlck1ldGhvZCBzZXR0ZXIpCi0gICAgICAgIDogbV9jcmVh
dG9yKGNyZWF0b3IpCi0gICAgICAgICwgbV9nZXR0ZXIoZ2V0dGVyKQotICAgICAgICAsIG1fc2V0
dGVyKHNldHRlcikKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxKU1NWR1BPRFR5cGVXcmFwcGVyQ3Jl
YXRvclJlYWRXcml0ZT4gY3JlYXRlKFBhc3NSZWZQdHI8UE9EVHlwZUNyZWF0b3I+IGNyZWF0b3Is
IEdldHRlck1ldGhvZCBnZXR0ZXIsIFNldHRlck1ldGhvZCBzZXR0ZXIpCiAgICAgewotICAgICAg
ICBBU1NFUlQoY3JlYXRvcik7Ci0gICAgICAgIEFTU0VSVChnZXR0ZXIpOwotICAgICAgICBBU1NF
UlQoc2V0dGVyKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBKU1NWR1BPRFR5cGVXcmFw
cGVyQ3JlYXRvclJlYWRXcml0ZShjcmVhdG9yLCBnZXR0ZXIsIHNldHRlcikpOwogICAgIH0KIAot
ICAgIHZpcnR1YWwgfkpTU1ZHUE9EVHlwZVdyYXBwZXJDcmVhdG9yUmVhZFdyaXRlKCkgeyB9Ci0K
ICAgICAvLyBHZXR0ZXIgd3JhcHBlcgogICAgIHZpcnR1YWwgb3BlcmF0b3IgUE9EVHlwZSgpIHsg
cmV0dXJuIChtX2NyZWF0b3IuZ2V0KCktPiptX2dldHRlcikoKTsgfQogCkBAIC04Niw2ICs3Mywx
NiBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgorICAgIEpTU1ZHUE9EVHlwZVdyYXBwZXJD
cmVhdG9yUmVhZFdyaXRlKFBhc3NSZWZQdHI8UE9EVHlwZUNyZWF0b3I+IGNyZWF0b3IsIEdldHRl
ck1ldGhvZCBnZXR0ZXIsIFNldHRlck1ldGhvZCBzZXR0ZXIpCisgICAgICAgIDogbV9jcmVhdG9y
KGNyZWF0b3IpCisgICAgICAgICwgbV9nZXR0ZXIoZ2V0dGVyKQorICAgICAgICAsIG1fc2V0dGVy
KHNldHRlcikKKyAgICB7CisgICAgICAgIEFTU0VSVChjcmVhdG9yKTsKKyAgICAgICAgQVNTRVJU
KGdldHRlcik7CisgICAgICAgIEFTU0VSVChzZXR0ZXIpOworICAgIH0KKwogICAgIC8vIFVwZGF0
ZSBjYWxsYmFja3MKICAgICBSZWZQdHI8UE9EVHlwZUNyZWF0b3I+IG1fY3JlYXRvcjsKICAgICBH
ZXR0ZXJNZXRob2QgbV9nZXR0ZXI7CkBAIC05MywxNCArOTAsMTIgQEAgcHJpdmF0ZToKIH07CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIFBPRFR5cGU+Ci1jbGFzcyBKU1NWR1BPRFR5cGVXcmFwcGVyQ3Jl
YXRvclJlYWRPbmx5IDogcHVibGljIEpTU1ZHUE9EVHlwZVdyYXBwZXI8UE9EVHlwZT4KLXsKK2Ns
YXNzIEpTU1ZHUE9EVHlwZVdyYXBwZXJDcmVhdG9yUmVhZE9ubHkgOiBwdWJsaWMgSlNTVkdQT0RU
eXBlV3JhcHBlcjxQT0RUeXBlPiB7CiBwdWJsaWM6Ci0gICAgSlNTVkdQT0RUeXBlV3JhcHBlckNy
ZWF0b3JSZWFkT25seShQT0RUeXBlIHR5cGUpCi0gICAgICAgIDogbV9wb2RUeXBlKHR5cGUpCi0g
ICAgeyB9Ci0KLSAgICB2aXJ0dWFsIH5KU1NWR1BPRFR5cGVXcmFwcGVyQ3JlYXRvclJlYWRPbmx5
KCkgeyB9CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SlNTVkdQT0RUeXBlV3JhcHBlckNyZWF0b3JS
ZWFkT25seT4gY3JlYXRlKFBPRFR5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgSlNTVkdQT0RUeXBlV3JhcHBlckNyZWF0b3JSZWFkT25seSh0eXBlKSk7CisgICAg
fQogCiAgICAgLy8gR2V0dGVyIHdyYXBwZXIKICAgICB2aXJ0dWFsIG9wZXJhdG9yIFBPRFR5cGUo
KSB7IHJldHVybiBtX3BvZFR5cGU7IH0KQEAgLTExMiw2ICsxMDcsMTEgQEAgcHVibGljOgogICAg
IH0KIAogcHJpdmF0ZToKKyAgICBKU1NWR1BPRFR5cGVXcmFwcGVyQ3JlYXRvclJlYWRPbmx5KFBP
RFR5cGUgdHlwZSkKKyAgICAgICAgOiBtX3BvZFR5cGUodHlwZSkKKyAgICB7CisgICAgfQorCiAg
ICAgUE9EVHlwZSBtX3BvZFR5cGU7CiB9OwogCkBAIC0xMTksMjUgKzExOSwxNiBAQCB0ZW1wbGF0
ZTx0eXBlbmFtZSBQT0RUeXBlPgogY2xhc3MgU1ZHUE9ETGlzdEl0ZW07CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIFBPRFR5cGU+Ci1jbGFzcyBKU1NWR1BPRFR5cGVXcmFwcGVyQ3JlYXRvckZvckxpc3Qg
OiBwdWJsaWMgSlNTVkdQT0RUeXBlV3JhcHBlcjxQT0RUeXBlPgoteworY2xhc3MgSlNTVkdQT0RU
eXBlV3JhcHBlckNyZWF0b3JGb3JMaXN0IDogcHVibGljIEpTU1ZHUE9EVHlwZVdyYXBwZXI8UE9E
VHlwZT4gewogcHVibGljOgogICAgIHR5cGVkZWYgUE9EVHlwZSAoU1ZHUE9ETGlzdEl0ZW08UE9E
VHlwZT46OipHZXR0ZXJNZXRob2QpKCkgY29uc3Q7IAogICAgIHR5cGVkZWYgdm9pZCAoU1ZHUE9E
TGlzdEl0ZW08UE9EVHlwZT46OipTZXR0ZXJNZXRob2QpKFBPRFR5cGUpOwogCi0gICAgSlNTVkdQ
T0RUeXBlV3JhcHBlckNyZWF0b3JGb3JMaXN0KFNWR1BPRExpc3RJdGVtPFBPRFR5cGU+KiBjcmVh
dG9yLCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1lKQotICAgICAgICA6IG1fY3Jl
YXRvcihjcmVhdG9yKQotICAgICAgICAsIG1fZ2V0dGVyKCZTVkdQT0RMaXN0SXRlbTxQT0RUeXBl
Pjo6dmFsdWUpCi0gICAgICAgICwgbV9zZXR0ZXIoJlNWR1BPRExpc3RJdGVtPFBPRFR5cGU+Ojpz
ZXRWYWx1ZSkKLSAgICAgICAgLCBtX2Fzc29jaWF0ZWRBdHRyaWJ1dGVOYW1lKGF0dHJpYnV0ZU5h
bWUpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SlNTVkdQT0RUeXBlV3JhcHBlckNyZWF0b3JGb3JM
aXN0PiBjcmVhdGUoUGFzc1JlZlB0cjxTVkdQT0RMaXN0SXRlbTxQT0RUeXBlPiA+IGNyZWF0b3Is
IGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUpCiAgICAgewotICAgICAgICBBU1NF
UlQobV9jcmVhdG9yKTsKLSAgICAgICAgQVNTRVJUKG1fZ2V0dGVyKTsKLSAgICAgICAgQVNTRVJU
KG1fc2V0dGVyKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBKU1NWR1BPRFR5cGVXcmFw
cGVyQ3JlYXRvckZvckxpc3QoY3JlYXRvciwgYXR0cmlidXRlTmFtZSkpOwogICAgIH0KIAotICAg
IHZpcnR1YWwgfkpTU1ZHUE9EVHlwZVdyYXBwZXJDcmVhdG9yRm9yTGlzdCgpIHsgfQotCiAgICAg
Ly8gR2V0dGVyIHdyYXBwZXIKICAgICB2aXJ0dWFsIG9wZXJhdG9yIFBPRFR5cGUoKSB7IHJldHVy
biAobV9jcmVhdG9yLmdldCgpLT4qbV9nZXR0ZXIpKCk7IH0KIApAQCAtMTU0LDYgKzE0NSwxNyBA
QCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgorICAgIEpTU1ZHUE9EVHlwZVdyYXBwZXJDcmVh
dG9yRm9yTGlzdChQYXNzUmVmUHRyPFNWR1BPRExpc3RJdGVtPFBPRFR5cGU+ID4gY3JlYXRvciwg
Y29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSkKKyAgICAgICAgOiBtX2NyZWF0b3Io
Y3JlYXRvcikKKyAgICAgICAgLCBtX2dldHRlcigmU1ZHUE9ETGlzdEl0ZW08UE9EVHlwZT46OnZh
bHVlKQorICAgICAgICAsIG1fc2V0dGVyKCZTVkdQT0RMaXN0SXRlbTxQT0RUeXBlPjo6c2V0VmFs
dWUpCisgICAgICAgICwgbV9hc3NvY2lhdGVkQXR0cmlidXRlTmFtZShhdHRyaWJ1dGVOYW1lKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKG1fY3JlYXRvcik7CisgICAgICAgIEFTU0VSVChtX2dldHRl
cik7CisgICAgICAgIEFTU0VSVChtX3NldHRlcik7CisgICAgfQorCiAgICAgLy8gVXBkYXRlIGNh
bGxiYWNrcwogICAgIFJlZlB0cjxTVkdQT0RMaXN0SXRlbTxQT0RUeXBlPiA+IG1fY3JlYXRvcjsK
ICAgICBHZXR0ZXJNZXRob2QgbV9nZXR0ZXI7CkBAIC0yNDEsOCArMjQzLDcgQEAgc3RydWN0IFBP
RFR5cGVSZWFkV3JpdGVIYXNoSW5mb1RyYWl0cyA6IAogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUg
UE9EVHlwZSwgdHlwZW5hbWUgUE9EVHlwZUNyZWF0b3I+Ci1jbGFzcyBKU1NWR1BPRFR5cGVXcmFw
cGVyQ2FjaGUKLXsKK2NsYXNzIEpTU1ZHUE9EVHlwZVdyYXBwZXJDYWNoZSB7CiBwdWJsaWM6CiAg
ICAgdHlwZWRlZiBQT0RUeXBlIChQT0RUeXBlQ3JlYXRvcjo6KkdldHRlck1ldGhvZCkoKSBjb25z
dDsgCiAgICAgdHlwZWRlZiB2b2lkIChQT0RUeXBlQ3JlYXRvcjo6KlNldHRlck1ldGhvZCkoUE9E
VHlwZSk7CkBAIC0yNTcsNyArMjU4LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIC8vIFVzZWQg
Zm9yIHJlYWR3cml0ZSBhdHRyaWJ1dGVzIG9ubHkKLSAgICBzdGF0aWMgSlNTVkdQT0RUeXBlV3Jh
cHBlcjxQT0RUeXBlPiogbG9va3VwT3JDcmVhdGVXcmFwcGVyKFBPRFR5cGVDcmVhdG9yKiBjcmVh
dG9yLCBHZXR0ZXJNZXRob2QgZ2V0dGVyLCBTZXR0ZXJNZXRob2Qgc2V0dGVyKQorICAgIHN0YXRp
YyBQYXNzUmVmUHRyPEpTU1ZHUE9EVHlwZVdyYXBwZXI8UE9EVHlwZT4gPiBsb29rdXBPckNyZWF0
ZVdyYXBwZXIoUE9EVHlwZUNyZWF0b3IqIGNyZWF0b3IsIEdldHRlck1ldGhvZCBnZXR0ZXIsIFNl
dHRlck1ldGhvZCBzZXR0ZXIpCiAgICAgewogICAgICAgICBSZWFkV3JpdGVIYXNoTWFwJiBtYXAo
cmVhZFdyaXRlSGFzaE1hcCgpKTsKICAgICAgICAgUE9EVHlwZVJlYWRXcml0ZUhhc2hJbmZvPFBP
RFR5cGUsIFBPRFR5cGVDcmVhdG9yPiBpbmZvKGNyZWF0b3IsIGdldHRlciwgc2V0dGVyKTsKQEAg
LTI2NSw5ICsyNjYsOSBAQCBwdWJsaWM6CiAgICAgICAgIGlmIChtYXAuY29udGFpbnMoaW5mbykp
CiAgICAgICAgICAgICByZXR1cm4gbWFwLmdldChpbmZvKTsKIAotICAgICAgICBKU1NWR1BPRFR5
cGVXcmFwcGVyQ3JlYXRvclJlYWRXcml0ZTxQT0RUeXBlLCBQT0RUeXBlQ3JlYXRvcj4qIHdyYXBw
ZXIgPSBuZXcgSlNTVkdQT0RUeXBlV3JhcHBlckNyZWF0b3JSZWFkV3JpdGU8UE9EVHlwZSwgUE9E
VHlwZUNyZWF0b3I+KGNyZWF0b3IsIGdldHRlciwgc2V0dGVyKTsKLSAgICAgICAgbWFwLnNldChp
bmZvLCB3cmFwcGVyKTsKLSAgICAgICAgcmV0dXJuIHdyYXBwZXI7CisgICAgICAgIFJlZlB0cjxK
U1NWR1BPRFR5cGVXcmFwcGVyQ3JlYXRvclJlYWRXcml0ZTxQT0RUeXBlLCBQT0RUeXBlQ3JlYXRv
cj4gPiB3cmFwcGVyID0gSlNTVkdQT0RUeXBlV3JhcHBlckNyZWF0b3JSZWFkV3JpdGU8UE9EVHlw
ZSwgUE9EVHlwZUNyZWF0b3I+OjpjcmVhdGUoY3JlYXRvciwgZ2V0dGVyLCBzZXR0ZXIpOworICAg
ICAgICBtYXAuc2V0KGluZm8sIHdyYXBwZXIuZ2V0KCkpOworICAgICAgICByZXR1cm4gd3JhcHBl
ci5yZWxlYXNlKCk7CiAgICAgfQogCiAgICAgc3RhdGljIHZvaWQgZm9yZ2V0V3JhcHBlcihKU1NW
R1BPRFR5cGVXcmFwcGVyPFBPRFR5cGU+KiB3cmFwcGVyKQpAQCAtMjgxLDcgKzI4Miw3IEBAIHB1
YmxpYzoKICAgICAgICAgICAgIGlmIChpdC0+c2Vjb25kICE9IHdyYXBwZXIpCiAgICAgICAgICAg
ICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgIC8vIEl0J3MgZ3VhcnVhbnRlZWQgdGhhdCB0
aGVyZSdzIGp1c3Qgb25lIG9iamVjdCB3ZSBuZWVkIHRvIHRha2UgY2FyZSBvZi4KKyAgICAgICAg
ICAgIC8vIEl0J3MgZ3VhcmFudGVlZCB0aGF0IHRoZXJlJ3MganVzdCBvbmUgb2JqZWN0IHdlIG5l
ZWQgdG8gdGFrZSBjYXJlIG9mLgogICAgICAgICAgICAgbWFwLnJlbW92ZShpdC0+Zmlyc3QpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMv
SlNTVkdQb2ludExpc3RDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNTVkdQb2ludExpc3RDdXN0b20uY3BwCShyZXZpc2lvbiAzNDM3NikKKysrIFdlYkNvcmUv
YmluZGluZ3MvanMvSlNTVkdQb2ludExpc3RDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBOaWtvbGFz
IFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTE4
LDEwOCArMTksOTggQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNT
VkdQb2ludExpc3QuaCIKIAogI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiSlNTVkdQb2ludExp
c3QuaCIKIAotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNs
dWRlICJKU1NWR1BvaW50LmgiCi0jaW5jbHVkZSAiU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmgiCiAj
aW5jbHVkZSAiU1ZHUG9pbnRMaXN0LmgiCi0jaW5jbHVkZSAiU1ZHU3R5bGVkRWxlbWVudC5oIgot
Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAogdXNpbmcgbmFtZXNwYWNlIEtKUzsKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1KU1ZhbHVlKiBKU1NWR1BvaW50TGlzdDo6Y2xlYXIoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBMaXN0JikKK3R5cGVkZWYgU1ZHTGlzdDxSZWZQdHI8U1ZHUE9E
TGlzdEl0ZW08RmxvYXRQb2ludD4gPiA+IFNWR1BvaW50TGlzdEJhc2U7CisKK3N0YXRpYyBKU1Zh
bHVlKiBmaW5pc2hHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBFeGNlcHRpb25Db2RlJiBlYywgU1ZH
RWxlbWVudCogY29udGV4dCwgU1ZHUG9pbnRMaXN0KiBsaXN0LCBQYXNzUmVmUHRyPFNWR1BPRExp
c3RJdGVtPEZsb2F0UG9pbnQ+ID4gaXRlbSkKIHsKLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
KyAgICBpZiAoZWMpIHsKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfQorICAgIHJldHVybiB0b0pTKGV4ZWMsIEpT
U1ZHUE9EVHlwZVdyYXBwZXJDcmVhdG9yRm9yTGlzdDxGbG9hdFBvaW50Pjo6Y3JlYXRlKGl0ZW0u
Z2V0KCksIGxpc3QtPmFzc29jaWF0ZWRBdHRyaWJ1dGVOYW1lKCkpLmdldCgpLCBjb250ZXh0KTsK
K30KIAotICAgIFNWR1BvaW50TGlzdCogaW1wID0gc3RhdGljX2Nhc3Q8U1ZHUG9pbnRMaXN0Kj4o
aW1wbCgpKTsKLSAgICBpbXAtPmNsZWFyKGVjKTsKLSAgICBzZXRET01FeGNlcHRpb24oZXhlYywg
ZWMpOworc3RhdGljIEpTVmFsdWUqIGZpbmlzaFNldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEV4Y2Vw
dGlvbkNvZGUmIGVjLCBTVkdFbGVtZW50KiBjb250ZXh0LCBTVkdQb2ludExpc3QqIGxpc3QsIFBh
c3NSZWZQdHI8U1ZHUE9ETGlzdEl0ZW08RmxvYXRQb2ludD4gPiBpdGVtKQoreworICAgIGlmIChl
YykgeworICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKKyAgICB9CisgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRl
TmFtZSA9IGxpc3QtPmFzc29jaWF0ZWRBdHRyaWJ1dGVOYW1lKCk7CisgICAgY29udGV4dC0+c3Zn
QXR0cmlidXRlQ2hhbmdlZChhdHRyaWJ1dGVOYW1lKTsKKyAgICByZXR1cm4gdG9KUyhleGVjLCBK
U1NWR1BPRFR5cGVXcmFwcGVyQ3JlYXRvckZvckxpc3Q8RmxvYXRQb2ludD46OmNyZWF0ZShpdGVt
LmdldCgpLCBhdHRyaWJ1dGVOYW1lKS5nZXQoKSwgY29udGV4dCk7Cit9CiAKLSAgICBtX2NvbnRl
eHQtPnN2Z0F0dHJpYnV0ZUNoYW5nZWQoaW1wLT5hc3NvY2lhdGVkQXR0cmlidXRlTmFtZSgpKTsK
K3N0YXRpYyBKU1ZhbHVlKiBmaW5pc2hTZXR0ZXJSZWFkT25seVJlc3VsdChFeGVjU3RhdGUqIGV4
ZWMsIEV4Y2VwdGlvbkNvZGUmIGVjLCBTVkdFbGVtZW50KiBjb250ZXh0LCBTVkdQb2ludExpc3Qq
IGxpc3QsIFBhc3NSZWZQdHI8U1ZHUE9ETGlzdEl0ZW08RmxvYXRQb2ludD4gPiBpdGVtKQorewor
ICAgIGlmIChlYykgeworICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICB9CisgICAgY29udGV4dC0+c3ZnQXR0cmlidXRl
Q2hhbmdlZChsaXN0LT5hc3NvY2lhdGVkQXR0cmlidXRlTmFtZSgpKTsKKyAgICByZXR1cm4gdG9K
UyhleGVjLCBKU1NWR1BPRFR5cGVXcmFwcGVyQ3JlYXRvclJlYWRPbmx5PEZsb2F0UG9pbnQ+Ojpj
cmVhdGUoKml0ZW0pLmdldCgpLCBjb250ZXh0KTsKK30KIAorSlNWYWx1ZSogSlNTVkdQb2ludExp
c3Q6OmNsZWFyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgTGlzdCYpCit7CisgICAgRXhjZXB0aW9u
Q29kZSBlYyA9IDA7CisgICAgaW1wbCgpLT5jbGVhcihlYyk7CisgICAgc2V0RE9NRXhjZXB0aW9u
KGV4ZWMsIGVjKTsKKyAgICBtX2NvbnRleHQtPnN2Z0F0dHJpYnV0ZUNoYW5nZWQoaW1wbCgpLT5h
c3NvY2lhdGVkQXR0cmlidXRlTmFtZSgpKTsKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0K
IAogSlNWYWx1ZSogSlNTVkdQb2ludExpc3Q6OmluaXRpYWxpemUoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBMaXN0JiBhcmdzKQogewogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIEZsb2F0
UG9pbnQgbmV3SXRlbSA9IHRvU1ZHUG9pbnQoYXJnc1swXSk7Ci0KLSAgICBTVkdQb2ludExpc3Qq
IGltcCA9IHN0YXRpY19jYXN0PFNWR1BvaW50TGlzdCo+KGltcGwoKSk7Ci0gICAgU1ZHTGlzdDxS
ZWZQdHI8U1ZHUE9ETGlzdEl0ZW08RmxvYXRQb2ludD4gPiA+KiBsaXN0SW1wID0gaW1wOwotCi0g
ICAgU1ZHUE9ETGlzdEl0ZW08RmxvYXRQb2ludD4qIGxpc3RJdGVtID0gbGlzdEltcC0+aW5pdGlh
bGl6ZShTVkdQT0RMaXN0SXRlbTxGbG9hdFBvaW50Pjo6Y29weShuZXdJdGVtKSwgZWMpLmdldCgp
OyAKLSAgICBKU1NWR1BPRFR5cGVXcmFwcGVyQ3JlYXRvckZvckxpc3Q8RmxvYXRQb2ludD4qIG9i
aiA9IG5ldyBKU1NWR1BPRFR5cGVXcmFwcGVyQ3JlYXRvckZvckxpc3Q8RmxvYXRQb2ludD4obGlz
dEl0ZW0sIGltcC0+YXNzb2NpYXRlZEF0dHJpYnV0ZU5hbWUoKSk7Ci0KLSAgICBLSlM6OkpTVmFs
dWUqIHJlc3VsdCA9IHRvSlMoZXhlYywgb2JqLCBtX2NvbnRleHQuZ2V0KCkpOwotICAgIHNldERP
TUV4Y2VwdGlvbihleGVjLCBlYyk7Ci0KLSAgICBtX2NvbnRleHQtPnN2Z0F0dHJpYnV0ZUNoYW5n
ZWQoaW1wLT5hc3NvY2lhdGVkQXR0cmlidXRlTmFtZSgpKTsKLQotICAgIHJldHVybiByZXN1bHQ7
CisgICAgU1ZHUG9pbnRMaXN0QmFzZSogbGlzdEltcCA9IGltcGwoKTsKKyAgICByZXR1cm4gZmlu
aXNoU2V0dGVyKGV4ZWMsIGVjLCBjb250ZXh0KCksIGltcGwoKSwKKyAgICAgICAgbGlzdEltcC0+
aW5pdGlhbGl6ZShTVkdQT0RMaXN0SXRlbTxGbG9hdFBvaW50Pjo6Y29weSh0b1NWR1BvaW50KGFy
Z3NbMF0pKSwgZWMpKTsKIH0KIAogSlNWYWx1ZSogSlNTVkdQb2ludExpc3Q6OmdldEl0ZW0oRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBMaXN0JiBhcmdzKQogewotICAgIEV4Y2VwdGlvbkNvZGUgZWMg
PSAwOwotCiAgICAgYm9vbCBpbmRleE9rOwotICAgIHVuc2lnbmVkIGluZGV4ID0gYXJnc1swXS0+
dG9JbnQzMihleGVjLCBpbmRleE9rKTsKKyAgICB1bnNpZ25lZCBpbmRleCA9IGFyZ3NbMF0tPnRv
VUludDMyKGV4ZWMsIGluZGV4T2spOwogICAgIGlmICghaW5kZXhPaykgewogICAgICAgICBzZXRE
T01FeGNlcHRpb24oZXhlYywgVFlQRV9NSVNNQVRDSF9FUlIpOwogICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKICAgICB9CiAKLSAgICBTVkdQb2ludExpc3QqIGltcCA9IHN0YXRpY19jYXN0
PFNWR1BvaW50TGlzdCo+KGltcGwoKSk7Ci0gICAgU1ZHTGlzdDxSZWZQdHI8U1ZHUE9ETGlzdEl0
ZW08RmxvYXRQb2ludD4gPiA+KiBsaXN0SW1wID0gaW1wOwotCi0gICAgU1ZHUE9ETGlzdEl0ZW08
RmxvYXRQb2ludD4qIGxpc3RJdGVtID0gbGlzdEltcC0+Z2V0SXRlbShpbmRleCwgZWMpLmdldCgp
OwotICAgIEpTU1ZHUE9EVHlwZVdyYXBwZXJDcmVhdG9yRm9yTGlzdDxGbG9hdFBvaW50Piogb2Jq
ID0gbmV3IEpTU1ZHUE9EVHlwZVdyYXBwZXJDcmVhdG9yRm9yTGlzdDxGbG9hdFBvaW50PihsaXN0
SXRlbSwgaW1wLT5hc3NvY2lhdGVkQXR0cmlidXRlTmFtZSgpKTsKLQotICAgIEtKUzo6SlNWYWx1
ZSogcmVzdWx0ID0gdG9KUyhleGVjLCBvYmosIG1fY29udGV4dC5nZXQoKSk7Ci0gICAgc2V0RE9N
RXhjZXB0aW9uKGV4ZWMsIGVjKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIEV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOworICAgIFNWR1BvaW50TGlzdEJhc2UqIGxpc3RJbXAgPSBpbXBsKCk7CisgICAg
cmV0dXJuIGZpbmlzaEdldHRlcihleGVjLCBlYywgY29udGV4dCgpLCBpbXBsKCksCisgICAgICAg
IGxpc3RJbXAtPmdldEl0ZW0oaW5kZXgsIGVjKSk7CiB9CiAKIEpTVmFsdWUqIEpTU1ZHUG9pbnRM
aXN0OjppbnNlcnRJdGVtQmVmb3JlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgTGlzdCYgYXJncykK
IHsKLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBGbG9hdFBvaW50IG5ld0l0ZW0gPSB0
b1NWR1BvaW50KGFyZ3NbMF0pOwotCiAgICAgYm9vbCBpbmRleE9rOwotICAgIHVuc2lnbmVkIGlu
ZGV4ID0gYXJnc1sxXS0+dG9JbnQzMihleGVjLCBpbmRleE9rKTsKKyAgICB1bnNpZ25lZCBpbmRl
eCA9IGFyZ3NbMV0tPnRvVUludDMyKGV4ZWMsIGluZGV4T2spOwogICAgIGlmICghaW5kZXhPaykg
ewogICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgVFlQRV9NSVNNQVRDSF9FUlIpOwogICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKLSAgICBTVkdQb2ludExpc3QqIGlt
cCA9IHN0YXRpY19jYXN0PFNWR1BvaW50TGlzdCo+KGltcGwoKSk7Ci0gICAgU1ZHTGlzdDxSZWZQ
dHI8U1ZHUE9ETGlzdEl0ZW08RmxvYXRQb2ludD4gPiA+KiBsaXN0SW1wID0gaW1wOwotCi0gICAg
U1ZHUE9ETGlzdEl0ZW08RmxvYXRQb2ludD4qIGxpc3RJdGVtID0gbGlzdEltcC0+aW5zZXJ0SXRl
bUJlZm9yZShTVkdQT0RMaXN0SXRlbTxGbG9hdFBvaW50Pjo6Y29weShuZXdJdGVtKSwgaW5kZXgs
IGVjKS5nZXQoKTsKLSAgICBKU1NWR1BPRFR5cGVXcmFwcGVyQ3JlYXRvckZvckxpc3Q8RmxvYXRQ
b2ludD4qIG9iaiA9IG5ldyBKU1NWR1BPRFR5cGVXcmFwcGVyQ3JlYXRvckZvckxpc3Q8RmxvYXRQ
b2ludD4obGlzdEl0ZW0sIGltcC0+YXNzb2NpYXRlZEF0dHJpYnV0ZU5hbWUoKSk7Ci0KLSAgICBL
SlM6OkpTVmFsdWUqIHJlc3VsdCA9IHRvSlMoZXhlYywgb2JqLCBtX2NvbnRleHQuZ2V0KCkpOwot
ICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7Ci0KLSAgICBtX2NvbnRleHQtPnN2Z0F0dHJp
YnV0ZUNoYW5nZWQoaW1wLT5hc3NvY2lhdGVkQXR0cmlidXRlTmFtZSgpKTsKLQotICAgIHJldHVy
biByZXN1bHQ7CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgU1ZHUG9pbnRMaXN0QmFz
ZSogbGlzdEltcCA9IGltcGwoKTsKKyAgICByZXR1cm4gZmluaXNoU2V0dGVyKGV4ZWMsIGVjLCBj
b250ZXh0KCksIGltcGwoKSwKKyAgICAgICAgbGlzdEltcC0+aW5zZXJ0SXRlbUJlZm9yZShTVkdQ
T0RMaXN0SXRlbTxGbG9hdFBvaW50Pjo6Y29weSh0b1NWR1BvaW50KGFyZ3NbMF0pKSwgaW5kZXgs
IGVjKSk7CiB9CiAKIEpTVmFsdWUqIEpTU1ZHUG9pbnRMaXN0OjpyZXBsYWNlSXRlbShFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IExpc3QmIGFyZ3MpCiB7Ci0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7
Ci0gICAgRmxvYXRQb2ludCBuZXdJdGVtID0gdG9TVkdQb2ludChhcmdzWzBdKTsKLQogICAgIGJv
b2wgaW5kZXhPazsKICAgICB1bnNpZ25lZCBpbmRleCA9IGFyZ3NbMV0tPnRvSW50MzIoZXhlYywg
aW5kZXhPayk7CiAgICAgaWYgKCFpbmRleE9rKSB7CkBAIC0xMjcsMjQgKzExOCwxNCBAQCBKU1Zh
bHVlKiBKU1NWR1BvaW50TGlzdDo6cmVwbGFjZUl0ZW0oRXhlCiAgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogICAgIH0KIAotICAgIFNWR1BvaW50TGlzdCogaW1wID0gc3RhdGljX2Nhc3Q8
U1ZHUG9pbnRMaXN0Kj4oaW1wbCgpKTsKLSAgICBTVkdMaXN0PFJlZlB0cjxTVkdQT0RMaXN0SXRl
bTxGbG9hdFBvaW50PiA+ID4qIGxpc3RJbXAgPSBpbXA7Ci0KLSAgICBTVkdQT0RMaXN0SXRlbTxG
bG9hdFBvaW50PiogbGlzdEl0ZW0gPSBsaXN0SW1wLT5yZXBsYWNlSXRlbShTVkdQT0RMaXN0SXRl
bTxGbG9hdFBvaW50Pjo6Y29weShuZXdJdGVtKSwgaW5kZXgsIGVjKS5nZXQoKTsgCi0gICAgSlNT
VkdQT0RUeXBlV3JhcHBlckNyZWF0b3JGb3JMaXN0PEZsb2F0UG9pbnQ+KiBvYmogPSBuZXcgSlNT
VkdQT0RUeXBlV3JhcHBlckNyZWF0b3JGb3JMaXN0PEZsb2F0UG9pbnQ+KGxpc3RJdGVtLCBpbXAt
PmFzc29jaWF0ZWRBdHRyaWJ1dGVOYW1lKCkpOwotCi0gICAgS0pTOjpKU1ZhbHVlKiByZXN1bHQg
PSB0b0pTKGV4ZWMsIG9iaiwgbV9jb250ZXh0LmdldCgpKTsKLSAgICBzZXRET01FeGNlcHRpb24o
ZXhlYywgZWMpOwotCi0gICAgbV9jb250ZXh0LT5zdmdBdHRyaWJ1dGVDaGFuZ2VkKGltcC0+YXNz
b2NpYXRlZEF0dHJpYnV0ZU5hbWUoKSk7Ci0KLSAgICByZXR1cm4gcmVzdWx0OworICAgIEV4Y2Vw
dGlvbkNvZGUgZWMgPSAwOworICAgIFNWR1BvaW50TGlzdEJhc2UqIGxpc3RJbXAgPSBpbXBsKCk7
CisgICAgcmV0dXJuIGZpbmlzaFNldHRlcihleGVjLCBlYywgY29udGV4dCgpLCBpbXBsKCksCisg
ICAgICAgIGxpc3RJbXAtPnJlcGxhY2VJdGVtKFNWR1BPRExpc3RJdGVtPEZsb2F0UG9pbnQ+Ojpj
b3B5KHRvU1ZHUG9pbnQoYXJnc1swXSkpLCBpbmRleCwgZWMpKTsKIH0KIAogSlNWYWx1ZSogSlNT
VkdQb2ludExpc3Q6OnJlbW92ZUl0ZW0oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBMaXN0JiBhcmdz
KQogewotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIAogICAgIGJvb2wgaW5kZXhPazsK
ICAgICB1bnNpZ25lZCBpbmRleCA9IGFyZ3NbMF0tPnRvSW50MzIoZXhlYywgaW5kZXhPayk7CiAg
ICAgaWYgKCFpbmRleE9rKSB7CkBAIC0xNTIsMzcgKzEzMywxOCBAQCBKU1ZhbHVlKiBKU1NWR1Bv
aW50TGlzdDo6cmVtb3ZlSXRlbShFeGVjCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
ICAgIH0KIAotICAgIFNWR1BvaW50TGlzdCogaW1wID0gc3RhdGljX2Nhc3Q8U1ZHUG9pbnRMaXN0
Kj4oaW1wbCgpKTsKLSAgICBTVkdMaXN0PFJlZlB0cjxTVkdQT0RMaXN0SXRlbTxGbG9hdFBvaW50
PiA+ID4qIGxpc3RJbXAgPSBpbXA7Ci0KLSAgICBSZWZQdHI8U1ZHUE9ETGlzdEl0ZW08RmxvYXRQ
b2ludD4gPiBsaXN0SXRlbShsaXN0SW1wLT5yZW1vdmVJdGVtKGluZGV4LCBlYykpOwotICAgIEpT
U1ZHUE9EVHlwZVdyYXBwZXI8RmxvYXRQb2ludD4qIG9iaiA9IG5ldyBKU1NWR1BPRFR5cGVXcmFw
cGVyQ3JlYXRvclJlYWRPbmx5PEZsb2F0UG9pbnQ+KCpsaXN0SXRlbS5nZXQoKSk7Ci0KLSAgICBL
SlM6OkpTVmFsdWUqIHJlc3VsdCA9IHRvSlMoZXhlYywgb2JqLCBtX2NvbnRleHQuZ2V0KCkpOwot
ICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7Ci0KLSAgICBtX2NvbnRleHQtPnN2Z0F0dHJp
YnV0ZUNoYW5nZWQoaW1wLT5hc3NvY2lhdGVkQXR0cmlidXRlTmFtZSgpKTsKLQotICAgIHJldHVy
biByZXN1bHQ7CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgU1ZHUG9pbnRMaXN0QmFz
ZSogbGlzdEltcCA9IGltcGwoKTsKKyAgICByZXR1cm4gZmluaXNoU2V0dGVyUmVhZE9ubHlSZXN1
bHQoZXhlYywgZWMsIGNvbnRleHQoKSwgaW1wbCgpLAorICAgICAgICBsaXN0SW1wLT5yZW1vdmVJ
dGVtKGluZGV4LCBlYykpOwogfQogCiBKU1ZhbHVlKiBKU1NWR1BvaW50TGlzdDo6YXBwZW5kSXRl
bShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IExpc3QmIGFyZ3MpCiB7CiAgICAgRXhjZXB0aW9uQ29k
ZSBlYyA9IDA7Ci0gICAgRmxvYXRQb2ludCBuZXdJdGVtID0gdG9TVkdQb2ludChhcmdzWzBdKTsK
LQotICAgIFNWR1BvaW50TGlzdCogaW1wID0gc3RhdGljX2Nhc3Q8U1ZHUG9pbnRMaXN0Kj4oaW1w
bCgpKTsKLSAgICBTVkdMaXN0PFJlZlB0cjxTVkdQT0RMaXN0SXRlbTxGbG9hdFBvaW50PiA+ID4q
IGxpc3RJbXAgPSBpbXA7Ci0KLSAgICBTVkdQT0RMaXN0SXRlbTxGbG9hdFBvaW50PiogbGlzdEl0
ZW0gPSBsaXN0SW1wLT5hcHBlbmRJdGVtKFNWR1BPRExpc3RJdGVtPEZsb2F0UG9pbnQ+Ojpjb3B5
KG5ld0l0ZW0pLCBlYykuZ2V0KCk7IAotICAgIEpTU1ZHUE9EVHlwZVdyYXBwZXJDcmVhdG9yRm9y
TGlzdDxGbG9hdFBvaW50Piogb2JqID0gbmV3IEpTU1ZHUE9EVHlwZVdyYXBwZXJDcmVhdG9yRm9y
TGlzdDxGbG9hdFBvaW50PihsaXN0SXRlbSwgaW1wLT5hc3NvY2lhdGVkQXR0cmlidXRlTmFtZSgp
KTsKLQotICAgIEtKUzo6SlNWYWx1ZSogcmVzdWx0ID0gdG9KUyhleGVjLCBvYmosIG1fY29udGV4
dC5nZXQoKSk7Ci0gICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKLQotICAgIG1fY29udGV4
dC0+c3ZnQXR0cmlidXRlQ2hhbmdlZChpbXAtPmFzc29jaWF0ZWRBdHRyaWJ1dGVOYW1lKCkpOwot
Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICBTVkdQb2ludExpc3RCYXNlKiBsaXN0SW1wID0gaW1w
bCgpOworICAgIHJldHVybiBmaW5pc2hTZXR0ZXIoZXhlYywgZWMsIGNvbnRleHQoKSwgaW1wbCgp
LAorICAgICAgICBsaXN0SW1wLT5hcHBlbmRJdGVtKFNWR1BPRExpc3RJdGVtPEZsb2F0UG9pbnQ+
Ojpjb3B5KHRvU1ZHUG9pbnQoYXJnc1swXSkpLCBlYykpOwogfQogCiB9CkluZGV4OiBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTU1ZHVHJhbnNmb3JtTGlzdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR1RyYW5zZm9ybUxpc3RDdXN0b20uY3BwCShyZXZpc2lv
biAzNDM3NikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdUcmFuc2Zvcm1MaXN0Q3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDcsIDIwMDggTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCkBAIC0xOCw1OSArMTksNjggQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiSlNTVkdUcmFuc2Zvcm1MaXN0LmgiCiAKICNpZiBFTkFCTEUoU1ZHKQot
I2luY2x1ZGUgIkpTU1ZHVHJhbnNmb3JtTGlzdC5oIgogCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIK
LSNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkpTU1ZHVHJhbnNmb3JtLmgiCi0jaW5jbHVk
ZSAiU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmgiCiAjaW5jbHVkZSAiU1ZHVHJhbnNmb3JtTGlzdC5o
IgotI2luY2x1ZGUgIlNWR1N0eWxlZEVsZW1lbnQuaCIKLQotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRp
b25zLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBLSlM7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
SlNWYWx1ZSogSlNTVkdUcmFuc2Zvcm1MaXN0OjpjbGVhcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IExpc3QmKQordHlwZWRlZiBTVkdMaXN0PFJlZlB0cjxTVkdQT0RMaXN0SXRlbTxTVkdUcmFuc2Zv
cm0+ID4gPiBTVkdUcmFuc2Zvcm1MaXN0QmFzZTsKKworc3RhdGljIEpTVmFsdWUqIGZpbmlzaEdl
dHRlcihFeGVjU3RhdGUqIGV4ZWMsIEV4Y2VwdGlvbkNvZGUmIGVjLCBTVkdFbGVtZW50KiBjb250
ZXh0LCBTVkdUcmFuc2Zvcm1MaXN0KiBsaXN0LCBQYXNzUmVmUHRyPFNWR1BPRExpc3RJdGVtPFNW
R1RyYW5zZm9ybT4gPiBpdGVtKQogewotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGlm
IChlYykgeworICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKKyAgICB9CisgICAgcmV0dXJuIHRvSlMoZXhlYywgSlNTVkdQT0RU
eXBlV3JhcHBlckNyZWF0b3JGb3JMaXN0PFNWR1RyYW5zZm9ybT46OmNyZWF0ZShpdGVtLmdldCgp
LCBsaXN0LT5hc3NvY2lhdGVkQXR0cmlidXRlTmFtZSgpKS5nZXQoKSwgY29udGV4dCk7Cit9CiAK
LSAgICBTVkdUcmFuc2Zvcm1MaXN0KiBpbXAgPSBzdGF0aWNfY2FzdDxTVkdUcmFuc2Zvcm1MaXN0
Kj4oaW1wbCgpKTsKLSAgICBpbXAtPmNsZWFyKGVjKTsKLSAgICBzZXRET01FeGNlcHRpb24oZXhl
YywgZWMpOworc3RhdGljIEpTVmFsdWUqIGZpbmlzaFNldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEV4
Y2VwdGlvbkNvZGUmIGVjLCBTVkdFbGVtZW50KiBjb250ZXh0LCBTVkdUcmFuc2Zvcm1MaXN0KiBs
aXN0LCBQYXNzUmVmUHRyPFNWR1BPRExpc3RJdGVtPFNWR1RyYW5zZm9ybT4gPiBpdGVtKQorewor
ICAgIGlmIChlYykgeworICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICB9CisgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYg
YXR0cmlidXRlTmFtZSA9IGxpc3QtPmFzc29jaWF0ZWRBdHRyaWJ1dGVOYW1lKCk7CisgICAgY29u
dGV4dC0+c3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyaWJ1dGVOYW1lKTsKKyAgICByZXR1cm4gdG9K
UyhleGVjLCBKU1NWR1BPRFR5cGVXcmFwcGVyQ3JlYXRvckZvckxpc3Q8U1ZHVHJhbnNmb3JtPjo6
Y3JlYXRlKGl0ZW0uZ2V0KCksIGF0dHJpYnV0ZU5hbWUpLmdldCgpLCBjb250ZXh0KTsKK30KIAot
ICAgIG1fY29udGV4dC0+c3ZnQXR0cmlidXRlQ2hhbmdlZChpbXAtPmFzc29jaWF0ZWRBdHRyaWJ1
dGVOYW1lKCkpOworc3RhdGljIEpTVmFsdWUqIGZpbmlzaFNldHRlclJlYWRPbmx5UmVzdWx0KEV4
ZWNTdGF0ZSogZXhlYywgRXhjZXB0aW9uQ29kZSYgZWMsIFNWR0VsZW1lbnQqIGNvbnRleHQsIFNW
R1RyYW5zZm9ybUxpc3QqIGxpc3QsIFBhc3NSZWZQdHI8U1ZHUE9ETGlzdEl0ZW08U1ZHVHJhbnNm
b3JtPiA+IGl0ZW0pCit7CisgICAgaWYgKGVjKSB7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbihl
eGVjLCBlYyk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIH0KKyAgICBjb250
ZXh0LT5zdmdBdHRyaWJ1dGVDaGFuZ2VkKGxpc3QtPmFzc29jaWF0ZWRBdHRyaWJ1dGVOYW1lKCkp
OworICAgIHJldHVybiB0b0pTKGV4ZWMsIEpTU1ZHUE9EVHlwZVdyYXBwZXJDcmVhdG9yUmVhZE9u
bHk8U1ZHVHJhbnNmb3JtPjo6Y3JlYXRlKCppdGVtKS5nZXQoKSwgY29udGV4dCk7Cit9CiAKK0pT
VmFsdWUqIEpTU1ZHVHJhbnNmb3JtTGlzdDo6Y2xlYXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBM
aXN0JikKK3sKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBpbXBsKCktPmNsZWFyKGVj
KTsKKyAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgIG1fY29udGV4dC0+c3ZnQXR0
cmlidXRlQ2hhbmdlZChpbXBsKCktPmFzc29jaWF0ZWRBdHRyaWJ1dGVOYW1lKCkpOwogICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwogfQogCiBKU1ZhbHVlKiBKU1NWR1RyYW5zZm9ybUxpc3Q6Omlu
aXRpYWxpemUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBMaXN0JiBhcmdzKQogewogICAgIEV4Y2Vw
dGlvbkNvZGUgZWMgPSAwOwotICAgIFNWR1RyYW5zZm9ybSBuZXdJdGVtID0gdG9TVkdUcmFuc2Zv
cm0oYXJnc1swXSk7Ci0KLSAgICBTVkdUcmFuc2Zvcm1MaXN0KiBpbXAgPSBzdGF0aWNfY2FzdDxT
VkdUcmFuc2Zvcm1MaXN0Kj4oaW1wbCgpKTsKLSAgICBTVkdMaXN0PFJlZlB0cjxTVkdQT0RMaXN0
SXRlbTxTVkdUcmFuc2Zvcm0+ID4gPiogbGlzdEltcCA9IGltcDsKLQotICAgIFNWR1BPRExpc3RJ
dGVtPFNWR1RyYW5zZm9ybT4qIGxpc3RJdGVtID0gbGlzdEltcC0+aW5pdGlhbGl6ZShTVkdQT0RM
aXN0SXRlbTxTVkdUcmFuc2Zvcm0+Ojpjb3B5KG5ld0l0ZW0pLCBlYykuZ2V0KCk7IAotICAgIEpT
U1ZHUE9EVHlwZVdyYXBwZXJDcmVhdG9yRm9yTGlzdDxTVkdUcmFuc2Zvcm0+KiBvYmogPSBuZXcg
SlNTVkdQT0RUeXBlV3JhcHBlckNyZWF0b3JGb3JMaXN0PFNWR1RyYW5zZm9ybT4obGlzdEl0ZW0s
IGltcC0+YXNzb2NpYXRlZEF0dHJpYnV0ZU5hbWUoKSk7Ci0KLSAgICBLSlM6OkpTVmFsdWUqIHJl
c3VsdCA9IHRvSlMoZXhlYywgb2JqLCBtX2NvbnRleHQuZ2V0KCkpOwotICAgIHNldERPTUV4Y2Vw
dGlvbihleGVjLCBlYyk7Ci0KLSAgICBtX2NvbnRleHQtPnN2Z0F0dHJpYnV0ZUNoYW5nZWQoaW1w
LT5hc3NvY2lhdGVkQXR0cmlidXRlTmFtZSgpKTsKLQotICAgIHJldHVybiByZXN1bHQ7CisgICAg
U1ZHVHJhbnNmb3JtTGlzdEJhc2UqIGxpc3RJbXAgPSBpbXBsKCk7CisgICAgcmV0dXJuIGZpbmlz
aFNldHRlcihleGVjLCBlYywgY29udGV4dCgpLCBpbXBsKCksCisgICAgICAgIGxpc3RJbXAtPmlu
aXRpYWxpemUoU1ZHUE9ETGlzdEl0ZW08U1ZHVHJhbnNmb3JtPjo6Y29weSh0b1NWR1RyYW5zZm9y
bShhcmdzWzBdKSksIGVjKSk7CiB9CiAKIEpTVmFsdWUqIEpTU1ZHVHJhbnNmb3JtTGlzdDo6Z2V0
SXRlbShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IExpc3QmIGFyZ3MpCiB7Ci0gICAgRXhjZXB0aW9u
Q29kZSBlYyA9IDA7Ci0KICAgICBib29sIGluZGV4T2s7CiAgICAgdW5zaWduZWQgaW5kZXggPSBh
cmdzWzBdLT50b0ludDMyKGV4ZWMsIGluZGV4T2spOwogICAgIGlmICghaW5kZXhPaykgewpAQCAt
NzgsMjIgKzg4LDE0IEBAIEpTVmFsdWUqIEpTU1ZHVHJhbnNmb3JtTGlzdDo6Z2V0SXRlbShFeGUK
ICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCi0gICAgU1ZHVHJhbnNmb3Jt
TGlzdCogaW1wID0gc3RhdGljX2Nhc3Q8U1ZHVHJhbnNmb3JtTGlzdCo+KGltcGwoKSk7Ci0gICAg
U1ZHTGlzdDxSZWZQdHI8U1ZHUE9ETGlzdEl0ZW08U1ZHVHJhbnNmb3JtPiA+ID4qIGxpc3RJbXAg
PSBpbXA7Ci0KLSAgICBTVkdQT0RMaXN0SXRlbTxTVkdUcmFuc2Zvcm0+KiBsaXN0SXRlbSA9IGxp
c3RJbXAtPmdldEl0ZW0oaW5kZXgsIGVjKS5nZXQoKTsKLSAgICBKU1NWR1BPRFR5cGVXcmFwcGVy
Q3JlYXRvckZvckxpc3Q8U1ZHVHJhbnNmb3JtPiogb2JqID0gbmV3IEpTU1ZHUE9EVHlwZVdyYXBw
ZXJDcmVhdG9yRm9yTGlzdDxTVkdUcmFuc2Zvcm0+KGxpc3RJdGVtLCBpbXAtPmFzc29jaWF0ZWRB
dHRyaWJ1dGVOYW1lKCkpOwotCi0gICAgS0pTOjpKU1ZhbHVlKiByZXN1bHQgPSB0b0pTKGV4ZWMs
IG9iaiwgbV9jb250ZXh0LmdldCgpKTsKLSAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwot
ICAgIHJldHVybiByZXN1bHQ7CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgU1ZHVHJh
bnNmb3JtTGlzdEJhc2UqIGxpc3RJbXAgPSBpbXBsKCk7CisgICAgcmV0dXJuIGZpbmlzaEdldHRl
cihleGVjLCBlYywgY29udGV4dCgpLCBpbXBsKCksCisgICAgICAgIGxpc3RJbXAtPmdldEl0ZW0o
aW5kZXgsIGVjKSk7CiB9CiAKIEpTVmFsdWUqIEpTU1ZHVHJhbnNmb3JtTGlzdDo6aW5zZXJ0SXRl
bUJlZm9yZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IExpc3QmIGFyZ3MpCiB7Ci0gICAgRXhjZXB0
aW9uQ29kZSBlYyA9IDA7Ci0gICAgU1ZHVHJhbnNmb3JtIG5ld0l0ZW0gPSB0b1NWR1RyYW5zZm9y
bShhcmdzWzBdKTsKLQogICAgIGJvb2wgaW5kZXhPazsKICAgICB1bnNpZ25lZCBpbmRleCA9IGFy
Z3NbMV0tPnRvSW50MzIoZXhlYywgaW5kZXhPayk7CiAgICAgaWYgKCFpbmRleE9rKSB7CkBAIC0x
MDEsMjUgKzEwMywxNCBAQCBKU1ZhbHVlKiBKU1NWR1RyYW5zZm9ybUxpc3Q6Omluc2VydEl0ZW1C
CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAotICAgIFNWR1RyYW5zZm9y
bUxpc3QqIGltcCA9IHN0YXRpY19jYXN0PFNWR1RyYW5zZm9ybUxpc3QqPihpbXBsKCkpOwotICAg
IFNWR0xpc3Q8UmVmUHRyPFNWR1BPRExpc3RJdGVtPFNWR1RyYW5zZm9ybT4gPiA+KiBsaXN0SW1w
ID0gaW1wOwotCi0gICAgU1ZHUE9ETGlzdEl0ZW08U1ZHVHJhbnNmb3JtPiogbGlzdEl0ZW0gPSBs
aXN0SW1wLT5pbnNlcnRJdGVtQmVmb3JlKFNWR1BPRExpc3RJdGVtPFNWR1RyYW5zZm9ybT46OmNv
cHkobmV3SXRlbSksIGluZGV4LCBlYykuZ2V0KCk7Ci0gICAgSlNTVkdQT0RUeXBlV3JhcHBlckNy
ZWF0b3JGb3JMaXN0PFNWR1RyYW5zZm9ybT4qIG9iaiA9IG5ldyBKU1NWR1BPRFR5cGVXcmFwcGVy
Q3JlYXRvckZvckxpc3Q8U1ZHVHJhbnNmb3JtPihsaXN0SXRlbSwgaW1wLT5hc3NvY2lhdGVkQXR0
cmlidXRlTmFtZSgpKTsKLQotICAgIEtKUzo6SlNWYWx1ZSogcmVzdWx0ID0gdG9KUyhleGVjLCBv
YmosIG1fY29udGV4dC5nZXQoKSk7Ci0gICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKLQot
ICAgIG1fY29udGV4dC0+c3ZnQXR0cmlidXRlQ2hhbmdlZChpbXAtPmFzc29jaWF0ZWRBdHRyaWJ1
dGVOYW1lKCkpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICBFeGNlcHRpb25Db2RlIGVjID0g
MDsKKyAgICBTVkdUcmFuc2Zvcm1MaXN0QmFzZSogbGlzdEltcCA9IGltcGwoKTsKKyAgICByZXR1
cm4gZmluaXNoU2V0dGVyKGV4ZWMsIGVjLCBjb250ZXh0KCksIGltcGwoKSwKKyAgICAgICAgbGlz
dEltcC0+aW5zZXJ0SXRlbUJlZm9yZShTVkdQT0RMaXN0SXRlbTxTVkdUcmFuc2Zvcm0+Ojpjb3B5
KHRvU1ZHVHJhbnNmb3JtKGFyZ3NbMF0pKSwgaW5kZXgsIGVjKSk7CiB9CiAKIEpTVmFsdWUqIEpT
U1ZHVHJhbnNmb3JtTGlzdDo6cmVwbGFjZUl0ZW0oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBMaXN0
JiBhcmdzKQogewotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIFNWR1RyYW5zZm9ybSBu
ZXdJdGVtID0gdG9TVkdUcmFuc2Zvcm0oYXJnc1swXSk7Ci0KICAgICBib29sIGluZGV4T2s7CiAg
ICAgdW5zaWduZWQgaW5kZXggPSBhcmdzWzFdLT50b0ludDMyKGV4ZWMsIGluZGV4T2spOwogICAg
IGlmICghaW5kZXhPaykgewpAQCAtMTI3LDI0ICsxMTgsMTQgQEAgSlNWYWx1ZSogSlNTVkdUcmFu
c2Zvcm1MaXN0OjpyZXBsYWNlSXRlbQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAg
ICB9CiAKLSAgICBTVkdUcmFuc2Zvcm1MaXN0KiBpbXAgPSBzdGF0aWNfY2FzdDxTVkdUcmFuc2Zv
cm1MaXN0Kj4oaW1wbCgpKTsKLSAgICBTVkdMaXN0PFJlZlB0cjxTVkdQT0RMaXN0SXRlbTxTVkdU
cmFuc2Zvcm0+ID4gPiogbGlzdEltcCA9IGltcDsKLQotICAgIFNWR1BPRExpc3RJdGVtPFNWR1Ry
YW5zZm9ybT4qIGxpc3RJdGVtID0gbGlzdEltcC0+cmVwbGFjZUl0ZW0oU1ZHUE9ETGlzdEl0ZW08
U1ZHVHJhbnNmb3JtPjo6Y29weShuZXdJdGVtKSwgaW5kZXgsIGVjKS5nZXQoKTsgCi0gICAgSlNT
VkdQT0RUeXBlV3JhcHBlckNyZWF0b3JGb3JMaXN0PFNWR1RyYW5zZm9ybT4qIG9iaiA9IG5ldyBK
U1NWR1BPRFR5cGVXcmFwcGVyQ3JlYXRvckZvckxpc3Q8U1ZHVHJhbnNmb3JtPihsaXN0SXRlbSwg
aW1wLT5hc3NvY2lhdGVkQXR0cmlidXRlTmFtZSgpKTsKLQotICAgIEtKUzo6SlNWYWx1ZSogcmVz
dWx0ID0gdG9KUyhleGVjLCBvYmosIG1fY29udGV4dC5nZXQoKSk7Ci0gICAgc2V0RE9NRXhjZXB0
aW9uKGV4ZWMsIGVjKTsKLQotICAgIG1fY29udGV4dC0+c3ZnQXR0cmlidXRlQ2hhbmdlZChpbXAt
PmFzc29jaWF0ZWRBdHRyaWJ1dGVOYW1lKCkpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICBF
eGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBTVkdUcmFuc2Zvcm1MaXN0QmFzZSogbGlzdEltcCA9
IGltcGwoKTsKKyAgICByZXR1cm4gZmluaXNoU2V0dGVyKGV4ZWMsIGVjLCBjb250ZXh0KCksIGlt
cGwoKSwKKyAgICAgICAgbGlzdEltcC0+cmVwbGFjZUl0ZW0oU1ZHUE9ETGlzdEl0ZW08U1ZHVHJh
bnNmb3JtPjo6Y29weSh0b1NWR1RyYW5zZm9ybShhcmdzWzBdKSksIGluZGV4LCBlYykpOwogfQog
CiBKU1ZhbHVlKiBKU1NWR1RyYW5zZm9ybUxpc3Q6OnJlbW92ZUl0ZW0oRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBMaXN0JiBhcmdzKQogewotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIAog
ICAgIGJvb2wgaW5kZXhPazsKICAgICB1bnNpZ25lZCBpbmRleCA9IGFyZ3NbMF0tPnRvSW50MzIo
ZXhlYywgaW5kZXhPayk7CiAgICAgaWYgKCFpbmRleE9rKSB7CkBAIC0xNTIsMzcgKzEzMywxOCBA
QCBKU1ZhbHVlKiBKU1NWR1RyYW5zZm9ybUxpc3Q6OnJlbW92ZUl0ZW0oCiAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAotICAgIFNWR1RyYW5zZm9ybUxpc3QqIGltcCA9IHN0
YXRpY19jYXN0PFNWR1RyYW5zZm9ybUxpc3QqPihpbXBsKCkpOwotICAgIFNWR0xpc3Q8UmVmUHRy
PFNWR1BPRExpc3RJdGVtPFNWR1RyYW5zZm9ybT4gPiA+KiBsaXN0SW1wID0gaW1wOwotCi0gICAg
UmVmUHRyPFNWR1BPRExpc3RJdGVtPFNWR1RyYW5zZm9ybT4gPiBsaXN0SXRlbShsaXN0SW1wLT5y
ZW1vdmVJdGVtKGluZGV4LCBlYykpOwotICAgIEpTU1ZHUE9EVHlwZVdyYXBwZXI8U1ZHVHJhbnNm
b3JtPiogb2JqID0gbmV3IEpTU1ZHUE9EVHlwZVdyYXBwZXJDcmVhdG9yUmVhZE9ubHk8U1ZHVHJh
bnNmb3JtPigqbGlzdEl0ZW0uZ2V0KCkpOwotCi0gICAgS0pTOjpKU1ZhbHVlKiByZXN1bHQgPSB0
b0pTKGV4ZWMsIG9iaiwgbV9jb250ZXh0LmdldCgpKTsKLSAgICBzZXRET01FeGNlcHRpb24oZXhl
YywgZWMpOwotCi0gICAgbV9jb250ZXh0LT5zdmdBdHRyaWJ1dGVDaGFuZ2VkKGltcC0+YXNzb2Np
YXRlZEF0dHJpYnV0ZU5hbWUoKSk7Ci0KLSAgICByZXR1cm4gcmVzdWx0OworICAgIEV4Y2VwdGlv
bkNvZGUgZWMgPSAwOworICAgIFNWR1RyYW5zZm9ybUxpc3RCYXNlKiBsaXN0SW1wID0gaW1wbCgp
OworICAgIHJldHVybiBmaW5pc2hTZXR0ZXJSZWFkT25seVJlc3VsdChleGVjLCBlYywgY29udGV4
dCgpLCBpbXBsKCksCisgICAgICAgIGxpc3RJbXAtPnJlbW92ZUl0ZW0oaW5kZXgsIGVjKSk7CiB9
CiAKIEpTVmFsdWUqIEpTU1ZHVHJhbnNmb3JtTGlzdDo6YXBwZW5kSXRlbShFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IExpc3QmIGFyZ3MpCiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAg
U1ZHVHJhbnNmb3JtIG5ld0l0ZW0gPSB0b1NWR1RyYW5zZm9ybShhcmdzWzBdKTsKLQotICAgIFNW
R1RyYW5zZm9ybUxpc3QqIGltcCA9IHN0YXRpY19jYXN0PFNWR1RyYW5zZm9ybUxpc3QqPihpbXBs
KCkpOwotICAgIFNWR0xpc3Q8UmVmUHRyPFNWR1BPRExpc3RJdGVtPFNWR1RyYW5zZm9ybT4gPiA+
KiBsaXN0SW1wID0gaW1wOwotCi0gICAgU1ZHUE9ETGlzdEl0ZW08U1ZHVHJhbnNmb3JtPiogbGlz
dEl0ZW0gPSBsaXN0SW1wLT5hcHBlbmRJdGVtKFNWR1BPRExpc3RJdGVtPFNWR1RyYW5zZm9ybT46
OmNvcHkobmV3SXRlbSksIGVjKS5nZXQoKTsgCi0gICAgSlNTVkdQT0RUeXBlV3JhcHBlckNyZWF0
b3JGb3JMaXN0PFNWR1RyYW5zZm9ybT4qIG9iaiA9IG5ldyBKU1NWR1BPRFR5cGVXcmFwcGVyQ3Jl
YXRvckZvckxpc3Q8U1ZHVHJhbnNmb3JtPihsaXN0SXRlbSwgaW1wLT5hc3NvY2lhdGVkQXR0cmli
dXRlTmFtZSgpKTsKLQotICAgIEtKUzo6SlNWYWx1ZSogcmVzdWx0ID0gdG9KUyhleGVjLCBvYmos
IG1fY29udGV4dC5nZXQoKSk7Ci0gICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKLQotICAg
IG1fY29udGV4dC0+c3ZnQXR0cmlidXRlQ2hhbmdlZChpbXAtPmFzc29jaWF0ZWRBdHRyaWJ1dGVO
YW1lKCkpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICBTVkdUcmFuc2Zvcm1MaXN0QmFzZSog
bGlzdEltcCA9IGltcGwoKTsKKyAgICByZXR1cm4gZmluaXNoU2V0dGVyKGV4ZWMsIGVjLCBjb250
ZXh0KCksIGltcGwoKSwKKyAgICAgICAgbGlzdEltcC0+YXBwZW5kSXRlbShTVkdQT0RMaXN0SXRl
bTxTVkdUcmFuc2Zvcm0+Ojpjb3B5KHRvU1ZHVHJhbnNmb3JtKGFyZ3NbMF0pKSwgZWMpKTsKIH0K
IAogfQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfYmluZGluZy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfYmluZGluZy5jcHAJKHJldmlzaW9uIDM0Mzc2
KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfYmluZGluZy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI3OCwyNSArMjc4LDI1IEBAIHZvaWQgc2V0RE9NRXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhl
YywgRXgKICAgICBKU1ZhbHVlKiBlcnJvck9iamVjdCA9IDA7CiAgICAgc3dpdGNoIChkZXNjcmlw
dGlvbi50eXBlKSB7CiAgICAgICAgIGNhc2UgRE9NRXhjZXB0aW9uVHlwZToKLSAgICAgICAgICAg
IGVycm9yT2JqZWN0ID0gdG9KUyhleGVjLCBuZXcgRE9NQ29yZUV4Y2VwdGlvbihkZXNjcmlwdGlv
bikpOworICAgICAgICAgICAgZXJyb3JPYmplY3QgPSB0b0pTKGV4ZWMsIERPTUNvcmVFeGNlcHRp
b246OmNyZWF0ZShkZXNjcmlwdGlvbikpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgUmFuZ2VFeGNlcHRpb25UeXBlOgotICAgICAgICAgICAgZXJyb3JPYmplY3QgPSB0b0pTKGV4
ZWMsIG5ldyBSYW5nZUV4Y2VwdGlvbihkZXNjcmlwdGlvbikpOworICAgICAgICAgICAgZXJyb3JP
YmplY3QgPSB0b0pTKGV4ZWMsIFJhbmdlRXhjZXB0aW9uOjpjcmVhdGUoZGVzY3JpcHRpb24pKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEV2ZW50RXhjZXB0aW9uVHlwZToKLSAg
ICAgICAgICAgIGVycm9yT2JqZWN0ID0gdG9KUyhleGVjLCBuZXcgRXZlbnRFeGNlcHRpb24oZGVz
Y3JpcHRpb24pKTsKKyAgICAgICAgICAgIGVycm9yT2JqZWN0ID0gdG9KUyhleGVjLCBFdmVudEV4
Y2VwdGlvbjo6Y3JlYXRlKGRlc2NyaXB0aW9uKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBYTUxIdHRwUmVxdWVzdEV4Y2VwdGlvblR5cGU6Ci0gICAgICAgICAgICBlcnJvck9i
amVjdCA9IHRvSlMoZXhlYywgbmV3IFhNTEh0dHBSZXF1ZXN0RXhjZXB0aW9uKGRlc2NyaXB0aW9u
KSk7CisgICAgICAgICAgICBlcnJvck9iamVjdCA9IHRvSlMoZXhlYywgWE1MSHR0cFJlcXVlc3RF
eGNlcHRpb246OmNyZWF0ZShkZXNjcmlwdGlvbikpOwogICAgICAgICAgICAgYnJlYWs7CiAjaWYg
RU5BQkxFKFNWRykKICAgICAgICAgY2FzZSBTVkdFeGNlcHRpb25UeXBlOgotICAgICAgICAgICAg
ZXJyb3JPYmplY3QgPSB0b0pTKGV4ZWMsIG5ldyBTVkdFeGNlcHRpb24oZGVzY3JpcHRpb24pLCAw
KTsKKyAgICAgICAgICAgIGVycm9yT2JqZWN0ID0gdG9KUyhleGVjLCBTVkdFeGNlcHRpb246OmNy
ZWF0ZShkZXNjcmlwdGlvbikuZ2V0KCksIDApOwogICAgICAgICAgICAgYnJlYWs7CiAjZW5kaWYK
ICNpZiBFTkFCTEUoWFBBVEgpCiAgICAgICAgIGNhc2UgWFBhdGhFeGNlcHRpb25UeXBlOgotICAg
ICAgICAgICAgZXJyb3JPYmplY3QgPSB0b0pTKGV4ZWMsIG5ldyBYUGF0aEV4Y2VwdGlvbihkZXNj
cmlwdGlvbikpOworICAgICAgICAgICAgZXJyb3JPYmplY3QgPSB0b0pTKGV4ZWMsIFhQYXRoRXhj
ZXB0aW9uOjpjcmVhdGUoZGVzY3JpcHRpb24pKTsKICAgICAgICAgICAgIGJyZWFrOwogI2VuZGlm
CiAgICAgfQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfZXZlbnRzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19ldmVudHMuY3BwCShyZXZpc2lvbiAzNDM3
NikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMva2pzX2V2ZW50cy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQwLDE1ICs0MCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNl
IEV2ZW50TmFtZXM7CiAKLUpTQWJzdHJhY3RFdmVudExpc3RlbmVyOjpKU0Fic3RyYWN0RXZlbnRM
aXN0ZW5lcihib29sIGh0bWwpCi0gICAgOiBtX2h0bWwoaHRtbCkKK3ZvaWQgSlNBYnN0cmFjdEV2
ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50KEV2ZW50KiBldmVudCwgYm9vbCBpc1dpbmRvd0V2ZW50
KQogewotfQotCi12b2lkIEpTQWJzdHJhY3RFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVudChFdmVu
dCogZWxlLCBib29sIGlzV2luZG93RXZlbnQpCi17Ci0gICAgRXZlbnQqIGV2ZW50ID0gZWxlOwot
CiAgICAgSlNPYmplY3QqIGxpc3RlbmVyID0gbGlzdGVuZXJPYmooKTsKICAgICBpZiAoIWxpc3Rl
bmVyKQogICAgICAgICByZXR1cm47CkBAIC0xMTMsNyArMTA2LDcgQEAgdm9pZCBKU0Fic3RyYWN0
RXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbgogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
aWYgKCFyZXR2YWwtPmlzVW5kZWZpbmVkT3JOdWxsKCkgJiYgZXZlbnQtPnN0b3Jlc1Jlc3VsdEFz
U3RyaW5nKCkpCiAgICAgICAgICAgICAgICAgZXZlbnQtPnN0b3JlUmVzdWx0KHJldHZhbC0+dG9T
dHJpbmcoZXhlYykpOwotICAgICAgICAgICAgaWYgKG1faHRtbCkgeworICAgICAgICAgICAgaWYg
KG1faXNIVE1MKSB7CiAgICAgICAgICAgICAgICAgYm9vbCByZXR2YWxib29sOwogICAgICAgICAg
ICAgICAgIGlmIChyZXR2YWwtPmdldEJvb2xlYW4ocmV0dmFsYm9vbCkgJiYgIXJldHZhbGJvb2wp
CiAgICAgICAgICAgICAgICAgICAgIGV2ZW50LT5wcmV2ZW50RGVmYXVsdCgpOwpAQCAtMTI3LDE4
ICsxMjAsMTggQEAgdm9pZCBKU0Fic3RyYWN0RXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbgogCiBi
b29sIEpTQWJzdHJhY3RFdmVudExpc3RlbmVyOjppc0hUTUxFdmVudExpc3RlbmVyKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gbV9odG1sOworICAgIHJldHVybiBtX2lzSFRNTDsKIH0KIAogLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQogCi1KU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcjo6SlNVbnByb3RlY3Rl
ZEV2ZW50TGlzdGVuZXIoSlNPYmplY3QqIGxpc3RlbmVyLCBKU0RPTVdpbmRvdyogd2luZG93LCBi
b29sIGh0bWwpCi0gICAgOiBKU0Fic3RyYWN0RXZlbnRMaXN0ZW5lcihodG1sKQorSlNVbnByb3Rl
Y3RlZEV2ZW50TGlzdGVuZXI6OkpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKEpTT2JqZWN0KiBs
aXN0ZW5lciwgSlNET01XaW5kb3cqIHdpbmRvdywgYm9vbCBpc0hUTUwpCisgICAgOiBKU0Fic3Ry
YWN0RXZlbnRMaXN0ZW5lcihpc0hUTUwpCiAgICAgLCBtX2xpc3RlbmVyKGxpc3RlbmVyKQogICAg
ICwgbV93aW5kb3cod2luZG93KQogewogICAgIGlmIChtX2xpc3RlbmVyKSB7Ci0gICAgICAgIEpT
RE9NV2luZG93OjpVbnByb3RlY3RlZExpc3RlbmVyc01hcCYgbGlzdGVuZXJzID0gaHRtbAorICAg
ICAgICBKU0RPTVdpbmRvdzo6VW5wcm90ZWN0ZWRMaXN0ZW5lcnNNYXAmIGxpc3RlbmVycyA9IGlz
SFRNTAogICAgICAgICAgICAgPyB3aW5kb3ctPmpzVW5wcm90ZWN0ZWRIVE1MRXZlbnRMaXN0ZW5l
cnMoKSA6IHdpbmRvdy0+anNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXJzKCk7CiAgICAgICAgIGxp
c3RlbmVycy5zZXQobV9saXN0ZW5lciwgdGhpcyk7CiAgICAgfQpAQCAtMTk0LDEzICsxODcsMTMg
QEAgc3RhdGljIEV2ZW50TGlzdGVuZXJDb3VudGVyIGV2ZW50TGlzdGVuZQogCiAvLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCiAKLUpTRXZlbnRMaXN0ZW5lcjo6SlNFdmVudExpc3RlbmVyKEpTT2JqZWN0KiBs
aXN0ZW5lciwgSlNET01XaW5kb3cqIHdpbmRvdywgYm9vbCBodG1sKQotICAgIDogSlNBYnN0cmFj
dEV2ZW50TGlzdGVuZXIoaHRtbCkKK0pTRXZlbnRMaXN0ZW5lcjo6SlNFdmVudExpc3RlbmVyKEpT
T2JqZWN0KiBsaXN0ZW5lciwgSlNET01XaW5kb3cqIHdpbmRvdywgYm9vbCBpc0hUTUwpCisgICAg
OiBKU0Fic3RyYWN0RXZlbnRMaXN0ZW5lcihpc0hUTUwpCiAgICAgLCBtX2xpc3RlbmVyKGxpc3Rl
bmVyKQogICAgICwgbV93aW5kb3cod2luZG93KQogewogICAgIGlmIChtX2xpc3RlbmVyKSB7Ci0g
ICAgICAgIEpTRE9NV2luZG93OjpMaXN0ZW5lcnNNYXAmIGxpc3RlbmVycyA9IGh0bWwKKyAgICAg
ICAgSlNET01XaW5kb3c6Okxpc3RlbmVyc01hcCYgbGlzdGVuZXJzID0gaXNIVE1MCiAgICAgICAg
ICAgICA/IG1fd2luZG93LT5qc0hUTUxFdmVudExpc3RlbmVycygpIDogbV93aW5kb3ctPmpzRXZl
bnRMaXN0ZW5lcnMoKTsKICAgICAgICAgbGlzdGVuZXJzLnNldChtX2xpc3RlbmVyLCB0aGlzKTsK
ICAgICB9CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19ldmVudHMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19ldmVudHMuaAkocmV2aXNpb24gMzQzNzYpCisr
KyBXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc19ldmVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtMzIs
MjAgKzMyLDI3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIEpTQWJzdHJhY3RF
dmVudExpc3RlbmVyIDogcHVibGljIEV2ZW50TGlzdGVuZXIgewogICAgIHB1YmxpYzoKLSAgICAg
ICAgSlNBYnN0cmFjdEV2ZW50TGlzdGVuZXIoYm9vbCBodG1sID0gZmFsc2UpOwotCiAgICAgICAg
IHZpcnR1YWwgdm9pZCBoYW5kbGVFdmVudChFdmVudCosIGJvb2wgaXNXaW5kb3dFdmVudCk7CiAg
ICAgICAgIHZpcnR1YWwgYm9vbCBpc0hUTUxFdmVudExpc3RlbmVyKCkgY29uc3Q7CiAgICAgICAg
IHZpcnR1YWwgS0pTOjpKU09iamVjdCogbGlzdGVuZXJPYmooKSBjb25zdCA9IDA7CiAgICAgICAg
IHZpcnR1YWwgSlNET01XaW5kb3cqIHdpbmRvdygpIGNvbnN0ID0gMDsKIAorICAgIHByb3RlY3Rl
ZDoKKyAgICAgICAgSlNBYnN0cmFjdEV2ZW50TGlzdGVuZXIoYm9vbCBpc0hUTUwpCisgICAgICAg
ICAgICA6IG1faXNIVE1MKGlzSFRNTCkKKyAgICAgICAgeworICAgICAgICB9CisKICAgICBwcml2
YXRlOgotICAgICAgICBib29sIG1faHRtbDsKKyAgICAgICAgYm9vbCBtX2lzSFRNTDsKICAgICB9
OwogCiAgICAgY2xhc3MgSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIgOiBwdWJsaWMgSlNBYnN0
cmFjdEV2ZW50TGlzdGVuZXIgewogICAgIHB1YmxpYzoKLSAgICAgICAgSlNVbnByb3RlY3RlZEV2
ZW50TGlzdGVuZXIoS0pTOjpKU09iamVjdCogbGlzdGVuZXIsIEpTRE9NV2luZG93KiwgYm9vbCBo
dG1sID0gZmFsc2UpOworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxKU1VucHJvdGVjdGVkRXZl
bnRMaXN0ZW5lcj4gY3JlYXRlKEtKUzo6SlNPYmplY3QqIGxpc3RlbmVyLCBKU0RPTVdpbmRvdyog
d2luZG93LCBib29sIGlzSFRNTCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcihsaXN0ZW5lciwgd2luZG93LCBpc0hU
TUwpKTsKKyAgICAgICAgfQogICAgICAgICB2aXJ0dWFsIH5KU1VucHJvdGVjdGVkRXZlbnRMaXN0
ZW5lcigpOwogCiAgICAgICAgIHZpcnR1YWwgS0pTOjpKU09iamVjdCogbGlzdGVuZXJPYmooKSBj
b25zdDsKQEAgLTU0LDEzICs2MSwxOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZv
aWQgbWFyaygpOwogCiAgICAgcHJpdmF0ZToKKyAgICAgICAgSlNVbnByb3RlY3RlZEV2ZW50TGlz
dGVuZXIoS0pTOjpKU09iamVjdCogbGlzdGVuZXIsIEpTRE9NV2luZG93KiwgYm9vbCBpc0hUTUwp
OworCiAgICAgICAgIEtKUzo6SlNPYmplY3QqIG1fbGlzdGVuZXI7CiAgICAgICAgIEpTRE9NV2lu
ZG93KiBtX3dpbmRvdzsKICAgICB9OwogCiAgICAgY2xhc3MgSlNFdmVudExpc3RlbmVyIDogcHVi
bGljIEpTQWJzdHJhY3RFdmVudExpc3RlbmVyIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIEpTRXZl
bnRMaXN0ZW5lcihLSlM6OkpTT2JqZWN0KiBsaXN0ZW5lciwgSlNET01XaW5kb3cqLCBib29sIGh0
bWwgPSBmYWxzZSk7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEpTRXZlbnRMaXN0ZW5lcj4g
Y3JlYXRlKEtKUzo6SlNPYmplY3QqIGxpc3RlbmVyLCBKU0RPTVdpbmRvdyogd2luZG93LCBib29s
IGlzSFRNTCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBKU0V2
ZW50TGlzdGVuZXIobGlzdGVuZXIsIHdpbmRvdywgaXNIVE1MKSk7CisgICAgICAgIH0KICAgICAg
ICAgdmlydHVhbCB+SlNFdmVudExpc3RlbmVyKCk7CiAKICAgICAgICAgdmlydHVhbCBLSlM6OkpT
T2JqZWN0KiBsaXN0ZW5lck9iaigpIGNvbnN0OwpAQCAtNjgsNiArODAsOCBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgIHZvaWQgY2xlYXJXaW5kb3coKTsKIAogICAgIHByb3RlY3RlZDoK
KyAgICAgICAgSlNFdmVudExpc3RlbmVyKEtKUzo6SlNPYmplY3QqIGxpc3RlbmVyLCBKU0RPTVdp
bmRvdyosIGJvb2wgaXNIVE1MKTsKKwogICAgICAgICBtdXRhYmxlIEtKUzo6UHJvdGVjdGVkUHRy
PEtKUzo6SlNPYmplY3Q+IG1fbGlzdGVuZXI7CiAKICAgICBwcml2YXRlOgpAQCAtNzYsOSArOTAs
MTUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgSlNMYXp5RXZlbnRMaXN0ZW5l
ciA6IHB1YmxpYyBKU0V2ZW50TGlzdGVuZXIgewogICAgIHB1YmxpYzoKLSAgICAgICAgSlNMYXp5
RXZlbnRMaXN0ZW5lcihjb25zdCBTdHJpbmcmIGZ1bmN0aW9uTmFtZSwgY29uc3QgU3RyaW5nJiBj
b2RlLCBKU0RPTVdpbmRvdyosIE5vZGUqLCBpbnQgbGluZU51bWJlcik7CisgICAgICAgIHN0YXRp
YyBQYXNzUmVmUHRyPEpTTGF6eUV2ZW50TGlzdGVuZXI+IGNyZWF0ZShjb25zdCBTdHJpbmcmIGZ1
bmN0aW9uTmFtZSwgY29uc3QgU3RyaW5nJiBjb2RlLCBKU0RPTVdpbmRvdyogd2luZG93LCBOb2Rl
KiBub2RlLCBpbnQgbGluZU51bWJlcikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBKU0xhenlFdmVudExpc3RlbmVyKGZ1bmN0aW9uTmFtZSwgY29kZSwgd2luZG93
LCBub2RlLCBsaW5lTnVtYmVyKSk7CisgICAgICAgIH0KICAgICAgICAgdmlydHVhbCBLSlM6OkpT
T2JqZWN0KiBsaXN0ZW5lck9iaigpIGNvbnN0OwogCisgICAgcHJvdGVjdGVkOgorICAgICAgICBK
U0xhenlFdmVudExpc3RlbmVyKGNvbnN0IFN0cmluZyYgZnVuY3Rpb25OYW1lLCBjb25zdCBTdHJp
bmcmIGNvZGUsIEpTRE9NV2luZG93KiwgTm9kZSosIGludCBsaW5lTnVtYmVyKTsKKwogICAgIHBy
aXZhdGU6CiAgICAgICAgIHZpcnR1YWwgS0pTOjpKU1ZhbHVlKiBldmVudFBhcmFtZXRlck5hbWUo
KSBjb25zdDsKICAgICAgICAgdm9pZCBwYXJzZUNvZGUoKSBjb25zdDsKSW5kZXg6IFdlYkNvcmUv
YmluZGluZ3MvanMva2pzX3Byb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdz
L2pzL2tqc19wcm94eS5jcHAJKHJldmlzaW9uIDM0Mzc2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9q
cy9ranNfcHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjcsNyArMTI3LDcgQEAgRXZlbnRM
aXN0ZW5lciogS0pTUHJveHk6OmNyZWF0ZUhUTUxFdmVudAogewogICAgIGluaXRTY3JpcHRJZk5l
ZWRlZCgpOwogICAgIEpTTG9jayBsb2NrOwotICAgIHJldHVybiBuZXcgSlNMYXp5RXZlbnRMaXN0
ZW5lcihmdW5jdGlvbk5hbWUsIGNvZGUsIG1fd2luZG93U2hlbGwtPndpbmRvdygpLCBub2RlLCBt
X2hhbmRsZXJMaW5lbm8pOworICAgIHJldHVybiBKU0xhenlFdmVudExpc3RlbmVyOjpjcmVhdGUo
ZnVuY3Rpb25OYW1lLCBjb2RlLCBtX3dpbmRvd1NoZWxsLT53aW5kb3coKSwgbm9kZSwgbV9oYW5k
bGVyTGluZW5vKS5nZXQoKTsKIH0KIAogI2lmIEVOQUJMRShTVkcpCkBAIC0xMzUsNyArMTM1LDcg
QEAgRXZlbnRMaXN0ZW5lciogS0pTUHJveHk6OmNyZWF0ZVNWR0V2ZW50SAogewogICAgIGluaXRT
Y3JpcHRJZk5lZWRlZCgpOwogICAgIEpTTG9jayBsb2NrOwotICAgIHJldHVybiBuZXcgSlNTVkdM
YXp5RXZlbnRMaXN0ZW5lcihmdW5jdGlvbk5hbWUsIGNvZGUsIG1fd2luZG93U2hlbGwtPndpbmRv
dygpLCBub2RlLCBtX2hhbmRsZXJMaW5lbm8pOworICAgIHJldHVybiBKU1NWR0xhenlFdmVudExp
c3RlbmVyOjpjcmVhdGUoZnVuY3Rpb25OYW1lLCBjb2RlLCBtX3dpbmRvd1NoZWxsLT53aW5kb3co
KSwgbm9kZSwgbV9oYW5kbGVyTGluZW5vKS5nZXQoKTsKIH0KICNlbmRpZgogCkluZGV4OiBXZWJD
b3JlL2JpbmRpbmdzL29iamMvRE9NLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mv
b2JqYy9ET00ubW0JKHJldmlzaW9uIDM0Mzc2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RP
TS5tbQkod29ya2luZyBjb3B5KQpAQCAtNjkyLDM0ICs2OTIsMjcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjbGFzcyBPYmpDTm9kZUZpbHRlckNvbmRpdGlvbiA6IHB1YmxpYyBOb2RlRmlsdGVy
Q29uZGl0aW9uIHsKIHB1YmxpYzoKLSAgICBPYmpDTm9kZUZpbHRlckNvbmRpdGlvbihpZCA8RE9N
Tm9kZUZpbHRlcj4pOwotICAgIHZpcnR1YWwgfk9iakNOb2RlRmlsdGVyQ29uZGl0aW9uKCk7Cisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8T2JqQ05vZGVGaWx0ZXJDb25kaXRpb24+IGNyZWF0ZShpZCA8
RE9NTm9kZUZpbHRlcj4gZmlsdGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBPYmpDTm9kZUZpbHRlckNvbmRpdGlvbihmaWx0ZXIpKTsKKyAgICB9CisKICAgICB2aXJ0dWFs
IHNob3J0IGFjY2VwdE5vZGUoTm9kZSosIEpTVmFsdWUqJiBleGNlcHRpb24pIGNvbnN0OwogCiBw
cml2YXRlOgotICAgIE9iakNOb2RlRmlsdGVyQ29uZGl0aW9uKGNvbnN0IE9iakNOb2RlRmlsdGVy
Q29uZGl0aW9uJik7Ci0gICAgT2JqQ05vZGVGaWx0ZXJDb25kaXRpb24gJm9wZXJhdG9yPShjb25z
dCBPYmpDTm9kZUZpbHRlckNvbmRpdGlvbiYpOworICAgIE9iakNOb2RlRmlsdGVyQ29uZGl0aW9u
KGlkIDxET01Ob2RlRmlsdGVyPiBmaWx0ZXIpCisgICAgICAgIDogbV9maWx0ZXIoZmlsdGVyKQor
ICAgIHsKKyAgICB9CiAKLSAgICBpZCA8RE9NTm9kZUZpbHRlcj4gbV9maWx0ZXI7CisgICAgUmV0
YWluUHRyPGlkIDxET01Ob2RlRmlsdGVyPiA+IG1fZmlsdGVyOwogfTsKIAotT2JqQ05vZGVGaWx0
ZXJDb25kaXRpb246Ok9iakNOb2RlRmlsdGVyQ29uZGl0aW9uKGlkIDxET01Ob2RlRmlsdGVyPiBm
aWx0ZXIpCi0gICAgOiBtX2ZpbHRlcihmaWx0ZXIpCi17Ci0gICAgQVNTRVJUKG1fZmlsdGVyKTsK
LSAgICBIYXJkUmV0YWluKG1fZmlsdGVyKTsKLX0KLQotT2JqQ05vZGVGaWx0ZXJDb25kaXRpb246
On5PYmpDTm9kZUZpbHRlckNvbmRpdGlvbigpCi17Ci0gICAgSGFyZFJlbGVhc2UobV9maWx0ZXIp
OwotfQotCiBzaG9ydCBPYmpDTm9kZUZpbHRlckNvbmRpdGlvbjo6YWNjZXB0Tm9kZShOb2RlKiBu
b2RlLCBKU1ZhbHVlKiYpIGNvbnN0CiB7CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4g
Tm9kZUZpbHRlcjo6RklMVEVSX1JFSkVDVDsKLSAgICByZXR1cm4gW21fZmlsdGVyIGFjY2VwdE5v
ZGU6W0RPTU5vZGUgX3dyYXBOb2RlOm5vZGVdXTsKKyAgICByZXR1cm4gW21fZmlsdGVyLmdldCgp
IGFjY2VwdE5vZGU6W0RPTU5vZGUgX3dyYXBOb2RlOm5vZGVdXTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpAQCAtNzM0LDcgKzcyNyw3IEBAIHNob3J0IE9iakNOb2RlRmlsdGVyQ29uZGl0
aW9uOjphY2NlcHROb2QKIHsKICAgICBSZWZQdHI8Tm9kZUZpbHRlcj4gY3BwRmlsdGVyOwogICAg
IGlmIChmaWx0ZXIpCi0gICAgICAgIGNwcEZpbHRlciA9IG5ldyBOb2RlRmlsdGVyKG5ldyBPYmpD
Tm9kZUZpbHRlckNvbmRpdGlvbihmaWx0ZXIpKTsKKyAgICAgICAgY3BwRmlsdGVyID0gbmV3IE5v
ZGVGaWx0ZXIoT2JqQ05vZGVGaWx0ZXJDb25kaXRpb246OmNyZWF0ZShmaWx0ZXIpKTsKICAgICBF
eGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBSZWZQdHI8Tm9kZUl0ZXJhdG9yPiBpbXBsID0gW3Nl
bGYgX2RvY3VtZW50XS0+Y3JlYXRlTm9kZUl0ZXJhdG9yKFtyb290IF9ub2RlXSwgd2hhdFRvU2hv
dywgY3BwRmlsdGVyLnJlbGVhc2UoKSwgZXhwYW5kRW50aXR5UmVmZXJlbmNlcywgZWMpOwogICAg
IHJhaXNlT25ET01FcnJvcihlYyk7CkBAIC03NDUsNyArNzM4LDcgQEAgc2hvcnQgT2JqQ05vZGVG
aWx0ZXJDb25kaXRpb246OmFjY2VwdE5vZAogewogICAgIFJlZlB0cjxOb2RlRmlsdGVyPiBjcHBG
aWx0ZXI7CiAgICAgaWYgKGZpbHRlcikKLSAgICAgICAgY3BwRmlsdGVyID0gbmV3IE5vZGVGaWx0
ZXIobmV3IE9iakNOb2RlRmlsdGVyQ29uZGl0aW9uKGZpbHRlcikpOworICAgICAgICBjcHBGaWx0
ZXIgPSBuZXcgTm9kZUZpbHRlcihPYmpDTm9kZUZpbHRlckNvbmRpdGlvbjo6Y3JlYXRlKGZpbHRl
cikpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIFJlZlB0cjxUcmVlV2Fsa2VyPiBp
bXBsID0gW3NlbGYgX2RvY3VtZW50XS0+Y3JlYXRlVHJlZVdhbGtlcihbcm9vdCBfbm9kZV0sIHdo
YXRUb1Nob3csIGNwcEZpbHRlci5yZWxlYXNlKCksIGV4cGFuZEVudGl0eVJlZmVyZW5jZXMsIGVj
KTsKICAgICByYWlzZU9uRE9NRXJyb3IoZWMpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCShyZXZpc2lvbiAzNDM3NikKKysrIFdlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHdvcmtpbmcgY29weSkKQEAgLTE1NzIs
MTYgKzE1NzIsMTYgQEAgc3ViIE5hdGl2ZVRvSlNWYWx1ZQogCiAgICAgICAgIGlmICgkaW1wbENs
YXNzTmFtZUZvclZhbHVlQ29udmVyc2lvbiBlcSAiIikgewogICAgICAgICAgICAgaWYgKElzU1ZH
VHlwZU5lZWRpbmdDb250ZXh0UGFyYW1ldGVyKCRpbXBsQ2xhc3NOYW1lKSkgewotICAgICAgICAg
ICAgICAgIHJldHVybiAidG9KUyhleGVjLCBuZXcgSlNTVkdQT0RUeXBlV3JhcHBlckNyZWF0b3JS
ZWFkT25seTwkbmF0aXZlVHlwZT4oJHZhbHVlKSwgY2FzdGVkVGhpc09iai0+Y29udGV4dCgpKSIg
aWYgJGluRnVuY3Rpb25DYWxsIGVxIDE7CisgICAgICAgICAgICAgICAgcmV0dXJuICJ0b0pTKGV4
ZWMsIEpTU1ZHUE9EVHlwZVdyYXBwZXJDcmVhdG9yUmVhZE9ubHk8JG5hdGl2ZVR5cGU+OjpjcmVh
dGUoJHZhbHVlKS5nZXQoKSwgY2FzdGVkVGhpc09iai0+Y29udGV4dCgpKSIgaWYgJGluRnVuY3Rp
b25DYWxsIGVxIDE7CiAKICAgICAgICAgICAgICAgICAjIFNwZWNpYWwgY2FzZTogU1ZHWm9vbUV2
ZW50IC0gaXQgZG9lc24ndCBoYXZlIGEgY29udGV4dCwgYnV0IGl0J3Mgbm8gcHJvYmxlbSwgYXMg
dGhlcmUgYXJlIG5vIHJlYWR3cml0ZSBwcm9wcwotICAgICAgICAgICAgICAgIHJldHVybiAidG9K
UyhleGVjLCBuZXcgSlNTVkdQT0RUeXBlV3JhcHBlckNyZWF0b3JSZWFkT25seTwkbmF0aXZlVHlw
ZT4oJHZhbHVlKSwgMCkiIGlmICRpbXBsQ2xhc3NOYW1lIGVxICJTVkdab29tRXZlbnQiOwotICAg
ICAgICAgICAgICAgIHJldHVybiAidG9KUyhleGVjLCBuZXcgSlNTVkdQT0RUeXBlV3JhcHBlckNy
ZWF0b3JSZWFkT25seTwkbmF0aXZlVHlwZT4oJHZhbHVlKSwgY29udGV4dCgpKSI7CisgICAgICAg
ICAgICAgICAgcmV0dXJuICJ0b0pTKGV4ZWMsIEpTU1ZHUE9EVHlwZVdyYXBwZXJDcmVhdG9yUmVh
ZE9ubHk8JG5hdGl2ZVR5cGU+OjpjcmVhdGUoJHZhbHVlKS5nZXQoKSwgMCkiIGlmICRpbXBsQ2xh
c3NOYW1lIGVxICJTVkdab29tRXZlbnQiOworICAgICAgICAgICAgICAgIHJldHVybiAidG9KUyhl
eGVjLCBKU1NWR1BPRFR5cGVXcmFwcGVyQ3JlYXRvclJlYWRPbmx5PCRuYXRpdmVUeXBlPjo6Y3Jl
YXRlKCR2YWx1ZSkuZ2V0KCksIGNvbnRleHQoKSkiOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gInRvSlMoZXhlYywgbmV3IEpTU1ZHUE9EVHlwZVdyYXBwZXJD
cmVhdG9yUmVhZE9ubHk8JG5hdGl2ZVR5cGU+KCR2YWx1ZSksIGltcCkiOworICAgICAgICAgICAg
ICAgIHJldHVybiAidG9KUyhleGVjLCBKU1NWR1BPRFR5cGVXcmFwcGVyQ3JlYXRvclJlYWRPbmx5
PCRuYXRpdmVUeXBlPjo6Y3JlYXRlKCR2YWx1ZSkuZ2V0KCksIGltcCkiOwogICAgICAgICAgICAg
fQogICAgICAgICB9IGVsc2UgeyAjIFRoZXNlIGNsYXNzZXMsIGFsd2F5cyBoYXZlIGEgbV9jb250
ZXh0IHBvaW50ZXIhCi0gICAgICAgICAgICByZXR1cm4gInRvSlMoZXhlYywgSlNTVkdQT0RUeXBl
V3JhcHBlckNhY2hlPCRuYXRpdmVUeXBlLCAkaW1wbENsYXNzTmFtZUZvclZhbHVlQ29udmVyc2lv
bj46Omxvb2t1cE9yQ3JlYXRlV3JhcHBlcihpbXAsICYke2ltcGxDbGFzc05hbWVGb3JWYWx1ZUNv
bnZlcnNpb259OjokZ2V0dGVyLCAmJHtpbXBsQ2xhc3NOYW1lRm9yVmFsdWVDb252ZXJzaW9ufTo6
JHNldHRlciksIGNvbnRleHQoKSkiOworICAgICAgICAgICAgcmV0dXJuICJ0b0pTKGV4ZWMsIEpT
U1ZHUE9EVHlwZVdyYXBwZXJDYWNoZTwkbmF0aXZlVHlwZSwgJGltcGxDbGFzc05hbWVGb3JWYWx1
ZUNvbnZlcnNpb24+Ojpsb29rdXBPckNyZWF0ZVdyYXBwZXIoaW1wLCAmJHtpbXBsQ2xhc3NOYW1l
Rm9yVmFsdWVDb252ZXJzaW9ufTo6JGdldHRlciwgJiR7aW1wbENsYXNzTmFtZUZvclZhbHVlQ29u
dmVyc2lvbn06OiRzZXR0ZXIpLmdldCgpLCBjb250ZXh0KCkpIjsKICAgICAgICAgfQogICAgIH0K
IApJbmRleDogV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCShy
ZXZpc2lvbiAzNDM3NikKKysrIFdlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlv
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwMiw3ICszMDIsNyBAQCBzdGF0aWMgUGFzc1JlZlB0
cjxDU1NWYWx1ZT4gdmFsdWVGb3JOaW5lCiAgICAgZWxzZQogICAgICAgICBsZWZ0ID0gbmV3IENT
U1ByaW1pdGl2ZVZhbHVlKGltYWdlLm1fc2xpY2VzLmxlZnQudmFsdWUoKSwgQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19OVU1CRVIpOwogCi0gICAgUmVmUHRyPFJlY3Q+IHJlY3QgPSBuZXcgUmVjdCgp
OworICAgIFJlZlB0cjxSZWN0PiByZWN0ID0gUmVjdDo6Y3JlYXRlKCk7CiAgICAgcmVjdC0+c2V0
VG9wKHRvcCk7CiAgICAgcmVjdC0+c2V0UmlnaHQocmlnaHQpOwogICAgIHJlY3QtPnNldEJvdHRv
bShib3R0b20pOwpAQCAtOTQ4LDcgKzk0OCw3IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU0Nv
bXB1dGVkU3R5bGVEZWMKICAgICAgICAgICAgIFJlZlB0cjxEYXNoYm9hcmRSZWdpb24+IGZpcnN0
UmVnaW9uOwogICAgICAgICAgICAgRGFzaGJvYXJkUmVnaW9uKiBwcmV2aW91c1JlZ2lvbiA9IDA7
CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotICAg
ICAgICAgICAgICAgIFJlZlB0cjxEYXNoYm9hcmRSZWdpb24+IHJlZ2lvbiA9IG5ldyBEYXNoYm9h
cmRSZWdpb247CisgICAgICAgICAgICAgICAgUmVmUHRyPERhc2hib2FyZFJlZ2lvbj4gcmVnaW9u
ID0gRGFzaGJvYXJkUmVnaW9uOjpjcmVhdGUoKTsKICAgICAgICAgICAgICAgICBTdHlsZURhc2hi
b2FyZFJlZ2lvbiBzdHlsZVJlZ2lvbiA9IHJlZ2lvbnNbaV07CiAKICAgICAgICAgICAgICAgICBy
ZWdpb24tPm1fbGFiZWwgPSBzdHlsZVJlZ2lvbi5sYWJlbDsKQEAgLTEwMDEsMTIgKzEwMDEsMTIg
QEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTQ29tcHV0ZWRTdHlsZURlYwogICAgICAgICBjYXNl
IENTU1Byb3BlcnR5Q2xpcDoKICAgICAgICAgewogICAgICAgICAgICAgaWYgKHN0eWxlLT5oYXND
bGlwKCkpIHsKLSAgICAgICAgICAgICAgICBSZWN0KiByZWN0ID0gbmV3IFJlY3QoKTsKKyAgICAg
ICAgICAgICAgICBSZWZQdHI8UmVjdD4gcmVjdCA9IFJlY3Q6OmNyZWF0ZSgpOwogICAgICAgICAg
ICAgICAgIHJlY3QtPnNldFRvcChuZXcgQ1NTUHJpbWl0aXZlVmFsdWUoc3R5bGUtPmNsaXAoKS50
b3AudmFsdWUoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCkpOwogICAgICAgICAgICAgICAg
IHJlY3QtPnNldFJpZ2h0KG5ldyBDU1NQcmltaXRpdmVWYWx1ZShzdHlsZS0+Y2xpcCgpLnJpZ2h0
LnZhbHVlKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgpKTsKICAgICAgICAgICAgICAgICBy
ZWN0LT5zZXRCb3R0b20obmV3IENTU1ByaW1pdGl2ZVZhbHVlKHN0eWxlLT5jbGlwKCkuYm90dG9t
LnZhbHVlKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgpKTsKICAgICAgICAgICAgICAgICBy
ZWN0LT5zZXRMZWZ0KG5ldyBDU1NQcmltaXRpdmVWYWx1ZShzdHlsZS0+Y2xpcCgpLmxlZnQudmFs
dWUoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCkpOwotICAgICAgICAgICAgICAgIHJldHVy
biBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUocmVjdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5l
dyBDU1NQcmltaXRpdmVWYWx1ZShyZWN0LnJlbGVhc2UoKSk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQpJbmRleDogV2ViQ29yZS9jc3MvQ1NTRm9udEZh
Y2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NGb250RmFjZS5oCShyZXZpc2lvbiAz
NDM3NikKKysrIFdlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2
LDYgKzI2LDcgQEAKICNpZm5kZWYgQ1NTRm9udEZhY2VfaAogI2RlZmluZSBDU1NGb250RmFjZV9o
CiAKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVk
Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC0zOCwyNiArMzksMjYgQEAgY2xhc3Mg
U2ltcGxlRm9udERhdGE7CiAKIGNsYXNzIENTU0ZvbnRGYWNlIDogcHVibGljIFJlZkNvdW50ZWQ8
Q1NTRm9udEZhY2U+IHsKIHB1YmxpYzoKLSAgICBDU1NGb250RmFjZSgpCi0gICAgICAgIDogUmVm
Q291bnRlZDxDU1NGb250RmFjZT4oMCkKLSAgICAgICAgLCBtX3NlZ21lbnRlZEZvbnRGYWNlKDAp
Ci0gICAgewotICAgIH0KLQotICAgIHZpcnR1YWwgfkNTU0ZvbnRGYWNlKCk7CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8Q1NTRm9udEZhY2U+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBD
U1NGb250RmFjZSk7IH0KKyAgICB+Q1NTRm9udEZhY2UoKTsKIAogICAgIHZvaWQgc2V0U2VnbWVu
dGVkRm9udEZhY2UoQ1NTU2VnbWVudGVkRm9udEZhY2UqIHNlZ21lbnRlZEZvbnRGYWNlKSB7IG1f
c2VnbWVudGVkRm9udEZhY2UgPSBzZWdtZW50ZWRGb250RmFjZTsgfQogCiAgICAgYm9vbCBpc0xv
YWRlZCgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkKCkgY29uc3Q7CisgICAgYm9v
bCBpc1ZhbGlkKCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRkU291cmNlKENTU0ZvbnRG
YWNlU291cmNlKik7CisgICAgdm9pZCBhZGRTb3VyY2UoQ1NTRm9udEZhY2VTb3VyY2UqKTsKIAog
ICAgIHZvaWQgZm9udExvYWRlZChDU1NGb250RmFjZVNvdXJjZSopOwogCi0gICAgdmlydHVhbCBT
aW1wbGVGb250RGF0YSogZ2V0Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiwgYm9vbCBz
eW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYyk7CisgICAgU2ltcGxlRm9udERhdGEq
IGdldEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGJvb2wgc3ludGhldGljQm9sZCwg
Ym9vbCBzeW50aGV0aWNJdGFsaWMpOwogCiBwcml2YXRlOgorICAgIENTU0ZvbnRGYWNlKCkKKyAg
ICAgICAgOiBtX3NlZ21lbnRlZEZvbnRGYWNlKDApCisgICAgeworICAgIH0KKwogICAgIENTU1Nl
Z21lbnRlZEZvbnRGYWNlKiBtX3NlZ21lbnRlZEZvbnRGYWNlOwogICAgIFZlY3RvcjxDU1NGb250
RmFjZVNvdXJjZSo+IG1fc291cmNlczsKIH07CkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NGb250U2Vs
ZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAJ
KHJldmlzaW9uIDM0Mzc2KQorKysgV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTU0LDcgKzE1NCw3IEBAIHZvaWQgQ1NTRm9udFNlbGVjdG9yOjphZGRG
b250RmFjZVJ1bGUoY28KICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFNtYWxsQ2FwcyhzdGF0
aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGZvbnRWYXJpYW50LmdldCgpKS0+Z2V0SWRlbnQo
KSA9PSBDU1NWYWx1ZVNtYWxsQ2Fwcyk7CiAKICAgICAvLyBFYWNoIGl0ZW0gaW4gdGhlIHNyYyBw
cm9wZXJ0eSdzIGxpc3QgaXMgYSBzaW5nbGUgQ1NTRm9udEZhY2VTb3VyY2UuIFB1dCB0aGVtIGFs
bCBpbnRvIGEgQ1NTRm9udEZhY2UuCi0gICAgQ1NTRm9udEZhY2UqIGZvbnRGYWNlID0gMDsKKyAg
ICBSZWZQdHI8Q1NTRm9udEZhY2U+IGZvbnRGYWNlOwogCiAgICAgaW50IGk7CiAgICAgaW50IHNy
Y0xlbmd0aCA9IHNyY0xpc3QtPmxlbmd0aCgpOwpAQCAtMjAxLDcgKzIwMSw3IEBAIHZvaWQgQ1NT
Rm9udFNlbGVjdG9yOjphZGRGb250RmFjZVJ1bGUoY28KICAgICAgICAgfQogCiAgICAgICAgIGlm
ICghZm9udEZhY2UpCi0gICAgICAgICAgICBmb250RmFjZSA9IG5ldyBDU1NGb250RmFjZSgpOwor
ICAgICAgICAgICAgZm9udEZhY2UgPSBDU1NGb250RmFjZTo6Y3JlYXRlKCk7CiAKICAgICAgICAg
aWYgKHNvdXJjZSkgewogI2lmIEVOQUJMRShTVkdfRk9OVFMpCkBAIC0yMTcsMTAgKzIxNyw4IEBA
IHZvaWQgQ1NTRm9udFNlbGVjdG9yOjphZGRGb250RmFjZVJ1bGUoY28KIAogICAgIEFTU0VSVChm
b250RmFjZSk7CiAKLSAgICBpZiAoZm9udEZhY2UgJiYgIWZvbnRGYWNlLT5pc1ZhbGlkKCkpIHsK
LSAgICAgICAgZGVsZXRlIGZvbnRGYWNlOworICAgIGlmIChmb250RmFjZSAmJiAhZm9udEZhY2Ut
PmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAogICAgIC8vIEhhc2ggdW5kZXIg
ZXZlcnkgc2luZ2xlIGZhbWlseSBuYW1lLgogICAgIGludCBmYW1pbHlMZW5ndGggPSBmYW1pbHlM
aXN0LT5sZW5ndGgoKTsKQEAgLTI2NywxNyArMjY1LDE4IEBAIHZvaWQgQ1NTRm9udFNlbGVjdG9y
OjphZGRGb250RmFjZVJ1bGUoY28KICAgICAgICAgU3RyaW5nIGhhc2ggPSBoYXNoRm9yRm9udChm
YW1pbHlOYW1lLmxvd2VyKCksIGZvbnREZXNjcmlwdGlvbi53ZWlnaHQoKSwgZm9udERlc2NyaXB0
aW9uLml0YWxpYygpKTsKICAgICAgICAgQ1NTU2VnbWVudGVkRm9udEZhY2UqIHNlZ21lbnRlZEZv
bnRGYWNlID0gbV9mb250cy5nZXQoaGFzaCkuZ2V0KCk7CiAgICAgICAgIGlmICghc2VnbWVudGVk
Rm9udEZhY2UpIHsKLSAgICAgICAgICAgIHNlZ21lbnRlZEZvbnRGYWNlID0gbmV3IENTU1NlZ21l
bnRlZEZvbnRGYWNlKHRoaXMpOwotICAgICAgICAgICAgbV9mb250cy5zZXQoaGFzaCwgc2VnbWVu
dGVkRm9udEZhY2UpOworICAgICAgICAgICAgUmVmUHRyPENTU1NlZ21lbnRlZEZvbnRGYWNlPiBu
ZXdGYWNlID0gQ1NTU2VnbWVudGVkRm9udEZhY2U6OmNyZWF0ZSh0aGlzKTsKKyAgICAgICAgICAg
IHNlZ21lbnRlZEZvbnRGYWNlID0gbmV3RmFjZS5nZXQoKTsKKyAgICAgICAgICAgIG1fZm9udHMu
c2V0KGhhc2gsIG5ld0ZhY2UucmVsZWFzZSgpKTsKICAgICAgICAgfQogICAgICAgICBpZiAocmFu
Z2VMaXN0KSB7CiAgICAgICAgICAgICAvLyBBIGxvY2FsIGZvbnQgbWF0Y2hpbmcgdGhlIGZvbnQg
ZGVzY3JpcHRpb24gc2hvdWxkIGNvbWUgZmlyc3QsIHNvIHRoYXQgaXQgZ2V0cyB1c2VkIGZvcgog
ICAgICAgICAgICAgLy8gYW55IGNoYXJhY3RlciBub3Qgb3ZlcmxhaWQgYnkgZXhwbGljaXQgQGZv
bnQtZmFjZSBydWxlcyBmb3IgdGhlIGZhbWlseS4KICAgICAgICAgICAgIGlmICghc2VnbWVudGVk
Rm9udEZhY2UtPm51bVJhbmdlcygpICYmIEZvbnRDYWNoZTo6Zm9udEV4aXN0cyhmb250RGVzY3Jp
cHRpb24sIGZhbWlseU5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgQ1NTRm9udEZhY2UqIGltcGxp
Y2l0Rm9udEZhY2UgPSBuZXcgQ1NTRm9udEZhY2UoKTsKKyAgICAgICAgICAgICAgICBSZWZQdHI8
Q1NTRm9udEZhY2U+IGltcGxpY2l0Rm9udEZhY2UgPSBDU1NGb250RmFjZTo6Y3JlYXRlKCk7CiAg
ICAgICAgICAgICAgICAgaW1wbGljaXRGb250RmFjZS0+YWRkU291cmNlKG5ldyBDU1NGb250RmFj
ZVNvdXJjZShmYW1pbHlOYW1lKSk7CiAgICAgICAgICAgICAgICAgQVNTRVJUKGltcGxpY2l0Rm9u
dEZhY2UtPmlzVmFsaWQoKSk7Ci0gICAgICAgICAgICAgICAgc2VnbWVudGVkRm9udEZhY2UtPm92
ZXJsYXlSYW5nZSgwLCAweDdGRkZGRkZGLCBpbXBsaWNpdEZvbnRGYWNlKTsKKyAgICAgICAgICAg
ICAgICBzZWdtZW50ZWRGb250RmFjZS0+b3ZlcmxheVJhbmdlKDAsIDB4N0ZGRkZGRkYsIGltcGxp
Y2l0Rm9udEZhY2UucmVsZWFzZSgpKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgdW5z
aWduZWQgbnVtUmFuZ2VzID0gcmFuZ2VMaXN0LT5sZW5ndGgoKTsKQEAgLTI4Niw3ICsyODUsNyBA
QCB2b2lkIENTU0ZvbnRTZWxlY3Rvcjo6YWRkRm9udEZhY2VSdWxlKGNvCiAgICAgICAgICAgICAg
ICAgc2VnbWVudGVkRm9udEZhY2UtPm92ZXJsYXlSYW5nZShyYW5nZS0+ZnJvbSgpLCByYW5nZS0+
dG8oKSwgZm9udEZhY2UpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgIHNlZ21lbnRlZEZvbnRGYWNlLT5vdmVybGF5UmFuZ2UoMCwgMHg3RkZGRkZGRiwgZm9udEZh
Y2UpOworICAgICAgICAgICAgc2VnbWVudGVkRm9udEZhY2UtPm92ZXJsYXlSYW5nZSgwLCAweDdG
RkZGRkZGLCBmb250RmFjZS5yZWxlYXNlKCkpOwogICAgIH0KIH0KIApJbmRleDogV2ViQ29yZS9j
c3MvQ1NTUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3Bw
CShyZXZpc2lvbiAzNDM3NikKKysrIFdlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI0MjIsMTQgKzI0MjIsMTQgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlRGFzaGJv
YXJkUmVnaW9ucyhpbgogICAgICAgICByZXR1cm4gdmFsaWQ7CiAgICAgfQogICAgICAgICAKLSAg
ICBSZWZQdHI8RGFzaGJvYXJkUmVnaW9uPiBmaXJzdFJlZ2lvbiA9IG5ldyBEYXNoYm9hcmRSZWdp
b247CisgICAgUmVmUHRyPERhc2hib2FyZFJlZ2lvbj4gZmlyc3RSZWdpb24gPSBEYXNoYm9hcmRS
ZWdpb246OmNyZWF0ZSgpOwogICAgIERhc2hib2FyZFJlZ2lvbiogcmVnaW9uID0gMDsKIAogICAg
IHdoaWxlICh2YWx1ZSkgewogICAgICAgICBpZiAocmVnaW9uID09IDApIHsKICAgICAgICAgICAg
IHJlZ2lvbiA9IGZpcnN0UmVnaW9uLmdldCgpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgUmVmUHRyPERhc2hib2FyZFJlZ2lvbj4gbmV4dFJlZ2lvbiA9IG5ldyBEYXNoYm9hcmRSZWdp
b24oKTsKKyAgICAgICAgICAgIFJlZlB0cjxEYXNoYm9hcmRSZWdpb24+IG5leHRSZWdpb24gPSBE
YXNoYm9hcmRSZWdpb246OmNyZWF0ZSgpOwogICAgICAgICAgICAgcmVnaW9uLT5tX25leHQgPSBu
ZXh0UmVnaW9uOwogICAgICAgICAgICAgcmVnaW9uID0gbmV4dFJlZ2lvbi5nZXQoKTsKICAgICAg
ICAgfQpAQCAtMjU4NCw3ICsyNTg0LDcgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2Vy
OjpwYXJzZUNvdQogICAgICAgICBsaXN0U3R5bGUgPSBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUobHMs
IChDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzKSBpLT51bml0KTsKICAgICB9CiAKLSAgICBy
ZXR1cm4gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKG5ldyBDb3VudGVyKGlkZW50aWZpZXIucmVsZWFz
ZSgpLCBsaXN0U3R5bGUucmVsZWFzZSgpLCBzZXBhcmF0b3IucmVsZWFzZSgpKSk7CisgICAgcmV0
dXJuIG5ldyBDU1NQcmltaXRpdmVWYWx1ZShDb3VudGVyOjpjcmVhdGUoaWRlbnRpZmllci5yZWxl
YXNlKCksIGxpc3RTdHlsZS5yZWxlYXNlKCksIHNlcGFyYXRvci5yZWxlYXNlKCkpKTsKIH0KIAog
Ym9vbCBDU1NQYXJzZXI6OnBhcnNlU2hhcGUoaW50IHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCkBA
IC0yNTk3LDcgKzI1OTcsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VTaGFwZShpbnQgcHJvcElk
LCBiCiAgICAgLy8gcmVjdCh0LCByLCBiLCBsKSB8fCByZWN0KHQgciBiIGwpCiAgICAgaWYgKGFy
Z3MtPnNpemUoKSAhPSA0ICYmIGFyZ3MtPnNpemUoKSAhPSA3KQogICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgUmVjdCAqcmVjdCA9IG5ldyBSZWN0KCk7CisgICAgUmVmUHRyPFJlY3Q+IHJlY3Qg
PSBSZWN0OjpjcmVhdGUoKTsKICAgICBib29sIHZhbGlkID0gdHJ1ZTsKICAgICBpbnQgaSA9IDA7
CiAgICAgVmFsdWUgKmEgPSBhcmdzLT5jdXJyZW50KCk7CkBAIC0yNjI4LDExICsyNjI4LDEwIEBA
IGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVNoYXBlKGludCBwcm9wSWQsIGIKICAgICAgICAgaSsrOwog
ICAgIH0KICAgICBpZiAodmFsaWQpIHsKLSAgICAgICAgYWRkUHJvcGVydHkocHJvcElkLCBuZXcg
Q1NTUHJpbWl0aXZlVmFsdWUocmVjdCksIGltcG9ydGFudCk7CisgICAgICAgIGFkZFByb3BlcnR5
KHByb3BJZCwgbmV3IENTU1ByaW1pdGl2ZVZhbHVlKHJlY3QucmVsZWFzZSgpKSwgaW1wb3J0YW50
KTsKICAgICAgICAgdmFsdWVMaXN0LT5uZXh0KCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KLSAgICBkZWxldGUgcmVjdDsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTMzNTQsNyAr
MzM1Myw3IEBAIHN0cnVjdCBCb3JkZXJJbWFnZVBhcnNlQ29udGV4dAogICAgICAgICAgICAgIG1f
bGVmdCA9IG5ldyBDU1NQcmltaXRpdmVWYWx1ZShtX3JpZ2h0LT5nZXREb3VibGVWYWx1ZSgpLCAo
Q1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcyltX3JpZ2h0LT5wcmltaXRpdmVUeXBlKCkpOwog
ICAgICAgICAgICAgIAogICAgICAgICAvLyBOb3cgYnVpbGQgYSByZWN0IHZhbHVlIHRvIGhvbGQg
YWxsIGZvdXIgb2Ygb3VyIHByaW1pdGl2ZSB2YWx1ZXMuCi0gICAgICAgIFJlZlB0cjxSZWN0PiBy
ZWN0ID0gbmV3IFJlY3Q7CisgICAgICAgIFJlZlB0cjxSZWN0PiByZWN0ID0gUmVjdDo6Y3JlYXRl
KCk7CiAgICAgICAgIHJlY3QtPnNldFRvcChtX3RvcCk7CiAgICAgICAgIHJlY3QtPnNldFJpZ2h0
KG1fcmlnaHQpOwogICAgICAgICByZWN0LT5zZXRCb3R0b20obV9ib3R0b20pOwpJbmRleDogV2Vi
Q29yZS9jc3MvQ1NTU2VnbWVudGVkRm9udEZhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
Y3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNlLmNwcAkocmV2aXNpb24gMzQzNzYpCisrKyBXZWJDb3Jl
L2Nzcy9DU1NTZWdtZW50ZWRGb250RmFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDggKzM1
LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogQ1NTU2VnbWVudGVkRm9udEZhY2U6OkNTU1Nl
Z21lbnRlZEZvbnRGYWNlKENTU0ZvbnRTZWxlY3RvciogZm9udFNlbGVjdG9yKQotICAgIDogUmVm
Q291bnRlZDxDU1NTZWdtZW50ZWRGb250RmFjZT4oMCkKLSAgICAsIG1fZm9udFNlbGVjdG9yKGZv
bnRTZWxlY3RvcikKKyAgICA6IG1fZm9udFNlbGVjdG9yKGZvbnRTZWxlY3RvcikKIHsKIH0KIApJ
bmRleDogV2ViQ29yZS9jc3MvQ1NTU2VnbWVudGVkRm9udEZhY2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2Nzcy9DU1NTZWdtZW50ZWRGb250RmFjZS5oCShyZXZpc2lvbiAzNDM3NikKKysrIFdl
YkNvcmUvY3NzL0NTU1NlZ21lbnRlZEZvbnRGYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDcg
KzYwLDcgQEAgcHJpdmF0ZToKIAogY2xhc3MgQ1NTU2VnbWVudGVkRm9udEZhY2UgOiBwdWJsaWMg
UmVmQ291bnRlZDxDU1NTZWdtZW50ZWRGb250RmFjZT4gewogcHVibGljOgotICAgIENTU1NlZ21l
bnRlZEZvbnRGYWNlKENTU0ZvbnRTZWxlY3RvciopOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPENT
U1NlZ21lbnRlZEZvbnRGYWNlPiBjcmVhdGUoQ1NTRm9udFNlbGVjdG9yKiBzZWxlY3RvcikgeyBy
ZXR1cm4gYWRvcHRSZWYobmV3IENTU1NlZ21lbnRlZEZvbnRGYWNlKHNlbGVjdG9yKSk7IH0KICAg
ICB+Q1NTU2VnbWVudGVkRm9udEZhY2UoKTsKIAogICAgIGJvb2wgaXNMb2FkZWQoKSBjb25zdDsK
QEAgLTc1LDYgKzc1LDggQEAgcHVibGljOgogICAgIEZvbnREYXRhKiBnZXRGb250RGF0YShjb25z
dCBGb250RGVzY3JpcHRpb24mLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljSXRh
bGljKTsKIAogcHJpdmF0ZToKKyAgICBDU1NTZWdtZW50ZWRGb250RmFjZShDU1NGb250U2VsZWN0
b3IqKTsKKwogICAgIHZvaWQgcHJ1bmVUYWJsZSgpOwogCiAgICAgQ1NTRm9udFNlbGVjdG9yKiBt
X2ZvbnRTZWxlY3RvcjsKSW5kZXg6IFdlYkNvcmUvY3NzL0NvdW50ZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2Nzcy9Db3VudGVyLmgJKHJldmlzaW9uIDM0Mzc2KQorKysgV2ViQ29yZS9jc3Mv
Q291bnRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDggKzEsNiBAQAogLyoKLSAqIFRoaXMgZmls
ZSBpcyBwYXJ0IG9mIHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9yIEtERS4KLSAqCiAgKiAoQykg
MTk5OS0yMDAzIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNSwgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKQEAgLTI1LDE5ICsyMywxNCBAQAogCiAjaW5jbHVkZSAiQ1NTUHJpbWl0
aXZlVmFsdWUuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgotI2luY2x1ZGUgPHd0Zi9S
ZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBjbGFzcyBDb3VudGVyIDogcHVibGljIFJlZkNvdW50ZWQ8Q291bnRlcj4gewog
cHVibGljOgotICAgIENvdW50ZXIoUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gaWRlbnRp
ZmllciwgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbGlzdFN0eWxlLCBQYXNzUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiBzZXBhcmF0b3IpCi0gICAgICAgIDogUmVmQ291bnRlZDxDb3Vu
dGVyPigwKQotICAgICAgICAsIG1faWRlbnRpZmllcihpZGVudGlmaWVyKQotICAgICAgICAsIG1f
bGlzdFN0eWxlKGxpc3RTdHlsZSkKLSAgICAgICAgLCBtX3NlcGFyYXRvcihzZXBhcmF0b3IpCisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8Q291bnRlcj4gY3JlYXRlKFBhc3NSZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+IGlkZW50aWZpZXIsIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGxpc3RT
dHlsZSwgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gc2VwYXJhdG9yKQogICAgIHsKKyAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDb3VudGVyKGlkZW50aWZpZXIsIGxpc3RTdHlsZSwg
c2VwYXJhdG9yKSk7CiAgICAgfQogCiAgICAgU3RyaW5nIGlkZW50aWZpZXIoKSBjb25zdCB7IHJl
dHVybiBtX2lkZW50aWZpZXIgPyBtX2lkZW50aWZpZXItPmdldFN0cmluZ1ZhbHVlKCkgOiBTdHJp
bmcoKTsgfQpAQCAtNTAsMTAgKzQzLDE3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldExpc3RTdHls
ZShQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBsaXN0U3R5bGUpIHsgbV9saXN0U3R5bGUg
PSBsaXN0U3R5bGU7IH0KICAgICB2b2lkIHNldFNlcGFyYXRvcihQYXNzUmVmUHRyPENTU1ByaW1p
dGl2ZVZhbHVlPiBzZXBhcmF0b3IpIHsgbV9zZXBhcmF0b3IgPSBzZXBhcmF0b3I7IH0KIAotcHJv
dGVjdGVkOgotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbV9pZGVudGlmaWVyOyAvLyBT
dHJpbmcKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IG1fbGlzdFN0eWxlOyAgLy8gaW50
Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBtX3NlcGFyYXRvcjsgIC8vIFN0cmluZwor
cHJpdmF0ZToKKyAgICBDb3VudGVyKFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGlkZW50
aWZpZXIsIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGxpc3RTdHlsZSwgUGFzc1JlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4gc2VwYXJhdG9yKQorICAgICAgICA6IG1faWRlbnRpZmllcihp
ZGVudGlmaWVyKQorICAgICAgICAsIG1fbGlzdFN0eWxlKGxpc3RTdHlsZSkKKyAgICAgICAgLCBt
X3NlcGFyYXRvcihzZXBhcmF0b3IpCisgICAgeworICAgIH0KKworICAgIFJlZlB0cjxDU1NQcmlt
aXRpdmVWYWx1ZT4gbV9pZGVudGlmaWVyOyAvLyBzdHJpbmcKKyAgICBSZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+IG1fbGlzdFN0eWxlOyAvLyBpbnQKKyAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFs
dWU+IG1fc2VwYXJhdG9yOyAvLyBzdHJpbmcKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFdlYkNvcmUvY3NzL0Rhc2hib2FyZFJlZ2lvbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvY3NzL0Rhc2hib2FyZFJlZ2lvbi5oCShyZXZpc2lvbiAzNDM3NikKKysrIFdlYkNvcmUvY3Nz
L0Rhc2hib2FyZFJlZ2lvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAq
IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9yIEtERS4KLSAq
CiAgKiAoQykgMTk5OS0yMDAzIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KICAqCkBAIC0yMywy
NSArMjEsMjggQEAKICNpZm5kZWYgRGFzaGJvYXJkUmVnaW9uX2gKICNkZWZpbmUgRGFzaGJvYXJk
UmVnaW9uX2gKIAotI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorI2luY2x1ZGUgIlJlY3QuaCIK
IAogI2lmIEVOQUJMRShEQVNIQk9BUkRfU1VQUE9SVCkKLSNpbmNsdWRlICJSZWN0LmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRGFzaGJvYXJkUmVnaW9uIDogcHVibGljIFJlY3Qg
ewogcHVibGljOgotICAgIERhc2hib2FyZFJlZ2lvbigpIDogbV9pc0NpcmNsZSgwKSwgbV9pc1Jl
Y3RhbmdsZSgwKSB7IH0KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxEYXNoYm9hcmRSZWdpb24+IGNy
ZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBEYXNoYm9hcmRSZWdpb24pOyB9CiAKICAgICBS
ZWZQdHI8RGFzaGJvYXJkUmVnaW9uPiBtX25leHQ7CiAgICAgU3RyaW5nIG1fbGFiZWw7CiAgICAg
U3RyaW5nIG1fZ2VvbWV0cnlUeXBlOwogICAgIGJvb2wgbV9pc0NpcmNsZSA6IDE7CiAgICAgYm9v
bCBtX2lzUmVjdGFuZ2xlIDogMTsKKworcHJpdmF0ZToKKyAgICBEYXNoYm9hcmRSZWdpb24oKSA6
IG1faXNDaXJjbGUoZmFsc2UpLCBtX2lzUmVjdGFuZ2xlKGZhbHNlKSB7IH0KIH07CiAKIH0gLy8g
bmFtZXNwYWNlCisKICNlbmRpZgogCiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvY3NzL1JlY3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9SZWN0LmgJKHJldmlzaW9uIDM0Mzc2KQorKysgV2Vi
Q29yZS9jc3MvUmVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENv
cHlyaWdodCAoQykgMTk5OS0yMDAzIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjIs
MTYgKzIyLDEzIEBACiAjZGVmaW5lIFJlY3RfaAogCiAjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFs
dWUuaCIKLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
ICAgICBjbGFzcyBSZWN0IDogcHVibGljIFJlZkNvdW50ZWQ8UmVjdD4gewogICAgIHB1YmxpYzoK
LSAgICAgICAgUmVjdCgpIDogUmVmQ291bnRlZDxSZWN0PigwKSB7IH0KLSAgICAgICAgdmlydHVh
bCB+UmVjdCgpIHsgfQorICAgICAgICBzdGF0aWMgUmVmUHRyPFJlY3Q+IGNyZWF0ZSgpIHsgcmV0
dXJuIGFkb3B0UmVmKG5ldyBSZWN0KTsgfQogCiAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiB0
b3AoKSBjb25zdCB7IHJldHVybiBtX3RvcC5nZXQoKTsgfQogICAgICAgICBDU1NQcmltaXRpdmVW
YWx1ZSogcmlnaHQoKSBjb25zdCB7IHJldHVybiBtX3JpZ2h0LmdldCgpOyB9CkBAIC00Myw2ICs0
MCw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBzZXRCb3R0b20oUGFzc1Jl
ZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gYm90dG9tKSB7IG1fYm90dG9tID0gYm90dG9tOyB9CiAg
ICAgICAgIHZvaWQgc2V0TGVmdChQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBsZWZ0KSB7
IG1fbGVmdCA9IGxlZnQ7IH0KIAorICAgIHByb3RlY3RlZDoKKyAgICAgICAgUmVjdCgpIHsgfQor
CiAgICAgcHJpdmF0ZToKICAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBtX3RvcDsK
ICAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBtX3JpZ2h0OwpJbmRleDogV2ViQ29y
ZS9kb20vQ2hpbGROb2RlTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0NoaWxkTm9k
ZUxpc3QuaAkocmV2aXNpb24gMzQzNzYpCisrKyBXZWJDb3JlL2RvbS9DaGlsZE5vZGVMaXN0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI1LDE3ICsyNSwyMyBAQAogI2RlZmluZSBDaGlsZE5vZGVMaXN0
X2gKIAogI2luY2x1ZGUgIkR5bmFtaWNOb2RlTGlzdC5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIENoaWxkTm9kZUxpc3Qg
OiBwdWJsaWMgRHluYW1pY05vZGVMaXN0IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIENoaWxkTm9k
ZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwgRHluYW1pY05vZGVMaXN0OjpDYWNoZXMq
KTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2hpbGROb2RlTGlzdD4gY3JlYXRlKFBhc3NS
ZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIENhY2hlcyogY2FjaGVzKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENoaWxkTm9kZUxpc3Qocm9vdE5vZGUsIGNhY2hlcykp
OworICAgICAgICB9CiAKICAgICAgICAgdmlydHVhbCB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdDsK
ICAgICAgICAgdmlydHVhbCBOb2RlKiBpdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdDsKIAogICAg
IHByb3RlY3RlZDoKKyAgICAgICAgQ2hpbGROb2RlTGlzdChQYXNzUmVmUHRyPE5vZGU+IHJvb3RO
b2RlLCBDYWNoZXMqKTsKKwogICAgICAgICB2aXJ0dWFsIGJvb2wgbm9kZU1hdGNoZXMoTm9kZSop
IGNvbnN0OwogICAgIH07CiAKSW5kZXg6IFdlYkNvcmUvZG9tL0NsYXNzTm9kZUxpc3QuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9DbGFzc05vZGVMaXN0LmgJKHJldmlzaW9uIDM0Mzc2KQor
KysgV2ViQ29yZS9kb20vQ2xhc3NOb2RlTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw5ICsz
NywxNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBDbGFzc05vZGVMaXN0IDog
cHVibGljIER5bmFtaWNOb2RlTGlzdCB7CiAgICAgcHVibGljOgotICAgICAgICBDbGFzc05vZGVM
aXN0KFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIGNvbnN0IFN0cmluZyYgY2xhc3NOYW1lcywg
RHluYW1pY05vZGVMaXN0OjpDYWNoZXMqKTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2xh
c3NOb2RlTGlzdD4gY3JlYXRlKFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIGNvbnN0IFN0cmlu
ZyYgY2xhc3NOYW1lcywgQ2FjaGVzKiBjYWNoZXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgQ2xhc3NOb2RlTGlzdChyb290Tm9kZSwgY2xhc3NOYW1lcywgY2Fj
aGVzKSk7CisgICAgICAgIH0KIAogICAgIHByaXZhdGU6CisgICAgICAgIENsYXNzTm9kZUxpc3Qo
UGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwgY29uc3QgU3RyaW5nJiBjbGFzc05hbWVzLCBDYWNo
ZXMqKTsKKwogICAgICAgICB2aXJ0dWFsIGJvb2wgbm9kZU1hdGNoZXMoTm9kZSopIGNvbnN0Owog
CiAgICAgICAgIENsYXNzTmFtZXMgbV9jbGFzc05hbWVzOwpJbmRleDogV2ViQ29yZS9kb20vQ2xp
cGJvYXJkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vQ2xpcGJvYXJkLmgJKHJldmlzaW9u
IDM0Mzc2KQorKysgV2ViQ29yZS9kb20vQ2xpcGJvYXJkLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
MTAgKzEsOCBAQAogLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00gaW1wbGVtZW50
YXRpb24gZm9yIEtERS4KLSAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBt
a0Bwb3N0LmNvbSkKICAqIENvcHlyaWdodCAoQykgMjAwMSBUb2JpYXMgQW50b24gKGFudG9uQHN0
dWQuZmJpLmZoLWRhcm1zdGFkdC5kZSkKICAqIENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2Vp
bmlnIChzYW0ud2VpbmlnQGdtYWlsLmNvbSkKLSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwg
MjAwNSwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDAzLCAy
MDA0LCAyMDA1LCAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwpAQCAtMjYsMjkgKzI0LDE3IEBACiAjaWZuZGVmIENsaXBib2FyZF9o
CiAjZGVmaW5lIENsaXBib2FyZF9oCiAKLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1
ZGUgIkF0b21pY1N0cmluZy5oIgogI2luY2x1ZGUgIkNsaXBib2FyZEFjY2Vzc1BvbGljeS5oIgog
I2luY2x1ZGUgIkRyYWdBY3Rpb25zLmgiCiAjaW5jbHVkZSAiRHJhZ0ltYWdlLmgiCiAjaW5jbHVk
ZSAiSW50UG9pbnQuaCIKICNpbmNsdWRlICJOb2RlLmgiCi0jaW5jbHVkZSA8d3RmL1JlZkNvdW50
ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAgY2xhc3MgQ2FjaGVkSW1hZ2U7Ci0g
ICAgY2xhc3MgRWxlbWVudDsKLSAgICBjbGFzcyBGcmFtZTsKLSAgICBjbGFzcyBJbWFnZTsKLSAg
ICBjbGFzcyBLVVJMOwotICAgIGNsYXNzIFJhbmdlOwotICAgIGNsYXNzIFN0cmluZzsKLQogICAg
IC8vIFN0YXRlIGF2YWlsYWJsZSBkdXJpbmcgSUUncyBldmVudHMgZm9yIGRyYWcgYW5kIGRyb3Ag
YW5kIGNvcHkvcGFzdGUKICAgICBjbGFzcyBDbGlwYm9hcmQgOiBwdWJsaWMgUmVmQ291bnRlZDxD
bGlwYm9hcmQ+IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIENsaXBib2FyZChDbGlwYm9hcmRBY2Nl
c3NQb2xpY3kgcG9saWN5LCBib29sIGlzRm9yRHJhZ2dpbmcpOwogICAgICAgICB2aXJ0dWFsIH5D
bGlwYm9hcmQoKSB7IH0KIAogICAgICAgICAvLyBJcyB0aGlzIG9wZXJhdGlvbiBhIGRyYWctZHJv
cCBvciBhIGNvcHktcGFzdGU/CkBAIC03Myw4ICs1OSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgTm9kZSogZHJhZ0ltYWdlRWxlbWVudCgpIHsgcmV0dXJuIG1fZHJhZ0ltYWdlRWxl
bWVudC5nZXQoKTsgfQogICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0RHJhZ0ltYWdlRWxlbWVudChO
b2RlKiwgY29uc3QgSW50UG9pbnQmKSA9IDA7CiAgICAgICAgIAotICAgICAgICAvL1Byb3ZpZGVz
IHRoZSBET00gc3BlY2lmaWVkIAotICAgICAgICB2aXJ0dWFsIERyYWdJbWFnZVJlZiBjcmVhdGVE
cmFnSW1hZ2UoSW50UG9pbnQmIGRyYWdMb2MpIGNvbnN0ID0gMDsKKyAgICAgICAgdmlydHVhbCBE
cmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlKEludFBvaW50JiBkcmFnTG9jYXRpb24pIGNvbnN0
ID0gMDsKICAgICAgICAgdmlydHVhbCB2b2lkIGRlY2xhcmVBbmRXcml0ZURyYWdJbWFnZShFbGVt
ZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYgdGl0bGUsIEZyYW1lKikgPSAwOwogICAg
ICAgICB2aXJ0dWFsIHZvaWQgd3JpdGVVUkwoY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYsIEZy
YW1lKikgPSAwOwogICAgICAgICB2aXJ0dWFsIHZvaWQgd3JpdGVSYW5nZShSYW5nZSosIEZyYW1l
KikgPSAwOwpAQCAtOTEsNiArNzYsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZv
aWQgc2V0RHJhZ0hhc1N0YXJ0ZWQoKSB7IG1fZHJhZ1N0YXJ0ZWQgPSB0cnVlOyB9CiAgICAgICAg
IAogICAgIHByb3RlY3RlZDoKKyAgICAgICAgQ2xpcGJvYXJkKENsaXBib2FyZEFjY2Vzc1BvbGlj
eSwgYm9vbCBpc0ZvckRyYWdnaW5nKTsKKwogICAgICAgICBDbGlwYm9hcmRBY2Nlc3NQb2xpY3kg
cG9saWN5KCkgY29uc3QgeyByZXR1cm4gbV9wb2xpY3k7IH0KICAgICAgICAgYm9vbCBkcmFnU3Rh
cnRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZHJhZ1N0YXJ0ZWQ7IH0KICAgICAgICAgCkluZGV4OiBX
ZWJDb3JlL2RvbS9ET01Db3JlRXhjZXB0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20v
RE9NQ29yZUV4Y2VwdGlvbi5oCShyZXZpc2lvbiAzNDM3NikKKysrIFdlYkNvcmUvZG9tL0RPTUNv
cmVFeGNlcHRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsNiArMzUsMTIgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiAgICAgY2xhc3MgRE9NQ29yZUV4Y2VwdGlvbiA6IHB1YmxpYyBFeGNlcHRpb25C
YXNlIHsKICAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPERPTUNvcmVFeGNl
cHRpb24+IGNyZWF0ZShjb25zdCBFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9u
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IERPTUNvcmVFeGNl
cHRpb24oZGVzY3JpcHRpb24pKTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKICAgICAgICAg
RE9NQ29yZUV4Y2VwdGlvbihjb25zdCBFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24mIGRlc2NyaXB0
aW9uKQogICAgICAgICAgICAgOiBFeGNlcHRpb25CYXNlKGRlc2NyaXB0aW9uKQogICAgICAgICB7
CkluZGV4OiBXZWJDb3JlL2RvbS9ET01JbXBsZW1lbnRhdGlvbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9kb20vRE9NSW1wbGVtZW50YXRpb24uY3BwCShyZXZpc2lvbiAzNDM3NikKKysrIFdl
YkNvcmUvZG9tL0RPTUltcGxlbWVudGF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcxLDgg
KzI3MSw4IEBAIFBhc3NSZWZQdHI8SFRNTERvY3VtZW50PiBET01JbXBsZW1lbnRhdGkKIAogRE9N
SW1wbGVtZW50YXRpb24qIERPTUltcGxlbWVudGF0aW9uOjppbnN0YW5jZSgpCiB7Ci0gICAgc3Rh
dGljIFJlZlB0cjxET01JbXBsZW1lbnRhdGlvbj4gaSA9IG5ldyBET01JbXBsZW1lbnRhdGlvbjsK
LSAgICByZXR1cm4gaS5nZXQoKTsKKyAgICBzdGF0aWMgRE9NSW1wbGVtZW50YXRpb24qIHN0YXRp
Y0luc3RhbmNlID0gbmV3IERPTUltcGxlbWVudGF0aW9uOworICAgIHJldHVybiBzdGF0aWNJbnN0
YW5jZTsKIH0KIAogYm9vbCBET01JbXBsZW1lbnRhdGlvbjo6aXNYTUxNSU1FVHlwZShjb25zdCBT
dHJpbmcmIG1pbWVUeXBlKQpJbmRleDogV2ViQ29yZS9kb20vRE9NSW1wbGVtZW50YXRpb24uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9ET01JbXBsZW1lbnRhdGlvbi5oCShyZXZpc2lvbiAz
NDM3NikKKysrIFdlYkNvcmUvZG9tL0RPTUltcGxlbWVudGF0aW9uLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsMTAgKzEsOCBAQAogLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00gaW1w
bGVtZW50YXRpb24gZm9yIEtERS4KLSAqCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9s
bCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAo
a29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11
ZWxsZXJAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiBBcHBsZSBD
b21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtNDIs
OCArNDAsNyBAQCB0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwogCiBjbGFzcyBET01JbXBsZW1l
bnRhdGlvbiA6IHB1YmxpYyBSZWZDb3VudGVkPERPTUltcGxlbWVudGF0aW9uPiB7CiBwdWJsaWM6
Ci0gICAgRE9NSW1wbGVtZW50YXRpb24oKSA6IFJlZkNvdW50ZWQ8RE9NSW1wbGVtZW50YXRpb24+
KDApIHsgfQotICAgIHZpcnR1YWwgfkRPTUltcGxlbWVudGF0aW9uKCk7CisgICAgfkRPTUltcGxl
bWVudGF0aW9uKCk7CiAKICAgICAvLyBET00gbWV0aG9kcyAmIGF0dHJpYnV0ZXMgZm9yIERPTUlt
cGxlbWVudGF0aW9uCiAgICAgYm9vbCBoYXNGZWF0dXJlKGNvbnN0IFN0cmluZyYgZmVhdHVyZSwg
Y29uc3QgU3RyaW5nJiB2ZXJzaW9uKSBjb25zdDsKQEAgLTY5LDYgKzY2LDkgQEAgcHVibGljOgog
CiAgICAgc3RhdGljIGJvb2wgaXNYTUxNSU1FVHlwZShjb25zdCBTdHJpbmcmIE1JTUVUeXBlKTsK
ICAgICBzdGF0aWMgYm9vbCBpc1RleHRNSU1FVHlwZShjb25zdCBTdHJpbmcmIE1JTUVUeXBlKTsK
KworcHJpdmF0ZToKKyAgICBET01JbXBsZW1lbnRhdGlvbigpIHsgfQogfTsKIAogfSAvL25hbWVz
cGFjZQpJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gMzQzNzYpCisrKyBXZWJDb3JlL2RvbS9Eb2N1
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2NTcsMjIgKzI2NTcsMjMgQEAgdm9pZCBEb2N1
bWVudDo6YWRkV2luZG93RXZlbnRMaXN0ZW5lcihjbwogICAgIC8vIFJlbW92ZSBleGlzdGluZyBp
ZGVudGljYWwgbGlzdGVuZXIgc2V0IHdpdGggaWRlbnRpY2FsIGFyZ3VtZW50cy4KICAgICAvLyBU
aGUgRE9NIDIgc3BlYyBzYXlzIHRoYXQgImR1cGxpY2F0ZSBpbnN0YW5jZXMgYXJlIGRpc2NhcmRl
ZCIgaW4gdGhpcyBjYXNlLgogICAgIHJlbW92ZVdpbmRvd0V2ZW50TGlzdGVuZXIoZXZlbnRUeXBl
LCBsaXN0ZW5lci5nZXQoKSwgdXNlQ2FwdHVyZSk7Ci0gICAgbV93aW5kb3dFdmVudExpc3RlbmVy
cy5hcHBlbmQobmV3IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgbGlzdGVuZXIs
IHVzZUNhcHR1cmUpKTsKKyAgICBtX3dpbmRvd0V2ZW50TGlzdGVuZXJzLmFwcGVuZChSZWdpc3Rl
cmVkRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKGV2ZW50VHlwZSwgbGlzdGVuZXIsIHVzZUNhcHR1cmUp
KTsKIH0KIAotdm9pZCBEb2N1bWVudDo6cmVtb3ZlV2luZG93RXZlbnRMaXN0ZW5lcihjb25zdCBB
dG9taWNTdHJpbmcgJmV2ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciAqbGlzdGVuZXIsIGJvb2wgdXNl
Q2FwdHVyZSkKK3ZvaWQgRG9jdW1lbnQ6OnJlbW92ZVdpbmRvd0V2ZW50TGlzdGVuZXIoY29uc3Qg
QXRvbWljU3RyaW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyLCBib29sIHVz
ZUNhcHR1cmUpCiB7Ci0gICAgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIgcmwoZXZlbnRUeXBlLCBs
aXN0ZW5lciwgdXNlQ2FwdHVyZSk7CiAgICAgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXJMaXN0Ojpp
dGVyYXRvciBpdCA9IG1fd2luZG93RXZlbnRMaXN0ZW5lcnMuYmVnaW4oKTsKLSAgICBmb3IgKDsg
aXQgIT0gbV93aW5kb3dFdmVudExpc3RlbmVycy5lbmQoKTsgKytpdCkKLSAgICAgICAgaWYgKCoo
Kml0KSA9PSBybCkgewotICAgICAgICAgICAgaWYgKGV2ZW50VHlwZSA9PSAoKEF0b21pY1N0cmlu
Zyl1bmxvYWRFdmVudCkpCisgICAgZm9yICg7IGl0ICE9IG1fd2luZG93RXZlbnRMaXN0ZW5lcnMu
ZW5kKCk7ICsraXQpIHsKKyAgICAgICAgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXImIHIgPSAqKml0
OworICAgICAgICBpZiAoci5ldmVudFR5cGUoKSA9PSBldmVudFR5cGUgJiYgci5saXN0ZW5lcigp
ID09IGxpc3RlbmVyICYmIHIudXNlQ2FwdHVyZSgpID09IHVzZUNhcHR1cmUpIHsKKyAgICAgICAg
ICAgIGlmIChldmVudFR5cGUgPT0gdW5sb2FkRXZlbnQpCiAgICAgICAgICAgICAgICAgcmVtb3Zl
UGVuZGluZ0ZyYW1lVW5sb2FkRXZlbnRDb3VudCgpOwotICAgICAgICAgICAgZWxzZSBpZiAoZXZl
bnRUeXBlID09ICgoQXRvbWljU3RyaW5nKWJlZm9yZXVubG9hZEV2ZW50KSkKKyAgICAgICAgICAg
IGVsc2UgaWYgKGV2ZW50VHlwZSA9PSBiZWZvcmV1bmxvYWRFdmVudCkKICAgICAgICAgICAgICAg
ICByZW1vdmVQZW5kaW5nRnJhbWVCZWZvcmVVbmxvYWRFdmVudENvdW50KCk7CiAgICAgICAgICAg
ICBtX3dpbmRvd0V2ZW50TGlzdGVuZXJzLnJlbW92ZShpdCk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KKyAgICB9CiB9CiAKIGJvb2wgRG9jdW1lbnQ6Omhhc1dpbmRvd0V2ZW50TGlz
dGVuZXIoY29uc3QgQXRvbWljU3RyaW5nICZldmVudFR5cGUpCkBAIC0yOTg2LDcgKzI5ODcsNyBA
QCBIVE1MTWFwRWxlbWVudCAqRG9jdW1lbnQ6OmdldEltYWdlTWFwKGNvCiAgICAgcmV0dXJuIG1f
aW1hZ2VNYXBzQnlOYW1lLmdldChtYXBOYW1lLmltcGwoKSk7CiB9CiAKLXZvaWQgRG9jdW1lbnQ6
OnNldERlY29kZXIoVGV4dFJlc291cmNlRGVjb2RlciAqZGVjb2RlcikKK3ZvaWQgRG9jdW1lbnQ6
OnNldERlY29kZXIoUGFzc1JlZlB0cjxUZXh0UmVzb3VyY2VEZWNvZGVyPiBkZWNvZGVyKQogewog
ICAgIG1fZGVjb2RlciA9IGRlY29kZXI7CiB9CkBAIC0zNjQxLDYzICszNjQyLDYzIEBAIFNWR0Rv
Y3VtZW50RXh0ZW5zaW9ucyogRG9jdW1lbnQ6OmFjY2Vzc1MKIAogUGFzc1JlZlB0cjxIVE1MQ29s
bGVjdGlvbj4gRG9jdW1lbnQ6OmltYWdlcygpCiB7Ci0gICAgcmV0dXJuIG5ldyBIVE1MQ29sbGVj
dGlvbih0aGlzLCBIVE1MQ29sbGVjdGlvbjo6RG9jSW1hZ2VzKTsKKyAgICByZXR1cm4gSFRNTENv
bGxlY3Rpb246OmNyZWF0ZSh0aGlzLCBIVE1MQ29sbGVjdGlvbjo6RG9jSW1hZ2VzKTsKIH0KIAog
UGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4gRG9jdW1lbnQ6OmFwcGxldHMoKQogewotICAgIHJl
dHVybiBuZXcgSFRNTENvbGxlY3Rpb24odGhpcywgSFRNTENvbGxlY3Rpb246OkRvY0FwcGxldHMp
OworICAgIHJldHVybiBIVE1MQ29sbGVjdGlvbjo6Y3JlYXRlKHRoaXMsIEhUTUxDb2xsZWN0aW9u
OjpEb2NBcHBsZXRzKTsKIH0KIAogUGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4gRG9jdW1lbnQ6
OmVtYmVkcygpCiB7Ci0gICAgcmV0dXJuIG5ldyBIVE1MQ29sbGVjdGlvbih0aGlzLCBIVE1MQ29s
bGVjdGlvbjo6RG9jRW1iZWRzKTsKKyAgICByZXR1cm4gSFRNTENvbGxlY3Rpb246OmNyZWF0ZSh0
aGlzLCBIVE1MQ29sbGVjdGlvbjo6RG9jRW1iZWRzKTsKIH0KIAogUGFzc1JlZlB0cjxIVE1MQ29s
bGVjdGlvbj4gRG9jdW1lbnQ6OnBsdWdpbnMoKQogewogICAgIC8vIFRoaXMgaXMgYW4gYWxpYXMg
Zm9yIGVtYmVkcygpIHJlcXVpcmVkIGZvciB0aGUgSlMgRE9NIGJpbmRpbmdzLgotICAgIHJldHVy
biBuZXcgSFRNTENvbGxlY3Rpb24odGhpcywgSFRNTENvbGxlY3Rpb246OkRvY0VtYmVkcyk7Cisg
ICAgcmV0dXJuIEhUTUxDb2xsZWN0aW9uOjpjcmVhdGUodGhpcywgSFRNTENvbGxlY3Rpb246OkRv
Y0VtYmVkcyk7CiB9CiAKIFBhc3NSZWZQdHI8SFRNTENvbGxlY3Rpb24+IERvY3VtZW50OjpvYmpl
Y3RzKCkKIHsKLSAgICByZXR1cm4gbmV3IEhUTUxDb2xsZWN0aW9uKHRoaXMsIEhUTUxDb2xsZWN0
aW9uOjpEb2NPYmplY3RzKTsKKyAgICByZXR1cm4gSFRNTENvbGxlY3Rpb246OmNyZWF0ZSh0aGlz
LCBIVE1MQ29sbGVjdGlvbjo6RG9jT2JqZWN0cyk7CiB9CiAKIFBhc3NSZWZQdHI8SFRNTENvbGxl
Y3Rpb24+IERvY3VtZW50OjpzY3JpcHRzKCkKIHsKLSAgICByZXR1cm4gbmV3IEhUTUxDb2xsZWN0
aW9uKHRoaXMsIEhUTUxDb2xsZWN0aW9uOjpEb2NTY3JpcHRzKTsKKyAgICByZXR1cm4gSFRNTENv
bGxlY3Rpb246OmNyZWF0ZSh0aGlzLCBIVE1MQ29sbGVjdGlvbjo6RG9jU2NyaXB0cyk7CiB9CiAK
IFBhc3NSZWZQdHI8SFRNTENvbGxlY3Rpb24+IERvY3VtZW50OjpsaW5rcygpCiB7Ci0gICAgcmV0
dXJuIG5ldyBIVE1MQ29sbGVjdGlvbih0aGlzLCBIVE1MQ29sbGVjdGlvbjo6RG9jTGlua3MpOwor
ICAgIHJldHVybiBIVE1MQ29sbGVjdGlvbjo6Y3JlYXRlKHRoaXMsIEhUTUxDb2xsZWN0aW9uOjpE
b2NMaW5rcyk7CiB9CiAKIFBhc3NSZWZQdHI8SFRNTENvbGxlY3Rpb24+IERvY3VtZW50Ojpmb3Jt
cygpCiB7Ci0gICAgcmV0dXJuIG5ldyBIVE1MQ29sbGVjdGlvbih0aGlzLCBIVE1MQ29sbGVjdGlv
bjo6RG9jRm9ybXMpOworICAgIHJldHVybiBIVE1MQ29sbGVjdGlvbjo6Y3JlYXRlKHRoaXMsIEhU
TUxDb2xsZWN0aW9uOjpEb2NGb3Jtcyk7CiB9CiAKIFBhc3NSZWZQdHI8SFRNTENvbGxlY3Rpb24+
IERvY3VtZW50OjphbmNob3JzKCkKIHsKLSAgICByZXR1cm4gbmV3IEhUTUxDb2xsZWN0aW9uKHRo
aXMsIEhUTUxDb2xsZWN0aW9uOjpEb2NBbmNob3JzKTsKKyAgICByZXR1cm4gSFRNTENvbGxlY3Rp
b246OmNyZWF0ZSh0aGlzLCBIVE1MQ29sbGVjdGlvbjo6RG9jQW5jaG9ycyk7CiB9CiAKIFBhc3NS
ZWZQdHI8SFRNTENvbGxlY3Rpb24+IERvY3VtZW50OjphbGwoKQogewotICAgIHJldHVybiBuZXcg
SFRNTENvbGxlY3Rpb24odGhpcywgSFRNTENvbGxlY3Rpb246OkRvY0FsbCk7CisgICAgcmV0dXJu
IEhUTUxDb2xsZWN0aW9uOjpjcmVhdGUodGhpcywgSFRNTENvbGxlY3Rpb246OkRvY0FsbCk7CiB9
CiAKIFBhc3NSZWZQdHI8SFRNTENvbGxlY3Rpb24+IERvY3VtZW50Ojp3aW5kb3dOYW1lZEl0ZW1z
KGNvbnN0IFN0cmluZyAmbmFtZSkKIHsKLSAgICByZXR1cm4gbmV3IEhUTUxOYW1lQ29sbGVjdGlv
bih0aGlzLCBIVE1MQ29sbGVjdGlvbjo6V2luZG93TmFtZWRJdGVtcywgbmFtZSk7CisgICAgcmV0
dXJuIEhUTUxOYW1lQ29sbGVjdGlvbjo6Y3JlYXRlKHRoaXMsIEhUTUxDb2xsZWN0aW9uOjpXaW5k
b3dOYW1lZEl0ZW1zLCBuYW1lKTsKIH0KIAogUGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4gRG9j
dW1lbnQ6OmRvY3VtZW50TmFtZWRJdGVtcyhjb25zdCBTdHJpbmcgJm5hbWUpCiB7Ci0gICAgcmV0
dXJuIG5ldyBIVE1MTmFtZUNvbGxlY3Rpb24odGhpcywgSFRNTENvbGxlY3Rpb246OkRvY3VtZW50
TmFtZWRJdGVtcywgbmFtZSk7CisgICAgcmV0dXJuIEhUTUxOYW1lQ29sbGVjdGlvbjo6Y3JlYXRl
KHRoaXMsIEhUTUxDb2xsZWN0aW9uOjpEb2N1bWVudE5hbWVkSXRlbXMsIG5hbWUpOwogfQogCiBI
VE1MQ29sbGVjdGlvbjo6Q29sbGVjdGlvbkluZm8qIERvY3VtZW50OjpuYW1lQ29sbGVjdGlvbklu
Zm8oSFRNTENvbGxlY3Rpb246OlR5cGUgdHlwZSwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKQpJ
bmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9E
b2N1bWVudC5oCShyZXZpc2lvbiAzNDM3NikKKysrIFdlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTg4NCw3ICs4ODQsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRTaG91
bGRDcmVhdGVSZW5kZXJlcnMoYm9vbCk7CiAgICAgYm9vbCBzaG91bGRDcmVhdGVSZW5kZXJlcnMo
KTsKICAgICAKLSAgICB2b2lkIHNldERlY29kZXIoVGV4dFJlc291cmNlRGVjb2RlciopOworICAg
IHZvaWQgc2V0RGVjb2RlcihQYXNzUmVmUHRyPFRleHRSZXNvdXJjZURlY29kZXI+KTsKICAgICBU
ZXh0UmVzb3VyY2VEZWNvZGVyKiBkZWNvZGVyKCkgY29uc3QgeyByZXR1cm4gbV9kZWNvZGVyLmdl
dCgpOyB9CiAKICAgICBVQ2hhciBiYWNrc2xhc2hBc0N1cnJlbmN5U3ltYm9sKCkgY29uc3Q7Cklu
ZGV4OiBXZWJDb3JlL2RvbS9EeW5hbWljTm9kZUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2RvbS9EeW5hbWljTm9kZUxpc3QuaAkocmV2aXNpb24gMzQzNzYpCisrKyBXZWJDb3JlL2RvbS9E
eW5hbWljTm9kZUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsOCArNDgsNiBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgICAgICB1bnNpZ25lZCByZWZDb3VudDsKICAgICAgICAgfTsK
IAotICAgICAgICBEeW5hbWljTm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSk7Ci0g
ICAgICAgIER5bmFtaWNOb2RlTGlzdChQYXNzUmVmUHRyPE5vZGU+IHJvb3ROb2RlLCBDYWNoZXMq
KTsKICAgICAgICAgdmlydHVhbCB+RHluYW1pY05vZGVMaXN0KCk7CiAKICAgICAgICAgYm9vbCBo
YXNPd25DYWNoZXMoKSBjb25zdCB7IHJldHVybiBtX293bnNDYWNoZXM7IH0KQEAgLTYzLDYgKzYx
LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIGludmFsaWRhdGVDYWNoZSgp
OwogCiAgICAgcHJvdGVjdGVkOgorICAgICAgICBEeW5hbWljTm9kZUxpc3QoUGFzc1JlZlB0cjxO
b2RlPiByb290Tm9kZSk7CisgICAgICAgIER5bmFtaWNOb2RlTGlzdChQYXNzUmVmUHRyPE5vZGU+
IHJvb3ROb2RlLCBDYWNoZXMqKTsKKwogICAgICAgICB2aXJ0dWFsIGJvb2wgbm9kZU1hdGNoZXMo
Tm9kZSopIGNvbnN0ID0gMDsKIAogICAgICAgICBSZWZQdHI8Tm9kZT4gbV9yb290Tm9kZTsKSW5k
ZXg6IFdlYkNvcmUvZG9tL0V2ZW50RXhjZXB0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9k
b20vRXZlbnRFeGNlcHRpb24uaAkocmV2aXNpb24gMzQzNzYpCisrKyBXZWJDb3JlL2RvbS9FdmVu
dEV4Y2VwdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSw5ICszNSw5IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogICAgIGNsYXNzIEV2ZW50RXhjZXB0aW9uIDogcHVibGljIEV4Y2VwdGlvbkJhc2Ug
ewogICAgIHB1YmxpYzoKLSAgICAgICAgRXZlbnRFeGNlcHRpb24oY29uc3QgRXhjZXB0aW9uQ29k
ZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKLSAgICAgICAgICAgIDogRXhjZXB0aW9uQmFzZShk
ZXNjcmlwdGlvbikKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8RXZlbnRFeGNlcHRpb24+IGNy
ZWF0ZShjb25zdCBFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQogICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEV2ZW50RXhjZXB0aW9uKGRlc2Ny
aXB0aW9uKSk7CiAgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgY29uc3QgaW50IEV2ZW50RXhj
ZXB0aW9uT2Zmc2V0ID0gMTAwOwpAQCAtNDYsNiArNDYsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICBlbnVtIEV2ZW50RXhjZXB0aW9uQ29kZSB7CiAgICAgICAgICAgICBVTlNQRUNJ
RklFRF9FVkVOVF9UWVBFX0VSUiA9IEV2ZW50RXhjZXB0aW9uT2Zmc2V0CiAgICAgICAgIH07CisK
KyAgICBwcml2YXRlOgorICAgICAgICBFdmVudEV4Y2VwdGlvbihjb25zdCBFeGNlcHRpb25Db2Rl
RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQorICAgICAgICAgICAgOiBFeGNlcHRpb25CYXNlKGRl
c2NyaXB0aW9uKQorICAgICAgICB7CisgICAgICAgIH0KICAgICB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2RvbS9FdmVudExpc3RlbmVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9kb20vRXZlbnRMaXN0ZW5lci5oCShyZXZpc2lvbiAzNDM3NikKKysrIFdlYkNv
cmUvZG9tL0V2ZW50TGlzdGVuZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKQEAgLTI5LDcgKzI5LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAg
Y2xhc3MgRXZlbnRMaXN0ZW5lciA6IHB1YmxpYyBSZWZDb3VudGVkPEV2ZW50TGlzdGVuZXI+IHsK
ICAgICBwdWJsaWM6Ci0gICAgICAgIEV2ZW50TGlzdGVuZXIoKSA6IFJlZkNvdW50ZWQ8RXZlbnRM
aXN0ZW5lcj4oMCkgeyB9CiAgICAgICAgIHZpcnR1YWwgfkV2ZW50TGlzdGVuZXIoKSB7IH0KICAg
ICAgICAgdmlydHVhbCB2b2lkIGhhbmRsZUV2ZW50KEV2ZW50KiwgYm9vbCBpc1dpbmRvd0V2ZW50
ID0gZmFsc2UpID0gMDsKICAgICAgICAgdmlydHVhbCBib29sIGlzSFRNTEV2ZW50TGlzdGVuZXIo
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQpJbmRleDogV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmNwcAkocmV2aXNpb24g
MzQzNzYpCisrKyBXZWJDb3JlL2RvbS9FdmVudFRhcmdldC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEyNSw3ICsxMjUsNyBAQCB2b2lkIEV2ZW50VGFyZ2V0OjphZGRFdmVudExpc3RlbmVyKEV2ZW50
CiAgICAgaWYgKHJlZmVyZW5jZU5vZGUtPm1fcmVnZExpc3RlbmVycy0+aXNFbXB0eSgpICYmICFy
ZWZlcmVuY2VOb2RlLT5pbkRvY3VtZW50KCkpCiAgICAgICAgIHJlZmVyZW5jZU5vZGUtPmRvY3Vt
ZW50KCktPnJlZ2lzdGVyRGlzY29ubmVjdGVkTm9kZVdpdGhFdmVudExpc3RlbmVycyhyZWZlcmVu
Y2VOb2RlKTsKIAotICAgIHJlZmVyZW5jZU5vZGUtPm1fcmVnZExpc3RlbmVycy0+YXBwZW5kKG5l
dyBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGxpc3RlbmVyLmdldCgpLCB1c2VD
YXB0dXJlKSk7CisgICAgcmVmZXJlbmNlTm9kZS0+bV9yZWdkTGlzdGVuZXJzLT5hcHBlbmQoUmVn
aXN0ZXJlZEV2ZW50TGlzdGVuZXI6OmNyZWF0ZShldmVudFR5cGUsIGxpc3RlbmVyLmdldCgpLCB1
c2VDYXB0dXJlKSk7CiB9CiAKIHZvaWQgRXZlbnRUYXJnZXQ6OnJlbW92ZUV2ZW50TGlzdGVuZXIo
RXZlbnRUYXJnZXROb2RlKiByZWZlcmVuY2VOb2RlLCBjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50
VHlwZSwgRXZlbnRMaXN0ZW5lciogbGlzdGVuZXIsIGJvb2wgdXNlQ2FwdHVyZSkKQEAgLTEzNCwx
MSArMTM0LDEwIEBAIHZvaWQgRXZlbnRUYXJnZXQ6OnJlbW92ZUV2ZW50TGlzdGVuZXIoRXYKICAg
ICBpZiAoIXJlZmVyZW5jZU5vZGUtPm1fcmVnZExpc3RlbmVycykKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIgcmwoZXZlbnRUeXBlLCBsaXN0ZW5lciwgdXNl
Q2FwdHVyZSk7Ci0KICAgICBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lckxpc3Q6Okl0ZXJhdG9yIGVu
ZCA9IHJlZmVyZW5jZU5vZGUtPm1fcmVnZExpc3RlbmVycy0+ZW5kKCk7CiAgICAgZm9yIChSZWdp
c3RlcmVkRXZlbnRMaXN0ZW5lckxpc3Q6Okl0ZXJhdG9yIGl0ID0gcmVmZXJlbmNlTm9kZS0+bV9y
ZWdkTGlzdGVuZXJzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgIGlmICgq
KCppdCkuZ2V0KCkgPT0gcmwpIHsKKyAgICAgICAgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXImIHIg
PSAqKml0OworICAgICAgICBpZiAoci5ldmVudFR5cGUoKSA9PSBldmVudFR5cGUgJiYgci5saXN0
ZW5lcigpID09IGxpc3RlbmVyICYmIHIudXNlQ2FwdHVyZSgpID09IHVzZUNhcHR1cmUpIHsKICAg
ICAgICAgICAgICgqaXQpLT5zZXRSZW1vdmVkKHRydWUpOwogICAgICAgICAgICAgaXQgPSByZWZl
cmVuY2VOb2RlLT5tX3JlZ2RMaXN0ZW5lcnMtPnJlbW92ZShpdCk7CiAKSW5kZXg6IFdlYkNvcmUv
ZG9tL0V4Y2VwdGlvbkJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0V4Y2VwdGlv
bkJhc2UuY3BwCShyZXZpc2lvbiAzNDM3NikKKysrIFdlYkNvcmUvZG9tL0V4Y2VwdGlvbkJhc2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0zMiwxMyArMzIsMTIgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogRXhjZXB0aW9uQmFzZTo6RXhjZXB0aW9uQmFzZShjb25zdCBFeGNlcHRpb25Db2RlRGVzY3Jp
cHRpb24mIGRlc2NyaXB0aW9uKQotICAgIDogUmVmQ291bnRlZDxFeGNlcHRpb25CYXNlPigwKQor
ICAgIDogbV9jb2RlKGRlc2NyaXB0aW9uLmNvZGUpCisgICAgLCBtX25hbWUoZGVzY3JpcHRpb24u
bmFtZSkKIHsKLSAgICBtX2NvZGUgPSBkZXNjcmlwdGlvbi5jb2RlOwotICAgIGlmIChkZXNjcmlw
dGlvbi5uYW1lKSB7Ci0gICAgICAgIG1fbmFtZSA9IGRlc2NyaXB0aW9uLm5hbWU7CisgICAgaWYg
KGRlc2NyaXB0aW9uLm5hbWUpCiAgICAgICAgIG1fbWVzc2FnZSA9IFN0cmluZzo6Zm9ybWF0KCIl
czogJXMgRXhjZXB0aW9uICVkIiwgZGVzY3JpcHRpb24ubmFtZSwgZGVzY3JpcHRpb24udHlwZU5h
bWUsIGRlc2NyaXB0aW9uLmNvZGUpOwotICAgIH0gZWxzZQorICAgIGVsc2UKICAgICAgICAgbV9t
ZXNzYWdlID0gU3RyaW5nOjpmb3JtYXQoIiVzIEV4Y2VwdGlvbiAlZCIsIGRlc2NyaXB0aW9uLnR5
cGVOYW1lLCBkZXNjcmlwdGlvbi5jb2RlKTsKIH0KIApJbmRleDogV2ViQ29yZS9kb20vRXhjZXB0
aW9uQmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0V4Y2VwdGlvbkJhc2UuaAkocmV2
aXNpb24gMzQzNzYpCisrKyBXZWJDb3JlL2RvbS9FeGNlcHRpb25CYXNlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM3LDE0ICszNywxNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBF
eGNlcHRpb25CYXNlIDogcHVibGljIFJlZkNvdW50ZWQ8RXhjZXB0aW9uQmFzZT4gewogICAgIHB1
YmxpYzoKLSAgICAgICAgRXhjZXB0aW9uQmFzZShjb25zdCBFeGNlcHRpb25Db2RlRGVzY3JpcHRp
b24mKTsKLQogICAgICAgICB1bnNpZ25lZCBzaG9ydCBjb2RlKCkgY29uc3QgeyByZXR1cm4gbV9j
b2RlOyB9CiAgICAgICAgIFN0cmluZyBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9CiAg
ICAgICAgIFN0cmluZyBtZXNzYWdlKCkgY29uc3QgeyByZXR1cm4gbV9tZXNzYWdlOyB9CiAKICAg
ICAgICAgU3RyaW5nIHRvU3RyaW5nKCkgY29uc3Q7CiAKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAg
IEV4Y2VwdGlvbkJhc2UoY29uc3QgRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uJik7CisKICAgICBw
cml2YXRlOgogICAgICAgICB1bnNpZ25lZCBzaG9ydCBtX2NvZGU7CiAgICAgICAgIFN0cmluZyBt
X25hbWU7CkluZGV4OiBXZWJDb3JlL2RvbS9OYW1lTm9kZUxpc3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2RvbS9OYW1lTm9kZUxpc3QuaAkocmV2aXNpb24gMzQzNzYpCisrKyBXZWJDb3JlL2Rv
bS9OYW1lTm9kZUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMiw3ICsyLDcgQEAKICAqIENvcHly
aWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChD
KSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChD
KSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwN20gMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKQEAgLTI0LDggKzI0LDggQEAKICNpZm5kZWYgTmFtZU5vZGVMaXN0X2gK
ICNkZWZpbmUgTmFtZU5vZGVMaXN0X2gKIAotI2luY2x1ZGUgIkR5bmFtaWNOb2RlTGlzdC5oIgog
I2luY2x1ZGUgIkF0b21pY1N0cmluZy5oIgorI2luY2x1ZGUgIkR5bmFtaWNOb2RlTGlzdC5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM0LDkgKzM0LDE0IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAvLyBOb2RlTGlzdCB3aGljaCBsaXN0cyBhbGwgTm9kZXMgaW4gYSBFbGVtZW50
IHdpdGggYSBnaXZlbiAibmFtZSIgYXR0cmlidXRlCiAgICAgY2xhc3MgTmFtZU5vZGVMaXN0IDog
cHVibGljIER5bmFtaWNOb2RlTGlzdCB7CiAgICAgcHVibGljOgotICAgICAgICBOYW1lTm9kZUxp
c3QoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwgY29uc3QgU3RyaW5nJiBuYW1lLCBEeW5hbWlj
Tm9kZUxpc3Q6OkNhY2hlcyopOworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxOYW1lTm9kZUxp
c3Q+IGNyZWF0ZShQYXNzUmVmUHRyPE5vZGU+IHJvb3ROb2RlLCBjb25zdCBTdHJpbmcmIG5hbWUs
IENhY2hlcyogY2FjaGVzKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IE5hbWVOb2RlTGlzdChyb290Tm9kZSwgbmFtZSwgY2FjaGVzKSk7CisgICAgICAgIH0KIAog
ICAgIHByaXZhdGU6CisgICAgICAgIE5hbWVOb2RlTGlzdChQYXNzUmVmUHRyPE5vZGU+IHJvb3RO
b2RlLCBjb25zdCBTdHJpbmcmIG5hbWUsIENhY2hlcyopOworCiAgICAgICAgIHZpcnR1YWwgYm9v
bCBub2RlTWF0Y2hlcyhOb2RlKikgY29uc3Q7CiAKICAgICAgICAgQXRvbWljU3RyaW5nIG1fbm9k
ZU5hbWU7CkluZGV4OiBXZWJDb3JlL2RvbS9Ob2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2RvbS9Ob2RlLmNwcAkocmV2aXNpb24gMzQzNzYpCisrKyBXZWJDb3JlL2RvbS9Ob2RlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjEwLDcgKzIxMCw3IEBAIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IE5v
ZGU6OmNoaWxkTm9kZXMoKQogICAgICAgICBkb2N1bWVudCgpLT5hZGROb2RlTGlzdENhY2hlKCk7
CiAgICAgfQogCi0gICAgcmV0dXJuIG5ldyBDaGlsZE5vZGVMaXN0KHRoaXMsICZtX25vZGVMaXN0
cy0+bV9jaGlsZE5vZGVMaXN0Q2FjaGVzKTsKKyAgICByZXR1cm4gQ2hpbGROb2RlTGlzdDo6Y3Jl
YXRlKHRoaXMsICZtX25vZGVMaXN0cy0+bV9jaGlsZE5vZGVMaXN0Q2FjaGVzKTsKIH0KIAogTm9k
ZSogTm9kZTo6dmlydHVhbEZpcnN0Q2hpbGQoKSBjb25zdApAQCAtMTIwMiw3ICsxMjAyLDcgQEAg
UGFzc1JlZlB0cjxOb2RlTGlzdD4gTm9kZTo6Z2V0RWxlbWVudHNCeQogICAgIFN0cmluZyBuYW1l
ID0gbG9jYWxOYW1lOwogICAgIGlmIChkb2N1bWVudCgpLT5pc0hUTUxEb2N1bWVudCgpKQogICAg
ICAgICBuYW1lID0gbG9jYWxOYW1lLmxvd2VyKCk7Ci0gICAgcmV0dXJuIG5ldyBUYWdOb2RlTGlz
dCh0aGlzLCBuYW1lc3BhY2VVUkkuaXNFbXB0eSgpID8gbnVsbEF0b20gOiBBdG9taWNTdHJpbmco
bmFtZXNwYWNlVVJJKSwgbmFtZSk7CisgICAgcmV0dXJuIFRhZ05vZGVMaXN0OjpjcmVhdGUodGhp
cywgbmFtZXNwYWNlVVJJLmlzRW1wdHkoKSA/IG51bGxBdG9tIDogQXRvbWljU3RyaW5nKG5hbWVz
cGFjZVVSSSksIG5hbWUpOwogfQogCiBQYXNzUmVmUHRyPE5vZGVMaXN0PiBOb2RlOjpnZXRFbGVt
ZW50c0J5TmFtZShjb25zdCBTdHJpbmcmIGVsZW1lbnROYW1lKQpAQCAtMTIxNiw3ICsxMjE2LDcg
QEAgUGFzc1JlZlB0cjxOb2RlTGlzdD4gTm9kZTo6Z2V0RWxlbWVudHNCeQogICAgIGlmIChyZXN1
bHQuc2Vjb25kKQogICAgICAgICByZXN1bHQuZmlyc3QtPnNlY29uZCA9IG5ldyBEeW5hbWljTm9k
ZUxpc3Q6OkNhY2hlczsKICAgICAKLSAgICByZXR1cm4gbmV3IE5hbWVOb2RlTGlzdCh0aGlzLCBl
bGVtZW50TmFtZSwgcmVzdWx0LmZpcnN0LT5zZWNvbmQpOworICAgIHJldHVybiBOYW1lTm9kZUxp
c3Q6OmNyZWF0ZSh0aGlzLCBlbGVtZW50TmFtZSwgcmVzdWx0LmZpcnN0LT5zZWNvbmQpOwogfQog
CiBQYXNzUmVmUHRyPE5vZGVMaXN0PiBOb2RlOjpnZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGNvbnN0
IFN0cmluZyYgY2xhc3NOYW1lcykKQEAgLTEyMzAsNyArMTIzMCw3IEBAIFBhc3NSZWZQdHI8Tm9k
ZUxpc3Q+IE5vZGU6OmdldEVsZW1lbnRzQnkKICAgICBpZiAocmVzdWx0LnNlY29uZCkKICAgICAg
ICAgcmVzdWx0LmZpcnN0LT5zZWNvbmQgPSBuZXcgRHluYW1pY05vZGVMaXN0OjpDYWNoZXM7CiAg
ICAgCi0gICAgcmV0dXJuIG5ldyBDbGFzc05vZGVMaXN0KHRoaXMsIGNsYXNzTmFtZXMsIHJlc3Vs
dC5maXJzdC0+c2Vjb25kKTsKKyAgICByZXR1cm4gQ2xhc3NOb2RlTGlzdDo6Y3JlYXRlKHRoaXMs
IGNsYXNzTmFtZXMsIHJlc3VsdC5maXJzdC0+c2Vjb25kKTsKIH0KIAogUGFzc1JlZlB0cjxFbGVt
ZW50PiBOb2RlOjpxdWVyeVNlbGVjdG9yKGNvbnN0IFN0cmluZyYgc2VsZWN0b3JzLCBFeGNlcHRp
b25Db2RlJiBlYykKQEAgLTEyNzgsOSArMTI3OCw3IEBAIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IE5v
ZGU6OnF1ZXJ5U2VsZWN0b3IKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIAotICAgIFNl
bGVjdG9yTm9kZUxpc3QqIHJlc3VsdExpc3QgPSBuZXcgU2VsZWN0b3JOb2RlTGlzdCh0aGlzLCBz
dGF0aWNfY2FzdDxDU1NTdHlsZVJ1bGUqPihydWxlLmdldCgpKS0+c2VsZWN0b3IoKSk7Ci0KLSAg
ICByZXR1cm4gcmVzdWx0TGlzdDsKKyAgICByZXR1cm4gY3JlYXRlU2VsZWN0b3JOb2RlTGlzdCh0
aGlzLCBzdGF0aWNfY2FzdDxDU1NTdHlsZVJ1bGUqPihydWxlLmdldCgpKS0+c2VsZWN0b3IoKSk7
CiB9CiAKIERvY3VtZW50ICpOb2RlOjpvd25lckRvY3VtZW50KCkgY29uc3QKSW5kZXg6IFdlYkNv
cmUvZG9tL05vZGVGaWx0ZXJDb25kaXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9O
b2RlRmlsdGVyQ29uZGl0aW9uLmgJKHJldmlzaW9uIDM0Mzc2KQorKysgV2ViQ29yZS9kb20vTm9k
ZUZpbHRlckNvbmRpdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw5ICszNyw4IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIE5vZGVGaWx0ZXJDb25kaXRpb24gOiBwdWJsaWMg
UmVmQ291bnRlZDxOb2RlRmlsdGVyQ29uZGl0aW9uPiB7CiAgICAgcHVibGljOgotICAgICAgICBO
b2RlRmlsdGVyQ29uZGl0aW9uKCkgOiBSZWZDb3VudGVkPE5vZGVGaWx0ZXJDb25kaXRpb24+KDAp
IHsgfQogICAgICAgICB2aXJ0dWFsIH5Ob2RlRmlsdGVyQ29uZGl0aW9uKCkgeyB9Ci0gICAgICAg
IHZpcnR1YWwgc2hvcnQgYWNjZXB0Tm9kZShOb2RlKiwgS0pTOjpKU1ZhbHVlKiYgZXhjZXB0aW9u
KSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBzaG9ydCBhY2NlcHROb2RlKE5vZGUqLCBLSlM6OkpT
VmFsdWUqJiBleGNlcHRpb24pIGNvbnN0ID0gMDsKICAgICAgICAgdmlydHVhbCB2b2lkIG1hcmso
KSB7IH0KICAgICB9OwogCkluZGV4OiBXZWJDb3JlL2RvbS9Ob2RlTGlzdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvZG9tL05vZGVMaXN0LmgJKHJldmlzaW9uIDM0Mzc2KQorKysgV2ViQ29yZS9k
b20vTm9kZUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNiBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKICAgICBjbGFzcyBOb2RlTGlzdCA6IHB1YmxpYyBSZWZDb3VudGVkPE5vZGVM
aXN0PiB7CiAgICAgcHVibGljOgotICAgICAgICBOb2RlTGlzdCgpIDogUmVmQ291bnRlZDxOb2Rl
TGlzdD4oMCkgeyB9CiAgICAgICAgIHZpcnR1YWwgfk5vZGVMaXN0KCkgeyB9CiAKICAgICAgICAg
Ly8gRE9NIG1ldGhvZHMgJiBhdHRyaWJ1dGVzIGZvciBOb2RlTGlzdApJbmRleDogV2ViQ29yZS9k
b20vUmFuZ2VFeGNlcHRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9SYW5nZUV4Y2Vw
dGlvbi5oCShyZXZpc2lvbiAzNDM3NikKKysrIFdlYkNvcmUvZG9tL1JhbmdlRXhjZXB0aW9uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMzLDkgKzMzLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAg
ICAgY2xhc3MgUmFuZ2VFeGNlcHRpb24gOiBwdWJsaWMgRXhjZXB0aW9uQmFzZSB7CiAgICAgcHVi
bGljOgotICAgICAgICBSYW5nZUV4Y2VwdGlvbihjb25zdCBFeGNlcHRpb25Db2RlRGVzY3JpcHRp
b24mIGRlc2NyaXB0aW9uKQotICAgICAgICAgICAgOiBFeGNlcHRpb25CYXNlKGRlc2NyaXB0aW9u
KQorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxSYW5nZUV4Y2VwdGlvbj4gY3JlYXRlKGNvbnN0
IEV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCiAgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgUmFuZ2VFeGNlcHRpb24oZGVzY3JpcHRpb24pKTsK
ICAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgUmFuZ2VFeGNlcHRpb25PZmZz
ZXQgPSAyMDA7CkBAIC00NSw2ICs0NSwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
ICAgICBCQURfQk9VTkRBUllQT0lOVFNfRVJSID0gUmFuZ2VFeGNlcHRpb25PZmZzZXQgKyAxLAog
ICAgICAgICAgICAgSU5WQUxJRF9OT0RFX1RZUEVfRVJSCiAgICAgICAgIH07CisKKyAgICBwcml2
YXRlOgorICAgICAgICBSYW5nZUV4Y2VwdGlvbihjb25zdCBFeGNlcHRpb25Db2RlRGVzY3JpcHRp
b24mIGRlc2NyaXB0aW9uKQorICAgICAgICAgICAgOiBFeGNlcHRpb25CYXNlKGRlc2NyaXB0aW9u
KQorICAgICAgICB7CisgICAgICAgIH0KICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBXZWJDb3JlL2RvbS9SZWdpc3RlcmVkRXZlbnRMaXN0ZW5lci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvZG9tL1JlZ2lzdGVyZWRFdmVudExpc3RlbmVyLmgJKHJldmlzaW9uIDM0Mzc2
KQorKysgV2ViQ29yZS9kb20vUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMSwxMCArMSw4IEBACiAvKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERPTSBp
bXBsZW1lbnRhdGlvbiBmb3IgS0RFLgotICoKICAqIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBL
ZWxseSAocG1rQHBvc3QuY29tKQogICogQ29weXJpZ2h0IChDKSAyMDAxIFRvYmlhcyBBbnRvbiAo
YW50b25Ac3R1ZC5mYmkuZmgtZGFybXN0YWR0LmRlKQogICogQ29weXJpZ2h0IChDKSAyMDA2IFNh
bXVlbCBXZWluaWcgKHNhbS53ZWluaWdAZ21haWwuY29tKQotICogQ29weXJpZ2h0IChDKSAyMDAz
LCAyMDA0LCAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNyw3ICsyNSw2IEBACiAjZGVmaW5lIFJlZ2lz
dGVyZWRFdmVudExpc3RlbmVyX2gKIAogI2luY2x1ZGUgIkF0b21pY1N0cmluZy5oIgotI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzUsNyAr
MzIsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgUmVnaXN0ZXJlZEV2ZW50
TGlzdGVuZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcj4gewog
ICAgIHB1YmxpYzoKLSAgICAgICAgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWlj
U3RyaW5nJiBldmVudFR5cGUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4sIGJvb2wgdXNlQ2Fw
dHVyZSk7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlZ2lzdGVyZWRFdmVudExpc3RlbmVy
PiBjcmVhdGUoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFBhc3NSZWZQdHI8RXZlbnRM
aXN0ZW5lcj4gbGlzdGVuZXIsIGJvb2wgdXNlQ2FwdHVyZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUs
IGxpc3RlbmVyLCB1c2VDYXB0dXJlKSk7CisgICAgICAgIH0KIAogICAgICAgICBjb25zdCBBdG9t
aWNTdHJpbmcmIGV2ZW50VHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fZXZlbnRUeXBlOyB9CiAgICAg
ICAgIEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyKCkgY29uc3QgeyByZXR1cm4gbV9saXN0ZW5lci5n
ZXQoKTsgfQpAQCAtNDUsNiArNDUsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZv
aWQgc2V0UmVtb3ZlZChib29sIHJlbW92ZWQpIHsgbV9yZW1vdmVkID0gcmVtb3ZlZDsgfQogICAg
IAogICAgIHByaXZhdGU6CisgICAgICAgIFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyKGNvbnN0IEF0
b21pY1N0cmluZyYgZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+LCBib29sIHVz
ZUNhcHR1cmUpOworCiAgICAgICAgIEF0b21pY1N0cmluZyBtX2V2ZW50VHlwZTsKICAgICAgICAg
UmVmUHRyPEV2ZW50TGlzdGVuZXI+IG1fbGlzdGVuZXI7CiAgICAgICAgIGJvb2wgbV91c2VDYXB0
dXJlOwpJbmRleDogV2ViQ29yZS9kb20vU2VsZWN0b3JOb2RlTGlzdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9kb20vU2VsZWN0b3JOb2RlTGlzdC5jcHAJKHJldmlzaW9uIDM0Mzc2KQorKysg
V2ViQ29yZS9kb20vU2VsZWN0b3JOb2RlTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMzLDEyICsz
MywxMiBAQAogI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKICNpbmNsdWRlICJEb2N1bWVu
dC5oIgogI2luY2x1ZGUgIkVsZW1lbnQuaCIKLSNpbmNsdWRlICJOb2RlLmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotU2VsZWN0b3JOb2RlTGlzdDo6U2VsZWN0b3JOb2RlTGlzdChQYXNzUmVm
UHRyPE5vZGU+IHJvb3ROb2RlLCBDU1NTZWxlY3RvciogcXVlcnlTZWxlY3RvcikKK1Bhc3NSZWZQ
dHI8U3RhdGljTm9kZUxpc3Q+IGNyZWF0ZVNlbGVjdG9yTm9kZUxpc3QoUGFzc1JlZlB0cjxOb2Rl
PiByb290Tm9kZSwgQ1NTU2VsZWN0b3IqIHF1ZXJ5U2VsZWN0b3IpCiB7CisgICAgVmVjdG9yPFJl
ZlB0cjxOb2RlPiA+IG5vZGVzOwogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHJvb3ROb2RlLT5k
b2N1bWVudCgpOwogICAgIENTU1N0eWxlU2VsZWN0b3I6OlNlbGVjdG9yQ2hlY2tlciBzZWxlY3Rv
ckNoZWNrZXIoZG9jdW1lbnQsICFkb2N1bWVudC0+aW5Db21wYXRNb2RlKCkpOwogICAgIGZvciAo
Tm9kZSogbiA9IHJvb3ROb2RlLT5maXJzdENoaWxkKCk7IG47IG4gPSBuLT50cmF2ZXJzZU5leHRO
b2RlKHJvb3ROb2RlLmdldCgpKSkgewpAQCAtNDYsMTIgKzQ2LDEzIEBAIFNlbGVjdG9yTm9kZUxp
c3Q6OlNlbGVjdG9yTm9kZUxpc3QoUGFzc1IKICAgICAgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQg
PSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obik7CiAgICAgICAgICAgICBmb3IgKENTU1NlbGVjdG9y
KiBzZWxlY3RvciA9IHF1ZXJ5U2VsZWN0b3I7IHNlbGVjdG9yOyBzZWxlY3RvciA9IHNlbGVjdG9y
LT5uZXh0KCkpIHsKICAgICAgICAgICAgICAgICBpZiAoc2VsZWN0b3JDaGVja2VyLmNoZWNrU2Vs
ZWN0b3Ioc2VsZWN0b3IsIGVsZW1lbnQpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fbm9kZXMu
YXBwZW5kKG4pOworICAgICAgICAgICAgICAgICAgICBub2Rlcy5hcHBlbmQobik7CiAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAg
ICAgICAgfQogICAgIH0KKyAgICByZXR1cm4gU3RhdGljTm9kZUxpc3Q6OmFkb3B0KG5vZGVzKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9kb20vU2VsZWN0b3JO
b2RlTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1NlbGVjdG9yTm9kZUxpc3QuaAko
cmV2aXNpb24gMzQzNzYpCisrKyBXZWJDb3JlL2RvbS9TZWxlY3Rvck5vZGVMaXN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTMwLDE3ICszMCwxMiBAQAogI2RlZmluZSBTZWxlY3Rvck5vZGVMaXN0X2gKIAog
I2luY2x1ZGUgIlN0YXRpY05vZGVMaXN0LmgiCi0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAgY2xhc3MgTm9kZTsKICAgICBjbGFzcyBDU1NTZWxl
Y3RvcjsKIAotICAgIGNsYXNzIFNlbGVjdG9yTm9kZUxpc3QgOiBwdWJsaWMgU3RhdGljTm9kZUxp
c3QgewotICAgIHB1YmxpYzoKLSAgICAgICAgU2VsZWN0b3JOb2RlTGlzdChQYXNzUmVmUHRyPE5v
ZGU+IHJvb3ROb2RlLCBDU1NTZWxlY3RvciopOwotICAgIH07CisgICAgUGFzc1JlZlB0cjxTdGF0
aWNOb2RlTGlzdD4gY3JlYXRlU2VsZWN0b3JOb2RlTGlzdChQYXNzUmVmUHRyPE5vZGU+IHJvb3RO
b2RlLCBDU1NTZWxlY3RvciopOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFdl
YkNvcmUvZG9tL1N0YXRpY05vZGVMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9T
dGF0aWNOb2RlTGlzdC5jcHAJKHJldmlzaW9uIDM0Mzc2KQorKysgV2ViQ29yZS9kb20vU3RhdGlj
Tm9kZUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw4ICsyOSw2IEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiU3RhdGljTm9kZUxpc3QuaCIKIAotI2luY2x1ZGUgIkF0b21p
Y1N0cmluZy5oIgotI2luY2x1ZGUgIk5vZGUuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKSW5kZXg6IFdlYkNvcmUvZG9tL1N0YXRpY05vZGVMaXN0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9kb20vU3RhdGljTm9kZUxpc3QuaAkocmV2aXNpb24gMzQzNzYp
CisrKyBXZWJDb3JlL2RvbS9TdGF0aWNOb2RlTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCw2ICsz
MCw3IEBACiAjZGVmaW5lIFN0YXRpY05vZGVMaXN0X2gKIAogI2luY2x1ZGUgIk5vZGVMaXN0Lmgi
CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC0zOSwxNSArNDAsMjEgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiAgICAgY2xhc3MgU3RhdGljTm9kZUxpc3QgOiBwdWJsaWMgTm9kZUxpc3Qgewog
ICAgIHB1YmxpYzoKLSAgICAgICAgLy8gRGVyaXZlZCBjbGFzc2VzIHNob3VsZCBidWlsZCB1cCB0
aGUgVmVjdG9yIGluIHRoZWlyIGNvbnN0cnVjdG9yLgotICAgICAgICBTdGF0aWNOb2RlTGlzdCgp
IHsgfQotICAgICAgICB2aXJ0dWFsIH5TdGF0aWNOb2RlTGlzdCgpIHsgfQorICAgICAgICAvLyBB
ZG9wdHMgdGhlIGNvbnRlbnRzIG9mIHRoZSBub2RlcyB2ZWN0b3IuCisgICAgICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFN0YXRpY05vZGVMaXN0PiBhZG9wdChWZWN0b3I8UmVmUHRyPE5vZGU+ID4mIG5v
ZGVzKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFN0YXRpY05v
ZGVMaXN0KG5vZGVzKSk7CisgICAgICAgIH0KIAogICAgICAgICB2aXJ0dWFsIHVuc2lnbmVkIGxl
bmd0aCgpIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIE5vZGUqIGl0ZW0odW5zaWduZWQgaW5kZXgp
IGNvbnN0OwogICAgICAgICB2aXJ0dWFsIE5vZGUqIGl0ZW1XaXRoTmFtZShjb25zdCBBdG9taWNT
dHJpbmcmKSBjb25zdDsKIAotICAgIHByb3RlY3RlZDoKKyAgICBwcml2YXRlOgorICAgICAgICBT
dGF0aWNOb2RlTGlzdChWZWN0b3I8UmVmUHRyPE5vZGU+ID4mIG5vZGVzKQorICAgICAgICB7Cisg
ICAgICAgICAgICBtX25vZGVzLnN3YXAobm9kZXMpOworICAgICAgICB9CiAgICAgICAgIFZlY3Rv
cjxSZWZQdHI8Tm9kZT4gPiBtX25vZGVzOwogICAgIH07CiAKSW5kZXg6IFdlYkNvcmUvZG9tL1Rh
Z05vZGVMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vVGFnTm9kZUxpc3QuaAkocmV2
aXNpb24gMzQzNzYpCisrKyBXZWJDb3JlL2RvbS9UYWdOb2RlTGlzdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yLDcgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xs
QGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3Rv
QGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtk
ZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2
LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdo
dCAoQykgMjAwNyBUcm9sbHRlY2ggQVNBCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMzIsOSArMzIsMTQgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgIC8vIE5vZGVMaXN0IHRoYXQgbGltaXRzIHRvIGEgcGFy
dGljdWxhciB0YWcuCiAgICAgY2xhc3MgVGFnTm9kZUxpc3QgOiBwdWJsaWMgRHluYW1pY05vZGVM
aXN0IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIFRhZ05vZGVMaXN0KFBhc3NSZWZQdHI8Tm9kZT4g
cm9vdE5vZGUsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBBdG9taWNT
dHJpbmcmIGxvY2FsTmFtZSk7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRhZ05vZGVMaXN0
PiBjcmVhdGUoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwgY29uc3QgQXRvbWljU3RyaW5nJiBu
YW1lc3BhY2VVUkksIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRhZ05vZGVMaXN0KHJvb3ROb2RlLCBuYW1l
c3BhY2VVUkksIGxvY2FsTmFtZSkpOworICAgICAgICB9CiAKICAgICBwcml2YXRlOgorICAgICAg
ICBUYWdOb2RlTGlzdChQYXNzUmVmUHRyPE5vZGU+IHJvb3ROb2RlLCBjb25zdCBBdG9taWNTdHJp
bmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbE5hbWUpOworCiAgICAg
ICAgIHZpcnR1YWwgYm9vbCBub2RlTWF0Y2hlcyhOb2RlKikgY29uc3Q7CiAKICAgICAgICAgQXRv
bWljU3RyaW5nIG1fbmFtZXNwYWNlVVJJOwpJbmRleDogV2ViQ29yZS9oaXN0b3J5L0hpc3RvcnlJ
dGVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2hpc3RvcnkvSGlzdG9yeUl0ZW0uY3BwCShy
ZXZpc2lvbiAzNDM3NikKKysrIFdlYkNvcmUvaGlzdG9yeS9IaXN0b3J5SXRlbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM4LDEyICszOCwxNCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0
YXRpYyB2b2lkIGRlZmF1bHROb3RpZnlIaXN0b3J5SXRlbUNoYW5nZWQoKSB7fQorc3RhdGljIHZv
aWQgZGVmYXVsdE5vdGlmeUhpc3RvcnlJdGVtQ2hhbmdlZCgpCit7Cit9CisKIHZvaWQgKCpub3Rp
ZnlIaXN0b3J5SXRlbUNoYW5nZWQpKCkgPSBkZWZhdWx0Tm90aWZ5SGlzdG9yeUl0ZW1DaGFuZ2Vk
OwogCiBIaXN0b3J5SXRlbTo6SGlzdG9yeUl0ZW0oKQotICAgIDogUmVmQ291bnRlZDxIaXN0b3J5
SXRlbT4oMCkKLSAgICAsIG1fbGFzdFZpc2l0ZWRUaW1lKDApCisgICAgOiBtX2xhc3RWaXNpdGVk
VGltZSgwKQogICAgICwgbV9pc0luUGFnZUNhY2hlKGZhbHNlKQogICAgICwgbV9pc1RhcmdldEl0
ZW0oZmFsc2UpCiAgICAgLCBtX3Zpc2l0Q291bnQoMCkKQEAgLTUxLDggKzUzLDcgQEAgSGlzdG9y
eUl0ZW06Okhpc3RvcnlJdGVtKCkKIH0KIAogSGlzdG9yeUl0ZW06Okhpc3RvcnlJdGVtKGNvbnN0
IFN0cmluZyYgdXJsU3RyaW5nLCBjb25zdCBTdHJpbmcmIHRpdGxlLCBkb3VibGUgdGltZSkKLSAg
ICA6IFJlZkNvdW50ZWQ8SGlzdG9yeUl0ZW0+KDApCi0gICAgLCBtX3VybFN0cmluZyh1cmxTdHJp
bmcpCisgICAgOiBtX3VybFN0cmluZyh1cmxTdHJpbmcpCiAgICAgLCBtX29yaWdpbmFsVVJMU3Ry
aW5nKHVybFN0cmluZykKICAgICAsIG1fdGl0bGUodGl0bGUpCiAgICAgLCBtX2xhc3RWaXNpdGVk
VGltZSh0aW1lKQpAQCAtNjQsOCArNjUsNyBAQCBIaXN0b3J5SXRlbTo6SGlzdG9yeUl0ZW0oY29u
c3QgU3RyaW5nJiB1CiB9CiAKIEhpc3RvcnlJdGVtOjpIaXN0b3J5SXRlbShjb25zdCBTdHJpbmcm
IHVybFN0cmluZywgY29uc3QgU3RyaW5nJiB0aXRsZSwgY29uc3QgU3RyaW5nJiBhbHRlcm5hdGVU
aXRsZSwgZG91YmxlIHRpbWUpCi0gICAgOiBSZWZDb3VudGVkPEhpc3RvcnlJdGVtPigwKQotICAg
ICwgbV91cmxTdHJpbmcodXJsU3RyaW5nKQorICAgIDogbV91cmxTdHJpbmcodXJsU3RyaW5nKQog
ICAgICwgbV9vcmlnaW5hbFVSTFN0cmluZyh1cmxTdHJpbmcpCiAgICAgLCBtX3RpdGxlKHRpdGxl
KQogICAgICwgbV9kaXNwbGF5VGl0bGUoYWx0ZXJuYXRlVGl0bGUpCkBAIC03NywyMiArNzcsOCBA
QCBIaXN0b3J5SXRlbTo6SGlzdG9yeUl0ZW0oY29uc3QgU3RyaW5nJiB1CiAgICAgaWNvbkRhdGFi
YXNlKCktPnJldGFpbkljb25Gb3JQYWdlVVJMKG1fdXJsU3RyaW5nKTsKIH0KIAotSGlzdG9yeUl0
ZW06Okhpc3RvcnlJdGVtKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB0aXRsZSkKLSAg
ICA6IFJlZkNvdW50ZWQ8SGlzdG9yeUl0ZW0+KDApCi0gICAgLCBtX3VybFN0cmluZyh1cmwuc3Ry
aW5nKCkpCi0gICAgLCBtX29yaWdpbmFsVVJMU3RyaW5nKHVybC5zdHJpbmcoKSkKLSAgICAsIG1f
dGl0bGUodGl0bGUpCi0gICAgLCBtX2xhc3RWaXNpdGVkVGltZSgwKQotICAgICwgbV9pc0luUGFn
ZUNhY2hlKGZhbHNlKQotICAgICwgbV9pc1RhcmdldEl0ZW0oZmFsc2UpCi0gICAgLCBtX3Zpc2l0
Q291bnQoMCkKLXsgICAgCi0gICAgaWNvbkRhdGFiYXNlKCktPnJldGFpbkljb25Gb3JQYWdlVVJM
KG1fdXJsU3RyaW5nKTsKLX0KLQogSGlzdG9yeUl0ZW06Okhpc3RvcnlJdGVtKGNvbnN0IEtVUkwm
IHVybCwgY29uc3QgU3RyaW5nJiB0YXJnZXQsIGNvbnN0IFN0cmluZyYgcGFyZW50LCBjb25zdCBT
dHJpbmcmIHRpdGxlKQotICAgIDogUmVmQ291bnRlZDxIaXN0b3J5SXRlbT4oMCkKLSAgICAsIG1f
dXJsU3RyaW5nKHVybC5zdHJpbmcoKSkKKyAgICA6IG1fdXJsU3RyaW5nKHVybC5zdHJpbmcoKSkK
ICAgICAsIG1fb3JpZ2luYWxVUkxTdHJpbmcodXJsLnN0cmluZygpKQogICAgICwgbV90YXJnZXQo
dGFyZ2V0KQogICAgICwgbV9wYXJlbnQocGFyZW50KQpAQCAtMTExLDggKzk3LDggQEAgSGlzdG9y
eUl0ZW06On5IaXN0b3J5SXRlbSgpCiAgICAgaWNvbkRhdGFiYXNlKCktPnJlbGVhc2VJY29uRm9y
UGFnZVVSTChtX3VybFN0cmluZyk7CiB9CiAKLUhpc3RvcnlJdGVtOjpIaXN0b3J5SXRlbShjb25z
dCBIaXN0b3J5SXRlbSYgaXRlbSkKLSAgICA6IFJlZkNvdW50ZWQ8SGlzdG9yeUl0ZW0+KDApCitp
bmxpbmUgSGlzdG9yeUl0ZW06Okhpc3RvcnlJdGVtKGNvbnN0IEhpc3RvcnlJdGVtJiBpdGVtKQor
ICAgIDogUmVmQ291bnRlZDxIaXN0b3J5SXRlbT4oMSkKICAgICAsIG1fdXJsU3RyaW5nKGl0ZW0u
bV91cmxTdHJpbmcpCiAgICAgLCBtX29yaWdpbmFsVVJMU3RyaW5nKGl0ZW0ubV9vcmlnaW5hbFVS
TFN0cmluZykKICAgICAsIG1fdGFyZ2V0KGl0ZW0ubV90YXJnZXQpCkBAIC0xMzksNyArMTI1LDcg
QEAgSGlzdG9yeUl0ZW06Okhpc3RvcnlJdGVtKGNvbnN0IEhpc3RvcnlJdAogCiBQYXNzUmVmUHRy
PEhpc3RvcnlJdGVtPiBIaXN0b3J5SXRlbTo6Y29weSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG5l
dyBIaXN0b3J5SXRlbSgqdGhpcyk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBIaXN0b3J5SXRl
bSgqdGhpcykpOwogfQogCiBjb25zdCBTdHJpbmcmIEhpc3RvcnlJdGVtOjp1cmxTdHJpbmcoKSBj
b25zdApJbmRleDogV2ViQ29yZS9oaXN0b3J5L0hpc3RvcnlJdGVtLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9oaXN0b3J5L0hpc3RvcnlJdGVtLmgJKHJldmlzaW9uIDM0Mzc2KQorKysgV2ViQ29y
ZS9oaXN0b3J5L0hpc3RvcnlJdGVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDExICs1OCwxOSBA
QCBjbGFzcyBIaXN0b3J5SXRlbSA6IHB1YmxpYyBSZWZDb3VudGVkPEhpCiAgICAgZnJpZW5kIGNs
YXNzIFBhZ2VDYWNoZTsKIAogcHVibGljOiAKLSAgICBIaXN0b3J5SXRlbSgpOwotICAgIEhpc3Rv
cnlJdGVtKGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nLCBjb25zdCBTdHJpbmcmIHRpdGxlLCBkb3Vi
bGUgbGFzdFZpc2l0ZWQpOwotICAgIEhpc3RvcnlJdGVtKGNvbnN0IFN0cmluZyYgdXJsU3RyaW5n
LCBjb25zdCBTdHJpbmcmIHRpdGxlLCBjb25zdCBTdHJpbmcmIGFsdGVybmF0ZVRpdGxlLCBkb3Vi
bGUgbGFzdFZpc2l0ZWQpOwotICAgIEhpc3RvcnlJdGVtKGNvbnN0IEtVUkwmIHVybCwgY29uc3Qg
U3RyaW5nJiB0aXRsZSk7Ci0gICAgSGlzdG9yeUl0ZW0oY29uc3QgS1VSTCYgdXJsLCBjb25zdCBT
dHJpbmcmIHRhcmdldCwgY29uc3QgU3RyaW5nJiBwYXJlbnQsIGNvbnN0IFN0cmluZyYgdGl0bGUp
OworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhpc3RvcnlJdGVtPiBjcmVhdGUoKSB7IHJldHVybiBh
ZG9wdFJlZihuZXcgSGlzdG9yeUl0ZW0pOyB9CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SGlzdG9y
eUl0ZW0+IGNyZWF0ZShjb25zdCBTdHJpbmcmIHVybFN0cmluZywgY29uc3QgU3RyaW5nJiB0aXRs
ZSwgZG91YmxlIGxhc3RWaXNpdGVkKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBIaXN0b3J5SXRlbSh1cmxTdHJpbmcsIHRpdGxlLCBsYXN0VmlzaXRlZCkpOworICAgIH0KKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxIaXN0b3J5SXRlbT4gY3JlYXRlKGNvbnN0IFN0cmluZyYgdXJs
U3RyaW5nLCBjb25zdCBTdHJpbmcmIHRpdGxlLCBjb25zdCBTdHJpbmcmIGFsdGVybmF0ZVRpdGxl
LCBkb3VibGUgbGFzdFZpc2l0ZWQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IEhpc3RvcnlJdGVtKHVybFN0cmluZywgdGl0bGUsIGFsdGVybmF0ZVRpdGxlLCBsYXN0VmlzaXRl
ZCkpOworICAgIH0KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxIaXN0b3J5SXRlbT4gY3JlYXRlKGNv
bnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB0YXJnZXQsIGNvbnN0IFN0cmluZyYgcGFyZW50
LCBjb25zdCBTdHJpbmcmIHRpdGxlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBIaXN0b3J5SXRlbSh1cmwsIHRhcmdldCwgcGFyZW50LCB0aXRsZSkpOworICAgIH0KICAgICAK
ICAgICB+SGlzdG9yeUl0ZW0oKTsKICAgICAKQEAgLTE0Niw2ICsxNTQsMTEgQEAgcHVibGljOiAK
ICNlbmRpZgogCiBwcml2YXRlOgorICAgIEhpc3RvcnlJdGVtKCk7CisgICAgSGlzdG9yeUl0ZW0o
Y29uc3QgU3RyaW5nJiB1cmxTdHJpbmcsIGNvbnN0IFN0cmluZyYgdGl0bGUsIGRvdWJsZSBsYXN0
VmlzaXRlZCk7CisgICAgSGlzdG9yeUl0ZW0oY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcsIGNvbnN0
IFN0cmluZyYgdGl0bGUsIGNvbnN0IFN0cmluZyYgYWx0ZXJuYXRlVGl0bGUsIGRvdWJsZSBsYXN0
VmlzaXRlZCk7CisgICAgSGlzdG9yeUl0ZW0oY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcm
IHRhcmdldCwgY29uc3QgU3RyaW5nJiBwYXJlbnQsIGNvbnN0IFN0cmluZyYgdGl0bGUpOworCiAg
ICAgSGlzdG9yeUl0ZW0oY29uc3QgSGlzdG9yeUl0ZW0mKTsKICAgICAKICAgICBTdHJpbmcgbV91
cmxTdHJpbmc7CkluZGV4OiBXZWJDb3JlL2h0bWwvQ2FudmFzR3JhZGllbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2h0bWwvQ2FudmFzR3JhZGllbnQuaAkocmV2aXNpb24gMzQzNzYpCisrKyBX
ZWJDb3JlL2h0bWwvQ2FudmFzR3JhZGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsMTEgKzI3
LDkgQEAKICNpZm5kZWYgQ2FudmFzR3JhZGllbnRfaAogI2RlZmluZSBDYW52YXNHcmFkaWVudF9o
CiAKLSNpbmNsdWRlICJGbG9hdFBvaW50LmgiCiAjaW5jbHVkZSAiR3JhZGllbnQuaCIKICNpbmNs
dWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKSW5kZXg6IFdlYkNv
cmUvaHRtbC9DYW52YXNQYXR0ZXJuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvQ2Fu
dmFzUGF0dGVybi5jcHAJKHJldmlzaW9uIDM0Mzc2KQorKysgV2ViQ29yZS9odG1sL0NhbnZhc1Bh
dHRlcm4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY2LDggKzY2LDcgQEAgdm9pZCBD
YW52YXNQYXR0ZXJuOjpwYXJzZVJlcGV0aXRpb25UeXBlKAogI2lmIFBMQVRGT1JNKENHKQogCiBD
YW52YXNQYXR0ZXJuOjpDYW52YXNQYXR0ZXJuKENHSW1hZ2VSZWYgaW1hZ2UsIGJvb2wgcmVwZWF0
WCwgYm9vbCByZXBlYXRZLCBib29sIG9yaWdpbkNsZWFuKQotICAgIDogUmVmQ291bnRlZDxDYW52
YXNQYXR0ZXJuPigwKQotICAgICwgbV9wbGF0Zm9ybUltYWdlKGltYWdlKQorICAgIDogbV9wbGF0
Zm9ybUltYWdlKGltYWdlKQogICAgICwgbV9jYWNoZWRJbWFnZSgwKQogICAgICwgbV9yZXBlYXRY
KHJlcGVhdFgpCiAgICAgLCBtX3JlcGVhdFkocmVwZWF0WSkKQEAgLTc4LDggKzc3LDcgQEAgQ2Fu
dmFzUGF0dGVybjo6Q2FudmFzUGF0dGVybihDR0ltYWdlUmVmIAogI2VsaWYgUExBVEZPUk0oQ0FJ
Uk8pCiAKIENhbnZhc1BhdHRlcm46OkNhbnZhc1BhdHRlcm4oY2Fpcm9fc3VyZmFjZV90KiBzdXJm
YWNlLCBib29sIHJlcGVhdFgsIGJvb2wgcmVwZWF0WSwgYm9vbCBvcmlnaW5DbGVhbikKLSAgICA6
IFJlZkNvdW50ZWQ8Q2FudmFzUGF0dGVybj4oMCkKLSAgICAsIG1fcGxhdGZvcm1JbWFnZShjYWly
b19zdXJmYWNlX3JlZmVyZW5jZShzdXJmYWNlKSkKKyAgICA6IG1fcGxhdGZvcm1JbWFnZShjYWly
b19zdXJmYWNlX3JlZmVyZW5jZShzdXJmYWNlKSkKICAgICAsIG1fY2FjaGVkSW1hZ2UoMCkKICAg
ICAsIG1fcmVwZWF0WChyZXBlYXRYKQogICAgICwgbV9yZXBlYXRZKHJlcGVhdFkpCkBAIC05MCwx
NSArODgsMTQgQEAgQ2FudmFzUGF0dGVybjo6Q2FudmFzUGF0dGVybihjYWlyb19zdXJmYQogI2Vu
ZGlmCiAKIENhbnZhc1BhdHRlcm46OkNhbnZhc1BhdHRlcm4oQ2FjaGVkSW1hZ2UqIGNhY2hlZElt
YWdlLCBib29sIHJlcGVhdFgsIGJvb2wgcmVwZWF0WSwgYm9vbCBvcmlnaW5DbGVhbikKLSAgICA6
IFJlZkNvdW50ZWQ8Q2FudmFzUGF0dGVybj4oMCkKLSNpZiBQTEFURk9STShDRykgfHwgUExBVEZP
Uk0oQ0FJUk8pCi0gICAgLCBtX3BsYXRmb3JtSW1hZ2UoMCkKLSNlbmRpZgotICAgICwgbV9jYWNo
ZWRJbWFnZShjYWNoZWRJbWFnZSkKKyAgICA6IG1fY2FjaGVkSW1hZ2UoY2FjaGVkSW1hZ2UpCiAg
ICAgLCBtX3JlcGVhdFgocmVwZWF0WCkKICAgICAsIG1fcmVwZWF0WShyZXBlYXRZKQogICAgICwg
bV9vcmlnaW5DbGVhbihvcmlnaW5DbGVhbikKIHsKKyNpZiBQTEFURk9STShDQUlSTykKKyAgICBt
X3BsYXRmb3JtSW1hZ2UgPSAwOworI2VuZGlmCiAgICAgaWYgKGNhY2hlZEltYWdlKQogICAgICAg
ICBjYWNoZWRJbWFnZS0+YWRkQ2xpZW50KHRoaXMpOwogfQpJbmRleDogV2ViQ29yZS9odG1sL0Nh
bnZhc1BhdHRlcm4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvQ2FudmFzUGF0dGVybi5o
CShyZXZpc2lvbiAzNDM3NikKKysrIFdlYkNvcmUvaHRtbC9DYW52YXNQYXR0ZXJuLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxl
IENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsNiArMjcsNyBAQAogI2RlZmluZSBDYW52YXNQYXR0ZXJu
X2gKIAogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50LmgiCisjaW5jbHVkZSA8d3RmL1Bh
c3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCiAjaWYgUExBVEZPUk0o
Q0cpCkBAIC00OCwxMiArNDksMjEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBzdGF0
aWMgdm9pZCBwYXJzZVJlcGV0aXRpb25UeXBlKGNvbnN0IFN0cmluZyYsIGJvb2wmIHJlcGVhdFgs
IGJvb2wmIHJlcGVhdFksIEV4Y2VwdGlvbkNvZGUmKTsKIAogI2lmIFBMQVRGT1JNKENHKQotICAg
ICAgICBDYW52YXNQYXR0ZXJuKENHSW1hZ2VSZWYsIGJvb2wgcmVwZWF0WCwgYm9vbCByZXBlYXRZ
LCBib29sIG9yaWdpbkNsZWFuKTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2FudmFzUGF0
dGVybj4gY3JlYXRlKENHSW1hZ2VSZWYgaW1hZ2UsIGJvb2wgcmVwZWF0WCwgYm9vbCByZXBlYXRZ
LCBib29sIG9yaWdpbkNsZWFuKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IENhbnZhc1BhdHRlcm4oaW1hZ2UsIHJlcGVhdFgsIHJlcGVhdFksIG9yaWdpbkNsZWFu
KSk7CisgICAgICAgIH0KICNlbGlmIFBMQVRGT1JNKENBSVJPKQotICAgICAgICBDYW52YXNQYXR0
ZXJuKGNhaXJvX3N1cmZhY2VfdCosIGJvb2wgcmVwZWF0WCwgYm9vbCByZXBlYXRZLCBib29sIG9y
aWdpbkNsZWFuKTsKLSNlbmRpZgotICAgICAgICBDYW52YXNQYXR0ZXJuKENhY2hlZEltYWdlKiwg
Ym9vbCByZXBlYXRYLCBib29sIHJlcGVhdFksIGJvb2wgb3JpZ2luQ2xlYW4pOwotICAgICAgICB+
Q2FudmFzUGF0dGVybigpOworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDYW52YXNQYXR0ZXJu
PiBjcmVhdGUoY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlLCBib29sIHJlcGVhdFgsIGJvb2wgcmVw
ZWF0WSwgYm9vbCBvcmlnaW5DbGVhbikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBDYW52YXNQYXR0ZXJuKHN1cmZhY2UsIHJlcGVhdFgsIHJlcGVhdFksIG9yaWdp
bkNsZWFuKSk7CisgICAgICAgIH0KKyNlbmRpZgorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxD
YW52YXNQYXR0ZXJuPiBjcmVhdGUoQ2FjaGVkSW1hZ2UqIGltYWdlLCBib29sIHJlcGVhdFgsIGJv
b2wgcmVwZWF0WSwgYm9vbCBvcmlnaW5DbGVhbikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBDYW52YXNQYXR0ZXJuKGltYWdlLCByZXBlYXRYLCByZXBlYXRZLCBv
cmlnaW5DbGVhbikpOworICAgICAgICB9CisgICAgICAgIHZpcnR1YWwgfkNhbnZhc1BhdHRlcm4o
KTsKIAogI2lmIFBMQVRGT1JNKENHKQogICAgICAgICBDR0ltYWdlUmVmIHBsYXRmb3JtSW1hZ2Uo
KSBjb25zdCB7IHJldHVybiBtX3BsYXRmb3JtSW1hZ2UuZ2V0KCk7IH0KQEAgLTcyLDYgKzgyLDEz
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIHByaXZhdGU6CiAjaWYgUExBVEZPUk0oQ0cp
CisgICAgICAgIENhbnZhc1BhdHRlcm4oQ0dJbWFnZVJlZiwgYm9vbCByZXBlYXRYLCBib29sIHJl
cGVhdFksIGJvb2wgb3JpZ2luQ2xlYW4pOworI2VsaWYgUExBVEZPUk0oQ0FJUk8pCisgICAgICAg
IENhbnZhc1BhdHRlcm4oY2Fpcm9fc3VyZmFjZV90KiwgYm9vbCByZXBlYXRYLCBib29sIHJlcGVh
dFksIGJvb2wgb3JpZ2luQ2xlYW4pOworI2VuZGlmCisgICAgICAgIENhbnZhc1BhdHRlcm4oQ2Fj
aGVkSW1hZ2UqLCBib29sIHJlcGVhdFgsIGJvb2wgcmVwZWF0WSwgYm9vbCBvcmlnaW5DbGVhbik7
CisKKyNpZiBQTEFURk9STShDRykKICAgICAgICAgY29uc3QgUmV0YWluUHRyPENHSW1hZ2VSZWY+
IG1fcGxhdGZvcm1JbWFnZTsKICNlbGlmIFBMQVRGT1JNKENBSVJPKQogICAgICAgICBjYWlyb19z
dXJmYWNlX3QqIGNvbnN0IG1fcGxhdGZvcm1JbWFnZTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9DYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9DYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCShyZXZpc2lvbiAzNDM3NikKKysrIFdlYkNvcmUvaHRt
bC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MSw4ICs4
MSw4IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpyZXNldCgpCiB9CiAKIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRDo6U3RhdGU6OlN0YXRlKCkKLSAgICA6IG1fc3Ryb2tlU3R5bGUo
bmV3IENhbnZhc1N0eWxlKCJibGFjayIpKQotICAgICwgbV9maWxsU3R5bGUobmV3IENhbnZhc1N0
eWxlKCJibGFjayIpKQorICAgIDogbV9zdHJva2VTdHlsZShDYW52YXNTdHlsZTo6Y3JlYXRlKCJi
bGFjayIpKQorICAgICwgbV9maWxsU3R5bGUoQ2FudmFzU3R5bGU6OmNyZWF0ZSgiYmxhY2siKSkK
ICAgICAsIG1fbGluZVdpZHRoKDEpCiAgICAgLCBtX2xpbmVDYXAoQnV0dENhcCkKICAgICAsIG1f
bGluZUpvaW4oTWl0ZXJKb2luKQpAQCAtMzY3LDYyICszNjcsNjIgQEAgdm9pZCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ6OnRyYW5zZm9ybQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RDo6c2V0U3Ryb2tlQ29sb3IoY29uc3QgU3RyaW5nJiBjb2xvcikKIHsKLSAgICBzZXRTdHJva2VT
dHlsZShuZXcgQ2FudmFzU3R5bGUoY29sb3IpKTsKKyAgICBzZXRTdHJva2VTdHlsZShDYW52YXNT
dHlsZTo6Y3JlYXRlKGNvbG9yKSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
OjpzZXRTdHJva2VDb2xvcihmbG9hdCBncmF5TGV2ZWwpCiB7Ci0gICAgc2V0U3Ryb2tlU3R5bGUo
bmV3IENhbnZhc1N0eWxlKGdyYXlMZXZlbCwgMSkpOworICAgIHNldFN0cm9rZVN0eWxlKENhbnZh
c1N0eWxlOjpjcmVhdGUoZ3JheUxldmVsLCAxKSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEOjpzZXRTdHJva2VDb2xvcihjb25zdCBTdHJpbmcmIGNvbG9yLCBmbG9hdCBhbHBo
YSkKIHsKLSAgICBzZXRTdHJva2VTdHlsZShuZXcgQ2FudmFzU3R5bGUoY29sb3IsIGFscGhhKSk7
CisgICAgc2V0U3Ryb2tlU3R5bGUoQ2FudmFzU3R5bGU6OmNyZWF0ZShjb2xvciwgYWxwaGEpKTsK
IH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldFN0cm9rZUNvbG9yKGZsb2F0
IGdyYXlMZXZlbCwgZmxvYXQgYWxwaGEpCiB7Ci0gICAgc2V0U3Ryb2tlU3R5bGUobmV3IENhbnZh
c1N0eWxlKGdyYXlMZXZlbCwgYWxwaGEpKTsKKyAgICBzZXRTdHJva2VTdHlsZShDYW52YXNTdHls
ZTo6Y3JlYXRlKGdyYXlMZXZlbCwgYWxwaGEpKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQ6OnNldFN0cm9rZUNvbG9yKGZsb2F0IHIsIGZsb2F0IGcsIGZsb2F0IGIsIGZsb2F0
IGEpCiB7Ci0gICAgc2V0U3Ryb2tlU3R5bGUobmV3IENhbnZhc1N0eWxlKHIsIGcsIGIsIGEpKTsK
KyAgICBzZXRTdHJva2VTdHlsZShDYW52YXNTdHlsZTo6Y3JlYXRlKHIsIGcsIGIsIGEpKTsKIH0K
IAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldFN0cm9rZUNvbG9yKGZsb2F0IGMs
IGZsb2F0IG0sIGZsb2F0IHksIGZsb2F0IGssIGZsb2F0IGEpCiB7Ci0gICAgc2V0U3Ryb2tlU3R5
bGUobmV3IENhbnZhc1N0eWxlKGMsIG0sIHksIGssIGEpKTsKKyAgICBzZXRTdHJva2VTdHlsZShD
YW52YXNTdHlsZTo6Y3JlYXRlKGMsIG0sIHksIGssIGEpKTsKIH0KIAogdm9pZCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ6OnNldEZpbGxDb2xvcihjb25zdCBTdHJpbmcmIGNvbG9yKQogewotICAg
IHNldEZpbGxTdHlsZShuZXcgQ2FudmFzU3R5bGUoY29sb3IpKTsKKyAgICBzZXRGaWxsU3R5bGUo
Q2FudmFzU3R5bGU6OmNyZWF0ZShjb2xvcikpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDo6c2V0RmlsbENvbG9yKGZsb2F0IGdyYXlMZXZlbCkKIHsKLSAgICBzZXRGaWxsU3R5
bGUobmV3IENhbnZhc1N0eWxlKGdyYXlMZXZlbCwgMSkpOworICAgIHNldEZpbGxTdHlsZShDYW52
YXNTdHlsZTo6Y3JlYXRlKGdyYXlMZXZlbCwgMSkpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRDo6c2V0RmlsbENvbG9yKGNvbnN0IFN0cmluZyYgY29sb3IsIGZsb2F0IGFscGhh
KQogewotICAgIHNldEZpbGxTdHlsZShuZXcgQ2FudmFzU3R5bGUoY29sb3IsIDEpKTsKKyAgICBz
ZXRGaWxsU3R5bGUoQ2FudmFzU3R5bGU6OmNyZWF0ZShjb2xvciwgMSkpOwogfQogCiB2b2lkIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0RmlsbENvbG9yKGZsb2F0IGdyYXlMZXZlbCwgZmxv
YXQgYWxwaGEpCiB7Ci0gICAgc2V0RmlsbFN0eWxlKG5ldyBDYW52YXNTdHlsZShncmF5TGV2ZWws
IGFscGhhKSk7CisgICAgc2V0RmlsbFN0eWxlKENhbnZhc1N0eWxlOjpjcmVhdGUoZ3JheUxldmVs
LCBhbHBoYSkpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0RmlsbENv
bG9yKGZsb2F0IHIsIGZsb2F0IGcsIGZsb2F0IGIsIGZsb2F0IGEpCiB7Ci0gICAgc2V0RmlsbFN0
eWxlKG5ldyBDYW52YXNTdHlsZShyLCBnLCBiLCBhKSk7CisgICAgc2V0RmlsbFN0eWxlKENhbnZh
c1N0eWxlOjpjcmVhdGUociwgZywgYiwgYSkpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDo6c2V0RmlsbENvbG9yKGZsb2F0IGMsIGZsb2F0IG0sIGZsb2F0IHksIGZsb2F0IGss
IGZsb2F0IGEpCiB7Ci0gICAgc2V0RmlsbFN0eWxlKG5ldyBDYW52YXNTdHlsZShjLCBtLCB5LCBr
LCBhKSk7CisgICAgc2V0RmlsbFN0eWxlKENhbnZhc1N0eWxlOjpjcmVhdGUoYywgbSwgeSwgaywg
YSkpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6YmVnaW5QYXRoKCkKQEAg
LTExMTksNyArMTExOSw3IEBAIFBhc3NSZWZQdHI8Q2FudmFzUGF0dGVybj4gQ2FudmFzUmVuZGVy
aW4KICAgICAgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBvcmlnaW4gPSBTZWN1cml0eU9yaWdp
bjo6Y3JlYXRlKHVybCk7CiAgICAgICAgIG9yaWdpbkNsZWFuID0gbV9jYW52YXMtPmRvY3VtZW50
KCktPnNlY3VyaXR5T3JpZ2luKCktPmNhbkFjY2VzcyhvcmlnaW4uZ2V0KCkpOwogICAgIH0KLSAg
ICByZXR1cm4gbmV3IENhbnZhc1BhdHRlcm4oaW1hZ2UtPmNhY2hlZEltYWdlKCksIHJlcGVhdFgs
IHJlcGVhdFksIG9yaWdpbkNsZWFuKTsKKyAgICByZXR1cm4gQ2FudmFzUGF0dGVybjo6Y3JlYXRl
KGltYWdlLT5jYWNoZWRJbWFnZSgpLCByZXBlYXRYLCByZXBlYXRZLCBvcmlnaW5DbGVhbik7CiB9
CiAKIFBhc3NSZWZQdHI8Q2FudmFzUGF0dGVybj4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpj
cmVhdGVQYXR0ZXJuKEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMsCkBAIC0xMTMyLDE5ICsxMTMy
LDE3IEBAIFBhc3NSZWZQdHI8Q2FudmFzUGF0dGVybj4gQ2FudmFzUmVuZGVyaW4KICAgICAgICAg
cmV0dXJuIDA7CiAgICAgLy8gRklYTUU6IERvIHRoaXMgdGhyb3VnaCBwbGF0Zm9ybS1pbmRlcGVu
ZGVudCBHcmFwaGljc0NvbnRleHQgQVBJLgogI2lmIFBMQVRGT1JNKENHKQotICAgIENHSW1hZ2VS
ZWYgaW1hZ2UgPSBjYW52YXMtPmNyZWF0ZVBsYXRmb3JtSW1hZ2UoKTsKKyAgICBSZXRhaW5QdHI8
Q0dJbWFnZVJlZj4gaW1hZ2UgPSBjYW52YXMtPmNyZWF0ZVBsYXRmb3JtSW1hZ2UoKTsKICAgICBp
ZiAoIWltYWdlKQogICAgICAgICByZXR1cm4gMDsKLSAgICBQYXNzUmVmUHRyPENhbnZhc1BhdHRl
cm4+IHBhdHRlcm4gPSBuZXcgQ2FudmFzUGF0dGVybihpbWFnZSwgcmVwZWF0WCwgcmVwZWF0WSwg
Y2FudmFzLT5vcmlnaW5DbGVhbigpKTsKLSAgICBDR0ltYWdlUmVsZWFzZShpbWFnZSk7Ci0gICAg
cmV0dXJuIHBhdHRlcm47CisgICAgcmV0dXJuIENhbnZhc1BhdHRlcm46OmNyZWF0ZShpbWFnZS5n
ZXQoKSwgcmVwZWF0WCwgcmVwZWF0WSwgY2FudmFzLT5vcmlnaW5DbGVhbigpKTsKICNlbGlmIFBM
QVRGT1JNKENBSVJPKQogICAgIGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSA9IGNhbnZhcy0+Y3Jl
YXRlUGxhdGZvcm1JbWFnZSgpOwogICAgIGlmICghc3VyZmFjZSkKICAgICAgICAgcmV0dXJuIDA7
Ci0gICAgUGFzc1JlZlB0cjxDYW52YXNQYXR0ZXJuPiBwYXR0ZXJuID0gbmV3IENhbnZhc1BhdHRl
cm4oc3VyZmFjZSwgcmVwZWF0WCwgcmVwZWF0WSwgY2FudmFzLT5vcmlnaW5DbGVhbigpKTsKKyAg
ICBSZWZQdHI8Q2FudmFzUGF0dGVybj4gcGF0dGVybiA9IENhbnZhc1BhdHRlcm46OmNyZWF0ZShz
dXJmYWNlLCByZXBlYXRYLCByZXBlYXRZLCBjYW52YXMtPm9yaWdpbkNsZWFuKCkpOwogICAgIGNh
aXJvX3N1cmZhY2VfZGVzdHJveShzdXJmYWNlKTsKLSAgICByZXR1cm4gcGF0dGVybjsKKyAgICBy
ZXR1cm4gcGF0dGVybi5yZWxlYXNlKCk7CiAjZWxzZQogICAgIG5vdEltcGxlbWVudGVkKCk7CiAg
ICAgcmV0dXJuIDA7CkluZGV4OiBXZWJDb3JlL2h0bWwvQ2FudmFzU3R5bGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvaHRtbC9DYW52YXNTdHlsZS5jcHAJKHJldmlzaW9uIDM0Mzc2KQorKysg
V2ViQ29yZS9odG1sL0NhbnZhc1N0eWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA3IFRyb2xsdGVjaCBBU0EK
ICAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgogICoKQEAg
LTQ3LDUzICs0Nyw0NSBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBDYW52YXNTdHlsZTo6Q2Fu
dmFzU3R5bGUoY29uc3QgU3RyaW5nJiBjb2xvcikKLSAgICA6IFJlZkNvdW50ZWQ8Q2FudmFzU3R5
bGU+KDApCi0gICAgLCBtX3R5cGUoQ29sb3JTdHJpbmcpCisgICAgOiBtX3R5cGUoQ29sb3JTdHJp
bmcpCiAgICAgLCBtX2NvbG9yKGNvbG9yKQogewogfQogCiBDYW52YXNTdHlsZTo6Q2FudmFzU3R5
bGUoZmxvYXQgZ3JheUxldmVsKQotICAgIDogUmVmQ291bnRlZDxDYW52YXNTdHlsZT4oMCkKLSAg
ICAsIG1fdHlwZShHcmF5TGV2ZWwpCisgICAgOiBtX3R5cGUoR3JheUxldmVsKQogICAgICwgbV9h
bHBoYSgxKQogICAgICwgbV9ncmF5TGV2ZWwoZ3JheUxldmVsKQogewogfQogCiBDYW52YXNTdHls
ZTo6Q2FudmFzU3R5bGUoY29uc3QgU3RyaW5nJiBjb2xvciwgZmxvYXQgYWxwaGEpCi0gICAgOiBS
ZWZDb3VudGVkPENhbnZhc1N0eWxlPigwKQotICAgICwgbV90eXBlKENvbG9yU3RyaW5nV2l0aEFs
cGhhKSwgbV9jb2xvcihjb2xvciksIG1fYWxwaGEoYWxwaGEpCisgICAgOiBtX3R5cGUoQ29sb3JT
dHJpbmdXaXRoQWxwaGEpLCBtX2NvbG9yKGNvbG9yKSwgbV9hbHBoYShhbHBoYSkKIHsKIH0KIAog
Q2FudmFzU3R5bGU6OkNhbnZhc1N0eWxlKGZsb2F0IGdyYXlMZXZlbCwgZmxvYXQgYWxwaGEpCi0g
ICAgOiBSZWZDb3VudGVkPENhbnZhc1N0eWxlPigwKQotICAgICwgbV90eXBlKEdyYXlMZXZlbCks
IG1fYWxwaGEoYWxwaGEpLCBtX2dyYXlMZXZlbChncmF5TGV2ZWwpCisgICAgOiBtX3R5cGUoR3Jh
eUxldmVsKSwgbV9hbHBoYShhbHBoYSksIG1fZ3JheUxldmVsKGdyYXlMZXZlbCkKIHsKIH0KIAog
Q2FudmFzU3R5bGU6OkNhbnZhc1N0eWxlKGZsb2F0IHIsIGZsb2F0IGcsIGZsb2F0IGIsIGZsb2F0
IGEpCi0gICAgOiBSZWZDb3VudGVkPENhbnZhc1N0eWxlPigwKQotICAgICwgbV90eXBlKFJHQkEp
LCBtX2FscGhhKGEpLCBtX3JlZChyKSwgbV9ncmVlbihnKSwgbV9ibHVlKGIpCisgICAgOiBtX3R5
cGUoUkdCQSksIG1fYWxwaGEoYSksIG1fcmVkKHIpLCBtX2dyZWVuKGcpLCBtX2JsdWUoYikKIHsK
IH0KIAogQ2FudmFzU3R5bGU6OkNhbnZhc1N0eWxlKGZsb2F0IGMsIGZsb2F0IG0sIGZsb2F0IHks
IGZsb2F0IGssIGZsb2F0IGEpCi0gICAgOiBSZWZDb3VudGVkPENhbnZhc1N0eWxlPigwKQotICAg
ICwgbV90eXBlKENNWUtBKSwgbV9hbHBoYShhKSwgbV9jeWFuKGMpLCBtX21hZ2VudGEobSksIG1f
eWVsbG93KHkpLCBtX2JsYWNrKGspCisgICAgOiBtX3R5cGUoQ01ZS0EpLCBtX2FscGhhKGEpLCBt
X2N5YW4oYyksIG1fbWFnZW50YShtKSwgbV95ZWxsb3coeSksIG1fYmxhY2soaykKIHsKIH0KIAog
Q2FudmFzU3R5bGU6OkNhbnZhc1N0eWxlKFBhc3NSZWZQdHI8Q2FudmFzR3JhZGllbnQ+IGdyYWRp
ZW50KQotICAgIDogUmVmQ291bnRlZDxDYW52YXNTdHlsZT4oMCkKLSAgICAsIG1fdHlwZShncmFk
aWVudCA/IEdyYWRpZW50IDogQ29sb3JTdHJpbmcpLCBtX2dyYWRpZW50KGdyYWRpZW50KQorICAg
IDogbV90eXBlKGdyYWRpZW50ID8gR3JhZGllbnQgOiBDb2xvclN0cmluZyksIG1fZ3JhZGllbnQo
Z3JhZGllbnQpCiB7CiB9CiAKIENhbnZhc1N0eWxlOjpDYW52YXNTdHlsZShQYXNzUmVmUHRyPENh
bnZhc1BhdHRlcm4+IHBhdHRlcm4pCi0gICAgOiBSZWZDb3VudGVkPENhbnZhc1N0eWxlPigwKQot
ICAgICwgbV90eXBlKHBhdHRlcm4gPyBJbWFnZVBhdHRlcm4gOiBDb2xvclN0cmluZyksIG1fcGF0
dGVybihwYXR0ZXJuKQorICAgIDogbV90eXBlKHBhdHRlcm4gPyBJbWFnZVBhdHRlcm4gOiBDb2xv
clN0cmluZyksIG1fcGF0dGVybihwYXR0ZXJuKQogewogfQogCkluZGV4OiBXZWJDb3JlL2h0bWwv
Q2FudmFzU3R5bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvQ2FudmFzU3R5bGUuaAko
cmV2aXNpb24gMzQzNzYpCisrKyBXZWJDb3JlL2h0bWwvQ2FudmFzU3R5bGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29t
cHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYs
IDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0zNiwxNCArMzYsMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAg
ICAgY2xhc3MgQ2FudmFzU3R5bGUgOiBwdWJsaWMgUmVmQ291bnRlZDxDYW52YXNTdHlsZT4gewog
ICAgIHB1YmxpYzoKLSAgICAgICAgQ2FudmFzU3R5bGUoY29uc3QgU3RyaW5nJiBjb2xvcik7Ci0g
ICAgICAgIENhbnZhc1N0eWxlKGZsb2F0IGdyYXlMZXZlbCk7Ci0gICAgICAgIENhbnZhc1N0eWxl
KGNvbnN0IFN0cmluZyYgY29sb3IsIGZsb2F0IGFscGhhKTsKLSAgICAgICAgQ2FudmFzU3R5bGUo
ZmxvYXQgZ3JheUxldmVsLCBmbG9hdCBhbHBoYSk7Ci0gICAgICAgIENhbnZhc1N0eWxlKGZsb2F0
IHIsIGZsb2F0IGcsIGZsb2F0IGIsIGZsb2F0IGEpOwotICAgICAgICBDYW52YXNTdHlsZShmbG9h
dCBjLCBmbG9hdCBtLCBmbG9hdCB5LCBmbG9hdCBrLCBmbG9hdCBhKTsKLSAgICAgICAgQ2FudmFz
U3R5bGUoUGFzc1JlZlB0cjxDYW52YXNHcmFkaWVudD4pOwotICAgICAgICBDYW52YXNTdHlsZShQ
YXNzUmVmUHRyPENhbnZhc1BhdHRlcm4+KTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2Fu
dmFzU3R5bGU+IGNyZWF0ZShjb25zdCBTdHJpbmcmIGNvbG9yKSB7IHJldHVybiBhZG9wdFJlZihu
ZXcgQ2FudmFzU3R5bGUoY29sb3IpKTsgfQorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDYW52
YXNTdHlsZT4gY3JlYXRlKGZsb2F0IGdyYXlMZXZlbCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IENh
bnZhc1N0eWxlKGdyYXlMZXZlbCkpOyB9CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENhbnZh
c1N0eWxlPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBjb2xvciwgZmxvYXQgYWxwaGEpIHsgcmV0dXJu
IGFkb3B0UmVmKG5ldyBDYW52YXNTdHlsZShjb2xvciwgYWxwaGEpKTsgfQorICAgICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxDYW52YXNTdHlsZT4gY3JlYXRlKGZsb2F0IGdyYXlMZXZlbCwgZmxvYXQg
YWxwaGEpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBDYW52YXNTdHlsZShncmF5TGV2ZWwsIGFscGhh
KSk7IH0KKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2FudmFzU3R5bGU+IGNyZWF0ZShmbG9h
dCByLCBmbG9hdCBnLCBmbG9hdCBiLCBmbG9hdCBhKSB7IHJldHVybiBhZG9wdFJlZihuZXcgQ2Fu
dmFzU3R5bGUociwgZywgYiwgYSkpOyB9CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENhbnZh
c1N0eWxlPiBjcmVhdGUoZmxvYXQgYywgZmxvYXQgbSwgZmxvYXQgeSwgZmxvYXQgaywgZmxvYXQg
YSkgeyByZXR1cm4gYWRvcHRSZWYobmV3IENhbnZhc1N0eWxlKGMsIG0sIHksIGssIGEpKTsgfQor
ICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDYW52YXNTdHlsZT4gY3JlYXRlKFBhc3NSZWZQdHI8
Q2FudmFzR3JhZGllbnQ+IGdyYWRpZW50KSB7IHJldHVybiBhZG9wdFJlZihuZXcgQ2FudmFzU3R5
bGUoZ3JhZGllbnQpKTsgfQorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDYW52YXNTdHlsZT4g
Y3JlYXRlKFBhc3NSZWZQdHI8Q2FudmFzUGF0dGVybj4gcGF0dGVybikgeyByZXR1cm4gYWRvcHRS
ZWYobmV3IENhbnZhc1N0eWxlKHBhdHRlcm4pKTsgfQogCiAgICAgICAgIFN0cmluZyBjb2xvcigp
IGNvbnN0IHsgcmV0dXJuIG1fY29sb3I7IH0KICAgICAgICAgQ2FudmFzR3JhZGllbnQqIGNhbnZh
c0dyYWRpZW50KCkgY29uc3QgeyByZXR1cm4gbV9ncmFkaWVudC5nZXQoKTsgfQpAQCAtNTYsNiAr
NTYsMTUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIGFwcGx5U3Ryb2tlQ29s
b3IoR3JhcGhpY3NDb250ZXh0Kik7CiAKICAgICBwcml2YXRlOgorICAgICAgICBDYW52YXNTdHls
ZShjb25zdCBTdHJpbmcmIGNvbG9yKTsKKyAgICAgICAgQ2FudmFzU3R5bGUoZmxvYXQgZ3JheUxl
dmVsKTsKKyAgICAgICAgQ2FudmFzU3R5bGUoY29uc3QgU3RyaW5nJiBjb2xvciwgZmxvYXQgYWxw
aGEpOworICAgICAgICBDYW52YXNTdHlsZShmbG9hdCBncmF5TGV2ZWwsIGZsb2F0IGFscGhhKTsK
KyAgICAgICAgQ2FudmFzU3R5bGUoZmxvYXQgciwgZmxvYXQgZywgZmxvYXQgYiwgZmxvYXQgYSk7
CisgICAgICAgIENhbnZhc1N0eWxlKGZsb2F0IGMsIGZsb2F0IG0sIGZsb2F0IHksIGZsb2F0IGss
IGZsb2F0IGEpOworICAgICAgICBDYW52YXNTdHlsZShQYXNzUmVmUHRyPENhbnZhc0dyYWRpZW50
Pik7CisgICAgICAgIENhbnZhc1N0eWxlKFBhc3NSZWZQdHI8Q2FudmFzUGF0dGVybj4pOworCiAg
ICAgICAgIGVudW0gVHlwZSB7IENvbG9yU3RyaW5nLCBDb2xvclN0cmluZ1dpdGhBbHBoYSwgR3Jh
eUxldmVsLCBSR0JBLCBDTVlLQSwgR3JhZGllbnQsIEltYWdlUGF0dGVybiB9OwogCiAgICAgICAg
IFR5cGUgbV90eXBlOwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxDb2xsZWN0aW9uLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTENvbGxlY3Rpb24uY3BwCShyZXZpc2lvbiAzNDM3
NikKKysrIFdlYkNvcmUvaHRtbC9IVE1MQ29sbGVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM2LDggKzM2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEhUTUxO
YW1lczsKIAogSFRNTENvbGxlY3Rpb246OkhUTUxDb2xsZWN0aW9uKFBhc3NSZWZQdHI8Tm9kZT4g
YmFzZSwgVHlwZSB0eXBlKQotICAgIDogUmVmQ291bnRlZDxIVE1MQ29sbGVjdGlvbj4oMCkKLSAg
ICAsIG1faWRzRG9uZShmYWxzZSkKKyAgICA6IG1faWRzRG9uZShmYWxzZSkKICAgICAsIG1fYmFz
ZShiYXNlKQogICAgICwgbV90eXBlKHR5cGUpCiAgICAgLCBtX2luZm8obV9iYXNlLT5pc0RvY3Vt
ZW50Tm9kZSgpID8gc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihtX2Jhc2UuZ2V0KCkpLT5jb2xsZWN0
aW9uSW5mbyh0eXBlKSA6IDApCkBAIC00Niw4ICs0NSw3IEBAIEhUTUxDb2xsZWN0aW9uOjpIVE1M
Q29sbGVjdGlvbihQYXNzUmVmUHQKIH0KIAogSFRNTENvbGxlY3Rpb246OkhUTUxDb2xsZWN0aW9u
KFBhc3NSZWZQdHI8Tm9kZT4gYmFzZSwgVHlwZSB0eXBlLCBDb2xsZWN0aW9uSW5mbyogaW5mbykK
LSAgICA6IFJlZkNvdW50ZWQ8SFRNTENvbGxlY3Rpb24+KDApCi0gICAgLCBtX2lkc0RvbmUoZmFs
c2UpCisgICAgOiBtX2lkc0RvbmUoZmFsc2UpCiAgICAgLCBtX2Jhc2UoYmFzZSkKICAgICAsIG1f
dHlwZSh0eXBlKQogICAgICwgbV9pbmZvKGluZm8pCkBAIC01NSw2ICs1MywxMSBAQCBIVE1MQ29s
bGVjdGlvbjo6SFRNTENvbGxlY3Rpb24oUGFzc1JlZlB0CiB7CiB9CiAKK1Bhc3NSZWZQdHI8SFRN
TENvbGxlY3Rpb24+IEhUTUxDb2xsZWN0aW9uOjpjcmVhdGUoUGFzc1JlZlB0cjxOb2RlPiBiYXNl
LCBUeXBlIHR5cGUpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBIVE1MQ29sbGVjdGlvbihi
YXNlLCB0eXBlKSk7Cit9CisKIEhUTUxDb2xsZWN0aW9uOjp+SFRNTENvbGxlY3Rpb24oKQogewog
ICAgIGlmIChtX293bnNJbmZvKQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxDb2xsZWN0aW9uLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxDb2xsZWN0aW9uLmgJKHJldmlzaW9uIDM0
Mzc2KQorKysgV2ViQ29yZS9odG1sL0hUTUxDb2xsZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAg
LTc2LDcgKzc2LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdCBUeXBlIEZpcnN0TmFtZWRE
b2N1bWVudENhY2hlZFR5cGUgPSBXaW5kb3dOYW1lZEl0ZW1zOwogICAgIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBOdW1OYW1lZERvY3VtZW50Q2FjaGVkVHlwZXMgPSBEb2N1bWVudE5hbWVkSXRlbXMg
LSBXaW5kb3dOYW1lZEl0ZW1zICsgMTsKIAotICAgIEhUTUxDb2xsZWN0aW9uKFBhc3NSZWZQdHI8
Tm9kZT4gYmFzZSwgVHlwZSk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTENvbGxlY3Rpb24+
IGNyZWF0ZShQYXNzUmVmUHRyPE5vZGU+IGJhc2UsIFR5cGUpOwogICAgIHZpcnR1YWwgfkhUTUxD
b2xsZWN0aW9uKCk7CiAgICAgCiAgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7CkBAIC0xMzks
NiArMTM5LDggQEAgcHJvdGVjdGVkOgogICAgIG11dGFibGUgYm9vbCBtX2lkc0RvbmU7IC8vIGZv
ciBuZXh0TmFtZWRJdGVtKCkKIAogcHJpdmF0ZToKKyAgICBIVE1MQ29sbGVjdGlvbihQYXNzUmVm
UHRyPE5vZGU+IGJhc2UsIFR5cGUpOworCiAgICAgdmlydHVhbCBFbGVtZW50KiBpdGVtQWZ0ZXIo
RWxlbWVudCopIGNvbnN0OwogICAgIHZpcnR1YWwgdW5zaWduZWQgY2FsY0xlbmd0aCgpIGNvbnN0
OwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVOYW1lQ2FjaGUoKSBjb25zdDsKSW5kZXg6IFdlYkNv
cmUvaHRtbC9IVE1MRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxF
bGVtZW50LmNwcAkocmV2aXNpb24gMzQzNzYpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MDMsNyArNzAzLDcgQEAgdm9pZCBIVE1MRWxlbWVudDo6
c2V0VGFiSW5kZXgoaW50IHZhbHVlKQogCiBQYXNzUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBIVE1M
RWxlbWVudDo6Y2hpbGRyZW4oKQogewotICAgIHJldHVybiBuZXcgSFRNTENvbGxlY3Rpb24odGhp
cywgSFRNTENvbGxlY3Rpb246Ok5vZGVDaGlsZHJlbik7CisgICAgcmV0dXJuIEhUTUxDb2xsZWN0
aW9uOjpjcmVhdGUodGhpcywgSFRNTENvbGxlY3Rpb246Ok5vZGVDaGlsZHJlbik7CiB9CiAKIC8v
IERPTSBTZWN0aW9uIDEuMS4xCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEZvcm1Db2xsZWN0aW9u
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEZvcm1Db2xsZWN0aW9uLmNwcAko
cmV2aXNpb24gMzQzNzYpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEZvcm1Db2xsZWN0aW9uLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDcsNiArNDcsMTEgQEAgSFRNTEZvcm1Db2xsZWN0aW9uOjpIVE1M
Rm9ybUNvbGxlY3Rpb24oUAogewogfQogCitQYXNzUmVmUHRyPEhUTUxGb3JtQ29sbGVjdGlvbj4g
SFRNTEZvcm1Db2xsZWN0aW9uOjpjcmVhdGUoUGFzc1JlZlB0cjxIVE1MRm9ybUVsZW1lbnQ+IGZv
cm0pCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBIVE1MRm9ybUNvbGxlY3Rpb24oZm9ybSkp
OworfQorCiBIVE1MRm9ybUNvbGxlY3Rpb246On5IVE1MRm9ybUNvbGxlY3Rpb24oKQogewogfQpJ
bmRleDogV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29sbGVjdGlvbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvaHRtbC9IVE1MRm9ybUNvbGxlY3Rpb24uaAkocmV2aXNpb24gMzQzNzYpCisrKyBXZWJD
b3JlL2h0bWwvSFRNTEZvcm1Db2xsZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3
IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcp
CiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcp
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1
LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwpAQCAtMzUsOCArMzUsOSBAQCBjbGFzcyBRdWFsaWZpZWROYW1lOwogCiBj
bGFzcyBIVE1MRm9ybUNvbGxlY3Rpb24gOiBwdWJsaWMgSFRNTENvbGxlY3Rpb24gewogcHVibGlj
OgotICAgIEhUTUxGb3JtQ29sbGVjdGlvbihQYXNzUmVmUHRyPEhUTUxGb3JtRWxlbWVudD4pOwot
ICAgIH5IVE1MRm9ybUNvbGxlY3Rpb24oKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MRm9y
bUNvbGxlY3Rpb24+IGNyZWF0ZShQYXNzUmVmUHRyPEhUTUxGb3JtRWxlbWVudD4pOworCisgICAg
dmlydHVhbCB+SFRNTEZvcm1Db2xsZWN0aW9uKCk7CiAKICAgICB2aXJ0dWFsIE5vZGUqIGl0ZW0o
dW5zaWduZWQgaW5kZXgpIGNvbnN0OwogICAgIHZpcnR1YWwgTm9kZSogbmV4dEl0ZW0oKSBjb25z
dDsKQEAgLTQ1LDYgKzQ2LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgTm9kZSogbmV4dE5hbWVk
SXRlbShjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0OwogCiBwcml2YXRlOgorICAgIEhUTUxGb3Jt
Q29sbGVjdGlvbihQYXNzUmVmUHRyPEhUTUxGb3JtRWxlbWVudD4pOworCiAgICAgdmlydHVhbCB2
b2lkIHVwZGF0ZU5hbWVDYWNoZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgdW5zaWduZWQgY2FsY0xl
bmd0aCgpIGNvbnN0OwogCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcAkocmV2aXNpb24g
MzQzNzYpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjE4LDcgKzYxOCw3IEBAIHZvaWQgSFRNTEZvcm1FbGVtZW50OjpyZW1vdmVJbWdFbGVt
ZW50KEgKIAogUGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4gSFRNTEZvcm1FbGVtZW50OjplbGVt
ZW50cygpCiB7Ci0gICAgcmV0dXJuIG5ldyBIVE1MRm9ybUNvbGxlY3Rpb24odGhpcyk7CisgICAg
cmV0dXJuIEhUTUxGb3JtQ29sbGVjdGlvbjo6Y3JlYXRlKHRoaXMpOwogfQogCiBTdHJpbmcgSFRN
TEZvcm1FbGVtZW50OjpuYW1lKCkgY29uc3QKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MTWFwRWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxNYXBFbGVtZW50LmNwcAko
cmV2aXNpb24gMzQzNzYpCisrKyBXZWJDb3JlL2h0bWwvSFRNTE1hcEVsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05NSw3ICs5NSw3IEBAIHZvaWQgSFRNTE1hcEVsZW1lbnQ6OnBhcnNlTWFw
cGVkQXR0cmlidXQKIAogUGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4gSFRNTE1hcEVsZW1lbnQ6
OmFyZWFzKCkKIHsKLSAgICByZXR1cm4gbmV3IEhUTUxDb2xsZWN0aW9uKHRoaXMsIEhUTUxDb2xs
ZWN0aW9uOjpNYXBBcmVhcyk7CisgICAgcmV0dXJuIEhUTUxDb2xsZWN0aW9uOjpjcmVhdGUodGhp
cywgSFRNTENvbGxlY3Rpb246Ok1hcEFyZWFzKTsKIH0KIAogU3RyaW5nIEhUTUxNYXBFbGVtZW50
OjpuYW1lKCkgY29uc3QKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAJKHJldmlzaW9u
IDM0Mzc2KQorKysgV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNzcsNyArMjc3LDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojpsb2FkKEV4Y2Vw
dGlvbkNvZAogICAgIC8vIDIKICAgICBpZiAobV9iZWd1bikgewogICAgICAgICBtX2JlZ3VuID0g
ZmFsc2U7Ci0gICAgICAgIG1fZXJyb3IgPSBuZXcgTWVkaWFFcnJvcihNZWRpYUVycm9yOjpNRURJ
QV9FUlJfQUJPUlRFRCk7CisgICAgICAgIG1fZXJyb3IgPSBNZWRpYUVycm9yOjpjcmVhdGUoTWVk
aWFFcnJvcjo6TUVESUFfRVJSX0FCT1JURUQpOwogICAgICAgICBpbml0QW5kRGlzcGF0Y2hQcm9n
cmVzc0V2ZW50KGFib3J0RXZlbnQpOwogICAgICAgICBpZiAobV9sb2FkTmVzdGluZ0xldmVsIDwg
bV90ZXJtaW5hdGVMb2FkQmVsb3dOZXN0aW5nTGV2ZWwpCiAgICAgICAgICAgICBnb3RvIGVuZDsK
QEAgLTM2Myw3ICszNjMsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlhUGxheWVyTmV0
d29yCiAgICAgICAgIC8vZGVsZXRlIG1fcGxheWVyOwogICAgICAgICAvL21fcGxheWVyID0gMDsK
ICAgICAgICAgLy8gRklYTUUgYmV0dGVyIGVycm9yIGhhbmRsaW5nCi0gICAgICAgIG1fZXJyb3Ig
PSBuZXcgTWVkaWFFcnJvcihNZWRpYUVycm9yOjpNRURJQV9FUlJfTkVUV09SSyk7CisgICAgICAg
IG1fZXJyb3IgPSBNZWRpYUVycm9yOjpjcmVhdGUoTWVkaWFFcnJvcjo6TUVESUFfRVJSX05FVFdP
UkspOwogICAgICAgICBtX2JlZ3VuID0gZmFsc2U7CiAgICAgICAgIG1fcHJvZ3Jlc3NFdmVudFRp
bWVyLnN0b3AoKTsKICAgICAgICAgbV9idWZmZXJpbmdSYXRlID0gMDsKQEAgLTEwMDIsNyArMTAw
Miw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6d2lsbFNhdmVUb0NhY2hlKCkKICAgICAgICAg
bV9wbGF5ZXIuY2xlYXIoKTsKICAgICAgICAgbV9wcm9ncmVzc0V2ZW50VGltZXIuc3RvcCgpOwog
Ci0gICAgICAgIG1fZXJyb3IgPSBuZXcgTWVkaWFFcnJvcihNZWRpYUVycm9yOjpNRURJQV9FUlJf
QUJPUlRFRCk7CisgICAgICAgIG1fZXJyb3IgPSBNZWRpYUVycm9yOjpjcmVhdGUoTWVkaWFFcnJv
cjo6TUVESUFfRVJSX0FCT1JURUQpOwogICAgICAgICBtX2JlZ3VuID0gZmFsc2U7CiAgICAgICAg
IGluaXRBbmREaXNwYXRjaFByb2dyZXNzRXZlbnQoYWJvcnRFdmVudCk7CiAgICAgICAgIGlmICht
X25ldHdvcmtTdGF0ZSA+PSBMT0FESU5HKSB7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTE5hbWVD
b2xsZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxOYW1lQ29sbGVjdGlv
bi5oCShyZXZpc2lvbiAzNDM3NikKKysrIFdlYkNvcmUvaHRtbC9IVE1MTmFtZUNvbGxlY3Rpb24u
aAkod29ya2luZyBjb3B5KQpAQCAtMzIsOSArMzIsMTQgQEAgY2xhc3MgRG9jdW1lbnQ7CiAKIGNs
YXNzIEhUTUxOYW1lQ29sbGVjdGlvbiA6IHB1YmxpYyBIVE1MQ29sbGVjdGlvbiB7CiBwdWJsaWM6
Ci0gICAgSFRNTE5hbWVDb2xsZWN0aW9uKFBhc3NSZWZQdHI8RG9jdW1lbnQ+LCBUeXBlLCBjb25z
dCBTdHJpbmcmIG5hbWUpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxOYW1lQ29sbGVjdGlv
bj4gY3JlYXRlKFBhc3NSZWZQdHI8RG9jdW1lbnQ+IGRvY3VtZW50LCBUeXBlIHR5cGUsIGNvbnN0
IFN0cmluZyYgbmFtZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSFRNTE5h
bWVDb2xsZWN0aW9uKGRvY3VtZW50LCB0eXBlLCBuYW1lKSk7CisgICAgfQogICAgIAogcHJpdmF0
ZToKKyAgICBIVE1MTmFtZUNvbGxlY3Rpb24oUGFzc1JlZlB0cjxEb2N1bWVudD4sIFR5cGUsIGNv
bnN0IFN0cmluZyYgbmFtZSk7CisKICAgICB2aXJ0dWFsIEVsZW1lbnQqIGl0ZW1BZnRlcihFbGVt
ZW50KikgY29uc3Q7CiAKICAgICBTdHJpbmcgbV9uYW1lOwpJbmRleDogV2ViQ29yZS9odG1sL0hU
TUxPcHRpb25zQ29sbGVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxP
cHRpb25zQ29sbGVjdGlvbi5jcHAJKHJldmlzaW9uIDM0Mzc2KQorKysgV2ViQ29yZS9odG1sL0hU
TUxPcHRpb25zQ29sbGVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDExIEBA
IEhUTUxPcHRpb25zQ29sbGVjdGlvbjo6SFRNTE9wdGlvbnNDb2xsZWMKIHsKIH0KIAorUGFzc1Jl
ZlB0cjxIVE1MT3B0aW9uc0NvbGxlY3Rpb24+IEhUTUxPcHRpb25zQ29sbGVjdGlvbjo6Y3JlYXRl
KFBhc3NSZWZQdHI8SFRNTFNlbGVjdEVsZW1lbnQ+IHNlbGVjdCkKK3sKKyAgICByZXR1cm4gYWRv
cHRSZWYobmV3IEhUTUxPcHRpb25zQ29sbGVjdGlvbihzZWxlY3QpKTsKK30KKwogdm9pZCBIVE1M
T3B0aW9uc0NvbGxlY3Rpb246OmFkZChQYXNzUmVmUHRyPEhUTUxPcHRpb25FbGVtZW50PiBlbGVt
ZW50LCBFeGNlcHRpb25Db2RlICZlYykKIHsKICAgICBhZGQoZWxlbWVudCwgbGVuZ3RoKCksIGVj
KTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MT3B0aW9uc0NvbGxlY3Rpb24uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTE9wdGlvbnNDb2xsZWN0aW9uLmgJKHJldmlzaW9uIDM0Mzc2
KQorKysgV2ViQ29yZS9odG1sL0hUTUxPcHRpb25zQ29sbGVjdGlvbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yLDcgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xs
QGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3Rv
QGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDAgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtk
ZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2
LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwpAQCAtMzUsNyArMzUsNyBAQCB0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwogCiBj
bGFzcyBIVE1MT3B0aW9uc0NvbGxlY3Rpb24gOiBwdWJsaWMgSFRNTENvbGxlY3Rpb24gewogcHVi
bGljOgotICAgIEhUTUxPcHRpb25zQ29sbGVjdGlvbihQYXNzUmVmUHRyPEhUTUxTZWxlY3RFbGVt
ZW50Pik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTE9wdGlvbnNDb2xsZWN0aW9uPiBjcmVh
dGUoUGFzc1JlZlB0cjxIVE1MU2VsZWN0RWxlbWVudD4pOwogCiAgICAgdm9pZCBhZGQoUGFzc1Jl
ZlB0cjxIVE1MT3B0aW9uRWxlbWVudD4sIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lkIGFkZChQ
YXNzUmVmUHRyPEhUTUxPcHRpb25FbGVtZW50PiwgaW50IGluZGV4LCBFeGNlcHRpb25Db2RlJik7
CkBAIC00NSw2ICs0NSw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFNlbGVjdGVkSW5kZXgoaW50
KTsKIAogICAgIHZvaWQgc2V0TGVuZ3RoKHVuc2lnbmVkLCBFeGNlcHRpb25Db2RlJik7CisKK3By
aXZhdGU6CisgICAgSFRNTE9wdGlvbnNDb2xsZWN0aW9uKFBhc3NSZWZQdHI8SFRNTFNlbGVjdEVs
ZW1lbnQ+KTsKIH07CiAKIH0gLy9uYW1lc3BhY2UKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MU2Vs
ZWN0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVt
ZW50LmNwcAkocmV2aXNpb24gMzQzNzYpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OTIsNyArNDkyLDcgQEAgaW50IEhUTUxTZWxlY3RF
bGVtZW50OjpsaXN0VG9PcHRpb25JbmRleAogCiBQYXNzUmVmUHRyPEhUTUxPcHRpb25zQ29sbGVj
dGlvbj4gSFRNTFNlbGVjdEVsZW1lbnQ6Om9wdGlvbnMoKQogewotICAgIHJldHVybiBuZXcgSFRN
TE9wdGlvbnNDb2xsZWN0aW9uKHRoaXMpOworICAgIHJldHVybiBIVE1MT3B0aW9uc0NvbGxlY3Rp
b246OmNyZWF0ZSh0aGlzKTsKIH0KIAogdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6cmVjYWxjTGlz
dEl0ZW1zKGJvb2wgdXBkYXRlU2VsZWN0ZWRTdGF0ZXMpIGNvbnN0CkluZGV4OiBXZWJDb3JlL2h0
bWwvSFRNTFRhYmxlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxU
YWJsZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAzNDM3NikKKysrIFdlYkNvcmUvaHRtbC9IVE1MVGFi
bGVFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjU4LDEyICs2NTgsMTIgQEAgYm9vbCBI
VE1MVGFibGVFbGVtZW50Ojppc1VSTEF0dHJpYnV0ZShBdAogCiBQYXNzUmVmUHRyPEhUTUxDb2xs
ZWN0aW9uPiBIVE1MVGFibGVFbGVtZW50Ojpyb3dzKCkKIHsKLSAgICByZXR1cm4gbmV3IEhUTUxU
YWJsZVJvd3NDb2xsZWN0aW9uKHRoaXMpOworICAgIHJldHVybiBIVE1MVGFibGVSb3dzQ29sbGVj
dGlvbjo6Y3JlYXRlKHRoaXMpOwogfQogCiBQYXNzUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBIVE1M
VGFibGVFbGVtZW50Ojp0Qm9kaWVzKCkKIHsKLSAgICByZXR1cm4gbmV3IEhUTUxDb2xsZWN0aW9u
KHRoaXMsIEhUTUxDb2xsZWN0aW9uOjpUYWJsZVRCb2RpZXMpOworICAgIHJldHVybiBIVE1MQ29s
bGVjdGlvbjo6Y3JlYXRlKHRoaXMsIEhUTUxDb2xsZWN0aW9uOjpUYWJsZVRCb2RpZXMpOwogfQog
CiBTdHJpbmcgSFRNTFRhYmxlRWxlbWVudDo6YWxpZ24oKSBjb25zdApJbmRleDogV2ViQ29yZS9o
dG1sL0hUTUxUYWJsZVJvd0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9I
VE1MVGFibGVSb3dFbGVtZW50LmNwcAkocmV2aXNpb24gMzQzNzYpCisrKyBXZWJDb3JlL2h0bWwv
SFRNTFRhYmxlUm93RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2Nyw3ICsxNjcsNyBA
QCB2b2lkIEhUTUxUYWJsZVJvd0VsZW1lbnQ6OmRlbGV0ZUNlbGwoaW50CiAKIFBhc3NSZWZQdHI8
SFRNTENvbGxlY3Rpb24+IEhUTUxUYWJsZVJvd0VsZW1lbnQ6OmNlbGxzKCkKIHsKLSAgICByZXR1
cm4gbmV3IEhUTUxDb2xsZWN0aW9uKHRoaXMsIEhUTUxDb2xsZWN0aW9uOjpUUkNlbGxzKTsKKyAg
ICByZXR1cm4gSFRNTENvbGxlY3Rpb246OmNyZWF0ZSh0aGlzLCBIVE1MQ29sbGVjdGlvbjo6VFJD
ZWxscyk7CiB9CiAKIHZvaWQgSFRNTFRhYmxlUm93RWxlbWVudDo6c2V0Q2VsbHMoSFRNTENvbGxl
Y3Rpb24gKiwgRXhjZXB0aW9uQ29kZSYgZWMpCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFRhYmxl
Um93c0NvbGxlY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MVGFibGVS
b3dzQ29sbGVjdGlvbi5jcHAJKHJldmlzaW9uIDM0Mzc2KQorKysgV2ViQ29yZS9odG1sL0hUTUxU
YWJsZVJvd3NDb2xsZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ5LDEwICsxNDksMTUg
QEAgSFRNTFRhYmxlUm93RWxlbWVudCogSFRNTFRhYmxlUm93c0NvbGxlYwogfQogCiBIVE1MVGFi
bGVSb3dzQ29sbGVjdGlvbjo6SFRNTFRhYmxlUm93c0NvbGxlY3Rpb24oUGFzc1JlZlB0cjxIVE1M
VGFibGVFbGVtZW50PiB0YWJsZSkKLSAgICA6IEhUTUxDb2xsZWN0aW9uKHRhYmxlLCBPdGhlcikK
KyAgICA6IEhUTUxDb2xsZWN0aW9uKHRhYmxlLCBPdGhlciwgMCkKIHsKIH0KIAorUGFzc1JlZlB0
cjxIVE1MVGFibGVSb3dzQ29sbGVjdGlvbj4gSFRNTFRhYmxlUm93c0NvbGxlY3Rpb246OmNyZWF0
ZShQYXNzUmVmUHRyPEhUTUxUYWJsZUVsZW1lbnQ+IHRhYmxlKQoreworICAgIHJldHVybiBhZG9w
dFJlZihuZXcgSFRNTFRhYmxlUm93c0NvbGxlY3Rpb24odGFibGUpKTsKK30KKwogRWxlbWVudCog
SFRNTFRhYmxlUm93c0NvbGxlY3Rpb246Oml0ZW1BZnRlcihFbGVtZW50KiBwcmV2aW91cykgY29u
c3QKIHsKICAgICBBU1NFUlQoIXByZXZpb3VzIHx8IHByZXZpb3VzLT5oYXNMb2NhbE5hbWUodHJU
YWcpKTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MVGFibGVSb3dzQ29sbGVjdGlvbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MVGFibGVSb3dzQ29sbGVjdGlvbi5oCShyZXZpc2lv
biAzNDM3NikKKysrIFdlYkNvcmUvaHRtbC9IVE1MVGFibGVSb3dzQ29sbGVjdGlvbi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOCwxMiArMzgsMTQgQEAgY2xhc3MgSFRNTFRhYmxlUm93RWxlbWVudDsK
IAogY2xhc3MgSFRNTFRhYmxlUm93c0NvbGxlY3Rpb24gOiBwdWJsaWMgSFRNTENvbGxlY3Rpb24g
ewogcHVibGljOgotICAgIEhUTUxUYWJsZVJvd3NDb2xsZWN0aW9uKFBhc3NSZWZQdHI8SFRNTFRh
YmxlRWxlbWVudD4pOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxUYWJsZVJvd3NDb2xsZWN0
aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxIVE1MVGFibGVFbGVtZW50Pik7CiAKICAgICBzdGF0aWMg
SFRNTFRhYmxlUm93RWxlbWVudCogcm93QWZ0ZXIoSFRNTFRhYmxlRWxlbWVudCosIEhUTUxUYWJs
ZVJvd0VsZW1lbnQqKTsKICAgICBzdGF0aWMgSFRNTFRhYmxlUm93RWxlbWVudCogbGFzdFJvdyhI
VE1MVGFibGVFbGVtZW50Kik7CiAKIHByaXZhdGU6CisgICAgSFRNTFRhYmxlUm93c0NvbGxlY3Rp
b24oUGFzc1JlZlB0cjxIVE1MVGFibGVFbGVtZW50Pik7CisKICAgICB2aXJ0dWFsIEVsZW1lbnQq
IGl0ZW1BZnRlcihFbGVtZW50KikgY29uc3Q7CiB9OwogCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRN
TFRhYmxlU2VjdGlvbkVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1M
VGFibGVTZWN0aW9uRWxlbWVudC5jcHAJKHJldmlzaW9uIDM0Mzc2KQorKysgV2ViQ29yZS9odG1s
L0hUTUxUYWJsZVNlY3Rpb25FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY5LDcgKzE2
OSw3IEBAIHZvaWQgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ6OnNldFZBbGlnbigKIAogUGFzc1Jl
ZlB0cjxIVE1MQ29sbGVjdGlvbj4gSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ6OnJvd3MoKQogewot
ICAgIHJldHVybiBuZXcgSFRNTENvbGxlY3Rpb24odGhpcywgSFRNTENvbGxlY3Rpb246OlRTZWN0
aW9uUm93cyk7CisgICAgcmV0dXJuIEhUTUxDb2xsZWN0aW9uOjpjcmVhdGUodGhpcywgSFRNTENv
bGxlY3Rpb246OlRTZWN0aW9uUm93cyk7CiB9CiAKIH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9NZWRp
YUVycm9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL01lZGlhRXJyb3IuaAkocmV2aXNp
b24gMzQzNzYpCisrKyBXZWJDb3JlL2h0bWwvTWVkaWFFcnJvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNiwxMSArMzYsMTMgQEAgY2xhc3MgTWVkaWFFcnJvciA6IHB1YmxpYyBSZWZDb3VudGVkPE1l
ZAogcHVibGljOgogICAgIGVudW0gQ29kZSB7IE1FRElBX0VSUl9BQk9SVEVEID0gMSwgTUVESUFf
RVJSX05FVFdPUkssIE1FRElBX0VSUl9ERUNPREUgfTsKIAotICAgIE1lZGlhRXJyb3IoQ29kZSBj
b2RlKSA6IFJlZkNvdW50ZWQ8TWVkaWFFcnJvcj4oMCksIG1fY29kZShjb2RlKSB7IH0KKyAgICBz
dGF0aWMgUGFzc1JlZlB0cjxNZWRpYUVycm9yPiBjcmVhdGUoQ29kZSBjb2RlKSB7IHJldHVybiBh
ZG9wdFJlZihuZXcgTWVkaWFFcnJvcihjb2RlKSk7IH0KIAogICAgIENvZGUgY29kZSgpIGNvbnN0
IHsgcmV0dXJuIG1fY29kZTsgfQogCiBwcml2YXRlOgorICAgIE1lZGlhRXJyb3IoQ29kZSBjb2Rl
KSA6IG1fY29kZShjb2RlKSB7IH0KKwogICAgIENvZGUgbV9jb2RlOwogfTsKIApJbmRleDogV2Vi
Q29yZS9sb2FkZXIvQ2FjaGVkQ1NTU3R5bGVTaGVldC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9sb2FkZXIvQ2FjaGVkQ1NTU3R5bGVTaGVldC5jcHAJKHJldmlzaW9uIDM0Mzc2KQorKysgV2Vi
Q29yZS9sb2FkZXIvQ2FjaGVkQ1NTU3R5bGVTaGVldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4
LDcgKzM4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBDYWNoZWRDU1NTdHlsZVNoZWV0OjpD
YWNoZWRDU1NTdHlsZVNoZWV0KGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIGNoYXJz
ZXQpCiAgICAgOiBDYWNoZWRSZXNvdXJjZSh1cmwsIENTU1N0eWxlU2hlZXQpCi0gICAgLCBtX2Rl
Y29kZXIobmV3IFRleHRSZXNvdXJjZURlY29kZXIoInRleHQvY3NzIiwgY2hhcnNldCkpCisgICAg
LCBtX2RlY29kZXIoVGV4dFJlc291cmNlRGVjb2Rlcjo6Y3JlYXRlKCJ0ZXh0L2NzcyIsIGNoYXJz
ZXQpKQogewogICAgIC8vIFByZWZlciB0ZXh0L2NzcyBidXQgYWNjZXB0IGFueSB0eXBlIChkZWxs
LmNvbSBzZXJ2ZXMgYSBzdHlsZXNoZWV0CiAgICAgLy8gYXMgdGV4dC9odG1sOyBzZWUgPGh0dHA6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExNDUxPikuCkluZGV4OiBXZWJDb3Jl
L2xvYWRlci9DYWNoZWRGb250LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9DYWNo
ZWRGb250LmNwcAkocmV2aXNpb24gMzQzNzYpCisrKyBXZWJDb3JlL2xvYWRlci9DYWNoZWRGb250
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM1LDkgKzEzNSw5IEBAIGJvb2wgQ2FjaGVkRm9udDo6
ZW5zdXJlU1ZHRm9udERhdGEoKQogICAgICAgICBtX2V4dGVybmFsU1ZHRG9jdW1lbnQgPSBuZXcg
U1ZHRG9jdW1lbnQoRE9NSW1wbGVtZW50YXRpb246Omluc3RhbmNlKCksIDApOwogICAgICAgICBt
X2V4dGVybmFsU1ZHRG9jdW1lbnQtPm9wZW4oKTsKIAotICAgICAgICBUZXh0UmVzb3VyY2VEZWNv
ZGVyIGRlY29kZXIoImFwcGxpY2F0aW9uL3htbCIpOwotICAgICAgICBtX2V4dGVybmFsU1ZHRG9j
dW1lbnQtPndyaXRlKGRlY29kZXIuZGVjb2RlKG1fZGF0YS0+ZGF0YSgpLCBtX2RhdGEtPnNpemUo
KSkpOwotICAgICAgICBpZiAoZGVjb2Rlci5zYXdFcnJvcigpKSB7CisgICAgICAgIFJlZlB0cjxU
ZXh0UmVzb3VyY2VEZWNvZGVyPiBkZWNvZGVyID0gVGV4dFJlc291cmNlRGVjb2Rlcjo6Y3JlYXRl
KCJhcHBsaWNhdGlvbi94bWwiKTsKKyAgICAgICAgbV9leHRlcm5hbFNWR0RvY3VtZW50LT53cml0
ZShkZWNvZGVyLT5kZWNvZGUobV9kYXRhLT5kYXRhKCksIG1fZGF0YS0+c2l6ZSgpKSk7CisgICAg
ICAgIGlmIChkZWNvZGVyLT5zYXdFcnJvcigpKSB7CiAgICAgICAgICAgICBtX2V4dGVybmFsU1ZH
RG9jdW1lbnQuY2xlYXIoKTsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CkluZGV4
OiBXZWJDb3JlL2xvYWRlci9DYWNoZWRYU0xTdHlsZVNoZWV0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2xvYWRlci9DYWNoZWRYU0xTdHlsZVNoZWV0LmNwcAkocmV2aXNpb24gMzQzNzYpCisr
KyBXZWJDb3JlL2xvYWRlci9DYWNoZWRYU0xTdHlsZVNoZWV0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDIsNyArNDIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIENhY2hlZFhTTFN0eWxlU2hl
ZXQ6OkNhY2hlZFhTTFN0eWxlU2hlZXQoY29uc3QgU3RyaW5nICZ1cmwpCiAgICAgOiBDYWNoZWRS
ZXNvdXJjZSh1cmwsIFhTTFN0eWxlU2hlZXQpCi0gICAgLCBtX2RlY29kZXIobmV3IFRleHRSZXNv
dXJjZURlY29kZXIoInRleHQveHNsIikpCisgICAgLCBtX2RlY29kZXIoVGV4dFJlc291cmNlRGVj
b2Rlcjo6Y3JlYXRlKCJ0ZXh0L3hzbCIpKQogewogICAgIC8vIEl0J3MgWE1MIHdlIHdhbnQuCiAg
ICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGFjY2VwdCBtb3JlIGdlbmVyYWwgeG1sIGZvcm1hdHMg
Ki8qK3htbCwgaW1hZ2Uvc3ZnK3htbCBmb3IgZXhhbXBsZS4KSW5kZXg6IFdlYkNvcmUvbG9hZGVy
L0ZyYW1lTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRl
ci5jcHAJKHJldmlzaW9uIDM0Mzc2KQorKysgV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC05OTYsNyArOTk2LDcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6d3Jp
dGUoY29uc3QgY2hhciogc3RyLAogICAgIAogICAgIGlmICghbV9kZWNvZGVyKSB7CiAgICAgICAg
IFNldHRpbmdzKiBzZXR0aW5ncyA9IG1fZnJhbWUtPnNldHRpbmdzKCk7Ci0gICAgICAgIG1fZGVj
b2RlciA9IG5ldyBUZXh0UmVzb3VyY2VEZWNvZGVyKG1fcmVzcG9uc2VNSU1FVHlwZSwgc2V0dGlu
Z3MgPyBzZXR0aW5ncy0+ZGVmYXVsdFRleHRFbmNvZGluZ05hbWUoKSA6IFN0cmluZygpKTsKKyAg
ICAgICAgbV9kZWNvZGVyID0gVGV4dFJlc291cmNlRGVjb2Rlcjo6Y3JlYXRlKG1fcmVzcG9uc2VN
SU1FVHlwZSwgc2V0dGluZ3MgPyBzZXR0aW5ncy0+ZGVmYXVsdFRleHRFbmNvZGluZ05hbWUoKSA6
IFN0cmluZygpKTsKICAgICAgICAgaWYgKG1fZW5jb2RpbmcuaXNFbXB0eSgpKSB7CiAgICAgICAg
ICAgICBGcmFtZSogcGFyZW50RnJhbWUgPSBtX2ZyYW1lLT50cmVlKCktPnBhcmVudCgpOwogICAg
ICAgICAgICAgaWYgKHBhcmVudEZyYW1lICYmIHBhcmVudEZyYW1lLT5kb2N1bWVudCgpLT5zZWN1
cml0eU9yaWdpbigpLT5jYW5BY2Nlc3MobV9mcmFtZS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmln
aW4oKSkpCkBAIC0zOTc0LDcgKzM5NzQsNyBAQCBQYXNzUmVmUHRyPEhpc3RvcnlJdGVtPiBGcmFt
ZUxvYWRlcjo6Y3JlCiAgICAgaWYgKG9yaWdpbmFsVVJMLmlzRW1wdHkoKSkKICAgICAgICAgb3Jp
Z2luYWxVUkwgPSBibGFua1VSTCgpOwogICAgIAotICAgIFJlZlB0cjxIaXN0b3J5SXRlbT4gaXRl
bSA9IG5ldyBIaXN0b3J5SXRlbSh1cmwsIG1fZnJhbWUtPnRyZWUoKS0+bmFtZSgpLCBtX2ZyYW1l
LT50cmVlKCktPnBhcmVudCgpID8gbV9mcmFtZS0+dHJlZSgpLT5wYXJlbnQoKS0+dHJlZSgpLT5u
YW1lKCkgOiAiIiwgZG9jTG9hZGVyID8gZG9jTG9hZGVyLT50aXRsZSgpIDogIiIpOworICAgIFJl
ZlB0cjxIaXN0b3J5SXRlbT4gaXRlbSA9IEhpc3RvcnlJdGVtOjpjcmVhdGUodXJsLCBtX2ZyYW1l
LT50cmVlKCktPm5hbWUoKSwgbV9mcmFtZS0+dHJlZSgpLT5wYXJlbnQoKSA/IG1fZnJhbWUtPnRy
ZWUoKS0+cGFyZW50KCktPnRyZWUoKS0+bmFtZSgpIDogIiIsIGRvY0xvYWRlciA/IGRvY0xvYWRl
ci0+dGl0bGUoKSA6ICIiKTsKICAgICBpdGVtLT5zZXRPcmlnaW5hbFVSTFN0cmluZyhvcmlnaW5h
bFVSTC5zdHJpbmcoKSk7CiAgICAgCiAgICAgLy8gU2F2ZSBmb3JtIHN0YXRlIGlmIHRoaXMgaXMg
YSBQT1NUCkluZGV4OiBXZWJDb3JlL2xvYWRlci9JbWFnZURvY3VtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2xvYWRlci9JbWFnZURvY3VtZW50LmNwcAkocmV2aXNpb24gMzQzNzYpCisr
KyBXZWJDb3JlL2xvYWRlci9JbWFnZURvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIs
MTAgKzUyLDExIEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKIGNsYXNzIEltYWdlRXZl
bnRMaXN0ZW5lciA6IHB1YmxpYyBFdmVudExpc3RlbmVyIHsKIHB1YmxpYzoKLSAgICBJbWFnZUV2
ZW50TGlzdGVuZXIoSW1hZ2VEb2N1bWVudCogZG9jKSA6IG1fZG9jKGRvYykgeyB9CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8SW1hZ2VFdmVudExpc3RlbmVyPiBjcmVhdGUoSW1hZ2VEb2N1bWVudCog
ZG9jdW1lbnQpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbWFnZUV2ZW50TGlzdGVuZXIoZG9jdW1l
bnQpKTsgfQogICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFdmVudChFdmVudCosIGJvb2wgaXNXaW5k
b3dFdmVudCk7CiAKIHByaXZhdGU6CisgICAgSW1hZ2VFdmVudExpc3RlbmVyKEltYWdlRG9jdW1l
bnQqIGRvY3VtZW50KSA6IG1fZG9jKGRvY3VtZW50KSB7IH0KICAgICBJbWFnZURvY3VtZW50KiBt
X2RvYzsKIH07CiAgICAgCkBAIC0xNzMsNyArMTc0LDcgQEAgdm9pZCBJbWFnZURvY3VtZW50Ojpj
cmVhdGVEb2N1bWVudFN0cnVjdAogICAgIAogICAgIGlmIChzaG91bGRTaHJpbmtUb0ZpdCgpKSB7
CiAgICAgICAgIC8vIEFkZCBldmVudCBsaXN0ZW5lcnMKLSAgICAgICAgUmVmUHRyPEV2ZW50TGlz
dGVuZXI+IGxpc3RlbmVyID0gbmV3IEltYWdlRXZlbnRMaXN0ZW5lcih0aGlzKTsKKyAgICAgICAg
UmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyID0gSW1hZ2VFdmVudExpc3RlbmVyOjpjcmVh
dGUodGhpcyk7CiAgICAgICAgIGFkZFdpbmRvd0V2ZW50TGlzdGVuZXIoInJlc2l6ZSIsIGxpc3Rl
bmVyLCBmYWxzZSk7CiAgICAgICAgIGltYWdlRWxlbWVudC0+YWRkRXZlbnRMaXN0ZW5lcigiY2xp
Y2siLCBsaXN0ZW5lci5yZWxlYXNlKCksIGZhbHNlKTsKICAgICB9CkluZGV4OiBXZWJDb3JlL2xv
YWRlci9UZXh0UmVzb3VyY2VEZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIv
VGV4dFJlc291cmNlRGVjb2Rlci5oCShyZXZpc2lvbiAzNDM3NikKKysrIFdlYkNvcmUvbG9hZGVy
L1RleHRSZXNvdXJjZURlY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw5ICsxLDcgQEAKIC8q
Ci0gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBsaWJyYXJpZXMKLQogICAgIENvcHly
aWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBtcGktaGQubXBnLmRlKQogICAgIENvcHly
aWdodCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IChhcEBueXBvcC5jb20pCi0gICAgQ29w
eXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgICAgQ29weXJpZ2h0IChDKSAy
MDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIAogICAgIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAg
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwpAQCAtMjUsMTAgKzIzLDcgQEAKICNpZm5kZWYgVGV4dFJlc291cmNlRGVjb2Rlcl9oCiAj
ZGVmaW5lIFRleHRSZXNvdXJjZURlY29kZXJfaAogCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcu
aCIKLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgIlRleHREZWNvZGVyLmgi
Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQ0
LDcgKzM5LDEwIEBAIHB1YmxpYzoKICAgICAgICAgVXNlckNob3NlbkVuY29kaW5nCiAgICAgfTsK
IAotICAgIFRleHRSZXNvdXJjZURlY29kZXIoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3Qg
VGV4dEVuY29kaW5nJiBkZWZhdWx0RW5jb2RpbmcgPSBUZXh0RW5jb2RpbmcoKSk7CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8VGV4dFJlc291cmNlRGVjb2Rlcj4gY3JlYXRlKGNvbnN0IFN0cmluZyYg
bWltZVR5cGUsIGNvbnN0IFRleHRFbmNvZGluZyYgZGVmYXVsdEVuY29kaW5nID0gVGV4dEVuY29k
aW5nKCkpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHRSZXNvdXJjZURl
Y29kZXIobWltZVR5cGUsIGRlZmF1bHRFbmNvZGluZykpOworICAgIH0KICAgICB+VGV4dFJlc291
cmNlRGVjb2RlcigpOwogCiAgICAgdm9pZCBzZXRFbmNvZGluZyhjb25zdCBUZXh0RW5jb2Rpbmcm
LCBFbmNvZGluZ1NvdXJjZSk7CkBAIC01Niw2ICs1NCw4IEBAIHB1YmxpYzoKICAgICBib29sIHNh
d0Vycm9yKCkgY29uc3QgeyByZXR1cm4gbV9zYXdFcnJvcjsgfQogCiBwcml2YXRlOgorICAgIFRl
eHRSZXNvdXJjZURlY29kZXIoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgVGV4dEVuY29k
aW5nJiBkZWZhdWx0RW5jb2RpbmcpOworCiAgICAgZW51bSBDb250ZW50VHlwZSB7IFBsYWluVGV4
dCwgSFRNTCwgWE1MLCBDU1MgfTsgLy8gUGxhaW5UZXh0IGlzIGVxdWl2YWxlbnQgdG8gZGlyZWN0
bHkgdXNpbmcgVGV4dERlY29kZXIuCiAgICAgc3RhdGljIENvbnRlbnRUeXBlIGRldGVybWluZUNv
bnRlbnRUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOwogICAgIHN0YXRpYyBjb25zdCBUZXh0
RW5jb2RpbmcmIGRlZmF1bHRFbmNvZGluZyhDb250ZW50VHlwZSwgY29uc3QgVGV4dEVuY29kaW5n
JiBkZWZhdWx0RW5jb2RpbmcpOwpJbmRleDogV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGFnZS9QYWdlLmNwcAkocmV2aXNpb24gMzQzNzYpCisrKyBXZWJDb3Jl
L3BhZ2UvUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzNSw3ICs0MzUsNyBAQCBjb25zdCBT
dHJpbmcmIFBhZ2U6OnVzZXJTdHlsZVNoZWV0KCkgY29uCiAgICAgaWYgKCFkYXRhKQogICAgICAg
ICByZXR1cm4gbV91c2VyU3R5bGVTaGVldDsKIAotICAgIG1fdXNlclN0eWxlU2hlZXQgPSBUZXh0
UmVzb3VyY2VEZWNvZGVyKCJ0ZXh0L2NzcyIpLmRlY29kZShkYXRhLT5kYXRhKCksIGRhdGEtPnNp
emUoKSk7CisgICAgbV91c2VyU3R5bGVTaGVldCA9IFRleHRSZXNvdXJjZURlY29kZXI6OmNyZWF0
ZSgidGV4dC9jc3MiKS0+ZGVjb2RlKGRhdGEtPmRhdGEoKSwgZGF0YS0+c2l6ZSgpKTsKIAogICAg
IHJldHVybiBtX3VzZXJTdHlsZVNoZWV0OwogfQpJbmRleDogV2ViQ29yZS9wbHVnaW5zL1BsdWdp
bkRlYnVnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRlYnVnLmgJKHJl
dmlzaW9uIDM0Mzc2KQorKysgV2ViQ29yZS9wbHVnaW5zL1BsdWdpbkRlYnVnLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTIzLDEyICsyMywxNCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRl
ZiBQTFVHSU5fREVCVUdfSF9fCi0jZGVmaW5lIFBMVUdJTl9ERUJVR19IX18KKyNpZm5kZWYgUGx1
Z2luRGVidWdfaAorI2RlZmluZSBQbHVnaW5EZWJ1Z19oCiAKICNpbmNsdWRlICJMb2dnaW5nLmgi
CiAjaW5jbHVkZSAibnBydW50aW1lX2ludGVybmFsLmgiCiAKKyNpZiAhTE9HX0RJU0FCTEVECisK
IHN0YXRpYyBjb25zdCBjaGFyKiBlcnJvclN0cmluZ3NbXSA9IHsKICAgICAiTm8gZXJyb3JzIG9j
Y3VycmVkLiIsIC8qIE5QRVJSX05PX0VSUk9SICovCiAgICAgIkVycm9yIHdpdGggbm8gc3BlY2lm
aWMgZXJyb3IgY29kZSBvY2N1cnJlZC4iLCAvKiBOUEVSUl9HRU5FUklDX0VSUk9SICovCkBAIC00
Nyw2ICs0OSw4IEBAIHN0YXRpYyBjb25zdCBjaGFyKiBlcnJvclN0cmluZ3NbXSA9IHsKICAgICAi
VW5rbm93biBlcnJvciBjb2RlIgogfTsKIAorI2VuZGlmCisKICNkZWZpbmUgTE9HX05QRVJST1Io
ZXJyKSBpZiAoZXJyICE9IE5QRVJSX05PX0VSUk9SKSBMT0dfVkVSQk9TRShQbHVnaW4sICIlc1xu
IiwgZXJyb3JTdHJpbmdzW2Vycl0pCiAjZGVmaW5lIExPR19QTFVHSU5fTkVUX0VSUk9SKCkgTE9H
X1ZFUkJPU0UoUGx1Z2luLCAiU3RyZWFtIGZhaWxlZCBkdWUgdG8gcHJvYmxlbXMgd2l0aCBuZXR3
b3JrLCBkaXNrIEkvTywgbGFjayBvZiBtZW1vcnksIG9yIG90aGVyIHByb2JsZW1zLlxuIikKIApJ
bmRleDogV2ViQ29yZS9zdmcvU1ZHRXhjZXB0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9z
dmcvU1ZHRXhjZXB0aW9uLmgJKHJldmlzaW9uIDM0Mzc2KQorKysgV2ViQ29yZS9zdmcvU1ZHRXhj
ZXB0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0
IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgPHNhbS53ZWluaWdAZ21haWwuY29tPgotICogQ29weXJp
Z2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYs
IDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CkBAIC0yMiwxNyArMjIsMTcgQEAKICNpZm5kZWYgU1ZHRXhjZXB0aW9uX2gKICNkZWZpbmUgU1ZH
RXhjZXB0aW9uX2gKIAotI2lmIEVOQUJMRShTVkcpCi0KICNpbmNsdWRlICJFeGNlcHRpb25CYXNl
LmgiCiAKKyNpZiBFTkFCTEUoU1ZHKQorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFz
cyBTVkdFeGNlcHRpb24gOiBwdWJsaWMgRXhjZXB0aW9uQmFzZSB7CiAgICAgcHVibGljOgotICAg
ICAgICBTVkdFeGNlcHRpb24oY29uc3QgRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uJiBkZXNjcmlw
dGlvbikKLSAgICAgICAgICAgIDogRXhjZXB0aW9uQmFzZShkZXNjcmlwdGlvbikKKyAgICAgICAg
c3RhdGljIFBhc3NSZWZQdHI8U1ZHRXhjZXB0aW9uPiBjcmVhdGUoY29uc3QgRXhjZXB0aW9uQ29k
ZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKICAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBTVkdFeGNlcHRpb24oZGVzY3JpcHRpb24pKTsKICAgICAgICAgfQogCiAg
ICAgICAgIHN0YXRpYyBjb25zdCBpbnQgU1ZHRXhjZXB0aW9uT2Zmc2V0ID0gMzAwOwpAQCAtNDMs
NiArNDMsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgU1ZHX0lOVkFMSURf
VkFMVUVfRVJSICAgICAgID0gU1ZHRXhjZXB0aW9uT2Zmc2V0ICsgMSwKICAgICAgICAgICAgIFNW
R19NQVRSSVhfTk9UX0lOVkVSVEFCTEUgICA9IFNWR0V4Y2VwdGlvbk9mZnNldCArIDIKICAgICAg
ICAgfTsKKworICAgIHByaXZhdGU6CisgICAgICAgIFNWR0V4Y2VwdGlvbihjb25zdCBFeGNlcHRp
b25Db2RlRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQorICAgICAgICAgICAgOiBFeGNlcHRpb25C
YXNlKGRlc2NyaXB0aW9uKQorICAgICAgICB7CisgICAgICAgIH0KICAgICB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3N2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVu
dC5jcHAJKHJldmlzaW9uIDM0Mzc2KQorKysgV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxF
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsMTIgKzUzLDkgQEAgc3RhdGljIGNvbnN0
IGRvdWJsZSBpbnZhbGlkQ2FjaGVkVGltZSA9IAogICAgIAogY2xhc3MgQ29uZGl0aW9uRXZlbnRM
aXN0ZW5lciA6IHB1YmxpYyBFdmVudExpc3RlbmVyIHsKIHB1YmxpYzoKLSAgICBDb25kaXRpb25F
dmVudExpc3RlbmVyKFNWR1NNSUxFbGVtZW50KiBhbmltYXRpb24sIEVsZW1lbnQqIGV2ZW50QmFz
ZSwgU1ZHU01JTEVsZW1lbnQ6OkNvbmRpdGlvbiogY29uZGl0aW9uKSAKLSAgICAgICAgOiBtX2Fu
aW1hdGlvbihhbmltYXRpb24pCi0gICAgICAgICwgbV9jb25kaXRpb24oY29uZGl0aW9uKSAKLSAg
ICAgICAgLCBtX2V2ZW50QmFzZShldmVudEJhc2UpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q29u
ZGl0aW9uRXZlbnRMaXN0ZW5lcj4gY3JlYXRlKFNWR1NNSUxFbGVtZW50KiBhbmltYXRpb24sIEVs
ZW1lbnQqIGV2ZW50QmFzZSwgU1ZHU01JTEVsZW1lbnQ6OkNvbmRpdGlvbiogY29uZGl0aW9uKQog
ICAgIHsKLSAgICAgICAgbV9ldmVudEJhc2UtPmFkZEV2ZW50TGlzdGVuZXIobV9jb25kaXRpb24t
Pm1fbmFtZSwgdGhpcywgZmFsc2UpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENvbmRp
dGlvbkV2ZW50TGlzdGVuZXIoYW5pbWF0aW9uLCBldmVudEJhc2UsIGNvbmRpdGlvbikpOwogICAg
IH0KIAogICAgIHZvaWQgdW5yZWdpc3RlcigpCkBAIC03Miw3ICs2OSwxNiBAQCBwdWJsaWM6CiAg
ICAgewogICAgICAgICBtX2FuaW1hdGlvbi0+aGFuZGxlQ29uZGl0aW9uRXZlbnQoZXZlbnQsIG1f
Y29uZGl0aW9uKTsKICAgICB9CisKIHByaXZhdGU6CisgICAgQ29uZGl0aW9uRXZlbnRMaXN0ZW5l
cihTVkdTTUlMRWxlbWVudCogYW5pbWF0aW9uLCBFbGVtZW50KiBldmVudEJhc2UsIFNWR1NNSUxF
bGVtZW50OjpDb25kaXRpb24qIGNvbmRpdGlvbikgCisgICAgICAgIDogbV9hbmltYXRpb24oYW5p
bWF0aW9uKQorICAgICAgICAsIG1fY29uZGl0aW9uKGNvbmRpdGlvbikgCisgICAgICAgICwgbV9l
dmVudEJhc2UoZXZlbnRCYXNlKQorICAgIHsKKyAgICAgICAgbV9ldmVudEJhc2UtPmFkZEV2ZW50
TGlzdGVuZXIobV9jb25kaXRpb24tPm1fbmFtZSwgdGhpcywgZmFsc2UpOworICAgIH0KKwogICAg
IFNWR1NNSUxFbGVtZW50KiBtX2FuaW1hdGlvbjsKICAgICBTVkdTTUlMRWxlbWVudDo6Q29uZGl0
aW9uKiBtX2NvbmRpdGlvbjsKICAgICBFbGVtZW50KiBtX2V2ZW50QmFzZTsKQEAgLTM3Nyw3ICsz
ODMsNyBAQCB2b2lkIFNWR1NNSUxFbGVtZW50Ojpjb25uZWN0Q29uZGl0aW9ucygpCiAgICAgICAg
ICAgICBpZiAoIWV2ZW50QmFzZSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
ICAgIEFTU0VSVCghY29uZGl0aW9uLm1fZXZlbnRMaXN0ZW5lcik7Ci0gICAgICAgICAgICBjb25k
aXRpb24ubV9ldmVudExpc3RlbmVyID0gbmV3IENvbmRpdGlvbkV2ZW50TGlzdGVuZXIodGhpcywg
ZXZlbnRCYXNlLCAmY29uZGl0aW9uKTsKKyAgICAgICAgICAgIGNvbmRpdGlvbi5tX2V2ZW50TGlz
dGVuZXIgPSBDb25kaXRpb25FdmVudExpc3RlbmVyOjpjcmVhdGUodGhpcywgZXZlbnRCYXNlLCAm
Y29uZGl0aW9uKTsKICAgICAgICAgfSBlbHNlIGlmIChjb25kaXRpb24ubV90eXBlID09IENvbmRp
dGlvbjo6U3luY2Jhc2UpIHsKICAgICAgICAgICAgIEFTU0VSVCghY29uZGl0aW9uLm1fYmFzZUlE
LmlzRW1wdHkoKSk7CiAgICAgICAgICAgICBjb25kaXRpb24ubV9zeW5jYmFzZSA9IGRvY3VtZW50
KCktPmdldEVsZW1lbnRCeUlkKGNvbmRpdGlvbi5tX2Jhc2VJRCk7CkluZGV4OiBXZWJDb3JlL3ht
bC9YTUxIdHRwUmVxdWVzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94bWwvWE1MSHR0cFJl
cXVlc3QuY3BwCShyZXZpc2lvbiAzNDM3NikKKysrIFdlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTMzLDE0ICs5MzMsMTQgQEAgdm9pZCBYTUxIdHRwUmVx
dWVzdDo6ZGlkUmVjZWl2ZURhdGEoU3VicgogICAKICAgICBpZiAoIW1fZGVjb2RlcikgewogICAg
ICAgICBpZiAoIW1fcmVzcG9uc2VFbmNvZGluZy5pc0VtcHR5KCkpCi0gICAgICAgICAgICBtX2Rl
Y29kZXIgPSBuZXcgVGV4dFJlc291cmNlRGVjb2RlcigidGV4dC9wbGFpbiIsIG1fcmVzcG9uc2VF
bmNvZGluZyk7CisgICAgICAgICAgICBtX2RlY29kZXIgPSBUZXh0UmVzb3VyY2VEZWNvZGVyOjpj
cmVhdGUoInRleHQvcGxhaW4iLCBtX3Jlc3BvbnNlRW5jb2RpbmcpOwogICAgICAgICAvLyBhbGxv
dyBUZXh0UmVzb3VyY2VEZWNvZGVyIHRvIGxvb2sgaW5zaWRlIHRoZSBtX3Jlc3BvbnNlIGlmIGl0
J3MgWE1MIG9yIEhUTUwKICAgICAgICAgZWxzZSBpZiAocmVzcG9uc2VJc1hNTCgpKQotICAgICAg
ICAgICAgbV9kZWNvZGVyID0gbmV3IFRleHRSZXNvdXJjZURlY29kZXIoImFwcGxpY2F0aW9uL3ht
bCIpOworICAgICAgICAgICAgbV9kZWNvZGVyID0gVGV4dFJlc291cmNlRGVjb2Rlcjo6Y3JlYXRl
KCJhcHBsaWNhdGlvbi94bWwiKTsKICAgICAgICAgZWxzZSBpZiAocmVzcG9uc2VNSU1FVHlwZSgp
ID09ICJ0ZXh0L2h0bWwiKQotICAgICAgICAgICAgbV9kZWNvZGVyID0gbmV3IFRleHRSZXNvdXJj
ZURlY29kZXIoInRleHQvaHRtbCIsICJVVEYtOCIpOworICAgICAgICAgICAgbV9kZWNvZGVyID0g
VGV4dFJlc291cmNlRGVjb2Rlcjo6Y3JlYXRlKCJ0ZXh0L2h0bWwiLCAiVVRGLTgiKTsKICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgbV9kZWNvZGVyID0gbmV3IFRleHRSZXNvdXJjZURlY29kZXIo
InRleHQvcGxhaW4iLCAiVVRGLTgiKTsKKyAgICAgICAgICAgIG1fZGVjb2RlciA9IFRleHRSZXNv
dXJjZURlY29kZXI6OmNyZWF0ZSgidGV4dC9wbGFpbiIsICJVVEYtOCIpOwogICAgIH0KICAgICBp
ZiAobGVuID09IDApCiAgICAgICAgIHJldHVybjsKSW5kZXg6IFdlYkNvcmUveG1sL1hNTEh0dHBS
ZXF1ZXN0RXhjZXB0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVl
c3RFeGNlcHRpb24uaAkocmV2aXNpb24gMzQzNzYpCisrKyBXZWJDb3JlL3htbC9YTUxIdHRwUmVx
dWVzdEV4Y2VwdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSw5ICszNSw5IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogICAgIGNsYXNzIFhNTEh0dHBSZXF1ZXN0RXhjZXB0aW9uIDogcHVibGljIEV4
Y2VwdGlvbkJhc2UgewogICAgIHB1YmxpYzoKLSAgICAgICAgWE1MSHR0cFJlcXVlc3RFeGNlcHRp
b24oY29uc3QgRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKLSAgICAgICAg
ICAgIDogRXhjZXB0aW9uQmFzZShkZXNjcmlwdGlvbikKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8WE1MSHR0cFJlcXVlc3RFeGNlcHRpb24+IGNyZWF0ZShjb25zdCBFeGNlcHRpb25Db2RlRGVz
Y3JpcHRpb24mIGRlc2NyaXB0aW9uKQogICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IFhNTEh0dHBSZXF1ZXN0RXhjZXB0aW9uKGRlc2NyaXB0aW9uKSk7CiAgICAgICAg
IH0KIAogICAgICAgICBzdGF0aWMgY29uc3QgaW50IFhNTEh0dHBSZXF1ZXN0RXhjZXB0aW9uT2Zm
c2V0ID0gNTAwOwpAQCAtNDcsNiArNDcsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICAgICAgTkVUV09SS19FUlIgPSBYTUxIdHRwUmVxdWVzdEV4Y2VwdGlvbk9mZnNldCArIDEwMSwK
ICAgICAgICAgICAgIEFCT1JUX0VSUgogICAgICAgICB9OworCisgICAgcHJpdmF0ZToKKyAgICAg
ICAgWE1MSHR0cFJlcXVlc3RFeGNlcHRpb24oY29uc3QgRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9u
JiBkZXNjcmlwdGlvbikKKyAgICAgICAgICAgIDogRXhjZXB0aW9uQmFzZShkZXNjcmlwdGlvbikK
KyAgICAgICAgeworICAgICAgICB9CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogV2ViQ29yZS94bWwvWFBhdGhFeGNlcHRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3htbC9YUGF0aEV4Y2VwdGlvbi5oCShyZXZpc2lvbiAzNDM3NikKKysrIFdlYkNvcmUveG1sL1hQ
YXRoRXhjZXB0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDE3ICsyOSwxNyBAQAogI2lmbmRlZiBY
UGF0aEV4Y2VwdGlvbl9oCiAjZGVmaW5lIFhQYXRoRXhjZXB0aW9uX2gKIAotI2lmIEVOQUJMRShY
UEFUSCkKLQogI2luY2x1ZGUgIkV4Y2VwdGlvbkJhc2UuaCIKIAorI2lmIEVOQUJMRShYUEFUSCkK
KwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgWFBhdGhFeGNlcHRpb24gOiBwdWJs
aWMgRXhjZXB0aW9uQmFzZSB7CiAgICAgcHVibGljOgotICAgICAgICBYUGF0aEV4Y2VwdGlvbihj
b25zdCBFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQotICAgICAgICAgICAg
OiBFeGNlcHRpb25CYXNlKGRlc2NyaXB0aW9uKQorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxY
UGF0aEV4Y2VwdGlvbj4gY3JlYXRlKGNvbnN0IEV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiYgZGVz
Y3JpcHRpb24pCiAgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgWFBh
dGhFeGNlcHRpb24oZGVzY3JpcHRpb24pKTsKICAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyBj
b25zdCBpbnQgWFBhdGhFeGNlcHRpb25PZmZzZXQgPSA0MDA7CkBAIC00OSw2ICs0OSwxMiBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICBJTlZBTElEX0VYUFJFU1NJT05fRVJSID0g
WFBhdGhFeGNlcHRpb25PZmZzZXQgKyA1MSwKICAgICAgICAgICAgIFRZUEVfRVJSCiAgICAgICAg
IH07CisKKyAgICBwcml2YXRlOgorICAgICAgICBYUGF0aEV4Y2VwdGlvbihjb25zdCBFeGNlcHRp
b25Db2RlRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQorICAgICAgICAgICAgOiBFeGNlcHRpb25C
YXNlKGRlc2NyaXB0aW9uKQorICAgICAgICB7CisgICAgICAgIH0KICAgICB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3htbC9YUGF0aFJlc3VsdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS94bWwvWFBhdGhSZXN1bHQuY3BwCShyZXZpc2lvbiAzNDM3NikKKysr
IFdlYkNvcmUveG1sL1hQYXRoUmVzdWx0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsOSArNDIs
MTEgQEAgdXNpbmcgbmFtZXNwYWNlIFhQYXRoOwogCiBjbGFzcyBJbnZhbGlkYXRpbmdFdmVudExp
c3RlbmVyIDogcHVibGljIEV2ZW50TGlzdGVuZXIgewogcHVibGljOgotICAgIEludmFsaWRhdGlu
Z0V2ZW50TGlzdGVuZXIoWFBhdGhSZXN1bHQqIHJlc3VsdCkgOiBtX3Jlc3VsdChyZXN1bHQpIHsg
fQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEludmFsaWRhdGluZ0V2ZW50TGlzdGVuZXI+IGNyZWF0
ZShYUGF0aFJlc3VsdCogcmVzdWx0KSB7IHJldHVybiBhZG9wdFJlZihuZXcgSW52YWxpZGF0aW5n
RXZlbnRMaXN0ZW5lcihyZXN1bHQpKTsgfQogICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFdmVudChF
dmVudCosIGJvb2wpIHsgbV9yZXN1bHQtPmludmFsaWRhdGVJdGVyYXRvclN0YXRlKCk7IH0KKwog
cHJpdmF0ZToKKyAgICBJbnZhbGlkYXRpbmdFdmVudExpc3RlbmVyKFhQYXRoUmVzdWx0KiByZXN1
bHQpIDogbV9yZXN1bHQocmVzdWx0KSB7IH0KICAgICBYUGF0aFJlc3VsdCogbV9yZXN1bHQ7CiB9
OwogCkBAIC01Miw3ICs1NCw3IEBAIFhQYXRoUmVzdWx0OjpYUGF0aFJlc3VsdChFdmVudFRhcmdl
dE5vZGUKICAgICA6IG1fdmFsdWUodmFsdWUpCiAgICAgLCBtX2V2ZW50VGFyZ2V0KGV2ZW50VGFy
Z2V0KQogewotICAgIG1fZXZlbnRMaXN0ZW5lciA9IG5ldyBJbnZhbGlkYXRpbmdFdmVudExpc3Rl
bmVyKHRoaXMpOworICAgIG1fZXZlbnRMaXN0ZW5lciA9IEludmFsaWRhdGluZ0V2ZW50TGlzdGVu
ZXI6OmNyZWF0ZSh0aGlzKTsKICAgICBtX2V2ZW50VGFyZ2V0LT5hZGRFdmVudExpc3RlbmVyKEV2
ZW50TmFtZXM6OkRPTVN1YnRyZWVNb2RpZmllZEV2ZW50LCBtX2V2ZW50TGlzdGVuZXIsIGZhbHNl
KTsKICAgICBzd2l0Y2ggKG1fdmFsdWUudHlwZSgpKSB7CiAgICAgICAgIGNhc2UgVmFsdWU6OkJv
b2xlYW5WYWx1ZToKSW5kZXg6IFdlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3IuY3BwCShyZXZpc2lvbiAzNDM3NikKKysr
IFdlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjksOSAr
MjY5LDkgQEAgUmVmUHRyPERvY3VtZW50PiBYU0xUUHJvY2Vzc29yOjpjcmVhdGVEbwogICAgIH0K
ICAgICByZXN1bHQtPm9wZW4oKTsKICAgICAKLSAgICBSZWZQdHI8VGV4dFJlc291cmNlRGVjb2Rl
cj4gZGVjb2RlciA9IG5ldyBUZXh0UmVzb3VyY2VEZWNvZGVyKHNvdXJjZU1JTUVUeXBlKTsKKyAg
ICBSZWZQdHI8VGV4dFJlc291cmNlRGVjb2Rlcj4gZGVjb2RlciA9IFRleHRSZXNvdXJjZURlY29k
ZXI6OmNyZWF0ZShzb3VyY2VNSU1FVHlwZSk7CiAgICAgZGVjb2Rlci0+c2V0RW5jb2Rpbmcoc291
cmNlRW5jb2RpbmcuaXNFbXB0eSgpID8gVVRGOEVuY29kaW5nKCkgOiBUZXh0RW5jb2Rpbmcoc291
cmNlRW5jb2RpbmcpLCBUZXh0UmVzb3VyY2VEZWNvZGVyOjpFbmNvZGluZ0Zyb21YTUxIZWFkZXIp
OwotICAgIHJlc3VsdC0+c2V0RGVjb2RlcihkZWNvZGVyLmdldCgpKTsKKyAgICByZXN1bHQtPnNl
dERlY29kZXIoZGVjb2Rlci5yZWxlYXNlKCkpOwogICAgIAogICAgIHJlc3VsdC0+d3JpdGUoZG9j
dW1lbnRTb3VyY2UpOwogICAgIHJlc3VsdC0+ZmluaXNoUGFyc2luZygpOwpJbmRleDogV2ViS2l0
L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlz
aW9uIDM0NDAzKQorKysgV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwxOCBAQAorMjAwOC0wNi0wNiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgLSB3b3JrIG9u
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzI1NworICAgICAgICAg
IHN0YXJ0IHJlZiBjb3VudHMgYXQgMSBpbnN0ZWFkIG9mIDAgZm9yIHNwZWVkCisKKyAgICAgICAg
KiBIaXN0b3J5L1dlYkhpc3RvcnlJdGVtLm1tOgorICAgICAgICAoLVtXZWJIaXN0b3J5SXRlbSBp
bml0XSk6CisgICAgICAgICgtW1dlYkhpc3RvcnlJdGVtIGluaXRXaXRoVVJMU3RyaW5nOnRpdGxl
Omxhc3RWaXNpdGVkVGltZUludGVydmFsOl0pOgorICAgICAgICAoLVtXZWJIaXN0b3J5SXRlbSBp
bml0V2l0aFVSTDp0YXJnZXQ6cGFyZW50OnRpdGxlOl0pOgorICAgICAgICAoLVtXZWJIaXN0b3J5
SXRlbSBpbml0V2l0aFVSTFN0cmluZzp0aXRsZTpkaXNwbGF5VGl0bGU6bGFzdFZpc2l0ZWRUaW1l
SW50ZXJ2YWw6XSk6CisgICAgICAgICogV2ViVmlldy9XZWJWaWV3Lm1tOgorICAgICAgICAoK1tX
ZWJWaWV3IF9kZWNvZGVEYXRhOl0pOgorCiAyMDA4LTA2LTAzICBPbGl2ZXIgSHVudCAgPG9saXZl
ckBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgVGltLgpJbmRleDogV2ViS2l0L21h
Yy9IaXN0b3J5L1dlYkhpc3RvcnlJdGVtLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvSGlz
dG9yeS9XZWJIaXN0b3J5SXRlbS5tbQkocmV2aXNpb24gMzQzNzYpCisrKyBXZWJLaXQvbWFjL0hp
c3RvcnkvV2ViSGlzdG9yeUl0ZW0ubW0JKHdvcmtpbmcgY29weSkKQEAgLTkxLDEzICs5MSwxMyBA
QCB2b2lkIFdLTm90aWZ5SGlzdG9yeUl0ZW1DaGFuZ2VkKCkKIAogLSAoaWQpaW5pdAogewotICAg
IHJldHVybiBbc2VsZiBpbml0V2l0aFdlYkNvcmVIaXN0b3J5SXRlbToobmV3IEhpc3RvcnlJdGVt
KV07CisgICAgcmV0dXJuIFtzZWxmIGluaXRXaXRoV2ViQ29yZUhpc3RvcnlJdGVtOkhpc3RvcnlJ
dGVtOjpjcmVhdGUoKV07CiB9CiAKIC0gKGlkKWluaXRXaXRoVVJMU3RyaW5nOihOU1N0cmluZyAq
KVVSTFN0cmluZyB0aXRsZTooTlNTdHJpbmcgKil0aXRsZSBsYXN0VmlzaXRlZFRpbWVJbnRlcnZh
bDooTlNUaW1lSW50ZXJ2YWwpdGltZQogewogICAgIFdlYkNvcmVUaHJlYWRWaW9sYXRpb25DaGVj
aygpOwotICAgIHJldHVybiBbc2VsZiBpbml0V2l0aFdlYkNvcmVIaXN0b3J5SXRlbToobmV3IEhp
c3RvcnlJdGVtKFVSTFN0cmluZywgdGl0bGUsIHRpbWUpKV07CisgICAgcmV0dXJuIFtzZWxmIGlu
aXRXaXRoV2ViQ29yZUhpc3RvcnlJdGVtOkhpc3RvcnlJdGVtOjpjcmVhdGUoVVJMU3RyaW5nLCB0
aXRsZSwgdGltZSldOwogfQogCiAtICh2b2lkKWRlYWxsb2MKQEAgLTI3NiwxMiArMjc2LDEyIEBA
IHN0YXRpYyBXZWJXaW5kb3dXYXRjaGVyICpfd2luZG93V2F0Y2hlciAKIAogLSAoaWQpaW5pdFdp
dGhVUkw6KE5TVVJMICopVVJMIHRhcmdldDooTlNTdHJpbmcgKil0YXJnZXQgcGFyZW50OihOU1N0
cmluZyAqKXBhcmVudCB0aXRsZTooTlNTdHJpbmcgKil0aXRsZQogewotICAgIHJldHVybiBbc2Vs
ZiBpbml0V2l0aFdlYkNvcmVIaXN0b3J5SXRlbToobmV3IEhpc3RvcnlJdGVtKFVSTCwgdGFyZ2V0
LCBwYXJlbnQsIHRpdGxlKSldOworICAgIHJldHVybiBbc2VsZiBpbml0V2l0aFdlYkNvcmVIaXN0
b3J5SXRlbTpIaXN0b3J5SXRlbTo6Y3JlYXRlKFVSTCwgdGFyZ2V0LCBwYXJlbnQsIHRpdGxlKV07
CiB9CiAKIC0gKGlkKWluaXRXaXRoVVJMU3RyaW5nOihOU1N0cmluZyAqKVVSTFN0cmluZyB0aXRs
ZTooTlNTdHJpbmcgKil0aXRsZSBkaXNwbGF5VGl0bGU6KE5TU3RyaW5nICopZGlzcGxheVRpdGxl
IGxhc3RWaXNpdGVkVGltZUludGVydmFsOihOU1RpbWVJbnRlcnZhbCl0aW1lCiB7Ci0gICAgcmV0
dXJuIFtzZWxmIGluaXRXaXRoV2ViQ29yZUhpc3RvcnlJdGVtOihuZXcgSGlzdG9yeUl0ZW0oVVJM
U3RyaW5nLCB0aXRsZSwgZGlzcGxheVRpdGxlLCB0aW1lKSldOworICAgIHJldHVybiBbc2VsZiBp
bml0V2l0aFdlYkNvcmVIaXN0b3J5SXRlbTpIaXN0b3J5SXRlbTo6Y3JlYXRlKFVSTFN0cmluZywg
dGl0bGUsIGRpc3BsYXlUaXRsZSwgdGltZSldOwogfQogCiAtIChpZClpbml0V2l0aFdlYkNvcmVI
aXN0b3J5SXRlbTooUGFzc1JlZlB0cjxIaXN0b3J5SXRlbT4paXRlbQpJbmRleDogV2ViS2l0L21h
Yy9XZWJWaWV3L1dlYlZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJWaWV3L1dl
YlZpZXcubW0JKHJldmlzaW9uIDM0Mzc2KQorKysgV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTExOTIsNyArMTE5Miw3IEBAIFdlYkZyYW1lTG9hZERlbGVn
YXRlSW1wbGVtZW50YXRpb25DYWNoZSoKICsgKE5TU3RyaW5nICopX2RlY29kZURhdGE6KE5TRGF0
YSAqKWRhdGEKIHsKICAgICBIVE1MTmFtZXM6OmluaXQoKTsgLy8gdGhpcyBtZXRob2QgaXMgdXNl
ZCBmb3IgaW1wb3J0aW5nIGJvb2ttYXJrcyBhdCBzdGFydHVwLCBzbyBIVE1MTmFtZXMgYXJlIGxp
a2VseSB0byBiZSB1bmluaXRpYWxpemVkIHlldAotICAgIFJlZlB0cjxUZXh0UmVzb3VyY2VEZWNv
ZGVyPiBkZWNvZGVyID0gbmV3IFRleHRSZXNvdXJjZURlY29kZXIoInRleHQvaHRtbCIpOyAvLyBi
b29rbWFyayBmaWxlcyBhcmUgSFRNTAorICAgIFJlZlB0cjxUZXh0UmVzb3VyY2VEZWNvZGVyPiBk
ZWNvZGVyID0gVGV4dFJlc291cmNlRGVjb2Rlcjo6Y3JlYXRlKCJ0ZXh0L2h0bWwiKTsgLy8gYm9v
a21hcmsgZmlsZXMgYXJlIEhUTUwKICAgICBTdHJpbmcgcmVzdWx0ID0gZGVjb2Rlci0+ZGVjb2Rl
KHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihbZGF0YSBieXRlc10pLCBbZGF0YSBsZW5ndGhdKTsK
ICAgICByZXN1bHQgKz0gZGVjb2Rlci0+Zmx1c2goKTsKICAgICByZXR1cm4gcmVzdWx0OwpJbmRl
eDogV2ViS2l0L3dpbi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3dpbi9DaGFuZ2VM
b2cJKHJldmlzaW9uIDM0NDAzKQorKysgV2ViS2l0L3dpbi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwxNSBAQAorMjAwOC0wNi0wNiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBs
ZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
LSB3b3JrIG9uIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzI1Nwor
ICAgICAgICAgIHN0YXJ0IHJlZiBjb3VudHMgYXQgMSBpbnN0ZWFkIG9mIDAgZm9yIHNwZWVkCisK
KyAgICAgICAgKiBXZWJIaXN0b3J5SXRlbS5jcHA6CisgICAgICAgIChXZWJIaXN0b3J5SXRlbTo6
Y3JlYXRlSW5zdGFuY2UpOgorICAgICAgICAoV2ViSGlzdG9yeUl0ZW06OmluaXRGcm9tRGljdGlv
bmFyeVJlcHJlc2VudGF0aW9uKToKKyAgICAgICAgKFdlYkhpc3RvcnlJdGVtOjppbml0V2l0aFVS
TFN0cmluZyk6CisKIDIwMDgtMDUtMzAgIFN0ZXZlIEZhbGtlbmJ1cmcgIDxzZmFsa2VuQGFwcGxl
LmNvbT4KIAogICAgICAgICBSZWdpc3RyeS1mcmVlIENPTS4gICAgICAgIApJbmRleDogV2ViS2l0
L3dpbi9XZWJIaXN0b3J5SXRlbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3dpbi9XZWJIaXN0
b3J5SXRlbS5jcHAJKHJldmlzaW9uIDM0Mzc2KQorKysgV2ViS2l0L3dpbi9XZWJIaXN0b3J5SXRl
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4LDcgKzY4LDcgQEAgV2ViSGlzdG9yeUl0ZW06On5X
ZWJIaXN0b3J5SXRlbSgpCiAKIFdlYkhpc3RvcnlJdGVtKiBXZWJIaXN0b3J5SXRlbTo6Y3JlYXRl
SW5zdGFuY2UoKQogewotICAgIFdlYkhpc3RvcnlJdGVtKiBpbnN0YW5jZSA9IG5ldyBXZWJIaXN0
b3J5SXRlbShuZXcgSGlzdG9yeUl0ZW0pOworICAgIFdlYkhpc3RvcnlJdGVtKiBpbnN0YW5jZSA9
IG5ldyBXZWJIaXN0b3J5SXRlbShIaXN0b3J5SXRlbTo6Y3JlYXRlKCkpOwogICAgIGluc3RhbmNl
LT5BZGRSZWYoKTsKICAgICByZXR1cm4gaW5zdGFuY2U7CiB9CkBAIC0xMjYsNyArMTI2LDcgQEAg
SFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJIaXN0b3J5SXRlbQogICAgIH0KIAogICAgIGhp
c3RvcnlJdGVtV3JhcHBlcnMoKS5yZW1vdmUobV9oaXN0b3J5SXRlbS5nZXQoKSk7Ci0gICAgbV9o
aXN0b3J5SXRlbSA9IG5ldyBIaXN0b3J5SXRlbSh1cmxTdHJpbmdSZWYsIHRpdGxlUmVmLCBsYXN0
VmlzaXRlZFRpbWUpOworICAgIG1faGlzdG9yeUl0ZW0gPSBIaXN0b3J5SXRlbTo6Y3JlYXRlKHVy
bFN0cmluZ1JlZiwgdGl0bGVSZWYsIGxhc3RWaXNpdGVkVGltZSk7CiAgICAgaGlzdG9yeUl0ZW1X
cmFwcGVycygpLnNldChtX2hpc3RvcnlJdGVtLmdldCgpLCB0aGlzKTsKIAogICAgIGlmICghQ0ZO
dW1iZXJHZXRWYWx1ZSh2aXNpdENvdW50UmVmLCBrQ0ZOdW1iZXJJbnRUeXBlLCAmdmlzaXRlZENv
dW50KSkgewpAQCAtMzYwLDcgKzM2MCw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2Vi
SGlzdG9yeUl0ZW0KICAgICAvKiBbaW5dICovIERBVEUgbGFzdFZpc2l0ZWQpCiB7CiAgICAgaGlz
dG9yeUl0ZW1XcmFwcGVycygpLnJlbW92ZShtX2hpc3RvcnlJdGVtLmdldCgpKTsKLSAgICBtX2hp
c3RvcnlJdGVtID0gbmV3IEhpc3RvcnlJdGVtKFN0cmluZyh1cmxTdHJpbmcsIFN5c1N0cmluZ0xl
bih1cmxTdHJpbmcpKSwgU3RyaW5nKHRpdGxlLCBTeXNTdHJpbmdMZW4odGl0bGUpKSwgTWFyc2hh
bGxpbmdIZWxwZXJzOjpEQVRFVG9DRkFic29sdXRlVGltZShsYXN0VmlzaXRlZCkpOworICAgIG1f
aGlzdG9yeUl0ZW0gPSBIaXN0b3J5SXRlbTo6Y3JlYXRlKFN0cmluZyh1cmxTdHJpbmcsIFN5c1N0
cmluZ0xlbih1cmxTdHJpbmcpKSwgU3RyaW5nKHRpdGxlLCBTeXNTdHJpbmdMZW4odGl0bGUpKSwg
TWFyc2hhbGxpbmdIZWxwZXJzOjpEQVRFVG9DRkFic29sdXRlVGltZShsYXN0VmlzaXRlZCkpOwog
ICAgIGhpc3RvcnlJdGVtV3JhcHBlcnMoKS5zZXQobV9oaXN0b3J5SXRlbS5nZXQoKSwgdGhpcyk7
CiAKICAgICByZXR1cm4gU19PSzsKSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvbWFrZS1qcy10
ZXN0LXdyYXBwZXJzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvbWFrZS1qcy10
ZXN0LXdyYXBwZXJzCShyZXZpc2lvbiAzNDM3NikKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvbWFr
ZS1qcy10ZXN0LXdyYXBwZXJzCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAsNiArMTAwLDcgQEAgZm9y
IG15ICR0ZmlsZSAoQHRlbXBsYXRlcykgewogICAgICAgICBuZXh0IGlmICRmaWxlID1+IG06cmVz
b3VyY2VzL3NlbGVjdC1vcHRpb25zLXJlbW92ZVwuanMkOjsKICAgICAgICAgbmV4dCBpZiAkZmls
ZSA9fiBtOnJlc291cmNlcy90YWJpbmRleC1mb2N1cy1ibHVyLWFsbFwuanMkOjsKICAgICAgICAg
bmV4dCBpZiAkZmlsZSA9fiBtOnJlc291cmNlcy93cmFwcGVyLWlkZW50aXR5LWJhc2VcLmpzJDo7
CisgICAgICAgIG5leHQgaWYgJGZpbGUgPX4gbTpyZXNvdXJjZXMveGh0bWwtc2NyaXB0c1wuanMk
OjsKIAogICAgICAgICBteSAkaHRtbCA9ICRmaWxlOwogICAgICAgICAkaHRtbCA9fiBzOnJlc291
cmNlcy8oLiopXC5qczokMS5odG1sOjsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>21572</attachid>
            <date>2008-06-08 09:01:46 -0700</date>
            <delta_ts>2008-06-14 17:44:58 -0700</delta_ts>
            <desc>patch that does this for more classes</desc>
            <filename>RefCount1Patch.txt</filename>
            <type>text/plain</type>
            <size>300399</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzNDQzOCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDQ1IEBACisyMDA4LTA2LTA4ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIG1v
cmUgd29yayBvbiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcyNTcK
KyAgICAgICAgICBzdGFydCByZWYgY291bnRzIGF0IDEgaW5zdGVhZCBvZiAwIGZvciBzcGVlZAor
CisgICAgICAgICogV2ViQ29yZS5iYXNlLmV4cDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1NW
R01hdHJpeEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1NWR01hdHJpeDo6bXVsdGlw
bHkpOgorICAgICAgICAoV2ViQ29yZTo6SlNTVkdNYXRyaXg6OmludmVyc2UpOgorICAgICAgICAo
V2ViQ29yZTo6SlNTVkdNYXRyaXg6OnRyYW5zbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1NW
R01hdHJpeDo6c2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNTVkdNYXRyaXg6OnNjYWxlTm9u
VW5pZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpKU1NWR01hdHJpeDo6cm90YXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTU1ZHTWF0cml4Ojpyb3RhdGVGcm9tVmVjdG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OkpTU1ZHTWF0cml4OjpmbGlwWCk6CisgICAgICAgIChXZWJDb3JlOjpKU1NWR01hdHJp
eDo6ZmxpcFkpOgorICAgICAgICAoV2ViQ29yZTo6SlNTVkdNYXRyaXg6OnNrZXdYKToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTU1ZHTWF0cml4Ojpza2V3WSk6CisgICAgICAgICogYmluZGluZ3MvanMv
SlNTVkdQT0RUeXBlV3JhcHBlci5oOgorICAgICAgICAoV2ViQ29yZTo6SlNTVkdQT0RUeXBlV3Jh
cHBlckNyZWF0b3JSZWFkV3JpdGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1NWR1BP
RFR5cGVXcmFwcGVyQ3JlYXRvclJlYWRXcml0ZTo6SlNTVkdQT0RUeXBlV3JhcHBlckNyZWF0b3JS
ZWFkV3JpdGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNTVkdQT0RUeXBlV3JhcHBlckNyZWF0b3JS
ZWFkT25seTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTU1ZHUE9EVHlwZVdyYXBwZXJD
cmVhdG9yUmVhZE9ubHk6OkpTU1ZHUE9EVHlwZVdyYXBwZXJDcmVhdG9yUmVhZE9ubHkpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNTVkdQT0RUeXBlV3JhcHBlckNyZWF0b3JGb3JMaXN0OjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6SlNTVkdQT0RUeXBlV3JhcHBlckNyZWF0b3JGb3JMaXN0OjpK
U1NWR1BPRFR5cGVXcmFwcGVyQ3JlYXRvckZvckxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6SlNT
VkdQT0RUeXBlV3JhcHBlckNhY2hlOjpsb29rdXBPckNyZWF0ZVdyYXBwZXIpOgorICAgICAgICAo
V2ViQ29yZTo6SlNTVkdQT0RUeXBlV3JhcHBlckNhY2hlOjpmb3JnZXRXcmFwcGVyKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU1NWR1BvaW50TGlzdEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpmaW5pc2hHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6ZmluaXNoU2V0dGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OmZpbmlzaFNldHRlclJlYWRPbmx5UmVzdWx0KToKKyAgICAgICAgKFdl
YkNvcmU6OkpTU1ZHUG9pbnRMaXN0OjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpKU1NWR1Bv
aW50TGlzdDo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1NWR1BvaW50TGlzdDo6
Z2V0SXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpKU1NWR1BvaW50TGlzdDo6aW5zZXJ0SXRlbUJl
Zm9yZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1NWR1BvaW50TGlzdDo6cmVwbGFjZUl0ZW0pOgor
ICAgICAgICAoV2ViQ29yZTo6SlNTVkdQb2ludExpc3Q6OnJlbW92ZUl0ZW0pOgorICAgICAgICAo
V2ViQ29yZTo6SlNTVkdQb2ludExpc3Q6OmFwcGVuZEl0ZW0pOgorICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTU1ZHVHJhbnNmb3JtTGlzdEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpmaW5p
c2hHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6ZmluaXNoU2V0dGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OmZpbmlzaFNldHRlclJlYWRPbmx5UmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkpT
U1ZHVHJhbnNmb3JtTGlzdDo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNTVkdUcmFuc2Zv
cm1MaXN0Ojppbml0aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkpTU1ZHVHJhbnNmb3JtTGlz
dDo6Z2V0SXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpKU1NWR1RyYW5zZm9ybUxpc3Q6Omluc2Vy
dEl0ZW1CZWZvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SlNTVkdUcmFuc2Zvcm1MaXN0OjpyZXBs
YWNlSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpKU1NWR1RyYW5zZm9ybUxpc3Q6OnJlbW92ZUl0
ZW0pOgorICAgICAgICAoV2ViQ29yZTo6SlNTVkdUcmFuc2Zvcm1MaXN0OjphcHBlbmRJdGVtKToK
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbToKKyAgICAgICAg
KiBjc3MvQ1NTRm9udFNlbGVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRTZWxl
Y3Rvcjo6Q1NTRm9udFNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRTZWxlY3Rv
cjo6fkNTU0ZvbnRTZWxlY3Rvcik6CisgICAgICAgICogY3NzL0NTU0ZvbnRTZWxlY3Rvci5oOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udFNlbGVjdG9yOjpjcmVhdGUpOgorICAgICAgICAqIGNz
cy9DU1NTdHlsZVNlbGVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0
b3I6OkNTU1N0eWxlU2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rv
cjo6YXBwbHlQcm9wZXJ0eSk6CisgICAgICAgICogZG9tL0F0dHJpYnV0ZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpBdHRyaWJ1dGU6OmNsb25lKToKKyAgICAgICAgKiBkb20vQXR0cmlidXRlLmg6
CisgICAgICAgIChXZWJDb3JlOjpBdHRyaWJ1dGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpBdHRyaWJ1dGU6OkF0dHJpYnV0ZSk6CisgICAgICAgICogZG9tL0JlZm9yZVRleHRJbnNlcnRl
ZEV2ZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudDo6Y3Jl
YXRlKToKKyAgICAgICAgKiBkb20vQmVmb3JlVW5sb2FkRXZlbnQuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkJlZm9yZVVubG9hZEV2ZW50OjpjcmVhdGUpOgorICAgICAgICAqIGRvbS9DaGFyYWN0ZXJE
YXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNoYXJhY3RlckRhdGE6OmRpc3BhdGNoTW9kaWZp
ZWRFdmVudCk6CisgICAgICAgICogZG9tL0NsaXBib2FyZEV2ZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNsaXBib2FyZEV2ZW50OjpDbGlwYm9hcmRFdmVudCk6CisgICAgICAgICogZG9tL0Ns
aXBib2FyZEV2ZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRFdmVudDo6Y3JlYXRl
KToKKyAgICAgICAgKiBkb20vQ29udGFpbmVyTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
b250YWluZXJOb2RlOjpyZW1vdmVDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpkaXNwYXRjaENo
aWxkSW5zZXJ0aW9uRXZlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OmRpc3BhdGNoQ2hpbGRSZW1v
dmFsRXZlbnRzKToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RG9jdW1lbnQ6OmNyZWF0ZVRleHROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50
OjpjcmVhdGVDb21tZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpjcmVhdGVDREFU
QVNlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmNyZWF0ZVByb2Nlc3NpbmdJ
bnN0cnVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6Y3JlYXRlRW50aXR5UmVm
ZXJlbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpjcmVhdGVFZGl0aW5nVGV4dE5v
ZGUpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmNyZWF0ZUV2ZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkRvY3VtZW50OjpjcmVhdGVBdHRyaWJ1dGVOUyk6CisgICAgICAgIChXZWJDb3Jl
OjpEb2N1bWVudDo6ZmluaXNoZWRQYXJzaW5nKToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuaDoK
KyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50Ojpj
cmVhdGVBdHRyaWJ1dGUpOgorICAgICAgICAqIGRvbS9FbGVtZW50Lmg6CisgICAgICAgICogZG9t
L0V2ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50OjpFdmVudCk6CisgICAgICAgICog
ZG9tL0V2ZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpFdmVudDo6Y3JlYXRlKToKKyAgICAgICAg
KiBkb20vRXZlbnRUYXJnZXROb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50VGFyZ2V0
Tm9kZTo6ZGlzcGF0Y2hTdWJ0cmVlTW9kaWZpZWRFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpF
dmVudFRhcmdldE5vZGU6OmRpc3BhdGNoV2luZG93RXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6
RXZlbnRUYXJnZXROb2RlOjpkaXNwYXRjaFVJRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RXZl
bnRUYXJnZXROb2RlOjpkaXNwYXRjaEtleUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50
VGFyZ2V0Tm9kZTo6ZGlzcGF0Y2hNb3VzZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50
VGFyZ2V0Tm9kZTo6ZGlzcGF0Y2hXaGVlbEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50
VGFyZ2V0Tm9kZTo6ZGlzcGF0Y2hIVE1MRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRU
YXJnZXROb2RlOjpkaXNwYXRjaFByb2dyZXNzRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RXZl
bnRUYXJnZXROb2RlOjpkaXNwYXRjaFN0b3JhZ2VFdmVudCk6CisgICAgICAgICogZG9tL0tleWJv
YXJkRXZlbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OktleWJvYXJkRXZlbnQ6OmNyZWF0ZSk6Cisg
ICAgICAgICogZG9tL01hcHBlZEF0dHJpYnV0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNYXBw
ZWRBdHRyaWJ1dGU6OmNsb25lKToKKyAgICAgICAgKiBkb20vTWFwcGVkQXR0cmlidXRlLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpNYXBwZWRBdHRyaWJ1dGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpNYXBwZWRBdHRyaWJ1dGU6OnNldERlY2wpOgorICAgICAgICAoV2ViQ29yZTo6TWFwcGVk
QXR0cmlidXRlOjpNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAqIGRvbS9NZXNzYWdlRXZlbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZUV2ZW50OjpNZXNzYWdlRXZlbnQpOgorICAg
ICAgICAqIGRvbS9NZXNzYWdlRXZlbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VFdmVu
dDo6Y3JlYXRlKToKKyAgICAgICAgKiBkb20vTW91c2VFdmVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpNb3VzZUV2ZW50OjpNb3VzZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6Ok1vdXNlRXZl
bnQ6OmluaXRNb3VzZUV2ZW50KToKKyAgICAgICAgKiBkb20vTW91c2VFdmVudC5oOgorICAgICAg
ICAoV2ViQ29yZTo6TW91c2VFdmVudDo6Y3JlYXRlKToKKyAgICAgICAgKiBkb20vTW91c2VSZWxh
dGVkRXZlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TW91c2VSZWxhdGVkRXZlbnQ6Ok1vdXNl
UmVsYXRlZEV2ZW50KToKKyAgICAgICAgKiBkb20vTW91c2VSZWxhdGVkRXZlbnQuaDoKKyAgICAg
ICAgKiBkb20vTXV0YXRpb25FdmVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNdXRhdGlvbkV2
ZW50OjpNdXRhdGlvbkV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6Ok11dGF0aW9uRXZlbnQ6Omlu
aXRNdXRhdGlvbkV2ZW50KToKKyAgICAgICAgKiBkb20vTXV0YXRpb25FdmVudC5oOgorICAgICAg
ICAoV2ViQ29yZTo6TXV0YXRpb25FdmVudDo6Y3JlYXRlKToKKyAgICAgICAgKiBkb20vT3ZlcmZs
b3dFdmVudC5oOgorICAgICAgICAoV2ViQ29yZTo6T3ZlcmZsb3dFdmVudDo6Y3JlYXRlKToKKyAg
ICAgICAgKiBkb20vUHJvZ3Jlc3NFdmVudC5oOgorICAgICAgICAoV2ViQ29yZTo6UHJvZ3Jlc3NF
dmVudDo6Y3JlYXRlKToKKyAgICAgICAgKiBkb20vU3R5bGVkRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZWRFbGVtZW50OjpnZXRNYXBwZWRBdHRyaWJ1dGVEZWNsKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlZEVsZW1lbnQ6OnNldE1hcHBlZEF0dHJpYnV0ZURlY2wpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVkRWxlbWVudDo6cmVtb3ZlTWFwcGVkQXR0cmlidXRlRGVjbCk6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZWRFbGVtZW50OjpjcmVhdGVBdHRyaWJ1dGUpOgorICAg
ICAgICAqIGRvbS9TdHlsZWRFbGVtZW50Lmg6CisgICAgICAgICogZG9tL1RleHRFdmVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0RXZlbnQ6OlRleHRFdmVudCk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0RXZlbnQ6OmluaXRUZXh0RXZlbnQpOgorICAgICAgICAqIGRvbS9UZXh0RXZlbnQu
aDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRFdmVudDo6Y3JlYXRlKToKKyAgICAgICAgKiBkb20v
VUlFdmVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpVSUV2ZW50OjpVSUV2ZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlVJRXZlbnQ6OmluaXRVSUV2ZW50KToKKyAgICAgICAgKiBkb20vVUlFdmVu
dC5oOgorICAgICAgICAoV2ViQ29yZTo6VUlFdmVudDo6Y3JlYXRlKToKKyAgICAgICAgKiBkb20v
VUlFdmVudFdpdGhLZXlTdGF0ZS5oOgorICAgICAgICAoV2ViQ29yZTo6VUlFdmVudFdpdGhLZXlT
dGF0ZTo6Y3RybEtleSk6CisgICAgICAgIChXZWJDb3JlOjpVSUV2ZW50V2l0aEtleVN0YXRlOjpz
aGlmdEtleSk6CisgICAgICAgIChXZWJDb3JlOjpVSUV2ZW50V2l0aEtleVN0YXRlOjphbHRLZXkp
OgorICAgICAgICAoV2ViQ29yZTo6VUlFdmVudFdpdGhLZXlTdGF0ZTo6bWV0YUtleSk6CisgICAg
ICAgIChXZWJDb3JlOjpVSUV2ZW50V2l0aEtleVN0YXRlOjpVSUV2ZW50V2l0aEtleVN0YXRlKToK
KyAgICAgICAgKiBkb20vV2hlZWxFdmVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXaGVlbEV2
ZW50OjpXaGVlbEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OldoZWVsRXZlbnQ6OmluaXRXaGVl
bEV2ZW50KToKKyAgICAgICAgKiBkb20vV2hlZWxFdmVudC5oOgorICAgICAgICAoV2ViQ29yZTo6
V2hlZWxFdmVudDo6Y3JlYXRlKToKKyAgICAgICAgKiBlZGl0aW5nL0FwcGVuZE5vZGVDb21tYW5k
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGVuZE5vZGVDb21tYW5kOjpBcHBlbmROb2RlQ29t
bWFuZCk6CisgICAgICAgICogZWRpdGluZy9BcHBlbmROb2RlQ29tbWFuZC5oOgorICAgICAgICAo
V2ViQ29yZTo6QXBwZW5kTm9kZUNvbW1hbmQ6OmNyZWF0ZSk6CisgICAgICAgICogZWRpdGluZy9B
cHBseVN0eWxlQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFu
ZDo6YXBwbHlCbG9ja1N0eWxlKToKKyAgICAgICAgKiBlZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5k
Lmg6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6Y3JlYXRlKToKKyAgICAg
ICAgKiBlZGl0aW5nL0JyZWFrQmxvY2txdW90ZUNvbW1hbmQuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkJyZWFrQmxvY2txdW90ZUNvbW1hbmQ6OmNyZWF0ZSk6CisgICAgICAgICogZWRpdGluZy9Db21w
b3NpdGVFZGl0Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29t
bWFuZDo6YXBwbHlTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFu
ZDo6YXBwbHlTdHlsZWRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRD
b21tYW5kOjpyZW1vdmVTdHlsZWRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0
ZUVkaXRDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6Omluc2VydExpbmVCcmVhayk6CisgICAgICAgIChXZWJD
b3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6aW5zZXJ0Tm9kZUJlZm9yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6YXBwZW5kTm9kZSk6CisgICAgICAgIChXZWJD
b3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVtb3ZlTm9kZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbik6Cisg
ICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6c3BsaXRUZXh0Tm9kZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6c3BsaXRFbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjptZXJnZUlkZW50aWNhbEVsZW1l
bnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjp3cmFwQ29udGVu
dHNJbkR1bW15U3Bhbik6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6
c3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBv
c2l0ZUVkaXRDb21tYW5kOjpqb2luVGV4dE5vZGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBv
c2l0ZUVkaXRDb21tYW5kOjppbnB1dFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRl
RWRpdENvbW1hbmQ6Omluc2VydFRleHRJbnRvTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpDb21w
b3NpdGVFZGl0Q29tbWFuZDo6ZGVsZXRlVGV4dEZyb21Ob2RlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZXBsYWNlVGV4dEluTm9kZSk6CisgICAgICAgIChXZWJD
b3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6ZGVsZXRlU2VsZWN0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZW1vdmVDU1NQcm9wZXJ0eSk6CisgICAgICAg
IChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVtb3ZlTm9kZUF0dHJpYnV0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6c2V0Tm9kZUF0dHJpYnV0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6YXBwZW5kQmxvY2tQbGFj
ZWhvbGRlcik6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6aW5zZXJ0
QmxvY2tQbGFjZWhvbGRlcik6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFu
ZDo6YWRkQmxvY2tQbGFjZWhvbGRlcklmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBv
c2l0ZUVkaXRDb21tYW5kOjptb3ZlUGFyYWdyYXBoQ29udGVudHNUb05ld0Jsb2NrSWZOZWNlc3Nh
cnkpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6Om1vdmVQYXJhZ3Jh
cGhzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjpzcGxpdFRyZWVU
b05vZGUpOgorICAgICAgICAqIGVkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjppc0ZpcnN0Q29tbWFuZCk6CisgICAg
ICAgICogZWRpdGluZy9DcmVhdGVMaW5rQ29tbWFuZC5oOgorICAgICAgICAoV2ViQ29yZTo6Q3Jl
YXRlTGlua0NvbW1hbmQ6OmNyZWF0ZSk6CisgICAgICAgICogZWRpdGluZy9EZWxldGVCdXR0b25D
b250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZUJ1dHRvbkNvbnRyb2xsZXI6
OmRlbGV0ZVRhcmdldCk6CisgICAgICAgICogZWRpdGluZy9EZWxldGVGcm9tVGV4dE5vZGVDb21t
YW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZUZyb21UZXh0Tm9kZUNvbW1hbmQ6OkRl
bGV0ZUZyb21UZXh0Tm9kZUNvbW1hbmQpOgorICAgICAgICAqIGVkaXRpbmcvRGVsZXRlRnJvbVRl
eHROb2RlQ29tbWFuZC5oOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlRnJvbVRleHROb2RlQ29t
bWFuZDo6Y3JlYXRlKToKKyAgICAgICAgKiBlZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmNyZWF0ZSk6Cisg
ICAgICAgICogZWRpdGluZy9FZGl0Q29tbWFuZC5oOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxl
RWRpdENvbW1hbmQ6OlNpbXBsZUVkaXRDb21tYW5kKToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRv
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmRlbGV0ZVNlbGVjdGlvbldpdGhTbWFy
dERlbGV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnJlcGxhY2VTZWxlY3Rpb25XaXRo
RnJhZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpyZW1vdmVGb3JtYXR0aW5nQW5k
U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpjbGVhckxhc3RFZGl0Q29tbWFuZCk6
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmRpc3BhdGNoQ1BQRXZlbnQpOgorICAgICAgICAo
V2ViQ29yZTo6RWRpdG9yOjphcHBseVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6
YXBwbHlQYXJhZ3JhcGhTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmluZGVudCk6
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Om91dGRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6
ZGlzcGF0Y2hFZGl0YWJsZUNvbnRlbnRDaGFuZ2VkRXZlbnRzKToKKyAgICAgICAgKiBlZGl0aW5n
L0VkaXRvci5oOgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpleGVjdXRlSW5zZXJ0RnJhZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6ZXhl
Y3V0ZUNyZWF0ZUxpbmspOgorICAgICAgICAoV2ViQ29yZTo6ZXhlY3V0ZUZvcm1hdEJsb2NrKToK
KyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVJbmRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6ZXhl
Y3V0ZUluc2VydE9yZGVyZWRMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVJbnNlcnRV
bm9yZGVyZWRMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVPdXRkZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OmV4ZWN1dGVVbmxpbmspOgorICAgICAgICAqIGVkaXRpbmcvRm9ybWF0Qmxv
Y2tDb21tYW5kLmg6CisgICAgICAgIChXZWJDb3JlOjpGb3JtYXRCbG9ja0NvbW1hbmQ6OmNyZWF0
ZSk6CisgICAgICAgICogZWRpdGluZy9JbmRlbnRPdXRkZW50Q29tbWFuZC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbmRlbnRPdXRkZW50Q29tbWFuZDo6aW5kZW50UmVnaW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkluZGVudE91dGRlbnRDb21tYW5kOjpvdXRkZW50UGFyYWdyYXBoKToKKyAgICAg
ICAgKiBlZGl0aW5nL0luZGVudE91dGRlbnRDb21tYW5kLmg6CisgICAgICAgIChXZWJDb3JlOjpJ
bmRlbnRPdXRkZW50Q29tbWFuZDo6Y3JlYXRlKToKKyAgICAgICAgKiBlZGl0aW5nL0luc2VydElu
dG9UZXh0Tm9kZUNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0SW50b1RleHRO
b2RlQ29tbWFuZDo6SW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZCk6CisgICAgICAgICogZWRpdGlu
Zy9JbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kLmg6CisgICAgICAgIChXZWJDb3JlOjpJbnNlcnRJ
bnRvVGV4dE5vZGVDb21tYW5kOjpjcmVhdGUpOgorICAgICAgICAqIGVkaXRpbmcvSW5zZXJ0TGlu
ZUJyZWFrQ29tbWFuZC5oOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0TGluZUJyZWFrQ29tbWFu
ZDo6Y3JlYXRlKToKKyAgICAgICAgKiBlZGl0aW5nL0luc2VydExpc3RDb21tYW5kLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Okluc2VydExpc3RDb21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBl
ZGl0aW5nL0luc2VydExpc3RDb21tYW5kLmg6CisgICAgICAgIChXZWJDb3JlOjpJbnNlcnRMaXN0
Q29tbWFuZDo6Y3JlYXRlKToKKyAgICAgICAgKiBlZGl0aW5nL0luc2VydE5vZGVCZWZvcmVDb21t
YW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc2VydE5vZGVCZWZvcmVDb21tYW5kOjpJbnNl
cnROb2RlQmVmb3JlQ29tbWFuZCk6CisgICAgICAgICogZWRpdGluZy9JbnNlcnROb2RlQmVmb3Jl
Q29tbWFuZC5oOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0Tm9kZUJlZm9yZUNvbW1hbmQ6OmNy
ZWF0ZSk6CisgICAgICAgICogZWRpdGluZy9JbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5k
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQ6
OmRvQXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcvSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29t
bWFuZC5oOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFu
ZDo6Y3JlYXRlKToKKyAgICAgICAgKiBlZGl0aW5nL0luc2VydFRleHRDb21tYW5kLmg6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNlcnRUZXh0Q29tbWFuZDo6Y3JlYXRlKToKKyAgICAgICAgKiBlZGl0
aW5nL0pvaW5UZXh0Tm9kZXNDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpvaW5UZXh0
Tm9kZXNDb21tYW5kOjpKb2luVGV4dE5vZGVzQ29tbWFuZCk6CisgICAgICAgICogZWRpdGluZy9K
b2luVGV4dE5vZGVzQ29tbWFuZC5oOgorICAgICAgICAoV2ViQ29yZTo6Sm9pblRleHROb2Rlc0Nv
bW1hbmQ6OmNyZWF0ZSk6CisgICAgICAgICogZWRpdGluZy9NZXJnZUlkZW50aWNhbEVsZW1lbnRz
Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZXJnZUlkZW50aWNhbEVsZW1lbnRzQ29t
bWFuZDo6TWVyZ2VJZGVudGljYWxFbGVtZW50c0NvbW1hbmQpOgorICAgICAgICAqIGVkaXRpbmcv
TWVyZ2VJZGVudGljYWxFbGVtZW50c0NvbW1hbmQuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lcmdl
SWRlbnRpY2FsRWxlbWVudHNDb21tYW5kOjpjcmVhdGUpOgorICAgICAgICAqIGVkaXRpbmcvTW9k
aWZ5U2VsZWN0aW9uTGlzdExldmVsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkluY3JlYXNlU2Vs
ZWN0aW9uTGlzdExldmVsQ29tbWFuZDo6aW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxXaXRoVHlw
ZSk6CisgICAgICAgICogZWRpdGluZy9Nb3ZlU2VsZWN0aW9uQ29tbWFuZC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpNb3ZlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgICogZWRp
dGluZy9Nb3ZlU2VsZWN0aW9uQ29tbWFuZC5oOgorICAgICAgICAoV2ViQ29yZTo6TW92ZVNlbGVj
dGlvbkNvbW1hbmQ6OmNyZWF0ZSk6CisgICAgICAgICogZWRpdGluZy9SZW1vdmVDU1NQcm9wZXJ0
eUNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVtb3ZlQ1NTUHJvcGVydHlDb21tYW5k
OjpSZW1vdmVDU1NQcm9wZXJ0eUNvbW1hbmQpOgorICAgICAgICAqIGVkaXRpbmcvUmVtb3ZlQ1NT
UHJvcGVydHlDb21tYW5kLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW1vdmVDU1NQcm9wZXJ0eUNv
bW1hbmQ6OmNyZWF0ZSk6CisgICAgICAgICogZWRpdGluZy9SZW1vdmVGb3JtYXRDb21tYW5kLmg6
CisgICAgICAgIChXZWJDb3JlOjpSZW1vdmVGb3JtYXRDb21tYW5kOjpjcmVhdGUpOgorICAgICAg
ICAqIGVkaXRpbmcvUmVtb3ZlTm9kZUF0dHJpYnV0ZUNvbW1hbmQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVtb3ZlTm9kZUF0dHJpYnV0ZUNvbW1hbmQ6OlJlbW92ZU5vZGVBdHRyaWJ1dGVDb21t
YW5kKToKKyAgICAgICAgKiBlZGl0aW5nL1JlbW92ZU5vZGVBdHRyaWJ1dGVDb21tYW5kLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW1vdmVOb2RlQXR0cmlidXRlQ29tbWFuZDo6Y3JlYXRlKToKKyAg
ICAgICAgKiBlZGl0aW5nL1JlbW92ZU5vZGVDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbW92ZU5vZGVDb21tYW5kOjpSZW1vdmVOb2RlQ29tbWFuZCk6CisgICAgICAgICogZWRpdGlu
Zy9SZW1vdmVOb2RlQ29tbWFuZC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVtb3ZlTm9kZUNvbW1h
bmQ6OmNyZWF0ZSk6CisgICAgICAgICogZWRpdGluZy9SZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxk
cmVuQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW1vdmVOb2RlUHJlc2VydmluZ0No
aWxkcmVuQ29tbWFuZDo6UmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbkNvbW1hbmQpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbkNvbW1hbmQ6OmRvQXBw
bHkpOgorICAgICAgICAqIGVkaXRpbmcvUmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbkNvbW1h
bmQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW5Db21t
YW5kOjpjcmVhdGUpOgorICAgICAgICAqIGVkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6KToKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxhY2VtZW50
RnJhZ21lbnQ6Omhhc0ludGVyY2hhbmdlTmV3bGluZUF0U3RhcnQpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVwbGFjZW1lbnRGcmFnbWVudDo6aGFzSW50ZXJjaGFuZ2VOZXdsaW5lQXRFbmQpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVwbGFjZW1lbnRGcmFnbWVudDo6UmVwbGFjZW1lbnRGcmFnbWVudCk6
CisgICAgICAgICogZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5oOgorICAgICAgICAo
V2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmNyZWF0ZSk6CisgICAgICAgICogZWRp
dGluZy9TZXROb2RlQXR0cmlidXRlQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZXRO
b2RlQXR0cmlidXRlQ29tbWFuZDo6U2V0Tm9kZUF0dHJpYnV0ZUNvbW1hbmQpOgorICAgICAgICAq
IGVkaXRpbmcvU2V0Tm9kZUF0dHJpYnV0ZUNvbW1hbmQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNl
dE5vZGVBdHRyaWJ1dGVDb21tYW5kOjpjcmVhdGUpOgorICAgICAgICAqIGVkaXRpbmcvU3BsaXRF
bGVtZW50Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTcGxpdEVsZW1lbnRDb21tYW5k
OjpTcGxpdEVsZW1lbnRDb21tYW5kKToKKyAgICAgICAgKiBlZGl0aW5nL1NwbGl0RWxlbWVudENv
bW1hbmQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNwbGl0RWxlbWVudENvbW1hbmQ6OmNyZWF0ZSk6
CisgICAgICAgICogZWRpdGluZy9TcGxpdFRleHROb2RlQ29tbWFuZC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTcGxpdFRleHROb2RlQ29tbWFuZDo6U3BsaXRUZXh0Tm9kZUNvbW1hbmQpOgorICAg
ICAgICAqIGVkaXRpbmcvU3BsaXRUZXh0Tm9kZUNvbW1hbmQuaDoKKyAgICAgICAgKFdlYkNvcmU6
OlNwbGl0VGV4dE5vZGVDb21tYW5kOjpjcmVhdGUpOgorICAgICAgICAqIGVkaXRpbmcvU3BsaXRU
ZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
cGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnRDb21tYW5kOjpTcGxpdFRleHROb2RlQ29udGFp
bmluZ0VsZW1lbnRDb21tYW5kKToKKyAgICAgICAgKiBlZGl0aW5nL1NwbGl0VGV4dE5vZGVDb250
YWluaW5nRWxlbWVudENvbW1hbmQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNwbGl0VGV4dE5vZGVD
b250YWluaW5nRWxlbWVudENvbW1hbmQ6OmNyZWF0ZSk6CisgICAgICAgICogZWRpdGluZy9UeXBp
bmdDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6OmRlbGV0ZVNl
bGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjpkZWxldGVLZXlQcmVz
c2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6OmZvcndhcmREZWxldGVLZXlQ
cmVzc2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHQpOgor
ICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6aW5zZXJ0TGluZUJyZWFrKToKKyAgICAg
ICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6Omluc2VydFBhcmFncmFwaFNlcGFyYXRvckluUXVv
dGVkQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJh
Z3JhcGhTZXBhcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6aW5zZXJ0
VGV4dFJ1bldpdGhvdXROZXdsaW5lcyk6CisgICAgICAgICogZWRpdGluZy9UeXBpbmdDb21tYW5k
Lmg6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6c21hcnREZWxldGUpOgorICAgICAgICAqIGVkaXRpbmcv
VW5saW5rQ29tbWFuZC5oOgorICAgICAgICAoV2ViQ29yZTo6VW5saW5rQ29tbWFuZDo6Y3JlYXRl
KToKKyAgICAgICAgKiBlZGl0aW5nL1dyYXBDb250ZW50c0luRHVtbXlTcGFuQ29tbWFuZC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpXcmFwQ29udGVudHNJbkR1bW15U3BhbkNvbW1hbmQ6OldyYXBD
b250ZW50c0luRHVtbXlTcGFuQ29tbWFuZCk6CisgICAgICAgICogZWRpdGluZy9XcmFwQ29udGVu
dHNJbkR1bW15U3BhbkNvbW1hbmQuaDoKKyAgICAgICAgKFdlYkNvcmU6OldyYXBDb250ZW50c0lu
RHVtbXlTcGFuQ29tbWFuZDo6Y3JlYXRlKToKKyAgICAgICAgKiBodG1sL0hUTUxUYWJsZUVsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRhYmxlRWxlbWVudDo6YWRkaXRpb25hbEF0
dHJpYnV0ZVN0eWxlRGVjbHMpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRhYmxlRWxlbWVudDo6
YWRkU2hhcmVkQ2VsbEJvcmRlcnNEZWNsKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUYWJsZUVs
ZW1lbnQ6OmFkZFNoYXJlZENlbGxQYWRkaW5nRGVjbCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
VGFibGVFbGVtZW50OjphZGRTaGFyZWRHcm91cERlY2xzKToKKyAgICAgICAgKiBodG1sL0hUTUxU
b2tlbml6ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VG9rZW46OmFkZEF0dHJpYnV0ZSk6Cisg
ICAgICAgICogaHRtbC9IVE1MVmlld1NvdXJjZURvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxWaWV3U291cmNlRG9jdW1lbnQ6OmNyZWF0ZUNvbnRhaW5pbmdUYWJsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MVmlld1NvdXJjZURvY3VtZW50OjphZGRTcGFuV2l0aENsYXNzTmFt
ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVmlld1NvdXJjZURvY3VtZW50OjphZGRMaW5lKToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxWaWV3U291cmNlRG9jdW1lbnQ6OmFkZExpbmspOgorICAg
ICAgICAqIGxvYWRlci9GcmFtZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxv
YWRlcjo6ZGlkT3BlblVSTCk6CisgICAgICAgICogbG9hZGVyL2FwcGNhY2hlL0RPTUFwcGxpY2F0
aW9uQ2FjaGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9NQXBwbGljYXRpb25DYWNoZTo6Y2Fs
bExpc3RlbmVyKToKKyAgICAgICAgKiBwYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDb250ZXh0TWVudUNvbnRyb2xsZXI6OmNvbnRleHRNZW51SXRlbVNl
bGVjdGVkKToKKyAgICAgICAgKiBwYWdlL0RPTVdpbmRvdy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpQb3N0TWVzc2FnZVRpbWVyOjpQb3N0TWVzc2FnZVRpbWVyKToKKyAgICAgICAgKFdlYkNvcmU6
OlBvc3RNZXNzYWdlVGltZXI6OmZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVdpbmRvdzo6
cG9zdE1lc3NhZ2UpOgorICAgICAgICAqIHBhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RHJhZ0NvbnRyb2xsZXI6OmNvbmNsdWRlRHJhZyk6CisgICAgICAgICogcGFn
ZS9FdmVudEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpkaXNw
YXRjaERyYWdFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmtleUV2ZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxlVGV4dElucHV0RXZlbnQp
OgorICAgICAgICAqIHBhZ2UvRnJhbWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OmNv
bXB1dGVBbmRTZXRUeXBpbmdTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6c2hvdWxk
Q2xvc2UpOgorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lVmlldzo6dXBkYXRlT3ZlcmZsb3dTdGF0dXMpOgorICAgICAgICAqIHBhZ2UvbWFjL0V2
ZW50SGFuZGxlck1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6Y3VycmVu
dEtleWJvYXJkRXZlbnQpOgorICAgICAgICAqIHBhZ2UvbWFjL0ZyYW1lTWFjLm1tOgorICAgICAg
ICAqIHBsYXRmb3JtL0RlcHJlY2F0ZWRWYWx1ZUxpc3RJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkRlcHJlY2F0ZWRWYWx1ZUxpc3RJbXBsOjpQcml2YXRlOjpQcml2YXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkRlcHJlY2F0ZWRWYWx1ZUxpc3RJbXBsOjpEZXByZWNhdGVkVmFsdWVMaXN0SW1w
bCk6CisgICAgICAgIChXZWJDb3JlOjpEZXByZWNhdGVkVmFsdWVMaXN0SW1wbDo6Y29weU9uV3Jp
dGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRTZWxlY3Rvci5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZVRyZWVOb2RlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkdseXBoUGFnZVRyZWVOb2RlOjppbml0aWFsaXplUGFnZSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdlVHJlZU5vZGUuaDoKKyAgICAgICAgKFdlYkNvcmU6Okds
eXBoUGFnZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdseXBoUGFnZTo6R2x5cGhQYWdl
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbFRvT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyOjp1cGRhdGVPdmVyZmxvd1N0YXR1cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllcjo6dXBkYXRlUmVmbGVjdGlvblN0eWxlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUv
UmVuZGVyU3R5bGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlRyYW5zZm9ybU9wZXJhdGlvbjo6flRy
YW5zZm9ybU9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTY2FsZVRyYW5zZm9ybU9wZXJh
dGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjYWxlVHJhbnNmb3JtT3BlcmF0aW9u
OjpTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSb3RhdGVUcmFu
c2Zvcm1PcGVyYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSb3RhdGVUcmFuc2Zv
cm1PcGVyYXRpb246OlJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpTa2V3VHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2tl
d1RyYW5zZm9ybU9wZXJhdGlvbjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpTa2V3
VHJhbnNmb3JtT3BlcmF0aW9uOjpTa2V3VHJhbnNmb3JtT3BlcmF0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OlRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6b3BlcmF0b3I9PSk6CisgICAgICAg
IChXZWJDb3JlOjpUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OlRyYW5zbGF0ZVRyYW5zZm9y
bU9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb246
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb246Ok1h
dHJpeFRyYW5zZm9ybU9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlZmxlY3Rp
b246OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlZmxlY3Rpb246OlN0eWxlUmVm
bGVjdGlvbik6CisgICAgICAgICogc3RvcmFnZS9TdG9yYWdlRXZlbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U3RvcmFnZUV2ZW50OjpTdG9yYWdlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6
U3RvcmFnZUV2ZW50Ojppbml0U3RvcmFnZUV2ZW50KToKKyAgICAgICAgKiBzdG9yYWdlL1N0b3Jh
Z2VFdmVudC5oOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUV2ZW50OjpjcmVhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6U3RvcmFnZUV2ZW50OjpTdG9yYWdlRXZlbnQpOgorICAgICAgICAqIHN2
Zy9TVkdBbmdsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmdsZTo6U1ZHQW5nbGUpOgor
ICAgICAgICAqIHN2Zy9TVkdBbmdsZS5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5nbGU6OmNy
ZWF0ZSk6CisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVkVGVtcGxhdGUuaDoKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0FuaW1hdGVkVGVtcGxhdGU6OlNWR0FuaW1hdGVkVGVtcGxhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6bG9va3VwT3JDcmVhdGVXcmFwcGVyKToKKyAgICAgICAgKiBzdmcvU1ZHRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGVtZW50OjpzZW5kU1ZHTG9hZEV2ZW50
SWZQb3NzaWJsZSk6CisgICAgICAgICogc3ZnL1NWR0VsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcv
U1ZHTWFya2VyRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdNYXJrZXJFbGVtZW50
OjpTVkdNYXJrZXJFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR01hcmtlckVsZW1lbnQ6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR01hcmtlckVsZW1l
bnQ6OnNldE9yaWVudFRvQW5nbGUpOgorICAgICAgICAqIHN2Zy9TVkdNYXJrZXJFbGVtZW50Lmg6
CisgICAgICAgICogc3ZnL1NWR1NWR0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
U1ZHRWxlbWVudDo6Y3JlYXRlU1ZHQW5nbGUpOgorICAgICAgICAqIHN2Zy9TVkdTVkdFbGVtZW50
Lmg6CisgICAgICAgICogc3ZnL1NWR1pvb21FdmVudC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
Wm9vbUV2ZW50OjpjcmVhdGUpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHA6
CisgICAgICAgICogeG1sL1hNTEh0dHBSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhN
TEh0dHBSZXF1ZXN0OjpjYWxsUmVhZHlTdGF0ZUNoYW5nZUxpc3RlbmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlhNTEh0dHBSZXF1ZXN0OjpkaXNwYXRjaFByb2dyZXNzRXZlbnQpOgorICAgICAgICAq
IHhtbC9YTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQuY3BwOgorICAgICAgICAqIHhtbC9YTUxI
dHRwUmVxdWVzdFByb2dyZXNzRXZlbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1
ZXN0UHJvZ3Jlc3NFdmVudDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1
ZXN0UHJvZ3Jlc3NFdmVudDo6cG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJl
cXVlc3RQcm9ncmVzc0V2ZW50Ojp0b3RhbFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0
cFJlcXVlc3RQcm9ncmVzc0V2ZW50OjpYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQpOgorCiAy
MDA4LTA2LTA3ICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgRGF2ZSBIeWF0dC4KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAJKHJldmlzaW9uIDM0NDM4KQorKysg
V2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjcsNyArMTI3LDcg
QEAgX19aTjdXZWJDb3JlMTBDYWNoZWRQYWdlMjJjYWNoZWRQYWdlUGxhdAogX19aTjdXZWJDb3Jl
MTBDYWNoZWRQYWdlMjVzZXRDYWNoZWRQYWdlUGxhdGZvcm1EYXRhRVBOU18yMkNhY2hlZFBhZ2VQ
bGF0Zm9ybURhdGFFCiBfX1pON1dlYkNvcmUxMEV2ZW50TmFtZXMxMGNsaWNrRXZlbnRFCiBfX1pO
N1dlYkNvcmUxMEV2ZW50TmFtZXMxMmtleWRvd25FdmVudEUKLV9fWk43V2ViQ29yZTEwTW91c2VF
dmVudEMxRVJLTlNfMTJBdG9taWNTdHJpbmdFYmJQTlNfOURPTVdpbmRvd0VpaWlpaWJiYmJ0UE5T
XzE1RXZlbnRUYXJnZXROb2RlRVBOU185Q2xpcGJvYXJkRWIKK19fWk43V2ViQ29yZTEwTW91c2VF
dmVudEMxRVJLTlNfMTJBdG9taWNTdHJpbmdFYmJOM1dURjEwUGFzc1JlZlB0cklOU185RE9NV2lu
ZG93RUVFaWlpaWliYmJidE5TNV9JTlNfMTVFdmVudFRhcmdldE5vZGVFRUVOUzVfSU5TXzlDbGlw
Ym9hcmRFRUViCiBfX1pON1dlYkNvcmUxMFN0cmluZ0ltcGw3cmVwbGFjZUV0dAogX19aTjdXZWJD
b3JlMTBTdHJpbmdJbXBsRDFFdgogX19aTjdXZWJDb3JlMTBTdHJpbmdJbXBsY3ZQOE5TU3RyaW5n
RXYKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdNYXRyaXhDdXN0b20uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdNYXRyaXhDdXN0b20uY3BwCShyZXZp
c2lvbiAzNDQzOCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdNYXRyaXhDdXN0b20uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMyArMzUsMTMgQEAgSlNWYWx1ZSogSlNTVkdNYXRyaXg6
Om11bHRpcGx5KEV4ZWNTdGF0ZQogICAgIEFmZmluZVRyYW5zZm9ybSBpbXAoKmltcGwoKSk7CiAK
ICAgICBBZmZpbmVUcmFuc2Zvcm0gc2Vjb25kTWF0cml4ID0gdG9TVkdNYXRyaXgoYXJnc1swXSk7
ICAgIAotICAgIHJldHVybiB0b0pTKGV4ZWMsIG5ldyBKU1NWR1BPRFR5cGVXcmFwcGVyQ3JlYXRv
clJlYWRPbmx5PEFmZmluZVRyYW5zZm9ybT4oaW1wLm11bHRpcGx5KHNlY29uZE1hdHJpeCkpLCBt
X2NvbnRleHQuZ2V0KCkpOworICAgIHJldHVybiB0b0pTKGV4ZWMsIEpTU1ZHUE9EVHlwZVdyYXBw
ZXJDcmVhdG9yUmVhZE9ubHk8QWZmaW5lVHJhbnNmb3JtPjo6Y3JlYXRlKGltcC5tdWx0aXBseShz
ZWNvbmRNYXRyaXgpKS5nZXQoKSwgbV9jb250ZXh0LmdldCgpKTsKIH0KIAogSlNWYWx1ZSogSlNT
VkdNYXRyaXg6OmludmVyc2UoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBMaXN0JikKIHsKICAgICBB
ZmZpbmVUcmFuc2Zvcm0gaW1wKCppbXBsKCkpOwotICAgIEtKUzo6SlNWYWx1ZSogcmVzdWx0ID0g
dG9KUyhleGVjLCBuZXcgSlNTVkdQT0RUeXBlV3JhcHBlckNyZWF0b3JSZWFkT25seTxBZmZpbmVU
cmFuc2Zvcm0+KGltcC5pbnZlcnNlKCkpLCBtX2NvbnRleHQuZ2V0KCkpOworICAgIEtKUzo6SlNW
YWx1ZSogcmVzdWx0ID0gdG9KUyhleGVjLCBKU1NWR1BPRFR5cGVXcmFwcGVyQ3JlYXRvclJlYWRP
bmx5PEFmZmluZVRyYW5zZm9ybT46OmNyZWF0ZShpbXAuaW52ZXJzZSgpKS5nZXQoKSwgbV9jb250
ZXh0LmdldCgpKTsKIAogICAgIGlmICghaW1wLmlzSW52ZXJ0aWJsZSgpKQogICAgICAgICBzZXRE
T01FeGNlcHRpb24oZXhlYywgU1ZHRXhjZXB0aW9uOjpTVkdfTUFUUklYX05PVF9JTlZFUlRBQkxF
KTsKQEAgLTU2LDcgKzU2LDcgQEAgSlNWYWx1ZSogSlNTVkdNYXRyaXg6OnRyYW5zbGF0ZShFeGVj
U3RhdAogICAgIGZsb2F0IHggPSBhcmdzWzBdLT50b0Zsb2F0KGV4ZWMpOwogICAgIGZsb2F0IHkg
PSBhcmdzWzFdLT50b0Zsb2F0KGV4ZWMpOwogCi0gICAgcmV0dXJuIHRvSlMoZXhlYywgbmV3IEpT
U1ZHUE9EVHlwZVdyYXBwZXJDcmVhdG9yUmVhZE9ubHk8QWZmaW5lVHJhbnNmb3JtPihpbXAudHJh
bnNsYXRlKHgsIHkpKSwgbV9jb250ZXh0LmdldCgpKTsKKyAgICByZXR1cm4gdG9KUyhleGVjLCBK
U1NWR1BPRFR5cGVXcmFwcGVyQ3JlYXRvclJlYWRPbmx5PEFmZmluZVRyYW5zZm9ybT46OmNyZWF0
ZShpbXAudHJhbnNsYXRlKHgsIHkpKS5nZXQoKSwgbV9jb250ZXh0LmdldCgpKTsKIH0KIAogSlNW
YWx1ZSogSlNTVkdNYXRyaXg6OnNjYWxlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgTGlzdCYgYXJn
cykKQEAgLTY0LDcgKzY0LDcgQEAgSlNWYWx1ZSogSlNTVkdNYXRyaXg6OnNjYWxlKEV4ZWNTdGF0
ZSogZQogICAgIEFmZmluZVRyYW5zZm9ybSBpbXAoKmltcGwoKSk7CiAKICAgICBmbG9hdCBzY2Fs
ZUZhY3RvciA9IGFyZ3NbMF0tPnRvRmxvYXQoZXhlYyk7Ci0gICAgcmV0dXJuIHRvSlMoZXhlYywg
bmV3IEpTU1ZHUE9EVHlwZVdyYXBwZXJDcmVhdG9yUmVhZE9ubHk8QWZmaW5lVHJhbnNmb3JtPihp
bXAuc2NhbGUoc2NhbGVGYWN0b3IpKSwgbV9jb250ZXh0LmdldCgpKTsKKyAgICByZXR1cm4gdG9K
UyhleGVjLCBKU1NWR1BPRFR5cGVXcmFwcGVyQ3JlYXRvclJlYWRPbmx5PEFmZmluZVRyYW5zZm9y
bT46OmNyZWF0ZShpbXAuc2NhbGUoc2NhbGVGYWN0b3IpKS5nZXQoKSwgbV9jb250ZXh0LmdldCgp
KTsKIH0KIAogSlNWYWx1ZSogSlNTVkdNYXRyaXg6OnNjYWxlTm9uVW5pZm9ybShFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IExpc3QmIGFyZ3MpCkBAIC03NCw3ICs3NCw3IEBAIEpTVmFsdWUqIEpTU1ZH
TWF0cml4OjpzY2FsZU5vblVuaWZvcm0oRXgKICAgICBmbG9hdCBzY2FsZUZhY3RvclggPSBhcmdz
WzBdLT50b0Zsb2F0KGV4ZWMpOwogICAgIGZsb2F0IHNjYWxlRmFjdG9yWSA9IGFyZ3NbMV0tPnRv
RmxvYXQoZXhlYyk7CiAKLSAgICByZXR1cm4gdG9KUyhleGVjLCBuZXcgSlNTVkdQT0RUeXBlV3Jh
cHBlckNyZWF0b3JSZWFkT25seTxBZmZpbmVUcmFuc2Zvcm0+KGltcC5zY2FsZU5vblVuaWZvcm0o
c2NhbGVGYWN0b3JYLCBzY2FsZUZhY3RvclkpKSwgbV9jb250ZXh0LmdldCgpKTsKKyAgICByZXR1
cm4gdG9KUyhleGVjLCBKU1NWR1BPRFR5cGVXcmFwcGVyQ3JlYXRvclJlYWRPbmx5PEFmZmluZVRy
YW5zZm9ybT46OmNyZWF0ZShpbXAuc2NhbGVOb25Vbmlmb3JtKHNjYWxlRmFjdG9yWCwgc2NhbGVG
YWN0b3JZKSkuZ2V0KCksIG1fY29udGV4dC5nZXQoKSk7CiB9CiAKIEpTVmFsdWUqIEpTU1ZHTWF0
cml4Ojpyb3RhdGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBMaXN0JiBhcmdzKQpAQCAtODIsNyAr
ODIsNyBAQCBKU1ZhbHVlKiBKU1NWR01hdHJpeDo6cm90YXRlKEV4ZWNTdGF0ZSogCiAgICAgQWZm
aW5lVHJhbnNmb3JtIGltcCgqaW1wbCgpKTsKIAogICAgIGZsb2F0IGFuZ2xlID0gYXJnc1swXS0+
dG9GbG9hdChleGVjKTsKLSAgICByZXR1cm4gdG9KUyhleGVjLCBuZXcgSlNTVkdQT0RUeXBlV3Jh
cHBlckNyZWF0b3JSZWFkT25seTxBZmZpbmVUcmFuc2Zvcm0+KGltcC5yb3RhdGUoYW5nbGUpKSwg
bV9jb250ZXh0LmdldCgpKTsKKyAgICByZXR1cm4gdG9KUyhleGVjLCBKU1NWR1BPRFR5cGVXcmFw
cGVyQ3JlYXRvclJlYWRPbmx5PEFmZmluZVRyYW5zZm9ybT46OmNyZWF0ZShpbXAucm90YXRlKGFu
Z2xlKSkuZ2V0KCksIG1fY29udGV4dC5nZXQoKSk7CiB9CiAKIEpTVmFsdWUqIEpTU1ZHTWF0cml4
Ojpyb3RhdGVGcm9tVmVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgTGlzdCYgYXJncykKQEAg
LTkyLDcgKzkyLDcgQEAgSlNWYWx1ZSogSlNTVkdNYXRyaXg6OnJvdGF0ZUZyb21WZWN0b3IoRQog
ICAgIGZsb2F0IHggPSBhcmdzWzBdLT50b0Zsb2F0KGV4ZWMpOwogICAgIGZsb2F0IHkgPSBhcmdz
WzFdLT50b0Zsb2F0KGV4ZWMpOwogCi0gICAgS0pTOjpKU1ZhbHVlKiByZXN1bHQgPSB0b0pTKGV4
ZWMsIG5ldyBKU1NWR1BPRFR5cGVXcmFwcGVyQ3JlYXRvclJlYWRPbmx5PEFmZmluZVRyYW5zZm9y
bT4oaW1wLnJvdGF0ZUZyb21WZWN0b3IoeCwgeSkpLCBtX2NvbnRleHQuZ2V0KCkpOworICAgIEtK
Uzo6SlNWYWx1ZSogcmVzdWx0ID0gdG9KUyhleGVjLCBKU1NWR1BPRFR5cGVXcmFwcGVyQ3JlYXRv
clJlYWRPbmx5PEFmZmluZVRyYW5zZm9ybT46OmNyZWF0ZShpbXAucm90YXRlRnJvbVZlY3Rvcih4
LCB5KSkuZ2V0KCksIG1fY29udGV4dC5nZXQoKSk7CiAKICAgICBpZiAoeCA9PSAwLjAgfHwgeSA9
PSAwLjApCiAgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBTVkdFeGNlcHRpb246OlNWR19J
TlZBTElEX1ZBTFVFX0VSUik7CkBAIC0xMDMsMTMgKzEwMywxMyBAQCBKU1ZhbHVlKiBKU1NWR01h
dHJpeDo6cm90YXRlRnJvbVZlY3RvcihFCiBKU1ZhbHVlKiBKU1NWR01hdHJpeDo6ZmxpcFgoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBMaXN0JikKIHsKICAgICBBZmZpbmVUcmFuc2Zvcm0gaW1wKCpp
bXBsKCkpOwotICAgIHJldHVybiB0b0pTKGV4ZWMsIG5ldyBKU1NWR1BPRFR5cGVXcmFwcGVyQ3Jl
YXRvclJlYWRPbmx5PEFmZmluZVRyYW5zZm9ybT4oaW1wLmZsaXBYKCkpLCBtX2NvbnRleHQuZ2V0
KCkpOworICAgIHJldHVybiB0b0pTKGV4ZWMsIEpTU1ZHUE9EVHlwZVdyYXBwZXJDcmVhdG9yUmVh
ZE9ubHk8QWZmaW5lVHJhbnNmb3JtPjo6Y3JlYXRlKGltcC5mbGlwWCgpKS5nZXQoKSwgbV9jb250
ZXh0LmdldCgpKTsKIH0KIAogSlNWYWx1ZSogSlNTVkdNYXRyaXg6OmZsaXBZKEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgTGlzdCYpCiB7CiAgICAgQWZmaW5lVHJhbnNmb3JtIGltcCgqaW1wbCgpKTsK
LSAgICByZXR1cm4gdG9KUyhleGVjLCBuZXcgSlNTVkdQT0RUeXBlV3JhcHBlckNyZWF0b3JSZWFk
T25seTxBZmZpbmVUcmFuc2Zvcm0+KGltcC5mbGlwWSgpKSwgbV9jb250ZXh0LmdldCgpKTsKKyAg
ICByZXR1cm4gdG9KUyhleGVjLCBKU1NWR1BPRFR5cGVXcmFwcGVyQ3JlYXRvclJlYWRPbmx5PEFm
ZmluZVRyYW5zZm9ybT46OmNyZWF0ZShpbXAuZmxpcFkoKSkuZ2V0KCksIG1fY29udGV4dC5nZXQo
KSk7CiB9CiAKIEpTVmFsdWUqIEpTU1ZHTWF0cml4Ojpza2V3WChFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IExpc3QmIGFyZ3MpCkBAIC0xMTcsNyArMTE3LDcgQEAgSlNWYWx1ZSogSlNTVkdNYXRyaXg6
OnNrZXdYKEV4ZWNTdGF0ZSogZQogICAgIEFmZmluZVRyYW5zZm9ybSBpbXAoKmltcGwoKSk7CiAK
ICAgICBmbG9hdCBhbmdsZSA9IGFyZ3NbMF0tPnRvRmxvYXQoZXhlYyk7Ci0gICAgcmV0dXJuIHRv
SlMoZXhlYywgbmV3IEpTU1ZHUE9EVHlwZVdyYXBwZXJDcmVhdG9yUmVhZE9ubHk8QWZmaW5lVHJh
bnNmb3JtPihpbXAuc2tld1goYW5nbGUpKSwgbV9jb250ZXh0LmdldCgpKTsKKyAgICByZXR1cm4g
dG9KUyhleGVjLCBKU1NWR1BPRFR5cGVXcmFwcGVyQ3JlYXRvclJlYWRPbmx5PEFmZmluZVRyYW5z
Zm9ybT46OmNyZWF0ZShpbXAuc2tld1goYW5nbGUpKS5nZXQoKSwgbV9jb250ZXh0LmdldCgpKTsK
IH0KIAogSlNWYWx1ZSogSlNTVkdNYXRyaXg6OnNrZXdZKEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
TGlzdCYgYXJncykKQEAgLTEyNSw3ICsxMjUsNyBAQCBKU1ZhbHVlKiBKU1NWR01hdHJpeDo6c2tl
d1koRXhlY1N0YXRlKiBlCiAgICAgQWZmaW5lVHJhbnNmb3JtIGltcCgqaW1wbCgpKTsKIAogICAg
IGZsb2F0IGFuZ2xlID0gYXJnc1swXS0+dG9GbG9hdChleGVjKTsKLSAgICByZXR1cm4gdG9KUyhl
eGVjLCBuZXcgSlNTVkdQT0RUeXBlV3JhcHBlckNyZWF0b3JSZWFkT25seTxBZmZpbmVUcmFuc2Zv
cm0+KGltcC5za2V3WShhbmdsZSkpLCBtX2NvbnRleHQuZ2V0KCkpOworICAgIHJldHVybiB0b0pT
KGV4ZWMsIEpTU1ZHUE9EVHlwZVdyYXBwZXJDcmVhdG9yUmVhZE9ubHk8QWZmaW5lVHJhbnNmb3Jt
Pjo6Y3JlYXRlKGltcC5za2V3WShhbmdsZSkpLmdldCgpLCBtX2NvbnRleHQuZ2V0KCkpOwogfQog
CiB9CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHUE9EVHlwZVdyYXBwZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHUE9EVHlwZVdyYXBwZXIuaAkocmV2
aXNpb24gMzQ0MzgpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHUE9EVHlwZVdyYXBwZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTggKzMwLDEzIEBACiAjaWYgRU5BQkxFKFNWRykKIAog
I2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRl
ICJTVkdFbGVtZW50LmgiCiAKLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUg
PHd0Zi9IYXNoTWFwLmg+Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdGVtcGxhdGU8dHlwZW5h
bWUgUE9EVHlwZT4KIGNsYXNzIEpTU1ZHUE9EVHlwZVdyYXBwZXIgOiBwdWJsaWMgUmVmQ291bnRl
ZDxKU1NWR1BPRFR5cGVXcmFwcGVyPFBPRFR5cGU+ID4gewogcHVibGljOgotICAgIEpTU1ZHUE9E
VHlwZVdyYXBwZXIoKSA6IFJlZkNvdW50ZWQ8SlNTVkdQT0RUeXBlV3JhcHBlcjxQT0RUeXBlPiA+
KDApIHsgfQogICAgIHZpcnR1YWwgfkpTU1ZHUE9EVHlwZVdyYXBwZXIoKSB7IH0KIAogICAgIC8v
IEdldHRlciB3cmFwcGVyCkBAIC01MiwyNCArNDcsMTYgQEAgcHVibGljOgogfTsKIAogdGVtcGxh
dGU8dHlwZW5hbWUgUE9EVHlwZSwgdHlwZW5hbWUgUE9EVHlwZUNyZWF0b3I+Ci1jbGFzcyBKU1NW
R1BPRFR5cGVXcmFwcGVyQ3JlYXRvclJlYWRXcml0ZSA6IHB1YmxpYyBKU1NWR1BPRFR5cGVXcmFw
cGVyPFBPRFR5cGU+Ci17CitjbGFzcyBKU1NWR1BPRFR5cGVXcmFwcGVyQ3JlYXRvclJlYWRXcml0
ZSA6IHB1YmxpYyBKU1NWR1BPRFR5cGVXcmFwcGVyPFBPRFR5cGU+IHsKIHB1YmxpYzoKICAgICB0
eXBlZGVmIFBPRFR5cGUgKFBPRFR5cGVDcmVhdG9yOjoqR2V0dGVyTWV0aG9kKSgpIGNvbnN0OyAK
ICAgICB0eXBlZGVmIHZvaWQgKFBPRFR5cGVDcmVhdG9yOjoqU2V0dGVyTWV0aG9kKShQT0RUeXBl
KTsKIAotICAgIEpTU1ZHUE9EVHlwZVdyYXBwZXJDcmVhdG9yUmVhZFdyaXRlKFBPRFR5cGVDcmVh
dG9yKiBjcmVhdG9yLCBHZXR0ZXJNZXRob2QgZ2V0dGVyLCBTZXR0ZXJNZXRob2Qgc2V0dGVyKQot
ICAgICAgICA6IG1fY3JlYXRvcihjcmVhdG9yKQotICAgICAgICAsIG1fZ2V0dGVyKGdldHRlcikK
LSAgICAgICAgLCBtX3NldHRlcihzZXR0ZXIpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SlNTVkdQ
T0RUeXBlV3JhcHBlckNyZWF0b3JSZWFkV3JpdGU+IGNyZWF0ZShQYXNzUmVmUHRyPFBPRFR5cGVD
cmVhdG9yPiBjcmVhdG9yLCBHZXR0ZXJNZXRob2QgZ2V0dGVyLCBTZXR0ZXJNZXRob2Qgc2V0dGVy
KQogICAgIHsKLSAgICAgICAgQVNTRVJUKGNyZWF0b3IpOwotICAgICAgICBBU1NFUlQoZ2V0dGVy
KTsKLSAgICAgICAgQVNTRVJUKHNldHRlcik7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
SlNTVkdQT0RUeXBlV3JhcHBlckNyZWF0b3JSZWFkV3JpdGUoY3JlYXRvciwgZ2V0dGVyLCBzZXR0
ZXIpKTsKICAgICB9CiAKLSAgICB2aXJ0dWFsIH5KU1NWR1BPRFR5cGVXcmFwcGVyQ3JlYXRvclJl
YWRXcml0ZSgpIHsgfQotCiAgICAgLy8gR2V0dGVyIHdyYXBwZXIKICAgICB2aXJ0dWFsIG9wZXJh
dG9yIFBPRFR5cGUoKSB7IHJldHVybiAobV9jcmVhdG9yLmdldCgpLT4qbV9nZXR0ZXIpKCk7IH0K
IApAQCAtODYsNiArNzMsMTYgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKKyAgICBKU1NW
R1BPRFR5cGVXcmFwcGVyQ3JlYXRvclJlYWRXcml0ZShQYXNzUmVmUHRyPFBPRFR5cGVDcmVhdG9y
PiBjcmVhdG9yLCBHZXR0ZXJNZXRob2QgZ2V0dGVyLCBTZXR0ZXJNZXRob2Qgc2V0dGVyKQorICAg
ICAgICA6IG1fY3JlYXRvcihjcmVhdG9yKQorICAgICAgICAsIG1fZ2V0dGVyKGdldHRlcikKKyAg
ICAgICAgLCBtX3NldHRlcihzZXR0ZXIpCisgICAgeworICAgICAgICBBU1NFUlQoY3JlYXRvcik7
CisgICAgICAgIEFTU0VSVChnZXR0ZXIpOworICAgICAgICBBU1NFUlQoc2V0dGVyKTsKKyAgICB9
CisKICAgICAvLyBVcGRhdGUgY2FsbGJhY2tzCiAgICAgUmVmUHRyPFBPRFR5cGVDcmVhdG9yPiBt
X2NyZWF0b3I7CiAgICAgR2V0dGVyTWV0aG9kIG1fZ2V0dGVyOwpAQCAtOTMsMTQgKzkwLDEyIEBA
IHByaXZhdGU6CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBQT0RUeXBlPgotY2xhc3MgSlNTVkdQ
T0RUeXBlV3JhcHBlckNyZWF0b3JSZWFkT25seSA6IHB1YmxpYyBKU1NWR1BPRFR5cGVXcmFwcGVy
PFBPRFR5cGU+Ci17CitjbGFzcyBKU1NWR1BPRFR5cGVXcmFwcGVyQ3JlYXRvclJlYWRPbmx5IDog
cHVibGljIEpTU1ZHUE9EVHlwZVdyYXBwZXI8UE9EVHlwZT4gewogcHVibGljOgotICAgIEpTU1ZH
UE9EVHlwZVdyYXBwZXJDcmVhdG9yUmVhZE9ubHkoUE9EVHlwZSB0eXBlKQotICAgICAgICA6IG1f
cG9kVHlwZSh0eXBlKQotICAgIHsgfQotCi0gICAgdmlydHVhbCB+SlNTVkdQT0RUeXBlV3JhcHBl
ckNyZWF0b3JSZWFkT25seSgpIHsgfQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEpTU1ZHUE9EVHlw
ZVdyYXBwZXJDcmVhdG9yUmVhZE9ubHk+IGNyZWF0ZShQT0RUeXBlIHR5cGUpCisgICAgeworICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEpTU1ZHUE9EVHlwZVdyYXBwZXJDcmVhdG9yUmVhZE9u
bHkodHlwZSkpOworICAgIH0KIAogICAgIC8vIEdldHRlciB3cmFwcGVyCiAgICAgdmlydHVhbCBv
cGVyYXRvciBQT0RUeXBlKCkgeyByZXR1cm4gbV9wb2RUeXBlOyB9CkBAIC0xMTIsNiArMTA3LDEx
IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6CisgICAgSlNTVkdQT0RUeXBlV3JhcHBlckNy
ZWF0b3JSZWFkT25seShQT0RUeXBlIHR5cGUpCisgICAgICAgIDogbV9wb2RUeXBlKHR5cGUpCisg
ICAgeworICAgIH0KKwogICAgIFBPRFR5cGUgbV9wb2RUeXBlOwogfTsKIApAQCAtMTE5LDI1ICsx
MTksMTYgQEAgdGVtcGxhdGU8dHlwZW5hbWUgUE9EVHlwZT4KIGNsYXNzIFNWR1BPRExpc3RJdGVt
OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBQT0RUeXBlPgotY2xhc3MgSlNTVkdQT0RUeXBlV3JhcHBl
ckNyZWF0b3JGb3JMaXN0IDogcHVibGljIEpTU1ZHUE9EVHlwZVdyYXBwZXI8UE9EVHlwZT4KLXsK
K2NsYXNzIEpTU1ZHUE9EVHlwZVdyYXBwZXJDcmVhdG9yRm9yTGlzdCA6IHB1YmxpYyBKU1NWR1BP
RFR5cGVXcmFwcGVyPFBPRFR5cGU+IHsKIHB1YmxpYzoKICAgICB0eXBlZGVmIFBPRFR5cGUgKFNW
R1BPRExpc3RJdGVtPFBPRFR5cGU+OjoqR2V0dGVyTWV0aG9kKSgpIGNvbnN0OyAKICAgICB0eXBl
ZGVmIHZvaWQgKFNWR1BPRExpc3RJdGVtPFBPRFR5cGU+OjoqU2V0dGVyTWV0aG9kKShQT0RUeXBl
KTsKIAotICAgIEpTU1ZHUE9EVHlwZVdyYXBwZXJDcmVhdG9yRm9yTGlzdChTVkdQT0RMaXN0SXRl
bTxQT0RUeXBlPiogY3JlYXRvciwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSkK
LSAgICAgICAgOiBtX2NyZWF0b3IoY3JlYXRvcikKLSAgICAgICAgLCBtX2dldHRlcigmU1ZHUE9E
TGlzdEl0ZW08UE9EVHlwZT46OnZhbHVlKQotICAgICAgICAsIG1fc2V0dGVyKCZTVkdQT0RMaXN0
SXRlbTxQT0RUeXBlPjo6c2V0VmFsdWUpCi0gICAgICAgICwgbV9hc3NvY2lhdGVkQXR0cmlidXRl
TmFtZShhdHRyaWJ1dGVOYW1lKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEpTU1ZHUE9EVHlwZVdy
YXBwZXJDcmVhdG9yRm9yTGlzdD4gY3JlYXRlKFBhc3NSZWZQdHI8U1ZHUE9ETGlzdEl0ZW08UE9E
VHlwZT4gPiBjcmVhdG9yLCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1lKQogICAg
IHsKLSAgICAgICAgQVNTRVJUKG1fY3JlYXRvcik7Ci0gICAgICAgIEFTU0VSVChtX2dldHRlcik7
Ci0gICAgICAgIEFTU0VSVChtX3NldHRlcik7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
SlNTVkdQT0RUeXBlV3JhcHBlckNyZWF0b3JGb3JMaXN0KGNyZWF0b3IsIGF0dHJpYnV0ZU5hbWUp
KTsKICAgICB9CiAKLSAgICB2aXJ0dWFsIH5KU1NWR1BPRFR5cGVXcmFwcGVyQ3JlYXRvckZvckxp
c3QoKSB7IH0KLQogICAgIC8vIEdldHRlciB3cmFwcGVyCiAgICAgdmlydHVhbCBvcGVyYXRvciBQ
T0RUeXBlKCkgeyByZXR1cm4gKG1fY3JlYXRvci5nZXQoKS0+Km1fZ2V0dGVyKSgpOyB9CiAKQEAg
LTE1NCw2ICsxNDUsMTcgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKKyAgICBKU1NWR1BP
RFR5cGVXcmFwcGVyQ3JlYXRvckZvckxpc3QoUGFzc1JlZlB0cjxTVkdQT0RMaXN0SXRlbTxQT0RU
eXBlPiA+IGNyZWF0b3IsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUpCisgICAg
ICAgIDogbV9jcmVhdG9yKGNyZWF0b3IpCisgICAgICAgICwgbV9nZXR0ZXIoJlNWR1BPRExpc3RJ
dGVtPFBPRFR5cGU+Ojp2YWx1ZSkKKyAgICAgICAgLCBtX3NldHRlcigmU1ZHUE9ETGlzdEl0ZW08
UE9EVHlwZT46OnNldFZhbHVlKQorICAgICAgICAsIG1fYXNzb2NpYXRlZEF0dHJpYnV0ZU5hbWUo
YXR0cmlidXRlTmFtZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2NyZWF0b3IpOworICAgICAg
ICBBU1NFUlQobV9nZXR0ZXIpOworICAgICAgICBBU1NFUlQobV9zZXR0ZXIpOworICAgIH0KKwog
ICAgIC8vIFVwZGF0ZSBjYWxsYmFja3MKICAgICBSZWZQdHI8U1ZHUE9ETGlzdEl0ZW08UE9EVHlw
ZT4gPiBtX2NyZWF0b3I7CiAgICAgR2V0dGVyTWV0aG9kIG1fZ2V0dGVyOwpAQCAtMjQxLDggKzI0
Myw3IEBAIHN0cnVjdCBQT0RUeXBlUmVhZFdyaXRlSGFzaEluZm9UcmFpdHMgOiAKIH07CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIFBPRFR5cGUsIHR5cGVuYW1lIFBPRFR5cGVDcmVhdG9yPgotY2xhc3Mg
SlNTVkdQT0RUeXBlV3JhcHBlckNhY2hlCi17CitjbGFzcyBKU1NWR1BPRFR5cGVXcmFwcGVyQ2Fj
aGUgewogcHVibGljOgogICAgIHR5cGVkZWYgUE9EVHlwZSAoUE9EVHlwZUNyZWF0b3I6OipHZXR0
ZXJNZXRob2QpKCkgY29uc3Q7IAogICAgIHR5cGVkZWYgdm9pZCAoUE9EVHlwZUNyZWF0b3I6OipT
ZXR0ZXJNZXRob2QpKFBPRFR5cGUpOwpAQCAtMjU3LDcgKzI1OCw3IEBAIHB1YmxpYzoKICAgICB9
CiAKICAgICAvLyBVc2VkIGZvciByZWFkd3JpdGUgYXR0cmlidXRlcyBvbmx5Ci0gICAgc3RhdGlj
IEpTU1ZHUE9EVHlwZVdyYXBwZXI8UE9EVHlwZT4qIGxvb2t1cE9yQ3JlYXRlV3JhcHBlcihQT0RU
eXBlQ3JlYXRvciogY3JlYXRvciwgR2V0dGVyTWV0aG9kIGdldHRlciwgU2V0dGVyTWV0aG9kIHNl
dHRlcikKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxKU1NWR1BPRFR5cGVXcmFwcGVyPFBPRFR5cGU+
ID4gbG9va3VwT3JDcmVhdGVXcmFwcGVyKFBPRFR5cGVDcmVhdG9yKiBjcmVhdG9yLCBHZXR0ZXJN
ZXRob2QgZ2V0dGVyLCBTZXR0ZXJNZXRob2Qgc2V0dGVyKQogICAgIHsKICAgICAgICAgUmVhZFdy
aXRlSGFzaE1hcCYgbWFwKHJlYWRXcml0ZUhhc2hNYXAoKSk7CiAgICAgICAgIFBPRFR5cGVSZWFk
V3JpdGVIYXNoSW5mbzxQT0RUeXBlLCBQT0RUeXBlQ3JlYXRvcj4gaW5mbyhjcmVhdG9yLCBnZXR0
ZXIsIHNldHRlcik7CkBAIC0yNjUsOSArMjY2LDkgQEAgcHVibGljOgogICAgICAgICBpZiAobWFw
LmNvbnRhaW5zKGluZm8pKQogICAgICAgICAgICAgcmV0dXJuIG1hcC5nZXQoaW5mbyk7CiAKLSAg
ICAgICAgSlNTVkdQT0RUeXBlV3JhcHBlckNyZWF0b3JSZWFkV3JpdGU8UE9EVHlwZSwgUE9EVHlw
ZUNyZWF0b3I+KiB3cmFwcGVyID0gbmV3IEpTU1ZHUE9EVHlwZVdyYXBwZXJDcmVhdG9yUmVhZFdy
aXRlPFBPRFR5cGUsIFBPRFR5cGVDcmVhdG9yPihjcmVhdG9yLCBnZXR0ZXIsIHNldHRlcik7Ci0g
ICAgICAgIG1hcC5zZXQoaW5mbywgd3JhcHBlcik7Ci0gICAgICAgIHJldHVybiB3cmFwcGVyOwor
ICAgICAgICBSZWZQdHI8SlNTVkdQT0RUeXBlV3JhcHBlckNyZWF0b3JSZWFkV3JpdGU8UE9EVHlw
ZSwgUE9EVHlwZUNyZWF0b3I+ID4gd3JhcHBlciA9IEpTU1ZHUE9EVHlwZVdyYXBwZXJDcmVhdG9y
UmVhZFdyaXRlPFBPRFR5cGUsIFBPRFR5cGVDcmVhdG9yPjo6Y3JlYXRlKGNyZWF0b3IsIGdldHRl
ciwgc2V0dGVyKTsKKyAgICAgICAgbWFwLnNldChpbmZvLCB3cmFwcGVyLmdldCgpKTsKKyAgICAg
ICAgcmV0dXJuIHdyYXBwZXIucmVsZWFzZSgpOwogICAgIH0KIAogICAgIHN0YXRpYyB2b2lkIGZv
cmdldFdyYXBwZXIoSlNTVkdQT0RUeXBlV3JhcHBlcjxQT0RUeXBlPiogd3JhcHBlcikKQEAgLTI4
MSw3ICsyODIsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBpZiAoaXQtPnNlY29uZCAhPSB3cmFw
cGVyKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICAvLyBJdCdzIGd1
YXJ1YW50ZWVkIHRoYXQgdGhlcmUncyBqdXN0IG9uZSBvYmplY3Qgd2UgbmVlZCB0byB0YWtlIGNh
cmUgb2YuCisgICAgICAgICAgICAvLyBJdCdzIGd1YXJhbnRlZWQgdGhhdCB0aGVyZSdzIGp1c3Qg
b25lIG9iamVjdCB3ZSBuZWVkIHRvIHRha2UgY2FyZSBvZi4KICAgICAgICAgICAgIG1hcC5yZW1v
dmUoaXQtPmZpcnN0KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkluZGV4OiBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTU1ZHUG9pbnRMaXN0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHUG9pbnRMaXN0Q3VzdG9tLmNwcAkocmV2aXNpb24gMzQ0
MzgpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHUG9pbnRMaXN0Q3VzdG9tLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIw
MDcsIDIwMDggTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5
cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCkBAIC0xOCwxMDggKzE5LDk4IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkpTU1ZHUG9pbnRMaXN0LmgiCiAKICNpZiBFTkFCTEUoU1ZHKQotI2luY2x1
ZGUgIkpTU1ZHUG9pbnRMaXN0LmgiCiAKLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUg
IkZyYW1lLmgiCiAjaW5jbHVkZSAiSlNTVkdQb2ludC5oIgotI2luY2x1ZGUgIlNWR0RvY3VtZW50
RXh0ZW5zaW9ucy5oIgogI2luY2x1ZGUgIlNWR1BvaW50TGlzdC5oIgotI2luY2x1ZGUgIlNWR1N0
eWxlZEVsZW1lbnQuaCIKLQotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKIHVzaW5nIG5h
bWVzcGFjZSBLSlM7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSlNWYWx1ZSogSlNTVkdQb2lu
dExpc3Q6OmNsZWFyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgTGlzdCYpCit0eXBlZGVmIFNWR0xp
c3Q8UmVmUHRyPFNWR1BPRExpc3RJdGVtPEZsb2F0UG9pbnQ+ID4gPiBTVkdQb2ludExpc3RCYXNl
OworCitzdGF0aWMgSlNWYWx1ZSogZmluaXNoR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgRXhjZXB0
aW9uQ29kZSYgZWMsIFNWR0VsZW1lbnQqIGNvbnRleHQsIFNWR1BvaW50TGlzdCogbGlzdCwgUGFz
c1JlZlB0cjxTVkdQT0RMaXN0SXRlbTxGbG9hdFBvaW50PiA+IGl0ZW0pCiB7Ci0gICAgRXhjZXB0
aW9uQ29kZSBlYyA9IDA7CisgICAgaWYgKGVjKSB7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbihl
eGVjLCBlYyk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIH0KKyAgICByZXR1
cm4gdG9KUyhleGVjLCBKU1NWR1BPRFR5cGVXcmFwcGVyQ3JlYXRvckZvckxpc3Q8RmxvYXRQb2lu
dD46OmNyZWF0ZShpdGVtLmdldCgpLCBsaXN0LT5hc3NvY2lhdGVkQXR0cmlidXRlTmFtZSgpKS5n
ZXQoKSwgY29udGV4dCk7Cit9CiAKLSAgICBTVkdQb2ludExpc3QqIGltcCA9IHN0YXRpY19jYXN0
PFNWR1BvaW50TGlzdCo+KGltcGwoKSk7Ci0gICAgaW1wLT5jbGVhcihlYyk7Ci0gICAgc2V0RE9N
RXhjZXB0aW9uKGV4ZWMsIGVjKTsKK3N0YXRpYyBKU1ZhbHVlKiBmaW5pc2hTZXR0ZXIoRXhlY1N0
YXRlKiBleGVjLCBFeGNlcHRpb25Db2RlJiBlYywgU1ZHRWxlbWVudCogY29udGV4dCwgU1ZHUG9p
bnRMaXN0KiBsaXN0LCBQYXNzUmVmUHRyPFNWR1BPRExpc3RJdGVtPEZsb2F0UG9pbnQ+ID4gaXRl
bSkKK3sKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsK
KyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfQorICAgIGNvbnN0IFF1YWxpZmll
ZE5hbWUmIGF0dHJpYnV0ZU5hbWUgPSBsaXN0LT5hc3NvY2lhdGVkQXR0cmlidXRlTmFtZSgpOwor
ICAgIGNvbnRleHQtPnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0cmlidXRlTmFtZSk7CisgICAgcmV0
dXJuIHRvSlMoZXhlYywgSlNTVkdQT0RUeXBlV3JhcHBlckNyZWF0b3JGb3JMaXN0PEZsb2F0UG9p
bnQ+OjpjcmVhdGUoaXRlbS5nZXQoKSwgYXR0cmlidXRlTmFtZSkuZ2V0KCksIGNvbnRleHQpOwor
fQogCi0gICAgbV9jb250ZXh0LT5zdmdBdHRyaWJ1dGVDaGFuZ2VkKGltcC0+YXNzb2NpYXRlZEF0
dHJpYnV0ZU5hbWUoKSk7CitzdGF0aWMgSlNWYWx1ZSogZmluaXNoU2V0dGVyUmVhZE9ubHlSZXN1
bHQoRXhlY1N0YXRlKiBleGVjLCBFeGNlcHRpb25Db2RlJiBlYywgU1ZHRWxlbWVudCogY29udGV4
dCwgU1ZHUG9pbnRMaXN0KiBsaXN0LCBQYXNzUmVmUHRyPFNWR1BPRExpc3RJdGVtPEZsb2F0UG9p
bnQ+ID4gaXRlbSkKK3sKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4
ZWMsIGVjKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfQorICAgIGNvbnRl
eHQtPnN2Z0F0dHJpYnV0ZUNoYW5nZWQobGlzdC0+YXNzb2NpYXRlZEF0dHJpYnV0ZU5hbWUoKSk7
CisgICAgcmV0dXJuIHRvSlMoZXhlYywgSlNTVkdQT0RUeXBlV3JhcHBlckNyZWF0b3JSZWFkT25s
eTxGbG9hdFBvaW50Pjo6Y3JlYXRlKCppdGVtKS5nZXQoKSwgY29udGV4dCk7Cit9CiAKK0pTVmFs
dWUqIEpTU1ZHUG9pbnRMaXN0OjpjbGVhcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IExpc3QmKQor
eworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGltcGwoKS0+Y2xlYXIoZWMpOworICAg
IHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgbV9jb250ZXh0LT5zdmdBdHRyaWJ1dGVD
aGFuZ2VkKGltcGwoKS0+YXNzb2NpYXRlZEF0dHJpYnV0ZU5hbWUoKSk7CiAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiB9CiAKIEpTVmFsdWUqIEpTU1ZHUG9pbnRMaXN0Ojppbml0aWFsaXplKEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgTGlzdCYgYXJncykKIHsKICAgICBFeGNlcHRpb25Db2RlIGVj
ID0gMDsKLSAgICBGbG9hdFBvaW50IG5ld0l0ZW0gPSB0b1NWR1BvaW50KGFyZ3NbMF0pOwotCi0g
ICAgU1ZHUG9pbnRMaXN0KiBpbXAgPSBzdGF0aWNfY2FzdDxTVkdQb2ludExpc3QqPihpbXBsKCkp
OwotICAgIFNWR0xpc3Q8UmVmUHRyPFNWR1BPRExpc3RJdGVtPEZsb2F0UG9pbnQ+ID4gPiogbGlz
dEltcCA9IGltcDsKLQotICAgIFNWR1BPRExpc3RJdGVtPEZsb2F0UG9pbnQ+KiBsaXN0SXRlbSA9
IGxpc3RJbXAtPmluaXRpYWxpemUoU1ZHUE9ETGlzdEl0ZW08RmxvYXRQb2ludD46OmNvcHkobmV3
SXRlbSksIGVjKS5nZXQoKTsgCi0gICAgSlNTVkdQT0RUeXBlV3JhcHBlckNyZWF0b3JGb3JMaXN0
PEZsb2F0UG9pbnQ+KiBvYmogPSBuZXcgSlNTVkdQT0RUeXBlV3JhcHBlckNyZWF0b3JGb3JMaXN0
PEZsb2F0UG9pbnQ+KGxpc3RJdGVtLCBpbXAtPmFzc29jaWF0ZWRBdHRyaWJ1dGVOYW1lKCkpOwot
Ci0gICAgS0pTOjpKU1ZhbHVlKiByZXN1bHQgPSB0b0pTKGV4ZWMsIG9iaiwgbV9jb250ZXh0Lmdl
dCgpKTsKLSAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwotCi0gICAgbV9jb250ZXh0LT5z
dmdBdHRyaWJ1dGVDaGFuZ2VkKGltcC0+YXNzb2NpYXRlZEF0dHJpYnV0ZU5hbWUoKSk7Ci0KLSAg
ICByZXR1cm4gcmVzdWx0OworICAgIFNWR1BvaW50TGlzdEJhc2UqIGxpc3RJbXAgPSBpbXBsKCk7
CisgICAgcmV0dXJuIGZpbmlzaFNldHRlcihleGVjLCBlYywgY29udGV4dCgpLCBpbXBsKCksCisg
ICAgICAgIGxpc3RJbXAtPmluaXRpYWxpemUoU1ZHUE9ETGlzdEl0ZW08RmxvYXRQb2ludD46OmNv
cHkodG9TVkdQb2ludChhcmdzWzBdKSksIGVjKSk7CiB9CiAKIEpTVmFsdWUqIEpTU1ZHUG9pbnRM
aXN0OjpnZXRJdGVtKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgTGlzdCYgYXJncykKIHsKLSAgICBF
eGNlcHRpb25Db2RlIGVjID0gMDsKLQogICAgIGJvb2wgaW5kZXhPazsKLSAgICB1bnNpZ25lZCBp
bmRleCA9IGFyZ3NbMF0tPnRvSW50MzIoZXhlYywgaW5kZXhPayk7CisgICAgdW5zaWduZWQgaW5k
ZXggPSBhcmdzWzBdLT50b1VJbnQzMihleGVjLCBpbmRleE9rKTsKICAgICBpZiAoIWluZGV4T2sp
IHsKICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIFRZUEVfTUlTTUFUQ0hfRVJSKTsKICAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCi0gICAgU1ZHUG9pbnRMaXN0KiBp
bXAgPSBzdGF0aWNfY2FzdDxTVkdQb2ludExpc3QqPihpbXBsKCkpOwotICAgIFNWR0xpc3Q8UmVm
UHRyPFNWR1BPRExpc3RJdGVtPEZsb2F0UG9pbnQ+ID4gPiogbGlzdEltcCA9IGltcDsKLQotICAg
IFNWR1BPRExpc3RJdGVtPEZsb2F0UG9pbnQ+KiBsaXN0SXRlbSA9IGxpc3RJbXAtPmdldEl0ZW0o
aW5kZXgsIGVjKS5nZXQoKTsKLSAgICBKU1NWR1BPRFR5cGVXcmFwcGVyQ3JlYXRvckZvckxpc3Q8
RmxvYXRQb2ludD4qIG9iaiA9IG5ldyBKU1NWR1BPRFR5cGVXcmFwcGVyQ3JlYXRvckZvckxpc3Q8
RmxvYXRQb2ludD4obGlzdEl0ZW0sIGltcC0+YXNzb2NpYXRlZEF0dHJpYnV0ZU5hbWUoKSk7Ci0K
LSAgICBLSlM6OkpTVmFsdWUqIHJlc3VsdCA9IHRvSlMoZXhlYywgb2JqLCBtX2NvbnRleHQuZ2V0
KCkpOwotICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7Ci0gICAgcmV0dXJuIHJlc3VsdDsK
KyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBTVkdQb2ludExpc3RCYXNlKiBsaXN0SW1w
ID0gaW1wbCgpOworICAgIHJldHVybiBmaW5pc2hHZXR0ZXIoZXhlYywgZWMsIGNvbnRleHQoKSwg
aW1wbCgpLAorICAgICAgICBsaXN0SW1wLT5nZXRJdGVtKGluZGV4LCBlYykpOwogfQogCiBKU1Zh
bHVlKiBKU1NWR1BvaW50TGlzdDo6aW5zZXJ0SXRlbUJlZm9yZShFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IExpc3QmIGFyZ3MpCiB7Ci0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgRmxvYXRQ
b2ludCBuZXdJdGVtID0gdG9TVkdQb2ludChhcmdzWzBdKTsKLQogICAgIGJvb2wgaW5kZXhPazsK
LSAgICB1bnNpZ25lZCBpbmRleCA9IGFyZ3NbMV0tPnRvSW50MzIoZXhlYywgaW5kZXhPayk7Cisg
ICAgdW5zaWduZWQgaW5kZXggPSBhcmdzWzFdLT50b1VJbnQzMihleGVjLCBpbmRleE9rKTsKICAg
ICBpZiAoIWluZGV4T2spIHsKICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIFRZUEVfTUlT
TUFUQ0hfRVJSKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCi0gICAg
U1ZHUG9pbnRMaXN0KiBpbXAgPSBzdGF0aWNfY2FzdDxTVkdQb2ludExpc3QqPihpbXBsKCkpOwot
ICAgIFNWR0xpc3Q8UmVmUHRyPFNWR1BPRExpc3RJdGVtPEZsb2F0UG9pbnQ+ID4gPiogbGlzdElt
cCA9IGltcDsKLQotICAgIFNWR1BPRExpc3RJdGVtPEZsb2F0UG9pbnQ+KiBsaXN0SXRlbSA9IGxp
c3RJbXAtPmluc2VydEl0ZW1CZWZvcmUoU1ZHUE9ETGlzdEl0ZW08RmxvYXRQb2ludD46OmNvcHko
bmV3SXRlbSksIGluZGV4LCBlYykuZ2V0KCk7Ci0gICAgSlNTVkdQT0RUeXBlV3JhcHBlckNyZWF0
b3JGb3JMaXN0PEZsb2F0UG9pbnQ+KiBvYmogPSBuZXcgSlNTVkdQT0RUeXBlV3JhcHBlckNyZWF0
b3JGb3JMaXN0PEZsb2F0UG9pbnQ+KGxpc3RJdGVtLCBpbXAtPmFzc29jaWF0ZWRBdHRyaWJ1dGVO
YW1lKCkpOwotCi0gICAgS0pTOjpKU1ZhbHVlKiByZXN1bHQgPSB0b0pTKGV4ZWMsIG9iaiwgbV9j
b250ZXh0LmdldCgpKTsKLSAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwotCi0gICAgbV9j
b250ZXh0LT5zdmdBdHRyaWJ1dGVDaGFuZ2VkKGltcC0+YXNzb2NpYXRlZEF0dHJpYnV0ZU5hbWUo
KSk7Ci0KLSAgICByZXR1cm4gcmVzdWx0OworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAg
IFNWR1BvaW50TGlzdEJhc2UqIGxpc3RJbXAgPSBpbXBsKCk7CisgICAgcmV0dXJuIGZpbmlzaFNl
dHRlcihleGVjLCBlYywgY29udGV4dCgpLCBpbXBsKCksCisgICAgICAgIGxpc3RJbXAtPmluc2Vy
dEl0ZW1CZWZvcmUoU1ZHUE9ETGlzdEl0ZW08RmxvYXRQb2ludD46OmNvcHkodG9TVkdQb2ludChh
cmdzWzBdKSksIGluZGV4LCBlYykpOwogfQogCiBKU1ZhbHVlKiBKU1NWR1BvaW50TGlzdDo6cmVw
bGFjZUl0ZW0oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBMaXN0JiBhcmdzKQogewotICAgIEV4Y2Vw
dGlvbkNvZGUgZWMgPSAwOwotICAgIEZsb2F0UG9pbnQgbmV3SXRlbSA9IHRvU1ZHUG9pbnQoYXJn
c1swXSk7Ci0KICAgICBib29sIGluZGV4T2s7CiAgICAgdW5zaWduZWQgaW5kZXggPSBhcmdzWzFd
LT50b0ludDMyKGV4ZWMsIGluZGV4T2spOwogICAgIGlmICghaW5kZXhPaykgewpAQCAtMTI3LDI0
ICsxMTgsMTQgQEAgSlNWYWx1ZSogSlNTVkdQb2ludExpc3Q6OnJlcGxhY2VJdGVtKEV4ZQogICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKLSAgICBTVkdQb2ludExpc3QqIGlt
cCA9IHN0YXRpY19jYXN0PFNWR1BvaW50TGlzdCo+KGltcGwoKSk7Ci0gICAgU1ZHTGlzdDxSZWZQ
dHI8U1ZHUE9ETGlzdEl0ZW08RmxvYXRQb2ludD4gPiA+KiBsaXN0SW1wID0gaW1wOwotCi0gICAg
U1ZHUE9ETGlzdEl0ZW08RmxvYXRQb2ludD4qIGxpc3RJdGVtID0gbGlzdEltcC0+cmVwbGFjZUl0
ZW0oU1ZHUE9ETGlzdEl0ZW08RmxvYXRQb2ludD46OmNvcHkobmV3SXRlbSksIGluZGV4LCBlYyku
Z2V0KCk7IAotICAgIEpTU1ZHUE9EVHlwZVdyYXBwZXJDcmVhdG9yRm9yTGlzdDxGbG9hdFBvaW50
Piogb2JqID0gbmV3IEpTU1ZHUE9EVHlwZVdyYXBwZXJDcmVhdG9yRm9yTGlzdDxGbG9hdFBvaW50
PihsaXN0SXRlbSwgaW1wLT5hc3NvY2lhdGVkQXR0cmlidXRlTmFtZSgpKTsKLQotICAgIEtKUzo6
SlNWYWx1ZSogcmVzdWx0ID0gdG9KUyhleGVjLCBvYmosIG1fY29udGV4dC5nZXQoKSk7Ci0gICAg
c2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKLQotICAgIG1fY29udGV4dC0+c3ZnQXR0cmlidXRl
Q2hhbmdlZChpbXAtPmFzc29jaWF0ZWRBdHRyaWJ1dGVOYW1lKCkpOwotCi0gICAgcmV0dXJuIHJl
c3VsdDsKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBTVkdQb2ludExpc3RCYXNlKiBs
aXN0SW1wID0gaW1wbCgpOworICAgIHJldHVybiBmaW5pc2hTZXR0ZXIoZXhlYywgZWMsIGNvbnRl
eHQoKSwgaW1wbCgpLAorICAgICAgICBsaXN0SW1wLT5yZXBsYWNlSXRlbShTVkdQT0RMaXN0SXRl
bTxGbG9hdFBvaW50Pjo6Y29weSh0b1NWR1BvaW50KGFyZ3NbMF0pKSwgaW5kZXgsIGVjKSk7CiB9
CiAKIEpTVmFsdWUqIEpTU1ZHUG9pbnRMaXN0OjpyZW1vdmVJdGVtKEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgTGlzdCYgYXJncykKIHsKLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICAKICAg
ICBib29sIGluZGV4T2s7CiAgICAgdW5zaWduZWQgaW5kZXggPSBhcmdzWzBdLT50b0ludDMyKGV4
ZWMsIGluZGV4T2spOwogICAgIGlmICghaW5kZXhPaykgewpAQCAtMTUyLDM3ICsxMzMsMTggQEAg
SlNWYWx1ZSogSlNTVkdQb2ludExpc3Q6OnJlbW92ZUl0ZW0oRXhlYwogICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKICAgICB9CiAKLSAgICBTVkdQb2ludExpc3QqIGltcCA9IHN0YXRpY19j
YXN0PFNWR1BvaW50TGlzdCo+KGltcGwoKSk7Ci0gICAgU1ZHTGlzdDxSZWZQdHI8U1ZHUE9ETGlz
dEl0ZW08RmxvYXRQb2ludD4gPiA+KiBsaXN0SW1wID0gaW1wOwotCi0gICAgUmVmUHRyPFNWR1BP
RExpc3RJdGVtPEZsb2F0UG9pbnQ+ID4gbGlzdEl0ZW0obGlzdEltcC0+cmVtb3ZlSXRlbShpbmRl
eCwgZWMpKTsKLSAgICBKU1NWR1BPRFR5cGVXcmFwcGVyPEZsb2F0UG9pbnQ+KiBvYmogPSBuZXcg
SlNTVkdQT0RUeXBlV3JhcHBlckNyZWF0b3JSZWFkT25seTxGbG9hdFBvaW50PigqbGlzdEl0ZW0u
Z2V0KCkpOwotCi0gICAgS0pTOjpKU1ZhbHVlKiByZXN1bHQgPSB0b0pTKGV4ZWMsIG9iaiwgbV9j
b250ZXh0LmdldCgpKTsKLSAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwotCi0gICAgbV9j
b250ZXh0LT5zdmdBdHRyaWJ1dGVDaGFuZ2VkKGltcC0+YXNzb2NpYXRlZEF0dHJpYnV0ZU5hbWUo
KSk7Ci0KLSAgICByZXR1cm4gcmVzdWx0OworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAg
IFNWR1BvaW50TGlzdEJhc2UqIGxpc3RJbXAgPSBpbXBsKCk7CisgICAgcmV0dXJuIGZpbmlzaFNl
dHRlclJlYWRPbmx5UmVzdWx0KGV4ZWMsIGVjLCBjb250ZXh0KCksIGltcGwoKSwKKyAgICAgICAg
bGlzdEltcC0+cmVtb3ZlSXRlbShpbmRleCwgZWMpKTsKIH0KIAogSlNWYWx1ZSogSlNTVkdQb2lu
dExpc3Q6OmFwcGVuZEl0ZW0oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBMaXN0JiBhcmdzKQogewog
ICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIEZsb2F0UG9pbnQgbmV3SXRlbSA9IHRvU1ZH
UG9pbnQoYXJnc1swXSk7Ci0KLSAgICBTVkdQb2ludExpc3QqIGltcCA9IHN0YXRpY19jYXN0PFNW
R1BvaW50TGlzdCo+KGltcGwoKSk7Ci0gICAgU1ZHTGlzdDxSZWZQdHI8U1ZHUE9ETGlzdEl0ZW08
RmxvYXRQb2ludD4gPiA+KiBsaXN0SW1wID0gaW1wOwotCi0gICAgU1ZHUE9ETGlzdEl0ZW08Rmxv
YXRQb2ludD4qIGxpc3RJdGVtID0gbGlzdEltcC0+YXBwZW5kSXRlbShTVkdQT0RMaXN0SXRlbTxG
bG9hdFBvaW50Pjo6Y29weShuZXdJdGVtKSwgZWMpLmdldCgpOyAKLSAgICBKU1NWR1BPRFR5cGVX
cmFwcGVyQ3JlYXRvckZvckxpc3Q8RmxvYXRQb2ludD4qIG9iaiA9IG5ldyBKU1NWR1BPRFR5cGVX
cmFwcGVyQ3JlYXRvckZvckxpc3Q8RmxvYXRQb2ludD4obGlzdEl0ZW0sIGltcC0+YXNzb2NpYXRl
ZEF0dHJpYnV0ZU5hbWUoKSk7Ci0KLSAgICBLSlM6OkpTVmFsdWUqIHJlc3VsdCA9IHRvSlMoZXhl
Yywgb2JqLCBtX2NvbnRleHQuZ2V0KCkpOwotICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7
Ci0KLSAgICBtX2NvbnRleHQtPnN2Z0F0dHJpYnV0ZUNoYW5nZWQoaW1wLT5hc3NvY2lhdGVkQXR0
cmlidXRlTmFtZSgpKTsKLQotICAgIHJldHVybiByZXN1bHQ7CisgICAgU1ZHUG9pbnRMaXN0QmFz
ZSogbGlzdEltcCA9IGltcGwoKTsKKyAgICByZXR1cm4gZmluaXNoU2V0dGVyKGV4ZWMsIGVjLCBj
b250ZXh0KCksIGltcGwoKSwKKyAgICAgICAgbGlzdEltcC0+YXBwZW5kSXRlbShTVkdQT0RMaXN0
SXRlbTxGbG9hdFBvaW50Pjo6Y29weSh0b1NWR1BvaW50KGFyZ3NbMF0pKSwgZWMpKTsKIH0KIAog
fQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NWR1RyYW5zZm9ybUxpc3RDdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNTVkdUcmFuc2Zvcm1MaXN0Q3Vz
dG9tLmNwcAkocmV2aXNpb24gMzQ0MzgpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHVHJh
bnNmb3JtTGlzdEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgog
ICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFu
bkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMTgsNTkgKzE5LDY4IEBACiAgKi8KIAog
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTU1ZHVHJhbnNmb3JtTGlzdC5oIgogCiAj
aWYgRU5BQkxFKFNWRykKLSNpbmNsdWRlICJKU1NWR1RyYW5zZm9ybUxpc3QuaCIKIAotI2luY2x1
ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJKU1NWR1RyYW5z
Zm9ybS5oIgotI2luY2x1ZGUgIlNWR0RvY3VtZW50RXh0ZW5zaW9ucy5oIgogI2luY2x1ZGUgIlNW
R1RyYW5zZm9ybUxpc3QuaCIKLSNpbmNsdWRlICJTVkdTdHlsZWRFbGVtZW50LmgiCi0KLSNpbmNs
dWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogCiB1c2luZyBuYW1lc3BhY2UgS0pTOwogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLUpTVmFsdWUqIEpTU1ZHVHJhbnNmb3JtTGlzdDo6Y2xlYXIoRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBMaXN0JikKK3R5cGVkZWYgU1ZHTGlzdDxSZWZQdHI8U1ZHUE9ETGlz
dEl0ZW08U1ZHVHJhbnNmb3JtPiA+ID4gU1ZHVHJhbnNmb3JtTGlzdEJhc2U7CisKK3N0YXRpYyBK
U1ZhbHVlKiBmaW5pc2hHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBFeGNlcHRpb25Db2RlJiBlYywg
U1ZHRWxlbWVudCogY29udGV4dCwgU1ZHVHJhbnNmb3JtTGlzdCogbGlzdCwgUGFzc1JlZlB0cjxT
VkdQT0RMaXN0SXRlbTxTVkdUcmFuc2Zvcm0+ID4gaXRlbSkKIHsKLSAgICBFeGNlcHRpb25Db2Rl
IGVjID0gMDsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVj
KTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfQorICAgIHJldHVybiB0b0pT
KGV4ZWMsIEpTU1ZHUE9EVHlwZVdyYXBwZXJDcmVhdG9yRm9yTGlzdDxTVkdUcmFuc2Zvcm0+Ojpj
cmVhdGUoaXRlbS5nZXQoKSwgbGlzdC0+YXNzb2NpYXRlZEF0dHJpYnV0ZU5hbWUoKSkuZ2V0KCks
IGNvbnRleHQpOworfQogCi0gICAgU1ZHVHJhbnNmb3JtTGlzdCogaW1wID0gc3RhdGljX2Nhc3Q8
U1ZHVHJhbnNmb3JtTGlzdCo+KGltcGwoKSk7Ci0gICAgaW1wLT5jbGVhcihlYyk7Ci0gICAgc2V0
RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKK3N0YXRpYyBKU1ZhbHVlKiBmaW5pc2hTZXR0ZXIoRXhl
Y1N0YXRlKiBleGVjLCBFeGNlcHRpb25Db2RlJiBlYywgU1ZHRWxlbWVudCogY29udGV4dCwgU1ZH
VHJhbnNmb3JtTGlzdCogbGlzdCwgUGFzc1JlZlB0cjxTVkdQT0RMaXN0SXRlbTxTVkdUcmFuc2Zv
cm0+ID4gaXRlbSkKK3sKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4
ZWMsIGVjKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfQorICAgIGNvbnN0
IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUgPSBsaXN0LT5hc3NvY2lhdGVkQXR0cmlidXRl
TmFtZSgpOworICAgIGNvbnRleHQtPnN2Z0F0dHJpYnV0ZUNoYW5nZWQoYXR0cmlidXRlTmFtZSk7
CisgICAgcmV0dXJuIHRvSlMoZXhlYywgSlNTVkdQT0RUeXBlV3JhcHBlckNyZWF0b3JGb3JMaXN0
PFNWR1RyYW5zZm9ybT46OmNyZWF0ZShpdGVtLmdldCgpLCBhdHRyaWJ1dGVOYW1lKS5nZXQoKSwg
Y29udGV4dCk7Cit9CiAKLSAgICBtX2NvbnRleHQtPnN2Z0F0dHJpYnV0ZUNoYW5nZWQoaW1wLT5h
c3NvY2lhdGVkQXR0cmlidXRlTmFtZSgpKTsKK3N0YXRpYyBKU1ZhbHVlKiBmaW5pc2hTZXR0ZXJS
ZWFkT25seVJlc3VsdChFeGVjU3RhdGUqIGV4ZWMsIEV4Y2VwdGlvbkNvZGUmIGVjLCBTVkdFbGVt
ZW50KiBjb250ZXh0LCBTVkdUcmFuc2Zvcm1MaXN0KiBsaXN0LCBQYXNzUmVmUHRyPFNWR1BPRExp
c3RJdGVtPFNWR1RyYW5zZm9ybT4gPiBpdGVtKQoreworICAgIGlmIChlYykgeworICAgICAgICBz
ZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
KyAgICB9CisgICAgY29udGV4dC0+c3ZnQXR0cmlidXRlQ2hhbmdlZChsaXN0LT5hc3NvY2lhdGVk
QXR0cmlidXRlTmFtZSgpKTsKKyAgICByZXR1cm4gdG9KUyhleGVjLCBKU1NWR1BPRFR5cGVXcmFw
cGVyQ3JlYXRvclJlYWRPbmx5PFNWR1RyYW5zZm9ybT46OmNyZWF0ZSgqaXRlbSkuZ2V0KCksIGNv
bnRleHQpOworfQogCitKU1ZhbHVlKiBKU1NWR1RyYW5zZm9ybUxpc3Q6OmNsZWFyKEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgTGlzdCYpCit7CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAg
aW1wbCgpLT5jbGVhcihlYyk7CisgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICBt
X2NvbnRleHQtPnN2Z0F0dHJpYnV0ZUNoYW5nZWQoaW1wbCgpLT5hc3NvY2lhdGVkQXR0cmlidXRl
TmFtZSgpKTsKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAogSlNWYWx1ZSogSlNTVkdU
cmFuc2Zvcm1MaXN0Ojppbml0aWFsaXplKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgTGlzdCYgYXJn
cykKIHsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBTVkdUcmFuc2Zvcm0gbmV3SXRl
bSA9IHRvU1ZHVHJhbnNmb3JtKGFyZ3NbMF0pOwotCi0gICAgU1ZHVHJhbnNmb3JtTGlzdCogaW1w
ID0gc3RhdGljX2Nhc3Q8U1ZHVHJhbnNmb3JtTGlzdCo+KGltcGwoKSk7Ci0gICAgU1ZHTGlzdDxS
ZWZQdHI8U1ZHUE9ETGlzdEl0ZW08U1ZHVHJhbnNmb3JtPiA+ID4qIGxpc3RJbXAgPSBpbXA7Ci0K
LSAgICBTVkdQT0RMaXN0SXRlbTxTVkdUcmFuc2Zvcm0+KiBsaXN0SXRlbSA9IGxpc3RJbXAtPmlu
aXRpYWxpemUoU1ZHUE9ETGlzdEl0ZW08U1ZHVHJhbnNmb3JtPjo6Y29weShuZXdJdGVtKSwgZWMp
LmdldCgpOyAKLSAgICBKU1NWR1BPRFR5cGVXcmFwcGVyQ3JlYXRvckZvckxpc3Q8U1ZHVHJhbnNm
b3JtPiogb2JqID0gbmV3IEpTU1ZHUE9EVHlwZVdyYXBwZXJDcmVhdG9yRm9yTGlzdDxTVkdUcmFu
c2Zvcm0+KGxpc3RJdGVtLCBpbXAtPmFzc29jaWF0ZWRBdHRyaWJ1dGVOYW1lKCkpOwotCi0gICAg
S0pTOjpKU1ZhbHVlKiByZXN1bHQgPSB0b0pTKGV4ZWMsIG9iaiwgbV9jb250ZXh0LmdldCgpKTsK
LSAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwotCi0gICAgbV9jb250ZXh0LT5zdmdBdHRy
aWJ1dGVDaGFuZ2VkKGltcC0+YXNzb2NpYXRlZEF0dHJpYnV0ZU5hbWUoKSk7Ci0KLSAgICByZXR1
cm4gcmVzdWx0OworICAgIFNWR1RyYW5zZm9ybUxpc3RCYXNlKiBsaXN0SW1wID0gaW1wbCgpOwor
ICAgIHJldHVybiBmaW5pc2hTZXR0ZXIoZXhlYywgZWMsIGNvbnRleHQoKSwgaW1wbCgpLAorICAg
ICAgICBsaXN0SW1wLT5pbml0aWFsaXplKFNWR1BPRExpc3RJdGVtPFNWR1RyYW5zZm9ybT46OmNv
cHkodG9TVkdUcmFuc2Zvcm0oYXJnc1swXSkpLCBlYykpOwogfQogCiBKU1ZhbHVlKiBKU1NWR1Ry
YW5zZm9ybUxpc3Q6OmdldEl0ZW0oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBMaXN0JiBhcmdzKQog
ewotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotCiAgICAgYm9vbCBpbmRleE9rOwogICAgIHVu
c2lnbmVkIGluZGV4ID0gYXJnc1swXS0+dG9JbnQzMihleGVjLCBpbmRleE9rKTsKICAgICBpZiAo
IWluZGV4T2spIHsKQEAgLTc4LDIyICs4OCwxNCBAQCBKU1ZhbHVlKiBKU1NWR1RyYW5zZm9ybUxp
c3Q6OmdldEl0ZW0oRXhlCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KIAot
ICAgIFNWR1RyYW5zZm9ybUxpc3QqIGltcCA9IHN0YXRpY19jYXN0PFNWR1RyYW5zZm9ybUxpc3Qq
PihpbXBsKCkpOwotICAgIFNWR0xpc3Q8UmVmUHRyPFNWR1BPRExpc3RJdGVtPFNWR1RyYW5zZm9y
bT4gPiA+KiBsaXN0SW1wID0gaW1wOwotCi0gICAgU1ZHUE9ETGlzdEl0ZW08U1ZHVHJhbnNmb3Jt
PiogbGlzdEl0ZW0gPSBsaXN0SW1wLT5nZXRJdGVtKGluZGV4LCBlYykuZ2V0KCk7Ci0gICAgSlNT
VkdQT0RUeXBlV3JhcHBlckNyZWF0b3JGb3JMaXN0PFNWR1RyYW5zZm9ybT4qIG9iaiA9IG5ldyBK
U1NWR1BPRFR5cGVXcmFwcGVyQ3JlYXRvckZvckxpc3Q8U1ZHVHJhbnNmb3JtPihsaXN0SXRlbSwg
aW1wLT5hc3NvY2lhdGVkQXR0cmlidXRlTmFtZSgpKTsKLQotICAgIEtKUzo6SlNWYWx1ZSogcmVz
dWx0ID0gdG9KUyhleGVjLCBvYmosIG1fY29udGV4dC5nZXQoKSk7Ci0gICAgc2V0RE9NRXhjZXB0
aW9uKGV4ZWMsIGVjKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIEV4Y2VwdGlvbkNvZGUgZWMg
PSAwOworICAgIFNWR1RyYW5zZm9ybUxpc3RCYXNlKiBsaXN0SW1wID0gaW1wbCgpOworICAgIHJl
dHVybiBmaW5pc2hHZXR0ZXIoZXhlYywgZWMsIGNvbnRleHQoKSwgaW1wbCgpLAorICAgICAgICBs
aXN0SW1wLT5nZXRJdGVtKGluZGV4LCBlYykpOwogfQogCiBKU1ZhbHVlKiBKU1NWR1RyYW5zZm9y
bUxpc3Q6Omluc2VydEl0ZW1CZWZvcmUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBMaXN0JiBhcmdz
KQogewotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIFNWR1RyYW5zZm9ybSBuZXdJdGVt
ID0gdG9TVkdUcmFuc2Zvcm0oYXJnc1swXSk7Ci0KICAgICBib29sIGluZGV4T2s7CiAgICAgdW5z
aWduZWQgaW5kZXggPSBhcmdzWzFdLT50b0ludDMyKGV4ZWMsIGluZGV4T2spOwogICAgIGlmICgh
aW5kZXhPaykgewpAQCAtMTAxLDI1ICsxMDMsMTQgQEAgSlNWYWx1ZSogSlNTVkdUcmFuc2Zvcm1M
aXN0OjppbnNlcnRJdGVtQgogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAK
LSAgICBTVkdUcmFuc2Zvcm1MaXN0KiBpbXAgPSBzdGF0aWNfY2FzdDxTVkdUcmFuc2Zvcm1MaXN0
Kj4oaW1wbCgpKTsKLSAgICBTVkdMaXN0PFJlZlB0cjxTVkdQT0RMaXN0SXRlbTxTVkdUcmFuc2Zv
cm0+ID4gPiogbGlzdEltcCA9IGltcDsKLQotICAgIFNWR1BPRExpc3RJdGVtPFNWR1RyYW5zZm9y
bT4qIGxpc3RJdGVtID0gbGlzdEltcC0+aW5zZXJ0SXRlbUJlZm9yZShTVkdQT0RMaXN0SXRlbTxT
VkdUcmFuc2Zvcm0+Ojpjb3B5KG5ld0l0ZW0pLCBpbmRleCwgZWMpLmdldCgpOwotICAgIEpTU1ZH
UE9EVHlwZVdyYXBwZXJDcmVhdG9yRm9yTGlzdDxTVkdUcmFuc2Zvcm0+KiBvYmogPSBuZXcgSlNT
VkdQT0RUeXBlV3JhcHBlckNyZWF0b3JGb3JMaXN0PFNWR1RyYW5zZm9ybT4obGlzdEl0ZW0sIGlt
cC0+YXNzb2NpYXRlZEF0dHJpYnV0ZU5hbWUoKSk7Ci0KLSAgICBLSlM6OkpTVmFsdWUqIHJlc3Vs
dCA9IHRvSlMoZXhlYywgb2JqLCBtX2NvbnRleHQuZ2V0KCkpOwotICAgIHNldERPTUV4Y2VwdGlv
bihleGVjLCBlYyk7Ci0KLSAgICBtX2NvbnRleHQtPnN2Z0F0dHJpYnV0ZUNoYW5nZWQoaW1wLT5h
c3NvY2lhdGVkQXR0cmlidXRlTmFtZSgpKTsKLQotICAgIHJldHVybiByZXN1bHQ7CisgICAgRXhj
ZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgU1ZHVHJhbnNmb3JtTGlzdEJhc2UqIGxpc3RJbXAgPSBp
bXBsKCk7CisgICAgcmV0dXJuIGZpbmlzaFNldHRlcihleGVjLCBlYywgY29udGV4dCgpLCBpbXBs
KCksCisgICAgICAgIGxpc3RJbXAtPmluc2VydEl0ZW1CZWZvcmUoU1ZHUE9ETGlzdEl0ZW08U1ZH
VHJhbnNmb3JtPjo6Y29weSh0b1NWR1RyYW5zZm9ybShhcmdzWzBdKSksIGluZGV4LCBlYykpOwog
fQogCiBKU1ZhbHVlKiBKU1NWR1RyYW5zZm9ybUxpc3Q6OnJlcGxhY2VJdGVtKEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgTGlzdCYgYXJncykKIHsKLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAg
ICBTVkdUcmFuc2Zvcm0gbmV3SXRlbSA9IHRvU1ZHVHJhbnNmb3JtKGFyZ3NbMF0pOwotCiAgICAg
Ym9vbCBpbmRleE9rOwogICAgIHVuc2lnbmVkIGluZGV4ID0gYXJnc1sxXS0+dG9JbnQzMihleGVj
LCBpbmRleE9rKTsKICAgICBpZiAoIWluZGV4T2spIHsKQEAgLTEyNywyNCArMTE4LDE0IEBAIEpT
VmFsdWUqIEpTU1ZHVHJhbnNmb3JtTGlzdDo6cmVwbGFjZUl0ZW0KICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAgICAgfQogCi0gICAgU1ZHVHJhbnNmb3JtTGlzdCogaW1wID0gc3RhdGlj
X2Nhc3Q8U1ZHVHJhbnNmb3JtTGlzdCo+KGltcGwoKSk7Ci0gICAgU1ZHTGlzdDxSZWZQdHI8U1ZH
UE9ETGlzdEl0ZW08U1ZHVHJhbnNmb3JtPiA+ID4qIGxpc3RJbXAgPSBpbXA7Ci0KLSAgICBTVkdQ
T0RMaXN0SXRlbTxTVkdUcmFuc2Zvcm0+KiBsaXN0SXRlbSA9IGxpc3RJbXAtPnJlcGxhY2VJdGVt
KFNWR1BPRExpc3RJdGVtPFNWR1RyYW5zZm9ybT46OmNvcHkobmV3SXRlbSksIGluZGV4LCBlYyku
Z2V0KCk7IAotICAgIEpTU1ZHUE9EVHlwZVdyYXBwZXJDcmVhdG9yRm9yTGlzdDxTVkdUcmFuc2Zv
cm0+KiBvYmogPSBuZXcgSlNTVkdQT0RUeXBlV3JhcHBlckNyZWF0b3JGb3JMaXN0PFNWR1RyYW5z
Zm9ybT4obGlzdEl0ZW0sIGltcC0+YXNzb2NpYXRlZEF0dHJpYnV0ZU5hbWUoKSk7Ci0KLSAgICBL
SlM6OkpTVmFsdWUqIHJlc3VsdCA9IHRvSlMoZXhlYywgb2JqLCBtX2NvbnRleHQuZ2V0KCkpOwot
ICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7Ci0KLSAgICBtX2NvbnRleHQtPnN2Z0F0dHJp
YnV0ZUNoYW5nZWQoaW1wLT5hc3NvY2lhdGVkQXR0cmlidXRlTmFtZSgpKTsKLQotICAgIHJldHVy
biByZXN1bHQ7CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgU1ZHVHJhbnNmb3JtTGlz
dEJhc2UqIGxpc3RJbXAgPSBpbXBsKCk7CisgICAgcmV0dXJuIGZpbmlzaFNldHRlcihleGVjLCBl
YywgY29udGV4dCgpLCBpbXBsKCksCisgICAgICAgIGxpc3RJbXAtPnJlcGxhY2VJdGVtKFNWR1BP
RExpc3RJdGVtPFNWR1RyYW5zZm9ybT46OmNvcHkodG9TVkdUcmFuc2Zvcm0oYXJnc1swXSkpLCBp
bmRleCwgZWMpKTsKIH0KIAogSlNWYWx1ZSogSlNTVkdUcmFuc2Zvcm1MaXN0OjpyZW1vdmVJdGVt
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgTGlzdCYgYXJncykKIHsKLSAgICBFeGNlcHRpb25Db2Rl
IGVjID0gMDsKLSAgICAKICAgICBib29sIGluZGV4T2s7CiAgICAgdW5zaWduZWQgaW5kZXggPSBh
cmdzWzBdLT50b0ludDMyKGV4ZWMsIGluZGV4T2spOwogICAgIGlmICghaW5kZXhPaykgewpAQCAt
MTUyLDM3ICsxMzMsMTggQEAgSlNWYWx1ZSogSlNTVkdUcmFuc2Zvcm1MaXN0OjpyZW1vdmVJdGVt
KAogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAKLSAgICBTVkdUcmFuc2Zv
cm1MaXN0KiBpbXAgPSBzdGF0aWNfY2FzdDxTVkdUcmFuc2Zvcm1MaXN0Kj4oaW1wbCgpKTsKLSAg
ICBTVkdMaXN0PFJlZlB0cjxTVkdQT0RMaXN0SXRlbTxTVkdUcmFuc2Zvcm0+ID4gPiogbGlzdElt
cCA9IGltcDsKLQotICAgIFJlZlB0cjxTVkdQT0RMaXN0SXRlbTxTVkdUcmFuc2Zvcm0+ID4gbGlz
dEl0ZW0obGlzdEltcC0+cmVtb3ZlSXRlbShpbmRleCwgZWMpKTsKLSAgICBKU1NWR1BPRFR5cGVX
cmFwcGVyPFNWR1RyYW5zZm9ybT4qIG9iaiA9IG5ldyBKU1NWR1BPRFR5cGVXcmFwcGVyQ3JlYXRv
clJlYWRPbmx5PFNWR1RyYW5zZm9ybT4oKmxpc3RJdGVtLmdldCgpKTsKLQotICAgIEtKUzo6SlNW
YWx1ZSogcmVzdWx0ID0gdG9KUyhleGVjLCBvYmosIG1fY29udGV4dC5nZXQoKSk7Ci0gICAgc2V0
RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKLQotICAgIG1fY29udGV4dC0+c3ZnQXR0cmlidXRlQ2hh
bmdlZChpbXAtPmFzc29jaWF0ZWRBdHRyaWJ1dGVOYW1lKCkpOwotCi0gICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBTVkdUcmFuc2Zvcm1MaXN0QmFzZSog
bGlzdEltcCA9IGltcGwoKTsKKyAgICByZXR1cm4gZmluaXNoU2V0dGVyUmVhZE9ubHlSZXN1bHQo
ZXhlYywgZWMsIGNvbnRleHQoKSwgaW1wbCgpLAorICAgICAgICBsaXN0SW1wLT5yZW1vdmVJdGVt
KGluZGV4LCBlYykpOwogfQogCiBKU1ZhbHVlKiBKU1NWR1RyYW5zZm9ybUxpc3Q6OmFwcGVuZEl0
ZW0oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBMaXN0JiBhcmdzKQogewogICAgIEV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOwotICAgIFNWR1RyYW5zZm9ybSBuZXdJdGVtID0gdG9TVkdUcmFuc2Zvcm0oYXJn
c1swXSk7Ci0KLSAgICBTVkdUcmFuc2Zvcm1MaXN0KiBpbXAgPSBzdGF0aWNfY2FzdDxTVkdUcmFu
c2Zvcm1MaXN0Kj4oaW1wbCgpKTsKLSAgICBTVkdMaXN0PFJlZlB0cjxTVkdQT0RMaXN0SXRlbTxT
VkdUcmFuc2Zvcm0+ID4gPiogbGlzdEltcCA9IGltcDsKLQotICAgIFNWR1BPRExpc3RJdGVtPFNW
R1RyYW5zZm9ybT4qIGxpc3RJdGVtID0gbGlzdEltcC0+YXBwZW5kSXRlbShTVkdQT0RMaXN0SXRl
bTxTVkdUcmFuc2Zvcm0+Ojpjb3B5KG5ld0l0ZW0pLCBlYykuZ2V0KCk7IAotICAgIEpTU1ZHUE9E
VHlwZVdyYXBwZXJDcmVhdG9yRm9yTGlzdDxTVkdUcmFuc2Zvcm0+KiBvYmogPSBuZXcgSlNTVkdQ
T0RUeXBlV3JhcHBlckNyZWF0b3JGb3JMaXN0PFNWR1RyYW5zZm9ybT4obGlzdEl0ZW0sIGltcC0+
YXNzb2NpYXRlZEF0dHJpYnV0ZU5hbWUoKSk7Ci0KLSAgICBLSlM6OkpTVmFsdWUqIHJlc3VsdCA9
IHRvSlMoZXhlYywgb2JqLCBtX2NvbnRleHQuZ2V0KCkpOwotICAgIHNldERPTUV4Y2VwdGlvbihl
eGVjLCBlYyk7Ci0KLSAgICBtX2NvbnRleHQtPnN2Z0F0dHJpYnV0ZUNoYW5nZWQoaW1wLT5hc3Nv
Y2lhdGVkQXR0cmlidXRlTmFtZSgpKTsKLQotICAgIHJldHVybiByZXN1bHQ7CisgICAgU1ZHVHJh
bnNmb3JtTGlzdEJhc2UqIGxpc3RJbXAgPSBpbXBsKCk7CisgICAgcmV0dXJuIGZpbmlzaFNldHRl
cihleGVjLCBlYywgY29udGV4dCgpLCBpbXBsKCksCisgICAgICAgIGxpc3RJbXAtPmFwcGVuZEl0
ZW0oU1ZHUE9ETGlzdEl0ZW08U1ZHVHJhbnNmb3JtPjo6Y29weSh0b1NWR1RyYW5zZm9ybShhcmdz
WzBdKSksIGVjKSk7CiB9CiAKIH0KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2Rl
R2VuZXJhdG9ySlMucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JKUy5wbQkocmV2aXNpb24gMzQ0MzgpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCSh3b3JraW5nIGNvcHkpCkBAIC0xNTcyLDE2ICsxNTcy
LDE2IEBAIHN1YiBOYXRpdmVUb0pTVmFsdWUKIAogICAgICAgICBpZiAoJGltcGxDbGFzc05hbWVG
b3JWYWx1ZUNvbnZlcnNpb24gZXEgIiIpIHsKICAgICAgICAgICAgIGlmIChJc1NWR1R5cGVOZWVk
aW5nQ29udGV4dFBhcmFtZXRlcigkaW1wbENsYXNzTmFtZSkpIHsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gInRvSlMoZXhlYywgbmV3IEpTU1ZHUE9EVHlwZVdyYXBwZXJDcmVhdG9yUmVhZE9ubHk8
JG5hdGl2ZVR5cGU+KCR2YWx1ZSksIGNhc3RlZFRoaXNPYmotPmNvbnRleHQoKSkiIGlmICRpbkZ1
bmN0aW9uQ2FsbCBlcSAxOworICAgICAgICAgICAgICAgIHJldHVybiAidG9KUyhleGVjLCBKU1NW
R1BPRFR5cGVXcmFwcGVyQ3JlYXRvclJlYWRPbmx5PCRuYXRpdmVUeXBlPjo6Y3JlYXRlKCR2YWx1
ZSkuZ2V0KCksIGNhc3RlZFRoaXNPYmotPmNvbnRleHQoKSkiIGlmICRpbkZ1bmN0aW9uQ2FsbCBl
cSAxOwogCiAgICAgICAgICAgICAgICAgIyBTcGVjaWFsIGNhc2U6IFNWR1pvb21FdmVudCAtIGl0
IGRvZXNuJ3QgaGF2ZSBhIGNvbnRleHQsIGJ1dCBpdCdzIG5vIHByb2JsZW0sIGFzIHRoZXJlIGFy
ZSBubyByZWFkd3JpdGUgcHJvcHMKLSAgICAgICAgICAgICAgICByZXR1cm4gInRvSlMoZXhlYywg
bmV3IEpTU1ZHUE9EVHlwZVdyYXBwZXJDcmVhdG9yUmVhZE9ubHk8JG5hdGl2ZVR5cGU+KCR2YWx1
ZSksIDApIiBpZiAkaW1wbENsYXNzTmFtZSBlcSAiU1ZHWm9vbUV2ZW50IjsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gInRvSlMoZXhlYywgbmV3IEpTU1ZHUE9EVHlwZVdyYXBwZXJDcmVhdG9yUmVh
ZE9ubHk8JG5hdGl2ZVR5cGU+KCR2YWx1ZSksIGNvbnRleHQoKSkiOworICAgICAgICAgICAgICAg
IHJldHVybiAidG9KUyhleGVjLCBKU1NWR1BPRFR5cGVXcmFwcGVyQ3JlYXRvclJlYWRPbmx5PCRu
YXRpdmVUeXBlPjo6Y3JlYXRlKCR2YWx1ZSkuZ2V0KCksIDApIiBpZiAkaW1wbENsYXNzTmFtZSBl
cSAiU1ZHWm9vbUV2ZW50IjsKKyAgICAgICAgICAgICAgICByZXR1cm4gInRvSlMoZXhlYywgSlNT
VkdQT0RUeXBlV3JhcHBlckNyZWF0b3JSZWFkT25seTwkbmF0aXZlVHlwZT46OmNyZWF0ZSgkdmFs
dWUpLmdldCgpLCBjb250ZXh0KCkpIjsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuICJ0b0pTKGV4ZWMsIG5ldyBKU1NWR1BPRFR5cGVXcmFwcGVyQ3JlYXRvclJl
YWRPbmx5PCRuYXRpdmVUeXBlPigkdmFsdWUpLCBpbXApIjsKKyAgICAgICAgICAgICAgICByZXR1
cm4gInRvSlMoZXhlYywgSlNTVkdQT0RUeXBlV3JhcHBlckNyZWF0b3JSZWFkT25seTwkbmF0aXZl
VHlwZT46OmNyZWF0ZSgkdmFsdWUpLmdldCgpLCBpbXApIjsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfSBlbHNlIHsgIyBUaGVzZSBjbGFzc2VzLCBhbHdheXMgaGF2ZSBhIG1fY29udGV4dCBwb2lu
dGVyIQotICAgICAgICAgICAgcmV0dXJuICJ0b0pTKGV4ZWMsIEpTU1ZHUE9EVHlwZVdyYXBwZXJD
YWNoZTwkbmF0aXZlVHlwZSwgJGltcGxDbGFzc05hbWVGb3JWYWx1ZUNvbnZlcnNpb24+Ojpsb29r
dXBPckNyZWF0ZVdyYXBwZXIoaW1wLCAmJHtpbXBsQ2xhc3NOYW1lRm9yVmFsdWVDb252ZXJzaW9u
fTo6JGdldHRlciwgJiR7aW1wbENsYXNzTmFtZUZvclZhbHVlQ29udmVyc2lvbn06OiRzZXR0ZXIp
LCBjb250ZXh0KCkpIjsKKyAgICAgICAgICAgIHJldHVybiAidG9KUyhleGVjLCBKU1NWR1BPRFR5
cGVXcmFwcGVyQ2FjaGU8JG5hdGl2ZVR5cGUsICRpbXBsQ2xhc3NOYW1lRm9yVmFsdWVDb252ZXJz
aW9uPjo6bG9va3VwT3JDcmVhdGVXcmFwcGVyKGltcCwgJiR7aW1wbENsYXNzTmFtZUZvclZhbHVl
Q29udmVyc2lvbn06OiRnZXR0ZXIsICYke2ltcGxDbGFzc05hbWVGb3JWYWx1ZUNvbnZlcnNpb259
Ojokc2V0dGVyKS5nZXQoKSwgY29udGV4dCgpKSI7CiAgICAgICAgIH0KICAgICB9CiAKSW5kZXg6
IFdlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9j
c3MvQ1NTRm9udFNlbGVjdG9yLmNwcAkocmV2aXNpb24gMzQ0MzgpCisrKyBXZWJDb3JlL2Nzcy9D
U1NGb250U2VsZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw4ICsyNSw4IEBACiAgKi8K
IAogI2luY2x1ZGUgImNvbmZpZy5oIgotCiAjaW5jbHVkZSAiQ1NTRm9udFNlbGVjdG9yLmgiCisK
ICNpbmNsdWRlICJBdG9taWNTdHJpbmcuaCIKICNpbmNsdWRlICJDYWNoZWRGb250LmgiCiAjaW5j
bHVkZSAiQ1NTRm9udEZhY2UuaCIKQEAgLTU4LDEzICs1OCwxOCBAQAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBDU1NGb250U2VsZWN0b3I6OkNTU0ZvbnRTZWxlY3RvcihEb2N1bWVudCogZG9jdW1l
bnQpCi06IG1fZG9jdW1lbnQoZG9jdW1lbnQpCisgICAgOiBtX2RvY3VtZW50KGRvY3VtZW50KQog
eworICAgIC8vIEZJWE1FOiBBbiBvbGQgY29tbWVudCB1c2VkIHRvIHNheSB0aGVyZSB3YXMgbm8g
bmVlZCB0byBob2xkIGEgcmVmZXJlbmNlIHRvIG1fZG9jdW1lbnQKKyAgICAvLyBiZWNhdXNlICJ3
ZSBhcmUgZ3VhcmFudGVlZCB0byBiZSBkZXN0cm95ZWQgYmVmb3JlIHRoZSBkb2N1bWVudCIuIEJ1
dCB0aGVyZSBkb2VzIG5vdAorICAgIC8vIHNlZW0gdG8gYmUgYW55IHN1Y2ggZ3VhcmFudGVlLgor
CiAgICAgQVNTRVJUKG1fZG9jdW1lbnQpOwogfQogCiBDU1NGb250U2VsZWN0b3I6On5DU1NGb250
U2VsZWN0b3IoKQote30KK3sKK30KIAogYm9vbCBDU1NGb250U2VsZWN0b3I6OmlzRW1wdHkoKSBj
b25zdAogewpJbmRleDogV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmgJKHJldmlzaW9uIDM0NDM4KQorKysgV2Vi
Q29yZS9jc3MvQ1NTRm9udFNlbGVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDcgKzI3LDYgQEAK
ICNkZWZpbmUgQ1NTRm9udFNlbGVjdG9yX2gKIAogI2luY2x1ZGUgIkZvbnRTZWxlY3Rvci5oIgot
CiAjaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5j
bHVkZSA8d3RmL1JlZlB0ci5oPgpAQCAtNDQsNyArNDMsMTAgQEAgY2xhc3MgU3RyaW5nOwogCiBj
bGFzcyBDU1NGb250U2VsZWN0b3IgOiBwdWJsaWMgRm9udFNlbGVjdG9yIHsKIHB1YmxpYzoKLSAg
ICBDU1NGb250U2VsZWN0b3IoRG9jdW1lbnQqIGRvYyk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8
Q1NTRm9udFNlbGVjdG9yPiBjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50KQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDU1NGb250U2VsZWN0b3IoZG9jdW1lbnQpKTsKKyAgICB9
CiAgICAgdmlydHVhbCB+Q1NTRm9udFNlbGVjdG9yKCk7CiAKICAgICB2aXJ0dWFsIEZvbnREYXRh
KiBnZXRGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29u
c3QgQXRvbWljU3RyaW5nJiBmYW1pbHlOYW1lKTsKQEAgLTU3LDggKzU5LDEwIEBAIHB1YmxpYzoK
IAogICAgIERvY0xvYWRlciogZG9jTG9hZGVyKCkgY29uc3Q7CiAKLXByb3RlY3RlZDoKLSAgICBE
b2N1bWVudCogbV9kb2N1bWVudDsgLy8gTm8gbmVlZCB0byByZWYsIHNpbmNlIHdlIHdpbGwgYWx3
YXlzIGdldCBkZXN0cm95ZWQgYmVmb3JlIHRoZSBkb2N1bWVudCBkb2VzLgorcHJpdmF0ZToKKyAg
ICBDU1NGb250U2VsZWN0b3IoRG9jdW1lbnQqKTsKKworICAgIERvY3VtZW50KiBtX2RvY3VtZW50
OwogICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8Q1NTU2VnbWVudGVkRm9udEZhY2U+ID4gbV9m
b250czsKIH07CiAKSW5kZXg6IFdlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCShyZXZpc2lvbiAzNDQz
OCkKKysrIFdlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02OSwxNSArNjksMTUgQEAKICNpbmNsdWRlICJsb2FkZXIuaCIKICNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CiAKKyNpZiBFTkFCTEUoREFTSEJPQVJEX1NVUFBPUlQpCisjaW5jbHVkZSAiRGFzaGJv
YXJkUmVnaW9uLmgiCisjZW5kaWYKKwogI2lmIEVOQUJMRShTVkcpCiAjaW5jbHVkZSAiWExpbmtO
YW1lcy5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjZW5kaWYKIAotI2lmIEVOQUJMRShEQVNI
Qk9BUkRfU1VQUE9SVCkKLSNpbmNsdWRlICJEYXNoYm9hcmRSZWdpb24uaCIKLSNlbmRpZgotCiB1
c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zMTMsMTEgKzMx
MywxMCBAQCBzdGF0aWMgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYgcHJpbnRFCiBDU1NTdHls
ZVNlbGVjdG9yOjpDU1NTdHlsZVNlbGVjdG9yKERvY3VtZW50KiBkb2MsIGNvbnN0IFN0cmluZyYg
dXNlclN0eWxlU2hlZXQsIFN0eWxlU2hlZXRMaXN0KiBzdHlsZVNoZWV0cywgQ1NTU3R5bGVTaGVl
dCogbWFwcGVkRWxlbWVudFNoZWV0LCBib29sIHN0cmljdFBhcnNpbmcsIGJvb2wgbWF0Y2hBdXRo
b3JBbmRVc2VyU3R5bGVzKQogICAgIDogbV9iYWNrZ3JvdW5kRGF0YShCYWNrZ3JvdW5kRmlsbExh
eWVyKQogICAgICwgbV9jaGVja2VyKGRvYywgc3RyaWN0UGFyc2luZywgZmFsc2UpCisgICAgLCBt
X2ZvbnRTZWxlY3RvcihDU1NGb250U2VsZWN0b3I6OmNyZWF0ZShkb2MpKQogewogICAgIGluaXQo
KTsKIAotICAgIG1fZm9udFNlbGVjdG9yID0gbmV3IENTU0ZvbnRTZWxlY3Rvcihkb2MpOwotCiAg
ICAgbV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMgPSBtYXRjaEF1dGhvckFuZFVzZXJTdHlsZXM7
CiAKICAgICBpZiAoIWRlZmF1bHRTdHlsZSkKQEAgLTQwOTEsNyArNDA5MCw3IEBAIHZvaWQgQ1NT
U3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eShpbnQKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQogICAgICAgICBDU1NSZWZsZWN0VmFsdWUqIHJlZmxlY3RWYWx1ZSA9IHN0YXRpY19j
YXN0PENTU1JlZmxlY3RWYWx1ZSo+KHZhbHVlKTsKLSAgICAgICAgUmVmUHRyPFN0eWxlUmVmbGVj
dGlvbj4gcmVmbGVjdGlvbiA9IG5ldyBTdHlsZVJlZmxlY3Rpb24oKTsKKyAgICAgICAgUmVmUHRy
PFN0eWxlUmVmbGVjdGlvbj4gcmVmbGVjdGlvbiA9IFN0eWxlUmVmbGVjdGlvbjo6Y3JlYXRlKCk7
CiAgICAgICAgIHJlZmxlY3Rpb24tPnNldERpcmVjdGlvbihyZWZsZWN0VmFsdWUtPmRpcmVjdGlv
bigpKTsKICAgICAgICAgaWYgKHJlZmxlY3RWYWx1ZS0+b2Zmc2V0KCkpIHsKICAgICAgICAgICAg
IGludCB0eXBlID0gcmVmbGVjdFZhbHVlLT5vZmZzZXQoKS0+cHJpbWl0aXZlVHlwZSgpOwpAQCAt
NDEwNCw3ICs0MTAzLDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KGlu
dAogICAgICAgICBtYXBOaW5lUGllY2VJbWFnZShyZWZsZWN0VmFsdWUtPm1hc2soKSwgbWFzayk7
CiAgICAgICAgIHJlZmxlY3Rpb24tPnNldE1hc2sobWFzayk7CiAgICAgICAgIAotICAgICAgICBt
X3N0eWxlLT5zZXRCb3hSZWZsZWN0KHJlZmxlY3Rpb24pOworICAgICAgICBtX3N0eWxlLT5zZXRC
b3hSZWZsZWN0KHJlZmxlY3Rpb24ucmVsZWFzZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICAgICBjYXNlIENTU1Byb3BlcnR5T3BhY2l0eToKQEAgLTQ1MjQsOSArNDUyMyw3IEBAIHZvaWQg
Q1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eShpbnQKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN5ID0gc3g7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgICAgICAgICBTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbiogc2NhbGUgPSBuZXcg
U2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24oc3gsIHN5KTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IG9wZXJhdGlvbnMuYXBwZW5kKHNjYWxlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJh
dGlvbnMuYXBwZW5kKFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoc3gsIHN5KSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICBjYXNlIENTU1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xhdGVUcmFuc2Zv
cm1PcGVyYXRpb246CkBAIC00NTQ2LDkgKzQ1NDMsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6
OmFwcGx5UHJvcGVydHkoaW50CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zbGF0
ZVRyYW5zZm9ybU9wZXJhdGlvbiogdHJhbnNsYXRlID0gbmV3IFRyYW5zbGF0ZVRyYW5zZm9ybU9w
ZXJhdGlvbih0eCwgdHkpOwotICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9ucy5hcHBl
bmQodHJhbnNsYXRlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbnMuYXBwZW5k
KFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHR4LCB0eSkpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgY2FzZSBDU1NUcmFuc2Zvcm1WYWx1ZTo6Um90YXRlVHJhbnNmb3JtT3BlcmF0aW9u
OiB7CkBAIC00NTU3LDggKzQ1NTIsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5UHJv
cGVydHkoaW50CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5nbGUgPSByYWQyZGVnKGFu
Z2xlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZpcnN0VmFsdWUtPnByaW1p
dGl2ZVR5cGUoKSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0dSQUQpCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYW5nbGUgPSBncmFkMmRlZyhhbmdsZSk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24qIHJvdGF0ZSA9IG5ldyBSb3RhdGVUcmFu
c2Zvcm1PcGVyYXRpb24oYW5nbGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9u
cy5hcHBlbmQocm90YXRlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbnMuYXBw
ZW5kKFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKGFuZ2xlKSk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICBjYXNlIENTU1RyYW5zZm9ybVZhbHVlOjpTa2V3VHJhbnNmb3JtT3BlcmF0aW9uOgpA
QCAtNDU4NywyOCArNDU4MSwyMSBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5UHJvcGVy
dHkoaW50CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmdsZVkgPSBhbmds
ZVg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICBT
a2V3VHJhbnNmb3JtT3BlcmF0aW9uKiBza2V3ID0gbmV3IFNrZXdUcmFuc2Zvcm1PcGVyYXRpb24o
YW5nbGVYLCBhbmdsZVkpOwotICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9ucy5hcHBl
bmQoc2tldyk7CisgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25zLmFwcGVuZChTa2V3
VHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoYW5nbGVYLCBhbmdsZVkpKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgICAgIGNhc2UgQ1NTVHJhbnNmb3JtVmFsdWU6Ok1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbjog
ewotICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHNlY29uZFZhbHVl
ID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZXMtPml0ZW1XaXRob3V0Qm91
bmRzQ2hlY2soMSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUq
IHRoaXJkVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlcy0+aXRl
bVdpdGhvdXRCb3VuZHNDaGVjaygyKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBDU1NQcmlt
aXRpdmVWYWx1ZSogZm91cnRoVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+
KHZhbHVlcy0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygzKSk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBDU1NQcmltaXRpdmVWYWx1ZSogZmlmdGhWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlKj4odmFsdWVzLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDQpKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBzaXh0aFZhbHVlID0gc3RhdGljX2Nh
c3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZXMtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soNSkp
OwotICAgICAgICAgICAgICAgICAgICAgICAgTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uKiBtYXRy
aXggPSBuZXcgTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uKGZpcnN0VmFsdWUtPmdldERvdWJsZVZh
bHVlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kVmFsdWUtPmdldERv
dWJsZVZhbHVlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcmRWYWx1ZS0+
Z2V0RG91YmxlVmFsdWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VydGhW
YWx1ZS0+Z2V0RG91YmxlVmFsdWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
aWZ0aFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNpeHRoVmFsdWUtPmdldERvdWJsZVZhbHVlKCkpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgb3BlcmF0aW9ucy5hcHBlbmQobWF0cml4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRv
dWJsZSBhID0gZmlyc3RWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGRvdWJsZSBiID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZXMt
Pml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMSkpLT5nZXREb3VibGVWYWx1ZSgpOworICAgICAgICAg
ICAgICAgICAgICAgICAgZG91YmxlIGMgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+
KHZhbHVlcy0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygyKSktPmdldERvdWJsZVZhbHVlKCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgZCA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2
ZVZhbHVlKj4odmFsdWVzLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDMpKS0+Z2V0RG91YmxlVmFs
dWUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBlID0gc3RhdGljX2Nhc3Q8Q1NT
UHJpbWl0aXZlVmFsdWUqPih2YWx1ZXMtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soNCkpLT5nZXRE
b3VibGVWYWx1ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIGYgPSBzdGF0aWNf
Y2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlcy0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayg1
KSktPmdldERvdWJsZVZhbHVlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25z
LmFwcGVuZChNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShhLCBiLCBjLCBkLCBlLCBm
KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAg
fSAgIAotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICAgICAgY2FzZSBDU1NUcmFuc2Zvcm1WYWx1ZTo6VW5rbm93blRyYW5z
Zm9ybU9wZXJhdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgfQpJbmRleDogV2ViQ29yZS9kb20vQXR0cmlidXRlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2RvbS9BdHRyaWJ1dGUuY3BwCShyZXZpc2lvbiAzNDQzOCkKKysrIFdlYkNv
cmUvZG9tL0F0dHJpYnV0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDkgKzI5LDkgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1BdHRyaWJ1dGUqIEF0dHJpYnV0ZTo6Y2xvbmUoYm9vbCkg
Y29uc3QKK1Bhc3NSZWZQdHI8QXR0cmlidXRlPiBBdHRyaWJ1dGU6OmNsb25lKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gbmV3IEF0dHJpYnV0ZShtX25hbWUsIG1fdmFsdWUpOworICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgQXR0cmlidXRlKG1fbmFtZSwgbV92YWx1ZSkpOwogfQogCiBQYXNzUmVmUHRy
PEF0dHI+IEF0dHJpYnV0ZTo6Y3JlYXRlQXR0cklmTmVlZGVkKEVsZW1lbnQqIGUpCkluZGV4OiBX
ZWJDb3JlL2RvbS9BdHRyaWJ1dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9BdHRyaWJ1
dGUuaAkocmV2aXNpb24gMzQ0MzgpCisrKyBXZWJDb3JlL2RvbS9BdHRyaWJ1dGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSwxMSArMSw5IEBACiAvKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgotICoKICAqIENvcHlyaWdodCAoQykgMTk5OSBM
YXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtv
aXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAxIFBldGVyIEtl
bGx5IChwbWtAcG9zdC5jb20pCiAgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyICht
dWVsbGVyQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYg
QXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwg
MjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgog
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKQEAgLTM2LDI1ICszNCwxNyBAQCBjbGFzcyBDU1NTdHlsZURlY2xhcmF0aW9uOwogY2xh
c3MgRWxlbWVudDsKIGNsYXNzIE5hbWVkQXR0ck1hcDsKIAotLy8gdGhpcyBoYXMgbm8gY291bnRl
cnBhcnQgaW4gRE9NLCBwdXJlbHkgaW50ZXJuYWwKLS8vIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBu
b2RldmFsdWUgb2YgYW4gQXR0ci4KLS8vIHRoZSBhY3R1YWwgQXR0ciAoQXR0cikgd2l0aCBpdHMg
dmFsdWUgYXMgdGV4dGNoaWxkCi0vLyBpcyBvbmx5IGFsbG9jYXRlZCBvbiBkZW1hbmQgYnkgdGhl
IERPTSBiaW5kaW5ncy4KLS8vIEFueSB1c2Ugb2YgQXR0ciBpbnNpZGUga2h0bWwgc2hvdWxkIGJl
IGF2b2lkZWQuCisvLyBUaGlzIGhhcyBubyBjb3VudGVycGFydCBpbiBET00uCisvLyBJdCBpcyBh
biBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgbm9kZSB2YWx1ZSBvZiBhbiBBdHRyLgor
Ly8gVGhlIGFjdHVhbCBBdHRyIHdpdGggaXRzIHZhbHVlIGFzIGEgVGV4dCBjaGlsZCBpcyBhbGxv
Y2F0ZWQgb25seSBpZiBuZWVkZWQuCiBjbGFzcyBBdHRyaWJ1dGUgOiBwdWJsaWMgUmVmQ291bnRl
ZDxBdHRyaWJ1dGU+IHsKICAgICBmcmllbmQgY2xhc3MgQXR0cjsKLSAgICBmcmllbmQgY2xhc3Mg
RWxlbWVudDsKICAgICBmcmllbmQgY2xhc3MgTmFtZWRBdHRyTWFwOwogcHVibGljOgotICAgIC8v
IG51bGwgdmFsdWUgaXMgZm9yYmlkZGVuICEKLSAgICBBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVk
TmFtZSYgbmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkKLSAgICAgICAgOiBSZWZDb3Vu
dGVkPEF0dHJpYnV0ZT4oMCksIG1fbmFtZShuYW1lKSwgbV92YWx1ZSh2YWx1ZSksIG1faW1wbCgw
KQotICAgIHt9Ci0gICAgCi0gICAgQXR0cmlidXRlKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwg
Y29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkKLSAgICAgICAgOiBSZWZDb3VudGVkPEF0dHJpYnV0
ZT4oMCksIG1fbmFtZShudWxsQXRvbSwgbmFtZSwgbnVsbEF0b20pLCBtX3ZhbHVlKHZhbHVlKSwg
bV9pbXBsKDApCi0gICAge30KLQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEF0dHJpYnV0ZT4gY3Jl
YXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUp
CisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEF0dHJpYnV0ZShuYW1lLCB2YWx1
ZSkpOworICAgIH0KICAgICB2aXJ0dWFsIH5BdHRyaWJ1dGUoKSB7IH0KICAgICAKICAgICBjb25z
dCBBdG9taWNTdHJpbmcmIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQpAQCAtNzAs
NyArNjAsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiBtX3Zh
bHVlLmlzTnVsbCgpOyB9CiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV92YWx1
ZS5pc0VtcHR5KCk7IH0KICAgICAKLSAgICB2aXJ0dWFsIEF0dHJpYnV0ZSogY2xvbmUoYm9vbCBw
cmVzZXJ2ZURlY2wgPSB0cnVlKSBjb25zdDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8QXR0cmli
dXRlPiBjbG9uZSgpIGNvbnN0OwogCiAgICAgLy8gQW4gZXh0ZW5zaW9uIHRvIGdldCB0aGUgc3R5
bGUgaW5mb3JtYXRpb24gZm9yIHByZXNlbnRhdGlvbmFsIGF0dHJpYnV0ZXMuCiAgICAgdmlydHVh
bCBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KQEAgLTc4
LDYgKzY4LDE2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFZhbHVlKGNvbnN0IEF0b21pY1N0cmlu
ZyYgdmFsdWUpIHsgbV92YWx1ZSA9IHZhbHVlOyB9CiAgICAgdm9pZCBzZXRQcmVmaXgoY29uc3Qg
QXRvbWljU3RyaW5nJiBwcmVmaXgpIHsgbV9uYW1lLnNldFByZWZpeChwcmVmaXgpOyB9CiAKK3By
b3RlY3RlZDoKKyAgICBBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3Qg
QXRvbWljU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgOiBtX25hbWUobmFtZSksIG1fdmFsdWUodmFs
dWUpLCBtX2ltcGwoMCkKKyAgICB7CisgICAgfQorICAgIEF0dHJpYnV0ZShjb25zdCBBdG9taWNT
dHJpbmcmIG5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpCisgICAgICAgIDogbV9uYW1l
KG51bGxBdG9tLCBuYW1lLCBudWxsQXRvbSksIG1fdmFsdWUodmFsdWUpLCBtX2ltcGwoMCkKKyAg
ICB7CisgICAgfQorCiBwcml2YXRlOgogICAgIFF1YWxpZmllZE5hbWUgbV9uYW1lOwogICAgIEF0
b21pY1N0cmluZyBtX3ZhbHVlOwpJbmRleDogV2ViQ29yZS9kb20vQmVmb3JlVGV4dEluc2VydGVk
RXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9CZWZvcmVUZXh0SW5zZXJ0ZWRFdmVu
dC5oCShyZXZpc2lvbiAzNDQzOCkKKysrIFdlYkNvcmUvZG9tL0JlZm9yZVRleHRJbnNlcnRlZEV2
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDEwIEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogY2xhc3MgQmVmb3JlVGV4dEluc2VydGVkRXZlbnQgOiBwdWJsaWMgRXZlbnQgewogcHVi
bGljOgotICAgIEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50KGNvbnN0IFN0cmluZyYpOworICAgIHN0
YXRpYyBQYXNzUmVmUHRyPEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50PiBjcmVhdGUoY29uc3QgU3Ry
aW5nJiB0ZXh0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBCZWZvcmVUZXh0
SW5zZXJ0ZWRFdmVudCh0ZXh0KSk7CisgICAgfQogCiAgICAgdmlydHVhbCBib29sIGlzQmVmb3Jl
VGV4dEluc2VydGVkRXZlbnQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgIApAQCAtNDAsNiAr
NDMsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRUZXh0KGNvbnN0IFN0cmluZyYgcykgeyBtX3Rl
eHQgPSBzOyB9CiAKIHByaXZhdGU6CisgICAgQmVmb3JlVGV4dEluc2VydGVkRXZlbnQoY29uc3Qg
U3RyaW5nJik7CisKICAgICBTdHJpbmcgbV90ZXh0OwogfTsKIApJbmRleDogV2ViQ29yZS9kb20v
QmVmb3JlVW5sb2FkRXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9CZWZvcmVVbmxv
YWRFdmVudC5oCShyZXZpc2lvbiAzNDQzOCkKKysrIFdlYkNvcmUvZG9tL0JlZm9yZVVubG9hZEV2
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDEwIEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogICAgIGNsYXNzIEJlZm9yZVVubG9hZEV2ZW50IDogcHVibGljIEV2ZW50IHsKICAgICBw
dWJsaWM6Ci0gICAgICAgIEJlZm9yZVVubG9hZEV2ZW50KCk7CisgICAgICAgIHN0YXRpYyBQYXNz
UmVmUHRyPEJlZm9yZVVubG9hZEV2ZW50PiBjcmVhdGUoKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IEJlZm9yZVVubG9hZEV2ZW50KTsKKyAgICAgICAgfQogCiAg
ICAgICAgIHZpcnR1YWwgYm9vbCBzdG9yZXNSZXN1bHRBc1N0cmluZygpIGNvbnN0OwogICAgICAg
ICB2aXJ0dWFsIHZvaWQgc3RvcmVSZXN1bHQoY29uc3QgU3RyaW5nJik7CkBAIC00MCw2ICs0Myw4
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgU3RyaW5nIHJlc3VsdCgpIGNvbnN0IHsg
cmV0dXJuIG1fcmVzdWx0OyB9CiAKICAgICBwcml2YXRlOgorICAgICAgICBCZWZvcmVVbmxvYWRF
dmVudCgpOworCiAgICAgICAgIFN0cmluZyBtX3Jlc3VsdDsKICAgICB9OwogCkluZGV4OiBXZWJD
b3JlL2RvbS9DaGFyYWN0ZXJEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9DaGFy
YWN0ZXJEYXRhLmNwcAkocmV2aXNpb24gMzQ0MzgpCisrKyBXZWJDb3JlL2RvbS9DaGFyYWN0ZXJE
YXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAxLDcgKzIwMSw3IEBAIHZvaWQgQ2hhcmFjdGVy
RGF0YTo6ZGlzcGF0Y2hNb2RpZmllZEV2ZW4KICAgICAgICAgcGFyZW50Tm9kZSgpLT5jaGlsZHJl
bkNoYW5nZWQoKTsKICAgICBpZiAoZG9jdW1lbnQoKS0+aGFzTGlzdGVuZXJUeXBlKERvY3VtZW50
OjpET01DSEFSQUNURVJEQVRBTU9ESUZJRURfTElTVEVORVIpKSB7CiAgICAgICAgIEV4Y2VwdGlv
bkNvZGUgZWM7Ci0gICAgICAgIGRpc3BhdGNoRXZlbnQobmV3IE11dGF0aW9uRXZlbnQoRE9NQ2hh
cmFjdGVyRGF0YU1vZGlmaWVkRXZlbnQsIHRydWUsIGZhbHNlLCAwLCBwcmV2VmFsdWUsIG1fZGF0
YSwgU3RyaW5nKCksIDApLCBlYyk7CisgICAgICAgIGRpc3BhdGNoRXZlbnQoTXV0YXRpb25FdmVu
dDo6Y3JlYXRlKERPTUNoYXJhY3RlckRhdGFNb2RpZmllZEV2ZW50LCB0cnVlLCBmYWxzZSwgMCwg
cHJldlZhbHVlLCBtX2RhdGEsIFN0cmluZygpLCAwKSwgZWMpOwogICAgIH0KICAgICBkaXNwYXRj
aFN1YnRyZWVNb2RpZmllZEV2ZW50KCk7CiB9CkluZGV4OiBXZWJDb3JlL2RvbS9DbGlwYm9hcmRF
dmVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vQ2xpcGJvYXJkRXZlbnQuY3BwCShy
ZXZpc2lvbiAzNDQzOCkKKysrIFdlYkNvcmUvZG9tL0NsaXBib2FyZEV2ZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSwxMCArMSw4IEBACi0vKioKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRo
ZSBET00gaW1wbGVtZW50YXRpb24gZm9yIEtERS4KLSAqCisvKgogICogQ29weXJpZ2h0IChDKSAy
MDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDEgVG9i
aWFzIEFudG9uIChhbnRvbkBzdHVkLmZiaS5maC1kYXJtc3RhZHQuZGUpCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDYgU2FtdWVsIFdlaW5pZyAoc2FtLndlaW5pZ0BnbWFpbC5jb20pCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDMsIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdo
dCAoQykgMjAwMywgMjAwNSwgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTMxLDcgKzI5LDcgQEAgQ2xpcGJvYXJkRXZlbnQ6
OkNsaXBib2FyZEV2ZW50KCkKIHsKIH0KIAotQ2xpcGJvYXJkRXZlbnQ6OkNsaXBib2FyZEV2ZW50
KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBib29sIGNhbkJ1YmJsZSwgYm9vbCBjYW5j
ZWxhYmxlLCBDbGlwYm9hcmQqIGNsaXBib2FyZCkKK0NsaXBib2FyZEV2ZW50OjpDbGlwYm9hcmRF
dmVudChjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgYm9vbCBjYW5CdWJibGUsIGJvb2wg
Y2FuY2VsYWJsZSwgUGFzc1JlZlB0cjxDbGlwYm9hcmQ+IGNsaXBib2FyZCkKICAgICA6IEV2ZW50
KGV2ZW50VHlwZSwgY2FuQnViYmxlLCBjYW5jZWxhYmxlKSwgbV9jbGlwYm9hcmQoY2xpcGJvYXJk
KQogewogfQpJbmRleDogV2ViQ29yZS9kb20vQ2xpcGJvYXJkRXZlbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2RvbS9DbGlwYm9hcmRFdmVudC5oCShyZXZpc2lvbiAzNDQzOCkKKysrIFdlYkNv
cmUvZG9tL0NsaXBib2FyZEV2ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTAgKzEsOCBAQAog
LyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9yIEtE
RS4KLSAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkK
ICAqIENvcHlyaWdodCAoQykgMjAwMSBUb2JpYXMgQW50b24gKGFudG9uQHN0dWQuZmJpLmZoLWRh
cm1zdGFkdC5kZSkKICAqIENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIChzYW0ud2Vp
bmlnQGdtYWlsLmNvbSkKLSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwg
MjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zMywxNCArMzEsMjMgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiAgICAgY2xhc3MgQ2xpcGJvYXJkRXZlbnQgOiBwdWJsaWMgRXZlbnQgewog
ICAgIHB1YmxpYzoKLSAgICAgICAgQ2xpcGJvYXJkRXZlbnQoKTsKLSAgICAgICAgQ2xpcGJvYXJk
RXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBib29sIGNhbkJ1YmJsZUFyZywgYm9vbCBj
YW5jZWxhYmxlQXJnLCBDbGlwYm9hcmQqIGNsaXBib2FyZEFyZyk7CisgICAgICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPENsaXBib2FyZEV2ZW50PiBjcmVhdGUoKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IENsaXBib2FyZEV2ZW50KTsKKyAgICAgICAgfQorICAgICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxDbGlwYm9hcmRFdmVudD4gY3JlYXRlKGNvbnN0IEF0b21pY1N0
cmluZyYgdHlwZSwgYm9vbCBjYW5CdWJibGVBcmcsIGJvb2wgY2FuY2VsYWJsZUFyZywgUGFzc1Jl
ZlB0cjxDbGlwYm9hcmQ+IGNsaXBib2FyZEFyZykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBDbGlwYm9hcmRFdmVudCh0eXBlLCBjYW5CdWJibGVBcmcsIGNhbmNl
bGFibGVBcmcsIGNsaXBib2FyZEFyZykpOworICAgICAgICB9CiAKICAgICAgICAgQ2xpcGJvYXJk
KiBjbGlwYm9hcmQoKSBjb25zdCB7IHJldHVybiBtX2NsaXBib2FyZC5nZXQoKTsgfQogCiAgICAg
ICAgIHZpcnR1YWwgYm9vbCBpc0NsaXBib2FyZEV2ZW50KCkgY29uc3Q7CiAKICAgICBwcml2YXRl
OgorICAgICAgICBDbGlwYm9hcmRFdmVudCgpOworICAgICAgICBDbGlwYm9hcmRFdmVudChjb25z
dCBBdG9taWNTdHJpbmcmIHR5cGUsIGJvb2wgY2FuQnViYmxlQXJnLCBib29sIGNhbmNlbGFibGVB
cmcsIFBhc3NSZWZQdHI8Q2xpcGJvYXJkPik7CisKICAgICAgICAgUmVmUHRyPENsaXBib2FyZD4g
bV9jbGlwYm9hcmQ7CiAgICAgfTsKIApJbmRleDogV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAJKHJldmlzaW9u
IDM0NDM4KQorKysgV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM5NSw3ICszOTUsNyBAQCBib29sIENvbnRhaW5lck5vZGU6OnJlbW92ZUNoaWxkKE5vZGUq
IG9sCiAgICAgCiAgICAgLy8gZGlzcGF0Y2ggcHJlLXJlbW92YWwgbXV0YXRpb24gZXZlbnRzCiAg
ICAgaWYgKGRvY3VtZW50KCktPmhhc0xpc3RlbmVyVHlwZShEb2N1bWVudDo6RE9NTk9ERVJFTU9W
RURfTElTVEVORVIpKSB7Ci0gICAgICAgIEV2ZW50VGFyZ2V0Tm9kZUNhc3QoY2hpbGQuZ2V0KCkp
LT5kaXNwYXRjaEV2ZW50KG5ldyBNdXRhdGlvbkV2ZW50KERPTU5vZGVSZW1vdmVkRXZlbnQsIHRy
dWUsIGZhbHNlLAorICAgICAgICBFdmVudFRhcmdldE5vZGVDYXN0KGNoaWxkLmdldCgpKS0+ZGlz
cGF0Y2hFdmVudChNdXRhdGlvbkV2ZW50OjpjcmVhdGUoRE9NTm9kZVJlbW92ZWRFdmVudCwgdHJ1
ZSwgZmFsc2UsCiAgICAgICAgICAgICB0aGlzLCBTdHJpbmcoKSwgU3RyaW5nKCksIFN0cmluZygp
LCAwKSwgZWMsIHRydWUpOwogICAgICAgICBpZiAoZWMpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CkBAIC05NTcsNyArOTU3LDcgQEAgc3RhdGljIHZvaWQgZGlzcGF0Y2hDaGlsZEluc2VydGlv
bkV2ZW50cwogICAgICAgICBkb2MtPmhhc0xpc3RlbmVyVHlwZShEb2N1bWVudDo6RE9NTk9ERUlO
U0VSVEVEX0xJU1RFTkVSKSAmJgogICAgICAgICBjLT5pc0V2ZW50VGFyZ2V0Tm9kZSgpKSB7CiAg
ICAgICAgIGVjID0gMDsKLSAgICAgICAgRXZlbnRUYXJnZXROb2RlQ2FzdChjLmdldCgpKS0+ZGlz
cGF0Y2hFdmVudChuZXcgTXV0YXRpb25FdmVudChET01Ob2RlSW5zZXJ0ZWRFdmVudCwgdHJ1ZSwg
ZmFsc2UsCisgICAgICAgIEV2ZW50VGFyZ2V0Tm9kZUNhc3QoYy5nZXQoKSktPmRpc3BhdGNoRXZl
bnQoTXV0YXRpb25FdmVudDo6Y3JlYXRlKERPTU5vZGVJbnNlcnRlZEV2ZW50LCB0cnVlLCBmYWxz
ZSwKICAgICAgICAgICAgIGMtPnBhcmVudE5vZGUoKSwgU3RyaW5nKCksIFN0cmluZygpLCBTdHJp
bmcoKSwgMCksIGVjLCB0cnVlKTsKICAgICAgICAgaWYgKGVjKQogICAgICAgICAgICAgcmV0dXJu
OwpAQCAtOTcwLDcgKzk3MCw3IEBAIHN0YXRpYyB2b2lkIGRpc3BhdGNoQ2hpbGRJbnNlcnRpb25F
dmVudHMKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAKICAgICAgICAgICAg
IGVjID0gMDsKLSAgICAgICAgICAgIEV2ZW50VGFyZ2V0Tm9kZUNhc3QoYy5nZXQoKSktPmRpc3Bh
dGNoRXZlbnQobmV3IE11dGF0aW9uRXZlbnQoRE9NTm9kZUluc2VydGVkSW50b0RvY3VtZW50RXZl
bnQsIGZhbHNlLCBmYWxzZSwKKyAgICAgICAgICAgIEV2ZW50VGFyZ2V0Tm9kZUNhc3QoYy5nZXQo
KSktPmRpc3BhdGNoRXZlbnQoTXV0YXRpb25FdmVudDo6Y3JlYXRlKERPTU5vZGVJbnNlcnRlZElu
dG9Eb2N1bWVudEV2ZW50LCBmYWxzZSwgZmFsc2UsCiAgICAgICAgICAgICAgICAgMCwgU3RyaW5n
KCksIFN0cmluZygpLCBTdHJpbmcoKSwgMCksIGVjLCB0cnVlKTsKICAgICAgICAgICAgIGlmIChl
YykKICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC05OTAsNyArOTkwLDcgQEAgc3RhdGljIHZv
aWQgZGlzcGF0Y2hDaGlsZFJlbW92YWxFdmVudHMoTgogICAgICAgICBkb2MtPmhhc0xpc3RlbmVy
VHlwZShEb2N1bWVudDo6RE9NTk9ERVJFTU9WRURfTElTVEVORVIpICYmCiAgICAgICAgIGMtPmlz
RXZlbnRUYXJnZXROb2RlKCkpIHsKICAgICAgICAgZWMgPSAwOwotICAgICAgICBFdmVudFRhcmdl
dE5vZGVDYXN0KGMuZ2V0KCkpLT5kaXNwYXRjaEV2ZW50KG5ldyBNdXRhdGlvbkV2ZW50KERPTU5v
ZGVSZW1vdmVkRXZlbnQsIHRydWUsIGZhbHNlLAorICAgICAgICBFdmVudFRhcmdldE5vZGVDYXN0
KGMuZ2V0KCkpLT5kaXNwYXRjaEV2ZW50KE11dGF0aW9uRXZlbnQ6OmNyZWF0ZShET01Ob2RlUmVt
b3ZlZEV2ZW50LCB0cnVlLCBmYWxzZSwKICAgICAgICAgICAgIGMtPnBhcmVudE5vZGUoKSwgU3Ry
aW5nKCksIFN0cmluZygpLCBTdHJpbmcoKSwgMCksIGVjLCB0cnVlKTsKICAgICAgICAgaWYgKGVj
KQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTAwMiw3ICsxMDAyLDcgQEAgc3RhdGljIHZvaWQg
ZGlzcGF0Y2hDaGlsZFJlbW92YWxFdmVudHMoTgogICAgICAgICAgICAgaWYgKCFjLT5pc0V2ZW50
VGFyZ2V0Tm9kZSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgZWMg
PSAwOwotICAgICAgICAgICAgRXZlbnRUYXJnZXROb2RlQ2FzdChjLmdldCgpKS0+ZGlzcGF0Y2hF
dmVudChuZXcgTXV0YXRpb25FdmVudChET01Ob2RlUmVtb3ZlZEZyb21Eb2N1bWVudEV2ZW50LCBm
YWxzZSwgZmFsc2UsCisgICAgICAgICAgICBFdmVudFRhcmdldE5vZGVDYXN0KGMuZ2V0KCkpLT5k
aXNwYXRjaEV2ZW50KE11dGF0aW9uRXZlbnQ6OmNyZWF0ZShET01Ob2RlUmVtb3ZlZEZyb21Eb2N1
bWVudEV2ZW50LCBmYWxzZSwgZmFsc2UsCiAgICAgICAgICAgICAgICAgMCwgU3RyaW5nKCksIFN0
cmluZygpLCBTdHJpbmcoKSwgMCksIGVjLCB0cnVlKTsKICAgICAgICAgICAgIGlmIChlYykKICAg
ICAgICAgICAgICAgICByZXR1cm47CkluZGV4OiBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAzNDQzOCkKKysr
IFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTI3LDE3ICs1Mjcs
MTcgQEAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBEb2N1bWVudDo6YwogICAgIHJldHVy
biBuZXcgRG9jdW1lbnRGcmFnbWVudChkb2N1bWVudCgpKTsKIH0KIAotUGFzc1JlZlB0cjxUZXh0
PiBEb2N1bWVudDo6Y3JlYXRlVGV4dE5vZGUoY29uc3QgU3RyaW5nICZkYXRhKQorUGFzc1JlZlB0
cjxUZXh0PiBEb2N1bWVudDo6Y3JlYXRlVGV4dE5vZGUoY29uc3QgU3RyaW5nJiBkYXRhKQogewog
ICAgIHJldHVybiBuZXcgVGV4dCh0aGlzLCBkYXRhKTsKIH0KIAotUGFzc1JlZlB0cjxDb21tZW50
PiBEb2N1bWVudDo6Y3JlYXRlQ29tbWVudCAoY29uc3QgU3RyaW5nICZkYXRhKQorUGFzc1JlZlB0
cjxDb21tZW50PiBEb2N1bWVudDo6Y3JlYXRlQ29tbWVudChjb25zdCBTdHJpbmcmIGRhdGEpCiB7
CiAgICAgcmV0dXJuIG5ldyBDb21tZW50KHRoaXMsIGRhdGEpOwogfQogCi1QYXNzUmVmUHRyPENE
QVRBU2VjdGlvbj4gRG9jdW1lbnQ6OmNyZWF0ZUNEQVRBU2VjdGlvbihjb25zdCBTdHJpbmcgJmRh
dGEsIEV4Y2VwdGlvbkNvZGUmIGVjKQorUGFzc1JlZlB0cjxDREFUQVNlY3Rpb24+IERvY3VtZW50
OjpjcmVhdGVDREFUQVNlY3Rpb24oY29uc3QgU3RyaW5nJiBkYXRhLCBFeGNlcHRpb25Db2RlJiBl
YykKIHsKICAgICBpZiAoaXNIVE1MRG9jdW1lbnQoKSkgewogICAgICAgICBlYyA9IE5PVF9TVVBQ
T1JURURfRVJSOwpAQCAtNTQ2LDcgKzU0Niw3IEBAIFBhc3NSZWZQdHI8Q0RBVEFTZWN0aW9uPiBE
b2N1bWVudDo6Y3JlYXQKICAgICByZXR1cm4gbmV3IENEQVRBU2VjdGlvbih0aGlzLCBkYXRhKTsK
IH0KIAotUGFzc1JlZlB0cjxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24+IERvY3VtZW50OjpjcmVhdGVQ
cm9jZXNzaW5nSW5zdHJ1Y3Rpb24oY29uc3QgU3RyaW5nICZ0YXJnZXQsIGNvbnN0IFN0cmluZyAm
ZGF0YSwgRXhjZXB0aW9uQ29kZSYgZWMpCitQYXNzUmVmUHRyPFByb2Nlc3NpbmdJbnN0cnVjdGlv
bj4gRG9jdW1lbnQ6OmNyZWF0ZVByb2Nlc3NpbmdJbnN0cnVjdGlvbihjb25zdCBTdHJpbmcmIHRh
cmdldCwgY29uc3QgU3RyaW5nJiBkYXRhLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBpZiAo
IWlzVmFsaWROYW1lKHRhcmdldCkpIHsKICAgICAgICAgZWMgPSBJTlZBTElEX0NIQVJBQ1RFUl9F
UlI7CkBAIC01NTksNyArNTU5LDcgQEAgUGFzc1JlZlB0cjxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24+
IERvY3VtZQogICAgIHJldHVybiBuZXcgUHJvY2Vzc2luZ0luc3RydWN0aW9uKHRoaXMsIHRhcmdl
dCwgZGF0YSk7CiB9CiAKLVBhc3NSZWZQdHI8RW50aXR5UmVmZXJlbmNlPiBEb2N1bWVudDo6Y3Jl
YXRlRW50aXR5UmVmZXJlbmNlKGNvbnN0IFN0cmluZyAmbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMp
CitQYXNzUmVmUHRyPEVudGl0eVJlZmVyZW5jZT4gRG9jdW1lbnQ6OmNyZWF0ZUVudGl0eVJlZmVy
ZW5jZShjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGlmICgh
aXNWYWxpZE5hbWUobmFtZSkpIHsKICAgICAgICAgZWMgPSBJTlZBTElEX0NIQVJBQ1RFUl9FUlI7
CkBAIC01NzIsNyArNTcyLDcgQEAgUGFzc1JlZlB0cjxFbnRpdHlSZWZlcmVuY2U+IERvY3VtZW50
OjpjcgogICAgIHJldHVybiBuZXcgRW50aXR5UmVmZXJlbmNlKHRoaXMsIG5hbWUpOwogfQogCi1Q
YXNzUmVmUHRyPEVkaXRpbmdUZXh0PiBEb2N1bWVudDo6Y3JlYXRlRWRpdGluZ1RleHROb2RlKGNv
bnN0IFN0cmluZyAmdGV4dCkKK1Bhc3NSZWZQdHI8RWRpdGluZ1RleHQ+IERvY3VtZW50OjpjcmVh
dGVFZGl0aW5nVGV4dE5vZGUoY29uc3QgU3RyaW5nJiB0ZXh0KQogewogICAgIHJldHVybiBuZXcg
RWRpdGluZ1RleHQodGhpcywgdGV4dCk7CiB9CkBAIC0yNTY5LDMxICsyNTY5LDMxIEBAIERPTVdp
bmRvdyogRG9jdW1lbnQ6OmRvbVdpbmRvdygpIGNvbnN0CiBQYXNzUmVmUHRyPEV2ZW50PiBEb2N1
bWVudDo6Y3JlYXRlRXZlbnQoY29uc3QgU3RyaW5nJiBldmVudFR5cGUsIEV4Y2VwdGlvbkNvZGUm
IGVjKQogewogICAgIGlmIChldmVudFR5cGUgPT0gIlVJRXZlbnRzIiB8fCBldmVudFR5cGUgPT0g
IlVJRXZlbnQiKQotICAgICAgICByZXR1cm4gbmV3IFVJRXZlbnQ7CisgICAgICAgIHJldHVybiBV
SUV2ZW50OjpjcmVhdGUoKTsKICAgICBpZiAoZXZlbnRUeXBlID09ICJNb3VzZUV2ZW50cyIgfHwg
ZXZlbnRUeXBlID09ICJNb3VzZUV2ZW50IikKLSAgICAgICAgcmV0dXJuIG5ldyBNb3VzZUV2ZW50
OworICAgICAgICByZXR1cm4gTW91c2VFdmVudDo6Y3JlYXRlKCk7CiAgICAgaWYgKGV2ZW50VHlw
ZSA9PSAiTXV0YXRpb25FdmVudHMiIHx8IGV2ZW50VHlwZSA9PSAiTXV0YXRpb25FdmVudCIpCi0g
ICAgICAgIHJldHVybiBuZXcgTXV0YXRpb25FdmVudDsKKyAgICAgICAgcmV0dXJuIE11dGF0aW9u
RXZlbnQ6OmNyZWF0ZSgpOwogICAgIGlmIChldmVudFR5cGUgPT0gIktleWJvYXJkRXZlbnRzIiB8
fCBldmVudFR5cGUgPT0gIktleWJvYXJkRXZlbnQiKQotICAgICAgICByZXR1cm4gbmV3IEtleWJv
YXJkRXZlbnQ7CisgICAgICAgIHJldHVybiBLZXlib2FyZEV2ZW50OjpjcmVhdGUoKTsKICAgICBp
ZiAoZXZlbnRUeXBlID09ICJIVE1MRXZlbnRzIiB8fCBldmVudFR5cGUgPT0gIkV2ZW50IiB8fCBl
dmVudFR5cGUgPT0gIkV2ZW50cyIpCi0gICAgICAgIHJldHVybiBuZXcgRXZlbnQ7CisgICAgICAg
IHJldHVybiBFdmVudDo6Y3JlYXRlKCk7CiAgICAgaWYgKGV2ZW50VHlwZSA9PSAiUHJvZ3Jlc3NF
dmVudCIpCi0gICAgICAgIHJldHVybiBuZXcgUHJvZ3Jlc3NFdmVudDsKKyAgICAgICAgcmV0dXJu
IFByb2dyZXNzRXZlbnQ6OmNyZWF0ZSgpOwogICAgIGlmIChldmVudFR5cGUgPT0gIlRleHRFdmVu
dCIpCi0gICAgICAgIHJldHVybiBuZXcgVGV4dEV2ZW50OworICAgICAgICByZXR1cm4gVGV4dEV2
ZW50OjpjcmVhdGUoKTsKICAgICBpZiAoZXZlbnRUeXBlID09ICJPdmVyZmxvd0V2ZW50IikKLSAg
ICAgICAgcmV0dXJuIG5ldyBPdmVyZmxvd0V2ZW50OworICAgICAgICByZXR1cm4gT3ZlcmZsb3dF
dmVudDo6Y3JlYXRlKCk7CiAgICAgaWYgKGV2ZW50VHlwZSA9PSAiV2hlZWxFdmVudCIpCi0gICAg
ICAgIHJldHVybiBuZXcgV2hlZWxFdmVudDsKKyAgICAgICAgcmV0dXJuIFdoZWVsRXZlbnQ6OmNy
ZWF0ZSgpOwogI2lmIEVOQUJMRShTVkcpCiAgICAgaWYgKGV2ZW50VHlwZSA9PSAiU1ZHRXZlbnRz
IikKLSAgICAgICAgcmV0dXJuIG5ldyBFdmVudDsKKyAgICAgICAgcmV0dXJuIEV2ZW50OjpjcmVh
dGUoKTsKICAgICBpZiAoZXZlbnRUeXBlID09ICJTVkdab29tRXZlbnRzIikKLSAgICAgICAgcmV0
dXJuIG5ldyBTVkdab29tRXZlbnQ7CisgICAgICAgIHJldHVybiBTVkdab29tRXZlbnQ6OmNyZWF0
ZSgpOwogI2VuZGlmCiAgICAgaWYgKGV2ZW50VHlwZSA9PSAiTWVzc2FnZUV2ZW50IikKLSAgICAg
ICAgcmV0dXJuIG5ldyBNZXNzYWdlRXZlbnQ7CisgICAgICAgIHJldHVybiBNZXNzYWdlRXZlbnQ6
OmNyZWF0ZSgpOwogICAgIGVjID0gTk9UX1NVUFBPUlRFRF9FUlI7CiAgICAgcmV0dXJuIDA7CiB9
CkBAIC0zNjI1LDcgKzM2MjUsNyBAQCBQYXNzUmVmUHRyPEF0dHI+IERvY3VtZW50OjpjcmVhdGVB
dHRyaWJ1CiAKICAgICAvLyBGSVhNRTogQXNzdW1lIHRoaXMgaXMgYSBtYXBwZWQgYXR0cmlidXRl
LCBzaW5jZSBjcmVhdGVBdHRyaWJ1dGUgaXNuJ3QgbmFtZXNwYWNlLWF3YXJlLiAgVGhlcmUncyBu
byBoYXJtIHRvIFhNTAogICAgIC8vIGRvY3VtZW50cyBpZiB3ZSdyZSB3cm9uZy4KLSAgICByZXR1
cm4gbmV3IEF0dHIoMCwgdGhpcywgbmV3IE1hcHBlZEF0dHJpYnV0ZShxTmFtZSwgU3RyaW5nSW1w
bDo6ZW1wdHkoKSkpOworICAgIHJldHVybiBuZXcgQXR0cigwLCB0aGlzLCBNYXBwZWRBdHRyaWJ1
dGU6OmNyZWF0ZShxTmFtZSwgU3RyaW5nSW1wbDo6ZW1wdHkoKSkpOwogfQogCiAjaWYgRU5BQkxF
KFNWRykKQEAgLTM3MjEsNyArMzcyMSw3IEBAIHZvaWQgRG9jdW1lbnQ6OmZpbmlzaGVkUGFyc2lu
ZygpCiAgICAgc2V0UGFyc2luZyhmYWxzZSk7CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
LSAgICBkaXNwYXRjaEV2ZW50KG5ldyBFdmVudChET01Db250ZW50TG9hZGVkRXZlbnQsIHRydWUs
IGZhbHNlKSwgZWMpOworICAgIGRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShET01Db250ZW50
TG9hZGVkRXZlbnQsIHRydWUsIGZhbHNlKSwgZWMpOwogCiAgICAgaWYgKEZyYW1lKiBmID0gZnJh
bWUoKSkKICAgICAgICAgZi0+bG9hZGVyKCktPmZpbmlzaGVkUGFyc2luZygpOwpJbmRleDogV2Vi
Q29yZS9kb20vRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1bWVudC5o
CShyZXZpc2lvbiAzNDQzOCkKKysrIFdlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI4LDcgKzI4LDYgQEAKICNpbmNsdWRlICJBdHRyLmgiCiAjaW5jbHVkZSAiQ29sb3Iu
aCIKICNpbmNsdWRlICJEZXByZWNhdGVkUHRyTGlzdC5oIgotI2luY2x1ZGUgIkRlcHJlY2F0ZWRW
YWx1ZUxpc3QuaCIKICNpbmNsdWRlICJEb2N1bWVudE1hcmtlci5oIgogI2luY2x1ZGUgIkhUTUxD
b2xsZWN0aW9uLmgiCiAjaW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50LmgiCkluZGV4OiBXZWJDb3Jl
L2RvbS9FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9FbGVtZW50LmNwcAko
cmV2aXNpb24gMzQ0MzgpCisrKyBXZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTI3LDkgKzUyNyw5IEBAIHZvaWQgRWxlbWVudDo6c2V0QXR0cmlidXRlKGNvbnN0IFF1
YWxpZmkKICAgICB9CiB9CiAKLUF0dHJpYnV0ZSogRWxlbWVudDo6Y3JlYXRlQXR0cmlidXRlKGNv
bnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpCitQYXNz
UmVmUHRyPEF0dHJpYnV0ZT4gRWxlbWVudDo6Y3JlYXRlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmll
ZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIG5l
dyBBdHRyaWJ1dGUobmFtZSwgdmFsdWUpOworICAgIHJldHVybiBBdHRyaWJ1dGU6OmNyZWF0ZShu
YW1lLCB2YWx1ZSk7CiB9CiAKIHZvaWQgRWxlbWVudDo6YXR0cmlidXRlQ2hhbmdlZChBdHRyaWJ1
dGUqIGF0dHIsIGJvb2wgcHJlc2VydmVEZWNscykKSW5kZXg6IFdlYkNvcmUvZG9tL0VsZW1lbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9FbGVtZW50LmgJKHJldmlzaW9uIDM0NDM4KQor
KysgV2ViQ29yZS9kb20vRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDksNyArMTQ5LDcg
QEAgcHVibGljOgogCiAgICAgdmlydHVhbCBib29sIGNoaWxkVHlwZUFsbG93ZWQoTm9kZVR5cGUp
OwogCi0gICAgdmlydHVhbCBBdHRyaWJ1dGUqIGNyZWF0ZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZp
ZWROYW1lJiBuYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKTsKKyAgICB2aXJ0dWFsIFBh
c3NSZWZQdHI8QXR0cmlidXRlPiBjcmVhdGVBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYs
IGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpOwogICAgIAogICAgIHZvaWQgZGlzcGF0Y2hBdHRy
UmVtb3ZhbEV2ZW50KEF0dHJpYnV0ZSopOwogICAgIHZvaWQgZGlzcGF0Y2hBdHRyQWRkaXRpb25F
dmVudChBdHRyaWJ1dGUqKTsKSW5kZXg6IFdlYkNvcmUvZG9tL0V2ZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2RvbS9FdmVudC5jcHAJKHJldmlzaW9uIDM0NDM4KQorKysgV2ViQ29yZS9k
b20vRXZlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEwICsxLDggQEAKLS8qKgotICogVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgotICoKKy8q
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKICAqIENv
cHlyaWdodCAoQykgMjAwMSBUb2JpYXMgQW50b24gKGFudG9uQHN0dWQuZmJpLmZoLWRhcm1zdGFk
dC5kZSkKICAqIENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIChzYW0ud2VpbmlnQGdt
YWlsLmNvbSkKLSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNSwgMjAwNiBBcHBsZSBDb21wdXRl
ciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA1LCAyMDA2LCAyMDA4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjEsNiArMTks
NyBAQAogICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKICAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgogICov
CisKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJFdmVudC5oIgogCkBAIC0zMCw4ICsy
OSw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEV2ZW50OjpFdmVudCgpCi0gICAgOiBSZWZD
b3VudGVkPEV2ZW50PigwKQotICAgICwgbV9jYW5CdWJibGUoZmFsc2UpCisgICAgOiBtX2NhbkJ1
YmJsZShmYWxzZSkKICAgICAsIG1fY2FuY2VsYWJsZShmYWxzZSkKICAgICAsIG1fcHJvcGFnYXRp
b25TdG9wcGVkKGZhbHNlKQogICAgICwgbV9kZWZhdWx0UHJldmVudGVkKGZhbHNlKQpAQCAtNDQs
OCArNDIsNyBAQCBFdmVudDo6RXZlbnQoKQogfQogCiBFdmVudDo6RXZlbnQoY29uc3QgQXRvbWlj
U3RyaW5nJiBldmVudFR5cGUsIGJvb2wgY2FuQnViYmxlQXJnLCBib29sIGNhbmNlbGFibGVBcmcp
Ci0gICAgOiBSZWZDb3VudGVkPEV2ZW50PigwKQotICAgICwgbV90eXBlKGV2ZW50VHlwZSkKKyAg
ICA6IG1fdHlwZShldmVudFR5cGUpCiAgICAgLCBtX2NhbkJ1YmJsZShjYW5CdWJibGVBcmcpCiAg
ICAgLCBtX2NhbmNlbGFibGUoY2FuY2VsYWJsZUFyZykKICAgICAsIG1fcHJvcGFnYXRpb25TdG9w
cGVkKGZhbHNlKQpJbmRleDogV2ViQ29yZS9kb20vRXZlbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2RvbS9FdmVudC5oCShyZXZpc2lvbiAzNDQzOCkKKysrIFdlYkNvcmUvZG9tL0V2ZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMTAgKzEsOCBAQAogLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0
IG9mIHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9yIEtERS4KLSAqCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKICAqIENvcHlyaWdodCAoQykgMjAwMSBU
b2JpYXMgQW50b24gKGFudG9uQHN0dWQuZmJpLmZoLWRhcm1zdGFkdC5kZSkKICAqIENvcHlyaWdo
dCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIChzYW0ud2VpbmlnQGdtYWlsLmNvbSkKLSAqIENvcHly
aWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIw
MDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCkBAIC02NCw4ICs2MiwxNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICBD
SEFOR0UgICAgICAgICAgICAgID0gMzI3NjgKICAgICAgICAgfTsKIAotICAgICAgICBFdmVudCgp
OwotICAgICAgICBFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGJvb2wgY2FuQnViYmxl
LCBib29sIGNhbmNlbGFibGUpOworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxFdmVudD4gY3Jl
YXRlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBFdmVudCk7
CisgICAgICAgIH0KKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8RXZlbnQ+IGNyZWF0ZShjb25z
dCBBdG9taWNTdHJpbmcmIHR5cGUsIGJvb2wgY2FuQnViYmxlLCBib29sIGNhbmNlbGFibGUpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRXZlbnQodHlwZSwgY2Fu
QnViYmxlLCBjYW5jZWxhYmxlKSk7CisgICAgICAgIH0KICAgICAgICAgdmlydHVhbCB+RXZlbnQo
KTsKIAogICAgICAgICB2b2lkIGluaXRFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGJv
b2wgY2FuQnViYmxlLCBib29sIGNhbmNlbGFibGUpOwpAQCAtMTM1LDYgKzEzOSw5IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCBDbGlwYm9hcmQqIGNsaXBib2FyZCgpIGNv
bnN0IHsgcmV0dXJuIDA7IH0KIAogICAgIHByb3RlY3RlZDoKKyAgICAgICAgRXZlbnQoKTsKKyAg
ICAgICAgRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBib29sIGNhbkJ1YmJsZSwgYm9v
bCBjYW5jZWxhYmxlKTsKKwogICAgICAgICB2aXJ0dWFsIHZvaWQgcmVjZWl2ZWRUYXJnZXQoKTsK
ICAgICAgICAgYm9vbCBkaXNwYXRjaGVkKCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXQ7IH0KIApJ
bmRleDogV2ViQ29yZS9kb20vRXZlbnRUYXJnZXROb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2RvbS9FdmVudFRhcmdldE5vZGUuY3BwCShyZXZpc2lvbiAzNDQzOCkKKysrIFdlYkNvcmUv
ZG9tL0V2ZW50VGFyZ2V0Tm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIsNyArMiw3IEBACiAg
KiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAg
ICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAg
ICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKLSAqIENvcHlyaWdo
dCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogICAgICAgICAgIChDKSAyMDA3IE5pa29sYXMg
WmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTI2LDcgKzI2
LDYgQEAKICNpbmNsdWRlICJFdmVudFRhcmdldE5vZGUuaCIKIAogI2luY2x1ZGUgIkRvY3VtZW50
LmgiCi0jaW5jbHVkZSAiRXZlbnQuaCIKICNpbmNsdWRlICJFdmVudEV4Y2VwdGlvbi5oIgogI2lu
Y2x1ZGUgIkV2ZW50SGFuZGxlci5oIgogI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKQEAgLTEz
Miw4ICsxMzEsNyBAQCBib29sIEV2ZW50VGFyZ2V0Tm9kZTo6ZGlzcGF0Y2hTdWJ0cmVlTW9kCiAg
ICAgaWYgKCFkb2N1bWVudCgpLT5oYXNMaXN0ZW5lclR5cGUoRG9jdW1lbnQ6OkRPTVNVQlRSRUVN
T0RJRklFRF9MSVNURU5FUikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBFeGNlcHRpb25D
b2RlIGVjID0gMDsKLSAgICByZXR1cm4gZGlzcGF0Y2hFdmVudChuZXcgTXV0YXRpb25FdmVudChE
T01TdWJ0cmVlTW9kaWZpZWRFdmVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdHJ1ZSxmYWxzZSwwLFN0cmluZygpLFN0cmluZygpLFN0cmluZygpLDAp
LGVjLHRydWUpOworICAgIHJldHVybiBkaXNwYXRjaEV2ZW50KE11dGF0aW9uRXZlbnQ6OmNyZWF0
ZShET01TdWJ0cmVlTW9kaWZpZWRFdmVudCwgdHJ1ZSwgZmFsc2UsIDAsIFN0cmluZygpLCBTdHJp
bmcoKSwgU3RyaW5nKCksIDApLCBlYywgdHJ1ZSk7CiB9CiAKIHZvaWQgRXZlbnRUYXJnZXROb2Rl
OjpkaXNwYXRjaFdpbmRvd0V2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGUpCkBAIC0xNTAsNyArMTQ4
LDcgQEAgdm9pZCBFdmVudFRhcmdldE5vZGU6OmRpc3BhdGNoV2luZG93RXZlbgogewogICAgIEFT
U0VSVCghZXZlbnREaXNwYXRjaEZvcmJpZGRlbigpKTsKICAgICBSZWZQdHI8RG9jdW1lbnQ+IGRv
YyA9IGRvY3VtZW50KCk7Ci0gICAgZGlzcGF0Y2hXaW5kb3dFdmVudChuZXcgRXZlbnQoZXZlbnRU
eXBlLCBjYW5CdWJibGVBcmcsIGNhbmNlbGFibGVBcmcpKTsKKyAgICBkaXNwYXRjaFdpbmRvd0V2
ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnRUeXBlLCBjYW5CdWJibGVBcmcsIGNhbmNlbGFibGVBcmcp
KTsKICAgICAKICAgICBpZiAoZXZlbnRUeXBlID09IGxvYWRFdmVudCkgewogICAgICAgICAvLyBG
b3Igb25sb2FkIGV2ZW50cywgc2VuZCBhIHNlcGFyYXRlIGxvYWQgZXZlbnQgdG8gdGhlIGVuY2xv
c2luZyBmcmFtZSBvbmx5LgpAQCAtMTU4LDcgKzE1Niw3IEBAIHZvaWQgRXZlbnRUYXJnZXROb2Rl
OjpkaXNwYXRjaFdpbmRvd0V2ZW4KICAgICAgICAgLy8gdGhlIERPTS4KICAgICAgICAgRWxlbWVu
dCogb3duZXJFbGVtZW50ID0gZG9jLT5vd25lckVsZW1lbnQoKTsKICAgICAgICAgaWYgKG93bmVy
RWxlbWVudCkgewotICAgICAgICAgICAgUmVmUHRyPEV2ZW50PiBvd25lckV2ZW50ID0gbmV3IEV2
ZW50KGV2ZW50VHlwZSwgZmFsc2UsIGNhbmNlbGFibGVBcmcpOworICAgICAgICAgICAgUmVmUHRy
PEV2ZW50PiBvd25lckV2ZW50ID0gRXZlbnQ6OmNyZWF0ZShldmVudFR5cGUsIGZhbHNlLCBjYW5j
ZWxhYmxlQXJnKTsKICAgICAgICAgICAgIG93bmVyRXZlbnQtPnNldFRhcmdldChvd25lckVsZW1l
bnQpOwogICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgICAgICAgICBvd25l
ckVsZW1lbnQtPmRpc3BhdGNoR2VuZXJpY0V2ZW50KG93bmVyRWxlbWVudCwgb3duZXJFdmVudC5y
ZWxlYXNlKCksIGVjLCB0cnVlKTsKQEAgLTE3NCw3ICsxNzIsNyBAQCBib29sIEV2ZW50VGFyZ2V0
Tm9kZTo6ZGlzcGF0Y2hVSUV2ZW50KGNvCiAgICAgYm9vbCBjYW5jZWxhYmxlID0gZXZlbnRUeXBl
ID09IERPTUFjdGl2YXRlRXZlbnQ7CiAgICAgCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0g
ICAgUmVmUHRyPFVJRXZlbnQ+IGV2dCA9IG5ldyBVSUV2ZW50KGV2ZW50VHlwZSwgdHJ1ZSwgY2Fu
Y2VsYWJsZSwgZG9jdW1lbnQoKS0+ZGVmYXVsdFZpZXcoKSwgZGV0YWlsKTsKKyAgICBSZWZQdHI8
VUlFdmVudD4gZXZ0ID0gVUlFdmVudDo6Y3JlYXRlKGV2ZW50VHlwZSwgdHJ1ZSwgY2FuY2VsYWJs
ZSwgZG9jdW1lbnQoKS0+ZGVmYXVsdFZpZXcoKSwgZGV0YWlsKTsKICAgICBldnQtPnNldFVuZGVy
bHlpbmdFdmVudCh1bmRlcmx5aW5nRXZlbnQpOwogICAgIHJldHVybiBkaXNwYXRjaEV2ZW50KGV2
dC5yZWxlYXNlKCksIGVjLCB0cnVlKTsKIH0KQEAgLTE4Myw3ICsxODEsNyBAQCBib29sIEV2ZW50
VGFyZ2V0Tm9kZTo6ZGlzcGF0Y2hLZXlFdmVudChjCiB7CiAgICAgQVNTRVJUKCFldmVudERpc3Bh
dGNoRm9yYmlkZGVuKCkpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIFJlZlB0cjxL
ZXlib2FyZEV2ZW50PiBrZXlib2FyZEV2ZW50ID0gbmV3IEtleWJvYXJkRXZlbnQoa2V5LCBkb2N1
bWVudCgpLT5kZWZhdWx0VmlldygpKTsKKyAgICBSZWZQdHI8S2V5Ym9hcmRFdmVudD4ga2V5Ym9h
cmRFdmVudCA9IEtleWJvYXJkRXZlbnQ6OmNyZWF0ZShrZXksIGRvY3VtZW50KCktPmRlZmF1bHRW
aWV3KCkpOwogICAgIGJvb2wgciA9IGRpc3BhdGNoRXZlbnQoa2V5Ym9hcmRFdmVudCxlYyx0cnVl
KTsKICAgICAKICAgICAvLyB3ZSB3YW50IHRvIHJldHVybiBmYWxzZSBpZiBkZWZhdWx0IGlzIHBy
ZXZlbnRlZCAoYWxyZWFkeSB0YWtlbiBjYXJlIG9mKQpAQCAtMjg2LDExICsyODQsMTEgQEAgYm9v
bCBFdmVudFRhcmdldE5vZGU6OmRpc3BhdGNoTW91c2VFdmVudAogICAgIFJlZlB0cjxFdmVudFRh
cmdldE5vZGU+IHJlbGF0ZWRUYXJnZXQgPSAocmVsYXRlZFRhcmdldEFyZyAmJiByZWxhdGVkVGFy
Z2V0QXJnLT5pc0V2ZW50VGFyZ2V0Tm9kZSgpKQogICAgICAgICA/IHN0YXRpY19jYXN0PEV2ZW50
VGFyZ2V0Tm9kZSo+KHJlbGF0ZWRUYXJnZXRBcmcpIDogMDsKIAotICAgIFJlZlB0cjxFdmVudD4g
bW91c2VFdmVudCA9IG5ldyBNb3VzZUV2ZW50KGV2ZW50VHlwZSwKKyAgICBSZWZQdHI8RXZlbnQ+
IG1vdXNlRXZlbnQgPSBNb3VzZUV2ZW50OjpjcmVhdGUoZXZlbnRUeXBlLAogICAgICAgICB0cnVl
LCBjYW5jZWxhYmxlLCBkb2N1bWVudCgpLT5kZWZhdWx0VmlldygpLAogICAgICAgICBkZXRhaWws
IHNjcmVlblgsIHNjcmVlblksIHBhZ2VYLCBwYWdlWSwKICAgICAgICAgY3RybEtleSwgYWx0S2V5
LCBzaGlmdEtleSwgbWV0YUtleSwgYnV0dG9uLAotICAgICAgICByZWxhdGVkVGFyZ2V0LmdldCgp
LCAwLCBpc1NpbXVsYXRlZCk7CisgICAgICAgIHJlbGF0ZWRUYXJnZXQsIDAsIGlzU2ltdWxhdGVk
KTsKICAgICBtb3VzZUV2ZW50LT5zZXRVbmRlcmx5aW5nRXZlbnQodW5kZXJseWluZ0V2ZW50Lmdl
dCgpKTsKICAgICAKICAgICBkaXNwYXRjaEV2ZW50KG1vdXNlRXZlbnQsIGVjLCB0cnVlKTsKQEAg
LTMwMywxMSArMzAxLDExIEBAIGJvb2wgRXZlbnRUYXJnZXROb2RlOjpkaXNwYXRjaE1vdXNlRXZl
bnQKICAgICAvLyBvZiB0aGUgRE9NIHNwZWNzLCBidXQgaXMgdXNlZCBmb3IgY29tcGF0aWJpbGl0
eSB3aXRoIHRoZSBvbmRibGNsaWNrPSIiIGF0dHJpYnV0ZS4gIFRoaXMgaXMgdHJlYXRlZAogICAg
IC8vIGFzIGEgc2VwYXJhdGUgZXZlbnQgaW4gb3RoZXIgRE9NLWNvbXBsaWFudCBicm93c2VycyBs
aWtlIEZpcmVmb3gsIGFuZCBzbyB3ZSBkbyB0aGUgc2FtZS4KICAgICBpZiAoZXZlbnRUeXBlID09
IGNsaWNrRXZlbnQgJiYgZGV0YWlsID09IDIpIHsKLSAgICAgICAgUmVmUHRyPEV2ZW50PiBkb3Vi
bGVDbGlja0V2ZW50ID0gbmV3IE1vdXNlRXZlbnQoZGJsY2xpY2tFdmVudCwKKyAgICAgICAgUmVm
UHRyPEV2ZW50PiBkb3VibGVDbGlja0V2ZW50ID0gTW91c2VFdmVudDo6Y3JlYXRlKGRibGNsaWNr
RXZlbnQsCiAgICAgICAgICAgICB0cnVlLCBjYW5jZWxhYmxlLCBkb2N1bWVudCgpLT5kZWZhdWx0
VmlldygpLAogICAgICAgICAgICAgZGV0YWlsLCBzY3JlZW5YLCBzY3JlZW5ZLCBwYWdlWCwgcGFn
ZVksCiAgICAgICAgICAgICBjdHJsS2V5LCBhbHRLZXksIHNoaWZ0S2V5LCBtZXRhS2V5LCBidXR0
b24sCi0gICAgICAgICAgICByZWxhdGVkVGFyZ2V0LmdldCgpLCAwLCBpc1NpbXVsYXRlZCk7Cisg
ICAgICAgICAgICByZWxhdGVkVGFyZ2V0LCAwLCBpc1NpbXVsYXRlZCk7CiAgICAgICAgIGRvdWJs
ZUNsaWNrRXZlbnQtPnNldFVuZGVybHlpbmdFdmVudCh1bmRlcmx5aW5nRXZlbnQuZ2V0KCkpOwog
ICAgICAgICBpZiAoZGVmYXVsdEhhbmRsZWQpCiAgICAgICAgICAgICBkb3VibGVDbGlja0V2ZW50
LT5zZXREZWZhdWx0SGFuZGxlZCgpOwpAQCAtMzMxLDExICszMjksMTEgQEAgdm9pZCBFdmVudFRh
cmdldE5vZGU6OmRpc3BhdGNoV2hlZWxFdmVudAogICAgIAogICAgIEludFBvaW50IHBvcyA9IHZp
ZXctPndpbmRvd1RvQ29udGVudHMoZS5wb3MoKSk7CiAgICAgCi0gICAgUmVmUHRyPFdoZWVsRXZl
bnQ+IHdlID0gbmV3IFdoZWVsRXZlbnQoZS5kZWx0YVgoKSwgZS5kZWx0YVkoKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudCgpLT5kZWZhdWx0Vmll
dygpLCBlLmdsb2JhbFgoKSwgZS5nbG9iYWxZKCksIHBvcy54KCksIHBvcy55KCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5jdHJsS2V5KCksIGUuYWx0S2V5
KCksIGUuc2hpZnRLZXkoKSwgZS5tZXRhS2V5KCkpOworICAgIFJlZlB0cjxXaGVlbEV2ZW50PiB3
ZSA9IFdoZWVsRXZlbnQ6OmNyZWF0ZShlLmRlbHRhWCgpLCBlLmRlbHRhWSgpLAorICAgICAgICBk
b2N1bWVudCgpLT5kZWZhdWx0VmlldygpLCBlLmdsb2JhbFgoKSwgZS5nbG9iYWxZKCksIHBvcy54
KCksIHBvcy55KCksCisgICAgICAgIGUuY3RybEtleSgpLCBlLmFsdEtleSgpLCBlLnNoaWZ0S2V5
KCksIGUubWV0YUtleSgpKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBpZiAoIWRp
c3BhdGNoRXZlbnQod2UsIGVjLCB0cnVlKSkKKyAgICBpZiAoIWRpc3BhdGNoRXZlbnQod2UucmVs
ZWFzZSgpLCBlYywgdHJ1ZSkpCiAgICAgICAgIGUuYWNjZXB0KCk7CiB9CiAKQEAgLTM1NCwxNCAr
MzUyLDE0IEBAIGJvb2wgRXZlbnRUYXJnZXROb2RlOjpkaXNwYXRjaEhUTUxFdmVudCgKIHsKICAg
ICBBU1NFUlQoIWV2ZW50RGlzcGF0Y2hGb3JiaWRkZW4oKSk7CiAgICAgRXhjZXB0aW9uQ29kZSBl
YyA9IDA7Ci0gICAgcmV0dXJuIGRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KGV2ZW50VHlwZSwgY2Fu
QnViYmxlQXJnLCBjYW5jZWxhYmxlQXJnKSwgZWMsIHRydWUpOworICAgIHJldHVybiBkaXNwYXRj
aEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnRUeXBlLCBjYW5CdWJibGVBcmcsIGNhbmNlbGFibGVB
cmcpLCBlYywgdHJ1ZSk7CiB9CiAKIGJvb2wgRXZlbnRUYXJnZXROb2RlOjpkaXNwYXRjaFByb2dy
ZXNzRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nICZldmVudFR5cGUsIGJvb2wgbGVuZ3RoQ29tcHV0
YWJsZUFyZywgdW5zaWduZWQgbG9hZGVkQXJnLCB1bnNpZ25lZCB0b3RhbEFyZykKIHsKICAgICBB
U1NFUlQoIWV2ZW50RGlzcGF0Y2hGb3JiaWRkZW4oKSk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9
IDA7Ci0gICAgcmV0dXJuIGRpc3BhdGNoRXZlbnQobmV3IFByb2dyZXNzRXZlbnQoZXZlbnRUeXBl
LCBsZW5ndGhDb21wdXRhYmxlQXJnLCBsb2FkZWRBcmcsIHRvdGFsQXJnKSwgZWMsIHRydWUpOwor
ICAgIHJldHVybiBkaXNwYXRjaEV2ZW50KFByb2dyZXNzRXZlbnQ6OmNyZWF0ZShldmVudFR5cGUs
IGxlbmd0aENvbXB1dGFibGVBcmcsIGxvYWRlZEFyZywgdG90YWxBcmcpLCBlYywgdHJ1ZSk7CiB9
CiAKIHZvaWQgRXZlbnRUYXJnZXROb2RlOjpkaXNwYXRjaFN0b3JhZ2VFdmVudChjb25zdCBBdG9t
aWNTdHJpbmcgJmV2ZW50VHlwZSwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgb2xk
VmFsdWUsIGNvbnN0IFN0cmluZyYgbmV3VmFsdWUsIEZyYW1lKiBzb3VyY2UpCkBAIC0zNjksMTEg
KzM2NywxMCBAQCB2b2lkIEV2ZW50VGFyZ2V0Tm9kZTo6ZGlzcGF0Y2hTdG9yYWdlRXZlCiAjaWYg
RU5BQkxFKERPTV9TVE9SQUdFKQogICAgIEFTU0VSVCghZXZlbnREaXNwYXRjaEZvcmJpZGRlbigp
KTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBkaXNwYXRjaEV2ZW50KG5ldyBTdG9y
YWdlRXZlbnQoZXZlbnRUeXBlLCBrZXksIG9sZFZhbHVlLCBuZXdWYWx1ZSwgc291cmNlLT5kb2N1
bWVudCgpLT5kb2N1bWVudFVSSSgpLCBzb3VyY2UtPmRvbVdpbmRvdygpKSwgZWMsIHRydWUpOyAK
KyAgICBkaXNwYXRjaEV2ZW50KFN0b3JhZ2VFdmVudDo6Y3JlYXRlKGV2ZW50VHlwZSwga2V5LCBv
bGRWYWx1ZSwgbmV3VmFsdWUsIHNvdXJjZS0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRVUkkoKSwgc291
cmNlLT5kb21XaW5kb3coKSksIGVjLCB0cnVlKTsgCiAjZW5kaWYKIH0KIAotCiB2b2lkIEV2ZW50
VGFyZ2V0Tm9kZTo6cmVtb3ZlSFRNTEV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nICZl
dmVudFR5cGUpCiB7CiAgICAgaWYgKCFtX3JlZ2RMaXN0ZW5lcnMpIC8vIG5vdGhpbmcgdG8gcmVt
b3ZlCkluZGV4OiBXZWJDb3JlL2RvbS9LZXlib2FyZEV2ZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9kb20vS2V5Ym9hcmRFdmVudC5oCShyZXZpc2lvbiAzNDQzOCkKKysrIFdlYkNvcmUvZG9t
L0tleWJvYXJkRXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMiw3ICsyLDcgQEAKICAqIENvcHly
aWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQogICogQ29weXJpZ2h0IChD
KSAyMDAxIFRvYmlhcyBBbnRvbiAoYW50b25Ac3R1ZC5mYmkuZmgtZGFybXN0YWR0LmRlKQogICog
Q29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgKHNhbS53ZWluaWdAZ21haWwuY29tKQot
ICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwg
MjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKQEAgLTUxLDExICs1MSwyMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgICAgICBET01fS0VZX0xPQ0FUSU9OX05VTVBBRCAgICAgICAgPSAweDAzCiAgICAgICAgIH07
CiAgICAgICAgIAotICAgICAgICBLZXlib2FyZEV2ZW50KCk7Ci0gICAgICAgIEtleWJvYXJkRXZl
bnQoY29uc3QgUGxhdGZvcm1LZXlib2FyZEV2ZW50JiwgQWJzdHJhY3RWaWV3Kik7Ci0gICAgICAg
IEtleWJvYXJkRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBib29sIGNhbkJ1YmJsZSwg
Ym9vbCBjYW5jZWxhYmxlLCBBYnN0cmFjdFZpZXcqLAotICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFN0cmluZyYga2V5SWRlbnRpZmllciwgdW5zaWduZWQga2V5TG9jYXRpb24sCi0gICAgICAg
ICAgICAgICAgICAgICAgYm9vbCBjdHJsS2V5LCBib29sIGFsdEtleSwgYm9vbCBzaGlmdEtleSwg
Ym9vbCBtZXRhS2V5LCBib29sIGFsdEdyYXBoS2V5KTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8S2V5Ym9hcmRFdmVudD4gY3JlYXRlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBLZXlib2FyZEV2ZW50KTsKKyAgICAgICAgfQorICAgICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxLZXlib2FyZEV2ZW50PiBjcmVhdGUoY29uc3QgUGxhdGZvcm1LZXlib2FyZEV2
ZW50JiBwbGF0Zm9ybUV2ZW50LCBBYnN0cmFjdFZpZXcqIHZpZXcpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgS2V5Ym9hcmRFdmVudChwbGF0Zm9ybUV2ZW50LCB2
aWV3KSk7CisgICAgICAgIH0KKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8S2V5Ym9hcmRFdmVu
dD4gY3JlYXRlKGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgYm9vbCBjYW5CdWJibGUsIGJvb2wg
Y2FuY2VsYWJsZSwgQWJzdHJhY3RWaWV3KiB2aWV3LAorICAgICAgICAgICAgY29uc3QgU3RyaW5n
JiBrZXlJZGVudGlmaWVyLCB1bnNpZ25lZCBrZXlMb2NhdGlvbiwKKyAgICAgICAgICAgIGJvb2wg
Y3RybEtleSwgYm9vbCBhbHRLZXksIGJvb2wgc2hpZnRLZXksIGJvb2wgbWV0YUtleSwgYm9vbCBh
bHRHcmFwaEtleSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBL
ZXlib2FyZEV2ZW50KHR5cGUsIGNhbkJ1YmJsZSwgY2FuY2VsYWJsZSwgdmlldywga2V5SWRlbnRp
Zmllciwga2V5TG9jYXRpb24sCisgICAgICAgICAgICAgICAgY3RybEtleSwgYWx0S2V5LCBzaGlm
dEtleSwgbWV0YUtleSwgYWx0R3JhcGhLZXkpKTsKKyAgICAgICAgfQogICAgICAgICB2aXJ0dWFs
IH5LZXlib2FyZEV2ZW50KCk7CiAgICAgCiAgICAgICAgIHZvaWQgaW5pdEtleWJvYXJkRXZlbnQo
Y29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBib29sIGNhbkJ1YmJsZSwgYm9vbCBjYW5jZWxhYmxl
LCBBYnN0cmFjdFZpZXcqLApAQCAtODMsNiArOTMsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
I2VuZGlmCiAKICAgICBwcml2YXRlOgorICAgICAgICBLZXlib2FyZEV2ZW50KCk7CisgICAgICAg
IEtleWJvYXJkRXZlbnQoY29uc3QgUGxhdGZvcm1LZXlib2FyZEV2ZW50JiwgQWJzdHJhY3RWaWV3
Kik7CisgICAgICAgIEtleWJvYXJkRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBib29s
IGNhbkJ1YmJsZSwgYm9vbCBjYW5jZWxhYmxlLCBBYnN0cmFjdFZpZXcqLAorICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFN0cmluZyYga2V5SWRlbnRpZmllciwgdW5zaWduZWQga2V5TG9jYXRp
b24sCisgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjdHJsS2V5LCBib29sIGFsdEtleSwgYm9v
bCBzaGlmdEtleSwgYm9vbCBtZXRhS2V5LCBib29sIGFsdEdyYXBoS2V5KTsKKwogICAgICAgICBQ
bGF0Zm9ybUtleWJvYXJkRXZlbnQqIG1fa2V5RXZlbnQ7CiAgICAgICAgIFN0cmluZyBtX2tleUlk
ZW50aWZpZXI7CiAgICAgICAgIHVuc2lnbmVkIG1fa2V5TG9jYXRpb247CkluZGV4OiBXZWJDb3Jl
L2RvbS9NYXBwZWRBdHRyaWJ1dGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL01hcHBl
ZEF0dHJpYnV0ZS5jcHAJKHJldmlzaW9uIDM0NDM4KQorKysgV2ViQ29yZS9kb20vTWFwcGVkQXR0
cmlidXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxMSArMSw5IEBACi0vKioKLSAqIFRoaXMg
ZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9yIEtERS4KLSAqCisvKgog
ICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAg
ICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAgICAg
ICAgICAgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKICAqICAgICAgICAgICAo
QykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNSwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1LCAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwpAQCAtMjIsMTQgKzIwLDE1IEBACiAgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAogICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKi8KKwogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIk1hcHBlZEF0dHJpYnV0ZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUF0
dHJpYnV0ZSogTWFwcGVkQXR0cmlidXRlOjpjbG9uZShib29sIHByZXNlcnZlRGVjbCkgY29uc3QK
K1Bhc3NSZWZQdHI8QXR0cmlidXRlPiBNYXBwZWRBdHRyaWJ1dGU6OmNsb25lKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gbmV3IE1hcHBlZEF0dHJpYnV0ZShuYW1lKCksIHZhbHVlKCksIHByZXNlcnZl
RGVjbCA/IG1fc3R5bGVEZWNsLmdldCgpIDogMCk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBN
YXBwZWRBdHRyaWJ1dGUobmFtZSgpLCB2YWx1ZSgpLCBtX3N0eWxlRGVjbC5nZXQoKSkpOwogfQog
CiB9CkluZGV4OiBXZWJDb3JlL2RvbS9NYXBwZWRBdHRyaWJ1dGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2RvbS9NYXBwZWRBdHRyaWJ1dGUuaAkocmV2aXNpb24gMzQ0MzgpCisrKyBXZWJDb3Jl
L2RvbS9NYXBwZWRBdHRyaWJ1dGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSwxMSArMSw5IEBACiAv
KgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RF
LgotICoKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQog
ICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQog
ICogICAgICAgICAgIChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCiAgKiAgICAg
ICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqIENv
cHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTMyLDMzICszMCwzNCBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEF0dHI7Ci1jbGFzcyBDU1NTdHlsZURlY2xh
cmF0aW9uOwotY2xhc3MgQ1NTU3R5bGVTZWxlY3RvcjsKLWNsYXNzIEVsZW1lbnQ7Ci1jbGFzcyBO
YW1lZEF0dHJNYXA7Ci0KLWNsYXNzIE1hcHBlZEF0dHJpYnV0ZSA6IHB1YmxpYyBBdHRyaWJ1dGUK
LXsKK2NsYXNzIE1hcHBlZEF0dHJpYnV0ZSA6IHB1YmxpYyBBdHRyaWJ1dGUgewogcHVibGljOgot
ICAgIE1hcHBlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9t
aWNTdHJpbmcmIHZhbHVlLCBDU1NNYXBwZWRBdHRyaWJ1dGVEZWNsYXJhdGlvbiogZGVjbCA9IDAp
Ci0gICAgOiBBdHRyaWJ1dGUobmFtZSwgdmFsdWUpLCBtX3N0eWxlRGVjbChkZWNsKQorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPE1hcHBlZEF0dHJpYnV0ZT4gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5h
bWUmIG5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpCiAgICAgeworICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IE1hcHBlZEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSwgMCkpOwogICAgIH0K
LQotICAgIE1hcHBlZEF0dHJpYnV0ZShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGNvbnN0IEF0
b21pY1N0cmluZyYgdmFsdWUsIENTU01hcHBlZEF0dHJpYnV0ZURlY2xhcmF0aW9uKiBkZWNsID0g
MCkKLSAgICA6IEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSksIG1fc3R5bGVEZWNsKGRlY2wpCisgICAg
c3RhdGljIFBhc3NSZWZQdHI8TWFwcGVkQXR0cmlidXRlPiBjcmVhdGUoY29uc3QgQXRvbWljU3Ry
aW5nJiBuYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKQogICAgIHsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBNYXBwZWRBdHRyaWJ1dGUobmFtZSwgdmFsdWUsIDApKTsKICAgICB9
CiAKLSAgICB2aXJ0dWFsIEF0dHJpYnV0ZSogY2xvbmUoYm9vbCBwcmVzZXJ2ZURlY2w9dHJ1ZSkg
Y29uc3Q7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEF0dHJpYnV0ZT4gY2xvbmUoKSBjb25zdDsK
IAogICAgIHZpcnR1YWwgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUoKSBjb25zdCB7IHJldHVy
biBtX3N0eWxlRGVjbC5nZXQoKTsgfQogCiAgICAgQ1NTTWFwcGVkQXR0cmlidXRlRGVjbGFyYXRp
b24qIGRlY2woKSBjb25zdCB7IHJldHVybiBtX3N0eWxlRGVjbC5nZXQoKTsgfQotICAgIHZvaWQg
c2V0RGVjbChDU1NNYXBwZWRBdHRyaWJ1dGVEZWNsYXJhdGlvbiogZGVjbCkgeyBtX3N0eWxlRGVj
bCA9IGRlY2w7IH0KKyAgICB2b2lkIHNldERlY2woUGFzc1JlZlB0cjxDU1NNYXBwZWRBdHRyaWJ1
dGVEZWNsYXJhdGlvbj4gZGVjbCkgeyBtX3N0eWxlRGVjbCA9IGRlY2w7IH0KIAogcHJpdmF0ZToK
KyAgICBNYXBwZWRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRv
bWljU3RyaW5nJiB2YWx1ZSwgQ1NTTWFwcGVkQXR0cmlidXRlRGVjbGFyYXRpb24qIGRlY2xhcmF0
aW9uKQorICAgICAgICA6IEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSksIG1fc3R5bGVEZWNsKGRlY2xh
cmF0aW9uKQorICAgIHsKKyAgICB9CisgICAgTWFwcGVkQXR0cmlidXRlKGNvbnN0IEF0b21pY1N0
cmluZyYgbmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSwgQ1NTTWFwcGVkQXR0cmlidXRl
RGVjbGFyYXRpb24qIGRlY2xhcmF0aW9uKQorICAgICAgICA6IEF0dHJpYnV0ZShuYW1lLCB2YWx1
ZSksIG1fc3R5bGVEZWNsKGRlY2xhcmF0aW9uKQorICAgIHsKKyAgICB9CisKICAgICBSZWZQdHI8
Q1NTTWFwcGVkQXR0cmlidXRlRGVjbGFyYXRpb24+IG1fc3R5bGVEZWNsOwogfTsKIApJbmRleDog
V2ViQ29yZS9kb20vTWVzc2FnZUV2ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9N
ZXNzYWdlRXZlbnQuY3BwCShyZXZpc2lvbiAzNDQzOCkKKysrIFdlYkNvcmUvZG9tL01lc3NhZ2VF
dmVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0
IChDKSAyMDA3IEhlbnJ5IE1hc29uIChobWFzb25AbWFjLmNvbSkKLSAqIENvcHlyaWdodCAoQykg
MjAwMywgMjAwNSwgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0y
NiwxMCArMjYsMTAgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTWVz
c2FnZUV2ZW50LmgiCiAKICNpbmNsdWRlICJET01XaW5kb3cuaCIKICNpbmNsdWRlICJFdmVudE5h
bWVzLmgiCi0jaW5jbHVkZSAiTWVzc2FnZUV2ZW50LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IApAQCAtMzksNyArMzksNyBAQCBNZXNzYWdlRXZlbnQ6Ok1lc3NhZ2VFdmVudCgpCiB7CiB9CiAK
LU1lc3NhZ2VFdmVudDo6TWVzc2FnZUV2ZW50KGNvbnN0IFN0cmluZyYgZGF0YSwgY29uc3QgU3Ry
aW5nJiBvcmlnaW4sIGNvbnN0IFN0cmluZyYgbGFzdEV2ZW50SWQsIERPTVdpbmRvdyogc291cmNl
KQorTWVzc2FnZUV2ZW50OjpNZXNzYWdlRXZlbnQoY29uc3QgU3RyaW5nJiBkYXRhLCBjb25zdCBT
dHJpbmcmIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBsYXN0RXZlbnRJZCwgUGFzc1JlZlB0cjxET01X
aW5kb3c+IHNvdXJjZSkKICAgICA6IEV2ZW50KG1lc3NhZ2VFdmVudCwgZmFsc2UsIHRydWUpCiAg
ICAgLCBtX2RhdGEoZGF0YSkKICAgICAsIG1fb3JpZ2luKG9yaWdpbikKSW5kZXg6IFdlYkNvcmUv
ZG9tL01lc3NhZ2VFdmVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL01lc3NhZ2VFdmVu
dC5oCShyZXZpc2lvbiAzNDQzOCkKKysrIFdlYkNvcmUvZG9tL01lc3NhZ2VFdmVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNyBIZW5y
eSBNYXNvbiAoaG1hc29uQG1hYy5jb20pCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIw
MDUsIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzYs
OCArMzYsMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgTWVzc2FnZUV2ZW50
IDogcHVibGljIEV2ZW50IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIE1lc3NhZ2VFdmVudCgpOwot
ICAgICAgICBNZXNzYWdlRXZlbnQoY29uc3QgU3RyaW5nJiBkYXRhLCBjb25zdCBTdHJpbmcmIG9y
aWdpbiwgY29uc3QgU3RyaW5nJiBsYXN0RXZlbnRJZCwgRE9NV2luZG93KiBzb3VyY2UpOworICAg
ICAgICBzdGF0aWMgUGFzc1JlZlB0cjxNZXNzYWdlRXZlbnQ+IGNyZWF0ZSgpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWVzc2FnZUV2ZW50KTsKKyAgICAgICAg
fQorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxNZXNzYWdlRXZlbnQ+IGNyZWF0ZShjb25zdCBT
dHJpbmcmIGRhdGEsIGNvbnN0IFN0cmluZyYgb3JpZ2luLCBjb25zdCBTdHJpbmcmIGxhc3RFdmVu
dElkLCBQYXNzUmVmUHRyPERPTVdpbmRvdz4gc291cmNlKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IE1lc3NhZ2VFdmVudChkYXRhLCBvcmlnaW4sIGxhc3RFdmVu
dElkLCBzb3VyY2UpKTsKKyAgICAgICAgfQogICAgICAgICB2aXJ0dWFsIH5NZXNzYWdlRXZlbnQo
KTsKIAogICAgICAgICB2b2lkIGluaXRNZXNzYWdlRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0
eXBlLCBib29sIGNhbkJ1YmJsZSwgYm9vbCBjYW5jZWxhYmxlLCBjb25zdCBTdHJpbmcmIGRhdGEs
IGNvbnN0IFN0cmluZyYgb3JpZ2luLCBjb25zdCBTdHJpbmcmIGxhc3RFdmVudElkLCBET01XaW5k
b3cqIHNvdXJjZSk7CkBAIC01MCw2ICs1Niw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgdmlydHVhbCBib29sIGlzTWVzc2FnZUV2ZW50KCkgY29uc3Q7CiAKICAgICBwcml2YXRlOiAg
ICAKKyAgICAgICAgTWVzc2FnZUV2ZW50KCk7CisgICAgICAgIE1lc3NhZ2VFdmVudChjb25zdCBT
dHJpbmcmIGRhdGEsIGNvbnN0IFN0cmluZyYgb3JpZ2luLCBjb25zdCBTdHJpbmcmIGxhc3RFdmVu
dElkLCBQYXNzUmVmUHRyPERPTVdpbmRvdz4gc291cmNlKTsKKwogICAgICAgICBTdHJpbmcgbV9k
YXRhOwogICAgICAgICBTdHJpbmcgbV9vcmlnaW47CiAgICAgICAgIFN0cmluZyBtX2xhc3RFdmVu
dElkOwpJbmRleDogV2ViQ29yZS9kb20vTW91c2VFdmVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9kb20vTW91c2VFdmVudC5jcHAJKHJldmlzaW9uIDM0NDM4KQorKysgV2ViQ29yZS9kb20v
TW91c2VFdmVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTAgKzEsOCBAQAotLyoqCi0gKiBU
aGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRE9NIGltcGxlbWVudGF0aW9uIGZvciBLREUuCi0gKgor
LyoKICAqIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQogICog
Q29weXJpZ2h0IChDKSAyMDAxIFRvYmlhcyBBbnRvbiAoYW50b25Ac3R1ZC5mYmkuZmgtZGFybXN0
YWR0LmRlKQogICogQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgKHNhbS53ZWluaWdA
Z21haWwuY29tKQotICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA1LCAyMDA2IEFwcGxlIENvbXB1
dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDUsIDIwMDYsIDIwMDggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zNywxMSAr
MzUsMTEgQEAgTW91c2VFdmVudDo6TW91c2VFdmVudCgpCiB7CiB9CiAKLU1vdXNlRXZlbnQ6Ok1v
dXNlRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIGJvb2wgY2FuQnViYmxlLCBi
b29sIGNhbmNlbGFibGUsIEFic3RyYWN0VmlldyogdmlldywKK01vdXNlRXZlbnQ6Ok1vdXNlRXZl
bnQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIGJvb2wgY2FuQnViYmxlLCBib29sIGNh
bmNlbGFibGUsIFBhc3NSZWZQdHI8QWJzdHJhY3RWaWV3PiB2aWV3LAogICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgZGV0YWlsLCBpbnQgc2NyZWVuWCwgaW50IHNjcmVlblksIGludCBwYWdlWCwg
aW50IHBhZ2VZLAogICAgICAgICAgICAgICAgICAgICAgICBib29sIGN0cmxLZXksIGJvb2wgYWx0
S2V5LCBib29sIHNoaWZ0S2V5LCBib29sIG1ldGFLZXksCi0gICAgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIHNob3J0IGJ1dHRvbiwgRXZlbnRUYXJnZXROb2RlKiByZWxhdGVkVGFyZ2V0LAot
ICAgICAgICAgICAgICAgICAgICAgICBDbGlwYm9hcmQqIGNsaXBib2FyZCwgYm9vbCBpc1NpbXVs
YXRlZCkKKyAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgYnV0dG9uLCBQYXNz
UmVmUHRyPEV2ZW50VGFyZ2V0Tm9kZT4gcmVsYXRlZFRhcmdldCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgUGFzc1JlZlB0cjxDbGlwYm9hcmQ+IGNsaXBib2FyZCwgYm9vbCBpc1NpbXVsYXRlZCkK
ICAgICA6IE1vdXNlUmVsYXRlZEV2ZW50KGV2ZW50VHlwZSwgY2FuQnViYmxlLCBjYW5jZWxhYmxl
LCB2aWV3LCBkZXRhaWwsIHNjcmVlblgsIHNjcmVlblksCiAgICAgICAgICAgICAgICAgICAgICAg
ICBwYWdlWCwgcGFnZVksIGN0cmxLZXksIGFsdEtleSwgc2hpZnRLZXksIG1ldGFLZXksIGlzU2lt
dWxhdGVkKQogICAgICwgbV9idXR0b24oYnV0dG9uID09ICh1bnNpZ25lZCBzaG9ydCktMSA/IDAg
OiBidXR0b24pCkBAIC01NSwxMCArNTMsMTAgQEAgTW91c2VFdmVudDo6fk1vdXNlRXZlbnQoKQog
ewogfQogCi12b2lkIE1vdXNlRXZlbnQ6OmluaXRNb3VzZUV2ZW50KGNvbnN0IEF0b21pY1N0cmlu
ZyYgdHlwZSwgYm9vbCBjYW5CdWJibGUsIGJvb2wgY2FuY2VsYWJsZSwgQWJzdHJhY3RWaWV3KiB2
aWV3LAordm9pZCBNb3VzZUV2ZW50Ojppbml0TW91c2VFdmVudChjb25zdCBBdG9taWNTdHJpbmcm
IHR5cGUsIGJvb2wgY2FuQnViYmxlLCBib29sIGNhbmNlbGFibGUsIFBhc3NSZWZQdHI8QWJzdHJh
Y3RWaWV3PiB2aWV3LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGV0YWls
LCBpbnQgc2NyZWVuWCwgaW50IHNjcmVlblksIGludCBjbGllbnRYLCBpbnQgY2xpZW50WSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjdHJsS2V5LCBib29sIGFsdEtleSwg
Ym9vbCBzaGlmdEtleSwgYm9vbCBtZXRhS2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBzaG9ydCBidXR0b24sIEV2ZW50VGFyZ2V0Tm9kZSogcmVsYXRlZFRhcmdl
dCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgYnV0dG9u
LCBQYXNzUmVmUHRyPEV2ZW50VGFyZ2V0Tm9kZT4gcmVsYXRlZFRhcmdldCkKIHsKICAgICBpZiAo
ZGlzcGF0Y2hlZCgpKQogICAgICAgICByZXR1cm47CkluZGV4OiBXZWJDb3JlL2RvbS9Nb3VzZUV2
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vTW91c2VFdmVudC5oCShyZXZpc2lvbiAz
NDQzOCkKKysrIFdlYkNvcmUvZG9tL01vdXNlRXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSwx
MCArMSw4IEBACiAvKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERPTSBpbXBsZW1lbnRh
dGlvbiBmb3IgS0RFLgotICoKICAqIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1r
QHBvc3QuY29tKQogICogQ29weXJpZ2h0IChDKSAyMDAxIFRvYmlhcyBBbnRvbiAoYW50b25Ac3R1
ZC5mYmkuZmgtZGFybXN0YWR0LmRlKQogICogQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWlu
aWcgKHNhbS53ZWluaWdAZ21haWwuY29tKQotICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAy
MDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIw
MDQsIDIwMDUsIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCkBAIC0zNSwxNyArMzMsMjQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgIC8vIEludHJvZHVjZWQgaW4gRE9NIExldmVsIDIKICAgICBjbGFzcyBNb3VzZUV2ZW50IDog
cHVibGljIE1vdXNlUmVsYXRlZEV2ZW50IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIE1vdXNlRXZl
bnQoKTsKLSAgICAgICAgTW91c2VFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGJvb2wg
Y2FuQnViYmxlLCBib29sIGNhbmNlbGFibGUsIEFic3RyYWN0VmlldyogdmlldywKLSAgICAgICAg
ICAgICAgICAgICBpbnQgZGV0YWlsLCBpbnQgc2NyZWVuWCwgaW50IHNjcmVlblksIGludCBwYWdl
WCwgaW50IHBhZ2VZLAotICAgICAgICAgICAgICAgICAgIGJvb2wgY3RybEtleSwgYm9vbCBhbHRL
ZXksIGJvb2wgc2hpZnRLZXksIGJvb2wgbWV0YUtleSwgdW5zaWduZWQgc2hvcnQgYnV0dG9uLAot
ICAgICAgICAgICAgICAgICAgIEV2ZW50VGFyZ2V0Tm9kZSogcmVsYXRlZFRhcmdldCwgQ2xpcGJv
YXJkKiBjbGlwYm9hcmQgPSAwLCBib29sIGlzU2ltdWxhdGVkID0gZmFsc2UpOworICAgICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxNb3VzZUV2ZW50PiBjcmVhdGUoKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1vdXNlRXZlbnQpOworICAgICAgICB9CisgICAgICAg
IHN0YXRpYyBQYXNzUmVmUHRyPE1vdXNlRXZlbnQ+IGNyZWF0ZShjb25zdCBBdG9taWNTdHJpbmcm
IHR5cGUsIGJvb2wgY2FuQnViYmxlLCBib29sIGNhbmNlbGFibGUsIFBhc3NSZWZQdHI8QWJzdHJh
Y3RWaWV3PiB2aWV3LAorICAgICAgICAgICAgaW50IGRldGFpbCwgaW50IHNjcmVlblgsIGludCBz
Y3JlZW5ZLCBpbnQgcGFnZVgsIGludCBwYWdlWSwKKyAgICAgICAgICAgIGJvb2wgY3RybEtleSwg
Ym9vbCBhbHRLZXksIGJvb2wgc2hpZnRLZXksIGJvb2wgbWV0YUtleSwgdW5zaWduZWQgc2hvcnQg
YnV0dG9uLAorICAgICAgICAgICAgUGFzc1JlZlB0cjxFdmVudFRhcmdldE5vZGU+IHJlbGF0ZWRU
YXJnZXQsIFBhc3NSZWZQdHI8Q2xpcGJvYXJkPiBjbGlwYm9hcmQgPSAwLCBib29sIGlzU2ltdWxh
dGVkID0gZmFsc2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
TW91c2VFdmVudCh0eXBlLCBjYW5CdWJibGUsIGNhbmNlbGFibGUsIHZpZXcsIGRldGFpbCwgc2Ny
ZWVuWCwgc2NyZWVuWSwgcGFnZVgsIHBhZ2VZLAorICAgICAgICAgICAgICAgIGN0cmxLZXksIGFs
dEtleSwgc2hpZnRLZXksIG1ldGFLZXksIGJ1dHRvbiwgcmVsYXRlZFRhcmdldCwgY2xpcGJvYXJk
LCBpc1NpbXVsYXRlZCkpOworICAgICAgICB9CiAgICAgICAgIHZpcnR1YWwgfk1vdXNlRXZlbnQo
KTsKIAotICAgICAgICB2b2lkIGluaXRNb3VzZUV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdHlw
ZSwgYm9vbCBjYW5CdWJibGUsIGJvb2wgY2FuY2VsYWJsZSwgQWJzdHJhY3RWaWV3KiB2aWV3LAor
ICAgICAgICB2b2lkIGluaXRNb3VzZUV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgYm9v
bCBjYW5CdWJibGUsIGJvb2wgY2FuY2VsYWJsZSwgUGFzc1JlZlB0cjxBYnN0cmFjdFZpZXc+LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZXRhaWwsIGludCBzY3JlZW5YLCBpbnQg
c2NyZWVuWSwgaW50IGNsaWVudFgsIGludCBjbGllbnRZLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgY3RybEtleSwgYm9vbCBhbHRLZXksIGJvb2wgc2hpZnRLZXksIGJvb2wgbWV0
YUtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBidXR0b24s
IEV2ZW50VGFyZ2V0Tm9kZSogcmVsYXRlZFRhcmdldCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgc2hvcnQgYnV0dG9uLCBQYXNzUmVmUHRyPEV2ZW50VGFyZ2V0Tm9kZT4g
cmVsYXRlZFRhcmdldCk7CiAKICAgICAgICAgLy8gV2luSUUgdXNlcyAxLDQsMiBmb3IgbGVmdC9t
aWRkbGUvcmlnaHQgYnV0IG5vdCBmb3IgY2xpY2sgKGp1c3QgZm9yIG1vdXNlZG93bi91cCwgbWF5
YmUgb3RoZXJzKSwKICAgICAgICAgLy8gYnV0IHdlIHdpbGwgbWF0Y2ggdGhlIHN0YW5kYXJkIERP
TS4KQEAgLTY1LDYgKzcwLDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVh
bCBpbnQgd2hpY2goKSBjb25zdDsKIAogICAgIHByaXZhdGU6CisgICAgICAgIE1vdXNlRXZlbnQo
KTsKKyAgICAgICAgTW91c2VFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGJvb2wgY2Fu
QnViYmxlLCBib29sIGNhbmNlbGFibGUsIFBhc3NSZWZQdHI8QWJzdHJhY3RWaWV3PiwKKyAgICAg
ICAgICAgICAgICAgICBpbnQgZGV0YWlsLCBpbnQgc2NyZWVuWCwgaW50IHNjcmVlblksIGludCBw
YWdlWCwgaW50IHBhZ2VZLAorICAgICAgICAgICAgICAgICAgIGJvb2wgY3RybEtleSwgYm9vbCBh
bHRLZXksIGJvb2wgc2hpZnRLZXksIGJvb2wgbWV0YUtleSwgdW5zaWduZWQgc2hvcnQgYnV0dG9u
LAorICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8RXZlbnRUYXJnZXROb2RlPiByZWxhdGVk
VGFyZ2V0LCBQYXNzUmVmUHRyPENsaXBib2FyZD4gY2xpcGJvYXJkLCBib29sIGlzU2ltdWxhdGVk
KTsKKwogICAgICAgICB1bnNpZ25lZCBzaG9ydCBtX2J1dHRvbjsKICAgICAgICAgYm9vbCBtX2J1
dHRvbkRvd247CiAgICAgICAgIFJlZlB0cjxFdmVudFRhcmdldE5vZGU+IG1fcmVsYXRlZFRhcmdl
dDsKSW5kZXg6IFdlYkNvcmUvZG9tL01vdXNlUmVsYXRlZEV2ZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2RvbS9Nb3VzZVJlbGF0ZWRFdmVudC5jcHAJKHJldmlzaW9uIDM0NDM4KQorKysg
V2ViQ29yZS9kb20vTW91c2VSZWxhdGVkRXZlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEw
ICsxLDggQEAKLS8qKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERPTSBpbXBsZW1lbnRh
dGlvbiBmb3IgS0RFLgotICoKKy8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkg
KHBta0Bwb3N0LmNvbSkKICAqIENvcHlyaWdodCAoQykgMjAwMSBUb2JpYXMgQW50b24gKGFudG9u
QHN0dWQuZmJpLmZoLWRhcm1zdGFkdC5kZSkKICAqIENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwg
V2VpbmlnIChzYW0ud2VpbmlnQGdtYWlsLmNvbSkKLSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAw
NSwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA1
LCAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwpAQCAtMjksNyArMjcsNiBAQAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVk
ZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKLSNpbmNsdWRlICJOb2RlLmgiCiAj
aW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKIApAQCAt
NzYsMTQgKzczLDE0IEBAIHN0YXRpYyBpbnQgY29udGVudHNZKEFic3RyYWN0VmlldyogYWJzdHIK
ICAgICByZXR1cm4gZnJhbWVWaWV3LT5jb250ZW50c1koKTsKIH0KIAotTW91c2VSZWxhdGVkRXZl
bnQ6Ok1vdXNlUmVsYXRlZEV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBib29s
IGNhbkJ1YmJsZSwgYm9vbCBjYW5jZWxhYmxlLCBBYnN0cmFjdFZpZXcqIHZpZXcsCitNb3VzZVJl
bGF0ZWRFdmVudDo6TW91c2VSZWxhdGVkRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5
cGUsIGJvb2wgY2FuQnViYmxlLCBib29sIGNhbmNlbGFibGUsIFBhc3NSZWZQdHI8QWJzdHJhY3RW
aWV3PiB2aWV3QXJnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBk
ZXRhaWwsIGludCBzY3JlZW5YLCBpbnQgc2NyZWVuWSwgaW50IHBhZ2VYLCBpbnQgcGFnZVksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjdHJsS2V5LCBib29sIGFs
dEtleSwgYm9vbCBzaGlmdEtleSwgYm9vbCBtZXRhS2V5LCBib29sIGlzU2ltdWxhdGVkKQotICAg
IDogVUlFdmVudFdpdGhLZXlTdGF0ZShldmVudFR5cGUsIGNhbkJ1YmJsZSwgY2FuY2VsYWJsZSwg
dmlldywgZGV0YWlsLCBjdHJsS2V5LCBhbHRLZXksIHNoaWZ0S2V5LCBtZXRhS2V5KQorICAgIDog
VUlFdmVudFdpdGhLZXlTdGF0ZShldmVudFR5cGUsIGNhbkJ1YmJsZSwgY2FuY2VsYWJsZSwgdmll
d0FyZywgZGV0YWlsLCBjdHJsS2V5LCBhbHRLZXksIHNoaWZ0S2V5LCBtZXRhS2V5KQogICAgICwg
bV9zY3JlZW5YKHNjcmVlblgpCiAgICAgLCBtX3NjcmVlblkoc2NyZWVuWSkKLSAgICAsIG1fY2xp
ZW50WChwYWdlWCAtIGNvbnRlbnRzWCh2aWV3KSkKLSAgICAsIG1fY2xpZW50WShwYWdlWSAtIGNv
bnRlbnRzWSh2aWV3KSkKKyAgICAsIG1fY2xpZW50WChwYWdlWCAtIGNvbnRlbnRzWCh2aWV3KCkp
KQorICAgICwgbV9jbGllbnRZKHBhZ2VZIC0gY29udGVudHNZKHZpZXcoKSkpCiAgICAgLCBtX3Bh
Z2VYKHBhZ2VYKQogICAgICwgbV9wYWdlWShwYWdlWSkKICAgICAsIG1faXNTaW11bGF0ZWQoaXNT
aW11bGF0ZWQpCkluZGV4OiBXZWJDb3JlL2RvbS9Nb3VzZVJlbGF0ZWRFdmVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvZG9tL01vdXNlUmVsYXRlZEV2ZW50LmgJKHJldmlzaW9uIDM0NDM4KQor
KysgV2ViQ29yZS9kb20vTW91c2VSZWxhdGVkRXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzMs
MTEgKzMzLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIC8vIEludGVybmFsIG9ubHk6IEhl
bHBlciBjbGFzcyBmb3Igd2hhdCdzIGNvbW1vbiBiZXR3ZWVuIG1vdXNlIGFuZCB3aGVlbCBldmVu
dHMuCiAgICAgY2xhc3MgTW91c2VSZWxhdGVkRXZlbnQgOiBwdWJsaWMgVUlFdmVudFdpdGhLZXlT
dGF0ZSB7CiAgICAgcHVibGljOgotICAgICAgICBNb3VzZVJlbGF0ZWRFdmVudCgpOwotICAgICAg
ICBNb3VzZVJlbGF0ZWRFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGJvb2wgY2FuQnVi
YmxlLCBib29sIGNhbmNlbGFibGUsIEFic3RyYWN0VmlldyogdmlldywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IGRldGFpbCwgaW50IHNjcmVlblgsIGludCBzY3JlZW5ZLCBpbnQgcGFn
ZVgsIGludCBwYWdlWSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjdHJsS2V5LCBi
b29sIGFsdEtleSwgYm9vbCBzaGlmdEtleSwgYm9vbCBtZXRhS2V5LCBib29sIGlzU2ltdWxhdGVk
ID0gZmFsc2UpOwotCiAgICAgICAgIGludCBzY3JlZW5YKCkgY29uc3QgeyByZXR1cm4gbV9zY3Jl
ZW5YOyB9CiAgICAgICAgIGludCBzY3JlZW5ZKCkgY29uc3QgeyByZXR1cm4gbV9zY3JlZW5ZOyB9
CiAgICAgICAgIGludCBjbGllbnRYKCkgY29uc3QgeyByZXR1cm4gbV9jbGllbnRYOyB9CkBAIC01
Myw2ICs0OCwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGludCB5KCkgY29uc3Q7
CiAgICAgCiAgICAgcHJvdGVjdGVkOgorICAgICAgICBNb3VzZVJlbGF0ZWRFdmVudCgpOworICAg
ICAgICBNb3VzZVJlbGF0ZWRFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGJvb2wgY2Fu
QnViYmxlLCBib29sIGNhbmNlbGFibGUsIFBhc3NSZWZQdHI8QWJzdHJhY3RWaWV3PiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IGRldGFpbCwgaW50IHNjcmVlblgsIGludCBzY3JlZW5Z
LCBpbnQgcGFnZVgsIGludCBwYWdlWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBj
dHJsS2V5LCBib29sIGFsdEtleSwgYm9vbCBzaGlmdEtleSwgYm9vbCBtZXRhS2V5LCBib29sIGlz
U2ltdWxhdGVkID0gZmFsc2UpOworCiAgICAgICAgIHZvaWQgaW5pdENvb3JkaW5hdGVzKCk7CiAg
ICAgICAgIHZvaWQgaW5pdENvb3JkaW5hdGVzKGludCBjbGllbnRYLCBpbnQgY2xpZW50WSk7CiAg
ICAgICAgIHZpcnR1YWwgdm9pZCByZWNlaXZlZFRhcmdldCgpOwpJbmRleDogV2ViQ29yZS9kb20v
TXV0YXRpb25FdmVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vTXV0YXRpb25FdmVu
dC5jcHAJKHJldmlzaW9uIDM0NDM4KQorKysgV2ViQ29yZS9kb20vTXV0YXRpb25FdmVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMTAgKzEsOCBAQAotLyoqCi0gKiBUaGlzIGZpbGUgaXMgcGFy
dCBvZiB0aGUgRE9NIGltcGxlbWVudGF0aW9uIGZvciBLREUuCi0gKgorLyoKICAqIENvcHlyaWdo
dCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQogICogQ29weXJpZ2h0IChDKSAy
MDAxIFRvYmlhcyBBbnRvbiAoYW50b25Ac3R1ZC5mYmkuZmgtZGFybXN0YWR0LmRlKQogICogQ29w
eXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgKHNhbS53ZWluaWdAZ21haWwuY29tKQotICog
Q29weXJpZ2h0IChDKSAyMDAzLCAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDMsIDIwMDUsIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zMiw3ICszMCw3IEBAIE11dGF0aW9u
RXZlbnQ6Ok11dGF0aW9uRXZlbnQoKQogewogfQogCi1NdXRhdGlvbkV2ZW50OjpNdXRhdGlvbkV2
ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgYm9vbCBjYW5CdWJibGUsIGJvb2wgY2FuY2Vs
YWJsZSwgTm9kZSogcmVsYXRlZE5vZGUsCitNdXRhdGlvbkV2ZW50OjpNdXRhdGlvbkV2ZW50KGNv
bnN0IEF0b21pY1N0cmluZyYgdHlwZSwgYm9vbCBjYW5CdWJibGUsIGJvb2wgY2FuY2VsYWJsZSwg
UGFzc1JlZlB0cjxOb2RlPiByZWxhdGVkTm9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgU3RyaW5nJiBwcmV2VmFsdWUsIGNvbnN0IFN0cmluZyYgbmV3VmFsdWUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgYXR0ck5hbWUsIHVuc2lnbmVk
IHNob3J0IGF0dHJDaGFuZ2UpCiAgICAgOiBFdmVudCh0eXBlLCBjYW5CdWJibGUsIGNhbmNlbGFi
bGUpCkBAIC00NCw3ICs0Miw3IEBAIE11dGF0aW9uRXZlbnQ6Ok11dGF0aW9uRXZlbnQoY29uc3Qg
QXRvbWkKIHsKIH0KIAotdm9pZCBNdXRhdGlvbkV2ZW50Ojppbml0TXV0YXRpb25FdmVudChjb25z
dCBBdG9taWNTdHJpbmcmIHR5cGUsIGJvb2wgY2FuQnViYmxlLCBib29sIGNhbmNlbGFibGUsIE5v
ZGUqIHJlbGF0ZWROb2RlLAordm9pZCBNdXRhdGlvbkV2ZW50Ojppbml0TXV0YXRpb25FdmVudChj
b25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGJvb2wgY2FuQnViYmxlLCBib29sIGNhbmNlbGFibGUs
IFBhc3NSZWZQdHI8Tm9kZT4gcmVsYXRlZE5vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgcHJldlZhbHVlLCBjb25zdCBTdHJpbmcmIG5ld1Zh
bHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcm
IGF0dHJOYW1lLCB1bnNpZ25lZCBzaG9ydCBhdHRyQ2hhbmdlKQogewpJbmRleDogV2ViQ29yZS9k
b20vTXV0YXRpb25FdmVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL011dGF0aW9uRXZl
bnQuaAkocmV2aXNpb24gMzQ0MzgpCisrKyBXZWJDb3JlL2RvbS9NdXRhdGlvbkV2ZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsMTAgKzEsOCBAQAogLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9m
IHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9yIEtERS4KLSAqCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKICAqIENvcHlyaWdodCAoQykgMjAwMSBUb2Jp
YXMgQW50b24gKGFudG9uQHN0dWQuZmJpLmZoLWRhcm1zdGFkdC5kZSkKICAqIENvcHlyaWdodCAo
QykgMjAwNiBTYW11ZWwgV2VpbmlnIChzYW0ud2VpbmlnQGdtYWlsLmNvbSkKLSAqIENvcHlyaWdo
dCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29w
eXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzksMTIgKzM3LDE3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgIFJFTU9WQUwgICAgICAgICA9IDMKICAgICAg
ICAgfTsKIAotICAgICAgICBNdXRhdGlvbkV2ZW50KCk7Ci0gICAgICAgIE11dGF0aW9uRXZlbnQo
Y29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBib29sIGNhbkJ1YmJsZSwgYm9vbCBjYW5jZWxhYmxl
LCBOb2RlKiByZWxhdGVkTm9kZSwKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcm
IHByZXZWYWx1ZSwgY29uc3QgU3RyaW5nJiBuZXdWYWx1ZSwKLSAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBTdHJpbmcmIGF0dHJOYW1lLCB1bnNpZ25lZCBzaG9ydCBhdHRyQ2hhbmdlKTsKKyAg
ICAgICAgc3RhdGljIFBhc3NSZWZQdHI8TXV0YXRpb25FdmVudD4gY3JlYXRlKCkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNdXRhdGlvbkV2ZW50KTsKKyAgICAg
ICAgfQorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxNdXRhdGlvbkV2ZW50PiBjcmVhdGUoY29u
c3QgQXRvbWljU3RyaW5nJiB0eXBlLCBib29sIGNhbkJ1YmJsZSwgYm9vbCBjYW5jZWxhYmxlLCBQ
YXNzUmVmUHRyPE5vZGU+IHJlbGF0ZWROb2RlLAorICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBw
cmV2VmFsdWUsIGNvbnN0IFN0cmluZyYgbmV3VmFsdWUsIGNvbnN0IFN0cmluZyYgYXR0ck5hbWUs
IHVuc2lnbmVkIHNob3J0IGF0dHJDaGFuZ2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgTXV0YXRpb25FdmVudCh0eXBlLCBjYW5CdWJibGUsIGNhbmNlbGFibGUs
IHJlbGF0ZWROb2RlLCBwcmV2VmFsdWUsIG5ld1ZhbHVlLCBhdHRyTmFtZSwgYXR0ckNoYW5nZSkp
OworICAgICAgICB9CiAKLSAgICAgICAgdm9pZCBpbml0TXV0YXRpb25FdmVudChjb25zdCBBdG9t
aWNTdHJpbmcmIHR5cGUsIGJvb2wgY2FuQnViYmxlLCBib29sIGNhbmNlbGFibGUsIE5vZGUqIHJl
bGF0ZWROb2RlLAorICAgICAgICB2b2lkIGluaXRNdXRhdGlvbkV2ZW50KGNvbnN0IEF0b21pY1N0
cmluZyYgdHlwZSwgYm9vbCBjYW5CdWJibGUsIGJvb2wgY2FuY2VsYWJsZSwgUGFzc1JlZlB0cjxO
b2RlPiByZWxhdGVkTm9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBT
dHJpbmcmIHByZXZWYWx1ZSwgY29uc3QgU3RyaW5nJiBuZXdWYWx1ZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIGF0dHJOYW1lLCB1bnNpZ25lZCBzaG9ydCBh
dHRyQ2hhbmdlKTsKIApAQCAtNTcsNiArNjAsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICB2aXJ0dWFsIGJvb2wgaXNNdXRhdGlvbkV2ZW50KCkgY29uc3Q7CiAKICAgICBwcml2YXRl
OgorICAgICAgICBNdXRhdGlvbkV2ZW50KCk7CisgICAgICAgIE11dGF0aW9uRXZlbnQoY29uc3Qg
QXRvbWljU3RyaW5nJiB0eXBlLCBib29sIGNhbkJ1YmJsZSwgYm9vbCBjYW5jZWxhYmxlLCBQYXNz
UmVmUHRyPE5vZGU+IHJlbGF0ZWROb2RlLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0
cmluZyYgcHJldlZhbHVlLCBjb25zdCBTdHJpbmcmIG5ld1ZhbHVlLAorICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFN0cmluZyYgYXR0ck5hbWUsIHVuc2lnbmVkIHNob3J0IGF0dHJDaGFuZ2Up
OworCiAgICAgICAgIFJlZlB0cjxOb2RlPiBtX3JlbGF0ZWROb2RlOwogICAgICAgICBTdHJpbmcg
bV9wcmV2VmFsdWU7CiAgICAgICAgIFN0cmluZyBtX25ld1ZhbHVlOwpJbmRleDogV2ViQ29yZS9k
b20vT3ZlcmZsb3dFdmVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL092ZXJmbG93RXZl
bnQuaAkocmV2aXNpb24gMzQ0MzgpCisrKyBXZWJDb3JlL2RvbS9PdmVyZmxvd0V2ZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAy
MDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
NiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM4LDggKzM4LDE0IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgICAgIEJPVEggICAgICAgPSAyCiAgICAgICAgIH07CiAKLSAgICAgICAgT3Zl
cmZsb3dFdmVudCgpOwotICAgICAgICBPdmVyZmxvd0V2ZW50KGJvb2wgaG9yaXpvbnRhbE92ZXJm
bG93Q2hhbmdlZCwgYm9vbCBob3Jpem9udGFsT3ZlcmZsb3csIGJvb2wgdmVydGljYWxPdmVyZmxv
d0NoYW5nZWQsIGJvb2wgdmVydGljYWxPdmVyZmxvdyk7CisgICAgICAgIHN0YXRpYyBQYXNzUmVm
UHRyPE92ZXJmbG93RXZlbnQ+IGNyZWF0ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgT3ZlcmZsb3dFdmVudCk7CisgICAgICAgIH0KKyAgICAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8T3ZlcmZsb3dFdmVudD4gY3JlYXRlKGJvb2wgaG9yaXpvbnRhbE92ZXJmbG93
Q2hhbmdlZCwgYm9vbCBob3Jpem9udGFsT3ZlcmZsb3csIGJvb2wgdmVydGljYWxPdmVyZmxvd0No
YW5nZWQsIGJvb2wgdmVydGljYWxPdmVyZmxvdykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBPdmVyZmxvd0V2ZW50KGhvcml6b250YWxPdmVyZmxvd0NoYW5nZWQs
IGhvcml6b250YWxPdmVyZmxvdywgdmVydGljYWxPdmVyZmxvd0NoYW5nZWQsIHZlcnRpY2FsT3Zl
cmZsb3cpKTsKKyAgICAgICAgfQogCiAgICAgICAgIHZvaWQgaW5pdE92ZXJmbG93RXZlbnQodW5z
aWduZWQgc2hvcnQgb3JpZW50LCBib29sIGhvcml6b250YWxPdmVyZmxvdywgYm9vbCB2ZXJ0aWNh
bE92ZXJmbG93KTsKIApAQCAtNTAsNiArNTYsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgIHZpcnR1YWwgYm9vbCBpc092ZXJmbG93RXZlbnQoKSBjb25zdDsKICAgICAgICAgCiAgICAg
cHJpdmF0ZToKKyAgICAgICAgT3ZlcmZsb3dFdmVudCgpOworICAgICAgICBPdmVyZmxvd0V2ZW50
KGJvb2wgaG9yaXpvbnRhbE92ZXJmbG93Q2hhbmdlZCwgYm9vbCBob3Jpem9udGFsT3ZlcmZsb3cs
IGJvb2wgdmVydGljYWxPdmVyZmxvd0NoYW5nZWQsIGJvb2wgdmVydGljYWxPdmVyZmxvdyk7CisK
ICAgICAgICAgdW5zaWduZWQgc2hvcnQgbV9vcmllbnQ7CiAgICAgICAgIGJvb2wgbV9ob3Jpem9u
dGFsT3ZlcmZsb3c7CiAgICAgICAgIGJvb2wgbV92ZXJ0aWNhbE92ZXJmbG93OwpJbmRleDogV2Vi
Q29yZS9kb20vUHJvZ3Jlc3NFdmVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1Byb2dy
ZXNzRXZlbnQuaAkocmV2aXNpb24gMzQ0MzgpCisrKyBXZWJDb3JlL2RvbS9Qcm9ncmVzc0V2ZW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDggKzMyLDE0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAKICAgICBjbGFzcyBQcm9ncmVzc0V2ZW50IDogcHVibGljIEV2ZW50IHsKICAgICBwdWJs
aWM6Ci0gICAgICAgIFByb2dyZXNzRXZlbnQoKTsKLSAgICAgICAgUHJvZ3Jlc3NFdmVudChjb25z
dCBBdG9taWNTdHJpbmcmIHR5cGUsIGJvb2wgbGVuZ3RoQ29tcHV0YWJsZSwgdW5zaWduZWQgbG9h
ZGVkLCB1bnNpZ25lZCB0b3RhbCk7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFByb2dyZXNz
RXZlbnQ+IGNyZWF0ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgUHJvZ3Jlc3NFdmVudCk7CisgICAgICAgIH0KKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8
UHJvZ3Jlc3NFdmVudD4gY3JlYXRlKGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgYm9vbCBsZW5n
dGhDb21wdXRhYmxlLCB1bnNpZ25lZCBsb2FkZWQsIHVuc2lnbmVkIHRvdGFsKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFByb2dyZXNzRXZlbnQodHlwZSwgbGVu
Z3RoQ29tcHV0YWJsZSwgbG9hZGVkLCB0b3RhbCkpOworICAgICAgICB9CiAKICAgICAgICAgdm9p
ZCBpbml0UHJvZ3Jlc3NFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGVBcmcsIAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuQnViYmxlQXJnLApAQCAtNDksNiArNTUs
MTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNQcm9ncmVz
c0V2ZW50KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgICAgICAKICAgICBwcm90ZWN0ZWQ6
CisgICAgICAgIFByb2dyZXNzRXZlbnQoKTsKKyAgICAgICAgUHJvZ3Jlc3NFdmVudChjb25zdCBB
dG9taWNTdHJpbmcmIHR5cGUsIGJvb2wgbGVuZ3RoQ29tcHV0YWJsZSwgdW5zaWduZWQgbG9hZGVk
LCB1bnNpZ25lZCB0b3RhbCk7CisKKyAgICBwcml2YXRlOgogICAgICAgICBib29sIG1fbGVuZ3Ro
Q29tcHV0YWJsZTsKICAgICAgICAgdW5zaWduZWQgbV9sb2FkZWQ7CiAgICAgICAgIHVuc2lnbmVk
IG1fdG90YWw7CkluZGV4OiBXZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmNwcAkocmV2aXNpb24gMzQ0MzgpCisrKyBX
ZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzEsNiArNzEs
MTMgQEAgQ1NTTWFwcGVkQXR0cmlidXRlRGVjbGFyYXRpb24qIFN0eWxlZEVsZQogICAgIHJldHVy
biBtYXBwZWRBdHRyaWJ1dGVEZWNscy0+Z2V0KE1hcHBlZEF0dHJpYnV0ZUtleShlbnRyeVR5cGUs
IGF0dHItPm5hbWUoKS5sb2NhbE5hbWUoKS5pbXBsKCksIGF0dHItPnZhbHVlKCkuaW1wbCgpKSk7
CiB9CiAKK0NTU01hcHBlZEF0dHJpYnV0ZURlY2xhcmF0aW9uKiBTdHlsZWRFbGVtZW50OjpnZXRN
YXBwZWRBdHRyaWJ1dGVEZWNsKE1hcHBlZEF0dHJpYnV0ZUVudHJ5IHR5cGUsIGNvbnN0IFF1YWxp
ZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpCit7CisgICAgaWYgKCFt
YXBwZWRBdHRyaWJ1dGVEZWNscykKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG1hcHBl
ZEF0dHJpYnV0ZURlY2xzLT5nZXQoTWFwcGVkQXR0cmlidXRlS2V5KHR5cGUsIG5hbWUubG9jYWxO
YW1lKCkuaW1wbCgpLCB2YWx1ZS5pbXBsKCkpKTsKK30KKwogdm9pZCBTdHlsZWRFbGVtZW50Ojpz
ZXRNYXBwZWRBdHRyaWJ1dGVEZWNsKE1hcHBlZEF0dHJpYnV0ZUVudHJ5IGVudHJ5VHlwZSwgQXR0
cmlidXRlKiBhdHRyLCBDU1NNYXBwZWRBdHRyaWJ1dGVEZWNsYXJhdGlvbiogZGVjbCkKIHsKICAg
ICBpZiAoIW1hcHBlZEF0dHJpYnV0ZURlY2xzKQpAQCAtNzgsOCArODUsMTQgQEAgdm9pZCBTdHls
ZWRFbGVtZW50OjpzZXRNYXBwZWRBdHRyaWJ1dGVEZQogICAgIG1hcHBlZEF0dHJpYnV0ZURlY2xz
LT5zZXQoTWFwcGVkQXR0cmlidXRlS2V5KGVudHJ5VHlwZSwgYXR0ci0+bmFtZSgpLmxvY2FsTmFt
ZSgpLmltcGwoKSwgYXR0ci0+dmFsdWUoKS5pbXBsKCkpLCBkZWNsKTsKIH0KIAotdm9pZCBTdHls
ZWRFbGVtZW50OjpyZW1vdmVNYXBwZWRBdHRyaWJ1dGVEZWNsKE1hcHBlZEF0dHJpYnV0ZUVudHJ5
IGVudHJ5VHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYg
YXR0clZhbHVlKQordm9pZCBTdHlsZWRFbGVtZW50OjpzZXRNYXBwZWRBdHRyaWJ1dGVEZWNsKE1h
cHBlZEF0dHJpYnV0ZUVudHJ5IGVudHJ5VHlwZSwgY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwg
Y29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSwgQ1NTTWFwcGVkQXR0cmlidXRlRGVjbGFyYXRpb24q
IGRlY2wpCit7CisgICAgaWYgKCFtYXBwZWRBdHRyaWJ1dGVEZWNscykKKyAgICAgICAgbWFwcGVk
QXR0cmlidXRlRGVjbHMgPSBuZXcgTWFwcGVkQXR0cmlidXRlRGVjbHM7CisgICAgbWFwcGVkQXR0
cmlidXRlRGVjbHMtPnNldChNYXBwZWRBdHRyaWJ1dGVLZXkoZW50cnlUeXBlLCBuYW1lLmxvY2Fs
TmFtZSgpLmltcGwoKSwgdmFsdWUuaW1wbCgpKSwgZGVjbCk7Cit9CisKK3ZvaWQgU3R5bGVkRWxl
bWVudDo6cmVtb3ZlTWFwcGVkQXR0cmlidXRlRGVjbChNYXBwZWRBdHRyaWJ1dGVFbnRyeSBlbnRy
eVR5cGUsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lLCBjb25zdCBBdG9taWNTdHJpbmcm
IGF0dHJWYWx1ZSkKIHsKICAgICBpZiAoIW1hcHBlZEF0dHJpYnV0ZURlY2xzKQogICAgICAgICBy
ZXR1cm47CkBAIC0xMTEsOSArMTI0LDkgQEAgU3R5bGVkRWxlbWVudDo6flN0eWxlZEVsZW1lbnQo
KQogICAgIGRlc3Ryb3lJbmxpbmVTdHlsZURlY2woKTsKIH0KIAotQXR0cmlidXRlKiBTdHlsZWRF
bGVtZW50OjpjcmVhdGVBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3Qg
QXRvbWljU3RyaW5nJiB2YWx1ZSkKK1Bhc3NSZWZQdHI8QXR0cmlidXRlPiBTdHlsZWRFbGVtZW50
OjpjcmVhdGVBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbWlj
U3RyaW5nJiB2YWx1ZSkKIHsKLSAgICByZXR1cm4gbmV3IE1hcHBlZEF0dHJpYnV0ZShuYW1lLCB2
YWx1ZSk7CisgICAgcmV0dXJuIE1hcHBlZEF0dHJpYnV0ZTo6Y3JlYXRlKG5hbWUsIHZhbHVlKTsK
IH0KIAogdm9pZCBTdHlsZWRFbGVtZW50OjpjcmVhdGVJbmxpbmVTdHlsZURlY2woKQpJbmRleDog
V2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1N0
eWxlZEVsZW1lbnQuaAkocmV2aXNpb24gMzQ0MzgpCisrKyBXZWJDb3JlL2RvbS9TdHlsZWRFbGVt
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDkgKzUzLDEyIEBAIHB1YmxpYzoKICAgICB2b2lk
IGFkZENTU0NvbG9yKE1hcHBlZEF0dHJpYnV0ZSogYXR0ciwgaW50IGlkLCBjb25zdCBTdHJpbmcg
JmMpOwogICAgIHZvaWQgY3JlYXRlTWFwcGVkRGVjbChNYXBwZWRBdHRyaWJ1dGUqIGF0dHIpOwog
ICAgIAorICAgIHN0YXRpYyBDU1NNYXBwZWRBdHRyaWJ1dGVEZWNsYXJhdGlvbiogZ2V0TWFwcGVk
QXR0cmlidXRlRGVjbChNYXBwZWRBdHRyaWJ1dGVFbnRyeSB0eXBlLCBjb25zdCBRdWFsaWZpZWRO
YW1lJiBuYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKTsKKyAgICBzdGF0aWMgdm9pZCBz
ZXRNYXBwZWRBdHRyaWJ1dGVEZWNsKE1hcHBlZEF0dHJpYnV0ZUVudHJ5LCBjb25zdCBRdWFsaWZp
ZWROYW1lJiBuYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlLCBDU1NNYXBwZWRBdHRyaWJ1
dGVEZWNsYXJhdGlvbiopOworICAgIHN0YXRpYyB2b2lkIHJlbW92ZU1hcHBlZEF0dHJpYnV0ZURl
Y2woTWFwcGVkQXR0cmlidXRlRW50cnkgdHlwZSwgY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwg
Y29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSk7CisKICAgICBzdGF0aWMgQ1NTTWFwcGVkQXR0cmli
dXRlRGVjbGFyYXRpb24qIGdldE1hcHBlZEF0dHJpYnV0ZURlY2woTWFwcGVkQXR0cmlidXRlRW50
cnksIEF0dHJpYnV0ZSopOwogICAgIHN0YXRpYyB2b2lkIHNldE1hcHBlZEF0dHJpYnV0ZURlY2wo
TWFwcGVkQXR0cmlidXRlRW50cnksIEF0dHJpYnV0ZSosIENTU01hcHBlZEF0dHJpYnV0ZURlY2xh
cmF0aW9uKik7Ci0gICAgc3RhdGljIHZvaWQgcmVtb3ZlTWFwcGVkQXR0cmlidXRlRGVjbChNYXBw
ZWRBdHRyaWJ1dGVFbnRyeSwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUsIGNvbnN0IEF0
b21pY1N0cmluZyYgYXR0clZhbHVlKTsKICAgICAKICAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbiogaW5saW5lU3R5bGVEZWNsKCkgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVTdHlsZURlY2wu
Z2V0KCk7IH0KICAgICB2aXJ0dWFsIGJvb2wgY2FuSGF2ZUFkZGl0aW9uYWxBdHRyaWJ1dGVTdHls
ZURlY2xzKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTczLDcgKzc2LDcgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUq
KTsKICAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRy
TmFtZSwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3Q7CiAgICAgdmlydHVhbCB2
b2lkIGNyZWF0ZUF0dHJpYnV0ZU1hcCgpIGNvbnN0OwotICAgIHZpcnR1YWwgQXR0cmlidXRlKiBj
cmVhdGVBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbWljU3Ry
aW5nJiB2YWx1ZSk7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEF0dHJpYnV0ZT4gY3JlYXRlQXR0
cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKTsK
IAogICAgIHZpcnR1YWwgdm9pZCBjb3B5Tm9uQXR0cmlidXRlUHJvcGVydGllcyhjb25zdCBFbGVt
ZW50Kik7CiAKSW5kZXg6IFdlYkNvcmUvZG9tL1RleHRFdmVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9kb20vVGV4dEV2ZW50LmNwcAkocmV2aXNpb24gMzQ0MzgpCisrKyBXZWJDb3JlL2Rv
bS9UZXh0RXZlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBAIFRleHRFdmVu
dDo6VGV4dEV2ZW50KCkKIHsKIH0KIAotVGV4dEV2ZW50OjpUZXh0RXZlbnQoQWJzdHJhY3RWaWV3
KiB2aWV3LCBjb25zdCBTdHJpbmcmIGRhdGEpCitUZXh0RXZlbnQ6OlRleHRFdmVudChQYXNzUmVm
UHRyPEFic3RyYWN0Vmlldz4gdmlldywgY29uc3QgU3RyaW5nJiBkYXRhKQogICAgIDogVUlFdmVu
dCh0ZXh0SW5wdXRFdmVudCwgdHJ1ZSwgdHJ1ZSwgdmlldywgMCkKICAgICAsIG1fZGF0YShkYXRh
KQogICAgICwgbV9pc0xpbmVCcmVhayhmYWxzZSkKQEAgLTUxLDcgKzUxLDcgQEAgVGV4dEV2ZW50
Ojp+VGV4dEV2ZW50KCkKIHsKIH0KIAotdm9pZCBUZXh0RXZlbnQ6OmluaXRUZXh0RXZlbnQoY29u
c3QgQXRvbWljU3RyaW5nJiB0eXBlLCBib29sIGNhbkJ1YmJsZSwgYm9vbCBjYW5jZWxhYmxlLCBB
YnN0cmFjdFZpZXcqIHZpZXcsIGNvbnN0IFN0cmluZyYgZGF0YSkKK3ZvaWQgVGV4dEV2ZW50Ojpp
bml0VGV4dEV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgYm9vbCBjYW5CdWJibGUsIGJv
b2wgY2FuY2VsYWJsZSwgUGFzc1JlZlB0cjxBYnN0cmFjdFZpZXc+IHZpZXcsIGNvbnN0IFN0cmlu
ZyYgZGF0YSkKIHsKICAgICBpZiAoZGlzcGF0Y2hlZCgpKQogICAgICAgICByZXR1cm47CkluZGV4
OiBXZWJDb3JlL2RvbS9UZXh0RXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9UZXh0
RXZlbnQuaAkocmV2aXNpb24gMzQ0MzgpCisrKyBXZWJDb3JlL2RvbS9UZXh0RXZlbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzMsMTEgKzMzLDE3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNs
YXNzIFRleHRFdmVudCA6IHB1YmxpYyBVSUV2ZW50IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIFRl
eHRFdmVudCgpOwotICAgICAgICBUZXh0RXZlbnQoQWJzdHJhY3RWaWV3KiwgY29uc3QgU3RyaW5n
JiBkYXRhKTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dEV2ZW50PiBjcmVhdGUoKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHRFdmVudCk7Cisg
ICAgICAgIH0KKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dEV2ZW50PiBjcmVhdGUoUGFz
c1JlZlB0cjxBYnN0cmFjdFZpZXc+IHZpZXcsIGNvbnN0IFN0cmluZyYgZGF0YSkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0RXZlbnQodmlldywgZGF0YSkp
OworICAgICAgICB9CiAgICAgICAgIHZpcnR1YWwgflRleHRFdmVudCgpOwogICAgIAotICAgICAg
ICB2b2lkIGluaXRUZXh0RXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBib29sIGNhbkJ1
YmJsZSwgYm9vbCBjYW5jZWxhYmxlLCBBYnN0cmFjdFZpZXcqLCBjb25zdCBTdHJpbmcmIGRhdGEp
OworICAgICAgICB2b2lkIGluaXRUZXh0RXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBi
b29sIGNhbkJ1YmJsZSwgYm9vbCBjYW5jZWxhYmxlLCBQYXNzUmVmUHRyPEFic3RyYWN0Vmlldz4s
IGNvbnN0IFN0cmluZyYgZGF0YSk7CiAgICAgCiAgICAgICAgIFN0cmluZyBkYXRhKCkgY29uc3Qg
eyByZXR1cm4gbV9kYXRhOyB9CiAKQEAgLTUyLDYgKzU4LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICB2b2lkIHNldElzQmFja1RhYihib29sIGlzQmFja1RhYikgeyBtX2lzQmFja1Rh
YiA9IGlzQmFja1RhYjsgfQogCiAgICAgcHJpdmF0ZToKKyAgICAgICAgVGV4dEV2ZW50KCk7Cisg
ICAgICAgIFRleHRFdmVudChQYXNzUmVmUHRyPEFic3RyYWN0Vmlldz4sIGNvbnN0IFN0cmluZyYg
ZGF0YSk7CisKICAgICAgICAgU3RyaW5nIG1fZGF0YTsKICAgICAgICAgYm9vbCBtX2lzTGluZUJy
ZWFrOwogICAgICAgICBib29sIG1faXNCYWNrVGFiOwpJbmRleDogV2ViQ29yZS9kb20vVUlFdmVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vVUlFdmVudC5jcHAJKHJldmlzaW9uIDM0
NDM4KQorKysgV2ViQ29yZS9kb20vVUlFdmVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTAg
KzEsOCBAQAotLyoqCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRE9NIGltcGxlbWVudGF0
aW9uIGZvciBLREUuCi0gKgorLyoKICAqIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAo
cG1rQHBvc3QuY29tKQogICogQ29weXJpZ2h0IChDKSAyMDAxIFRvYmlhcyBBbnRvbiAoYW50b25A
c3R1ZC5mYmkuZmgtZGFybXN0YWR0LmRlKQogICogQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBX
ZWluaWcgKHNhbS53ZWluaWdAZ21haWwuY29tKQotICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA1
LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDUs
IDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
ICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCkBAIC0zNCw3ICszMiw3IEBAIFVJRXZlbnQ6OlVJRXZlbnQoKQogewogfQogCi1VSUV2
ZW50OjpVSUV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBib29sIGNhbkJ1YmJs
ZUFyZywgYm9vbCBjYW5jZWxhYmxlQXJnLCBBYnN0cmFjdFZpZXcqIHZpZXdBcmcsIGludCBkZXRh
aWxBcmcpCitVSUV2ZW50OjpVSUV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBi
b29sIGNhbkJ1YmJsZUFyZywgYm9vbCBjYW5jZWxhYmxlQXJnLCBQYXNzUmVmUHRyPEFic3RyYWN0
Vmlldz4gdmlld0FyZywgaW50IGRldGFpbEFyZykKICAgICA6IEV2ZW50KGV2ZW50VHlwZSwgY2Fu
QnViYmxlQXJnLCBjYW5jZWxhYmxlQXJnKQogICAgICwgbV92aWV3KHZpZXdBcmcpCiAgICAgLCBt
X2RldGFpbChkZXRhaWxBcmcpCkBAIC00NSw3ICs0Myw3IEBAIFVJRXZlbnQ6On5VSUV2ZW50KCkK
IHsKIH0KIAotdm9pZCBVSUV2ZW50Ojppbml0VUlFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5
cGVBcmcsIGJvb2wgY2FuQnViYmxlQXJnLCBib29sIGNhbmNlbGFibGVBcmcsIEFic3RyYWN0Vmll
dyogdmlld0FyZywgaW50IGRldGFpbEFyZykKK3ZvaWQgVUlFdmVudDo6aW5pdFVJRXZlbnQoY29u
c3QgQXRvbWljU3RyaW5nJiB0eXBlQXJnLCBib29sIGNhbkJ1YmJsZUFyZywgYm9vbCBjYW5jZWxh
YmxlQXJnLCBQYXNzUmVmUHRyPEFic3RyYWN0Vmlldz4gdmlld0FyZywgaW50IGRldGFpbEFyZykK
IHsKICAgICBpZiAoZGlzcGF0Y2hlZCgpKQogICAgICAgICByZXR1cm47CkluZGV4OiBXZWJDb3Jl
L2RvbS9VSUV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vVUlFdmVudC5oCShyZXZp
c2lvbiAzNDQzOCkKKysrIFdlYkNvcmUvZG9tL1VJRXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
MSwxMCArMSw4IEBACiAvKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERPTSBpbXBsZW1l
bnRhdGlvbiBmb3IgS0RFLgotICoKICAqIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAo
cG1rQHBvc3QuY29tKQogICogQ29weXJpZ2h0IChDKSAyMDAxIFRvYmlhcyBBbnRvbiAoYW50b25A
c3R1ZC5mYmkuZmgtZGFybXN0YWR0LmRlKQogICogQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBX
ZWluaWcgKHNhbS53ZWluaWdAZ21haWwuY29tKQotICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0
LCAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMs
IDIwMDQsIDIwMDUsIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNiwyMSArMjQsMjYgQEAKICNpZm5kZWYgVUlFdmVudF9o
CiAjZGVmaW5lIFVJRXZlbnRfaAogCisjaW5jbHVkZSAiRE9NV2luZG93LmgiCiAjaW5jbHVkZSAi
RXZlbnQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAgY2xhc3MgRE9NV2luZG93Owot
CiAgICAgdHlwZWRlZiBET01XaW5kb3cgQWJzdHJhY3RWaWV3OwogCiAgICAgY2xhc3MgVUlFdmVu
dCA6IHB1YmxpYyBFdmVudCB7CiAgICAgcHVibGljOgotICAgICAgICBVSUV2ZW50KCk7Ci0gICAg
ICAgIFVJRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBib29sIGNhbkJ1YmJsZSwgYm9v
bCBjYW5jZWxhYmxlLCBBYnN0cmFjdFZpZXcqIHZpZXcsIGludCBkZXRhaWwpOworICAgICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxVSUV2ZW50PiBjcmVhdGUoKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IFVJRXZlbnQpOworICAgICAgICB9CisgICAgICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFVJRXZlbnQ+IGNyZWF0ZShjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGJv
b2wgY2FuQnViYmxlLCBib29sIGNhbmNlbGFibGUsIFBhc3NSZWZQdHI8QWJzdHJhY3RWaWV3PiB2
aWV3LCBpbnQgZGV0YWlsKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFVJRXZlbnQodHlwZSwgY2FuQnViYmxlLCBjYW5jZWxhYmxlLCB2aWV3LCBkZXRhaWwpKTsK
KyAgICAgICAgfQogICAgICAgICB2aXJ0dWFsIH5VSUV2ZW50KCk7CiAKLSAgICAgICAgdm9pZCBp
bml0VUlFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGJvb2wgY2FuQnViYmxlLCBib29s
IGNhbmNlbGFibGUsIEFic3RyYWN0VmlldyogdmlldywgaW50IGRldGFpbCk7CisgICAgICAgIHZv
aWQgaW5pdFVJRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBib29sIGNhbkJ1YmJsZSwg
Ym9vbCBjYW5jZWxhYmxlLCBQYXNzUmVmUHRyPEFic3RyYWN0Vmlldz4sIGludCBkZXRhaWwpOwog
CiAgICAgICAgIEFic3RyYWN0VmlldyogdmlldygpIGNvbnN0IHsgcmV0dXJuIG1fdmlldy5nZXQo
KTsgfQogICAgICAgICBpbnQgZGV0YWlsKCkgY29uc3QgeyByZXR1cm4gbV9kZXRhaWw7IH0KQEAg
LTU4LDYgKzYxLDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICB2aXJ0dWFsIGlu
dCB3aGljaCgpIGNvbnN0OwogCisgICAgcHJvdGVjdGVkOgorICAgICAgICBVSUV2ZW50KCk7Cisg
ICAgICAgIFVJRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBib29sIGNhbkJ1YmJsZSwg
Ym9vbCBjYW5jZWxhYmxlLCBQYXNzUmVmUHRyPEFic3RyYWN0Vmlldz4sIGludCBkZXRhaWwpOwor
CiAgICAgcHJpdmF0ZToKICAgICAgICAgUmVmUHRyPEFic3RyYWN0Vmlldz4gbV92aWV3OwogICAg
ICAgICBpbnQgbV9kZXRhaWw7CkluZGV4OiBXZWJDb3JlL2RvbS9VSUV2ZW50V2l0aEtleVN0YXRl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vVUlFdmVudFdpdGhLZXlTdGF0ZS5oCShyZXZp
c2lvbiAzNDQzOCkKKysrIFdlYkNvcmUvZG9tL1VJRXZlbnRXaXRoS2V5U3RhdGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSwxMCArMSw4IEBACiAvKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgotICoKICAqIENvcHlyaWdodCAoQykgMjAwMSBQ
ZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQogICogQ29weXJpZ2h0IChDKSAyMDAxIFRvYmlhcyBB
bnRvbiAoYW50b25Ac3R1ZC5mYmkuZmgtZGFybXN0YWR0LmRlKQogICogQ29weXJpZ2h0IChDKSAy
MDA2IFNhbXVlbCBXZWluaWcgKHNhbS53ZWluaWdAZ21haWwuY29tKQotICogQ29weXJpZ2h0IChD
KSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zMiw2ICszMCwxMiBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgCiAgICAgY2xhc3MgVUlFdmVudFdpdGhLZXlTdGF0ZSA6IHB1Ymxp
YyBVSUV2ZW50IHsKICAgICBwdWJsaWM6CisgICAgICAgIGJvb2wgY3RybEtleSgpIGNvbnN0IHsg
cmV0dXJuIG1fY3RybEtleTsgfQorICAgICAgICBib29sIHNoaWZ0S2V5KCkgY29uc3QgeyByZXR1
cm4gbV9zaGlmdEtleTsgfQorICAgICAgICBib29sIGFsdEtleSgpIGNvbnN0IHsgcmV0dXJuIG1f
YWx0S2V5OyB9CisgICAgICAgIGJvb2wgbWV0YUtleSgpIGNvbnN0IHsgcmV0dXJuIG1fbWV0YUtl
eTsgfQorCisgICAgcHJvdGVjdGVkOgogICAgICAgICBVSUV2ZW50V2l0aEtleVN0YXRlKCkKICAg
ICAgICAgICAgIDogbV9jdHJsS2V5KGZhbHNlKQogICAgICAgICAgICAgLCBtX2FsdEtleShmYWxz
ZSkKQEAgLTQwLDcgKzQ0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB7CiAgICAg
ICAgIH0KICAgICAgICAgCi0gICAgICAgIFVJRXZlbnRXaXRoS2V5U3RhdGUoY29uc3QgQXRvbWlj
U3RyaW5nJiB0eXBlLCBib29sIGNhbkJ1YmJsZSwgYm9vbCBjYW5jZWxhYmxlLCBBYnN0cmFjdFZp
ZXcqIHZpZXcsCisgICAgICAgIFVJRXZlbnRXaXRoS2V5U3RhdGUoY29uc3QgQXRvbWljU3RyaW5n
JiB0eXBlLCBib29sIGNhbkJ1YmJsZSwgYm9vbCBjYW5jZWxhYmxlLCBQYXNzUmVmUHRyPEFic3Ry
YWN0Vmlldz4gdmlldywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGV0YWlsLCBi
b29sIGN0cmxLZXksIGJvb2wgYWx0S2V5LCBib29sIHNoaWZ0S2V5LCBib29sIG1ldGFLZXkpCiAg
ICAgICAgICAgICA6IFVJRXZlbnQodHlwZSwgY2FuQnViYmxlLCBjYW5jZWxhYmxlLCB2aWV3LCBk
ZXRhaWwpCiAgICAgICAgICAgICAsIG1fY3RybEtleShjdHJsS2V5KQpAQCAtNTAsMTIgKzU0LDYg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICBi
b29sIGN0cmxLZXkoKSBjb25zdCB7IHJldHVybiBtX2N0cmxLZXk7IH0KLSAgICAgICAgYm9vbCBz
aGlmdEtleSgpIGNvbnN0IHsgcmV0dXJuIG1fc2hpZnRLZXk7IH0KLSAgICAgICAgYm9vbCBhbHRL
ZXkoKSBjb25zdCB7IHJldHVybiBtX2FsdEtleTsgfQotICAgICAgICBib29sIG1ldGFLZXkoKSBj
b25zdCB7IHJldHVybiBtX21ldGFLZXk7IH0KLQotICAgIHByb3RlY3RlZDoKICAgICAgICAgLy8g
RXhwb3NlIHRoZXNlIHNvIGluaXQgZnVuY3Rpb25zIGNhbiBzZXQgdGhlbS4KICAgICAgICAgYm9v
bCBtX2N0cmxLZXkgOiAxOwogICAgICAgICBib29sIG1fYWx0S2V5IDogMTsKSW5kZXg6IFdlYkNv
cmUvZG9tL1doZWVsRXZlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1doZWVsRXZl
bnQuY3BwCShyZXZpc2lvbiAzNDQzOCkKKysrIFdlYkNvcmUvZG9tL1doZWVsRXZlbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDEwICsxLDggQEAKLS8qKgotICogVGhpcyBmaWxlIGlzIHBhcnQg
b2YgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgotICoKKy8qCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKICAqIENvcHlyaWdodCAoQykgMjAw
MSBUb2JpYXMgQW50b24gKGFudG9uQHN0dWQuZmJpLmZoLWRhcm1zdGFkdC5kZSkKICAqIENvcHly
aWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIChzYW0ud2VpbmlnQGdtYWlsLmNvbSkKLSAqIENv
cHlyaWdodCAoQykgMjAwMywgMjAwNSwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29w
eXJpZ2h0IChDKSAyMDAzLCAyMDA1LCAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjYsNyArMjQsNiBAQAogI2luY2x1ZGUg
IldoZWVsRXZlbnQuaCIKIAogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKLQogI2luY2x1ZGUgPHd0
Zi9NYXRoRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM5LDcgKzM2LDcgQEAg
V2hlZWxFdmVudDo6V2hlZWxFdmVudCgpCiB7CiB9CiAKLVdoZWVsRXZlbnQ6OldoZWVsRXZlbnQo
ZmxvYXQgd2hlZWxEZWx0YVgsIGZsb2F0IHdoZWVsRGVsdGFZLCBBYnN0cmFjdFZpZXcqIHZpZXcs
CitXaGVlbEV2ZW50OjpXaGVlbEV2ZW50KGZsb2F0IHdoZWVsRGVsdGFYLCBmbG9hdCB3aGVlbERl
bHRhWSwgUGFzc1JlZlB0cjxBYnN0cmFjdFZpZXc+IHZpZXcsCiAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBzY3JlZW5YLCBpbnQgc2NyZWVuWSwgaW50IHBhZ2VYLCBpbnQgcGFnZVksCiAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgY3RybEtleSwgYm9vbCBhbHRLZXksIGJvb2wgc2hpZnRL
ZXksIGJvb2wgbWV0YUtleSkKICAgICA6IE1vdXNlUmVsYXRlZEV2ZW50KG1vdXNld2hlZWxFdmVu
dCwKQEAgLTU1LDcgKzUyLDcgQEAgV2hlZWxFdmVudDo6V2hlZWxFdmVudChmbG9hdCB3aGVlbERl
bHRhWAogICAgICAgICBtX3doZWVsRGVsdGFZID0gKHdoZWVsRGVsdGFZID4gMCkgPyAxMjAgOiAt
MTIwOwogfQogCi12b2lkIFdoZWVsRXZlbnQ6OmluaXRXaGVlbEV2ZW50KGludCB3aGVlbERlbHRh
WCwgaW50IHdoZWVsRGVsdGFZLCBBYnN0cmFjdFZpZXcqIHZpZXcsCit2b2lkIFdoZWVsRXZlbnQ6
OmluaXRXaGVlbEV2ZW50KGludCB3aGVlbERlbHRhWCwgaW50IHdoZWVsRGVsdGFZLCBQYXNzUmVm
UHRyPEFic3RyYWN0Vmlldz4gdmlldywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IHNjcmVlblgsIGludCBzY3JlZW5ZLCBpbnQgcGFnZVgsIGludCBwYWdlWSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjdHJsS2V5LCBib29sIGFsdEtleSwgYm9vbCBz
aGlmdEtleSwgYm9vbCBtZXRhS2V5KQogewpJbmRleDogV2ViQ29yZS9kb20vV2hlZWxFdmVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1doZWVsRXZlbnQuaAkocmV2aXNpb24gMzQ0Mzgp
CisrKyBXZWJDb3JlL2RvbS9XaGVlbEV2ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTAgKzEs
OCBAQAogLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00gaW1wbGVtZW50YXRpb24g
Zm9yIEtERS4KLSAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0
LmNvbSkKICAqIENvcHlyaWdodCAoQykgMjAwMSBUb2JpYXMgQW50b24gKGFudG9uQHN0dWQuZmJp
LmZoLWRhcm1zdGFkdC5kZSkKICAqIENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIChz
YW0ud2VpbmlnQGdtYWlsLmNvbSkKLSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwg
MjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAy
MDA1LCAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwpAQCAtMzMsMTIgKzMxLDE5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAv
LyBleHRlbnNpb246IG1vdXNlIHdoZWVsIGV2ZW50CiAgICAgY2xhc3MgV2hlZWxFdmVudCA6IHB1
YmxpYyBNb3VzZVJlbGF0ZWRFdmVudCB7CiAgICAgcHVibGljOgotICAgICAgICBXaGVlbEV2ZW50
KCk7Ci0gICAgICAgIFdoZWVsRXZlbnQoZmxvYXQgd2hlZWxEZWx0YVgsIGZsb2F0IHdoZWVsRGVs
dGFZLCBBYnN0cmFjdFZpZXcqLAotICAgICAgICAgICAgICAgICAgIGludCBzY3JlZW5YLCBpbnQg
c2NyZWVuWSwgaW50IHBhZ2VYLCBpbnQgcGFnZVksCi0gICAgICAgICAgICAgICAgICAgYm9vbCBj
dHJsS2V5LCBib29sIGFsdEtleSwgYm9vbCBzaGlmdEtleSwgYm9vbCBtZXRhS2V5KTsKKyAgICAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8V2hlZWxFdmVudD4gY3JlYXRlKCkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXaGVlbEV2ZW50KTsKKyAgICAgICAgfQorICAg
ICAgICBzdGF0aWMgUGFzc1JlZlB0cjxXaGVlbEV2ZW50PiBjcmVhdGUoZmxvYXQgd2hlZWxEZWx0
YVgsIGZsb2F0IHdoZWVsRGVsdGFZLCBQYXNzUmVmUHRyPEFic3RyYWN0Vmlldz4gdmlldywKKyAg
ICAgICAgICAgIGludCBzY3JlZW5YLCBpbnQgc2NyZWVuWSwgaW50IHBhZ2VYLCBpbnQgcGFnZVks
CisgICAgICAgICAgICBib29sIGN0cmxLZXksIGJvb2wgYWx0S2V5LCBib29sIHNoaWZ0S2V5LCBi
b29sIG1ldGFLZXkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
V2hlZWxFdmVudCh3aGVlbERlbHRhWCwgd2hlZWxEZWx0YVksIHZpZXcsIHNjcmVlblgsIHNjcmVl
blksIHBhZ2VYLCBwYWdlWSwKKyAgICAgICAgICAgICAgICBjdHJsS2V5LCBhbHRLZXksIHNoaWZ0
S2V5LCBtZXRhS2V5KSk7CisgICAgICAgIH0KIAotICAgICAgICB2b2lkIGluaXRXaGVlbEV2ZW50
KGludCB3aGVlbERlbHRhWCwgaW50IHdoZWVsRGVsdGFZLCBBYnN0cmFjdFZpZXcqLAorICAgICAg
ICB2b2lkIGluaXRXaGVlbEV2ZW50KGludCB3aGVlbERlbHRhWCwgaW50IHdoZWVsRGVsdGFZLCBQ
YXNzUmVmUHRyPEFic3RyYWN0Vmlldz4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IHNjcmVlblgsIGludCBzY3JlZW5ZLCBpbnQgcGFnZVgsIGludCBwYWdlWSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBib29sIGN0cmxLZXksIGJvb2wgYWx0S2V5LCBib29sIHNoaWZ0S2V5
LCBib29sIG1ldGFLZXkpOwogCkBAIC01MCw2ICs1NSwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIGJvb2wgaXNIb3Jpem9udGFsKCkgY29uc3QgeyByZXR1cm4gbV93aGVlbERlbHRh
WDsgfQogCiAgICAgcHJpdmF0ZToKKyAgICAgICAgV2hlZWxFdmVudCgpOworICAgICAgICBXaGVl
bEV2ZW50KGZsb2F0IHdoZWVsRGVsdGFYLCBmbG9hdCB3aGVlbERlbHRhWSwgUGFzc1JlZlB0cjxB
YnN0cmFjdFZpZXc+LAorICAgICAgICAgICAgICAgICAgIGludCBzY3JlZW5YLCBpbnQgc2NyZWVu
WSwgaW50IHBhZ2VYLCBpbnQgcGFnZVksCisgICAgICAgICAgICAgICAgICAgYm9vbCBjdHJsS2V5
LCBib29sIGFsdEtleSwgYm9vbCBzaGlmdEtleSwgYm9vbCBtZXRhS2V5KTsKKwogICAgICAgICB2
aXJ0dWFsIGJvb2wgaXNXaGVlbEV2ZW50KCkgY29uc3Q7CiAKICAgICAgICAgaW50IG1fd2hlZWxE
ZWx0YVg7CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvQXBwZW5kTm9kZUNvbW1hbmQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9BcHBlbmROb2RlQ29tbWFuZC5jcHAJKHJldmlzaW9u
IDM0NDM4KQorKysgV2ViQ29yZS9lZGl0aW5nL0FwcGVuZE5vZGVDb21tYW5kLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYg
QXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDUsIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSw4ICsyOSw4IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotQXBwZW5kTm9kZUNvbW1hbmQ6OkFwcGVuZE5vZGVDb21tYW5kKE5vZGUq
IHBhcmVudE5vZGUsIFBhc3NSZWZQdHI8Tm9kZT4gY2hpbGRUb0FwcGVuZCkKLSAgICA6IEVkaXRD
b21tYW5kKHBhcmVudE5vZGUtPmRvY3VtZW50KCkpLCBtX3BhcmVudE5vZGUocGFyZW50Tm9kZSks
IG1fY2hpbGRUb0FwcGVuZChjaGlsZFRvQXBwZW5kKQorQXBwZW5kTm9kZUNvbW1hbmQ6OkFwcGVu
ZE5vZGVDb21tYW5kKFBhc3NSZWZQdHI8Tm9kZT4gcGFyZW50Tm9kZSwgUGFzc1JlZlB0cjxOb2Rl
PiBjaGlsZFRvQXBwZW5kKQorICAgIDogU2ltcGxlRWRpdENvbW1hbmQocGFyZW50Tm9kZS0+ZG9j
dW1lbnQoKSksIG1fcGFyZW50Tm9kZShwYXJlbnROb2RlKSwgbV9jaGlsZFRvQXBwZW5kKGNoaWxk
VG9BcHBlbmQpCiB7CiAgICAgQVNTRVJUKG1fY2hpbGRUb0FwcGVuZCk7CiAgICAgQVNTRVJUKG1f
cGFyZW50Tm9kZSk7CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvQXBwZW5kTm9kZUNvbW1hbmQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvQXBwZW5kTm9kZUNvbW1hbmQuaAkocmV2aXNp
b24gMzQ0MzgpCisrKyBXZWJDb3JlL2VkaXRpbmcvQXBwZW5kTm9kZUNvbW1hbmQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYg
QXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDUsIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCwxNyArMzAsMTkgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1jbGFzcyBBcHBlbmROb2RlQ29tbWFuZCA6IHB1YmxpYyBFZGl0Q29t
bWFuZCB7CitjbGFzcyBBcHBlbmROb2RlQ29tbWFuZCA6IHB1YmxpYyBTaW1wbGVFZGl0Q29tbWFu
ZCB7CiBwdWJsaWM6Ci0gICAgQXBwZW5kTm9kZUNvbW1hbmQoTm9kZSogcGFyZW50Tm9kZSwgUGFz
c1JlZlB0cjxOb2RlPiBjaGlsZFRvQXBwZW5kKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxBcHBl
bmROb2RlQ29tbWFuZD4gY3JlYXRlKFBhc3NSZWZQdHI8Tm9kZT4gcGFyZW50Tm9kZSwgUGFzc1Jl
ZlB0cjxOb2RlPiBjaGlsZFRvQXBwZW5kKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBBcHBlbmROb2RlQ29tbWFuZChwYXJlbnROb2RlLCBjaGlsZFRvQXBwZW5kKSk7CisgICAg
fQorCitwcml2YXRlOgorICAgIEFwcGVuZE5vZGVDb21tYW5kKFBhc3NSZWZQdHI8Tm9kZT4gcGFy
ZW50Tm9kZSwgUGFzc1JlZlB0cjxOb2RlPiBjaGlsZFRvQXBwZW5kKTsKIAogICAgIHZpcnR1YWwg
dm9pZCBkb0FwcGx5KCk7CiAgICAgdmlydHVhbCB2b2lkIGRvVW5hcHBseSgpOwogCi0gICAgTm9k
ZSogcGFyZW50Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50Tm9kZS5nZXQoKTsgfQotICAg
IE5vZGUqIGNoaWxkVG9BcHBlbmQoKSBjb25zdCB7IHJldHVybiBtX2NoaWxkVG9BcHBlbmQuZ2V0
KCk7IH0KLQotcHJpdmF0ZToKICAgICBSZWZQdHI8Tm9kZT4gbV9wYXJlbnROb2RlOwogICAgIFJl
ZlB0cjxOb2RlPiBtX2NoaWxkVG9BcHBlbmQ7CiB9OwpJbmRleDogV2ViQ29yZS9lZGl0aW5nL0Fw
cGx5U3R5bGVDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvQXBwbHlT
dHlsZUNvbW1hbmQuY3BwCShyZXZpc2lvbiAzNDQzOCkKKysrIFdlYkNvcmUvZWRpdGluZy9BcHBs
eVN0eWxlQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5OCwxNSArMzk4LDE1IEBAIHZv
aWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5QmxvY2tTdHlsZSgKICAgICB3aGlsZSAocGFyYWdy
YXBoU3RhcnQuaXNOb3ROdWxsKCkgJiYgcGFyYWdyYXBoU3RhcnQgIT0gYmV5b25kRW5kKSB7CiAg
ICAgICAgIFN0eWxlQ2hhbmdlIHN0eWxlQ2hhbmdlKHN0eWxlLCBwYXJhZ3JhcGhTdGFydC5kZWVw
RXF1aXZhbGVudCgpLCBTdHlsZUNoYW5nZTo6c3R5bGVNb2RlRm9yUGFyc2VNb2RlKGRvY3VtZW50
KCktPmluQ29tcGF0TW9kZSgpKSk7CiAgICAgICAgIGlmIChzdHlsZUNoYW5nZS5jc3NTdHlsZSgp
Lmxlbmd0aCgpID4gMCB8fCBtX3JlbW92ZU9ubHkpIHsKLSAgICAgICAgICAgIE5vZGUqIGJsb2Nr
ID0gZW5jbG9zaW5nQmxvY2socGFyYWdyYXBoU3RhcnQuZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCkp
OwotICAgICAgICAgICAgTm9kZSogbmV3QmxvY2sgPSBtb3ZlUGFyYWdyYXBoQ29udGVudHNUb05l
d0Jsb2NrSWZOZWNlc3NhcnkocGFyYWdyYXBoU3RhcnQuZGVlcEVxdWl2YWxlbnQoKSk7CisgICAg
ICAgICAgICBSZWZQdHI8Tm9kZT4gYmxvY2sgPSBlbmNsb3NpbmdCbG9jayhwYXJhZ3JhcGhTdGFy
dC5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKSk7CisgICAgICAgICAgICBSZWZQdHI8Tm9kZT4gbmV3
QmxvY2sgPSBtb3ZlUGFyYWdyYXBoQ29udGVudHNUb05ld0Jsb2NrSWZOZWNlc3NhcnkocGFyYWdy
YXBoU3RhcnQuZGVlcEVxdWl2YWxlbnQoKSk7CiAgICAgICAgICAgICBpZiAobmV3QmxvY2spCiAg
ICAgICAgICAgICAgICAgYmxvY2sgPSBuZXdCbG9jazsKICAgICAgICAgICAgIEFTU0VSVChibG9j
ay0+aXNIVE1MRWxlbWVudCgpKTsKICAgICAgICAgICAgIGlmIChibG9jay0+aXNIVE1MRWxlbWVu
dCgpKSB7Ci0gICAgICAgICAgICAgICAgcmVtb3ZlQ1NTU3R5bGUoc3R5bGUsIHN0YXRpY19jYXN0
PEhUTUxFbGVtZW50Kj4oYmxvY2spKTsKKyAgICAgICAgICAgICAgICByZW1vdmVDU1NTdHlsZShz
dHlsZSwgc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihibG9jay5nZXQoKSkpOwogICAgICAgICAg
ICAgICAgIGlmICghbV9yZW1vdmVPbmx5KQotICAgICAgICAgICAgICAgICAgICBhZGRCbG9ja1N0
eWxlKHN0eWxlQ2hhbmdlLCBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KGJsb2NrKSk7CisgICAg
ICAgICAgICAgICAgICAgIGFkZEJsb2NrU3R5bGUoc3R5bGVDaGFuZ2UsIHN0YXRpY19jYXN0PEhU
TUxFbGVtZW50Kj4oYmxvY2suZ2V0KCkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAg
ICAgICBwYXJhZ3JhcGhTdGFydCA9IG5leHRQYXJhZ3JhcGhTdGFydDsKSW5kZXg6IFdlYkNvcmUv
ZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGlu
Zy9BcHBseVN0eWxlQ29tbWFuZC5oCShyZXZpc2lvbiAzNDQzOCkKKysrIFdlYkNvcmUvZWRpdGlu
Zy9BcHBseVN0eWxlQ29tbWFuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTM3LDE2ICszNywyOSBAQCBjbGFzcyBBcHBseVN0eWxlQ29tbWFuZCA6IHB1YmxpYyBDb21w
b3NpCiBwdWJsaWM6CiAgICAgZW51bSBFUHJvcGVydHlMZXZlbCB7IFByb3BlcnR5RGVmYXVsdCwg
Rm9yY2VCbG9ja1Byb3BlcnRpZXMgfTsKIAotICAgIEFwcGx5U3R5bGVDb21tYW5kKERvY3VtZW50
KiwgQ1NTU3R5bGVEZWNsYXJhdGlvbiosIEVkaXRBY3Rpb24gPSBFZGl0QWN0aW9uQ2hhbmdlQXR0
cmlidXRlcywgRVByb3BlcnR5TGV2ZWwgPSBQcm9wZXJ0eURlZmF1bHQpOwotICAgIEFwcGx5U3R5
bGVDb21tYW5kKERvY3VtZW50KiwgQ1NTU3R5bGVEZWNsYXJhdGlvbiosIGNvbnN0IFBvc2l0aW9u
JiBzdGFydCwgY29uc3QgUG9zaXRpb24mIGVuZCwgRWRpdEFjdGlvbiA9IEVkaXRBY3Rpb25DaGFu
Z2VBdHRyaWJ1dGVzLCBFUHJvcGVydHlMZXZlbCA9IFByb3BlcnR5RGVmYXVsdCk7Ci0gICAgQXBw
bHlTdHlsZUNvbW1hbmQoRWxlbWVudCosIGJvb2wgPSBmYWxzZSwgRWRpdEFjdGlvbiA9IEVkaXRB
Y3Rpb25DaGFuZ2VBdHRyaWJ1dGVzKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxBcHBseVN0eWxl
Q29tbWFuZD4gY3JlYXRlKERvY3VtZW50KiBkb2N1bWVudCwgQ1NTU3R5bGVEZWNsYXJhdGlvbiog
c3R5bGUsIEVkaXRBY3Rpb24gYWN0aW9uID0gRWRpdEFjdGlvbkNoYW5nZUF0dHJpYnV0ZXMsIEVQ
cm9wZXJ0eUxldmVsIGxldmVsID0gUHJvcGVydHlEZWZhdWx0KQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBBcHBseVN0eWxlQ29tbWFuZChkb2N1bWVudCwgc3R5bGUsIGFjdGlv
biwgbGV2ZWwpKTsKKyAgICB9CisgICAgc3RhdGljIFBhc3NSZWZQdHI8QXBwbHlTdHlsZUNvbW1h
bmQ+IGNyZWF0ZShEb2N1bWVudCogZG9jdW1lbnQsIENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxl
LCBjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQsIEVkaXRBY3Rpb24g
YWN0aW9uID0gRWRpdEFjdGlvbkNoYW5nZUF0dHJpYnV0ZXMsIEVQcm9wZXJ0eUxldmVsIGxldmVs
ID0gUHJvcGVydHlEZWZhdWx0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBB
cHBseVN0eWxlQ29tbWFuZChkb2N1bWVudCwgc3R5bGUsIHN0YXJ0LCBlbmQsIGFjdGlvbiwgbGV2
ZWwpKTsKKyAgICB9CisgICAgc3RhdGljIFBhc3NSZWZQdHI8QXBwbHlTdHlsZUNvbW1hbmQ+IGNy
ZWF0ZShFbGVtZW50KiBlbGVtZW50LCBib29sIHJlbW92ZU9ubHkgPSBmYWxzZSwgRWRpdEFjdGlv
biBhY3Rpb24gPSBFZGl0QWN0aW9uQ2hhbmdlQXR0cmlidXRlcykKKyAgICB7CisgICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgQXBwbHlTdHlsZUNvbW1hbmQoZWxlbWVudCwgcmVtb3ZlT25seSwg
YWN0aW9uKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIEFwcGx5U3R5bGVDb21tYW5kKERvY3Vt
ZW50KiwgQ1NTU3R5bGVEZWNsYXJhdGlvbiosIEVkaXRBY3Rpb24sIEVQcm9wZXJ0eUxldmVsKTsK
KyAgICBBcHBseVN0eWxlQ29tbWFuZChEb2N1bWVudCosIENTU1N0eWxlRGVjbGFyYXRpb24qLCBj
b25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQsIEVkaXRBY3Rpb24sIEVQ
cm9wZXJ0eUxldmVsKTsKKyAgICBBcHBseVN0eWxlQ29tbWFuZChFbGVtZW50KiwgYm9vbCByZW1v
dmVPbmx5LCBFZGl0QWN0aW9uKTsKIAogICAgIHZpcnR1YWwgdm9pZCBkb0FwcGx5KCk7CiAgICAg
dmlydHVhbCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24oKSBjb25zdDsKIAogICAgIENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGUuZ2V0KCk7
IH0KIAotcHJpdmF0ZToKICAgICAvLyBzdHlsZS1yZW1vdmFsIGhlbHBlcnMKICAgICBib29sIGlz
SFRNTFN0eWxlTm9kZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiosIEhUTUxFbGVtZW50Kik7
CiAgICAgdm9pZCByZW1vdmVIVE1MU3R5bGVOb2RlKEhUTUxFbGVtZW50Kik7CkluZGV4OiBXZWJD
b3JlL2VkaXRpbmcvQnJlYWtCbG9ja3F1b3RlQ29tbWFuZC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvZWRpdGluZy9CcmVha0Jsb2NrcXVvdGVDb21tYW5kLmgJKHJldmlzaW9uIDM0NDM4KQorKysg
V2ViQ29yZS9lZGl0aW5nL0JyZWFrQmxvY2txdW90ZUNvbW1hbmQuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYgQXBwbGUgQ29t
cHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUs
IDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0zMiw2ICszMiwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIGNsYXNzIEJyZWFrQmxvY2txdW90ZUNvbW1hbmQgOiBwdWJsaWMgQ29tcG9zaXRlRWRpdENv
bW1hbmQgewogcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEJyZWFrQmxvY2txdW90ZUNv
bW1hbmQ+IGNyZWF0ZShEb2N1bWVudCogZG9jdW1lbnQpCisgICAgeworICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IEJyZWFrQmxvY2txdW90ZUNvbW1hbmQoZG9jdW1lbnQpKTsKKyAgICB9CisK
K3ByaXZhdGU6CiAgICAgQnJlYWtCbG9ja3F1b3RlQ29tbWFuZChEb2N1bWVudCopOwogICAgIHZp
cnR1YWwgdm9pZCBkb0FwcGx5KCk7CiB9OwpJbmRleDogV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0
ZUVkaXRDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRl
RWRpdENvbW1hbmQuY3BwCShyZXZpc2lvbiAzNDQzOCkKKysrIFdlYkNvcmUvZWRpdGluZy9Db21w
b3NpdGVFZGl0Q29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTEwMCwzOCArMTAwLDM4IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmFwcGx5Q29t
bWFuZFQKIAogdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6YXBwbHlTdHlsZShDU1NTdHlsZURl
Y2xhcmF0aW9uKiBzdHlsZSwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9uKQogewotICAgIGFwcGx5
Q29tbWFuZFRvQ29tcG9zaXRlKG5ldyBBcHBseVN0eWxlQ29tbWFuZChkb2N1bWVudCgpLCBzdHls
ZSwgZWRpdGluZ0FjdGlvbikpOworICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKEFwcGx5U3R5
bGVDb21tYW5kOjpjcmVhdGUoZG9jdW1lbnQoKSwgc3R5bGUsIGVkaXRpbmdBY3Rpb24pKTsKIH0K
IAogdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6YXBwbHlTdHlsZShDU1NTdHlsZURlY2xhcmF0
aW9uKiBzdHlsZSwgY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kLCBF
ZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24pCiB7Ci0gICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUo
bmV3IEFwcGx5U3R5bGVDb21tYW5kKGRvY3VtZW50KCksIHN0eWxlLCBzdGFydCwgZW5kLCBlZGl0
aW5nQWN0aW9uKSk7CisgICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoQXBwbHlTdHlsZUNvbW1h
bmQ6OmNyZWF0ZShkb2N1bWVudCgpLCBzdHlsZSwgc3RhcnQsIGVuZCwgZWRpdGluZ0FjdGlvbikp
OwogfQogCiB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjphcHBseVN0eWxlZEVsZW1lbnQoRWxl
bWVudCogZWxlbWVudCkKIHsKLSAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShuZXcgQXBwbHlT
dHlsZUNvbW1hbmQoZWxlbWVudCwgZmFsc2UpKTsKKyAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0
ZShBcHBseVN0eWxlQ29tbWFuZDo6Y3JlYXRlKGVsZW1lbnQsIGZhbHNlKSk7CiB9CiAKIHZvaWQg
Q29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlbW92ZVN0eWxlZEVsZW1lbnQoRWxlbWVudCogZWxlbWVu
dCkKIHsKLSAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShuZXcgQXBwbHlTdHlsZUNvbW1hbmQo
ZWxlbWVudCwgdHJ1ZSkpOworICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKEFwcGx5U3R5bGVD
b21tYW5kOjpjcmVhdGUoZWxlbWVudCwgdHJ1ZSkpOwogfQogCiB2b2lkIENvbXBvc2l0ZUVkaXRD
b21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IoYm9vbCB1c2VEZWZhdWx0UGFyYWdyYXBo
RWxlbWVudCkKIHsKLSAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShuZXcgSW5zZXJ0UGFyYWdy
YXBoU2VwYXJhdG9yQ29tbWFuZChkb2N1bWVudCgpLCB1c2VEZWZhdWx0UGFyYWdyYXBoRWxlbWVu
dCkpOworICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKEluc2VydFBhcmFncmFwaFNlcGFyYXRv
ckNvbW1hbmQ6OmNyZWF0ZShkb2N1bWVudCgpLCB1c2VEZWZhdWx0UGFyYWdyYXBoRWxlbWVudCkp
OwogfQogCiB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjppbnNlcnRMaW5lQnJlYWsoKQogewot
ICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKG5ldyBJbnNlcnRMaW5lQnJlYWtDb21tYW5kKGRv
Y3VtZW50KCkpKTsKKyAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShJbnNlcnRMaW5lQnJlYWtD
b21tYW5kOjpjcmVhdGUoZG9jdW1lbnQoKSkpOwogfQogCiB2b2lkIENvbXBvc2l0ZUVkaXRDb21t
YW5kOjppbnNlcnROb2RlQmVmb3JlKE5vZGUqIGluc2VydENoaWxkLCBOb2RlKiByZWZDaGlsZCkK
IHsKICAgICBBU1NFUlQoIXJlZkNoaWxkLT5oYXNUYWdOYW1lKGJvZHlUYWcpKTsKLSAgICBhcHBs
eUNvbW1hbmRUb0NvbXBvc2l0ZShuZXcgSW5zZXJ0Tm9kZUJlZm9yZUNvbW1hbmQoaW5zZXJ0Q2hp
bGQsIHJlZkNoaWxkKSk7CisgICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoSW5zZXJ0Tm9kZUJl
Zm9yZUNvbW1hbmQ6OmNyZWF0ZShpbnNlcnRDaGlsZCwgcmVmQ2hpbGQpKTsKIH0KIAogdm9pZCBD
b21wb3NpdGVFZGl0Q29tbWFuZDo6aW5zZXJ0Tm9kZUFmdGVyKE5vZGUqIGluc2VydENoaWxkLCBO
b2RlKiByZWZDaGlsZCkKQEAgLTE3NSw3ICsxNzUsNyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21t
YW5kOjppbnNlcnROb2RlQXQoCiB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjphcHBlbmROb2Rl
KE5vZGUqIG5ld0NoaWxkLCBOb2RlKiBwYXJlbnQpCiB7CiAgICAgQVNTRVJUKGNhbkhhdmVDaGls
ZHJlbkZvckVkaXRpbmcocGFyZW50KSk7Ci0gICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUobmV3
IEFwcGVuZE5vZGVDb21tYW5kKHBhcmVudCwgbmV3Q2hpbGQpKTsKKyAgICBhcHBseUNvbW1hbmRU
b0NvbXBvc2l0ZShBcHBlbmROb2RlQ29tbWFuZDo6Y3JlYXRlKHBhcmVudCwgbmV3Q2hpbGQpKTsK
IH0KIAogdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVtb3ZlQ2hpbGRyZW5JblJhbmdlKE5v
ZGUqIG5vZGUsIGludCBmcm9tLCBpbnQgdG8pCkBAIC0xOTEsMTIgKzE5MSwxMiBAQCB2b2lkIENv
bXBvc2l0ZUVkaXRDb21tYW5kOjpyZW1vdmVDaGlsZHJlCiAKIHZvaWQgQ29tcG9zaXRlRWRpdENv
bW1hbmQ6OnJlbW92ZU5vZGUoTm9kZSogcmVtb3ZlQ2hpbGQpCiB7Ci0gICAgYXBwbHlDb21tYW5k
VG9Db21wb3NpdGUobmV3IFJlbW92ZU5vZGVDb21tYW5kKHJlbW92ZUNoaWxkKSk7CisgICAgYXBw
bHlDb21tYW5kVG9Db21wb3NpdGUoUmVtb3ZlTm9kZUNvbW1hbmQ6OmNyZWF0ZShyZW1vdmVDaGls
ZCkpOwogfQogCiB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZW1vdmVOb2RlUHJlc2Vydmlu
Z0NoaWxkcmVuKE5vZGUqIHJlbW92ZUNoaWxkKQogewotICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9z
aXRlKG5ldyBSZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuQ29tbWFuZChyZW1vdmVDaGlsZCkp
OworICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKFJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRy
ZW5Db21tYW5kOjpjcmVhdGUocmVtb3ZlQ2hpbGQpKTsKIH0KIAogdm9pZCBDb21wb3NpdGVFZGl0
Q29tbWFuZDo6cmVtb3ZlTm9kZUFuZFBydW5lQW5jZXN0b3JzKE5vZGUqIG5vZGUpCkBAIC0yMzMs
MTIgKzIzMywxMiBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpwcnVuZShQYXNzUmVmCiAK
IHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnNwbGl0VGV4dE5vZGUoVGV4dCAqdGV4dCwgaW50
IG9mZnNldCkKIHsKLSAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShuZXcgU3BsaXRUZXh0Tm9k
ZUNvbW1hbmQodGV4dCwgb2Zmc2V0KSk7CisgICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoU3Bs
aXRUZXh0Tm9kZUNvbW1hbmQ6OmNyZWF0ZSh0ZXh0LCBvZmZzZXQpKTsKIH0KIAogdm9pZCBDb21w
b3NpdGVFZGl0Q29tbWFuZDo6c3BsaXRFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQsIE5vZGUqIGF0
Q2hpbGQpCiB7Ci0gICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUobmV3IFNwbGl0RWxlbWVudENv
bW1hbmQoZWxlbWVudCwgYXRDaGlsZCkpOworICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKFNw
bGl0RWxlbWVudENvbW1hbmQ6OmNyZWF0ZShlbGVtZW50LCBhdENoaWxkKSk7CiB9CiAKIHZvaWQg
Q29tcG9zaXRlRWRpdENvbW1hbmQ6Om1lcmdlSWRlbnRpY2FsRWxlbWVudHMoRWxlbWVudCogZmly
c3QsIEVsZW1lbnQqIHNlY29uZCkKQEAgLTI0OCwyMiArMjQ4LDIyIEBAIHZvaWQgQ29tcG9zaXRl
RWRpdENvbW1hbmQ6Om1lcmdlSWRlbnRpY2EKICAgICAgICAgcmVtb3ZlTm9kZShzZWNvbmQpOwog
ICAgICAgICBpbnNlcnROb2RlQWZ0ZXIoc2Vjb25kLCBmaXJzdCk7CiAgICAgfQotICAgIGFwcGx5
Q29tbWFuZFRvQ29tcG9zaXRlKG5ldyBNZXJnZUlkZW50aWNhbEVsZW1lbnRzQ29tbWFuZChmaXJz
dCwgc2Vjb25kKSk7CisgICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoTWVyZ2VJZGVudGljYWxF
bGVtZW50c0NvbW1hbmQ6OmNyZWF0ZShmaXJzdCwgc2Vjb25kKSk7CiB9CiAKIHZvaWQgQ29tcG9z
aXRlRWRpdENvbW1hbmQ6OndyYXBDb250ZW50c0luRHVtbXlTcGFuKEVsZW1lbnQqIGVsZW1lbnQp
CiB7Ci0gICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUobmV3IFdyYXBDb250ZW50c0luRHVtbXlT
cGFuQ29tbWFuZChlbGVtZW50KSk7CisgICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoV3JhcENv
bnRlbnRzSW5EdW1teVNwYW5Db21tYW5kOjpjcmVhdGUoZWxlbWVudCkpOwogfQogCiB2b2lkIENv
bXBvc2l0ZUVkaXRDb21tYW5kOjpzcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnQoVGV4dCAq
dGV4dCwgaW50IG9mZnNldCkKIHsKLSAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShuZXcgU3Bs
aXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50Q29tbWFuZCh0ZXh0LCBvZmZzZXQpKTsKKyAgICBh
cHBseUNvbW1hbmRUb0NvbXBvc2l0ZShTcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnRDb21t
YW5kOjpjcmVhdGUodGV4dCwgb2Zmc2V0KSk7CiB9CiAKIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1h
bmQ6OmpvaW5UZXh0Tm9kZXMoVGV4dCAqdGV4dDEsIFRleHQgKnRleHQyKQogewotICAgIGFwcGx5
Q29tbWFuZFRvQ29tcG9zaXRlKG5ldyBKb2luVGV4dE5vZGVzQ29tbWFuZCh0ZXh0MSwgdGV4dDIp
KTsKKyAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShKb2luVGV4dE5vZGVzQ29tbWFuZDo6Y3Jl
YXRlKHRleHQxLCB0ZXh0MikpOwogfQogCiB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjppbnB1
dFRleHQoY29uc3QgU3RyaW5nICZ0ZXh0LCBib29sIHNlbGVjdEluc2VydGVkVGV4dCkKQEAgLTI3
Niw3ICsyNzYsNyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjppbnB1dFRleHQoY29uCiAg
ICAgZG8gewogICAgICAgICBuZXdsaW5lID0gdGV4dC5maW5kKCdcbicsIG9mZnNldCk7CiAgICAg
ICAgIGlmIChuZXdsaW5lICE9IG9mZnNldCkgewotICAgICAgICAgICAgUmVmUHRyPEluc2VydFRl
eHRDb21tYW5kPiBjb21tYW5kID0gbmV3IEluc2VydFRleHRDb21tYW5kKGRvY3VtZW50KCkpOwor
ICAgICAgICAgICAgUmVmUHRyPEluc2VydFRleHRDb21tYW5kPiBjb21tYW5kID0gSW5zZXJ0VGV4
dENvbW1hbmQ6OmNyZWF0ZShkb2N1bWVudCgpKTsKICAgICAgICAgICAgIGFwcGx5Q29tbWFuZFRv
Q29tcG9zaXRlKGNvbW1hbmQpOwogICAgICAgICAgICAgaW50IHN1YnN0cmluZ0xlbmd0aCA9IG5l
d2xpbmUgPT0gLTEgPyBsZW5ndGggLSBvZmZzZXQgOiBuZXdsaW5lIC0gb2Zmc2V0OwogICAgICAg
ICAgICAgY29tbWFuZC0+aW5wdXQodGV4dC5zdWJzdHJpbmcob2Zmc2V0LCBzdWJzdHJpbmdMZW5n
dGgpLCBmYWxzZSk7CkBAIC0yOTUsMTggKzI5NSwxOCBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21t
YW5kOjppbnB1dFRleHQoY29uCiAKIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6Omluc2VydFRl
eHRJbnRvTm9kZShUZXh0ICpub2RlLCBpbnQgb2Zmc2V0LCBjb25zdCBTdHJpbmcgJnRleHQpCiB7
Ci0gICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUobmV3IEluc2VydEludG9UZXh0Tm9kZUNvbW1h
bmQobm9kZSwgb2Zmc2V0LCB0ZXh0KSk7CisgICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoSW5z
ZXJ0SW50b1RleHROb2RlQ29tbWFuZDo6Y3JlYXRlKG5vZGUsIG9mZnNldCwgdGV4dCkpOwogfQog
CiB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpkZWxldGVUZXh0RnJvbU5vZGUoVGV4dCAqbm9k
ZSwgaW50IG9mZnNldCwgaW50IGNvdW50KQogewotICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRl
KG5ldyBEZWxldGVGcm9tVGV4dE5vZGVDb21tYW5kKG5vZGUsIG9mZnNldCwgY291bnQpKTsKKyAg
ICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShEZWxldGVGcm9tVGV4dE5vZGVDb21tYW5kOjpjcmVh
dGUobm9kZSwgb2Zmc2V0LCBjb3VudCkpOwogfQogCiB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5k
OjpyZXBsYWNlVGV4dEluTm9kZShUZXh0ICpub2RlLCBpbnQgb2Zmc2V0LCBpbnQgY291bnQsIGNv
bnN0IFN0cmluZyAmcmVwbGFjZW1lbnRUZXh0KQogewotICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9z
aXRlKG5ldyBEZWxldGVGcm9tVGV4dE5vZGVDb21tYW5kKG5vZGUsIG9mZnNldCwgY291bnQpKTsK
LSAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShuZXcgSW5zZXJ0SW50b1RleHROb2RlQ29tbWFu
ZChub2RlLCBvZmZzZXQsIHJlcGxhY2VtZW50VGV4dCkpOworICAgIGFwcGx5Q29tbWFuZFRvQ29t
cG9zaXRlKERlbGV0ZUZyb21UZXh0Tm9kZUNvbW1hbmQ6OmNyZWF0ZShub2RlLCBvZmZzZXQsIGNv
dW50KSk7CisgICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoSW5zZXJ0SW50b1RleHROb2RlQ29t
bWFuZDo6Y3JlYXRlKG5vZGUsIG9mZnNldCwgcmVwbGFjZW1lbnRUZXh0KSk7CiB9CiAKIFBvc2l0
aW9uIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpwb3NpdGlvbk91dHNpZGVUYWJTcGFuKGNvbnN0IFBv
c2l0aW9uJiBwb3MpCkBAIC0zMzYsMzAgKzMzNiwzMCBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21t
YW5kOjppbnNlcnROb2RlQXRUCiB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpkZWxldGVTZWxl
Y3Rpb24oYm9vbCBzbWFydERlbGV0ZSwgYm9vbCBtZXJnZUJsb2Nrc0FmdGVyRGVsZXRlLCBib29s
IHJlcGxhY2UsIGJvb2wgZXhwYW5kRm9yU3BlY2lhbEVsZW1lbnRzKQogewogICAgIGlmIChlbmRp
bmdTZWxlY3Rpb24oKS5pc1JhbmdlKCkpCi0gICAgICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRl
KG5ldyBEZWxldGVTZWxlY3Rpb25Db21tYW5kKGRvY3VtZW50KCksIHNtYXJ0RGVsZXRlLCBtZXJn
ZUJsb2Nrc0FmdGVyRGVsZXRlLCByZXBsYWNlLCBleHBhbmRGb3JTcGVjaWFsRWxlbWVudHMpKTsK
KyAgICAgICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6
Y3JlYXRlKGRvY3VtZW50KCksIHNtYXJ0RGVsZXRlLCBtZXJnZUJsb2Nrc0FmdGVyRGVsZXRlLCBy
ZXBsYWNlLCBleHBhbmRGb3JTcGVjaWFsRWxlbWVudHMpKTsKIH0KIAogdm9pZCBDb21wb3NpdGVF
ZGl0Q29tbWFuZDo6ZGVsZXRlU2VsZWN0aW9uKGNvbnN0IFNlbGVjdGlvbiAmc2VsZWN0aW9uLCBi
b29sIHNtYXJ0RGVsZXRlLCBib29sIG1lcmdlQmxvY2tzQWZ0ZXJEZWxldGUsIGJvb2wgcmVwbGFj
ZSwgYm9vbCBleHBhbmRGb3JTcGVjaWFsRWxlbWVudHMpCiB7CiAgICAgaWYgKHNlbGVjdGlvbi5p
c1JhbmdlKCkpCi0gICAgICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKG5ldyBEZWxldGVTZWxl
Y3Rpb25Db21tYW5kKHNlbGVjdGlvbiwgc21hcnREZWxldGUsIG1lcmdlQmxvY2tzQWZ0ZXJEZWxl
dGUsIHJlcGxhY2UsIGV4cGFuZEZvclNwZWNpYWxFbGVtZW50cykpOworICAgICAgICBhcHBseUNv
bW1hbmRUb0NvbXBvc2l0ZShEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpjcmVhdGUoc2VsZWN0aW9u
LCBzbWFydERlbGV0ZSwgbWVyZ2VCbG9ja3NBZnRlckRlbGV0ZSwgcmVwbGFjZSwgZXhwYW5kRm9y
U3BlY2lhbEVsZW1lbnRzKSk7CiB9CiAKIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlbW92
ZUNTU1Byb3BlcnR5KENTU1N0eWxlRGVjbGFyYXRpb24gKmRlY2wsIGludCBwcm9wZXJ0eSkKIHsK
LSAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShuZXcgUmVtb3ZlQ1NTUHJvcGVydHlDb21tYW5k
KGRvY3VtZW50KCksIGRlY2wsIHByb3BlcnR5KSk7CisgICAgYXBwbHlDb21tYW5kVG9Db21wb3Np
dGUoUmVtb3ZlQ1NTUHJvcGVydHlDb21tYW5kOjpjcmVhdGUoZG9jdW1lbnQoKSwgZGVjbCwgcHJv
cGVydHkpKTsKIH0KIAogdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVtb3ZlTm9kZUF0dHJp
YnV0ZShFbGVtZW50KiBlbGVtZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGUpCiB7
CiAgICAgaWYgKGVsZW1lbnQtPmdldEF0dHJpYnV0ZShhdHRyaWJ1dGUpLmlzTnVsbCgpKQogICAg
ICAgICByZXR1cm47Ci0gICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUobmV3IFJlbW92ZU5vZGVB
dHRyaWJ1dGVDb21tYW5kKGVsZW1lbnQsIGF0dHJpYnV0ZSkpOworICAgIGFwcGx5Q29tbWFuZFRv
Q29tcG9zaXRlKFJlbW92ZU5vZGVBdHRyaWJ1dGVDb21tYW5kOjpjcmVhdGUoZWxlbWVudCwgYXR0
cmlidXRlKSk7CiB9CiAKIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnNldE5vZGVBdHRyaWJ1
dGUoRWxlbWVudCogZWxlbWVudCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlLCBjb25z
dCBTdHJpbmcgJnZhbHVlKQogewotICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKG5ldyBTZXRO
b2RlQXR0cmlidXRlQ29tbWFuZChlbGVtZW50LCBhdHRyaWJ1dGUsIHZhbHVlKSk7CisgICAgYXBw
bHlDb21tYW5kVG9Db21wb3NpdGUoU2V0Tm9kZUF0dHJpYnV0ZUNvbW1hbmQ6OmNyZWF0ZShlbGVt
ZW50LCBhdHRyaWJ1dGUsIHZhbHVlKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBpc1doaXRl
c3BhY2UoVUNoYXIgYykKQEAgLTU0Niw3ICs1NDYsNyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21t
YW5kOjpkZWxldGVJbnNpZ25pCiAgICAgZGVsZXRlSW5zaWduaWZpY2FudFRleHQocG9zLCBlbmQp
OwogfQogCi1Ob2RlKiBDb21wb3NpdGVFZGl0Q29tbWFuZDo6YXBwZW5kQmxvY2tQbGFjZWhvbGRl
cihOb2RlKiBub2RlKQorUGFzc1JlZlB0cjxOb2RlPiBDb21wb3NpdGVFZGl0Q29tbWFuZDo6YXBw
ZW5kQmxvY2tQbGFjZWhvbGRlcihOb2RlKiBub2RlKQogewogICAgIGlmICghbm9kZSkKICAgICAg
ICAgcmV0dXJuIDA7CkBAIC01NTYsMTAgKzU1NiwxMCBAQCBOb2RlKiBDb21wb3NpdGVFZGl0Q29t
bWFuZDo6YXBwZW5kQmxvY2tQCiAKICAgICBSZWZQdHI8Tm9kZT4gcGxhY2Vob2xkZXIgPSBjcmVh
dGVCbG9ja1BsYWNlaG9sZGVyRWxlbWVudChkb2N1bWVudCgpKTsKICAgICBhcHBlbmROb2RlKHBs
YWNlaG9sZGVyLmdldCgpLCBub2RlKTsKLSAgICByZXR1cm4gcGxhY2Vob2xkZXIuZ2V0KCk7Cisg
ICAgcmV0dXJuIHBsYWNlaG9sZGVyLnJlbGVhc2UoKTsKIH0KIAotTm9kZSogQ29tcG9zaXRlRWRp
dENvbW1hbmQ6Omluc2VydEJsb2NrUGxhY2Vob2xkZXIoY29uc3QgUG9zaXRpb24mIHBvcykKK1Bh
c3NSZWZQdHI8Tm9kZT4gQ29tcG9zaXRlRWRpdENvbW1hbmQ6Omluc2VydEJsb2NrUGxhY2Vob2xk
ZXIoY29uc3QgUG9zaXRpb24mIHBvcykKIHsKICAgICBpZiAocG9zLmlzTnVsbCgpKQogICAgICAg
ICByZXR1cm4gMDsKQEAgLTU2OSwxMCArNTY5LDEwIEBAIE5vZGUqIENvbXBvc2l0ZUVkaXRDb21t
YW5kOjppbnNlcnRCbG9ja1AKIAogICAgIFJlZlB0cjxOb2RlPiBwbGFjZWhvbGRlciA9IGNyZWF0
ZUJsb2NrUGxhY2Vob2xkZXJFbGVtZW50KGRvY3VtZW50KCkpOwogICAgIGluc2VydE5vZGVBdChw
bGFjZWhvbGRlci5nZXQoKSwgcG9zKTsKLSAgICByZXR1cm4gcGxhY2Vob2xkZXIuZ2V0KCk7Cisg
ICAgcmV0dXJuIHBsYWNlaG9sZGVyLnJlbGVhc2UoKTsKIH0KIAotTm9kZSogQ29tcG9zaXRlRWRp
dENvbW1hbmQ6OmFkZEJsb2NrUGxhY2Vob2xkZXJJZk5lZWRlZChOb2RlKiBub2RlKQorUGFzc1Jl
ZlB0cjxOb2RlPiBDb21wb3NpdGVFZGl0Q29tbWFuZDo6YWRkQmxvY2tQbGFjZWhvbGRlcklmTmVl
ZGVkKE5vZGUqIG5vZGUpCiB7CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4gMDsKQEAg
LTYxMSw3ICs2MTEsNyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZW1vdmVQbGFjZWhv
CiAgICAgfQogfQogCi1Ob2RlKiBDb21wb3NpdGVFZGl0Q29tbWFuZDo6bW92ZVBhcmFncmFwaENv
bnRlbnRzVG9OZXdCbG9ja0lmTmVjZXNzYXJ5KGNvbnN0IFBvc2l0aW9uJiBwb3MpCitQYXNzUmVm
UHRyPE5vZGU+IENvbXBvc2l0ZUVkaXRDb21tYW5kOjptb3ZlUGFyYWdyYXBoQ29udGVudHNUb05l
d0Jsb2NrSWZOZWNlc3NhcnkoY29uc3QgUG9zaXRpb24mIHBvcykKIHsKICAgICBpZiAocG9zLmlz
TnVsbCgpKQogICAgICAgICByZXR1cm4gMDsKQEAgLTgwOSw3ICs4MDksNyBAQCB2b2lkIENvbXBv
c2l0ZUVkaXRDb21tYW5kOjptb3ZlUGFyYWdyYXBoCiAgICAgZGVzdGluYXRpb25JbmRleCA9IFRl
eHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgoc3RhcnRUb0Rlc3RpbmF0aW9uUmFuZ2UuZ2V0KCksIHRy
dWUpOwogICAgIAogICAgIHNldEVuZGluZ1NlbGVjdGlvbihkZXN0aW5hdGlvbik7Ci0gICAgYXBw
bHlDb21tYW5kVG9Db21wb3NpdGUobmV3IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kKGRvY3VtZW50
KCksIGZyYWdtZW50LmdldCgpLCB0cnVlLCBmYWxzZSwgIXByZXNlcnZlU3R5bGUsIGZhbHNlLCB0
cnVlKSk7CisgICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoUmVwbGFjZVNlbGVjdGlvbkNvbW1h
bmQ6OmNyZWF0ZShkb2N1bWVudCgpLCBmcmFnbWVudC5nZXQoKSwgdHJ1ZSwgZmFsc2UsICFwcmVz
ZXJ2ZVN0eWxlLCBmYWxzZSwgdHJ1ZSkpOwogICAgIAogICAgIGlmIChwcmVzZXJ2ZVNlbGVjdGlv
biAmJiBzdGFydEluZGV4ICE9IC0xKSB7CiAgICAgICAgIC8vIEZyYWdtZW50IGNyZWF0aW9uICh1
c2luZyBjcmVhdGVNYXJrdXApIGluY29ycmVjdGx5IHVzZXMgcmVndWxhcgpAQCAtOTE3LDE4ICs5
MTcsMTggQEAgUG9zaXRpb24gQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnBvc2l0aW9uQQogCiAvLyBT
cGxpdHMgdGhlIHRyZWUgcGFyZW50IGJ5IHBhcmVudCB1bnRpbCB3ZSByZWFjaCB0aGUgc3BlY2lm
aWVkIGFuY2VzdG9yLiBXZSB1c2UgVmlzaWJsZVBvc2l0aW9ucwogLy8gdG8gZGV0ZXJtaW5lIGlm
IHRoZSBzcGxpdCBpcyBuZWNlc3NhcnkuIFJldHVybnMgdGhlIGxhc3Qgc3BsaXQgbm9kZS4KLU5v
ZGUqIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpzcGxpdFRyZWVUb05vZGUoTm9kZSogc3RhcnQsIE5v
ZGUqIGVuZCwgYm9vbCBzcGxpdEFuY2VzdG9yKQorUGFzc1JlZlB0cjxOb2RlPiBDb21wb3NpdGVF
ZGl0Q29tbWFuZDo6c3BsaXRUcmVlVG9Ob2RlKE5vZGUqIHN0YXJ0LCBOb2RlKiBlbmQsIGJvb2wg
c3BsaXRBbmNlc3RvcikKIHsKLSAgICBOb2RlKiBub2RlOworICAgIFJlZlB0cjxOb2RlPiBub2Rl
OwogICAgIGZvciAobm9kZSA9IHN0YXJ0OyBub2RlICYmIG5vZGUtPnBhcmVudCgpICE9IGVuZDsg
bm9kZSA9IG5vZGUtPnBhcmVudCgpKSB7CiAgICAgICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlv
bkluUGFyZW50KFBvc2l0aW9uKG5vZGUtPnBhcmVudCgpLCAwKSwgRE9XTlNUUkVBTSk7CiAgICAg
ICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkluTm9kZShQb3NpdGlvbihub2RlLCAwKSwgRE9X
TlNUUkVBTSk7CiAgICAgICAgIGlmIChwb3NpdGlvbkluUGFyZW50ICE9IHBvc2l0aW9uSW5Ob2Rl
KQotICAgICAgICAgICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUobmV3IFNwbGl0RWxlbWVudENv
bW1hbmQoc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUtPnBhcmVudCgpKSwgbm9kZSkpOworICAg
ICAgICAgICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoU3BsaXRFbGVtZW50Q29tbWFuZDo6Y3Jl
YXRlKHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlLT5wYXJlbnQoKSksIG5vZGUpKTsKICAgICB9
CiAgICAgaWYgKHNwbGl0QW5jZXN0b3IpCiAgICAgICAgIHJldHVybiBzcGxpdFRyZWVUb05vZGUo
ZW5kLCBlbmQtPnBhcmVudCgpKTsKLSAgICByZXR1cm4gbm9kZTsKKyAgICByZXR1cm4gbm9kZS5y
ZWxlYXNlKCk7CiB9CiAKIFBhc3NSZWZQdHI8RWxlbWVudD4gY3JlYXRlQmxvY2tQbGFjZWhvbGRl
ckVsZW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50KQpJbmRleDogV2ViQ29yZS9lZGl0aW5nL0NvbXBv
c2l0ZUVkaXRDb21tYW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0
ZUVkaXRDb21tYW5kLmgJKHJldmlzaW9uIDM0NDM4KQorKysgV2ViQ29yZS9lZGl0aW5nL0NvbXBv
c2l0ZUVkaXRDb21tYW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MzYsMTEgKzM2LDExIEBAIGNsYXNzIFRleHQ7CiAKIGNsYXNzIENvbXBvc2l0ZUVkaXRDb21tYW5k
IDogcHVibGljIEVkaXRDb21tYW5kIHsKIHB1YmxpYzoKLSAgICBDb21wb3NpdGVFZGl0Q29tbWFu
ZChEb2N1bWVudCopOwotCi0gICAgYm9vbCBpc0ZpcnN0Q29tbWFuZChFZGl0Q29tbWFuZCogYykg
eyByZXR1cm4gIW1fY29tbWFuZHMuaXNFbXB0eSgpICYmIG1fY29tbWFuZHMuZmlyc3QoKSA9PSBj
OyB9CisgICAgYm9vbCBpc0ZpcnN0Q29tbWFuZChFZGl0Q29tbWFuZCogY29tbWFuZCkgeyByZXR1
cm4gIW1fY29tbWFuZHMuaXNFbXB0eSgpICYmIG1fY29tbWFuZHMuZmlyc3QoKSA9PSBjb21tYW5k
OyB9CiAKIHByb3RlY3RlZDoKKyAgICBDb21wb3NpdGVFZGl0Q29tbWFuZChEb2N1bWVudCopOwor
CiAgICAgLy8KICAgICAvLyBzdWdhcnktc3dlZXQgY29udmVuaWVuY2UgZnVuY3Rpb25zIHRvIGhl
bHAgY3JlYXRlIGFuZCBhcHBseSBlZGl0IGNvbW1hbmRzIGluIGNvbXBvc2l0ZSBjb21tYW5kcwog
ICAgIC8vCkBAIC04NSwxMiArODUsMTIgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgZGVsZXRlSW5z
aWduaWZpY2FudFRleHQoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5k
KTsKICAgICB2b2lkIGRlbGV0ZUluc2lnbmlmaWNhbnRUZXh0RG93bnN0cmVhbShjb25zdCBQb3Np
dGlvbiYpOwogCi0gICAgTm9kZSAqYXBwZW5kQmxvY2tQbGFjZWhvbGRlcihOb2RlKik7Ci0gICAg
Tm9kZSAqaW5zZXJ0QmxvY2tQbGFjZWhvbGRlcihjb25zdCBQb3NpdGlvbiYpOwotICAgIE5vZGUg
KmFkZEJsb2NrUGxhY2Vob2xkZXJJZk5lZWRlZChOb2RlKik7CisgICAgUGFzc1JlZlB0cjxOb2Rl
PiBhcHBlbmRCbG9ja1BsYWNlaG9sZGVyKE5vZGUqKTsKKyAgICBQYXNzUmVmUHRyPE5vZGU+IGlu
c2VydEJsb2NrUGxhY2Vob2xkZXIoY29uc3QgUG9zaXRpb24mKTsKKyAgICBQYXNzUmVmUHRyPE5v
ZGU+IGFkZEJsb2NrUGxhY2Vob2xkZXJJZk5lZWRlZChOb2RlKik7CiAgICAgdm9pZCByZW1vdmVQ
bGFjZWhvbGRlckF0KGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOwogCi0gICAgTm9kZSogbW92ZVBh
cmFncmFwaENvbnRlbnRzVG9OZXdCbG9ja0lmTmVjZXNzYXJ5KGNvbnN0IFBvc2l0aW9uJik7Cisg
ICAgUGFzc1JlZlB0cjxOb2RlPiBtb3ZlUGFyYWdyYXBoQ29udGVudHNUb05ld0Jsb2NrSWZOZWNl
c3NhcnkoY29uc3QgUG9zaXRpb24mKTsKICAgICAKICAgICB2b2lkIHB1c2hBbmNob3JFbGVtZW50
RG93bihOb2RlKik7CiAgICAgdm9pZCBwdXNoUGFydGlhbGx5U2VsZWN0ZWRBbmNob3JFbGVtZW50
c0Rvd24oKTsKQEAgLTEwMiw3ICsxMDIsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgCiAgICAgUG9zaXRp
b24gcG9zaXRpb25Bdm9pZGluZ1NwZWNpYWxFbGVtZW50Qm91bmRhcnkoY29uc3QgUG9zaXRpb24m
LCBib29sIGFsd2F5c0F2b2lkQW5jaG9ycyA9IHRydWUpOwogICAgIAotICAgIE5vZGUqIHNwbGl0
VHJlZVRvTm9kZShOb2RlKiwgTm9kZSosIGJvb2wgc3BsaXRBbmNlc3RvciA9IGZhbHNlKTsKKyAg
ICBQYXNzUmVmUHRyPE5vZGU+IHNwbGl0VHJlZVRvTm9kZShOb2RlKiwgTm9kZSosIGJvb2wgc3Bs
aXRBbmNlc3RvciA9IGZhbHNlKTsKIAogICAgIFZlY3RvcjxSZWZQdHI8RWRpdENvbW1hbmQ+ID4g
bV9jb21tYW5kczsKIApJbmRleDogV2ViQ29yZS9lZGl0aW5nL0NyZWF0ZUxpbmtDb21tYW5kLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0NyZWF0ZUxpbmtDb21tYW5kLmgJKHJldmlz
aW9uIDM0NDM4KQorKysgV2ViQ29yZS9lZGl0aW5nL0NyZWF0ZUxpbmtDb21tYW5kLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxl
IENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsMTMgKzMwLDE5IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotY2xhc3MgQ3JlYXRlTGlua0NvbW1hbmQgOiBwdWJsaWMgQ29tcG9zaXRlRWRpdENvbW1h
bmQKLXsKK2NsYXNzIENyZWF0ZUxpbmtDb21tYW5kIDogcHVibGljIENvbXBvc2l0ZUVkaXRDb21t
YW5kIHsKIHB1YmxpYzoKLSAgICBDcmVhdGVMaW5rQ29tbWFuZChEb2N1bWVudCosIGNvbnN0IFN0
cmluZyYpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPENyZWF0ZUxpbmtDb21tYW5kPiBjcmVhdGUo
RG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIGxpbmtVUkwpCisgICAgeworICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IENyZWF0ZUxpbmtDb21tYW5kKGRvY3VtZW50LCBsaW5rVVJM
KSk7CisgICAgfQorCitwcml2YXRlOgorICAgIENyZWF0ZUxpbmtDb21tYW5kKERvY3VtZW50Kiwg
Y29uc3QgU3RyaW5nJiBsaW5rVVJMKTsKKwogICAgIHZpcnR1YWwgdm9pZCBkb0FwcGx5KCk7CiAg
ICAgdmlydHVhbCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24oKSBjb25zdCB7IHJldHVybiBFZGl0
QWN0aW9uQ3JlYXRlTGluazsgfQotcHJpdmF0ZToKKwogICAgIFN0cmluZyBtX3VybDsKIH07CiAK
SW5kZXg6IFdlYkNvcmUvZWRpdGluZy9EZWxldGVCdXR0b25Db250cm9sbGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvRGVsZXRlQnV0dG9uQ29udHJvbGxlci5jcHAJKHJldmlz
aW9uIDM0NDM4KQorKysgV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZUJ1dHRvbkNvbnRyb2xsZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
NiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwMSw4ICszMDEsNyBAQCB2b2lkIERlbGV0ZUJ1
dHRvbkNvbnRyb2xsZXI6OmRlbGV0ZVRhcmdlCiAgICAgLy8gd2l0aGluIHRoZSB0YXJnZXQsIHdl
IHVuY29uZGl0aW9uYWxseSB1cGRhdGUgdGhlIHNlbGVjdGlvbiB0byBiZQogICAgIC8vIGEgY2Fy
ZXQgd2hlcmUgdGhlIHRhcmdldCBoYWQgYmVlbi4KICAgICBQb3NpdGlvbiBwb3MgPSBwb3NpdGlv
bkJlZm9yZU5vZGUoZWxlbWVudC5nZXQoKSk7Ci0gICAgUmVmUHRyPFJlbW92ZU5vZGVDb21tYW5k
PiBjb21tYW5kID0gbmV3IFJlbW92ZU5vZGVDb21tYW5kKGVsZW1lbnQuZ2V0KCkpOwotICAgIGNv
bW1hbmQtPmFwcGx5KCk7CisgICAgYXBwbHlDb21tYW5kKFJlbW92ZU5vZGVDb21tYW5kOjpjcmVh
dGUoZWxlbWVudC5yZWxlYXNlKCkpKTsKICAgICBtX2ZyYW1lLT5zZWxlY3Rpb25Db250cm9sbGVy
KCktPnNldFNlbGVjdGlvbihWaXNpYmxlUG9zaXRpb24ocG9zKSk7CiB9CiAKSW5kZXg6IFdlYkNv
cmUvZWRpdGluZy9EZWxldGVGcm9tVGV4dE5vZGVDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2VkaXRpbmcvRGVsZXRlRnJvbVRleHROb2RlQ29tbWFuZC5jcHAJKHJldmlzaW9uIDM0
NDM4KQorKysgV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZUZyb21UZXh0Tm9kZUNvbW1hbmQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSBB
cHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwNSwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDggKzMwLDggQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1EZWxldGVGcm9tVGV4dE5vZGVDb21tYW5kOjpEZWxldGVGcm9tVGV4dE5vZGVDb21t
YW5kKFRleHQgKm5vZGUsIGludCBvZmZzZXQsIGludCBjb3VudCkKLSAgICA6IEVkaXRDb21tYW5k
KG5vZGUtPmRvY3VtZW50KCkpLCBtX25vZGUobm9kZSksIG1fb2Zmc2V0KG9mZnNldCksIG1fY291
bnQoY291bnQpCitEZWxldGVGcm9tVGV4dE5vZGVDb21tYW5kOjpEZWxldGVGcm9tVGV4dE5vZGVD
b21tYW5kKFBhc3NSZWZQdHI8VGV4dD4gbm9kZSwgaW50IG9mZnNldCwgaW50IGNvdW50KQorICAg
IDogU2ltcGxlRWRpdENvbW1hbmQobm9kZS0+ZG9jdW1lbnQoKSksIG1fbm9kZShub2RlKSwgbV9v
ZmZzZXQob2Zmc2V0KSwgbV9jb3VudChjb3VudCkKIHsKICAgICBBU1NFUlQobV9ub2RlKTsKICAg
ICBBU1NFUlQobV9vZmZzZXQgPj0gMCk7CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvRGVsZXRlRnJv
bVRleHROb2RlQ29tbWFuZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9EZWxldGVG
cm9tVGV4dE5vZGVDb21tYW5kLmgJKHJldmlzaW9uIDM0NDM4KQorKysgV2ViQ29yZS9lZGl0aW5n
L0RlbGV0ZUZyb21UZXh0Tm9kZUNvbW1hbmQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0zMiwxOCArMzIsMTkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBU
ZXh0OwogCi1jbGFzcyBEZWxldGVGcm9tVGV4dE5vZGVDb21tYW5kIDogcHVibGljIEVkaXRDb21t
YW5kIHsKK2NsYXNzIERlbGV0ZUZyb21UZXh0Tm9kZUNvbW1hbmQgOiBwdWJsaWMgU2ltcGxlRWRp
dENvbW1hbmQgewogcHVibGljOgotICAgIERlbGV0ZUZyb21UZXh0Tm9kZUNvbW1hbmQoVGV4dCos
IGludCBvZmZzZXQsIGludCBjb3VudCk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RGVsZXRlRnJv
bVRleHROb2RlQ29tbWFuZD4gY3JlYXRlKFBhc3NSZWZQdHI8VGV4dD4gbm9kZSwgaW50IG9mZnNl
dCwgaW50IGNvdW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEZWxldGVG
cm9tVGV4dE5vZGVDb21tYW5kKG5vZGUsIG9mZnNldCwgY291bnQpKTsKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgRGVsZXRlRnJvbVRleHROb2RlQ29tbWFuZChQYXNzUmVmUHRyPFRleHQ+LCBpbnQg
b2Zmc2V0LCBpbnQgY291bnQpOwogCiAgICAgdmlydHVhbCB2b2lkIGRvQXBwbHkoKTsKICAgICB2
aXJ0dWFsIHZvaWQgZG9VbmFwcGx5KCk7CiAKLSAgICBUZXh0KiBub2RlKCkgY29uc3QgeyByZXR1
cm4gbV9ub2RlLmdldCgpOyB9Ci0gICAgaW50IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zm
c2V0OyB9Ci0gICAgaW50IGNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9jb3VudDsgfQotCi1wcml2
YXRlOgogICAgIFJlZlB0cjxUZXh0PiBtX25vZGU7CiAgICAgaW50IG1fb2Zmc2V0OwogICAgIGlu
dCBtX2NvdW50OwpJbmRleDogV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5o
CShyZXZpc2lvbiAzNDQzOCkKKysrIFdlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21t
YW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIsMTMgKzMyLDIy
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZCA6
IHB1YmxpYyBDb21wb3NpdGVFZGl0Q29tbWFuZCB7IAogcHVibGljOgotICAgIERlbGV0ZVNlbGVj
dGlvbkNvbW1hbmQoRG9jdW1lbnQqLCBib29sIHNtYXJ0RGVsZXRlID0gZmFsc2UsIGJvb2wgbWVy
Z2VCbG9ja3NBZnRlckRlbGV0ZSA9IHRydWUsIGJvb2wgcmVwbGFjZSA9IGZhbHNlLCBib29sIGV4
cGFuZEZvclNwZWNpYWxFbGVtZW50cyA9IGZhbHNlKTsKLSAgICBEZWxldGVTZWxlY3Rpb25Db21t
YW5kKGNvbnN0IFNlbGVjdGlvbiYsIGJvb2wgc21hcnREZWxldGUgPSBmYWxzZSwgYm9vbCBtZXJn
ZUJsb2Nrc0FmdGVyRGVsZXRlID0gdHJ1ZSwgYm9vbCByZXBsYWNlID0gZmFsc2UsIGJvb2wgZXhw
YW5kRm9yU3BlY2lhbEVsZW1lbnRzID0gZmFsc2UpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPERl
bGV0ZVNlbGVjdGlvbkNvbW1hbmQ+IGNyZWF0ZShEb2N1bWVudCogZG9jdW1lbnQsIGJvb2wgc21h
cnREZWxldGUgPSBmYWxzZSwgYm9vbCBtZXJnZUJsb2Nrc0FmdGVyRGVsZXRlID0gdHJ1ZSwgYm9v
bCByZXBsYWNlID0gZmFsc2UsIGJvb2wgZXhwYW5kRm9yU3BlY2lhbEVsZW1lbnRzID0gZmFsc2Up
CisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IERlbGV0ZVNlbGVjdGlvbkNvbW1h
bmQoZG9jdW1lbnQsIHNtYXJ0RGVsZXRlLCBtZXJnZUJsb2Nrc0FmdGVyRGVsZXRlLCByZXBsYWNl
LCBleHBhbmRGb3JTcGVjaWFsRWxlbWVudHMpKTsKKyAgICB9CisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8RGVsZXRlU2VsZWN0aW9uQ29tbWFuZD4gY3JlYXRlKGNvbnN0IFNlbGVjdGlvbiYgc2VsZWN0
aW9uLCBib29sIHNtYXJ0RGVsZXRlID0gZmFsc2UsIGJvb2wgbWVyZ2VCbG9ja3NBZnRlckRlbGV0
ZSA9IHRydWUsIGJvb2wgcmVwbGFjZSA9IGZhbHNlLCBib29sIGV4cGFuZEZvclNwZWNpYWxFbGVt
ZW50cyA9IGZhbHNlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEZWxldGVT
ZWxlY3Rpb25Db21tYW5kKHNlbGVjdGlvbiwgc21hcnREZWxldGUsIG1lcmdlQmxvY2tzQWZ0ZXJE
ZWxldGUsIHJlcGxhY2UsIGV4cGFuZEZvclNwZWNpYWxFbGVtZW50cykpOworICAgIH0KKworcHJp
dmF0ZToKKyAgICBEZWxldGVTZWxlY3Rpb25Db21tYW5kKERvY3VtZW50KiwgYm9vbCBzbWFydERl
bGV0ZSwgYm9vbCBtZXJnZUJsb2Nrc0FmdGVyRGVsZXRlLCBib29sIHJlcGxhY2UsIGJvb2wgZXhw
YW5kRm9yU3BlY2lhbEVsZW1lbnRzKTsKKyAgICBEZWxldGVTZWxlY3Rpb25Db21tYW5kKGNvbnN0
IFNlbGVjdGlvbiYsIGJvb2wgc21hcnREZWxldGUsIGJvb2wgbWVyZ2VCbG9ja3NBZnRlckRlbGV0
ZSwgYm9vbCByZXBsYWNlLCBib29sIGV4cGFuZEZvclNwZWNpYWxFbGVtZW50cyk7CiAKICAgICB2
aXJ0dWFsIHZvaWQgZG9BcHBseSgpOwogICAgIHZpcnR1YWwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0
aW9uKCkgY29uc3Q7CiAgICAgCi1wcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBwcmVzZXJ2ZXNU
eXBpbmdTdHlsZSgpIGNvbnN0OwogCiAgICAgdm9pZCBpbml0aWFsaXplU3RhcnRFbmQoUG9zaXRp
b24mLCBQb3NpdGlvbiYpOwpJbmRleDogV2ViQ29yZS9lZGl0aW5nL0VkaXRDb21tYW5kLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0VkaXRDb21tYW5kLmgJKHJldmlzaW9uIDM0NDM4
KQorKysgV2ViQ29yZS9lZGl0aW5nL0VkaXRDb21tYW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVy
LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2
LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMzcsNyArMzcsNiBAQCBjbGFzcyBDU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbjsKIAogY2xhc3MgRWRpdENvbW1hbmQgOiBwdWJsaWMgUmVmQ291bnRlZDxFZGl0Q29t
bWFuZD4gewogcHVibGljOgotICAgIEVkaXRDb21tYW5kKERvY3VtZW50Kik7CiAgICAgdmlydHVh
bCB+RWRpdENvbW1hbmQoKTsKIAogICAgIHZvaWQgc2V0UGFyZW50KENvbXBvc2l0ZUVkaXRDb21t
YW5kKik7CkBAIC02MSw2ICs2MCw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNUeXBp
bmdDb21tYW5kKCkgY29uc3Q7CiAKIHByb3RlY3RlZDoKKyAgICBFZGl0Q29tbWFuZChEb2N1bWVu
dCopOworCiAgICAgRG9jdW1lbnQqIGRvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9kb2N1bWVu
dC5nZXQoKTsgfQogCiAgICAgdm9pZCBzZXRTdGFydGluZ1NlbGVjdGlvbihjb25zdCBTZWxlY3Rp
b24mKTsKQEAgLTg3LDYgKzg4LDExIEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIHZvaWQgYXBwbHlD
b21tYW5kKFBhc3NSZWZQdHI8RWRpdENvbW1hbmQ+KTsKIH07CiAKK2NsYXNzIFNpbXBsZUVkaXRD
b21tYW5kIDogcHVibGljIEVkaXRDb21tYW5kIHsKK3Byb3RlY3RlZDoKKyAgICBTaW1wbGVFZGl0
Q29tbWFuZChEb2N1bWVudCogZG9jdW1lbnQpIDogRWRpdENvbW1hbmQoZG9jdW1lbnQpIHsgfQor
fTsKKwogdm9pZCBhcHBseUNvbW1hbmQoUGFzc1JlZlB0cjxFZGl0Q29tbWFuZD4pOwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAkocmV2aXNpb24gMzQ0MzgpCisr
KyBXZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjc2LDcgKzI3
Niw3IEBAIHZvaWQgRWRpdG9yOjpkZWxldGVTZWxlY3Rpb25XaXRoU21hcnREZWwKICAgICBpZiAo
bV9mcmFtZS0+c2VsZWN0aW9uQ29udHJvbGxlcigpLT5pc05vbmUoKSkKICAgICAgICAgcmV0dXJu
OwogICAgIAotICAgIGFwcGx5Q29tbWFuZChuZXcgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZChtX2Zy
YW1lLT5kb2N1bWVudCgpLCBzbWFydERlbGV0ZSkpOworICAgIGFwcGx5Q29tbWFuZChEZWxldGVT
ZWxlY3Rpb25Db21tYW5kOjpjcmVhdGUobV9mcmFtZS0+ZG9jdW1lbnQoKSwgc21hcnREZWxldGUp
KTsKIH0KIAogdm9pZCBFZGl0b3I6OnBhc3RlQXNQbGFpblRleHRXaXRoUGFzdGVib2FyZChQYXN0
ZWJvYXJkKiBwYXN0ZWJvYXJkKQpAQCAtMzE3LDcgKzMxNyw3IEBAIHZvaWQgRWRpdG9yOjpyZXBs
YWNlU2VsZWN0aW9uV2l0aEZyYWdtZW4KICAgICBpZiAobV9mcmFtZS0+c2VsZWN0aW9uQ29udHJv
bGxlcigpLT5pc05vbmUoKSB8fCAhZnJhZ21lbnQpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAg
ICBhcHBseUNvbW1hbmQobmV3IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kKG1fZnJhbWUtPmRvY3Vt
ZW50KCksIGZyYWdtZW50LCBzZWxlY3RSZXBsYWNlbWVudCwgc21hcnRSZXBsYWNlLCBtYXRjaFN0
eWxlKSk7CisgICAgYXBwbHlDb21tYW5kKFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpjcmVhdGUo
bV9mcmFtZS0+ZG9jdW1lbnQoKSwgZnJhZ21lbnQsIHNlbGVjdFJlcGxhY2VtZW50LCBzbWFydFJl
cGxhY2UsIG1hdGNoU3R5bGUpKTsKICAgICByZXZlYWxTZWxlY3Rpb25BZnRlckVkaXRpbmdPcGVy
YXRpb24oKTsKIH0KIApAQCAtNTYwLDEyICs1NjAsMTIgQEAgdm9pZCBFZGl0b3I6OmRlY3JlYXNl
U2VsZWN0aW9uTGlzdExldmVsKAogCiB2b2lkIEVkaXRvcjo6cmVtb3ZlRm9ybWF0dGluZ0FuZFN0
eWxlKCkKIHsKLSAgICBhcHBseUNvbW1hbmQobmV3IFJlbW92ZUZvcm1hdENvbW1hbmQobV9mcmFt
ZS0+ZG9jdW1lbnQoKSkpOworICAgIGFwcGx5Q29tbWFuZChSZW1vdmVGb3JtYXRDb21tYW5kOjpj
cmVhdGUobV9mcmFtZS0+ZG9jdW1lbnQoKSkpOwogfQogCi12b2lkIEVkaXRvcjo6c2V0TGFzdEVk
aXRDb21tYW5kKFBhc3NSZWZQdHI8RWRpdENvbW1hbmQ+IGxhc3RFZGl0Q29tbWFuZCkgCit2b2lk
IEVkaXRvcjo6Y2xlYXJMYXN0RWRpdENvbW1hbmQoKSAKIHsKLSAgICBtX2xhc3RFZGl0Q29tbWFu
ZCA9IGxhc3RFZGl0Q29tbWFuZDsKKyAgICBtX2xhc3RFZGl0Q29tbWFuZC5jbGVhcigpOwogfQog
CiAvLyBSZXR1cm5zIHdoZXRoZXIgY2FsbGVyIHNob3VsZCBjb250aW51ZSB3aXRoICJ0aGUgZGVm
YXVsdCBwcm9jZXNzaW5nIiwgd2hpY2ggaXMgdGhlIHNhbWUgYXMgCkBAIC01ODIsNyArNTgyLDcg
QEAgYm9vbCBFZGl0b3I6OmRpc3BhdGNoQ1BQRXZlbnQoY29uc3QgQXRvbQogICAgIFJlZlB0cjxD
bGlwYm9hcmQ+IGNsaXBib2FyZCA9IG5ld0dlbmVyYWxDbGlwYm9hcmQocG9saWN5KTsKIAogICAg
IEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIFJlZlB0cjxFdmVudD4gZXZ0ID0gbmV3IENsaXBi
b2FyZEV2ZW50KGV2ZW50VHlwZSwgdHJ1ZSwgdHJ1ZSwgY2xpcGJvYXJkLmdldCgpKTsKKyAgICBS
ZWZQdHI8RXZlbnQ+IGV2dCA9IENsaXBib2FyZEV2ZW50OjpjcmVhdGUoZXZlbnRUeXBlLCB0cnVl
LCB0cnVlLCBjbGlwYm9hcmQpOwogICAgIEV2ZW50VGFyZ2V0Tm9kZUNhc3QodGFyZ2V0KS0+ZGlz
cGF0Y2hFdmVudChldnQsIGVjLCB0cnVlKTsKICAgICBib29sIG5vRGVmYXVsdFByb2Nlc3Npbmcg
PSBldnQtPmRlZmF1bHRQcmV2ZW50ZWQoKTsKIApAQCAtNjAzLDcgKzYwMyw3IEBAIHZvaWQgRWRp
dG9yOjphcHBseVN0eWxlKENTU1N0eWxlRGVjbGFyYXQKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlIFNlbGVjdGlvbjo6UkFOR0U6CiAgICAgICAgICAgICBpZiAobV9mcmFtZS0+ZG9j
dW1lbnQoKSAmJiBzdHlsZSkKLSAgICAgICAgICAgICAgICBhcHBseUNvbW1hbmQobmV3IEFwcGx5
U3R5bGVDb21tYW5kKG1fZnJhbWUtPmRvY3VtZW50KCksIHN0eWxlLCBlZGl0aW5nQWN0aW9uKSk7
CisgICAgICAgICAgICAgICAgYXBwbHlDb21tYW5kKEFwcGx5U3R5bGVDb21tYW5kOjpjcmVhdGUo
bV9mcmFtZS0+ZG9jdW1lbnQoKSwgc3R5bGUsIGVkaXRpbmdBY3Rpb24pKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgIH0KIH0KQEAgLTYyMiw3ICs2MjIsNyBAQCB2b2lkIEVkaXRvcjo6YXBwbHlQ
YXJhZ3JhcGhTdHlsZShDU1NTdHlsCiAgICAgICAgIGNhc2UgU2VsZWN0aW9uOjpDQVJFVDoKICAg
ICAgICAgY2FzZSBTZWxlY3Rpb246OlJBTkdFOgogICAgICAgICAgICAgaWYgKG1fZnJhbWUtPmRv
Y3VtZW50KCkgJiYgc3R5bGUpCi0gICAgICAgICAgICAgICAgYXBwbHlDb21tYW5kKG5ldyBBcHBs
eVN0eWxlQ29tbWFuZChtX2ZyYW1lLT5kb2N1bWVudCgpLCBzdHlsZSwgZWRpdGluZ0FjdGlvbiwg
QXBwbHlTdHlsZUNvbW1hbmQ6OkZvcmNlQmxvY2tQcm9wZXJ0aWVzKSk7CisgICAgICAgICAgICAg
ICAgYXBwbHlDb21tYW5kKEFwcGx5U3R5bGVDb21tYW5kOjpjcmVhdGUobV9mcmFtZS0+ZG9jdW1l
bnQoKSwgc3R5bGUsIGVkaXRpbmdBY3Rpb24sIEFwcGx5U3R5bGVDb21tYW5kOjpGb3JjZUJsb2Nr
UHJvcGVydGllcykpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogfQpAQCAtNzMxLDEyICs3
MzEsMTIgQEAgVHJpU3RhdGUgRWRpdG9yOjpzZWxlY3Rpb25IYXNTdHlsZShDU1NTdAogfQogdm9p
ZCBFZGl0b3I6OmluZGVudCgpCiB7Ci0gICAgYXBwbHlDb21tYW5kKG5ldyBJbmRlbnRPdXRkZW50
Q29tbWFuZChtX2ZyYW1lLT5kb2N1bWVudCgpLCBJbmRlbnRPdXRkZW50Q29tbWFuZDo6SW5kZW50
KSk7CisgICAgYXBwbHlDb21tYW5kKEluZGVudE91dGRlbnRDb21tYW5kOjpjcmVhdGUobV9mcmFt
ZS0+ZG9jdW1lbnQoKSwgSW5kZW50T3V0ZGVudENvbW1hbmQ6OkluZGVudCkpOwogfQogCiB2b2lk
IEVkaXRvcjo6b3V0ZGVudCgpCiB7Ci0gICAgYXBwbHlDb21tYW5kKG5ldyBJbmRlbnRPdXRkZW50
Q29tbWFuZChtX2ZyYW1lLT5kb2N1bWVudCgpLCBJbmRlbnRPdXRkZW50Q29tbWFuZDo6T3V0ZGVu
dCkpOworICAgIGFwcGx5Q29tbWFuZChJbmRlbnRPdXRkZW50Q29tbWFuZDo6Y3JlYXRlKG1fZnJh
bWUtPmRvY3VtZW50KCksIEluZGVudE91dGRlbnRDb21tYW5kOjpPdXRkZW50KSk7CiB9CiAKIHN0
YXRpYyB2b2lkIGRpc3BhdGNoRWRpdGFibGVDb250ZW50Q2hhbmdlZEV2ZW50cyhjb25zdCBFZGl0
Q29tbWFuZCYgY29tbWFuZCkKQEAgLTc0NSw5ICs3NDUsOSBAQCBzdGF0aWMgdm9pZCBkaXNwYXRj
aEVkaXRhYmxlQ29udGVudENoYW5nCiAgICAgRWxlbWVudCogZW5kUm9vdCA9IGNvbW1hbmQuZW5k
aW5nUm9vdEVkaXRhYmxlRWxlbWVudCgpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWM7CiAgICAgaWYg
KHN0YXJ0Um9vdCkKLSAgICAgICAgc3RhcnRSb290LT5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCh3
ZWJraXRFZGl0YWJsZUNvbnRlbnRDaGFuZ2VkRXZlbnQsIGZhbHNlLCBmYWxzZSksIGVjLCB0cnVl
KTsKKyAgICAgICAgc3RhcnRSb290LT5kaXNwYXRjaEV2ZW50KEV2ZW50OjpjcmVhdGUod2Via2l0
RWRpdGFibGVDb250ZW50Q2hhbmdlZEV2ZW50LCBmYWxzZSwgZmFsc2UpLCBlYywgdHJ1ZSk7CiAg
ICAgaWYgKGVuZFJvb3QgJiYgZW5kUm9vdCAhPSBzdGFydFJvb3QpCi0gICAgICAgIGVuZFJvb3Qt
PmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KHdlYmtpdEVkaXRhYmxlQ29udGVudENoYW5nZWRFdmVu
dCwgZmFsc2UsIGZhbHNlKSwgZWMsIHRydWUpOworICAgICAgICBlbmRSb290LT5kaXNwYXRjaEV2
ZW50KEV2ZW50OjpjcmVhdGUod2Via2l0RWRpdGFibGVDb250ZW50Q2hhbmdlZEV2ZW50LCBmYWxz
ZSwgZmFsc2UpLCBlYywgdHJ1ZSk7CiB9CiAKIHZvaWQgRWRpdG9yOjphcHBsaWVkRWRpdGluZyhQ
YXNzUmVmUHRyPEVkaXRDb21tYW5kPiBjbWQpCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvRWRpdG9y
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCShyZXZpc2lvbiAzNDQz
OCkKKysrIFdlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMTI4LDkg
KzEyOCw3IEBAIHB1YmxpYzoKICAgIAogICAgIHZvaWQgcmVtb3ZlRm9ybWF0dGluZ0FuZFN0eWxl
KCk7CiAKLSAgICAvLyBGSVhNRTogT25jZSB0aGUgRWRpdG9yIGltcGxlbWVudHMgYWxsIGVkaXRp
bmcgY29tbWFuZHMsIGl0IHNob3VsZCB0cmFjayAKLSAgICAvLyB0aGUgbGFzdEVkaXRDb21tYW5k
IG9uIGl0cyBvd24sIGFuZCB3ZSBzaG91bGQgcmVtb3ZlIHRoaXMgZnVuY3Rpb24uCi0gICAgdm9p
ZCBzZXRMYXN0RWRpdENvbW1hbmQoUGFzc1JlZlB0cjxFZGl0Q29tbWFuZD4gbGFzdEVkaXRDb21t
YW5kKTsKKyAgICB2b2lkIGNsZWFyTGFzdEVkaXRDb21tYW5kKCk7CiAKICAgICBib29sIGRlbGV0
ZVdpdGhEaXJlY3Rpb24oU2VsZWN0aW9uQ29udHJvbGxlcjo6RURpcmVjdGlvbiwgVGV4dEdyYW51
bGFyaXR5LCBib29sIGtpbGxSaW5nLCBib29sIGlzVHlwaW5nQWN0aW9uKTsKICAgICB2b2lkIGRl
bGV0ZVNlbGVjdGlvbldpdGhTbWFydERlbGV0ZShib29sIHNtYXJ0RGVsZXRlKTsKSW5kZXg6IFdl
YkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Vk
aXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAJKHJldmlzaW9uIDM0NDM4KQorKysgV2ViQ29yZS9lZGl0
aW5nL0VkaXRvckNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA3IFRyb2xsdGVjaCBBU0EKICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKQEAgLTE2NSw3ICsxNjUsNyBAQCBzdGF0aWMgYm9vbCBleGVjdXRlQXBwbHlQ
YXJhZ3JhcGhTdHlsZShGCiAKIHN0YXRpYyBib29sIGV4ZWN1dGVJbnNlcnRGcmFnbWVudChGcmFt
ZSogZnJhbWUsIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQpCiB7Ci0gICAg
YXBwbHlDb21tYW5kKG5ldyBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZChmcmFtZS0+ZG9jdW1lbnQo
KSwgZnJhZ21lbnQsCisgICAgYXBwbHlDb21tYW5kKFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpj
cmVhdGUoZnJhbWUtPmRvY3VtZW50KCksIGZyYWdtZW50LAogICAgICAgICBmYWxzZSwgZmFsc2Us
IGZhbHNlLCB0cnVlLCBmYWxzZSwgRWRpdEFjdGlvblVuc3BlY2lmaWVkKSk7CiAgICAgcmV0dXJu
IHRydWU7CiB9CkBAIC0yNTYsNyArMjU2LDcgQEAgc3RhdGljIGJvb2wgZXhlY3V0ZUNyZWF0ZUxp
bmsoRnJhbWUqIGZyYQogICAgIC8vIEZJWE1FOiBJZiB1c2VySW50ZXJmYWNlIGlzIHRydWUsIHdl
IHNob3VsZCBkaXNwbGF5IGEgZGlhbG9nIGJveCB0byBsZXQgdGhlIHVzZXIgZW50ZXIgYSBVUkwu
CiAgICAgaWYgKHZhbHVlLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGFw
cGx5Q29tbWFuZChuZXcgQ3JlYXRlTGlua0NvbW1hbmQoZnJhbWUtPmRvY3VtZW50KCksIHZhbHVl
KSk7CisgICAgYXBwbHlDb21tYW5kKENyZWF0ZUxpbmtDb21tYW5kOjpjcmVhdGUoZnJhbWUtPmRv
Y3VtZW50KCksIHZhbHVlKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTM5Myw3ICszOTMs
NyBAQCBzdGF0aWMgYm9vbCBleGVjdXRlRm9ybWF0QmxvY2soRnJhbWUqIGZyCiAgICAgICAgIHRh
Z05hbWUgPSB0YWdOYW1lLnN1YnN0cmluZygxLCB0YWdOYW1lLmxlbmd0aCgpIC0gMik7CiAgICAg
aWYgKCF2YWxpZEJsb2NrVGFnKHRhZ05hbWUpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
YXBwbHlDb21tYW5kKG5ldyBGb3JtYXRCbG9ja0NvbW1hbmQoZnJhbWUtPmRvY3VtZW50KCksIHRh
Z05hbWUpKTsKKyAgICBhcHBseUNvbW1hbmQoRm9ybWF0QmxvY2tDb21tYW5kOjpjcmVhdGUoZnJh
bWUtPmRvY3VtZW50KCksIHRhZ05hbWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtNDE3
LDcgKzQxNyw3IEBAIHN0YXRpYyBib29sIGV4ZWN1dGVGb3J3YXJkRGVsZXRlKEZyYW1lKiAKIAog
c3RhdGljIGJvb2wgZXhlY3V0ZUluZGVudChGcmFtZSogZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29t
bWFuZFNvdXJjZSwgY29uc3QgU3RyaW5nJikKIHsKLSAgICBhcHBseUNvbW1hbmQobmV3IEluZGVu
dE91dGRlbnRDb21tYW5kKGZyYW1lLT5kb2N1bWVudCgpLCBJbmRlbnRPdXRkZW50Q29tbWFuZDo6
SW5kZW50KSk7CisgICAgYXBwbHlDb21tYW5kKEluZGVudE91dGRlbnRDb21tYW5kOjpjcmVhdGUo
ZnJhbWUtPmRvY3VtZW50KCksIEluZGVudE91dGRlbnRDb21tYW5kOjpJbmRlbnQpKTsKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIApAQCAtNDc4LDcgKzQ3OCw3IEBAIHN0YXRpYyBib29sIGV4ZWN1dGVJ
bnNlcnROZXdsaW5lSW5RdW90ZWQKIAogc3RhdGljIGJvb2wgZXhlY3V0ZUluc2VydE9yZGVyZWRM
aXN0KEZyYW1lKiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJp
bmcmIHZhbHVlKQogewotICAgIGFwcGx5Q29tbWFuZChuZXcgSW5zZXJ0TGlzdENvbW1hbmQoZnJh
bWUtPmRvY3VtZW50KCksIEluc2VydExpc3RDb21tYW5kOjpPcmRlcmVkTGlzdCwgdmFsdWUpKTsK
KyAgICBhcHBseUNvbW1hbmQoSW5zZXJ0TGlzdENvbW1hbmQ6OmNyZWF0ZShmcmFtZS0+ZG9jdW1l
bnQoKSwgSW5zZXJ0TGlzdENvbW1hbmQ6Ok9yZGVyZWRMaXN0LCB2YWx1ZSkpOwogICAgIHJldHVy
biB0cnVlOwogfQogCkBAIC01MDEsNyArNTAxLDcgQEAgc3RhdGljIGJvb2wgZXhlY3V0ZUluc2Vy
dFRleHQoRnJhbWUqIGZyYQogCiBzdGF0aWMgYm9vbCBleGVjdXRlSW5zZXJ0VW5vcmRlcmVkTGlz
dChGcmFtZSogZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3RyaW5n
JiB2YWx1ZSkKIHsKLSAgICBhcHBseUNvbW1hbmQobmV3IEluc2VydExpc3RDb21tYW5kKGZyYW1l
LT5kb2N1bWVudCgpLCBJbnNlcnRMaXN0Q29tbWFuZDo6VW5vcmRlcmVkTGlzdCwgdmFsdWUpKTsK
KyAgICBhcHBseUNvbW1hbmQoSW5zZXJ0TGlzdENvbW1hbmQ6OmNyZWF0ZShmcmFtZS0+ZG9jdW1l
bnQoKSwgSW5zZXJ0TGlzdENvbW1hbmQ6OlVub3JkZXJlZExpc3QsIHZhbHVlKSk7CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKQEAgLTc4Nyw3ICs3ODcsNyBAQCBzdGF0aWMgYm9vbCBleGVjdXRlTW92
ZVdvcmRSaWdodEFuZE1vZGlmCiAKIHN0YXRpYyBib29sIGV4ZWN1dGVPdXRkZW50KEZyYW1lKiBm
cmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcmKQogewotICAg
IGFwcGx5Q29tbWFuZChuZXcgSW5kZW50T3V0ZGVudENvbW1hbmQoZnJhbWUtPmRvY3VtZW50KCks
IEluZGVudE91dGRlbnRDb21tYW5kOjpPdXRkZW50KSk7CisgICAgYXBwbHlDb21tYW5kKEluZGVu
dE91dGRlbnRDb21tYW5kOjpjcmVhdGUoZnJhbWUtPmRvY3VtZW50KCksIEluZGVudE91dGRlbnRD
b21tYW5kOjpPdXRkZW50KSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTkyNiw3ICs5MjYs
NyBAQCBzdGF0aWMgYm9vbCBleGVjdXRlVW5kbyhGcmFtZSogZnJhbWUsIEV2CiAKIHN0YXRpYyBi
b29sIGV4ZWN1dGVVbmxpbmsoRnJhbWUqIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3Vy
Y2UsIGNvbnN0IFN0cmluZyYpCiB7Ci0gICAgYXBwbHlDb21tYW5kKG5ldyBVbmxpbmtDb21tYW5k
KGZyYW1lLT5kb2N1bWVudCgpKSk7CisgICAgYXBwbHlDb21tYW5kKFVubGlua0NvbW1hbmQ6OmNy
ZWF0ZShmcmFtZS0+ZG9jdW1lbnQoKSkpOwogICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4OiBX
ZWJDb3JlL2VkaXRpbmcvRm9ybWF0QmxvY2tDb21tYW5kLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9lZGl0aW5nL0Zvcm1hdEJsb2NrQ29tbWFuZC5oCShyZXZpc2lvbiAzNDQzOCkKKysrIFdlYkNv
cmUvZWRpdGluZy9Gb3JtYXRCbG9ja0NvbW1hbmQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0zMiwxMCArMzIsMTcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGb3JtYXRCbG9j
a0NvbW1hbmQgOiBwdWJsaWMgQ29tcG9zaXRlRWRpdENvbW1hbmQgewogcHVibGljOgorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPEZvcm1hdEJsb2NrQ29tbWFuZD4gY3JlYXRlKERvY3VtZW50KiBkb2N1
bWVudCwgY29uc3QgU3RyaW5nJiB0YWdOYW1lKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBGb3JtYXRCbG9ja0NvbW1hbmQoZG9jdW1lbnQsIHRhZ05hbWUpKTsKKyAgICB9CisK
K3ByaXZhdGU6CiAgICAgRm9ybWF0QmxvY2tDb21tYW5kKERvY3VtZW50KiwgY29uc3QgU3RyaW5n
JiB0YWdOYW1lKTsKKwogICAgIHZpcnR1YWwgdm9pZCBkb0FwcGx5KCk7CiAgICAgdmlydHVhbCBF
ZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24oKSBjb25zdCB7IHJldHVybiBFZGl0QWN0aW9uRm9ybWF0
QmxvY2s7IH0KLXByaXZhdGU6CisKICAgICBib29sIG1vZGlmeVJhbmdlKCk7CiAgICAgU3RyaW5n
IG1fdGFnTmFtZTsKIH07CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvSW5kZW50T3V0ZGVudENvbW1h
bmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9JbmRlbnRPdXRkZW50Q29tbWFu
ZC5jcHAJKHJldmlzaW9uIDM0NDM4KQorKysgV2ViQ29yZS9lZGl0aW5nL0luZGVudE91dGRlbnRD
b21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNjYsOCArMTY2LDggQEAgdm9p
ZCBJbmRlbnRPdXRkZW50Q29tbWFuZDo6aW5kZW50UmVnaW9uKAogICAgICAgICAgICAgCiAgICAg
ICAgICAgICBOb2RlKiBlbmNsb3NpbmdDZWxsID0gZW5jbG9zaW5nTm9kZU9mVHlwZShzdGFydCwg
JmlzVGFibGVDZWxsKTsKICAgICAgICAgICAgIE5vZGUqIG5vZGVUb1NwbGl0VG8gPSBlbmNsb3Np
bmdDZWxsID8gZW5jbG9zaW5nQ2VsbCA6IGVkaXRhYmxlUm9vdEZvclBvc2l0aW9uKHN0YXJ0KTsK
LSAgICAgICAgICAgIE5vZGUqIHN0YXJ0T2ZOZXdCbG9jayA9IHNwbGl0VHJlZVRvTm9kZShzdGFy
dC5ub2RlKCksIG5vZGVUb1NwbGl0VG8pOwotICAgICAgICAgICAgaW5zZXJ0Tm9kZUJlZm9yZShi
bG9ja3F1b3RlLmdldCgpLCBzdGFydE9mTmV3QmxvY2spOworICAgICAgICAgICAgUmVmUHRyPE5v
ZGU+IHN0YXJ0T2ZOZXdCbG9jayA9IHNwbGl0VHJlZVRvTm9kZShzdGFydC5ub2RlKCksIG5vZGVU
b1NwbGl0VG8pOworICAgICAgICAgICAgaW5zZXJ0Tm9kZUJlZm9yZShibG9ja3F1b3RlLmdldCgp
LCBzdGFydE9mTmV3QmxvY2suZ2V0KCkpOwogICAgICAgICAgICAgbmV3QmxvY2txdW90ZSA9IGJs
b2NrcXVvdGUuZ2V0KCk7CiAgICAgICAgICAgICBpbnNlcnRpb25Qb2ludCA9IHByZXBhcmVCbG9j
a3F1b3RlTGV2ZWxGb3JJbnNlcnRpb24oZW5kT2ZDdXJyZW50UGFyYWdyYXBoLCAmbmV3QmxvY2tx
dW90ZSk7CiAgICAgICAgICAgICAvLyBEb24ndCBwdXQgdGhlIG5leHQgcGFyYWdyYXBoIGluIHRo
ZSBibG9ja3F1b3RlIHdlIGp1c3QgY3JlYXRlZCBmb3IgdGhpcyBwYXJhZ3JhcGggdW5sZXNzIApA
QCAtMjAyLDEwICsyMDIsMTEgQEAgdm9pZCBJbmRlbnRPdXRkZW50Q29tbWFuZDo6b3V0ZGVudFBh
cmFncgogCiAgICAgLy8gVXNlIEluc2VydExpc3RDb21tYW5kIHRvIHJlbW92ZSB0aGUgc2VsZWN0
aW9uIGZyb20gdGhlIGxpc3QKICAgICBpZiAoZW5jbG9zaW5nTm9kZS0+aGFzVGFnTmFtZShvbFRh
ZykpIHsKLSAgICAgICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUobmV3IEluc2VydExpc3RDb21t
YW5kKGRvY3VtZW50KCksIEluc2VydExpc3RDb21tYW5kOjpPcmRlcmVkTGlzdCwgIiIpKTsKKyAg
ICAgICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoSW5zZXJ0TGlzdENvbW1hbmQ6OmNyZWF0ZShk
b2N1bWVudCgpLCBJbnNlcnRMaXN0Q29tbWFuZDo6T3JkZXJlZExpc3QsICIiKSk7CiAgICAgICAg
IHJldHVybjsgICAgICAgIAotICAgIH0gZWxzZSBpZiAoZW5jbG9zaW5nTm9kZS0+aGFzVGFnTmFt
ZSh1bFRhZykpIHsKLSAgICAgICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUobmV3IEluc2VydExp
c3RDb21tYW5kKGRvY3VtZW50KCksIEluc2VydExpc3RDb21tYW5kOjpVbm9yZGVyZWRMaXN0LCAi
IikpOworICAgIH0KKyAgICBpZiAoZW5jbG9zaW5nTm9kZS0+aGFzVGFnTmFtZSh1bFRhZykpIHsK
KyAgICAgICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoSW5zZXJ0TGlzdENvbW1hbmQ6OmNyZWF0
ZShkb2N1bWVudCgpLCBJbnNlcnRMaXN0Q29tbWFuZDo6VW5vcmRlcmVkTGlzdCwgIiIpKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKQEAgLTIyNywxMSArMjI4LDExIEBAIHZvaWQgSW5k
ZW50T3V0ZGVudENvbW1hbmQ6Om91dGRlbnRQYXJhZ3IKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICAgICBOb2RlKiBlbmNsb3NpbmdCbG9ja0Zsb3cgPSBlbmNsb3NpbmdCbG9ja0Zsb3dFbGVtZW50
KHZpc2libGVTdGFydE9mUGFyYWdyYXBoKTsKLSAgICBOb2RlKiBzcGxpdEJsb2NrcXVvdGVOb2Rl
ID0gZW5jbG9zaW5nTm9kZTsKKyAgICBSZWZQdHI8Tm9kZT4gc3BsaXRCbG9ja3F1b3RlTm9kZSA9
IGVuY2xvc2luZ05vZGU7CiAgICAgaWYgKGVuY2xvc2luZ0Jsb2NrRmxvdyAhPSBlbmNsb3NpbmdO
b2RlKQogICAgICAgICBzcGxpdEJsb2NrcXVvdGVOb2RlID0gc3BsaXRUcmVlVG9Ob2RlKGVuY2xv
c2luZ0Jsb2NrRmxvd0VsZW1lbnQodmlzaWJsZVN0YXJ0T2ZQYXJhZ3JhcGgpLCBlbmNsb3NpbmdO
b2RlLCB0cnVlKTsKICAgICBSZWZQdHI8Tm9kZT4gcGxhY2Vob2xkZXIgPSBjcmVhdGVCcmVha0Vs
ZW1lbnQoZG9jdW1lbnQoKSk7Ci0gICAgaW5zZXJ0Tm9kZUJlZm9yZShwbGFjZWhvbGRlci5nZXQo
KSwgc3BsaXRCbG9ja3F1b3RlTm9kZSk7CisgICAgaW5zZXJ0Tm9kZUJlZm9yZShwbGFjZWhvbGRl
ci5nZXQoKSwgc3BsaXRCbG9ja3F1b3RlTm9kZS5nZXQoKSk7CiAgICAgbW92ZVBhcmFncmFwaChz
dGFydE9mUGFyYWdyYXBoKHZpc2libGVTdGFydE9mUGFyYWdyYXBoKSwgZW5kT2ZQYXJhZ3JhcGgo
dmlzaWJsZUVuZE9mUGFyYWdyYXBoKSwgVmlzaWJsZVBvc2l0aW9uKFBvc2l0aW9uKHBsYWNlaG9s
ZGVyLmdldCgpLCAwKSksIHRydWUpOwogfQogCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvSW5kZW50
T3V0ZGVudENvbW1hbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvSW5kZW50T3V0
ZGVudENvbW1hbmQuaAkocmV2aXNpb24gMzQ0MzgpCisrKyBXZWJDb3JlL2VkaXRpbmcvSW5kZW50
T3V0ZGVudENvbW1hbmQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCwyMCArMzAsMjcg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBJbmRlbnRPdXRkZW50Q29tbWFuZCA6
IHB1YmxpYyBDb21wb3NpdGVFZGl0Q29tbWFuZAoteworY2xhc3MgSW5kZW50T3V0ZGVudENvbW1h
bmQgOiBwdWJsaWMgQ29tcG9zaXRlRWRpdENvbW1hbmQgewogcHVibGljOgogICAgIGVudW0gRUlu
ZGVudFR5cGUgeyBJbmRlbnQsIE91dGRlbnQgfTsKLSAgICBJbmRlbnRPdXRkZW50Q29tbWFuZChE
b2N1bWVudCosIEVJbmRlbnRUeXBlLCBpbnQgbWFyZ2luSW5QaXhlbHMgPSAwKTsKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxJbmRlbnRPdXRkZW50Q29tbWFuZD4gY3JlYXRlKERvY3VtZW50KiBkb2N1
bWVudCwgRUluZGVudFR5cGUgdHlwZSwgaW50IG1hcmdpbkluUGl4ZWxzID0gMCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5kZW50T3V0ZGVudENvbW1hbmQoZG9jdW1lbnQs
IHR5cGUsIG1hcmdpbkluUGl4ZWxzKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIEluZGVudE91
dGRlbnRDb21tYW5kKERvY3VtZW50KiwgRUluZGVudFR5cGUsIGludCBtYXJnaW5JblBpeGVscyk7
CisKICAgICB2aXJ0dWFsIHZvaWQgZG9BcHBseSgpOwogICAgIHZpcnR1YWwgRWRpdEFjdGlvbiBl
ZGl0aW5nQWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV90eXBlT2ZBY3Rpb24gPT0gSW5kZW50ID8g
RWRpdEFjdGlvbkluZGVudCA6IEVkaXRBY3Rpb25PdXRkZW50OyB9Ci1wcml2YXRlOgotICAgIEVJ
bmRlbnRUeXBlIG1fdHlwZU9mQWN0aW9uOwotICAgIGludCBtX21hcmdpbkluUGl4ZWxzOworCiAg
ICAgdm9pZCBpbmRlbnRSZWdpb24oKTsKICAgICB2b2lkIG91dGRlbnRSZWdpb24oKTsKICAgICB2
b2lkIG91dGRlbnRQYXJhZ3JhcGgoKTsKICAgICBOb2RlKiBwcmVwYXJlQmxvY2txdW90ZUxldmVs
Rm9ySW5zZXJ0aW9uKFZpc2libGVQb3NpdGlvbiYsIE5vZGUqKik7CisKKyAgICBFSW5kZW50VHlw
ZSBtX3R5cGVPZkFjdGlvbjsKKyAgICBpbnQgbV9tYXJnaW5JblBpeGVsczsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9JbnNlcnRJbnRvVGV4dE5v
ZGVDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvSW5zZXJ0SW50b1Rl
eHROb2RlQ29tbWFuZC5jcHAJKHJldmlzaW9uIDM0NDM4KQorKysgV2ViQ29yZS9lZGl0aW5nL0lu
c2VydEludG9UZXh0Tm9kZUNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw4ICszMCw4
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZDo6
SW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZChUZXh0KiBub2RlLCBpbnQgb2Zmc2V0LCBjb25zdCBT
dHJpbmcmIHRleHQpCi0gICAgOiBFZGl0Q29tbWFuZChub2RlLT5kb2N1bWVudCgpKQorSW5zZXJ0
SW50b1RleHROb2RlQ29tbWFuZDo6SW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZChQYXNzUmVmUHRy
PFRleHQ+IG5vZGUsIGludCBvZmZzZXQsIGNvbnN0IFN0cmluZyYgdGV4dCkKKyAgICA6IFNpbXBs
ZUVkaXRDb21tYW5kKG5vZGUtPmRvY3VtZW50KCkpCiAgICAgLCBtX25vZGUobm9kZSkKICAgICAs
IG1fb2Zmc2V0KG9mZnNldCkKICAgICAsIG1fdGV4dCh0ZXh0KQpJbmRleDogV2ViQ29yZS9lZGl0
aW5nL0luc2VydEludG9UZXh0Tm9kZUNvbW1hbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Vk
aXRpbmcvSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZC5oCShyZXZpc2lvbiAzNDQzOCkKKysrIFdl
YkNvcmUvZWRpdGluZy9JbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2IEFwcGxlIENv
bXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1
LCAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIsMTggKzMyLDE5IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogY2xhc3MgVGV4dDsKIAotY2xhc3MgSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZCA6IHB1
YmxpYyBFZGl0Q29tbWFuZCB7CitjbGFzcyBJbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kIDogcHVi
bGljIFNpbXBsZUVkaXRDb21tYW5kIHsKIHB1YmxpYzoKLSAgICBJbnNlcnRJbnRvVGV4dE5vZGVD
b21tYW5kKFRleHQqIG5vZGUsIGludCBvZmZzZXQsIGNvbnN0IFN0cmluZyYgdGV4dCk7CisgICAg
c3RhdGljIFBhc3NSZWZQdHI8SW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZD4gY3JlYXRlKFBhc3NS
ZWZQdHI8VGV4dD4gbm9kZSwgaW50IG9mZnNldCwgY29uc3QgU3RyaW5nJiB0ZXh0KQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kKG5v
ZGUsIG9mZnNldCwgdGV4dCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBJbnNlcnRJbnRvVGV4
dE5vZGVDb21tYW5kKFBhc3NSZWZQdHI8VGV4dD4gbm9kZSwgaW50IG9mZnNldCwgY29uc3QgU3Ry
aW5nJiB0ZXh0KTsKIAogICAgIHZpcnR1YWwgdm9pZCBkb0FwcGx5KCk7CiAgICAgdmlydHVhbCB2
b2lkIGRvVW5hcHBseSgpOwogCi0gICAgVGV4dCogbm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9k
ZS5nZXQoKTsgfQotICAgIGludCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsgfQot
ICAgIFN0cmluZyB0ZXh0KCkgY29uc3QgeyByZXR1cm4gbV90ZXh0OyB9Ci0KLXByaXZhdGU6CiAg
ICAgUmVmUHRyPFRleHQ+IG1fbm9kZTsKICAgICBpbnQgbV9vZmZzZXQ7CiAgICAgU3RyaW5nIG1f
dGV4dDsKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9JbnNlcnRMaW5lQnJlYWtDb21tYW5kLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0luc2VydExpbmVCcmVha0NvbW1hbmQuaAkocmV2
aXNpb24gMzQ0MzgpCisrKyBXZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGluZUJyZWFrQ29tbWFuZC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
NSwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDEyICszMiwxOCBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEluc2VydExpbmVCcmVha0NvbW1hbmQgOiBwdWJs
aWMgQ29tcG9zaXRlRWRpdENvbW1hbmQgewogcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRy
PEluc2VydExpbmVCcmVha0NvbW1hbmQ+IGNyZWF0ZShEb2N1bWVudCogZG9jdW1lbnQpCisgICAg
eworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluc2VydExpbmVCcmVha0NvbW1hbmQoZG9j
dW1lbnQpKTsKKyAgICB9CisKK3ByaXZhdGU6CiAgICAgSW5zZXJ0TGluZUJyZWFrQ29tbWFuZChE
b2N1bWVudCopOwogCiAgICAgdmlydHVhbCB2b2lkIGRvQXBwbHkoKTsKIAotcHJpdmF0ZToKICAg
ICB2aXJ0dWFsIGJvb2wgcHJlc2VydmVzVHlwaW5nU3R5bGUoKSBjb25zdDsKKwogICAgIHZvaWQg
aW5zZXJ0Tm9kZUFmdGVyUG9zaXRpb24oTm9kZSosIGNvbnN0IFBvc2l0aW9uJik7CiAgICAgdm9p
ZCBpbnNlcnROb2RlQmVmb3JlUG9zaXRpb24oTm9kZSosIGNvbnN0IFBvc2l0aW9uJik7CiAgICAg
Ym9vbCBzaG91bGRVc2VCcmVha0VsZW1lbnQoY29uc3QgUG9zaXRpb24mKTsKSW5kZXg6IFdlYkNv
cmUvZWRpdGluZy9JbnNlcnRMaXN0Q29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9l
ZGl0aW5nL0luc2VydExpc3RDb21tYW5kLmNwcAkocmV2aXNpb24gMzQ0MzgpCisrKyBXZWJDb3Jl
L2VkaXRpbmcvSW5zZXJ0TGlzdENvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODQsNyAr
MTg0LDcgQEAgdm9pZCBJbnNlcnRMaXN0Q29tbWFuZDo6ZG9BcHBseSgpCiAgICAgICAgICAgICAv
LyBGSVhNRTogV2UgYXBwZWFyIHRvIHNwbGl0IGF0IG5leHRMaXN0Q2hpbGQgYXMgb3Bwb3NlZCB0
byBsaXN0Q2hpbGROb2RlIHNvIHRoYXQgd2hlbiB3ZSByZW1vdmUKICAgICAgICAgICAgIC8vIGxp
c3RDaGlsZE5vZGUgYmVsb3cgaW4gbW92ZVBhcmFncmFwaHMsIHByZXZpb3VzTGlzdENoaWxkIHdp
bGwgYmUgcmVtb3ZlZCBhbG9uZyB3aXRoIGl0IGlmIGl0IGlzIAogICAgICAgICAgICAgLy8gdW5y
ZW5kZXJlZC4gQnV0IHdlIG91Z2h0IHRvIHJlbW92ZSBuZXh0TGlzdENoaWxkIHRvbywgaWYgaXQg
aXMgdW5yZW5kZXJlZC4KLSAgICAgICAgICAgIHNwbGl0RWxlbWVudChzdGF0aWNfY2FzdDxFbGVt
ZW50ICo+KGxpc3ROb2RlKSwgc3BsaXRUcmVlVG9Ob2RlKG5leHRMaXN0Q2hpbGQsIGxpc3ROb2Rl
KSk7CisgICAgICAgICAgICBzcGxpdEVsZW1lbnQoc3RhdGljX2Nhc3Q8RWxlbWVudCo+KGxpc3RO
b2RlKSwgc3BsaXRUcmVlVG9Ob2RlKG5leHRMaXN0Q2hpbGQsIGxpc3ROb2RlKS5nZXQoKSk7CiAg
ICAgICAgICAgICBpbnNlcnROb2RlQmVmb3JlKG5vZGVUb0luc2VydC5nZXQoKSwgbGlzdE5vZGUp
OwogICAgICAgICB9IGVsc2UgaWYgKG5leHRMaXN0Q2hpbGQgfHwgbGlzdENoaWxkTm9kZS0+cGFy
ZW50Tm9kZSgpICE9IGxpc3ROb2RlKSB7CiAgICAgICAgICAgICAvLyBKdXN0IGJlY2F1c2UgbGlz
dENoaWxkTm9kZSBoYXMgbm8gcHJldmlvdXNMaXN0Q2hpbGQgZG9lc24ndCBtZWFuIHRoZXJlIGlz
bid0IGFueSBjb250ZW50CkBAIC0xOTIsNyArMTkyLDcgQEAgdm9pZCBJbnNlcnRMaXN0Q29tbWFu
ZDo6ZG9BcHBseSgpCiAgICAgICAgICAgICAvLyBiZXR3ZWVuIGl0IGFuZCBsaXN0Tm9kZS4gU28s
IHdlIHNwbGl0IHVwIHRvIGxpc3ROb2RlIGJlZm9yZSBpbnNlcnRpbmcgdGhlIHBsYWNlaG9sZGVy
CiAgICAgICAgICAgICAvLyB3aGVyZSB3ZSdyZSBhYm91dCB0byBtb3ZlIGxpc3RDaGlsZE5vZGUg
dG8uCiAgICAgICAgICAgICBpZiAobGlzdENoaWxkTm9kZS0+cGFyZW50Tm9kZSgpICE9IGxpc3RO
b2RlKQotICAgICAgICAgICAgICAgIHNwbGl0RWxlbWVudChzdGF0aWNfY2FzdDxFbGVtZW50ICo+
KGxpc3ROb2RlKSwgc3BsaXRUcmVlVG9Ob2RlKGxpc3RDaGlsZE5vZGUsIGxpc3ROb2RlKSk7Cisg
ICAgICAgICAgICAgICAgc3BsaXRFbGVtZW50KHN0YXRpY19jYXN0PEVsZW1lbnQgKj4obGlzdE5v
ZGUpLCBzcGxpdFRyZWVUb05vZGUobGlzdENoaWxkTm9kZSwgbGlzdE5vZGUpLmdldCgpKTsKICAg
ICAgICAgICAgIGluc2VydE5vZGVCZWZvcmUobm9kZVRvSW5zZXJ0LmdldCgpLCBsaXN0Tm9kZSk7
CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgaW5zZXJ0Tm9kZUFmdGVyKG5vZGVUb0luc2Vy
dC5nZXQoKSwgbGlzdE5vZGUpOwpAQCAtMjM4LDggKzIzOCw4IEBAIHZvaWQgSW5zZXJ0TGlzdENv
bW1hbmQ6OmRvQXBwbHkoKQogICAgICAgICAgICAgICAgIC8vIEluc2VydGluZyB0aGUgbGlzdCBp
bnRvIGFuIGVtcHR5IHBhcmFncmFwaCB0aGF0IGlzbid0IGhlbGQgb3BlbiAKICAgICAgICAgICAg
ICAgICAvLyBieSBhIGJyIG9yIGEgJ1xuJywgd2lsbCBpbnZhbGlkYXRlIHN0YXJ0IGFuZCBlbmQu
ICBJbnNlcnQgCiAgICAgICAgICAgICAgICAgLy8gYSBwbGFjZWhvbGRlciBhbmQgdGhlbiByZWNv
bXB1dGUgc3RhcnQgYW5kIGVuZC4KLSAgICAgICAgICAgICAgICBOb2RlKiBwbGFjZWhvbGRlciA9
IGluc2VydEJsb2NrUGxhY2Vob2xkZXIoc3RhcnQuZGVlcEVxdWl2YWxlbnQoKSk7Ci0gICAgICAg
ICAgICAgICAgc3RhcnQgPSBWaXNpYmxlUG9zaXRpb24oUG9zaXRpb24ocGxhY2Vob2xkZXIsIDAp
KTsKKyAgICAgICAgICAgICAgICBSZWZQdHI8Tm9kZT4gcGxhY2Vob2xkZXIgPSBpbnNlcnRCbG9j
a1BsYWNlaG9sZGVyKHN0YXJ0LmRlZXBFcXVpdmFsZW50KCkpOworICAgICAgICAgICAgICAgIHN0
YXJ0ID0gVmlzaWJsZVBvc2l0aW9uKFBvc2l0aW9uKHBsYWNlaG9sZGVyLmdldCgpLCAwKSk7CiAg
ICAgICAgICAgICAgICAgZW5kID0gc3RhcnQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAK
SW5kZXg6IFdlYkNvcmUvZWRpdGluZy9JbnNlcnRMaXN0Q29tbWFuZC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvZWRpdGluZy9JbnNlcnRMaXN0Q29tbWFuZC5oCShyZXZpc2lvbiAzNDQzOCkKKysr
IFdlYkNvcmUvZWRpdGluZy9JbnNlcnRMaXN0Q29tbWFuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTMzLDExICszMywyMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBJbnNlcnRM
aXN0Q29tbWFuZCA6IHB1YmxpYyBDb21wb3NpdGVFZGl0Q29tbWFuZCB7CiBwdWJsaWM6CiAgICAg
ZW51bSBUeXBlIHsgT3JkZXJlZExpc3QsIFVub3JkZXJlZExpc3QgfTsKKworICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEluc2VydExpc3RDb21tYW5kPiBjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50LCBU
eXBlIGxpc3RUeXBlLCBjb25zdCBTdHJpbmcmIGxpc3RJRCkKKyAgICB7CisgICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgSW5zZXJ0TGlzdENvbW1hbmQoZG9jdW1lbnQsIGxpc3RUeXBlLCBsaXN0
SUQpKTsKKyAgICB9CisKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxOb2RlPiBpbnNlcnRMaXN0KERv
Y3VtZW50KiwgVHlwZSk7CisKK3ByaXZhdGU6CiAgICAgSW5zZXJ0TGlzdENvbW1hbmQoRG9jdW1l
bnQqLCBUeXBlLCBjb25zdCBTdHJpbmcmKTsKKwogICAgIHZpcnR1YWwgdm9pZCBkb0FwcGx5KCk7
CiAgICAgdmlydHVhbCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24oKSBjb25zdCB7IHJldHVybiBF
ZGl0QWN0aW9uSW5zZXJ0TGlzdDsgfQotcHJpdmF0ZToKKwogICAgIE5vZGUqIGZpeE9ycGhhbmVk
TGlzdENoaWxkKE5vZGUqKTsKICAgICBib29sIG1vZGlmeVJhbmdlKCk7CiAgICAgUmVmUHRyPE5v
ZGU+IG1fbGlzdEVsZW1lbnQ7CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvSW5zZXJ0Tm9kZUJlZm9y
ZUNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9JbnNlcnROb2RlQmVm
b3JlQ29tbWFuZC5jcHAJKHJldmlzaW9uIDM0NDM4KQorKysgV2ViQ29yZS9lZGl0aW5nL0luc2Vy
dE5vZGVCZWZvcmVDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDggQXBwbGUgQ29tcHV0ZXIsIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMjQsMTMgKzI0LDE0IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
Imh0bWxlZGl0aW5nLmgiCiAjaW5jbHVkZSAiSW5zZXJ0Tm9kZUJlZm9yZUNvbW1hbmQuaCIKIAor
I2luY2x1ZGUgImh0bWxlZGl0aW5nLmgiCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSW5zZXJ0
Tm9kZUJlZm9yZUNvbW1hbmQ6Okluc2VydE5vZGVCZWZvcmVDb21tYW5kKFBhc3NSZWZQdHI8Tm9k
ZT4gaW5zZXJ0Q2hpbGQsIE5vZGUqIHJlZkNoaWxkKQotICAgIDogRWRpdENvbW1hbmQocmVmQ2hp
bGQtPmRvY3VtZW50KCkpLCBtX2luc2VydENoaWxkKGluc2VydENoaWxkKSwgbV9yZWZDaGlsZChy
ZWZDaGlsZCkKK0luc2VydE5vZGVCZWZvcmVDb21tYW5kOjpJbnNlcnROb2RlQmVmb3JlQ29tbWFu
ZChQYXNzUmVmUHRyPE5vZGU+IGluc2VydENoaWxkLCBQYXNzUmVmUHRyPE5vZGU+IHJlZkNoaWxk
KQorICAgIDogU2ltcGxlRWRpdENvbW1hbmQocmVmQ2hpbGQtPmRvY3VtZW50KCkpLCBtX2luc2Vy
dENoaWxkKGluc2VydENoaWxkKSwgbV9yZWZDaGlsZChyZWZDaGlsZCkKIHsKICAgICBBU1NFUlQo
bV9pbnNlcnRDaGlsZCk7CiAgICAgQVNTRVJUKG1fcmVmQ2hpbGQpOwpJbmRleDogV2ViQ29yZS9l
ZGl0aW5nL0luc2VydE5vZGVCZWZvcmVDb21tYW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9l
ZGl0aW5nL0luc2VydE5vZGVCZWZvcmVDb21tYW5kLmgJKHJldmlzaW9uIDM0NDM4KQorKysgV2Vi
Q29yZS9lZGl0aW5nL0luc2VydE5vZGVCZWZvcmVDb21tYW5kLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2IEFwcGxlIENvbXB1
dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAy
MDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsMTcgKzMwLDE5IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotY2xhc3MgSW5zZXJ0Tm9kZUJlZm9yZUNvbW1hbmQgOiBwdWJsaWMgRWRpdENvbW1hbmQg
eworY2xhc3MgSW5zZXJ0Tm9kZUJlZm9yZUNvbW1hbmQgOiBwdWJsaWMgU2ltcGxlRWRpdENvbW1h
bmQgewogcHVibGljOgotICAgIEluc2VydE5vZGVCZWZvcmVDb21tYW5kKFBhc3NSZWZQdHI8Tm9k
ZT4sIE5vZGUqIHJlZkNoaWxkKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNlcnROb2RlQmVm
b3JlQ29tbWFuZD4gY3JlYXRlKFBhc3NSZWZQdHI8Tm9kZT4gY2hpbGRUb0luc2VydCwgUGFzc1Jl
ZlB0cjxOb2RlPiBjaGlsZFRvSW5zZXJ0QmVmb3JlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBJbnNlcnROb2RlQmVmb3JlQ29tbWFuZChjaGlsZFRvSW5zZXJ0LCBjaGlsZFRv
SW5zZXJ0QmVmb3JlKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIEluc2VydE5vZGVCZWZvcmVD
b21tYW5kKFBhc3NSZWZQdHI8Tm9kZT4gY2hpbGRUb0luc2VydCwgUGFzc1JlZlB0cjxOb2RlPiBj
aGlsZFRvSW5zZXJ0QmVmb3JlKTsKIAogICAgIHZpcnR1YWwgdm9pZCBkb0FwcGx5KCk7CiAgICAg
dmlydHVhbCB2b2lkIGRvVW5hcHBseSgpOwogCi0gICAgTm9kZSogaW5zZXJ0Q2hpbGQoKSBjb25z
dCB7IHJldHVybiBtX2luc2VydENoaWxkLmdldCgpOyB9Ci0gICAgTm9kZSogcmVmQ2hpbGQoKSBj
b25zdCB7IHJldHVybiBtX3JlZkNoaWxkLmdldCgpOyB9Ci0KLXByaXZhdGU6CiAgICAgUmVmUHRy
PE5vZGU+IG1faW5zZXJ0Q2hpbGQ7CiAgICAgUmVmUHRyPE5vZGU+IG1fcmVmQ2hpbGQ7IAogfTsK
SW5kZXg6IFdlYkNvcmUvZWRpdGluZy9JbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9y
Q29tbWFuZC5jcHAJKHJldmlzaW9uIDM0NDM4KQorKysgV2ViQ29yZS9lZGl0aW5nL0luc2VydFBh
cmFncmFwaFNlcGFyYXRvckNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjksNyArMTI5
LDcgQEAgdm9pZCBJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kOjpkbwogICAgICAgICBz
dGFydEJsb2NrLT5oYXNUYWdOYW1lKGZvcm1UYWcpIHx8IAogICAgICAgICBjYW5vbmljYWxQb3Mu
bm9kZSgpLT5yZW5kZXJlcigpICYmIGNhbm9uaWNhbFBvcy5ub2RlKCktPnJlbmRlcmVyKCktPmlz
VGFibGUoKSB8fAogICAgICAgICBjYW5vbmljYWxQb3Mubm9kZSgpLT5oYXNUYWdOYW1lKGhyVGFn
KSkgewotICAgICAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShuZXcgSW5zZXJ0TGluZUJyZWFr
Q29tbWFuZChkb2N1bWVudCgpKSk7CisgICAgICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKElu
c2VydExpbmVCcmVha0NvbW1hbmQ6OmNyZWF0ZShkb2N1bWVudCgpKSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvSW5zZXJ0UGFyYWdyYXBoU2Vw
YXJhdG9yQ29tbWFuZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9JbnNlcnRQYXJh
Z3JhcGhTZXBhcmF0b3JDb21tYW5kLmgJKHJldmlzaW9uIDM0NDM4KQorKysgV2ViQ29yZS9lZGl0
aW5nL0luc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0
ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIw
MDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0zMiwxMSArMzIsMTYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBjbGFzcyBJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kIDogcHVibGljIENvbXBvc2l0
ZUVkaXRDb21tYW5kIHsKIHB1YmxpYzoKLSAgICBJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21t
YW5kKERvY3VtZW50KiwgYm9vbCB1c2VEZWZhdWx0UGFyYWdyYXBoRWxlbWVudCA9IGZhbHNlKTsK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kPiBj
cmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50LCBib29sIHVzZURlZmF1bHRQYXJhZ3JhcGhFbGVtZW50
ID0gZmFsc2UpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluc2VydFBhcmFn
cmFwaFNlcGFyYXRvckNvbW1hbmQoZG9jdW1lbnQsIHVzZURlZmF1bHRQYXJhZ3JhcGhFbGVtZW50
KSk7CisgICAgfQorCitwcml2YXRlOgorICAgIEluc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1h
bmQoRG9jdW1lbnQqLCBib29sIHVzZURlZmF1bHRQYXJhZ3JhcGhFbGVtZW50KTsKIAogICAgIHZp
cnR1YWwgdm9pZCBkb0FwcGx5KCk7CiAKLXByaXZhdGU6CiAgICAgdm9pZCBjYWxjdWxhdGVTdHls
ZUJlZm9yZUluc2VydGlvbihjb25zdCBQb3NpdGlvbiYpOwogICAgIHZvaWQgYXBwbHlTdHlsZUFm
dGVySW5zZXJ0aW9uKE5vZGUqIG9yaWdpbmFsRW5jbG9zaW5nQmxvY2spOwogICAgIApJbmRleDog
V2ViQ29yZS9lZGl0aW5nL0luc2VydFRleHRDb21tYW5kLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9lZGl0aW5nL0luc2VydFRleHRDb21tYW5kLmgJKHJldmlzaW9uIDM0NDM4KQorKysgV2ViQ29y
ZS9lZGl0aW5nL0luc2VydFRleHRDb21tYW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzIsMTYgKzMyLDIwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3Mg
SW5zZXJ0VGV4dENvbW1hbmQgOiBwdWJsaWMgQ29tcG9zaXRlRWRpdENvbW1hbmQgewogcHVibGlj
OgotICAgIEluc2VydFRleHRDb21tYW5kKERvY3VtZW50Kik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQg
ZG9BcHBseSgpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc2VydFRleHRDb21tYW5kPiBjcmVh
dGUoRG9jdW1lbnQqIGRvY3VtZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBJbnNlcnRUZXh0Q29tbWFuZChkb2N1bWVudCkpOworICAgIH0KIAotICAgIHZvaWQgZGVsZXRl
Q2hhcmFjdGVyKCk7CiAgICAgdm9pZCBpbnB1dChjb25zdCBTdHJpbmcmIHRleHQsIGJvb2wgc2Vs
ZWN0SW5zZXJ0ZWRUZXh0ID0gZmFsc2UpOwogCitwcml2YXRlOgorICAgIEluc2VydFRleHRDb21t
YW5kKERvY3VtZW50Kik7CisKKyAgICB2b2lkIGRlbGV0ZUNoYXJhY3RlcigpOwogICAgIHVuc2ln
bmVkIGNoYXJhY3RlcnNBZGRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fY2hhcmFjdGVyc0FkZGVkOyB9
CiAgICAgCi1wcml2YXRlOgorICAgIHZpcnR1YWwgdm9pZCBkb0FwcGx5KCk7CiAgICAgdmlydHVh
bCBib29sIGlzSW5zZXJ0VGV4dENvbW1hbmQoKSBjb25zdDsKIAogICAgIFBvc2l0aW9uIHByZXBh
cmVGb3JUZXh0SW5zZXJ0aW9uKGNvbnN0IFBvc2l0aW9uJik7CkluZGV4OiBXZWJDb3JlL2VkaXRp
bmcvSm9pblRleHROb2Rlc0NvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGlu
Zy9Kb2luVGV4dE5vZGVzQ29tbWFuZC5jcHAJKHJldmlzaW9uIDM0NDM4KQorKysgV2ViQ29yZS9l
ZGl0aW5nL0pvaW5UZXh0Tm9kZXNDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0zMCw4ICszMCw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSm9pblRleHROb2Rlc0Nv
bW1hbmQ6OkpvaW5UZXh0Tm9kZXNDb21tYW5kKFRleHQgKnRleHQxLCBUZXh0ICp0ZXh0MikKLSAg
ICA6IEVkaXRDb21tYW5kKHRleHQxLT5kb2N1bWVudCgpKSwgbV90ZXh0MSh0ZXh0MSksIG1fdGV4
dDIodGV4dDIpCitKb2luVGV4dE5vZGVzQ29tbWFuZDo6Sm9pblRleHROb2Rlc0NvbW1hbmQoUGFz
c1JlZlB0cjxUZXh0PiB0ZXh0MSwgUGFzc1JlZlB0cjxUZXh0PiB0ZXh0MikKKyAgICA6IFNpbXBs
ZUVkaXRDb21tYW5kKHRleHQxLT5kb2N1bWVudCgpKSwgbV90ZXh0MSh0ZXh0MSksIG1fdGV4dDIo
dGV4dDIpCiB7CiAgICAgQVNTRVJUKG1fdGV4dDEpOwogICAgIEFTU0VSVChtX3RleHQyKTsKSW5k
ZXg6IFdlYkNvcmUvZWRpdGluZy9Kb2luVGV4dE5vZGVzQ29tbWFuZC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvZWRpdGluZy9Kb2luVGV4dE5vZGVzQ29tbWFuZC5oCShyZXZpc2lvbiAzNDQzOCkK
KysrIFdlYkNvcmUvZWRpdGluZy9Kb2luVGV4dE5vZGVzQ29tbWFuZC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiBBcHBsZSBD
b21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
NSwgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDE4ICszMiwxOSBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIGNsYXNzIFRleHQ7CiAKLWNsYXNzIEpvaW5UZXh0Tm9kZXNDb21tYW5kIDogcHVibGlj
IEVkaXRDb21tYW5kCi17CitjbGFzcyBKb2luVGV4dE5vZGVzQ29tbWFuZCA6IHB1YmxpYyBTaW1w
bGVFZGl0Q29tbWFuZCB7CiBwdWJsaWM6Ci0gICAgSm9pblRleHROb2Rlc0NvbW1hbmQoVGV4dCos
IFRleHQqKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxKb2luVGV4dE5vZGVzQ29tbWFuZD4gY3Jl
YXRlKFBhc3NSZWZQdHI8VGV4dD4gdGV4dDEsIFBhc3NSZWZQdHI8VGV4dD4gdGV4dDIpCisgICAg
eworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEpvaW5UZXh0Tm9kZXNDb21tYW5kKHRleHQx
LCB0ZXh0MikpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBKb2luVGV4dE5vZGVzQ29tbWFuZChQ
YXNzUmVmUHRyPFRleHQ+LCBQYXNzUmVmUHRyPFRleHQ+KTsKIAogICAgIHZpcnR1YWwgdm9pZCBk
b0FwcGx5KCk7CiAgICAgdmlydHVhbCB2b2lkIGRvVW5hcHBseSgpOwogCi0gICAgVGV4dCogZmly
c3ROb2RlKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0MS5nZXQoKTsgfQotICAgIFRleHQqIHNlY29u
ZE5vZGUoKSBjb25zdCB7IHJldHVybiBtX3RleHQyLmdldCgpOyB9Ci0KLXByaXZhdGU6CiAgICAg
UmVmUHRyPFRleHQ+IG1fdGV4dDE7CiAgICAgUmVmUHRyPFRleHQ+IG1fdGV4dDI7CiAgICAgdW5z
aWduZWQgbV9vZmZzZXQ7CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvTWVyZ2VJZGVudGljYWxFbGVt
ZW50c0NvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9NZXJnZUlkZW50
aWNhbEVsZW1lbnRzQ29tbWFuZC5jcHAJKHJldmlzaW9uIDM0NDM4KQorKysgV2ViQ29yZS9lZGl0
aW5nL01lcmdlSWRlbnRpY2FsRWxlbWVudHNDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0zMCw4ICszMCw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotTWVyZ2VJZGVu
dGljYWxFbGVtZW50c0NvbW1hbmQ6Ok1lcmdlSWRlbnRpY2FsRWxlbWVudHNDb21tYW5kKEVsZW1l
bnQqIGZpcnN0LCBFbGVtZW50KiBzZWNvbmQpCi0gICAgOiBFZGl0Q29tbWFuZChmaXJzdC0+ZG9j
dW1lbnQoKSksIG1fZWxlbWVudDEoZmlyc3QpLCBtX2VsZW1lbnQyKHNlY29uZCkKK01lcmdlSWRl
bnRpY2FsRWxlbWVudHNDb21tYW5kOjpNZXJnZUlkZW50aWNhbEVsZW1lbnRzQ29tbWFuZChQYXNz
UmVmUHRyPEVsZW1lbnQ+IGZpcnN0LCBQYXNzUmVmUHRyPEVsZW1lbnQ+IHNlY29uZCkKKyAgICA6
IFNpbXBsZUVkaXRDb21tYW5kKGZpcnN0LT5kb2N1bWVudCgpKSwgbV9lbGVtZW50MShmaXJzdCks
IG1fZWxlbWVudDIoc2Vjb25kKQogewogICAgIEFTU0VSVChtX2VsZW1lbnQxKTsKICAgICBBU1NF
UlQobV9lbGVtZW50Mik7CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvTWVyZ2VJZGVudGljYWxFbGVt
ZW50c0NvbW1hbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvTWVyZ2VJZGVudGlj
YWxFbGVtZW50c0NvbW1hbmQuaAkocmV2aXNpb24gMzQ0MzgpCisrKyBXZWJDb3JlL2VkaXRpbmcv
TWVyZ2VJZGVudGljYWxFbGVtZW50c0NvbW1hbmQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIw
MDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0zMCwxNCArMzAsMTkgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1j
bGFzcyBNZXJnZUlkZW50aWNhbEVsZW1lbnRzQ29tbWFuZCA6IHB1YmxpYyBFZGl0Q29tbWFuZCB7
CitjbGFzcyBNZXJnZUlkZW50aWNhbEVsZW1lbnRzQ29tbWFuZCA6IHB1YmxpYyBTaW1wbGVFZGl0
Q29tbWFuZCB7CiBwdWJsaWM6Ci0gICAgTWVyZ2VJZGVudGljYWxFbGVtZW50c0NvbW1hbmQoRWxl
bWVudCosIEVsZW1lbnQqKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxNZXJnZUlkZW50aWNhbEVs
ZW1lbnRzQ29tbWFuZD4gY3JlYXRlKFBhc3NSZWZQdHI8RWxlbWVudD4gZWxlbWVudDEsIFBhc3NS
ZWZQdHI8RWxlbWVudD4gZWxlbWVudDIpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IE1lcmdlSWRlbnRpY2FsRWxlbWVudHNDb21tYW5kKGVsZW1lbnQxLCBlbGVtZW50MikpOwor
ICAgIH0KKworcHJpdmF0ZToKKyAgICBNZXJnZUlkZW50aWNhbEVsZW1lbnRzQ29tbWFuZChQYXNz
UmVmUHRyPEVsZW1lbnQ+LCBQYXNzUmVmUHRyPEVsZW1lbnQ+KTsKIAogICAgIHZpcnR1YWwgdm9p
ZCBkb0FwcGx5KCk7CiAgICAgdmlydHVhbCB2b2lkIGRvVW5hcHBseSgpOwogCi1wcml2YXRlOgog
ICAgIFJlZlB0cjxFbGVtZW50PiBtX2VsZW1lbnQxOwogICAgIFJlZlB0cjxFbGVtZW50PiBtX2Vs
ZW1lbnQyOwogICAgIFJlZlB0cjxOb2RlPiBtX2F0Q2hpbGQ7CkluZGV4OiBXZWJDb3JlL2VkaXRp
bmcvTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Vk
aXRpbmcvTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmNwcAkocmV2aXNpb24gMzQ0MzgpCisrKyBX
ZWJDb3JlL2VkaXRpbmcvTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0
ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIw
MDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0yMTMsNyArMjEzLDcgQEAgUGFzc1JlZlB0cjxOb2RlPiBJbmNyZWFzZVNl
bGVjdGlvbkxpc3RMZQogICAgIEFTU0VSVChkb2N1bWVudC0+ZnJhbWUoKSk7CiAgICAgUmVmUHRy
PEluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsQ29tbWFuZD4gbW9kQ29tbWFuZCA9IG5ldyBJbmNy
ZWFzZVNlbGVjdGlvbkxpc3RMZXZlbENvbW1hbmQoZG9jdW1lbnQsIGxpc3RUeXBlKTsKICAgICBt
b2RDb21tYW5kLT5hcHBseSgpOwotICAgIHJldHVybiBtb2RDb21tYW5kLT5tX2xpc3RFbGVtZW50
LmdldCgpOworICAgIHJldHVybiBtb2RDb21tYW5kLT5tX2xpc3RFbGVtZW50OwogfQogCiBQYXNz
UmVmUHRyPE5vZGU+IEluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsQ29tbWFuZDo6aW5jcmVhc2VT
ZWxlY3Rpb25MaXN0TGV2ZWwoRG9jdW1lbnQqIGRvY3VtZW50KQpJbmRleDogV2ViQ29yZS9lZGl0
aW5nL01vdmVTZWxlY3Rpb25Db21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRp
bmcvTW92ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCShyZXZpc2lvbiAzNDQzOCkKKysrIFdlYkNvcmUv
ZWRpdGluZy9Nb3ZlU2VsZWN0aW9uQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDEw
ICszNyw2IEBAIE1vdmVTZWxlY3Rpb25Db21tYW5kOjpNb3ZlU2VsZWN0aW9uQ29tbWEKICAgICBB
U1NFUlQobV9mcmFnbWVudCk7CiB9CiAKLU1vdmVTZWxlY3Rpb25Db21tYW5kOjp+TW92ZVNlbGVj
dGlvbkNvbW1hbmQoKQotewotfQotCiB2b2lkIE1vdmVTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5
KCkKIHsKICAgICBTZWxlY3Rpb24gc2VsZWN0aW9uID0gZW5kaW5nU2VsZWN0aW9uKCk7CkBAIC03
NCw3ICs3MCw3IEBAIHZvaWQgTW92ZVNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkoKQogICAgICAg
ICBwb3MgPSBlbmRpbmdTZWxlY3Rpb24oKS5zdGFydCgpOwogCiAgICAgc2V0RW5kaW5nU2VsZWN0
aW9uKFNlbGVjdGlvbihwb3MsIGVuZGluZ1NlbGVjdGlvbigpLmFmZmluaXR5KCkpKTsKLSAgICBh
cHBseUNvbW1hbmRUb0NvbXBvc2l0ZShuZXcgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQocG9zaXRp
b25Ob2RlLT5kb2N1bWVudCgpLCBtX2ZyYWdtZW50LmdldCgpLCB0cnVlLCBtX3NtYXJ0TW92ZSkp
OworICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpj
cmVhdGUocG9zaXRpb25Ob2RlLT5kb2N1bWVudCgpLCBtX2ZyYWdtZW50LCB0cnVlLCBtX3NtYXJ0
TW92ZSkpOwogfQogCiBFZGl0QWN0aW9uIE1vdmVTZWxlY3Rpb25Db21tYW5kOjplZGl0aW5nQWN0
aW9uKCkgY29uc3QKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9Nb3ZlU2VsZWN0aW9uQ29tbWFuZC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9Nb3ZlU2VsZWN0aW9uQ29tbWFuZC5oCShy
ZXZpc2lvbiAzNDQzOCkKKysrIFdlYkNvcmUvZWRpdGluZy9Nb3ZlU2VsZWN0aW9uQ29tbWFuZC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
NSwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDEzICszNCwxNyBAQCBj
bGFzcyBEb2N1bWVudEZyYWdtZW50OwogCiBjbGFzcyBNb3ZlU2VsZWN0aW9uQ29tbWFuZCA6IHB1
YmxpYyBDb21wb3NpdGVFZGl0Q29tbWFuZCB7CiBwdWJsaWM6Ci0gICAgTW92ZVNlbGVjdGlvbkNv
bW1hbmQoUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiwgY29uc3QgUG9zaXRpb24mLCBib29s
IHNtYXJ0TW92ZSA9IGZhbHNlKTsKLSAgICB2aXJ0dWFsIH5Nb3ZlU2VsZWN0aW9uQ29tbWFuZCgp
OwotICAgIAorICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1vdmVTZWxlY3Rpb25Db21tYW5kPiBjcmVh
dGUoUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCwgY29uc3QgUG9zaXRpb24m
IHBvc2l0aW9uLCBib29sIHNtYXJ0TW92ZSA9IGZhbHNlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBNb3ZlU2VsZWN0aW9uQ29tbWFuZChmcmFnbWVudCwgcG9zaXRpb24sIHNt
YXJ0TW92ZSkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBNb3ZlU2VsZWN0aW9uQ29tbWFuZChQ
YXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+LCBjb25zdCBQb3NpdGlvbiYsIGJvb2wgc21hcnRN
b3ZlKTsKKwogICAgIHZpcnR1YWwgdm9pZCBkb0FwcGx5KCk7CiAgICAgdmlydHVhbCBFZGl0QWN0
aW9uIGVkaXRpbmdBY3Rpb24oKSBjb25zdDsKICAgICAKLXByaXZhdGU6CiAgICAgUmVmUHRyPERv
Y3VtZW50RnJhZ21lbnQ+IG1fZnJhZ21lbnQ7CiAgICAgUG9zaXRpb24gbV9wb3NpdGlvbjsKICAg
ICBib29sIG1fc21hcnRNb3ZlOwpAQCAtNDgsNCArNTIsNCBAQCBwcml2YXRlOgogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBfX01vdmVTZWxlY3Rpb25Db21tYW5kX2gKKyNl
bmRpZiAvLyBNb3ZlU2VsZWN0aW9uQ29tbWFuZF9oCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvUmVt
b3ZlQ1NTUHJvcGVydHlDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcv
UmVtb3ZlQ1NTUHJvcGVydHlDb21tYW5kLmNwcAkocmV2aXNpb24gMzQ0MzgpCisrKyBXZWJDb3Jl
L2VkaXRpbmcvUmVtb3ZlQ1NTUHJvcGVydHlDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0zMiw3ICszMiw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFJlbW92ZUNTU1By
b3BlcnR5Q29tbWFuZDo6UmVtb3ZlQ1NTUHJvcGVydHlDb21tYW5kKERvY3VtZW50KiBkb2N1bWVu
dCwgQ1NTU3R5bGVEZWNsYXJhdGlvbiogZGVjbCwgaW50IHByb3BlcnR5KQotICAgIDogRWRpdENv
bW1hbmQoZG9jdW1lbnQpCisgICAgOiBTaW1wbGVFZGl0Q29tbWFuZChkb2N1bWVudCkKICAgICAs
IG1fZGVjbChkZWNsLT5tYWtlTXV0YWJsZSgpKQogICAgICwgbV9wcm9wZXJ0eShwcm9wZXJ0eSkK
ICAgICAsIG1faW1wb3J0YW50KGZhbHNlKQpAQCAtNDAsMTAgKzQwLDYgQEAgUmVtb3ZlQ1NTUHJv
cGVydHlDb21tYW5kOjpSZW1vdmVDU1NQcm9wZQogICAgIEFTU0VSVChtX2RlY2wpOwogfQogCi1S
ZW1vdmVDU1NQcm9wZXJ0eUNvbW1hbmQ6On5SZW1vdmVDU1NQcm9wZXJ0eUNvbW1hbmQoKQotewot
fQotCiB2b2lkIFJlbW92ZUNTU1Byb3BlcnR5Q29tbWFuZDo6ZG9BcHBseSgpCiB7CiAgICAgQVNT
RVJUKG1fZGVjbCk7CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvUmVtb3ZlQ1NTUHJvcGVydHlDb21t
YW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL1JlbW92ZUNTU1Byb3BlcnR5Q29t
bWFuZC5oCShyZXZpc2lvbiAzNDQzOCkKKysrIFdlYkNvcmUvZWRpdGluZy9SZW1vdmVDU1NQcm9w
ZXJ0eUNvbW1hbmQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMiwx
OCArMzIsMTkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDU1NTdHlsZURlY2xhcmF0
aW9uOwogCi1jbGFzcyBSZW1vdmVDU1NQcm9wZXJ0eUNvbW1hbmQgOiBwdWJsaWMgRWRpdENvbW1h
bmQgeworY2xhc3MgUmVtb3ZlQ1NTUHJvcGVydHlDb21tYW5kIDogcHVibGljIFNpbXBsZUVkaXRD
b21tYW5kIHsKIHB1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZW1vdmVDU1NQcm9wZXJ0
eUNvbW1hbmQ+IGNyZWF0ZShEb2N1bWVudCogZG9jdW1lbnQsIENTU1N0eWxlRGVjbGFyYXRpb24q
IHN0eWxlLCBpbnQgcHJvcGVydHkpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IFJlbW92ZUNTU1Byb3BlcnR5Q29tbWFuZChkb2N1bWVudCwgc3R5bGUsIHByb3BlcnR5KSk7Cisg
ICAgfQorCitwcml2YXRlOgogICAgIFJlbW92ZUNTU1Byb3BlcnR5Q29tbWFuZChEb2N1bWVudCos
IENTU1N0eWxlRGVjbGFyYXRpb24qLCBpbnQgcHJvcGVydHkpOwotICAgIHZpcnR1YWwgflJlbW92
ZUNTU1Byb3BlcnR5Q29tbWFuZCgpOwogCiAgICAgdmlydHVhbCB2b2lkIGRvQXBwbHkoKTsKICAg
ICB2aXJ0dWFsIHZvaWQgZG9VbmFwcGx5KCk7CiAKLSAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbiogc3R5bGVEZWNsYXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZGVjbC5nZXQoKTsgfQot
ICAgIGludCBwcm9wZXJ0eSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydHk7IH0KLSAgICAKLXBy
aXZhdGU6CiAgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBtX2RlY2w7CiAg
ICAgaW50IG1fcHJvcGVydHk7CiAgICAgU3RyaW5nIG1fb2xkVmFsdWU7CkBAIC01Miw0ICs1Myw0
IEBAIHByaXZhdGU6CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIF9fcmVt
b3ZlX2Nzc19wcm9wZXJ0eV9jb21tYW5kX2hfXworI2VuZGlmIC8vIFJlbW92ZUNTU1Byb3BlcnR5
Q29tbWFuZF9oCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvUmVtb3ZlRm9ybWF0Q29tbWFuZC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9SZW1vdmVGb3JtYXRDb21tYW5kLmgJKHJldmlz
aW9uIDM0NDM4KQorKysgV2ViQ29yZS9lZGl0aW5nL1JlbW92ZUZvcm1hdENvbW1hbmQuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBw
bGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0zMiw3ICszMiwxNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIGNsYXNzIFJlbW92ZUZvcm1hdENvbW1hbmQgOiBwdWJsaWMgQ29tcG9zaXRlRWRpdENvbW1h
bmQgewogcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlbW92ZUZvcm1hdENvbW1hbmQ+
IGNyZWF0ZShEb2N1bWVudCogZG9jdW1lbnQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFJlbW92ZUZvcm1hdENvbW1hbmQoZG9jdW1lbnQpKTsKKyAgICB9CisKK3ByaXZhdGU6
CiAgICAgUmVtb3ZlRm9ybWF0Q29tbWFuZChEb2N1bWVudCopOworCiAgICAgdmlydHVhbCB2b2lk
IGRvQXBwbHkoKTsKICAgICB2aXJ0dWFsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbigpIGNvbnN0
IHsgcmV0dXJuIEVkaXRBY3Rpb25VbnNwZWNpZmllZDsgfQogfTsKSW5kZXg6IFdlYkNvcmUvZWRp
dGluZy9SZW1vdmVOb2RlQXR0cmlidXRlQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9lZGl0aW5nL1JlbW92ZU5vZGVBdHRyaWJ1dGVDb21tYW5kLmNwcAkocmV2aXNpb24gMzQ0Mzgp
CisrKyBXZWJDb3JlL2VkaXRpbmcvUmVtb3ZlTm9kZUF0dHJpYnV0ZUNvbW1hbmQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSBBcHBs
ZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwNSwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTI1LDE0ICsyNSwxNCBAQAogCiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiUmVtb3ZlTm9kZUF0dHJpYnV0ZUNvbW1hbmQuaCIKLSNpbmNsdWRlICJF
bGVtZW50LmgiCiAKKyNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlv
bnMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1SZW1vdmVOb2RlQXR0cmlidXRlQ29tbWFu
ZDo6UmVtb3ZlTm9kZUF0dHJpYnV0ZUNvbW1hbmQoRWxlbWVudCogZWxlbWVudCwgY29uc3QgUXVh
bGlmaWVkTmFtZSYgYXR0cmlidXRlKQotICAgIDogRWRpdENvbW1hbmQoZWxlbWVudC0+ZG9jdW1l
bnQoKSksIG1fZWxlbWVudChlbGVtZW50KSwgbV9hdHRyaWJ1dGUoYXR0cmlidXRlKQorUmVtb3Zl
Tm9kZUF0dHJpYnV0ZUNvbW1hbmQ6OlJlbW92ZU5vZGVBdHRyaWJ1dGVDb21tYW5kKFBhc3NSZWZQ
dHI8RWxlbWVudD4gZWxlbWVudCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlKQorICAg
IDogU2ltcGxlRWRpdENvbW1hbmQoZWxlbWVudC0+ZG9jdW1lbnQoKSksIG1fZWxlbWVudChlbGVt
ZW50KSwgbV9hdHRyaWJ1dGUoYXR0cmlidXRlKQogewogICAgIEFTU0VSVChtX2VsZW1lbnQpOwog
fQpJbmRleDogV2ViQ29yZS9lZGl0aW5nL1JlbW92ZU5vZGVBdHRyaWJ1dGVDb21tYW5kLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL1JlbW92ZU5vZGVBdHRyaWJ1dGVDb21tYW5kLmgJ
KHJldmlzaW9uIDM0NDM4KQorKysgV2ViQ29yZS9lZGl0aW5nL1JlbW92ZU5vZGVBdHRyaWJ1dGVD
b21tYW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEsMjAgKzMx
LDIyIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgUmVtb3ZlTm9kZUF0dHJpYnV0
ZUNvbW1hbmQgOiBwdWJsaWMgRWRpdENvbW1hbmQgeworY2xhc3MgUmVtb3ZlTm9kZUF0dHJpYnV0
ZUNvbW1hbmQgOiBwdWJsaWMgU2ltcGxlRWRpdENvbW1hbmQgewogcHVibGljOgotICAgIFJlbW92
ZU5vZGVBdHRyaWJ1dGVDb21tYW5kKEVsZW1lbnQqLCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRy
aWJ1dGUpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlbW92ZU5vZGVBdHRyaWJ1dGVDb21tYW5k
PiBjcmVhdGUoUGFzc1JlZlB0cjxFbGVtZW50PiBlbGVtZW50LCBjb25zdCBRdWFsaWZpZWROYW1l
JiBhdHRyaWJ1dGUpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFJlbW92ZU5v
ZGVBdHRyaWJ1dGVDb21tYW5kKGVsZW1lbnQsIGF0dHJpYnV0ZSkpOworICAgIH0KKyAgICAKK3By
aXZhdGU6CisgICAgUmVtb3ZlTm9kZUF0dHJpYnV0ZUNvbW1hbmQoUGFzc1JlZlB0cjxFbGVtZW50
PiwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlKTsKIAogICAgIHZpcnR1YWwgdm9pZCBk
b0FwcGx5KCk7CiAgICAgdmlydHVhbCB2b2lkIGRvVW5hcHBseSgpOwogCi0gICAgRWxlbWVudCog
ZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudC5nZXQoKTsgfQotICAgIGNvbnN0IFF1
YWxpZmllZE5hbWUmIGF0dHJpYnV0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlOyB9Ci0g
ICAgCi1wcml2YXRlOgogICAgIFJlZlB0cjxFbGVtZW50PiBtX2VsZW1lbnQ7CiAgICAgUXVhbGlm
aWVkTmFtZSBtX2F0dHJpYnV0ZTsKLSAgICBTdHJpbmcgbV9vbGRWYWx1ZTsKKyAgICBBdG9taWNT
dHJpbmcgbV9vbGRWYWx1ZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdl
YkNvcmUvZWRpdGluZy9SZW1vdmVOb2RlQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9lZGl0aW5nL1JlbW92ZU5vZGVDb21tYW5kLmNwcAkocmV2aXNpb24gMzQ0MzgpCisrKyBXZWJD
b3JlL2VkaXRpbmcvUmVtb3ZlTm9kZUNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSBBcHBsZSBDb21wdXRlciwgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTMxLDggKzMxLDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1SZW1vdmVOb2RlQ29t
bWFuZDo6UmVtb3ZlTm9kZUNvbW1hbmQoTm9kZSogcmVtb3ZlQ2hpbGQpCi0gICAgOiBFZGl0Q29t
bWFuZChyZW1vdmVDaGlsZC0+ZG9jdW1lbnQoKSkKK1JlbW92ZU5vZGVDb21tYW5kOjpSZW1vdmVO
b2RlQ29tbWFuZChQYXNzUmVmUHRyPE5vZGU+IHJlbW92ZUNoaWxkKQorICAgIDogU2ltcGxlRWRp
dENvbW1hbmQocmVtb3ZlQ2hpbGQtPmRvY3VtZW50KCkpCiAgICAgLCBtX3JlbW92ZUNoaWxkKHJl
bW92ZUNoaWxkKQogICAgICwgbV9wYXJlbnQobV9yZW1vdmVDaGlsZC0+cGFyZW50Tm9kZSgpKQog
ICAgICwgbV9yZWZDaGlsZChtX3JlbW92ZUNoaWxkLT5uZXh0U2libGluZygpKQpJbmRleDogV2Vi
Q29yZS9lZGl0aW5nL1JlbW92ZU5vZGVDb21tYW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9l
ZGl0aW5nL1JlbW92ZU5vZGVDb21tYW5kLmgJKHJldmlzaW9uIDM0NDM4KQorKysgV2ViQ29yZS9l
ZGl0aW5nL1JlbW92ZU5vZGVDb21tYW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMzAsMTYgKzMwLDE5IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3Mg
UmVtb3ZlTm9kZUNvbW1hbmQgOiBwdWJsaWMgRWRpdENvbW1hbmQgeworY2xhc3MgUmVtb3ZlTm9k
ZUNvbW1hbmQgOiBwdWJsaWMgU2ltcGxlRWRpdENvbW1hbmQgewogcHVibGljOgotICAgIFJlbW92
ZU5vZGVDb21tYW5kKE5vZGUqKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZW1vdmVOb2RlQ29t
bWFuZD4gY3JlYXRlKFBhc3NSZWZQdHI8Tm9kZT4gbm9kZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgUmVtb3ZlTm9kZUNvbW1hbmQobm9kZSkpOworICAgIH0KKworcHJpdmF0
ZToKKyAgICBSZW1vdmVOb2RlQ29tbWFuZChQYXNzUmVmUHRyPE5vZGU+KTsKIAogICAgIHZpcnR1
YWwgdm9pZCBkb0FwcGx5KCk7CiAgICAgdmlydHVhbCB2b2lkIGRvVW5hcHBseSgpOwogCi0gICAg
Tm9kZSogbm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVtb3ZlQ2hpbGQuZ2V0KCk7IH0KLQotcHJp
dmF0ZToKICAgICBSZWZQdHI8Tm9kZT4gbV9yZW1vdmVDaGlsZDsKICAgICBSZWZQdHI8Tm9kZT4g
bV9wYXJlbnQ7CiAgICAgUmVmUHRyPE5vZGU+IG1fcmVmQ2hpbGQ7ICAgIApJbmRleDogV2ViQ29y
ZS9lZGl0aW5nL1JlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW5Db21tYW5kLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvUmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbkNvbW1h
bmQuY3BwCShyZXZpc2lvbiAzNDQzOCkKKysrIFdlYkNvcmUvZWRpdGluZy9SZW1vdmVOb2RlUHJl
c2VydmluZ0NoaWxkcmVuQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEs
NyArMzEsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVJlbW92ZU5vZGVQcmVzZXJ2aW5n
Q2hpbGRyZW5Db21tYW5kOjpSZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuQ29tbWFuZChOb2Rl
KiBub2RlKQorUmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbkNvbW1hbmQ6OlJlbW92ZU5vZGVQ
cmVzZXJ2aW5nQ2hpbGRyZW5Db21tYW5kKFBhc3NSZWZQdHI8Tm9kZT4gbm9kZSkKICAgICA6IENv
bXBvc2l0ZUVkaXRDb21tYW5kKG5vZGUtPmRvY3VtZW50KCkpLCBtX25vZGUobm9kZSkKIHsKICAg
ICBBU1NFUlQobV9ub2RlKTsKQEAgLTM5LDExICszOSwxMSBAQCBSZW1vdmVOb2RlUHJlc2Vydmlu
Z0NoaWxkcmVuQ29tbWFuZDo6UmVtCiAKIHZvaWQgUmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJl
bkNvbW1hbmQ6OmRvQXBwbHkoKQogewotICAgIHdoaWxlIChOb2RlKiBjdXJyID0gbm9kZSgpLT5m
aXJzdENoaWxkKCkpIHsKKyAgICB3aGlsZSAoTm9kZSogY3VyciA9IG1fbm9kZS0+Zmlyc3RDaGls
ZCgpKSB7CiAgICAgICAgIHJlbW92ZU5vZGUoY3Vycik7Ci0gICAgICAgIGluc2VydE5vZGVCZWZv
cmUoY3Vyciwgbm9kZSgpKTsKKyAgICAgICAgaW5zZXJ0Tm9kZUJlZm9yZShjdXJyLCBtX25vZGUu
Z2V0KCkpOwogICAgIH0KLSAgICByZW1vdmVOb2RlKG5vZGUoKSk7CisgICAgcmVtb3ZlTm9kZSht
X25vZGUuZ2V0KCkpOwogfQogCiB9CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvUmVtb3ZlTm9kZVBy
ZXNlcnZpbmdDaGlsZHJlbkNvbW1hbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcv
UmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbkNvbW1hbmQuaAkocmV2aXNpb24gMzQ0MzgpCisr
KyBXZWJDb3JlL2VkaXRpbmcvUmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbkNvbW1hbmQuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUs
IDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMiwxMyArMzIsMTYgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBSZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuQ29t
bWFuZCA6IHB1YmxpYyBDb21wb3NpdGVFZGl0Q29tbWFuZCB7CiBwdWJsaWM6Ci0gICAgUmVtb3Zl
Tm9kZVByZXNlcnZpbmdDaGlsZHJlbkNvbW1hbmQoTm9kZSopOworICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW5Db21tYW5kPiBjcmVhdGUoUGFzc1JlZlB0
cjxOb2RlPiBub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBSZW1vdmVO
b2RlUHJlc2VydmluZ0NoaWxkcmVuQ29tbWFuZChub2RlKSk7CisgICAgfQogCi0gICAgdmlydHVh
bCB2b2lkIGRvQXBwbHkoKTsKK3ByaXZhdGU6CisgICAgUmVtb3ZlTm9kZVByZXNlcnZpbmdDaGls
ZHJlbkNvbW1hbmQoUGFzc1JlZlB0cjxOb2RlPik7CiAKLSAgICBOb2RlKiBub2RlKCkgY29uc3Qg
eyByZXR1cm4gbV9ub2RlLmdldCgpOyB9CisgICAgdmlydHVhbCB2b2lkIGRvQXBwbHkoKTsKIAot
cHJpdmF0ZToKICAgICBSZWZQdHI8Tm9kZT4gbV9ub2RlOwogfTsKIApJbmRleDogV2ViQ29yZS9l
ZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCShyZXZpc2lvbiAzNDQzOCkKKysr
IFdlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2IEFwcGxl
IENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA1LCAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTQsNiArNTQsNDAgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogdXNpbmcgbmFtZXNwYWNlIEV2ZW50TmFtZXM7CiB1c2luZyBuYW1lc3BhY2UgSFRNTE5h
bWVzOwogCitlbnVtIEVGcmFnbWVudFR5cGUgeyBFbXB0eUZyYWdtZW50LCBTaW5nbGVUZXh0Tm9k
ZUZyYWdtZW50LCBUcmVlRnJhZ21lbnQgfTsKKworLy8gLS0tIFJlcGxhY2VtZW50RnJhZ21lbnQg
aGVscGVyIGNsYXNzCisKK2NsYXNzIFJlcGxhY2VtZW50RnJhZ21lbnQgOiBOb25jb3B5YWJsZSB7
CitwdWJsaWM6CisgICAgUmVwbGFjZW1lbnRGcmFnbWVudChEb2N1bWVudCosIERvY3VtZW50RnJh
Z21lbnQqLCBib29sIG1hdGNoU3R5bGUsIGNvbnN0IFNlbGVjdGlvbiYpOworCisgICAgTm9kZSog
Zmlyc3RDaGlsZCgpIGNvbnN0OworICAgIE5vZGUqIGxhc3RDaGlsZCgpIGNvbnN0OworCisgICAg
Ym9vbCBpc0VtcHR5KCkgY29uc3Q7CisgICAgCisgICAgYm9vbCBoYXNJbnRlcmNoYW5nZU5ld2xp
bmVBdFN0YXJ0KCkgY29uc3QgeyByZXR1cm4gbV9oYXNJbnRlcmNoYW5nZU5ld2xpbmVBdFN0YXJ0
OyB9CisgICAgYm9vbCBoYXNJbnRlcmNoYW5nZU5ld2xpbmVBdEVuZCgpIGNvbnN0IHsgcmV0dXJu
IG1faGFzSW50ZXJjaGFuZ2VOZXdsaW5lQXRFbmQ7IH0KKyAgICAKKyAgICB2b2lkIHJlbW92ZU5v
ZGUoUGFzc1JlZlB0cjxOb2RlPik7CisgICAgdm9pZCByZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxk
cmVuKE5vZGUqKTsKKworcHJpdmF0ZToKKyAgICBQYXNzUmVmUHRyPE5vZGU+IGluc2VydEZyYWdt
ZW50Rm9yVGVzdFJlbmRlcmluZyhOb2RlKiBjb250ZXh0KTsKKyAgICB2b2lkIHJlbW92ZVVucmVu
ZGVyZWROb2RlcyhOb2RlKik7CisgICAgdm9pZCByZXN0b3JlVGVzdFJlbmRlcmluZ05vZGVzVG9G
cmFnbWVudChOb2RlKik7CisgICAgdm9pZCByZW1vdmVJbnRlcmNoYW5nZU5vZGVzKE5vZGUqKTsK
KyAgICAKKyAgICB2b2lkIGluc2VydE5vZGVCZWZvcmUoTm9kZSogbm9kZSwgTm9kZSogcmVmTm9k
ZSk7CisKKyAgICBSZWZQdHI8RG9jdW1lbnQ+IG1fZG9jdW1lbnQ7CisgICAgUmVmUHRyPERvY3Vt
ZW50RnJhZ21lbnQ+IG1fZnJhZ21lbnQ7CisgICAgYm9vbCBtX21hdGNoU3R5bGU7CisgICAgYm9v
bCBtX2hhc0ludGVyY2hhbmdlTmV3bGluZUF0U3RhcnQ7CisgICAgYm9vbCBtX2hhc0ludGVyY2hh
bmdlTmV3bGluZUF0RW5kOworfTsKKwogc3RhdGljIGJvb2wgaXNJbnRlcmNoYW5nZU5ld2xpbmVO
b2RlKGNvbnN0IE5vZGUgKm5vZGUpCiB7CiAgICAgc3RhdGljIFN0cmluZyBpbnRlcmNoYW5nZU5l
d2xpbmVDbGFzc1N0cmluZyhBcHBsZUludGVyY2hhbmdlTmV3bGluZSk7CkBAIC0xMDQsNyArMTM4
LDcgQEAgUmVwbGFjZW1lbnRGcmFnbWVudDo6UmVwbGFjZW1lbnRGcmFnbWVudAogICAgIFJlZlB0
cjxSYW5nZT4gcmFuZ2UgPSBTZWxlY3Rpb246OnNlbGVjdGlvbkZyb21Db250ZW50c09mTm9kZSho
b2xkZXIuZ2V0KCkpLnRvUmFuZ2UoKTsKICAgICBTdHJpbmcgdGV4dCA9IHBsYWluVGV4dChyYW5n
ZS5nZXQoKSk7CiAgICAgLy8gR2l2ZSB0aGUgcm9vdCBhIGNoYW5jZSB0byBjaGFuZ2UgdGhlIHRl
eHQuCi0gICAgUmVmUHRyPEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50PiBldnQgPSBuZXcgQmVmb3Jl
VGV4dEluc2VydGVkRXZlbnQodGV4dCk7CisgICAgUmVmUHRyPEJlZm9yZVRleHRJbnNlcnRlZEV2
ZW50PiBldnQgPSBCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudDo6Y3JlYXRlKHRleHQpOwogICAgIEV4
Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIGVkaXRhYmxlUm9vdC0+ZGlzcGF0Y2hFdmVudChldnQs
IGVjLCB0cnVlKTsKICAgICBBU1NFUlQoZWMgPT0gMCk7CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcv
UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcv
UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuaAkocmV2aXNpb24gMzQ0MzgpCisrKyBXZWJDb3JlL2Vk
aXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIw
MDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0zMiw1MCArMzIsMjIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFz
cyBEb2N1bWVudEZyYWdtZW50OwogCi1lbnVtIEVGcmFnbWVudFR5cGUgeyBFbXB0eUZyYWdtZW50
LCBTaW5nbGVUZXh0Tm9kZUZyYWdtZW50LCBUcmVlRnJhZ21lbnQgfTsKLQotLy8gLS0tIFJlcGxh
Y2VtZW50RnJhZ21lbnQgaGVscGVyIGNsYXNzCi0KLWNsYXNzIFJlcGxhY2VtZW50RnJhZ21lbnQg
OiBOb25jb3B5YWJsZSB7CitjbGFzcyBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZCA6IHB1YmxpYyBD
b21wb3NpdGVFZGl0Q29tbWFuZCB7CiBwdWJsaWM6Ci0gICAgUmVwbGFjZW1lbnRGcmFnbWVudChE
b2N1bWVudCosIERvY3VtZW50RnJhZ21lbnQqLCBib29sIG1hdGNoU3R5bGUsIGNvbnN0IFNlbGVj
dGlvbiYpOwotCi0gICAgTm9kZSogZmlyc3RDaGlsZCgpIGNvbnN0OwotICAgIE5vZGUqIGxhc3RD
aGlsZCgpIGNvbnN0OwotCi0gICAgYm9vbCBpc0VtcHR5KCkgY29uc3Q7Ci0gICAgCi0gICAgYm9v
bCBoYXNJbnRlcmNoYW5nZU5ld2xpbmVBdFN0YXJ0KCkgY29uc3QgeyByZXR1cm4gbV9oYXNJbnRl
cmNoYW5nZU5ld2xpbmVBdFN0YXJ0OyB9Ci0gICAgYm9vbCBoYXNJbnRlcmNoYW5nZU5ld2xpbmVB
dEVuZCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzSW50ZXJjaGFuZ2VOZXdsaW5lQXRFbmQ7IH0KLSAg
ICAKLSAgICB2b2lkIHJlbW92ZU5vZGUoUGFzc1JlZlB0cjxOb2RlPik7Ci0gICAgdm9pZCByZW1v
dmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuKE5vZGUqKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxS
ZXBsYWNlU2VsZWN0aW9uQ29tbWFuZD4gY3JlYXRlKERvY3VtZW50KiBkb2N1bWVudCwgUGFzc1Jl
ZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCwKKyAgICAgICAgYm9vbCBzZWxlY3RSZXBs
YWNlbWVudCA9IHRydWUsIGJvb2wgc21hcnRSZXBsYWNlID0gZmFsc2UsIGJvb2wgbWF0Y2hTdHls
ZSA9IGZhbHNlLCBib29sIHByZXZlbnROZXN0aW5nID0gdHJ1ZSwgYm9vbCBtb3ZpbmdQYXJhZ3Jh
cGggPSBmYWxzZSwKKyAgICAgICAgRWRpdEFjdGlvbiBhY3Rpb24gPSBFZGl0QWN0aW9uUGFzdGUp
CisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFJlcGxhY2VTZWxlY3Rpb25Db21t
YW5kKGRvY3VtZW50LCBmcmFnbWVudCwgc2VsZWN0UmVwbGFjZW1lbnQsIHNtYXJ0UmVwbGFjZSwg
bWF0Y2hTdHlsZSwgcHJldmVudE5lc3RpbmcsIG1vdmluZ1BhcmFncmFwaCwgYWN0aW9uKSk7Cisg
ICAgfQogCiBwcml2YXRlOgotICAgIFBhc3NSZWZQdHI8Tm9kZT4gaW5zZXJ0RnJhZ21lbnRGb3JU
ZXN0UmVuZGVyaW5nKE5vZGUqIGNvbnRleHQpOwotICAgIHZvaWQgcmVtb3ZlVW5yZW5kZXJlZE5v
ZGVzKE5vZGUqKTsKLSAgICB2b2lkIHJlc3RvcmVUZXN0UmVuZGVyaW5nTm9kZXNUb0ZyYWdtZW50
KE5vZGUqKTsKLSAgICB2b2lkIHJlbW92ZUludGVyY2hhbmdlTm9kZXMoTm9kZSopOwotICAgIAot
ICAgIHZvaWQgaW5zZXJ0Tm9kZUJlZm9yZShOb2RlKiBub2RlLCBOb2RlKiByZWZOb2RlKTsKLQot
ICAgIFJlZlB0cjxEb2N1bWVudD4gbV9kb2N1bWVudDsKLSAgICBSZWZQdHI8RG9jdW1lbnRGcmFn
bWVudD4gbV9mcmFnbWVudDsKLSAgICBib29sIG1fbWF0Y2hTdHlsZTsKLSAgICBib29sIG1faGFz
SW50ZXJjaGFuZ2VOZXdsaW5lQXRTdGFydDsKLSAgICBib29sIG1faGFzSW50ZXJjaGFuZ2VOZXds
aW5lQXRFbmQ7Ci19OwotCi1jbGFzcyBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZCA6IHB1YmxpYyBD
b21wb3NpdGVFZGl0Q29tbWFuZCB7Ci1wdWJsaWM6CiAgICAgUmVwbGFjZVNlbGVjdGlvbkNvbW1h
bmQoRG9jdW1lbnQqLCBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+LAotICAgICAgICBib29s
IHNlbGVjdFJlcGxhY2VtZW50ID0gdHJ1ZSwgYm9vbCBzbWFydFJlcGxhY2UgPSBmYWxzZSwgYm9v
bCBtYXRjaFN0eWxlID0gZmFsc2UsIGJvb2wgcHJldmVudE5lc3RpbmcgPSB0cnVlLCBib29sIG1v
dmluZ1BhcmFncmFwaCA9IGZhbHNlLAotICAgICAgICBFZGl0QWN0aW9uID0gRWRpdEFjdGlvblBh
c3RlKTsKLSAgICAKKyAgICAgICAgYm9vbCBzZWxlY3RSZXBsYWNlbWVudCwgYm9vbCBzbWFydFJl
cGxhY2UsIGJvb2wgbWF0Y2hTdHlsZSwgYm9vbCBwcmV2ZW50TmVzdGluZywgYm9vbCBtb3ZpbmdQ
YXJhZ3JhcGgsIEVkaXRBY3Rpb24pOworCiAgICAgdmlydHVhbCB2b2lkIGRvQXBwbHkoKTsKICAg
ICB2aXJ0dWFsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbigpIGNvbnN0OwogCi1wcml2YXRlOgog
ICAgIHZvaWQgY29tcGxldGVIVE1MUmVwbGFjZW1lbnQoY29uc3QgUG9zaXRpb24mIGxhc3RQb3Np
dGlvblRvU2VsZWN0KTsKIAogICAgIHZvaWQgaW5zZXJ0Tm9kZUFmdGVyQW5kVXBkYXRlTm9kZXNJ
bnNlcnRlZChOb2RlKiBpbnNlcnRDaGlsZCwgTm9kZSogcmVmQ2hpbGQpOwpJbmRleDogV2ViQ29y
ZS9lZGl0aW5nL1NldE5vZGVBdHRyaWJ1dGVDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2VkaXRpbmcvU2V0Tm9kZUF0dHJpYnV0ZUNvbW1hbmQuY3BwCShyZXZpc2lvbiAzNDQzOCkK
KysrIFdlYkNvcmUvZWRpdGluZy9TZXROb2RlQXR0cmlidXRlQ29tbWFuZC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIENv
bXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1
LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMjUsMTUgKzI1LDE1IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJTZXROb2RlQXR0cmlidXRlQ29tbWFuZC5oIgotI2luY2x1ZGUgIkVsZW1lbnQu
aCIKIAorI2luY2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVNldE5vZGVBdHRyaWJ1dGVDb21tYW5kOjpTZXROb2Rl
QXR0cmlidXRlQ29tbWFuZChFbGVtZW50KiBlbGVtZW50LCAKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1
dGUsIGNvbnN0IFN0cmluZyAmdmFsdWUpCi0gICAgOiBFZGl0Q29tbWFuZChlbGVtZW50LT5kb2N1
bWVudCgpKSwgbV9lbGVtZW50KGVsZW1lbnQpLCBtX2F0dHJpYnV0ZShhdHRyaWJ1dGUpLCBtX3Zh
bHVlKHZhbHVlKQorU2V0Tm9kZUF0dHJpYnV0ZUNvbW1hbmQ6OlNldE5vZGVBdHRyaWJ1dGVDb21t
YW5kKFBhc3NSZWZQdHI8RWxlbWVudD4gZWxlbWVudCwgCisgICAgICAgIGNvbnN0IFF1YWxpZmll
ZE5hbWUmIGF0dHJpYnV0ZSwgY29uc3QgU3RyaW5nICZ2YWx1ZSkKKyAgICA6IFNpbXBsZUVkaXRD
b21tYW5kKGVsZW1lbnQtPmRvY3VtZW50KCkpLCBtX2VsZW1lbnQoZWxlbWVudCksIG1fYXR0cmli
dXRlKGF0dHJpYnV0ZSksIG1fdmFsdWUodmFsdWUpCiB7CiAgICAgQVNTRVJUKG1fZWxlbWVudCk7
CiAgICAgQVNTRVJUKCFtX3ZhbHVlLmlzTnVsbCgpKTsKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9T
ZXROb2RlQXR0cmlidXRlQ29tbWFuZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9T
ZXROb2RlQXR0cmlidXRlQ29tbWFuZC5oCShyZXZpc2lvbiAzNDQzOCkKKysrIFdlYkNvcmUvZWRp
dGluZy9TZXROb2RlQXR0cmlidXRlQ29tbWFuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAw
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTMxLDIyICszMSwyMyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNs
YXNzIFNldE5vZGVBdHRyaWJ1dGVDb21tYW5kIDogcHVibGljIEVkaXRDb21tYW5kIHsKK2NsYXNz
IFNldE5vZGVBdHRyaWJ1dGVDb21tYW5kIDogcHVibGljIFNpbXBsZUVkaXRDb21tYW5kIHsKIHB1
YmxpYzoKLSAgICBTZXROb2RlQXR0cmlidXRlQ29tbWFuZChFbGVtZW50KiwgY29uc3QgUXVhbGlm
aWVkTmFtZSYgYXR0cmlidXRlLCBjb25zdCBTdHJpbmcgJnZhbHVlKTsKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxTZXROb2RlQXR0cmlidXRlQ29tbWFuZD4gY3JlYXRlKFBhc3NSZWZQdHI8RWxlbWVu
dD4gZWxlbWVudCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlLCBjb25zdCBBdG9taWNT
dHJpbmcmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTZXROb2Rl
QXR0cmlidXRlQ29tbWFuZChlbGVtZW50LCBhdHRyaWJ1dGUsIHZhbHVlKSk7CisgICAgfQorCitw
cml2YXRlOgorICAgIFNldE5vZGVBdHRyaWJ1dGVDb21tYW5kKFBhc3NSZWZQdHI8RWxlbWVudD4s
IGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7CiAK
ICAgICB2aXJ0dWFsIHZvaWQgZG9BcHBseSgpOwogICAgIHZpcnR1YWwgdm9pZCBkb1VuYXBwbHko
KTsKIAotICAgIEVsZW1lbnQqIGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnQuZ2V0
KCk7IH0KLSAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGUoKSBjb25zdCB7IHJldHVy
biBtX2F0dHJpYnV0ZTsgfQotICAgIFN0cmluZyB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFs
dWU7IH0KLSAgICAKLXByaXZhdGU6CiAgICAgUmVmUHRyPEVsZW1lbnQ+IG1fZWxlbWVudDsKICAg
ICBRdWFsaWZpZWROYW1lIG1fYXR0cmlidXRlOwotICAgIFN0cmluZyBtX3ZhbHVlOwotICAgIFN0
cmluZyBtX29sZFZhbHVlOworICAgIEF0b21pY1N0cmluZyBtX3ZhbHVlOworICAgIEF0b21pY1N0
cmluZyBtX29sZFZhbHVlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2Vi
Q29yZS9lZGl0aW5nL1NwbGl0RWxlbWVudENvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvZWRpdGluZy9TcGxpdEVsZW1lbnRDb21tYW5kLmNwcAkocmV2aXNpb24gMzQ0MzgpCisrKyBX
ZWJDb3JlL2VkaXRpbmcvU3BsaXRFbGVtZW50Q29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMjUsMTQgKzI1LDE0IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJTcGxpdEVsZW1lbnRDb21tYW5kLmgiCi0jaW5jbHVkZSAiRWxlbWVudC5oIgogCisjaW5jbHVk
ZSAiRWxlbWVudC5oIgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotU3BsaXRFbGVtZW50Q29tbWFuZDo6U3BsaXRFbGVtZW50Q29tbWFuZChFbGVt
ZW50KiBlbGVtZW50LCBOb2RlKiBhdENoaWxkKQotICAgIDogRWRpdENvbW1hbmQoZWxlbWVudC0+
ZG9jdW1lbnQoKSksIG1fZWxlbWVudDIoZWxlbWVudCksIG1fYXRDaGlsZChhdENoaWxkKQorU3Bs
aXRFbGVtZW50Q29tbWFuZDo6U3BsaXRFbGVtZW50Q29tbWFuZChQYXNzUmVmUHRyPEVsZW1lbnQ+
IGVsZW1lbnQsIFBhc3NSZWZQdHI8Tm9kZT4gYXRDaGlsZCkKKyAgICA6IFNpbXBsZUVkaXRDb21t
YW5kKGVsZW1lbnQtPmRvY3VtZW50KCkpLCBtX2VsZW1lbnQyKGVsZW1lbnQpLCBtX2F0Q2hpbGQo
YXRDaGlsZCkKIHsKICAgICBBU1NFUlQobV9lbGVtZW50Mik7CiAgICAgQVNTRVJUKG1fYXRDaGls
ZCk7CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvU3BsaXRFbGVtZW50Q29tbWFuZC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9TcGxpdEVsZW1lbnRDb21tYW5kLmgJKHJldmlzaW9uIDM0
NDM4KQorKysgV2ViQ29yZS9lZGl0aW5nL1NwbGl0RWxlbWVudENvbW1hbmQuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYgQXBw
bGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDUsIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCwxNCArMzAsMTkgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1jbGFzcyBTcGxpdEVsZW1lbnRDb21tYW5kIDogcHVibGljIEVkaXRDb21t
YW5kIHsKK2NsYXNzIFNwbGl0RWxlbWVudENvbW1hbmQgOiBwdWJsaWMgU2ltcGxlRWRpdENvbW1h
bmQgewogcHVibGljOgotICAgIFNwbGl0RWxlbWVudENvbW1hbmQoRWxlbWVudCosIE5vZGUqIHNw
bGl0UG9pbnRDaGlsZCk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U3BsaXRFbGVtZW50Q29tbWFu
ZD4gY3JlYXRlKFBhc3NSZWZQdHI8RWxlbWVudD4gZWxlbWVudCwgUGFzc1JlZlB0cjxOb2RlPiBz
cGxpdFBvaW50Q2hpbGQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNwbGl0
RWxlbWVudENvbW1hbmQoZWxlbWVudCwgc3BsaXRQb2ludENoaWxkKSk7CisgICAgfQorCitwcml2
YXRlOgorICAgIFNwbGl0RWxlbWVudENvbW1hbmQoUGFzc1JlZlB0cjxFbGVtZW50PiwgUGFzc1Jl
ZlB0cjxOb2RlPiBzcGxpdFBvaW50Q2hpbGQpOwogCiAgICAgdmlydHVhbCB2b2lkIGRvQXBwbHko
KTsKICAgICB2aXJ0dWFsIHZvaWQgZG9VbmFwcGx5KCk7CiAKLXByaXZhdGU6CiAgICAgUmVmUHRy
PEVsZW1lbnQ+IG1fZWxlbWVudDE7CiAgICAgUmVmUHRyPEVsZW1lbnQ+IG1fZWxlbWVudDI7CiAg
ICAgUmVmUHRyPE5vZGU+IG1fYXRDaGlsZDsKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9TcGxpdFRl
eHROb2RlQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL1NwbGl0VGV4
dE5vZGVDb21tYW5kLmNwcAkocmV2aXNpb24gMzQ0MzgpCisrKyBXZWJDb3JlL2VkaXRpbmcvU3Bs
aXRUZXh0Tm9kZUNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwNSBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDEzICsy
OCwxMiBAQAogCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJUZXh0LmgiCi0KICNp
bmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVNwbGl0
VGV4dE5vZGVDb21tYW5kOjpTcGxpdFRleHROb2RlQ29tbWFuZChUZXh0KiB0ZXh0LCBpbnQgb2Zm
c2V0KQotICAgIDogRWRpdENvbW1hbmQodGV4dC0+ZG9jdW1lbnQoKSksIG1fdGV4dDIodGV4dCks
IG1fb2Zmc2V0KG9mZnNldCkKK1NwbGl0VGV4dE5vZGVDb21tYW5kOjpTcGxpdFRleHROb2RlQ29t
bWFuZChQYXNzUmVmUHRyPFRleHQ+IHRleHQsIGludCBvZmZzZXQpCisgICAgOiBTaW1wbGVFZGl0
Q29tbWFuZCh0ZXh0LT5kb2N1bWVudCgpKSwgbV90ZXh0Mih0ZXh0KSwgbV9vZmZzZXQob2Zmc2V0
KQogewogICAgIEFTU0VSVChtX3RleHQyKTsKICAgICBBU1NFUlQobV90ZXh0Mi0+bGVuZ3RoKCkg
PiAwKTsKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9TcGxpdFRleHROb2RlQ29tbWFuZC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9TcGxpdFRleHROb2RlQ29tbWFuZC5oCShyZXZpc2lv
biAzNDQzOCkKKysrIFdlYkNvcmUvZWRpdGluZy9TcGxpdFRleHROb2RlQ29tbWFuZC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAw
NiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNSwgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDIyICsyNywyNCBAQAogI2RlZmlu
ZSBTcGxpdFRleHROb2RlQ29tbWFuZF9oCiAKICNpbmNsdWRlICJFZGl0Q29tbWFuZC5oIgotI2lu
Y2x1ZGUgIlRleHQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBTcGxpdFRleHRO
b2RlQ29tbWFuZCA6IHB1YmxpYyBFZGl0Q29tbWFuZCB7CitjbGFzcyBUZXh0OworCitjbGFzcyBT
cGxpdFRleHROb2RlQ29tbWFuZCA6IHB1YmxpYyBTaW1wbGVFZGl0Q29tbWFuZCB7CiBwdWJsaWM6
Ci0gICAgU3BsaXRUZXh0Tm9kZUNvbW1hbmQoVGV4dCosIGludCBvZmZzZXQpOwotICAgIHZpcnR1
YWwgflNwbGl0VGV4dE5vZGVDb21tYW5kKCkgeyB9CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U3Bs
aXRUZXh0Tm9kZUNvbW1hbmQ+IGNyZWF0ZShQYXNzUmVmUHRyPFRleHQ+IG5vZGUsIGludCBvZmZz
ZXQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNwbGl0VGV4dE5vZGVDb21t
YW5kKG5vZGUsIG9mZnNldCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBTcGxpdFRleHROb2Rl
Q29tbWFuZChQYXNzUmVmUHRyPFRleHQ+LCBpbnQgb2Zmc2V0KTsKIAogICAgIHZpcnR1YWwgdm9p
ZCBkb0FwcGx5KCk7CiAgICAgdmlydHVhbCB2b2lkIGRvVW5hcHBseSgpOwogCi0gICAgVGV4dCog
bm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dDIuZ2V0KCk7IH0KLSAgICBpbnQgb2Zmc2V0KCkg
Y29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KLQotcHJpdmF0ZToKICAgICBSZWZQdHI8VGV4dD4g
bV90ZXh0MTsKICAgICBSZWZQdHI8VGV4dD4gbV90ZXh0MjsKICAgICB1bnNpZ25lZCBtX29mZnNl
dDsKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9TcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnRD
b21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvU3BsaXRUZXh0Tm9kZUNv
bnRhaW5pbmdFbGVtZW50Q29tbWFuZC5jcHAJKHJldmlzaW9uIDM0NDM4KQorKysgV2ViQ29yZS9l
ZGl0aW5nL1NwbGl0VGV4dE5vZGVDb250YWluaW5nRWxlbWVudENvbW1hbmQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMyw3ICszMyw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU3BsaXRU
ZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50Q29tbWFuZDo6U3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdF
bGVtZW50Q29tbWFuZChUZXh0KiB0ZXh0LCBpbnQgb2Zmc2V0KQorU3BsaXRUZXh0Tm9kZUNvbnRh
aW5pbmdFbGVtZW50Q29tbWFuZDo6U3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50Q29tbWFu
ZChQYXNzUmVmUHRyPFRleHQ+IHRleHQsIGludCBvZmZzZXQpCiAgICAgOiBDb21wb3NpdGVFZGl0
Q29tbWFuZCh0ZXh0LT5kb2N1bWVudCgpKSwgbV90ZXh0KHRleHQpLCBtX29mZnNldChvZmZzZXQp
CiB7CiAgICAgQVNTRVJUKG1fdGV4dCk7CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvU3BsaXRUZXh0
Tm9kZUNvbnRhaW5pbmdFbGVtZW50Q29tbWFuZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRp
dGluZy9TcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnRDb21tYW5kLmgJKHJldmlzaW9uIDM0
NDM4KQorKysgV2ViQ29yZS9lZGl0aW5nL1NwbGl0VGV4dE5vZGVDb250YWluaW5nRWxlbWVudENv
bW1hbmQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMiwxMSArMzIs
MTYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBTcGxpdFRleHROb2RlQ29udGFpbmlu
Z0VsZW1lbnRDb21tYW5kIDogcHVibGljIENvbXBvc2l0ZUVkaXRDb21tYW5kIHsKIHB1YmxpYzoK
LSAgICBTcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnRDb21tYW5kKFRleHQqLCBpbnQgb2Zm
c2V0KTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1l
bnRDb21tYW5kPiBjcmVhdGUoUGFzc1JlZlB0cjxUZXh0PiBub2RlLCBpbnQgb2Zmc2V0KQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTcGxpdFRleHROb2RlQ29udGFpbmluZ0Vs
ZW1lbnRDb21tYW5kKG5vZGUsIG9mZnNldCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBTcGxp
dFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnRDb21tYW5kKFBhc3NSZWZQdHI8VGV4dD4sIGludCBv
ZmZzZXQpOwogCiAgICAgdmlydHVhbCB2b2lkIGRvQXBwbHkoKTsKIAotcHJpdmF0ZToKICAgICBS
ZWZQdHI8VGV4dD4gbV90ZXh0OwogICAgIGludCBtX29mZnNldDsKIH07CkluZGV4OiBXZWJDb3Jl
L2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5n
L1R5cGluZ0NvbW1hbmQuY3BwCShyZXZpc2lvbiAzNDQzOCkKKysrIFdlYkNvcmUvZWRpdGluZy9U
eXBpbmdDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC03Miw3ICs3Miw3IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6ZGVsZXRlU2VsZWN0aW9uKERvY3UK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBSZWZQdHI8VHlwaW5nQ29tbWFuZD4g
dHlwaW5nQ29tbWFuZCA9IG5ldyBUeXBpbmdDb21tYW5kKGRvY3VtZW50LCBEZWxldGVTZWxlY3Rp
b24sICIiLCBmYWxzZSk7CisgICAgUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IHR5cGluZ0NvbW1hbmQg
PSBUeXBpbmdDb21tYW5kOjpjcmVhdGUoZG9jdW1lbnQsIERlbGV0ZVNlbGVjdGlvbiwgIiIsIGZh
bHNlKTsKICAgICB0eXBpbmdDb21tYW5kLT5zZXRTbWFydERlbGV0ZShzbWFydERlbGV0ZSk7CiAg
ICAgdHlwaW5nQ29tbWFuZC0+YXBwbHkoKTsKIH0KQEAgLTkwLDcgKzkwLDcgQEAgdm9pZCBUeXBp
bmdDb21tYW5kOjpkZWxldGVLZXlQcmVzc2VkKERvYwogICAgICAgICByZXR1cm47CiAgICAgfQog
ICAgIAotICAgIFJlZlB0cjxUeXBpbmdDb21tYW5kPiB0eXBpbmdDb21tYW5kID0gbmV3IFR5cGlu
Z0NvbW1hbmQoZG9jdW1lbnQsIERlbGV0ZUtleSwgIiIsIGZhbHNlLCBncmFudWxhcml0eSk7Cisg
ICAgUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IHR5cGluZ0NvbW1hbmQgPSBUeXBpbmdDb21tYW5kOjpj
cmVhdGUoZG9jdW1lbnQsIERlbGV0ZUtleSwgIiIsIGZhbHNlLCBncmFudWxhcml0eSk7CiAgICAg
dHlwaW5nQ29tbWFuZC0+c2V0U21hcnREZWxldGUoc21hcnREZWxldGUpOwogICAgIHR5cGluZ0Nv
bW1hbmQtPmFwcGx5KCk7CiB9CkBAIC0xMDksNyArMTA5LDcgQEAgdm9pZCBUeXBpbmdDb21tYW5k
Ojpmb3J3YXJkRGVsZXRlS2V5UHJlcwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgUmVm
UHRyPFR5cGluZ0NvbW1hbmQ+IHR5cGluZ0NvbW1hbmQgPSBuZXcgVHlwaW5nQ29tbWFuZChkb2N1
bWVudCwgRm9yd2FyZERlbGV0ZUtleSwgIiIsIGZhbHNlLCBncmFudWxhcml0eSk7CisgICAgUmVm
UHRyPFR5cGluZ0NvbW1hbmQ+IHR5cGluZ0NvbW1hbmQgPSBUeXBpbmdDb21tYW5kOjpjcmVhdGUo
ZG9jdW1lbnQsIEZvcndhcmREZWxldGVLZXksICIiLCBmYWxzZSwgZ3JhbnVsYXJpdHkpOwogICAg
IHR5cGluZ0NvbW1hbmQtPnNldFNtYXJ0RGVsZXRlKHNtYXJ0RGVsZXRlKTsKICAgICB0eXBpbmdD
b21tYW5kLT5hcHBseSgpOwogfQpAQCAtMTQwLDcgKzE0MCw3IEBAIHZvaWQgVHlwaW5nQ29tbWFu
ZDo6aW5zZXJ0VGV4dChEb2N1bWVudCoKICAgICBpZiAoc3RhcnROb2RlICYmIHN0YXJ0Tm9kZS0+
cm9vdEVkaXRhYmxlRWxlbWVudCgpICYmICFpbnNlcnRlZFRleHRJc0NvbXBvc2l0aW9uKSB7ICAg
ICAgICAKICAgICAgICAgLy8gU2VuZCBCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudC4gVGhlIGV2ZW50
IGhhbmRsZXIgd2lsbCB1cGRhdGUgdGV4dCBpZiBuZWNlc3NhcnkuCiAgICAgICAgIEV4Y2VwdGlv
bkNvZGUgZWMgPSAwOwotICAgICAgICBSZWZQdHI8QmVmb3JlVGV4dEluc2VydGVkRXZlbnQ+IGV2
dCA9IG5ldyBCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudCh0ZXh0KTsKKyAgICAgICAgUmVmUHRyPEJl
Zm9yZVRleHRJbnNlcnRlZEV2ZW50PiBldnQgPSBCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudDo6Y3Jl
YXRlKHRleHQpOwogICAgICAgICBzdGFydE5vZGUtPnJvb3RFZGl0YWJsZUVsZW1lbnQoKS0+ZGlz
cGF0Y2hFdmVudChldnQsIGVjLCB0cnVlKTsKICAgICAgICAgbmV3VGV4dCA9IGV2dC0+dGV4dCgp
OwogICAgIH0KQEAgLTE2Niw3ICsxNjYsNyBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydFRl
eHQoRG9jdW1lbnQqCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBSZWZQdHI8VHlwaW5n
Q29tbWFuZD4gY21kID0gbmV3IFR5cGluZ0NvbW1hbmQoZG9jdW1lbnQsIEluc2VydFRleHQsIG5l
d1RleHQsIHNlbGVjdEluc2VydGVkVGV4dCk7CisgICAgUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGNt
ZCA9IFR5cGluZ0NvbW1hbmQ6OmNyZWF0ZShkb2N1bWVudCwgSW5zZXJ0VGV4dCwgbmV3VGV4dCwg
c2VsZWN0SW5zZXJ0ZWRUZXh0KTsKICAgICBpZiAoY2hhbmdlU2VsZWN0aW9uKSAgewogICAgICAg
ICBjbWQtPnNldFN0YXJ0aW5nU2VsZWN0aW9uKHNlbGVjdGlvbkZvckluc2VydGlvbik7CiAgICAg
ICAgIGNtZC0+c2V0RW5kaW5nU2VsZWN0aW9uKHNlbGVjdGlvbkZvckluc2VydGlvbik7CkBAIC0x
OTEsNyArMTkxLDcgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRMaW5lQnJlYWsoRG9jdQog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXBwbHlDb21tYW5kKG5ldyBUeXBpbmdDb21t
YW5kKGRvY3VtZW50LCBJbnNlcnRMaW5lQnJlYWspKTsKKyAgICBhcHBseUNvbW1hbmQoVHlwaW5n
Q29tbWFuZDo6Y3JlYXRlKGRvY3VtZW50LCBJbnNlcnRMaW5lQnJlYWspKTsKIH0KIAogdm9pZCBU
eXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JJblF1b3RlZENvbnRlbnQoRG9j
dW1lbnQgKmRvY3VtZW50KQpAQCAtMjA3LDcgKzIwNyw3IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6
aW5zZXJ0UGFyYWdyYXBoU2VwYXIKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGFwcGx5
Q29tbWFuZChuZXcgVHlwaW5nQ29tbWFuZChkb2N1bWVudCwgSW5zZXJ0UGFyYWdyYXBoU2VwYXJh
dG9ySW5RdW90ZWRDb250ZW50KSk7CisgICAgYXBwbHlDb21tYW5kKFR5cGluZ0NvbW1hbmQ6OmNy
ZWF0ZShkb2N1bWVudCwgSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9ySW5RdW90ZWRDb250ZW50KSk7
CiB9CiAKIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKERvY3Vt
ZW50ICpkb2N1bWVudCkKQEAgLTIyMyw3ICsyMjMsNyBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6Omlu
c2VydFBhcmFncmFwaFNlcGFyCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhcHBseUNv
bW1hbmQobmV3IFR5cGluZ0NvbW1hbmQoZG9jdW1lbnQsIEluc2VydFBhcmFncmFwaFNlcGFyYXRv
cikpOworICAgIGFwcGx5Q29tbWFuZChUeXBpbmdDb21tYW5kOjpjcmVhdGUoZG9jdW1lbnQsIElu
c2VydFBhcmFncmFwaFNlcGFyYXRvcikpOwogfQogCiBib29sIFR5cGluZ0NvbW1hbmQ6OmlzT3Bl
bkZvck1vcmVUeXBpbmdDb21tYW5kKGNvbnN0IEVkaXRDb21tYW5kKiBjbWQpCkBAIC0zNDIsNyAr
MzQyLDcgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRUZXh0UnVuV2l0aG91dAogICAgICAg
ICAgICAgY29tbWFuZCA9IHN0YXRpY19jYXN0PEluc2VydFRleHRDb21tYW5kKj4obGFzdENvbW1h
bmQpOwogICAgIH0KICAgICBpZiAoIWNvbW1hbmQpIHsKLSAgICAgICAgY29tbWFuZCA9IG5ldyBJ
bnNlcnRUZXh0Q29tbWFuZChkb2N1bWVudCgpKTsKKyAgICAgICAgY29tbWFuZCA9IEluc2VydFRl
eHRDb21tYW5kOjpjcmVhdGUoZG9jdW1lbnQoKSk7CiAgICAgICAgIGFwcGx5Q29tbWFuZFRvQ29t
cG9zaXRlKGNvbW1hbmQpOwogICAgIH0KICAgICBjb21tYW5kLT5pbnB1dCh0ZXh0LCBzZWxlY3RJ
bnNlcnRlZFRleHQpOwpAQCAtMzUxLDE5ICszNTEsMTkgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjpp
bnNlcnRUZXh0UnVuV2l0aG91dAogCiB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydExpbmVCcmVh
aygpCiB7Ci0gICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUobmV3IEluc2VydExpbmVCcmVha0Nv
bW1hbmQoZG9jdW1lbnQoKSkpOworICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKEluc2VydExp
bmVCcmVha0NvbW1hbmQ6OmNyZWF0ZShkb2N1bWVudCgpKSk7CiAgICAgdHlwaW5nQWRkZWRUb09w
ZW5Db21tYW5kKCk7CiB9CiAKIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2Vw
YXJhdG9yKCkKIHsKLSAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShuZXcgSW5zZXJ0UGFyYWdy
YXBoU2VwYXJhdG9yQ29tbWFuZChkb2N1bWVudCgpKSk7CisgICAgYXBwbHlDb21tYW5kVG9Db21w
b3NpdGUoSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZDo6Y3JlYXRlKGRvY3VtZW50KCkp
KTsKICAgICB0eXBpbmdBZGRlZFRvT3BlbkNvbW1hbmQoKTsKIH0KIAogdm9pZCBUeXBpbmdDb21t
YW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JJblF1b3RlZENvbnRlbnQoKQogewotICAgIGFw
cGx5Q29tbWFuZFRvQ29tcG9zaXRlKG5ldyBCcmVha0Jsb2NrcXVvdGVDb21tYW5kKGRvY3VtZW50
KCkpKTsKKyAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShCcmVha0Jsb2NrcXVvdGVDb21tYW5k
OjpjcmVhdGUoZG9jdW1lbnQoKSkpOwogICAgIHR5cGluZ0FkZGVkVG9PcGVuQ29tbWFuZCgpOwog
fQogCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmgJKHJldmlzaW9uIDM0NDM4KQorKysgV2Vi
Q29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywgMjAw
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTQyLDggKzQyLDYgQEAgcHVibGljOgogICAgICAgICBJbnNlcnRQYXJhZ3Jh
cGhTZXBhcmF0b3JJblF1b3RlZENvbnRlbnQKICAgICB9OwogCi0gICAgVHlwaW5nQ29tbWFuZChE
b2N1bWVudCosIEVUeXBpbmdDb21tYW5kLCBjb25zdCBTdHJpbmcmIHRleHQgPSAiIiwgYm9vbCBz
ZWxlY3RJbnNlcnRlZFRleHQgPSBmYWxzZSwgVGV4dEdyYW51bGFyaXR5ID0gQ2hhcmFjdGVyR3Jh
bnVsYXJpdHkpOwotCiAgICAgc3RhdGljIHZvaWQgZGVsZXRlU2VsZWN0aW9uKERvY3VtZW50Kiwg
Ym9vbCBzbWFydERlbGV0ZSA9IGZhbHNlKTsKICAgICBzdGF0aWMgdm9pZCBkZWxldGVLZXlQcmVz
c2VkKERvY3VtZW50KiwgYm9vbCBzbWFydERlbGV0ZSA9IGZhbHNlLCBUZXh0R3JhbnVsYXJpdHkg
PSBDaGFyYWN0ZXJHcmFudWxhcml0eSk7CiAgICAgc3RhdGljIHZvaWQgZm9yd2FyZERlbGV0ZUtl
eVByZXNzZWQoRG9jdW1lbnQqLCBib29sIHNtYXJ0RGVsZXRlID0gZmFsc2UsIFRleHRHcmFudWxh
cml0eSA9IENoYXJhY3RlckdyYW51bGFyaXR5KTsKQEAgLTU1LDkgKzUzLDYgQEAgcHVibGljOgog
ICAgIHN0YXRpYyBib29sIGlzT3BlbkZvck1vcmVUeXBpbmdDb21tYW5kKGNvbnN0IEVkaXRDb21t
YW5kKik7CiAgICAgc3RhdGljIHZvaWQgY2xvc2VUeXBpbmcoRWRpdENvbW1hbmQqKTsKICAgICAK
LSAgICB2aXJ0dWFsIHZvaWQgZG9BcHBseSgpOwotICAgIHZpcnR1YWwgRWRpdEFjdGlvbiBlZGl0
aW5nQWN0aW9uKCkgY29uc3Q7Ci0KICAgICBib29sIGlzT3BlbkZvck1vcmVUeXBpbmcoKSBjb25z
dCB7IHJldHVybiBtX29wZW5Gb3JNb3JlVHlwaW5nOyB9CiAgICAgdm9pZCBjbG9zZVR5cGluZygp
IHsgbV9vcGVuRm9yTW9yZVR5cGluZyA9IGZhbHNlOyB9CiAKQEAgLTcxLDkgKzY2LDE4IEBAIHB1
YmxpYzoKICAgICB2b2lkIGRlbGV0ZVNlbGVjdGlvbihib29sKTsKIAogcHJpdmF0ZToKLSAgICBi
b29sIHNtYXJ0RGVsZXRlKCkgeyByZXR1cm4gbV9zbWFydERlbGV0ZTsgfQorICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGNyZWF0ZShEb2N1bWVudCogZG9jdW1lbnQsIEVUeXBp
bmdDb21tYW5kIGNvbW1hbmQsIGNvbnN0IFN0cmluZyYgdGV4dCA9ICIiLCBib29sIHNlbGVjdElu
c2VydGVkVGV4dCA9IGZhbHNlLCBUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkgPSBDaGFyYWN0
ZXJHcmFudWxhcml0eSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVHlwaW5n
Q29tbWFuZChkb2N1bWVudCwgY29tbWFuZCwgdGV4dCwgc2VsZWN0SW5zZXJ0ZWRUZXh0LCBncmFu
dWxhcml0eSkpOworICAgIH0KKworICAgIFR5cGluZ0NvbW1hbmQoRG9jdW1lbnQqLCBFVHlwaW5n
Q29tbWFuZCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBib29sIHNlbGVjdEluc2VydGVkVGV4dCwgVGV4
dEdyYW51bGFyaXR5KTsKKworICAgIGJvb2wgc21hcnREZWxldGUoKSBjb25zdCB7IHJldHVybiBt
X3NtYXJ0RGVsZXRlOyB9CiAgICAgdm9pZCBzZXRTbWFydERlbGV0ZShib29sIHNtYXJ0RGVsZXRl
KSB7IG1fc21hcnREZWxldGUgPSBzbWFydERlbGV0ZTsgfQogICAgIAorICAgIHZpcnR1YWwgdm9p
ZCBkb0FwcGx5KCk7CisgICAgdmlydHVhbCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24oKSBjb25z
dDsKICAgICB2aXJ0dWFsIGJvb2wgaXNUeXBpbmdDb21tYW5kKCkgY29uc3Q7CiAgICAgdmlydHVh
bCBib29sIHByZXNlcnZlc1R5cGluZ1N0eWxlKCkgY29uc3Q7CiAKSW5kZXg6IFdlYkNvcmUvZWRp
dGluZy9VbmxpbmtDb21tYW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL1VubGlu
a0NvbW1hbmQuaAkocmV2aXNpb24gMzQ0MzgpCisrKyBXZWJDb3JlL2VkaXRpbmcvVW5saW5rQ29t
bWFuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDcgKzMyLDE0IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogY2xhc3MgVW5saW5rQ29tbWFuZCA6IHB1YmxpYyBDb21wb3NpdGVFZGl0
Q29tbWFuZCB7CiBwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8VW5saW5rQ29tbWFuZD4g
Y3JlYXRlKERvY3VtZW50KiBkb2N1bWVudCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgVW5saW5rQ29tbWFuZChkb2N1bWVudCkpOworICAgIH0KKworcHJpdmF0ZToKICAgICBV
bmxpbmtDb21tYW5kKERvY3VtZW50Kik7CisKICAgICB2aXJ0dWFsIHZvaWQgZG9BcHBseSgpOwog
ICAgIHZpcnR1YWwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9uKCkgY29uc3QgeyByZXR1cm4gRWRp
dEFjdGlvblVubGluazsgfQogfTsKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9XcmFwQ29udGVudHNJ
bkR1bW15U3BhbkNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9XcmFw
Q29udGVudHNJbkR1bW15U3BhbkNvbW1hbmQuY3BwCShyZXZpc2lvbiAzNDQzOCkKKysrIFdlYkNv
cmUvZWRpdGluZy9XcmFwQ29udGVudHNJbkR1bW15U3BhbkNvbW1hbmQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMSw4ICszMSw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotV3JhcENvbnRl
bnRzSW5EdW1teVNwYW5Db21tYW5kOjpXcmFwQ29udGVudHNJbkR1bW15U3BhbkNvbW1hbmQoRWxl
bWVudCogZWxlbWVudCkKLSAgICA6IEVkaXRDb21tYW5kKGVsZW1lbnQtPmRvY3VtZW50KCkpLCBt
X2VsZW1lbnQoZWxlbWVudCkKK1dyYXBDb250ZW50c0luRHVtbXlTcGFuQ29tbWFuZDo6V3JhcENv
bnRlbnRzSW5EdW1teVNwYW5Db21tYW5kKFBhc3NSZWZQdHI8RWxlbWVudD4gZWxlbWVudCkKKyAg
ICA6IFNpbXBsZUVkaXRDb21tYW5kKGVsZW1lbnQtPmRvY3VtZW50KCkpLCBtX2VsZW1lbnQoZWxl
bWVudCkKIHsKICAgICBBU1NFUlQobV9lbGVtZW50KTsKIH0KSW5kZXg6IFdlYkNvcmUvZWRpdGlu
Zy9XcmFwQ29udGVudHNJbkR1bW15U3BhbkNvbW1hbmQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2VkaXRpbmcvV3JhcENvbnRlbnRzSW5EdW1teVNwYW5Db21tYW5kLmgJKHJldmlzaW9uIDM0NDM4
KQorKysgV2ViQ29yZS9lZGl0aW5nL1dyYXBDb250ZW50c0luRHVtbXlTcGFuQ29tbWFuZC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSwg
MjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDE0ICszMCwxOSBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFdyYXBDb250ZW50c0luRHVtbXlTcGFuQ29tbWFu
ZCA6IHB1YmxpYyBFZGl0Q29tbWFuZCB7CitjbGFzcyBXcmFwQ29udGVudHNJbkR1bW15U3BhbkNv
bW1hbmQgOiBwdWJsaWMgU2ltcGxlRWRpdENvbW1hbmQgewogcHVibGljOgotICAgIFdyYXBDb250
ZW50c0luRHVtbXlTcGFuQ29tbWFuZChFbGVtZW50Kik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8
V3JhcENvbnRlbnRzSW5EdW1teVNwYW5Db21tYW5kPiBjcmVhdGUoUGFzc1JlZlB0cjxFbGVtZW50
PiBlbGVtZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXcmFwQ29udGVu
dHNJbkR1bW15U3BhbkNvbW1hbmQoZWxlbWVudCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBX
cmFwQ29udGVudHNJbkR1bW15U3BhbkNvbW1hbmQoUGFzc1JlZlB0cjxFbGVtZW50Pik7CiAKICAg
ICB2aXJ0dWFsIHZvaWQgZG9BcHBseSgpOwogICAgIHZpcnR1YWwgdm9pZCBkb1VuYXBwbHkoKTsK
IAotcHJpdmF0ZToKICAgICBSZWZQdHI8RWxlbWVudD4gbV9lbGVtZW50OwogICAgIFJlZlB0cjxF
bGVtZW50PiBtX2R1bW15U3BhbjsKIH07CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFRhYmxlRWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxUYWJsZUVsZW1lbnQuY3Bw
CShyZXZpc2lvbiAzNDQzOCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MVGFibGVFbGVtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDYyLDkgKzQ2Miw5IEBAIHZvaWQgSFRNTFRhYmxlRWxlbWVudDo6
YWRkaXRpb25hbEF0dHJpYnUKIHsKICAgICBpZiAoKCFtX2JvcmRlckF0dHIgJiYgIW1fYm9yZGVy
Q29sb3JBdHRyKSB8fCBtX2ZyYW1lQXR0cikKICAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAg
ICBNYXBwZWRBdHRyaWJ1dGUgYXR0cih0YWJsZWJvcmRlckF0dHIsIG1fYm9yZGVyQ29sb3JBdHRy
ID8gInNvbGlkIiA6ICJvdXRzZXQiKTsKLSAgICBDU1NNYXBwZWRBdHRyaWJ1dGVEZWNsYXJhdGlv
biogZGVjbCA9IGdldE1hcHBlZEF0dHJpYnV0ZURlY2woZVBlcnNpc3RlbnQsICZhdHRyKTsKKwor
ICAgIEF0b21pY1N0cmluZyBib3JkZXJWYWx1ZSA9IG1fYm9yZGVyQ29sb3JBdHRyID8gInNvbGlk
IiA6ICJvdXRzZXQiOworICAgIENTU01hcHBlZEF0dHJpYnV0ZURlY2xhcmF0aW9uKiBkZWNsID0g
Z2V0TWFwcGVkQXR0cmlidXRlRGVjbChlUGVyc2lzdGVudCwgdGFibGVib3JkZXJBdHRyLCBib3Jk
ZXJWYWx1ZSk7CiAgICAgaWYgKCFkZWNsKSB7CiAgICAgICAgIGRlY2wgPSBuZXcgQ1NTTWFwcGVk
QXR0cmlidXRlRGVjbGFyYXRpb24oMCk7CiAgICAgICAgIGRlY2wtPnNldFBhcmVudChkb2N1bWVu
dCgpLT5lbGVtZW50U2hlZXQoKSk7CkBAIC00NzksMTAgKzQ3OSwxMCBAQCB2b2lkIEhUTUxUYWJs
ZUVsZW1lbnQ6OmFkZGl0aW9uYWxBdHRyaWJ1CiAgICAgICAgIGRlY2wtPnNldFByb3BlcnR5KENT
U1Byb3BlcnR5Qm9yZGVyTGVmdFN0eWxlLCB2LCBmYWxzZSk7CiAgICAgICAgIGRlY2wtPnNldFBy
b3BlcnR5KENTU1Byb3BlcnR5Qm9yZGVyUmlnaHRTdHlsZSwgdiwgZmFsc2UpOwogCi0gICAgICAg
IHNldE1hcHBlZEF0dHJpYnV0ZURlY2woZVBlcnNpc3RlbnQsICZhdHRyLCBkZWNsKTsKKyAgICAg
ICAgc2V0TWFwcGVkQXR0cmlidXRlRGVjbChlUGVyc2lzdGVudCwgdGFibGVib3JkZXJBdHRyLCBi
b3JkZXJWYWx1ZSwgZGVjbCk7CiAgICAgICAgIGRlY2wtPnNldFBhcmVudCgwKTsKICAgICAgICAg
ZGVjbC0+c2V0Tm9kZSgwKTsKLSAgICAgICAgZGVjbC0+c2V0TWFwcGVkU3RhdGUoZVBlcnNpc3Rl
bnQsIGF0dHIubmFtZSgpLCBhdHRyLnZhbHVlKCkpOworICAgICAgICBkZWNsLT5zZXRNYXBwZWRT
dGF0ZShlUGVyc2lzdGVudCwgdGFibGVib3JkZXJBdHRyLCBib3JkZXJWYWx1ZSk7CiAgICAgfQog
ICAgIAogICAgIApAQCAtNTIyLDEwICs1MjIsOSBAQCB2b2lkIEhUTUxUYWJsZUVsZW1lbnQ6OmFk
ZFNoYXJlZENlbGxCb3JkCiB7CiAgICAgQ2VsbEJvcmRlcnMgYm9yZGVycyA9IGNlbGxCb3JkZXJz
KCk7CiAKLSAgICBzdGF0aWMgQXRvbWljU3RyaW5nIGNlbGxCb3JkZXJOYW1lc1tdID0geyAibm9u
ZSIsICJzb2xpZCIsICJpbnNldCIsICJzb2xpZC1jb2xzIiwgInNvbGlkLXJvd3MiIH07Ci0gICAg
TWFwcGVkQXR0cmlidXRlIGF0dHIoY2VsbGJvcmRlckF0dHIsIGNlbGxCb3JkZXJOYW1lc1tib3Jk
ZXJzXSk7Ci0KLSAgICBDU1NNYXBwZWRBdHRyaWJ1dGVEZWNsYXJhdGlvbiogZGVjbCA9IGdldE1h
cHBlZEF0dHJpYnV0ZURlY2woZVBlcnNpc3RlbnQsICZhdHRyKTsKKyAgICBzdGF0aWMgY29uc3Qg
QXRvbWljU3RyaW5nIGNlbGxCb3JkZXJOYW1lc1tdID0geyAibm9uZSIsICJzb2xpZCIsICJpbnNl
dCIsICJzb2xpZC1jb2xzIiwgInNvbGlkLXJvd3MiIH07CisgICAgY29uc3QgQXRvbWljU3RyaW5n
JiBjZWxsYm9yZGVyVmFsdWUgPSBjZWxsQm9yZGVyTmFtZXNbYm9yZGVyc107CisgICAgQ1NTTWFw
cGVkQXR0cmlidXRlRGVjbGFyYXRpb24qIGRlY2wgPSBnZXRNYXBwZWRBdHRyaWJ1dGVEZWNsKGVQ
ZXJzaXN0ZW50LCBjZWxsYm9yZGVyQXR0ciwgY2VsbGJvcmRlclZhbHVlKTsKICAgICBpZiAoIWRl
Y2wpIHsKICAgICAgICAgZGVjbCA9IG5ldyBDU1NNYXBwZWRBdHRyaWJ1dGVEZWNsYXJhdGlvbigw
KTsKICAgICAgICAgZGVjbC0+c2V0UGFyZW50KGRvY3VtZW50KCktPmVsZW1lbnRTaGVldCgpKTsK
QEAgLTU3MCwxMCArNTY5LDEwIEBAIHZvaWQgSFRNTFRhYmxlRWxlbWVudDo6YWRkU2hhcmVkQ2Vs
bEJvcmQKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIHNldE1h
cHBlZEF0dHJpYnV0ZURlY2woZVBlcnNpc3RlbnQsICZhdHRyLCBkZWNsKTsKKyAgICAgICAgc2V0
TWFwcGVkQXR0cmlidXRlRGVjbChlUGVyc2lzdGVudCwgY2VsbGJvcmRlckF0dHIsIGNlbGxCb3Jk
ZXJOYW1lc1tib3JkZXJzXSwgZGVjbCk7CiAgICAgICAgIGRlY2wtPnNldFBhcmVudCgwKTsKICAg
ICAgICAgZGVjbC0+c2V0Tm9kZSgwKTsKLSAgICAgICAgZGVjbC0+c2V0TWFwcGVkU3RhdGUoZVBl
cnNpc3RlbnQsIGF0dHIubmFtZSgpLCBhdHRyLnZhbHVlKCkpOworICAgICAgICBkZWNsLT5zZXRN
YXBwZWRTdGF0ZShlUGVyc2lzdGVudCwgY2VsbGJvcmRlckF0dHIsIGNlbGxib3JkZXJWYWx1ZSk7
CiAgICAgfQogICAgIAogICAgIHJlc3VsdHMuYXBwZW5kKGRlY2wpOwpAQCAtNTg1LDM3ICs1ODQs
MzUgQEAgdm9pZCBIVE1MVGFibGVFbGVtZW50OjphZGRTaGFyZWRDZWxsUGFkZAogICAgICAgICBy
ZXR1cm47CiAKICAgICBpZiAoIW1fcGFkZGluZ0RlY2wpIHsKLSAgICAgICAgU3RyaW5nIG51bWVy
aWNTdHIgPSBTdHJpbmc6Om51bWJlcihtX3BhZGRpbmcpOwotICAgICAgICBNYXBwZWRBdHRyaWJ1
dGUgYXR0cihjZWxscGFkZGluZ0F0dHIsIG51bWVyaWNTdHIpOwotICAgICAgICBtX3BhZGRpbmdE
ZWNsID0gZ2V0TWFwcGVkQXR0cmlidXRlRGVjbChlVW5pdmVyc2FsLCAmYXR0cik7CisgICAgICAg
IFN0cmluZyBwYWRkaW5nVmFsdWUgPSBTdHJpbmc6Om51bWJlcihtX3BhZGRpbmcpOworICAgICAg
ICBtX3BhZGRpbmdEZWNsID0gZ2V0TWFwcGVkQXR0cmlidXRlRGVjbChlVW5pdmVyc2FsLCBjZWxs
cGFkZGluZ0F0dHIsIHBhZGRpbmdWYWx1ZSk7CiAgICAgICAgIGlmICghbV9wYWRkaW5nRGVjbCkg
ewogICAgICAgICAgICAgbV9wYWRkaW5nRGVjbCA9IG5ldyBDU1NNYXBwZWRBdHRyaWJ1dGVEZWNs
YXJhdGlvbigwKTsKICAgICAgICAgICAgIG1fcGFkZGluZ0RlY2wtPnNldFBhcmVudChkb2N1bWVu
dCgpLT5lbGVtZW50U2hlZXQoKSk7CiAgICAgICAgICAgICBtX3BhZGRpbmdEZWNsLT5zZXROb2Rl
KHRoaXMpOwogICAgICAgICAgICAgbV9wYWRkaW5nRGVjbC0+c2V0U3RyaWN0UGFyc2luZyhmYWxz
ZSk7IC8vIE1hcHBlZCBhdHRyaWJ1dGVzIGFyZSBqdXN0IGFsd2F5cyBxdWlya3kuCiAgICAgICAg
ICAgICAKLSAgICAgICAgICAgIG1fcGFkZGluZ0RlY2wtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5
UGFkZGluZ1RvcCwgbnVtZXJpY1N0ciwgZmFsc2UpOwotICAgICAgICAgICAgbV9wYWRkaW5nRGVj
bC0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlQYWRkaW5nUmlnaHQsIG51bWVyaWNTdHIsIGZhbHNl
KTsKLSAgICAgICAgICAgIG1fcGFkZGluZ0RlY2wtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5UGFk
ZGluZ0JvdHRvbSwgbnVtZXJpY1N0ciwgZmFsc2UpOwotICAgICAgICAgICAgbV9wYWRkaW5nRGVj
bC0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlQYWRkaW5nTGVmdCwgbnVtZXJpY1N0ciwgZmFsc2Up
OworICAgICAgICAgICAgbV9wYWRkaW5nRGVjbC0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlQYWRk
aW5nVG9wLCBwYWRkaW5nVmFsdWUsIGZhbHNlKTsKKyAgICAgICAgICAgIG1fcGFkZGluZ0RlY2wt
PnNldFByb3BlcnR5KENTU1Byb3BlcnR5UGFkZGluZ1JpZ2h0LCBwYWRkaW5nVmFsdWUsIGZhbHNl
KTsKKyAgICAgICAgICAgIG1fcGFkZGluZ0RlY2wtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5UGFk
ZGluZ0JvdHRvbSwgcGFkZGluZ1ZhbHVlLCBmYWxzZSk7CisgICAgICAgICAgICBtX3BhZGRpbmdE
ZWNsLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eVBhZGRpbmdMZWZ0LCBwYWRkaW5nVmFsdWUsIGZh
bHNlKTsKICAgICAgICAgfQotICAgICAgICBzZXRNYXBwZWRBdHRyaWJ1dGVEZWNsKGVVbml2ZXJz
YWwsICZhdHRyLCBtX3BhZGRpbmdEZWNsLmdldCgpKTsKKyAgICAgICAgc2V0TWFwcGVkQXR0cmli
dXRlRGVjbChlVW5pdmVyc2FsLCBjZWxscGFkZGluZ0F0dHIsIHBhZGRpbmdWYWx1ZSwgbV9wYWRk
aW5nRGVjbC5nZXQoKSk7CiAgICAgICAgIG1fcGFkZGluZ0RlY2wtPnNldFBhcmVudCgwKTsKICAg
ICAgICAgbV9wYWRkaW5nRGVjbC0+c2V0Tm9kZSgwKTsKLSAgICAgICAgbV9wYWRkaW5nRGVjbC0+
c2V0TWFwcGVkU3RhdGUoZVVuaXZlcnNhbCwgYXR0ci5uYW1lKCksIGF0dHIudmFsdWUoKSk7Cisg
ICAgICAgIG1fcGFkZGluZ0RlY2wtPnNldE1hcHBlZFN0YXRlKGVVbml2ZXJzYWwsIGNlbGxwYWRk
aW5nQXR0ciwgcGFkZGluZ1ZhbHVlKTsKICAgICB9CiAgICAgCiAgICAgcmVzdWx0cy5hcHBlbmQo
bV9wYWRkaW5nRGVjbC5nZXQoKSk7CiB9CiAKIHZvaWQgSFRNTFRhYmxlRWxlbWVudDo6YWRkU2hh
cmVkR3JvdXBEZWNscyhib29sIHJvd3MsIFZlY3RvcjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bio+JiByZXN1bHRzKQotCiB7CiAgICAgaWYgKG1fcnVsZXNBdHRyICE9IEdyb3Vwc1J1bGVzKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBNYXBwZWRBdHRyaWJ1dGUgYXR0cihydWxlc0F0dHIsIHJv
d3MgPyAicm93Z3JvdXBzIiA6ICJjb2xncm91cHMiKTsKLSAgICBDU1NNYXBwZWRBdHRyaWJ1dGVE
ZWNsYXJhdGlvbiogZGVjbCA9IGdldE1hcHBlZEF0dHJpYnV0ZURlY2woZVBlcnNpc3RlbnQsICZh
dHRyKTsKKyAgICBBdG9taWNTdHJpbmcgcnVsZXNWYWx1ZSA9IHJvd3MgPyAicm93Z3JvdXBzIiA6
ICJjb2xncm91cHMiOworICAgIENTU01hcHBlZEF0dHJpYnV0ZURlY2xhcmF0aW9uKiBkZWNsID0g
Z2V0TWFwcGVkQXR0cmlidXRlRGVjbChlUGVyc2lzdGVudCwgcnVsZXNBdHRyLCBydWxlc1ZhbHVl
KTsKICAgICBpZiAoIWRlY2wpIHsKICAgICAgICAgZGVjbCA9IG5ldyBDU1NNYXBwZWRBdHRyaWJ1
dGVEZWNsYXJhdGlvbigwKTsKICAgICAgICAgZGVjbC0+c2V0UGFyZW50KGRvY3VtZW50KCktPmVs
ZW1lbnRTaGVldCgpKTsKQEAgLTYzNiwxMCArNjMzLDEwIEBAIHZvaWQgSFRNTFRhYmxlRWxlbWVu
dDo6YWRkU2hhcmVkR3JvdXBEZWMKICAgICAgICAgICAgIGRlY2wtPnNldFByb3BlcnR5KENTU1By
b3BlcnR5Qm9yZGVyUmlnaHRTdHlsZSwgQ1NTVmFsdWVTb2xpZCwgZmFsc2UpOwogICAgICAgICB9
CiAKLSAgICAgICAgc2V0TWFwcGVkQXR0cmlidXRlRGVjbChlUGVyc2lzdGVudCwgJmF0dHIsIGRl
Y2wpOworICAgICAgICBzZXRNYXBwZWRBdHRyaWJ1dGVEZWNsKGVQZXJzaXN0ZW50LCBydWxlc0F0
dHIsIHJ1bGVzVmFsdWUsIGRlY2wpOwogICAgICAgICBkZWNsLT5zZXRQYXJlbnQoMCk7CiAgICAg
ICAgIGRlY2wtPnNldE5vZGUoMCk7Ci0gICAgICAgIGRlY2wtPnNldE1hcHBlZFN0YXRlKGVQZXJz
aXN0ZW50LCBhdHRyLm5hbWUoKSwgYXR0ci52YWx1ZSgpKTsKKyAgICAgICAgZGVjbC0+c2V0TWFw
cGVkU3RhdGUoZVBlcnNpc3RlbnQsIHJ1bGVzQXR0ciwgcnVsZXNWYWx1ZSk7CiAgICAgfQogCiAg
ICAgcmVzdWx0cy5hcHBlbmQoZGVjbCk7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFRva2VuaXpl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxUb2tlbml6ZXIuY3BwCShyZXZp
c2lvbiAzNDQzOCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MVG9rZW5pemVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTM3LDcgKzEzNyw3IEBAIGlubGluZSB2b2lkIFRva2VuOjphZGRBdHRyaWJ1dGUo
RG9jdW1lbnQKIHsKICAgICBpZiAoIWF0dHJOYW1lLmlzRW1wdHkoKSkgewogICAgICAgICBBU1NF
UlQoIWF0dHJOYW1lLmNvbnRhaW5zKCcvJykpOwotICAgICAgICBSZWZQdHI8TWFwcGVkQXR0cmli
dXRlPiBhID0gbmV3IE1hcHBlZEF0dHJpYnV0ZShhdHRyTmFtZSwgdik7CisgICAgICAgIFJlZlB0
cjxNYXBwZWRBdHRyaWJ1dGU+IGEgPSBNYXBwZWRBdHRyaWJ1dGU6OmNyZWF0ZShhdHRyTmFtZSwg
dik7CiAgICAgICAgIGlmICghYXR0cnMpIHsKICAgICAgICAgICAgIGF0dHJzID0gTmFtZWRNYXBw
ZWRBdHRyTWFwOjpjcmVhdGUoKTsKICAgICAgICAgICAgIGF0dHJzLT5yZXNlcnZlQ2FwYWNpdHko
MTApOwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxWaWV3U291cmNlRG9jdW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MVmlld1NvdXJjZURvY3VtZW50LmNwcAkocmV2aXNp
b24gMzQ0MzgpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFZpZXdTb3VyY2VEb2N1bWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTcyLDcgKzcyLDcgQEAgdm9pZCBIVE1MVmlld1NvdXJjZURvY3VtZW50
OjpjcmVhdGVDb250YQogICAgIC8vIGRvY3VtZW50LgogICAgIFJlZlB0cjxFbGVtZW50PiBkaXYg
PSBuZXcgSFRNTERpdkVsZW1lbnQodGhpcyk7CiAgICAgUmVmUHRyPE5hbWVkTWFwcGVkQXR0ck1h
cD4gYXR0cnMgPSBOYW1lZE1hcHBlZEF0dHJNYXA6OmNyZWF0ZSgpOwotICAgIGF0dHJzLT5pbnNl
cnRBdHRyaWJ1dGUobmV3IE1hcHBlZEF0dHJpYnV0ZShjbGFzc0F0dHIsICJ3ZWJraXQtbGluZS1n
dXR0ZXItYmFja2Ryb3AiKSwgdHJ1ZSk7CisgICAgYXR0cnMtPmluc2VydEF0dHJpYnV0ZShNYXBw
ZWRBdHRyaWJ1dGU6OmNyZWF0ZShjbGFzc0F0dHIsICJ3ZWJraXQtbGluZS1ndXR0ZXItYmFja2Ry
b3AiKSwgdHJ1ZSk7CiAgICAgZGl2LT5zZXRBdHRyaWJ1dGVNYXAoYXR0cnMucmVsZWFzZSgpKTsK
ICAgICBib2R5LT5hZGRDaGlsZChkaXYpOwogICAgIGRpdi0+YXR0YWNoKCk7CkBAIC0xOTQsNyAr
MTk0LDcgQEAgUGFzc1JlZlB0cjxFbGVtZW50PiBIVE1MVmlld1NvdXJjZURvY3VtZQogCiAgICAg
UmVmUHRyPEVsZW1lbnQ+IHNwYW4gPSBuZXcgSFRNTEVsZW1lbnQoc3BhblRhZywgdGhpcyk7CiAg
ICAgUmVmUHRyPE5hbWVkTWFwcGVkQXR0ck1hcD4gYXR0cnMgPSBOYW1lZE1hcHBlZEF0dHJNYXA6
OmNyZWF0ZSgpOwotICAgIGF0dHJzLT5pbnNlcnRBdHRyaWJ1dGUobmV3IE1hcHBlZEF0dHJpYnV0
ZShjbGFzc0F0dHIsIGNsYXNzTmFtZSksIHRydWUpOworICAgIGF0dHJzLT5pbnNlcnRBdHRyaWJ1
dGUoTWFwcGVkQXR0cmlidXRlOjpjcmVhdGUoY2xhc3NBdHRyLCBjbGFzc05hbWUpLCB0cnVlKTsK
ICAgICBzcGFuLT5zZXRBdHRyaWJ1dGVNYXAoYXR0cnMucmVsZWFzZSgpKTsKICAgICBtX2N1cnJl
bnQtPmFkZENoaWxkKHNwYW4pOwogICAgIHNwYW4tPmF0dGFjaCgpOwpAQCAtMjExLDcgKzIxMSw3
IEBAIHZvaWQgSFRNTFZpZXdTb3VyY2VEb2N1bWVudDo6YWRkTGluZShjb24KICAgICAvLyBDcmVh
dGUgYSBjZWxsIHRoYXQgd2lsbCBob2xkIHRoZSBsaW5lIG51bWJlciAoaXQgaXMgZ2VuZXJhdGVk
IGluIHRoZSBzdHlsZXNoZWV0IHVzaW5nIGNvdW50ZXJzKS4KICAgICBSZWZQdHI8RWxlbWVudD4g
dGQgPSBuZXcgSFRNTFRhYmxlQ2VsbEVsZW1lbnQodGRUYWcsIHRoaXMpOwogICAgIFJlZlB0cjxO
YW1lZE1hcHBlZEF0dHJNYXA+IGF0dHJzID0gTmFtZWRNYXBwZWRBdHRyTWFwOjpjcmVhdGUoKTsK
LSAgICBhdHRycy0+aW5zZXJ0QXR0cmlidXRlKG5ldyBNYXBwZWRBdHRyaWJ1dGUoY2xhc3NBdHRy
LCAid2Via2l0LWxpbmUtbnVtYmVyIiksIHRydWUpOworICAgIGF0dHJzLT5pbnNlcnRBdHRyaWJ1
dGUoTWFwcGVkQXR0cmlidXRlOjpjcmVhdGUoY2xhc3NBdHRyLCAid2Via2l0LWxpbmUtbnVtYmVy
IiksIHRydWUpOwogICAgIHRkLT5zZXRBdHRyaWJ1dGVNYXAoYXR0cnMucmVsZWFzZSgpKTsKICAg
ICB0cm93LT5hZGRDaGlsZCh0ZCk7CiAgICAgdGQtPmF0dGFjaCgpOwpAQCAtMjE5LDcgKzIxOSw3
IEBAIHZvaWQgSFRNTFZpZXdTb3VyY2VEb2N1bWVudDo6YWRkTGluZShjb24KICAgICAvLyBDcmVh
dGUgYSBzZWNvbmQgY2VsbCBmb3IgdGhlIGxpbmUgY29udGVudHMKICAgICB0ZCA9IG5ldyBIVE1M
VGFibGVDZWxsRWxlbWVudCh0ZFRhZywgdGhpcyk7CiAgICAgYXR0cnMgPSBOYW1lZE1hcHBlZEF0
dHJNYXA6OmNyZWF0ZSgpOwotICAgIGF0dHJzLT5pbnNlcnRBdHRyaWJ1dGUobmV3IE1hcHBlZEF0
dHJpYnV0ZShjbGFzc0F0dHIsICJ3ZWJraXQtbGluZS1jb250ZW50IiksIHRydWUpOworICAgIGF0
dHJzLT5pbnNlcnRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlOjpjcmVhdGUoY2xhc3NBdHRyLCAi
d2Via2l0LWxpbmUtY29udGVudCIpLCB0cnVlKTsKICAgICB0ZC0+c2V0QXR0cmlidXRlTWFwKGF0
dHJzLnJlbGVhc2UoKSk7CiAgICAgdHJvdy0+YWRkQ2hpbGQodGQpOwogICAgIHRkLT5hdHRhY2go
KTsKQEAgLTI4Miw5ICsyODIsOSBAQCBQYXNzUmVmUHRyPEVsZW1lbnQ+IEhUTUxWaWV3U291cmNl
RG9jdW1lCiAgICAgICAgIGNsYXNzVmFsdWUgPSAid2Via2l0LWh0bWwtYXR0cmlidXRlLXZhbHVl
IHdlYmtpdC1odG1sLWV4dGVybmFsLWxpbmsiOwogICAgIGVsc2UKICAgICAgICAgY2xhc3NWYWx1
ZSA9ICJ3ZWJraXQtaHRtbC1hdHRyaWJ1dGUtdmFsdWUgd2Via2l0LWh0bWwtcmVzb3VyY2UtbGlu
ayI7Ci0gICAgYXR0cnMtPmluc2VydEF0dHJpYnV0ZShuZXcgTWFwcGVkQXR0cmlidXRlKGNsYXNz
QXR0ciwgY2xhc3NWYWx1ZSksIHRydWUpOwotICAgIGF0dHJzLT5pbnNlcnRBdHRyaWJ1dGUobmV3
IE1hcHBlZEF0dHJpYnV0ZSh0YXJnZXRBdHRyLCAiX2JsYW5rIiksIHRydWUpOwotICAgIGF0dHJz
LT5pbnNlcnRBdHRyaWJ1dGUobmV3IE1hcHBlZEF0dHJpYnV0ZShocmVmQXR0ciwgdXJsKSwgdHJ1
ZSk7CisgICAgYXR0cnMtPmluc2VydEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGU6OmNyZWF0ZShj
bGFzc0F0dHIsIGNsYXNzVmFsdWUpLCB0cnVlKTsKKyAgICBhdHRycy0+aW5zZXJ0QXR0cmlidXRl
KE1hcHBlZEF0dHJpYnV0ZTo6Y3JlYXRlKHRhcmdldEF0dHIsICJfYmxhbmsiKSwgdHJ1ZSk7Cisg
ICAgYXR0cnMtPmluc2VydEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGU6OmNyZWF0ZShocmVmQXR0
ciwgdXJsKSwgdHJ1ZSk7CiAgICAgYW5jaG9yLT5zZXRBdHRyaWJ1dGVNYXAoYXR0cnMucmVsZWFz
ZSgpKTsKICAgICBtX2N1cnJlbnQtPmFkZENoaWxkKGFuY2hvcik7CiAgICAgYW5jaG9yLT5hdHRh
Y2goKTsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHJldmlzaW9uIDM0NDM4KQorKysgV2Vi
Q29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMCArMzAs
NiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAKLSNp
ZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQotI2luY2x1ZGUgIkFwcGxpY2F0aW9u
Q2FjaGUuaCIKLSNpbmNsdWRlICJBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UuaCIKLSNlbmRpZgog
I2luY2x1ZGUgIkFyY2hpdmUuaCIKICNpbmNsdWRlICJBcmNoaXZlRmFjdG9yeS5oIgogI2luY2x1
ZGUgIkNTdHJpbmcuaCIKQEAgLTQ1LDcgKzQxLDYgQEAKICNpbmNsdWRlICJEb2NMb2FkZXIuaCIK
ICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCi0jaW5j
bHVkZSAiRWRpdENvbW1hbmQuaCIKICNpbmNsdWRlICJFZGl0b3IuaCIKICNpbmNsdWRlICJFZGl0
b3JDbGllbnQuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCkBAIC05NCw2ICs4OSwxMSBAQAogI2lu
Y2x1ZGUgPGtqcy9KU0xvY2suaD4KICNpbmNsdWRlIDxranMvb2JqZWN0Lmg+CiAKKyNpZiBFTkFC
TEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQorI2luY2x1ZGUgIkFwcGxpY2F0aW9uQ2FjaGUu
aCIKKyNpbmNsdWRlICJBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UuaCIKKyNlbmRpZgorCiAjaWYg
RU5BQkxFKFNWRykKICNpbmNsdWRlICJTVkdEb2N1bWVudC5oIgogI2luY2x1ZGUgIlNWR0xvY2F0
YWJsZS5oIgpAQCAtNzAyLDcgKzcwMiw3IEBAIGJvb2wgRnJhbWVMb2FkZXI6OmRpZE9wZW5VUkwo
Y29uc3QgS1VSTCYKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgY2FuY2VsUmVkaXJlY3Rp
b24oKTsKLSAgICBtX2ZyYW1lLT5lZGl0b3IoKS0+c2V0TGFzdEVkaXRDb21tYW5kKDApOworICAg
IG1fZnJhbWUtPmVkaXRvcigpLT5jbGVhckxhc3RFZGl0Q29tbWFuZCgpOwogICAgIGNsb3NlVVJM
KCk7CiAKICAgICBtX2lzQ29tcGxldGUgPSBmYWxzZTsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL2Fw
cGNhY2hlL0RPTUFwcGxpY2F0aW9uQ2FjaGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9h
ZGVyL2FwcGNhY2hlL0RPTUFwcGxpY2F0aW9uQ2FjaGUuY3BwCShyZXZpc2lvbiAzNDQzOCkKKysr
IFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0RPTUFwcGxpY2F0aW9uQ2FjaGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMzEsNyArMjMxLDcgQEAgdm9pZCBET01BcHBsaWNhdGlvbkNhY2hlOjpjYWxs
TGlzdGVuZXIoYwogewogICAgIEFTU0VSVChtX2ZyYW1lKTsKICAgICAKLSAgICBSZWZQdHI8RXZl
bnQ+IGV2ZW50ID0gbmV3IEV2ZW50KGV2ZW50VHlwZSwgZmFsc2UsIGZhbHNlKTsKKyAgICBSZWZQ
dHI8RXZlbnQ+IGV2ZW50ID0gRXZlbnQ6OmNyZWF0ZShldmVudFR5cGUsIGZhbHNlLCBmYWxzZSk7
CiAgICAgaWYgKGxpc3RlbmVyKSB7CiAgICAgICAgIGV2ZW50LT5zZXRUYXJnZXQodGhpcyk7CiAg
ICAgICAgIGV2ZW50LT5zZXRDdXJyZW50VGFyZ2V0KHRoaXMpOwpJbmRleDogV2ViQ29yZS9wYWdl
L0NvbnRleHRNZW51Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0Nv
bnRleHRNZW51Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDM0NDM4KQorKysgV2ViQ29yZS9wYWdl
L0NvbnRleHRNZW51Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5NSw3ICsxOTUs
NyBAQCB2b2lkIENvbnRleHRNZW51Q29udHJvbGxlcjo6Y29udGV4dE1lbnVJCiAgICAgICAgICAg
ICAgICAgRWRpdG9ySW5zZXJ0QWN0aW9uUGFzdGVkKSkgewogICAgICAgICAgICAgICAgIERvY3Vt
ZW50KiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpOwogICAgICAgICAgICAgICAgIFJlZlB0
cjxSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZD4gY29tbWFuZCA9Ci0gICAgICAgICAgICAgICAgICAg
IG5ldyBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZChkb2N1bWVudCwgY3JlYXRlRnJhZ21lbnRGcm9t
TWFya3VwKGRvY3VtZW50LCBpdGVtLT50aXRsZSgpLCAiIiksCisgICAgICAgICAgICAgICAgICAg
IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpjcmVhdGUoZG9jdW1lbnQsIGNyZWF0ZUZyYWdtZW50
RnJvbU1hcmt1cChkb2N1bWVudCwgaXRlbS0+dGl0bGUoKSwgIiIpLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0cnVlLCBmYWxzZSwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgYXBwbHlDb21t
YW5kKGNvbW1hbmQpOwogICAgICAgICAgICAgICAgIGZyYW1lLT5yZXZlYWxTZWxlY3Rpb24oUmVu
ZGVyTGF5ZXI6OmdBbGlnblRvRWRnZUlmTmVlZGVkKTsKSW5kZXg6IFdlYkNvcmUvcGFnZS9ET01X
aW5kb3cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCShyZXZp
c2lvbiAzNDQzOCkKKysrIFdlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC03OCw3ICs3OCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgUG9zdE1lc3Nh
Z2VUaW1lciA6IHB1YmxpYyBUaW1lckJhc2UgewogcHVibGljOgotICAgIFBvc3RNZXNzYWdlVGlt
ZXIoRE9NV2luZG93KiB3aW5kb3csIE1lc3NhZ2VFdmVudCogZXZlbnQsIFNlY3VyaXR5T3JpZ2lu
KiB0YXJnZXRPcmlnaW4pCisgICAgUG9zdE1lc3NhZ2VUaW1lcihET01XaW5kb3cqIHdpbmRvdywg
UGFzc1JlZlB0cjxNZXNzYWdlRXZlbnQ+IGV2ZW50LCBTZWN1cml0eU9yaWdpbiogdGFyZ2V0T3Jp
Z2luKQogICAgICAgICA6IG1fd2luZG93KHdpbmRvdykKICAgICAgICAgLCBtX2V2ZW50KGV2ZW50
KQogICAgICAgICAsIG1fdGFyZ2V0T3JpZ2luKHRhcmdldE9yaWdpbikKQEAgLTg5LDcgKzg5LDcg
QEAgcHVibGljOgogICAgIFNlY3VyaXR5T3JpZ2luKiB0YXJnZXRPcmlnaW4oKSBjb25zdCB7IHJl
dHVybiBtX3RhcmdldE9yaWdpbi5nZXQoKTsgfQogCiBwcml2YXRlOgotICAgIHZpcnR1YWwgdm9p
ZCBmaXJlZCgpIAorICAgIHZpcnR1YWwgdm9pZCBmaXJlZCgpCiAgICAgewogICAgICAgICBtX3dp
bmRvdy0+cG9zdE1lc3NhZ2VUaW1lckZpcmVkKHRoaXMpOwogICAgIH0KQEAgLTM3MSw3ICszNzEs
NyBAQCB2b2lkIERPTVdpbmRvdzo6cG9zdE1lc3NhZ2UoY29uc3QgU3RyaW5nCiAgICAgU3RyaW5n
IHNvdXJjZU9yaWdpbiA9IHNvdXJjZURvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpLT50b1N0cmlu
ZygpOwogCiAgICAgLy8gU2NoZWR1bGUgdGhlIG1lc3NhZ2UuCi0gICAgUG9zdE1lc3NhZ2VUaW1l
ciogdGltZXIgPSBuZXcgUG9zdE1lc3NhZ2VUaW1lcih0aGlzLCBuZXcgTWVzc2FnZUV2ZW50KG1l
c3NhZ2UsIHNvdXJjZU9yaWdpbiwgIiIsIHNvdXJjZSksIHRhcmdldC5nZXQoKSk7CisgICAgUG9z
dE1lc3NhZ2VUaW1lciogdGltZXIgPSBuZXcgUG9zdE1lc3NhZ2VUaW1lcih0aGlzLCBNZXNzYWdl
RXZlbnQ6OmNyZWF0ZShtZXNzYWdlLCBzb3VyY2VPcmlnaW4sICIiLCBzb3VyY2UpLCB0YXJnZXQu
Z2V0KCkpOwogICAgIHRpbWVyLT5zdGFydE9uZVNob3QoMCk7CiB9CiAKSW5kZXg6IFdlYkNvcmUv
cGFnZS9EcmFnQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0RyYWdD
b250cm9sbGVyLmNwcAkocmV2aXNpb24gMzQ0MzgpCisrKyBXZWJDb3JlL3BhZ2UvRHJhZ0NvbnRy
b2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MDMsMTAgKzQwMywxMCBAQCBib29sIERyYWdD
b250cm9sbGVyOjpjb25jbHVkZURyYWcoRHJhZ0RhCiAgICAgICAgICAgICBib29sIHNtYXJ0TW92
ZSA9IGlubmVyRnJhbWUtPnNlbGVjdGlvbkdyYW51bGFyaXR5KCkgPT0gV29yZEdyYW51bGFyaXR5
IAogICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBpbm5lckZyYW1lLT5lZGl0b3IoKS0+c21h
cnRJbnNlcnREZWxldGVFbmFibGVkKCkgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGRy
YWdEYXRhLT5jYW5TbWFydFJlcGxhY2UoKTsKLSAgICAgICAgICAgIGFwcGx5Q29tbWFuZChuZXcg
TW92ZVNlbGVjdGlvbkNvbW1hbmQoZnJhZ21lbnQsIGRyYWdDYXJldC5iYXNlKCksIHNtYXJ0TW92
ZSkpOworICAgICAgICAgICAgYXBwbHlDb21tYW5kKE1vdmVTZWxlY3Rpb25Db21tYW5kOjpjcmVh
dGUoZnJhZ21lbnQsIGRyYWdDYXJldC5iYXNlKCksIHNtYXJ0TW92ZSkpOwogICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgaWYgKHNldFNlbGVjdGlvblRvRHJhZ0NhcmV0KGlubmVyRnJhbWUs
IGRyYWdDYXJldCwgcmFuZ2UsIHBvaW50KSkKLSAgICAgICAgICAgICAgICBhcHBseUNvbW1hbmQo
bmV3IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kKG1fZG9jdW1lbnQsIGZyYWdtZW50LCB0cnVlLCBk
cmFnRGF0YS0+Y2FuU21hcnRSZXBsYWNlKCksIGNob3NlUGxhaW5UZXh0KSk7IAorICAgICAgICAg
ICAgICAgIGFwcGx5Q29tbWFuZChSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKG1fZG9j
dW1lbnQsIGZyYWdtZW50LCB0cnVlLCBkcmFnRGF0YS0+Y2FuU21hcnRSZXBsYWNlKCksIGNob3Nl
UGxhaW5UZXh0KSk7IAogICAgICAgICB9ICAgIAogICAgIH0gZWxzZSB7CiAgICAgICAgIFN0cmlu
ZyB0ZXh0ID0gZHJhZ0RhdGEtPmFzUGxhaW5UZXh0KCk7CkBAIC00MTcsNyArNDE3LDcgQEAgYm9v
bCBEcmFnQ29udHJvbGxlcjo6Y29uY2x1ZGVEcmFnKERyYWdEYQogICAgICAgICAKICAgICAgICAg
bV9jbGllbnQtPndpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKERyYWdEZXN0aW5hdGlv
bkFjdGlvbkVkaXQsIGRyYWdEYXRhKTsKICAgICAgICAgaWYgKHNldFNlbGVjdGlvblRvRHJhZ0Nh
cmV0KGlubmVyRnJhbWUsIGRyYWdDYXJldCwgcmFuZ2UsIHBvaW50KSkKLSAgICAgICAgICAgIGFw
cGx5Q29tbWFuZChuZXcgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQobV9kb2N1bWVudCwgY3JlYXRl
RnJhZ21lbnRGcm9tVGV4dChyYW5nZS5nZXQoKSwgdGV4dCksIHRydWUsIGZhbHNlLCB0cnVlKSk7
IAorICAgICAgICAgICAgYXBwbHlDb21tYW5kKFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpjcmVh
dGUobV9kb2N1bWVudCwgY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChyYW5nZS5nZXQoKSwgdGV4dCks
IHRydWUsIGZhbHNlLCB0cnVlKSk7IAogICAgIH0KICAgICBsb2FkZXItPnNldEFsbG93U3RhbGVS
ZXNvdXJjZXMoZmFsc2UpOwogCkluZGV4OiBXZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAkocmV2aXNpb24gMzQ0
MzgpCisrKyBXZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTExOCw3ICsxMTE4LDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmRpc3BhdGNoRHJhZ0V2ZW50KGNv
bgogewogICAgIEludFBvaW50IGNvbnRlbnRzUG9zID0gbV9mcmFtZS0+dmlldygpLT53aW5kb3dU
b0NvbnRlbnRzKGV2ZW50LnBvcygpKTsKICAgICAKLSAgICBSZWZQdHI8TW91c2VFdmVudD4gbWUg
PSBuZXcgTW91c2VFdmVudChldmVudFR5cGUsCisgICAgUmVmUHRyPE1vdXNlRXZlbnQ+IG1lID0g
TW91c2VFdmVudDo6Y3JlYXRlKGV2ZW50VHlwZSwKICAgICAgICAgdHJ1ZSwgdHJ1ZSwgbV9mcmFt
ZS0+ZG9jdW1lbnQoKS0+ZGVmYXVsdFZpZXcoKSwKICAgICAgICAgMCwgZXZlbnQuZ2xvYmFsWCgp
LCBldmVudC5nbG9iYWxZKCksIGNvbnRlbnRzUG9zLngoKSwgY29udGVudHNQb3MueSgpLAogICAg
ICAgICBldmVudC5jdHJsS2V5KCksIGV2ZW50LmFsdEtleSgpLCBldmVudC5zaGlmdEtleSgpLCBl
dmVudC5tZXRhS2V5KCksCkBAIC0xNTI1LDcgKzE1MjUsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6
a2V5RXZlbnQoY29uc3QgUGxhdGZvCiAgICAgUGxhdGZvcm1LZXlib2FyZEV2ZW50IGtleURvd25F
dmVudCA9IGluaXRpYWxLZXlFdmVudDsgICAgCiAgICAgaWYgKGtleURvd25FdmVudC50eXBlKCkg
IT0gUGxhdGZvcm1LZXlib2FyZEV2ZW50OjpSYXdLZXlEb3duKQogICAgICAgICBrZXlEb3duRXZl
bnQuZGlzYW1iaWd1YXRlS2V5RG93bkV2ZW50KFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6UmF3S2V5
RG93biwgYmFja3dhcmRDb21wYXRpYmlsaXR5TW9kZSk7Ci0gICAgUmVmUHRyPEtleWJvYXJkRXZl
bnQ+IGtleWRvd24gPSBuZXcgS2V5Ym9hcmRFdmVudChrZXlEb3duRXZlbnQsIG1fZnJhbWUtPmRv
Y3VtZW50KCktPmRlZmF1bHRWaWV3KCkpOworICAgIFJlZlB0cjxLZXlib2FyZEV2ZW50PiBrZXlk
b3duID0gS2V5Ym9hcmRFdmVudDo6Y3JlYXRlKGtleURvd25FdmVudCwgbV9mcmFtZS0+ZG9jdW1l
bnQoKS0+ZGVmYXVsdFZpZXcoKSk7CiAgICAgaWYgKG1hdGNoZWRBbkFjY2Vzc0tleSkKICAgICAg
ICAga2V5ZG93bi0+c2V0RGVmYXVsdFByZXZlbnRlZCh0cnVlKTsKICAgICBrZXlkb3duLT5zZXRU
YXJnZXQobm9kZSk7CkBAIC0xNTQ2LDcgKzE1NDYsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6a2V5
RXZlbnQoY29uc3QgUGxhdGZvCiAgICAgCiAgICAgaWYgKGhhbmRsZWRCeUlucHV0TWV0aG9kKSB7
CiAgICAgICAgIGtleURvd25FdmVudC5zZXRXaW5kb3dzVmlydHVhbEtleUNvZGUoQ29tcG9zaXRp
b25FdmVudEtleUNvZGUpOwotICAgICAgICBrZXlkb3duID0gbmV3IEtleWJvYXJkRXZlbnQoa2V5
RG93bkV2ZW50LCBtX2ZyYW1lLT5kb2N1bWVudCgpLT5kZWZhdWx0VmlldygpKTsKKyAgICAgICAg
a2V5ZG93biA9IEtleWJvYXJkRXZlbnQ6OmNyZWF0ZShrZXlEb3duRXZlbnQsIG1fZnJhbWUtPmRv
Y3VtZW50KCktPmRlZmF1bHRWaWV3KCkpOwogICAgICAgICBrZXlkb3duLT5zZXRUYXJnZXQobm9k
ZSk7CiAgICAgICAgIGtleWRvd24tPnNldERlZmF1bHRIYW5kbGVkKCk7CiAgICAgfQpAQCAtMTU2
OCw3ICsxNTY4LDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmtleUV2ZW50KGNvbnN0IFBsYXRmbwog
ICAgIGtleVByZXNzRXZlbnQuZGlzYW1iaWd1YXRlS2V5RG93bkV2ZW50KFBsYXRmb3JtS2V5Ym9h
cmRFdmVudDo6Q2hhciwgYmFja3dhcmRDb21wYXRpYmlsaXR5TW9kZSk7CiAgICAgaWYgKGtleVBy
ZXNzRXZlbnQudGV4dCgpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGtleWRvd25SZXN1bHQ7
Ci0gICAgUmVmUHRyPEtleWJvYXJkRXZlbnQ+IGtleXByZXNzID0gbmV3IEtleWJvYXJkRXZlbnQo
a2V5UHJlc3NFdmVudCwgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+ZGVmYXVsdFZpZXcoKSk7CisgICAg
UmVmUHRyPEtleWJvYXJkRXZlbnQ+IGtleXByZXNzID0gS2V5Ym9hcmRFdmVudDo6Y3JlYXRlKGtl
eVByZXNzRXZlbnQsIG1fZnJhbWUtPmRvY3VtZW50KCktPmRlZmF1bHRWaWV3KCkpOwogICAgIGtl
eXByZXNzLT5zZXRUYXJnZXQobm9kZSk7CiAgICAgaWYgKGtleWRvd25SZXN1bHQpCiAgICAgICAg
IGtleXByZXNzLT5zZXREZWZhdWx0UHJldmVudGVkKHRydWUpOwpAQCAtMTgyOSw3ICsxODI5LDcg
QEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZVRleHRJbnB1dEV2ZW50KAogICAgICAgICB0YXJn
ZXQgPSBldmVudFRhcmdldE5vZGVGb3JEb2N1bWVudChtX2ZyYW1lLT5kb2N1bWVudCgpKTsKICAg
ICBpZiAoIXRhcmdldCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFJlZlB0cjxUZXh0RXZl
bnQ+IGV2ZW50ID0gbmV3IFRleHRFdmVudChtX2ZyYW1lLT5kb21XaW5kb3coKSwgdGV4dCk7Cisg
ICAgUmVmUHRyPFRleHRFdmVudD4gZXZlbnQgPSBUZXh0RXZlbnQ6OmNyZWF0ZShtX2ZyYW1lLT5k
b21XaW5kb3coKSwgdGV4dCk7CiAgICAgZXZlbnQtPnNldFVuZGVybHlpbmdFdmVudCh1bmRlcmx5
aW5nRXZlbnQpOwogICAgIGV2ZW50LT5zZXRJc0xpbmVCcmVhayhpc0xpbmVCcmVhayk7CiAgICAg
ZXZlbnQtPnNldElzQmFja1RhYihpc0JhY2tUYWIpOwpJbmRleDogV2ViQ29yZS9wYWdlL0ZyYW1l
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCShyZXZpc2lvbiAzNDQz
OCkKKysrIFdlYkNvcmUvcGFnZS9GcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3OCw3ICs4
NzgsNyBAQCB2b2lkIEZyYW1lOjpjb21wdXRlQW5kU2V0VHlwaW5nU3R5bGUoQ1NTCiAgICAgUmVm
UHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBibG9ja1N0eWxlID0gbXV0YWJsZVN0eWxl
LT5jb3B5QmxvY2tQcm9wZXJ0aWVzKCk7CiAgICAgYmxvY2tTdHlsZS0+ZGlmZihtdXRhYmxlU3R5
bGUuZ2V0KCkpOwogICAgIGlmIChkb2N1bWVudCgpICYmIGJsb2NrU3R5bGUtPmxlbmd0aCgpID4g
MCkKLSAgICAgICAgYXBwbHlDb21tYW5kKG5ldyBBcHBseVN0eWxlQ29tbWFuZChkb2N1bWVudCgp
LCBibG9ja1N0eWxlLmdldCgpLCBlZGl0aW5nQWN0aW9uKSk7CisgICAgICAgIGFwcGx5Q29tbWFu
ZChBcHBseVN0eWxlQ29tbWFuZDo6Y3JlYXRlKGRvY3VtZW50KCksIGJsb2NrU3R5bGUuZ2V0KCks
IGVkaXRpbmdBY3Rpb24pKTsKICAgICAKICAgICAvLyBTZXQgdGhlIHJlbWFpbmluZyBzdHlsZSBh
cyB0aGUgdHlwaW5nIHN0eWxlLgogICAgIGQtPm1fdHlwaW5nU3R5bGUgPSBtdXRhYmxlU3R5bGUu
cmVsZWFzZSgpOwpAQCAtMTgxNCw3ICsxODE0LDcgQEAgYm9vbCBGcmFtZTo6c2hvdWxkQ2xvc2Uo
KQogICAgIGlmICghYm9keSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBSZWZQdHI8QmVm
b3JlVW5sb2FkRXZlbnQ+IGJlZm9yZVVubG9hZEV2ZW50ID0gbmV3IEJlZm9yZVVubG9hZEV2ZW50
OworICAgIFJlZlB0cjxCZWZvcmVVbmxvYWRFdmVudD4gYmVmb3JlVW5sb2FkRXZlbnQgPSBCZWZv
cmVVbmxvYWRFdmVudDo6Y3JlYXRlKCk7CiAgICAgYmVmb3JlVW5sb2FkRXZlbnQtPnNldFRhcmdl
dChkb2MpOwogICAgIGRvYy0+aGFuZGxlV2luZG93RXZlbnQoYmVmb3JlVW5sb2FkRXZlbnQuZ2V0
KCksIGZhbHNlKTsKIApJbmRleDogV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAJKHJldmlzaW9uIDM0NDM4KQorKysgV2Vi
Q29yZS9wYWdlL0ZyYW1lVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk5NSw3ICs5OTUsNyBA
QCB2b2lkIEZyYW1lVmlldzo6dXBkYXRlT3ZlcmZsb3dTdGF0dXMoYm9vCiAgICAgICAgIGQtPmhv
cml6b250YWxPdmVyZmxvdyA9IGhvcml6b250YWxPdmVyZmxvdzsKICAgICAgICAgZC0+bV92ZXJ0
aWNhbE92ZXJmbG93ID0gdmVydGljYWxPdmVyZmxvdzsKICAgICAgICAgCi0gICAgICAgIHNjaGVk
dWxlRXZlbnQobmV3IE92ZXJmbG93RXZlbnQoaG9yaXpvbnRhbE92ZXJmbG93Q2hhbmdlZCwgaG9y
aXpvbnRhbE92ZXJmbG93LAorICAgICAgICBzY2hlZHVsZUV2ZW50KE92ZXJmbG93RXZlbnQ6OmNy
ZWF0ZShob3Jpem9udGFsT3ZlcmZsb3dDaGFuZ2VkLCBob3Jpem9udGFsT3ZlcmZsb3csCiAgICAg
ICAgICAgICB2ZXJ0aWNhbE92ZXJmbG93Q2hhbmdlZCwgdmVydGljYWxPdmVyZmxvdyksCiAgICAg
ICAgICAgICBFdmVudFRhcmdldE5vZGVDYXN0KGQtPm1fdmlld3BvcnRSZW5kZXJlci0+ZWxlbWVu
dCgpKSwgdHJ1ZSk7CiAgICAgfQpJbmRleDogV2ViQ29yZS9wYWdlL21hYy9FdmVudEhhbmRsZXJN
YWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW0J
KHJldmlzaW9uIDM0NDM4KQorKysgV2ViQ29yZS9wYWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW0J
KHdvcmtpbmcgY29weSkKQEAgLTgzLDEwICs4MywxMCBAQCBQYXNzUmVmUHRyPEtleWJvYXJkRXZl
bnQ+IEV2ZW50SGFuZGxlcjo6CiAgICAgICAgIGNhc2UgTlNLZXlEb3duOiB7CiAgICAgICAgICAg
ICBQbGF0Zm9ybUtleWJvYXJkRXZlbnQgcGxhdGZvcm1FdmVudChldmVudCk7CiAgICAgICAgICAg
ICBwbGF0Zm9ybUV2ZW50LmRpc2FtYmlndWF0ZUtleURvd25FdmVudChQbGF0Zm9ybUtleWJvYXJk
RXZlbnQ6OlJhd0tleURvd24pOwotICAgICAgICAgICAgcmV0dXJuIG5ldyBLZXlib2FyZEV2ZW50
KHBsYXRmb3JtRXZlbnQsIG1fZnJhbWUtPmRvY3VtZW50KCkgPyBtX2ZyYW1lLT5kb2N1bWVudCgp
LT5kZWZhdWx0VmlldygpIDogMCk7CisgICAgICAgICAgICByZXR1cm4gS2V5Ym9hcmRFdmVudDo6
Y3JlYXRlKHBsYXRmb3JtRXZlbnQsIG1fZnJhbWUtPmRvY3VtZW50KCkgPyBtX2ZyYW1lLT5kb2N1
bWVudCgpLT5kZWZhdWx0VmlldygpIDogMCk7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBOU0tl
eVVwOgotICAgICAgICAgICAgcmV0dXJuIG5ldyBLZXlib2FyZEV2ZW50KGV2ZW50LCBtX2ZyYW1l
LT5kb2N1bWVudCgpID8gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+ZGVmYXVsdFZpZXcoKSA6IDApOwor
ICAgICAgICAgICAgcmV0dXJuIEtleWJvYXJkRXZlbnQ6OmNyZWF0ZShldmVudCwgbV9mcmFtZS0+
ZG9jdW1lbnQoKSA/IG1fZnJhbWUtPmRvY3VtZW50KCktPmRlZmF1bHRWaWV3KCkgOiAwKTsKICAg
ICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHJldHVybiAwOwogICAgIH0KSW5kZXg6IFdlYkNv
cmUvcGFnZS9tYWMvRnJhbWVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL21hYy9G
cmFtZU1hYy5tbQkocmV2aXNpb24gMzQ0MzgpCisrKyBXZWJDb3JlL3BhZ2UvbWFjL0ZyYW1lTWFj
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw2IEBACiAjaW1wb3J0ICJET01JbnRlcm5h
bC5oIgogI2ltcG9ydCAiRE9NV2luZG93LmgiCiAjaW1wb3J0ICJEb2N1bWVudExvYWRlci5oIgot
I2ltcG9ydCAiRWRpdENvbW1hbmQuaCIKICNpbXBvcnQgIkVkaXRvckNsaWVudC5oIgogI2ltcG9y
dCAiRXZlbnQuaCIKICNpbXBvcnQgIkV2ZW50TmFtZXMuaCIKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vRGVwcmVjYXRlZFZhbHVlTGlzdEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vRGVwcmVjYXRlZFZhbHVlTGlzdEltcGwuY3BwCShyZXZpc2lvbiAzNDQzOCkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vRGVwcmVjYXRlZFZhbHVlTGlzdEltcGwuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMyBBcHBsZSBDb21wdXRl
ciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAw
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTI2LDEzICsyNiwxMyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIkRlcHJlY2F0ZWRWYWx1ZUxpc3RJbXBsLmgiCiAKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0
ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRGVwcmVjYXRlZFZhbHVlTGlzdEltcGw6OlBy
aXZhdGUgOiBwdWJsaWMgUmVmQ291bnRlZDxEZXByZWNhdGVkVmFsdWVMaXN0SW1wbDo6UHJpdmF0
ZT4KLXsKK2NsYXNzIERlcHJlY2F0ZWRWYWx1ZUxpc3RJbXBsOjpQcml2YXRlIDogcHVibGljIFJl
ZkNvdW50ZWQ8RGVwcmVjYXRlZFZhbHVlTGlzdEltcGw6OlByaXZhdGU+IHsKIHB1YmxpYzoKICAg
ICBQcml2YXRlKHZvaWQgKCpkZWxldGVGdW5jKShEZXByZWNhdGVkVmFsdWVMaXN0SW1wbE5vZGUg
KiksIERlcHJlY2F0ZWRWYWx1ZUxpc3RJbXBsTm9kZSAqKCpjb3B5RnVuYykoRGVwcmVjYXRlZFZh
bHVlTGlzdEltcGxOb2RlICopKTsKICAgICBQcml2YXRlKGNvbnN0IFByaXZhdGUgJm90aGVyKTsK
QEAgLTUyLDggKzUyLDcgQEAgcHVibGljOgogCiBpbmxpbmUgRGVwcmVjYXRlZFZhbHVlTGlzdElt
cGw6OlByaXZhdGU6OlByaXZhdGUodm9pZCAoKmRlbGV0ZUZ1bmMpKERlcHJlY2F0ZWRWYWx1ZUxp
c3RJbXBsTm9kZSopLAogICAgICAgICBEZXByZWNhdGVkVmFsdWVMaXN0SW1wbE5vZGUqICgqY29w
eUZ1bmMpKERlcHJlY2F0ZWRWYWx1ZUxpc3RJbXBsTm9kZSopKQotICAgIDogUmVmQ291bnRlZDxQ
cml2YXRlPigwKQotICAgICwgaGVhZChOVUxMKQorICAgIDogaGVhZChOVUxMKQogICAgICwgdGFp
bChOVUxMKQogICAgICwgZGVsZXRlTm9kZShkZWxldGVGdW5jKQogICAgICwgY29weU5vZGUoY29w
eUZ1bmMpCkBAIC02Miw3ICs2MSw3IEBAIGlubGluZSBEZXByZWNhdGVkVmFsdWVMaXN0SW1wbDo6
UHJpdmF0ZToKIH0KIAogaW5saW5lIERlcHJlY2F0ZWRWYWx1ZUxpc3RJbXBsOjpQcml2YXRlOjpQ
cml2YXRlKGNvbnN0IFByaXZhdGUgJm90aGVyKQotICAgIDogUmVmQ291bnRlZDxQcml2YXRlPigw
KQorICAgIDogUmVmQ291bnRlZDxQcml2YXRlPigxKQogICAgICwgZGVsZXRlTm9kZShvdGhlci5k
ZWxldGVOb2RlKQogICAgICwgY29weU5vZGUob3RoZXIuY29weU5vZGUpCiAgICAgLCBjb3VudChv
dGhlci5jb3VudCkKQEAgLTExMiw3ICsxMTEsNyBAQCB2b2lkIERlcHJlY2F0ZWRWYWx1ZUxpc3RJ
bXBsOjpQcml2YXRlOjpkCiB9CiAKIERlcHJlY2F0ZWRWYWx1ZUxpc3RJbXBsOjpEZXByZWNhdGVk
VmFsdWVMaXN0SW1wbCh2b2lkICgqZGVsZXRlRnVuYykoRGVwcmVjYXRlZFZhbHVlTGlzdEltcGxO
b2RlICopLCBEZXByZWNhdGVkVmFsdWVMaXN0SW1wbE5vZGUgKigqY29weUZ1bmMpKERlcHJlY2F0
ZWRWYWx1ZUxpc3RJbXBsTm9kZSAqKSkgOgotICAgIGQobmV3IFByaXZhdGUoZGVsZXRlRnVuYywg
Y29weUZ1bmMpKQorICAgIGQoYWRvcHRSZWYobmV3IFByaXZhdGUoZGVsZXRlRnVuYywgY29weUZ1
bmMpKSkKIHsKIH0KIApAQCAtMzkxLDcgKzM5MCw3IEBAIERlcHJlY2F0ZWRWYWx1ZUxpc3RJbXBs
JiBEZXByZWNhdGVkVmFsdWUKIHZvaWQgRGVwcmVjYXRlZFZhbHVlTGlzdEltcGw6OmNvcHlPbldy
aXRlKCkKIHsKICAgICBpZiAoIWQtPmhhc09uZVJlZigpKQotICAgICAgICBkID0gbmV3IFByaXZh
dGUoKmQpOworICAgICAgICBkID0gYWRvcHRSZWYobmV3IFByaXZhdGUoKmQpKTsKIH0KIAogYm9v
bCBEZXByZWNhdGVkVmFsdWVMaXN0SW1wbDo6aXNFcXVhbChjb25zdCBEZXByZWNhdGVkVmFsdWVM
aXN0SW1wbCAmb3RoZXIsIGJvb2wgKCplcXVhbEZ1bmMpKGNvbnN0IERlcHJlY2F0ZWRWYWx1ZUxp
c3RJbXBsTm9kZSAqLCBjb25zdCBEZXByZWNhdGVkVmFsdWVMaXN0SW1wbE5vZGUgKikpIGNvbnN0
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRTZWxlY3Rvci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFNlbGVjdG9yLmgJKHJldmlzaW9u
IDM0NDM4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250U2VsZWN0b3IuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzYsNyArMzYsNiBAQCBjbGFzcyBGb250RGVzY3JpcHRpb247CiAKIGNsYXNz
IEZvbnRTZWxlY3RvciA6IHB1YmxpYyBSZWZDb3VudGVkPEZvbnRTZWxlY3Rvcj4gewogcHVibGlj
OgotICAgIEZvbnRTZWxlY3RvcigpIDogUmVmQ291bnRlZDxGb250U2VsZWN0b3I+KDApIHsgfQog
ICAgIHZpcnR1YWwgfkZvbnRTZWxlY3RvcigpIHsgfQogICAgIHZpcnR1YWwgRm9udERhdGEqIGdl
dEZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21pY1N0cmluZyYgZmFt
aWx5TmFtZSkgPSAwOwogfTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQ
YWdlVHJlZU5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R2x5cGhQYWdlVHJlZU5vZGUuY3BwCShyZXZpc2lvbiAzNDQzOCkKKysrIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR2x5cGhQYWdlVHJlZU5vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODMs
NyArMTgzLDcgQEAgdm9pZCBHbHlwaFBhZ2VUcmVlTm9kZTo6aW5pdGlhbGl6ZVBhZ2UoYwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAg
bV9wYWdlID0gbmV3IEdseXBoUGFnZSh0aGlzKTsKKyAgICAgICAgICAgIG1fcGFnZSA9IEdseXBo
UGFnZTo6Y3JlYXRlKHRoaXMpOwogCiAgICAgICAgICAgICAvLyBOb3cgdGhhdCB3ZSBoYXZlIGEg
YnVmZmVyIGZ1bGwgb2YgY2hhcmFjdGVycywgd2Ugd2FudCB0byBnZXQgYmFjayBhbiBhcnJheQog
ICAgICAgICAgICAgLy8gb2YgZ2x5cGggaW5kaWNlcy4gIFRoaXMgcGFydCBpbnZvbHZlcyBjYWxs
aW5nIGludG8gdGhlIHBsYXRmb3JtLXNwZWNpZmljIApAQCAtMjQ1LDcgKzI0NSw3IEBAIHZvaWQg
R2x5cGhQYWdlVHJlZU5vZGU6OmluaXRpYWxpemVQYWdlKGMKICAgICAgICAgICAgICAgICBtX3Bh
Z2UgPSBwYXJlbnRQYWdlOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAv
LyBDb21iaW5lIHRoZSBwYXJlbnQncyBnbHlwaHMgYW5kIG91cnMgdG8gZm9ybSBhIG5ldyBtb3Jl
IGNvbXBsZXRlIHBhZ2UuCi0gICAgICAgICAgICAgICAgbV9wYWdlID0gbmV3IEdseXBoUGFnZSh0
aGlzKTsKKyAgICAgICAgICAgICAgICBtX3BhZ2UgPSBHbHlwaFBhZ2U6OmNyZWF0ZSh0aGlzKTsK
IAogICAgICAgICAgICAgICAgIC8vIE92ZXJsYXkgdGhlIHBhcmVudCBwYWdlIG9uIHRoZSBmYWxs
YmFjayBwYWdlLiBDaGVjayBpZiB0aGUgZmFsbGJhY2sgZm9udAogICAgICAgICAgICAgICAgIC8v
IGhhcyBhZGRlZCBhbnl0aGluZy4KQEAgLTI2OCw3ICsyNjgsNyBAQCB2b2lkIEdseXBoUGFnZVRy
ZWVOb2RlOjppbml0aWFsaXplUGFnZShjCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9
IGVsc2UgewotICAgICAgICBtX3BhZ2UgPSBuZXcgR2x5cGhQYWdlKHRoaXMpOworICAgICAgICBt
X3BhZ2UgPSBHbHlwaFBhZ2U6OmNyZWF0ZSh0aGlzKTsKICAgICAgICAgLy8gU3lzdGVtIGZhbGxi
YWNrLiBJbml0aWFsaXplZCB3aXRoIHRoZSBwYXJlbnQncyBwYWdlIGhlcmUsIGFzIGluZGl2aWR1
YWwKICAgICAgICAgLy8gZW50cmllcyBtYXkgdXNlIGRpZmZlcmVudCBmb250cyBkZXBlbmRpbmcg
b24gY2hhcmFjdGVyLiBJZiB0aGUgRm9udAogICAgICAgICAvLyBldmVyIGZpbmRzIGl0IG5lZWRz
IGEgZ2x5cGggb3V0IG9mIHRoZSBzeXN0ZW0gZmFsbGJhY2sgcGFnZSwgaXQgd2lsbApJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2VUcmVlTm9kZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdlVHJlZU5vZGUuaAkocmV2aXNp
b24gMzQ0MzgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZVRyZWVOb2Rl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDA2LCAyMDA3LCAyMDA4IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksOSArMjks
MTAgQEAKICNpZm5kZWYgR2x5cGhQYWdlVHJlZU5vZGVfaAogI2RlZmluZSBHbHlwaFBhZ2VUcmVl
Tm9kZV9oCiAKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvdW5pY29k
ZS9Vbmljb2RlLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCkBAIC01NywxNiArNTgsOSBAQCBzdHJ1Y3QgR2x5cGhEYXRhIHsKIC8vIGFsdGhvdWdo
IG11bHRpcGxlIG5vZGVzIG1heSByZWZlcmVuY2UgaXQgYXMgdGhlaXIgInBhZ2UiIGlmIHRoZXkg
YXJlIHN1cHBvc2VkCiAvLyB0byBiZSBvdmVycmlkaW5nIHRoZSBwYXJlbnQncyBub2RlLCBidXQg
cHJvdmlkZSBubyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLgogc3RydWN0IEdseXBoUGFnZSA6IHB1
YmxpYyBSZWZDb3VudGVkPEdseXBoUGFnZT4gewotICAgIEdseXBoUGFnZSgpCi0gICAgICAgIDog
UmVmQ291bnRlZDxHbHlwaFBhZ2U+KDApCi0gICAgICAgICwgbV9vd25lcigwKQotICAgIHsKLSAg
ICB9Ci0KLSAgICBHbHlwaFBhZ2UoR2x5cGhQYWdlVHJlZU5vZGUqIG93bmVyKQotICAgICAgICA6
IFJlZkNvdW50ZWQ8R2x5cGhQYWdlPigwKQotICAgICAgICAsIG1fb3duZXIob3duZXIpCisgICAg
c3RhdGljIFBhc3NSZWZQdHI8R2x5cGhQYWdlPiBjcmVhdGUoR2x5cGhQYWdlVHJlZU5vZGUqIG93
bmVyKQogICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBHbHlwaFBhZ2Uob3duZXIp
KTsKICAgICB9CiAKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHNpemUgPSAyNTY7IC8vIENvdmVy
cyBMYXRpbi0xIGluIGEgc2luZ2xlIHBhZ2UuCkBAIC04NSw4ICs3OSwxNSBAQCBzdHJ1Y3QgR2x5
cGhQYWdlIDogcHVibGljIFJlZkNvdW50ZWQ8R2x5CiAgICAgICAgIG1fZ2x5cGhzW2luZGV4XS5m
b250RGF0YSA9IGY7CiAgICAgfQogICAgIEdseXBoUGFnZVRyZWVOb2RlKiBvd25lcigpIGNvbnN0
IHsgcmV0dXJuIG1fb3duZXI7IH0KKwogICAgIC8vIEltcGxlbWVudGVkIGJ5IHRoZSBwbGF0Zm9y
bS4KLSAgICBib29sIGZpbGwodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIFVDaGFy
KiBjaGFyYWN0ZXJCdWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgU2ltcGxlRm9u
dERhdGEqIGZvbnREYXRhKTsKKyAgICBib29sIGZpbGwodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25l
ZCBsZW5ndGgsIFVDaGFyKiBjaGFyYWN0ZXJCdWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwg
Y29uc3QgU2ltcGxlRm9udERhdGEqKTsKKworcHJpdmF0ZToKKyAgICBHbHlwaFBhZ2UoR2x5cGhQ
YWdlVHJlZU5vZGUqIG93bmVyKQorICAgICAgICA6IG1fb3duZXIob3duZXIpCisgICAgeworICAg
IH0KIH07CiAKIC8vIFRoZSBnbHlwaCBwYWdlIHRyZWUgaXMgYSBkYXRhIHN0cnVjdHVyZSB0aGF0
IG1hcHMgKEZvbnREYXRhLCBnbHlwaCBwYWdlIG51bWJlcikKSW5kZXg6IFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllci5jcHAJKHJldmlzaW9uIDM0NDM4KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw4ICs1MSw4IEBACiAjaW5jbHVkZSAiRmxv
YXRSZWN0LmgiCiAjaW5jbHVkZSAiRm9jdXNDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRnJhbWUu
aCIKLSNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJGcmFtZVRyZWUuaCIKKyNpbmNs
dWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJHcmFkaWVudC5oIgogI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkhUTUxNYXJxdWVlRWxlbWVudC5oIgpAQCAtNzU3LDkg
Kzc1NywxMCBAQCB2b2lkIFJlbmRlckxheWVyOjpzY3JvbGxUb09mZnNldChpbnQgeCwgCiAgICAg
fQogCiAgICAgLy8gU2NoZWR1bGUgdGhlIHNjcm9sbCBET00gZXZlbnQuCi0gICAgaWYgKHZpZXcp
CisgICAgaWYgKHZpZXcpIHsKICAgICAgICAgaWYgKEZyYW1lVmlldyogZnJhbWVWaWV3ID0gdmll
dy0+ZnJhbWVWaWV3KCkpCi0gICAgICAgICAgICBmcmFtZVZpZXctPnNjaGVkdWxlRXZlbnQobmV3
IEV2ZW50KHNjcm9sbEV2ZW50LCB0cnVlLCBmYWxzZSksIEV2ZW50VGFyZ2V0Tm9kZUNhc3QocmVu
ZGVyZXIoKS0+ZWxlbWVudCgpKSwgdHJ1ZSk7CisgICAgICAgICAgICBmcmFtZVZpZXctPnNjaGVk
dWxlRXZlbnQoRXZlbnQ6OmNyZWF0ZShzY3JvbGxFdmVudCwgdHJ1ZSwgZmFsc2UpLCBFdmVudFRh
cmdldE5vZGVDYXN0KHJlbmRlcmVyKCktPmVsZW1lbnQoKSksIHRydWUpOworICAgIH0KIH0KIAog
dm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsUmVjdFRvVmlzaWJsZShjb25zdCBJbnRSZWN0ICZyZWN0
LCBjb25zdCBTY3JvbGxBbGlnbm1lbnQmIGFsaWduWCwgY29uc3QgU2Nyb2xsQWxpZ25tZW50JiBh
bGlnblkpCkBAIC0xMjI3LDkgKzEyMjgsMTAgQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlT3Zl
cmZsb3dTdGF0dXMoYgogICAgICAgICBtX2hvcml6b250YWxPdmVyZmxvdyA9IGhvcml6b250YWxP
dmVyZmxvdzsKICAgICAgICAgbV92ZXJ0aWNhbE92ZXJmbG93ID0gdmVydGljYWxPdmVyZmxvdzsK
ICAgICAgICAgCi0gICAgICAgIGlmIChGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1fb2JqZWN0LT5k
b2N1bWVudCgpLT52aWV3KCkpCi0gICAgICAgICAgICBmcmFtZVZpZXctPnNjaGVkdWxlRXZlbnQo
bmV3IE92ZXJmbG93RXZlbnQoaG9yaXpvbnRhbE92ZXJmbG93Q2hhbmdlZCwgaG9yaXpvbnRhbE92
ZXJmbG93LCB2ZXJ0aWNhbE92ZXJmbG93Q2hhbmdlZCwgdmVydGljYWxPdmVyZmxvdyksCi0gICAg
ICAgICAgICBFdmVudFRhcmdldE5vZGVDYXN0KG1fb2JqZWN0LT5lbGVtZW50KCkpLCB0cnVlKTsK
KyAgICAgICAgaWYgKEZyYW1lVmlldyogZnJhbWVWaWV3ID0gbV9vYmplY3QtPmRvY3VtZW50KCkt
PnZpZXcoKSkgeworICAgICAgICAgICAgZnJhbWVWaWV3LT5zY2hlZHVsZUV2ZW50KE92ZXJmbG93
RXZlbnQ6OmNyZWF0ZShob3Jpem9udGFsT3ZlcmZsb3dDaGFuZ2VkLCBob3Jpem9udGFsT3ZlcmZs
b3csIHZlcnRpY2FsT3ZlcmZsb3dDaGFuZ2VkLCB2ZXJ0aWNhbE92ZXJmbG93KSwKKyAgICAgICAg
ICAgICAgICBFdmVudFRhcmdldE5vZGVDYXN0KG1fb2JqZWN0LT5lbGVtZW50KCkpLCB0cnVlKTsK
KyAgICAgICAgfQogICAgIH0KIH0KIApAQCAtMjM0MiwyNCArMjM0NCwyNCBAQCB2b2lkIFJlbmRl
ckxheWVyOjp1cGRhdGVSZWZsZWN0aW9uU3R5bGUoCiAgICAgVHJhbnNmb3JtT3BlcmF0aW9ucyB0
cmFuc2Zvcm07CiAgICAgc3dpdGNoIChyZW5kZXJlcigpLT5zdHlsZSgpLT5ib3hSZWZsZWN0KCkt
PmRpcmVjdGlvbigpKSB7CiAgICAgICAgIGNhc2UgUmVmbGVjdGlvbkJlbG93OgotICAgICAgICAg
ICAgdHJhbnNmb3JtLmFwcGVuZChuZXcgVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uKExlbmd0
aCgwLCBGaXhlZCksIExlbmd0aCgxMDAuLCBQZXJjZW50KSkpOwotICAgICAgICAgICAgdHJhbnNm
b3JtLmFwcGVuZChuZXcgVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uKExlbmd0aCgwLCBGaXhl
ZCksIHJlbmRlcmVyKCktPnN0eWxlKCktPmJveFJlZmxlY3QoKS0+b2Zmc2V0KCkpKTsKLSAgICAg
ICAgICAgIHRyYW5zZm9ybS5hcHBlbmQobmV3IFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uKDEuMGYs
IC0xLjBmKSk7CisgICAgICAgICAgICB0cmFuc2Zvcm0uYXBwZW5kKFRyYW5zbGF0ZVRyYW5zZm9y
bU9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0aCgwLCBGaXhlZCksIExlbmd0aCgxMDAuLCBQZXJjZW50
KSkpOworICAgICAgICAgICAgdHJhbnNmb3JtLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVy
YXRpb246OmNyZWF0ZShMZW5ndGgoMCwgRml4ZWQpLCByZW5kZXJlcigpLT5zdHlsZSgpLT5ib3hS
ZWZsZWN0KCktPm9mZnNldCgpKSk7CisgICAgICAgICAgICB0cmFuc2Zvcm0uYXBwZW5kKFNjYWxl
VHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoMS4wLCAtMS4wKSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBSZWZsZWN0aW9uQWJvdmU6Ci0gICAgICAgICAgICB0cmFuc2Zvcm0u
YXBwZW5kKG5ldyBTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbigxLjBmLCAtMS4wZikpOwotICAgICAg
ICAgICAgdHJhbnNmb3JtLmFwcGVuZChuZXcgVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uKExl
bmd0aCgwLCBGaXhlZCksIExlbmd0aCgxMDAuLCBQZXJjZW50KSkpOwotICAgICAgICAgICAgdHJh
bnNmb3JtLmFwcGVuZChuZXcgVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uKExlbmd0aCgwLCBG
aXhlZCksIHJlbmRlcmVyKCktPnN0eWxlKCktPmJveFJlZmxlY3QoKS0+b2Zmc2V0KCkpKTsKKyAg
ICAgICAgICAgIHRyYW5zZm9ybS5hcHBlbmQoU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0
ZSgxLjAsIC0xLjApKTsKKyAgICAgICAgICAgIHRyYW5zZm9ybS5hcHBlbmQoVHJhbnNsYXRlVHJh
bnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDAsIEZpeGVkKSwgTGVuZ3RoKDEwMC4sIFBl
cmNlbnQpKSk7CisgICAgICAgICAgICB0cmFuc2Zvcm0uYXBwZW5kKFRyYW5zbGF0ZVRyYW5zZm9y
bU9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0aCgwLCBGaXhlZCksIHJlbmRlcmVyKCktPnN0eWxlKCkt
PmJveFJlZmxlY3QoKS0+b2Zmc2V0KCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIFJlZmxlY3Rpb25SaWdodDoKLSAgICAgICAgICAgIHRyYW5zZm9ybS5hcHBlbmQobmV3IFRy
YW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbihMZW5ndGgoMTAwLiwgUGVyY2VudCksIExlbmd0aCgw
LCBGaXhlZCkpKTsKLSAgICAgICAgICAgIHRyYW5zZm9ybS5hcHBlbmQobmV3IFRyYW5zbGF0ZVRy
YW5zZm9ybU9wZXJhdGlvbihyZW5kZXJlcigpLT5zdHlsZSgpLT5ib3hSZWZsZWN0KCktPm9mZnNl
dCgpLCBMZW5ndGgoMCwgRml4ZWQpKSk7Ci0gICAgICAgICAgICB0cmFuc2Zvcm0uYXBwZW5kKG5l
dyBTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbigtMS4wZiwgMS4wZikpOworICAgICAgICAgICAgdHJh
bnNmb3JtLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShMZW5ndGgo
MTAwLiwgUGVyY2VudCksIExlbmd0aCgwLCBGaXhlZCkpKTsKKyAgICAgICAgICAgIHRyYW5zZm9y
bS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUocmVuZGVyZXIoKS0+
c3R5bGUoKS0+Ym94UmVmbGVjdCgpLT5vZmZzZXQoKSwgTGVuZ3RoKDAsIEZpeGVkKSkpOworICAg
ICAgICAgICAgdHJhbnNmb3JtLmFwcGVuZChTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRl
KC0xLjAsIDEuMCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgUmVmbGVjdGlv
bkxlZnQ6Ci0gICAgICAgICAgICB0cmFuc2Zvcm0uYXBwZW5kKG5ldyBTY2FsZVRyYW5zZm9ybU9w
ZXJhdGlvbigtMS4wZiwgMS4wZikpOwotICAgICAgICAgICAgdHJhbnNmb3JtLmFwcGVuZChuZXcg
VHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uKExlbmd0aCgxMDAuLCBQZXJjZW50KSwgTGVuZ3Ro
KDAsIEZpeGVkKSkpOwotICAgICAgICAgICAgdHJhbnNmb3JtLmFwcGVuZChuZXcgVHJhbnNsYXRl
VHJhbnNmb3JtT3BlcmF0aW9uKHJlbmRlcmVyKCktPnN0eWxlKCktPmJveFJlZmxlY3QoKS0+b2Zm
c2V0KCksIExlbmd0aCgwLCBGaXhlZCkpKTsKKyAgICAgICAgICAgIHRyYW5zZm9ybS5hcHBlbmQo
U2NhbGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSgtMS4wLCAxLjApKTsKKyAgICAgICAgICAg
IHRyYW5zZm9ybS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVu
Z3RoKDEwMC4sIFBlcmNlbnQpLCBMZW5ndGgoMCwgRml4ZWQpKSk7CisgICAgICAgICAgICB0cmFu
c2Zvcm0uYXBwZW5kKFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHJlbmRlcmVy
KCktPnN0eWxlKCktPmJveFJlZmxlY3QoKS0+b2Zmc2V0KCksIExlbmd0aCgwLCBGaXhlZCkpKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBuZXdTdHlsZS0+c2V0VHJhbnNmb3JtKHRy
YW5zZm9ybSk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgJKHJldmlz
aW9uIDM0NDM4KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMzksMTkgKzM5LDE5IEBACiAjaW5jbHVkZSAiQ1NTSW1hZ2VHZW5lcmF0
b3JWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NT
UmVmbGVjdGlvbkRpcmVjdGlvbi5oIgorI2luY2x1ZGUgIkNTU1RyYW5zZm9ybVZhbHVlLmgiCiAj
aW5jbHVkZSAiQ1NTVmFsdWVMaXN0LmgiCiAjaW5jbHVkZSAiQ29sb3IuaCIKLSNpbmNsdWRlICJD
U1NUcmFuc2Zvcm1WYWx1ZS5oIgogI2luY2x1ZGUgIkRhdGFSZWYuaCIKLSNpbmNsdWRlICJGb250
LmgiCiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRl
ICJHcmFwaGljc1R5cGVzLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIkxlbmd0
aC5oIgogI2luY2x1ZGUgIlBhaXIuaCIKLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2lu
Y2x1ZGUgIlRleHREaXJlY3Rpb24uaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiAjaWYgRU5B
QkxFKFNWRykKQEAgLTc4OSw4ICs3ODksNyBAQCBwcml2YXRlOgogCiBjbGFzcyBUcmFuc2Zvcm1P
cGVyYXRpb24gOiBwdWJsaWMgUmVmQ291bnRlZDxUcmFuc2Zvcm1PcGVyYXRpb24+IHsKIHB1Ymxp
YzoKLSAgICBUcmFuc2Zvcm1PcGVyYXRpb24oKSA6IFJlZkNvdW50ZWQ8VHJhbnNmb3JtT3BlcmF0
aW9uPigwKSB7IH0KLSAgICB2aXJ0dWFsIH5UcmFuc2Zvcm1PcGVyYXRpb24oKSB7fQorICAgIHZp
cnR1YWwgflRyYW5zZm9ybU9wZXJhdGlvbigpIHsgfQogICAgIAogICAgIHZpcnR1YWwgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiYpIGNvbnN0ID0gMDsKICAgICBib29s
IG9wZXJhdG9yIT0oY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uJiBvKSBjb25zdCB7IHJldHVybiAh
KCp0aGlzID09IG8pOyB9CkBAIC04MDYsMTMgKzgwNSwxMyBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCBib29sIGlzTWF0cml4T3BlcmF0aW9uKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIH07CiAK
LWNsYXNzIFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uIDogcHVibGljIFRyYW5zZm9ybU9wZXJhdGlv
bgoteworY2xhc3MgU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24gOiBwdWJsaWMgVHJhbnNmb3JtT3Bl
cmF0aW9uIHsKIHB1YmxpYzoKLSAgICBTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbihkb3VibGUgc3gs
IGRvdWJsZSBzeSkKLSAgICA6IG1feChzeCksIG1feShzeSkKLSAgICB7fQotICAgICAgICAKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbj4gY3JlYXRlKGRvdWJs
ZSBzeCwgZG91YmxlIHN5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTY2Fs
ZVRyYW5zZm9ybU9wZXJhdGlvbihzeCwgc3kpKTsKKyAgICB9CisKICAgICB2aXJ0dWFsIGJvb2wg
aXNTY2FsZU9wZXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAogICAgIHZpcnR1YWwg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiYgbykgY29uc3QKQEAgLTgz
MiwxNiArODMxLDIxIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFRyYW5zZm9ybU9wZXJhdGlvbiog
YmxlbmQoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9tLCBkb3VibGUgcHJvZ3Jlc3MsIGJv
b2wgYmxlbmRUb0lkZW50aXR5ID0gZmFsc2UpOwogCiBwcml2YXRlOgorICAgIFNjYWxlVHJhbnNm
b3JtT3BlcmF0aW9uKGRvdWJsZSBzeCwgZG91YmxlIHN5KQorICAgICAgICA6IG1feChzeCksIG1f
eShzeSkKKyAgICB7CisgICAgfQorICAgICAgICAKICAgICBkb3VibGUgbV94OwogICAgIGRvdWJs
ZSBtX3k7CiB9OwogCi1jbGFzcyBSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24gOiBwdWJsaWMgVHJh
bnNmb3JtT3BlcmF0aW9uCi17CitjbGFzcyBSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24gOiBwdWJs
aWMgVHJhbnNmb3JtT3BlcmF0aW9uIHsKIHB1YmxpYzoKLSAgICBSb3RhdGVUcmFuc2Zvcm1PcGVy
YXRpb24oZG91YmxlIGFuZ2xlKQotICAgIDogbV9hbmdsZShhbmdsZSkKLSAgICB7fQorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbj4gY3JlYXRlKGRvdWJsZSBh
bmdsZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgUm90YXRlVHJhbnNmb3Jt
T3BlcmF0aW9uKGFuZ2xlKSk7CisgICAgfQogCiAgICAgdmlydHVhbCBib29sIGlzUm90YXRlT3Bl
cmF0aW9uKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCkBAIC04NjIsMjUgKzg2NiwyOSBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCBUcmFuc2Zvcm1PcGVyYXRpb24qIGJsZW5kKGNvbnN0IFRyYW5z
Zm9ybU9wZXJhdGlvbiogZnJvbSwgZG91YmxlIHByb2dyZXNzLCBib29sIGJsZW5kVG9JZGVudGl0
eSA9IGZhbHNlKTsKICAgICAKIHByaXZhdGU6CisgICAgUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9u
KGRvdWJsZSBhbmdsZSkKKyAgICAgICAgOiBtX2FuZ2xlKGFuZ2xlKQorICAgIHsKKyAgICB9CisK
ICAgICBkb3VibGUgbV9hbmdsZTsKIH07CiAKLWNsYXNzIFNrZXdUcmFuc2Zvcm1PcGVyYXRpb24g
OiBwdWJsaWMgVHJhbnNmb3JtT3BlcmF0aW9uCi17CitjbGFzcyBTa2V3VHJhbnNmb3JtT3BlcmF0
aW9uIDogcHVibGljIFRyYW5zZm9ybU9wZXJhdGlvbiB7CiBwdWJsaWM6Ci0gICAgU2tld1RyYW5z
Zm9ybU9wZXJhdGlvbihkb3VibGUgYW5nbGVYLCBkb3VibGUgYW5nbGVZKQotICAgIDogbV9hbmds
ZVgoYW5nbGVYKSwgbV9hbmdsZVkoYW5nbGVZKQotICAgIHt9Ci0gICAgCisgICAgc3RhdGljIFBh
c3NSZWZQdHI8U2tld1RyYW5zZm9ybU9wZXJhdGlvbj4gY3JlYXRlKGRvdWJsZSBhbmdsZVgsIGRv
dWJsZSBhbmdsZVkpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNrZXdUcmFu
c2Zvcm1PcGVyYXRpb24oYW5nbGVYLCBhbmdsZVkpKTsKKyAgICB9CisKICAgICB2aXJ0dWFsIGJv
b2wgaXNTa2V3T3BlcmF0aW9uKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgdmlydHVh
bCBib29sIG9wZXJhdG9yPT0oY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uJiBvKSBjb25zdAogICAg
IHsKLSAgICAgICAgaWYgKG8uaXNTa2V3T3BlcmF0aW9uKCkpIHsKLSAgICAgICAgICAgIGNvbnN0
IFNrZXdUcmFuc2Zvcm1PcGVyYXRpb24qIHMgPSBzdGF0aWNfY2FzdDxjb25zdCBTa2V3VHJhbnNm
b3JtT3BlcmF0aW9uKj4oJm8pOwotICAgICAgICAgICAgcmV0dXJuIG1fYW5nbGVYID09IHMtPm1f
YW5nbGVYICYmIG1fYW5nbGVZID09IHMtPm1fYW5nbGVZOwotICAgICAgICB9Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFvLmlzU2tld09wZXJhdGlvbigpKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICBjb25zdCBTa2V3VHJhbnNmb3JtT3BlcmF0aW9uKiBz
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgU2tld1RyYW5zZm9ybU9wZXJhdGlvbio+KCZvKTsKKyAgICAg
ICAgcmV0dXJuIG1fYW5nbGVYID09IHMtPm1fYW5nbGVYICYmIG1fYW5nbGVZID09IHMtPm1fYW5n
bGVZOwogICAgIH0KIAogICAgIHZpcnR1YWwgdm9pZCBhcHBseShBZmZpbmVUcmFuc2Zvcm0mIHRy
YW5zZm9ybSwgY29uc3QgSW50U2l6ZSYgYm9yZGVyQm94U2l6ZSkKQEAgLTg5MSwyNiArODk5LDMw
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFRyYW5zZm9ybU9wZXJhdGlvbiogYmxlbmQoY29uc3Qg
VHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9tLCBkb3VibGUgcHJvZ3Jlc3MsIGJvb2wgYmxlbmRUb0lk
ZW50aXR5ID0gZmFsc2UpOwogICAgIAogcHJpdmF0ZToKKyAgICBTa2V3VHJhbnNmb3JtT3BlcmF0
aW9uKGRvdWJsZSBhbmdsZVgsIGRvdWJsZSBhbmdsZVkpCisgICAgICAgIDogbV9hbmdsZVgoYW5n
bGVYKSwgbV9hbmdsZVkoYW5nbGVZKQorICAgIHsKKyAgICB9CisgICAgCiAgICAgZG91YmxlIG1f
YW5nbGVYOwogICAgIGRvdWJsZSBtX2FuZ2xlWTsKIH07CiAKLWNsYXNzIFRyYW5zbGF0ZVRyYW5z
Zm9ybU9wZXJhdGlvbiA6IHB1YmxpYyBUcmFuc2Zvcm1PcGVyYXRpb24KLXsKK2NsYXNzIFRyYW5z
bGF0ZVRyYW5zZm9ybU9wZXJhdGlvbiA6IHB1YmxpYyBUcmFuc2Zvcm1PcGVyYXRpb24gewogcHVi
bGljOgotICAgIFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbihjb25zdCBMZW5ndGgmIHR4LCBj
b25zdCBMZW5ndGgmIHR5KQotICAgIDogbV94KHR4KSwgbV95KHR5KQotICAgIHt9Ci0gICAgCisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8VHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uPiBjcmVhdGUo
Y29uc3QgTGVuZ3RoJiB0eCwgY29uc3QgTGVuZ3RoJiB0eSkKKyAgICB7CisgICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uKHR4LCB0eSkpOworICAg
IH0KKwogICAgIHZpcnR1YWwgYm9vbCBpc1RyYW5zbGF0ZU9wZXJhdGlvbigpIGNvbnN0IHsgcmV0
dXJuIHRydWU7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFRyYW5zZm9y
bU9wZXJhdGlvbiYgbykgY29uc3QKICAgICB7Ci0gICAgICAgIGlmIChvLmlzVHJhbnNsYXRlT3Bl
cmF0aW9uKCkpIHsKLSAgICAgICAgICAgIGNvbnN0IFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlv
biogdCA9IHN0YXRpY19jYXN0PGNvbnN0IFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbio+KCZv
KTsKLSAgICAgICAgICAgIHJldHVybiBtX3ggPT0gdC0+bV94ICYmIG1feSA9PSB0LT5tX3k7Ci0g
ICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIW8uaXNUcmFuc2xh
dGVPcGVyYXRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgY29uc3Qg
VHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uKiB0ID0gc3RhdGljX2Nhc3Q8Y29uc3QgVHJhbnNs
YXRlVHJhbnNmb3JtT3BlcmF0aW9uKj4oJm8pOworICAgICAgICByZXR1cm4gbV94ID09IHQtPm1f
eCAmJiBtX3kgPT0gdC0+bV95OwogICAgIH0KIAogICAgIHZpcnR1YWwgdm9pZCBhcHBseShBZmZp
bmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29uc3QgSW50U2l6ZSYgYm9yZGVyQm94U2l6ZSkKQEAg
LTkyMSwxNyArOTMzLDIyIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFRyYW5zZm9ybU9wZXJhdGlv
biogYmxlbmQoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9tLCBkb3VibGUgcHJvZ3Jlc3Ms
IGJvb2wgYmxlbmRUb0lkZW50aXR5ID0gZmFsc2UpOwogCiBwcml2YXRlOgorICAgIFRyYW5zbGF0
ZVRyYW5zZm9ybU9wZXJhdGlvbihjb25zdCBMZW5ndGgmIHR4LCBjb25zdCBMZW5ndGgmIHR5KQor
ICAgICAgICA6IG1feCh0eCksIG1feSh0eSkKKyAgICB7CisgICAgfQorCiAgICAgTGVuZ3RoIG1f
eDsKICAgICBMZW5ndGggbV95OwogfTsKIAotY2xhc3MgTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9u
IDogcHVibGljIFRyYW5zZm9ybU9wZXJhdGlvbgoteworY2xhc3MgTWF0cml4VHJhbnNmb3JtT3Bl
cmF0aW9uIDogcHVibGljIFRyYW5zZm9ybU9wZXJhdGlvbiB7CiBwdWJsaWM6Ci0gICAgTWF0cml4
VHJhbnNmb3JtT3BlcmF0aW9uKGRvdWJsZSBhLCBkb3VibGUgYiwgZG91YmxlIGMsIGRvdWJsZSBk
LCBkb3VibGUgZSwgZG91YmxlIGYpCi0gICAgOiBtX2EoYSksIG1fYihiKSwgbV9jKGMpLCBtX2Qo
ZCksIG1fZShlKSwgbV9mKGYpCi0gICAge30KLSAgICAKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxN
YXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24+IGNyZWF0ZShkb3VibGUgYSwgZG91YmxlIGIsIGRvdWJs
ZSBjLCBkb3VibGUgZCwgZG91YmxlIGUsIGRvdWJsZSBmKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24oYSwgYiwgYywgZCwgZSwgZikp
OworICAgIH0KKwogICAgIHZpcnR1YWwgYm9vbCBpc01hdHJpeE9wZXJhdGlvbigpIGNvbnN0IHsg
cmV0dXJuIHRydWU7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFRyYW5z
Zm9ybU9wZXJhdGlvbiYgbykgY29uc3QKQEAgLTk1Miw2ICs5NjksMTEgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgVHJhbnNmb3JtT3BlcmF0aW9uKiBibGVuZChjb25zdCBUcmFuc2Zvcm1PcGVyYXRp
b24qIGZyb20sIGRvdWJsZSBwcm9ncmVzcywgYm9vbCBibGVuZFRvSWRlbnRpdHkgPSBmYWxzZSk7
CiAgICAgCiBwcml2YXRlOgorICAgIE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbihkb3VibGUgYSwg
ZG91YmxlIGIsIGRvdWJsZSBjLCBkb3VibGUgZCwgZG91YmxlIGUsIGRvdWJsZSBmKQorICAgICAg
ICA6IG1fYShhKSwgbV9iKGIpLCBtX2MoYyksIG1fZChkKSwgbV9lKGUpLCBtX2YoZikKKyAgICB7
CisgICAgfQorICAgIAogICAgIGRvdWJsZSBtX2E7CiAgICAgZG91YmxlIG1fYjsKICAgICBkb3Vi
bGUgbV9jOwpAQCAtOTYwLDggKzk4Miw3IEBAIHByaXZhdGU6CiAgICAgZG91YmxlIG1fZjsKIH07
CiAKLWNsYXNzIFRyYW5zZm9ybU9wZXJhdGlvbnMKLXsKK2NsYXNzIFRyYW5zZm9ybU9wZXJhdGlv
bnMgewogcHVibGljOgogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUcmFuc2Zvcm1PcGVyYXRp
b25zJikgY29uc3Q7CiAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlv
bnMmIG8pIGNvbnN0IHsKQEAgLTEyOTEsMTUgKzEzMTIsMTMgQEAgcHVibGljOgogICAgIFRyYW5z
aXRpb24qIG1fbmV4dDsKIH07CiAKLWNsYXNzIFN0eWxlUmVmbGVjdGlvbiA6IHB1YmxpYyBSZWZD
b3VudGVkPFN0eWxlUmVmbGVjdGlvbj4KLXsKK2NsYXNzIFN0eWxlUmVmbGVjdGlvbiA6IHB1Ymxp
YyBSZWZDb3VudGVkPFN0eWxlUmVmbGVjdGlvbj4gewogcHVibGljOgotICAgIFN0eWxlUmVmbGVj
dGlvbigpCi0gICAgOiBSZWZDb3VudGVkPFN0eWxlUmVmbGVjdGlvbj4oMCkKLSAgICAsIG1fZGly
ZWN0aW9uKFJlZmxlY3Rpb25CZWxvdykKLSAgICAsIG1fb2Zmc2V0KDAsIEZpeGVkKQotICAgIHt9
Ci0gICAgCisgICAgc3RhdGljIFBhc3NSZWZQdHI8U3R5bGVSZWZsZWN0aW9uPiBjcmVhdGUoKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdHlsZVJlZmxlY3Rpb24pOworICAg
IH0KKwogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTdHlsZVJlZmxlY3Rpb24mIG8pIGNvbnN0
CiAgICAgewogICAgICAgICByZXR1cm4gbV9kaXJlY3Rpb24gPT0gby5tX2RpcmVjdGlvbiAmJiBt
X29mZnNldCA9PSBvLm1fb2Zmc2V0ICYmIG1fbWFzayA9PSBvLm1fbWFzazsKQEAgLTEzMTUsNiAr
MTMzNCwxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRNYXNrKGNvbnN0IE5pbmVQaWVjZUltYWdl
JiBpbWFnZSkgeyBtX21hc2sgPSBpbWFnZTsgfQogCiBwcml2YXRlOgorICAgIFN0eWxlUmVmbGVj
dGlvbigpCisgICAgICAgIDogbV9kaXJlY3Rpb24oUmVmbGVjdGlvbkJlbG93KQorICAgICAgICAs
IG1fb2Zmc2V0KDAsIEZpeGVkKQorICAgIHsKKyAgICB9CisgICAgCiAgICAgQ1NTUmVmbGVjdGlv
bkRpcmVjdGlvbiBtX2RpcmVjdGlvbjsKICAgICBMZW5ndGggbV9vZmZzZXQ7CiAgICAgTmluZVBp
ZWNlSW1hZ2UgbV9tYXNrOwpJbmRleDogV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VFdmVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VFdmVudC5jcHAJKHJldmlzaW9u
IDM0NDM4KQorKysgV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VFdmVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMwLDExICszMCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU3RvcmFnZUV2
ZW50OjpTdG9yYWdlRXZlbnQoKQotewotfQotCi1TdG9yYWdlRXZlbnQ6OlN0b3JhZ2VFdmVudChj
b25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcm
IG9sZFZhbHVlLCBjb25zdCBTdHJpbmcmIG5ld1ZhbHVlLCBjb25zdCBTdHJpbmcmIHVyaSwgRE9N
V2luZG93KiBzb3VyY2UpCitTdG9yYWdlRXZlbnQ6OlN0b3JhZ2VFdmVudChjb25zdCBBdG9taWNT
dHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIG9sZFZhbHVlLCBj
b25zdCBTdHJpbmcmIG5ld1ZhbHVlLCBjb25zdCBTdHJpbmcmIHVyaSwgUGFzc1JlZlB0cjxET01X
aW5kb3c+IHNvdXJjZSkKICAgICA6IEV2ZW50KHR5cGUsIGZhbHNlLCB0cnVlKQogICAgICwgbV9r
ZXkoa2V5KQogICAgICwgbV9vbGRWYWx1ZShvbGRWYWx1ZSkKQEAgLTQ0LDcgKzQwLDcgQEAgU3Rv
cmFnZUV2ZW50OjpTdG9yYWdlRXZlbnQoY29uc3QgQXRvbWljUwogewogfQogCi12b2lkIFN0b3Jh
Z2VFdmVudDo6aW5pdFN0b3JhZ2VFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGJvb2wg
Y2FuQnViYmxlLCBib29sIGNhbmNlbGFibGUsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJp
bmcmIG9sZFZhbHVlLCBjb25zdCBTdHJpbmcmIG5ld1ZhbHVlLCBjb25zdCBTdHJpbmcmIHVyaSwg
RE9NV2luZG93KiBzb3VyY2UpCit2b2lkIFN0b3JhZ2VFdmVudDo6aW5pdFN0b3JhZ2VFdmVudChj
b25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGJvb2wgY2FuQnViYmxlLCBib29sIGNhbmNlbGFibGUs
IGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBTdHJpbmcm
IG5ld1ZhbHVlLCBjb25zdCBTdHJpbmcmIHVyaSwgUGFzc1JlZlB0cjxET01XaW5kb3c+IHNvdXJj
ZSkKIHsKICAgICBpZiAoZGlzcGF0Y2hlZCgpKQogICAgICAgICByZXR1cm47CkluZGV4OiBXZWJD
b3JlL3N0b3JhZ2UvU3RvcmFnZUV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdl
L1N0b3JhZ2VFdmVudC5oCShyZXZpc2lvbiAzNDQzOCkKKysrIFdlYkNvcmUvc3RvcmFnZS9TdG9y
YWdlRXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsNyArMjcsNiBAQAogI2RlZmluZSBTdG9yYWdlRXZlbnRf
aAogCiAjaW5jbHVkZSAiRXZlbnQuaCIKLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIApAQCAtMzUsMTYgKzM0LDIyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogICAgIGNsYXNzIFN0b3JhZ2VFdmVudCA6IHB1YmxpYyBFdmVudCB7CiAgICAgcHVibGljOgot
ICAgICAgICBTdG9yYWdlRXZlbnQoKTsKLSAgICAgICAgU3RvcmFnZUV2ZW50KGNvbnN0IEF0b21p
Y1N0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgb2xkVmFsdWUs
IGNvbnN0IFN0cmluZyYgbmV3VmFsdWUsIGNvbnN0IFN0cmluZyYgdXJpLCBET01XaW5kb3cqIHNv
dXJjZSk7Ci0gICAgICAgIAorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdG9yYWdlRXZlbnQ+
IGNyZWF0ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3Rv
cmFnZUV2ZW50KTsKKyAgICAgICAgfQorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdG9yYWdl
RXZlbnQ+IGNyZWF0ZShjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYga2V5
LCBjb25zdCBTdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBTdHJpbmcmIG5ld1ZhbHVlLCBjb25zdCBT
dHJpbmcmIHVyaSwgUGFzc1JlZlB0cjxET01XaW5kb3c+IHNvdXJjZSkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdG9yYWdlRXZlbnQodHlwZSwga2V5LCBvbGRW
YWx1ZSwgbmV3VmFsdWUsIHVyaSwgc291cmNlKSk7CisgICAgICAgIH0KKwogICAgICAgICBjb25z
dCBTdHJpbmcmIGtleSgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5OyB9CiAgICAgICAgIGNvbnN0IFN0
cmluZyYgb2xkVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX29sZFZhbHVlOyB9CiAgICAgICAgIGNv
bnN0IFN0cmluZyYgbmV3VmFsdWUoKSBjb25zdCB7IHJldHVybiBtX25ld1ZhbHVlOyB9CiAgICAg
ICAgIGNvbnN0IFN0cmluZyYgdXJpKCkgY29uc3QgeyByZXR1cm4gbV91cmk7IH0KICAgICAgICAg
RE9NV2luZG93KiBzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZS5nZXQoKTsgfQogICAg
ICAgICAKLSAgICAgICAgdm9pZCBpbml0U3RvcmFnZUV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYg
dHlwZSwgYm9vbCBjYW5CdWJibGUsIGJvb2wgY2FuY2VsYWJsZSwgY29uc3QgU3RyaW5nJiBrZXks
IGNvbnN0IFN0cmluZyYgb2xkVmFsdWUsIGNvbnN0IFN0cmluZyYgbmV3VmFsdWUsIGNvbnN0IFN0
cmluZyYgdXJpLCBET01XaW5kb3cqIHNvdXJjZSk7CisgICAgICAgIHZvaWQgaW5pdFN0b3JhZ2VF
dmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGJvb2wgY2FuQnViYmxlLCBib29sIGNhbmNl
bGFibGUsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBT
dHJpbmcmIG5ld1ZhbHVlLCBjb25zdCBTdHJpbmcmIHVyaSwgUGFzc1JlZlB0cjxET01XaW5kb3c+
IHNvdXJjZSk7CiAgICAgICAgIAogICAgICAgICAvLyBOZWVkZWQgb25jZSB3ZSBzdXBwb3J0IGlu
aXQ8Ymxhbms+RXZlbnROUwogICAgICAgICAvLyB2b2lkIGluaXRTdG9yYWdlRXZlbnROUyhpbiBE
T01TdHJpbmcgbmFtZXNwYWNlVVJJLCBpbiBET01TdHJpbmcgdHlwZUFyZywgaW4gYm9vbGVhbiBj
YW5CdWJibGVBcmcsIGluIGJvb2xlYW4gY2FuY2VsYWJsZUFyZywgaW4gRE9NU3RyaW5nIGtleUFy
ZywgaW4gRE9NU3RyaW5nIG9sZFZhbHVlQXJnLCBpbiBET01TdHJpbmcgbmV3VmFsdWVBcmcsIGlu
IERPTVN0cmluZyB1cmlBcmcsIGluIFdpbmRvdyBzb3VyY2VBcmcpOwpAQCAtNTIsNiArNTcsOSBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc1N0b3JhZ2VFdmVu
dCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICAgICAgCiAgICAgcHJpdmF0ZTogICAgCisg
ICAgICAgIFN0b3JhZ2VFdmVudCgpIHsgfQorICAgICAgICBTdG9yYWdlRXZlbnQoY29uc3QgQXRv
bWljU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiBvbGRWYWx1
ZSwgY29uc3QgU3RyaW5nJiBuZXdWYWx1ZSwgY29uc3QgU3RyaW5nJiB1cmksIFBhc3NSZWZQdHI8
RE9NV2luZG93PiBzb3VyY2UpOworICAgICAgICAKICAgICAgICAgU3RyaW5nIG1fa2V5OwogICAg
ICAgICBTdHJpbmcgbV9vbGRWYWx1ZTsKICAgICAgICAgU3RyaW5nIG1fbmV3VmFsdWU7CkluZGV4
OiBXZWJDb3JlL3N2Zy9TVkdBbmdsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZH
QW5nbGUuY3BwCShyZXZpc2lvbiAzNDQzOCkKKysrIFdlYkNvcmUvc3ZnL1NWR0FuZ2xlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMiw4ICsyLDYgQEAKICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDUsIDIwMDcsIDIwMDggTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAg
ICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+
CiAKLSAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKLQogICAgIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
ICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwogICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgpAQCAtMjEsMTggKzE5LDE2IEBACiAqLwogCiAjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiU1ZHQW5nbGUuaCIKIAogI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVk
ZSAiU1ZHQW5nbGUuaCIKIAotI2luY2x1ZGUgPG1hdGguaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4
dHJhcy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFNWR0FuZ2xlOjpTVkdBbmdsZSgpCi0g
ICAgOiBSZWZDb3VudGVkPFNWR0FuZ2xlPigwKQotICAgICwgbV91bml0VHlwZShTVkdfQU5HTEVU
WVBFX1VOS05PV04pCisgICAgOiBtX3VuaXRUeXBlKFNWR19BTkdMRVRZUEVfVU5LTk9XTikKICAg
ICAsIG1fdmFsdWUoMCkKICAgICAsIG1fdmFsdWVJblNwZWNpZmllZFVuaXRzKDApCiB7CkBAIC0x
NDksMjcgKzE0NSw2IEBAIHZvaWQgU1ZHQW5nbGU6OmNvbnZlcnRUb1NwZWNpZmllZFVuaXRzKHUK
ICAgICBtX3VuaXRUeXBlID0gKFNWR0FuZ2xlVHlwZSl1bml0VHlwZTsKIH0KIAotLy8gSGVscGVy
cwotZG91YmxlIFNWR0FuZ2xlOjp0b2RlZyhkb3VibGUgcmFkKQotewotICAgIHJldHVybiByYWQy
ZGVnKHJhZCk7Ci19Ci0KLWRvdWJsZSBTVkdBbmdsZTo6dG9yYWQoZG91YmxlIGRlZykKLXsKLSAg
ICByZXR1cm4gZGVnMnJhZChkZWcpOwotfQotCi1kb3VibGUgU1ZHQW5nbGU6OnNob3J0ZXN0QXJj
QmlzZWN0b3IoZG91YmxlIGFuZ2xlMSwgZG91YmxlIGFuZ2xlMikKLXsKLSAgICBkb3VibGUgYmlz
ZWN0b3IgPSAoYW5nbGUxICsgYW5nbGUyKSAvIDI7Ci0KLSAgICBpZiAoZmFicyhhbmdsZTEgLSBh
bmdsZTIpID4gMTgwKQotICAgICAgICBiaXNlY3RvciArPSAxODA7Ci0KLSAgICByZXR1cm4gYmlz
ZWN0b3I7Ci19Ci0KIH0KIAogI2VuZGlmIC8vIEVOQUJMRShTVkcpCkluZGV4OiBXZWJDb3JlL3N2
Zy9TVkdBbmdsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0FuZ2xlLmgJKHJldmlz
aW9uIDM0NDM4KQorKysgV2ViQ29yZS9zdmcvU1ZHQW5nbGUuaAkod29ya2luZyBjb3B5KQpAQCAt
Miw4ICsyLDYgQEAKICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDcsIDIwMDggTmlr
b2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgICAgICAgICAgICAgICAgICAy
MDA0LCAyMDA1LCAyMDA2IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAKLSAgICBUaGlzIGZpbGUg
aXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKLQogICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAgICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwogICAgIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgpA
QCAtMzMsNyArMzEsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgU1ZHQW5n
bGUgOiBwdWJsaWMgUmVmQ291bnRlZDxTVkdBbmdsZT4gewogICAgIHB1YmxpYzoKLSAgICAgICAg
U1ZHQW5nbGUoKTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U1ZHQW5nbGU+IGNyZWF0ZSgp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU1ZHQW5nbGUpOwor
ICAgICAgICB9CiAgICAgICAgIHZpcnR1YWwgflNWR0FuZ2xlKCk7CiAgICAgICAgIAogICAgICAg
ICBlbnVtIFNWR0FuZ2xlVHlwZSB7CkBAIC01OCwxNyArNTksMTIgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICB2b2lkIG5ld1ZhbHVlU3BlY2lmaWVkVW5pdHModW5zaWduZWQgc2hvcnQg
dW5pdFR5cGUsIGZsb2F0IHZhbHVlSW5TcGVjaWZpZWRVbml0cyk7CiAgICAgICAgIHZvaWQgY29u
dmVydFRvU3BlY2lmaWVkVW5pdHModW5zaWduZWQgc2hvcnQgdW5pdFR5cGUpOwogCi0gICAgICAg
IC8vIEhlbHBlcnMKLSAgICAgICAgc3RhdGljIGRvdWJsZSB0b2RlZyhkb3VibGUgcmFkKTsKLSAg
ICAgICAgc3RhdGljIGRvdWJsZSB0b3JhZChkb3VibGUgZGVnKTsKLQotICAgICAgICAvLyBSZXR1
cm5zIHRoZSBhbmdsZSB0aGF0IGRpdmlkZXMgdGhlIHNob3J0ZXN0IGFyYyBiZXR3ZWVuIHRoZSB0
d28gYW5nbGVzLgotICAgICAgICBzdGF0aWMgZG91YmxlIHNob3J0ZXN0QXJjQmlzZWN0b3IoZG91
YmxlIGFuZ2xlMSwgZG91YmxlIGFuZ2xlMik7Ci0KICAgICAgICAgLy8gVGhyb3VnaG91dCBTVkcg
MS4xICdTVkdBbmdsZScgaXMgb25seSB1c2VkIGZvciAnU1ZHTWFya2VyRWxlbWVudCcgKG9yaWVu
dC1hbmdsZSkKICAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXNzb2NpYXRlZEF0dHJpYnV0
ZU5hbWUoKSBjb25zdCB7IHJldHVybiBTVkdOYW1lczo6b3JpZW50QXR0cjsgfQogCiAgICAgcHJp
dmF0ZToKKyAgICAgICAgU1ZHQW5nbGUoKTsKKwogICAgICAgICBTVkdBbmdsZVR5cGUgbV91bml0
VHlwZTsKICAgICAgICAgZmxvYXQgbV92YWx1ZTsKICAgICAgICAgZmxvYXQgbV92YWx1ZUluU3Bl
Y2lmaWVkVW5pdHM7CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdBbmltYXRlZFRlbXBsYXRlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRUZW1wbGF0ZS5oCShyZXZpc2lvbiAz
NDQzOCkKKysrIFdlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkVGVtcGxhdGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMiw4ICsyLDYgQEAKICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIw
MDcsIDIwMDggTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgICAgICAg
ICAgICAgICAgICAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAKLSAgICBUaGlz
IGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKLQogICAgIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAgICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwogICAg
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgpAQCAtMTA1LDEyICsxMDMsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgQmFyZVR5cGU+CiAgICAgY2xhc3MgU1ZHQW5pbWF0ZWRUZW1wbGF0ZSA6IHB1
YmxpYyBSZWZDb3VudGVkPFNWR0FuaW1hdGVkVGVtcGxhdGU8QmFyZVR5cGU+ID4gewogICAgIHB1
YmxpYzoKLSAgICAgICAgU1ZHQW5pbWF0ZWRUZW1wbGF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBh
dHRyaWJ1dGVOYW1lKQotICAgICAgICAgICAgOiBSZWZDb3VudGVkPFNWR0FuaW1hdGVkVGVtcGxh
dGU8QmFyZVR5cGU+ID4oMCkKLSAgICAgICAgICAgICwgbV9hc3NvY2lhdGVkQXR0cmlidXRlTmFt
ZShhdHRyaWJ1dGVOYW1lKQotICAgICAgICB7Ci0gICAgICAgIH0KLQogICAgICAgICB2aXJ0dWFs
IH5TVkdBbmltYXRlZFRlbXBsYXRlKCkgeyBmb3JnZXRXcmFwcGVyKHRoaXMpOyB9CiAKICAgICAg
ICAgdmlydHVhbCBCYXJlVHlwZSBiYXNlVmFsKCkgY29uc3QgPSAwOwpAQCAtMTQzLDIyICsxMzUs
MjkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYg
YXNzb2NpYXRlZEF0dHJpYnV0ZU5hbWUoKSBjb25zdCB7IHJldHVybiBtX2Fzc29jaWF0ZWRBdHRy
aWJ1dGVOYW1lOyB9CiAKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIFNWR0FuaW1hdGVkVGVtcGxh
dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSkKKyAgICAgICAgICAgIDogbV9h
c3NvY2lhdGVkQXR0cmlidXRlTmFtZShhdHRyaWJ1dGVOYW1lKQorICAgICAgICB7CisgICAgICAg
IH0KKwogICAgIHByaXZhdGU6CiAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgbV9hc3NvY2lh
dGVkQXR0cmlidXRlTmFtZTsKICAgICB9OwogCiAgICAgdGVtcGxhdGUgPGNsYXNzIFR5cGUsIGNs
YXNzIFNWR0VsZW1lbnRTdWJDbGFzcz4KLSAgICBUeXBlKiBsb29rdXBPckNyZWF0ZVdyYXBwZXIo
Y29uc3QgU1ZHRWxlbWVudFN1YkNsYXNzKiBlbGVtZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJiBk
b21BdHRyTmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRySWRlbnRpZmllcikgeworICAgIFBh
c3NSZWZQdHI8VHlwZT4gbG9va3VwT3JDcmVhdGVXcmFwcGVyKGNvbnN0IFNWR0VsZW1lbnRTdWJD
bGFzcyogZWxlbWVudCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgZG9tQXR0ck5hbWUsIGNvbnN0IEF0
b21pY1N0cmluZyYgYXR0cklkZW50aWZpZXIpCisgICAgewogICAgICAgICBTVkdBbmltYXRlZFR5
cGVXcmFwcGVyS2V5IGtleShlbGVtZW50LCBhdHRySWRlbnRpZmllcik7Ci0gICAgICAgIFR5cGUq
IHdyYXBwZXIgPSBzdGF0aWNfY2FzdDxUeXBlKj4oVHlwZTo6d3JhcHBlckNhY2hlKCktPmdldChr
ZXkpKTsKKyAgICAgICAgUmVmUHRyPFR5cGU+IHdyYXBwZXIgPSBzdGF0aWNfY2FzdDxUeXBlKj4o
VHlwZTo6d3JhcHBlckNhY2hlKCktPmdldChrZXkpKTsKICAgICAgICAgaWYgKCF3cmFwcGVyKSB7
Ci0gICAgICAgICAgICB3cmFwcGVyID0gbmV3IFR5cGUoZWxlbWVudCwgZG9tQXR0ck5hbWUpOwot
ICAgICAgICAgICAgVHlwZTo6d3JhcHBlckNhY2hlKCktPnNldChrZXksIHdyYXBwZXIpOworICAg
ICAgICAgICAgd3JhcHBlciA9IFR5cGU6OmNyZWF0ZShlbGVtZW50LCBkb21BdHRyTmFtZSk7Cisg
ICAgICAgICAgICBUeXBlOjp3cmFwcGVyQ2FjaGUoKS0+c2V0KGtleSwgd3JhcHBlci5nZXQoKSk7
CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHdyYXBwZXI7CisgICAgICAgIHJldHVybiB3cmFw
cGVyLnJlbGVhc2UoKTsKICAgICB9CiAKLSAgICAvLyBDb21tb24gdHlwZSBkZWZpbml0aW9ucywg
dG8gZWFzZSBJREwgZ2VuZXJhdGlvbi4uLgorICAgIC8vIENvbW1vbiB0eXBlIGRlZmluaXRpb25z
LCB0byBlYXNlIElETCBnZW5lcmF0aW9uLgogICAgIHR5cGVkZWYgU1ZHQW5pbWF0ZWRUZW1wbGF0
ZTxTVkdBbmdsZSo+IFNWR0FuaW1hdGVkQW5nbGU7CiAgICAgdHlwZWRlZiBTVkdBbmltYXRlZFRl
bXBsYXRlPGJvb2w+IFNWR0FuaW1hdGVkQm9vbGVhbjsKICAgICB0eXBlZGVmIFNWR0FuaW1hdGVk
VGVtcGxhdGU8aW50PiBTVkdBbmltYXRlZEVudW1lcmF0aW9uOwpJbmRleDogV2ViQ29yZS9zdmcv
U1ZHRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAJ
KHJldmlzaW9uIDM0NDM4KQorKysgV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIsOCArMiw2IEBACiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2
LCAyMDA3IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgogICAgICAgICAg
ICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOCBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgog
Ci0gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0Ci0KICAgICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAg
ICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKICAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKQEAgLTE4NCw3ICsxODIsNyBAQCB2b2lkIFNWR0VsZW1lbnQ6OnNlbmRT
VkdMb2FkRXZlbnRJZlBvc3NpCiAgICAgICAgIGlmIChzZW5kUGFyZW50TG9hZEV2ZW50cykKICAg
ICAgICAgICAgIHBhcmVudCA9IGN1cnJlbnRUYXJnZXQtPnBhcmVudE5vZGUoKTsgLy8gc2F2ZSB0
aGUgbmV4dCBwYXJlbnQgdG8gZGlzcGF0Y2ggdG9vIGluY2FzZSBkaXNwYXRjaGluZyB0aGUgZXZl
bnQgY2hhbmdlcyB0aGUgdHJlZQogICAgICAgICBpZiAoaGFzTG9hZExpc3RlbmVyKGN1cnJlbnRU
YXJnZXQuZ2V0KCkpKSB7Ci0gICAgICAgICAgICBSZWZQdHI8RXZlbnQ+IGV2ZW50ID0gbmV3IEV2
ZW50KGxvYWRFdmVudCwgZmFsc2UsIGZhbHNlKTsKKyAgICAgICAgICAgIFJlZlB0cjxFdmVudD4g
ZXZlbnQgPSBFdmVudDo6Y3JlYXRlKGxvYWRFdmVudCwgZmFsc2UsIGZhbHNlKTsKICAgICAgICAg
ICAgIGV2ZW50LT5zZXRUYXJnZXQoY3VycmVudFRhcmdldCk7CiAgICAgICAgICAgICBFeGNlcHRp
b25Db2RlIGlnbm9yZWQgPSAwOwogICAgICAgICAgICAgZGlzcGF0Y2hHZW5lcmljRXZlbnQoY3Vy
cmVudFRhcmdldC5nZXQoKSwgZXZlbnQucmVsZWFzZSgpLCBpZ25vcmVkLCBmYWxzZSk7CkluZGV4
OiBXZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZH
RWxlbWVudC5oCShyZXZpc2lvbiAzNDQzOCkKKysrIFdlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuaAko
d29ya2luZyBjb3B5KQpAQCAtNTAsMTggKzUwLDE5IEBAIHB1YmxpYzogXAogICAgIHZpcnR1YWwg
dm9pZCBzdG9wIyNVcHBlclByb3BlcnR5KCkgeyBGb3J3YXJkQ2xhc3M6OnN0b3AjI1VwcGVyUHJv
cGVydHkoKTsgfQogCiAjZGVmaW5lIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OU19JTlRF
Uk5BTChDbGFzc1R5cGUsIENsYXNzU3RvcmFnZVR5cGUsIEJhcmVUeXBlLCBTdG9yYWdlVHlwZSwg
VXBwZXJQcm9wZXJ0eSwgTG93ZXJQcm9wZXJ0eSkgXAotY2xhc3MgU1ZHQW5pbWF0ZWRUZW1wbGF0
ZSMjVXBwZXJQcm9wZXJ0eSBcCi06IHB1YmxpYyBTVkdBbmltYXRlZFRlbXBsYXRlPEJhcmVUeXBl
PiBcCi17IFwKK2NsYXNzIFNWR0FuaW1hdGVkVGVtcGxhdGUjI1VwcGVyUHJvcGVydHkgOiBwdWJs
aWMgU1ZHQW5pbWF0ZWRUZW1wbGF0ZTxCYXJlVHlwZT4geyBcCiBwdWJsaWM6IFwKLSAgICBTVkdB
bmltYXRlZFRlbXBsYXRlIyNVcHBlclByb3BlcnR5KGNvbnN0IENsYXNzVHlwZSosIGNvbnN0IFF1
YWxpZmllZE5hbWUmKTsgXAotICAgIHZpcnR1YWwgflNWR0FuaW1hdGVkVGVtcGxhdGUjI1VwcGVy
UHJvcGVydHkoKSB7IH0gXAorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNWR0FuaW1hdGVkVGVtcGxh
dGUjI1VwcGVyUHJvcGVydHk+IGNyZWF0ZShjb25zdCBDbGFzc1R5cGUqIGVsZW1lbnQsIGNvbnN0
IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUpIFwKKyAgICB7IFwKKyAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBTVkdBbmltYXRlZFRlbXBsYXRlIyNVcHBlclByb3BlcnR5KGVsZW1lbnQs
IGF0dHJpYnV0ZU5hbWUpKTsgXAorICAgIH0gXAogICAgIHZpcnR1YWwgQmFyZVR5cGUgYmFzZVZh
bCgpIGNvbnN0OyBcCiAgICAgdmlydHVhbCB2b2lkIHNldEJhc2VWYWwoQmFyZVR5cGUpOyBcCiAg
ICAgdmlydHVhbCBCYXJlVHlwZSBhbmltVmFsKCkgY29uc3Q7IFwKICAgICB2aXJ0dWFsIHZvaWQg
c2V0QW5pbVZhbChCYXJlVHlwZSk7IFwKICAgICBcCi1wcm90ZWN0ZWQ6IFwKK3ByaXZhdGU6IFwK
KyAgICBTVkdBbmltYXRlZFRlbXBsYXRlIyNVcHBlclByb3BlcnR5KGNvbnN0IENsYXNzVHlwZSos
IGNvbnN0IFF1YWxpZmllZE5hbWUmKTsgXAogICAgIENsYXNzU3RvcmFnZVR5cGUgbV9lbGVtZW50
OyBcCiB9OyBcCiBwdWJsaWM6IFwKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR01hcmtlckVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR01hcmtlckVsZW1lbnQuY3BwCShyZXZp
c2lvbiAzNDQzOCkKKysrIFdlYkNvcmUvc3ZnL1NWR01hcmtlckVsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yLDggKzIsNiBAQAogICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAw
NiwgMjAwNywgMjAwOCBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KICAg
ICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgUm9iIEJ1aXMgPGJ1aXNAa2Rl
Lm9yZz4KIAotICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAotCiAgICAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCiAgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCkBAIC00Nyw3ICs0NSw3IEBAIFNWR01hcmtlckVsZW1lbnQ6
OlNWR01hcmtlckVsZW1lbnQoY29uc3QKICAgICAsIG1fbWFya2VySGVpZ2h0KHRoaXMsIExlbmd0
aE1vZGVIZWlnaHQpIAogICAgICwgbV9tYXJrZXJVbml0cyhTVkdfTUFSS0VSVU5JVFNfU1RST0tF
V0lEVEgpCiAgICAgLCBtX29yaWVudFR5cGUoMCkKLSAgICAsIG1fb3JpZW50QW5nbGUobmV3IFNW
R0FuZ2xlKCkpCisgICAgLCBtX29yaWVudEFuZ2xlKFNWR0FuZ2xlOjpjcmVhdGUoKSkKIHsKICAg
ICAvLyBTcGVjOiBJZiB0aGUgYXR0cmlidXRlIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBlZmZlY3Qg
aXMgYXMgaWYgYSB2YWx1ZSBvZiAiMyIgd2VyZSBzcGVjaWZpZWQuCiAgICAgc2V0TWFya2VyV2lk
dGhCYXNlVmFsdWUoU1ZHTGVuZ3RoKHRoaXMsIExlbmd0aE1vZGVXaWR0aCwgIjMiKSk7CkBAIC04
Myw5ICs4MSw5IEBAIHZvaWQgU1ZHTWFya2VyRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWIKICAg
ICAgICAgaWYgKGF0dHItPnZhbHVlKCkgPT0gImF1dG8iKQogICAgICAgICAgICAgc2V0T3JpZW50
VG9BdXRvKCk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgU1ZHQW5nbGUqIGFuZ2xlID0g
bmV3IFNWR0FuZ2xlKCk7CisgICAgICAgICAgICBSZWZQdHI8U1ZHQW5nbGU+IGFuZ2xlID0gU1ZH
QW5nbGU6OmNyZWF0ZSgpOwogICAgICAgICAgICAgYW5nbGUtPnNldFZhbHVlQXNTdHJpbmcoYXR0
ci0+dmFsdWUoKSk7Ci0gICAgICAgICAgICBzZXRPcmllbnRUb0FuZ2xlKGFuZ2xlKTsKKyAgICAg
ICAgICAgIHNldE9yaWVudFRvQW5nbGUoYW5nbGUucmVsZWFzZSgpKTsKICAgICAgICAgfQogICAg
IH0gZWxzZSB7CiAgICAgICAgIGlmIChTVkdMYW5nU3BhY2U6OnBhcnNlTWFwcGVkQXR0cmlidXRl
KGF0dHIpKQpAQCAtMTM2LDEwICsxMzQsMTAgQEAgdm9pZCBTVkdNYXJrZXJFbGVtZW50OjpzZXRP
cmllbnRUb0F1dG8oKQogICAgIHNldE9yaWVudFR5cGVCYXNlVmFsdWUoU1ZHX01BUktFUl9PUklF
TlRfQVVUTyk7CiB9CiAKLXZvaWQgU1ZHTWFya2VyRWxlbWVudDo6c2V0T3JpZW50VG9BbmdsZShT
VkdBbmdsZSogYW5nbGUpCit2b2lkIFNWR01hcmtlckVsZW1lbnQ6OnNldE9yaWVudFRvQW5nbGUo
UGFzc1JlZlB0cjxTVkdBbmdsZT4gYW5nbGUpCiB7CiAgICAgc2V0T3JpZW50VHlwZUJhc2VWYWx1
ZShTVkdfTUFSS0VSX09SSUVOVF9BTkdMRSk7Ci0gICAgc2V0T3JpZW50QW5nbGVCYXNlVmFsdWUo
YW5nbGUpOworICAgIHNldE9yaWVudEFuZ2xlQmFzZVZhbHVlKGFuZ2xlLmdldCgpKTsKIH0KIAog
U1ZHUmVzb3VyY2UqIFNWR01hcmtlckVsZW1lbnQ6OmNhbnZhc1Jlc291cmNlKCkKSW5kZXg6IFdl
YkNvcmUvc3ZnL1NWR01hcmtlckVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9T
VkdNYXJrZXJFbGVtZW50LmgJKHJldmlzaW9uIDM0NDM4KQorKysgV2ViQ29yZS9zdmcvU1ZHTWFy
a2VyRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yLDggKzIsNiBAQAogICAgIENvcHlyaWdo
dCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBOaWtvbGFzIFppbW1lcm1hbm4gPHpp
bW1lcm1hbm5Aa2RlLm9yZz4KICAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUsIDIwMDYgUm9i
IEJ1aXMgPGJ1aXNAa2RlLm9yZz4KIAotICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUg
cHJvamVjdAotCiAgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCiAgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCkBAIC0yNCwxMCArMjIsMTIgQEAK
ICNkZWZpbmUgU1ZHTWFya2VyRWxlbWVudF9oCiAKICNpZiBFTkFCTEUoU1ZHKQotI2luY2x1ZGUg
IlNWR1Jlc291cmNlTWFya2VyLmgiCisKKyNpbmNsdWRlICJTVkdBbmdsZS5oIgogI2luY2x1ZGUg
IlNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQuaCIKICNpbmNsdWRlICJTVkdGaXRUb1ZpZXdC
b3guaCIKICNpbmNsdWRlICJTVkdMYW5nU3BhY2UuaCIKKyNpbmNsdWRlICJTVkdSZXNvdXJjZU1h
cmtlci5oIgogI2luY2x1ZGUgIlNWR1N0eWxlZEVsZW1lbnQuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewpAQCAtNTYsNyArNTYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1
YWwgflNWR01hcmtlckVsZW1lbnQoKTsKIAogICAgICAgICB2b2lkIHNldE9yaWVudFRvQXV0bygp
OwotICAgICAgICB2b2lkIHNldE9yaWVudFRvQW5nbGUoU1ZHQW5nbGUqKTsKKyAgICAgICAgdm9p
ZCBzZXRPcmllbnRUb0FuZ2xlKFBhc3NSZWZQdHI8U1ZHQW5nbGU+KTsKIAogICAgICAgICB2aXJ0
dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKik7CiAgICAgICAg
IHZpcnR1YWwgdm9pZCBzdmdBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKTsK
QEAgLTg3LDQgKzg3LDUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFNWRykKKwogI2VuZGlmCkluZGV4OiBXZWJDb3JlL3N2
Zy9TVkdTVkdFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdTVkdFbGVt
ZW50LmNwcAkocmV2aXNpb24gMzQ0MzgpCisrKyBXZWJDb3JlL3N2Zy9TVkdTVkdFbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMyw4ICszLDYgQEAKICAgICAgICAgICAgICAgICAgIDIwMDQs
IDIwMDUsIDIwMDYsIDIwMDcgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAgICAgICAgICAgICAg
ICAgIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KIAotICAgIFRoaXMgZmls
ZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAotCiAgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICAgIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCiAgICAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CkBAIC0zNTUsOSArMzUzLDkgQEAgU1ZHTGVuZ3RoIFNWR1NWR0VsZW1lbnQ6OmNyZWF0ZVNWR0xl
bmd0aAogICAgIHJldHVybiBTVkdMZW5ndGgoKTsKIH0KIAotU1ZHQW5nbGUqIFNWR1NWR0VsZW1l
bnQ6OmNyZWF0ZVNWR0FuZ2xlKCkKK1Bhc3NSZWZQdHI8U1ZHQW5nbGU+IFNWR1NWR0VsZW1lbnQ6
OmNyZWF0ZVNWR0FuZ2xlKCkKIHsKLSAgICByZXR1cm4gbmV3IFNWR0FuZ2xlKCk7CisgICAgcmV0
dXJuIFNWR0FuZ2xlOjpjcmVhdGUoKTsKIH0KIAogRmxvYXRQb2ludCBTVkdTVkdFbGVtZW50Ojpj
cmVhdGVTVkdQb2ludCgpCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdTVkdFbGVtZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHU1ZHRWxlbWVudC5oCShyZXZpc2lvbiAzNDQzOCkKKysr
IFdlYkNvcmUvc3ZnL1NWR1NWR0VsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTA5LDcgKzEw
OSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlCiAKICAgICAgICAgc3RhdGljIGZsb2F0IGNyZWF0ZVNW
R051bWJlcigpOwogICAgICAgICBzdGF0aWMgU1ZHTGVuZ3RoIGNyZWF0ZVNWR0xlbmd0aCgpOwot
ICAgICAgICBzdGF0aWMgU1ZHQW5nbGUqIGNyZWF0ZVNWR0FuZ2xlKCk7CisgICAgICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFNWR0FuZ2xlPiBjcmVhdGVTVkdBbmdsZSgpOwogICAgICAgICBzdGF0aWMg
RmxvYXRQb2ludCBjcmVhdGVTVkdQb2ludCgpOwogICAgICAgICBzdGF0aWMgQWZmaW5lVHJhbnNm
b3JtIGNyZWF0ZVNWR01hdHJpeCgpOwogICAgICAgICBzdGF0aWMgRmxvYXRSZWN0IGNyZWF0ZVNW
R1JlY3QoKTsKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1pvb21FdmVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvc3ZnL1NWR1pvb21FdmVudC5oCShyZXZpc2lvbiAzNDQzOCkKKysrIFdlYkNvcmUv
c3ZnL1NWR1pvb21FdmVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zLDggKzMsNiBAQAogICAgIENv
cHlyaWdodCAoQykgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICAgIENvcHly
aWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIChzYW0ud2VpbmlnQGdtYWlsLmNvbSkKICAgICAg
ICAgICAgICAgICAgIAotICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAot
CiAgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCiAgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCkBAIC0zMiw3ICszMCw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogICAgIGNsYXNzIFNWR1pvb21FdmVudCA6IHB1YmxpYyBVSUV2ZW50IHsKICAg
ICBwdWJsaWM6Ci0gICAgICAgIFNWR1pvb21FdmVudCgpOworICAgICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxTVkdab29tRXZlbnQ+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBTVkdab29t
RXZlbnQpOyB9CiAgICAgICAgIHZpcnR1YWwgflNWR1pvb21FdmVudCgpOwogCiAgICAgICAgIC8v
ICdTVkdab29tRXZlbnQnIGZ1bmN0aW9ucwpAQCAtNTEsNiArNDksOCBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc1NWR1pvb21FdmVudCgpIGNvbnN0OwogCiAg
ICAgcHJpdmF0ZToKKyAgICAgICAgU1ZHWm9vbUV2ZW50KCk7CisKICAgICAgICAgZmxvYXQgbV9u
ZXdTY2FsZTsKICAgICAgICAgZmxvYXQgbV9wcmV2aW91c1NjYWxlOwogICAgICAgICAKSW5kZXg6
IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAJKHJldmlzaW9uIDM0NDM4KQorKysgV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw2IEBA
CiAKICNpbmNsdWRlICJDYWNoZWRQYWdlLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIK
LSNpbmNsdWRlICJFZGl0Q29tbWFuZC5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1
ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKSW5kZXg6IFdlYkNvcmUveG1s
L1hNTEh0dHBSZXF1ZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3htbC9YTUxIdHRwUmVx
dWVzdC5jcHAJKHJldmlzaW9uIDM0NDM4KQorKysgV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTMsNyArMjkzLDcgQEAgdm9pZCBYTUxIdHRwUmVxdWVz
dDo6Y2FsbFJlYWR5U3RhdGVDaGFuZwogICAgIGlmICghbV9kb2MgfHwgIW1fZG9jLT5mcmFtZSgp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQdHI8RXZlbnQ+IGV2dCA9IG5ldyBFdmVudChy
ZWFkeXN0YXRlY2hhbmdlRXZlbnQsIGZhbHNlLCBmYWxzZSk7CisgICAgUmVmUHRyPEV2ZW50PiBl
dnQgPSBFdmVudDo6Y3JlYXRlKHJlYWR5c3RhdGVjaGFuZ2VFdmVudCwgZmFsc2UsIGZhbHNlKTsK
ICAgICBpZiAobV9vblJlYWR5U3RhdGVDaGFuZ2VMaXN0ZW5lcikgewogICAgICAgICBldnQtPnNl
dFRhcmdldCh0aGlzKTsKICAgICAgICAgZXZ0LT5zZXRDdXJyZW50VGFyZ2V0KHRoaXMpOwpAQCAt
MzA1LDcgKzMwNSw3IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OmNhbGxSZWFkeVN0YXRlQ2hhbmcK
ICAgICBBU1NFUlQoIWVjKTsKICAgICAKICAgICBpZiAobV9zdGF0ZSA9PSBET05FKSB7Ci0gICAg
ICAgIGV2dCA9IG5ldyBFdmVudChsb2FkRXZlbnQsIGZhbHNlLCBmYWxzZSk7CisgICAgICAgIGV2
dCA9IEV2ZW50OjpjcmVhdGUobG9hZEV2ZW50LCBmYWxzZSwgZmFsc2UpOwogICAgICAgICBpZiAo
bV9vbkxvYWRMaXN0ZW5lcikgewogICAgICAgICAgICAgZXZ0LT5zZXRUYXJnZXQodGhpcyk7CiAg
ICAgICAgICAgICBldnQtPnNldEN1cnJlbnRUYXJnZXQodGhpcyk7CkBAIC05NzksMTAgKzk3OSwx
MCBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0Ojp1cGRhdGVBbmREaXNwYXRjaE9uCiAKIHZvaWQgWE1M
SHR0cFJlcXVlc3Q6OmRpc3BhdGNoUHJvZ3Jlc3NFdmVudChsb25nIGxvbmcgZXhwZWN0ZWRMZW5n
dGgpCiB7Ci0gICAgUmVmUHRyPFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudD4gZXZ0OwotCiAg
ICAgLy8gSWYgd2UgZG8gbm90IGhhdmUgdGhlIGluZm9ybWF0aW9uIG9yIGl0IGlzIG9kZCwgc2V0
IGxlbmd0aENvbXB1dGFibGUgdG8gZmFsc2UuCi0gICAgZXZ0ID0gbmV3IFhNTEh0dHBSZXF1ZXN0
UHJvZ3Jlc3NFdmVudChwcm9ncmVzc0V2ZW50LCBleHBlY3RlZExlbmd0aCAmJiBtX3JlY2VpdmVk
TGVuZ3RoIDw9IGV4cGVjdGVkTGVuZ3RoLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9yZWNlaXZl
ZExlbmd0aCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihleHBlY3RlZExlbmd0aCkpOworICAgIFJl
ZlB0cjxYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQ+IGV2dCA9IFhNTEh0dHBSZXF1ZXN0UHJv
Z3Jlc3NFdmVudDo6Y3JlYXRlKHByb2dyZXNzRXZlbnQsCisgICAgICAgIGV4cGVjdGVkTGVuZ3Ro
ICYmIG1fcmVjZWl2ZWRMZW5ndGggPD0gZXhwZWN0ZWRMZW5ndGgsCisgICAgICAgIHN0YXRpY19j
YXN0PHVuc2lnbmVkPihtX3JlY2VpdmVkTGVuZ3RoKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGV4
cGVjdGVkTGVuZ3RoKSk7CiAKICAgICBpZiAobV9vblByb2dyZXNzTGlzdGVuZXIpIHsKICAgICAg
ICAgZXZ0LT5zZXRUYXJnZXQodGhpcyk7CkluZGV4OiBXZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVz
dFByb2dyZXNzRXZlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveG1sL1hNTEh0dHBSZXF1
ZXN0UHJvZ3Jlc3NFdmVudC5jcHAJKHJldmlzaW9uIDM0NDM4KQorKysgV2ViQ29yZS94bWwvWE1M
SHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1MiArMSBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggSnVsaWVuIENoYWZmcmFpeCA8amNoYWZmcmFpeEB3
ZWJraXQub3JnPi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50LmgiCi0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50OjpYTUxIdHRwUmVxdWVz
dFByb2dyZXNzRXZlbnQoKQotICAgIDogUHJvZ3Jlc3NFdmVudCgpCi17Ci19Ci0KLVhNTEh0dHBS
ZXF1ZXN0UHJvZ3Jlc3NFdmVudDo6WE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50KGNvbnN0IEF0
b21pY1N0cmluZyYgdHlwZSwgYm9vbCBsZW5ndGhDb21wdXRhYmxlLCB1bnNpZ25lZCBsb2FkZWQs
IHVuc2lnbmVkIHRvdGFsKQotICAgIDogUHJvZ3Jlc3NFdmVudCh0eXBlLCBsZW5ndGhDb21wdXRh
YmxlLCBsb2FkZWQsIHRvdGFsKQotewotfQotCi11bnNpZ25lZCBYTUxIdHRwUmVxdWVzdFByb2dy
ZXNzRXZlbnQ6OnBvc2l0aW9uKCkKLXsKLSAgICByZXR1cm4gbV9sb2FkZWQ7Ci19Ci0KLXVuc2ln
bmVkIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudDo6dG90YWxTaXplKCkKLXsKLSAgICByZXR1
cm4gbV90b3RhbDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorLyogSW50ZW50aW9uYWxs
eSBsZWZ0IGJsYW5rLiBUbyBiZSBkZWxldGVkLiAqLwpJbmRleDogV2ViQ29yZS94bWwvWE1MSHR0
cFJlcXVlc3RQcm9ncmVzc0V2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94bWwvWE1MSHR0
cFJlcXVlc3RQcm9ncmVzc0V2ZW50LmgJKHJldmlzaW9uIDM0NDM4KQorKysgV2ViQ29yZS94bWwv
WE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDE0ICsz
MywyNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBYTUxIdHRwUmVxdWVzdFBy
b2dyZXNzRXZlbnQgOiBwdWJsaWMgUHJvZ3Jlc3NFdmVudCB7CiAgICAgcHVibGljOgotICAgICAg
ICBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBi
b29sIGxlbmd0aENvbXB1dGFibGUsIHVuc2lnbmVkIGxvYWRlZCwgdW5zaWduZWQgdG90YWwpOwot
ICAgICAgICBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQoKTsKKyAgICAgICAgc3RhdGljIFBh
c3NSZWZQdHI8WE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50PiBjcmVhdGUoKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NF
dmVudCk7CisgICAgICAgIH0KKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8WE1MSHR0cFJlcXVl
c3RQcm9ncmVzc0V2ZW50PiBjcmVhdGUoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBib29sIGxl
bmd0aENvbXB1dGFibGUsIHVuc2lnbmVkIGxvYWRlZCwgdW5zaWduZWQgdG90YWwpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgWE1MSHR0cFJlcXVlc3RQcm9ncmVz
c0V2ZW50KHR5cGUsIGxlbmd0aENvbXB1dGFibGUsIGxvYWRlZCwgdG90YWwpKTsKKyAgICAgICAg
fQogCiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudCgp
IGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAogICAgICAgICAvLyBUaG9zZSAyIG1ldGhvZHMgYXJl
IHRvIGJlIGNvbXBhdGlibGUgd2l0aCBGaXJlZm94IGFuZCBhcmUgb25seSBhIHdyYXBwZXIgb24g
dG9wIG9mIHRoZSByZWFsIGltcGxlbWVudGF0aW9uLgotICAgICAgICB1bnNpZ25lZCBwb3NpdGlv
bigpOwotICAgICAgICB1bnNpZ25lZCB0b3RhbFNpemUoKTsKKyAgICAgICAgdW5zaWduZWQgcG9z
aXRpb24oKSBjb25zdCB7IHJldHVybiBsb2FkZWQoKTsgfQorICAgICAgICB1bnNpZ25lZCB0b3Rh
bFNpemUoKSBjb25zdCB7IHJldHVybiB0b3RhbCgpOyB9CisKKyAgICBwcml2YXRlOgorICAgICAg
ICBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQoKSB7IH0KKyAgICAgICAgWE1MSHR0cFJlcXVl
c3RQcm9ncmVzc0V2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgYm9vbCBsZW5ndGhDb21w
dXRhYmxlLCB1bnNpZ25lZCBsb2FkZWQsIHVuc2lnbmVkIHRvdGFsKQorICAgICAgICAgICAgOiBQ
cm9ncmVzc0V2ZW50KHR5cGUsIGxlbmd0aENvbXB1dGFibGUsIGxvYWRlZCwgdG90YWwpCisgICAg
ICAgIHsKKyAgICAgICAgfQogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFdlYktpdC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzNDQzOCkKKysrIFdlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMTUgQEAKKzIwMDgtMDYtMDggIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0g
bW9yZSB3b3JrIG9uIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzI1
NworICAgICAgICAgIHN0YXJ0IHJlZiBjb3VudHMgYXQgMSBpbnN0ZWFkIG9mIDAgZm9yIHNwZWVk
CisKKyAgICAgICAgKiBXZWJWaWV3L1dlYkZyYW1lLm1tOgorICAgICAgICAoLVtXZWJGcmFtZSBf
cmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVudDpzZWxlY3RSZXBsYWNlbWVudDpzbWFydFJlcGxh
Y2U6bWF0Y2hTdHlsZTpdKToKKyAgICAgICAgKiBXZWJWaWV3L1dlYlBERlZpZXcubW06CisgICAg
ICAgICgtW1dlYlBERlZpZXcgUERGVmlld1dpbGxDbGlja09uTGluazp3aXRoVVJMOl0pOgorCiAy
MDA4LTA2LTA3ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBNaXR6LgpJbmRleDogV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQkocmV2aXNpb24gMzQ0Mzgp
CisrKyBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0JKHdvcmtpbmcgY29weSkKQEAgLTg2
MCw3ICs4NjAsNyBAQCBzdGF0aWMgaW5saW5lIFdlYkRhdGFTb3VyY2UgKmRhdGFTb3VyY2UoCiAg
ICAgaWYgKF9wcml2YXRlLT5jb3JlRnJhbWUtPnNlbGVjdGlvbkNvbnRyb2xsZXIoKS0+aXNOb25l
KCkgfHwgIWZyYWdtZW50KQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgYXBwbHlDb21tYW5k
KG5ldyBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZChfcHJpdmF0ZS0+Y29yZUZyYW1lLT5kb2N1bWVu
dCgpLCBbZnJhZ21lbnQgX2RvY3VtZW50RnJhZ21lbnRdLCBzZWxlY3RSZXBsYWNlbWVudCwgc21h
cnRSZXBsYWNlLCBtYXRjaFN0eWxlKSk7CisgICAgYXBwbHlDb21tYW5kKFJlcGxhY2VTZWxlY3Rp
b25Db21tYW5kOjpjcmVhdGUoX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZG9jdW1lbnQoKSwgW2ZyYWdt
ZW50IF9kb2N1bWVudEZyYWdtZW50XSwgc2VsZWN0UmVwbGFjZW1lbnQsIHNtYXJ0UmVwbGFjZSwg
bWF0Y2hTdHlsZSkpOwogICAgIF9wcml2YXRlLT5jb3JlRnJhbWUtPnJldmVhbFNlbGVjdGlvbihS
ZW5kZXJMYXllcjo6Z0FsaWduVG9FZGdlSWZOZWVkZWQpOwogfQogCkluZGV4OiBXZWJLaXQvbWFj
L1dlYlZpZXcvV2ViUERGVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYlZpZXcv
V2ViUERGVmlldy5tbQkocmV2aXNpb24gMzQ0MzgpCisrKyBXZWJLaXQvbWFjL1dlYlZpZXcvV2Vi
UERGVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTM0LDcg
KzkzNCw3IEBAIHN0YXRpYyBCT09MIF9QREZTZWxlY3Rpb25zQXJlRXF1YWwoUERGU2UKICAgICAg
ICAgY2FzZSBOU0tleURvd246IHsKICAgICAgICAgICAgIFBsYXRmb3JtS2V5Ym9hcmRFdmVudCBw
ZShuc0V2ZW50KTsKICAgICAgICAgICAgIHBlLmRpc2FtYmlndWF0ZUtleURvd25FdmVudChQbGF0
Zm9ybUtleWJvYXJkRXZlbnQ6OlJhd0tleURvd24pOwotICAgICAgICAgICAgZXZlbnQgPSBuZXcg
S2V5Ym9hcmRFdmVudChrZXlkb3duRXZlbnQsIHRydWUsIHRydWUsIDAsCisgICAgICAgICAgICBl
dmVudCA9IEtleWJvYXJkRXZlbnQ6OmNyZWF0ZShrZXlkb3duRXZlbnQsIHRydWUsIHRydWUsIDAs
CiAgICAgICAgICAgICAgICAgcGUua2V5SWRlbnRpZmllcigpLCBwZS53aW5kb3dzVmlydHVhbEtl
eUNvZGUoKSwKICAgICAgICAgICAgICAgICBwZS5jdHJsS2V5KCksIHBlLmFsdEtleSgpLCBwZS5z
aGlmdEtleSgpLCBwZS5tZXRhS2V5KCksIGZhbHNlKTsKICAgICAgICAgfQpAQCAtOTQyLDcgKzk0
Miw3IEBAIHN0YXRpYyBCT09MIF9QREZTZWxlY3Rpb25zQXJlRXF1YWwoUERGU2UKICAgICAgICAg
ICAgIGJyZWFrOwogICAgIH0KICAgICBpZiAoYnV0dG9uICE9IG5vQnV0dG9uKQotICAgICAgICBl
dmVudCA9IG5ldyBNb3VzZUV2ZW50KGNsaWNrRXZlbnQsIHRydWUsIHRydWUsIDAsIFtuc0V2ZW50
IGNsaWNrQ291bnRdLCAwLCAwLCAwLCAwLAorICAgICAgICBldmVudCA9IE1vdXNlRXZlbnQ6OmNy
ZWF0ZShjbGlja0V2ZW50LCB0cnVlLCB0cnVlLCAwLCBbbnNFdmVudCBjbGlja0NvdW50XSwgMCwg
MCwgMCwgMCwKICAgICAgICAgICAgIFtuc0V2ZW50IG1vZGlmaWVyRmxhZ3NdICYgTlNDb250cm9s
S2V5TWFzaywKICAgICAgICAgICAgIFtuc0V2ZW50IG1vZGlmaWVyRmxhZ3NdICYgTlNBbHRlcm5h
dGVLZXlNYXNrLAogICAgICAgICAgICAgW25zRXZlbnQgbW9kaWZpZXJGbGFnc10gJiBOU1NoaWZ0
S2V5TWFzaywK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>21703</attachid>
            <date>2008-06-14 18:01:15 -0700</date>
            <delta_ts>2008-06-14 20:44:24 -0700</delta_ts>
            <desc>patch that deals with almost all remaining classes</desc>
            <filename>RefCount1Patch.txt</filename>
            <type>text/plain</type>
            <size>100576</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDM0NTQxKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjIgQEAKKzIwMDgtMDYtMTQgIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIC0gbW9yZSBvZiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTcyNTcKKyAgICAgICAgICBzdGFydCByZWYgY291bnRzIGF0IDEgaW5zdGVhZCBv
ZiAwIGZvciBzcGVlZAorCisgICAgICAgICoga2pzL25vZGVzLmNwcDoKKyAgICAgICAgKEtKUzo6
UGFyc2VyUmVmQ291bnRlZDo6aGFzT25lUmVmKTogQWRkZWQuIFJlcGxhY2VzIHJlZmNvdW50Lgor
ICAgICAgICAqIGtqcy9ub2Rlcy5oOiBSZXBsYWNlZCByZWZjb3VudCB3aXRoIGhhc09uZVJlZi4K
KworICAgICAgICAqIHd0Zi9MaXN0UmVmUHRyLmg6CisgICAgICAgIChXVEY6Okxpc3RSZWZQdHI6
On5MaXN0UmVmUHRyKTogQ2hhbmdlZCB0byB1c2UgaGFzT25lUmVmIGluc3RlYWQgb2YKKyAgICAg
ICAgcmVmY291bnQsIHNvIHRoaXMgY2xhc3MgY2FuIGJlIHVzZWQgd2l0aCB0aGUgUmVmQ291bnRl
ZCB0ZW1wbGF0ZS4KKworICAgICAgICAqIHd0Zi9SZWZDb3VudGVkLmg6CisgICAgICAgIChXVEY6
OlJlZkNvdW50ZWQ6Omhhc09uZVJlZik6IE1hZGUgY29uc3QsIHNpbmNlIHRoZXJlJ3Mgbm8gcmVh
c29uIGZvcgorICAgICAgICBpdCB0byBiZSBub24tY29uc3QuCisKIDIwMDgtMDYtMTQgIE1hY2ll
aiBTdGFjaG93aWFrICA8bWpzQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBPbGl2
ZXIuCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvbm9kZXMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEph
dmFTY3JpcHRDb3JlL2tqcy9ub2Rlcy5jcHAJKHJldmlzaW9uIDM0NTM0KQorKysgSmF2YVNjcmlw
dENvcmUva2pzL25vZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYwLDE5ICsxNjAsMTkgQEAg
dm9pZCBQYXJzZXJSZWZDb3VudGVkOjpkZXJlZigpCiAgICAgICAgIHRyYWNrZWRPYmplY3RFeHRy
YVJlZkNvdW50cy0+cmVtb3ZlKGl0KTsKIH0KIAotdW5zaWduZWQgUGFyc2VyUmVmQ291bnRlZDo6
cmVmY291bnQoKQorYm9vbCBQYXJzZXJSZWZDb3VudGVkOjpoYXNPbmVSZWYoKQogewogICAgIGlm
IChuZXdUcmFja2VkT2JqZWN0cyAmJiBuZXdUcmFja2VkT2JqZWN0cy0+Y29udGFpbnModGhpcykp
IHsKICAgICAgICAgQVNTRVJUKCF0cmFja2VkT2JqZWN0RXh0cmFSZWZDb3VudHMgfHwgIXRyYWNr
ZWRPYmplY3RFeHRyYVJlZkNvdW50cy0+Y29udGFpbnModGhpcykpOwotICAgICAgICByZXR1cm4g
MDsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIEFTU0VSVCghbmV3VHJhY2tl
ZE9iamVjdHMgfHwgIW5ld1RyYWNrZWRPYmplY3RzLT5jb250YWlucyh0aGlzKSk7CiAKICAgICBp
ZiAoIXRyYWNrZWRPYmplY3RFeHRyYVJlZkNvdW50cykKLSAgICAgICAgcmV0dXJuIDE7CisgICAg
ICAgIHJldHVybiB0cnVlOwogCi0gICAgcmV0dXJuIDEgKyB0cmFja2VkT2JqZWN0RXh0cmFSZWZD
b3VudHMtPmNvdW50KHRoaXMpOworICAgIHJldHVybiAhdHJhY2tlZE9iamVjdEV4dHJhUmVmQ291
bnRzLT5jb250YWlucyh0aGlzKTsKIH0KIAogdm9pZCBQYXJzZXJSZWZDb3VudGVkOjpkZWxldGVO
ZXdPYmplY3RzKCkKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9ub2Rlcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEphdmFTY3JpcHRDb3JlL2tqcy9ub2Rlcy5oCShyZXZpc2lvbiAzNDUzNCkKKysrIEphdmFT
Y3JpcHRDb3JlL2tqcy9ub2Rlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUsNyArMTI1LDcgQEAg
bmFtZXNwYWNlIEtKUyB7CiAgICAgcHVibGljOgogICAgICAgICB2b2lkIHJlZigpIEtKU19GQVNU
X0NBTEw7CiAgICAgICAgIHZvaWQgZGVyZWYoKSBLSlNfRkFTVF9DQUxMOwotICAgICAgICB1bnNp
Z25lZCByZWZjb3VudCgpIEtKU19GQVNUX0NBTEw7CisgICAgICAgIGJvb2wgaGFzT25lUmVmKCkg
S0pTX0ZBU1RfQ0FMTDsKIAogICAgICAgICBzdGF0aWMgdm9pZCBkZWxldGVOZXdPYmplY3RzKCkg
S0pTX0ZBU1RfQ0FMTDsKIApJbmRleDogSmF2YVNjcmlwdENvcmUvd3RmL0xpc3RSZWZQdHIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS93dGYvTGlzdFJlZlB0ci5oCShyZXZpc2lvbiAz
NDUzNCkKKysrIEphdmFTY3JpcHRDb3JlL3d0Zi9MaXN0UmVmUHRyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNiArMSw2IEBACiAvLyAtKi0gbW9kZTogYysrOyBjLWJhc2ljLW9mZnNldDogNCAtKi0K
IC8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisg
KiAgQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zNiw5ICszNiwxMCBAQCBuYW1lc3Bh
Y2UgV1RGIHsKICAgICAgICAgLy8gc2VlIGNvbW1lbnQgaW4gUGFzc1JlZlB0ci5oIGZvciB3aHkg
dGhpcyB0YWtlcyBjb25zdCByZWZlcmVuY2UKICAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+
IExpc3RSZWZQdHIoY29uc3QgUGFzc1JlZlB0cjxVPiYgbykgOiBSZWZQdHI8VD4obykge30KIAot
ICAgICAgICB+TGlzdFJlZlB0cigpIHsKKyAgICAgICAgfkxpc3RSZWZQdHIoKQorICAgICAgICB7
CiAgICAgICAgICAgICBSZWZQdHI8VD4gcmVhcGVyID0gdGhpcy0+cmVsZWFzZSgpOwotICAgICAg
ICAgICAgd2hpbGUgKHJlYXBlciAmJiByZWFwZXItPnJlZmNvdW50KCkgPT0gMSkKKyAgICAgICAg
ICAgIHdoaWxlIChyZWFwZXIgJiYgcmVhcGVyLT5oYXNPbmVSZWYoKSkKICAgICAgICAgICAgICAg
ICByZWFwZXIgPSByZWFwZXItPnJlbGVhc2VOZXh0KCk7IC8vIGltcGxpY2l0bHkgcHJvdGVjdHMg
cmVhcGVyLT5uZXh0LCB0aGVuIGRlcmVmcyByZWFwZXIKICAgICAgICAgfQogICAgICAgICAKSW5k
ZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi9SZWZDb3VudGVkLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNj
cmlwdENvcmUvd3RmL1JlZkNvdW50ZWQuaAkocmV2aXNpb24gMzQ1MzQpCisrKyBKYXZhU2NyaXB0
Q29yZS93dGYvUmVmQ291bnRlZC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3IEBAIHB1
YmxpYzoKICAgICAgICAgICAgIC0tbV9yZWZDb3VudDsKICAgICB9CiAKLSAgICBib29sIGhhc09u
ZVJlZigpCisgICAgYm9vbCBoYXNPbmVSZWYoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJU
KCFtX2RlbGV0aW9uSGFzQmVndW4pOwogICAgICAgICByZXR1cm4gbV9yZWZDb3VudCA9PSAxOwpJ
bmRleDogV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDM0NTQxKQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxNjMgQEAKKzIwMDgtMDYtMTQgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gbW9y
ZSB3b3JrIG9uIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzI1Nwor
ICAgICAgICAgIHN0YXJ0IHJlZiBjb3VudHMgYXQgMSBpbnN0ZWFkIG9mIDAgZm9yIHNwZWVkCisK
KyAgICAgICAgKiBXZWJDb3JlLmJhc2UuZXhwOiBBZGRlZCBzb21lIG5ldyBleHBvcnRzIG5lZWRl
ZCBmb3IgZnVuY3Rpb25zIHRoYXQgYXJlIG5vdworICAgICAgICBub24tdmlydHVhbC4KKworICAg
ICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogTW92ZWQgdGhlICJpY29u
IiBncm91cCB0byB0aGUgY29ycmVjdAorICAgICAgICBsb2NhdGlvbiBpbiB0aGUgcHJvamVjdC4g
QmVmb3JlIGl0IHdhcyBpbnNpZGUgImFwcGNhY2hlIiEKKworICAgICAgICAqIGNzcy9DU1NTdHls
ZVNlbGVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmFwcGx5
UHJvcGVydHkpOgorICAgICAgICAqIGRvbS9DbGlwYm9hcmQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q2xpcGJvYXJkOjpDbGlwYm9hcmQpOgorICAgICAgICAqIGVkaXRpbmcvbWFjL0VkaXRvck1h
Yy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bmV3R2VuZXJhbENsaXBib2FyZCk6Cisg
ICAgICAgICogZWRpdGluZy9xdC9FZGl0b3JRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0
b3I6Om5ld0dlbmVyYWxDbGlwYm9hcmQpOgorICAgICAgICAqIGVkaXRpbmcvd3gvRWRpdG9yV3gu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpuZXdHZW5lcmFsQ2xpcGJvYXJkKToKKyAg
ICAgICAgKiBsb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9j
dW1lbnRMb2FkZXI6OkRvY3VtZW50TG9hZGVyKToKKyAgICAgICAgKiBsb2FkZXIvRG9jdW1lbnRM
b2FkZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyOjpjcmVhdGUpOgorICAg
ICAgICAqIGxvYWRlci9pY29uL0ljb25EYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
Y29uRGF0YWJhc2U6OmRlZmF1bHRJY29uKToKKyAgICAgICAgKFdlYkNvcmU6Okljb25EYXRhYmFz
ZTo6c2V0SWNvbkRhdGFGb3JJY29uVVJMKToKKyAgICAgICAgKFdlYkNvcmU6Okljb25EYXRhYmFz
ZTo6c2V0SWNvblVSTEZvclBhZ2VVUkwpOgorICAgICAgICAoV2ViQ29yZTo6SWNvbkRhdGFiYXNl
OjpnZXRPckNyZWF0ZUljb25SZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SWNvbkRhdGFiYXNl
OjpwZXJmb3JtVVJMSW1wb3J0KToKKyAgICAgICAgKiBsb2FkZXIvaWNvbi9JY29uRGF0YWJhc2Uu
aDoKKyAgICAgICAgKiBsb2FkZXIvaWNvbi9JY29uUmVjb3JkLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Okljb25SZWNvcmQ6Okljb25SZWNvcmQpOgorICAgICAgICAqIGxvYWRlci9pY29uL0ljb25S
ZWNvcmQuaDoKKyAgICAgICAgKFdlYkNvcmU6Okljb25SZWNvcmQ6OmNyZWF0ZSk6CisgICAgICAg
ICogcGFnZS9FdmVudEhhbmRsZXIuaDoKKyAgICAgICAgKiBwYWdlL0ZyYW1lLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lOjpGcmFtZSk6CisgICAgICAgICogcGFnZS9GcmFtZS5oOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWU6OmNyZWF0ZSk6CisgICAgICAgICogcGFnZS9ndGsvRXZlbnRI
YW5kbGVyR3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6Y3JlYXRlRHJh
Z2dpbmdDbGlwYm9hcmQpOgorICAgICAgICAqIHBhZ2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbToK
KyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6Y3JlYXRlRHJhZ2dpbmdDbGlwYm9hcmQp
OgorICAgICAgICAqIHBhZ2UvcXQvRXZlbnRIYW5kbGVyUXQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RXZlbnRIYW5kbGVyOjpjcmVhdGVEcmFnZ2luZ0NsaXBib2FyZCk6CisgICAgICAgICogcGFn
ZS93aW4vRXZlbnRIYW5kbGVyV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxl
cjo6Y3JlYXRlRHJhZ2dpbmdDbGlwYm9hcmQpOgorICAgICAgICAqIHBhZ2Uvd3gvRXZlbnRIYW5k
bGVyV3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpjcmVhdGVEcmFnZ2lu
Z0NsaXBib2FyZCk6CisgICAgICAgICogcGxhdGZvcm0vQ3Vyc29yLmg6CisgICAgICAgIChXZWJD
b3JlOjpTaGFyZWRDdXJzb3I6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRDdXJz
b3I6On5TaGFyZWRDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQ3Vyc29yOjpTaGFy
ZWRDdXJzb3IpOgorICAgICAgICAqIHBsYXRmb3JtL0RyYWdEYXRhLmg6CisgICAgICAgICogcGxh
dGZvcm0vUG9wdXBNZW51Lmg6CisgICAgICAgIChXZWJDb3JlOjpQb3B1cE1lbnU6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpQb3B1cE1lbnU6OmlzQWN0aXZlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9TY3JvbGxCYXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjpTY3JvbGxi
YXIpOgorICAgICAgICAqIHBsYXRmb3JtL1NlYXJjaFBvcHVwTWVudS5oOgorICAgICAgICAoV2Vi
Q29yZTo6U2VhcmNoUG9wdXBNZW51OjpjcmVhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0ZvbnRGYW1pbHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udEZhbWlseTo6Rm9udEZh
bWlseSk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9Gb250RmFtaWx5Lmg6CisgICAgICAgIChXZWJDb3JlOjpGb250RmFtaWx5OjpG
b250RmFtaWx5KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEZvbnRGYW1pbHk6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRGb250RmFtaWx5OjpTaGFyZWRGb250RmFtaWx5KToK
KyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yIT0pOgorICAgICAgICAoV2ViQ29yZTo6Rm9udEZh
bWlseTo6bmV4dCk6CisgICAgICAgIChXZWJDb3JlOjpGb250RmFtaWx5OjphcHBlbmRGYW1pbHkp
OgorICAgICAgICAoV2ViQ29yZTo6Rm9udEZhbWlseTo6cmVsZWFzZU5leHQpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0ljb24uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9n
dGsvSWNvbkd0ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJY29uOjpJY29uKToKKyAgICAgICAg
KFdlYkNvcmU6Okljb246On5JY29uKToKKyAgICAgICAgKFdlYkNvcmU6Okljb246Om5ld0ljb25G
b3JGaWxlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvSWNvbk1hYy5tbToKKyAg
ICAgICAgKFdlYkNvcmU6Okljb246Okljb24pOgorICAgICAgICAoV2ViQ29yZTo6SWNvbjo6bmV3
SWNvbkZvckZpbGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ljb25RdC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJY29uOjpJY29uKToKKyAgICAgICAgKFdlYkNvcmU6Okljb246
Om5ld0ljb25Gb3JGaWxlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSWNvbldp
bi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJY29uOjpJY29uKToKKyAgICAgICAgKFdlYkNvcmU6
Okljb246On5JY29uKToKKyAgICAgICAgKFdlYkNvcmU6Okljb246Om5ld0ljb25Gb3JGaWxlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkR3RrLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvcjo6bmV3R2VuZXJhbENsaXBib2FyZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Rr
L0NsaXBib2FyZEd0ay5oOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkR3RrOjpjcmVhdGUp
OgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9QbGF0Zm9ybVNjcm9sbEJhci5oOgorICAgICAgICAo
V2ViQ29yZTo6UGxhdGZvcm1TY3JvbGxiYXI6OmNyZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3RrL1BvcHVwTWVudUd0ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQb3B1cE1lbnU6OlBvcHVw
TWVudSk6CisgICAgICAgICogcGxhdGZvcm0vZ3RrL1Njcm9sbFZpZXdHdGsuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsVmlld1Njcm9sbGJhcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbFZpZXc6OlNjcm9sbFZpZXdQcml2YXRlOjpzZXRIYXNIb3Jpem9udGFsU2Nyb2xs
YmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OlNjcm9sbFZpZXdQcml2YXRlOjpz
ZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcik6CisgICAgICAgICogcGxhdGZvcm0vbWFjL0NsaXBib2Fy
ZE1hYy5oOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkTWFjOjpjcmVhdGUpOgorICAgICAg
ICAqIHBsYXRmb3JtL21hYy9EcmFnRGF0YU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdE
YXRhOjpjcmVhdGVDbGlwYm9hcmQpOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0RhdGE6OmNvbnRh
aW5zQ29tcGF0aWJsZUNvbnRlbnQpOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9QbGF0Zm9ybVNj
cm9sbEJhci5oOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1TY3JvbGxiYXI6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVNjcm9sbGJhcjo6aG9yaXpvbnRhbFNjcm9sbGJh
ckhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVNjcm9sbGJhcjo6dmVydGljYWxT
Y3JvbGxiYXJXaWR0aCk6CisgICAgICAgICogcGxhdGZvcm0vbWFjL1BvcHVwTWVudU1hYy5tbToK
KyAgICAgICAgKFdlYkNvcmU6OlBvcHVwTWVudTo6UG9wdXBNZW51KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9xdC9DbGlwYm9hcmRRdC5oOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkUXQ6OmNy
ZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vcXQvRHJhZ0RhdGFRdC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpEcmFnRGF0YTo6Y3JlYXRlQ2xpcGJvYXJkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9x
dC9QbGF0Zm9ybVNjcm9sbEJhci5oOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1TY3JvbGxi
YXI6OmNyZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vcXQvUG9wdXBNZW51UXQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UG9wdXBNZW51OjpQb3B1cE1lbnUpOgorICAgICAgICAqIHBsYXRmb3Jt
L3F0L1Njcm9sbFZpZXdRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpTY3Jv
bGxWaWV3UHJpdmF0ZTo6c2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcik6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxWaWV3OjpTY3JvbGxWaWV3UHJpdmF0ZTo6c2V0SGFzVmVydGljYWxTY3JvbGxi
YXIpOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9DbGlwYm9hcmRXaW4uaDoKKyAgICAgICAgKFdl
YkNvcmU6OkNsaXBib2FyZFdpbjo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vQ3Vy
c29yV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkN1cnNvcjo6Q3Vyc29yKToKKyAgICAgICAg
KFdlYkNvcmU6OmxvYWRTaGFyZWRDdXJzb3IpOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9EcmFn
RGF0YVdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEcmFnRGF0YTo6Y3JlYXRlQ2xpcGJvYXJk
KToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vRWRpdG9yV2luLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvcjo6bmV3R2VuZXJhbENsaXBib2FyZCk6CisgICAgICAgICogcGxhdGZvcm0vd2lu
L1BsYXRmb3JtU2Nyb2xsQmFyLmg6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVNjcm9sbGJh
cjo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vUG9wdXBNZW51V2luLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlBvcHVwTWVudTo6UG9wdXBNZW51KToKKyAgICAgICAgKFdlYkNvcmU6
OlBvcHVwTWVudTo6c2hvdyk6CisgICAgICAgICogcGxhdGZvcm0vd2luL1Njcm9sbFZpZXdXaW4u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6U2Nyb2xsVmlld1ByaXZhdGU6OnNl
dEhhc0hvcml6b250YWxTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6
U2Nyb2xsVmlld1ByaXZhdGU6OnNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKToKKyAgICAgICAgKiBw
bGF0Zm9ybS93eC9DbGlwYm9hcmRXeC5oOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkV3g6
OmNyZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vd3gvUGxhdGZvcm1TY3JvbGxCYXIuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtU2Nyb2xsYmFyOjpjcmVhdGUpOgorICAgICAgICAqIHBs
YXRmb3JtL3d4L1BvcHVwTWVudVd4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBvcHVwTWVudTo6
UG9wdXBNZW51KToKKyAgICAgICAgKiBwbGF0Zm9ybS93eC9UZW1wb3JhcnlMaW5rU3R1YnMuY3Bw
OgorICAgICAgICAoSWNvbjo6SWNvbik6CisgICAgICAgIChJY29uOjpuZXdJY29uRm9yRmlsZSk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyOjpjcmVhdGVTY3JvbGxiYXIpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJMaXN0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OnVwZGF0ZUZy
b21FbGVtZW50KToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHSW1hZ2U6OmRhdGFDaGFuZ2VkKToKKyAgICAgICAgKiBzdmcvZ3JhcGhp
Y3MvU1ZHSW1hZ2VFbXB0eUNsaWVudHMuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0VtcHR5RnJh
bWVMb2FkZXJDbGllbnQ6OmNyZWF0ZURvY3VtZW50TG9hZGVyKToKKwogMjAwOC0wNi0xNCAgQWRh
bSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhdmlk
IEtpbHplci4KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAJKHJldmlzaW9uIDM0NTM2KQorKysgV2ViQ29yZS9XZWJD
b3JlLmJhc2UuZXhwCSh3b3JraW5nIGNvcHkpCkBAIC00NjksNyArNDY5LDkgQEAgX19aTjdXZWJD
b3JlNUZyYW1lMjlmb3JjZUxheW91dFdpdGhQYWdlVwogX19aTjdXZWJDb3JlNUZyYW1lMzRzZXRN
YXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkRWIKIF9fWk43V2ViQ29yZTVGcmFtZTRpbml0
RXYKIF9fWk43V2ViQ29yZTVGcmFtZTVwYWludEVQTlNfMTVHcmFwaGljc0NvbnRleHRFUktOU183
SW50UmVjdEUKK19fWk43V2ViQ29yZTVGcmFtZTdzZXRWaWV3RVBOU185RnJhbWVWaWV3RQogX19a
TjdXZWJDb3JlNUZyYW1lQzFFUE5TXzRQYWdlRVBOU18yMUhUTUxGcmFtZU93bmVyRWxlbWVudEVQ
TlNfMTdGcmFtZUxvYWRlckNsaWVudEUKK19fWk43V2ViQ29yZTVGcmFtZUQxRXYKIF9fWk43V2Vi
Q29yZTVJbWFnZTEyc3VwcG9ydHNUeXBlRVJLTlNfNlN0cmluZ0UKIF9fWk43V2ViQ29yZTVJbWFn
ZTIwbG9hZFBsYXRmb3JtUmVzb3VyY2VFUEtjCiBfX1pON1dlYkNvcmU1UmFuZ2U2Y3JlYXRlRU4z
V1RGMTBQYXNzUmVmUHRySU5TXzhEb2N1bWVudEVFRU5TMl9JTlNfNE5vZGVFRUVpUzZfaQpJbmRl
eDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDM0
NTM0KQorKysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtp
bmcgY29weSkKQEAgLTg2MzksNyArODYzOSw2IEBACiAJCTFBOEY2QkIwMERCNTVDREMwMDFEQjc5
NCAvKiBhcHBjYWNoZSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAo
Ci0JCQkJNTEyNkU2QjYwQTJFM0FFRjAwNUMyOUZBIC8qIGljb24gKi8sCiAJCQkJMUE4RjZCQjEw
REI1NUNEQzAwMURCNzk0IC8qIEFwcGxpY2F0aW9uQ2FjaGUuY3BwICovLAogCQkJCTFBOEY2QkIy
MERCNTVDREMwMDFEQjc5NCAvKiBBcHBsaWNhdGlvbkNhY2hlLmggKi8sCiAJCQkJMUE4RjZCQjMw
REI1NUNEQzAwMURCNzk0IC8qIEFwcGxpY2F0aW9uQ2FjaGVHcm91cC5jcHAgKi8sCkBAIC04Nzg3
LDggKzg3ODYsNyBAQAogCQkJCTUxRTFFQ0JDMEM5MUM5MDQwMERDMjU1QiAvKiBQYWdlVVJMUmVj
b3JkLmNwcCAqLywKIAkJCQk1MUUxRUNCRDBDOTFDOTA0MDBEQzI1NUIgLyogUGFnZVVSTFJlY29y
ZC5oICovLAogCQkJKTsKLQkJCW5hbWUgPSBpY29uOwotCQkJcGF0aCA9IC4uL2ljb247CisJCQlw
YXRoID0gaWNvbjsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CiAJCTUxMkREOEU4
MEQ5MUU2OTEwMDBGODlFRSAvKiBhcmNoaXZlICovID0gewpAQCAtMTIzODMsNiArMTIzODEsNyBA
QAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJMUE4RjZCQjAwREI1NUNEQzAwMURCNzk0IC8qIGFwcGNh
Y2hlICovLAogCQkJCTUxMkREOEU4MEQ5MUU2OTEwMDBGODlFRSAvKiBhcmNoaXZlICovLAorCQkJ
CTUxMjZFNkI2MEEyRTNBRUYwMDVDMjlGQSAvKiBpY29uICovLAogCQkJCTkzQTFFQUEyMEE1NjM0
RDgwMDY5NjBBMCAvKiBtYWMgKi8sCiAJCQkJQkNCMTZCRkUwOTc5QzNCRDAwNDY3NzQxIC8qIENh
Y2hlLmNwcCAqLywKIAkJCQlCQ0IxNkJGRjA5NzlDM0JEMDA0Njc3NDEgLyogQ2FjaGUuaCAqLywK
SW5kZXg6IFdlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCShyZXZpc2lvbiAzNDUzNikKKysrIFdlYkNv
cmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjMzLDEwICsz
NjMzLDEwIEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eShpbnQKICAgICAg
ICAgICAgICAgICAgICAgY3VyckZhbWlseSA9ICZmaXJzdEZhbWlseTsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIEZvbnRGYW1p
bHkgKm5ld0ZhbWlseSA9IG5ldyBGb250RmFtaWx5OworICAgICAgICAgICAgICAgICAgICBSZWZQ
dHI8U2hhcmVkRm9udEZhbWlseT4gbmV3RmFtaWx5ID0gU2hhcmVkRm9udEZhbWlseTo6Y3JlYXRl
KCk7CiAgICAgICAgICAgICAgICAgICAgIG5ld0ZhbWlseS0+c2V0RmFtaWx5KGZhY2UpOwogICAg
ICAgICAgICAgICAgICAgICBjdXJyRmFtaWx5LT5hcHBlbmRGYW1pbHkobmV3RmFtaWx5KTsKLSAg
ICAgICAgICAgICAgICAgICAgY3VyckZhbWlseSA9IG5ld0ZhbWlseTsKKyAgICAgICAgICAgICAg
ICAgICAgY3VyckZhbWlseSA9IG5ld0ZhbWlseS5nZXQoKTsKICAgICAgICAgICAgICAgICB9CiAg
ICAgCiAgICAgICAgICAgICAgICAgaWYgKGZvbnREZXNjcmlwdGlvbi5rZXl3b3JkU2l6ZSgpICYm
IChmb250RGVzY3JpcHRpb24uZ2VuZXJpY0ZhbWlseSgpID09IEZvbnREZXNjcmlwdGlvbjo6TW9u
b3NwYWNlRmFtaWx5KSAhPSBvbGRGYW1pbHlJc01vbm9zcGFjZSkKSW5kZXg6IFdlYkNvcmUvZG9t
L0NsaXBib2FyZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vQ2xpcGJvYXJkLmNwcAko
cmV2aXNpb24gMzQ1MzQpCisrKyBXZWJDb3JlL2RvbS9DbGlwYm9hcmQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3
LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMzQsOCArMzQsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBD
bGlwYm9hcmQ6OkNsaXBib2FyZChDbGlwYm9hcmRBY2Nlc3NQb2xpY3kgcG9saWN5LCBib29sIGlz
Rm9yRHJhZ2dpbmcpIAotICAgIDogUmVmQ291bnRlZDxDbGlwYm9hcmQ+KDApCi0gICAgLCBtX3Bv
bGljeShwb2xpY3kpIAorICAgIDogbV9wb2xpY3kocG9saWN5KSAKICAgICAsIG1fZHJhZ1N0YXJ0
ZWQoZmFsc2UpCiAgICAgLCBtX2ZvckRyYWdnaW5nKGlzRm9yRHJhZ2dpbmcpCiAgICAgLCBtX2Ry
YWdJbWFnZSgwKQpJbmRleDogV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMubW0JKHJldmlzaW9uIDM0NTM0
KQorKysgV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMubW0JKHdvcmtpbmcgY29weSkKQEAg
LTQ4LDcgKzQ4LDcgQEAgdm9pZCBfTlNTZXRLaWxsUmluZ1RvWWFua2VkU3RhdGUoKTsKIAogUGFz
c1JlZlB0cjxDbGlwYm9hcmQ+IEVkaXRvcjo6bmV3R2VuZXJhbENsaXBib2FyZChDbGlwYm9hcmRB
Y2Nlc3NQb2xpY3kgcG9saWN5KQogewotICAgIHJldHVybiBuZXcgQ2xpcGJvYXJkTWFjKGZhbHNl
LCBbTlNQYXN0ZWJvYXJkIGdlbmVyYWxQYXN0ZWJvYXJkXSwgcG9saWN5KTsKKyAgICByZXR1cm4g
Q2xpcGJvYXJkTWFjOjpjcmVhdGUoZmFsc2UsIFtOU1Bhc3RlYm9hcmQgZ2VuZXJhbFBhc3RlYm9h
cmRdLCBwb2xpY3ksIDApOwogfQogCiBzdGF0aWMgdm9pZCBpbml0aWFsaXplS2lsbFJpbmdJZk5l
ZWRlZCgpCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvcXQvRWRpdG9yUXQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvZWRpdGluZy9xdC9FZGl0b3JRdC5jcHAJKHJldmlzaW9uIDM0NTM0KQorKysg
V2ViQ29yZS9lZGl0aW5nL3F0L0VkaXRvclF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsx
LDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgWmFjayBSdXNpbiA8emFja0BrZGUub3Jn
PgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDEsNyArNDEsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFBhc3NSZWZQdHI8Q2xpcGJvYXJkPiBFZGl0b3I6Om5l
d0dlbmVyYWxDbGlwYm9hcmQoQ2xpcGJvYXJkQWNjZXNzUG9saWN5IHBvbGljeSkKIHsKLSAgICBy
ZXR1cm4gbmV3IENsaXBib2FyZFF0KHBvbGljeSk7CisgICAgcmV0dXJuIENsaXBib2FyZFF0Ojpj
cmVhdGUocG9saWN5KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29y
ZS9lZGl0aW5nL3d4L0VkaXRvcld4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcv
d3gvRWRpdG9yV3guY3BwCShyZXZpc2lvbiAzNDUzNCkKKysrIFdlYkNvcmUvZWRpdGluZy93eC9F
ZGl0b3JXeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDE3ICsyNCwxNSBAQAogICovCiAKICNp
bmNsdWRlICJjb25maWcuaCIKLQogI2luY2x1ZGUgIkVkaXRvci5oIgorCiAjaW5jbHVkZSAiQ2xp
cGJvYXJkV3guaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBQYXNzUmVmUHRyPENsaXBib2Fy
ZD4gRWRpdG9yOjpuZXdHZW5lcmFsQ2xpcGJvYXJkKENsaXBib2FyZEFjY2Vzc1BvbGljeSBwb2xp
Y3kpIAogeyAKLSAgICByZXR1cm4gbmV3IENsaXBib2FyZFd4KHBvbGljeSwgdHJ1ZSk7CisgICAg
cmV0dXJuIENsaXBib2FyZFd4OjpjcmVhdGUocG9saWN5LCB0cnVlKTsKIH0KIAogfQotCi0KSW5k
ZXg6IFdlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAJKHJldmlzaW9uIDM0NTM0KQorKysgV2ViQ29y
ZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzUsOCArMTM1
LDcgQEAgc3RhdGljIHZvaWQgc2V0QWxsRGVmZXJzTG9hZGluZyhjb25zdCBSZQogfQogCiBEb2N1
bWVudExvYWRlcjo6RG9jdW1lbnRMb2FkZXIoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXEsIGNv
bnN0IFN1YnN0aXR1dGVEYXRhJiBzdWJzdGl0dXRlRGF0YSkKLSAgICA6IFJlZkNvdW50ZWQ8RG9j
dW1lbnRMb2FkZXI+KDApCi0gICAgLCBtX2RlZmVyTWFpblJlc291cmNlRGF0YUxvYWQodHJ1ZSkK
KyAgICA6IG1fZGVmZXJNYWluUmVzb3VyY2VEYXRhTG9hZCh0cnVlKQogICAgICwgbV9mcmFtZSgw
KQogICAgICwgbV9vcmlnaW5hbFJlcXVlc3QocmVxKQogICAgICwgbV9zdWJzdGl0dXRlRGF0YShz
dWJzdGl0dXRlRGF0YSkKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuaAkocmV2aXNpb24gMzQ1
MzQpCisrKyBXZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC02OCw3ICs2OCwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBEb2N1bWVu
dExvYWRlciA6IHB1YmxpYyBSZWZDb3VudGVkPERvY3VtZW50TG9hZGVyPiB7CiAgICAgcHVibGlj
OgotICAgICAgICBEb2N1bWVudExvYWRlcihjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBT
dWJzdGl0dXRlRGF0YSYpOworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxEb2N1bWVudExvYWRl
cj4gY3JlYXRlKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgU3Vic3RpdHV0
ZURhdGEmIGRhdGEpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
RG9jdW1lbnRMb2FkZXIocmVxdWVzdCwgZGF0YSkpOworICAgICAgICB9CiAgICAgICAgIHZpcnR1
YWwgfkRvY3VtZW50TG9hZGVyKCk7CiAKICAgICAgICAgdm9pZCBzZXRGcmFtZShGcmFtZSopOwpA
QCAtMjAzLDcgKzIwNiwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgQXBwbGlj
YXRpb25DYWNoZSogbWFpblJlc291cmNlQXBwbGljYXRpb25DYWNoZSgpIGNvbnN0OwogI2VuZGlm
CisKICAgICBwcm90ZWN0ZWQ6CisgICAgICAgIERvY3VtZW50TG9hZGVyKGNvbnN0IFJlc291cmNl
UmVxdWVzdCYsIGNvbnN0IFN1YnN0aXR1dGVEYXRhJik7CisKICAgICAgICAgYm9vbCBtX2RlZmVy
TWFpblJlc291cmNlRGF0YUxvYWQ7CiAKICAgICBwcml2YXRlOgpJbmRleDogV2ViQ29yZS9sb2Fk
ZXIvaWNvbi9JY29uRGF0YWJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL2lj
b24vSWNvbkRhdGFiYXNlLmNwcAkocmV2aXNpb24gMzQ1MzQpCisrKyBXZWJDb3JlL2xvYWRlci9p
Y29uL0ljb25EYXRhYmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3NSw3ICszNzUsNyBAQCBJ
bWFnZSogSWNvbkRhdGFiYXNlOjpkZWZhdWx0SWNvbihjb25zdCBJCiAgICAgc3RhdGljIFJlZlB0
cjxTaGFyZWRCdWZmZXI+IGRlZmF1bHRJY29uQnVmZmVyKFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGRl
ZmF1bHRJY29uRGF0YSwgc2l6ZW9mKGRlZmF1bHRJY29uRGF0YSkpKTsKICAgICAKICAgICBpZiAo
IW1fZGVmYXVsdEljb25SZWNvcmQpIHsKLSAgICAgICAgbV9kZWZhdWx0SWNvblJlY29yZCA9IG5l
dyBJY29uUmVjb3JkKCJ1cmxJY29uIik7CisgICAgICAgIG1fZGVmYXVsdEljb25SZWNvcmQgPSBJ
Y29uUmVjb3JkOjpjcmVhdGUoInVybEljb24iKTsKICAgICAgICAgbV9kZWZhdWx0SWNvblJlY29y
ZC0+c2V0SW1hZ2VEYXRhKGRlZmF1bHRJY29uQnVmZmVyKTsKICAgICB9CiAgICAgCkBAIC01MTMs
MTAgKzUxMywxMCBAQCB2b2lkIEljb25EYXRhYmFzZTo6c2V0SWNvbkRhdGFGb3JJY29uVVJMCiAg
ICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3VybEFuZEljb25Mb2NrKTsKICAgICAKICAgICAg
ICAgLy8gSWYgdGhpcyBpY29uIHdhcyBwZW5kaW5nIGEgcmVhZCwgcmVtb3ZlIGl0IGZyb20gdGhh
dCBzZXQgYmVjYXVzZSB0aGlzIG5ldyBkYXRhIHNob3VsZCBvdmVycmlkZSB3aGF0IGlzIG9uIGRp
c2sKLSAgICAgICAgSWNvblJlY29yZCogaWNvbiA9IG1faWNvblVSTFRvUmVjb3JkTWFwLmdldChp
Y29uVVJMKTsKKyAgICAgICAgUmVmUHRyPEljb25SZWNvcmQ+IGljb24gPSBtX2ljb25VUkxUb1Jl
Y29yZE1hcC5nZXQoaWNvblVSTCk7CiAgICAgICAgIGlmIChpY29uKSB7CiAgICAgICAgICAgICBN
dXRleExvY2tlciBsb2NrZXIobV9wZW5kaW5nUmVhZGluZ0xvY2spOwotICAgICAgICAgICAgbV9p
Y29uc1BlbmRpbmdSZWFkaW5nLnJlbW92ZShpY29uKTsKKyAgICAgICAgICAgIG1faWNvbnNQZW5k
aW5nUmVhZGluZy5yZW1vdmUoaWNvbi5nZXQoKSk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAg
ICAgaWNvbiA9IGdldE9yQ3JlYXRlSWNvblJlY29yZChpY29uVVJMKTsKICAgICAKQEAgLTU4OCw4
ICs1ODgsNyBAQCB2b2lkIEljb25EYXRhYmFzZTo6c2V0SWNvblVSTEZvclBhZ2VVUkwoCiAgICAg
ICAgIFJlZlB0cjxJY29uUmVjb3JkPiBpY29uUmVjb3JkID0gcGFnZVJlY29yZC0+aWNvblJlY29y
ZCgpOwogCiAgICAgICAgIC8vIE90aGVyd2lzZSwgc2V0IHRoZSBuZXcgaWNvbiByZWNvcmQgZm9y
IHRoaXMgcGFnZQotICAgICAgICBJY29uUmVjb3JkKiBuZXdJY29uUmVjb3JkID0gZ2V0T3JDcmVh
dGVJY29uUmVjb3JkKGljb25VUkwpOwotICAgICAgICBwYWdlUmVjb3JkLT5zZXRJY29uUmVjb3Jk
KG5ld0ljb25SZWNvcmQpOworICAgICAgICBwYWdlUmVjb3JkLT5zZXRJY29uUmVjb3JkKGdldE9y
Q3JlYXRlSWNvblJlY29yZChpY29uVVJMKSk7CiAKICAgICAgICAgLy8gSWYgdGhlIGN1cnJlbnQg
aWNvbiBoYXMgb25seSBhIHNpbmdsZSByZWYgbGVmdCwgaXQgaXMgYWJvdXQgdG8gZ2V0IHdpcGVk
IG91dC4gCiAgICAgICAgIC8vIFJlbW92ZSBpdCBmcm9tIHRoZSBpbi1tZW1vcnkgcmVjb3JkcyBh
bmQgZG9uJ3QgYm90aGVyIHJlYWRpbmcgaXQgaW4gZnJvbSBkaXNrIGFueW1vcmUKQEAgLTgzNCwx
OCArODMzLDE4IEBAIFN0cmluZyBJY29uRGF0YWJhc2U6OmRlZmF1bHREYXRhYmFzZUZpbGUKIH0K
IAogLy8gVW5saWtlIGdldE9yQ3JlYXRlUGFnZVVSTFJlY29yZCgpLCBnZXRPckNyZWF0ZUljb25S
ZWNvcmQoKSBkb2VzIG5vdCBtYXJrIHRoZSBpY29uIGFzICJpbnRlcmVzdGVkIGluIGltcG9ydCIK
LUljb25SZWNvcmQqIEljb25EYXRhYmFzZTo6Z2V0T3JDcmVhdGVJY29uUmVjb3JkKGNvbnN0IFN0
cmluZyYgaWNvblVSTCkKK1Bhc3NSZWZQdHI8SWNvblJlY29yZD4gSWNvbkRhdGFiYXNlOjpnZXRP
ckNyZWF0ZUljb25SZWNvcmQoY29uc3QgU3RyaW5nJiBpY29uVVJMKQogewogICAgIC8vIENsaWVu
dHMgb2YgZ2V0T3JDcmVhdGVJY29uUmVjb3JkKCkgYXJlIHJlcXVpcmVkIHRvIGFjcXVpcmUgdGhl
IG1fdXJsQW5kSWNvbkxvY2sgYmVmb3JlIGNhbGxpbmcgdGhpcyBtZXRob2QKICAgICBBU1NFUlQo
IW1fdXJsQW5kSWNvbkxvY2sudHJ5TG9jaygpKTsKIAogICAgIGlmIChJY29uUmVjb3JkKiBpY29u
ID0gbV9pY29uVVJMVG9SZWNvcmRNYXAuZ2V0KGljb25VUkwpKQogICAgICAgICByZXR1cm4gaWNv
bjsKLSAgICAgICAgCi0gICAgSWNvblJlY29yZCogbmV3SWNvbiA9IG5ldyBJY29uUmVjb3JkKGlj
b25VUkwpOwotICAgIG1faWNvblVSTFRvUmVjb3JkTWFwLnNldChpY29uVVJMLCBuZXdJY29uKTsK
LSAgICAgICAgCi0gICAgcmV0dXJuIG5ld0ljb247ICAgIAorCisgICAgUmVmUHRyPEljb25SZWNv
cmQ+IG5ld0ljb24gPSBJY29uUmVjb3JkOjpjcmVhdGUoaWNvblVSTCk7CisgICAgbV9pY29uVVJM
VG9SZWNvcmRNYXAuc2V0KGljb25VUkwsIG5ld0ljb24uZ2V0KCkpOworCisgICAgcmV0dXJuIG5l
d0ljb24ucmVsZWFzZSgpOwogfQogCiAvLyBUaGlzIG1ldGhvZCByZXRyaWV2ZXMgdGhlIGV4aXN0
aW5nIFBhZ2VVUkxSZWNvcmQsIG9yIGNyZWF0ZXMgYSBuZXcgb25lIGFuZCBtYXJrcyBpdCBhcyAi
aW50ZXJlc3RlZCBpbiB0aGUgaW1wb3J0IiBmb3IgbGF0ZXIgbm90aWZpY2F0aW9uCkBAIC0xMjAw
LDggKzExOTksOCBAQCB2b2lkIEljb25EYXRhYmFzZTo6cGVyZm9ybVVSTEltcG9ydCgpCiAgICAg
ICAgICAgICAgICAgSWNvblJlY29yZCogY3VycmVudEljb24gPSBwYWdlUmVjb3JkLT5pY29uUmVj
b3JkKCk7CiAKICAgICAgICAgICAgICAgICBpZiAoIWN1cnJlbnRJY29uIHx8IGN1cnJlbnRJY29u
LT5pY29uVVJMKCkgIT0gaWNvblVSTCkgewotICAgICAgICAgICAgICAgICAgICBjdXJyZW50SWNv
biA9IGdldE9yQ3JlYXRlSWNvblJlY29yZChpY29uVVJMKTsKLSAgICAgICAgICAgICAgICAgICAg
cGFnZVJlY29yZC0+c2V0SWNvblJlY29yZChjdXJyZW50SWNvbik7CisgICAgICAgICAgICAgICAg
ICAgIHBhZ2VSZWNvcmQtPnNldEljb25SZWNvcmQoZ2V0T3JDcmVhdGVJY29uUmVjb3JkKGljb25V
UkwpKTsKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudEljb24gPSBwYWdlUmVjb3JkLT5pY29u
UmVjb3JkKCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgLy8gUmVnYXJkbGVzcywgdGhlIHRpbWUgc3RhbXAgZnJvbSBkaXNrIHN0aWxsIHRha2VzIHBy
ZWNlZGVuY2UuICBVbnRpbCB3ZSByZWFkIHRoaXMgaWNvbiBmcm9tIGRpc2ssIHdlIGRpZG4ndCB0
aGluayB3ZSdkIHNlZW4gaXQgYmVmb3JlCkluZGV4OiBXZWJDb3JlL2xvYWRlci9pY29uL0ljb25E
YXRhYmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNl
LmgJKHJldmlzaW9uIDM0NTM0KQorKysgV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uRGF0YWJhc2Uu
aAkod29ya2luZyBjb3B5KQpAQCAtMTIzLDcgKzEyMyw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAg
SGFzaFNldDxSZWZQdHI8RG9jdW1lbnRMb2FkZXI+ID4gbV9sb2FkZXJzUGVuZGluZ0RlY2lzaW9u
OwogCi0gICAgSWNvblJlY29yZCogbV9kZWZhdWx0SWNvblJlY29yZDsKKyAgICBSZWZQdHI8SWNv
blJlY29yZD4gbV9kZWZhdWx0SWNvblJlY29yZDsKICNlbmRpZiAvLyBFTkFCTEUoSUNPTkRBVEFC
QVNFKQogCiAvLyAqKiogQW55IFRocmVhZCAqKioKQEAgLTEzNCw3ICsxMzQsNyBAQCBwdWJsaWM6
CiAKICNpZiBFTkFCTEUoSUNPTkRBVEFCQVNFKQogcHJpdmF0ZToKLSAgICBJY29uUmVjb3JkKiBn
ZXRPckNyZWF0ZUljb25SZWNvcmQoY29uc3QgU3RyaW5nJiBpY29uVVJMKTsKKyAgICBQYXNzUmVm
UHRyPEljb25SZWNvcmQ+IGdldE9yQ3JlYXRlSWNvblJlY29yZChjb25zdCBTdHJpbmcmIGljb25V
UkwpOwogICAgIFBhZ2VVUkxSZWNvcmQqIGdldE9yQ3JlYXRlUGFnZVVSTFJlY29yZChjb25zdCBT
dHJpbmcmIHBhZ2VVUkwpOwogICAgIAogICAgIGJvb2wgbV9pc0VuYWJsZWQ7CkluZGV4OiBXZWJD
b3JlL2xvYWRlci9pY29uL0ljb25SZWNvcmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9h
ZGVyL2ljb24vSWNvblJlY29yZC5jcHAJKHJldmlzaW9uIDM0NTM0KQorKysgV2ViQ29yZS9sb2Fk
ZXIvaWNvbi9JY29uUmVjb3JkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsOCArNDEsNyBAQAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBJY29uUmVjb3JkOjpJY29uUmVjb3JkKGNvbnN0IFN0cmlu
ZyYgdXJsKQotICAgIDogUmVmQ291bnRlZDxJY29uUmVjb3JkPigwKQotICAgICwgbV9pY29uVVJM
KHVybCkKKyAgICA6IG1faWNvblVSTCh1cmwpCiAgICAgLCBtX3N0YW1wKDApCiAgICAgLCBtX2Rh
dGFTZXQoZmFsc2UpCiB7CkluZGV4OiBXZWJDb3JlL2xvYWRlci9pY29uL0ljb25SZWNvcmQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9pY29uL0ljb25SZWNvcmQuaAkocmV2aXNpb24g
MzQ1MzQpCisrKyBXZWJDb3JlL2xvYWRlci9pY29uL0ljb25SZWNvcmQuaAkod29ya2luZyBjb3B5
KQpAQCAtNjcsNyArNjcsMTAgQEAgcHVibGljOgogY2xhc3MgSWNvblJlY29yZCA6IHB1YmxpYyBS
ZWZDb3VudGVkPEljb25SZWNvcmQ+IHsKICAgICBmcmllbmQgY2xhc3MgUGFnZVVSTFJlY29yZDsK
IHB1YmxpYzoKLSAgICBJY29uUmVjb3JkKGNvbnN0IFN0cmluZyYgdXJsKTsgCisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8SWNvblJlY29yZD4gY3JlYXRlKGNvbnN0IFN0cmluZyYgdXJsKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJY29uUmVjb3JkKHVybCkpOworICAgIH0KICAg
ICB+SWNvblJlY29yZCgpOwogICAgIAogICAgIHRpbWVfdCBnZXRUaW1lc3RhbXAoKSB7IHJldHVy
biBtX3N0YW1wOyB9CkBAIC04NSw3ICs4OCwxMCBAQCBwdWJsaWM6CiAgICAgY29uc3QgSGFzaFNl
dDxTdHJpbmc+JiByZXRhaW5pbmdQYWdlVVJMcygpIHsgcmV0dXJuIG1fcmV0YWluaW5nUGFnZVVS
THM7IH0KICAgICAKICAgICBJY29uU25hcHNob3Qgc25hcHNob3QoYm9vbCBmb3JEZWxldGlvbiA9
IGZhbHNlKSBjb25zdDsKKwogcHJpdmF0ZToKKyAgICBJY29uUmVjb3JkKGNvbnN0IFN0cmluZyYg
dXJsKTsgCisKICAgICBTdHJpbmcgbV9pY29uVVJMOwogICAgIHRpbWVfdCBtX3N0YW1wOwogICAg
IE93blB0cjxJbWFnZT4gbV9pbWFnZTsKSW5kZXg6IFdlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgJKHJldmlzaW9uIDM0
NTM0KQorKysgV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
OTMsNyArMTkzLDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgRXZlbnRIYW5kbGVyRHJhZ1N0YXRl
JiBkcmFnU3RhdGUoKTsKICAgICBzdGF0aWMgY29uc3QgZG91YmxlIFRleHREcmFnRGVsYXk7CiAg
ICAgCi0gICAgQ2xpcGJvYXJkKiBjcmVhdGVEcmFnZ2luZ0NsaXBib2FyZCgpIGNvbnN0OworICAg
IFBhc3NSZWZQdHI8Q2xpcGJvYXJkPiBjcmVhdGVEcmFnZ2luZ0NsaXBib2FyZCgpIGNvbnN0Owog
ICAgIAogICAgIGJvb2wgZXZlbnRBY3RpdmF0ZWRWaWV3KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVu
dCYpIGNvbnN0OwogICAgIHZvaWQgc2VsZWN0Q2xvc2VzdFdvcmRGcm9tTW91c2VFdmVudChjb25z
dCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiBldmVudCk7CkluZGV4OiBXZWJDb3JlL3Bh
Z2UvRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9GcmFtZS5jcHAJKHJldmlz
aW9uIDM0NTM2KQorKysgV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTIxLDggKzEyMSw3IEBAIHN0YXRpYyBpbmxpbmUgRnJhbWUqIHBhcmVudEZyb21Pd25lckVsZW0K
IH0KIAogRnJhbWU6OkZyYW1lKFBhZ2UqIHBhZ2UsIEhUTUxGcmFtZU93bmVyRWxlbWVudCogb3du
ZXJFbGVtZW50LCBGcmFtZUxvYWRlckNsaWVudCogZnJhbWVMb2FkZXJDbGllbnQpIAotICAgIDog
UmVmQ291bnRlZDxGcmFtZT4oMCkKLSAgICAsIGQobmV3IEZyYW1lUHJpdmF0ZShwYWdlLCBwYXJl
bnRGcm9tT3duZXJFbGVtZW50KG93bmVyRWxlbWVudCksIHRoaXMsIG93bmVyRWxlbWVudCwgZnJh
bWVMb2FkZXJDbGllbnQpKQorICAgIDogZChuZXcgRnJhbWVQcml2YXRlKHBhZ2UsIHBhcmVudEZy
b21Pd25lckVsZW1lbnQob3duZXJFbGVtZW50KSwgdGhpcywgb3duZXJFbGVtZW50LCBmcmFtZUxv
YWRlckNsaWVudCkpCiB7CiAgICAgQXRvbWljU3RyaW5nOjppbml0KCk7CiAgICAgRXZlbnROYW1l
czo6aW5pdCgpOwpAQCAtMTQ4LDkgKzE0Nyw2IEBAIEZyYW1lOjpGcmFtZShQYWdlKiBwYWdlLCBI
VE1MRnJhbWVPd25lckUKICAgICBpZiAoIW93bmVyRWxlbWVudCkKICAgICAgICAgcGFnZS0+c2V0
TWFpbkZyYW1lKHRoaXMpOwogICAgIGVsc2UgewotICAgICAgICAvLyBGSVhNRTogSXQncyBiYWQg
dG8gaGF2ZSBhIHJlZigpIGhlcmUgYnV0IG5vdCBpbiB0aGUgIW93bmVyRWxlbWVudCBjYXNlLgot
ICAgICAgICAvLyBXZSBuZWVkIHRvIHN0cmFpZ2h0ZW4gdGhpcyBvdXQuCi0gICAgICAgIHJlZigp
OwogICAgICAgICBwYWdlLT5pbmNyZW1lbnRGcmFtZUNvdW50KCk7CiAgICAgICAgIG93bmVyRWxl
bWVudC0+bV9jb250ZW50RnJhbWUgPSB0aGlzOwogICAgIH0KSW5kZXg6IFdlYkNvcmUvcGFnZS9G
cmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9GcmFtZS5oCShyZXZpc2lvbiAzNDUz
NCkKKysrIFdlYkNvcmUvcGFnZS9GcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04MCw5ICs4MCwx
MiBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgVGltZXI7CiAKIGNsYXNzIEZyYW1lIDog
cHVibGljIFJlZkNvdW50ZWQ8RnJhbWU+IHsKIHB1YmxpYzoKLSAgICBGcmFtZShQYWdlKiwgSFRN
TEZyYW1lT3duZXJFbGVtZW50KiwgRnJhbWVMb2FkZXJDbGllbnQqKTsKLSAgICB2aXJ0dWFsIHZv
aWQgc2V0VmlldyhGcmFtZVZpZXcqKTsKLSAgICB2aXJ0dWFsIH5GcmFtZSgpOworICAgIHN0YXRp
YyBQYXNzUmVmUHRyPEZyYW1lPiBjcmVhdGUoUGFnZSogcGFnZSwgSFRNTEZyYW1lT3duZXJFbGVt
ZW50KiBvd25lckVsZW1lbnQsIEZyYW1lTG9hZGVyQ2xpZW50KiBjbGllbnQpCisgICAgeworICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZyYW1lKHBhZ2UsIG93bmVyRWxlbWVudCwgY2xpZW50
KSk7CisgICAgfQorICAgIHZvaWQgc2V0VmlldyhGcmFtZVZpZXcqKTsKKyAgICB+RnJhbWUoKTsK
ICAgICAKICAgICB2b2lkIGluaXQoKTsKIApAQCAtMTExLDYgKzExNCw4IEBAIHB1YmxpYzoKICAg
ICBmcmllbmQgY2xhc3MgRnJhbWVQcml2YXRlOwogCiBwcml2YXRlOgorICAgIEZyYW1lKFBhZ2Uq
LCBIVE1MRnJhbWVPd25lckVsZW1lbnQqLCBGcmFtZUxvYWRlckNsaWVudCopOworCiAgICAgRnJh
bWVQcml2YXRlKiBkOwogICAgIAogLy8gPT09IHVuZGVjaWRlZCwgd291bGQgbGlrZSB0byBjb25z
aWRlciBtb3ZpbmcgdG8gYW5vdGhlciBjbGFzcwpJbmRleDogV2ViQ29yZS9wYWdlL2d0ay9FdmVu
dEhhbmRsZXJHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9ndGsvRXZlbnRIYW5k
bGVyR3RrLmNwcAkocmV2aXNpb24gMzQ1MzQpCisrKyBXZWJDb3JlL3BhZ2UvZ3RrL0V2ZW50SGFu
ZGxlckd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw5ICsxMDAsOSBAQCBib29sIEV2ZW50
SGFuZGxlcjo6cGFzc1doZWVsRXZlbnRUb1dpZGdlCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEZy
YW1lVmlldyo+KHdpZGdldCktPmZyYW1lKCktPmV2ZW50SGFuZGxlcigpLT5oYW5kbGVXaGVlbEV2
ZW50KGV2ZW50KTsKIH0KIAotQ2xpcGJvYXJkKiBFdmVudEhhbmRsZXI6OmNyZWF0ZURyYWdnaW5n
Q2xpcGJvYXJkKCkgY29uc3QKK1Bhc3NSZWZQdHI8Q2xpcGJvYXJkPiBFdmVudEhhbmRsZXI6OmNy
ZWF0ZURyYWdnaW5nQ2xpcGJvYXJkKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbmV3IENsaXBib2Fy
ZEd0ayhDbGlwYm9hcmRXcml0YWJsZSwgdHJ1ZSk7CisgICAgcmV0dXJuIENsaXBib2FyZEd0azo6
Y3JlYXRlKENsaXBib2FyZFdyaXRhYmxlLCB0cnVlKTsKIH0KIAogYm9vbCBFdmVudEhhbmRsZXI6
OnBhc3NNb3VzZVByZXNzRXZlbnRUb1N1YmZyYW1lKE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3Vs
dHMmIG1ldiwgRnJhbWUqIHN1YmZyYW1lKQpJbmRleDogV2ViQ29yZS9wYWdlL21hYy9FdmVudEhh
bmRsZXJNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL21hYy9FdmVudEhhbmRsZXJN
YWMubW0JKHJldmlzaW9uIDM0NTM2KQorKysgV2ViQ29yZS9wYWdlL21hYy9FdmVudEhhbmRsZXJN
YWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTM2MiwxMyArMzYyLDEzIEBAIGJvb2wgRXZlbnRIYW5k
bGVyOjpldmVudExvb3BIYW5kbGVNb3VzZUQKICAgICByZXR1cm4gdHJ1ZTsKIH0KICAgICAKLUNs
aXBib2FyZCogRXZlbnRIYW5kbGVyOjpjcmVhdGVEcmFnZ2luZ0NsaXBib2FyZCgpIGNvbnN0IAor
UGFzc1JlZlB0cjxDbGlwYm9hcmQ+IEV2ZW50SGFuZGxlcjo6Y3JlYXRlRHJhZ2dpbmdDbGlwYm9h
cmQoKSBjb25zdCAKIHsKICAgICBOU1Bhc3RlYm9hcmQgKnBhc3RlYm9hcmQgPSBbTlNQYXN0ZWJv
YXJkIHBhc3RlYm9hcmRXaXRoTmFtZTpOU0RyYWdQYm9hcmRdOwogICAgIC8vIE11c3QgYmUgZG9u
ZSBiZWZvcmUgb25kcmFnc3RhcnQgYWRkcyB0eXBlcyBhbmQgZGF0YSB0byB0aGUgcGJvYXJkLAog
ICAgIC8vIGFsc28gZG9uZSBmb3Igc2VjdXJpdHksIGFzIGl0IGVyYXNlcyBkYXRhIGZyb20gdGhl
IGxhc3QgZHJhZwogICAgIFtwYXN0ZWJvYXJkIGRlY2xhcmVUeXBlczpbTlNBcnJheSBhcnJheV0g
b3duZXI6bmlsXTsKLSAgICByZXR1cm4gbmV3IENsaXBib2FyZE1hYyh0cnVlLCBwYXN0ZWJvYXJk
LCBDbGlwYm9hcmRXcml0YWJsZSwgbV9mcmFtZSk7CisgICAgcmV0dXJuIENsaXBib2FyZE1hYzo6
Y3JlYXRlKHRydWUsIHBhc3RlYm9hcmQsIENsaXBib2FyZFdyaXRhYmxlLCBtX2ZyYW1lKTsKIH0K
ICAgICAKIGJvb2wgRXZlbnRIYW5kbGVyOjpldmVudExvb3BIYW5kbGVNb3VzZVVwKGNvbnN0IE1v
dXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmKQpJbmRleDogV2ViQ29yZS9wYWdlL3F0L0V2ZW50
SGFuZGxlclF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvcXQvRXZlbnRIYW5kbGVy
UXQuY3BwCShyZXZpc2lvbiAzNDUzNCkKKysrIFdlYkNvcmUvcGFnZS9xdC9FdmVudEhhbmRsZXJR
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChD
KSAyMDA2IFphY2sgUnVzaW4gPHphY2tAa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNiwg
MjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAo
QykgMjAwNyBUcm9sbHRlY2ggQVNBCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0xMTEsOSArMTExLDkg
QEAgYm9vbCBFdmVudEhhbmRsZXI6OnBhc3NXaGVlbEV2ZW50VG9XaWRnZQogICAgIHJldHVybiBz
dGF0aWNfY2FzdDxGcmFtZVZpZXcqPih3aWRnZXQpLT5mcmFtZSgpLT5ldmVudEhhbmRsZXIoKS0+
aGFuZGxlV2hlZWxFdmVudChldmVudCk7CiB9CiAKLUNsaXBib2FyZCogRXZlbnRIYW5kbGVyOjpj
cmVhdGVEcmFnZ2luZ0NsaXBib2FyZCgpIGNvbnN0CitQYXNzUmVmUHRyPENsaXBib2FyZD4gRXZl
bnRIYW5kbGVyOjpjcmVhdGVEcmFnZ2luZ0NsaXBib2FyZCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IG5ldyBDbGlwYm9hcmRRdChDbGlwYm9hcmRXcml0YWJsZSwgdHJ1ZSk7CisgICAgcmV0dXJuIENs
aXBib2FyZFF0OjpjcmVhdGUoQ2xpcGJvYXJkV3JpdGFibGUsIHRydWUpOwogfQogCiBib29sIEV2
ZW50SGFuZGxlcjo6cGFzc01vdXNlUHJlc3NFdmVudFRvU3ViZnJhbWUoTW91c2VFdmVudFdpdGhI
aXRUZXN0UmVzdWx0cyYgbWV2LCBGcmFtZSogc3ViZnJhbWUpCkluZGV4OiBXZWJDb3JlL3BhZ2Uv
d2luL0V2ZW50SGFuZGxlcldpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL3dpbi9F
dmVudEhhbmRsZXJXaW4uY3BwCShyZXZpc2lvbiAzNDUzNCkKKysrIFdlYkNvcmUvcGFnZS93aW4v
RXZlbnRIYW5kbGVyV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTk0LDExICs5
NCwxMSBAQCBib29sIEV2ZW50SGFuZGxlcjo6ZXZlbnRBY3RpdmF0ZWRWaWV3KGNvCiAgICAgcmV0
dXJuIGV2ZW50LmFjdGl2YXRlZFdlYlZpZXcoKTsKIH0KIAotQ2xpcGJvYXJkKiBFdmVudEhhbmRs
ZXI6OmNyZWF0ZURyYWdnaW5nQ2xpcGJvYXJkKCkgY29uc3QKK1Bhc3NSZWZQdHI8Q2xpcGJvYXJk
PiBFdmVudEhhbmRsZXI6OmNyZWF0ZURyYWdnaW5nQ2xpcGJvYXJkKCkgY29uc3QKIHsKICAgICBD
T01QdHI8V0NEYXRhT2JqZWN0PiBkYXRhT2JqZWN0OwogICAgIFdDRGF0YU9iamVjdDo6Y3JlYXRl
SW5zdGFuY2UoJmRhdGFPYmplY3QpOwotICAgIHJldHVybiBuZXcgQ2xpcGJvYXJkV2luKHRydWUs
IGRhdGFPYmplY3QuZ2V0KCksIENsaXBib2FyZFdyaXRhYmxlKTsKKyAgICByZXR1cm4gQ2xpcGJv
YXJkV2luOjpjcmVhdGUodHJ1ZSwgZGF0YU9iamVjdC5nZXQoKSwgQ2xpcGJvYXJkV3JpdGFibGUp
OwogfQogCiB2b2lkIEV2ZW50SGFuZGxlcjo6Zm9jdXNEb2N1bWVudFZpZXcoKQpJbmRleDogV2Vi
Q29yZS9wYWdlL3d4L0V2ZW50SGFuZGxlcld4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bh
Z2Uvd3gvRXZlbnRIYW5kbGVyV3guY3BwCShyZXZpc2lvbiAzNDUzNCkKKysrIFdlYkNvcmUvcGFn
ZS93eC9FdmVudEhhbmRsZXJXeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDkgKzI0LDkgQEAK
ICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgiCiAK
ICNpbmNsdWRlICJDbGlwYm9hcmRXeC5oIgotI2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgogI2lu
Y2x1ZGUgIkZvY3VzQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAi
RnJhbWVWaWV3LmgiCkBAIC05MSw5ICs5MSw5IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpldmVudEFj
dGl2YXRlZFZpZXcoY28KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLUNsaXBib2FyZCogRXZlbnRI
YW5kbGVyOjpjcmVhdGVEcmFnZ2luZ0NsaXBib2FyZCgpIGNvbnN0IAorUGFzc1JlZlB0cjxDbGlw
Ym9hcmQ+IEV2ZW50SGFuZGxlcjo6Y3JlYXRlRHJhZ2dpbmdDbGlwYm9hcmQoKSBjb25zdCAKIHsK
LSAgICByZXR1cm4gbmV3IENsaXBib2FyZFd4KENsaXBib2FyZFdyaXRhYmxlLCB0cnVlKTsKKyAg
ICByZXR1cm4gQ2xpcGJvYXJkV3g6OmNyZWF0ZShDbGlwYm9hcmRXcml0YWJsZSwgdHJ1ZSk7CiB9
CiAKIH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vQ3Vyc29yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9DdXJzb3IuaAkocmV2aXNpb24gMzQ1MzQpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL0N1cnNvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMxLDYg
KzMxLDcgQEAKICNpZiBQTEFURk9STShXSU4pCiB0eXBlZGVmIHN0cnVjdCBISUNPTl9fKiBISUNP
TjsKIHR5cGVkZWYgSElDT04gSENVUlNPUjsKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgog
I2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2Vs
aWYgUExBVEZPUk0oR1RLKQpAQCAtNTksMTIgKzYwLDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICNpZiBQTEFURk9STShXSU4pCiAgICAgY2xhc3MgU2hhcmVkQ3Vyc29yIDogcHVibGljIFJlZkNv
dW50ZWQ8U2hhcmVkQ3Vyc29yPiB7CiAgICAgcHVibGljOgotICAgICAgICBTaGFyZWRDdXJzb3Io
SENVUlNPUiBuYXRpdmVDdXJzb3IpIDogUmVmQ291bnRlZDxTaGFyZWRDdXJzb3I+KDApLCBtX25h
dGl2ZUN1cnNvcihuYXRpdmVDdXJzb3IpIHt9Ci0gICAgICAgIH5TaGFyZWRDdXJzb3IoKSB7Ci0g
ICAgICAgICAgICBEZXN0cm95SWNvbihtX25hdGl2ZUN1cnNvcik7Ci0gICAgICAgIH0KKyAgICAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8U2hhcmVkQ3Vyc29yPiBjcmVhdGUoSENVUlNPUiBuYXRpdmVD
dXJzb3IpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBTaGFyZWRDdXJzb3IobmF0aXZlQ3Vyc29yKSk7
IH0KKyAgICAgICAgflNoYXJlZEN1cnNvcigpIHsgRGVzdHJveUljb24obV9uYXRpdmVDdXJzb3Ip
OyB9CiAgICAgICAgIEhDVVJTT1IgbmF0aXZlQ3Vyc29yKCkgY29uc3QgeyByZXR1cm4gbV9uYXRp
dmVDdXJzb3I7IH0KICAgICBwcml2YXRlOgorICAgICAgICBTaGFyZWRDdXJzb3IoSENVUlNPUiBu
YXRpdmVDdXJzb3IpIDogbV9uYXRpdmVDdXJzb3IobmF0aXZlQ3Vyc29yKSB7IH0KICAgICAgICAg
SENVUlNPUiBtX25hdGl2ZUN1cnNvcjsKICAgICB9OwogICAgIHR5cGVkZWYgUmVmUHRyPFNoYXJl
ZEN1cnNvcj4gUGxhdGZvcm1DdXJzb3I7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL0RyYWdEYXRh
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9EcmFnRGF0YS5oCShyZXZpc2lvbiAz
NDUzNCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vRHJhZ0RhdGEuaAkod29ya2luZyBjb3B5KQpAQCAt
ODQsNyArODQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGNvbnN0IEludFBvaW50
JiBnbG9iYWxQb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZ2xvYmFsUG9zaXRpb247IH0KICAg
ICAgICAgRHJhZ0RhdGFSZWYgcGxhdGZvcm1EYXRhKCkgY29uc3QgeyByZXR1cm4gbV9wbGF0Zm9y
bURyYWdEYXRhOyB9CiAgICAgICAgIERyYWdPcGVyYXRpb24gZHJhZ2dpbmdTb3VyY2VPcGVyYXRp
b25NYXNrKCkgY29uc3QgeyByZXR1cm4gbV9kcmFnZ2luZ1NvdXJjZU9wZXJhdGlvbk1hc2s7IH0K
LSAgICAgICAgQ2xpcGJvYXJkKiBjcmVhdGVDbGlwYm9hcmQoQ2xpcGJvYXJkQWNjZXNzUG9saWN5
KSBjb25zdDsKKyAgICAgICAgUGFzc1JlZlB0cjxDbGlwYm9hcmQ+IGNyZWF0ZUNsaXBib2FyZChD
bGlwYm9hcmRBY2Nlc3NQb2xpY3kpIGNvbnN0OwogICAgICAgICBib29sIGNvbnRhaW5zVVJMKCkg
Y29uc3Q7CiAgICAgICAgIGJvb2wgY29udGFpbnNQbGFpblRleHQoKSBjb25zdDsKICAgICAgICAg
Ym9vbCBjb250YWluc0NvbXBhdGlibGVDb250ZW50KCkgY29uc3Q7CkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL1BvcHVwTWVudS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vUG9wdXBN
ZW51LmgJKHJldmlzaW9uIDM0NTM0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9Qb3B1cE1lbnUuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYg
QXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIxLDExICsy
MSwxMCBAQAogI2lmbmRlZiBQb3B1cE1lbnVfaAogI2RlZmluZSBQb3B1cE1lbnVfaAogCi0jaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLQogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRl
ICJQb3B1cE1lbnVDbGllbnQuaCIKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKICNpZiBQTEFURk9STShNQUMpCiAjaW5jbHVkZSA8d3Rm
L1JldGFpblB0ci5oPgpAQCAtNzMsNyArNzIsNyBAQCBjbGFzcyBQb3B1cE1lbnUgOiBwdWJsaWMg
UmVmQ291bnRlZDxQb3B1CiAjZW5kaWYKIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0
cjxQb3B1cE1lbnU+IGNyZWF0ZShQb3B1cE1lbnVDbGllbnQqIGNsaWVudCkgeyByZXR1cm4gbmV3
IFBvcHVwTWVudShjbGllbnQpOyB9CisgICAgc3RhdGljIFBhc3NSZWZQdHI8UG9wdXBNZW51PiBj
cmVhdGUoUG9wdXBNZW51Q2xpZW50KiBjbGllbnQpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBQb3B1
cE1lbnUoY2xpZW50KSk7IH0KICAgICB+UG9wdXBNZW51KCk7CiAgICAgCiAgICAgdm9pZCBkaXNj
b25uZWN0Q2xpZW50KCkgeyBtX3BvcHVwQ2xpZW50ID0gMDsgfQpAQCAtMTA2LDcgKzEwNSw3IEBA
IHB1YmxpYzoKICAgICB2b2lkIGZvY3VzRmlyc3QoKTsKICAgICB2b2lkIGZvY3VzTGFzdCgpOwog
Ci0gICAgdm9pZCBwYWludChjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0LCBIREMgaGRjID0gMCk7
CisgICAgdm9pZCBwYWludChjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0LCBIREMgPSAwKTsKIAog
ICAgIEhXTkQgcG9wdXBIYW5kbGUoKSBjb25zdCB7IHJldHVybiBtX3BvcHVwOyB9CiAKQEAgLTEy
NywxNCArMTI2LDcgQEAgcHVibGljOgogI2VuZGlmCiAKIHByb3RlY3RlZDoKLSAgICBQb3B1cE1l
bnUoUG9wdXBNZW51Q2xpZW50KiBjbGllbnQpOwotCi0jaWYgUExBVEZPUk0oV0lOKQotICAgIC8v
IFNjcm9sbEJhckNsaWVudAotICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFy
Kik7Ci0gICAgdmlydHVhbCBJbnRSZWN0IHdpbmRvd0NsaXBSZWN0KCkgY29uc3Q7Ci0gICAgdmly
dHVhbCBib29sIGlzQWN0aXZlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotI2VuZGlmCisgICAg
UG9wdXBNZW51KFBvcHVwTWVudUNsaWVudCopOwogICAgIAogcHJpdmF0ZToKICAgICBQb3B1cE1l
bnVDbGllbnQqIG1fcG9wdXBDbGllbnQ7CkBAIC0xNDksNiArMTQxLDExIEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBwb3B1bGF0ZShjb25zdCBJbnRSZWN0Jik7CiAgICAgUVdlYlBvcHVwKiBtX3BvcHVw
OwogI2VsaWYgUExBVEZPUk0oV0lOKQorICAgIC8vIFNjcm9sbEJhckNsaWVudAorICAgIHZpcnR1
YWwgdm9pZCB2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFyKik7CisgICAgdmlydHVhbCBJbnRSZWN0IHdp
bmRvd0NsaXBSZWN0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGlzQWN0aXZlKCkgY29uc3Qg
eyByZXR1cm4gdHJ1ZTsgfQorCiAgICAgdm9pZCBjYWxjdWxhdGVQb3NpdGlvbkFuZFNpemUoY29u
c3QgSW50UmVjdCYsIEZyYW1lVmlldyopOwogICAgIHZvaWQgaW52YWxpZGF0ZUl0ZW0oaW50IGlu
ZGV4KTsKIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxCYXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQmFyLmNwcAkocmV2aXNpb24gMzQ1MzQpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEJhci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDA4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzQsOCArMzQsNyBAQCB1c2luZyBzdGQ6Om1pbjsKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogU2Nyb2xsYmFyOjpTY3JvbGxiYXIoU2Nyb2xsYmFyQ2xpZW50KiBjbGllbnQsIFNj
cm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZSBjb250
cm9sU2l6ZSkKLSAgICA6IFJlZkNvdW50ZWQ8U2Nyb2xsYmFyPigwKQotICAgICwgbV9jbGllbnQo
Y2xpZW50KQorICAgIDogbV9jbGllbnQoY2xpZW50KQogICAgICwgbV9vcmllbnRhdGlvbihvcmll
bnRhdGlvbikKICAgICAsIG1fY29udHJvbFNpemUoY29udHJvbFNpemUpCiAgICAgLCBtX3Zpc2li
bGVTaXplKDApCkBAIC0xMTQsNCArMTEzLDUgQEAgYm9vbCBTY3JvbGxiYXI6OnNjcm9sbChTY3Jv
bGxEaXJlY3Rpb24gZAogICAgIC8vIHJldHVybiB0cnVlIGV2ZW4gaWYgdGhlIGludGVnZXIgdmFs
dWUgZGlkIG5vdCBjaGFuZ2Ugc28gdGhhdCBzY3JvbGwgZXZlbnQgZ2V0cyBlYXRlbgogICAgIHJl
dHVybiB0cnVlOwogfQorCiB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL1NlYXJjaFBvcHVwTWVu
dS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vU2VhcmNoUG9wdXBNZW51LmgJKHJl
dmlzaW9uIDM0NTM0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9TZWFyY2hQb3B1cE1lbnUuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBw
bGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIyLDcgKzIyLDYg
QEAKICNkZWZpbmUgU2VhcmNoUG9wdXBNZW51X2gKIAogI2luY2x1ZGUgIlBvcHVwTWVudS5oIgot
I2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CkBAIC0zMSwxNiArMzAsMTUgQEAgY2xhc3MgQXRvbWljU3RyaW5nOwog
CiBjbGFzcyBTZWFyY2hQb3B1cE1lbnUgOiBwdWJsaWMgUG9wdXBNZW51IHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxTZWFyY2hQb3B1cE1lbnU+IGNyZWF0ZShQb3B1cE1lbnVDbGll
bnQqIGNsaWVudCkgeyByZXR1cm4gbmV3IFNlYXJjaFBvcHVwTWVudShjbGllbnQpOyB9CisgICAg
c3RhdGljIFBhc3NSZWZQdHI8U2VhcmNoUG9wdXBNZW51PiBjcmVhdGUoUG9wdXBNZW51Q2xpZW50
KiBjbGllbnQpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBTZWFyY2hQb3B1cE1lbnUoY2xpZW50KSk7
IH0KIAogICAgIHZvaWQgc2F2ZVJlY2VudFNlYXJjaGVzKGNvbnN0IEF0b21pY1N0cmluZyYgbmFt
ZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHNlYXJjaEl0ZW1zKTsKICAgICB2b2lkIGxvYWRSZWNl
bnRTZWFyY2hlcyhjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIFZlY3RvcjxTdHJpbmc+JiBzZWFy
Y2hJdGVtcyk7CiAKICAgICBib29sIGVuYWJsZWQoKTsKICAgICAKLXByb3RlY3RlZDoKLSAgICBT
ZWFyY2hQb3B1cE1lbnUoUG9wdXBNZW51Q2xpZW50KiBjbGllbnQpOwotCitwcml2YXRlOgorICAg
IFNlYXJjaFBvcHVwTWVudShQb3B1cE1lbnVDbGllbnQqKTsKIH07CiAKIH0KSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEZhbWlseS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RmFtaWx5LmNwcAkocmV2aXNpb24gMzQ1MzQpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYW1pbHkuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCBBcHBsZSBDb21wdXRlciwg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTI5LDggKzI5LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogRm9udEZhbWls
eTo6Rm9udEZhbWlseShjb25zdCBGb250RmFtaWx5JiBvdGhlcikKLSAgICA6IFJlZkNvdW50ZWQ8
Rm9udEZhbWlseT4oMCkKLSAgICAsIG1fZmFtaWx5KG90aGVyLm1fZmFtaWx5KQorICAgIDogbV9m
YW1pbHkob3RoZXIubV9mYW1pbHkpCiAgICAgLCBtX25leHQob3RoZXIubV9uZXh0KQogewogfQpA
QCAtNDIsMTQgKzQxLDE5IEBAIEZvbnRGYW1pbHkmIEZvbnRGYW1pbHk6Om9wZXJhdG9yPShjb25z
dCAKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKLWJvb2wgRm9udEZhbWlseTo6b3BlcmF0b3I9PShj
b25zdCBGb250RmFtaWx5ICZjb21wYXJlRm9udEZhbWlseSkgY29uc3QKK2Jvb2wgb3BlcmF0b3I9
PShjb25zdCBGb250RmFtaWx5JiBhLCBjb25zdCBGb250RmFtaWx5JiBiKQogewotICAgIGlmICgo
IW1fbmV4dCAmJiBjb21wYXJlRm9udEZhbWlseS5tX25leHQpIHx8IAotICAgICAgICAobV9uZXh0
ICYmICFjb21wYXJlRm9udEZhbWlseS5tX25leHQpIHx8Ci0gICAgICAgICgobV9uZXh0ICYmIGNv
bXBhcmVGb250RmFtaWx5Lm1fbmV4dCkgJiYgKCptX25leHQgIT0gKihjb21wYXJlRm9udEZhbWls
eS5tX25leHQpKSkpCisgICAgaWYgKGEuZmFtaWx5KCkgIT0gYi5mYW1pbHkoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIAotICAgIHJldHVybiBtX2ZhbWlseSA9PSBjb21wYXJlRm9udEZh
bWlseS5tX2ZhbWlseTsKKyAgICBjb25zdCBGb250RmFtaWx5KiBhcDsKKyAgICBjb25zdCBGb250
RmFtaWx5KiBicDsKKyAgICBmb3IgKGFwID0gYS5uZXh0KCksIGJwID0gYi5uZXh0KCk7IGFwICE9
IGJwOyBhcCA9IGFwLT5uZXh0KCksIGJwID0gYnAtPm5leHQoKSkgeworICAgICAgICBpZiAoIWFw
IHx8ICFicCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKGFwLT5mYW1p
bHkoKSAhPSBicC0+ZmFtaWx5KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
ICAgIHJldHVybiB0cnVlOwogfQogCiB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ZvbnRGYW1pbHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRGYW1pbHkuaAkocmV2aXNpb24gMzQ1MzQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ZvbnRGYW1pbHkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDMsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCwx
NCArMjgsMTUgQEAKIAogI2luY2x1ZGUgIkF0b21pY1N0cmluZy5oIgogI2luY2x1ZGUgPHd0Zi9S
ZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9MaXN0
UmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRm9udEZhbWlseSA6IHB1
YmxpYyBSZWZDb3VudGVkPEZvbnRGYW1pbHk+IHsKK2NsYXNzIFNoYXJlZEZvbnRGYW1pbHk7CisK
K2NsYXNzIEZvbnRGYW1pbHkgewogcHVibGljOgotICAgIEZvbnRGYW1pbHkoKSA6IFJlZkNvdW50
ZWQ8Rm9udEZhbWlseT4oMCkgeyB9Ci0gICAgCisgICAgRm9udEZhbWlseSgpIHsgfQogICAgIEZv
bnRGYW1pbHkoY29uc3QgRm9udEZhbWlseSYpOyAgICAKICAgICBGb250RmFtaWx5JiBvcGVyYXRv
cj0oY29uc3QgRm9udEZhbWlseSYpOwogCkBAIC00MywxOSArNDQsNDUgQEAgcHVibGljOgogICAg
IGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5KCkgY29uc3QgeyByZXR1cm4gbV9mYW1pbHk7IH0K
ICAgICBib29sIGZhbWlseUlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2ZhbWlseS5pc0VtcHR5
KCk7IH0KIAotICAgIEZvbnRGYW1pbHkqIG5leHQoKSB7IHJldHVybiBtX25leHQuZ2V0KCk7IH0K
LSAgICBjb25zdCBGb250RmFtaWx5KiBuZXh0KCkgY29uc3QgeyByZXR1cm4gbV9uZXh0LmdldCgp
OyB9CisgICAgY29uc3QgRm9udEZhbWlseSogbmV4dCgpIGNvbnN0OwogCi0gICAgdm9pZCBhcHBl
bmRGYW1pbHkoUGFzc1JlZlB0cjxGb250RmFtaWx5PiBmYW1pbHkpIHsgbV9uZXh0ID0gZmFtaWx5
OyB9CisgICAgdm9pZCBhcHBlbmRGYW1pbHkoUGFzc1JlZlB0cjxTaGFyZWRGb250RmFtaWx5Pik7
CisgICAgUGFzc1JlZlB0cjxTaGFyZWRGb250RmFtaWx5PiByZWxlYXNlTmV4dCgpOwogCi0gICAg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IEZvbnRGYW1pbHkmKSBjb25zdDsKLSAgICBib29sIG9wZXJh
dG9yIT0oY29uc3QgRm9udEZhbWlseSYgeCkgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSB4KTsg
fQotICAgIAogcHJpdmF0ZToKICAgICBBdG9taWNTdHJpbmcgbV9mYW1pbHk7Ci0gICAgUmVmUHRy
PEZvbnRGYW1pbHk+IG1fbmV4dDsKKyAgICBMaXN0UmVmUHRyPFNoYXJlZEZvbnRGYW1pbHk+IG1f
bmV4dDsKIH07CiAKK2NsYXNzIFNoYXJlZEZvbnRGYW1pbHkgOiBwdWJsaWMgRm9udEZhbWlseSwg
cHVibGljIFJlZkNvdW50ZWQ8U2hhcmVkRm9udEZhbWlseT4geworcHVibGljOgorICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFNoYXJlZEZvbnRGYW1pbHk+IGNyZWF0ZSgpCisgICAgeworICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IFNoYXJlZEZvbnRGYW1pbHkpOworICAgIH0KKworcHJpdmF0ZToK
KyAgICBTaGFyZWRGb250RmFtaWx5KCkgeyB9Cit9OworCitib29sIG9wZXJhdG9yPT0oY29uc3Qg
Rm9udEZhbWlseSYsIGNvbnN0IEZvbnRGYW1pbHkmKTsKK2lubGluZSBib29sIG9wZXJhdG9yIT0o
Y29uc3QgRm9udEZhbWlseSYgYSwgY29uc3QgRm9udEZhbWlseSYgYikgeyByZXR1cm4gIShhID09
IGIpOyB9CisKK2lubGluZSBjb25zdCBGb250RmFtaWx5KiBGb250RmFtaWx5OjpuZXh0KCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9uZXh0LmdldCgpOworfQorCitpbmxpbmUgdm9pZCBGb250RmFt
aWx5OjphcHBlbmRGYW1pbHkoUGFzc1JlZlB0cjxTaGFyZWRGb250RmFtaWx5PiBmYW1pbHkpCit7
CisgICAgbV9uZXh0ID0gZmFtaWx5OworfQorCitpbmxpbmUgUGFzc1JlZlB0cjxTaGFyZWRGb250
RmFtaWx5PiBGb250RmFtaWx5OjpyZWxlYXNlTmV4dCgpCit7CisgICAgcmV0dXJuIG1fbmV4dC5y
ZWxlYXNlKCk7Cit9CisKIH0KIAogI2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ljb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ljb24u
aAkocmV2aXNpb24gMzQ1MzQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ljb24uaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYs
IDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwpAQCAtNDcsMjggKzQ3LDIzIEBAIGNsYXNzIFN0cmluZzsKICAgICAKIGNsYXNz
IEljb24gOiBwdWJsaWMgUmVmQ291bnRlZDxJY29uPiB7CiBwdWJsaWM6Ci0gICAgSWNvbigpOwot
ICAgIH5JY29uKCk7Ci0gICAgCiAgICAgc3RhdGljIFBhc3NSZWZQdHI8SWNvbj4gbmV3SWNvbkZv
ckZpbGUoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSk7CisgICAgfkljb24oKTsKIAogICAgIHZvaWQg
cGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpOwogCi0jaWYgUExBVEZPUk0o
V0lOKQotICAgIEljb24oSElDT04pOwotI2VuZGlmCi0KIHByaXZhdGU6CiAjaWYgUExBVEZPUk0o
TUFDKQogICAgIEljb24oTlNJbWFnZSopOwotI2VuZGlmCi0jaWYgUExBVEZPUk0oTUFDKQogICAg
IFJldGFpblB0cjxOU0ltYWdlPiBtX25zSW1hZ2U7CiAjZWxpZiBQTEFURk9STShXSU4pCisgICAg
SWNvbihISUNPTik7CiAgICAgSElDT04gbV9oSWNvbjsKICNlbGlmIFBMQVRGT1JNKFFUKQorICAg
IEljb24oKTsKICAgICBRSWNvbiBtX2ljb247CiAjZWxpZiBQTEFURk9STShHVEspCisgICAgSWNv
bigpOwogICAgIEdka1BpeGJ1ZiogbV9pY29uOwogI2VuZGlmCiB9OwpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ndGsvSWNvbkd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ndGsvSWNvbkd0ay5jcHAJKHJldmlzaW9uIDM0NTM0KQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvSWNvbkd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQxLDE1ICs0MSwxMyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBJY29uOjpJY29uKCkKLSAg
ICA6IFJlZkNvdW50ZWQ8SWNvbj4oMCkKLSAgICAsIG1faWNvbigwKQorICAgIDogbV9pY29uKDAp
CiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAogSWNvbjo6fkljb24oKQogewotICAgIGlm
KG1faWNvbikKKyAgICBpZiAobV9pY29uKQogICAgICAgICBnX29iamVjdF91bnJlZihtX2ljb24p
OwogfQogCkBAIC05OCw5ICs5NiwxMSBAQCBQYXNzUmVmUHRyPEljb24+IEljb246Om5ld0ljb25G
b3JGaWxlKGNvCiAgICAgU3RyaW5nIE1JTUVUeXBlID0gTUlNRVR5cGVSZWdpc3RyeTo6Z2V0TUlN
RVR5cGVGb3JQYXRoKGZpbGVuYW1lKTsKICAgICBTdHJpbmcgaWNvbk5hbWUgPSBsb29rdXBJY29u
TmFtZShNSU1FVHlwZSk7CiAKLSAgICBJY29uKiBpY29uID0gbmV3IEljb247CisgICAgUmVmUHRy
PEljb24+IGljb24gPSBhZG9wdFJlZihuZXcgSWNvbik7CiAgICAgaWNvbi0+bV9pY29uID0gZ3Rr
X2ljb25fdGhlbWVfbG9hZF9pY29uKGd0a19pY29uX3RoZW1lX2dldF9kZWZhdWx0KCksIGljb25O
YW1lLnV0ZjgoKS5kYXRhKCksIDE2LCBHVEtfSUNPTl9MT09LVVBfVVNFX0JVSUxUSU4sIE5VTEwp
OwotICAgIHJldHVybiBpY29uLT5tX2ljb24gPyBpY29uIDogMDsKKyAgICBpZiAoIWljb24tPm1f
aWNvbikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGljb24ucmVsZWFzZSgpOwogfQog
CiB2b2lkIEljb246OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVj
dCYgcmVjdCkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ljb25NYWMubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvSWNvbk1hYy5tbQko
cmV2aXNpb24gMzQ1MzQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JY29uTWFj
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCkBAIC0yOCwxNCArMjgsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLUljb246Okljb24oKQotICAgIDogUmVmQ291bnRlZDxJY29uPigwKQotewotfQotCiBJY29u
OjpJY29uKE5TSW1hZ2UgKmltYWdlKQotICAgIDogUmVmQ291bnRlZDxJY29uPigwKQotICAgICwg
bV9uc0ltYWdlKGltYWdlKQorICAgIDogbV9uc0ltYWdlKGltYWdlKQogewogICAgIC8vIE5lZWQg
dGhpcyBiZWNhdXNlIFdlYkNvcmUgdXNlcyBBcHBLaXQncyBmbGlwcGVkIGNvb3JkaW5hdGUgc3lz
dGVtIGV4Y2x1c2l2ZWx5LgogICAgIFtpbWFnZSBzZXRGbGlwcGVkOllFU107CkBAIC01Niw3ICs1
MCw3IEBAIFBhc3NSZWZQdHI8SWNvbj4gSWNvbjo6bmV3SWNvbkZvckZpbGUoY28KICAgICBpZiAo
IWltYWdlKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIHJldHVybiBuZXcgSWNvbihpbWFnZSk7
CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJY29uKGltYWdlKSk7CiB9CiAKIHZvaWQgSWNvbjo6
cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JY29uUXQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSWNvblF0LmNwcAkocmV2aXNpb24gMzQ1MzQp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ljb25RdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM0LDcgKzM0LDYgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogSWNvbjo6SWNvbigp
Ci0gICAgOiBSZWZDb3VudGVkPEljb24+KDApCiB7CiB9CiAKQEAgLTQ0LDkgKzQzLDkgQEAgSWNv
bjo6fkljb24oKQogICAgIAogUGFzc1JlZlB0cjxJY29uPiBJY29uOjpuZXdJY29uRm9yRmlsZShj
b25zdCBTdHJpbmcmIGZpbGVuYW1lKQogewotICAgIEljb24gKmkgPSBuZXcgSWNvbjsKKyAgICBS
ZWZQdHI8SWNvbj4gaSA9IGFkb3B0UmVmKG5ldyBJY29uKTsKICAgICBpLT5tX2ljb24gPSBRSWNv
bihmaWxlbmFtZSk7Ci0gICAgcmV0dXJuIFBhc3NSZWZQdHI8SWNvbj4oaSk7CisgICAgcmV0dXJu
IGkucmVsZWFzZSgpOwogfQogCiB2b2lkIEljb246OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY3R4
LCBjb25zdCBJbnRSZWN0JiByZWN0KQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vSWNvbldpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vSWNvbldpbi5jcHAJKHJldmlzaW9uIDM0NTM0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vSWNvbldpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
KiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLgorKiBDb3B5cmlnaHQgKEMpIDIw
MDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogKgogKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCkBAIC0yNywyMiArMjcsMTUgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1JY29u
OjpJY29uKCkKLSAgICA6IFJlZkNvdW50ZWQ8SWNvbj4oMCkKLSAgICAsIG1faEljb24oMCkKLXsK
LX0KLQogSWNvbjo6SWNvbihISUNPTiBpY29uKQotICAgIDogUmVmQ291bnRlZDxJY29uPigwKQot
ICAgICwgbV9oSWNvbihpY29uKQorICAgIDogbV9oSWNvbihpY29uKQogeworICAgIEFTU0VSVChp
Y29uKTsKIH0KIAogSWNvbjo6fkljb24oKQogewotICAgIGlmIChtX2hJY29uKQotICAgICAgICBE
ZXN0cm95SWNvbihtX2hJY29uKTsKKyAgICBEZXN0cm95SWNvbihtX2hJY29uKTsKIH0KIAogUGFz
c1JlZlB0cjxJY29uPiBJY29uOjpuZXdJY29uRm9yRmlsZShjb25zdCBTdHJpbmcmIGZpbGVuYW1l
KQpAQCAtNTQsOSArNDcsNyBAQCBQYXNzUmVmUHRyPEljb24+IEljb246Om5ld0ljb25Gb3JGaWxl
KGNvCiAgICAgaWYgKCFTSEdldEZpbGVJbmZvKHRtcEZpbGVuYW1lLmNoYXJhY3RlcnNXaXRoTnVs
bFRlcm1pbmF0aW9uKCksIDAsICZzZmksIHNpemVvZihzZmkpLCBTSEdGSV9JQ09OIHwgU0hHRklf
U0hFTExJQ09OU0laRSB8IFNIR0ZJX1NNQUxMSUNPTikpCiAgICAgICAgIHJldHVybiAwOwogCi0g
ICAgSWNvbiogaWNvbiA9IG5ldyBJY29uKCk7ICAKLSAgICBpY29uLT5tX2hJY29uID0gc2ZpLmhJ
Y29uOwotICAgIHJldHVybiBpY29uOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgSWNvbihzZmku
aEljb24pKTsKIH0KIAogdm9pZCBJY29uOjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQs
IGNvbnN0IEludFJlY3QmIHIpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2d0ay9DbGlwYm9hcmRH
dGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL0NsaXBib2FyZEd0ay5j
cHAJKHJldmlzaW9uIDM0NTM0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkR3Rr
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsOSArMjMsMTAgQEAKICNpbmNsdWRlICJFZGl0b3Iu
aCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgeworCiBQYXNzUmVmUHRyPENsaXBib2FyZD4gRWRpdG9y
OjpuZXdHZW5lcmFsQ2xpcGJvYXJkKENsaXBib2FyZEFjY2Vzc1BvbGljeSBwb2xpY3kpCiB7Ci0g
ICAgcmV0dXJuIG5ldyBDbGlwYm9hcmRHdGsocG9saWN5LCBmYWxzZSk7CisgICAgcmV0dXJuIENs
aXBib2FyZEd0azo6Y3JlYXRlKHBvbGljeSwgZmFsc2UpOwogfQogCiBDbGlwYm9hcmRHdGs6OkNs
aXBib2FyZEd0ayhDbGlwYm9hcmRBY2Nlc3NQb2xpY3kgcG9saWN5LCBib29sIGZvckRyYWdnaW5n
KQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkR3RrLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkR3RrLmgJKHJldmlzaW9uIDM0NTM0KQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkR3RrLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA3LCBI
b2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMzYsOSArMzYs
MTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIC8vIENyZWF0ZWQgZnJvbSB0aGUgRXZlbnRI
YW5kbGVyR3RrIHRvIGJlIHVzZWQgYnkgdGhlIGRvbQogICAgIGNsYXNzIENsaXBib2FyZEd0ayA6
IHB1YmxpYyBDbGlwYm9hcmQgewogICAgIHB1YmxpYzoKLSAgICAgICAgQ2xpcGJvYXJkR3RrKENs
aXBib2FyZEFjY2Vzc1BvbGljeSwgYm9vbCk7Ci0gICAgICAgIH5DbGlwYm9hcmRHdGsoKTsKLQor
ICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDbGlwYm9hcmRHdGs+IGNyZWF0ZShDbGlwYm9hcmRB
Y2Nlc3NQb2xpY3kgcG9saWN5LCBib29sIGlzRm9yRHJhZ2dpbmcpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2xpcGJvYXJkR3RrKHBvbGljeSwgaXNGb3JEcmFn
Z2luZykpOworICAgICAgICB9CisgICAgICAgIHZpcnR1YWwgfkNsaXBib2FyZEd0aygpOwogCiAg
ICAgICAgIHZvaWQgY2xlYXJEYXRhKGNvbnN0IFN0cmluZyYpOwogICAgICAgICB2b2lkIGNsZWFy
QWxsRGF0YSgpOwpAQCAtNTgsNiArNjAsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IHZpcnR1YWwgdm9pZCB3cml0ZVJhbmdlKFJhbmdlKiwgRnJhbWUqKTsKIAogICAgICAgICB2aXJ0
dWFsIGJvb2wgaGFzRGF0YSgpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgQ2xpcGJvYXJkR3Rr
KENsaXBib2FyZEFjY2Vzc1BvbGljeSwgYm9vbCk7CiAgICAgfTsKIH0KIApJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvUGxhdGZvcm1TY3JvbGxCYXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL2d0ay9QbGF0Zm9ybVNjcm9sbEJhci5oCShyZXZpc2lvbiAzNDUzNCkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vZ3RrL1BsYXRmb3JtU2Nyb2xsQmFyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2IEFwcGxlIENvbXB1
dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsOCArMjYsOSBAQAogI2lmbmRlZiBQbGF0Zm9ybVNjcm9s
bEJhcl9oCiAjZGVmaW5lIFBsYXRmb3JtU2Nyb2xsQmFyX2gKIAotI2luY2x1ZGUgIldpZGdldC5o
IgogI2luY2x1ZGUgIlNjcm9sbEJhci5oIgorI2luY2x1ZGUgIldpZGdldC5oIgorI2luY2x1ZGUg
PHd0Zi9QYXNzUmVmUHRyLmg+CiAKIHR5cGVkZWYgc3RydWN0IF9HdGtBZGp1c3RtZW50IEd0a0Fk
anVzdG1lbnQ7CiAKQEAgLTM1LDcgKzM2LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xh
c3MgUGxhdGZvcm1TY3JvbGxiYXIgOiBwdWJsaWMgV2lkZ2V0LCBwdWJsaWMgU2Nyb2xsYmFyIHsK
IHB1YmxpYzoKLSAgICBQbGF0Zm9ybVNjcm9sbGJhcihTY3JvbGxiYXJDbGllbnQqLCBTY3JvbGxi
YXJPcmllbnRhdGlvbiwgU2Nyb2xsYmFyQ29udHJvbFNpemUpOworICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFBsYXRmb3JtU2Nyb2xsYmFyPiBjcmVhdGUoU2Nyb2xsYmFyQ2xpZW50KiBjbGllbnQsIFNj
cm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZSBzaXpl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQbGF0Zm9ybVNjcm9sbGJhcihj
bGllbnQsIG9yaWVudGF0aW9uLCBzaXplKSk7CisgICAgfQogICAgIHZpcnR1YWwgflBsYXRmb3Jt
U2Nyb2xsYmFyKCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNXaWRnZXQoKSBjb25zdCB7IHJldHVy
biB0cnVlOyB9CkBAIC01MCw2ICs1NCw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgaW50IHZlcnRp
Y2FsU2Nyb2xsYmFyV2lkdGgoKTsKIAogcHJvdGVjdGVkOgorICAgIFBsYXRmb3JtU2Nyb2xsYmFy
KFNjcm9sbGJhckNsaWVudCosIFNjcm9sbGJhck9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9s
U2l6ZSk7CisKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGh1bWJQb3NpdGlvbigpOwogICAgIHZp
cnR1YWwgdm9pZCB1cGRhdGVUaHVtYlByb3BvcnRpb24oKTsKICAgICB2aXJ0dWFsIHZvaWQgZ2Vv
bWV0cnlDaGFuZ2VkKCk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2d0ay9Qb3B1cE1lbnVHdGsu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL1BvcHVwTWVudUd0ay5jcHAJ
KHJldmlzaW9uIDM0NTM0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUG9wdXBNZW51R3RrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBUaGlzIGZpbGUgaXMgcGFy
dCBvZiB0aGUgcG9wdXAgbWVudSBpbXBsZW1lbnRhdGlvbiBmb3IgPHNlbGVjdD4gZWxlbWVudHMg
aW4gV2ViQ29yZS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLgor
ICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxA
Z21haWwuY29tCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4KICAqCkBAIC0z
NCw4ICszNCw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFBvcHVwTWVudTo6UG9wdXBNZW51
KFBvcHVwTWVudUNsaWVudCogY2xpZW50KQotICAgIDogUmVmQ291bnRlZDxQb3B1cE1lbnU+KDAp
Ci0gICAgLCBtX3BvcHVwQ2xpZW50KGNsaWVudCkKKyAgICA6IG1fcG9wdXBDbGllbnQoY2xpZW50
KQogICAgICwgbV9wb3B1cCgwKQogewogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Ny
b2xsVmlld0d0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xs
Vmlld0d0ay5jcHAJKHJldmlzaW9uIDM0NTM0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Ny
b2xsVmlld0d0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIENvbXB1dGVy
LCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFl
bCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQogICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdl
ciBIYW5zIFBldGVyIEZyZXl0aGVyCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0
ZC4KQEAgLTUyLDEwICs1MiwxNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFNjcm9s
bFZpZXdTY3JvbGxiYXIgOiBwdWJsaWMgUGxhdGZvcm1TY3JvbGxiYXIgewogcHVibGljOgorICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFNjcm9sbFZpZXdTY3JvbGxiYXI+IGNyZWF0ZShTY3JvbGxiYXJD
bGllbnQqIGNsaWVudCwgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sIFNjcm9sbGJh
ckNvbnRyb2xTaXplIHNpemUpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNj
cm9sbFZpZXdTY3JvbGxiYXIoY2xpZW50LCBvcmllbnRhdGlvbiwgc2l6ZSkpOworICAgIH0KKwor
cHJpdmF0ZToKICAgICBTY3JvbGxWaWV3U2Nyb2xsYmFyKFNjcm9sbGJhckNsaWVudCosIFNjcm9s
bGJhck9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZSk7CiAKLXByb3RlY3RlZDoKLSAg
ICB2b2lkIGdlb21ldHJ5Q2hhbmdlZCgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBnZW9tZXRy
eUNoYW5nZWQoKSBjb25zdDsKIH07CiAKIGNsYXNzIFNjcm9sbFZpZXc6OlNjcm9sbFZpZXdQcml2
YXRlIDogcHVibGljIFNjcm9sbGJhckNsaWVudApAQCAtMTQyLDcgKzE0Nyw3IEBAIHZvaWQgU2Ny
b2xsVmlldzo6U2Nyb2xsVmlld1ByaXZhdGU6OnNldEgKIHsKICAgICBpZiAoU2Nyb2xsYmFyOjpo
YXNQbGF0Zm9ybVNjcm9sbGJhcnMoKSkgewogICAgICAgICBpZiAoaGFzQmFyICYmICFoQmFyICYm
ICFob3Jpem9udGFsQWRqdXN0bWVudCkgewotICAgICAgICAgICAgaEJhciA9IG5ldyBTY3JvbGxW
aWV3U2Nyb2xsYmFyKHRoaXMsIEhvcml6b250YWxTY3JvbGxiYXIsIFJlZ3VsYXJTY3JvbGxiYXIp
OworICAgICAgICAgICAgaEJhciA9IFNjcm9sbFZpZXdTY3JvbGxiYXI6OmNyZWF0ZSh0aGlzLCBI
b3Jpem9udGFsU2Nyb2xsYmFyLCBSZWd1bGFyU2Nyb2xsYmFyKTsKICAgICAgICAgICAgIHZpZXct
PmFkZENoaWxkKGhCYXIuZ2V0KCkpOwogICAgICAgICB9IGVsc2UgaWYgKCFoYXNCYXIgJiYgaEJh
cikgewogICAgICAgICAgICAgdmlldy0+cmVtb3ZlQ2hpbGQoaEJhci5nZXQoKSk7CkBAIC0xNTUs
NyArMTYwLDcgQEAgdm9pZCBTY3JvbGxWaWV3OjpTY3JvbGxWaWV3UHJpdmF0ZTo6c2V0SAogewog
ICAgIGlmIChTY3JvbGxiYXI6Omhhc1BsYXRmb3JtU2Nyb2xsYmFycygpKSB7CiAgICAgICAgIGlm
IChoYXNCYXIgJiYgIXZCYXIgJiYgIXZlcnRpY2FsQWRqdXN0bWVudCkgewotICAgICAgICAgICAg
dkJhciA9IG5ldyBTY3JvbGxWaWV3U2Nyb2xsYmFyKHRoaXMsIFZlcnRpY2FsU2Nyb2xsYmFyLCBS
ZWd1bGFyU2Nyb2xsYmFyKTsKKyAgICAgICAgICAgIHZCYXIgPSBTY3JvbGxWaWV3U2Nyb2xsYmFy
OjpjcmVhdGUodGhpcywgVmVydGljYWxTY3JvbGxiYXIsIFJlZ3VsYXJTY3JvbGxiYXIpOwogICAg
ICAgICAgICAgdmlldy0+YWRkQ2hpbGQodkJhci5nZXQoKSk7CiAgICAgICAgIH0gZWxzZSBpZiAo
IWhhc0JhciAmJiB2QmFyKSB7CiAgICAgICAgICAgICB2aWV3LT5yZW1vdmVDaGlsZCh2QmFyLmdl
dCgpKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbWFjL0NsaXBib2FyZE1hYy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbWFjL0NsaXBib2FyZE1hYy5oCShyZXZpc2lvbiAzNDUz
NCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vbWFjL0NsaXBib2FyZE1hYy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiBBcHBsZSBD
b21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIzLDE1ICsyMywxMSBAQAogICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CiAgKi8KIAotLy8gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIGNsaXBib2FyZCBjbGFzcyBmcm9t
IElFIHRoYXQgdGFsa3MgdG8gdGhlIENvY29hIFBhc3RlYm9hcmQKLQogI2lmbmRlZiBDbGlwYm9h
cmRNYWNfaAogI2RlZmluZSBDbGlwYm9hcmRNYWNfaAogCi0jaW5jbHVkZSAiSW50UG9pbnQuaCIK
LSNpbmNsdWRlICJDbGlwYm9hcmQuaCIKLSNpbmNsdWRlICJDbGlwYm9hcmRBY2Nlc3NQb2xpY3ku
aCIKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUNsaWVudC5oIgorI2luY2x1ZGUgIkNsaXBib2Fy
ZC5oIgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KIAogI2lmZGVmIF9fT0JKQ19fCkBAIC00
MCw3ICszNiw2IEBACiAjZWxzZQogY2xhc3MgTlNJbWFnZTsKIGNsYXNzIE5TUGFzdGVib2FyZDsK
LXR5cGVkZWYgdW5zaWduZWQgTlNEcmFnT3BlcmF0aW9uOwogI2VuZGlmCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKQEAgLTQ5LDcgKzQ0LDExIEBAIGNsYXNzIEZyYW1lOwogCiBjbGFzcyBDbGlwYm9h
cmRNYWMgOiBwdWJsaWMgQ2xpcGJvYXJkLCBwdWJsaWMgQ2FjaGVkUmVzb3VyY2VDbGllbnQgewog
cHVibGljOgotICAgIENsaXBib2FyZE1hYyhib29sIGZvckRyYWdnaW5nLCBOU1Bhc3RlYm9hcmQg
KiwgQ2xpcGJvYXJkQWNjZXNzUG9saWN5LCBGcmFtZSogPSAwKTsKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxDbGlwYm9hcmRNYWM+IGNyZWF0ZShib29sIGZvckRyYWdnaW5nLCBOU1Bhc3RlYm9hcmQg
KnBhc3RlYm9hcmQsIENsaXBib2FyZEFjY2Vzc1BvbGljeSBwb2xpY3ksIEZyYW1lKiBmcmFtZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2xpcGJvYXJkTWFjKGZvckRyYWdn
aW5nLCBwYXN0ZWJvYXJkLCBwb2xpY3ksIGZyYW1lKSk7CisgICAgfQorCiAgICAgdmlydHVhbCB+
Q2xpcGJvYXJkTWFjKCk7CiAgICAgCiAgICAgdm9pZCBjbGVhckRhdGEoY29uc3QgU3RyaW5nJiB0
eXBlKTsKQEAgLTczLDcgKzcyLDEwIEBAIHB1YmxpYzoKICAgICAvLyBNZXRob2RzIGZvciBnZXR0
aW5nIGluZm8gaW4gQ29jb2EncyB0eXBlIHN5c3RlbQogICAgIE5TSW1hZ2UgKmRyYWdOU0ltYWdl
KE5TUG9pbnQmKSBjb25zdDsgLy8gbG9jIGNvbnZlcnRlZCBmcm9tIGRyYWdMb2MsIGJhc2VkIG9u
IHdob2xlIGltYWdlIHNpemUKICAgICBOU1Bhc3RlYm9hcmQgKnBhc3RlYm9hcmQoKSB7IHJldHVy
biBtX3Bhc3RlYm9hcmQuZ2V0KCk7IH0KKwogcHJpdmF0ZToKKyAgICBDbGlwYm9hcmRNYWMoYm9v
bCBmb3JEcmFnZ2luZywgTlNQYXN0ZWJvYXJkICosIENsaXBib2FyZEFjY2Vzc1BvbGljeSwgRnJh
bWUqKTsKKwogICAgIHZvaWQgc2V0RHJhZ0ltYWdlKENhY2hlZEltYWdlKiwgTm9kZSosIGNvbnN0
IEludFBvaW50Jik7CiAKICAgICBSZXRhaW5QdHI8TlNQYXN0ZWJvYXJkPiBtX3Bhc3RlYm9hcmQ7
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL21hYy9EcmFnRGF0YU1hYy5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL21hYy9EcmFnRGF0YU1hYy5tbQkocmV2aXNpb24gMzQ1MzQpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL21hYy9EcmFnRGF0YU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAt
OTEsNyArOTEsNyBAQCBTdHJpbmcgRHJhZ0RhdGE6OmFzUGxhaW5UZXh0KCkgY29uc3QKIHsKICAg
ICByZXR1cm4gbV9wYXN0ZWJvYXJkSGVscGVyLT5wbGFpblRleHRGcm9tUGFzdGVib2FyZChbbV9w
bGF0Zm9ybURyYWdEYXRhIGRyYWdnaW5nUGFzdGVib2FyZF0pOwogfQotICAgIAorCiBDb2xvciBE
cmFnRGF0YTo6YXNDb2xvcigpIGNvbnN0CiB7CiAgICAgTlNDb2xvciAqY29sb3IgPSBbTlNDb2xv
ciBjb2xvckZyb21QYXN0ZWJvYXJkOlttX3BsYXRmb3JtRHJhZ0RhdGEgZHJhZ2dpbmdQYXN0ZWJv
YXJkXV07CkBAIC05OSwxNCArOTksMTMgQEAgQ29sb3IgRHJhZ0RhdGE6OmFzQ29sb3IoKSBjb25z
dAogICAgICAgICAgICAgICAgICAgICAoaW50KShbY29sb3IgYmx1ZUNvbXBvbmVudF0gKiAyNTUu
MCArIDAuNSksIChpbnQpKFtjb2xvciBhbHBoYUNvbXBvbmVudF0gKiAyNTUuMCArIDAuNSkpOwog
fQogCi1DbGlwYm9hcmQqIERyYWdEYXRhOjpjcmVhdGVDbGlwYm9hcmQoQ2xpcGJvYXJkQWNjZXNz
UG9saWN5IHBvbGljeSkgY29uc3QKK1Bhc3NSZWZQdHI8Q2xpcGJvYXJkPiBEcmFnRGF0YTo6Y3Jl
YXRlQ2xpcGJvYXJkKENsaXBib2FyZEFjY2Vzc1BvbGljeSBwb2xpY3kpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIG5ldyBDbGlwYm9hcmRNYWModHJ1ZSwgW21fcGxhdGZvcm1EcmFnRGF0YSBkcmFnZ2lu
Z1Bhc3RlYm9hcmRdLCBwb2xpY3kpOworICAgIHJldHVybiBDbGlwYm9hcmRNYWM6OmNyZWF0ZSh0
cnVlLCBbbV9wbGF0Zm9ybURyYWdEYXRhIGRyYWdnaW5nUGFzdGVib2FyZF0sIHBvbGljeSwgMCk7
CiB9CiAKIGJvb2wgRHJhZ0RhdGE6OmNvbnRhaW5zQ29tcGF0aWJsZUNvbnRlbnQoKSBjb25zdAog
ewotICAgIAogICAgIE5TUGFzdGVib2FyZCAqcGFzdGVib2FyZCA9IFttX3BsYXRmb3JtRHJhZ0Rh
dGEgZHJhZ2dpbmdQYXN0ZWJvYXJkXTsKICAgICBOU011dGFibGVTZXQgKnR5cGVzID0gW05TTXV0
YWJsZVNldCBzZXRXaXRoQXJyYXk6W3Bhc3RlYm9hcmQgdHlwZXNdXTsKICAgICBbdHlwZXMgaW50
ZXJzZWN0U2V0OltOU1NldCBzZXRXaXRoQXJyYXk6bV9wYXN0ZWJvYXJkSGVscGVyLT5pbnNlcnRh
YmxlUGFzdGVib2FyZFR5cGVzKCldXTsKQEAgLTEyMiw4ICsxMjEsNyBAQCBTdHJpbmcgRHJhZ0Rh
dGE6OmFzVVJMKFN0cmluZyogdGl0bGUpIGNvCiB7CiAgICAgcmV0dXJuIG1fcGFzdGVib2FyZEhl
bHBlci0+dXJsRnJvbVBhc3RlYm9hcmQoW21fcGxhdGZvcm1EcmFnRGF0YSBkcmFnZ2luZ1Bhc3Rl
Ym9hcmRdLCB0aXRsZSk7CiB9Ci0gICAgCi0gICAgCisKIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFn
bWVudD4gRHJhZ0RhdGE6OmFzRnJhZ21lbnQoRG9jdW1lbnQqIGRvYykgY29uc3QKIHsKICAgICBy
ZXR1cm4gW21fcGFzdGVib2FyZEhlbHBlci0+ZnJhZ21lbnRGcm9tUGFzdGVib2FyZChbbV9wbGF0
Zm9ybURyYWdEYXRhIGRyYWdnaW5nUGFzdGVib2FyZF0pIF9kb2N1bWVudEZyYWdtZW50XTsKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vbWFjL1BsYXRmb3JtU2Nyb2xsQmFyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxhdGZvcm1TY3JvbGxCYXIuaAkocmV2aXNpb24gMzQ1
MzQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL21hYy9QbGF0Zm9ybVNjcm9sbEJhci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiBB
cHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDggKzI2LDkgQEAKICNpZm5kZWYgUGxh
dGZvcm1TY3JvbGxCYXJfaAogI2RlZmluZSBQbGF0Zm9ybVNjcm9sbEJhcl9oCiAKLSNpbmNsdWRl
ICJXaWRnZXQuaCIKICNpbmNsdWRlICJTY3JvbGxCYXIuaCIKKyNpbmNsdWRlICJXaWRnZXQuaCIK
KyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogCiAjaWZkZWYgX19PQkpDX18KIEBjbGFzcyBO
U1Njcm9sbGVyOwpAQCAtNDAsOSArNDEsMjAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFz
cyBQbGF0Zm9ybVNjcm9sbGJhciA6IHB1YmxpYyBXaWRnZXQsIHB1YmxpYyBTY3JvbGxiYXIgewog
cHVibGljOgotICAgIFBsYXRmb3JtU2Nyb2xsYmFyKFNjcm9sbGJhckNsaWVudCosIFNjcm9sbGJh
ck9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZSk7CisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8UGxhdGZvcm1TY3JvbGxiYXI+IGNyZWF0ZShTY3JvbGxiYXJDbGllbnQqIGNsaWVudCwgU2Ny
b2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sIFNjcm9sbGJhckNvbnRyb2xTaXplIHNpemUp
CisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFBsYXRmb3JtU2Nyb2xsYmFyKGNs
aWVudCwgb3JpZW50YXRpb24sIHNpemUpKTsKKyAgICB9CiAgICAgdmlydHVhbCB+UGxhdGZvcm1T
Y3JvbGxiYXIoKTsKIAorICAgIGJvb2wgc2Nyb2xsYmFySGl0KE5TU2Nyb2xsZXJQYXJ0KTsKKwor
ICAgIHN0YXRpYyBpbnQgaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCgpIHsgcmV0dXJuIDE1OyB9
CisgICAgc3RhdGljIGludCB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCkgeyByZXR1cm4gMTU7IH0K
KyAgICAKK3ByaXZhdGU6ICAgIAorICAgIFBsYXRmb3JtU2Nyb2xsYmFyKFNjcm9sbGJhckNsaWVu
dCosIFNjcm9sbGJhck9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZSk7CisKICAgICB2
aXJ0dWFsIGJvb2wgaXNXaWRnZXQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKICAgICB2aXJ0
dWFsIGludCB3aWR0aCgpIGNvbnN0OwpAQCAtNTEsMTIgKzYzLDYgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgdm9pZCBzZXRFbmFibGVkKGJvb2wpOwogICAgIHZpcnR1YWwgdm9pZCBwYWludChHcmFw
aGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KTsKIAotICAgIGJvb2wgc2Ny
b2xsYmFySGl0KE5TU2Nyb2xsZXJQYXJ0KTsKLQotICAgIHN0YXRpYyBpbnQgaG9yaXpvbnRhbFNj
cm9sbGJhckhlaWdodCgpIHsgcmV0dXJuIDE1OyB9Ci0gICAgc3RhdGljIGludCB2ZXJ0aWNhbFNj
cm9sbGJhcldpZHRoKCkgeyByZXR1cm4gMTU7IH0KLSAgICAKLXByb3RlY3RlZDogICAgCiAgICAg
dmlydHVhbCB2b2lkIHVwZGF0ZVRodW1iUG9zaXRpb24oKTsKICAgICB2aXJ0dWFsIHZvaWQgdXBk
YXRlVGh1bWJQcm9wb3J0aW9uKCk7CiB9OwpAQCAtNjQsNCArNzAsMyBAQCBwcm90ZWN0ZWQ6ICAg
IAogfQogCiAjZW5kaWYgLy8gUGxhdGZvcm1TY3JvbGxCYXJfaAotCkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL21hYy9Qb3B1cE1lbnVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvUG9wdXBNZW51TWFjLm1tCShyZXZpc2lvbiAzNDUzNCkKKysrIFdlYkNvcmUvcGxhdGZv
cm0vbWFjL1BvcHVwTWVudU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzcsOCArMzcsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiBQb3B1cE1l
bnU6OlBvcHVwTWVudShQb3B1cE1lbnVDbGllbnQqIGNsaWVudCkKLSAgICA6IFJlZkNvdW50ZWQ8
UG9wdXBNZW51PigwKQotICAgICwgbV9wb3B1cENsaWVudChjbGllbnQpCisgICAgOiBtX3BvcHVw
Q2xpZW50KGNsaWVudCkKIHsKIH0KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9xdC9DbGlwYm9h
cmRRdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vcXQvQ2xpcGJvYXJkUXQuaAko
cmV2aXNpb24gMzQ1MzQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3F0L0NsaXBib2FyZFF0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIw
MDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0yOCw3ICsyOCw2IEBACiAKICNpbmNsdWRlICJDbGlwYm9hcmQuaCIKICNp
bmNsdWRlICJDYWNoZWRSZXNvdXJjZUNsaWVudC5oIgotI2luY2x1ZGUgIkNsaXBib2FyZEFjY2Vz
c1BvbGljeS5oIgogCiBRVF9CRUdJTl9OQU1FU1BBQ0UKIGNsYXNzIFFNaW1lRGF0YTsKQEAgLTQx
LDExICs0MCwxNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgLy8gU3RhdGUgYXZhaWxhYmxl
IGR1cmluZyBJRSdzIGV2ZW50cyBmb3IgZHJhZyBhbmQgZHJvcCBhbmQgY29weS9wYXN0ZQogICAg
IGNsYXNzIENsaXBib2FyZFF0IDogcHVibGljIENsaXBib2FyZCwgcHVibGljIENhY2hlZFJlc291
cmNlQ2xpZW50IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIENsaXBib2FyZFF0KENsaXBib2FyZEFj
Y2Vzc1BvbGljeSBwb2xpY3ksIGNvbnN0IFFNaW1lRGF0YSogcmVhZGFibGVDbGlwYm9hcmQpOwot
ICAgICAgICAKLSAgICAgICAgLy8gQ2xpcGJvYXJkIGlzIHdyaXRhYmxlIHNvIGl0IHdpbGwgY3Jl
YXRlIGl0cyBvd24gUU1pbWVEYXRhIG9iamVjdAotICAgICAgICBDbGlwYm9hcmRRdChDbGlwYm9h
cmRBY2Nlc3NQb2xpY3kgcG9saWN5LCBib29sIGZvckRyYWdnaW5nID0gZmFsc2UpOwotICAgICAg
ICB+Q2xpcGJvYXJkUXQoKTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2xpcGJvYXJkUXQ+
IGNyZWF0ZShDbGlwYm9hcmRBY2Nlc3NQb2xpY3kgcG9saWN5LCBjb25zdCBRTWltZURhdGEqIHJl
YWRhYmxlQ2xpcGJvYXJkKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IENsaXBib2FyZFF0KHBvbGljeSwgcmVhZGFibGVDbGlwYm9hcmQpKTsKKyAgICAgICAgfQor
ICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDbGlwYm9hcmRRdD4gY3JlYXRlKENsaXBib2FyZEFj
Y2Vzc1BvbGljeSBwb2xpY3ksIGJvb2wgZm9yRHJhZ2dpbmcgPSBmYWxzZSkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDbGlwYm9hcmRRdChwb2xpY3ksIGZvckRy
YWdnaW5nKSk7CisgICAgICAgIH0KKyAgICAgICAgdmlydHVhbCB+Q2xpcGJvYXJkUXQoKTsKICAg
ICAKICAgICAgICAgdm9pZCBjbGVhckRhdGEoY29uc3QgU3RyaW5nJiB0eXBlKTsKICAgICAgICAg
dm9pZCBjbGVhckFsbERhdGEoKTsKQEAgLTY5LDcgKzcyLDEyIEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgdm9pZCBpbnZhbGlkYXRlV3JpdGFibGVEYXRhKCkgeyBtX3dyaXRhYmxlRGF0
YSA9IDA7IH0KICAgICAgICAgCiAgICAgcHJpdmF0ZToKLSAgICAgICAgdm9pZCBzZXREcmFnSW1h
Z2UoQ2FjaGVkSW1hZ2UqIGltYWdlLCBOb2RlICpub2RlLCBjb25zdCBJbnRQb2ludCAmbG9jKTsK
KyAgICAgICAgQ2xpcGJvYXJkUXQoQ2xpcGJvYXJkQWNjZXNzUG9saWN5LCBjb25zdCBRTWltZURh
dGEqIHJlYWRhYmxlQ2xpcGJvYXJkKTsKKworICAgICAgICAvLyBDbGlwYm9hcmQgaXMgd3JpdGFi
bGUgc28gaXQgd2lsbCBjcmVhdGUgaXRzIG93biBRTWltZURhdGEgb2JqZWN0CisgICAgICAgIENs
aXBib2FyZFF0KENsaXBib2FyZEFjY2Vzc1BvbGljeSwgYm9vbCBmb3JEcmFnZ2luZyk7CisKKyAg
ICAgICAgdm9pZCBzZXREcmFnSW1hZ2UoQ2FjaGVkSW1hZ2UqLCBOb2RlKiwgY29uc3QgSW50UG9p
bnQmIGxvYyk7CiAgICAgICAgIAogICAgICAgICBjb25zdCBRTWltZURhdGEqIG1fcmVhZGFibGVE
YXRhOwogICAgICAgICBRTWltZURhdGEqIG1fd3JpdGFibGVEYXRhOwpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9xdC9EcmFnRGF0YVF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L3F0L0RyYWdEYXRhUXQuY3BwCShyZXZpc2lvbiAzNDUzNCkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
cXQvRHJhZ0RhdGFRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMDIsOSArMTAyLDkgQEAgQ29sb3Ig
RHJhZ0RhdGE6OmFzQ29sb3IoKSBjb25zdAogICAgIHJldHVybiBxdmFyaWFudF9jYXN0PFFDb2xv
cj4obV9wbGF0Zm9ybURyYWdEYXRhLT5jb2xvckRhdGEoKSk7CiB9CiAKLUNsaXBib2FyZCogRHJh
Z0RhdGE6OmNyZWF0ZUNsaXBib2FyZChDbGlwYm9hcmRBY2Nlc3NQb2xpY3kgcG9saWN5KSBjb25z
dAorUGFzc1JlZlB0cjxDbGlwYm9hcmQ+IERyYWdEYXRhOjpjcmVhdGVDbGlwYm9hcmQoQ2xpcGJv
YXJkQWNjZXNzUG9saWN5IHBvbGljeSkgY29uc3QKIHsKLSAgICByZXR1cm4gbmV3IENsaXBib2Fy
ZFF0KHBvbGljeSwgbV9wbGF0Zm9ybURyYWdEYXRhKTsKKyAgICByZXR1cm4gQ2xpcGJvYXJkUXQ6
OmNyZWF0ZShwb2xpY3ksIG1fcGxhdGZvcm1EcmFnRGF0YSk7CiB9CiAgICAgCiBib29sIERyYWdE
YXRhOjpjb250YWluc0NvbXBhdGlibGVDb250ZW50KCkgY29uc3QKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vcXQvUGxhdGZvcm1TY3JvbGxCYXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL3F0L1BsYXRmb3JtU2Nyb2xsQmFyLmgJKHJldmlzaW9uIDM0NTM0KQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9xdC9QbGF0Zm9ybVNjcm9sbEJhci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBBcHBsZSBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAy
MDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHly
aWdodCAoQykgMjAwNyBTdGFpa29zIENvbXB1dGluZyBTZXJ2aWNlcyBJbmMuIDxpbmZvQHN0YWlr
b3MubmV0PgogICogQ29weXJpZ2h0IChDKSAyMDA3IFRyb2xsdGVjaCBBU0EKICAqCkBAIC0yOCwx
NyArMjgsMjAgQEAKICNpZm5kZWYgUGxhdGZvcm1TY3JvbGxiYXJfaAogI2RlZmluZSBQbGF0Zm9y
bVNjcm9sbGJhcl9oCiAKLSNpbmNsdWRlICJXaWRnZXQuaCIKICNpbmNsdWRlICJTY3JvbGxCYXIu
aCIKICNpbmNsdWRlICJUaW1lci5oIgotCisjaW5jbHVkZSAiV2lkZ2V0LmgiCiAjaW5jbHVkZSA8
UVN0eWxlT3B0aW9uU2xpZGVyPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgUGxhdGZvcm1TY3JvbGxiYXIgOiBwdWJsaWMgV2lkZ2V0
LCBwdWJsaWMgU2Nyb2xsYmFyIHsKIHB1YmxpYzoKLSAgICBQbGF0Zm9ybVNjcm9sbGJhcihTY3Jv
bGxiYXJDbGllbnQqLCBTY3JvbGxiYXJPcmllbnRhdGlvbiwgU2Nyb2xsYmFyQ29udHJvbFNpemUp
OworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBsYXRmb3JtU2Nyb2xsYmFyPiBjcmVhdGUoU2Nyb2xs
YmFyQ2xpZW50KiBjbGllbnQsIFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBTY3Jv
bGxiYXJDb250cm9sU2l6ZSBzaXplKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBQbGF0Zm9ybVNjcm9sbGJhcihjbGllbnQsIG9yaWVudGF0aW9uLCBzaXplKSk7CisgICAgfQog
ICAgIHZpcnR1YWwgflBsYXRmb3JtU2Nyb2xsYmFyKCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNX
aWRnZXQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CkBAIC03Myw2ICs3Niw4IEBAIHByb3RlY3Rl
ZDogICAgCiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRodW1iUHJvcG9ydGlvbigpOwogCiBwcml2
YXRlOgorICAgIFBsYXRmb3JtU2Nyb2xsYmFyKFNjcm9sbGJhckNsaWVudCosIFNjcm9sbGJhck9y
aWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZSk7CisKICAgICBpbnQgdGh1bWJQb3NpdGlv
bigpIGNvbnN0OwogICAgIGludCB0aHVtYkxlbmd0aCgpIGNvbnN0OwogICAgIGludCB0cmFja0xl
bmd0aCgpIGNvbnN0OwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9xdC9Qb3B1cE1lbnVRdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9xdC9Qb3B1cE1lbnVRdC5jcHAJKHJldmlz
aW9uIDM0NTM0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9xdC9Qb3B1cE1lbnVRdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQzLDggKzQzLDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogUG9wdXBN
ZW51OjpQb3B1cE1lbnUoUG9wdXBNZW51Q2xpZW50KiBjbGllbnQpCi0gICAgOiBSZWZDb3VudGVk
PFBvcHVwTWVudT4oMCkKLSAgICAsIG1fcG9wdXBDbGllbnQoY2xpZW50KQorICAgIDogbV9wb3B1
cENsaWVudChjbGllbnQpCiB7CiAgICAgbV9wb3B1cCA9IG5ldyBRV2ViUG9wdXAoY2xpZW50KTsK
IH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vcXQvU2Nyb2xsVmlld1F0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3F0L1Njcm9sbFZpZXdRdC5jcHAJKHJldmlzaW9uIDM0NTM0
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9xdC9TY3JvbGxWaWV3UXQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRl
ciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAw
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYg
RGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgWmFj
ayBSdXNpbiA8emFja0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA2IEdlb3JnZSBTdGFp
a29zIDxzdGFpa29zQGtkZS5vcmc+CkBAIC0xMDksNyArMTA5LDcgQEAgdm9pZCBTY3JvbGxWaWV3
OjpTY3JvbGxWaWV3UHJpdmF0ZTo6c2V0SAogewogICAgIGlmIChTY3JvbGxiYXI6Omhhc1BsYXRm
b3JtU2Nyb2xsYmFycygpKSB7CiAgICAgICAgIGlmIChoYXNCYXIgJiYgIW1faEJhcikgewotICAg
ICAgICAgICAgbV9oQmFyID0gbmV3IFBsYXRmb3JtU2Nyb2xsYmFyKHRoaXMsIEhvcml6b250YWxT
Y3JvbGxiYXIsIFJlZ3VsYXJTY3JvbGxiYXIpOworICAgICAgICAgICAgbV9oQmFyID0gUGxhdGZv
cm1TY3JvbGxiYXI6OmNyZWF0ZSh0aGlzLCBIb3Jpem9udGFsU2Nyb2xsYmFyLCBSZWd1bGFyU2Ny
b2xsYmFyKTsKICAgICAgICAgICAgIG1fdmlldy0+YWRkQ2hpbGQobV9oQmFyLmdldCgpKTsKICAg
ICAgICAgfSBlbHNlIGlmICghaGFzQmFyICYmIG1faEJhcikgewogICAgICAgICAgICAgbV92aWV3
LT5yZW1vdmVDaGlsZChtX2hCYXIuZ2V0KCkpOzsKQEAgLTEyMiw3ICsxMjIsNyBAQCB2b2lkIFNj
cm9sbFZpZXc6OlNjcm9sbFZpZXdQcml2YXRlOjpzZXRICiB7CiAgICAgaWYgKFNjcm9sbGJhcjo6
aGFzUGxhdGZvcm1TY3JvbGxiYXJzKCkpIHsKICAgICAgICAgaWYgKGhhc0JhciAmJiAhbV92QmFy
KSB7Ci0gICAgICAgICAgICBtX3ZCYXIgPSBuZXcgUGxhdGZvcm1TY3JvbGxiYXIodGhpcywgVmVy
dGljYWxTY3JvbGxiYXIsIFJlZ3VsYXJTY3JvbGxiYXIpOworICAgICAgICAgICAgbV92QmFyID0g
UGxhdGZvcm1TY3JvbGxiYXI6OmNyZWF0ZSh0aGlzLCBWZXJ0aWNhbFNjcm9sbGJhciwgUmVndWxh
clNjcm9sbGJhcik7CiAgICAgICAgICAgICBtX3ZpZXctPmFkZENoaWxkKG1fdkJhci5nZXQoKSk7
CiAgICAgICAgIH0gZWxzZSBpZiAoIWhhc0JhciAmJiBtX3ZCYXIpIHsKICAgICAgICAgICAgIG1f
dmlldy0+cmVtb3ZlQ2hpbGQobV92QmFyLmdldCgpKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
d2luL0NsaXBib2FyZFdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vd2luL0Ns
aXBib2FyZFdpbi5oCShyZXZpc2lvbiAzNDUzNCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vd2luL0Ns
aXBib2FyZFdpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsMTAgKzI2LDggQEAK
ICNpZm5kZWYgQ2xpcGJvYXJkV2luX2gKICNkZWZpbmUgQ2xpcGJvYXJkV2luX2gKIAotI2luY2x1
ZGUgIkNsaXBib2FyZC5oIgotCiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGllbnQuaCIKLSNp
bmNsdWRlICJJbnRQb2ludC5oIgorI2luY2x1ZGUgIkNsaXBib2FyZC5oIgogI2luY2x1ZGUgIkNP
TVB0ci5oIgogCiBzdHJ1Y3QgSURhdGFPYmplY3Q7CkBAIC00Myw4ICs0MSwxNCBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgLy8gU3RhdGUgYXZhaWxhYmxlIGR1cmluZyBJRSdzIGV2ZW50cyBm
b3IgZHJhZyBhbmQgZHJvcCBhbmQgY29weS9wYXN0ZQogICAgIGNsYXNzIENsaXBib2FyZFdpbiA6
IHB1YmxpYyBDbGlwYm9hcmQsIHB1YmxpYyBDYWNoZWRSZXNvdXJjZUNsaWVudCB7CiAgICAgcHVi
bGljOgotICAgICAgICBDbGlwYm9hcmRXaW4oYm9vbCBpc0ZvckRyYWdnaW5nLCBJRGF0YU9iamVj
dCogZGF0YU9iamVjdCwgQ2xpcGJvYXJkQWNjZXNzUG9saWN5IHBvbGljeSk7Ci0gICAgICAgIENs
aXBib2FyZFdpbihib29sIGlzRm9yRHJhZ2dpbmcsIFdDRGF0YU9iamVjdCogZGF0YU9iamVjdCwg
Q2xpcGJvYXJkQWNjZXNzUG9saWN5IHBvbGljeSk7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRy
PENsaXBib2FyZFdpbj4gY3JlYXRlKGJvb2wgaXNGb3JEcmFnZ2luZywgSURhdGFPYmplY3QqIGRh
dGFPYmplY3QsIENsaXBib2FyZEFjY2Vzc1BvbGljeSBwb2xpY3kpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2xpcGJvYXJkV2luKGlzRm9yRHJhZ2dpbmcsIGRh
dGFPYmplY3QsIHBvbGljeSkpOworICAgICAgICB9CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRy
PENsaXBib2FyZFdpbj4gY3JlYXRlKGJvb2wgaXNGb3JEcmFnZ2luZywgV0NEYXRhT2JqZWN0KiBk
YXRhT2JqZWN0LCBDbGlwYm9hcmRBY2Nlc3NQb2xpY3kgcG9saWN5KQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENsaXBib2FyZFdpbihpc0ZvckRyYWdnaW5nLCBk
YXRhT2JqZWN0LCBwb2xpY3kpKTsKKyAgICAgICAgfQogICAgICAgICB+Q2xpcGJvYXJkV2luKCk7
CiAgICAgCiAgICAgICAgIHZvaWQgY2xlYXJEYXRhKGNvbnN0IFN0cmluZyYgdHlwZSk7CkBAIC02
Niw5ICs3MCwxNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBo
YXNEYXRhKCk7CiAKICAgICAgICAgQ09NUHRyPElEYXRhT2JqZWN0PiBkYXRhT2JqZWN0KCkgeyBy
ZXR1cm4gbV9kYXRhT2JqZWN0OyB9CisKICAgICBwcml2YXRlOgorICAgICAgICBDbGlwYm9hcmRX
aW4oYm9vbCBpc0ZvckRyYWdnaW5nLCBJRGF0YU9iamVjdCosIENsaXBib2FyZEFjY2Vzc1BvbGlj
eSk7CisgICAgICAgIENsaXBib2FyZFdpbihib29sIGlzRm9yRHJhZ2dpbmcsIFdDRGF0YU9iamVj
dCosIENsaXBib2FyZEFjY2Vzc1BvbGljeSk7CisKICAgICAgICAgdm9pZCByZXNldEZyb21DbGlw
Ym9hcmQoKTsKICAgICAgICAgdm9pZCBzZXREcmFnSW1hZ2UoQ2FjaGVkSW1hZ2UqLCBOb2RlKiwg
Y29uc3QgSW50UG9pbnQmKTsKKwogICAgICAgICBDT01QdHI8SURhdGFPYmplY3Q+IG1fZGF0YU9i
amVjdDsKICAgICAgICAgQ09NUHRyPFdDRGF0YU9iamVjdD4gbV93cml0YWJsZURhdGFPYmplY3Q7
CiAgICAgICAgIEZyYW1lKiBtX2ZyYW1lOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ3Vy
c29yV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3dpbi9DdXJzb3JXaW4u
Y3BwCShyZXZpc2lvbiAzNDUzNCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vd2luL0N1cnNvcldpbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAy
MDA2IFNhbXVlbCBXZWluaWcgKHNhbS53ZWluaWdAZ21haWwuY29tKQotICogQ29weXJpZ2h0IChD
KSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04Myw3ICs4Myw3IEBAIEN1cnNvcjo6
Q3Vyc29yKEltYWdlKiBpbWcsIGNvbnN0IEludFBvaW4KICAgICAgICAgaWkuaGJtTWFzayA9IGhN
YXNrLmdldCgpOwogICAgICAgICBpaS5oYm1Db2xvciA9IGhDdXJzb3IuZ2V0KCk7CiAKLSAgICAg
ICAgbV9pbXBsID0gbmV3IFNoYXJlZEN1cnNvcihDcmVhdGVJY29uSW5kaXJlY3QoJmlpKSk7Cisg
ICAgICAgIG1faW1wbCA9IFNoYXJlZEN1cnNvcjo6Y3JlYXRlKENyZWF0ZUljb25JbmRpcmVjdCgm
aWkpKTsKICAgICB9IGVsc2UgewogICAgICAgICAvLyBQbGF0Zm9ybSBkb2Vzbid0IHN1cHBvcnQg
YWxwaGEgYmxlbmRlZCBjdXJzb3JzLCBzbyB3ZSBuZWVkCiAgICAgICAgIC8vIHRvIGNyZWF0ZSB0
aGUgbWFzayBtYW51YWxseQpAQCAtMTE4LDcgKzExOCw3IEBAIEN1cnNvcjo6Q3Vyc29yKEltYWdl
KiBpbWcsIGNvbnN0IEludFBvaW4KICAgICAgICAgaWNvbi55SG90c3BvdCA9IGhvdHNwb3QueSgp
OwogICAgICAgICBpY29uLmhibU1hc2sgPSBhbmRNYXNrLmdldCgpOwogICAgICAgICBpY29uLmhi
bUNvbG9yID0geG9yTWFzay5nZXQoKTsKLSAgICAgICAgbV9pbXBsID0gbmV3IFNoYXJlZEN1cnNv
cihDcmVhdGVJY29uSW5kaXJlY3QoJmljb24pKTsKKyAgICAgICAgbV9pbXBsID0gU2hhcmVkQ3Vy
c29yOjpjcmVhdGUoQ3JlYXRlSWNvbkluZGlyZWN0KCZpY29uKSk7CiAKICAgICAgICAgRGVsZXRl
REMoeG9yTWFza0RDKTsKICAgICAgICAgRGVsZXRlREMoYW5kTWFza0RDKTsKQEAgLTE1Niw3ICsx
NTYsNyBAQCBzdGF0aWMgQ3Vyc29yIGxvYWRDdXJzb3JCeU5hbWUoY2hhciogbmFtCiAKIHN0YXRp
YyBQYXNzUmVmUHRyPFNoYXJlZEN1cnNvcj4gbG9hZFNoYXJlZEN1cnNvcihISU5TVEFOQ0UgaElu
c3RhbmNlLCBMUENUU1RSIGxwQ3Vyc29yTmFtZSkKIHsKLSAgICByZXR1cm4gbmV3IFNoYXJlZEN1
cnNvcihMb2FkQ3Vyc29yKGhJbnN0YW5jZSwgbHBDdXJzb3JOYW1lKSk7CisgICAgcmV0dXJuIFNo
YXJlZEN1cnNvcjo6Y3JlYXRlKExvYWRDdXJzb3IoaEluc3RhbmNlLCBscEN1cnNvck5hbWUpKTsK
IH0KIAogY29uc3QgQ3Vyc29yJiBwb2ludGVyQ3Vyc29yKCkKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vd2luL0RyYWdEYXRhV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3dp
bi9EcmFnRGF0YVdpbi5jcHAJKHJldmlzaW9uIDM0NTM0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS93
aW4vRHJhZ0RhdGFXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzksOSArMzksOSBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLUNsaXBib2FyZCogRHJhZ0RhdGE6OmNyZWF0ZUNsaXBib2FyZChD
bGlwYm9hcmRBY2Nlc3NQb2xpY3kgcG9saWN5KSBjb25zdAorUGFzc1JlZlB0cjxDbGlwYm9hcmQ+
IERyYWdEYXRhOjpjcmVhdGVDbGlwYm9hcmQoQ2xpcGJvYXJkQWNjZXNzUG9saWN5IHBvbGljeSkg
Y29uc3QKIHsKLSAgICByZXR1cm4gbmV3IENsaXBib2FyZFdpbih0cnVlLCBtX3BsYXRmb3JtRHJh
Z0RhdGEsIHBvbGljeSk7CisgICAgcmV0dXJuIENsaXBib2FyZFdpbjo6Y3JlYXRlKHRydWUsIG1f
cGxhdGZvcm1EcmFnRGF0YSwgcG9saWN5KTsKIH0KIAogYm9vbCBEcmFnRGF0YTo6Y29udGFpbnNV
UkwoKSBjb25zdApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS93aW4vRWRpdG9yV2luLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3dpbi9FZGl0b3JXaW4uY3BwCShyZXZpc2lvbiAz
NDUzNCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vd2luL0VkaXRvcldpbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcs
IDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC00NSw3ICs0NSw3IEBAIFBhc3NSZWZQdHI8Q2xpcGJvYXJkPiBFZGl0
b3I6Om5ld0dlbmVyYWwKICAgICBpZiAoIVNVQ0NFRURFRChPbGVHZXRDbGlwYm9hcmQoJmNsaXBi
b2FyZERhdGEpKSkKICAgICAgICAgY2xpcGJvYXJkRGF0YSA9IDA7CiAKLSAgICByZXR1cm4gbmV3
IENsaXBib2FyZFdpbihmYWxzZSwgY2xpcGJvYXJkRGF0YS5nZXQoKSwgcG9saWN5KTsKKyAgICBy
ZXR1cm4gQ2xpcGJvYXJkV2luOjpjcmVhdGUoZmFsc2UsIGNsaXBib2FyZERhdGEuZ2V0KCksIHBv
bGljeSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vd2luL1BsYXRmb3JtU2Nyb2xsQmFyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS93aW4vUGxhdGZvcm1TY3JvbGxCYXIuaAkocmV2aXNpb24gMzQ1MzQpCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL3dpbi9QbGF0Zm9ybVNjcm9sbEJhci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBBcHBsZSBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAy
MDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsOSArMjYsMTAgQEAKICNpZm5kZWYgUGxhdGZv
cm1TY3JvbGxiYXJfaAogI2RlZmluZSBQbGF0Zm9ybVNjcm9sbGJhcl9oCiAKLSNpbmNsdWRlICJX
aWRnZXQuaCIKICNpbmNsdWRlICJTY3JvbGxCYXIuaCIKICNpbmNsdWRlICJUaW1lci5oIgorI2lu
Y2x1ZGUgIldpZGdldC5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAKIHR5cGVkZWYg
c3RydWN0IEhEQ19fKiBIREM7CiAKQEAgLTM4LDcgKzM5LDEwIEBAIGVudW0gU2Nyb2xsYmFyUGFy
dCB7IE5vUGFydCwgQmFja0J1dHRvblAKIAogY2xhc3MgUGxhdGZvcm1TY3JvbGxiYXIgOiBwdWJs
aWMgV2lkZ2V0LCBwdWJsaWMgU2Nyb2xsYmFyIHsKIHB1YmxpYzoKLSAgICBQbGF0Zm9ybVNjcm9s
bGJhcihTY3JvbGxiYXJDbGllbnQqLCBTY3JvbGxiYXJPcmllbnRhdGlvbiwgU2Nyb2xsYmFyQ29u
dHJvbFNpemUpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBsYXRmb3JtU2Nyb2xsYmFyPiBjcmVh
dGUoU2Nyb2xsYmFyQ2xpZW50KiBjbGllbnQsIFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0
aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZSBzaXplKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBQbGF0Zm9ybVNjcm9sbGJhcihjbGllbnQsIG9yaWVudGF0aW9uLCBzaXplKSk7
CisgICAgfQogCiAgICAgdmlydHVhbCB+UGxhdGZvcm1TY3JvbGxiYXIoKTsKIApAQCAtNzAsNiAr
NzQsOCBAQCBwcm90ZWN0ZWQ6ICAgIAogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUaHVtYlByb3Bv
cnRpb24oKTsKIAogcHJpdmF0ZToKKyAgICBQbGF0Zm9ybVNjcm9sbGJhcihTY3JvbGxiYXJDbGll
bnQqLCBTY3JvbGxiYXJPcmllbnRhdGlvbiwgU2Nyb2xsYmFyQ29udHJvbFNpemUpOworCiAgICAg
Ym9vbCBoYXNCdXR0b25zKCkgY29uc3Q7CiAgICAgYm9vbCBoYXNUaHVtYigpIGNvbnN0OwogICAg
IEludFJlY3QgYmFja0J1dHRvblJlY3QoKSBjb25zdDsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
d2luL1BvcHVwTWVudVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS93aW4v
UG9wdXBNZW51V2luLmNwcAkocmV2aXNpb24gMzQ1MzQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3dp
bi9Qb3B1cE1lbnVXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCkBAIC02NSw4ICs2NSw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0FTQ0lJUHJp
bnRhYmxlKHVuc2kKIH0KIAogUG9wdXBNZW51OjpQb3B1cE1lbnUoUG9wdXBNZW51Q2xpZW50KiBj
bGllbnQpCi0gICAgOiBSZWZDb3VudGVkPFBvcHVwTWVudT4oMCkKLSAgICAsIG1fcG9wdXBDbGll
bnQoY2xpZW50KQorICAgIDogbV9wb3B1cENsaWVudChjbGllbnQpCiAgICAgLCBtX3Njcm9sbEJh
cigwKQogICAgICwgbV9wb3B1cCgwKQogICAgICwgbV9EQygwKQpAQCAtMTE4LDcgKzExNyw3IEBA
IHZvaWQgUG9wdXBNZW51OjpzaG93KGNvbnN0IEludFJlY3QmIHIsIEYKICAgICBpZiAoIW1fc2Ny
b2xsQmFyKQogICAgICAgICBpZiAodmlzaWJsZUl0ZW1zKCkgPCBjbGllbnQoKS0+bGlzdFNpemUo
KSkgewogICAgICAgICAgICAgLy8gV2UgbmVlZCBhIHNjcm9sbCBiYXIKLSAgICAgICAgICAgIG1f
c2Nyb2xsQmFyID0gbmV3IFBsYXRmb3JtU2Nyb2xsYmFyKHRoaXMsIFZlcnRpY2FsU2Nyb2xsYmFy
LCBTbWFsbFNjcm9sbGJhcik7CisgICAgICAgICAgICBtX3Njcm9sbEJhciA9IFBsYXRmb3JtU2Ny
b2xsYmFyOjpjcmVhdGUodGhpcywgVmVydGljYWxTY3JvbGxiYXIsIFNtYWxsU2Nyb2xsYmFyKTsK
ICAgICAgICAgICAgIG1fc2Nyb2xsQmFyLT5zZXRDb250YWluaW5nV2luZG93KG1fcG9wdXApOwog
ICAgICAgICB9CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vd2luL1Njcm9sbFZpZXdXaW4uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vd2luL1Njcm9sbFZpZXdXaW4uY3BwCShy
ZXZpc2lvbiAzNDUzNCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vd2luL1Njcm9sbFZpZXdXaW4uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsNyArMTA1LDcgQEAgdm9pZCBTY3JvbGxWaWV3OjpTY3Jv
bGxWaWV3UHJpdmF0ZTo6c2V0SAogewogICAgIGlmIChTY3JvbGxiYXI6Omhhc1BsYXRmb3JtU2Ny
b2xsYmFycygpKSB7CiAgICAgICAgIGlmIChoYXNCYXIgJiYgIW1faEJhcikgewotICAgICAgICAg
ICAgbV9oQmFyID0gbmV3IFBsYXRmb3JtU2Nyb2xsYmFyKHRoaXMsIEhvcml6b250YWxTY3JvbGxi
YXIsIFJlZ3VsYXJTY3JvbGxiYXIpOworICAgICAgICAgICAgbV9oQmFyID0gUGxhdGZvcm1TY3Jv
bGxiYXI6OmNyZWF0ZSh0aGlzLCBIb3Jpem9udGFsU2Nyb2xsYmFyLCBSZWd1bGFyU2Nyb2xsYmFy
KTsKICAgICAgICAgICAgIG1fdmlldy0+YWRkQ2hpbGQobV9oQmFyLmdldCgpKTsKICAgICAgICAg
fSBlbHNlIGlmICghaGFzQmFyICYmIG1faEJhcikgewogICAgICAgICAgICAgbV92aWV3LT5yZW1v
dmVDaGlsZChtX2hCYXIuZ2V0KCkpOwpAQCAtMTE4LDcgKzExOCw3IEBAIHZvaWQgU2Nyb2xsVmll
dzo6U2Nyb2xsVmlld1ByaXZhdGU6OnNldEgKIHsKICAgICBpZiAoU2Nyb2xsYmFyOjpoYXNQbGF0
Zm9ybVNjcm9sbGJhcnMoKSkgewogICAgICAgICBpZiAoaGFzQmFyICYmICFtX3ZCYXIpIHsKLSAg
ICAgICAgICAgIG1fdkJhciA9IG5ldyBQbGF0Zm9ybVNjcm9sbGJhcih0aGlzLCBWZXJ0aWNhbFNj
cm9sbGJhciwgUmVndWxhclNjcm9sbGJhcik7CisgICAgICAgICAgICBtX3ZCYXIgPSBQbGF0Zm9y
bVNjcm9sbGJhcjo6Y3JlYXRlKHRoaXMsIFZlcnRpY2FsU2Nyb2xsYmFyLCBSZWd1bGFyU2Nyb2xs
YmFyKTsKICAgICAgICAgICAgIG1fdmlldy0+YWRkQ2hpbGQobV92QmFyLmdldCgpKTsKICAgICAg
ICAgfSBlbHNlIGlmICghaGFzQmFyICYmIG1fdkJhcikgewogICAgICAgICAgICAgbV92aWV3LT5y
ZW1vdmVDaGlsZChtX3ZCYXIuZ2V0KCkpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS93eC9DbGlw
Ym9hcmRXeC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vd3gvQ2xpcGJvYXJkV3gu
aAkocmV2aXNpb24gMzQ1MzQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3d4L0NsaXBib2FyZFd4LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM1LDkgKzM1LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAvLyBTdGF0ZSBhdmFpbGFibGUgZHVyaW5nIElFJ3MgZXZlbnRzIGZvciBkcmFnIGFuZCBkcm9w
IGFuZCBjb3B5L3Bhc3RlCiAgICAgY2xhc3MgQ2xpcGJvYXJkV3ggOiBwdWJsaWMgQ2xpcGJvYXJk
IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIENsaXBib2FyZFd4KENsaXBib2FyZEFjY2Vzc1BvbGlj
eSBwb2xpY3ksIGJvb2wgZm9yRHJhZ2dpbmcpOwotICAgICAgICB+Q2xpcGJvYXJkV3goKSB7IH0K
LSAgICAKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2xpcGJvYXJkV3g+IGNyZWF0ZShDbGlw
Ym9hcmRBY2Nlc3NQb2xpY3kgcG9saWN5LCBib29sIGZvckRyYWdnaW5nKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENsaXBib2FyZFd4KHBvbGljeSwgZm9yRHJh
Z2dpbmcpKTsKKyAgICAgICAgfQorCiAgICAgICAgIHZvaWQgY2xlYXJEYXRhKGNvbnN0IFN0cmlu
ZyYgdHlwZSk7CiAgICAgICAgIHZvaWQgY2xlYXJBbGxEYXRhKCk7CiAgICAgICAgIFN0cmluZyBn
ZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgYm9vbCYgc3VjY2VzcykgY29uc3Q7CkBAIC01OCw2
ICs2MCw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCB2b2lkIHdyaXRl
UmFuZ2UoUmFuZ2UqLCBGcmFtZSopOwogCiAgICAgICAgIHZpcnR1YWwgYm9vbCBoYXNEYXRhKCk7
CisKKyAgICBwcml2YXRlOgorICAgICAgICBDbGlwYm9hcmRXeChDbGlwYm9hcmRBY2Nlc3NQb2xp
Y3ksIGJvb2wgZm9yRHJhZ2dpbmcpOwogICAgIH07CiB9IAogCkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL3d4L1BsYXRmb3JtU2Nyb2xsQmFyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS93eC9QbGF0Zm9ybVNjcm9sbEJhci5oCShyZXZpc2lvbiAzNDUzNCkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vd3gvUGxhdGZvcm1TY3JvbGxCYXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYsIDIwMDgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0yNiwxNCArMjYsMTggQEAKICNpZm5kZWYgUGxhdGZvcm1TY3JvbGxiYXJfaAog
I2RlZmluZSBQbGF0Zm9ybVNjcm9sbGJhcl9oCiAKLSNpbmNsdWRlICJXaWRnZXQuaCIKICNpbmNs
dWRlICJTY3JvbGxCYXIuaCIKKyNpbmNsdWRlICJXaWRnZXQuaCIKKyNpbmNsdWRlIDx3dGYvUGFz
c1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFBsYXRmb3JtU2Nyb2xs
YmFyIDogcHVibGljIFdpZGdldCwgcHVibGljIFNjcm9sbGJhciB7CiBwdWJsaWM6Ci0gICAgUGxh
dGZvcm1TY3JvbGxiYXIoU2Nyb2xsYmFyQ2xpZW50KiwgU2Nyb2xsYmFyT3JpZW50YXRpb24sIFNj
cm9sbGJhckNvbnRyb2xTaXplKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxQbGF0Zm9ybVNjcm9s
bGJhcj4gY3JlYXRlKFNjcm9sbGJhckNsaWVudCogY2xpZW50LCBTY3JvbGxiYXJPcmllbnRhdGlv
biBvcmllbnRhdGlvbiwgU2Nyb2xsYmFyQ29udHJvbFNpemUgc2l6ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgUGxhdGZvcm1TY3JvbGxiYXIoY2xpZW50LCBvcmllbnRhdGlv
biwgc2l6ZSkpOworICAgIH0KICAgICB2aXJ0dWFsIH5QbGF0Zm9ybVNjcm9sbGJhcigpOwogCiAg
ICAgdmlydHVhbCBib29sIGlzV2lkZ2V0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQpAQCAtNTAs
NiArNTQsOSBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6ICAgIAogICAgIHZpcnR1YWwgdm9pZCB1cGRh
dGVUaHVtYlBvc2l0aW9uKCk7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRodW1iUHJvcG9ydGlv
bigpOworCitwcml2YXRlOgorICAgIFBsYXRmb3JtU2Nyb2xsYmFyKFNjcm9sbGJhckNsaWVudCos
IFNjcm9sbGJhck9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZSk7CiB9OwogCiB9Cklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3d4L1BvcHVwTWVudVd4LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL3d4L1BvcHVwTWVudVd4LmNwcAkocmV2aXNpb24gMzQ1MzQpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL3d4L1BvcHVwTWVudVd4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAs
OCArNDAsNyBAQCBzdGF0aWMgaW50IHNfbWVudVN0YXJ0SWQgPSB3eE5ld0lkKCk7CiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIFBvcHVwTWVudTo6UG9wdXBNZW51KFBvcHVwTWVudUNsaWVudCogY2xp
ZW50KQotICAgIDogUmVmQ291bnRlZDxQb3B1cE1lbnU+KDApCi0gICAgLCBtX3BvcHVwQ2xpZW50
KGNsaWVudCkKKyAgICA6IG1fcG9wdXBDbGllbnQoY2xpZW50KQogICAgICwgbV9tZW51KE5VTEwp
CiB7CiB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3d4L1RlbXBvcmFyeUxpbmtTdHVicy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS93eC9UZW1wb3JhcnlMaW5rU3R1YnMuY3Bw
CShyZXZpc2lvbiAzNDUzNCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vd3gvVGVtcG9yYXJ5TGlua1N0
dWJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ2LDkgKzE0Niw5IEBAIHZvaWQgUGxhdGZvcm1T
Y3JvbGxiYXI6OnNldFJlY3QoY29uc3QgSW4KIHZvaWQgRmlsZUNob29zZXI6Om9wZW5GaWxlQ2hv
b3NlcihEb2N1bWVudCopIHsgbm90SW1wbGVtZW50ZWQoKTsgfQogU3RyaW5nIEZpbGVDaG9vc2Vy
OjpiYXNlbmFtZUZvcldpZHRoKGNvbnN0IEZvbnQmLCBpbnQgd2lkdGgpIGNvbnN0IHsgbm90SW1w
bGVtZW50ZWQoKTsgcmV0dXJuIFN0cmluZygpOyB9CiAKLUljb246Okljb24oKSA6IFJlZkNvdW50
ZWQ8SWNvbj4oMCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9CitJY29uOjpJY29uKCkgeyBub3RJbXBs
ZW1lbnRlZCgpOyB9CiBJY29uOjp+SWNvbigpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotUGFzc1Jl
ZlB0cjxJY29uPiBJY29uOjpuZXdJY29uRm9yRmlsZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lKSB7
IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBQYXNzUmVmUHRyPEljb24+KG5ldyBJY29uKCkpOyB9
CitQYXNzUmVmUHRyPEljb24+IEljb246Om5ld0ljb25Gb3JGaWxlKGNvbnN0IFN0cmluZyYgZmls
ZW5hbWUpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KIHZvaWQgSWNvbjo6cGFpbnQo
R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQog
CiBDb250ZXh0TWVudTo6Q29udGV4dE1lbnUoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0KSA6
IG1faGl0VGVzdFJlc3VsdChyZXN1bHQpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQpJbmRleDogV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyLmNwcAkocmV2aXNpb24gMzQ1MzYpCisrKyBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNTQsNyArMTA1NCw3IEBA
IGJvb2wgUmVuZGVyTGF5ZXI6OmlzQWN0aXZlKCkgY29uc3QKIFBhc3NSZWZQdHI8U2Nyb2xsYmFy
PiBSZW5kZXJMYXllcjo6Y3JlYXRlU2Nyb2xsYmFyKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVu
dGF0aW9uKQogewogICAgIGlmIChTY3JvbGxiYXI6Omhhc1BsYXRmb3JtU2Nyb2xsYmFycygpKSB7
Ci0gICAgICAgIFJlZlB0cjxQbGF0Zm9ybVNjcm9sbGJhcj4gd2lkZ2V0ID0gbmV3IFBsYXRmb3Jt
U2Nyb2xsYmFyKHRoaXMsIG9yaWVudGF0aW9uLCBSZWd1bGFyU2Nyb2xsYmFyKTsKKyAgICAgICAg
UmVmUHRyPFBsYXRmb3JtU2Nyb2xsYmFyPiB3aWRnZXQgPSBQbGF0Zm9ybVNjcm9sbGJhcjo6Y3Jl
YXRlKHRoaXMsIG9yaWVudGF0aW9uLCBSZWd1bGFyU2Nyb2xsYmFyKTsKICAgICAgICAgbV9vYmpl
Y3QtPmRvY3VtZW50KCktPnZpZXcoKS0+YWRkQ2hpbGQod2lkZ2V0LmdldCgpKTsKICAgICAgICAg
cmV0dXJuIHdpZGdldC5yZWxlYXNlKCk7CiAgICAgfQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGlzdEJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGlzdEJveC5jcHAJKHJldmlzaW9uIDM0NTM0KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGlzdEJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogVGhpcyBm
aWxlIGlzIHBhcnQgb2YgdGhlIHNlbGVjdCBlbGVtZW50IHJlbmRlcmVyIGluIFdlYkNvcmUuCiAg
KgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEyOCw3
ICsxMjgsNyBAQCB2b2lkIFJlbmRlckxpc3RCb3g6OnVwZGF0ZUZyb21FbGVtZW50KCkKICAgICAg
ICAgCiAgICAgICAgIGlmICghbV92QmFyICYmIFNjcm9sbGJhcjo6aGFzUGxhdGZvcm1TY3JvbGxi
YXJzKCkpCiAgICAgICAgICAgICBpZiAoRnJhbWVWaWV3KiB2aWV3ID0gbm9kZSgpLT5kb2N1bWVu
dCgpLT52aWV3KCkpIHsKLSAgICAgICAgICAgICAgICBSZWZQdHI8UGxhdGZvcm1TY3JvbGxiYXI+
IHdpZGdldCA9IG5ldyBQbGF0Zm9ybVNjcm9sbGJhcih0aGlzLCBWZXJ0aWNhbFNjcm9sbGJhciwg
U21hbGxTY3JvbGxiYXIpOworICAgICAgICAgICAgICAgIFJlZlB0cjxQbGF0Zm9ybVNjcm9sbGJh
cj4gd2lkZ2V0ID0gUGxhdGZvcm1TY3JvbGxiYXI6OmNyZWF0ZSh0aGlzLCBWZXJ0aWNhbFNjcm9s
bGJhciwgU21hbGxTY3JvbGxiYXIpOwogICAgICAgICAgICAgICAgIHZpZXctPmFkZENoaWxkKHdp
ZGdldC5nZXQoKSk7CiAgICAgICAgICAgICAgICAgbV92QmFyID0gd2lkZ2V0LnJlbGVhc2UoKTsK
ICAgICAgICAgICAgIH0KSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAJKHJldmlzaW9u
IDM0NTM2KQorKysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMDYsNyArMjA2LDcgQEAgYm9vbCBTVkdJbWFnZTo6ZGF0YUNoYW5nZWQoYm9vbCBh
bGxEYXRhUgogICAgICAgICBtX3BhZ2Uuc2V0KG5ldyBQYWdlKGR1bW15Q2hyb21lQ2xpZW50LCBk
dW1teUNvbnRleHRNZW51Q2xpZW50LCBkdW1teUVkaXRvckNsaWVudCwgZHVtbXlEcmFnQ2xpZW50
LCBkdW1teUluc3BlY3RvckNsaWVudCkpOwogICAgICAgICBtX3BhZ2UtPnNldHRpbmdzKCktPnNl
dEphdmFTY3JpcHRFbmFibGVkKGZhbHNlKTsKIAotICAgICAgICBtX2ZyYW1lID0gbmV3IEZyYW1l
KG1fcGFnZS5nZXQoKSwgMCwgZHVtbXlGcmFtZUxvYWRlckNsaWVudCk7CisgICAgICAgIG1fZnJh
bWUgPSBGcmFtZTo6Y3JlYXRlKG1fcGFnZS5nZXQoKSwgMCwgZHVtbXlGcmFtZUxvYWRlckNsaWVu
dCk7CiAgICAgICAgIG1fZnJhbWVWaWV3ID0gbmV3IEZyYW1lVmlldyhtX2ZyYW1lLmdldCgpKTsK
ICAgICAgICAgbV9mcmFtZVZpZXctPmRlcmVmKCk7IC8vIEZJWE1FOiBGcmFtZVZpZXcgc3RhcnRz
IHdpdGggYSByZWZjb3VudCBvZiAxCiAgICAgICAgIG1fZnJhbWUtPnNldFZpZXcobV9mcmFtZVZp
ZXcuZ2V0KCkpOwpJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2VFbXB0eUNsaWVu
dHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZUVtcHR5Q2xp
ZW50cy5oCShyZXZpc2lvbiAzNDUzNCkKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdl
RW1wdHlDbGllbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyOSw3ICsyMjksNyBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWQoKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQg
cHJlcGFyZUZvckRhdGFTb3VyY2VSZXBsYWNlbWVudCgpIHsgfQogICAgIAotICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxEb2N1bWVudExvYWRlcj4gY3JlYXRlRG9jdW1lbnRMb2FkZXIoY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBTdWJzdGl0dXRlRGF0YSYgc3Vic3RpdHV0ZURh
dGEpIHsgcmV0dXJuIG5ldyBEb2N1bWVudExvYWRlcihyZXF1ZXN0LCBzdWJzdGl0dXRlRGF0YSk7
IH0KKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RG9jdW1lbnRMb2FkZXI+IGNyZWF0ZURvY3VtZW50
TG9hZGVyKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgU3Vic3RpdHV0ZURh
dGEmIHN1YnN0aXR1dGVEYXRhKSB7IHJldHVybiBEb2N1bWVudExvYWRlcjo6Y3JlYXRlKHJlcXVl
c3QsIHN1YnN0aXR1dGVEYXRhKTsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRUaXRsZShjb25zdCBT
dHJpbmcmIHRpdGxlLCBjb25zdCBLVVJMJikgeyB9CiAgICAgCiAgICAgdmlydHVhbCBTdHJpbmcg
dXNlckFnZW50KGNvbnN0IEtVUkwmKSB7IHJldHVybiAiIjsgfQpJbmRleDogV2ViS2l0L2d0ay9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0ay9DaGFuZ2VMb2cJKHJldmlzaW9uIDM0
NTQxKQorKysgV2ViS2l0L2d0ay9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwx
NiBAQAorMjAwOC0wNi0xNCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgLSBtb3JlIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzI1NworICAgICAgICAgIHN0YXJ0IHJl
ZiBjb3VudHMgYXQgMSBpbnN0ZWFkIG9mIDAgZm9yIHNwZWVkCisKKyAgICAgICAgKiBXZWJDb3Jl
U3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHA6CisgICAgICAgIChXZWJLaXQ6OkZyYW1l
TG9hZGVyQ2xpZW50OjpjcmVhdGVEb2N1bWVudExvYWRlcik6IFVzZSBjcmVhdGUgaW5zdGVhZCBv
ZiBuZXcuCisgICAgICAgICogd2Via2l0L3dlYmtpdHdlYmZyYW1lLmNwcDoKKyAgICAgICAgKHdl
YmtpdF93ZWJfZnJhbWVfbmV3KTogRGl0dG8uCisgICAgICAgICh3ZWJraXRfd2ViX2ZyYW1lX2lu
aXRfd2l0aF93ZWJfdmlldyk6IERpdHRvLgorCiAyMDA4LTA2LTEzICBEYXJpbiBBZGxlciAgPGRh
cmluQGFwcGxlLmNvbT4KIAogICAgICAgICAtIHRyeSB0byBmaXggYnVpbGQKSW5kZXg6IFdlYktp
dC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwCShy
ZXZpc2lvbiAzNDUzNCkKKysrIFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJD
bGllbnRHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDksOCArMTQ5LDcgQEAgU3RyaW5nIEZy
YW1lTG9hZGVyQ2xpZW50Ojp1c2VyQWdlbnQoY29ucwogCiBXVEY6OlBhc3NSZWZQdHI8V2ViQ29y
ZTo6RG9jdW1lbnRMb2FkZXI+IEZyYW1lTG9hZGVyQ2xpZW50OjpjcmVhdGVEb2N1bWVudExvYWRl
cihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFN1YnN0aXR1
dGVEYXRhJiBzdWJzdGl0dXRlRGF0YSkKIHsKLSAgICBSZWZQdHI8RG9jdW1lbnRMb2FkZXI+IGxv
YWRlciA9IG5ldyBEb2N1bWVudExvYWRlcihyZXF1ZXN0LCBzdWJzdGl0dXRlRGF0YSk7Ci0gICAg
cmV0dXJuIGxvYWRlci5yZWxlYXNlKCk7CisgICAgcmV0dXJuIERvY3VtZW50TG9hZGVyOjpjcmVh
dGUocmVxdWVzdCwgc3Vic3RpdHV0ZURhdGEpOwogfQogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50
OjpkaXNwYXRjaFdpbGxTdWJtaXRGb3JtKEZyYW1lUG9saWN5RnVuY3Rpb24gcG9saWN5RnVuY3Rp
b24sIFBhc3NSZWZQdHI8Rm9ybVN0YXRlPikKSW5kZXg6IFdlYktpdC9ndGsvd2Via2l0L3dlYmtp
dHdlYmZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJm
cmFtZS5jcHAJKHJldmlzaW9uIDM0NTM0KQorKysgV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vi
ZnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjAsNyArMjIwLDcgQEAgV2ViS2l0V2ViRnJh
bWUqIHdlYmtpdF93ZWJfZnJhbWVfbmV3KFdlYgogCiAgICAgcHJpdi0+d2ViVmlldyA9IHdlYlZp
ZXc7CiAgICAgcHJpdi0+Y2xpZW50ID0gbmV3IFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnQoZnJh
bWUpOwotICAgIHByaXYtPmNvcmVGcmFtZSA9IG5ldyBGcmFtZSh2aWV3UHJpdi0+Y29yZVBhZ2Us
IDAsIHByaXYtPmNsaWVudCk7CisgICAgcHJpdi0+Y29yZUZyYW1lID0gRnJhbWU6OmNyZWF0ZSh2
aWV3UHJpdi0+Y29yZVBhZ2UsIDAsIHByaXYtPmNsaWVudCkuZ2V0KCk7CiAgICAgcHJpdi0+Y29y
ZUZyYW1lLT5pbml0KCk7CiAKICAgICByZXR1cm4gZnJhbWU7CkBAIC0yMzQsNyArMjM0LDcgQEAg
V2ViS2l0V2ViRnJhbWUqIHdlYmtpdF93ZWJfZnJhbWVfaW5pdF93aQogCiAgICAgcHJpdi0+d2Vi
VmlldyA9IHdlYlZpZXc7CiAgICAgcHJpdi0+Y2xpZW50ID0gbmV3IFdlYktpdDo6RnJhbWVMb2Fk
ZXJDbGllbnQoZnJhbWUpOwotICAgIHByaXYtPmNvcmVGcmFtZSA9IG5ldyBGcmFtZSh2aWV3UHJp
di0+Y29yZVBhZ2UsIGVsZW1lbnQsIHByaXYtPmNsaWVudCk7CisgICAgcHJpdi0+Y29yZUZyYW1l
ID0gRnJhbWU6OmNyZWF0ZSh2aWV3UHJpdi0+Y29yZVBhZ2UsIGVsZW1lbnQsIHByaXYtPmNsaWVu
dCkucmVsZWFzZSgpLnJlbGVhc2VSZWYoKTsKICAgICBwcml2LT5jb3JlRnJhbWUtPmluaXQoKTsK
IAogICAgIHJldHVybiBmcmFtZTsKSW5kZXg6IFdlYktpdC9tYWMvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiAzNDU0MSkKKysrIFdlYktpdC9t
YWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzEgQEAKKzIwMDgtMDYtMTQg
IERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gbW9yZSBvZiBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTcyNTcKKyAgICAgICAgICBzdGFydCByZWYgY291bnRzIGF0IDEg
aW5zdGVhZCBvZiAwIGZvciBzcGVlZAorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViRnJh
bWVMb2FkZXJDbGllbnQubW06CisgICAgICAgIChXZWJGcmFtZUxvYWRlckNsaWVudDo6Y3JlYXRl
RG9jdW1lbnRMb2FkZXIpOiBVc2UgY3JlYXRlIGluc3RlYWQgb2YgbmV3LgorICAgICAgICAoV2Vi
RnJhbWVMb2FkZXJDbGllbnQ6OmNyZWF0ZUZyYW1lKTogUmVtb3ZlIG5vdy1vYnNvbGV0ZSBhZG9w
dFJlZiB0aGF0IHdhcyBiYWxhbmNlZCBieQorICAgICAgICBhIHJlZiBjYWxsIGluc2lkZSB0aGUg
RnJhbWUgY29uc3RydWN0b3IuIFRoZSBsaWZldGltZSBydWxlcyBmb3IgRnJhbWUgYXJlIG5vdyB0
aGUKKyAgICAgICAgY29udmVudGlvbmFsIG9uZXMgd2l0aG91dCBhIHNwZWNpYWwgY2FzZS4KKwor
ICAgICAgICAqIFdlYlZpZXcvV2ViRGF0YVNvdXJjZS5tbToKKyAgICAgICAgKC1bV2ViRGF0YVNv
dXJjZSBfaW5pdFdpdGhEb2N1bWVudExvYWRlcjpdKTogQ2hhbmdlZCBhcmd1bWVudCB0byBiZSBh
IFBhc3NSZWZQdHIsIHNpbmNlCisgICAgICAgIHRoaXMgZnVuY3Rpb24gdGFrZXMgb3duZXJzaGlw
IG9mIHRoZSBEb2N1bWVudExvYWRlci4KKyAgICAgICAgKC1bV2ViRGF0YVNvdXJjZSBpbml0V2l0
aFJlcXVlc3Q6XSk6IFVzZSBjcmVhdGUgaW5zdGVhZCBvZiBuZXcuCisgICAgICAgICogV2ViVmll
dy9XZWJEYXRhU291cmNlSW50ZXJuYWwuaDogQ2hhbmdlZCBfaW5pdFdpdGhEb2N1bWVudExvYWRl
ciBhcmd1bWVudCB0byBiZSBhCisgICAgICAgIFBhc3NSZWZQdHIgYW5kIGFsc28gY2xlYW5lZCB1
cCB0aGUgaGVhZGVyIGEgYml0LgorCisgICAgICAgICogV2ViVmlldy9XZWJEb2N1bWVudExvYWRl
ck1hYy5oOgorICAgICAgICAoV2ViRG9jdW1lbnRMb2FkZXJNYWM6OmNyZWF0ZSk6IEFkZGVkLiBB
bHNvIG1hZGUgdGhlIGNvbnN0cnVjdG9yIGFuZCBhIGNvdXBsZSBvZiB2aXJ0dWFsCisgICAgICAg
IGZ1bmN0aW9ucyBwcml2YXRlLgorCisgICAgICAgICogV2ViVmlldy9XZWJGcmFtZS5tbToKKyAg
ICAgICAgKCtbV2ViRnJhbWUgX2NyZWF0ZUZyYW1lV2l0aFBhZ2U6ZnJhbWVOYW1lOmZyYW1lVmll
dzpvd25lckVsZW1lbnQ6XSk6IFVzZSBjcmVhdGUgaW5zdGVhZAorICAgICAgICBvZiBuZXcuCisK
IDIwMDgtMDYtMTQgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IFNhbS4KSW5kZXg6IFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVM
b2FkZXJDbGllbnQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9X
ZWJGcmFtZUxvYWRlckNsaWVudC5tbQkocmV2aXNpb24gMzQ1MzQpCisrKyBXZWJLaXQvbWFjL1dl
YkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC04
NzQsNyArODc0LDcgQEAgdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6cHJlcGFyZUZvckRhdAog
CiBQYXNzUmVmUHRyPERvY3VtZW50TG9hZGVyPiBXZWJGcmFtZUxvYWRlckNsaWVudDo6Y3JlYXRl
RG9jdW1lbnRMb2FkZXIoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBTdWJz
dGl0dXRlRGF0YSYgc3Vic3RpdHV0ZURhdGEpCiB7Ci0gICAgUmVmUHRyPFdlYkRvY3VtZW50TG9h
ZGVyTWFjPiBsb2FkZXIgPSBuZXcgV2ViRG9jdW1lbnRMb2FkZXJNYWMocmVxdWVzdCwgc3Vic3Rp
dHV0ZURhdGEpOworICAgIFJlZlB0cjxXZWJEb2N1bWVudExvYWRlck1hYz4gbG9hZGVyID0gV2Vi
RG9jdW1lbnRMb2FkZXJNYWM6OmNyZWF0ZShyZXF1ZXN0LCBzdWJzdGl0dXRlRGF0YSk7CiAKICAg
ICBXZWJEYXRhU291cmNlICpkYXRhU291cmNlID0gW1tXZWJEYXRhU291cmNlIGFsbG9jXSBfaW5p
dFdpdGhEb2N1bWVudExvYWRlcjpsb2FkZXIuZ2V0KCldOwogICAgIGxvYWRlci0+c2V0RGF0YVNv
dXJjZShkYXRhU291cmNlLCBnZXRXZWJWaWV3KG1fd2ViRnJhbWUuZ2V0KCkpKTsKQEAgLTEwODIs
NyArMTA4Miw3IEBAIFBhc3NSZWZQdHI8RnJhbWU+IFdlYkZyYW1lTG9hZGVyQ2xpZW50OjoKIAog
ICAgIFdlYkZyYW1lICpuZXdGcmFtZSA9IGtpdChuZXdDb3JlRnJhbWUuZ2V0KCkpOwogCi0gICAg
Y29yZShtX3dlYkZyYW1lLmdldCgpKS0+dHJlZSgpLT5hcHBlbmRDaGlsZChhZG9wdFJlZihuZXdD
b3JlRnJhbWUuZ2V0KCkpKTsKKyAgICBjb3JlKG1fd2ViRnJhbWUuZ2V0KCkpLT50cmVlKCktPmFw
cGVuZENoaWxkKG5ld0NvcmVGcmFtZSk7CiAgICAgaWYgKFtuZXdGcmFtZSBfZGF0YVNvdXJjZV0p
CiAgICAgICAgIFtbbmV3RnJhbWUgX2RhdGFTb3VyY2VdIF9kb2N1bWVudExvYWRlcl0tPnNldE92
ZXJyaWRlRW5jb2RpbmcoW1ttX3dlYkZyYW1lLmdldCgpIF9kYXRhU291cmNlXSBfZG9jdW1lbnRM
b2FkZXJdLT5vdmVycmlkZUVuY29kaW5nKCkpOyAgCiAKSW5kZXg6IFdlYktpdC9tYWMvV2ViVmll
dy9XZWJEYXRhU291cmNlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViVmlldy9XZWJE
YXRhU291cmNlLm1tCShyZXZpc2lvbiAzNDUzNCkKKysrIFdlYktpdC9tYWMvV2ViVmlldy9XZWJE
YXRhU291cmNlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMzEsNyArMzMxLDcgQEAgc3RhdGljIGlu
bGluZSB2b2lkIGFkZFR5cGVzRnJvbUNsYXNzKE5TTQogICAgIHJldHVybiBfcHJpdmF0ZS0+bG9h
ZGVyOwogfQogCi0tIChpZClfaW5pdFdpdGhEb2N1bWVudExvYWRlcjooV2ViRG9jdW1lbnRMb2Fk
ZXJNYWMgKilsb2FkZXIKKy0gKGlkKV9pbml0V2l0aERvY3VtZW50TG9hZGVyOihQYXNzUmVmUHRy
PFdlYkRvY3VtZW50TG9hZGVyTWFjPilsb2FkZXIKIHsKICAgICBzZWxmID0gW3N1cGVyIGluaXRd
OwogICAgIGlmICghc2VsZikKQEAgLTMzOSw4ICszMzksNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQg
YWRkVHlwZXNGcm9tQ2xhc3MoTlNNCiAgICAgCiAgICAgX3ByaXZhdGUgPSBbW1dlYkRhdGFTb3Vy
Y2VQcml2YXRlIGFsbG9jXSBpbml0XTsKICAgICAKLSAgICBfcHJpdmF0ZS0+bG9hZGVyID0gbG9h
ZGVyOwotICAgIGxvYWRlci0+cmVmKCk7CisgICAgX3ByaXZhdGUtPmxvYWRlciA9IGxvYWRlci5y
ZWxlYXNlUmVmKCk7CiAgICAgICAgIAogICAgIExPRyhMb2FkaW5nLCAiY3JlYXRpbmcgZGF0YXNv
dXJjZSBmb3IgJUAiLCBzdGF0aWNfY2FzdDxOU1VSTCAqPihfcHJpdmF0ZS0+bG9hZGVyLT5yZXF1
ZXN0KCkudXJsKCkpKTsKICAgICAKQEAgLTM1NSw3ICszNTQsNyBAQCBzdGF0aWMgaW5saW5lIHZv
aWQgYWRkVHlwZXNGcm9tQ2xhc3MoTlNNCiAKIC0gKGlkKWluaXRXaXRoUmVxdWVzdDooTlNVUkxS
ZXF1ZXN0ICopcmVxdWVzdAogewotICAgIHJldHVybiBbc2VsZiBfaW5pdFdpdGhEb2N1bWVudExv
YWRlcjpuZXcgV2ViRG9jdW1lbnRMb2FkZXJNYWMocmVxdWVzdCwgU3Vic3RpdHV0ZURhdGEoKSld
OworICAgIHJldHVybiBbc2VsZiBfaW5pdFdpdGhEb2N1bWVudExvYWRlcjpXZWJEb2N1bWVudExv
YWRlck1hYzo6Y3JlYXRlKHJlcXVlc3QsIFN1YnN0aXR1dGVEYXRhKCkpXTsKIH0KIAogLSAodm9p
ZClkZWFsbG9jCkluZGV4OiBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViRGF0YVNvdXJjZUludGVybmFs
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJWaWV3L1dlYkRhdGFTb3VyY2VJbnRlcm5h
bC5oCShyZXZpc2lvbiAzNDUzNCkKKysrIFdlYktpdC9tYWMvV2ViVmlldy9XZWJEYXRhU291cmNl
SW50ZXJuYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsMTcgKzI3LDEzIEBACiAgKi8KIAogI2lt
cG9ydCAiV2ViRGF0YVNvdXJjZVByaXZhdGUuaCIKKyNpbXBvcnQgPHd0Zi9Gb3J3YXJkLmg+CiAK
LSNpZmRlZiBfX2NwbHVzcGx1cwogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIERvY3Vt
ZW50TG9hZGVyOwogfQotdHlwZWRlZiBXZWJDb3JlOjpEb2N1bWVudExvYWRlciBXZWJDb3JlRG9j
dW1lbnRMb2FkZXI7CisKIGNsYXNzIFdlYkRvY3VtZW50TG9hZGVyTWFjOwotI2Vsc2UKLUBjbGFz
cyBXZWJDb3JlRG9jdW1lbnRMb2FkZXI7Ci1AY2xhc3MgV2ViRG9jdW1lbnRMb2FkZXJNYWM7Ci0j
ZW5kaWYKIAogQGNsYXNzIERPTURvY3VtZW50RnJhZ21lbnQ7CiBAY2xhc3MgRE9NRWxlbWVudDsK
QEAgLTQ1LDggKzQxLDYgQEAgY2xhc3MgV2ViRG9jdW1lbnRMb2FkZXJNYWM7CiBAY2xhc3MgV2Vi
UmVzb3VyY2U7CiBAY2xhc3MgV2ViVmlldzsKIAotQHByb3RvY29sIFdlYkRvY3VtZW50UmVwcmVz
ZW50YXRpb247Ci0KIEBpbnRlcmZhY2UgV2ViRGF0YVNvdXJjZSAoV2ViSW50ZXJuYWwpCiAtICh2
b2lkKV9tYWtlUmVwcmVzZW50YXRpb247CiAtIChCT09MKV9pc0RvY3VtZW50SFRNTDsKQEAgLTU3
LDEwICs1MSwxMCBAQCBjbGFzcyBXZWJEb2N1bWVudExvYWRlck1hYzsKIC0gKERPTURvY3VtZW50
RnJhZ21lbnQgKilfZG9jdW1lbnRGcmFnbWVudFdpdGhBcmNoaXZlOihXZWJBcmNoaXZlICopYXJj
aGl2ZTsKICsgKE5TTXV0YWJsZURpY3Rpb25hcnkgKilfcmVwVHlwZXNBbGxvd0ltYWdlVHlwZU9t
aXNzaW9uOihCT09MKWFsbG93SW1hZ2VUeXBlT21pc3Npb247CiAtICh2b2lkKV9yZXBsYWNlU2Vs
ZWN0aW9uV2l0aEFyY2hpdmU6KFdlYkFyY2hpdmUgKilhcmNoaXZlIHNlbGVjdFJlcGxhY2VtZW50
OihCT09MKXNlbGVjdFJlcGxhY2VtZW50OwotLSAoaWQpX2luaXRXaXRoRG9jdW1lbnRMb2FkZXI6
KFdlYkRvY3VtZW50TG9hZGVyTWFjKilsb2FkZXI7CistIChpZClfaW5pdFdpdGhEb2N1bWVudExv
YWRlcjooUGFzc1JlZlB0cjxXZWJEb2N1bWVudExvYWRlck1hYz4pbG9hZGVyOwogLSAodm9pZClf
ZmluaXNoZWRMb2FkaW5nOwogLSAodm9pZClfcmVjZWl2ZWREYXRhOihOU0RhdGEgKilkYXRhOwog
LSAodm9pZClfcmV2ZXJ0VG9Qcm92aXNpb25hbFN0YXRlOwogLSAodm9pZClfc2V0TWFpbkRvY3Vt
ZW50RXJyb3I6KE5TRXJyb3IgKillcnJvcjsKLS0gKFdlYkNvcmVEb2N1bWVudExvYWRlciopX2Rv
Y3VtZW50TG9hZGVyOworLSAoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXIqKV9kb2N1bWVudExvYWRl
cjsKIEBlbmQKSW5kZXg6IFdlYktpdC9tYWMvV2ViVmlldy9XZWJEb2N1bWVudExvYWRlck1hYy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViVmlldy9XZWJEb2N1bWVudExvYWRlck1hYy5o
CShyZXZpc2lvbiAzNDUzNCkKKysrIFdlYktpdC9tYWMvV2ViVmlldy9XZWJEb2N1bWVudExvYWRl
ck1hYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSwxOSArMzksMjQgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjbGFzcyBXZWJEb2N1bWVudExvYWRlck1hYyA6IHB1YmxpYyBXZWJDb3JlOjpEb2N1
bWVudExvYWRlciB7CiBwdWJsaWM6Ci0gICAgV2ViRG9jdW1lbnRMb2FkZXJNYWMoY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgV2ViQ29yZTo6U3Vic3RpdHV0ZURhdGEmKTsK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJEb2N1bWVudExvYWRlck1hYz4gY3JlYXRlKGNvbnN0
IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgV2ViQ29yZTo6U3Vic3Rp
dHV0ZURhdGEmIGRhdGEpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYkRv
Y3VtZW50TG9hZGVyTWFjKHJlcXVlc3QsIGRhdGEpKTsKKyAgICB9CiAKICAgICB2b2lkIHNldERh
dGFTb3VyY2UoV2ViRGF0YVNvdXJjZSAqLCBXZWJWaWV3Kik7CiAgICAgdm9pZCBkZXRhY2hEYXRh
U291cmNlKCk7CiAgICAgV2ViRGF0YVNvdXJjZSAqZGF0YVNvdXJjZSgpIGNvbnN0OwogCi0gICAg
dmlydHVhbCB2b2lkIGF0dGFjaFRvRnJhbWUoKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoRnJv
bUZyYW1lKCk7Ci0KICAgICB2b2lkIGluY3JlYXNlTG9hZENvdW50KHVuc2lnbmVkIGxvbmcgaWRl
bnRpZmllcik7CiAgICAgdm9pZCBkZWNyZWFzZUxvYWRDb3VudCh1bnNpZ25lZCBsb25nIGlkZW50
aWZpZXIpOwogCiBwcml2YXRlOgorICAgIFdlYkRvY3VtZW50TG9hZGVyTWFjKGNvbnN0IFdlYkNv
cmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFdlYkNvcmU6OlN1YnN0aXR1dGVEYXRhJik7CisK
KyAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoVG9GcmFtZSgpOworICAgIHZpcnR1YWwgdm9pZCBkZXRh
Y2hGcm9tRnJhbWUoKTsKKwogICAgIHZvaWQgcmV0YWluRGF0YVNvdXJjZSgpOwogICAgIHZvaWQg
cmVsZWFzZURhdGFTb3VyY2UoKTsKIApJbmRleDogV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1l
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQkocmV2aXNp
b24gMzQ1MzYpCisrKyBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTI3OSw3ICsyNzksNyBAQCBXZWJWaWV3ICpnZXRXZWJWaWV3KFdlYkZyYW1lICp3ZWJG
cmFtZSkKICAgICBXZWJWaWV3ICp3ZWJWaWV3ID0ga2l0KHBhZ2UpOwogCiAgICAgV2ViRnJhbWUg
KmZyYW1lID0gW1tzZWxmIGFsbG9jXSBfaW5pdFdpdGhXZWJGcmFtZVZpZXc6ZnJhbWVWaWV3IHdl
YlZpZXc6d2ViVmlld107Ci0gICAgUmVmUHRyPEZyYW1lPiBjb3JlRnJhbWUgPSBuZXcgRnJhbWUo
cGFnZSwgb3duZXJFbGVtZW50LCBuZXcgV2ViRnJhbWVMb2FkZXJDbGllbnQoZnJhbWUpKTsKKyAg
ICBSZWZQdHI8RnJhbWU+IGNvcmVGcmFtZSA9IEZyYW1lOjpjcmVhdGUocGFnZSwgb3duZXJFbGVt
ZW50LCBuZXcgV2ViRnJhbWVMb2FkZXJDbGllbnQoZnJhbWUpKTsKICAgICBbZnJhbWUgcmVsZWFz
ZV07CiAgICAgZnJhbWUtPl9wcml2YXRlLT5jb3JlRnJhbWUgPSBjb3JlRnJhbWUuZ2V0KCk7CiAK
SW5kZXg6IFdlYktpdC9xdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L0NoYW5n
ZUxvZwkocmV2aXNpb24gMzQ1NDEpCisrKyBXZWJLaXQvcXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMDgtMDYtMTQgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBw
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IC0gbW9yZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcyNTcKKyAg
ICAgICAgICBzdGFydCByZWYgY291bnRzIGF0IDEgaW5zdGVhZCBvZiAwIGZvciBzcGVlZAorCisg
ICAgICAgICogQXBpL3F3ZWJmcmFtZS5jcHA6CisgICAgICAgIChRV2ViRnJhbWVQcml2YXRlOjpp
bml0KTogVXNlIGNyZWF0ZSBpbnN0ZWFkIG9mIG5ldy4KKyAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9GcmFtZUxvYWRlckNsaWVudFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVy
Q2xpZW50UXQ6OmNyZWF0ZURvY3VtZW50TG9hZGVyKTogRGl0dG8uCisKIDIwMDgtMDYtMTMgIERh
cmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIC0gdHJ5IHRvIGZpeCBidWls
ZApJbmRleDogV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dC9xdC9BcGkvcXdlYmZyYW1lLmNwcAkocmV2aXNpb24gMzQ1MzQpCisrKyBXZWJLaXQvcXQvQXBp
L3F3ZWJmcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkyLDcgKzkyLDEwIEBAIHZvaWQgUVdl
YkZyYW1lUHJpdmF0ZTo6aW5pdChRV2ViRnJhbWUgKnEKICAgICBtYXJnaW5IZWlnaHQgPSBmcmFt
ZURhdGEtPm1hcmdpbkhlaWdodDsKIAogICAgIGZyYW1lTG9hZGVyQ2xpZW50ID0gbmV3IEZyYW1l
TG9hZGVyQ2xpZW50UXQoKTsKLSAgICBmcmFtZSA9IG5ldyBGcmFtZSh3ZWJjb3JlUGFnZSwgZnJh
bWVEYXRhLT5vd25lckVsZW1lbnQsIGZyYW1lTG9hZGVyQ2xpZW50KTsKKyAgICBSZWZQdHI8RnJh
bWU+IG5ld0ZyYW1lID0gRnJhbWU6OmNyZWF0ZSh3ZWJjb3JlUGFnZSwgZnJhbWVEYXRhLT5vd25l
ckVsZW1lbnQsIGZyYW1lTG9hZGVyQ2xpZW50KQorICAgIGZyYW1lID0gbmV3RnJhbWUuZ2V0KCk7
CisgICAgaWYgKGZyYW1lRGF0YS0+b3duZXJFbGVtZW50KQorICAgICAgICBmcmFtZS0+cmVmKCk7
IC8vIGJhbGFuY2VkIGJ5IGFkb3B0UmVmIGluIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OmNyZWF0ZUZy
YW1lCiAgICAgZnJhbWVMb2FkZXJDbGllbnQtPnNldEZyYW1lKHFmcmFtZSwgZnJhbWUpOwogICAg
IGZyYW1lLT5pbml0KCk7CiB9CkluZGV4OiBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnJhbWVM
b2FkZXJDbGllbnRRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0
L0ZyYW1lTG9hZGVyQ2xpZW50UXQuY3BwCShyZXZpc2lvbiAzNDUzNCkKKysrIFdlYktpdC9xdC9X
ZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NzUxLDggKzc1MSw3IEBAIGJvb2wgRnJhbWVMb2FkZXJDbGllbnRRdDo6c2hvdWxkRmFsbEJhY2sK
IAogV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyPiBGcmFtZUxvYWRlckNs
aWVudFF0OjpjcmVhdGVEb2N1bWVudExvYWRlcihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3QmIHJlcXVlc3QsIGNvbnN0IFN1YnN0aXR1dGVEYXRhJiBzdWJzdGl0dXRlRGF0YSkKIHsKLSAg
ICBSZWZQdHI8RG9jdW1lbnRMb2FkZXI+IGxvYWRlciA9IG5ldyBEb2N1bWVudExvYWRlcihyZXF1
ZXN0LCBzdWJzdGl0dXRlRGF0YSk7Ci0gICAgcmV0dXJuIGxvYWRlci5yZWxlYXNlKCk7CisgICAg
cmV0dXJuIERvY3VtZW50TG9hZGVyOjpjcmVhdGUocmVxdWVzdCwgc3Vic3RpdHV0ZURhdGEpOwog
fQogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OmRvd25sb2FkKFdlYkNvcmU6OlJlc291cmNl
SGFuZGxlKiBoYW5kbGUsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFdl
YkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2Um
KQpJbmRleDogV2ViS2l0L3dpbi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3dpbi9D
aGFuZ2VMb2cJKHJldmlzaW9uIDM0NTQxKQorKysgV2ViS2l0L3dpbi9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwyNSBAQAorMjAwOC0wNi0xNCAgRGFyaW4gQWRsZXIgIDxkYXJp
bkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgLSBtb3JlIG9mIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NzI1NworICAgICAgICAgIHN0YXJ0IHJlZiBjb3VudHMgYXQgMSBpbnN0ZWFkIG9mIDAgZm9yIHNw
ZWVkCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHA6
CisgICAgICAgIChXZWJGcmFtZUxvYWRlckNsaWVudDo6Y3JlYXRlRnJhbWUpOiBSZW1vdmUgbm93
LW9ic29sZXRlIGFkb3B0UmVmIHRoYXQgd2FzIGJhbGFuY2VkIGJ5CisgICAgICAgIGEgcmVmIGNh
bGwgaW5zaWRlIHRoZSBGcmFtZSBjb25zdHJ1Y3Rvci4gVGhlIGxpZmV0aW1lIHJ1bGVzIGZvciBG
cmFtZSBhcmUgbm93IHRoZQorICAgICAgICBjb252ZW50aW9uYWwgb25lcyB3aXRob3V0IGEgc3Bl
Y2lhbCBjYXNlLgorCisgICAgICAgICogV2ViRnJhbWUuY3BwOgorICAgICAgICAoV2ViRnJhbWU6
OmluaXQpOiBSZW5hbWVkIGZ1bmN0aW9uIGZyb20gaW5pdFdpdGhXZWJGcmFtZVZpZXcgYW5kIHJl
bW92ZWQgdGhlIHVudXNlZAorICAgICAgICBJV2ViRnJhbWVWaWV3IGFyZ3VtZW50IChldmVyeSBj
YWxsZXIgd2FzIHBhc3NpbmcgMCkuIEFsc28gY2hhbmdlZCB0aGlzIHRvIHJldHVybiB0aGUKKyAg
ICAgICAgV2ViQ29yZSBGcmFtZSBvYmplY3QsIHdoaWNoIGlzIG5lZWRlZCB0byBzdHJhaWdodGVu
IG91dCB0aGUgbGlmZXRpbWUgYW5kIG93bmVyc2hpcAorICAgICAgICBpc3N1ZXMuCisgICAgICAg
ICogV2ViRnJhbWUuaDogRGl0dG8uCisKKyAgICAgICAgKiBXZWJWaWV3LmNwcDoKKyAgICAgICAg
KFdlYlZpZXc6OmluaXRXaXRoRnJhbWUpOiBDaGFuZ2VkIHRvIGNhbGwgbmV3IGluaXQgZnVuY3Rp
b24gYW5kIHVzZSB0aGUgcmV0dXJuIHZhbHVlLgorCiAyMDA4LTA2LTEzICBEYXJpbiBBZGxlciAg
PGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBKb2huIFN1bGxpdmFuLgpJ
bmRleDogV2ViS2l0L3dpbi9XZWJGcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3dpbi9X
ZWJGcmFtZS5jcHAJKHJldmlzaW9uIDM0NTM0KQorKysgV2ViS2l0L3dpbi9XZWJGcmFtZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTg2MywxOCArODYzLDE4IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FM
TFRZUEUgV2ViRnJhbWU6OmRlc2UKIAogLy8gV2ViRnJhbWUgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXZvaWQgV2ViRnJh
bWU6OmluaXRXaXRoV2ViRnJhbWVWaWV3KElXZWJGcmFtZVZpZXcqIC8qdmlldyovLCBJV2ViVmll
dyogd2ViVmlldywgUGFnZSogcGFnZSwgSFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25lckVsZW1l
bnQpCitQYXNzUmVmUHRyPEZyYW1lPiBXZWJGcmFtZTo6aW5pdChJV2ViVmlldyogd2ViVmlldywg
UGFnZSogcGFnZSwgSFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25lckVsZW1lbnQpCiB7Ci0gICAg
aWYgKEZBSUxFRCh3ZWJWaWV3LT5RdWVyeUludGVyZmFjZSgmZC0+d2ViVmlldykpKQotICAgICAg
ICByZXR1cm47CisgICAgd2ViVmlldy0+UXVlcnlJbnRlcmZhY2UoJmQtPndlYlZpZXcpOwogICAg
IGQtPndlYlZpZXctPlJlbGVhc2UoKTsgLy8gZG9uJ3QgaG9sZCB0aGUgZXh0cmEgcmVmCiAKICAg
ICBIV05EIHZpZXdXaW5kb3c7CiAgICAgZC0+d2ViVmlldy0+dmlld1dpbmRvdygoT0xFX0hBTkRM
RSopJnZpZXdXaW5kb3cpOwogCiAgICAgdGhpcy0+QWRkUmVmKCk7IC8vIFdlIHJlbGVhc2UgdGhp
cyByZWYgaW4gZnJhbWVMb2FkZXJEZXN0cm95ZWQoKQotICAgIEZyYW1lKiBmcmFtZSA9IG5ldyBG
cmFtZShwYWdlLCBvd25lckVsZW1lbnQsIHRoaXMpOwotICAgIGQtPmZyYW1lID0gZnJhbWU7Cisg
ICAgUmVmUHRyPEZyYW1lPiBmcmFtZSA9IEZyYW1lOjpjcmVhdGUocGFnZSwgb3duZXJFbGVtZW50
LCB0aGlzKTsKKyAgICBkLT5mcmFtZSA9IGZyYW1lLmdldCgpOworICAgIHJldHVybiBmcmFtZS5y
ZWxlYXNlKCk7CiB9CiAKIEZyYW1lKiBXZWJGcmFtZTo6aW1wbCgpCkluZGV4OiBXZWJLaXQvd2lu
L1dlYkZyYW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3dpbi9XZWJGcmFtZS5oCShyZXZpc2lv
biAzNDUzNCkKKysrIFdlYktpdC93aW4vV2ViRnJhbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMjc4
LDcgKzI3OCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJGb3JJY29uTm90
aWZpY2F0aW9uKGJvb2wgbGlzdGVuKTsKIAogICAgIC8vIFdlYkZyYW1lCi0gICAgdm9pZCBpbml0
V2l0aFdlYkZyYW1lVmlldyhJV2ViRnJhbWVWaWV3KiwgSVdlYlZpZXcqLCBXZWJDb3JlOjpQYWdl
KiwgV2ViQ29yZTo6SFRNTEZyYW1lT3duZXJFbGVtZW50Kik7CisgICAgUGFzc1JlZlB0cjxXZWJD
b3JlOjpGcmFtZT4gaW5pdChJV2ViVmlldyosIFdlYkNvcmU6OlBhZ2UqLCBXZWJDb3JlOjpIVE1M
RnJhbWVPd25lckVsZW1lbnQqKTsKICAgICBXZWJDb3JlOjpGcmFtZSogaW1wbCgpOwogICAgIHZv
aWQgaW52YWxpZGF0ZSgpOwogICAgIHZvaWQgdW5tYXJrQWxsTWlzc3BlbGxpbmdzKCk7CkluZGV4
OiBXZWJLaXQvd2luL1dlYlZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93aW4vV2ViVmll
dy5jcHAJKHJldmlzaW9uIDM0NTM0KQorKysgV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjEyOCwxMiArMjEyOCwxMiBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBF
IFdlYlZpZXc6OmluaXRXCiAgICAgfQogCiAgICAgV2ViRnJhbWUqIHdlYkZyYW1lID0gV2ViRnJh
bWU6OmNyZWF0ZUluc3RhbmNlKCk7Ci0gICAgd2ViRnJhbWUtPmluaXRXaXRoV2ViRnJhbWVWaWV3
KDAgLypGSVhNRSovLCB0aGlzLCBtX3BhZ2UsIDApOworICAgIFJlZlB0cjxGcmFtZT4gY29yZUZy
YW1lID0gd2ViRnJhbWUtPmluaXQodGhpcywgbV9wYWdlLCAwKTsKICAgICBtX21haW5GcmFtZSA9
IHdlYkZyYW1lOwogICAgIHdlYkZyYW1lLT5SZWxlYXNlKCk7IC8vIFRoZSBXZWJGcmFtZSBpcyBv
d25lZCBieSB0aGUgRnJhbWUsIHNvIHJlbGVhc2Ugb3VyIHJlZmVyZW5jZSB0byBpdC4KIAotICAg
IG1fcGFnZS0+bWFpbkZyYW1lKCktPnRyZWUoKS0+c2V0TmFtZShTdHJpbmcoZnJhbWVOYW1lLCBT
eXNTdHJpbmdMZW4oZnJhbWVOYW1lKSkpOwotICAgIG1fcGFnZS0+bWFpbkZyYW1lKCktPmluaXQo
KTsKKyAgICBjb3JlRnJhbWUtPnRyZWUoKS0+c2V0TmFtZShTdHJpbmcoZnJhbWVOYW1lLCBTeXNT
dHJpbmdMZW4oZnJhbWVOYW1lKSkpOworICAgIGNvcmVGcmFtZS0+aW5pdCgpOwogICAgIHNldEdy
b3VwTmFtZShncm91cE5hbWUpOwogCiAgICAgYWRkVG9BbGxXZWJWaWV3c1NldCgpOwpJbmRleDog
V2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5j
cHAJKHJldmlzaW9uIDM0NTM0KQorKysgV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJGcmFt
ZUxvYWRlckNsaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1NiwxMCArNTU2LDcgQEAgUGFz
c1JlZlB0cjxGcmFtZT4gV2ViRnJhbWVMb2FkZXJDbGllbnQ6OgogCiAgICAgQ09NUHRyPFdlYkZy
YW1lPiB3ZWJGcmFtZShBZG9wdENPTSwgV2ViRnJhbWU6OmNyZWF0ZUluc3RhbmNlKCkpOwogCi0g
ICAgd2ViRnJhbWUtPmluaXRXaXRoV2ViRnJhbWVWaWV3KDAsIG1fd2ViRnJhbWUtPndlYlZpZXco
KSwgY29yZUZyYW1lLT5wYWdlKCksIG93bmVyRWxlbWVudCk7Ci0KLSAgICBSZWZQdHI8RnJhbWU+
IGNoaWxkRnJhbWUoYWRvcHRSZWYoY29yZSh3ZWJGcmFtZS5nZXQoKSkpKTsgLy8gV2UgaGF2ZSB0
byBhZG9wdCwgYmVjYXVzZSBGcmFtZXMgc3RhcnQgb3V0IHdpdGggYSByZWZjb3VudCBvZiAxLgot
ICAgIEFTU0VSVChjaGlsZEZyYW1lKTsKKyAgICBSZWZQdHI8RnJhbWU+IGNoaWxkRnJhbWUgPSB3
ZWJGcmFtZS0+aW5pdChtX3dlYkZyYW1lLT53ZWJWaWV3KCksIGNvcmVGcmFtZS0+cGFnZSgpLCBv
d25lckVsZW1lbnQpOwogCiAgICAgY29yZUZyYW1lLT50cmVlKCktPmFwcGVuZENoaWxkKGNoaWxk
RnJhbWUpOwogICAgIGNoaWxkRnJhbWUtPnRyZWUoKS0+c2V0TmFtZShuYW1lKTsKSW5kZXg6IFdl
YktpdC93eC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3d4L0NoYW5nZUxvZwkocmV2
aXNpb24gMzQ1NDEpCisrKyBXZWJLaXQvd3gvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMTQgQEAKKzIwMDgtMDYtMTQgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gbW9yZSBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcyNTcKKyAgICAgICAgICBz
dGFydCByZWYgY291bnRzIGF0IDEgaW5zdGVhZCBvZiAwIGZvciBzcGVlZAorCisgICAgICAgICog
V2ViS2l0U3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFd4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lTG9hZGVyQ2xpZW50V3g6OmNyZWF0ZURvY3VtZW50TG9hZGVyKTogVXNlIGNyZWF0ZSBm
dW5jdGlvbgorICAgICAgICBpbnN0ZWFkIG9mIG5ldy4KKwogMjAwOC0wNi0xMyAgRGFyaW4gQWRs
ZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgLSB0cnkgdG8gZml4IGJ1aWxkCkluZGV4
OiBXZWJLaXQvd3gvV2ViS2l0U3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFd4LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQvd3gvV2ViS2l0U3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFd4LmNwcAko
cmV2aXNpb24gMzQ1MzQpCisrKyBXZWJLaXQvd3gvV2ViS2l0U3VwcG9ydC9GcmFtZUxvYWRlckNs
aWVudFd4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjI4LDggKzYyOCw3IEBAIGJvb2wgRnJhbWVM
b2FkZXJDbGllbnRXeDo6c2hvdWxkRmFsbEJhY2sKIAogV1RGOjpQYXNzUmVmUHRyPERvY3VtZW50
TG9hZGVyPiBGcmFtZUxvYWRlckNsaWVudFd4OjpjcmVhdGVEb2N1bWVudExvYWRlcihjb25zdCBS
ZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFN1YnN0aXR1dGVEYXRhJiBzdWJzdGl0dXRl
RGF0YSkKIHsKLSAgICBSZWZQdHI8RG9jdW1lbnRMb2FkZXI+IGxvYWRlciA9IG5ldyBEb2N1bWVu
dExvYWRlcihyZXF1ZXN0LCBzdWJzdGl0dXRlRGF0YSk7Ci0gICAgcmV0dXJuIGxvYWRlci5yZWxl
YXNlKCk7CisgICAgcmV0dXJuIERvY3VtZW50TG9hZGVyOjpjcmVhdGUocmVxdWVzdCwgc3Vic3Rp
dHV0ZURhdGEpOwogfQogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50V3g6OmRvd25sb2FkKFJlc291
cmNlSGFuZGxlKiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0
JiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>21722</attachid>
            <date>2008-06-16 00:09:46 -0700</date>
            <delta_ts>2008-06-17 12:18:12 -0700</delta_ts>
            <desc>patch that converts StyleBase and classes derived from it</desc>
            <filename>StyleBaseRefCountPatch.txt</filename>
            <type>text/plain</type>
            <size>277125</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzNDU5MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzUyIEBACisyMDA4LTA2LTE2ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIG1v
cmUgb2YgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MjU3CisgICAg
ICAgICAgc3RhcnQgcmVmIGNvdW50cyBhdCAxIGluc3RlYWQgb2YgMCBmb3Igc3BlZWQKKworICAg
ICAgICBDaGFuZ2UgU3R5bGVCYXNlIGFuZCBhbGwgY2xhc3NlcyBkZXJpdmVkIGZyb20gaXQuCisK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1JHQkNvbG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkpTUkdCQ29sb3I6OmdldFZhbHVlUHJvcGVydHkpOgorICAgICAgICAqIGJpbmRpbmdzL29iamMv
RE9NUkdCQ29sb3IubW06CisgICAgICAgICgtW0RPTVJHQkNvbG9yIHJlZF0pOgorICAgICAgICAo
LVtET01SR0JDb2xvciBncmVlbl0pOgorICAgICAgICAoLVtET01SR0JDb2xvciBibHVlXSk6Cisg
ICAgICAgICgtW0RPTVJHQkNvbG9yIGFscGhhXSk6CisgICAgICAgICogY3NzL0NTU0JvcmRlcklt
YWdlVmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQm9yZGVySW1hZ2VWYWx1ZTo6Y3Nz
VGV4dCk6CisgICAgICAgICogY3NzL0NTU0JvcmRlckltYWdlVmFsdWUuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkNTU0JvcmRlckltYWdlVmFsdWU6OmNyZWF0ZSk6CisgICAgICAgICogY3NzL0NTU0Nh
bnZhc1ZhbHVlLmg6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYW52YXNWYWx1ZTo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbnZhc1ZhbHVlOjpzZXROYW1lKToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU0NhbnZhc1ZhbHVlOjpDU1NDYW52YXNWYWx1ZSk6CisgICAgICAgICogY3NzL0NT
U0NoYXJzZXRSdWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NoYXJzZXRSdWxlOjpDU1ND
aGFyc2V0UnVsZSk6CisgICAgICAgICogY3NzL0NTU0NoYXJzZXRSdWxlLmg6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NDaGFyc2V0UnVsZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0No
YXJzZXRSdWxlOjplbmNvZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDaGFyc2V0UnVsZTo6
aXNDaGFyc2V0UnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDaGFyc2V0UnVsZTo6dHlwZSk6
CisgICAgICAgICogY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjp2YWx1ZUZvclNoYWRvdyk6CisgICAgICAgIChXZWJDb3JlOjp2YWx1ZUZvck5p
bmVQaWVjZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OnZhbHVlRm9yUmVmbGVjdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpnZXRQb3NpdGlvbk9mZnNldFZhbHVlKToKKyAgICAgICAgKFdlYkNv
cmU6OmN1cnJlbnRDb2xvck9yVmFsaWRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpnZXRCb3Jk
ZXJSYWRpdXNDb3JuZXJWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDb21wdXRlZFN0eWxl
RGVjbGFyYXRpb246OmdldFByb3BlcnR5Q1NTVmFsdWUpOgorICAgICAgICAqIGNzcy9DU1NDb21w
dXRlZFN0eWxlRGVjbGFyYXRpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVkU3R5bGUp
OgorICAgICAgICAqIGNzcy9DU1NDdXJzb3JJbWFnZVZhbHVlLmg6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NDdXJzb3JJbWFnZVZhbHVlOjpjcmVhdGUpOgorICAgICAgICAqIGNzcy9DU1NGb250RmFj
ZVJ1bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2VSdWxlOjpDU1NGb250RmFj
ZVJ1bGUpOgorICAgICAgICAqIGNzcy9DU1NGb250RmFjZVJ1bGUuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkNTU0ZvbnRGYWNlUnVsZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRG
YWNlUnVsZTo6aXNGb250RmFjZVJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2VS
dWxlOjp0eXBlKToKKyAgICAgICAgKiBjc3MvQ1NTRm9udEZhY2VTcmNWYWx1ZS5oOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTRm9udEZhY2VTcmNWYWx1ZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU0ZvbnRGYWNlU3JjVmFsdWU6OmNyZWF0ZUxvY2FsKToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU0ZvbnRGYWNlU3JjVmFsdWU6On5DU1NGb250RmFjZVNyY1ZhbHVlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU0ZvbnRGYWNlU3JjVmFsdWU6OkNTU0ZvbnRGYWNlU3JjVmFsdWUpOgorICAgICAg
ICAqIGNzcy9DU1NHcmFkaWVudFZhbHVlLmg6CisgICAgICAgIChXZWJDb3JlOjpDU1NHcmFkaWVu
dENvbG9yU3RvcDo6Q1NTR3JhZGllbnRDb2xvclN0b3ApOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
R3JhZGllbnRWYWx1ZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0dyYWRpZW50VmFs
dWU6OkNTU0dyYWRpZW50VmFsdWUpOgorICAgICAgICAqIGNzcy9DU1NJbWFnZUdlbmVyYXRvclZh
bHVlLmg6CisgICAgICAgIChXZWJDb3JlOjpDU1NJbWFnZUdlbmVyYXRvclZhbHVlOjppc0ltYWdl
R2VuZXJhdG9yVmFsdWUpOgorICAgICAgICAqIGNzcy9DU1NJbWFnZVZhbHVlLmg6CisgICAgICAg
IChXZWJDb3JlOjpDU1NJbWFnZVZhbHVlOjpjcmVhdGUpOgorICAgICAgICAqIGNzcy9DU1NJbXBv
cnRSdWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ltcG9ydFJ1bGU6OkNTU0ltcG9ydFJ1
bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTSW1wb3J0UnVsZTo6c2V0Q1NTU3R5bGVTaGVldCk6
CisgICAgICAgICogY3NzL0NTU0ltcG9ydFJ1bGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0lt
cG9ydFJ1bGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NJbXBvcnRSdWxlOjppc0lt
cG9ydFJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTSW1wb3J0UnVsZTo6dHlwZSk6CisgICAg
ICAgICogY3NzL0NTU0luaGVyaXRlZFZhbHVlLmg6CisgICAgICAgIChXZWJDb3JlOjpDU1NJbmhl
cml0ZWRWYWx1ZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0luaGVyaXRlZFZhbHVl
OjpDU1NJbmhlcml0ZWRWYWx1ZSk6CisgICAgICAgICogY3NzL0NTU0luaXRpYWxWYWx1ZS5oOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTSW5pdGlhbFZhbHVlOjpjcmVhdGVFeHBsaWNpdCk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NJbml0aWFsVmFsdWU6OmNyZWF0ZUltcGxpY2l0KToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU0luaXRpYWxWYWx1ZTo6Q1NTSW5pdGlhbFZhbHVlKToKKyAgICAgICAgKiBj
c3MvQ1NTTWVkaWFSdWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU01lZGlhUnVsZTo6Q1NT
TWVkaWFSdWxlKToKKyAgICAgICAgKiBjc3MvQ1NTTWVkaWFSdWxlLmg6CisgICAgICAgIChXZWJD
b3JlOjpDU1NNZWRpYVJ1bGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NNZWRpYVJ1
bGU6OmlzTWVkaWFSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU01lZGlhUnVsZTo6dHlwZSk6
CisgICAgICAgICogY3NzL0NTU011dGFibGVTdHlsZURlY2xhcmF0aW9uLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpzZXRQcm9wZXJ0eSk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6c2V0U3RyaW5nUHJvcGVy
dHkpOgorICAgICAgICAqIGNzcy9DU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5oOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNyZWF0ZSk6CisgICAgICAg
ICogY3NzL0NTU1BhZ2VSdWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhZ2VSdWxlOjpD
U1NQYWdlUnVsZSk6CisgICAgICAgICogY3NzL0NTU1BhZ2VSdWxlLmg6CisgICAgICAgIChXZWJD
b3JlOjpDU1NQYWdlUnVsZTo6Y3JlYXRlKToKKyAgICAgICAgKiBjc3MvQ1NTUGFyc2VyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VDb2xvcik6CisgICAgICAgIChXZWJD
b3JlOjpDU1NQYXJzZXI6OnBhcnNlVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2Vy
OjphZGRGaWxsVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZUZpbGxT
aG9ydGhhbmQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjphZGRUcmFuc2l0aW9uVmFs
dWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZVRyYW5zaXRpb25TaG9ydGhh
bmQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZVNob3J0aGFuZCk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlQ29udGVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NQYXJzZXI6OnBhcnNlQmFja2dyb3VuZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1BhcnNlcjo6cGFyc2VGaWxsUG9zaXRpb25YWSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJz
ZXI6OnBhcnNlRmlsbFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFy
c2VGaWxsU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlRmlsbFByb3Bl
cnR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VUcmFuc2l0aW9uRHVyYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZVRyYW5zaXRpb25SZXBlYXRD
b3VudCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlVHJhbnNpdGlvblRpbWlu
Z0Z1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VUcmFuc2l0aW9u
UHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZURhc2hib2FyZFJl
Z2lvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZUNvdW50ZXJDb250ZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VTaGFwZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlRm9udCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJz
ZXI6OnBhcnNlRm9udEZhbWlseSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNl
Rm9udEZhY2VTcmMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZUZvbnRGYWNl
VW5pY29kZVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd1BhcnNlQ29udGV4dDo6Y29t
bWl0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93UGFyc2VDb250ZXh0Ojpjb21taXRM
ZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZVNoYWRvdyk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlUmVmbGVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpCb3JkZXJJbWFnZVBhcnNlQ29udGV4dDo6Y29tbWl0TnVtYmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkJvcmRlckltYWdlUGFyc2VDb250ZXh0Ojpjb21taXRCb3JkZXJJbWFnZSk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlQm9yZGVySW1hZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTUGFyc2VyOjpwYXJzZUNvdW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VHcmFk
aWVudFBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlR3JhZGllbnRDb2xvclN0b3ApOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZUdyYWRpZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VDYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFy
c2VyOjpwYXJzZVRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OmNyZWF0
ZU1lZGlhTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OmNyZWF0ZUNoYXJzZXRS
dWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6Y3JlYXRlSW1wb3J0UnVsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OmNyZWF0ZU1lZGlhUnVsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NQYXJzZXI6OmNyZWF0ZVN0eWxlUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NQYXJzZXI6OmNyZWF0ZUZvbnRGYWNlUnVsZSk6CisgICAgICAgICogY3NzL0NTU1ByaW1pdGl2
ZVZhbHVlLmg6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcmltaXRpdmVWYWx1ZTo6KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVJZGVudGlmaWVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVDb2xvcik6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NQcmltaXRpdmVWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NQcmltaXRpdmVWYWx1ZTo6aXNQcmltaXRpdmVWYWx1ZSk6CisgICAgICAgICogY3NzL0NTU1F1
aXJrUHJpbWl0aXZlVmFsdWUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1F1aXJrUHJpbWl0aXZl
VmFsdWU6OmNyZWF0ZSk6CisgICAgICAgICogY3NzL0NTU1JlZmxlY3RWYWx1ZS5oOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTUmVmbGVjdFZhbHVlOjpjcmVhdGUpOgorICAgICAgICAqIGNzcy9DU1NS
dWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1J1bGU6OnBhcmVudFJ1bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTUnVsZTo6c2V0Q3NzVGV4dCk6CisgICAgICAgICogY3NzL0NTU1J1bGUu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1J1bGU6OkNTU1J1bGUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTUnVsZTo6aXNSdWxlKToKKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVEZWNsYXJhdGlvbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZURlY2xhcmF0aW9uOjpjb3B5UHJvcGVydGll
c0luU2V0KToKKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVEZWNsYXJhdGlvbi5oOgorICAgICAgICAq
IGNzcy9DU1NTdHlsZVJ1bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVSdWxlOjpD
U1NTdHlsZVJ1bGUpOgorICAgICAgICAqIGNzcy9DU1NTdHlsZVJ1bGUuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1N0eWxlUnVsZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxl
UnVsZTo6aXNTdHlsZVJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVSdWxlOjp0eXBl
KToKKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NTdHlsZVNlbGVjdG9yOjpDU1NTdHlsZVNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OnBhcnNlVUFTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NSdWxlU2V0OjphZGRSdWxlc0Zy
b21TaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3Bl
cnR5KToKKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVTaGVldC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NTdHlsZVNoZWV0OjpjaGVja0xvYWRlZCk6CisgICAgICAgICogY3NzL0NTU1N0eWxlU2hl
ZXQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2hlZXQ6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0Ojppc0NTU1N0eWxlU2hlZXQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTU3R5bGVTaGVldDo6dHlwZSk6CisgICAgICAgICogY3NzL0NTU1RpbWluZ0Z1bmN0
aW9uVmFsdWUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1RpbWluZ0Z1bmN0aW9uVmFsdWU6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NUaW1pbmdGdW5jdGlvblZhbHVlOjpDU1NUaW1p
bmdGdW5jdGlvblZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1RpbWluZ0Z1bmN0aW9uVmFs
dWU6OmlzVHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uVmFsdWUpOgorICAgICAgICAqIGNzcy9DU1NU
cmFuc2Zvcm1WYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NUcmFuc2Zvcm1WYWx1ZTo6
Q1NTVHJhbnNmb3JtVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVHJhbnNmb3JtVmFsdWU6
On5DU1NUcmFuc2Zvcm1WYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NUcmFuc2Zvcm1WYWx1
ZTo6YWRkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVHJhbnNmb3JtVmFsdWU6OmNzc1Rl
eHQpOgorICAgICAgICAqIGNzcy9DU1NUcmFuc2Zvcm1WYWx1ZS5oOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTVHJhbnNmb3JtVmFsdWU6OmNyZWF0ZSk6CisgICAgICAgICogY3NzL0NTU1VuaWNvZGVS
YW5nZVZhbHVlLmg6CisgICAgICAgIChXZWJDb3JlOjpDU1NVbmljb2RlUmFuZ2VWYWx1ZTo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1VuaWNvZGVSYW5nZVZhbHVlOjpDU1NVbmljb2Rl
UmFuZ2VWYWx1ZSk6CisgICAgICAgICogY3NzL0NTU1Vua25vd25SdWxlLmg6CisgICAgICAgICog
Y3NzL0NTU1ZhbHVlLmg6CisgICAgICAgIChXZWJDb3JlOjpDU1NWYWx1ZTo6aXNJbWFnZUdlbmVy
YXRvclZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ZhbHVlOjppc0ltYWdlVmFsdWUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTVmFsdWU6OmlzUHJpbWl0aXZlVmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTVmFsdWU6OmlzVmFsdWVMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Zh
bHVlOjppc1NWR0NvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ZhbHVlOjppc1NWR1BhaW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ZhbHVlOjpDU1NWYWx1ZSk6CisgICAgICAgICogY3Nz
L0NTU1ZhbHVlTGlzdC5oOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVmFsdWVMaXN0OjpjcmVhdGVD
b21tYVNlcGFyYXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NWYWx1ZUxpc3Q6OmNyZWF0ZVNw
YWNlU2VwYXJhdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ZhbHVlTGlzdDo6aXNWYWx1ZUxp
c3QpOgorICAgICAgICAqIGNzcy9Gb250RmFtaWx5VmFsdWUuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnRGYW1pbHlWYWx1ZTo6Y3JlYXRlKToKKyAgICAgICAgKiBjc3MvRm9udFZhbHVlLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpGb250VmFsdWU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpG
b250VmFsdWU6OkZvbnRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpGb250VmFsdWU6OmlzRm9u
dFZhbHVlKToKKyAgICAgICAgKiBjc3MvTWVkaWFMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhTGlzdDo6TWVkaWFMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhTGlzdDo6ZGVs
ZXRlTWVkaXVtKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhTGlzdDo6c2V0TWVkaWFUZXh0KToK
KyAgICAgICAgKiBjc3MvTWVkaWFMaXN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUxpc3Q6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUxpc3Q6OmNyZWF0ZUFsbG93aW5nRGVz
Y3JpcHRpb25TeW50YXgpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFMaXN0OjpsZW5ndGgpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFMaXN0OjptZWRpYVF1ZXJpZXMpOgorICAgICAgICAqIGNz
cy9NZWRpYVF1ZXJ5RXZhbHVhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUXVlcnlF
dmFsdWF0b3I6OmV2YWwpOgorICAgICAgICAqIGNzcy9NZWRpYVF1ZXJ5RXhwLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUXVlcnlFeHA6Ok1lZGlhUXVlcnlFeHApOgorICAgICAgICAqIGNz
cy9TVkdDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Z2x5cGhPcmllbnRhdGlvblRvQ1NTUHJpbWl0aXZlVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpnZXRTVkdQcm9wZXJ0eUNTU1ZhbHVlKToKKyAg
ICAgICAgKiBjc3MvU1ZHQ1NTUGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNl
cjo6cGFyc2VTVkdWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlU1ZH
U3Ryb2tlRGFzaGFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VTVkdQ
YWludCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlU1ZHQ29sb3IpOgorICAg
ICAgICAqIGNzcy9TaGFkb3dWYWx1ZS5oOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93VmFsdWU6
OmNyZWF0ZSk6CisgICAgICAgICogY3NzL1N0eWxlQmFzZS5oOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVCYXNlOjppc0NTU1N0eWxlU2hlZXQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCYXNl
Ojppc0ZvbnRGYWNlUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJhc2U6OmlzUnVsZSk6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJhc2U6OmlzU3R5bGVSdWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlQmFzZTo6aXNTdHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
QmFzZTo6aXNYU0xTdHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQmFzZTo6U3R5
bGVCYXNlKToKKyAgICAgICAgKiBjc3MvU3R5bGVMaXN0LmNwcDoKKyAgICAgICAgKiBjc3MvU3R5
bGVMaXN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUxpc3Q6OlN0eWxlTGlzdCk6CisgICAg
ICAgICogY3NzL1N0eWxlU2hlZXQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hlZXQ6OnN0
eWxlU2hlZXRDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hlZXQ6OmlzU3R5bGVT
aGVldCk6CisgICAgICAgICogZG9tL0NTU01hcHBlZEF0dHJpYnV0ZURlY2xhcmF0aW9uLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NNYXBwZWRBdHRyaWJ1dGVEZWNsYXJhdGlvbjo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU01hcHBlZEF0dHJpYnV0ZURlY2xhcmF0aW9uOjpDU1NNYXBw
ZWRBdHRyaWJ1dGVEZWNsYXJhdGlvbik6CisgICAgICAgICogZG9tL0RPTUltcGxlbWVudGF0aW9u
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTUltcGxlbWVudGF0aW9uOjpjcmVhdGVDU1NTdHls
ZVNoZWV0KToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RG9jdW1lbnQ6OmNyZWF0ZUNTU1N0eWxlRGVjbGFyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
RG9jdW1lbnQ6OnNldENTU1N0eWxlU2hlZXQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6
OmVsZW1lbnRTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6bWFwcGVkRWxlbWVu
dFNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpyZWNhbGNTdHlsZVNlbGVjdG9y
KToKKyAgICAgICAgKiBkb20vTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpxdWVy
eVNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnF1ZXJ5U2VsZWN0b3JBbGwpOgor
ICAgICAgICAqIGRvbS9Qb3NpdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbjo6
Y29tcHV0ZWRTdHlsZSk6CisgICAgICAgICogZG9tL1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246OmNoZWNrU3R5bGVTaGVl
dCk6CisgICAgICAgIChXZWJDb3JlOjpQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246OnNldENTU1N0eWxl
U2hlZXQpOgorICAgICAgICAoV2ViQ29yZTo6UHJvY2Vzc2luZ0luc3RydWN0aW9uOjpzZXRYU0xT
dHlsZVNoZWV0KToKKyAgICAgICAgKiBkb20vUHJvY2Vzc2luZ0luc3RydWN0aW9uLmg6CisgICAg
ICAgICogZG9tL1N0eWxlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUVsZW1l
bnQ6OmNyZWF0ZVNoZWV0KToKKyAgICAgICAgKiBkb20vU3R5bGVkRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZWRFbGVtZW50OjpjcmVhdGVJbmxpbmVTdHlsZURlY2wpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVkRWxlbWVudDo6Y3JlYXRlTWFwcGVkRGVjbCk6CisgICAgICAg
ICogZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBcHBs
eVN0eWxlQ29tbWFuZDo6QXBwbHlTdHlsZUNvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6aGFz
VGV4dERlY29yYXRpb25Qcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29t
bWFuZDo6ZXh0cmFjdEFuZE5lZ2F0ZVRleHREZWNvcmF0aW9uU3R5bGUpOgorICAgICAgICAqIGVk
aXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9z
aXRlRWRpdENvbW1hbmQ6OmJyZWFrT3V0T2ZFbXB0eUxpc3RJdGVtKToKKyAgICAgICAgKiBlZGl0
aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRl
U2VsZWN0aW9uQ29tbWFuZDo6Y2FsY3VsYXRlVHlwaW5nU3R5bGVBZnRlckRlbGV0ZSk6CisgICAg
ICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZWxl
Y3Rpb25IYXNTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNldEJhc2VXcml0aW5n
RGlyZWN0aW9uKToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6ZXhlY3V0ZUFwcGx5U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6ZXhlY3V0
ZVRvZ2dsZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVBcHBseVBhcmFncmFwaFN0
eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OnN0YXRlU3R5bGUpOgorICAgICAgICAqIGVkaXRpbmcv
SW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kOjphcHBseVN0eWxlQWZ0ZXJJbnNlcnRpb24p
OgorICAgICAgICAqIGVkaXRpbmcvUmVtb3ZlRm9ybWF0Q29tbWFuZC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW1vdmVGb3JtYXRDb21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBlZGl0aW5n
L1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxhY2Vt
ZW50RnJhZ21lbnQ6Omluc2VydEZyYWdtZW50Rm9yVGVzdFJlbmRlcmluZyk6CisgICAgICAgICog
ZWRpdGluZy9tYXJrdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c3R5bGVGcm9tTWF0Y2hlZFJ1
bGVzRm9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjphcHBlbmRTdGFydE1hcmt1cCk6Cisg
ICAgICAgICogaHRtbC9IVE1MQm9keUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TEJvZHlFbGVtZW50OjpjcmVhdGVMaW5rRGVjbCk6CisgICAgICAgICogaHRtbC9IVE1MTGlua0Vs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTExpbmtFbGVtZW50Ojpwcm9jZXNzKToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxMaW5rRWxlbWVudDo6c2V0Q1NTU3R5bGVTaGVldCk6Cisg
ICAgICAgICogaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxNZWRpYUVsZW1lbnQ6OnBpY2tNZWRpYSk6CisgICAgICAgICogaHRtbC9IVE1MVGFibGVFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUYWJsZUVsZW1lbnQ6OmFkZGl0aW9uYWxB
dHRyaWJ1dGVTdHlsZURlY2xzKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUYWJsZUVsZW1lbnQ6
OmFkZFNoYXJlZENlbGxCb3JkZXJzRGVjbCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGFibGVF
bGVtZW50OjphZGRTaGFyZWRDZWxsUGFkZGluZ0RlY2wpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TFRhYmxlRWxlbWVudDo6YWRkU2hhcmVkR3JvdXBEZWNscyk6CisgICAgICAgICogcGFnZS9ET01X
aW5kb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93OjpnZXRDb21wdXRlZFN0eWxl
KToKKyAgICAgICAgKiBwYWdlL0ZyYW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpj
b21wdXRlQW5kU2V0VHlwaW5nU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OnNlbGVj
dGlvbkNvbXB1dGVkU3R5bGUpOgorICAgICAgICAqIHBhZ2UvRnJhbWUuaDoKKyAgICAgICAgKiBy
ZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVD
YWNoZWRJbWFnZTo6Y3NzVmFsdWUpOgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9SZW5kZXJT
dHlsZS5oOgorICAgICAgICAqIHN2Zy9TVkdDb2xvci5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
Q29sb3I6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdDb2xvcjo6aXNTVkdDb2xvcik6
CisgICAgICAgICogc3ZnL1NWR0ZvbnRGYWNlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdGb250RmFjZUVsZW1lbnQ6OlNWR0ZvbnRGYWNlRWxlbWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdGb250RmFjZUVsZW1lbnQ6OnJlYnVpbGRGb250RmFjZSk6CisgICAgICAgICogc3Zn
L1NWR0ZvbnRGYWNlTmFtZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRm9udEZh
Y2VOYW1lRWxlbWVudDo6c3JjVmFsdWUpOgorICAgICAgICAqIHN2Zy9TVkdGb250RmFjZVNyY0Vs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRm9udEZhY2VTcmNFbGVtZW50OjpzcmNW
YWx1ZSk6CisgICAgICAgICogc3ZnL1NWR0ZvbnRGYWNlVXJpRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdGb250RmFjZVVyaUVsZW1lbnQ6OnNyY1ZhbHVlKToKKyAgICAgICAgKiBz
dmcvU1ZHUGFpbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGFpbnQ6OlNWR1BhaW50KToK
KyAgICAgICAgKiBzdmcvU1ZHUGFpbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhaW50Ojpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGFpbnQ6OmlzU1ZHUGFpbnQpOgorICAgICAg
ICAqIHN2Zy9hbmltYXRpb24vU01JTFRpbWVDb250YWluZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U01JTFRpbWVDb250YWluZXI6OmJhc2VWYWx1ZUZvcik6CisgICAgICAgICogeG1sL1hTTElt
cG9ydFJ1bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WFNMSW1wb3J0UnVsZTo6WFNMSW1wb3J0
UnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpYU0xJbXBvcnRSdWxlOjpzZXRYU0xTdHlsZVNoZWV0
KToKKyAgICAgICAgKiB4bWwvWFNMSW1wb3J0UnVsZS5oOgorICAgICAgICAoV2ViQ29yZTo6WFNM
SW1wb3J0UnVsZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlhTTEltcG9ydFJ1bGU6Omhy
ZWYpOgorICAgICAgICAoV2ViQ29yZTo6WFNMSW1wb3J0UnVsZTo6aXNJbXBvcnRSdWxlKToKKyAg
ICAgICAgKiB4bWwvWFNMU3R5bGVTaGVldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYU0xTdHls
ZVNoZWV0OjpjaGVja0xvYWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpYU0xTdHlsZVNoZWV0Ojps
b2FkQ2hpbGRTaGVldCk6CisgICAgICAgICogeG1sL1hTTFN0eWxlU2hlZXQuaDoKKyAgICAgICAg
KFdlYkNvcmU6OlhTTFN0eWxlU2hlZXQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpYU0xT
dHlsZVNoZWV0OjpjcmVhdGVFbWJlZGRlZCk6CisgICAgICAgICogeG1sL1hTTFRQcm9jZXNzb3Iu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6eHNsdFN0eWxlc2hlZXRQb2ludGVyKToKKwogMjAwOC0w
Ni0xNSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUnViYmVyIHN0
YW1wZWQgYnkgU2FtLgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JHQkNvbG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTUkdCQ29sb3IuY3BwCShyZXZpc2lv
biAzNDU4NCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNSR0JDb2xvci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTY4LDcgKzY4LDcgQEAgSlNWYWx1ZSogSlNSR0JDb2xvcjo6Z2V0VmFsdWVQcm9w
ZXJ0eShFeAogICAgICAgICAgICAgY29sb3IgPj49IDg7CiAgICAgICAgICAgICAvLyBmYWxsIHRo
cm91Z2gKICAgICAgICAgY2FzZSBCbHVlOgotICAgICAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywg
bmV3IENTU1ByaW1pdGl2ZVZhbHVlKGNvbG9yICYgMHhGRiwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19OVU1CRVIpKTsKKyAgICAgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIENTU1ByaW1pdGl2ZVZh
bHVlOjpjcmVhdGUoY29sb3IgJiAweEZGLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikp
OwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQpJbmRleDog
V2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTVJHQkNvbG9yLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvYmluZGluZ3Mvb2JqYy9ET01SR0JDb2xvci5tbQkocmV2aXNpb24gMzQ1ODQpCisrKyBXZWJD
b3JlL2JpbmRpbmdzL29iamMvRE9NUkdCQ29sb3IubW0JKHdvcmtpbmcgY29weSkKQEAgLTkxLDI4
ICs5MSwyOCBAQCB2b2lkIHJlbW92ZVdyYXBwZXJGb3JSR0IoV2ViQ29yZTo6UkdCQTMyCiB7CiAg
ICAgV2ViQ29yZTo6UkdCQTMyIHJnYiA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihfaW50
ZXJuYWwpOwogICAgIGludCB2YWx1ZSA9IChyZ2IgPj4gMTYpICYgMHhGRjsKLSAgICByZXR1cm4g
W0RPTUNTU1ByaW1pdGl2ZVZhbHVlIF93cmFwQ1NTUHJpbWl0aXZlVmFsdWU6bmV3IFdlYkNvcmU6
OkNTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlLCBXZWJDb3JlOjpDU1NQcmltaXRpdmVWYWx1ZTo6Q1NT
X05VTUJFUildOworICAgIHJldHVybiBbRE9NQ1NTUHJpbWl0aXZlVmFsdWUgX3dyYXBDU1NQcmlt
aXRpdmVWYWx1ZTpXZWJDb3JlOjpDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHZhbHVlLCBXZWJD
b3JlOjpDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikuZ2V0KCldOwogfQogCiAtIChET01D
U1NQcmltaXRpdmVWYWx1ZSAqKWdyZWVuCiB7CiAgICAgV2ViQ29yZTo6UkdCQTMyIHJnYiA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihfaW50ZXJuYWwpOwogICAgIGludCB2YWx1ZSA9IChy
Z2IgPj4gOCkgJiAweEZGOwotICAgIHJldHVybiBbRE9NQ1NTUHJpbWl0aXZlVmFsdWUgX3dyYXBD
U1NQcmltaXRpdmVWYWx1ZTpuZXcgV2ViQ29yZTo6Q1NTUHJpbWl0aXZlVmFsdWUodmFsdWUsIFdl
YkNvcmU6OkNTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKV07CisgICAgcmV0dXJuIFtET01D
U1NQcmltaXRpdmVWYWx1ZSBfd3JhcENTU1ByaW1pdGl2ZVZhbHVlOldlYkNvcmU6OkNTU1ByaW1p
dGl2ZVZhbHVlOjpjcmVhdGUodmFsdWUsIFdlYkNvcmU6OkNTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
TlVNQkVSKS5nZXQoKV07CiB9CiAKIC0gKERPTUNTU1ByaW1pdGl2ZVZhbHVlICopYmx1ZQogewog
ICAgIFdlYkNvcmU6OlJHQkEzMiByZ2IgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oX2lu
dGVybmFsKTsKICAgICBpbnQgdmFsdWUgPSByZ2IgJiAweEZGOwotICAgIHJldHVybiBbRE9NQ1NT
UHJpbWl0aXZlVmFsdWUgX3dyYXBDU1NQcmltaXRpdmVWYWx1ZTpuZXcgV2ViQ29yZTo6Q1NTUHJp
bWl0aXZlVmFsdWUodmFsdWUsIFdlYkNvcmU6OkNTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVS
KV07CisgICAgcmV0dXJuIFtET01DU1NQcmltaXRpdmVWYWx1ZSBfd3JhcENTU1ByaW1pdGl2ZVZh
bHVlOldlYkNvcmU6OkNTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUodmFsdWUsIFdlYkNvcmU6OkNT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKS5nZXQoKV07CiB9CiAKIC0gKERPTUNTU1ByaW1p
dGl2ZVZhbHVlICopYWxwaGEKIHsKICAgICBXZWJDb3JlOjpSR0JBMzIgcmdiID0gcmVpbnRlcnBy
ZXRfY2FzdDx1aW50cHRyX3Q+KF9pbnRlcm5hbCk7CiAgICAgZmxvYXQgdmFsdWUgPSBzdGF0aWNf
Y2FzdDxmbG9hdD4oV2ViQ29yZTo6Q29sb3IocmdiKS5hbHBoYSgpKSAvIDB4RkY7Ci0gICAgcmV0
dXJuIFtET01DU1NQcmltaXRpdmVWYWx1ZSBfd3JhcENTU1ByaW1pdGl2ZVZhbHVlOm5ldyBXZWJD
b3JlOjpDU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZSwgV2ViQ29yZTo6Q1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19OVU1CRVIpXTsKKyAgICByZXR1cm4gW0RPTUNTU1ByaW1pdGl2ZVZhbHVlIF93cmFwQ1NT
UHJpbWl0aXZlVmFsdWU6V2ViQ29yZTo6Q1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSh2YWx1ZSwg
V2ViQ29yZTo6Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpLmdldCgpXTsKICAgICAKIH0K
IApJbmRleDogV2ViQ29yZS9jc3MvQ1NTQm9yZGVySW1hZ2VWYWx1ZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9jc3MvQ1NTQm9yZGVySW1hZ2VWYWx1ZS5jcHAJKHJldmlzaW9uIDM0NTg0KQor
KysgV2ViQ29yZS9jc3MvQ1NTQm9yZGVySW1hZ2VWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsOCArMSw2IEBACi0vKioKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00gaW1wbGVt
ZW50YXRpb24gZm9yIEtERS4KLSAqCisvKgogICogKEMpIDE5OTktMjAwMyBMYXJzIEtub2xsIChr
bm9sbEBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2IEFwcGxlIENv
bXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC01Myw5
ICs1MSw5IEBAIFN0cmluZyBDU1NCb3JkZXJJbWFnZVZhbHVlOjpjc3NUZXh0KCkgY28KIAogICAg
IC8vIE5vdyB0aGUga2V5d29yZHMuCiAgICAgdGV4dCArPSAiICI7Ci0gICAgdGV4dCArPSBDU1NQ
cmltaXRpdmVWYWx1ZShtX2hvcml6b250YWxTaXplUnVsZSkuY3NzVGV4dCgpOworICAgIHRleHQg
Kz0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUlkZW50aWZpZXIobV9ob3Jpem9udGFsU2l6ZVJ1
bGUpLT5jc3NUZXh0KCk7CiAgICAgdGV4dCArPSAiICI7Ci0gICAgdGV4dCArPSBDU1NQcmltaXRp
dmVWYWx1ZShtX3ZlcnRpY2FsU2l6ZVJ1bGUpLmNzc1RleHQoKTsKKyAgICB0ZXh0ICs9IENTU1By
aW1pdGl2ZVZhbHVlOjpjcmVhdGVJZGVudGlmaWVyKG1fdmVydGljYWxTaXplUnVsZSktPmNzc1Rl
eHQoKTsKIAogICAgIHJldHVybiB0ZXh0OwogfQpJbmRleDogV2ViQ29yZS9jc3MvQ1NTQm9yZGVy
SW1hZ2VWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU0JvcmRlckltYWdlVmFs
dWUuaAkocmV2aXNpb24gMzQ1ODQpCisrKyBXZWJDb3JlL2Nzcy9DU1NCb3JkZXJJbWFnZVZhbHVl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsOCArMSw2IEBACiAvKgotICogVGhpcyBmaWxlIGlzIHBh
cnQgb2YgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgotICoKICAqIChDKSAxOTk5LTIw
MDMgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAw
NSwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1
LCAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwpAQCAtMjQsNyArMjIsNiBAQAogI2RlZmluZSBDU1NCb3JkZXJJbWFnZVZhbHVlX2gK
IAogI2luY2x1ZGUgIkNTU1ZhbHVlLmgiCi0KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgog
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIApAQCAtMzQsMTQgKzMxLDE1IEBAIGNsYXNzIFJlY3Q7
CiAKIGNsYXNzIENTU0JvcmRlckltYWdlVmFsdWUgOiBwdWJsaWMgQ1NTVmFsdWUgewogcHVibGlj
OgotICAgIENTU0JvcmRlckltYWdlVmFsdWUoKTsKLSAgICBDU1NCb3JkZXJJbWFnZVZhbHVlKFBh
c3NSZWZQdHI8Q1NTVmFsdWU+LCBQYXNzUmVmUHRyPFJlY3Q+LCBpbnQgaG9yaXpvbnRhbFJ1bGUs
IGludCB2ZXJ0aWNhbFJ1bGUpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPENTU0JvcmRlckltYWdl
VmFsdWU+IGNyZWF0ZShQYXNzUmVmUHRyPENTU1ZhbHVlPiBpbWFnZSwgUGFzc1JlZlB0cjxSZWN0
PiBzbGljZVJlY3QsIGludCBob3Jpem9udGFsUnVsZSwgaW50IHZlcnRpY2FsUnVsZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ1NTQm9yZGVySW1hZ2VWYWx1ZShpbWFnZSwg
c2xpY2VSZWN0LCBob3Jpem9udGFsUnVsZSwgdmVydGljYWxSdWxlKSk7CisgICAgfQogCiAgICAg
dmlydHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0OwogCiAgICAgQ1NTVmFsdWUqIGltYWdlVmFs
dWUoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlLmdldCgpOyB9CiAgCi1wdWJsaWM6CiAgICAgLy8g
VGhlIGJvcmRlciBpbWFnZS4KICAgICBSZWZQdHI8Q1NTVmFsdWU+IG1faW1hZ2U7CiAKQEAgLTUy
LDYgKzUwLDkgQEAgcHVibGljOgogICAgIC8vIFZhbHVlcyBmb3IgaG93IHRvIGhhbmRsZSB0aGUg
c2NhbGluZy9zdHJldGNoaW5nL3RpbGluZyBvZiB0aGUgaW1hZ2Ugc2xpY2VzLgogICAgIGludCBt
X2hvcml6b250YWxTaXplUnVsZTsgLy8gUnVsZSBmb3IgaG93IHRvIGFkanVzdCB0aGUgd2lkdGhz
IG9mIHRoZSB0b3AvbWlkZGxlL2JvdHRvbQogICAgIGludCBtX3ZlcnRpY2FsU2l6ZVJ1bGU7IC8v
IFJ1bGUgZm9yIGhvdyB0byBhZGp1c3QgdGhlIGhlaWdodHMgb2YgdGhlIGxlZnQvbWlkZGxlL3Jp
Z2h0CisKK3ByaXZhdGU6CisgICAgQ1NTQm9yZGVySW1hZ2VWYWx1ZShQYXNzUmVmUHRyPENTU1Zh
bHVlPiBpbWFnZSwgUGFzc1JlZlB0cjxSZWN0PiBzbGljZVJlY3QsIGludCBob3Jpem9udGFsUnVs
ZSwgaW50IHZlcnRpY2FsUnVsZSk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBXZWJDb3JlL2Nzcy9DU1NDYW52YXNWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3Nz
L0NTU0NhbnZhc1ZhbHVlLmgJKHJldmlzaW9uIDM0NTg0KQorKysgV2ViQ29yZS9jc3MvQ1NTQ2Fu
dmFzVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDggQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDIyICsyNywxNiBAQAogI2RlZmluZSBDU1NDYW52YXNW
YWx1ZV9oCiAKICNpbmNsdWRlICJDU1NJbWFnZUdlbmVyYXRvclZhbHVlLmgiCi0KLSNpbmNsdWRl
ICJDU1NQcmltaXRpdmVWYWx1ZS5oIgogI2luY2x1ZGUgIkhUTUxDYW52YXNFbGVtZW50LmgiCi0j
aW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLQotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRG9j
dW1lbnQ7CiAKLWNsYXNzIENTU0NhbnZhc1ZhbHVlIDogcHVibGljIENTU0ltYWdlR2VuZXJhdG9y
VmFsdWUsIHB1YmxpYyBDYW52YXNPYnNlcnZlciB7CitjbGFzcyBDU1NDYW52YXNWYWx1ZSA6IHB1
YmxpYyBDU1NJbWFnZUdlbmVyYXRvclZhbHVlLCBwcml2YXRlIENhbnZhc09ic2VydmVyIHsKIHB1
YmxpYzoKLSAgICBDU1NDYW52YXNWYWx1ZSgpIHt9OwotICAgIH5DU1NDYW52YXNWYWx1ZSgpOwor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPENTU0NhbnZhc1ZhbHVlPiBjcmVhdGUoKSB7IHJldHVybiBh
ZG9wdFJlZihuZXcgQ1NTQ2FudmFzVmFsdWUpOyB9CisgICAgdmlydHVhbCB+Q1NTQ2FudmFzVmFs
dWUoKTsKIAogICAgIHZpcnR1YWwgU3RyaW5nIGNzc1RleHQoKSBjb25zdDsKIApAQCAtNTAsMTIg
KzQ0LDE0IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNGaXhlZFNpemUoKSBjb25zdCB7
IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBJbnRTaXplIGZpeGVkU2l6ZShjb25zdCBSZW5k
ZXJPYmplY3QqKTsKIAorICAgIHZvaWQgc2V0TmFtZShjb25zdCBTdHJpbmcmIG5hbWUpIHsgbV9u
YW1lID0gbmFtZTsgfQorCitwcml2YXRlOgorICAgIENTU0NhbnZhc1ZhbHVlKCkgeyB9CisKICAg
ICB2aXJ0dWFsIHZvaWQgY2FudmFzQ2hhbmdlZChIVE1MQ2FudmFzRWxlbWVudCogZWxlbWVudCwg
Y29uc3QgRmxvYXRSZWN0JiBjaGFuZ2VkUmVjdCk7CiAgICAgdmlydHVhbCB2b2lkIGNhbnZhc1Jl
c2l6ZWQoSFRNTENhbnZhc0VsZW1lbnQqIGVsZW1lbnQpOwogCi0gICAgdm9pZCBzZXROYW1lKGNv
bnN0IFN0cmluZyYgbmFtZSkgeyBtX25hbWUgPSBuYW1lOyB9Ci0KLXByb3RlY3RlZDoKICAgICBI
VE1MQ2FudmFzRWxlbWVudCogZWxlbWVudChEb2N1bWVudCopOwogICAgICAKICAgICAvLyBUaGUg
bmFtZSBvZiB0aGUgY2FudmFzLgpJbmRleDogV2ViQ29yZS9jc3MvQ1NTQ2hhcnNldFJ1bGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU0NoYXJzZXRSdWxlLmNwcAkocmV2aXNpb24g
MzQ1ODQpCisrKyBXZWJDb3JlL2Nzcy9DU1NDaGFyc2V0UnVsZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNyArMSw1IEBACi0vKioKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00gaW1w
bGVtZW50YXRpb24gZm9yIEtERS4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29t
cHV0ZXIsIEluYy4KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3Vy
eWFrb3YgKGFwQG1hY3J1bGVzLnJ1KQogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTI1LDcgKzIzLDcgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1DU1NDaGFyc2V0UnVsZTo6Q1NTQ2hhcnNldFJ1bGUoU3R5
bGVCYXNlKiBwYXJlbnQsIGNvbnN0IFN0cmluZyYgZW5jb2RpbmcpCitDU1NDaGFyc2V0UnVsZTo6
Q1NTQ2hhcnNldFJ1bGUoQ1NTU3R5bGVTaGVldCogcGFyZW50LCBjb25zdCBTdHJpbmcmIGVuY29k
aW5nKQogICAgIDogQ1NTUnVsZShwYXJlbnQpCiAgICAgLCBtX2VuY29kaW5nKGVuY29kaW5nKQog
ewpJbmRleDogV2ViQ29yZS9jc3MvQ1NTQ2hhcnNldFJ1bGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2Nzcy9DU1NDaGFyc2V0UnVsZS5oCShyZXZpc2lvbiAzNDU4NCkKKysrIFdlYkNvcmUvY3Nz
L0NTU0NoYXJzZXRSdWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsOSArMSw3IEBACiAvKgotICog
VGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgotICoK
ICAqIChDKSAxOTk5LTIwMDMgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqIChDKSAyMDAy
LTIwMDMgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDIsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwMiwgMjAw
NiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKQEAgLTI5LDI0ICsyNywyOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXR5cGVkZWYg
aW50IEV4Y2VwdGlvbkNvZGU7Ci0KIGNsYXNzIENTU0NoYXJzZXRSdWxlIDogcHVibGljIENTU1J1
bGUgewogcHVibGljOgotICAgIENTU0NoYXJzZXRSdWxlKFN0eWxlQmFzZSogcGFyZW50LCBjb25z
dCBTdHJpbmcmIGVuY29kaW5nKTsKLSAgICB2aXJ0dWFsIH5DU1NDaGFyc2V0UnVsZSgpOworICAg
IHN0YXRpYyBQYXNzUmVmUHRyPENTU0NoYXJzZXRSdWxlPiBjcmVhdGUoQ1NTU3R5bGVTaGVldCog
cGFyZW50LCBjb25zdCBTdHJpbmcmIGVuY29kaW5nKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBDU1NDaGFyc2V0UnVsZShwYXJlbnQsIGVuY29kaW5nKSk7CisgICAgfQogCi0g
ICAgdmlydHVhbCBib29sIGlzQ2hhcnNldFJ1bGUoKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmly
dHVhbCB+Q1NTQ2hhcnNldFJ1bGUoKTsKIAotICAgIFN0cmluZyBlbmNvZGluZygpIGNvbnN0IHsg
cmV0dXJuIG1fZW5jb2Rpbmc7IH0KKyAgICBjb25zdCBTdHJpbmcmIGVuY29kaW5nKCkgY29uc3Qg
eyByZXR1cm4gbV9lbmNvZGluZzsgfQogICAgIHZvaWQgc2V0RW5jb2RpbmcoY29uc3QgU3RyaW5n
JiBlbmNvZGluZywgRXhjZXB0aW9uQ29kZSYpIHsgbV9lbmNvZGluZyA9IGVuY29kaW5nOyB9CiAK
LSAgICAvLyBJbmhlcml0ZWQgZnJvbSBDU1NSdWxlCi0gICAgdmlydHVhbCB1bnNpZ25lZCBzaG9y
dCB0eXBlKCkgY29uc3QgeyByZXR1cm4gQ0hBUlNFVF9SVUxFOyB9Ci0KICAgICB2aXJ0dWFsIFN0
cmluZyBjc3NUZXh0KCkgY29uc3Q7CiAKLXByb3RlY3RlZDoKK3ByaXZhdGU6CisgICAgQ1NTQ2hh
cnNldFJ1bGUoQ1NTU3R5bGVTaGVldCogcGFyZW50LCBjb25zdCBTdHJpbmcmIGVuY29kaW5nKTsK
KworICAgIHZpcnR1YWwgYm9vbCBpc0NoYXJzZXRSdWxlKCkgeyByZXR1cm4gdHJ1ZTsgfQorCisg
ICAgLy8gZnJvbSBDU1NSdWxlCisgICAgdmlydHVhbCB1bnNpZ25lZCBzaG9ydCB0eXBlKCkgY29u
c3QgeyByZXR1cm4gQ0hBUlNFVF9SVUxFOyB9CisKICAgICBTdHJpbmcgbV9lbmNvZGluZzsKIH07
CiAKSW5kZXg6IFdlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAko
cmV2aXNpb24gMzQ1ODQpCisrKyBXZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRp
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDIsMTUgKzI0MiwxNSBAQCBjb25zdCB1bnNpZ25l
ZCBudW1Db21wdXRlZFByb3BlcnRpZXMgPSBzCiBzdGF0aWMgUGFzc1JlZlB0cjxDU1NWYWx1ZT4g
dmFsdWVGb3JTaGFkb3coY29uc3QgU2hhZG93RGF0YSogc2hhZG93KQogewogICAgIGlmICghc2hh
ZG93KQotICAgICAgICByZXR1cm4gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKENTU1ZhbHVlTm9uZSk7
CisgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlSWRlbnRpZmllcihDU1NW
YWx1ZU5vbmUpOwogCi0gICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gbGlzdCA9IG5ldyBDU1NWYWx1
ZUxpc3Q7CisgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gbGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3Jl
YXRlQ29tbWFTZXBhcmF0ZWQoKTsKICAgICBmb3IgKGNvbnN0IFNoYWRvd0RhdGEqIHMgPSBzaGFk
b3c7IHM7IHMgPSBzLT5uZXh0KSB7Ci0gICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4g
eCA9IG5ldyBDU1NQcmltaXRpdmVWYWx1ZShzLT54LCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BY
KTsKLSAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB5ID0gbmV3IENTU1ByaW1pdGl2
ZVZhbHVlKHMtPnksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgpOwotICAgICAgICBSZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+IGJsdXIgPSBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUocy0+Ymx1ciwg
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCk7Ci0gICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVW
YWx1ZT4gY29sb3IgPSBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUocy0+Y29sb3IucmdiKCkpOwotICAg
ICAgICBsaXN0LT5wcmVwZW5kKG5ldyBTaGFkb3dWYWx1ZSh4LnJlbGVhc2UoKSwgeS5yZWxlYXNl
KCksIGJsdXIucmVsZWFzZSgpLCBjb2xvci5yZWxlYXNlKCkpKTsKKyAgICAgICAgUmVmUHRyPENT
U1ByaW1pdGl2ZVZhbHVlPiB4ID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShzLT54LCBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX1BYKTsKKyAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PiB5ID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShzLT55LCBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX1BYKTsKKyAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBibHVyID0gQ1NTUHJp
bWl0aXZlVmFsdWU6OmNyZWF0ZShzLT5ibHVyLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKTsK
KyAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb2xvciA9IENTU1ByaW1pdGl2ZVZh
bHVlOjpjcmVhdGVDb2xvcihzLT5jb2xvci5yZ2IoKSk7CisgICAgICAgIGxpc3QtPnByZXBlbmQo
U2hhZG93VmFsdWU6OmNyZWF0ZSh4LnJlbGVhc2UoKSwgeS5yZWxlYXNlKCksIGJsdXIucmVsZWFz
ZSgpLCBjb2xvci5yZWxlYXNlKCkpKTsKICAgICB9CiAgICAgcmV0dXJuIGxpc3QucmVsZWFzZSgp
OwogfQpAQCAtMjcwLDcgKzI3MCw3IEBAIHN0YXRpYyBpbnQgdmFsdWVGb3JSZXBlYXRSdWxlKGlu
dCBydWxlKQogc3RhdGljIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlRm9yTmluZVBpZWNlSW1h
Z2UoY29uc3QgTmluZVBpZWNlSW1hZ2UmIGltYWdlKQogewogICAgIGlmICghaW1hZ2UuaGFzSW1h
Z2UoKSkKLSAgICAgICAgcmV0dXJuIG5ldyBDU1NQcmltaXRpdmVWYWx1ZShDU1NWYWx1ZU5vbmUp
OworICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUlkZW50aWZpZXIoQ1NT
VmFsdWVOb25lKTsKICAgICAKICAgICAvLyBJbWFnZSBmaXJzdC4KICAgICBSZWZQdHI8Q1NTVmFs
dWU+IGltYWdlVmFsdWU7CkBAIC0yODAsMjcgKzI4MCwyNyBAQCBzdGF0aWMgUGFzc1JlZlB0cjxD
U1NWYWx1ZT4gdmFsdWVGb3JOaW5lCiAgICAgLy8gQ3JlYXRlIHRoZSBzbGljZXMuCiAgICAgUmVm
UHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB0b3A7CiAgICAgaWYgKGltYWdlLm1fc2xpY2VzLnRvcC5p
c1BlcmNlbnQoKSkKLSAgICAgICAgdG9wID0gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKGltYWdlLm1f
c2xpY2VzLnRvcC52YWx1ZSgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpOwor
ICAgICAgICB0b3AgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKGltYWdlLm1fc2xpY2VzLnRv
cC52YWx1ZSgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpOwogICAgIGVsc2UK
LSAgICAgICAgdG9wID0gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKGltYWdlLm1fc2xpY2VzLnRvcC52
YWx1ZSgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUik7CisgICAgICAgIHRvcCA9IENT
U1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoaW1hZ2UubV9zbGljZXMudG9wLnZhbHVlKCksIENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKICAgICAgICAgCiAgICAgUmVmUHRyPENTU1ByaW1p
dGl2ZVZhbHVlPiByaWdodDsKICAgICBpZiAoaW1hZ2UubV9zbGljZXMucmlnaHQuaXNQZXJjZW50
KCkpCi0gICAgICAgIHJpZ2h0ID0gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKGltYWdlLm1fc2xpY2Vz
LnJpZ2h0LnZhbHVlKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSk7CisgICAg
ICAgIHJpZ2h0ID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShpbWFnZS5tX3NsaWNlcy5yaWdo
dC52YWx1ZSgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpOwogICAgIGVsc2UK
LSAgICAgICAgcmlnaHQgPSBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUoaW1hZ2UubV9zbGljZXMucmln
aHQudmFsdWUoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpOworICAgICAgICByaWdo
dCA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoaW1hZ2UubV9zbGljZXMucmlnaHQudmFsdWUo
KSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpOwogICAgICAgICAKICAgICBSZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+IGJvdHRvbTsKICAgICBpZiAoaW1hZ2UubV9zbGljZXMuYm90dG9t
LmlzUGVyY2VudCgpKQotICAgICAgICBib3R0b20gPSBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUoaW1h
Z2UubV9zbGljZXMuYm90dG9tLnZhbHVlKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VO
VEFHRSk7CisgICAgICAgIGJvdHRvbSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoaW1hZ2Uu
bV9zbGljZXMuYm90dG9tLnZhbHVlKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFH
RSk7CiAgICAgZWxzZQotICAgICAgICBib3R0b20gPSBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUoaW1h
Z2UubV9zbGljZXMuYm90dG9tLnZhbHVlKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVS
KTsKKyAgICAgICAgYm90dG9tID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShpbWFnZS5tX3Ns
aWNlcy5ib3R0b20udmFsdWUoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpOwogICAg
IAogICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbGVmdDsKICAgICBpZiAoaW1hZ2UubV9z
bGljZXMubGVmdC5pc1BlcmNlbnQoKSkKLSAgICAgICAgbGVmdCA9IG5ldyBDU1NQcmltaXRpdmVW
YWx1ZShpbWFnZS5tX3NsaWNlcy5sZWZ0LnZhbHVlKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
UEVSQ0VOVEFHRSk7CisgICAgICAgIGxlZnQgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKGlt
YWdlLm1fc2xpY2VzLmxlZnQudmFsdWUoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5U
QUdFKTsKICAgICBlbHNlCi0gICAgICAgIGxlZnQgPSBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUoaW1h
Z2UubV9zbGljZXMubGVmdC52YWx1ZSgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUik7
CisgICAgICAgIGxlZnQgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKGltYWdlLm1fc2xpY2Vz
LmxlZnQudmFsdWUoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpOwogCiAgICAgUmVm
UHRyPFJlY3Q+IHJlY3QgPSBSZWN0OjpjcmVhdGUoKTsKICAgICByZWN0LT5zZXRUb3AodG9wKTsK
QEAgLTMwOCwxOSArMzA4LDE5IEBAIHN0YXRpYyBQYXNzUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZUZv
ck5pbmUKICAgICByZWN0LT5zZXRCb3R0b20oYm90dG9tKTsKICAgICByZWN0LT5zZXRMZWZ0KGxl
ZnQpOwogCi0gICAgcmV0dXJuIG5ldyBDU1NCb3JkZXJJbWFnZVZhbHVlKGltYWdlVmFsdWUsIHJl
Y3QsIHZhbHVlRm9yUmVwZWF0UnVsZShpbWFnZS5tX2hvcml6b250YWxSdWxlKSwgdmFsdWVGb3JS
ZXBlYXRSdWxlKGltYWdlLm1fdmVydGljYWxSdWxlKSk7CisgICAgcmV0dXJuIENTU0JvcmRlcklt
YWdlVmFsdWU6OmNyZWF0ZShpbWFnZVZhbHVlLCByZWN0LCB2YWx1ZUZvclJlcGVhdFJ1bGUoaW1h
Z2UubV9ob3Jpem9udGFsUnVsZSksIHZhbHVlRm9yUmVwZWF0UnVsZShpbWFnZS5tX3ZlcnRpY2Fs
UnVsZSkpOwogfQogCiBzdGF0aWMgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gdmFsdWVGb3JSZWZsZWN0
aW9uKGNvbnN0IFN0eWxlUmVmbGVjdGlvbiogcmVmbGVjdGlvbikKIHsKICAgICBpZiAoIXJlZmxl
Y3Rpb24pCi0gICAgICAgIHJldHVybiBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUoQ1NTVmFsdWVOb25l
KTsKKyAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVJZGVudGlmaWVyKENT
U1ZhbHVlTm9uZSk7CiAKICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IG9mZnNldDsKICAg
ICBpZiAocmVmbGVjdGlvbi0+b2Zmc2V0KCkuaXNQZXJjZW50KCkpCi0gICAgICAgIG9mZnNldCA9
IG5ldyBDU1NQcmltaXRpdmVWYWx1ZShyZWZsZWN0aW9uLT5vZmZzZXQoKS5wZXJjZW50KCksIENT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSk7CisgICAgICAgIG9mZnNldCA9IENTU1By
aW1pdGl2ZVZhbHVlOjpjcmVhdGUocmVmbGVjdGlvbi0+b2Zmc2V0KCkucGVyY2VudCgpLCBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpOwogICAgIGVsc2UKLSAgICAgICAgb2Zmc2V0
ID0gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKHJlZmxlY3Rpb24tPm9mZnNldCgpLnZhbHVlKCksIENT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgpOworICAgICAgICBvZmZzZXQgPSBDU1NQcmltaXRpdmVW
YWx1ZTo6Y3JlYXRlKHJlZmxlY3Rpb24tPm9mZnNldCgpLnZhbHVlKCksIENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfUFgpOwogICAgIAogICAgIHJldHVybiBDU1NSZWZsZWN0VmFsdWU6OmNyZWF0ZShy
ZWZsZWN0aW9uLT5kaXJlY3Rpb24oKSwgb2Zmc2V0LnJlbGVhc2UoKSwgdmFsdWVGb3JOaW5lUGll
Y2VJbWFnZShyZWZsZWN0aW9uLT5tYXNrKCkpKTsKIH0KQEAgLTM0OSwzMiArMzQ5LDMyIEBAIHN0
YXRpYyBQYXNzUmVmUHRyPENTU1ZhbHVlPiBnZXRQb3NpdGlvbk8KICAgICB9CiAKICAgICBpZiAo
c3R5bGUtPnBvc2l0aW9uKCkgPT0gQWJzb2x1dGVQb3NpdGlvbiB8fCBzdHlsZS0+cG9zaXRpb24o
KSA9PSBGaXhlZFBvc2l0aW9uKQotICAgICAgICByZXR1cm4gbmV3IENTU1ByaW1pdGl2ZVZhbHVl
KGwpOworICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShsKTsKIAogICAg
IGlmIChzdHlsZS0+cG9zaXRpb24oKSA9PSBSZWxhdGl2ZVBvc2l0aW9uKQogICAgICAgICAvLyBG
SVhNRTogSXQncyBub3QgZW5vdWdoIHRvIHNpbXBseSByZXR1cm4gImF1dG8iIHZhbHVlcyBmb3Ig
b25lIG9mZnNldCBpZiB0aGUgb3RoZXIgc2lkZSBpcyBkZWZpbmVkLgogICAgICAgICAvLyBJbiBv
dGhlciB3b3JkcyBpZiBsZWZ0IGlzIGF1dG8gYW5kIHJpZ2h0IGlzIG5vdCBhdXRvLCB0aGVuIGxl
ZnQncyBjb21wdXRlZCB2YWx1ZSBpcyBuZWdhdGl2ZSByaWdodC4KICAgICAgICAgLy8gU28gd2Ug
c2hvdWxkIGdldCB0aGUgb3Bwb3NpdGUgbGVuZ3RoIHVuaXQgYW5kIHNlZSBpZiBpdCBpcyBhdXRv
LgotICAgICAgICByZXR1cm4gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKGwpOworICAgICAgICByZXR1
cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShsKTsKIAotICAgIHJldHVybiBuZXcgQ1NTUHJp
bWl0aXZlVmFsdWUoQ1NTVmFsdWVBdXRvKTsKKyAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6
OmNyZWF0ZUlkZW50aWZpZXIoQ1NTVmFsdWVBdXRvKTsKIH0KIAogc3RhdGljIFBhc3NSZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+IGN1cnJlbnRDb2xvck9yVmFsaWRDb2xvcihSZW5kZXJTdHlsZSog
c3R5bGUsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKICAgICBpZiAoIWNvbG9yLmlzVmFsaWQoKSkK
LSAgICAgICAgcmV0dXJuIG5ldyBDU1NQcmltaXRpdmVWYWx1ZShzdHlsZS0+Y29sb3IoKS5yZ2Io
KSk7Ci0gICAgcmV0dXJuIG5ldyBDU1NQcmltaXRpdmVWYWx1ZShjb2xvci5yZ2IoKSk7CisgICAg
ICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlQ29sb3Ioc3R5bGUtPmNvbG9yKCku
cmdiKCkpOworICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlQ29sb3IoY29sb3Iu
cmdiKCkpOwogfQogCiBzdGF0aWMgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gZ2V0Qm9yZGVyUmFkaXVz
Q29ybmVyVmFsdWUoSW50U2l6ZSByYWRpdXMpCiB7CiAgICAgaWYgKHJhZGl1cy53aWR0aCgpID09
IHJhZGl1cy5oZWlnaHQoKSkKLSAgICAgICAgcmV0dXJuIG5ldyBDU1NQcmltaXRpdmVWYWx1ZShy
YWRpdXMud2lkdGgoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCk7CisgICAgICAgIHJldHVy
biBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHJhZGl1cy53aWR0aCgpLCBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX1BYKTsKIAotICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IGxpc3QgPSBuZXcgQ1NT
VmFsdWVMaXN0KHRydWUpOwotICAgIGxpc3QtPmFwcGVuZChuZXcgQ1NTUHJpbWl0aXZlVmFsdWUo
cmFkaXVzLndpZHRoKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgpKTsKLSAgICBsaXN0LT5h
cHBlbmQobmV3IENTU1ByaW1pdGl2ZVZhbHVlKHJhZGl1cy5oZWlnaHQoKSwgQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19QWCkpOworICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IGxpc3QgPSBDU1NWYWx1
ZUxpc3Q6OmNyZWF0ZVNwYWNlU2VwYXJhdGVkKCk7CisgICAgbGlzdC0+YXBwZW5kKENTU1ByaW1p
dGl2ZVZhbHVlOjpjcmVhdGUocmFkaXVzLndpZHRoKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
UFgpKTsKKyAgICBsaXN0LT5hcHBlbmQoQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShyYWRpdXMu
aGVpZ2h0KCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgpKTsKICAgICByZXR1cm4gbGlzdC5y
ZWxlYXNlKCk7CiB9CiAKQEAgLTQzOSw1NiArNDM5LDU2IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+
IENTU0NvbXB1dGVkU3R5bGVEZWMKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2Ug
Q1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3I6Ci0gICAgICAgICAgICByZXR1cm4gbmV3IENTU1By
aW1pdGl2ZVZhbHVlKHN0eWxlLT5iYWNrZ3JvdW5kQ29sb3IoKS5yZ2IoKSk7CisgICAgICAgICAg
ICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUNvbG9yKHN0eWxlLT5iYWNrZ3JvdW5k
Q29sb3IoKS5yZ2IoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kSW1hZ2U6
CiAgICAgICAgICAgICBpZiAoc3R5bGUtPmJhY2tncm91bmRJbWFnZSgpKQogICAgICAgICAgICAg
ICAgIHJldHVybiBzdHlsZS0+YmFja2dyb3VuZEltYWdlKCktPmNzc1ZhbHVlKCk7Ci0gICAgICAg
ICAgICByZXR1cm4gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKENTU1ZhbHVlTm9uZSk7CisgICAgICAg
ICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUlkZW50aWZpZXIoQ1NTVmFsdWVO
b25lKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJhY2tncm91bmRTaXplOiB7Ci0g
ICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBsaXN0ID0gbmV3IENTU1ZhbHVlTGlzdCh0
cnVlKTsKLSAgICAgICAgICAgIGxpc3QtPmFwcGVuZChuZXcgQ1NTUHJpbWl0aXZlVmFsdWUoc3R5
bGUtPmJhY2tncm91bmRTaXplKCkud2lkdGgpKTsKLSAgICAgICAgICAgIGxpc3QtPmFwcGVuZChu
ZXcgQ1NTUHJpbWl0aXZlVmFsdWUoc3R5bGUtPmJhY2tncm91bmRTaXplKCkuaGVpZ2h0KSk7Cisg
ICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBsaXN0ID0gQ1NTVmFsdWVMaXN0OjpjcmVh
dGVTcGFjZVNlcGFyYXRlZCgpOworICAgICAgICAgICAgbGlzdC0+YXBwZW5kKENTU1ByaW1pdGl2
ZVZhbHVlOjpjcmVhdGUoc3R5bGUtPmJhY2tncm91bmRTaXplKCkud2lkdGgpKTsKKyAgICAgICAg
ICAgIGxpc3QtPmFwcGVuZChDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHN0eWxlLT5iYWNrZ3Jv
dW5kU2l6ZSgpLmhlaWdodCkpOwogICAgICAgICAgICAgcmV0dXJuIGxpc3QucmVsZWFzZSgpOwog
ICAgICAgICB9ICAKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRSZXBlYXQ6Ci0g
ICAgICAgICAgICByZXR1cm4gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKHN0eWxlLT5iYWNrZ3JvdW5k
UmVwZWF0KCkpOworICAgICAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUo
c3R5bGUtPmJhY2tncm91bmRSZXBlYXQoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRCYWNrZ3JvdW5kQ29tcG9zaXRlOgotICAgICAgICAgICAgcmV0dXJuIG5ldyBDU1NQcmltaXRp
dmVWYWx1ZShzdHlsZS0+YmFja2dyb3VuZENvbXBvc2l0ZSgpKTsKKyAgICAgICAgICAgIHJldHVy
biBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHN0eWxlLT5iYWNrZ3JvdW5kQ29tcG9zaXRlKCkp
OwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZEF0dGFjaG1lbnQ6CiAgICAgICAg
ICAgICBpZiAoc3R5bGUtPmJhY2tncm91bmRBdHRhY2htZW50KCkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIG5ldyBDU1NQcmltaXRpdmVWYWx1ZShDU1NWYWx1ZVNjcm9sbCk7Ci0gICAgICAgICAg
ICByZXR1cm4gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKENTU1ZhbHVlRml4ZWQpOworICAgICAgICAg
ICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlSWRlbnRpZmllcihDU1NWYWx1
ZVNjcm9sbCk7CisgICAgICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUlk
ZW50aWZpZXIoQ1NTVmFsdWVGaXhlZCk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRC
YWNrZ3JvdW5kQ2xpcDoKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJhY2tncm91bmRP
cmlnaW46IHsKICAgICAgICAgICAgIEVGaWxsQm94IGJveCA9IChwcm9wZXJ0eUlEID09IENTU1By
b3BlcnR5V2Via2l0QmFja2dyb3VuZENsaXAgPyBzdHlsZS0+YmFja2dyb3VuZENsaXAoKSA6IHN0
eWxlLT5iYWNrZ3JvdW5kT3JpZ2luKCkpOwotICAgICAgICAgICAgcmV0dXJuIG5ldyBDU1NQcmlt
aXRpdmVWYWx1ZShib3gpOworICAgICAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpj
cmVhdGUoYm94KTsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3Vu
ZFBvc2l0aW9uOiB7Ci0gICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBsaXN0ID0gbmV3
IENTU1ZhbHVlTGlzdCh0cnVlKTsKKyAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IGxp
c3QgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZVNwYWNlU2VwYXJhdGVkKCk7CiAKLSAgICAgICAgICAg
IGxpc3QtPmFwcGVuZChuZXcgQ1NTUHJpbWl0aXZlVmFsdWUoc3R5bGUtPmJhY2tncm91bmRYUG9z
aXRpb24oKSkpOwotICAgICAgICAgICAgbGlzdC0+YXBwZW5kKG5ldyBDU1NQcmltaXRpdmVWYWx1
ZShzdHlsZS0+YmFja2dyb3VuZFlQb3NpdGlvbigpKSk7CisgICAgICAgICAgICBsaXN0LT5hcHBl
bmQoQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShzdHlsZS0+YmFja2dyb3VuZFhQb3NpdGlvbigp
KSk7CisgICAgICAgICAgICBsaXN0LT5hcHBlbmQoQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShz
dHlsZS0+YmFja2dyb3VuZFlQb3NpdGlvbigpKSk7CiAKICAgICAgICAgICAgIHJldHVybiBsaXN0
LnJlbGVhc2UoKTsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3Vu
ZFBvc2l0aW9uWDoKLSAgICAgICAgICAgIHJldHVybiBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUoc3R5
bGUtPmJhY2tncm91bmRYUG9zaXRpb24oKSk7CisgICAgICAgICAgICByZXR1cm4gQ1NTUHJpbWl0
aXZlVmFsdWU6OmNyZWF0ZShzdHlsZS0+YmFja2dyb3VuZFhQb3NpdGlvbigpKTsKICAgICAgICAg
Y2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvblk6Ci0gICAgICAgICAgICByZXR1cm4g
bmV3IENTU1ByaW1pdGl2ZVZhbHVlKHN0eWxlLT5iYWNrZ3JvdW5kWVBvc2l0aW9uKCkpOworICAg
ICAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoc3R5bGUtPmJhY2tncm91
bmRZUG9zaXRpb24oKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJDb2xsYXBzZToK
ICAgICAgICAgICAgIGlmIChzdHlsZS0+Ym9yZGVyQ29sbGFwc2UoKSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKENTU1ZhbHVlQ29sbGFwc2UpOwotICAgICAg
ICAgICAgcmV0dXJuIG5ldyBDU1NQcmltaXRpdmVWYWx1ZShDU1NWYWx1ZVNlcGFyYXRlKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUlkZW50aWZpZXIo
Q1NTVmFsdWVDb2xsYXBzZSk7CisgICAgICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6
OmNyZWF0ZUlkZW50aWZpZXIoQ1NTVmFsdWVTZXBhcmF0ZSk7CiAgICAgICAgIGNhc2UgQ1NTUHJv
cGVydHlCb3JkZXJTcGFjaW5nOiB7Ci0gICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBs
aXN0ID0gbmV3IENTU1ZhbHVlTGlzdCh0cnVlKTsKLSAgICAgICAgICAgIGxpc3QtPmFwcGVuZChu
ZXcgQ1NTUHJpbWl0aXZlVmFsdWUoc3R5bGUtPmhvcml6b250YWxCb3JkZXJTcGFjaW5nKCksIENT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgpKTsKLSAgICAgICAgICAgIGxpc3QtPmFwcGVuZChuZXcg
Q1NTUHJpbWl0aXZlVmFsdWUoc3R5bGUtPnZlcnRpY2FsQm9yZGVyU3BhY2luZygpLCBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX1BYKSk7CisgICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBs
aXN0ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVTcGFjZVNlcGFyYXRlZCgpOworICAgICAgICAgICAg
bGlzdC0+YXBwZW5kKENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoc3R5bGUtPmhvcml6b250YWxC
b3JkZXJTcGFjaW5nKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgpKTsKKyAgICAgICAgICAg
IGxpc3QtPmFwcGVuZChDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHN0eWxlLT52ZXJ0aWNhbEJv
cmRlclNwYWNpbmcoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCkpOwogICAgICAgICAgICAg
cmV0dXJuIGxpc3QucmVsZWFzZSgpOwogICAgICAgICB9ICAKICAgICAgICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdEJvcmRlckhvcml6b250YWxTcGFjaW5nOgotICAgICAgICAgICAgcmV0dXJuIG5l
dyBDU1NQcmltaXRpdmVWYWx1ZShzdHlsZS0+aG9yaXpvbnRhbEJvcmRlclNwYWNpbmcoKSwgQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19QWCk7CisgICAgICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZl
VmFsdWU6OmNyZWF0ZShzdHlsZS0+aG9yaXpvbnRhbEJvcmRlclNwYWNpbmcoKSwgQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19QWCk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJW
ZXJ0aWNhbFNwYWNpbmc6Ci0gICAgICAgICAgICByZXR1cm4gbmV3IENTU1ByaW1pdGl2ZVZhbHVl
KHN0eWxlLT52ZXJ0aWNhbEJvcmRlclNwYWNpbmcoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19Q
WCk7CisgICAgICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShzdHlsZS0+
dmVydGljYWxCb3JkZXJTcGFjaW5nKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgpOwogICAg
ICAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyVG9wQ29sb3I6CiAgICAgICAgICAgICByZXR1cm4g
Y3VycmVudENvbG9yT3JWYWxpZENvbG9yKHN0eWxlLCBzdHlsZS0+Ym9yZGVyVG9wQ29sb3IoKSk7
CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJSaWdodENvbG9yOgpAQCAtNDk4LDg4ICs0
OTgsODggQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTQ29tcHV0ZWRTdHlsZURlYwogICAgICAg
ICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyTGVmdENvbG9yOgogICAgICAgICAgICAgcmV0dXJuIGN1
cnJlbnRDb2xvck9yVmFsaWRDb2xvcihzdHlsZSwgc3R5bGUtPmJvcmRlckxlZnRDb2xvcigpKTsK
ICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclRvcFN0eWxlOgotICAgICAgICAgICAgcmV0
dXJuIG5ldyBDU1NQcmltaXRpdmVWYWx1ZShzdHlsZS0+Ym9yZGVyVG9wU3R5bGUoKSk7CisgICAg
ICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShzdHlsZS0+Ym9yZGVyVG9w
U3R5bGUoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJSaWdodFN0eWxlOgotICAg
ICAgICAgICAgcmV0dXJuIG5ldyBDU1NQcmltaXRpdmVWYWx1ZShzdHlsZS0+Ym9yZGVyUmlnaHRT
dHlsZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHN0
eWxlLT5ib3JkZXJSaWdodFN0eWxlKCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVy
Qm90dG9tU3R5bGU6Ci0gICAgICAgICAgICByZXR1cm4gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKHN0
eWxlLT5ib3JkZXJCb3R0b21TdHlsZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBDU1NQcmltaXRp
dmVWYWx1ZTo6Y3JlYXRlKHN0eWxlLT5ib3JkZXJCb3R0b21TdHlsZSgpKTsKICAgICAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eUJvcmRlckxlZnRTdHlsZToKLSAgICAgICAgICAgIHJldHVybiBuZXcgQ1NT
UHJpbWl0aXZlVmFsdWUoc3R5bGUtPmJvcmRlckxlZnRTdHlsZSgpKTsKKyAgICAgICAgICAgIHJl
dHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHN0eWxlLT5ib3JkZXJMZWZ0U3R5bGUoKSk7
CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJUb3BXaWR0aDoKLSAgICAgICAgICAgIHJl
dHVybiBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUoc3R5bGUtPmJvcmRlclRvcFdpZHRoKCksIENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfUFgpOworICAgICAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZh
bHVlOjpjcmVhdGUoc3R5bGUtPmJvcmRlclRvcFdpZHRoKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfUFgpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyUmlnaHRXaWR0aDoKLSAgICAg
ICAgICAgIHJldHVybiBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUoc3R5bGUtPmJvcmRlclJpZ2h0V2lk
dGgoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCk7CisgICAgICAgICAgICByZXR1cm4gQ1NT
UHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShzdHlsZS0+Ym9yZGVyUmlnaHRXaWR0aCgpLCBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX1BYKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckJvdHRv
bVdpZHRoOgotICAgICAgICAgICAgcmV0dXJuIG5ldyBDU1NQcmltaXRpdmVWYWx1ZShzdHlsZS0+
Ym9yZGVyQm90dG9tV2lkdGgoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCk7CisgICAgICAg
ICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShzdHlsZS0+Ym9yZGVyQm90dG9t
V2lkdGgoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCk7CiAgICAgICAgIGNhc2UgQ1NTUHJv
cGVydHlCb3JkZXJMZWZ0V2lkdGg6Ci0gICAgICAgICAgICByZXR1cm4gbmV3IENTU1ByaW1pdGl2
ZVZhbHVlKHN0eWxlLT5ib3JkZXJMZWZ0V2lkdGgoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19Q
WCk7CisgICAgICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShzdHlsZS0+
Ym9yZGVyTGVmdFdpZHRoKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgpOwogICAgICAgICBj
YXNlIENTU1Byb3BlcnR5Qm90dG9tOgogICAgICAgICAgICAgcmV0dXJuIGdldFBvc2l0aW9uT2Zm
c2V0VmFsdWUoc3R5bGUsIENTU1Byb3BlcnR5Qm90dG9tKTsKICAgICAgICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdEJveEFsaWduOgotICAgICAgICAgICAgcmV0dXJuIG5ldyBDU1NQcmltaXRpdmVW
YWx1ZShzdHlsZS0+Ym94QWxpZ24oKSk7CisgICAgICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZl
VmFsdWU6OmNyZWF0ZShzdHlsZS0+Ym94QWxpZ24oKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRCb3hEaXJlY3Rpb246Ci0gICAgICAgICAgICByZXR1cm4gbmV3IENTU1ByaW1pdGl2
ZVZhbHVlKHN0eWxlLT5ib3hEaXJlY3Rpb24oKSk7CisgICAgICAgICAgICByZXR1cm4gQ1NTUHJp
bWl0aXZlVmFsdWU6OmNyZWF0ZShzdHlsZS0+Ym94RGlyZWN0aW9uKCkpOwogICAgICAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0Qm94RmxleDoKLSAgICAgICAgICAgIHJldHVybiBuZXcgQ1NTUHJp
bWl0aXZlVmFsdWUoc3R5bGUtPmJveEZsZXgoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1C
RVIpOworICAgICAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoc3R5bGUt
PmJveEZsZXgoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpOwogICAgICAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0Qm94RmxleEdyb3VwOgotICAgICAgICAgICAgcmV0dXJuIG5ldyBD
U1NQcmltaXRpdmVWYWx1ZShzdHlsZS0+Ym94RmxleEdyb3VwKCksIENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfTlVNQkVSKTsKKyAgICAgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3Jl
YXRlKHN0eWxlLT5ib3hGbGV4R3JvdXAoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIp
OwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94TGluZXM6Ci0gICAgICAgICAgICBy
ZXR1cm4gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKHN0eWxlLT5ib3hMaW5lcygpKTsKKyAgICAgICAg
ICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHN0eWxlLT5ib3hMaW5lcygpKTsK
ICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveE9yZGluYWxHcm91cDoKLSAgICAgICAg
ICAgIHJldHVybiBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUoc3R5bGUtPmJveE9yZGluYWxHcm91cCgp
LCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUik7CisgICAgICAgICAgICByZXR1cm4gQ1NT
UHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShzdHlsZS0+Ym94T3JkaW5hbEdyb3VwKCksIENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJv
eE9yaWVudDoKLSAgICAgICAgICAgIHJldHVybiBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUoc3R5bGUt
PmJveE9yaWVudCgpKTsKKyAgICAgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3Jl
YXRlKHN0eWxlLT5ib3hPcmllbnQoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRC
b3hQYWNrOiB7CiAgICAgICAgICAgICBFQm94QWxpZ25tZW50IGJveFBhY2sgPSBzdHlsZS0+Ym94
UGFjaygpOwogICAgICAgICAgICAgQVNTRVJUKGJveFBhY2sgIT0gQlNUUkVUQ0gpOwogICAgICAg
ICAgICAgQVNTRVJUKGJveFBhY2sgIT0gQkJBU0VMSU5FKTsKICAgICAgICAgICAgIGlmIChib3hQ
YWNrID09IEJKVVNUSUZZIHx8IGJveFBhY2s9PSBCQkFTRUxJTkUpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIDA7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKGJveFBh
Y2spOworICAgICAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoYm94UGFj
ayk7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveFJlZmxlY3Q6
CiAgICAgICAgICAgICByZXR1cm4gdmFsdWVGb3JSZWZsZWN0aW9uKHN0eWxlLT5ib3hSZWZsZWN0
KCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94U2hhZG93OgogICAgICAgICAg
ICAgcmV0dXJuIHZhbHVlRm9yU2hhZG93KHN0eWxlLT5ib3hTaGFkb3coKSk7CiAgICAgICAgIGNh
c2UgQ1NTUHJvcGVydHlDYXB0aW9uU2lkZToKLSAgICAgICAgICAgIHJldHVybiBuZXcgQ1NTUHJp
bWl0aXZlVmFsdWUoc3R5bGUtPmNhcHRpb25TaWRlKCkpOworICAgICAgICAgICAgcmV0dXJuIENT
U1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoc3R5bGUtPmNhcHRpb25TaWRlKCkpOwogICAgICAgICBj
YXNlIENTU1Byb3BlcnR5Q2xlYXI6Ci0gICAgICAgICAgICByZXR1cm4gbmV3IENTU1ByaW1pdGl2
ZVZhbHVlKHN0eWxlLT5jbGVhcigpKTsKKyAgICAgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVW
YWx1ZTo6Y3JlYXRlKHN0eWxlLT5jbGVhcigpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUNv
bG9yOgotICAgICAgICAgICAgcmV0dXJuIG5ldyBDU1NQcmltaXRpdmVWYWx1ZShzdHlsZS0+Y29s
b3IoKS5yZ2IoKSk7CisgICAgICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0
ZUNvbG9yKHN0eWxlLT5jb2xvcigpLnJnYigpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdENvbHVtbkNvdW50OgogICAgICAgICAgICAgaWYgKHN0eWxlLT5oYXNBdXRvQ29sdW1uQ291
bnQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKENTU1Zh
bHVlQXV0byk7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKHN0eWxl
LT5jb2x1bW5Db3VudCgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUik7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVJZGVudGlmaWVyKENTU1Zh
bHVlQXV0byk7CisgICAgICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShz
dHlsZS0+Y29sdW1uQ291bnQoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpOwogICAg
ICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Q29sdW1uR2FwOgogICAgICAgICAgICAgaWYgKHN0
eWxlLT5oYXNOb3JtYWxDb2x1bW5HYXAoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENT
U1ByaW1pdGl2ZVZhbHVlKENTU1ZhbHVlTm9ybWFsKTsKLSAgICAgICAgICAgIHJldHVybiBuZXcg
Q1NTUHJpbWl0aXZlVmFsdWUoc3R5bGUtPmNvbHVtbkdhcCgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX05VTUJFUik7CisgICAgICAgICAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpj
cmVhdGVJZGVudGlmaWVyKENTU1ZhbHVlTm9ybWFsKTsKKyAgICAgICAgICAgIHJldHVybiBDU1NQ
cmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHN0eWxlLT5jb2x1bW5HYXAoKSwgQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19OVU1CRVIpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Q29sdW1uUnVs
ZUNvbG9yOgogICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRDb2xvck9yVmFsaWRDb2xvcihzdHls
ZSwgc3R5bGUtPmNvbHVtblJ1bGVDb2xvcigpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdENvbHVtblJ1bGVTdHlsZToKLSAgICAgICAgICAgIHJldHVybiBuZXcgQ1NTUHJpbWl0aXZl
VmFsdWUoc3R5bGUtPmNvbHVtblJ1bGVTdHlsZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBDU1NQ
cmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHN0eWxlLT5jb2x1bW5SdWxlU3R5bGUoKSk7CiAgICAgICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5SdWxlV2lkdGg6Ci0gICAgICAgICAgICByZXR1
cm4gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKHN0eWxlLT5jb2x1bW5SdWxlV2lkdGgoKSwgQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19QWCk7CisgICAgICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFs
dWU6OmNyZWF0ZShzdHlsZS0+Y29sdW1uUnVsZVdpZHRoKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfUFgpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Q29sdW1uQnJlYWtBZnRlcjoK
LSAgICAgICAgICAgIHJldHVybiBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUoc3R5bGUtPmNvbHVtbkJy
ZWFrQWZ0ZXIoKSk7CisgICAgICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0
ZShzdHlsZS0+Y29sdW1uQnJlYWtBZnRlcigpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdENvbHVtbkJyZWFrQmVmb3JlOgotICAgICAgICAgICAgcmV0dXJuIG5ldyBDU1NQcmltaXRp
dmVWYWx1ZShzdHlsZS0+Y29sdW1uQnJlYWtCZWZvcmUoKSk7CisgICAgICAgICAgICByZXR1cm4g
Q1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShzdHlsZS0+Y29sdW1uQnJlYWtCZWZvcmUoKSk7CiAg
ICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5CcmVha0luc2lkZToKLSAgICAgICAg
ICAgIHJldHVybiBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUoc3R5bGUtPmNvbHVtbkJyZWFrSW5zaWRl
KCkpOworICAgICAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoc3R5bGUt
PmNvbHVtbkJyZWFrSW5zaWRlKCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Q29s
dW1uV2lkdGg6CiAgICAgICAgICAgICBpZiAoc3R5bGUtPmhhc0F1dG9Db2x1bW5XaWR0aCgpKQot
ICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUoQ1NTVmFsdWVBdXRv
KTsKLSAgICAgICAgICAgIHJldHVybiBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUoc3R5bGUtPmNvbHVt
bldpZHRoKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUlkZW50aWZpZXIoQ1NTVmFsdWVBdXRv
KTsKKyAgICAgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHN0eWxlLT5j
b2x1bW5XaWR0aCgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUik7CiAgICAgICAgIGNh
c2UgQ1NTUHJvcGVydHlDdXJzb3I6IHsKICAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+
IGxpc3Q7CiAgICAgICAgICAgICBDdXJzb3JMaXN0KiBjdXJzb3JzID0gc3R5bGUtPmN1cnNvcnMo
KTsKICAgICAgICAgICAgIGlmIChjdXJzb3JzICYmIGN1cnNvcnMtPnNpemUoKSA+IDApIHsKLSAg
ICAgICAgICAgICAgICBsaXN0ID0gbmV3IENTU1ZhbHVlTGlzdDsKKyAgICAgICAgICAgICAgICBs
aXN0ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVDb21tYVNlcGFyYXRlZCgpOwogICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjdXJzb3JzLT5zaXplKCk7ICsraSkKLSAgICAg
ICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKG5ldyBDU1NQcmltaXRpdmVWYWx1ZSgoKmN1cnNv
cnMpW2ldLmN1cnNvckltYWdlLT51cmwoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpKTsK
KyAgICAgICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVh
dGUoKCpjdXJzb3JzKVtpXS5jdXJzb3JJbWFnZS0+dXJsKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfVVJJKSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZh
bHVlID0gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKHN0eWxlLT5jdXJzb3IoKSk7CisgICAgICAgICAg
ICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShzdHls
ZS0+Y3Vyc29yKCkpOwogICAgICAgICAgICAgaWYgKGxpc3QpIHsKICAgICAgICAgICAgICAgICBs
aXN0LT5hcHBlbmQodmFsdWUpOwogICAgICAgICAgICAgICAgIHJldHVybiBsaXN0LnJlbGVhc2Uo
KTsKQEAgLTU4NywyMjkgKzU4NywyMjkgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTQ29tcHV0
ZWRTdHlsZURlYwogICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnJlbGVhc2UoKTsKICAgICAgICAg
fQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5RGlyZWN0aW9uOgotICAgICAgICAgICAgcmV0dXJu
IG5ldyBDU1NQcmltaXRpdmVWYWx1ZShzdHlsZS0+ZGlyZWN0aW9uKCkpOworICAgICAgICAgICAg
cmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoc3R5bGUtPmRpcmVjdGlvbigpKTsKICAg
ICAgICAgY2FzZSBDU1NQcm9wZXJ0eURpc3BsYXk6Ci0gICAgICAgICAgICByZXR1cm4gbmV3IENT
U1ByaW1pdGl2ZVZhbHVlKHN0eWxlLT5kaXNwbGF5KCkpOworICAgICAgICAgICAgcmV0dXJuIENT
U1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoc3R5bGUtPmRpc3BsYXkoKSk7CiAgICAgICAgIGNhc2Ug
Q1NTUHJvcGVydHlFbXB0eUNlbGxzOgotICAgICAgICAgICAgcmV0dXJuIG5ldyBDU1NQcmltaXRp
dmVWYWx1ZShzdHlsZS0+ZW1wdHlDZWxscygpKTsKKyAgICAgICAgICAgIHJldHVybiBDU1NQcmlt
aXRpdmVWYWx1ZTo6Y3JlYXRlKHN0eWxlLT5lbXB0eUNlbGxzKCkpOwogICAgICAgICBjYXNlIENT
U1Byb3BlcnR5RmxvYXQ6Ci0gICAgICAgICAgICByZXR1cm4gbmV3IENTU1ByaW1pdGl2ZVZhbHVl
KHN0eWxlLT5mbG9hdGluZygpKTsKKyAgICAgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1
ZTo6Y3JlYXRlKHN0eWxlLT5mbG9hdGluZygpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUZv
bnRGYW1pbHk6CiAgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBvbmx5IHJldHVybnMgdGhlIGZp
cnN0IGZhbWlseS4KLSAgICAgICAgICAgIHJldHVybiBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUoc3R5
bGUtPmZvbnREZXNjcmlwdGlvbigpLmZhbWlseSgpLmZhbWlseSgpLnN0cmluZygpLCBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX1NUUklORyk7CisgICAgICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZl
VmFsdWU6OmNyZWF0ZShzdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkuZmFtaWx5KCkuZmFtaWx5KCku
c3RyaW5nKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HKTsKICAgICAgICAgY2FzZSBD
U1NQcm9wZXJ0eUZvbnRTaXplOgotICAgICAgICAgICAgcmV0dXJuIG5ldyBDU1NQcmltaXRpdmVW
YWx1ZShzdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkuY29tcHV0ZWRQaXhlbFNpemUoKSwgQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19QWCk7CisgICAgICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFs
dWU6OmNyZWF0ZShzdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkuY29tcHV0ZWRQaXhlbFNpemUoKSwg
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRCaW5kaW5nOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlG
b250U3R5bGU6CiAgICAgICAgICAgICBpZiAoc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpLml0YWxp
YygpKQotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUoQ1NTVmFs
dWVJdGFsaWMpOwotICAgICAgICAgICAgcmV0dXJuIG5ldyBDU1NQcmltaXRpdmVWYWx1ZShDU1NW
YWx1ZU5vcm1hbCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpj
cmVhdGVJZGVudGlmaWVyKENTU1ZhbHVlSXRhbGljKTsKKyAgICAgICAgICAgIHJldHVybiBDU1NQ
cmltaXRpdmVWYWx1ZTo6Y3JlYXRlSWRlbnRpZmllcihDU1NWYWx1ZU5vcm1hbCk7CiAgICAgICAg
IGNhc2UgQ1NTUHJvcGVydHlGb250VmFyaWFudDoKICAgICAgICAgICAgIGlmIChzdHlsZS0+Zm9u
dERlc2NyaXB0aW9uKCkuc21hbGxDYXBzKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBD
U1NQcmltaXRpdmVWYWx1ZShDU1NWYWx1ZVNtYWxsQ2Fwcyk7Ci0gICAgICAgICAgICByZXR1cm4g
bmV3IENTU1ByaW1pdGl2ZVZhbHVlKENTU1ZhbHVlTm9ybWFsKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUlkZW50aWZpZXIoQ1NTVmFsdWVTbWFsbENh
cHMpOworICAgICAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVJZGVudGlm
aWVyKENTU1ZhbHVlTm9ybWFsKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRXZWlnaHQ6
CiAgICAgICAgICAgICBzd2l0Y2ggKHN0eWxlLT5mb250RGVzY3JpcHRpb24oKS53ZWlnaHQoKSkg
ewogICAgICAgICAgICAgICAgIGNhc2UgRm9udFdlaWdodDEwMDoKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIG5ldyBDU1NQcmltaXRpdmVWYWx1ZShDU1NWYWx1ZTEwMCk7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlSWRlbnRpZmllcihDU1NW
YWx1ZTEwMCk7CiAgICAgICAgICAgICAgICAgY2FzZSBGb250V2VpZ2h0MjAwOgotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKENTU1ZhbHVlMjAwKTsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVJZGVudGlm
aWVyKENTU1ZhbHVlMjAwKTsKICAgICAgICAgICAgICAgICBjYXNlIEZvbnRXZWlnaHQzMDA6Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUoQ1NTVmFsdWUz
MDApOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0
ZUlkZW50aWZpZXIoQ1NTVmFsdWUzMDApOwogICAgICAgICAgICAgICAgIGNhc2UgRm9udFdlaWdo
dE5vcm1hbDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDU1NQcmltaXRpdmVWYWx1
ZShDU1NWYWx1ZU5vcm1hbCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBDU1NQcmltaXRp
dmVWYWx1ZTo6Y3JlYXRlSWRlbnRpZmllcihDU1NWYWx1ZU5vcm1hbCk7CiAgICAgICAgICAgICAg
ICAgY2FzZSBGb250V2VpZ2h0NTAwOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENT
U1ByaW1pdGl2ZVZhbHVlKENTU1ZhbHVlNTAwKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVJZGVudGlmaWVyKENTU1ZhbHVlNTAwKTsKICAgICAg
ICAgICAgICAgICBjYXNlIEZvbnRXZWlnaHQ2MDA6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUoQ1NTVmFsdWU2MDApOworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUlkZW50aWZpZXIoQ1NTVmFsdWU2MDAp
OwogICAgICAgICAgICAgICAgIGNhc2UgRm9udFdlaWdodEJvbGQ6Ci0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUoQ1NTVmFsdWVCb2xkKTsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVJZGVudGlmaWVyKENT
U1ZhbHVlQm9sZCk7CiAgICAgICAgICAgICAgICAgY2FzZSBGb250V2VpZ2h0ODAwOgotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKENTU1ZhbHVlODAwKTsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVJZGVu
dGlmaWVyKENTU1ZhbHVlODAwKTsKICAgICAgICAgICAgICAgICBjYXNlIEZvbnRXZWlnaHQ5MDA6
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUoQ1NTVmFs
dWU5MDApOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNy
ZWF0ZUlkZW50aWZpZXIoQ1NTVmFsdWU5MDApOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IENTU1ByaW1pdGl2
ZVZhbHVlKENTU1ZhbHVlTm9ybWFsKTsKKyAgICAgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVW
YWx1ZTo6Y3JlYXRlSWRlbnRpZmllcihDU1NWYWx1ZU5vcm1hbCk7CiAgICAgICAgIGNhc2UgQ1NT
UHJvcGVydHlIZWlnaHQ6CiAgICAgICAgICAgICBpZiAocmVuZGVyZXIpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIG5ldyBDU1NQcmltaXRpdmVWYWx1ZShzaXppbmdCb3gocmVuZGVyZXIpLmhlaWdo
dCgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKTsKLSAgICAgICAgICAgIHJldHVybiBuZXcg
Q1NTUHJpbWl0aXZlVmFsdWUoc3R5bGUtPmhlaWdodCgpKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShzaXppbmdCb3gocmVuZGVyZXIpLmhlaWdodCgp
LCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKTsKKyAgICAgICAgICAgIHJldHVybiBDU1NQcmlt
aXRpdmVWYWx1ZTo6Y3JlYXRlKHN0eWxlLT5oZWlnaHQoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRIaWdobGlnaHQ6CiAgICAgICAgICAgICBpZiAoc3R5bGUtPmhpZ2hsaWdodCgp
ID09IG51bGxBdG9tKQotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ1NTUHJpbWl0aXZlVmFs
dWUoQ1NTVmFsdWVOb25lKTsKLSAgICAgICAgICAgIHJldHVybiBuZXcgQ1NTUHJpbWl0aXZlVmFs
dWUoc3R5bGUtPmhpZ2hsaWdodCgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORyk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVJZGVudGlmaWVy
KENTU1ZhbHVlTm9uZSk7CisgICAgICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNy
ZWF0ZShzdHlsZS0+aGlnaGxpZ2h0KCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HKTsK
ICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckZpdDoKICAgICAgICAgICAgIGlm
IChzdHlsZS0+Ym9yZGVyRml0KCkgPT0gQm9yZGVyRml0Qm9yZGVyKQotICAgICAgICAgICAgICAg
IHJldHVybiBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUoQ1NTVmFsdWVCb3JkZXIpOwotICAgICAgICAg
ICAgcmV0dXJuIG5ldyBDU1NQcmltaXRpdmVWYWx1ZShDU1NWYWx1ZUxpbmVzKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUlkZW50aWZpZXIoQ1NTVmFs
dWVCb3JkZXIpOworICAgICAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVJ
ZGVudGlmaWVyKENTU1ZhbHVlTGluZXMpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5TGVmdDoK
ICAgICAgICAgICAgIHJldHVybiBnZXRQb3NpdGlvbk9mZnNldFZhbHVlKHN0eWxlLCBDU1NQcm9w
ZXJ0eUxlZnQpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5TGV0dGVyU3BhY2luZzoKICAgICAg
ICAgICAgIGlmICghc3R5bGUtPmxldHRlclNwYWNpbmcoKSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKENTU1ZhbHVlTm9ybWFsKTsKLSAgICAgICAgICAgIHJl
dHVybiBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUoc3R5bGUtPmxldHRlclNwYWNpbmcoKSwgQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19QWCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2
ZVZhbHVlOjpjcmVhdGVJZGVudGlmaWVyKENTU1ZhbHVlTm9ybWFsKTsKKyAgICAgICAgICAgIHJl
dHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHN0eWxlLT5sZXR0ZXJTcGFjaW5nKCksIENT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
TGluZUNsYW1wOgogICAgICAgICAgICAgaWYgKHN0eWxlLT5saW5lQ2xhbXAoKSA9PSAtMSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKENTU1ZhbHVlTm9uZSk7
Ci0gICAgICAgICAgICByZXR1cm4gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKHN0eWxlLT5saW5lQ2xh
bXAoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUlkZW50aWZpZXIoQ1NTVmFsdWVOb25l
KTsKKyAgICAgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHN0eWxlLT5s
aW5lQ2xhbXAoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKTsKICAgICAgICAg
Y2FzZSBDU1NQcm9wZXJ0eUxpbmVIZWlnaHQ6IHsKICAgICAgICAgICAgIExlbmd0aCBsZW5ndGgg
PSBzdHlsZS0+bGluZUhlaWdodCgpOwogICAgICAgICAgICAgaWYgKGxlbmd0aC5pc05lZ2F0aXZl
KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDU1NQcmltaXRpdmVWYWx1ZShDU1NWYWx1
ZU5vcm1hbCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVh
dGVJZGVudGlmaWVyKENTU1ZhbHVlTm9ybWFsKTsKICAgICAgICAgICAgIGlmIChsZW5ndGguaXNQ
ZXJjZW50KCkpCiAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBpbXBlcmZlY3QsIGJlY2F1c2Ug
aXQgZG9lc24ndCBpbmNsdWRlIHRoZSB6b29tIGZhY3RvciBhbmQgdGhlIHJlYWwgY29tcHV0YXRp
b24KICAgICAgICAgICAgICAgICAvLyBmb3IgaG93IGhpZ2ggdG8gYmUgaW4gcGl4ZWxzIGRvZXMg
aW5jbHVkZSB0aGluZ3MgbGlrZSBtaW5pbXVtIGZvbnQgc2l6ZSBhbmQgdGhlIHpvb20gZmFjdG9y
LgogICAgICAgICAgICAgICAgIC8vIE9uIHRoZSBvdGhlciBoYW5kLCBzaW5jZSBmb250LXNpemUg
ZG9lc24ndCBpbmNsdWRlIHRoZSB6b29tIGZhY3Rvciwgd2UgcmVhbGx5IGNhbid0IGRvCiAgICAg
ICAgICAgICAgICAgLy8gdGhhdCBoZXJlIGVpdGhlci4KLSAgICAgICAgICAgICAgICByZXR1cm4g
bmV3IENTU1ByaW1pdGl2ZVZhbHVlKHN0YXRpY19jYXN0PGludD4obGVuZ3RoLnBlcmNlbnQoKSAq
IHN0eWxlLT5mb250RGVzY3JpcHRpb24oKS5zcGVjaWZpZWRTaXplKCkpIC8gMTAwLCBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX1BYKTsKLSAgICAgICAgICAgIHJldHVybiBuZXcgQ1NTUHJpbWl0aXZl
VmFsdWUobGVuZ3RoLnZhbHVlKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgpOworICAgICAg
ICAgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHN0YXRpY19jYXN0PGlu
dD4obGVuZ3RoLnBlcmNlbnQoKSAqIHN0eWxlLT5mb250RGVzY3JpcHRpb24oKS5zcGVjaWZpZWRT
aXplKCkpIC8gMTAwLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKTsKKyAgICAgICAgICAgIHJl
dHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKGxlbmd0aC52YWx1ZSgpLCBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX1BYKTsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5TGlz
dFN0eWxlSW1hZ2U6CiAgICAgICAgICAgICBpZiAoc3R5bGUtPmxpc3RTdHlsZUltYWdlKCkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIHN0eWxlLT5saXN0U3R5bGVJbWFnZSgpLT5jc3NWYWx1ZSgp
OwotICAgICAgICAgICAgcmV0dXJuIG5ldyBDU1NQcmltaXRpdmVWYWx1ZShDU1NWYWx1ZU5vbmUp
OworICAgICAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVJZGVudGlmaWVy
KENTU1ZhbHVlTm9uZSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlMaXN0U3R5bGVQb3NpdGlv
bjoKLSAgICAgICAgICAgIHJldHVybiBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUoc3R5bGUtPmxpc3RT
dHlsZVBvc2l0aW9uKCkpOworICAgICAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpj
cmVhdGUoc3R5bGUtPmxpc3RTdHlsZVBvc2l0aW9uKCkpOwogICAgICAgICBjYXNlIENTU1Byb3Bl
cnR5TGlzdFN0eWxlVHlwZToKLSAgICAgICAgICAgIHJldHVybiBuZXcgQ1NTUHJpbWl0aXZlVmFs
dWUoc3R5bGUtPmxpc3RTdHlsZVR5cGUoKSk7CisgICAgICAgICAgICByZXR1cm4gQ1NTUHJpbWl0
aXZlVmFsdWU6OmNyZWF0ZShzdHlsZS0+bGlzdFN0eWxlVHlwZSgpKTsKICAgICAgICAgY2FzZSBD
U1NQcm9wZXJ0eU1hcmdpblRvcDoKICAgICAgICAgICAgIGlmIChyZW5kZXJlcikKICAgICAgICAg
ICAgICAgICAvLyBGSVhNRTogU3VwcG9zZWQgdG8gcmV0dXJuIHRoZSBwZXJjZW50YWdlIGlmIHBl
cmNlbnRhZ2Ugd2FzIHNwZWNpZmllZC4KLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENTU1By
aW1pdGl2ZVZhbHVlKHJlbmRlcmVyLT5tYXJnaW5Ub3AoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19QWCk7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKHN0eWxlLT5t
YXJnaW5Ub3AoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpj
cmVhdGUocmVuZGVyZXItPm1hcmdpblRvcCgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKTsK
KyAgICAgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHN0eWxlLT5tYXJn
aW5Ub3AoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlNYXJnaW5SaWdodDoKICAgICAgICAg
ICAgIGlmIChyZW5kZXJlcikKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogU3VwcG9zZWQgdG8g
cmV0dXJuIHRoZSBwZXJjZW50YWdlIGlmIHBlcmNlbnRhZ2Ugd2FzIHNwZWNpZmllZC4KLSAgICAg
ICAgICAgICAgICByZXR1cm4gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKHJlbmRlcmVyLT5tYXJnaW5S
aWdodCgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKTsKLSAgICAgICAgICAgIHJldHVybiBu
ZXcgQ1NTUHJpbWl0aXZlVmFsdWUoc3R5bGUtPm1hcmdpblJpZ2h0KCkpOworICAgICAgICAgICAg
ICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHJlbmRlcmVyLT5tYXJnaW5SaWdo
dCgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKTsKKyAgICAgICAgICAgIHJldHVybiBDU1NQ
cmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHN0eWxlLT5tYXJnaW5SaWdodCgpKTsKICAgICAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eU1hcmdpbkJvdHRvbToKICAgICAgICAgICAgIGlmIChyZW5kZXJlcikKICAg
ICAgICAgICAgICAgICAvLyBGSVhNRTogU3VwcG9zZWQgdG8gcmV0dXJuIHRoZSBwZXJjZW50YWdl
IGlmIHBlcmNlbnRhZ2Ugd2FzIHNwZWNpZmllZC4KLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3
IENTU1ByaW1pdGl2ZVZhbHVlKHJlbmRlcmVyLT5tYXJnaW5Cb3R0b20oKSwgQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19QWCk7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IENTU1ByaW1pdGl2ZVZhbHVl
KHN0eWxlLT5tYXJnaW5Cb3R0b20oKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIENTU1ByaW1p
dGl2ZVZhbHVlOjpjcmVhdGUocmVuZGVyZXItPm1hcmdpbkJvdHRvbSgpLCBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX1BYKTsKKyAgICAgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3Jl
YXRlKHN0eWxlLT5tYXJnaW5Cb3R0b20oKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlNYXJn
aW5MZWZ0OgogICAgICAgICAgICAgaWYgKHJlbmRlcmVyKQogICAgICAgICAgICAgICAgIC8vIEZJ
WE1FOiBTdXBwb3NlZCB0byByZXR1cm4gdGhlIHBlcmNlbnRhZ2UgaWYgcGVyY2VudGFnZSB3YXMg
c3BlY2lmaWVkLgotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUo
cmVuZGVyZXItPm1hcmdpbkxlZnQoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCk7Ci0gICAg
ICAgICAgICByZXR1cm4gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKHN0eWxlLT5tYXJnaW5MZWZ0KCkp
OworICAgICAgICAgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHJlbmRl
cmVyLT5tYXJnaW5MZWZ0KCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgpOworICAgICAgICAg
ICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoc3R5bGUtPm1hcmdpbkxlZnQoKSk7
CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJxdWVlRGlyZWN0aW9uOgotICAgICAg
ICAgICAgcmV0dXJuIG5ldyBDU1NQcmltaXRpdmVWYWx1ZShzdHlsZS0+bWFycXVlZURpcmVjdGlv
bigpKTsKKyAgICAgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHN0eWxl
LT5tYXJxdWVlRGlyZWN0aW9uKCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFy
cXVlZUluY3JlbWVudDoKLSAgICAgICAgICAgIHJldHVybiBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUo
c3R5bGUtPm1hcnF1ZWVJbmNyZW1lbnQoKSk7CisgICAgICAgICAgICByZXR1cm4gQ1NTUHJpbWl0
aXZlVmFsdWU6OmNyZWF0ZShzdHlsZS0+bWFycXVlZUluY3JlbWVudCgpKTsKICAgICAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcnF1ZWVSZXBldGl0aW9uOgogICAgICAgICAgICAgaWYgKHN0
eWxlLT5tYXJxdWVlTG9vcENvdW50KCkgPCAwKQotICAgICAgICAgICAgICAgIHJldHVybiBuZXcg
Q1NTUHJpbWl0aXZlVmFsdWUoQ1NTVmFsdWVJbmZpbml0ZSk7Ci0gICAgICAgICAgICByZXR1cm4g
bmV3IENTU1ByaW1pdGl2ZVZhbHVlKHN0eWxlLT5tYXJxdWVlTG9vcENvdW50KCksIENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gQ1NTUHJpbWl0
aXZlVmFsdWU6OmNyZWF0ZUlkZW50aWZpZXIoQ1NTVmFsdWVJbmZpbml0ZSk7CisgICAgICAgICAg
ICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShzdHlsZS0+bWFycXVlZUxvb3BDb3Vu
dCgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUik7CiAgICAgICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRNYXJxdWVlU3R5bGU6Ci0gICAgICAgICAgICByZXR1cm4gbmV3IENTU1ByaW1p
dGl2ZVZhbHVlKHN0eWxlLT5tYXJxdWVlQmVoYXZpb3IoKSk7CisgICAgICAgICAgICByZXR1cm4g
Q1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShzdHlsZS0+bWFycXVlZUJlaGF2aW9yKCkpOwogICAg
ICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza0ltYWdlOgogICAgICAgICAgICAgaWYgKHN0
eWxlLT5tYXNrSW1hZ2UoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gc3R5bGUtPm1hc2tJbWFn
ZSgpLT5jc3NWYWx1ZSgpOwotICAgICAgICAgICAgcmV0dXJuIG5ldyBDU1NQcmltaXRpdmVWYWx1
ZShDU1NWYWx1ZU5vbmUpOworICAgICAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpj
cmVhdGVJZGVudGlmaWVyKENTU1ZhbHVlTm9uZSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRNYXNrU2l6ZTogewotICAgICAgICAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gbGlzdCA9
IG5ldyBDU1NWYWx1ZUxpc3QodHJ1ZSk7Ci0gICAgICAgICAgICBsaXN0LT5hcHBlbmQobmV3IENT
U1ByaW1pdGl2ZVZhbHVlKHN0eWxlLT5tYXNrU2l6ZSgpLndpZHRoKSk7Ci0gICAgICAgICAgICBs
aXN0LT5hcHBlbmQobmV3IENTU1ByaW1pdGl2ZVZhbHVlKHN0eWxlLT5tYXNrU2l6ZSgpLmhlaWdo
dCkpOworICAgICAgICAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gbGlzdCA9IENTU1ZhbHVlTGlz
dDo6Y3JlYXRlU3BhY2VTZXBhcmF0ZWQoKTsKKyAgICAgICAgICAgIGxpc3QtPmFwcGVuZChDU1NQ
cmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHN0eWxlLT5tYXNrU2l6ZSgpLndpZHRoKSk7CisgICAgICAg
ICAgICBsaXN0LT5hcHBlbmQoQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShzdHlsZS0+bWFza1Np
emUoKS5oZWlnaHQpKTsKICAgICAgICAgICAgIHJldHVybiBsaXN0LnJlbGVhc2UoKTsKICAgICAg
ICAgfSAgCiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrUmVwZWF0OgotICAgICAg
ICAgICAgcmV0dXJuIG5ldyBDU1NQcmltaXRpdmVWYWx1ZShzdHlsZS0+bWFza1JlcGVhdCgpKTsK
KyAgICAgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHN0eWxlLT5tYXNr
UmVwZWF0KCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza0F0dGFjaG1lbnQ6
CiAgICAgICAgICAgICBpZiAoc3R5bGUtPm1hc2tBdHRhY2htZW50KCkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIG5ldyBDU1NQcmltaXRpdmVWYWx1ZShDU1NWYWx1ZVNjcm9sbCk7Ci0gICAgICAg
ICAgICByZXR1cm4gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKENTU1ZhbHVlRml4ZWQpOworICAgICAg
ICAgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlSWRlbnRpZmllcihDU1NW
YWx1ZVNjcm9sbCk7CisgICAgICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0
ZUlkZW50aWZpZXIoQ1NTVmFsdWVGaXhlZCk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRNYXNrQ29tcG9zaXRlOgotICAgICAgICAgICAgcmV0dXJuIG5ldyBDU1NQcmltaXRpdmVWYWx1
ZShzdHlsZS0+bWFza0NvbXBvc2l0ZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBDU1NQcmltaXRp
dmVWYWx1ZTo6Y3JlYXRlKHN0eWxlLT5tYXNrQ29tcG9zaXRlKCkpOwogICAgICAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0TWFza0NsaXA6CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRN
YXNrT3JpZ2luOiB7CiAgICAgICAgICAgICBFRmlsbEJveCBib3ggPSAocHJvcGVydHlJRCA9PSBD
U1NQcm9wZXJ0eVdlYmtpdE1hc2tDbGlwID8gc3R5bGUtPm1hc2tDbGlwKCkgOiBzdHlsZS0+bWFz
a09yaWdpbigpKTsKLSAgICAgICAgICAgIHJldHVybiBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUoYm94
KTsKKyAgICAgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKGJveCk7CiAg
ICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3NpdGlvbjogewot
ICAgICAgICAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gbGlzdCA9IG5ldyBDU1NWYWx1ZUxpc3Qo
dHJ1ZSk7CisgICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBsaXN0ID0gQ1NTVmFsdWVM
aXN0OjpjcmVhdGVTcGFjZVNlcGFyYXRlZCgpOwogCi0gICAgICAgICAgICBsaXN0LT5hcHBlbmQo
bmV3IENTU1ByaW1pdGl2ZVZhbHVlKHN0eWxlLT5tYXNrWFBvc2l0aW9uKCkpKTsKLSAgICAgICAg
ICAgIGxpc3QtPmFwcGVuZChuZXcgQ1NTUHJpbWl0aXZlVmFsdWUoc3R5bGUtPm1hc2tZUG9zaXRp
b24oKSkpOworICAgICAgICAgICAgbGlzdC0+YXBwZW5kKENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVh
dGUoc3R5bGUtPm1hc2tYUG9zaXRpb24oKSkpOworICAgICAgICAgICAgbGlzdC0+YXBwZW5kKENT
U1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoc3R5bGUtPm1hc2tZUG9zaXRpb24oKSkpOwogCiAgICAg
ICAgICAgICByZXR1cm4gbGlzdC5yZWxlYXNlKCk7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3NpdGlvblg6Ci0gICAgICAgICAgICByZXR1cm4gbmV3IENT
U1ByaW1pdGl2ZVZhbHVlKHN0eWxlLT5tYXNrWFBvc2l0aW9uKCkpOworICAgICAgICAgICAgcmV0
dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoc3R5bGUtPm1hc2tYUG9zaXRpb24oKSk7CiAg
ICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrUG9zaXRpb25ZOgotICAgICAgICAgICAg
cmV0dXJuIG5ldyBDU1NQcmltaXRpdmVWYWx1ZShzdHlsZS0+bWFza1lQb3NpdGlvbigpKTsKKyAg
ICAgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHN0eWxlLT5tYXNrWVBv
c2l0aW9uKCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VXNlck1vZGlmeToKLSAg
ICAgICAgICAgIHJldHVybiBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUoc3R5bGUtPnVzZXJNb2RpZnko
KSk7CisgICAgICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShzdHlsZS0+
dXNlck1vZGlmeSgpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eU1heEhlaWdodDogewogICAg
ICAgICAgICAgY29uc3QgTGVuZ3RoJiBtYXhIZWlnaHQgPSBzdHlsZS0+bWF4SGVpZ2h0KCk7CiAg
ICAgICAgICAgICBpZiAobWF4SGVpZ2h0LmlzRml4ZWQoKSAmJiBtYXhIZWlnaHQudmFsdWUoKSA9
PSB1bmRlZmluZWRMZW5ndGgpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDU1NQcmltaXRp
dmVWYWx1ZShDU1NWYWx1ZU5vbmUpOwotICAgICAgICAgICAgcmV0dXJuIG5ldyBDU1NQcmltaXRp
dmVWYWx1ZShtYXhIZWlnaHQpOworICAgICAgICAgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVW
YWx1ZTo6Y3JlYXRlSWRlbnRpZmllcihDU1NWYWx1ZU5vbmUpOworICAgICAgICAgICAgcmV0dXJu
IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUobWF4SGVpZ2h0KTsKICAgICAgICAgfQogICAgICAg
ICBjYXNlIENTU1Byb3BlcnR5TWF4V2lkdGg6IHsKICAgICAgICAgICAgIGNvbnN0IExlbmd0aCYg
bWF4V2lkdGggPSBzdHlsZS0+bWF4SGVpZ2h0KCk7CiAgICAgICAgICAgICBpZiAobWF4V2lkdGgu
aXNGaXhlZCgpICYmIG1heFdpZHRoLnZhbHVlKCkgPT0gdW5kZWZpbmVkTGVuZ3RoKQotICAgICAg
ICAgICAgICAgIHJldHVybiBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUoQ1NTVmFsdWVOb25lKTsKLSAg
ICAgICAgICAgIHJldHVybiBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUobWF4V2lkdGgpOworICAgICAg
ICAgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlSWRlbnRpZmllcihDU1NW
YWx1ZU5vbmUpOworICAgICAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUo
bWF4V2lkdGgpOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlNaW5IZWlnaHQ6
Ci0gICAgICAgICAgICByZXR1cm4gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKHN0eWxlLT5taW5IZWln
aHQoKSk7CisgICAgICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShzdHls
ZS0+bWluSGVpZ2h0KCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5TWluV2lkdGg6Ci0gICAg
ICAgICAgICByZXR1cm4gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKHN0eWxlLT5taW5XaWR0aCgpKTsK
KyAgICAgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHN0eWxlLT5taW5X
aWR0aCgpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eU9wYWNpdHk6Ci0gICAgICAgICAgICBy
ZXR1cm4gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKHN0eWxlLT5vcGFjaXR5KCksIENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfTlVNQkVSKTsKKyAgICAgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1
ZTo6Y3JlYXRlKHN0eWxlLT5vcGFjaXR5KCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVS
KTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eU9ycGhhbnM6Ci0gICAgICAgICAgICByZXR1cm4g
bmV3IENTU1ByaW1pdGl2ZVZhbHVlKHN0eWxlLT5vcnBoYW5zKCksIENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfTlVNQkVSKTsKKyAgICAgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3Jl
YXRlKHN0eWxlLT5vcnBoYW5zKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKICAg
ICAgICAgY2FzZSBDU1NQcm9wZXJ0eU91dGxpbmVDb2xvcjoKICAgICAgICAgICAgIHJldHVybiBj
dXJyZW50Q29sb3JPclZhbGlkQ29sb3Ioc3R5bGUsIHN0eWxlLT5vdXRsaW5lQ29sb3IoKSk7CiAg
ICAgICAgIGNhc2UgQ1NTUHJvcGVydHlPdXRsaW5lU3R5bGU6CiAgICAgICAgICAgICBpZiAoc3R5
bGUtPm91dGxpbmVTdHlsZUlzQXV0bygpKQotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ1NT
UHJpbWl0aXZlVmFsdWUoQ1NTVmFsdWVBdXRvKTsKLSAgICAgICAgICAgIHJldHVybiBuZXcgQ1NT
UHJpbWl0aXZlVmFsdWUoc3R5bGUtPm91dGxpbmVTdHlsZSgpKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUlkZW50aWZpZXIoQ1NTVmFsdWVBdXRvKTsK
KyAgICAgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHN0eWxlLT5vdXRs
aW5lU3R5bGUoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlPdXRsaW5lV2lkdGg6Ci0gICAg
ICAgICAgICByZXR1cm4gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKHN0eWxlLT5vdXRsaW5lV2lkdGgo
KSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCk7CisgICAgICAgICAgICByZXR1cm4gQ1NTUHJp
bWl0aXZlVmFsdWU6OmNyZWF0ZShzdHlsZS0+b3V0bGluZVdpZHRoKCksIENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfUFgpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5T3ZlcmZsb3c6Ci0gICAgICAg
ICAgICByZXR1cm4gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKG1heChzdHlsZS0+b3ZlcmZsb3dYKCks
IHN0eWxlLT5vdmVyZmxvd1koKSkpOworICAgICAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZh
bHVlOjpjcmVhdGUobWF4KHN0eWxlLT5vdmVyZmxvd1goKSwgc3R5bGUtPm92ZXJmbG93WSgpKSk7
CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlPdmVyZmxvd1g6Ci0gICAgICAgICAgICByZXR1cm4g
bmV3IENTU1ByaW1pdGl2ZVZhbHVlKHN0eWxlLT5vdmVyZmxvd1goKSk7CisgICAgICAgICAgICBy
ZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShzdHlsZS0+b3ZlcmZsb3dYKCkpOwogICAg
ICAgICBjYXNlIENTU1Byb3BlcnR5T3ZlcmZsb3dZOgotICAgICAgICAgICAgcmV0dXJuIG5ldyBD
U1NQcmltaXRpdmVWYWx1ZShzdHlsZS0+b3ZlcmZsb3dZKCkpOworICAgICAgICAgICAgcmV0dXJu
IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoc3R5bGUtPm92ZXJmbG93WSgpKTsKICAgICAgICAg
Y2FzZSBDU1NQcm9wZXJ0eVBhZGRpbmdUb3A6CiAgICAgICAgICAgICBpZiAocmVuZGVyZXIpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDU1NQcmltaXRpdmVWYWx1ZShyZW5kZXJlci0+cGFk
ZGluZ1RvcCgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKTsKLSAgICAgICAgICAgIHJldHVy
biBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUoc3R5bGUtPnBhZGRpbmdUb3AoKSk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUocmVuZGVyZXItPnBhZGRpbmdU
b3AoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCk7CisgICAgICAgICAgICByZXR1cm4gQ1NT
UHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShzdHlsZS0+cGFkZGluZ1RvcCgpKTsKICAgICAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVBhZGRpbmdSaWdodDoKICAgICAgICAgICAgIGlmIChyZW5kZXJlcikKLSAg
ICAgICAgICAgICAgICByZXR1cm4gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKHJlbmRlcmVyLT5wYWRk
aW5nUmlnaHQoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCk7Ci0gICAgICAgICAgICByZXR1
cm4gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKHN0eWxlLT5wYWRkaW5nUmlnaHQoKSk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUocmVuZGVyZXItPnBhZGRp
bmdSaWdodCgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKTsKKyAgICAgICAgICAgIHJldHVy
biBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHN0eWxlLT5wYWRkaW5nUmlnaHQoKSk7CiAgICAg
ICAgIGNhc2UgQ1NTUHJvcGVydHlQYWRkaW5nQm90dG9tOgogICAgICAgICAgICAgaWYgKHJlbmRl
cmVyKQotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUocmVuZGVy
ZXItPnBhZGRpbmdCb3R0b20oKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCk7Ci0gICAgICAg
ICAgICByZXR1cm4gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKHN0eWxlLT5wYWRkaW5nQm90dG9tKCkp
OworICAgICAgICAgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHJlbmRl
cmVyLT5wYWRkaW5nQm90dG9tKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgpOworICAgICAg
ICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoc3R5bGUtPnBhZGRpbmdCb3R0
b20oKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlQYWRkaW5nTGVmdDoKICAgICAgICAgICAg
IGlmIChyZW5kZXJlcikKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENTU1ByaW1pdGl2ZVZh
bHVlKHJlbmRlcmVyLT5wYWRkaW5nTGVmdCgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKTsK
LSAgICAgICAgICAgIHJldHVybiBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUoc3R5bGUtPnBhZGRpbmdM
ZWZ0KCkpOworICAgICAgICAgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRl
KHJlbmRlcmVyLT5wYWRkaW5nTGVmdCgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKTsKKyAg
ICAgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHN0eWxlLT5wYWRkaW5n
TGVmdCgpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVBhZ2VCcmVha0FmdGVyOgotICAgICAg
ICAgICAgcmV0dXJuIG5ldyBDU1NQcmltaXRpdmVWYWx1ZShzdHlsZS0+cGFnZUJyZWFrQWZ0ZXIo
KSk7CisgICAgICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShzdHlsZS0+
cGFnZUJyZWFrQWZ0ZXIoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlQYWdlQnJlYWtCZWZv
cmU6Ci0gICAgICAgICAgICByZXR1cm4gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKHN0eWxlLT5wYWdl
QnJlYWtCZWZvcmUoKSk7CisgICAgICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNy
ZWF0ZShzdHlsZS0+cGFnZUJyZWFrQmVmb3JlKCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5
UGFnZUJyZWFrSW5zaWRlOiB7CiAgICAgICAgICAgICBFUGFnZUJyZWFrIHBhZ2VCcmVhayA9IHN0
eWxlLT5wYWdlQnJlYWtJbnNpZGUoKTsKICAgICAgICAgICAgIEFTU0VSVChwYWdlQnJlYWsgIT0g
UEJBTFdBWVMpOwogICAgICAgICAgICAgaWYgKHBhZ2VCcmVhayA9PSBQQkFMV0FZUykKICAgICAg
ICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIHJldHVybiBuZXcgQ1NTUHJpbWl0aXZl
VmFsdWUoc3R5bGUtPnBhZ2VCcmVha0luc2lkZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBDU1NQ
cmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHN0eWxlLT5wYWdlQnJlYWtJbnNpZGUoKSk7CiAgICAgICAg
IH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVBvc2l0aW9uOgotICAgICAgICAgICAgcmV0dXJu
IG5ldyBDU1NQcmltaXRpdmVWYWx1ZShzdHlsZS0+cG9zaXRpb24oKSk7CisgICAgICAgICAgICBy
ZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShzdHlsZS0+cG9zaXRpb24oKSk7CiAgICAg
ICAgIGNhc2UgQ1NTUHJvcGVydHlSaWdodDoKICAgICAgICAgICAgIHJldHVybiBnZXRQb3NpdGlv
bk9mZnNldFZhbHVlKHN0eWxlLCBDU1NQcm9wZXJ0eVJpZ2h0KTsKICAgICAgICAgY2FzZSBDU1NQ
cm9wZXJ0eVRhYmxlTGF5b3V0OgotICAgICAgICAgICAgcmV0dXJuIG5ldyBDU1NQcmltaXRpdmVW
YWx1ZShzdHlsZS0+dGFibGVMYXlvdXQoKSk7CisgICAgICAgICAgICByZXR1cm4gQ1NTUHJpbWl0
aXZlVmFsdWU6OmNyZWF0ZShzdHlsZS0+dGFibGVMYXlvdXQoKSk7CiAgICAgICAgIGNhc2UgQ1NT
UHJvcGVydHlUZXh0QWxpZ246Ci0gICAgICAgICAgICByZXR1cm4gbmV3IENTU1ByaW1pdGl2ZVZh
bHVlKHN0eWxlLT50ZXh0QWxpZ24oKSk7CisgICAgICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZl
VmFsdWU6OmNyZWF0ZShzdHlsZS0+dGV4dEFsaWduKCkpOwogICAgICAgICBjYXNlIENTU1Byb3Bl
cnR5VGV4dERlY29yYXRpb246IHsKICAgICAgICAgICAgIFN0cmluZyBzdHJpbmc7CiAgICAgICAg
ICAgICBpZiAoc3R5bGUtPnRleHREZWNvcmF0aW9uKCkgJiBVTkRFUkxJTkUpCkBAIC04MzAsOCAr
ODMwLDggQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTQ29tcHV0ZWRTdHlsZURlYwogICAgICAg
ICAgICAgICAgIHN0cmluZyArPSAiYmxpbmsiOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
aWYgKCFzdHJpbmcubGVuZ3RoKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDU1NQcmlt
aXRpdmVWYWx1ZShDU1NWYWx1ZU5vbmUpOwotICAgICAgICAgICAgcmV0dXJuIG5ldyBDU1NQcmlt
aXRpdmVWYWx1ZShzdHJpbmcsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUlkZW50aWZpZXIoQ1NT
VmFsdWVOb25lKTsKKyAgICAgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRl
KHN0cmluZywgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpOwogICAgICAgICB9CiAgICAg
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0RGVjb3JhdGlvbnNJbkVmZmVjdDogewogICAg
ICAgICAgICAgU3RyaW5nIHN0cmluZzsKQEAgLTg1Myw5NyArODUzLDk3IEBAIFBhc3NSZWZQdHI8
Q1NTVmFsdWU+IENTU0NvbXB1dGVkU3R5bGVEZWMKICAgICAgICAgICAgICAgICBzdHJpbmcgKz0g
ImJsaW5rIjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICghc3RyaW5nLmxlbmd0aCgp
KQotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUoQ1NTVmFsdWVO
b25lKTsKLSAgICAgICAgICAgIHJldHVybiBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUoc3RyaW5nLCBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIENT
U1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVJZGVudGlmaWVyKENTU1ZhbHVlTm9uZSk7CisgICAgICAg
ICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShzdHJpbmcsIENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfU1RSSU5HKTsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0VGV4dEZpbGxDb2xvcjoKICAgICAgICAgICAgIHJldHVybiBjdXJyZW50Q29sb3JPclZh
bGlkQ29sb3Ioc3R5bGUsIHN0eWxlLT50ZXh0RmlsbENvbG9yKCkpOwogICAgICAgICBjYXNlIENT
U1Byb3BlcnR5VGV4dEluZGVudDoKLSAgICAgICAgICAgIHJldHVybiBuZXcgQ1NTUHJpbWl0aXZl
VmFsdWUoc3R5bGUtPnRleHRJbmRlbnQoKSk7CisgICAgICAgICAgICByZXR1cm4gQ1NTUHJpbWl0
aXZlVmFsdWU6OmNyZWF0ZShzdHlsZS0+dGV4dEluZGVudCgpKTsKICAgICAgICAgY2FzZSBDU1NQ
cm9wZXJ0eVRleHRTaGFkb3c6CiAgICAgICAgICAgICByZXR1cm4gdmFsdWVGb3JTaGFkb3coc3R5
bGUtPnRleHRTaGFkb3coKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0U2Vj
dXJpdHk6Ci0gICAgICAgICAgICByZXR1cm4gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKHN0eWxlLT50
ZXh0U2VjdXJpdHkoKSk7CisgICAgICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNy
ZWF0ZShzdHlsZS0+dGV4dFNlY3VyaXR5KCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0VGV4dFNpemVBZGp1c3Q6CiAgICAgICAgICAgICBpZiAoc3R5bGUtPnRleHRTaXplQWRqdXN0
KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDU1NQcmltaXRpdmVWYWx1ZShDU1NWYWx1
ZUF1dG8pOwotICAgICAgICAgICAgcmV0dXJuIG5ldyBDU1NQcmltaXRpdmVWYWx1ZShDU1NWYWx1
ZU5vbmUpOworICAgICAgICAgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRl
SWRlbnRpZmllcihDU1NWYWx1ZUF1dG8pOworICAgICAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2
ZVZhbHVlOjpjcmVhdGVJZGVudGlmaWVyKENTU1ZhbHVlTm9uZSk7CiAgICAgICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRUZXh0U3Ryb2tlQ29sb3I6CiAgICAgICAgICAgICByZXR1cm4gY3VycmVu
dENvbG9yT3JWYWxpZENvbG9yKHN0eWxlLCBzdHlsZS0+dGV4dFN0cm9rZUNvbG9yKCkpOwogICAg
ICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dFN0cm9rZVdpZHRoOgotICAgICAgICAgICAg
cmV0dXJuIG5ldyBDU1NQcmltaXRpdmVWYWx1ZShzdHlsZS0+dGV4dFN0cm9rZVdpZHRoKCksIENT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgpOworICAgICAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2
ZVZhbHVlOjpjcmVhdGUoc3R5bGUtPnRleHRTdHJva2VXaWR0aCgpLCBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX1BYKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRUcmFuc2Zvcm06Ci0gICAg
ICAgICAgICByZXR1cm4gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKHN0eWxlLT50ZXh0VHJhbnNmb3Jt
KCkpOworICAgICAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoc3R5bGUt
PnRleHRUcmFuc2Zvcm0oKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlUb3A6CiAgICAgICAg
ICAgICByZXR1cm4gZ2V0UG9zaXRpb25PZmZzZXRWYWx1ZShzdHlsZSwgQ1NTUHJvcGVydHlUb3Ap
OwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5VW5pY29kZUJpZGk6Ci0gICAgICAgICAgICByZXR1
cm4gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKHN0eWxlLT51bmljb2RlQmlkaSgpKTsKKyAgICAgICAg
ICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHN0eWxlLT51bmljb2RlQmlkaSgp
KTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVZlcnRpY2FsQWxpZ246CiAgICAgICAgICAgICBz
d2l0Y2ggKHN0eWxlLT52ZXJ0aWNhbEFsaWduKCkpIHsKICAgICAgICAgICAgICAgICBjYXNlIEJB
U0VMSU5FOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENTU1ByaW1pdGl2ZVZhbHVl
KENTU1ZhbHVlQmFzZWxpbmUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ1NTUHJpbWl0
aXZlVmFsdWU6OmNyZWF0ZUlkZW50aWZpZXIoQ1NTVmFsdWVCYXNlbGluZSk7CiAgICAgICAgICAg
ICAgICAgY2FzZSBNSURETEU6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ1NTUHJp
bWl0aXZlVmFsdWUoQ1NTVmFsdWVNaWRkbGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
Q1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUlkZW50aWZpZXIoQ1NTVmFsdWVNaWRkbGUpOwogICAg
ICAgICAgICAgICAgIGNhc2UgU1VCOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENT
U1ByaW1pdGl2ZVZhbHVlKENTU1ZhbHVlU3ViKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVJZGVudGlmaWVyKENTU1ZhbHVlU3ViKTsKICAgICAg
ICAgICAgICAgICBjYXNlIFNVUEVSOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENT
U1ByaW1pdGl2ZVZhbHVlKENTU1ZhbHVlU3VwZXIpOworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUlkZW50aWZpZXIoQ1NTVmFsdWVTdXBlcik7CiAg
ICAgICAgICAgICAgICAgY2FzZSBURVhUX1RPUDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IG5ldyBDU1NQcmltaXRpdmVWYWx1ZShDU1NWYWx1ZVRleHRUb3ApOworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUlkZW50aWZpZXIoQ1NTVmFsdWVU
ZXh0VG9wKTsKICAgICAgICAgICAgICAgICBjYXNlIFRFWFRfQk9UVE9NOgotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKENTU1ZhbHVlVGV4dEJvdHRvbSk7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlSWRl
bnRpZmllcihDU1NWYWx1ZVRleHRCb3R0b20pOwogICAgICAgICAgICAgICAgIGNhc2UgVE9QOgot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKENTU1ZhbHVl
VG9wKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVh
dGVJZGVudGlmaWVyKENTU1ZhbHVlVG9wKTsKICAgICAgICAgICAgICAgICBjYXNlIEJPVFRPTToK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDU1NQcmltaXRpdmVWYWx1ZShDU1NWYWx1
ZUJvdHRvbSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6
Y3JlYXRlSWRlbnRpZmllcihDU1NWYWx1ZUJvdHRvbSk7CiAgICAgICAgICAgICAgICAgY2FzZSBC
QVNFTElORV9NSURETEU6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ1NTUHJpbWl0
aXZlVmFsdWUoQ1NTVmFsdWVXZWJraXRCYXNlbGluZU1pZGRsZSk7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlSWRlbnRpZmllcihDU1NWYWx1ZVdl
YmtpdEJhc2VsaW5lTWlkZGxlKTsKICAgICAgICAgICAgICAgICBjYXNlIExFTkdUSDoKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDU1NQcmltaXRpdmVWYWx1ZShzdHlsZS0+dmVydGlj
YWxBbGlnbkxlbmd0aCgpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2
ZVZhbHVlOjpjcmVhdGUoc3R5bGUtPnZlcnRpY2FsQWxpZ25MZW5ndGgoKSk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIHJldHVy
biAwOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5VmlzaWJpbGl0eToKLSAgICAgICAgICAgIHJl
dHVybiBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUoc3R5bGUtPnZpc2liaWxpdHkoKSk7CisgICAgICAg
ICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShzdHlsZS0+dmlzaWJpbGl0eSgp
KTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdoaXRlU3BhY2U6Ci0gICAgICAgICAgICByZXR1
cm4gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKHN0eWxlLT53aGl0ZVNwYWNlKCkpOworICAgICAgICAg
ICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoc3R5bGUtPndoaXRlU3BhY2UoKSk7
CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXaWRvd3M6Ci0gICAgICAgICAgICByZXR1cm4gbmV3
IENTU1ByaW1pdGl2ZVZhbHVlKHN0eWxlLT53aWRvd3MoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19OVU1CRVIpOworICAgICAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUo
c3R5bGUtPndpZG93cygpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUik7CiAgICAgICAg
IGNhc2UgQ1NTUHJvcGVydHlXaWR0aDoKICAgICAgICAgICAgIGlmIChyZW5kZXJlcikKLSAgICAg
ICAgICAgICAgICByZXR1cm4gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKHNpemluZ0JveChyZW5kZXJl
cikud2lkdGgoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCk7Ci0gICAgICAgICAgICByZXR1
cm4gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKHN0eWxlLT53aWR0aCgpKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShzaXppbmdCb3gocmVuZGVyZXIpLndp
ZHRoKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgpOworICAgICAgICAgICAgcmV0dXJuIENT
U1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoc3R5bGUtPndpZHRoKCkpOwogICAgICAgICBjYXNlIENT
U1Byb3BlcnR5V29yZEJyZWFrOgotICAgICAgICAgICAgcmV0dXJuIG5ldyBDU1NQcmltaXRpdmVW
YWx1ZShzdHlsZS0+d29yZEJyZWFrKCkpOworICAgICAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2
ZVZhbHVlOjpjcmVhdGUoc3R5bGUtPndvcmRCcmVhaygpKTsKICAgICAgICAgY2FzZSBDU1NQcm9w
ZXJ0eVdvcmRTcGFjaW5nOgotICAgICAgICAgICAgcmV0dXJuIG5ldyBDU1NQcmltaXRpdmVWYWx1
ZShzdHlsZS0+d29yZFNwYWNpbmcoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCk7CisgICAg
ICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShzdHlsZS0+d29yZFNwYWNp
bmcoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVy
dHlXb3JkV3JhcDoKLSAgICAgICAgICAgIHJldHVybiBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUoc3R5
bGUtPndvcmRXcmFwKCkpOworICAgICAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpj
cmVhdGUoc3R5bGUtPndvcmRXcmFwKCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
TGluZUJyZWFrOgotICAgICAgICAgICAgcmV0dXJuIG5ldyBDU1NQcmltaXRpdmVWYWx1ZShzdHls
ZS0+a2h0bWxMaW5lQnJlYWsoKSk7CisgICAgICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFs
dWU6OmNyZWF0ZShzdHlsZS0+a2h0bWxMaW5lQnJlYWsoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXROYnNwTW9kZToKLSAgICAgICAgICAgIHJldHVybiBuZXcgQ1NTUHJpbWl0aXZl
VmFsdWUoc3R5bGUtPm5ic3BNb2RlKCkpOworICAgICAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2
ZVZhbHVlOjpjcmVhdGUoc3R5bGUtPm5ic3BNb2RlKCkpOwogICAgICAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0TWF0Y2hOZWFyZXN0TWFpbEJsb2NrcXVvdGVDb2xvcjoKLSAgICAgICAgICAgIHJl
dHVybiBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUoc3R5bGUtPm1hdGNoTmVhcmVzdE1haWxCbG9ja3F1
b3RlQ29sb3IoKSk7CisgICAgICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0
ZShzdHlsZS0+bWF0Y2hOZWFyZXN0TWFpbEJsb2NrcXVvdGVDb2xvcigpKTsKICAgICAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVJlc2l6ZToKLSAgICAgICAgICAgIHJldHVybiBuZXcgQ1NTUHJpbWl0aXZl
VmFsdWUoc3R5bGUtPnJlc2l6ZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVW
YWx1ZTo6Y3JlYXRlKHN0eWxlLT5yZXNpemUoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHla
SW5kZXg6CiAgICAgICAgICAgICBpZiAoc3R5bGUtPmhhc0F1dG9aSW5kZXgoKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKENTU1ZhbHVlQXV0byk7Ci0gICAg
ICAgICAgICByZXR1cm4gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKHN0eWxlLT56SW5kZXgoKSwgQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpOworICAgICAgICAgICAgICAgIHJldHVybiBDU1NQ
cmltaXRpdmVWYWx1ZTo6Y3JlYXRlSWRlbnRpZmllcihDU1NWYWx1ZUF1dG8pOworICAgICAgICAg
ICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoc3R5bGUtPnpJbmRleCgpLCBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUik7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlab29t
OgotICAgICAgICAgICAgcmV0dXJuIG5ldyBDU1NQcmltaXRpdmVWYWx1ZShzdHlsZS0+em9vbSgp
LCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUik7CisgICAgICAgICAgICByZXR1cm4gQ1NT
UHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShzdHlsZS0+em9vbSgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX05VTUJFUik7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3hTaXppbmc6CiAg
ICAgICAgICAgICBpZiAoc3R5bGUtPmJveFNpemluZygpID09IENPTlRFTlRfQk9YKQotICAgICAg
ICAgICAgICAgIHJldHVybiBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUoQ1NTVmFsdWVDb250ZW50Qm94
KTsKLSAgICAgICAgICAgIHJldHVybiBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUoQ1NTVmFsdWVCb3Jk
ZXJCb3gpOworICAgICAgICAgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRl
SWRlbnRpZmllcihDU1NWYWx1ZUNvbnRlbnRCb3gpOworICAgICAgICAgICAgcmV0dXJuIENTU1By
aW1pdGl2ZVZhbHVlOjpjcmVhdGVJZGVudGlmaWVyKENTU1ZhbHVlQm9yZGVyQm94KTsKICNpZiBF
TkFCTEUoREFTSEJPQVJEX1NVUFBPUlQpCiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRE
YXNoYm9hcmRSZWdpb246CiAgICAgICAgIHsKICAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxTdHls
ZURhc2hib2FyZFJlZ2lvbj4mIHJlZ2lvbnMgPSBzdHlsZS0+ZGFzaGJvYXJkUmVnaW9ucygpOwog
ICAgICAgICAgICAgdW5zaWduZWQgY291bnQgPSByZWdpb25zLnNpemUoKTsKICAgICAgICAgICAg
IGlmIChjb3VudCA9PSAxICYmIHJlZ2lvbnNbMF0udHlwZSA9PSBTdHlsZURhc2hib2FyZFJlZ2lv
bjo6Tm9uZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKENT
U1ZhbHVlTm9uZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpj
cmVhdGVJZGVudGlmaWVyKENTU1ZhbHVlTm9uZSk7CiAKICAgICAgICAgICAgIFJlZlB0cjxEYXNo
Ym9hcmRSZWdpb24+IGZpcnN0UmVnaW9uOwogICAgICAgICAgICAgRGFzaGJvYXJkUmVnaW9uKiBw
cmV2aW91c1JlZ2lvbiA9IDA7CkBAIC05NTMsMTAgKzk1MywxMCBAQCBQYXNzUmVmUHRyPENTU1Zh
bHVlPiBDU1NDb21wdXRlZFN0eWxlRGVjCiAKICAgICAgICAgICAgICAgICByZWdpb24tPm1fbGFi
ZWwgPSBzdHlsZVJlZ2lvbi5sYWJlbDsKICAgICAgICAgICAgICAgICBMZW5ndGhCb3ggb2Zmc2V0
ID0gc3R5bGVSZWdpb24ub2Zmc2V0OwotICAgICAgICAgICAgICAgIHJlZ2lvbi0+c2V0VG9wKG5l
dyBDU1NQcmltaXRpdmVWYWx1ZShvZmZzZXQudG9wLnZhbHVlKCksIENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfUFgpKTsKLSAgICAgICAgICAgICAgICByZWdpb24tPnNldFJpZ2h0KG5ldyBDU1NQcmlt
aXRpdmVWYWx1ZShvZmZzZXQucmlnaHQudmFsdWUoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19Q
WCkpOwotICAgICAgICAgICAgICAgIHJlZ2lvbi0+c2V0Qm90dG9tKG5ldyBDU1NQcmltaXRpdmVW
YWx1ZShvZmZzZXQuYm90dG9tLnZhbHVlKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgpKTsK
LSAgICAgICAgICAgICAgICByZWdpb24tPnNldExlZnQobmV3IENTU1ByaW1pdGl2ZVZhbHVlKG9m
ZnNldC5sZWZ0LnZhbHVlKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgpKTsKKyAgICAgICAg
ICAgICAgICByZWdpb24tPnNldFRvcChDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKG9mZnNldC50
b3AudmFsdWUoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCkpOworICAgICAgICAgICAgICAg
IHJlZ2lvbi0+c2V0UmlnaHQoQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShvZmZzZXQucmlnaHQu
dmFsdWUoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCkpOworICAgICAgICAgICAgICAgIHJl
Z2lvbi0+c2V0Qm90dG9tKENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUob2Zmc2V0LmJvdHRvbS52
YWx1ZSgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKSk7CisgICAgICAgICAgICAgICAgcmVn
aW9uLT5zZXRMZWZ0KENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUob2Zmc2V0LmxlZnQudmFsdWUo
KSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCkpOwogICAgICAgICAgICAgICAgIHJlZ2lvbi0+
bV9pc1JlY3RhbmdsZSA9IChzdHlsZVJlZ2lvbi50eXBlID09IFN0eWxlRGFzaGJvYXJkUmVnaW9u
OjpSZWN0YW5nbGUpOwogICAgICAgICAgICAgICAgIHJlZ2lvbi0+bV9pc0NpcmNsZSA9IChzdHls
ZVJlZ2lvbi50eXBlID09IFN0eWxlRGFzaGJvYXJkUmVnaW9uOjpDaXJjbGUpOwogCkBAIC05NjYs
MTEgKzk2NiwxMSBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NDb21wdXRlZFN0eWxlRGVjCiAg
ICAgICAgICAgICAgICAgICAgIGZpcnN0UmVnaW9uID0gcmVnaW9uOwogICAgICAgICAgICAgICAg
IHByZXZpb3VzUmVnaW9uID0gcmVnaW9uLmdldCgpOwogICAgICAgICAgICAgfQotICAgICAgICAg
ICAgcmV0dXJuIG5ldyBDU1NQcmltaXRpdmVWYWx1ZShmaXJzdFJlZ2lvbi5yZWxlYXNlKCkpOwor
ICAgICAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoZmlyc3RSZWdpb24u
cmVsZWFzZSgpKTsKICAgICAgICAgfQogI2VuZGlmCiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRBcHBlYXJhbmNlOgotICAgICAgICAgICAgcmV0dXJuIG5ldyBDU1NQcmltaXRpdmVWYWx1
ZShzdHlsZS0+YXBwZWFyYW5jZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVW
YWx1ZTo6Y3JlYXRlKHN0eWxlLT5hcHBlYXJhbmNlKCkpOwogICAgICAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0Qm9yZGVySW1hZ2U6CiAgICAgICAgICAgICByZXR1cm4gdmFsdWVGb3JOaW5lUGll
Y2VJbWFnZShzdHlsZS0+Ym9yZGVySW1hZ2UoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRNYXNrQm94SW1hZ2U6CkBAIC05NzksMTcgKzk3OSwxNyBAQCBQYXNzUmVmUHRyPENTU1Zh
bHVlPiBDU1NDb21wdXRlZFN0eWxlRGVjCiAgICAgICAgICAgICAvLyBOb3QgYSByZWFsIHN0eWxl
IHByb3BlcnR5IC0tIHVzZWQgYnkgdGhlIGVkaXRpbmcgZW5naW5lIC0tIHNvIGhhcyBubyBjb21w
dXRlZCB2YWx1ZS4KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0TWFyZ2luQm90dG9tQ29sbGFwc2U6Ci0gICAgICAgICAgICByZXR1cm4gbmV3IENTU1By
aW1pdGl2ZVZhbHVlKHN0eWxlLT5tYXJnaW5Cb3R0b21Db2xsYXBzZSgpKTsKKyAgICAgICAgICAg
IHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHN0eWxlLT5tYXJnaW5Cb3R0b21Db2xs
YXBzZSgpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcmdpblRvcENvbGxhcHNl
OgotICAgICAgICAgICAgcmV0dXJuIG5ldyBDU1NQcmltaXRpdmVWYWx1ZShzdHlsZS0+bWFyZ2lu
VG9wQ29sbGFwc2UoKSk7CisgICAgICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNy
ZWF0ZShzdHlsZS0+bWFyZ2luVG9wQ29sbGFwc2UoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRSdGxPcmRlcmluZzoKICAgICAgICAgICAgIGlmIChzdHlsZS0+dmlzdWFsbHlPcmRl
cmVkKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDU1NQcmltaXRpdmVWYWx1ZShDU1NW
YWx1ZVZpc3VhbCk7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKENT
U1ZhbHVlTG9naWNhbCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVl
OjpjcmVhdGVJZGVudGlmaWVyKENTU1ZhbHVlVmlzdWFsKTsKKyAgICAgICAgICAgIHJldHVybiBD
U1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlSWRlbnRpZmllcihDU1NWYWx1ZUxvZ2ljYWwpOwogICAg
ICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VXNlckRyYWc6Ci0gICAgICAgICAgICByZXR1cm4g
bmV3IENTU1ByaW1pdGl2ZVZhbHVlKHN0eWxlLT51c2VyRHJhZygpKTsKKyAgICAgICAgICAgIHJl
dHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHN0eWxlLT51c2VyRHJhZygpKTsKICAgICAg
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFVzZXJTZWxlY3Q6Ci0gICAgICAgICAgICByZXR1cm4g
bmV3IENTU1ByaW1pdGl2ZVZhbHVlKHN0eWxlLT51c2VyU2VsZWN0KCkpOworICAgICAgICAgICAg
cmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoc3R5bGUtPnVzZXJTZWxlY3QoKSk7CiAg
ICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJCb3R0b21MZWZ0UmFkaXVzOgogICAg
ICAgICAgICAgcmV0dXJuIGdldEJvcmRlclJhZGl1c0Nvcm5lclZhbHVlKHN0eWxlLT5ib3JkZXJC
b3R0b21MZWZ0UmFkaXVzKCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVy
Qm90dG9tUmlnaHRSYWRpdXM6CkBAIC0xMDAyLDExICsxMDAyLDExIEBAIFBhc3NSZWZQdHI8Q1NT
VmFsdWU+IENTU0NvbXB1dGVkU3R5bGVEZWMKICAgICAgICAgewogICAgICAgICAgICAgaWYgKHN0
eWxlLT5oYXNDbGlwKCkpIHsKICAgICAgICAgICAgICAgICBSZWZQdHI8UmVjdD4gcmVjdCA9IFJl
Y3Q6OmNyZWF0ZSgpOwotICAgICAgICAgICAgICAgIHJlY3QtPnNldFRvcChuZXcgQ1NTUHJpbWl0
aXZlVmFsdWUoc3R5bGUtPmNsaXAoKS50b3AudmFsdWUoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19QWCkpOwotICAgICAgICAgICAgICAgIHJlY3QtPnNldFJpZ2h0KG5ldyBDU1NQcmltaXRpdmVW
YWx1ZShzdHlsZS0+Y2xpcCgpLnJpZ2h0LnZhbHVlKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
UFgpKTsKLSAgICAgICAgICAgICAgICByZWN0LT5zZXRCb3R0b20obmV3IENTU1ByaW1pdGl2ZVZh
bHVlKHN0eWxlLT5jbGlwKCkuYm90dG9tLnZhbHVlKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
UFgpKTsKLSAgICAgICAgICAgICAgICByZWN0LT5zZXRMZWZ0KG5ldyBDU1NQcmltaXRpdmVWYWx1
ZShzdHlsZS0+Y2xpcCgpLmxlZnQudmFsdWUoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCkp
OwotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUocmVjdC5yZWxl
YXNlKCkpOworICAgICAgICAgICAgICAgIHJlY3QtPnNldFRvcChDU1NQcmltaXRpdmVWYWx1ZTo6
Y3JlYXRlKHN0eWxlLT5jbGlwKCkudG9wLnZhbHVlKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
UFgpKTsKKyAgICAgICAgICAgICAgICByZWN0LT5zZXRSaWdodChDU1NQcmltaXRpdmVWYWx1ZTo6
Y3JlYXRlKHN0eWxlLT5jbGlwKCkucmlnaHQudmFsdWUoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19QWCkpOworICAgICAgICAgICAgICAgIHJlY3QtPnNldEJvdHRvbShDU1NQcmltaXRpdmVWYWx1
ZTo6Y3JlYXRlKHN0eWxlLT5jbGlwKCkuYm90dG9tLnZhbHVlKCksIENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfUFgpKTsKKyAgICAgICAgICAgICAgICByZWN0LT5zZXRMZWZ0KENTU1ByaW1pdGl2ZVZh
bHVlOjpjcmVhdGUoc3R5bGUtPmNsaXAoKS5sZWZ0LnZhbHVlKCksIENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfUFgpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNy
ZWF0ZShyZWN0LnJlbGVhc2UoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4g
MDsKICAgICAgICAgfQpAQCAtMTIwMCw5ICsxMjAwLDQgQEAgUGFzc1JlZlB0cjxDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbj4gQwogICAgIHJldHVybiBjb3B5KCk7CiB9CiAKLVBhc3NSZWZQdHI8
Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uPiBjb21wdXRlZFN0eWxlKE5vZGUqIG5vZGUpCi17
Ci0gICAgcmV0dXJuIG5ldyBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24obm9kZSk7Ci19Ci0K
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5
bGVEZWNsYXJhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5
bGVEZWNsYXJhdGlvbi5oCShyZXZpc2lvbiAzNDU4NCkKKysrIFdlYkNvcmUvY3NzL0NTU0NvbXB1
dGVkU3R5bGVEZWNsYXJhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNiBAQAotLyoq
Ci0gKgotICogQ29weXJpZ2h0IChDKSAgMjAwNCAgWmFjayBSdXNpbiA8emFja0BrZGUub3JnPgot
ICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA0IFphY2sgUnVzaW4gPHphY2tAa2RlLm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMjgsMTUgKzI3LDEyIEBACiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIGNsYXNzIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOwotY2xhc3Mg
Q1NTUHJvcGVydHk7Ci1jbGFzcyBSZW5kZXJPYmplY3Q7Ci1jbGFzcyBSZW5kZXJTdHlsZTsKIAog
ZW51bSBFVXBkYXRlTGF5b3V0IHsgRG9Ob3RVcGRhdGVMYXlvdXQgPSBmYWxzZSwgVXBkYXRlTGF5
b3V0ID0gdHJ1ZSB9OwogCiBjbGFzcyBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24gOiBwdWJs
aWMgQ1NTU3R5bGVEZWNsYXJhdGlvbiB7CiBwdWJsaWM6Ci0gICAgQ1NTQ29tcHV0ZWRTdHlsZURl
Y2xhcmF0aW9uKFBhc3NSZWZQdHI8Tm9kZT4pOworICAgIGZyaWVuZCBQYXNzUmVmUHRyPENTU0Nv
bXB1dGVkU3R5bGVEZWNsYXJhdGlvbj4gY29tcHV0ZWRTdHlsZShQYXNzUmVmUHRyPE5vZGU+KTsK
ICAgICB2aXJ0dWFsIH5DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24oKTsKIAogICAgIHZpcnR1
YWwgU3RyaW5nIGNzc1RleHQoKSBjb25zdDsKQEAgLTYzLDYgKzU5LDggQEAgcHVibGljOgogICAg
IHN0YXRpYyB2b2lkIHJlbW92ZUNvbXB1dGVkSW5oZXJpdGFibGVQcm9wZXJ0aWVzRnJvbShDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbiopOwogCiBwcml2YXRlOgorICAgIENTU0NvbXB1dGVkU3R5
bGVEZWNsYXJhdGlvbihQYXNzUmVmUHRyPE5vZGU+KTsKKwogICAgIHZpcnR1YWwgdm9pZCBzZXRD
c3NUZXh0KGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKIAogICAgIHZpcnR1YWwgU3Ry
aW5nIHJlbW92ZVByb3BlcnR5KGludCBwcm9wZXJ0eUlELCBFeGNlcHRpb25Db2RlJik7CkBAIC03
MSw3ICs2OSwxMCBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxOb2RlPiBtX25vZGU7CiB9OwogCi1Q
YXNzUmVmUHRyPENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbj4gY29tcHV0ZWRTdHlsZShOb2Rl
Kik7CitpbmxpbmUgUGFzc1JlZlB0cjxDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24+IGNvbXB1
dGVkU3R5bGUoUGFzc1JlZlB0cjxOb2RlPiBub2RlKQoreworICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uKG5vZGUpKTsKK30KIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NDdXJzb3JJbWFnZVZhbHVlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTQ3Vyc29ySW1hZ2VWYWx1ZS5oCShyZXZpc2lvbiAz
NDU4NCkKKysrIFdlYkNvcmUvY3NzL0NTU0N1cnNvckltYWdlVmFsdWUuaAkod29ya2luZyBjb3B5
KQpAQCAtMzQsNyArMzQsNyBAQCBjbGFzcyBDU1NDdXJzb3JJbWFnZVZhbHVlIDogcHVibGljIENT
U0ltCiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTQ3Vyc29ySW1hZ2VWYWx1ZT4g
Y3JlYXRlKGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBJbnRQb2ludCYgaG90c3BvdCkKICAgICB7
Ci0gICAgICAgIHJldHVybiBuZXcgQ1NTQ3Vyc29ySW1hZ2VWYWx1ZSh1cmwsIGhvdHNwb3QpOwor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENTU0N1cnNvckltYWdlVmFsdWUodXJsLCBob3Rz
cG90KSk7CiAgICAgfQogCiAgICAgdmlydHVhbCB+Q1NTQ3Vyc29ySW1hZ2VWYWx1ZSgpOwpJbmRl
eDogV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VSdWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2Nzcy9DU1NGb250RmFjZVJ1bGUuY3BwCShyZXZpc2lvbiAzNDU4NCkKKysrIFdlYkNvcmUvY3Nz
L0NTU0ZvbnRGYWNlUnVsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsOSArMSw3IEBACi0vKioK
LSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9yIEtERS4K
LSAqCisvKgogICogKEMpIDE5OTktMjAwMyBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICog
KEMpIDIwMDItMjAwMyBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKLSAqIENvcHlyaWdo
dCAoQykgMjAwMiwgMjAwNSwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0
IChDKSAyMDAyLCAyMDA1LCAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjgsNyArMjYsNyBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLUNTU0ZvbnRGYWNlUnVsZTo6Q1NTRm9udEZhY2VSdWxlKFN0eWxlQmFzZSogcGFy
ZW50KQorQ1NTRm9udEZhY2VSdWxlOjpDU1NGb250RmFjZVJ1bGUoQ1NTU3R5bGVTaGVldCogcGFy
ZW50KQogICAgIDogQ1NTUnVsZShwYXJlbnQpCiB7CiB9CkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NG
b250RmFjZVJ1bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NGb250RmFjZVJ1bGUu
aAkocmV2aXNpb24gMzQ1ODQpCisrKyBXZWJDb3JlL2Nzcy9DU1NGb250RmFjZVJ1bGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw5ICsxLDcgQEAKIC8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0
aGUgRE9NIGltcGxlbWVudGF0aW9uIGZvciBLREUuCi0gKgogICogKEMpIDE5OTktMjAwMyBMYXJz
IEtub2xsIChrbm9sbEBrZGUub3JnKQogICogKEMpIDIwMDItMjAwMyBEaXJrIE11ZWxsZXIgKG11
ZWxsZXJAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNiBBcHBsZSBDb21wdXRl
ciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDAyLCAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzQsMjEgKzMyLDMxIEBA
IGNsYXNzIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOwogCiBjbGFzcyBDU1NGb250RmFjZVJ1
bGUgOiBwdWJsaWMgQ1NTUnVsZSB7CiBwdWJsaWM6Ci0gICAgQ1NTRm9udEZhY2VSdWxlKFN0eWxl
QmFzZSogcGFyZW50KTsKLSAgICB2aXJ0dWFsIH5DU1NGb250RmFjZVJ1bGUoKTsKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxDU1NGb250RmFjZVJ1bGU+IGNyZWF0ZSgpCisgICAgeworICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IENTU0ZvbnRGYWNlUnVsZSgwKSk7CisgICAgfQorICAgIHN0YXRp
YyBQYXNzUmVmUHRyPENTU0ZvbnRGYWNlUnVsZT4gY3JlYXRlKENTU1N0eWxlU2hlZXQqIHBhcmVu
dCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ1NTRm9udEZhY2VSdWxlKHBh
cmVudCkpOworICAgIH0KIAotICAgIHZpcnR1YWwgYm9vbCBpc0ZvbnRGYWNlUnVsZSgpIHsgcmV0
dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIH5DU1NGb250RmFjZVJ1bGUoKTsKIAogICAgIENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGUuZ2V0
KCk7IH0KIAotICAgIC8vIEluaGVyaXRlZCBmcm9tIENTU1J1bGUKLSAgICB2aXJ0dWFsIHVuc2ln
bmVkIHNob3J0IHR5cGUoKSBjb25zdCB7IHJldHVybiBGT05UX0ZBQ0VfUlVMRTsgfQotCiAgICAg
dmlydHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0OwogCiAgICAgdm9pZCBzZXREZWNsYXJhdGlv
bihQYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPik7CiAKLXByb3RlY3RlZDoK
K3ByaXZhdGU6CisgICAgQ1NTRm9udEZhY2VSdWxlKENTU1N0eWxlU2hlZXQqIHBhcmVudCk7CisK
KyAgICB2aXJ0dWFsIGJvb2wgaXNGb250RmFjZVJ1bGUoKSB7IHJldHVybiB0cnVlOyB9CisKKyAg
ICAvLyBJbmhlcml0ZWQgZnJvbSBDU1NSdWxlCisgICAgdmlydHVhbCB1bnNpZ25lZCBzaG9ydCB0
eXBlKCkgY29uc3QgeyByZXR1cm4gRk9OVF9GQUNFX1JVTEU7IH0KKwogICAgIFJlZlB0cjxDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gbV9zdHlsZTsKIH07CiAKSW5kZXg6IFdlYkNvcmUvY3Nz
L0NTU0ZvbnRGYWNlU3JjVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NGb250
RmFjZVNyY1ZhbHVlLmgJKHJldmlzaW9uIDM0NTg0KQorKysgV2ViQ29yZS9jc3MvQ1NTRm9udEZh
Y2VTcmNWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJD
U1NWYWx1ZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL1Bh
c3NSZWZQdHIuaD4KIAogI2lmIEVOQUJMRShTVkdfRk9OVFMpCiAjaW5jbHVkZSAiU1ZHRm9udEZh
Y2VFbGVtZW50LmgiCkBAIC0zNywxMCArMzgsMTYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBj
bGFzcyBDU1NGb250RmFjZVNyY1ZhbHVlIDogcHVibGljIENTU1ZhbHVlIHsKIHB1YmxpYzoKLSAg
ICBDU1NGb250RmFjZVNyY1ZhbHVlKGNvbnN0IFN0cmluZyYgcmVzb3VyY2UsIGJvb2wgbG9jYWwp
Ci0gICAgOm1fcmVzb3VyY2UocmVzb3VyY2UpLCBtX2lzTG9jYWwobG9jYWwpCi0gICAge30KLSAg
ICB2aXJ0dWFsIH5DU1NGb250RmFjZVNyY1ZhbHVlKCkge30KKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxDU1NGb250RmFjZVNyY1ZhbHVlPiBjcmVhdGUoY29uc3QgU3RyaW5nJiByZXNvdXJjZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ1NTRm9udEZhY2VTcmNWYWx1ZShyZXNv
dXJjZSwgZmFsc2UpKTsKKyAgICB9CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTRm9udEZhY2VT
cmNWYWx1ZT4gY3JlYXRlTG9jYWwoY29uc3QgU3RyaW5nJiByZXNvdXJjZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ1NTRm9udEZhY2VTcmNWYWx1ZShyZXNvdXJjZSwgdHJ1
ZSkpOworICAgIH0KKworICAgIHZpcnR1YWwgfkNTU0ZvbnRGYWNlU3JjVmFsdWUoKSB7IH0KIAog
ICAgIGNvbnN0IFN0cmluZyYgcmVzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3Jlc291cmNlOyB9
CiAgICAgY29uc3QgU3RyaW5nJiBmb3JtYXQoKSBjb25zdCB7IHJldHVybiBtX2Zvcm1hdDsgfQpA
QCAtNjAsNiArNjcsMTEgQEAgcHVibGljOgogICAgIHZpcnR1YWwgU3RyaW5nIGNzc1RleHQoKSBj
b25zdDsKIAogcHJpdmF0ZToKKyAgICBDU1NGb250RmFjZVNyY1ZhbHVlKGNvbnN0IFN0cmluZyYg
cmVzb3VyY2UsIGJvb2wgbG9jYWwpCisgICAgICAgIDogbV9yZXNvdXJjZShyZXNvdXJjZSksIG1f
aXNMb2NhbChsb2NhbCkKKyAgICB7CisgICAgfQorCiAgICAgU3RyaW5nIG1fcmVzb3VyY2U7CiAg
ICAgU3RyaW5nIG1fZm9ybWF0OwogICAgIGJvb2wgbV9pc0xvY2FsOwpJbmRleDogV2ViQ29yZS9j
c3MvQ1NTR3JhZGllbnRWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU0dyYWRp
ZW50VmFsdWUuaAkocmV2aXNpb24gMzQ1ODQpCisrKyBXZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZh
bHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDA4IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0yNyw5ICsyNyw3IEBACiAjZGVmaW5lIENTU0dyYWRpZW50VmFsdWVf
aAogCiAjaW5jbHVkZSAiQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZS5oIgotCiAjaW5jbHVkZSAiQ1NT
UHJpbWl0aXZlVmFsdWUuaCIKLQogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CiAKQEAgLTQyLDggKzQwLDkgQEAgZW51bSBDU1NHcmFkaWVudFR5cGUgeyBD
U1NMaW5lYXJHcmFkaWVudAogCiBzdHJ1Y3QgQ1NTR3JhZGllbnRDb2xvclN0b3AgewogICAgIENT
U0dyYWRpZW50Q29sb3JTdG9wKCkKLSAgICA6IG1fc3RvcCgwKQotICAgIHt9CisgICAgICAgIDog
bV9zdG9wKDApCisgICAgeworICAgIH0KICAgICAKICAgICBmbG9hdCBtX3N0b3A7CiAgICAgUmVm
UHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBtX2NvbG9yOwpAQCAtNTEsMTEgKzUwLDExIEBAIHN0cnVj
dCBDU1NHcmFkaWVudENvbG9yU3RvcCB7CiAKIGNsYXNzIENTU0dyYWRpZW50VmFsdWUgOiBwdWJs
aWMgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSB7CiBwdWJsaWM6Ci0gICAgQ1NTR3JhZGllbnRWYWx1
ZSgpCi0gICAgOiBtX3R5cGUoQ1NTTGluZWFyR3JhZGllbnQpCi0gICAgLCBtX3N0b3BzU29ydGVk
KGZhbHNlKQotICAgIHt9Ci0gICAgCisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTR3JhZGllbnRW
YWx1ZT4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ1NTR3Jh
ZGllbnRWYWx1ZSk7CisgICAgfQorCiAgICAgdmlydHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0
OwogCiAgICAgdmlydHVhbCBJbWFnZSogaW1hZ2UoUmVuZGVyT2JqZWN0KiwgY29uc3QgSW50U2l6
ZSYpOwpAQCAtNzUsNyArNzQsMTMgQEAgcHVibGljOgogCiAgICAgdm9pZCBzb3J0U3RvcHNJZk5l
ZWRlZCgpOwogCi1wcm90ZWN0ZWQ6Citwcml2YXRlOgorICAgIENTU0dyYWRpZW50VmFsdWUoKQor
ICAgICAgICA6IG1fdHlwZShDU1NMaW5lYXJHcmFkaWVudCkKKyAgICAgICAgLCBtX3N0b3BzU29y
dGVkKGZhbHNlKQorICAgIHsKKyAgICB9CisgICAgCiAgICAgLy8gQ3JlYXRlIHRoZSBncmFkaWVu
dCBmb3IgYSBnaXZlbiBzaXplLgogICAgIEdyYWRpZW50KiBjcmVhdGVHcmFkaWVudChSZW5kZXJP
YmplY3QqLCBjb25zdCBJbnRTaXplJik7CiAgICAgCkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NJbWFn
ZUdlbmVyYXRvclZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTSW1hZ2VHZW5l
cmF0b3JWYWx1ZS5oCShyZXZpc2lvbiAzNDU4NCkKKysrIFdlYkNvcmUvY3NzL0NTU0ltYWdlR2Vu
ZXJhdG9yVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDM5ICsyNywzMyBAQAogI2RlZmluZSBDU1NJbWFn
ZUdlbmVyYXRvclZhbHVlX2gKIAogI2luY2x1ZGUgIkNTU1ZhbHVlLmgiCi0KLSNpbmNsdWRlICJJ
bnRTaXplLmgiCiAjaW5jbHVkZSAiSW50U2l6ZUhhc2guaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1h
cC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoQ291bnRlZFNldC5oPgotI2luY2x1ZGUgPHd0Zi9QYXNz
UmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBJbWFnZTsKLWNsYXNzIEludFNpemU7
CiBjbGFzcyBTdHlsZUdlbmVyYXRlZEltYWdlOwogY2xhc3MgUmVuZGVyT2JqZWN0OwogCiBjbGFz
cyBDU1NJbWFnZUdlbmVyYXRvclZhbHVlIDogcHVibGljIENTU1ZhbHVlIHsKIHB1YmxpYzoKLSAg
ICBDU1NJbWFnZUdlbmVyYXRvclZhbHVlKCk7CiAgICAgdmlydHVhbCB+Q1NTSW1hZ2VHZW5lcmF0
b3JWYWx1ZSgpOwogCi0gICAgdmlydHVhbCBib29sIGlzSW1hZ2VHZW5lcmF0b3JWYWx1ZSgpIGNv
bnN0IHsgcmV0dXJuIHRydWU7IH0KLSAgICAKICAgICB2b2lkIGFkZENsaWVudChSZW5kZXJPYmpl
Y3QqLCBjb25zdCBJbnRTaXplJik7CiAgICAgdm9pZCByZW1vdmVDbGllbnQoUmVuZGVyT2JqZWN0
Kik7CiAgICAgdmlydHVhbCBJbWFnZSogaW1hZ2UoUmVuZGVyT2JqZWN0KiwgY29uc3QgSW50U2l6
ZSYpID0gMDsKIAotICAgIHZpcnR1YWwgU3R5bGVHZW5lcmF0ZWRJbWFnZSogZ2VuZXJhdGVkSW1h
Z2UoKTsKKyAgICBTdHlsZUdlbmVyYXRlZEltYWdlKiBnZW5lcmF0ZWRJbWFnZSgpOwogICAgIAog
ICAgIHZpcnR1YWwgYm9vbCBpc0ZpeGVkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAg
ICAgdmlydHVhbCBJbnRTaXplIGZpeGVkU2l6ZShjb25zdCBSZW5kZXJPYmplY3QqKSB7IHJldHVy
biBJbnRTaXplKCk7IH0KICAgICAKIHByb3RlY3RlZDoKKyAgICBDU1NJbWFnZUdlbmVyYXRvclZh
bHVlKCk7CisgICAgCiAgICAgSW1hZ2UqIGdldEltYWdlKFJlbmRlck9iamVjdCosIGNvbnN0IElu
dFNpemUmKTsKICAgICB2b2lkIHB1dEltYWdlKGNvbnN0IEludFNpemUmLCBJbWFnZSopOwogCkBA
IC02OSw2ICs2Myw5IEBAIHByb3RlY3RlZDoKICAgICAKICAgICBSZWZQdHI8U3R5bGVHZW5lcmF0
ZWRJbWFnZT4gbV9pbWFnZTsKICAgICBib29sIG1fYWNjZXNzZWRJbWFnZTsKKworcHJpdmF0ZToK
KyAgICB2aXJ0dWFsIGJvb2wgaXNJbWFnZUdlbmVyYXRvclZhbHVlKCkgY29uc3QgeyByZXR1cm4g
dHJ1ZTsgfQogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9jc3Mv
Q1NTSW1hZ2VWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU0ltYWdlVmFsdWUu
aAkocmV2aXNpb24gMzQ1ODQpCisrKyBXZWJDb3JlL2Nzcy9DU1NJbWFnZVZhbHVlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMyLDggKzMyLDggQEAgY2xhc3MgU3R5bGVDYWNoZWRJbWFnZTsKIAogY2xh
c3MgQ1NTSW1hZ2VWYWx1ZSA6IHB1YmxpYyBDU1NQcmltaXRpdmVWYWx1ZSwgcHJpdmF0ZSBDYWNo
ZWRSZXNvdXJjZUNsaWVudCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTSW1h
Z2VWYWx1ZT4gY3JlYXRlKCkgeyByZXR1cm4gbmV3IENTU0ltYWdlVmFsdWU7IH0KLSAgICBzdGF0
aWMgUGFzc1JlZlB0cjxDU1NJbWFnZVZhbHVlPiBjcmVhdGUoY29uc3QgU3RyaW5nJiB1cmwpIHsg
cmV0dXJuIG5ldyBDU1NJbWFnZVZhbHVlKHVybCk7IH0KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxD
U1NJbWFnZVZhbHVlPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZihuZXcgQ1NTSW1hZ2VWYWx1
ZSk7IH0KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDU1NJbWFnZVZhbHVlPiBjcmVhdGUoY29uc3Qg
U3RyaW5nJiB1cmwpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBDU1NJbWFnZVZhbHVlKHVybCkpOyB9
CiAgICAgdmlydHVhbCB+Q1NTSW1hZ2VWYWx1ZSgpOwogCiAgICAgdmlydHVhbCBTdHlsZUNhY2hl
ZEltYWdlKiBjYWNoZWRJbWFnZShEb2NMb2FkZXIqKTsKSW5kZXg6IFdlYkNvcmUvY3NzL0NTU0lt
cG9ydFJ1bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU0ltcG9ydFJ1bGUuY3Bw
CShyZXZpc2lvbiAzNDU4NCkKKysrIFdlYkNvcmUvY3NzL0NTU0ltcG9ydFJ1bGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDkgKzEsNyBAQAotLyoqCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0
aGUgRE9NIGltcGxlbWVudGF0aW9uIGZvciBLREUuCi0gKgorLyoKICAqIChDKSAxOTk5LTIwMDMg
TGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqIChDKSAyMDAyLTIwMDMgRGlyayBNdWVsbGVy
IChtdWVsbGVyQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDUsIDIwMDYgQXBw
bGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNSwgMjAwNiwgMjAw
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAg
LTI1LDE0ICsyMywxMyBAQAogI2luY2x1ZGUgIkNTU0ltcG9ydFJ1bGUuaCIKIAogI2luY2x1ZGUg
IkNhY2hlZENTU1N0eWxlU2hlZXQuaCIKLSNpbmNsdWRlICJDU1NTdHlsZVNoZWV0LmgiCiAjaW5j
bHVkZSAiRG9jTG9hZGVyLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJNZWRp
YUxpc3QuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1DU1NJbXBvcnRSdWxlOjpDU1NJbXBv
cnRSdWxlKFN0eWxlQmFzZSogcGFyZW50LCBjb25zdCBTdHJpbmcmIGhyZWYsIE1lZGlhTGlzdCog
bWVkaWEpCitDU1NJbXBvcnRSdWxlOjpDU1NJbXBvcnRSdWxlKENTU1N0eWxlU2hlZXQqIHBhcmVu
dCwgY29uc3QgU3RyaW5nJiBocmVmLCBQYXNzUmVmUHRyPE1lZGlhTGlzdD4gbWVkaWEpCiAgICAg
OiBDU1NSdWxlKHBhcmVudCkKICAgICAsIG1fc3RySHJlZihocmVmKQogICAgICwgbV9sc3RNZWRp
YShtZWRpYSkKQEAgLTQyLDcgKzM5LDcgQEAgQ1NTSW1wb3J0UnVsZTo6Q1NTSW1wb3J0UnVsZShT
dHlsZUJhc2UqIAogICAgIGlmIChtX2xzdE1lZGlhKQogICAgICAgICBtX2xzdE1lZGlhLT5zZXRQ
YXJlbnQodGhpcyk7CiAgICAgZWxzZQotICAgICAgICBtX2xzdE1lZGlhID0gbmV3IE1lZGlhTGlz
dCh0aGlzLCBTdHJpbmcoKSk7CisgICAgICAgIG1fbHN0TWVkaWEgPSBNZWRpYUxpc3Q6OmNyZWF0
ZSh0aGlzLCBTdHJpbmcoKSk7CiB9CiAKIENTU0ltcG9ydFJ1bGU6On5DU1NJbXBvcnRSdWxlKCkK
QEAgLTU5LDcgKzU2LDcgQEAgdm9pZCBDU1NJbXBvcnRSdWxlOjpzZXRDU1NTdHlsZVNoZWV0KGNv
bgogewogICAgIGlmIChtX3N0eWxlU2hlZXQpCiAgICAgICAgIG1fc3R5bGVTaGVldC0+c2V0UGFy
ZW50KDApOwotICAgIG1fc3R5bGVTaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KHRoaXMsIHVybCwg
Y2hhcnNldCk7CisgICAgbV9zdHlsZVNoZWV0ID0gQ1NTU3R5bGVTaGVldDo6Y3JlYXRlKHRoaXMs
IHVybCwgY2hhcnNldCk7CiAKICAgICBDU1NTdHlsZVNoZWV0KiBwYXJlbnQgPSBwYXJlbnRTdHls
ZVNoZWV0KCk7CiAgICAgYm9vbCBzdHJpY3QgPSAhcGFyZW50IHx8IHBhcmVudC0+dXNlU3RyaWN0
UGFyc2luZygpOwpJbmRleDogV2ViQ29yZS9jc3MvQ1NTSW1wb3J0UnVsZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvY3NzL0NTU0ltcG9ydFJ1bGUuaAkocmV2aXNpb24gMzQ1ODQpCisrKyBXZWJD
b3JlL2Nzcy9DU1NJbXBvcnRSdWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsOSArMSw3IEBACiAv
KgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RF
LgotICoKICAqIChDKSAxOTk5LTIwMDMgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqIChD
KSAyMDAyLTIwMDMgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDIsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAw
MiwgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKQEAgLTI2LDYgKzI0LDcgQEAKIAogI2luY2x1ZGUgIkNTU1J1bGUuaCIKICNpbmNs
dWRlICJDYWNoZWRSZXNvdXJjZUNsaWVudC5oIgorI2luY2x1ZGUgIk1lZGlhTGlzdC5oIgogI2lu
Y2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTMzLDMx
ICszMiwzNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBDYWNoZWRDU1NTdHlsZVNoZWV0
OwogY2xhc3MgTWVkaWFMaXN0OwogCi1jbGFzcyBDU1NJbXBvcnRSdWxlIDogcHVibGljIENTU1J1
bGUsIHB1YmxpYyBDYWNoZWRSZXNvdXJjZUNsaWVudCB7CitjbGFzcyBDU1NJbXBvcnRSdWxlIDog
cHVibGljIENTU1J1bGUsIHByaXZhdGUgQ2FjaGVkUmVzb3VyY2VDbGllbnQgewogcHVibGljOgot
ICAgIENTU0ltcG9ydFJ1bGUoU3R5bGVCYXNlKiBwYXJlbnQsIGNvbnN0IFN0cmluZyYgaHJlZiwg
TWVkaWFMaXN0Kik7Ci0gICAgdmlydHVhbCB+Q1NTSW1wb3J0UnVsZSgpOworICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPENTU0ltcG9ydFJ1bGU+IGNyZWF0ZShDU1NTdHlsZVNoZWV0KiBwYXJlbnQsIGNv
bnN0IFN0cmluZyYgaHJlZiwgUGFzc1JlZlB0cjxNZWRpYUxpc3Q+IG1lZGlhKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDU1NJbXBvcnRSdWxlKHBhcmVudCwgaHJlZiwgbWVk
aWEpKTsKKyAgICB9CiAKLSAgICB2aXJ0dWFsIGJvb2wgaXNJbXBvcnRSdWxlKCkgeyByZXR1cm4g
dHJ1ZTsgfQorICAgIHZpcnR1YWwgfkNTU0ltcG9ydFJ1bGUoKTsKIAogICAgIFN0cmluZyBocmVm
KCkgY29uc3QgeyByZXR1cm4gbV9zdHJIcmVmOyB9CiAgICAgTWVkaWFMaXN0KiBtZWRpYSgpIGNv
bnN0IHsgcmV0dXJuIG1fbHN0TWVkaWEuZ2V0KCk7IH0KICAgICBDU1NTdHlsZVNoZWV0KiBzdHls
ZVNoZWV0KCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZVNoZWV0LmdldCgpOyB9CiAKLSAgICAvLyBJ
bmhlcml0ZWQgZnJvbSBDU1NSdWxlCi0gICAgdmlydHVhbCB1bnNpZ25lZCBzaG9ydCB0eXBlKCkg
Y29uc3QgeyByZXR1cm4gSU1QT1JUX1JVTEU7IH0KLQogICAgIHZpcnR1YWwgU3RyaW5nIGNzc1Rl
eHQoKSBjb25zdDsKIAogICAgIC8vIE5vdCBwYXJ0IG9mIHRoZSBDU1NPTQogICAgIGJvb2wgaXNM
b2FkaW5nKCkgY29uc3Q7CiAKLSAgICAvLyBmcm9tIENhY2hlZFJlc291cmNlQ2xpZW50Ci0gICAg
dmlydHVhbCB2b2lkIHNldENTU1N0eWxlU2hlZXQoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0
cmluZyYgY2hhcnNldCwgY29uc3QgQ2FjaGVkQ1NTU3R5bGVTaGVldCopOworcHJpdmF0ZToKKyAg
ICBDU1NJbXBvcnRSdWxlKENTU1N0eWxlU2hlZXQqIHBhcmVudCwgY29uc3QgU3RyaW5nJiBocmVm
LCBQYXNzUmVmUHRyPE1lZGlhTGlzdD4pOwogCisgICAgdmlydHVhbCBib29sIGlzSW1wb3J0UnVs
ZSgpIHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJbnRvUGFyZW50
KCk7CiAKLXByb3RlY3RlZDoKKyAgICAvLyBmcm9tIENTU1J1bGUKKyAgICB2aXJ0dWFsIHVuc2ln
bmVkIHNob3J0IHR5cGUoKSBjb25zdCB7IHJldHVybiBJTVBPUlRfUlVMRTsgfQorCisgICAgLy8g
ZnJvbSBDYWNoZWRSZXNvdXJjZUNsaWVudAorICAgIHZpcnR1YWwgdm9pZCBzZXRDU1NTdHlsZVNo
ZWV0KGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQsIGNvbnN0IENhY2hl
ZENTU1N0eWxlU2hlZXQqKTsKKwogICAgIFN0cmluZyBtX3N0ckhyZWY7CiAgICAgUmVmUHRyPE1l
ZGlhTGlzdD4gbV9sc3RNZWRpYTsKICAgICBSZWZQdHI8Q1NTU3R5bGVTaGVldD4gbV9zdHlsZVNo
ZWV0OwpJbmRleDogV2ViQ29yZS9jc3MvQ1NTSW5oZXJpdGVkVmFsdWUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2Nzcy9DU1NJbmhlcml0ZWRWYWx1ZS5oCShyZXZpc2lvbiAzNDU4NCkKKysrIFdl
YkNvcmUvY3NzL0NTU0luaGVyaXRlZFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsOCArMSw2
IEBACiAvKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiBm
b3IgS0RFLgotICoKICAqIChDKSAxOTk5LTIwMDMgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykK
LSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgor
ICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjQsMTMgKzIyLDIyIEBACiAj
ZGVmaW5lIENTU0luaGVyaXRlZFZhbHVlX2gKIAogI2luY2x1ZGUgIkNTU1ZhbHVlLmgiCisjaW5j
bHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBD
U1NJbmhlcml0ZWRWYWx1ZSA6IHB1YmxpYyBDU1NWYWx1ZSB7CiBwdWJsaWM6Ci0gICAgdmlydHVh
bCB1bnNpZ25lZCBzaG9ydCBjc3NWYWx1ZVR5cGUoKSBjb25zdDsKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxDU1NJbmhlcml0ZWRWYWx1ZT4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgQ1NTSW5oZXJpdGVkVmFsdWUpOworICAgIH0KKwogICAgIHZpcnR1YWwgU3Ry
aW5nIGNzc1RleHQoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBDU1NJbmhlcml0ZWRWYWx1ZSgp
IHsgfQorICAgIHZpcnR1YWwgdW5zaWduZWQgc2hvcnQgY3NzVmFsdWVUeXBlKCkgY29uc3Q7CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NJbml0aWFs
VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NJbml0aWFsVmFsdWUuaAkocmV2
aXNpb24gMzQ1ODQpCisrKyBXZWJDb3JlL2Nzcy9DU1NJbml0aWFsVmFsdWUuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw4ICsxLDYgQEAKIC8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRE9N
IGltcGxlbWVudGF0aW9uIGZvciBLREUuCi0gKgogICogKEMpIDE5OTktMjAwMyBMYXJzIEtub2xs
IChrbm9sbEBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2IEFwcGxl
IENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0y
NCwyMSArMjIsMzIgQEAKICNkZWZpbmUgQ1NTSW5pdGlhbFZhbHVlX2gKIAogI2luY2x1ZGUgIkNT
U1ZhbHVlLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjbGFzcyBDU1NJbml0aWFsVmFsdWUgOiBwdWJsaWMgQ1NTVmFsdWUgewogcHVibGlj
OgotICAgIENTU0luaXRpYWxWYWx1ZShib29sIGltcGxpY2l0KQotICAgIDptX2ltcGxpY2l0KGlt
cGxpY2l0KQotICAgIHt9CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTSW5pdGlhbFZhbHVlPiBj
cmVhdGVFeHBsaWNpdCgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENTU0lu
aXRpYWxWYWx1ZShmYWxzZSkpOworICAgIH0KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDU1NJbml0
aWFsVmFsdWU+IGNyZWF0ZUltcGxpY2l0KCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgQ1NTSW5pdGlhbFZhbHVlKHRydWUpKTsKKyAgICB9CiAKLSAgICB2aXJ0dWFsIHVuc2ln
bmVkIHNob3J0IGNzc1ZhbHVlVHlwZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgU3RyaW5nIGNzc1Rl
eHQoKSBjb25zdDsKICAgICAgICAgCitwcml2YXRlOgorICAgIENTU0luaXRpYWxWYWx1ZShib29s
IGltcGxpY2l0KQorICAgICAgICA6IG1faW1wbGljaXQoaW1wbGljaXQpCisgICAgeworICAgIH0K
KworICAgIHZpcnR1YWwgdW5zaWduZWQgc2hvcnQgY3NzVmFsdWVUeXBlKCkgY29uc3Q7CiAgICAg
dmlydHVhbCBib29sIGlzSW1wbGljaXRJbml0aWFsVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2lt
cGxpY2l0OyB9CiAKLXByaXZhdGU6CiAgICAgYm9vbCBtX2ltcGxpY2l0OwogfTsKIApJbmRleDog
V2ViQ29yZS9jc3MvQ1NTTWVkaWFSdWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9D
U1NNZWRpYVJ1bGUuY3BwCShyZXZpc2lvbiAzNDU4NCkKKysrIFdlYkNvcmUvY3NzL0NTU01lZGlh
UnVsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDMyICsyNiwxNCBAQAogI2luY2x1ZGUgIkNT
U01lZGlhUnVsZS5oIgogCiAjaW5jbHVkZSAiQ1NTUGFyc2VyLmgiCi0jaW5jbHVkZSAiQ1NTUnVs
ZUxpc3QuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0jaW5jbHVkZSAiTWVkaWFMaXN0
LmgiCi0jaW5jbHVkZSAiU3R5bGVTaGVldC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNT
U01lZGlhUnVsZTo6Q1NTTWVkaWFSdWxlKFN0eWxlQmFzZSogcGFyZW50LCBNZWRpYUxpc3QqIG1l
ZGlhTGlzdCwgQ1NTUnVsZUxpc3QqIHJ1bGVMaXN0KQorQ1NTTWVkaWFSdWxlOjpDU1NNZWRpYVJ1
bGUoQ1NTU3R5bGVTaGVldCogcGFyZW50LCBQYXNzUmVmUHRyPE1lZGlhTGlzdD4gbWVkaWEsIFBh
c3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IHJ1bGVzKQogICAgIDogQ1NTUnVsZShwYXJlbnQpCi0gICAg
LCBtX2xzdE1lZGlhKG1lZGlhTGlzdCkKLSAgICAsIG1fbHN0Q1NTUnVsZXMocnVsZUxpc3QpCi17
Ci19Ci0KLUNTU01lZGlhUnVsZTo6Q1NTTWVkaWFSdWxlKFN0eWxlQmFzZSogcGFyZW50KQotICAg
IDogQ1NTUnVsZShwYXJlbnQpCi0gICAgLCBtX2xzdE1lZGlhKDApCi0gICAgLCBtX2xzdENTU1J1
bGVzKENTU1J1bGVMaXN0OjpjcmVhdGUoKSkKLQotewotfQotCi1DU1NNZWRpYVJ1bGU6OkNTU01l
ZGlhUnVsZShTdHlsZUJhc2UqIHBhcmVudCwgY29uc3QgU3RyaW5nICZtZWRpYSkKLSAgICA6IENT
U1J1bGUocGFyZW50KQotICAgICwgbV9sc3RNZWRpYShuZXcgTWVkaWFMaXN0KHRoaXMsIG1lZGlh
KSkKLSAgICAsIG1fbHN0Q1NTUnVsZXMoQ1NTUnVsZUxpc3Q6OmNyZWF0ZSgpKQorICAgICwgbV9s
c3RNZWRpYShtZWRpYSkKKyAgICAsIG1fbHN0Q1NTUnVsZXMocnVsZXMpCiB7CiB9CiAKSW5kZXg6
IFdlYkNvcmUvY3NzL0NTU01lZGlhUnVsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NT
U01lZGlhUnVsZS5oCShyZXZpc2lvbiAzNDU4NCkKKysrIFdlYkNvcmUvY3NzL0NTU01lZGlhUnVs
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDkgKzEsNyBAQAogLyoKLSAqIFRoaXMgZmlsZSBpcyBw
YXJ0IG9mIHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9yIEtERS4KLSAqCiAgKiAoQykgMTk5OS0y
MDAzIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAoQykgMjAwMi0yMDAzIERpcmsgTXVl
bGxlciAobXVlbGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDAyLCAyMDA2IEFwcGxl
IENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDYsIDIwMDggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBX
ZWluaWcgKHNhbUB3ZWJraXQub3JnKQogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTI2LDM5ICsyNCw0MiBAQAog
I2RlZmluZSBDU1NNZWRpYVJ1bGVfaAogCiAjaW5jbHVkZSAiQ1NTUnVsZS5oIgotI2luY2x1ZGUg
PHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlICJDU1NSdWxlTGlzdC5oIgorI2luY2x1ZGUgIk1lZGlh
TGlzdC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiIC8vIG5lZWRlZCBzbyBiaW5kaW5n
cyB3aWxsIGNvbXBpbGUKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDU1NSdWxlTGlz
dDsKIGNsYXNzIE1lZGlhTGlzdDsKIAotdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKLQogY2xh
c3MgQ1NTTWVkaWFSdWxlIDogcHVibGljIENTU1J1bGUgewogcHVibGljOgotICAgIENTU01lZGlh
UnVsZShTdHlsZUJhc2UqIHBhcmVudCk7Ci0gICAgQ1NTTWVkaWFSdWxlKFN0eWxlQmFzZSogcGFy
ZW50LCBjb25zdCBTdHJpbmcmIG1lZGlhKTsKLSAgICBDU1NNZWRpYVJ1bGUoU3R5bGVCYXNlKiBw
YXJlbnQsIE1lZGlhTGlzdCogbWVkaWFMaXN0LCBDU1NSdWxlTGlzdCogcnVsZUxpc3QpOworICAg
IHN0YXRpYyBQYXNzUmVmUHRyPENTU01lZGlhUnVsZT4gY3JlYXRlKENTU1N0eWxlU2hlZXQqIHBh
cmVudCwgUGFzc1JlZlB0cjxNZWRpYUxpc3Q+IG1lZGlhLCBQYXNzUmVmUHRyPENTU1J1bGVMaXN0
PiBydWxlcykKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ1NTTWVkaWFSdWxl
KHBhcmVudCwgbWVkaWEsIHJ1bGVzKSk7CisgICAgfQogICAgIHZpcnR1YWwgfkNTU01lZGlhUnVs
ZSgpOwogCi0gICAgdmlydHVhbCBib29sIGlzTWVkaWFSdWxlKCkgeyByZXR1cm4gdHJ1ZTsgfQot
CiAgICAgTWVkaWFMaXN0KiBtZWRpYSgpIGNvbnN0IHsgcmV0dXJuIG1fbHN0TWVkaWEuZ2V0KCk7
IH0KICAgICBDU1NSdWxlTGlzdCogY3NzUnVsZXMoKSB7IHJldHVybiBtX2xzdENTU1J1bGVzLmdl
dCgpOyB9CiAKICAgICB1bnNpZ25lZCBpbnNlcnRSdWxlKGNvbnN0IFN0cmluZyYgcnVsZSwgdW5z
aWduZWQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lkIGRlbGV0ZVJ1bGUodW5zaWdu
ZWQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmKTsKIAotICAgIC8vIEluaGVyaXRlZCBmcm9tIENTU1J1
bGUKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIHNob3J0IHR5cGUoKSBjb25zdCB7IHJldHVybiBNRURJ
QV9SVUxFOyB9Ci0KICAgICB2aXJ0dWFsIFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7CiAKICAgICAv
LyBOb3QgcGFydCBvZiB0aGUgQ1NTT00KICAgICB1bnNpZ25lZCBhcHBlbmQoQ1NTUnVsZSopOwog
Ci1wcm90ZWN0ZWQ6Citwcml2YXRlOgorICAgIENTU01lZGlhUnVsZShDU1NTdHlsZVNoZWV0KiBw
YXJlbnQsIFBhc3NSZWZQdHI8TWVkaWFMaXN0PiwgUGFzc1JlZlB0cjxDU1NSdWxlTGlzdD4pOwor
CisgICAgdmlydHVhbCBib29sIGlzTWVkaWFSdWxlKCkgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAg
Ly8gSW5oZXJpdGVkIGZyb20gQ1NTUnVsZQorICAgIHZpcnR1YWwgdW5zaWduZWQgc2hvcnQgdHlw
ZSgpIGNvbnN0IHsgcmV0dXJuIE1FRElBX1JVTEU7IH0KKwogICAgIFJlZlB0cjxNZWRpYUxpc3Q+
IG1fbHN0TWVkaWE7CiAgICAgUmVmUHRyPENTU1J1bGVMaXN0PiBtX2xzdENTU1J1bGVzOwogfTsK
SW5kZXg6IFdlYkNvcmUvY3NzL0NTU011dGFibGVTdHlsZURlY2xhcmF0aW9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5jcHAJKHJldmlz
aW9uIDM0NTg0KQorKysgV2ViQ29yZS9jc3MvQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02MDksNyArNjA5LDcgQEAgYm9vbCBDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbjo6c2V0UHJvcAogYm9vbCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6c2V0
UHJvcGVydHkoaW50IHByb3BlcnR5SUQsIGludCB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQsIGJvb2wg
bm90aWZ5Q2hhbmdlZCkKIHsKICAgICByZW1vdmVQcm9wZXJ0eShwcm9wZXJ0eUlEKTsKLSAgICBt
X3ZhbHVlcy5hcHBlbmQoQ1NTUHJvcGVydHkocHJvcGVydHlJRCwgbmV3IENTU1ByaW1pdGl2ZVZh
bHVlKHZhbHVlKSwgaW1wb3J0YW50KSk7CisgICAgbV92YWx1ZXMuYXBwZW5kKENTU1Byb3BlcnR5
KHByb3BlcnR5SUQsIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVJZGVudGlmaWVyKHZhbHVlKSwg
aW1wb3J0YW50KSk7CiAgICAgaWYgKG5vdGlmeUNoYW5nZWQpCiAgICAgICAgIHNldENoYW5nZWQo
KTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTYxOCw3ICs2MTgsNyBAQCBib29sIENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uOjpzZXRQcm9wCiB2b2lkIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9u
OjpzZXRTdHJpbmdQcm9wZXJ0eShpbnQgcHJvcGVydHlJZCwgY29uc3QgU3RyaW5nICZ2YWx1ZSwg
Q1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcyB0eXBlLCBib29sIGltcG9ydGFudCkKIHsKICAg
ICByZW1vdmVQcm9wZXJ0eShwcm9wZXJ0eUlkKTsKLSAgICBtX3ZhbHVlcy5hcHBlbmQoQ1NTUHJv
cGVydHkocHJvcGVydHlJZCwgbmV3IENTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlLCB0eXBlKSwgaW1w
b3J0YW50KSk7CisgICAgbV92YWx1ZXMuYXBwZW5kKENTU1Byb3BlcnR5KHByb3BlcnR5SWQsIENT
U1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUodmFsdWUsIHR5cGUpLCBpbXBvcnRhbnQpKTsKICAgICBz
ZXRDaGFuZ2VkKCk7CiB9CiAKSW5kZXg6IFdlYkNvcmUvY3NzL0NTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb24uaAkocmV2aXNpb24gMzQ1ODQpCisrKyBXZWJDb3JlL2Nzcy9DU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDggKzEsNiBAQAogLyoKLSAqIFRoaXMg
ZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9yIEtERS4KLSAqCiAgKiAo
QykgMTk5OS0yMDAzIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDQsIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNSwgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI2LDcgKzI0LDYgQEAKICNpbmNsdWRlICJDU1NTdHlsZURl
Y2xhcmF0aW9uLmgiCiAjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWUuaCIKICNpbmNsdWRlICJE
ZXByZWNhdGVkVmFsdWVMaXN0LmgiCi0jaW5jbHVkZSAiTm9kZS5oIgogI2luY2x1ZGUgIlBsYXRm
b3JtU3RyaW5nLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM2LDEwICszMywxOCBAQCBj
bGFzcyBOb2RlOwogCiBjbGFzcyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiA6IHB1YmxpYyBD
U1NTdHlsZURlY2xhcmF0aW9uIHsKIHB1YmxpYzoKLSAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbigpOwotICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKENTU1J1bGUqIHBhcmVudFJ1
bGUpOwotICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKENTU1J1bGUqIHBhcmVudFJ1bGUs
IGNvbnN0IERlcHJlY2F0ZWRWYWx1ZUxpc3Q8Q1NTUHJvcGVydHk+Jik7Ci0gICAgQ1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb24oQ1NTUnVsZSogcGFyZW50UnVsZSwgY29uc3QgQ1NTUHJvcGVydHkq
IGNvbnN0ICosIGludCBudW1Qcm9wZXJ0aWVzKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24pOworICAgIH0KKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gY3JlYXRlKENTU1J1bGUq
IHBhcmVudFJ1bGUsIGNvbnN0IENTU1Byb3BlcnR5KiBjb25zdCogcHJvcGVydGllcywgaW50IG51
bVByb3BlcnRpZXMpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uKHBhcmVudFJ1bGUsIHByb3BlcnRpZXMsIG51bVByb3BlcnRpZXMp
KTsKKyAgICB9CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b24+IGNyZWF0ZShjb25zdCBEZXByZWNhdGVkVmFsdWVMaXN0PENTU1Byb3BlcnR5PiYgcHJvcGVy
dGllcykKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb24oMCwgcHJvcGVydGllcykpOworICAgIH0KIAogICAgIENTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uJiBvcGVyYXRvcj0oY29uc3QgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24m
KTsKIApAQCAtNjEsNyArNjYsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBTdHJpbmcgcmVtb3Zl
UHJvcGVydHkoaW50IHByb3BlcnR5SUQsIEV4Y2VwdGlvbkNvZGUmKTsKIAogICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gY29weSgpIGNvbnN0OwotICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gbWFrZU11dGFi
bGUoKTsKIAogICAgIERlcHJlY2F0ZWRWYWx1ZUxpc3RDb25zdEl0ZXJhdG9yPENTU1Byb3BlcnR5
PiB2YWx1ZXNJdGVyYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLmJlZ2luKCk7IH0KIApA
QCAtMTAwLDcgKzEwNCwxNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIG1lcmdlKENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uKiwgYm9vbCBhcmdPdmVycmlkZXNPbkNvbmZsaWN0ID0gdHJ1ZSk7CiAK
K3Byb3RlY3RlZDoKKyAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbihDU1NSdWxlKiBwYXJl
bnRSdWxlKTsKKwogcHJpdmF0ZToKKyAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbigpOwor
ICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKENTU1J1bGUqIHBhcmVudFJ1bGUsIGNvbnN0
IERlcHJlY2F0ZWRWYWx1ZUxpc3Q8Q1NTUHJvcGVydHk+Jik7CisgICAgQ1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb24oQ1NTUnVsZSogcGFyZW50UnVsZSwgY29uc3QgQ1NTUHJvcGVydHkqIGNvbnN0
ICosIGludCBudW1Qcm9wZXJ0aWVzKTsKKworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbj4gbWFrZU11dGFibGUoKTsKKwogICAgIHZvaWQgc2V0Q2hhbmdl
ZCgpOwogCiAgICAgU3RyaW5nIGdldFNob3J0aGFuZFZhbHVlKGNvbnN0IGludCogcHJvcGVydGll
cywgaW50IG51bWJlcikgY29uc3Q7CkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NQYWdlUnVsZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTUGFnZVJ1bGUuY3BwCShyZXZpc2lvbiAzNDU4
NCkKKysrIFdlYkNvcmUvY3NzL0NTU1BhZ2VSdWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw5
ICsxLDcgQEAKLS8qKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERPTSBpbXBsZW1lbnRh
dGlvbiBmb3IgS0RFLgotICoKKy8qCiAgKiAoQykgMTk5OS0yMDAzIExhcnMgS25vbGwgKGtub2xs
QGtkZS5vcmcpCiAgKiAoQykgMjAwMi0yMDAzIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3Jn
KQotICogQ29weXJpZ2h0IChDKSAyMDAyLCAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDUsIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yOCw3ICsyNiw3IEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQ1NTUGFnZVJ1bGU6OkNTU1BhZ2VSdWxlKFN0eWxlQmFz
ZSogcGFyZW50KQorQ1NTUGFnZVJ1bGU6OkNTU1BhZ2VSdWxlKENTU1N0eWxlU2hlZXQqIHBhcmVu
dCkKICAgICA6IENTU1J1bGUocGFyZW50KQogewogfQpJbmRleDogV2ViQ29yZS9jc3MvQ1NTUGFn
ZVJ1bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NQYWdlUnVsZS5oCShyZXZpc2lv
biAzNDU4NCkKKysrIFdlYkNvcmUvY3NzL0NTU1BhZ2VSdWxlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsOSArMSw3IEBACiAvKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERPTSBpbXBsZW1l
bnRhdGlvbiBmb3IgS0RFLgotICoKICAqIChDKSAxOTk5LTIwMDMgTGFycyBLbm9sbCAoa25vbGxA
a2RlLm9yZykKICAqIChDKSAyMDAyLTIwMDMgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcp
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqIENv
cHlyaWdodCAoQykgMjAwMiwgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI1LDMyICsyMywzNSBAQAogI2RlZmluZSBDU1NQ
YWdlUnVsZV9oCiAKICNpbmNsdWRlICJDU1NSdWxlLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQ
dHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Y2xhc3MgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb247CiAKLXR5cGVkZWYgaW50IEV4Y2VwdGlv
bkNvZGU7Ci0KIGNsYXNzIENTU1BhZ2VSdWxlIDogcHVibGljIENTU1J1bGUgewogcHVibGljOgot
ICAgIENTU1BhZ2VSdWxlKFN0eWxlQmFzZSogcGFyZW50KTsKLSAgICB2aXJ0dWFsIH5DU1NQYWdl
UnVsZSgpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPENTU1BhZ2VSdWxlPiBjcmVhdGUoQ1NTU3R5
bGVTaGVldCogcGFyZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDU1NQ
YWdlUnVsZShwYXJlbnQpKTsKKyAgICB9CiAKLSAgICB2aXJ0dWFsIGJvb2wgaXNQYWdlUnVsZSgp
IHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIH5DU1NQYWdlUnVsZSgpOwogCiAgICAgU3Ry
aW5nIHNlbGVjdG9yVGV4dCgpIGNvbnN0OwogICAgIHZvaWQgc2V0U2VsZWN0b3JUZXh0KGNvbnN0
IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKIAogICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uKiBzdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGUuZ2V0KCk7IH0KIAorICAgIHZpcnR1
YWwgU3RyaW5nIGNzc1RleHQoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBDU1NQYWdlUnVsZShD
U1NTdHlsZVNoZWV0KiBwYXJlbnQpOworCiAgICAgLy8gSW5oZXJpdGVkIGZyb20gQ1NTUnVsZQog
ICAgIHZpcnR1YWwgdW5zaWduZWQgc2hvcnQgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIFBBR0VfUlVM
RTsgfQogCi0gICAgdmlydHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0OwotCi1wcm90ZWN0ZWQ6
CiAgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBtX3N0eWxlOwogfTsKIApJ
bmRleDogV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nz
cy9DU1NQYXJzZXIuY3BwCShyZXZpc2lvbiAzNDU4NCkKKysrIFdlYkNvcmUvY3NzL0NTU1BhcnNl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2NSw3ICsyNjUsNyBAQCBib29sIENTU1BhcnNlcjo6
cGFyc2VDb2xvcihSR0JBMzImIGNvbG9yCiAKICAgICAvLyBGaXJzdCB0cnkgY3JlYXRpbmcgYSBj
b2xvciBzcGVjaWZpZWQgYnkgbmFtZSBvciB0aGUgIiMiIHN5bnRheC4KICAgICBpZiAoIXBhcnNl
ci5wYXJzZUNvbG9yKHN0cmluZywgY29sb3IsIHN0cmljdCkpIHsKLSAgICAgICAgUmVmUHRyPENT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBkdW1teVN0eWxlRGVjbGFyYXRpb24obmV3IENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uKTsKKyAgICAgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uPiBkdW1teVN0eWxlRGVjbGFyYXRpb24gPSBDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbjo6Y3JlYXRlKCk7CiAKICAgICAgICAgLy8gTm93IHRyeSB0byBjcmVhdGUgYSBjb2xvciBm
cm9tIHRoZSByZ2IoKSBvciByZ2JhKCkgc3ludGF4LgogICAgICAgICBpZiAocGFyc2VyLnBhcnNl
Q29sb3IoZHVtbXlTdHlsZURlY2xhcmF0aW9uLmdldCgpLCBzdHJpbmcpKSB7CkBAIC01MDYsMTMg
KzUwNiwxMyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShpbnQgcHJvcElkLCBiCiAgICAg
aWYgKGlkID09IENTU1ZhbHVlSW5oZXJpdCkgewogICAgICAgICBpZiAobnVtICE9IDEpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGFkZFByb3BlcnR5KHByb3BJZCwgbmV3IENT
U0luaGVyaXRlZFZhbHVlKCksIGltcG9ydGFudCk7CisgICAgICAgIGFkZFByb3BlcnR5KHByb3BJ
ZCwgQ1NTSW5oZXJpdGVkVmFsdWU6OmNyZWF0ZSgpLCBpbXBvcnRhbnQpOwogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CiAgICAgZWxzZSBpZiAoaWQgPT0gQ1NTVmFsdWVJbml0aWFsKSB7CiAg
ICAgICAgIGlmIChudW0gIT0gMSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
YWRkUHJvcGVydHkocHJvcElkLCBuZXcgQ1NTSW5pdGlhbFZhbHVlKGZhbHNlKSwgaW1wb3J0YW50
KTsKKyAgICAgICAgYWRkUHJvcGVydHkocHJvcElkLCBDU1NJbml0aWFsVmFsdWU6OmNyZWF0ZUV4
cGxpY2l0KCksIGltcG9ydGFudCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAt
Nzg4LDcgKzc4OCw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKGludCBwcm9wSWQsIGIK
ICAgICAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gbGlzdDsKICAgICAgICAgd2hpbGUgKHZhbHVl
ICYmIHZhbHVlLT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKSB7CiAgICAgICAg
ICAgICBpZiAoIWxpc3QpCi0gICAgICAgICAgICAgICAgbGlzdCA9IG5ldyBDU1NWYWx1ZUxpc3Q7
IAorICAgICAgICAgICAgICAgIGxpc3QgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZUNvbW1hU2VwYXJh
dGVkKCk7IAogICAgICAgICAgICAgU3RyaW5nIHVyaSA9IHBhcnNlVVJMKHZhbHVlLT5zdHJpbmcp
OwogICAgICAgICAgICAgVmVjdG9yPGludD4gY29vcmRzOwogICAgICAgICAgICAgdmFsdWUgPSBt
X3ZhbHVlTGlzdC0+bmV4dCgpOwpAQCAtODE2LDkgKzgxNiw5IEBAIGJvb2wgQ1NTUGFyc2VyOjpw
YXJzZVZhbHVlKGludCBwcm9wSWQsIGIKICAgICAgICAgICAgICAgICBpZiAobGlzdC0+bGVuZ3Ro
KCkgIT0gMSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAg
fSBlbHNlIGlmICghbV9zdHJpY3QgJiYgdmFsdWUtPmlkID09IENTU1ZhbHVlSGFuZCkgLy8gTVNJ
RSA1IGNvbXBhdGliaWxpdHkgOi8KLSAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQobmV3IENT
U1ByaW1pdGl2ZVZhbHVlKENTU1ZhbHVlUG9pbnRlcikpOworICAgICAgICAgICAgICAgIGxpc3Qt
PmFwcGVuZChDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlSWRlbnRpZmllcihDU1NWYWx1ZVBvaW50
ZXIpKTsKICAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlICYmICgodmFsdWUtPmlkID49IENTU1Zh
bHVlQXV0byAmJiB2YWx1ZS0+aWQgPD0gQ1NTVmFsdWVBbGxTY3JvbGwpIHx8IHZhbHVlLT5pZCA9
PSBDU1NWYWx1ZUNvcHkgfHwgdmFsdWUtPmlkID09IENTU1ZhbHVlTm9uZSkpCi0gICAgICAgICAg
ICAgICAgbGlzdC0+YXBwZW5kKG5ldyBDU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZS0+aWQpKTsKKyAg
ICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUlkZW50
aWZpZXIodmFsdWUtPmlkKSk7CiAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwogICAg
ICAgICAgICAgcGFyc2VkVmFsdWUgPSBsaXN0LnJlbGVhc2UoKTsKICAgICAgICAgICAgIGJyZWFr
OwpAQCAtMTAzMCw3ICsxMDMwLDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoaW50IHBy
b3BJZCwgYgogICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVOb25lKSB7CiAgICAgICAgICAgICB2
YWxpZF9wcmltaXRpdmUgPSB0cnVlOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgUmVm
UHRyPENTU1ZhbHVlTGlzdD4gbGlzdChuZXcgQ1NTVmFsdWVMaXN0KTsKKyAgICAgICAgICAgIFJl
ZlB0cjxDU1NWYWx1ZUxpc3Q+IGxpc3QgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZUNvbW1hU2VwYXJh
dGVkKCk7CiAgICAgICAgICAgICBib29sIGlzX3ZhbGlkID0gdHJ1ZTsKICAgICAgICAgICAgIHdo
aWxlKGlzX3ZhbGlkICYmIHZhbHVlKSB7CiAgICAgICAgICAgICAgICAgc3dpdGNoICh2YWx1ZS0+
aWQpIHsKQEAgLTEwMzksNyArMTAzOSw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKGlu
dCBwcm9wSWQsIGIKICAgICAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlVW5kZXJsaW5lOgogICAg
ICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVPdmVybGluZToKICAgICAgICAgICAgICAgICBjYXNl
IENTU1ZhbHVlTGluZVRocm91Z2g6Ci0gICAgICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChu
ZXcgQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUtPmlkKSk7CisgICAgICAgICAgICAgICAgICAgIGxp
c3QtPmFwcGVuZChDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlSWRlbnRpZmllcih2YWx1ZS0+aWQp
KTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgZGVmYXVsdDoK
ICAgICAgICAgICAgICAgICAgICAgaXNfdmFsaWQgPSBmYWxzZTsKQEAgLTEwODIsMTMgKzEwODIs
MTMgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoaW50IHByb3BJZCwgYgogICAgICAgICBp
ZiAoaWQgPT0gQ1NTVmFsdWVOb25lKQogICAgICAgICAgICAgdmFsaWRfcHJpbWl0aXZlID0gdHJ1
ZTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiB2YWx1
ZXMobmV3IENTU1ZhbHVlTGlzdCgpKTsKKyAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+
IHZhbHVlcyA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlQ29tbWFTZXBhcmF0ZWQoKTsKICAgICAgICAg
ICAgIFZhbHVlKiB2YWw7CiAgICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHBhcnNlZFZhbHVl
OwogICAgICAgICAgICAgd2hpbGUgKCh2YWwgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpKSkgewog
ICAgICAgICAgICAgICAgIGlmICh2YWwtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19V
UkkpIHsKICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHZhbHVlID0gcGFyc2VVUkwodmFsLT5z
dHJpbmcpOwotICAgICAgICAgICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IG5ldyBDU1NQcmltaXRp
dmVWYWx1ZShLVVJMKG1fc3R5bGVTaGVldC0+YmFzZVVSTCgpLCB2YWx1ZSkuc3RyaW5nKCksCisg
ICAgICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0
ZShLVVJMKG1fc3R5bGVTaGVldC0+YmFzZVVSTCgpLCB2YWx1ZSkuc3RyaW5nKCksCiAgICAgICAg
ICAgICAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSk7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIGlmICghcGFyc2VkVmFsdWUpCkBAIC0xMTMzLDE5ICsx
MTMzLDE5IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKGludCBwcm9wSWQsIGIKICAgICAg
ICAgdmFsaWRfcHJpbWl0aXZlID0gdmFsaWRVbml0KHZhbHVlLCBGTGVuZ3RoLCBtX3N0cmljdCk7
CiAgICAgICAgIGlmICghdmFsaWRfcHJpbWl0aXZlKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNlZFZhbHVlMSA9IG5ldyBD
U1NQcmltaXRpdmVWYWx1ZSh2YWx1ZS0+ZlZhbHVlLCAoQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRU
eXBlcyl2YWx1ZS0+dW5pdCk7CisgICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFy
c2VkVmFsdWUxID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSh2YWx1ZS0+ZlZhbHVlLCAoQ1NT
UHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcyl2YWx1ZS0+dW5pdCk7CiAgICAgICAgIFJlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VkVmFsdWUyOwogICAgICAgICBpZiAobnVtID09IDIpIHsK
ICAgICAgICAgICAgIHZhbHVlID0gbV92YWx1ZUxpc3QtPm5leHQoKTsKICAgICAgICAgICAgIHZh
bGlkX3ByaW1pdGl2ZSA9IHZhbGlkVW5pdCh2YWx1ZSwgRkxlbmd0aCwgbV9zdHJpY3QpOwogICAg
ICAgICAgICAgaWYgKCF2YWxpZF9wcmltaXRpdmUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAgICAgcGFyc2VkVmFsdWUyID0gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKHZh
bHVlLT5mVmFsdWUsIChDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzKXZhbHVlLT51bml0KTsK
KyAgICAgICAgICAgIHBhcnNlZFZhbHVlMiA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUodmFs
dWUtPmZWYWx1ZSwgKENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMpdmFsdWUtPnVuaXQpOwog
ICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIHBhcnNlZFZhbHVlMiA9IHBhcnNlZFZhbHVlMTsK
ICAgICAgICAgCiAgICAgICAgIFJlZlB0cjxQYWlyPiBwYWlyID0gUGFpcjo6Y3JlYXRlKHBhcnNl
ZFZhbHVlMS5yZWxlYXNlKCksIHBhcnNlZFZhbHVlMi5yZWxlYXNlKCkpOwotICAgICAgICBSZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHZhbCA9IG5ldyBDU1NQcmltaXRpdmVWYWx1ZShwYWlyLnJl
bGVhc2UoKSk7CisgICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gdmFsID0gQ1NTUHJp
bWl0aXZlVmFsdWU6OmNyZWF0ZShwYWlyLnJlbGVhc2UoKSk7CiAgICAgICAgIGlmIChwcm9wSWQg
PT0gQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJSYWRpdXMpIHsKICAgICAgICAgICAgIGNvbnN0IGlu
dCBwcm9wZXJ0aWVzWzRdID0geyBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlclRvcFJpZ2h0UmFkaXVz
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5V2Vi
a2l0Qm9yZGVyVG9wTGVmdFJhZGl1cywKQEAgLTE1NjIsMTMgKzE1NjIsMTMgQEAgYm9vbCBDU1NQ
YXJzZXI6OnBhcnNlVmFsdWUoaW50IHByb3BJZCwgYgogCiAgICAgaWYgKHZhbGlkX3ByaW1pdGl2
ZSkgewogICAgICAgICBpZiAoaWQgIT0gMCkKLSAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gbmV3
IENTU1ByaW1pdGl2ZVZhbHVlKGlkKTsKKyAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gQ1NTUHJp
bWl0aXZlVmFsdWU6OmNyZWF0ZUlkZW50aWZpZXIoaWQpOwogICAgICAgICBlbHNlIGlmICh2YWx1
ZS0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORykKLSAgICAgICAgICAgIHBh
cnNlZFZhbHVlID0gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlLT5zdHJpbmcsIChDU1NQcmlt
aXRpdmVWYWx1ZTo6VW5pdFR5cGVzKSB2YWx1ZS0+dW5pdCk7CisgICAgICAgICAgICBwYXJzZWRW
YWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUodmFsdWUtPnN0cmluZywgKENTU1ByaW1p
dGl2ZVZhbHVlOjpVbml0VHlwZXMpIHZhbHVlLT51bml0KTsKICAgICAgICAgZWxzZSBpZiAodmFs
dWUtPnVuaXQgPj0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIgJiYgdmFsdWUtPnVuaXQg
PD0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19LSFopCi0gICAgICAgICAgICBwYXJzZWRWYWx1ZSA9
IG5ldyBDU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZS0+ZlZhbHVlLCAoQ1NTUHJpbWl0aXZlVmFsdWU6
OlVuaXRUeXBlcykgdmFsdWUtPnVuaXQpOworICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBDU1NQ
cmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHZhbHVlLT5mVmFsdWUsIChDU1NQcmltaXRpdmVWYWx1ZTo6
VW5pdFR5cGVzKSB2YWx1ZS0+dW5pdCk7CiAgICAgICAgIGVsc2UgaWYgKHZhbHVlLT51bml0ID49
IFZhbHVlOjpRX0VNUykKLSAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gbmV3IENTU1F1aXJrUHJp
bWl0aXZlVmFsdWUodmFsdWUtPmZWYWx1ZSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19FTVMpOwor
ICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBDU1NRdWlya1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUo
dmFsdWUtPmZWYWx1ZSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19FTVMpOwogICAgICAgICBtX3Zh
bHVlTGlzdC0+bmV4dCgpOwogICAgIH0KICAgICBpZiAocGFyc2VkVmFsdWUpIHsKQEAgLTE1ODcs
NyArMTU4Nyw3IEBAIHZvaWQgQ1NTUGFyc2VyOjphZGRGaWxsVmFsdWUoUmVmUHRyPENTU1YKICAg
ICAgICAgICAgIHN0YXRpY19jYXN0PENTU1ZhbHVlTGlzdCo+KGx2YWwuZ2V0KCkpLT5hcHBlbmQo
cnZhbCk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4g
b2xkbFZhbChsdmFsLnJlbGVhc2UoKSk7Ci0gICAgICAgICAgICBQYXNzUmVmUHRyPENTU1ZhbHVl
TGlzdD4gbGlzdChuZXcgQ1NTVmFsdWVMaXN0KCkpOworICAgICAgICAgICAgUGFzc1JlZlB0cjxD
U1NWYWx1ZUxpc3Q+IGxpc3QgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZUNvbW1hU2VwYXJhdGVkKCk7
CiAgICAgICAgICAgICBsaXN0LT5hcHBlbmQob2xkbFZhbCk7CiAgICAgICAgICAgICBsaXN0LT5h
cHBlbmQocnZhbCk7CiAgICAgICAgICAgICBsdmFsID0gbGlzdDsKQEAgLTE2MjQsOSArMTYyNCw5
IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUZpbGxTaG9ydGhhbmQoaW50IHAKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAgICAgICAgaWYgKCFwYXJzZWRQcm9w
ZXJ0eVtpXSAmJiBwcm9wZXJ0aWVzW2ldICE9IENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGFkZEZpbGxWYWx1ZSh2YWx1ZXNbaV0sIG5ldyBDU1NJbml0
aWFsVmFsdWUodHJ1ZSkpOworICAgICAgICAgICAgICAgICAgICBhZGRGaWxsVmFsdWUodmFsdWVz
W2ldLCBDU1NJbml0aWFsVmFsdWU6OmNyZWF0ZUltcGxpY2l0KCkpOwogICAgICAgICAgICAgICAg
ICAgICBpZiAocHJvcGVydGllc1tpXSA9PSBDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvbiB8
fCBwcm9wZXJ0aWVzW2ldID09IENTU1Byb3BlcnR5V2Via2l0TWFza1Bvc2l0aW9uKQotICAgICAg
ICAgICAgICAgICAgICAgICAgYWRkRmlsbFZhbHVlKHBvc2l0aW9uWVZhbHVlLCBuZXcgQ1NTSW5p
dGlhbFZhbHVlKHRydWUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZEZpbGxWYWx1ZShw
b3NpdGlvbllWYWx1ZSwgQ1NTSW5pdGlhbFZhbHVlOjpjcmVhdGVJbXBsaWNpdCgpKTsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgcGFyc2VkUHJvcGVydHlbaV0gPSBmYWxzZTsK
ICAgICAgICAgICAgIH0KQEAgLTE2NTgsOSArMTY1OCw5IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJz
ZUZpbGxTaG9ydGhhbmQoaW50IHAKICAgICAvLyBGaWxsIGluIGFueSByZW1haW5pbmcgcHJvcGVy
dGllcyB3aXRoIHRoZSBpbml0aWFsIHZhbHVlLgogICAgIGZvciAoaSA9IDA7IGkgPCBudW1Qcm9w
ZXJ0aWVzOyArK2kpIHsKICAgICAgICAgaWYgKCFwYXJzZWRQcm9wZXJ0eVtpXSkgewotICAgICAg
ICAgICAgYWRkRmlsbFZhbHVlKHZhbHVlc1tpXSwgbmV3IENTU0luaXRpYWxWYWx1ZSh0cnVlKSk7
CisgICAgICAgICAgICBhZGRGaWxsVmFsdWUodmFsdWVzW2ldLCBDU1NJbml0aWFsVmFsdWU6OmNy
ZWF0ZUltcGxpY2l0KCkpOwogICAgICAgICAgICAgaWYgKHByb3BlcnRpZXNbaV0gPT0gQ1NTUHJv
cGVydHlCYWNrZ3JvdW5kUG9zaXRpb24gfHwgcHJvcGVydGllc1tpXSA9PSBDU1NQcm9wZXJ0eVdl
YmtpdE1hc2tQb3NpdGlvbikKLSAgICAgICAgICAgICAgICBhZGRGaWxsVmFsdWUocG9zaXRpb25Z
VmFsdWUsIG5ldyBDU1NJbml0aWFsVmFsdWUodHJ1ZSkpOworICAgICAgICAgICAgICAgIGFkZEZp
bGxWYWx1ZShwb3NpdGlvbllWYWx1ZSwgQ1NTSW5pdGlhbFZhbHVlOjpjcmVhdGVJbXBsaWNpdCgp
KTsKICAgICAgICAgfQogICAgIH0KICAgICAKQEAgLTE2ODgsNyArMTY4OCw3IEBAIHZvaWQgQ1NT
UGFyc2VyOjphZGRUcmFuc2l0aW9uVmFsdWUoUmVmUHQKICAgICAgICAgICAgIHN0YXRpY19jYXN0
PENTU1ZhbHVlTGlzdCo+KGx2YWwuZ2V0KCkpLT5hcHBlbmQocnZhbCk7CiAgICAgICAgIGVsc2Ug
ewogICAgICAgICAgICAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gb2xkVmFsKGx2YWwucmVsZWFzZSgp
KTsKLSAgICAgICAgICAgIFBhc3NSZWZQdHI8Q1NTVmFsdWVMaXN0PiBsaXN0KG5ldyBDU1NWYWx1
ZUxpc3QoKSk7CisgICAgICAgICAgICBQYXNzUmVmUHRyPENTU1ZhbHVlTGlzdD4gbGlzdCA9IENT
U1ZhbHVlTGlzdDo6Y3JlYXRlQ29tbWFTZXBhcmF0ZWQoKTsKICAgICAgICAgICAgIGxpc3QtPmFw
cGVuZChvbGRWYWwpOwogICAgICAgICAgICAgbGlzdC0+YXBwZW5kKHJ2YWwpOwogICAgICAgICAg
ICAgbHZhbCA9IGxpc3Q7CkBAIC0xNzE3LDcgKzE3MTcsNyBAQCBib29sIENTU1BhcnNlcjo6cGFy
c2VUcmFuc2l0aW9uU2hvcnRoYW5kCiAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwog
ICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG51bVByb3BlcnRpZXM7ICsraSkgewogICAgICAg
ICAgICAgICAgIGlmICghcGFyc2VkUHJvcGVydHlbaV0pCi0gICAgICAgICAgICAgICAgICAgIGFk
ZFRyYW5zaXRpb25WYWx1ZSh2YWx1ZXNbaV0sIG5ldyBDU1NJbml0aWFsVmFsdWUodHJ1ZSkpOwor
ICAgICAgICAgICAgICAgICAgICBhZGRUcmFuc2l0aW9uVmFsdWUodmFsdWVzW2ldLCBDU1NJbml0
aWFsVmFsdWU6OmNyZWF0ZUltcGxpY2l0KCkpOwogICAgICAgICAgICAgICAgIHBhcnNlZFByb3Bl
cnR5W2ldID0gZmFsc2U7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoIW1fdmFsdWVM
aXN0LT5jdXJyZW50KCkpCkBAIC0xNzQ0LDcgKzE3NDQsNyBAQCBib29sIENTU1BhcnNlcjo6cGFy
c2VUcmFuc2l0aW9uU2hvcnRoYW5kCiAgICAgLy8gRmlsbCBpbiBhbnkgcmVtYWluaW5nIHByb3Bl
cnRpZXMgd2l0aCB0aGUgaW5pdGlhbCB2YWx1ZS4KICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtUHJv
cGVydGllczsgKytpKSB7CiAgICAgICAgIGlmICghcGFyc2VkUHJvcGVydHlbaV0pCi0gICAgICAg
ICAgICBhZGRUcmFuc2l0aW9uVmFsdWUodmFsdWVzW2ldLCBuZXcgQ1NTSW5pdGlhbFZhbHVlKHRy
dWUpKTsKKyAgICAgICAgICAgIGFkZFRyYW5zaXRpb25WYWx1ZSh2YWx1ZXNbaV0sIENTU0luaXRp
YWxWYWx1ZTo6Y3JlYXRlSW1wbGljaXQoKSk7CiAgICAgfQogICAgIAogICAgIC8vIE5vdyBhZGQg
YWxsIG9mIHRoZSBwcm9wZXJ0aWVzIHdlIGZvdW5kLgpAQCAtMTc4NSw3ICsxNzg1LDcgQEAgYm9v
bCBDU1NQYXJzZXI6OnBhcnNlU2hvcnRoYW5kKGludCBwcm9wSQogICAgIG1faW1wbGljaXRTaG9y
dGhhbmQgPSB0cnVlOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtUHJvcGVydGllczsgKytp
KSB7CiAgICAgICAgIGlmICghZm5kW2ldKQotICAgICAgICAgICAgYWRkUHJvcGVydHkocHJvcGVy
dGllc1tpXSwgbmV3IENTU0luaXRpYWxWYWx1ZSh0cnVlKSwgaW1wb3J0YW50KTsKKyAgICAgICAg
ICAgIGFkZFByb3BlcnR5KHByb3BlcnRpZXNbaV0sIENTU0luaXRpYWxWYWx1ZTo6Y3JlYXRlSW1w
bGljaXQoKSwgaW1wb3J0YW50KTsKICAgICB9CiAgICAgbV9pbXBsaWNpdFNob3J0aGFuZCA9IGZh
bHNlOwogCkBAIC0xODU4LDcgKzE4NTgsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2U0VmFsdWVz
KGludCBwcm9wSWQsCiAvLyBbIDxzdHJpbmc+IHwgYXR0cihYKSB8IG9wZW4tcXVvdGUgfCBjbG9z
ZS1xdW90ZSB8IG5vLW9wZW4tcXVvdGUgfCBuby1jbG9zZS1xdW90ZSBdKyB8IGluaGVyaXQKIGJv
b2wgQ1NTUGFyc2VyOjpwYXJzZUNvbnRlbnQoaW50IHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiB7
Ci0gICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gdmFsdWVzID0gbmV3IENTU1ZhbHVlTGlzdDsKKyAg
ICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiB2YWx1ZXMgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZUNvbW1h
U2VwYXJhdGVkKCk7CiAKICAgICB3aGlsZSAoVmFsdWUqIHZhbCA9IG1fdmFsdWVMaXN0LT5jdXJy
ZW50KCkpIHsKICAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiBwYXJzZWRWYWx1ZTsKQEAgLTE4Nzgs
NyArMTg3OCw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUNvbnRlbnQoaW50IHByb3BJZCwKICAg
ICAgICAgICAgICAgICBTdHJpbmcgYXR0ck5hbWUgPSBhLT5zdHJpbmc7CiAgICAgICAgICAgICAg
ICAgaWYgKGRvY3VtZW50KCktPmlzSFRNTERvY3VtZW50KCkpCiAgICAgICAgICAgICAgICAgICAg
IGF0dHJOYW1lID0gYXR0ck5hbWUubG93ZXIoKTsKLSAgICAgICAgICAgICAgICBwYXJzZWRWYWx1
ZSA9IG5ldyBDU1NQcmltaXRpdmVWYWx1ZShhdHRyTmFtZSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19BVFRSKTsKKyAgICAgICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVl
OjpjcmVhdGUoYXR0ck5hbWUsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfQVRUUik7CiAgICAgICAg
ICAgICB9IGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHZhbC0+ZnVuY3Rpb24tPm5hbWUsICJj
b3VudGVyKCIpKSB7CiAgICAgICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBwYXJzZUNvdW50ZXJD
b250ZW50KGFyZ3MsIGZhbHNlKTsKICAgICAgICAgICAgICAgICBpZiAoIXBhcnNlZFZhbHVlKSBy
ZXR1cm4gZmFsc2U7CkBAIC0xOTAxLDcgKzE5MDEsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VD
b250ZW50KGludCBwcm9wSWQsCiAgICAgICAgICAgICAvLyBuby1jbG9zZS1xdW90ZQogICAgICAg
ICAgICAgLy8gRklYTUU6IFRoZXNlIGFyZSBub3QgeWV0IGltcGxlbWVudGVkIChodHRwOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NTAzKS4KICAgICAgICAgfSBlbHNlIGlmICh2
YWwtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpIHsKLSAgICAgICAgICAg
IHBhcnNlZFZhbHVlID0gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKHZhbC0+c3RyaW5nLCBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX1NUUklORyk7CisgICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IENTU1By
aW1pdGl2ZVZhbHVlOjpjcmVhdGUodmFsLT5zdHJpbmcsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
U1RSSU5HKTsKICAgICAgICAgfQogICAgICAgICBpZiAoIXBhcnNlZFZhbHVlKQogICAgICAgICAg
ICAgYnJlYWs7CkBAIC0xOTIzLDcgKzE5MjMsNyBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQ
YXJzZXI6OnBhcnNlQmFjCiAgICAgaW50IGlkID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKS0+aWQ7
CiAgICAgaWYgKGlkID09IENTU1ZhbHVlV2Via2l0VGV4dCB8fCAoaWQgPj0gQ1NTVmFsdWVBcXVh
ICYmIGlkIDw9IENTU1ZhbHVlV2luZG93dGV4dCkgfHwgaWQgPT0gQ1NTVmFsdWVNZW51IHx8IGlk
ID09IENTU1ZhbHVlQ3VycmVudGNvbG9yIHx8CiAgICAgICAgIChpZCA+PSBDU1NWYWx1ZUdyZXkg
JiYgaWQgPCBDU1NWYWx1ZVdlYmtpdFRleHQgJiYgIW1fc3RyaWN0KSkKLSAgICAgICByZXR1cm4g
bmV3IENTU1ByaW1pdGl2ZVZhbHVlKGlkKTsKKyAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFs
dWU6OmNyZWF0ZUlkZW50aWZpZXIoaWQpOwogICAgIHJldHVybiBwYXJzZUNvbG9yKCk7CiB9CiAK
QEAgLTE5NzAsMTAgKzE5NzAsMTAgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpw
YXJzZUZpbAogICAgICAgICBlbHNlIGlmIChpZCA9PSBDU1NWYWx1ZUNlbnRlcikKICAgICAgICAg
ICAgIC8vIENlbnRlciBpcyBhbWJpZ3VvdXMsIHNvIHdlJ3JlIG5vdCBzdXJlIHdoaWNoIHBvc2l0
aW9uIHdlJ3ZlIGZvdW5kIHlldCwgYW4geCBvciBhIHkuCiAgICAgICAgICAgICBwZXJjZW50ID0g
NTA7Ci0gICAgICAgIHJldHVybiBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUocGVyY2VudCwgQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKTsKKyAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2
ZVZhbHVlOjpjcmVhdGUocGVyY2VudCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdF
KTsKICAgICB9CiAgICAgaWYgKHZhbGlkVW5pdChtX3ZhbHVlTGlzdC0+Y3VycmVudCgpLCBGUGVy
Y2VudHxGTGVuZ3RoLCBtX3N0cmljdCkpCi0gICAgICAgIHJldHVybiBuZXcgQ1NTUHJpbWl0aXZl
VmFsdWUobV92YWx1ZUxpc3QtPmN1cnJlbnQoKS0+ZlZhbHVlLAorICAgICAgICByZXR1cm4gQ1NT
UHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShtX3ZhbHVlTGlzdC0+Y3VycmVudCgpLT5mVmFsdWUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChDU1NQcmltaXRpdmVWYWx1
ZTo6VW5pdFR5cGVzKW1fdmFsdWVMaXN0LT5jdXJyZW50KCktPnVuaXQpOwogICAgICAgICAgICAg
ICAgIAogICAgIHJldHVybiAwOwpAQCAtMjAxNiw3ICsyMDE2LDcgQEAgdm9pZCBDU1NQYXJzZXI6
OnBhcnNlRmlsbFBvc2l0aW9uKFJlZlB0cgogICAgICAgICAvLyBpcyBzaW1wbHkgNTAlLiAgVGhp
cyBpcyBvdXIgZGVmYXVsdC4KICAgICAgICAgLy8gRm9yIGtleXdvcmRzLCB0aGUga2V5d29yZCB3
YXMgZWl0aGVyIGFuIHgta2V5d29yZCAobGVmdC9yaWdodCksIGEgeS1rZXl3b3JkICh0b3AvYm90
dG9tKSwgb3IgYW4gYW1iaWd1b3VzIGtleXdvcmQgKGNlbnRlcikuCiAgICAgICAgIC8vIEZvciBs
ZWZ0L3JpZ2h0L2NlbnRlciwgdGhlIGRlZmF1bHQgb2YgNTAlIGluIHRoZSB5IGlzIHN0aWxsIGNv
cnJlY3QuCi0gICAgICAgIHZhbHVlMiA9IG5ldyBDU1NQcmltaXRpdmVWYWx1ZSg1MCwgQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKTsKKyAgICAgICAgdmFsdWUyID0gQ1NTUHJpbWl0
aXZlVmFsdWU6OmNyZWF0ZSg1MCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKTsK
IAogICAgIGlmICh2YWx1ZTFJc1kgfHwgdmFsdWUySXNYKQogICAgICAgICB2YWx1ZTEuc3dhcCh2
YWx1ZTIpOwpAQCAtMjAyNSwzMSArMjAyNSwyOCBAQCB2b2lkIENTU1BhcnNlcjo6cGFyc2VGaWxs
UG9zaXRpb24oUmVmUHRyCiBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlRmls
bFNpemUoKQogewogICAgIFZhbHVlKiB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7Ci0g
ICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHBhcnNlZFZhbHVlMTsKKyAgICBSZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+IHBhcnNlZFZhbHVlMTsKICAgICAKICAgICBpZiAodmFsdWUtPmlkID09IENTU1Zh
bHVlQXV0bykKLSAgICAgICAgcGFyc2VkVmFsdWUxID0gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKDAs
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVU5LTk9XTik7CisgICAgICAgIHBhcnNlZFZhbHVlMSA9
IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoMCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VTktO
T1dOKTsKICAgICBlbHNlIHsKICAgICAgICAgaWYgKCF2YWxpZFVuaXQodmFsdWUsIEZMZW5ndGh8
RlBlcmNlbnQsIG1fc3RyaWN0KSkKICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBwYXJz
ZWRWYWx1ZTEgPSBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUtPmZWYWx1ZSwgKENTU1ByaW1p
dGl2ZVZhbHVlOjpVbml0VHlwZXMpdmFsdWUtPnVuaXQpOworICAgICAgICBwYXJzZWRWYWx1ZTEg
PSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHZhbHVlLT5mVmFsdWUsIChDU1NQcmltaXRpdmVW
YWx1ZTo6VW5pdFR5cGVzKXZhbHVlLT51bml0KTsKICAgICB9CiAgICAgCi0gICAgQ1NTUHJpbWl0
aXZlVmFsdWUqIHBhcnNlZFZhbHVlMiA9IHBhcnNlZFZhbHVlMTsKKyAgICBSZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+IHBhcnNlZFZhbHVlMiA9IHBhcnNlZFZhbHVlMTsKICAgICBpZiAoKHZhbHVl
ID0gbV92YWx1ZUxpc3QtPm5leHQoKSkpIHsKICAgICAgICAgaWYgKHZhbHVlLT5pZCA9PSBDU1NW
YWx1ZUF1dG8pCi0gICAgICAgICAgICBwYXJzZWRWYWx1ZTIgPSBuZXcgQ1NTUHJpbWl0aXZlVmFs
dWUoMCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VTktOT1dOKTsKKyAgICAgICAgICAgIHBhcnNl
ZFZhbHVlMiA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoMCwgQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19VTktOT1dOKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBpZiAoIXZhbGlkVW5p
dCh2YWx1ZSwgRkxlbmd0aHxGUGVyY2VudCwgbV9zdHJpY3QpKSB7Ci0gICAgICAgICAgICAgICAg
ZGVsZXRlIHBhcnNlZFZhbHVlMTsKKyAgICAgICAgICAgIGlmICghdmFsaWRVbml0KHZhbHVlLCBG
TGVuZ3RofEZQZXJjZW50LCBtX3N0cmljdCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBwYXJzZWRWYWx1ZTIgPSBuZXcgQ1NTUHJpbWl0aXZl
VmFsdWUodmFsdWUtPmZWYWx1ZSwgKENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMpdmFsdWUt
PnVuaXQpOworICAgICAgICAgICAgcGFyc2VkVmFsdWUyID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNy
ZWF0ZSh2YWx1ZS0+ZlZhbHVlLCAoQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcyl2YWx1ZS0+
dW5pdCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgUmVmUHRyPFBhaXI+IHBhaXIgPSBQ
YWlyOjpjcmVhdGUocGFyc2VkVmFsdWUxLCBwYXJzZWRWYWx1ZTIpOwotICAgIHJldHVybiBuZXcg
Q1NTUHJpbWl0aXZlVmFsdWUocGFpci5yZWxlYXNlKCkpOworICAgIHJldHVybiBDU1NQcmltaXRp
dmVWYWx1ZTo6Y3JlYXRlKFBhaXI6OmNyZWF0ZShwYXJzZWRWYWx1ZTEucmVsZWFzZSgpLCBwYXJz
ZWRWYWx1ZTIucmVsZWFzZSgpKSk7CiB9CiAKIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUZpbGxQcm9w
ZXJ0eShpbnQgcHJvcElkLCBpbnQmIHByb3BJZDEsIGludCYgcHJvcElkMiwgCkBAIC0yMDkzLDcg
KzIwOTAsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VGaWxsUHJvcGVydHkoaW50IHByCiAgICAg
ICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRBdHRhY2htZW50OgogICAgICAg
ICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrQXR0YWNobWVudDoKICAgICAgICAg
ICAgICAgICAgICAgaWYgKHZhbC0+aWQgPT0gQ1NTVmFsdWVTY3JvbGwgfHwgdmFsLT5pZCA9PSBD
U1NWYWx1ZUZpeGVkKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjdXJyVmFsdWUgPSBuZXcg
Q1NTUHJpbWl0aXZlVmFsdWUodmFsLT5pZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBjdXJy
VmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlSWRlbnRpZmllcih2YWwtPmlkKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CiAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0yMTA3LDcgKzIxMDQsNyBA
QCBib29sIENTU1BhcnNlcjo6cGFyc2VGaWxsUHJvcGVydHkoaW50IHByCiAgICAgICAgICAgICAg
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tDbGlwOgogICAgICAgICAgICAgICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRNYXNrT3JpZ2luOgogICAgICAgICAgICAgICAgICAgICBpZiAodmFs
LT5pZCA9PSBDU1NWYWx1ZUJvcmRlciB8fCB2YWwtPmlkID09IENTU1ZhbHVlUGFkZGluZyB8fCB2
YWwtPmlkID09IENTU1ZhbHVlQ29udGVudCB8fCB2YWwtPmlkID09IENTU1ZhbHVlVGV4dCkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgY3VyclZhbHVlID0gbmV3IENTU1ByaW1pdGl2ZVZhbHVl
KHZhbC0+aWQpOworICAgICAgICAgICAgICAgICAgICAgICAgY3VyclZhbHVlID0gQ1NTUHJpbWl0
aXZlVmFsdWU6OmNyZWF0ZUlkZW50aWZpZXIodmFsLT5pZCk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjEzNSwxNCArMjEzMiwxNCBAQCBib29sIENTU1BhcnNl
cjo6cGFyc2VGaWxsUHJvcGVydHkoaW50IHByCiAgICAgICAgICAgICAgICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdEJhY2tncm91bmRDb21wb3NpdGU6CiAgICAgICAgICAgICAgICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdE1hc2tDb21wb3NpdGU6CiAgICAgICAgICAgICAgICAgICAgIGlmICgodmFs
LT5pZCA+PSBDU1NWYWx1ZUNsZWFyICYmIHZhbC0+aWQgPD0gQ1NTVmFsdWVQbHVzTGlnaHRlcikg
fHwgdmFsLT5pZCA9PSBDU1NWYWx1ZUhpZ2hsaWdodCkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgY3VyclZhbHVlID0gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKHZhbC0+aWQpOworICAgICAgICAg
ICAgICAgICAgICAgICAgY3VyclZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUlkZW50
aWZpZXIodmFsLT5pZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4
dCgpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUmVwZWF0OgogICAgICAg
ICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrUmVwZWF0OgogICAgICAgICAgICAg
ICAgICAgICBpZiAodmFsLT5pZCA+PSBDU1NWYWx1ZVJlcGVhdCAmJiB2YWwtPmlkIDw9IENTU1Zh
bHVlTm9SZXBlYXQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJWYWx1ZSA9IG5ldyBD
U1NQcmltaXRpdmVWYWx1ZSh2YWwtPmlkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJW
YWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVJZGVudGlmaWVyKHZhbC0+aWQpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTIxNTcsMTIgKzIxNTQsMTIg
QEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlRmlsbFByb3BlcnR5KGludCBwcgogICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKHZhbHVlICYm
ICF2YWx1ZXMpIHsKLSAgICAgICAgICAgICAgICB2YWx1ZXMgPSBuZXcgQ1NTVmFsdWVMaXN0KCk7
CisgICAgICAgICAgICAgICAgdmFsdWVzID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVDb21tYVNlcGFy
YXRlZCgpOwogICAgICAgICAgICAgICAgIHZhbHVlcy0+YXBwZW5kKHZhbHVlLnJlbGVhc2UoKSk7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmICh2YWx1ZTIgJiYg
IXZhbHVlczIpIHsKLSAgICAgICAgICAgICAgICB2YWx1ZXMyID0gbmV3IENTU1ZhbHVlTGlzdCgp
OworICAgICAgICAgICAgICAgIHZhbHVlczIgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZUNvbW1hU2Vw
YXJhdGVkKCk7CiAgICAgICAgICAgICAgICAgdmFsdWVzMi0+YXBwZW5kKHZhbHVlMi5yZWxlYXNl
KCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC0yMjAzLDcgKzIyMDAsNyBAQCBQ
YXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlVHJhCiB7CiAgICAgVmFsdWUqIHZh
bHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKICAgICBpZiAodmFsaWRVbml0KHZhbHVlLCBG
VGltZSwgbV9zdHJpY3QpKQotICAgICAgICByZXR1cm4gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKHZh
bHVlLT5mVmFsdWUsIChDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzKXZhbHVlLT51bml0KTsK
KyAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUodmFsdWUtPmZWYWx1ZSwg
KENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMpdmFsdWUtPnVuaXQpOwogICAgIHJldHVybiAw
OwogfQogCkBAIC0yMjExLDkgKzIyMDgsOSBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJz
ZXI6OnBhcnNlVHJhCiB7CiAgICAgVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQo
KTsKICAgICBpZiAodmFsdWUtPmlkID09IENTU1ZhbHVlSW5maW5pdGUpCi0gICAgICAgIHJldHVy
biBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUtPmlkKTsKKyAgICAgICAgcmV0dXJuIENTU1By
aW1pdGl2ZVZhbHVlOjpjcmVhdGVJZGVudGlmaWVyKHZhbHVlLT5pZCk7CiAgICAgaWYgKHZhbGlk
VW5pdCh2YWx1ZSwgRkludGVnZXJ8Rk5vbk5lZywgbV9zdHJpY3QpKQotICAgICAgICByZXR1cm4g
bmV3IENTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlLT5mVmFsdWUsIChDU1NQcmltaXRpdmVWYWx1ZTo6
VW5pdFR5cGVzKXZhbHVlLT51bml0KTsKKyAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVl
OjpjcmVhdGUodmFsdWUtPmZWYWx1ZSwgKENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMpdmFs
dWUtPnVuaXQpOwogICAgIHJldHVybiAwOwogfQogCkBAIC0yMjM5LDcgKzIyMzYsNyBAQCBQYXNz
UmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlVHJhCiB7CiAgICAgVmFsdWUqIHZhbHVl
ID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKICAgICBpZiAodmFsdWUtPmlkID09IENTU1ZhbHVl
RWFzZSB8fCB2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVMaW5lYXIgfHwgdmFsdWUtPmlkID09IENTU1Zh
bHVlRWFzZUluIHx8IHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUVhc2VPdXQgfHwgdmFsdWUtPmlkID09
IENTU1ZhbHVlRWFzZUluT3V0KQotICAgICAgICByZXR1cm4gbmV3IENTU1ByaW1pdGl2ZVZhbHVl
KHZhbHVlLT5pZCk7CisgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlSWRl
bnRpZmllcih2YWx1ZS0+aWQpOwogICAgIAogICAgIC8vIFdlIG11c3QgYmUgYSBmdW5jdGlvbi4K
ICAgICBpZiAodmFsdWUtPnVuaXQgIT0gVmFsdWU6OkZ1bmN0aW9uKQpAQCAtMjI2Miw3ICsyMjU5
LDcgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZVRyYQogICAgIGlmICgh
cGFyc2VUaW1pbmdGdW5jdGlvblZhbHVlKGFyZ3MsIHkyKSkKICAgICAgICAgcmV0dXJuIDA7CiAK
LSAgICByZXR1cm4gbmV3IENTU1RpbWluZ0Z1bmN0aW9uVmFsdWUoeDEsIHkxLCB4MiwgeTIpOwor
ICAgIHJldHVybiBDU1NUaW1pbmdGdW5jdGlvblZhbHVlOjpjcmVhdGUoeDEsIHkxLCB4MiwgeTIp
OwogfQogCiBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlVHJhbnNpdGlvblBy
b3BlcnR5KCkKQEAgLTIyNzIsMTEgKzIyNjksMTEgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NT
UGFyc2VyOjpwYXJzZVRyYQogICAgICAgICByZXR1cm4gMDsKICAgICBpbnQgcmVzdWx0ID0gY3Nz
UHJvcGVydHlJRCh2YWx1ZS0+c3RyaW5nKTsKICAgICBpZiAocmVzdWx0KQotICAgICAgICByZXR1
cm4gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKHJlc3VsdCk7CisgICAgICAgIHJldHVybiBDU1NQcmlt
aXRpdmVWYWx1ZTo6Y3JlYXRlSWRlbnRpZmllcihyZXN1bHQpOwogICAgIGlmIChlcXVhbElnbm9y
aW5nQ2FzZSh2YWx1ZS0+c3RyaW5nLCAiYWxsIikpCi0gICAgICAgIHJldHVybiBuZXcgQ1NTUHJp
bWl0aXZlVmFsdWUoY0FuaW1hdGVBbGwpOworICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFs
dWU6OmNyZWF0ZUlkZW50aWZpZXIoY0FuaW1hdGVBbGwpOyAvLyBGSVhNRTogV2h5IG5vdCB1c2Ug
Q1NTVmFsdWVBbGwgaW5zdGVhZD8KICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UodmFsdWUtPnN0
cmluZywgIm5vbmUiKSkKLSAgICAgICAgcmV0dXJuIG5ldyBDU1NQcmltaXRpdmVWYWx1ZShjQW5p
bWF0ZU5vbmUpOworICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUlkZW50
aWZpZXIoY0FuaW1hdGVOb25lKTsgLy8gRklYTUU6IFdoeSBub3QgdXNlIENTU1ZhbHVlTm9uZSBp
bnN0ZWFkPwogICAgIHJldHVybiAwOwogfQogCkBAIC0yMzI1LDcgKzIzMjIsNyBAQCBib29sIENT
U1BhcnNlcjo6cGFyc2VUcmFuc2l0aW9uUHJvcGVydHkoCiAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAodmFsdWUgJiYgIXZhbHVlcykg
ewotICAgICAgICAgICAgICAgIHZhbHVlcyA9IG5ldyBDU1NWYWx1ZUxpc3QoKTsKKyAgICAgICAg
ICAgICAgICB2YWx1ZXMgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZUNvbW1hU2VwYXJhdGVkKCk7CiAg
ICAgICAgICAgICAgICAgdmFsdWVzLT5hcHBlbmQodmFsdWUucmVsZWFzZSgpKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIApAQCAtMjM3OSw3ICsyMzc2LDcgQEAgYm9vbCBDU1NQYXJzZXI6
OnBhcnNlRGFzaGJvYXJkUmVnaW9ucyhpbgogICAgIGlmICh2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVO
b25lKSB7CiAgICAgICAgIGlmIChtX3ZhbHVlTGlzdC0+bmV4dCgpKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIG5ldyBDU1NQcmltaXRpdmVW
YWx1ZSh2YWx1ZS0+aWQpLCBpbXBvcnRhbnQpOworICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQs
IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVJZGVudGlmaWVyKHZhbHVlLT5pZCksIGltcG9ydGFu
dCk7CiAgICAgICAgIHJldHVybiB2YWxpZDsKICAgICB9CiAgICAgICAgIApAQCAtMjQ0OSwxNCAr
MjQ0NiwxMyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VEYXNoYm9hcmRSZWdpb25zKGluCiAKICAg
ICAgICAgaWYgKG51bUFyZ3MgPT0gREFTSEJPQVJEX1JFR0lPTl9TSE9SVF9OVU1fUEFSQU1FVEVS
UyB8fCBudW1BcmdzID09IChEQVNIQk9BUkRfUkVHSU9OX1NIT1JUX05VTV9QQVJBTUVURVJTKjIt
MSkpIHsKICAgICAgICAgICAgIC8vIFRoaXMgb3JpZ2luYWxseSB1c2VkIENTU1ZhbHVlSW52YWxp
ZCBieSBhY2NpZGVudC4gSXQgbWlnaHQgYmUgbW9yZSBsb2dpY2FsIHRvIHVzZSBzb21ldGhpbmcg
ZWxzZS4KLSAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlICphbW91bnQgPSBuZXcgQ1NTUHJp
bWl0aXZlVmFsdWUoQ1NTVmFsdWVJbnZhbGlkKTsKKyAgICAgICAgICAgIFJlZlB0cjxDU1NQcmlt
aXRpdmVWYWx1ZT4gYW1vdW50ID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUlkZW50aWZpZXIo
Q1NTVmFsdWVJbnZhbGlkKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIHJlZ2lvbi0+
c2V0VG9wKGFtb3VudCk7CiAgICAgICAgICAgICByZWdpb24tPnNldFJpZ2h0KGFtb3VudCk7CiAg
ICAgICAgICAgICByZWdpb24tPnNldEJvdHRvbShhbW91bnQpOwogICAgICAgICAgICAgcmVnaW9u
LT5zZXRMZWZ0KGFtb3VudCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7CisgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICAvLyBOZXh0IGZvdXIgYXJndW1lbnRzIG11c3QgYmUgb2Zmc2V0
IG51bWJlcnMKICAgICAgICAgICAgIGludCBpOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8
IDQ7IGkrKykgewpAQCAtMjQ2Nyw5ICsyNDYzLDkgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlRGFz
aGJvYXJkUmVnaW9ucyhpbgogICAgICAgICAgICAgICAgIGlmICghdmFsaWQpCiAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBD
U1NQcmltaXRpdmVWYWx1ZSAqYW1vdW50ID0gYXJnLT5pZCA9PSBDU1NWYWx1ZUF1dG8gPwotICAg
ICAgICAgICAgICAgICAgICBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUoQ1NTVmFsdWVBdXRvKSA6Ci0g
ICAgICAgICAgICAgICAgICAgIG5ldyBDU1NQcmltaXRpdmVWYWx1ZShhcmctPmZWYWx1ZSwgKENT
U1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMpIGFyZy0+dW5pdCk7CisgICAgICAgICAgICAgICAg
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBhbW91bnQgPSBhcmctPmlkID09IENTU1ZhbHVlQXV0
byA/CisgICAgICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVJZGVudGlm
aWVyKENTU1ZhbHVlQXV0bykgOgorICAgICAgICAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1
ZTo6Y3JlYXRlKGFyZy0+ZlZhbHVlLCAoQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcykgYXJn
LT51bml0KTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKGkgPT0g
MCkKICAgICAgICAgICAgICAgICAgICAgcmVnaW9uLT5zZXRUb3AoYW1vdW50KTsKQEAgLTI0ODks
NyArMjQ4NSw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZURhc2hib2FyZFJlZ2lvbnMoaW4KICAg
ICB9CiAKICAgICBpZiAodmFsaWQpCi0gICAgICAgIGFkZFByb3BlcnR5KHByb3BJZCwgbmV3IENT
U1ByaW1pdGl2ZVZhbHVlKGZpcnN0UmVnaW9uLnJlbGVhc2UoKSksIGltcG9ydGFudCk7CisgICAg
ICAgIGFkZFByb3BlcnR5KHByb3BJZCwgQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShmaXJzdFJl
Z2lvbi5yZWxlYXNlKCkpLCBpbXBvcnRhbnQpOwogICAgICAgICAKICAgICByZXR1cm4gdmFsaWQ7
CiB9CkBAIC0yNTA1LDExICsyNTAxLDExIEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNl
cjo6cGFyc2VDb3UKICAgICAgICAgcmV0dXJuIDA7CiAgICAgCiAgICAgVmFsdWUqIGkgPSBhcmdz
LT5jdXJyZW50KCk7Ci0gICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBpZGVudGlmaWVyID0g
bmV3IENTU1ByaW1pdGl2ZVZhbHVlKGktPnN0cmluZywgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19T
VFJJTkcpOworICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gaWRlbnRpZmllciA9IENTU1By
aW1pdGl2ZVZhbHVlOjpjcmVhdGUoaS0+c3RyaW5nLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NU
UklORyk7CiAKICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHNlcGFyYXRvcjsKICAgICBp
ZiAoIWNvdW50ZXJzKQotICAgICAgICBzZXBhcmF0b3IgPSBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUo
U3RyaW5nKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HKTsKKyAgICAgICAgc2VwYXJh
dG9yID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShTdHJpbmcoKSwgQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19TVFJJTkcpOwogICAgIGVsc2UgewogICAgICAgICBpID0gYXJncy0+bmV4dCgpOwog
ICAgICAgICBpZiAoaS0+dW5pdCAhPSBWYWx1ZTo6T3BlcmF0b3IgfHwgaS0+aVZhbHVlICE9ICcs
JykKQEAgLTI1MTksMTMgKzI1MTUsMTMgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2Vy
OjpwYXJzZUNvdQogICAgICAgICBpZiAoaS0+dW5pdCAhPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NT
X1NUUklORykKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAKLSAgICAgICAgc2VwYXJh
dG9yID0gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKGktPnN0cmluZywgKENTU1ByaW1pdGl2ZVZhbHVl
OjpVbml0VHlwZXMpIGktPnVuaXQpOworICAgICAgICBzZXBhcmF0b3IgPSBDU1NQcmltaXRpdmVW
YWx1ZTo6Y3JlYXRlKGktPnN0cmluZywgKENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMpIGkt
PnVuaXQpOwogICAgIH0KIAogICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbGlzdFN0eWxl
OwogICAgIGkgPSBhcmdzLT5uZXh0KCk7CiAgICAgaWYgKCFpKSAvLyBNYWtlIHRoZSBsaXN0IHN0
eWxlIGRlZmF1bHQgZGVjaW1hbAotICAgICAgICBsaXN0U3R5bGUgPSBuZXcgQ1NTUHJpbWl0aXZl
VmFsdWUoQ1NTVmFsdWVEZWNpbWFsIC0gQ1NTVmFsdWVEaXNjLCBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX05VTUJFUik7CisgICAgICAgIGxpc3RTdHlsZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVh
dGUoQ1NTVmFsdWVEZWNpbWFsIC0gQ1NTVmFsdWVEaXNjLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NT
X05VTUJFUik7CiAgICAgZWxzZSB7CiAgICAgICAgIGlmIChpLT51bml0ICE9IFZhbHVlOjpPcGVy
YXRvciB8fCBpLT5pVmFsdWUgIT0gJywnKQogICAgICAgICAgICAgcmV0dXJuIDA7CkBAIC0yNTQy
LDEwICsyNTM4LDEwIEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VDb3UK
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICAgICAgbGlzdFN0eWxl
ID0gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKGxzLCAoQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBl
cykgaS0+dW5pdCk7CisgICAgICAgIGxpc3RTdHlsZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVh
dGUobHMsIChDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzKSBpLT51bml0KTsKICAgICB9CiAK
LSAgICByZXR1cm4gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKENvdW50ZXI6OmNyZWF0ZShpZGVudGlm
aWVyLnJlbGVhc2UoKSwgbGlzdFN0eWxlLnJlbGVhc2UoKSwgc2VwYXJhdG9yLnJlbGVhc2UoKSkp
OworICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKENvdW50ZXI6OmNyZWF0ZShp
ZGVudGlmaWVyLnJlbGVhc2UoKSwgbGlzdFN0eWxlLnJlbGVhc2UoKSwgc2VwYXJhdG9yLnJlbGVh
c2UoKSkpOwogfQogCiBib29sIENTU1BhcnNlcjo6cGFyc2VTaGFwZShpbnQgcHJvcElkLCBib29s
IGltcG9ydGFudCkKQEAgLTI1NjYsOSArMjU2Miw5IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVNo
YXBlKGludCBwcm9wSWQsIGIKICAgICAgICAgdmFsaWQgPSBhLT5pZCA9PSBDU1NWYWx1ZUF1dG8g
fHwgdmFsaWRVbml0KGEsIEZMZW5ndGgsIG1fc3RyaWN0KTsKICAgICAgICAgaWYgKCF2YWxpZCkK
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSAqbGVuZ3RoID0g
YS0+aWQgPT0gQ1NTVmFsdWVBdXRvID8KLSAgICAgICAgICAgIG5ldyBDU1NQcmltaXRpdmVWYWx1
ZShDU1NWYWx1ZUF1dG8pIDoKLSAgICAgICAgICAgIG5ldyBDU1NQcmltaXRpdmVWYWx1ZShhLT5m
VmFsdWUsIChDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzKSBhLT51bml0KTsKKyAgICAgICAg
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBsZW5ndGggPSBhLT5pZCA9PSBDU1NWYWx1ZUF1dG8g
PworICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUlkZW50aWZpZXIoQ1NTVmFs
dWVBdXRvKSA6CisgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKGEtPmZWYWx1
ZSwgKENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMpIGEtPnVuaXQpOwogICAgICAgICBpZiAo
aSA9PSAwKQogICAgICAgICAgICAgcmVjdC0+c2V0VG9wKGxlbmd0aCk7CiAgICAgICAgIGVsc2Ug
aWYgKGkgPT0gMSkKQEAgLTI1ODksNyArMjU4NSw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVNo
YXBlKGludCBwcm9wSWQsIGIKICAgICAgICAgaSsrOwogICAgIH0KICAgICBpZiAodmFsaWQpIHsK
LSAgICAgICAgYWRkUHJvcGVydHkocHJvcElkLCBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUocmVjdC5y
ZWxlYXNlKCkpLCBpbXBvcnRhbnQpOworICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIENTU1By
aW1pdGl2ZVZhbHVlOjpjcmVhdGUocmVjdC5yZWxlYXNlKCkpLCBpbXBvcnRhbnQpOwogICAgICAg
ICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC0y
NjAxLDcgKzI1OTcsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VGb250KGJvb2wgaW1wb3J0YW50
CiB7CiAgICAgYm9vbCB2YWxpZCA9IHRydWU7CiAgICAgVmFsdWUgKnZhbHVlID0gbV92YWx1ZUxp
c3QtPmN1cnJlbnQoKTsKLSAgICBSZWZQdHI8Rm9udFZhbHVlPiBmb250ID0gbmV3IEZvbnRWYWx1
ZTsKKyAgICBSZWZQdHI8Rm9udFZhbHVlPiBmb250ID0gRm9udFZhbHVlOjpjcmVhdGUoKTsKICAg
ICAvLyBvcHRpb25hbCBmb250LXN0eWxlLCBmb250LXZhcmlhbnQgYW5kIGZvbnQtd2VpZ2h0CiAg
ICAgd2hpbGUgKHZhbHVlKSB7CiAgICAgICAgIGludCBpZCA9IHZhbHVlLT5pZDsKQEAgLTI2MTEs
MTUgKzI2MDcsMTUgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlRm9udChib29sIGltcG9ydGFudAog
ICAgICAgICAgICAgfSBlbHNlIGlmIChpZCA9PSBDU1NWYWx1ZUl0YWxpYyB8fCBpZCA9PSBDU1NW
YWx1ZU9ibGlxdWUpIHsKICAgICAgICAgICAgICAgICBpZiAoZm9udC0+c3R5bGUpCiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICBmb250LT5zdHlsZSA9
IG5ldyBDU1NQcmltaXRpdmVWYWx1ZShpZCk7CisgICAgICAgICAgICAgICAgZm9udC0+c3R5bGUg
PSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlSWRlbnRpZmllcihpZCk7CiAgICAgICAgICAgICB9
IGVsc2UgaWYgKGlkID09IENTU1ZhbHVlU21hbGxDYXBzKSB7CiAgICAgICAgICAgICAgICAgaWYg
KGZvbnQtPnZhcmlhbnQpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgICAgICAgICBmb250LT52YXJpYW50ID0gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKGlkKTsKKyAg
ICAgICAgICAgICAgICBmb250LT52YXJpYW50ID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUlk
ZW50aWZpZXIoaWQpOwogICAgICAgICAgICAgfSBlbHNlIGlmIChpZCA+PSBDU1NWYWx1ZUJvbGQg
JiYgaWQgPD0gQ1NTVmFsdWVMaWdodGVyKSB7CiAgICAgICAgICAgICAgICAgaWYgKGZvbnQtPndl
aWdodCkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAg
IGZvbnQtPndlaWdodCA9IG5ldyBDU1NQcmltaXRpdmVWYWx1ZShpZCk7CisgICAgICAgICAgICAg
ICAgZm9udC0+d2VpZ2h0ID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUlkZW50aWZpZXIoaWQp
OwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOwog
ICAgICAgICAgICAgfQpAQCAtMjY0Niw3ICsyNjQyLDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNl
Rm9udChib29sIGltcG9ydGFudAogICAgICAgICAgICAgICAgIHZhbCA9IENTU1ZhbHVlOTAwOwog
CiAgICAgICAgICAgICBpZiAodmFsKQotICAgICAgICAgICAgICAgIGZvbnQtPndlaWdodCA9IG5l
dyBDU1NQcmltaXRpdmVWYWx1ZSh2YWwpOworICAgICAgICAgICAgICAgIGZvbnQtPndlaWdodCA9
IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVJZGVudGlmaWVyKHZhbCk7CiAgICAgICAgICAgICBl
bHNlCiAgICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKICAgICAgICAgfSBlbHNlIHsKQEAg
LTI2NjEsMTggKzI2NTcsMTggQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlRm9udChib29sIGltcG9y
dGFudAogCiAgICAgLy8gc2V0IHVuZGVmaW5lZCB2YWx1ZXMgdG8gZGVmYXVsdAogICAgIGlmICgh
Zm9udC0+c3R5bGUpCi0gICAgICAgIGZvbnQtPnN0eWxlID0gbmV3IENTU1ByaW1pdGl2ZVZhbHVl
KENTU1ZhbHVlTm9ybWFsKTsKKyAgICAgICAgZm9udC0+c3R5bGUgPSBDU1NQcmltaXRpdmVWYWx1
ZTo6Y3JlYXRlSWRlbnRpZmllcihDU1NWYWx1ZU5vcm1hbCk7CiAgICAgaWYgKCFmb250LT52YXJp
YW50KQotICAgICAgICBmb250LT52YXJpYW50ID0gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKENTU1Zh
bHVlTm9ybWFsKTsKKyAgICAgICAgZm9udC0+dmFyaWFudCA9IENTU1ByaW1pdGl2ZVZhbHVlOjpj
cmVhdGVJZGVudGlmaWVyKENTU1ZhbHVlTm9ybWFsKTsKICAgICBpZiAoIWZvbnQtPndlaWdodCkK
LSAgICAgICAgZm9udC0+d2VpZ2h0ID0gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKENTU1ZhbHVlTm9y
bWFsKTsKKyAgICAgICAgZm9udC0+d2VpZ2h0ID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUlk
ZW50aWZpZXIoQ1NTVmFsdWVOb3JtYWwpOwogCiAgICAgLy8gbm93IGEgZm9udCBzaXplIF9tdXN0
XyBjb21lCiAgICAgLy8gPGFic29sdXRlLXNpemU+IHwgPHJlbGF0aXZlLXNpemU+IHwgPGxlbmd0
aD4gfCA8cGVyY2VudGFnZT4gfCBpbmhlcml0CiAgICAgaWYgKHZhbHVlLT5pZCA+PSBDU1NWYWx1
ZVh4U21hbGwgJiYgdmFsdWUtPmlkIDw9IENTU1ZhbHVlTGFyZ2VyKQotICAgICAgICBmb250LT5z
aXplID0gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlLT5pZCk7CisgICAgICAgIGZvbnQtPnNp
emUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlSWRlbnRpZmllcih2YWx1ZS0+aWQpOwogICAg
IGVsc2UgaWYgKHZhbGlkVW5pdCh2YWx1ZSwgRkxlbmd0aHxGUGVyY2VudHxGTm9uTmVnLCBtX3N0
cmljdCkpCi0gICAgICAgIGZvbnQtPnNpemUgPSBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUt
PmZWYWx1ZSwgKENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMpIHZhbHVlLT51bml0KTsKKyAg
ICAgICAgZm9udC0+c2l6ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUodmFsdWUtPmZWYWx1
ZSwgKENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMpIHZhbHVlLT51bml0KTsKICAgICB2YWx1
ZSA9IG1fdmFsdWVMaXN0LT5uZXh0KCk7CiAgICAgaWYgKCFmb250LT5zaXplIHx8ICF2YWx1ZSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjY4NSw3ICsyNjgxLDcgQEAgYm9vbCBDU1NQYXJz
ZXI6OnBhcnNlRm9udChib29sIGltcG9ydGFudAogICAgICAgICBpZiAodmFsdWUtPmlkID09IENT
U1ZhbHVlTm9ybWFsKSB7CiAgICAgICAgICAgICAvLyBkZWZhdWx0IHZhbHVlLCBub3RoaW5nIHRv
IGRvCiAgICAgICAgIH0gZWxzZSBpZiAodmFsaWRVbml0KHZhbHVlLCBGTnVtYmVyfEZMZW5ndGh8
RlBlcmNlbnR8Rk5vbk5lZywgbV9zdHJpY3QpKQotICAgICAgICAgICAgZm9udC0+bGluZUhlaWdo
dCA9IG5ldyBDU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZS0+ZlZhbHVlLCAoQ1NTUHJpbWl0aXZlVmFs
dWU6OlVuaXRUeXBlcykgdmFsdWUtPnVuaXQpOworICAgICAgICAgICAgZm9udC0+bGluZUhlaWdo
dCA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUodmFsdWUtPmZWYWx1ZSwgKENTU1ByaW1pdGl2
ZVZhbHVlOjpVbml0VHlwZXMpIHZhbHVlLT51bml0KTsKICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5uZXh0KCk7CkBA
IC0yNjk0LDcgKzI2OTAsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VGb250KGJvb2wgaW1wb3J0
YW50CiAgICAgfQogICAgIAogICAgIGlmICghZm9udC0+bGluZUhlaWdodCkKLSAgICAgICAgZm9u
dC0+bGluZUhlaWdodCA9IG5ldyBDU1NQcmltaXRpdmVWYWx1ZShDU1NWYWx1ZU5vcm1hbCk7Cisg
ICAgICAgIGZvbnQtPmxpbmVIZWlnaHQgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlSWRlbnRp
ZmllcihDU1NWYWx1ZU5vcm1hbCk7CiAKICAgICAvLyBmb250IGZhbWlseSBtdXN0IGNvbWUgbm93
CiAgICAgZm9udC0+ZmFtaWx5ID0gcGFyc2VGb250RmFtaWx5KCk7CkBAIC0yNzA4LDcgKzI3MDQs
NyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VGb250KGJvb2wgaW1wb3J0YW50CiAKIFBhc3NSZWZQ
dHI8Q1NTVmFsdWVMaXN0PiBDU1NQYXJzZXI6OnBhcnNlRm9udEZhbWlseSgpCiB7Ci0gICAgQ1NT
VmFsdWVMaXN0KiBsaXN0ID0gbmV3IENTU1ZhbHVlTGlzdDsKKyAgICBSZWZQdHI8Q1NTVmFsdWVM
aXN0PiBsaXN0ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVDb21tYVNlcGFyYXRlZCgpOwogICAgIFZh
bHVlKiB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7CiAgICAgRm9udEZhbWlseVZhbHVl
KiBjdXJyRmFtaWx5ID0gMDsKICAgICB3aGlsZSAodmFsdWUpIHsKQEAgLTI3MjMsMjQgKzI3MTks
MjcgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZUxpc3Q+IENTU1BhcnNlcjo6cGFycwogICAgICAgICAg
ICAgaWYgKGN1cnJGYW1pbHkpCiAgICAgICAgICAgICAgICAgY3VyckZhbWlseS0+YXBwZW5kU3Bh
Y2VTZXBhcmF0ZWQodmFsdWUtPnN0cmluZy5jaGFyYWN0ZXJzLCB2YWx1ZS0+c3RyaW5nLmxlbmd0
aCk7CiAgICAgICAgICAgICBlbHNlIGlmIChuZXh0VmFsQnJlYWtzRm9udCB8fCAhbmV4dFZhbElz
Rm9udE5hbWUpCi0gICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKG5ldyBDU1NQcmltaXRpdmVW
YWx1ZSh2YWx1ZS0+aWQpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBsaXN0
LT5hcHBlbmQoY3VyckZhbWlseSA9IG5ldyBGb250RmFtaWx5VmFsdWUodmFsdWUtPnN0cmluZykp
OwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHZhbHVlLT51bml0ID09IENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfU1RSSU5HKSB7CisgICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKENTU1By
aW1pdGl2ZVZhbHVlOjpjcmVhdGVJZGVudGlmaWVyKHZhbHVlLT5pZCkpOworICAgICAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICAgICAgUmVmUHRyPEZvbnRGYW1pbHlWYWx1ZT4gbmV3RmFtaWx5
ID0gRm9udEZhbWlseVZhbHVlOjpjcmVhdGUodmFsdWUtPnN0cmluZyk7CisgICAgICAgICAgICAg
ICAgY3VyckZhbWlseSA9IG5ld0ZhbWlseS5nZXQoKTsKKyAgICAgICAgICAgICAgICBsaXN0LT5h
cHBlbmQobmV3RmFtaWx5LnJlbGVhc2UoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxz
ZSBpZiAodmFsdWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpIHsKICAg
ICAgICAgICAgIC8vIFN0cmluZ3MgbmV2ZXIgc2hhcmUgaW4gYSBmYW1pbHkgbmFtZS4KICAgICAg
ICAgICAgIGN1cnJGYW1pbHkgPSAwOwotICAgICAgICAgICAgbGlzdC0+YXBwZW5kKG5ldyBGb250
RmFtaWx5VmFsdWUodmFsdWUtPnN0cmluZykpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYg
KHZhbHVlLT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQpIHsKKyAgICAgICAg
ICAgIGxpc3QtPmFwcGVuZChGb250RmFtaWx5VmFsdWU6OmNyZWF0ZSh2YWx1ZS0+c3RyaW5nKSk7
CisgICAgICAgIH0gZWxzZSBpZiAodmFsdWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19JREVOVCkgewogICAgICAgICAgICAgaWYgKGN1cnJGYW1pbHkpCiAgICAgICAgICAgICAgICAg
Y3VyckZhbWlseS0+YXBwZW5kU3BhY2VTZXBhcmF0ZWQodmFsdWUtPnN0cmluZy5jaGFyYWN0ZXJz
LCB2YWx1ZS0+c3RyaW5nLmxlbmd0aCk7CiAgICAgICAgICAgICBlbHNlIGlmIChuZXh0VmFsQnJl
YWtzRm9udCB8fCAhbmV4dFZhbElzRm9udE5hbWUpCi0gICAgICAgICAgICAgICAgbGlzdC0+YXBw
ZW5kKG5ldyBGb250RmFtaWx5VmFsdWUodmFsdWUtPnN0cmluZykpOwotICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChjdXJyRmFtaWx5ID0gbmV3IEZvbnRGYW1p
bHlWYWx1ZSh2YWx1ZS0+c3RyaW5nKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICAgICAgbGlzdC0+YXBwZW5kKEZvbnRGYW1pbHlWYWx1ZTo6Y3JlYXRlKHZhbHVlLT5z
dHJpbmcpKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIFJlZlB0cjxGb250
RmFtaWx5VmFsdWU+IG5ld0ZhbWlseSA9IEZvbnRGYW1pbHlWYWx1ZTo6Y3JlYXRlKHZhbHVlLT5z
dHJpbmcpOworICAgICAgICAgICAgICAgIGN1cnJGYW1pbHkgPSBuZXdGYW1pbHkuZ2V0KCk7Cisg
ICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKG5ld0ZhbWlseS5yZWxlYXNlKCkpOworICAgICAg
ICAgICAgfQorICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgCkBAIC0yNzU2LDE2ICsyNzU1LDE0IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWVMaXN0
PiBDU1NQYXJzZXI6OnBhcnMKICAgICAgICAgZWxzZQogICAgICAgICAgICAgYnJlYWs7CiAgICAg
fQotICAgIGlmICghbGlzdC0+bGVuZ3RoKCkpIHsKLSAgICAgICAgZGVsZXRlIGxpc3Q7CisgICAg
aWYgKCFsaXN0LT5sZW5ndGgoKSkKICAgICAgICAgbGlzdCA9IDA7Ci0gICAgfQotICAgIHJldHVy
biBsaXN0OworICAgIHJldHVybiBsaXN0LnJlbGVhc2UoKTsKIH0KIAogYm9vbCBDU1NQYXJzZXI6
OnBhcnNlRm9udEZhY2VTcmMoKQogewotICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IHZhbHVlcyhu
ZXcgQ1NTVmFsdWVMaXN0KCkpOworICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IHZhbHVlcyhDU1NW
YWx1ZUxpc3Q6OmNyZWF0ZUNvbW1hU2VwYXJhdGVkKCkpOwogICAgIFZhbHVlKiB2YWw7CiAgICAg
Ym9vbCBleHBlY3RDb21tYSA9IGZhbHNlOwogICAgIGJvb2wgYWxsb3dGb3JtYXQgPSBmYWxzZTsK
QEAgLTI3NzUsNyArMjc3Miw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUZvbnRGYWNlU3JjKCkK
ICAgICAgICAgUmVmUHRyPENTU0ZvbnRGYWNlU3JjVmFsdWU+IHBhcnNlZFZhbHVlOwogICAgICAg
ICBpZiAodmFsLT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJICYmICFleHBlY3RD
b21tYSkgewogICAgICAgICAgICAgU3RyaW5nIHZhbHVlID0gcGFyc2VVUkwodmFsLT5zdHJpbmcp
OwotICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBuZXcgQ1NTRm9udEZhY2VTcmNWYWx1ZShLVVJM
KG1fc3R5bGVTaGVldC0+YmFzZVVSTCgpLCB2YWx1ZSkuc3RyaW5nKCksIGZhbHNlKTsKKyAgICAg
ICAgICAgIHBhcnNlZFZhbHVlID0gQ1NTRm9udEZhY2VTcmNWYWx1ZTo6Y3JlYXRlKEtVUkwobV9z
dHlsZVNoZWV0LT5iYXNlVVJMKCksIHZhbHVlKS5zdHJpbmcoKSk7CiAgICAgICAgICAgICB1cmlW
YWx1ZSA9IHBhcnNlZFZhbHVlOwogICAgICAgICAgICAgYWxsb3dGb3JtYXQgPSB0cnVlOwogICAg
ICAgICAgICAgZXhwZWN0Q29tbWEgPSB0cnVlOwpAQCAtMjc4OCw3ICsyNzg1LDcgQEAgYm9vbCBD
U1NQYXJzZXI6OnBhcnNlRm9udEZhY2VTcmMoKQogICAgICAgICAgICAgICAgICAgICBhbGxvd0Zv
cm1hdCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICBWYWx1ZSogYSA9IGFyZ3MtPmN1cnJl
bnQoKTsKICAgICAgICAgICAgICAgICAgICAgdXJpVmFsdWUuY2xlYXIoKTsKLSAgICAgICAgICAg
ICAgICAgICAgcGFyc2VkVmFsdWUgPSBuZXcgQ1NTRm9udEZhY2VTcmNWYWx1ZShhLT5zdHJpbmcs
IHRydWUpOworICAgICAgICAgICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IENTU0ZvbnRGYWNlU3Jj
VmFsdWU6OmNyZWF0ZUxvY2FsKGEtPnN0cmluZyk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlm
IChlcXVhbElnbm9yaW5nQ2FzZSh2YWwtPmZ1bmN0aW9uLT5uYW1lLCAiZm9ybWF0KCIpICYmIGFs
bG93Rm9ybWF0ICYmIHVyaVZhbHVlKSB7CiAgICAgICAgICAgICAgICAgICAgIGV4cGVjdENvbW1h
ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgYWxsb3dGb3JtYXQgPSBmYWxzZTsKQEAgLTI4
MjYsNyArMjgyMyw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUZvbnRGYWNlU3JjKCkKIAogYm9v
bCBDU1NQYXJzZXI6OnBhcnNlRm9udEZhY2VVbmljb2RlUmFuZ2UoKQogewotICAgIENTU1ZhbHVl
TGlzdCogdmFsdWVzID0gbmV3IENTU1ZhbHVlTGlzdCgpOworICAgIFJlZlB0cjxDU1NWYWx1ZUxp
c3Q+IHZhbHVlcyA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlQ29tbWFTZXBhcmF0ZWQoKTsKICAgICBW
YWx1ZSogY3VycmVudFZhbHVlOwogICAgIGJvb2wgZmFpbGVkID0gZmFsc2U7CiAgICAgd2hpbGUg
KChjdXJyZW50VmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpKSkgewpAQCAtMjkwMiwxNCAr
Mjg5OSwxMiBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VGb250RmFjZVVuaWNvZGVSYW5nCiAgICAg
ICAgICAgICBpZiAoZmFpbGVkKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0g
ICAgICAgIHZhbHVlcy0+YXBwZW5kKG5ldyBDU1NVbmljb2RlUmFuZ2VWYWx1ZShmcm9tLCB0bykp
OworICAgICAgICB2YWx1ZXMtPmFwcGVuZChDU1NVbmljb2RlUmFuZ2VWYWx1ZTo6Y3JlYXRlKGZy
b20sIHRvKSk7CiAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CiAgICAgfQotICAgIGlmIChm
YWlsZWQgfHwgIXZhbHVlcy0+bGVuZ3RoKCkpIHsKLSAgICAgICAgZGVsZXRlIHZhbHVlczsKKyAg
ICBpZiAoZmFpbGVkIHx8ICF2YWx1ZXMtPmxlbmd0aCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5VW5pY29kZVJhbmdlLCB2YWx1ZXMs
IG1faW1wb3J0YW50KTsKKyAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eVVuaWNvZGVSYW5nZSwg
dmFsdWVzLnJlbGVhc2UoKSwgbV9pbXBvcnRhbnQpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBA
IC0zMDAzLDcgKzI5OTgsNyBAQCBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBDU1NQYXJz
ZXI6CiAgICAgUkdCQTMyIGMgPSBDb2xvcjo6dHJhbnNwYXJlbnQ7CiAgICAgaWYgKCFwYXJzZUNv
bG9yRnJvbVZhbHVlKHZhbHVlID8gdmFsdWUgOiBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpLCBjKSkK
ICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIG5ldyBDU1NQcmltaXRpdmVWYWx1ZShjKTsK
KyAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUNvbG9yKGMpOwogfQogCiBib29s
IENTU1BhcnNlcjo6cGFyc2VDb2xvckZyb21WYWx1ZShWYWx1ZSogdmFsdWUsIFJHQkEzMiYgYywg
Ym9vbCBzdmcpCkBAIC0zMDc2LDEwICszMDcxLDEwIEBAIHN0cnVjdCBTaGFkb3dQYXJzZUNvbnRl
eHQgewogICAgICAgICAvLyBIYW5kbGUgdGhlICwsIGNhc2UgZ3JhY2VmdWxseSBieSBkb2luZyBu
b3RoaW5nLgogICAgICAgICBpZiAoeCB8fCB5IHx8IGJsdXIgfHwgY29sb3IpIHsKICAgICAgICAg
ICAgIGlmICghdmFsdWVzKQotICAgICAgICAgICAgICAgIHZhbHVlcyA9IG5ldyBDU1NWYWx1ZUxp
c3QoKTsKKyAgICAgICAgICAgICAgICB2YWx1ZXMgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZUNvbW1h
U2VwYXJhdGVkKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIENvbnN0cnVjdCB0aGUg
Y3VycmVudCBzaGFkb3cgdmFsdWUgYW5kIGFkZCBpdCB0byB0aGUgbGlzdC4KLSAgICAgICAgICAg
IHZhbHVlcy0+YXBwZW5kKG5ldyBTaGFkb3dWYWx1ZSh4LnJlbGVhc2UoKSwgeS5yZWxlYXNlKCks
IGJsdXIucmVsZWFzZSgpLCBjb2xvci5yZWxlYXNlKCkpKTsKKyAgICAgICAgICAgIHZhbHVlcy0+
YXBwZW5kKFNoYWRvd1ZhbHVlOjpjcmVhdGUoeC5yZWxlYXNlKCksIHkucmVsZWFzZSgpLCBibHVy
LnJlbGVhc2UoKSwgY29sb3IucmVsZWFzZSgpKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAg
ICAgIC8vIE5vdyByZXNldCBmb3IgdGhlIG5leHQgc2hhZG93IHZhbHVlLgpAQCAtMzA4OSw3ICsz
MDg0LDcgQEAgc3RydWN0IFNoYWRvd1BhcnNlQ29udGV4dCB7CiAgICAgfQogCiAgICAgdm9pZCBj
b21taXRMZW5ndGgoVmFsdWUqIHYpIHsKLSAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PiB2YWwgPSBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUodi0+ZlZhbHVlLCAoQ1NTUHJpbWl0aXZlVmFs
dWU6OlVuaXRUeXBlcyl2LT51bml0KTsKKyAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PiB2YWwgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHYtPmZWYWx1ZSwgKENTU1ByaW1pdGl2
ZVZhbHVlOjpVbml0VHlwZXMpdi0+dW5pdCk7CiAKICAgICAgICAgaWYgKGFsbG93WCkgewogICAg
ICAgICAgICAgeCA9IHZhbC5yZWxlYXNlKCk7CkBAIC0zMTU5LDcgKzMxNTQsNyBAQCBib29sIENT
U1BhcnNlcjo6cGFyc2VTaGFkb3coaW50IHByb3BJZCwgCiAgICAgICAgICAgICBpZiAoaXNDb2xv
cikgewogICAgICAgICAgICAgICAgIGlmICghY29udGV4dC5hbGxvd0NvbG9yKQogICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgcGFyc2VkQ29sb3IgPSBu
ZXcgQ1NTUHJpbWl0aXZlVmFsdWUodmFsLT5pZCk7CisgICAgICAgICAgICAgICAgcGFyc2VkQ29s
b3IgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlSWRlbnRpZmllcih2YWwtPmlkKTsKICAgICAg
ICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKCFwYXJzZWRDb2xvcikKQEAgLTMyMTYsMTEgKzMy
MTEsMTEgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlUmVmbGVjdChpbnQgcHJvcElkLAogICAgIHZh
bCA9IG1fdmFsdWVMaXN0LT5uZXh0KCk7CiAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBv
ZmZzZXQ7CiAgICAgaWYgKCF2YWwpCi0gICAgICAgIG9mZnNldCA9IG5ldyBDU1NQcmltaXRpdmVW
YWx1ZSgwLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKTsKKyAgICAgICAgb2Zmc2V0ID0gQ1NT
UHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSgwLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKTsKICAg
ICBlbHNlIHsKICAgICAgICAgaWYgKCF2YWxpZFVuaXQodmFsLCBGTGVuZ3RoIHwgRlBlcmNlbnQs
IG1fc3RyaWN0KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgb2Zmc2V0ID0g
bmV3IENTU1ByaW1pdGl2ZVZhbHVlKHZhbC0+ZlZhbHVlLCBzdGF0aWNfY2FzdDxDU1NQcmltaXRp
dmVWYWx1ZTo6VW5pdFR5cGVzPih2YWwtPnVuaXQpKTsKKyAgICAgICAgb2Zmc2V0ID0gQ1NTUHJp
bWl0aXZlVmFsdWU6OmNyZWF0ZSh2YWwtPmZWYWx1ZSwgc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWU6OlVuaXRUeXBlcz4odmFsLT51bml0KSk7CiAgICAgfQogCiAgICAgLy8gTm93IGZvciB0
aGUgbWFzay4KQEAgLTMyNjEsNyArMzI1Niw3IEBAIHN0cnVjdCBCb3JkZXJJbWFnZVBhcnNlQ29u
dGV4dAogCiAgICAgdm9pZCBjb21taXRJbWFnZShQYXNzUmVmUHRyPENTU1ZhbHVlPiBpbWFnZSkg
eyBtX2ltYWdlID0gaW1hZ2U7IG1fYWxsb3dOdW1iZXIgPSB0cnVlOyB9CiAgICAgdm9pZCBjb21t
aXROdW1iZXIoVmFsdWUqIHYpIHsKLSAgICAgICAgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4gdmFsID0gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKHYtPmZWYWx1ZSwgKENTU1ByaW1pdGl2ZVZh
bHVlOjpVbml0VHlwZXMpdi0+dW5pdCk7CisgICAgICAgIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZl
VmFsdWU+IHZhbCA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUodi0+ZlZhbHVlLCAoQ1NTUHJp
bWl0aXZlVmFsdWU6OlVuaXRUeXBlcyl2LT51bml0KTsKICAgICAgICAgaWYgKCFtX3RvcCkKICAg
ICAgICAgICAgIG1fdG9wID0gdmFsOwogICAgICAgICBlbHNlIGlmICghbV9yaWdodCkKQEAgLTMz
MDIsMTYgKzMyOTcsMTYgQEAgc3RydWN0IEJvcmRlckltYWdlUGFyc2VDb250ZXh0CiAgICAgUGFz
c1JlZlB0cjxDU1NWYWx1ZT4gY29tbWl0Qm9yZGVySW1hZ2UoQ1NTUGFyc2VyKiBwLCBib29sIGlt
cG9ydGFudCkgewogICAgICAgICAvLyBXZSBuZWVkIHRvIGNsb25lIGFuZCByZXBlYXQgdmFsdWVz
IGZvciBhbnkgb21pc3Npb25zLgogICAgICAgICBpZiAoIW1fcmlnaHQpIHsKLSAgICAgICAgICAg
IG1fcmlnaHQgPSBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUobV90b3AtPmdldERvdWJsZVZhbHVlKCks
IChDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzKW1fdG9wLT5wcmltaXRpdmVUeXBlKCkpOwot
ICAgICAgICAgICAgbV9ib3R0b20gPSBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUobV90b3AtPmdldERv
dWJsZVZhbHVlKCksIChDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzKW1fdG9wLT5wcmltaXRp
dmVUeXBlKCkpOwotICAgICAgICAgICAgbV9sZWZ0ID0gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKG1f
dG9wLT5nZXREb3VibGVWYWx1ZSgpLCAoQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcyltX3Rv
cC0+cHJpbWl0aXZlVHlwZSgpKTsKKyAgICAgICAgICAgIG1fcmlnaHQgPSBDU1NQcmltaXRpdmVW
YWx1ZTo6Y3JlYXRlKG1fdG9wLT5nZXREb3VibGVWYWx1ZSgpLCAoQ1NTUHJpbWl0aXZlVmFsdWU6
OlVuaXRUeXBlcyltX3RvcC0+cHJpbWl0aXZlVHlwZSgpKTsKKyAgICAgICAgICAgIG1fYm90dG9t
ID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShtX3RvcC0+Z2V0RG91YmxlVmFsdWUoKSwgKENT
U1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMpbV90b3AtPnByaW1pdGl2ZVR5cGUoKSk7CisgICAg
ICAgICAgICBtX2xlZnQgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKG1fdG9wLT5nZXREb3Vi
bGVWYWx1ZSgpLCAoQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcyltX3RvcC0+cHJpbWl0aXZl
VHlwZSgpKTsKICAgICAgICAgfQogICAgICAgICBpZiAoIW1fYm90dG9tKSB7Ci0gICAgICAgICAg
ICBtX2JvdHRvbSA9IG5ldyBDU1NQcmltaXRpdmVWYWx1ZShtX3RvcC0+Z2V0RG91YmxlVmFsdWUo
KSwgKENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMpbV90b3AtPnByaW1pdGl2ZVR5cGUoKSk7
Ci0gICAgICAgICAgICBtX2xlZnQgPSBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUobV9yaWdodC0+Z2V0
RG91YmxlVmFsdWUoKSwgKENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMpbV9yaWdodC0+cHJp
bWl0aXZlVHlwZSgpKTsKKyAgICAgICAgICAgIG1fYm90dG9tID0gQ1NTUHJpbWl0aXZlVmFsdWU6
OmNyZWF0ZShtX3RvcC0+Z2V0RG91YmxlVmFsdWUoKSwgKENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0
VHlwZXMpbV90b3AtPnByaW1pdGl2ZVR5cGUoKSk7CisgICAgICAgICAgICBtX2xlZnQgPSBDU1NQ
cmltaXRpdmVWYWx1ZTo6Y3JlYXRlKG1fcmlnaHQtPmdldERvdWJsZVZhbHVlKCksIChDU1NQcmlt
aXRpdmVWYWx1ZTo6VW5pdFR5cGVzKW1fcmlnaHQtPnByaW1pdGl2ZVR5cGUoKSk7CiAgICAgICAg
IH0KICAgICAgICAgaWYgKCFtX2xlZnQpCi0gICAgICAgICAgICAgbV9sZWZ0ID0gbmV3IENTU1By
aW1pdGl2ZVZhbHVlKG1fcmlnaHQtPmdldERvdWJsZVZhbHVlKCksIChDU1NQcmltaXRpdmVWYWx1
ZTo6VW5pdFR5cGVzKW1fcmlnaHQtPnByaW1pdGl2ZVR5cGUoKSk7CisgICAgICAgICAgICAgbV9s
ZWZ0ID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShtX3JpZ2h0LT5nZXREb3VibGVWYWx1ZSgp
LCAoQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcyltX3JpZ2h0LT5wcmltaXRpdmVUeXBlKCkp
OwogICAgICAgICAgICAgIAogICAgICAgICAvLyBOb3cgYnVpbGQgYSByZWN0IHZhbHVlIHRvIGhv
bGQgYWxsIGZvdXIgb2Ygb3VyIHByaW1pdGl2ZSB2YWx1ZXMuCiAgICAgICAgIFJlZlB0cjxSZWN0
PiByZWN0ID0gUmVjdDo6Y3JlYXRlKCk7CkBAIC0zMzQ1LDcgKzMzNDAsNyBAQCBzdHJ1Y3QgQm9y
ZGVySW1hZ2VQYXJzZUNvbnRleHQKICAgICAgICAgfQogCiAgICAgICAgIC8vIE1ha2Ugb3VyIG5l
dyBib3JkZXIgaW1hZ2UgdmFsdWUgbm93LgotICAgICAgICByZXR1cm4gbmV3IENTU0JvcmRlcklt
YWdlVmFsdWUobV9pbWFnZSwgcmVjdC5yZWxlYXNlKCksIG1faG9yaXpvbnRhbFJ1bGUsIG1fdmVy
dGljYWxSdWxlKTsKKyAgICAgICAgcmV0dXJuIENTU0JvcmRlckltYWdlVmFsdWU6OmNyZWF0ZSht
X2ltYWdlLCByZWN0LnJlbGVhc2UoKSwgbV9ob3Jpem9udGFsUnVsZSwgbV92ZXJ0aWNhbFJ1bGUp
OwogICAgIH0KICAgICAKICAgICBib29sIG1fYWxsb3dCcmVhazsKQEAgLTM0MDksNyArMzQwNCw3
IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUJvcmRlckltYWdlKGludCBwcm8KICAgICAKICAgICBp
ZiAoY29udGV4dC5hbGxvd051bWJlcigpICYmIHByb3BJZCAhPSBDU1NQcm9wZXJ0eVdlYmtpdEJv
cmRlckltYWdlKSB7CiAgICAgICAgIC8vIEFsbG93IHRoZSBzbGljZXMgdG8gYmUgb21pdHRlZCBm
b3IgaW1hZ2VzIHRoYXQgZG9uJ3QgZml0IHRvIGEgYm9yZGVyLiAgV2UganVzdCBzZXQgdGhlIHNs
aWNlcyB0byBiZSAwLgotICAgICAgICBjb250ZXh0Lm1fdG9wID0gbmV3IENTU1ByaW1pdGl2ZVZh
bHVlKDAsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKKyAgICAgICAgY29udGV4dC5t
X3RvcCA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoMCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19OVU1CRVIpOwogICAgICAgICBjb250ZXh0Lm1fYWxsb3dCcmVhayA9IHRydWU7CiAgICAgfQog
CkBAIC0zNDI2LDcgKzM0MjEsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VDb3VudGVyKGludCBw
cm9wSWQsCiB7CiAgICAgZW51bSB7IElELCBWQUwgfSBzdGF0ZSA9IElEOwogCi0gICAgUmVmUHRy
PENTU1ZhbHVlTGlzdD4gbGlzdCA9IG5ldyBDU1NWYWx1ZUxpc3Q7CisgICAgUmVmUHRyPENTU1Zh
bHVlTGlzdD4gbGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlQ29tbWFTZXBhcmF0ZWQoKTsKICAg
ICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvdW50ZXJOYW1lOwogICAgIAogICAgIHdoaWxl
ICh0cnVlKSB7CkBAIC0zNDM0LDcgKzM0MjksNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VDb3Vu
dGVyKGludCBwcm9wSWQsCiAgICAgICAgIHN3aXRjaCAoc3RhdGUpIHsKICAgICAgICAgICAgIGNh
c2UgSUQ6CiAgICAgICAgICAgICAgICAgaWYgKHZhbCAmJiB2YWwtPnVuaXQgPT0gQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19JREVOVCkgewotICAgICAgICAgICAgICAgICAgICBjb3VudGVyTmFtZSA9
IG5ldyBDU1NQcmltaXRpdmVWYWx1ZSh2YWwtPnN0cmluZywgQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19TVFJJTkcpOworICAgICAgICAgICAgICAgICAgICBjb3VudGVyTmFtZSA9IENTU1ByaW1pdGl2
ZVZhbHVlOjpjcmVhdGUodmFsLT5zdHJpbmcsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5H
KTsKICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBWQUw7CiAgICAgICAgICAgICAgICAgICAg
IG1fdmFsdWVMaXN0LT5uZXh0KCk7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAt
MzQ0Nyw4ICszNDQyLDggQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlQ291bnRlcihpbnQgcHJvcElk
LAogICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwogICAgICAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChuZXcgQ1NTUHJpbWl0aXZlVmFs
dWUoUGFpcjo6Y3JlYXRlKGNvdW50ZXJOYW1lLnJlbGVhc2UoKSwKLSAgICAgICAgICAgICAgICAg
ICAgbmV3IENTU1ByaW1pdGl2ZVZhbHVlKGksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVS
KSkpKTsKKyAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoQ1NTUHJpbWl0aXZlVmFsdWU6OmNy
ZWF0ZShQYWlyOjpjcmVhdGUoY291bnRlck5hbWUucmVsZWFzZSgpLAorICAgICAgICAgICAgICAg
ICAgICBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKGksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
TlVNQkVSKSkpKTsKICAgICAgICAgICAgICAgICBzdGF0ZSA9IElEOwogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAgICAgfQpAQCAtMzQ3MCwxNCArMzQ2NSwxNCBAQCBzdGF0aWMg
UGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFyCiAgICAgaWYgKGEtPnVuaXQgPT0gQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19JREVOVCkgewogICAgICAgICBpZiAoKGVxdWFsSWdub3JpbmdD
YXNlKGEtPnN0cmluZywgImxlZnQiKSAmJiBob3Jpem9udGFsKSB8fCAKICAgICAgICAgICAgIChl
cXVhbElnbm9yaW5nQ2FzZShhLT5zdHJpbmcsICJ0b3AiKSAmJiAhaG9yaXpvbnRhbCkpCi0gICAg
ICAgICAgICByZXN1bHQgPSBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUoMC4sIENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfUEVSQ0VOVEFHRSk7CisgICAgICAgICAgICByZXN1bHQgPSBDU1NQcmltaXRpdmVW
YWx1ZTo6Y3JlYXRlKDAuLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpOwogICAg
ICAgICBlbHNlIGlmICgoZXF1YWxJZ25vcmluZ0Nhc2UoYS0+c3RyaW5nLCAicmlnaHQiKSAmJiBo
b3Jpem9udGFsKSB8fAogICAgICAgICAgICAgICAgICAoZXF1YWxJZ25vcmluZ0Nhc2UoYS0+c3Ry
aW5nLCAiYm90dG9tIikgJiYgIWhvcml6b250YWwpKQotICAgICAgICAgICAgcmVzdWx0ID0gbmV3
IENTU1ByaW1pdGl2ZVZhbHVlKDEwMC4sIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFH
RSk7CisgICAgICAgICAgICByZXN1bHQgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKDEwMC4s
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSk7CiAgICAgICAgIGVsc2UgaWYgKGVx
dWFsSWdub3JpbmdDYXNlKGEtPnN0cmluZywgImNlbnRlciIpKQotICAgICAgICAgICAgcmVzdWx0
ID0gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKDUwLiwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJD
RU5UQUdFKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUo
NTAuLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpOwogICAgIH0gZWxzZSBpZiAo
YS0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUiB8fCBhLT51bml0ID09IENT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSkKLSAgICAgICAgcmVzdWx0ID0gbmV3IENT
U1ByaW1pdGl2ZVZhbHVlKGEtPmZWYWx1ZSwgKENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMp
YS0+dW5pdCk7CisgICAgICAgIHJlc3VsdCA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoYS0+
ZlZhbHVlLCAoQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcylhLT51bml0KTsKICAgICByZXR1
cm4gcmVzdWx0OwogfQogCkBAIC0zNTA4LDcgKzM1MDMsNyBAQCBib29sIHBhcnNlR3JhZGllbnRD
b2xvclN0b3AoQ1NTUGFyc2VyKiBwCiAgICAgICAgIAogICAgICAgICBpbnQgaWQgPSBhcmdzLT5j
dXJyZW50KCktPmlkOwogICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVXZWJraXRUZXh0IHx8IChp
ZCA+PSBDU1NWYWx1ZUFxdWEgJiYgaWQgPD0gQ1NTVmFsdWVXaW5kb3d0ZXh0KSB8fCBpZCA9PSBD
U1NWYWx1ZU1lbnUpCi0gICAgICAgICAgICBzdG9wLm1fY29sb3IgPW5ldyBDU1NQcmltaXRpdmVW
YWx1ZShpZCk7CisgICAgICAgICAgICBzdG9wLm1fY29sb3IgPSBDU1NQcmltaXRpdmVWYWx1ZTo6
Y3JlYXRlSWRlbnRpZmllcihpZCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHN0b3AubV9j
b2xvciA9IHAtPnBhcnNlQ29sb3IoYXJncy0+Y3VycmVudCgpKTsKICAgICAgICAgaWYgKCFzdG9w
Lm1fY29sb3IpCkBAIC0zNTM1LDcgKzM1MzAsNyBAQCBib29sIHBhcnNlR3JhZGllbnRDb2xvclN0
b3AoQ1NTUGFyc2VyKiBwCiAgICAgICAgIHN0b3BBcmcgPSBhcmdzLT5uZXh0KCk7CiAgICAgICAg
IGludCBpZCA9IHN0b3BBcmctPmlkOwogICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVXZWJraXRU
ZXh0IHx8IChpZCA+PSBDU1NWYWx1ZUFxdWEgJiYgaWQgPD0gQ1NTVmFsdWVXaW5kb3d0ZXh0KSB8
fCBpZCA9PSBDU1NWYWx1ZU1lbnUpCi0gICAgICAgICAgICBzdG9wLm1fY29sb3IgPW5ldyBDU1NQ
cmltaXRpdmVWYWx1ZShpZCk7CisgICAgICAgICAgICBzdG9wLm1fY29sb3IgPSBDU1NQcmltaXRp
dmVWYWx1ZTo6Y3JlYXRlSWRlbnRpZmllcihpZCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAg
IHN0b3AubV9jb2xvciA9IHAtPnBhcnNlQ29sb3Ioc3RvcEFyZyk7CiAgICAgICAgIGlmICghc3Rv
cC5tX2NvbG9yKQpAQCAtMzU0Nyw3ICszNTQyLDcgQEAgYm9vbCBwYXJzZUdyYWRpZW50Q29sb3JT
dG9wKENTU1BhcnNlciogcAogCiBib29sIENTU1BhcnNlcjo6cGFyc2VHcmFkaWVudChSZWZQdHI8
Q1NTVmFsdWU+JiBncmFkaWVudCkKIHsKLSAgICBSZWZQdHI8Q1NTR3JhZGllbnRWYWx1ZT4gcmVz
dWx0ID0gbmV3IENTU0dyYWRpZW50VmFsdWU7CisgICAgUmVmUHRyPENTU0dyYWRpZW50VmFsdWU+
IHJlc3VsdCA9IENTU0dyYWRpZW50VmFsdWU6OmNyZWF0ZSgpOwogICAgIAogICAgIC8vIFdhbGsg
dGhlIGFyZ3VtZW50cy4KICAgICBWYWx1ZUxpc3QqIGFyZ3MgPSBtX3ZhbHVlTGlzdC0+Y3VycmVu
dCgpLT5mdW5jdGlvbi0+YXJnczsKQEAgLTM2MDAsNyArMzU5NSw3IEBAIGJvb2wgQ1NTUGFyc2Vy
OjpwYXJzZUdyYWRpZW50KFJlZlB0cjxDU1MKICAgICAgICAgYSA9IGFyZ3MtPm5leHQoKTsKICAg
ICAgICAgaWYgKCFhIHx8IGEtPnVuaXQgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJlc3VsdC0+c2V0Rmlyc3RSYWRp
dXMobmV3IENTU1ByaW1pdGl2ZVZhbHVlKGEtPmZWYWx1ZSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19OVU1CRVIpKTsKKyAgICAgICAgcmVzdWx0LT5zZXRGaXJzdFJhZGl1cyhDU1NQcmltaXRpdmVW
YWx1ZTo6Y3JlYXRlKGEtPmZWYWx1ZSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKTsK
ICAgICAgICAgCiAgICAgICAgIC8vIENvbW1hIGFmdGVyIHRoZSBmaXJzdCByYWRpdXMuCiAgICAg
ICAgIGEgPSBhcmdzLT5uZXh0KCk7CkBAIC0zNjM3LDcgKzM2MzIsNyBAQCBib29sIENTU1BhcnNl
cjo6cGFyc2VHcmFkaWVudChSZWZQdHI8Q1NTCiAgICAgICAgIGEgPSBhcmdzLT5uZXh0KCk7CiAg
ICAgICAgIGlmICghYSB8fCBhLT51bml0ICE9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVS
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXN1bHQtPnNldFNlY29uZFJh
ZGl1cyhuZXcgQ1NTUHJpbWl0aXZlVmFsdWUoYS0+ZlZhbHVlLCBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX05VTUJFUikpOworICAgICAgICByZXN1bHQtPnNldFNlY29uZFJhZGl1cyhDU1NQcmltaXRp
dmVWYWx1ZTo6Y3JlYXRlKGEtPmZWYWx1ZSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIp
KTsKICAgICB9CiAKICAgICAvLyBXZSBub3cgd2lsbCBhY2NlcHQgYW55IG51bWJlciBvZiBzdG9w
cyAoMCBvciBtb3JlKS4KQEAgLTM2NjgsNyArMzY2Myw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJz
ZUdyYWRpZW50KFJlZlB0cjxDU1MKIAogYm9vbCBDU1NQYXJzZXI6OnBhcnNlQ2FudmFzKFJlZlB0
cjxDU1NWYWx1ZT4mIGNhbnZhcykKIHsKLSAgICBSZWZQdHI8Q1NTQ2FudmFzVmFsdWU+IHJlc3Vs
dCA9IG5ldyBDU1NDYW52YXNWYWx1ZTsKKyAgICBSZWZQdHI8Q1NTQ2FudmFzVmFsdWU+IHJlc3Vs
dCA9IENTU0NhbnZhc1ZhbHVlOjpjcmVhdGUoKTsKICAgICAKICAgICAvLyBXYWxrIHRoZSBhcmd1
bWVudHMuCiAgICAgVmFsdWVMaXN0KiBhcmdzID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKS0+ZnVu
Y3Rpb24tPmFyZ3M7CkBAIC0zNzUwLDkgKzM3NDUsOSBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlTGlz
dD4gQ1NTUGFyc2VyOjpwYXJzCiAgICAgaWYgKCFtX3ZhbHVlTGlzdCkKICAgICAgICAgcmV0dXJu
IDA7CiAKLSAgICAvLyBUaGUgdHJhbnNmb3JtIGlzIGEgbGlzdCBvZiBmdW5jdGlvbmFsIHByaW1p
dGl2ZXMgdGhhdCBzcGVjaWZ5IHRyYW5zZm9ybSBvcGVyYXRpb25zLiAgV2UgY29sbGVjdCBhIGxp
c3QKLSAgICAvLyBvZiBDU1NUcmFuc2Zvcm1WYWx1ZXMsIHdoZXJlIGVhY2ggdmFsdWUgc3BlY2lm
aWVzIGEgc2luZ2xlIG9wZXJhdGlvbi4KLSAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBsaXN0ID0g
bmV3IENTU1ZhbHVlTGlzdDsKKyAgICAvLyBUaGUgdHJhbnNmb3JtIGlzIGEgbGlzdCBvZiBmdW5j
dGlvbmFsIHByaW1pdGl2ZXMgdGhhdCBzcGVjaWZ5IHRyYW5zZm9ybSBvcGVyYXRpb25zLgorICAg
IC8vIFdlIGNvbGxlY3QgYSBsaXN0IG9mIENTU1RyYW5zZm9ybVZhbHVlcywgd2hlcmUgZWFjaCB2
YWx1ZSBzcGVjaWZpZXMgYSBzaW5nbGUgb3BlcmF0aW9uLgorICAgIFJlZlB0cjxDU1NWYWx1ZUxp
c3Q+IGxpc3QgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZUNvbW1hU2VwYXJhdGVkKCk7CiAgICAgZm9y
IChWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOyB2YWx1ZTsgdmFsdWUgPSBt
X3ZhbHVlTGlzdC0+bmV4dCgpKSB7CiAgICAgICAgIGlmICh2YWx1ZS0+dW5pdCAhPSBWYWx1ZTo6
RnVuY3Rpb24gfHwgIXZhbHVlLT5mdW5jdGlvbikKICAgICAgICAgICAgIHJldHVybiAwOwpAQCAt
Mzc3MSw3ICszNzY2LDcgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZUxpc3Q+IENTU1BhcnNlcjo6cGFy
cwogICAgICAgICAgICAgcmV0dXJuIDA7CiAKICAgICAgICAgLy8gQ3JlYXRlIHRoZSBuZXcgQ1NT
VHJhbnNmb3JtVmFsdWUgZm9yIHRoaXMgb3BlcmF0aW9uIGFuZCBhZGQgaXQgdG8gb3VyIGxpc3Qu
Ci0gICAgICAgIENTU1RyYW5zZm9ybVZhbHVlKiB0cmFuc2Zvcm1WYWx1ZSA9IG5ldyBDU1NUcmFu
c2Zvcm1WYWx1ZShpbmZvLnR5cGUoKSk7CisgICAgICAgIFJlZlB0cjxDU1NUcmFuc2Zvcm1WYWx1
ZT4gdHJhbnNmb3JtVmFsdWUgPSBDU1NUcmFuc2Zvcm1WYWx1ZTo6Y3JlYXRlKGluZm8udHlwZSgp
KTsKICAgICAgICAgbGlzdC0+YXBwZW5kKHRyYW5zZm9ybVZhbHVlKTsKIAogICAgICAgICAvLyBT
bmFnIG91ciB2YWx1ZXMuCkBAIC0zNzg0LDcgKzM3NzksNyBAQCBQYXNzUmVmUHRyPENTU1ZhbHVl
TGlzdD4gQ1NTUGFyc2VyOjpwYXJzCiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIC8vIEFkZCB0aGUgdmFsdWUgdG8gdGhlIGN1cnJlbnQgdHJhbnNm
b3JtIG9wZXJhdGlvbi4KLSAgICAgICAgICAgIHRyYW5zZm9ybVZhbHVlLT5hZGRWYWx1ZShuZXcg
Q1NTUHJpbWl0aXZlVmFsdWUoYS0+ZlZhbHVlLCAoQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBl
cykgYS0+dW5pdCkpOworICAgICAgICAgICAgdHJhbnNmb3JtVmFsdWUtPmFkZFZhbHVlKENTU1By
aW1pdGl2ZVZhbHVlOjpjcmVhdGUoYS0+ZlZhbHVlLCAoQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRU
eXBlcykgYS0+dW5pdCkpOwogCiAgICAgICAgICAgICBhID0gYXJncy0+bmV4dCgpOwogICAgICAg
ICAgICAgaWYgKCFhKQpAQCAtNDE2NCwzNiArNDE1OSw0MCBAQCBNZWRpYVF1ZXJ5KiBDU1NQYXJz
ZXI6OnNpbmtGbG9hdGluZ01lZGlhCiAKIE1lZGlhTGlzdCogQ1NTUGFyc2VyOjpjcmVhdGVNZWRp
YUxpc3QoKQogewotICAgIE1lZGlhTGlzdCogbGlzdCA9IG5ldyBNZWRpYUxpc3Q7Ci0gICAgbV9w
YXJzZWRTdHlsZU9iamVjdHMuYXBwZW5kKGxpc3QpOwotICAgIHJldHVybiBsaXN0OworICAgIFJl
ZlB0cjxNZWRpYUxpc3Q+IGxpc3QgPSBNZWRpYUxpc3Q6OmNyZWF0ZSgpOworICAgIE1lZGlhTGlz
dCogcmVzdWx0ID0gbGlzdC5nZXQoKTsKKyAgICBtX3BhcnNlZFN0eWxlT2JqZWN0cy5hcHBlbmQo
bGlzdC5yZWxlYXNlKCkpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIENTU1J1bGUqIENTU1Bh
cnNlcjo6Y3JlYXRlQ2hhcnNldFJ1bGUoY29uc3QgUGFyc2VTdHJpbmcmIGNoYXJzZXQpCiB7CiAg
ICAgaWYgKCFtX3N0eWxlU2hlZXQpCiAgICAgICAgIHJldHVybiAwOwotICAgIENTU0NoYXJzZXRS
dWxlKiBydWxlID0gbmV3IENTU0NoYXJzZXRSdWxlKG1fc3R5bGVTaGVldCwgY2hhcnNldCk7Ci0g
ICAgbV9wYXJzZWRTdHlsZU9iamVjdHMuYXBwZW5kKHJ1bGUpOwotICAgIHJldHVybiBydWxlOwor
ICAgIFJlZlB0cjxDU1NDaGFyc2V0UnVsZT4gcnVsZSA9IENTU0NoYXJzZXRSdWxlOjpjcmVhdGUo
bV9zdHlsZVNoZWV0LCBjaGFyc2V0KTsKKyAgICBDU1NDaGFyc2V0UnVsZSogcmVzdWx0ID0gcnVs
ZS5nZXQoKTsKKyAgICBtX3BhcnNlZFN0eWxlT2JqZWN0cy5hcHBlbmQocnVsZS5yZWxlYXNlKCkp
OworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIENTU1J1bGUqIENTU1BhcnNlcjo6Y3JlYXRlSW1w
b3J0UnVsZShjb25zdCBQYXJzZVN0cmluZyYgdXJsLCBNZWRpYUxpc3QqIG1lZGlhKQogewogICAg
IGlmICghbWVkaWEgfHwgIW1fc3R5bGVTaGVldCkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgQ1NT
SW1wb3J0UnVsZSogcnVsZSA9IG5ldyBDU1NJbXBvcnRSdWxlKG1fc3R5bGVTaGVldCwgdXJsLCBt
ZWRpYSk7Ci0gICAgbV9wYXJzZWRTdHlsZU9iamVjdHMuYXBwZW5kKHJ1bGUpOwotICAgIHJldHVy
biBydWxlOworICAgIFJlZlB0cjxDU1NJbXBvcnRSdWxlPiBydWxlID0gQ1NTSW1wb3J0UnVsZTo6
Y3JlYXRlKG1fc3R5bGVTaGVldCwgdXJsLCBtZWRpYSk7CisgICAgQ1NTSW1wb3J0UnVsZSogcmVz
dWx0ID0gcnVsZS5nZXQoKTsKKyAgICBtX3BhcnNlZFN0eWxlT2JqZWN0cy5hcHBlbmQocnVsZS5y
ZWxlYXNlKCkpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIENTU1J1bGUqIENTU1BhcnNlcjo6
Y3JlYXRlTWVkaWFSdWxlKE1lZGlhTGlzdCogbWVkaWEsIENTU1J1bGVMaXN0KiBydWxlcykKIHsK
ICAgICBpZiAoIW1lZGlhIHx8ICFydWxlcyB8fCAhbV9zdHlsZVNoZWV0KQogICAgICAgICByZXR1
cm4gMDsKLSAgICBDU1NNZWRpYVJ1bGUqIHJ1bGUgPSBuZXcgQ1NTTWVkaWFSdWxlKG1fc3R5bGVT
aGVldCwgbWVkaWEsIHJ1bGVzKTsKLSAgICBtX3BhcnNlZFN0eWxlT2JqZWN0cy5hcHBlbmQocnVs
ZSk7Ci0gICAgcmV0dXJuIHJ1bGU7CisgICAgUmVmUHRyPENTU01lZGlhUnVsZT4gcnVsZSA9IENT
U01lZGlhUnVsZTo6Y3JlYXRlKG1fc3R5bGVTaGVldCwgbWVkaWEsIHJ1bGVzKTsKKyAgICBDU1NN
ZWRpYVJ1bGUqIHJlc3VsdCA9IHJ1bGUuZ2V0KCk7CisgICAgbV9wYXJzZWRTdHlsZU9iamVjdHMu
YXBwZW5kKHJ1bGUucmVsZWFzZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBDU1NSdWxl
TGlzdCogQ1NTUGFyc2VyOjpjcmVhdGVSdWxlTGlzdCgpCkBAIC00MjA3LDI0ICs0MjA2LDI2IEBA
IENTU1J1bGVMaXN0KiBDU1NQYXJzZXI6OmNyZWF0ZVJ1bGVMaXN0KCkKIAogQ1NTUnVsZSogQ1NT
UGFyc2VyOjpjcmVhdGVTdHlsZVJ1bGUoQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKQogewotICAgIENT
U1N0eWxlUnVsZSogcnVsZSA9IDA7CisgICAgQ1NTU3R5bGVSdWxlKiByZXN1bHQgPSAwOwogICAg
IGlmIChzZWxlY3RvcikgewotICAgICAgICBydWxlID0gbmV3IENTU1N0eWxlUnVsZShtX3N0eWxl
U2hlZXQpOwotICAgICAgICBtX3BhcnNlZFN0eWxlT2JqZWN0cy5hcHBlbmQocnVsZSk7CisgICAg
ICAgIFJlZlB0cjxDU1NTdHlsZVJ1bGU+IHJ1bGUgPSBDU1NTdHlsZVJ1bGU6OmNyZWF0ZShtX3N0
eWxlU2hlZXQpOwogICAgICAgICBydWxlLT5zZXRTZWxlY3RvcihzaW5rRmxvYXRpbmdTZWxlY3Rv
cihzZWxlY3RvcikpOwotICAgICAgICBydWxlLT5zZXREZWNsYXJhdGlvbihuZXcgQ1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb24ocnVsZSwgbV9wYXJzZWRQcm9wZXJ0aWVzLCBtX251bVBhcnNlZFBy
b3BlcnRpZXMpKTsKKyAgICAgICAgcnVsZS0+c2V0RGVjbGFyYXRpb24oQ1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb246OmNyZWF0ZShydWxlLmdldCgpLCBtX3BhcnNlZFByb3BlcnRpZXMsIG1fbnVt
UGFyc2VkUHJvcGVydGllcykpOworICAgICAgICByZXN1bHQgPSBydWxlLmdldCgpOworICAgICAg
ICBtX3BhcnNlZFN0eWxlT2JqZWN0cy5hcHBlbmQocnVsZS5yZWxlYXNlKCkpOwogICAgIH0KICAg
ICBjbGVhclByb3BlcnRpZXMoKTsKLSAgICByZXR1cm4gcnVsZTsKKyAgICByZXR1cm4gcmVzdWx0
OwogfQogCiBDU1NSdWxlKiBDU1NQYXJzZXI6OmNyZWF0ZUZvbnRGYWNlUnVsZSgpCiB7Ci0gICAg
Q1NTRm9udEZhY2VSdWxlKiBydWxlID0gbmV3IENTU0ZvbnRGYWNlUnVsZShtX3N0eWxlU2hlZXQp
OwotICAgIG1fcGFyc2VkU3R5bGVPYmplY3RzLmFwcGVuZChydWxlKTsKLSAgICBydWxlLT5zZXRE
ZWNsYXJhdGlvbihuZXcgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24ocnVsZSwgbV9wYXJzZWRQ
cm9wZXJ0aWVzLCBtX251bVBhcnNlZFByb3BlcnRpZXMpKTsKKyAgICBSZWZQdHI8Q1NTRm9udEZh
Y2VSdWxlPiBydWxlID0gQ1NTRm9udEZhY2VSdWxlOjpjcmVhdGUobV9zdHlsZVNoZWV0KTsKKyAg
ICBydWxlLT5zZXREZWNsYXJhdGlvbihDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y3JlYXRl
KHJ1bGUuZ2V0KCksIG1fcGFyc2VkUHJvcGVydGllcywgbV9udW1QYXJzZWRQcm9wZXJ0aWVzKSk7
CiAgICAgY2xlYXJQcm9wZXJ0aWVzKCk7Ci0gICAgcmV0dXJuIHJ1bGU7CisgICAgQ1NTRm9udEZh
Y2VSdWxlKiByZXN1bHQgPSBydWxlLmdldCgpOworICAgIG1fcGFyc2VkU3R5bGVPYmplY3RzLmFw
cGVuZChydWxlLnJlbGVhc2UoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogc3RhdGljIGlu
dCBjc3NQcm9wZXJ0eUlEKGNvbnN0IFVDaGFyKiBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGxlbmd0
aCkKSW5kZXg6IFdlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuaAkocmV2aXNpb24gMzQ1ODQpCisrKyBXZWJD
b3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMyArMjks
MTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDb3VudGVyOwogY2xhc3MgRGFzaGJv
YXJkUmVnaW9uOwotc3RydWN0IExlbmd0aDsKIGNsYXNzIFBhaXI7CiBjbGFzcyBSZWN0OwogY2xh
c3MgUmVuZGVyU3R5bGU7CiBjbGFzcyBTdHJpbmdJbXBsOwogCi10eXBlZGVmIGludCBFeGNlcHRp
b25Db2RlOworc3RydWN0IExlbmd0aDsKIAogY2xhc3MgQ1NTUHJpbWl0aXZlVmFsdWUgOiBwdWJs
aWMgQ1NTVmFsdWUgewogcHVibGljOgpAQCAtNjcsMjAgKzY2LDMwIEBAIHB1YmxpYzoKICAgICAg
ICAgQ1NTX1JFQ1QgPSAyNCwKICAgICAgICAgQ1NTX1JHQkNPTE9SID0gMjUsCiAgICAgICAgIENT
U19QQUlSID0gMTAwLCAvLyBXZSBlbnZpc2lvbiB0aGlzIGJlaW5nIGV4cG9zZWQgYXMgYSBtZWFu
cyBvZiBnZXR0aW5nIGNvbXB1dGVkIHN0eWxlIHZhbHVlcyBmb3IgcGFpcnMgKGJvcmRlci1zcGFj
aW5nL3JhZGl1cywgYmFja2dyb3VuZC1wb3NpdGlvbiwgZXRjLikKLSAgICAgICAgQ1NTX0RBU0hC
T0FSRF9SRUdJT04gPSAxMDEsIC8vIEZJWE1FOiBXaGF0IG9uIGVhcnRoIGlzIHRoaXMgZG9pbmcg
YXMgYSBwcmltaXRpdmUgdmFsdWU/IEl0IHNob3VsZCBub3QgYmUhCisgICAgICAgIENTU19EQVNI
Qk9BUkRfUkVHSU9OID0gMTAxLCAvLyBGSVhNRTogRGFzaGJvYXJkIHJlZ2lvbiBzaG91bGQgbm90
IGJlIGEgcHJpbWl0aXZlIHZhbHVlLgogICAgICAgICBDU1NfVU5JQ09ERV9SQU5HRSA9IDEwMgog
ICAgIH07CiAKLSAgICAvLyBGSVhNRTogaW50IHZzLiB1bnNpZ25lZCBvdmVybG9hZGluZyBpcyB0
b28gdHJpY2t5IGZvciBjb2xvciB2cy4gaWRlbnQKLSAgICBDU1NQcmltaXRpdmVWYWx1ZSgpOwot
ICAgIENTU1ByaW1pdGl2ZVZhbHVlKGludCBpZGVudCk7Ci0gICAgQ1NTUHJpbWl0aXZlVmFsdWUo
ZG91YmxlLCBVbml0VHlwZXMpOwotICAgIENTU1ByaW1pdGl2ZVZhbHVlKGNvbnN0IFN0cmluZyYs
IFVuaXRUeXBlcyk7Ci0gICAgQ1NTUHJpbWl0aXZlVmFsdWUodW5zaWduZWQgY29sb3IpOyAvLyBS
R0IgdmFsdWUKLSAgICBDU1NQcmltaXRpdmVWYWx1ZShjb25zdCBMZW5ndGgmKTsKLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBDU1NQcmltaXRpdmVWYWx1ZShUKTsgLy8gRGVmaW5lZCBpbiBDU1NQ
cmltaXRpdmVWYWx1ZU1hcHBpbmdzLmgKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBDU1NQcmlt
aXRpdmVWYWx1ZShUKiB2YWwpIHsgaW5pdChQYXNzUmVmUHRyPFQ+KHZhbCkpOyB9Ci0gICAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4gQ1NTUHJpbWl0aXZlVmFsdWUoUGFzc1JlZlB0cjxUPiB2YWwpIHsg
aW5pdCh2YWwpOyB9CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNy
ZWF0ZUlkZW50aWZpZXIoaW50IGlkZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBDU1NQcmltaXRpdmVWYWx1ZShpZGVudCkpOworICAgIH0KKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY3JlYXRlQ29sb3IodW5zaWduZWQgcmdiVmFsdWUpCisg
ICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENTU1ByaW1pdGl2ZVZhbHVlKHJnYlZh
bHVlKSk7CisgICAgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyBQYXNzUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiBjcmVhdGUoVCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUpKTsKKyAgICB9CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNyZWF0ZShkb3VibGUgdmFsdWUsIFVu
aXRUeXBlcyB0eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDU1NQcmlt
aXRpdmVWYWx1ZSh2YWx1ZSwgdHlwZSkpOworICAgIH0KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4gY3JlYXRlKGNvbnN0IFN0cmluZyYgdmFsdWUsIFVuaXRUeXBlcyB0
eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDU1NQcmltaXRpdmVWYWx1
ZSh2YWx1ZSwgdHlwZSkpOworICAgIH0KIAogICAgIHZpcnR1YWwgfkNTU1ByaW1pdGl2ZVZhbHVl
KCk7CiAKQEAgLTEwOCw5ICsxMTcsNiBAQCBwdWJsaWM6CiAgICAgZmxvYXQgY29tcHV0ZUxlbmd0
aEZsb2F0KFJlbmRlclN0eWxlKiwgZG91YmxlIG11bHRpcGxpZXIsIGJvb2wgY29tcHV0aW5nRm9u
dFNpemUgPSBmYWxzZSk7CiAgICAgZG91YmxlIGNvbXB1dGVMZW5ndGhEb3VibGUoUmVuZGVyU3R5
bGUqLCBkb3VibGUgbXVsdGlwbGllciA9IDEuMCwgYm9vbCBjb21wdXRpbmdGb250U2l6ZSA9IGZh
bHNlKTsKIAotICAgIC8vIHVzZSB3aXRoIGNhcmUhISEKLSAgICB2b2lkIHNldFByaW1pdGl2ZVR5
cGUodW5zaWduZWQgc2hvcnQgdHlwZSkgeyBtX3R5cGUgPSB0eXBlOyB9Ci0KICAgICBkb3VibGUg
Z2V0RG91YmxlVmFsdWUodW5zaWduZWQgc2hvcnQgdW5pdFR5cGUsIEV4Y2VwdGlvbkNvZGUmKTsK
ICAgICBkb3VibGUgZ2V0RG91YmxlVmFsdWUodW5zaWduZWQgc2hvcnQgdW5pdFR5cGUpOwogICAg
IGRvdWJsZSBnZXREb3VibGVWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUubnVtOyB9CkBA
IC0xNDIsMTAgKzE0OCw2IEBAIHB1YmxpYzoKIAogICAgIERhc2hib2FyZFJlZ2lvbiogZ2V0RGFz
aGJvYXJkUmVnaW9uVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgIT0gQ1NTX0RBU0hCT0FS
RF9SRUdJT04gPyAwIDogbV92YWx1ZS5yZWdpb247IH0KIAotICAgIHZpcnR1YWwgYm9vbCBpc1By
aW1pdGl2ZVZhbHVlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgdmlydHVhbCB1bnNp
Z25lZCBzaG9ydCBjc3NWYWx1ZVR5cGUoKSBjb25zdDsKLQogICAgIGludCBnZXRJZGVudCgpOwog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IG9wZXJhdG9yIFQoKSBjb25zdDsgLy8gRGVmaW5lZCBp
biBDU1NQcmltaXRpdmVWYWx1ZU1hcHBpbmdzLmgKIApAQCAtMTU1LDYgKzE1NywzMyBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCBib29sIGlzUXVpcmtWYWx1ZSgpIHsgcmV0dXJuIGZhbHNlOyB9CiAK
IHByb3RlY3RlZDoKKyAgICAvLyBGSVhNRTogaW50IHZzLiB1bnNpZ25lZCBvdmVybG9hZGluZyBp
cyB0b28gc3VidGxlIHRvIGRpc3Rpbmd1aXNoIHRoZSBjb2xvciBhbmQgaWRlbnRpZmllciBjYXNl
cy4KKyAgICBDU1NQcmltaXRpdmVWYWx1ZShpbnQgaWRlbnQpOworICAgIENTU1ByaW1pdGl2ZVZh
bHVlKGRvdWJsZSwgVW5pdFR5cGVzKTsKKyAgICBDU1NQcmltaXRpdmVWYWx1ZShjb25zdCBTdHJp
bmcmLCBVbml0VHlwZXMpOworCitwcml2YXRlOgorICAgIENTU1ByaW1pdGl2ZVZhbHVlKCk7Cisg
ICAgQ1NTUHJpbWl0aXZlVmFsdWUodW5zaWduZWQgY29sb3IpOyAvLyBSR0IgdmFsdWUKKyAgICBD
U1NQcmltaXRpdmVWYWx1ZShjb25zdCBMZW5ndGgmKTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+IENTU1ByaW1pdGl2ZVZhbHVlKFQpOyAvLyBEZWZpbmVkIGluIENTU1ByaW1pdGl2ZVZhbHVl
TWFwcGluZ3MuaAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IENTU1ByaW1pdGl2ZVZhbHVlKFQq
IHZhbCkgeyBpbml0KFBhc3NSZWZQdHI8VD4odmFsKSk7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBDU1NQcmltaXRpdmVWYWx1ZShQYXNzUmVmUHRyPFQ+IHZhbCkgeyBpbml0KHZhbCk7IH0K
KworICAgIHN0YXRpYyB2b2lkIGNyZWF0ZShpbnQpOyAvLyBjb21waWxlLXRpbWUgZ3VhcmQKKyAg
ICBzdGF0aWMgdm9pZCBjcmVhdGUodW5zaWduZWQpOyAvLyBjb21waWxlLXRpbWUgZ3VhcmQKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBvcGVyYXRvciBUKigpOyAvLyBjb21waWxlLXRpbWUgZ3Vh
cmQKKworICAgIHZvaWQgaW5pdChQYXNzUmVmUHRyPENvdW50ZXI+KTsKKyAgICB2b2lkIGluaXQo
UGFzc1JlZlB0cjxSZWN0Pik7CisgICAgdm9pZCBpbml0KFBhc3NSZWZQdHI8UGFpcj4pOworICAg
IHZvaWQgaW5pdChQYXNzUmVmUHRyPERhc2hib2FyZFJlZ2lvbj4pOyAvLyBGSVhNRTogRGFzaGJv
YXJkIHJlZ2lvbiBzaG91bGQgbm90IGJlIGEgcHJpbWl0aXZlIHZhbHVlLgorCisgICAgdmlydHVh
bCBib29sIGlzUHJpbWl0aXZlVmFsdWUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisKKyAgICB2
aXJ0dWFsIHVuc2lnbmVkIHNob3J0IGNzc1ZhbHVlVHlwZSgpIGNvbnN0OworCiAgICAgaW50IG1f
dHlwZTsKICAgICB1bmlvbiB7CiAgICAgICAgIGludCBpZGVudDsKQEAgLTE2NiwxNCArMTk1LDYg
QEAgcHJvdGVjdGVkOgogICAgICAgICBQYWlyKiBwYWlyOwogICAgICAgICBEYXNoYm9hcmRSZWdp
b24qIHJlZ2lvbjsKICAgICB9IG1fdmFsdWU7Ci0KLXByaXZhdGU6Ci0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gb3BlcmF0b3IgVCooKTsgLy8gY29tcGlsZS10aW1lIGd1YXJkCi0KLSAgICB2b2lk
IGluaXQoUGFzc1JlZlB0cjxDb3VudGVyPik7Ci0gICAgdm9pZCBpbml0KFBhc3NSZWZQdHI8UmVj
dD4pOwotICAgIHZvaWQgaW5pdChQYXNzUmVmUHRyPFBhaXI+KTsKLSAgICB2b2lkIGluaXQoUGFz
c1JlZlB0cjxEYXNoYm9hcmRSZWdpb24+KTsgLy8gRklYTUU6IFdoeSBpcyBkYXNoYm9hcmQgcmVn
aW9uIGEgcHJpbWl0aXZlIHZhbHVlPyBUaGlzIG1ha2VzIG5vIHNlbnNlLgogfTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9jc3MvQ1NTUXVpcmtQcmltaXRpdmVWYWx1
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU1F1aXJrUHJpbWl0aXZlVmFsdWUuaAko
cmV2aXNpb24gMzQ1ODQpCisrKyBXZWJDb3JlL2Nzcy9DU1NRdWlya1ByaW1pdGl2ZVZhbHVlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsOCArMSw2IEBACiAvKgotICogVGhpcyBmaWxlIGlzIHBhcnQg
b2YgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgotICoKICAqIChDKSAxOTk5LTIwMDMg
TGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwg
MjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAy
MDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwpAQCAtMjgsMTEgKzI2LDE3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIC8vIFRoaXMg
dmFsdWUgaXMgdXNlZCB0byBoYW5kbGUgcXVpcmt5IG1hcmdpbnMgaW4gcmVmbG93IHJvb3RzIChi
b2R5LCB0ZCwgYW5kIHRoKSBsaWtlIFdpbklFLgotLy8gVGhlIGJhc2ljIGlkZWEgaXMgdGhhdCBh
IHN0eWxlc2hlZXQgY2FuIHVzZSB0aGUgdmFsdWUgX19xZW0gKGZvciBxdWlya3kgZW0pIGluc3Rl
YWQgb2YgZW0KLS8vIGluIGEgc3R5bGVzaGVldC4gIFdoZW4gdGhlIHF1aXJreSB2YWx1ZSBpcyB1
c2VkLCBpZiB5b3UncmUgaW4gcXVpcmtzIG1vZGUsIHRoZSBtYXJnaW4gd2lsbAotLy8gY29sbGFw
c2UgYXdheSBpbnNpZGUgYSB0YWJsZSBjZWxsLgorLy8gVGhlIGJhc2ljIGlkZWEgaXMgdGhhdCBh
IHN0eWxlc2hlZXQgY2FuIHVzZSB0aGUgdmFsdWUgX19xZW0gKGZvciBxdWlya3kgZW0pIGluc3Rl
YWQgb2YgZW0uCisvLyBXaGVuIHRoZSBxdWlya3kgdmFsdWUgaXMgdXNlZCwgaWYgeW91J3JlIGlu
IHF1aXJrcyBtb2RlLCB0aGUgbWFyZ2luIHdpbGwgY29sbGFwc2UgYXdheQorLy8gaW5zaWRlIGEg
dGFibGUgY2VsbC4KIGNsYXNzIENTU1F1aXJrUHJpbWl0aXZlVmFsdWUgOiBwdWJsaWMgQ1NTUHJp
bWl0aXZlVmFsdWUgewogcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPENTU1F1aXJrUHJp
bWl0aXZlVmFsdWU+IGNyZWF0ZShkb3VibGUgdmFsdWUsIFVuaXRUeXBlcyB0eXBlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDU1NRdWlya1ByaW1pdGl2ZVZhbHVlKHZhbHVl
LCB0eXBlKSk7CisgICAgfQorCitwcml2YXRlOgogICAgIENTU1F1aXJrUHJpbWl0aXZlVmFsdWUo
ZG91YmxlIG51bSwgVW5pdFR5cGVzIHR5cGUpCiAgICAgICAgIDogQ1NTUHJpbWl0aXZlVmFsdWUo
bnVtLCB0eXBlKQogICAgIHsKSW5kZXg6IFdlYkNvcmUvY3NzL0NTU1JlZmxlY3RWYWx1ZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU1JlZmxlY3RWYWx1ZS5oCShyZXZpc2lvbiAzNDU4
NCkKKysrIFdlYkNvcmUvY3NzL0NTU1JlZmxlY3RWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00
MCw3ICs0MCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDU1NSZWZsZWN0VmFs
dWU+IGNyZWF0ZShDU1NSZWZsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiwKICAgICAgICAgUGFz
c1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gb2Zmc2V0LCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBt
YXNrKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyBDU1NSZWZsZWN0VmFsdWUoZGlyZWN0aW9u
LCBvZmZzZXQsIG1hc2spOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENTU1JlZmxlY3RW
YWx1ZShkaXJlY3Rpb24sIG9mZnNldCwgbWFzaykpOwogICAgIH0KIAogICAgIENTU1JlZmxlY3Rp
b25EaXJlY3Rpb24gZGlyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kaXJlY3Rpb247IH0KSW5k
ZXg6IFdlYkNvcmUvY3NzL0NTU1J1bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NT
U1J1bGUuY3BwCShyZXZpc2lvbiAzNDU4NCkKKysrIFdlYkNvcmUvY3NzL0NTU1J1bGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNCBAQAotLyoqCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBv
ZiB0aGUgRE9NIGltcGxlbWVudGF0aW9uIGZvciBLREUuCi0gKgorLyoKICAqIChDKSAxOTk5LTIw
MDMgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqIChDKSAyMDAyLTIwMDMgRGlyayBNdWVs
bGVyIChtdWVsbGVyQGtkZS5vcmcpCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDUsIDIwMDYs
IDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgpAQCAtMjUsNiArMjMsNyBAQAog
I2luY2x1ZGUgIkNTU1J1bGUuaCIKIAogI2luY2x1ZGUgIkNTU1N0eWxlU2hlZXQuaCIKKyNpbmNs
dWRlICJOb3RJbXBsZW1lbnRlZC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM1LDE4
ICszNCwxNCBAQCBDU1NTdHlsZVNoZWV0KiBDU1NSdWxlOjpwYXJlbnRTdHlsZVNoZWV0CiAKIENT
U1J1bGUqIENTU1J1bGU6OnBhcmVudFJ1bGUoKSBjb25zdAogeworICAgIC8vIEZJWE1FOiBJIGJl
bGlldmUgdGhpcyBhbHdheXMgcmV0dXJucyAwLgorICAgIC8vIEEgY29ycmVjdCBpbXBsZW1lbnRh
dGlvbiB3b3VsZCBoYXZlIHRvIGxvb2sgZmFydGhlciB1cCB0aGFuIGp1c3QgdGhlIHBhcmVudC4K
ICAgICByZXR1cm4gKHBhcmVudCgpICYmIHBhcmVudCgpLT5pc1J1bGUoKSkgPyBzdGF0aWNfY2Fz
dDxDU1NSdWxlKj4ocGFyZW50KCkpIDogMDsKIH0KIAotU3RyaW5nIENTU1J1bGU6OmNzc1RleHQo
KSBjb25zdAotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQhCi0gICAgcmV0dXJuIFN0cmluZygp
OwotfQotCiB2b2lkIENTU1J1bGU6OnNldENzc1RleHQoY29uc3QgU3RyaW5nJiAvKmNzc1RleHQq
LywgRXhjZXB0aW9uQ29kZSYgLyplYyovKQogewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQhCisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
V2ViQ29yZS9jc3MvQ1NTUnVsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU1J1bGUu
aAkocmV2aXNpb24gMzQ1ODQpCisrKyBXZWJDb3JlL2Nzcy9DU1NSdWxlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNiArMSw0IEBACiAvKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERPTSBp
bXBsZW1lbnRhdGlvbiBmb3IgS0RFLgotICoKICAqIChDKSAxOTk5LTIwMDMgTGFycyBLbm9sbCAo
a25vbGxAa2RlLm9yZykKICAqIChDKSAyMDAyLTIwMDMgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtk
ZS5vcmcpCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgpAQCAtMjQsMTYgKzIyLDE1IEBACiAjaWZuZGVmIENTU1J1bGVfaAog
I2RlZmluZSBDU1NSdWxlX2gKIAotI2luY2x1ZGUgIlN0eWxlQmFzZS5oIgorI2luY2x1ZGUgIkNT
U1N0eWxlU2hlZXQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBDU1NTdHlsZVNo
ZWV0OwotCiB0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwogCiBjbGFzcyBDU1NSdWxlIDogcHVi
bGljIFN0eWxlQmFzZSB7CiBwdWJsaWM6CisgICAgLy8gRklYTUU6IENoYW5nZSBuYW1lIHRvIFR5
cGUuCiAgICAgZW51bSBDU1NSdWxlVHlwZSB7CiAgICAgICAgIFVOS05PV05fUlVMRSwKICAgICAg
ICAgU1RZTEVfUlVMRSwKQEAgLTQ0LDIwICs0MSwyMyBAQCBwdWJsaWM6CiAgICAgICAgIFBBR0Vf
UlVMRQogICAgIH07CiAKLSAgICBDU1NSdWxlKFN0eWxlQmFzZSogcGFyZW50KQotICAgICAgICA6
IFN0eWxlQmFzZShwYXJlbnQpCi0gICAgewotICAgIH0KLQotICAgIHZpcnR1YWwgYm9vbCBpc1J1
bGUoKSB7IHJldHVybiB0cnVlOyB9Ci0KKyAgICAvLyBGSVhNRTogQ2hhbmdlIHRvIHJldHVybiBD
U1NSdWxlVHlwZS4KICAgICB2aXJ0dWFsIHVuc2lnbmVkIHNob3J0IHR5cGUoKSBjb25zdCA9IDA7
CiAKICAgICBDU1NTdHlsZVNoZWV0KiBwYXJlbnRTdHlsZVNoZWV0KCkgY29uc3Q7CiAgICAgQ1NT
UnVsZSogcGFyZW50UnVsZSgpIGNvbnN0OwogCi0gICAgdmlydHVhbCBTdHJpbmcgY3NzVGV4dCgp
IGNvbnN0OworICAgIHZpcnR1YWwgU3RyaW5nIGNzc1RleHQoKSBjb25zdCA9IDA7CiAgICAgdm9p
ZCBzZXRDc3NUZXh0KGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKKworcHJvdGVjdGVk
OgorICAgIENTU1J1bGUoQ1NTU3R5bGVTaGVldCogcGFyZW50KQorICAgICAgICA6IFN0eWxlQmFz
ZShwYXJlbnQpCisgICAgeworICAgIH0KKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIGJvb2wgaXNS
dWxlKCkgeyByZXR1cm4gdHJ1ZTsgfQogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogV2ViQ29yZS9jc3MvQ1NTU3R5bGVEZWNsYXJhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9jc3MvQ1NTU3R5bGVEZWNsYXJhdGlvbi5jcHAJKHJldmlzaW9uIDM0NTg0KQorKysgV2Vi
Q29yZS9jc3MvQ1NTU3R5bGVEZWNsYXJhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDEx
ICszOCw2IEBAIENTU1N0eWxlRGVjbGFyYXRpb246OkNTU1N0eWxlRGVjbGFyYXRpb24KIHsKIH0K
IAotYm9vbCBDU1NTdHlsZURlY2xhcmF0aW9uOjppc1N0eWxlRGVjbGFyYXRpb24oKQotewotICAg
IHJldHVybiB0cnVlOwotfQotCiBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NTdHlsZURlY2xhcmF0
aW9uOjpnZXRQcm9wZXJ0eUNTU1ZhbHVlKGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKQogewog
ICAgIGludCBwcm9wSUQgPSBjc3NQcm9wZXJ0eUlEKHByb3BlcnR5TmFtZSk7CkBAIC0xNTAsNyAr
MTQ1LDcgQEAgUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gQwogICAgICAg
ICBpZiAodmFsdWUpCiAgICAgICAgICAgICBsaXN0LmFwcGVuZChDU1NQcm9wZXJ0eShzZXRbaV0s
IHZhbHVlLnJlbGVhc2UoKSwgZmFsc2UpKTsKICAgICB9Ci0gICAgcmV0dXJuIG5ldyBDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbigwLCBsaXN0KTsKKyAgICByZXR1cm4gQ1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb246OmNyZWF0ZShsaXN0KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogV2ViQ29yZS9jc3MvQ1NTU3R5bGVEZWNsYXJhdGlvbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvY3NzL0NTU1N0eWxlRGVjbGFyYXRpb24uaAkocmV2aXNpb24gMzQ1ODQpCisrKyBXZWJD
b3JlL2Nzcy9DU1NTdHlsZURlY2xhcmF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDggKzM0
LDYgQEAgdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKIAogY2xhc3MgQ1NTU3R5bGVEZWNsYXJh
dGlvbiA6IHB1YmxpYyBTdHlsZUJhc2UgewogcHVibGljOgotICAgIHZpcnR1YWwgYm9vbCBpc1N0
eWxlRGVjbGFyYXRpb24oKTsKLQogICAgIHN0YXRpYyBib29sIGlzUHJvcGVydHlOYW1lKGNvbnN0
IFN0cmluZyYpOwogCiAgICAgQ1NTUnVsZSogcGFyZW50UnVsZSgpIGNvbnN0OwpJbmRleDogV2Vi
Q29yZS9jc3MvQ1NTU3R5bGVSdWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NT
dHlsZVJ1bGUuY3BwCShyZXZpc2lvbiAzNDU4NCkKKysrIFdlYkNvcmUvY3NzL0NTU1N0eWxlUnVs
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsOSArMSw3IEBACi0vKioKLSAqIFRoaXMgZmlsZSBp
cyBwYXJ0IG9mIHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9yIEtERS4KLSAqCisvKgogICogKEMp
IDE5OTktMjAwMyBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogKEMpIDIwMDItMjAwMyBE
aXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwMiwgMjAw
NSwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDAyLCAyMDA1
LCAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwpAQCAtMjksNyArMjcsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNTU1N0
eWxlUnVsZTo6Q1NTU3R5bGVSdWxlKFN0eWxlQmFzZSogcGFyZW50KQorQ1NTU3R5bGVSdWxlOjpD
U1NTdHlsZVJ1bGUoQ1NTU3R5bGVTaGVldCogcGFyZW50KQogICAgIDogQ1NTUnVsZShwYXJlbnQp
CiAgICAgLCBtX3NlbGVjdG9yKDApCiB7CkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NTdHlsZVJ1bGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NTdHlsZVJ1bGUuaAkocmV2aXNpb24gMzQ1
ODQpCisrKyBXZWJDb3JlL2Nzcy9DU1NTdHlsZVJ1bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw5
ICsxLDcgQEAKIC8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRE9NIGltcGxlbWVudGF0
aW9uIGZvciBLREUuCi0gKgogICogKEMpIDE5OTktMjAwMyBMYXJzIEtub2xsIChrbm9sbEBrZGUu
b3JnKQogICogKEMpIDIwMDItMjAwMyBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKLSAq
IENvcHlyaWdodCAoQykgMjAwMiwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJp
Z2h0IChDKSAyMDAyLCAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzMsMjMgKzMxLDE5IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIGNsYXNzIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOwogY2xhc3MgQ1NTU2VsZWN0b3I7
CiAKLXR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7Ci0KIGNsYXNzIENTU1N0eWxlUnVsZSA6IHB1
YmxpYyBDU1NSdWxlIHsKIHB1YmxpYzoKLSAgICBDU1NTdHlsZVJ1bGUoU3R5bGVCYXNlKiBwYXJl
bnQpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPENTU1N0eWxlUnVsZT4gY3JlYXRlKENTU1N0eWxl
U2hlZXQqIHBhcmVudCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ1NTU3R5
bGVSdWxlKHBhcmVudCkpOworICAgIH0KICAgICB2aXJ0dWFsIH5DU1NTdHlsZVJ1bGUoKTsKIAot
ICAgIHZpcnR1YWwgYm9vbCBpc1N0eWxlUnVsZSgpIHsgcmV0dXJuIHRydWU7IH0KLQogICAgIFN0
cmluZyBzZWxlY3RvclRleHQoKSBjb25zdDsKICAgICB2b2lkIHNldFNlbGVjdG9yVGV4dChjb25z
dCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJik7CiAKICAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbiogc3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0eWxlLmdldCgpOyB9CiAKLSAgICAvLyBJ
bmhlcml0ZWQgZnJvbSBDU1NSdWxlCi0gICAgdmlydHVhbCB1bnNpZ25lZCBzaG9ydCB0eXBlKCkg
Y29uc3QgeyByZXR1cm4gU1RZTEVfUlVMRTsgfQotCiAgICAgdmlydHVhbCBTdHJpbmcgY3NzVGV4
dCgpIGNvbnN0OwogCiAgICAgLy8gTm90IHBhcnQgb2YgdGhlIENTU09NCkBAIC02MSw3ICs1NSwx
NCBAQCBwdWJsaWM6CiAgICAgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKCkgeyByZXR1cm4gbV9zZWxl
Y3RvcjsgfQogICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBkZWNsYXJhdGlvbigpIHsg
cmV0dXJuIG1fc3R5bGUuZ2V0KCk7IH0KICAKLXByb3RlY3RlZDoKK3ByaXZhdGU6CisgICAgQ1NT
U3R5bGVSdWxlKENTU1N0eWxlU2hlZXQqIHBhcmVudCk7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNT
dHlsZVJ1bGUoKSB7IHJldHVybiB0cnVlOyB9CisKKyAgICAvLyBJbmhlcml0ZWQgZnJvbSBDU1NS
dWxlCisgICAgdmlydHVhbCB1bnNpZ25lZCBzaG9ydCB0eXBlKCkgY29uc3QgeyByZXR1cm4gU1RZ
TEVfUlVMRTsgfQorCiAgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBtX3N0
eWxlOwogICAgIENTU1NlbGVjdG9yKiBtX3NlbGVjdG9yOwogfTsKSW5kZXg6IFdlYkNvcmUvY3Nz
L0NTU1N0eWxlU2VsZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU1N0eWxl
U2VsZWN0b3IuY3BwCShyZXZpc2lvbiAzNDU4OSkKKysrIFdlYkNvcmUvY3NzL0NTU1N0eWxlU2Vs
ZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSAiQ1NT
U3R5bGVSdWxlLmgiCiAjaW5jbHVkZSAiQ1NTU3R5bGVTaGVldC5oIgogI2luY2x1ZGUgIkNTU1Rp
bWluZ0Z1bmN0aW9uVmFsdWUuaCIKKyNpbmNsdWRlICJDU1NUcmFuc2Zvcm1WYWx1ZS5oIgogI2lu
Y2x1ZGUgIkNTU1ZhbHVlTGlzdC5oIgogI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCiAjaW5jbHVk
ZSAiQ291bnRlci5oIgpAQCAtMzQ4LDcgKzM0OSw3IEBAIENTU1N0eWxlU2VsZWN0b3I6OkNTU1N0
eWxlU2VsZWN0b3IoRG9jdW0KIAogICAgIC8vIEZJWE1FOiBUaGlzIHN1Y2tzISBUaGUgdXNlciBz
aGVldCBpcyByZXBhcnNlZCBldmVyeSB0aW1lIQogICAgIGlmICghdXNlclN0eWxlU2hlZXQuaXNF
bXB0eSgpKSB7Ci0gICAgICAgIG1fdXNlclNoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQoZG9jKTsK
KyAgICAgICAgbV91c2VyU2hlZXQgPSBDU1NTdHlsZVNoZWV0OjpjcmVhdGUoZG9jKTsKICAgICAg
ICAgbV91c2VyU2hlZXQtPnBhcnNlU3RyaW5nKHVzZXJTdHlsZVNoZWV0LCBzdHJpY3RQYXJzaW5n
KTsKIAogICAgICAgICBtX3VzZXJTdHlsZSA9IG5ldyBDU1NSdWxlU2V0KCk7CkBAIC0zOTAsOSAr
MzkxLDcgQEAgQ1NTU3R5bGVTZWxlY3Rvcjo6fkNTU1N0eWxlU2VsZWN0b3IoKQogCiBzdGF0aWMg
Q1NTU3R5bGVTaGVldCogcGFyc2VVQVNoZWV0KGNvbnN0IGNoYXIqIGNoYXJhY3RlcnMsIHVuc2ln
bmVkIHNpemUpCiB7Ci0gICAgQ1NTU3R5bGVTaGVldCogY29uc3QgcGFyZW50ID0gMDsKLSAgICBD
U1NTdHlsZVNoZWV0KiBzaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KHBhcmVudCk7Ci0gICAgc2hl
ZXQtPnJlZigpOyAvLyBsZWFrIHRoZSBzaGVldCBvbiBwdXJwb3NlCisgICAgQ1NTU3R5bGVTaGVl
dCogc2hlZXQgPSBDU1NTdHlsZVNoZWV0OjpjcmVhdGUoKS5yZWxlYXNlUmVmKCk7IC8vIGxlYWsg
dGhlIHNoZWV0IG9uIHB1cnBvc2UKICAgICBzaGVldC0+cGFyc2VTdHJpbmcoU3RyaW5nKGNoYXJh
Y3RlcnMsIHNpemUpKTsKICAgICByZXR1cm4gc2hlZXQ7CiB9CkBAIC0yMTc1LDcgKzIxNzQsNyBA
QCB2b2lkIENTU1J1bGVTZXQ6OmFkZFJ1bGUoQ1NTU3R5bGVSdWxlKiByCiAKIHZvaWQgQ1NTUnVs
ZVNldDo6YWRkUnVsZXNGcm9tU2hlZXQoQ1NTU3R5bGVTaGVldCogc2hlZXQsIGNvbnN0IE1lZGlh
UXVlcnlFdmFsdWF0b3ImIG1lZGl1bSwgQ1NTU3R5bGVTZWxlY3Rvciogc3R5bGVTZWxlY3RvcikK
IHsKLSAgICBpZiAoIXNoZWV0IHx8ICFzaGVldC0+aXNDU1NTdHlsZVNoZWV0KCkpCisgICAgaWYg
KCFzaGVldCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gTm8gbWVkaWEgaW1wbGllcyAiYWxs
IiwgYnV0IGlmIGEgbWVkaWEgbGlzdCBleGlzdHMgaXQgbXVzdApAQCAtNDQ3Nyw4ICs0NDc2LDcg
QEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KGludAogICAgICAgICAgICAg
ICAgICAgICByZXN1bHQgKj0gMzsKICAgICAgICAgICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVW
YWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZVRoaWNrKQogICAgICAgICAgICAgICAgICAgICBy
ZXN1bHQgKj0gNTsKLSAgICAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSB2YWwocmVzdWx0
LCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0VNUyk7Ci0gICAgICAgICAgICAgICAgd2lkdGggPSB2
YWwuY29tcHV0ZUxlbmd0aEZsb2F0KG1fc3R5bGUsIHpvb21GYWN0b3IpOworICAgICAgICAgICAg
ICAgIHdpZHRoID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShyZXN1bHQsIENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfRU1TKS0+Y29tcHV0ZUxlbmd0aEZsb2F0KG1fc3R5bGUsIHpvb21GYWN0b3Ip
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZGVm
YXVsdDoKSW5kZXg6IFdlYkNvcmUvY3NzL0NTU1N0eWxlU2hlZXQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvY3NzL0NTU1N0eWxlU2hlZXQuY3BwCShyZXZpc2lvbiAzNDU4NCkKKysrIFdlYkNv
cmUvY3NzL0NTU1N0eWxlU2hlZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzYsNyArMTc2LDcg
QEAgdm9pZCBDU1NTdHlsZVNoZWV0OjpjaGVja0xvYWRlZCgpCiAgICAgICAgIHJldHVybjsKICAg
ICBpZiAocGFyZW50KCkpCiAgICAgICAgIHBhcmVudCgpLT5jaGVja0xvYWRlZCgpOwotICAgIG1f
bG9hZENvbXBsZXRlZCA9IG1fcGFyZW50Tm9kZSA/IG1fcGFyZW50Tm9kZS0+c2hlZXRMb2FkZWQo
KSA6IHRydWU7CisgICAgbV9sb2FkQ29tcGxldGVkID0gb3duZXJOb2RlKCkgPyBvd25lck5vZGUo
KS0+c2hlZXRMb2FkZWQoKSA6IHRydWU7CiB9CiAKIERvY0xvYWRlciAqQ1NTU3R5bGVTaGVldDo6
ZG9jTG9hZGVyKCkKSW5kZXg6IFdlYkNvcmUvY3NzL0NTU1N0eWxlU2hlZXQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmgJKHJldmlzaW9uIDM0NTg0KQorKysgV2Vi
Q29yZS9jc3MvQ1NTU3R5bGVTaGVldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwxNiArMzYsMjkg
QEAgdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKIAogY2xhc3MgQ1NTU3R5bGVTaGVldCA6IHB1
YmxpYyBTdHlsZVNoZWV0IHsKIHB1YmxpYzoKLSAgICBDU1NTdHlsZVNoZWV0KE5vZGUqIHBhcmVu
dE5vZGUsIGNvbnN0IFN0cmluZyYgaHJlZiA9IFN0cmluZygpLCBjb25zdCBTdHJpbmcmIGNoYXJz
ZXQgPSBTdHJpbmcoKSk7Ci0gICAgQ1NTU3R5bGVTaGVldChDU1NTdHlsZVNoZWV0KiBwYXJlbnRT
aGVldCwgY29uc3QgU3RyaW5nJiBocmVmID0gU3RyaW5nKCksIGNvbnN0IFN0cmluZyYgY2hhcnNl
dCA9IFN0cmluZygpKTsKLSAgICBDU1NTdHlsZVNoZWV0KENTU1J1bGUqIG93bmVyUnVsZSwgY29u
c3QgU3RyaW5nJiBocmVmID0gU3RyaW5nKCksIGNvbnN0IFN0cmluZyYgY2hhcnNldCA9IFN0cmlu
ZygpKTsKLSAgICAKLSAgICB+Q1NTU3R5bGVTaGVldCgpOwotICAgIAotICAgIHZpcnR1YWwgYm9v
bCBpc0NTU1N0eWxlU2hlZXQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICB2aXJ0dWFs
IFN0cmluZyB0eXBlKCkgY29uc3QgeyByZXR1cm4gInRleHQvY3NzIjsgfQorICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPENTU1N0eWxlU2hlZXQ+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IENTU1N0eWxlU2hlZXQoc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldCo+KDAp
LCBTdHJpbmcoKSwgU3RyaW5nKCkpKTsKKyAgICB9CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q1NT
U3R5bGVTaGVldD4gY3JlYXRlKE5vZGUqIG93bmVyTm9kZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgQ1NTU3R5bGVTaGVldChvd25lck5vZGUsIFN0cmluZygpLCBTdHJpbmco
KSkpOworICAgIH0KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDU1NTdHlsZVNoZWV0PiBjcmVhdGUo
Tm9kZSogb3duZXJOb2RlLCBjb25zdCBTdHJpbmcmIGhyZWYpCisgICAgeworICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IENTU1N0eWxlU2hlZXQob3duZXJOb2RlLCBocmVmLCBTdHJpbmcoKSkp
OworICAgIH0KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDU1NTdHlsZVNoZWV0PiBjcmVhdGUoTm9k
ZSogb3duZXJOb2RlLCBjb25zdCBTdHJpbmcmIGhyZWYsIGNvbnN0IFN0cmluZyYgY2hhcnNldCkK
KyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ1NTU3R5bGVTaGVldChvd25lck5v
ZGUsIGhyZWYsIGNoYXJzZXQpKTsKKyAgICB9CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTU3R5
bGVTaGVldD4gY3JlYXRlKENTU1J1bGUqIG93bmVyUnVsZSwgY29uc3QgU3RyaW5nJiBocmVmLCBj
b25zdCBTdHJpbmcmIGNoYXJzZXQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IENTU1N0eWxlU2hlZXQob3duZXJSdWxlLCBocmVmLCBjaGFyc2V0KSk7CisgICAgfQogCisgICAg
dmlydHVhbCB+Q1NTU3R5bGVTaGVldCgpOworICAgIAogICAgIENTU1J1bGUqIG93bmVyUnVsZSgp
IGNvbnN0OwogICAgIFBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IGNzc1J1bGVzKGJvb2wgb21pdENo
YXJzZXRSdWxlcyA9IGZhbHNlKTsKICAgICB1bnNpZ25lZCBpbnNlcnRSdWxlKGNvbnN0IFN0cmlu
ZyYgcnVsZSwgdW5zaWduZWQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmKTsKQEAgLTc1LDcgKzg4LDE0
IEBAIHB1YmxpYzoKICAgICAKICAgICB2aXJ0dWFsIHZvaWQgYWRkU3VicmVzb3VyY2VVUkxTdHJp
bmdzKEhhc2hTZXQ8U3RyaW5nPiYsIGNvbnN0IFN0cmluZyYgYmFzZVVSTCkgY29uc3Q7CiAKLXBy
b3RlY3RlZDoKK3ByaXZhdGU6CisgICAgQ1NTU3R5bGVTaGVldChOb2RlKiBvd25lck5vZGUsIGNv
bnN0IFN0cmluZyYgaHJlZiwgY29uc3QgU3RyaW5nJiBjaGFyc2V0KTsKKyAgICBDU1NTdHlsZVNo
ZWV0KENTU1N0eWxlU2hlZXQqIHBhcmVudFNoZWV0LCBjb25zdCBTdHJpbmcmIGhyZWYsIGNvbnN0
IFN0cmluZyYgY2hhcnNldCk7CisgICAgQ1NTU3R5bGVTaGVldChDU1NSdWxlKiBvd25lclJ1bGUs
IGNvbnN0IFN0cmluZyYgaHJlZiwgY29uc3QgU3RyaW5nJiBjaGFyc2V0KTsKKyAgICAKKyAgICB2
aXJ0dWFsIGJvb2wgaXNDU1NTdHlsZVNoZWV0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAg
IHZpcnR1YWwgU3RyaW5nIHR5cGUoKSBjb25zdCB7IHJldHVybiAidGV4dC9jc3MiOyB9CisKICAg
ICBEb2N1bWVudCogbV9kb2M7CiAgICAgQ1NTTmFtZXNwYWNlKiBtX25hbWVzcGFjZXM7CiAgICAg
U3RyaW5nIG1fY2hhcnNldDsKSW5kZXg6IFdlYkNvcmUvY3NzL0NTU1RpbWluZ0Z1bmN0aW9uVmFs
dWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NUaW1pbmdGdW5jdGlvblZhbHVlLmgJ
KHJldmlzaW9uIDM0NTg0KQorKysgV2ViQ29yZS9jc3MvQ1NTVGltaW5nRnVuY3Rpb25WYWx1ZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
NyBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIyLDM1ICsyMiw0MCBAQAogICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLworCiAjaWZuZGVmIENTU1RpbWluZ0Z1bmN0aW9uVmFs
dWVfaAogI2RlZmluZSBDU1NUaW1pbmdGdW5jdGlvblZhbHVlX2gKIAogI2luY2x1ZGUgIkNTU1Zh
bHVlLmgiCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRy
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQ1NTVGltaW5nRnVuY3Rpb25WYWx1
ZSA6IHB1YmxpYyBDU1NWYWx1ZQoteworY2xhc3MgQ1NTVGltaW5nRnVuY3Rpb25WYWx1ZSA6IHB1
YmxpYyBDU1NWYWx1ZSB7CiBwdWJsaWM6Ci0gICAgQ1NTVGltaW5nRnVuY3Rpb25WYWx1ZShkb3Vi
bGUgeDEsIGRvdWJsZSB5MSwgZG91YmxlIHgyLCBkb3VibGUgeTIpCi0gICAgOiBtX3gxKHgxKQot
ICAgICwgbV95MSh5MSkKLSAgICAsIG1feDIoeDIpCi0gICAgLCBtX3kyKHkyKQorICAgIHN0YXRp
YyBQYXNzUmVmUHRyPENTU1RpbWluZ0Z1bmN0aW9uVmFsdWU+IGNyZWF0ZShkb3VibGUgeDEsIGRv
dWJsZSB5MSwgZG91YmxlIHgyLCBkb3VibGUgeTIpCiAgICAgeworICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IENTU1RpbWluZ0Z1bmN0aW9uVmFsdWUoeDEsIHkxLCB4MiwgeTIpKTsKICAgICB9
CiAKICAgICB2aXJ0dWFsIFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIGJv
b2wgaXNUcmFuc2l0aW9uVGltaW5nRnVuY3Rpb25WYWx1ZSgpIHsgcmV0dXJuIHRydWU7IH0KLSAg
ICAKICAgICBkb3VibGUgeDEoKSBjb25zdCB7IHJldHVybiBtX3gxOyB9CiAgICAgZG91YmxlIHkx
KCkgY29uc3QgeyByZXR1cm4gbV95MTsgfQogICAgIGRvdWJsZSB4MigpIGNvbnN0IHsgcmV0dXJu
IG1feDI7IH0KICAgICBkb3VibGUgeTIoKSBjb25zdCB7IHJldHVybiBtX3kyOyB9CiAKIHByaXZh
dGU6CisgICAgQ1NTVGltaW5nRnVuY3Rpb25WYWx1ZShkb3VibGUgeDEsIGRvdWJsZSB5MSwgZG91
YmxlIHgyLCBkb3VibGUgeTIpCisgICAgICAgIDogbV94MSh4MSkKKyAgICAgICAgLCBtX3kxKHkx
KQorICAgICAgICAsIG1feDIoeDIpCisgICAgICAgICwgbV95Mih5MikKKyAgICB7CisgICAgfQor
CisgICAgdmlydHVhbCBib29sIGlzVHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uVmFsdWUoKSB7IHJl
dHVybiB0cnVlOyB9CisgICAgCiAgICAgZG91YmxlIG1feDE7CiAgICAgZG91YmxlIG1feTE7CiAg
ICAgZG91YmxlIG1feDI7CkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NUcmFuc2Zvcm1WYWx1ZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTVHJhbnNmb3JtVmFsdWUuY3BwCShyZXZpc2lv
biAzNDU4NCkKKysrIFdlYkNvcmUvY3NzL0NTU1RyYW5zZm9ybVZhbHVlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMjUsMjggKzI1LDMzIEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJD
U1NUcmFuc2Zvcm1WYWx1ZS5oIgorCisjaW5jbHVkZSAiQ1NTVmFsdWVMaXN0LmgiCiAjaW5jbHVk
ZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIENTU1RyYW5zZm9ybVZhbHVlOjpDU1NUcmFuc2Zvcm1WYWx1ZShU
cmFuc2Zvcm1PcGVyYXRpb25UeXBlIG9wKQotOiBtX3R5cGUob3ApCi17fQorICAgIDogbV90eXBl
KG9wKQoreworfQogCiBDU1NUcmFuc2Zvcm1WYWx1ZTo6fkNTU1RyYW5zZm9ybVZhbHVlKCkKLXt9
Cit7Cit9CiAKLXZvaWQgQ1NTVHJhbnNmb3JtVmFsdWU6OmFkZFZhbHVlKENTU1ZhbHVlKiB2YWwp
Cit2b2lkIENTU1RyYW5zZm9ybVZhbHVlOjphZGRWYWx1ZShQYXNzUmVmUHRyPENTU1ZhbHVlPiB2
YWwpCiB7CiAgICAgaWYgKCFtX3ZhbHVlcykKLSAgICAgICAgbV92YWx1ZXMgPSBuZXcgQ1NTVmFs
dWVMaXN0OworICAgICAgICBtX3ZhbHVlcyA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlQ29tbWFTZXBh
cmF0ZWQoKTsKICAgICBtX3ZhbHVlcy0+YXBwZW5kKHZhbCk7CiB9CiAKIFN0cmluZyBDU1NUcmFu
c2Zvcm1WYWx1ZTo6Y3NzVGV4dCgpIGNvbnN0CiB7CiAgICAgU3RyaW5nIHJlc3VsdDsKLSAgICBz
d2l0Y2gobV90eXBlKSB7CisgICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICAgICAgY2FzZSBTY2Fs
ZVRyYW5zZm9ybU9wZXJhdGlvbjoKICAgICAgICAgICAgIHJlc3VsdCArPSAic2NhbGUoIjsKICAg
ICAgICAgICAgIGJyZWFrOwpJbmRleDogV2ViQ29yZS9jc3MvQ1NTVHJhbnNmb3JtVmFsdWUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NUcmFuc2Zvcm1WYWx1ZS5oCShyZXZpc2lvbiAz
NDU4NCkKKysrIFdlYkNvcmUvY3NzL0NTU1RyYW5zZm9ybVZhbHVlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTI0LDEzICsyNCwxNCBAQAogICovCiAKICNpbmNsdWRlICJDU1NWYWx1ZS5oIgotI2luY2x1ZGUg
IkNTU1ZhbHVlTGlzdC5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIENTU1RyYW5zZm9y
bVZhbHVlIDogcHVibGljIENTU1ZhbHVlCi17CitjbGFzcyBDU1NWYWx1ZUxpc3Q7CisKK2NsYXNz
IENTU1RyYW5zZm9ybVZhbHVlIDogcHVibGljIENTU1ZhbHVlIHsKIHB1YmxpYzoKICAgICBlbnVt
IFRyYW5zZm9ybU9wZXJhdGlvblR5cGUgewogICAgICAgICBVbmtub3duVHJhbnNmb3JtT3BlcmF0
aW9uLApAQCAtNDcsMTcgKzQ4LDIzIEBAIHB1YmxpYzoKICAgICAgICAgTWF0cml4VHJhbnNmb3Jt
T3BlcmF0aW9uCiAgICAgfTsKIAotICAgIENTU1RyYW5zZm9ybVZhbHVlKFRyYW5zZm9ybU9wZXJh
dGlvblR5cGUpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPENTU1RyYW5zZm9ybVZhbHVlPiBjcmVh
dGUoVHJhbnNmb3JtT3BlcmF0aW9uVHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBDU1NUcmFuc2Zvcm1WYWx1ZSh0eXBlKSk7CisgICAgfQorCiAgICAgdmlydHVh
bCB+Q1NTVHJhbnNmb3JtVmFsdWUoKTsKIAotICAgIHZvaWQgYWRkVmFsdWUoQ1NTVmFsdWUqKTsK
KyAgICB2b2lkIGFkZFZhbHVlKFBhc3NSZWZQdHI8Q1NTVmFsdWU+KTsKICAgICAKICAgICB2aXJ0
dWFsIFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7CiAgCiAgICAgVHJhbnNmb3JtT3BlcmF0aW9uVHlw
ZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CiAgICAgQ1NTVmFsdWVMaXN0KiB2YWx1
ZXMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5nZXQoKTsgfQogICAgIAotcHJvdGVjdGVkOgor
cHJpdmF0ZToKKyAgICBDU1NUcmFuc2Zvcm1WYWx1ZShUcmFuc2Zvcm1PcGVyYXRpb25UeXBlKTsK
KwogICAgIFRyYW5zZm9ybU9wZXJhdGlvblR5cGUgbV90eXBlOwogICAgIFJlZlB0cjxDU1NWYWx1
ZUxpc3Q+IG1fdmFsdWVzOwogfTsKSW5kZXg6IFdlYkNvcmUvY3NzL0NTU1VuaWNvZGVSYW5nZVZh
bHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTVW5pY29kZVJhbmdlVmFsdWUuaAko
cmV2aXNpb24gMzQ1ODQpCisrKyBXZWJDb3JlL2Nzcy9DU1NVbmljb2RlUmFuZ2VWYWx1ZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNywxNiArMjcsMTYgQEAKICNkZWZpbmUgQ1NTVW5pY29kZVJhbmdl
VmFsdWVfaAogCiAjaW5jbHVkZSAiQ1NTVmFsdWUuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0
ci5oPgogI2luY2x1ZGUgPHd0Zi91bmljb2RlL1VuaWNvZGUuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjbGFzcyBDU1NVbmljb2RlUmFuZ2VWYWx1ZSA6IHB1YmxpYyBDU1NWYWx1ZSB7CiBw
dWJsaWM6Ci0gICAgQ1NTVW5pY29kZVJhbmdlVmFsdWUoVUNoYXIzMiBmcm9tLCBVQ2hhcjMyIHRv
KQotICAgICAgICA6IG1fZnJvbShmcm9tKQotICAgICAgICAsIG1fdG8odG8pCisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8Q1NTVW5pY29kZVJhbmdlVmFsdWU+IGNyZWF0ZShVQ2hhcjMyIGZyb20sIFVD
aGFyMzIgdG8pCiAgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENTU1VuaWNvZGVS
YW5nZVZhbHVlKGZyb20sIHRvKSk7CiAgICAgfQogCiAgICAgdmlydHVhbCB+Q1NTVW5pY29kZVJh
bmdlVmFsdWUoKTsKQEAgLTQ3LDYgKzQ3LDEyIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFN0cmlu
ZyBjc3NUZXh0KCkgY29uc3Q7CiAKIHByaXZhdGU6CisgICAgQ1NTVW5pY29kZVJhbmdlVmFsdWUo
VUNoYXIzMiBmcm9tLCBVQ2hhcjMyIHRvKQorICAgICAgICA6IG1fZnJvbShmcm9tKQorICAgICAg
ICAsIG1fdG8odG8pCisgICAgeworICAgIH0KKwogICAgIFVDaGFyMzIgbV9mcm9tOwogICAgIFVD
aGFyMzIgbV90bzsKIH07CkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NVbmtub3duUnVsZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU1Vua25vd25SdWxlLmgJKHJldmlzaW9uIDM0NTg0KQor
KysgV2ViQ29yZS9jc3MvQ1NTVW5rbm93blJ1bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw5ICsx
LDcgQEAKIC8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRE9NIGltcGxlbWVudGF0aW9u
IGZvciBLREUuCi0gKgogICogKEMpIDE5OTktMjAwMyBMYXJzIEtub2xsIChrbm9sbEBrZGUub3Jn
KQogICogKEMpIDIwMDItMjAwMyBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKLSAqIENv
cHlyaWdodCAoQykgMjAwMiwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0
IChDKSAyMDAyLCAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwpAQCAtMjksMTQgKzI3LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogY2xhc3MgQ1NTVW5rbm93blJ1bGUgOiBwdWJsaWMgQ1NTUnVsZSB7Ci1wdWJsaWM6Ci0gICAg
Q1NTVW5rbm93blJ1bGUoU3R5bGVCYXNlKiBwYXJlbnQpCi0gICAgICAgIDogQ1NTUnVsZShwYXJl
bnQpCi0gICAgewotICAgIH0KLQotICAgIHZpcnR1YWwgYm9vbCBpc1Vua25vd25SdWxlKCkgeyBy
ZXR1cm4gdHJ1ZTsgfQotCitwcml2YXRlOgogICAgIHZpcnR1YWwgdW5zaWduZWQgc2hvcnQgdHlw
ZSgpIGNvbnN0IHsgcmV0dXJuIFVOS05PV05fUlVMRTsgfQogfTsKIApJbmRleDogV2ViQ29yZS9j
c3MvQ1NTVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NWYWx1ZS5oCShyZXZp
c2lvbiAzNDU4NCkKKysrIFdlYkNvcmUvY3NzL0NTU1ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNiArMSw2IEBACiAvKgogICogKEMpIDE5OTktMjAwMyBMYXJzIEtub2xsIChrbm9sbEBrZGUu
b3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwg
MjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgog
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKQEAgLTI5LDYgKzI5LDcgQEAgdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKIAogY2xh
c3MgQ1NTVmFsdWUgOiBwdWJsaWMgU3R5bGVCYXNlIHsKIHB1YmxpYzoKKyAgICAvLyBGSVhNRTog
Q2hhbmdlIG5hbWUgdG8gVHlwZS4KICAgICBlbnVtIFVuaXRUeXBlcyB7CiAgICAgICAgIENTU19J
TkhFUklUID0gMCwKICAgICAgICAgQ1NTX1BSSU1JVElWRV9WQUxVRSA9IDEsCkBAIC0zNywxOSAr
MzgsMjcgQEAgcHVibGljOgogICAgICAgICBDU1NfSU5JVElBTCA9IDQKICAgICB9OwogCi0gICAg
Q1NTVmFsdWUoKSA6IFN0eWxlQmFzZSgwKSB7IH0KLQorICAgIC8vIEZJWE1FOiBDaGFuZ2UgdGhp
cyB0byByZXR1cm4gVW5pdFR5cGVzLgogICAgIHZpcnR1YWwgdW5zaWduZWQgc2hvcnQgY3NzVmFs
dWVUeXBlKCkgY29uc3QgeyByZXR1cm4gQ1NTX0NVU1RPTTsgfQogCiAgICAgdmlydHVhbCBTdHJp
bmcgY3NzVGV4dCgpIGNvbnN0ID0gMDsKICAgICB2b2lkIHNldENzc1RleHQoY29uc3QgU3RyaW5n
JiwgRXhjZXB0aW9uQ29kZSYpIHsgfSAvLyBGSVhNRTogTm90IGltcGxlbWVudGVkLgogCi0gICAg
dmlydHVhbCBib29sIGlzVmFsdWUoKSB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBib29s
IGlzRm9udFZhbHVlKCkgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNJbWFn
ZUdlbmVyYXRvclZhbHVlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJv
b2wgaXNJbWFnZVZhbHVlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJv
b2wgaXNJbXBsaWNpdEluaXRpYWxWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAg
dmlydHVhbCBib29sIGlzUHJpbWl0aXZlVmFsdWUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQog
ICAgIHZpcnR1YWwgYm9vbCBpc1RyYW5zaXRpb25UaW1pbmdGdW5jdGlvblZhbHVlKCkgeyByZXR1
cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNJbWFnZVZhbHVlKCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNJbWFnZUdlbmVyYXRvclZhbHVlKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNWYWx1ZUxpc3QoKSB7IHJl
dHVybiBmYWxzZTsgfQorCisjaWYgRU5BQkxFKFNWRykKKyAgICB2aXJ0dWFsIGJvb2wgaXNTVkdD
b2xvcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzU1ZHUGFp
bnQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorI2VuZGlmCisKK3Byb3RlY3RlZDoKKyAgICBD
U1NWYWx1ZSgpIDogU3R5bGVCYXNlKDApIHsgfQogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogV2ViQ29yZS9jc3MvQ1NTVmFsdWVMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9jc3MvQ1NTVmFsdWVMaXN0LmgJKHJldmlzaW9uIDM0NTg0KQorKysgV2ViQ29yZS9jc3MvQ1NT
VmFsdWVMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsOCArMSw2IEBACiAvKgotICogVGhpcyBm
aWxlIGlzIHBhcnQgb2YgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgotICoKICAqIChD
KSAxOTk5LTIwMDMgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zMSwyMiArMjksMzMg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDU1NWYWx1ZUxpc3QgOiBwdWJsaWMgQ1NT
VmFsdWUgewogcHVibGljOgotICAgIENTU1ZhbHVlTGlzdChib29sIGlzU3BhY2VTZXBhcmF0ZWQg
PSBmYWxzZSk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTVmFsdWVMaXN0PiBjcmVhdGVDb21t
YVNlcGFyYXRlZCgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENTU1ZhbHVl
TGlzdChmYWxzZSkpOworICAgIH0KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDU1NWYWx1ZUxpc3Q+
IGNyZWF0ZVNwYWNlU2VwYXJhdGVkKCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgQ1NTVmFsdWVMaXN0KHRydWUpKTsKKyAgICB9CisKICAgICB2aXJ0dWFsIH5DU1NWYWx1ZUxp
c3QoKTsKIAogICAgIHNpemVfdCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXpl
KCk7IH0KICAgICBDU1NWYWx1ZSogaXRlbSh1bnNpZ25lZCk7CiAgICAgQ1NTVmFsdWUqIGl0ZW1X
aXRob3V0Qm91bmRzQ2hlY2sodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIG1fdmFsdWVzW2luZGV4
XS5nZXQoKTsgfQogCi0gICAgdmlydHVhbCBib29sIGlzVmFsdWVMaXN0KCkgeyByZXR1cm4gdHJ1
ZTsgfQotCi0gICAgdmlydHVhbCB1bnNpZ25lZCBzaG9ydCBjc3NWYWx1ZVR5cGUoKSBjb25zdDsK
LQogICAgIHZvaWQgYXBwZW5kKFBhc3NSZWZQdHI8Q1NTVmFsdWU+KTsKICAgICB2b2lkIHByZXBl
bmQoUGFzc1JlZlB0cjxDU1NWYWx1ZT4pOworCiAgICAgdmlydHVhbCBTdHJpbmcgY3NzVGV4dCgp
IGNvbnN0OwogCi1wcm90ZWN0ZWQ6Citwcml2YXRlOgorICAgIENTU1ZhbHVlTGlzdChib29sIGlz
U3BhY2VTZXBhcmF0ZWQpOworCisgICAgdmlydHVhbCBib29sIGlzVmFsdWVMaXN0KCkgeyByZXR1
cm4gdHJ1ZTsgfQorCisgICAgdmlydHVhbCB1bnNpZ25lZCBzaG9ydCBjc3NWYWx1ZVR5cGUoKSBj
b25zdDsKKwogICAgIFZlY3RvcjxSZWZQdHI8Q1NTVmFsdWU+ID4gbV92YWx1ZXM7CiAgICAgYm9v
bCBtX2lzU3BhY2VTZXBhcmF0ZWQ7CiB9OwpJbmRleDogV2ViQ29yZS9jc3MvRm9udEZhbWlseVZh
bHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvRm9udEZhbWlseVZhbHVlLmgJKHJldmlz
aW9uIDM0NTg0KQorKysgV2ViQ29yZS9jc3MvRm9udEZhbWlseVZhbHVlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI4LDcgKzI4LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRm9udEZh
bWlseVZhbHVlIDogcHVibGljIENTU1ByaW1pdGl2ZVZhbHVlIHsKIHB1YmxpYzoKLSAgICBGb250
RmFtaWx5VmFsdWUoY29uc3QgU3RyaW5nJiBmYW1pbHlOYW1lKTsKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxGb250RmFtaWx5VmFsdWU+IGNyZWF0ZShjb25zdCBTdHJpbmcmIGZhbWlseU5hbWUpCisg
ICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZvbnRGYW1pbHlWYWx1ZShmYW1pbHlO
YW1lKSk7CisgICAgfQorCiAgICAgdm9pZCBhcHBlbmRTcGFjZVNlcGFyYXRlZChjb25zdCBVQ2hh
ciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKTsKIAogICAgIGNvbnN0IFN0cmluZyYgZmFt
aWx5TmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmFtaWx5TmFtZTsgfQpAQCAtMzYsNiArNDAsOCBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0OwogCiBwcml2YXRl
OgorICAgIEZvbnRGYW1pbHlWYWx1ZShjb25zdCBTdHJpbmcmIGZhbWlseU5hbWUpOworCiAgICAg
U3RyaW5nIG1fZmFtaWx5TmFtZTsKIH07CiAKSW5kZXg6IFdlYkNvcmUvY3NzL0ZvbnRWYWx1ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0ZvbnRWYWx1ZS5oCShyZXZpc2lvbiAzNDU4NCkK
KysrIFdlYkNvcmUvY3NzL0ZvbnRWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDggKzEsNiBA
QAogLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9y
IEtERS4KLSAqCiAgKiAoQykgMTk5OS0yMDAzIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAq
IENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI0LDYgKzIyLDcgQEAKICNkZWZp
bmUgRm9udFZhbHVlX2gKIAogI2luY2x1ZGUgIkNTU1ZhbHVlLmgiCisjaW5jbHVkZSA8d3RmL1Bh
c3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKQEAgLTMxLDEyICszMCwxNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBDU1NQcmlt
aXRpdmVWYWx1ZTsKIGNsYXNzIENTU1ZhbHVlTGlzdDsKIAotY2xhc3MgRm9udFZhbHVlIDogcHVi
bGljIENTU1ZhbHVlCi17CitjbGFzcyBGb250VmFsdWUgOiBwdWJsaWMgQ1NTVmFsdWUgewogcHVi
bGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZvbnRWYWx1ZT4gY3JlYXRlKCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRm9udFZhbHVlKTsKKyAgICB9CisKICAgICB2aXJ0
dWFsIFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7Ci0gICAgCi0gICAgdmlydHVhbCBib29sIGlzRm9u
dFZhbHVlKCkgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PiBzdHlsZTsKICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHZhcmlhbnQ7CkBAIC00NCw2
ICs0NSwxMSBAQCBwdWJsaWM6CiAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBzaXplOwog
ICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbGluZUhlaWdodDsKICAgICBSZWZQdHI8Q1NT
VmFsdWVMaXN0PiBmYW1pbHk7CisKK3ByaXZhdGU6CisgICAgRm9udFZhbHVlKCkgeyB9CisKKyAg
ICB2aXJ0dWFsIGJvb2wgaXNGb250VmFsdWUoKSB7IHJldHVybiB0cnVlOyB9CiB9OwogCiB9IC8v
IG5hbWVzcGFjZQpJbmRleDogV2ViQ29yZS9jc3MvTWVkaWFMaXN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2Nzcy9NZWRpYUxpc3QuY3BwCShyZXZpc2lvbiAzNDU4NCkKKysrIFdlYkNvcmUv
Y3NzL01lZGlhTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw0IEBACi0vKioKLSAq
IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9yIEtERS4KLSAq
CisvKgogICogKEMpIDE5OTktMjAwMyBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogQ29w
eXJpZ2h0IChDKSAyMDA0LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCiAgKgpAQCAtMjIsOCAr
MjAsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIk1lZGlhTGlzdC5oIgogCisj
aW5jbHVkZSAiQ1NTSW1wb3J0UnVsZS5oIgogI2luY2x1ZGUgIkNTU1BhcnNlci5oIgotI2luY2x1
ZGUgIkNTU1J1bGUuaCIKICNpbmNsdWRlICJDU1NTdHlsZVNoZWV0LmgiCiAjaW5jbHVkZSAiRXhj
ZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIk1lZGlhUXVlcnkuaCIKQEAgLTgyLDEzICs4MCwxMiBA
QCBNZWRpYUxpc3Q6Ok1lZGlhTGlzdChDU1NTdHlsZVNoZWV0KiBwYXJlCiAgICAgICAgIHNldE1l
ZGlhVGV4dCgiaW52YWxpZCIsIGVjKTsKIH0KIAotTWVkaWFMaXN0OjpNZWRpYUxpc3QoQ1NTUnVs
ZSogcGFyZW50UnVsZSwgY29uc3QgU3RyaW5nJiBtZWRpYSwgYm9vbCBmYWxsYmFja1RvRGVzY3Jp
cHRvcikKK01lZGlhTGlzdDo6TWVkaWFMaXN0KENTU0ltcG9ydFJ1bGUqIHBhcmVudFJ1bGUsIGNv
bnN0IFN0cmluZyYgbWVkaWEpCiAgICAgOiBTdHlsZUJhc2UocGFyZW50UnVsZSkKLSAgICAsIG1f
ZmFsbGJhY2soZmFsbGJhY2tUb0Rlc2NyaXB0b3IpCisgICAgLCBtX2ZhbGxiYWNrKGZhbHNlKQog
ewogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIHNldE1lZGlhVGV4dChtZWRpYSwgZWMp
OwotICAgIC8vRklYTUU6IHBhcnNpbmcgY2FuIGZhaWwuCiAgICAgaWYgKGVjKQogICAgICAgICBz
ZXRNZWRpYVRleHQoImludmFsaWQiLCBlYyk7CiB9CkBAIC05OCwxNiArOTUsNiBAQCBNZWRpYUxp
c3Q6On5NZWRpYUxpc3QoKQogICAgIGRlbGV0ZUFsbFZhbHVlcyhtX3F1ZXJpZXMpOwogfQogCi1D
U1NTdHlsZVNoZWV0ICpNZWRpYUxpc3Q6OnBhcmVudFN0eWxlU2hlZXQoKSBjb25zdAotewotICAg
IHJldHVybiBwYXJlbnQoKS0+aXNDU1NTdHlsZVNoZWV0KCkgPyBzdGF0aWNfY2FzdDxDU1NTdHls
ZVNoZWV0Kj4ocGFyZW50KCkpIDogMDsKLX0KLQotQ1NTUnVsZSAqTWVkaWFMaXN0OjpwYXJlbnRS
dWxlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gcGFyZW50KCktPmlzUnVsZSgpID8gc3RhdGljX2Nh
c3Q8Q1NTUnVsZSo+KHBhcmVudCgpKSA6IDA7Ci19Ci0KIHN0YXRpYyBTdHJpbmcgcGFyc2VNZWRp
YURlc2NyaXB0b3IoY29uc3QgU3RyaW5nJiBzKQogewogICAgIGludCBsZW4gPSBzLmxlbmd0aCgp
OwpAQCAtMTMxLDE1ICsxMTgsMTUgQEAgc3RhdGljIFN0cmluZyBwYXJzZU1lZGlhRGVzY3JpcHRv
cihjb25zdAogCiB2b2lkIE1lZGlhTGlzdDo6ZGVsZXRlTWVkaXVtKGNvbnN0IFN0cmluZyYgb2xk
TWVkaXVtLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBNZWRpYUxpc3QgdGVtcE1lZGlhTGlz
dDsKKyAgICBSZWZQdHI8TWVkaWFMaXN0PiB0ZW1wTWVkaWFMaXN0ID0gTWVkaWFMaXN0OjpjcmVh
dGUoKTsKICAgICBDU1NQYXJzZXIgcCh0cnVlKTsKIAogICAgIE1lZGlhUXVlcnkqIG9sZFF1ZXJ5
ID0gMDsKICAgICBib29sIGRlbGV0ZU9sZFF1ZXJ5ID0gZmFsc2U7CiAKLSAgICBpZiAocC5wYXJz
ZU1lZGlhUXVlcnkoJnRlbXBNZWRpYUxpc3QsIG9sZE1lZGl1bSkpIHsKLSAgICAgICAgaWYgKHRl
bXBNZWRpYUxpc3QubV9xdWVyaWVzLnNpemUoKSA+IDApCi0gICAgICAgICAgICBvbGRRdWVyeSA9
IHRlbXBNZWRpYUxpc3QubV9xdWVyaWVzWzBdOworICAgIGlmIChwLnBhcnNlTWVkaWFRdWVyeSh0
ZW1wTWVkaWFMaXN0LmdldCgpLCBvbGRNZWRpdW0pKSB7CisgICAgICAgIGlmICh0ZW1wTWVkaWFM
aXN0LT5tX3F1ZXJpZXMuc2l6ZSgpID4gMCkKKyAgICAgICAgICAgIG9sZFF1ZXJ5ID0gdGVtcE1l
ZGlhTGlzdC0+bV9xdWVyaWVzWzBdOwogICAgIH0gZWxzZSBpZiAobV9mYWxsYmFjaykgewogICAg
ICAgICBTdHJpbmcgbWVkaXVtID0gcGFyc2VNZWRpYURlc2NyaXB0b3Iob2xkTWVkaXVtKTsKICAg
ICAgICAgaWYgKCFtZWRpdW0uaXNOdWxsKCkpIHsKQEAgLTE4Nyw3ICsxNzQsNyBAQCBTdHJpbmcg
TWVkaWFMaXN0OjptZWRpYVRleHQoKSBjb25zdAogCiB2b2lkIE1lZGlhTGlzdDo6c2V0TWVkaWFU
ZXh0KGNvbnN0IFN0cmluZyYgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIE1lZGlh
TGlzdCB0ZW1wTWVkaWFMaXN0OworICAgIFJlZlB0cjxNZWRpYUxpc3Q+IHRlbXBNZWRpYUxpc3Qg
PSBNZWRpYUxpc3Q6OmNyZWF0ZSgpOwogICAgIENTU1BhcnNlciBwKHRydWUpOwogCiAgICAgVmVj
dG9yPFN0cmluZz4gbGlzdDsKQEAgLTE5NiwxMSArMTgzLDExIEBAIHZvaWQgTWVkaWFMaXN0Ojpz
ZXRNZWRpYVRleHQoY29uc3QgU3RyaW4KICAgICBmb3IgKFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9p
dGVyYXRvciBpdCA9IGxpc3QuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIFN0
cmluZyBtZWRpdW0gPSAoKml0KS5zdHJpcFdoaXRlU3BhY2UoKTsKICAgICAgICAgaWYgKCFtZWRp
dW0uaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBpZiAoIXAucGFyc2VNZWRpYVF1ZXJ5KCZ0ZW1w
TWVkaWFMaXN0LCBtZWRpdW0pKSB7CisgICAgICAgICAgICBpZiAoIXAucGFyc2VNZWRpYVF1ZXJ5
KHRlbXBNZWRpYUxpc3QuZ2V0KCksIG1lZGl1bSkpIHsKICAgICAgICAgICAgICAgICBpZiAobV9m
YWxsYmFjaykgewogICAgICAgICAgICAgICAgICAgICBTdHJpbmcgbWVkaWFEZXNjcmlwdG9yID0g
cGFyc2VNZWRpYURlc2NyaXB0b3IobWVkaXVtKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFt
ZWRpYURlc2NyaXB0b3IuaXNOdWxsKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wTWVk
aWFMaXN0Lm1fcXVlcmllcy5hcHBlbmQobmV3IE1lZGlhUXVlcnkoTWVkaWFRdWVyeTo6Tm9uZSwg
bWVkaWFEZXNjcmlwdG9yLCAwKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wTWVkaWFM
aXN0LT5tX3F1ZXJpZXMuYXBwZW5kKG5ldyBNZWRpYVF1ZXJ5KE1lZGlhUXVlcnk6Ok5vbmUsIG1l
ZGlhRGVzY3JpcHRvciwgMCkpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICAgICAgICAgIGVjID0gU1lOVEFYX0VSUjsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwpA
QCAtMjIyLDggKzIwOSw4IEBAIHZvaWQgTWVkaWFMaXN0OjpzZXRNZWRpYVRleHQoY29uc3QgU3Ry
aW4KICAgICAKICAgICBlYyA9IDA7CiAgICAgZGVsZXRlQWxsVmFsdWVzKG1fcXVlcmllcyk7Ci0g
ICAgbV9xdWVyaWVzID0gdGVtcE1lZGlhTGlzdC5tX3F1ZXJpZXM7Ci0gICAgdGVtcE1lZGlhTGlz
dC5tX3F1ZXJpZXMuY2xlYXIoKTsKKyAgICBtX3F1ZXJpZXMgPSB0ZW1wTWVkaWFMaXN0LT5tX3F1
ZXJpZXM7CisgICAgdGVtcE1lZGlhTGlzdC0+bV9xdWVyaWVzLmNsZWFyKCk7CiAgICAgbm90aWZ5
Q2hhbmdlZCgpOwogfQogCkluZGV4OiBXZWJDb3JlL2Nzcy9NZWRpYUxpc3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2Nzcy9NZWRpYUxpc3QuaAkocmV2aXNpb24gMzQ1ODQpCisrKyBXZWJDb3Jl
L2Nzcy9NZWRpYUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw4ICsxLDYgQEAKIC8qCi0gKiBU
aGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRE9NIGltcGxlbWVudGF0aW9uIGZvciBLREUuCi0gKgog
ICogKEMpIDE5OTktMjAwMyBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQotICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCkBAIC0yNCwyOSArMjIsNTAgQEAKICNkZWZpbmUgTWVkaWFMaXN0X2gKIAogI2lu
Y2x1ZGUgIlN0eWxlQmFzZS5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKLXR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CisKK2NsYXNzIENTU0ltcG9y
dFJ1bGU7CiBjbGFzcyBDU1NTdHlsZVNoZWV0OwogY2xhc3MgTWVkaWFRdWVyeTsKLWNsYXNzIENT
U1J1bGU7CitjbGFzcyBTdHJpbmc7CisKK3R5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CiAKLWNs
YXNzIE1lZGlhTGlzdCA6IHB1YmxpYyBTdHlsZUJhc2UKLXsKK2NsYXNzIE1lZGlhTGlzdCA6IHB1
YmxpYyBTdHlsZUJhc2UgewogcHVibGljOgotICAgIE1lZGlhTGlzdChib29sIGZhbGxiYWNrVG9E
ZXNjcmlwdGlvbiA9IGZhbHNlKSA6IFN0eWxlQmFzZSgwKSwgbV9mYWxsYmFjayhmYWxsYmFja1Rv
RGVzY3JpcHRpb24pIHt9Ci0gICAgTWVkaWFMaXN0KENTU1N0eWxlU2hlZXQqIHBhcmVudFNoZWV0
LCBib29sIGZhbGxiYWNrVG9EZXNjcmlwdGlvbiA9IGZhbHNlKTsKLSAgICBNZWRpYUxpc3QoQ1NT
U3R5bGVTaGVldCogcGFyZW50U2hlZXQsIGNvbnN0IFN0cmluZyYgbWVkaWEsIGJvb2wgZmFsbGJh
Y2tUb0Rlc2NyaXB0aW9uID0gZmFsc2UpOwotICAgIE1lZGlhTGlzdChDU1NSdWxlKiBwYXJlbnRS
dWxlLCBjb25zdCBTdHJpbmcmIG1lZGlhLCBib29sIGZhbGxiYWNrVG9EZXNjcmlwdGlvbiA9IGZh
bHNlKTsKLSAgICB+TWVkaWFMaXN0KCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNNZWRpYUxpc3Qo
KSB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICBDU1NTdHlsZVNoZWV0KiBwYXJlbnRTdHlsZVNoZWV0
KCkgY29uc3Q7Ci0gICAgQ1NTUnVsZSogcGFyZW50UnVsZSgpIGNvbnN0OwotICAgIHVuc2lnbmVk
IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuICh1bnNpZ25lZCkgbV9xdWVyaWVzLnNpemUoKTsgfQor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1lZGlhTGlzdD4gY3JlYXRlKCkKKyAgICB7CisgICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgTWVkaWFMaXN0KDAsIGZhbHNlKSk7CisgICAgfQorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPE1lZGlhTGlzdD4gY3JlYXRlKENTU0ltcG9ydFJ1bGUqIHBhcmVudFJ1
bGUsIGNvbnN0IFN0cmluZyYgbWVkaWEpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IE1lZGlhTGlzdChwYXJlbnRSdWxlLCBtZWRpYSkpOworICAgIH0KKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxNZWRpYUxpc3Q+IGNyZWF0ZShDU1NTdHlsZVNoZWV0KiBwYXJlbnRTaGVldCwgY29u
c3QgU3RyaW5nJiBtZWRpYSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWVk
aWFMaXN0KHBhcmVudFNoZWV0LCBtZWRpYSwgZmFsc2UpKTsKKyAgICB9CisKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxNZWRpYUxpc3Q+IGNyZWF0ZUFsbG93aW5nRGVzY3JpcHRpb25TeW50YXgoY29u
c3QgU3RyaW5nJiBtZWRpYVF1ZXJ5T3JEZXNjcmlwdGlvbikKKyAgICB7CisgICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgTWVkaWFMaXN0KDAsIG1lZGlhUXVlcnlPckRlc2NyaXB0aW9uLCB0cnVl
KSk7CisgICAgfQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1lZGlhTGlzdD4gY3JlYXRlQWxsb3dp
bmdEZXNjcmlwdGlvblN5bnRheChDU1NTdHlsZVNoZWV0KiBwYXJlbnRTaGVldCwgY29uc3QgU3Ry
aW5nJiBtZWRpYVF1ZXJ5T3JEZXNjcmlwdGlvbikKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgTWVkaWFMaXN0KHBhcmVudFNoZWV0LCBtZWRpYVF1ZXJ5T3JEZXNjcmlwdGlvbiwg
dHJ1ZSkpOworICAgIH0KKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1lZGlhTGlzdD4gY3JlYXRl
KGNvbnN0IFN0cmluZyYgbWVkaWEsIGJvb2wgYWxsb3dEZXNjcmlwdGlvblN5bnRheCkKKyAgICB7
CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWVkaWFMaXN0KDAsIG1lZGlhLCBhbGxvd0Rl
c2NyaXB0aW9uU3ludGF4KSk7CisgICAgfQorCisgICAgdmlydHVhbCB+TWVkaWFMaXN0KCk7CisK
KyAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX3F1ZXJpZXMuc2l6ZSgpOyB9
CiAgICAgU3RyaW5nIGl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0OwogICAgIHZvaWQgZGVsZXRl
TWVkaXVtKGNvbnN0IFN0cmluZyYgb2xkTWVkaXVtLCBFeGNlcHRpb25Db2RlJik7CiAgICAgdm9p
ZCBhcHBlbmRNZWRpdW0oY29uc3QgU3RyaW5nJiBuZXdNZWRpdW0sIEV4Y2VwdGlvbkNvZGUmKTsK
QEAgLTU0LDEzICs3MywxNiBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIG1lZGlhVGV4dCgpIGNvbnN0
OwogICAgIHZvaWQgc2V0TWVkaWFUZXh0KGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmeG8p
OwogCi0gICAgdm9pZCBhcHBlbmRNZWRpYVF1ZXJ5KE1lZGlhUXVlcnkqIG1lZGlhUXVlcnkpOwot
ICAgIGNvbnN0IFZlY3RvcjxNZWRpYVF1ZXJ5Kj4qIG1lZGlhUXVlcmllcygpIGNvbnN0IHsgcmV0
dXJuICZtX3F1ZXJpZXM7IH0KKyAgICB2b2lkIGFwcGVuZE1lZGlhUXVlcnkoTWVkaWFRdWVyeSop
OworICAgIGNvbnN0IFZlY3RvcjxNZWRpYVF1ZXJ5Kj4mIG1lZGlhUXVlcmllcygpIGNvbnN0IHsg
cmV0dXJuIG1fcXVlcmllczsgfQogCiBwcml2YXRlOgorICAgIE1lZGlhTGlzdChDU1NTdHlsZVNo
ZWV0KiBwYXJlbnRTaGVldCwgYm9vbCBmYWxsYmFja1RvRGVzY3JpcHRpb24pOworICAgIE1lZGlh
TGlzdChDU1NTdHlsZVNoZWV0KiBwYXJlbnRTaGVldCwgY29uc3QgU3RyaW5nJiBtZWRpYSwgYm9v
bCBmYWxsYmFja1RvRGVzY3JpcHRpb24pOworICAgIE1lZGlhTGlzdChDU1NJbXBvcnRSdWxlKiBw
YXJlbnRSdWxlLCBjb25zdCBTdHJpbmcmIG1lZGlhKTsKKwogICAgIHZvaWQgbm90aWZ5Q2hhbmdl
ZCgpOwogCi1wcm90ZWN0ZWQ6CiAgICAgVmVjdG9yPE1lZGlhUXVlcnkqPiBtX3F1ZXJpZXM7CiAg
ICAgYm9vbCBtX2ZhbGxiYWNrOyAvLyB0cnVlIGlmIGZhaWxlZCBtZWRpYSBxdWVyeSBwYXJzaW5n
IHNob3VsZCBmYWxsYmFjayB0byBtZWRpYSBkZXNjcmlwdGlvbiBwYXJzaW5nCiB9OwpJbmRleDog
V2ViQ29yZS9jc3MvTWVkaWFRdWVyeUV2YWx1YXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9jc3MvTWVkaWFRdWVyeUV2YWx1YXRvci5jcHAJKHJldmlzaW9uIDM0NTg0KQorKysgV2ViQ29y
ZS9jc3MvTWVkaWFRdWVyeUV2YWx1YXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyOCwxNCAr
MTI4LDE0IEBAIGJvb2wgTWVkaWFRdWVyeUV2YWx1YXRvcjo6ZXZhbChjb25zdCBNZWQKICAgICBp
ZiAoIW1lZGlhTGlzdCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBjb25zdCBWZWN0b3I8
TWVkaWFRdWVyeSo+KiBxdWVyaWVzID0gbWVkaWFMaXN0LT5tZWRpYVF1ZXJpZXMoKTsKLSAgICBp
ZiAoIXF1ZXJpZXMtPnNpemUoKSkKKyAgICBjb25zdCBWZWN0b3I8TWVkaWFRdWVyeSo+JiBxdWVy
aWVzID0gbWVkaWFMaXN0LT5tZWRpYVF1ZXJpZXMoKTsKKyAgICBpZiAoIXF1ZXJpZXMuc2l6ZSgp
KQogICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gZW1wdHkgcXVlcnkgbGlzdCBldmFsdWF0ZXMgdG8g
dHJ1ZQogCiAgICAgLy8gaXRlcmF0ZSBvdmVyIHF1ZXJpZXMsIHN0b3AgaWYgYW55IG9mIHRoZW0g
ZXZhbCB0byB0cnVlIChPUiBzZW1hbnRpY3MpCiAgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHF1ZXJpZXMtPnNpemUoKSAmJiAhcmVzdWx0OyArK2kp
IHsKLSAgICAgICAgTWVkaWFRdWVyeSogcXVlcnkgPSBxdWVyaWVzLT5hdChpKTsKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHF1ZXJpZXMuc2l6ZSgpICYmICFyZXN1bHQ7ICsraSkgeworICAg
ICAgICBNZWRpYVF1ZXJ5KiBxdWVyeSA9IHF1ZXJpZXMuYXQoaSk7CiAKICAgICAgICAgaWYgKG1l
ZGlhVHlwZU1hdGNoKHF1ZXJ5LT5tZWRpYVR5cGUoKSkpIHsKICAgICAgICAgICAgIGNvbnN0IFZl
Y3RvcjxNZWRpYVF1ZXJ5RXhwKj4qIGV4cHMgPSBxdWVyeS0+ZXhwcmVzc2lvbnMoKTsKSW5kZXg6
IFdlYkNvcmUvY3NzL01lZGlhUXVlcnlFeHAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3Nz
L01lZGlhUXVlcnlFeHAuY3BwCShyZXZpc2lvbiAzNDU4NCkKKysrIFdlYkNvcmUvY3NzL01lZGlh
UXVlcnlFeHAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MywyNyArNDMsMjcgQEAgTWVkaWFRdWVy
eUV4cDo6TWVkaWFRdWVyeUV4cChjb25zdCBBdG9taQogICAgICAgICAgICAgVmFsdWUqIHZhbHVl
ID0gdmFsdWVMaXN0LT5jdXJyZW50KCk7CiAKICAgICAgICAgICAgIGlmICh2YWx1ZS0+aWQgIT0g
MCkKLSAgICAgICAgICAgICAgICBtX3ZhbHVlID0gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKHZhbHVl
LT5pZCk7CisgICAgICAgICAgICAgICAgbV92YWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVh
dGVJZGVudGlmaWVyKHZhbHVlLT5pZCk7CiAgICAgICAgICAgICBlbHNlIGlmICh2YWx1ZS0+dW5p
dCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORykKLSAgICAgICAgICAgICAgICBtX3Zh
bHVlID0gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlLT5zdHJpbmcsIChDU1NQcmltaXRpdmVW
YWx1ZTo6VW5pdFR5cGVzKSB2YWx1ZS0+dW5pdCk7CisgICAgICAgICAgICAgICAgbV92YWx1ZSA9
IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUodmFsdWUtPnN0cmluZywgKENTU1ByaW1pdGl2ZVZh
bHVlOjpVbml0VHlwZXMpIHZhbHVlLT51bml0KTsKICAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVl
LT51bml0ID49IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSICYmCiAgICAgICAgICAgICAg
ICAgICAgICAgdmFsdWUtPnVuaXQgPD0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19LSFopCi0gICAg
ICAgICAgICAgICAgbV92YWx1ZSA9IG5ldyBDU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZS0+ZlZhbHVl
LCAoQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcykgdmFsdWUtPnVuaXQpOworICAgICAgICAg
ICAgICAgIG1fdmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHZhbHVlLT5mVmFsdWUs
IChDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzKSB2YWx1ZS0+dW5pdCk7CiAKICAgICAgICAg
ICAgIHZhbHVlTGlzdC0+bmV4dCgpOwogICAgICAgICB9IGVsc2UgaWYgKHZhbHVlTGlzdC0+c2l6
ZSgpID4gMSkgewogICAgICAgICAgICAgLy8gY3JlYXRlIGxpc3Qgb2YgdmFsdWVzCiAgICAgICAg
ICAgICAvLyBjdXJyZW50bHkgYWNjZXB0cyBvbmx5IDxpbnRlZ2VyPi88aW50ZWdlcj4KIAotICAg
ICAgICAgICAgQ1NTVmFsdWVMaXN0KiBsaXN0ID0gbmV3IENTU1ZhbHVlTGlzdCgpOworICAgICAg
ICAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gbGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlQ29t
bWFTZXBhcmF0ZWQoKTsKICAgICAgICAgICAgIFZhbHVlKiB2YWx1ZSA9IDA7CiAgICAgICAgICAg
ICBib29sIGlzVmFsaWQgPSB0cnVlOwogCiAgICAgICAgICAgICB3aGlsZSAoKHZhbHVlID0gdmFs
dWVMaXN0LT5jdXJyZW50KCkpICYmIGlzVmFsaWQpIHsKICAgICAgICAgICAgICAgICBpZiAodmFs
dWUtPnVuaXQgPT0gVmFsdWU6Ok9wZXJhdG9yICYmIHZhbHVlLT5pVmFsdWUgPT0gJy8nKQotICAg
ICAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQobmV3IENTU1ByaW1pdGl2ZVZhbHVlKCIvIiwg
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpKTsKKyAgICAgICAgICAgICAgICAgICAgbGlz
dC0+YXBwZW5kKENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoIi8iLCBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX1NUUklORykpOwogICAgICAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlLT51bml0ID09
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKQotICAgICAgICAgICAgICAgICAgICBsaXN0
LT5hcHBlbmQobmV3IENTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlLT5mVmFsdWUsIENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfTlVNQkVSKSk7CisgICAgICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChD
U1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHZhbHVlLT5mVmFsdWUsIENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfTlVNQkVSKSk7CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAg
ICBpc1ZhbGlkID0gZmFsc2U7CiAKQEAgLTcxLDkgKzcxLDcgQEAgTWVkaWFRdWVyeUV4cDo6TWVk
aWFRdWVyeUV4cChjb25zdCBBdG9taQogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAo
aXNWYWxpZCkKLSAgICAgICAgICAgICAgICBtX3ZhbHVlID0gbGlzdDsKLSAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICBkZWxldGUgbGlzdDsKKyAgICAgICAgICAgICAgICBtX3ZhbHVl
ID0gbGlzdC5yZWxlYXNlKCk7CiAgICAgICAgIH0KICAgICB9CiB9CkluZGV4OiBXZWJDb3JlL2Nz
cy9TVkdDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvY3NzL1NWR0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAJKHJldmlzaW9uIDM0NTg0
KQorKysgV2ViQ29yZS9jc3MvU1ZHQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjksMTcgKzI5LDE3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
c3RhdGljIENTU1ByaW1pdGl2ZVZhbHVlKiBnbHlwaE9yaWVudGF0aW9uVG9DU1NQcmltaXRpdmVW
YWx1ZShFR2x5cGhPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKK3N0YXRpYyBQYXNzUmVmUHRyPENT
U1ByaW1pdGl2ZVZhbHVlPiBnbHlwaE9yaWVudGF0aW9uVG9DU1NQcmltaXRpdmVWYWx1ZShFR2x5
cGhPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKIHsKICAgICBzd2l0Y2ggKG9yaWVudGF0aW9uKSB7
CiAgICAgICAgIGNhc2UgR09fMERFRzoKLSAgICAgICAgICAgIHJldHVybiBuZXcgQ1NTUHJpbWl0
aXZlVmFsdWUoMC4wZiwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19ERUcpOworICAgICAgICAgICAg
cmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoMC4wZiwgQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19ERUcpOwogICAgICAgICBjYXNlIEdPXzkwREVHOgotICAgICAgICAgICAgcmV0dXJuIG5l
dyBDU1NQcmltaXRpdmVWYWx1ZSg5MC4wZiwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19ERUcpOwor
ICAgICAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoOTAuMGYsIENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfREVHKTsKICAgICAgICAgY2FzZSBHT18xODBERUc6Ci0gICAgICAg
ICAgICByZXR1cm4gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKDE4MC4wZiwgQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19ERUcpOworICAgICAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVh
dGUoMTgwLjBmLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0RFRyk7CiAgICAgICAgIGNhc2UgR09f
MjcwREVHOgotICAgICAgICAgICAgcmV0dXJuIG5ldyBDU1NQcmltaXRpdmVWYWx1ZSgyNzAuMGYs
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfREVHKTsKKyAgICAgICAgICAgIHJldHVybiBDU1NQcmlt
aXRpdmVWYWx1ZTo6Y3JlYXRlKDI3MC4wZiwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19ERUcpOwog
ICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQpAQCAtNjUsNzkg
KzY1LDc5IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU0NvbXB1dGVkU3R5bGVEZWMKICAgICAK
ICAgICBzd2l0Y2ggKHN0YXRpY19jYXN0PENTU1Byb3BlcnR5SUQ+KHByb3BlcnR5SUQpKSB7CiAg
ICAgICAgIGNhc2UgQ1NTUHJvcGVydHlDbGlwUnVsZToKLSAgICAgICAgICAgIHJldHVybiBuZXcg
Q1NTUHJpbWl0aXZlVmFsdWUoc3ZnU3R5bGUtPmNsaXBSdWxlKCkpOworICAgICAgICAgICAgcmV0
dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoc3ZnU3R5bGUtPmNsaXBSdWxlKCkpOwogICAg
ICAgICBjYXNlIENTU1Byb3BlcnR5Rmxvb2RPcGFjaXR5OgotICAgICAgICAgICAgcmV0dXJuIG5l
dyBDU1NQcmltaXRpdmVWYWx1ZShzdmdTdHlsZS0+Zmxvb2RPcGFjaXR5KCksIENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfTlVNQkVSKTsKKyAgICAgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1
ZTo6Y3JlYXRlKHN2Z1N0eWxlLT5mbG9vZE9wYWNpdHkoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19OVU1CRVIpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5U3RvcE9wYWNpdHk6Ci0gICAgICAg
ICAgICByZXR1cm4gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKHN2Z1N0eWxlLT5zdG9wT3BhY2l0eSgp
LCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUik7CisgICAgICAgICAgICByZXR1cm4gQ1NT
UHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShzdmdTdHlsZS0+c3RvcE9wYWNpdHkoKSwgQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19OVU1CRVIpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5UG9pbnRlckV2
ZW50czoKLSAgICAgICAgICAgIHJldHVybiBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUoc3ZnU3R5bGUt
PnBvaW50ZXJFdmVudHMoKSk7CisgICAgICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6
OmNyZWF0ZShzdmdTdHlsZS0+cG9pbnRlckV2ZW50cygpKTsKICAgICAgICAgY2FzZSBDU1NQcm9w
ZXJ0eUNvbG9ySW50ZXJwb2xhdGlvbjoKLSAgICAgICAgICAgIHJldHVybiBuZXcgQ1NTUHJpbWl0
aXZlVmFsdWUoc3ZnU3R5bGUtPmNvbG9ySW50ZXJwb2xhdGlvbigpKTsKKyAgICAgICAgICAgIHJl
dHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHN2Z1N0eWxlLT5jb2xvckludGVycG9sYXRp
b24oKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlDb2xvckludGVycG9sYXRpb25GaWx0ZXJz
OgotICAgICAgICAgICAgcmV0dXJuIG5ldyBDU1NQcmltaXRpdmVWYWx1ZShzdmdTdHlsZS0+Y29s
b3JJbnRlcnBvbGF0aW9uRmlsdGVycygpKTsKKyAgICAgICAgICAgIHJldHVybiBDU1NQcmltaXRp
dmVWYWx1ZTo6Y3JlYXRlKHN2Z1N0eWxlLT5jb2xvckludGVycG9sYXRpb25GaWx0ZXJzKCkpOwog
ICAgICAgICBjYXNlIENTU1Byb3BlcnR5RmlsbE9wYWNpdHk6Ci0gICAgICAgICAgICByZXR1cm4g
bmV3IENTU1ByaW1pdGl2ZVZhbHVlKHN2Z1N0eWxlLT5maWxsT3BhY2l0eSgpLCBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX05VTUJFUik7CisgICAgICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFs
dWU6OmNyZWF0ZShzdmdTdHlsZS0+ZmlsbE9wYWNpdHkoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19OVU1CRVIpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5RmlsbFJ1bGU6Ci0gICAgICAgICAg
ICByZXR1cm4gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKHN2Z1N0eWxlLT5maWxsUnVsZSgpKTsKKyAg
ICAgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHN2Z1N0eWxlLT5maWxs
UnVsZSgpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUNvbG9yUmVuZGVyaW5nOgotICAgICAg
ICAgICAgcmV0dXJuIG5ldyBDU1NQcmltaXRpdmVWYWx1ZShzdmdTdHlsZS0+Y29sb3JSZW5kZXJp
bmcoKSk7CisgICAgICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShzdmdT
dHlsZS0+Y29sb3JSZW5kZXJpbmcoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlJbWFnZVJl
bmRlcmluZzoKLSAgICAgICAgICAgIHJldHVybiBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUoc3ZnU3R5
bGUtPmltYWdlUmVuZGVyaW5nKCkpOworICAgICAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZh
bHVlOjpjcmVhdGUoc3ZnU3R5bGUtPmltYWdlUmVuZGVyaW5nKCkpOwogICAgICAgICBjYXNlIENT
U1Byb3BlcnR5U2hhcGVSZW5kZXJpbmc6Ci0gICAgICAgICAgICByZXR1cm4gbmV3IENTU1ByaW1p
dGl2ZVZhbHVlKHN2Z1N0eWxlLT5zaGFwZVJlbmRlcmluZygpKTsKKyAgICAgICAgICAgIHJldHVy
biBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHN2Z1N0eWxlLT5zaGFwZVJlbmRlcmluZygpKTsK
ICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVN0cm9rZUxpbmVjYXA6Ci0gICAgICAgICAgICByZXR1
cm4gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKHN2Z1N0eWxlLT5jYXBTdHlsZSgpKTsKKyAgICAgICAg
ICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHN2Z1N0eWxlLT5jYXBTdHlsZSgp
KTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVN0cm9rZUxpbmVqb2luOgotICAgICAgICAgICAg
cmV0dXJuIG5ldyBDU1NQcmltaXRpdmVWYWx1ZShzdmdTdHlsZS0+am9pblN0eWxlKCkpOworICAg
ICAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoc3ZnU3R5bGUtPmpvaW5T
dHlsZSgpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVN0cm9rZU1pdGVybGltaXQ6Ci0gICAg
ICAgICAgICByZXR1cm4gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKHN2Z1N0eWxlLT5zdHJva2VNaXRl
ckxpbWl0KCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKKyAgICAgICAgICAgIHJl
dHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHN2Z1N0eWxlLT5zdHJva2VNaXRlckxpbWl0
KCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKICAgICAgICAgY2FzZSBDU1NQcm9w
ZXJ0eVN0cm9rZU9wYWNpdHk6Ci0gICAgICAgICAgICByZXR1cm4gbmV3IENTU1ByaW1pdGl2ZVZh
bHVlKHN2Z1N0eWxlLT5zdHJva2VPcGFjaXR5KCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVN
QkVSKTsKKyAgICAgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHN2Z1N0
eWxlLT5zdHJva2VPcGFjaXR5KCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKICAg
ICAgICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRSZW5kZXJpbmc6Ci0gICAgICAgICAgICByZXR1cm4g
bmV3IENTU1ByaW1pdGl2ZVZhbHVlKHN2Z1N0eWxlLT50ZXh0UmVuZGVyaW5nKCkpOworICAgICAg
ICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoc3ZnU3R5bGUtPnRleHRSZW5k
ZXJpbmcoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlBbGlnbm1lbnRCYXNlbGluZToKLSAg
ICAgICAgICAgIHJldHVybiBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUoc3ZnU3R5bGUtPmFsaWdubWVu
dEJhc2VsaW5lKCkpOworICAgICAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVh
dGUoc3ZnU3R5bGUtPmFsaWdubWVudEJhc2VsaW5lKCkpOwogICAgICAgICBjYXNlIENTU1Byb3Bl
cnR5RG9taW5hbnRCYXNlbGluZToKLSAgICAgICAgICAgIHJldHVybiBuZXcgQ1NTUHJpbWl0aXZl
VmFsdWUoc3ZnU3R5bGUtPmRvbWluYW50QmFzZWxpbmUoKSk7CisgICAgICAgICAgICByZXR1cm4g
Q1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShzdmdTdHlsZS0+ZG9taW5hbnRCYXNlbGluZSgpKTsK
ICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRBbmNob3I6Ci0gICAgICAgICAgICByZXR1cm4g
bmV3IENTU1ByaW1pdGl2ZVZhbHVlKHN2Z1N0eWxlLT50ZXh0QW5jaG9yKCkpOworICAgICAgICAg
ICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoc3ZnU3R5bGUtPnRleHRBbmNob3Io
KSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXcml0aW5nTW9kZToKLSAgICAgICAgICAgIHJl
dHVybiBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUoc3ZnU3R5bGUtPndyaXRpbmdNb2RlKCkpOworICAg
ICAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoc3ZnU3R5bGUtPndyaXRp
bmdNb2RlKCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5Q2xpcFBhdGg6CiAgICAgICAgICAg
ICBpZiAoIXN2Z1N0eWxlLT5jbGlwUGF0aCgpLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKHN2Z1N0eWxlLT5jbGlwUGF0aCgpLCBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX1VSSSk7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IENTU1ByaW1pdGl2
ZVZhbHVlKENTU1ZhbHVlTm9uZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2
ZVZhbHVlOjpjcmVhdGUoc3ZnU3R5bGUtPmNsaXBQYXRoKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfVVJJKTsKKyAgICAgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlSWRl
bnRpZmllcihDU1NWYWx1ZU5vbmUpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5TWFzazoKICAg
ICAgICAgICAgIGlmICghc3ZnU3R5bGUtPm1hc2tFbGVtZW50KCkuaXNFbXB0eSgpKQotICAgICAg
ICAgICAgICAgIHJldHVybiBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUoc3ZnU3R5bGUtPm1hc2tFbGVt
ZW50KCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKTsKLSAgICAgICAgICAgIHJldHVybiBu
ZXcgQ1NTUHJpbWl0aXZlVmFsdWUoQ1NTVmFsdWVOb25lKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShzdmdTdHlsZS0+bWFza0VsZW1lbnQoKSwgQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpOworICAgICAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2
ZVZhbHVlOjpjcmVhdGVJZGVudGlmaWVyKENTU1ZhbHVlTm9uZSk7CiAgICAgICAgIGNhc2UgQ1NT
UHJvcGVydHlGaWx0ZXI6CiAgICAgICAgICAgICBpZiAoIXN2Z1N0eWxlLT5maWx0ZXIoKS5pc0Vt
cHR5KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDU1NQcmltaXRpdmVWYWx1ZShzdmdT
dHlsZS0+ZmlsdGVyKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKTsKLSAgICAgICAgICAg
IHJldHVybiBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUoQ1NTVmFsdWVOb25lKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShzdmdTdHlsZS0+ZmlsdGVyKCks
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKTsKKyAgICAgICAgICAgIHJldHVybiBDU1NQcmlt
aXRpdmVWYWx1ZTo6Y3JlYXRlSWRlbnRpZmllcihDU1NWYWx1ZU5vbmUpOwogICAgICAgICBjYXNl
IENTU1Byb3BlcnR5Rmxvb2RDb2xvcjoKLSAgICAgICAgICAgIHJldHVybiBuZXcgQ1NTUHJpbWl0
aXZlVmFsdWUoc3ZnU3R5bGUtPmZsb29kQ29sb3IoKS5yZ2IoKSk7CisgICAgICAgICAgICByZXR1
cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUNvbG9yKHN2Z1N0eWxlLT5mbG9vZENvbG9yKCku
cmdiKCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5TGlnaHRpbmdDb2xvcjoKLSAgICAgICAg
ICAgIHJldHVybiBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUoc3ZnU3R5bGUtPmxpZ2h0aW5nQ29sb3Io
KS5yZ2IoKSk7CisgICAgICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUNv
bG9yKHN2Z1N0eWxlLT5saWdodGluZ0NvbG9yKCkucmdiKCkpOwogICAgICAgICBjYXNlIENTU1By
b3BlcnR5U3RvcENvbG9yOgotICAgICAgICAgICAgcmV0dXJuIG5ldyBDU1NQcmltaXRpdmVWYWx1
ZShzdmdTdHlsZS0+c3RvcENvbG9yKCkucmdiKCkpOworICAgICAgICAgICAgcmV0dXJuIENTU1By
aW1pdGl2ZVZhbHVlOjpjcmVhdGVDb2xvcihzdmdTdHlsZS0+c3RvcENvbG9yKCkucmdiKCkpOwog
ICAgICAgICBjYXNlIENTU1Byb3BlcnR5RmlsbDoKICAgICAgICAgICAgIHJldHVybiBzdmdTdHls
ZS0+ZmlsbFBhaW50KCk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlLZXJuaW5nOgogICAgICAg
ICAgICAgcmV0dXJuIHN2Z1N0eWxlLT5rZXJuaW5nKCk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVy
dHlNYXJrZXJFbmQ6CiAgICAgICAgICAgICBpZiAoIXN2Z1N0eWxlLT5lbmRNYXJrZXIoKS5pc0Vt
cHR5KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDU1NQcmltaXRpdmVWYWx1ZShzdmdT
dHlsZS0+ZW5kTWFya2VyKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKTsKLSAgICAgICAg
ICAgIHJldHVybiBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUoQ1NTVmFsdWVOb25lKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShzdmdTdHlsZS0+ZW5kTWFy
a2VyKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKTsKKyAgICAgICAgICAgIHJldHVybiBD
U1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlSWRlbnRpZmllcihDU1NWYWx1ZU5vbmUpOwogICAgICAg
ICBjYXNlIENTU1Byb3BlcnR5TWFya2VyTWlkOgogICAgICAgICAgICAgaWYgKCFzdmdTdHlsZS0+
bWlkTWFya2VyKCkuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ1NTUHJp
bWl0aXZlVmFsdWUoc3ZnU3R5bGUtPm1pZE1hcmtlcigpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NT
X1VSSSk7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKENTU1ZhbHVl
Tm9uZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUo
c3ZnU3R5bGUtPm1pZE1hcmtlcigpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSk7CisgICAg
ICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUlkZW50aWZpZXIoQ1NTVmFs
dWVOb25lKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eU1hcmtlclN0YXJ0OgogICAgICAgICAg
ICAgaWYgKCFzdmdTdHlsZS0+c3RhcnRNYXJrZXIoKS5pc0VtcHR5KCkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIG5ldyBDU1NQcmltaXRpdmVWYWx1ZShzdmdTdHlsZS0+c3RhcnRNYXJrZXIoKSwg
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpOwotICAgICAgICAgICAgcmV0dXJuIG5ldyBDU1NQ
cmltaXRpdmVWYWx1ZShDU1NWYWx1ZU5vbmUpOworICAgICAgICAgICAgICAgIHJldHVybiBDU1NQ
cmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHN2Z1N0eWxlLT5zdGFydE1hcmtlcigpLCBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX1VSSSk7CisgICAgICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6
OmNyZWF0ZUlkZW50aWZpZXIoQ1NTVmFsdWVOb25lKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0
eVN0cm9rZToKICAgICAgICAgICAgIHJldHVybiBzdmdTdHlsZS0+c3Ryb2tlUGFpbnQoKTsKICAg
ICAgICAgY2FzZSBDU1NQcm9wZXJ0eVN0cm9rZURhc2hhcnJheToKQEAgLTE0OSwxMSArMTQ5LDEx
IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU0NvbXB1dGVkU3R5bGVEZWMKICAgICAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eUJhc2VsaW5lU2hpZnQ6IHsKICAgICAgICAgICAgIHN3aXRjaCAoc3ZnU3R5
bGUtPmJhc2VsaW5lU2hpZnQoKSkgewogICAgICAgICAgICAgICAgIGNhc2UgQlNfQkFTRUxJTkU6
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUoQ1NTVmFs
dWVCYXNlbGluZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1
ZTo6Y3JlYXRlSWRlbnRpZmllcihDU1NWYWx1ZUJhc2VsaW5lKTsKICAgICAgICAgICAgICAgICBj
YXNlIEJTX1NVUEVSOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENTU1ByaW1pdGl2
ZVZhbHVlKENTU1ZhbHVlU3VwZXIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ1NTUHJp
bWl0aXZlVmFsdWU6OmNyZWF0ZUlkZW50aWZpZXIoQ1NTVmFsdWVTdXBlcik7CiAgICAgICAgICAg
ICAgICAgY2FzZSBCU19TVUI6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ1NTUHJp
bWl0aXZlVmFsdWUoQ1NTVmFsdWVTdWIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ1NT
UHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUlkZW50aWZpZXIoQ1NTVmFsdWVTdWIpOwogICAgICAgICAg
ICAgICAgIGNhc2UgQlNfTEVOR1RIOgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3ZnU3R5
bGUtPmJhc2VsaW5lU2hpZnRWYWx1ZSgpOwogICAgICAgICAgICAgfQpAQCAtMTYxLDExICsxNjEs
MTEgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTQ29tcHV0ZWRTdHlsZURlYwogICAgICAgICBj
YXNlIENTU1Byb3BlcnR5R2x5cGhPcmllbnRhdGlvbkhvcml6b250YWw6CiAgICAgICAgICAgICBy
ZXR1cm4gZ2x5cGhPcmllbnRhdGlvblRvQ1NTUHJpbWl0aXZlVmFsdWUoc3ZnU3R5bGUtPmdseXBo
T3JpZW50YXRpb25Ib3Jpem9udGFsKCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5R2x5cGhP
cmllbnRhdGlvblZlcnRpY2FsOiB7Ci0gICAgICAgICAgICBpZiAoQ1NTUHJpbWl0aXZlVmFsdWUq
IHZhbHVlID0gZ2x5cGhPcmllbnRhdGlvblRvQ1NTUHJpbWl0aXZlVmFsdWUoc3ZnU3R5bGUtPmds
eXBoT3JpZW50YXRpb25WZXJ0aWNhbCgpKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7
CisgICAgICAgICAgICBpZiAoUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB2YWx1ZSA9IGdseXBo
T3JpZW50YXRpb25Ub0NTU1ByaW1pdGl2ZVZhbHVlKHN2Z1N0eWxlLT5nbHlwaE9yaWVudGF0aW9u
VmVydGljYWwoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnJlbGVhc2UoKTsKIAog
ICAgICAgICAgICAgaWYgKHN2Z1N0eWxlLT5nbHlwaE9yaWVudGF0aW9uVmVydGljYWwoKSA9PSBH
T19BVVRPKQotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUoQ1NT
VmFsdWVBdXRvKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNy
ZWF0ZUlkZW50aWZpZXIoQ1NTVmFsdWVBdXRvKTsKIAogICAgICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgICAgIH0KSW5kZXg6IFdlYkNvcmUvY3NzL1NWR0NTU1BhcnNlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9jc3MvU1ZHQ1NTUGFyc2VyLmNwcAkocmV2aXNpb24gMzQ1ODQpCisrKyBXZWJD
b3JlL2Nzcy9TVkdDU1NQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Miw3ICs5Miw3IEBA
IGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVNWR1ZhbHVlKGludCBwcm9wSWQKICAgICAgICAgaWYgKGlk
ID09IENTU1ZhbHVlTm9uZSkKICAgICAgICAgICAgIHZhbGlkX3ByaW1pdGl2ZSA9IHRydWU7CiAg
ICAgICAgIGVsc2UgaWYgKHZhbHVlLT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJ
KSB7Ci0gICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IG5ldyBDU1NQcmltaXRpdmVWYWx1ZSh2YWx1
ZS0+c3RyaW5nLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSk7CisgICAgICAgICAgICBwYXJz
ZWRWYWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUodmFsdWUtPnN0cmluZywgQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19VUkkpOwogICAgICAgICAgICAgaWYgKHBhcnNlZFZhbHVlKQogICAg
ICAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CiAgICAgICAgIH0KQEAgLTE4MSw3ICsx
ODEsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VTVkdWYWx1ZShpbnQgcHJvcElkCiAgICAgLyog
ZmFsbHRocm91Z2ggaW50ZW50aW9uYWwgKi8KICAgICBjYXNlIENTU1Byb3BlcnR5R2x5cGhPcmll
bnRhdGlvbkhvcml6b250YWw6IC8vIDxhbmdsZT4gKHJlc3RyaWN0ZWQgdG8gX2RlZ18gcGVyIFNW
RyAxLjEgc3BlYykgfCBpbmhlcml0CiAgICAgICAgIGlmICh2YWx1ZS0+dW5pdCA9PSBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX0RFRyB8fCB2YWx1ZS0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX05VTUJFUikgewotICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBuZXcgQ1NTUHJpbWl0aXZl
VmFsdWUodmFsdWUtPmZWYWx1ZSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19ERUcpOworICAgICAg
ICAgICAgcGFyc2VkVmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHZhbHVlLT5mVmFs
dWUsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfREVHKTsKIAogICAgICAgICAgICAgaWYgKHBhcnNl
ZFZhbHVlKQogICAgICAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CkBAIC0xOTIsMTUg
KzE5MiwxNSBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VTVkdWYWx1ZShpbnQgcHJvcElkCiAgICAg
Y2FzZSBDU1NQcm9wZXJ0eVN0cm9rZTogICAgICAgICAgICAgICAvLyA8cGFpbnQ+IHwgaW5oZXJp
dAogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVOb25lKQotICAgICAg
ICAgICAgICAgIHBhcnNlZFZhbHVlID0gbmV3IFNWR1BhaW50KFNWR1BhaW50OjpTVkdfUEFJTlRU
WVBFX05PTkUpOworICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gU1ZHUGFpbnQ6OmNyZWF0
ZShTVkdQYWludDo6U1ZHX1BBSU5UVFlQRV9OT05FKTsKICAgICAgICAgICAgIGVsc2UgaWYgKGlk
ID09IENTU1ZhbHVlQ3VycmVudGNvbG9yKQotICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVlID0g
bmV3IFNWR1BhaW50KFNWR1BhaW50OjpTVkdfUEFJTlRUWVBFX0NVUlJFTlRDT0xPUik7CisgICAg
ICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBTVkdQYWludDo6Y3JlYXRlKFNWR1BhaW50OjpTVkdf
UEFJTlRUWVBFX0NVUlJFTlRDT0xPUik7CiAgICAgICAgICAgICBlbHNlIGlmICh2YWx1ZS0+dW5p
dCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSkgewogICAgICAgICAgICAgICAgIFJHQkEz
MiBjID0gQ29sb3I6OnRyYW5zcGFyZW50OwogICAgICAgICAgICAgICAgIGlmIChtX3ZhbHVlTGlz
dC0+bmV4dCgpICYmIHBhcnNlQ29sb3JGcm9tVmFsdWUobV92YWx1ZUxpc3QtPmN1cnJlbnQoKSwg
YywgdHJ1ZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBuZXcgU1ZHUGFp
bnQodmFsdWUtPnN0cmluZywgYyk7CisgICAgICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVlID0g
U1ZHUGFpbnQ6OmNyZWF0ZSh2YWx1ZS0+c3RyaW5nLCBjKTsKICAgICAgICAgICAgICAgICB9IGVs
c2UKLSAgICAgICAgICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBuZXcgU1ZHUGFpbnQoU1ZHUGFp
bnQ6OlNWR19QQUlOVFRZUEVfVVJJLCB2YWx1ZS0+c3RyaW5nKTsKKyAgICAgICAgICAgICAgICAg
ICAgcGFyc2VkVmFsdWUgPSBTVkdQYWludDo6Y3JlYXRlKFNWR1BhaW50OjpTVkdfUEFJTlRUWVBF
X1VSSSwgdmFsdWUtPnN0cmluZyk7CiAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAg
ICBwYXJzZWRWYWx1ZSA9IHBhcnNlU1ZHUGFpbnQoKTsKIApAQCAtMjEyLDcgKzIxMiw3IEBAIGJv
b2wgQ1NTUGFyc2VyOjpwYXJzZVNWR1ZhbHVlKGludCBwcm9wSWQKICAgICBjYXNlIENTU1Byb3Bl
cnR5Q29sb3I6ICAgICAgICAgICAgICAgIC8vIDxjb2xvcj4gfCBpbmhlcml0CiAgICAgICAgIGlm
ICgoaWQgPj0gQ1NTVmFsdWVBcXVhICYmIGlkIDw9IENTU1ZhbHVlV2luZG93dGV4dCkgfHwKICAg
ICAgICAgICAgKGlkID49IENTU1ZhbHVlQWxpY2VibHVlICYmIGlkIDw9IENTU1ZhbHVlWWVsbG93
Z3JlZW4pKQotICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBuZXcgU1ZHQ29sb3IodmFsdWUtPnN0
cmluZyk7CisgICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IFNWR0NvbG9yOjpjcmVhdGUodmFsdWUt
PnN0cmluZyk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gcGFyc2VT
VkdDb2xvcigpOwogCkBAIC0yMjUsOSArMjI1LDkgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlU1ZH
VmFsdWUoaW50IHByb3BJZAogICAgIGNhc2UgQ1NTUHJvcGVydHlMaWdodGluZ0NvbG9yOgogICAg
ICAgICBpZiAoKGlkID49IENTU1ZhbHVlQXF1YSAmJiBpZCA8PSBDU1NWYWx1ZVdpbmRvd3RleHQp
IHx8CiAgICAgICAgICAgIChpZCA+PSBDU1NWYWx1ZUFsaWNlYmx1ZSAmJiBpZCA8PSBDU1NWYWx1
ZVllbGxvd2dyZWVuKSkKLSAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gbmV3IFNWR0NvbG9yKHZh
bHVlLT5zdHJpbmcpOworICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBTVkdDb2xvcjo6Y3JlYXRl
KHZhbHVlLT5zdHJpbmcpOwogICAgICAgICBlbHNlIGlmIChpZCA9PSBDU1NWYWx1ZUN1cnJlbnRj
b2xvcikKLSAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gbmV3IFNWR0NvbG9yKFNWR0NvbG9yOjpT
VkdfQ09MT1JUWVBFX0NVUlJFTlRDT0xPUik7CisgICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IFNW
R0NvbG9yOjpjcmVhdGUoU1ZHQ29sb3I6OlNWR19DT0xPUlRZUEVfQ1VSUkVOVENPTE9SKTsKICAg
ICAgICAgZWxzZSAvLyBUT0RPIDogc3ZnY29sb3IgKGljY0NvbG9yKQogICAgICAgICAgICAgcGFy
c2VkVmFsdWUgPSBwYXJzZVNWR0NvbG9yKCk7CiAKQEAgLTI2Niw3ICsyNjYsNyBAQCBib29sIENT
U1BhcnNlcjo6cGFyc2VTVkdWYWx1ZShpbnQgcHJvcElkCiAgICAgICAgIGlmIChpZCA9PSBDU1NW
YWx1ZU5vbmUpCiAgICAgICAgICAgICB2YWxpZF9wcmltaXRpdmUgPSB0cnVlOwogICAgICAgICBl
bHNlIGlmICh2YWx1ZS0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSkgewotICAg
ICAgICAgICAgcGFyc2VkVmFsdWUgPSBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUtPnN0cmlu
ZywgKENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMpIHZhbHVlLT51bml0KTsKKyAgICAgICAg
ICAgIHBhcnNlZFZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSh2YWx1ZS0+c3RyaW5n
LCAoQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcykgdmFsdWUtPnVuaXQpOwogICAgICAgICAg
ICAgaWYgKHBhcnNlZFZhbHVlKQogICAgICAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7
CiAgICAgICAgIH0KQEAgLTI5OCwxMyArMjk4LDEzIEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVNW
R1ZhbHVlKGludCBwcm9wSWQKIAogICAgIGlmICh2YWxpZF9wcmltaXRpdmUpIHsKICAgICAgICAg
aWYgKGlkICE9IDApCi0gICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IG5ldyBDU1NQcmltaXRpdmVW
YWx1ZShpZCk7CisgICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpj
cmVhdGVJZGVudGlmaWVyKGlkKTsKICAgICAgICAgZWxzZSBpZiAodmFsdWUtPnVuaXQgPT0gQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpCi0gICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IG5l
dyBDU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZS0+c3RyaW5nLCAoQ1NTUHJpbWl0aXZlVmFsdWU6OlVu
aXRUeXBlcykgdmFsdWUtPnVuaXQpOworICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBDU1NQcmlt
aXRpdmVWYWx1ZTo6Y3JlYXRlKHZhbHVlLT5zdHJpbmcsIChDU1NQcmltaXRpdmVWYWx1ZTo6VW5p
dFR5cGVzKSB2YWx1ZS0+dW5pdCk7CiAgICAgICAgIGVsc2UgaWYgKHZhbHVlLT51bml0ID49IENT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSICYmIHZhbHVlLT51bml0IDw9IENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfS0haKQotICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBuZXcgQ1NTUHJpbWl0
aXZlVmFsdWUodmFsdWUtPmZWYWx1ZSwgKENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMpIHZh
bHVlLT51bml0KTsKKyAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6
OmNyZWF0ZSh2YWx1ZS0+ZlZhbHVlLCAoQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcykgdmFs
dWUtPnVuaXQpOwogICAgICAgICBlbHNlIGlmICh2YWx1ZS0+dW5pdCA+PSBWYWx1ZTo6UV9FTVMp
Ci0gICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IG5ldyBDU1NRdWlya1ByaW1pdGl2ZVZhbHVlKHZh
bHVlLT5mVmFsdWUsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRU1TKTsKKyAgICAgICAgICAgIHBh
cnNlZFZhbHVlID0gQ1NTUXVpcmtQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHZhbHVlLT5mVmFsdWUs
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRU1TKTsKICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQo
KTsKICAgICB9CiAgICAgaWYgKCFwYXJzZWRWYWx1ZSB8fCAobV92YWx1ZUxpc3QtPmN1cnJlbnQo
KSAmJiAhaW5TaG9ydGhhbmQoKSkpCkBAIC0zMTYsNyArMzE2LDcgQEAgYm9vbCBDU1NQYXJzZXI6
OnBhcnNlU1ZHVmFsdWUoaW50IHByb3BJZAogCiBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJz
ZXI6OnBhcnNlU1ZHU3Ryb2tlRGFzaGFycmF5KCkKIHsKLSAgICBDU1NWYWx1ZUxpc3QqIHJldCA9
IG5ldyBDU1NWYWx1ZUxpc3Q7CisgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gcmV0ID0gQ1NTVmFs
dWVMaXN0OjpjcmVhdGVDb21tYVNlcGFyYXRlZCgpOwogICAgIFZhbHVlKiB2YWx1ZSA9IG1fdmFs
dWVMaXN0LT5jdXJyZW50KCk7CiAgICAgYm9vbCB2YWxpZF9wcmltaXRpdmUgPSB0cnVlOwogICAg
IHdoaWxlICh2YWx1ZSkgewpAQCAtMzI0LDI3ICszMjQsMjQgQEAgUGFzc1JlZlB0cjxDU1NWYWx1
ZT4gQ1NTUGFyc2VyOjpwYXJzZVNWRwogICAgICAgICBpZiAoIXZhbGlkX3ByaW1pdGl2ZSkKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBpZiAodmFsdWUtPmlkICE9IDApCi0gICAgICAgICAg
ICByZXQtPmFwcGVuZChuZXcgQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUtPmlkKSk7CisgICAgICAg
ICAgICByZXQtPmFwcGVuZChDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlSWRlbnRpZmllcih2YWx1
ZS0+aWQpKTsKICAgICAgICAgZWxzZSBpZiAodmFsdWUtPnVuaXQgPj0gQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19OVU1CRVIgJiYgdmFsdWUtPnVuaXQgPD0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19L
SFopCi0gICAgICAgICAgICByZXQtPmFwcGVuZChuZXcgQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUt
PmZWYWx1ZSwgKENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMpIHZhbHVlLT51bml0KSk7Cisg
ICAgICAgICAgICByZXQtPmFwcGVuZChDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHZhbHVlLT5m
VmFsdWUsIChDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzKSB2YWx1ZS0+dW5pdCkpOwogICAg
ICAgICB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5uZXh0KCk7CiAgICAgICAgIGlmICh2YWx1ZSAmJiB2
YWx1ZS0+dW5pdCA9PSBWYWx1ZTo6T3BlcmF0b3IgJiYgdmFsdWUtPmlWYWx1ZSA9PSAnLCcpCiAg
ICAgICAgICAgICB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5uZXh0KCk7CiAgICAgfQotICAgIGlmICgh
dmFsaWRfcHJpbWl0aXZlKSB7Ci0gICAgICAgIGRlbGV0ZSByZXQ7Ci0gICAgICAgIHJldCA9IDA7
Ci0gICAgfQotCi0gICAgcmV0dXJuIHJldDsKKyAgICBpZiAoIXZhbGlkX3ByaW1pdGl2ZSkKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIHJldC5yZWxlYXNlKCk7CiB9CiAKIFBhc3NSZWZQ
dHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VTVkdQYWludCgpCiB7CiAgICAgUkdCQTMyIGMg
PSBDb2xvcjo6dHJhbnNwYXJlbnQ7CiAgICAgaWYgKCFwYXJzZUNvbG9yRnJvbVZhbHVlKG1fdmFs
dWVMaXN0LT5jdXJyZW50KCksIGMsIHRydWUpKQotICAgICAgICByZXR1cm4gbmV3IFNWR1BhaW50
KCk7Ci0gICAgcmV0dXJuIG5ldyBTVkdQYWludChDb2xvcihjKSk7CisgICAgICAgIHJldHVybiBT
VkdQYWludDo6Y3JlYXRlKCk7CisgICAgcmV0dXJuIFNWR1BhaW50OjpjcmVhdGUoQ29sb3IoYykp
OwogfQogCiBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlU1ZHQ29sb3IoKQpA
QCAtMzUyLDcgKzM0OSw3IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VT
VkcKICAgICBSR0JBMzIgYyA9IENvbG9yOjp0cmFuc3BhcmVudDsKICAgICBpZiAoIXBhcnNlQ29s
b3JGcm9tVmFsdWUobV92YWx1ZUxpc3QtPmN1cnJlbnQoKSwgYywgdHJ1ZSkpCiAgICAgICAgIHJl
dHVybiAwOwotICAgIHJldHVybiBuZXcgU1ZHQ29sb3IoQ29sb3IoYykpOworICAgIHJldHVybiBT
VkdDb2xvcjo6Y3JlYXRlKENvbG9yKGMpKTsKIH0KIAogfQpJbmRleDogV2ViQ29yZS9jc3MvU2hh
ZG93VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9TaGFkb3dWYWx1ZS5oCShyZXZp
c2lvbiAzNDU4NCkKKysrIFdlYkNvcmUvY3NzL1NoYWRvd1ZhbHVlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsOCArMSw2IEBACiAvKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERPTSBpbXBs
ZW1lbnRhdGlvbiBmb3IgS0RFLgotICoKICAqIChDKSAxOTk5LTIwMDMgTGFycyBLbm9sbCAoa25v
bGxAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiBBcHBsZSBDb21w
dXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzIsMjAg
KzMwLDI4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIENTU1ByaW1pdGl2ZVZhbHVlOwog
CiAvLyBVc2VkIGZvciB0ZXh0LXNoYWRvdyBhbmQgYm94LXNoYWRvdwotY2xhc3MgU2hhZG93VmFs
dWUgOiBwdWJsaWMgQ1NTVmFsdWUKLXsKK2NsYXNzIFNoYWRvd1ZhbHVlIDogcHVibGljIENTU1Zh
bHVlIHsKIHB1YmxpYzoKLSAgICBTaGFkb3dWYWx1ZShQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiB4LAorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNoYWRvd1ZhbHVlPiBjcmVhdGUoUGFzc1Jl
ZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4geCwKICAgICAgICAgUGFzc1JlZlB0cjxDU1NQcmltaXRp
dmVWYWx1ZT4geSwKICAgICAgICAgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gYmx1ciwK
LSAgICAgICAgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY29sb3IpOwotICAgIAorICAg
ICAgICBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb2xvcikKKyAgICB7CisgICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgU2hhZG93VmFsdWUoeCwgeSwgYmx1ciwgY29sb3IpKTsKKyAg
ICB9CisKICAgICB2aXJ0dWFsIFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7CiAKICAgICBSZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+IHg7CiAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB5Owog
ICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gYmx1cjsKICAgICBSZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+IGNvbG9yOworCitwcml2YXRlOgorICAgIFNoYWRvd1ZhbHVlKFBhc3NSZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+IHgsCisgICAgICAgIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFs
dWU+IHksCisgICAgICAgIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGJsdXIsCisgICAg
ICAgIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbG9yKTsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlCkluZGV4OiBXZWJDb3JlL2Nzcy9TdHlsZUJhc2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2Nzcy9TdHlsZUJhc2UuaAkocmV2aXNpb24gMzQ1ODQpCisrKyBXZWJDb3JlL2Nzcy9TdHls
ZUJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTUgKzMxLDEzIEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICBjbGFzcyBTdHlsZVNoZWV0OwogICAgIGNsYXNzIEtVUkw7CiAKLSAgICAvLyBh
IHN0eWxlIGNsYXNzIHdoaWNoIGhhcyBhIHBhcmVudCAoYWxtb3N0IGFsbCBoYXZlKQorICAgIC8v
IEJhc2UgY2xhc3MgZm9yIG1vc3QgQ1NTIERPTSBvYmplY3RzLgorCisgICAgLy8gRklYTUU6IFdl
IGRvbid0IG5lZWQgdGhlc2UgdG8gYWxsIHNoYXJlIG9uZSBiYXNlIGNsYXNzLgorICAgIC8vIFJl
ZmFjdG9yIHNvIHRoZXkgZG9uJ3QgYW55IG1vcmUuCisKICAgICBjbGFzcyBTdHlsZUJhc2UgOiBw
dWJsaWMgUmVmQ291bnRlZDxTdHlsZUJhc2U+IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIFN0eWxl
QmFzZShTdHlsZUJhc2UqIHBhcmVudCkKLSAgICAgICAgICAgIDogUmVmQ291bnRlZDxTdHlsZUJh
c2U+KDApCi0gICAgICAgICAgICAsIG1fcGFyZW50KHBhcmVudCkKLSAgICAgICAgICAgICwgbV9z
dHJpY3RQYXJzaW5nKCFwYXJlbnQgfHwgcGFyZW50LT51c2VTdHJpY3RQYXJzaW5nKCkpCi0gICAg
ICAgIHsKLSAgICAgICAgfQogICAgICAgICB2aXJ0dWFsIH5TdHlsZUJhc2UoKSB7IH0KIAogICAg
ICAgICBTdHlsZUJhc2UqIHBhcmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50OyB9CkBAIC00
OCwzMSArNDYsMTYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyByZXR1cm5zIHRo
ZSB1cmwgb2YgdGhlIHN0eWxlIHNoZWV0IHRoaXMgb2JqZWN0IGJlbG9uZ3MgdG8KICAgICAgICAg
S1VSTCBiYXNlVVJMKCkgY29uc3Q7CiAKLSAgICAgICAgdmlydHVhbCBib29sIGlzU3R5bGVTaGVl
dCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc0NTU1N0
eWxlU2hlZXQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgICAgICB2aXJ0dWFsIGJvb2wg
aXNYU0xTdHlsZVNoZWV0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICAgICAgdmlydHVh
bCBib29sIGlzU3R5bGVTaGVldExpc3QoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgICAg
ICB2aXJ0dWFsIGJvb2wgaXNNZWRpYUxpc3QoKSB7IHJldHVybiBmYWxzZTsgfQotICAgICAgICB2
aXJ0dWFsIGJvb2wgaXNSdWxlTGlzdCgpIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgICAgIHZpcnR1
YWwgYm9vbCBpc1J1bGUoKSB7IHJldHVybiBmYWxzZTsgfQotICAgICAgICB2aXJ0dWFsIGJvb2wg
aXNTdHlsZVJ1bGUoKSB7IHJldHVybiBmYWxzZTsgfQogICAgICAgICB2aXJ0dWFsIGJvb2wgaXND
aGFyc2V0UnVsZSgpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgICAgIHZpcnR1YWwgYm9vbCBpc0Zv
bnRGYWNlUnVsZSgpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc0lt
cG9ydFJ1bGUoKSB7IHJldHVybiBmYWxzZTsgfQogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNNZWRp
YVJ1bGUoKSB7IHJldHVybiBmYWxzZTsgfQotICAgICAgICB2aXJ0dWFsIGJvb2wgaXNGb250RmFj
ZVJ1bGUoKSB7IHJldHVybiBmYWxzZTsgfQotICAgICAgICB2aXJ0dWFsIGJvb2wgaXNQYWdlUnVs
ZSgpIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBpc1Vua25vd25SdWxl
KCkgeyByZXR1cm4gZmFsc2U7IH0KLSAgICAgICAgdmlydHVhbCBib29sIGlzU3R5bGVEZWNsYXJh
dGlvbigpIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBpc1ZhbHVlKCkg
eyByZXR1cm4gZmFsc2U7IH0KLSAgICAgICAgdmlydHVhbCBib29sIGlzUHJpbWl0aXZlVmFsdWUo
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgICAgICB2aXJ0dWFsIGJvb2wgaXNWYWx1ZUxp
c3QoKSB7IHJldHVybiBmYWxzZTsgfQotICAgICAgICB2aXJ0dWFsIGJvb2wgaXNWYWx1ZUN1c3Rv
bSgpIHsgcmV0dXJuIGZhbHNlOyB9Ci0jaWYgRU5BQkxFKFNWRykKLSAgICAgICAgdmlydHVhbCBi
b29sIGlzU1ZHQ29sb3IoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgICAgICB2aXJ0dWFs
IGJvb2wgaXNTVkdQYWludCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0jZW5kaWYKKyAgICAg
ICAgdmlydHVhbCBib29sIGlzUnVsZSgpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgICAgIHZpcnR1
YWwgYm9vbCBpc1N0eWxlUnVsZSgpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgICAgIHZpcnR1YWwg
Ym9vbCBpc1N0eWxlU2hlZXQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgICAgICB2aXJ0
dWFsIGJvb2wgaXNYU0xTdHlsZVNoZWV0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAotICAg
ICAgICB2aXJ0dWFsIGJvb2wgcGFyc2VTdHJpbmcoY29uc3QgU3RyaW5nJiwgYm9vbCAvKnN0cmlj
dCovID0gZmFsc2UpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIHZpcnR1YWwgdm9pZCBjaGVj
a0xvYWRlZCgpOwogCiAgICAgICAgIHZvaWQgc2V0U3RyaWN0UGFyc2luZyhib29sIGIpIHsgbV9z
dHJpY3RQYXJzaW5nID0gYjsgfQpAQCAtODIsNiArNjUsMTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiAgICAgICAgIFN0eWxlU2hlZXQqIHN0eWxlc2hlZXQoKTsKIAorICAgIHByb3RlY3RlZDoK
KyAgICAgICAgU3R5bGVCYXNlKFN0eWxlQmFzZSogcGFyZW50KQorICAgICAgICAgICAgOiBtX3Bh
cmVudChwYXJlbnQpCisgICAgICAgICAgICAsIG1fc3RyaWN0UGFyc2luZyghcGFyZW50IHx8IHBh
cmVudC0+dXNlU3RyaWN0UGFyc2luZygpKQorICAgICAgICB7CisgICAgICAgIH0KKwogICAgIHBy
aXZhdGU6CiAgICAgICAgIFN0eWxlQmFzZSogbV9wYXJlbnQ7CiAgICAgICAgIGJvb2wgbV9zdHJp
Y3RQYXJzaW5nOwpJbmRleDogV2ViQ29yZS9jc3MvU3R5bGVMaXN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2Nzcy9TdHlsZUxpc3QuY3BwCShyZXZpc2lvbiAzNDU4NCkKKysrIFdlYkNvcmUv
Y3NzL1N0eWxlTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTEgKzEsOSBAQAogLyoKLSAq
IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9yIEtERS4KLSAq
CiAgKiBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMyBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQog
ICogICAgICAgICAgICAgICAxOTk5IFdhbGRvIEJhc3RpYW4gKGJhc3RpYW5Aa2RlLm9yZykKICAq
ICAgICAgICAgICAgICAgMjAwMSBBbmRyZWFzIFNjaGxhcGJhY2ggKHNjaGxwYmNoQGlhbS51bmli
ZS5jaCkKICAqICAgICAgICAgICAgICAgMjAwMS0yMDAzIERpcmsgTXVlbGxlciAobXVlbGxlckBr
ZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDAyLCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMiw5ICsyMCwxMiBAQAogICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKICAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgogICovCisKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJTdHlsZUxpc3QuaCIKIAorI2luY2x1ZGUgPHd0Zi9QYXNz
UmVmUHRyLmg+CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdm9pZCBTdHlsZUxpc3Q6OmFwcGVu
ZChQYXNzUmVmUHRyPFN0eWxlQmFzZT4gY2hpbGQpCkluZGV4OiBXZWJDb3JlL2Nzcy9TdHlsZUxp
c3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9TdHlsZUxpc3QuaAkocmV2aXNpb24gMzQ1
ODQpCisrKyBXZWJDb3JlL2Nzcy9TdHlsZUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw5ICsx
LDcgQEAKIC8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgQ1NTIGltcGxlbWVudGF0aW9u
IGZvciBLREUuCi0gKgogICogQ29weXJpZ2h0IChDKSAxOTk5LTIwMDMgTGFycyBLbm9sbCAoa25v
bGxAa2RlLm9yZykKICAqICAgICAgICAgICAgICAgMTk5OSBXYWxkbyBCYXN0aWFuIChiYXN0aWFu
QGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI1LDcgKzIzLDggQEAKICNkZWZp
bmUgU3R5bGVMaXN0X2gKIAogI2luY2x1ZGUgIlN0eWxlQmFzZS5oIgotI2luY2x1ZGUgPHd0Zi9Q
YXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBA
IC0zMyw4ICszMiw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAvLyBhIHN0eWxlIGNsYXNz
IHdoaWNoIGhhcyBhIGxpc3Qgb2YgY2hpbGRyZW4gKFN0eWxlU2hlZXRzIGZvciBleGFtcGxlKQog
ICAgIGNsYXNzIFN0eWxlTGlzdCA6IHB1YmxpYyBTdHlsZUJhc2UgewogICAgIHB1YmxpYzoKLSAg
ICAgICAgU3R5bGVMaXN0KFN0eWxlQmFzZSogcGFyZW50KSA6IFN0eWxlQmFzZShwYXJlbnQpIHsg
fQotCiAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCgpIHsgcmV0dXJuIG1fY2hpbGRyZW4uc2l6ZSgp
OyB9CiAgICAgICAgIFN0eWxlQmFzZSogaXRlbSh1bnNpZ25lZCBudW0pIHsgcmV0dXJuIG51bSA8
IGxlbmd0aCgpID8gbV9jaGlsZHJlbltudW1dLmdldCgpIDogMDsgfQogCkBAIC00Myw2ICs0MCw4
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCByZW1vdmUodW5zaWduZWQgcG9z
aXRpb24pOwogCiAgICAgcHJvdGVjdGVkOgorICAgICAgICBTdHlsZUxpc3QoU3R5bGVCYXNlKiBw
YXJlbnQpIDogU3R5bGVCYXNlKHBhcmVudCkgeyB9CisKICAgICAgICAgVmVjdG9yPFJlZlB0cjxT
dHlsZUJhc2U+ID4gbV9jaGlsZHJlbjsKICAgICB9OwogfQpJbmRleDogV2ViQ29yZS9jc3MvU3R5
bGVTaGVldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL1N0eWxlU2hlZXQuaAkocmV2aXNp
b24gMzQ1ODQpCisrKyBXZWJDb3JlL2Nzcy9TdHlsZVNoZWV0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsOCArMSw2IEBACiAvKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERPTSBpbXBsZW1l
bnRhdGlvbiBmb3IgS0RFLgotICoKICAqIChDKSAxOTk5LTIwMDMgTGFycyBLbm9sbCAoa25vbGxA
a2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5j
LgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjUsMjYgKzIzLDE4IEBACiAKICNp
bmNsdWRlICJTdHlsZUxpc3QuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgotCiAjaW5j
bHVkZSA8d3RmL0hhc2hTZXQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBOb2Rl
OwogY2xhc3MgQ2FjaGVkQ1NTU3R5bGVTaGVldDsKIGNsYXNzIE1lZGlhTGlzdDsKK2NsYXNzIE5v
ZGU7CiAKIGNsYXNzIFN0eWxlU2hlZXQgOiBwdWJsaWMgU3R5bGVMaXN0IHsKIHB1YmxpYzoKLSAg
ICBTdHlsZVNoZWV0KE5vZGUqIG93bmVyTm9kZSwgY29uc3QgU3RyaW5nJiBocmVmID0gU3RyaW5n
KCkpOwotICAgIFN0eWxlU2hlZXQoU3R5bGVTaGVldCogcGFyZW50U2hlZXQsIGNvbnN0IFN0cmlu
ZyYgaHJlZiA9IFN0cmluZygpKTsKLSAgICBTdHlsZVNoZWV0KFN0eWxlQmFzZSogb3duZXIsIGNv
bnN0IFN0cmluZyYgaHJlZiA9IFN0cmluZygpKTsKICAgICB2aXJ0dWFsIH5TdHlsZVNoZWV0KCk7
CiAKLSAgICB2aXJ0dWFsIGJvb2wgaXNTdHlsZVNoZWV0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsg
fQotCi0gICAgdmlydHVhbCBTdHJpbmcgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIFN0cmluZygpOyB9
Ci0KICAgICBib29sIGRpc2FibGVkKCkgY29uc3QgeyByZXR1cm4gbV9kaXNhYmxlZDsgfQogICAg
IHZvaWQgc2V0RGlzYWJsZWQoYm9vbCBkaXNhYmxlZCkgeyBtX2Rpc2FibGVkID0gZGlzYWJsZWQ7
IHN0eWxlU2hlZXRDaGFuZ2VkKCk7IH0KIApAQCAtNTcsMTMgKzQ3LDIxIEBAIHB1YmxpYzoKICAg
ICBNZWRpYUxpc3QqIG1lZGlhKCkgY29uc3QgeyByZXR1cm4gbV9tZWRpYS5nZXQoKTsgfQogICAg
IHZvaWQgc2V0TWVkaWEoUGFzc1JlZlB0cjxNZWRpYUxpc3Q+KTsKIAotICAgIHZpcnR1YWwgYm9v
bCBpc0xvYWRpbmcoKSB7IHJldHVybiBmYWxzZTsgfQotCisgICAgdmlydHVhbCBTdHJpbmcgdHlw
ZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNMb2FkaW5nKCkgPSAwOwogICAgIHZp
cnR1YWwgdm9pZCBzdHlsZVNoZWV0Q2hhbmdlZCgpIHsgfQotICAgIAogICAgIHZpcnR1YWwgdm9p
ZCBhZGRTdWJyZXNvdXJjZVVSTFN0cmluZ3MoSGFzaFNldDxTdHJpbmc+JiwgY29uc3QgU3RyaW5n
JiBiYXNlVVJMKSBjb25zdCB7IH0KIAorICAgIHZpcnR1YWwgYm9vbCBwYXJzZVN0cmluZyhjb25z
dCBTdHJpbmcmLCBib29sIHN0cmljdCA9IHRydWUpID0gMDsKKwogcHJvdGVjdGVkOgorICAgIFN0
eWxlU2hlZXQoTm9kZSogb3duZXJOb2RlLCBjb25zdCBTdHJpbmcmIGhyZWYpOworICAgIFN0eWxl
U2hlZXQoU3R5bGVTaGVldCogcGFyZW50U2hlZXQsIGNvbnN0IFN0cmluZyYgaHJlZik7CisgICAg
U3R5bGVTaGVldChTdHlsZUJhc2UqIG93bmVyLCBjb25zdCBTdHJpbmcmIGhyZWYpOworCitwcml2
YXRlOgorICAgIHZpcnR1YWwgYm9vbCBpc1N0eWxlU2hlZXQoKSBjb25zdCB7IHJldHVybiB0cnVl
OyB9CisKICAgICBOb2RlKiBtX3BhcmVudE5vZGU7CiAgICAgU3RyaW5nIG1fc3RySHJlZjsKICAg
ICBTdHJpbmcgbV9zdHJUaXRsZTsKSW5kZXg6IFdlYkNvcmUvZG9tL0NTU01hcHBlZEF0dHJpYnV0
ZURlY2xhcmF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vQ1NTTWFwcGVkQXR0cmli
dXRlRGVjbGFyYXRpb24uaAkocmV2aXNpb24gMzQ1ODQpCisrKyBXZWJDb3JlL2RvbS9DU1NNYXBw
ZWRBdHRyaWJ1dGVEZWNsYXJhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDExICsxLDkgQEAK
IC8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRE9NIGltcGxlbWVudGF0aW9uIGZvciBL
REUuCi0gKgogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcp
CiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcp
CiAgKiAgICAgICAgICAgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKICAqICAg
ICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKLSAqIENvcHly
aWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICog
Q29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzUsMTEgKzMzLDExIEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ1NTTWFwcGVkQXR0cmlidXRlRGVjbGFyYXRp
b24gOiBwdWJsaWMgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24gewogcHVibGljOgotICAgIENT
U01hcHBlZEF0dHJpYnV0ZURlY2xhcmF0aW9uKENTU1J1bGUqIHBhcmVudFJ1bGUpCi0gICAgICAg
IDogQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24ocGFyZW50UnVsZSkKLSAgICAgICAgLCBtX2Vu
dHJ5VHlwZShlTm9uZSkKLSAgICAgICAgLCBtX2F0dHJOYW1lKGFueVFOYW1lKCkpIHsgfQotICAg
IAorICAgIHN0YXRpYyBQYXNzUmVmUHRyPENTU01hcHBlZEF0dHJpYnV0ZURlY2xhcmF0aW9uPiBj
cmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDU1NNYXBwZWRBdHRy
aWJ1dGVEZWNsYXJhdGlvbigwKSk7CisgICAgfQorCiAgICAgdmlydHVhbCB+Q1NTTWFwcGVkQXR0
cmlidXRlRGVjbGFyYXRpb24oKTsKIAogICAgIHZvaWQgc2V0TWFwcGVkU3RhdGUoTWFwcGVkQXR0
cmlidXRlRW50cnkgdHlwZSwgY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbWlj
U3RyaW5nJiB2YWwpCkBAIC01MCw2ICs0OCwxMyBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRl
OgorICAgIENTU01hcHBlZEF0dHJpYnV0ZURlY2xhcmF0aW9uKENTU1J1bGUqIHBhcmVudFJ1bGUp
CisgICAgICAgIDogQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24ocGFyZW50UnVsZSkKKyAgICAg
ICAgLCBtX2VudHJ5VHlwZShlTm9uZSkKKyAgICAgICAgLCBtX2F0dHJOYW1lKGFueVFOYW1lKCkp
CisgICAgeworICAgIH0KKyAgICAKICAgICBNYXBwZWRBdHRyaWJ1dGVFbnRyeSBtX2VudHJ5VHlw
ZTsKICAgICBRdWFsaWZpZWROYW1lIG1fYXR0ck5hbWU7CiAgICAgQXRvbWljU3RyaW5nIG1fYXR0
clZhbHVlOwpJbmRleDogV2ViQ29yZS9kb20vRE9NSW1wbGVtZW50YXRpb24uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvZG9tL0RPTUltcGxlbWVudGF0aW9uLmNwcAkocmV2aXNpb24gMzQ1ODQp
CisrKyBXZWJDb3JlL2RvbS9ET01JbXBsZW1lbnRhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI0OCwxMyArMjQ4LDEyIEBAIFBhc3NSZWZQdHI8RG9jdW1lbnQ+IERPTUltcGxlbWVudGF0aW9u
OjoKICAgICByZXR1cm4gZG9jLnJlbGVhc2UoKTsKIH0KIAotUGFzc1JlZlB0cjxDU1NTdHlsZVNo
ZWV0PiBET01JbXBsZW1lbnRhdGlvbjo6Y3JlYXRlQ1NTU3R5bGVTaGVldChjb25zdCBTdHJpbmcm
LCBjb25zdCBTdHJpbmcmIG1lZGlhLCBFeGNlcHRpb25Db2RlJiBlYykKK1Bhc3NSZWZQdHI8Q1NT
U3R5bGVTaGVldD4gRE9NSW1wbGVtZW50YXRpb246OmNyZWF0ZUNTU1N0eWxlU2hlZXQoY29uc3Qg
U3RyaW5nJiwgY29uc3QgU3RyaW5nJiBtZWRpYSwgRXhjZXB0aW9uQ29kZSYpCiB7Ci0gICAgLy8g
IyMjIFRPRE8gOiB0aXRsZSBzaG91bGQgYmUgc2V0LCBhbmQgbWVkaWEgY291bGQgaGF2ZSB3cm9u
ZyBzeW50YXgsIGluIHdoaWNoIGNhc2Ugd2Ugc2hvdWxkIGdlbmVyYXRlIGFuIGV4Y2VwdGlvbi4K
LSAgICBlYyA9IDA7Ci0gICAgQ1NTU3R5bGVTaGVldCogY29uc3QgbnVsbFNoZWV0ID0gMDsKLSAg
ICBSZWZQdHI8Q1NTU3R5bGVTaGVldD4gc2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldChudWxsU2hl
ZXQpOwotICAgIHNoZWV0LT5zZXRNZWRpYShuZXcgTWVkaWFMaXN0KHNoZWV0LmdldCgpLCBtZWRp
YSwgdHJ1ZSkpOworICAgIC8vIEZJWE1FOiBUaXRsZSBzaG91bGQgYmUgc2V0LgorICAgIC8vIEZJ
WE1FOiBNZWRpYSBjb3VsZCBoYXZlIHdyb25nIHN5bnRheCwgaW4gd2hpY2ggY2FzZSB3ZSBzaG91
bGQgZ2VuZXJhdGUgYW4gZXhjZXB0aW9uLgorICAgIFJlZlB0cjxDU1NTdHlsZVNoZWV0PiBzaGVl
dCA9IENTU1N0eWxlU2hlZXQ6OmNyZWF0ZSgpOworICAgIHNoZWV0LT5zZXRNZWRpYShNZWRpYUxp
c3Q6OmNyZWF0ZUFsbG93aW5nRGVzY3JpcHRpb25TeW50YXgoc2hlZXQuZ2V0KCksIG1lZGlhKSk7
CiAgICAgcmV0dXJuIHNoZWV0LnJlbGVhc2UoKTsKIH0KIApJbmRleDogV2ViQ29yZS9kb20vRG9j
dW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNp
b24gMzQ1ODkpCisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTU3OSw3ICs1NzksNyBAQCBQYXNzUmVmUHRyPEVkaXRpbmdUZXh0PiBEb2N1bWVudDo6Y3JlYXRl
CiAKIFBhc3NSZWZQdHI8Q1NTU3R5bGVEZWNsYXJhdGlvbj4gRG9jdW1lbnQ6OmNyZWF0ZUNTU1N0
eWxlRGVjbGFyYXRpb24oKQogewotICAgIHJldHVybiBuZXcgQ1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb247CisgICAgcmV0dXJuIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjcmVhdGUoKTsK
IH0KIAogUGFzc1JlZlB0cjxOb2RlPiBEb2N1bWVudDo6aW1wb3J0Tm9kZShOb2RlKiBpbXBvcnRl
ZE5vZGUsIGJvb2wgZGVlcCwgRXhjZXB0aW9uQ29kZSYgZWMpCkBAIC0xNzQxLDkgKzE3NDEsOSBA
QCB2b2lkIERvY3VtZW50Ojp1cGRhdGVCYXNlVVJMKCkKICAgICAgICAgbV9tYXBwZWRFbGVtZW50
U2hlZXQtPnNldEhyZWYobV9iYXNlVVJMLnN0cmluZygpKTsKIH0KIAotdm9pZCBEb2N1bWVudDo6
c2V0Q1NTU3R5bGVTaGVldChjb25zdCBTdHJpbmcgJnVybCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0
LCBjb25zdCBDYWNoZWRDU1NTdHlsZVNoZWV0KiBzaGVldCkKK3ZvaWQgRG9jdW1lbnQ6OnNldENT
U1N0eWxlU2hlZXQoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgY2hhcnNldCwgY29u
c3QgQ2FjaGVkQ1NTU3R5bGVTaGVldCogc2hlZXQpCiB7Ci0gICAgbV9zaGVldCA9IG5ldyBDU1NT
dHlsZVNoZWV0KHRoaXMsIHVybCwgY2hhcnNldCk7CisgICAgbV9zaGVldCA9IENTU1N0eWxlU2hl
ZXQ6OmNyZWF0ZSh0aGlzLCB1cmwsIGNoYXJzZXQpOwogICAgIG1fc2hlZXQtPnBhcnNlU3RyaW5n
KHNoZWV0LT5zaGVldFRleHQoKSk7CiAKICAgICB1cGRhdGVTdHlsZVNlbGVjdG9yKCk7CkBAIC0x
Nzc0LDE0ICsxNzc0LDE0IEBAIFN0cmluZyBEb2N1bWVudDo6dXNlclN0eWxlU2hlZXQoKSBjb25z
dAogQ1NTU3R5bGVTaGVldCogRG9jdW1lbnQ6OmVsZW1lbnRTaGVldCgpCiB7CiAgICAgaWYgKCFt
X2VsZW1TaGVldCkKLSAgICAgICAgbV9lbGVtU2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCh0aGlz
LCBtX2Jhc2VVUkwuc3RyaW5nKCkpOworICAgICAgICBtX2VsZW1TaGVldCA9IENTU1N0eWxlU2hl
ZXQ6OmNyZWF0ZSh0aGlzLCBtX2Jhc2VVUkwuc3RyaW5nKCkpOwogICAgIHJldHVybiBtX2VsZW1T
aGVldC5nZXQoKTsKIH0KIAogQ1NTU3R5bGVTaGVldCogRG9jdW1lbnQ6Om1hcHBlZEVsZW1lbnRT
aGVldCgpCiB7CiAgICAgaWYgKCFtX21hcHBlZEVsZW1lbnRTaGVldCkKLSAgICAgICAgbV9tYXBw
ZWRFbGVtZW50U2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCh0aGlzLCBtX2Jhc2VVUkwuc3RyaW5n
KCkpOworICAgICAgICBtX21hcHBlZEVsZW1lbnRTaGVldCA9IENTU1N0eWxlU2hlZXQ6OmNyZWF0
ZSh0aGlzLCBtX2Jhc2VVUkwuc3RyaW5nKCkpOwogICAgIHJldHVybiBtX21hcHBlZEVsZW1lbnRT
aGVldC5nZXQoKTsKIH0KIApAQCAtMjIwNywxMCArMjIwNywxMCBAQCB2b2lkIERvY3VtZW50Ojpy
ZWNhbGNTdHlsZVNlbGVjdG9yKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGVldFRl
eHQgKz0gYy0+bm9kZVZhbHVlKCk7CiAgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgICAgICAgICBDU1NTdHlsZVNoZWV0KiBjc3NTaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KHRo
aXMpOworICAgICAgICAgICAgICAgICAgICBSZWZQdHI8Q1NTU3R5bGVTaGVldD4gY3NzU2hlZXQg
PSBDU1NTdHlsZVNoZWV0OjpjcmVhdGUodGhpcyk7CiAgICAgICAgICAgICAgICAgICAgIGNzc1No
ZWV0LT5wYXJzZVN0cmluZyhzaGVldFRleHQpOwogICAgICAgICAgICAgICAgICAgICBwaS0+c2V0
Q1NTU3R5bGVTaGVldChjc3NTaGVldCk7Ci0gICAgICAgICAgICAgICAgICAgIHNoZWV0ID0gY3Nz
U2hlZXQ7CisgICAgICAgICAgICAgICAgICAgIHNoZWV0ID0gY3NzU2hlZXQuZ2V0KCk7CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKG4tPmlzSFRN
TEVsZW1lbnQoKSAmJiAobi0+aGFzVGFnTmFtZShsaW5rVGFnKSB8fCBuLT5oYXNUYWdOYW1lKHN0
eWxlVGFnKSkKSW5kZXg6IFdlYkNvcmUvZG9tL05vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvZG9tL05vZGUuY3BwCShyZXZpc2lvbiAzNDU4NCkKKysrIFdlYkNvcmUvZG9tL05vZGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMjM5LDkgKzEyMzksOSBAQCBQYXNzUmVmUHRyPEVsZW1lbnQ+
IE5vZGU6OnF1ZXJ5U2VsZWN0b3IoCiAgICAgICAgIGVjID0gU1lOVEFYX0VSUjsKICAgICAgICAg
cmV0dXJuIDA7CiAgICAgfQotICAgIENTU1N0eWxlU2hlZXQgdGVtcFN0eWxlU2hlZXQoZG9jdW1l
bnQoKSk7CisgICAgUmVmUHRyPENTU1N0eWxlU2hlZXQ+IHRlbXBTdHlsZVNoZWV0ID0gQ1NTU3R5
bGVTaGVldDo6Y3JlYXRlKGRvY3VtZW50KCkpOwogICAgIENTU1BhcnNlciBwKHRydWUpOwotICAg
IFJlZlB0cjxDU1NSdWxlPiBydWxlID0gcC5wYXJzZVJ1bGUoJnRlbXBTdHlsZVNoZWV0LCBzZWxl
Y3RvcnMgKyAie30iKTsKKyAgICBSZWZQdHI8Q1NTUnVsZT4gcnVsZSA9IHAucGFyc2VSdWxlKHRl
bXBTdHlsZVNoZWV0LmdldCgpLCBzZWxlY3RvcnMgKyAie30iKTsKICAgICBpZiAoIXJ1bGUgfHwg
IXJ1bGUtPmlzU3R5bGVSdWxlKCkpIHsKICAgICAgICAgZWMgPSBTWU5UQVhfRVJSOwogICAgICAg
ICByZXR1cm4gMDsKQEAgLTEyNzAsOSArMTI3MCw5IEBAIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IE5v
ZGU6OnF1ZXJ5U2VsZWN0b3IKICAgICAgICAgZWMgPSBTWU5UQVhfRVJSOwogICAgICAgICByZXR1
cm4gMDsKICAgICB9Ci0gICAgQ1NTU3R5bGVTaGVldCB0ZW1wU3R5bGVTaGVldChkb2N1bWVudCgp
KTsKKyAgICBSZWZQdHI8Q1NTU3R5bGVTaGVldD4gdGVtcFN0eWxlU2hlZXQgPSBDU1NTdHlsZVNo
ZWV0OjpjcmVhdGUoZG9jdW1lbnQoKSk7CiAgICAgQ1NTUGFyc2VyIHAodHJ1ZSk7Ci0gICAgUmVm
UHRyPENTU1J1bGU+IHJ1bGUgPSBwLnBhcnNlUnVsZSgmdGVtcFN0eWxlU2hlZXQsIHNlbGVjdG9y
cyArICJ7fSIpOworICAgIFJlZlB0cjxDU1NSdWxlPiBydWxlID0gcC5wYXJzZVJ1bGUodGVtcFN0
eWxlU2hlZXQuZ2V0KCksIHNlbGVjdG9ycyArICJ7fSIpOwogICAgIGlmICghcnVsZSB8fCAhcnVs
ZS0+aXNTdHlsZVJ1bGUoKSkgewogICAgICAgICBlYyA9IFNZTlRBWF9FUlI7CiAgICAgICAgIHJl
dHVybiAwOwpJbmRleDogV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvZG9tL1Bvc2l0aW9uLmNwcAkocmV2aXNpb24gMzQ1ODQpCisrKyBXZWJDb3JlL2RvbS9Q
b3NpdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkyLDEwICs5MiwxMCBAQCBFbGVtZW50ICpQ
b3NpdGlvbjo6ZWxlbWVudCgpIGNvbnN0CiAKIFBhc3NSZWZQdHI8Q1NTQ29tcHV0ZWRTdHlsZURl
Y2xhcmF0aW9uPiBQb3NpdGlvbjo6Y29tcHV0ZWRTdHlsZSgpIGNvbnN0CiB7Ci0gICAgRWxlbWVu
dCAqZWxlbSA9IGVsZW1lbnQoKTsKKyAgICBFbGVtZW50KiBlbGVtID0gZWxlbWVudCgpOwogICAg
IGlmICghZWxlbSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIG5ldyBDU1NDb21wdXRl
ZFN0eWxlRGVjbGFyYXRpb24oZWxlbSk7CisgICAgcmV0dXJuIFdlYkNvcmU6OmNvbXB1dGVkU3R5
bGUoZWxlbSk7CiB9CiAKIFBvc2l0aW9uIFBvc2l0aW9uOjpwcmV2aW91cyhFVXNpbmdDb21wb3Nl
ZENoYXJhY3RlcnMgdXNpbmdDb21wb3NlZENoYXJhY3RlcnMpIGNvbnN0CkluZGV4OiBXZWJDb3Jl
L2RvbS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9t
L1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5jcHAJKHJldmlzaW9uIDM0NTg0KQorKysgV2ViQ29yZS9k
b20vUHJvY2Vzc2luZ0luc3RydWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQzLDcgKzE0
Myw3IEBAIGJvb2wgUHJvY2Vzc2luZ0luc3RydWN0aW9uOjpjaGVja1N0eWxlU2gKICAgICAgICAg
ICAgICAgICAvLyBXZSBuZWVkIHRvIG1ha2UgYSBzeW50aGV0aWMgWFNMU3R5bGVTaGVldCB0aGF0
IGlzIGVtYmVkZGVkLiAgSXQgbmVlZHMgdG8gYmUgYWJsZQogICAgICAgICAgICAgICAgIC8vIHRv
IGtpY2sgb2ZmIGltcG9ydC9pbmNsdWRlIGxvYWRzIHRoYXQgY2FuIGhhbmcgb2ZmIHNvbWUgcGFy
ZW50IHNoZWV0LgogICAgICAgICAgICAgICAgIGlmIChtX2lzWFNMKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIG1fc2hlZXQgPSBuZXcgWFNMU3R5bGVTaGVldCh0aGlzLCBtX2xvY2FsSHJlZiwgdHJ1
ZSk7CisgICAgICAgICAgICAgICAgICAgIG1fc2hlZXQgPSBYU0xTdHlsZVNoZWV0OjpjcmVhdGVF
bWJlZGRlZCh0aGlzLCBtX2xvY2FsSHJlZik7CiAgICAgICAgICAgICAgICAgICAgIG1fbG9hZGlu
ZyA9IGZhbHNlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICByZXR1cm4gIW1f
aXNYU0w7CkBAIC0yMDUsMTggKzIwNSwxOSBAQCB2b2lkIFByb2Nlc3NpbmdJbnN0cnVjdGlvbjo6
c2V0Q1NTU3R5bGVTCiAjaWYgRU5BQkxFKFhTTFQpCiAgICAgQVNTRVJUKCFtX2lzWFNMKTsKICNl
bmRpZgotICAgIG1fc2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCh0aGlzLCB1cmwsIGNoYXJzZXQp
OworICAgIFJlZlB0cjxDU1NTdHlsZVNoZWV0PiBuZXdTaGVldCA9IENTU1N0eWxlU2hlZXQ6OmNy
ZWF0ZSh0aGlzLCB1cmwsIGNoYXJzZXQpOwogICAgIHBhcnNlU3R5bGVTaGVldChzaGVldC0+c2hl
ZXRUZXh0KCkpOwotICAgIG1fc2hlZXQtPnNldFRpdGxlKG1fdGl0bGUpOwotICAgIG1fc2hlZXQt
PnNldE1lZGlhKG5ldyBNZWRpYUxpc3QoKENTU1N0eWxlU2hlZXQqKW1fc2hlZXQuZ2V0KCksIG1f
bWVkaWEsIGZhbHNlKSk7Ci0gICAgbV9zaGVldC0+c2V0RGlzYWJsZWQobV9hbHRlcm5hdGUpOwor
ICAgIG5ld1NoZWV0LT5zZXRUaXRsZShtX3RpdGxlKTsKKyAgICBuZXdTaGVldC0+c2V0TWVkaWEo
TWVkaWFMaXN0OjpjcmVhdGUobmV3U2hlZXQuZ2V0KCksIG1fbWVkaWEpKTsKKyAgICBuZXdTaGVl
dC0+c2V0RGlzYWJsZWQobV9hbHRlcm5hdGUpOworICAgIG1fc2hlZXQgPSBuZXdTaGVldC5yZWxl
YXNlKCk7CiB9CiAKICNpZiBFTkFCTEUoWFNMVCkKIHZvaWQgUHJvY2Vzc2luZ0luc3RydWN0aW9u
OjpzZXRYU0xTdHlsZVNoZWV0KGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIHNoZWV0
KQogewogICAgIEFTU0VSVChtX2lzWFNMKTsKLSAgICBtX3NoZWV0ID0gbmV3IFhTTFN0eWxlU2hl
ZXQodGhpcywgdXJsKTsKKyAgICBtX3NoZWV0ID0gWFNMU3R5bGVTaGVldDo6Y3JlYXRlKHRoaXMs
IHVybCk7CiAgICAgcGFyc2VTdHlsZVNoZWV0KHNoZWV0KTsKIH0KICNlbmRpZgpAQCAtMjMyLDcg
KzIzMyw3IEBAIHZvaWQgUHJvY2Vzc2luZ0luc3RydWN0aW9uOjpwYXJzZVN0eWxlU2gKICAgICBt
X3NoZWV0LT5jaGVja0xvYWRlZCgpOwogfQogCi12b2lkIFByb2Nlc3NpbmdJbnN0cnVjdGlvbjo6
c2V0Q1NTU3R5bGVTaGVldChDU1NTdHlsZVNoZWV0KiBzaGVldCkKK3ZvaWQgUHJvY2Vzc2luZ0lu
c3RydWN0aW9uOjpzZXRDU1NTdHlsZVNoZWV0KFBhc3NSZWZQdHI8Q1NTU3R5bGVTaGVldD4gc2hl
ZXQpCiB7CiAgICAgQVNTRVJUKCFtX2NhY2hlZFNoZWV0KTsKICAgICBBU1NFUlQoIW1fbG9hZGlu
Zyk7CkluZGV4OiBXZWJDb3JlL2RvbS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2RvbS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaAkocmV2aXNpb24gMzQ1ODQp
CisrKyBXZWJDb3JlL2RvbS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaAkod29ya2luZyBjb3B5KQpA
QCAtNjEsNyArNjEsNyBAQCBwdWJsaWM6CiAjaWYgRU5BQkxFKFhTTFQpCiAgICAgdmlydHVhbCB2
b2lkIHNldFhTTFN0eWxlU2hlZXQoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgc2hl
ZXQpOwogI2VuZGlmCi0gICAgdm9pZCBzZXRDU1NTdHlsZVNoZWV0KENTU1N0eWxlU2hlZXQqKTsK
KyAgICB2b2lkIHNldENTU1N0eWxlU2hlZXQoUGFzc1JlZlB0cjxDU1NTdHlsZVNoZWV0Pik7CiAg
ICAgYm9vbCBpc0xvYWRpbmcoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgc2hlZXRMb2FkZWQo
KTsKIApJbmRleDogV2ViQ29yZS9kb20vU3R5bGVFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2RvbS9TdHlsZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAzNDU4NCkKKysrIFdlYkNvcmUv
ZG9tL1N0eWxlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3LDEzICs3NywxMyBAQCB2
b2lkIFN0eWxlRWxlbWVudDo6Y3JlYXRlU2hlZXQoRWxlbWVudCogCiAgICAgLy8gSWYgdHlwZSBp
cyBlbXB0eSBvciBDU1MsIHRoaXMgaXMgYSBDU1Mgc3R5bGUgc2hlZXQuCiAgICAgY29uc3QgQXRv
bWljU3RyaW5nJiB0eXBlID0gdGhpcy0+dHlwZSgpOwogICAgIGlmICh0eXBlLmlzRW1wdHkoKSB8
fCAoZS0+aXNIVE1MRWxlbWVudCgpID8gZXF1YWxJZ25vcmluZ0Nhc2UodHlwZSwgInRleHQvY3Nz
IikgOiAodHlwZSA9PSAidGV4dC9jc3MiKSkpIHsKLSAgICAgICAgUmVmUHRyPE1lZGlhTGlzdD4g
bWVkaWFMaXN0ID0gbmV3IE1lZGlhTGlzdCgoQ1NTU3R5bGVTaGVldCopMCwgbWVkaWEoKSwgZS0+
aXNIVE1MRWxlbWVudCgpKTsKKyAgICAgICAgUmVmUHRyPE1lZGlhTGlzdD4gbWVkaWFMaXN0ID0g
TWVkaWFMaXN0OjpjcmVhdGUobWVkaWEoKSwgZS0+aXNIVE1MRWxlbWVudCgpKTsKICAgICAgICAg
TWVkaWFRdWVyeUV2YWx1YXRvciBzY3JlZW5FdmFsKCJzY3JlZW4iLCB0cnVlKTsKICAgICAgICAg
TWVkaWFRdWVyeUV2YWx1YXRvciBwcmludEV2YWwoInByaW50IiwgdHJ1ZSk7CiAgICAgICAgIGlm
IChzY3JlZW5FdmFsLmV2YWwobWVkaWFMaXN0LmdldCgpKSB8fCBwcmludEV2YWwuZXZhbChtZWRp
YUxpc3QuZ2V0KCkpKSB7CiAgICAgICAgICAgICBkb2N1bWVudC0+YWRkUGVuZGluZ1NoZWV0KCk7
CiAgICAgICAgICAgICBzZXRMb2FkaW5nKHRydWUpOwotICAgICAgICAgICAgbV9zaGVldCA9IG5l
dyBDU1NTdHlsZVNoZWV0KGUsIFN0cmluZygpLCBkb2N1bWVudC0+aW5wdXRFbmNvZGluZygpKTsK
KyAgICAgICAgICAgIG1fc2hlZXQgPSBDU1NTdHlsZVNoZWV0OjpjcmVhdGUoZSwgU3RyaW5nKCks
IGRvY3VtZW50LT5pbnB1dEVuY29kaW5nKCkpOwogICAgICAgICAgICAgbV9zaGVldC0+cGFyc2VT
dHJpbmcodGV4dCwgIWRvY3VtZW50LT5pbkNvbXBhdE1vZGUoKSk7CiAgICAgICAgICAgICBtX3No
ZWV0LT5zZXRNZWRpYShtZWRpYUxpc3QuZ2V0KCkpOwogICAgICAgICAgICAgbV9zaGVldC0+c2V0
VGl0bGUoZS0+dGl0bGUoKSk7CkluZGV4OiBXZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmNwcAkocmV2aXNpb24gMzQ1
ODQpCisrKyBXZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTMxLDcgKzEzMSw3IEBAIFBhc3NSZWZQdHI8QXR0cmlidXRlPiBTdHlsZWRFbGVtZW50OjpjcmUK
IAogdm9pZCBTdHlsZWRFbGVtZW50OjpjcmVhdGVJbmxpbmVTdHlsZURlY2woKQogewotICAgIG1f
aW5saW5lU3R5bGVEZWNsID0gbmV3IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOworICAgIG1f
aW5saW5lU3R5bGVEZWNsID0gQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNyZWF0ZSgpOwog
ICAgIG1faW5saW5lU3R5bGVEZWNsLT5zZXRQYXJlbnQoZG9jdW1lbnQoKS0+ZWxlbWVudFNoZWV0
KCkpOwogICAgIG1faW5saW5lU3R5bGVEZWNsLT5zZXROb2RlKHRoaXMpOwogICAgIG1faW5saW5l
U3R5bGVEZWNsLT5zZXRTdHJpY3RQYXJzaW5nKGlzSFRNTEVsZW1lbnQoKSAmJiAhZG9jdW1lbnQo
KS0+aW5Db21wYXRNb2RlKCkpOwpAQCAtNDA4LDcgKzQwOCw3IEBAIHZvaWQgU3R5bGVkRWxlbWVu
dDo6YWRkQ1NTQ29sb3IoTWFwcGVkQXQKIAogdm9pZCBTdHlsZWRFbGVtZW50OjpjcmVhdGVNYXBw
ZWREZWNsKE1hcHBlZEF0dHJpYnV0ZSogYXR0cikKIHsKLSAgICBDU1NNYXBwZWRBdHRyaWJ1dGVE
ZWNsYXJhdGlvbiogZGVjbCA9IG5ldyBDU1NNYXBwZWRBdHRyaWJ1dGVEZWNsYXJhdGlvbigwKTsK
KyAgICBSZWZQdHI8Q1NTTWFwcGVkQXR0cmlidXRlRGVjbGFyYXRpb24+IGRlY2wgPSBDU1NNYXBw
ZWRBdHRyaWJ1dGVEZWNsYXJhdGlvbjo6Y3JlYXRlKCk7CiAgICAgYXR0ci0+c2V0RGVjbChkZWNs
KTsKICAgICBkZWNsLT5zZXRQYXJlbnQoZG9jdW1lbnQoKS0+ZWxlbWVudFNoZWV0KCkpOwogICAg
IGRlY2wtPnNldE5vZGUodGhpcyk7CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNv
bW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFu
ZC5jcHAJKHJldmlzaW9uIDM0NTg0KQorKysgV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21t
YW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjk1LDcgKzI5NSw3IEBAIEFwcGx5U3R5bGVDb21t
YW5kOjpBcHBseVN0eWxlQ29tbWFuZChEb2MKIAogQXBwbHlTdHlsZUNvbW1hbmQ6OkFwcGx5U3R5
bGVDb21tYW5kKEVsZW1lbnQqIGVsZW1lbnQsIGJvb2wgcmVtb3ZlT25seSwgRWRpdEFjdGlvbiBl
ZGl0aW5nQWN0aW9uKQogICAgIDogQ29tcG9zaXRlRWRpdENvbW1hbmQoZWxlbWVudC0+ZG9jdW1l
bnQoKSkKLSAgICAsIG1fc3R5bGUobmV3IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKCkpCisg
ICAgLCBtX3N0eWxlKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjcmVhdGUoKSkKICAgICAs
IG1fZWRpdGluZ0FjdGlvbihlZGl0aW5nQWN0aW9uKQogICAgICwgbV9wcm9wZXJ0eUxldmVsKFBy
b3BlcnR5RGVmYXVsdCkKICAgICAsIG1fc3RhcnQoZW5kaW5nU2VsZWN0aW9uKCkuc3RhcnQoKS5k
b3duc3RyZWFtKCkpCkBAIC03OTksOSArNzk5LDcgQEAgc3RhdGljIGJvb2wgaGFzVGV4dERlY29y
YXRpb25Qcm9wZXJ0eShObwogICAgIGlmICghbm9kZS0+aXNFbGVtZW50Tm9kZSgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICBFbGVtZW50ICplbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxl
bWVudCAqPihub2RlKTsKLSAgICBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24gc3R5bGUoZWxl
bWVudCk7Ci0gICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IHN0eWxlLmdldFByb3BlcnR5Q1NT
VmFsdWUoQ1NTUHJvcGVydHlUZXh0RGVjb3JhdGlvbiwgRG9Ob3RVcGRhdGVMYXlvdXQpOworICAg
IFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBjb21wdXRlZFN0eWxlKG5vZGUpLT5nZXRQcm9wZXJ0
eUNTU1ZhbHVlKENTU1Byb3BlcnR5VGV4dERlY29yYXRpb24sIERvTm90VXBkYXRlTGF5b3V0KTsK
ICAgICByZXR1cm4gdmFsdWUgJiYgIWVxdWFsSWdub3JpbmdDYXNlKHZhbHVlLT5jc3NUZXh0KCks
ICJub25lIik7CiB9CiAKQEAgLTg0MSw3ICs4MzksNyBAQCBQYXNzUmVmUHRyPENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uPiBBCiAgICAgcmV0dXJuIHRleHREZWNvcmF0aW9uU3R5bGUucmVsZWFz
ZSgpOwogfQogCi1QYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBBcHBseVN0
eWxlQ29tbWFuZDo6ZXh0cmFjdEFuZE5lZ2F0ZVRleHREZWNvcmF0aW9uU3R5bGUoTm9kZSAqbm9k
ZSkKK1Bhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IEFwcGx5U3R5bGVDb21t
YW5kOjpleHRyYWN0QW5kTmVnYXRlVGV4dERlY29yYXRpb25TdHlsZShOb2RlKiBub2RlKQogewog
ICAgIEFTU0VSVChub2RlKTsKICAgICBBU1NFUlQobm9kZS0+aXNFbGVtZW50Tm9kZSgpKTsKQEAg
LTg1MCwxNCArODQ4LDEzIEBAIFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+
IEEKICAgICBpZiAoIW5vZGUtPmlzSFRNTEVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuIDA7CiAK
LSAgICBIVE1MRWxlbWVudCAqZWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50ICo+KG5v
ZGUpOwotICAgIFJlZlB0cjxDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24+IGNvbXB1dGVkU3R5
bGUgPSBuZXcgQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uKGVsZW1lbnQpOwotICAgIEFTU0VS
VChjb21wdXRlZFN0eWxlKTsKKyAgICBSZWZQdHI8Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9u
PiBub2RlU3R5bGUgPSBjb21wdXRlZFN0eWxlKG5vZGUpOworICAgIEFTU0VSVChub2RlU3R5bGUp
OwogCiAgICAgaW50IHByb3BlcnRpZXNbMV0gPSB7IENTU1Byb3BlcnR5VGV4dERlY29yYXRpb24g
fTsKLSAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IHRleHREZWNvcmF0aW9u
U3R5bGUgPSBjb21wdXRlZFN0eWxlLT5jb3B5UHJvcGVydGllc0luU2V0KHByb3BlcnRpZXMsIDEp
OworICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gdGV4dERlY29yYXRpb25T
dHlsZSA9IG5vZGVTdHlsZS0+Y29weVByb3BlcnRpZXNJblNldChwcm9wZXJ0aWVzLCAxKTsKIAot
ICAgIFJlZlB0cjxDU1NWYWx1ZT4gcHJvcGVydHkgPSBjb21wdXRlZFN0eWxlLT5nZXRQcm9wZXJ0
eUNTU1ZhbHVlKENTU1Byb3BlcnR5VGV4dERlY29yYXRpb24pOworICAgIFJlZlB0cjxDU1NWYWx1
ZT4gcHJvcGVydHkgPSBub2RlU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlU
ZXh0RGVjb3JhdGlvbik7CiAgICAgaWYgKHByb3BlcnR5ICYmICFlcXVhbElnbm9yaW5nQ2FzZShw
cm9wZXJ0eS0+Y3NzVGV4dCgpLCAibm9uZSIpKSB7CiAgICAgICAgIFJlZlB0cjxDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbj4gbmV3U3R5bGUgPSB0ZXh0RGVjb3JhdGlvblN0eWxlLT5jb3B5KCk7
CiAgICAgICAgIG5ld1N0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eVRleHREZWNvcmF0aW9u
LCAibm9uZSIpOwpJbmRleDogV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3Bw
CShyZXZpc2lvbiAzNDU4NCkKKysrIFdlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFu
ZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1OSw4ICs4NTksNyBAQCBib29sIENvbXBvc2l0ZUVk
aXRDb21tYW5kOjpicmVha091dE9mRW1wCiAgICAgYXBwZW5kQmxvY2tQbGFjZWhvbGRlcihuZXdC
bG9jay5nZXQoKSk7CiAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFNlbGVjdGlvbihQb3NpdGlvbihu
ZXdCbG9jay5nZXQoKSwgMCksIERPV05TVFJFQU0pKTsKICAgICAKLSAgICBDU1NDb21wdXRlZFN0
eWxlRGVjbGFyYXRpb24gZW5kaW5nU3R5bGUoZW5kaW5nU2VsZWN0aW9uKCkuc3RhcnQoKS5ub2Rl
KCkpOwotICAgIGVuZGluZ1N0eWxlLmRpZmYoc3R5bGUuZ2V0KCkpOworICAgIGNvbXB1dGVkU3R5
bGUoZW5kaW5nU2VsZWN0aW9uKCkuc3RhcnQoKS5ub2RlKCkpLT5kaWZmKHN0eWxlLmdldCgpKTsK
ICAgICBpZiAoc3R5bGUtPmxlbmd0aCgpID4gMCkKICAgICAgICAgYXBwbHlTdHlsZShzdHlsZS5n
ZXQoKSk7CiAgICAgCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFu
ZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1h
bmQuY3BwCShyZXZpc2lvbiAzNDU4NCkKKysrIFdlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rp
b25Db21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjI5LDcgKzYyOSw3IEBAIHZvaWQgRGVs
ZXRlU2VsZWN0aW9uQ29tbWFuZDo6Y2FsY3VsYXRlVHkKICAgICAgICAgbV90eXBpbmdTdHlsZSA9
IG1fZGVsZXRlSW50b0Jsb2NrcXVvdGVTdHlsZTsKICAgICBtX2RlbGV0ZUludG9CbG9ja3F1b3Rl
U3R5bGUgPSAwOwogICAgIAotICAgIFJlZlB0cjxDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24+
IGVuZGluZ1N0eWxlID0gbmV3IENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbihtX2VuZGluZ1Bv
c2l0aW9uLm5vZGUoKSk7CisgICAgUmVmUHRyPENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbj4g
ZW5kaW5nU3R5bGUgPSBjb21wdXRlZFN0eWxlKG1fZW5kaW5nUG9zaXRpb24ubm9kZSgpKTsKICAg
ICBlbmRpbmdTdHlsZS0+ZGlmZihtX3R5cGluZ1N0eWxlLmdldCgpKTsKICAgICBpZiAoIW1fdHlw
aW5nU3R5bGUtPmxlbmd0aCgpKQogICAgICAgICBtX3R5cGluZ1N0eWxlID0gMDsKSW5kZXg6IFdl
YkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9F
ZGl0b3IuY3BwCShyZXZpc2lvbiAzNDU4OSkKKysrIFdlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03MTcsOSArNzE3LDkgQEAgVHJpU3RhdGUgRWRpdG9yOjpzZWxl
Y3Rpb25IYXNTdHlsZShDU1NTdAogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgZm9y
IChOb2RlKiBub2RlID0gbV9mcmFtZS0+c2VsZWN0aW9uKCktPnN0YXJ0KCkubm9kZSgpOyBub2Rl
OyBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpKSB7Ci0gICAgICAgICAgICBSZWZQdHI8
Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uPiBjb21wdXRlZFN0eWxlID0gbmV3IENTU0NvbXB1
dGVkU3R5bGVEZWNsYXJhdGlvbihub2RlKTsKLSAgICAgICAgICAgIGlmIChjb21wdXRlZFN0eWxl
KQotICAgICAgICAgICAgICAgIHVwZGF0ZVN0YXRlKG11dGFibGVTdHlsZS5nZXQoKSwgY29tcHV0
ZWRTdHlsZS5nZXQoKSwgYXRTdGFydCwgc3RhdGUpOworICAgICAgICAgICAgUmVmUHRyPENTU0Nv
bXB1dGVkU3R5bGVEZWNsYXJhdGlvbj4gbm9kZVN0eWxlID0gY29tcHV0ZWRTdHlsZShub2RlKTsK
KyAgICAgICAgICAgIGlmIChub2RlU3R5bGUpCisgICAgICAgICAgICAgICAgdXBkYXRlU3RhdGUo
bXV0YWJsZVN0eWxlLmdldCgpLCBub2RlU3R5bGUuZ2V0KCksIGF0U3RhcnQsIHN0YXRlKTsKICAg
ICAgICAgICAgIGlmIChzdGF0ZSA9PSBNaXhlZFRyaVN0YXRlKQogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgaWYgKG5vZGUgPT0gbV9mcmFtZS0+c2VsZWN0aW9uKCktPmVuZCgp
Lm5vZGUoKSkKQEAgLTExMDAsOSArMTEwMCw5IEBAIHZvaWQgRWRpdG9yOjp0b2dnbGVVbmRlcmxp
bmUoKQogCiB2b2lkIEVkaXRvcjo6c2V0QmFzZVdyaXRpbmdEaXJlY3Rpb24oY29uc3QgU3RyaW5n
JiBkaXJlY3Rpb24pCiB7Ci0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAKLSAgICBSZWZQdHI8
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IHN0eWxlID0gbmV3IENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uOworICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGUg
PSBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y3JlYXRlKCk7CisgICAgRXhjZXB0aW9uQ29k
ZSBlYzsKICAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlEaXJlY3Rpb24sIGRpcmVj
dGlvbiwgZmFsc2UsIGVjKTsKICAgICBhcHBseVBhcmFncmFwaFN0eWxlVG9TZWxlY3Rpb24oc3R5
bGUuZ2V0KCksIEVkaXRBY3Rpb25TZXRXcml0aW5nRGlyZWN0aW9uKTsKIH0KSW5kZXg6IFdlYkNv
cmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRp
bmcvRWRpdG9yQ29tbWFuZC5jcHAJKHJldmlzaW9uIDM0NTg5KQorKysgV2ViQ29yZS9lZGl0aW5n
L0VkaXRvckNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw3ICs4Nyw3IEBAIHN0YXRp
YyBGcmFtZSogdGFyZ2V0RnJhbWUoRnJhbWUqIGZyYW1lLCAKIAogc3RhdGljIGJvb2wgZXhlY3V0
ZUFwcGx5U3R5bGUoRnJhbWUqIGZyYW1lLCBFZGl0b3JDb21tYW5kU291cmNlIHNvdXJjZSwgRWRp
dEFjdGlvbiBhY3Rpb24sIGludCBwcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmIHByb3BlcnR5VmFs
dWUpCiB7Ci0gICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBzdHlsZSA9IG5l
dyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjsKKyAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb24+IHN0eWxlID0gQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNyZWF0ZSgp
OwogICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShwcm9wZXJ0eUlELCBwcm9wZXJ0eVZhbHVlKTsKICAg
ICAvLyBGSVhNRTogV2UgZG9uJ3QgY2FsbCBzaG91bGRBcHBseVN0eWxlIHdoZW4gdGhlIHNvdXJj
ZSBpcyBET007IGlzIHRoZXJlIGEgZ29vZCByZWFzb24gZm9yIHRoYXQ/CiAgICAgc3dpdGNoIChz
b3VyY2UpIHsKQEAgLTExMCw3ICsxMTAsNyBAQCBzdGF0aWMgYm9vbCBleGVjdXRlQXBwbHlTdHls
ZShGcmFtZSogZnJhCiAKIHN0YXRpYyBib29sIGV4ZWN1dGVBcHBseVN0eWxlKEZyYW1lKiBmcmFt
ZSwgRWRpdG9yQ29tbWFuZFNvdXJjZSBzb3VyY2UsIEVkaXRBY3Rpb24gYWN0aW9uLCBpbnQgcHJv
cGVydHlJRCwgaW50IHByb3BlcnR5VmFsdWUpCiB7Ci0gICAgUmVmUHRyPENTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uPiBzdHlsZSA9IG5ldyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjsKKyAg
ICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IHN0eWxlID0gQ1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb246OmNyZWF0ZSgpOwogICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShwcm9wZXJ0
eUlELCBwcm9wZXJ0eVZhbHVlKTsKICAgICAvLyBGSVhNRTogV2UgZG9uJ3QgY2FsbCBzaG91bGRB
cHBseVN0eWxlIHdoZW4gdGhlIHNvdXJjZSBpcyBET007IGlzIHRoZXJlIGEgZ29vZCByZWFzb24g
Zm9yIHRoYXQ/CiAgICAgc3dpdGNoIChzb3VyY2UpIHsKQEAgLTEyOCw3ICsxMjgsNyBAQCBzdGF0
aWMgYm9vbCBleGVjdXRlQXBwbHlTdHlsZShGcmFtZSogZnJhCiAKIHN0YXRpYyBib29sIGV4ZWN1
dGVUb2dnbGVTdHlsZShGcmFtZSogZnJhbWUsIEVkaXRvckNvbW1hbmRTb3VyY2Ugc291cmNlLCBF
ZGl0QWN0aW9uIGFjdGlvbiwgaW50IHByb3BlcnR5SUQsIGNvbnN0IGNoYXIqIG9mZlZhbHVlLCBj
b25zdCBjaGFyKiBvblZhbHVlKQogewotICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbj4gc3R5bGUgPSBuZXcgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb247CisgICAgUmVmUHRy
PENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBzdHlsZSA9IENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uOjpjcmVhdGUoKTsKICAgICBzdHlsZS0+c2V0UHJvcGVydHkocHJvcGVydHlJRCwgb25W
YWx1ZSk7CiAgICAgc3R5bGUtPnNldFByb3BlcnR5KHByb3BlcnR5SUQsIGZyYW1lLT5lZGl0b3Io
KS0+c2VsZWN0aW9uU3RhcnRIYXNTdHlsZShzdHlsZS5nZXQoKSkgPyBvZmZWYWx1ZSA6IG9uVmFs
dWUpOwogICAgIC8vIEZJWE1FOiBXZSBkb24ndCBjYWxsIHNob3VsZEFwcGx5U3R5bGUgd2hlbiB0
aGUgc291cmNlIGlzIERPTTsgaXMgdGhlcmUgYSBnb29kIHJlYXNvbiBmb3IgdGhhdD8KQEAgLTE0
Nyw3ICsxNDcsNyBAQCBzdGF0aWMgYm9vbCBleGVjdXRlVG9nZ2xlU3R5bGUoRnJhbWUqIGZyCiAK
IHN0YXRpYyBib29sIGV4ZWN1dGVBcHBseVBhcmFncmFwaFN0eWxlKEZyYW1lKiBmcmFtZSwgRWRp
dG9yQ29tbWFuZFNvdXJjZSBzb3VyY2UsIEVkaXRBY3Rpb24gYWN0aW9uLCBpbnQgcHJvcGVydHlJ
RCwgY29uc3QgU3RyaW5nJiBwcm9wZXJ0eVZhbHVlKQogewotICAgIFJlZlB0cjxDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbj4gc3R5bGUgPSBuZXcgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb247
CisgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBzdHlsZSA9IENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uOjpjcmVhdGUoKTsKICAgICBzdHlsZS0+c2V0UHJvcGVydHkocHJv
cGVydHlJRCwgcHJvcGVydHlWYWx1ZSk7CiAgICAgLy8gRklYTUU6IFdlIGRvbid0IGNhbGwgc2hv
dWxkQXBwbHlTdHlsZSB3aGVuIHRoZSBzb3VyY2UgaXMgRE9NOyBpcyB0aGVyZSBhIGdvb2QgcmVh
c29uIGZvciB0aGF0PwogICAgIHN3aXRjaCAoc291cmNlKSB7CkBAIC0yMDAsNyArMjAwLDcgQEAg
c3RhdGljIGJvb2wgZXhwYW5kU2VsZWN0aW9uVG9HcmFudWxhcml0eQogCiBzdGF0aWMgVHJpU3Rh
dGUgc3RhdGVTdHlsZShGcmFtZSogZnJhbWUsIGludCBwcm9wZXJ0eUlELCBjb25zdCBjaGFyKiBk
ZXNpcmVkVmFsdWUpCiB7Ci0gICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBz
dHlsZSA9IG5ldyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjsKKyAgICBSZWZQdHI8Q1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb24+IHN0eWxlID0gQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246
OmNyZWF0ZSgpOwogICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShwcm9wZXJ0eUlELCBkZXNpcmVkVmFs
dWUpOwogICAgIHJldHVybiBmcmFtZS0+ZWRpdG9yKCktPnNlbGVjdGlvbkhhc1N0eWxlKHN0eWxl
LmdldCgpKTsKIH0KSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9JbnNlcnRQYXJhZ3JhcGhTZXBhcmF0
b3JDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvSW5zZXJ0UGFyYWdy
YXBoU2VwYXJhdG9yQ29tbWFuZC5jcHAJKHJldmlzaW9uIDM0NTg0KQorKysgV2ViQ29yZS9lZGl0
aW5nL0luc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC04MSw4ICs4MSw3IEBAIHZvaWQgSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZDo6YXAK
ICAgICBpZiAoIW1fc3R5bGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIENTU0NvbXB1dGVkU3R5
bGVEZWNsYXJhdGlvbiBlbmRpbmdTdHlsZShlbmRpbmdTZWxlY3Rpb24oKS5zdGFydCgpLm5vZGUo
KSk7Ci0gICAgZW5kaW5nU3R5bGUuZGlmZihtX3N0eWxlLmdldCgpKTsKKyAgICBjb21wdXRlZFN0
eWxlKGVuZGluZ1NlbGVjdGlvbigpLnN0YXJ0KCkubm9kZSgpKS0+ZGlmZihtX3N0eWxlLmdldCgp
KTsKICAgICBpZiAobV9zdHlsZS0+bGVuZ3RoKCkgPiAwKQogICAgICAgICBhcHBseVN0eWxlKG1f
c3R5bGUuZ2V0KCkpOwogfQpJbmRleDogV2ViQ29yZS9lZGl0aW5nL1JlbW92ZUZvcm1hdENvbW1h
bmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9SZW1vdmVGb3JtYXRDb21tYW5k
LmNwcAkocmV2aXNpb24gMzQ1ODkpCisrKyBXZWJDb3JlL2VkaXRpbmcvUmVtb3ZlRm9ybWF0Q29t
bWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDggKzU0LDcgQEAgdm9pZCBSZW1vdmVGb3Jt
YXRDb21tYW5kOjpkb0FwcGx5KCkKICAgICAvLyBHZXQgdGhlIGRlZmF1bHQgc3R5bGUgZm9yIHRo
aXMgZWRpdGFibGUgcm9vdCwgaXQncyB0aGUgc3R5bGUgdGhhdCB3ZSdsbCBnaXZlIHRoZQogICAg
IC8vIGNvbnRlbnQgdGhhdCB3ZSdyZSBvcGVyYXRpbmcgb24uCiAgICAgTm9kZSogcm9vdCA9IGZy
YW1lLT5zZWxlY3Rpb24oKS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpOwotICAgIFJlZlB0cjxDU1ND
b21wdXRlZFN0eWxlRGVjbGFyYXRpb24+IGNvbXB1dGVkU3R5bGUgPSBuZXcgQ1NTQ29tcHV0ZWRT
dHlsZURlY2xhcmF0aW9uKHJvb3QpOwotICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbj4gZGVmYXVsdFN0eWxlID0gY29tcHV0ZWRTdHlsZS0+Y29weUluaGVyaXRhYmxlUHJvcGVy
dGllcygpOworICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gZGVmYXVsdFN0
eWxlID0gY29tcHV0ZWRTdHlsZShyb290KS0+Y29weUluaGVyaXRhYmxlUHJvcGVydGllcygpOwog
ICAgIAogICAgIC8vIERlbGV0ZSB0aGUgc2VsZWN0ZWQgY29udGVudC4KICAgICAvLyBGSVhNRTog
V2Ugc2hvdWxkIGJlIGFibGUgdG8gbGVhdmUgdGhpcyB0byBpbnNlcnRUZXh0LCBidXQgaXRzIGRl
bGV0ZSBvcGVyYXRpb24KSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29t
bWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25D
b21tYW5kLmNwcAkocmV2aXNpb24gMzQ1ODQpCisrKyBXZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNl
bGVjdGlvbkNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzAsNyArMjMwLDcgQEAgUGFz
c1JlZlB0cjxOb2RlPiBSZXBsYWNlbWVudEZyYWdtZW50OjppbgogICAgIHdoaWxlIChuICYmICFu
LT5pc0VsZW1lbnROb2RlKCkpCiAgICAgICAgIG4gPSBuLT5wYXJlbnROb2RlKCk7CiAgICAgaWYg
KG4pIHsKLSAgICAgICAgUmVmUHRyPENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbj4gY29uRm9u
dFN0eWxlID0gbmV3IENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbihzdGF0aWNfY2FzdDxFbGVt
ZW50Kj4obikpOworICAgICAgICBSZWZQdHI8Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uPiBj
b25Gb250U3R5bGUgPSBjb21wdXRlZFN0eWxlKG4pOwogICAgICAgICBDU1NTdHlsZURlY2xhcmF0
aW9uKiBzdHlsZSA9IGhvbGRlci0+c3R5bGUoKTsKICAgICAgICAgc3R5bGUtPnNldFByb3BlcnR5
KENTU1Byb3BlcnR5V2hpdGVTcGFjZSwgY29uRm9udFN0eWxlLT5nZXRQcm9wZXJ0eVZhbHVlKENT
U1Byb3BlcnR5V2hpdGVTcGFjZSksIGZhbHNlLCBlYyk7CiAgICAgICAgIEFTU0VSVChlYyA9PSAw
KTsKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvZWRpdGluZy9tYXJrdXAuY3BwCShyZXZpc2lvbiAzNDU4NCkKKysrIFdlYkNvcmUvZWRpdGlu
Zy9tYXJrdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzAsNyArMjcwLDcgQEAgc3RhdGljIFN0
cmluZyByZW5kZXJlZFRleHQoY29uc3QgTm9kZSogbgogCiBzdGF0aWMgUGFzc1JlZlB0cjxDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGVGcm9tTWF0Y2hlZFJ1bGVzRm9yRWxlbWVudChF
bGVtZW50KiBlbGVtZW50LCBib29sIGF1dGhvck9ubHkgPSB0cnVlKQogewotICAgIFJlZlB0cjxD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGUgPSBuZXcgQ1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb24oKTsKKyAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IHN0eWxl
ID0gQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNyZWF0ZSgpOwogICAgIFJlZlB0cjxDU1NS
dWxlTGlzdD4gbWF0Y2hlZFJ1bGVzID0gZWxlbWVudC0+ZG9jdW1lbnQoKS0+c3R5bGVTZWxlY3Rv
cigpLT5zdHlsZVJ1bGVzRm9yRWxlbWVudChlbGVtZW50LCBhdXRob3JPbmx5KTsKICAgICBpZiAo
bWF0Y2hlZFJ1bGVzKSB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtYXRjaGVk
UnVsZXMtPmxlbmd0aCgpOyBpKyspIHsKQEAgLTQ4MSw3ICs0ODEsNyBAQCBzdGF0aWMgdm9pZCBh
cHBlbmRTdGFydE1hcmt1cChWZWN0b3I8VUNoCiAgICAgICAgICAgICAgICAgICAgIHN0eWxlID0g
c3R5bGVGcm9tTWF0Y2hlZFJ1bGVzOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICAgICAgUmVmUHRyPENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbj4gY29tcHV0ZWRTdHls
ZUZvckVsZW1lbnQgPSBjb21wdXRlZFN0eWxlKGVsZW1lbnQpOwotICAgICAgICAgICAgICAgICAg
ICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IGZyb21Db21wdXRlZFN0eWxlID0g
bmV3IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKCk7CisgICAgICAgICAgICAgICAgICAgIFJl
ZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gZnJvbUNvbXB1dGVkU3R5bGUgPSBDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y3JlYXRlKCk7CiAgICAgICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGVkVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxDU1NQ
cm9wZXJ0eT4gZW5kOwogICAgICAgICAgICAgICAgICAgICBmb3IgKERlcHJlY2F0ZWRWYWx1ZUxp
c3RDb25zdEl0ZXJhdG9yPENTU1Byb3BlcnR5PiBpdCA9IHN0eWxlLT52YWx1ZXNJdGVyYXRvcigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MQm9keUVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MQm9keUVsZW1lbnQuY3BwCShyZXZp
c2lvbiAzNDU4NCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MQm9keUVsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIEhUTUxCb2R5RWxlbWVudDo6fkhUTUxCb2R5RWxlbWVu
dCgpCiAKIHZvaWQgSFRNTEJvZHlFbGVtZW50OjpjcmVhdGVMaW5rRGVjbCgpCiB7Ci0gICAgbV9s
aW5rRGVjbCA9IG5ldyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjsKKyAgICBtX2xpbmtEZWNs
ID0gQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNyZWF0ZSgpOwogICAgIG1fbGlua0RlY2wt
PnNldFBhcmVudChkb2N1bWVudCgpLT5lbGVtZW50U2hlZXQoKSk7CiAgICAgbV9saW5rRGVjbC0+
c2V0Tm9kZSh0aGlzKTsKICAgICBtX2xpbmtEZWNsLT5zZXRTdHJpY3RQYXJzaW5nKCFkb2N1bWVu
dCgpLT5pbkNvbXBhdE1vZGUoKSk7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTExpbmtFbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTExpbmtFbGVtZW50LmNwcAkocmV2
aXNpb24gMzQ1ODQpCisrKyBXZWJDb3JlL2h0bWwvSFRNTExpbmtFbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTc1LDcgKzE3NSw3IEBAIHZvaWQgSFRNTExpbmtFbGVtZW50Ojpwcm9jZXNz
KCkKICAgICAgICAgTWVkaWFRdWVyeUV2YWx1YXRvciBhbGxFdmFsKHRydWUpOwogICAgICAgICBN
ZWRpYVF1ZXJ5RXZhbHVhdG9yIHNjcmVlbkV2YWwoInNjcmVlbiIsIHRydWUpOwogICAgICAgICBN
ZWRpYVF1ZXJ5RXZhbHVhdG9yIHByaW50RXZhbCgicHJpbnQiLCB0cnVlKTsKLSAgICAgICAgUmVm
UHRyPE1lZGlhTGlzdD4gbWVkaWEgPSBuZXcgTWVkaWFMaXN0KChDU1NTdHlsZVNoZWV0KikwLCBt
X21lZGlhLCB0cnVlKTsKKyAgICAgICAgUmVmUHRyPE1lZGlhTGlzdD4gbWVkaWEgPSBNZWRpYUxp
c3Q6OmNyZWF0ZUFsbG93aW5nRGVzY3JpcHRpb25TeW50YXgobV9tZWRpYSk7CiAgICAgICAgIGlm
IChhbGxFdmFsLmV2YWwobWVkaWEuZ2V0KCkpIHx8IHNjcmVlbkV2YWwuZXZhbChtZWRpYS5nZXQo
KSkgfHwgcHJpbnRFdmFsLmV2YWwobWVkaWEuZ2V0KCkpKSB7CiAKICAgICAgICAgICAgIC8vIEFk
ZCBvdXJzZWx2ZXMgYXMgYSBwZW5kaW5nIHNoZWV0LCBidXQgb25seSBpZiB3ZSBhcmVuJ3QgYW4g
YWx0ZXJuYXRlIApAQCAtMjIzLDExICsyMjMsMTEgQEAgdm9pZCBIVE1MTGlua0VsZW1lbnQ6OnJl
bW92ZWRGcm9tRG9jdW1lbgogdm9pZCBIVE1MTGlua0VsZW1lbnQ6OnNldENTU1N0eWxlU2hlZXQo
Y29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgY2hhcnNldCwgY29uc3QgQ2FjaGVkQ1NT
U3R5bGVTaGVldCogc2hlZXQpCiB7CiAgICAgYm9vbCBzdHJpY3QgPSAhZG9jdW1lbnQoKS0+aW5D
b21wYXRNb2RlKCk7Ci0gICAgbV9zaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KHRoaXMsIHVybCwg
Y2hhcnNldCk7CisgICAgbV9zaGVldCA9IENTU1N0eWxlU2hlZXQ6OmNyZWF0ZSh0aGlzLCB1cmws
IGNoYXJzZXQpOwogICAgIG1fc2hlZXQtPnBhcnNlU3RyaW5nKHNoZWV0LT5zaGVldFRleHQoc3Ry
aWN0KSwgc3RyaWN0KTsKICAgICBtX3NoZWV0LT5zZXRUaXRsZSh0aXRsZSgpKTsKIAotICAgIFJl
ZlB0cjxNZWRpYUxpc3Q+IG1lZGlhID0gbmV3IE1lZGlhTGlzdCgoQ1NTU3R5bGVTaGVldCopMCwg
bV9tZWRpYSwgdHJ1ZSk7CisgICAgUmVmUHRyPE1lZGlhTGlzdD4gbWVkaWEgPSBNZWRpYUxpc3Q6
OmNyZWF0ZUFsbG93aW5nRGVzY3JpcHRpb25TeW50YXgobV9tZWRpYSk7CiAgICAgbV9zaGVldC0+
c2V0TWVkaWEobWVkaWEuZ2V0KCkpOwogCiAgICAgbV9sb2FkaW5nID0gZmFsc2U7CkluZGV4OiBX
ZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9o
dG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCShyZXZpc2lvbiAzNDU4NCkKKysrIFdlYkNvcmUvaHRt
bC9IVE1MTWVkaWFFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODE0LDcgKzgxNCw3IEBA
IFN0cmluZyBIVE1MTWVkaWFFbGVtZW50OjpwaWNrTWVkaWEoKQogICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsgCiAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZS0+aGFzQXR0cmlidXRlKG1l
ZGlhQXR0cikpIHsKICAgICAgICAgICAgICAgICAgICAgTWVkaWFRdWVyeUV2YWx1YXRvciBzY3Jl
ZW5FdmFsKCJzY3JlZW4iLCBkb2N1bWVudCgpLT5mcmFtZSgpLCByZW5kZXJlcigpID8gcmVuZGVy
ZXIoKS0+c3R5bGUoKSA6IDApOwotICAgICAgICAgICAgICAgICAgICBSZWZQdHI8TWVkaWFMaXN0
PiBtZWRpYSA9IG5ldyBNZWRpYUxpc3QoKENTU1N0eWxlU2hlZXQqKTAsIHNvdXJjZS0+bWVkaWEo
KSwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxNZWRpYUxpc3Q+IG1lZGlhID0g
TWVkaWFMaXN0OjpjcmVhdGVBbGxvd2luZ0Rlc2NyaXB0aW9uU3ludGF4KHNvdXJjZS0+bWVkaWEo
KSk7CiAgICAgICAgICAgICAgICAgICAgIGlmICghc2NyZWVuRXZhbC5ldmFsKG1lZGlhLmdldCgp
KSkKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIH0K
SW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MVGFibGVFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2h0bWwvSFRNTFRhYmxlRWxlbWVudC5jcHAJKHJldmlzaW9uIDM0NTg0KQorKysgV2Vi
Q29yZS9odG1sL0hUTUxUYWJsZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NjYsMTMg
KzQ2NiwxMSBAQCB2b2lkIEhUTUxUYWJsZUVsZW1lbnQ6OmFkZGl0aW9uYWxBdHRyaWJ1CiAgICAg
QXRvbWljU3RyaW5nIGJvcmRlclZhbHVlID0gbV9ib3JkZXJDb2xvckF0dHIgPyAic29saWQiIDog
Im91dHNldCI7CiAgICAgQ1NTTWFwcGVkQXR0cmlidXRlRGVjbGFyYXRpb24qIGRlY2wgPSBnZXRN
YXBwZWRBdHRyaWJ1dGVEZWNsKGVQZXJzaXN0ZW50LCB0YWJsZWJvcmRlckF0dHIsIGJvcmRlclZh
bHVlKTsKICAgICBpZiAoIWRlY2wpIHsKLSAgICAgICAgZGVjbCA9IG5ldyBDU1NNYXBwZWRBdHRy
aWJ1dGVEZWNsYXJhdGlvbigwKTsKKyAgICAgICAgZGVjbCA9IENTU01hcHBlZEF0dHJpYnV0ZURl
Y2xhcmF0aW9uOjpjcmVhdGUoKS5yZWxlYXNlUmVmKCk7IC8vIFRoaXMgc2luZ2xlIHJlZiBwaW5z
IHVzIGluIHRoZSB0YWJsZSB1bnRpbCB0aGUgZG9jdW1lbnQgZGllcy4KICAgICAgICAgZGVjbC0+
c2V0UGFyZW50KGRvY3VtZW50KCktPmVsZW1lbnRTaGVldCgpKTsKICAgICAgICAgZGVjbC0+c2V0
Tm9kZSh0aGlzKTsKICAgICAgICAgZGVjbC0+c2V0U3RyaWN0UGFyc2luZyhmYWxzZSk7IC8vIE1h
cHBlZCBhdHRyaWJ1dGVzIGFyZSBqdXN0IGFsd2F5cyBxdWlya3kuCiAgICAgICAgIAotICAgICAg
ICBkZWNsLT5yZWYoKTsgLy8gVGhpcyBzaW5nbGUgcmVmIHBpbnMgdXMgaW4gdGhlIHRhYmxlIHVu
dGlsIHRoZSBkb2N1bWVudCBkaWVzLgotCiAgICAgICAgIGludCB2ID0gbV9ib3JkZXJDb2xvckF0
dHIgPyBDU1NWYWx1ZVNvbGlkIDogQ1NTVmFsdWVPdXRzZXQ7CiAgICAgICAgIGRlY2wtPnNldFBy
b3BlcnR5KENTU1Byb3BlcnR5Qm9yZGVyVG9wU3R5bGUsIHYsIGZhbHNlKTsKICAgICAgICAgZGVj
bC0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21TdHlsZSwgdiwgZmFsc2UpOwpA
QCAtNTI2LDEzICs1MjQsMTEgQEAgdm9pZCBIVE1MVGFibGVFbGVtZW50OjphZGRTaGFyZWRDZWxs
Qm9yZAogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgY2VsbGJvcmRlclZhbHVlID0gY2VsbEJvcmRl
ck5hbWVzW2JvcmRlcnNdOwogICAgIENTU01hcHBlZEF0dHJpYnV0ZURlY2xhcmF0aW9uKiBkZWNs
ID0gZ2V0TWFwcGVkQXR0cmlidXRlRGVjbChlUGVyc2lzdGVudCwgY2VsbGJvcmRlckF0dHIsIGNl
bGxib3JkZXJWYWx1ZSk7CiAgICAgaWYgKCFkZWNsKSB7Ci0gICAgICAgIGRlY2wgPSBuZXcgQ1NT
TWFwcGVkQXR0cmlidXRlRGVjbGFyYXRpb24oMCk7CisgICAgICAgIGRlY2wgPSBDU1NNYXBwZWRB
dHRyaWJ1dGVEZWNsYXJhdGlvbjo6Y3JlYXRlKCkucmVsZWFzZVJlZigpOyAvLyBUaGlzIHNpbmds
ZSByZWYgcGlucyB1cyBpbiB0aGUgdGFibGUgdW50aWwgdGhlIGRvY3VtZW50IGRpZXMuCiAgICAg
ICAgIGRlY2wtPnNldFBhcmVudChkb2N1bWVudCgpLT5lbGVtZW50U2hlZXQoKSk7CiAgICAgICAg
IGRlY2wtPnNldE5vZGUodGhpcyk7CiAgICAgICAgIGRlY2wtPnNldFN0cmljdFBhcnNpbmcoZmFs
c2UpOyAvLyBNYXBwZWQgYXR0cmlidXRlcyBhcmUganVzdCBhbHdheXMgcXVpcmt5LgogICAgICAg
ICAKLSAgICAgICAgZGVjbC0+cmVmKCk7IC8vIFRoaXMgc2luZ2xlIHJlZiBwaW5zIHVzIGluIHRo
ZSB0YWJsZSB1bnRpbCB0aGUgZG9jdW1lbnQgZGllcy4KLSAgICAgICAgCiAgICAgICAgIHN3aXRj
aCAoYm9yZGVycykgewogICAgICAgICAgICAgY2FzZSBTb2xpZEJvcmRlcnNDb2xzT25seToKICAg
ICAgICAgICAgICAgICBkZWNsLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUJvcmRlckxlZnRXaWR0
aCwgQ1NTVmFsdWVUaGluLCBmYWxzZSk7CkBAIC01ODcsNyArNTgzLDcgQEAgdm9pZCBIVE1MVGFi
bGVFbGVtZW50OjphZGRTaGFyZWRDZWxsUGFkZAogICAgICAgICBTdHJpbmcgcGFkZGluZ1ZhbHVl
ID0gU3RyaW5nOjpudW1iZXIobV9wYWRkaW5nKTsKICAgICAgICAgbV9wYWRkaW5nRGVjbCA9IGdl
dE1hcHBlZEF0dHJpYnV0ZURlY2woZVVuaXZlcnNhbCwgY2VsbHBhZGRpbmdBdHRyLCBwYWRkaW5n
VmFsdWUpOwogICAgICAgICBpZiAoIW1fcGFkZGluZ0RlY2wpIHsKLSAgICAgICAgICAgIG1fcGFk
ZGluZ0RlY2wgPSBuZXcgQ1NTTWFwcGVkQXR0cmlidXRlRGVjbGFyYXRpb24oMCk7CisgICAgICAg
ICAgICBtX3BhZGRpbmdEZWNsID0gQ1NTTWFwcGVkQXR0cmlidXRlRGVjbGFyYXRpb246OmNyZWF0
ZSgpOwogICAgICAgICAgICAgbV9wYWRkaW5nRGVjbC0+c2V0UGFyZW50KGRvY3VtZW50KCktPmVs
ZW1lbnRTaGVldCgpKTsKICAgICAgICAgICAgIG1fcGFkZGluZ0RlY2wtPnNldE5vZGUodGhpcyk7
CiAgICAgICAgICAgICBtX3BhZGRpbmdEZWNsLT5zZXRTdHJpY3RQYXJzaW5nKGZhbHNlKTsgLy8g
TWFwcGVkIGF0dHJpYnV0ZXMgYXJlIGp1c3QgYWx3YXlzIHF1aXJreS4KQEAgLTYxNCwxMyArNjEw
LDExIEBAIHZvaWQgSFRNTFRhYmxlRWxlbWVudDo6YWRkU2hhcmVkR3JvdXBEZWMKICAgICBBdG9t
aWNTdHJpbmcgcnVsZXNWYWx1ZSA9IHJvd3MgPyAicm93Z3JvdXBzIiA6ICJjb2xncm91cHMiOwog
ICAgIENTU01hcHBlZEF0dHJpYnV0ZURlY2xhcmF0aW9uKiBkZWNsID0gZ2V0TWFwcGVkQXR0cmli
dXRlRGVjbChlUGVyc2lzdGVudCwgcnVsZXNBdHRyLCBydWxlc1ZhbHVlKTsKICAgICBpZiAoIWRl
Y2wpIHsKLSAgICAgICAgZGVjbCA9IG5ldyBDU1NNYXBwZWRBdHRyaWJ1dGVEZWNsYXJhdGlvbigw
KTsKKyAgICAgICAgZGVjbCA9IENTU01hcHBlZEF0dHJpYnV0ZURlY2xhcmF0aW9uOjpjcmVhdGUo
KS5yZWxlYXNlUmVmKCk7IC8vIFRoaXMgc2luZ2xlIHJlZiBwaW5zIHVzIGluIHRoZSB0YWJsZSB1
bnRpbCB0aGUgZG9jdW1lbnQgZGllcy4KICAgICAgICAgZGVjbC0+c2V0UGFyZW50KGRvY3VtZW50
KCktPmVsZW1lbnRTaGVldCgpKTsKICAgICAgICAgZGVjbC0+c2V0Tm9kZSh0aGlzKTsKICAgICAg
ICAgZGVjbC0+c2V0U3RyaWN0UGFyc2luZyhmYWxzZSk7IC8vIE1hcHBlZCBhdHRyaWJ1dGVzIGFy
ZSBqdXN0IGFsd2F5cyBxdWlya3kuCiAgICAgICAgIAotICAgICAgICBkZWNsLT5yZWYoKTsgLy8g
VGhpcyBzaW5nbGUgcmVmIHBpbnMgdXMgaW4gdGhlIHRhYmxlIHVudGlsIHRoZSBkb2N1bWVudCBk
aWVzLgotICAgICAgICAKICAgICAgICAgaWYgKHJvd3MpIHsKICAgICAgICAgICAgIGRlY2wtPnNl
dFByb3BlcnR5KENTU1Byb3BlcnR5Qm9yZGVyVG9wV2lkdGgsIENTU1ZhbHVlVGhpbiwgZmFsc2Up
OwogICAgICAgICAgICAgZGVjbC0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21X
aWR0aCwgQ1NTVmFsdWVUaGluLCBmYWxzZSk7CkluZGV4OiBXZWJDb3JlL3BhZ2UvRE9NV2luZG93
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAkocmV2aXNpb24g
MzQ1ODQpCisrKyBXZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NzUxLDggKzc1MSw4IEBAIFBhc3NSZWZQdHI8Q1NTU3R5bGVEZWNsYXJhdGlvbj4gRE9NV2luZG8K
ICAgICBpZiAoIWVsdCkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICAvLyBGSVhNRTogVGhpcyBu
ZWVkcyB0byB3b3JrIHdpdGggcHNldWRvIGVsZW1lbnRzLgotICAgIHJldHVybiBuZXcgQ1NTQ29t
cHV0ZWRTdHlsZURlY2xhcmF0aW9uKGVsdCk7CisgICAgLy8gRklYTUU6IFRoaXMgbmVlZHMgdGFr
ZSBwc2V1ZG8gZWxlbWVudHMgaW50byBhY2NvdW50LgorICAgIHJldHVybiBjb21wdXRlZFN0eWxl
KGVsdCk7CiB9CiAKIFBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IERPTVdpbmRvdzo6Z2V0TWF0Y2hl
ZENTU1J1bGVzKEVsZW1lbnQqIGVsdCwgY29uc3QgU3RyaW5nJiBwc2V1ZG9FbHQsIGJvb2wgYXV0
aG9yT25seSkgY29uc3QKSW5kZXg6IFdlYkNvcmUvcGFnZS9GcmFtZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAkocmV2aXNpb24gMzQ1ODkpCisrKyBXZWJDb3JlL3Bh
Z2UvRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NjYsOSArODY2LDggQEAgdm9pZCBGcmFt
ZTo6Y29tcHV0ZUFuZFNldFR5cGluZ1N0eWxlKENTUwogICAgICAgICBtdXRhYmxlU3R5bGUgPSB0
eXBpbmdTdHlsZSgpOwogICAgIH0KIAotICAgIE5vZGUgKm5vZGUgPSBzZWxlY3Rpb24oKS0+c2Vs
ZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkuZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCk7Ci0gICAgQ1NT
Q29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uIGNvbXB1dGVkU3R5bGUobm9kZSk7Ci0gICAgY29tcHV0
ZWRTdHlsZS5kaWZmKG11dGFibGVTdHlsZS5nZXQoKSk7CisgICAgTm9kZSogbm9kZSA9IHNlbGVj
dGlvbigpLT5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKS5kZWVwRXF1aXZhbGVudCgpLm5vZGUo
KTsKKyAgICBjb21wdXRlZFN0eWxlKG5vZGUpLT5kaWZmKG11dGFibGVTdHlsZS5nZXQoKSk7CiAg
ICAgCiAgICAgLy8gSGFuZGxlIGJsb2NrIHN0eWxlcywgc3Vic3RyYWN0aW5nIHRoZXNlIGZyb20g
dGhlIHR5cGluZyBzdHlsZS4KICAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+
IGJsb2NrU3R5bGUgPSBtdXRhYmxlU3R5bGUtPmNvcHlCbG9ja1Byb3BlcnRpZXMoKTsKQEAgLTg5
OCw3ICs4OTcsNyBAQCBTdHJpbmcgRnJhbWU6OnNlbGVjdGlvblN0YXJ0U3R5bGVQcm9wZXJ0CiAg
ICAgcmV0dXJuIHZhbHVlOwogfQogCi1DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24gKkZyYW1l
OjpzZWxlY3Rpb25Db21wdXRlZFN0eWxlKE5vZGUgKiZub2RlVG9SZW1vdmUpIGNvbnN0CitQYXNz
UmVmUHRyPENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbj4gRnJhbWU6OnNlbGVjdGlvbkNvbXB1
dGVkU3R5bGUoTm9kZSomIG5vZGVUb1JlbW92ZSkgY29uc3QKIHsKICAgICBub2RlVG9SZW1vdmUg
PSAwOwogCkBAIC05NDUsNyArOTQ0LDcgQEAgQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uICpG
cmFtZTo6c2VsZQogICAgICAgICBub2RlVG9SZW1vdmUgPSBzdHlsZUVsZW1lbnQuZ2V0KCk7CiAg
ICAgfQogCi0gICAgcmV0dXJuIG5ldyBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24oc3R5bGVF
bGVtZW50KTsKKyAgICByZXR1cm4gY29tcHV0ZWRTdHlsZShzdHlsZUVsZW1lbnQucmVsZWFzZSgp
KTsKIH0KIAogdm9pZCBGcmFtZTo6dGV4dEZpZWxkRGlkQmVnaW5FZGl0aW5nKEVsZW1lbnQqIGUp
CkluZGV4OiBXZWJDb3JlL3BhZ2UvRnJhbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2Uv
RnJhbWUuaAkocmV2aXNpb24gMzQ1ODkpCisrKyBXZWJDb3JlL3BhZ2UvRnJhbWUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjY0LDcgKzI2NCw3IEBAIHB1YmxpYzoKICAgICBib29sIG1hcmtlZFRleHRN
YXRjaGVzQXJlSGlnaGxpZ2h0ZWQoKSBjb25zdDsKICAgICB2b2lkIHNldE1hcmtlZFRleHRNYXRj
aGVzQXJlSGlnaGxpZ2h0ZWQoYm9vbCBmbGFnKTsKIAotICAgIENTU0NvbXB1dGVkU3R5bGVEZWNs
YXJhdGlvbiogc2VsZWN0aW9uQ29tcHV0ZWRTdHlsZShOb2RlKiYgbm9kZVRvUmVtb3ZlKSBjb25z
dDsKKyAgICBQYXNzUmVmUHRyPENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbj4gc2VsZWN0aW9u
Q29tcHV0ZWRTdHlsZShOb2RlKiYgbm9kZVRvUmVtb3ZlKSBjb25zdDsKIAogICAgIHZvaWQgdGV4
dEZpZWxkRGlkQmVnaW5FZGl0aW5nKEVsZW1lbnQqKTsKICAgICB2b2lkIHRleHRGaWVsZERpZEVu
ZEVkaXRpbmcoRWxlbWVudCopOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVy
U3R5bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0
eWxlLmNwcAkocmV2aXNpb24gMzQ1ODQpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5k
ZXJTdHlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMCw3ICsxMzAsNyBAQCBTdHlsZVZpc3Vh
bERhdGE6OlN0eWxlVmlzdWFsRGF0YShjb25zdCBTCiAKIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IFN0
eWxlQ2FjaGVkSW1hZ2U6OmNzc1ZhbHVlKCkKIHsKLSAgICByZXR1cm4gbmV3IENTU1ByaW1pdGl2
ZVZhbHVlKG1faW1hZ2UtPnVybCgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSk7CisgICAg
cmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUobV9pbWFnZS0+dXJsKCksIENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfVVJJKTsKIH0KIAogYm9vbCBTdHlsZUNhY2hlZEltYWdlOjpjYW5SZW5k
ZXIoZmxvYXQgbXVsdGlwbGllcikgY29uc3QKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxl
L1JlbmRlclN0eWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVu
ZGVyU3R5bGUuaAkocmV2aXNpb24gMzQ1ODQpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9S
ZW5kZXJTdHlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw2IEBACiAjaW5jbHVkZSAi
Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlLmgi
CiAjaW5jbHVkZSAiQ1NTUmVmbGVjdGlvbkRpcmVjdGlvbi5oIgotI2luY2x1ZGUgIkNTU1RyYW5z
Zm9ybVZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVMaXN0LmgiCiAjaW5jbHVkZSAiQ29sb3Iu
aCIKICNpbmNsdWRlICJEYXRhUmVmLmgiCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdDb2xvci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0NvbG9yLmgJKHJldmlzaW9uIDM0NTg0KQorKysg
V2ViQ29yZS9zdmcvU1ZHQ29sb3IuaAkod29ya2luZyBjb3B5KQpAQCAtMiw4ICsyLDYgQEAKICAg
ICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtk
ZS5vcmc+CiAgICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IFJvYiBCdWlz
IDxidWlzQGtkZS5vcmc+CiAKLSAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2pl
Y3QKLQogICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwogICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgpAQCAtMjYsMTggKzI0LDIxIEBACiAKICNp
bmNsdWRlICJDU1NWYWx1ZS5oIgogI2luY2x1ZGUgIkNvbG9yLmgiCi0jaW5jbHVkZSAiUGxhdGZv
cm1TdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0gICAKLSAgICB0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwotIAorCiAgICAgY2xh
c3MgU1ZHQ29sb3IgOiBwdWJsaWMgQ1NTVmFsdWUgewogICAgIHB1YmxpYzoKLSAgICAgICAgU1ZH
Q29sb3IoKTsKLSAgICAgICAgU1ZHQ29sb3IoY29uc3QgU3RyaW5nJiByZ2JDb2xvcik7Ci0gICAg
ICAgIFNWR0NvbG9yKGNvbnN0IENvbG9yJiBjKTsKLSAgICAgICAgU1ZHQ29sb3IodW5zaWduZWQg
c2hvcnQgY29sb3JUeXBlKTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U1ZHQ29sb3I+IGNy
ZWF0ZShjb25zdCBTdHJpbmcmIGNvbG9yKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFNWR0NvbG9yKGNvbG9yKSk7CisgICAgICAgIH0KKyAgICAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8U1ZHQ29sb3I+IGNyZWF0ZShjb25zdCBDb2xvciYgY29sb3IpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU1ZHQ29sb3IoY29sb3IpKTsKKyAg
ICAgICAgfQorCiAgICAgICAgIHZpcnR1YWwgflNWR0NvbG9yKCk7CiAKICAgICAgICAgZW51bSBT
VkdDb2xvclR5cGUgewpAQCAtNjQsOSArNjUsMTYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICAvLyBIZWxwZXJzCiAgICAgICAgIGNvbnN0IENvbG9yJiBjb2xvcigpIGNvbnN0OwogCi0g
ICAgICAgIHZpcnR1YWwgYm9vbCBpc1NWR0NvbG9yKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQor
ICAgIHByb3RlY3RlZDoKKyAgICAgICAgU1ZHQ29sb3IoKTsKKyAgICAgICAgU1ZHQ29sb3IoY29u
c3QgU3RyaW5nJiByZ2JDb2xvcik7CisgICAgICAgIFNWR0NvbG9yKGNvbnN0IENvbG9yJik7CiAK
ICAgICBwcml2YXRlOgorICAgICAgICBTVkdDb2xvcih1bnNpZ25lZCBzaG9ydCBjb2xvclR5cGUp
OworCisgICAgICAgIHZpcnR1YWwgYm9vbCBpc1NWR0NvbG9yKCkgY29uc3QgeyByZXR1cm4gdHJ1
ZTsgfQorCiAgICAgICAgIENvbG9yIG1fY29sb3I7CiAgICAgICAgIHVuc2lnbmVkIHNob3J0IG1f
Y29sb3JUeXBlOwogICAgIH07CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdGb250RmFjZUVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNlRWxlbWVudC5jcHAJKHJl
dmlzaW9uIDM0NTg0KQorKysgV2ViQ29yZS9zdmcvU1ZHRm9udEZhY2VFbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDgsOCArNDgsOCBAQCB1c2luZyBuYW1lc3BhY2UgU1ZHTmFtZXM7CiAK
IFNWR0ZvbnRGYWNlRWxlbWVudDo6U1ZHRm9udEZhY2VFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5h
bWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2MpCiAgICAgOiBTVkdFbGVtZW50KHRhZ05hbWUsIGRv
YykKLSAgICAsIG1fZm9udEZhY2VSdWxlKG5ldyBDU1NGb250RmFjZVJ1bGUoMCkpCi0gICAgLCBt
X3N0eWxlRGVjbGFyYXRpb24obmV3IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKQorICAgICwg
bV9mb250RmFjZVJ1bGUoQ1NTRm9udEZhY2VSdWxlOjpjcmVhdGUoKSkKKyAgICAsIG1fc3R5bGVE
ZWNsYXJhdGlvbihDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y3JlYXRlKCkpCiB7CiAgICAg
bV9zdHlsZURlY2xhcmF0aW9uLT5zZXRQYXJlbnQoZG9jdW1lbnQoKS0+bWFwcGVkRWxlbWVudFNo
ZWV0KCkpOwogICAgIG1fc3R5bGVEZWNsYXJhdGlvbi0+c2V0U3RyaWN0UGFyc2luZyh0cnVlKTsK
QEAgLTMxOCw4ICszMTgsOCBAQCB2b2lkIFNWR0ZvbnRGYWNlRWxlbWVudDo6cmVidWlsZEZvbnRG
YWNlCiAgICAgaWYgKGRlc2NyaWJlc1BhcmVudEZvbnQpIHsKICAgICAgICAgbV9mb250RWxlbWVu
dCA9IHN0YXRpY19jYXN0PFNWR0ZvbnRFbGVtZW50Kj4ocGFyZW50Tm9kZSgpKTsKIAotICAgICAg
ICBsaXN0ID0gbmV3IENTU1ZhbHVlTGlzdDsKLSAgICAgICAgbGlzdC0+YXBwZW5kKG5ldyBDU1NG
b250RmFjZVNyY1ZhbHVlKGZvbnRGYW1pbHkoKSwgdHJ1ZSkpOworICAgICAgICBsaXN0ID0gQ1NT
VmFsdWVMaXN0OjpjcmVhdGVDb21tYVNlcGFyYXRlZCgpOworICAgICAgICBsaXN0LT5hcHBlbmQo
Q1NTRm9udEZhY2VTcmNWYWx1ZTo6Y3JlYXRlTG9jYWwoZm9udEZhbWlseSgpKSk7CiAgICAgfSBl
bHNlIGlmIChzcmNFbGVtZW50KQogICAgICAgICBsaXN0ID0gc3JjRWxlbWVudC0+c3JjVmFsdWUo
KTsKIApJbmRleDogV2ViQ29yZS9zdmcvU1ZHRm9udEZhY2VOYW1lRWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHRm9udEZhY2VOYW1lRWxlbWVudC5jcHAJKHJldmlzaW9u
IDM0NTg0KQorKysgV2ViQ29yZS9zdmcvU1ZHRm9udEZhY2VOYW1lRWxlbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgU1ZHRm9udEZhY2VOYW1lRWxlbWVudDo6U1ZHRm9u
dEZhY2VOYW1lRQogCiBQYXNzUmVmUHRyPENTU0ZvbnRGYWNlU3JjVmFsdWU+IFNWR0ZvbnRGYWNl
TmFtZUVsZW1lbnQ6OnNyY1ZhbHVlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbmV3IENTU0ZvbnRG
YWNlU3JjVmFsdWUoZ2V0QXR0cmlidXRlKFNWR05hbWVzOjpuYW1lQXR0ciksIHRydWUpOworICAg
IHJldHVybiBDU1NGb250RmFjZVNyY1ZhbHVlOjpjcmVhdGVMb2NhbChnZXRBdHRyaWJ1dGUoU1ZH
TmFtZXM6Om5hbWVBdHRyKSk7CiB9CiAKIH0KSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNl
U3JjRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHRm9udEZhY2VTcmNF
bGVtZW50LmNwcAkocmV2aXNpb24gMzQ1ODQpCisrKyBXZWJDb3JlL3N2Zy9TVkdGb250RmFjZVNy
Y0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIFNWR0ZvbnRGYWNl
U3JjRWxlbWVudDo6U1ZHRm9udEZhY2VTcmNFbGUKIAogUGFzc1JlZlB0cjxDU1NWYWx1ZUxpc3Q+
IFNWR0ZvbnRGYWNlU3JjRWxlbWVudDo6c3JjVmFsdWUoKSBjb25zdAogewotICAgIFJlZlB0cjxD
U1NWYWx1ZUxpc3Q+IGxpc3QgPSBuZXcgQ1NTVmFsdWVMaXN0OworICAgIFJlZlB0cjxDU1NWYWx1
ZUxpc3Q+IGxpc3QgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZUNvbW1hU2VwYXJhdGVkKCk7CiAgICAg
Zm9yIChOb2RlKiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5l
eHRTaWJsaW5nKCkpIHsKICAgICAgICAgaWYgKGNoaWxkLT5oYXNUYWdOYW1lKGZvbnRfZmFjZV91
cmlUYWcpKQogICAgICAgICAgICAgbGlzdC0+YXBwZW5kKHN0YXRpY19jYXN0PFNWR0ZvbnRGYWNl
VXJpRWxlbWVudCo+KGNoaWxkKS0+c3JjVmFsdWUoKSk7CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdG
b250RmFjZVVyaUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR0ZvbnRG
YWNlVXJpRWxlbWVudC5jcHAJKHJldmlzaW9uIDM0NTg0KQorKysgV2ViQ29yZS9zdmcvU1ZHRm9u
dEZhY2VVcmlFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBTVkdG
b250RmFjZVVyaUVsZW1lbnQ6OlNWR0ZvbnRGYWNlVXJpRWxlCiAKIFBhc3NSZWZQdHI8Q1NTRm9u
dEZhY2VTcmNWYWx1ZT4gU1ZHRm9udEZhY2VVcmlFbGVtZW50OjpzcmNWYWx1ZSgpIGNvbnN0CiB7
Ci0gICAgUmVmUHRyPENTU0ZvbnRGYWNlU3JjVmFsdWU+IHNyYyA9IG5ldyBDU1NGb250RmFjZVNy
Y1ZhbHVlKGdldEF0dHJpYnV0ZShYTGlua05hbWVzOjpocmVmQXR0ciksIGZhbHNlKTsKKyAgICBS
ZWZQdHI8Q1NTRm9udEZhY2VTcmNWYWx1ZT4gc3JjID0gQ1NTRm9udEZhY2VTcmNWYWx1ZTo6Y3Jl
YXRlKGdldEF0dHJpYnV0ZShYTGlua05hbWVzOjpocmVmQXR0cikpOwogICAgIEF0b21pY1N0cmlu
ZyB2YWx1ZShnZXRBdHRyaWJ1dGUoZm9ybWF0QXR0cikpOwogICAgIHNyYy0+c2V0Rm9ybWF0KHZh
bHVlLmlzRW1wdHkoKSA/ICJzdmciIDogdmFsdWUpOyAvLyBEZWZhdWx0IGZvcm1hdAogICAgIHJl
dHVybiBzcmMucmVsZWFzZSgpOwpJbmRleDogV2ViQ29yZS9zdmcvU1ZHUGFpbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1BhaW50LmNwcAkocmV2aXNpb24gMzQ1ODQpCisrKyBX
ZWJDb3JlL3N2Zy9TVkdQYWludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDIxICsyNywxOCBA
QAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBTVkdQYWludDo6U1ZHUGFpbnQoKQotICAgIDogU1ZH
Q29sb3IoKQotICAgICwgbV9wYWludFR5cGUoU1ZHX1BBSU5UVFlQRV9VTktOT1dOKQorICAgIDog
bV9wYWludFR5cGUoU1ZHX1BBSU5UVFlQRV9VTktOT1dOKQogewogfQogCiBTVkdQYWludDo6U1ZH
UGFpbnQoY29uc3QgU3RyaW5nJiB1cmkpCi0gICAgOiBTVkdDb2xvcigpCi0gICAgLCBtX3BhaW50
VHlwZShTVkdfUEFJTlRUWVBFX1VSSV9SR0JDT0xPUikKKyAgICA6IG1fcGFpbnRUeXBlKFNWR19Q
QUlOVFRZUEVfVVJJX1JHQkNPTE9SKQogewogICAgIHNldFVyaSh1cmkpOwogfQogCiBTVkdQYWlu
dDo6U1ZHUGFpbnQoU1ZHUGFpbnRUeXBlIHBhaW50VHlwZSkKLSAgICA6IFNWR0NvbG9yKCkKLSAg
ICAsIG1fcGFpbnRUeXBlKHBhaW50VHlwZSkKKyAgICA6IG1fcGFpbnRUeXBlKHBhaW50VHlwZSkK
IHsKIH0KIApJbmRleDogV2ViQ29yZS9zdmcvU1ZHUGFpbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3N2Zy9TVkdQYWludC5oCShyZXZpc2lvbiAzNDU4NCkKKysrIFdlYkNvcmUvc3ZnL1NWR1Bh
aW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMsOCArMyw2IEBACiAgICAgICAgICAgICAgICAgICAy
MDA0LCAyMDA1LCAyMDA2LCAyMDA3IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgICAgQ29weXJp
Z2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgKHNhbS53ZWluaWdAZ21pYWwuY29tKQogCi0gICAg
VGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0Ci0KICAgICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgICAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
ICAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKQEAgLTI2LDYgKzI0LDcgQEAKICNpZiBFTkFCTEUoU1ZHKQogCiAjaW5jbHVkZSAi
U1ZHQ29sb3IuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKQEAgLTQ0LDEyICs0MywyMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
ICAgICBTVkdfUEFJTlRUWVBFX1VSSSAgICAgICAgICAgICAgICAgICA9IDEwNwogICAgICAgICB9
OwogCi0gICAgICAgIFNWR1BhaW50KCk7Ci0gICAgICAgIFNWR1BhaW50KGNvbnN0IFN0cmluZyYg
dXJpKTsKLSAgICAgICAgU1ZHUGFpbnQoU1ZHUGFpbnRUeXBlKTsKLSAgICAgICAgU1ZHUGFpbnQo
U1ZHUGFpbnRUeXBlLCBjb25zdCBTdHJpbmcmIHVyaSwgY29uc3QgU3RyaW5nJiByZ2JQYWludCA9
IFN0cmluZygpLCBjb25zdCBTdHJpbmcmIGljY1BhaW50ID0gU3RyaW5nKCkpOwotICAgICAgICBT
VkdQYWludChjb25zdCBDb2xvciYgYyk7Ci0gICAgICAgIFNWR1BhaW50KGNvbnN0IFN0cmluZyYg
dXJpLCBjb25zdCBDb2xvciYgYyk7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNWR1BhaW50
PiBjcmVhdGUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNW
R1BhaW50KTsKKyAgICAgICAgfQorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTVkdQYWludD4g
Y3JlYXRlKGNvbnN0IENvbG9yJiBjb2xvcikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBTVkdQYWludChjb2xvcikpOworICAgICAgICB9CisgICAgICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFNWR1BhaW50PiBjcmVhdGUoU1ZHUGFpbnRUeXBlIHR5cGUsIGNvbnN0IFN0
cmluZyYgdXJpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNW
R1BhaW50KHR5cGUsIHVyaSwgU3RyaW5nKCksIFN0cmluZygpKSk7CisgICAgICAgIH0KKyAgICAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8U1ZHUGFpbnQ+IGNyZWF0ZShjb25zdCBTdHJpbmcmIHVyaSwg
Y29uc3QgQ29sb3ImIGNvbG9yKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFNWR1BhaW50KHVyaSwgY29sb3IpKTsKKyAgICAgICAgfQorCiAgICAgICAgIHZpcnR1
YWwgflNWR1BhaW50KCk7CiAKICAgICAgICAgLy8gJ1NWR1BhaW50JyBmdW5jdGlvbnMKQEAgLTY0
LDggKzc0LDE2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgc3RhdGljIFNWR1BhaW50
KiBkZWZhdWx0RmlsbCgpOwogICAgICAgICBzdGF0aWMgU1ZHUGFpbnQqIGRlZmF1bHRTdHJva2Uo
KTsKIAotICAgICAgICB2aXJ0dWFsIGJvb2wgaXNTVkdQYWludCgpIGNvbnN0IHsgcmV0dXJuIHRy
dWU7IH0KICAgICBwcml2YXRlOgorICAgICAgICBTVkdQYWludCgpOworICAgICAgICBTVkdQYWlu
dChjb25zdCBTdHJpbmcmIHVyaSk7CisgICAgICAgIFNWR1BhaW50KFNWR1BhaW50VHlwZSk7Cisg
ICAgICAgIFNWR1BhaW50KFNWR1BhaW50VHlwZSwgY29uc3QgU3RyaW5nJiB1cmksIGNvbnN0IFN0
cmluZyYgcmdiUGFpbnQsIGNvbnN0IFN0cmluZyYgaWNjUGFpbnQpOworICAgICAgICBTVkdQYWlu
dChjb25zdCBDb2xvciYgYyk7CisgICAgICAgIFNWR1BhaW50KGNvbnN0IFN0cmluZyYgdXJpLCBj
b25zdCBDb2xvciYgYyk7CisKKyAgICAgICAgdmlydHVhbCBib29sIGlzU1ZHUGFpbnQoKSBjb25z
dCB7IHJldHVybiB0cnVlOyB9CisKICAgICAgICAgU1ZHUGFpbnRUeXBlIG1fcGFpbnRUeXBlOwog
ICAgICAgICBTdHJpbmcgbV91cmk7CiAgICAgfTsKSW5kZXg6IFdlYkNvcmUvc3ZnL2FuaW1hdGlv
bi9TTUlMVGltZUNvbnRhaW5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvYW5pbWF0
aW9uL1NNSUxUaW1lQ29udGFpbmVyLmNwcAkocmV2aXNpb24gMzQ1ODQpCisrKyBXZWJDb3JlL3N2
Zy9hbmltYXRpb24vU01JTFRpbWVDb250YWluZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTgs
MTAgKzE5OCw5IEBAIFN0cmluZyBTTUlMVGltZUNvbnRhaW5lcjo6YmFzZVZhbHVlRm9yKEUKICAg
ICBBU1NFUlQodGFyZ2V0KTsKICAgICBBU1NFUlQoIWF0dHJpYnV0ZU5hbWUuaXNFbXB0eSgpKTsK
ICAgICBTdHJpbmcgYmFzZVZhbHVlOwotICAgIGlmIChTVkdBbmltYXRpb25FbGVtZW50OjphdHRy
aWJ1dGVJc0NTUyhhdHRyaWJ1dGVOYW1lKSkgewotICAgICAgICBDU1NDb21wdXRlZFN0eWxlRGVj
bGFyYXRpb24gY29tcHV0ZWRTdHlsZSh0YXJnZXQpOwotICAgICAgICBiYXNlVmFsdWUgPSBjb21w
dXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUoY3NzUHJvcGVydHlJRChhdHRyaWJ1dGVOYW1lKSk7
Ci0gICAgfSBlbHNlCisgICAgaWYgKFNWR0FuaW1hdGlvbkVsZW1lbnQ6OmF0dHJpYnV0ZUlzQ1NT
KGF0dHJpYnV0ZU5hbWUpKQorICAgICAgICBiYXNlVmFsdWUgPSBjb21wdXRlZFN0eWxlKHRhcmdl
dCktPmdldFByb3BlcnR5VmFsdWUoY3NzUHJvcGVydHlJRChhdHRyaWJ1dGVOYW1lKSk7CisgICAg
ZWxzZQogICAgICAgICBiYXNlVmFsdWUgPSB0YXJnZXQtPmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVO
YW1lKTsKICAgICBtX3NhdmVkQmFzZVZhbHVlcy5hZGQoa2V5LCBiYXNlVmFsdWUpOwogICAgIHJl
dHVybiBiYXNlVmFsdWU7CkluZGV4OiBXZWJDb3JlL3htbC9YU0xJbXBvcnRSdWxlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3htbC9YU0xJbXBvcnRSdWxlLmNwcAkocmV2aXNpb24gMzQ1ODQp
CisrKyBXZWJDb3JlL3htbC9YU0xJbXBvcnRSdWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAs
NyArMzAsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVhTTEltcG9ydFJ1bGU6OlhTTElt
cG9ydFJ1bGUoU3R5bGVCYXNlKiBwYXJlbnQsIGNvbnN0IFN0cmluZyYgaHJlZikKK1hTTEltcG9y
dFJ1bGU6OlhTTEltcG9ydFJ1bGUoWFNMU3R5bGVTaGVldCogcGFyZW50LCBjb25zdCBTdHJpbmcm
IGhyZWYpCiAgICAgOiBTdHlsZUJhc2UocGFyZW50KQogICAgICwgbV9zdHJIcmVmKGhyZWYpCiAg
ICAgLCBtX2NhY2hlZFNoZWV0KDApCkBAIC01Nyw3ICs1Nyw3IEBAIHZvaWQgWFNMSW1wb3J0UnVs
ZTo6c2V0WFNMU3R5bGVTaGVldChjb24KICAgICBpZiAobV9zdHlsZVNoZWV0KQogICAgICAgICBt
X3N0eWxlU2hlZXQtPnNldFBhcmVudCgwKTsKICAgICAKLSAgICBtX3N0eWxlU2hlZXQgPSBuZXcg
WFNMU3R5bGVTaGVldCh0aGlzLCB1cmwpOworICAgIG1fc3R5bGVTaGVldCA9IFhTTFN0eWxlU2hl
ZXQ6OmNyZWF0ZSh0aGlzLCB1cmwpOwogICAgIAogICAgIFhTTFN0eWxlU2hlZXQqIHBhcmVudCA9
IHBhcmVudFN0eWxlU2hlZXQoKTsKICAgICBpZiAocGFyZW50KQpJbmRleDogV2ViQ29yZS94bWwv
WFNMSW1wb3J0UnVsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveG1sL1hTTEltcG9ydFJ1bGUu
aAkocmV2aXNpb24gMzQ1ODQpCisrKyBXZWJDb3JlL3htbC9YU0xJbXBvcnRSdWxlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IFhTTCBpbXBsZW1lbnRhdGlvbi4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYgQXBw
bGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAwOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTMzLDI0
ICszMywzMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENhY2hlZFhTTFN0eWxlU2hl
ZXQ7CiAKLWNsYXNzIFhTTEltcG9ydFJ1bGUgOiBwdWJsaWMgQ2FjaGVkUmVzb3VyY2VDbGllbnQs
IHB1YmxpYyBTdHlsZUJhc2UgeworY2xhc3MgWFNMSW1wb3J0UnVsZSA6IHB1YmxpYyBTdHlsZUJh
c2UsIHByaXZhdGUgQ2FjaGVkUmVzb3VyY2VDbGllbnQgewogcHVibGljOgotICAgIFhTTEltcG9y
dFJ1bGUoU3R5bGVCYXNlKiBwYXJlbnQsIGNvbnN0IFN0cmluZyYgaHJlZik7CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8WFNMSW1wb3J0UnVsZT4gY3JlYXRlKFhTTFN0eWxlU2hlZXQqIHBhcmVudFNo
ZWV0LCBjb25zdCBTdHJpbmcmIGhyZWYpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFhTTEltcG9ydFJ1bGUocGFyZW50U2hlZXQsIGhyZWYpKTsKKyAgICB9CisKICAgICB2aXJ0
dWFsIH5YU0xJbXBvcnRSdWxlKCk7CiAgICAgCi0gICAgU3RyaW5nIGhyZWYoKSBjb25zdCB7IHJl
dHVybiBtX3N0ckhyZWY7IH0KKyAgICBjb25zdCBTdHJpbmcmIGhyZWYoKSBjb25zdCB7IHJldHVy
biBtX3N0ckhyZWY7IH0KICAgICBYU0xTdHlsZVNoZWV0KiBzdHlsZVNoZWV0KCkgY29uc3QgeyBy
ZXR1cm4gbV9zdHlsZVNoZWV0LmdldCgpOyB9Ci0gICAgCi0gICAgdmlydHVhbCBib29sIGlzSW1w
b3J0UnVsZSgpIHsgcmV0dXJuIHRydWU7IH0KKwogICAgIFhTTFN0eWxlU2hlZXQqIHBhcmVudFN0
eWxlU2hlZXQoKSBjb25zdDsKKworICAgIGJvb2wgaXNMb2FkaW5nKCk7CisgICAgdm9pZCBsb2Fk
U2hlZXQoKTsKICAgICAKK3ByaXZhdGU6CisgICAgWFNMSW1wb3J0UnVsZShYU0xTdHlsZVNoZWV0
KiBwYXJlbnRTaGVldCwgY29uc3QgU3RyaW5nJiBocmVmKTsKKworICAgIHZpcnR1YWwgYm9vbCBp
c0ltcG9ydFJ1bGUoKSB7IHJldHVybiB0cnVlOyB9CisKICAgICAvLyBmcm9tIENhY2hlZFJlc291
cmNlQ2xpZW50CiAgICAgdmlydHVhbCB2b2lkIHNldFhTTFN0eWxlU2hlZXQoY29uc3QgU3RyaW5n
JiB1cmwsIGNvbnN0IFN0cmluZyYgc2hlZXQpOwogICAgIAotICAgIGJvb2wgaXNMb2FkaW5nKCk7
Ci0gICAgdm9pZCBsb2FkU2hlZXQoKTsKLSAgICAKLXByb3RlY3RlZDoKICAgICBTdHJpbmcgbV9z
dHJIcmVmOwogICAgIFJlZlB0cjxYU0xTdHlsZVNoZWV0PiBtX3N0eWxlU2hlZXQ7CiAgICAgQ2Fj
aGVkWFNMU3R5bGVTaGVldCogbV9jYWNoZWRTaGVldDsKSW5kZXg6IFdlYkNvcmUveG1sL1hTTFN0
eWxlU2hlZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveG1sL1hTTFN0eWxlU2hlZXQuY3Bw
CShyZXZpc2lvbiAzNDU4NCkKKysrIFdlYkNvcmUveG1sL1hTTFN0eWxlU2hlZXQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05OSw4ICs5OSw4IEBAIHZvaWQgWFNMU3R5bGVTaGVldDo6Y2hlY2tMb2Fk
ZWQoKQogICAgICAgICByZXR1cm47CiAgICAgaWYgKHBhcmVudCgpKQogICAgICAgICBwYXJlbnQo
KS0+Y2hlY2tMb2FkZWQoKTsKLSAgICBpZiAobV9wYXJlbnROb2RlKQotICAgICAgICBtX3BhcmVu
dE5vZGUtPnNoZWV0TG9hZGVkKCk7CisgICAgaWYgKG93bmVyTm9kZSgpKQorICAgICAgICBvd25l
ck5vZGUoKS0+c2hlZXRMb2FkZWQoKTsKIH0KIAogeG1sRG9jUHRyIFhTTFN0eWxlU2hlZXQ6OmRv
Y3VtZW50KCkKQEAgLTIxNSw3ICsyMTUsNyBAQCB2b2lkIFhTTFN0eWxlU2hlZXQ6OmxvYWRDaGls
ZFNoZWV0cygpCiAKIHZvaWQgWFNMU3R5bGVTaGVldDo6bG9hZENoaWxkU2hlZXQoY29uc3QgU3Ry
aW5nJiBocmVmKQogewotICAgIFJlZlB0cjxYU0xJbXBvcnRSdWxlPiBjaGlsZFJ1bGUgPSBuZXcg
WFNMSW1wb3J0UnVsZSh0aGlzLCBocmVmKTsKKyAgICBSZWZQdHI8WFNMSW1wb3J0UnVsZT4gY2hp
bGRSdWxlID0gWFNMSW1wb3J0UnVsZTo6Y3JlYXRlKHRoaXMsIGhyZWYpOwogICAgIGFwcGVuZChj
aGlsZFJ1bGUpOwogICAgIGNoaWxkUnVsZS0+bG9hZFNoZWV0KCk7CiB9CkluZGV4OiBXZWJDb3Jl
L3htbC9YU0xTdHlsZVNoZWV0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94bWwvWFNMU3R5bGVT
aGVldC5oCShyZXZpc2lvbiAzNDU4NCkKKysrIFdlYkNvcmUveG1sL1hTTFN0eWxlU2hlZXQuaAko
d29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIlN0eWxlU2hlZXQuaCIK
ICNpbmNsdWRlIDxsaWJ4bWwvcGFyc2VyLmg+CiAjaW5jbHVkZSA8bGlieHNsdC90cmFuc2Zvcm0u
aD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
QEAgLTM3LDkgKzM4LDIwIEBAIGNsYXNzIFhTTEltcG9ydFJ1bGU7CiAgICAgCiBjbGFzcyBYU0xT
dHlsZVNoZWV0IDogcHVibGljIFN0eWxlU2hlZXQgewogcHVibGljOgotICAgIFhTTFN0eWxlU2hl
ZXQoTm9kZSogcGFyZW50Tm9kZSwgY29uc3QgU3RyaW5nJiBocmVmID0gU3RyaW5nKCksIGJvb2wg
ZW1iZWRkZWQgPSBmYWxzZSk7Ci0gICAgWFNMU3R5bGVTaGVldChYU0xJbXBvcnRSdWxlKiBwYXJl
bnRJbXBvcnQsIGNvbnN0IFN0cmluZyYgaHJlZiA9IFN0cmluZygpKTsKLSAgICB+WFNMU3R5bGVT
aGVldCgpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFhTTFN0eWxlU2hlZXQ+IGNyZWF0ZShYU0xJ
bXBvcnRSdWxlKiBwYXJlbnRJbXBvcnQsIGNvbnN0IFN0cmluZyYgaHJlZikKKyAgICB7CisgICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgWFNMU3R5bGVTaGVldChwYXJlbnRJbXBvcnQsIGhyZWYp
KTsKKyAgICB9CisgICAgc3RhdGljIFBhc3NSZWZQdHI8WFNMU3R5bGVTaGVldD4gY3JlYXRlKE5v
ZGUqIHBhcmVudE5vZGUsIGNvbnN0IFN0cmluZyYgaHJlZikKKyAgICB7CisgICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgWFNMU3R5bGVTaGVldChwYXJlbnROb2RlLCBocmVmLCBmYWxzZSkpOwor
ICAgIH0KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxYU0xTdHlsZVNoZWV0PiBjcmVhdGVFbWJlZGRl
ZChOb2RlKiBwYXJlbnROb2RlLCBjb25zdCBTdHJpbmcmIGhyZWYpCisgICAgeworICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IFhTTFN0eWxlU2hlZXQocGFyZW50Tm9kZSwgaHJlZiwgdHJ1ZSkp
OworICAgIH0KKworICAgIHZpcnR1YWwgflhTTFN0eWxlU2hlZXQoKTsKICAgICAKICAgICB2aXJ0
dWFsIGJvb2wgaXNYU0xTdHlsZVNoZWV0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCkBAIC02
OSw3ICs4MSwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBtYXJrQXNQcm9jZXNzZWQoKTsKICAgICBi
b29sIHByb2Nlc3NlZCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvY2Vzc2VkOyB9CiAKLXByb3RlY3Rl
ZDoKK3ByaXZhdGU6CisgICAgWFNMU3R5bGVTaGVldChOb2RlKiBwYXJlbnROb2RlLCBjb25zdCBT
dHJpbmcmIGhyZWYsIGJvb2wgZW1iZWRkZWQpOworICAgIFhTTFN0eWxlU2hlZXQoWFNMSW1wb3J0
UnVsZSogcGFyZW50SW1wb3J0LCBjb25zdCBTdHJpbmcmIGhyZWYpOworCiAgICAgRG9jdW1lbnQq
IG1fb3duZXJEb2N1bWVudDsKICAgICB4bWxEb2NQdHIgbV9zdHlsZXNoZWV0RG9jOwogICAgIGJv
b2wgbV9lbWJlZGRlZDsKSW5kZXg6IFdlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3IuY3BwCShyZXZpc2lvbiAzNDU4NCkK
KysrIFdlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDAs
NyArMzAwLDcgQEAgc3RhdGljIGlubGluZSBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gYwogc3Rh
dGljIHhzbHRTdHlsZXNoZWV0UHRyIHhzbHRTdHlsZXNoZWV0UG9pbnRlcihSZWZQdHI8WFNMU3R5
bGVTaGVldD4mIGNhY2hlZFN0eWxlc2hlZXQsIE5vZGUqIHN0eWxlc2hlZXRSb290Tm9kZSkKIHsK
ICAgICBpZiAoIWNhY2hlZFN0eWxlc2hlZXQgJiYgc3R5bGVzaGVldFJvb3ROb2RlKSB7Ci0gICAg
ICAgIGNhY2hlZFN0eWxlc2hlZXQgPSBuZXcgWFNMU3R5bGVTaGVldChzdHlsZXNoZWV0Um9vdE5v
ZGUtPnBhcmVudCgpID8gc3R5bGVzaGVldFJvb3ROb2RlLT5wYXJlbnQoKSA6IHN0eWxlc2hlZXRS
b290Tm9kZSwKKyAgICAgICAgY2FjaGVkU3R5bGVzaGVldCA9IFhTTFN0eWxlU2hlZXQ6OmNyZWF0
ZShzdHlsZXNoZWV0Um9vdE5vZGUtPnBhcmVudCgpID8gc3R5bGVzaGVldFJvb3ROb2RlLT5wYXJl
bnQoKSA6IHN0eWxlc2hlZXRSb290Tm9kZSwKICAgICAgICAgICAgIHN0eWxlc2hlZXRSb290Tm9k
ZS0+ZG9jdW1lbnQoKS0+dXJsKCkuc3RyaW5nKCkpOwogICAgICAgICBjYWNoZWRTdHlsZXNoZWV0
LT5wYXJzZVN0cmluZyhjcmVhdGVNYXJrdXAoc3R5bGVzaGVldFJvb3ROb2RlKSk7CiAgICAgfQpJ
bmRleDogV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9DaGFu
Z2VMb2cJKHJldmlzaW9uIDM0NTkxKQorKysgV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwxMSBAQAorMjAwOC0wNi0xNiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBh
cHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBXZWJWaWV3L1dlYkhUTUxWaWV3Lm1tOgorICAgICAgICAoLVtXZWJIVE1MVmlldyB2YWxp
ZGF0ZVVzZXJJbnRlcmZhY2VJdGVtV2l0aG91dERlbGVnYXRlOl0pOiBVc2UgY3JlYXRlIGluc3Rl
YWQgb2YgbmV3CisgICAgICAgIHRvIGNyZWF0ZSBhIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9u
LgorCiAyMDA4LTA2LTE1ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAg
ICAtIGdpdmUgRnJhbWUgb2JqZWN0IGZ1bmN0aW9ucyBzaG9ydGVyIG5hbWVzOiBzY3JpcHRQcm94
eSgpIC0+IHNjcmlwdCgpLApJbmRleDogV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQkocmV2aXNp
b24gMzQ1ODkpCisrKyBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTIzNDksNyArMjM0OSw5IEBAIFdFQkNPUkVfQ09NTUFORCh5YW5rQW5kU2VsZWN0
KQogICAgICAgICBOU01lbnVJdGVtICptZW51SXRlbSA9IChOU01lbnVJdGVtICopaXRlbTsKICAg
ICAgICAgaWYgKFttZW51SXRlbSBpc0tpbmRPZkNsYXNzOltOU01lbnVJdGVtIGNsYXNzXV0pIHsK
ICAgICAgICAgICAgIEJPT0wgcGFuZWxTaG93aW5nID0gW1tbTlNTcGVsbENoZWNrZXIgc2hhcmVk
U3BlbGxDaGVja2VyXSBzcGVsbGluZ1BhbmVsXSBpc1Zpc2libGVdOwotICAgICAgICAgICAgW21l
bnVJdGVtIHNldFRpdGxlOnBhbmVsU2hvd2luZyA/IFVJX1NUUklORygiSGlkZSBTcGVsbGluZyBh
bmQgR3JhbW1hciIsICJtZW51IGl0ZW0gdGl0bGUiKSA6IFVJX1NUUklORygiU2hvdyBTcGVsbGlu
ZyBhbmQgR3JhbW1hciIsICJtZW51IGl0ZW0gdGl0bGUiKV07CisgICAgICAgICAgICBbbWVudUl0
ZW0gc2V0VGl0bGU6cGFuZWxTaG93aW5nCisgICAgICAgICAgICAgICAgPyBVSV9TVFJJTkcoIkhp
ZGUgU3BlbGxpbmcgYW5kIEdyYW1tYXIiLCAibWVudSBpdGVtIHRpdGxlIikKKyAgICAgICAgICAg
ICAgICA6IFVJX1NUUklORygiU2hvdyBTcGVsbGluZyBhbmQgR3JhbW1hciIsICJtZW51IGl0ZW0g
dGl0bGUiKV07CiAgICAgICAgIH0KICNlbmRpZgogICAgICAgICByZXR1cm4gW3NlbGYgX2NhbkVk
aXRdOwpAQCAtMjM2MSw3ICsyMzYzLDcgQEAgV0VCQ09SRV9DT01NQU5EKHlhbmtBbmRTZWxlY3Qp
CiAgICAgICAgICAgICByZXR1cm4gTk87CiAgICAgICAgIE5TTWVudUl0ZW0gKm1lbnVJdGVtID0g
KE5TTWVudUl0ZW0gKilpdGVtOwogICAgICAgICBpZiAoW21lbnVJdGVtIGlzS2luZE9mQ2xhc3M6
W05TTWVudUl0ZW0gY2xhc3NdXSkgewotICAgICAgICAgICAgUmVmUHRyPENTU1N0eWxlRGVjbGFy
YXRpb24+IHN0eWxlID0gbmV3IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOworICAgICAgICAg
ICAgUmVmUHRyPENTU1N0eWxlRGVjbGFyYXRpb24+IHN0eWxlID0gQ1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb246OmNyZWF0ZSgpOwogICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYzsKICAgICAg
ICAgICAgIHN0eWxlLT5zZXRQcm9wZXJ0eSgiZGlyZWN0aW9uIiwgd3JpdGluZ0RpcmVjdGlvbiA9
PSBOU1dyaXRpbmdEaXJlY3Rpb25MZWZ0VG9SaWdodCA/ICJMVFIiIDogIlJUTCIsIGVjKTsKICAg
ICAgICAgICAgIFttZW51SXRlbSBzZXRTdGF0ZTpmcmFtZS0+ZWRpdG9yKCktPnNlbGVjdGlvbkhh
c1N0eWxlKHN0eWxlLmdldCgpKV07CkBAIC0yMzcyLDExICsyMzc0LDExIEBAIFdFQkNPUkVfQ09N
TUFORCh5YW5rQW5kU2VsZWN0KQogICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKHRvZ2dsZUJh
c2VXcml0aW5nRGlyZWN0aW9uOikpIHsKICAgICAgICAgTlNNZW51SXRlbSAqbWVudUl0ZW0gPSAo
TlNNZW51SXRlbSAqKWl0ZW07CiAgICAgICAgIGlmIChbbWVudUl0ZW0gaXNLaW5kT2ZDbGFzczpb
TlNNZW51SXRlbSBjbGFzc11dKSB7Ci0gICAgICAgICAgICBSZWZQdHI8Q1NTU3R5bGVEZWNsYXJh
dGlvbj4gc3R5bGUgPSBuZXcgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb247CisgICAgICAgICAg
ICBSZWZQdHI8Q1NTU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGUgPSBDU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbjo6Y3JlYXRlKCk7CiAgICAgICAgICAgICBFeGNlcHRpb25Db2RlIGVjOwogICAgICAg
ICAgICAgc3R5bGUtPnNldFByb3BlcnR5KCJkaXJlY3Rpb24iLCAiUlRMIiwgZWMpOwotICAgICAg
ICAgICAgLy8gVGFrZSBjb250cm9sIG9mIHRoZSB0aXRsZSBvZiB0aGUgbWVudSBpdGVtLCBpbnN0
ZWFkIG9mIGp1c3QgY2hlY2tpbmcvdW5jaGVja2luZyBpdCBiZWNhdXNlIG90aGVyd2lzZQotICAg
ICAgICAgICAgLy8gd2UgZG9uJ3Qga25vdyB3aGF0IHRoZSBjaGVjayB3b3VsZCBtZWFuLgorICAg
ICAgICAgICAgLy8gVGFrZSBjb250cm9sIG9mIHRoZSB0aXRsZSBvZiB0aGUgbWVudSBpdGVtIGlu
c3RlYWQgb2YganVzdCBjaGVja2luZy91bmNoZWNraW5nIGl0IGJlY2F1c2UKKyAgICAgICAgICAg
IC8vIGEgY2hlY2sgd291bGQgYmUgYW1iaWd1b3VzLgogICAgICAgICAgICAgW21lbnVJdGVtIHNl
dFRpdGxlOmZyYW1lLT5lZGl0b3IoKS0+c2VsZWN0aW9uSGFzU3R5bGUoc3R5bGUuZ2V0KCkpCiAg
ICAgICAgICAgICAgICAgPyBVSV9TVFJJTkcoIkxlZnQgdG8gUmlnaHQiLCAiTGVmdCB0byBSaWdo
dCBjb250ZXh0IG1lbnUgaXRlbSIpCiAgICAgICAgICAgICAgICAgOiBVSV9TVFJJTkcoIlJpZ2h0
IHRvIExlZnQiLCAiUmlnaHQgdG8gTGVmdCBjb250ZXh0IG1lbnUgaXRlbSIpXTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>