<?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>101483</bug_id>
          
          <creation_ts>2012-11-07 10:02:10 -0800</creation_ts>
          <short_desc>IndexedDB: Replace use of ScriptExecutionContext::Task (Part 1)</short_desc>
          <delta_ts>2012-11-30 13:49:24 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Joshua Bell">jsbell</reporter>
          <assigned_to name="Joshua Bell">jsbell</assigned_to>
          <cc>alecflett</cc>
    
    <cc>dgrogan</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>760810</commentid>
    <comment_count>0</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-11-07 10:02:10 -0800</bug_when>
    <thetext>We use ScriptExecutionContext::Task in IDBTransactionBackendImpl to hold &quot;tasks&quot;, but this pulls a lot of machinery in that we don&apos;t need e.g. ThreadSafeRefCounted, and so forth.

Consider replacing this usage with something else - either a generic closure class, or operation-specific holders (e.g. ObjectStoreStorageOperation, ObjectStoreRetrievalOperation, etc).

The latter is particularly appealing when we consider moving those to the front end as they would encapsulate the asynchronous logic (e.g. for an &quot;add&quot; you need to do at least one &quot;get&quot; to verify that the value is not present, more &quot;gets&quot; if there are &quot;unique&quot; indexes, then several &quot;puts&quot; - all of which may be async)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>761010</commentid>
    <comment_count>1</comment_count>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-11-07 13:22:52 -0800</bug_when>
    <thetext>I believe this is also the last use of ScriptExecutionContext in the backend - so when this is fixed, all references to that should be removed (if anything, that&apos;s kind of a test if this bug is fixed or not)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>778521</commentid>
    <comment_count>2</comment_count>
      <attachid>176608</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-11-28 17:21:22 -0800</bug_when>
    <thetext>Created attachment 176608
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>778529</commentid>
    <comment_count>3</comment_count>
      <attachid>176608</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-11-28 17:26:13 -0800</bug_when>
    <thetext>Comment on attachment 176608
Patch

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

This is what I&apos;m thinking about as a first step. This is hard to read as a unified diff, so try side-by-side...

&gt; Source/WebCore/Modules/indexeddb/IDBCursorBackendImpl.cpp:66
&gt; +class IDBCursorBackendImpl::CursorIterationOperation

A type is defined for each operation. Cursors end up being trickier than most since they have state, unlike store/index operations.

&gt; Source/WebCore/Modules/indexeddb/IDBCursorBackendImpl.cpp:71
&gt; +        return createCallbackTask(&amp;CursorIterationOperation::perform, cursor, key, callbacks);

This would be temporary for the first part of the refactoring - instead of returning an instance of this class, keep returning a ScriptExecutionContext::Task...

&gt; Source/WebCore/Modules/indexeddb/IDBCursorBackendImpl.cpp:75
&gt; +    static void perform(ScriptExecutionContext*, PassRefPtr&lt;IDBCursorBackendImpl&gt; cursor, PassRefPtr&lt;IDBKey&gt; key, PassRefPtr&lt;IDBCallbacks&gt; callbacks)

But move the implementation here - this used to be IDBCursorBackendImpl::continueInternal

&gt; Source/WebCore/Modules/indexeddb/IDBCursorBackendImpl.cpp:166
&gt; +    if (!m_transaction-&gt;scheduleTask(m_taskType, CursorIterationOperation::create(this, key, callbacks)))

Sample call site. This would then remain unchanged even when the operation stopped being a ScriptExecutionContext::Task.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>779211</commentid>
    <comment_count>4</comment_count>
      <attachid>176608</attachid>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2012-11-29 11:18:17 -0800</bug_when>
    <thetext>Comment on attachment 176608
Patch

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

Let me know if I&apos;ve understood the direction or totally missed the boat.

&gt;&gt; Source/WebCore/Modules/indexeddb/IDBCursorBackendImpl.cpp:66
&gt;&gt; +class IDBCursorBackendImpl::CursorIterationOperation
&gt; 
&gt; A type is defined for each operation. Cursors end up being trickier than most since they have state, unlike store/index operations.

Is the idea that there will be an Operation base class that this will derive from?
Operation would have one substantive method, e.g. void perform(void)?

&gt;&gt; Source/WebCore/Modules/indexeddb/IDBCursorBackendImpl.cpp:71
&gt;&gt; +        return createCallbackTask(&amp;CursorIterationOperation::perform, cursor, key, callbacks);
&gt; 
&gt; This would be temporary for the first part of the refactoring - instead of returning an instance of this class, keep returning a ScriptExecutionContext::Task...

When this class derives from Operation, the parameters will be copied to class data members?

&gt;&gt; Source/WebCore/Modules/indexeddb/IDBCursorBackendImpl.cpp:166
&gt;&gt; +    if (!m_transaction-&gt;scheduleTask(m_taskType, CursorIterationOperation::create(this, key, callbacks)))
&gt; 
&gt; Sample call site. This would then remain unchanged even when the operation stopped being a ScriptExecutionContext::Task.

scheduleTask will take a PassRefPtr&lt;Operation&gt; ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>779260</commentid>
    <comment_count>5</comment_count>
      <attachid>176608</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-11-29 11:48:54 -0800</bug_when>
    <thetext>Comment on attachment 176608
Patch

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

&gt;&gt;&gt; Source/WebCore/Modules/indexeddb/IDBCursorBackendImpl.cpp:66
&gt;&gt;&gt; +class IDBCursorBackendImpl::CursorIterationOperation
&gt;&gt; 
&gt;&gt; A type is defined for each operation. Cursors end up being trickier than most since they have state, unlike store/index operations.
&gt; 
&gt; Is the idea that there will be an Operation base class that this will derive from?
&gt; Operation would have one substantive method, e.g. void perform(void)?

Yes, exactly. If/when the backing store becomes asynchronous (to implement caching), the operations would end up with more internal state, callbacks, etc. with perform(void) as the entry point. But while the backing store is synchronous, it can all live in perform(void).

&gt;&gt;&gt; Source/WebCore/Modules/indexeddb/IDBCursorBackendImpl.cpp:71
&gt;&gt;&gt; +        return createCallbackTask(&amp;CursorIterationOperation::perform, cursor, key, callbacks);
&gt;&gt; 
&gt;&gt; This would be temporary for the first part of the refactoring - instead of returning an instance of this class, keep returning a ScriptExecutionContext::Task...
&gt; 
&gt; When this class derives from Operation, the parameters will be copied to class data members?

Exactly.

&gt;&gt;&gt; Source/WebCore/Modules/indexeddb/IDBCursorBackendImpl.cpp:166
&gt;&gt;&gt; +    if (!m_transaction-&gt;scheduleTask(m_taskType, CursorIterationOperation::create(this, key, callbacks)))
&gt;&gt; 
&gt;&gt; Sample call site. This would then remain unchanged even when the operation stopped being a ScriptExecutionContext::Task.
&gt; 
&gt; scheduleTask will take a PassRefPtr&lt;Operation&gt; ?

Correct.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>779264</commentid>
    <comment_count>6</comment_count>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2012-11-29 11:53:50 -0800</bug_when>
    <thetext>Sounds great. LGTM</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>779315</commentid>
    <comment_count>7</comment_count>
      <attachid>176608</attachid>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-11-29 12:26:36 -0800</bug_when>
    <thetext>Comment on attachment 176608
Patch

I&apos;m ambivalent: the functional programmer in me cringes at all the extra classes, but the C++ developer in me appreciates the encapsulation.

so LGTM!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>779620</commentid>
    <comment_count>8</comment_count>
      <attachid>176854</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-11-29 17:15:04 -0800</bug_when>
    <thetext>Created attachment 176854
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>779630</commentid>
    <comment_count>9</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-11-29 17:17:39 -0800</bug_when>
    <thetext>dgrogan@, alecflett@ - please take a look.

One nice thing I realized is that just as today the Task is implicitly called with ScriptExecutionContext* as the first parameter, eventually Operation::perform() can be called with IDBTransactionBackendImpl as the parameter so operations don&apos;t need to carry it with them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>780286</commentid>
    <comment_count>10</comment_count>
      <attachid>176854</attachid>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2012-11-30 12:07:16 -0800</bug_when>
    <thetext>Comment on attachment 176854
Patch

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

LGTM

&gt; Source/WebCore/Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:-256
&gt; -    RefPtr&lt;IDBObjectStoreBackendImpl&gt; objectStore = this;

I&apos;m 95% sure these are unnecessary and not self references to guard against deletion in some weird situation. I&apos;m assuming you convinced yourself of something similar?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>780344</commentid>
    <comment_count>11</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-11-30 13:13:26 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; &gt; Source/WebCore/Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:-256
&gt; &gt; -    RefPtr&lt;IDBObjectStoreBackendImpl&gt; objectStore = this;
&gt; 
&gt; I&apos;m 95% sure these are unnecessary and not self references to guard against deletion in some weird situation. I&apos;m assuming you convinced yourself of something similar?

Yes. I think it was either stylistic or perhaps createCallbackTask() didn&apos;t convert raw pointers to PassRefPtrs at some point, but they were not used consistently.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>780345</commentid>
    <comment_count>12</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-11-30 13:14:03 -0800</bug_when>
    <thetext>tony@ - can you r?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>780359</commentid>
    <comment_count>13</comment_count>
      <attachid>176854</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-11-30 13:25:45 -0800</bug_when>
    <thetext>Comment on attachment 176854
Patch

This seems like an improvement to static callbacks on the implementations, although it is a bit verbose.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>780388</commentid>
    <comment_count>14</comment_count>
      <attachid>176854</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-30 13:49:19 -0800</bug_when>
    <thetext>Comment on attachment 176854
Patch

Clearing flags on attachment: 176854

Committed r136272: &lt;http://trac.webkit.org/changeset/136272&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>780389</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-30 13:49:24 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>176608</attachid>
            <date>2012-11-28 17:21:22 -0800</date>
            <delta_ts>2012-11-29 17:15:03 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-101483-20121128171857.patch</filename>
            <type>text/plain</type>
            <size>12890</size>
            <attacher name="Joshua Bell">jsbell</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM2MDA5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2QxZjc2MGFhMDI4ZGI4
ZDg2ZTZmMjk0NTk4Y2ZlNmIzMTFkNGNmNS4uYTBhOWNkYTI5Y2M5YzAzY2NkM2IwMjI1NGE3YWQ3
ZWI1MzM1NTk1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDEyLTExLTI4ICBKb3No
dWEgQmVsbCAgPGpzYmVsbEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBSZXBs
YWNlIHVzZSBvZiBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDE0ODMKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9m
IHRoZSBjaGFuZ2Ugc3VjaCBhcyBhcHByb2FjaCwgcmF0aW9uYWxlLiBQbGVhc2UgYWRkIHBlci1m
dW5jdGlvbiBkZXNjcmlwdGlvbnMgYmVsb3cgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVz
dHMgKE9PUFMhKS4KKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tl
bmRJbXBsLmNwcDoKKyAgICAgICAgKElEQkN1cnNvckJhY2tlbmRJbXBsOjpDdXJzb3JJdGVyYXRp
b25PcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yQmFja2VuZEltcGw6OkN1
cnNvckl0ZXJhdGlvbk9wZXJhdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkN1
cnNvckJhY2tlbmRJbXBsOjpDdXJzb3JJdGVyYXRpb25PcGVyYXRpb246OnBlcmZvcm0pOgorICAg
ICAgICAoSURCQ3Vyc29yQmFja2VuZEltcGw6OkN1cnNvckFkdmFuY2VPcGVyYXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yQmFja2VuZEltcGw6OkN1cnNvckFkdmFuY2VPcGVyYXRp
b246OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3JCYWNrZW5kSW1wbDo6Q3Vy
c29yQWR2YW5jZU9wZXJhdGlvbjo6cGVyZm9ybSk6CisgICAgICAgIChJREJDdXJzb3JCYWNrZW5k
SW1wbDo6Q3Vyc29yUHJlZmV0Y2hJdGVyYXRpb25PcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6SURCQ3Vyc29yQmFja2VuZEltcGw6OkN1cnNvclByZWZldGNoSXRlcmF0aW9uT3BlcmF0aW9u
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yQmFja2VuZEltcGw6OkN1cnNv
clByZWZldGNoSXRlcmF0aW9uT3BlcmF0aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yQmFja2VuZEltcGw6OmNvbnRpbnVlRnVuY3Rp
b24pOgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yQmFja2VuZEltcGw6OmFkdmFuY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yQmFja2VuZEltcGw6OnByZWZldGNoQ29udGludWUp
OgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmg6Cisg
ICAgICAgIChJREJDdXJzb3JCYWNrZW5kSW1wbCk6CisKIDIwMTItMTEtMjggIEJ5dW5nd29vIExl
ZSAgPGJ3ODAubGVlQHNhbXN1bmcuY29tPgogCiAgICAgICAgIFtFRkxdIFVzZSBtdXRleCBsb2Nr
ZXIgaW4gd2FrZVVwKCkgdG8gZW5zdXJlIHRocmVhZC1zYWZldHkuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAK
aW5kZXggMjIzNTdmOGQ0YTg4MjY5MDUyNDdmNmNiOGUwNzJmN2IyMjU3YmQ4MS4uY2Y0ZjljYmFj
NDFkMWVjZjgyMmQ3ODRmMWUyYzg4NDk0Y2FiZDZjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmNwcApAQCAt
NjMsNTAgKzYzLDExNyBAQCBJREJDdXJzb3JCYWNrZW5kSW1wbDo6fklEQkN1cnNvckJhY2tlbmRJ
bXBsKCkKICAgICBtX29iamVjdFN0b3JlLmNsZWFyKCk7CiB9CiAKLXZvaWQgSURCQ3Vyc29yQmFj
a2VuZEltcGw6OmNvbnRpbnVlRnVuY3Rpb24oUGFzc1JlZlB0cjxJREJLZXk+IHBycEtleSwgUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgRXhjZXB0aW9uQ29kZSYpCitjbGFz
cyBJREJDdXJzb3JCYWNrZW5kSW1wbDo6Q3Vyc29ySXRlcmF0aW9uT3BlcmF0aW9uCiB7Ci0gICAg
SURCX1RSQUNFKCJJREJDdXJzb3JCYWNrZW5kSW1wbDo6Y29udGludWUiKTsKLSAgICBSZWZQdHI8
SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MgPSBwcnBDYWxsYmFja3M7CitwdWJsaWM6CisgICAgc3Rh
dGljIFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gY3JlYXRlKFBhc3NS
ZWZQdHI8SURCQ3Vyc29yQmFja2VuZEltcGw+IGN1cnNvciwgUGFzc1JlZlB0cjxJREJLZXk+IGtl
eSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKKyAgICB7CisgICAgICAgIHJl
dHVybiBjcmVhdGVDYWxsYmFja1Rhc2soJkN1cnNvckl0ZXJhdGlvbk9wZXJhdGlvbjo6cGVyZm9y
bSwgY3Vyc29yLCBrZXksIGNhbGxiYWNrcyk7CisgICAgfQogCi0gICAgaWYgKCFtX3RyYW5zYWN0
aW9uLT5zY2hlZHVsZVRhc2sobV90YXNrVHlwZSwgY3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJDdXJz
b3JCYWNrZW5kSW1wbDo6Y29udGludWVGdW5jdGlvbkludGVybmFsLCB0aGlzLCBwcnBLZXksIGNh
bGxiYWNrcykpKQotICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6
Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJREJfQUJPUlRfRVJSKSk7Ci19Citwcml2YXRl
OgorICAgIHN0YXRpYyB2b2lkIHBlcmZvcm0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NS
ZWZQdHI8SURCQ3Vyc29yQmFja2VuZEltcGw+IGN1cnNvciwgUGFzc1JlZlB0cjxJREJLZXk+IGtl
eSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKKyAgICB7CisgICAgICAgIElE
Ql9UUkFDRSgiQ3Vyc29ySXRlcmF0aW9uT3BlcmF0aW9uOjpwZXJmb3JtIik7CisgICAgICAgIGlm
ICghY3Vyc29yLT5tX2N1cnNvciB8fCAhY3Vyc29yLT5tX2N1cnNvci0+Y29udGludWVGdW5jdGlv
bihrZXkuZ2V0KCkpKSB7CisgICAgICAgICAgICBjdXJzb3ItPm1fY3Vyc29yID0gMDsKKyAgICAg
ICAgICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKHN0YXRpY19jYXN0PFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZSo+KDApKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBjYWxs
YmFja3MtPm9uU3VjY2VzcyhjdXJzb3ItPmtleSgpLCBjdXJzb3ItPnByaW1hcnlLZXkoKSwgY3Vy
c29yLT52YWx1ZSgpKTsKKyAgICB9Cit9OwogCi12b2lkIElEQkN1cnNvckJhY2tlbmRJbXBsOjph
ZHZhbmNlKHVuc2lnbmVkIGxvbmcgY291bnQsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBD
YWxsYmFja3MsIEV4Y2VwdGlvbkNvZGUmKQorY2xhc3MgSURCQ3Vyc29yQmFja2VuZEltcGw6OkN1
cnNvckFkdmFuY2VPcGVyYXRpb24KIHsKLSAgICBJREJfVFJBQ0UoIklEQkN1cnNvckJhY2tlbmRJ
bXBsOjphZHZhbmNlIik7Ci0gICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJw
Q2FsbGJhY2tzOworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQ6OlRhc2s+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbXBsPiBj
dXJzb3IsIHVuc2lnbmVkIGxvbmcgY291bnQsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxs
YmFja3MpCisgICAgeworICAgICAgICByZXR1cm4gY3JlYXRlQ2FsbGJhY2tUYXNrKCZDdXJzb3JB
ZHZhbmNlT3BlcmF0aW9uOjpwZXJmb3JtLCBjdXJzb3IsIGNvdW50LCBjYWxsYmFja3MpOworICAg
IH0KIAotICAgIGlmICghbV90cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKGNyZWF0ZUNhbGxiYWNr
VGFzaygmSURCQ3Vyc29yQmFja2VuZEltcGw6OmFkdmFuY2VJbnRlcm5hbCwgdGhpcywgY291bnQs
IGNhbGxiYWNrcykpKQotICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJv
cjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJREJfQUJPUlRfRVJSKSk7Ci19Citwcml2
YXRlOgorICAgIHN0YXRpYyB2b2lkIHBlcmZvcm0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBh
c3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEltcGw+IGN1cnNvciwgdW5zaWduZWQgbG9uZyBjb3Vu
dCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKKyAgICB7CisgICAgICAgIElE
Ql9UUkFDRSgiQ3Vyc29yQWR2YW5jZU9wZXJhdGlvbjo6cGVyZm9ybSIpOworICAgICAgICBpZiAo
IWN1cnNvci0+bV9jdXJzb3IgfHwgIWN1cnNvci0+bV9jdXJzb3ItPmFkdmFuY2UoY291bnQpKSB7
CisgICAgICAgICAgICBjdXJzb3ItPm1fY3Vyc29yID0gMDsKKyAgICAgICAgICAgIGNhbGxiYWNr
cy0+b25TdWNjZXNzKHN0YXRpY19jYXN0PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSo+KDApKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBjYWxsYmFja3MtPm9uU3VjY2Vz
cyhjdXJzb3ItPmtleSgpLCBjdXJzb3ItPnByaW1hcnlLZXkoKSwgY3Vyc29yLT52YWx1ZSgpKTsK
KyAgICB9Cit9OwogCi12b2lkIElEQkN1cnNvckJhY2tlbmRJbXBsOjphZHZhbmNlSW50ZXJuYWwo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEltcGw+
IHBycEN1cnNvciwgdW5zaWduZWQgbG9uZyBjb3VudCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
IGNhbGxiYWNrcykKK2NsYXNzIElEQkN1cnNvckJhY2tlbmRJbXBsOjpDdXJzb3JQcmVmZXRjaEl0
ZXJhdGlvbk9wZXJhdGlvbgogewotICAgIElEQl9UUkFDRSgiSURCQ3Vyc29yQmFja2VuZEltcGw6
OmFkdmFuY2VJbnRlcm5hbCIpOwotICAgIFJlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW1wbD4gY3Vy
c29yID0gcHJwQ3Vyc29yOwotICAgIGlmICghY3Vyc29yLT5tX2N1cnNvciB8fCAhY3Vyc29yLT5t
X2N1cnNvci0+YWR2YW5jZShjb3VudCkpIHsKLSAgICAgICAgY3Vyc29yLT5tX2N1cnNvciA9IDA7
Ci0gICAgICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKHN0YXRpY19jYXN0PFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZSo+KDApKTsKLSAgICAgICAgcmV0dXJuOworcHVibGljOgorICAgIHN0YXRpYyBQYXNz
T3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IGNyZWF0ZShQYXNzUmVmUHRyPElE
QkN1cnNvckJhY2tlbmRJbXBsPiBjdXJzb3IsIGludCBudW1iZXJUb0ZldGNoLCBQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUNh
bGxiYWNrVGFzaygmQ3Vyc29yUHJlZmV0Y2hJdGVyYXRpb25PcGVyYXRpb246OnBlcmZvcm0sIGN1
cnNvciwgbnVtYmVyVG9GZXRjaCwgY2FsbGJhY2tzKTsKICAgICB9CiAKLSAgICBjYWxsYmFja3Mt
Pm9uU3VjY2VzcyhjdXJzb3ItPmtleSgpLCBjdXJzb3ItPnByaW1hcnlLZXkoKSwgY3Vyc29yLT52
YWx1ZSgpKTsKLX0KK3ByaXZhdGU6CisgICAgc3RhdGljIHZvaWQgcGVyZm9ybShTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW1wbD4gcHJwQ3Vyc29y
LCBpbnQgbnVtYmVyVG9GZXRjaCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykK
KyAgICB7CisgICAgICAgIElEQl9UUkFDRSgiQ3Vyc29yUHJlZmV0Y2hJdGVyYXRpb25PcGVyYXRp
b246OnBlcmZvcm0iKTsKKyAgICAgICAgUmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbXBsPiBjdXJz
b3IgPSBwcnBDdXJzb3I7CisKKyAgICAgICAgVmVjdG9yPFJlZlB0cjxJREJLZXk+ID4gZm91bmRL
ZXlzOworICAgICAgICBWZWN0b3I8UmVmUHRyPElEQktleT4gPiBmb3VuZFByaW1hcnlLZXlzOwor
ICAgICAgICBWZWN0b3I8UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gPiBmb3VuZFZhbHVl
czsKKworICAgICAgICBpZiAoY3Vyc29yLT5tX2N1cnNvcikKKyAgICAgICAgICAgIGN1cnNvci0+
bV9zYXZlZEN1cnNvciA9IGN1cnNvci0+bV9jdXJzb3ItPmNsb25lKCk7CisKKyAgICAgICAgY29u
c3Qgc2l6ZV90IG1heFNpemVFc3RpbWF0ZSA9IDEwICogMTAyNCAqIDEwMjQ7CisgICAgICAgIHNp
emVfdCBzaXplRXN0aW1hdGUgPSAwOworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVt
YmVyVG9GZXRjaDsgKytpKSB7CisgICAgICAgICAgICBpZiAoIWN1cnNvci0+bV9jdXJzb3IgfHwg
IWN1cnNvci0+bV9jdXJzb3ItPmNvbnRpbnVlRnVuY3Rpb24oMCkpIHsKKyAgICAgICAgICAgICAg
ICBjdXJzb3ItPm1fY3Vyc29yID0gMDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgZm91bmRLZXlzLmFwcGVuZChjdXJzb3ItPm1fY3Vyc29yLT5r
ZXkoKSk7CisgICAgICAgICAgICBmb3VuZFByaW1hcnlLZXlzLmFwcGVuZChjdXJzb3ItPm1fY3Vy
c29yLT5wcmltYXJ5S2V5KCkpOworCisgICAgICAgICAgICBpZiAoY3Vyc29yLT5tX2N1cnNvclR5
cGUgIT0gSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlDdXJzb3IpCisgICAgICAg
ICAgICAgICAgZm91bmRWYWx1ZXMuYXBwZW5kKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRl
RnJvbVdpcmUoY3Vyc29yLT5tX2N1cnNvci0+dmFsdWUoKSkpOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIGZvdW5kVmFsdWVzLmFwcGVuZChTZXJpYWxpemVkU2NyaXB0VmFsdWU6
OmNyZWF0ZSgpKTsKKworICAgICAgICAgICAgc2l6ZUVzdGltYXRlICs9IGN1cnNvci0+bV9jdXJz
b3ItPmtleSgpLT5zaXplRXN0aW1hdGUoKTsKKyAgICAgICAgICAgIHNpemVFc3RpbWF0ZSArPSBj
dXJzb3ItPm1fY3Vyc29yLT5wcmltYXJ5S2V5KCktPnNpemVFc3RpbWF0ZSgpOworICAgICAgICAg
ICAgaWYgKGN1cnNvci0+bV9jdXJzb3JUeXBlICE9IElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6
OkluZGV4S2V5Q3Vyc29yKQorICAgICAgICAgICAgICAgIHNpemVFc3RpbWF0ZSArPSBjdXJzb3It
Pm1fY3Vyc29yLT52YWx1ZSgpLmxlbmd0aCgpICogc2l6ZW9mKFVDaGFyKTsKKyAgICAgICAgICAg
IGlmIChzaXplRXN0aW1hdGUgPiBtYXhTaXplRXN0aW1hdGUpCisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KIAotdm9pZCBJREJDdXJzb3JCYWNrZW5kSW1wbDo6Y29udGludWVGdW5j
dGlvbkludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkN1cnNv
ckJhY2tlbmRJbXBsPiBwcnBDdXJzb3IsIFBhc3NSZWZQdHI8SURCS2V5PiBwcnBLZXksIFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi17Ci0gICAgSURCX1RSQUNFKCJJREJDdXJz
b3JCYWNrZW5kSW1wbDo6Y29udGludWVJbnRlcm5hbCIpOwotICAgIFJlZlB0cjxJREJDdXJzb3JC
YWNrZW5kSW1wbD4gY3Vyc29yID0gcHJwQ3Vyc29yOwotICAgIFJlZlB0cjxJREJLZXk+IGtleSA9
IHBycEtleTsKKyAgICAgICAgaWYgKCFmb3VuZEtleXMuc2l6ZSgpKSB7CisgICAgICAgICAgICBj
YWxsYmFja3MtPm9uU3VjY2VzcyhzdGF0aWNfY2FzdDxTZXJpYWxpemVkU2NyaXB0VmFsdWUqPigw
KSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KIAotICAgIGlmICghY3Vyc29yLT5t
X2N1cnNvciB8fCAhY3Vyc29yLT5tX2N1cnNvci0+Y29udGludWVGdW5jdGlvbihrZXkuZ2V0KCkp
KSB7Ci0gICAgICAgIGN1cnNvci0+bV9jdXJzb3IgPSAwOwotICAgICAgICBjYWxsYmFja3MtPm9u
U3VjY2VzcyhzdGF0aWNfY2FzdDxTZXJpYWxpemVkU2NyaXB0VmFsdWUqPigwKSk7Ci0gICAgICAg
IHJldHVybjsKKyAgICAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3NXaXRoUHJlZmV0Y2goZm91bmRL
ZXlzLCBmb3VuZFByaW1hcnlLZXlzLCBmb3VuZFZhbHVlcyk7CiAgICAgfQorfTsKKwordm9pZCBJ
REJDdXJzb3JCYWNrZW5kSW1wbDo6Y29udGludWVGdW5jdGlvbihQYXNzUmVmUHRyPElEQktleT4g
a2V5LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBFeGNlcHRpb25Db2RlJikK
K3sKKyAgICBJREJfVFJBQ0UoIklEQkN1cnNvckJhY2tlbmRJbXBsOjpjb250aW51ZSIpOworICAg
IGlmICghbV90cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKG1fdGFza1R5cGUsIEN1cnNvckl0ZXJh
dGlvbk9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIGtleSwgY2FsbGJhY2tzKSkpCisgICAgICAgIGNh
bGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNl
cHRpb246OklEQl9BQk9SVF9FUlIpKTsKK30KKwordm9pZCBJREJDdXJzb3JCYWNrZW5kSW1wbDo6
YWR2YW5jZSh1bnNpZ25lZCBsb25nIGNvdW50LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJw
Q2FsbGJhY2tzLCBFeGNlcHRpb25Db2RlJikKK3sKKyAgICBJREJfVFJBQ0UoIklEQkN1cnNvckJh
Y2tlbmRJbXBsOjphZHZhbmNlIik7CisgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tz
ID0gcHJwQ2FsbGJhY2tzOwogCi0gICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoY3Vyc29yLT5rZXko
KSwgY3Vyc29yLT5wcmltYXJ5S2V5KCksIGN1cnNvci0+dmFsdWUoKSk7CisgICAgaWYgKCFtX3Ry
YW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soQ3Vyc29yQWR2YW5jZU9wZXJhdGlvbjo6Y3JlYXRlKHRo
aXMsIGNvdW50LCBjYWxsYmFja3MpKSkKKyAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRh
dGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SURCX0FCT1JUX0VSUikp
OwogfQogCiB2b2lkIElEQkN1cnNvckJhY2tlbmRJbXBsOjpkZWxldGVGdW5jdGlvbihQYXNzUmVm
UHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBFeGNlcHRpb25Db2RlJikKQEAgLTEyNiw1
NiArMTkzLDEwIEBAIHZvaWQgSURCQ3Vyc29yQmFja2VuZEltcGw6OnByZWZldGNoQ29udGludWUo
aW50IG51bWJlclRvRmV0Y2gsIFBhc3NSZWZQdHI8SURCQ2FsCiB7CiAgICAgSURCX1RSQUNFKCJJ
REJDdXJzb3JCYWNrZW5kSW1wbDo6cHJlZmV0Y2hDb250aW51ZSIpOwogICAgIFJlZlB0cjxJREJD
YWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKLSAgICBpZiAoIW1fdHJhbnNhY3Rp
b24tPnNjaGVkdWxlVGFzayhtX3Rhc2tUeXBlLCBjcmVhdGVDYWxsYmFja1Rhc2soJklEQkN1cnNv
ckJhY2tlbmRJbXBsOjpwcmVmZXRjaENvbnRpbnVlSW50ZXJuYWwsIHRoaXMsIG51bWJlclRvRmV0
Y2gsIGNhbGxiYWNrcykpKQorICAgIGlmICghbV90cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKG1f
dGFza1R5cGUsIEN1cnNvclByZWZldGNoSXRlcmF0aW9uT3BlcmF0aW9uOjpjcmVhdGUodGhpcywg
bnVtYmVyVG9GZXRjaCwgY2FsbGJhY2tzKSkpCiAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJ
REJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OklEQl9BQk9SVF9F
UlIpKTsKIH0KIAotdm9pZCBJREJDdXJzb3JCYWNrZW5kSW1wbDo6cHJlZmV0Y2hDb250aW51ZUlu
dGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkN1cnNvckJhY2tl
bmRJbXBsPiBwcnBDdXJzb3IsIGludCBudW1iZXJUb0ZldGNoLCBQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4gY2FsbGJhY2tzKQotewotICAgIElEQl9UUkFDRSgiSURCQ3Vyc29yQmFja2VuZEltcGw6
OnByZWZldGNoQ29udGludWVJbnRlcm5hbCIpOwotICAgIFJlZlB0cjxJREJDdXJzb3JCYWNrZW5k
SW1wbD4gY3Vyc29yID0gcHJwQ3Vyc29yOwotCi0gICAgVmVjdG9yPFJlZlB0cjxJREJLZXk+ID4g
Zm91bmRLZXlzOwotICAgIFZlY3RvcjxSZWZQdHI8SURCS2V5PiA+IGZvdW5kUHJpbWFyeUtleXM7
Ci0gICAgVmVjdG9yPFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+ID4gZm91bmRWYWx1ZXM7
Ci0KLSAgICBpZiAoY3Vyc29yLT5tX2N1cnNvcikKLSAgICAgICAgY3Vyc29yLT5tX3NhdmVkQ3Vy
c29yID0gY3Vyc29yLT5tX2N1cnNvci0+Y2xvbmUoKTsKLQotICAgIGNvbnN0IHNpemVfdCBtYXhT
aXplRXN0aW1hdGUgPSAxMCAqIDEwMjQgKiAxMDI0OwotICAgIHNpemVfdCBzaXplRXN0aW1hdGUg
PSAwOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1iZXJUb0ZldGNoOyArK2kpIHsKLSAg
ICAgICAgaWYgKCFjdXJzb3ItPm1fY3Vyc29yIHx8ICFjdXJzb3ItPm1fY3Vyc29yLT5jb250aW51
ZUZ1bmN0aW9uKDApKSB7Ci0gICAgICAgICAgICBjdXJzb3ItPm1fY3Vyc29yID0gMDsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgZm91bmRLZXlzLmFwcGVuZChjdXJz
b3ItPm1fY3Vyc29yLT5rZXkoKSk7Ci0gICAgICAgIGZvdW5kUHJpbWFyeUtleXMuYXBwZW5kKGN1
cnNvci0+bV9jdXJzb3ItPnByaW1hcnlLZXkoKSk7Ci0KLSAgICAgICAgaWYgKGN1cnNvci0+bV9j
dXJzb3JUeXBlICE9IElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6OkluZGV4S2V5Q3Vyc29yKQot
ICAgICAgICAgICAgZm91bmRWYWx1ZXMuYXBwZW5kKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3Jl
YXRlRnJvbVdpcmUoY3Vyc29yLT5tX2N1cnNvci0+dmFsdWUoKSkpOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBmb3VuZFZhbHVlcy5hcHBlbmQoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVh
dGUoKSk7Ci0KLSAgICAgICAgc2l6ZUVzdGltYXRlICs9IGN1cnNvci0+bV9jdXJzb3ItPmtleSgp
LT5zaXplRXN0aW1hdGUoKTsKLSAgICAgICAgc2l6ZUVzdGltYXRlICs9IGN1cnNvci0+bV9jdXJz
b3ItPnByaW1hcnlLZXkoKS0+c2l6ZUVzdGltYXRlKCk7Ci0gICAgICAgIGlmIChjdXJzb3ItPm1f
Y3Vyc29yVHlwZSAhPSBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEtleUN1cnNvcikK
LSAgICAgICAgICAgIHNpemVFc3RpbWF0ZSArPSBjdXJzb3ItPm1fY3Vyc29yLT52YWx1ZSgpLmxl
bmd0aCgpICogc2l6ZW9mKFVDaGFyKTsKLQotICAgICAgICBpZiAoc2l6ZUVzdGltYXRlID4gbWF4
U2l6ZUVzdGltYXRlKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgaWYgKCFmb3Vu
ZEtleXMuc2l6ZSgpKSB7Ci0gICAgICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKHN0YXRpY19jYXN0
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSo+KDApKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzV2l0aFByZWZldGNoKGZvdW5kS2V5cywgZm91bmRQcmlt
YXJ5S2V5cywgZm91bmRWYWx1ZXMpOwotfQotCiB2b2lkIElEQkN1cnNvckJhY2tlbmRJbXBsOjpw
cmVmZXRjaFJlc2V0KGludCB1c2VkUHJlZmV0Y2hlcywgaW50IHVudXNlZFByZWZldGNoZXMpCiB7
CiAgICAgSURCX1RSQUNFKCJJREJDdXJzb3JCYWNrZW5kSW1wbDo6cHJlZmV0Y2hSZXNldCIpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFj
a2VuZEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJh
Y2tlbmRJbXBsLmgKaW5kZXggYjhiNzdlYzE2Y2YzZDIyMDA1OTRhMzNiYjA1N2UzZjM5ZWFiYjRk
Yy4uMGM2MDAzNDM4ZmFhNDM2NmEzNmEzZDhhZWE2YTFmMDE4ZDBiMjUxMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1w
bC5oCkBAIC03Myw5ICs3Myw5IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSURCQ3Vyc29yQmFj
a2VuZEltcGwoUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4sIEN1cnNvclR5cGUs
IElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZTo6VGFza1R5cGUsIElEQlRyYW5zYWN0aW9u
QmFja2VuZEltcGwqLCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKik7CiAKLSAgICBzdGF0aWMg
dm9pZCBhZHZhbmNlSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8
SURCQ3Vyc29yQmFja2VuZEltcGw+LCB1bnNpZ25lZCBsb25nLCBQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4pOwotICAgIHN0YXRpYyB2b2lkIGNvbnRpbnVlRnVuY3Rpb25JbnRlcm5hbChTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW1wbD4sIFBhc3NS
ZWZQdHI8SURCS2V5PiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKLSAgICBzdGF0aWMgdm9p
ZCBwcmVmZXRjaENvbnRpbnVlSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NS
ZWZQdHI8SURCQ3Vyc29yQmFja2VuZEltcGw+LCBpbnQgbnVtYmVyVG9GZXRjaCwgUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+KTsKKyAgICBjbGFzcyBDdXJzb3JJdGVyYXRpb25PcGVyYXRpb247Cisg
ICAgY2xhc3MgQ3Vyc29yQWR2YW5jZU9wZXJhdGlvbjsKKyAgICBjbGFzcyBDdXJzb3JQcmVmZXRj
aEl0ZXJhdGlvbk9wZXJhdGlvbjsKIAogICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNv
cj4gbV9jdXJzb3I7CiAgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBtX3NhdmVk
Q3Vyc29yOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>176854</attachid>
            <date>2012-11-29 17:15:04 -0800</date>
            <delta_ts>2012-11-30 13:49:19 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-101483-20121129171237.patch</filename>
            <type>text/plain</type>
            <size>73901</size>
            <attacher name="Joshua Bell">jsbell</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM2MTI0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmQ5MmYwZTRlOGUwZmRm
YTFmYTE5ZmNiOGU4MDgzZjdjNDk2NjBhNi4uOTg5ZDg1MzIyNzAyZDIyZGJhN2U1YTZkNGJmZjUy
ZDIwZDczOGYwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzMSBAQAorMjAxMi0xMS0yOSAgSm9z
aHVhIEJlbGwgIDxqc2JlbGxAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEluZGV4ZWREQjogUmVw
bGFjZSB1c2Ugb2YgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzayAoUGFydCAxKQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAxNDgzCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIElEQiBiYWNrIGVu
ZCAod2hpY2ggcnVucyBvbiBhIHNpbmdsZSB0aHJlYWQpIG1ha2VzIHVzZSBvZiBTY3JpcHRFeGVj
dXRpb25Db250ZXh0J3MKKyAgICAgICAgVGFzayBhbmQgZmFjaWxpdGllcyBmb3IgY3Jvc3MtdGFz
ayBwb3N0aW5nIHdpdGggY2FsbGJhY2tzLCBhbmQgcmVxdWlyZXMgZGVjb3JhdGluZyB2YXJpb3Vz
CisgICAgICAgIElEQiBjbGFzc2VzIHdpdGggIlRocmVhZFNhZmUiIHdoZW4gdGhleSBhcmUgbm90
LiBNb3ZlIHRvd2FyZHMgZW5jYXBzdWxhdGluZyB0aGUgdGFza3MKKyAgICAgICAgaW4gIk9wZXJh
dGlvbiIgY2xhc3NlcyB3aGljaCBhcmUgSURCLW9wZXJhdGlvbiBzcGVjaWZpYy4KKworICAgICAg
ICBQYXJ0IDEgKHRoaXMgcGF0Y2gpIHJldGFpbnMgdGhlIHVzZSBvZiBTY3JpcHRFeGVjdXRpb25D
b250ZXh0OjpUYXNrIGJ1dCB3cmFwcyB0aGUgY3JlYXRpb24KKyAgICAgICAgYW5kIHRoZSBjYWxs
YmFjayBmdW5jdGlvbiBpbiBhbiBPcGVyYXRpb24gY2xhc3Mgd2hpY2ggd2lsbCBiZSBmbGVzaGVk
IG91dCBpbiBsYXRlciBwYXRjaGVzLgorICAgICAgICBBcyBhbiBhc2lkZSwgYSBsaXR0bGUgYml0
IG9mIFJlZlB0ciBjaHVybiBpcyBlbGltaW5hdGVkLCBhbmQgSURCX1RSQUNFIHNwcmlua2xlZCBp
bi4KKworICAgICAgICBObyBuZXcgdGVzdHMgLSBqdXN0IGEgcmVmYWN0b3IuCisKKyAgICAgICAg
KiBNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChJ
REJDdXJzb3JCYWNrZW5kSW1wbDo6Q3Vyc29ySXRlcmF0aW9uT3BlcmF0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQkN1cnNvckJhY2tlbmRJbXBsOjpDdXJzb3JJdGVyYXRpb25PcGVyYXRpb246
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKElEQkN1cnNvckJhY2tlbmRJ
bXBsOjpDdXJzb3JBZHZhbmNlT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNv
ckJhY2tlbmRJbXBsOjpDdXJzb3JBZHZhbmNlT3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAo
SURCQ3Vyc29yQmFja2VuZEltcGw6OkN1cnNvclByZWZldGNoSXRlcmF0aW9uT3BlcmF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNvckJhY2tlbmRJbXBsOjpDdXJzb3JQcmVmZXRjaEl0
ZXJhdGlvbk9wZXJhdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNvckJh
Y2tlbmRJbXBsOjpjb250aW51ZUZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNv
ckJhY2tlbmRJbXBsOjphZHZhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNvckJhY2tl
bmRJbXBsOjpDdXJzb3JBZHZhbmNlT3BlcmF0aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQkN1cnNvckJhY2tlbmRJbXBsOjpDdXJzb3JJdGVyYXRpb25PcGVyYXRpb246OnBlcmZv
cm0pOgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yQmFja2VuZEltcGw6OnByZWZldGNoQ29u
dGludWUpOgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yQmFja2VuZEltcGw6OkN1cnNvclBy
ZWZldGNoSXRlcmF0aW9uT3BlcmF0aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5oOgorICAgICAgICAoSURCQ3Vyc29yQmFja2Vu
ZEltcGwpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZElt
cGwuY3BwOgorICAgICAgICAoSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Q3JlYXRlT2JqZWN0U3Rv
cmVPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6
Q3JlYXRlT2JqZWN0U3RvcmVPcGVyYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKElEQkRhdGFiYXNlQmFja2VuZEltcGw6OkRlbGV0ZU9iamVjdFN0b3JlT3BlcmF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OkRlbGV0ZU9i
amVjdFN0b3JlT3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoSURCRGF0YWJhc2VCYWNrZW5k
SW1wbDo6VmVyc2lvbkNoYW5nZU9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRh
YmFzZUJhY2tlbmRJbXBsOjpWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAg
ICAoSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Q3JlYXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpDcmVhdGVPYmpl
Y3RTdG9yZUFib3J0T3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbDo6RGVsZXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpEZWxldGVPYmplY3RTdG9yZUFib3J0T3BlcmF0
aW9uOjpjcmVhdGUpOgorICAgICAgICAoSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6VmVyc2lvbkNo
YW5nZUFib3J0T3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2Vu
ZEltcGw6OlZlcnNpb25DaGFuZ2VBYm9ydE9wZXJhdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNyZWF0ZU9iamVjdFN0b3JlKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OkNyZWF0ZU9iamVjdFN0b3JlT3Bl
cmF0aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZElt
cGw6OmRlbGV0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFj
a2VuZEltcGw6OkRlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uOjpwZXJmb3JtKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OlZlcnNpb25DaGFuZ2VPcGVyYXRpb246
OnBlcmZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6cnVu
SW50VmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFi
YXNlQmFja2VuZEltcGw6OkNyZWF0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb246OnBlcmZvcm0p
OgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6RGVsZXRlT2JqZWN0
U3RvcmVBYm9ydE9wZXJhdGlvbjo6cGVyZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRh
YmFzZUJhY2tlbmRJbXBsOjpWZXJzaW9uQ2hhbmdlQWJvcnRPcGVyYXRpb246OnBlcmZvcm0pOgor
ICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaDoKKyAg
ICAgICAgKElEQkRhdGFiYXNlQmFja2VuZEltcGwpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhl
ZGRiL0lEQkluZGV4QmFja2VuZEltcGwuY3BwOgorICAgICAgICAoSURCSW5kZXhCYWNrZW5kSW1w
bDo6T3BlbkluZGV4Q3Vyc29yT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkluZGV4
QmFja2VuZEltcGw6Ok9wZW5JbmRleEN1cnNvck9wZXJhdGlvbjo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoSURCSW5kZXhCYWNrZW5kSW1wbDo6SW5kZXhDb3VudE9wZXJh
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleEJhY2tlbmRJbXBsOjpJbmRleENvdW50
T3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoSURCSW5kZXhCYWNrZW5kSW1wbDo6SW5kZXhS
ZWZlcmVuY2VkVmFsdWVSZXRyaWV2YWxPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURC
SW5kZXhCYWNrZW5kSW1wbDo6SW5kZXhSZWZlcmVuY2VkVmFsdWVSZXRyaWV2YWxPcGVyYXRpb246
OmNyZWF0ZSk6CisgICAgICAgIChJREJJbmRleEJhY2tlbmRJbXBsOjpJbmRleFZhbHVlUmV0cmll
dmFsT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkluZGV4QmFja2VuZEltcGw6Oklu
ZGV4VmFsdWVSZXRyaWV2YWxPcGVyYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJJbmRleEJhY2tlbmRJbXBsOjpPcGVuSW5kZXhDdXJzb3JPcGVyYXRpb246OnBlcmZvcm0pOgor
ICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXhCYWNrZW5kSW1wbDo6b3BlbkN1cnNvcik6CisgICAg
ICAgIChXZWJDb3JlOjpJREJJbmRleEJhY2tlbmRJbXBsOjpvcGVuS2V5Q3Vyc29yKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQkluZGV4QmFja2VuZEltcGw6OkluZGV4Q291bnRPcGVyYXRpb246OnBl
cmZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXhCYWNrZW5kSW1wbDo6Y291bnQpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXhCYWNrZW5kSW1wbDo6SW5kZXhSZWZlcmVuY2VkVmFs
dWVSZXRyaWV2YWxPcGVyYXRpb246OnBlcmZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5k
ZXhCYWNrZW5kSW1wbDo6SW5kZXhWYWx1ZVJldHJpZXZhbE9wZXJhdGlvbjo6cGVyZm9ybSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJJbmRleEJhY2tlbmRJbXBsOjpnZXQpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCSW5kZXhCYWNrZW5kSW1wbDo6Z2V0S2V5KToKKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmg6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRl
eEJhY2tlbmRJbXBsOjptZXRhZGF0YSk6CisgICAgICAgIChJREJJbmRleEJhY2tlbmRJbXBsKToK
KyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNw
cDoKKyAgICAgICAgKElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Ok9iamVjdFN0b3JlUmV0cmll
dmFsT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw6Ok9iamVjdFN0b3JlUmV0cmlldmFsT3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpPYmplY3RTdG9yZVN0
b3JhZ2VPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbDo6T2JqZWN0U3RvcmVTdG9yYWdlT3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6T2JqZWN0U3RvcmVJbmRleGVzUmVhZHlPcGVyYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6T2JqZWN0U3Rv
cmVJbmRleGVzUmVhZHlPcGVyYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsOjpPYmplY3RTdG9yZURlbGV0aW9uT3BlcmF0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Ok9iamVjdFN0b3JlRGVsZXRpb25PcGVy
YXRpb246OmNyZWF0ZSk6CisgICAgICAgIChJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpPYmpl
Y3RTdG9yZUNsZWFyT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw6Ok9iamVjdFN0b3JlQ2xlYXJPcGVyYXRpb246OmNyZWF0ZSk6CisgICAgICAg
IChJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpDcmVhdGVJbmRleE9wZXJhdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpDcmVhdGVJbmRleE9wZXJh
dGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OkRlbGV0
ZUluZGV4T3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw6OkRlbGV0ZUluZGV4T3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbDo6T3Blbk9iamVjdFN0b3JlQ3Vyc29yT3BlcmF0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Ok9wZW5PYmplY3RTdG9yZUN1
cnNvck9wZXJhdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKElEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw6Ok9iamVjdFN0b3JlQ291bnRPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6T2JqZWN0U3RvcmVDb3VudE9wZXJhdGlvbjo6Y3JlYXRlKToK
KyAgICAgICAgKElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OkNyZWF0ZUluZGV4QWJvcnRPcGVy
YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Q3Jl
YXRlSW5kZXhBYm9ydE9wZXJhdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKElEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw6OkRlbGV0ZUluZGV4QWJvcnRPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6RGVsZXRlSW5kZXhBYm9ydE9wZXJhdGlvbjo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Omdl
dCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpPYmplY3RT
dG9yZVJldHJpZXZhbE9wZXJhdGlvbjo6cGVyZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXQpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbDo6c2V0SW5kZXhlc1JlYWR5KToKKyAgICAgICAgKFdlYkNvcmU6OklE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw6Ok9iamVjdFN0b3JlSW5kZXhlc1JlYWR5T3BlcmF0aW9u
OjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6
Ok9iamVjdFN0b3JlU3RvcmFnZU9wZXJhdGlvbjo6cGVyZm9ybSk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxldGVGdW5jdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpPYmplY3RTdG9yZURlbGV0aW9uT3Bl
cmF0aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw6Ok9iamVjdFN0b3JlQ2xlYXJPcGVyYXRpb246OnBlcmZvcm0pOgorICAgICAgICAoV2ViQ29y
ZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y3JlYXRlSW5kZXgpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Q3JlYXRlSW5kZXhPcGVyYXRpb246OnBl
cmZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZGVs
ZXRlSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6
RGVsZXRlSW5kZXhPcGVyYXRpb246OnBlcmZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6b3BlbkN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsOjpPcGVuT2JqZWN0U3RvcmVDdXJzb3JPcGVyYXRpb246OnBl
cmZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y291
bnQpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6T2JqZWN0
U3RvcmVDb3VudE9wZXJhdGlvbjo6cGVyZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsOjpDcmVhdGVJbmRleEFib3J0T3BlcmF0aW9uOjpwZXJmb3JtKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OkRlbGV0ZUluZGV4
QWJvcnRPcGVyYXRpb246OnBlcmZvcm0pOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGwuaDoKKyAgICAgICAgKElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGwpOgorCiAyMDEyLTExLTI5ICBBbmR5IFNoYXcgIDxhbmR5LnNoYXdAZGlnaWEuY29tPgog
CiAgICAgICAgIFtRdF0gSW1wbGVtZW50IHN1cHBvcnQgZm9yIENvY29hIGJhc2VkIE5QQVBJIHBs
dWdpbnMgb24gTWFjCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAKaW5kZXggMjIzNTdmOGQ0YTg4MjY5MDUyNDdm
NmNiOGUwNzJmN2IyMjU3YmQ4MS4uMmNjMWI4ZmQxMzI0YWI4MGVkNGI2ODhiM2ZlZTVmNjg0MmFm
ZTk5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vy
c29yQmFja2VuZEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkN1cnNvckJhY2tlbmRJbXBsLmNwcApAQCAtNDIsNiArNDIsMzYgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCitjbGFzcyBJREJDdXJzb3JCYWNrZW5kSW1wbDo6Q3Vyc29ySXRlcmF0aW9u
T3BlcmF0aW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxTY3JpcHRFeGVjdXRp
b25Db250ZXh0OjpUYXNrPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW1wbD4g
Y3Vyc29yLCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4g
Y2FsbGJhY2tzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUNhbGxiYWNrVGFzaygmQ3Vy
c29ySXRlcmF0aW9uT3BlcmF0aW9uOjpwZXJmb3JtLCBjdXJzb3IsIGtleSwgY2FsbGJhY2tzKTsK
KyAgICB9Citwcml2YXRlOgorICAgIHN0YXRpYyB2b2lkIHBlcmZvcm0oU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElE
QktleT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7Cit9OworCitjbGFzcyBJREJDdXJzb3JC
YWNrZW5kSW1wbDo6Q3Vyc29yQWR2YW5jZU9wZXJhdGlvbiB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gY3JlYXRlKFBhc3NSZWZQ
dHI8SURCQ3Vyc29yQmFja2VuZEltcGw+IGN1cnNvciwgdW5zaWduZWQgbG9uZyBjb3VudCwgUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKKyAgICB7CisgICAgICAgIHJldHVybiBj
cmVhdGVDYWxsYmFja1Rhc2soJkN1cnNvckFkdmFuY2VPcGVyYXRpb246OnBlcmZvcm0sIGN1cnNv
ciwgY291bnQsIGNhbGxiYWNrcyk7CisgICAgfQorcHJpdmF0ZToKKyAgICBzdGF0aWMgdm9pZCBw
ZXJmb3JtKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkN1cnNvckJhY2tl
bmRJbXBsPiwgdW5zaWduZWQgbG9uZyBjb3VudCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsK
K307CisKK2NsYXNzIElEQkN1cnNvckJhY2tlbmRJbXBsOjpDdXJzb3JQcmVmZXRjaEl0ZXJhdGlv
bk9wZXJhdGlvbiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0
aW9uQ29udGV4dDo6VGFzaz4gY3JlYXRlKFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEltcGw+
IGN1cnNvciwgaW50IG51bWJlclRvRmV0Y2gsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxs
YmFja3MpCisgICAgeworICAgICAgICByZXR1cm4gY3JlYXRlQ2FsbGJhY2tUYXNrKCZDdXJzb3JQ
cmVmZXRjaEl0ZXJhdGlvbk9wZXJhdGlvbjo6cGVyZm9ybSwgY3Vyc29yLCBudW1iZXJUb0ZldGNo
LCBjYWxsYmFja3MpOworICAgIH0KK3ByaXZhdGU6CisgICAgc3RhdGljIHZvaWQgcGVyZm9ybShT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW1wbD4s
IGludCBudW1iZXJUb0ZldGNoLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOworfTsKKwogSURC
Q3Vyc29yQmFja2VuZEltcGw6OklEQkN1cnNvckJhY2tlbmRJbXBsKFBhc3NSZWZQdHI8SURCQmFj
a2luZ1N0b3JlOjpDdXJzb3I+IGN1cnNvciwgQ3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlIHRhc2tUeXBlLCBJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbiwgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbCogb2Jq
ZWN0U3RvcmUpCiAgICAgOiBtX2N1cnNvcihjdXJzb3IpCiAgICAgLCBtX3Rhc2tUeXBlKHRhc2tU
eXBlKQpAQCAtNjMsMTIgKzkzLDEyIEBAIElEQkN1cnNvckJhY2tlbmRJbXBsOjp+SURCQ3Vyc29y
QmFja2VuZEltcGwoKQogICAgIG1fb2JqZWN0U3RvcmUuY2xlYXIoKTsKIH0KIAotdm9pZCBJREJD
dXJzb3JCYWNrZW5kSW1wbDo6Y29udGludWVGdW5jdGlvbihQYXNzUmVmUHRyPElEQktleT4gcHJw
S2V5LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBFeGNlcHRpb25Db2Rl
JikKKwordm9pZCBJREJDdXJzb3JCYWNrZW5kSW1wbDo6Y29udGludWVGdW5jdGlvbihQYXNzUmVm
UHRyPElEQktleT4ga2V5LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBF
eGNlcHRpb25Db2RlJikKIHsKICAgICBJREJfVFJBQ0UoIklEQkN1cnNvckJhY2tlbmRJbXBsOjpj
b250aW51ZSIpOwogICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxi
YWNrczsKLQotICAgIGlmICghbV90cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKG1fdGFza1R5cGUs
IGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCQ3Vyc29yQmFja2VuZEltcGw6OmNvbnRpbnVlRnVuY3Rp
b25JbnRlcm5hbCwgdGhpcywgcHJwS2V5LCBjYWxsYmFja3MpKSkKKyAgICBpZiAoIW1fdHJhbnNh
Y3Rpb24tPnNjaGVkdWxlVGFzayhtX3Rhc2tUeXBlLCBDdXJzb3JJdGVyYXRpb25PcGVyYXRpb246
OmNyZWF0ZSh0aGlzLCBrZXksIGNhbGxiYWNrcykpKQogICAgICAgICBjYWxsYmFja3MtPm9uRXJy
b3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJREJfQUJP
UlRfRVJSKSk7CiB9CiAKQEAgLTc3LDEzICsxMDcsMTMgQEAgdm9pZCBJREJDdXJzb3JCYWNrZW5k
SW1wbDo6YWR2YW5jZSh1bnNpZ25lZCBsb25nIGNvdW50LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4KICAgICBJREJfVFJBQ0UoIklEQkN1cnNvckJhY2tlbmRJbXBsOjphZHZhbmNlIik7CiAgICAg
UmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOwogCi0gICAgaWYg
KCFtX3RyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJDdXJz
b3JCYWNrZW5kSW1wbDo6YWR2YW5jZUludGVybmFsLCB0aGlzLCBjb3VudCwgY2FsbGJhY2tzKSkp
CisgICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soQ3Vyc29yQWR2YW5jZU9wZXJh
dGlvbjo6Y3JlYXRlKHRoaXMsIGNvdW50LCBjYWxsYmFja3MpKSkKICAgICAgICAgY2FsbGJhY2tz
LT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
SURCX0FCT1JUX0VSUikpOwogfQogCi12b2lkIElEQkN1cnNvckJhY2tlbmRJbXBsOjphZHZhbmNl
SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFj
a2VuZEltcGw+IHBycEN1cnNvciwgdW5zaWduZWQgbG9uZyBjb3VudCwgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+IGNhbGxiYWNrcykKK3ZvaWQgSURCQ3Vyc29yQmFja2VuZEltcGw6OkN1cnNvckFk
dmFuY2VPcGVyYXRpb246OnBlcmZvcm0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQ
dHI8SURCQ3Vyc29yQmFja2VuZEltcGw+IHBycEN1cnNvciwgdW5zaWduZWQgbG9uZyBjb3VudCwg
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKIHsKLSAgICBJREJfVFJBQ0UoIklE
QkN1cnNvckJhY2tlbmRJbXBsOjphZHZhbmNlSW50ZXJuYWwiKTsKKyAgICBJREJfVFJBQ0UoIkN1
cnNvckFkdmFuY2VPcGVyYXRpb24iKTsKICAgICBSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEltcGw+
IGN1cnNvciA9IHBycEN1cnNvcjsKICAgICBpZiAoIWN1cnNvci0+bV9jdXJzb3IgfHwgIWN1cnNv
ci0+bV9jdXJzb3ItPmFkdmFuY2UoY291bnQpKSB7CiAgICAgICAgIGN1cnNvci0+bV9jdXJzb3Ig
PSAwOwpAQCAtOTQsMTIgKzEyNCw5IEBAIHZvaWQgSURCQ3Vyc29yQmFja2VuZEltcGw6OmFkdmFu
Y2VJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJCiAgICAgY2Fs
bGJhY2tzLT5vblN1Y2Nlc3MoY3Vyc29yLT5rZXkoKSwgY3Vyc29yLT5wcmltYXJ5S2V5KCksIGN1
cnNvci0+dmFsdWUoKSk7CiB9CiAKLXZvaWQgSURCQ3Vyc29yQmFja2VuZEltcGw6OmNvbnRpbnVl
RnVuY3Rpb25JbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJD
dXJzb3JCYWNrZW5kSW1wbD4gcHJwQ3Vyc29yLCBQYXNzUmVmUHRyPElEQktleT4gcHJwS2V5LCBQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQordm9pZCBJREJDdXJzb3JCYWNrZW5k
SW1wbDo6Q3Vyc29ySXRlcmF0aW9uT3BlcmF0aW9uOjpwZXJmb3JtKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBQYXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbXBsPiBjdXJzb3IsIFBhc3NSZWZQ
dHI8SURCS2V5PiBrZXksIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCiB7Ci0g
ICAgSURCX1RSQUNFKCJJREJDdXJzb3JCYWNrZW5kSW1wbDo6Y29udGludWVJbnRlcm5hbCIpOwot
ICAgIFJlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW1wbD4gY3Vyc29yID0gcHJwQ3Vyc29yOwotICAg
IFJlZlB0cjxJREJLZXk+IGtleSA9IHBycEtleTsKLQorICAgIElEQl9UUkFDRSgiQ3Vyc29ySXRl
cmF0aW9uT3BlcmF0aW9uIik7CiAgICAgaWYgKCFjdXJzb3ItPm1fY3Vyc29yIHx8ICFjdXJzb3It
Pm1fY3Vyc29yLT5jb250aW51ZUZ1bmN0aW9uKGtleS5nZXQoKSkpIHsKICAgICAgICAgY3Vyc29y
LT5tX2N1cnNvciA9IDA7CiAgICAgICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKHN0YXRpY19jYXN0
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSo+KDApKTsKQEAgLTEyNiwxMyArMTUzLDEzIEBAIHZvaWQg
SURCQ3Vyc29yQmFja2VuZEltcGw6OnByZWZldGNoQ29udGludWUoaW50IG51bWJlclRvRmV0Y2gs
IFBhc3NSZWZQdHI8SURCQ2FsCiB7CiAgICAgSURCX1RSQUNFKCJJREJDdXJzb3JCYWNrZW5kSW1w
bDo6cHJlZmV0Y2hDb250aW51ZSIpOwogICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNr
cyA9IHBycENhbGxiYWNrczsKLSAgICBpZiAoIW1fdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayht
X3Rhc2tUeXBlLCBjcmVhdGVDYWxsYmFja1Rhc2soJklEQkN1cnNvckJhY2tlbmRJbXBsOjpwcmVm
ZXRjaENvbnRpbnVlSW50ZXJuYWwsIHRoaXMsIG51bWJlclRvRmV0Y2gsIGNhbGxiYWNrcykpKQor
ICAgIGlmICghbV90cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKG1fdGFza1R5cGUsIEN1cnNvclBy
ZWZldGNoSXRlcmF0aW9uT3BlcmF0aW9uOjpjcmVhdGUodGhpcywgbnVtYmVyVG9GZXRjaCwgY2Fs
bGJhY2tzKSkpCiAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpj
cmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OklEQl9BQk9SVF9FUlIpKTsKIH0KIAotdm9pZCBJ
REJDdXJzb3JCYWNrZW5kSW1wbDo6cHJlZmV0Y2hDb250aW51ZUludGVybmFsKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbXBsPiBwcnBDdXJzb3Is
IGludCBudW1iZXJUb0ZldGNoLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQor
dm9pZCBJREJDdXJzb3JCYWNrZW5kSW1wbDo6Q3Vyc29yUHJlZmV0Y2hJdGVyYXRpb25PcGVyYXRp
b246OnBlcmZvcm0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCQ3Vyc29y
QmFja2VuZEltcGw+IHBycEN1cnNvciwgaW50IG51bWJlclRvRmV0Y2gsIFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPiBjYWxsYmFja3MpCiB7Ci0gICAgSURCX1RSQUNFKCJJREJDdXJzb3JCYWNrZW5k
SW1wbDo6cHJlZmV0Y2hDb250aW51ZUludGVybmFsIik7CisgICAgSURCX1RSQUNFKCJDdXJzb3JQ
cmVmZXRjaEl0ZXJhdGlvbk9wZXJhdGlvbiIpOwogICAgIFJlZlB0cjxJREJDdXJzb3JCYWNrZW5k
SW1wbD4gY3Vyc29yID0gcHJwQ3Vyc29yOwogCiAgICAgVmVjdG9yPFJlZlB0cjxJREJLZXk+ID4g
Zm91bmRLZXlzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCQ3Vyc29yQmFja2VuZEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkN1cnNvckJhY2tlbmRJbXBsLmgKaW5kZXggYjhiNzdlYzE2Y2YzZDIyMDA1OTRhMzNiYjA1
N2UzZjM5ZWFiYjRkYy4uMGM2MDAzNDM4ZmFhNDM2NmEzNmEzZDhhZWE2YTFmMDE4ZDBiMjUxMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFj
a2VuZEltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJz
b3JCYWNrZW5kSW1wbC5oCkBAIC03Myw5ICs3Myw5IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAg
SURCQ3Vyc29yQmFja2VuZEltcGwoUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4s
IEN1cnNvclR5cGUsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZTo6VGFza1R5cGUsIElE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGwqLCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKik7CiAK
LSAgICBzdGF0aWMgdm9pZCBhZHZhbmNlSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEltcGw+LCB1bnNpZ25lZCBsb25nLCBQYXNzUmVm
UHRyPElEQkNhbGxiYWNrcz4pOwotICAgIHN0YXRpYyB2b2lkIGNvbnRpbnVlRnVuY3Rpb25JbnRl
cm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5k
SW1wbD4sIFBhc3NSZWZQdHI8SURCS2V5PiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKLSAg
ICBzdGF0aWMgdm9pZCBwcmVmZXRjaENvbnRpbnVlSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEltcGw+LCBpbnQgbnVtYmVyVG9GZXRj
aCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKKyAgICBjbGFzcyBDdXJzb3JJdGVyYXRpb25P
cGVyYXRpb247CisgICAgY2xhc3MgQ3Vyc29yQWR2YW5jZU9wZXJhdGlvbjsKKyAgICBjbGFzcyBD
dXJzb3JQcmVmZXRjaEl0ZXJhdGlvbk9wZXJhdGlvbjsKIAogICAgIFJlZlB0cjxJREJCYWNraW5n
U3RvcmU6OkN1cnNvcj4gbV9jdXJzb3I7CiAgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vy
c29yPiBtX3NhdmVkQ3Vyc29yOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcAppbmRleCAyY2JmOWIzYzgx
YmJmMTA3YTk1YjdlOWJjMjZiOWU4ZGYxODUwODA5Li4zZGQ5ZmY4MDVmYmVlODI3YjAwMDg3ZTBm
NWE4YmUyMmQ0MGJkYmI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcApAQCAtMzMsMTEgKzMzLDcz
IEBACiAjaW5jbHVkZSAiSURCRGF0YWJhc2VFeGNlcHRpb24uaCIKICNpbmNsdWRlICJJREJGYWN0
b3J5QmFja2VuZEltcGwuaCIKICNpbmNsdWRlICJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmgi
CisjaW5jbHVkZSAiSURCVHJhY2luZy5oIgogI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGwuaCIKICNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Q3JlYXRlT2Jq
ZWN0U3RvcmVPcGVyYXRpb24geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFj
a2VuZEltcGw+IGRhdGFiYXNlLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+
IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5z
YWN0aW9uKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUNhbGxiYWNrVGFzaygmQ3JlYXRl
T2JqZWN0U3RvcmVPcGVyYXRpb246OnBlcmZvcm0sIGRhdGFiYXNlLCBvYmplY3RTdG9yZSwgdHJh
bnNhY3Rpb24pOworICAgIH0KK3ByaXZhdGU6CisgICAgc3RhdGljIHZvaWQgcGVyZm9ybShTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiwg
UGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsPik7Cit9OworCitjbGFzcyBJREJEYXRhYmFzZUJhY2tlbmRJbXBs
OjpEZWxldGVPYmplY3RTdG9yZU9wZXJhdGlvbiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NP
d25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gY3JlYXRlKFBhc3NSZWZQdHI8SURC
RGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2UsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbD4gdHJhbnNhY3Rpb24pCisgICAgeworICAgICAgICByZXR1cm4gY3JlYXRlQ2FsbGJhY2tU
YXNrKCZEZWxldGVPYmplY3RTdG9yZU9wZXJhdGlvbjo6cGVyZm9ybSwgZGF0YWJhc2UsIG9iamVj
dFN0b3JlLCB0cmFuc2FjdGlvbik7CisgICAgfQorcHJpdmF0ZToKKyAgICBzdGF0aWMgdm9pZCBw
ZXJmb3JtKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFj
a2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVm
UHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+KTsKK307CisKK2NsYXNzIElEQkRhdGFiYXNl
QmFja2VuZEltcGw6OlZlcnNpb25DaGFuZ2VPcGVyYXRpb24geworcHVibGljOgorICAgIHN0YXRp
YyBQYXNzT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IGNyZWF0ZShQYXNzUmVm
UHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlLCBpbnQ2NF90IHZlcnNpb24sIFBh
c3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VD
YWxsYmFja3M+IGRhdGFiYXNlQ2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGw+IHRyYW5zYWN0aW9uKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUNhbGxi
YWNrVGFzaygmVmVyc2lvbkNoYW5nZU9wZXJhdGlvbjo6cGVyZm9ybSwgZGF0YWJhc2UsIHZlcnNp
b24sIGNhbGxiYWNrcywgZGF0YWJhc2VDYWxsYmFja3MsIHRyYW5zYWN0aW9uKTsKKyAgICB9Citw
cml2YXRlOgorICAgIHN0YXRpYyB2b2lkIHBlcmZvcm0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4sIGludDY0X3QgdmVyc2lvbiwgUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiwg
UGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPik7Cit9OworCitjbGFzcyBJREJE
YXRhYmFzZUJhY2tlbmRJbXBsOjpDcmVhdGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNr
PiBjcmVhdGUoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwgUGFz
c1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBjcmVhdGVDYWxsYmFja1Rhc2soJkNyZWF0ZU9iamVjdFN0b3JlQWJvcnRP
cGVyYXRpb246OnBlcmZvcm0sIGRhdGFiYXNlLCBvYmplY3RTdG9yZSk7CisgICAgfQorcHJpdmF0
ZToKKyAgICBzdGF0aWMgdm9pZCBwZXJmb3JtKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNz
UmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw+KTsKK307CisKK2NsYXNzIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OkRlbGV0
ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb24geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3du
UHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkRh
dGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw+IG9iamVjdFN0b3JlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUNhbGxi
YWNrVGFzaygmRGVsZXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbjo6cGVyZm9ybSwgZGF0YWJh
c2UsIG9iamVjdFN0b3JlKTsKKyAgICB9Citwcml2YXRlOgorICAgIHN0YXRpYyB2b2lkIHBlcmZv
cm0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5k
SW1wbD4sIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4pOworfTsKKworY2xh
c3MgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6VmVyc2lvbkNoYW5nZUFib3J0T3BlcmF0aW9uIHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpU
YXNrPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwg
Y29uc3QgU3RyaW5nJiBwcmV2aW91c1ZlcnNpb24sIGludDY0X3QgcHJldmlvdXNJbnRWZXJzaW9u
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUNhbGxiYWNrVGFzaygmVmVyc2lvbkNoYW5n
ZUFib3J0T3BlcmF0aW9uOjpwZXJmb3JtLCBkYXRhYmFzZSwgcHJldmlvdXNWZXJzaW9uLCBwcmV2
aW91c0ludFZlcnNpb24pOworICAgIH0KK3ByaXZhdGU6CisgICAgc3RhdGljIHZvaWQgcGVyZm9y
bShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsPiwgY29uc3QgU3RyaW5nJiBwcmV2aW91c1ZlcnNpb24sIGludDY0X3QgcHJldmlvdXNJbnRW
ZXJzaW9uKTsKK307CisKKwogY2xhc3MgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6UGVuZGluZ09w
ZW5DYWxsIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc093blB0cjxQZW5kaW5nT3BlbkNhbGw+
IGNyZWF0ZShQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPElE
QkRhdGFiYXNlQ2FsbGJhY2tzPiBkYXRhYmFzZUNhbGxiYWNrcykKQEAgLTE2MiwxMCArMjI0LDcg
QEAgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IElEQkRhdGFiYXNl
QmFja2VuZEltcGw6OmNyZWF0ZU9iamVjdFMKICAgICBBU1NFUlQoaWQgPiBtX21ldGFkYXRhLm1h
eE9iamVjdFN0b3JlSWQpOwogICAgIG1fbWV0YWRhdGEubWF4T2JqZWN0U3RvcmVJZCA9IGlkOwog
Ci0gICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlID0gdGhpczsKLSAg
ICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soCi0gICAgICAgICAgICBjcmVhdGVDYWxs
YmFja1Rhc2soJklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNyZWF0ZU9iamVjdFN0b3JlSW50ZXJu
YWwsIGRhdGFiYXNlLCBvYmplY3RTdG9yZSwgdHJhbnNhY3Rpb24pLAotICAgICAgICAgICAgY3Jl
YXRlQ2FsbGJhY2tUYXNrKCZJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpyZW1vdmVPYmplY3RTdG9y
ZUZyb21NYXAsIGRhdGFiYXNlLCBvYmplY3RTdG9yZSkpKSB7CisgICAgaWYgKCF0cmFuc2FjdGlv
bi0+c2NoZWR1bGVUYXNrKENyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uOjpjcmVhdGUodGhpcywg
b2JqZWN0U3RvcmUsIHRyYW5zYWN0aW9uKSwgQ3JlYXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlv
bjo6Y3JlYXRlKHRoaXMsIG9iamVjdFN0b3JlKSkpIHsKICAgICAgICAgZWMgPSBJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJSOwogICAgICAgICByZXR1cm4gMDsK
ICAgICB9CkBAIC0xNzQsOCArMjMzLDkgQEAgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tl
bmRJbnRlcmZhY2U+IElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNyZWF0ZU9iamVjdFMKICAgICBy
ZXR1cm4gb2JqZWN0U3RvcmUucmVsZWFzZSgpOwogfQogCi12b2lkIElEQkRhdGFiYXNlQmFja2Vu
ZEltcGw6OmNyZWF0ZU9iamVjdFN0b3JlSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2UsIFBhc3NSZWZQdHI8
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24pCit2b2lkIElEQkRhdGFiYXNlQmFja2Vu
ZEltcGw6OkNyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uOjpwZXJmb3JtKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlLCBQ
YXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVm
UHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uKQogeworICAgIElEQl9U
UkFDRSgiQ3JlYXRlT2JqZWN0U3RvcmVPcGVyYXRpb24iKTsKICAgICBpZiAoIWRhdGFiYXNlLT5t
X2JhY2tpbmdTdG9yZS0+Y3JlYXRlT2JqZWN0U3RvcmUodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9y
ZVRyYW5zYWN0aW9uKCksIGRhdGFiYXNlLT5pZCgpLCBvYmplY3RTdG9yZS0+aWQoKSwgb2JqZWN0
U3RvcmUtPm5hbWUoKSwgb2JqZWN0U3RvcmUtPmtleVBhdGgoKSwgb2JqZWN0U3RvcmUtPmF1dG9J
bmNyZW1lbnQoKSkpIHsKICAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KCk7CiAgICAgICAgIHJl
dHVybjsKQEAgLTE5MSwyNyArMjUxLDI2IEBAIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6
ZGVsZXRlT2JqZWN0U3RvcmUoaW50NjRfdCBpZCwgSURCVHJhbnNhY3Rpb25CYWNrZW5kCiB7CiAg
ICAgQVNTRVJUKG1fb2JqZWN0U3RvcmVzLmNvbnRhaW5zKGlkKSk7CiAKLSAgICBSZWZQdHI8SURC
RGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2UgPSB0aGlzOwogICAgIFJlZlB0cjxJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSA9IG1fb2JqZWN0U3RvcmVzLmdldChpZCk7
CiAgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uID0gSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6ZnJvbSh0cmFuc2FjdGlvblB0cik7CiAgICAgQVNTRVJU
KHRyYW5zYWN0aW9uLT5tb2RlKCkgPT0gSURCVHJhbnNhY3Rpb246OlZFUlNJT05fQ0hBTkdFKTsK
IAotICAgIGlmICghdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzaygKLSAgICAgICAgICAgIGNyZWF0
ZUNhbGxiYWNrVGFzaygmSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6ZGVsZXRlT2JqZWN0U3RvcmVJ
bnRlcm5hbCwgZGF0YWJhc2UsIG9iamVjdFN0b3JlLCB0cmFuc2FjdGlvbiksCi0gICAgICAgICAg
ICBjcmVhdGVDYWxsYmFja1Rhc2soJklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmFkZE9iamVjdFN0
b3JlVG9NYXAsIGRhdGFiYXNlLCBvYmplY3RTdG9yZSkpKSB7CisgICAgaWYgKCF0cmFuc2FjdGlv
bi0+c2NoZWR1bGVUYXNrKERlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uOjpjcmVhdGUodGhpcywg
b2JqZWN0U3RvcmUsIHRyYW5zYWN0aW9uKSwgRGVsZXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlv
bjo6Y3JlYXRlKHRoaXMsIG9iamVjdFN0b3JlKSkpIHsKICAgICAgICAgZWMgPSBJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJSOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgIG1fb2JqZWN0U3RvcmVzLnJlbW92ZShpZCk7CiB9CiAKLXZvaWQgSURCRGF0YWJh
c2VCYWNrZW5kSW1wbDo6ZGVsZXRlT2JqZWN0U3RvcmVJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwgUGFz
c1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0
cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbikKK3ZvaWQgSURCRGF0YWJh
c2VCYWNrZW5kSW1wbDo6RGVsZXRlT2JqZWN0U3RvcmVPcGVyYXRpb246OnBlcmZvcm0oU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0
YWJhc2UsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUs
IFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24pCiB7Cisg
ICAgSURCX1RSQUNFKCJEZWxldGVPYmplY3RTdG9yZU9wZXJhdGlvbiIpOwogICAgIGRhdGFiYXNl
LT5tX2JhY2tpbmdTdG9yZS0+ZGVsZXRlT2JqZWN0U3RvcmUodHJhbnNhY3Rpb24tPmJhY2tpbmdT
dG9yZVRyYW5zYWN0aW9uKCksIGRhdGFiYXNlLT5pZCgpLCBvYmplY3RTdG9yZS0+aWQoKSk7CiB9
CiAKLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6c2V0SW50VmVyc2lvbkludGVybmFsKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+
IGRhdGFiYXNlLCBpbnQ2NF90IHZlcnNpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBD
YWxsYmFja3MsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IGRhdGFiYXNlQ2FsbGJh
Y2tzLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uKQor
dm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uOjpwZXJm
b3JtKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2Vu
ZEltcGw+IGRhdGFiYXNlLCBpbnQ2NF90IHZlcnNpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiBwcnBDYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IGRhdGFiYXNl
Q2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0
aW9uKQogeworICAgIElEQl9UUkFDRSgiVmVyc2lvbkNoYW5nZU9wZXJhdGlvbiIpOwogICAgIFJl
ZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyhwcnBDYWxsYmFja3MpOwogICAgIGludDY0X3Qg
ZGF0YWJhc2VJZCA9IGRhdGFiYXNlLT5pZCgpOwogICAgIGludDY0X3Qgb2xkVmVyc2lvbiA9IGRh
dGFiYXNlLT5tX21ldGFkYXRhLmludFZlcnNpb247CkBAIC0zODUsMTAgKzQ0NCw3IEBAIHZvaWQg
SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6cnVuSW50VmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKGlu
dDY0X3QgcmVxdWVzdGVkVmVyCiAgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVy
ZmFjZT4gdHJhbnNhY3Rpb25JbnRlcmZhY2UgPSB0cmFuc2FjdGlvbihvYmplY3RTdG9yZUlkcywg
SURCVHJhbnNhY3Rpb246OlZFUlNJT05fQ0hBTkdFKTsKICAgICBSZWZQdHI8SURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpm
cm9tKHRyYW5zYWN0aW9uSW50ZXJmYWNlLmdldCgpKTsKIAotICAgIFJlZlB0cjxJREJEYXRhYmFz
ZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSA9IHRoaXM7Ci0gICAgT3duUHRyPFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQ6OlRhc2s+IGludFZlcnNpb25UYXNrID0gY3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJE
YXRhYmFzZUJhY2tlbmRJbXBsOjpzZXRJbnRWZXJzaW9uSW50ZXJuYWwsIGRhdGFiYXNlLCByZXF1
ZXN0ZWRWZXJzaW9uLCBjYWxsYmFja3MsIGRhdGFiYXNlQ2FsbGJhY2tzLCB0cmFuc2FjdGlvbik7
Ci0gICAgT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IHJlc2V0VmVyc2lvbk9u
QWJvcnRUYXNrID0gY3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpy
ZXNldFZlcnNpb24sIGRhdGFiYXNlLCBtX21ldGFkYXRhLnZlcnNpb24sIG1fbWV0YWRhdGEuaW50
VmVyc2lvbik7Ci0gICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKGludFZlcnNpb25U
YXNrLnJlbGVhc2UoKSwgcmVzZXRWZXJzaW9uT25BYm9ydFRhc2sucmVsZWFzZSgpKSkgeworICAg
IGlmICghdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uOjpj
cmVhdGUodGhpcywgcmVxdWVzdGVkVmVyc2lvbiwgY2FsbGJhY2tzLCBkYXRhYmFzZUNhbGxiYWNr
cywgdHJhbnNhY3Rpb24pLCBWZXJzaW9uQ2hhbmdlQWJvcnRPcGVyYXRpb246OmNyZWF0ZSh0aGlz
LCBtX21ldGFkYXRhLnZlcnNpb24sIG1fbWV0YWRhdGEuaW50VmVyc2lvbikpKSB7CiAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KICAgICBBU1NFUlQoIW1fcGVuZGluZ1NlY29u
ZEhhbGZPcGVuV2l0aFZlcnNpb24pOwpAQCAtNTA4LDIxICs1NjQsMjAgQEAgdm9pZCBJREJEYXRh
YmFzZUJhY2tlbmRJbXBsOjpsb2FkT2JqZWN0U3RvcmVzKCkKICAgICAgICAgbV9vYmplY3RTdG9y
ZXMuc2V0KG9iamVjdFN0b3Jlc1tpXS5pZCwgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y3Jl
YXRlKHRoaXMsIG9iamVjdFN0b3Jlc1tpXSkpOwogfQogCi12b2lkIElEQkRhdGFiYXNlQmFja2Vu
ZEltcGw6OnJlbW92ZU9iamVjdFN0b3JlRnJvbU1hcChTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwg
UGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwgUGFzc1JlZlB0cjxJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBwcnBPYmplY3RTdG9yZSkKK3ZvaWQgSURCRGF0YWJh
c2VCYWNrZW5kSW1wbDo6Q3JlYXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbjo6cGVyZm9ybShT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBs
PiBkYXRhYmFzZSwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RT
dG9yZSkKIHsKLSAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3Rv
cmUgPSBwcnBPYmplY3RTdG9yZTsKICAgICBBU1NFUlQoZGF0YWJhc2UtPm1fb2JqZWN0U3RvcmVz
LmNvbnRhaW5zKG9iamVjdFN0b3JlLT5pZCgpKSk7CiAgICAgZGF0YWJhc2UtPm1fb2JqZWN0U3Rv
cmVzLnJlbW92ZShvYmplY3RTdG9yZS0+aWQoKSk7CiB9CiAKLXZvaWQgSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbDo6YWRkT2JqZWN0U3RvcmVUb01hcChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFz
c1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwgUGFzc1JlZlB0cjxJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSkKK3ZvaWQgSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbDo6RGVsZXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbjo6cGVyZm9ybShTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRh
YmFzZSwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBwcnBPYmplY3RTdG9y
ZSkKIHsKLSAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmVQ
dHIgPSBvYmplY3RTdG9yZTsKLSAgICBBU1NFUlQoIWRhdGFiYXNlLT5tX29iamVjdFN0b3Jlcy5j
b250YWlucyhvYmplY3RTdG9yZVB0ci0+aWQoKSkpOwotICAgIGRhdGFiYXNlLT5tX29iamVjdFN0
b3Jlcy5zZXQob2JqZWN0U3RvcmVQdHItPmlkKCksIG9iamVjdFN0b3JlUHRyKTsKKyAgICBSZWZQ
dHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUgPSBwcnBPYmplY3RTdG9y
ZTsKKyAgICBBU1NFUlQoIWRhdGFiYXNlLT5tX29iamVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RT
dG9yZS0+aWQoKSkpOworICAgIGRhdGFiYXNlLT5tX29iamVjdFN0b3Jlcy5zZXQob2JqZWN0U3Rv
cmUtPmlkKCksIG9iamVjdFN0b3JlKTsKIH0KIAotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBs
OjpyZXNldFZlcnNpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCRGF0
YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2UsIGNvbnN0IFN0cmluZyYgcHJldmlvdXNWZXJzaW9u
LCBpbnQ2NF90IHByZXZpb3VzSW50VmVyc2lvbikKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1w
bDo6VmVyc2lvbkNoYW5nZUFib3J0T3BlcmF0aW9uOjpwZXJmb3JtKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlLCBjb25z
dCBTdHJpbmcmIHByZXZpb3VzVmVyc2lvbiwgaW50NjRfdCBwcmV2aW91c0ludFZlcnNpb24pCiB7
CiAgICAgZGF0YWJhc2UtPm1fbWV0YWRhdGEudmVyc2lvbiA9IHByZXZpb3VzVmVyc2lvbjsKICAg
ICBkYXRhYmFzZS0+bV9tZXRhZGF0YS5pbnRWZXJzaW9uID0gcHJldmlvdXNJbnRWZXJzaW9uOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VC
YWNrZW5kSW1wbC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJh
c2VCYWNrZW5kSW1wbC5oCmluZGV4IGEzMzk2N2NmZDk1ZTI1MzUwOTFjMjIxMmViZDUwODk5NWQy
YTYzYjUuLjIzODY4NmE2MDU0Mzk3MGQyMjMyZGQxMDYxNjczMzJiYjJkNWNmYjAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZElt
cGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJh
Y2tlbmRJbXBsLmgKQEAgLTg0LDE0ICs4NCwxNCBAQCBwcml2YXRlOgogICAgIHNpemVfdCBjb25u
ZWN0aW9uQ291bnQoKTsKICAgICB2b2lkIHByb2Nlc3NQZW5kaW5nQ2FsbHMoKTsKIAotICAgIHN0
YXRpYyB2b2lkIGNyZWF0ZU9iamVjdFN0b3JlSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bD4pOwotICAgIHN0YXRpYyB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlSW50ZXJuYWwoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4sIFBhc3NS
ZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbD4pOwotICAgIHN0YXRpYyB2b2lkIHNldEludFZlcnNpb25JbnRlcm5hbChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBs
PiwgaW50NjRfdCB2ZXJzaW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8
SURCRGF0YWJhc2VDYWxsYmFja3M+LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGw+KTsKLQotICAgIC8vIFRoZXNlIGFyZSB1c2VkIGFzIHNldFZlcnNpb24gdHJhbnNhY3Rpb24g
YWJvcnQgdGFza3MuCi0gICAgc3RhdGljIHZvaWQgcmVtb3ZlT2JqZWN0U3RvcmVGcm9tTWFwKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+
LCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+KTsKLSAgICBzdGF0aWMgdm9p
ZCBhZGRPYmplY3RTdG9yZVRvTWFwKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRy
PElEQkRhdGFiYXNlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw+KTsKLSAgICBzdGF0aWMgdm9pZCByZXNldFZlcnNpb24oU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4sIGNvbnN0IFN0cmluZyYg
dmVyc2lvbiwgaW50NjRfdCBpbnRWZXJzaW9uKTsKKyAgICBjbGFzcyBDcmVhdGVPYmplY3RTdG9y
ZU9wZXJhdGlvbjsKKyAgICBjbGFzcyBEZWxldGVPYmplY3RTdG9yZU9wZXJhdGlvbjsKKyAgICBj
bGFzcyBWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uOworCisgICAgLy8gV2hlbiBhICJ2ZXJzaW9uY2hh
bmdlIiB0cmFuc2FjdGlvbiBhYm9ydHMsIHRoZXNlIHJlc3RvcmUgdGhlIGJhY2stZW5kIG9iamVj
dCBoaWVyYXJjaHkuCisgICAgY2xhc3MgQ3JlYXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbjsK
KyAgICBjbGFzcyBEZWxldGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uOworICAgIGNsYXNzIFZl
cnNpb25DaGFuZ2VBYm9ydE9wZXJhdGlvbjsKIAogICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU+
IG1fYmFja2luZ1N0b3JlOwogICAgIElEQkRhdGFiYXNlTWV0YWRhdGEgbV9tZXRhZGF0YTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2Vu
ZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNr
ZW5kSW1wbC5jcHAKaW5kZXggMTNlNjk5Zjk2NjY4MjFjZmIwMGI5MDUwZGE4MTk5ZTAxNDc0MzMy
YS4uMWEwNWMyMGRiOTUyNzBlNDk5YjRhMzAyZTFjZjZkMjhhMTdmNmU2OCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW1wbC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW1w
bC5jcHAKQEAgLTQzLDYgKzQzLDQ3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3Mg
SURCSW5kZXhCYWNrZW5kSW1wbDo6T3BlbkluZGV4Q3Vyc29yT3BlcmF0aW9uIHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiBjcmVh
dGUoUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCwgUGFzc1JlZlB0cjxJREJL
ZXlSYW5nZT4ga2V5UmFuZ2UsIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiwgSURCQ3Vyc29yQmFj
a2VuZEludGVyZmFjZTo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRy
YW5zYWN0aW9uKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUNhbGxiYWNrVGFzaygmT3Bl
bkluZGV4Q3Vyc29yT3BlcmF0aW9uOjpwZXJmb3JtLCBpbmRleCwga2V5UmFuZ2UsIGRpcmVjdGlv
biwgY3Vyc29yVHlwZSwgY2FsbGJhY2tzLCB0cmFuc2FjdGlvbik7CisgICAgfQorcHJpdmF0ZToK
KyAgICBzdGF0aWMgdm9pZCBwZXJmb3JtKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVm
UHRyPElEQkluZGV4QmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgdW5zaWdu
ZWQgc2hvcnQgdW50eXBlZERpcmVjdGlvbiwgSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6Q3Vy
c29yVHlwZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGw+KTsKK307CisKK2NsYXNzIElEQkluZGV4QmFja2VuZEltcGw6OkluZGV4
Q291bnRPcGVyYXRpb24geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZElt
cGw+IGluZGV4LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJ
REJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsPiB0cmFuc2FjdGlvbikKKyAgICB7CisgICAgICAgIHJldHVybiBjcmVhdGVDYWxsYmFja1Rh
c2soJkluZGV4Q291bnRPcGVyYXRpb246OnBlcmZvcm0sIGluZGV4LCBrZXlSYW5nZSwgY2FsbGJh
Y2tzLCB0cmFuc2FjdGlvbik7CisgICAgfQorcHJpdmF0ZToKKyAgICBzdGF0aWMgdm9pZCBwZXJm
b3JtKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZElt
cGw+LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQ
YXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+KTsKK307CisKK2NsYXNzIElEQklu
ZGV4QmFja2VuZEltcGw6OkluZGV4UmVmZXJlbmNlZFZhbHVlUmV0cmlldmFsT3BlcmF0aW9uIHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpU
YXNrPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCwgUGFzc1Jl
ZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxs
YmFja3MsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24p
CisgICAgeworICAgICAgICByZXR1cm4gY3JlYXRlQ2FsbGJhY2tUYXNrKCZJbmRleFJlZmVyZW5j
ZWRWYWx1ZVJldHJpZXZhbE9wZXJhdGlvbjo6cGVyZm9ybSwgaW5kZXgsIGtleVJhbmdlLCBjYWxs
YmFja3MsIHRyYW5zYWN0aW9uKTsKKyAgICB9Citwcml2YXRlOgorICAgIHN0YXRpYyB2b2lkIHBl
cmZvcm0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5k
SW1wbD4sIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4s
IFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4pOworfTsKKworY2xhc3MgSURC
SW5kZXhCYWNrZW5kSW1wbDo6SW5kZXhWYWx1ZVJldHJpZXZhbE9wZXJhdGlvbiB7CitwdWJsaWM6
CisgICAgc3RhdGljIFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gY3Jl
YXRlKFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgsIFBhc3NSZWZQdHI8SURC
S2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQ
YXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGNyZWF0ZUNhbGxiYWNrVGFzaygmSW5kZXhWYWx1ZVJldHJpZXZhbE9w
ZXJhdGlvbjo6cGVyZm9ybSwgaW5kZXgsIGtleVJhbmdlLCBjYWxsYmFja3MsIHRyYW5zYWN0aW9u
KTsKKyAgICB9Citwcml2YXRlOgorICAgIHN0YXRpYyB2b2lkIHBlcmZvcm0oU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8
SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbD4pOworfTsKKworCiBJREJJbmRleEJhY2tlbmRJbXBsOjpJREJJ
bmRleEJhY2tlbmRJbXBsKGNvbnN0IElEQkRhdGFiYXNlQmFja2VuZEltcGwqIGRhdGFiYXNlLCBJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKiBvYmplY3RTdG9yZUJhY2tlbmQsIGNvbnN0IElEQklu
ZGV4TWV0YWRhdGEmIG1ldGFkYXRhKQogICAgIDogbV9kYXRhYmFzZShkYXRhYmFzZSkKICAgICAs
IG1fb2JqZWN0U3RvcmVCYWNrZW5kKG9iamVjdFN0b3JlQmFja2VuZCkKQEAgLTU0LDE0ICs5NSw5
IEBAIElEQkluZGV4QmFja2VuZEltcGw6On5JREJJbmRleEJhY2tlbmRJbXBsKCkKIHsKIH0KIAot
SURCSW5kZXhNZXRhZGF0YSBJREJJbmRleEJhY2tlbmRJbXBsOjptZXRhZGF0YSgpIGNvbnN0Cit2
b2lkIElEQkluZGV4QmFja2VuZEltcGw6Ok9wZW5JbmRleEN1cnNvck9wZXJhdGlvbjo6cGVyZm9y
bShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBs
PiBpbmRleCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcmFuZ2UsIHVuc2lnbmVkIHNob3J0IHVu
dHlwZWREaXJlY3Rpb24sIElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6OkN1cnNvclR5cGUgY3Vy
c29yVHlwZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbikKIHsKLSAgICByZXR1cm4gbV9t
ZXRhZGF0YTsKLX0KLQotdm9pZCBJREJJbmRleEJhY2tlbmRJbXBsOjpvcGVuQ3Vyc29ySW50ZXJu
YWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1w
bD4gaW5kZXgsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHJhbmdlLCB1bnNpZ25lZCBzaG9ydCB1
bnR5cGVkRGlyZWN0aW9uLCBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpDdXJzb3JUeXBlIGN1
cnNvclR5cGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24pCi17Ci0gICAgSURCX1RSQUNF
KCJJREJJbmRleEJhY2tlbmRJbXBsOjpvcGVuQ3Vyc29ySW50ZXJuYWwiKTsKKyAgICBJREJfVFJB
Q0UoIk9wZW5JbmRleEN1cnNvck9wZXJhdGlvbiIpOwogICAgIElEQkN1cnNvcjo6RGlyZWN0aW9u
IGRpcmVjdGlvbiA9IHN0YXRpY19jYXN0PElEQkN1cnNvcjo6RGlyZWN0aW9uPih1bnR5cGVkRGly
ZWN0aW9uKTsKIAogICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gYmFja2luZ1N0
b3JlQ3Vyc29yOwpAQCAtODgsMzMgKzEyNCwyNyBAQCB2b2lkIElEQkluZGV4QmFja2VuZEltcGw6
Om9wZW5DdXJzb3JJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cgog
ICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKGN1cnNvciwgY3Vyc29yLT5rZXkoKSwgY3Vyc29yLT5w
cmltYXJ5S2V5KCksIGN1cnNvci0+dmFsdWUoKSk7CiB9CiAKLXZvaWQgSURCSW5kZXhCYWNrZW5k
SW1wbDo6b3BlbkN1cnNvcihQYXNzUmVmUHRyPElEQktleVJhbmdlPiBwcnBLZXlSYW5nZSwgdW5z
aWduZWQgc2hvcnQgZGlyZWN0aW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJh
Y2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBFeGNl
cHRpb25Db2RlJikKK3ZvaWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6b3BlbkN1cnNvcihQYXNzUmVm
UHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgdW5zaWduZWQgc2hvcnQgZGlyZWN0aW9uLCBQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBFeGNlcHRpb25Db2RlJikKIHsKICAgICBJREJfVFJB
Q0UoIklEQkluZGV4QmFja2VuZEltcGw6Om9wZW5DdXJzb3IiKTsKLSAgICBSZWZQdHI8SURCSW5k
ZXhCYWNrZW5kSW1wbD4gaW5kZXggPSB0aGlzOwotICAgIFJlZlB0cjxJREJLZXlSYW5nZT4ga2V5
UmFuZ2UgPSBwcnBLZXlSYW5nZTsKICAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3Mg
PSBwcnBDYWxsYmFja3M7CiAgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRy
YW5zYWN0aW9uID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6ZnJvbSh0cmFuc2FjdGlvblB0
cik7Ci0gICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKAotICAgICAgICAgICAgY3Jl
YXRlQ2FsbGJhY2tUYXNrKCZvcGVuQ3Vyc29ySW50ZXJuYWwsIGluZGV4LCBrZXlSYW5nZSwgZGly
ZWN0aW9uLCBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEN1cnNvciwgY2FsbGJhY2tz
LCB0cmFuc2FjdGlvbikpKQorICAgIGlmICghdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhPcGVu
SW5kZXhDdXJzb3JPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBrZXlSYW5nZSwgZGlyZWN0aW9uLCBJ
REJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEN1cnNvciwgY2FsbGJhY2tzLCB0cmFuc2Fj
dGlvbikpKQogICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3Jl
YXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJREJfQUJPUlRfRVJSKSk7CiB9CiAKLXZvaWQgSURC
SW5kZXhCYWNrZW5kSW1wbDo6b3BlbktleUN1cnNvcihQYXNzUmVmUHRyPElEQktleVJhbmdlPiBw
cnBLZXlSYW5nZSwgdW5zaWduZWQgc2hvcnQgZGlyZWN0aW9uLCBQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4gcHJwQ2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5z
YWN0aW9uUHRyLCBFeGNlcHRpb25Db2RlJikKK3ZvaWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6b3Bl
bktleUN1cnNvcihQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgdW5zaWduZWQgc2hv
cnQgZGlyZWN0aW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBFeGNlcHRpb25Db2Rl
JikKIHsKICAgICBJREJfVFJBQ0UoIklEQkluZGV4QmFja2VuZEltcGw6Om9wZW5LZXlDdXJzb3Ii
KTsKLSAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXggPSB0aGlzOwotICAgIFJl
ZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UgPSBwcnBLZXlSYW5nZTsKICAgICBSZWZQdHI8SURC
Q2FsbGJhY2tzPiBjYWxsYmFja3MgPSBwcnBDYWxsYmFja3M7CiAgICAgUmVmUHRyPElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bDo6ZnJvbSh0cmFuc2FjdGlvblB0cik7Ci0gICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVU
YXNrKAotICAgICAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZvcGVuQ3Vyc29ySW50ZXJuYWws
IGluZGV4LCBrZXlSYW5nZSwgZGlyZWN0aW9uLCBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpJ
bmRleEtleUN1cnNvciwgY2FsbGJhY2tzLCB0cmFuc2FjdGlvbikpKQorICAgIGlmICghdHJhbnNh
Y3Rpb24tPnNjaGVkdWxlVGFzayhPcGVuSW5kZXhDdXJzb3JPcGVyYXRpb246OmNyZWF0ZSh0aGlz
LCBrZXlSYW5nZSwgZGlyZWN0aW9uLCBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEtl
eUN1cnNvciwgY2FsbGJhY2tzLCB0cmFuc2FjdGlvbikpKQogICAgICAgICBjYWxsYmFja3MtPm9u
RXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJREJf
QUJPUlRfRVJSKSk7CiB9CiAKLXZvaWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6Y291bnRJbnRlcm5h
bChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBs
PiBpbmRleCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4g
dHJhbnNhY3Rpb24pCit2b2lkIElEQkluZGV4QmFja2VuZEltcGw6OkluZGV4Q291bnRPcGVyYXRp
b246OnBlcmZvcm0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCSW5kZXhC
YWNrZW5kSW1wbD4gaW5kZXgsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHJhbmdlLCBQYXNzUmVm
UHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGw+IHRyYW5zYWN0aW9uKQogewotICAgIElEQl9UUkFDRSgiSURCSW5kZXhCYWNrZW5k
SW1wbDo6Y291bnRJbnRlcm5hbCIpOworICAgIElEQl9UUkFDRSgiSW5kZXhDb3VudE9wZXJhdGlv
biIpOwogICAgIHVpbnQzMl90IGNvdW50ID0gMDsKIAogICAgIFJlZlB0cjxJREJCYWNraW5nU3Rv
cmU6OkN1cnNvcj4gYmFja2luZ1N0b3JlQ3Vyc29yID0gaW5kZXgtPmJhY2tpbmdTdG9yZSgpLT5v
cGVuSW5kZXhLZXlDdXJzb3IodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCks
IGluZGV4LT5kYXRhYmFzZUlkKCksIGluZGV4LT5tX29iamVjdFN0b3JlQmFja2VuZC0+aWQoKSwg
aW5kZXgtPmlkKCksIHJhbmdlLmdldCgpLCBJREJDdXJzb3I6Ok5FWFQpOwpAQCAtMTMwLDE4ICsx
NjAsMTggQEAgdm9pZCBJREJJbmRleEJhY2tlbmRJbXBsOjpjb3VudEludGVybmFsKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkkKICAgICBjYWxsYmFja3MtPm9uU3VjY2Vz
cyhjb3VudCk7CiB9CiAKLXZvaWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6Y291bnQoUGFzc1JlZlB0
cjxJREJLZXlSYW5nZT4gcmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3Ms
IElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25QdHIsIEV4Y2VwdGlv
bkNvZGUmKQordm9pZCBJREJJbmRleEJhY2tlbmRJbXBsOjpjb3VudChQYXNzUmVmUHRyPElEQktl
eVJhbmdlPiByYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvblB0ciwgRXhjZXB0aW9uQ29k
ZSYpCiB7CiAgICAgSURCX1RSQUNFKCJJREJJbmRleEJhY2tlbmRJbXBsOjpjb3VudCIpOworICAg
IFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKICAgICBSZWZQ
dHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsOjpmcm9tKHRyYW5zYWN0aW9uUHRyKTsKLSAgICBpZiAoIXRyYW5zYWN0aW9u
LT5zY2hlZHVsZVRhc2soCi0gICAgICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2soJmNvdW50SW50
ZXJuYWwsIHRoaXMsIHJhbmdlLCBjYWxsYmFja3MsIHRyYW5zYWN0aW9uKSkpCisgICAgaWYgKCF0
cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKEluZGV4Q291bnRPcGVyYXRpb246OmNyZWF0ZSh0aGlz
LCByYW5nZSwgY2FsbGJhY2tzLCB0cmFuc2FjdGlvbikpKQogICAgICAgICBjYWxsYmFja3MtPm9u
RXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJREJf
QUJPUlRfRVJSKSk7CiB9CiAKLXZvaWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6Z2V0SW50ZXJuYWwo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4g
aW5kZXgsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+
IHRyYW5zYWN0aW9uKQordm9pZCBJREJJbmRleEJhY2tlbmRJbXBsOjpJbmRleFJlZmVyZW5jZWRW
YWx1ZVJldHJpZXZhbE9wZXJhdGlvbjo6cGVyZm9ybShTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwg
UGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCwgUGFzc1JlZlB0cjxJREJLZXlS
YW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NS
ZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24pCiB7Ci0gICAgSURC
X1RSQUNFKCJJREJJbmRleEJhY2tlbmRJbXBsOjpnZXRJbnRlcm5hbCIpOworICAgIElEQl9UUkFD
RSgiSW5kZXhSZWZlcmVuY2VkVmFsdWVSZXRyaWV2YWxPcGVyYXRpb24iKTsKIAogICAgIFJlZlB0
cjxJREJLZXk+IGtleTsKIApAQCAtMTczLDkgKzIwMywxMCBAQCB2b2lkIElEQkluZGV4QmFja2Vu
ZEltcGw6OmdldEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElE
QkluZAogICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3Jl
YXRlRnJvbVdpcmUodmFsdWUpKTsKIH0KIAotdm9pZCBJREJJbmRleEJhY2tlbmRJbXBsOjpnZXRL
ZXlJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElE
QkluZGV4QmFja2VuZEltcGw+IGluZGV4LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5n
ZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbikKKwordm9pZCBJREJJbmRleEJhY2tlbmRJ
bXBsOjpJbmRleFZhbHVlUmV0cmlldmFsT3BlcmF0aW9uOjpwZXJmb3JtKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4LCBQYXNzUmVm
UHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxi
YWNrcywgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbikK
IHsKLSAgICBJREJfVFJBQ0UoIklEQkluZGV4QmFja2VuZEltcGw6OmdldEludGVybmFsIik7Cisg
ICAgSURCX1RSQUNFKCJJbmRleFZhbHVlUmV0cmlldmFsT3BlcmF0aW9uIik7CiAKICAgICBSZWZQ
dHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGJhY2tpbmdTdG9yZUN1cnNvciA9CiAgICAgICAg
ICAgICBpbmRleC0+YmFja2luZ1N0b3JlKCktPm9wZW5JbmRleEtleUN1cnNvcih0cmFuc2FjdGlv
bi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgaW5kZXgtPmRhdGFiYXNlSWQoKSwgaW5kZXgt
Pm1fb2JqZWN0U3RvcmVCYWNrZW5kLT5pZCgpLCBpbmRleC0+aWQoKSwga2V5UmFuZ2UuZ2V0KCks
IElEQkN1cnNvcjo6TkVYVCk7CkBAIC0xOTMsMjcgKzIyNCwyMSBAQCB2b2lkIElEQkluZGV4QmFj
a2VuZEltcGw6OmdldEtleUludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQs
IFBhc3NSZQogICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKGtleVJlc3VsdC5nZXQoKSk7CiB9CiAK
LQotdm9pZCBJREJJbmRleEJhY2tlbmRJbXBsOjpnZXQoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4g
cHJwS2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIElEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25QdHIsIEV4Y2VwdGlvbkNvZGUm
KQordm9pZCBJREJJbmRleEJhY2tlbmRJbXBsOjpnZXQoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4g
a2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIElEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25QdHIsIEV4Y2VwdGlvbkNvZGUmKQog
ewogICAgIElEQl9UUkFDRSgiSURCSW5kZXhCYWNrZW5kSW1wbDo6Z2V0Iik7Ci0gICAgUmVmUHRy
PElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4ID0gdGhpczsKLSAgICBSZWZQdHI8SURCS2V5UmFu
Z2U+IGtleVJhbmdlID0gcHJwS2V5UmFuZ2U7CiAgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2Fs
bGJhY2tzID0gcHJwQ2FsbGJhY2tzOwogICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsPiB0cmFuc2FjdGlvbiA9IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmZyb20odHJhbnNh
Y3Rpb25QdHIpOwotICAgIGlmICghdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhjcmVhdGVDYWxs
YmFja1Rhc2soJmdldEludGVybmFsLCBpbmRleCwga2V5UmFuZ2UsIGNhbGxiYWNrcywgdHJhbnNh
Y3Rpb24pKSkKKyAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soSW5kZXhSZWZlcmVu
Y2VkVmFsdWVSZXRyaWV2YWxPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBrZXlSYW5nZSwgY2FsbGJh
Y2tzLCB0cmFuc2FjdGlvbikpKQogICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJh
c2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJREJfQUJPUlRfRVJSKSk7CiB9
CiAKLXZvaWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6Z2V0S2V5KFBhc3NSZWZQdHI8SURCS2V5UmFu
Z2U+IHBycEtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBFeGNlcHRpb25D
b2RlJikKK3ZvaWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6Z2V0S2V5KFBhc3NSZWZQdHI8SURCS2V5
UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBFeGNlcHRpb25D
b2RlJikKIHsKICAgICBJREJfVFJBQ0UoIklEQkluZGV4QmFja2VuZEltcGw6OmdldEtleSIpOwot
ICAgIFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCA9IHRoaXM7Ci0gICAgUmVmUHRy
PElEQktleVJhbmdlPiBrZXlSYW5nZSA9IHBycEtleVJhbmdlOwogICAgIFJlZlB0cjxJREJDYWxs
YmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKICAgICBSZWZQdHI8SURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpm
cm9tKHRyYW5zYWN0aW9uUHRyKTsKLSAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2so
Ci0gICAgICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2soJmdldEtleUludGVybmFsLCBpbmRleCwg
a2V5UmFuZ2UsIGNhbGxiYWNrcywgdHJhbnNhY3Rpb24pKSkKKyAgICBpZiAoIXRyYW5zYWN0aW9u
LT5zY2hlZHVsZVRhc2soSW5kZXhWYWx1ZVJldHJpZXZhbE9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMs
IGtleVJhbmdlLCBjYWxsYmFja3MsIHRyYW5zYWN0aW9uKSkpCiAgICAgICAgIGNhbGxiYWNrcy0+
b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OklE
Ql9BQk9SVF9FUlIpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW1wbC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW1wbC5oCmluZGV4IDllODg0MzAxMmM4NWVjZjM5MmFj
NjkzZDg5NTdiMDA4N2ExMGJhMzIuLjEzMmNhYjYyMTJhZWQ4Nzc3MmE2MWVjMTNmMGVjOGVkMWVk
MzdhNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQklu
ZGV4QmFja2VuZEltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJJbmRleEJhY2tlbmRJbXBsLmgKQEAgLTYyLDcgKzYyLDcgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgdm9pZCBnZXQoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOwog
ICAgIHZpcnR1YWwgdm9pZCBnZXRLZXkoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQ
dHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0
aW9uQ29kZSYpOwogCi0gICAgSURCSW5kZXhNZXRhZGF0YSBtZXRhZGF0YSgpIGNvbnN0OworICAg
IElEQkluZGV4TWV0YWRhdGEgbWV0YWRhdGEoKSBjb25zdCB7IHJldHVybiBtX21ldGFkYXRhOyB9
CiAgICAgY29uc3QgU3RyaW5nJiBuYW1lKCkgeyByZXR1cm4gbV9tZXRhZGF0YS5uYW1lOyB9CiAg
ICAgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCgpIHsgcmV0dXJuIG1fbWV0YWRhdGEua2V5UGF0
aDsgfQogICAgIGNvbnN0IGJvb2wmIHVuaXF1ZSgpIHsgcmV0dXJuIG1fbWV0YWRhdGEudW5pcXVl
OyB9CkBAIC03MSwxMCArNzEsMTAgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBJREJJbmRleEJh
Y2tlbmRJbXBsKGNvbnN0IElEQkRhdGFiYXNlQmFja2VuZEltcGwqLCBJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsKiwgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYpOwogCi0gICAgc3RhdGljIHZvaWQg
b3BlbkN1cnNvckludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElE
QkluZGV4QmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgdW5zaWduZWQgc2hv
cnQgZGlyZWN0aW9uLCBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpDdXJzb3JUeXBlLCBQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bD4pOwotICAgIHN0YXRpYyB2b2lkIGNvdW50SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCS2V5UmFu
Z2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbD4pOwotICAgIHN0YXRpYyB2b2lkIGdldEludGVybmFsKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElE
QktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGw+KTsKLSAgICBzdGF0aWMgdm9pZCBnZXRLZXlJbnRlcm5hbChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiwgUGFz
c1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0
cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPik7CisgICAgY2xhc3MgT3BlbkluZGV4Q3Vyc29y
T3BlcmF0aW9uOworICAgIGNsYXNzIEluZGV4Q291bnRPcGVyYXRpb247CisgICAgY2xhc3MgSW5k
ZXhSZWZlcmVuY2VkVmFsdWVSZXRyaWV2YWxPcGVyYXRpb247CisgICAgY2xhc3MgSW5kZXhWYWx1
ZVJldHJpZXZhbE9wZXJhdGlvbjsKIAogICAgIHN0YXRpYyBjb25zdCBpbnQ2NF90IEludmFsaWRJ
ZCA9IDA7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAKaW5kZXggYzkwZGFjMjI0ZDQ1NWMw
MTA1MTY2N2UzYzkyNGI5YzczYTE4OTZiMS4uYjVmMTIxZjk0ZmE3ZGE3ZjFmNGJiYTkyYTE5OGZi
OTUxNzQyZDMxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAKQEAgLTQ1LDYgKzQ1LDEx
NyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw6Ok9iamVjdFN0b3JlUmV0cmlldmFsT3BlcmF0aW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiBjcmVhdGUoUGFzc1Jl
ZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJ
REJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3Ms
IFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24pCisgICAg
eworICAgICAgICByZXR1cm4gY3JlYXRlQ2FsbGJhY2tUYXNrKCZPYmplY3RTdG9yZVJldHJpZXZh
bE9wZXJhdGlvbjo6cGVyZm9ybSwgb2JqZWN0U3RvcmUsIGtleVJhbmdlLCBjYWxsYmFja3MsIHRy
YW5zYWN0aW9uKTsKKyAgICB9Citwcml2YXRlOgorICAgIHN0YXRpYyB2b2lkIHBlcmZvcm0oU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bD4sIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBh
c3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4pOworfTsKKworY2xhc3MgSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6T2JqZWN0U3RvcmVTdG9yYWdlT3BlcmF0aW9uIHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiBj
cmVhdGUoUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwg
UGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlLCBQYXNzUmVmUHRyPElEQktl
eT4ga2V5LCBQdXRNb2RlIHB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFj
a3MsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24sIFBh
c3NPd25QdHI8VmVjdG9yPGludDY0X3Q+ID4gcG9wSW5kZXhJZHMsIFBhc3NPd25QdHI8VmVjdG9y
PEluZGV4S2V5cz4gPiBwb3BJbmRleEtleXMpCisgICAgeworICAgICAgICByZXR1cm4gY3JlYXRl
Q2FsbGJhY2tUYXNrKCZPYmplY3RTdG9yZVN0b3JhZ2VPcGVyYXRpb246OnBlcmZvcm0sIG9iamVj
dFN0b3JlLCB2YWx1ZSwga2V5LCBwdXRNb2RlLCBjYWxsYmFja3MsIHRyYW5zYWN0aW9uLCBwb3BJ
bmRleElkcywgcG9wSW5kZXhLZXlzKTsKKyAgICB9Citwcml2YXRlOgorICAgIHN0YXRpYyB2b2lk
IHBlcmZvcm0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgUGFzc1Jl
ZlB0cjxJREJLZXk+LCBQdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQ
dHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4sIFBhc3NPd25QdHI8VmVjdG9yPGludDY0X3Q+
ID4gcG9wSW5kZXhJZHMsIFBhc3NPd25QdHI8VmVjdG9yPEluZGV4S2V5cz4gPiBwb3BJbmRleEtl
eXMpOworfTsKKworY2xhc3MgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6T2JqZWN0U3RvcmVJ
bmRleGVzUmVhZHlPcGVyYXRpb24geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IGNyZWF0ZShQYXNzUmVmUHRyPElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzT3duUHRyPFZlY3RvcjxpbnQ2NF90PiA+
IHBvcEluZGV4SWRzLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5z
YWN0aW9uKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUNhbGxiYWNrVGFzaygmT2JqZWN0
U3RvcmVJbmRleGVzUmVhZHlPcGVyYXRpb246OnBlcmZvcm0sIG9iamVjdFN0b3JlLCBwb3BJbmRl
eElkcywgdHJhbnNhY3Rpb24pOworICAgIH0KK3ByaXZhdGU6CisgICAgc3RhdGljIHZvaWQgcGVy
Zm9ybShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsPiwgUGFzc093blB0cjxWZWN0b3I8aW50NjRfdD4gPiBwb3BJbmRleElkcywgUGFz
c1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPik7Cit9OworCitjbGFzcyBJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsOjpPYmplY3RTdG9yZURlbGV0aW9uT3BlcmF0aW9uIHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiBj
cmVhdGUoUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwg
UGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNh
Y3Rpb24pCisgICAgeworICAgICAgICByZXR1cm4gY3JlYXRlQ2FsbGJhY2tUYXNrKCZPYmplY3RT
dG9yZURlbGV0aW9uT3BlcmF0aW9uOjpwZXJmb3JtLCBvYmplY3RTdG9yZSwga2V5UmFuZ2UsIGNh
bGxiYWNrcywgdHJhbnNhY3Rpb24pOworICAgIH0KK3ByaXZhdGU6CisgICAgc3RhdGljIHZvaWQg
cGVyZm9ybShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPik7Cit9OworCitj
bGFzcyBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpPYmplY3RTdG9yZUNsZWFyT3BlcmF0aW9u
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0
OjpUYXNrPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmpl
Y3RTdG9yZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbikKKyAgICB7CisgICAgICAgIHJl
dHVybiBjcmVhdGVDYWxsYmFja1Rhc2soJk9iamVjdFN0b3JlQ2xlYXJPcGVyYXRpb246OnBlcmZv
cm0sIG9iamVjdFN0b3JlLCBjYWxsYmFja3MsIHRyYW5zYWN0aW9uKTsKKyAgICB9Citwcml2YXRl
OgorICAgIHN0YXRpYyB2b2lkIHBlcmZvcm0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NS
ZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPik7Cit9OworCitjbGFzcyBJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpDcmVhdGVJbmRleE9wZXJhdGlvbiB7CitwdWJsaWM6
CisgICAgc3RhdGljIFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gY3Jl
YXRlKFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBh
c3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgsIFBhc3NSZWZQdHI8SURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24pCisgICAgeworICAgICAgICByZXR1cm4gY3Jl
YXRlQ2FsbGJhY2tUYXNrKCZDcmVhdGVJbmRleE9wZXJhdGlvbjo6cGVyZm9ybSwgb2JqZWN0U3Rv
cmUsIGluZGV4LCB0cmFuc2FjdGlvbik7CisgICAgfQorcHJpdmF0ZToKKyAgICBzdGF0aWMgdm9p
ZCBwZXJmb3JtKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+LCBQYXNzUmVm
UHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+KTsKK307CisKK2NsYXNzIElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6OkRlbGV0ZUluZGV4T3BlcmF0aW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiBjcmVhdGUoUGFzc1Jl
ZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJ
REJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsPiB0cmFuc2FjdGlvbikKKyAgICB7CisgICAgICAgIHJldHVybiBjcmVhdGVDYWxsYmFj
a1Rhc2soJkRlbGV0ZUluZGV4T3BlcmF0aW9uOjpwZXJmb3JtLCBvYmplY3RTdG9yZSwgaW5kZXgs
IHRyYW5zYWN0aW9uKTsKKyAgICB9Citwcml2YXRlOgorICAgIHN0YXRpYyB2b2lkIHBlcmZvcm0o
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbD4sIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbD4pOworfTsKKworY2xhc3MgSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbDo6T3Blbk9iamVjdFN0b3JlQ3Vyc29yT3BlcmF0aW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiBjcmVhdGUoUGFzc1Jl
ZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJ
REJLZXlSYW5nZT4gcmFuZ2UsIElEQkN1cnNvcjo6RGlyZWN0aW9uIGRpcmVjdGlvbiwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlOjpUYXNrVHlwZSB0YXNrVHlwZSwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsPiB0cmFuc2FjdGlvbikKKyAgICB7CisgICAgICAgIHJldHVybiBjcmVhdGVDYWxsYmFja1Rh
c2soJk9wZW5PYmplY3RTdG9yZUN1cnNvck9wZXJhdGlvbjo6cGVyZm9ybSwgb2JqZWN0U3RvcmUs
IHJhbmdlLCBkaXJlY3Rpb24sIGNhbGxiYWNrcywgdGFza1R5cGUsIHRyYW5zYWN0aW9uKTsKKyAg
ICB9Citwcml2YXRlOgorICAgIHN0YXRpYyB2b2lkIHBlcmZvcm0oU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8
SURCS2V5UmFuZ2U+LCBJREJDdXJzb3I6OkRpcmVjdGlvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFj
a3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlLCBQYXNzUmVmUHRy
PElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+KTsKK307CisKK2NsYXNzIElEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw6Ok9iamVjdFN0b3JlQ291bnRPcGVyYXRpb24geworcHVibGljOgorICAgIHN0
YXRpYyBQYXNzT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IGNyZWF0ZShQYXNz
UmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRy
PElEQktleVJhbmdlPiByYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywg
UGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbikKKyAgICB7
CisgICAgICAgIHJldHVybiBjcmVhdGVDYWxsYmFja1Rhc2soJk9iamVjdFN0b3JlQ291bnRPcGVy
YXRpb246OnBlcmZvcm0sIG9iamVjdFN0b3JlLCByYW5nZSwgY2FsbGJhY2tzLCB0cmFuc2FjdGlv
bik7CisgICAgfQorcHJpdmF0ZToKKyAgICBzdGF0aWMgdm9pZCBwZXJmb3JtKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNz
UmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRy
PElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+KTsKK307CisKK2NsYXNzIElEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw6OkNyZWF0ZUluZGV4QWJvcnRPcGVyYXRpb24geworcHVibGljOgorICAgIHN0
YXRpYyBQYXNzT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IGNyZWF0ZShQYXNz
UmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRy
PElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNyZWF0
ZUNhbGxiYWNrVGFzaygmQ3JlYXRlSW5kZXhBYm9ydE9wZXJhdGlvbjo6cGVyZm9ybSwgb2JqZWN0
U3RvcmUsIGluZGV4KTsKKyAgICB9Citwcml2YXRlOgorICAgIHN0YXRpYyB2b2lkIHBlcmZvcm0o
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbD4sIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4pOworfTsKKworY2xhc3MgSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6RGVsZXRlSW5kZXhBYm9ydE9wZXJhdGlvbiB7CitwdWJs
aWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4g
Y3JlYXRlKFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUs
IFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgpCisgICAgeworICAgICAgICBy
ZXR1cm4gY3JlYXRlQ2FsbGJhY2tUYXNrKCZEZWxldGVJbmRleEFib3J0T3BlcmF0aW9uOjpwZXJm
b3JtLCBvYmplY3RTdG9yZSwgaW5kZXgpOworICAgIH0KK3ByaXZhdGU6CisgICAgc3RhdGljIHZv
aWQgcGVyZm9ybShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPik7Cit9Owor
CisKIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6On5JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
KCkKIHsKIH0KQEAgLTY0LDIxICsxNzUsMTggQEAgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSBJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsOjptZXRhZGF0YSgpIGNvbnN0CiAgICAgcmV0dXJuIG1ldGFk
YXRhOwogfQogCi12b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmdldChQYXNzUmVmUHRy
PElEQktleVJhbmdlPiBwcnBLZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENh
bGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvblB0ciwg
RXhjZXB0aW9uQ29kZSYpCit2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmdldChQYXNz
UmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBy
cENhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvblB0
ciwgRXhjZXB0aW9uQ29kZSYpCiB7CiAgICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsOjpnZXQiKTsKLSAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2Jq
ZWN0U3RvcmUgPSB0aGlzOwotICAgIFJlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UgPSBwcnBL
ZXlSYW5nZTsKICAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MgPSBwcnBDYWxsYmFj
a3M7CiAgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uID0g
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6ZnJvbSh0cmFuc2FjdGlvblB0cik7Ci0gICAgaWYg
KCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKAotICAgICAgICAgICAgY3JlYXRlQ2FsbGJhY2tU
YXNrKCZJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpnZXRJbnRlcm5hbCwgb2JqZWN0U3RvcmUs
IGtleVJhbmdlLCBjYWxsYmFja3MsIHRyYW5zYWN0aW9uKSkpCisgICAgaWYgKCF0cmFuc2FjdGlv
bi0+c2NoZWR1bGVUYXNrKE9iamVjdFN0b3JlUmV0cmlldmFsT3BlcmF0aW9uOjpjcmVhdGUodGhp
cywga2V5UmFuZ2UsIGNhbGxiYWNrcywgdHJhbnNhY3Rpb24pKSkKICAgICAgICAgY2FsbGJhY2tz
LT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
SURCX0FCT1JUX0VSUikpOwogfQogCi12b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Omdl
dEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlS
YW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbikKK3ZvaWQgSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbDo6T2JqZWN0U3RvcmVSZXRyaWV2YWxPcGVyYXRpb246OnBlcmZvcm0oU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4g
b2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGw+IHRyYW5zYWN0aW9uKQogewotICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbDo6Z2V0SW50ZXJuYWwiKTsKKyAgICBJREJfVFJBQ0UoIk9iamVjdFN0b3JlUmV0cmll
dmFsT3BlcmF0aW9uIik7CiAgICAgUmVmUHRyPElEQktleT4ga2V5OwogICAgIGlmIChrZXlSYW5n
ZS0+aXNPbmx5S2V5KCkpCiAgICAgICAgIGtleSA9IGtleVJhbmdlLT5sb3dlcigpOwpAQCAtMTA1
LDEzICsyMTMsMTAgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpnZXRJbnRlcm5h
bChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjwKICAgICBjYWxsYmFja3MtPm9u
U3VjY2VzcyhTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZUZyb21XaXJlKHdpcmVEYXRhKSk7
CiB9CiAKLXZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0KFBhc3NSZWZQdHI8U2Vy
aWFsaXplZFNjcmlwdFZhbHVlPiBwcnBWYWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+IHBycEtleSwg
UHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBjb25zdCBWZWN0
b3I8aW50NjRfdD4mIGluZGV4SWRzLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYgaW5kZXhLZXlz
KQordm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXQoUGFzc1JlZlB0cjxTZXJpYWxp
emVkU2NyaXB0VmFsdWU+IHZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBQdXRNb2RlIHB1
dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25QdHIsIGNvbnN0IFZlY3RvcjxpbnQ2NF90
PiYgaW5kZXhJZHMsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JiBpbmRleEtleXMpCiB7CiAgICAg
SURCX1RSQUNFKCJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXQiKTsKIAotICAgIFJlZlB0
cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSA9IHRoaXM7Ci0gICAgUmVm
UHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUgPSBwcnBWYWx1ZTsKLSAgICBSZWZQdHI8
SURCS2V5PiBrZXkgPSBwcnBLZXk7CiAgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tz
ID0gcHJwQ2FsbGJhY2tzOwogICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0
cmFuc2FjdGlvbiA9IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmZyb20odHJhbnNhY3Rpb25Q
dHIpOwogICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+bW9kZSgpICE9IElEQlRyYW5zYWN0aW9uOjpS
RUFEX09OTFkpOwpAQCAtMTE5LDEwICsyMjQsOSBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw6OnB1dChQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gcHJwVmFsdWUsCiAg
ICAgT3duUHRyPFZlY3RvcjxpbnQ2NF90PiA+IG5ld0luZGV4SWRzID0gYWRvcHRQdHIobmV3IFZl
Y3RvcjxpbnQ2NF90PihpbmRleElkcykpOwogICAgIE93blB0cjxWZWN0b3I8SW5kZXhLZXlzPiA+
IG5ld0luZGV4S2V5cyA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8SW5kZXhLZXlzPihpbmRleEtleXMp
KTsKIAotICAgIEFTU0VSVChhdXRvSW5jcmVtZW50KCkgfHwga2V5KTsKKyAgICBBU1NFUlQoYXV0
b0luY3JlbWVudCgpIHx8IGtleS5nZXQoKSk7CiAKLSAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hl
ZHVsZVRhc2soCi0gICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbDo6cHV0SW50ZXJuYWwsIG9iamVjdFN0b3JlLCB2YWx1ZSwga2V5LCBwdXRNb2RlLCBj
YWxsYmFja3MsIHRyYW5zYWN0aW9uLCBuZXdJbmRleElkcy5yZWxlYXNlKCksIG5ld0luZGV4S2V5
cy5yZWxlYXNlKCkpKSkKKyAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soT2JqZWN0
U3RvcmVTdG9yYWdlT3BlcmF0aW9uOjpjcmVhdGUodGhpcywgdmFsdWUsIGtleSwgcHV0TW9kZSwg
Y2FsbGJhY2tzLCB0cmFuc2FjdGlvbiwgbmV3SW5kZXhJZHMucmVsZWFzZSgpLCBuZXdJbmRleEtl
eXMucmVsZWFzZSgpKSkpCiAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVy
cm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OklEQl9BQk9SVF9FUlIpKTsKIH0KIApA
QCAtMjUzLDMwICszNTcsMjcgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpzZXRJ
bmRleEtleXMoUGFzc1JlZlB0cjxJREJLZXk+IHBycFByaW1hcnlLZXksIGMKIHZvaWQgSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6c2V0SW5kZXhlc1JlYWR5KGNvbnN0IFZlY3RvcjxpbnQ2NF90
PiYgaW5kZXhJZHMsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25J
bnRlcmZhY2UpCiB7CiAgICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpz
ZXRJbmRleGVzUmVhZHkiKTsKLSAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4g
b2JqZWN0U3RvcmUgPSB0aGlzOwogCiAgICAgT3duUHRyPFZlY3RvcjxpbnQ2NF90PiA+IG5ld0lu
ZGV4SWRzID0gYWRvcHRQdHIobmV3IFZlY3RvcjxpbnQ2NF90PihpbmRleElkcykpOwogICAgIFJl
ZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiA9IElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGw6OmZyb20odHJhbnNhY3Rpb25JbnRlcmZhY2UpOwogICAgIGlmICh0cmFu
c2FjdGlvbi0+aXNGaW5pc2hlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIXRyYW5z
YWN0aW9uLT5zY2hlZHVsZVRhc2soCi0gICAgICAgICAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bnRlcmZhY2U6OlByZWVtcHRpdmVUYXNrLAotICAgICAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNr
KCZJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpzZXRJbmRleGVzUmVhZHlJbnRlcm5hbCwgb2Jq
ZWN0U3RvcmUsIG5ld0luZGV4SWRzLnJlbGVhc2UoKSwgdHJhbnNhY3Rpb24pKSkKKyAgICBpZiAo
IXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
OjpQcmVlbXB0aXZlVGFzaywgT2JqZWN0U3RvcmVJbmRleGVzUmVhZHlPcGVyYXRpb246OmNyZWF0
ZSh0aGlzLCBuZXdJbmRleElkcy5yZWxlYXNlKCksIHRyYW5zYWN0aW9uKSkpCiAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi12b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6
OnNldEluZGV4ZXNSZWFkeUludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVm
UHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzT3duUHRyPFZl
Y3RvcjxpbnQ2NF90PiA+IHBvcEluZGV4SWRzLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGw+IHRyYW5zYWN0aW9uKQordm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpP
YmplY3RTdG9yZUluZGV4ZXNSZWFkeU9wZXJhdGlvbjo6cGVyZm9ybShTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9y
ZSwgUGFzc093blB0cjxWZWN0b3I8aW50NjRfdD4gPiBwb3BJbmRleElkcywgUGFzc1JlZlB0cjxJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbikKIHsKLSAgICBJREJfVFJBQ0Uo
IklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnNldEluZGV4ZXNSZWFkeUludGVybmFsIik7Cisg
ICAgSURCX1RSQUNFKCJPYmplY3RTdG9yZUluZGV4ZXNSZWFkeU9wZXJhdGlvbiIpOwogICAgIE93
blB0cjxWZWN0b3I8aW50NjRfdD4gPiBpbmRleElkcyA9IHBvcEluZGV4SWRzOwogICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgaW5kZXhJZHMtPnNpemUoKTsgKytpKQogICAgICAgICB0cmFuc2Fj
dGlvbi0+ZGlkQ29tcGxldGVQcmVlbXB0aXZlRXZlbnQoKTsKIH0KIAotdm9pZCBJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFz
c1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0
cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHBycFZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4gcHJw
S2V5LCBQdXRNb2RlIHB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3Ms
IFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gcHJwVHJhbnNhY3Rpb24sIFBh
c3NPd25QdHI8VmVjdG9yPGludDY0X3Q+ID4gcG9wSW5kZXhJZHMsIFBhc3NPd25QdHI8VmVjdG9y
PEluZGV4S2V5cz4gPiBwb3BJbmRleEtleXMpCit2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw6Ok9iamVjdFN0b3JlU3RvcmFnZU9wZXJhdGlvbjo6cGVyZm9ybShTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9y
ZSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHBycFZhbHVlLCBQYXNzUmVmUHRy
PElEQktleT4gcHJwS2V5LCBQdXRNb2RlIHB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gcHJwVHJh
bnNhY3Rpb24sIFBhc3NPd25QdHI8VmVjdG9yPGludDY0X3Q+ID4gcG9wSW5kZXhJZHMsIFBhc3NP
d25QdHI8VmVjdG9yPEluZGV4S2V5cz4gPiBwb3BJbmRleEtleXMpCiB7Ci0gICAgSURCX1RSQUNF
KCJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5hbCIpOworICAgIElEQl9UUkFD
RSgiT2JqZWN0U3RvcmVTdG9yYWdlT3BlcmF0aW9uIik7CiAgICAgUmVmUHRyPElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uID0gcHJwVHJhbnNhY3Rpb247CiAgICAgQVNTRVJU
KHRyYW5zYWN0aW9uLT5tb2RlKCkgIT0gSURCVHJhbnNhY3Rpb246OlJFQURfT05MWSk7CiAgICAg
UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUgPSBwcnBWYWx1ZTsKQEAgLTMyNywy
NSArNDI4LDIxIEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0SW50ZXJuYWwo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8CiAgICAgY2FsbGJhY2tzLT5vblN1
Y2Nlc3Moa2V5LnJlbGVhc2UoKSk7CiB9CiAKLXZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bDo6ZGVsZXRlRnVuY3Rpb24oUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcHJwS2V5UmFuZ2UsIFBh
c3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZSogdHJhbnNhY3Rpb25QdHIsIEV4Y2VwdGlvbkNvZGUmKQordm9pZCBJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxldGVGdW5jdGlvbihQYXNzUmVmUHRyPElEQktleVJhbmdl
PiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvblB0ciwgRXhjZXB0aW9uQ29kZSYp
CiB7CiAgICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxldGUiKTsK
IAogICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiA9IElE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmZyb20odHJhbnNhY3Rpb25QdHIpOwogICAgIEFTU0VS
VCh0cmFuc2FjdGlvbi0+bW9kZSgpICE9IElEQlRyYW5zYWN0aW9uOjpSRUFEX09OTFkpOwotCi0g
ICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlID0gdGhpczsK
LSAgICBSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlID0gcHJwS2V5UmFuZ2U7CiAgICAgUmVm
UHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOwogCi0gICAgaWYgKCF0
cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKAotICAgICAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNr
KCZJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxldGVJbnRlcm5hbCwgb2JqZWN0U3RvcmUs
IGtleVJhbmdlLCBjYWxsYmFja3MsIHRyYW5zYWN0aW9uKSkpCisgICAgaWYgKCF0cmFuc2FjdGlv
bi0+c2NoZWR1bGVUYXNrKE9iamVjdFN0b3JlRGVsZXRpb25PcGVyYXRpb246OmNyZWF0ZSh0aGlz
LCBrZXlSYW5nZSwgY2FsbGJhY2tzLCB0cmFuc2FjdGlvbikpKQogICAgICAgICBjYWxsYmFja3Mt
Pm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJ
REJfQUJPUlRfRVJSKSk7CiB9CiAKLXZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZGVs
ZXRlSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtl
eVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPElE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uKQordm9pZCBJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsOjpPYmplY3RTdG9yZURlbGV0aW9uT3BlcmF0aW9uOjpwZXJmb3JtKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+
IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsPiB0cmFuc2FjdGlvbikKIHsKLSAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw6OmRlbGV0ZUludGVybmFsIik7CisgICAgSURCX1RSQUNFKCJPYmplY3RTdG9yZURl
bGV0aW9uT3BlcmF0aW9uIik7CiAKICAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+
IGJhY2tpbmdTdG9yZUN1cnNvciA9IG9iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+b3Blbk9i
amVjdFN0b3JlQ3Vyc29yKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBv
YmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBvYmplY3RTdG9yZS0+aWQoKSwga2V5UmFuZ2UuZ2V0
KCksIElEQkN1cnNvcjo6TkVYVCk7CiAgICAgaWYgKGJhY2tpbmdTdG9yZUN1cnNvcikgewpAQCAt
MzY1LDE3ICs0NjIsMTUgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjbGVhcihQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBJREIKIAogICAgIFJlZlB0cjxJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiA9IElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGw6OmZyb20odHJhbnNhY3Rpb25QdHIpOwogICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+
bW9kZSgpICE9IElEQlRyYW5zYWN0aW9uOjpSRUFEX09OTFkpOwotCi0gICAgUmVmUHRyPElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlID0gdGhpczsKICAgICBSZWZQdHI8SURC
Q2FsbGJhY2tzPiBjYWxsYmFja3MgPSBwcnBDYWxsYmFja3M7CiAKLSAgICBpZiAoIXRyYW5zYWN0
aW9uLT5zY2hlZHVsZVRhc2soCi0gICAgICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2soJklEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw6OmNsZWFySW50ZXJuYWwsIG9iamVjdFN0b3JlLCBjYWxsYmFj
a3MsIHRyYW5zYWN0aW9uKSkpCisgICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKE9i
amVjdFN0b3JlQ2xlYXJPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBjYWxsYmFja3MsIHRyYW5zYWN0
aW9uKSkpCiAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVh
dGUoSURCRGF0YWJhc2VFeGNlcHRpb246OklEQl9BQk9SVF9FUlIpKTsKIH0KIAotdm9pZCBJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjbGVhckludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uKQordm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsOjpPYmplY3RTdG9yZUNsZWFyT3BlcmF0aW9uOjpwZXJmb3JtKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3Jl
LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uKQogeworICAgIElEQl9UUkFDRSgiT2JqZWN0
U3RvcmVDbGVhck9wZXJhdGlvbiIpOwogICAgIG9iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+
Y2xlYXJPYmplY3RTdG9yZSh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwg
b2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwgb2JqZWN0U3RvcmUtPmlkKCkpOwogICAgIGNhbGxi
YWNrcy0+b25TdWNjZXNzKCk7CiB9CkBAIC0zOTIsMTAgKzQ4Nyw3IEBAIFBhc3NSZWZQdHI8SURC
SW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjcmVhdGVJ
bmRleChpbnQ2CiAgICAgQVNTRVJUKGlkID4gbV9tZXRhZGF0YS5tYXhJbmRleElkKTsKICAgICBt
X21ldGFkYXRhLm1heEluZGV4SWQgPSBpZDsKIAotICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsPiBvYmplY3RTdG9yZSA9IHRoaXM7Ci0gICAgaWYgKCF0cmFuc2FjdGlvbi0+c2No
ZWR1bGVUYXNrKAotICAgICAgICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2soJklEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6OmNyZWF0ZUluZGV4SW50ZXJuYWwsIG9iamVjdFN0b3JlLCBpbmRleCwg
dHJhbnNhY3Rpb24pLAotICAgICAgICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2soJklEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw6OnJlbW92ZUluZGV4RnJvbU1hcCwgb2JqZWN0U3RvcmUsIGluZGV4
KSkpIHsKKyAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soQ3JlYXRlSW5kZXhPcGVy
YXRpb246OmNyZWF0ZSh0aGlzLCBpbmRleCwgdHJhbnNhY3Rpb24pLCBDcmVhdGVJbmRleEFib3J0
T3BlcmF0aW9uOjpjcmVhdGUodGhpcywgaW5kZXgpKSkgewogICAgICAgICBlYyA9IElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpUUkFOU0FDVElPTl9JTkFDVElWRV9FUlI7CiAgICAgICAgIHJldHVybiAw
OwogICAgIH0KQEAgLTQwNCw4ICs0OTYsOSBAQCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZElu
dGVyZmFjZT4gSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y3JlYXRlSW5kZXgoaW50NgogICAg
IHJldHVybiBpbmRleC5yZWxlYXNlKCk7CiB9CiAKLXZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbDo6Y3JlYXRlSW5kZXhJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1Jl
ZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJ
REJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsPiB0cmFuc2FjdGlvbikKK3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Q3Jl
YXRlSW5kZXhPcGVyYXRpb246OnBlcmZvcm0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NS
ZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8
SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbD4gdHJhbnNhY3Rpb24pCiB7CisgICAgSURCX1RSQUNFKCJDcmVhdGVJbmRleE9wZXJh
dGlvbiIpOwogICAgIGlmICghb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5jcmVhdGVJbmRl
eCh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgb2JqZWN0U3RvcmUtPmRh
dGFiYXNlSWQoKSwgb2JqZWN0U3RvcmUtPmlkKCksIGluZGV4LT5pZCgpLCBpbmRleC0+bmFtZSgp
LCBpbmRleC0+a2V5UGF0aCgpLCBpbmRleC0+dW5pcXVlKCksIGluZGV4LT5tdWx0aUVudHJ5KCkp
KSB7CiAgICAgICAgIHRyYW5zYWN0aW9uLT5hYm9ydCgpOwogICAgICAgICByZXR1cm47CkBAIC00
MjMsNDEgKzUxNiwzNiBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmRlbGV0ZUlu
ZGV4KGludDY0X3QgaW5kZXhJZCwgSURCVHJhbnNhY3Rpb25CYWNrZQogewogICAgIEFTU0VSVCht
X2luZGV4ZXMuY29udGFpbnMoaW5kZXhJZCkpOwogCi0gICAgUmVmUHRyPElEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw+IG9iamVjdFN0b3JlID0gdGhpczsKICAgICBSZWZQdHI8SURCSW5kZXhCYWNr
ZW5kSW1wbD4gaW5kZXggPSBtX2luZGV4ZXMuZ2V0KGluZGV4SWQpOwogICAgIFJlZlB0cjxJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiA9IElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGw6OmZyb20odHJhbnNhY3Rpb25QdHIpOwogICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+bW9k
ZSgpID09IElEQlRyYW5zYWN0aW9uOjpWRVJTSU9OX0NIQU5HRSk7CiAKLSAgICBpZiAoIXRyYW5z
YWN0aW9uLT5zY2hlZHVsZVRhc2soCi0gICAgICAgICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygm
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZGVsZXRlSW5kZXhJbnRlcm5hbCwgb2JqZWN0U3Rv
cmUsIGluZGV4LCB0cmFuc2FjdGlvbiksCi0gICAgICAgICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFz
aygmSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6YWRkSW5kZXhUb01hcCwgb2JqZWN0U3RvcmUs
IGluZGV4KSkpIHsKKyAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soRGVsZXRlSW5k
ZXhPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBpbmRleCwgdHJhbnNhY3Rpb24pLCBEZWxldGVJbmRl
eEFib3J0T3BlcmF0aW9uOjpjcmVhdGUodGhpcywgaW5kZXgpKSkgewogICAgICAgICBlYyA9IElE
QkRhdGFiYXNlRXhjZXB0aW9uOjpUUkFOU0FDVElPTl9JTkFDVElWRV9FUlI7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAgICAgbV9pbmRleGVzLnJlbW92ZShpbmRleElkKTsKIH0KIAotdm9pZCBJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxldGVJbmRleEludGVybmFsKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVj
dFN0b3JlLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4LCBQYXNzUmVmUHRy
PElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uKQordm9pZCBJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsOjpEZWxldGVJbmRleE9wZXJhdGlvbjo6cGVyZm9ybShTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmpl
Y3RTdG9yZSwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCwgUGFzc1JlZlB0
cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbikKIHsKKyAgICBJREJfVFJB
Q0UoIkRlbGV0ZUluZGV4T3BlcmF0aW9uIik7CiAgICAgb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9y
ZSgpLT5kZWxldGVJbmRleCh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwg
b2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwgb2JqZWN0U3RvcmUtPmlkKCksIGluZGV4LT5pZCgp
KTsKIH0KIAotdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpvcGVuQ3Vyc29yKFBhc3NS
ZWZQdHI8SURCS2V5UmFuZ2U+IHBycFJhbmdlLCBJREJDdXJzb3I6OkRpcmVjdGlvbiBkaXJlY3Rp
b24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIElEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZTo6VGFza1R5cGUgdGFza1R5cGUsIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZSogdHJhbnNhY3Rpb25QdHIsIEV4Y2VwdGlvbkNvZGUmKQordm9pZCBJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsOjpvcGVuQ3Vyc29yKFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHJh
bmdlLCBJREJDdXJzb3I6OkRpcmVjdGlvbiBkaXJlY3Rpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPiBwcnBDYWxsYmFja3MsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZTo6VGFza1R5
cGUgdGFza1R5cGUsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25Q
dHIsIEV4Y2VwdGlvbkNvZGUmKQogewogICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbDo6b3BlbkN1cnNvciIpOwotICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsPiBvYmplY3RTdG9yZSA9IHRoaXM7Ci0gICAgUmVmUHRyPElEQktleVJhbmdlPiByYW5nZSA9
IHBycFJhbmdlOwogICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxi
YWNrczsKICAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24g
PSBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpmcm9tKHRyYW5zYWN0aW9uUHRyKTsKLSAgICBp
ZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soCi0gICAgICAgICAgICBjcmVhdGVDYWxsYmFj
a1Rhc2soJklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Om9wZW5DdXJzb3JJbnRlcm5hbCwgb2Jq
ZWN0U3RvcmUsIHJhbmdlLCBkaXJlY3Rpb24sIGNhbGxiYWNrcywgdGFza1R5cGUsIHRyYW5zYWN0
aW9uKSkpIHsKKyAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soT3Blbk9iamVjdFN0
b3JlQ3Vyc29yT3BlcmF0aW9uOjpjcmVhdGUodGhpcywgcmFuZ2UsIGRpcmVjdGlvbiwgY2FsbGJh
Y2tzLCB0YXNrVHlwZSwgdHJhbnNhY3Rpb24pKSkgewogICAgICAgICBjYWxsYmFja3MtPm9uRXJy
b3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJREJfQUJP
UlRfRVJSKSk7CiAgICAgfQogfQogCi12b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Om9w
ZW5DdXJzb3JJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJLZXlSYW5n
ZT4gcmFuZ2UsIElEQkN1cnNvcjo6RGlyZWN0aW9uIGRpcmVjdGlvbiwgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+IGNhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlOjpUYXNr
VHlwZSB0YXNrVHlwZSwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFu
c2FjdGlvbikKK3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6T3Blbk9iamVjdFN0b3Jl
Q3Vyc29yT3BlcmF0aW9uOjpwZXJmb3JtKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVm
UHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElE
QktleVJhbmdlPiByYW5nZSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9uLCBQYXNzUmVm
UHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZh
Y2U6OlRhc2tUeXBlIHRhc2tUeXBlLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGw+IHRyYW5zYWN0aW9uKQogewotICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbDo6b3BlbkN1cnNvckludGVybmFsIik7CisgICAgSURCX1RSQUNFKCJPcGVuT2JqZWN0U3Rv
cmVDdXJzb3IiKTsKIAogICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gYmFja2lu
Z1N0b3JlQ3Vyc29yID0gb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5vcGVuT2JqZWN0U3Rv
cmVDdXJzb3IodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG9iamVjdFN0
b3JlLT5kYXRhYmFzZUlkKCksIG9iamVjdFN0b3JlLT5pZCgpLCByYW5nZS5nZXQoKSwgZGlyZWN0
aW9uKTsKICAgICAvLyBUaGUgZnJvbnRlbmQgaGFzIGJlZ3VuIGluZGV4aW5nLCBzbyB0aGlzIHBh
dXNlcyB0aGUgdHJhbnNhY3Rpb24KQEAgLTQ3NSwxOCArNTYzLDE4IEBAIHZvaWQgSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbDo6b3BlbkN1cnNvckludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBQYXNzCiAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoY3Vyc29yLCBjdXJzb3ItPmtleSgp
LCBjdXJzb3ItPnByaW1hcnlLZXkoKSwgY3Vyc29yLT52YWx1ZSgpKTsKIH0KIAotdm9pZCBJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjb3VudChQYXNzUmVmUHRyPElEQktleVJhbmdlPiByYW5n
ZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvblB0ciwgRXhjZXB0aW9uQ29kZSYpCit2b2lkIElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw6OmNvdW50KFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHJhbmdl
LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBFeGNlcHRpb25Db2RlJikKIHsKICAgICBJ
REJfVFJBQ0UoIklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNvdW50Iik7CisgICAgUmVmUHRy
PElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOwogICAgIFJlZlB0cjxJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiA9IElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGw6OmZyb20odHJhbnNhY3Rpb25QdHIpOwotICAgIGlmICghdHJhbnNhY3Rpb24tPnNjaGVk
dWxlVGFzaygKLSAgICAgICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbDo6Y291bnRJbnRlcm5hbCwgdGhpcywgcmFuZ2UsIGNhbGxiYWNrcywgdHJhbnNh
Y3Rpb24pKSkKKyAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soT2JqZWN0U3RvcmVD
b3VudE9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIHJhbmdlLCBjYWxsYmFja3MsIHRyYW5zYWN0aW9u
KSkpCiAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUo
SURCRGF0YWJhc2VFeGNlcHRpb246OklEQl9BQk9SVF9FUlIpKTsKIH0KIAotdm9pZCBJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsOjpjb3VudEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNz
UmVmUHRyPElEQktleVJhbmdlPiByYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxi
YWNrcywgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbikK
K3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6T2JqZWN0U3RvcmVDb3VudE9wZXJhdGlv
bjo6cGVyZm9ybShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcmFu
Z2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24pCiB7Ci0gICAgSURCX1RSQUNFKCJJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjb3VudEludGVybmFsIik7CisgICAgSURCX1RSQUNFKCJP
YmplY3RTdG9yZUNvdW50T3BlcmF0aW9uIik7CiAgICAgdWludDMyX3QgY291bnQgPSAwOwogICAg
IFJlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gYmFja2luZ1N0b3JlQ3Vyc29yID0gb2Jq
ZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5vcGVuT2JqZWN0U3RvcmVLZXlDdXJzb3IodHJhbnNh
Y3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG9iamVjdFN0b3JlLT5kYXRhYmFzZUlk
KCksIG9iamVjdFN0b3JlLT5pZCgpLCByYW5nZS5nZXQoKSwgSURCQ3Vyc29yOjpORVhUKTsKICAg
ICBpZiAoIWJhY2tpbmdTdG9yZUN1cnNvcikgewpAQCAtNTA5LDE3ICs1OTcsMTcgQEAgdm9pZCBJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpsb2FkSW5kZXhlcygpCiAgICAgICAgIG1faW5kZXhl
cy5zZXQoaW5kZXhlc1tpXS5pZCwgSURCSW5kZXhCYWNrZW5kSW1wbDo6Y3JlYXRlKG1fZGF0YWJh
c2UsIHRoaXMsIGluZGV4ZXNbaV0pKTsKIH0KIAotdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsOjpyZW1vdmVJbmRleEZyb21NYXAoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQ
dHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURC
SW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgpCit2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6
OkNyZWF0ZUluZGV4QWJvcnRPcGVyYXRpb246OnBlcmZvcm0oU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBh
c3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgpCiB7CiAgICAgQVNTRVJUKG9iamVj
dFN0b3JlLT5tX2luZGV4ZXMuY29udGFpbnMoaW5kZXgtPmlkKCkpKTsKICAgICBvYmplY3RTdG9y
ZS0+bV9pbmRleGVzLnJlbW92ZShpbmRleC0+aWQoKSk7CiB9CiAKLXZvaWQgSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDo6YWRkSW5kZXhUb01hcChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFz
c1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0
cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCkKK3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbDo6RGVsZXRlSW5kZXhBYm9ydE9wZXJhdGlvbjo6cGVyZm9ybShTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9y
ZSwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBwcnBJbmRleCkKIHsKLSAgICBSZWZQ
dHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXhQdHIgPSBpbmRleDsKLSAgICBBU1NFUlQoIW9i
amVjdFN0b3JlLT5tX2luZGV4ZXMuY29udGFpbnMoaW5kZXhQdHItPmlkKCkpKTsKLSAgICBvYmpl
Y3RTdG9yZS0+bV9pbmRleGVzLnNldChpbmRleFB0ci0+aWQoKSwgaW5kZXhQdHIpOworICAgIFJl
ZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCA9IHBycEluZGV4OworICAgIEFTU0VSVCgh
b2JqZWN0U3RvcmUtPm1faW5kZXhlcy5jb250YWlucyhpbmRleC0+aWQoKSkpOworICAgIG9iamVj
dFN0b3JlLT5tX2luZGV4ZXMuc2V0KGluZGV4LT5pZCgpLCBpbmRleCk7CiB9CiAKIFBhc3NSZWZQ
dHI8SURCS2V5PiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpnZW5lcmF0ZUtleShQYXNzUmVm
UHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbC5oCmluZGV4IGNmZGUzYmU3YjM0NTFiYjJiNjMyNmVkYWI2MDdlZDI4MGI0MzQyMDQu
LmI0NzA5MDdlYjg1MGQ3YmI4YmE3M2EwNGNkYzYwZDA1MDVjNmVmMmEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsLmgKQEAgLTk4LDE5ICs5OCwxOSBAQCBwcml2YXRlOgogICAgIFBhc3NSZWZQdHI8
SURCS2V5PiBnZW5lcmF0ZUtleShQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+
KTsKICAgICB2b2lkIHVwZGF0ZUtleUdlbmVyYXRvcihQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9u
QmFja2VuZEltcGw+LCBjb25zdCBJREJLZXkqLCBib29sIGNoZWNrQ3VycmVudCk7CiAKLSAgICBz
dGF0aWMgdm9pZCBnZXRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0
cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBh
c3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsPik7Ci0gICAgc3RhdGljIHZvaWQgcHV0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8U2Vy
aWFsaXplZFNjcmlwdFZhbHVlPiwgUGFzc1JlZlB0cjxJREJLZXk+LCBQdXRNb2RlLCBQYXNzUmVm
UHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4s
IFBhc3NPd25QdHI8VmVjdG9yPGludDY0X3Q+ID4gcG9wSW5kZXhOYW1lcywgUGFzc093blB0cjxW
ZWN0b3I8SW5kZXhLZXlzPiA+KTsKLSAgICBzdGF0aWMgdm9pZCBkZWxldGVJbnRlcm5hbChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
PiwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFz
c1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPik7Ci0gICAgc3RhdGljIHZvaWQgc2V0
SW5kZXhlc1JlYWR5SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NPd25QdHI8VmVjdG9yPGludDY0X3Q+ID4g
cG9wSW5kZXhOYW1lcywgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPik7Ci0g
ICAgc3RhdGljIHZvaWQgY2xlYXJJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFz
c1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFj
a3M+LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+KTsKLSAgICBzdGF0aWMg
dm9pZCBjcmVhdGVJbmRleEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVm
UHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2Vu
ZEltcGw+LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+KTsKLSAgICBzdGF0
aWMgdm9pZCBkZWxldGVJbmRleEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNz
UmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQkluZGV4QmFj
a2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+KTsKLSAgICBz
dGF0aWMgdm9pZCBvcGVuQ3Vyc29ySW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBh
c3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCS2V5UmFu
Z2U+LCBJREJDdXJzb3I6OkRpcmVjdGlvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlLCBQYXNzUmVmUHRyPElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGw+KTsKLSAgICBzdGF0aWMgdm9pZCBjb3VudEludGVybmFsKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+
LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNz
UmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+KTsKLQotICAgIC8vIFRoZXNlIGFyZSB1
c2VkIGFzIHNldFZlcnNpb24gdHJhbnNhY3Rpb24gYWJvcnQgdGFza3MuCi0gICAgc3RhdGljIHZv
aWQgcmVtb3ZlSW5kZXhGcm9tTWFwKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRy
PElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZElt
cGw+KTsKLSAgICBzdGF0aWMgdm9pZCBhZGRJbmRleFRvTWFwKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElE
QkluZGV4QmFja2VuZEltcGw+KTsKKyAgICBjbGFzcyBPYmplY3RTdG9yZVJldHJpZXZhbE9wZXJh
dGlvbjsKKyAgICBjbGFzcyBPYmplY3RTdG9yZVN0b3JhZ2VPcGVyYXRpb247CisgICAgY2xhc3Mg
T2JqZWN0U3RvcmVJbmRleGVzUmVhZHlPcGVyYXRpb247CisgICAgY2xhc3MgT2JqZWN0U3RvcmVE
ZWxldGlvbk9wZXJhdGlvbjsKKyAgICBjbGFzcyBPYmplY3RTdG9yZUNsZWFyT3BlcmF0aW9uOwor
ICAgIGNsYXNzIENyZWF0ZUluZGV4T3BlcmF0aW9uOworICAgIGNsYXNzIERlbGV0ZUluZGV4T3Bl
cmF0aW9uOworICAgIGNsYXNzIE9wZW5PYmplY3RTdG9yZUN1cnNvck9wZXJhdGlvbjsKKyAgICBj
bGFzcyBPYmplY3RTdG9yZUNvdW50T3BlcmF0aW9uOworCisgICAgLy8gV2hlbiBhICJ2ZXJzaW9u
Y2hhbmdlIiB0cmFuc2FjdGlvbiBhYm9ydHMsIHRoZXNlIHJlc3RvcmUgdGhlIGJhY2stZW5kIG9i
amVjdCBoaWVyYXJjaHkuCisgICAgY2xhc3MgQ3JlYXRlSW5kZXhBYm9ydE9wZXJhdGlvbjsKKyAg
ICBjbGFzcyBEZWxldGVJbmRleEFib3J0T3BlcmF0aW9uOwogCiAgICAgY29uc3QgSURCRGF0YWJh
c2VCYWNrZW5kSW1wbCogbV9kYXRhYmFzZTsKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>